[
  {
    "path": ".config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"altcover.global\": {\n      \"version\": \"9.0.102\",\n      \"commands\": [\n        \"altcover\"\n      ],\n      \"rollForward\": false\n    },\n    \"coveralls.net\": {\n      \"version\": \"4.0.1\",\n      \"commands\": [\n        \"csmacnz.Coveralls\"\n      ],\n      \"rollForward\": false\n    },\n    \"nunit.consolerunner.netcore\": {\n      \"version\": \"3.22.0\",\n      \"commands\": [\n        \"nunit\"\n      ],\n      \"rollForward\": false\n    }\n  }\n}"
  },
  {
    "path": ".editorconfig",
    "content": "# Remove the line below if you want to inherit .editorconfig settings from higher directories\nroot = true\n\n# C# files\n[*.cs]\n\n#### Core EditorConfig Options ####\n\n# Indentation and spacing\nindent_size = 4\nindent_style = tab\ntab_width = 4\n\n# New line preferences\nend_of_line = crlf\ninsert_final_newline = true\n\n#### .NET Coding Conventions ####\n\n# Organize usings\ndotnet_separate_import_directive_groups = true\ndotnet_sort_system_directives_first = true\nfile_header_template = unset\n\n# this. and Me. preferences\ndotnet_style_qualification_for_event = false:silent\ndotnet_style_qualification_for_field = false:silent\ndotnet_style_qualification_for_method = false:silent\ndotnet_style_qualification_for_property = false:silent\n\n# Language keywords vs BCL types preferences\ndotnet_style_predefined_type_for_locals_parameters_members = true:silent\ndotnet_style_predefined_type_for_member_access = true:silent\n\n# Parentheses preferences\ndotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent\ndotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent\ndotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent\n\n# Modifier preferences\ndotnet_style_require_accessibility_modifiers = for_non_interface_members:silent\n\n# Expression-level preferences\ndotnet_style_coalesce_expression = true:suggestion\ndotnet_style_collection_initializer = true:suggestion\ndotnet_style_explicit_tuple_names = true:suggestion\ndotnet_style_null_propagation = true:suggestion\ndotnet_style_object_initializer = true:suggestion\ndotnet_style_operator_placement_when_wrapping = beginning_of_line\ndotnet_style_prefer_auto_properties = true:silent\ndotnet_style_prefer_compound_assignment = true:suggestion\ndotnet_style_prefer_conditional_expression_over_assignment = true:silent\ndotnet_style_prefer_conditional_expression_over_return = true:silent\ndotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion\ndotnet_style_prefer_inferred_tuple_names = true:suggestion\ndotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion\ndotnet_style_prefer_simplified_boolean_expressions = true:suggestion\ndotnet_style_prefer_simplified_interpolation = true:suggestion\n\n# Field preferences\ndotnet_style_readonly_field = true:suggestion\n\n# Parameter preferences\ndotnet_code_quality_unused_parameters = all:suggestion\n\n#### C# Coding Conventions ####\n\n# var preferences\ncsharp_style_var_elsewhere = false:silent\ncsharp_style_var_for_built_in_types = false:silent\ncsharp_style_var_when_type_is_apparent = false:silent\n\n# Expression-bodied members\ncsharp_style_expression_bodied_accessors = true:silent\ncsharp_style_expression_bodied_constructors = false:silent\ncsharp_style_expression_bodied_indexers = true:silent\ncsharp_style_expression_bodied_lambdas = true:silent\ncsharp_style_expression_bodied_local_functions = false:silent\ncsharp_style_expression_bodied_methods = false:silent\ncsharp_style_expression_bodied_operators = false:silent\ncsharp_style_expression_bodied_properties = true:silent\n\n# Pattern matching preferences\ncsharp_style_pattern_matching_over_as_with_null_check = true:suggestion\ncsharp_style_pattern_matching_over_is_with_cast_check = true:suggestion\ncsharp_style_prefer_switch_expression = true:suggestion\n\n# Null-checking preferences\ncsharp_style_conditional_delegate_call = true:suggestion\n\n# Modifier preferences\ncsharp_prefer_static_local_function = true:suggestion\ncsharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent\n\n# Code-block preferences\ncsharp_prefer_braces = true:silent\ncsharp_prefer_simple_using_statement = true:suggestion\n\n# Expression-level preferences\ncsharp_prefer_simple_default_expression = true:suggestion\ncsharp_style_deconstructed_variable_declaration = true:suggestion\ncsharp_style_inlined_variable_declaration = true:suggestion\ncsharp_style_pattern_local_over_anonymous_function = true:suggestion\ncsharp_style_prefer_index_operator = true:suggestion\ncsharp_style_prefer_range_operator = true:suggestion\ncsharp_style_throw_expression = true:suggestion\ncsharp_style_unused_value_assignment_preference = discard_variable:suggestion\ncsharp_style_unused_value_expression_statement_preference = discard_variable:silent\n\n# 'using' directive preferences\ncsharp_using_directive_placement = outside_namespace:silent\n\n#### C# Formatting Rules ####\n\n# New line preferences\ncsharp_new_line_before_catch = false\ncsharp_new_line_before_else = false\ncsharp_new_line_before_finally = false\ncsharp_new_line_before_members_in_anonymous_types = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_open_brace = methods,types\ncsharp_new_line_between_query_expression_clauses = true\n\n# Indentation preferences\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents = true\ncsharp_indent_case_contents_when_block = true\ncsharp_indent_labels = one_less_than_current\ncsharp_indent_switch_labels = false\n\n# Space preferences\ncsharp_space_after_cast = true\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_after_comma = true\ncsharp_space_after_dot = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_around_declaration_statements = false\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_before_comma = false\ncsharp_space_before_dot = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = true\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = true\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_parentheses = false\ncsharp_space_between_square_brackets = false\n\n# Wrapping preferences\ncsharp_preserve_single_line_blocks = true\ncsharp_preserve_single_line_statements = true\n\n#### Naming styles ####\n\n# Naming rules\n\ndotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion\ndotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface\ndotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i\n\ndotnet_naming_rule.types_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.types_should_be_pascal_case.symbols = types\ndotnet_naming_rule.types_should_be_pascal_case.style = pascal_case\n\ndotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members\ndotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case\n\n# Symbol specifications\n\ndotnet_naming_symbols.interface.applicable_kinds = interface\ndotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.interface.required_modifiers = \n\ndotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum\ndotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.types.required_modifiers = \n\ndotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method\ndotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.non_field_members.required_modifiers = \n\n# Naming styles\n\ndotnet_naming_style.pascal_case.required_prefix = \ndotnet_naming_style.pascal_case.required_suffix = \ndotnet_naming_style.pascal_case.word_separator = \ndotnet_naming_style.pascal_case.capitalization = pascal_case\n\ndotnet_naming_style.begins_with_i.required_prefix = I\ndotnet_naming_style.begins_with_i.required_suffix = \ndotnet_naming_style.begins_with_i.word_separator = \ndotnet_naming_style.begins_with_i.capitalization = pascal_case\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.csproj text\n*.nuspec text\n*.sln eol=crlf\n*.msg text\n*.txt text\n*.yml text\n*.cs text\n*.md text\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: jstedfast\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**Platform (please complete the following information):**\n - OS: [e.g. Windows, Linux, MacOS, iOS, Android, Windows Phone, etc.]\n - .NET Runtime: [e.g. CoreCLR, Mono]\n - .NET Framework: [e.g. .Net Core, .NET 4.5, UWP, etc.]\n - MailKit Version: \n\n**Exception**\nIf you got an exception, please include the exception Message *and* StackTrace.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Code Snippets**\nIf applicable, add code snippets to help explain your problem.\n\n```csharp\n// Add your code snippet here.\n```\n\n**Protocol Logs**\nPlease include a protocol log (scrubbed of any authentication data), especially\nif you got an exception such as `Syntax error in XYZ. Unexpected token: ...`.\n\nTo get a protocol log, follow one of the following code snippets:\n\n```csharp\n// log to a file called 'imap.log'\nvar client = new ImapClient (new ProtocolLogger (\"imap.log\"));\n```\n\n```csharp\n// log to a file called 'pop3.log'\nvar client = new Pop3Client (new ProtocolLogger (\"pop3.log\"));\n```\n\n```csharp\n// log to a file called 'smtp.log'\nvar client = new SmtpClient (new ProtocolLogger (\"smtp.log\"));\n```\n\nNote: if the protocol log contains sensitive information, feel free to email it to me at\njestedfa@microsoft.com instead of including it in the GitHub issue.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file\n\nversion: 2\nupdates:\n  - package-ecosystem: \"nuget\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n      day: \"monday\"\n      time: \"08:00\"\n      timezone: \"America/New_York\"\n"
  },
  {
    "path": ".github/workflows/aot-compatibility.yml",
    "content": "name: AOT Compatibility\n\non:\n  push:\n    branches: [ 'master' ]\n    paths-ignore:\n    - '**.md'\n  pull_request:\n    branches: [ 'master' ]\n    paths-ignore:\n    - '**.md'\n\njobs:\n  aot-test:\n    strategy:\n      fail-fast: false  # ensures the entire test matrix is run, even if one permutation fails\n      matrix:\n        os: [ windows-latest ]\n        mailkitlite: [ true ]\n\n    runs-on: ${{ matrix.os }}\n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0 # fetching all\n        submodules: true\n\n    - name: Setup dotnet\n      uses: actions/setup-dotnet@v4\n      with:\n        dotnet-version: 8.0.x\n\n    - name: publish AOT testApp, assert static analysis warning count, and run the app\n      shell: pwsh\n      run: .\\scripts\\test-aot-compatibility.ps1 ${{ matrix.mailkitlite }}\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron: '38 12 * * 1'\n\njobs:\n  analyze:\n    name: Analyze\n    # Runner size impacts CodeQL analysis time. To learn more, please see:\n    #   - https://gh.io/recommended-hardware-resources-for-running-codeql\n    #   - https://gh.io/supported-runners-and-hardware-resources\n    #   - https://gh.io/using-larger-runners\n    # Consider using larger runners for possible analysis time improvements.\n    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}\n    timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'csharp' ]\n\n    steps:\n    - name: Setup/Install the .NET 8 SDK\n      uses: actions/setup-dotnet@v4\n      with:\n          dotnet-version: 8.0.x\n    \n    - name: Checkout repository\n      uses: actions/checkout@v4\n      with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          submodules: recursive\n          fetch-depth: 0\n\n    - name: Run .NET restore\n      shell: pwsh\n      run: |\n          dotnet restore MailKit.sln\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v3\n      with:\n        languages: ${{ matrix.language }}\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n\n        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs\n        # queries: security-extended,security-and-quality\n\n    - name: Build\n      continue-on-error: false\n      shell: pwsh\n      run: |\n          dotnet msbuild MailKit.sln -property:Platform=\"Any CPU\" -property:Configuration=Release\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v3\n      with:\n        category: \"/language:${{matrix.language}}\"\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: Build\n\non: [push, pull_request, workflow_dispatch]\n\njobs:\n  ci:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ windows-latest, ubuntu-latest ]\n        build-configuration: [ Debug, Release ]\n    outputs:\n      latest-version: ${{ steps.semantic_version.outputs.version_num }}\n    environment: ci\n    env:\n      SOLUTION_PATH: MailKit.sln\n      BUILD_PLATFORM: Any CPU\n      BUILD_CONFIGURATION: ${{ matrix.build-configuration }}\n      GENERATE_CODE_COVERAGE: ${{ matrix.os == 'windows-latest' && matrix.build-configuration == 'Debug' }}\n      MONO_RUNTIME: ${{ matrix.os != 'windows-latest' }}\n      PUBLISH: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.os == 'windows-latest' && matrix.build-configuration == 'Release' }}\n\n    steps:\n      - name: Setup/Install the .NET 8 SDK\n        id: install-netsdk8\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 8.0.x\n\n      - name: Setup/Install the .NET 10 SDK\n        id: install-netsdk\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 10.0.x\n\n      - if: runner.os == 'Windows'\n        name: Setup MSBuild\n        id: setup_msbuild\n        uses: microsoft/setup-msbuild@v2\n\n      - name: Checkout repository\n        id: checkout_repo\n        uses: actions/checkout@v3\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          submodules: recursive\n          fetch-depth: 0\n\n      - name: Get semantic version from csproj\n        id: semantic_version\n        shell: pwsh\n        run: |\n          $xml = [xml](gc MailKit/MailKit.csproj)\n          $SEMANTIC_VERSION_NUMBER = $xml.Project.PropertyGroup.VersionPrefix\n          $VERSION_NUM = $SEMANTIC_VERSION_NUMBER[0].Trim()\n          Write-Host \"version_num=${VERSION_NUM}\"\n          [IO.File]::AppendAllText($env:GITHUB_OUTPUT, \"version_num=${VERSION_NUM}$([Environment]::NewLine)\")\n\n      - if: ${{ env.PUBLISH == 'true' }}\n        name: Get latest tag\n        id: get_latest_tag\n        shell: pwsh\n        run: |\n          $LATEST_TAG = git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags \"https://github.com/$env:GIT_URL.git\" '*.*.*' | tail --lines=1 | cut --delimiter='/' --fields=3\n          Write-Host \"tag=$LATEST_TAG\"\n          [IO.File]::AppendAllText($env:GITHUB_OUTPUT, \"tag=${LATEST_TAG}$([Environment]::NewLine)\")\n        env:\n          GIT_URL: ${{ github.repository }}\n\n      - if: ${{ env.PUBLISH == 'true' && steps.semantic_version.outputs.version_num != steps.get_latest_tag.outputs.tag }}\n        name: Add new tag to repo\n        id: add_new_tag_to_repo\n        continue-on-error: true\n        shell: pwsh\n        run: |\n          git config --global user.name $env:GIT_USER_NAME\n          git config --global user.email $env:GIT_USER_EMAIL\n          git tag -a -m \"Tagged for $env:NEW_VERSION_NUM\" $env:NEW_VERSION_NUM\n          git push --follow-tags\n        env:\n          GIT_USER_NAME: ${{ github.event.head_commit.author.username }}\n          GIT_USER_EMAIL: ${{ github.event.head_commit.author.email }}\n          NEW_VERSION_NUM: ${{ steps.semantic_version.outputs.version_num }}\n\n      - name: Run .NET restore\n        shell: pwsh\n        run: |\n          dotnet restore $env:SOLUTION_PATH\n\n      - name: Run .NET tool restore\n        shell: pwsh\n        run: |\n          dotnet tool restore\n\n      - name: Build solution\n        id: build_solution\n        continue-on-error: true\n        shell: pwsh\n        run: |\n          dotnet msbuild $env:SOLUTION_PATH -property:Platform=$env:BUILD_PLATFORM -property:Configuration=$env:BUILD_CONFIGURATION -property:MonoRuntime=$env:MONO_RUNTIME\n\n      - name: Run unit tests\n        id: run_unit_tests\n        continue-on-error: true\n        shell: pwsh\n        run: |\n          & ./scripts/test.ps1 -Configuration:$env:BUILD_CONFIGURATION -GenerateCodeCoverage:$env:GENERATE_CODE_COVERAGE\n\n      - name: Upload unit test results\n        id: upload_test_results\n        continue-on-error: true\n        uses: actions/upload-artifact@v4\n        with:\n          name: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}-${{ matrix.os }}-${{ matrix.build-configuration }}-TestResults.xml\n          path: TestResult.xml\n\n      - if: ${{ env.GENERATE_CODE_COVERAGE == 'true' }}\n        name: Upload code coverage data to coveralls.io\n        id: upload_to_coveralls\n        shell: pwsh\n        run: |\n          & ./scripts/coveralls.ps1\n        env:\n          COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}\n          GIT_COMMIT_SHA: ${{ github.sha }}\n          GIT_REF: ${{ github.ref }}\n          GIT_ACTOR: ${{ github.event.head_commit.author.username }}\n          GIT_ACTOR_EMAIL: ${{ github.event.head_commit.author.email }}\n          GIT_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}\n          COVERALLS_JOB_ID: ${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}\n\n      - if: ${{ env.PUBLISH == 'true' }}\n        name: Create NuGet package\n        id: create_nuget_package\n        shell: pwsh\n        run: |\n          nuget pack nuget/MailKit.nuspec -Version \"$env:LATEST_VERSION.$env:GITHUB_RUN_NUMBER\"\n        env:\n          LATEST_VERSION: ${{ steps.semantic_version.outputs.version_num }}\n\n      - if: ${{ env.PUBLISH == 'true' }}\n        name: Push NuGet package to MyGet\n        id: push_nuget_package\n        shell: pwsh\n        run: |\n          nuget push $env:NUGET_PKG_PATH -ApiKey $env:MYGET_API_KEY -Source https://www.myget.org/F/mimekit/api/v3/index.json\n        env:\n          NUGET_PKG_PATH: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}.nupkg\n          MYGET_API_KEY: ${{ secrets.MYGET_API_KEY }}\n\n      - if: ${{ env.PUBLISH == 'true' }}\n        name: Upload NuGet package as artifact\n        id: upload_nuget_package\n        uses: actions/upload-artifact@v4\n        with:\n          name: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}.nupkg\n          path: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}.nupkg\n\n# Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)\n"
  },
  {
    "path": ".gitignore",
    "content": "MailKit/Resources/Resource.designer.cs\n*.csproj.nuget.dgspec.json\n*.csproj.nuget.cache\n*project.lock.json\n*.userprefs\n*.user\n*.suo\n*~\ntest-results\npackages\nobj\nbin\n.vs\n*.patch\n*.tree\n*.zip\n.idea\n.DS_Store\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"submodules/MimeKit\"]\n\tpath = submodules/MimeKit\n\turl = https://github.com/jstedfast/MimeKit.git\n"
  },
  {
    "path": "AotCompatibility/AotCompatibility.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n    <PublishAot>true</PublishAot>\n    <TrimmerSingleWarn>false</TrimmerSingleWarn>\n    <SelfContained>true</SelfContained>\n    <InvariantGlobalization>true</InvariantGlobalization>\n    <UseMailKitLite Condition=\" '$(UseMailKitLite)' == '' \">false</UseMailKitLite>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Text.Encoding.CodePages\" Version=\"8.0.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\MailKit\\MailKit.csproj\" Condition=\" '$(UseMailKitLite)' == 'false' \" />\n    <ProjectReference Include=\"..\\submodules\\MimeKit\\MimeKit.csproj\" Condition=\" '$(UseMailKitLite)' == 'false' \" />\n    <TrimmerRootAssembly Include=\"MailKit\" Path=\"..\\MailKit\\MailKit.csproj\" Condition=\" '$(UseMailKitLite)' == 'false' \" />\n    <TrimmerRootAssembly Include=\"MimeKit\" Path=\"..\\submodules\\MimeKit\\MimeKit.csproj\" Condition=\" '$(UseMailKitLite)' == 'false' \" />\n\n    <ProjectReference Include=\"..\\MailKit\\MailKitLite.csproj\" Condition=\" '$(UseMailKitLite)' == 'true' \" />\n    <ProjectReference Include=\"..\\submodules\\MimeKit\\MimeKitLite.csproj\" Condition=\" '$(UseMailKitLite)' == 'true' \" />\n    <TrimmerRootAssembly Include=\"MailKitLite\" Path=\"..\\MailKit\\MailKitLite.csproj\" Condition=\" '$(UseMailKitLite)' == 'true' \" />\n    <TrimmerRootAssembly Include=\"MimeKitLite\" Path=\"..\\submodules\\MimeKit\\MimeKitLite.csproj\" Condition=\" '$(UseMailKitLite)' == 'true' \" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "AotCompatibility/Program.cs",
    "content": "﻿//\n// Program.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2024 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Net;\nusing MailKit.Net.Imap;\nusing MailKit.Net.Pop3;\nusing MailKit.Net.Smtp;\n\nnamespace AotCompatibility {\n    class Program\n    {\n        static int Main (string[] args)\n        {\n            try {\n                Encoding.RegisterProvider (CodePagesEncodingProvider.Instance);\n\n                var message = new MimeMessage ();\n\n                using (var imap = new ImapClient ()) {}\n                using (var pop3 = new Pop3Client ()) {}\n                using (var smtp = new SmtpClient ()) {}\n\n                return 0;\n            } catch (Exception ex) {\n                Console.WriteLine (ex);\n                return -1;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Documentation/Content/Creating-Messages.aml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Creating-Messages\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <para>MimeKit provides a number of ways to create messages.</para>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"CreatingSimpleMessage\">\n      <title>Creating a Simple Message</title>\n      <content>\n        <para>\n          Creating MIME messages using MimeKit is really trivial.\n        </para>\n        <code language=\"c#\" source=\"Examples\\CreateSimpleMessage.cs\"/>\n        <para>\n          A <codeEntityReference>T:MimeKit.TextPart</codeEntityReference> is a leaf-node\n          MIME part with a text media-type. The first argument to the TextPart constructor\n          specifies the media-subtype, in this case, <literal>plain</literal>. Another\n          media subtype you are probably familiar with is the <literal>html</literal>\n          subtype. Some other examples include <literal>enriched</literal>,\n          <literal>rtf</literal>, and <literal>xml</literal>.\n        </para>\n        <para>\n          The <codeEntityReference>P:MimeKit.TextPart.Text</codeEntityReference> property\n          is the easiest way to both get and set the string content of the MIME part.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"CreateMessageWithAttachments\">\n      <title>Creating a Message with Attachments</title>\n      <content>\n        <para>\n          Attachments are just like any other\n          <codeEntityReference>T:MimeKit.MimePart</codeEntityReference>, the only difference\n          is that they typically have a <literal>Content-Disposition</literal> header with a\n          value of <literal>attachment</literal> instead of <literal>inline</literal> or no\n          <literal>Content-Disposition</literal> header at all.\n        </para>\n        <code language=\"c#\" source=\"Examples\\CreateMultipartMixed.cs\"/>\n        <para>\n          Of course, that is just a simple example. A lot of modern mail clients such as Outlook\n          or Thunderbird will send out both a <literal>text/html</literal> and a\n          <literal>text/plain</literal> version of the message text. To do this, you'd create a\n          <codeEntityReference>T:MimeKit.TextPart</codeEntityReference> for each part and then\n          add them to a <literal>multipart/alternative</literal> like so:\n        </para>\n        <code language=\"c#\" source=\"Examples\\CreateMultipartAlternative.cs\"/>\n      </content>\n    </section>\n\n    <section address=\"UsingBodyBuilder\">\n      <title>Using a BodyBuilder</title>\n      <content>\n        <para>\n          If you are used to <codeEntityReference>N:System.Net.Mail</codeEntityReference>'s API\n          for creating messages, you will probably find using a\n          <codeEntityReference>T:MimeKit.BodyBuilder</codeEntityReference> much more friendly\n          than manually creating the tree of MIME parts. Here's how you could create a message\n          body using a <codeEntityReference>T:MimeKit.BodyBuilder</codeEntityReference>:\n        </para>\n        <code language=\"c#\" source=\"Examples\\BodyBuilder.cs\" region=\"Complex\"/>\n      </content>\n    </section>\n\n    <section address=\"SystemNetMail\">\n      <title>Importing from System.Net.Mail</title>\n      <content>\n        <para>\n          To make things even simpler still, MimeKit allows you to explicitly cast\n          a <codeEntityReference>T:System.Net.Mail.MailMessage</codeEntityReference>\n          to a <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>.\n        </para>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Parsing-Messages\"/>\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Frequently-Asked-Questions.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Frequently-Asked-Questions\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"CompletelyFree\">\n      <title>Are MimeKit and MailKit completely free? Can I use them in my proprietary product(s)?</title>\n      <content>\n        <para>\n          Yes. MimeKit and MailKit are both completely free and open source. They are both covered under\n          the\n          <externalLink>\n            <linkText>MIT</linkText>\n            <linkUri>https://opensource.org/licenses/MIT</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> license.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"CodePages\">\n      <title>Why do I get \"NotSupportedException: No data is available for encoding ######.\"?</title>\n      <content>\n        <para>\n          In .NET Core, Microsoft decided to split out the non-Unicode text encodings into a separate NuGet package called\n          <externalLink>\n            <linkText>System.Text.Encoding.CodePages</linkText>\n              <linkUri>https://www.nuget.org/packages/System.Text.Encoding.CodePages</linkUri>\n              <linkTarget>_blank</linkTarget>\n            </externalLink>.\n          </para>\n          <para>\n            MimeKit already pulls in a reference to this NuGet package, so you shouldn't need to add a reference to it in\n            your project. That said, you will still need to register the encoding provider. It is recommended that you add\n            the following line of code to your program initialization (e.g. the beginning of your program's Main() method):\n          </para>\n          <code language=\"c#\">\n            System.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);\n          </code>\n      </content>\n    </section>\n\n    <section address=\"GarbledText\">\n      <title>Why does text show up garbled in my ASP.NET Core / .NET Core / .NET 5+ app?</title>\n      <content>\n        <para>\n          .NET Core (and ASP.NET Core by extension) and .NET 5 (and later) only provide the Unicode encodings, ASCII and ISO-8859-1 by default.\n          Other text encodings are not available to your application unless your application\n          <externalLink>\n            <linkText>registers</linkText>\n            <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.registerprovider?view=net-5.0</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> the encoding\n          provider that provides all of the additional encodings.\n        </para>\n        <para>\n          First, add a package reference for the\n          <externalLink>\n            <linkText>System.Text.Encoding.CodePages</linkText>\n            <linkUri>https://www.nuget.org/packages/System.Text.Encoding.CodePages</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> nuget package to your project and then register the additional text encodings using the following code snippet:\n        </para>\n        <code language=\"c#\">\n          System.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);\n        </code>\n        <para>\n          Note: The above code snippet should be safe to call in .NET Framework versions >= 4.6 as well.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"TypeLoadException\">\n      <title>Why do I get a TypeLoadException when I try to create a new MimeMessage?</title>\n      <content>\n        <para>\n          This only seems to happen in cases where the application is built for .NET Framework (v4.x) and seems to be most\n          common for ASP.NET web applications that were built using Visual Studio 2019 (it is unclear whether this happens\n          with Visual Studio 2022 as well).\n        </para>\n        <para>\n          The issue is that some (older?) versions of MSBuild do not correctly generate <literal>*.dll.config</literal>,\n          <literal>app.config</literal> and/or <literal>web.config</literal> files with proper assembly version binding\n          redirects.\n        </para>\n        <para>\n          If this problem is happening to you, make sure to use MimeKit and MailKit >= v4.0 which include <literal>MimeKit.dll.config</literal>\n          and <literal>MailKit.dll.config</literal>.\n        </para>\n        <para>\n          The next step is to manually edit your application's <literal>app.config</literal> (or <literal>web.config</literal>) to add a\n          binding redirect for <literal>System.Runtime.CompilerServices.Unsafe</literal>:\n        </para>\n        <code language=\"xml\">\n          &lt;configuration&gt;\n            &lt;runtime&gt;\n              &lt;assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\"&gt;\n                &lt;dependentAssembly&gt;\n                  &lt;assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\"/&gt;\n                  &lt;bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" /&gt;\n                &lt;/dependentAssembly&gt;\n              &lt;/assemblyBinding&gt;\n            &lt;/runtime&gt;\n          &lt;/configuration&gt;\n        </code>\n      </content>\n    </section>\n\n    <section address=\"SslHandshakeException\">\n      <title>Why do I get \"An error occurred while attempting to establish an SSL or TLS connection.\" when I try to Connect?</title>\n      <content>\n        <para>\n          When you get an exception with that error message, it usually means that you are encountering\n          one of the following scenarios:\n        </para>\n        <list class=\"ordered\">\n          <listItem>\n            <para>The mail server does not support SSL on the specified port.</para>\n            <para>\n              There are 2 different ways to use SSL/TLS encryption with mail servers.\n            </para>\n            <para>\n              The first way is to enable SSL/TLS encryption immediately upon connecting to the\n              SMTP, POP3 or IMAP server. This method requires an \"SSL port\" because the standard\n              port defined for the protocol is meant for plain-text communication.\n            </para>\n            <para>\n              The second way is via a <literal>STARTTLS</literal> command (aka <literal>STLS</literal> for POP3) that is\n              <legacyItalic>optionally</legacyItalic> supported by the server.\n            </para>\n            <para>\n              Below is a table of the protocols supported by MailKit and the standard plain-text ports\n              (which either do not support any SSL/TLS encryption at all or only via the <literal>STARTTLS</literal>\n              command extension) and the SSL ports which require SSL/TLS encryption immediately upon a\n              successful connection to the remote host.\n            </para>\n            <table>\n              <tableHeader>\n                <row>\n                  <entry>\n                    <para>Protocol</para>\n                  </entry>\n                  <entry>\n                    <para>Standard Port</para>\n                  </entry>\n                  <entry>\n                    <para>SSL Port</para>\n                  </entry>\n                </row>\n              </tableHeader>\n              <row>\n                <entry>\n                  <para>SMTP</para>\n                </entry>\n                <entry>\n                  <para>25 or 587</para>\n                </entry>\n                <entry>\n                  <para>465</para>\n                </entry>\n              </row>\n              <row>\n                <entry>\n                  <para>POP3</para>\n                </entry>\n                <entry>\n                  <para>110</para>\n                </entry>\n                <entry>\n                  <para>995</para>\n                </entry>\n              </row>\n              <row>\n                <entry>\n                  <para>IMAP</para>\n                </entry>\n                <entry>\n                  <para>143</para>\n                </entry>\n                <entry>\n                  <para>993</para>\n                </entry>\n              </row>\n            </table>\n            <para>\n              It is important to use the correct <codeEntityReference>T:MailKit.Security.SecureSocketOptions</codeEntityReference> for\n              the port that you are connecting to.\n            </para>\n            <para>\n              If you are connecting to one of the standard ports above, you will need to use <literal>SecureSocketOptions.None</literal>,\n              <literal>SecureSocketOptions.StartTls</literal> or <literal>SecureSocketOptions.StartTlsWhenAvailable</literal>.\n            </para>\n            <para>\n              If you are connecting to one of the SSL ports, you will need to use <literal>SecureSocketOptions.SslOnConnect</literal>.\n            </para>\n            <para>\n              You could also try using <literal>SecureSocketOptions.Auto</literal> which works by choosing the appropriate option to use\n              by comparing the specified port to the ports in the above table.\n            </para>\n          </listItem>\n          <listItem>\n            <para>The mail server that you are connecting to is using an expired (or otherwise untrusted) SSL certificate.</para>\n            <para>\n              Often times, mail servers will use self-signed certificates instead of using a certificate that\n              has been signed by a trusted Certificate Authority. Another potential pitfall is when locally\n              installed anti-virus software replaces the certificate in order to scan web traffic for viruses.\n            </para>\n            <para>\n              When your system is unable to validate the mail server's certificate because it is not signed\n              by a known and trusted Certificate Authority, the above error will occur.\n            </para>\n            <para>\n              You can work around this problem by supplying a custom\n              <externalLink>\n                <linkText>RemoteServerCertificateValidationCallback</linkText>\n                <linkUri>https://msdn.microsoft.com/en-us/library/ms145054</linkUri>\n                <linkTarget>_blank</linkTarget>\n              </externalLink>\n              and setting it on the client's <codeEntityReference>P:MailKit.MailService.ServerCertificateValidationCallback</codeEntityReference>\n              property.\n            </para>\n            <para>\n              In the simplest example, you could do something like this (although I would strongly recommend against it in\n              production use):\n            </para>\n            <code language=\"c#\">\n              using (var client = new SmtpClient ()) {\n                  client.ServerCertificateValidationCallback = (s,c,h,e) => true;\n\n                  client.Connect (hostName, port, SecureSocketOptions.Auto);\n\n                  // ...\n              }\n            </code>\n            <para>\n              A better solution might be to compare the certificate's common name, issuer, serial number, and fingerprint\n              to known values to make sure that the certificate can be trusted. Take the following code snippet as an\n              example of how to do this:\n            </para>\n            <code language=\"c#\">\n              bool MyServerCertificateValidationCallback (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)\n              {\n                  if (sslPolicyErrors == SslPolicyErrors.None)\n                      return true;\n\n                  // Note: The following code casts to an X509Certificate2 because it's easier to get the\n                  // values for comparison, but it's possible to get them from an X509Certificate as well.\n                  if (certificate is X509Certificate2 certificate2) {\n                      var cn = certificate2.GetNameInfo (X509NameType.SimpleName, false);\n                      var fingerprint = certificate2.Thumbprint;\n                      var serial = certificate2.SerialNumber;\n                      var issuer = certificate2.Issuer;\n\n                      return cn == \"imap.gmail.com\" &amp;&amp; issuer == \"CN=GTS CA 1O1, O=Google Trust Services, C=US\" &amp;&amp;\n                          serial == \"00BABE95B167C9ECAF08000000006065B6\" &amp;&amp;\n                          fingerprint == \"E79A011EF55EEC72D2B7E391D193761372796836\";\n                  }\n\n                  return false;\n              }\n            </code>\n            <para>\n              The downside of the above example is that it requires hard-coding known values for \"trusted\" mail server\n              certificates which can quickly become unwieldy to deal with if your program is meant to be used with\n              a wide range of mail servers.\n            </para>\n            <para>\n              The best approach would be to prompt the user with a dialog explaining that the certificate is\n              not trusted for the reasons enumerated by the\n              <externalLink>\n                <linkText>SslPolicyErrors</linkText>\n                <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslpolicyerrors?view=netframework-4.8</linkUri>\n                <linkTarget>_blank</linkTarget>\n              </externalLink>\n              argument as well as potentially the errors provided in the\n              <externalLink>\n                <linkText>X509Chain</linkText>\n                <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509chain?view=netframework-4.8</linkUri>\n                <linkTarget>_blank</linkTarget>\n              </externalLink>\n              If the user wishes to accept the risks of trusting the certificate, your program could then <literal>return true</literal>.\n            </para>\n            <para>\n              For more details on writing a custom SSL certificate validation callback, it may be worth checking out the\n              <externalLink>\n                <linkText>SslCertificateValidation.cs</linkText>\n                <linkUri>https://github.com/jstedfast/MailKit/blob/master/Documentation/Examples/SslCertificateValidation.cs</linkUri>\n                <linkTarget>_blank</linkTarget>\n              </externalLink>\n              example.\n            </para>\n          </listItem>\n          <listItem>\n            <para>A Certificate Authority CRL server for one or more of the certificates in the chain is temporarily unavailable.</para>\n            <para>\n              Most Certificate Authorities are probably pretty good at keeping their CRL and/or OCSP servers up 24/7, but occasionally\n              they <legacyItalic>do</legacyItalic> go down or are otherwise unreachable due to other network problems between you and the\n              server. When this happens, it becomes impossible to check the revocation status of one or more of the certificates in the chain.\n            </para>\n            <para>\n              To ignore revocation checks, you can set the\n              <codeEntityReference>P:MailKit.MailService.CheckCertificateRevocation</codeEntityReference>\n              property of the IMAP, POP3 or SMTP client to <literal>false</literal> before you connect:\n            </para>\n            <code language=\"c#\">\n              using (var client = new SmtpClient ()) {\n                  client.CheckCertificateRevocation = false;\n\n                  client.Connect (hostName, port, SecureSocketOptions.Auto);\n\n                  // ...\n              }\n            </code>\n          </listItem>\n          <listItem>\n            <para>The server does not support the same set of SSL/TLS protocols that the client is configured to use.</para>\n            <para>\n              MailKit attempts to keep up with the latest security recommendations and so is continuously removing older SSL and TLS\n              protocols that are no longer considered secure from the default configuration. This often means that MailKit's SMTP,\n              POP3 and IMAP clients will fail to connect to servers that are still using older SSL and TLS protocols. Currently,\n              the SSL and TLS protocols that are not supported by default are: SSL v2.0, SSL v3.0, TLS v1.0 and TLS v1.1.\n            </para>\n            <para>\n              You can override MailKit's default set of supported\n              <externalLink>\n                <linkText>SSL and TLS protocols</linkText>\n                <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.security.authentication.sslprotocols?view=netframework-4.8</linkUri>\n                <linkTarget>_blank</linkTarget>\n              </externalLink>\n              by setting the value of the <codeEntityReference>P:MailKit.MailService.SslProtocols</codeEntityReference>\n              property on your SMTP, POP3 or IMAP client.\n            </para>\n            <para>For example:</para>\n            <code language=\"c#\">\n              using (var client = new SmtpClient ()) {\n                  // Allow SSLv3.0 and all versions of TLS\n                  client.SslProtocols = SslProtocols.Ssl3 | SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;\n\n                  client.Connect (\"smtp.gmail.com\", 465, true);\n\n                  // ...\n              }\n            </code>\n          </listItem>\n        </list>\n      </content>\n    </section>\n\n    <section address=\"ProtocolLog\">\n      <title>How do I debug SMTP, POP3 and/or IMAP errors?</title>\n      <content>\n        <para>\n          All of MailKit's client implementations have a constructor that takes a nifty\n          <codeEntityReference>T:MailKit.IProtocolLogger</codeEntityReference> interface for logging client/server communications.\n          Out of the box, you can use the handy <codeEntityReference>T:MailKit.ProtocolLogger</codeEntityReference> class. Here are\n          some examples of how to use it:\n        </para>\n        <code language=\"c#\">\n          // log to a file called 'imap.log'\n          var client = new ImapClient (new ProtocolLogger (\"imap.log\"));\n\n          // log to standard output (i.e. the console)\n          var client = new ImapClient (new ProtocolLogger (Console.OpenStandardOutput ()));\n        </code>\n        <para>\n          Note: When submitting a protocol log as part of a bug report, make sure to scrub any sensitive\n          information including your authentication credentials. This information will generally be the base64\n          encoded blob immediately following an <literal>AUTHENTICATE</literal> or <literal>AUTH</literal> command\n          (depending on the type of server) or the cleartext username and password strings in a <literal>LOGIN</literal> command.\n          The only exception to this case is if you are authenticating with <literal>NTLM</literal> in which case I may need this\n          information, but only if the bug/error is in the authentication step.\n        </para>\n      </content>\n    </section>\n    \n    <section address=\"GMailHiddenMessages\">\n      <title>Why doesn't MailKit find some of my GMail POP3 or IMAP messages?</title>\n      <content>\n        <para>\n          By default, GMail's POP3 and IMAP server does not behave like standard POP3 or IMAP servers\n          and hides messages from clients using those protocols (as well as having other non-standard\n          behavior).\n        </para>\n        <para>\n          If you want to configure your GMail POP3 settings to behave the way POP3 is intended to behave,\n          you'll need to log in to your GMail account via your web browser and navigate to the\n          <application>Forwarding and POP/IMAP</application> tab of your\n          <application>GMail Settings</application> page and make the following changes in the\n          <application>POP3 Download</application> section:\n        </para>\n        <list class=\"ordered\">\n          <listItem>\n            <para>\n              <application>Enable POP for all mail (even if it has already been downloaded)</application>.\n            </para>\n          </listItem>\n          <listItem>\n            <para>\n              When messages are accessed with POP, <application>keep GMail's copy in the Inbox</application>.\n            </para>\n          </listItem>\n        </list>\n      </content>\n    </section>\n    \n    <section address=\"GMailAccess\">\n      <title>How do I access GMail using MailKit?</title>\n      <content>\n        <para>\n          As of September 30th, 2024, authentication using only a username and password is\n          <externalLink>\n            <linkText>no longer supported by Google</linkText>\n            <linkUri>https://support.google.com/accounts/answer/6010255?hl=en</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>.\n        </para>\n        <para>\n          There are now only 2 options to choose from:\n        </para>\n        <list class=\"ordered\">\n          <listItem>\n            <para>\n              Use OAuth 2.0 to authenticate with GMail. This is the recommended approach.\n            </para>\n          </listItem>\n          <listItem>\n            <para>\n              Use an App Password to authenticate with GMail. This is a less secure option and is not recommended.\n              It is only available for accounts that have 2-Step Verification enabled.\n            </para>\n          </listItem>\n        </list>\n        <para>\n          To use an App password, you will first need to\n          <externalLink>\n            <linkText>turn on 2-Step Verification</linkText>\n            <linkUri>https://support.google.com/accounts/answer/185839</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>.\n          Once 2-Step Verification is turned on, you can\n          <externalLink>\n            <linkText>generate an App password</linkText>\n            <linkUri>https://myaccount.google.com/apppasswords</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>.\n        </para>\n        <para>\n          Then, assuming that your GMail account is <literal>user@gmail.com</literal>, you would use the following\n          code snippet to connect to GMail via IMAP:\n        </para>\n        <code language=\"c#\">\nusing (var client = new ImapClient ()) {\n    client.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n    client.Authenticate (\"user@gmail.com\", \"app-specific-password\");\n    \n    // do stuff...\n    \n    client.Disconnect (true);\n}\n        </code>\n        <para>\n          Connecting via POP3 or SMTP is identical except for the host names and ports (and, of course, you'd\n          use a <literal>Pop3Client</literal> or <literal>SmtpClient</literal> as appropriate).\n        </para>\n      </content>\n    </section>\n\n    <section address=\"GMailOAuth2\">\n      <title>How can I log in to a GMail account using OAuth 2.0?</title>\n      <content>\n        <para>\n          The first thing you need to do is follow\n          <externalLink>\n            <linkText>Google's instructions</linkText>\n            <linkUri>https://developers.google.com/accounts/docs/OAuth2</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>\n          for obtaining OAuth 2.0 credentials for your application.\n        </para>\n        <para>\n          Or, as an alternative set of step-by-step instructions, you can follow the directions that\n          <externalLink>\n            <linkText>I have written</linkText>\n            <linkUri>https://github.com/jstedfast/MailKit/blob/master/GMailOAuth2.md</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> (complete with screenshots).\n        </para>\n        <para>\n          Once you've done that, the easiest way to obtain an access token is to use Google's \n          <externalLink>\n            <linkText>Google.Apis.Auth</linkText>\n            <linkUri>https://www.nuget.org/packages/Google.Apis.Auth/</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> library:\n        </para>\n        <code language=\"c#\">\nconst string GMailAccount = \"username@gmail.com\";\n\nvar clientSecrets = new ClientSecrets {\n    ClientId = \"XXX.apps.googleusercontent.com\",\n    ClientSecret = \"XXX\"\n};\n\nvar codeFlow = new GoogleAuthorizationCodeFlow (new GoogleAuthorizationCodeFlow.Initializer {\n    // Cache tokens in ~/.local/share/google-filedatastore/CredentialCacheFolder on Linux/Mac\n    DataStore = new FileDataStore (\"CredentialCacheFolder\", false),\n    Scopes = new [] { \"https://mail.google.com/\" },\n    ClientSecrets = clientSecrets\n});\n\nvar codeReceiver = new LocalServerCodeReceiver ();\nvar authCode = new AuthorizationCodeInstalledApp (codeFlow, codeReceiver);\nvar credential = await authCode.AuthorizeAsync (GMailAccount, CancellationToken.None);\n\nif (authCode.ShouldRequestAuthorizationCode (credential.Token))\n    await credential.RefreshTokenAsync (CancellationToken.None);\n\nvar oauth2 = new SaslMechanismOAuth2 (credential.UserId, credential.Token.AccessToken);\n\nusing (var client = new ImapClient ()) {\n    await client.ConnectAsync (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n        </code>\n      </content>\n    </section>\n\n    <section address=\"CreateAttachments\">\n      <title>How do I create a message with attachments?</title>\n      <content>\n        <para>\n          To construct a message with attachments, the first thing you'll need to do is create a\n          <literal>multipart/mixed</literal> container which you'll then want to add the message\n          body to first. Once you've added the body, you can then add MIME parts to it that contain\n          the content of the files you'd like to attach, being sure to set the\n          <literal>Content-Disposition</literal> header value to <literal>attachment</literal>.\n          You'll probably also want to set the <literal>filename</literal> parameter on the\n          <literal>Content-Disposition</literal> header as well as the <literal>name</literal>\n          parameter on the <literal>Content-Type</literal> header. The most convenient way to do this\n          is to use the <codeEntityReference qualifyHint=\"true\">\n          P:MimeKit.MimePart.FileName</codeEntityReference> property which will set both parameters\n          for you as well as setting the <literal>Content-Disposition</literal> header value to\n          <literal>attachment</literal> if it has not already been set to something else.\n        </para>\n        <code language=\"c#\" source=\"Examples\\CreateMultipartMixed.cs\"/>\n        <para>\n          A simpler way to construct messages with attachments is to take advantage of the\n          <codeEntityReference>T:MimeKit.BodyBuilder</codeEntityReference> class.\n        </para>\n        <code language=\"c#\" source=\"Examples\\BodyBuilder.cs\" region=\"Simple\"/>\n        <para>\n          For more information, see <link xlink:href=\"Creating-Messages\">Creating Messages</link>.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"MessageBody\">\n      <title>How do I get the main body of a message?</title>\n      <content>\n        <para>\n          (Note: for the TL;DR version, skip to the end)\n        </para>\n        <para>\n          MIME is a tree structure of parts. There are multiparts which contain other parts\n          (even other multiparts). There are message parts which contain messages. And finally,\n          there are leaf-node parts which contain content.\n        </para>\n        <para>\n          There are a few common message structures:\n        </para>\n        <list class=\"ordered\">\n          <listItem address=\"MessageBodyExample1\">\n            <para>\n              The message contains only a <literal>text/plain</literal> or\n              <literal>text/html</literal> part (easy, just use that).\n            </para>\n          </listItem>\n          <listItem address=\"MessageBodyExample2\">\n            <para>\n              The message contains a <literal>multipart/alternative</literal>\n              which will typically look a bit like this:<markup><pre>\nmultipart/alternative\n  text/plain\n  text/html</pre></markup>\n            </para>\n          </listItem>\n          <listItem address=\"MessageBodyExample3\">\n            <para>\n              Same as above, but the html part is inside a <literal>multipart/related</literal> so\n              that it can embed images:<markup><pre>\nmultipart/alternative\n  text/plain\n  multipart/related\n    text/html\n    image/jpeg\n    image/png</pre></markup>\n            </para>\n          </listItem>\n          <listItem address=\"MessageBodyExample4\">\n            <para>\n              The message contains a textual body part as well as some attachments:<markup><pre>\nmultipart/mixed\n  text/plain\n  application/octet-stream\n  application/zip</pre></markup>\n            </para>\n          </listItem>\n          <listItem address=\"MessageBodyExample5\">\n            <para>\n              The same as above, but with the first part replaced with either\n              <link xlink:href=\"Frequently-Asked-Questions#MessageBodyExample2\">#2</link> or\n              <link xlink:href=\"Frequently-Asked-Questions#MessageBodyExample3\">#3</link>\n              To illustrate:<markup><pre>\nmultipart/mixed\n  multipart/alternative\n    text/plain\n    text/html\n  application/octet-stream\n  application/zip</pre></markup>\n            </para>\n            <para>\n              Or:<markup><pre>\nmultipart/mixed\n  multipart/alternative\n    text/plain\n    multipart/related\n      text/html\n      image/jpeg\n      image/png\n  application/octet-stream\n  application/zip</pre></markup>\n            </para>\n          </listItem>\n        </list>\n        <para>\n          For your convenience, the <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>\n          class has 2 properties that you may find useful:\n          <codeEntityReference>P:MimeKit.MimeMessage.TextBody</codeEntityReference> and\n          <codeEntityReference>P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>.\n        </para>\n        <para>\n          For more information, see <link xlink:href=\"Working-With-Messages\"/>.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"HasAttachments\">\n      <title>How do I tell if a message has attachments?</title>\n      <content>\n        <para>\n          In most cases, a message with a body that has a MIME-type of <literal>multipart/mixed</literal>\n          containing more than a single part probably has attachments. As illustrated above, the first part\n          of a <literal>multipart/mixed</literal> is typically the textual body of the message, but it is\n          not always quite that simple.\n        </para>\n        <para>\n          In general, MIME attachments will have a <literal>Content-Disposition</literal> header with a\n          value of <literal>attachment</literal>. To get the list of body parts matching this criteria,\n          you can use the <codeEntityReference qualifyHint=\"true\">\n          P:MimeKit.MimeMessage.Attachments</codeEntityReference> property.\n        </para>\n        <para>\n          Unfortunately, not all mail clients follow this convention and so you may need to write your\n          own custom logic. For example, you may wish to treat all body parts having a <literal>name</literal>\n          or <literal>filename</literal> parameter set on them:\n        </para>\n        <code language=\"c#\">\nvar attachments = message.BodyParts.OfType&lt;MimePart&gt; ().Where (part => !string.IsNullOrEmpty (part.FileName));\n        </code>\n        <para>\n          A more sophisticated approach is to treat body parts not referenced by the main textual body part of\n          the message as attachments. In other words, treat any body part not used for rendering the message\n          as an attachment. For an example on how to do this, consider the following code snippets:\n        </para>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"HtmlPreviewVisitor\"/>\n        <para>And the way you'd use this visitor might look something like this:</para>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"RenderMessage\"/>\n        <para>\n          Once you've rendered the message using the above technique, you'll have a list of attachments\n          that were not used, even if they did not match the simplistic criteria used by the\n          <codeEntityReference qualifyHint=\"true\">P:MimeKit.MimeMessage.Attachments</codeEntityReference>\n          property.\n        </para>\n      </content>\n    </section>\n    \n    <section address=\"Serialize\">\n      <title>Why doesn't the MimeMessage class implement ISerializable so that I can serialize a\n      message to disk and read it back later?</title>\n      <content>\n        <para>\n          The MimeKit API was designed to use the existing MIME format for serialization. In light\n          of this, the ability to use the .NET serialization API and format did not make much sense\n          to support.\n        </para>\n        <para>\n          You can easily serialize a MimeMessage to a stream using the\n          <codeEntityReference autoUpgrade=\"true\">Overload:MimeKit.MimeMessage.WriteTo</codeEntityReference>\n          methods.\n        </para>\n      </content>\n    </section>\n    \n    <section address=\"SaveMessages\">\n      <title>How do I save messages?</title>\n      <content>\n        <para>\n          One you've got a <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>, you can save it to a\n          file using the <codeEntityReference>Overload:MimeKit.MimeMessage.WriteTo</codeEntityReference> method:\n        </para>\n        <code language=\"c#\">message.WriteTo (\"message.eml\");</code>\n        <para>\n          The <literal>WriteTo</literal> method also has overloads that allow you to write the message to a\n          <literal>Stream</literal> instead.\n        </para>\n        <para>\n          By default, the <literal>WriteTo</literal> method will save the message using DOS line-endings on Windows\n          and Unix line-endings on Unix-based systems such as macOS and Linux. You can override this behavior by\n          passing a <codeEntityReference>T:MimeKit.FormatOptions</codeEntityReference> argument to the method:\n        </para>\n        <code language=\"c#\">\n// clone the default formatting options\nvar format = FormatOptions.Default.Clone ();\n\n// override the line-endings to be DOS no matter what platform we are on\nformat.NewLineFormat = NewLineFormat.Dos;\n\nmessage.WriteTo (format, \"message.eml\");\n        </code>\n      </content>\n    </section>\n    \n    <section address=\"SaveAttachments\">\n      <title>How do I save attachments?</title>\n      <content>\n        <para>\n          If you've already got a <codeEntityReference>T:MimeKit.MimePart</codeEntityReference> that represents\n          the attachment that you'd like to save, here's how you might save it:\n        </para>\n        <code language=\"c#\" source=\"Examples\\AttachmentExamples.cs\" region=\"SaveMimePart\" />\n        <para>\n          Pretty simple, right?\n        </para>\n        <para>\n          But what if your attachment is actually a <codeEntityReference>T:MimeKit.MessagePart</codeEntityReference>?\n        </para>\n        <para>\n          To save the content of a <literal>message/rfc822</literal> part, you'd use the following code snippet:\n        </para>\n        <code language=\"c#\" source=\"Examples\\AttachmentExamples.cs\" region=\"SaveMessagePart\" />\n        <para>\n          If you are iterating over all of the attachments in a message, you might do something like this:\n        </para>\n        <code language=\"c#\" source=\"Examples\\AttachmentExamples.cs\" region=\"SaveAttachments\" />\n      </content>\n    </section>\n\n    <section address=\"AddressHeaders\">\n      <title>How do I get the email addresses in the From, To, and Cc headers?</title>\n      <content>\n        <para>\n          The <codeEntityReference>P:MimeKit.MimeMessage.From</codeEntityReference>,\n          <codeEntityReference>P:MimeKit.MimeMessage.To</codeEntityReference>, and\n          <codeEntityReference>P:MimeKit.MimeMessage.Cc</codeEntityReference>\n          properties of a <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>\n          are all of type <codeEntityReference>T:MimeKit.InternetAddressList</codeEntityReference>.\n          An <codeEntityReference>T:MimeKit.InternetAddressList</codeEntityReference> is a list of\n          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> items.\n          This is where some people start to get lost, conceptually, because\n          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> is an\n          abstract class that only really has a\n          <codeEntityReference>P:MimeKit.InternetAddress.Name</codeEntityReference>\n          property.\n        </para>\n        <para>\n          As you've probably already discovered, the\n          <codeEntityReference>P:MimeKit.InternetAddress.Name</codeEntityReference>\n          property contains the name of the person (if available), but what you probably\n          want is his or her email address, not their name. So how do you get it?\n        </para>\n        <para>\n          To get the email address, you'll need to figure out what subclass of address each\n          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> really is.\n          There are 2 direct subclasses of\n          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference>. They are:\n          <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> and\n          <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>.\n        </para>\n        <para>\n          A <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> is a named group\n          of more <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> items that\n          are contained within the\n          <codeEntityReference>P:MimeKit.GroupAddress.Members</codeEntityReference> property. To\n          get an idea of what a group address represents, consider the following examples:\n        </para>\n        <para>\n          <literal>\n            To: My Friends: Joey &lt;joey@friends.com&gt;, Monica &lt;monica@friends.com&gt;,\n            \"Mrs. Chanandler Bong\" &lt;chandler@friends.com&gt;, Ross &lt;ross@friends.com&gt;,\n            Rachel &lt;rachel@friends.com&gt;;\n          </literal>\n        </para>\n        <para>\n          In the above example, the <codeEntityReference>P:MimeKit.MimeMessage.To</codeEntityReference>\n          header's <codeEntityReference>T:MimeKit.InternetAddressList</codeEntityReference> will\n          contain only 1 item which will be a\n          <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> with a\n          <codeEntityReference>P:MimeKit.InternetAddress.Name</codeEntityReference> value of\n          <literal>My Friends</literal>. The\n          <codeEntityReference>P:MimeKit.GroupAddress.Members</codeEntityReference> property of\n          the <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> will contain 5\n          more <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> items (which\n          will all be instances of <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>).\n        </para>\n        <para>\n          The above example, however, is not very likely to ever be seen in messages you deal with.\n          A far more common example would be the one below:\n        </para>\n        <para>\n          <literal>To: undisclosed-recipients:;</literal>\n        </para>\n        <para>\n          Most of the time, the <codeEntityReference>P:MimeKit.MimeMessage.From</codeEntityReference>,\n          <codeEntityReference>P:MimeKit.MimeMessage.To</codeEntityReference>, and\n          <codeEntityReference>P:MimeKit.MimeMessage.Cc</codeEntityReference> headers will only\n          contain mailbox addresses. As you will notice, a\n          <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference> has an\n          <codeEntityReference>P:MimeKit.MailboxAddress.Address</codeEntityReference> property\n          which will contain the email address of the mailbox. In the following example, the\n          <codeEntityReference>P:MimeKit.MailboxAddress.Address</codeEntityReference> property\n          will contain the value <literal>john@smith.com</literal>:\n        </para>\n        <para>\n          <literal>To: John Smith &lt;john@smith.com&gt;</literal>\n        </para>\n        <para>\n          If you only care about getting a flattened list of the mailbox addresses in one of\n          the address headers, you can do something like this:\n        </para>\n        <code language=\"c#\">\nforeach (var mailbox in message.To.Mailboxes)\n    Console.WriteLine (\"{0}'s email address is {1}\", mailbox.Name, mailbox.Address);\n        </code>\n      </content>\n    </section>\n    \n    <section address=\"UntitledAttachments\">\n      <title>Why do attachments with Unicode filenames appear as \"ATT0####.dat\" in Outlook?</title>\n      <content>\n        <para>\n          An attachment filename is stored as a MIME parameter on the <literal>Content-Disposition</literal>\n          header. Unfortunately, the original MIME specifications did not specify a method for encoding\n          non-ascii filenames. In 1997,\n          <externalLink>\n            <linkText>rfc2184</linkText>\n            <linkUri>https://tools.ietf.org/html/rfc2184</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>\n          (later updated by \n          <externalLink>\n            <linkText>rfc2231</linkText>\n            <linkUri>https://tools.ietf.org/html/rfc2231</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>) was\n          published which specified an encoding mechanism to use for encoding them. Since there was a window\n          in time where the MIME specifications did not define a way to encode them, some mail client\n          developers decided to use the mechanism described by\n          <externalLink>\n            <linkText>rfc2047</linkText>\n            <linkUri>https://tools.ietf.org/html/rfc2047</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> which was meant for encoding\n          non-ASCII text in headers. While this may at first seem logical, the problem with this approach\n          was that rfc2047 encoded-word tokens are not allowed to be in quotes (as well as some other issues)\n          and so another, more appropriate, encoding mechanism was needed.\n        </para>\n        <para>\n          Outlook is one of those mail clients which decided to encode filenames using the mechanism described\n          in rfc2047 and until Outlook 2007, did not support filenames encoded using the mechanism defined in\n          rfc2231.\n        </para>\n        <para>\n          As of MimeKit v1.2.18, it is possible to configure MimeKit to use the rfc2047 encoding mechanism for\n          filenames in the following two ways:\n        </para>\n        <para>\n          The first way is to set the encoding method on each individual\n          <codeEntityReference>T:MimeKit.Parameter</codeEntityReference>:\n        </para>\n        <code language=\"c#\">\nParameter param;\n\nif (attachment.ContentDisposition.Parameters.TryGetValue (\"filename\", out param))\n    param.EncodingMethod = ParameterEncodingMethod.Rfc2047;\n        </code>\n        <para>\n          The other way is to use a <codeEntityReference>T:MimeKit.FormatOptions</codeEntityReference>:\n        </para>\n        <code language=\"c#\">\nvar options = FormatOptions.Default.Clone ();\noptions.ParameterEncodingMethod = ParameterEncodingMethod.Rfc2047;\n\nmessage.WriteTo (options, stream);\n        </code>\n      </content>\n    </section>\n    \n    <section address=\"DecryptInlinePGP\">\n      <title>How do I decrypt PGP messages that are embedded in the main message text?</title>\n      <content>\n        <para>\n          Some PGP-enabled mail clients, such as <application>Thunderbird</application>, embed\n          encrypted PGP blurbs within the <literal>text/plain</literal> body of the message\n          rather than using the PGP/MIME format that MimeKit prefers.\n        </para>\n        <para>\n          These messages often look something like this:\n        </para>\n        <code language=\"none\" source=\"Examples\\InlinePGPExample.txt\"/>\n        <para>\n          To deal with these kinds of messages, MimeKit's\n          <codeEntityReference>T:MimeKit.Cryptography.OpenPgpContext</codeEntityReference>\n          includes a\n          <codeEntityReference>\n            M:MimeKit.Cryptography.OpenPgpContext.DecryptTo(System.IO.Stream,System.IO.Stream,System.Threading.CancellationToken)\n          </codeEntityReference>\n          method which can be used to get the raw decrypted stream.\n        </para>\n        <para>\n          The method variant that has a\n          <codeEntityReference>T:MimeKit.Cryptography.DigitalSignatureCollection</codeEntityReference>\n          output parameter is useful in cases where the encrypted PGP blurb is also digitally signed,\n          allowing you to get your hands on the list of digital signatures in order for you to verify\n          each of them.\n        </para>\n        <para>\n          To decrypt the sample message above, you could use the following code snippet:\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"DecryptInlinePGP\"/>\n      </content>\n    </section>\n    \n    <section address=\"Reply\">\n      <title>How do I reply to a message using MimeKit?</title>\n      <content>\n        <para>\n          Replying to a message is fairly simple. For the most part, you'd just create the reply message\n          the same way you'd create any other message. There are only a few slight differences:\n        </para>\n        <list class=\"ordered\">\n          <listItem>\n            <para>\n              In the reply message, you'll want to prefix the <literal>Subject</literal> header with\n              <literal>\"Re: \"</literal> if the prefix doesn't already exist in the message you are\n              replying to (in other words, if you are replying to a message with a <literal>Subject</literal>\n              of <literal>\"Re: party tomorrow night!\"</literal>, you would not prefix it with another\n              <literal>\"Re: \"</literal>).\n            </para>\n          </listItem>\n          <listItem>\n            <para>\n              You will want to set the reply message's <literal>In-Reply-To</literal> header to the value\n              of the <literal>Message-Id</literal> header in the original message.\n            </para>\n          </listItem>\n          <listItem>\n            <para>\n              You will want to copy the original message's <literal>References</literal> header into the\n              reply message's <literal>References</literal> header and then append the original message's\n              <literal>Message-Id</literal> header.\n            </para>\n          </listItem>\n          <listItem>\n            <para>\n              You will probably want to \"quote\" the original message's text in the reply.\n            </para>\n          </listItem>\n        </list>\n        <para>\n          If this logic were to be expressed in code, it might look something like this:\n        </para>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"ReplySimple\"/>\n        <para>\n          But what if you wanted to reply to a message and quote the HTML formatting of the original message\n          body (assuming it has an HTML body) while still including the embedded images?\n        </para>\n        <para>\n          This gets a bit more complicated, but it's still doable...\n        </para>\n        <para>\n          The first thing we'd need to do is implement our own <codeEntityReference>T:MimeKit.MimeVisitor</codeEntityReference>\n          to handle this:\n        </para>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"ReplyVisitor\"/>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"Reply\"/>\n      </content>\n    </section>\n    \n    <section address=\"Forward\">\n      <title>How do I forward a message?</title>\n      <content>\n        <para>\n          There are 2 common ways of forwarding a message: attaching the original message as an attachment and\n          inlining the message body much like replying typically does. Which method you choose is up to you.\n        </para>\n        <para>\n          To forward a message by attaching it as an attachment, you would do do something like this:\n        </para>\n        <code language=\"c#\" source=\"Examples\\ForwardExamples.cs\" region=\"ForwardAttached\"/>\n        <para>\n          To forward a message by inlining the original message's text content, you can do something like this:\n        </para>\n        <code language=\"c#\" source=\"Examples\\ForwardExamples.cs\" region=\"ForwardInline\"/>\n      </content>\n    </section>\n\n    <section address=\"UnreadMessages\">\n      <title>How do I get all of the unread messages in a folder?</title>\n      <content>\n        <para>\n          The easiest way is to search for all of the messages that do not have the\n          <literal>\\Seen</literal> flag on them, like so:\n        </para>\n        <code language=\"c#\">\nforeach (var uid in folder.Search (SearchQuery.NotSeen)) {\n    var message = folder.GetMessage (uid);\n}\n        </code>\n      </content>\n    </section>\n\n    <section address=\"ParseWebRequestFormData\">\n      <title>How would I parse multipart/form-data from an HTTP web request?</title>\n      <content>\n        <para>\n          Since classes like <codeEntityReference>T:System.Net.HttpWebRequest</codeEntityReference>\n          take care of parsing the HTTP headers (which includes the <literal>Content-Type</literal> header)\n          and only offer a content stream to consume, MimeKit provides a way to deal with this using the\n          following two static methods:\n          <codeEntityReference qualifyHint=\"true\">\n            M:MimeKit.MimeEntity.Load(MimeKit.ParserOptions,MimeKit.ContentType,System.IO.Stream,System.Threading.CancellationToken)\n          </codeEntityReference>\n          and\n          <codeEntityReference qualifyHint=\"true\">\n            M:MimeKit.MimeEntity.Load(MimeKit.ContentType,System.IO.Stream,System.Threading.CancellationToken)\n          </codeEntityReference>\n        </para>\n        <para>\n          Here's how you might use these methods:\n        </para>\n        <code language=\"c#\" source=\"Examples\\MultipartFormDataExamples.cs\" region=\"ParseMultipartFormDataSimple\"/>\n        <para>\n          If the multipart/form-data HTTP response is expected to be large and you do\n          not wish for the content to be read into memory, you can use the following\n          approach:\n        </para>\n        <code language=\"c#\" source=\"Examples\\MultipartFormDataExamples.cs\" region=\"ParseMultipartFormDataComplex\"/>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <!--<link xlink:href=\"Working-With-Messages\"/>-->\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Getting-Started.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Getting-Started\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"InstallingViaNuGet\">\n      <title>Adding MailKit to your project via NuGet</title>\n      <content>\n        <para>\n          In <application>Visual Studio</application>'s\n          <externalLink>\n            <linkText>Package Manager Console</linkText>\n            <linkUri>http://docs.nuget.org/docs/start-here/using-the-package-manager-console</linkUri>\n          </externalLink>, enter the following command:\n        </para>\n        <para>\n          <command>Install-Package MailKit</command>\n        </para>\n      </content>\n    </section>\n\n    <section address=\"BuildingFromSource\">\n      <title>Building MailKit from Source</title>\n      <content>\n        <para>\n          First, you'll need to clone <application>MailKit</application> from the\n          <externalLink>\n            <linkText>GitHub</linkText>\n            <linkUri>https://github.com/jstedfast</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> repository:\n        </para>\n        <para>\n          <command>git clone https://github.com/jstedfast/MailKit.git</command>\n        </para>\n        <para>\n          Then, since <application>MailKit</application> makes use of git submodules, you\n          will need to initialize and update the submodules using the following command\n          from within the <application>MailKit</application> directory:\n        </para>\n        <para>\n          <command>git submodule update --init --recursive</command>\n        </para>\n        <para>\n          In the top-level <application>MailKit</application> source directory, there\n          are several solution files:\n        </para>\n        <list class=\"bullet\">\n          <listItem>\n            <para>\n              <application>MailKit.sln</application> includes projects for .NET 4.5.2, .NET 4.6, .NET 4.7,\n              .NET 4.8, .NET 5.0, .NET 6.0, .NETStandard 2.0, .NETStandard 2.1, and the unit tests.\n            </para>\n          </listItem>\n          <listItem>\n            <para>\n              <application>MailKit.Documentation.sln</application> includes projects for generating\n              the documentation that you are reading right now.\n            </para>\n          </listItem>\n        </list>\n        <para>\n          Once you've opened the appropriate <application>MailKit</application> solution\n          file in either <application>Xamarin Studio</application> or\n          <application>Visual Studio</application> (either will work), you can\n          choose the <application>Debug</application> or <application>Release</application>\n          build configuration and then build.\n        </para>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Creating-Messages\"/>\n      <link xlink:href=\"Parsing-Messages\"/>\n      <link xlink:href=\"Working-With-Messages\"/>\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Introduction.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Introduction\" revisionNumber=\"1\">\n  <developerConceptualDocument xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <introduction>\n      <para>MimeKit and MailKit are popular fully-featured email frameworks for .NET</para>\n    </introduction>\n\n    <section>\n      <title>Feature Overview</title>\n      <content>\n        <list class=\"bullet\">\n          <listItem>\n            <para>Security</para>\n            <list class=\"bullet\">\n              <listItem>\n                <para>SASL Authentication</para>\n                <list class=\"bullet\">\n                  <listItem>\n                    <para>Supports the ANONYMOUS, CRAM-MD5, DIGEST-MD5, LOGIN, NTLM, OAUTHBEARER, PLAIN, SCRAM-SHA-1(-PLUS), SCRAM-SHA-256(-PLUS), SCRAM-SHA-512(-PLUS), and XOAUTH2 mechanisms.</para>\n                  </listItem>\n                </list>\n              </listItem>\n              <listItem>\n                <para>Supports S/MIME v3.2.</para>\n              </listItem>\n              <listItem>\n                <para>Supports OpenPGP.</para>\n              </listItem>\n              <listItem>\n                <para>Supports DKIM-Signatures.</para>\n              </listItem>\n              <listItem>\n                <para>Supports ARC signatures.</para>\n              </listItem>\n            </list>\n          </listItem>\n          <listItem>\n            <para>SMTP Client</para>\n            <list class=\"bullet\">\n              <listItem>\n                <para>Supports SSL and TLS.</para>\n              </listItem>\n              <listItem>\n                <para>Supports the STARTTLS, SIZE, DSN, 8BITMIME, PIPELINING, BINARYMIME, and SMTPUTF8 extensions.</para>\n              </listItem>\n            </list>\n          </listItem>\n          <listItem>\n            <para>POP3 Client</para>\n            <list class=\"bullet\">\n              <listItem>\n                <para>Supports SSL and TLS.</para>\n              </listItem>\n              <listItem>\n                <para>Supports the STLS, UIDL, PIPELINING, UTF8, and LANG extensions.</para>\n              </listItem>\n            </list>\n          </listItem>\n          <listItem>\n            <para>IMAP Client</para>\n            <list class=\"bullet\">\n              <listItem>\n                <para>Supports SSL and TLS.</para>\n              </listItem>\n              <listItem>\n                <para>Supports the ACL, QUOTA, LITERAL+, IDLE, NAMESPACE, ID, CHILDREN, LOGINDISABLED, STARTTLS,\n                MULTIAPPEND, UNSELECT, UIDPLUS, CONDSTORE, ESEARCH, SASL-ID, COMPRESS, WITHIN, ENABLE, QRESYNC,\n                SORT, THREAD, ANNOTATE, LIST-EXTENDED, ESORT, METADATA, METADATA-SERVER, NOTIFY, FILTERS, LIST-STATUS,\n                SORT=DISPLAY, SPECIAL-USE, CREATE-SPECIAL-USE, SEARCH=FUZZY, MOVE, UTF8=ACCEPT, UTF8=ONLY, LITERAL-,\n                APPENDLIMIT, STATUS=SIZE, OBJECTID, REPLACE, SAVEDATE, XLIST, and Google Mail (X-GM-EXT-1) extensions.</para>\n              </listItem>\n            </list>\n          </listItem>\n          <listItem>\n            <para>Proxy Support</para>\n            <list class=\"bullet\">\n              <listItem>\n                <para>Supports HTTP(S), SOCKS4, SOCKS4a, and SOCKS5.</para>\n              </listItem>\n              <listItem>\n                <para>Fully cancellable and asynchronous Connect methods.</para>\n              </listItem>\n            </list>\n          </listItem>\n          <listItem>\n            <para>MIME Parser</para>\n            <list class=\"bullet\">\n              <listItem>\n                <para>Flexible: allows overriding default classes for any MIME-type.</para>\n              </listItem>\n              <listItem>\n                <para>High performance: faster than any other .NET MIME parser on the market. Rivals the performance of even the fastest C++ parsers.</para>\n              </listItem>\n              <listItem>\n                <para>Robust: handles a wide variety of broken MIME formatting with ease.</para>\n              </listItem>\n            </list>\n          </listItem>\n          <listItem>\n            <para>\n              All API's that might block allow cancellation via <codeEntityReference>T:System.Threading.CancellationToken</codeEntityReference>.\n            </para>\n          </listItem>\n          <listItem>\n            <para>All API's that perform I/O have async variants.</para>\n          </listItem>\n          <listItem>\n            <para>Client-side sorting and threading of messages.</para>\n          </listItem>\n          <listItem>\n            <para>Supports .NET 4.5.2, .NET 4.6, .NET 4.7, .NET 4.8, .NET 5.0, .NETStandard 2.0, Xamarin.Android, Xamarin.iOS, Windows Phone 8.1, and more.</para>\n          </listItem>\n        </list>\n      </content>\n    </section>\n\n    <section>\n      <title>History</title>\n      <content>\n        <para>\n          As a developer and user of email clients, I had come to realize that the vast majority of email\n          client (and server) software had less-than-satisfactory MIME implementations. More often than not these\n          email clients created broken MIME messages and/or would incorrectly try to parse a MIME message thus\n          subtracting from the full benefits that MIME was meant to provide. MimeKit is meant to address this\n          issue by following the MIME specification as closely as possible while also providing programmers with\n          an extremely easy to use high-level API.\n        </para>\n        <para>\n          This led me, at first, to implement another MIME parser library called\n          <externalLink>\n            <linkText>GMime</linkText>\n            <linkUri>http://spruce.sourceforge.net/gmime</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>\n          which was implemented in C and later added a C# binding called GMime-Sharp.\n        </para>\n        <para>\n          Now that I typically find myself working in C# rather than lower level languages like C, I decided\n          to begin writing a new parser in C# which would not depend on GMime. This would also allow me to have\n          more flexibility in that I'd be able use Generics and create a more .NET-compliant API.\n        </para>\n      </content>\n    </section>\n\n    <section>\n      <title>Performance</title>\n      <content>\n        <para>\n          While mainstream beliefs may suggest that C# can never be as fast as C, it turns out that with a bit\n          of creative parser design and a few clever optimizations\n          [<externalLink>\n            <linkText>1</linkText>\n            <linkUri>http://jeffreystedfast.blogspot.com/2013/09/optimization-tips-tricks-used-by.html</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>][<externalLink>\n            <linkText>2</linkText>\n            <linkUri>http://jeffreystedfast.blogspot.com/2013/10/optimization-tips-tricks-used-by.html</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>], MimeKit's performance is actually <externalLink>\n            <linkText>on par with GMime</linkText>\n            <linkUri>http://jeffreystedfast.blogspot.com/2014/03/gmime-gets-speed-boost.html</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>.\n        </para>\n        <para>\n          Since GMime is pretty well-known as a high-performance native MIME parser and MimeKit more-or-less\n          matches GMime's performance, it stands to reason that MimeKit is likely unsurpassed in performance in\n          the .NET MIME parser space.\n        </para>\n        <para>\n          For a comparison, as I <externalLink>\n            <linkText>blogged here</linkText>\n            <linkUri>http://jeffreystedfast.blogspot.com/2013/10/optimization-tips-tricks-used-by.html</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink> (I have since optimized MimeKit by at least another 30%), MimeKit is more than 25x faster than\n          OpenPOP.NET, 75x faster than SharpMimeTools, and 65x faster than regex-based parsers. Even the commercial MIME\n          parser offerings such as LimiLabs' Mail.dll and NewtonIdeas' Mime4Net cannot even come close to matching\n          MimeKit's performance (they are both orders of magnitude slower than MimeKit).\n        </para>\n      </content>\n    </section>\n\n    <section>\n      <title>Donate</title>\n      <content>\n        <para>\n          MimeKit and MailKit are personal open source projects that I have put thousands of hours into perfecting\n          by continuously improving the API based on feedback from developers like yourself, writing documentation,\n          and optimizing with the goal of making them the very best email frameworks for .NET. I need your help to\n          achieve this.\n        </para>\n        <para>\n          Donating helps pay for things such as web hosting, domain registration and licenses for developer tools\n          such as a performance profiler, memory profiler, a static code analysis tool, and more.\n        </para>\n        <para>\n          If MimeKit and/or MailKit have been helpful to you, please consider donating. Your contributions will be\n          greatly appreciated.\n        </para>\n        <markup>\n          <p>\n            <a href=\"https://github.com/sponsors/jstedfast\" _target=\"blank\">\n              <img src=\"https://www.paypal.com/en_US/i/btn/x-click-but21.gif\" alt=\"Click here to lend your support to MimeKit and MailKit by making a donation!\" border=\"0\" />\n            </a>\n          </p>\n        </markup>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Getting-Started\"/>\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/License.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"License\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"License\">\n      <title>MIT License</title>\n      <content>\n        <para>\n          Permission is hereby granted, free of charge, to any person obtaining a copy\n          of this software and associated documentation files (the \"Software\"), to deal\n          in the Software without restriction, including without limitation the rights\n          to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n          copies of the Software, and to permit persons to whom the Software is\n          furnished to do so, subject to the following conditions:\n        </para>\n        <para>\n          The above copyright notice and this permission notice shall be included in\n          all copies or substantial portions of the Software.\n        </para>\n        <para>\n          THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n          IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n          FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n          AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n          LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n          OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n          THE SOFTWARE.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"Copyright\">\n      <title>Copyright Notices</title>\n      <content>\n        <para>\n          <application>MimeKit</application> and <application>MailKit</application> are Copyright © 2013-2026 Jeffrey Stedfast\n        </para>\n      </content>\n    </section>\n\n    <relatedTopics/>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Parsing-Messages.aml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Parsing-Messages\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <para>\n        One of the more common operations that MimeKit is meant for is parsing\n        email messages from arbitrary streams. There are two ways of accomplishing\n        this task.\n      </para>\n      <autoOutline />\n    </introduction>\n\n    <!-- Optional procedures followed by optional code example but must have\n         at least one procedure or code example -->\n    <section address=\"LoadMessage\">\n      <title>Using the Load methods</title>\n      <content>\n        <para>The easiest way is to use one of the Load methods on\n        <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>.</para>\n        <code language=\"c#\" source=\"Examples\\MimeMessageLoad.cs\" />\n      </content>\n    </section>\n\n    <section address=\"MimeParser\">\n      <title>Using MimeParser directly</title>\n      <content>\n        <para>The second way is to use the\n        <codeEntityReference>T:MimeKit.MimeParser</codeEntityReference> class.\n        For the most part, using the MimeParser directly is not necessary unless\n        you wish to parse a Unix mbox file stream. However, this is how you would\n        do it:</para>\n        <code language=\"c#\" source=\"Examples\\MimeParserExamples.cs\" region=\"ParseMessage\" />\n        <para>For Unix mbox file streams, you would use the parser like this:</para>\n        <code language=\"c#\" source=\"Examples\\MimeParserExamples.cs\" region=\"ParseMbox\" />\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Creating-Messages\"/>\n      <link xlink:href=\"Working-With-Messages\"/>\n      \n      <!--<codeEntityReference autoUpgrade=\"true\" qualifyHint=\"true\">M:MimeKit.MimeParser.ParseMessage(System.Threading.CancellationToken)</codeEntityReference>\n      <codeEntityReference autoUpgrade=\"true\" qualifyHint=\"true\">M:MimeKit.MimeMessage.Load(System.IO.Stream,System.Threading.CancellationToken)</codeEntityReference>-->\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Working-With-Messages.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Working-With-Messages\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <para>MimeKit provides a number of ways to get the data you want from a message.</para>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"MessageStructure\">\n      <title>The Message Structure</title>\n      <content>\n        <para>\n          A common misunderstanding about email is that there is a well-defined\n          message body and then a list of attachments. This is not really the case.\n          The reality is that MIME is a tree structure of content, much like a file\n          system.\n        </para>\n        <para>\n          Luckily, MIME does define a set of general rules for how mail clients\n          should interpret this tree structure of MIME parts. The\n          <literal>Content-Disposition</literal> header is meant to provide hints to\n          the receiving client as to which parts are meant to be displayed as part of\n          the message body and which are meant to be interpreted as attachments.\n        </para>\n        <para>\n          The <literal>Content-Disposition</literal> header will generally have\n          one of two values: <literal>inline</literal> or\n          <literal>attachment</literal>.\n        </para>\n        <para>\n          The meaning of these values should be fairly obvious. If the value is\n          <literal>attachment</literal>, then the content of said MIME part is meant\n          to be presented as a file attachment separate from the core message. However,\n          if the value is <literal>inline</literal>, then the content of that MIME part\n          is meant to be displayed inline within the mail client's rendering of the\n          core message body. If the <literal>Content-Disposition</literal> header does\n          not exist, then it should be treated as if the value were\n          <literal>inline</literal>.\n        </para>\n        <para>\n          Technically, every part that lacks a <literal>Content-Disposition</literal>\n          header or that is marked as <literal>inline</literal>, then, is part of the\n          core message body.\n        </para>\n        <para>There's a bit more to it than that, though.</para>\n        <para>\n          Modern MIME messages will often contain a\n          <literal>multipart/alternative</literal> MIME container which will generally\n          contain a <literal>text/plain</literal> and <literal>text/html</literal> version\n          of the text that the sender wrote. The <literal>text/html</literal> version is\n          typically formatted much closer to what the sender saw in his or her WYSIWYG\n          editor than the <literal>text/plain</literal> version.\n        </para>\n        <para>\n          The reason for sending the message text in both formats is that not\n          all mail clients are capable of displaying HTML.\n        </para>\n        <para>\n          The receiving client should only display one of the alternative views\n          contained within the <literal>multipart/alternative</literal> container.\n          Since alternative views are listed in order of least faithful to most\n          faithful with what the sender saw in his or her WYSIWYG editor, the\n          receiving client should walk over the list of alternative views starting\n          at the end and working backwards until it finds a part that it is capable\n          of displaying.\n        </para>\n        <para>\n          Example:<markup><pre>\nmultipart/alternative\n  text/plain\n  text/html</pre></markup>\n        </para>\n        <para>\n          As seen in the example above, the <literal>text/html</literal> part is\n          listed last because it is the most faithful to what the sender saw in his or\n          her WYSIWYG editor when writing the message.\n        </para>\n        <para>\n          To make matters even more complicated, sometimes modern mail clients\n          will use a <literal>multipart/related</literal> MIME container instead of a\n          simple <literal>text/html</literal> part in order to embed images and other\n          multimedia content within the HTML.\n        </para>\n        <para>Example:<markup><pre>\nmultipart/alternative\n  text/plain\n  multipart/related\n    text/html\n    image/jpeg\n    video/mp4\n    image/png</pre></markup>\n        </para>\n        <para>\n          In the example above, one of the alternative views is a\n          <literal>multipart/related</literal> container which contains an HTML\n          version of the message body that references the sibling video and images.\n        </para>\n        <para>\n          Now that you have a rough idea of how a message is structured and how\n          to interpret various MIME entities, the next step is learning how to traverse\n          the MIME tree using MimeKit.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"TraversingMessages\">\n      <title>Traversing a Message</title>\n      <content>\n        <para>\n          The <codeEntityReference>P:MimeKit.MimeMessage.Body</codeEntityReference>\n          is the top-level MIME entity of the message. Generally, it will either be a\n          <codeEntityReference>T:MimeKit.TextPart</codeEntityReference> or a\n          <codeEntityReference>T:MimeKit.Multipart</codeEntityReference>.\n        </para>\n        <para>\n          There are 3 ways of iterating over the tree structure of a message using MimeKit.\n          The first way is to recursively traverse the MIME structure like this:\n        </para>\n        <code language=\"c#\" source=\"Examples\\RecursivelyTraverse.cs\"/>\n        <para>\n          A second way, which is a bit cleaner and doesn't require recursive methods, is\n          to use a <codeEntityReference>T:MimeKit.MimeIterator</codeEntityReference>:\n        </para>\n        <code language=\"c#\" source=\"Examples\\MimeIterator.cs\" />\n        <para>\n          And finally, for those that prefer to use the\n          <externalLink>\n            <linkText>visitor pattern</linkText>\n            <linkUri>http://en.wikipedia.org/wiki/Visitor_pattern</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>, MimeKit includes the\n          <codeEntityReference>T:MimeKit.MimeVisitor</codeEntityReference> class for\n          visiting each node in the MIME tree structure. For example, the following\n          MimeVisitor subclass could be used to generate HTML to be rendered by a\n          browser control (such as <codeEntityReference>\n            T:System.Windows.Forms.WebBrowser\n          </codeEntityReference>):\n        </para>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"HtmlPreviewVisitor\"/>\n        <para>And the way you'd use this visitor might look something like this:</para>\n        <code language=\"c#\" source=\"Examples\\MimeVisitorExamples.cs\" region=\"RenderMessage\"/>\n      </content>\n    </section>\n\n    <section address=\"TextBodyAndHtmlBody\">\n      <title>Using the TextBody and HtmlBody Properties</title>\n      <content>\n        <para>\n          To simplify the common task of getting the text of a message, MimeKit includes\n          two properties that can help you get the <literal>text/plain</literal> or\n          <literal>text/html</literal> version of the message body. These are\n          <codeEntityReference>P:MimeKit.MimeMessage.TextBody</codeEntityReference> and\n          <codeEntityReference>P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>,\n          respectively.\n        </para>\n        <para>\n          Keep in mind, however, that at least with the\n          <codeEntityReference>P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>\n          property, it may be that the HTML part is a child of a\n          <literal>multipart/related</literal>, allowing it to refer to images and other\n          types of media that are also contained within that\n          <literal>multipart/related</literal> entity. This property is really only a\n          convenience property and is not a really good substitute for traversing the\n          MIME structure yourself so that you may properly interpret related content.\n        </para>\n      </content>\n    </section>\n\n    <section address=\"EnumeratingBodyParts\">\n      <title>Enumerating Body Parts</title>\n      <content>\n        <para>\n          Sometimes traversing the body of a message is overkill when all you really\n          need to do is something quick &amp; dirty. For this reason, MimeKit provides\n          the <codeEntityReference>P:MimeKit.MimeMessage.BodyParts</codeEntityReference>\n          and <codeEntityReference>P:MimeKit.MimeMessage.Attachments</codeEntityReference>\n          properties which flatten out the hierarchy and allow you to iterate over all\n          of the body parts (or attachments) in depth-first order.\n        </para>\n        <code language=\"c#\" source=\"Examples\\AttachmentExamples.cs\" region=\"SaveAttachments\"/>\n      </content>\n    </section>\n\n    <section address=\"DecodingContent\">\n      <title>Getting the Decoded Content of a MimePart</title>\n      <content>\n        <para>\n          At some point, you're going to want to extract the decoded content of a\n          <codeEntityReference>T:MimeKit.MimePart</codeEntityReference> (such as an image)\n          and save it to disk or feed it to a UI control to display it.\n        </para>\n        <para>\n          Once you've found the <codeEntityReference>T:MimeKit.MimePart</codeEntityReference>\n          object that you'd like to extract the content of, here's how you can save the\n          decoded content to a file:\n        </para>\n        <code language=\"c#\" source=\"Examples\\DecodingContent.cs\"/>\n        <para>\n          You can also get access to the original raw content by \"opening\" the\n          <codeEntityReference>P:MimeKit.MimePart.Content</codeEntityReference>.\n          This might be useful if you want to pass the content off to a UI control that\n          can do its own loading from a stream.\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpeningContent.cs\"/>\n        <para>\n          There are a number of useful filters that can be applied to a\n          <codeEntityReference>T:MimeKit.IO.FilteredStream</codeEntityReference>, so if you\n          find this type of interface appealing, I would suggest taking a look at the available\n          filters in the <codeEntityReference>N:MimeKit.IO.Filters</codeEntityReference>\n          namespace or even write your own! The possibilities are limited only by your\n          imagination.\n        </para>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Parsing-Messages\"/>\n      \n      <!--<codeEntityReference qualifyHint=\"true\">P:MimeKit.MimeMessage.TextBody</codeEntityReference>\n      <codeEntityReference qualifyHint=\"true\">P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>\n      <codeEntityReference autoUpgrade=\"true\" qualifyHint=\"true\">M:MimeKit.MimeMessage.GetTextBody(MimeKit.Text.TextFormat)</codeEntityReference>\n      <codeEntityReference qualifyHint=\"true\">P:MimeKit.MimeMessage.BodyParts</codeEntityReference>\n      <codeEntityReference qualifyHint=\"true\">P:MimeKit.MimeMessage.Attachments</codeEntityReference>\n      <codeEntityReference>T:MimeKit.MimeIterator</codeEntityReference>-->\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Working-With-OpenPGP.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Working-With-OpenPGP\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"CreatingYourOwnPGPContext\">\n      <title>Creating your own OpenPGP Context</title>\n      <content>\n        <para>\n          Before you can start working with <application>OpenPGP</application> in MimeKit,\n          you will first need to create and register your own\n          <codeEntityReference>T:MimeKit.Cryptography.OpenPgpContext</codeEntityReference>.\n          For the sake of simplicity, MimeKit includes a\n          <codeEntityReference>T:MimeKit.Cryptography.GnuPGContext</codeEntityReference>\n          that does most of the work of interoperating with the popular\n          <externalLink>\n            <linkText>GnuPG</linkText>\n            <linkUri>https://www.gnupg.org</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>\n          program for you.\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"MyGnuPGContext\"/>\n        <para>\n          To register your class, you can use the following code snippet:\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"RegisterCustomContext\"/>\n        <para>\n          Now you are ready to encrypt, decrypt, sign and verify messages using PGP!\n        </para>\n      </content>\n    </section>\n\n    <section address=\"Encrypt\">\n      <title>Encrypting Messages with PGP/MIME</title>\n      <content>\n        <para>\n          PGP/MIME uses a MIME part with a <literal>multipart/encrypted</literal> mime-type\n          to encapsulate encrypted data. To encrypt any\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference>,\n          use the\n          <codeEntityReference autoUpgrade=\"true\" linkText=\"MultipartEncrypted.Encrypt\">\n            Overload:MimeKit.Cryptography.MultipartEncrypted.Encrypt\n          </codeEntityReference>\n          method:\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"Encrypt\"/>\n        <alert class=\"tip\">\n          <para>\n            When you know that you will be encrypting a message, it may be a good idea to use\n            a <codeEntityReference>T:MimeKit.Cryptography.SecureMailboxAddress</codeEntityReference>\n            instead of a <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>\n            for each of the recipients, allowing you to specify the unique fingerprint of each\n            recipient's PGP key.\n          </para>\n        </alert>\n      </content>\n    </section>\n\n    <section address=\"Decrypt\">\n      <title>Decrypting PGP/MIME Messages</title>\n      <content>\n        <para>\n          As mentioned earlier, PGP/MIME uses a <literal>multipart/encrypted</literal>\n          part to encapsulate the encrypted content.\n        </para>\n        <para>\n          A <literal>multipart/encrypted</literal> contains exactly 2 parts: the first\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the version\n          information while the second\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the actual\n          encrypted content and will typically be an <literal>application/octet-stream</literal>.\n        </para>\n        <para>\n          The first thing you must do is find the\n          <codeEntityReference>T:MimeKit.Cryptography.MultipartEncrypted</codeEntityReference>\n          part (see the section on <link xlink:href=\"Working-With-Messages#TraversingMessages\"/>).\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"Decrypt\"/>\n      </content>\n    </section>\n\n    <section address=\"Sign\">\n      <title>Digitally Signing Messages using PGP/MIME</title>\n      <content>\n        <para>\n          PGP/MIME uses a MIME part with a <literal>multipart/signed</literal> mime-type to\n          contain the signed content and the detached signature data.\n        </para>\n        <para>\n          Here's how you might digitally sign a message using PGP/MIME:\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"Sign\"/>\n        <para>\n          You can also do your own PGP key lookups instead of relying on email addresses\n          to match up with the user's secret key.\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"SignWithKey\"/>\n      </content>\n    </section>\n\n    <section address=\"Verify\">\n      <title>Verifying PGP/MIME Digital Signatures</title>\n      <content>\n        <para>\n          As mentioned earlier, PGP/MIME uses a <literal>multipart/signed</literal> part\n          to contain the signed content and the detached signature data.\n        </para>\n        <para>\n          A <literal>multipart/signed</literal> contains exactly 2 parts: the first\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the signed\n          content while the second\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the detached\n          signature and, by default, will be an\n          <codeEntityReference>T:MimeKit.Cryptography.ApplicationPgpSignature</codeEntityReference>\n          part.\n        </para>\n        <para>\n          Because the <literal>multipart/signed</literal> part may have been signed by\n          multiple signers, it is important to verify each of the digital signatures\n          (one for each signer) that are returned by the\n          <codeEntityReference autoUpgrade=\"true\">\n            Overload:MimeKit.Cryptography.MultipartSigned.Verify\n          </codeEntityReference>\n          method:\n        </para>\n        <code language=\"c#\" source=\"Examples\\OpenPGPExamples.cs\" region=\"Verify\"/>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Working-With-Messages\"/>\n      <link xlink:href=\"Working-With-SMime\"/>\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/Content/Working-With-SMime.aml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Working-With-SMime\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns=\"http://ddue.schemas.microsoft.com/authoring/2003/5\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n    <!--\n    <summary>\n      <para>Optional summary abstract</para>\n    </summary>\n    -->\n\n    <introduction>\n      <autoOutline />\n    </introduction>\n\n    <section address=\"CreatingYourOwnSMimeContext\">\n      <title>Creating your own S/MIME Context</title>\n      <content>\n        <para>\n          Before you can begin using MimeKit's S/MIME support, you will need to decide which\n          database to use for certificate storage.\n        </para>\n        <para>\n          If you are targeting any of the <application>Xamarin</application> platforms\n          (or Linux), you won't need to do anything (although you certainly can if you want to)\n          because, by default, MimeKit will automatically use the\n          <application>Mono.Data.Sqlite</application> binding to\n          <externalLink>\n            <linkText>SQLite</linkText>\n            <linkUri>https://www.sqlite.org/</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>.\n        </para>\n        <para>\n          If you are, however, on any of the <application>Windows</application> platforms,\n          you'll need to pick a <codeEntityReference>N:System.Data</codeEntityReference>\n          provider such as\n          <externalLink>\n            <linkText>System.Data.SQLite</linkText>\n            <linkUri>https://www.nuget.org/packages/System.Data.SQLite</linkUri>\n            <linkTarget>_blank</linkTarget>\n          </externalLink>. Once you've made your choice and installed it (via NuGet or however),\n          you'll need to implement your own\n          <codeEntityReference>T:MimeKit.Cryptography.SecureMimeContext</codeEntityReference>\n          subclass. Luckily, it's very simple to do. Assuming you've chosen\n          <application>System.Data.SQLite</application>, here's how you'd implement your own\n          <codeEntityReference>T:MimeKit.Cryptography.SecureMimeContext</codeEntityReference>\n          class:\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"MySecureMimeContext\"/>\n        <para>\n          To register your class, you can use the following code snippet:\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"RegisterCustomContext\"/>\n        <para>\n          Now you are ready to encrypt, decrypt, sign and verify messages using S/MIME!\n        </para>\n      </content>\n    </section>\n\n    <section address=\"Encrypt\">\n      <title>Encrypting Messages with S/MIME</title>\n      <content>\n        <para>\n          Instead of using a <literal>multipart/encrypted</literal> MIME part to encapsulate\n          encrypted content like OpenPGP, S/MIME uses <literal>application/pkcs7-mime</literal>.\n          To encrypt any <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference>,\n          use the\n          <codeEntityReference autoUpgrade=\"true\" qualifyHint=\"true\">\n            Overload:MimeKit.Cryptography.ApplicationPkcs7Mime.Encrypt\n          </codeEntityReference>\n          method:\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"Encrypt\"/>\n        <alert class=\"tip\">\n          <para>\n            When you know that you will be encrypting a message, it may be a good idea to use\n            a <codeEntityReference>T:MimeKit.Cryptography.SecureMailboxAddress</codeEntityReference>\n            instead of a <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>\n            for each of the recipients, allowing you to specify the unique fingerprint of each\n            recipient's X.509 certificate.\n          </para>\n        </alert>\n      </content>\n    </section>\n\n    <section address=\"Decrypt\">\n      <title>Decrypting S/MIME Messages</title>\n      <content>\n        <para>\n          As mentioned earlier, S/MIME uses an <literal>application/pkcs7-mime</literal> part with\n          an <literal>smime-type</literal> parameter with a value of <literal>enveloped-data</literal>\n          to encapsulate the encrypted content.\n        </para>\n        <para>\n          The first thing you must do is find the\n          <codeEntityReference>T:MimeKit.Cryptography.ApplicationPkcs7Mime</codeEntityReference>\n          part (see the section on <link xlink:href=\"Working-With-Messages#TraversingMessages\"/>).\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"Decrypt\"/>\n      </content>\n    </section>\n\n    <section address=\"Sign\">\n      <title>Digitally Signing Messages using S/MIME</title>\n      <content>\n        <para>\n          S/MIME can use either a <literal>multipart/signed</literal> MIME part or a\n          <literal>application/pkcs7-mime</literal> MIME part for signed data.\n        </para>\n        <para>\n          To digitally sign a <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference>\n          using a <literal>multipart/signed</literal> MIME part, it works exactly the same\n          as it does for <link xlink:href=\"Working-With-OpenPGP#Sign\">OpenPGP</link> using\n          <codeEntityReference autoUpgrade=\"true\" qualifyHint=\"true\">\n            Overload:MimeKit.Cryptography.MultipartSigned.Create\n          </codeEntityReference>\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"MultipartSign\"/>\n        <para>\n          You can also do your own certificate lookups instead of relying on email addresses\n          to match up with the user's certificate.\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"MultipartSignWithKey\"/>\n        <para>\n          You can also choose to digitally sign a\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> using the\n          <literal>application/pkcs7-mime</literal> format using\n          <codeEntityReference autoUpgrade=\"true\" qualifyHint=\"true\">\n            Overload:MimeKit.Cryptography.ApplicationPkcs7Mime.Sign\n          </codeEntityReference>\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"Pkcs7Sign\"/>\n        <alert class=\"tip\">\n          <para>\n            When you know that you will be signing a message, it may be a good idea to use\n            a <codeEntityReference>T:MimeKit.Cryptography.SecureMailboxAddress</codeEntityReference>\n            instead of a <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>\n            for the sender, allowing you to specify the unique fingerprint of the sender's\n            X.509 certificate.\n          </para>\n        </alert>\n      </content>\n    </section>\n\n    <section address=\"Verify\">\n      <title>Verifying S/MIME Digital Signatures</title>\n      <content>\n        <para>\n          As mentioned earlier, S/MIME typically uses a <literal>multipart/signed</literal>\n          part to contain the signed content and the detached signature data.\n        </para>\n        <para>\n          A <literal>multipart/signed</literal> contains exactly 2 parts: the first\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the signed\n          content while the second\n          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the\n          detached signature and, by default, will be an\n          <codeEntityReference>T:MimeKit.Cryptography.ApplicationPkcs7Signature</codeEntityReference>\n          part.\n        </para>\n        <para>\n          Because the <literal>multipart/signed</literal> part may have been signed by\n          multiple signers, it is important to verify each of the digital signatures\n          (one for each signer) that are returned by the\n          <codeEntityReference autoUpgrade=\"true\">\n            Overload:MimeKit.Cryptography.MultipartSigned.Verify\n          </codeEntityReference>\n          method:\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"VerifyMultipartSigned\"/>\n        <para>\n          It should be noted, however, that while most S/MIME clients will use the preferred\n          <literal>multipart/signed</literal> approach, it is possible that you may encounter an\n          <literal>application/pkcs7-mime</literal> part with an <literal>smime-type</literal>\n          parameter set to <literal>signed-data</literal>. Luckily, MimeKit can handle this\n          format as well:\n        </para>\n        <code language=\"c#\" source=\"Examples\\SMimeExamples.cs\" region=\"VerifyPkcs7\"/>\n      </content>\n    </section>\n\n    <relatedTopics>\n      <link xlink:href=\"Working-With-Messages\"/>\n      <link xlink:href=\"Working-With-OpenPGP\"/>\n    </relatedTopics>\n  </developerConceptualDocument>\n</topic>\n"
  },
  {
    "path": "Documentation/ContentLayout.content",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Topics>\n  <Topic id=\"Introduction\" visible=\"True\" isDefault=\"true\" />\n  <Topic id=\"License\" visible=\"True\" title=\"License Agreement\" />\n  <Topic id=\"Getting-Started\" visible=\"True\" isExpanded=\"true\" title=\"Getting Started\">\n    <Topic id=\"Creating-Messages\" visible=\"True\" title=\"Creating messages\" />\n    <Topic id=\"Parsing-Messages\" visible=\"True\" title=\"Parsing messages\" />\n    <Topic id=\"Working-With-Messages\" visible=\"True\" title=\"Working with messages\" />\n    <Topic id=\"Working-With-OpenPGP\" visible=\"True\" title=\"Working with OpenPGP\" />\n    <Topic id=\"Working-With-SMime\" visible=\"True\" isSelected=\"true\" title=\"Working with S/MIME\" />\n  </Topic>\n  <Topic id=\"Frequently-Asked-Questions\" visible=\"True\" title=\"Frequently Asked Questions\" />\n</Topics>"
  },
  {
    "path": "Documentation/Documentation.shfbproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"14.0\">\n  <PropertyGroup>\n    <!-- The configuration and platform will be used to determine which assemblies to include from solution and\n\t\t\t\t project documentation sources -->\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>59115814-a1e3-46ae-ae30-4065ae8f4caf</ProjectGuid>\n    <SHFBSchemaVersion>2017.9.26.0</SHFBSchemaVersion>\n    <!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual Studio adds them anyway -->\n    <AssemblyName>Documentation</AssemblyName>\n    <RootNamespace>Documentation</RootNamespace>\n    <Name>Documentation</Name>\n    <!-- SHFB properties -->\n    <FrameworkVersion>Cross-platform (.NET Core/.NET Standard)</FrameworkVersion>\n    <OutputPath>bin\\docs\\</OutputPath>\n    <HtmlHelpName>Documentation</HtmlHelpName>\n    <Language>en-US</Language>\n    <TransformComponentArguments>\n      <Argument Key=\"RobotsMetadata\" Value=\"\" />\n      <Argument Key=\"BibliographyDataFile\" Value=\"\" />\n      <Argument Key=\"LogoFile\" Value=\"Help.png\" />\n      <Argument Key=\"LogoHeight\" Value=\"\" />\n      <Argument Key=\"LogoWidth\" Value=\"\" />\n      <Argument Key=\"LogoAltText\" Value=\"MimeKit\" />\n      <Argument Key=\"LogoPlacement\" Value=\"left\" />\n      <Argument Key=\"LogoAlignment\" Value=\"left\" />\n      <Argument Key=\"LogoUrl\" Value=\"\" />\n      <Argument Key=\"MaxVersionParts\" Value=\"3\" />\n      <Argument Key=\"DefaultLanguage\" Value=\"cs\" />\n      <Argument Key=\"IncludeEnumValues\" Value=\"true\" />\n      <Argument Key=\"EnumMemberSortOrder\" Value=\"Value\" />\n      <Argument Key=\"FlagsEnumValueFormat\" Value=\"IntegerValue\" />\n      <Argument Key=\"FlagsEnumSeparatorSize\" Value=\"0\" />\n      <Argument Key=\"BaseSourceCodeUrl\" Value=\"\" />\n      <Argument Key=\"RequestExampleUrl\" Value=\"\" />\n    </TransformComponentArguments>\n    <BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>\n    <HelpFileFormat>Website</HelpFileFormat>\n    <IndentHtml>False</IndentHtml>\n    <KeepLogFile>False</KeepLogFile>\n    <DisableCodeBlockComponent>False</DisableCodeBlockComponent>\n    <CppCommentsFixup>False</CppCommentsFixup>\n    <CleanIntermediates>True</CleanIntermediates>\n    <MaximumGroupParts>2</MaximumGroupParts>\n    <NamespaceGrouping>False</NamespaceGrouping>\n    <SyntaxFilters>C#</SyntaxFilters>\n    <SdkLinkTarget>Blank</SdkLinkTarget>\n    <RootNamespaceContainer>True</RootNamespaceContainer>\n    <PresentationStyle>VS2013</PresentationStyle>\n    <Preliminary>False</Preliminary>\n    <NamingMethod>MemberName</NamingMethod>\n    <HelpTitle>MailKit Documentation</HelpTitle>\n    <ContentPlacement>AboveNamespaces</ContentPlacement>\n    <RootNamespaceTitle>API Reference</RootNamespaceTitle>\n    <DocumentationSources>\n      <DocumentationSource sourceFile=\"..\\MailKit\\bin\\Release\\net47\\MailKit.dll\" />\n      <DocumentationSource sourceFile=\"..\\MailKit\\bin\\Release\\net47\\MailKit.xml\" />\n      <DocumentationSource sourceFile=\"..\\MailKit\\bin\\Release\\net47\\MimeKit.dll\" />\n      <DocumentationSource sourceFile=\"..\\MailKit\\bin\\Release\\net47\\MimeKit.xml\" />\n    </DocumentationSources>\n    <NamespaceSummaries>\n      <NamespaceSummaryItem name=\"MimeKit\" isDocumented=\"True\">The &lt;b&gt;MimeKit&lt;/b&gt; namespace provides classes that are used to implement the core MIME parsing services of the framework.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.Cryptography\" isDocumented=\"True\">The &lt;b&gt;MimeKit.Cryptography&lt;/b&gt; namespace provides classes that are necessary for dealing with PGP, S/MIME, and other cryptographic services.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.Encodings\" isDocumented=\"True\">The &lt;b&gt;MimeKit.Encodings&lt;/b&gt; namespace provides classes for encoding and decoding various MIME transfer encodings.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.IO\" isDocumented=\"True\">The &lt;b&gt;MimeKit.IO&lt;/b&gt; namespace provides classes that extend the &lt;b&gt;System.IO&lt;/b&gt; namespace.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.IO.Filters\" isDocumented=\"True\">The &lt;b&gt;MimeKit.IO.Filters&lt;/b&gt; namespace provides filters for use with &lt;a href=\"T_MimeKit_IO_FilteredStream.htm\"&gt;MimeKit.IO.FilteredStream&lt;/a&gt;.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.Text\" isDocumented=\"True\">The &lt;b&gt;MimeKit.Text&lt;/b&gt; namespace provides classes that are used for converting between various text formats.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.Tnef\" isDocumented=\"True\">The &lt;b&gt;MimeKit.Tnef&lt;/b&gt; namespace provides classes that are used for dealing with Microsoft TNEF attachments.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MimeKit.Utils\" isDocumented=\"True\">The &lt;b&gt;MimeKit.Utils&lt;/b&gt; namespace provides various utility classes.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit\" isDocumented=\"True\">The &lt;b&gt;MailKit&lt;/b&gt; namespace provides classes that are used to implement the core services of the framework.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit.Net.Imap\" isDocumented=\"True\">The &lt;b&gt;MailKit.Net.Imap&lt;/b&gt; namespace provides classes that are necessary for managing messages on an IMAP server.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit.Net.Pop3\" isDocumented=\"True\">The &lt;b&gt;MailKit.Net.Pop3&lt;/b&gt; namespace provides classes that are necessary for downloading messages from a POP3 server.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit.Net.Proxy\" isDocumented=\"True\">The &lt;b&gt;MailKit.Net.Proxy&lt;/b&gt; namespace provides classes that are necessary for connecting via proxy servers.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit.Net.Smtp\" isDocumented=\"True\">The &lt;b&gt;MailKit.Net.Smtp&lt;/b&gt; namespace provides classes that are necessary for sending messages to an SMTP server.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit.Search\" isDocumented=\"True\">The &lt;b&gt;MailKit.Search&lt;/b&gt; namespace provides classes that are necessary for searching folders for messages matching a set of criteria.</NamespaceSummaryItem>\n      <NamespaceSummaryItem name=\"MailKit.Security\" isDocumented=\"True\">The &lt;b&gt;MailKit.Security&lt;/b&gt; namespace provides implementations of various SASL authentication mechanisms used by the IMAP, POP3 and SMTP clients.</NamespaceSummaryItem>\n    </NamespaceSummaries>\n    <CopyrightText>Copyright &amp;#169%3b 2013-2026 Jeffrey Stedfast</CopyrightText>\n    <WorkingPath>obj\\</WorkingPath>\n    <FooterText>&amp;lt%3b!-- Global site tag %28gtag.js%29 - Google Analytics --&amp;gt%3b\n&amp;lt%3bscript src=&amp;quot%3bhttps://www.googletagmanager.com/gtag/js%3fid=UA-63841238-1&amp;quot%3b&amp;gt%3b&amp;lt%3b/script&amp;gt%3b\n&amp;lt%3bscript&amp;gt%3b\n  window.dataLayer = window.dataLayer || []%3b\n  function gtag%28%29{{dataLayer.push%28arguments%29%3b}}\n  gtag%28&amp;#39%3bjs&amp;#39%3b, new Date%28%29%29%3b\n\n  gtag%28&amp;#39%3bconfig&amp;#39%3b, &amp;#39%3bUA-63841238-1&amp;#39%3b%29%3b\n&amp;lt%3b/script&amp;gt%3b</FooterText>\n    <SaveComponentCacheCapacity>100</SaveComponentCacheCapacity>\n    <HelpFileVersion>1.0.0.0</HelpFileVersion>\n    <FeedbackEMailLinkText>Jeffrey Stedfast</FeedbackEMailLinkText>\n    <FeedbackEMailAddress>jestedfa%40microsoft.com</FeedbackEMailAddress>\n    <CopyrightHref>https://github.com/jstedfast</CopyrightHref>\n    <MissingTags>Summary, Parameter, Returns, Value, Remarks, AutoDocumentCtors, Namespace, TypeParameter, AutoDocumentDispose</MissingTags>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <!-- There are no properties for these groups.  AnyCPU needs to appear in order for Visual Studio to perform\n\t\t\t the build.  The others are optional common platform types that may appear. -->\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n  </PropertyGroup>\n  <ItemGroup>\n    <Folder Include=\"Content\" />\n    <Folder Include=\"icons\" />\n    <Folder Include=\"media\" />\n    <Folder Include=\"Examples\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Content\\Creating-Messages.aml\" />\n    <None Include=\"Content\\Frequently-Asked-Questions.aml\" />\n    <None Include=\"Content\\Getting-Started.aml\" />\n    <None Include=\"Content\\Introduction.aml\" />\n    <None Include=\"Content\\License.aml\" />\n    <None Include=\"Content\\Parsing-Messages.aml\" />\n    <None Include=\"Content\\Working-With-Messages.aml\" />\n    <None Include=\"Content\\Working-With-OpenPGP.aml\" />\n    <None Include=\"Content\\Working-With-SMime.aml\" />\n    <None Include=\"Examples\\BodyBuilder.cs\" />\n    <None Include=\"Examples\\CreateMultipartAlternative.cs\" />\n    <None Include=\"Examples\\CreateMultipartMixed.cs\" />\n    <None Include=\"Examples\\CreateSimpleMessage.cs\" />\n    <None Include=\"Examples\\DecodingContent.cs\" />\n    <None Include=\"Examples\\DkimExamples.cs\" />\n    <None Include=\"Examples\\ForwardExamples.cs\" />\n    <None Include=\"Examples\\ImapBodyPartExamples.cs\" />\n    <None Include=\"Examples\\ImapExamples.cs\" />\n    <None Include=\"Examples\\ImapIdleExample.cs\" />\n    <None Include=\"Examples\\MessageDeliveryStatusExamples.cs\" />\n    <None Include=\"Examples\\MimeIterator.cs\" />\n    <None Include=\"Examples\\MimeMessageLoad.cs\" />\n    <None Include=\"Examples\\MimeParserExamples.cs\" />\n    <None Include=\"Examples\\MimeVisitorExamples.cs\" />\n    <None Include=\"Examples\\MultipartFormDataExamples.cs\" />\n    <None Include=\"Examples\\OAuth2ExchangeExample.cs\" />\n    <None Include=\"Examples\\OAuth2GMailExample.cs\" />\n    <None Include=\"Examples\\OpeningContent.cs\" />\n    <None Include=\"Examples\\OpenPGPExamples.cs\" />\n    <None Include=\"Examples\\ParameterExamples.cs\" />\n    <None Include=\"Examples\\Pop3Examples.cs\" />\n    <None Include=\"Examples\\ArcSignerExample.cs\" />\n    <None Include=\"Examples\\ArcVerifierExample.cs\" />\n    <None Include=\"Examples\\DkimVerifierExample.cs\" />\n    <None Include=\"Examples\\RecursivelyTraverse.cs\" />\n    <None Include=\"Examples\\AttachmentExamples.cs\" />\n    <None Include=\"Examples\\SMimeExamples.cs\" />\n    <None Include=\"Examples\\SmtpExamples.cs\" />\n    <None Include=\"Examples\\SslCertificateValidation.cs\" />\n    <None Include=\"Examples\\VerifySignature.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ContentLayout Include=\"ContentLayout.content\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Examples\\InlinePGPExample.txt\" />\n    <Content Include=\"icons\\Help.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Image Include=\"media\\clone.png\">\n      <ImageId>clone</ImageId>\n      <AlternateText>Clone MailKit source code from GitHub using TortoiseGit.</AlternateText>\n    </Image>\n    <Image Include=\"media\\update.png\">\n      <ImageId>update</ImageId>\n      <AlternateText>Update MailKit source code via TortoiseGit using the Pull and Submodule Update buttons.</AlternateText>\n    </Image>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\MailKit\\MailKit.csproj\">\n      <Name>MailKit</Name>\n      <Project>{e543a427-93de-4e65-adf2-44412e440fb1}</Project>\n      <Private>True</Private>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\submodules\\MimeKit\\MimeKit\\MimeKit.csproj\">\n      <Name>MimeKit</Name>\n      <Project>{faec8a91-6983-4ed9-a414-09c6b65b13bb}</Project>\n      <Private>True</Private>\n    </ProjectReference>\n  </ItemGroup>\n  <!-- Import the SHFB build targets -->\n  <Import Project=\"$(SHFBROOT)\\SandcastleHelpFileBuilder.targets\" />\n</Project>"
  },
  {
    "path": "Documentation/Examples/ArcSignerExample.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnamespace ArcSignerExample\n{\n    class ExampleArcSigner : ArcSigner\n    {\n        public ExampleArcSigner (Stream stream, string domain, string selector, DkimSignatureAlgorithm algorithm = DkimSignatureAlgorithm.RsaSha256) : base (stream, domain, selector, algorithm)\n        {\n        }\n\n        public ExampleArcSigner (string fileName, string domain, string selector, DkimSignatureAlgorithm algorithm = DkimSignatureAlgorithm.RsaSha256) : base (fileName, domain, selector, algorithm)\n        {\n        }\n\n        public ExampleArcSigner (AsymmetricKeyParameter key, string domain, string selector, DkimSignatureAlgorithm algorithm = DkimSignatureAlgorithm.RsaSha256) : base (key, domain, selector, algorithm)\n        {\n        }\n\n        public string AuthenticationServiceIdentifier {\n            get; set;\n        }\n\n        /// <summary>\n        /// Generate the ARC-Authentication-Results header.\n        /// </summary>\n        /// <remarks>\n        /// The ARC-Authentication-Results header contains information detailing the results of\n        /// authenticating/verifying the message via ARC, DKIM, SPF, etc.\n        ///\n        /// In the following implementation, we assume that all of these authentication results\n        /// have already been determined by other mail software that has added some Authentication-Results\n        /// headers containing this information.\n        ///\n        /// Note: This method is used when ArcSigner.Sign() is called instead of ArcSigner.SignAsync().\n        /// </remarks>\n        protected override AuthenticationResults GenerateArcAuthenticationResults (FormatOptions options, MimeMessage message, CancellationToken cancellationToken)\n        {\n            var results = new AuthenticationResults (AuthenticationServiceIdentifier);\n\n            for (int i = 0; i < message.Headers.Count; i++) {\n                var header = message.Headers[i];\n\n                if (header.Id != HeaderId.AuthenticationResults)\n                    continue;\n\n                if (!AuthenticationResults.TryParse (header.RawValue, out AuthenticationResults authres))\n                    continue;\n\n                if (authres.AuthenticationServiceIdentifier != AuthenticationServiceIdentifier)\n                    continue;\n\n                foreach (var result in authres.Results) {\n                    if (!results.Results.Any (r => r.Method == result.Method))\n                        results.Results.Add (result);\n                }\n            }\n\n            return results;\n        }\n\n        protected override Task<AuthenticationResults> GenerateArcAuthenticationResultsAsync (FormatOptions options, MimeMessage message, CancellationToken cancellationToken)\n        {\n            return Task.FromResult (GenerateArcAuthenticationResults (options, message, cancellationToken));\n        }\n    }\n\n    class Program\n    {\n        public static void Main (string[] args)\n        {\n            if (args.Length < 2) {\n                Help ();\n                return;\n            }\n\n            for (int i = 0; i < args.Length; i++) {\n                if (args[i] == \"--help\") {\n                    Help ();\n                    return;\n                }\n            }\n\n            var headers = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };\n            var signer = new ExampleArcSigner (\"privatekey.pem\", \"example.com\", \"brisbane\", DkimSignatureAlgorithm.RsaSha256) {\n                HeaderCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,\n                BodyCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,\n                AgentOrUserIdentifier = \"@eng.example.com\",\n            };\n\n            if (!File.Exists (args[0])) {\n                Console.Error.WriteLine (\"{0}: No such file.\", args[0]);\n                return;\n            }\n\n            var message = MimeMessage.Load (args[0]);\n\n            // Prepare the message body to be sent over a 7bit transport (such as older versions of SMTP).\n            // Note: If the SMTP server you will be sending the message over supports the 8BITMIME extension,\n            // then you can use `EncodingConstraint.EightBit` instead.\n            message.Prepare (EncodingConstraint.SevenBit);\n\n            signer.Sign (message, headers);\n\n            using (var stream = File.Create (args[1]))\n                message.WriteTo (stream);\n        }\n\n        static void Help ()\n        {\n            Console.WriteLine (\"Usage is: ArcSigner [options] [message] [output]\");\n            Console.WriteLine ();\n            Console.WriteLine (\"Options:\");\n            Console.WriteLine (\"  --help               This help menu.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/ArcVerifierExample.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing Heijden.DNS;\n\nusing Org.BouncyCastle.Crypto;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnamespace ArcVerifierExample\n{\n    // Note: By using the DkimPublicKeyLocatorBase, we avoid having to parse the DNS TXT records\n    // in order to get the public key ourselves.\n    class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase\n    {\n        readonly Dictionary<string, AsymmetricKeyParameter> cache;\n        readonly Resolver resolver;\n\n        public ExamplePublicKeyLocator ()\n        {\n            cache = new Dictionary<string, AsymmetricKeyParameter> ();\n\n            resolver = new Resolver (\"8.8.8.8\") {\n                TransportType = TransportType.Udp,\n                UseCache = true,\n                Retries = 3\n            };\n        }\n\n        AsymmetricKeyParameter DnsLookup (string domain, string selector, CancellationToken cancellationToken)\n        {\n            var query = selector + \"._domainkey.\" + domain;\n            AsymmetricKeyParameter pubkey;\n\n            // checked if we've already fetched this key\n            if (cache.TryGetValue (query, out pubkey))\n                return pubkey;\n\n            // make a DNS query\n            var response = resolver.Query (query, QType.TXT);\n            var builder = new StringBuilder ();\n\n            // combine the TXT records into 1 string buffer\n            foreach (var record in response.RecordsTXT) {\n                foreach (var text in record.TXT)\n                    builder.Append (text);\n            }\n\n            var txt = builder.ToString ();\n\n            // DkimPublicKeyLocatorBase provides us with this helpful method.\n            pubkey = GetPublicKey (txt);\n\n            cache.Add (query, pubkey);\n\n            return pubkey;\n        }\n\n        public AsymmetricKeyParameter LocatePublicKey (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))\n        {\n            var methodList = methods.Split (new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);\n            for (int i = 0; i < methodList.Length; i++) {\n                if (methodList[i] == \"dns/txt\")\n                    return DnsLookup (domain, selector, cancellationToken);\n            }\n\n            throw new NotSupportedException (string.Format (\"{0} does not include any supported lookup methods.\", methods));\n        }\n\n        public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))\n        {\n            return Task.Run (() => {\n                return LocatePublicKey (methods, domain, selector, cancellationToken);\n            }, cancellationToken);\n        }\n    }\n\n    class Program\n    {\n        public static void Main (string[] args)\n        {\n            if (args.Length == 0) {\n                Help ();\n                return;\n            }\n\n            for (int i = 0; i < args.Length; i++) {\n                if (args[i] == \"--help\") {\n                    Help ();\n                    return;\n                }\n            }\n\n            var locator = new ExamplePublicKeyLocator ();\n            var verifier = new ArcVerifier (locator);\n\n            for (int i = 0; i < args.Length; i++) {\n                if (!File.Exists (args[i])) {\n                    Console.Error.WriteLine (\"{0}: No such file.\", args[i]);\n                    continue;\n                }\n\n                Console.Write (\"{0} -> \", args[i]);\n\n                var message = MimeMessage.Load (args[i]);\n                var result = verifier.Verify (message);\n\n                switch (result.Chain) {\n                case ArcSignatureValidationResult.None:\n                    Console.WriteLine (\"No ARC signatures to verify.\");\n                    break;\n                case ArcSignatureValidationResult.Pass:\n                    Console.ForegroundColor = ConsoleColor.Green;\n                    Console.WriteLine (\"PASS\");\n                    Console.ResetColor ();\n                    break;\n                case ArcSignatureValidationResult.Fail:\n                    Console.ForegroundColor = ConsoleColor.Red;\n                    Console.WriteLine (\"FAIL\");\n                    Console.ResetColor ();\n                    break;\n                }\n            }\n        }\n\n        static void Help ()\n        {\n            Console.WriteLine (\"Usage is: ArcVerifier [options] [messages]\");\n            Console.WriteLine ();\n            Console.WriteLine (\"Options:\");\n            Console.WriteLine (\"  --help               This help menu.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/AttachmentExamples.cs",
    "content": "﻿using System;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n\tpublic static class AttachmentExamples\n\t{\n\t\tpublic static void SaveMimePart (MimePart attachment, string fileName)\n\t\t{\n\t\t\t#region SaveMimePart\n\t\t\tusing (var stream = File.Create (fileName))\n\t\t\t\tattachment.Content.DecodeTo (stream);\n\t\t\t#endregion SaveMimePart\n\t\t}\n\n\t\tpublic static void SaveMimePart (MessagePart attachment, string fileName)\n\t\t{\n\t\t\t#region SaveMessagePart\n\t\t\tusing (var stream = File.Create (fileName))\n\t\t\t\tattachment.Message.WriteTo (stream);\n\t\t\t#endregion SaveMessagePart\n\t\t}\n\n\t\tpublic static void SaveAttachments (MimeMessage message)\n\t\t{\n\t\t\t#region SaveAttachments\n\t\t\tforeach (var attachment in message.Attachments) {\n\t\t\t\tif (attachment is MessagePart) {\n\t\t\t\t\tvar fileName = attachment.ContentDisposition?.FileName;\n\t\t\t\t\tvar rfc822 = (MessagePart) attachment;\n\n\t\t\t\t\tif (string.IsNullOrEmpty (fileName))\n\t\t\t\t\t\tfileName = \"attached-message.eml\";\n\n\t\t\t\t\tusing (var stream = File.Create (fileName))\n\t\t\t\t\t\trfc822.Message.WriteTo (stream);\n\t\t\t\t} else {\n\t\t\t\t\tvar part = (MimePart) attachment;\n\t\t\t\t\tvar fileName = part.FileName;\n\n\t\t\t\t\tusing (var stream = File.Create (fileName))\n\t\t\t\t\t\tpart.Content.DecodeTo (stream);\n\t\t\t\t}\n\t\t\t}\n\t\t\t#endregion SaveAttachments\n\t\t}\n\n\t\tpublic static void SaveAttachments (MimeMessage message)\n\t\t{\n\t\t\t#region SaveBodyParts\n\t\t\tforeach (var bodyPart in message.BodyParts) {\n\t\t\t\tif (!bodyPart.IsAttachment)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (bodyPart is MessagePart) {\n\t\t\t\t\tvar fileName = attachment.ContentDisposition?.FileName;\n\t\t\t\t\tvar rfc822 = (MessagePart) attachment;\n\n\t\t\t\t\tif (string.IsNullOrEmpty (fileName))\n\t\t\t\t\t\tfileName = \"attached-message.eml\";\n\n\t\t\t\t\tusing (var stream = File.Create (fileName))\n\t\t\t\t\t\trfc822.Message.WriteTo (stream);\n\t\t\t\t} else {\n\t\t\t\t\tvar part = (MimePart) attachment;\n\t\t\t\t\tvar fileName = part.FileName;\n\n\t\t\t\t\tusing (var stream = File.Create (fileName))\n\t\t\t\t\t\tpart.Content.DecodeTo (stream);\n\t\t\t\t}\n\t\t\t}\n\t\t\t#endregion SaveBodyParts\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/BodyBuilder.cs",
    "content": "﻿using MimeKit;\n\nnamespace BodyBuilderExamples\n{\n\tpublic class Program\n\t{\n\t\tpublic static void Complex ()\n\t\t{\n\t\t\t#region Complex\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Alice\", \"alice@wonderland.com\"));\n\t\t\tmessage.Subject = \"How you doin?\";\n\n\t\t\tvar builder = new BodyBuilder ();\n\n\t\t\t// Set the plain-text version of the message text\n\t\t\tbuilder.TextBody = @\"Hey Alice,\n\nWhat are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.\n\nWill you be my +1?\n\n-- Joey\n\";\n\n\t\t\t// In order to reference selfie.jpg from the html text, we'll need to add it\n\t\t\t// to builder.LinkedResources and then use its Content-Id value in the img src.\n\t\t\tvar image = builder.LinkedResources.Add (@\"C:\\Users\\Joey\\Documents\\Selfies\\selfie.jpg\");\n\t\t\timage.ContentId = MimeUtils.GenerateMessageId ();\n\n\t\t\t// Set the html version of the message text\n\t\t\tbuilder.HtmlBody = string.Format (@\"<p>Hey Alice,<br>\n<p>What are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.<br>\n<p>Will you be my +1?<br>\n<p>-- Joey<br>\n<center><img src=\"\"cid:{0}\"\"></center>\", image.ContentId);\n\n\t\t\t// We may also want to attach a calendar event for Monica's party...\n\t\t\tbuilder.Attachments.Add (@\"C:\\Users\\Joey\\Documents\\party.ics\");\n\n\t\t\t// Now we just need to set the message body and we're done\n\t\t\tmessage.Body = builder.ToMessageBody ();\n\t\t\t#endregion\n\t\t}\n\n\t\tpublic static void Simple ()\n\t\t{\n\t\t\t#region Simple\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Alice\", \"alice@wonderland.com\"));\n\t\t\tmessage.Subject = \"How you doin?\";\n\n\t\t\tvar builder = new BodyBuilder ();\n\n\t\t\t// Set the plain-text version of the message text\n\t\t\tbuilder.TextBody = @\"Hey Alice,\n\nWhat are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.\n\nWill you be my +1?\n\n-- Joey\n\";\n\n\t\t\t// We may also want to attach a calendar event for Monica's party...\n\t\t\tbuilder.Attachments.Add (@\"C:\\Users\\Joey\\Documents\\party.ics\");\n\n\t\t\t// Now we just need to set the message body and we're done\n\t\t\tmessage.Body = builder.ToMessageBody ();\n\t\t\t#endregion\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/CreateMultipartAlternative.cs",
    "content": "﻿var attachment = CreateImageAttachment ();\nvar plain = CreateTextPlainPart ();\nvar html = CreateTextHtmlPart ();\n\n// Note: it is important that the text/html part is added second, because it is the\n// most expressive version and (probably) the most faithful to the sender's WYSIWYG \n// editor.\nvar alternative = new MultipartAlternative ();\nalternative.Add (plain);\nalternative.Add (html);\n\n// now create the multipart/mixed container to hold the multipart/alternative\n// and the image attachment\nvar multipart = new Multipart (\"mixed\");\nmultipart.Add (alternative);\nmultipart.Add (attachment);\n\n// now set the multipart/mixed as the message body\nmessage.Body = multipart;\n"
  },
  {
    "path": "Documentation/Examples/CreateMultipartMixed.cs",
    "content": "﻿var message = new MimeMessage ();\nmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\nmessage.To.Add (new MailboxAddress (\"Alice\", \"alice@wonderland.com\"));\nmessage.Subject = \"How you doin?\";\n\n// create our message text, just like before (except don't set it as the message.Body)\nvar body = new TextPart (\"plain\") {\n    Text = @\"Hey Alice,\n\nWhat are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.\n\nWill you be my +1?\n\n-- Joey\n\"\n};\n\n// create an image attachment for the file located at path\nvar attachment = new MimePart (\"image\", \"gif\") {\n    Content = new MimeContent (File.OpenRead (path), ContentEncoding.Default),\n    ContentDisposition = new ContentDisposition (ContentDisposition.Attachment),\n    ContentTransferEncoding = ContentEncoding.Base64,\n    FileName = Path.GetFileName (path)\n};\n\n// now create the multipart/mixed container to hold the message text and the\n// image attachment\nvar multipart = new Multipart (\"mixed\");\nmultipart.Add (body);\nmultipart.Add (attachment);\n\n// now set the multipart/mixed as the message body\nmessage.Body = multipart;\n"
  },
  {
    "path": "Documentation/Examples/CreateSimpleMessage.cs",
    "content": "﻿var message = new MimeMessage ();\nmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\nmessage.To.Add (new MailboxAddress (\"Alice\", \"alice@wonderland.com\"));\nmessage.Subject = \"How you doin?\";\n\nmessage.Body = new TextPart (\"plain\") {\n    Text = @\"Hey Alice,\n\nWhat are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.\n\nWill you be my +1?\n\n-- Joey\n\"\n};\n"
  },
  {
    "path": "Documentation/Examples/DecodingContent.cs",
    "content": "﻿// This will get the name of the file as specified by the sending mail client.\n// Note: this value *may* be null, so you'll want to handle that case in your code.\nvar fileName = part.FileName;\n\nusing (var stream = File.Create (fileName)) {\n    part.Content.DecodeTo (stream);\n}\n"
  },
  {
    "path": "Documentation/Examples/DkimExamples.cs",
    "content": "﻿using System;\nusing System.IO;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n    public static class DkimExamples\n    {\n        #region DkimSign\n        public static void DkimSign (MimeMessage message)\n        {\n            var headers = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };\n            var signer = new DkimSigner (\"privatekey.pem\", \"example.com\", \"brisbane\", DkimSignatureAlgorithm.RsaSha256) {\n\t\tHeaderCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,\n\t\tBodyCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,\n                AgentOrUserIdentifier = \"@eng.example.com\",\n                QueryMethod = \"dns/txt\",\n            };\n\n            // Prepare the message body to be sent over a 7bit transport (such as older versions of SMTP).\n            // Note: If the SMTP server you will be sending the message over supports the 8BITMIME extension,\n            // then you can use `EncodingConstraint.EightBit` instead.\n            message.Prepare (EncodingConstraint.SevenBit);\n\n            signer.Sign (message, headers);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/DkimVerifierExample.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing Heijden.DNS;\n\nusing Org.BouncyCastle.Crypto;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnamespace DkimVerifierExample\n{\n    // Note: By using the DkimPublicKeyLocatorBase, we avoid having to parse the DNS TXT records\n    // in order to get the public key ourselves.\n    class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase\n    {\n        readonly Dictionary<string, AsymmetricKeyParameter> cache;\n        readonly Resolver resolver;\n\n        public ExamplePublicKeyLocator ()\n        {\n            cache = new Dictionary<string, AsymmetricKeyParameter> ();\n\n            resolver = new Resolver (\"8.8.8.8\") {\n                TransportType = TransportType.Udp,\n                UseCache = true,\n                Retries = 3\n            };\n        }\n\n        AsymmetricKeyParameter DnsLookup (string domain, string selector, CancellationToken cancellationToken)\n        {\n            var query = selector + \"._domainkey.\" + domain;\n            AsymmetricKeyParameter pubkey;\n\n            // checked if we've already fetched this key\n            if (cache.TryGetValue (query, out pubkey))\n                return pubkey;\n\n            // make a DNS query\n            var response = resolver.Query (query, QType.TXT);\n            var builder = new StringBuilder ();\n\n            // combine the TXT records into 1 string buffer\n            foreach (var record in response.RecordsTXT) {\n                foreach (var text in record.TXT)\n                    builder.Append (text);\n            }\n\n            var txt = builder.ToString ();\n\n            // DkimPublicKeyLocatorBase provides us with this helpful method.\n            pubkey = GetPublicKey (txt);\n\n            cache.Add (query, pubkey);\n\n            return pubkey;\n        }\n\n        public AsymmetricKeyParameter LocatePublicKey (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))\n        {\n            var methodList = methods.Split (new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);\n            for (int i = 0; i < methodList.Length; i++) {\n                if (methodList[i] == \"dns/txt\")\n                    return DnsLookup (domain, selector, cancellationToken);\n            }\n\n            throw new NotSupportedException (string.Format (\"{0} does not include any supported lookup methods.\", methods));\n        }\n\n        public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))\n        {\n            return Task.Run (() => {\n                return LocatePublicKey (methods, domain, selector, cancellationToken);\n            }, cancellationToken);\n        }\n    }\n\n    class Program\n    {\n        public static void Main (string[] args)\n        {\n            if (args.Length == 0) {\n                Help ();\n                return;\n            }\n\n            for (int i = 0; i < args.Length; i++) {\n                if (args[i] == \"--help\") {\n                    Help ();\n                    return;\n                }\n            }\n\n            var locator = new ExamplePublicKeyLocator ();\n            var verifier = new DkimVerifier (locator);\n\n            for (int i = 0; i < args.Length; i++) {\n                if (!File.Exists (args[i])) {\n                    Console.Error.WriteLine (\"{0}: No such file.\", args[i]);\n                    continue;\n                }\n\n                Console.Write (\"{0} -> \", args[i]);\n\n                var message = MimeMessage.Load (args[i]);\n                var index = message.Headers.IndexOf (HeaderId.DkimSignature);\n\n                if (index == -1) {\n                    Console.WriteLine (\"NO SIGNATURE\");\n                    continue;\n                }\n\n                var dkim = message.Headers[index];\n\n                if (verifier.Verify (message, dkim)) {\n                    // the DKIM-Signature header is valid!\n                    Console.ForegroundColor = ConsoleColor.Green;\n                    Console.WriteLine (\"VALID\");\n                    Console.ResetColor ();\n                } else {\n                    // the DKIM-Signature is invalid!\n                    Console.ForegroundColor = ConsoleColor.Red;\n                    Console.WriteLine (\"INVALID\");\n                    Console.ResetColor ();\n                }\n            }\n        }\n\n        static void Help ()\n        {\n            Console.WriteLine (\"Usage is: DkimVerifier [options] [messages]\");\n            Console.WriteLine ();\n            Console.WriteLine (\"Options:\");\n            Console.WriteLine (\"  --help               This help menu.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/ForwardExamples.cs",
    "content": "﻿//\n// ForwardExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n\tpublic static class ForwardExamples\n\t{\n\t\t#region ForwardAttached\n\t\tpublic static MimeMessage Forward (MimeMessage original, MailboxAddress from, IEnumerable<InternetAddress> to)\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (from);\n\t\t\tmessage.To.AddRange (to);\n\n\t\t\t// set the forwarded subject\n\t\t\tif (!original.Subject?.StartsWith (\"FW:\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tmessage.Subject = \"FW: \" + (original.Subject ?? string.Empty);\n\t\t\telse\n\t\t\t\tmessage.Subject = original.Subject;\n\n\t\t\t// create the main textual body of the message\n\t\t\tvar text = new TextPart (\"plain\") { Text = \"Here's the forwarded message:\" };\n\n\t\t\t// create the message/rfc822 attachment for the original message\n\t\t\tvar rfc822 = new MessagePart { Message = original };\n\n\t\t\t// create a multipart/mixed container for the text body and the forwarded message\n\t\t\tvar multipart = new Multipart (\"mixed\");\n\t\t\tmultipart.Add (text);\n\t\t\tmultipart.Add (rfc822);\n\n\t\t\t// set the multipart as the body of the message\n\t\t\tmessage.Body = multipart;\n\n\t\t\treturn message;\n\t\t}\n\t\t#endregion ForwardAttached\n\n\t\t#region ForwardInline\n\t\tpublic static MimeMessage Forward (MimeMessage original, MailboxAddress from, IEnumerable<InternetAddress> to)\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (from);\n\t\t\tmessage.To.AddRange (to);\n\n\t\t\t// set the forwarded subject\n\t\t\tif (!original.Subject?.StartsWith (\"FW:\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tmessage.Subject = \"FW: \" + (original.Subject ?? string.Empty);\n\t\t\telse\n\t\t\t\tmessage.Subject = original.Subject;\n\n\t\t\t// quote the original message text\n\t\t\tusing (var text = new StringWriter ()) {\n\t\t\t\ttext.WriteLine ();\n\t\t\t\ttext.WriteLine (\"-----Original Message-----\");\n\t\t\t\ttest.WriteLine (\"From: {0}\", original.From);\n\t\t\t\ttext.WriteLine (\"Sent: {0}\", DateUtils.FormatDate (original.Date));\n\t\t\t\ttext.WriteLine (\"To: {0}\", original.To);\n\t\t\t\ttext.WriteLine (\"Subject: {0}\", original.Subject ?? string.Empty);\n\t\t\t\ttext.WriteLine ();\n\n\t\t\t\ttext.Write (original.TextBody);\n\n\t\t\t\tmessage.Body = new TextPart (\"plain\") {\n\t\t\t\t\tText = text.ToString ()\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn message;\n\t\t}\n\t\t#endregion ForwardInline\n\t}\n}"
  },
  {
    "path": "Documentation/Examples/ImapBodyPartExamples.cs",
    "content": "//\n// ImapBodyPartExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace MailKit.Examples {\n\tpublic static class ImapBodyPartExamples\n\t{\n\t\t#region GetBodyPartsByUniqueId\n\t\tpublic static void DownloadBodyAndAttachments (string baseDirectory)\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\t// search for messages where the Subject header contains either \"MimeKit\" or \"MailKit\"\n\t\t\t\tvar query = SearchQuery.SubjectContains (\"MimeKit\").Or (SearchQuery.SubjectContains (\"MailKit\"));\n\t\t\t\tvar uids = client.Inbox.Search (query);\n\n\t\t\t\t// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE\n\t\t\t\t// of each message so that we can extract the text body and the attachments)\n\t\t\t\tvar items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\n\t\t\t\tforeach (var item in items) {\n\t\t\t\t\t// determine a directory to save stuff in\n\t\t\t\t\tvar directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());\n\n\t\t\t\t\t// create the directory\n\t\t\t\t\tDirectory.CreateDirectory (directory);\n\n\t\t\t\t\t// IMessageSummary.TextBody is a convenience property that finds the 'text/plain' body part for us\n\t\t\t\t\tvar bodyPart = item.TextBody;\n\n\t\t\t\t\tif (bodyPart != null) {\n\t\t\t\t\t\t// download the 'text/plain' body part\n\t\t\t\t\t\tvar plain = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart);\n\n\t\t\t\t\t\t// TextPart.Text is a convenience property that decodes the content and converts the result to\n\t\t\t\t\t\t// a string for us\n\t\t\t\t\t\tvar text = plain.Text;\n\n\t\t\t\t\t\tFile.WriteAllText (Path.Combine (directory, \"body.txt\"), text);\n\t\t\t\t\t}\n\n\t\t\t\t\t// IMessageSummary.HtmlBody is a convenience property that finds the 'text/html' body part for us\n\t\t\t\t\tbodyPart = item.HtmlBody;\n\n\t\t\t\t\tif (bodyPart != null) {\n\t\t\t\t\t\t// download the 'text/html' body part\n\t\t\t\t\t\tvar html = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart);\n\n\t\t\t\t\t\t// TextPart.Text is a convenience property that decodes the content and converts the result to\n\t\t\t\t\t\t// a string for us\n\t\t\t\t\t\tvar text = html.Text;\n\n\t\t\t\t\t\tFile.WriteAllText (Path.Combine (directory, \"body.html\"), text);\n\t\t\t\t\t}\n\n\t\t\t\t\t// now iterate over all of the attachments and save them to disk\n\t\t\t\t\tforeach (var attachment in item.Attachments) {\n\t\t\t\t\t\t// download the attachment just like we did with the body\n\t\t\t\t\t\tvar entity = client.Inbox.GetBodyPart (item.UniqueId, attachment);\n\n\t\t\t\t\t\t// attachments can be either message/rfc822 parts or regular MIME parts\n\t\t\t\t\t\tif (entity is MessagePart) {\n\t\t\t\t\t\t\tvar rfc822 = (MessagePart) entity;\n\n\t\t\t\t\t\t\tvar path = Path.Combine (directory, attachment.PartSpecifier + \".eml\");\n\n\t\t\t\t\t\t\trfc822.Message.WriteTo (path);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar part = (MimePart) entity;\n\n\t\t\t\t\t\t\t// default to using the sending client's suggested fileName value\n\t\t\t\t\t\t\tvar fileName = attachment.FileName;\n\n\t\t\t\t\t\t\tif (string.IsNullOrEmpty (fileName)) {\n\t\t\t\t\t\t\t\t// the FileName wasn't defined, so generate one...\n\t\t\t\t\t\t\t\tif (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))\n\t\t\t\t\t\t\t\t\textension = \".dat\";\n\n\t\t\t\t\t\t\t\tfileName = Guid.NewGuid ().ToString () + extension;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar path = Path.Combine (directory, fileName);\n\n\t\t\t\t\t\t\t// decode and save the content to a file\n\t\t\t\t\t\t\tusing (var stream = File.Create (path))\n\t\t\t\t\t\t\t\tpart.Content.DecodeTo (stream);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region GetBodyPartsByUniqueIdAndSpecifier\n\t\tpublic static void DownloadBodyAndAttachments (string baseDirectory)\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\t// search for messages where the Subject header contains either \"MimeKit\" or \"MailKit\"\n\t\t\t\tvar query = SearchQuery.SubjectContains (\"MimeKit\").Or (SearchQuery.SubjectContains (\"MailKit\"));\n\t\t\t\tvar uids = client.Inbox.Search (query);\n\n\t\t\t\t// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE\n\t\t\t\t// of each message so that we can extract the text body and the attachments)\n\t\t\t\tvar items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\n\t\t\t\tforeach (var item in items) {\n\t\t\t\t\t// determine a directory to save stuff in\n\t\t\t\t\tvar directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());\n\n\t\t\t\t\t// create the directory\n\t\t\t\t\tDirectory.CreateDirectory (directory);\n\n\t\t\t\t\t// IMessageSummary.TextBody is a convenience property that finds the 'text/plain' body part for us\n\t\t\t\t\tvar bodyPart = item.TextBody;\n\n\t\t\t\t\tif (bodyPart != null) {\n\t\t\t\t\t\t// download the 'text/plain' body part\n\n\t\t\t\t\t\t// Note: In general, you should use `GetBodyPart(item.UniqueId, bodyPart)` instead if you have it available.\n\t\t\t\t\t\t// This particular overload of the GetBodyPart() method exists for convenience purposes where you already\n\t\t\t\t\t\t// know the body-part specifier string before-hand.\n\t\t\t\t\t\tvar plain = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart.PartSpecifier);\n\n\t\t\t\t\t\t// TextPart.Text is a convenience property that decodes the content and converts the result to\n\t\t\t\t\t\t// a string for us\n\t\t\t\t\t\tvar text = plain.Text;\n\n\t\t\t\t\t\tFile.WriteAllText (Path.Combine (directory, \"body.txt\"), text);\n\t\t\t\t\t}\n\n\t\t\t\t\t// IMessageSummary.HtmlBody is a convenience property that finds the 'text/html' body part for us\n\t\t\t\t\tbodyPart = item.HtmlBody;\n\n\t\t\t\t\tif (bodyPart != null) {\n\t\t\t\t\t\t// download the 'text/html' body part\n\n\t\t\t\t\t\t// Note: In general, you should use `GetBodyPart(item.UniqueId, bodyPart)` instead if you have it available.\n\t\t\t\t\t\t// This particular overload of the GetBodyPart() method exists for convenience purposes where you already\n\t\t\t\t\t\t// know the body-part specifier string before-hand.\n\t\t\t\t\t\tvar html = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart.PartSpecifier);\n\n\t\t\t\t\t\t// TextPart.Text is a convenience property that decodes the content and converts the result to\n\t\t\t\t\t\t// a string for us\n\t\t\t\t\t\tvar text = html.Text;\n\n\t\t\t\t\t\tFile.WriteAllText (Path.Combine (directory, \"body.html\"), text);\n\t\t\t\t\t}\n\n\t\t\t\t\t// now iterate over all of the attachments and save them to disk\n\t\t\t\t\tforeach (var attachment in item.Attachments) {\n\t\t\t\t\t\t// download the attachment just like we did with the body\n\t\t\t\t\t\tvar entity = client.Inbox.GetBodyPart (item.UniqueId, attachment);\n\n\t\t\t\t\t\t// attachments can be either message/rfc822 parts or regular MIME parts\n\t\t\t\t\t\tif (entity is MessagePart) {\n\t\t\t\t\t\t\tvar rfc822 = (MessagePart) entity;\n\n\t\t\t\t\t\t\tvar path = Path.Combine (directory, attachment.PartSpecifier + \".eml\");\n\n\t\t\t\t\t\t\trfc822.Message.WriteTo (path);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar part = (MimePart) entity;\n\n\t\t\t\t\t\t\t// default to using the sending client's suggested fileName value\n\t\t\t\t\t\t\tvar fileName = attachment.FileName;\n\n\t\t\t\t\t\t\tif (string.IsNullOrEmpty (fileName)) {\n\t\t\t\t\t\t\t\t// the FileName wasn't defined, so generate one...\n\t\t\t\t\t\t\t\tif (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))\n\t\t\t\t\t\t\t\t\textension = \".dat\";\n\n\t\t\t\t\t\t\t\tfileName = Guid.NewGuid ().ToString () + extension;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar path = Path.Combine (directory, fileName);\n\n\t\t\t\t\t\t\t// decode and save the content to a file\n\t\t\t\t\t\t\tusing (var stream = File.Create (path))\n\t\t\t\t\t\t\t\tpart.Content.DecodeTo (stream);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region GetBodyPartStreamsByUniqueId\n\t\tpublic static void CacheBodyParts (string baseDirectory)\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\t// search for messages where the Subject header contains either \"MimeKit\" or \"MailKit\"\n\t\t\t\tvar query = SearchQuery.SubjectContains (\"MimeKit\").Or (SearchQuery.SubjectContains (\"MailKit\"));\n\t\t\t\tvar uids = client.Inbox.Search (query);\n\n\t\t\t\t// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE\n\t\t\t\t// of each message so that we can extract the text body and the attachments)\n\t\t\t\tvar items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\n\t\t\t\tforeach (var item in items) {\n\t\t\t\t\t// determine a directory to save stuff in\n\t\t\t\t\tvar directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());\n\n\t\t\t\t\t// create the directory\n\t\t\t\t\tDirectory.CreateDirectory (directory);\n\n\t\t\t\t\t// now iterate over all of the body parts and save them to disk\n\t\t\t\t\tforeach (var bodyPart in item.BodyParts) {\n\t\t\t\t\t\t// cache the raw body part MIME just like we did with the body\n\t\t\t\t\t\tusing (var stream = client.Inbox.GetStream (item.UniqueId, bodyPart)) {\n\t\t\t\t\t\t\tvar path = Path.Combine (directory, bodyPart.PartSpecifier);\n\n\t\t\t\t\t\t\tusing (var output = File.Create (path))\n\t\t\t\t\t\t\t\tstream.CopyTo (output);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region GetBodyPartStreamsByUniqueIdAndSpecifier\n\t\tpublic static void SaveAttachments (string baseDirectory)\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\t// search for messages where the Subject header contains either \"MimeKit\" or \"MailKit\"\n\t\t\t\tvar query = SearchQuery.SubjectContains (\"MimeKit\").Or (SearchQuery.SubjectContains (\"MailKit\"));\n\t\t\t\tvar uids = client.Inbox.Search (query);\n\n\t\t\t\t// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE\n\t\t\t\t// of each message so that we can extract the text body and the attachments)\n\t\t\t\tvar items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\n\t\t\t\tforeach (var item in items) {\n\t\t\t\t\t// determine a directory to save stuff in\n\t\t\t\t\tvar directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());\n\n\t\t\t\t\t// create the directory\n\t\t\t\t\tDirectory.CreateDirectory (directory);\n\n\t\t\t\t\t// now iterate over all of the attachments and decode/save the content to disk\n\t\t\t\t\tforeach (var attachment in item.Attachments) {\n\t\t\t\t\t\t// default to using the sending client's suggested fileName value\n\t\t\t\t\t\tstring fileName = attachment.FileName;\n\n\t\t\t\t\t\tif (string.IsNullOrEmpty (fileName)) {\n\t\t\t\t\t\t\t// the FileName wasn't defined, so generate one...\n\t\t\t\t\t\t\tif (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))\n\t\t\t\t\t\t\t\textension = \".dat\";\n\n\t\t\t\t\t\t\tfileName = Guid.NewGuid ().ToString () + extension;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// we'll need the Content-Transfer-Encoding value so that we can decode it...\n\t\t\t\t\t\tContentEncoding encoding;\n\n\t\t\t\t\t\tif (string.IsNullOrEmpty (attachment.ContentTransferEncoding) || !MimeUtils.TryParse (attachment.ContentTransferEncoding, out encoding))\n\t\t\t\t\t\t\tencoding = ContentEncoding.Default;\n\n\t\t\t\t\t\t// if all we want is the content (rather than the entire MIME part including the headers), then\n\t\t\t\t\t\t// we want the \".TEXT\" section of the part\n\t\t\t\t\t\tusing (var stream = client.Inbox.GetStream (item.UniqueId, attachment.PartSpecifier + \".TEXT\")) {\n\t\t\t\t\t\t\t// wrap the attachment content in a MimeContent object to help us decode it\n\t\t\t\t\t\t\tusing (var content = new MimeContent (stream, encoding)) {\n\t\t\t\t\t\t\t\tvar path = Path.Combine (directory, fileName);\n\n\t\t\t\t\t\t\t\t// decode the attachment content to the file stream\n\t\t\t\t\t\t\t\tusing (var output = File.Create (path))\n\t\t\t\t\t\t\t\t\tcontent.DecodeTo (output);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/ImapExamples.cs",
    "content": "﻿//\n// ImapExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace MailKit.Examples {\n\tpublic static class ImapExamples\n\t{\n\t\t#region ProtocolLogger\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new ImapClient (new ProtocolLogger (\"imap.log\"))) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar uids = client.Inbox.Search (SearchQuery.All);\n\n\t\t\t\tforeach (var uid in uids) {\n\t\t\t\t\tvar message = client.Inbox.GetMessage (uid);\n\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.eml\", uid));\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Capabilities\n\t\tpublic static void Capabilities ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tvar mechanisms = string.Join (\", \", client.AuthenticationMechanisms);\n\t\t\t\tConsole.WriteLine (\"The IMAP server supports the following SASL authentication mechanisms: {0}\", mechanisms);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (ImapCapabilities.Id)) {\n\t\t\t\t\tvar clientImplementation = new ImapImplementation { Name = \"MailKit\", Version = \"1.0\" };\n\t\t\t\t\tvar serverImplementation = client.Identify (clientImplementation);\n\n\t\t\t\t\tConsole.WriteLine (\"Server implementation details:\");\n\t\t\t\t\tforeach (var property in serverImplementation.Properties)\n\t\t\t\t\t\tConsole.WriteLine (\"  {0} = {1}\", property.Key, property.Value);\n\t\t\t\t}\n\n\t\t\t\tif (client.Capabilities.HasFlag (ImapCapabilities.Acl)) {\n\t\t\t\t\tConsole.WriteLine (\"The IMAP server supports Access Control Lists.\");\n\n\t\t\t\t\tConsole.WriteLine (\"The IMAP server supports the following access rights: {0}\", client.Rights);\n\n\t\t\t\t\tConsole.WriteLine (\"The Inbox has the following access controls:\");\n\t\t\t\t\tvar acl = client.Inbox.GetAccessControlList ();\n\t\t\t\t\tforeach (var ac in acl)\n\t\t\t\t\t\tConsole.WriteLine (\"  {0} = {1}\", ac.Name, ac.Rights);\n\n\t\t\t\t\tvar myRights = client.Inbox.GetMyAccessRights ();\n\t\t\t\t\tConsole.WriteLine (\"Your current rights for the Inbox folder are: {0}\", myRights);\n\t\t\t\t}\n\n\t\t\t\tif (client.Capabilities.HasFlag (ImapCapabilities.Quota)) {\n\t\t\t\t\tConsole.WriteLine (\"The IMAP server supports quotas.\");\n\n\t\t\t\t\tConsole.WriteLine (\"The current quota for the Inbox is:\");\n\t\t\t\t\tvar quota = client.Inbox.GetQuota ();\n\n\t\t\t\t\tif (quota.StorageLimit.HasValue)\n\t\t\t\t\t\tConsole.WriteLine (\"  Limited by storage space. Using {0} out of {1} bytes.\", quota.CurrentStorageSize.Value, quota.StorageLimit.Value);\n\n\t\t\t\t\tif (quota.MessageLimit.HasValue)\n\t\t\t\t\t\tConsole.WriteLine (\"  Limited by the number of messages. Using {0} out of {1} bytes.\", quota.CurrentMessageCount.Value, quota.MessageLimit.Value);\n\n\t\t\t\t\tConsole.WriteLine (\"The quota root is: {0}\", quota.QuotaRoot);\n\t\t\t\t}\n\n\t\t\t\tif (client.Capabilities.HasFlag (ImapCapabilities.Thread)) {\n\t\t\t\t\tif (client.ThreadingAlgorithms.Contains (ThreadingAlgorithm.OrderedSubject))\n\t\t\t\t\t\tConsole.WriteLine (\"The IMAP server supports threading by subject.\");\n\t\t\t\t\tif (client.ThreadingAlgorithms.Contains (ThreadingAlgorithm.References))\n\t\t\t\t\t\tConsole.WriteLine (\"The IMAP server supports threading by references.\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Namespaces\n\t\tpublic static void ShowNamespaces ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.mail-server.com\", 993, SecureSocketOptions.SslOnConnect);\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tConsole.WriteLine (\"Personal namespaces:\");\n\t\t\t\tforeach (var ns in client.PersonalNamespaces)\n\t\t\t\t\tConsole.WriteLine ($\"* \\\"{ns.Path}\\\" \\\"{ns.DirectorySeparator}\\\"\");\n\t\t\t\tConsole.WriteLine ();\n\t\t\t\tConsole.WriteLine (\"Shared namespaces:\");\n\t\t\t\tforeach (var ns in client.SharedNamespaces)\n\t\t\t\t\tConsole.WriteLine ($\"* \\\"{ns.Path}\\\" \\\"{ns.DirectorySeparator}\\\"\");\n\t\t\t\tConsole.WriteLine ();\n\t\t\t\tConsole.WriteLine (\"Other namespaces:\");\n\t\t\t\tforeach (var ns in client.OtherNamespaces)\n\t\t\t\t\tConsole.WriteLine ($\"* \\\"{ns.Path}\\\" \\\"{ns.DirectorySeparator}\\\"\");\n\t\t\t\tConsole.WriteLine ();\n\n\t\t\t\t// get the folder that represents the first personal namespace\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n\t\t\t\t// list the folders under the first personal namespace\n\t\t\t\tvar subfolders = personal.GetSubfolders ();\n\n\t\t\t\tConsole.WriteLine (\"The list of folders that are direct children of the first personal namespace:\");\n\t\t\t\tforeach (var folder in subfolders)\n\t\t\t\t\tConsole.WriteLine ($\"* {folder.Name}\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DownloadMessagesByUniqueId\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar uids = client.Inbox.Search (SearchQuery.All);\n\n\t\t\t\tforeach (var uid in uids) {\n\t\t\t\t\tvar message = client.Inbox.GetMessage (uid);\n\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.eml\", uid));\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DownloadMessageStreamsByUniqueId\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar uids = client.Inbox.Search (SearchQuery.All);\n\n\t\t\t\tforeach (var uid in uids) {\n\t\t\t\t\tusing (var stream = client.Inbox.GetStream (uid)) {\n\t\t\t\t\t\tusing (var output = File.Create ($\"{uid}.eml\"))\n\t\t\t\t\t\t\tstream.CopyTo (output);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DownloadMessagesByIndex\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tfor (int index = 0; index < client.Inbox.Count; index++) {\n\t\t\t\t\tvar message = client.Inbox.GetMessage (index);\n\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.eml\", index));\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DownloadMessageStreamsByIndex\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tfor (int index = 0; index < client.Inbox.Count; index++) {\n\t\t\t\t\tusing (var stream = client.Inbox.GetStream (index)) {\n\t\t\t\t\t\tusing (var output = File.Create ($\"{index}.eml\"))\n\t\t\t\t\t\t\tstream.CopyTo (output);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SslConnectionInformation\n\t\tpublic static void PrintSslConnectionInfo (string host, int port)\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (host, port, SecureSocketOptions.Auto);\n\n\t\t\t\tConsole.WriteLine ($\"Negotiated the following SSL options with {host}:\");\n\t\t\t\tConsole.WriteLine ($\"        Protocol Version: {client.SslProtocol}\");\n\t\t\t\tConsole.WriteLine ($\"        Cipher Algorithm: {client.SslCipherAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"         Cipher Strength: {client.SslCipherStrength}\");\n\t\t\t\tConsole.WriteLine ($\"          Hash Algorithm: {client.SslHashAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"           Hash Strength: {client.SslHashStrength}\");\n\t\t\t\tConsole.WriteLine ($\"  Key-Exchange Algorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"   Key-Exchange Strength: {client.SslKeyExchangeStrength}\");\n\n\t\t\t\t// Example Log:\n\t\t\t\t//\n\t\t\t\t// Negotiated the following SSL options with imap.gmail.com:\n\t\t\t\t//         Protocol Version: Tls12\n\t\t\t\t//         Cipher Algorithm: Aes128\n\t\t\t\t//          Cipher Strength: 128\n\t\t\t\t//           Hash Algorithm: Sha256\n\t\t\t\t//            Hash Strength: 0\n\t\t\t\t//   Key-Exchange Algorithm: 44550\n\t\t\t\t//    Key-Exchange Strength: 255\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/ImapIdleExample.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MailKit;\nusing MailKit.Net.Imap;\nusing MailKit.Security;\n\nnamespace ImapIdleExample {\n\tclass Program\n\t{\n\t\t// Connection-related properties\n\t\tconst SecureSocketOptions SslOptions = SecureSocketOptions.Auto;\n\t\tconst string Host = \"imap.gmail.com\";\n\t\tconst int Port = 993;\n\n\t\t// Authentication-related properties\n\t\tconst string Username = \"username@gmail.com\";\n\t\tconst string Password = \"password\";\n\n\t\tpublic static void Main (string[] args)\n\t\t{\n\t\t\tusing (var client = new IdleClient (Host, Port, SslOptions, Username, Password)) {\n\t\t\t\tConsole.WriteLine (\"Hit any key to end the demo.\");\n\n\t\t\t\tvar idleTask = client.RunAsync ();\n\n\t\t\t\tTask.Run (() => {\n\t\t\t\t\tConsole.ReadKey (true);\n\t\t\t\t}).Wait ();\n\n\t\t\t\tclient.Exit ();\n\n\t\t\t\tidleTask.GetAwaiter ().GetResult ();\n\t\t\t}\n\t\t}\n\t}\n\n\tclass IdleClient : IDisposable\n\t{\n\t\treadonly string host, username, password;\n\t\treadonly SecureSocketOptions sslOptions;\n\t\treadonly int port;\n\t\tList<IMessageSummary> messages;\n\t\tCancellationTokenSource cancel;\n\t\tCancellationTokenSource done;\n\t\tFetchRequest request;\n\t\tbool messagesArrived;\n\t\tImapClient client;\n\n\t\tpublic IdleClient (string host, int port, SecureSocketOptions sslOptions, string username, string password)\n\t\t{\n\t\t\tthis.client = new ImapClient (new ProtocolLogger (Console.OpenStandardError ()));\n\t\t\tthis.request = new FetchRequest (MessageSummaryItems.Full | MessageSummaryItems.UniqueId);\n\t\t\tthis.messages = new List<IMessageSummary> ();\n\t\t\tthis.cancel = new CancellationTokenSource ();\n\t\t\tthis.sslOptions = sslOptions;\n\t\t\tthis.username = username;\n\t\t\tthis.password = password;\n\t\t\tthis.host = host;\n\t\t\tthis.port = port;\n\t\t}\n\n\t\tasync Task ReconnectAsync ()\n\t\t{\n\t\t\tif (!client.IsConnected)\n\t\t\t\tawait client.ConnectAsync (host, port, sslOptions, cancel.Token);\n\n\t\t\tif (!client.IsAuthenticated) {\n\t\t\t\tawait client.AuthenticateAsync (username, password, cancel.Token);\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadOnly, cancel.Token);\n\t\t\t}\n\t\t}\n\n\t\tasync Task FetchMessageSummariesAsync (bool print)\n\t\t{\n\t\t\tIList<IMessageSummary> fetched = null;\n\n\t\t\tdo {\n\t\t\t\ttry {\n\t\t\t\t\t// fetch summary information for messages that we don't already have\n\t\t\t\t\tint startIndex = messages.Count;\n\n\t\t\t\t\tfetched = client.Inbox.Fetch (startIndex, -1, request, cancel.Token);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (ImapProtocolException) {\n\t\t\t\t\t// protocol exceptions often result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t} catch (IOException) {\n\t\t\t\t\t// I/O exceptions always result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\tforeach (var message in fetched) {\n\t\t\t\tif (print)\n\t\t\t\t\tConsole.WriteLine (\"{0}: new message: {1}\", client.Inbox, message.Envelope.Subject);\n\t\t\t\tmessages.Add (message);\n\t\t\t}\n\t\t}\n\n\t\tasync Task WaitForNewMessagesAsync ()\n\t\t{\n\t\t\tdo {\n\t\t\t\ttry {\n\t\t\t\t\tif (client.Capabilities.HasFlag (ImapCapabilities.Idle)) {\n\t\t\t\t\t\t// Note: IMAP servers are only supposed to drop the connection after 30 minutes, so normally\n\t\t\t\t\t\t// we'd IDLE for a max of, say, ~29 minutes... but GMail seems to drop idle connections after\n\t\t\t\t\t\t// about 10 minutes, so we'll only idle for 9 minutes.\n\t\t\t\t\t\tdone = new CancellationTokenSource (new TimeSpan (0, 9, 0));\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait client.IdleAsync (done.Token, cancel.Token);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tdone.Dispose ();\n\t\t\t\t\t\t\tdone = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Note: we don't want to spam the IMAP server with NOOP commands, so lets wait a minute\n\t\t\t\t\t\t// between each NOOP command.\n\t\t\t\t\t\tawait Task.Delay (new TimeSpan (0, 1, 0), cancel.Token);\n\t\t\t\t\t\tawait client.NoOpAsync (cancel.Token);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (ImapProtocolException) {\n\t\t\t\t\t// protocol exceptions often result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t} catch (IOException) {\n\t\t\t\t\t// I/O exceptions always result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t}\n\t\t\t} while (true);\n\t\t}\n\n\t\tasync Task IdleAsync ()\n\t\t{\n\t\t\tdo {\n\t\t\t\ttry {\n\t\t\t\t\tawait WaitForNewMessagesAsync ();\n\n\t\t\t\t\tif (messagesArrived) {\n\t\t\t\t\t\tawait FetchMessageSummariesAsync (true);\n\t\t\t\t\t\tmessagesArrived = false;\n\t\t\t\t\t}\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!cancel.IsCancellationRequested);\n\t\t}\n\n\t\tpublic async Task RunAsync ()\n\t\t{\n\t\t\t// connect to the IMAP server and get our initial list of messages\n\t\t\ttry {\n\t\t\t\tawait ReconnectAsync ();\n\t\t\t\tawait FetchMessageSummariesAsync (false);\n\t\t\t} catch (OperationCanceledException) {\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Note: We capture client.Inbox here because cancelling IdleAsync() *may* require\n\t\t\t// disconnecting the IMAP client connection, and, if it does, the `client.Inbox`\n\t\t\t// property will no longer be accessible which means we won't be able to disconnect\n\t\t\t// our event handlers.\n\t\t\tvar inbox = client.Inbox;\n\n\t\t\t// keep track of changes to the number of messages in the folder (this is how we'll tell if new messages have arrived).\n\t\t\tinbox.CountChanged += OnCountChanged;\n\n\t\t\t// keep track of messages being expunged so that when the CountChanged event fires, we can tell if it's\n\t\t\t// because new messages have arrived vs messages being removed (or some combination of the two).\n\t\t\tinbox.MessageExpunged += OnMessageExpunged;\n\n\t\t\t// keep track of flag changes\n\t\t\tinbox.MessageFlagsChanged += OnMessageFlagsChanged;\n\n\t\t\tawait IdleAsync ();\n\n\t\t\tinbox.MessageFlagsChanged -= OnMessageFlagsChanged;\n\t\t\tinbox.MessageExpunged -= OnMessageExpunged;\n\t\t\tinbox.CountChanged -= OnCountChanged;\n\n\t\t\tawait client.DisconnectAsync (true);\n\t\t}\n\n\t\t// Note: the CountChanged event will fire when new messages arrive in the folder and/or when messages are expunged.\n\t\tvoid OnCountChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tvar folder = (ImapFolder) sender;\n\n\t\t\t// Note: because we are keeping track of the MessageExpunged event and updating our\n\t\t\t// 'messages' list, we know that if we get a CountChanged event and folder.Count is\n\t\t\t// larger than messages.Count, then it means that new messages have arrived.\n\t\t\tif (folder.Count > messages.Count) {\n\t\t\t\tint arrived = folder.Count - messages.Count;\n\n\t\t\t\tif (arrived > 1)\n\t\t\t\t\tConsole.WriteLine (\"\\t{0} new messages have arrived.\", arrived);\n\t\t\t\telse\n\t\t\t\t\tConsole.WriteLine (\"\\t1 new message has arrived.\");\n\n\t\t\t\t// Note: your first instinct may be to fetch these new messages now, but you cannot do\n\t\t\t\t// that in this event handler (the ImapFolder is not re-entrant).\n\t\t\t\t//\n\t\t\t\t// Instead, cancel the `done` token and update our state so that we know new messages\n\t\t\t\t// have arrived. We'll fetch the summaries for these new messages later...\n\t\t\t\tmessagesArrived = true;\n\t\t\t\tdone?.Cancel ();\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageExpunged (object sender, MessageEventArgs e)\n\t\t{\n\t\t\tvar folder = (ImapFolder) sender;\n\n\t\t\tif (e.Index < messages.Count) {\n\t\t\t\tvar message = messages[e.Index];\n\n\t\t\t\tConsole.WriteLine (\"{0}: message #{1} has been expunged: {2}\", folder, e.Index, message.Envelope.Subject);\n\n\t\t\t\t// Note: If you are keeping a local cache of message information\n\t\t\t\t// (e.g. MessageSummary data) for the folder, then you'll need\n\t\t\t\t// to remove the message at e.Index.\n\t\t\t\tmessages.RemoveAt (e.Index);\n\t\t\t} else {\n\t\t\t\tConsole.WriteLine (\"{0}: message #{1} has been expunged.\", folder, e.Index);\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageFlagsChanged (object sender, MessageFlagsChangedEventArgs e)\n\t\t{\n\t\t\tvar folder = (ImapFolder) sender;\n\n\t\t\tConsole.WriteLine (\"{0}: flags have changed for message #{1} ({2}).\", folder, e.Index, e.Flags);\n\t\t}\n\n\t\tpublic void Exit ()\n\t\t{\n\t\t\tcancel.Cancel ();\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tclient.Dispose ();\n\t\t\tcancel.Dispose ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/InlinePGPExample.txt",
    "content": "﻿Return-Path: <pgp-enthusiast@example.com>\nReceived: from [127.0.0.1] (hostname.example.com. [201.95.8.17])\n    by mx.google.com with ESMTPSA id l67sm26628445yha.8.2014.04.27.13.49.44\n    for <pgp-enthusiast@example.com>\n    (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);\n    Sun, 27 Apr 2014 13:49:44 -0700 (PDT)\nMessage-ID: <535D6D67.8020803@example.com>\nDate: Sun, 27 Apr 2014 17:49:43 -0300\nFrom: Die-Hard PGP Fan <pgp-enthusiast@example.com>\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0\nMIME-Version: 1.0\nTo: undisclosed-recipients:;\nSubject: Test of inline encrypted PGP blocks\nX-Enigmail-Version: 1.6\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: 8bit\nX-Antivirus: avast! (VPS 140427-1, 27/04/2014), Outbound message\nX-Antivirus-Status: Clean\n\n-----BEGIN PGP MESSAGE-----\nCharset: ISO-8859-1\nVersion: GnuPG v2.0.22 (MingW32)\nComment: Using GnuPG with Thunderbird - http://www.enigmail.net/\n\nSGFoISBJIGZvb2xlZCB5b3UsIHRoaXMgdGV4dCBpc24ndCBhY3R1YWxseSBlbmNy\neXB0ZWQgd2l0aCBQR1AsCml0J3MgYWN0dWFsbHkgb25seSBiYXNlNjQgZW5jb2Rl\nZCEKCkknbSBqdXN0IHVzaW5nIHRoaXMgYXMgYW4gZXhhbXBsZSwgdGhvdWdoLCBz\nbyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCgpGb3IgdGhlIHNha2Ugb2YgYXJn\ndW1lbnQsIHdlJ2xsIHByZXRlbmQgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGFuIGVu\nY3J5cHRlZApibHVyYi4gTW1ta2F5PyBUaGFua3MuCg==\n-----END PGP MESSAGE-----\n"
  },
  {
    "path": "Documentation/Examples/MessageDeliveryStatusExamples.cs",
    "content": "//\n// MessageDeliveryStatusExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples {\n    public static class MessageDeliveryStatusExamples\n    {\n        #region ProcessDeliveryStatusNotification\n        public void ProcessDeliveryStatusNotification (MimeMessage message)\n        {\n            var report = message.Body as MultipartReport;\n\n            if (report == null || report.ReportType == null || !report.ReportType.Equals (\"delivery-status\", StringComparison.OrdinalIgnoreCase)) {\n                // this is not a delivery status notification message...\n                return;\n            }\n\n            // process the report\n            foreach (var mds in report.OfType<MessageDeliveryStatus> ()) {\n                // process the status groups - each status group represents a different recipient\n\n                // The first status group contains information about the message\n                var envelopeId = mds.StatusGroups[0][\"Original-Envelope-Id\"];\n\n                // all of the other status groups contain per-recipient information\n                for (int i = 1; i < mds.StatusGroups.Length; i++) {\n                    var recipient = mds.StatusGroups[i][\"Original-Recipient\"];\n                    var action = mds.StatusGroups[i][\"Action\"];\n\n                    if (recipient == null)\n                        recipient = mds.StatusGroups[i][\"Final-Recipient\"];\n                    \n                    // the recipient string should be in the form: \"rfc822;user@domain.com\"\n                    var index = recipient.IndexOf (';');\n                    var address = recipient.Substring (index + 1);\n\n                    switch (action) {\n                    case \"failed\":\n                        Console.WriteLine (\"Delivery of message {0} failed for {1}\", envelopeId, address);\n                        break;\n                    case \"delayed\":\n                        Console.WriteLine (\"Delivery of message {0} has been delayed for {1}\", envelopeId, address);\n                        break;\n                    case \"delivered\":\n                        Console.WriteLine (\"Delivery of message {0} has been delivered to {1}\", envelopeId, address);\n                        break;\n                    case \"relayed\":\n                        Console.WriteLine (\"Delivery of message {0} has been relayed for {1}\", envelopeId, address);\n                        break;\n                    case \"expanded\":\n                        Console.WriteLine (\"Delivery of message {0} has been delivered to {1} and relayed to the the expanded recipients\", envelopeId, address);\n                        break;\n                    }\n                }\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/MimeIterator.cs",
    "content": "﻿var attachments = new List<MimePart> ();\nvar multiparts = new List<Multipart> ();\n\nusing (var iter = new MimeIterator (message)) {\n    // collect our list of attachments and their parent multiparts\n    while (iter.MoveNext ()) {\n        var multipart = iter.Parent as Multipart;\n        var part = iter.Current as MimePart;\n\n        if (multipart != null && part != null && part.IsAttachment) {\n            // keep track of each attachment's parent multipart\n            multiparts.Add (multipart);\n            attachments.Add (part);\n        }\n    }\n}\n\n// now remove each attachment from its parent multipart...\nfor (int i = 0; i < attachments.Count; i++)\n    multiparts[i].Remove (attachments[i]);\n"
  },
  {
    "path": "Documentation/Examples/MimeMessageLoad.cs",
    "content": "﻿// Load a MimeMessage from a stream\nvar message = MimeMessage.Load (stream);\n"
  },
  {
    "path": "Documentation/Examples/MimeParserExamples.cs",
    "content": "using System;\nusing System.IO;\nusing System.Linq;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace Examples {\n    class MimeParserExamples\n    {\n        #region ParseMessage\n        public static MimeMessage ParseMessage (string fileName)\n        {\n            // Load a MimeMessage from a file path or stream\n            using (var stream = File.OpenRead (fileName)) {\n                var parser = new MimeParser (stream, MimeFormat.Entity);\n\n                return parser.ParseMessage ();\n            }\n        }\n        #endregion // ParseMessage\n\n        #region ParseMbox\n        public static void ParseMbox (string fileName)\n        {\n            // Load every message from a Unix mbox spool.\n            using (var stream = fileName.OpenRead (fileName)) {\n                var parser = new MimeParser (stream, MimeFormat.Mbox);\n\n                while (!parser.IsEndOfStream) {\n                    MimeMessage message = parser.ParseMessage ();\n                    long mboxMarkerOffset = parser.MboxMarkerOffset;\n                    string mboxMarker = parser.MboxMarker;\n\n                    Console.WriteLine ($\"MBOX marker found @ {mboxMarkerOffset}: {mboxMarker}\");\n\n                    // TODO: Do something with the message.\n                }\n            }\n        }\n        #endregion // ParseMboxSpool\n\n        #region MessageOffsets\n        class MimeOffsets\n        {\n            public string MimeType { get; set; }\n\n            public long? MboxMarkerOffset { get; set; }\n\n            public int LineNumber { get; set; }\n\n            public long BeginOffset { get; set; }\n\n            public long HeadersEndOffset { get; set; }\n\n            public long EndOffset { get; set; }\n\n            public MimeOffsets Message { get; set; }\n\n            public List<MimeOffsets> Children { get; set; }\n\n            public long Octets { get; set; }\n\n            public int? Lines { get; set; }\n        }\n\n        public static void MimeOffsetsExample (string fileName)\n        {\n            using (var stream = fileName.OpenRead (fileName)) {\n                var messages = new Dictionary<MimeMessage, MimeOffsets> ();\n                var entities = new Dictionary<MimeEntity, MimeOffsets> ();\n                MimeOffsets messageOffsets = null;\n\n                var parser = new MimeParser (stream, MimeFormat.Entity);\n\n                // Connect a handler to track MimeMessage begin offsets\n                parser.MimeMessageBegin += delegate (sender, args) {\n                    var parser = (MimeParser) sender;\n\n                    // Create a new MimeOffsets for this message.\n                    var offsets = new MimeOffsets {\n                        BeginOffset = args.BeginOffset,\n                        LineNumber = args.LineNumber\n                    };\n\n                    if (args.Parent != null) {\n                        // If we get here, then it means that the MimeMessage is part of\n                        // a message/rfc822 \"attachment\".\n                        var parentOffsets = entities[args.Parent];\n                        parentOffsets.Message = offsets;\n                    } else {\n                        // Otherwise, this is the top-level MimeMessage.\n                        offsets.MboxMarkerOffset = parser.MboxMarkerOffset;\n                        messageOffsets = offsets;\n                    }\n\n                    messages.Add (args.Message, offsets);\n                };\n\n                // Connect a handler to track MimeMessage end offsets\n                parser.MimeMessageEnd += delegate (sender, args) {\n                    // Our MimeMessageBegin event handler already created a MimeOffsets for\n                    // this message. Use the `messages` dictionary to retrieve it.\n                    var offsets = messages[args.Message];\n\n                    // Track the size of the MimeMessage in octets (aka bytes), the offset\n                    // for the end of the header block, and the end of the message.\n                    offsets.Octets = args.EndOffset - args.HeadersEndOffset;\n                    offsets.HeadersEndOffset = args.HeadersEndOffset;\n                    offsets.EndOffset = args.EndOffset;\n                };\n\n                // Connect a handler to track MimeEntity begin offsets\n                parser.MimeEntityBegin += delegate (sender, args) {\n                    // Create a new MimeOffsets for this MIME entity (which could be a MimePart, MessagePart, or Multipart).\n                    var offsets = new MimeOffsets {\n                        MimeType = args.Entity.ContentType.MimeType,\n                        BeginOffset = args.BeginOffset,\n                        LineNumber = args.LineNumber\n                    };\n\n                    if (args.Parent != null && entities.TryGetValue (args.Parent, out var parentOffsets)) {\n                        parentOffsets.Children ??= new List<MimeOffsets> ();\n                        parentOffsets.Children.Add (offsets);\n                    }\n\n                    entities.Add (args.Entity, offsets);\n                };\n\n                // Connect a handler to track MimeEntity end offsets\n                parser.MimeEntityEnd += delegate (sender, args) {\n                    // Our MimeEntityBegin event handler already created a MimeOffsets for\n                    // this entity. Use the `entities` dictionary to retrieve it.\n                    var offsets = entities[args.Entity];\n\n                    // Track the size of the MimeEntity in octets (aka bytes), the offset\n                    // for the end of the header block, the end of the entity, and the\n                    // line count.\n                    offsets.Octets = args.EndOffset - args.HeadersEndOffset;\n                    offsets.HeadersEndOffset = args.HeadersEndOffset;\n                    offsets.EndOffset = args.EndOffset;\n                    offsets.Lines = args.Lines;\n                };\n\n                // Parse the message (which will emit the events as appropriate).\n                var message = parser.ParseMessage ();\n\n                // Now we can find out the offsets of each MimePart:\n                foreach (var bodyPart in message.BodyParts.OfType<MimePart> ()) {\n                    var offsets = entities[bodyPart];\n\n                    Console.WriteLine ($\"The offsets for the MIME part for {bodyPart.ContentType} are:\");\n                    Console.WriteLine ($\"  - LineNumber: {offsets.LineNumber}\")\n                    Console.WriteLine ($\"  - BeginOffset: {offsets.BeginOffset}\");\n                    Console.WriteLine ($\"  - HeadersEndOffset: {offsets.HeadersEndOffset}\"); // Note: This is also where the *content* begins.\n                    Console.WriteLine ($\"  - EndOffset: {offsets.BeginOffset}\");\n                    Console.WriteLine ($\"  - Octets: {offsets.Octets}\");\n                    Console.WriteLine ($\"  - Lines: {offsets.Lines}\");\n                }\n            }\n        }\n        #endregion // MessageOffsets\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/MimeVisitorExamples.cs",
    "content": "﻿//\n// MimeVisitorExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MimeKit.Text;\nusing MimeKit.Tnef;\n\nnamespace MimeKit.Examples\n{\n\t#region HtmlPreviewVisitor\n\t/// <summary>\n\t/// Visits a MimeMessage and generates HTML suitable to be rendered by a browser control.\n\t/// </summary>\n\tclass HtmlPreviewVisitor : MimeVisitor\n\t{\n\t\tList<MultipartRelated> stack = new List<MultipartRelated> ();\n\t\tList<MimeEntity> attachments = new List<MimeEntity> ();\n\t\tstring body;\n\n\t\t/// <summary>\n\t\t/// Creates a new HtmlPreviewVisitor.\n\t\t/// </summary>\n\t\tpublic HtmlPreviewVisitor ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The list of attachments that were in the MimeMessage.\n\t\t/// </summary>\n\t\tpublic IList<MimeEntity> Attachments {\n\t\t\tget { return attachments; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The HTML string that can be set on the BrowserControl.\n\t\t/// </summary>\n\t\tpublic string HtmlBody {\n\t\t\tget { return body ?? string.Empty; }\n\t\t}\n\n\t\tprotected override void VisitMultipartAlternative (MultipartAlternative alternative)\n\t\t{\n\t\t\t// walk the multipart/alternative children backwards from greatest level of faithfulness to the least faithful\n\t\t\tfor (int i = alternative.Count - 1; i >= 0 && body == null; i--)\n\t\t\t\talternative[i].Accept (this);\n\t\t}\n\n\t\tprotected override void VisitMultipartRelated (MultipartRelated related)\n\t\t{\n\t\t\tvar root = related.Root;\n\n\t\t\t// push this multipart/related onto our stack\n\t\t\tstack.Add (related);\n\n\t\t\t// visit the root document\n\t\t\troot.Accept (this);\n\n\t\t\t// pop this multipart/related off our stack\n\t\t\tstack.RemoveAt (stack.Count - 1);\n\t\t}\n\n\t\t// look up the image based on the img src url within our multipart/related stack\n\t\tbool TryGetImage (string url, out MimePart image)\n\t\t{\n\t\t\tUriKind kind;\n\t\t\tint index;\n\t\t\tUri uri;\n\n\t\t\tif (Uri.IsWellFormedUriString (url, UriKind.Absolute))\n\t\t\t\tkind = UriKind.Absolute;\n\t\t\telse if (Uri.IsWellFormedUriString (url, UriKind.Relative))\n\t\t\t\tkind = UriKind.Relative;\n\t\t\telse\n\t\t\t\tkind = UriKind.RelativeOrAbsolute;\n\n\t\t\ttry {\n\t\t\t\turi = new Uri (url, kind);\n\t\t\t} catch {\n\t\t\t\timage = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor (int i = stack.Count - 1; i >= 0; i--) {\n\t\t\t\tif ((index = stack[i].IndexOf (uri)) == -1)\n\t\t\t\t\tcontinue;\n\n\t\t\t\timage = stack[i][index] as MimePart;\n\t\t\t\treturn image != null;\n\t\t\t}\n\n\t\t\timage = null;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a data: URI for the image attachment.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the image attachment into a string suitable for setting as a src= attribute value in\n\t\t/// an img tag.\n\t\t/// </remarks>\n\t\t/// <returns>The data: URI.</returns>\n\t\t/// <param name=\"image\">The image attachment.</param>\n\t\tstring GetDataUri (MimePart image)\n\t\t{\n\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\timage.Content.DecodeTo (memory);\n\t\t\t\tvar buffer = memory.GetBuffer ();\n\t\t\t\tvar length = (int) memory.Length;\n\t\t\t\tvar base64 = Convert.ToBase64String (buffer, 0, length);\n\n\t\t\t\treturn string.Format (\"data:{0};base64,{1}\", image.ContentType.MimeType, base64);\n\t\t\t}\n\t\t}\n\n\t\t// Replaces <img src=...> urls that refer to images embedded within the message with\n\t\t// \"file://\" urls that the browser control will actually be able to load.\n\t\tvoid HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)\n\t\t{\n\t\t\tif (ctx.TagId == HtmlTagId.Meta && !ctx.IsEndTag) {\n\t\t\t\tbool isContentType = false;\n\n\t\t\t\tctx.WriteTag (htmlWriter, false);\n\n\t\t\t\t// replace charsets with \"utf-8\" since our output will be in utf-8 (and not whatever the original charset was)\n\t\t\t\tforeach (var attribute in ctx.Attributes) {\n\t\t\t\t\tif (attribute.Id == HtmlAttributeId.Charset) {\n\t\t\t\t\t\thtmlWriter.WriteAttributeName (attribute.Name);\n\t\t\t\t\t\thtmlWriter.WriteAttributeValue (\"utf-8\");\n\t\t\t\t\t} else if (isContentType && attribute.Id == HtmlAttributeId.Content) {\n\t\t\t\t\t\thtmlWriter.WriteAttributeName (attribute.Name);\n\t\t\t\t\t\thtmlWriter.WriteAttributeValue (\"text/html; charset=utf-8\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (attribute.Id == HtmlAttributeId.HttpEquiv && attribute.Value != null\n\t\t\t\t\t\t\t&& attribute.Value.Equals (\"Content-Type\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\t\tisContentType = true;\n\n\t\t\t\t\t\thtmlWriter.WriteAttribute (attribute);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (ctx.TagId == HtmlTagId.Image && !ctx.IsEndTag && stack.Count > 0) {\n\t\t\t\tctx.WriteTag (htmlWriter, false);\n\n\t\t\t\t// replace the src attribute with a \"data:\" URL\n\t\t\t\tforeach (var attribute in ctx.Attributes) {\n\t\t\t\t\tif (attribute.Id == HtmlAttributeId.Src) {\n\t\t\t\t\t\tif (!TryGetImage (attribute.Value, out var image)) {\n\t\t\t\t\t\t\thtmlWriter.WriteAttribute (attribute);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar dataUri = GetDataUri (image);\n\n\t\t\t\t\t\thtmlWriter.WriteAttributeName (attribute.Name);\n\t\t\t\t\t\thtmlWriter.WriteAttributeValue (dataUri);\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtmlWriter.WriteAttribute (attribute);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (ctx.TagId == HtmlTagId.Body && !ctx.IsEndTag) {\n\t\t\t\tctx.WriteTag (htmlWriter, false);\n\n\t\t\t\t// add and/or replace oncontextmenu=\"return false;\"\n\t\t\t\tforeach (var attribute in ctx.Attributes) {\n\t\t\t\t\tif (attribute.Name.Equals (\"oncontextmenu\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\thtmlWriter.WriteAttribute (attribute);\n\t\t\t\t}\n\n\t\t\t\thtmlWriter.WriteAttribute (\"oncontextmenu\", \"return false;\");\n\t\t\t} else {\n\t\t\t\t// pass the tag through to the output\n\t\t\t\tctx.WriteTag (htmlWriter, true);\n\t\t\t}\n\t\t}\n\n\t\tprotected override void VisitTextPart (TextPart entity)\n\t\t{\n\t\t\tTextConverter converter;\n\n\t\t\tif (body != null) {\n\t\t\t\t// since we've already found the body, treat this as an attachment\n\t\t\t\tattachments.Add (entity);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (entity.IsHtml) {\n\t\t\t\tconverter = new HtmlToHtml {\n\t\t\t\t\tHtmlTagCallback = HtmlTagCallback\n\t\t\t\t};\n\t\t\t} else if (entity.IsFlowed) {\n\t\t\t\tvar flowed = new FlowedToHtml ();\n\t\t\t\tstring delsp;\n\n\t\t\t\tif (entity.ContentType.Parameters.TryGetValue (\"delsp\", out delsp))\n\t\t\t\t\tflowed.DeleteSpace = delsp.Equals (\"yes\", StringComparison.OrdinalIgnoreCase);\n\n\t\t\t\tconverter = flowed;\n\t\t\t} else {\n\t\t\t\tconverter = new TextToHtml ();\n\t\t\t}\n\n\t\t\tbody = converter.Convert (entity.Text);\n\t\t}\n\n\t\tprotected override void VisitTnefPart (TnefPart entity)\n\t\t{\n\t\t\t// extract any attachments in the MS-TNEF part\n\t\t\tattachments.AddRange (entity.ExtractAttachments ());\n\t\t}\n\n\t\tprotected override void VisitMessagePart (MessagePart entity)\n\t\t{\n\t\t\t// treat message/rfc822 parts as attachments\n\t\t\tattachments.Add (entity);\n\t\t}\n\n\t\tprotected override void VisitMimePart (MimePart entity)\n\t\t{\n\t\t\t// realistically, if we've gotten this far, then we can treat this as an attachment\n\t\t\t// even if the IsAttachment property is false.\n\t\t\tattachments.Add (entity);\n\t\t}\n\t}\n\t#endregion\n\n\t#region ReplyVisitor\n\tpublic class ReplyVisitor : MimeVisitor\n\t{\n\t\treadonly Stack<Multipart> stack = new Stack<Multipart> ();\n\t\tMimeMessage message;\n\t\tMimeEntity body;\n\n\t\t/// <summary>\n\t\t/// Creates a new ReplyVisitor.\n\t\t/// </summary>\n\t\tpublic ReplyVisitor ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the reply.\n\t\t/// </summary>\n\t\t/// <value>The reply.</value>\n\t\tpublic MimeEntity Body {\n\t\t\tget { return body; }\n\t\t}\n\n\t\tvoid Push (MimeEntity entity)\n\t\t{\n\t\t\tvar multipart = entity as Multipart;\n\n\t\t\tif (body == null) {\n\t\t\t\tbody = entity;\n\t\t\t} else {\n\t\t\t\tvar parent = stack.Peek ();\n\t\t\t\tparent.Add (entity);\n\t\t\t}\n\n\t\t\tif (multipart != null)\n\t\t\t\tstack.Push (multipart);\n\t\t}\n\n\t\tvoid Pop ()\n\t\t{\n\t\t\tstack.Pop ();\n\t\t}\n\n\t\tpublic static string GetOnDateSenderWrote (MimeMessage message)\n\t\t{\n\t\t\tvar sender = message.Sender != null ? message.Sender : message.From.Mailboxes.FirstOrDefault ();\n\t\t\tvar name = sender != null ? (!string.IsNullOrEmpty (sender.Name) ? sender.Name : sender.Address) : \"someone\";\n\n\t\t\treturn string.Format (\"On {0}, {1} wrote:\", message.Date.ToString (\"f\"), name);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the specified message.\n\t\t/// </summary>\n\t\t/// <param name=\"message\">The message.</param>\n\t\tpublic override void Visit (MimeMessage message)\n\t\t{\n\t\t\tthis.message = message;\n\t\t\tstack.Clear ();\n\n\t\t\tbase.Visit (message);\n\t\t}\n\n\t\tprotected override void VisitMultipartAlternative (MultipartAlternative alternative)\n\t\t{\n\t\t\tvar multipart = new MultipartAlternative ();\n\n\t\t\tPush (multipart);\n\n\t\t\tfor (int i = 0; i < alternative.Count; i++)\n\t\t\t\talternative[i].Accept (this);\n\n\t\t\tPop ();\n\t\t}\n\n\t\tprotected override void VisitMultipartRelated (MultipartRelated related)\n\t\t{\n\t\t\tvar multipart = new MultipartRelated ();\n\t\t\tvar root = related.Root;\n\n\t\t\tPush (multipart);\n\n\t\t\troot.Accept (this);\n\n\t\t\tfor (int i = 0; i < related.Count; i++) {\n\t\t\t\tif (related[i] != root)\n\t\t\t\t\trelated[i].Accept (this);\n\t\t\t}\n\n\t\t\tPop ();\n\t\t}\n\n\t\tprotected override void VisitMultipart (Multipart multipart)\n\t\t{\n\t\t\tforeach (var part in multipart) {\n\t\t\t\tif (part is MultipartAlternative)\n\t\t\t\t\tpart.Accept (this);\n\t\t\t\telse if (part is MultipartRelated)\n\t\t\t\t\tpart.Accept (this);\n\t\t\t\telse if (part is TextPart)\n\t\t\t\t\tpart.Accept (this);\n\t\t\t}\n\t\t}\n\n\t\tvoid HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)\n\t\t{\n\t\t\tif (ctx.TagId == HtmlTagId.Body && !ctx.IsEmptyElementTag) {\n\t\t\t\tif (ctx.IsEndTag) {\n\t\t\t\t\t// end our opening <blockquote>\n\t\t\t\t\thtmlWriter.WriteEndTag (HtmlTagId.BlockQuote);\n\n\t\t\t\t\t// pass the </body> tag through to the output\n\t\t\t\t\tctx.WriteTag (htmlWriter, true);\n\t\t\t\t} else {\n\t\t\t\t\t// pass the <body> tag through to the output\n\t\t\t\t\tctx.WriteTag (htmlWriter, true);\n\n\t\t\t\t\t// prepend the HTML reply with \"On {DATE}, {SENDER} wrote:\"\n\t\t\t\t\thtmlWriter.WriteStartTag (HtmlTagId.P);\n\t\t\t\t\thtmlWriter.WriteText (GetOnDateSenderWrote (message));\n\t\t\t\t\thtmlWriter.WriteEndTag (HtmlTagId.P);\n\n\t\t\t\t\t// Wrap the original content in a <blockquote>\n\t\t\t\t\thtmlWriter.WriteStartTag (HtmlTagId.BlockQuote);\n\t\t\t\t\thtmlWriter.WriteAttribute (HtmlAttributeId.Style, \"border-left: 1px #ccc solid; margin: 0 0 0 .8ex; padding-left: 1ex;\");\n\n\t\t\t\t\tctx.InvokeCallbackForEndTag = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// pass the tag through to the output\n\t\t\t\tctx.WriteTag (htmlWriter, true);\n\t\t\t}\n\t\t}\n\n\t\tstring QuoteText (string text)\n\t\t{\n\t\t\tusing (var quoted = new StringWriter ()) {\n\t\t\t\tquoted.WriteLine (GetOnDateSenderWrote (message));\n\n\t\t\t\tusing (var reader = new StringReader (text)) {\n\t\t\t\t\tstring line;\n\n\t\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\t\tquoted.Write (\"> \");\n\t\t\t\t\t\tquoted.WriteLine (line);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn quoted.ToString ();\n\t\t\t}\n\t\t}\n\n\t\tprotected override void VisitTextPart (TextPart entity)\n\t\t{\n\t\t\tstring text;\n\n\t\t\tif (entity.IsHtml) {\n\t\t\t\tvar converter = new HtmlToHtml {\n\t\t\t\t\tHtmlTagCallback = HtmlTagCallback\n\t\t\t\t};\n\n\t\t\t\ttext = converter.Convert (entity.Text);\n\t\t\t} else if (entity.IsFlowed) {\n\t\t\t\tvar converter = new FlowedToText ();\n\n\t\t\t\ttext = converter.Convert (entity.Text);\n\t\t\t\ttext = QuoteText (text);\n\t\t\t} else {\n\t\t\t\t// quote the original message text\n\t\t\t\ttext = QuoteText (entity.Text);\n\t\t\t}\n\n\t\t\tvar part = new TextPart (entity.ContentType.MediaSubtype.ToLowerInvariant ()) {\n\t\t\t\tText = text\n\t\t\t};\n\n\t\t\tPush (part);\n\t\t}\n\n\t\tprotected override void VisitMessagePart (MessagePart entity)\n\t\t{\n\t\t\t// don't descend into message/rfc822 parts\n\t\t}\n\t}\n\t#endregion\n\n\tpublic class Program\n\t{\n\t\t#region RenderMessage\n\t\tvoid Render (MimeMessage message)\n\t\t{\n\t\t\tvar tmpDir = Path.Combine (Path.GetTempPath (), message.MessageId);\n\t\t\tvar visitor = new HtmlPreviewVisitor (tmpDir);\n\n\t\t\tDirectory.CreateDirectory (tmpDir);\n\n\t\t\tmessage.Accept (visitor);\n\n\t\t\tDisplayHtml (visitor.HtmlBody);\n\t\t\tDisplayAttachments (visitor.Attachments);\n\t\t}\n\t\t#endregion\n\n\t\t#region ReplySimple\n\t\tpublic static MimeMessage Reply (MimeMessage message, MailboxAddress from, bool replyToAll)\n\t\t{\n\t\t\tvar reply = new MimeMessage ();\n\n\t\t\treply.From.Add (from);\n\n\t\t\t// reply to the sender of the message\n\t\t\tif (message.ReplyTo.Count > 0) {\n\t\t\t\treply.To.AddRange (message.ReplyTo);\n\t\t\t} else if (message.From.Count > 0) {\n\t\t\t\treply.To.AddRange (message.From);\n\t\t\t} else if (message.Sender != null) {\n\t\t\t\treply.To.Add (message.Sender);\n\t\t\t}\n\n\t\t\tif (replyToAll) {\n\t\t\t\t// include all of the other original recipients (removing ourselves from the list)\n\t\t\t\treply.To.AddRange (message.To.Mailboxes.Where (x => x.Address != from.Address));\n\t\t\t\treply.Cc.AddRange (message.Cc.Mailboxes.Where (x => x.Address != from.Address));\n\t\t\t}\n\n\t\t\t// set the reply subject\n\t\t\tif (!message.Subject.StartsWith (\"Re:\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treply.Subject = \"Re: \" + message.Subject;\n\t\t\telse\n\t\t\t\treply.Subject = message.Subject;\n\n\t\t\t// construct the In-Reply-To and References headers\n\t\t\tif (!string.IsNullOrEmpty (message.MessageId)) {\n\t\t\t\treply.InReplyTo = message.MessageId;\n\t\t\t\tforeach (var id in message.References)\n\t\t\t\t\treply.References.Add (id);\n\t\t\t\treply.References.Add (message.MessageId);\n\t\t\t}\n\n\t\t\t// quote the original message text\n\t\t\tusing (var quoted = new StringWriter ()) {\n\t\t\t\tvar sender = message.Sender ?? message.From.Mailboxes.FirstOrDefault ();\n\t\t\t\tvar name = sender != null ? (!string.IsNullOrEmpty (sender.Name) ? sender.Name : sender.Address) : \"someone\";\n\n\t\t\t\tquoted.WriteLine (\"On {0}, {1} wrote:\", message.Date.ToString (\"f\"), name);\n\t\t\t\tusing (var reader = new StringReader (message.TextBody)) {\n\t\t\t\t\tstring line;\n\n\t\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\t\tquoted.Write (\"> \");\n\t\t\t\t\t\tquoted.WriteLine (line);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treply.Body = new TextPart (\"plain\") {\n\t\t\t\t\tText = quoted.ToString ()\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn reply;\n\t\t}\n\t\t#endregion\n\n\t\t#region Reply\n\t\tpublic static MimeMessage Reply (MimeMessage message, MailboxAddress from, bool replyToAll)\n\t\t{\n\t\t\tvar visitor = new ReplyVisitor ();\n\t\t\tvar reply = new MimeMessage ();\n\n\t\t\treply.From.Add (from);\n\n\t\t\t// reply to the sender of the message\n\t\t\tif (message.ReplyTo.Count > 0) {\n\t\t\t\treply.To.AddRange (message.ReplyTo);\n\t\t\t} else if (message.From.Count > 0) {\n\t\t\t\treply.To.AddRange (message.From);\n\t\t\t} else if (message.Sender != null) {\n\t\t\t\treply.To.Add (message.Sender);\n\t\t\t}\n\n\t\t\tif (replyToAll) {\n\t\t\t\t// include all of the other original recipients (removing ourselves from the list)\n\t\t\t\treply.To.AddRange (message.To.Mailboxes.Where (x => x.Address != from.Address));\n\t\t\t\treply.Cc.AddRange (message.Cc.Mailboxes.Where (x => x.Address != from.Address));\n\t\t\t}\n\n\t\t\t// set the reply subject\n\t\t\tif (!message.Subject.StartsWith (\"Re:\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treply.Subject = \"Re: \" + message.Subject;\n\t\t\telse\n\t\t\t\treply.Subject = message.Subject;\n\n\t\t\t// construct the In-Reply-To and References headers\n\t\t\tif (!string.IsNullOrEmpty (message.MessageId)) {\n\t\t\t\treply.InReplyTo = message.MessageId;\n\t\t\t\tforeach (var id in message.References)\n\t\t\t\t\treply.References.Add (id);\n\t\t\t\treply.References.Add (message.MessageId);\n\t\t\t}\n\n\t\t\tvisitor.Visit (message);\n\n\t\t\treply.Body = visitor.Body ?? new TextPart (\"plain\") { Text = ReplyVisitor.GetOnDateSenderWrote (message) + Environment.NewLine };\n\n\t\t\treturn reply;\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/MultipartFormDataExamples.cs",
    "content": "﻿using System;\nusing System.Net;\n\nusing MimeKit;\n\nnamespace Examples {\n\tclass MultipartFormDataExample\n\t{\n\t\t#region ParseMultipartFormDataSimple\n\t\tMimeEntity ParseMultipartFormData (HttpWebResponse response)\n\t\t{\n\t\t\tvar contentType = ContentType.Parse (response.ContentType);\n\n\t\t\treturn MimeEntity.Load (contentType, response.GetResponseStream ());\n\t\t}\n\t\t#endregion\n\n\t\t#region ParseMultipartFormDataComplex\n\t\tMimeEntity ParseMultipartFormData (HttpWebResponse response)\n\t\t{\n\t\t\t// create a temporary file to store our large HTTP data stream\n\t\t\tvar tmp = Path.GetTempFileName ();\n\n\t\t\tusing (var stream = File.Open (tmp, FileMode.Open, FileAccess.ReadWrite)) {\n\t\t\t\t// create a header for the multipart/form-data MIME entity based on the Content-Type value of the HTTP\n\t\t\t\t// response\n\t\t\t\tvar header = Encoding.UTF8.GetBytes (string.Format (\"Content-Type: {0}\\r\\n\\r\\n\", response.ContentType));\n\n\t\t\t\t// write the header to the stream\n\t\t\t\tstream.Write (header, 0, header.Length);\n\n\t\t\t\t// copy the content of the HTTP response to our temporary stream\n\t\t\t\tresponse.GetResponseStream ().CopyTo (stream);\n\n\t\t\t\t// reset the stream back to the beginning\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\t// parse the MIME entity with persistent = true, telling the parser not to load the content into memory\n\t\t\t\treturn MimeEntity.Load (stream, persistent: true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/OAuth2ExchangeExample.cs",
    "content": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing MailKit;\nusing MailKit.Net.Imap;\nusing MailKit.Security;\n\nusing Microsoft.Identity.Client;\n\nnamespace OAuth2ExchangeExample {\n    class Program\n    {\n        const string ExchangeAccount = \"username@office365.com\";\n\n        public static void Main (string[] args)\n        {\n            using (var client = new ImapClient ()) {\n                client.Connect (\"outlook.office365.com\", 993, SecureSocketOptions.SslOnConnect);\n                if (client.AuthenticationMechanisms.Contains (\"OAUTHBEARER\") || client.AuthenticationMechanisms.Contains (\"XOAUTH2\"))\n                    AuthenticateAsync (client).GetAwaiter ().GetResult ();\n                client.Disconnect (true);\n            }\n        }\n\n        static async Task AuthenticateAsync (ImapClient client)\n        {\n            var options = new PublicClientApplicationOptions {\n                ClientId = \"Application (client) ID\",\n                TenantId = \"Directory (tenant) ID\",\n                RedirectUri = \"https://login.microsoftonline.com/common/oauth2/nativeclient\"\n            };\n\n            var publicClientApplication = PublicClientApplicationBuilder\n                .CreateWithApplicationOptions (options)\n                .Build ();\n\n            var scopes = new string[] {\n                \"email\",\n                \"offline_access\",\n                \"https://outlook.office.com/IMAP.AccessAsUser.All\", // Only needed for IMAP\n                //\"https://outlook.office.com/POP.AccessAsUser.All\",  // Only needed for POP\n                //\"https://outlook.office.com/SMTP.AccessAsUser.All\", // Only needed for SMTP\n            };\n\n            AuthenticationResult? result;\n\n            try {\n                // First, check the cache for an auth token.\n                result = await publicClientApplication.AcquireTokenSilent (scopes, username).ExecuteAsync ();\n            } catch (MsalUiRequiredException) {\n                // If that fails, then try getting an auth token interactively.\n                result = await publicClientApplication.AcquireTokenInteractive (scopes).WithLoginHint (username).ExecuteAsync ();\n            }\n\n            // Note: We use result.Account.Username here instead of ExchangeAccount because the user *may* have chosen a\n            // different Microsoft Exchange account when presented with the browser window during the authentication process.\n            SaslMechanism oauth2;\n\n            if (client.AuthenticationMechanisms.Contains (\"OAUTHBEARER\"))\n                oauth2 = new SaslMechanismOAuthBearer (result.Account.Username, result.AccessToken);\n            else\n                oauth2 = new SaslMechanismOAuth2 (result.Account.Username, result.AccessToken);\n\n            await client.AuthenticateAsync (oauth2);\n        }\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/OAuth2GMailExample.cs",
    "content": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing Google.Apis.Util;\nusing Google.Apis.Util.Store;\nusing Google.Apis.Auth.OAuth2;\nusing Google.Apis.Auth.OAuth2.Flows;\n\nusing MailKit;\nusing MailKit.Net.Imap;\nusing MailKit.Security;\n\nnamespace OAuth2GMailExample {\n    class Program\n    {\n        const string GMailAccount = \"username@gmail.com\";\n\n        public static void Main (string[] args)\n        {\n            using (var client = new ImapClient ()) {\n                client.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n                if (client.AuthenticationMechanisms.Contains (\"OAUTHBEARER\") || client.AuthenticationMechanisms.Contains (\"XOAUTH2\"))\n                    AuthenticateAsync (client).GetAwaiter ().GetResult ();\n                client.Disconnect (true);\n            }\n        }\n\n        static async Task AuthenticateAsync (ImapClient client)\n        {\n            var clientSecrets = new ClientSecrets {\n                ClientId = \"XXX.apps.googleusercontent.com\",\n                ClientSecret = \"XXX\"\n            };\n\n            var codeFlow = new GoogleAuthorizationCodeFlow (new GoogleAuthorizationCodeFlow.Initializer {\n                DataStore = new FileDataStore (\"CredentialCacheFolder\", false),\n                Scopes = new [] { \"https://mail.google.com/\" },\n                ClientSecrets = clientSecrets\n            });\n\n            // Note: For a web app, you'll want to use AuthorizationCodeWebApp instead.\n            var codeReceiver = new LocalServerCodeReceiver ();\n            var authCode = new AuthorizationCodeInstalledApp (codeFlow, codeReceiver);\n\n            var credential = await authCode.AuthorizeAsync (GMailAccount, CancellationToken.None);\n\n            if (credential.Token.IsStale)\n                await credential.RefreshTokenAsync (CancellationToken.None);\n\n            // Note: We use credential.UserId here instead of GMailAccount because the user *may* have chosen a\n            // different GMail account when presented with the browser window during the authentication process.\n            SaslMechanism oauth2;\n\n            if (client.AuthenticationMechanisms.Contains (\"OAUTHBEARER\"))\n                oauth2 = new SaslMechanismOAuthBearer (credential.UserId, credential.Token.AccessToken);\n            else\n                oauth2 = new SaslMechanismOAuth2 (credential.UserId, credential.Token.AccessToken);\n\n            await client.AuthenticateAsync (oauth2);\n        }\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/OpenPGPExamples.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnamespace Examples\n{\n\t#region MyGnuPGContext\n\tpublic class MyGnuPGContext : GnuPGContext\n\t{\n\t\tpublic MyGnuPGContext ()\n\t\t{\n\t\t}\n\n\t\tprotected override string GetPasswordForKey (PgpSecretKey key)\n\t\t{\n\t\t\t// prompt the user (or a secure password cache) for the password for the specified secret key.\n\t\t\treturn \"password\";\n\t\t}\n\t}\n\t#endregion\n\n\tpublic class OpenPGPExamples\n\t{\n\t\tpublic void RegisterMyGnuPGeContext ()\n\t\t{\n\t\t\t#region RegisterCustomContext\n\t\t\t// Note: by registering our custom context it becomes the default OpenPGP context\n\t\t\t// instantiated by MimeKit when methods such as Encrypt(), Decrypt(), Sign(), and\n\t\t\t// Verify() are used without an explicit context.\n\t\t\tCryptographyContext.Register (typeof (MyGnuPGContext));\n\t\t\t#endregion\n\t\t}\n\n\t\t#region Encrypt\n\t\tpublic void Encrypt (MimeMessage message)\n\t\t{\n\t\t\t// encrypt our message body using our custom GnuPG cryptography context\n\t\t\tusing (var ctx = new MyGnuPGContext ()) {\n\t\t\t\t// Note: this assumes that each of the recipients has a PGP key associated\n\t\t\t\t// with their email address in the user's public keyring.\n\t\t\t\t//\n\t\t\t\t// If this is not the case, you can use SecureMailboxAddresses instead of\n\t\t\t\t// normal MailboxAddresses which would allow you to specify the fingerprint\n\t\t\t\t// of their PGP keys. You could also choose to use one of the Encrypt()\n\t\t\t\t// overloads that take a list of PgpPublicKeys.\n\t\t\t\tmessage.Body = MultipartEncrypted.Encrypt (ctx, message.To.Mailboxes, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Decrypt\n\t\tpublic MimeEntity Decrypt (MimeMessage message)\n\t\t{\n\t\t\tif (message.Body is MultipartEncrypted) {\n\t\t\t\t// the top-level MIME part of the message is encrypted using PGP/MIME\n\t\t\t\tvar encrypted = (MultipartEncrypted) entity;\n\n\t\t\t\treturn encrypted.Decrypt ();\n\t\t\t} else {\n\t\t\t\t// the top-level MIME part is not encrypted\n\t\t\t\treturn message.Body;\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Sign\n\t\tpublic void Sign (MimeMessage message)\n\t\t{\n\t\t\t// digitally sign our message body using our custom GnuPG cryptography context\n\t\t\tusing (var ctx = new MyGnuPGContext ()) {\n\t\t\t\t// Note: this assumes that the Sender address has an S/MIME signing certificate\n\t\t\t\t// and private key with an X.509 Subject Email identifier that matches the\n\t\t\t\t// sender's email address.\n\t\t\t\t//\n\t\t\t\t// If this is not the case, you can use a SecureMailboxAddress instead of a\n\t\t\t\t// normal MailboxAddress which would allow you to specify the fingerprint\n\t\t\t\t// of the sender's private PGP key. You could also choose to use one of the\n\t\t\t\t// Create() overloads that take a PgpSecretKey, instead.\n\t\t\t\tvar sender = message.From.Mailboxes.FirstOrDefault ();\n\n\t\t\t\tmessage.Body = MultipartSigned.Create (ctx, sender, DigestAlgorithm.Sha1, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SignWithKey\n\t\tpublic void Sign (MimeMessage message, PgpSecretKey key)\n\t\t{\n\t\t\t// digitally sign our message body using our custom GnuPG cryptography context\n\t\t\tusing (var ctx = new MyGnuPGContext ()) {\n\t\t\t\tmessage.Body = MultipartSigned.Create (ctx, key, DigestAlgorithm.Sha1, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Verify\n\t\tpublic void Verify (MimeMessage message)\n\t\t{\n\t\t\tif (message.Body is MultipartSigned) {\n\t\t\t\tvar signed = (MultipartSigned) message.Body;\n\n\t\t\t\tforeach (var signature in signed.Verify ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbool valid = signature.Verify ();\n\n\t\t\t\t\t\t// If valid is true, then it signifies that the signed content\n\t\t\t\t\t\t// has not been modified since this particular signer signed the\n\t\t\t\t\t\t// content.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// However, if it is false, then it indicates that the signed\n\t\t\t\t\t\t// content has been modified.\n\t\t\t\t\t} catch (DigitalSignatureVerifyException) {\n\t\t\t\t\t\t// There was an error verifying the signature.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DecryptInlinePGP\n\t\tstatic Stream Decrypt (MimeMessage message)\n\t\t{\n\t\t\tvar text = message.TextBody;\n\n\t\t\tusing (var encrypted = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var ctx = new MyGnuPGContext ()) {\n\t\t\t\t\tvar decrypted = new MemoryStream ();\n\n\t\t\t\t\tctx.DecryptTo (encrypted, decrypted);\n\t\t\t\t\tdecrypted.Position = 0;\n\n\t\t\t\t\treturn decrypted;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}"
  },
  {
    "path": "Documentation/Examples/OpeningContent.cs",
    "content": "﻿using (var stream = part.Content.Open ()) {\n    // At this point, you can now read from the stream as if it were the original,\n    // raw content. Assuming you have an image UI control that could load from a\n    // stream, you could do something like this:\n    imageControl.Load (stream);\n}\n"
  },
  {
    "path": "Documentation/Examples/ParameterExamples.cs",
    "content": "using System;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n    public static class ParameterExamples\n    {\n        public void OverrideAllParameterEncodings (MimePart part)\n        {\n            #region OverrideAllParameterEncodings\n            // Some versions of Outlook expect the rfc2047 style of encoding of parameter values.\n            foreach (var parameter in part.ContentDisposition.Parameters)\n                parameter.EncodingMethod = ParameterEncodingMethod.Rfc2047;\n            #endregion OverrideAllParameterEncodings\n        }\n\n        public void OverrideFileNameParameterEncodings (MimePart part)\n        {\n            #region OverrideFileNameParameterEncoding\n            // Some versions of Outlook expect the rfc2047 style of encoding for the filename parameter value.\n            if (part.ContentDisposition.Parameters.TryGetValue (\"filename\", out var parameter))\n                parameter.EncodingMethod = ParameterEncodingMethod.Rfc2047;\n            #endregion OverrideFileNameParameterEncoding\n        }\n    }\n}\n"
  },
  {
    "path": "Documentation/Examples/Pop3Examples.cs",
    "content": "﻿//\n// Pop3Examples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Pop3;\n\nnamespace MailKit.Examples {\n\tpublic static class Pop3Examples\n\t{\n\t\t#region ProtocolLogger\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (\"pop3.log\"))) {\n\t\t\t\tclient.Connect (\"pop.gmail.com\", 995, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tfor (int i = 0; i < client.Count; i++) {\n\t\t\t\t\tvar message = client.GetMessage (i);\n\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.msg\", i));\n\n\t\t\t\t\t// mark the message for deletion\n\t\t\t\t\tclient.DeleteMessage (i);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Capabilities\n\t\tpublic static void PrintCapabilities ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tclient.Connect (\"pop.gmail.com\", 995, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.SASL)) {\n\t\t\t\t\tvar mechanisms = string.Join (\", \", client.AuthenticationMechanisms);\n\t\t\t\t\tConsole.WriteLine (\"The POP3 server supports the following SASL mechanisms: {0}\", mechanisms);\n\t\t\t\t}\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.Apop))\n\t\t\t\t\tConsole.WriteLine (\"The server supports APOP authentication.\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.Expire)) {\n\t\t\t\t\tif (client.ExpirePolicy > 0)\n\t\t\t\t\t\tConsole.WriteLine (\"The POP3 server automatically expires messages after {0} days\", client.ExpirePolicy);\n\t\t\t\t\telse\n\t\t\t\t\t\tConsole.WriteLine (\"The POP3 server will never expire messages.\");\n\t\t\t\t}\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.LoginDelay))\n\t\t\t\t\tConsole.WriteLine (\"The minimum number of seconds between login attempts is {0}.\", client.LoginDelay);\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.Pipelining))\n\t\t\t\t\tConsole.WriteLine (\"The POP3 server can pipeline commands, so using client.GetMessages() will be faster.\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.Top))\n\t\t\t\t\tConsole.WriteLine (\"The POP3 server supports the TOP command, so it's possible to download message headers.\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.UIDL))\n\t\t\t\t\tConsole.WriteLine (\"The POP3 server supports the UIDL command which means we can track messages by UID.\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DownloadMessages\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tclient.Connect (\"pop.gmail.com\", 995, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tfor (int i = 0; i < client.Count; i++) {\n\t\t\t\t\tvar message = client.GetMessage (i);\n\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.msg\", i));\n\n\t\t\t\t\t// mark the message for deletion\n\t\t\t\t\tclient.DeleteMessage (i);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region BatchDownloadMessages\n\t\tpublic static void DownloadMessages ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tclient.Connect (\"pop.gmail.com\", 995, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tvar messages = client.DownloadMessages (0, count);\n\n\t\t\t\tforeach (var message in messages) {\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.msg\", i));\n\t\t\t\t}\n\n\t\t\t\tclient.DeleteMessages (0, count);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DownloadNewMessages\n\t\tpublic static void DownloadNewMessages (HashSet<string> previouslyDownloadedUids)\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tclient.Connect (\"pop.gmail.com\", 995, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tif (!client.Capabilities.HasFlag (Pop3Capabilities.UIDL))\n\t\t\t\t\tthrow new Exception (\"The POP3 server does not support UIDs!\");\n\n\t\t\t\tvar uids = client.GetMessageUids ();\n\n\t\t\t\tfor (int i = 0; i < client.Count; i++) {\n\t\t\t\t\t// check that we haven't already downloaded this message\n\t\t\t\t\t// in a previous session\n\t\t\t\t\tif (previouslyDownloadedUids.Contains (uids[i]))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tvar message = client.GetMessage (i);\n\n\t\t\t\t\t// write the message to a file\n\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.msg\", uids[i]));\n\n\t\t\t\t\t// add the message uid to our list of downloaded uids\n\t\t\t\t\tpreviouslyDownloadedUids.Add (uids[i]);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region ExceptionHandling\n\t\tpublic static void DownloadNewMessages (HashSet<string> previouslyDownloadedUids)\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tIList<string> uids = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"pop.gmail.com\", 995, SecureSocketOptions.SslOnConnect);\n\t\t\t\t} catch (Pop3CommandException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Error trying to connect: {0}\", ex.Message);\n\t\t\t\t\tConsole.WriteLine (\"\\tStatusText: {0}\", ex.StatusText);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (Pop3ProtocolException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Protocol error while trying to connect: {0}\", ex.Message);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (AuthenticationException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Invalid user name or password.\");\n\t\t\t\t\treturn;\n\t\t\t\t} catch (Pop3CommandException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Error trying to authenticate: {0}\", ex.Message);\n\t\t\t\t\tConsole.WriteLine (\"\\tStatusText: {0}\", ex.StatusText);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (Pop3ProtocolException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Protocol error while trying to authenticate: {0}\", ex.Message);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// for the sake of this example, let's assume GMail supports the UIDL extension\n\t\t\t\tif (client.Capabilities.HasFlag (Pop3Capabilities.UIDL)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tuids = client.GetMessageUids ();\n\t\t\t\t\t} catch (Pop3CommandException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Error trying to get the list of uids: {0}\", ex.Message);\n\t\t\t\t\t\tConsole.WriteLine (\"\\tStatusText: {0}\", ex.StatusText);\n\n\t\t\t\t\t\t// we'll continue on leaving uids set to null...\n\t\t\t\t\t} catch (Pop3ProtocolException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Protocol error while trying to authenticate: {0}\", ex.Message);\n\n\t\t\t\t\t\t// Pop3ProtocolExceptions often cause the connection to drop\n\t\t\t\t\t\tif (!client.IsConnected)\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < client.Count; i++) {\n\t\t\t\t\tif (uids != null && previouslyDownloadedUids.Contains (uids[i])) {\n\t\t\t\t\t\t// we must have downloaded this message in a previous session\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// download the message at the specified index\n\t\t\t\t\t\tvar message = client.GetMessage (i);\n\n\t\t\t\t\t\t// write the message to a file\n\t\t\t\t\t\tif (uids != null) {\n\t\t\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.msg\", uids[i]));\n\n\t\t\t\t\t\t\t// keep track of our downloaded message uids so we can skip downloading them next time\n\t\t\t\t\t\t\tpreviouslyDownloadedUids.Add (uids[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmessage.WriteTo (string.Format (\"{0}.msg\", i));\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (Pop3CommandException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Error downloading message {0}: {1}\", i, ex.Message);\n\t\t\t\t\t\tConsole.WriteLine (\"\\tStatusText: {0}\", ex.StatusText);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} catch (Pop3ProtocolException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Protocol error while sending message {0}: {1}\", i, ex.Message);\n\t\t\t\t\t\t// most likely the connection has been dropped\n\t\t\t\t\t\tif (!client.IsConnected)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (client.IsConnected) {\n\t\t\t\t\t// if we do not disconnect cleanly, then the messages won't actually get deleted\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SslConnectionInformation\n\t\tpublic static void PrintSslConnectionInfo (string host, int port)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (host, port, SecureSocketOptions.Auto);\n\n\t\t\t\tConsole.WriteLine ($\"Negotiated the following SSL options with {host}:\");\n\t\t\t\tConsole.WriteLine ($\"        Protocol Version: {client.SslProtocol}\");\n\t\t\t\tConsole.WriteLine ($\"        Cipher Algorithm: {client.SslCipherAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"         Cipher Strength: {client.SslCipherStrength}\");\n\t\t\t\tConsole.WriteLine ($\"          Hash Algorithm: {client.SslHashAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"           Hash Strength: {client.SslHashStrength}\");\n\t\t\t\tConsole.WriteLine ($\"  Key-Exchange Algorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"   Key-Exchange Strength: {client.SslKeyExchangeStrength}\");\n\n\t\t\t\t// Example Log:\n\t\t\t\t//\n\t\t\t\t// Negotiated the following SSL options with pop.gmail.com:\n\t\t\t\t//         Protocol Version: Tls12\n\t\t\t\t//         Cipher Algorithm: Aes128\n\t\t\t\t//          Cipher Strength: 128\n\t\t\t\t//           Hash Algorithm: Sha256\n\t\t\t\t//            Hash Strength: 0\n\t\t\t\t//   Key-Exchange Algorithm: 44550\n\t\t\t\t//    Key-Exchange Strength: 255\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/ProxyExamples.cs",
    "content": "//\n// ProxyExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Smtp;\nusing MailKit.Net.Pop3;\nusing MailKit.Net.Imap;\nusing MailKit.Net.Proxy;\n\nnamespace MailKit.Examples {\n\tpublic static class ProxyExamples\n\t{\n\t\t#region ProxyClient\n\t\tpublic static void SendMessageViaProxy (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.ProxyClient = new Socks5Proxy (\"socks5.proxy.com\", 1080, new NetworkCredentials (\"proxyUserName\", \"proxyPassword\"));\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Send (message);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/RecursivelyTraverse.cs",
    "content": "﻿static void HandleMimeEntity (MimeEntity entity)\n{\n\tvar multipart = entity as Multipart;\n\n\tif (multipart != null) {\n\t\tfor (int i = 0; i < multipart.Count; i++)\n\t\t\tHandleMimeEntity (multipart[i]);\n\t\treturn;\n\t}\n\n\tvar rfc822 = entity as MessagePart;\n\n\tif (rfc822 != null) {\n\t\tvar message = rfc822.Message;\n\n\t\tHandleMimeEntity (message.Body);\n\t\treturn;\n\t}\n\n\tvar part = (MimePart) entity;\n\n    // do something with the MimePart, such as save content to disk\n}"
  },
  {
    "path": "Documentation/Examples/SMimeExamples.cs",
    "content": "﻿using System;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnamespace Examples\n{\n\t#region MySecureMimeContext\n\n\tpublic class MySecureMimeContext : DefaultSecureMimeContext\n\t{\n\t\tpublic MySecureMimeContext ()\n\t\t\t: base (OpenDatabase (\"C:\\\\wherever\\\\certdb.sqlite\"))\n\t\t{\n\t\t}\n\n\t\tstatic IX509CertificateDatabase OpenDatabase (string fileName)\n\t\t{\n\t\t\tvar builder = new SQLiteConnectionStringBuilder ();\n\t\t\tbuilder.DateTimeFormat = SQLiteDateFormats.Ticks;\n\t\t\tbuilder.DataSource = fileName;\n\n\t\t\tif (!File.Exists (fileName))\n\t\t\t\tSQLiteConnection.CreateFile (fileName);\n\n\t\t\tvar sqlite = new SQLiteConnection (builder.ConnectionString);\n\t\t\tsqlite.Open ();\n\n\t\t\treturn new SqliteCertificateDatabase (sqlite, \"password\");\n\t\t}\n\t}\n\n\t#endregion\n\n\tpublic class SMimeExamples\n\t{\n\t\tpublic void RegisterMySecureMimeContext ()\n\t\t{\n\t\t\t#region RegisterCustomContext\n\t\t\t// Note: by registering our custom context it becomes the default S/MIME context\n\t\t\t// instantiated by MimeKit when methods such as Encrypt(), Decrypt(), Sign(), and\n\t\t\t// Verify() are used without an explicit context.\n\t\t\tCryptographyContext.Register (typeof (MySecureMimeContext));\n\t\t\t#endregion\n\t\t}\n\n\t\t#region Encrypt\n\t\tpublic void Encrypt (MimeMessage message)\n\t\t{\n\t\t\t// encrypt our message body using our custom S/MIME cryptography context\n\t\t\tusing (var ctx = new MySecureMimeContext ()) {\n\t\t\t\t// Note: this assumes that each of the recipients has an S/MIME certificate\n\t\t\t\t// with an X.509 Subject Email identifier that matches their email address.\n\t\t\t\t//\n\t\t\t\t// If this is not the case, you can use SecureMailboxAddresses instead of\n\t\t\t\t// normal MailboxAddresses which would allow you to specify the fingerprint\n\t\t\t\t// of their certificates. You could also choose to use one of the Encrypt()\n\t\t\t\t// overloads that take a list of CmsRecipients, instead.\n\t\t\t\tmessage.Body = ApplicationPkcs7Mime.Encrypt (ctx, message.To.Mailboxes, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Decrypt\n\t\tpublic MimeEntity Decrypt (MimeMessage message)\n\t\t{\n\t\t\tvar pkcs7 = message.Body as ApplicationPkcs7Mime;\n\n\t\t\tif (pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.EnvelopedData) {\n\t\t\t\t// the top-level MIME part of the message is encrypted using S/MIME\n\t\t\t\treturn pkcs7.Decrypt ();\n\t\t\t} else {\n\t\t\t\t// the top-level MIME part is not encrypted\n\t\t\t\treturn message.Body;\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region MultipartSign\n\t\tpublic void MultipartSign (MimeMessage message)\n\t\t{\n\t\t\t// digitally sign our message body using our custom S/MIME cryptography context\n\t\t\tusing (var ctx = new MySecureMimeContext ()) {\n\t\t\t\t// Note: this assumes that the Sender address has an S/MIME signing certificate\n\t\t\t\t// and private key with an X.509 Subject Email identifier that matches the\n\t\t\t\t// sender's email address.\n\t\t\t\tvar sender = message.From.Mailboxes.FirstOrDefault ();\n\n\t\t\t\tmessage.Body = MultipartSigned.Create (ctx, sender, DigestAlgorithm.Sha1, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region MultipartSignWithKey\n\t\tpublic void MultipartSign (MimeMessage message, X509Certificate2 certificate)\n\t\t{\n\t\t\t// digitally sign our message body using our custom S/MIME cryptography context\n\t\t\tusing (var ctx = new MySecureMimeContext ()) {\n\t\t\t\tvar signer = new CmsSigner (certificate) {\n\t\t\t\t\tDigestAlgorithm = DigestAlgorithm.Sha1\n\t\t\t\t};\n\n\t\t\t\tmessage.Body = MultipartSigned.Create (ctx, signer, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region Pkcs7Sign\n\t\tpublic void Pkcs7Sign (MimeMessage message)\n\t\t{\n\t\t\t// digitally sign our message body using our custom S/MIME cryptography context\n\t\t\tusing (var ctx = new MySecureMimeContext ()) {\n\t\t\t\t// Note: this assumes that the Sender address has an S/MIME signing certificate\n\t\t\t\t// and private key with an X.509 Subject Email identifier that matches the\n\t\t\t\t// sender's email address.\n\t\t\t\tvar sender = message.From.Mailboxes.FirstOrDefault ();\n\n\t\t\t\tmessage.Body = ApplicationPkcs7Mime.Sign (ctx, sender, DigestAlgorithm.Sha1, message.Body);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region VerifyMultipartSigned\n\t\tpublic void VerifyMultipartSigned (MimeMessage message)\n\t\t{\n\t\t\tif (message.Body is MultipartSigned) {\n\t\t\t\tvar signed = (MultipartSigned) message.Body;\n\n\t\t\t\tforeach (var signature in signed.Verify ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbool valid = signature.Verify ();\n\n\t\t\t\t\t\t// If valid is true, then it signifies that the signed content\n\t\t\t\t\t\t// has not been modified since this particular signer signed the\n\t\t\t\t\t\t// content.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// However, if it is false, then it indicates that the signed\n\t\t\t\t\t\t// content has been modified.\n\t\t\t\t\t} catch (DigitalSignatureVerifyException) {\n\t\t\t\t\t\t// There was an error verifying the signature.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region VerifyPkcs7\n\t\tpublic void VerifyPkcs7 (MimeMessage message)\n\t\t{\n\t\t\tvar pkcs7 = message.Body as ApplicationPkcs7Mime;\n\n\t\t\tif (pkcs7 != null && pkcs7.SecureMimeType == SecureMimeType.SignedData) {\n\t\t\t\t// extract the original content and get a list of signatures\n\t\t\t\tMimeEntity original;\n\n\t\t\t\t// Note: if you are rendering the message, you'll want to render the\n\t\t\t\t// original mime part rather than the application/pkcs7-mime part.\n\t\t\t\tforeach (var signature in pkcs7.Verify (out original)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbool valid = signature.Verify ();\n\n\t\t\t\t\t\t// If valid is true, then it signifies that the signed content\n\t\t\t\t\t\t// has not been modified since this particular signer signed the\n\t\t\t\t\t\t// content.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// However, if it is false, then it indicates that the signed\n\t\t\t\t\t\t// content has been modified.\n\t\t\t\t\t} catch (DigitalSignatureVerifyException) {\n\t\t\t\t\t\t// There was an error verifying the signature.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/SmtpExamples.cs",
    "content": "﻿//\n// SmtpExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Smtp;\n\nnamespace MailKit.Examples {\n\tpublic static class SmtpExamples\n\t{\n\t\t#region SaveToPickupDirectory\n\t\tpublic static void SaveToPickupDirectory (MimeMessage message, string pickupDirectory)\n\t\t{\n\t\t\tdo {\n\t\t\t\t// Generate a random file name to save the message to.\n\t\t\t\tvar path = Path.Combine (pickupDirectory, Guid.NewGuid ().ToString () + \".eml\");\n\t\t\t\tStream stream;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Attempt to create the new file.\n\t\t\t\t\tstream = File.Open (path, FileMode.CreateNew);\n\t\t\t\t} catch (IOException) {\n\t\t\t\t\t// If the file already exists, try again with a new Guid.\n\t\t\t\t\tif (File.Exists (path))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// Otherwise, fail immediately since it probably means that there is\n\t\t\t\t\t// no graceful way to recover from this error.\n\t\t\t\t\tthrow;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (stream) {\n\t\t\t\t\t\t// IIS pickup directories expect the message to be \"byte-stuffed\"\n\t\t\t\t\t\t// which means that lines beginning with \".\" need to be escaped\n\t\t\t\t\t\t// by adding an extra \".\" to the beginning of the line.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// Use an SmtpDataFilter to \"byte-stuff\" the message as it is written\n\t\t\t\t\t\t// to the file stream. This is the same process that an SmtpClient\n\t\t\t\t\t\t// would use when sending the message in a `DATA` command.\n\t\t\t\t\t\tusing (var filtered = new FilteredStream (stream)) {\n\t\t\t\t\t\t\tfiltered.Add (new SmtpDataFilter ());\n\n\t\t\t\t\t\t\t// Make sure to write the message in DOS (<CR><LF>) format.\n\t\t\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\t\t\t\t\tmessage.WriteTo (options, filtered);\n\t\t\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// An exception here probably means that the disk is full.\n\t\t\t\t\t//\n\t\t\t\t\t// Delete the file that was created above so that incomplete files are not\n\t\t\t\t\t// left behind for IIS to send accidentally.\n\t\t\t\t\tFile.Delete (path);\n\t\t\t\t\tthrow;\n\t\t\t\t}\n\t\t\t} while (true);\n\t\t}\n\t\t#endregion\n\n\t\t#region LoadFromPickupDirectory\n\t\tpublic static MimeMessage LoadFromPickupDirectory (string fileName)\n\t\t{\n\t\t\tusing (var stream = File.OpenRead (fileName)) {\n\t\t\t\t// IIS pickup directories store messages that have been \"byte-stuffed\"\n\t\t\t\t// which means that lines beginning with \".\" have been escaped by\n\t\t\t\t// adding an extra \".\" to the beginning of the line.\n\t\t\t\t//\n\t\t\t\t// Use an SmtpDataFilter to decode the message as it is loaded from\n\t\t\t\t// the file stream. This is the reverse process that an SmtpClient\n\t\t\t\t// would use when sending the message in a `DATA` command.\n\t\t\t\tusing (var filtered = new FilteredStream (stream)) {\n\t\t\t\t\tfiltered.Add (new SmtpDataFilter (decode: true));\n\n\t\t\t\t\treturn MimeMessage.Load (filtered);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region ProtocolLogger\n\t\tpublic static void SendMessage (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (\"smtp.log\"))) {\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Send (message);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\n\t\t\t// Example log:\n\t\t\t//\n\t\t\t// Connected to smtps://smtp.gmail.com:465/\n\t\t\t// S: 220 smtp.gmail.com ESMTP w81sm22057166qkg.43 - gsmtp\n\t\t\t// C: EHLO [192.168.1.220]\n\t\t\t// S: 250-smtp.gmail.com at your service, [192.168.1.220]\n\t\t\t// S: 250-SIZE 35882577\n\t\t\t// S: 250-8BITMIME\n\t\t\t// S: 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH\n\t\t\t// S: 250-ENHANCEDSTATUSCODES\n\t\t\t// S: 250-PIPELINING\n\t\t\t// S: 250-CHUNKING\n\t\t\t// S: 250 SMTPUTF8\n\t\t\t// C: AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\n\t\t\t// S: 235 2.7.0 Accepted\n\t\t\t// C: MAIL FROM:<from.addr@gmail.com>\n\t\t\t// C: RCPT TO:<to.addr@gmail.com>\n\t\t\t// S: 250 2.1.0 OK w81sm22057166qkg.43 - gsmtp\n\t\t\t// S: 250 2.1.5 OK w81sm22057166qkg.43 - gsmtp\n\t\t\t// C: DATA\n\t\t\t// S: 354  Go ahead w81sm22057166qkg.43 - gsmtp\n\t\t\t// C: From: \"LastName, FirstName\" <from.addr@gmail.com>\n\t\t\t// C: Date: Thu, 27 Dec 2018 10:55:18 -0500\n\t\t\t// C: Subject: This is a test message\n\t\t\t// C: Message-Id: <C7GVXWE3C6U4.7ZQ0K9OUHTDP1@MADUNLA-SP4.northamerica.corp.microsoft.com>\n\t\t\t// C: To: \"LastName, FirstName\" <to.addr@gmail.com>\n\t\t\t// C: MIME-Version: 1.0\n\t\t\t// C: Content-Type: multipart/alternative; boundary=\"=-CToJI+AD2gS6z+fFlzDvhg==\"\n\t\t\t// C: \n\t\t\t// C: --=-CToJI+AD2gS6z+fFlzDvhg==\n\t\t\t// C: Content-Type: text/plain; charset=utf-8\n\t\t\t// C: Content-Transfer-Encoding: quoted-printable\n\t\t\t// C: \n\t\t\t// C: This is the text/plain message body.\n\t\t\t// C: --=-CToJI+AD2gS6z+fFlzDvhg==\n\t\t\t// C: Content-Type: text/html; charset=utf-8\n\t\t\t// C: Content-Transfer-Encoding: quoted-printable\n\t\t\t// C: \n\t\t\t// C: <html><body><center>This is the <b>text/html</b> message body.</center></body></html>\n\t\t\t// C: --=-CToJI+AD2gS6z+fFlzDvhg==--\n\t\t\t// C: \n\t\t\t// C: .\n\t\t\t// S: 250 2.0.0 OK 1545926120 w81sm22057166qkg.43 - gsmtp\n\t\t\t// C: QUIT\n\t\t\t// S: 221 2.0.0 closing connection w81sm22057166qkg.43 - gsmtp\n\t\t}\n\t\t#endregion\n\n\t\t#region Capabilities\n\t\tpublic static void PrintCapabilities ()\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.Authentication)) {\n\t\t\t\t\tvar mechanisms = string.Join (\", \", client.AuthenticationMechanisms);\n\t\t\t\t\tConsole.WriteLine (\"The SMTP server supports the following SASL mechanisms: {0}\", mechanisms);\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t}\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.Size))\n\t\t\t\t\tConsole.WriteLine (\"The SMTP server has a size restriction on messages: {0}.\", client.MaxSize);\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.Dsn))\n\t\t\t\t\tConsole.WriteLine (\"The SMTP server supports delivery-status notifications.\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime))\n\t\t\t\t\tConsole.WriteLine (\"The SMTP server supports Content-Transfer-Encoding: 8bit\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.BinaryMime))\n\t\t\t\t\tConsole.WriteLine (\"The SMTP server supports Content-Transfer-Encoding: binary\");\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.UTF8))\n\t\t\t\t\tConsole.WriteLine (\"The SMTP server supports UTF-8 in message headers.\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region ExceptionHandling\n\t\tpublic static void SendMessage (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Error trying to connect: {0}\", ex.Message);\n\t\t\t\t\tConsole.WriteLine (\"\\tStatusCode: {0}\", ex.StatusCode);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (SmtpProtocolException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Protocol error while trying to connect: {0}\", ex.Message);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Note: Not all SMTP servers support authentication, but GMail does.\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.Authentication)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (AuthenticationException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Invalid user name or password.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Error trying to authenticate: {0}\", ex.Message);\n\t\t\t\t\t\tConsole.WriteLine (\"\\tStatusCode: {0}\", ex.StatusCode);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (SmtpProtocolException ex) {\n\t\t\t\t\t\tConsole.WriteLine (\"Protocol error while trying to authenticate: {0}\", ex.Message);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Send (message);\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Error sending message: {0}\", ex.Message);\n\t\t\t\t\tConsole.WriteLine (\"\\tStatusCode: {0}\", ex.StatusCode);\n\n\t\t\t\t\tswitch (ex.ErrorCode) {\n\t\t\t\t\tcase SmtpErrorCode.RecipientNotAccepted:\n\t\t\t\t\t\tConsole.WriteLine (\"\\tRecipient not accepted: {0}\", ex.Mailbox);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SmtpErrorCode.SenderNotAccepted:\n\t\t\t\t\t\tConsole.WriteLine (\"\\tSender not accepted: {0}\", ex.Mailbox);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SmtpErrorCode.MessageNotAccepted:\n\t\t\t\t\t\tConsole.WriteLine (\"\\tMessage not accepted.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (SmtpProtocolException ex) {\n\t\t\t\t\tConsole.WriteLine (\"Protocol error while sending message: {0}\", ex.Message);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SendMessage\n\t\tpublic static void SendMessage (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Send (message);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SendMessageUri\n\t\tpublic static void SendMessage (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t// Note: since GMail requires SSL at connection time, use the \"smtps\"\n\t\t\t\t// protocol instead of \"smtp\".\n\t\t\t\tvar uri = new Uri (\"smtps://smtp.gmail.com:465\");\n\n\t\t\t\tclient.Connect (uri);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tclient.Send (message);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SendMessageWithOptions\n\t\tpublic static void SendMessageWithOptions (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\n\t\t\t\tif (client.Capabilities.HasFlag (SmtpCapabilities.UTF8))\n\t\t\t\t\toptions.International = true;\n\n\t\t\t\tclient.Send (options, message);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SendMessages\n\t\tpublic static void SendMessages (IList<MimeMessage> messages)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tforeach (var message in messages) {\n\t\t\t\t\tclient.Send (message);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region VerifyAddress\n\t\tpublic static void VerifyAddress ()\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.mail-server.com\", 465, SecureSocketOptions.SslOnConnect);\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar verified = client.Verify (\"smith\");\n\t\t\t\t\tConsole.WriteLine ($\"'smith' was resolved the the following mailbox: {verified}\");\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tConsole.WriteLine ($\"'smith' is not a valid address: {ex.Message}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region ExpandAlias\n\t\tpublic static void ExpandAlias (string alias)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.mail-server.com\", 465, SecureSocketOptions.SslOnConnect);\n\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\n\t\t\t\tvar expanded = client.Expand (alias);\n\n\t\t\t\tConsole.WriteLine ($\"Expanding the alias '{alias}' results in the following list of addresses:\");\n\t\t\t\tforeach (var mailbox in expanded.Mailboxes)\n\t\t\t\t\tConsole.WriteLine ($\"* {mailbox}\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region DeliveryStatusNotification\n\t\tpublic class DSNSmtpClient : SmtpClient\n\t\t{\n\t\t\tpublic DSNSmtpClient ()\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Get the envelope identifier to be used with delivery status notifications.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// <para>The envelope identifier, if non-empty, is useful in determining which message\n\t\t\t/// a delivery status notification was issued for.</para>\n\t\t\t/// <para>The envelope identifier should be unique and may be up to 100 characters in\n\t\t\t/// length, but must consist only of printable ASCII characters and no white space.</para>\n\t\t\t/// <para>For more information, see rfc3461, section 4.4.</para>\n\t\t\t/// </remarks>\n\t\t\t/// <returns>The envelope identifier.</returns>\n\t\t\t/// <param name=\"message\">The message.</param>\n\t\t\tprotected override string GetEnvelopeId (MimeMessage message)\n\t\t\t{\n\t\t\t\t// Since you will want to be able to map whatever identifier you return here to the\n\t\t\t\t// message, the obvious identifier to use is probably the Message-Id value.\n\t\t\t\treturn message.MessageId;\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Get the types of delivery status notification desired for the specified recipient mailbox.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Gets the types of delivery status notification desired for the specified recipient mailbox.\n\t\t\t/// </remarks>\n\t\t\t/// <returns>The desired delivery status notification type.</returns>\n\t\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t\t/// <param name=\"mailbox\">The mailbox.</param>\n\t\t\tprotected override DeliveryStatusNotification? GetDeliveryStatusNotifications (MimeMessage message, MailboxAddress mailbox)\n\t\t\t{\n\t\t\t\t// In this example, we only want to be notified of failures to deliver to a mailbox.\n\t\t\t\t// If you also want to be notified of delays or successful deliveries, simply bitwise-or\n\t\t\t\t// whatever combination of flags you want to be notified about.\n\t\t\t\treturn DeliveryStatusNotification.Failure;\n\t\t\t}\n\t\t}\n\t\t#endregion\n\n\t\t#region SslConnectionInformation\n\t\tpublic static void PrintSslConnectionInfo (string host, int port)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (host, port, SecureSocketOptions.Auto);\n\n\t\t\t\tConsole.WriteLine ($\"Negotiated the following SSL options with {host}:\");\n\t\t\t\tConsole.WriteLine ($\"        Protocol Version: {client.SslProtocol}\");\n\t\t\t\tConsole.WriteLine ($\"        Cipher Algorithm: {client.SslCipherAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"         Cipher Strength: {client.SslCipherStrength}\");\n\t\t\t\tConsole.WriteLine ($\"          Hash Algorithm: {client.SslHashAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"           Hash Strength: {client.SslHashStrength}\");\n\t\t\t\tConsole.WriteLine ($\"  Key-Exchange Algorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\tConsole.WriteLine ($\"   Key-Exchange Strength: {client.SslKeyExchangeStrength}\");\n\n\t\t\t\t// Example Log:\n\t\t\t\t//\n\t\t\t\t// Negotiated the following SSL options with smtp.gmail.com:\n\t\t\t\t//         Protocol Version: Tls12\n\t\t\t\t//         Cipher Algorithm: Aes128\n\t\t\t\t//          Cipher Strength: 128\n\t\t\t\t//           Hash Algorithm: Sha256\n\t\t\t\t//            Hash Strength: 0\n\t\t\t\t//   Key-Exchange Algorithm: 44550\n\t\t\t\t//    Key-Exchange Strength: 255\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/SslCertificateValidation.cs",
    "content": "﻿using System;\nusing System.Net.Security;\nusing System.Collections.Generic;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Smtp;\n\nnamespace MailKit.Examples\n{\n\tpublic static class SslCertificateValidationExample\n\t{\n\t\tpublic static void SendMessage (MimeMessage message)\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t// Set our custom SSL certificate validation callback.\n\t\t\t\tclient.ServerCertificateValidationCallback = MySslCertificateValidationCallback;\n\n\t\t\t\t// Connect to smtp.gmail.com on the SSL-wrapped port.\n\t\t\t\tclient.Connect (\"smtp.gmail.com\", 465, SecureSocketOptions.SslOnConnect);\n\n\t\t\t\t// Authenticate with our username and password.\n\t\t\t\tclient.Authenticate (\"username@gmail.com\", \"password\");\n\n\t\t\t\t// Send our message.\n\t\t\t\tclient.Send (message);\n\n\t\t\t\t// Disconnect cleanly from the server.\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic bool MySslCertificateValidationCallback (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\t// If there are no errors, then everything went smoothly.\n\t\t\tif (sslPolicyErrors == SslPolicyErrors.None)\n\t\t\t\treturn true;\n\n\t\t\t// Note: MailKit will always pass the host name string as the `sender` argument.\n\t\t\tvar host = (string) sender;\n\n\t\t\tif ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) != 0) {\n\t\t\t\t// This means that the remote certificate is unavailable. Notify the user and return false.\n\t\t\t\tConsole.WriteLine (\"The SSL certificate was not available for {0}\", host);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) != 0) {\n\t\t\t\t// This means that the server's SSL certificate did not match the host name that we are trying to connect to.\n\t\t\t\tvar certificate2 = certificate as X509Certificate2;\n\t\t\t\tvar cn = certificate2 != null ? certificate2.GetNameInfo (X509NameType.SimpleName, false) : certificate.Subject;\n\n\t\t\t\tConsole.WriteLine (\"The Common Name for the SSL certificate did not match {0}. Instead, it was {1}.\", host, cn);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// The only other errors left are chain errors.\n\t\t\tConsole.WriteLine (\"The SSL certificate for the server could not be validated for the following reasons:\");\n\n\t\t\t// The first element's certificate will be the server's SSL certificate (and will match the `certificate` argument)\n\t\t\t// while the last element in the chain will typically either be the Root Certificate Authority's certificate -or- it\n\t\t\t// will be a non-authoritative self-signed certificate that the server admin created. \n\t\t\tforeach (var element in chain.ChainElements) {\n\t\t\t\t// Each element in the chain will have its own status list. If the status list is empty, it means that the\n\t\t\t\t// certificate itself did not contain any errors.\n\t\t\t\tif (element.ChainElementStatus.Length == 0)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tConsole.WriteLine (\"\\u2022 {0}\", element.Certificate.Subject);\n\t\t\t\tforeach (var error in element.ChainElementStatus) {\n\t\t\t\t\t// `error.StatusInformation` contains a human-readable error string while `error.Status` is the corresponding enum value.\n\t\t\t\t\tConsole.WriteLine (\"\\t\\u2022 {0}\", error.StatusInformation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Documentation/Examples/VerifySignature.cs",
    "content": "﻿if (entity is MultipartSigned) {\n    var signed = (MultipartSigned) entity;\n\n    foreach (var signature in signed.Verify ()) {\n        try {\n            bool valid = signature.Verify ();\n\n            // If valid is true, then it signifies that the signed content has not been\n            // modified since this particular signer signed the content.\n            //\n            // However, if it is false, then it indicates that the signed content has\n            // been modified.\n        } catch (DigitalSignatureVerifyException) {\n            // There was an error verifying the signature.\n        }\n    }\n}\n"
  },
  {
    "path": "ExchangeOAuth2.md",
    "content": "# Using OAuth2 With Exchange (IMAP, POP3 or SMTP)\n\n## Quick Index\n\n* [Registering Your Application with Microsoft](#registering-your-application-with-microsoft)\n* [Configuring the Correct API Permissions for Your Application](#configuring-the-correct-api-permissions-for-your-application)\n* Desktop and Mobile Applications\n  * [Authenticating a Desktop or Mobile Application with OAuth2](#authenticating-a-desktop-or-mobile-application-with-oauth2)\n* Web Applications\n  * [Authenticating a Web Application with OAuth2](#authenticating-a-web-application-with-oauth2)\n* Web Services\n  * [Registering Service Principals for Your Web Service](#registering-service-principals-for-your-web-service)\n  * [Granting Permissions for Your Web Service](#granting-permissions-for-your-web-service)\n  * [Authenticating a Web Service with OAuth2](#authenticating-a-web-service-with-oauth2)\n* [Additional Resources](#additional-resources)\n\n## Registering Your Application with Microsoft\n\nWhether you are writing a Desktop, Mobile or Web Service application, the first thing you'll need to do is register your\napplication with Microsoft's Identity Platform. To do this, go to Microsoft's\n[Quickstart guide](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app)\nand follow the instructions.\n\n## Configuring the Correct API Permissions for Your Application\n\nThere are several different API permissions that you may want to configure depending on which protocols your application intends to use.\n\nFollow the instructions for [adding the POP, IMAP, and/or SMTP permissions to your Entra AD application](https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth#use-client-credentials-grant-flow-to-authenticate-smtp-imap-and-pop-connections).\n\n## Desktop and Mobile Applications\n\n### Authenticating a Desktop or Mobile Application with OAuth2\n\nNow that you have the **Client ID** and **Tenant ID** strings, you'll need to plug those values into\nyour application.\n\nThe following sample code uses the [Microsoft.Identity.Client](https://www.nuget.org/packages/Microsoft.Identity.Client/)\nnuget package for obtaining the access token which will be needed by MailKit to pass on to the Exchange\nserver.\n\n```csharp\nstatic async Task<AuthenticationResult> GetPublicClientOAuth2CredentialsAsync (string protocol, string emailAddress, CancellationToken cancellationToken = default)\n{\n    var options = new PublicClientApplicationOptions {\n        ClientId = \"Application (client) ID\",\n        TenantId = \"Directory (tenant) ID\",\n\n        // Use \"https://login.microsoftonline.com/common/oauth2/nativeclient\" for apps using\n        // embedded browsers or \"http://localhost\" for apps that use system browsers.\n        RedirectUri = \"https://login.microsoftonline.com/common/oauth2/nativeclient\"\n    };\n \n    var publicClientApplication = PublicClientApplicationBuilder\n        .CreateWithApplicationOptions (options)\n        .Build ();\n\n    string[] scopes;\n \n    if (protocol.Equals (\"IMAP\", StringComparison.OrdinalIgnoreCase)) {\n        scopes = new string[] {\n            \"email\",\n            \"offline_access\",\n            \"https://outlook.office.com/IMAP.AccessAsUser.All\"\n        };\n    } else if (protocol.Equals (\"POP\", StringComparison.OrdinalIgnoreCase)) {\n        scopes = new string[] {\n            \"email\",\n            \"offline_access\",\n            \"https://outlook.office.com/POP.AccessAsUser.All\"\n        };\n    } else {\n        scopes = new string[] {\n            \"email\",\n            \"offline_access\",\n            \"https://outlook.office.com/SMTP.Send\"\n        };\n    }\n\n    try {\n        // First, check the cache for an auth token.\n        return await publicClientApplication.AcquireTokenSilent (scopes, emailAddress).ExecuteAsync (cancellationToken);\n    } catch (MsalUiRequiredException) {\n        // If that fails, then try getting an auth token interactively.\n        return await publicClientApplication.AcquireTokenInteractive (scopes).WithLoginHint (emailAddress).ExecuteAsync (cancellationToken);\n    }\n}\n```\n\n#### IMAP (using PublicClientApplication)\n\n```csharp\nvar result = await GetPublicClientOAuth2CredentialsAsync (\"IMAP\", \"username@outlook.com\");\n\n// Note: We always use result.Account.Username instead of `Username` because the user may have selected an alternative account.\nvar oauth2 = new SaslMechanismOAuth2 (result.Account.Username, result.AccessToken);\n\nusing (var client = new ImapClient ()) {\n    await client.ConnectAsync (\"outlook.office365.com\", 993, SecureSocketOptions.SslOnConnect);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n```\n\n#### SMTP (using PublicClientApplication)\n\n```csharp\nvar result = await GetPublicClientOAuth2CredentialsAsync (\"SMTP\", \"username@outlook.com\");\n\n// Note: We always use result.Account.Username instead of `Username` because the user may have selected an alternative account.\nvar oauth2 = new SaslMechanismOAuth2 (result.Account.Username, result.AccessToken);\n\nusing (var client = new SmtpClient ()) {\n    await client.ConnectAsync (\"smtp.office365.com\", 587, SecureSocketOptions.StartTls);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n```\n\nNote: Once you've acquired an auth token using the interactive method above, you can avoid prompting the user\nif you cache the `result.Account` information and then silently reacquire auth tokens in the future using\nthe following code:\n\n```csharp\nvar result = await publicClientApplication.AcquireTokenSilent(scopes, account).ExecuteAsync(cancellationToken);\n```\n\nNote: for information on caching tokens, see Microsoft's documentation about how to implement a\n[cross-platform token cache](https://github.com/AzureAD/microsoft-authentication-extensions-for-dotnet/wiki/Cross-platform-Token-Cache).\n\n## Web Applications\n\n### Authenticating a Web Application with OAuth2\n\nUse this if you want to send/receive mail on behalf of a user.\n\n```csharp\n// Common Code\nusing Microsoft.Graph;\nusing Microsoft.Identity.Client;\nusing Microsoft.Kiota.Abstractions.Authentication;\n\npublic static class OAuthMicrosoft\n{\n    public static readonly string[] RegistrationScopes = new string[] {\n        \"offline_access\",\n        \"User.Read\",\n        \"Mail.Send\",\n        \"https://outlook.office.com/SMTP.Send\",\n        \"https://outlook.office.com/IMAP.AccessAsUser.All\",\n    };\n\n    public static readonly string[] SmtpScopes = new string[] {\n        \"email\",\n        \"offline_access\",\n        \"https://outlook.office.com/SMTP.Send\"\n    };\n\n    public static readonly string[] ImapScopes = new string[] {\n        \"email\",\n        \"offline_access\",\n        \"https://outlook.office.com/IMAP.AccessAsUser.All\",\n    };\n\n    public static IConfidentialClientApplication CreateConfidentialClient ()\n    {\n        var clientId = \"Application (client) ID\";\n        var tenantId = \"common\"; // common = anybody with microsoft account personal or organization; other options see https://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols#endpoints\n        var clientSecret = \"client secret\";\n\n        var redirectURL = \"https://example.com/oauth/microsoft/callback\";\n\n        var confidentialClientApplication = ConfidentialClientApplicationBuilder.Create (clientId)\n            .WithAuthority ($\"https://login.microsoftonline.com/{tenantId}/v2.0\")\n            .WithClientSecret (clientSecret)\n            .WithRedirectUri (redirectURL)\n            .Build ();\n\n        // You also need to configure an MSAL token cache. so that token are remembered.\n        return confidentialClientApplication;\n    }\n}\n```\n\n```csharp\n// Registration page - redirect user to Microsoft to get authorization \npublic async Task<IActionResult> OnPostAsync ()\n{\n    var client = OAuthMicrosoft.CreateConfidentialClient ();\n\n    // Note: When getting authorization, specify all of the scopes that your application will ever need (eg. SMTP /and/ IMAP).\n    // Later, when requesting an access token, you will only ask for the specific scopes that you need (e.g. SMTP).\n    var authurlbuilder = client.GetAuthorizationRequestUrl (OAuthMicrosoft.RegistrationScopes);\n    var authurl = await authurlbuilder.ExecuteAsync ();\n\n    return this.Redirect (authurl.ToString ());\n}\n\n// Callback page = https://example.com/oauth/microsoft/callback in this example\npublic async Task<IActionResult> OnGet ([FromQuery] string code)\n{\n    var confidentialClientApplication = OAuthMicrosoft.CreateConfidentialClient ();\n    var scopes = OAuthMicrosoft.SmtpScopes;\n\n    var auth = await confidentialClientApplication.AcquireTokenByAuthorizationCode (scopes, code).ExecuteAsync (); //this saves the token in msal cache\n\n    var ident = auth.Account.HomeAccountId.Identifier;\n    // Note: you will need to persist the ident to refer to later.\n}\n\n// Use the credentials\n\npublic async Task SendEmailAsync (string ident)\n{\n    var confidentialClientApplication = OAuthMicrosoft.CreateConfidentialClient ();\n    var account = await confidentialClientApplication.GetAccountAsync (ident);\n    var scopes = OAuthMicrosoft.SmtpScopes;\n\n    try {\n        var auth = await confidentialClientApplication.AcquireTokenSilent (scopes, account).ExecuteAsync ();\n\n        using (var client = new SmtpClient ()) {\n            await client.ConnectAsync (\"smtp-mail.outlook.com\", 587, SecureSocketOptions.StartTls);\n\n            var oauth2 = new SaslMechanismOAuth2 (auth.Account.Username, auth.AccessToken);\n\n            await client.AuthenticateAsync (oauth2);\n\n            var serverfeedback = await client.SendAsync (message);\n            await client.DisconnectAsync (true);\n        }\n    } catch (MsalUiRequiredException) {\n        throw new Exception (\"Need to get authorization again\");\n    }\n}\n\npublic async Task TestImapAsync (string ident)\n{\n    var confidentialClientApplication = OAuthMicrosoft.CreateConfidentialClient ();\n    var account = await confidentialClientApplication.GetAccountAsync (ident);\n    var scopes = OAuthMicrosoft.ImapScopes;\n\n    var auth = await confidentialClientApplication.AcquireTokenSilent (scopes, account).ExecuteAsync ();    \n\n    var oauth2 = new SaslMechanismOAuth2 (auth.Account.Username, auth.AccessToken);\n\n    using (var client = new ImapClient ()) {\n        await client.ConnectAsync (\"outlook.office365.com\", 993, SecureSocketOptions.SslOnConnect);\n        await client.AuthenticateAsync (oauth2);\n        await client.DisconnectAsync (true);\n    }\n}\n```\n\n## Web Services\n\n### Registering Service Principals for Your Web Service\n\nOnce your web service has been registered, the tenant admin will need to register your service principal.\n\nTo use the New-ServicePrincipal cmdlet, open an [Azure Powershell](https://learn.microsoft.com/en-us/powershell/azure/new-azureps-module-az?view=azps-10.2.0)\nterminal and install ExchangeOnlineManagement and connect to your tenant as shown below:\n\n```powershell\nInstall-Module -Name ExchangeOnlineManagement -allowprerelease\nImport-module ExchangeOnlineManagement \nConnect-ExchangeOnline -Organization <tenantId>\n```\n\nNext, register the Service Principal for your web service:\n\n```powershell\nNew-ServicePrincipal -AppId <APPLICATION_ID> -ObjectId <OBJECT_ID> [-Organization <ORGANIZATION_ID>]\n```\n\nNote: In the Azure portal, make sure you retrieve the Object ID from the Service Principal, under Enterprise Applications, and not the App Registration.\n\n### Granting Permissions for Your Web Service\n\nIn order to grant permissions for your web service to access an Office365 and/or Exchange account, you'll need to first get the\nService Principal ID registered in the previous step using the following command:\n\n```powershell\nGet-ServicePrincipal | fl\n```\n\nOnce you have the Service Principal ID for your web service, use the following command to add full\nmailbox permissions for the email account that your web service will be accessing:\n\n```powershelllo;.k,;\nAdd-MailboxPermission -Identity \"john.smith@example.com\" -User \n<SERVICE_PRINCIPAL_ID> -AccessRights FullAccess\n```\n\n### Authenticating a Web Service with OAuth2\n\nNow that you have the **Client ID** and **Tenant ID** strings, you'll need to plug those values into\nyour application.\n\nThe following sample code uses the [Microsoft.Identity.Client](https://www.nuget.org/packages/Microsoft.Identity.Client/)\nnuget package for obtaining the access token which will be needed by MailKit to pass on to the Exchange\nserver.\n\n```csharp\nstatic async Task<AuthenticationResult> GetConfidentialClientOAuth2CredentialsAsync (string protocol, CancellationToken cancellationToken = default)\n{\n    var confidentialClientApplication = ConfidentialClientApplicationBuilder.Create (clientId)\n        .WithAuthority ($\"https://login.microsoftonline.com/{tenantId}/v2.0\")\n        .WithCertificate (certificate) // or .WithClientSecret (clientSecret)\n        .Build ();\n\n    string[] scopes;\n\n    if (protocol.Equals (\"SMTP\", StringComparison.OrdinalIgnoreCase)) {\n        scopes = new string[] {\n            // For SMTP, use the following scope\n            \"https://outlook.office365.com/.default\"\n        };\n    } else {\n        scopes = new string[] {\n            // For IMAP and POP3, use the following scope\n            \"https://ps.outlook.com/.default\"\n        };\n    }\n\n    return await confidentialClientApplication.AcquireTokenForClient (scopes).ExecuteAsync (cancellationToken);\n}\n```\n\n#### IMAP (using ConfidentialClientApplication)\n\n```csharp\nvar result = await GetConfidentialClientOAuth2CredentialsAsync (\"IMAP\");\nvar oauth2 = new SaslMechanismOAuth2 (\"username@outlook.com\", result.AccessToken);\n\nusing (var client = new ImapClient ()) {\n    await client.ConnectAsync (\"outlook.office365.com\", 993, SecureSocketOptions.SslOnConnect);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n```\n\n#### SMTP (using ConfidentialClientApplication)\n\n```csharp\nvar result = await GetConfidentialClientOAuth2CredentialsAsync (\"SMTP\");\nvar oauth2 = new SaslMechanismOAuth2 (\"username@outlook.com\", result.AccessToken);\n\nusing (var client = new SmtpClient ()) {\n    await client.ConnectAsync (\"smtp.office365.com\", 587, SecureSocketOptions.StartTls);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n```\n\n## Additional Resources\n\nFor more information, check out the [Microsoft.Identity.Client](https://docs.microsoft.com/en-us/dotnet/api/microsoft.identity.client?view=azure-dotnet)\ndocumentation.\n"
  },
  {
    "path": "FAQ.md",
    "content": "# Frequently Asked Questions\n\n## Question Index\n\n### General\n\n* [Are MimeKit and MailKit completely free? Can I use them in my proprietary product(s)?](#completely-free)\n* [Why do I get `NotSupportedException: No data is available for encoding ######. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.`?](#register-provider)\n* [Why does text show up garbled in my ASP.NET Core / .NET Core / .NET 5+ app?](#garbled-text)\n* [Why do I get a `TypeLoadException` when I try to create a new MimeMessage?](#type-load-exception)\n* [Why do I get `\"MailKit.Security.SslHandshakeException: An error occurred while attempting to establish an SSL or TLS connection.\"` when I try to Connect?](#ssl-handshake-exception)\n* [How can I get a protocol log for IMAP, POP3, or SMTP to see what is going wrong?](#protocol-log)\n* [Why doesn't MailKit find some of my GMail POP3 or IMAP messages?](#gmail-hidden-messages)\n* [How can I access GMail using MailKit?](#gmail-access)\n* [How can I log in to a GMail account using OAuth 2.0?](#gmail-oauth2)\n\n### Messages\n\n* [How can I create a message with attachments?](#create-attachments)\n* [How can I get the main body of a message?](#message-body)\n* [How can I tell if a message has attachments?](#has-attachments)\n* [Why doesn't the `MimeMessage` class implement `ISerializable` so that I can serialize a message to disk and read it back later?](#serialize-message)\n* [How can I parse messages?](#load-messages)\n* [How can I save messages?](#save-messages)\n* [How can I save attachments?](#save-attachments)\n* [How can I get the email addresses in the From, To, and Cc headers?](#address-headers)\n* [Why do attachments with Unicode filenames appear as \"ATT0####.dat\" in Outlook?](#untitled-attachments)\n* [How can I decrypt PGP messages that are embedded in the main message text?](#decrypt-inline-pgp)\n* [How can I reply to a message?](#reply-message)\n* [How can I forward a message?](#forward-message)\n\n### ImapClient\n\n* [How can I get the number of unread messages in a folder?](#imap-unread-count)\n* [How can I search for messages delivered between two dates?](#imap-search-date-range)\n* [What does \"The ImapClient is currently busy processing a command.\" mean?](#imap-client-busy)\n* [Why do I get InvalidOperationException: \"The folder is not currently open.\"?](#imap-folder-not-open-exception)\n* [Why doesn't ImapFolder.MoveTo() move the message out of the source folder?](#imap-move-does-not-move)\n* [How can I mark messages as read using IMAP?](#imap-mark-as-read)\n* [How can I re-synchronize the cache for an IMAP folder?](#imap-folder-resync)\n* [How can I login using a shared mailbox in Office365?](#office365-shared-mailboxes)\n\n### SmtpClient\n\n* [Why doesn't the message show up in the \"Sent Mail\" folder after sending it?](#smtp-sent-folder)\n* [How can I send email to the SpecifiedPickupDirectory?](#smtp-specified-pickup-directory)\n* [How can I request a notification when the message is read by the user?](#smtp-request-read-receipt)\n* [How can I process a read receipt notification?](#smtp-process-read-receipt)\n\n## General\n\n### <a id=\"completely-free\">Q: Are MimeKit and MailKit completely free? Can I use them in my proprietary product(s)?</a>\n\nYes. MimeKit and MailKit are both completely free and open source. They are both covered under the\n[MIT](https://opensource.org/licenses/MIT) license.\n\n### <a name=\"register-provider\">Q: Why do I get `NotSupportedException: No data is available for encoding ######. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.`?</a>\n\nIn .NET Core, Microsoft decided to split out the non-Unicode text encodings into a separate NuGet package called\n[System.Text.Encoding.CodePages](https://www.nuget.org/packages/System.Text.Encoding.CodePages).\n\nMimeKit already pulls in a reference to this NuGet package, so you shouldn't need to add a reference to it in\nyour project. That said, you will still need to register the encoding provider. It is recommended that you add\nthe following line of code to your program initialization (e.g. the beginning of your program's Main() method):\n\n```csharp\nSystem.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);\n```\n\n### <a id=\"garbled-text\">Q: Why does text show up garbled in my ASP.NET Core / .NET Core / .NET 5+ app?</a>\n\n.NET Core (and ASP.NET Core by extension) and .NET 5 (and later) only provide the Unicode encodings, ASCII and ISO-8859-1 by default.\nOther text encodings are not available to your application unless your application\n[registers](https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.registerprovider?view=net-5.0) the encoding\nprovider that provides all of the additional encodings.\n\nFirst, add a package reference for the [System.Text.Encoding.CodePages](https://www.nuget.org/packages/System.Text.Encoding.CodePages)\nnuget package to your project and then register the additional text encodings using the following code snippet:\n\n```csharp\nSystem.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);\n```\n\nNote: The above code snippet should be safe to call in .NET Framework versions >= 4.6 as well.\n\n### <a name=\"type-load-exception\">Q: Why do I get a `TypeLoadException` when I try to create a new MimeMessage?</a>\n\nThis only seems to happen in cases where the application is built for .NET Framework (v4.x) and seems to be most\ncommon for ASP.NET web applications that were built using Visual Studio 2019 (it is unclear whether this happens\nwith Visual Studio 2022 as well).\n\nThe issue is that some (older?) versions of MSBuild do not correctly generate `\\*.dll.config`, `app.config`\nand/or `web.config` files with proper assembly version binding redirects.\n\nIf this problem is happening to you, make sure to use MimeKit and MailKit >= v4.0 which include `MimeKit.dll.config`\nand `MailKit.dll.config`.\n\nThe next step is to manually edit your application's `app.config` (or `web.config`) to add a binding redirect\nfor `System.Runtime.CompilerServices.Unsafe`:\n\n```xml\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.0.0.0\" newVersion=\"6.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>\n```\n\n### <a id=\"ssl-handshake-exception\">Q: Why do I get `\"MailKit.Security.SslHandshakeException: An error occurred while attempting to establish an SSL or TLS connection.\"` when I try to Connect?</a>\n\nWhen you get an exception with that error message, it usually means that you are encountering\none of the following scenarios:\n\n#### 1. The mail server does not support SSL on the specified port.\n\nThere are 2 different ways to use SSL/TLS encryption with mail servers.\n\nThe first way is to enable SSL/TLS encryption immediately upon connecting to the\nSMTP, POP3 or IMAP server. This method requires an \"SSL port\" because the standard\nport defined for the protocol is meant for plain-text communication.\n\nThe second way is via a `STARTTLS` command (aka `STLS` for POP3) that is *optionally*\nsupported by the server.\n\nBelow is a table of the protocols supported by MailKit and the standard plain-text ports\n(which either do not support any SSL/TLS encryption at all or only via the `STARTTLS`\ncommand extension) and the SSL ports which require SSL/TLS encryption immediately upon a\nsuccessful connection to the remote host.\n\n|Protocol|Standard Port|SSL Port|\n|:------:|:-----------:|:------:|\n| SMTP   | 25 or 587   | 465    |\n| POP3   | 110         | 995    |\n| IMAP   | 143         | 993    |\n\nIt is important to use the correct `SecureSocketOptions` for the port that you are connecting to.\n\nIf you are connecting to one of the standard ports above, you will need to use `SecureSocketOptions.None`,\n`SecureSocketOptions.StartTls` or `SecureSocketOptions.StartTlsWhenAvailable`.\n\nIf you are connecting to one of the SSL ports, you will need to use `SecureSocketOptions.SslOnConnect`.\n\nYou could also try using `SecureSocketOptions.Auto` which works by choosing the appropriate option to use\nby comparing the specified port to the ports in the above table.\n\n#### 2. The mail server that you are connecting to is using an expired (or otherwise untrusted) SSL certificate.\n\nOften times, mail servers will use self-signed certificates instead of using a certificate that\nhas been signed by a trusted Certificate Authority. Another potential pitfall is when locally\ninstalled anti-virus software replaces the certificate in order to scan web traffic for viruses.\n\nWhen your system is unable to validate the mail server's certificate because it is not signed\nby a known and trusted Certificate Authority, the above error will occur.\n\nIf you are on a Linux system or are running a web service in a Linux container, it might be possible to use the following command to install\nthe standard set of Certificate Authority root certificates using the following command:\n\n```text\napt update && apt install -y ca-certificates\n```\n\nAnother option is to work around this problem by supplying a custom [RemoteCertificateValidationCallback](https://msdn.microsoft.com/en-us/library/ms145054)\nand setting it on the client's [ServerCertificateValidationCallback](https://mimekit.net/docs/html/P_MailKit_MailService_ServerCertificateValidationCallback.htm)\nproperty.\n\nIn the simplest example, you could do something like this (although I would strongly recommend against it in\nproduction use):\n\n```csharp\nusing (var client = new SmtpClient ()) {\n    client.ServerCertificateValidationCallback = (s,c,h,e) => true;\n\n    client.Connect (hostName, port, SecureSocketOptions.Auto);\n\n    // ...\n}\n```\n\nA better solution might be to compare the certificate's common name, issuer, serial number, and fingerprint\nto known values to make sure that the certificate can be trusted. Take the following code snippet as an\nexample of how to do this:\n\n```csharp\nbool MyServerCertificateValidationCallback (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)\n{\n    if (sslPolicyErrors == SslPolicyErrors.None)\n        return true;\n\n    // Note: The following code casts to an X509Certificate2 because it's easier to get the\n    // values for comparison, but it's possible to get them from an X509Certificate as well.\n    if (certificate is X509Certificate2 certificate2) {\n        var cn = certificate2.GetNameInfo (X509NameType.SimpleName, false);\n        var fingerprint = certificate2.Thumbprint;\n        var serial = certificate2.SerialNumber;\n        var issuer = certificate2.Issuer;\n\n        return cn == \"imap.gmail.com\" && issuer == \"CN=GTS CA 1O1, O=Google Trust Services, C=US\" &&\n            serial == \"00A15434C2695FB1880300000000CBF786\" &&\n            fingerprint == \"F351BCB631771F19AF41DFF22EB0A0839092DA51\";\n    }\n\n    return false;\n}\n```\n\nThe downside of the above example is that it requires hard-coding known values for \"trusted\" mail server\ncertificates which can quickly become unwieldy to deal with if your program is meant to be used with\na wide range of mail servers.\n\nThe best approach would be to prompt the user with a dialog explaining that the certificate is\nnot trusted for the reasons enumerated by the\n[SslPolicyErrors](https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslpolicyerrors?view=netframework-4.8)\nargument as well as potentially the errors provided in the\n[X509Chain](https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509chain?view=netframework-4.8).\nIf the user wishes to accept the risks of trusting the certificate, your program could then `return true`.\n\nFor more details on writing a custom SSL certificate validation callback, it may be worth checking out the\n[SslCertificateValidation.cs](https://github.com/jstedfast/MailKit/blob/master/Documentation/Examples/SslCertificateValidation.cs)\nexample.\n\n#### 3. A Certificate Authority CRL server for one or more of the certificates in the chain is temporarily unavailable.\n\nMost Certificate Authorities are probably pretty good at keeping their CRL and/or OCSP servers up 24/7, but occasionally\nthey *do* go down or are otherwise unreachable due to other network problems between you and the server. When this happens,\nit becomes impossible to check the revocation status of one or more of the certificates in the chain.\n\nTo ignore revocation checks, you can set the\n[CheckCertificateRevocation](https://www.mimekit.net/docs/html/P_MailKit_IMailService_CheckCertificateRevocation.htm)\nproperty of the IMAP, POP3 or SMTP client to `false` before you connect:\n\n```csharp\nusing (var client = new SmtpClient ()) {\n    client.CheckCertificateRevocation = false;\n\n    client.Connect (hostName, port, SecureSocketOptions.Auto);\n\n    // ...\n}\n```\n\n#### 4. The server does not support the same set of SSL/TLS protocols that the client is configured to use.\n\nMailKit attempts to keep up with the latest security recommendations and so is continuously removing older SSL and TLS\nprotocols that are no longer considered secure from the default configuration. This often means that MailKit's SMTP,\nPOP3 and IMAP clients will fail to connect to servers that are still using older SSL and TLS protocols. Currently,\nthe SSL and TLS protocols that are not supported by default are: SSL v2.0, SSL v3.0, TLS v1.0 and TLS v1.1.\n\nYou can override MailKit's default set of supported\n[SSL and TLS protocols](https://docs.microsoft.com/en-us/dotnet/api/system.security.authentication.sslprotocols?view=netframework-4.8)\nby setting the value of the [SslProtocols](https://www.mimekit.net/docs/html/P_MailKit_MailService_SslProtocols.htm)\nproperty on your SMTP, POP3 or IMAP client.\n\nFor example:\n\n```csharp\nusing (var client = new SmtpClient ()) {\n    // Allow SSLv3.0 and all versions of TLS\n    client.SslProtocols = SslProtocols.Ssl3 | SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;\n\n    client.Connect (\"smtp.gmail.com\", 465, true);\n\n    // ...\n}\n```\n\n### <a id=\"protocol-log\">Q: How can I get a protocol log for IMAP, POP3, or SMTP to see what is going wrong?</a>\n\nAll of MailKit's client implementations have a constructor that takes a nifty\n[IProtocolLogger](https://www.mimekit.net/docs/html/T_MailKit_IProtocolLogger.htm)\ninterface for logging client/server communications. Out of the box, you can use the\nhandy [ProtocolLogger](https://www.mimekit.net/docs/html/T_MailKit_ProtocolLogger.htm) class.\nHere are some examples of how to use it:\n\n```csharp\n// log to a file called 'imap.log'\nvar client = new ImapClient (new ProtocolLogger (\"imap.log\"));\n```\n\n```csharp\n// log to standard output (i.e. the console)\nvar client = new ImapClient (new ProtocolLogger (Console.OpenStandardOutput ()));\n```\n\n**Note:** When submitting a protocol log as part of a bug report, make sure to scrub any sensitive\ninformation including your authentication credentials. This information will generally be the base64\nencoded blob immediately following an `AUTHENTICATE` or `AUTH` command (depending on the type of server).\nThe only exception to this case is if you are authenticating with `NTLM` in which case I *may* need this\ninformation, but *only if* the bug/error is in the authentication step.\n\n### <a id=\"gmail-hidden-messages\">Q: Why doesn't MailKit find some of my GMail POP3 or IMAP messages?</a>\n\nBy default, GMail's POP3 and IMAP server does not behave like standard POP3 or IMAP servers\nand hides messages from clients using those protocols (as well as having other non-standard\nbehavior).\n\nIf you want to configure your GMail POP3 or IMAP settings to behave the way POP3 and IMAP are\nintended to behave according to their protocol specifications, you'll need to log in to your\nGMail account via your web browser and navigate to the `Forwarding and POP/IMAP` tab of your\nGMail Settings page and set your options to look like this:\n\n![GMail POP3 and IMAP Settings](Documentation/media/gmail-imap-pop3-settings.png \"GMail POP3 and IMAP Settings\")\n\n#### POP download:\n\n**1. Status:** POP is enabled for all mail that has arrived since 12/31/69\n- [X] Enable POP for **all mail** (even mail that's already been downloaded)\n- [ ] Enable POP for **mail that arrives from now on**\n- [ ] **Disable** POP\n\n**2. When messages are accessed with POP** \\[keep GMail's copy in the Inbox]\n\n#### IMAP access:\n\n**When I mark a message in IMAP as deleted:**\n- [ ] Auto-Expunge on - Immediately update the server. (default)\n- [X] Auto-Expunge off - Wait for the client to update the server.\n\n**When a message is marked as deleted and expunged from the last visible IMAP folder:**\n- [ ] Archive the message (default)\n- [ ] Move the message to the Trash\n- [X] Immediately delete the message forever\n\n**Folder size limits**\n- [X] Do not limit the number of messages in an IMAP folder (default)\n- [ ] Limit IMAP folders to contain no more than this many messages \\[1000]\n\n### <a id=\"gmail-access\">Q: How can I access GMail using MailKit?</a>\n\nAs of September 30th, 2024, authentication using only a username and password is [no longer supported by Google](https://support.google.com/accounts/answer/6010255?hl=en).\n\nThere are now only 2 options to choose from:\n\n1. Use [OAuth 2.0 authentication](#gmail-oauth2)\n2. Use an \"App password\"\n\nTo use an App password, you will first need to [turn on 2-Step Verification](https://support.google.com/accounts/answer/185839).\nOnce 2-Step Verification is turned on, you can [generate an App password](https://myaccount.google.com/apppasswords).\n\nThen, assuming that your GMail account is `user@gmail.com`, you would use the following\ncode snippet to connect to GMail via IMAP:\n\n```csharp\nusing (var client = new ImapClient ()) {\n    client.Connect (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n    client.Authenticate (\"user@gmail.com\", \"app-specific-password\");\n\n    // do stuff...\n\n    client.Disconnect (true);\n}\n```\n\nConnecting via POP3 or SMTP is identical except for the host names and ports (and, of course, you'd\nuse a `Pop3Client` or `SmtpClient` as appropriate).\n\n### <a id=\"gmail-oauth2\">Q: How can I log in to a GMail account using OAuth 2.0?</a>\n\nThe first thing you need to do is follow\n[Google's instructions](https://developers.google.com/accounts/docs/OAuth2)\nfor obtaining OAuth 2.0 credentials for your application.\n\n(Or, as an alternative set of step-by-step instructions, you can follow the directions that I have\nwritten in [GMailOAuth2.md](https://github.com/jstedfast/MailKit/blob/master/GMailOAuth2.md).)\n\nOnce you've done that, the easiest way to obtain an access token is to use Google's\n[Google.Apis.Auth](https://www.nuget.org/packages/Google.Apis.Auth/) library:\n\n```csharp\nconst string GMailAccount = \"username@gmail.com\";\n\nvar clientSecrets = new ClientSecrets {\n    ClientId = \"XXX.apps.googleusercontent.com\",\n    ClientSecret = \"XXX\"\n};\n\nvar codeFlow = new GoogleAuthorizationCodeFlow (new GoogleAuthorizationCodeFlow.Initializer {\n    // Cache tokens in ~/.local/share/google-filedatastore/CredentialCacheFolder on Linux/Mac\n    DataStore = new FileDataStore (\"CredentialCacheFolder\", false),\n    Scopes = new [] { \"https://mail.google.com/\" },\n    ClientSecrets = clientSecrets,\n    LoginHint = GMailAccount\n});\n\n// Note: For a web app, you'll want to use AuthorizationCodeWebApp instead.\nvar codeReceiver = new LocalServerCodeReceiver ();\nvar authCode = new AuthorizationCodeInstalledApp (codeFlow, codeReceiver);\n\nvar credential = await authCode.AuthorizeAsync (GMailAccount, CancellationToken.None);\n\nif (credential.Token.IsStale)\n    await credential.RefreshTokenAsync (CancellationToken.None);\n\nvar oauth2 = new SaslMechanismOAuthBearer (credential.UserId, credential.Token.AccessToken);\n\nusing (var client = new ImapClient ()) {\n    await client.ConnectAsync (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n```\n\n## Messages\n\n### <a id=\"create-attachments\">Q: How can I create a message with attachments?</a>\n\nTo construct a message with attachments, the first thing you'll need to do is create a `multipart/mixed`\ncontainer which you'll then want to add the message body to first. Once you've added the body, you can\nthen add MIME parts to it that contain the content of the files you'd like to attach, being sure to set\nthe `Content-Disposition` header value to attachment. You'll probably also want to set the `filename`\nparameter on the `Content-Disposition` header as well as the `name` parameter on the `Content-Type`\nheader. The most convenient way to do this is to use the\n[MimePart.FileName](https://www.mimekit.net/docs/html/P_MimeKit_MimePart_FileName.htm) property which\nwill set both parameters for you as well as setting the `Content-Disposition` header value to `attachment`\nif it has not already been set to something else.\n\n```csharp\nvar message = new MimeMessage ();\nmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\nmessage.To.Add (new MailboxAddress (\"Alice\", \"alice@wonderland.com\"));\nmessage.Subject = \"How you doin?\";\n\n// create our message text, just like before (except don't set it as the message.Body)\nvar body = new TextPart (\"plain\") {\n    Text = @\"Hey Alice,\n\nWhat are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.\n\nWill you be my +1?\n\n-- Joey\n\"\n};\n\n// create an image attachment for the file located at path\nvar attachment = new MimePart (\"image\", \"gif\") {\n    Content = new MimeContent (File.OpenRead (path), ContentEncoding.Default),\n    ContentDisposition = new ContentDisposition (ContentDisposition.Attachment),\n    ContentTransferEncoding = ContentEncoding.Base64,\n    FileName = Path.GetFileName (path)\n};\n\n// now create the multipart/mixed container to hold the message text and the\n// image attachment\nvar multipart = new Multipart (\"mixed\");\nmultipart.Add (body);\nmultipart.Add (attachment);\n\n// now set the multipart/mixed as the message body\nmessage.Body = multipart;\n```\n\nA simpler way to construct messages with attachments is to take advantage of the\n[BodyBuilder](https://www.mimekit.net/docs/html/T_MimeKit_BodyBuilder.htm) class.\n\n```csharp\nvar message = new MimeMessage ();\nmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\nmessage.To.Add (new MailboxAddress (\"Alice\", \"alice@wonderland.com\"));\nmessage.Subject = \"How you doin?\";\n\nvar builder = new BodyBuilder ();\n\n// Set the plain-text version of the message text\nbuilder.TextBody = @\"Hey Alice,\n\nWhat are you up to this weekend? Monica is throwing one of her parties on\nSaturday and I was hoping you could make it.\n\nWill you be my +1?\n\n-- Joey\n\";\n\n// We may also want to attach a calendar event for Monica's party...\nbuilder.Attachments.Add (@\"C:\\Users\\Joey\\Documents\\party.ics\");\n\n// Now we just need to set the message body and we're done\nmessage.Body = builder.ToMessageBody ();\n```\n\nFor more information, see [Creating Messages](https://www.mimekit.net/docs/html/Creating-Messages.htm).\n\n### <a id=\"message-body\">Q: How can I get the main body of a message?</a>\n\n(Note: for the TL;DR version, skip to [the end](#message-body-tldr))\n\nMIME is a tree structure of parts. There are multiparts which contain other parts (even other multiparts).\nThere are message parts which contain messages. And finally, there are leaf-node parts which contain content.\n\nThere are a few common message structures:\n\n1. The message contains only a `text/plain` or `text/html` part (easy, just use that).\n\n2. The message contains a `multipart/alternative` which will typically look a bit like this:\n\n    ```\n    multipart/alternative\n       text/plain\n       text/html\n    ```\n\n3. Same as above, but the html part is inside a `multipart/related` so that it can embed images:\n\n    ```\n    multipart/alternative\n       text/plain\n       multipart/related\n          text/html\n          image/jpeg\n          image/png\n    ```\n\n4. The message contains a textual body part as well as some attachments:\n\n    ```\n    multipart/mixed\n       text/plain or text/html\n       application/octet-stream\n       application/zip\n    ```\n\n5. the same as above, but with the first part replaced with either #2 or #3. To illustrate:\n\n    ```\n    multipart/mixed\n       multipart/alternative\n          text/plain\n          text/html\n       application/octet-stream\n       application/zip\n    ```\n\n    or...\n\n    ```\n    multipart/mixed\n       multipart/alternative\n          text/plain\n          multipart/related\n             text/html\n             image/jpeg\n             image/png\n       application/octet-stream\n       application/zip\n    ```\n\n<a name=\"message-body-tldr\"></a>Now, if you don't care about any of that and just want to get the text of\nthe first `text/plain` or `text/html` part you can find, that's easy.\n\n[MimeMessage](https://www.mimekit.net/docs/html/T_MimeKit_MimeMessage.htm) has two convenience properties\nfor this: [TextBody](https://www.mimekit.net/docs/html/P_MimeKit_MimeMessage_TextBody.htm) and\n[HtmlBody](https://www.mimekit.net/docs/html/P_MimeKit_MimeMessage_HtmlBody.htm).\n\n`MimeMessage.HtmlBody`, as the name implies, will traverse the MIME structure for you and find the most\nappropriate body part with a `Content-Type` of `text/html` that can be interpreted as the message body.\nLikewise, the `TextBody` property can be used to get the `text/plain` version of the message body.\n\nFor more information, see [Working with Messages](https://www.mimekit.net/docs/html/Working-With-Messages.htm).\n\n### <a id=\"has-attachments\">Q: How can I tell if a message has attachments?</a>\n\nIn most cases, a message with a body that has a MIME-type of `multipart/mixed` containing more than a\nsingle part probably has attachments. As illustrated above, the first part of a `multipart/mixed` is\ntypically the textual body of the message, but it is not always quite that simple.\n\nIn general, MIME attachments will have a `Content-Disposition` header with a value of `attachment`.\nTo get the list of body parts matching this criteria, you can use the\n[MimeMessage.Attachments](https://www.mimekit.net/docs/html/P_MimeKit_MimeMessage_Attachments.htm) property.\n\nUnfortunately, not all mail clients follow this convention and so you may need to write your own custom logic.\nFor example, you may wish to treat all body parts having a `name` or `filename` parameter set on them:\n\n```csharp\nvar attachments = message.BodyParts.OfType<MimePart> ().Where (part => !string.IsNullOrEmpty (part.FileName));\n```\n\nA more sophisticated approach is to treat body parts not referenced by the main textual body part of the\nmessage as attachments. In other words, treat any body part not used for rendering the message as an\nattachment. For an example on how to do this, consider the following code snippets:\n\n```csharp\n/// <summary>\n/// Visits a MimeMessage and generates HTML suitable to be rendered by a browser control.\n/// </summary>\nclass HtmlPreviewVisitor : MimeVisitor\n{\n    List<MultipartRelated> stack = new List<MultipartRelated> ();\n    List<MimeEntity> attachments = new List<MimeEntity> ();\n    readonly string tempDir;\n    string body;\n\n    /// <summary>\n    /// Creates a new HtmlPreviewVisitor.\n    /// </summary>\n    /// <param name=\"tempDirectory\">A temporary directory used for storing image files.</param>\n    public HtmlPreviewVisitor (string tempDirectory)\n    {\n        tempDir = tempDirectory;\n    }\n\n    /// <summary>\n    /// The list of attachments that were in the MimeMessage.\n    /// </summary>\n    public IList<MimeEntity> Attachments {\n        get { return attachments; }\n    }\n\n    /// <summary>\n    /// The HTML string that can be set on the BrowserControl.\n    /// </summary>\n    public string HtmlBody {\n        get { return body ?? string.Empty; }\n    }\n\n    protected override void VisitMultipartAlternative (MultipartAlternative alternative)\n    {\n        // walk the multipart/alternative children backwards from greatest level of faithfulness to the least faithful\n        for (int i = alternative.Count - 1; i >= 0 && body == null; i--)\n            alternative[i].Accept (this);\n    }\n\n    protected override void VisitMultipartRelated (MultipartRelated related)\n    {\n        var root = related.Root;\n\n        // push this multipart/related onto our stack\n        stack.Add (related);\n\n        // visit the root document\n        root.Accept (this);\n\n        // pop this multipart/related off our stack\n        stack.RemoveAt (stack.Count - 1);\n    }\n\n    // look up the image based on the img src url within our multipart/related stack\n    bool TryGetImage (string url, out MimePart image)\n    {\n        UriKind kind;\n        int index;\n        Uri uri;\n\n        if (Uri.IsWellFormedUriString (url, UriKind.Absolute))\n            kind = UriKind.Absolute;\n        else if (Uri.IsWellFormedUriString (url, UriKind.Relative))\n            kind = UriKind.Relative;\n        else\n            kind = UriKind.RelativeOrAbsolute;\n\n        try {\n            uri = new Uri (url, kind);\n        } catch {\n            image = null;\n            return false;\n        }\n\n        for (int i = stack.Count - 1; i >= 0; i--) {\n            if ((index = stack[i].IndexOf (uri)) == -1)\n                continue;\n\n            image = stack[i][index] as MimePart;\n            return image != null;\n        }\n\n        image = null;\n\n        return false;\n    }\n\n    /// <summary>\n    /// Get a file:// URI for the image attachment.\n    /// </summary>\n    /// <remarks>\n    /// Saves the image attachment to a temp file and returns a file:// URI for the\n    /// temp file.\n    /// </remarks>\n    /// <returns>The file:// URI.</returns>\n    /// <param name=\"image\">The image attachment.</param>\n    /// <param name=\"url\">The original HTML image URL.</param>\n    string GetFileUri (MimePart image, string url)\n    {\n        string fileName = url.Replace (':', '_').Replace ('\\\\', '_').Replace ('/', '_');\n\n        string path = Path.Combine (tempDir, fileName);\n\n        if (!File.Exists (path)) {\n            using (var output = File.Create (path))\n                image.Content.DecodeTo (output);\n        }\n\n        return \"file://\" + path.Replace ('\\\\', '/');\n    }\n\n    /// <summary>\n    /// Get a data: URI for the image attachment.\n    /// </summary>\n    /// <remarks>\n    /// Encodes the image attachment into a string suitable for setting as a src= attribute value in\n    /// an img tag.\n    /// </remarks>\n    /// <returns>The data: URI.</returns>\n    /// <param name=\"image\">The image attachment.</param>\n    string GetDataUri (MimePart image)\n    {\n        using (var memory = new MemoryStream ()) {\n            image.Content.DecodeTo (memory);\n            var buffer = memory.GetBuffer ();\n            var length = (int) memory.Length;\n            var base64 = Convert.ToBase64String (buffer, 0, length);\n\n            return string.Format (\"data:{0};base64,{1}\", image.ContentType.MimeType, base64);\n        }\n    }\n\n    // Replaces <img src=...> urls that refer to images embedded within the message with\n    // \"file://\" urls that the browser control will actually be able to load.\n    void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)\n    {\n        if (ctx.TagId == HtmlTagId.Meta && !ctx.IsEndTag) {\n            bool isContentType = false;\n\n            ctx.WriteTag (htmlWriter, false);\n\n            // replace charsets with \"utf-8\" since our output will be in utf-8 (and not whatever the original charset was)\n            foreach (var attribute in ctx.Attributes) {\n                if (attribute.Id == HtmlAttributeId.Charset) {\n                    htmlWriter.WriteAttributeName (attribute.Name);\n                    htmlWriter.WriteAttributeValue (\"utf-8\");\n                } else if (isContentType && attribute.Id == HtmlAttributeId.Content) {\n                    htmlWriter.WriteAttributeName (attribute.Name);\n                    htmlWriter.WriteAttributeValue (\"text/html; charset=utf-8\");\n                } else {\n                    if (attribute.Id == HtmlAttributeId.HttpEquiv && attribute.Value != null\n                        && attribute.Value.Equals (\"Content-Type\", StringComparison.OrdinalIgnoreCase))\n                        isContentType = true;\n\n                    htmlWriter.WriteAttribute (attribute);\n                }\n            }\n        } else if (ctx.TagId == HtmlTagId.Image && !ctx.IsEndTag && stack.Count > 0) {\n            ctx.WriteTag (htmlWriter, false);\n\n            // replace the src attribute with a file:// URL\n            foreach (var attribute in ctx.Attributes) {\n                if (attribute.Id == HtmlAttributeId.Src) {\n                    if (!TryGetImage (attribute.Value, out var image)) {\n                        htmlWriter.WriteAttribute (attribute);\n                        continue;\n                    }\n\n                    // Note: you can either use a \"file://\" URI or you can use a\n                    // \"data:\" URI, the choice is yours.\n                    var uri = GetFileUri (image, attribute.Value);\n                    //var uri = GetDataUri (image);\n\n                    htmlWriter.WriteAttributeName (attribute.Name);\n                    htmlWriter.WriteAttributeValue (uri);\n                } else {\n                    htmlWriter.WriteAttribute (attribute);\n                }\n            }\n        } else if (ctx.TagId == HtmlTagId.Body && !ctx.IsEndTag) {\n            ctx.WriteTag (htmlWriter, false);\n\n            // add and/or replace oncontextmenu=\"return false;\"\n            foreach (var attribute in ctx.Attributes) {\n                if (attribute.Name.Equals (\"oncontextmenu\", StringComparison.OrdinalIgnoreCase))\n                   continue;\n\n                htmlWriter.WriteAttribute (attribute);\n            }\n\n            htmlWriter.WriteAttribute (\"oncontextmenu\", \"return false;\");\n        } else {\n            // pass the tag through to the output\n            ctx.WriteTag (htmlWriter, true);\n        }\n    }\n\n    protected override void VisitTextPart (TextPart entity)\n    {\n        TextConverter converter;\n\n        if (body != null) {\n            // since we've already found the body, treat this as an attachment\n            attachments.Add (entity);\n            return;\n        }\n\n        if (entity.IsHtml) {\n            converter = new HtmlToHtml {\n                HtmlTagCallback = HtmlTagCallback\n            };\n        } else if (entity.IsFlowed) {\n            var flowed = new FlowedToHtml ();\n            string delsp;\n\n            if (entity.ContentType.Parameters.TryGetValue (\"delsp\", out delsp))\n                flowed.DeleteSpace = delsp.Equals (\"yes\", StringComparison.OrdinalIgnoreCase);\n\n            converter = flowed;\n        } else {\n            converter = new TextToHtml ();\n        }\n\n        body = converter.Convert (entity.Text);\n    }\n\n    protected override void VisitTnefPart (TnefPart entity)\n    {\n        // extract any attachments in the MS-TNEF part\n        attachments.AddRange (entity.ExtractAttachments ());\n    }\n\n    protected override void VisitMessagePart (MessagePart entity)\n    {\n        // treat message/rfc822 parts as attachments\n        attachments.Add (entity);\n    }\n\n    protected override void VisitMimePart (MimePart entity)\n    {\n        // realistically, if we've gotten this far, then we can treat this as an attachment\n        // even if the IsAttachment property is false.\n        attachments.Add (entity);\n    }\n}\n```\n\nAnd the way you'd use this visitor might look something like this:\n\n```csharp\nvoid Render (MimeMessage message)\n{\n    var tmpDir = Path.Combine (Path.GetTempPath (), message.MessageId);\n    var visitor = new HtmlPreviewVisitor (tmpDir);\n\n    Directory.CreateDirectory (tmpDir);\n\n    message.Accept (visitor);\n\n    DisplayHtml (visitor.HtmlBody);\n    DisplayAttachments (visitor.Attachments);\n}\n```\n\nOnce you've rendered the message using the above technique, you'll have a list of attachments that\nwere not used, even if they did not match the simplistic criteria used by the `MimeMessage.Attachments`\nproperty.\n\n### <a id=\"serialize-message\">Q: Why doesn't the `MimeMessage` class implement `ISerializable` so that I can serialize a message to disk and read it back later?</a>\n\nThe MimeKit API was designed to use the existing MIME format for serialization. In light of this, the ability\nto use the .NET serialization API and format did not make much sense to support.\n\nYou can easily serialize a [MimeMessage](https://www.mimekit.net/docs/html/T_MimeKit_MimeMessage.htm) to a stream using the\n[WriteTo](https://www.mimekit.net/docs/html/Overload_MimeKit_MimeMessage_WriteTo.htm) methods.\n\nFor more information on this topic, see the following other two topics:\n\n* [How can I parse messages?](#load-messages)\n* [How can I save messages?](#save-messages)\n\n### <a id=\"load-messages\">Q: How can I parse messages?</a>\n\nOne of the more common operations that MimeKit is meant for is parsing email messages from arbitrary streams.\nThere are two ways of accomplishing this task.\n\nThe first way is to use one of the [Load](https://www.mimekit.net/docs/html/Overload_MimeKit_MimeMessage_Load.htm) methods\non `MimeMessage`:\n\n```csharp\n// Load a MimeMessage from a stream\nvar message = MimeMessage.Load (stream);\n```\n\nOr you can load a message from a file path:\n\n```csharp\n// Load a MimeMessage from a file path\nvar message = MimeMessage.Load (\"message.eml\");\n```\n\nThe second way is to use the [MimeParser](https://www.mimekit.net/docs/html/T_MimeKit_MimeParser.htm) class. For the most\npart, using the `MimeParser` directly is not necessary unless you wish to parse a Unix mbox file stream. However, this is\nhow you would do it:\n\n```csharp\n// Load a MimeMessage from a stream\nvar parser = new MimeParser (stream, MimeFormat.Entity);\nvar message = parser.ParseMessage ();\n```\n\nFor Unix mbox file streams, you would use the parser like this:\n\n```csharp\n// Load every message from a Unix mbox\nvar parser = new MimeParser (stream, MimeFormat.Mbox);\nwhile (!parser.IsEndOfStream) {\n    var message = parser.ParseMessage ();\n\n    // do something with the message\n}\n```\n\n### <a id=\"save-messages\">Q: How can I save messages?</a>\n\nOne you've got a [MimeMessage](https://www.mimekit.net/docs/html/T_MimeKit_MimeMessage.htm), you can save\nit to a file using the [WriteTo](https://mimekit.net/docs/html/Overload_MimeKit_MimeMessage_WriteTo.htm) method:\n\n```csharp\nmessage.WriteTo (\"message.eml\");\n```\n\nThe `WriteTo` method also has overloads that allow you to write the message to a `Stream` instead.\n\nBy default, the `WriteTo` method will save the message using DOS line-endings on Windows and Unix\nline-endings on Unix-based systems such as macOS and Linux. You can override this behavior by\npassing a [FormatOptions](https://mimekit.net/docs/html/T_MimeKit_FormatOptions.htm) argument to\nthe method:\n\n```csharp\n// clone the default formatting options\nvar format = FormatOptions.Default.Clone ();\n\n// override the line-endings to be DOS no matter what platform we are on\nformat.NewLineFormat = NewLineFormat.Dos;\n\nmessage.WriteTo (format, \"message.eml\");\n```\n\nNote: While it may seem like you can safely use the `ToString` method to serialize a message,\n***DON'T DO IT!*** This is ***not*** safe! MIME messages cannot be accurately represented as\nstrings due to the fact that each MIME part of the message *may* be encoded in a different\ncharacter set, thus making it impossible to convert the message into a unicode string using a\nsingle charset to do the conversion (which is *exactly* what `ToString` does).\n\n### <a id=\"save-attachments\">Q: How can I save attachments?</a>\n\nIf you've already got a [MimePart](https://www.mimekit.net/docs/html/T_MimeKit_MimePart.htm) that represents\nthe attachment that you'd like to save, here's how you might save it:\n\n```csharp\nusing (var stream = File.Create (fileName))\n    attachment.Content.DecodeTo (stream);\n```\n\nPretty simple, right?\n\nBut what if your attachment is actually a [MessagePart](https://www.mimekit.net/docs/html/T_MimeKit_MessagePart.htm)?\n\nTo save the content of a `message/rfc822` part, you'd use the following code snippet:\n\n```csharp\nusing (var stream = File.Create (fileName))\n    attachment.Message.WriteTo (stream);\n```\n\nIf you are iterating over all of the attachments in a message, you might do something like this:\n\n```csharp\nforeach (var attachment in message.Attachments) {\n    var fileName = attachment.ContentDisposition?.FileName ?? attachment.ContentType.Name;\n\n    using (var stream = File.Create (fileName)) {\n        if (attachment is MessagePart) {\n            var rfc822 = (MessagePart) attachment;\n\n            rfc822.Message.WriteTo (stream);\n        } else {\n            var part = (MimePart) attachment;\n\n            part.Content.DecodeTo (stream);\n        }\n    }\n}\n```\n\n### <a id=\"address-headers\">Q: How can I get the email addresses in the From, To, and Cc headers?</a>\n\nThe [From](https://www.mimekit.net/docs/html/P_MimeKit_MimeMessage_From.htm),\n[To](https://www.mimekit.net/docs/html/P_MimeKit_MimeMessage_To.htm), and\n[Cc](https://www.mimekit.net/docs/html/P_MimeKit_MimeMessage_Cc.htm) properties of a\n[MimeMessage](https://www.mimekit.net/docs/html/T_MimeKit_MimeMessage.htm) are all of type\n[InternetAddressList](https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm). An\n`InternetAddressList` is a list of\n[InternetAddress](https://www.mimekit.net/docs/html/T_MimeKit_InternetAddress.htm) items. This is\nwhere most people start to get lost because an `InternetAddress` is an abstract class that only\nreally has a [Name](https://www.mimekit.net/docs/html/P_MimeKit_InternetAddress_Name.htm) property.\n\nAs you've probably already discovered, the `Name` property contains the name of the person\n(if available), but what you want is his or her email address, not their name.\n\nTo get the email address, you'll need to figure out what subclass of address each `InternetAddress`\nreally is. There are 2 subclasses of `InternetAddress`:\n[GroupAddress](https://www.mimekit.net/docs/html/T_MimeKit_GroupAddress.htm) and\n[MailboxAddress](https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm).\n\nA `GroupAddress` is a named group of more `InternetAddress` items that are contained within the\n[Members](https://www.mimekit.net/docs/html/P_MimeKit_GroupAddress_Members.htm) property. To get\nan idea of what a group address represents, consider the following examples:\n\n```\nTo: My Friends: Joey <joey@friends.com>, Monica <monica@friends.com>, \"Mrs. Chanandler Bong\"\n    <chandler@friends.com>, Ross <ross@friends.com>, Rachel <rachel@friends.com>;\n```\n\nIn the above example, the `To` header's `InternetAddressList` will contain only 1 item which will be a\n`GroupAddress` with a `Name` value of `My Friends`. The `Members` property of the `GroupAddress` will\ncontain 5 more `InternetAddress` items (which will all be instances of `MailboxAddress`).\n\nThe above example, however, is not very likely to ever be seen in messages you deal with. A far more\ncommon example would be the one below:\n\n```\nTo: undisclosed-recipients:;\n```\n\nMost of the time, the `From`, `To`, and `Cc` headers will only contain mailbox addresses. As you will\nnotice, a `MailboxAddress` has an\n[Address](https://www.mimekit.net/docs/html/P_MimeKit_MailboxAddress_Address.htm) property which will\ncontain the email address of the mailbox. In the following example, the `Address` property will\ncontain the value `john@smith.com`:\n\n```\nTo: John Smith <john@smith.com>\n```\n\nIf you only care about getting a flattened list of the mailbox addresses in a `From`, `To`, or `Cc`\nheader, you can do something like this:\n\n```csharp\nforeach (var mailbox in message.To.Mailboxes)\n    Console.WriteLine (\"{0}'s email address is {1}\", mailbox.Name, mailbox.Address);\n```\n\n### <a id=\"untitled-attachments\">Q: Why do attachments with Unicode filenames appear as \"ATT0####.dat\" in Outlook?</a>\n\nAn attachment filename is stored as a MIME parameter on the `Content-Disposition` header. Unfortunately,\nthe original MIME specifications did not specify a method for encoding non-ASCII filenames. In 1997,\n[rfc2184](https://tools.ietf.org/html/rfc2184) (later updated by [rfc2231](https://tools.ietf.org/html/rfc2231))\nwas published which specified an encoding mechanism to use for encoding them. Since there was a window in\ntime where the MIME specifications did not define a way to encode them, some mail client developers decided\nto use the mechanism described by [rfc2047](https://tools.ietf.org/html/rfc2047) which was meant for\nencoding non-ASCII text in headers. While this may at first seem logical, the problem with this approach\nwas that rfc2047 `encoded-word` tokens are not allowed to be in quotes (as well as some other issues) and\nso another, more appropriate, encoding mechanism was needed.\n\nOutlook is one of those mail clients which decided to encode filenames using the mechanism described in\nrfc2047 and until Outlook 2007, did not support filenames encoded using the mechanism defined in rfc2231.\n\nAs of MimeKit v1.2.18, it is possible to configure MimeKit to use the rfc2047 encoding mechanism for\nfilenames (and other `Content-Disposition` and `Content-Type` parameter values) by setting the encoding\nmethod on each individual [Parameter](https://www.mimekit.net/docs/html/T_MimeKit_Parameter.htm):\n\n```csharp\nParameter param;\n\nif (attachment.ContentDisposition.Parameters.TryGetValue (\"filename\", out param))\n    param.EncodingMethod = ParameterEncodingMethod.Rfc2047;\n```\n\nOr:\n\n```csharp\nforeach (var param in attachment.ContentDisposition.Parameters) {\n    param.EncodingMethod = ParameterEncodingMethod.Rfc2047;\n}\n```\n\n### <a id=\"decrypt-inline-pgp\">Q: How can I decrypt PGP messages that are embedded in the main message text?</a>\n\nSome PGP-enabled mail clients, such as Thunderbird, embed encrypted PGP blurbs within the `text/plain` body\nof the message rather than using the PGP/MIME format that MimeKit prefers.\n\nThese messages often look something like this:\n\n```text\nReturn-Path: <pgp-enthusiast@example.com>\nReceived: from [127.0.0.1] (hostname.example.com. [201.95.8.17])\n    by mx.google.com with ESMTPSA id l67sm26628445yha.8.2014.04.27.13.49.44\n    for <pgp-enthusiast@example.com>\n    (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);\n    Sun, 27 Apr 2014 13:49:44 -0700 (PDT)\nMessage-ID: <535D6D67.8020803@example.com>\nDate: Sun, 27 Apr 2014 17:49:43 -0300\nFrom: Die-Hard PGP Fan <pgp-enthusiast@example.com>\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0\nMIME-Version: 1.0\nTo: undisclosed-recipients:;\nSubject: Test of inline encrypted PGP blocks\nX-Enigmail-Version: 1.6\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: 8bit\nX-Antivirus: avast! (VPS 140427-1, 27/04/2014), Outbound message\nX-Antivirus-Status: Clean\n\n-----BEGIN PGP MESSAGE-----\nCharset: ISO-8859-1\nVersion: GnuPG v2.0.22 (MingW32)\nComment: Using GnuPG with Thunderbird - http://www.enigmail.net/\n\nSGFoISBJIGZvb2xlZCB5b3UsIHRoaXMgdGV4dCBpc24ndCBhY3R1YWxseSBlbmNy\neXB0ZWQgd2l0aCBQR1AsCml0J3MgYWN0dWFsbHkgb25seSBiYXNlNjQgZW5jb2Rl\nZCEKCkknbSBqdXN0IHVzaW5nIHRoaXMgYXMgYW4gZXhhbXBsZSwgdGhvdWdoLCBz\nbyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCgpGb3IgdGhlIHNha2Ugb2YgYXJn\ndW1lbnQsIHdlJ2xsIHByZXRlbmQgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGFuIGVu\nY3J5cHRlZApibHVyYi4gTW1ta2F5PyBUaGFua3MuCg==\n-----END PGP MESSAGE-----\n```\n\nTo deal with these kinds of messages, I've added a method to OpenPgpContext called `GetDecryptedStream` which\ncan be used to get the raw decrypted stream.\n\nThere are actually 2 variants of this method:\n\n```csharp\npublic Stream GetDecryptedStream (Stream encryptedData, out DigitalSignatureCollection signatures)\n```\n\nand\n\n```csharp\npublic Stream GetDecryptedStream (Stream encryptedData)\n```\n\nThe first variant is useful in cases where the encrypted PGP blurb is also digitally signed, allowing you to get\nyour hands on the list of digital signatures in order for you to verify each of them.\n\nTo decrypt the content of the message, you'll want to locate the `TextPart` (in this case, it'll just be\n`message.Body`) and then do this:\n\n```csharp\nstatic Stream DecryptEmbeddedPgp (TextPart text)\n{\n    using (var memory = new MemoryStream ()) {\n        text.Content.DecodeTo (memory);\n        memory.Position = 0;\n\n        using (var ctx = new MyGnuPGContext ()) {\n            return ctx.GetDecryptedStream (memory);\n        }\n    }\n}\n```\n\nWhat you do with that decrypted stream is up to you. It's up to you to figure out what the decrypted content is\n(is it text? a jpeg image? a video?) and how to display it to the user.\n\n### <a id=\"reply-message\">Q: How can I reply to a message?</a>\n\nReplying to a message is fairly simple. For the most part, you'd just create the reply message\nthe same way you'd create any other message. There are only a few slight differences:\n\n1. In the reply message, you'll want to prefix the `Subject` header with `\"Re: \"` if the prefix\n   doesn't already exist in the message you are replying to (in other words, if you are replying\n   to a message with a `Subject` of `\"Re: party tomorrow night!\"`, you would not prefix it with\n   another `\"Re: \"`).\n2. You will want to set the reply message's `In-Reply-To` header to the value of the\n   `Message-Id` header in the original message.\n3. You will want to copy the original message's `References` header into the reply message's\n   `References` header and then append the original message's `Message-Id` header.\n4. You will probably want to \"quote\" the original message's text in the reply.\n5. If you are generating an automatic reply, you should also follow [RFC3834](https://www.rfc-editor.org/rfc/rfc3834)\n   and set the `Auto-Submitted` value to `auto-replied`.\n\nIf this logic were to be expressed in code, it might look something like this:\n\n```csharp\npublic static MimeMessage Reply (MimeMessage message, MailboxAddress from, bool replyToAll)\n{\n    var reply = new MimeMessage ();\n\n    reply.From.Add (from);\n\n    // reply to the sender of the message\n    if (message.ReplyTo.Count > 0) {\n        reply.To.AddRange (message.ReplyTo);\n    } else if (message.From.Count > 0) {\n        reply.To.AddRange (message.From);\n    } else if (message.Sender != null) {\n        reply.To.Add (message.Sender);\n    }\n\n    if (replyToAll) {\n        // include all of the other original recipients - TODO: remove ourselves from these lists\n        reply.To.AddRange (message.To);\n        reply.Cc.AddRange (message.Cc);\n    }\n\n    // set the reply subject\n    if (!message.Subject?.StartsWith (\"Re:\", StringComparison.OrdinalIgnoreCase))\n        reply.Subject = \"Re: \" + (message.Subject ?? string.Empty);\n    else\n        reply.Subject = message.Subject;\n\n    // construct the In-Reply-To and References headers\n    if (!string.IsNullOrEmpty (message.MessageId)) {\n        reply.InReplyTo = message.MessageId;\n        foreach (var id in message.References)\n            reply.References.Add (id);\n        reply.References.Add (message.MessageId);\n    }\n\n    // if this is an automatic reply, be sure to specify this using the Auto-Submitted header in order to avoid (infinite) mail loops\n    reply.Headers.Add (HeaderId.AutoSubmitted, \"auto-replied\");\n\n    // quote the original message text\n    using (var quoted = new StringWriter ()) {\n        var sender = message.Sender ?? message.From.Mailboxes.FirstOrDefault ();\n\n        quoted.WriteLine (\"On {0}, {1} wrote:\", message.Date.ToString (\"f\"), !string.IsNullOrEmpty (sender.Name) ? sender.Name : sender.Address);\n        using (var reader = new StringReader (message.TextBody)) {\n            string line;\n\n            while ((line = reader.ReadLine ()) != null) {\n                quoted.Write (\"> \");\n                quoted.WriteLine (line);\n            }\n        }\n\n        reply.Body = new TextPart (\"plain\") {\n            Text = quoted.ToString ()\n        };\n    }\n\n    return reply;\n}\n```\n\nBut what if you wanted to reply to a message and quote the HTML formatting of the original message\nbody (assuming it has an HTML body) while still including the embedded images?\n\nThis gets a bit more complicated, but it's still doable...\n\nThe first thing we'd need to do is implement our own\n[MimeVisitor](https://www.mimekit.net/docs/html/T_MimeKit_MimeVisitor.htm) to handle this:\n\n```csharp\npublic class ReplyVisitor : MimeVisitor\n{\n    readonly Stack<Multipart> stack = new Stack<Multipart> ();\n    MimeMessage original, reply;\n    MailboxAddress from;\n    bool replyToAll;\n    int isRelated;\n\n    /// <summary>\n    /// Creates a new ReplyVisitor.\n    /// </summary>\n    public ReplyVisitor (MailboxAddress from, bool replyToAll)\n    {\n        this.replyToAll = replyToAll;\n        this.from = from;\n    }\n\n    /// <summary>\n    /// Gets the reply.\n    /// </summary>\n    /// <value>The reply.</value>\n    public MimeMessage Reply {\n        get { return reply; }\n    }\n\n    void Push (MimeEntity entity)\n    {\n        var multipart = entity as Multipart;\n\n        if (reply.Body == null) {\n            reply.Body = entity;\n        } else {\n            var parent = stack.Peek ();\n            parent.Add (entity);\n        }\n\n        if (multipart != null)\n            stack.Push (multipart);\n    }\n\n    void Pop ()\n    {\n        stack.Pop ();\n    }\n\n    static string GetOnDateSenderWrote (MimeMessage message)\n    {\n        var sender = message.Sender != null ? message.Sender : message.From.Mailboxes.FirstOrDefault ();\n        var name = sender != null ? (!string.IsNullOrEmpty (sender.Name) ? sender.Name : sender.Address) : \"an unknown sender\";\n\n        return string.Format (\"On {0}, {1} wrote:\", message.Date.ToString (\"f\"), name);\n    }\n\n    /// <summary>\n    /// Visit the specified message.\n    /// </summary>\n    /// <param name=\"message\">The message.</param>\n    public override void Visit (MimeMessage message)\n    {\n        reply = new MimeMessage ();\n        original = message;\n\n        stack.Clear ();\n\n        reply.From.Add (from.Clone ());\n\n        // reply to the sender of the message\n        if (message.ReplyTo.Count > 0) {\n            reply.To.AddRange (message.ReplyTo);\n        } else if (message.From.Count > 0) {\n            reply.To.AddRange (message.From);\n        } else if (message.Sender != null) {\n            reply.To.Add (message.Sender);\n        }\n\n        if (replyToAll) {\n            // include all of the other original recipients - TODO: remove ourselves from these lists\n            reply.To.AddRange (message.To);\n            reply.Cc.AddRange (message.Cc);\n        }\n\n        // set the reply subject\n        if (!message.Subject?.StartsWith (\"Re:\", StringComparison.OrdinalIgnoreCase))\n            reply.Subject = \"Re: \" + (message.Subject ?? string.Empty);\n        else\n            reply.Subject = message.Subject;\n\n        // construct the In-Reply-To and References headers\n        if (!string.IsNullOrEmpty (message.MessageId)) {\n            reply.InReplyTo = message.MessageId;\n            foreach (var id in message.References)\n                reply.References.Add (id);\n            reply.References.Add (message.MessageId);\n        }\n\n        base.Visit (message);\n    }\n\n    /// <summary>\n    /// Visit the specified entity.\n    /// </summary>\n    /// <param name=\"entity\">The MIME entity.</param>\n    /// <exception cref=\"System.NotSupportedException\">\n    /// Only Visit(MimeMessage) is supported.\n    /// </exception>\n    public override void Visit (MimeEntity entity)\n    {\n        throw new NotSupportedException ();\n    }\n\n    protected override void VisitMultipartAlternative (MultipartAlternative alternative)\n    {\n        var multipart = new MultipartAlternative ();\n\n        Push (multipart);\n\n        for (int i = 0; i < alternative.Count; i++)\n            alternative[i].Accept (this);\n\n        Pop ();\n    }\n\n    protected override void VisitMultipartRelated (MultipartRelated related)\n    {\n        var multipart = new MultipartRelated ();\n        var root = related.Root;\n\n        Push (multipart);\n\n        root.Accept (this);\n\n        isRelated++;\n        for (int i = 0; i < related.Count; i++) {\n            if (related[i] != root)\n                related[i].Accept (this);\n        }\n        isRelated--;\n\n        Pop ();\n    }\n\n    protected override void VisitMultipart (Multipart multipart)\n    {\n        foreach (var part in multipart) {\n            if (part is MultipartAlternative)\n                part.Accept (this);\n            else if (part is MultipartRelated)\n                part.Accept (this);\n            else if (part is TextPart)\n                part.Accept (this);\n        }\n    }\n\n    void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)\n    {\n        if (ctx.TagId == HtmlTagId.Body && !ctx.IsEmptyElementTag) {\n            if (ctx.IsEndTag) {\n                // end our opening <blockquote>\n                htmlWriter.WriteEndTag (HtmlTagId.BlockQuote);\n\n                // pass the </body> tag through to the output\n                ctx.WriteTag (htmlWriter, true);\n            } else {\n                // pass the <body> tag through to the output\n                ctx.WriteTag (htmlWriter, true);\n\n                // prepend the HTML reply with \"On {DATE}, {SENDER} wrote:\"\n                htmlWriter.WriteStartTag (HtmlTagId.P);\n                htmlWriter.WriteText (GetOnDateSenderWrote (original));\n                htmlWriter.WriteEndTag (HtmlTagId.P);\n\n                // Wrap the original content in a <blockquote>\n                htmlWriter.WriteStartTag (HtmlTagId.BlockQuote);\n                htmlWriter.WriteAttribute (HtmlAttributeId.Style, \"border-left: 1px #ccc solid; margin: 0 0 0 .8ex; padding-left: 1ex;\");\n\n                ctx.InvokeCallbackForEndTag = true;\n            }\n        } else {\n            // pass the tag through to the output\n            ctx.WriteTag (htmlWriter, true);\n        }\n    }\n\n    string QuoteText (string text)\n    {\n        using (var quoted = new StringWriter ()) {\n            quoted.WriteLine (GetOnDateSenderWrote (original));\n\n            using (var reader = new StringReader (text)) {\n                string line;\n\n                while ((line = reader.ReadLine ()) != null) {\n                    quoted.Write (\"> \");\n                    quoted.WriteLine (line);\n                }\n            }\n\n            return quoted.ToString ();\n        }\n    }\n\n    protected override void VisitTextPart (TextPart entity)\n    {\n        string text;\n\n        if (entity.IsHtml) {\n            var converter = new HtmlToHtml {\n                HtmlTagCallback = HtmlTagCallback\n            };\n\n            text = converter.Convert (entity.Text);\n        } else if (entity.IsFlowed) {\n            var converter = new FlowedToText ();\n\n            text = converter.Convert (entity.Text);\n            text = QuoteText (text);\n        } else {\n            // quote the original message text\n            text = QuoteText (entity.Text);\n        }\n\n        var part = new TextPart (entity.ContentType.MediaSubtype.ToLowerInvariant ()) {\n            Text = text\n        };\n\n        Push (part);\n    }\n\n    protected override void VisitMessagePart (MessagePart entity)\n    {\n        // don't descend into message/rfc822 parts\n    }\n\n    protected override void VisitMimePart (MimePart entity)\n    {\n        if (isRelated > 0 || !entity.IsAttachment) {\n            var parent = stack.Peek ();\n            parent.Add (entity);\n        }\n    }\n}\n```\n\n```csharp\npublic static MimeMessage Reply (MimeMessage message, MailboxAddress from, bool replyToAll)\n{\n    var visitor = new ReplyVisitor (from, replyToAll);\n\n    visitor.Visit (message);\n\n    return visitor.Reply;\n}\n```\n\n### <a id=\"forward-message\">Q: How can I forward a message?</a>\n\nThere are 2 common ways of forwarding a message: attaching the original message as an attachment and inlining\nthe message body much like replying typically does. Which method you choose is up to you.\n\nTo forward a message by attaching it as an attachment, you would do something like this:\n\n```csharp\npublic static MimeMessage Forward (MimeMessage original, MailboxAddress from, IEnumerable<InternetAddress> to)\n{\n    var message = new MimeMessage ();\n    message.From.Add (from);\n    message.To.AddRange (to);\n\n    // set the forwarded subject\n    if (!original.Subject?.StartsWith (\"FW:\", StringComparison.OrdinalIgnoreCase))\n        message.Subject = \"FW: \" + (original.Subject ?? string.Empty);\n    else\n        message.Subject = original.Subject;\n\n    // create the main textual body of the message\n    var text = new TextPart (\"plain\") { Text = \"Here's the forwarded message:\" };\n\n    // create the message/rfc822 attachment for the original message\n    var rfc822 = new MessagePart { Message = original };\n    \n    // create a multipart/mixed container for the text body and the forwarded message\n    var multipart = new Multipart (\"mixed\");\n    multipart.Add (text);\n    multipart.Add (rfc822);\n\n    // set the multipart as the body of the message\n    message.Body = multipart;\n\n    return message;\n}\n```\n\nTo forward a message by inlining the original message's text content, you can do something like this:\n\n```csharp\npublic static MimeMessage Forward (MimeMessage original, MailboxAddress from, IEnumerable<InternetAddress> to)\n{\n    var message = new MimeMessage ();\n    message.From.Add (from);\n    message.To.AddRange (to);\n\n    // set the forwarded subject\n    if (!original.Subject?.StartsWith (\"FW:\", StringComparison.OrdinalIgnoreCase))\n        message.Subject = \"FW: \" + (original.Subject ?? string.Empty);\n    else\n        message.Subject = original.Subject;\n\n    // quote the original message text\n    using (var text = new StringWriter ()) {\n        text.WriteLine ();\n        text.WriteLine (\"-------- Original Message --------\");\n        text.WriteLine (\"Subject: {0}\", original.Subject ?? string.Empty);\n        text.WriteLine (\"Date: {0}\", DateUtils.FormatDate (original.Date));\n        text.WriteLine (\"From: {0}\", original.From);\n        text.WriteLine (\"To: {0}\", original.To);\n        text.WriteLine ();\n\n        text.Write (original.TextBody);\n\n        message.Body = new TextPart (\"plain\") {\n            Text = text.ToString ()\n        };\n    }\n\n    return message;\n}\n```\n\nKeep in mind that not all messages will have a `TextBody` available, so you'll have to find a way to handle those cases.\n\n## ImapClient\n\n### <a id=\"imap-unread-count\">Q: How can I get the number of unread messages in a folder?</a>\n\nIf the folder is open (via [Open](https://www.mimekit.net/docs/html/Overload_MailKit_Net_Imap_ImapFolder_Open.htm)),\nthen the [ImapFolder.Unread](https://www.mimekit.net/docs/html/P_MailKit_MailFolder_Unread.htm) property will be kept\nup to date (at least as-of the latest command issued to the server).\n\nIf the folder *isn't* open, then you will need to query the unread state of the folder using the\n[Status](https://www.mimekit.net/docs/html/M_MailKit_Net_Imap_ImapFolder_Status.htm) method with the\nappropriate [StatusItems](https://www.mimekit.net/docs/html/T_MailKit_StatusItems.htm) flag(s).\n\nFor example, to get the total *and* unread counts, you can do this:\n\n```csharp\nfolder.Status (StatusItems.Count | StatusItems.Unread);\n\nint total = folder.Count;\nint unread = folder.Unread;\n```\n\n### <a id=\"imap-search-date-range\">Q: How can I search for messages delivered between two dates?</a>\n\nThe obvious solution is:\n\n```csharp\nvar query = SearchQuery.DeliveredAfter (dateRange.BeginDate)\n    .And (SearchQuery.DeliveredBefore (dateRange.EndDate));\nvar results = folder.Search (query);\n```\n\nHowever, it has been reported to me that this doesn't work reliably depending on the IMAP server implementation.\n\nIf you find that this query doesn't get the expected results for your IMAP server, here's another solution that\nshould always work:\n\n```csharp\nvar query = SearchQuery.Not (SearchQuery.DeliveredBefore (dateRange.BeginDate)\n    .Or (SearchQuery.DeliveredAfter (dateRange.EndDate)));\nvar results = folder.Search (query);\n```\n\n### <a id=\"imap-client-busy\">Q: What does \"The ImapClient is currently busy processing a command.\" mean?</a>\n\nIf you get an InvalidOperationException with the message, \"The ImapClient is currently busy processing a\ncommand.\", it means that you are trying to use the\n[ImapClient](https://www.mimekit.net/docs/html/T_MailKit_Net_Imap_ImapClient.htm) and/or one of its\n[ImapFolder](https://www.mimekit.net/docs/html/T_MailKit_Net_Imap_ImapFolder.htm)s from multiple\nthreads.\n\nTo avoid this situation, you'll need to lock the `SyncRoot` property of the `ImapClient` and `ImapFolder`\nobjects when performing operations on them.\n\nFor example:\n\n```csharp\nlock (client.SyncRoot) {\n    client.NoOp ();\n}\n```\n\nNote: Locking the `SyncRoot` is only necessary when using the synchronous API's. All `Async()` method variants\nalready do this locking for you.\n\n### <a id=\"imap-folder-not-open-exception\">Q: Why do I get InvalidOperationException: \"The folder is not currently open.\"?</a>\n\nIf you get this exception, it's probably because you thought you had to open the destination folder that you\npassed as an argument to one of the\n[CopyTo](https://www.mimekit.net/docs/html/Overload_MailKit_MailFolder_CopyTo.htm) or\n[MoveTo](https://www.mimekit.net/docs/html/Overload_MailKit_MailFolder_MoveTo.htm) methods. When you opened\nthat destination folder, you also inadvertently closed the source folder which is why you are getting this\nexception.\n\nThe IMAP server can only have a single folder open at a time. Whenever you open a folder, you automatically\nclose the previously opened folder.\n\nWhen copying or moving messages from one folder to another, you only need to have the source folder open.\n\n### <a id=\"imap-move-does-not-move\">Q: Why doesn't ImapFolder.MoveTo() move the message out of the source folder?</a>\n\nIf you look at the source code for the `ImapFolder.MoveTo()` method, what you'll notice is that\nthere are several code paths depending on the features that the IMAP server supports.\n\nIf the IMAP server supports the `MOVE` extension, then MailKit's `MoveTo()` method will use the\n`MOVE` command. I suspect that your server does not support the `MOVE` command or you probably\nwouldn't be seeing what you are seeing.\n\nWhen the IMAP server does not support the `MOVE` command, MailKit has to use the `COPY` command to\ncopy the message(s) to the destination folder. Once the `COPY` command has completed, it will then\nmark the messages that you asked it to move for deletion by setting the `\\Deleted` flag on those\nmessages.\n\nIf the server supports the `UIDPLUS` extension, then MailKit will attempt to `EXPUNGE` the subset of\nmessages that it just marked for deletion, however, if the `UIDPLUS` extension is not supported by the\nIMAP server, then it cannot safely expunge just that subset of messages and so it stops there.\n\nMy guess is that your server supports neither `MOVE` nor `UIDPLUS` and that is why clients like Outlook\ncontinue to see the messages in your folder. I believe, however, that Outlook has a setting to show\ndeleted messages with a strikeout (which you probably have disabled).\n\nSo to answer your question more succinctly: After calling `folder.MoveTo (...);`, if you are confident\nthat the messages marked for deletion should be expunged, call `folder.Expunge ();`\n\n### <a id=\"imap-mark-as-read\">Q: How can I mark messages as read for IMAP?</a>\n\nThe way to mark messages as read using the IMAP protocol is to set the `\\Seen` flag on the message(s).\n\nTo do this using MailKit, you will first need to know either the index(es) or the UID(s) of the messages\nthat you would like to set the `\\Seen` flag on. Once you have that information, you will want to call\none of the\n[AddFlags](https://www.mimekit.net/docs/html/Overload_MailKit_MailFolder_AddFlags.htm) methods on the\n`ImapFolder`. For example:\n\n```csharp\nfolder.AddFlags (uids, MessageFlags.Seen, true);\n```\n\nTo mark messages as unread, you would *remove* the `\\Seen` flag, like so:\n\n```csharp\nfolder.RemoveFlags (uids, MessageFlags.Seen, true);\n```\n\n### <a id=\"imap-folder-resync\">Q: How can I re-synchronize the cache for an IMAP folder?</a>\n\nAssuming your IMAP server does not support the `QRESYNC` extension (which simplifies this procedure a ton),\nhere is some simple code to illustrate how to go about re-synchronizing your cache with the remote IMAP\nserver.\n\n```csharp\n/// <summary>\n/// Just a simple class to represent the cached information about a message.\n/// </summary>\nclass CachedMessageInfo\n{\n    public UniqueId UniqueId;\n    public MessageFlags Flags;\n    public HashSet<string> Keywords;\n    public Envelope Envelope;\n    public BodyPart Body;\n}\n\n/// <summary>\n/// Resynchronize the cache with the remote IMAP folder.\n/// </summary>\n/// <param name=\"folder\">The IMAP folder.</param>\n/// <param name=\"cache\">The local cache of message metadata.</param>\n/// <param name=\"cachedUidValidity\">The cached UIDVALIDITY value of the IMAP folder from a previous session.</param>\nstatic void ResyncFolder (ImapFolder folder, List<CachedMessageInfo> cache, ref uint cachedUidValidity)\n{\n    IList<IMessageSummary> summaries;\n\n    // Step 1: Open the folder.\n\n    // Note: we only need read-only access to update our cache, but depending on\n    // what you plan to do with the folder after resynchronizing, you may want\n    // top open the folder in read-write mode instead.\n    folder.Open (FolderAccess.ReadOnly);\n\n    if (cache.Count > 0) {\n        if (folder.UidValidity == cachedUidValidity) {\n            // Step 2: Remove messages from our cache that no longer exist on the server.\n\n            // get the full list of UIDs on the server...\n            var all = folder.Search (SearchQuery.All);\n\n            // remove any messages from our cache that no longer exist...\n            for (int i = 0; i < cache.Count; i++) {\n                if (!all.Contains (cache[i].UniqueId)) {\n                    cache.RemoveAt (i);\n                    i--;\n                }\n            }\n\n            // Step 3: Sync any flag changes for our cached messages.\n\n            // get a list of known uids... astute observers will note that an easy\n            // optimization to make here would be to merge this loop with the above\n            // loop.\n            var known = new UniqueIdSet (SortOrder.Ascending);\n            for (int i = 0; i < cache.Count; i++)\n                known.Add (cache[i].UniqueId);\n\n            // fetch the flags for our known messages...\n            summaries = folder.Fetch (known, MessageSummaryItems.Flags);\n            for (int i = 0; i < summaries.Count; i++) {\n                // Note: the indexes should match up with our cache, but it wouldn't\n                // hurt to add error checking to make sure. I'm not bothering to here\n                // for simplicity reasons.\n                cache[i].Flags = summaries[i].Flags.Value;\n                cache[i].Keywords = summaries[i].Keywords;\n            }\n        } else {\n            // The UIDVALIDITY of the folder has changed. This means that our entire\n            // cache is obsolete. We need to clear our cache and start from scratch.\n            cachedUidValidity = folder.UidValidity;\n            cache.Clear ();\n        }\n    } else {\n        // We have nothing cached, so just start from scratch.\n        cachedUidValidity = folder.UidValidity;\n    }\n\n    // Step 4: Fetch the messages we don't already know about and add them to our cache.\n\n    summaries = folder.Fetch (cache.Count, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure);\n    for (int i = 0; i < summaries.Count; i++) {\n        cache.Add (new CachedMessageInfo {\n            UniqueId = summaries[i].UniqueId,\n            Flags = summaries[i].Flags.Value,\n            Keywords = summaries[i].Keywords,\n            Envelope = summaries[i].Envelope,\n            Body = summaries[i].Body\n        });\n    }\n\n    // Tada! Now we are resynchronized with the server!\n}\n```\n\n### <a href=\"office365-shared-mailboxes\">Q: How can I login using a shared mailbox in Office365?</a>\n\n```csharp\nvar result = await GetPublicClientOAuth2CredentialsAsync (\"IMAP\", \"sharedMailboxName@custom-domain.com\");\n\n// Note: We always use result.Account.Username instead of `Username` because the user may have selected an alternative account.\nvar oauth2 = new SaslMechanismOAuth2 (result.Account.Username, result.AccessToken);\n\nusing (var client = new ImapClient ()) {\n    await client.ConnectAsync (\"outlook.office365.com\", 993, SecureSocketOptions.SslOnConnect);\n    await client.AuthenticateAsync (oauth2);\n\n    // ...\n\n    await client.DisconnectAsync (true);\n}\n```\n\nNotes:\n\n1. The `GetPublicClientOAuth2CredentialsAsync()` method used in this example code snippet can be found in the\n[ExchangeOAuth2.md](ExchangeOAuth2.md#desktop-and-mobile-applications) documentation.\n2. Some users have reported that they need to use `\"username@custom-domain.com\\\\sharedMailboxName\"` as their\nusername instead of `\"sharedMailboxName@custom-domain.com\"`.\n\n## SmtpClient\n\n### <a id=\"smtp-sent-folder\">Q: Why doesn't the message show up in the \"Sent Mail\" folder after sending it?</a>\n\nIt seems to be a common misunderstanding that messages sent via SMTP will magically show up in the account's \"Sent Mail\" folder.\n\nIn order for the message to show up in the \"Sent Mail\" folder, you will need to append the message to the \"Sent Mail\" folder\nyourself because the SMTP protocol does not support doing this automatically.\n\nIf the \"Sent Mail\" folder is a local mbox folder, you'll need to append it like this:\n\n```csharp\nusing (var mbox = File.Open (\"C:\\\\path\\\\to\\\\Sent Mail.mbox\", FileMode.Append, FileAccess.Write)) {\n    var marker = string.Format (\"From MAILER-DAEMON {0}{1}\", DateTime.Now.ToString (CultureInfo.InvariantCulture, \"ddd MMM d HH:mm:ss yyyy\"), Environment.NewLine);\n    var bytes = Encoding.ASCII.GetBytes (marker);\n    \n    // Write the mbox marker bytes.\n    mbox.Write (bytes, 0, bytes.Length);\n    \n    // Write the message, making sure to escape any line that looks like an mbox From-marker.\n    using (var filtered = new FilteredStream (stream)) {\n        filtered.Add (new MboxFromMarker ());\n        message.WriteTo (filtered);\n        filtered.Flush ();\n    }\n    \n    mbox.Flush ();\n}\n```\n\nIf the \"Sent Mail\" folder exists on an IMAP server, you would need to do something more like this:\n\n```csharp\nusing (var client = new ImapClient ()) {\n    client.Connect (\"imap.server.com\", 993, SecureSocketOptions.SslOnConnect);\n    client.Authenticate (\"username\", \"password\");\n    \n    IMailFolder sentMail;\n    \n    if (client.Capabilities.HasFlag (ImapCapabilities.SpecialUse)) {\n        sentMail = client.GetFolder (SpecialFolder.Sent);\n    } else {\n        var personal = client.GetFolder (client.PersonalNamespaces[0]);\n        \n        // Note: This assumes that the \"Sent Mail\" folder lives at the root of the folder hierarchy\n        // and is named \"Sent Mail\" as opposed to \"Sent\" or \"Sent Items\" or any other variation.\n        sentMail = personal.GetSubfolder (\"Sent Mail\");\n    }\n    \n    sentMail.Append (message, MessageFlags.Seen);\n    \n    client.Disconnect (true);\n}\n```\n\n### <a id=\"smtp-specified-pickup-directory\">Q: How can I send email to a SpecifiedPickupDirectory?</a>\n\nBased on Microsoft's [referencesource](https://github.com/Microsoft/referencesource/blob/master/System/net/System/Net/mail/SmtpClient.cs#L401),\nwhen `SmtpDeliveryMethod.SpecifiedPickupDirectory` is used, the `SmtpClient` saves the message to the\nspecified pickup directory location using a randomly generated filename based on\n`Guid.NewGuid ().ToString () + \".eml\"`, so to achieve the same results with MailKit, you could do something\nlike this:\n\n```csharp\npublic static void SaveToPickupDirectory (MimeMessage message, string pickupDirectory)\n{\n    do {\n        // Generate a random file name to save the message to.\n        var path = Path.Combine (pickupDirectory, Guid.NewGuid ().ToString () + \".eml\");\n        Stream stream;\n\n        try {\n            // Attempt to create the new file.\n            stream = File.Open (path, FileMode.CreateNew);\n        } catch (IOException) {\n            // If the file already exists, try again with a new Guid.\n            if (File.Exists (path))\n                continue;\n\n            // Otherwise, fail immediately since it probably means that there is\n            // no graceful way to recover from this error.\n            throw;\n        }\n\n        try {\n            using (stream) {\n                // IIS pickup directories expect the message to be \"byte-stuffed\"\n                // which means that lines beginning with \".\" need to be escaped\n                // by adding an extra \".\" to the beginning of the line.\n                //\n                // Use an SmtpDataFilter \"byte-stuff\" the message as it is written\n                // to the file stream. This is the same process that an SmtpClient\n                // would use when sending the message in a `DATA` command.\n                using (var filtered = new FilteredStream (stream)) {\n                    filtered.Add (new SmtpDataFilter ());\n\n                    // Make sure to write the message in DOS (<CR><LF>) format.\n                    var options = FormatOptions.Default.Clone ();\n                    options.NewLineFormat = NewLineFormat.Dos;\n\n                    message.WriteTo (options, filtered);\n                    filtered.Flush ();\n                    return;\n                }\n            }\n        } catch {\n            // An exception here probably means that the disk is full.\n            //\n            // Delete the file that was created above so that incomplete files are not\n            // left behind for IIS to send accidentally.\n            File.Delete (path);\n            throw;\n        }\n    } while (true);\n}\n```\n\n### <a id=\"smtp-request-read-receipt\">Q: How can I request a notification when the message is read by the user?</a>\n\nThe first thing I need to make clear is that requesting a notification does not guarantee that you'll actually\nget one. In order for you to receive a notification that the message was read by its recipient, the recipient's\nmail client needs to know how to send such a notification *and* that the user has enabled it to do so.\n\nThat said, here's how you can request a notification when the recipient reads the message that has been sent:\n\n```csharp\n// Add the following header to tell the recipient's client that you want to receive a\n// notification when the message has been read by the user.\nmessage.Headers[HeaderId.DispositionNotificationTo] = new MailboxAddress (\"My Name\", \"me@example.com\").ToString (true);\n```\n\nFor more information on this topic, read [rfc3798](https://tools.ietf.org/html/rfc3798).\n\n### <a id=\"smtp-process-read-receipt\">Q: How can I process a read receipt notification?</a>\n\nA read receipt notification comes in the form of a MIME message with a top-level MIME part with a MIME-type\nof `multipart/report` that has a `report-type` parameter with a value of `disposition-notification`.\n\nYou could check for this in code like this:\n\n```csharp\nvar report = message.Body as MultipartReport;\nif (report != null && report.ReportType.Equals (\"disposition-notification\", StringComparison.OrdinalIgnoreCase)) {\n    // This is a read receipt notification.\n}\n```\n\nThe first part of the `multipart/report` will be a human-readable explanation of the notification.\n\nThe second part will have a MIME-type of `message/disposition-notification` and be represented by\na [MessageDispositionNotification](https://www.mimekit.net/docs/html/T_MimeKit_MessageDispositionNotification.htm).\n\nThis notification part will contain a list of header-like fields containing information about the\nmessage that this notification is for such as the `Original-Message-Id`, `Original-Recipient`, etc.\n\n```csharp\nvar notification = report[1] as MessageDispositionNotification;\nif (notification != null) {\n    // Get the Message-Id of the message this notification is for...\n    var messageId = notification.Fields[\"Original-Message-Id\"];\n}\n```\n\nFor more information on this topic, read [rfc3798](https://tools.ietf.org/html/rfc3798).\n"
  },
  {
    "path": "GMailOAuth2.md",
    "content": "# Using OAuth2 With GMail (IMAP, POP3 or SMTP)\n\n## Quick Index\n\n* [Setting up OAuth2 for use with Google Mail](#setting-up-oauth2-for-use-with-google-mail)\n  * [Register Your Application with Google](#register-your-application-with-google)\n  * [Obtaining an OAuth2 Client ID and Secret](#obtaining-an-oauth2-client-id-and-secret)\n* [Authenticating a Desktop App with the OAuth2 Client ID and Secret](#authenticating-a-desktop-app-with-the-oauth2-client-id-and-secret)\n* [Authenticating an ASP.NET Web App with the OAuth2 Client ID and Secret](#authenticating-an-aspnet-web-app-with-the-oauth2-client-id-and-secret)\n\n## Setting up OAuth2 for use with Google Mail\n\n### Register Your Application with Google\n\nGo to [Google's Developer Console](https://cloud.google.com/console).\n\nClick the **Select A Project** button in the **Navigation Bar** at the top of the screen.\n\n![Click \"Select A Project\"](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/click-select-a-project.png)\n\nClick the **New Project** button.\n\n![Click \"New Project\"](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/click-new-project.png)\n\nFill in the name **Project Name**, and if appropriate, select the **Organization** that your program\nshould be associated with. Then click *Create*.\n\n![Create New Project](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/create-new-project.png)\n\n### Obtaining an OAuth2 Client ID and Secret\n\nClick the **☰** symbol, move down to **APIs & Services** and then select **OAuth consent screen**.\n\n![Click \"OAuth consent screen\"](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/click-oauth-consent-screen-menu.png)\n\nSelect the **External** radio item and then click **Create**.\n\n![Select \"External\"](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/select-external.png)\n\nFill in the **Application name** and any other fields that are appropriate for your application and then click\n**Create**.\n\n![OAuth consent screen](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/oauth-consent-screen.png)\n\nClick **+ Create Credentials** and then select **OAuth client ID**.\n\n![Click \"Create Credentials\"](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/click-create-credentials.png)\n\nSelect the **Other** radio item in the **Application type** section and then type in a name to use for the OAuth\nclient ID. Once completed, click **Create**.\n\n![Select \"Other\"](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/select-application-type-other.png)\n\nAt this point, you will be presented with a web dialog that will allow you to copy the **Client ID** and\n**Client Secret** strings into your clipboard to paste them into your program.\n\n![Client ID and Secret](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/google-developer-console/client-id-and-secret.png)\n\n## Authenticating a Desktop App with the OAuth2 Client ID and Secret\n\nNow that you have the **Client ID** and **Client Secret** strings, you'll need to plug those values into\nyour application.\n\nThe following sample code uses the [Google.Apis.Auth](https://www.nuget.org/packages/Google.Apis.Auth/)\nnuget package for obtaining the access token which will be needed by MailKit to pass on to the GMail\nserver.\n\n```csharp\nconst string GMailAccount = \"username@gmail.com\";\n\nvar clientSecrets = new ClientSecrets {\n    ClientId = \"XXX.apps.googleusercontent.com\",\n    ClientSecret = \"XXX\"\n};\n\nvar codeFlow = new GoogleAuthorizationCodeFlow (new GoogleAuthorizationCodeFlow.Initializer {\n    // Cache tokens in ~/.local/share/google-filedatastore/CredentialCacheFolder on Linux/Mac\n    DataStore = new FileDataStore (\"CredentialCacheFolder\", false),\n    Scopes = new [] { \"https://mail.google.com/\" },\n    ClientSecrets = clientSecrets,\n    LoginHint = GMailAccount\n});\n\n// Note: For a web app, you'll want to use AuthorizationCodeWebApp instead.\nvar codeReceiver = new LocalServerCodeReceiver ();\nvar authCode = new AuthorizationCodeInstalledApp (codeFlow, codeReceiver);\n\nvar credential = await authCode.AuthorizeAsync (GMailAccount, CancellationToken.None);\n\nif (credential.Token.IsStale)\n    await credential.RefreshTokenAsync (CancellationToken.None);\n\nvar oauth2 = new SaslMechanismOAuthBearer (credential.UserId, credential.Token.AccessToken);\n\nusing (var client = new ImapClient ()) {\n    await client.ConnectAsync (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n    await client.AuthenticateAsync (oauth2);\n    await client.DisconnectAsync (true);\n}\n```\n\n## Authenticating an ASP.NET Web App with the OAuth2 Client ID and Secret\n\nNow that you have the **Client ID** and **Client Secret** strings, you'll need to plug those values into\nyour application.\n\nThe following sample code uses the [Google.Apis.Auth](https://www.nuget.org/packages/Google.Apis.Auth/)\nnuget package for obtaining the access token which will be needed by MailKit to pass on to the GMail\nserver.\n\nAdd Google Authentication processor to your **Program.cs**.\n\n```csharp\nbuilder.Services.AddAuthentication (options => {\n    // This forces challenge results to be handled by Google OpenID Handler, so there's no\n    // need to add an AccountController that emits challenges for Login.\n    options.DefaultChallengeScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;\n    \n    // This forces forbid results to be handled by Google OpenID Handler, which checks if\n    // extra scopes are required and does automatic incremental auth.\n    options.DefaultForbidScheme = GoogleOpenIdConnectDefaults.AuthenticationScheme;\n    \n    // Default scheme that will handle everything else.\n    // Once a user is authenticated, the OAuth2 token info is stored in cookies.\n    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;\n})\n.AddCookie (options => {\n    options.ExpireTimeSpan = TimeSpan.FromMinutes (5);\n})\n.AddGoogleOpenIdConnect (options => {\n    var secrets = GoogleClientSecrets.FromFile (\"client_secret.json\").Secrets;\n    options.ClientId = secrets.ClientId;\n    options.ClientSecret = secrets.ClientSecret;\n});\n```\n\nEnsure that you are using Authorization and HttpsRedirection in your **Program.cs**:\n\n```csharp\napp.UseHttpsRedirection ();\napp.UseStaticFiles ();\n\napp.UseRouting ();\n\napp.UseAuthentication ();\napp.UseAuthorization ();\n```\n\nNow, using the **GoogleScopedAuthorizeAttribute**, you can request scopes saved in a library as constants and request tokens for these scopes.\n\n```csharp\n[GoogleScopedAuthorize(DriveService.ScopeConstants.DriveReadonly)]\npublic async Task AuthenticateAsync ([FromServices] IGoogleAuthProvider auth)\n{\n    GoogleCredential? googleCred = await auth.GetCredentialAsync ();\n    string token = await googleCred.UnderlyingCredential.GetAccessTokenForRequestAsync ();\n    \n    var oauth2 = new SaslMechanismOAuthBearer (\"UserEmail\", token);\n    \n    using var emailClient = new ImapClient ();\n    await emailClient.ConnectAsync (\"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect);\n    await emailClient.AuthenticateAsync (oauth2);\n    await emailClient.DisconnectAsync (true);\n}\n```\n\nAll of that and more has been described in Google's [OAuth 2.0](https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc)\ndocumentation. However, be careful since [Asp.Net MVC](https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-asp.net-mvc)\ndoes not work for Asp.Net Core.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (C) 2013-2026 .NET Foundation and Contributors\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\nall copies 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\nTHE SOFTWARE."
  },
  {
    "path": "MailKit/AccessControl.cs",
    "content": "﻿//\n// AccessControl.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An Access Control.\n\t/// </summary>\n\t/// <remarks>\n\t/// An Access Control is a set of permissions available for a particular identity,\n\t/// controlling whether or not that identity has the ability to perform various tasks.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\tpublic class AccessControl\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessControl\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.AccessControl\"/> with the given name and\n\t\t/// access rights.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic AccessControl (string name, IEnumerable<AccessRight> rights)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tRights = new AccessRights (rights);\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessControl\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.AccessControl\"/> with the given name and\n\t\t/// access rights.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic AccessControl (string name, string rights)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tRights = new AccessRights (rights);\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessControl\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.AccessControl\"/> with the given name and no\n\t\t/// access rights.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AccessControl (string name)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tRights = new AccessRights ();\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The identifier name for the access control.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The identifier name for the access control.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The identifier name.</value>\n\t\tpublic string Name {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the access rights.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The access rights.</value>\n\t\tpublic AccessRights Rights {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AccessControlList.cs",
    "content": "﻿//\n// AccessControlList.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An Access Control List (ACL)\n\t/// </summary>\n\t/// <remarks>\n\t/// An Access Control List (ACL) is a list of access controls defining the permissions\n\t/// various identities have available.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\tpublic class AccessControlList : List<AccessControl>\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessControlList\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.AccessControlList\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"controls\">The list of access controls.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"controls\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AccessControlList (IEnumerable<AccessControl> controls) : base (controls)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessControlList\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.AccessControlList\"/>.\n\t\t/// </remarks>\n\t\tpublic AccessControlList ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AccessRight.cs",
    "content": "﻿//\n// AccessRight.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An individual Access Right to be used with ACLs.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An individual Access Right meant to be used with\n\t/// <see cref=\"AccessControlList\"/>.</para>\n\t/// <para>For more information on what rights are available,\n\t/// see https://tools.ietf.org/html/rfc4314#section-2.1\n\t/// </para>\n\t/// </remarks>\n\tpublic readonly struct AccessRight : IEquatable<AccessRight>\n\t{\n\t\t/// <summary>\n\t\t/// The access right for folder lookups.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Allows the <see cref=\"MailKit.IMailFolder\"/> to be visible when listing folders.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight LookupFolder = new AccessRight ('l');\n\n\t\t/// <summary>\n\t\t/// The access right for opening a folder and getting the status.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access for opening and getting the status of the folder.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight OpenFolder = new AccessRight ('r');\n\n\t\t/// <summary>\n\t\t/// The access right for adding or removing the Seen flag on messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to add or remove the <see cref=\"MessageFlags.Seen\"/> flag on messages within the\n\t\t/// <see cref=\"MailKit.IMailFolder\"/>.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight SetMessageSeen = new AccessRight ('s');\n\n\t\t/// <summary>\n\t\t/// The access right for adding or removing flags (other than Seen and Deleted)\n\t\t/// on messages in a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to add or remove the <see cref=\"MessageFlags\"/> on messages\n\t\t/// (other than <see cref=\"MessageFlags.Seen\"/> and\n\t\t/// <see cref=\"MessageFlags.Deleted\"/>) within the folder.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight SetMessageFlags = new AccessRight ('w');\n\n\t\t/// <summary>\n\t\t/// The access right allowing messages to be appended or copied into the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to append or copy messages into the folder.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight AppendMessages = new AccessRight ('i');\n\n\t\t/// <summary>\n\t\t/// The access right allowing subfolders to be created.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to create subfolders.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight CreateFolder = new AccessRight ('k');\n\n\t\t/// <summary>\n\t\t/// The access right for deleting a folder and/or its subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to delete the folder and/or any subfolders.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight DeleteFolder = new AccessRight ('x');\n\n\t\t/// <summary>\n\t\t/// The access right for adding or removing the Deleted flag to messages within a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to add or remove the <see cref=\"MessageFlags.Deleted\"/> flag from\n\t\t/// messages within the folder. It also provides access for setting the\n\t\t/// <see cref=\"MessageFlags.Deleted\"/> flag when appending a message to a folder.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight SetMessageDeleted = new AccessRight ('t');\n\n\t\t/// <summary>\n\t\t/// The access right for expunging deleted messages in a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides access to expunge deleted messages in a folder.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight ExpungeFolder = new AccessRight ('e');\n\n\t\t/// <summary>\n\t\t/// The access right for administering the ACLs of a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Provides administrative access to change the ACLs for the folder.\n\t\t/// </remarks>\n\t\tpublic static readonly AccessRight Administer = new AccessRight ('a');\n\n\t\t/// <summary>\n\t\t/// The character representing the particular access right.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Represents the character value of the access right.\n\t\t/// </remarks>\n\t\tpublic readonly char Right;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessRight\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.AccessRight\"/> struct.\n\t\t/// </remarks>\n\t\t/// <param name=\"right\">The access right.</param>\n\t\tpublic AccessRight (char right)\n\t\t{\n\t\t\tRight = right;\n\t\t}\n\n\t\t#region IEquatable implementation\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified <see cref=\"MailKit.AccessRight\"/> is equal to the current <see cref=\"MailKit.AccessRight\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"MailKit.AccessRight\"/> is equal to the current <see cref=\"MailKit.AccessRight\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"other\">The <see cref=\"MailKit.AccessRight\"/> to compare with the current <see cref=\"MailKit.AccessRight\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"MailKit.AccessRight\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.AccessRight\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic bool Equals (AccessRight other)\n\t\t{\n\t\t\treturn other.Right == Right;\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Determines whether two access rights are equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether two access rights are equal.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"right1\"/> and <paramref name=\"right2\"/> are equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"right1\">The first access right to compare.</param>\n\t\t/// <param name=\"right2\">The second access right to compare.</param>\n\t\tpublic static bool operator == (AccessRight right1, AccessRight right2)\n\t\t{\n\t\t\treturn right1.Right == right2.Right;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether two access rights are not equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether two access rights are not equal.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"right1\"/> and <paramref name=\"right2\"/> are not equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"right1\">The first access right to compare.</param>\n\t\t/// <param name=\"right2\">The second access right to compare.</param>\n\t\tpublic static bool operator != (AccessRight right1, AccessRight right2)\n\t\t{\n\t\t\treturn right1.Right != right2.Right;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AccessRight\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AccessRight\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"obj\">The <see cref=\"System.Object\"/> to compare with the current <see cref=\"MailKit.AccessRight\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AccessRight\"/>;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic override bool Equals (object? obj)\n\t\t{\n\t\t\treturn obj is AccessRight right && right.Right == Right;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.AccessRight\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.AccessRight\"/> object.\n\t\t/// </remarks>\n\t\t/// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a hash table.</returns>\n\t\tpublic override int GetHashCode ()\n\t\t{\n\t\t\treturn Right.GetHashCode ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AccessRight\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AccessRight\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AccessRight\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn Right.ToString ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AccessRights.cs",
    "content": "﻿//\n// AccessRights.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A set of access rights.\n\t/// </summary>\n\t/// <remarks>\n\t/// The set of access rights for a particular identity.\n\t/// </remarks>\n\tpublic class AccessRights : ICollection<AccessRight>\n\t{\n\t\treadonly List<AccessRight> list = new List<AccessRight> ();\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessRights\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new set of access rights.\n\t\t/// </remarks>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"rights\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AccessRights (IEnumerable<AccessRight> rights)\n\t\t{\n\t\t\tAddRange (rights);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessRights\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new set of access rights.\n\t\t/// </remarks>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"rights\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AccessRights (string rights)\n\t\t{\n\t\t\tAddRange (rights);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AccessRights\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates an empty set of access rights.\n\t\t/// </remarks>\n\t\tpublic AccessRights ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of access rights in the collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of access rights in the collection.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget { return list.Count; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not this set of access rights is read only.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not this set of access rights is read only.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if this collection is read only; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsReadOnly {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified access right.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified access right if it is not already included.\n\t\t/// </remarks>\n\t\t/// <param name=\"right\">The access right.</param>\n\t\tvoid ICollection<AccessRight>.Add (AccessRight right)\n\t\t{\n\t\t\tAdd (right);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified access right.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified access right if it is not already included.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the right was added; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"right\">The access right.</param>\n\t\tpublic bool Add (AccessRight right)\n\t\t{\n\t\t\tif (list.Contains (right))\n\t\t\t\treturn false;\n\n\t\t\tlist.Add (right);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified right.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the right specified by the given character.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the right was added; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"right\">The right.</param>\n\t\tpublic bool Add (char right)\n\t\t{\n\t\t\treturn Add (new AccessRight (right));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the rights specified by the characters in the given string.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the rights specified by the characters in the given string.\n\t\t/// </remarks>\n\t\t/// <param name=\"rights\">The rights.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"rights\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic void AddRange (string rights)\n\t\t{\n\t\t\tif (rights == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (rights));\n\n\t\t\tfor (int i = 0; i < rights.Length; i++)\n\t\t\t\tAdd (new AccessRight (rights[i]));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the range of specified rights.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the range of specified rights.\n\t\t/// </remarks>\n\t\t/// <param name=\"rights\">The rights.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"rights\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic void AddRange (IEnumerable<AccessRight> rights)\n\t\t{\n\t\t\tif (rights == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (rights));\n\n\t\t\tforeach (var right in rights)\n\t\t\t\tAdd (right);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears the access rights.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all of the access rights.\n\t\t/// </remarks>\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tlist.Clear ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks if the set of access rights contains the specified right.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not the set of access rights already contains the specified right\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified right exists; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"right\">The access right.</param>\n\t\tpublic bool Contains (AccessRight right)\n\t\t{\n\t\t\treturn list.Contains (right);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copies all of the access rights to the specified array.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies all of the access rights into the array,\n\t\t/// starting at the specified array index.\n\t\t/// </remarks>\n\t\t/// <param name=\"array\">The array.</param>\n\t\t/// <param name=\"arrayIndex\">The array index.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"array\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"arrayIndex\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic void CopyTo (AccessRight[] array, int arrayIndex)\n\t\t{\n\t\t\tif (array == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (array));\n\n\t\t\tif (arrayIndex < 0 || arrayIndex + Count > array.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (arrayIndex));\n\n\t\t\tlist.CopyTo (array, arrayIndex);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the specified access right.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the specified access right.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the access right was removed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"right\">The access right.</param>\n\t\tpublic bool Remove (AccessRight right)\n\t\t{\n\t\t\treturn list.Remove (right);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the access right at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access right at the specified index.\n\t\t/// </remarks>\n\t\t/// <value>The access right at the specified index.</value>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic AccessRight this [int index] {\n\t\t\tget {\n\t\t\t\tif (index < 0 || index >= list.Count)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\treturn list[index];\n\t\t\t}\n\t\t}\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Get the access rights enumerator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights enumerator.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<AccessRight> GetEnumerator ()\n\t\t{\n\t\t\treturn list.GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Get the access rights enumerator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights enumerator.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn list.GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Return a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AccessRights\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AccessRights\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AccessRights\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tvar rights = new char[list.Count];\n\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t\trights[i] = list[i].Right;\n\n\t\t\treturn new string (rights);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AlertEventArgs.cs",
    "content": "﻿//\n// AlertEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Alert event arguments.\n\t/// </summary>\n\t/// <remarks>\n\t/// Some <see cref=\"IMailStore\"/> implementations, such as\n\t/// <see cref=\"MailKit.Net.Imap.ImapClient\"/>, will emit Alert\n\t/// events when they receive alert messages from the server.\n\t/// </remarks>\n\tpublic class AlertEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AlertEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AlertEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The alert message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AlertEventArgs (string message)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tMessage = message;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the alert message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The alert message will be the exact message received from the server.\n\t\t/// </remarks>\n\t\t/// <value>The alert message.</value>\n\t\tpublic string Message {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Annotation.cs",
    "content": "﻿//\n// Annotation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An annotation.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An annotation.</para>\n\t/// <para>For more information about annotations, see\n\t/// <a href=\"https://tools.ietf.org/html/rfc5257\">rfc5257</a>.</para>\n\t/// </remarks>\n\tpublic class Annotation\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Annotation\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Annotation\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"entry\">The annotation entry.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"entry\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic Annotation (AnnotationEntry entry)\n\t\t{\n\t\t\tif (entry is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (entry));\n\n\t\t\tProperties = new Dictionary<AnnotationAttribute, string?> ();\n\t\t\tEntry = entry;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation tag.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation tag.\n\t\t/// </remarks>\n\t\t/// <value>The annotation tag.</value>\n\t\tpublic AnnotationEntry Entry {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation properties.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation properties.\n\t\t/// </remarks>\n\t\t/// <value>The annotation properties.</value>\n\t\tpublic Dictionary<AnnotationAttribute, string?> Properties {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AnnotationAccess.cs",
    "content": "﻿//\n// AnnotationAccess.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An annotation access level.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An annotation access level.</para>\n\t/// <para>For more information about annotations, see\n\t/// <a href=\"https://tools.ietf.org/html/rfc5257\">rfc5257</a>.</para>\n\t/// </remarks>\n\tpublic enum AnnotationAccess\n\t{\n\t\t/// <summary>\n\t\t/// Annotations are not supported.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// Annotations are read-only.\n\t\t/// </summary>\n\t\tReadOnly,\n\n\t\t/// <summary>\n\t\t/// Annotations are read-write.\n\t\t/// </summary>\n\t\tReadWrite\n\t}\n}\n"
  },
  {
    "path": "MailKit/AnnotationAttribute.cs",
    "content": "﻿//\n// AnnotationAttribute.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An annotation attribute.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An annotation attribute.</para>\n\t/// <para>For more information about annotations, see\n\t/// <a href=\"https://tools.ietf.org/html/rfc5257\">rfc5257</a>.</para>\n\t/// </remarks>\n\tpublic class AnnotationAttribute : IEquatable<AnnotationAttribute>\n\t{\n\t\tstatic readonly char[] Wildcards = { '*', '%' };\n\n\t\t/// <summary>\n\t\t/// The annotation value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set both the private and shared values of an annotation.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationAttribute Value = new AnnotationAttribute (\"value\", AnnotationScope.Both);\n\n\t\t/// <summary>\n\t\t/// The shared annotation value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set the shared value of an annotation.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationAttribute SharedValue = new AnnotationAttribute (\"value\", AnnotationScope.Shared);\n\n\t\t/// <summary>\n\t\t/// The private annotation value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set the private value of an annotation.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationAttribute PrivateValue = new AnnotationAttribute (\"value\", AnnotationScope.Private);\n\n\t\t/// <summary>\n\t\t/// The size of an annotation value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get the size of the both the private and shared annotation values.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationAttribute Size = new AnnotationAttribute (\"size\", AnnotationScope.Both);\n\n\t\t/// <summary>\n\t\t/// The size of a shared annotation value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get the size of a shared annotation value.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationAttribute SharedSize = new AnnotationAttribute (\"size\", AnnotationScope.Shared);\n\n\t\t/// <summary>\n\t\t/// The size of a private annotation value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get the size of a private annotation value.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationAttribute PrivateSize = new AnnotationAttribute (\"size\", AnnotationScope.Private);\n\n\t\tAnnotationAttribute (string name, AnnotationScope scope)\n\t\t{\n\t\t\tswitch (scope) {\n\t\t\tcase AnnotationScope.Shared: Specifier = string.Format (\"{0}.shared\", name); break;\n\t\t\tcase AnnotationScope.Private: Specifier = string.Format (\"{0}.priv\", name); break;\n\t\t\tdefault: Specifier = name; break;\n\t\t\t}\n\t\t\tScope = scope;\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AnnotationAttribute\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AnnotationAttribute\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"specifier\">The annotation attribute specifier.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"specifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"specifier\"/> contains illegal characters.\n\t\t/// </exception>\n\t\tpublic AnnotationAttribute (string specifier)\n\t\t{\n\t\t\tif (specifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (specifier));\n\n\t\t\tif (specifier.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Annotation attribute specifiers cannot be empty.\", nameof (specifier));\n\n\t\t\t// TODO: improve validation\n\t\t\tif (specifier.IndexOfAny (Wildcards) != -1)\n\t\t\t\tthrow new ArgumentException (\"Annotation attribute specifiers cannot contain '*' or '%'.\", nameof (specifier));\n\n\t\t\tSpecifier = specifier;\n\n\t\t\tif (specifier.EndsWith (\".shared\", StringComparison.Ordinal)) {\n\t\t\t\tName = specifier.Substring (0, specifier.Length - \".shared\".Length);\n\t\t\t\tScope = AnnotationScope.Shared;\n\t\t\t} else if (specifier.EndsWith (\".priv\", StringComparison.Ordinal)) {\n\t\t\t\tName = specifier.Substring (0, specifier.Length - \".priv\".Length);\n\t\t\t\tScope = AnnotationScope.Private;\n\t\t\t} else {\n\t\t\t\tScope = AnnotationScope.Both;\n\t\t\t\tName = specifier;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the annotation attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the annotation attribute.\n\t\t/// </remarks>\n\t\t/// <value>The name of the annotation attribute.</value>\n\t\tpublic string Name {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the scope of the annotation attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the scope of the annotation attribute.\n\t\t/// </remarks>\n\t\t/// <value>The scope of the annotation attribute.</value>\n\t\tpublic AnnotationScope Scope {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation attribute specifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation attribute specifier.\n\t\t/// </remarks>\n\t\t/// <value>The annotation attribute specifier.</value>\n\t\tpublic string Specifier {\n\t\t\tget; private set;\n\t\t}\n\n\t\t#region IEquatable implementation\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified <see cref=\"MailKit.AnnotationAttribute\"/> is equal to the current <see cref=\"MailKit.AnnotationAttribute\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"MailKit.AnnotationAttribute\"/> is equal to the current <see cref=\"MailKit.AnnotationAttribute\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"other\">The <see cref=\"MailKit.AnnotationAttribute\"/> to compare with the current <see cref=\"MailKit.AnnotationAttribute\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"MailKit.AnnotationAttribute\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.AnnotationAttribute\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic bool Equals (AnnotationAttribute? other)\n\t\t{\n\t\t\treturn other?.Specifier == Specifier;\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Determines whether two annotation attributes are equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether two annotation attributes are equal.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"attr1\"/> and <paramref name=\"attr2\"/> are equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"attr1\">The first annotation attribute to compare.</param>\n\t\t/// <param name=\"attr2\">The second annotation attribute to compare.</param>\n\t\tpublic static bool operator == (AnnotationAttribute attr1, AnnotationAttribute attr2)\n\t\t{\n\t\t\treturn attr1?.Specifier == attr2?.Specifier;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether two annotation attributes are not equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether two annotation attributes are not equal.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"attr1\"/> and <paramref name=\"attr2\"/> are not equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"attr1\">The first annotation attribute to compare.</param>\n\t\t/// <param name=\"attr2\">The second annotation attribute to compare.</param>\n\t\tpublic static bool operator != (AnnotationAttribute attr1, AnnotationAttribute attr2)\n\t\t{\n\t\t\treturn attr1?.Specifier != attr2?.Specifier;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AnnotationAttribute\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AnnotationAttribute\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"obj\">The <see cref=\"System.Object\"/> to compare with the current <see cref=\"MailKit.AnnotationAttribute\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"System.Object\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.AnnotationAttribute\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic override bool Equals (object? obj)\n\t\t{\n\t\t\treturn obj is AnnotationAttribute attribute && attribute.Specifier == Specifier;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.AnnotationAttribute\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.AnnotationAttribute\"/> object.\n\t\t/// </remarks>\n\t\t/// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a hash table.</returns>\n\t\tpublic override int GetHashCode ()\n\t\t{\n\t\t\treturn Specifier.GetHashCode ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AnnotationAttribute\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AnnotationAttribute\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AnnotationAttribute\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn Specifier;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AnnotationEntry.cs",
    "content": "﻿//\n// AnnotationEntry.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An annotation entry.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An annotation entry.</para>\n\t/// <para>For more information about annotations, see\n\t/// <a href=\"https://tools.ietf.org/html/rfc5257\">rfc5257</a>.</para>\n\t/// </remarks>\n\tpublic class AnnotationEntry : IEquatable<AnnotationEntry>\n\t{\n\t\t/// <summary>\n\t\t/// An annotation entry for a comment on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a comment on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry Comment = new AnnotationEntry (\"/comment\", AnnotationScope.Both);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for a private comment on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a private comment on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry PrivateComment = new AnnotationEntry (\"/comment\", AnnotationScope.Private);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for a shared comment on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a shared comment on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry SharedComment = new AnnotationEntry (\"/comment\", AnnotationScope.Shared);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for flags on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set flags on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry Flags = new AnnotationEntry (\"/flags\", AnnotationScope.Both);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for private flags on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set private flags on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry PrivateFlags = new AnnotationEntry (\"/flags\", AnnotationScope.Private);\n\n\t\t/// <summary>\n\t\t/// Aa annotation entry for shared flags on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set shared flags on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry SharedFlags = new AnnotationEntry (\"/flags\", AnnotationScope.Shared);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for an alternate subject on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set an alternate subject on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry AltSubject = new AnnotationEntry (\"/altsubject\", AnnotationScope.Both);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for a private alternate subject on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a private alternate subject on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry PrivateAltSubject = new AnnotationEntry (\"/altsubject\", AnnotationScope.Private);\n\n\t\t/// <summary>\n\t\t/// An annotation entry for a shared alternate subject on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a shared alternate subject on a message.\n\t\t/// </remarks>\n\t\tpublic static readonly AnnotationEntry SharedAltSubject = new AnnotationEntry (\"/altsubject\", AnnotationScope.Shared);\n\n\t\tstatic void ValidatePath (string path)\n\t\t{\n\t\t\tif (path == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (path));\n\n\t\t\tif (path.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Annotation entry paths cannot be empty.\", nameof (path));\n\n\t\t\tif (path[0] != '/' && path[0] != '*' && path[0] != '%')\n\t\t\t\tthrow new ArgumentException (\"Annotation entry paths must begin with '/'.\", nameof (path));\n\n\t\t\tif (path.Length > 1 && path[1] >= '0' && path[1] <= '9')\n\t\t\t\tthrow new ArgumentException (\"Annotation entry paths must not include a part-specifier.\", nameof (path));\n\n\t\t\tif (path == \"*\" || path == \"%\")\n\t\t\t\treturn;\n\n\t\t\tchar pc = path[0];\n\n\t\t\tfor (int i = 1; i < path.Length; i++) {\n\t\t\t\tchar c = path[i];\n\n\t\t\t\tif (c > 127)\n\t\t\t\t\tthrow new ArgumentException ($\"Invalid character in annotation entry path: '{c}'.\", nameof (path));\n\n\t\t\t\tif (c >= '0' && c <= '9' && pc == '/')\n\t\t\t\t\tthrow new ArgumentException (\"Invalid annotation entry path.\", nameof (path));\n\n\t\t\t\tif ((pc == '/' || pc == '.') && (c == '/' || c == '.'))\n\t\t\t\t\tthrow new ArgumentException (\"Invalid annotation entry path.\", nameof (path));\n\n\t\t\t\tpc = c;\n\t\t\t}\n\n\t\t\tint endIndex = path.Length - 1;\n\n\t\t\tif (path[endIndex] == '/')\n\t\t\t\tthrow new ArgumentException (\"Annotation entry paths must not end with '/'.\", nameof (path));\n\n\t\t\tif (path[endIndex] == '.')\n\t\t\t\tthrow new ArgumentException (\"Annotation entry paths must not end with '.'.\", nameof (path));\n\t\t}\n\n\t\tstatic void ValidatePartSpecifier (string partSpecifier)\n\t\t{\n\t\t\tif (partSpecifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (partSpecifier));\n\n\t\t\tchar pc = '\\0';\n\n\t\t\tfor (int i = 0; i < partSpecifier.Length; i++) {\n\t\t\t\tchar c = partSpecifier[i];\n\n\t\t\t\tif (!((c >= '0' && c <= '9') || c == '.') || (c == '.' && (pc == '.' || pc == '\\0')))\n\t\t\t\t\tthrow new ArgumentException (\"Invalid part-specifier.\", nameof (partSpecifier));\n\n\t\t\t\tpc = c;\n\t\t\t}\n\n\t\t\tif (pc == '.')\n\t\t\t\tthrow new ArgumentException (\"Invalid part-specifier.\", nameof (partSpecifier));\n\t\t}\n\n\t\tAnnotationEntry (string? partSpecifier, string entry, string path, AnnotationScope scope)\n\t\t{\n\t\t\tPartSpecifier = partSpecifier;\n\t\t\tEntry = entry;\n\t\t\tPath = path;\n\t\t\tScope = scope;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AnnotationEntry\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AnnotationEntry\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"path\">The annotation entry path.</param>\n\t\t/// <param name=\"scope\">The scope of the annotation.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"path\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic AnnotationEntry (string path, AnnotationScope scope = AnnotationScope.Both)\n\t\t{\n\t\t\tValidatePath (path);\n\n\t\t\tswitch (scope) {\n\t\t\tcase AnnotationScope.Private: Entry = path + \".priv\"; break;\n\t\t\tcase AnnotationScope.Shared: Entry = path + \".shared\"; break;\n\t\t\tdefault: Entry = path; break;\n\t\t\t}\n\n\t\t\tPartSpecifier = null;\n\t\t\tPath = path;\n\t\t\tScope = scope;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AnnotationEntry\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AnnotationEntry\"/> for an individual body part of a message.\n\t\t/// </remarks>\n\t\t/// <param name=\"partSpecifier\">The part-specifier of the body part of the message.</param>\n\t\t/// <param name=\"path\">The annotation entry path.</param>\n\t\t/// <param name=\"scope\">The scope of the annotation.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"path\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"partSpecifier\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"path\"/> is invalid.</para>\n\t\t/// </exception>\n\t\tpublic AnnotationEntry (string partSpecifier, string path, AnnotationScope scope = AnnotationScope.Both)\n\t\t{\n\t\t\tValidatePartSpecifier (partSpecifier);\n\t\t\tValidatePath (path);\n\n\t\t\tswitch (scope) {\n\t\t\tcase AnnotationScope.Private: Entry = string.Format (\"/{0}{1}.priv\", partSpecifier, path); break;\n\t\t\tcase AnnotationScope.Shared: Entry = string.Format (\"/{0}{1}.shared\", partSpecifier, path); break;\n\t\t\tdefault: Entry = string.Format (\"/{0}{1}\", partSpecifier, path); break;\n\t\t\t}\n\n\t\t\tPartSpecifier = partSpecifier;\n\t\t\tPath = path;\n\t\t\tScope = scope;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AnnotationEntry\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AnnotationEntry\"/> for an individual body part of a message.\n\t\t/// </remarks>\n\t\t/// <param name=\"part\">The body part of the message.</param>\n\t\t/// <param name=\"path\">The annotation entry path.</param>\n\t\t/// <param name=\"scope\">The scope of the annotation.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"part\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"path\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"path\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic AnnotationEntry (BodyPart part, string path, AnnotationScope scope = AnnotationScope.Both)\n\t\t{\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\tValidatePath (path);\n\n\t\t\tswitch (scope) {\n\t\t\tcase AnnotationScope.Private: Entry = string.Format (\"/{0}{1}.priv\", part.PartSpecifier, path); break;\n\t\t\tcase AnnotationScope.Shared: Entry = string.Format (\"/{0}{1}.shared\", part.PartSpecifier, path); break;\n\t\t\tdefault: Entry = string.Format (\"/{0}{1}\", part.PartSpecifier, path); break;\n\t\t\t}\n\n\t\t\tPartSpecifier = part.PartSpecifier;\n\t\t\tPath = path;\n\t\t\tScope = scope;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation entry specifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation entry specifier.\n\t\t/// </remarks>\n\t\t/// <value>The annotation entry specifier.</value>\n\t\tpublic string Entry {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the part-specifier component of the annotation entry.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the part-specifier component of the annotation entry.\n\t\t/// </remarks>\n\t\t/// <value>The part-specifier.</value>\n\t\tpublic string? PartSpecifier {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the path component of the annotation entry.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the path component of the annotation entry.\n\t\t/// </remarks>\n\t\t/// <value>The path.</value>\n\t\tpublic string Path {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the scope of the annotation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the scope of the annotation.\n\t\t/// </remarks>\n\t\t/// <value>The scope.</value>\n\t\tpublic AnnotationScope Scope {\n\t\t\tget; private set;\n\t\t}\n\n\t\t#region IEquatable implementation\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified <see cref=\"MailKit.AnnotationEntry\"/> is equal to the current <see cref=\"MailKit.AnnotationEntry\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"MailKit.AnnotationEntry\"/> is equal to the current <see cref=\"MailKit.AnnotationEntry\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"other\">The <see cref=\"MailKit.AnnotationEntry\"/> to compare with the current <see cref=\"MailKit.AnnotationEntry\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"MailKit.AnnotationEntry\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.AnnotationEntry\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic bool Equals (AnnotationEntry? other)\n\t\t{\n\t\t\treturn other?.Entry == Entry;\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Determines whether two annotation entries are equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether two annotation entries are equal.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"entry1\"/> and <paramref name=\"entry2\"/> are equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"entry1\">The first annotation entry to compare.</param>\n\t\t/// <param name=\"entry2\">The second annotation entry to compare.</param>\n\t\tpublic static bool operator == (AnnotationEntry entry1, AnnotationEntry entry2)\n\t\t{\n\t\t\treturn entry1?.Entry == entry2?.Entry;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether two annotation entries are not equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether two annotation entries are not equal.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"entry1\"/> and <paramref name=\"entry2\"/> are not equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"entry1\">The first annotation entry to compare.</param>\n\t\t/// <param name=\"entry2\">The second annotation entry to compare.</param>\n\t\tpublic static bool operator != (AnnotationEntry entry1, AnnotationEntry entry2)\n\t\t{\n\t\t\treturn entry1?.Entry != entry2?.Entry;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AnnotationEntry\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.AnnotationEntry\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"obj\">The <see cref=\"System.Object\"/> to compare with the current <see cref=\"MailKit.AnnotationEntry\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"System.Object\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.AnnotationEntry\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic override bool Equals (object? obj)\n\t\t{\n\t\t\treturn obj is AnnotationEntry entry && entry.Entry == Entry;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.AnnotationEntry\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.AnnotationEntry\"/> object.\n\t\t/// </remarks>\n\t\t/// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a hash table.</returns>\n\t\tpublic override int GetHashCode ()\n\t\t{\n\t\t\treturn Entry.GetHashCode ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AnnotationEntry\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AnnotationEntry\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.AnnotationEntry\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn Entry;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse an annotation entry.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses an annotation entry.\n\t\t/// </remarks>\n\t\t/// <param name=\"entry\">The annotation entry.</param>\n\t\t/// <returns>The parsed annotation entry.</returns>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"entry\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.FormatException\">\n\t\t/// <paramref name=\"entry\"/> does not conform to the annotation entry syntax.\n\t\t/// </exception>\n\t\tpublic static AnnotationEntry Parse (string entry)\n\t\t{\n\t\t\tif (entry == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (entry));\n\n\t\t\tif (entry.Length == 0)\n\t\t\t\tthrow new FormatException (\"An annotation entry cannot be empty.\");\n\n\t\t\tif (entry[0] != '/' && entry[0] != '*' && entry[0] != '%')\n\t\t\t\tthrow new FormatException (\"An annotation entry must begin with a '/' character.\");\n\n\t\t\tvar scope = AnnotationScope.Both;\n\t\t\tint startIndex = 0, endIndex;\n\t\t\tstring? partSpecifier = null;\n\t\t\tvar component = 0;\n\t\t\tvar pc = entry[0];\n\t\t\tstring path;\n\n\t\t\tfor (int i = 1; i < entry.Length; i++) {\n\t\t\t\tchar c = entry[i];\n\n\t\t\t\tif (c >= '0' && c <= '9' && pc == '/') {\n\t\t\t\t\tif (component > 0)\n\t\t\t\t\t\tthrow new FormatException (\"Invalid annotation entry.\");\n\n\t\t\t\t\tstartIndex = i;\n\t\t\t\t\tendIndex = i + 1;\n\t\t\t\t\tpc = c;\n\n\t\t\t\t\twhile (endIndex < entry.Length) {\n\t\t\t\t\t\tc = entry[endIndex];\n\n\t\t\t\t\t\tif (c == '/') {\n\t\t\t\t\t\t\tif (pc == '.')\n\t\t\t\t\t\t\t\tthrow new FormatException (\"Invalid part-specifier in annotation entry.\");\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!(c >= '0' && c <= '9') && c != '.')\n\t\t\t\t\t\t\tthrow new FormatException ($\"Invalid character in part-specifier: '{c}'.\");\n\n\t\t\t\t\t\tif (c == '.' && pc == '.')\n\t\t\t\t\t\t\tthrow new FormatException (\"Invalid part-specifier in annotation entry.\");\n\n\t\t\t\t\t\tendIndex++;\n\t\t\t\t\t\tpc = c;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (endIndex >= entry.Length)\n\t\t\t\t\t\tthrow new FormatException (\"Incomplete part-specifier in annotation entry.\");\n\n\t\t\t\t\tpartSpecifier = entry.Substring (startIndex, endIndex - startIndex);\n\t\t\t\t\ti = startIndex = endIndex;\n\t\t\t\t\tcomponent++;\n\t\t\t\t} else if (c == '/' || c == '.') {\n\t\t\t\t\tif (pc == '/' || pc == '.')\n\t\t\t\t\t\tthrow new FormatException (\"Invalid annotation entry path.\");\n\n\t\t\t\t\tif (c == '/')\n\t\t\t\t\t\tcomponent++;\n\t\t\t\t} else if (c > 127) {\n\t\t\t\t\tthrow new FormatException ($\"Invalid character in annotation entry path: '{c}'.\");\n\t\t\t\t}\n\n\t\t\t\tpc = c;\n\t\t\t}\n\n\t\t\tif (pc == '/' || pc == '.')\n\t\t\t\tthrow new FormatException (\"Invalid annotation entry path.\");\n\n\t\t\tif (entry.EndsWith (\".shared\", StringComparison.Ordinal)) {\n\t\t\t\tendIndex = entry.Length - \".shared\".Length;\n\t\t\t\tscope = AnnotationScope.Shared;\n\t\t\t} else if (entry.EndsWith (\".priv\", StringComparison.Ordinal)) {\n\t\t\t\tendIndex = entry.Length - \".priv\".Length;\n\t\t\t\tscope = AnnotationScope.Private;\n\t\t\t} else {\n\t\t\t\tendIndex = entry.Length;\n\t\t\t}\n\n\t\t\tpath = entry.Substring (startIndex, endIndex - startIndex);\n\n\t\t\treturn new AnnotationEntry (partSpecifier, entry, path, scope);\n\t\t}\n\n\t\tinternal static AnnotationEntry Create (string entry)\n\t\t{\n\t\t\tswitch (entry) {\n\t\t\tcase \"/comment\": return Comment;\n\t\t\tcase \"/comment.priv\": return PrivateComment;\n\t\t\tcase \"/comment.shared\": return SharedComment;\n\t\t\tcase \"/flags\": return Flags;\n\t\t\tcase \"/flags.priv\": return PrivateFlags;\n\t\t\tcase \"/flags.shared\": return SharedFlags;\n\t\t\tcase \"/altsubject\": return AltSubject;\n\t\t\tcase \"/altsubject.priv\": return PrivateAltSubject;\n\t\t\tcase \"/altsubject.shared\": return SharedAltSubject;\n\t\t\tdefault: return Parse (entry);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AnnotationScope.cs",
    "content": "﻿//\n// AnnotationScope.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The scope of an annotation.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>Represents the scope of an annotation.</para>\n\t/// <para>For more information about annotations, see\n\t/// <a href=\"https://tools.ietf.org/html/rfc5257\">rfc5257</a>.</para>\n\t/// </remarks>\n\t[Flags]\n\tpublic enum AnnotationScope\n\t{\n\t\t/// <summary>\n\t\t/// No scopes.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// The private annotation scope.\n\t\t/// </summary>\n\t\tPrivate,\n\n\t\t/// <summary>\n\t\t/// The shared annotation scope.\n\t\t/// </summary>\n\t\tShared,\n\n\t\t/// <summary>\n\t\t/// Both private and shared scopes.\n\t\t/// </summary>\n\t\tBoth = Private | Shared\n\t}\n}\n"
  },
  {
    "path": "MailKit/AnnotationsChangedEventArgs.cs",
    "content": "﻿//\n// AnnotationsChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when an annotation changes.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when an annotation changes.\n\t/// </remarks>\n\tpublic class AnnotationsChangedEventArgs : MessageEventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.AnnotationsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AnnotationsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"annotations\">The annotations that changed.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AnnotationsChangedEventArgs (int index, IEnumerable<Annotation> annotations) : base (index)\n\t\t{\n\t\t\tif (annotations == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (annotations));\n\n\t\t\tAnnotations = new ReadOnlyCollection<Annotation> (annotations.ToArray ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotations that changed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotations that changed.\n\t\t/// </remarks>\n\t\t/// <value>The annotation.</value>\n\t\tpublic IList<Annotation> Annotations {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated mod-sequence value of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated mod-sequence value of the message, if available.\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value.</value>\n\t\tpublic ulong? ModSeq {\n\t\t\tget; internal set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AppendRequest.cs",
    "content": "﻿//\n// AppendRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for appending a message to a folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for appending a message to a folder.\n\t/// </remarks>\n\tpublic class AppendRequest : IAppendRequest\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AppendRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AppendRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AppendRequest (MimeMessage message, MessageFlags flags = MessageFlags.None)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tMessage = message;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AppendRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AppendRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The message keywords.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"keywords\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic AppendRequest (MimeMessage message, MessageFlags flags, IEnumerable<string> keywords)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords as ISet<string> ?? new HashSet<string> (keywords);\n\t\t\tMessage = message;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AppendRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AppendRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"internalDate\">The internal date of the message.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AppendRequest (MimeMessage message, MessageFlags flags, DateTimeOffset internalDate)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tMessage = message;\n\t\t\tFlags = flags;\n\t\t\tInternalDate = internalDate;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AppendRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AppendRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The message keywords.</param>\n\t\t/// <param name=\"internalDate\">The internal date of the message.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"keywords\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic AppendRequest (MimeMessage message, MessageFlags flags, IEnumerable<string> keywords, DateTimeOffset internalDate)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords as ISet<string> ?? new HashSet<string> (keywords);\n\t\t\tMessage = message;\n\t\t\tFlags = flags;\n\t\t\tInternalDate = internalDate;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message that should be appended to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message that should be appended to the folder.\n\t\t/// </remarks>\n\t\t/// <value>The message.</value>\n\t\tpublic MimeMessage Message {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the message flags that should be set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the message flags that should be set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The message flags.</value>\n\t\tpublic MessageFlags Flags {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the keywords that should be set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the keywords that should be set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The keywords.</value>\n\t\tpublic ISet<string>? Keywords {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the timestamp that should be used by folder as the <see cref=\"MessageSummaryItems.InternalDate\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the timestamp that should be used by folder as the <see cref=\"MessageSummaryItems.InternalDate\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The date and time to use for the INTERNALDATE or <see langword=\"null\" /> if it should be left up to the folder to decide.</value>\n\t\tpublic DateTimeOffset? InternalDate {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the list of annotations that should be set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the list of annotations that should be set on the message.</para>\n\t\t/// <note type=\"note\">\n\t\t/// <para>This feature is not supported by all folders.</para>\n\t\t/// <para>Use <see cref=\"IMailFolder.Supports(FolderFeature)\"/> with the <see cref=\"FolderFeature.Annotations\"/> enum value\n\t\t/// to determine if this feature is supported.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <value>The list of annotations.</value>\n\t\tpublic IList<Annotation>? Annotations {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the transfer progress reporting mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the transfer progress reporting mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The transfer progress mechanism.</value>\n\t\tpublic ITransferProgress? TransferProgress {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/AuthenticatedEventArgs.cs",
    "content": "﻿//\n// AuthenticatedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Authenticated event arguments.\n\t/// </summary>\n\t/// <remarks>\n\t/// Some servers, such as GMail IMAP, will send some free-form text in\n\t/// the response to a successful login.\n\t/// </remarks>\n\tpublic class AuthenticatedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.AuthenticatedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AuthenticatedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The free-form text.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic AuthenticatedEventArgs (string message)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tMessage = message;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the free-form text sent by the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the free-form text sent by the server.\n\t\t/// </remarks>\n\t\t/// <value>The free-form text sent by the server.</value>\n\t\tpublic string Message {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPart.cs",
    "content": "﻿//\n// BodyPart.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Globalization;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An abstract body part of a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// Each body part will actually be a <see cref=\"BodyPartBasic\"/>,\n\t/// <see cref=\"BodyPartText\"/>, <see cref=\"BodyPartMessage\"/>, or\n\t/// <see cref=\"BodyPartMultipart\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t/// </example>\n\tpublic abstract class BodyPart\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPart\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.BodyPart\"/>.\n\t\t/// </remarks>\n\t\t[Obsolete (\"Use BodyPart (ContentType, string) instead.\")]\n\t\tprotected BodyPart ()\n\t\t{\n\t\t\tContentType = new ContentType (\"application\", \"octet-stream\");\n\t\t\tPartSpecifier = string.Empty;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPart\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.BodyPart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"contentType\">The content type.</param>\n\t\t/// <param name=\"partSpecifier\">The part specifier.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"contentType\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tprotected BodyPart (ContentType contentType, string partSpecifier)\n\t\t{\n\t\t\tif (contentType == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (contentType));\n\n\t\t\tif (partSpecifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (partSpecifier));\n\n\t\t\tContentType = contentType;\n\t\t\tPartSpecifier = partSpecifier;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Type of the body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Content-Type of the body part.\n\t\t/// </remarks>\n\t\t/// <value>The content type.</value>\n\t\tpublic ContentType ContentType {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the part specifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the part specifier.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <value>The part specifier.</value>\n\t\tpublic string PartSpecifier {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dispatches to the specific visit method for this MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This default implementation for <see cref=\"MailKit.BodyPart\"/> nodes\n\t\t/// calls <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>. Override this\n\t\t/// method to call into a more specific method on a derived visitor class\n\t\t/// of the <see cref=\"MailKit.BodyPartVisitor\"/> class. However, it should still\n\t\t/// support unknown visitors by calling\n\t\t/// <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"visitor\">The visitor.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"visitor\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic abstract void Accept (BodyPartVisitor visitor);\n\n\t\tinternal static void Encode (StringBuilder builder, uint value)\n\t\t{\n\t\t\tbuilder.Append (value.ToString (CultureInfo.InvariantCulture));\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, string? value)\n\t\t{\n\t\t\tif (value != null)\n\t\t\t\tMimeUtils.AppendQuoted (builder, value);\n\t\t\telse\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, Uri? location)\n\t\t{\n\t\t\tif (location != null)\n\t\t\t\tMimeUtils.AppendQuoted (builder, location.ToString ());\n\t\t\telse\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, string[]? values)\n\t\t{\n\t\t\tif (values == null || values.Length == 0) {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbuilder.Append ('(');\n\n\t\t\tfor (int i = 0; i < values.Length; i++) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\tbuilder.Append (' ');\n\n\t\t\t\tEncode (builder, values[i]);\n\t\t\t}\n\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, IList<Parameter> parameters)\n\t\t{\n\t\t\tif (parameters == null || parameters.Count == 0) {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbuilder.Append ('(');\n\n\t\t\tfor (int i = 0; i < parameters.Count; i++) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\tbuilder.Append (' ');\n\n\t\t\t\tEncode (builder, parameters[i].Name);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t\tEncode (builder, parameters[i].Value);\n\t\t\t}\n\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, ContentDisposition? disposition)\n\t\t{\n\t\t\tif (disposition == null) {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbuilder.Append ('(');\n\t\t\tEncode (builder, disposition.Disposition);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, disposition.Parameters);\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, ContentType contentType)\n\t\t{\n\t\t\tEncode (builder, contentType.MediaType);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, contentType.MediaSubtype);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, contentType.Parameters);\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, BodyPartCollection parts)\n\t\t{\n\t\t\tif (parts == null || parts.Count == 0) {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < parts.Count; i++) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\tbuilder.Append (' ');\n\n\t\t\t\tEncode (builder, parts[i]);\n\t\t\t}\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, Envelope? envelope)\n\t\t{\n\t\t\tif (envelope == null) {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tenvelope.Encode (builder);\n\t\t}\n\n\t\tinternal static void Encode (StringBuilder builder, BodyPart? body)\n\t\t{\n\t\t\tif (body == null) {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbuilder.Append ('(');\n\t\t\tbody.Encode (builder);\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\tprotected abstract void Encode (StringBuilder builder);\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.BodyPart\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.BodyPart\"/>.</para>\n\t\t/// <note type=\"note\">The syntax of the string returned, while similar to IMAP's BODYSTRUCTURE syntax,\n\t\t/// is not completely compatible.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.BodyPart\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tbuilder.Append ('(');\n\t\t\tEncode (builder);\n\t\t\tbuilder.Append (')');\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tstatic bool IsNIL (string text, int index)\n\t\t{\n\t\t\treturn string.Compare (text, index, \"NIL\", 0, 3, StringComparison.Ordinal) == 0;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out uint value)\n\t\t{\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tint startIndex = index;\n\n\t\t\tvalue = 0;\n\n\t\t\twhile (index < text.Length && char.IsDigit (text[index]))\n\t\t\t\tvalue = (value * 10) + (uint) (text[index++] - '0');\n\n\t\t\treturn index > startIndex;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out string? nstring)\n\t\t{\n\t\t\tnstring = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] != '\"') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar token = new StringBuilder ();\n\t\t\tbool escaped = false;\n\n\t\t\tindex++;\n\n\t\t\twhile (index < text.Length) {\n\t\t\t\tif (text[index] == '\"' && !escaped)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (escaped || text[index] != '\\\\') {\n\t\t\t\t\ttoken.Append (text[index]);\n\t\t\t\t\tescaped = false;\n\t\t\t\t} else {\n\t\t\t\t\tescaped = true;\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tnstring = token.ToString ();\n\n\t\t\tindex++;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out string[]? values)\n\t\t{\n\t\t\tvalues = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] != '(') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tvar list = new List<string> ();\n\n\t\t\tdo {\n\t\t\t\tif (text[index] == ')')\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (!TryParse (text, ref index, out string? value))\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (value != null)\n\t\t\t\t\tlist.Add (value);\n\t\t\t} while (index < text.Length);\n\n\t\t\tif (index >= text.Length || text[index] != ')')\n\t\t\t\treturn false;\n\n\t\t\tvalues = list.ToArray ();\n\t\t\tindex++;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out Uri? uri)\n\t\t{\n\t\t\turi = null;\n\n\t\t\tif (!TryParse (text, ref index, out string? nstring))\n\t\t\t\treturn false;\n\n\t\t\tif (!string.IsNullOrEmpty (nstring)) {\n\t\t\t\tif (Uri.IsWellFormedUriString (nstring, UriKind.Absolute))\n\t\t\t\t\turi = new Uri (nstring, UriKind.Absolute);\n\t\t\t\telse if (Uri.IsWellFormedUriString (nstring, UriKind.Relative))\n\t\t\t\t\turi = new Uri (nstring, UriKind.Relative);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, [NotNullWhen (true)] out IList<Parameter>? parameters)\n\t\t{\n\t\t\tparameters = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] != '(') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tparameters = new List<Parameter> ();\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tparameters = new List<Parameter> ();\n\n\t\t\tdo {\n\t\t\t\tif (text[index] == ')')\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (!TryParse (text, ref index, out string? name) || name == null)\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (!TryParse (text, ref index, out string? value) || value == null)\n\t\t\t\t\treturn false;\n\n\t\t\t\tparameters.Add (new Parameter (name, value));\n\t\t\t} while (index < text.Length);\n\n\t\t\tif (index >= text.Length || text[index] != ')')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out ContentDisposition? disposition)\n\t\t{\n\t\t\tdisposition = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] != '(') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\tif (!TryParse (text, ref index, out string? value) || value == null)\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out IList<Parameter>? parameters))\n\t\t\t\treturn false;\n\n\t\t\tif (index >= text.Length || text[index] != ')')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\tdisposition = new ContentDisposition (value);\n\n\t\t\tforeach (var param in parameters)\n\t\t\t\tdisposition.Parameters.Add (param);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, bool multipart, [NotNullWhen (true)] out ContentType? contentType)\n\t\t{\n\t\t\tstring? type, subtype;\n\n\t\t\tcontentType = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (!multipart) {\n\t\t\t\tif (!TryParse (text, ref index, out type))\n\t\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\ttype = \"multipart\";\n\t\t\t}\n\n\t\t\tif (!TryParse (text, ref index, out subtype))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out IList<Parameter>? parameters))\n\t\t\t\treturn false;\n\n\t\t\tcontentType = new ContentType (type ?? \"application\", subtype ?? \"octet-stream\");\n\n\t\t\tforeach (var param in parameters)\n\t\t\t\tcontentType.Parameters.Add (param);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, string prefix, [NotNullWhen (true)] out BodyPartCollection? bodyParts)\n\t\t{\n\t\t\tstring path;\n\t\t\tint id = 1;\n\n\t\t\tbodyParts = null;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tbodyParts = new BodyPartCollection ();\n\n\t\t\tdo {\n\t\t\t\tif (text[index] != '(')\n\t\t\t\t\tbreak;\n\n\t\t\t\tpath = prefix + id;\n\n\t\t\t\tif (!TryParse (text, ref index, path, out BodyPart? part))\n\t\t\t\t\treturn false;\n\n\t\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (part != null)\n\t\t\t\t\tbodyParts.Add (part);\n\n\t\t\t\tid++;\n\t\t\t} while (index < text.Length);\n\n\t\t\treturn index < text.Length;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, string path, out BodyPart? part)\n\t\t{\n\t\t\tContentDisposition? disposition;\n\t\t\tContentType? contentType;\n\t\t\tstring[]? array;\n\t\t\tUri? location;\n\n\t\t\tpart = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length || text[index] != '(') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] == '(' || IsNIL (text, index)) {\n\t\t\t\tvar prefix = path.Length > 0 ? path + \".\" : string.Empty;\n\t\t\t\tBodyPartCollection? bodyParts = null;\n\n\t\t\t\tif (text[index] == '(') {\n\t\t\t\t\tif (!TryParse (text, ref index, prefix, out bodyParts))\n\t\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tindex += \"NIL\".Length;\n\t\t\t\t}\n\n\t\t\t\tif (!TryParse (text, ref index, true, out contentType))\n\t\t\t\t\treturn false;\n\n\t\t\t\tvar multipart = new BodyPartMultipart (contentType, path, bodyParts ?? new BodyPartCollection ());\n\n\t\t\t\tif (!TryParse (text, ref index, out disposition))\n\t\t\t\t\treturn false;\n\n\t\t\t\tmultipart.ContentDisposition = disposition;\n\n\t\t\t\tif (!TryParse (text, ref index, out array))\n\t\t\t\t\treturn false;\n\n\t\t\t\tmultipart.ContentLanguage = array;\n\n\t\t\t\tif (!TryParse (text, ref index, out location))\n\t\t\t\t\treturn false;\n\n\t\t\t\tmultipart.ContentLocation = location;\n\n\t\t\t\tpart = multipart;\n\t\t\t} else {\n\t\t\t\tBodyPartMessage? message = null;\n\t\t\t\tBodyPartText? txt = null;\n\t\t\t\tBodyPartBasic? basic;\n\t\t\t\tstring? nstring;\n\n\t\t\t\tif (!TryParse (text, ref index, false, out contentType))\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (contentType.IsMimeType (\"message\", \"rfc822\"))\n\t\t\t\t\tbasic = message = new BodyPartMessage (contentType, path);\n\t\t\t\telse if (contentType.IsMimeType (\"text\", \"*\"))\n\t\t\t\t\tbasic = txt = new BodyPartText (contentType, path);\n\t\t\t\telse\n\t\t\t\t\tbasic = new BodyPartBasic (contentType, path);\n\n\t\t\t\tif (!TryParse (text, ref index, out nstring))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentId = nstring;\n\n\t\t\t\tif (!TryParse (text, ref index, out nstring))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentDescription = nstring;\n\n\t\t\t\tif (!TryParse (text, ref index, out nstring))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentTransferEncoding = nstring;\n\n\t\t\t\tif (!TryParse (text, ref index, out uint number))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.Octets = number;\n\n\t\t\t\tif (!TryParse (text, ref index, out nstring))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentMd5 = nstring;\n\n\t\t\t\tif (!TryParse (text, ref index, out disposition))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentDisposition = disposition;\n\n\t\t\t\tif (!TryParse (text, ref index, out array))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentLanguage = array;\n\n\t\t\t\tif (!TryParse (text, ref index, out location))\n\t\t\t\t\treturn false;\n\n\t\t\t\tbasic.ContentLocation = location;\n\n\t\t\t\tif (message != null) {\n\t\t\t\t\tif (!Envelope.TryParse (text, ref index, out Envelope? envelope))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tmessage.Envelope = envelope;\n\n\t\t\t\t\tif (!TryParse (text, ref index, path, out BodyPart? body))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tmessage.Body = body;\n\n\t\t\t\t\tif (!TryParse (text, ref index, out number))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tmessage.Lines = number;\n\t\t\t\t} else if (txt != null) {\n\t\t\t\t\tif (!TryParse (text, ref index, out number))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\ttxt.Lines = number;\n\t\t\t\t}\n\n\t\t\t\tpart = basic;\n\t\t\t}\n\n\t\t\tif (index >= text.Length || text[index] != ')')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Tries to parse the given text into a new <see cref=\"MailKit.BodyPart\"/> instance.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Parses a body part from the specified text.</para>\n\t\t/// <note type=\"note\">This syntax, while similar to IMAP's BODYSTRUCTURE syntax, is not completely\n\t\t/// compatible.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the body part was successfully parsed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"text\">The text to parse.</param>\n\t\t/// <param name=\"part\">The parsed body part.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string text, out BodyPart? part)\n\t\t{\n\t\t\tif (text == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (text));\n\n\t\t\tint index = 0;\n\n\t\t\treturn TryParse (text, ref index, string.Empty, out part) && index == text.Length;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPartBasic.cs",
    "content": "﻿//\n// BodyPartBasic.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A basic message body part.\n\t/// </summary>\n\t/// <remarks>\n\t/// Represents any message body part that is not a multipart,\n\t/// message/rfc822 part, or a text part.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t/// </example>\n\tpublic class BodyPartBasic : BodyPart\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartBasic\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartBasic\"/>.\n\t\t/// </remarks>\n\t\t[Obsolete (\"Use BodyPartBasic (ContentType, string) instead.\")]\n\t\tpublic BodyPartBasic () : base ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartBasic\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartBasic\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"contentType\">The content type.</param>\n\t\t/// <param name=\"partSpecifier\">The part specifier.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"contentType\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic BodyPartBasic (ContentType contentType, string partSpecifier) : base (contentType, partSpecifier)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Id of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Content-Id of the body part, if available.\n\t\t/// </remarks>\n\t\t/// <value>The content identifier.</value>\n\t\tpublic string? ContentId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Description of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Content-Description of the body part, if available.\n\t\t/// </remarks>\n\t\t/// <value>The content description.</value>\n\t\tpublic string? ContentDescription {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Transfer-Encoding of the body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the Content-Transfer-Encoding of the body part.</para>\n\t\t/// <para>Hint: Use the <a href=\"M_MimeKit_Utils_MimeUtils_TryParse_1.htm\">MimeUtils.TryParse</a>\n\t\t/// method to parse this value into a usable <see cref=\"MimeKit.ContentEncoding\"/>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The content transfer encoding.</value>\n\t\tpublic string? ContentTransferEncoding {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the size of the body part, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the size of the body part, in bytes.</para>\n\t\t/// <note type=\"note\">Note that this size is the size in its transfer encoding\n\t\t/// and not the resulting size after any decoding.</note>\n\t\t/// </remarks>\n\t\t/// <value>The number of octets.</value>\n\t\tpublic uint Octets {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the MD5 hash of the content, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the MD5 hash of the content, if available.\n\t\t/// </remarks>\n\t\t/// <value>The content md5.</value>\n\t\tpublic string? ContentMd5 {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Disposition of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the Content-Disposition of the body part, if available.</para>\n\t\t/// <note type=\"note\">The Content-Disposition value is only retrieved if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is used when fetching\n\t\t/// summary information from an <see cref=\"IMailFolder\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <value>The content disposition.</value>\n\t\tpublic ContentDisposition? ContentDisposition {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Language of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the Content-Language of the body part, if available.</para>\n\t\t/// <para>The Content-Language value is only retrieved if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is used when fetching\n\t\t/// summary information from an <see cref=\"IMailFolder\"/>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The content language.</value>\n\t\tpublic string[]? ContentLanguage {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Location of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the Content-Location of the body part, if available.</para>\n\t\t/// <para>The Content-Location value is only retrieved if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is used when fetching\n\t\t/// summary information from an <see cref=\"IMailFolder\"/>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The content location.</value>\n\t\tpublic Uri? ContentLocation {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether or not the body part is an attachment.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether or not the body part is an attachment based on the value of\n\t\t/// the Content-Disposition.</para>\n\t\t/// <note type=\"note\">Since the value of the Content-Disposition header is needed, it\n\t\t/// is necessary to include the <see cref=\"MessageSummaryItems.BodyStructure\"/> flag when\n\t\t/// fetching summary information from an <see cref=\"IMailFolder\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if this part is an attachment; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsAttachment {\n\t\t\tget { return ContentDisposition != null && ContentDisposition.IsAttachment; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the file.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>First checks for the \"filename\" parameter on the Content-Disposition header. If\n\t\t/// that does not exist, then the \"name\" parameter on the Content-Type header is used.</para>\n\t\t/// <note type=\"note\">Since the value of the Content-Disposition header is needed, it is\n\t\t/// necessary to include the <see cref=\"MessageSummaryItems.BodyStructure\"/> flag when\n\t\t/// fetching summary information from an <see cref=\"IMailFolder\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <value>The name of the file.</value>\n\t\tpublic string? FileName {\n\t\t\tget {\n\t\t\t\tstring? filename = null;\n\n\t\t\t\tif (ContentDisposition != null)\n\t\t\t\t\tfilename = ContentDisposition.FileName;\n\n\t\t\t\tfilename ??= ContentType.Name;\n\n\t\t\t\treturn filename?.Trim ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dispatches to the specific visit method for this MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This default implementation for <see cref=\"MailKit.BodyPart\"/> nodes\n\t\t/// calls <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>. Override this\n\t\t/// method to call into a more specific method on a derived visitor class\n\t\t/// of the <see cref=\"MailKit.BodyPartVisitor\"/> class. However, it should still\n\t\t/// support unknown visitors by calling\n\t\t/// <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"visitor\">The visitor.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"visitor\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic override void Accept (BodyPartVisitor visitor)\n\t\t{\n\t\t\tif (visitor == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (visitor));\n\n\t\t\tvisitor.VisitBodyPartBasic (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\tprotected override void Encode (StringBuilder builder)\n\t\t{\n\t\t\tEncode (builder, ContentType);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentId);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentDescription);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentTransferEncoding);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, Octets);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentMd5);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentDisposition);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentLanguage);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentLocation);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPartCollection.cs",
    "content": "﻿//\n// BodyPartCollection.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Collections;\nusing System.Collections.Generic;\n\nusing MimeKit.Utils;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A <see cref=\"BodyPart\"/> collection.\n\t/// </summary>\n\t/// <remarks>\n\t/// A <see cref=\"BodyPart\"/> collection.\n\t/// </remarks>\n\tpublic class BodyPartCollection : ICollection<BodyPart>\n\t{\n\t\treadonly List<BodyPart> collection = new List<BodyPart> ();\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartCollection\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.BodyPartCollection\"/>.\n\t\t/// </remarks>\n\t\tpublic BodyPartCollection ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of body parts in the collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of body parts in the collection.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget { return collection.Count; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not this body part collection is read only.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not this body part collection is read only.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if this collection is read only; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsReadOnly {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified body part to the collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified body part to the collection.\n\t\t/// </remarks>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic void Add (BodyPart part)\n\t\t{\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\tcollection.Add (part);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears the body part collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all of the body parts from the collection.\n\t\t/// </remarks>\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tcollection.Clear ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks if the collection contains the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not the collection contains the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified body part exists; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic bool Contains (BodyPart part)\n\t\t{\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn collection.Contains (part);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copies all of the body parts in the collection to the specified array.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies all of the body parts within the collection into the array,\n\t\t/// starting at the specified array index.\n\t\t/// </remarks>\n\t\t/// <param name=\"array\">The array.</param>\n\t\t/// <param name=\"arrayIndex\">The array index.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"array\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"arrayIndex\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic void CopyTo (BodyPart[] array, int arrayIndex)\n\t\t{\n\t\t\tif (array == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (array));\n\n\t\t\tif (arrayIndex < 0 || arrayIndex + Count > array.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (arrayIndex));\n\n\t\t\tcollection.CopyTo (array, arrayIndex);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the body part was removed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic bool Remove (BodyPart part)\n\t\t{\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn collection.Remove (part);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the body part at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the body part at the specified index.\n\t\t/// </remarks>\n\t\t/// <value>The body part at the specified index.</value>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic BodyPart this [int index] {\n\t\t\tget {\n\t\t\t\tif (index < 0 || index >= collection.Count)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\treturn collection[index];\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the index of the body part matching the specified URI.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Finds the index of the body part matching the specified URI, if it exists.</para>\n\t\t/// <para>If the URI scheme is <c>\"cid\"</c>, then matching is performed based on the Content-Id header\n\t\t/// values, otherwise the Content-Location headers are used. If the provided URI is absolute and a child\n\t\t/// part's Content-Location is relative, then then the child part's Content-Location URI will be combined\n\t\t/// with the value of its Content-Base header, if available, otherwise it will be combined with the\n\t\t/// multipart/related part's Content-Base header in order to produce an absolute URI that can be\n\t\t/// compared with the provided absolute URI.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The index of the part matching the specified URI if found; otherwise <c>-1</c>.</returns>\n\t\t/// <param name=\"uri\">The URI of the body part.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uri\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic int IndexOf (Uri uri)\n\t\t{\n\t\t\tif (uri == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uri));\n\n\t\t\tbool cid = uri.IsAbsoluteUri && uri.Scheme.Equals (\"cid\", StringComparison.OrdinalIgnoreCase);\n\n\t\t\tfor (int index = 0; index < Count; index++) {\n\t\t\t\tif (this[index] is not BodyPartBasic bodyPart)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (uri.IsAbsoluteUri) {\n\t\t\t\t\tif (cid) {\n\t\t\t\t\t\tif (!string.IsNullOrEmpty (bodyPart.ContentId)) {\n\t\t\t\t\t\t\t// Note: we might have a Content-Id in the form \"<id@domain.com>\", so attempt to decode it\n\t\t\t\t\t\t\tvar id = MimeUtils.EnumerateReferences (bodyPart.ContentId!).FirstOrDefault () ?? bodyPart.ContentId;\n\n\t\t\t\t\t\t\tif (id == uri.AbsolutePath)\n\t\t\t\t\t\t\t\treturn index;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (bodyPart.ContentLocation != null) {\n\t\t\t\t\t\tif (!bodyPart.ContentLocation.IsAbsoluteUri)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tif (bodyPart.ContentLocation == uri)\n\t\t\t\t\t\t\treturn index;\n\t\t\t\t\t}\n\t\t\t\t} else if (bodyPart.ContentLocation == uri) {\n\t\t\t\t\treturn index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Get the body part enumerator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the body part enumerator.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<BodyPart> GetEnumerator ()\n\t\t{\n\t\t\treturn collection.GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Get the body part enumerator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the body part enumerator.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPartMessage.cs",
    "content": "﻿//\n// BodyPartMessage.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A message/rfc822 body part.\n\t/// </summary>\n\t/// <remarks>\n\t/// Represents a message/rfc822 body part.\n\t/// </remarks>\n\tpublic class BodyPartMessage : BodyPartBasic\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartMessage\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartMessage\"/>.\n\t\t/// </remarks>\n\t\t[Obsolete (\"Use BodyPartMessage (ContentType, string) instead.\")]\n\t\tpublic BodyPartMessage () : this (new ContentType (\"message\", \"rfc822\"), string.Empty)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartMessage\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartMessage\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"contentType\">The content type.</param>\n\t\t/// <param name=\"partSpecifier\">The part specifier.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"contentType\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic BodyPartMessage (ContentType contentType, string partSpecifier) : base (contentType, partSpecifier)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the envelope of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the envelope of the message, if available.\n\t\t/// </remarks>\n\t\t/// <value>The envelope.</value>\n\t\tpublic Envelope? Envelope {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the body structure of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the body structure of the message.\n\t\t/// </remarks>\n\t\t/// <value>The body structure.</value>\n\t\tpublic BodyPart? Body {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the length of the message, in lines.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the message, in lines.\n\t\t/// </remarks>\n\t\t/// <value>The number of lines.</value>\n\t\tpublic uint Lines {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dispatches to the specific visit method for this MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This default implementation for <see cref=\"MailKit.BodyPart\"/> nodes\n\t\t/// calls <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>. Override this\n\t\t/// method to call into a more specific method on a derived visitor class\n\t\t/// of the <see cref=\"MailKit.BodyPartVisitor\"/> class. However, it should still\n\t\t/// support unknown visitors by calling\n\t\t/// <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"visitor\">The visitor.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"visitor\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic override void Accept (BodyPartVisitor visitor)\n\t\t{\n\t\t\tif (visitor == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (visitor));\n\n\t\t\tvisitor.VisitBodyPartMessage (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\tprotected override void Encode (StringBuilder builder)\n\t\t{\n\t\t\tbase.Encode (builder);\n\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, Envelope);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, Body);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, Lines);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPartMultipart.cs",
    "content": "﻿//\n// BodyPartMultipart.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A multipart body part.\n\t/// </summary>\n\t/// <remarks>\n\t/// A multipart body part.\n\t/// </remarks>\n\tpublic class BodyPartMultipart : BodyPart\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartMultipart\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartMultipart\"/>.\n\t\t/// </remarks>\n\t\t[Obsolete (\"Use BodyPartMultipart (ContentType, string) instead.\")]\n\t\tpublic BodyPartMultipart () : this (new ContentType (\"multipart\", \"mixed\"), string.Empty)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartMultipart\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartMultipart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"contentType\">The content type.</param>\n\t\t/// <param name=\"partSpecifier\">The part specifier.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"contentType\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic BodyPartMultipart (ContentType contentType, string partSpecifier) : base (contentType, partSpecifier)\n\t\t{\n\t\t\tBodyParts = new BodyPartCollection ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartMultipart\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartMultipart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"contentType\">The content type.</param>\n\t\t/// <param name=\"partSpecifier\">The part specifier.</param>\n\t\t/// <param name=\"bodyParts\">The child body parts of the multipart.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"contentType\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"bodyParts\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic BodyPartMultipart (ContentType contentType, string partSpecifier, BodyPartCollection bodyParts) : base (contentType, partSpecifier)\n\t\t{\n\t\t\tif (bodyParts is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (bodyParts));\n\n\t\t\tBodyParts = bodyParts;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the child body parts.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the child body parts.\n\t\t/// </remarks>\n\t\t/// <value>The child body parts.</value>\n\t\tpublic BodyPartCollection BodyParts {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Disposition of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Content-Disposition of the body part, if available.\n\t\t/// </remarks>\n\t\t/// <value>The content disposition.</value>\n\t\tpublic ContentDisposition? ContentDisposition {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Language of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Content-Language of the body part, if available.\n\t\t/// </remarks>\n\t\t/// <value>The content language.</value>\n\t\tpublic string[]? ContentLanguage {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Content-Location of the body part, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Content-Location of the body part, if available.\n\t\t/// </remarks>\n\t\t/// <value>The content location.</value>\n\t\tpublic Uri? ContentLocation {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dispatches to the specific visit method for this MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This default implementation for <see cref=\"MailKit.BodyPart\"/> nodes\n\t\t/// calls <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>. Override this\n\t\t/// method to call into a more specific method on a derived visitor class\n\t\t/// of the <see cref=\"MailKit.BodyPartVisitor\"/> class. However, it should still\n\t\t/// support unknown visitors by calling\n\t\t/// <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"visitor\">The visitor.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"visitor\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic override void Accept (BodyPartVisitor visitor)\n\t\t{\n\t\t\tif (visitor == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (visitor));\n\n\t\t\tvisitor.VisitBodyPartMultipart (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\tprotected override void Encode (StringBuilder builder)\n\t\t{\n\t\t\tEncode (builder, BodyParts);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentType.MediaSubtype);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentType.Parameters);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentDisposition);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentLanguage);\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, ContentLocation);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPartText.cs",
    "content": "﻿//\n// BodyPartText.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A textual body part.\n\t/// </summary>\n\t/// <remarks>\n\t/// Represents any body part with a media type of \"text\".\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t/// </example>\n\tpublic class BodyPartText : BodyPartBasic\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartText\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartText\"/>.\n\t\t/// </remarks>\n\t\t[Obsolete (\"Use BodyPartText (ContentType, string) instead.\")]\n\t\tpublic BodyPartText () : this (new ContentType (\"text\", \"plain\"), string.Empty)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.BodyPartText\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartText\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"contentType\">The content type.</param>\n\t\t/// <param name=\"partSpecifier\">The part specifier.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"contentType\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic BodyPartText (ContentType contentType, string partSpecifier) : base (contentType, partSpecifier)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not this text part contains plain text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Checks whether or not the text part's Content-Type is text/plain.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the text is html; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsPlain {\n\t\t\tget { return ContentType.IsMimeType (\"text\", \"plain\"); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not this text part contains HTML.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Checks whether or not the text part's Content-Type is text/html.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the text is html; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsHtml {\n\t\t\tget { return ContentType.IsMimeType (\"text\", \"html\"); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the length of the text, in lines.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the text, in lines.\n\t\t/// </remarks>\n\t\t/// <value>The number of lines.</value>\n\t\tpublic uint Lines {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dispatches to the specific visit method for this MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This default implementation for <see cref=\"MailKit.BodyPart\"/> nodes\n\t\t/// calls <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>. Override this\n\t\t/// method to call into a more specific method on a derived visitor class\n\t\t/// of the <see cref=\"MailKit.BodyPartVisitor\"/> class. However, it should still\n\t\t/// support unknown visitors by calling\n\t\t/// <see cref=\"MailKit.BodyPartVisitor.VisitBodyPart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"visitor\">The visitor.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"visitor\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic override void Accept (BodyPartVisitor visitor)\n\t\t{\n\t\t\tif (visitor == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (visitor));\n\n\t\t\tvisitor.VisitBodyPartText (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the <see cref=\"BodyPart\"/> into the <see cref=\"System.Text.StringBuilder\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\tprotected override void Encode (StringBuilder builder)\n\t\t{\n\t\t\tbase.Encode (builder);\n\n\t\t\tbuilder.Append (' ');\n\t\t\tEncode (builder, Lines);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/BodyPartVisitor.cs",
    "content": "﻿//\n// BodyPartVisitor.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Represents a visitor for a tree of MIME body parts.\n\t/// </summary>\n\t/// <remarks>\n\t/// This class is designed to be inherited to create more specialized classes whose\n\t/// functionality requires traversing, examining or copying a tree of MIME body parts.\n\t/// </remarks>\n\tpublic abstract class BodyPartVisitor\n\t{\n\t\t/// <summary>\n\t\t/// Initialize a new instance of the <see cref=\"BodyPartVisitor\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"BodyPartVisitor\"/>.\n\t\t/// </remarks>\n\t\tprotected BodyPartVisitor ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Dispatches the entity to one of the more specialized visit methods in this class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Dispatches the entity to one of the more specialized visit methods in this class.\n\t\t/// </remarks>\n\t\t/// <param name=\"body\">The MIME body part.</param>\n\t\tpublic virtual void Visit (BodyPart body)\n\t\t{\n\t\t\tbody?.Accept (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the abstract MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the abstract MIME body part.\n\t\t/// </remarks>\n\t\t/// <param name=\"entity\">The MIME body part.</param>\n\t\tprotected internal virtual void VisitBodyPart (BodyPart entity)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the basic MIME body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the basic MIME body part.\n\t\t/// </remarks>\n\t\t/// <param name=\"entity\">The basic MIME body part.</param>\n\t\tprotected internal virtual void VisitBodyPartBasic (BodyPartBasic entity)\n\t\t{\n\t\t\tVisitBodyPart (entity);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the message contained within a message/rfc822 or message/news MIME entity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the message contained within a message/rfc822 or message/news MIME entity.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The body part representing the message/rfc822 message.</param>\n\t\tprotected virtual void VisitMessage (BodyPart message)\n\t\t{\n\t\t\tmessage.Accept (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the message/rfc822 or message/news MIME entity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the message/rfc822 or message/news MIME entity.\n\t\t/// </remarks>\n\t\t/// <param name=\"entity\">The message/rfc822 or message/news body part.</param>\n\t\tprotected internal virtual void VisitBodyPartMessage (BodyPartMessage entity)\n\t\t{\n\t\t\tVisitBodyPartBasic (entity);\n\n\t\t\tif (entity.Body != null)\n\t\t\t\tVisitMessage (entity.Body);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the children of a <see cref=\"MailKit.BodyPartMultipart\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the children of a <see cref=\"MailKit.BodyPartMultipart\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"multipart\">The multipart.</param>\n\t\tprotected virtual void VisitChildren (BodyPartMultipart multipart)\n\t\t{\n\t\t\tfor (int i = 0; i < multipart.BodyParts.Count; i++)\n\t\t\t\tmultipart.BodyParts[i].Accept (this);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the abstract multipart MIME entity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the abstract multipart MIME entity.\n\t\t/// </remarks>\n\t\t/// <param name=\"multipart\">The multipart body part.</param>\n\t\tprotected internal virtual void VisitBodyPartMultipart (BodyPartMultipart multipart)\n\t\t{\n\t\t\tVisitBodyPart (multipart);\n\t\t\tVisitChildren (multipart);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Visit the text-based MIME part entity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Visits the text-based MIME part entity.\n\t\t/// </remarks>\n\t\t/// <param name=\"entity\">The text-based body part.</param>\n\t\tprotected internal virtual void VisitBodyPartText (BodyPartText entity)\n\t\t{\n\t\t\tVisitBodyPartBasic (entity);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ByteArrayBuilder.cs",
    "content": "﻿//\n// ByteArrayBuilder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Buffers;\n\nnamespace MailKit\n{\n\tclass ByteArrayBuilder : IDisposable\n\t{\n\t\tbyte[] buffer;\n\t\tint length;\n\n\t\tpublic ByteArrayBuilder (int initialCapacity)\n\t\t{\n\t\t\tbuffer = ArrayPool<byte>.Shared.Rent (initialCapacity);\n\t\t\tlength = 0;\n\t\t}\n\n\t\tpublic int Length {\n\t\t\tget { return length; }\n\t\t}\n\n\t\tvoid EnsureCapacity (int capacity)\n\t\t{\n\t\t\tif (capacity > buffer.Length) {\n\t\t\t\tvar resized = ArrayPool<byte>.Shared.Rent (capacity);\n\t\t\t\tBuffer.BlockCopy (buffer, 0, resized, 0, length);\n\t\t\t\tArrayPool<byte>.Shared.Return (buffer);\n\t\t\t\tbuffer = resized;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Append (byte c)\n\t\t{\n\t\t\tEnsureCapacity (length + 1);\n\t\t\tbuffer[length++] = c;\n\t\t}\n\n\t\tpublic void Append (byte[] text, int startIndex, int count)\n\t\t{\n\t\t\tEnsureCapacity (length + count);\n\t\t\tBuffer.BlockCopy (text, startIndex, buffer, length, count);\n\t\t\tlength += count;\n\t\t}\n\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tlength = 0;\n\t\t}\n\n\t\tpublic byte[] ToArray ()\n\t\t{\n\t\t\tvar array = new byte[length];\n\n\t\t\tBuffer.BlockCopy (buffer, 0, array, 0, length);\n\n\t\t\treturn array;\n\t\t}\n\n\t\tpublic string ToString (Encoding encoding, Encoding fallback)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn encoding.GetString (buffer, 0, length);\n\t\t\t} catch (DecoderFallbackException) {\n\t\t\t\treturn fallback.GetString (buffer, 0, length);\n\t\t\t}\n\t\t}\n\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn ToString (TextEncodings.UTF8, TextEncodings.Latin1);\n\t\t}\n\n\t\tpublic bool Equals (string value, bool ignoreCase = false)\n\t\t{\n\t\t\tif (length == value.Length) {\n\t\t\t\tif (ignoreCase) {\n\t\t\t\t\tfor (int i = 0; i < length; i++) {\n\t\t\t\t\t\tuint a = (uint) buffer[i];\n\t\t\t\t\t\tuint b = (uint) value[i];\n\n\t\t\t\t\t\tif ((a - 'a') <= 'z' - 'a')\n\t\t\t\t\t\t\ta -= 0x20;\n\t\t\t\t\t\tif ((b - 'a') <= 'z' - 'a')\n\t\t\t\t\t\t\tb -= 0x20;\n\n\t\t\t\t\t\tif (a != b)\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (int i = 0; i < length; i++) {\n\t\t\t\t\t\tif (value[i] != (char) buffer[i])\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic void TrimNewLine ()\n\t\t{\n\t\t\t// Trim the <CR><LF> sequence from the end of the line.\n\t\t\tif (length > 0 && buffer[length - 1] == (byte) '\\n') {\n\t\t\t\tlength--;\n\n\t\t\t\tif (length > 0 && buffer[length - 1] == (byte) '\\r')\n\t\t\t\t\tlength--;\n\t\t\t}\n\t\t}\n\n\t\t// FIXME: This should be moved somewhere else...\n\t\tinternal static bool TryParse (byte[] text, ref int index, int endIndex, out int value)\n\t\t{\n\t\t\tint startIndex = index;\n\n\t\t\tvalue = 0;\n\n\t\t\twhile (index < endIndex && text[index] >= (byte) '0' && text[index] <= (byte) '9') {\n\t\t\t\tint digit = text[index] - (byte) '0';\n\n\t\t\t\tif (value > int.MaxValue / 10) {\n\t\t\t\t\t// integer overflow\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (value == int.MaxValue / 10 && digit > int.MaxValue % 10) {\n\t\t\t\t\t// integer overflow\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvalue = (value * 10) + digit;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn index > startIndex;\n\t\t}\n\n\t\t// FIXME: Does this make sense to have here? Or should I have an extensions class for byte[] that has this?\n\t\tpublic bool TryParse (int startIndex, int endIndex, out int value)\n\t\t{\n\t\t\tint index = startIndex;\n\n\t\t\treturn TryParse (buffer, ref index, endIndex, out value);\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tif (length != -1) {\n\t\t\t\tArrayPool<byte>.Shared.Return (buffer);\n\t\t\t\tlength = -1;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/CommandException.cs",
    "content": "﻿//\n// CommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when there is a command error.\n\t/// </summary>\n\t/// <remarks>\n\t/// A <see cref=\"CommandException\"/> can be thrown by any of the various client\n\t/// methods in MailKit. Unlike a <see cref=\"ProtocolException\"/>, a\n\t/// <see cref=\"CommandException\"/> is typically non-fatal (meaning that it does\n\t/// not force the client to disconnect).\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic abstract class CommandException : Exception\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected CommandException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tprotected CommandException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tHelpLink = \"https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tprotected CommandException (string message) : base (message)\n\t\t{\n\t\t\tHelpLink = \"https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"CommandException\"/>.\n\t\t/// </remarks>\n\t\tprotected CommandException ()\n\t\t{\n\t\t\tHelpLink = \"https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog\";\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/CompressedStream.cs",
    "content": "﻿//\n// CompressedStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing Org.BouncyCastle.Utilities.Zlib;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A compressed stream.\n\t/// </summary>\n\tclass CompressedStream : Stream\n\t{\n\t\treadonly ZStream zIn, zOut;\n\t\tbool eos, disposed;\n\n\t\tpublic CompressedStream (Stream innerStream)\n\t\t{\n\t\t\tInnerStream = innerStream;\n\n\t\t\tzOut = new ZStream ();\n\t\t\tzOut.deflateInit (5, true);\n\t\t\tzOut.next_out = new byte[4096];\n\n\t\t\tzIn = new ZStream ();\n\t\t\tzIn.inflateInit (true);\n\t\t\tzIn.next_in = new byte[4096];\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the inner stream.\n\t\t/// </summary>\n\t\t/// <value>The inner stream.</value>\n\t\tpublic Stream InnerStream {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports reading.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports reading; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanRead {\n\t\t\tget { return InnerStream.CanRead; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports writing.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports writing; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanWrite {\n\t\t\tget { return InnerStream.CanWrite; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports seeking.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports seeking; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports I/O timeouts.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports I/O timeouts; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return InnerStream.CanTimeout; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </summary>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to read before timing out.</returns>\n\t\t/// <value>The read timeout.</value>\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return InnerStream.ReadTimeout; }\n\t\t\tset { InnerStream.ReadTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </summary>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to write before timing out.</returns>\n\t\t/// <value>The write timeout.</value>\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return InnerStream.WriteTimeout; }\n\t\t\tset { InnerStream.WriteTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <returns>The current position within the stream.</returns>\n\t\t/// <value>The position of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Position {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the length in bytes of the stream.\n\t\t/// </summary>\n\t\t/// <returns>A long value representing the length of the stream in bytes.</returns>\n\t\t/// <value>The length of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Length {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t}\n\n\t\tstatic void ValidateArguments (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || count > (buffer.Length - offset))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (CompressedStream));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (count == 0)\n\t\t\t\treturn 0;\n\n\t\t\tzIn.next_out = buffer;\n\t\t\tzIn.next_out_index = offset;\n\t\t\tzIn.avail_out = count;\n\n\t\t\tdo {\n\t\t\t\tif (zIn.avail_in == 0 && !eos) {\n\t\t\t\t\tzIn.avail_in = InnerStream.Read (zIn.next_in, 0, zIn.next_in.Length);\n\n\t\t\t\t\teos = zIn.avail_in == 0;\n\t\t\t\t\tzIn.next_in_index = 0;\n\t\t\t\t}\n\n\t\t\t\tint retval = zIn.inflate (JZlib.Z_FULL_FLUSH);\n\n\t\t\t\tif (retval == JZlib.Z_STREAM_END)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (eos && retval == JZlib.Z_BUF_ERROR)\n\t\t\t\t\treturn 0;\n\n\t\t\t\tif (retval != JZlib.Z_OK)\n\t\t\t\t\tthrow new IOException (\"Error inflating: \" + zIn.msg);\n\t\t\t} while (zIn.avail_out == count);\n\n\t\t\treturn count - zIn.avail_out;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (count == 0)\n\t\t\t\treturn 0;\n\n\t\t\tzIn.next_out = buffer;\n\t\t\tzIn.next_out_index = offset;\n\t\t\tzIn.avail_out = count;\n\n\t\t\tdo {\n\t\t\t\tif (zIn.avail_in == 0 && !eos) {\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\tzIn.avail_in = await InnerStream.ReadAsync (zIn.next_in, 0, zIn.next_in.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\teos = zIn.avail_in == 0;\n\t\t\t\t\tzIn.next_in_index = 0;\n\t\t\t\t}\n\n\t\t\t\tint retval = zIn.inflate (JZlib.Z_FULL_FLUSH);\n\n\t\t\t\tif (retval == JZlib.Z_STREAM_END)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (eos && retval == JZlib.Z_BUF_ERROR)\n\t\t\t\t\treturn 0;\n\n\t\t\t\tif (retval != JZlib.Z_OK)\n\t\t\t\t\tthrow new IOException (\"Error inflating: \" + zIn.msg);\n\t\t\t} while (zIn.avail_out == count);\n\n\t\t\treturn count - zIn.avail_out;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <param name=\"buffer\">The buffer to write.</param>\n\t\t/// <param name=\"offset\">The offset of the first byte to write.</param>\n\t\t/// <param name=\"count\">The number of bytes to write.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (count == 0)\n\t\t\t\treturn;\n\n\t\t\tzOut.next_in = buffer;\n\t\t\tzOut.next_in_index = offset;\n\t\t\tzOut.avail_in = count;\n\n\t\t\tdo {\n\t\t\t\tzOut.avail_out = zOut.next_out.Length;\n\t\t\t\tzOut.next_out_index = 0;\n\n\t\t\t\tif (zOut.deflate (JZlib.Z_FULL_FLUSH) != JZlib.Z_OK)\n\t\t\t\t\tthrow new IOException (\"Error deflating: \" + zOut.msg);\n\n\t\t\t\tInnerStream.Write (zOut.next_out, 0, zOut.next_out.Length - zOut.avail_out);\n\t\t\t} while (zOut.avail_in > 0 || zOut.avail_out == 0);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <returns>A task that represents the asynchronous write operation.</returns>\n\t\t/// <param name=\"buffer\">The buffer to write.</param>\n\t\t/// <param name=\"offset\">The offset of the first byte to write.</param>\n\t\t/// <param name=\"count\">The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (count == 0)\n\t\t\t\treturn;\n\n\t\t\tzOut.next_in = buffer;\n\t\t\tzOut.next_in_index = offset;\n\t\t\tzOut.avail_in = count;\n\n\t\t\tdo {\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tzOut.avail_out = zOut.next_out.Length;\n\t\t\t\tzOut.next_out_index = 0;\n\n\t\t\t\tif (zOut.deflate (JZlib.Z_FULL_FLUSH) != JZlib.Z_OK)\n\t\t\t\t\tthrow new IOException (\"Error deflating: \" + zOut.msg);\n\n\t\t\t\tawait InnerStream.WriteAsync (zOut.next_out, 0, zOut.next_out.Length - zOut.avail_out, cancellationToken).ConfigureAwait (false);\n\t\t\t} while (zOut.avail_in > 0 || zOut.avail_out == 0);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tInnerStream.Flush ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <returns>A task that represents the asynchronous flush operation.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\treturn InnerStream.FlushAsync (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <returns>The new position within the stream.</returns>\n\t\t/// <param name=\"offset\">The offset into the stream relative to the <paramref name=\"origin\"/>.</param>\n\t\t/// <param name=\"origin\">The origin to seek from.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the length of the stream.\n\t\t/// </summary>\n\t\t/// <param name=\"value\">The desired length of the stream in bytes.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support setting the length.\n\t\t/// </exception>\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"CompressedStream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tInnerStream.Dispose ();\n\t\t\t\tdisposed = true;\n\t\t\t\tzOut.free ();\n\t\t\t\tzIn.free ();\n\t\t\t}\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ConnectedEventArgs.cs",
    "content": "﻿//\n// ConnectedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nusing MailKit.Security;\n\nnamespace MailKit\n{\n\t/// <summary>\n\t/// Connected event arguments.\n\t/// </summary>\n\t/// <remarks>\n\t/// When a <see cref=\"IMailService\"/> is connected, it will emit a\n\t/// <see cref=\" IMailService.Connected\"/> event.\n\t/// </remarks>\n\tpublic class ConnectedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.ConnectedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ConnectedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The name of the host that the client connected to.</param>\n\t\t/// <param name=\"port\">The port that the client connected to on the remote host.</param>\n\t\t/// <param name=\"options\">The SSL/TLS options that were used when connecting to the remote host.</param>\n\t\tpublic ConnectedEventArgs (string host, int port, SecureSocketOptions options)\n\t\t{\n\t\t\tOptions = options;\n\t\t\tHost = host;\n\t\t\tPort = port;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the remote host.\n\t\t/// </remarks>\n\t\t/// <value>The host name of the server.</value>\n\t\tpublic string Host {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the port.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the port.\n\t\t/// </remarks>\n\t\t/// <value>The port.</value>\n\t\tpublic int Port {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the SSL/TLS options.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the SSL/TLS options.\n\t\t/// </remarks>\n\t\t/// <value>The SSL/TLS options.</value>\n\t\tpublic SecureSocketOptions Options {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/DeliveryStatusNotification.cs",
    "content": "﻿//\n// DeliveryStatusNotification.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Delivery status notification types.\n\t/// </summary>\n\t/// <remarks>\n\t/// A set of flags that may be bitwise-or'd together to specify\n\t/// when a delivery status notification should be sent for a\n\t/// particular recipient.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"DeliveryStatusNotification\"/>\n\t/// </example>\n\t[Flags]\n\tpublic enum DeliveryStatusNotification {\n\t\t/// <summary>\n\t\t/// Never send delivery status notifications.\n\t\t/// </summary>\n\t\tNever   = 0,\n\n\t\t/// <summary>\n\t\t/// Send a notification on successful delivery to the recipient.\n\t\t/// </summary>\n\t\tSuccess = (1 << 0),\n\n\t\t/// <summary>\n\t\t/// Send a notification on failure to deliver to the recipient.\n\t\t/// </summary>\n\t\tFailure = (1 << 1),\n\n\t\t/// <summary>\n\t\t/// Send a notification when the delivery to the recipient has\n\t\t/// been delayed for an unusual amount of time.\n\t\t/// </summary>\n\t\tDelay   = (1 << 2)\n\t}\n}\n"
  },
  {
    "path": "MailKit/DeliveryStatusNotificationType.cs",
    "content": "﻿//\n// DeliveryStatusNotificationReturnType.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// FIXME: Move this to the MailKit namespace. It wasn't ever supposed to be in MailKit.Net.Smtp!\nnamespace MailKit.Net.Smtp\n{\n\t/// <summary>\n\t/// Delivery status notification type.\n\t/// </summary>\n\t/// <remarks>\n\t/// The delivery status notification type specifies whether or not\n\t/// the full message should be included in any failed DSN issued for\n\t/// a message transmission as opposed to just the headers.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"DeliveryStatusNotification\"/>\n\t/// </example>\n\tpublic enum DeliveryStatusNotificationType\n\t{\n\t\t/// <summary>\n\t\t/// The return type is unspecified, allowing the server to choose.\n\t\t/// </summary>\n\t\tUnspecified,\n\n\t\t/// <summary>\n\t\t/// The full message should be included in any failed delivery status notification issued by the server.\n\t\t/// </summary>\n\t\tFull,\n\n\t\t/// <summary>\n\t\t/// Only the headers should be included in any failed delivery status notification issued by the server.\n\t\t/// </summary>\n\t\tHeadersOnly,\n\t}\n}\n"
  },
  {
    "path": "MailKit/DisconnectedEventArgs.cs",
    "content": "﻿//\n// DisconnectedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security;\n\nnamespace MailKit\n{\n\t/// <summary>\n\t/// Disconnected event arguments.\n\t/// </summary>\n\t/// <remarks>\n\t/// When a <see cref=\"IMailService\"/> gets disconnected, it will emit a\n\t/// <see cref=\" IMailService.Disconnected\"/> event.\n\t/// </remarks>\n\tpublic class DisconnectedEventArgs : ConnectedEventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.DisconnectedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.DisconnectedEventArgs\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The name of the host that the client was connected to.</param>\n\t\t/// <param name=\"port\">The port that the client was connected to.</param>\n\t\t/// <param name=\"options\">The SSL/TLS options that were used by the client.</param>\n\t\t/// <param name=\"requested\">If <see langword=\"true\" />, the <see cref=\"IMailService\"/> was disconnected via the\n\t\t/// <see cref=\"IMailService.Disconnect(bool, System.Threading.CancellationToken)\"/> method.</param>\n\t\tpublic DisconnectedEventArgs (string host, int port, SecureSocketOptions options, bool requested) : base (host, port, options)\n\t\t{\n\t\t\tIsRequested = requested;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the service was explicitly asked to disconnect.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the <see cref=\"IMailService\"/> was disconnected via the\n\t\t/// <see cref=\"IMailService.Disconnect(bool, System.Threading.CancellationToken)\"/> method, then\n\t\t/// the value of <see cref=\"IsRequested\"/> will be <see langword=\"true\" />. If the connection was unexpectedly\n\t\t/// dropped, then the value will be <see langword=\"false\" />.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the disconnect was explicitly requested; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsRequested {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/DuplexStream.cs",
    "content": "﻿//\n// DuplexStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A duplex stream.\n\t/// </summary>\n\tclass DuplexStream : Stream\n\t{\n\t\tbool disposed;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.DuplexStream\"/> class.\n\t\t/// </summary>\n\t\t/// <param name=\"istream\">The stream to use for input.</param>\n\t\t/// <param name=\"ostream\">The stream to use for output.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"istream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"ostream\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic DuplexStream (Stream istream, Stream ostream)\n\t\t{\n\t\t\tif (istream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (istream));\n\n\t\t\tif (ostream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (ostream));\n\n\t\t\tInputStream = istream;\n\t\t\tOutputStream = ostream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the input stream.\n\t\t/// </summary>\n\t\t/// <value>The input stream.</value>\n\t\tpublic Stream InputStream {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the output stream.\n\t\t/// </summary>\n\t\t/// <value>The output stream.</value>\n\t\tpublic Stream OutputStream {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports reading.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports reading; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanRead {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports writing.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports writing; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanWrite {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports seeking.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports seeking; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the stream supports I/O timeouts.\n\t\t/// </summary>\n\t\t/// <value><see langword=\"true\" /> if the stream supports I/O timeouts; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return InputStream.CanTimeout && OutputStream.CanTimeout; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </summary>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to read before timing out.</returns>\n\t\t/// <value>The read timeout.</value>\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return InputStream.ReadTimeout; }\n\t\t\tset { InputStream.ReadTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </summary>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to write before timing out.</returns>\n\t\t/// <value>The write timeout.</value>\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return OutputStream.WriteTimeout; }\n\t\t\tset { OutputStream.WriteTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <returns>The current position within the stream.</returns>\n\t\t/// <value>The position of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Position {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the length in bytes of the stream.\n\t\t/// </summary>\n\t\t/// <returns>A long value representing the length of the stream in bytes.</returns>\n\t\t/// <value>The length of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Length {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t}\n\n\t\tstatic void ValidateArguments (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || count > (buffer.Length - offset))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (DuplexStream));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\treturn InputStream.Read (buffer, offset, count);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\treturn InputStream.ReadAsync (buffer, offset, count, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <param name=\"buffer\">The buffer to write.</param>\n\t\t/// <param name=\"offset\">The offset of the first byte to write.</param>\n\t\t/// <param name=\"count\">The number of bytes to write.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tOutputStream.Write (buffer, offset, count);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <returns>A task that represents the asynchronous write operation.</returns>\n\t\t/// <param name=\"buffer\">The buffer to write.</param>\n\t\t/// <param name=\"offset\">The offset of the first byte to write.</param>\n\t\t/// <param name=\"count\">The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\treturn OutputStream.WriteAsync (buffer, offset, count, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tOutputStream.Flush ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <returns>A task that represents the asynchronous flush operation.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\treturn OutputStream.FlushAsync (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <returns>The new position within the stream.</returns>\n\t\t/// <param name=\"offset\">The offset into the stream relative to the <paramref name=\"origin\"/>.</param>\n\t\t/// <param name=\"origin\">The origin to seek from.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the length of the stream.\n\t\t/// </summary>\n\t\t/// <param name=\"value\">The desired length of the stream in bytes.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support setting the length.\n\t\t/// </exception>\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"DuplexStream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tOutputStream.Dispose ();\n\t\t\t\tInputStream.Dispose ();\n\t\t\t\tdisposed = true;\n\t\t\t}\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Envelope.cs",
    "content": "﻿//\n// Envelope.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A message envelope containing a brief summary of the message.\n\t/// </summary>\n\t/// <remarks>\n\t/// The envelope of a message contains information such as the\n\t/// date the message was sent, the subject of the message,\n\t/// the sender of the message, who the message was sent to,\n\t/// which message(s) the message may be in reply to,\n\t/// and the message id.\n\t/// </remarks>\n\tpublic class Envelope\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Envelope\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Envelope\"/>.\n\t\t/// </remarks>\n\t\tpublic Envelope ()\n\t\t{\n\t\t\tFrom = new InternetAddressList ();\n\t\t\tSender = new InternetAddressList ();\n\t\t\tReplyTo = new InternetAddressList ();\n\t\t\tTo = new InternetAddressList ();\n\t\t\tCc = new InternetAddressList ();\n\t\t\tBcc = new InternetAddressList ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the address(es) that the message is from.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the address(es) that the message is from.\n\t\t/// </remarks>\n\t\t/// <value>The address(es) that the message is from.</value>\n\t\tpublic InternetAddressList From {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the actual sender(s) of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The senders may differ from the addresses in <see cref=\"From\"/> if\n\t\t/// the message was sent by someone on behalf of someone else.\n\t\t/// </remarks>\n\t\t/// <value>The actual sender(s) of the message.</value>\n\t\tpublic InternetAddressList Sender {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the address(es) that replies should be sent to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The senders of the message may prefer that replies are sent\n\t\t/// somewhere other than the address they used to send the message.\n\t\t/// </remarks>\n\t\t/// <value>The address(es) that replies should be sent to.</value>\n\t\tpublic InternetAddressList ReplyTo {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of addresses that the message was sent to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the list of addresses that the message was sent to.\n\t\t/// </remarks>\n\t\t/// <value>The address(es) that the message was sent to.</value>\n\t\tpublic InternetAddressList To {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of addresses that the message was carbon-copied to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the list of addresses that the message was carbon-copied to.\n\t\t/// </remarks>\n\t\t/// <value>The address(es) that the message was carbon-copied to.</value>\n\t\tpublic InternetAddressList Cc {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of addresses that the message was blind-carbon-copied to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the list of addresses that the message was blind-carbon-copied to.\n\t\t/// </remarks>\n\t\t/// <value>The address(es) that the message was carbon-copied to.</value>\n\t\tpublic InternetAddressList Bcc {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The Message-Id that the message is replying to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The Message-Id that the message is replying to.\n\t\t/// </remarks>\n\t\t/// <value>The Message-Id that the message is replying to.</value>\n\t\tpublic string? InReplyTo {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the date that the message was sent on, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the date that the message was sent on, if available.\n\t\t/// </remarks>\n\t\t/// <value>The date the message was sent.</value>\n\t\tpublic DateTimeOffset? Date {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the ID of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the ID of the message, if available.\n\t\t/// </remarks>\n\t\t/// <value>The message identifier.</value>\n\t\tpublic string? MessageId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the subject of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the subject of the message.\n\t\t/// </remarks>\n\t\t/// <value>The subject.</value>\n\t\tpublic string? Subject {\n\t\t\tget; set;\n\t\t}\n\n\t\tstatic void EncodeMailbox (StringBuilder builder, MailboxAddress mailbox)\n\t\t{\n\t\t\tbuilder.Append ('(');\n\n\t\t\tif (mailbox.Name != null) {\n\t\t\t\tMimeUtils.AppendQuoted (builder, mailbox.Name);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (mailbox.Route.Count != 0) {\n\t\t\t\tMimeUtils.AppendQuoted (builder, mailbox.Route.ToString ());\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tint at = mailbox.Address.LastIndexOf ('@');\n\n\t\t\tif (at >= 0) {\n\t\t\t\tvar domain = mailbox.Address.Substring (at + 1);\n\t\t\t\tvar user = mailbox.Address.Substring (0, at);\n\n\t\t\t\tMimeUtils.AppendQuoted (builder, user);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t\tMimeUtils.AppendQuoted (builder, domain);\n\t\t\t} else {\n\t\t\t\tMimeUtils.AppendQuoted (builder, mailbox.Address);\n\t\t\t\tbuilder.Append (\" \\\"localhost\\\"\");\n\t\t\t}\n\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\tstatic void EncodeInternetAddressListAddresses (StringBuilder builder, InternetAddressList addresses)\n\t\t{\n\t\t\tforeach (var addr in addresses) {\n\t\t\t\tif (addr is MailboxAddress mailbox)\n\t\t\t\t\tEncodeMailbox (builder, mailbox);\n\t\t\t\telse if (addr is GroupAddress group)\n\t\t\t\t\tEncodeGroup (builder, group);\n\t\t\t}\n\t\t}\n\n\t\tstatic void EncodeGroup (StringBuilder builder, GroupAddress group)\n\t\t{\n\t\t\tbuilder.Append (\"(NIL NIL \");\n\t\t\tMimeUtils.AppendQuoted (builder, group.Name ?? string.Empty);\n\t\t\tbuilder.Append (\" NIL)\");\n\t\t\tEncodeInternetAddressListAddresses (builder, group.Members);\n\t\t\tbuilder.Append (\"(NIL NIL NIL NIL)\");\n\t\t}\n\n\t\tstatic void EncodeAddressList (StringBuilder builder, InternetAddressList list)\n\t\t{\n\t\t\tbuilder.Append ('(');\n\t\t\tEncodeInternetAddressListAddresses (builder, list);\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\tinternal void Encode (StringBuilder builder)\n\t\t{\n\t\t\tbuilder.Append ('(');\n\n\t\t\tif (Date.HasValue) {\n\t\t\t\tbuilder.Append ('\"');\n\t\t\t\tbuilder.Append (DateUtils.FormatDate (Date.Value));\n\t\t\t\tbuilder.Append (\"\\\" \");\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (Subject != null) {\n\t\t\t\tMimeUtils.AppendQuoted (builder, Subject);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (From.Count > 0) {\n\t\t\t\tEncodeAddressList (builder, From);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (Sender.Count > 0) {\n\t\t\t\tEncodeAddressList (builder, Sender);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (ReplyTo.Count > 0) {\n\t\t\t\tEncodeAddressList (builder, ReplyTo);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (To.Count > 0) {\n\t\t\t\tEncodeAddressList (builder, To);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (Cc.Count > 0) {\n\t\t\t\tEncodeAddressList (builder, Cc);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (Bcc.Count > 0) {\n\t\t\t\tEncodeAddressList (builder, Bcc);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (InReplyTo != null) {\n\t\t\t\tstring inReplyTo;\n\n\t\t\t\tif (InReplyTo.Length > 1 && InReplyTo[0] != '<' && InReplyTo[InReplyTo.Length - 1] != '>')\n\t\t\t\t\tinReplyTo = '<' + InReplyTo + '>';\n\t\t\t\telse\n\t\t\t\t\tinReplyTo = InReplyTo;\n\n\t\t\t\tMimeUtils.AppendQuoted (builder, inReplyTo);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL \");\n\t\t\t}\n\n\t\t\tif (MessageId != null) {\n\t\t\t\tstring messageId;\n\n\t\t\t\tif (MessageId.Length > 1 && MessageId[0] != '<' && MessageId[MessageId.Length - 1] != '>')\n\t\t\t\t\tmessageId = '<' + MessageId + '>';\n\t\t\t\telse\n\t\t\t\t\tmessageId = MessageId;\n\n\t\t\t\tMimeUtils.AppendQuoted (builder, messageId);\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"NIL\");\n\t\t\t}\n\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.Envelope\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The returned string can be parsed by <see cref=\"TryParse(string,out Envelope)\"/>.</para>\n\t\t/// <note type=\"warning\">The syntax of the string returned, while similar to IMAP's ENVELOPE syntax,\n\t\t/// is not completely compatible.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.Envelope\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tEncode (builder);\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tstatic bool IsNIL (string text, int index)\n\t\t{\n\t\t\treturn string.Compare (text, index, \"NIL\", 0, 3, StringComparison.Ordinal) == 0;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out string? nstring)\n\t\t{\n\t\t\tnstring = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] != '\"') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar token = new StringBuilder ();\n\t\t\tbool escaped = false;\n\n\t\t\tindex++;\n\n\t\t\twhile (index < text.Length) {\n\t\t\t\tif (text[index] == '\"' && !escaped)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (escaped || text[index] != '\\\\') {\n\t\t\t\t\ttoken.Append (text[index]);\n\t\t\t\t\tescaped = false;\n\t\t\t\t} else {\n\t\t\t\t\tescaped = true;\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tnstring = token.ToString ();\n\n\t\t\tindex++;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, out InternetAddress? addr)\n\t\t{\n\t\t\taddr = null;\n\n\t\t\tif (text[index] != '(')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\tif (!TryParse (text, ref index, out string? name))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out string? route))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out string? user))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out string? domain))\n\t\t\t\treturn false;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length || text[index] != ')')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\tif (domain != null) {\n\t\t\t\tuser ??= \"NIL\";\n\n\t\t\t\t// Note: The serializer injects \"localhost\" as the domain when provided a UNIX mailbox or the special <> mailbox.\n\t\t\t\tvar address = domain == \"localhost\" ? user : user + \"@\" + domain;\n\n\t\t\t\tif (route != null && DomainList.TryParse (route, out var domains))\n\t\t\t\t\taddr = new MailboxAddress (name, domains, address);\n\t\t\t\telse\n\t\t\t\t\taddr = new MailboxAddress (name, address);\n\t\t\t} else if (user != null) {\n\t\t\t\taddr = new GroupAddress (user);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParse (string text, ref int index, [NotNullWhen (true)] out InternetAddressList? list)\n\t\t{\n\t\t\tlist = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tif (text[index] != '(') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tlist = new InternetAddressList ();\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tlist = new InternetAddressList ();\n\t\t\tvar stack = new List<InternetAddressList> ();\n\t\t\tint sp = 0;\n\n\t\t\tstack.Add (list);\n\n\t\t\tdo {\n\t\t\t\tif (text[index] == ')')\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (!TryParse (text, ref index, out InternetAddress? addr))\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (addr != null) {\n\t\t\t\t\tstack[sp].Add (addr);\n\n\t\t\t\t\tif (addr is GroupAddress group) {\n\t\t\t\t\t\tstack.Add (group.Members);\n\t\t\t\t\t\tsp++;\n\t\t\t\t\t}\n\t\t\t\t} else if (sp > 0) {\n\t\t\t\t\tstack.RemoveAt (sp);\n\t\t\t\t\tsp--;\n\t\t\t\t}\n\n\t\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\t\tindex++;\n\t\t\t} while (index < text.Length);\n\n\t\t\t// Note: technically, we should check that sp == 0 as well, since all groups should\n\t\t\t// be popped off the stack, but in the interest of being liberal in what we accept,\n\t\t\t// we'll ignore that.\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tinternal static bool TryParse (string text, ref int index, out Envelope? envelope)\n\t\t{\n\t\t\tDateTimeOffset? date = null;\n\n\t\t\tenvelope = null;\n\n\t\t\twhile (index < text.Length && text[index] == ' ')\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length || text[index] != '(') {\n\t\t\t\tif (index + 3 <= text.Length && IsNIL (text, index)) {\n\t\t\t\t\tindex += 3;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\tif (!TryParse (text, ref index, out string? nstring))\n\t\t\t\treturn false;\n\n\t\t\tif (nstring != null) {\n\t\t\t\tif (!DateUtils.TryParse (nstring, out DateTimeOffset value))\n\t\t\t\t\treturn false;\n\n\t\t\t\tdate = value;\n\t\t\t}\n\n\t\t\tif (!TryParse (text, ref index, out string? subject))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out InternetAddressList? from))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out InternetAddressList? sender))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out InternetAddressList? replyto))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out InternetAddressList? to))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out InternetAddressList? cc))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out InternetAddressList? bcc))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out string? inreplyto))\n\t\t\t\treturn false;\n\n\t\t\tif (!TryParse (text, ref index, out string? messageid))\n\t\t\t\treturn false;\n\n\t\t\tif (index >= text.Length || text[index] != ')')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\tenvelope = new Envelope {\n\t\t\t\tDate = date,\n\t\t\t\tSubject = subject,\n\t\t\t\tFrom = from,\n\t\t\t\tSender = sender,\n\t\t\t\tReplyTo = replyto,\n\t\t\t\tTo = to,\n\t\t\t\tCc = cc,\n\t\t\t\tBcc = bcc,\n\t\t\t\tInReplyTo = inreplyto != null ? MimeUtils.EnumerateReferences (inreplyto).FirstOrDefault () ?? inreplyto : null,\n\t\t\t\tMessageId = messageid != null ? MimeUtils.EnumerateReferences (messageid).FirstOrDefault () ?? messageid : null\n\t\t\t};\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Tries to parse the given text into a new <see cref=\"MailKit.Envelope\"/> instance.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Parses an Envelope value from the specified text.</para>\n\t\t/// <note type=\"warning\">This syntax, while similar to IMAP's ENVELOPE syntax, is not\n\t\t/// completely compatible.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" />, if the envelope was successfully parsed, <see langword=\"false\" /> otherwise.</returns>\n\t\t/// <param name=\"text\">The text to parse.</param>\n\t\t/// <param name=\"envelope\">The parsed envelope.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string text, out Envelope? envelope)\n\t\t{\n\t\t\tif (text == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (text));\n\n\t\t\tint index = 0;\n\n\t\t\treturn TryParse (text, ref index, out envelope) && index == text.Length;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/FetchRequest.cs",
    "content": "﻿//\n// FetchRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for fetching various properties of a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for fetching various properties of a message.\n\t/// </remarks>\n\tpublic class FetchRequest : IFetchRequest\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"FetchRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FetchRequest\"/>.\n\t\t/// </remarks>\n\t\tpublic FetchRequest ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"FetchRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FetchRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"items\">The items to fetch.</param>\n\t\tpublic FetchRequest (MessageSummaryItems items)\n\t\t{\n\t\t\tItems = items;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"FetchRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FetchRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"items\">The items to fetch.</param>\n\t\t/// <param name=\"headers\">The specific set of headers to fetch.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic FetchRequest (MessageSummaryItems items, IEnumerable<HeaderId> headers) : this (items)\n\t\t{\n\t\t\tHeaders = (headers is HeaderSet set) ? set : new HeaderSet (headers);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"FetchRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FetchRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"items\">The items to fetch.</param>\n\t\t/// <param name=\"headers\">The specific set of headers to fetch.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic FetchRequest (MessageSummaryItems items, IEnumerable<string> headers) : this (items)\n\t\t{\n\t\t\tHeaders = (headers is HeaderSet set) ? set : new HeaderSet (headers);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the mod-sequence value that indicates the last known state of the messages being requested.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the mod-sequence value that indicates the last known state of the messages being requested.</para>\n\t\t/// <para>If this property is set, the results returned by <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a> will only include the message summaries which\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has enabled this feature via\n\t\t/// <see cref=\"IMailStore.EnableQuickResync(System.Threading.CancellationToken)\"/>, then the Fetch or FetchAsync method\n\t\t/// will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that were expunged from the folder after\n\t\t/// the change specified by the mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message in the folder, the mail service may choose\n\t\t/// to return information that was not explicitly requested. It is therefore important to be prepared to handle both\n\t\t/// additional fields on a <see cref=\"IMessageSummary\"/> for messages that were requested as well as summaries for\n\t\t/// messages that were not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value that indicates the last known state of the messages being requested.</value>\n\t\tpublic ulong? ChangedSince { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the message summary items to fetch.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the message summary items to fetch.\n\t\t/// </remarks>\n\t\t/// <value>The message summary items.</value>\n\t\tpublic MessageSummaryItems Items { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the set of headers that will be fetched.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the set of headers that will be fetched.\n\t\t/// </remarks>\n\t\t/// <value>The set of headers to be fetched.</value>\n\t\tpublic HeaderSet? Headers { get; set; }\n\n#if ENABLE_LAZY_PREVIEW_API\n\t\t/// <summary>\n\t\t/// Get or set options to use when fetching <see cref=\"MessageSummaryItems.PreviewText\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets options to use when fetching <see cref=\"MessageSummaryItems.PreviewText\"/>.</para>\n\t\t/// <note type=\"note\">These options are only used if <see cref=\"Items\"/> includes the\n\t\t/// <see cref=\"MessageSummaryItems.PreviewText\"/> value.</note>\n\t\t/// </remarks>\n\t\tpublic PreviewOptions PreviewOptions { get; set; }\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderAccess.cs",
    "content": "﻿//\n// FolderMode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A folder access mode.\n\t/// </summary>\n\t/// <remarks>\n\t/// A folder access mode.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t/// </example>\n\tpublic enum FolderAccess {\n\t\t/// <summary>\n\t\t/// The folder is not open.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// The folder is read-only.\n\t\t/// </summary>\n\t\tReadOnly,\n\n\t\t/// <summary>\n\t\t/// The folder is read/write.\n\t\t/// </summary>\n\t\tReadWrite\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderAttributes.cs",
    "content": "﻿//\n// FolderAttributes.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Folder attributes as used by <see cref=\"IMailFolder.Attributes\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// Folder attributes as used by <see cref=\"IMailFolder.Attributes\"/>.\n\t/// </remarks>\n\t[Flags]\n\tpublic enum FolderAttributes {\n\t\t/// <summary>\n\t\t/// The folder does not have any attributes.\n\t\t/// </summary>\n\t\tNone          = 0,\n\n\t\t/// <summary>\n\t\t/// It is not possible for any subfolders to exist under the folder.\n\t\t/// </summary>\n\t\tNoInferiors   = (1 << 0),\n\n\t\t/// <summary>\n\t\t/// It is not possible to select the folder.\n\t\t/// </summary>\n\t\tNoSelect      = (1 << 1),\n\n\t\t/// <summary>\n\t\t/// The folder has been marked as possibly containing new messages\n\t\t/// since the folder was last selected.\n\t\t/// </summary>\n\t\tMarked        = (1 << 2),\n\n\t\t/// <summary>\n\t\t/// The folder does not contain any new messages since the folder\n\t\t/// was last selected.\n\t\t/// </summary>\n\t\tUnmarked      = (1 << 3),\n\n\t\t/// <summary>\n\t\t/// The folder does not exist, but is simply a place-holder.\n\t\t/// </summary>\n\t\tNonExistent   = (1 << 4),\n\n\t\t/// <summary>\n\t\t/// The folder is subscribed.\n\t\t/// </summary>\n\t\tSubscribed    = (1 << 5),\n\n\t\t/// <summary>\n\t\t/// The folder is remote.\n\t\t/// </summary>\n\t\tRemote        = (1 << 6),\n\n\t\t/// <summary>\n\t\t/// The folder has subfolders.\n\t\t/// </summary>\n\t\tHasChildren   = (1 << 7),\n\n\t\t/// <summary>\n\t\t/// The folder does not have any subfolders.\n\t\t/// </summary>\n\t\tHasNoChildren = (1 << 8),\n\n\t\t/// <summary>\n\t\t/// The folder is a special \"All\" folder containing an aggregate of all messages.\n\t\t/// </summary>\n\t\tAll           = (1 << 9),\n\n\t\t/// <summary>\n\t\t/// The folder is a special \"Archive\" folder.\n\t\t/// </summary>\n\t\tArchive       = (1 << 10),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Drafts\" folder.\n\t\t/// </summary>\n\t\tDrafts        = (1 << 11),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Flagged\" folder.\n\t\t/// </summary>\n\t\tFlagged       = (1 << 12),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Important\" folder.\n\t\t/// </summary>\n\t\tImportant     = (1 << 13),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Inbox\" folder.\n\t\t/// </summary>\n\t\tInbox         = (1 << 14),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Junk\" folder.\n\t\t/// </summary>\n\t\tJunk          = (1 << 15),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Sent\" folder.\n\t\t/// </summary>\n\t\tSent          = (1 << 16),\n\n\t\t/// <summary>\n\t\t/// The folder is the special \"Trash\" folder.\n\t\t/// </summary>\n\t\tTrash         = (1 << 17),\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderCreatedEventArgs.cs",
    "content": "﻿//\n// FolderCreatedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when a <see cref=\"IMailFolder\"/> is created.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when a <see cref=\"IMailFolder\"/> is created.\n\t/// </remarks>\n\tpublic class FolderCreatedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.FolderCreatedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderCreatedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The newly created folder.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folder\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderCreatedEventArgs (IMailFolder folder)\n\t\t{\n\t\t\tif (folder == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (folder));\n\n\t\t\tFolder = folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the folder that was just created.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder that was just created.\n\t\t/// </remarks>\n\t\t/// <value>The folder.</value>\n\t\tpublic IMailFolder Folder {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderFeature.cs",
    "content": "﻿//\n// FolderFeature.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit\n{\n\t/// <summary>\n\t/// An optional feature that an <see cref=\"IMailFolder\"/> may support.\n\t/// </summary>\n\t/// <remarks>\n\t/// An optional feature that an <see cref=\"IMailFolder\"/> may support.\n\t/// </remarks>\n\tpublic enum FolderFeature\n\t{\n\t\t/// <summary>\n\t\t/// Indicates that the folder supports access rights.\n\t\t/// </summary>\n\t\tAccessRights,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder allows arbitrary annotations to be set on a message.\n\t\t/// </summary>\n\t\tAnnotations,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder allows arbitrary metadata to be set.\n\t\t/// </summary>\n\t\tMetadata,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder uses modification sequences for every state change of a message.\n\t\t/// </summary>\n\t\tModSequences,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder supports quick resynchronization when opening.\n\t\t/// </summary>\n\t\tQuickResync,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder supports quotas.\n\t\t/// </summary>\n\t\tQuotas,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder supports sorting messages.\n\t\t/// </summary>\n\t\tSorting,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder supports threading messages.\n\t\t/// </summary>\n\t\tThreading,\n\n\t\t/// <summary>\n\t\t/// Indicates that the folder supports the use of UTF-8.\n\t\t/// </summary>\n\t\tUTF8,\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderNamespace.cs",
    "content": "﻿//\n// FolderNamespace.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A folder namespace.\n\t/// </summary>\n\t/// <remarks>\n\t/// A folder namespace.\n\t/// </remarks>\n\tpublic class FolderNamespace\n\t{\n\t\t/// <summary>\n\t\t/// The directory separator for this folder namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The directory separator for this folder namespace.\n\t\t/// </remarks>\n\t\tpublic readonly char DirectorySeparator;\n\n\t\t/// <summary>\n\t\t/// The base path for this folder namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The base path for this folder namespace.\n\t\t/// </remarks>\n\t\tpublic readonly string Path;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.FolderNamespace\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new folder namespace.\n\t\t/// </remarks>\n\t\t/// <param name=\"directorySeparator\">The directory separator.</param>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNamespace (char directorySeparator, string path)\n\t\t{\n\t\t\tif (path == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (path));\n\n\t\t\tDirectorySeparator = directorySeparator;\n\t\t\tPath = path;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderNamespaceCollection.cs",
    "content": "﻿//\n// FolderNamespaceCollection.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Collections;\nusing System.Collections.Generic;\n\nusing MimeKit.Utils;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A read-only collection of folder namespaces.\n\t/// </summary>\n\t/// <remarks>\n\t/// A read-only collection of folder namespaces.\n\t/// </remarks>\n\tpublic class FolderNamespaceCollection : IEnumerable<FolderNamespace>\n\t{\n\t\treadonly List<FolderNamespace> namespaces;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNamespaceCollection\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNamespaceCollection\"/>.\n\t\t/// </remarks>\n\t\tpublic FolderNamespaceCollection ()\n\t\t{\n\t\t\tnamespaces = new List<FolderNamespace> ();\n\t\t}\n\n\t\t#region ICollection implementation\n\n\t\t/// <summary>\n\t\t/// Gets the number of folder namespaces contained in the collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of folder namespaces contained in the collection.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget { return namespaces.Count; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified namespace.\n\t\t/// </remarks>\n\t\t/// <param name=\"namespace\">The namespace to add.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic void Add (FolderNamespace @namespace)\n\t\t{\n\t\t\tif (@namespace == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (@namespace));\n\n\t\t\tnamespaces.Add (@namespace);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes all namespaces from the collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all namespaces from the collection.\n\t\t/// </remarks>\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tnamespaces.Clear ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks if the collection contains the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Checks if the collection contains the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified namespace exists;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic bool Contains (FolderNamespace @namespace)\n\t\t{\n\t\t\tif (@namespace == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (@namespace));\n\n\t\t\treturn namespaces.Contains (@namespace);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the first occurrence of the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the first occurrence of the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the first occurrence of the specified\n\t\t/// namespace was removed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic bool Remove (FolderNamespace @namespace)\n\t\t{\n\t\t\tif (@namespace == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (@namespace));\n\n\t\t\treturn namespaces.Remove (@namespace);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the <see cref=\"MailKit.FolderNamespace\"/> at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the <see cref=\"MailKit.FolderNamespace\"/> at the specified index.\n\t\t/// </remarks>\n\t\t/// <value>The folder namespace at the specified index.</value>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"value\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic FolderNamespace this [int index] {\n\t\t\tget {\n\t\t\t\tif (index < 0 || index >= namespaces.Count)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\treturn namespaces[index];\n\t\t\t}\n\t\t\tset {\n\t\t\t\tif (index < 0 || index >= namespaces.Count)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\tif (value == null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (value));\n\n\t\t\t\tnamespaces[index] = value;\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Gets the enumerator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the enumerator.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<FolderNamespace> GetEnumerator ()\n\t\t{\n\t\t\treturn namespaces.GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Gets the enumerator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the enumerator.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn namespaces.GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\tstatic bool Escape (char directorySeparator)\n\t\t{\n\t\t\treturn directorySeparator == '\\\\' || directorySeparator == '\"';\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:MailKit.FolderNamespaceCollection\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:MailKit.FolderNamespaceCollection\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"T:System.String\"/> that represents the current <see cref=\"T:MailKit.FolderNamespaceCollection\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tbuilder.Append ('(');\n\t\t\tfor (int i = 0; i < namespaces.Count; i++) {\n\t\t\t\tbuilder.Append (\"(\\\"\");\n\t\t\t\tif (Escape (namespaces[i].DirectorySeparator))\n\t\t\t\t\tbuilder.Append ('\\\\');\n\t\t\t\tbuilder.Append (namespaces[i].DirectorySeparator);\n\t\t\t\tbuilder.Append (\"\\\" \");\n\t\t\t\tMimeUtils.AppendQuoted (builder, namespaces[i].Path);\n\t\t\t\tbuilder.Append (')');\n\t\t\t}\n\t\t\tbuilder.Append (')');\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderNotFoundException.cs",
    "content": "﻿//\n// FolderNotFoundException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when a folder could not be found.\n\t/// </summary>\n\t/// <remarks>\n\t/// This exception is thrown by <see cref=\"IMailFolder.GetSubfolder(string,System.Threading.CancellationToken)\"/>.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class FolderNotFoundException : Exception\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deserializes a <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected FolderNotFoundException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tFolderName = info.GetString (\"FolderName\");\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"folderName\">The name of the folder.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folderName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNotFoundException (string message, string folderName, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tif (folderName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (folderName));\n\n\t\t\tFolderName = folderName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"folderName\">The name of the folder.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folderName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNotFoundException (string message, string folderName) : base (message)\n\t\t{\n\t\t\tif (folderName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (folderName));\n\n\t\t\tFolderName = folderName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"folderName\">The name of the folder.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folderName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNotFoundException (string folderName) : this (\"The requested folder could not be found.\", folderName)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the name of the folder that could not be found.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the folder that could not be found.\n\t\t/// </remarks>\n\t\t/// <value>The name of the folder.</value>\n\t\tpublic string FolderName {\n\t\t\tget; private set;\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serializes the state of the <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecurityCritical]\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tinfo.AddValue (\"FolderName\", FolderName);\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderNotOpenException.cs",
    "content": "﻿//\n// FolderNotOpenException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when a folder is not open.\n\t/// </summary>\n\t/// <remarks>\n\t/// This exception is thrown when an operation on a folder could not be completed\n\t/// due to the folder being in a closed state. For example, the\n\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,System.Threading.CancellationToken, ITransferProgress)\"/>\n\t/// method will throw a <see cref=\"FolderNotOpenException\"/> if the folder is not\n\t/// current open.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class FolderNotOpenException : InvalidOperationException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotOpenException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deserializes a <see cref=\"FolderNotOpenException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected FolderNotOpenException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tvar value = info.GetString (\"FolderAccess\");\n\n\t\t\tif (!Enum.TryParse (value, out FolderAccess access))\n\t\t\t\tFolderAccess = FolderAccess.ReadOnly;\n\t\t\telse\n\t\t\t\tFolderAccess = access;\n\n\t\t\tFolderName = info.GetString (\"FolderName\");\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotOpenException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNotOpenException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"folderName\">The folder name.</param>\n\t\t/// <param name=\"access\">The minimum folder access required by the operation.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folderName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNotOpenException (string folderName, FolderAccess access, string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tif (folderName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (folderName));\n\n\t\t\tFolderName = folderName;\n\t\t\tFolderAccess = access;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotOpenException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNotOpenException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"folderName\">The folder name.</param>\n\t\t/// <param name=\"access\">The minimum folder access required by the operation.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folderName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNotOpenException (string folderName, FolderAccess access, string message) : base (message)\n\t\t{\n\t\t\tif (folderName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (folderName));\n\n\t\t\tFolderName = folderName;\n\t\t\tFolderAccess = access;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderNotOpenException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderNotOpenException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"folderName\">The folder name.</param>\n\t\t/// <param name=\"access\">The minimum folder access required by the operation.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folderName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic FolderNotOpenException (string folderName, FolderAccess access) : this (folderName, access, GetDefaultMessage (access))\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the folder.\n\t\t/// </remarks>\n\t\t/// <value>The name of the folder.</value>\n\t\tpublic string FolderName {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the minimum folder access required by the operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the minimum folder access required by the operation.\n\t\t/// </remarks>\n\t\t/// <value>The minimum required folder access.</value>\n\t\tpublic FolderAccess FolderAccess {\n\t\t\tget; private set;\n\t\t}\n\n\t\tstatic string GetDefaultMessage (FolderAccess access)\n\t\t{\n\t\t\tif (access == FolderAccess.ReadWrite)\n\t\t\t\treturn \"The folder is not currently open in read-write mode.\";\n\n\t\t\treturn \"The folder is not currently open.\";\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serializes the state of the <see cref=\"FolderNotOpenException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tinfo.AddValue (\"FolderAccess\", FolderAccess.ToString ());\n\t\t\tinfo.AddValue (\"FolderName\", FolderName);\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderQuota.cs",
    "content": "﻿//\n// FolderQuota.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A folder quota.\n\t/// </summary>\n\t/// <remarks>\n\t/// A <see cref=\"FolderQuota\"/> is returned by <see cref=\"IMailFolder.GetQuota(System.Threading.CancellationToken)\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\tpublic class FolderQuota\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.FolderQuota\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderQuota\"/> with the specified root.\n\t\t/// </remarks>\n\t\t/// <param name=\"quotaRoot\">The quota root.</param>\n\t\tpublic FolderQuota (IMailFolder? quotaRoot)\n\t\t{\n\t\t\tQuotaRoot = quotaRoot;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the quota root.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the quota root. If the quota root is <see langword=\"null\" />, then\n\t\t/// it suggests that the folder does not have a quota.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The quota root.</value>\n\t\tpublic IMailFolder? QuotaRoot {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the message limit.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the message limit.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The message limit.</value>\n\t\tpublic uint? MessageLimit {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the storage limit, in kilobytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the storage limit, in kilobytes.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The storage limit, in kilobytes.</value>\n\t\tpublic uint? StorageLimit {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the current message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the current message count.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The current message count.</value>\n\t\tpublic uint? CurrentMessageCount {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the size of the current storage, in kilobytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the size of the current storage, in kilobytes.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The size of the current storage, in kilobytes.</value>\n\t\tpublic uint? CurrentStorageSize {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/FolderRenamedEventArgs.cs",
    "content": "﻿//\n// FolderRenamedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when a <see cref=\"IMailFolder\"/> is renamed.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when a <see cref=\"IMailFolder\"/> is renamed.\n\t/// </remarks>\n\tpublic class FolderRenamedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.FolderRenamedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"FolderRenamedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"oldName\">The old name of the folder.</param>\n\t\t/// <param name=\"newName\">The new name of the folder.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"oldName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"newName\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic FolderRenamedEventArgs (string oldName, string newName)\n\t\t{\n\t\t\tif (oldName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (oldName));\n\n\t\t\tif (newName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (newName));\n\n\t\t\tOldName = oldName;\n\t\t\tNewName = newName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The old name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The old name of the folder.\n\t\t/// </remarks>\n\t\t/// <value>The old name.</value>\n\t\tpublic string OldName {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The new name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The new name of the folder.\n\t\t/// </remarks>\n\t\t/// <value>The new name.</value>\n\t\tpublic string NewName {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/HeaderSet.cs",
    "content": "﻿//\n// HeaderSet.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A set of headers.\n\t/// </summary>\n\t/// <remarks>\n\t/// A set of headers.\n\t/// </remarks>\n\tpublic class HeaderSet : ICollection<string>\n\t{\n\t\tconst string AtomSafeCharacters = \"!#$%&'*+-/=?^_`{|}~\";\n\n\t\t/// <summary>\n\t\t/// A set of headers that only includes all headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// When used with a <see cref=\"IFetchRequest\"/>, this pre-computed set of headers can be used\n\t\t/// to fetch the entire list of headers for a message.\n\t\t/// </remarks>\n\t\tpublic static readonly HeaderSet All = new HeaderSet () { Exclude = true, IsReadOnly = true };\n\n\t\t/// <summary>\n\t\t/// A set of headers that only includes the standard envelope headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// When used with a <see cref=\"IFetchRequest\"/>, this pre-computed set of headers can be used\n\t\t/// to fetch the standard envelope headers for a message.\n\t\t/// </remarks>\n\t\tpublic static readonly HeaderSet Envelope = new HeaderSet (new HeaderId[] {\n\t\t\tHeaderId.Sender,\n\t\t\tHeaderId.From,\n\t\t\tHeaderId.ReplyTo,\n\t\t\tHeaderId.To,\n\t\t\tHeaderId.Cc,\n\t\t\tHeaderId.Bcc,\n\t\t\tHeaderId.Subject,\n\t\t\tHeaderId.Date,\n\t\t\tHeaderId.MessageId,\n\t\t\tHeaderId.InReplyTo\n\t\t}) { IsReadOnly = true };\n\n\t\t/// <summary>\n\t\t/// A set of headers that only includes the <c>References</c> header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// When used with a <see cref=\"IFetchRequest\"/>, this pre-computed set of headers can be used\n\t\t/// to fetch the <c>References</c> header for a message. Generally, this should be used in\n\t\t/// combination with <see cref=\"MessageSummaryItems.Envelope\"/> in order to have all of the\n\t\t/// information needed to thread messages using the <see cref=\"ThreadingAlgorithm.References\"/>\n\t\t/// threading algorithm.\n\t\t/// </remarks>\n\t\tpublic static readonly HeaderSet References = new HeaderSet (new HeaderId[] { HeaderId.References }) { IsReadOnly = true };\n\n\t\treadonly HashSet<string> hash = new HashSet<string> (StringComparer.Ordinal);\n\t\tbool exclude;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"HeaderSet\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"HeaderSet\"/>.\n\t\t/// </remarks>\n\t\tpublic HeaderSet ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"HeaderSet\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"HeaderSet\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"headers\">The headers to include.</param>\n\t\tpublic HeaderSet (IEnumerable<HeaderId> headers)\n\t\t{\n\t\t\tAddRange (headers);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"HeaderSet\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"HeaderSet\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"headers\">The headers to include.</param>\n\t\tpublic HeaderSet (IEnumerable<string> headers)\n\t\t{\n\t\t\tAddRange (headers);\n\t\t}\n\n\t\tvoid CheckReadOnly ()\n\t\t{\n\t\t\tif (IsReadOnly)\n\t\t\t\tthrow new InvalidOperationException (\"The HeaderSet is read-only.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of headers in the set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of headers in the set.\n\t\t/// </remarks>\n\t\t/// <value>The number of headers.</value>\n\t\tpublic int Count {\n\t\t\tget { return hash.Count; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether this set of headers is meant to be excluded when used with a <see cref=\"IFetchRequest\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get or set whether this set of headers is meant to be excluded when used with a <see cref=\"IFetchRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the headers are meant to be excluded; otherwise, <see langword=\"false\" />.</value>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic bool Exclude {\n\t\t\tget { return exclude; }\n\t\t\tset {\n\t\t\t\tCheckReadOnly ();\n\t\t\t\texclude = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the set of headers is read-only.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the set of headers is read-only.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if this instance is read only; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsReadOnly {\n\t\t\tget; private set;\n\t\t}\n\n\t\tstatic bool IsAsciiAtom (char c)\n\t\t{\n\t\t\treturn (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || AtomSafeCharacters.IndexOf (c) != -1;\n\t\t}\n\n\t\tstatic bool IsValid (string header)\n\t\t{\n\t\t\tif (header.Length == 0)\n\t\t\t\treturn false;\n\n\t\t\tfor (int i = 0; i < header.Length; i++) {\n\t\t\t\tif (header[i] < 127 && !IsAsciiAtom (header[i]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified header to the set of headers.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the header was added to the set; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"header\">The header to add.</param>\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"header\"/> is not a valid <see cref=\"HeaderId\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic bool Add (HeaderId header)\n\t\t{\n\t\t\tif (header == HeaderId.Unknown)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (header));\n\n\t\t\tCheckReadOnly ();\n\n\t\t\treturn hash.Add (header.ToHeaderName ().ToUpperInvariant ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified header to the set of headers.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the header was added to the set; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"header\">The header to add.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"header\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic bool Add (string header)\n\t\t{\n\t\t\tif (header == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (header));\n\n\t\t\tif (!IsValid (header))\n\t\t\t\tthrow new ArgumentException (\"The header field is invalid.\", nameof (header));\n\n\t\t\tCheckReadOnly ();\n\n\t\t\treturn hash.Add (header.ToUpperInvariant ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified header to the set of headers.\n\t\t/// </remarks>\n\t\t/// <param name=\"item\">The header to add.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"item\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tvoid ICollection<string>.Add (string item)\n\t\t{\n\t\t\tAdd (item);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a collection of headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified headers to the set of headers.\n\t\t/// </remarks>\n\t\t/// <param name=\"headers\">The headers to add.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic void AddRange (IEnumerable<HeaderId> headers)\n\t\t{\n\t\t\tif (headers == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (headers));\n\n\t\t\tCheckReadOnly ();\n\n\t\t\tforeach (var header in headers) {\n\t\t\t\tif (header == HeaderId.Unknown)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the headers is invalid.\", nameof (headers));\n\n\t\t\t\thash.Add (header.ToHeaderName ().ToUpperInvariant ());\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a collection of headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the specified headers to the set of headers.\n\t\t/// </remarks>\n\t\t/// <param name=\"headers\">The headers to add.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic void AddRange (IEnumerable<string> headers)\n\t\t{\n\t\t\tif (headers == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (headers));\n\n\t\t\tCheckReadOnly ();\n\n\t\t\tforeach (var header in headers) {\n\t\t\t\tif (header == null || !IsValid (header))\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the headers is invalid.\", nameof (headers));\n\n\t\t\t\thash.Add (header.ToUpperInvariant ());\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clear the set of headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears the set of headers.\n\t\t/// </remarks>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tCheckReadOnly ();\n\t\t\thash.Clear ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copy all of the headers in the <see cref=\"HeaderSet\"/> to the specified array.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies all of the headers within the <see cref=\"HeaderSet\"/> into the array,\n\t\t/// starting at the specified array index.\n\t\t/// </remarks>\n\t\t/// <param name=\"array\">The array to copy the headers to.</param>\n\t\t/// <param name=\"arrayIndex\">The index into the array.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"array\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"arrayIndex\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic void CopyTo (string[] array, int arrayIndex)\n\t\t{\n\t\t\thash.CopyTo (array, arrayIndex);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Check if the set of headers contains the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not the set of headers contains the specified header.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified header exists;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"header\">The header identifier.</param>\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"header\"/> is not a valid <see cref=\"HeaderId\"/>.\n\t\t/// </exception>\n\t\tpublic bool Contains (HeaderId header)\n\t\t{\n\t\t\tif (header == HeaderId.Unknown)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (header));\n\n\t\t\treturn hash.Contains (header.ToHeaderName ().ToUpperInvariant ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Check if the set of headers contains the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not the set of headers contains the specified header.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified header exists;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"header\">The name of the header.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"header\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic bool Contains (string header)\n\t\t{\n\t\t\tif (header == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (header));\n\n\t\t\treturn hash.Contains (header.ToUpperInvariant ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the specified header if it exists.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified header was removed;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"header\">The header.</param>\n\t\t/// <exception cref=\"ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"header\"/> is not a valid <see cref=\"HeaderId\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic bool Remove (HeaderId header)\n\t\t{\n\t\t\tif (header == HeaderId.Unknown)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (header));\n\n\t\t\tCheckReadOnly ();\n\n\t\t\treturn hash.Remove (header.ToHeaderName ().ToUpperInvariant ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove the specified header.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the specified header if it exists.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified header was removed;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"header\">The header.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"header\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The operation is invalid because the <see cref=\"HeaderSet\"/> is read-only.\n\t\t/// </exception>\n\t\tpublic bool Remove (string header)\n\t\t{\n\t\t\tif (header == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (header));\n\n\t\t\tCheckReadOnly ();\n\n\t\t\treturn hash.Remove (header.ToUpperInvariant ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the set of headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the set of headers.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<string> GetEnumerator ()\n\t\t{\n\t\t\treturn hash.GetEnumerator ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the set of headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the set of headers.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn hash.GetEnumerator ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/IAppendRequest.cs",
    "content": "﻿//\n// IAppendRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for appending a message to a folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for appending a message to a folder.\n\t/// </remarks>\n\tpublic interface IAppendRequest\n\t{\n\t\t/// <summary>\n\t\t/// Get the message that should be appended to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message that should be appended to the folder.\n\t\t/// </remarks>\n\t\t/// <value>The message.</value>\n\t\tMimeMessage Message { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set the message flags that should be set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the message flags that should be set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The message flags.</value>\n\t\tMessageFlags Flags { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the keywords that should be set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the keywords that should be set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The keywords.</value>\n\t\tISet<string>? Keywords { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the timestamp that should be used by folder as the <see cref=\"MessageSummaryItems.InternalDate\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the timestamp that should be used by folder as the <see cref=\"MessageSummaryItems.InternalDate\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The date and time to use for the INTERNALDATE or <see langword=\"null\" /> if it should be left up to the folder to decide.</value>\n\t\tDateTimeOffset? InternalDate { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the list of annotations that should be set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the list of annotations that should be set on the message.</para>\n\t\t/// <note type=\"note\">\n\t\t/// <para>This feature is not supported by all folders.</para>\n\t\t/// <para>Use <see cref=\"IMailFolder.Supports(FolderFeature)\"/> with the <see cref=\"FolderFeature.Annotations\"/> enum value\n\t\t/// to determine if this feature is supported.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <value>The list of annotations.</value>\n\t\tIList<Annotation>? Annotations { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the transfer progress reporting mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the transfer progress reporting mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The transfer progress mechanism.</value>\n\t\tITransferProgress? TransferProgress { get; set; }\n\t}\n}\n"
  },
  {
    "path": "MailKit/IAuthenticationSecretDetector.cs",
    "content": "﻿//\n// IAuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An authentication secret.\n\t/// </summary>\n\t/// <remarks>\n\t/// An authentication secret.\n\t/// </remarks>\n\tpublic struct AuthenticationSecret\n\t{\n\t\t/// <summary>\n\t\t/// Get the starting offset of the secret within a buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the starting offset of the secret within a buffer.\n\t\t/// </remarks>\n\t\t/// <value>The start offset of the secret.</value>\n\t\tpublic int StartIndex { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Get the length of the secret within a buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the secret within a buffer.\n\t\t/// </remarks>\n\t\t/// <value>The length of the secret.</value>\n\t\tpublic int Length { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Create a new <see cref=\"AuthenticationSecret\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AuthenticationSecret\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"startIndex\">The start index of the secret.</param>\n\t\t/// <param name=\"length\">The length of the secret.</param>\n\t\tpublic AuthenticationSecret (int startIndex, int length)\n\t\t{\n\t\t\tStartIndex = startIndex;\n\t\t\tLength = length;\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An interface for detecting authentication secrets.\n\t/// </summary>\n\t/// <remarks>\n\t/// An interface for detecting authentication secrets.\n\t/// </remarks>\n\tpublic interface IAuthenticationSecretDetector\n\n\t{\n\t\t/// <summary>\n\t\t/// Detect a list of secrets within a buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Detects a list of secrets within a buffer.\n\t\t/// </remarks>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The length of the buffer.</param>\n\t\t/// <returns>A list of secrets.</returns>\n\t\tIList<AuthenticationSecret> DetectSecrets (byte[] buffer, int offset, int count);\n\t}\n}\n"
  },
  {
    "path": "MailKit/IFetchRequest.cs",
    "content": "﻿//\n// IFetchRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for fetching various properties of a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for fetching various properties of a message.\n\t/// </remarks>\n\tpublic interface IFetchRequest\n\t{\n\t\t/// <summary>\n\t\t/// Get or set the mod-sequence value that indicates the last known state of the messages being requested.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the mod-sequence value that indicates the last known state of the messages being requested.</para>\n\t\t/// <para>If this property is set, the results returned by <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a> will only include the message summaries which\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has enabled this feature via\n\t\t/// <see cref=\"IMailStore.EnableQuickResync(System.Threading.CancellationToken)\"/>, then the Fetch or FetchAsync method\n\t\t/// will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that were expunged from the folder after\n\t\t/// the change specified by the mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message in the folder, the mail service may choose\n\t\t/// to return information that was not explicitly requested. It is therefore important to be prepared to handle both\n\t\t/// additional fields on a <see cref=\"IMessageSummary\"/> for messages that were requested as well as summaries for\n\t\t/// messages that were not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value that indicates the last known state of the messages being requested.</value>\n\t\tulong? ChangedSince { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the message summary items to fetch.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the message summary items to fetch.\n\t\t/// </remarks>\n\t\t/// <value>The message summary items.</value>\n\t\tMessageSummaryItems Items { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the set of headers that will be fetched.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the set of headers that will be fetched.\n\t\t/// </remarks>\n\t\t/// <value>The set of headers to be fetched.</value>\n\t\tHeaderSet? Headers { get; }\n\n#if ENABLE_LAZY_PREVIEW_API\n\t\t/// <summary>\n\t\t/// Get the options to use when fetching <see cref=\"MessageSummaryItems.PreviewText\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the options to use when fetching <see cref=\"MessageSummaryItems.PreviewText\"/>.</para>\n\t\t/// <note type=\"note\">These options are only used if <see cref=\"Items\"/> includes the\n\t\t/// <see cref=\"MessageSummaryItems.PreviewText\"/> value.</note>\n\t\t/// </remarks>\n\t\tPreviewOptions PreviewOptions { get; }\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailFolder.cs",
    "content": "﻿//\n// IMailFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit.Search;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for a mailbox folder as used by <see cref=\"IMailStore\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by message stores such as <see cref=\"MailKit.Net.Imap.ImapClient\"/>\n\t/// </remarks>\n\tpublic interface IMailFolder : IEnumerable<MimeMessage>\n\t{\n\t\t/// <summary>\n\t\t/// Gets an object that can be used to synchronize access to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an object that can be used to synchronize access to the folder.\n\t\t/// </remarks>\n\t\t/// <value>The sync root.</value>\n\t\tobject SyncRoot { get; }\n\n\t\t/// <summary>\n\t\t/// Get the parent folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Root-level folders do not have a parent folder.\n\t\t/// </remarks>\n\t\t/// <value>The parent folder.</value>\n\t\tIMailFolder? ParentFolder { get; }\n\n\t\t/// <summary>\n\t\t/// Get the folder attributes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder attributes.\n\t\t/// </remarks>\n\t\t/// <value>The folder attributes.</value>\n\t\tFolderAttributes Attributes { get; }\n\n\t\t/// <summary>\n\t\t/// Get the annotation access level.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If annotations are supported, this property can be used to determine whether or not\n\t\t/// the <see cref=\"IMailFolder\"/> supports reading and writing annotations.\n\t\t/// </remarks>\n\t\t/// <value>The annotation access level.</value>\n\t\tAnnotationAccess AnnotationAccess { get; }\n\n\t\t/// <summary>\n\t\t/// Get the supported annotation scopes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If annotations are supported, this property can be used to determine which\n\t\t/// annotation scopes are supported by the <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The supported annotation scopes.</value>\n\t\tAnnotationScope AnnotationScopes { get; }\n\n\t\t/// <summary>\n\t\t/// Get the maximum size of annotation values supported by the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If annotations are supported, this property can be used to determine the\n\t\t/// maximum size of annotation values supported by the <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The maximum size of annotation values supported by the folder.</value>\n\t\tuint MaxAnnotationSize { get; }\n\n\t\t/// <summary>\n\t\t/// Get the permanent flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The permanent flags are the message flags that will persist between sessions.</para>\n\t\t/// <para>If the <see cref=\"MessageFlags.UserDefined\"/> flag is set, then the folder allows\n\t\t/// storing of user-defined (custom) message flags.</para>\n\t\t/// </remarks>\n\t\t/// <value>The permanent flags.</value>\n\t\tMessageFlags PermanentFlags { get; }\n\n\t\t/// <summary>\n\t\t/// Get the permanent keywords.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The permanent keywords are the keywords that will persist between sessions.</para>\n\t\t/// <para>If the <see cref=\"MessageFlags.UserDefined\"/> flag is set in <see cref=\"PermanentFlags\"/>,\n\t\t/// then the folder allows storing of user-defined keywords as well.</para>\n\t\t/// </remarks>\n\t\t/// <value>The permanent keywords.</value>\n\t\tIReadOnlySetOfStrings PermanentKeywords { get; }\n\n\t\t/// <summary>\n\t\t/// Get the accepted flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The accepted flags are the message flags that will be accepted and persist\n\t\t/// for the current session. For the set of flags that will persist between\n\t\t/// sessions, see the <see cref=\"PermanentFlags\"/> property.\n\t\t/// </remarks>\n\t\t/// <value>The accepted flags.</value>\n\t\tMessageFlags AcceptedFlags { get; }\n\n\t\t/// <summary>\n\t\t/// Get the accepted keywords.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The accepted keywords are the keywords that will be accepted and persist\n\t\t/// for the current session. For the set of keywords that will persist between\n\t\t/// sessions, see the <see cref=\"PermanentKeywords\"/> property.\n\t\t/// </remarks>\n\t\t/// <value>The accepted keywords.</value>\n\t\tIReadOnlySetOfStrings AcceptedKeywords { get; }\n\n\t\t/// <summary>\n\t\t/// Get the directory separator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the directory separator.\n\t\t/// </remarks>\n\t\t/// <value>The directory separator.</value>\n\t\tchar DirectorySeparator { get; }\n\n\t\t/// <summary>\n\t\t/// Get the read/write access of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the read/write access of the folder.\n\t\t/// </remarks>\n\t\t/// <value>The read/write access.</value>\n\t\tFolderAccess Access { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder is a namespace folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder is a namespace folder.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is a namespace folder; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsNamespace { get; }\n\n\t\t/// <summary>\n\t\t/// Get the full name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This is the equivalent of the full path of a file on a file system.\n\t\t/// </remarks>\n\t\t/// <value>The full name of the folder.</value>\n\t\tstring FullName { get; }\n\n\t\t/// <summary>\n\t\t/// Get the name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This is the equivalent of the file name of a file on the file system.\n\t\t/// </remarks>\n\t\t/// <value>The name of the folder.</value>\n\t\tstring Name { get; }\n\n\t\t/// <summary>\n\t\t/// Get the unique identifier for the folder, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a unique identifier for the folder, if available. This is useful for clients\n\t\t/// implementing a message cache that want to track the folder after it is renamed by another\n\t\t/// client.</para>\n\t\t/// <note type=\"note\">This property will only be available if the server supports the\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.</note>\n\t\t/// </remarks>\n\t\t/// <value>The unique folder identifier.</value>\n\t\tstring? Id { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder is subscribed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder is subscribed.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is subscribed; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsSubscribed { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder is currently open.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder is currently open.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is currently open; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsOpen { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder can be opened.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder can be opened.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder can be opened; otherwise, <see langword=\"false\" />.</value>\n\t\tbool CanOpen { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder exists.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder exists; otherwise, <see langword=\"false\" />.</value>\n\t\tbool Exists { get; }\n\n\t\t/// <summary>\n\t\t/// Get the highest mod-sequence value of all messages in the mailbox.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the highest mod-sequence value of all messages in the mailbox.\n\t\t/// </remarks>\n\t\t/// <value>The highest mod-sequence value.</value>\n\t\tulong HighestModSeq { get; }\n\n\t\t/// <summary>\n\t\t/// Get the Unique ID validity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>UIDs are only valid so long as the UID validity value remains unchanged. If and when\n\t\t/// the folder's <see cref=\"UidValidity\"/> is changed, a client MUST discard its cache of UIDs\n\t\t/// along with any summary information that it may have and re-query the folder.</para>\n\t\t/// <para>The <see cref=\"UidValidity\"/> will only be set after the folder has been opened.</para>\n\t\t/// </remarks>\n\t\t/// <value>The UID validity.</value>\n\t\tuint UidValidity { get; }\n\n\t\t/// <summary>\n\t\t/// Get the UID that the next message that is added to the folder will be assigned.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This value will only be set after the folder has been opened.\n\t\t/// </remarks>\n\t\t/// <value>The next UID.</value>\n\t\tUniqueId? UidNext { get; }\n\n\t\t/// <summary>\n\t\t/// Get the maximum size of a message that can be appended to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the maximum size of a message that can be appended to the folder.</para>\n\t\t/// <note type=\"note\">If the value is not set, then the limit is unspecified.</note>\n\t\t/// </remarks>\n\t\t/// <value>The append limit.</value>\n\t\tuint? AppendLimit { get; }\n\n\t\t/// <summary>\n\t\t/// Get the size of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the size of the folder in bytes.</para>\n\t\t/// <note type=\"note\">If the value is not set, then the size is unspecified.</note>\n\t\t/// </remarks>\n\t\t/// <value>The size of the folder, in bytes.</value>\n\t\tulong? Size { get; }\n\n\t\t/// <summary>\n\t\t/// Get the index of the first unread message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the index of the first unread message in the folder.</para>\n\t\t/// <note type=\"note\"><para>This value will only be set after the folder has been opened.</para>\n\t\t/// <para>A value of <c>-1</c> indicates that there are no unread messages in the folder or that the server\n\t\t/// has not provided the index of the first unread message.</para></note>\n\t\t/// </remarks>\n\t\t/// <value>The index of the first unread message or <c>-1</c> if there are no unread messages in the folder.</value>\n\t\tint FirstUnread { get; }\n\n\t\t/// <summary>\n\t\t/// Get the number of unread messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of unread messages in the folder.</para>\n\t\t/// <note type=\"note\">This value will only be set after calling\n\t\t/// <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/>\n\t\t/// with <see cref=\"StatusItems.Unread\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <value>The number of unread messages.</value>\n\t\tint Unread { get; }\n\n\t\t/// <summary>\n\t\t/// Get the number of recently delivered messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of recently delivered messages in the folder.</para>\n\t\t/// <note type=\"note\">\n\t\t/// This value will only be set after calling\n\t\t/// <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/>\n\t\t/// with <see cref=\"StatusItems.Recent\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <value>The number of recently delivered messages.</value>\n\t\tint Recent { get; }\n\n\t\t/// <summary>\n\t\t/// Get the total number of messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the total number of messages in the folder.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByIndex\"/>\n\t\t/// </example>\n\t\t/// <value>The total number of messages.</value>\n\t\tint Count { get; }\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the threading algorithms supported by the folder.\n\t\t/// </remarks>\n\t\t/// <value>The supported threading algorithms.</value>\n\t\tHashSet<ThreadingAlgorithm> ThreadingAlgorithms { get; }\n\n\t\t/// <summary>\n\t\t/// Determine whether or not an <see cref=\"IMailFolder\"/> supports a feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not an <see cref=\"IMailFolder\"/> supports a feature.\n\t\t/// </remarks>\n\t\t/// <param name=\"feature\">The desired feature.</param>\n\t\t/// <returns><see langword=\"true\" /> if the feature is supported; otherwise, <see langword=\"false\" />.</returns>\n\t\tbool Supports (FolderFeature feature);\n\n\t\t/// <summary>\n\t\t/// Opens the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This variant of the <see cref=\"Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// method is meant for quick resynchronization of the folder. Before calling this method,\n\t\t/// the <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/> method MUST be called.</para>\n\t\t/// <para>You should also make sure to add listeners to the <see cref=\"MessagesVanished\"/> and\n\t\t/// <see cref=\"MessageFlagsChanged\"/> events to get notifications of changes since\n\t\t/// the last time the folder was opened.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"uidValidity\">The last known <see cref=\"UidValidity\"/> value.</param>\n\t\t/// <param name=\"highestModSeq\">The last known <see cref=\"HighestModSeq\"/> value.</param>\n\t\t/// <param name=\"uids\">The last known list of unique message identifiers.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The quick resynchronization feature has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the quick resynchronization feature.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tFolderAccess Open (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously opens the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This variant of the <see cref=\"OpenAsync(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// method is meant for quick resynchronization of the folder. Before calling this method,\n\t\t/// the <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/> method MUST be called.</para>\n\t\t/// <para>You should also make sure to add listeners to the <see cref=\"MessagesVanished\"/> and\n\t\t/// <see cref=\"MessageFlagsChanged\"/> events to get notifications of changes since\n\t\t/// the last time the folder was opened.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"uidValidity\">The last known <see cref=\"UidValidity\"/> value.</param>\n\t\t/// <param name=\"highestModSeq\">The last known <see cref=\"HighestModSeq\"/> value.</param>\n\t\t/// <param name=\"uids\">The last known list of unique message identifiers.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The quick resynchronization feature has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the quick resynchronization feature.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<FolderAccess> OpenAsync (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Opens the folder using the requested folder access.\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tFolderAccess Open (FolderAccess access, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously opens the folder using the requested folder access.\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<FolderAccess> OpenAsync (FolderAccess access, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Close the folder, optionally expunging the messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Closes the folder, optionally expunging the messages marked for deletion.\n\t\t/// </remarks>\n\t\t/// <param name=\"expunge\">If set to <see langword=\"true\" />, expunge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Close (bool expunge = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously close the folder, optionally expunging the messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously closes the folder, optionally expunging the messages marked for deletion.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"expunge\">If set to <see langword=\"true\" />, expunge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask CloseAsync (bool expunge = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"isMessageFolder\"><see langword=\"true\" /> if the folder will be used to contain messages; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIMailFolder? Create (string name, bool isMessageFolder, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"isMessageFolder\"><see langword=\"true\" /> if the folder will be used to contain messages; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IMailFolder?> CreateAsync (string name, bool isMessageFolder, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUses\">A list of special uses for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"specialUses\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIMailFolder? Create (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUses\">A list of special uses for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"specialUses\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IMailFolder?> CreateAsync (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUse\">The special use for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIMailFolder? Create (string name, SpecialFolder specialUse, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUse\">The special use for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IMailFolder?> CreateAsync (string name, SpecialFolder specialUse, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Rename the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Renames the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"parent\">The new parent folder.</param>\n\t\t/// <param name=\"name\">The new name of the folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"parent\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"parent\"/> does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is not a legal folder name.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be renamed (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Rename (IMailFolder parent, string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously rename the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously renames the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"parent\">The new parent folder.</param>\n\t\t/// <param name=\"name\">The new name of the folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"parent\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"parent\"/> does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is not a legal folder name.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be renamed (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask RenameAsync (IMailFolder parent, string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Delete the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deletes the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Delete (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously delete the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously deletes the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask DeleteAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Subscribe to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Subscribes to the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Subscribe (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously subscribe to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously subscribes to the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask SubscribeAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Unsubscribe from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Unsubscribes from the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Unsubscribe (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously unsubscribe from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously unsubscribes from the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask UnsubscribeAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the subfolders as well as queries the server for the status of the requested items.</para>\n\t\t/// <para>When the <paramref name=\"items\"/> argument is non-empty, this has the equivalent functionality\n\t\t/// of calling <see cref=\"GetSubfolders(bool,System.Threading.CancellationToken)\"/> and then calling\n\t\t/// <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/> on each of the returned folders.</para>\n\t\t/// <note type=\"tip\">Using this method is potentially more efficient than querying the status of each returned folder.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMailFolder> GetSubfolders (StatusItems items, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the subfolders as well as queries the server for the status of the requested items.</para>\n\t\t/// <para>When the <paramref name=\"items\"/> argument is non-empty, this has the equivalent functionality\n\t\t/// of calling <see cref=\"GetSubfoldersAsync(bool,System.Threading.CancellationToken)\"/> and then calling\n\t\t/// <see cref=\"StatusAsync(StatusItems,System.Threading.CancellationToken)\"/> on each of the returned folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMailFolder>> GetSubfoldersAsync (StatusItems items, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the subfolders.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMailFolder> GetSubfolders (bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the subfolders.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMailFolder>> GetSubfoldersAsync (bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified subfolder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified subfolder.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolder.</returns>\n\t\t/// <param name=\"name\">The name of the subfolder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is either an empty string or contains the <see cref=\"DirectorySeparator\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The requested folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIMailFolder GetSubfolder (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified subfolder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified subfolder.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolder.</returns>\n\t\t/// <param name=\"name\">The name of the subfolder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is either an empty string or contains the <see cref=\"DirectorySeparator\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The requested folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IMailFolder> GetSubfolderAsync (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Force the server to flush its state for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Forces the server to flush its state for the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Check (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously force the server to flush its state for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously forces the server to flush its state for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask CheckAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Update the values of the specified items.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Updates the values of the specified items.</para>\n\t\t/// <para>The <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/> method\n\t\t/// MUST NOT be used on a folder that is already in the opened state. Instead, other ways\n\t\t/// of getting the desired information should be used.</para>\n\t\t/// <para>For example, a common use for the <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t\t/// method is to get the number of unread messages in the folder. When the folder is open, however, it is\n\t\t/// possible to use the <see cref=\"IMailFolder.Search(MailKit.Search.SearchQuery, System.Threading.CancellationToken)\"/>\n\t\t/// method to query for the list of unread messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"items\">The items to update.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the STATUS command.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Status (StatusItems items, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously update the values of the specified items.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Updates the values of the specified items.</para>\n\t\t/// <para>The <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/> method\n\t\t/// MUST NOT be used on a folder that is already in the opened state. Instead, other ways\n\t\t/// of getting the desired information should be used.</para>\n\t\t/// <para>For example, a common use for the <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t\t/// method is to get the number of unread messages in the folder. When the folder is open, however, it is\n\t\t/// possible to use the <see cref=\"IMailFolder.Search(MailKit.Search.SearchQuery, System.Threading.CancellationToken)\"/>\n\t\t/// method to query for the list of unread messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"items\">The items to update.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the STATUS command.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask StatusAsync (StatusItems items, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the complete access control list for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the complete access control list for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The access control list.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tAccessControlList GetAccessControlList (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the complete access control list for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the complete access control list for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The access control list.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<AccessControlList> GetAccessControlListAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the access rights for a particular identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for a particular identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tAccessRights GetAccessRights (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for a particular identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the access rights for a particular identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<AccessRights> GetAccessRightsAsync (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the access rights for the current authenticated user.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for the current authenticated user.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tAccessRights GetMyAccessRights (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for the current authenticated user.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the access rights for the current authenticated user.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<AccessRights> GetMyAccessRightsAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Add access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid AddAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously add access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask AddAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Remove access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid RemoveAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask RemoveAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Set the access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid SetAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask SetAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Remove all access rights for the given identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all access rights for the given identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid RemoveAccess (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove all access rights for the given identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes all access rights for the given identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask RemoveAccessAsync (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the quota information for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the quota information for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tFolderQuota GetQuota (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the quota information for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the quota information for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<FolderQuota> GetQuotaAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Set the quota limits for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sets the quota limits for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The updated folder quota.</returns>\n\t\t/// <param name=\"messageLimit\">If not <see langword=\"null\" />, sets the maximum number of messages to allow.</param>\n\t\t/// <param name=\"storageLimit\">If not <see langword=\"null\" />, sets the maximum storage size (in kilobytes).</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tFolderQuota SetQuota (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the quota limits for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sets the quota limits for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The updated folder quota.</returns>\n\t\t/// <param name=\"messageLimit\">If not <see langword=\"null\" />, sets the maximum number of messages to allow.</param>\n\t\t/// <param name=\"storageLimit\">If not <see langword=\"null\" />, sets the maximum storage size (in kilobytes).</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<FolderQuota> SetQuotaAsync (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tstring? GetMetadata (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<string?> GetMetadataAsync (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"tags\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tMetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"tags\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<MetadataCollection> GetMetadataAsync (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tMetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<MetadataCollection> GetMetadataAsync (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid SetMetadata (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask SetMetadataAsync (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Expunge the folder, permanently removing all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Expunges the folder, permanently removing all messages marked for deletion.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for each\n\t\t/// message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Expunge (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously expunge the folder, permanently removing all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously expunges the folder, permanently removing all messages marked for deletion.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask ExpungeAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Expunge the specified uids, permanently removing them from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Expunges the specified uids, permanently removing them from the folder.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The message uids.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Expunge (IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously expunge the specified uids, permanently removing them from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously expunges the specified uids, permanently removing them from the folder.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uids\">The message uids.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask ExpungeAsync (IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tUniqueId? Append (IAppendRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<UniqueId?> AppendAsync (IAppendRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tUniqueId? Append (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<UniqueId?> AppendAsync (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends multiple messages to the folder and returns the UniqueIds assigned to each of the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise, an empty array.</returns>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Append (IList<IAppendRequest> requests, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends multiple messages to the folder and returns the UniqueIds assigned to each of the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, an empty array.</returns>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> AppendAsync (IList<IAppendRequest> requests, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends multiple messages to the folder and returns the UniqueIds assigned to each of the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise, an empty array.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"requests\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Append (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends multiple messages to the folder and returns the UniqueIds assigned to each of the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, an empty array.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"requests\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> AppendAsync (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tUniqueId? Replace (UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<UniqueId?> ReplaceAsync (UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tUniqueId? Replace (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<UniqueId?> ReplaceAsync (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tUniqueId? Replace (int index, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<UniqueId?> ReplaceAsync (int index, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tUniqueId? Replace (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<UniqueId?> ReplaceAsync (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tUniqueId? CopyTo (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<UniqueId?> CopyToAsync (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tUniqueIdMap CopyTo (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<UniqueIdMap> CopyToAsync (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tUniqueId? MoveTo (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<UniqueId?> MoveToAsync (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tUniqueIdMap MoveTo (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<UniqueIdMap> MoveToAsync (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid CopyTo (int index, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The indexes of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask CopyToAsync (int index, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid CopyTo (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask CopyToAsync (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid MoveTo (int index, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The index of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask MoveToAsync (int index, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid MoveTo (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask MoveToAsync (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMessageSummary> Fetch (IList<UniqueId> uids, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMessageSummary>> FetchAsync (IList<UniqueId> uids, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMessageSummary> Fetch (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMessageSummary>> FetchAsync (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMessageSummary> Fetch (int min, int max, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMessageSummary>> FetchAsync (int min, int max, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tHeaderList GetHeaders (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<HeaderList> GetHeadersAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tHeaderList GetHeaders (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<HeaderList> GetHeadersAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tHeaderList GetHeaders (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<HeaderList> GetHeadersAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tHeaderList GetHeaders (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<HeaderList> GetHeadersAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tMimeMessage GetMessage (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<MimeMessage> GetMessageAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tMimeMessage GetMessage (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<MimeMessage> GetMessageAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tMimeEntity GetBodyPart (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<MimeEntity> GetBodyPartAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tMimeEntity GetBodyPart (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<MimeEntity> GetBodyPartAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (UniqueId uid, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (UniqueId uid, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (int index, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (int index, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (UniqueId uid, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (UniqueId uid, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (int index, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (int index, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (UniqueId uid, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (UniqueId uid, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message. If the starting\n\t\t/// offset is beyond the end of the specified section of the message, an empty stream\n\t\t/// is returned. If the number of bytes desired extends beyond the end of the section,\n\t\t/// a truncated stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (int index, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (int index, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tStream GetStream (int index, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message. If the starting\n\t\t/// offset is beyond the end of the specified section of the message, an empty stream\n\t\t/// is returned. If the number of bytes desired extends beyond the end of the section,\n\t\t/// a truncated stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<Stream> GetStreamAsync (int index, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tbool Store (UniqueId uid, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<bool> StoreAsync (UniqueId uid, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Store (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tbool Store (int index, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<bool> StoreAsync (int index, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<int> Store (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a set of message.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<int>> StoreAsync (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tbool Store (UniqueId uid, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<bool> StoreAsync (UniqueId uid, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Store (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tbool Store (int index, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<bool> StoreAsync (int index, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<int> Store (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a set of message.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<int>> StoreAsync (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Store (UniqueId uid, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask StoreAsync (UniqueId uid, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Store (IList<UniqueId> uids, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask StoreAsync (IList<UniqueId> uids, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Store (IList<UniqueId> uids, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Store (int index, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The indexes of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask StoreAsync (int index, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid Store (IList<int> indexes, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask StoreAsync (IList<int> indexes, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<int> Store (IList<int> indexes, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.s\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<int>> StoreAsync (IList<int> indexes, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Search (SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> SearchAsync (SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Search (IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> SearchAsync (IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tSearchResults Search (SearchOptions options, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<SearchResults> SearchAsync (SearchOptions options, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the subset of UIDs in the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tSearchResults Search (SearchOptions options, IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the subset of UIDs in the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<SearchResults> SearchAsync (SearchOptions options, IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Sort (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> SortAsync (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<UniqueId> Sort (IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<UniqueId>> SortAsync (IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tSearchResults Sort (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<SearchResults> SortAsync (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tSearchResults Sort (SearchOptions options, IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the folder for messages matching the specified query,\n\t\t/// returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<SearchResults> SortAsync (SearchOptions options, IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<MessageThread> Thread (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<MessageThread>> ThreadAsync (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<MessageThread> Thread (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<MessageThread>> ThreadAsync (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is opened.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the folder is opened.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> Opened;\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is closed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the folder is closed.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> Closed;\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is deleted.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the folder is deleted.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> Deleted;\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is renamed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the folder is renamed.\n\t\t/// </remarks>\n\t\tevent EventHandler<FolderRenamedEventArgs> Renamed;\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is subscribed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the folder is subscribed.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> Subscribed;\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is unsubscribed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the folder is unsubscribed.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> Unsubscribed;\n\n\t\t/// <summary>\n\t\t/// Occurs when a message is expunged from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when a message is expunged from the folder.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\tevent EventHandler<MessageEventArgs> MessageExpunged;\n\n\t\t/// <summary>\n\t\t/// Occurs when messages vanish from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when a messages vanish from the folder.\n\t\t/// </remarks>\n\t\tevent EventHandler<MessagesVanishedEventArgs> MessagesVanished;\n\n\t\t/// <summary>\n\t\t/// Occurs when flags changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when flags changed on a message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\tevent EventHandler<MessageFlagsChangedEventArgs> MessageFlagsChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when labels changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when labels changed on a message.\n\t\t/// </remarks>\n\t\tevent EventHandler<MessageLabelsChangedEventArgs> MessageLabelsChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when annotations changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when annotations changed on a message.\n\t\t/// </remarks>\n\t\tevent EventHandler<AnnotationsChangedEventArgs> AnnotationsChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when a message summary is fetched from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Emitted when a message summary is fetched from the folder.</para>\n\t\t/// <para>When multiple message summaries are being fetched from a remote folder,\n\t\t/// it is possible that the connection will drop or some other exception will\n\t\t/// occur, causing the Fetch method to fail, requiring the client to request the\n\t\t/// same set of message summaries again after it reconnects. This is obviously\n\t\t/// inefficient. To alleviate this potential problem, this event will be emitted\n\t\t/// as soon as the <see cref=\"IMailFolder\"/> successfully retrieves the complete\n\t\t/// <see cref=\"IMessageSummary\"/> for each requested message.</para>\n\t\t/// <note type=\"note\">The <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// methods will return a list of all message summaries that any information was\n\t\t/// retrieved for, regardless of whether or not all of the requested items were fetched,\n\t\t/// therefore there may be a discrepancy between the number of times this event is\n\t\t/// emitted and the number of summary items returned from the Fetch method.</note>\n\t\t/// </remarks>\n\t\tevent EventHandler<MessageSummaryFetchedEventArgs> MessageSummaryFetched;\n\n\t\t/// <summary>\n\t\t/// Occurs when metadata changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MetadataChanged\"/> event is emitted when metadata changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<MetadataChangedEventArgs> MetadataChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the mod-sequence changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the mod-sequence changed on a message.\n\t\t/// </remarks>\n\t\tevent EventHandler<ModSeqChangedEventArgs> ModSeqChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the highest mod-sequence changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"HighestModSeqChanged\"/> event is emitted whenever the <see cref=\"HighestModSeq\"/> value changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> HighestModSeqChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the next UID changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"UidNext\"/> property changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> UidNextChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the UID validity changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"UidValidity\"/> property changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> UidValidityChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the ID changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"Id\"/> property changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> IdChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the size of the folder changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"Size\"/> property changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> SizeChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the message count changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"Count\"/> property changes.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\tevent EventHandler<EventArgs> CountChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the recent message count changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"Recent\"/> property changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> RecentChanged;\n\n\t\t/// <summary>\n\t\t/// Occurs when the message unread count changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Emitted when the <see cref=\"Unread\"/> property changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<EventArgs> UnreadChanged;\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailFolderAppendExtensions.cs",
    "content": "﻿//\n// IMailFolderAppendExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\tpublic static partial class IMailFolderExtensions\n\t{\n\t\t#region Append Extensions\n\n\t\t/// <summary>\n\t\t/// Append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Append (this IMailFolder folder, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Append (folder, FormatOptions.Default, message, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> AppendAsync (this IMailFolder folder, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn AppendAsync (folder, FormatOptions.Default, message, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Append (this IMailFolder folder, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Append (folder, FormatOptions.Default, message, flags, date, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> AppendAsync (this IMailFolder folder, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn AppendAsync (folder, FormatOptions.Default, message, flags, date, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"annotations\">The message annotations.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// One or more <paramref name=\"annotations\"/> does not define any properties.\n\t\t/// </exception>\"\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Append (this IMailFolder folder, MimeMessage message, MessageFlags flags, DateTimeOffset? date, IList<Annotation> annotations, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Append (folder, FormatOptions.Default, message, flags, date, annotations, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"annotations\">The message annotations.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// One or more <paramref name=\"annotations\"/> does not define any properties.\n\t\t/// </exception>\"\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> AppendAsync (this IMailFolder folder, MimeMessage message, MessageFlags flags, DateTimeOffset? date, IList<Annotation> annotations, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn AppendAsync (folder, FormatOptions.Default, message, flags, date, annotations, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Append (this IMailFolder folder, FormatOptions options, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new AppendRequest (message, flags) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.Append (options, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> AppendAsync (this IMailFolder folder, FormatOptions options, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new AppendRequest (message, flags) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.AppendAsync (options, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Append (this IMailFolder folder, FormatOptions options, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new AppendRequest (message, flags, date) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.Append (options, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> AppendAsync (this IMailFolder folder, FormatOptions options, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new AppendRequest (message, flags, date) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.AppendAsync (options, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"annotations\">The message annotations.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Append (this IMailFolder folder, FormatOptions options, MimeMessage message, MessageFlags flags, DateTimeOffset? date, IList<Annotation> annotations, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new AppendRequest (message, flags) {\n\t\t\t\tTransferProgress = progress,\n\t\t\t\tAnnotations = annotations,\n\t\t\t\tInternalDate = date\n\t\t\t};\n\n\t\t\treturn folder.Append (options, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"annotations\">The message annotations.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> AppendAsync (this IMailFolder folder, FormatOptions options, MimeMessage message, MessageFlags flags, DateTimeOffset? date, IList<Annotation> annotations, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new AppendRequest (message, flags) {\n\t\t\t\tTransferProgress = progress,\n\t\t\t\tAnnotations = annotations,\n\t\t\t\tInternalDate = date\n\t\t\t};\n\n\t\t\treturn folder.AppendAsync (options, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages does not match the number of flags.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> Append (this IMailFolder folder, IList<MimeMessage> messages, IList<MessageFlags> flags, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Append (folder, FormatOptions.Default, messages, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages does not match the number of flags.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AppendAsync (this IMailFolder folder, IList<MimeMessage> messages, IList<MessageFlags> flags, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn AppendAsync (folder, FormatOptions.Default, messages, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each of the messages.</param>\n\t\t/// <param name=\"dates\">The received dates to use for each of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"dates\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages, flags, and dates do not match.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> Append (this IMailFolder folder, IList<MimeMessage> messages, IList<MessageFlags> flags, IList<DateTimeOffset> dates, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Append (folder, FormatOptions.Default, messages, flags, dates, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each of the messages.</param>\n\t\t/// <param name=\"dates\">The received dates to use for each of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"dates\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages, flags, and dates do not match.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AppendAsync (this IMailFolder folder, IList<MimeMessage> messages, IList<MessageFlags> flags, IList<DateTimeOffset> dates, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn AppendAsync (folder, FormatOptions.Default, messages, flags, dates, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages does not match the number of flags.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> Append (this IMailFolder folder, FormatOptions options, IList<MimeMessage> messages, IList<MessageFlags> flags, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tif (messages[i] == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the messages is null.\");\n\t\t\t}\n\n\t\t\tif (flags == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (flags));\n\n\t\t\tif (messages.Count != flags.Count)\n\t\t\t\tthrow new ArgumentException (\"The number of messages and the number of flags must be equal.\");\n\n\t\t\tvar requests = new AppendRequest[messages.Count];\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\trequests[i] = new AppendRequest (messages[i], flags[i]) {\n\t\t\t\t\tTransferProgress = progress\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn folder.Append (options, requests, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages does not match the number of flags.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AppendAsync (this IMailFolder folder, FormatOptions options, IList<MimeMessage> messages, IList<MessageFlags> flags, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tif (messages[i] == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the messages is null.\");\n\t\t\t}\n\n\t\t\tif (flags == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (flags));\n\n\t\t\tif (messages.Count != flags.Count)\n\t\t\t\tthrow new ArgumentException (\"The number of messages and the number of flags must be equal.\");\n\n\t\t\tvar requests = new AppendRequest[messages.Count];\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\trequests[i] = new AppendRequest (messages[i], flags[i]) {\n\t\t\t\t\tTransferProgress = progress\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn folder.AppendAsync (options, requests, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each of the messages.</param>\n\t\t/// <param name=\"dates\">The received dates to use for each of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"dates\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages, flags, and dates do not match.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> Append (this IMailFolder folder, FormatOptions options, IList<MimeMessage> messages, IList<MessageFlags> flags, IList<DateTimeOffset> dates, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tif (messages[i] == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the messages is null.\");\n\t\t\t}\n\n\t\t\tif (flags == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (flags));\n\n\t\t\tif (messages.Count != flags.Count)\n\t\t\t\tthrow new ArgumentException (\"The number of messages and the number of flags must be equal.\");\n\n\t\t\tif (dates == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (dates));\n\n\t\t\tif (messages.Count != dates.Count)\n\t\t\t\tthrow new ArgumentException (\"The number of messages and the number of dates must be equal.\");\n\n\t\t\tvar requests = new AppendRequest[messages.Count];\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\trequests[i] = new AppendRequest (messages[i], flags[i], dates[i]) {\n\t\t\t\t\tTransferProgress = progress\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn folder.Append (options, requests, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append the specified messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends the specified messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"messages\">The array of messages to append to the folder.</param>\n\t\t/// <param name=\"flags\">The message flags to use for each of the messages.</param>\n\t\t/// <param name=\"dates\">The received dates to use for each of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"flags\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"dates\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"messages\"/> is null.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The number of messages, flags, and dates do not match.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AppendAsync (this IMailFolder folder, FormatOptions options, IList<MimeMessage> messages, IList<MessageFlags> flags, IList<DateTimeOffset> dates, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tif (messages[i] == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the messages is null.\");\n\t\t\t}\n\n\t\t\tif (flags == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (flags));\n\n\t\t\tif (messages.Count != flags.Count)\n\t\t\t\tthrow new ArgumentException (\"The number of messages and the number of flags must be equal.\");\n\n\t\t\tif (dates == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (dates));\n\n\t\t\tif (messages.Count != dates.Count)\n\t\t\t\tthrow new ArgumentException (\"The number of messages and the number of dates must be equal.\");\n\n\t\t\tvar requests = new AppendRequest[messages.Count];\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\trequests[i] = new AppendRequest (messages[i], flags[i], dates[i]) {\n\t\t\t\t\tTransferProgress = progress\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn folder.AppendAsync (options, requests, cancellationToken);\n\t\t}\n\n\t\t#endregion Append Extensions\n\n\t\t#region Replace Extensions\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, UniqueId uid, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Replace (folder, FormatOptions.Default, uid, message, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, UniqueId uid, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn ReplaceAsync (folder, FormatOptions.Default, uid, message, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, UniqueId uid, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Replace (folder, FormatOptions.Default, uid, message, flags, date, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, UniqueId uid, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn ReplaceAsync (folder, FormatOptions.Default, uid, message, flags, date, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, FormatOptions options, UniqueId uid, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.Replace (options, uid, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, FormatOptions options, UniqueId uid, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.ReplaceAsync (options, uid, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, FormatOptions options, UniqueId uid, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags, date) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.Replace (options, uid, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, FormatOptions options, UniqueId uid, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags, date) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.ReplaceAsync (options, uid, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, int index, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Replace (folder, FormatOptions.Default, index, message, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, int index, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn ReplaceAsync (folder, FormatOptions.Default, index, message, flags, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, int index, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Replace (folder, FormatOptions.Default, index, message, flags, date, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, int index, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn ReplaceAsync (folder, FormatOptions.Default, index, message, flags, date, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, FormatOptions options, int index, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.Replace (options, index, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, FormatOptions options, int index, MimeMessage message, MessageFlags flags = MessageFlags.None, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.ReplaceAsync (options, index, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static UniqueId? Replace (this IMailFolder folder, FormatOptions options, int index, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags, date) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.Replace (options, index, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces the specified message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"date\">The received date of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, FormatOptions options, int index, MimeMessage message, MessageFlags flags, DateTimeOffset date, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar request = new ReplaceRequest (message, flags, date) {\n\t\t\t\tTransferProgress = progress\n\t\t\t};\n\n\t\t\treturn folder.ReplaceAsync (options, index, request, cancellationToken);\n\t\t}\n\n\t\t#endregion Replace Extensions\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailFolderFetchExtensions.cs",
    "content": "﻿//\n// IMailFolderFetchExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Extension methods for <see cref=\"IMailFolder\"/> that provide backwards API compatibility.\n\t/// </summary>\n\t/// <remarks>\n\t/// Extension methods for <see cref=\"IMailFolder\"/> that provide backwards API compatibility.\n\t/// </remarks>\n\tpublic static partial class IMailFolderExtensions\n\t{\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<UniqueId> uids, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items);\n\n\t\t\treturn folder.Fetch (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<UniqueId> uids, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items);\n\n\t\t\treturn folder.FetchAsync (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<UniqueId> uids, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.Fetch (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<UniqueId> uids, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.FetchAsync (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<UniqueId> uids, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.Fetch (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<UniqueId> uids, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.FetchAsync (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has\n\t\t/// enabled this feature via <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/>,\n\t\t/// then this method will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that\n\t\t/// have vanished since the specified mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message UIDs that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has\n\t\t/// enabled this feature via <see cref=\"IMailStore.EnableQuickResyncAsync(CancellationToken)\"/>,\n\t\t/// then this method will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that\n\t\t/// have vanished since the specified mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has\n\t\t/// enabled this feature via <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/>,\n\t\t/// then this method will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that\n\t\t/// have vanished since the specified mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message UIDs that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has\n\t\t/// enabled this feature via <see cref=\"IMailStore.EnableQuickResyncAsync(CancellationToken)\"/>,\n\t\t/// then this method will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that\n\t\t/// have vanished since the specified mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has\n\t\t/// enabled this feature via <see cref=\"IMailStore.EnableQuickResync(CancellationToken)\"/>,\n\t\t/// then this method will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that\n\t\t/// have vanished since the specified mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message UIDs that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>If the mail store supports quick resynchronization and the application has\n\t\t/// enabled this feature via <see cref=\"IMailStore.EnableQuickResyncAsync(CancellationToken)\"/>,\n\t\t/// then this method will emit <see cref=\"IMailFolder.MessagesVanished\"/> events for messages that\n\t\t/// have vanished since the specified mod-sequence value.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (uids, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<int> indexes, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items);\n\n\t\t\treturn folder.Fetch (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<int> indexes, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items);\n\n\t\t\treturn folder.FetchAsync (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<int> indexes, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.Fetch (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<int> indexes, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.FetchAsync (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<int> indexes, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.Fetch (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<int> indexes, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.FetchAsync (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes that have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes that have a\n\t\t/// higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes\n\t\t/// that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes that have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes that\n\t\t/// have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes that\n\t\t/// have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes\n\t\t/// that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes that have a higher mod-sequence value than the one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"headers\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (indexes, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, int min, int max, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items);\n\n\t\t\treturn folder.Fetch (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, int min, int max, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items);\n\n\t\t\treturn folder.FetchAsync (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, int min, int max, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.Fetch (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, int min, int max, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.FetchAsync (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, int min, int max, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.Fetch (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, int min, int max, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers);\n\n\t\t\treturn folder.FetchAsync (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes (inclusive)\n\t\t/// that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes (inclusive) that have a higher mod-sequence value than the one\n\t\t/// specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, int min, int max, ulong modseq, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes\n\t\t/// (inclusive) that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes (inclusive) that have a higher mod-sequence value than the\n\t\t/// one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, int min, int max, ulong modseq, MessageSummaryItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes (inclusive)\n\t\t/// that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes (inclusive) that have a higher mod-sequence value than the one\n\t\t/// specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, int min, int max, ulong modseq, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes\n\t\t/// (inclusive) that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes (inclusive) that have a higher mod-sequence value than the\n\t\t/// one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the specified <paramref name=\"headers\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, int min, int max, ulong modseq, MessageSummaryItems items, IEnumerable<HeaderId> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes (inclusive)\n\t\t/// that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes (inclusive) that have a higher mod-sequence value than the one\n\t\t/// specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<IMessageSummary> Fetch (this IMailFolder folder, int min, int max, ulong modseq, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.Fetch (min, max, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes\n\t\t/// (inclusive) that have a higher mod-sequence value than the one specified.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes (inclusive) that have a higher mod-sequence value than the\n\t\t/// one specified.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"items\">The message summary items to fetch.</param>\n\t\t/// <param name=\"headers\">The desired header fields.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<IMessageSummary>> FetchAsync (this IMailFolder folder, int min, int max, ulong modseq, MessageSummaryItems items, IEnumerable<string> headers, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar request = new FetchRequest (items, headers) { ChangedSince = modseq };\n\n\t\t\treturn folder.FetchAsync (min, max, request, cancellationToken);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailFolderStoreExtensions.cs",
    "content": "﻿//\n// IMailFolderStoreExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\tpublic static partial class IMailFolderExtensions\n\t{\n\t\t#region Store Flags Extensions\n\n\t\tstatic StoreFlagsRequest GetStoreFlagsRequest (StoreAction action, bool silent, MessageFlags flags, HashSet<string>? keywords = null, ulong? modseq = null)\n\t\t{\n\t\t\tif (keywords != null) {\n\t\t\t\treturn new StoreFlagsRequest (action, flags, keywords) {\n\t\t\t\t\tUnchangedSince = modseq,\n\t\t\t\t\tSilent = silent\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn new StoreFlagsRequest (action, flags) {\n\t\t\t\t\tUnchangedSince = modseq,\n\t\t\t\t\tSilent = silent\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, UniqueId uid, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uid, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, UniqueId uid, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uid, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, UniqueId uid, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uid, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, UniqueId uid, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uid, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UIDs of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, UniqueId uid, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uid, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, UniqueId uid, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uid, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UIDs of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, UniqueId uid, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uid, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, UniqueId uid, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uid, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UIDs of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, UniqueId uid, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uid, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, UniqueId uid, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uid, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UIDs of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, UniqueId uid, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uid, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, UniqueId uid, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uid, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> AddFlags (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AddFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> AddFlags (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AddFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> RemoveFlags (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> RemoveFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> RemoveFlags (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> RemoveFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> SetFlags (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> SetFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> SetFlags (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> SetFlagsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, int index, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (index, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, int index, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (index, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, int index, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (index, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, int index, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (index, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, IList<int> indexes, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, IList<int> indexes, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddFlags (this IMailFolder folder, IList<int> indexes, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddFlagsAsync (this IMailFolder folder, IList<int> indexes, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, int index, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (index, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, int index, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (index, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, int index, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (index, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, int index, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (index, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, IList<int> indexes, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, IList<int> indexes, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveFlags (this IMailFolder folder, IList<int> indexes, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveFlagsAsync (this IMailFolder folder, IList<int> indexes, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, int index, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (index, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, int index, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (index, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, int index, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (index, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, int index, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (index, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, IList<int> indexes, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, IList<int> indexes, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetFlags (this IMailFolder folder, IList<int> indexes, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetFlagsAsync (this IMailFolder folder, IList<int> indexes, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> AddFlags (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> AddFlagsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> AddFlags (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of flags to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to add.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> AddFlagsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Add, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> RemoveFlags (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> RemoveFlagsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> RemoveFlags (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of flags from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to remove.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> RemoveFlagsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Remove, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> SetFlags (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> SetFlagsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags, null, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> SetFlags (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the flags of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"flags\">The message flags to set.</param>\n\t\t/// <param name=\"keywords\">A set of user-defined flags to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageFlagsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> SetFlagsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, MessageFlags flags, HashSet<string> keywords, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreFlagsRequest (StoreAction.Set, silent, flags, keywords, modseq), cancellationToken);\n\t\t}\n\n\t\t#endregion Store Flags Extensions\n\n\t\t#region Store Labels Extensions\n\n\t\tstatic StoreLabelsRequest GetStoreLabelsRequest (StoreAction action, bool silent, IList<string> labels, ulong? modseq = null)\n\t\t{\n\t\t\tif (labels == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (labels));\n\n\t\t\treturn new StoreLabelsRequest (action, labels) {\n\t\t\t\tUnchangedSince = modseq,\n\t\t\t\tSilent = silent\n\t\t\t};\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of labels to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of labels to the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddLabels (this IMailFolder folder, UniqueId uid, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (new[] { uid }, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of labels to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of labels to the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddLabelsAsync (this IMailFolder folder, UniqueId uid, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (new[] { uid }, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of labels to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of labels to the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddLabels (this IMailFolder folder, IList<UniqueId> uids, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of labels to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of labels to the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddLabelsAsync (this IMailFolder folder, IList<UniqueId> uids, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of labels from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of labels from the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UIDs of the message.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveLabels (this IMailFolder folder, UniqueId uid, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (new[] { uid }, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of labels from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of labels from the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveLabelsAsync (this IMailFolder folder, UniqueId uid, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (new[] { uid }, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of labels from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of labels from the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveLabels (this IMailFolder folder, IList<UniqueId> uids, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of labels from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of labels from the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveLabelsAsync (this IMailFolder folder, IList<UniqueId> uids, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the labels of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the labels of the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UIDs of the message.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetLabels (this IMailFolder folder, UniqueId uid, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (new[] { uid }, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the labels of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the labels of the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetLabelsAsync (this IMailFolder folder, UniqueId uid, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (new[] { uid }, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the labels of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the labels of the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetLabels (this IMailFolder folder, IList<UniqueId> uids, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (uids, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the labels of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the labels of the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetLabelsAsync (this IMailFolder folder, IList<UniqueId> uids, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> AddLabels (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreLabelsRequest (StoreAction.Add, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> AddLabelsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreLabelsRequest (StoreAction.Add, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> RemoveLabels (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreLabelsRequest (StoreAction.Remove, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> RemoveLabelsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreLabelsRequest (StoreAction.Remove, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<UniqueId> SetLabels (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (uids, GetStoreLabelsRequest (StoreAction.Set, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<UniqueId>> SetLabelsAsync (this IMailFolder folder, IList<UniqueId> uids, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (uids, GetStoreLabelsRequest (StoreAction.Set, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of labels to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of labels to the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddLabels (this IMailFolder folder, int index, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (new[] { index }, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of labels to the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of labels to the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddLabelsAsync (this IMailFolder folder, int index, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (new[] { index }, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of labels to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of labels to the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void AddLabels (this IMailFolder folder, IList<int> indexes, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of labels to the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of labels to the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task AddLabelsAsync (this IMailFolder folder, IList<int> indexes, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreLabelsRequest (StoreAction.Add, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of labels from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of labels from the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveLabels (this IMailFolder folder, int index, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (new[] { index }, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of labels from the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of labels from the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveLabelsAsync (this IMailFolder folder, int index, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (new[] { index }, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of labels from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of labels from the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void RemoveLabels (this IMailFolder folder, IList<int> indexes, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of labels from the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of labels from the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task RemoveLabelsAsync (this IMailFolder folder, IList<int> indexes, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreLabelsRequest (StoreAction.Remove, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the labels of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the labels of the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetLabels (this IMailFolder folder, int index, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (new[] { index }, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the labels of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the labels of the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetLabelsAsync (this IMailFolder folder, int index, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (new[] { index }, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the labels of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the labels of the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static void SetLabels (this IMailFolder folder, IList<int> indexes, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tfolder.Store (indexes, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the labels of the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the labels of the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task SetLabelsAsync (this IMailFolder folder, IList<int> indexes, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreLabelsRequest (StoreAction.Set, silent, labels), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> AddLabels (this IMailFolder folder, IList<int> indexes, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreLabelsRequest (StoreAction.Add, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds a set of labels to the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to add.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> AddLabelsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreLabelsRequest (StoreAction.Add, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> RemoveLabels (this IMailFolder folder, IList<int> indexes, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreLabelsRequest (StoreAction.Remove, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes a set of labels from the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to remove.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> RemoveLabelsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreLabelsRequest (StoreAction.Remove, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static IList<int> SetLabels (this IMailFolder folder, IList<int> indexes, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.Store (indexes, GetStoreLabelsRequest (StoreAction.Set, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the labels of the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"labels\">The labels to set.</param>\n\t\t/// <param name=\"silent\">If set to <see langword=\"true\" />, no <see cref=\"IMailFolder.MessageLabelsChanged\"/> events will be emitted.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"labels\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic static Task<IList<int>> SetLabelsAsync (this IMailFolder folder, IList<int> indexes, ulong modseq, IList<string> labels, bool silent, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn folder.StoreAsync (indexes, GetStoreLabelsRequest (StoreAction.Set, silent, labels, modseq), cancellationToken);\n\t\t}\n\n\t\t#endregion Store Labels Extensions\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailService.cs",
    "content": "﻿//\n// IMailService.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\nusing SslProtocols = System.Security.Authentication.SslProtocols;\n\nusing MailKit.Net.Proxy;\n\nusing MailKit.Security;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for message services such as SMTP, POP3, or IMAP.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by <see cref=\"MailKit.Net.Imap.ImapClient\"/>,\n\t/// <see cref=\"MailKit.Net.Pop3.Pop3Client\"/> and\n\t/// <see cref=\"MailKit.Net.Smtp.SmtpClient\"/>.\n\t/// </remarks>\n\tpublic interface IMailService : IDisposable\n\t{\n\t\t/// <summary>\n\t\t/// Get an object that can be used to synchronize access to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an object that can be used to synchronize access to the folder.\n\t\t/// </remarks>\n\t\t/// <value>The sync root.</value>\n\t\tobject SyncRoot { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set the set of enabled SSL and/or TLS protocol versions that the client is allowed to use.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the enabled SSL and/or TLS protocol versions that the client is allowed to use.</para>\n\t\t/// <para>By default, MailKit initializes this value to <see cref=\"SslProtocols.None\"/> which allows the\n\t\t/// operating system to choose the best protocol to use and to block protocols that are not secure.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_IMailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <value>The SSL and TLS protocol versions that are supported.</value>\n\t\tSslProtocols SslProtocols { get; set; }\n\n#if NET5_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Get or set the cipher suites allowed to be used when negotiating an SSL or TLS connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Specifies the cipher suites allowed to be used when negotiating an SSL or TLS connection.\n\t\t/// When set to <see langword=\"null\" />, the operating system default is used. Use extreme caution when\n\t\t/// changing this setting.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_IMailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <value>The cipher algorithms allowed for use when negotiating SSL or TLS encryption.</value>\n\t\tCipherSuitesPolicy? SslCipherSuitesPolicy { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher suite.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher suite once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher suite.</value>\n\t\tTlsCipherSuite? SslCipherSuite { get; }\n#endif\n\n\t\t/// <summary>\n\t\t/// Get or set the client SSL certificates.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Some servers may require the client SSL certificates in order\n\t\t/// to allow the user to connect.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_IMailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <value>The client SSL certificates.</value>\n\t\tX509CertificateCollection? ClientCertificates { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set whether connecting via SSL/TLS should check certificate revocation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether connecting via SSL/TLS should check certificate revocation.</para>\n\t\t/// <para>Normally, the value of this property should be set to <see langword=\"true\" /> (the default) for security\n\t\t/// reasons, but there are times when it may be necessary to set it to <see langword=\"false\" />.</para>\n\t\t/// <para>For example, most Certificate Authorities are probably pretty good at keeping their CRL and/or\n\t\t/// OCSP servers up 24/7, but occasionally they do go down or are otherwise unreachable due to other\n\t\t/// network problems between the client and the Certificate Authority. When this happens, it becomes\n\t\t/// impossible to check the revocation status of one or more of the certificates in the chain\n\t\t/// resulting in an <see cref=\"SslHandshakeException\"/> being thrown in the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> method. If this becomes a problem,\n\t\t/// it may become desirable to set <see cref=\"CheckCertificateRevocation\"/> to <see langword=\"false\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if certificate revocation should be checked; otherwise, <see langword=\"false\" />.</value>\n\t\tbool CheckCertificateRevocation { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set a callback function to validate the server certificate.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a callback function to validate the server certificate.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_IMailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SslCertificateValidation.cs\"/>\n\t\t/// </example>\n\t\t/// <value>The server certificate validation callback function.</value>\n\t\tRemoteCertificateValidationCallback? ServerCertificateValidationCallback { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the local IP end point to use when connecting to a remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the local IP end point to use when connecting to a remote host.\n\t\t/// </remarks>\n\t\t/// <value>The local IP end point or <see langword=\"null\" /> to use the default end point.</value>\n\t\tIPEndPoint? LocalEndPoint { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set the proxy client to use when connecting to a remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the proxy client to use when connecting to a remote host via any of the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t\t/// </example>\n\t\t/// <value>The proxy client.</value>\n\t\tIProxyClient? ProxyClient { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the authentication mechanisms supported by the message service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authentication mechanisms are queried during the\n\t\t/// <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a> method.\n\t\t/// </remarks>\n\t\t/// <value>The supported authentication mechanisms.</value>\n\t\tHashSet<string> AuthenticationMechanisms { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently authenticated with the mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the client is currently authenticated with the mail server.</para>\n\t\t/// <para>To authenticate with the mail server, use one of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Authenticate.htm\">Authenticate</a> methods\n\t\t/// or any of the Async alternatives.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is authenticated; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsAuthenticated { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the service is currently connected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <see cref=\"IsConnected\"/> state is set to <see langword=\"true\" /> immediately after\n\t\t/// one of the <a href=\"Overload_MailKit_IMailService_Connect.htm\">Connect</a>\n\t\t/// methods succeeds and is not set back to <see langword=\"false\" /> until either the client\n\t\t/// is disconnected via <see cref=\"Disconnect(bool,CancellationToken)\"/> or until a\n\t\t/// <see cref=\"ProtocolException\"/> is thrown while attempting to read or write to\n\t\t/// the underlying network socket.</para>\n\t\t/// <para>When an <see cref=\"ProtocolException\"/> is caught, the connection state of the\n\t\t/// <see cref=\"IMailService\"/> should be checked before continuing.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the service connected; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsConnected { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsSecure { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is encrypted; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsEncrypted { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is signed; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsSigned { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the negotiated SSL or TLS protocol version once an SSL or TLS connection has been made.</para>\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS protocol version.</value>\n\t\tSslProtocols SslProtocol { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tCipherAlgorithmType? SslCipherAlgorithm { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tint? SslCipherStrength { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tHashAlgorithmType? SslHashAlgorithm { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tint? SslHashStrength { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tExchangeAlgorithmType? SslKeyExchangeAlgorithm { get; }\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tint? SslKeyExchangeStrength { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set the timeout for network streaming operations, in milliseconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying socket stream's <see cref=\"System.IO.Stream.ReadTimeout\"/>\n\t\t/// and <see cref=\"System.IO.Stream.WriteTimeout\"/> values.\n\t\t/// </remarks>\n\t\t/// <value>The timeout in milliseconds.</value>\n\t\tint Timeout { get; set; }\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establish a connection to the specified mail server.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"useSsl\"><see langword=\"true\" /> if the client should make an SSL-wrapped connection to the server; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Connect (string host, int port, bool useSsl, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"useSsl\"><see langword=\"true\" /> if the client should make an SSL-wrapped connection to the server; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// The <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask ConnectAsync (string host, int port, bool useSsl, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establish a connection to the specified mail server.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Connect (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// The <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask ConnectAsync (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establish a connection to the specified mail server using the provided socket.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Connect (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server using the provided socket.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask ConnectAsync (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establish a connection to the specified mail server using the provided stream.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Connect (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server using the provided stream.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask ConnectAsync (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tvoid Authenticate (ICredentials credentials, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask AuthenticateAsync (ICredentials credentials, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tvoid Authenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask AuthenticateAsync (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tvoid Authenticate (Encoding encoding, string userName, string password, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask AuthenticateAsync (Encoding encoding, string userName, string password, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tvoid Authenticate (string userName, string password, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask AuthenticateAsync (string userName, string password, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tvoid Authenticate (SaslMechanism mechanism, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tTask AuthenticateAsync (SaslMechanism mechanism, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Disconnects from the service.</para>\n\t\t/// <para>If <paramref name=\"quit\"/> is <see langword=\"true\" />, a \"QUIT\" command will be issued in order to disconnect cleanly.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a \"QUIT\" command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Disconnect (bool quit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously disconnects from the service.</para>\n\t\t/// <para>If <paramref name=\"quit\"/> is <see langword=\"true\" />, a \"QUIT\" command will be issued in order to disconnect cleanly.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a logout/quit command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask DisconnectAsync (bool quit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Ping the message service to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Mail servers, if left idle for too long, will automatically drop the connection.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid NoOp (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously ping the mail server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Mail servers, if left idle for too long, will automatically drop the connection.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask NoOpAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Occurs when the client has been successfully connected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Connected\"/> event is raised when the client\n\t\t/// successfully connects to the mail server.\n\t\t/// </remarks>\n\t\tevent EventHandler<ConnectedEventArgs>? Connected;\n\n\t\t/// <summary>\n\t\t/// Occurs when the client has been disconnected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Disconnected\"/> event is raised whenever the client\n\t\t/// has been disconnected.\n\t\t/// </remarks>\n\t\tevent EventHandler<DisconnectedEventArgs>? Disconnected;\n\n\t\t/// <summary>\n\t\t/// Occurs when the client has been successfully authenticated.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Authenticated\"/> event is raised whenever the client\n\t\t/// has been authenticated.\n\t\t/// </remarks>\n\t\tevent EventHandler<AuthenticatedEventArgs>? Authenticated;\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailSpool.cs",
    "content": "﻿//\n// IMailSpool.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for retrieving messages from a spool.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An interface for retrieving messages from a spool.</para>\n\t/// <para>Implemented by <see cref=\"MailKit.Net.Pop3.Pop3Client\"/>.</para>\n\t/// </remarks>\n\tpublic interface IMailSpool : IMailService, IEnumerable<MimeMessage>\n\t{\n\t\t/// <summary>\n\t\t/// Get the number of messages available in the message spool.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of messages available in the message spool.</para>\n\t\t/// <para>Once authenticated, the <see cref=\"Count\"/> property will be set\n\t\t/// to the number of available messages in the spool.</para>\n\t\t/// </remarks>\n\t\t/// <value>The message count.</value>\n\t\tint Count { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the service supports referencing messages by UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Not all servers support referencing messages by UID, so this property should\n\t\t/// be checked before using <see cref=\"GetMessageUid(int, CancellationToken)\"/>\n\t\t/// and <see cref=\"GetMessageUids(CancellationToken)\"/>.</para>\n\t\t/// <para>If the server does not support UIDs, then all methods that take UID arguments\n\t\t/// along with <see cref=\"GetMessageUid(int, CancellationToken)\"/> and\n\t\t/// <see cref=\"GetMessageUids(CancellationToken)\"/> will fail.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if supports uids; otherwise, <see langword=\"false\" />.</value>\n\t\tbool SupportsUids { get; }\n\n\t\t/// <summary>\n\t\t/// Get the message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message count.\n\t\t/// </remarks>\n\t\t/// <returns>The message count.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tint GetMessageCount (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message count.\n\t\t/// </remarks>\n\t\t/// <returns>The message count.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<int> GetMessageCountAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the UID of the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message UID.</returns>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tstring GetMessageUid (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the UID of the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message UID.</returns>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<string> GetMessageUidAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the full list of available message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message UIDs.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tIList<string> GetMessageUids (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the full list of available message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message UIDs.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<IList<string>> GetMessageUidsAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the size of the specified message, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the size of the specified message, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message size, in bytes.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tint GetMessageSize (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the size of the specified message, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the size of the specified message, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message size, in bytes.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<int> GetMessageSizeAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the sizes for all available messages, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sizes for all available messages, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message sizes, in bytes.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tIList<int> GetMessageSizes (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the sizes for all available messages, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the sizes for all available messages, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message sizes, in bytes.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<IList<int>> GetMessageSizesAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tHeaderList GetMessageHeaders (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the headers for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<HeaderList> GetMessageHeadersAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>The headers for the specified messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tIList<HeaderList> GetMessageHeaders (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the headers for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>The headers for the specified messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<IList<HeaderList>> GetMessageHeadersAsync (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers of the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers of the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The headers of the messages within the specified range.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tIList<HeaderList> GetMessageHeaders (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers of the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers of the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The headers of the messages within the specified range.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<IList<HeaderList>> GetMessageHeadersAsync (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tMimeMessage GetMessage (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<MimeMessage> GetMessageAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the messages at the specified indexes.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tIList<MimeMessage> GetMessages (IList<int> indexes, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the messages at the specified indexes.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<IList<MimeMessage>> GetMessagesAsync (IList<int> indexes, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tIList<MimeMessage> GetMessages (int startIndex, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<IList<MimeMessage>> GetMessagesAsync (int startIndex, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the message or header stream at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message or header stream at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tStream GetStream (int index, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header stream at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message or header stream at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<Stream> GetStreamAsync (int index, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the message or header streams at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message or header streams at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tIList<Stream> GetStreams (IList<int> indexes, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header streams at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message or header streams at the specified indexes.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<IList<Stream>> GetStreamsAsync (IList<int> indexes, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the message or header streams within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message or header streams within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first stream to get.</param>\n\t\t/// <param name=\"count\">The number of streams to get.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tIList<Stream> GetStreams (int startIndex, int count, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header streams within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message or header streams within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first stream to get.</param>\n\t\t/// <param name=\"count\">The number of streams to get.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<IList<Stream>> GetStreamsAsync (int startIndex, int count, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Mark the specified message for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tvoid DeleteMessage (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified message for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask DeleteMessageAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Mark the specified messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tvoid DeleteMessages (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask DeleteMessagesAsync (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Mark the specified range of messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"startIndex\">The index of the first message to mark for deletion.</param>\n\t\t/// <param name=\"count\">The number of messages to mark for deletion.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tvoid DeleteMessages (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified range of messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to mark for deletion.</param>\n\t\t/// <param name=\"count\">The number of messages to mark for deletion.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask DeleteMessagesAsync (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Mark all messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tvoid DeleteAllMessages (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark all messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask DeleteAllMessagesAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Reset the state of all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tvoid Reset (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously reset the state of all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask ResetAsync (CancellationToken cancellationToken = default);\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailStore.cs",
    "content": "﻿//\n// IMailStore.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for retrieving messages from a message store.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An interface for retrieving messages from a message store.</para>\n\t/// <para>Implemented by <see cref=\"MailKit.Net.Imap.ImapClient\"/>.</para>\n\t/// </remarks>\n\tpublic interface IMailStore : IMailService\n\t{\n\t\t/// <summary>\n\t\t/// Get the personal namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The personal folder namespaces contain a user's personal mailbox folders.\n\t\t/// </remarks>\n\t\t/// <value>The personal namespaces.</value>\n\t\tFolderNamespaceCollection PersonalNamespaces { get; }\n\n\t\t/// <summary>\n\t\t/// Get the shared namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The shared folder namespaces contain mailbox folders that are shared with the user.\n\t\t/// </remarks>\n\t\t/// <value>The shared namespaces.</value>\n\t\tFolderNamespaceCollection SharedNamespaces { get; }\n\n\t\t/// <summary>\n\t\t/// Get the other namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The other folder namespaces contain other mailbox folders.\n\t\t/// </remarks>\n\t\t/// <value>The other namespaces.</value>\n\t\tFolderNamespaceCollection OtherNamespaces { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mail store supports quotas.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the mail store supports quotas.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mail store supports quotas; otherwise, <see langword=\"false\" />.</value>\n\t\tbool SupportsQuotas { get; }\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the mail store.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The threading algorithms are queried as part of the\n\t\t/// <a href=\"Overload_MailKit_IMailStore_Connect.htm\">Connect</a>\n\t\t/// and <a href=\"Overload_MailKit_IMailStore_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The threading algorithms.</value>\n\t\tHashSet<ThreadingAlgorithm> ThreadingAlgorithms { get; }\n\n\t\t/// <summary>\n\t\t/// Get the Inbox folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The Inbox folder is the default folder and is typically the folder\n\t\t/// where all new messages are delivered.\n\t\t/// </remarks>\n\t\t/// <value>The Inbox folder.</value>\n\t\tIMailFolder? Inbox { get; }\n\n\t\t/// <summary>\n\t\t/// Enable the quick resynchronization feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables quick resynchronization when a folder is opened using the\n\t\t/// <see cref=\"IMailFolder.Open(FolderAccess,uint,ulong,System.Collections.Generic.IList&lt;UniqueId&gt;,System.Threading.CancellationToken)\"/>\n\t\t/// method.</para>\n\t\t/// <para>If this feature is enabled, the <see cref=\"IMailFolder.MessageExpunged\"/> event\n\t\t/// is replaced with the <see cref=\"IMailFolder.MessagesVanished\"/> event.</para>\n\t\t/// <para>This method needs to be called immediately after\n\t\t/// <see cref=\"IMailService.Authenticate(System.Net.ICredentials,System.Threading.CancellationToken)\"/>,\n\t\t/// before the opening of any folders.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Quick resynchronization needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quick resynchronization.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tvoid EnableQuickResync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable the quick resynchronization feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables quick resynchronization when a folder is opened using the\n\t\t/// <see cref=\"IMailFolder.Open(FolderAccess,uint,ulong,System.Collections.Generic.IList&lt;UniqueId&gt;,System.Threading.CancellationToken)\"/>\n\t\t/// method.</para>\n\t\t/// <para>If this feature is enabled, the <see cref=\"IMailFolder.MessageExpunged\"/> event\n\t\t/// is replaced with the <see cref=\"IMailFolder.MessagesVanished\"/> event.</para>\n\t\t/// <para>This method needs to be called immediately after\n\t\t/// <see cref=\"IMailService.Authenticate(System.Net.ICredentials,System.Threading.CancellationToken)\"/>,\n\t\t/// before the opening of any folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Quick resynchronization needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quick resynchronization.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask EnableQuickResyncAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified special folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all message stores support the concept of special folders,\n\t\t/// so this method may return <see langword=\"null\" />.\n\t\t/// </remarks>\n\t\t/// <returns>The folder if available; otherwise <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The type of special folder.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"folder\"/> is out of range.\n\t\t/// </exception>\n\t\tIMailFolder? GetFolder (SpecialFolder folder);\n\n\t\t/// <summary>\n\t\t/// Get the folder for the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The main reason to get the toplevel folder in a namespace is\n\t\t/// to list its child folders.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\tIMailFolder GetFolder (FolderNamespace @namespace);\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The namespace folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMailFolder> GetFolders (FolderNamespace @namespace, bool subscribedOnly, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The namespace folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, bool subscribedOnly, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The namespace folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIList<IMailFolder> GetFolders (FolderNamespace @namespace, StatusItems items = StatusItems.None, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailService\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The namespace folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, StatusItems items = StatusItems.None, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder for the specified path.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tIMailFolder GetFolder (string path, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the folder for the specified path.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tTask<IMailFolder> GetFolderAsync (string path, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tstring? GetMetadata (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<string?> GetMetadataAsync (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tMetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<MetadataCollection> GetMetadataAsync (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tMetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask<MetadataCollection> GetMetadataAsync (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tvoid SetMetadata (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tTask SetMetadataAsync (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Occurs when a remote message store receives an alert message from the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Some implementations, such as <see cref=\"MailKit.Net.Imap.ImapClient\"/>,\n\t\t/// will emit Alert events when they receive alert messages from the server.\n\t\t/// </remarks>\n\t\tevent EventHandler<AlertEventArgs> Alert;\n\n\t\t/// <summary>\n\t\t/// Occurs when a folder is created.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"FolderCreated\"/> event is emitted when a new folder is created.\n\t\t/// </remarks>\n\t\tevent EventHandler<FolderCreatedEventArgs> FolderCreated;\n\n\t\t/// <summary>\n\t\t/// Occurs when metadata changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MetadataChanged\"/> event is emitted when metadata changes.\n\t\t/// </remarks>\n\t\tevent EventHandler<MetadataChangedEventArgs> MetadataChanged;\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMailTransport.cs",
    "content": "﻿//\n// IMailTransport.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for sending messages.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An interface for sending messages.</para>\n\t/// <para>Implemented by <see cref=\"MailKit.Net.Smtp.SmtpClient\"/>.</para>\n\t/// </remarks>\n\tpublic interface IMailTransport : IMailService\n\t{\n\t\t/// <summary>\n\t\t/// Send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tstring Send (MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<string> SendAsync (MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tstring Send (MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<string> SendAsync (MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tstring Send (FormatOptions options, MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<string> SendAsync (FormatOptions options, MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tstring Send (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\tTask<string> SendAsync (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Occurs when a message is successfully sent via the transport.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageSent\"/> event will be emitted each time a message is successfully sent.\n\t\t/// </remarks>\n\t\tevent EventHandler<MessageSentEventArgs>? MessageSent;\n\t}\n}\n"
  },
  {
    "path": "MailKit/IMessageSummary.cs",
    "content": "﻿//\n// IMessageSummary.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A summary of a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>The <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a> and\n\t/// <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a> methods\n\t/// return lists of <see cref=\"IMessageSummary\"/> items.</para>\n\t/// <para>The properties of the <see cref=\"IMessageSummary\"/> that will be available\n\t/// depend on the <see cref=\"MessageSummaryItems\"/> passed to the aforementioned method.</para>\n\t/// </remarks>\n\tpublic interface IMessageSummary\n\t{\n\t\t/// <summary>\n\t\t/// Get the folder that the message belongs to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder that the message belongs to, if available.\n\t\t/// </remarks>\n\t\t/// <value>The folder.</value>\n\t\tIMailFolder? Folder {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a bitmask of fields that have been populated.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a bitmask of fields that have been populated.\n\t\t/// </remarks>\n\t\t/// <value>The fields that have been populated.</value>\n\t\tMessageSummaryItems Fields { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the body structure of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The body will be one of <see cref=\"BodyPartText\"/>,\n\t\t/// <see cref=\"BodyPartMessage\"/>, <see cref=\"BodyPartBasic\"/>,\n\t\t/// or <see cref=\"BodyPartMultipart\"/>.</para>\n\t\t/// <para>This property will only be set if either the\n\t\t/// <see cref=\"MessageSummaryItems.Body\"/> flag or the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The body structure of the message.</value>\n\t\tBodyPart? Body { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the text body part of the message if it exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the <c>text/plain</c> body part of the message.</para>\n\t\t/// <para>This property will only be usable if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The text body if it exists; otherwise, <see langword=\"null\" />.</value>\n\t\tBodyPartText? TextBody { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the html body part of the message if it exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the <c>text/html</c> body part of the message.</para>\n\t\t/// <para>This property will only be usable if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The html body if it exists; otherwise, <see langword=\"null\" />.</value>\n\t\tBodyPartText? HtmlBody { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the body parts of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Traverses over the <see cref=\"Body\"/>, enumerating all of the\n\t\t/// <see cref=\"BodyPartBasic\"/> objects.</para>\n\t\t/// <para>This property will only be usable if either the\n\t\t/// <see cref=\"MessageSummaryItems.Body\"/> flag or the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The body parts.</value>\n\t\tIEnumerable<BodyPartBasic> BodyParts { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the attachments.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Traverses over the <see cref=\"Body\"/>, enumerating all of the\n\t\t/// <see cref=\"BodyPartBasic\"/> objects that have a <c>Content-Disposition</c>\n\t\t/// header set to <c>\"attachment\"</c>.</para>\n\t\t/// <para>This property will only be usable if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The attachments.</value>\n\t\tIEnumerable<BodyPartBasic> Attachments { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the preview text of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The preview text is a short snippet of the beginning of the message\n\t\t/// text, typically shown in a mail client's message list to provide the user\n\t\t/// with a sense of what the message is about.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.PreviewText\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The preview text.</value>\n\t\tstring? PreviewText { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the envelope of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The envelope of a message contains information such as the\n\t\t/// date the message was sent, the subject of the message,\n\t\t/// the sender of the message, who the message was sent to,\n\t\t/// which message(s) the message may be in reply to,\n\t\t/// and the message id.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Envelope\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The envelope of the message.</value>\n\t\tEnvelope? Envelope { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the normalized subject.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>A normalized <c>Subject</c> header value where prefixes such as <c>\"Re:\"</c>, <c>\"Re[#]:\"</c> and <c>\"FWD:\"</c> have been pruned.</para>\n\t\t/// <para>This property is typically used for threading messages by subject.</para>\n\t\t/// </remarks>\n\t\t/// <value>The normalized subject.</value>\n\t\tstring NormalizedSubject { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the Date header value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Date header value. If the Date header is not present, the arrival date is used.\n\t\t/// If neither are known, <see cref=\"System.DateTimeOffset.MinValue\"/> is returned.\n\t\t/// </remarks>\n\t\t/// <value>The date.</value>\n\t\tDateTimeOffset Date { get; }\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the message is a reply.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This value should be based on whether the message subject contained any <c>\"Re:\"</c>, <c>\"Re[#]:\"</c> or <c>\"FWD:\"</c> prefixes.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the message is a reply; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsReply { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the message flags, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message flags, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Flags\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The message flags.</value>\n\t\tMessageFlags? Flags { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the user-defined message flags, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the user-defined message flags, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Flags\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The user-defined message flags.</value>\n\t\tIReadOnlySetOfStrings Keywords { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the message annotations, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message annotations, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Annotations\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The message annotations.</value>\n\t\tIReadOnlyList<Annotation>? Annotations { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the list of headers, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the list of headers, if available.</para>\n\t\t/// <para>This property will only be set if the <see cref=\"IFetchRequest\"/> used with\n\t\t/// <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a> or\n\t\t/// <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a> has the <see cref=\"MessageSummaryItems.Headers\"/>\n\t\t/// flag set on <see cref=\"IFetchRequest.Items\"/> or if the <see cref=\"IFetchRequest.Headers\"/> list is non-empty.\n\t\t/// </para>\n\t\t/// </remarks>\n\t\t/// <value>The list of headers.</value>\n\t\tHeaderList? Headers { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the internal date of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the internal date of the message (often the same date as found in the <c>Received</c> header), if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.InternalDate\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The internal date of the message.</value>\n\t\tDateTimeOffset? InternalDate { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the date and time that the message was saved to the current mailbox, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the date and time that the message was saved to the current mailbox, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.SaveDate\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The save date of the message.</value>\n\t\tDateTimeOffset? SaveDate { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the size of the message, in bytes, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the size of the message, in bytes, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Size\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The size of the message.</value>\n\t\tuint? Size { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the mod-sequence value for the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the mod-sequence value for the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.ModSeq\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value.</value>\n\t\tulong? ModSeq { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the message-ids that the message references, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message-ids that the message references, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.References\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The references.</value>\n\t\tMessageIdList? References { get; }\n\n\t\t/// <summary>\n\t\t/// Get the globally unique identifier for the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the globally unique identifier of the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.EmailId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// <note type=\"info\">This property maps to the <c>EMAILID</c> value defined in the\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.</note>\n\t\t/// </remarks>\n\t\t/// <value>The globally unique message identifier.</value>\n\t\tstring? EmailId { get; }\n\n\t\t/// <summary>\n\t\t/// Get the globally unique thread identifier for the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the globally unique thread identifier for the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.ThreadId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// <note type=\"info\">This property maps to the <c>THREADID</c> value defined in the\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.</note>\n\t\t/// </remarks>\n\t\t/// <value>The globally unique thread identifier.</value>\n\t\tstring? ThreadId { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the unique identifier of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the unique identifier of the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.UniqueId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The uid of the message.</value>\n\t\tUniqueId UniqueId { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the index of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the index of the message.</para>\n\t\t/// <para>This property is always set.</para>\n\t\t/// </remarks>\n\t\t/// <value>The index of the message.</value>\n\t\tint Index { get; }\n\n\t\t#region GMail extension properties\n\n\t\t/// <summary>\n\t\t/// Gets the GMail message identifier, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the GMail message identifier, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.GMailMessageId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The GMail message identifier.</value>\n\t\tulong? GMailMessageId { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the GMail thread identifier, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the GMail thread identifier, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.GMailThreadId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The GMail thread identifier.</value>\n\t\tulong? GMailThreadId { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the list of GMail labels, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the list of GMail labels, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.GMailLabels\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The GMail labels.</value>\n\t\tIList<string>? GMailLabels { get; }\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/IProtocolLogger.cs",
    "content": "﻿//\n// IProtocolLogger.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for logging the communication between a client and server.\n\t/// </summary>\n\t/// <remarks>\n\t/// An interface for logging the communication between a client and server.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ProtocolLogger\"/>\n\t/// </example>\n\tpublic interface IProtocolLogger : IDisposable\n\t{\n\t\t/// <summary>\n\t\t/// Get or set the authentication secret detector.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the authentication secret detector.\n\t\t/// </remarks>\n\t\t/// <value>The authentication secret detector.</value>\n\t\tIAuthenticationSecretDetector? AuthenticationSecretDetector { get; set; }\n\n\t\t/// <summary>\n\t\t/// Logs a connection to the specified URI.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Logs a connection to the specified URI.\n\t\t/// </remarks>\n\t\t/// <param name=\"uri\">The URI.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uri\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The logger has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tvoid LogConnect (Uri uri);\n\n\t\t/// <summary>\n\t\t/// Logs a sequence of bytes sent by the client.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Logs a sequence of bytes sent by the client.</para>\n\t\t/// <para><see cref=\"LogClient(byte[], int, int)\"/> is called by the <see cref=\"IMailService\"/> upon every successful\n\t\t/// write operation to its underlying network stream, passing the exact same <paramref name=\"buffer\"/>,\n\t\t/// <paramref name=\"offset\"/>, and <paramref name=\"count\"/> arguments to the logging function.</para>\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to log.</param>\n\t\t/// <param name='offset'>The offset of the first byte to log.</param>\n\t\t/// <param name='count'>The number of bytes to log.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The logger has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tvoid LogClient (byte[] buffer, int offset, int count);\n\n\t\t/// <summary>\n\t\t/// Logs a sequence of bytes sent by the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Logs a sequence of bytes sent by the server.</para>\n\t\t/// <para><see cref=\"LogServer(byte[], int, int)\"/> is called by the <see cref=\"IMailService\"/> upon every successful\n\t\t/// read of its underlying network stream with the exact buffer that was read.</para>\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to log.</param>\n\t\t/// <param name='offset'>The offset of the first byte to log.</param>\n\t\t/// <param name='count'>The number of bytes to log.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The logger has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tvoid LogServer (byte[] buffer, int offset, int count);\n\t}\n}\n"
  },
  {
    "path": "MailKit/IReplaceRequest.cs",
    "content": "﻿//\n// IReplaceRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for replacing a message in a folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for replacing a message in a folder.\n\t/// </remarks>\n\tpublic interface IReplaceRequest : IAppendRequest\n\t{\n\t\t/// <summary>\n\t\t/// Get or set the folder where the replacement message should be appended.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the folder where the replacement message should be appended.</para>\n\t\t/// <para>If no destination folder is specified, then the replacement message will be\n\t\t/// appended to the original folder.</para>\n\t\t/// </remarks>\n\t\t/// <value>The destination folder.</value>\n\t\tIMailFolder? Destination { get; set; }\n\t}\n}\n"
  },
  {
    "path": "MailKit/IStoreFlagsRequest.cs",
    "content": "﻿//\n// IStoreFlagsRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for storing message flags.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for storing message flags.\n\t/// </remarks>\n\tpublic interface IStoreFlagsRequest : IStoreRequest\n\t{\n\t\t/// <summary>\n\t\t/// Get the store action to perform.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the store action to perform.\n\t\t/// </remarks>\n\t\t/// <value>The store action.</value>\n\t\tStoreAction Action { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set the message flags that should be added, removed, or set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the message flags that should be added, removed, or set.\n\t\t/// </remarks>\n\t\t/// <value>The message flags.</value>\n\t\tMessageFlags Flags { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the keywords that should be added, removed, or set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the keywords that should be added, removed, or set.\n\t\t/// </remarks>\n\t\t/// <value>The keywords.</value>\n\t\tISet<string> Keywords { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set whether the store operation should run silently.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether the store operation should run silently.</para>\n\t\t/// <para>Normally, when flags or keywords are changed on a message, a <see cref=\"IMailFolder.MessageFlagsChanged\"/> event is emitted.\n\t\t/// By setting <see cref=\"Silent\"/> to <see langword=\"true\" />, this event will not be emitted as a result of this store operation.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the store operation should run silently (not emitting events for flag changes); otherwise, <see langword=\"false\" />.</value>\n\t\tbool Silent { get; set; }\n\t}\n}\n"
  },
  {
    "path": "MailKit/IStoreLabelsRequest.cs",
    "content": "﻿//\n// IStoreLabelsRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for storing GMail-style labels for a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for storing GMail-style labels for a message.\n\t/// </remarks>\n\tpublic interface IStoreLabelsRequest : IStoreRequest\n\t{\n\t\t/// <summary>\n\t\t/// Get the store action to perform.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the store action to perform.\n\t\t/// </remarks>\n\t\t/// <value>The store action.</value>\n\t\tStoreAction Action { get; }\n\n\t\t/// <summary>\n\t\t/// Get the GMail-style labels that should be added, removed, or set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the GMail-style labels that should be added, removed, or set.\n\t\t/// </remarks>\n\t\t/// <value>The GMail-style labels.</value>\n\t\tISet<string> Labels { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set whether the store operation should run silently.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether the store operation should run silently.</para>\n\t\t/// <para>Normally, when flags or keywords are changed on a message, a <see cref=\"IMailFolder.MessageLabelsChanged\"/> event is emitted.\n\t\t/// By setting <see cref=\"Silent\"/> to <see langword=\"true\" />, this event will not be emitted as a result of this store operation.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the store operation should run silently (not emitting events for label changes); otherwise, <see langword=\"false\" />.</value>\n\t\tbool Silent { get; set; }\n\t}\n}\n"
  },
  {
    "path": "MailKit/IStoreRequest.cs",
    "content": "﻿//\n// IStoreRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for storing flags, labels, or annotations for a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for storing flags, labels, or annotations for a message.\n\t/// </remarks>\n\tpublic interface IStoreRequest\n\t{\n\t\t/// <summary>\n\t\t/// Get or set the mod-sequence value that indicates the last known state of the message(s) being updated.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the mod-sequence value that indicates the last known state of the message(s) being updated.</para>\n\t\t/// <para>If this property is set, only messages that have not had their flags modified since the specified mod-sequence\n\t\t/// state will have their flags updated by the <a href=\"Overload_MailKit_IMailFolder_Store.htm\">Store</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_StoreAsync.htm\">StoreAsync</a> methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value that indicates the last known state of the message(s) being updated.</value>\n\t\tulong? UnchangedSince { get; set; }\n\t}\n}\n"
  },
  {
    "path": "MailKit/ITransferProgress.cs",
    "content": "﻿//\n// ITransferProgress.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An interface for reporting progress of uploading or downloading messages.\n\t/// </summary>\n\t/// <remarks>\n\t/// An interface for reporting progress of uploading or downloading messages.\n\t/// </remarks>\n\tpublic interface ITransferProgress\n\t{\n\t\t/// <summary>\n\t\t/// Report the progress of the transfer operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Reports the progress of the transfer operation.</para>\n\t\t/// <para>This method is only used if the operation knows the size\n\t\t/// of the message, part, or stream being transferred without doing\n\t\t/// extra work to calculate it.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"bytesTransferred\">The number of bytes transferred.</param>\n\t\t/// <param name=\"totalSize\">The total size, in bytes, of the message, part, or stream being transferred.</param>\n\t\tvoid Report (long bytesTransferred, long totalSize);\n\n\t\t/// <summary>\n\t\t/// Report the progress of the transfer operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Reports the progress of the transfer operation.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"bytesTransferred\">The number of bytes transferred.</param>\n\t\tvoid Report (long bytesTransferred);\n\t}\n}\n"
  },
  {
    "path": "MailKit/MailFolder.cs",
    "content": "﻿//\n// MailFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Collections;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nusing MailKit.Search;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An abstract mail folder implementation.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract mail folder implementation.\n\t/// </remarks>\n\tpublic abstract class MailFolder : IMailFolder\n\t{\n\t\t/// <summary>\n\t\t/// The bit mask of settable flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Only flags in the list of settable flags may be set on a message by the client.\n\t\t/// </remarks>\n\t\tprotected static readonly MessageFlags SettableFlags = MessageFlags.Answered | MessageFlags.Deleted |\n\t\t\tMessageFlags.Draft | MessageFlags.Flagged | MessageFlags.Seen;\n\n\t\tIMailFolder? parent;\n\n\t\t/// <summary>\n\t\t/// Initialize a new instance of the <see cref=\"MailKit.MailFolder\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailFolder\"/> class.\n\t\t/// </remarks>\n\t\t[Obsolete (\"Use MailFolder (string fullName, char directorySeparator, FolderAttributes attributes) instead.\")]\n\t\tprotected MailFolder ()\n\t\t{\n\t\t\tPermanentKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tAcceptedKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tFullName = string.Empty;\n\t\t\tName = string.Empty;\n\t\t\tFirstUnread = -1;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initialize a new instance of the <see cref=\"MailKit.MailFolder\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailFolder\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"fullName\">The full name (path) of the folder.</param>\n\t\t/// <param name=\"directorySeparator\">The directory separator used by the folder.</param>\n\t\t/// <param name=\"attributes\">The attributes of the folder.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"fullName\"/> is <see langword=\"null\"/>.\n\t\t/// </exception>\n\t\tprotected MailFolder (string fullName, char directorySeparator, FolderAttributes attributes)\n\t\t{\n\t\t\tif (fullName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (fullName));\n\n\t\t\tPermanentKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tAcceptedKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tName = GetBaseName (fullName, directorySeparator);\n\t\t\tDirectorySeparator = directorySeparator;\n\t\t\tAttributes = attributes;\n\t\t\tFullName = fullName;\n\n\t\t\tFirstUnread = -1;\n\t\t}\n\n\t\tinternal static string GetBaseName (string fullName, char delim)\n\t\t{\n\t\t\tint index;\n\n\t\t\tif ((index = fullName.LastIndexOf (delim)) != -1)\n\t\t\t\treturn fullName.Substring (index + 1);\n\n\t\t\treturn fullName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get an object that can be used to synchronize access to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets an object that can be used to synchronize access to the folder.</para>\n\t\t/// </remarks>\n\t\t/// <value>The sync root.</value>\n\t\tpublic abstract object SyncRoot {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the parent folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Root-level folders do not have a parent folder.\n\t\t/// </remarks>\n\t\t/// <value>The parent folder.</value>\n\t\tpublic IMailFolder? ParentFolder {\n\t\t\tget { return parent; }\n\t\t\tinternal protected set {\n\t\t\t\tif (value == parent)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (parent != null)\n\t\t\t\t\tparent.Renamed -= OnParentFolderRenamed;\n\n\t\t\t\tparent = value;\n\n\t\t\t\tif (parent != null)\n\t\t\t\t\tparent.Renamed += OnParentFolderRenamed;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the folder attributes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder attributes.\n\t\t/// </remarks>\n\t\t/// <value>The folder attributes.</value>\n\t\tpublic FolderAttributes Attributes {\n\t\t\tget; internal protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation access level.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If annotations are supported, this property can be used to determine whether or not\n\t\t/// the <see cref=\"IMailFolder\"/> supports reading and writing annotations.\n\t\t/// </remarks>\n\t\t/// <value>The annotation access level.</value>\n\t\tpublic AnnotationAccess AnnotationAccess {\n\t\t\tget; internal protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the supported annotation scopes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If annotations are supported, this property can be used to determine which\n\t\t/// annotation scopes are supported by the <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The supported annotation scopes.</value>\n\t\tpublic AnnotationScope AnnotationScopes {\n\t\t\tget; internal protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the maximum size of annotation values supported by the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If annotations are supported, this property can be used to determine the\n\t\t/// maximum size of annotation values supported by the <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The maximum size of annotation values supported by the folder.</value>\n\t\tpublic uint MaxAnnotationSize {\n\t\t\tget; internal protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the permanent flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The permanent flags are the message flags that will persist between sessions.</para>\n\t\t/// <para>If the <see cref=\"MessageFlags.UserDefined\"/> flag is set, then the folder allows\n\t\t/// storing of user-defined keywords.</para>\n\t\t/// </remarks>\n\t\t/// <value>The permanent flags.</value>\n\t\tpublic MessageFlags PermanentFlags {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the permanent keywords.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The permanent keywords are the keywords that will persist between sessions.</para>\n\t\t/// <para>If the <see cref=\"MessageFlags.UserDefined\"/> flag is set in <see cref=\"PermanentFlags\"/>,\n\t\t/// then the folder allows storing of user-defined keywords as well.</para>\n\t\t/// </remarks>\n\t\t/// <value>The permanent keywords.</value>\n\t\tpublic IReadOnlySetOfStrings PermanentKeywords {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the accepted flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The accepted flags are the message flags that will be accepted and persist\n\t\t/// for the current session. For the set of flags that will persist between\n\t\t/// sessions, see the <see cref=\"PermanentFlags\"/> property.\n\t\t/// </remarks>\n\t\t/// <value>The accepted flags.</value>\n\t\tpublic MessageFlags AcceptedFlags {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the accepted keywords.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The accepted keywords are the keywords that will be accepted and persist\n\t\t/// for the current session. For the set of keywords that will persist between\n\t\t/// sessions, see the <see cref=\"PermanentKeywords\"/> property.\n\t\t/// </remarks>\n\t\t/// <value>The accepted keywords.</value>\n\t\tpublic IReadOnlySetOfStrings AcceptedKeywords {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the directory separator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the directory separator.\n\t\t/// </remarks>\n\t\t/// <value>The directory separator.</value>\n\t\tpublic char DirectorySeparator {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the read/write access of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the read/write access of the folder.\n\t\t/// </remarks>\n\t\t/// <value>The read/write access.</value>\n\t\tpublic FolderAccess Access {\n\t\t\tget; internal protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder is a namespace folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder is a namespace folder.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is a namespace folder; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsNamespace {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the full name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This is the equivalent of the full path of a file on a file system.\n\t\t/// </remarks>\n\t\t/// <value>The full name of the folder.</value>\n\t\tpublic string FullName {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This is the equivalent of the file name of a file on the file system.\n\t\t/// </remarks>\n\t\t/// <value>The name of the folder.</value>\n\t\tpublic string Name {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the unique identifier for the folder, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a unique identifier for the folder, if available. This is useful for clients\n\t\t/// implementing a message cache that want to track the folder after it is renamed by another\n\t\t/// client.</para>\n\t\t/// <note type=\"note\">This property will only be available if the server supports the\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.</note>\n\t\t/// </remarks>\n\t\t/// <value>The unique folder identifier.</value>\n\t\tpublic string? Id {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a value indicating whether the folder is subscribed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a value indicating whether the folder is subscribed.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is subscribed; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsSubscribed {\n\t\t\tget { return (Attributes & FolderAttributes.Subscribed) != 0; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a value indicating whether the folder is currently open.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a value indicating whether the folder is currently open.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is currently open; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool IsOpen {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the folder can be opened.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the folder can be opened.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder can be opened; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool CanOpen {\n\t\t\tget { return (Attributes & (FolderAttributes.NoSelect | FolderAttributes.NonExistent)) == 0; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a value indicating whether the folder exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a value indicating whether the folder exists.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder exists; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool Exists {\n\t\t\tget { return (Attributes & FolderAttributes.NonExistent) == 0; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the highest mod-sequence value of all messages in the mailbox.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the highest mod-sequence value of all messages in the mailbox.\n\t\t/// </remarks>\n\t\t/// <value>The highest mod-sequence value.</value>\n\t\tpublic ulong HighestModSeq {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the UID validity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>UIDs are only valid so long as the UID validity value remains unchanged. If and when\n\t\t/// the folder's <see cref=\"UidValidity\"/> is changed, a client MUST discard its cache of UIDs\n\t\t/// along with any summary information that it may have and re-query the folder.</para>\n\t\t/// <para>This value will only be set after the folder has been opened.</para>\n\t\t/// </remarks>\n\t\t/// <value>The UID validity.</value>\n\t\tpublic uint UidValidity {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the UID that the folder will assign to the next message that is added.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This value will only be set after the folder has been opened.\n\t\t/// </remarks>\n\t\t/// <value>The next UID.</value>\n\t\tpublic UniqueId? UidNext {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the maximum size of a message that can be appended to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the maximum size of a message that can be appended to the folder.</para>\n\t\t/// <note type=\"note\">If the value is not set, then the limit is unspecified.</note>\n\t\t/// </remarks>\n\t\t/// <value>The append limit.</value>\n\t\tpublic uint? AppendLimit {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the size of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the size of the folder in bytes.</para>\n\t\t/// <note type=\"note\">If the value is not set, then the size is unspecified.</note>\n\t\t/// </remarks>\n\t\t/// <value>The size of the folder, in bytes.</value>\n\t\tpublic ulong? Size {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the index of the first unread message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the index of the first unread message in the folder.</para>\n\t\t/// <note type=\"note\"><para>This value will only be set after the folder has been opened.</para>\n\t\t/// <para>A value of <c>-1</c> indicates that there are no unread messages in the folder or that the server\n\t\t/// has not provided the index of the first unread message.</para></note>\n\t\t/// </remarks>\n\t\t/// <value>The index of the first unread message or <c>-1</c> if there are no unread messages in the folder.</value>\n\t\tpublic int FirstUnread {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of unread messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of unread messages in the folder.</para>\n\t\t/// <note type=\"note\">This value will only be set after calling\n\t\t/// <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/>\n\t\t/// with <see cref=\"StatusItems.Unread\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <value>The number of unread messages.</value>\n\t\tpublic int Unread {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of recently delivered messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of recently delivered messages in the folder.</para>\n\t\t/// <note type=\"note\">This value will only be set after calling\n\t\t/// <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/>\n\t\t/// with <see cref=\"StatusItems.Recent\"/> or by opening the folder.</note>\n\t\t/// </remarks>\n\t\t/// <value>The number of recently delivered messages.</value>\n\t\tpublic int Recent {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the total number of messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the total number of messages in the folder.</para>\n\t\t/// <note type=\"note\">This value will only be set after calling\n\t\t/// <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/>\n\t\t/// with <see cref=\"StatusItems.Count\"/> or by opening the folder.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByIndex\"/>\n\t\t/// </example>\n\t\t/// <value>The total number of messages.</value>\n\t\tpublic int Count {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the threading algorithms supported by the folder.\n\t\t/// </remarks>\n\t\t/// <value>The supported threading algorithms.</value>\n\t\tpublic abstract HashSet<ThreadingAlgorithm> ThreadingAlgorithms { get; }\n\n\t\t/// <summary>\n\t\t/// Determine whether or not a <see cref=\"MailFolder\"/> supports a feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not a <see cref=\"MailFolder\"/> supports a feature.\n\t\t/// </remarks>\n\t\t/// <param name=\"feature\">The desired feature.</param>\n\t\t/// <returns><see langword=\"true\" /> if the feature is supported; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic abstract bool Supports (FolderFeature feature);\n\n\t\t/// <summary>\n\t\t/// Opens the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This variant of the <see cref=\"Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// method is meant for quick resynchronization of the folder. Before calling this method,\n\t\t/// the <see cref=\"MailStore.EnableQuickResync(CancellationToken)\"/> method MUST be called.</para>\n\t\t/// <para>You should also make sure to add listeners to the <see cref=\"MessagesVanished\"/> and\n\t\t/// <see cref=\"MessageFlagsChanged\"/> events to get notifications of changes since\n\t\t/// the last time the folder was opened.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"uidValidity\">The last known <see cref=\"UidValidity\"/> value.</param>\n\t\t/// <param name=\"highestModSeq\">The last known <see cref=\"HighestModSeq\"/> value.</param>\n\t\t/// <param name=\"uids\">The last known list of unique message identifiers.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The quick resynchronization feature has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the quick resynchronization feature.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract FolderAccess Open (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously opens the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This variant of the <see cref=\"OpenAsync(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// method is meant for quick resynchronization of the folder. Before calling this method,\n\t\t/// the <see cref=\"MailStore.EnableQuickResync(CancellationToken)\"/> method MUST be called.</para>\n\t\t/// <para>You should also make sure to add listeners to the <see cref=\"MessagesVanished\"/> and\n\t\t/// <see cref=\"MessageFlagsChanged\"/> events to get notifications of changes since\n\t\t/// the last time the folder was opened.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"uidValidity\">The last known <see cref=\"UidValidity\"/> value.</param>\n\t\t/// <param name=\"highestModSeq\">The last known <see cref=\"HighestModSeq\"/> value.</param>\n\t\t/// <param name=\"uids\">The last known list of unique message identifiers.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The quick resynchronization feature has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the quick resynchronization feature.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<FolderAccess> OpenAsync (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Opens the folder using the requested folder access.\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract FolderAccess Open (FolderAccess access, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously opens the folder using the requested folder access.\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<FolderAccess> OpenAsync (FolderAccess access, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Close the folder, optionally expunging the messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Closes the folder, optionally expunging the messages marked for deletion.\n\t\t/// </remarks>\n\t\t/// <param name=\"expunge\">If set to <see langword=\"true\" />, expunge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Close (bool expunge = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously close the folder, optionally expunging the messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously closes the folder, optionally expunging the messages marked for deletion.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"expunge\">If set to <see langword=\"true\" />, expunge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task CloseAsync (bool expunge = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"isMessageFolder\"><see langword=\"true\" /> if the folder will be used to contain messages; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IMailFolder? Create (string name, bool isMessageFolder, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"isMessageFolder\"><see langword=\"true\" /> if the folder will be used to contain messages; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IMailFolder?> CreateAsync (string name, bool isMessageFolder, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUses\">A list of special uses for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"specialUses\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IMailFolder? Create (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUses\">A list of special uses for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"specialUses\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IMailFolder?> CreateAsync (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUse\">The special use for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IMailFolder? Create (string name, SpecialFolder specialUse, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Create (name, new [] { specialUse }, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUse\">The special use for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"MailService\"/> does not support the creation of special folders.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<IMailFolder?> CreateAsync (string name, SpecialFolder specialUse, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn CreateAsync (name, new [] { specialUse }, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Rename the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Renames the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"parent\">The new parent folder.</param>\n\t\t/// <param name=\"name\">The new name of the folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"parent\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"parent\"/> does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is not a legal folder name.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be renamed (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Rename (IMailFolder parent, string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously rename the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously renames the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"parent\">The new parent folder.</param>\n\t\t/// <param name=\"name\">The new name of the folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"parent\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"parent\"/> does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is not a legal folder name.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be renamed (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task RenameAsync (IMailFolder parent, string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Delete the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deletes the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Delete (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously delete the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously deletes the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task DeleteAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Subscribe to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Subscribes to the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Subscribe (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously subscribe to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously subscribes to the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task SubscribeAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Unsubscribe from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Unsubscribes from the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Unsubscribe (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously unsubscribe from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously unsubscribes from the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task UnsubscribeAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the subfolders as well as queries the server for the status of the requested items.</para>\n\t\t/// <para>When the <paramref name=\"items\"/> argument is non-empty, this has the equivalent functionality\n\t\t/// of calling <see cref=\"GetSubfolders(bool,System.Threading.CancellationToken)\"/> and then calling\n\t\t/// <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/> on each of the returned folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<IMailFolder> GetSubfolders (StatusItems items, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the subfolders as well as queries the server for the status of the requested items.</para>\n\t\t/// <para>When the <paramref name=\"items\"/> argument is non-empty, this has the equivalent functionality\n\t\t/// of calling <see cref=\"GetSubfoldersAsync(bool,System.Threading.CancellationToken)\"/> and then calling\n\t\t/// <see cref=\"StatusAsync(StatusItems,System.Threading.CancellationToken)\"/> on each of the returned folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<IMailFolder>> GetSubfoldersAsync (StatusItems items, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the subfolders.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<IMailFolder> GetSubfolders (bool subscribedOnly = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetSubfolders (StatusItems.None, subscribedOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the subfolders.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<IList<IMailFolder>> GetSubfoldersAsync (bool subscribedOnly = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetSubfoldersAsync (StatusItems.None, subscribedOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified subfolder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified subfolder.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolder.</returns>\n\t\t/// <param name=\"name\">The name of the subfolder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is either an empty string or contains the <see cref=\"DirectorySeparator\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The requested folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IMailFolder GetSubfolder (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified subfolder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified subfolder.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolder.</returns>\n\t\t/// <param name=\"name\">The name of the subfolder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is either an empty string or contains the <see cref=\"DirectorySeparator\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The requested folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IMailFolder> GetSubfolderAsync (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Force the server to flush its state for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Forces the server to flush its state for the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Check (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously force the server to flush its state for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously forces the server to flush its state for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task CheckAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Update the values of the specified items.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Updates the values of the specified items.</para>\n\t\t/// <para>The <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/> method\n\t\t/// MUST NOT be used on a folder that is already in the opened state. Instead, other ways\n\t\t/// of getting the desired information should be used.</para>\n\t\t/// <para>For example, a common use for the <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t\t/// method is to get the number of unread messages in the folder. When the folder is open, however, it is\n\t\t/// possible to use the <see cref=\"MailFolder.Search(MailKit.Search.SearchQuery, System.Threading.CancellationToken)\"/>\n\t\t/// method to query for the list of unread messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"items\">The items to update.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the STATUS command.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Status (StatusItems items, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously update the values of the specified items.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Updates the values of the specified items.</para>\n\t\t/// <para>The <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/> method\n\t\t/// MUST NOT be used on a folder that is already in the opened state. Instead, other ways\n\t\t/// of getting the desired information should be used.</para>\n\t\t/// <para>For example, a common use for the <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t\t/// method is to get the number of unread messages in the folder. When the folder is open, however, it is\n\t\t/// possible to use the <see cref=\"MailFolder.Search(MailKit.Search.SearchQuery, System.Threading.CancellationToken)\"/>\n\t\t/// method to query for the list of unread messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"items\">The items to update.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the STATUS command.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task StatusAsync (StatusItems items, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the complete access control list for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the complete access control list for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The access control list.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract AccessControlList GetAccessControlList (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the complete access control list for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the complete access control list for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The access control list.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<AccessControlList> GetAccessControlListAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the access rights for a particular identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for a particular identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract AccessRights GetAccessRights (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for a particular identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the access rights for a particular identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<AccessRights> GetAccessRightsAsync (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the access rights for the current authenticated user.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for the current authenticated user.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract AccessRights GetMyAccessRights (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for the current authenticated user.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the access rights for the current authenticated user.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<AccessRights> GetMyAccessRightsAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Add access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void AddAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously add access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously adds the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task AddAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Remove access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void RemoveAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task RemoveAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Set the access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void SetAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task SetAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Remove all access rights for the given identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all access rights for the given identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void RemoveAccess (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove all access rights for the given identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously removes all access rights for the given identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task RemoveAccessAsync (string name, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the quota information for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the quota information for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract FolderQuota GetQuota (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the quota information for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the quota information for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<FolderQuota> GetQuotaAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Set the quota limits for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sets the quota limits for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The updated folder quota.</returns>\n\t\t/// <param name=\"messageLimit\">If not <see langword=\"null\" />, sets the maximum number of messages to allow.</param>\n\t\t/// <param name=\"storageLimit\">If not <see langword=\"null\" />, sets the maximum storage size (in kilobytes).</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract FolderQuota SetQuota (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the quota limits for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sets the quota limits for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"IMailStore.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The updated folder quota.</returns>\n\t\t/// <param name=\"messageLimit\">If not <see langword=\"null\" />, sets the maximum number of messages to allow.</param>\n\t\t/// <param name=\"storageLimit\">If not <see langword=\"null\" />, sets the maximum storage size (in kilobytes).</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quotas.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<FolderQuota> SetQuotaAsync (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract string? GetMetadata (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<string?> GetMetadataAsync (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"tags\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic MetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetMetadata (new MetadataOptions (), tags, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"tags\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<MetadataCollection> GetMetadataAsync (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetMetadataAsync (new MetadataOptions (), tags, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<MetadataCollection> GetMetadataAsync (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void SetMetadata (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task SetMetadataAsync (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Expunge the folder, permanently removing all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Expunges the folder, permanently removing all messages marked for deletion.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"MailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Expunge (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously expunge the folder, permanently removing all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously expunges the folder, permanently removing all messages marked for deletion.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"MailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task ExpungeAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Expunge the specified uids, permanently removing them from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Expunges the specified uids, permanently removing them from the folder.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"MailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The message uids.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Expunge (IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously expunge the specified uids, permanently removing them from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously expunges the specified uids, permanently removing them from the folder.</para>\n\t\t/// <note type=\"note\">Normally, an <see cref=\"MessageExpunged\"/> event will be emitted for\n\t\t/// each message that is expunged. However, if the mail store supports the quick\n\t\t/// resynchronization feature and it has been enabled via the\n\t\t/// <see cref=\"MailStore.EnableQuickResync(CancellationToken)\"/> method, then\n\t\t/// the <see cref=\"MessagesVanished\"/> event will be emitted rather than the\n\t\t/// <see cref=\"MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uids\">The message uids.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task ExpungeAsync (IList<UniqueId> uids, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual UniqueId? Append (IAppendRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Append (FormatOptions.Default, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<UniqueId?> AppendAsync (IAppendRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn AppendAsync (FormatOptions.Default, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract UniqueId? Append (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<UniqueId?> AppendAsync (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends multiple messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<UniqueId> Append (IList<IAppendRequest> requests, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Append (FormatOptions.Default, requests, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends multiple messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<IList<UniqueId>> AppendAsync (IList<IAppendRequest> requests, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn AppendAsync (FormatOptions.Default, requests, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends multiple messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"requests\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<UniqueId> Append (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends multiple messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"requests\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<UniqueId>> AppendAsync (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual UniqueId? Replace (UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Replace (FormatOptions.Default, uid, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual Task<UniqueId?> ReplaceAsync (UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn ReplaceAsync (FormatOptions.Default, uid, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic abstract UniqueId? Replace (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic abstract Task<UniqueId?> ReplaceAsync (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual UniqueId? Replace (int index, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Replace (FormatOptions.Default, index, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual Task<UniqueId?> ReplaceAsync (int index, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn ReplaceAsync (FormatOptions.Default, index, request, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic abstract UniqueId? Replace (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"MailFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic abstract Task<UniqueId?> ReplaceAsync (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual UniqueId? CopyTo (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = CopyTo (new [] { uid }, destination, cancellationToken);\n\n\t\t\tif (uids != null && uids.Destination.Count > 0)\n\t\t\t\treturn uids.Destination[0];\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<UniqueId?> CopyToAsync (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = await CopyToAsync (new [] { uid }, destination, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (uids != null && uids.Destination.Count > 0)\n\t\t\t\treturn uids.Destination[0];\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract UniqueIdMap CopyTo (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<UniqueIdMap> CopyToAsync (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual UniqueId? MoveTo (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = MoveTo (new [] { uid }, destination, cancellationToken);\n\n\t\t\tif (uids != null && uids.Destination.Count > 0)\n\t\t\t\treturn uids.Destination[0];\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the message in the destination folder, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<UniqueId?> MoveToAsync (UniqueId uid, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = await MoveToAsync (new [] { uid }, destination, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (uids != null && uids.Destination.Count > 0)\n\t\t\t\treturn uids.Destination[0];\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract UniqueIdMap MoveTo (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<UniqueIdMap> MoveToAsync (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual void CopyTo (int index, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tCopyTo (new [] { index }, destination, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The indexes of the message to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task CopyToAsync (int index, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\treturn CopyToAsync (new [] { index }, destination, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void CopyTo (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task CopyToAsync (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual void MoveTo (int index, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tMoveTo (new [] { index }, destination, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified message to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified message to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The index of the message to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"destination\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> does not refer to a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to the <see cref=\"IMailStore\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task MoveToAsync (int index, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\treturn MoveToAsync (new [] { index }, destination, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void MoveTo (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously moves the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"IMailStore\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task MoveToAsync (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<IMessageSummary> Fetch (IList<UniqueId> uids, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<IMessageSummary>> FetchAsync (IList<UniqueId> uids, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<IMessageSummary> Fetch (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the specified message\n\t\t/// indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<IMessageSummary>> FetchAsync (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<IMessageSummary> Fetch (int min, int max, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetch the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously fetches the message summaries for the messages between\n\t\t/// the two indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the mail service may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<IMessageSummary>> FetchAsync (int min, int max, IFetchRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract HeaderList GetHeaders (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<HeaderList> GetHeadersAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract HeaderList GetHeaders (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<HeaderList> GetHeadersAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract HeaderList GetHeaders (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<HeaderList> GetHeadersAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract HeaderList GetHeaders (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<HeaderList> GetHeadersAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract MimeMessage GetMessage (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<MimeMessage> GetMessageAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract MimeMessage GetMessage (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified message.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<MimeMessage> GetMessageAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract MimeEntity GetBodyPart (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<MimeEntity> GetBodyPartAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract MimeEntity GetBodyPart (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<MimeEntity> GetBodyPartAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Stream GetStream (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn GetStream (uid, string.Empty, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<Stream> GetStreamAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn GetStreamAsync (uid, string.Empty, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Stream GetStream (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn GetStream (index, string.Empty, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a message stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a message stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessageStreamsByIndex\"/>\n\t\t/// </example>\n\t\t/// <returns>The message stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<Stream> GetStreamAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn GetStreamAsync (index, string.Empty, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (UniqueId uid, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (UniqueId uid, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (int index, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (int index, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Stream GetStream (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetStream (uid, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<Stream> GetStreamAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetStreamAsync (uid, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Stream GetStream (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetStream (index, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a body part as a stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a body part as a stream.\n\t\t/// </remarks>\n\t\t/// <returns>The body part stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<Stream> GetStreamAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetStreamAsync (index, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Stream GetStream (UniqueId uid, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\treturn GetStream (uid, part.PartSpecifier, offset, count, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<Stream> GetStreamAsync (UniqueId uid, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\treturn GetStreamAsync (uid, part.PartSpecifier, offset, count, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Stream GetStream (int index, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\treturn GetStream (index, part.PartSpecifier, offset, count, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets a substream of the body part. If the starting offset is beyond\n\t\t/// the end of the body part, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the body part, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The desired body part.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<Stream> GetStreamAsync (int index, BodyPart part, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\treturn GetStreamAsync (index, part.PartSpecifier, offset, count, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (UniqueId uid, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (UniqueId uid, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message. If the starting\n\t\t/// offset is beyond the end of the specified section of the message, an empty stream\n\t\t/// is returned. If the number of bytes desired extends beyond the end of the section,\n\t\t/// a truncated stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (int index, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (int index, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (int index, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets a substream of the specified message. If the starting\n\t\t/// offset is beyond the end of the specified section of the message, an empty stream\n\t\t/// is returned. If the number of bytes desired extends beyond the end of the section,\n\t\t/// a truncated stream will be returned.</para>\n\t\t/// <para>For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see Section 6.4.5 of RFC3501.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The <see cref=\"IMailStore\"/> did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (int index, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual bool Store (UniqueId uid, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = Store (new[] { uid }, request, cancellationToken);\n\n\t\t\treturn uids == null || uids.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<bool> StoreAsync (UniqueId uid, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = await StoreAsync (new[] { uid }, request, cancellationToken).ConfigureAwait (false);\n\t\t\t\n\t\t\treturn uids == null || uids.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<UniqueId> Store (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual bool Store (int index, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar indexes = Store (new[] { index }, request, cancellationToken);\n\n\t\t\treturn indexes == null || indexes.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<bool> StoreAsync (int index, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar indexes = await StoreAsync (new[] { index }, request, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn indexes == null || indexes.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<int> Store (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<int>> StoreAsync (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual bool Store (UniqueId uid, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = Store (new[] { uid }, request, cancellationToken);\n\n\t\t\treturn uids == null || uids.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<bool> StoreAsync (UniqueId uid, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uids = await StoreAsync (new[] { uid }, request, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn uids == null || uids.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<UniqueId> Store (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual bool Store (int index, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar indexes = Store (new[] { index }, request, cancellationToken);\n\n\t\t\treturn indexes == null || indexes.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a message.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the store operation was successful; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<bool> StoreAsync (int index, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar indexes = await StoreAsync (new[] { index }, request, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn indexes == null || indexes.Count == 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<int> Store (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The folder does not support storing labels.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/>\n\t\t/// value but the folder does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<int>> StoreAsync (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual void Store (UniqueId uid, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tStore (new [] { uid }, annotations, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task StoreAsync (UniqueId uid, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn StoreAsync (new [] { uid }, annotations, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Store (IList<UniqueId> uids, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task StoreAsync (IList<UniqueId> uids, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<UniqueId> Store (IList<UniqueId> uids, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual void Store (int index, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tStore (new[] { index }, annotations, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The indexes of the message.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"annotations\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"index\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task StoreAsync (int index, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn StoreAsync (new [] { index }, annotations, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void Store (IList<int> indexes, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"IMailFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task StoreAsync (IList<int> indexes, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<int> Store (IList<int> indexes, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.s\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"IMailFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"IMailFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<int>> StoreAsync (IList<int> indexes, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<UniqueId> Search (SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar results = Search (SearchOptions.None, query, cancellationToken);\n\n\t\t\treturn results.UniqueIds;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<IList<UniqueId>> SearchAsync (SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar results = await SearchAsync (SearchOptions.None, query, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn results.UniqueIds;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported by the mail store.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<UniqueId> Search (IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn Search (uidSet.And (query), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// One or more search terms in the <paramref name=\"query\"/> are not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<IList<UniqueId>> SearchAsync (IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn SearchAsync (uidSet.And (query), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract SearchResults Search (SearchOptions options, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<SearchResults> SearchAsync (SearchOptions options, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the subset of UIDs in the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual SearchResults Search (SearchOptions options, IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn Search (options, uidSet.And (query), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the subset of UIDs in the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the subset of UIDs in the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<SearchResults> SearchAsync (SearchOptions options, IList<UniqueId> uids, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn SearchAsync (options, uidSet.And (query), cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// /// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<UniqueId> Sort (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar results = Sort (SearchOptions.None, query, orderBy, cancellationToken);\n\n\t\t\treturn results.UniqueIds;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual async Task<IList<UniqueId>> SortAsync (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar results = await SortAsync (SearchOptions.None, query, orderBy, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn results.UniqueIds;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<UniqueId> Sort (IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn Sort (uidSet.And (query), orderBy, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<IList<UniqueId>> SortAsync (IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn SortAsync (uidSet.And (query), orderBy, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract SearchResults Sort (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"MailFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<SearchResults> SortAsync (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual SearchResults Sort (SearchOptions options, IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn Sort (options, uidSet.And (query), orderBy, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously searches the folder for messages matching the specified query,\n\t\t/// returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is empty.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the specified search options.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support sorting search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<SearchResults> SortAsync (SearchOptions options, IList<UniqueId> uids, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar uidSet = new UidSearchQuery (uids);\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\treturn SortAsync (options, uidSet.And (query), orderBy, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<MessageThread> Thread (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<MessageThread>> ThreadAsync (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<MessageThread> Thread (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support threading search results.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<MessageThread>> ThreadAsync (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is opened.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Opened\"/> event is emitted when the folder is opened.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? Opened;\n\n\t\t/// <summary>\n\t\t/// Raise the opened event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the opened event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnOpened ()\n\t\t{\n\t\t\tOpened?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is closed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Closed\"/> event is emitted when the folder is closed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? Closed;\n\n\t\t/// <summary>\n\t\t/// Raise the closed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the closed event.\n\t\t/// </remarks>\n\t\tinternal protected virtual void OnClosed ()\n\t\t{\n\t\t\tPermanentFlags = MessageFlags.None;\n\t\t\tAcceptedFlags = MessageFlags.None;\n\t\t\tAccess = FolderAccess.None;\n\t\t\tFirstUnread = -1;\n\n\t\t\tAnnotationAccess = AnnotationAccess.None;\n\t\t\tAnnotationScopes = AnnotationScope.None;\n\t\t\tMaxAnnotationSize = 0;\n\n\t\t\tClosed?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is deleted.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Deleted\"/> event is emitted when the folder is deleted.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? Deleted;\n\n\t\t/// <summary>\n\t\t/// Raise the deleted event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the deleted event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnDeleted ()\n\t\t{\n\t\t\tDeleted?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is renamed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Renamed\"/> event is emitted when the folder is renamed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<FolderRenamedEventArgs>? Renamed;\n\n\t\t/// <summary>\n\t\t/// Raise the renamed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the renamed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"oldName\">The old name of the folder.</param>\n\t\t/// <param name=\"newName\">The new name of the folder.</param>\n\t\tprotected virtual void OnRenamed (string oldName, string newName)\n\t\t{\n\t\t\tRenamed?.Invoke (this, new FolderRenamedEventArgs (oldName, newName));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Notifies the folder that a parent folder has been renamed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <see cref=\"IMailFolder\"/> implementations should override this method\n\t\t/// to update their state (such as updating their <see cref=\"FullName\"/>\n\t\t/// property).\n\t\t/// </remarks>\n\t\tprotected virtual void OnParentFolderRenamed ()\n\t\t{\n\t\t}\n\n\t\tvoid OnParentFolderRenamed (object? sender, FolderRenamedEventArgs e)\n\t\t{\n\t\t\tvar oldFullName = FullName;\n\n\t\t\tOnParentFolderRenamed ();\n\n\t\t\tif (FullName != oldFullName)\n\t\t\t\tOnRenamed (oldFullName, FullName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is subscribed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Subscribed\"/> event is emitted when the folder is subscribed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? Subscribed;\n\n\t\t/// <summary>\n\t\t/// Raise the subscribed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the subscribed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnSubscribed ()\n\t\t{\n\t\t\tSubscribed?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder is unsubscribed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Unsubscribed\"/> event is emitted when the folder is unsubscribed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? Unsubscribed;\n\n\t\t/// <summary>\n\t\t/// Raise the unsubscribed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the unsubscribed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnUnsubscribed ()\n\t\t{\n\t\t\tUnsubscribed?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when a message is expunged from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageExpunged\"/> event is emitted when a message is expunged from the folder.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\tpublic event EventHandler<MessageEventArgs>? MessageExpunged;\n\n\t\t/// <summary>\n\t\t/// Raise the message expunged event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message expunged event.\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The message expunged event args.</param>\n\t\tprotected virtual void OnMessageExpunged (MessageEventArgs args)\n\t\t{\n\t\t\tMessageExpunged?.Invoke (this, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when a message vanishes from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessagesVanished\"/> event is emitted when messages vanish from the folder.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<MessagesVanishedEventArgs>? MessagesVanished;\n\n\t\t/// <summary>\n\t\t/// Raise the messages vanished event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the messages vanished event.\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The messages vanished event args.</param>\n\t\tprotected virtual void OnMessagesVanished (MessagesVanishedEventArgs args)\n\t\t{\n\t\t\tMessagesVanished?.Invoke (this, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when flags changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageFlagsChanged\"/> event is emitted when the flags for a message are changed.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\tpublic event EventHandler<MessageFlagsChangedEventArgs>? MessageFlagsChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the message flags changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message flags changed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The message flags changed event args.</param>\n\t\tprotected virtual void OnMessageFlagsChanged (MessageFlagsChangedEventArgs args)\n\t\t{\n\t\t\tMessageFlagsChanged?.Invoke (this, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when labels changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageLabelsChanged\"/> event is emitted when the labels for a message are changed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<MessageLabelsChangedEventArgs>? MessageLabelsChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the message labels changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message labels changed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The message labels changed event args.</param>\n\t\tprotected virtual void OnMessageLabelsChanged (MessageLabelsChangedEventArgs args)\n\t\t{\n\t\t\tMessageLabelsChanged?.Invoke (this, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when annotations changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"AnnotationsChanged\"/> event is emitted when the annotations for a message are changed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<AnnotationsChangedEventArgs>? AnnotationsChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the message annotations changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message annotations changed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The message annotations changed event args.</param>\n\t\tprotected virtual void OnAnnotationsChanged (AnnotationsChangedEventArgs args)\n\t\t{\n\t\t\tAnnotationsChanged?.Invoke (this, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when a message summary is fetched from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Emitted when a message summary is fetched from the folder.</para>\n\t\t/// <para>When multiple message summaries are being fetched from a remote folder,\n\t\t/// it is possible that the connection will drop or some other exception will\n\t\t/// occur, causing the Fetch method to fail and lose all of the data that has been\n\t\t/// downloaded up to that point, requiring the client to request the same set of\n\t\t/// message summaries all over again after it reconnects. This is obviously\n\t\t/// inefficient. To alleviate this potential problem, this event will be emitted\n\t\t/// as soon as the <see cref=\"IMailFolder\"/> successfully parses each untagged FETCH\n\t\t/// response from the server, allowing the client to commit this data immediately to\n\t\t/// its local cache.</para>\n\t\t/// <note type=\"note\">Depending on the IMAP server, it is possible that the\n\t\t/// <see cref=\"MessageSummaryFetched\"/> event will be emitted for the same message\n\t\t/// multiple times if the IMAP server happens to split the requested fields into\n\t\t/// multiple untagged FETCH responses. Use the <see cref=\"IMessageSummary.Fields\"/>\n\t\t/// property to determine which f<see cref=\"IMessageSummary\"/> properties have\n\t\t/// been populated.</note>\n\t\t/// </remarks>\n\t\tpublic event EventHandler<MessageSummaryFetchedEventArgs>? MessageSummaryFetched;\n\n\t\t/// <summary>\n\t\t/// Raise the message summary fetched event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Raises the message summary fetched event.</para>\n\t\t/// <para>When multiple message summaries are being fetched from a remote folder,\n\t\t/// it is possible that the connection will drop or some other exception will\n\t\t/// occur, causing the Fetch method to fail and lose all of the data that has been\n\t\t/// downloaded up to that point, requiring the client to request the same set of\n\t\t/// message summaries all over again after it reconnects. This is obviously\n\t\t/// inefficient. To alleviate this potential problem, this event will be emitted\n\t\t/// as soon as the <see cref=\"IMailFolder\"/> successfully parses each untagged FETCH\n\t\t/// response from the server, allowing the client to commit this data immediately to\n\t\t/// its local cache.</para>\n\t\t/// <note type=\"note\">Depending on the IMAP server, it is possible that\n\t\t/// <see cref=\"OnMessageSummaryFetched\"/> will be invoked for the same message\n\t\t/// multiple times if the IMAP server happens to split the requested fields into\n\t\t/// multiple untagged FETCH responses. Use the <see cref=\"IMessageSummary.Fields\"/>\n\t\t/// property to determine which f<see cref=\"IMessageSummary\"/> properties have\n\t\t/// been populated.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message summary.</param>\n\t\tprotected virtual void OnMessageSummaryFetched (IMessageSummary message)\n\t\t{\n\t\t\tMessageSummaryFetched?.Invoke (this, new MessageSummaryFetchedEventArgs (message));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when metadata changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MetadataChanged\"/> event is emitted when metadata changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<MetadataChangedEventArgs>? MetadataChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the metadata changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the metadata changed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata that changed.</param>\n\t\tinternal protected virtual void OnMetadataChanged (Metadata metadata)\n\t\t{\n\t\t\tMetadataChanged?.Invoke (this, new MetadataChangedEventArgs (metadata));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the mod-sequence changed on a message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"ModSeqChanged\"/> event is emitted when the mod-sequence for a message is changed.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<ModSeqChangedEventArgs>? ModSeqChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the message mod-sequence changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message mod-sequence changed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The mod-sequence changed event args.</param>\n\t\tprotected virtual void OnModSeqChanged (ModSeqChangedEventArgs args)\n\t\t{\n\t\t\tModSeqChanged?.Invoke (this, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the highest mod-sequence changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"HighestModSeqChanged\"/> event is emitted whenever the <see cref=\"HighestModSeq\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? HighestModSeqChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the highest mod-sequence changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the highest mod-sequence changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnHighestModSeqChanged ()\n\t\t{\n\t\t\tHighestModSeqChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the next UID changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"UidNextChanged\"/> event is emitted whenever the <see cref=\"UidNext\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? UidNextChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the next UID changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the next UID changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnUidNextChanged ()\n\t\t{\n\t\t\tUidNextChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the UID validity changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"UidValidityChanged\"/> event is emitted whenever the <see cref=\"UidValidity\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? UidValidityChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the uid validity changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the uid validity changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnUidValidityChanged ()\n\t\t{\n\t\t\tUidValidityChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder ID changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"IdChanged\"/> event is emitted whenever the <see cref=\"Id\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? IdChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the ID changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the ID changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnIdChanged ()\n\t\t{\n\t\t\tIdChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the folder size changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"SizeChanged\"/> event is emitted whenever the <see cref=\"Size\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? SizeChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the size changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the size changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnSizeChanged ()\n\t\t{\n\t\t\tSizeChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the message count changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"CountChanged\"/> event is emitted whenever the <see cref=\"Count\"/> value changes.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\tpublic event EventHandler<EventArgs>? CountChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the message count changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message count changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnCountChanged ()\n\t\t{\n\t\t\tCountChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the recent message count changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"RecentChanged\"/> event is emitted whenever the <see cref=\"Recent\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? RecentChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the recent message count changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the recent message count changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnRecentChanged ()\n\t\t{\n\t\t\tRecentChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the unread message count changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"UnreadChanged\"/> event is emitted whenever the <see cref=\"Unread\"/> value changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<EventArgs>? UnreadChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the unread message count changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the unread message count changed event.\n\t\t/// </remarks>\n\t\tprotected virtual void OnUnreadChanged ()\n\t\t{\n\t\t\tUnreadChanged?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t#region IEnumerable<MimeMessage> implementation\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the messages in the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\tpublic abstract IEnumerator<MimeMessage> GetEnumerator ();\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the messages in the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"IMailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"IMailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The folder is not currently open.\n\t\t/// </exception>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.MailFolder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.MailFolder\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.MailFolder\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn FullName;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MailKit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>An Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices.</Description>\n    <AssemblyTitle>MailKit</AssemblyTitle>\n    <VersionPrefix>4.15.1</VersionPrefix>\n    <Authors>Jeffrey Stedfast</Authors>\n    <LangVersion>12</LangVersion>\n    <TargetFrameworks>netstandard2.0;netstandard2.1;net462;net47;net48;net8.0;net10.0</TargetFrameworks>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <AssemblyName>MailKit</AssemblyName>\n    <PackageId>MailKit</PackageId>\n    <PackageTags>smtp;pop3;imap;mime;security;dkim;smime;s/mime;openpgp;pgp;mbox;mail;email;parser;tnef</PackageTags>\n    <PackageProjectUrl>https://github.com/jstedfast/MailKit</PackageProjectUrl>\n    <PackageLicenseUrl>https://github.com/jstedfast/MailKit/blob/master/License.md</PackageLicenseUrl>\n    <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>\n    <GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>\n    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>\n    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>\n    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>\n    <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>\n    <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>\n    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>\n    <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>\n    <RootNamespace>MailKit</RootNamespace>\n    <Nullable>enable</Nullable>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <AssemblyOriginatorKeyFile>mailkit.snk</AssemblyOriginatorKeyFile>\n    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <SignAssembly>true</SignAssembly>\n    <DebugSymbols>true</DebugSymbols>\n    <NoWarn>1701;1702;CA1068;CA1510;CA1512;CA1513;CA1835;CA2012;IDE0016;IDE0056;IDE0057;IDE0060;IDE0063;IDE0066;IDE0090;IDE0180;IDE0251</NoWarn>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\n    <DebugType>full</DebugType>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\n    <DebugType>portable</DebugType>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' And $(TargetFramework.StartsWith('net4')) \">\n    <DebugType>full</DebugType>\n  </PropertyGroup>\n\n  <!-- Enable serializable support for net4.x -->\n  <PropertyGroup Condition=\" $(TargetFramework.StartsWith('net4')) \">\n    <DefineConstants>$(DefineConstants);SERIALIZABLE</DefineConstants>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <IsAotCompatible Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))\">true</IsAotCompatible>\n  </PropertyGroup>\n\n  <ItemGroup Condition=\" $(TargetFramework.StartsWith('net4')) Or '$(TargetFramework)' == 'netstandard2.0' \">\n    <PackageReference Include=\"System.Threading.Tasks.Extensions\" Version=\"4.6.0\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" $(TargetFramework.StartsWith('net4')) Or $(TargetFramework.StartsWith('netstandard')) Or '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"System.Formats.Asn1\" Version=\"8.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net10.0' \">\n    <PackageReference Include=\"System.Formats.Asn1\" Version=\"10.0.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\submodules\\MimeKit\\MimeKit\\MimeKit.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"Net\\SelectMode.cs;Security\\KeyedHashAlgorithm.cs;Security\\RandomNumberGenerator.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Net\\Imap\\AsyncImapClient.cs\" />\n    <Compile Include=\"Net\\Imap\\IImapClient.cs\" />\n    <Compile Include=\"Net\\Imap\\IImapFolder.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapAuthenticationSecretDetector.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCallbacks.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCapabilities.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapClient.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommand.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommandException.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommandResponse.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommandStatus.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapEncoding.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapEngine.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapEventGroup.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolder.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderAnnotations.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderConstructorArgs.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderFetch.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderFlags.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderSearch.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapIdleContext.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapImplementation.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapLiteral.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapProtocolException.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapResponseCode.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapSearchQueryOptimizer.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapStream.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapToken.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapUtils.cs\" />\n    <Compile Include=\"Net\\Pop3\\AsyncPop3Client.cs\" />\n    <Compile Include=\"Net\\Pop3\\IPop3Client.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3AuthenticationSecretDetector.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Capabilities.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Client.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Command.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3CommandException.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Engine.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Language.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3ProtocolException.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Stream.cs\" />\n    <Compile Include=\"Net\\Proxy\\HttpProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\HttpsProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\IProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\ProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\ProxyProtocolException.cs\" />\n    <Compile Include=\"Net\\Proxy\\Socks4aClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\Socks4Client.cs\" />\n    <Compile Include=\"Net\\Proxy\\Socks5Client.cs\" />\n    <Compile Include=\"Net\\Proxy\\SocksClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\WebProxyClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\AsyncSmtpClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\ISmtpClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpAuthenticationSecretDetector.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpCapabilities.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpCommandException.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpDataFilter.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpErrorCode.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpProtocolException.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpResponse.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpStatusCode.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpStream.cs\" />\n    <Compile Include=\"Net\\ClientMetrics.cs\" />\n    <Compile Include=\"Net\\IChannelBindingContext.cs\" />\n    <Compile Include=\"Net\\NetworkOperation.cs\" />\n    <Compile Include=\"Net\\NetworkStream.cs\" />\n    <Compile Include=\"Net\\SocketMetrics.cs\" />\n    <Compile Include=\"Net\\SocketUtils.cs\" />\n    <Compile Include=\"Net\\SslStream.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Search\\AnnotationSearchQuery.cs\" />\n    <Compile Include=\"Search\\BinarySearchQuery.cs\" />\n    <Compile Include=\"Search\\DateSearchQuery.cs\" />\n    <Compile Include=\"Search\\FilterSearchQuery.cs\" />\n    <Compile Include=\"Search\\HeaderSearchQuery.cs\" />\n    <Compile Include=\"Search\\ISearchQueryOptimizer.cs\" />\n    <Compile Include=\"Search\\NumericSearchQuery.cs\" />\n    <Compile Include=\"Search\\OrderBy.cs\" />\n    <Compile Include=\"Search\\OrderByAnnotation.cs\" />\n    <Compile Include=\"Search\\OrderByType.cs\" />\n    <Compile Include=\"Search\\SearchOptions.cs\" />\n    <Compile Include=\"Search\\SearchQuery.cs\" />\n    <Compile Include=\"Search\\SearchResults.cs\" />\n    <Compile Include=\"Search\\SearchTerm.cs\" />\n    <Compile Include=\"Search\\SortOrder.cs\" />\n    <Compile Include=\"Search\\TextSearchQuery.cs\" />\n    <Compile Include=\"Search\\UidSearchQuery.cs\" />\n    <Compile Include=\"Search\\UnarySearchQuery.cs\" />\n    <Compile Include=\"Security\\Ntlm\\BitConverterLE.cs\" />\n    <Compile Include=\"Security\\Ntlm\\DES.cs\" Condition=\" $(TargetFramework.StartsWith('netstandard1.')) \" />\n    <Compile Include=\"Security\\Ntlm\\HMACMD5.cs\" Condition=\" $(TargetFramework.StartsWith('netstandard1.')) \" />\n    <Compile Include=\"Security\\Ntlm\\MD4.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmAttribute.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmAttributeValuePair.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmAuthenticateMessage.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmChallengeMessage.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmFlags.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmMessageBase.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmNegotiateMessage.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmSingleHostData.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmTargetInfo.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmUtils.cs\" />\n    <Compile Include=\"Security\\Ntlm\\RC4.cs\" />\n    <Compile Include=\"Security\\AuthenticationException.cs\" />\n    <Compile Include=\"Security\\SaslException.cs\" />\n    <Compile Include=\"Security\\SaslMechanism.cs\" />\n    <Compile Include=\"Security\\SaslMechanismAnonymous.cs\" />\n    <Compile Include=\"Security\\SaslMechanismCramMd5.cs\" />\n    <Compile Include=\"Security\\SaslMechanismDigestMd5.cs\" />\n    <Compile Include=\"Security\\SaslMechanismGssapi.cs\" />\n    <Compile Include=\"Security\\SaslMechanismLogin.cs\" />\n    <Compile Include=\"Security\\SaslMechanismNegotiateBase.cs\" />\n    <Compile Include=\"Security\\SaslMechanismNtlm.cs\" />\n    <Compile Include=\"Security\\SaslMechanismNtlmNative.cs\" />\n    <Compile Include=\"Security\\SaslMechanismOAuth2.cs\" />\n    <Compile Include=\"Security\\SaslMechanismOAuthBearer.cs\" />\n    <Compile Include=\"Security\\SaslMechanismPlain.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramBase.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramSha1.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramSha256.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramSha512.cs\" />\n    <Compile Include=\"Security\\SecureSocketOptions.cs\" />\n    <Compile Include=\"Security\\SslHandshakeException.cs\" />\n    <Compile Include=\"AccessControl.cs\" />\n    <Compile Include=\"AccessControlList.cs\" />\n    <Compile Include=\"AccessRight.cs\" />\n    <Compile Include=\"AccessRights.cs\" />\n    <Compile Include=\"AlertEventArgs.cs\" />\n    <Compile Include=\"Annotation.cs\" />\n    <Compile Include=\"AnnotationAccess.cs\" />\n    <Compile Include=\"AnnotationAttribute.cs\" />\n    <Compile Include=\"AnnotationEntry.cs\" />\n    <Compile Include=\"AnnotationsChangedEventArgs.cs\" />\n    <Compile Include=\"AnnotationScope.cs\" />\n    <Compile Include=\"AppendRequest.cs\" />\n    <Compile Include=\"AuthenticatedEventArgs.cs\" />\n    <Compile Include=\"BodyPart.cs\" />\n    <Compile Include=\"BodyPartBasic.cs\" />\n    <Compile Include=\"BodyPartCollection.cs\" />\n    <Compile Include=\"BodyPartMessage.cs\" />\n    <Compile Include=\"BodyPartMultipart.cs\" />\n    <Compile Include=\"BodyPartText.cs\" />\n    <Compile Include=\"BodyPartVisitor.cs\" />\n    <Compile Include=\"ByteArrayBuilder.cs\" />\n    <Compile Include=\"CommandException.cs\" />\n    <Compile Include=\"CompressedStream.cs\" />\n    <Compile Include=\"ConnectedEventArgs.cs\" />\n    <Compile Include=\"DeliveryStatusNotification.cs\" />\n    <Compile Include=\"DeliveryStatusNotificationType.cs\" />\n    <Compile Include=\"DisconnectedEventArgs.cs\" />\n    <Compile Include=\"DuplexStream.cs\" />\n    <Compile Include=\"Envelope.cs\" />\n    <Compile Include=\"FetchRequest.cs\" />\n    <Compile Include=\"FolderAccess.cs\" />\n    <Compile Include=\"FolderAttributes.cs\" />\n    <Compile Include=\"FolderCreatedEventArgs.cs\" />\n    <Compile Include=\"FolderFeature.cs\" />\n    <Compile Include=\"FolderNamespace.cs\" />\n    <Compile Include=\"FolderNamespaceCollection.cs\" />\n    <Compile Include=\"FolderNotFoundException.cs\" />\n    <Compile Include=\"FolderNotOpenException.cs\" />\n    <Compile Include=\"FolderQuota.cs\" />\n    <Compile Include=\"FolderRenamedEventArgs.cs\" />\n    <Compile Include=\"HeaderSet.cs\" />\n    <Compile Include=\"IAuthenticationSecretDetector.cs\" />\n    <Compile Include=\"IAppendRequest.cs\" />\n    <Compile Include=\"IFetchRequest.cs\" />\n    <Compile Include=\"IMailFolder.cs\" />\n    <Compile Include=\"IMailFolderAppendExtensions.cs\" />\n    <Compile Include=\"IMailFolderFetchExtensions.cs\" />\n    <Compile Include=\"IMailFolderStoreExtensions.cs\" />\n    <Compile Include=\"IMailService.cs\" />\n    <Compile Include=\"IMailSpool.cs\" />\n    <Compile Include=\"IMailStore.cs\" />\n    <Compile Include=\"IMailTransport.cs\" />\n    <Compile Include=\"IMessageSummary.cs\" />\n    <Compile Include=\"IProtocolLogger.cs\" />\n    <Compile Include=\"IReplaceRequest.cs\" />\n    <Compile Include=\"IStoreFlagsRequest.cs\" />\n    <Compile Include=\"IStoreLabelsRequest.cs\" />\n    <Compile Include=\"IStoreRequest.cs\" />\n    <Compile Include=\"ITransferProgress.cs\" />\n    <Compile Include=\"MailFolder.cs\" />\n    <Compile Include=\"MailService.cs\" />\n    <Compile Include=\"MailSpool.cs\" />\n    <Compile Include=\"MailStore.cs\" />\n    <Compile Include=\"MailTransport.cs\" />\n    <Compile Include=\"MessageEventArgs.cs\" />\n    <Compile Include=\"MessageFlags.cs\" />\n    <Compile Include=\"MessageFlagsChangedEventArgs.cs\" />\n    <Compile Include=\"MessageLabelsChangedEventArgs.cs\" />\n    <Compile Include=\"MessageNotFoundException.cs\" />\n    <Compile Include=\"MessageSentEventArgs.cs\" />\n    <Compile Include=\"MessageSorter.cs\" />\n    <Compile Include=\"MessageSummary.cs\" />\n    <Compile Include=\"MessageSummaryFetchedEventArgs.cs\" />\n    <Compile Include=\"MessageSummaryItems.cs\" />\n    <Compile Include=\"MessagesVanishedEventArgs.cs\" />\n    <Compile Include=\"MessageThread.cs\" />\n    <Compile Include=\"MessageThreader.cs\" />\n    <Compile Include=\"Metadata.cs\" />\n    <Compile Include=\"MetadataChangedEventArgs.cs\" />\n    <Compile Include=\"MetadataCollection.cs\" />\n    <Compile Include=\"MetadataOptions.cs\" />\n    <Compile Include=\"MetadataTag.cs\" />\n    <Compile Include=\"ModSeqChangedEventArgs.cs\" />\n    <Compile Include=\"NullProtocolLogger.cs\" />\n    <Compile Include=\"PreviewOptions.cs\" />\n    <Compile Include=\"ProgressStream.cs\" />\n    <Compile Include=\"ProtocolException.cs\" />\n    <Compile Include=\"ProtocolLogger.cs\" />\n    <Compile Include=\"ReplaceRequest.cs\" />\n    <Compile Include=\"ServiceNotAuthenticatedException.cs\" />\n    <Compile Include=\"ServiceNotConnectedException.cs\" />\n    <Compile Include=\"SpecialFolder.cs\" />\n    <Compile Include=\"StatusItems.cs\" />\n    <Compile Include=\"StoreAction.cs\" />\n    <Compile Include=\"StoreFlagsRequest.cs\" />\n    <Compile Include=\"StoreLabelsRequest.cs\" />\n    <Compile Include=\"Telemetry.cs\" />\n    <Compile Include=\"TextEncodings.cs\" />\n    <Compile Include=\"ThreadingAlgorithm.cs\" />\n    <Compile Include=\"UniqueId.cs\" />\n    <Compile Include=\"UniqueIdMap.cs\" />\n    <Compile Include=\"UniqueIdRange.cs\" />\n    <Compile Include=\"UniqueIdSet.cs\" />\n    <Compile Include=\"UriExtensions.cs\" />\n    <Compile Include=\"WebAlertEventArgs.cs\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "MailKit/MailKitLite.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>An Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices.</Description>\n    <AssemblyTitle>MailKit</AssemblyTitle>\n    <VersionPrefix>4.15.1</VersionPrefix>\n    <Authors>Jeffrey Stedfast</Authors>\n    <LangVersion>10</LangVersion>\n    <TargetFrameworks>netstandard2.0;netstandard2.1;net462;net47;net48;net8.0;net10.0</TargetFrameworks>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n    <AssemblyName>MailKitLite</AssemblyName>\n    <PackageId>MailKitLite</PackageId>\n    <PackageTags>smtp;pop3;imap;mime;security;dkim;smime;s/mime;openpgp;pgp;mbox;mail;email;parser;tnef</PackageTags>\n    <PackageProjectUrl>https://github.com/jstedfast/MailKit</PackageProjectUrl>\n    <PackageLicenseUrl>https://github.com/jstedfast/MailKit/blob/master/License.md</PackageLicenseUrl>\n    <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>\n    <GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>\n    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>\n    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>\n    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>\n    <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>\n    <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>\n    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>\n    <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>\n    <RootNamespace>MailKit</RootNamespace>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n    <AssemblyOriginatorKeyFile>mailkit.snk</AssemblyOriginatorKeyFile>\n    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n    <DefineConstants>$(DefineConstants);MAILKIT_LITE</DefineConstants>\n    <SignAssembly>true</SignAssembly>\n    <DebugSymbols>true</DebugSymbols>\n    <NoWarn>1701;1702;CA1068;CA1510;CA1512;CA1513;CA1835;CA2012;IDE0016;IDE0056;IDE0057;IDE0060;IDE0063;IDE0066;IDE0090;IDE0180;IDE0251</NoWarn>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\n    <DebugType>full</DebugType>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\n    <DebugType>portable</DebugType>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' And $(TargetFramework.StartsWith('net4')) \">\n    <DebugType>full</DebugType>\n  </PropertyGroup>\n\n  <!-- Enable serializable support for net4.x -->\n  <PropertyGroup Condition=\" $(TargetFramework.StartsWith('net4')) \">\n    <DefineConstants>$(DefineConstants);SERIALIZABLE</DefineConstants>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <IsAotCompatible Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))\">true</IsAotCompatible>\n  </PropertyGroup>\n\n  <ItemGroup Condition=\" $(TargetFramework.StartsWith('net4')) Or '$(TargetFramework)' == 'netstandard2.0' \">\n    <PackageReference Include=\"System.Threading.Tasks.Extensions\" Version=\"4.6.0\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" $(TargetFramework.StartsWith('net4')) Or $(TargetFramework.StartsWith('netstandard')) Or '$(TargetFramework)' == 'net8.0' \">\n    <PackageReference Include=\"System.Formats.Asn1\" Version=\"8.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net10.0' \">\n    <PackageReference Include=\"System.Formats.Asn1\" Version=\"10.0.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\submodules\\MimeKit\\MimeKit\\MimeKitLite.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"Net\\SelectMode.cs;Security\\KeyedHashAlgorithm.cs;Security\\RandomNumberGenerator.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Include=\"Net\\Imap\\AsyncImapClient.cs\" />\n    <Compile Include=\"Net\\Imap\\IImapClient.cs\" />\n    <Compile Include=\"Net\\Imap\\IImapFolder.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapAuthenticationSecretDetector.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCallbacks.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCapabilities.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapClient.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommand.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommandException.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommandResponse.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapCommandStatus.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapEncoding.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapEngine.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapEventGroup.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolder.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderAnnotations.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderConstructorArgs.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderFetch.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderFlags.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapFolderSearch.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapIdleContext.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapImplementation.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapLiteral.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapProtocolException.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapResponseCode.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapSearchQueryOptimizer.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapStream.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapToken.cs\" />\n    <Compile Include=\"Net\\Imap\\ImapUtils.cs\" />\n    <Compile Include=\"Net\\Pop3\\AsyncPop3Client.cs\" />\n    <Compile Include=\"Net\\Pop3\\IPop3Client.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3AuthenticationSecretDetector.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Capabilities.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Client.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Command.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3CommandException.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Engine.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Language.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3ProtocolException.cs\" />\n    <Compile Include=\"Net\\Pop3\\Pop3Stream.cs\" />\n    <Compile Include=\"Net\\Proxy\\HttpProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\HttpsProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\IProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\ProxyClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\ProxyProtocolException.cs\" />\n    <Compile Include=\"Net\\Proxy\\Socks4aClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\Socks4Client.cs\" />\n    <Compile Include=\"Net\\Proxy\\Socks5Client.cs\" />\n    <Compile Include=\"Net\\Proxy\\SocksClient.cs\" />\n    <Compile Include=\"Net\\Proxy\\WebProxyClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\AsyncSmtpClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\ISmtpClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpAuthenticationSecretDetector.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpCapabilities.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpClient.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpCommandException.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpDataFilter.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpErrorCode.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpProtocolException.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpResponse.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpStatusCode.cs\" />\n    <Compile Include=\"Net\\Smtp\\SmtpStream.cs\" />\n    <Compile Include=\"Net\\ClientMetrics.cs\" />\n    <Compile Include=\"Net\\IChannelBindingContext.cs\" />\n    <Compile Include=\"Net\\NetworkOperation.cs\" />\n    <Compile Include=\"Net\\NetworkStream.cs\" />\n    <Compile Include=\"Net\\SocketMetrics.cs\" />\n    <Compile Include=\"Net\\SocketUtils.cs\" />\n    <Compile Include=\"Net\\SslStream.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Search\\AnnotationSearchQuery.cs\" />\n    <Compile Include=\"Search\\BinarySearchQuery.cs\" />\n    <Compile Include=\"Search\\DateSearchQuery.cs\" />\n    <Compile Include=\"Search\\FilterSearchQuery.cs\" />\n    <Compile Include=\"Search\\HeaderSearchQuery.cs\" />\n    <Compile Include=\"Search\\ISearchQueryOptimizer.cs\" />\n    <Compile Include=\"Search\\NumericSearchQuery.cs\" />\n    <Compile Include=\"Search\\OrderBy.cs\" />\n    <Compile Include=\"Search\\OrderByAnnotation.cs\" />\n    <Compile Include=\"Search\\OrderByType.cs\" />\n    <Compile Include=\"Search\\SearchOptions.cs\" />\n    <Compile Include=\"Search\\SearchQuery.cs\" />\n    <Compile Include=\"Search\\SearchResults.cs\" />\n    <Compile Include=\"Search\\SearchTerm.cs\" />\n    <Compile Include=\"Search\\SortOrder.cs\" />\n    <Compile Include=\"Search\\TextSearchQuery.cs\" />\n    <Compile Include=\"Search\\UidSearchQuery.cs\" />\n    <Compile Include=\"Search\\UnarySearchQuery.cs\" />\n    <Compile Include=\"Security\\Ntlm\\BitConverterLE.cs\" />\n    <Compile Include=\"Security\\Ntlm\\DES.cs\" Condition=\" $(TargetFramework.StartsWith('netstandard1.')) \" />\n    <Compile Include=\"Security\\Ntlm\\HMACMD5.cs\" Condition=\" $(TargetFramework.StartsWith('netstandard1.')) \" />\n    <Compile Include=\"Security\\Ntlm\\MD4.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmAttribute.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmAttributeValuePair.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmAuthenticateMessage.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmChallengeMessage.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmFlags.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmMessageBase.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmNegotiateMessage.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmSingleHostData.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmTargetInfo.cs\" />\n    <Compile Include=\"Security\\Ntlm\\NtlmUtils.cs\" />\n    <Compile Include=\"Security\\Ntlm\\RC4.cs\" />\n    <Compile Include=\"Security\\AuthenticationException.cs\" />\n    <Compile Include=\"Security\\SaslException.cs\" />\n    <Compile Include=\"Security\\SaslMechanism.cs\" />\n    <Compile Include=\"Security\\SaslMechanismAnonymous.cs\" />\n    <Compile Include=\"Security\\SaslMechanismCramMd5.cs\" />\n    <Compile Include=\"Security\\SaslMechanismDigestMd5.cs\" />\n    <Compile Include=\"Security\\SaslMechanismGssapi.cs\" />\n    <Compile Include=\"Security\\SaslMechanismLogin.cs\" />\n    <Compile Include=\"Security\\SaslMechanismNegotiateBase.cs\" />\n    <Compile Include=\"Security\\SaslMechanismNtlm.cs\" />\n    <Compile Include=\"Security\\SaslMechanismNtlmNative.cs\" />\n    <Compile Include=\"Security\\SaslMechanismOAuth2.cs\" />\n    <Compile Include=\"Security\\SaslMechanismOAuthBearer.cs\" />\n    <Compile Include=\"Security\\SaslMechanismPlain.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramBase.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramSha1.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramSha256.cs\" />\n    <Compile Include=\"Security\\SaslMechanismScramSha512.cs\" />\n    <Compile Include=\"Security\\SecureSocketOptions.cs\" />\n    <Compile Include=\"Security\\SslHandshakeException.cs\" />\n    <Compile Include=\"AccessControl.cs\" />\n    <Compile Include=\"AccessControlList.cs\" />\n    <Compile Include=\"AccessRight.cs\" />\n    <Compile Include=\"AccessRights.cs\" />\n    <Compile Include=\"AlertEventArgs.cs\" />\n    <Compile Include=\"Annotation.cs\" />\n    <Compile Include=\"AnnotationAccess.cs\" />\n    <Compile Include=\"AnnotationAttribute.cs\" />\n    <Compile Include=\"AnnotationEntry.cs\" />\n    <Compile Include=\"AnnotationsChangedEventArgs.cs\" />\n    <Compile Include=\"AnnotationScope.cs\" />\n    <Compile Include=\"AppendRequest.cs\" />\n    <Compile Include=\"AuthenticatedEventArgs.cs\" />\n    <Compile Include=\"BodyPart.cs\" />\n    <Compile Include=\"BodyPartBasic.cs\" />\n    <Compile Include=\"BodyPartCollection.cs\" />\n    <Compile Include=\"BodyPartMessage.cs\" />\n    <Compile Include=\"BodyPartMultipart.cs\" />\n    <Compile Include=\"BodyPartText.cs\" />\n    <Compile Include=\"BodyPartVisitor.cs\" />\n    <Compile Include=\"ByteArrayBuilder.cs\" />\n    <Compile Include=\"CommandException.cs\" />\n    <Compile Include=\"ConnectedEventArgs.cs\" />\n    <Compile Include=\"DeliveryStatusNotification.cs\" />\n    <Compile Include=\"DeliveryStatusNotificationType.cs\" />\n    <Compile Include=\"DisconnectedEventArgs.cs\" />\n    <Compile Include=\"Envelope.cs\" />\n    <Compile Include=\"FetchRequest.cs\" />\n    <Compile Include=\"FolderAccess.cs\" />\n    <Compile Include=\"FolderAttributes.cs\" />\n    <Compile Include=\"FolderCreatedEventArgs.cs\" />\n    <Compile Include=\"FolderFeature.cs\" />\n    <Compile Include=\"FolderNamespace.cs\" />\n    <Compile Include=\"FolderNamespaceCollection.cs\" />\n    <Compile Include=\"FolderNotFoundException.cs\" />\n    <Compile Include=\"FolderNotOpenException.cs\" />\n    <Compile Include=\"FolderQuota.cs\" />\n    <Compile Include=\"FolderRenamedEventArgs.cs\" />\n    <Compile Include=\"HeaderSet.cs\" />\n    <Compile Include=\"IAuthenticationSecretDetector.cs\" />\n    <Compile Include=\"IAppendRequest.cs\" />\n    <Compile Include=\"IFetchRequest.cs\" />\n    <Compile Include=\"IMailFolder.cs\" />\n    <Compile Include=\"IMailFolderAppendExtensions.cs\" />\n    <Compile Include=\"IMailFolderFetchExtensions.cs\" />\n    <Compile Include=\"IMailFolderStoreExtensions.cs\" />\n    <Compile Include=\"IMailService.cs\" />\n    <Compile Include=\"IMailSpool.cs\" />\n    <Compile Include=\"IMailStore.cs\" />\n    <Compile Include=\"IMailTransport.cs\" />\n    <Compile Include=\"IMessageSummary.cs\" />\n    <Compile Include=\"IProtocolLogger.cs\" />\n    <Compile Include=\"IReplaceRequest.cs\" />\n    <Compile Include=\"IStoreFlagsRequest.cs\" />\n    <Compile Include=\"IStoreLabelsRequest.cs\" />\n    <Compile Include=\"IStoreRequest.cs\" />\n    <Compile Include=\"ITransferProgress.cs\" />\n    <Compile Include=\"MailFolder.cs\" />\n    <Compile Include=\"MailService.cs\" />\n    <Compile Include=\"MailSpool.cs\" />\n    <Compile Include=\"MailStore.cs\" />\n    <Compile Include=\"MailTransport.cs\" />\n    <Compile Include=\"MessageEventArgs.cs\" />\n    <Compile Include=\"MessageFlags.cs\" />\n    <Compile Include=\"MessageFlagsChangedEventArgs.cs\" />\n    <Compile Include=\"MessageLabelsChangedEventArgs.cs\" />\n    <Compile Include=\"MessageNotFoundException.cs\" />\n    <Compile Include=\"MessageSentEventArgs.cs\" />\n    <Compile Include=\"MessageSorter.cs\" />\n    <Compile Include=\"MessageSummary.cs\" />\n    <Compile Include=\"MessageSummaryFetchedEventArgs.cs\" />\n    <Compile Include=\"MessageSummaryItems.cs\" />\n    <Compile Include=\"MessagesVanishedEventArgs.cs\" />\n    <Compile Include=\"MessageThread.cs\" />\n    <Compile Include=\"MessageThreader.cs\" />\n    <Compile Include=\"Metadata.cs\" />\n    <Compile Include=\"MetadataChangedEventArgs.cs\" />\n    <Compile Include=\"MetadataCollection.cs\" />\n    <Compile Include=\"MetadataOptions.cs\" />\n    <Compile Include=\"MetadataTag.cs\" />\n    <Compile Include=\"ModSeqChangedEventArgs.cs\" />\n    <Compile Include=\"NullProtocolLogger.cs\" />\n    <Compile Include=\"PreviewOptions.cs\" />\n    <Compile Include=\"ProgressStream.cs\" />\n    <Compile Include=\"ProtocolException.cs\" />\n    <Compile Include=\"ProtocolLogger.cs\" />\n    <Compile Include=\"ReplaceRequest.cs\" />\n    <Compile Include=\"ServiceNotAuthenticatedException.cs\" />\n    <Compile Include=\"ServiceNotConnectedException.cs\" />\n    <Compile Include=\"SpecialFolder.cs\" />\n    <Compile Include=\"StatusItems.cs\" />\n    <Compile Include=\"StoreAction.cs\" />\n    <Compile Include=\"StoreFlagsRequest.cs\" />\n    <Compile Include=\"StoreLabelsRequest.cs\" />\n    <Compile Include=\"Telemetry.cs\" />\n    <Compile Include=\"TextEncodings.cs\" />\n    <Compile Include=\"ThreadingAlgorithm.cs\" />\n    <Compile Include=\"UniqueId.cs\" />\n    <Compile Include=\"UniqueIdMap.cs\" />\n    <Compile Include=\"UniqueIdRange.cs\" />\n    <Compile Include=\"UniqueIdSet.cs\" />\n    <Compile Include=\"UriExtensions.cs\" />\n    <Compile Include=\"WebAlertEventArgs.cs\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "MailKit/MailService.cs",
    "content": "﻿//\n// MailService.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MailKit.Net;\nusing MailKit.Net.Proxy;\nusing MailKit.Security;\n\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An abstract mail service implementation.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract mail service implementation.\n\t/// </remarks>\n\tpublic abstract class MailService : IMailService\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailService\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailService\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected MailService (IProtocolLogger protocolLogger)\n\t\t{\n\t\t\tif (protocolLogger == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (protocolLogger));\n\n#if NETFRAMEWORK\n\t\t\t// Default the SslProtocols value to whatever the system default is (as defined by ServicePointManager.SecurityProtocol).\n\t\t\t//\n\t\t\t// See discussion in https://github.com/jstedfast/MailKit/issues/1952 for details.\n\t\t\tSslProtocols = (SslProtocols) ServicePointManager.SecurityProtocol;\n#else\n\t\t\t// Default the SslProtocols value to `None` which allows the operating system to choose the best\n\t\t\t// protocol to use and to block protocols that are not secure.\n\t\t\tSslProtocols = SslProtocols.None;\n#endif\n\t\t\tCheckCertificateRevocation = true;\n\t\t\tProtocolLogger = protocolLogger;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailService\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailService\"/> class.\n\t\t/// </remarks>\n\t\tprotected MailService () : this (new NullProtocolLogger ())\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases unmanaged resources and performs other cleanup operations before the\n\t\t/// <see cref=\"MailService\"/> is reclaimed by garbage collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases unmanaged resources and performs other cleanup operations before the\n\t\t/// <see cref=\"MailService\"/> is reclaimed by garbage collection.\n\t\t/// </remarks>\n\t\t~MailService ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get an object that can be used to synchronize access to the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets an object that can be used to synchronize access to the service.</para>\n\t\t/// </remarks>\n\t\t/// <value>The sync root.</value>\n\t\tpublic abstract object SyncRoot {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the protocol supported by the message service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the protocol supported by the message service.\n\t\t/// </remarks>\n\t\t/// <value>The protocol.</value>\n\t\tprotected abstract string Protocol {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the protocol logger.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the protocol logger.\n\t\t/// </remarks>\n\t\t/// <value>The protocol logger.</value>\n\t\tpublic IProtocolLogger ProtocolLogger {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the set of enabled SSL and/or TLS protocol versions that the client is allowed to use.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the enabled SSL and/or TLS protocol versions that the client is allowed to use.</para>\n\t\t/// <para>By default, MailKit initializes this value to <see cref=\"SslProtocols.None\"/> which allows the\n\t\t/// operating system to choose the best protocol to use and to block protocols that are not secure.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_MailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <value>The SSL and TLS protocol versions that are enabled.</value>\n\t\tpublic SslProtocols SslProtocols {\n\t\t\tget; set;\n\t\t}\n\n#if NET5_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Get or set the cipher suites allowed to be used when negotiating an SSL or TLS connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Specifies the cipher suites allowed to be used when negotiating an SSL or TLS connection.\n\t\t/// When set to <see langword=\"null\" />, the operating system default is used. Use extreme caution when\n\t\t/// changing this setting.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_MailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <value>The cipher algorithms allowed for use when negotiating SSL or TLS encryption.</value>\n\t\tpublic CipherSuitesPolicy? SslCipherSuitesPolicy {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher suite.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher suite once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher suite.</value>\n\t\tpublic abstract TlsCipherSuite? SslCipherSuite {\n\t\t\tget;\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Get or set the client SSL certificates.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Some servers may require the client SSL certificates in order\n\t\t/// to allow the user to connect.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_MailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <value>The client SSL certificates.</value>\n\t\tpublic X509CertificateCollection? ClientCertificates {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether connecting via SSL/TLS should check certificate revocation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether connecting via SSL/TLS should check certificate revocation.</para>\n\t\t/// <para>Normally, the value of this property should be set to <see langword=\"true\" /> (the default) for security\n\t\t/// reasons, but there are times when it may be necessary to set it to <see langword=\"false\" />.</para>\n\t\t/// <para>For example, most Certificate Authorities are probably pretty good at keeping their CRL and/or\n\t\t/// OCSP servers up 24/7, but occasionally they do go down or are otherwise unreachable due to other\n\t\t/// network problems between the client and the Certificate Authority. When this happens, it becomes\n\t\t/// impossible to check the revocation status of one or more of the certificates in the chain\n\t\t/// resulting in an <see cref=\"SslHandshakeException\"/> being thrown in the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> method. If this becomes a problem,\n\t\t/// it may become desirable to set <see cref=\"CheckCertificateRevocation\"/> to <see langword=\"false\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if certificate revocation should be checked; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool CheckCertificateRevocation {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a callback function to validate the server certificate.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a callback function to validate the server certificate.</para>\n\t\t/// <note type=\"note\">This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> or\n\t\t/// <a href=\"Overload_MailKit_MailService_ConnectAsync.htm\">ConnectAsync</a> methods.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SslCertificateValidation.cs\"/>\n\t\t/// </example>\n\t\t/// <value>The server certificate validation callback function.</value>\n\t\tpublic RemoteCertificateValidationCallback? ServerCertificateValidationCallback {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the local IP end point to use when connecting to the remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the local IP end point to use when connecting to the remote host.\n\t\t/// </remarks>\n\t\t/// <value>The local IP end point or <see langword=\"null\" /> to use the default end point.</value>\n\t\tpublic IPEndPoint? LocalEndPoint {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the proxy client to use when connecting to a remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the proxy client to use when connecting to a remote host via any of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t\t/// </example>\n\t\t/// <value>The proxy client.</value>\n\t\tpublic IProxyClient? ProxyClient {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the authentication mechanisms supported by the mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authentication mechanisms are queried as part of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a> method.\n\t\t/// </remarks>\n\t\t/// <value>The authentication mechanisms.</value>\n\t\tpublic abstract HashSet<string> AuthenticationMechanisms {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the client is currently connected to an mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t///<para>The <see cref=\"IsConnected\"/> state is set to <see langword=\"true\" /> immediately after\n\t\t/// one of the <a href=\"Overload_MailKit_MailService_Connect.htm\">Connect</a>\n\t\t/// methods succeeds and is not set back to <see langword=\"false\" /> until either the client\n\t\t/// is disconnected via <see cref=\"Disconnect(bool,CancellationToken)\"/> or until a\n\t\t/// <see cref=\"ProtocolException\"/> is thrown while attempting to read or write to\n\t\t/// the underlying network socket.</para>\n\t\t/// <para>When an <see cref=\"ProtocolException\"/> is caught, the connection state of the\n\t\t/// <see cref=\"MailService\"/> should be checked before continuing.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool IsConnected {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool IsSecure {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is encrypted; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool IsEncrypted {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is signed; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool IsSigned {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the negotiated SSL or TLS protocol version once an SSL or TLS connection has been made.</para>\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS protocol version.</value>\n\t\tpublic abstract SslProtocols SslProtocol {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic abstract CipherAlgorithmType? SslCipherAlgorithm {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic abstract int? SslCipherStrength {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic abstract HashAlgorithmType? SslHashAlgorithm {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic abstract int? SslHashStrength {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic abstract ExchangeAlgorithmType? SslKeyExchangeAlgorithm {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic abstract int? SslKeyExchangeStrength {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently authenticated with the mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the client is currently authenticated with the mail server.</para>\n\t\t/// <para>To authenticate with the mail server, use one of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Authenticate.htm\">Authenticate</a> methods\n\t\t/// or any of the Async alternatives.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is authenticated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool IsAuthenticated {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the timeout for network streaming operations, in milliseconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying socket stream's <see cref=\"System.IO.Stream.ReadTimeout\"/>\n\t\t/// and <see cref=\"System.IO.Stream.WriteTimeout\"/> values.\n\t\t/// </remarks>\n\t\t/// <value>The timeout in milliseconds.</value>\n\t\tpublic abstract int Timeout {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The default server certificate validation callback used when connecting via SSL or TLS.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The default server certificate validation callback only succeeds if there are no SSL/TLS certificate validation errors.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the certificate is deemed valid; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"sender\">The object that is connecting via SSL or TLS.</param>\n\t\t/// <param name=\"certificate\">The server's SSL certificate.</param>\n\t\t/// <param name=\"chain\">The server's SSL certificate chain.</param>\n\t\t/// <param name=\"sslPolicyErrors\">The SSL policy errors.</param>\n\t\tprotected static bool DefaultServerCertificateValidationCallback (object? sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\treturn sslPolicyErrors == SslPolicyErrors.None;\n\t\t}\n\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t/// <summary>\n\t\t/// Gets the SSL/TLS client authentication options for use with .NET5's SslStream.AuthenticateAsClient() API.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the SSL/TLS client authentication options for use with .NET5's SslStream.AuthenticateAsClient() API.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The target host that the client is connected to.</param>\n\t\t/// <param name=\"remoteCertificateValidationCallback\">The remote certificate validation callback.</param>\n\t\t/// <returns>The client SSL/TLS authentication options.</returns>\n\t\tprotected virtual SslClientAuthenticationOptions GetSslClientAuthenticationOptions (string host, RemoteCertificateValidationCallback remoteCertificateValidationCallback)\n\t\t{\n\t\t\treturn new SslClientAuthenticationOptions {\n\t\t\t\tCertificateRevocationCheckMode = CheckCertificateRevocation ? X509RevocationMode.Online : X509RevocationMode.NoCheck,\n\t\t\t\t// Note: Not all servers support Application Protocols, so this will break in some cases.\n\t\t\t\t//ApplicationProtocols = new List<SslApplicationProtocol> { new SslApplicationProtocol (Protocol) },\n\t\t\t\tRemoteCertificateValidationCallback = remoteCertificateValidationCallback,\n#if NET5_0_OR_GREATER\n\t\t\t\tCipherSuitesPolicy = SslCipherSuitesPolicy,\n#endif\n\t\t\t\tClientCertificates = ClientCertificates,\n\t\t\t\tEnabledSslProtocols = SslProtocols,\n\t\t\t\tTargetHost = host\n\t\t\t};\n\t\t}\n#endif\n\n\t\tinternal Stream ConnectNetwork (string host, int port, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (ProxyClient != null) {\n\t\t\t\tProxyClient.LocalEndPoint = LocalEndPoint;\n\n\t\t\t\treturn ProxyClient.Connect (host, port, Timeout, cancellationToken);\n\t\t\t}\n\n\t\t\tvar socket = SocketUtils.Connect (host, port, LocalEndPoint, Timeout, cancellationToken);\n\n\t\t\treturn new NetworkStream (socket, true);\n\t\t}\n\n\t\tinternal async Task<Stream> ConnectNetworkAsync (string host, int port, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (ProxyClient != null) {\n\t\t\t\tProxyClient.LocalEndPoint = LocalEndPoint;\n\n\t\t\t\treturn await ProxyClient.ConnectAsync (host, port, Timeout, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tvar socket = await SocketUtils.ConnectAsync (host, port, LocalEndPoint, Timeout, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn new NetworkStream (socket, true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Establishes a connection to the specified mail server.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void Connect (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously establishes a connection to the specified mail server.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task ConnectAsync (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establish a connection to the specified mail server using the provided socket.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic abstract void Connect (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server using the provided socket.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic abstract Task ConnectAsync (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establish a connection to the specified mail server using the provided stream.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic abstract void Connect (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server using the provided stream.</para>\n\t\t/// <para>If a successful connection is made, the <see cref=\"AuthenticationMechanisms\"/>\n\t\t/// property will be populated.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"IMailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic abstract Task ConnectAsync (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default);\n\n\t\tstatic bool IsAny (string value, params string[] anyOf)\n\t\t{\n\t\t\tforeach (var item in anyOf) {\n\t\t\t\tif (value.Equals (item, StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tinternal SecureSocketOptions GetSecureSocketOptions (Uri uri)\n\t\t{\n\t\t\tvar query = uri.ParsedQuery ();\n\t\t\tvar protocol = uri.Scheme;\n\n\t\t\t// Note: early versions of MailKit used \"pop3\" and \"pop3s\"\n\t\t\tif (protocol.Equals (\"pop3s\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tprotocol = \"pops\";\n\t\t\telse if (protocol.Equals (\"pop3\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tprotocol = \"pop\";\n\n\t\t\tif (protocol.Equals (Protocol + \"s\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn SecureSocketOptions.SslOnConnect;\n\n\t\t\tif (!protocol.Equals (Protocol, StringComparison.OrdinalIgnoreCase))\n\t\t\t\tthrow new ArgumentException (\"Unknown URI scheme.\", nameof (uri));\n\n\t\t\tif (query.TryGetValue (\"starttls\", out string? value)) {\n\t\t\t\tif (IsAny (value, \"always\", \"true\", \"yes\"))\n\t\t\t\t\treturn SecureSocketOptions.StartTls;\n\n\t\t\t\tif (IsAny (value, \"never\", \"false\", \"no\"))\n\t\t\t\t\treturn SecureSocketOptions.None;\n\n\t\t\t\treturn SecureSocketOptions.StartTlsWhenAvailable;\n\t\t\t}\n\n\t\t\treturn SecureSocketOptions.StartTlsWhenAvailable;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Establishes a connection to the specified mail server.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessageUri\"/>\n\t\t/// </example>\n\t\t/// <param name=\"uri\">The server URI.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// The <paramref name=\"uri\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"uri\"/> is not an absolute URI.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Connect (Uri uri, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (uri == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uri));\n\n\t\t\tif (!uri.IsAbsoluteUri)\n\t\t\t\tthrow new ArgumentException (\"The uri must be absolute.\", nameof (uri));\n\n\t\t\tvar options = GetSecureSocketOptions (uri);\n\n\t\t\tConnect (uri.Host, uri.Port < 0 ? 0 : uri.Port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously establishes a connection to the specified mail server.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uri\">The server URI.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// The <paramref name=\"uri\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"uri\"/> is not an absolute URI.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic Task ConnectAsync (Uri uri, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (uri == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uri));\n\n\t\t\tif (!uri.IsAbsoluteUri)\n\t\t\t\tthrow new ArgumentException (\"The uri must be absolute.\", nameof (uri));\n\n\t\t\tvar options = GetSecureSocketOptions (uri);\n\n\t\t\treturn ConnectAsync (uri.Host, uri.Port < 0 ? 0 : uri.Port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified mail server.</para>\n\t\t/// <note type=\"note\">\n\t\t/// <para>The <paramref name=\"useSsl\"/> argument only controls whether or\n\t\t/// not the client makes an SSL-wrapped connection. In other words, even if the\n\t\t/// <paramref name=\"useSsl\"/> parameter is <see langword=\"false\" />, SSL/TLS may still be used if\n\t\t/// the mail server supports the STARTTLS extension.</para>\n\t\t/// <para>To disable all use of SSL/TLS, use the\n\t\t/// <see cref=\"Connect(string,int,MailKit.Security.SecureSocketOptions,System.Threading.CancellationToken)\"/>\n\t\t/// overload with a value of\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.None\">SecureSocketOptions.None</see>\n\t\t/// instead.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"useSsl\"><see langword=\"true\" /> if the client should make an SSL-wrapped connection to the server; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// The <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is out of range (<value>0</value> to <value>65535</value>, inclusive).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Connect (string host, int port, bool useSsl, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The host name cannot be empty.\", nameof (host));\n\n\t\t\tif (port < 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\n\t\t\tConnect (host, port, useSsl ? SecureSocketOptions.SslOnConnect : SecureSocketOptions.StartTlsWhenAvailable, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified mail server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously establishes a connection to the specified mail server.</para>\n\t\t/// <note type=\"note\">\n\t\t/// <para>The <paramref name=\"useSsl\"/> argument only controls whether or\n\t\t/// not the client makes an SSL-wrapped connection. In other words, even if the\n\t\t/// <paramref name=\"useSsl\"/> parameter is <see langword=\"false\" />, SSL/TLS may still be used if\n\t\t/// the mail server supports the STARTTLS extension.</para>\n\t\t/// <para>To disable all use of SSL/TLS, use the\n\t\t/// <see cref=\"ConnectAsync(string,int,MailKit.Security.SecureSocketOptions,System.Threading.CancellationToken)\"/>\n\t\t/// overload with a value of\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.None\">SecureSocketOptions.None</see>\n\t\t/// instead.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"useSsl\"><see langword=\"true\" /> if the client should make an SSL-wrapped connection to the server; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// The <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is out of range (<value>0</value> to <value>65535</value>, inclusive).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic Task ConnectAsync (string host, int port, bool useSsl, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The host name cannot be empty.\", nameof (host));\n\n\t\t\tif (port < 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\n\t\t\treturn ConnectAsync (host, port, useSsl ? SecureSocketOptions.SslOnConnect : SecureSocketOptions.StartTlsWhenAvailable, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void Authenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task AuthenticateAsync (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Authenticate (ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tAuthenticate (Encoding.UTF8, credentials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic Task AuthenticateAsync (ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn AuthenticateAsync (Encoding.UTF8, credentials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Authenticate (Encoding encoding, string userName, string password, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tif (userName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (userName));\n\n\t\t\tif (password == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (password));\n\n\t\t\tvar credentials = new NetworkCredential (userName, password);\n\n\t\t\tAuthenticate (encoding, credentials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic Task AuthenticateAsync (Encoding encoding, string userName, string password, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tif (userName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (userName));\n\n\t\t\tif (password == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (password));\n\n\t\t\tvar credentials = new NetworkCredential (userName, password);\n\n\t\t\treturn AuthenticateAsync (encoding, credentials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t///<para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Authenticate (string userName, string password, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tAuthenticate (Encoding.UTF8, userName, password, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified user name and password.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including any\n\t\t/// OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the default login command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic Task AuthenticateAsync (string userName, string password, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn AuthenticateAsync (Encoding.UTF8, userName, password, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void Authenticate (SaslMechanism mechanism, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailService\"/> is not connected or is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task AuthenticateAsync (SaslMechanism mechanism, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a logout/quit command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a logout/quit command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic abstract void Disconnect (bool quit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a logout/quit command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a logout/quit command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic abstract Task DisconnectAsync (bool quit, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Ping the mail server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Mail servers, if left idle for too long, will automatically drop the connection.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>The <see cref=\"MailService\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"MailService\"/> is not authenticated.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic abstract void NoOp (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously ping the mail server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Mail servers, if left idle for too long, will automatically drop the connection.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailService\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>The <see cref=\"MailService\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"MailService\"/> is not authenticated.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command was rejected by the mail server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic abstract Task NoOpAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Occurs when the client has been successfully connected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Connected\"/> event is raised when the client\n\t\t/// successfully connects to the mail server.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<ConnectedEventArgs>? Connected;\n\n\t\t/// <summary>\n\t\t/// Raise the connected event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the connected event.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The name of the host that the client connected to.</param>\n\t\t/// <param name=\"port\">The port that the client connected to on the remote host.</param>\n\t\t/// <param name=\"options\">The SSL/TLS options that were used when connecting.</param>\n\t\tprotected virtual void OnConnected (string host, int port, SecureSocketOptions options)\n\t\t{\n\t\t\tConnected?.Invoke (this, new ConnectedEventArgs (host, port, options));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the client gets disconnected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Disconnected\"/> event is raised whenever the client\n\t\t/// gets disconnected.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<DisconnectedEventArgs>? Disconnected;\n\n\t\t/// <summary>\n\t\t/// Raise the disconnected event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the disconnected event.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The name of the host that the client was connected to.</param>\n\t\t/// <param name=\"port\">The port that the client was connected to on the remote host.</param>\n\t\t/// <param name=\"options\">The SSL/TLS options that were used by the client.</param>\n\t\t/// <param name=\"requested\"><see langword=\"true\" /> if the disconnect was explicitly requested; otherwise, <see langword=\"false\" />.</param>\n\t\tprotected virtual void OnDisconnected (string host, int port, SecureSocketOptions options, bool requested)\n\t\t{\n\t\t\tDisconnected?.Invoke (this, new DisconnectedEventArgs (host, port, options, requested));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the client has been successfully authenticated.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Authenticated\"/> event is raised whenever the client\n\t\t/// has been authenticated.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<AuthenticatedEventArgs>? Authenticated;\n\n\t\t/// <summary>\n\t\t/// Raise the authenticated event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the authenticated event.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The notification sent by the server when the client successfully authenticates.</param>\n\t\tprotected virtual void OnAuthenticated (string message)\n\t\t{\n\t\t\tAuthenticated?.Invoke (this, new AuthenticatedEventArgs (message));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"MailService\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"MailService\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected virtual void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing)\n\t\t\t\tProtocolLogger.Dispose ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases all resource used by the <see cref=\"MailService\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>Call <see cref=\"Dispose()\"/> when you are finished using the <see cref=\"MailService\"/>. The\n\t\t/// <see cref=\"Dispose()\"/> method leaves the <see cref=\"MailService\"/> in an unusable state. After\n\t\t/// calling <see cref=\"Dispose()\"/>, you must release all references to the <see cref=\"MailService\"/> so\n\t\t/// the garbage collector can reclaim the memory that the <see cref=\"MailService\"/> was occupying.</remarks>\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tDispose (true);\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MailSpool.cs",
    "content": "﻿//\n// MailSpool.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Collections;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An abstract mail spool implementation.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract mail spool implementation.\n\t/// </remarks>\n\tpublic abstract class MailSpool : MailService, IMailSpool\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailSpool\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailSpool\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected MailSpool (IProtocolLogger protocolLogger) : base (protocolLogger)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of messages available in the message spool.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of messages available in the message spool.</para>\n\t\t/// <para>Once authenticated, the <see cref=\"Count\"/> property will be set\n\t\t/// to the number of available messages in the spool.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <value>The message count.</value>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic abstract int Count {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the service supports referencing messages by UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Not all servers support referencing messages by UID, so this property should\n\t\t/// be checked before using <see cref=\"GetMessageUid(int, CancellationToken)\"/>\n\t\t/// and <see cref=\"GetMessageUids(CancellationToken)\"/>.</para>\n\t\t/// <para>If the server does not support UIDs, then all methods that take UID arguments\n\t\t/// along with <see cref=\"GetMessageUid(int, CancellationToken)\"/> and\n\t\t/// <see cref=\"GetMessageUids(CancellationToken)\"/> will fail.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if supports uids; otherwise, <see langword=\"false\" />.</value>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic abstract bool SupportsUids {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message count.\n\t\t/// </remarks>\n\t\t/// <returns>The message count.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract int GetMessageCount (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message count.\n\t\t/// </remarks>\n\t\t/// <returns>The message count.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<int> GetMessageCountAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the UID of the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message UID.</returns>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail spool does not support UIDs.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract string GetMessageUid (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the UID of the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message UID.</returns>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail spool does not support UIDs.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<string> GetMessageUidAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the full list of available message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadNewMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The message uids.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail spool does not support UIDs.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<string> GetMessageUids (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the full list of available message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all servers support UIDs, so you should first check\n\t\t/// the <see cref=\"SupportsUids\"/> property.\n\t\t/// </remarks>\n\t\t/// <returns>The message uids.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail spool does not support UIDs.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<string>> GetMessageUidsAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the size of the specified message, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the size of the specified message, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message size, in bytes.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract int GetMessageSize (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the size of the specified message, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the size of the specified message, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message size, in bytes.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<int> GetMessageSizeAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the sizes for all available messages, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sizes for all available messages, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message sizes, in bytes.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<int> GetMessageSizes (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the sizes for all available messages, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the sizes for all available messages, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message sizes, in bytes.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<int>> GetMessageSizesAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract HeaderList GetMessageHeaders (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers for the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the headers for the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<HeaderList> GetMessageHeadersAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>The headers for the specified messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<HeaderList> GetMessageHeaders (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the headers for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>The headers for the specified messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<HeaderList>> GetMessageHeadersAsync (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers of the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers of the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The headers of the messages within the specified range.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<HeaderList> GetMessageHeaders (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the headers of the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers of the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The headers of the messages within the specified range.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<HeaderList>> GetMessageHeadersAsync (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract MimeMessage GetMessage (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<MimeMessage> GetMessageAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get the messages at the specified indexes.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<MimeMessage> GetMessages (IList<int> indexes, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously get the messages at the specified indexes.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<MimeMessage>> GetMessagesAsync (IList<int> indexes, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"BatchDownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<MimeMessage> GetMessages (int startIndex, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the messages within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<MimeMessage>> GetMessagesAsync (int startIndex, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the message or header stream at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message or header stream at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Stream GetStream (int index, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header stream at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message or header stream at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> GetStreamAsync (int index, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the message or header streams at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Get the message or header streams at the specified indexes.</para>\n\t\t/// <para>If the mail server supports pipelining, this method will likely be more\n\t\t/// efficient than using <see cref=\"GetStream(int,bool,CancellationToken,ITransferProgress)\"/> for\n\t\t/// each message because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<Stream> GetStreams (IList<int> indexes, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header streams at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously get the message or header streams at the specified indexes.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<Stream>> GetStreamsAsync (IList<int> indexes, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the message or header streams within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message or header streams within the specified range.</para>\n\t\t/// <para>If the mail server supports pipelining, this method will likely be more\n\t\t/// efficient than using <see cref=\"GetStream(int,bool,CancellationToken,ITransferProgress)\"/> for\n\t\t/// each message because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first stream to get.</param>\n\t\t/// <param name=\"count\">The number of streams to get.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IList<Stream> GetStreams (int startIndex, int count, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header streams within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message or header streams within the specified range.\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first stream to get.</param>\n\t\t/// <param name=\"count\">The number of streams to get.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<Stream>> GetStreamsAsync (int startIndex, int count, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Mark the specified message for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"MailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void DeleteMessage (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified message for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"MailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task DeleteMessageAsync (int index, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Mark the specified messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"MailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void DeleteMessages (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"MailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> are invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No indexes were specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task DeleteMessagesAsync (IList<int> indexes, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Mark the specified range of messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"MailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"BatchDownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <param name=\"startIndex\">The index of the first message to mark for deletion.</param>\n\t\t/// <param name=\"count\">The number of messages to mark for deletion.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void DeleteMessages (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified range of messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"MailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to mark for deletion.</param>\n\t\t/// <param name=\"count\">The number of messages to mark for deletion.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task DeleteMessagesAsync (int startIndex, int count, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Mark all messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void DeleteAllMessages (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark all messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task DeleteAllMessagesAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Reset the state of all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract void Reset (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously reset the state of all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"IMailService.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task ResetAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the messages in the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// A command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tpublic abstract IEnumerator<MimeMessage> GetEnumerator ();\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the messages in the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailSpool\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailSpool\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// A command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn GetEnumerator ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MailStore.cs",
    "content": "﻿//\n// MailStore.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An abstract mail store implementation.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract mail store implementation.\n\t/// </remarks>\n\tpublic abstract class MailStore : MailService, IMailStore\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailStore\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailStore\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected MailStore (IProtocolLogger protocolLogger) : base (protocolLogger)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the personal namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The personal folder namespaces contain a user's personal mailbox folders.\n\t\t/// </remarks>\n\t\t/// <value>The personal namespaces.</value>\n\t\tpublic abstract FolderNamespaceCollection PersonalNamespaces {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the shared namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The shared folder namespaces contain mailbox folders that are shared with the user.\n\t\t/// </remarks>\n\t\t/// <value>The shared namespaces.</value>\n\t\tpublic abstract FolderNamespaceCollection SharedNamespaces {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the other namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The other folder namespaces contain other mailbox folders.\n\t\t/// </remarks>\n\t\t/// <value>The other namespaces.</value>\n\t\tpublic abstract FolderNamespaceCollection OtherNamespaces {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mail store supports quotas.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the mail store supports quotas.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mail store supports quotas; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic abstract bool SupportsQuotas {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the mail store.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The threading algorithms are queried as part of the\n\t\t/// <a href=\"Overload_MailKit_MailStore_Connect.htm\">Connect</a>\n\t\t/// and <a href=\"Overload_MailKit_MailStore_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The supported threading algorithms.</value>\n\t\tpublic abstract HashSet<ThreadingAlgorithm> ThreadingAlgorithms {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the Inbox folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The Inbox folder is the default folder and always exists on the mail store.</para>\n\t\t/// <note type=\"note\">This property will only be available after the client has been authenticated.</note>\n\t\t/// </remarks>\n\t\t/// <value>The Inbox folder.</value>\n\t\tpublic abstract IMailFolder? Inbox {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Enable the quick resynchronization feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables quick resynchronization when a folder is opened using the\n\t\t/// <see cref=\"MailFolder.Open(FolderAccess,uint,ulong,System.Collections.Generic.IList&lt;UniqueId&gt;,System.Threading.CancellationToken)\"/>\n\t\t/// method.</para>\n\t\t/// <para>If this feature is enabled, the <see cref=\"MailFolder.MessageExpunged\"/> event is replaced\n\t\t/// with the <see cref=\"MailFolder.MessagesVanished\"/> event.</para>\n\t\t/// <para>This method needs to be called immediately after calling one of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Authenticate.htm\">Authenticate</a> methods, before\n\t\t/// opening any folders.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Quick resynchronization needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quick resynchronization.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void EnableQuickResync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable the quick resynchronization feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables quick resynchronization when a folder is opened using the\n\t\t/// <see cref=\"MailFolder.Open(FolderAccess,uint,ulong,System.Collections.Generic.IList&lt;UniqueId&gt;,System.Threading.CancellationToken)\"/>\n\t\t/// method.</para>\n\t\t/// <para>If this feature is enabled, the <see cref=\"MailFolder.MessageExpunged\"/> event is replaced\n\t\t/// with the <see cref=\"MailFolder.MessagesVanished\"/> event.</para>\n\t\t/// <para>This method needs to be called immediately after calling one of the\n\t\t/// <a href=\"Overload_MailKit_MailService_Authenticate.htm\">Authenticate</a> methods, before\n\t\t/// opening any folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Quick resynchronization needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The mail store does not support quick resynchronization.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task EnableQuickResyncAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the specified special folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all mail stores support special folders. Each implementation\n\t\t/// should provide a way to determine if special folders are supported.\n\t\t/// </remarks>\n\t\t/// <returns>The folder if available; otherwise <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The type of special folder.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"folder\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic abstract IMailFolder? GetFolder (SpecialFolder folder);\n\n\t\t/// <summary>\n\t\t/// Get the folder for the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder for the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\tpublic abstract IMailFolder GetFolder (FolderNamespace @namespace);\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual IList<IMailFolder> GetFolders (FolderNamespace @namespace, bool subscribedOnly, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetFolders (@namespace, StatusItems.None, subscribedOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, bool subscribedOnly, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetFoldersAsync (@namespace, StatusItems.None, subscribedOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IList<IMailFolder> GetFolders (FolderNamespace @namespace, StatusItems items = StatusItems.None, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, StatusItems items = StatusItems.None, bool subscribedOnly = false, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder for the specified path.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract IMailFolder GetFolder (string path, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the folder for the specified path.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<IMailFolder> GetFolderAsync (string path, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract string? GetMetadata (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<string?> GetMetadataAsync (MetadataTag tag, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"tags\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual MetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetMetadata (new MetadataOptions (), tags, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"tags\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic virtual Task<MetadataCollection> GetMetadataAsync (IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn GetMetadataAsync (new MetadataOptions (), tags, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task<MetadataCollection> GetMetadataAsync (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract void SetMetadata (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailStore\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"MailStore\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The folder does not support metadata.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic abstract Task SetMetadataAsync (MetadataCollection metadata, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Occurs when a remote message store receives an alert message from the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"Alert\"/> event is raised whenever the mail server sends an\n\t\t/// alert message.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<AlertEventArgs>? Alert;\n\n\t\t/// <summary>\n\t\t/// Raise the alert event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the alert event.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The alert message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected virtual void OnAlert (string message)\n\t\t{\n\t\t\tAlert?.Invoke (this, new AlertEventArgs (message));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when a folder is created.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"FolderCreated\"/> event is emitted when a new folder is created.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<FolderCreatedEventArgs>? FolderCreated;\n\n\t\t/// <summary>\n\t\t/// Raise the folder created event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the folder created event.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder that was just created.</param>\n\t\tprotected virtual void OnFolderCreated (IMailFolder folder)\n\t\t{\n\t\t\tFolderCreated?.Invoke (this, new FolderCreatedEventArgs (folder));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when metadata changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MetadataChanged\"/> event is emitted when metadata changes.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<MetadataChangedEventArgs>? MetadataChanged;\n\n\t\t/// <summary>\n\t\t/// Raise the metadata changed event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the metadata changed event.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata that changed.</param>\n\t\tprotected virtual void OnMetadataChanged (Metadata metadata)\n\t\t{\n\t\t\tMetadataChanged?.Invoke (this, new MetadataChangedEventArgs (metadata));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MailTransport.cs",
    "content": "﻿//\n// MailTransport.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An abstract mail transport implementation.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract mail transport implementation.\n\t/// </remarks>\n\tpublic abstract class MailTransport : MailService, IMailTransport\n\t{\n\t\tstatic readonly FormatOptions DefaultOptions;\n\n\t\tstatic MailTransport ()\n\t\t{\n\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\toptions.HiddenHeaders.Add (HeaderId.ContentLength);\n\t\t\toptions.HiddenHeaders.Add (HeaderId.ResentBcc);\n\t\t\toptions.HiddenHeaders.Add (HeaderId.Bcc);\n\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\tDefaultOptions = options;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailTransport\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MailTransport\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected MailTransport (IProtocolLogger protocolLogger) : base (protocolLogger)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic virtual string Send (MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Send (DefaultOptions, message, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic virtual Task<string> SendAsync (MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn SendAsync (DefaultOptions, message, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"sender\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"recipients\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic virtual string Send (MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn Send (DefaultOptions, message, sender, recipients, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"sender\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"recipients\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic virtual Task<string> SendAsync (MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\treturn SendAsync (DefaultOptions, message, sender, recipients, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessageWithOptions\"/>\n\t\t/// </example>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the transport.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic abstract string Send (FormatOptions options, MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the transport.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<string> SendAsync (FormatOptions options, MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"sender\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"recipients\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the transport.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic abstract string Send (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sends the specified message using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"sender\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"recipients\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"MailTransport\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"MailTransport\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the transport.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"CommandException\">\n\t\t/// The send command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ProtocolException\">\n\t\t/// A protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<string> SendAsync (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Occurs when a message is successfully sent via the transport.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageSent\"/> event will be emitted each time a message is successfully sent.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<MessageSentEventArgs>? MessageSent;\n\n\t\t/// <summary>\n\t\t/// Raise the message sent event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the message sent event.\n\t\t/// </remarks>\n\t\t/// <param name=\"e\">The message sent event args.</param>\n\t\tprotected virtual void OnMessageSent (MessageSentEventArgs e)\n\t\t{\n\t\t\tMessageSent?.Invoke (this, e);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageEventArgs.cs",
    "content": "﻿//\n// MessageEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when the state of a message changes.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when the state of a message changes.\n\t/// </remarks>\n\tpublic class MessageEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.MessageEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageEventArgs (int index)\n\t\t{\n\t\t\tif (index < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tIndex = index;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.MessageEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageEventArgs (int index, UniqueId uid)\n\t\t{\n\t\t\tif (index < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tIndex = index;\n\t\t\tUniqueId = uid;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the index of the message that changed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the index of the message that changed.\n\t\t/// </remarks>\n\t\t/// <value>The index of the message.</value>\n\t\tpublic int Index {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the unique ID of the message that changed, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the unique ID of the message that changed, if available.\n\t\t/// </remarks>\n\t\t/// <value>The unique ID of the message.</value>\n\t\tpublic UniqueId? UniqueId {\n\t\t\tget; internal set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageFlags.cs",
    "content": "﻿//\n// MessageFlags.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An enumeration of message flags.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of message flags.\n\t/// </remarks>\n\t[Flags]\n\tpublic enum MessageFlags {\n\t\t/// <summary>\n\t\t/// No message flags are set.\n\t\t/// </summary>\n\t\tNone        = 0,\n\n\t\t/// <summary>\n\t\t/// The message has been read.\n\t\t/// </summary>\n\t\tSeen        = 1 << 0,\n\n\t\t/// <summary>\n\t\t/// The message has been answered (replied to).\n\t\t/// </summary>\n\t\tAnswered    = 1 << 1,\n\n\t\t/// <summary>\n\t\t/// The message has been flagged for importance.\n\t\t/// </summary>\n\t\tFlagged     = 1 << 2,\n\n\t\t/// <summary>\n\t\t/// The message has been marked for deletion.\n\t\t/// </summary>\n\t\tDeleted     = 1 << 3,\n\n\t\t/// <summary>\n\t\t/// The message is marked as a draft.\n\t\t/// </summary>\n\t\tDraft       = 1 << 4,\n\n\t\t/// <summary>\n\t\t/// The message has just recently arrived in the folder.\n\t\t/// </summary>\n\t\tRecent      = 1 << 5,\n\n\t\t/// <summary>\n\t\t/// User-defined flags are allowed by the folder.\n\t\t/// </summary>\n\t\tUserDefined = 1 << 6,\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageFlagsChangedEventArgs.cs",
    "content": "﻿//\n// MessageFlagsChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args for the <see cref=\"IMailFolder.MessageFlagsChanged\"/> event.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args for the <see cref=\"IMailFolder.MessageFlagsChanged\"/> event.\n\t/// </remarks>\n\tpublic class MessageFlagsChangedEventArgs : MessageEventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\tinternal MessageFlagsChangedEventArgs (int index) : base (index)\n\t\t{\n\t\t\tKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\tpublic MessageFlagsChangedEventArgs (int index, MessageFlags flags) : base (index)\n\t\t{\n\t\t\tKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The user-defined keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, MessageFlags flags, IReadOnlySetOfStrings keywords) : base (index)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, MessageFlags flags, ulong modseq) : base (index)\n\t\t{\n\t\t\tKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tModSeq = modseq;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The user-defined keywords.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, MessageFlags flags, IReadOnlySetOfStrings keywords, ulong modseq) : base (index)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords;\n\t\t\tModSeq = modseq;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageFlags flags) : base (index, uid)\n\t\t{\n\t\t\tKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The user-defined keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageFlags flags, IReadOnlySetOfStrings keywords) : base (index, uid)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageFlags flags, ulong modseq) : base (index, uid)\n\t\t{\n\t\t\tKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tModSeq = modseq;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The user-defined message flags.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageFlags flags, IReadOnlySetOfStrings keywords, ulong modseq) : base (index, uid)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords;\n\t\t\tModSeq = modseq;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated message flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated message flags.\n\t\t/// </remarks>\n\t\t/// <value>The updated message flags.</value>\n\t\tpublic MessageFlags Flags {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated user-defined message flags.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated user-defined message flags.\n\t\t/// </remarks>\n\t\t/// <value>The updated user-defined message flags.</value>\n\t\tpublic IReadOnlySetOfStrings Keywords {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated mod-sequence value of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated mod-sequence value of the message, if available.\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value.</value>\n\t\tpublic ulong? ModSeq {\n\t\t\tget; internal set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageLabelsChangedEventArgs.cs",
    "content": "﻿//\n// LabelsChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args for the <see cref=\"IMailFolder.MessageLabelsChanged\"/> event.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args for the <see cref=\"IMailFolder.MessageLabelsChanged\"/> event.\n\t/// </remarks>\n\tpublic class MessageLabelsChangedEventArgs : MessageEventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageLabelsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageLabelsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"labels\">The message labels.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageLabelsChangedEventArgs (int index, IList<string> labels) : base (index)\n\t\t{\n\t\t\tif (labels == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (labels));\n\n\t\t\tLabels = new ReadOnlyCollection<string> (labels);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageLabelsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageLabelsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"labels\">The message labels.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageLabelsChangedEventArgs (int index, IList<string> labels, ulong modseq) : base (index)\n\t\t{\n\t\t\tif (labels == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (labels));\n\n\t\t\tLabels = new ReadOnlyCollection<string> (labels);\n\t\t\tModSeq = modseq;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageLabelsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageLabelsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"labels\">The message labels.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageLabelsChangedEventArgs (int index, UniqueId uid, IList<string> labels) : base (index, uid)\n\t\t{\n\t\t\tif (labels == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (labels));\n\n\t\t\tLabels = new ReadOnlyCollection<string> (labels);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageLabelsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageLabelsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"labels\">The message labels.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic MessageLabelsChangedEventArgs (int index, UniqueId uid, IList<string> labels, ulong modseq) : base (index, uid)\n\t\t{\n\t\t\tif (labels == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (labels));\n\n\t\t\tLabels = new ReadOnlyCollection<string> (labels);\n\t\t\tModSeq = modseq;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated labels.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated labels.\n\t\t/// </remarks>\n\t\t/// <value>The updated labels.</value>\n\t\tpublic IList<string> Labels {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated mod-sequence value of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated mod-sequence value of the message, if available.\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value.</value>\n\t\tpublic ulong? ModSeq {\n\t\t\tget; internal set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageNotFoundException.cs",
    "content": "﻿//\n// MessageNotFoundException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when a message (or body part) could not be found.\n\t/// </summary>\n\t/// <remarks>\n\t/// This exception is thrown by methods such as\n\t/// <a href=\"Overload_MailKit_IMailFolder_GetMessage.htm\">IMailFolder.GetMessage</a>,\n\t/// <a href=\"Overload_MailKit_IMailFolder_GetBodyPart.htm\">IMailFolder.GetBodyPart</a>, or\n\t/// <a href=\"Overload_MailKit_IMailFolder_GetStream.htm\">IMailFolder.GetStream</a>\n\t/// when the server's response does not contain the message, body part, or stream data requested.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class MessageNotFoundException : Exception\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deserializes a <see cref=\"MessageNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected MessageNotFoundException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// </exception>\n\t\tpublic MessageNotFoundException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageNotFoundException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic MessageNotFoundException (string message) : base (message)\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageSentEventArgs.cs",
    "content": "﻿//\n// MessageSentEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when a message is successfully sent.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when message is successfully sent.\n\t/// </remarks>\n\tpublic class MessageSentEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageSentEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageSentEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message that was just sent.</param>\n\t\t/// <param name=\"response\">The response from the server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"response\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic MessageSentEventArgs (MimeMessage message, string response)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tif (response == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (response));\n\n\t\t\tMessage = message;\n\t\t\tResponse = response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message that was just sent.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message that was just sent.\n\t\t/// </remarks>\n\t\t/// <value>The message.</value>\n\t\tpublic MimeMessage Message {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the server's response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the server's response.\n\t\t/// </remarks>\n\t\t/// <value>The response.</value>\n\t\tpublic string Response {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageSorter.cs",
    "content": "﻿//\n// MessageSorter.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MailKit.Search;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Routines for sorting messages.\n\t/// </summary>\n\t/// <remarks>\n\t/// Routines for sorting messages.\n\t/// </remarks>\n\tpublic static class MessageSorter\n\t{\n\t\tclass MessageComparer<T> : IComparer<T> where T : IMessageSummary\n\t\t{\n\t\t\treadonly IList<OrderBy> orderBy;\n\n\t\t\tpublic MessageComparer (IList<OrderBy> orderBy)\n\t\t\t{\n\t\t\t\tthis.orderBy = orderBy;\n\t\t\t}\n\n\t\t\t#region IComparer implementation\n\n\t\t\tstatic int CompareDisplayNames (InternetAddressList list1, InternetAddressList list2)\n\t\t\t{\n\t\t\t\tvar m1 = list1.Mailboxes.GetEnumerator ();\n\t\t\t\tvar m2 = list2.Mailboxes.GetEnumerator ();\n\t\t\t\tbool n1 = m1.MoveNext ();\n\t\t\t\tbool n2 = m2.MoveNext ();\n\n\t\t\t\twhile (n1 && n2) {\n\t\t\t\t\tvar name1 = m1.Current.Name ?? string.Empty;\n\t\t\t\t\tvar name2 = m2.Current.Name ?? string.Empty;\n\t\t\t\t\tint cmp;\n\n\t\t\t\t\tif ((cmp = string.Compare (name1, name2, StringComparison.OrdinalIgnoreCase)) != 0)\n\t\t\t\t\t\treturn cmp;\n\n\t\t\t\t\tn1 = m1.MoveNext ();\n\t\t\t\t\tn2 = m2.MoveNext ();\n\t\t\t\t}\n\n\t\t\t\treturn n1 ? 1 : (n2 ? -1  : 0);\n\t\t\t}\n\n\t\t\tstatic int CompareMailboxAddresses (InternetAddressList list1, InternetAddressList list2)\n\t\t\t{\n\t\t\t\tvar m1 = list1.Mailboxes.GetEnumerator ();\n\t\t\t\tvar m2 = list2.Mailboxes.GetEnumerator ();\n\t\t\t\tbool n1 = m1.MoveNext ();\n\t\t\t\tbool n2 = m2.MoveNext ();\n\n\t\t\t\twhile (n1 && n2) {\n\t\t\t\t\tint cmp;\n\n\t\t\t\t\tif ((cmp = string.Compare (m1.Current.Address, m2.Current.Address, StringComparison.OrdinalIgnoreCase)) != 0)\n\t\t\t\t\t\treturn cmp;\n\n\t\t\t\t\tn1 = m1.MoveNext ();\n\t\t\t\t\tn2 = m2.MoveNext ();\n\t\t\t\t}\n\n\t\t\t\treturn n1 ? 1 : (n2 ? -1  : 0);\n\t\t\t}\n\n\t\t\tpublic int Compare (T? x, T? y)\n\t\t\t{\n\t\t\t\tint cmp = 0;\n\n\t\t\t\tfor (int i = 0; i < orderBy.Count; i++) {\n\t\t\t\t\tswitch (orderBy[i].Type) {\n\t\t\t\t\tcase OrderByType.Annotation:\n\t\t\t\t\t\tvar annotation = (OrderByAnnotation) orderBy[i];\n\n\t\t\t\t\t\tvar xannotation = x!.Annotations?.FirstOrDefault (a => a.Entry == annotation.Entry);\n\t\t\t\t\t\tvar yannotation = y!.Annotations?.FirstOrDefault (a => a.Entry == annotation.Entry);\n\n\t\t\t\t\t\tvar xvalue = xannotation?.Properties[annotation.Attribute] ?? string.Empty;\n\t\t\t\t\t\tvar yvalue = yannotation?.Properties[annotation.Attribute] ?? string.Empty;\n\n\t\t\t\t\t\tcmp = string.Compare (xvalue, yvalue, StringComparison.OrdinalIgnoreCase);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.Arrival:\n\t\t\t\t\t\tcmp = x!.Index.CompareTo (y!.Index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.Cc:\n\t\t\t\t\t\tcmp = CompareMailboxAddresses (x!.Envelope!.Cc, y!.Envelope!.Cc);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.Date:\n\t\t\t\t\t\tcmp = x!.Date.CompareTo (y!.Date);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.DisplayFrom:\n\t\t\t\t\t\tcmp = CompareDisplayNames (x!.Envelope!.From, y!.Envelope!.From);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.From:\n\t\t\t\t\t\tcmp = CompareMailboxAddresses (x!.Envelope!.From, y!.Envelope!.From);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.ModSeq:\n\t\t\t\t\t\tvar xmodseq = x!.ModSeq ?? 0;\n\t\t\t\t\t\tvar ymodseq = y!.ModSeq ?? 0;\n\n\t\t\t\t\t\tcmp = xmodseq.CompareTo (ymodseq);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.Size:\n\t\t\t\t\t\tvar xsize = x!.Size ?? 0;\n\t\t\t\t\t\tvar ysize = y!.Size ?? 0;\n\n\t\t\t\t\t\tcmp = xsize.CompareTo (ysize);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.Subject:\n\t\t\t\t\t\tvar xsubject = x!.Envelope!.Subject ?? string.Empty;\n\t\t\t\t\t\tvar ysubject = y!.Envelope!.Subject ?? string.Empty;\n\n\t\t\t\t\t\tcmp = string.Compare (xsubject, ysubject, StringComparison.OrdinalIgnoreCase);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.DisplayTo:\n\t\t\t\t\t\tcmp = CompareDisplayNames (x!.Envelope!.To, y!.Envelope!.To);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OrderByType.To:\n\t\t\t\t\t\tcmp = CompareMailboxAddresses (x!.Envelope!.To, y!.Envelope!.To);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cmp == 0)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\treturn orderBy[i].Order == SortOrder.Descending ? cmp * -1 : cmp;\n\t\t\t\t}\n\n\t\t\t\treturn cmp;\n\t\t\t}\n\n\t\t\t#endregion\n\t\t}\n\n\t\tstatic MessageSummaryItems GetMessageSummaryItems (IList<OrderBy> orderBy)\n\t\t{\n\t\t\tvar items = MessageSummaryItems.None;\n\n\t\t\tfor (int i = 0; i < orderBy.Count; i++) {\n\t\t\t\tswitch (orderBy[i].Type) {\n\t\t\t\tcase OrderByType.Annotation:\n\t\t\t\t\titems |= MessageSummaryItems.Annotations;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.Arrival:\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.Cc:\n\t\t\t\tcase OrderByType.Date:\n\t\t\t\tcase OrderByType.DisplayFrom:\n\t\t\t\tcase OrderByType.DisplayTo:\n\t\t\t\tcase OrderByType.From:\n\t\t\t\tcase OrderByType.Subject:\n\t\t\t\tcase OrderByType.To:\n\t\t\t\t\titems |= MessageSummaryItems.Envelope;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.ModSeq:\n\t\t\t\t\titems |= MessageSummaryItems.ModSeq;\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.Size:\n\t\t\t\t\titems |= MessageSummaryItems.Size;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn items;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sorts the messages by the specified ordering.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sorts the messages by the specified ordering.\n\t\t/// </remarks>\n\t\t/// <returns>The sorted messages.</returns>\n\t\t/// <typeparam name=\"T\">The message items must implement the <see cref=\"IMessageSummary\"/> interface.</typeparam>\n\t\t/// <param name=\"messages\">The messages to sort.</param>\n\t\t/// <param name=\"orderBy\">The sort ordering.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"messages\"/> contains one or more items that is missing information needed for sorting.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is an empty list.</para>\n\t\t/// </exception>\n\t\tpublic static IList<T> Sort<T> (this IEnumerable<T> messages, IList<OrderBy> orderBy) where T : IMessageSummary\n\t\t{\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tif (orderBy == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (orderBy));\n\n\t\t\tif (orderBy.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No sort order provided.\", nameof (orderBy));\n\n\t\t\tvar requiredFields = GetMessageSummaryItems (orderBy);\n\t\t\tvar list = new List<T> ();\n\n\t\t\tforeach (var message in messages) {\n\t\t\t\tif ((message.Fields & requiredFields) != requiredFields)\n\t\t\t\t\tthrow new ArgumentException (\"One or more messages is missing information needed for sorting.\", nameof (messages));\n\n\t\t\t\tlist.Add (message);\n\t\t\t}\n\n\t\t\tif (list.Count < 2)\n\t\t\t\treturn list;\n\n\t\t\tvar comparer = new MessageComparer<T> (orderBy);\n\n\t\t\tlist.Sort (comparer);\n\n\t\t\treturn list;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sorts the messages by the specified ordering.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sorts the messages by the specified ordering.\n\t\t/// </remarks>\n\t\t/// <returns>The sorted messages.</returns>\n\t\t/// <typeparam name=\"T\">The message items must implement the <see cref=\"IMessageSummary\"/> interface.</typeparam>\n\t\t/// <param name=\"messages\">The messages to sort.</param>\n\t\t/// <param name=\"orderBy\">The sort ordering.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"messages\"/> contains one or more items that is missing information needed for sorting.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is an empty list.</para>\n\t\t/// </exception>\n\t\tpublic static void Sort<T> (this List<T> messages, IList<OrderBy> orderBy) where T : IMessageSummary\n\t\t{\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tif (orderBy == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (orderBy));\n\n\t\t\tif (orderBy.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No sort order provided.\", nameof (orderBy));\n\n\t\t\tvar requiredFields = GetMessageSummaryItems (orderBy);\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tif ((messages[i].Fields & requiredFields) != requiredFields)\n\t\t\t\t\tthrow new ArgumentException (\"One or more messages is missing information needed for sorting.\", nameof (messages));\n\t\t\t}\n\n\t\t\tif (messages.Count < 2)\n\t\t\t\treturn;\n\n\t\t\tvar comparer = new MessageComparer<T> (orderBy);\n\n\t\t\tmessages.Sort (comparer);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageSummary.cs",
    "content": "﻿//\n// MessageSummary.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A summary of a message.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>The <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a> and\n\t/// <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a> methods\n\t/// return lists of <see cref=\"IMessageSummary\"/> items.</para>\n\t/// <para>The properties of the <see cref=\"MessageSummary\"/> that will be available\n\t/// depend on the <see cref=\"MessageSummaryItems\"/> passed to the aforementioned method.</para>\n\t/// </remarks>\n\tpublic class MessageSummary : IMessageSummary\n\t{\n\t\tIReadOnlySetOfStrings? keywords;\n\t\tint threadableReplyDepth = -1;\n\t\tstring? normalizedSubject;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageSummary\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageSummary\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is negative.\n\t\t/// </exception>\n\t\tpublic MessageSummary (int index)\n\t\t{\n\t\t\tif (index < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tIndex = index;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageSummary\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageSummary\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"folder\">The folder that the message belongs to.</param>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"folder\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is negative.\n\t\t/// </exception>\n\t\tpublic MessageSummary (IMailFolder folder, int index) : this (index)\n\t\t{\n\t\t\tif (folder == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (folder));\n\n\t\t\tFolder = folder;\n\t\t}\n\n\t\t[MemberNotNull (nameof (normalizedSubject))]\n\t\tvoid UpdateThreadableSubject ()\n\t\t{\n\t\t\tif (normalizedSubject != null)\n\t\t\t\treturn;\n\n\t\t\tif (Envelope?.Subject != null) {\n\t\t\t\tnormalizedSubject = MessageThreader.GetThreadableSubject (Envelope.Subject, out threadableReplyDepth);\n\t\t\t} else {\n\t\t\t\tnormalizedSubject = string.Empty;\n\t\t\t\tthreadableReplyDepth = 0;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the folder that the message belongs to.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder that the message belongs to, if available.\n\t\t/// </remarks>\n\t\t/// <value>The folder.</value>\n\t\tpublic IMailFolder? Folder {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a bitmask of fields that have been populated.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a bitmask of fields that have been populated.\n\t\t/// </remarks>\n\t\t/// <value>The fields that have been populated.</value>\n\t\tpublic MessageSummaryItems Fields {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the body structure of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The body will be one of <see cref=\"BodyPartText\"/>,\n\t\t/// <see cref=\"BodyPartMessage\"/>, <see cref=\"BodyPartBasic\"/>,\n\t\t/// or <see cref=\"BodyPartMultipart\"/>.</para>\n\t\t/// <para>This property will only be set if either the\n\t\t/// <see cref=\"MessageSummaryItems.Body\"/> flag or the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The body structure of the message.</value>\n\t\tpublic BodyPart? Body {\n\t\t\tget; set;\n\t\t}\n\n\t\tstatic BodyPart? GetMultipartRelatedRoot (BodyPartMultipart related)\n\t\t{\n\t\t\tstring? start = related.ContentType.Parameters[\"start\"];\n\t\t\tstring? contentId;\n\n\t\t\tif (start == null)\n\t\t\t\treturn related.BodyParts.Count > 0 ? related.BodyParts[0] : null;\n\n\t\t\tif ((contentId = MimeUtils.EnumerateReferences (start).FirstOrDefault ()) == null)\n\t\t\t\tcontentId = start;\n\n\t\t\tvar cid = new Uri (string.Format (\"cid:{0}\", contentId));\n\n\t\t\tfor (int i = 0; i < related.BodyParts.Count; i++) {\n\t\t\t\tif (related.BodyParts[i] is BodyPartBasic basic && (basic.ContentId == contentId || basic.ContentLocation == cid))\n\t\t\t\t\treturn basic;\n\n\t\t\t\tif (related.BodyParts[i] is BodyPartMultipart multipart && multipart.ContentLocation == cid)\n\t\t\t\t\treturn multipart;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tstatic bool TryGetMultipartAlternativeBody (BodyPartMultipart multipart, bool html, [NotNullWhen (true)] out BodyPartText? body)\n\t\t{\n\t\t\t// walk the multipart/alternative children backwards from greatest level of faithfulness to the least faithful\n\t\t\tfor (int i = multipart.BodyParts.Count - 1; i >= 0; i--) {\n\t\t\t\tBodyPartText? text = null;\n\n\t\t\t\tif (multipart.BodyParts[i] is BodyPartMultipart multi) {\n\t\t\t\t\tif (multi.ContentType.IsMimeType (\"multipart\", \"related\")) {\n\t\t\t\t\t\ttext = GetMultipartRelatedRoot (multi) as BodyPartText;\n\t\t\t\t\t} else if (multi.ContentType.IsMimeType (\"multipart\", \"alternative\")) {\n\t\t\t\t\t\t// Note: nested multipart/alternatives make no sense... yet here we are.\n\t\t\t\t\t\tif (TryGetMultipartAlternativeBody (multi, html, out body))\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttext = multipart.BodyParts[i] as BodyPartText;\n\t\t\t\t}\n\n\t\t\t\tif (text != null && (html ? text.IsHtml : text.IsPlain)) {\n\t\t\t\t\tbody = text;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbody = null;\n\n\t\t\treturn false;\n\t\t}\n\n\t\tstatic bool TryGetMessageBody (BodyPartMultipart multipart, bool html, [NotNullWhen (true)] out BodyPartText? body)\n\t\t{\n\t\t\tBodyPartMultipart? multi;\n\t\t\tBodyPartText? text;\n\n\t\t\tif (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"))\n\t\t\t\treturn TryGetMultipartAlternativeBody (multipart, html, out body);\n\n\t\t\tif (!multipart.ContentType.IsMimeType (\"multipart\", \"related\")) {\n\t\t\t\t// Note: This is probably a multipart/mixed... and if not, we can still treat it like it is.\n\t\t\t\tfor (int i = 0; i < multipart.BodyParts.Count; i++) {\n\t\t\t\t\tmulti = multipart.BodyParts[i] as BodyPartMultipart;\n\n\t\t\t\t\t// descend into nested multiparts, if there are any...\n\t\t\t\t\tif (multi != null) {\n\t\t\t\t\t\tif (TryGetMessageBody (multi, html, out body))\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t// The text body should never come after a multipart.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\ttext = multipart.BodyParts[i] as BodyPartText;\n\n\t\t\t\t\t// Look for the first non-attachment text part (realistically, the body text will\n\t\t\t\t\t// precede any attachments, but I'm not sure we can rely on that assumption).\n\t\t\t\t\tif (text != null && !text.IsAttachment) {\n\t\t\t\t\t\tif (html ? text.IsHtml : text.IsPlain) {\n\t\t\t\t\t\t\tbody = text;\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Note: the first text/* part in a multipart/mixed is the text body.\n\t\t\t\t\t\t// If it's not in the format we're looking for, then it doesn't exist.\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Note: If the multipart/related root document is HTML, then this is the droid we are looking for.\n\t\t\t\tvar root = GetMultipartRelatedRoot (multipart);\n\n\t\t\t\ttext = root as BodyPartText;\n\n\t\t\t\tif (text != null) {\n\t\t\t\t\tbody = (html ? text.IsHtml : text.IsPlain) ? text : null;\n\t\t\t\t\treturn body != null;\n\t\t\t\t}\n\n\t\t\t\t// maybe the root is another multipart (like multipart/alternative)?\n\t\t\t\tmulti = root as BodyPartMultipart;\n\n\t\t\t\tif (multi != null)\n\t\t\t\t\treturn TryGetMessageBody (multi, html, out body);\n\t\t\t}\n\n\t\t\tbody = null;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the text body part of the message if it exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the <c>text/plain</c> body part of the message.</para>\n\t\t/// <para>This property will only be usable if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The text body if it exists; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic BodyPartText? TextBody {\n\t\t\tget {\n\t\t\t\tif (Body is BodyPartMultipart multipart) {\n\t\t\t\t\tif (TryGetMessageBody (multipart, false, out BodyPartText? plain))\n\t\t\t\t\t\treturn plain;\n\t\t\t\t} else {\n\t\t\t\t\tif (Body is BodyPartText text && text.IsPlain)\n\t\t\t\t\t\treturn text;\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the html body part of the message if it exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the <c>text/html</c> body part of the message.</para>\n\t\t/// <para>This property will only be usable if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The html body if it exists; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic BodyPartText? HtmlBody {\n\t\t\tget {\n\t\t\t\tif (Body is BodyPartMultipart multipart) {\n\t\t\t\t\tif (TryGetMessageBody (multipart, true, out BodyPartText? html))\n\t\t\t\t\t\treturn html;\n\t\t\t\t} else {\n\t\t\t\t\tif (Body is BodyPartText text && text.IsHtml)\n\t\t\t\t\t\treturn text;\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tstatic IEnumerable<BodyPartBasic> EnumerateBodyParts (BodyPart? entity, bool attachmentsOnly)\n\t\t{\n\t\t\tif (entity == null)\n\t\t\t\tyield break;\n\n\t\t\tif (entity is BodyPartMultipart multipart) {\n\t\t\t\tforeach (var subpart in multipart.BodyParts) {\n\t\t\t\t\tforeach (var part in EnumerateBodyParts (subpart, attachmentsOnly))\n\t\t\t\t\t\tyield return part;\n\t\t\t\t}\n\n\t\t\t\tyield break;\n\t\t\t}\n\n\t\t\tvar basic = (BodyPartBasic) entity;\n\n\t\t\tif (attachmentsOnly && !basic.IsAttachment)\n\t\t\t\tyield break;\n\n\t\t\tyield return basic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the body parts of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Traverses over the <see cref=\"Body\"/>, enumerating all of the\n\t\t/// <see cref=\"BodyPartBasic\"/> objects.</para>\n\t\t/// <para>This property will only be usable if either the\n\t\t/// <see cref=\"MessageSummaryItems.Body\"/> flag or the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The body parts.</value>\n\t\tpublic IEnumerable<BodyPartBasic> BodyParts {\n\t\t\tget { return EnumerateBodyParts (Body, false); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the attachments.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Traverses over the <see cref=\"Body\"/>, enumerating all of the\n\t\t/// <see cref=\"BodyPartBasic\"/> objects that have a <c>Content-Disposition</c>\n\t\t/// header set to <c>\"attachment\"</c>.</para>\n\t\t/// <para>This property will only be usable if the\n\t\t/// <see cref=\"MessageSummaryItems.BodyStructure\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The attachments.</value>\n\t\tpublic IEnumerable<BodyPartBasic> Attachments {\n\t\t\tget { return EnumerateBodyParts (Body, true); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the preview text of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The preview text is a short snippet of the beginning of the message\n\t\t/// text, typically shown in a mail client's message list to provide the user\n\t\t/// with a sense of what the message is about.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.PreviewText\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The preview text.</value>\n\t\tpublic string? PreviewText {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the envelope of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The envelope of a message contains information such as the\n\t\t/// date the message was sent, the subject of the message,\n\t\t/// the sender of the message, who the message was sent to,\n\t\t/// which message(s) the message may be in reply to,\n\t\t/// and the message id.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Envelope\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The envelope of the message.</value>\n\t\tpublic Envelope? Envelope {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the normalized subject.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A normalized Subject header value where prefixes such as\n\t\t/// \"Re:\", \"Re[#]:\", etc have been pruned.\n\t\t/// </remarks>\n\t\t/// <value>The normalized subject.</value>\n\t\tpublic string NormalizedSubject {\n\t\t\tget {\n\t\t\t\tUpdateThreadableSubject ();\n\n\t\t\t\treturn normalizedSubject;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the message is a reply.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This value should be based on whether the message subject contained any \"Re:\" or \"Fwd:\" prefixes.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the message is a reply; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsReply {\n\t\t\tget {\n\t\t\t\tUpdateThreadableSubject ();\n\n\t\t\t\treturn threadableReplyDepth != 0;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the Date header value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the Date header value. If the Date header is not present, the arrival date is used.\n\t\t/// If neither are known, <see cref=\"System.DateTimeOffset.MinValue\"/> is returned.\n\t\t/// </remarks>\n\t\t/// <value>The date.</value>\n\t\tpublic DateTimeOffset Date {\n\t\t\tget { return Envelope?.Date ?? InternalDate ?? DateTimeOffset.MinValue; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the message flags, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message flags, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Flags\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The message flags.</value>\n\t\tpublic MessageFlags? Flags {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the user-defined message flags, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the user-defined message flags, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Flags\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The user-defined message flags.</value>\n\t\tpublic IReadOnlySetOfStrings Keywords {\n\t\t\tget {\n\t\t\t\tkeywords ??= new HashSet<string> (StringComparer.Ordinal);\n\n\t\t\t\treturn keywords;\n\t\t\t}\n\t\t\tset {\n\t\t\t\tkeywords = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the message annotations, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message annotations, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Annotations\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The message annotations.</value>\n\t\tpublic IReadOnlyList<Annotation>? Annotations {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of headers, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the list of headers, if available.</para>\n\t\t/// <para>This property will only be set if the <see cref=\"IFetchRequest\"/> used with\n\t\t/// <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a> or\n\t\t/// <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a> has the <see cref=\"MessageSummaryItems.Headers\"/>\n\t\t/// flag set on <see cref=\"IFetchRequest.Items\"/> or if the <see cref=\"IFetchRequest.Headers\"/> list is non-empty.\n\t\t/// </para>\n\t\t/// </remarks>\n\t\t/// <value>The list of headers.</value>\n\t\tpublic HeaderList? Headers {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the internal date of the message (i.e. the \"received\" date), if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the internal date of the message (i.e. the \"received\" date), if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.InternalDate\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The internal date of the message.</value>\n\t\tpublic DateTimeOffset? InternalDate {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the date and time that the message was saved to the current mailbox, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the date and time that the message was saved to the current mailbox, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.SaveDate\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The save date of the message.</value>\n\t\tpublic DateTimeOffset? SaveDate {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the size of the message, in bytes, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the size of the message, in bytes, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.Size\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The size of the message.</value>\n\t\tpublic uint? Size {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the mod-sequence value for the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the mod-sequence value for the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.ModSeq\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value.</value>\n\t\tpublic ulong? ModSeq {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the message-ids that the message references, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message-ids that the message references, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.References\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The references.</value>\n\t\tpublic MessageIdList? References {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the globally unique identifier for the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the globally unique identifier of the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.EmailId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// <note type=\"info\">This property maps to the <c>EMAILID</c> value defined in the\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.</note>\n\t\t/// </remarks>\n\t\t/// <value>The globally unique message identifier.</value>\n\t\tpublic string? EmailId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the globally unique thread identifier for the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the globally unique thread identifier for the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.ThreadId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// <note type=\"info\">This property maps to the <c>THREADID</c> value defined in the\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.</note>\n\t\t/// </remarks>\n\t\t/// <value>The globally unique thread identifier.</value>\n\t\tpublic string? ThreadId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the unique identifier of the message, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the unique identifier of the message, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.UniqueId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The uid of the message.</value>\n\t\tpublic UniqueId UniqueId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the index of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the index of the message.</para>\n\t\t/// <para>This property is always set.</para>\n\t\t/// </remarks>\n\t\t/// <value>The index of the message.</value>\n\t\tpublic int Index {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t#region GMail extension properties\n\n\t\t/// <summary>\n\t\t/// Gets the GMail message identifier, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the GMail message identifier, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.GMailMessageId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The GMail message identifier.</value>\n\t\tpublic ulong? GMailMessageId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the GMail thread identifier, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the GMail thread identifier, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.GMailThreadId\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The GMail thread identifier.</value>\n\t\tpublic ulong? GMailThreadId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of GMail labels, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the list of GMail labels, if available.</para>\n\t\t/// <para>This property will only be set if the\n\t\t/// <see cref=\"MessageSummaryItems.GMailLabels\"/> flag is passed to\n\t\t/// one of the <a href=\"Overload_MailKit_IMailFolder_Fetch.htm\">Fetch</a>\n\t\t/// or <a href=\"Overload_MailKit_IMailFolder_FetchAsync.htm\">FetchAsync</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The GMail labels.</value>\n\t\tpublic IList<string>? GMailLabels {\n\t\t\tget; set;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageSummaryFetchedEventArgs.cs",
    "content": "﻿//\n// MessageSummaryFetchedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when a message summary has been fetched from a folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when a message summary has been fetched from a folder.\n\t/// </remarks>\n\tpublic class MessageSummaryFetchedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageSummaryFetchedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageSummaryFetchedEventArgs\"/>\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message summary.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic MessageSummaryFetchedEventArgs (IMessageSummary message)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tMessage = message;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message summary.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message summary.\n\t\t/// </remarks>\n\t\t/// <value>The message summary.</value>\n\t\tpublic IMessageSummary Message {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageSummaryItems.cs",
    "content": "﻿//\n// MessageSummaryItems.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A bitfield of <see cref=\"MessageSummary\"/> fields.\n\t/// </summary>\n\t/// <remarks>\n\t/// <see cref=\"MessageSummaryItems\"/> are used to specify which properties\n\t/// of <see cref=\"MessageSummary\"/> should be populated by calls to\n\t/// <see cref=\"IMailFolderExtensions.Fetch(IMailFolder,System.Collections.Generic.IList&lt;UniqueId&gt;, MessageSummaryItems, System.Threading.CancellationToken)\"/>,\n\t/// <see cref=\"IMailFolderExtensions.Fetch(IMailFolder,System.Collections.Generic.IList&lt;int&gt;, MessageSummaryItems, System.Threading.CancellationToken)\"/>, or\n\t/// <see cref=\"IMailFolderExtensions.Fetch(IMailFolder,int, int, MessageSummaryItems, System.Threading.CancellationToken)\"/>.\n\t/// </remarks>\n\t[Flags]\n\tpublic enum MessageSummaryItems {\n\t\t/// <summary>\n\t\t/// Don't fetch any summary items.\n\t\t/// </summary>\n\t\tNone           = 0,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.Annotations\"/>.</para>\n\t\t/// <para>Fetches all <c>ANNOTATION</c> values as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc5257\">rfc5257</a>.</para>\n\t\t/// </summary>\n\t\tAnnotations    = 1 << 0,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.Body\"/>.</para>\n\t\t/// <para>Fetches the <c>BODY</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// <note type=\"note\">Unlike <see cref=\"BodyStructure\"/>, <c>Body</c> will not populate the\n\t\t/// <see cref=\"BodyPart.ContentType\"/> parameters nor will it populate the\n\t\t/// <see cref=\"BodyPartBasic.ContentDisposition\"/>, <see cref=\"BodyPartBasic.ContentLanguage\"/>\n\t\t/// or <see cref=\"BodyPartBasic.ContentLocation\"/> properties of each <see cref=\"BodyPartBasic\"/>\n\t\t/// body part. This makes <c>Body</c> far less useful than <c>BodyStructure</c> especially when\n\t\t/// it is desirable to determine whether or not a body part is an attachment.</note>\n\t\t/// </summary>\n\t\tBody           = 1 << 1,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.Body\"/> (but with more details than <see cref=\"Body\"/>).</para>\n\t\t/// <para>Fetches the <c>BODYSTRUCTURE</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// <note type=\"note\">Unlike <see cref=\"Body\"/>, <c>BodyStructure</c> will also populate the\n\t\t/// <see cref=\"BodyPart.ContentType\"/> parameters as well as the\n\t\t/// <see cref=\"BodyPartBasic.ContentDisposition\"/>, <see cref=\"BodyPartBasic.ContentLanguage\"/>\n\t\t/// and <see cref=\"BodyPartBasic.ContentLocation\"/> properties of each <see cref=\"BodyPartBasic\"/>\n\t\t/// body part. The <c>Content-Disposition</c> information is especially important when trying to\n\t\t/// determine whether or not a body part is an attachment, for example.</note>\n\t\t/// </summary>\n\t\tBodyStructure  = 1 << 2,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.Envelope\"/>.</para>\n\t\t/// <para>Fetches the <c>ENVELOPE</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tEnvelope       = 1 << 3,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.Flags\"/>.</para>\n\t\t/// <para>Fetches the <c>FLAGS</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tFlags          = 1 << 4,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.InternalDate\"/>.</para>\n\t\t/// <para>Fetches the <c>INTERNALDATE</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tInternalDate   = 1 << 5,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.Size\"/>.</para>\n\t\t/// <para>Fetches the <c>RFC822.SIZE</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tSize           = 1 << 6,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.ModSeq\"/>.</para>\n\t\t/// <para>Fetches the <c>MODSEQ</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc4551\">rfc4551</a>.</para>\n\t\t/// </summary>\n\t\tModSeq         = 1 << 7,\n\n\t\t/// <summary>\n\t\t/// Fetch the <see cref=\"IMessageSummary.References\"/>.\n\t\t/// </summary>\n\t\tReferences     = 1 << 8,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.UniqueId\"/>.</para>\n\t\t/// <para>Fetches the <c>UID</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tUniqueId       = 1 << 9,\n\n\t\t/// <summary>\n\t\t/// <para></para>Fetch the <see cref=\"IMessageSummary.EmailId\"/>.\n\t\t/// <para>Fetches the <c>EMAILID</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">rfc8474</a>.</para>\n\t\t/// </summary>\n\t\tEmailId        = 1 << 10,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.ThreadId\"/>.</para>\n\t\t/// <para>Fetches the <c>THREADID</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8474\">rfc8474</a>.</para>\n\t\t/// </summary>\n\t\tThreadId       = 1 << 11,\n\n\t\t#region GMail extension items\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.GMailMessageId\"/>.</para>\n\t\t/// <para>Fetches the <c>X-GM-MSGID</c> value as defined in Google's\n\t\t/// <a href=\"https://developers.google.com/gmail/imap/imap-extensions\">IMAP extensions</a>\n\t\t/// documentation.</para>\n\t\t/// </summary>\n\t\tGMailMessageId = 1 << 12,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.GMailThreadId\"/>.</para>\n\t\t/// <para>Fetches the <c>X-GM-THRID</c> value as defined in Google's\n\t\t/// <a href=\"https://developers.google.com/gmail/imap/imap-extensions\">IMAP extensions</a>\n\t\t/// documentation.</para>\n\t\t/// </summary>\n\t\tGMailThreadId  = 1 << 13,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.GMailLabels\"/>.</para>\n\t\t/// <para>Fetches the <c>X-GM-LABELS</c> value as defined in Google's\n\t\t/// <a href=\"https://developers.google.com/gmail/imap/imap-extensions\">IMAP extensions</a>\n\t\t/// documentation.</para>\n\t\t/// </summary>\n\t\tGMailLabels    = 1 << 14,\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the the complete list of <see cref=\"IMessageSummary.Headers\"/> for each message.</para>\n\t\t/// </summary>\n\t\tHeaders        = 1 << 15,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.PreviewText\"/>.</para>\n\t\t/// <note type=\"note\">This property can be quite expensive to calculate because it is typically not an\n\t\t/// item that is cached on the IMAP server. Instead, MailKit must download a hunk of the\n\t\t/// message body so that it can decode and parse it in order to generate a meaningful\n\t\t/// text snippet. This usually involves downloading the first 512 bytes for <c>text/plain</c>\n\t\t/// message bodies and the first 16 kilobytes for <c>text/html</c> message bodies. If a\n\t\t/// message contains both a <c>text/plain</c> body and a <c>text/html</c> body, then the\n\t\t/// <c>text/plain</c> content is used in order to reduce network traffic.</note>\n\t\t/// </summary>\n\t\tPreviewText    = 1 << 16,\n\n\t\t/// <summary>\n\t\t/// <para>Fetch the <see cref=\"IMessageSummary.SaveDate\"/>.</para>\n\t\t/// <para>Fetches the <c>SAVEDATE</c> value as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc8514\">rfc8514</a>.</para>\n\t\t/// </summary>\n\t\tSaveDate       = 1 << 17,\n\n\t\t#region Macros\n\n\t\t/// <summary>\n\t\t/// <para>A macro for fetching the <see cref=\"Envelope\"/>, <see cref=\"Flags\"/>,\n\t\t/// <see cref=\"InternalDate\"/>, and <see cref=\"Size\"/> values.</para>\n\t\t/// <para>This macro maps to the equivalent <c>ALL</c> macro as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tAll            = Envelope | Flags | InternalDate | Size,\n\n\t\t/// <summary>\n\t\t/// <para>A macro for fetching the <see cref=\"Flags\"/>, <see cref=\"InternalDate\"/>, and\n\t\t/// <see cref=\"Size\"/> values.</para>\n\t\t/// <para>This macro maps to the equivalent <c>FAST</c> macro as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tFast           = Flags | InternalDate | Size,\n\n\t\t/// <summary>\n\t\t/// <para>A macro for fetching the <see cref=\"Body\"/>, <see cref=\"Envelope\"/>,\n\t\t/// <see cref=\"Flags\"/>, <see cref=\"InternalDate\"/>, and <see cref=\"Size\"/> values.</para>\n\t\t/// <para>This macro maps to the equivalent <c>FULL</c> macro as defined in\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501\">rfc3501</a>.</para>\n\t\t/// </summary>\n\t\tFull           = Body | Envelope | Flags| InternalDate | Size,\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageThread.cs",
    "content": "﻿//\n// MessageThread.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A message thread.\n\t/// </summary>\n\t/// <remarks>\n\t/// A message thread.\n\t/// </remarks>\n\tpublic class MessageThread\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageThread\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new message thread node.\n\t\t/// </remarks>\n\t\t/// <param name=\"uid\">The unique identifier of the message.</param>\n\t\tpublic MessageThread (UniqueId? uid)\n\t\t{\n\t\t\tChildren = new List<MessageThread> ();\n\t\t\tUniqueId = uid;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageThread\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new message thread node.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message summary.</param>\n\t\tpublic MessageThread (IMessageSummary? message)\n\t\t{\n\t\t\tChildren = new List<MessageThread> ();\n\t\t\tif (message != null && message.UniqueId.IsValid)\n\t\t\t\tUniqueId = message.UniqueId;\n\t\t\tMessage = message;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the message summary, if available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message summary, if available.</para>\n\t\t/// <note type=\"note\">This property will only ever be set if the <see cref=\"MessageThread\"/>\n\t\t/// was created by the <see cref=\"MessageThreader\"/>. <see cref=\"MessageThread\"/>s that are\n\t\t/// created by any of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapFolder_Thread.htm\">Thread</a> or\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapFolder_ThreadAsync.htm\">ThreadAsync</a>\n\t\t/// methods will always be <see langword=\"null\" />.</note>\n\t\t/// </remarks>\n\t\t/// <value>The message summary.</value>\n\t\tpublic IMessageSummary? Message {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the unique identifier of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The unique identifier may be <see langword=\"null\" /> if the message is missing from the\n\t\t/// <see cref=\"IMailFolder\"/> or from the list of messages provided to the\n\t\t/// <see cref=\"MessageThreader\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifier.</value>\n\t\tpublic UniqueId? UniqueId {\n\t\t\t// FIXME: this shouldn't be a nullable since we can just use UniqueId.Invalid\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the children.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Each child represents a reply to the message referenced by <see cref=\"UniqueId\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The children.</value>\n\t\tpublic IList<MessageThread> Children {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessageThreader.cs",
    "content": "﻿//\n// MessageThreader.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nusing MailKit.Search;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Threads messages according to the algorithms defined in rfc5256.\n\t/// </summary>\n\t/// <remarks>\n\t/// Threads messages according to the algorithms defined in rfc5256.\n\t/// </remarks>\n\tpublic static class MessageThreader\n\t{\n\t\tinternal class ThreadableNode : IMessageSummary\n\t\t{\n\t\t\tpublic readonly List<ThreadableNode> Children = new List<ThreadableNode> ();\n\t\t\tpublic IMessageSummary? Message;\n\t\t\tpublic ThreadableNode? Parent;\n\n\t\t\tpublic ThreadableNode (IMessageSummary? message)\n\t\t\t{\n\t\t\t\tMessage = message;\n\t\t\t}\n\n\t\t\t[MemberNotNullWhen (true, nameof (Parent))]\n\t\t\tpublic bool HasParent {\n\t\t\t\tget { return Parent != null; }\n\t\t\t}\n\n\t\t\tpublic bool HasChildren {\n\t\t\t\tget { return Children.Count > 0; }\n\t\t\t}\n\n\t\t\tpublic IMailFolder? Folder => null;\n\n\t\t\tpublic MessageSummaryItems Fields {\n\t\t\t\tget { return MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.ModSeq | MessageSummaryItems.Size; }\n\t\t\t}\n\n\t\t\tpublic BodyPart? Body => null;\n\n\t\t\tpublic BodyPartText? TextBody => null;\n\n\t\t\tpublic BodyPartText? HtmlBody => null;\n\n\t\t\tpublic IEnumerable<BodyPartBasic> BodyParts => Array.Empty<BodyPartBasic> ();\n\n\t\t\tpublic IEnumerable<BodyPartBasic> Attachments => Array.Empty<BodyPartBasic> ();\n\n\t\t\tpublic string? PreviewText => null;\n\n\t\t\tpublic Envelope? Envelope {\n\t\t\t\tget { return Message != null ? Message.Envelope : Children[0].Envelope; }\n\t\t\t}\n\n\t\t\tpublic string NormalizedSubject {\n\t\t\t\tget { return Message != null ? Message.NormalizedSubject : Children[0].NormalizedSubject; }\n\t\t\t}\n\n\t\t\tpublic DateTimeOffset Date {\n\t\t\t\tget { return Message != null ? Message.Date : Children[0].Date; }\n\t\t\t}\n\n\t\t\tpublic bool IsReply {\n\t\t\t\tget { return Message != null && Message.IsReply; }\n\t\t\t}\n\n\t\t\tpublic MessageFlags? Flags => null;\n\n\t\t\tpublic IReadOnlySetOfStrings Keywords {\n\t\t\t\tget { return new HashSet<string> (); }\n\t\t\t}\n\n\t\t\tpublic IReadOnlyList<Annotation>? Annotations {\n\t\t\t\tget { return Message != null ? Message.Annotations : Children[0].Annotations; }\n\t\t\t}\n\n\t\t\tpublic HeaderList? Headers => null;\n\n\t\t\tpublic DateTimeOffset? InternalDate => null;\n\n\t\t\tpublic DateTimeOffset? SaveDate => null;\n\n\t\t\tpublic uint? Size {\n\t\t\t\tget { return Message != null ? Message.Size : Children[0].Size; }\n\t\t\t}\n\n\t\t\tpublic ulong? ModSeq {\n\t\t\t\tget { return Message != null ? Message.ModSeq : Children[0].ModSeq; }\n\t\t\t}\n\n\t\t\tpublic MessageIdList? References {\n\t\t\t\tget { return Message != null ? Message.References : Children[0].References; }\n\t\t\t}\n\n\t\t\tpublic string? EmailId => null;\n\n\t\t\tpublic string? ThreadId => null;\n\n\t\t\tpublic UniqueId UniqueId {\n\t\t\t\tget { return Message != null ? Message.UniqueId : Children[0].UniqueId; }\n\t\t\t}\n\n\t\t\tpublic int Index {\n\t\t\t\tget { return Message != null ? Message.Index : Children[0].Index; }\n\t\t\t}\n\n\t\t\tpublic ulong? GMailMessageId => null;\n\n\t\t\tpublic ulong? GMailThreadId => null;\n\n\t\t\tpublic IList<string>? GMailLabels => null;\n\t\t}\n\n\t\tstatic Dictionary<string, ThreadableNode> CreateIdTable (IEnumerable<IMessageSummary> messages)\n\t\t{\n\t\t\tvar ids = new Dictionary<string, ThreadableNode> (StringComparer.OrdinalIgnoreCase);\n\n\t\t\tforeach (var message in messages) {\n\t\t\t\tif (message.Envelope == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more messages is missing information needed for threading.\", nameof (messages));\n\n\t\t\t\tvar id = message.Envelope.MessageId;\n\n\t\t\t\tif (string.IsNullOrEmpty (id))\n\t\t\t\t\tid = MimeUtils.GenerateMessageId ();\n\n\t\t\t\tif (ids.TryGetValue (id!, out var node)) {\n\t\t\t\t\tif (node.Message == null) {\n\t\t\t\t\t\t// a previously processed message referenced this message\n\t\t\t\t\t\tnode.Message = message;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// a duplicate message-id, just create a dummy id and use that\n\t\t\t\t\t\tid = MimeUtils.GenerateMessageId ();\n\t\t\t\t\t\tnode = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (node == null) {\n\t\t\t\t\t// create a new ThreadContainer for this message and add it to ids\n\t\t\t\t\tnode = new ThreadableNode (message);\n\t\t\t\t\tids.Add (id!, node);\n\t\t\t\t}\n\n\t\t\t\tThreadableNode? parent = null;\n\n\t\t\t\tif (message.References != null) {\n\t\t\t\t\tforeach (var reference in message.References) {\n\t\t\t\t\t\tif (!ids.TryGetValue (reference, out var referenced)) {\n\t\t\t\t\t\t\t// create a dummy container for the referenced message\n\t\t\t\t\t\t\treferenced = new ThreadableNode (null);\n\t\t\t\t\t\t\tids.Add (reference, referenced);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// chain up the references, disallowing loops\n\t\t\t\t\t\tif (parent != null && referenced.Parent == null && parent != referenced && !parent.Children.Contains (referenced)) {\n\t\t\t\t\t\t\tparent.Children.Add (referenced);\n\t\t\t\t\t\t\treferenced.Parent = parent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparent = referenced;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// don't allow loops\n\t\t\t\tif (parent != null && (parent == node || node.Children.Contains (parent)))\n\t\t\t\t\tparent = null;\n\n\t\t\t\tif (node.HasParent) {\n\t\t\t\t\t// unlink from our old parent\n\t\t\t\t\tnode.Parent.Children.Remove (node);\n\t\t\t\t\tnode.Parent = null;\n\t\t\t\t}\n\n\t\t\t\tif (parent != null) {\n\t\t\t\t\t// add it as a child of our new parent\n\t\t\t\t\tparent.Children.Add (node);\n\t\t\t\t\tnode.Parent = parent;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ids;\n\t\t}\n\n\t\tstatic ThreadableNode CreateRoot (IDictionary<string, ThreadableNode> ids)\n\t\t{\n\t\t\tvar root = new ThreadableNode (null);\n\n\t\t\tforeach (var message in ids.Values) {\n\t\t\t\tif (message.Parent == null)\n\t\t\t\t\troot.Children.Add (message);\n\t\t\t}\n\n\t\t\treturn root;\n\t\t}\n\n\t\tstatic void PruneEmptyContainers (ThreadableNode root)\n\t\t{\n\t\t\tfor (int i = 0; i < root.Children.Count; i++) {\n\t\t\t\tvar node = root.Children[i];\n\n\t\t\t\tif (node.Message == null && node.Children.Count == 0) {\n\t\t\t\t\t// this is an empty container with no children, nuke it.\n\t\t\t\t\troot.Children.RemoveAt (i);\n\t\t\t\t\ti--;\n\t\t\t\t} else if (node.Message == null && node.HasChildren && (node.HasParent || node.Children.Count == 1)) {\n\t\t\t\t\t// If the Container has no Message, but does have children, remove this container but promote\n\t\t\t\t\t// its children to this level (that is, splice them in to the current child list.)\n\t\t\t\t\t//\n\t\t\t\t\t// Do not promote the children if doing so would promote them to the root set -- unless there\n\t\t\t\t\t// is only one child, in which case, do.\n\t\t\t\t\troot.Children.RemoveAt (i);\n\n\t\t\t\t\tfor (int j = 0; j < node.Children.Count; j++) {\n\t\t\t\t\t\tnode.Children[j].Parent = node.Parent;\n\t\t\t\t\t\troot.Children.Add (node.Children[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tnode.Children.Clear ();\n\t\t\t\t\ti--;\n\t\t\t\t} else if (node.HasChildren) {\n\t\t\t\t\tPruneEmptyContainers (node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void GroupBySubject (ThreadableNode root)\n\t\t{\n\t\t\tvar subjects = new Dictionary<string, ThreadableNode> (StringComparer.OrdinalIgnoreCase);\n\t\t\tThreadableNode? match;\n\t\t\tint count = 0;\n\n\t\t\tfor (int i = 0; i < root.Children.Count; i++) {\n\t\t\t\tvar current = root.Children[i];\n\t\t\t\tvar subject = current.NormalizedSubject;\n\n\t\t\t\t// don't thread messages with empty subjects\n\t\t\t\tif (string.IsNullOrEmpty (subject))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (!subjects.TryGetValue (subject, out match) ||\n\t\t\t\t\t(current.Message == null && match.Message != null) ||\n\t\t\t\t\t(match.Message != null && match.Message.IsReply &&\n\t\t\t\t\t\tcurrent.Message != null && !current.Message.IsReply)) {\n\t\t\t\t\tsubjects[subject] = current;\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (count == 0)\n\t\t\t\treturn;\n\n\t\t\tfor (int i = 0; i < root.Children.Count; i++) {\n\t\t\t\tvar current = root.Children[i];\n\t\t\t\tvar subject = current.NormalizedSubject;\n\n\t\t\t\t// don't thread messages with empty subjects\n\t\t\t\tif (string.IsNullOrEmpty (subject))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tmatch = subjects[subject];\n\n\t\t\t\tif (match == current)\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// remove the second message with the same subject\n\t\t\t\troot.Children.RemoveAt (i--);\n\n\t\t\t\t// group these messages together...\n\t\t\t\tif (match.Message == null && current.Message == null) {\n\t\t\t\t\t// If both messages are dummies, append the current message's children\n\t\t\t\t\t// to the children of the message in the subject table (the children of\n\t\t\t\t\t// both messages become siblings), and then delete the current message.\n\t\t\t\t\tmatch.Children.AddRange (current.Children);\n\t\t\t\t} else if (match.Message == null && current.Message != null) {\n\t\t\t\t\t// If the message in the subject table is a dummy and the current message\n\t\t\t\t\t// is not, make the current message a child of the message in the subject\n\t\t\t\t\t// table (a sibling of its children).\n\t\t\t\t\tmatch.Children.Add (current);\n\t\t\t\t} else if (current.IsReply && !match.IsReply) {\n\t\t\t\t\t// If the current message is a reply or forward and the message in the\n\t\t\t\t\t// subject table is not, make the current message a child of the message\n\t\t\t\t\t// in the subject table (a sibling of its children).\n\t\t\t\t\tmatch.Children.Add (current);\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, create a new dummy message and make both the current message\n\t\t\t\t\t// and the message in the subject table children of the dummy. Then replace\n\t\t\t\t\t// the message in the subject table with the dummy message.\n\n\t\t\t\t\t// Note: if we re-use the node already in the subject table and the root, then\n\t\t\t\t\t// we won't have to insert the new dummy node at the matched node's location\n\t\t\t\t\tvar dummy = match;\n\n\t\t\t\t\t// clone the message already in the subject table\n\t\t\t\t\tmatch = new ThreadableNode (dummy.Message);\n\t\t\t\t\tmatch.Children.AddRange (dummy.Children);\n\n\t\t\t\t\t// empty out the old match node (aka the new dummy node)\n\t\t\t\t\tdummy.Children.Clear ();\n\t\t\t\t\tdummy.Message = null;\n\n\t\t\t\t\t// now add both messages to the dummy\n\t\t\t\t\tdummy.Children.Add (match);\n\t\t\t\t\tdummy.Children.Add (current);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void GetThreads (ThreadableNode root, IList<MessageThread> threads, IList<OrderBy> orderBy)\n\t\t{\n\t\t\troot.Children.Sort (orderBy);\n\n\t\t\tfor (int i = 0; i < root.Children.Count; i++) {\n\t\t\t\tvar message = root.Children[i].Message;\n\t\t\t\tvar thread = new MessageThread (message);\n\n\t\t\t\tGetThreads (root.Children[i], thread.Children, orderBy);\n\t\t\t\tthreads.Add (thread);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<MessageThread> ThreadByReferences (IEnumerable<IMessageSummary> messages, IList<OrderBy> orderBy)\n\t\t{\n\t\t\tvar threads = new List<MessageThread> ();\n\t\t\tvar ids = CreateIdTable (messages);\n\t\t\tvar root = CreateRoot (ids);\n\n\t\t\tPruneEmptyContainers (root);\n\t\t\tGroupBySubject (root);\n\n\t\t\tGetThreads (root, threads, orderBy);\n\n\t\t\treturn threads;\n\t\t}\n\n\t\tstatic List<MessageThread> ThreadBySubject (IEnumerable<IMessageSummary> messages, IList<OrderBy> orderBy)\n\t\t{\n\t\t\tvar threads = new List<MessageThread> ();\n\t\t\tvar root = new ThreadableNode (null);\n\n\t\t\tforeach (var message in messages) {\n\t\t\t\tif (message.Envelope == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more messages is missing information needed for threading.\", nameof (messages));\n\n\t\t\t\tvar node = new ThreadableNode (message);\n\n\t\t\t\troot.Children.Add (node);\n\t\t\t}\n\n\t\t\tGroupBySubject (root);\n\n\t\t\tGetThreads (root, threads, orderBy);\n\n\t\t\treturn threads;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Thread the messages according to the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Thread the messages according to the specified threading algorithm.\n\t\t/// </remarks>\n\t\t/// <returns>The threaded messages.</returns>\n\t\t/// <param name=\"messages\">The messages.</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"messages\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not a valid threading algorithm.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"messages\"/> contains one or more items that is missing information needed for threading.\n\t\t/// </exception>\n\t\tpublic static IList<MessageThread> Thread (this IEnumerable<IMessageSummary> messages, ThreadingAlgorithm algorithm)\n\t\t{\n\t\t\treturn Thread (messages, algorithm, new [] { OrderBy.Arrival });\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Threads the messages according to the specified threading algorithm\n\t\t/// and sorts the resulting threads by the specified ordering.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Threads the messages according to the specified threading algorithm\n\t\t/// and sorts the resulting threads by the specified ordering.\n\t\t/// </remarks>\n\t\t/// <returns>The threaded messages.</returns>\n\t\t/// <param name=\"messages\">The messages.</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm.</param>\n\t\t/// <param name=\"orderBy\">The requested sort ordering.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"messages\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not a valid threading algorithm.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"messages\"/> contains one or more items that is missing information needed for threading or sorting.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is an empty list.</para>\n\t\t/// </exception>\n\t\tpublic static IList<MessageThread> Thread (this IEnumerable<IMessageSummary> messages, ThreadingAlgorithm algorithm, IList<OrderBy> orderBy)\n\t\t{\n\t\t\tif (messages == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (messages));\n\n\t\t\tif (orderBy == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (orderBy));\n\n\t\t\tif (orderBy.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No sort order provided.\", nameof (orderBy));\n\n\t\t\tswitch (algorithm) {\n\t\t\tcase ThreadingAlgorithm.OrderedSubject: return ThreadBySubject (messages, orderBy);\n\t\t\tcase ThreadingAlgorithm.References: return ThreadByReferences (messages, orderBy);\n\t\t\tdefault: throw new ArgumentOutOfRangeException (nameof (algorithm));\n\t\t\t}\n\t\t}\n\n\t\tstatic bool IsForward (string subject, int index)\n\t\t{\n\t\t\treturn (subject[index] == 'F' || subject[index] == 'f') &&\n\t\t\t\t(subject[index + 1] == 'W' || subject[index + 1] == 'w') &&\n\t\t\t\t(subject[index + 2] == 'D' || subject[index + 2] == 'd') &&\n\t\t\t\tsubject[index + 3] == ':';\n\t\t}\n\n\t\tstatic bool IsReply (string subject, int index)\n\t\t{\n\t\t\treturn (subject[index] == 'R' || subject[index] == 'r') &&\n\t\t\t\t(subject[index + 1] == 'E' || subject[index + 1] == 'e');\n\t\t}\n\n\t\tstatic void SkipWhiteSpace (string subject, ref int index)\n\t\t{\n\t\t\twhile (index < subject.Length && char.IsWhiteSpace (subject[index]))\n\t\t\t\tindex++;\n\t\t}\n\n\t\tstatic bool IsMailingListName (char c)\n\t\t{\n\t\t\treturn c == '-' || c == '_' || char.IsLetterOrDigit (c);\n\t\t}\n\n\t\tstatic void SkipMailingListName (string subject, ref int index)\n\t\t{\n\t\t\twhile (index < subject.Length && IsMailingListName (subject[index]))\n\t\t\t\tindex++;\n\t\t}\n\n\t\tstatic bool SkipDigits (string subject, ref int index, out int value)\n\t\t{\n\t\t\tint startIndex = index;\n\n\t\t\tvalue = 0;\n\n\t\t\twhile (index < subject.Length && char.IsDigit (subject[index])) {\n\t\t\t\tvalue = (value * 10) + (subject[index] - '0');\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn index > startIndex;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the threadable subject.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the threadable subject.\n\t\t/// </remarks>\n\t\t/// <returns>The threadable subject.</returns>\n\t\t/// <param name=\"subject\">The Subject header value.</param>\n\t\t/// <param name=\"replyDepth\">The reply depth.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"subject\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static string GetThreadableSubject (string subject, out int replyDepth)\n\t\t{\n\t\t\tif (subject == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (subject));\n\n\t\t\treplyDepth = 0;\n\n\t\t\tint endIndex = subject.Length;\n\t\t\tint startIndex = 0;\n\t\t\tint index, left;\n\n\t\t\tdo {\n\t\t\t\tSkipWhiteSpace (subject, ref startIndex);\n\t\t\t\tindex = startIndex;\n\n\t\t\t\tif ((left = (endIndex - index)) < 3)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (left >= 4 && IsForward (subject, index)) {\n\t\t\t\t\t// skip over the \"Fwd:\" prefix\n\t\t\t\t\tstartIndex = index + 4;\n\t\t\t\t\treplyDepth++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (IsReply (subject, index)) {\n\t\t\t\t\tif (subject[index + 2] == ':') {\n\t\t\t\t\t\t// skip over the \"Re:\" prefix\n\t\t\t\t\t\tstartIndex = index + 3;\n\t\t\t\t\t\treplyDepth++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (subject[index + 2] == '[' || subject[index + 2] == '(') {\n\t\t\t\t\t\tchar close = subject[index + 2] == '[' ? ']' : ')';\n\n\t\t\t\t\t\t// skip over \"Re[\" or \"Re(\"\n\t\t\t\t\t\tindex += 3;\n\n\t\t\t\t\t\t// if this is followed by \"###]:\" or \"###):\", then it's a condensed \"Re:\"\n\t\t\t\t\t\tif (SkipDigits (subject, ref index, out int count) && (endIndex - index) >= 2 &&\n\t\t\t\t\t\t\tsubject[index] == close && subject[index + 1] == ':') {\n\t\t\t\t\t\t\tstartIndex = index + 2;\n\t\t\t\t\t\t\treplyDepth += count;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (subject[index] == '[' && char.IsLetterOrDigit (subject[index + 1])) {\n\t\t\t\t\t// possibly a mailing-list prefix\n\t\t\t\t\tindex += 2;\n\n\t\t\t\t\tSkipMailingListName (subject, ref index);\n\n\t\t\t\t\tif ((endIndex - index) >= 1 && subject[index] == ']') {\n\t\t\t\t\t\tstartIndex = index + 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t} while (true);\n\n\t\t\t// trim trailing whitespace\n\t\t\twhile (endIndex > 0 && char.IsWhiteSpace (subject[endIndex - 1]))\n\t\t\t\tendIndex--;\n\n\t\t\t// canonicalize the remainder of the subject, condensing multiple spaces into 1\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbool lwsp = false;\n\n\t\t\tfor (int i = startIndex; i < endIndex; i++) {\n\t\t\t\tif (char.IsWhiteSpace (subject[i])) {\n\t\t\t\t\tif (!lwsp) {\n\t\t\t\t\t\tbuilder.Append (' ');\n\t\t\t\t\t\tlwsp = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbuilder.Append (subject[i]);\n\t\t\t\t\tlwsp = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar canonicalized = builder.ToString ();\n\n\t\t\tif (canonicalized.Equals (\"(no subject)\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tcanonicalized = string.Empty;\n\n\t\t\treturn canonicalized;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MessagesVanishedEventArgs.cs",
    "content": "//\n// MessagesVanishedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when a message vanishes from a folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when a message vanishes from a folder.\n\t/// </remarks>\n\tpublic class MessagesVanishedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessagesVanishedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessagesVanishedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The list of unique identifiers.</param>\n\t\t/// <param name=\"earlier\">If set to <see langword=\"true\" />, the messages vanished in the past as opposed to just now.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic MessagesVanishedEventArgs (IList<UniqueId> uids, bool earlier)\n\t\t{\n\t\t\tUniqueIds = new ReadOnlyCollection<UniqueId> (uids);\n\t\t\tEarlier = earlier;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the unique identifiers of the messages that vanished.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the unique identifiers of the messages that vanished.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifiers.</value>\n\t\tpublic IList<UniqueId> UniqueIds {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the messages vanished in the past as opposed to just now.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the messages vanished in the past as opposed to just now.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the messages vanished earlier; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool Earlier {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Metadata.cs",
    "content": "﻿//\n// Metadata.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A metadata tag and value.\n\t/// </summary>\n\t/// <remarks>\n\t/// A metadata tag and value.\n\t/// </remarks>\n\tpublic class Metadata\n\t{\n\t\tinternal string EncodedName;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Metadata\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Metadata\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"value\">The metadata value.</param>\n\t\tpublic Metadata (MetadataTag tag, string value)\n\t\t{\n\t\t\tEncodedName = string.Empty;\n\t\t\tValue = value;\n\t\t\tTag = tag;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the metadata tag.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the metadata tag.\n\t\t/// </remarks>\n\t\t/// <value>The metadata tag.</value>\n\t\tpublic MetadataTag Tag {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the metadata value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the metadata value.\n\t\t/// </remarks>\n\t\t/// <value>The metadata value.</value>\n\t\tpublic string Value {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MetadataChangedEventArgs.cs",
    "content": "﻿//\n// MetadataChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Event args used when a metadata changes.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args used when a metadata changes.\n\t/// </remarks>\n\tpublic class MetadataChangedEventArgs : EventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.MetadataChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MetadataChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata that changed.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic MetadataChangedEventArgs (Metadata metadata)\n\t\t{\n\t\t\tif (metadata == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (metadata));\n\n\t\t\tMetadata = metadata;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the metadata that changed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the metadata that changed.\n\t\t/// </remarks>\n\t\t/// <value>The metadata.</value>\n\t\tpublic Metadata Metadata {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MetadataCollection.cs",
    "content": "﻿//\n// MetadataCollection.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A collection of metadata.\n\t/// </summary>\n\t/// <remarks>\n\t/// A collection of metadata.\n\t/// </remarks>\n\tpublic class MetadataCollection : List<Metadata>\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MetadataCollection\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MetadataCollection\"/>\n\t\t/// </remarks>\n\t\tpublic MetadataCollection ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MetadataCollection\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MetadataCollection\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"collection\">A collection of metadata.</param>\n\t\tpublic MetadataCollection (IEnumerable<Metadata> collection) : base (collection)\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MetadataOptions.cs",
    "content": "﻿//\n// MetadataOptions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit\n{\n\t/// <summary>\n\t/// A set of options to use when requesting metadata.\n\t/// </summary>\n\t/// <remarks>\n\t/// A set of options to use when requesting metadata.\n\t/// </remarks>\n\tpublic class MetadataOptions\n\t{\n\t\tint depth;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.MetadataOptions\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new set of options to use when requesting metadata.\n\t\t/// </remarks>\n\t\tpublic MetadataOptions ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the depth.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>When the <see cref=\"Depth\"/> option is specified, it extends the list of metadata tag\n\t\t/// values returned by the GetMetadata() call. For each <see cref=\"MetadataTag\"/> specified in the\n\t\t/// the GetMetadata() call, the method returns the value of the specified metadata tag (if it exists),\n\t\t/// plus all metadata tags below the specified entry up to the specified depth.</para>\n\t\t/// <para>Three values are allowed for <see cref=\"Depth\"/>:</para>\n\t\t/// <para><c>0</c> - no entries below the specified metadata tag are returned.</para>\n\t\t/// <para><c>1</c> - only entries immediately below the specified metadata tag are returned.</para>\n\t\t/// <para><see cref=\"System.Int32.MaxValue\"/> - all entries below the specified metadata tag are returned.</para>\n\t\t/// <para>Thus, a depth of <c>1</c> for a tag entry of <c>\"/a\"</c> will match <c>\"/a\"</c> as well as its children\n\t\t/// entries (e.g., <c>\"/a/b\"</c>), but will not match grandchildren entries (e.g., <c>\"/a/b/c\"</c>).</para>\n\t\t/// <para>If the Depth option is not specified, this is the same as specifying <c>0</c>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The depth.</value>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"value\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic int Depth {\n\t\t\tget { return depth; }\n\t\t\tset {\n\t\t\t\tif (!(value == 0 || value == 1 || value == int.MaxValue))\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (value));\n\n\t\t\t\tdepth = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the max size of the metadata tags to request.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// When specified, the <see cref=\"MaxSize\"/> property is used to filter the metadata tags\n\t\t/// returned by the GetMetadata() call to only those with a value shorter than the max size\n\t\t/// specified.\n\t\t/// </remarks>\n\t\t/// <value>The size of the max.</value>\n\t\tpublic uint? MaxSize {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the length of the longest metadata value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the <see cref=\"MaxSize\"/> property is specified, once the GetMetadata() call returns,\n\t\t/// the <see cref=\"LongEntries\"/> property will be set to the length of the longest metadata\n\t\t/// value that exceeded the <see cref=\"MaxSize\"/> limit, otherwise a value of <c>0</c> will\n\t\t/// be set.\n\t\t/// </remarks>\n\t\t/// <value>The length of the longest metadata value that exceeded the max size.</value>\n\t\tpublic uint LongEntries {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/MetadataTag.cs",
    "content": "﻿//\n// MetadataTag.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A metadata tag.\n\t/// </summary>\n\t/// <remarks>\n\t/// A metadata tag.\n\t/// </remarks>\n\tpublic struct MetadataTag\n\t{\n\t\t/// <summary>\n\t\t/// A metadata tag for specifying the contact information for the server administrator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get the contact information of the administrator on a\n\t\t/// <see cref=\"IMailStore\"/>.\n\t\t/// </remarks>\n\t\tpublic static readonly MetadataTag SharedAdmin = new MetadataTag (\"/shared/admin\");\n\n\t\t/// <summary>\n\t\t/// A metadata tag for private comments.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a private comment on a <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\tpublic static readonly MetadataTag PrivateComment = new MetadataTag (\"/private/comment\");\n\n\t\t/// <summary>\n\t\t/// A metadata tag for shared comments.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set a shared comment on a <see cref=\"IMailStore\"/>\n\t\t/// or <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\tpublic static readonly MetadataTag SharedComment = new MetadataTag (\"/shared/comment\");\n\n\t\t/// <summary>\n\t\t/// A metadata tag for specifying the special use of a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Used to get or set the special use of a <see cref=\"IMailFolder\"/>.\n\t\t/// </remarks>\n\t\tpublic static readonly MetadataTag PrivateSpecialUse = new MetadataTag (\"/private/specialuse\");\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MetadataTag\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MetadataTag\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"id\">The metadata tag identifier.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"id\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"id\"/> is an empty string.\n\t\t/// </exception>\n\t\tpublic MetadataTag (string id)\n\t\t{\n\t\t\tif (id == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (id));\n\n\t\t\tif (id.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"A metadata tag identifier cannot be empty.\");\n\n\t\t\tId = id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the metadata tag identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the metadata tag identifier.\n\t\t/// </remarks>\n\t\t/// <value>The metadata tag identifier.</value>\n\t\tpublic string Id {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.MetadataTag\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.MetadataTag\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"obj\">The <see cref=\"System.Object\"/> to compare with the current <see cref=\"MailKit.MetadataTag\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"System.Object\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.MetadataTag\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic override bool Equals (object? obj)\n\t\t{\n\t\t\treturn obj is MetadataTag tag && tag.Id == Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.MetadataTag\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.MetadataTag\"/> object.\n\t\t/// </remarks>\n\t\t/// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a hash table.</returns>\n\t\tpublic override int GetHashCode ()\n\t\t{\n\t\t\treturn Id.GetHashCode ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.MetadataTag\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.MetadataTag\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.MetadataTag\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn Id;\n\t\t}\n\n\t\tinternal static MetadataTag Create (string id)\n\t\t{\n\t\t\tswitch (id) {\n\t\t\tcase \"/shared/admin\":       return SharedAdmin;\n\t\t\tcase \"/private/comment\":    return PrivateComment;\n\t\t\tcase \"/shared/comment\":     return SharedComment;\n\t\t\tcase \"/private/specialuse\": return PrivateSpecialUse;\n\t\t\tdefault: return new MetadataTag (id);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ModSeqChangedEventArgs.cs",
    "content": "﻿//\n// ModSeqChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit\n{\n\t/// <summary>\n\t/// Event args for the <see cref=\"IMailFolder.ModSeqChanged\"/> event.\n\t/// </summary>\n\t/// <remarks>\n\t/// Event args for the <see cref=\"IMailFolder.ModSeqChanged\"/> event.\n\t/// </remarks>\n\tpublic class ModSeqChangedEventArgs : MessageEventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.MessageFlagsChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MessageFlagsChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\tpublic ModSeqChangedEventArgs (int index, ulong modseq) : base (index)\n\t\t{\n\t\t\tModSeq = modseq;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ModSeqChangedEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ModSeqChangedEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"uid\">The unique id of the message.</param>\n\t\t/// <param name=\"modseq\">The modification sequence value.</param>\n\t\tpublic ModSeqChangedEventArgs (int index, UniqueId uid, ulong modseq) : base (index, uid)\n\t\t{\n\t\t\tModSeq = modseq;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the updated mod-sequence value of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the updated mod-sequence value of the message.\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence value.</value>\n\t\tpublic ulong ModSeq {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/ClientMetrics.cs",
    "content": "﻿//\n// ClientMetrics.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0_OR_GREATER\n\nusing System;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Diagnostics.Metrics;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MailKit.Net.Smtp;\nusing MailKit.Security;\n\nnamespace MailKit.Net {\n\tsealed class ClientMetrics\n\t{\n\t\tpublic readonly Histogram<double> ConnectionDuration;\n\t\tpublic readonly Counter<long> OperationCounter;\n\t\tpublic readonly Histogram<double> OperationDuration;\n\t\tpublic readonly string MeterName;\n\n\t\tpublic ClientMetrics (Meter meter, string meterName, string an, string protocol)\n\t\t{\n\t\t\tMeterName = meterName;\n\n\t\t\tConnectionDuration = meter.CreateHistogram<double> (\n\t\t\t\tname: $\"{meterName}.client.connection.duration\",\n\t\t\t\tunit: \"s\",\n\t\t\t\tdescription: $\"The duration of successfully established connections to {an} {protocol} server.\");\n\n\t\t\tOperationCounter = meter.CreateCounter<long> (\n\t\t\t\tname: $\"{meterName}.client.operation.count\",\n\t\t\t\tunit: \"{operation}\",\n\t\t\t\tdescription: $\"The number of times a client performed an operation on {an} {protocol} server.\");\n\n\t\t\tOperationDuration = meter.CreateHistogram<double> (\n\t\t\t\tname: $\"{meterName}.client.operation.duration\",\n\t\t\t\tunit: \"ms\",\n\t\t\t\tdescription: $\"The amount of time it takes for the {protocol} server to perform an operation.\");\n\t\t}\n\n\t\tstatic bool TryGetErrorType (Exception exception, [NotNullWhen (true)] out string? errorType)\n\t\t{\n\t\t\tif (SocketMetrics.TryGetErrorType (exception, false, out errorType))\n\t\t\t\treturn true;\n\n\t\t\tif (exception is SslHandshakeException) {\n\t\t\t\t// Note: The string \"secure_connection_error\" is used by HttpClient for SSL/TLS handshake errors.\n\t\t\t\terrorType = \"secure_connection_error\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (exception is ProtocolException) {\n\t\t\t\t// TODO: ProtocolExceptions tend to be either \"Unexpectedly disconnected\" or \"Parse error\".\n\t\t\t\t// If we add a property to ProtocolException to tell us this, we could report it better here.\n\t\t\t\t//\n\t\t\t\t// To mimic HttpClient error.type values, we could use \"response_ended\" and \"invalid_response\", respectively.\n\t\t\t\t//\n\t\t\t\t// Alternatively, HttpClient also uses \"http_protocol_error\" so we could use \"smtp/pop3/imap_protocol_error\".\n\t\t\t\terrorType = \"protocol_error\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (exception is SmtpCommandException smtp) {\n\t\t\t\terrorType = ((int) smtp.StatusCode).ToString (CultureInfo.InvariantCulture);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (exception is CommandException) {\n\t\t\t\t// FIXME: We need to add a property to CommandException to tell us the error type.\n\t\t\t\terrorType = \"command_error\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Fall back to using the exception type name.\n\t\t\terrorType = exception.GetType ().FullName;\n\n\t\t\treturn errorType != null;\n\t\t}\n\n\t\tinternal static TagList GetTags (Uri uri, Exception? ex)\n\t\t{\n\t\t\tvar tags = new TagList {\n\t\t\t\t{ \"url.scheme\", uri.Scheme },\n\t\t\t\t{ \"server.address\", uri.Host },\n\t\t\t\t{ \"server.port\", uri.Port }\n\t\t\t};\n\n\t\t\tif (ex is not null && TryGetErrorType (ex, out var errorType))\n\t\t\t\ttags.Add (\"error.type\", errorType);\n\n\t\t\treturn tags;\n\t\t}\n\n\t\tpublic void RecordClientDisconnected (long startTimestamp, Uri uri, Exception? ex = null)\n\t\t{\n\t\t\tif (ConnectionDuration.Enabled) {\n\t\t\t\tvar duration = TimeSpan.FromTicks (Stopwatch.GetTimestamp () - startTimestamp).TotalSeconds;\n\t\t\t\tvar tags = GetTags (uri, ex);\n\n\t\t\t\tConnectionDuration.Record (duration, tags);\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0_OR_GREATER\n"
  },
  {
    "path": "MailKit/Net/IChannelBindingContext.cs",
    "content": "﻿//\n// IChannelBindingContext.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Diagnostics.CodeAnalysis;\nusing System.Security.Authentication.ExtendedProtection;\n\nnamespace MailKit.Net {\n\t/// <summary>\n\t/// An interface for resources that support acquiring channel-binding tokens.\n\t/// </summary>\n\t/// <remarks>\n\t/// An interface for resources that support acquiring channel-binding tokens.\n\t/// </remarks>\n\tinterface IChannelBindingContext\n\t{\n\t\t/// <summary>\n\t\t/// Try to get a channel-binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Tries to get the specified channel-binding.\n\t\t/// </remarks>\n\t\t/// <param name=\"kind\">The kind of channel-binding desired.</param>\n\t\t/// <param name=\"channelBinding\">The channel-binding.</param>\n\t\t/// <returns><see langword=\"true\" /> if the channel-binding token was acquired; otherwise, <see langword=\"false\" />.</returns>\n\t\tbool TryGetChannelBinding (ChannelBindingKind kind, [NotNullWhen (true)] out ChannelBinding? channelBinding);\n\n\t\t/// <summary>\n\t\t/// Try to get a channel-binding token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Tries to get the specified channel-binding token.\n\t\t/// </remarks>\n\t\t/// <param name=\"kind\">The kind of channel-binding desired.</param>\n\t\t/// <param name=\"token\">The channel-binding token.</param>\n\t\t/// <returns><see langword=\"true\" /> if the channel-binding token was acquired; otherwise, <see langword=\"false\" />.</returns>\n\t\tbool TryGetChannelBindingToken (ChannelBindingKind kind, [NotNullWhen (true)] out byte[]? token);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/AsyncImapClient.cs",
    "content": "﻿//\n// AsyncImapClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MailKit.Security;\n\nnamespace MailKit.Net.Imap\n{\n\tpublic partial class ImapClient\n\t{\n\t\t/// <summary>\n\t\t/// Asynchronously enable compression over the IMAP connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously enables compression over the IMAP connection.</para>\n\t\t/// <para>If the IMAP server supports the <see cref=\"ImapCapabilities.Compress\"/> extension,\n\t\t/// it is possible at any point after connecting to enable compression to reduce network\n\t\t/// bandwidth usage. Ideally, this method should be called before authenticating.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Compression must be enabled before a folder has been selected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the COMPRESS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the COMPRESS command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task CompressAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCompressCommand (cancellationToken);\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessCompressResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable the QRESYNC feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables the <a href=\"https://tools.ietf.org/html/rfc5162\">QRESYNC</a> feature.</para>\n\t\t/// <para>The QRESYNC extension improves resynchronization performance of folders by\n\t\t/// querying the IMAP server for a list of changes when the folder is opened using the\n\t\t/// <see cref=\"ImapFolder.Open(FolderAccess,uint,ulong,System.Collections.Generic.IList&lt;UniqueId&gt;,System.Threading.CancellationToken)\"/>\n\t\t/// method.</para>\n\t\t/// <para>If this feature is enabled, the <see cref=\"MailFolder.MessageExpunged\"/> event is replaced\n\t\t/// with the <see cref=\"MailFolder.MessagesVanished\"/> event.</para>\n\t\t/// <para>This method needs to be called immediately after calling one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a> methods, before\n\t\t/// opening any folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Quick resynchronization needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QRESYNC extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ENABLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task EnableQuickResyncAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueEnableQuickResyncCommand (cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessEnableResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable the UTF8=ACCEPT extension.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Enables the <a href=\"https://tools.ietf.org/html/rfc6855\">UTF8=ACCEPT</a> extension.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// UTF8=ACCEPT needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the UTF8=ACCEPT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ENABLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task EnableUTF8Async (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueEnableUTF8Command (cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessEnableResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously identify the client implementation to the server and obtain the server implementation details.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Passes along the client implementation details to the server while also obtaining implementation\n\t\t/// details from the server.</para>\n\t\t/// <para>If the <paramref name=\"clientImplementation\"/> is <see langword=\"null\" /> or no properties have been set, no\n\t\t/// identifying information will be sent to the server.</para>\n\t\t/// <note type=\"security\">\n\t\t/// <para>Security Implications</para>\n\t\t/// <para>This command has the danger of violating the privacy of users if misused. Clients should\n\t\t/// notify users that they send the ID command.</para>\n\t\t/// <para>It is highly desirable that implementations provide a method of disabling ID support, perhaps by\n\t\t/// not calling this method at all, or by passing <see langword=\"null\" /> as the <paramref name=\"clientImplementation\"/>\n\t\t/// argument.</para>\n\t\t/// <para>Implementors must exercise extreme care in adding properties to the <paramref name=\"clientImplementation\"/>.\n\t\t/// Some properties, such as a processor ID number, Ethernet address, or other unique (or mostly unique) identifier\n\t\t/// would allow tracking of users in ways that violate user privacy expectations and may also make it easier for\n\t\t/// attackers to exploit security holes in the client.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <returns>The implementation details of the server if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"clientImplementation\">The client implementation.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ID extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ID command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<ImapImplementation> IdentifyAsync (ImapImplementation clientImplementation, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueIdentifyCommand (clientImplementation, cancellationToken);\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessIdentifyResponse (ic);\n\t\t}\n\n\t\tasync Task OnAuthenticatedAsync (string message, CancellationToken cancellationToken)\n\t\t{\n\t\t\tawait engine.QueryNamespacesAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tawait engine.QuerySpecialFoldersAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tOnAuthenticated (message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task AuthenticateAsync (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanAuthenticate (mechanism, cancellationToken);\n\n\t\t\tint capabilitiesVersion = engine.CapabilitiesVersion;\n\t\t\tImapCommand? ic = null;\n\n\t\t\tConfigureSaslMechanism (mechanism);\n\n\t\t\tvar command = string.Format (\"AUTHENTICATE {0}\", mechanism.MechanismName);\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.SaslIR) != 0 && mechanism.SupportsInitialResponse) {\n\t\t\t\tstring ir = await mechanism.ChallengeAsync (null, cancellationToken).ConfigureAwait (false);\n\t\t\t\tcommand += \" \" + ir + \"\\r\\n\";\n\t\t\t} else {\n\t\t\t\tcommand += \"\\r\\n\";\n\t\t\t}\n\n\t\t\tic = engine.QueueCommand (cancellationToken, null, command);\n\t\t\tic.ContinuationHandler = async (imap, cmd, text, xdoAsync) => {\n\t\t\t\tstring challenge = await mechanism.ChallengeAsync (text, cmd.CancellationToken).ConfigureAwait (false);\n\t\t\t\tvar buf = Encoding.ASCII.GetBytes (challenge + \"\\r\\n\");\n\n\t\t\t\tawait imap.Stream!.WriteAsync (buf, 0, buf.Length, cmd.CancellationToken).ConfigureAwait (false);\n\t\t\t\tawait imap.Stream.FlushAsync (cmd.CancellationToken).ConfigureAwait (false);\n\t\t\t};\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tProcessAuthenticateResponse (ic, mechanism);\n\n\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t// untagged CAPABILITIES response to the AUTHENTICATE command.\n\t\t\t\tif (engine.CapabilitiesVersion == capabilitiesVersion)\n\t\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tawait OnAuthenticatedAsync (ic.ResponseText ?? string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the IMAP server supports one or more SASL authentication mechanisms,\n\t\t/// then the SASL mechanisms that both the client and server support (not including\n\t\t/// any OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then LOGIN command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The text encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task AuthenticateAsync (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanAuthenticate (encoding, credentials);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tint capabilitiesVersion = engine.CapabilitiesVersion;\n\t\t\t\tvar uri = new Uri (\"imap://\" + engine.Uri!.Host);\n\t\t\t\tNetworkCredential? cred;\n\t\t\t\tImapCommand? ic = null;\n\t\t\t\tSaslMechanism? sasl;\n\t\t\t\tstring id;\n\n\t\t\t\tforeach (var authmech in SaslMechanism.Rank (engine.AuthenticationMechanisms)) {\n\t\t\t\t\tcred = credentials.GetCredential (uri, authmech);\n\n\t\t\t\t\tif (cred == null || (sasl = SaslMechanism.Create (authmech, encoding, cred)) == null)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tConfigureSaslMechanism (sasl, uri);\n\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\tvar command = string.Format (\"AUTHENTICATE {0}\", sasl.MechanismName);\n\n\t\t\t\t\tif ((engine.Capabilities & ImapCapabilities.SaslIR) != 0 && sasl.SupportsInitialResponse) {\n\t\t\t\t\t\tstring ir = await sasl.ChallengeAsync (null, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tcommand += \" \" + ir + \"\\r\\n\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommand += \"\\r\\n\";\n\t\t\t\t\t}\n\n\t\t\t\t\tic = engine.QueueCommand (cancellationToken, null, command);\n\t\t\t\t\tic.ContinuationHandler = async (imap, cmd, text, xdoAsync) => {\n\t\t\t\t\t\tstring challenge = await sasl.ChallengeAsync (text, cmd.CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tvar buf = Encoding.ASCII.GetBytes (challenge + \"\\r\\n\");\n\n\t\t\t\t\t\tawait imap.Stream!.WriteAsync (buf, 0, buf.Length, cmd.CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tawait imap.Stream.FlushAsync (cmd.CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t};\n\n\t\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\t\t\tEmitAndThrowOnAlert (ic);\n\t\t\t\t\t\tif (ic.Bye)\n\t\t\t\t\t\t\tthrow ImapProtocolException.Create (ic);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tengine.State = ImapEngineState.Authenticated;\n\n\t\t\t\t\tid = GetSessionIdentifier (cred.UserName);\n\t\t\t\t\tif (id != identifier) {\n\t\t\t\t\t\tengine.FolderCache.Clear ();\n\t\t\t\t\t\tidentifier = id;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t\t// untagged CAPABILITIES response to the AUTHENTICATE command.\n\t\t\t\t\tif (engine.CapabilitiesVersion == capabilitiesVersion)\n\t\t\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tawait OnAuthenticatedAsync (ic.ResponseText ?? string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tCheckCanLogin (ic);\n\n\t\t\t\t// fall back to the classic LOGIN command...\n\t\t\t\tif ((cred = credentials.GetCredential (uri, \"DEFAULT\")) == null)\n\t\t\t\t\tthrow new AuthenticationException (\"No credentials could be found for the IMAP server.\");\n\n\t\t\t\tic = engine.QueueCommand (cancellationToken, null, \"LOGIN %S %S\\r\\n\", cred.UserName, cred.Password);\n\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tif (ic.Response != ImapCommandResponse.Ok)\n\t\t\t\t\tthrow CreateAuthenticationException (ic);\n\n\t\t\t\tengine.State = ImapEngineState.Authenticated;\n\n\t\t\t\tid = GetSessionIdentifier (cred.UserName);\n\t\t\t\tif (id != identifier) {\n\t\t\t\t\tengine.FolderCache.Clear ();\n\t\t\t\t\tidentifier = id;\n\t\t\t\t}\n\n\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t// untagged CAPABILITIES response to the LOGIN command.\n\t\t\t\tif (engine.CapabilitiesVersion == capabilitiesVersion)\n\t\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tawait OnAuthenticatedAsync (ic.ResponseText ?? string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tasync Task SslHandshakeAsync (SslStream ssl, string host, CancellationToken cancellationToken)\n\t\t{\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t\tawait ssl.AuthenticateAsClientAsync (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate), cancellationToken).ConfigureAwait (false);\n#else\n\t\t\tawait ssl.AuthenticateAsClientAsync (host, ClientCertificates, SslProtocols, CheckCertificateRevocation).ConfigureAwait (false);\n#endif\n\t\t}\n\n\t\tasync Task PostConnectAsync (Stream stream, string host, int port, SecureSocketOptions options, bool starttls, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\tProtocolLogger.LogConnect (engine.Uri!);\n\t\t\t} catch {\n\t\t\t\tstream.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tconnecting = true;\n\n\t\t\tvar imap = new ImapStream (stream, ProtocolLogger);\n\n\t\t\ttry {\n\t\t\t\tawait engine.ConnectAsync (imap, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch {\n\t\t\t\tconnecting = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Only query the CAPABILITIES if the greeting didn't include them.\n\t\t\t\tif (engine.CapabilitiesVersion == 0)\n\t\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (options == SecureSocketOptions.StartTls && (engine.Capabilities & ImapCapabilities.StartTLS) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the STARTTLS extension.\");\n\n\t\t\t\tif (starttls && (engine.Capabilities & ImapCapabilities.StartTLS) != 0) {\n\t\t\t\t\tvar ic = engine.QueueCommand (cancellationToken, null, \"STARTTLS\\r\\n\");\n\n\t\t\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t\tif (ic.Response == ImapCommandResponse.Ok) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar tls = new SslStream (stream, false, ValidateRemoteCertificate);\n\t\t\t\t\t\t\timap.Stream = tls;\n\n\t\t\t\t\t\t\tawait SslHandshakeAsync (tls, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, true, \"IMAP\", host, port, 993, 143);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tengine.IsSecure = true;\n\n\t\t\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t\t\t// untagged CAPABILITIES response to the STARTTLS command.\n\t\t\t\t\t\tif (engine.CapabilitiesVersion == 1)\n\t\t\t\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} else if (options == SecureSocketOptions.StartTls) {\n\t\t\t\t\t\tthrow ImapCommandException.Create (\"STARTTLS\", ic);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tengine.Disconnect (ex);\n\t\t\t\tthrow;\n\t\t\t} finally {\n\t\t\t\tconnecting = false;\n\t\t\t}\n\n\t\t\t// Note: we capture the state here in case someone calls Authenticate() from within the Connected event handler.\n\t\t\tvar authenticated = engine.State == ImapEngineState.Authenticated;\n\n\t\t\tOnConnected (host, port, options);\n\n\t\t\tif (authenticated)\n\t\t\t\tawait OnAuthenticatedAsync (string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified IMAP or IMAP/S server.</para>\n\t\t/// <para>If the <paramref name=\"port\"/> has a value of <c>0</c>, then the\n\t\t/// <paramref name=\"options\"/> parameter is used to determine the default port to\n\t\t/// connect to. The default port used with <see cref=\"SecureSocketOptions.SslOnConnect\"/>\n\t\t/// is <c>993</c>. All other values will use a default port of <c>143</c>.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>993</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the IMAP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task ConnectAsync (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (host, port);\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tvar stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false);\n\t\t\t\tstream.WriteTimeout = timeout;\n\t\t\t\tstream.ReadTimeout = timeout;\n\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait SslHandshakeAsync (ssl, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"IMAP\", host, port, 993, 143);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream = ssl;\n\t\t\t\t}\n\n\t\t\t\tawait PostConnectAsync (stream, host, port, options, starttls, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified IMAP or IMAP/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified IMAP or IMAP/S server using\n\t\t/// the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>993</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the IMAP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task ConnectAsync (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (socket, host, port);\n\n\t\t\treturn ConnectAsync (new NetworkStream (socket, true), host, port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified IMAP or IMAP/S server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified IMAP or IMAP/S server using\n\t\t/// the provided stream.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>993</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the IMAP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task ConnectAsync (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (stream, host, port);\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tStream network;\n\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait SslHandshakeAsync (ssl, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"IMAP\", host, port, 993, 143);\n\t\t\t\t\t}\n\n\t\t\t\t\tnetwork = ssl;\n\t\t\t\t} else {\n\t\t\t\t\tnetwork = stream;\n\t\t\t\t}\n\n\t\t\t\tif (network.CanTimeout) {\n\t\t\t\t\tnetwork.WriteTimeout = timeout;\n\t\t\t\t\tnetwork.ReadTimeout = timeout;\n\t\t\t\t}\n\n\t\t\t\tawait PostConnectAsync (network, host, port, options, starttls, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a <c>LOGOUT</c> command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a <c>LOGOUT</c> command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic override async Task DisconnectAsync (bool quit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!engine.IsConnected)\n\t\t\t\treturn;\n\n\t\t\tif (quit) {\n\t\t\t\ttry {\n\t\t\t\t\tvar ic = engine.QueueCommand (cancellationToken, null, \"LOGOUT\\r\\n\");\n\t\t\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t} catch (ImapProtocolException) {\n\t\t\t\t} catch (ImapCommandException) {\n\t\t\t\t} catch (IOException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisconnecting = true;\n\n\t\t\tengine.Disconnect (null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously ping the IMAP server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>NOOP</c> command is typically used to keep the connection with the IMAP server\n\t\t/// alive. When a client goes too long (typically 30 minutes) without sending any commands to the\n\t\t/// IMAP server, the IMAP server will close the connection with the client, forcing the client to\n\t\t/// reconnect before it can send any more commands.</para>\n\t\t/// <para>The <c>NOOP</c> command also provides a great way for a client to check for new\n\t\t/// messages.</para>\n\t\t/// <para>When the IMAP server receives a <c>NOOP</c> command, it will reply to the client with a\n\t\t/// list of pending updates such as <c>EXISTS</c> and <c>RECENT</c> counts on the currently\n\t\t/// selected folder. To receive these notifications, subscribe to the\n\t\t/// <see cref=\"MailFolder.CountChanged\"/> and <see cref=\"MailFolder.RecentChanged\"/> events,\n\t\t/// respectively.</para>\n\t\t/// <para>For more information about the <c>NOOP</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.1.2\">rfc3501</a>.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOOP command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic override async Task NoOpAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueNoOpCommand (cancellationToken);\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessNoOpResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously toggle the <see cref=\"ImapClient\"/> into the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>When a client enters the IDLE state, the IMAP server will send\n\t\t/// events to the client as they occur on the selected folder. These events\n\t\t/// may include notifications of new messages arriving, expunge notifications,\n\t\t/// flag changes, etc.</para>\n\t\t/// <para>Due to the nature of the IDLE command, a folder must be selected\n\t\t/// before a client can enter into the IDLE state. This can be done by\n\t\t/// opening a folder using\n\t\t/// <see cref=\"MailKit.MailFolder.Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// or any of the other variants.</para>\n\t\t/// <para>While the IDLE command is running, no other commands may be issued until the\n\t\t/// <paramref name=\"doneToken\"/> is cancelled.</para>\n\t\t/// <note type=\"note\">It is especially important to cancel the <paramref name=\"doneToken\"/>\n\t\t/// before cancelling the <paramref name=\"cancellationToken\"/> when using SSL or TLS due to\n\t\t/// the fact that <see cref=\"System.Net.Security.SslStream\"/> cannot be polled.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"doneToken\">The cancellation token used to return to the non-idle state.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"doneToken\"/> must be cancellable (i.e. <see cref=\"System.Threading.CancellationToken.None\"/> cannot be used).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// A <see cref=\"ImapFolder\"/> has not been opened.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the IDLE extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the IDLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic async Task IdleAsync (CancellationToken doneToken, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanIdle (doneToken);\n\n\t\t\tif (doneToken.IsCancellationRequested)\n\t\t\t\treturn;\n\n\t\t\tusing (var context = new ImapIdleContext (engine, doneToken, cancellationToken)) {\n\t\t\t\tvar ic = QueueIdleCommand (context, cancellationToken);\n\n\t\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessIdleResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously request the specified notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <a href=\"https://tools.ietf.org/html/rfc5465\">NOTIFY</a> command is used to expand\n\t\t/// which notifications the client wishes to be notified about, including status notifications\n\t\t/// about folders other than the currently selected folder. It can also be used to automatically\n\t\t/// FETCH information about new messages that have arrived in the currently selected folder.</para>\n\t\t/// <para>This, combined with <see cref=\"IdleAsync(CancellationToken, CancellationToken)\"/>,\n\t\t/// can be used to get instant notifications for changes to any of the specified folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"status\"><see langword=\"true\" /> if the server should immediately notify the client of the\n\t\t/// selected folder's status; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"eventGroups\">The specific event groups that the client would like to receive notifications for.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"eventGroups\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"eventGroups\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// One or more <see cref=\"ImapEventGroup\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic async Task NotifyAsync (bool status, IList<ImapEventGroup> eventGroups, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueNotifyCommand (status, eventGroups, cancellationToken, out bool notifySelectedNewExpunge);\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessNotifyResponse (ic, notifySelectedNewExpunge);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously disable any previously requested notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Disables any notification events requested in a prior call to \n\t\t/// <see cref=\"NotifyAsync(bool, IList{ImapEventGroup}, CancellationToken)\"/>.\n\t\t/// request.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic async Task DisableNotifyAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueDisableNotifyCommand (cancellationToken);\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessNotifyResponse (ic, false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The namespace folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the LIST or LSUB command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic override Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, StatusItems items = StatusItems.None, bool subscribedOnly = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (@namespace == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (@namespace));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn engine.GetFoldersAsync (@namespace, items, subscribedOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder for the specified path.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the LIST command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic override Task<IMailFolder> GetFolderAsync (string path, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (path == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (path));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn engine.GetFolderAsync (path, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA or METADATA-SERVER extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<string?> GetMetadataAsync (MetadataTag tag, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMetadataCommand (tag, cancellationToken);\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, tag);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA or METADATA-SERVER extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<MetadataCollection> GetMetadataAsync (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueGetMetadataCommand (options, tags, cancellationToken, out var ic))\n\t\t\t\treturn new MetadataCollection ();\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, options);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA or METADATA-SERVER extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task SetMetadataAsync (MetadataCollection metadata, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueSetMetadataCommand (metadata, cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tawait engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessSetMetadataResponse (ic);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/IImapClient.cs",
    "content": "﻿//\n// IImapClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An interface for an IMAP client.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by <see cref=\"MailKit.Net.Imap.ImapClient\"/>.\n\t/// </remarks>\n\tpublic interface IImapClient : IMailStore\n\t{\n\t\t/// <summary>\n\t\t/// Get the capabilities supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been made via one of\n\t\t/// the <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a> methods and may\n\t\t/// change as a side-effect of calling one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a>\n\t\t/// methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The capabilities.</value>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// Capabilities cannot be enabled, they may only be disabled.\n\t\t/// </exception>\n\t\tImapCapabilities Capabilities { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the maximum size of a message that can be appended to a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the maximum size of a message, in bytes, that can be appended to a folder.</para>\n\t\t/// <note type=\"note\">If the value is not set, then the limit is unspecified.</note>\n\t\t/// </remarks>\n\t\t/// <value>The append limit.</value>\n\t\tuint? AppendLimit { get; }\n\n\t\t/// <summary>\n\t\t/// Get the internationalization level supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the internationalization level supported by the IMAP server.</para>\n\t\t/// <para>For more information, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc5255#section-4\">section 4 of rfc5255</a>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The internationalization level.</value>\n\t\tint InternationalizationLevel { get; }\n\n\t\t/// <summary>\n\t\t/// Get the access rights supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// These rights are additional rights supported by the IMAP server beyond the standard rights\n\t\t/// defined in <a href=\"https://tools.ietf.org/html/rfc4314#section-2.1\">section 2.1 of rfc4314</a>\n\t\t/// and will not be populated until the client is successfully connected.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The rights.</value>\n\t\tAccessRights Rights { get; }\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently in the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the client is currently in the IDLE state.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if an IDLE command is active; otherwise, <see langword=\"false\" />.</value>\n\t\tbool IsIdle { get; }\n\n\t\t/// <summary>\n\t\t/// Enable compression over the IMAP connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables compression over the IMAP connection.</para>\n\t\t/// <para>If the IMAP server supports the <see cref=\"ImapCapabilities.Compress\"/> extension,\n\t\t/// it is possible at any point after connecting to enable compression to reduce network\n\t\t/// bandwidth usage. Ideally, this method should be called before authenticating.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Compression must be enabled before a folder has been selected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the <see cref=\"ImapCapabilities.Compress\"/> extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the COMPRESS command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tvoid Compress (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable compression over the IMAP connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously enables compression over the IMAP connection.</para>\n\t\t/// <para>If the IMAP server supports the <see cref=\"ImapCapabilities.Compress\"/> extension,\n\t\t/// it is possible at any point after connecting to enable compression to reduce network\n\t\t/// bandwidth usage. Ideally, this method should be called before authenticating.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Compression must be enabled before a folder has been selected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the COMPRESS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the COMPRESS command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tTask CompressAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Enable the UTF8=ACCEPT extension.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Enables the <a href=\"https://tools.ietf.org/html/rfc6855\">UTF8=ACCEPT</a> extension.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// UTF8=ACCEPT needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the UTF8=ACCEPT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ENABLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tvoid EnableUTF8 (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable the UTF8=ACCEPT extension.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Enables the <a href=\"https://tools.ietf.org/html/rfc6855\">UTF8=ACCEPT</a> extension.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// UTF8=ACCEPT needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the UTF8=ACCEPT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ENABLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tTask EnableUTF8Async (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Identify the client implementation to the server and obtain the server implementation details.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Passes along the client implementation details to the server while also obtaining implementation\n\t\t/// details from the server.</para>\n\t\t/// <para>If the <paramref name=\"clientImplementation\"/> is <see langword=\"null\" /> or no properties have been set, no\n\t\t/// identifying information will be sent to the server.</para>\n\t\t/// <note type=\"security\">\n\t\t/// <para>Security Implications</para>\n\t\t/// <para>This command has the danger of violating the privacy of users if misused. Clients should\n\t\t/// notify users that they send the ID command.</para>\n\t\t/// <para>It is highly desirable that implementations provide a method of disabling ID support, perhaps by\n\t\t/// not calling this method at all, or by passing <see langword=\"null\" /> as the <paramref name=\"clientImplementation\"/>\n\t\t/// argument.</para>\n\t\t/// <para>Implementors must exercise extreme care in adding properties to the <paramref name=\"clientImplementation\"/>.\n\t\t/// Some properties, such as a processor ID number, Ethernet address, or other unique (or mostly unique) identifier\n\t\t/// would allow tracking of users in ways that violate user privacy expectations and may also make it easier for\n\t\t/// attackers to exploit security holes in the client.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <returns>The implementation details of the server if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"clientImplementation\">The client implementation.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ID extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ID command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tImapImplementation Identify (ImapImplementation clientImplementation, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously identify the client implementation to the server and obtain the server implementation details.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Passes along the client implementation details to the server while also obtaining implementation\n\t\t/// details from the server.</para>\n\t\t/// <para>If the <paramref name=\"clientImplementation\"/> is <see langword=\"null\" /> or no properties have been set, no\n\t\t/// identifying information will be sent to the server.</para>\n\t\t/// <note type=\"security\">\n\t\t/// <para>Security Implications</para>\n\t\t/// <para>This command has the danger of violating the privacy of users if misused. Clients should\n\t\t/// notify users that they send the ID command.</para>\n\t\t/// <para>It is highly desirable that implementations provide a method of disabling ID support, perhaps by\n\t\t/// not calling this method at all, or by passing <see langword=\"null\" /> as the <paramref name=\"clientImplementation\"/>\n\t\t/// argument.</para>\n\t\t/// <para>Implementors must exercise extreme care in adding properties to the <paramref name=\"clientImplementation\"/>.\n\t\t/// Some properties, such as a processor ID number, Ethernet address, or other unique (or mostly unique) identifier\n\t\t/// would allow tracking of users in ways that violate user privacy expectations and may also make it easier for\n\t\t/// attackers to exploit security holes in the client.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <returns>The implementation details of the server if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"clientImplementation\">The client implementation.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ID extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ID command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tTask<ImapImplementation> IdentifyAsync (ImapImplementation clientImplementation, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Toggle the <see cref=\"ImapClient\"/> into the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>When a client enters the IDLE state, the IMAP server will send\n\t\t/// events to the client as they occur on the selected folder. These events\n\t\t/// may include notifications of new messages arriving, expunge notifications,\n\t\t/// flag changes, etc.</para>\n\t\t/// <para>Due to the nature of the IDLE command, a folder must be selected\n\t\t/// before a client can enter into the IDLE state. This can be done by\n\t\t/// opening a folder using\n\t\t/// <see cref=\"MailKit.MailFolder.Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// or any of the other variants.</para>\n\t\t/// <para>While the IDLE command is running, no other commands may be issued until the\n\t\t/// <paramref name=\"doneToken\"/> is cancelled.</para>\n\t\t/// <note type=\"note\">It is especially important to cancel the <paramref name=\"doneToken\"/>\n\t\t/// before cancelling the <paramref name=\"cancellationToken\"/> when using SSL or TLS due to\n\t\t/// the fact that <see cref=\"System.Net.Security.SslStream\"/> cannot be polled.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\t/// <param name=\"doneToken\">The cancellation token used to return to the non-idle state.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"doneToken\"/> must be cancellable (i.e. <see cref=\"System.Threading.CancellationToken.None\"/> cannot be used).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// A <see cref=\"ImapFolder\"/> has not been opened.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the IDLE extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the IDLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Idle (CancellationToken doneToken, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously toggle the <see cref=\"ImapClient\"/> into the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>When a client enters the IDLE state, the IMAP server will send\n\t\t/// events to the client as they occur on the selected folder. These events\n\t\t/// may include notifications of new messages arriving, expunge notifications,\n\t\t/// flag changes, etc.</para>\n\t\t/// <para>Due to the nature of the IDLE command, a folder must be selected\n\t\t/// before a client can enter into the IDLE state. This can be done by\n\t\t/// opening a folder using\n\t\t/// <see cref=\"MailKit.MailFolder.Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// or any of the other variants.</para>\n\t\t/// <para>While the IDLE command is running, no other commands may be issued until the\n\t\t/// <paramref name=\"doneToken\"/> is cancelled.</para>\n\t\t/// <note type=\"note\">It is especially important to cancel the <paramref name=\"doneToken\"/>\n\t\t/// before cancelling the <paramref name=\"cancellationToken\"/> when using SSL or TLS due to\n\t\t/// the fact that <see cref=\"System.Net.Security.SslStream\"/> cannot be polled.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"doneToken\">The cancellation token used to return to the non-idle state.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"doneToken\"/> must be cancellable (i.e. <see cref=\"System.Threading.CancellationToken.None\"/> cannot be used).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// A <see cref=\"ImapFolder\"/> has not been opened.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the IDLE extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the IDLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask IdleAsync (CancellationToken doneToken, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Request the specified notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <a href=\"https://tools.ietf.org/html/rfc5465\">NOTIFY</a> command is used to expand\n\t\t/// which notifications the client wishes to be notified about, including status notifications\n\t\t/// about folders other than the currently selected folder. It can also be used to automatically\n\t\t/// FETCH information about new messages that have arrived in the currently selected folder.</para>\n\t\t/// <para>This, combined with <see cref=\"Idle(CancellationToken, CancellationToken)\"/>,\n\t\t/// can be used to get instant notifications for changes to any of the specified folders.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"status\"><see langword=\"true\" /> if the server should immediately notify the client of the\n\t\t/// selected folder's status; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"eventGroups\">The specific event groups that the client would like to receive notifications for.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"eventGroups\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"eventGroups\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// One or more <see cref=\"ImapEventGroup\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid Notify (bool status, IList<ImapEventGroup> eventGroups, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously request the specified notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <a href=\"https://tools.ietf.org/html/rfc5465\">NOTIFY</a> command is used to expand\n\t\t/// which notifications the client wishes to be notified about, including status notifications\n\t\t/// about folders other than the currently selected folder. It can also be used to automatically\n\t\t/// FETCH information about new messages that have arrived in the currently selected folder.</para>\n\t\t/// <para>This, combined with <see cref=\"IdleAsync(CancellationToken, CancellationToken)\"/>,\n\t\t/// can be used to get instant notifications for changes to any of the specified folders.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"status\"><see langword=\"true\" /> if the server should immediately notify the client of the\n\t\t/// selected folder's status; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"eventGroups\">The specific event groups that the client would like to receive notifications for.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"eventGroups\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"eventGroups\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// One or more <see cref=\"ImapEventGroup\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask NotifyAsync (bool status, IList<ImapEventGroup> eventGroups, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Disable any previously requested notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Disables any notification events requested in a prior call to \n\t\t/// <see cref=\"Notify(bool, IList{ImapEventGroup}, CancellationToken)\"/>.\n\t\t/// request.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tvoid DisableNotify (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously disable any previously requested notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Disables any notification events requested in a prior call to \n\t\t/// <see cref=\"NotifyAsync(bool, IList{ImapEventGroup}, CancellationToken)\"/>.\n\t\t/// request.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tTask DisableNotifyAsync (CancellationToken cancellationToken = default);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/IImapFolder.cs",
    "content": "﻿//\n// IImapFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nusing MailKit.Search;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An interface for an IMAP folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by <see cref=\"MailKit.Net.Imap.ImapFolder\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t/// </example>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t/// </example>\n\tpublic interface IImapFolder : IMailFolder\n\t{\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tHeaderList GetHeaders (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<HeaderList> GetHeadersAsync (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tHeaderList GetHeaders (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<HeaderList> GetHeadersAsync (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tMimeEntity GetBodyPart (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<MimeEntity> GetBodyPartAsync (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tMimeEntity GetBodyPart (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<MimeEntity> GetBodyPartAsync (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The uids of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tvoid GetStreams (IList<UniqueId> uids, ImapFetchStreamCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"uids\">The uids of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask GetStreamsAsync (IList<UniqueId> uids, ImapFetchStreamAsyncCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tvoid GetStreams (IList<int> indexes, ImapFetchStreamCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask GetStreamsAsync (IList<int> indexes, ImapFetchStreamAsyncCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"callback\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tvoid GetStreams (int min, int max, ImapFetchStreamCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"callback\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask GetStreamsAsync (int min, int max, ImapFetchStreamAsyncCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null);\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SEARCH</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SEARCH</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tSearchResults Search (string query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SEARCH</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SEARCH</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<SearchResults> SearchAsync (string query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SORT</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SORT</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the SORT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tSearchResults Sort (string query, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SORT</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SORT</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the SORT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tTask<SearchResults> SortAsync (string query, CancellationToken cancellationToken = default);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapAuthenticationSecretDetector.cs",
    "content": "﻿//\n// ImapAuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Imap {\n\tclass ImapAuthenticationSecretDetector : IAuthenticationSecretDetector\n\t{\n\t\tstatic readonly IList<AuthenticationSecret> EmptyAuthSecrets = Array.Empty<AuthenticationSecret> ();\n\n\t\tenum ImapAuthCommandState\n\t\t{\n\t\t\tNone,\n\t\t\tCommand,\n\t\t\tAuthenticate,\n\t\t\tAuthMechanism,\n\t\t\tAuthNewLine,\n\t\t\tAuthToken,\n\t\t\tLogin,\n\t\t\tUserName,\n\t\t\tPassword,\n\t\t\tLoginNewLine,\n\t\t\tError\n\t\t}\n\n\t\tenum ImapLoginTokenType\n\t\t{\n\t\t\tNone,\n\t\t\tAtom,\n\t\t\tQString,\n\t\t\tLiteral\n\t\t}\n\n\t\tenum ImapLiteralState\n\t\t{\n\t\t\tNone,\n\t\t\tOctets,\n\t\t\tPlus,\n\t\t\tCloseBrace,\n\t\t\tLiteral,\n\t\t\tComplete\n\t\t}\n\n\t\tenum ImapQStringState\n\t\t{\n\t\t\tNone,\n\t\t\tEscaped,\n\t\t\tEndQuote,\n\t\t\tComplete\n\t\t}\n\n\t\tImapAuthCommandState commandState;\n\t\tImapLiteralState literalState;\n\t\tImapQStringState qstringState;\n\t\tImapLoginTokenType tokenType;\n\t\tbool isAuthenticating;\n\t\tint literalOctets;\n\t\tint literalSeen;\n\t\tint textIndex;\n\n\t\tpublic bool IsAuthenticating {\n\t\t\tget { return isAuthenticating; }\n\t\t\tset {\n\t\t\t\tcommandState = ImapAuthCommandState.None;\n\t\t\t\tisAuthenticating = value;\n\t\t\t\tClearLoginTokenState ();\n\t\t\t\ttextIndex = 0;\n\t\t\t}\n\t\t}\n\n\t\tvoid ClearLoginTokenState ()\n\t\t{\n\t\t\tliteralState = ImapLiteralState.None;\n\t\t\tqstringState = ImapQStringState.None;\n\t\t\ttokenType = ImapLoginTokenType.None;\n\t\t\tliteralOctets = 0;\n\t\t\tliteralSeen = 0;\n\t\t}\n\n\t\tbool SkipText (string text, byte[] buffer, ref int index, int endIndex)\n\t\t{\n\t\t\twhile (index < endIndex && textIndex < text.Length) {\n\t\t\t\tif (buffer[index] != (byte) text[textIndex]) {\n\t\t\t\t\tcommandState = ImapAuthCommandState.Error;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\ttextIndex++;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn textIndex == text.Length;\n\t\t}\n\n\t\tIList<AuthenticationSecret> DetectAuthSecrets (byte[] buffer, int offset, int endIndex)\n\t\t{\n\t\t\tint index = offset;\n\n\t\t\tif (commandState == ImapAuthCommandState.Authenticate) {\n\t\t\t\tif (SkipText (\"AUTHENTICATE \", buffer, ref index, endIndex))\n\t\t\t\t\tcommandState = ImapAuthCommandState.AuthMechanism;\n\n\t\t\t\tif (index >= endIndex || commandState == ImapAuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (commandState == ImapAuthCommandState.AuthMechanism) {\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) ' ' && buffer[index] != (byte) '\\r')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) ' ') {\n\t\t\t\t\t\tcommandState = ImapAuthCommandState.AuthToken;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommandState = ImapAuthCommandState.AuthNewLine;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (commandState == ImapAuthCommandState.AuthNewLine) {\n\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\tcommandState = ImapAuthCommandState.AuthToken;\n\t\t\t\t\tindex++;\n\t\t\t\t} else {\n\t\t\t\t\tcommandState = ImapAuthCommandState.Error;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || commandState == ImapAuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tint startIndex = index;\n\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\r')\n\t\t\t\tindex++;\n\n\t\t\tif (index < endIndex)\n\t\t\t\tcommandState = ImapAuthCommandState.AuthNewLine;\n\n\t\t\tif (index == startIndex)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tvar secret = new AuthenticationSecret (startIndex, index - startIndex);\n\n\t\t\tif (commandState == ImapAuthCommandState.AuthNewLine) {\n\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\t\tcommandState = ImapAuthCommandState.AuthToken;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommandState = ImapAuthCommandState.Error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new AuthenticationSecret[] { secret };\n\t\t}\n\n\t\tbool SkipLiteralToken (List<AuthenticationSecret> secrets, byte[] buffer, ref int index, int endIndex, byte sentinel)\n\t\t{\n\t\t\tif (literalState == ImapLiteralState.Octets) {\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) '+' && buffer[index] != (byte) '}') {\n\t\t\t\t\tint digit = buffer[index] - (byte) '0';\n\t\t\t\t\tliteralOctets = literalOctets * 10 + digit;\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) '+') {\n\t\t\t\t\t\tliteralState = ImapLiteralState.Plus;\n\t\t\t\t\t\ttextIndex = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tliteralState = ImapLiteralState.CloseBrace;\n\t\t\t\t\t\ttextIndex = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (literalState < ImapLiteralState.Literal) {\n\t\t\t\tif (SkipText (\"}\\r\\n\", buffer, ref index, endIndex))\n\t\t\t\t\tliteralState = ImapLiteralState.Literal;\n\t\t\t}\n\n\t\t\tif (index >= endIndex || commandState == ImapAuthCommandState.Error)\n\t\t\t\treturn false;\n\n\t\t\tif (literalState == ImapLiteralState.Literal) {\n\t\t\t\tint skip = Math.Min (literalOctets - literalSeen, endIndex - index);\n\n\t\t\t\tsecrets.Add (new AuthenticationSecret (index, skip));\n\n\t\t\t\tliteralSeen += skip;\n\t\t\t\tindex += skip;\n\n\t\t\t\tif (literalSeen == literalOctets)\n\t\t\t\t\tliteralState = ImapLiteralState.Complete;\n\t\t\t}\n\n\t\t\tif (literalState == ImapLiteralState.Complete && index < endIndex && buffer[index] == sentinel) {\n\t\t\t\tindex++;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tbool SkipLoginToken (List<AuthenticationSecret> secrets, byte[] buffer, ref int index, int endIndex, byte sentinel)\n\t\t{\n\t\t\tint startIndex;\n\n\t\t\tif (tokenType == ImapLoginTokenType.None) {\n\t\t\t\tswitch ((char) buffer[index]) {\n\t\t\t\tcase '{':\n\t\t\t\t\tliteralState = ImapLiteralState.Octets;\n\t\t\t\t\ttokenType = ImapLoginTokenType.Literal;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\ttokenType = ImapLoginTokenType.QString;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\ttokenType = ImapLoginTokenType.Atom;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (tokenType) {\n\t\t\tcase ImapLoginTokenType.Literal:\n\t\t\t\treturn SkipLiteralToken (secrets, buffer, ref index, endIndex, sentinel);\n\t\t\tcase ImapLoginTokenType.QString:\n\t\t\t\tif (qstringState != ImapQStringState.Complete) {\n\t\t\t\t\tstartIndex = index;\n\n\t\t\t\t\twhile (index < endIndex) {\n\t\t\t\t\t\tif (qstringState == ImapQStringState.Escaped) {\n\t\t\t\t\t\t\tqstringState = ImapQStringState.None;\n\t\t\t\t\t\t} else if (buffer[index] == (byte) '\\\\') {\n\t\t\t\t\t\t\tqstringState = ImapQStringState.Escaped;\n\t\t\t\t\t\t} else if (buffer[index] == (byte) '\"') {\n\t\t\t\t\t\t\tqstringState = ImapQStringState.EndQuote;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > startIndex)\n\t\t\t\t\t\tsecrets.Add (new AuthenticationSecret (startIndex, index - startIndex));\n\n\t\t\t\t\tif (qstringState == ImapQStringState.EndQuote) {\n\t\t\t\t\t\tqstringState = ImapQStringState.Complete;\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (buffer[index] != sentinel) {\n\t\t\t\t\tcommandState = ImapAuthCommandState.Error;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\tstartIndex = index;\n\n\t\t\t\twhile (index < endIndex && buffer[index] != sentinel)\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index > startIndex)\n\t\t\t\t\tsecrets.Add (new AuthenticationSecret (startIndex, index - startIndex));\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn false;\n\t\t\t\t\n\t\t\t\tindex++;\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tIList<AuthenticationSecret> DetectLoginSecrets (byte[] buffer, int offset, int endIndex)\n\t\t{\n\t\t\tvar secrets = new List<AuthenticationSecret> ();\n\t\t\tint index = offset;\n\n\t\t\tif (commandState == ImapAuthCommandState.LoginNewLine)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tif (commandState == ImapAuthCommandState.Login) {\n\t\t\t\tif (SkipText (\"LOGIN \", buffer, ref index, endIndex))\n\t\t\t\t\tcommandState = ImapAuthCommandState.UserName;\n\n\t\t\t\tif (index >= endIndex || commandState == ImapAuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (commandState == ImapAuthCommandState.UserName) {\n\t\t\t\tif (SkipLoginToken (secrets, buffer, ref index, endIndex, (byte) ' ')) {\n\t\t\t\t\tcommandState = ImapAuthCommandState.Password;\n\t\t\t\t\tClearLoginTokenState ();\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || commandState == ImapAuthCommandState.Error)\n\t\t\t\t\treturn secrets;\n\t\t\t}\n\n\t\t\tif (commandState == ImapAuthCommandState.Password) {\n\t\t\t\tif (SkipLoginToken (secrets, buffer, ref index, endIndex, (byte) '\\r')) {\n\t\t\t\t\tcommandState = ImapAuthCommandState.LoginNewLine;\n\t\t\t\t\tClearLoginTokenState ();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn secrets;\n\t\t}\n\n\t\tpublic IList<AuthenticationSecret> DetectSecrets (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (!IsAuthenticating || commandState == ImapAuthCommandState.Error || count == 0)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tint endIndex = offset + count;\n\t\t\tint index = offset;\n\n\t\t\tif (commandState == ImapAuthCommandState.None) {\n\t\t\t\t// skip over the tag\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) ' ')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tcommandState = ImapAuthCommandState.Command;\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (commandState == ImapAuthCommandState.Command) {\n\t\t\t\tswitch ((char) buffer[index]) {\n\t\t\t\tcase 'A':\n\t\t\t\t\tcommandState = ImapAuthCommandState.Authenticate;\n\t\t\t\t\ttextIndex = 1;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'L':\n\t\t\t\t\tcommandState = ImapAuthCommandState.Login;\n\t\t\t\t\ttextIndex = 1;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcommandState = ImapAuthCommandState.Error;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || commandState == ImapAuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (commandState >= ImapAuthCommandState.Authenticate && commandState <= ImapAuthCommandState.AuthToken)\n\t\t\t\treturn DetectAuthSecrets (buffer, index, endIndex);\n\n\t\t\treturn DetectLoginSecrets (buffer, index, endIndex);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapCallbacks.cs",
    "content": "﻿//\n// ImapCallbacks.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net.Imap\n{\n\t/// <summary>\n\t/// A callback used when fetching message streams.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>This callback is meant to be used with the various\n\t/// <a href=\"Overload_MailKit_Net_Imap_ImapFolder_GetStreams.htm\">GetStreams</a>\n\t/// methods.</para>\n\t/// <para>Once this callback returns, the stream argument will be disposed, so\n\t/// it is important to consume the stream right away and not add it to a queue\n\t/// for later processing.</para>\n\t/// </remarks>\n\t/// <param name=\"folder\">The IMAP folder that the message belongs to.</param>\n\t/// <param name=\"index\">The index of the message in the folder.</param>\n\t/// <param name=\"uid\">The UID of the message in the folder.</param>\n\t/// <param name=\"stream\">The raw message (or part) stream.</param>\n\tpublic delegate void ImapFetchStreamCallback (ImapFolder folder, int index, UniqueId uid, Stream stream);\n\n\t/// <summary>\n\t/// An asynchronous callback used when fetching message streams.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>This callback is meant to be used with the various\n\t/// <a href=\"Overload_MailKit_Net_Imap_ImapFolder_GetStreamsAsync.htm\">GetStreamsAsync</a>\n\t/// methods.</para>\n\t/// <para>Once this callback returns, the stream argument will be disposed, so\n\t/// it is important to consume the stream right away and not add it to a queue\n\t/// for later processing.</para>\n\t/// </remarks>\n\t/// <returns>An awaitable task context.</returns>\n\t/// <param name=\"folder\">The IMAP folder that the message belongs to.</param>\n\t/// <param name=\"index\">The index of the message in the folder.</param>\n\t/// <param name=\"uid\">The UID of the message in the folder.</param>\n\t/// <param name=\"stream\">The raw message (or part) stream.</param>\n\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\tpublic delegate Task ImapFetchStreamAsyncCallback (ImapFolder folder, int index, UniqueId uid, Stream stream, CancellationToken cancellationToken);\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapCapabilities.cs",
    "content": "﻿//\n// ImapCapabilities.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://datatracker.ietf.org/doc/search/?name=IMAP&rfcs=on&activedrafts=on&by=group\n// TODO: rfc9208 and rfc9394\n\nusing System;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// Capabilities supported by an IMAP server.\n\t/// </summary>\n\t/// <remarks>\n\t/// Capabilities are read as part of the response to the <c>CAPABILITY</c> command that\n\t/// is issued during the connection and authentication phases of the\n\t/// <see cref=\"ImapClient\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\t[Flags]\n\tpublic enum ImapCapabilities : ulong {\n\t\t/// <summary>\n\t\t/// The server does not support any additional extensions.\n\t\t/// </summary>\n\t\tNone             = 0,\n\n\t\t/// <summary>\n\t\t/// The server implements the core IMAP4 commands.\n\t\t/// </summary>\n\t\tIMAP4            = 1L << 0,\n\n\t\t/// <summary>\n\t\t/// The server implements the core IMAP4rev1 commands.\n\t\t/// </summary>\n\t\tIMAP4rev1        = 1L << 1,\n\n\t\t/// <summary>\n\t\t/// The server implements the core IMAP4rev2 commands described in <a href=\"https://tools.ietf.org/html/rfc9051\">rfc9051</a>.\n\t\t/// </summary>\n\t\tIMAP4rev2        = 1L << 2,\n\n\t\t/// <summary>\n\t\t/// The server supports the <c>STATUS</c> command.\n\t\t/// </summary>\n\t\tStatus           = 1L << 3,\n\n\t\t/// <summary>\n\t\t/// The server supports the ACL extension defined in <a href=\"https://tools.ietf.org/html/rfc2086\">rfc2086</a>\n\t\t/// and <a href=\"https://tools.ietf.org/html/rfc4314\">rfc4314</a>.\n\t\t/// </summary>\n\t\tAcl              = 1L << 4,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2087\">QUOTA</a> extension.\n\t\t/// </summary>\n\t\tQuota            = 1L << 5,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2088\">LITERAL+</a> extension.\n\t\t/// </summary>\n\t\tLiteralPlus      = 1L << 6,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2177\">IDLE</a> extension.\n\t\t/// </summary>\n\t\tIdle             = 1L << 7,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2193\">MAILBOX-REFERRALS</a> extension.\n\t\t/// </summary>\n\t\tMailboxReferrals = 1L << 8,\n\n\t\t/// <summary>\n\t\t/// the server supports the <a href=\"https://tools.ietf.org/html/rfc2221\">LOGIN-REFERRALS</a> extension.\n\t\t/// </summary>\n\t\tLoginReferrals   = 1L << 9,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2342\">NAMESPACE</a> extension.\n\t\t/// </summary>\n\t\tNamespace        = 1L << 10,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2971\">ID</a> extension.\n\t\t/// </summary>\n\t\tId               = 1L << 11,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3348\">CHILDREN</a> extension.\n\t\t/// </summary>\n\t\tChildren         = 1L << 12,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3501\">LOGINDISABLED</a> extension.\n\t\t/// </summary>\n\t\tLoginDisabled    = 1L << 13,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3501\">STARTTLS</a> extension.\n\t\t/// </summary>\n\t\tStartTLS         = 1L << 14,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3502\">MULTIAPPEND</a> extension.\n\t\t/// </summary>\n\t\tMultiAppend      = 1L << 15,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3516\">BINARY</a> content extension.\n\t\t/// </summary>\n\t\tBinary           = 1L << 16,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3691\">UNSELECT</a> extension.\n\t\t/// </summary>\n\t\tUnselect         = 1L << 17,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc4315\">UIDPLUS</a> extension.\n\t\t/// </summary>\n\t\tUidPlus          = 1L << 18,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc4469\">CATENATE</a> extension.\n\t\t/// </summary>\n\t\tCatenate         = 1L << 19,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc4551\">CONDSTORE</a> extension.\n\t\t/// </summary>\n\t\tCondStore        = 1L << 20,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc4731\">ESEARCH</a> extension.\n\t\t/// </summary>\n\t\tESearch          = 1L << 21,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc4959\">SASL-IR</a> extension.\n\t\t/// </summary>\n\t\tSaslIR           = 1L << 22,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc4978\">COMPRESS</a> extension.\n\t\t/// </summary>\n\t\tCompress         = 1L << 23,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5032\">WITHIN</a> extension.\n\t\t/// </summary>\n\t\tWithin           = 1L << 24,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5161\">ENABLE</a> extension.\n\t\t/// </summary>\n\t\tEnable           = 1L << 25,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5162\">QRESYNC</a> extension.\n\t\t/// </summary>\n\t\tQuickResync      = 1L << 26,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5182\">SEARCHRES</a> extension.\n\t\t/// </summary>\n\t\tSearchResults    = 1L << 27,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5256\">SORT</a> extension.\n\t\t/// </summary>\n\t\tSort             = 1L << 28,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5256\">THREAD</a> extension.\n\t\t/// </summary>\n\t\tThread           = 1L << 29,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5257\">ANNOTATE</a> extension.\n\t\t/// </summary>\n\t\tAnnotate         = 1L << 30,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5258\">LIST-EXTENDED</a> extension.\n\t\t/// </summary>\n\t\tListExtended     = 1L << 31,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5259\">CONVERT</a> extension.\n\t\t/// </summary>\n\t\tConvert          = 1L << 32,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5255\">LANGUAGE</a> extension.\n\t\t/// </summary>\n\t\tLanguage         = 1L << 33,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5255\">I18NLEVEL</a> extension.\n\t\t/// </summary>\n\t\tI18NLevel        = 1L << 34,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5267\">ESORT</a> extension.\n\t\t/// </summary>\n\t\tESort            = 1L << 35,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5267\">CONTEXT</a> extension.\n\t\t/// </summary>\n\t\tContext          = 1L << 36,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5464\">METADATA</a> extension.\n\t\t/// </summary>\n\t\tMetadata         = 1L << 37,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5464\">METADATA-SERVER</a> extension.\n\t\t/// </summary>\n\t\tMetadataServer   = 1L << 38,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5465\">NOTIFY</a> extension.\n\t\t/// </summary>\n\t\tNotify           = 1L << 39,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5466\">FILTERS</a> extension.\n\t\t/// </summary>\n\t\tFilters          = 1L << 40,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5819\">LIST-STATUS</a> extension.\n\t\t/// </summary>\n\t\tListStatus       = 1L << 41,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc5957\">SORT=DISPLAY</a> extension.\n\t\t/// </summary>\n\t\tSortDisplay      = 1L << 42,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6154\">CREATE-SPECIAL-USE</a> extension.\n\t\t/// </summary>\n\t\tCreateSpecialUse = 1L << 43,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6154\">SPECIAL-USE</a> extension.\n\t\t/// </summary>\n\t\tSpecialUse       = 1L << 44,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6203\">SEARCH=FUZZY</a> extension.\n\t\t/// </summary>\n\t\tFuzzySearch      = 1L << 45,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6237\">MULTISEARCH</a> extension.\n\t\t/// </summary>\n\t\tMultiSearch      = 1L << 46,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6851\">MOVE</a> extension.\n\t\t/// </summary>\n\t\tMove             = 1L << 47,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6855\">UTF8=ACCEPT</a> extension.\n\t\t/// </summary>\n\t\tUTF8Accept       = 1L << 48,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6855\">UTF8=ONLY</a> extension.\n\t\t/// </summary>\n\t\tUTF8Only         = 1L << 49,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc7888\">LITERAL-</a> extension.\n\t\t/// </summary>\n\t\tLiteralMinus     = 1L << 50,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc7889\">APPENDLIMIT</a> extension.\n\t\t/// </summary>\n\t\tAppendLimit      = 1L << 51,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8437\">UNAUTHENTICATE</a> extension.\n\t\t/// </summary>\n\t\tUnauthenticate   = 1L << 52,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8438\">STATUS=SIZE</a> extension.\n\t\t/// </summary>\n\t\tStatusSize       = 1L << 53,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8440\">LIST-MYRIGHTS</a> extension.\n\t\t/// </summary>\n\t\tListMyRights     = 1L << 54,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8474\">OBJECTID</a> extension.\n\t\t/// </summary>\n\t\tObjectID         = 1L << 55,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8508\">REPLACE</a> extension.\n\t\t/// </summary>\n\t\tReplace          = 1L << 56,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8514\">SAVEDATE</a> extension.\n\t\t/// </summary>\n\t\tSaveDate         = 1L << 57,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8970\">PREVIEW</a> extension.\n\t\t/// </summary>\n\t\tPreview          = 1L << 58,\n\n\t\t#region GMail Extensions\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://developers.google.com/gmail/imap_extensions\">XLIST</a> extension (GMail).\n\t\t/// </summary>\n\t\tXList            = 1L << 60,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://developers.google.com/gmail/imap_extensions\">X-GM-EXT1</a> extension (GMail).\n\t\t/// </summary>\n\t\tGMailExt1        = 1L << 61\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapClient.cs",
    "content": "﻿//\n// ImapClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Security.Authentication;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MailKit.Security;\n\nusing SslStream = MailKit.Net.SslStream;\nusing AuthenticationException = MailKit.Security.AuthenticationException;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An IMAP client that can be used to retrieve messages from a server.\n\t/// </summary>\n\t/// <remarks>\n\t/// The <see cref=\"ImapClient\"/> class supports both the \"imap\" and \"imaps\"\n\t/// protocols. The \"imap\" protocol makes a clear-text connection to the IMAP\n\t/// server and does not use SSL or TLS unless the IMAP server supports the\n\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.2.1\">STARTTLS</a> extension.\n\t/// The \"imaps\" protocol, however, connects to the IMAP server using an\n\t/// SSL-wrapped connection.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t/// </example>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t/// </example>\n\tpublic partial class ImapClient : MailStore, IImapClient\n\t{\n\t\tstatic readonly char[] ReservedUriCharacters = { ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '%' };\n\t\tconst string HexAlphabet = \"0123456789ABCDEF\";\n\n\t\treadonly ImapAuthenticationSecretDetector detector = new ImapAuthenticationSecretDetector ();\n\t\treadonly ImapEngine engine;\n\t\tSslCertificateValidationInfo? sslValidationInfo;\n\t\tint timeout = 2 * 60 * 1000;\n\t\tstring? identifier;\n\t\tbool disconnecting;\n\t\tbool connecting;\n\t\tbool disposed;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can retrieve messages with the <see cref=\"ImapClient\"/>, you must first\n\t\t/// call one of the <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a>\n\t\t/// methods and then authenticate with the one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a>\n\t\t/// methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\tpublic ImapClient () : this (new NullProtocolLogger ())\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can retrieve messages with the <see cref=\"ImapClient\"/>, you must first\n\t\t/// call one of the <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a>\n\t\t/// methods and then authenticate with the one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a>\n\t\t/// methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"ProtocolLogger\"/>\n\t\t/// </example>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic ImapClient (IProtocolLogger protocolLogger) : base (protocolLogger)\n\t\t{\n\t\t\tprotocolLogger.AuthenticationSecretDetector = detector;\n\n\t\t\t// FIXME: should this take a ParserOptions argument?\n\t\t\tengine = new ImapEngine (CreateImapFolder);\n\t\t\tengine.MetadataChanged += OnEngineMetadataChanged;\n\t\t\tengine.FolderCreated += OnEngineFolderCreated;\n\t\t\tengine.Disconnected += OnEngineDisconnected;\n\t\t\tengine.WebAlert += OnEngineWebAlert;\n\t\t\tengine.Alert += OnEngineAlert;\n\t\t}\n\n\t\t// Note: This is only needed for UnitTests.\n\t\tinternal char TagPrefix {\n\t\t\tset { engine.TagPrefix = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets an object that can be used to synchronize access to the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets an object that can be used to synchronize access to the IMAP server.</para>\n\t\t/// <para>When using the non-Async methods from multiple threads, it is important to lock the\n\t\t/// <see cref=\"SyncRoot\"/> object for thread safety when using the synchronous methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The lock object.</value>\n\t\tpublic override object SyncRoot {\n\t\t\tget { return engine; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the protocol supported by the message service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the protocol supported by the message service.\n\t\t/// </remarks>\n\t\t/// <value>The protocol.</value>\n\t\tprotected override string Protocol {\n\t\t\tget { return \"imap\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the capabilities supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been made via one of\n\t\t/// the <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a> methods and may\n\t\t/// change as a side-effect of calling one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a>\n\t\t/// methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The capabilities.</value>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// Capabilities cannot be enabled, they may only be disabled.\n\t\t/// </exception>\n\t\tpublic ImapCapabilities Capabilities {\n\t\t\tget { return engine.Capabilities; }\n\t\t\tset {\n\t\t\t\tif ((engine.Capabilities | value) > engine.Capabilities)\n\t\t\t\t\tthrow new ArgumentException (\"Capabilities cannot be enabled, they may only be disabled.\", nameof (value));\n\n\t\t\t\tengine.Capabilities = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the maximum size of a message that can be appended to a folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the maximum size of a message, in bytes, that can be appended to a folder.</para>\n\t\t/// <note type=\"note\">If the value is not set, then the limit is unspecified.</note>\n\t\t/// </remarks>\n\t\t/// <value>The append limit.</value>\n\t\tpublic uint? AppendLimit {\n\t\t\tget { return engine.AppendLimit; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the internationalization level supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the internationalization level supported by the IMAP server.</para>\n\t\t/// <para>For more information, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc5255#section-4\">section 4 of rfc5255</a>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The internationalization level.</value>\n\t\tpublic int InternationalizationLevel {\n\t\t\tget { return engine.I18NLevel; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the access rights supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// These rights are additional rights supported by the IMAP server beyond the standard rights\n\t\t/// defined in <a href=\"https://tools.ietf.org/html/rfc4314#section-2.1\">section 2.1 of rfc4314</a>\n\t\t/// and will not be populated until the client is successfully connected.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The rights.</value>\n\t\tpublic AccessRights Rights {\n\t\t\tget { return engine.Rights; }\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (ImapClient));\n\t\t}\n\n\t\tvoid CheckConnected ()\n\t\t{\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The ImapClient is not connected.\");\n\t\t}\n\n\t\tvoid CheckAuthenticated ()\n\t\t{\n\t\t\tif (!IsAuthenticated)\n\t\t\t\tthrow new ServiceNotAuthenticatedException (\"The ImapClient is not authenticated.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Instantiate a new <see cref=\"ImapFolder\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Creates a new <see cref=\"ImapFolder\"/> instance.</para>\n\t\t/// <note type=\"note\">This method's purpose is to allow subclassing <see cref=\"ImapFolder\"/>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The IMAP folder instance.</returns>\n\t\t/// <param name=\"args\">The constructor arguments.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"args\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected virtual ImapFolder CreateImapFolder (ImapFolderConstructorArgs args)\n\t\t{\n\t\t\tvar folder = new ImapFolder (args);\n\n\t\t\tfolder.UpdateAppendLimit (AppendLimit);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\tbool ValidateRemoteCertificate (object? sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\tvar host = engine.Uri!.Host;\n\t\t\tbool valid;\n\n\t\t\tsslValidationInfo?.Dispose ();\n\t\t\tsslValidationInfo = null;\n\n\t\t\tif (ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n#if NETFRAMEWORK\n\t\t\t} else if (ServicePointManager.ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServicePointManager.ServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n#endif\n\t\t\t} else {\n\t\t\t\tvalid = DefaultServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\tif (!valid) {\n\t\t\t\t// Note: The SslHandshakeException.Create() method will nullify this once it's done using it.\n\t\t\t\tsslValidationInfo = new SslCertificateValidationInfo (host, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\treturn valid;\n\t\t}\n\n\t\tImapCommand QueueCompressCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Compress) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the COMPRESS extension.\");\n\n\t\t\tif (engine.State >= ImapEngineState.Selected)\n\t\t\t\tthrow new InvalidOperationException (\"Compression must be enabled before selecting a folder.\");\n\n#if MAILKIT_LITE\n\t\t\tthrow new NotSupportedException (\"MailKitLite does not support the COMPRESS extension.\");\n#else\n\t\t\treturn engine.QueueCommand (cancellationToken, null, \"COMPRESS DEFLATE\\r\\n\");\n#endif\n\t\t}\n\n\t\tvoid ProcessCompressResponse (ImapCommand ic)\n\t\t{\n#if !MAILKIT_LITE\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\tfor (int i = 0; i < ic.RespCodes.Count; i++) {\n\t\t\t\t\tif (ic.RespCodes[i].Type == ImapResponseCodeType.CompressionActive)\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow ImapCommandException.Create (\"COMPRESS\", ic);\n\t\t\t}\n\n\t\t\tengine.Stream!.Stream = new CompressedStream (engine.Stream.Stream);\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Enable compression over the IMAP connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables compression over the IMAP connection.</para>\n\t\t/// <para>If the IMAP server supports the <see cref=\"ImapCapabilities.Compress\"/> extension,\n\t\t/// it is possible at any point after connecting to enable compression to reduce network\n\t\t/// bandwidth usage. Ideally, this method should be called before authenticating.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Compression must be enabled before a folder has been selected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the <see cref=\"ImapCapabilities.Compress\"/> extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the COMPRESS command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Compress (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCompressCommand (cancellationToken);\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessCompressResponse (ic);\n\t\t}\n\n\t\tbool TryQueueEnableQuickResyncCommand (CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (engine.State != ImapEngineState.Authenticated)\n\t\t\t\tthrow new InvalidOperationException (\"QRESYNC needs to be enabled immediately after authenticating.\");\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.QuickResync) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the QRESYNC extension.\");\n\n\t\t\tif (engine.QResyncEnabled) {\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tic = engine.QueueCommand (cancellationToken, null, \"ENABLE QRESYNC CONDSTORE\\r\\n\");\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvoid ProcessEnableResponse (ImapCommand ic)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"ENABLE\");\n\n\t\t\tif (engine.QuirksMode == ImapQuirksMode.iCloud) {\n\t\t\t\t// Note: iCloud's response to the `ENABLE QRESYNC CONDSTORE` command does not include an untagged response\n\t\t\t\t// notifying us that QRESYNC or CONDSTORE have been enabled. Instead, if we get a tagged OK response, we\n\t\t\t\t// assume that these features were enabled successfully.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1871 for details.\n\t\t\t\tengine.QResyncEnabled = true;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Enable the QRESYNC feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Enables the <a href=\"https://tools.ietf.org/html/rfc5162\">QRESYNC</a> feature.</para>\n\t\t/// <para>The QRESYNC extension improves resynchronization performance of folders by\n\t\t/// querying the IMAP server for a list of changes when the folder is opened using the\n\t\t/// <see cref=\"ImapFolder.Open(FolderAccess,uint,ulong,System.Collections.Generic.IList&lt;UniqueId&gt;,System.Threading.CancellationToken)\"/>\n\t\t/// method.</para>\n\t\t/// <para>If this feature is enabled, the <see cref=\"MailFolder.MessageExpunged\"/> event is replaced\n\t\t/// with the <see cref=\"MailFolder.MessagesVanished\"/> event.</para>\n\t\t/// <para>This method needs to be called immediately after calling one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a> methods, before\n\t\t/// opening any folders.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Quick resynchronization needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QRESYNC extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ENABLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void EnableQuickResync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueEnableQuickResyncCommand (cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessEnableResponse (ic);\n\t\t}\n\n\t\tbool TryQueueEnableUTF8Command (CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (engine.State != ImapEngineState.Authenticated)\n\t\t\t\tthrow new InvalidOperationException (\"UTF8=ACCEPT needs to be enabled immediately after authenticating.\");\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.UTF8Accept) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the UTF8=ACCEPT extension.\");\n\n\t\t\tif (engine.UTF8Enabled) {\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tic = engine.QueueCommand (cancellationToken, null, \"ENABLE UTF8=ACCEPT\\r\\n\");\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Enable the UTF8=ACCEPT extension.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Enables the <a href=\"https://tools.ietf.org/html/rfc6855\">UTF8=ACCEPT</a> extension.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// UTF8=ACCEPT needs to be enabled before selecting a folder.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the UTF8=ACCEPT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ENABLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void EnableUTF8 (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueEnableUTF8Command (cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessEnableResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueIdentifyCommand (ImapImplementation clientImplementation, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Id) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ID extension.\");\n\n\t\t\tvar command = new StringBuilder (\"ID \");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tif (clientImplementation != null && clientImplementation.Properties.Count > 0) {\n\t\t\t\tcommand.Append ('(');\n\t\t\t\tforeach (var property in clientImplementation.Properties) {\n\t\t\t\t\tcommand.Append (\"%Q \");\n\t\t\t\t\targs.Add (property.Key);\n\n\t\t\t\t\tif (property.Value != null) {\n\t\t\t\t\t\tcommand.Append (\"%Q \");\n\t\t\t\t\t\targs.Add (property.Value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommand.Append (\"NIL \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcommand[command.Length - 1] = ')';\n\t\t\t\tcommand.Append (\"\\r\\n\");\n\t\t\t} else {\n\t\t\t\tcommand.Append (\"NIL\\r\\n\");\n\t\t\t}\n\n\t\t\tvar ic = new ImapCommand (engine, cancellationToken, null, command.ToString (), args.ToArray ());\n\t\t\tic.RegisterUntaggedHandler (\"ID\", ImapUtils.UntaggedIdHandler);\n\n\t\t\tengine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tstatic ImapImplementation ProcessIdentifyResponse (ImapCommand ic)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"ID\");\n\n\t\t\treturn (ImapImplementation) ic.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Identify the client implementation to the server and obtain the server implementation details.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Passes along the client implementation details to the server while also obtaining implementation\n\t\t/// details from the server.</para>\n\t\t/// <para>If the <paramref name=\"clientImplementation\"/> is <see langword=\"null\" /> or no properties have been set, no\n\t\t/// identifying information will be sent to the server.</para>\n\t\t/// <note type=\"security\">\n\t\t/// <para>Security Implications</para>\n\t\t/// <para>This command has the danger of violating the privacy of users if misused. Clients should\n\t\t/// notify users that they send the ID command.</para>\n\t\t/// <para>It is highly desirable that implementations provide a method of disabling ID support, perhaps by\n\t\t/// not calling this method at all, or by passing <see langword=\"null\" /> as the <paramref name=\"clientImplementation\"/>\n\t\t/// argument.</para>\n\t\t/// <para>Implementors must exercise extreme care in adding properties to the <paramref name=\"clientImplementation\"/>.\n\t\t/// Some properties, such as a processor ID number, Ethernet address, or other unique (or mostly unique) identifier\n\t\t/// would allow tracking of users in ways that violate user privacy expectations and may also make it easier for\n\t\t/// attackers to exploit security holes in the client.</para>\n\t\t/// </note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <returns>The implementation details of the server if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"clientImplementation\">The client implementation.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ID extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the ID command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ImapImplementation Identify (ImapImplementation clientImplementation, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueIdentifyCommand (clientImplementation, cancellationToken);\n\n\t\t\tengine.Run (ic);\n\n\t\t\treturn ProcessIdentifyResponse (ic);\n\t\t}\n\n\t\t#region IMailService implementation\n\n\t\t/// <summary>\n\t\t/// Get the authentication mechanisms supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The authentication mechanisms are queried as part of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a>\n\t\t/// method.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before authenticating.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The authentication mechanisms.</value>\n\t\tpublic override HashSet<string> AuthenticationMechanisms {\n\t\t\tget { return engine.AuthenticationMechanisms; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The threading algorithms are queried as part of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a>\n\t\t/// and <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The supported threading algorithms.</value>\n\t\tpublic override HashSet<ThreadingAlgorithm> ThreadingAlgorithms {\n\t\t\tget { return engine.ThreadingAlgorithms; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the timeout for network streaming operations, in milliseconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying socket stream's <see cref=\"System.IO.Stream.ReadTimeout\"/>\n\t\t/// and <see cref=\"System.IO.Stream.WriteTimeout\"/> values.\n\t\t/// </remarks>\n\t\t/// <value>The timeout in milliseconds.</value>\n\t\tpublic override int Timeout {\n\t\t\tget { return timeout; }\n\t\t\tset {\n\t\t\t\tif (engine.IsConnected && engine.Stream.CanTimeout) {\n\t\t\t\t\tengine.Stream.WriteTimeout = value;\n\t\t\t\t\tengine.Stream.ReadTimeout = value;\n\t\t\t\t}\n\n\t\t\t\ttimeout = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently connected to an IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <see cref=\"IsConnected\"/> state is set to <see langword=\"true\" /> immediately after\n\t\t/// one of the <a href=\"Overload_MailKit_Net_Imap_ImapClient_Connect.htm\">Connect</a>\n\t\t/// methods succeeds and is not set back to <see langword=\"false\" /> until either the client\n\t\t/// is disconnected via <see cref=\"Disconnect(bool,CancellationToken)\"/> or until an\n\t\t/// <see cref=\"ImapProtocolException\"/> is thrown while attempting to read or write to\n\t\t/// the underlying network socket.</para>\n\t\t/// <para>When an <see cref=\"ImapProtocolException\"/> is caught, the connection state of the\n\t\t/// <see cref=\"ImapClient\"/> should be checked before continuing.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsConnected {\n\t\t\tget { return engine.IsConnected; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsSecure {\n\t\t\tget { return engine.IsSecure; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is encrypted; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsEncrypted {\n\t\t\tget { return engine.IsSecure && (engine.Stream.Stream is SslStream sslStream) && sslStream.IsEncrypted; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is signed; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsSigned {\n\t\t\tget { return engine.IsSecure && (engine.Stream.Stream is SslStream sslStream) && sslStream.IsSigned; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the negotiated SSL or TLS protocol version once an SSL or TLS connection has been made.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS protocol version.</value>\n\t\tpublic override SslProtocols SslProtocol {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.SslProtocol;\n\n\t\t\t\treturn SslProtocols.None;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override CipherAlgorithmType? SslCipherAlgorithm {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.CipherAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslCipherStrength {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.CipherStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n#if NET5_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher suite.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher suite once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher suite.</value>\n\t\tpublic override TlsCipherSuite? SslCipherSuite {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.NegotiatedCipherSuite;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override HashAlgorithmType? SslHashAlgorithm {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.HashAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslHashStrength {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.HashStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override ExchangeAlgorithmType? SslKeyExchangeAlgorithm {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.KeyExchangeAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslKeyExchangeStrength {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.KeyExchangeStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently authenticated with the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the client is currently authenticated with the IMAP server.</para>\n\t\t/// <para>To authenticate with the IMAP server, use one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Imap_ImapClient_Authenticate.htm\">Authenticate</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsAuthenticated {\n\t\t\tget { return engine.State >= ImapEngineState.Authenticated; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently in the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the client is currently in the IDLE state.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if an IDLE command is active; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsIdle {\n\t\t\tget { return engine.State == ImapEngineState.Idle; }\n\t\t}\n\n\t\tstatic AuthenticationException CreateAuthenticationException (ImapCommand ic)\n\t\t{\n\t\t\tfor (int i = 0; i < ic.RespCodes.Count; i++) {\n\t\t\t\tif (ic.RespCodes[i].IsError || ic.RespCodes[i].Type == ImapResponseCodeType.Alert)\n\t\t\t\t\treturn new AuthenticationException (ic.RespCodes[i].Message);\n\t\t\t}\n\n\t\t\tif (ic.ResponseText != null)\n\t\t\t\treturn new AuthenticationException (ic.ResponseText);\n\n\t\t\treturn new AuthenticationException ();\n\t\t}\n\n\t\tvoid EmitAndThrowOnAlert (ImapCommand ic)\n\t\t{\n\t\t\tfor (int i = 0; i < ic.RespCodes.Count; i++) {\n\t\t\t\tif (ic.RespCodes[i].Type != ImapResponseCodeType.Alert)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tOnAlert (ic.RespCodes[i].Message);\n\n\t\t\t\tthrow new AuthenticationException (ic.ResponseText ?? ic.RespCodes[i].Message);\n\t\t\t}\n\t\t}\n\n\t\tstatic bool IsHexDigit (char c)\n\t\t{\n\t\t\treturn (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');\n\t\t}\n\n\t\tstatic uint HexUnescape (uint c)\n\t\t{\n\t\t\tif (c >= 'a')\n\t\t\t\treturn (c - 'a') + 10;\n\n\t\t\tif (c >= 'A')\n\t\t\t\treturn (c - 'A') + 10;\n\n\t\t\treturn c - '0';\n\t\t}\n\n\t\tstatic char HexUnescape (string pattern, ref int index)\n\t\t{\n\t\t\tuint value, c;\n\n\t\t\tif (pattern[index++] != '%' || !IsHexDigit (pattern[index]) || !IsHexDigit (pattern[index + 1]))\n\t\t\t\treturn '%';\n\n\t\t\tc = (uint) pattern[index++];\n\t\t\tvalue = HexUnescape (c) << 4;\n\t\t\tc = pattern[index++];\n\t\t\tvalue |= HexUnescape (c);\n\n\t\t\treturn (char) value;\n\t\t}\n\n\t\tinternal static string UnescapeUserName (string escaped)\n\t\t{\n\t\t\tint index;\n\n\t\t\tif ((index = escaped.IndexOf ('%')) == -1)\n\t\t\t\treturn escaped;\n\n\t\t\tvar userName = new StringBuilder (escaped.Length);\n\t\t\tint startIndex = 0;\n\n\t\t\tdo {\n\t\t\t\tuserName.Append (escaped, startIndex, index - startIndex);\n\t\t\t\tuserName.Append (HexUnescape (escaped, ref index));\n\t\t\t\tstartIndex = index;\n\n\t\t\t\tif (startIndex >= escaped.Length)\n\t\t\t\t\tbreak;\n\n\t\t\t\tindex = escaped.IndexOf ('%', startIndex);\n\t\t\t} while (index != -1);\n\n\t\t\tif (index == -1)\n\t\t\t\tuserName.Append (escaped, startIndex, escaped.Length - startIndex);\n\n\t\t\treturn userName.ToString ();\n\t\t}\n\n\t\tstatic void HexEscape (StringBuilder builder, char c)\n\t\t{\n\t\t\tbuilder.Append ('%');\n\t\t\tbuilder.Append (HexAlphabet[(c >> 4) & 0xF]);\n\t\t\tbuilder.Append (HexAlphabet[c & 0xF]);\n\t\t}\n\n\t\tinternal static void EscapeUserName (StringBuilder builder, string userName)\n\t\t{\n\t\t\tint index = userName.IndexOfAny (ReservedUriCharacters);\n\t\t\tint startIndex = 0;\n\n\t\t\twhile (index != -1) {\n\t\t\t\tbuilder.Append (userName, startIndex, index - startIndex);\n\t\t\t\tHexEscape (builder, userName[index++]);\n\t\t\t\tstartIndex = index;\n\n\t\t\t\tif (startIndex >= userName.Length)\n\t\t\t\t\tbreak;\n\n\t\t\t\tindex = userName.IndexOfAny (ReservedUriCharacters, startIndex);\n\t\t\t}\n\n\t\t\tbuilder.Append (userName, startIndex, userName.Length - startIndex);\n\t\t}\n\n\t\tstring GetSessionIdentifier (string userName)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tvar uri = engine.Uri!;\n\n\t\t\tbuilder.Append (uri.Scheme);\n\t\t\tbuilder.Append (\"://\");\n\t\t\tEscapeUserName (builder, userName);\n\t\t\tbuilder.Append ('@');\n\t\t\tbuilder.Append (uri.Host);\n\t\t\tbuilder.Append (':');\n\t\t\tbuilder.Append (uri.Port.ToString (CultureInfo.InvariantCulture));\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tvoid OnAuthenticated (string message, CancellationToken cancellationToken)\n\t\t{\n\t\t\tengine.QueryNamespaces (cancellationToken);\n\t\t\tengine.QuerySpecialFolders (cancellationToken);\n\t\t\tOnAuthenticated (message);\n\t\t}\n\n\t\tvoid CheckCanAuthenticate (SaslMechanism mechanism, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (mechanism == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mechanism));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif (engine.State >= ImapEngineState.Authenticated)\n\t\t\t\tthrow new InvalidOperationException (\"The ImapClient is already authenticated.\");\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t}\n\n\t\tvoid ConfigureSaslMechanism (SaslMechanism mechanism, Uri uri)\n\t\t{\n\t\t\tmechanism.ChannelBindingContext = engine.Stream!.Stream as IChannelBindingContext;\n\t\t\tmechanism.Uri = uri;\n\t\t}\n\n\t\tvoid ConfigureSaslMechanism (SaslMechanism mechanism)\n\t\t{\n\t\t\tvar uri = new Uri (\"imap://\" + engine.Uri!.Host);\n\n\t\t\tConfigureSaslMechanism (mechanism, uri);\n\t\t}\n\n\t\tvoid ProcessAuthenticateResponse (ImapCommand ic, SaslMechanism mechanism)\n\t\t{\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\tEmitAndThrowOnAlert (ic);\n\n\t\t\t\tthrow new AuthenticationException ();\n\t\t\t}\n\n\t\t\tengine.State = ImapEngineState.Authenticated;\n\n\t\t\tvar id = GetSessionIdentifier (mechanism.Credentials.UserName);\n\t\t\tif (id != identifier) {\n\t\t\t\tengine.FolderCache.Clear ();\n\t\t\t\tidentifier = id;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Authenticate (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanAuthenticate (mechanism, cancellationToken);\n\n\t\t\tint capabilitiesVersion = engine.CapabilitiesVersion;\n\t\t\tImapCommand? ic = null;\n\n\t\t\tConfigureSaslMechanism (mechanism);\n\n\t\t\tvar command = string.Format (\"AUTHENTICATE {0}\", mechanism.MechanismName);\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.SaslIR) != 0 && mechanism.SupportsInitialResponse) {\n\t\t\t\tstring ir = mechanism.Challenge (null, cancellationToken);\n\n\t\t\t\tcommand += \" \" + ir + \"\\r\\n\";\n\t\t\t} else {\n\t\t\t\tcommand += \"\\r\\n\";\n\t\t\t}\n\n\t\t\tic = engine.QueueCommand (cancellationToken, null, command);\n\t\t\tic.ContinuationHandler = (imap, cmd, text, xdoAsync) => {\n\t\t\t\tstring challenge = mechanism.Challenge (text, cmd.CancellationToken);\n\t\t\t\tvar buf = Encoding.ASCII.GetBytes (challenge + \"\\r\\n\");\n\n\t\t\t\timap.Stream!.Write (buf, 0, buf.Length, cmd.CancellationToken);\n\t\t\t\timap.Stream.Flush (cmd.CancellationToken);\n\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t};\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tengine.Run (ic);\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tProcessAuthenticateResponse (ic, mechanism);\n\n\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t// untagged CAPABILITIES response to the AUTHENTICATE command.\n\t\t\t\tif (engine.CapabilitiesVersion == capabilitiesVersion)\n\t\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\n\t\t\t\tOnAuthenticated (ic.ResponseText ?? string.Empty, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckCanAuthenticate (Encoding encoding, ICredentials credentials)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tif (credentials == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (credentials));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif (engine.State >= ImapEngineState.Authenticated)\n\t\t\t\tthrow new InvalidOperationException (\"The ImapClient is already authenticated.\");\n\t\t}\n\n\t\tvoid CheckCanLogin (ImapCommand? ic)\n\t\t{\n\t\t\tif ((Capabilities & ImapCapabilities.LoginDisabled) != 0) {\n\t\t\t\tif (ic == null)\n\t\t\t\t\tthrow new AuthenticationException (\"The LOGIN command is disabled.\");\n\n\t\t\t\tthrow CreateAuthenticationException (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the IMAP server supports one or more SASL authentication mechanisms,\n\t\t/// then the SASL mechanisms that both the client and server support (not including\n\t\t/// any OAUTH mechanisms) are tried in order of greatest security to weakest security.\n\t\t/// Once a SASL authentication mechanism is found that both client and server support,\n\t\t/// the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then LOGIN command is used as a fallback.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Authenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanAuthenticate (encoding, credentials);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tint capabilitiesVersion = engine.CapabilitiesVersion;\n\t\t\t\tvar uri = new Uri (\"imap://\" + engine.Uri!.Host);\n\t\t\t\tNetworkCredential? cred;\n\t\t\t\tImapCommand? ic = null;\n\t\t\t\tSaslMechanism? sasl;\n\t\t\t\tstring id;\n\n\t\t\t\tforeach (var authmech in SaslMechanism.Rank (engine.AuthenticationMechanisms)) {\n\t\t\t\t\tcred = credentials.GetCredential (uri, authmech);\n\n\t\t\t\t\tif (cred == null || (sasl = SaslMechanism.Create (authmech, encoding, cred)) == null)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tConfigureSaslMechanism (sasl, uri);\n\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\tvar command = string.Format (\"AUTHENTICATE {0}\", sasl.MechanismName);\n\n\t\t\t\t\tif ((engine.Capabilities & ImapCapabilities.SaslIR) != 0 && sasl.SupportsInitialResponse) {\n\t\t\t\t\t\tstring ir = sasl.Challenge (null, cancellationToken);\n\n\t\t\t\t\t\tcommand += \" \" + ir + \"\\r\\n\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommand += \"\\r\\n\";\n\t\t\t\t\t}\n\n\t\t\t\t\tic = engine.QueueCommand (cancellationToken, null, command);\n\t\t\t\t\tic.ContinuationHandler = (imap, cmd, text, xdoAsync) => {\n\t\t\t\t\t\tstring challenge = sasl.Challenge (text, cmd.CancellationToken);\n\n\t\t\t\t\t\tvar buf = Encoding.ASCII.GetBytes (challenge + \"\\r\\n\");\n\n\t\t\t\t\t\timap.Stream!.Write (buf, 0, buf.Length, cmd.CancellationToken);\n\t\t\t\t\t\timap.Stream.Flush (cmd.CancellationToken);\n\n\t\t\t\t\t\treturn Task.CompletedTask;\n\t\t\t\t\t};\n\n\t\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tengine.Run (ic);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\t\t\tEmitAndThrowOnAlert (ic);\n\t\t\t\t\t\tif (ic.Bye)\n\t\t\t\t\t\t\tthrow ImapProtocolException.Create (ic);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tengine.State = ImapEngineState.Authenticated;\n\n\t\t\t\t\tid = GetSessionIdentifier (cred.UserName);\n\t\t\t\t\tif (id != identifier) {\n\t\t\t\t\t\tengine.FolderCache.Clear ();\n\t\t\t\t\t\tidentifier = id;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t\t// untagged CAPABILITIES response to the AUTHENTICATE command.\n\t\t\t\t\tif (engine.CapabilitiesVersion == capabilitiesVersion)\n\t\t\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\n\t\t\t\t\tOnAuthenticated (ic.ResponseText ?? string.Empty, cancellationToken);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tCheckCanLogin (ic);\n\n\t\t\t\t// fall back to the classic LOGIN command...\n\t\t\t\tif ((cred = credentials.GetCredential (uri, \"DEFAULT\")) == null)\n\t\t\t\t\tthrow new AuthenticationException (\"No credentials could be found for the IMAP server.\");\n\n\t\t\t\tic = engine.QueueCommand (cancellationToken, null, \"LOGIN %S %S\\r\\n\", cred.UserName, cred.Password);\n\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tengine.Run (ic);\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tif (ic.Response != ImapCommandResponse.Ok)\n\t\t\t\t\tthrow CreateAuthenticationException (ic);\n\n\t\t\t\tengine.State = ImapEngineState.Authenticated;\n\n\t\t\t\tid = GetSessionIdentifier (cred.UserName);\n\t\t\t\tif (id != identifier) {\n\t\t\t\t\tengine.FolderCache.Clear ();\n\t\t\t\t\tidentifier = id;\n\t\t\t\t}\n\n\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t// untagged CAPABILITIES response to the LOGIN command.\n\t\t\t\tif (engine.CapabilitiesVersion == capabilitiesVersion)\n\t\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\n\t\t\t\tOnAuthenticated (ic.ResponseText ?? string.Empty, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tinternal static void ComputeDefaultValues (string host, ref int port, ref SecureSocketOptions options, out Uri uri, out bool starttls)\n\t\t{\n\t\t\tswitch (options) {\n\t\t\tdefault:\n\t\t\t\tif (port == 0)\n\t\t\t\t\tport = 143;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.Auto:\n\t\t\t\tswitch (port) {\n\t\t\t\tcase 0: port = 143; goto default;\n\t\t\t\tcase 993: options = SecureSocketOptions.SslOnConnect; break;\n\t\t\t\tdefault: options = SecureSocketOptions.StartTlsWhenAvailable; break;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.SslOnConnect:\n\t\t\t\tif (port == 0)\n\t\t\t\t\tport = 993;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (IPAddress.TryParse (host, out var ip) && ip.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\thost = \"[\" + host + \"]\";\n\n\t\t\tswitch (options) {\n\t\t\tcase SecureSocketOptions.StartTlsWhenAvailable:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"imap://{0}:{1}/?starttls=when-available\", host, port));\n\t\t\t\tstarttls = true;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.StartTls:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"imap://{0}:{1}/?starttls=always\", host, port));\n\t\t\t\tstarttls = true;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.SslOnConnect:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"imaps://{0}:{1}\", host, port));\n\t\t\t\tstarttls = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"imap://{0}:{1}\", host, port));\n\t\t\t\tstarttls = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckCanConnect (string host, int port)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The host name cannot be empty.\", nameof (host));\n\n\t\t\tif (port < 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (IsConnected)\n\t\t\t\tthrow new InvalidOperationException (\"The ImapClient is already connected.\");\n\t\t}\n\n\t\tvoid SslHandshake (SslStream ssl, string host, CancellationToken cancellationToken)\n\t\t{\n#if NET5_0_OR_GREATER\n\t\t\tssl.AuthenticateAsClient (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate));\n#else\n\t\t\tssl.AuthenticateAsClient (host, ClientCertificates, SslProtocols, CheckCertificateRevocation);\n#endif\n\t\t}\n\n\t\tvoid PostConnect (Stream stream, string host, int port, SecureSocketOptions options, bool starttls, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\tProtocolLogger.LogConnect (engine.Uri!);\n\t\t\t} catch {\n\t\t\t\tstream.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tconnecting = true;\n\n\t\t\tvar imap = new ImapStream (stream, ProtocolLogger);\n\n\t\t\ttry {\n\t\t\t\tengine.Connect (imap, cancellationToken);\n\t\t\t} catch {\n\t\t\t\tconnecting = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Only query the CAPABILITIES if the greeting didn't include them.\n\t\t\t\tif (engine.CapabilitiesVersion == 0)\n\t\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\n\t\t\t\tif (options == SecureSocketOptions.StartTls && (engine.Capabilities & ImapCapabilities.StartTLS) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the STARTTLS extension.\");\n\n\t\t\t\tif (starttls && (engine.Capabilities & ImapCapabilities.StartTLS) != 0) {\n\t\t\t\t\tvar ic = engine.QueueCommand (cancellationToken, null, \"STARTTLS\\r\\n\");\n\n\t\t\t\t\tengine.Run (ic);\n\n\t\t\t\t\tif (ic.Response == ImapCommandResponse.Ok) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar tls = new SslStream (stream, false, ValidateRemoteCertificate);\n\t\t\t\t\t\t\timap.Stream = tls;\n\n\t\t\t\t\t\t\tSslHandshake (tls, host, cancellationToken);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, true, \"IMAP\", host, port, 993, 143);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tengine.IsSecure = true;\n\n\t\t\t\t\t\t// Query the CAPABILITIES again if the server did not include an\n\t\t\t\t\t\t// untagged CAPABILITIES response to the STARTTLS command.\n\t\t\t\t\t\tif (engine.CapabilitiesVersion == 1)\n\t\t\t\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\t\t\t\t\t} else if (options == SecureSocketOptions.StartTls) {\n\t\t\t\t\t\tthrow ImapCommandException.Create (\"STARTTLS\", ic);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tengine.Disconnect (ex);\n\t\t\t\tthrow;\n\t\t\t} finally {\n\t\t\t\tconnecting = false;\n\t\t\t}\n\n\t\t\t// Note: we capture the state here in case someone calls Authenticate() from within the Connected event handler.\n\t\t\tvar authenticated = engine.State == ImapEngineState.Authenticated;\n\n\t\t\tOnConnected (host, port, options);\n\n\t\t\tif (authenticated)\n\t\t\t\tOnAuthenticated (string.Empty, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified IMAP or IMAP/S server.</para>\n\t\t/// <para>If the <paramref name=\"port\"/> has a value of <c>0</c>, then the\n\t\t/// <paramref name=\"options\"/> parameter is used to determine the default port to\n\t\t/// connect to. The default port used with <see cref=\"SecureSocketOptions.SslOnConnect\"/>\n\t\t/// is <c>993</c>. All other values will use a default port of <c>143</c>.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>993</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the IMAP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (host, port);\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tvar stream = ConnectNetwork (host, port, cancellationToken);\n\t\t\t\tstream.WriteTimeout = timeout;\n\t\t\t\tstream.ReadTimeout = timeout;\n\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tSslHandshake (ssl, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"IMAP\", host, port, 993, 143);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream = ssl;\n\t\t\t\t}\n\n\t\t\t\tPostConnect (stream, host, port, options, starttls, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckCanConnect (Stream stream, string host, int port)\n\t\t{\n\t\t\tif (stream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (stream));\n\n\t\t\tCheckCanConnect (host, port);\n\t\t}\n\n\t\tvoid CheckCanConnect (Socket socket, string host, int port)\n\t\t{\n\t\t\tif (socket == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (socket));\n\n\t\t\tif (!socket.Connected)\n\t\t\t\tthrow new ArgumentException (\"The socket is not connected.\", nameof (socket));\n\n\t\t\tCheckCanConnect (host, port);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified IMAP or IMAP/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified IMAP or IMAP/S server using\n\t\t/// the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>993</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the IMAP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (socket, host, port);\n\n\t\t\tConnect (new NetworkStream (socket, true), host, port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified IMAP or IMAP/S server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified IMAP or IMAP/S server using\n\t\t/// the provided stream.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>993</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"ImapClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the IMAP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// An IMAP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (stream, host, port);\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tStream network;\n\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tSslHandshake (ssl, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"IMAP\", host, port, 993, 143);\n\t\t\t\t\t}\n\n\t\t\t\t\tnetwork = ssl;\n\t\t\t\t} else {\n\t\t\t\t\tnetwork = stream;\n\t\t\t\t}\n\n\t\t\t\tif (network.CanTimeout) {\n\t\t\t\t\tnetwork.WriteTimeout = timeout;\n\t\t\t\t\tnetwork.ReadTimeout = timeout;\n\t\t\t\t}\n\n\t\t\t\tPostConnect (network, host, port, options, starttls, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a <c>LOGOUT</c> command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a <c>LOGOUT</c> command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic override void Disconnect (bool quit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!engine.IsConnected)\n\t\t\t\treturn;\n\n\t\t\tif (quit) {\n\t\t\t\ttry {\n\t\t\t\t\tvar ic = engine.QueueCommand (cancellationToken, null, \"LOGOUT\\r\\n\");\n\t\t\t\t\tengine.Run (ic);\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t} catch (ImapProtocolException) {\n\t\t\t\t} catch (ImapCommandException) {\n\t\t\t\t} catch (IOException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisconnecting = true;\n\n\t\t\tengine.Disconnect (null);\n\t\t}\n\n\t\tImapCommand QueueNoOpCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn engine.QueueCommand (cancellationToken, null, \"NOOP\\r\\n\");\n\t\t}\n\n\t\tstatic void ProcessNoOpResponse (ImapCommand ic)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"NOOP\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Ping the IMAP server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>NOOP</c> command is typically used to keep the connection with the IMAP server\n\t\t/// alive. When a client goes too long (typically 30 minutes) without sending any commands to the\n\t\t/// IMAP server, the IMAP server will close the connection with the client, forcing the client to\n\t\t/// reconnect before it can send any more commands.</para>\n\t\t/// <para>The <c>NOOP</c> command also provides a great way for a client to check for new\n\t\t/// messages.</para>\n\t\t/// <para>When the IMAP server receives a <c>NOOP</c> command, it will reply to the client with a\n\t\t/// list of pending updates such as <c>EXISTS</c> and <c>RECENT</c> counts on the currently\n\t\t/// selected folder. To receive these notifications, subscribe to the\n\t\t/// <see cref=\"MailFolder.CountChanged\"/> and <see cref=\"MailFolder.RecentChanged\"/> events,\n\t\t/// respectively.</para>\n\t\t/// <para>For more information about the <c>NOOP</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.1.2\">rfc3501</a>.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOOP command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic override void NoOp (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueNoOpCommand (cancellationToken);\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessNoOpResponse (ic);\n\t\t}\n\n\t\tvoid CheckCanIdle (CancellationToken doneToken)\n\t\t{\n\t\t\tif (!doneToken.CanBeCanceled)\n\t\t\t\tthrow new ArgumentException (\"The doneToken must be cancellable.\", nameof (doneToken));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Idle) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the IDLE extension.\");\n\n\t\t\tif (engine.State != ImapEngineState.Selected)\n\t\t\t\tthrow new InvalidOperationException (\"An ImapFolder has not been opened.\");\n\t\t}\n\n\t\tImapCommand QueueIdleCommand (ImapIdleContext context, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = engine.QueueCommand (cancellationToken, null, \"IDLE\\r\\n\");\n\t\t\tic.ContinuationHandler = context.ContinuationHandler;\n\t\t\tic.UserData = context;\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tstatic void ProcessIdleResponse (ImapCommand ic)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"IDLE\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Toggle the <see cref=\"ImapClient\"/> into the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>When a client enters the IDLE state, the IMAP server will send\n\t\t/// events to the client as they occur on the selected folder. These events\n\t\t/// may include notifications of new messages arriving, expunge notifications,\n\t\t/// flag changes, etc.</para>\n\t\t/// <para>Due to the nature of the IDLE command, a folder must be selected\n\t\t/// before a client can enter into the IDLE state. This can be done by\n\t\t/// opening a folder using\n\t\t/// <see cref=\"MailKit.MailFolder.Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// or any of the other variants.</para>\n\t\t/// <para>While the IDLE command is running, no other commands may be issued until the\n\t\t/// <paramref name=\"doneToken\"/> is cancelled.</para>\n\t\t/// <note type=\"note\">It is especially important to cancel the <paramref name=\"doneToken\"/>\n\t\t/// before cancelling the <paramref name=\"cancellationToken\"/> when using SSL or TLS due to\n\t\t/// the fact that <see cref=\"System.Net.Security.SslStream\"/> cannot be polled.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapIdleExample.cs\"/>\n\t\t/// </example>\n\t\t/// <param name=\"doneToken\">The cancellation token used to return to the non-idle state.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"doneToken\"/> must be cancellable (i.e. <see cref=\"System.Threading.CancellationToken.None\"/> cannot be used).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// A <see cref=\"ImapFolder\"/> has not been opened.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the IDLE extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the IDLE command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic void Idle (CancellationToken doneToken, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanIdle (doneToken);\n\n\t\t\tif (doneToken.IsCancellationRequested)\n\t\t\t\treturn;\n\n\t\t\tusing (var context = new ImapIdleContext (engine, doneToken, cancellationToken)) {\n\t\t\t\tvar ic = QueueIdleCommand (context, cancellationToken);\n\n\t\t\t\tengine.Run (ic);\n\n\t\t\t\tProcessIdleResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueNotifyCommand (bool status, IList<ImapEventGroup> eventGroups, CancellationToken cancellationToken, out bool notifySelectedNewExpunge)\n\t\t{\n\t\t\tif (eventGroups == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (eventGroups));\n\n\t\t\tif (eventGroups.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No event groups specified.\", nameof (eventGroups));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Notify) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the NOTIFY extension.\");\n\n\t\t\tnotifySelectedNewExpunge = false;\n\n\t\t\tvar command = new StringBuilder (\"NOTIFY SET\");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tif (status)\n\t\t\t\tcommand.Append (\" STATUS\");\n\n\t\t\tforeach (var group in eventGroups) {\n\t\t\t\tcommand.Append (' ');\n\n\t\t\t\tgroup.Format (engine, command, args, ref notifySelectedNewExpunge);\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (engine, cancellationToken, null, command.ToString (), args.ToArray ());\n\n\t\t\tengine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessNotifyResponse (ImapCommand ic, bool notifySelectedNewExpunge)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"NOTIFY\");\n\n\t\t\tengine.NotifySelectedNewExpunge = notifySelectedNewExpunge;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Request the specified notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <a href=\"https://tools.ietf.org/html/rfc5465\">NOTIFY</a> command is used to expand\n\t\t/// which notifications the client wishes to be notified about, including status notifications\n\t\t/// about folders other than the currently selected folder. It can also be used to automatically\n\t\t/// FETCH information about new messages that have arrived in the currently selected folder.</para>\n\t\t/// <para>This, combined with <see cref=\"Idle(CancellationToken, CancellationToken)\"/>,\n\t\t/// can be used to get instant notifications for changes to any of the specified folders.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"status\"><see langword=\"true\" /> if the server should immediately notify the client of the\n\t\t/// selected folder's status; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"eventGroups\">The specific event groups that the client would like to receive notifications for.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"eventGroups\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"eventGroups\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// One or more <see cref=\"ImapEventGroup\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic void Notify (bool status, IList<ImapEventGroup> eventGroups, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueNotifyCommand (status, eventGroups, cancellationToken, out bool notifySelectedNewExpunge);\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessNotifyResponse (ic, notifySelectedNewExpunge);\n\t\t}\n\n\t\tImapCommand QueueDisableNotifyCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Notify) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the NOTIFY extension.\");\n\n\t\t\tvar ic = new ImapCommand (engine, cancellationToken, null, \"NOTIFY NONE\\r\\n\");\n\n\t\t\tengine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Disable any previously requested notification events from the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Disables any notification events requested in a prior call to \n\t\t/// <see cref=\"Notify(bool, IList{ImapEventGroup}, CancellationToken)\"/>.\n\t\t/// request.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the NOTIFY extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the NOTIFY command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic void DisableNotify (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueDisableNotifyCommand (cancellationToken);\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessNotifyResponse (ic, false);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IMailStore implementation\n\n\t\t/// <summary>\n\t\t/// Get the personal namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The personal folder namespaces contain a user's personal mailbox folders.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Namespaces\"/>\n\t\t/// </example>\n\t\t/// <value>The personal namespaces.</value>\n\t\tpublic override FolderNamespaceCollection PersonalNamespaces {\n\t\t\tget { return engine.PersonalNamespaces; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the shared namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The shared folder namespaces contain mailbox folders that are shared with the user.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Namespaces\"/>\n\t\t/// </example>\n\t\t/// <value>The shared namespaces.</value>\n\t\tpublic override FolderNamespaceCollection SharedNamespaces {\n\t\t\tget { return engine.SharedNamespaces; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the other namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The other folder namespaces contain other mailbox folders.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Namespaces\"/>\n\t\t/// </example>\n\t\t/// <value>The other namespaces.</value>\n\t\tpublic override FolderNamespaceCollection OtherNamespaces {\n\t\t\tget { return engine.OtherNamespaces; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mail store supports quotas.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the mail store supports quotas.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mail store supports quotas; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsQuotas {\n\t\t\tget { return (engine.Capabilities & ImapCapabilities.Quota) != 0; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the Inbox folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The Inbox folder is the default folder and always exists on the server.</para>\n\t\t/// <note type=\"note\">This property will only be available after the client has been authenticated.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <value>The Inbox folder.</value>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic override IMailFolder? Inbox {\n\t\t\tget {\n\t\t\t\tCheckDisposed ();\n\t\t\t\tCheckConnected ();\n\t\t\t\tCheckAuthenticated ();\n\n\t\t\t\treturn engine.Inbox;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified special folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Not all IMAP servers support special folders. Only IMAP servers\n\t\t/// supporting the <see cref=\"ImapCapabilities.SpecialUse\"/> or\n\t\t/// <see cref=\"ImapCapabilities.XList\"/> extensions may have\n\t\t/// special folders.\n\t\t/// </remarks>\n\t\t/// <returns>The folder if available; otherwise <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"folder\">The type of special folder.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"folder\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the SPECIAL-USE nor XLIST extensions.\n\t\t/// </exception>\n\t\tpublic override IMailFolder? GetFolder (SpecialFolder folder)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((Capabilities & (ImapCapabilities.SpecialUse | ImapCapabilities.XList)) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the SPECIAL-USE nor XLIST extensions.\");\n\n\t\t\tswitch (folder) {\n\t\t\tcase SpecialFolder.All:       return engine.All;\n\t\t\tcase SpecialFolder.Archive:   return engine.Archive;\n\t\t\tcase SpecialFolder.Drafts:    return engine.Drafts;\n\t\t\tcase SpecialFolder.Flagged:   return engine.Flagged;\n\t\t\tcase SpecialFolder.Important: return engine.Important;\n\t\t\tcase SpecialFolder.Junk:      return engine.Junk;\n\t\t\tcase SpecialFolder.Sent:      return engine.Sent;\n\t\t\tcase SpecialFolder.Trash:     return engine.Trash;\n\t\t\tdefault: throw new ArgumentOutOfRangeException (nameof (folder));\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the folder for the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder for the specified namespace.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Namespaces\"/>\n\t\t/// </example>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\tpublic override IMailFolder GetFolder (FolderNamespace @namespace)\n\t\t{\n\t\t\tif (@namespace == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (@namespace));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tvar encodedName = engine.EncodeMailboxName (@namespace.Path);\n\n\t\t\tif (engine.TryGetCachedFolder (encodedName, out var folder))\n\t\t\t\treturn folder;\n\n\t\t\tthrow new FolderNotFoundException (@namespace.Path);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"namespace\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The namespace folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the LIST or LSUB command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic override IList<IMailFolder> GetFolders (FolderNamespace @namespace, StatusItems items = StatusItems.None, bool subscribedOnly = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (@namespace == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (@namespace));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn engine.GetFolders (@namespace, items, subscribedOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder for the specified path.\n\t\t/// </remarks>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"path\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied to the LIST command with a NO or BAD response.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server responded with an unexpected token.\n\t\t/// </exception>\n\t\tpublic override IMailFolder GetFolder (string path, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (path == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (path));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn engine.GetFolder (path, cancellationToken);\n\t\t}\n\n\t\tImapCommand QueueGetMetadataCommand (MetadataTag tag, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((engine.Capabilities & (ImapCapabilities.Metadata | ImapCapabilities.MetadataServer)) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the METADATA extension.\");\n\n\t\t\tvar ic = new ImapCommand (engine, cancellationToken, null, \"GETMETADATA \\\"\\\" %S\\r\\n\", tag.Id);\n\t\t\tic.RegisterUntaggedHandler (\"METADATA\", ImapUtils.UntaggedMetadataHandler);\n\t\t\tvar metadata = new MetadataCollection ();\n\t\t\tic.UserData = metadata;\n\n\t\t\tengine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tstring? ProcessGetMetadataResponse (ImapCommand ic, MetadataTag tag)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"GETMETADATA\");\n\n\t\t\tvar metadata = (MetadataCollection) ic.UserData!;\n\t\t\tstring? value = null;\n\n\t\t\tfor (int i = 0; i < metadata.Count; i++) {\n\t\t\t\tif (metadata[i].EncodedName.Length == 0 && metadata[i].Tag.Id == tag.Id) {\n\t\t\t\t\tvalue = metadata[i].Value;\n\t\t\t\t\tmetadata.RemoveAt (i);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tengine.ProcessMetadataChanges (metadata);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA or METADATA-SERVER extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override string? GetMetadata (MetadataTag tag, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMetadataCommand (tag, cancellationToken);\n\n\t\t\tengine.Run (ic);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, tag);\n\t\t}\n\n\t\tbool TryQueueGetMetadataCommand (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (tags == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (tags));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((engine.Capabilities & (ImapCapabilities.Metadata | ImapCapabilities.MetadataServer)) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the METADATA or METADATA-SERVER extension.\");\n\n\t\t\tvar command = new StringBuilder (\"GETMETADATA \\\"\\\"\");\n\t\t\tvar args = new List<object> ();\n\t\t\tbool hasOptions = false;\n\n\t\t\tif (options.MaxSize.HasValue || options.Depth != 0) {\n\t\t\t\tcommand.Append (\" (\");\n\t\t\t\tif (options.MaxSize.HasValue) {\n\t\t\t\t\tcommand.Append (\"MAXSIZE \");\n\t\t\t\t\tcommand.Append (options.MaxSize.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\t\tcommand.Append (' ');\n\t\t\t\t}\n\t\t\t\tif (options.Depth > 0) {\n\t\t\t\t\tcommand.Append (\"DEPTH \");\n\t\t\t\t\tcommand.Append (options.Depth == int.MaxValue ? \"infinity\" : \"1\");\n\t\t\t\t\tcommand.Append (' ');\n\t\t\t\t}\n\t\t\t\tcommand[command.Length - 1] = ')';\n\t\t\t\tcommand.Append (' ');\n\t\t\t\thasOptions = true;\n\t\t\t}\n\n\t\t\tint startIndex = command.Length;\n\t\t\tforeach (var tag in tags) {\n\t\t\t\tcommand.Append (\" %S\");\n\t\t\t\targs.Add (tag.Id);\n\t\t\t}\n\n\t\t\tif (hasOptions) {\n\t\t\t\tcommand[startIndex] = '(';\n\t\t\t\tcommand.Append (')');\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tif (args.Count == 0) {\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tic = new ImapCommand (engine, cancellationToken, null, command.ToString (), args.ToArray ());\n\t\t\tic.RegisterUntaggedHandler (\"METADATA\", ImapUtils.UntaggedMetadataHandler);\n\t\t\tic.UserData = new MetadataCollection ();\n\t\t\toptions.LongEntries = 0;\n\n\t\t\tengine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tMetadataCollection ProcessGetMetadataResponse (ImapCommand ic, MetadataOptions options)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"GETMETADATA\");\n\n\t\t\tif (ic.RespCodes.Count > 0 && ic.RespCodes[ic.RespCodes.Count - 1].Type == ImapResponseCodeType.Metadata) {\n\t\t\t\tvar metadata = (MetadataResponseCode) ic.RespCodes[ic.RespCodes.Count - 1];\n\n\t\t\t\tif (metadata.SubType == MetadataResponseCodeSubType.LongEntries)\n\t\t\t\t\toptions.LongEntries = metadata.Value;\n\t\t\t}\n\n\t\t\treturn engine.FilterMetadata ((MetadataCollection) ic.UserData!, string.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA or METADATA-SERVER extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueGetMetadataCommand (options, tags, cancellationToken, out var ic))\n\t\t\t\treturn new MetadataCollection ();\n\n\t\t\tengine.Run (ic);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, options);\n\t\t}\n\n\t\tbool TryQueueSetMetadataCommand (MetadataCollection metadata, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tif (metadata == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (metadata));\n\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif ((engine.Capabilities & (ImapCapabilities.Metadata | ImapCapabilities.MetadataServer)) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the METADATA or METADATA-SERVER extension.\");\n\n\t\t\tif (metadata.Count == 0) {\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar command = new StringBuilder (\"SETMETADATA \\\"\\\" (\");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tfor (int i = 0; i < metadata.Count; i++) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\tcommand.Append (' ');\n\n\t\t\t\tif (metadata[i].Value != null) {\n\t\t\t\t\tcommand.Append (\"%S %S\");\n\t\t\t\t\targs.Add (metadata[i].Tag.Id);\n\t\t\t\t\targs.Add (metadata[i].Value);\n\t\t\t\t} else {\n\t\t\t\t\tcommand.Append (\"%S NIL\");\n\t\t\t\t\targs.Add (metadata[i].Tag.Id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcommand.Append (\")\\r\\n\");\n\n\t\t\tic = new ImapCommand (engine, cancellationToken, null, command.ToString (), args.ToArray ());\n\n\t\t\tengine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic void ProcessSetMetadataResponse (ImapCommand ic)\n\t\t{\n\t\t\tic.ThrowIfNotOk (\"SETMETADATA\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA or METADATA-SERVER extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void SetMetadata (MetadataCollection metadata, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueSetMetadataCommand (metadata, cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tengine.Run (ic);\n\n\t\t\tProcessSetMetadataResponse (ic);\n\t\t}\n\n\t\t#endregion\n\n\t\tvoid OnEngineMetadataChanged (object? sender, MetadataChangedEventArgs e)\n\t\t{\n\t\t\tOnMetadataChanged (e.Metadata);\n\t\t}\n\n\t\tvoid OnEngineFolderCreated (object? sender, FolderCreatedEventArgs e)\n\t\t{\n\t\t\tOnFolderCreated (e.Folder);\n\t\t}\n\n\t\tvoid OnEngineAlert (object? sender, AlertEventArgs e)\n\t\t{\n\t\t\tOnAlert (e.Message);\n\t\t}\n\n\t\tvoid OnEngineWebAlert (object? sender, WebAlertEventArgs e)\n\t\t{\n\t\t\tOnWebAlert (e.WebUri, e.Message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when a Google Mail server sends a WEBALERT response code to the client.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"WebAlert\"/> event is raised whenever the Google Mail server sends a\n\t\t/// WEBALERT message.\n\t\t/// </remarks>\n\t\tpublic event EventHandler<WebAlertEventArgs>? WebAlert;\n\n\t\t/// <summary>\n\t\t/// Raise the web alert event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Raises the web alert event.\n\t\t/// </remarks>\n\t\t/// <param name=\"uri\">The web alert URI.</param>\n\t\t/// <param name=\"message\">The web alert message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uri\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tprotected virtual void OnWebAlert (Uri uri, string message)\n\t\t{\n\t\t\tWebAlert?.Invoke (this, new WebAlertEventArgs (uri, message));\n\t\t}\n\n\t\tvoid OnEngineDisconnected (object? sender, EventArgs e)\n\t\t{\n\t\t\tif (connecting)\n\t\t\t\treturn;\n\n\t\t\tvar requested = disconnecting;\n\t\t\tvar uri = engine.Uri!;\n\n\t\t\tdisconnecting = false;\n\n\t\t\tOnDisconnected (uri.Host, uri.Port, GetSecureSocketOptions (uri), requested);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"ImapClient\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"ImapClient\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tengine.MetadataChanged -= OnEngineMetadataChanged;\n\t\t\t\tengine.FolderCreated -= OnEngineFolderCreated;\n\t\t\t\tengine.Disconnected -= OnEngineDisconnected;\n\t\t\t\tengine.WebAlert -= OnEngineWebAlert;\n\t\t\t\tengine.Alert -= OnEngineAlert;\n\t\t\t\tengine.Dispose ();\n\t\t\t\tdisposed = true;\n\t\t\t}\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommand.cs",
    "content": "﻿//\n// ImapCommand.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nusing SslStream = MailKit.Net.SslStream;\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An IMAP continuation handler.\n\t/// </summary>\n\t/// <remarks>\n\t/// All exceptions thrown by the handler are considered fatal and will\n\t/// force-disconnect the connection. If a non-fatal error occurs, set\n\t/// it on the <see cref=\"ImapCommand.Exception\"/> property.\n\t/// </remarks>\n\tdelegate Task ImapContinuationHandler (ImapEngine engine, ImapCommand ic, string text, bool doAsync);\n\n\t/// <summary>\n\t/// An IMAP untagged response handler.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>Most IMAP commands return their results in untagged responses.</para>\n\t/// </remarks>\n\tdelegate Task ImapUntaggedHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync);\n\n\tdelegate void ImapCommandResetHandler (ImapCommand ic);\n\n\tenum ImapStringType {\n\t\tAtom,\n\t\tQString,\n\t\tLiteral,\n\t\tNil\n\t}\n\n\t/// <summary>\n\t/// A partial IMAP command.\n\t/// </summary>\n\t/// <remarks>\n\t/// IMAP commands that contain literal strings are broken up into multiple parts\n\t/// in case the IMAP server does not support the LITERAL+ extension. These parts\n\t/// are then sent individually as we receive \"+\" responses from the server.\n\t/// </remarks>\n\tclass ImapCommandPart\n\t{\n\t\tpublic readonly byte[] Command;\n\t\tpublic readonly ImapLiteral? Literal;\n\t\tpublic readonly bool WaitForContinuation;\n\n\t\tpublic ImapCommandPart (byte[] command, ImapLiteral? literal, bool wait = true)\n\t\t{\n\t\t\tWaitForContinuation = wait;\n\t\t\tCommand = command;\n\t\t\tLiteral = literal;\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An IMAP command.\n\t/// </summary>\n\tclass ImapCommand\n\t{\n\t\tstatic readonly byte[] UTF8LiteralTokenPrefix = Encoding.ASCII.GetBytes (\"UTF8 (~{\");\n\t\tstatic readonly byte[] LiteralTokenSuffix = { (byte) '}', (byte) '\\r', (byte) '\\n' };\n\t\tstatic readonly byte[] Nil = { (byte) 'N', (byte) 'I', (byte) 'L' };\n\t\tstatic readonly byte[] NewLine = { (byte) '\\r', (byte) '\\n' };\n\t\tstatic readonly byte[] LiteralTokenPrefix = { (byte) '{' };\n\n\t\tpublic Dictionary<string, ImapUntaggedHandler> UntaggedHandlers { get; private set; }\n\t\tpublic ImapContinuationHandler? ContinuationHandler { get; set; }\n\t\tpublic CancellationToken CancellationToken { get; private set; }\n\t\tpublic ImapCommandStatus Status { get; internal set; }\n\t\tpublic ImapCommandResponse Response { get; internal set; }\n\t\tpublic ITransferProgress? Progress { get; internal set; }\n\t\tpublic Exception? Exception { get; internal set; }\n\t\tpublic readonly List<ImapResponseCode> RespCodes;\n\t\tpublic string? ResponseText { get; internal set; }\n\t\tpublic ImapFolder? Folder { get; private set; }\n\t\tpublic object? UserData { get; internal set; }\n\t\tpublic bool ListReturnsSubscribed { get; internal set; }\n\t\tpublic bool Logout { get; private set; }\n\t\tpublic bool Lsub { get; internal set; }\n\t\tpublic string? Tag { get; private set; }\n\t\tpublic bool Bye { get; internal set; }\n\n\t\treadonly List<ImapCommandPart> parts = new List<ImapCommandPart> ();\n\t\treadonly ImapEngine Engine;\n\t\treadonly long totalSize;\n\t\tlong nwritten;\n\t\tint current;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapCommand\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.Net.Imap.ImapCommand\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The IMAP engine that will be sending the command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"folder\">The IMAP folder that the command operates on.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"format\">The command format.</param>\n\t\t/// <param name=\"args\">The command arguments.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"engine\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"format\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic ImapCommand (ImapEngine engine, CancellationToken cancellationToken, ImapFolder? folder, FormatOptions options, string format, params object[] args)\n\t\t{\n\t\t\tif (engine == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (engine));\n\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (format == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (format));\n\n\t\t\tUntaggedHandlers = new Dictionary<string, ImapUntaggedHandler> (StringComparer.OrdinalIgnoreCase);\n\t\t\tLogout = format.Equals (\"LOGOUT\\r\\n\", StringComparison.Ordinal);\n\t\t\tRespCodes = new List<ImapResponseCode> ();\n\t\t\tCancellationToken = cancellationToken;\n\t\t\tResponse = ImapCommandResponse.None;\n\t\t\tStatus = ImapCommandStatus.Created;\n\t\t\tEngine = engine;\n\t\t\tFolder = folder;\n\n\t\t\tusing (var builder = new ByteArrayBuilder (1024)) {\n\t\t\t\tbyte[] buf, utf8 = new byte[8];\n\t\t\t\tint argc = 0;\n\t\t\t\tstring str;\n\n\t\t\t\tfor (int i = 0; i < format.Length; i++) {\n\t\t\t\t\tif (format[i] == '%') {\n\t\t\t\t\t\tswitch (format[++i]) {\n\t\t\t\t\t\tcase '%': // a literal %\n\t\t\t\t\t\t\tbuilder.Append ((byte) '%');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd': // an integer\n\t\t\t\t\t\t\tstr = ((int) args[argc++]).ToString (CultureInfo.InvariantCulture);\n\t\t\t\t\t\t\tbuf = Encoding.ASCII.GetBytes (str);\n\t\t\t\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'u': // an unsigned integer\n\t\t\t\t\t\t\tstr = ((uint) args[argc++]).ToString (CultureInfo.InvariantCulture);\n\t\t\t\t\t\t\tbuf = Encoding.ASCII.GetBytes (str);\n\t\t\t\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tstr = (string) args[argc++];\n\t\t\t\t\t\t\tbuf = Encoding.ASCII.GetBytes (str);\n\t\t\t\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'F': // an ImapFolder\n\t\t\t\t\t\t\tvar utf7 = ((ImapFolder) args[argc++]).EncodedName;\n\t\t\t\t\t\t\tAppendString (options, true, builder, utf7);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'L': // a MimeMessage or a byte[]\n\t\t\t\t\t\t\tvar arg = args[argc++];\n\t\t\t\t\t\t\tImapLiteral literal;\n\t\t\t\t\t\t\tbyte[] prefix;\n\n\t\t\t\t\t\t\tif (arg is MimeMessage message) {\n\t\t\t\t\t\t\t\tprefix = options.International ? UTF8LiteralTokenPrefix : LiteralTokenPrefix;\n\t\t\t\t\t\t\t\tliteral = new ImapLiteral (options, message, UpdateProgress);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = new ImapLiteral (options, (byte[]) arg);\n\t\t\t\t\t\t\t\tprefix = LiteralTokenPrefix;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar length = literal.Length;\n\t\t\t\t\t\t\tbool wait = true;\n\n\t\t\t\t\t\t\tbuilder.Append (prefix, 0, prefix.Length);\n\t\t\t\t\t\t\tbuf = Encoding.ASCII.GetBytes (length.ToString (CultureInfo.InvariantCulture));\n\t\t\t\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\n\t\t\t\t\t\t\tif (CanUseNonSynchronizedLiteral (Engine, length)) {\n\t\t\t\t\t\t\t\tbuilder.Append ((byte) '+');\n\t\t\t\t\t\t\t\twait = false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbuilder.Append (LiteralTokenSuffix, 0, LiteralTokenSuffix.Length);\n\n\t\t\t\t\t\t\ttotalSize += length;\n\n\t\t\t\t\t\t\tparts.Add (new ImapCommandPart (builder.ToArray (), literal, wait));\n\t\t\t\t\t\t\tbuilder.Clear ();\n\n\t\t\t\t\t\t\tif (prefix == UTF8LiteralTokenPrefix)\n\t\t\t\t\t\t\t\tbuilder.Append ((byte) ')');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'S': // a string which may need to be quoted or made into a literal\n\t\t\t\t\t\t\tAppendString (options, true, builder, (string) args[argc++]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Q': // similar to %S but string must be quoted at a minimum\n\t\t\t\t\t\t\tAppendString (options, false, builder, (string) args[argc++]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new FormatException ($\"The %{format[i]} format specifier is not supported.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (format[i] < 128) {\n\t\t\t\t\t\tbuilder.Append ((byte) format[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tint nchars = char.IsSurrogate (format[i]) ? 2 : 1;\n\t\t\t\t\t\tint nbytes = Encoding.UTF8.GetBytes (format, i, nchars, utf8, 0);\n\t\t\t\t\t\tbuilder.Append (utf8, 0, nbytes);\n\t\t\t\t\t\ti += nchars - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tparts.Add (new ImapCommandPart (builder.ToArray (), null));\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapCommand\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.Net.Imap.ImapCommand\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The IMAP engine that will be sending the command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"folder\">The IMAP folder that the command operates on.</param>\n\t\t/// <param name=\"format\">The command format.</param>\n\t\t/// <param name=\"args\">The command arguments.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"engine\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"format\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic ImapCommand (ImapEngine engine, CancellationToken cancellationToken, ImapFolder? folder, string format, params object[] args)\n\t\t\t: this (engine, cancellationToken, folder, FormatOptions.Default, format, args)\n\t\t{\n\t\t}\n\n\t\tinternal static int EstimateCommandLength (ImapEngine engine, FormatOptions options, string format, params object[] args)\n\t\t{\n\t\t\tconst int EstimatedTagLength = 10;\n\t\t\tvar eoln = false;\n\t\t\tint length = 0;\n\t\t\tint argc = 0;\n\t\t\tstring str;\n\n\t\t\tfor (int i = 0; i < format.Length; i++) {\n\t\t\t\tif (format[i] == '%') {\n\t\t\t\t\tswitch (format[++i]) {\n\t\t\t\t\t//case '%': // a literal %\n\t\t\t\t\t\t// Note: This is commented out because %% is only ever used in some LIST commands which never need\n\t\t\t\t\t\t// to split the split the command to keep it under the max line length.\n\t\t\t\t\t\t//length++;\n\t\t\t\t\t\t//break;\n\t\t\t\t\t//case 'd': // an integer\n\t\t\t\t\t\t// Note: This is commented out because %d is only ever used for some REPLACE and GetMessage/GetHeaders/GetBodyPart\n\t\t\t\t\t\t// commands which never need to split the command to keep it under the max line length.\n\t\t\t\t\t\t//str = ((int) args[argc++]).ToString (CultureInfo.InvariantCulture);\n\t\t\t\t\t\t//length += str.Length;\n\t\t\t\t\t\t//break;\n\t\t\t\t\t//case 'u': // an unsigned integer\n\t\t\t\t\t\t// Note: This is commented out because %u is only ever used for some GetMessage/GetHeaders/GetBodyPart\n\t\t\t\t\t\t// commands which never need to split the command to keep it under the max line length.\n\t\t\t\t\t\t//str = ((uint) args[argc++]).ToString (CultureInfo.InvariantCulture);\n\t\t\t\t\t\t//length += str.Length;\n\t\t\t\t\t\t//break;\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tstr = (string) args[argc++];\n\t\t\t\t\t\tlength += str.Length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'F': // an ImapFolder\n\t\t\t\t\t\tvar utf7 = ((ImapFolder) args[argc++]).EncodedName;\n\t\t\t\t\t\tlength += EstimateStringLength (engine, true, utf7, out eoln);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'L': // a MimeMessage or a byte[]\n\t\t\t\t\t\t// Note: This is commented out because %L is only ever used for APPEND and REPLACE commands which\n\t\t\t\t\t\t// never need to split the command to keep it under the max line length.\n\t\t\t\t\t\t//var arg = args[argc++];\n\t\t\t\t\t\t//byte[] prefix;\n\t\t\t\t\t\t//long len;\n\n\t\t\t\t\t\t//if (arg is MimeMessage message) {\n\t\t\t\t\t\t//\tprefix = options.International ? UTF8LiteralTokenPrefix : LiteralTokenPrefix;\n\t\t\t\t\t\t//\tvar literal = new ImapLiteral (options, message, null);\n\t\t\t\t\t\t//\tlen = literal.Length;\n\t\t\t\t\t\t//} else {\n\t\t\t\t\t\t//\tlen = ((byte[]) arg).Length;\n\t\t\t\t\t\t//\tprefix = LiteralTokenPrefix;\n\t\t\t\t\t\t//}\n\n\t\t\t\t\t\t//length += prefix.Length;\n\t\t\t\t\t\t//length += Encoding.ASCII.GetByteCount (len.ToString (CultureInfo.InvariantCulture));\n\n\t\t\t\t\t\t//if (CanUseNonSynchronizedLiteral (engine, len))\n\t\t\t\t\t\t//\tlength++;\n\n\t\t\t\t\t\t//length += LiteralTokenSuffix.Length;\n\n\t\t\t\t\t\t//if (prefix == UTF8LiteralTokenPrefix)\n\t\t\t\t\t\t//\tlength++;\n\n\t\t\t\t\t\t//eoln = true;\n\t\t\t\t\t\t//break;\n\t\t\t\t\tcase 'S': // a string which may need to be quoted or made into a literal\n\t\t\t\t\t\tlength += EstimateStringLength (engine, true, (string) args[argc++], out eoln);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'Q': // similar to %S but string must be quoted at a minimum\n\t\t\t\t\t\t// Note: This is commented out because %Q is only ever used for the ID command which\n\t\t\t\t\t\t// never needs to split the command to keep it under the max line length.\n\t\t\t\t\t\t//length += EstimateStringLength (engine, false, (string) args[argc++], out eoln);\n\t\t\t\t\t\t//break;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new FormatException ($\"The %{format[i]} format specifier is not supported.\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (eoln)\n\t\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tlength++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn length + EstimatedTagLength;\n\t\t}\n\n\t\tinternal static int EstimateCommandLength (ImapEngine engine, string format, params object[] args)\n\t\t{\n\t\t\treturn EstimateCommandLength (engine, FormatOptions.Default, format, args);\n\t\t}\n\n\t\tvoid UpdateProgress (int n)\n\t\t{\n\t\t\tnwritten += n;\n\n\t\t\tProgress?.Report (nwritten, totalSize);\n\t\t}\n\n\t\tinternal static bool IsAtom (char c)\n\t\t{\n\t\t\treturn c < 128 && !char.IsControl (c) && \"(){ %*\\\\\\\"]\".IndexOf (c) == -1;\n\t\t}\n\n\t\tstatic bool IsQuotedSafe (ImapEngine engine, char c)\n\t\t{\n\t\t\treturn (c < 128 || engine.UTF8Enabled) && !char.IsControl (c);\n\t\t}\n\n\t\tinternal static ImapStringType GetStringType (ImapEngine engine, string value, bool allowAtom)\n\t\t{\n\t\t\tvar type = allowAtom ? ImapStringType.Atom : ImapStringType.QString;\n\n\t\t\tif (value == null)\n\t\t\t\treturn ImapStringType.Nil;\n\n\t\t\tif (value.Length == 0)\n\t\t\t\treturn ImapStringType.QString;\n\n\t\t\tfor (int i = 0; i < value.Length; i++) {\n\t\t\t\tif (!IsAtom (value[i])) {\n\t\t\t\t\tif (!IsQuotedSafe (engine, value[i]))\n\t\t\t\t\t\treturn ImapStringType.Literal;\n\n\t\t\t\t\ttype = ImapStringType.QString;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn type;\n\t\t}\n\n\t\tstatic bool CanUseNonSynchronizedLiteral (ImapEngine engine, long length)\n\t\t{\n\t\t\treturn (engine.Capabilities & ImapCapabilities.LiteralPlus) != 0 ||\n\t\t\t\t(length <= 4096 && (engine.Capabilities & ImapCapabilities.LiteralMinus) != 0);\n\t\t}\n\n\t\tstatic int EstimateStringLength (ImapEngine engine, bool allowAtom, string value, out bool eoln)\n\t\t{\n\t\t\teoln = false;\n\n\t\t\tswitch (GetStringType (engine, value, allowAtom)) {\n\t\t\tcase ImapStringType.Literal:\n\t\t\t\tvar literal = Encoding.UTF8.GetByteCount (value);\n\t\t\t\tvar plus = CanUseNonSynchronizedLiteral (engine, literal);\n\t\t\t\tint length = \"{}\\r\\n\".Length;\n\n\t\t\t\tlength += literal.ToString (CultureInfo.InvariantCulture).Length;\n\t\t\t\tif (plus)\n\t\t\t\t\tlength++;\n\n\t\t\t\teoln = true;\n\n\t\t\t\treturn length++;\n\t\t\tcase ImapStringType.QString:\n\t\t\t\treturn Encoding.UTF8.GetByteCount (MimeUtils.Quote (value));\n\t\t\tcase ImapStringType.Nil:\n\t\t\t\treturn Nil.Length;\n\t\t\tdefault:\n\t\t\t\treturn value.Length;\n\t\t\t}\n\t\t}\n\n\t\tvoid AppendString (FormatOptions options, bool allowAtom, ByteArrayBuilder builder, string value)\n\t\t{\n\t\t\tbyte[] buf;\n\n\t\t\tswitch (GetStringType (Engine, value, allowAtom)) {\n\t\t\tcase ImapStringType.Literal:\n\t\t\t\tvar literal = Encoding.UTF8.GetBytes (value);\n\t\t\t\tvar plus = CanUseNonSynchronizedLiteral (Engine, literal.Length);\n\t\t\t\tvar length = literal.Length.ToString (CultureInfo.InvariantCulture);\n\t\t\t\tbuf = Encoding.ASCII.GetBytes (length);\n\n\t\t\t\tbuilder.Append ((byte) '{');\n\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\t\t\t\tif (plus)\n\t\t\t\t\tbuilder.Append ((byte) '+');\n\t\t\t\tbuilder.Append ((byte) '}');\n\t\t\t\tbuilder.Append ((byte) '\\r');\n\t\t\t\tbuilder.Append ((byte) '\\n');\n\n\t\t\t\tif (plus) {\n\t\t\t\t\tbuilder.Append (literal, 0, literal.Length);\n\t\t\t\t} else {\n\t\t\t\t\tparts.Add (new ImapCommandPart (builder.ToArray (), new ImapLiteral (options, literal)));\n\t\t\t\t\tbuilder.Clear ();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ImapStringType.QString:\n\t\t\t\tbuf = Encoding.UTF8.GetBytes (MimeUtils.Quote (value));\n\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\t\t\t\tbreak;\n\t\t\tcase ImapStringType.Atom:\n\t\t\t\tbuf = Encoding.UTF8.GetBytes (value);\n\t\t\t\tbuilder.Append (buf, 0, buf.Length);\n\t\t\t\tbreak;\n\t\t\tcase ImapStringType.Nil:\n\t\t\t\tbuilder.Append (Nil, 0, Nil.Length);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Registers the untagged handler for the specified atom token.\n\t\t/// </summary>\n\t\t/// <param name=\"atom\">The atom token.</param>\n\t\t/// <param name=\"handler\">The handler.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"atom\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"handler\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Untagged handlers must be registered before the command has been queued.\n\t\t/// </exception>\n\t\tpublic void RegisterUntaggedHandler (string atom, ImapUntaggedHandler handler)\n\t\t{\n\t\t\tif (atom == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (atom));\n\n\t\t\tif (handler == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (handler));\n\n\t\t\tif (Status != ImapCommandStatus.Created)\n\t\t\t\tthrow new InvalidOperationException (\"Untagged handlers must be registered before the command has been queued.\");\n\n\t\t\tUntaggedHandlers.Add (atom, handler);\n\t\t}\n\n\t\tstatic bool IsOkNoOrBad (string atom, out ImapCommandResponse response)\n\t\t{\n\t\t\tif (atom.Equals (\"OK\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tresponse = ImapCommandResponse.Ok;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (atom.Equals (\"NO\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tresponse = ImapCommandResponse.No;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (atom.Equals (\"BAD\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tresponse = ImapCommandResponse.Bad;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tresponse = ImapCommandResponse.None;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sends the next part of the command to the server.\n\t\t/// </summary>\n\t\t/// <returns><see langword=\"true\" /> if there are more command parts to send; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic bool Step ()\n\t\t{\n\t\t\tvar supportsLiteralPlus = (Engine.Capabilities & ImapCapabilities.LiteralPlus) != 0;\n\t\t\tvar response = ImapCommandResponse.None;\n\t\t\tImapToken token;\n\n\t\t\t// construct and write the command tag if this is the initial state\n\t\t\tif (current == 0) {\n\t\t\t\tTag = string.Format (CultureInfo.InvariantCulture, \"{0}{1:D8}\", Engine.TagPrefix, Engine.Tag++);\n\n\t\t\t\tvar buf = Encoding.ASCII.GetBytes (Tag + \" \");\n\n\t\t\t\tEngine.Stream!.Write (buf, 0, buf.Length, CancellationToken);\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tvar part = parts[current];\n\t\t\t\tvar command = part.Command;\n\n\t\t\t\tEngine.Stream!.Write (command, 0, command.Length, CancellationToken);\n\n\t\t\t\t// if the server doesn't support LITERAL+ (or LITERAL-), we'll need to wait\n\t\t\t\t// for a \"+\" response before writing out the any literals...\n\t\t\t\tif (part.WaitForContinuation || part.Literal == null)\n\t\t\t\t\tbreak;\n\n\t\t\t\t// otherwise, we can write out any and all literal tokens we have...\n\t\t\t\tpart.Literal.WriteTo (Engine.Stream, CancellationToken);\n\n\t\t\t\tif (current + 1 >= parts.Count)\n\t\t\t\t\tbreak;\n\n\t\t\t\tcurrent++;\n\t\t\t} while (true);\n\n\t\t\tEngine.Stream.Flush (CancellationToken);\n\n\t\t\t// now we need to read the response...\n\t\t\tdo {\n\t\t\t\tif (Engine.State == ImapEngineState.Idle) {\n\t\t\t\t\tint timeout = Timeout.Infinite;\n\n\t\t\t\t\tif (Engine.Stream.CanTimeout) {\n\t\t\t\t\t\ttimeout = Engine.Stream.ReadTimeout;\n\t\t\t\t\t\tEngine.Stream.ReadTimeout = Timeout.Infinite;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttoken = Engine.ReadToken (CancellationToken);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (Engine.Stream != null && Engine.Stream.IsConnected && Engine.Stream.CanTimeout)\n\t\t\t\t\t\t\tEngine.Stream.ReadTimeout = timeout;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttoken = Engine.ReadToken (CancellationToken);\n\t\t\t\t}\n\n\t\t\t\tif (token == ImapToken.Plus) {\n\t\t\t\t\t// we've gotten a continuation response from the server\n\t\t\t\t\tvar text = Engine.ReadLine (CancellationToken).Trim ();\n\n\t\t\t\t\t// if we've got a Literal pending, the '+' means we can send it now...\n\t\t\t\t\tvar literal = parts[current].Literal;\n\t\t\t\t\tif (!supportsLiteralPlus && literal != null) {\n\t\t\t\t\t\tliteral.WriteTo (Engine.Stream, CancellationToken);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ContinuationHandler != null) {\n\t\t\t\t\t\tContinuationHandler (Engine, this, text, false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tEngine.Stream.Write (NewLine, 0, NewLine.Length, CancellationToken);\n\t\t\t\t\t\tEngine.Stream.Flush (CancellationToken);\n\t\t\t\t\t}\n\t\t\t\t} else if (token.Type == ImapTokenType.Asterisk) {\n\t\t\t\t\t// we got an untagged response, let the engine handle this...\n\t\t\t\t\tEngine.ProcessUntaggedResponse (this, CancellationToken);\n\t\t\t\t} else if (token.Type == ImapTokenType.Atom && (string) token.Value == Tag) {\n\t\t\t\t\t// the next token should be \"OK\", \"NO\", or \"BAD\"\n\t\t\t\t\ttoken = Engine.ReadToken (CancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, \"Syntax error in tagged response. {0}\", token);\n\n\t\t\t\t\tstring atom = (string) token.Value;\n\n\t\t\t\t\tif (!IsOkNoOrBad (atom, out response))\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (\"Syntax error in tagged response. {0}\", token);\n\n\t\t\t\t\ttoken = Engine.ReadToken (CancellationToken);\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\t\tvar code = Engine.ParseResponseCode (true, CancellationToken);\n\t\t\t\t\t\tRespCodes.Add (code);\n\t\t\t\t\t} else if (token.Type != ImapTokenType.Eoln) {\n\t\t\t\t\t\t// consume the rest of the line...\n\t\t\t\t\t\tvar line = Engine.ReadLine (CancellationToken).TrimEnd ();\n\t\t\t\t\t\tResponseText = token.Value.ToString () + line;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar folder = Folder ?? Engine.Selected;\n\n\t\t\t\t\tfolder?.FlushQueuedEvents ();\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\t// Note: this is a work-around for broken IMAP servers like Office365.com that\n\t\t\t\t\t// return RESP-CODES that are not preceded by \"* OK \" such as the example in\n\t\t\t\t\t// issue #115 (https://github.com/jstedfast/MailKit/issues/115).\n\t\t\t\t\tvar code = Engine.ParseResponseCode (false, CancellationToken);\n\t\t\t\t\tRespCodes.Add (code);\n\t\t\t\t} else {\n\t\t\t\t\t// no clue what we got...\n\t\t\t\t\tthrow ImapEngine.UnexpectedToken (\"Syntax error in response. Unexpected token: {0}\", token);\n\t\t\t\t}\n\t\t\t} while (Status == ImapCommandStatus.Active);\n\n\t\t\tif (Status == ImapCommandStatus.Active) {\n\t\t\t\tcurrent++;\n\n\t\t\t\tif (current >= parts.Count || response != ImapCommandResponse.None) {\n\t\t\t\t\tStatus = ImapCommandStatus.Complete;\n\t\t\t\t\tResponse = response;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sends the next part of the command to the server.\n\t\t/// </summary>\n\t\t/// <returns><see langword=\"true\" /> if there are more command parts to send; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<bool> StepAsync ()\n\t\t{\n\t\t\tvar supportsLiteralPlus = (Engine.Capabilities & ImapCapabilities.LiteralPlus) != 0;\n\t\t\tvar response = ImapCommandResponse.None;\n\t\t\tImapToken token;\n\n\t\t\t// construct and write the command tag if this is the initial state\n\t\t\tif (current == 0) {\n\t\t\t\tTag = string.Format (CultureInfo.InvariantCulture, \"{0}{1:D8}\", Engine.TagPrefix, Engine.Tag++);\n\n\t\t\t\tvar buf = Encoding.ASCII.GetBytes (Tag + \" \");\n\n\t\t\t\tawait Engine.Stream!.WriteAsync (buf, 0, buf.Length, CancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tvar part = parts[current];\n\t\t\t\tvar command = part.Command;\n\n\t\t\t\tawait Engine.Stream!.WriteAsync (command, 0, command.Length, CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// if the server doesn't support LITERAL+ (or LITERAL-), we'll need to wait\n\t\t\t\t// for a \"+\" response before writing out the any literals...\n\t\t\t\tif (part.WaitForContinuation || part.Literal == null)\n\t\t\t\t\tbreak;\n\n\t\t\t\t// otherwise, we can write out any and all literal tokens we have...\n\t\t\t\tawait part.Literal.WriteToAsync (Engine.Stream, CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (current + 1 >= parts.Count)\n\t\t\t\t\tbreak;\n\n\t\t\t\tcurrent++;\n\t\t\t} while (true);\n\n\t\t\tawait Engine.Stream.FlushAsync (CancellationToken).ConfigureAwait (false);\n\n\t\t\t// now we need to read the response...\n\t\t\tdo {\n\t\t\t\tif (Engine.State == ImapEngineState.Idle) {\n\t\t\t\t\tint timeout = Timeout.Infinite;\n\n\t\t\t\t\tif (Engine.Stream.CanTimeout) {\n\t\t\t\t\t\ttimeout = Engine.Stream.ReadTimeout;\n\t\t\t\t\t\tEngine.Stream.ReadTimeout = Timeout.Infinite;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttoken = await Engine.ReadTokenAsync (CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (Engine.Stream != null && Engine.Stream.IsConnected && Engine.Stream.CanTimeout)\n\t\t\t\t\t\t\tEngine.Stream.ReadTimeout = timeout;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttoken = await Engine.ReadTokenAsync (CancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tif (token == ImapToken.Plus) {\n\t\t\t\t\t// we've gotten a continuation response from the server\n\t\t\t\t\tvar text = (await Engine.ReadLineAsync (CancellationToken).ConfigureAwait (false)).Trim ();\n\n\t\t\t\t\t// if we've got a Literal pending, the '+' means we can send it now...\n\t\t\t\t\tvar literal = parts[current].Literal;\n\t\t\t\t\tif (!supportsLiteralPlus && literal != null) {\n\t\t\t\t\t\tawait literal.WriteToAsync (Engine.Stream, CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ContinuationHandler != null) {\n\t\t\t\t\t\tawait ContinuationHandler (Engine, this, text, true).ConfigureAwait (false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait Engine.Stream.WriteAsync (NewLine, 0, NewLine.Length, CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tawait Engine.Stream.FlushAsync (CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t}\n\t\t\t\t} else if (token.Type == ImapTokenType.Asterisk) {\n\t\t\t\t\t// we got an untagged response, let the engine handle this...\n\t\t\t\t\tawait Engine.ProcessUntaggedResponseAsync (this, CancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (token.Type == ImapTokenType.Atom && (string) token.Value == Tag) {\n\t\t\t\t\t// the next token should be \"OK\", \"NO\", or \"BAD\"\n\t\t\t\t\ttoken = await Engine.ReadTokenAsync (CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, \"Syntax error in tagged response. {0}\", token);\n\n\t\t\t\t\tstring atom = (string) token.Value;\n\n\t\t\t\t\tif (!IsOkNoOrBad (atom, out response))\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (\"Syntax error in tagged response. {0}\", token);\n\n\t\t\t\t\ttoken = await Engine.ReadTokenAsync (CancellationToken).ConfigureAwait (false);\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\t\tvar code = await Engine.ParseResponseCodeAsync (true, CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tRespCodes.Add (code);\n\t\t\t\t\t} else if (token.Type != ImapTokenType.Eoln) {\n\t\t\t\t\t\t// consume the rest of the line...\n\t\t\t\t\t\tvar line = (await Engine.ReadLineAsync (CancellationToken).ConfigureAwait (false)).TrimEnd ();\n\t\t\t\t\t\tResponseText = token.Value.ToString () + line;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar folder = Folder ?? Engine.Selected;\n\n\t\t\t\t\tfolder?.FlushQueuedEvents ();\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\t// Note: this is a work-around for broken IMAP servers like Office365.com that\n\t\t\t\t\t// return RESP-CODES that are not preceded by \"* OK \" such as the example in\n\t\t\t\t\t// issue #115 (https://github.com/jstedfast/MailKit/issues/115).\n\t\t\t\t\tvar code = await Engine.ParseResponseCodeAsync (false, CancellationToken).ConfigureAwait (false);\n\t\t\t\t\tRespCodes.Add (code);\n\t\t\t\t} else {\n\t\t\t\t\t// no clue what we got...\n\t\t\t\t\tthrow ImapEngine.UnexpectedToken (\"Syntax error in response. Unexpected token: {0}\", token);\n\t\t\t\t}\n\t\t\t} while (Status == ImapCommandStatus.Active);\n\n\t\t\tif (Status == ImapCommandStatus.Active) {\n\t\t\t\tcurrent++;\n\n\t\t\t\tif (current >= parts.Count || response != ImapCommandResponse.None) {\n\t\t\t\t\tStatus = ImapCommandStatus.Complete;\n\t\t\t\t\tResponse = response;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the first response-code of the specified type.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the first response-code of the specified type.\n\t\t/// </remarks>\n\t\t/// <param name=\"type\">The type of response-code.</param>\n\t\t/// <returns>The response-code if it exists; otherwise, <see langword=\"null\" />.</returns>\n\t\tpublic ImapResponseCode? GetResponseCode (ImapResponseCodeType type)\n\t\t{\n\t\t\tfor (int i = 0; i < RespCodes.Count; i++) {\n\t\t\t\tif (RespCodes[i].Type == type)\n\t\t\t\t\treturn RespCodes[i];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Throw an <see cref=\"ImapCommandException\"/> if the response was not OK.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Throws an <see cref=\"ImapCommandException\"/> if the response was not OK.\n\t\t/// </remarks>\n\t\tpublic void ThrowIfNotOk (string command)\n\t\t{\n\t\t\tif (Response != ImapCommandResponse.Ok)\n\t\t\t\tthrow ImapCommandException.Create (command, this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommandException.cs",
    "content": "﻿//\n// ImapCommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An exception that is thrown when an IMAP command returns NO or BAD.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when an IMAP command fails. Unlike a <see cref=\"ImapProtocolException\"/>,\n\t/// a <see cref=\"ImapCommandException\"/> does not require the <see cref=\"ImapClient\"/> to be reconnected.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class ImapCommandException : CommandException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapCommandException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected ImapCommandException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tResponse = (ImapCommandResponse) info.GetValue (\"Response\", typeof (ImapCommandResponse));\n\t\t\tResponseText = info.GetString (\"ResponseText\");\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Create a new <see cref=\"ImapCommandException\"/> based on the specified command name and <see cref=\"ImapCommand\"/> state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Create a new <see cref=\"ImapCommandException\"/> based on the specified command name and <see cref=\"ImapCommand\"/> state.\n\t\t/// </remarks>\n\t\t/// <returns>A new command exception.</returns>\n\t\t/// <param name=\"command\">The command name.</param>\n\t\t/// <param name=\"ic\">The command state.</param>\n\t\tinternal static ImapCommandException Create (string command, ImapCommand ic)\n\t\t{\n\t\t\tvar result = ic.Response.ToString ().ToUpperInvariant ();\n\t\t\tstring? reason = null;\n\t\t\tstring message;\n\n\t\t\tif (string.IsNullOrEmpty (ic.ResponseText)) {\n\t\t\t\tfor (int i = ic.RespCodes.Count - 1; i >= 0; i--) {\n\t\t\t\t\tif (ic.RespCodes[i].IsError && !string.IsNullOrEmpty (ic.RespCodes[i].Message)) {\n\t\t\t\t\t\treason = ic.RespCodes[i].Message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treason ??= string.Empty;\n\t\t\t} else {\n\t\t\t\treason = ic.ResponseText!;\n\t\t\t}\n\n\t\t\tif (!string.IsNullOrEmpty (reason))\n\t\t\t\tmessage = string.Format (\"The IMAP server replied to the '{0}' command with a '{1}' response: {2}\", command, result, reason);\n\t\t\telse\n\t\t\t\tmessage = string.Format (\"The IMAP server replied to the '{0}' command with a '{1}' response.\", command, result);\n\n\t\t\treturn ic.Exception != null ? new ImapCommandException (ic.Response, reason, message, ic.Exception) : new ImapCommandException (ic.Response, reason, message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"response\">The IMAP command response.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"responseText\">The human-readable response text.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\tpublic ImapCommandException (ImapCommandResponse response, string responseText, string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tResponseText = responseText;\n\t\t\tResponse = response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"response\">The IMAP command response.</param>\n\t\t/// <param name=\"responseText\">The human-readable response text.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic ImapCommandException (ImapCommandResponse response, string responseText, string message) : base (message)\n\t\t{\n\t\t\tResponseText = responseText;\n\t\t\tResponse = response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"response\">The IMAP command response.</param>\n\t\t/// <param name=\"responseText\">The human-readable response text.</param>\n\t\tpublic ImapCommandException (ImapCommandResponse response, string responseText)\n\t\t{\n\t\t\tResponseText = responseText;\n\t\t\tResponse = response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the IMAP command response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the IMAP command response.\n\t\t/// </remarks>\n\t\t/// <value>The IMAP command response.</value>\n\t\tpublic ImapCommandResponse Response {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the human-readable IMAP command response text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the human-readable IMAP command response text.\n\t\t/// </remarks>\n\t\t/// <value>The response text.</value>\n\t\tpublic string ResponseText {\n\t\t\tget; private set;\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serializes the state of the <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecurityCritical]\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tinfo.AddValue (\"Response\", Response, typeof (ImapCommandResponse));\n\t\t\tinfo.AddValue (\"ResponseText\", ResponseText);\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommandResponse.cs",
    "content": "﻿//\n// ImapCommandResult.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An enumeration of possible IMAP command responses.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of possible IMAP command responses.\n\t/// </remarks>\n\tpublic enum ImapCommandResponse {\n\t\t/// <summary>\n\t\t/// No IMAP command response yet.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// The command resulted in an \"OK\" response.\n\t\t/// </summary>\n\t\tOk,\n\n\t\t/// <summary>\n\t\t/// The command resulted in a \"NO\" response.\n\t\t/// </summary>\n\t\tNo,\n\n\t\t/// <summary>\n\t\t/// The command resulted in a \"BAD\" response.\n\t\t/// </summary>\n\t\tBad\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommandStatus.cs",
    "content": "﻿//\n// ImapCommandStatus.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// IMAP command status.\n\t/// </summary>\n\tenum ImapCommandStatus\n\t{\n\t\tCreated,\n\t\tQueued,\n\t\tActive,\n\t\tComplete,\n\t\tError\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapEncoding.cs",
    "content": "﻿//\n// ImapEncoding.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nnamespace MailKit.Net.Imap {\n\tstatic class ImapEncoding\n\t{\n\t\tconst string utf7_alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,\";\n\n\t\tstatic readonly byte[] utf7_rank = {\n\t\t\t255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,\n\t\t\t255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,\n\t\t\t255,255,255,255,255,255,255,255,255,255,255, 62, 63,255,255,255,\n\t\t\t 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255,255,255,255,\n\t\t\t255,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,\n\t\t\t 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,255,255,255,255,255,\n\t\t\t255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\n\t\t\t 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,255,255,255,255,255,\n\t\t};\n\n\t\tpublic static string Decode (string text)\n\t\t{\n\t\t\tvar decoded = new StringBuilder (text.Length);\n\t\t\tbool shifted = false;\n\t\t\tint bits = 0, v = 0;\n\t\t\tint index = 0;\n\t\t\tchar c;\n\n\t\t\twhile (index < text.Length) {\n\t\t\t\tc = text[index++];\n\n\t\t\t\tif (shifted) {\n\t\t\t\t\tif (c == '-') {\n\t\t\t\t\t\t// shifted back out of modified UTF-7\n\t\t\t\t\t\tshifted = false;\n\t\t\t\t\t\tbits = v = 0;\n\t\t\t\t\t} else if (c > 127) {\n\t\t\t\t\t\t// invalid UTF-7\n\t\t\t\t\t\treturn text;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbyte rank = utf7_rank[(byte) c];\n\n\t\t\t\t\t\tif (rank == 0xff) {\n\t\t\t\t\t\t\t// invalid UTF-7\n\t\t\t\t\t\t\treturn text;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tv = (v << 6) | rank;\n\t\t\t\t\t\tbits += 6;\n\n\t\t\t\t\t\tif (bits >= 16) {\n\t\t\t\t\t\t\tchar u = (char) ((v >> (bits - 16)) & 0xffff);\n\t\t\t\t\t\t\tdecoded.Append (u);\n\t\t\t\t\t\t\tbits -= 16;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (c == '&' && index < text.Length) {\n\t\t\t\t\tif (text[index] == '-') {\n\t\t\t\t\t\tdecoded.Append ('&');\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// shifted into modified UTF-7\n\t\t\t\t\t\tshifted = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdecoded.Append (c);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn decoded.ToString ();\n\t\t}\n\n\t\tstatic void Utf7ShiftOut (StringBuilder output, int u, int bits)\n\t\t{\n\t\t\tif (bits > 0) {\n\t\t\t\tint x = (u << (6 - bits)) & 0x3f;\n\t\t\t\toutput.Append (utf7_alphabet[x]);\n\t\t\t}\n\n\t\t\toutput.Append ('-');\n\t\t}\n\n\t\tpublic static string Encode (string text)\n\t\t{\n\t\t\tvar encoded = new StringBuilder (text.Length * 2);\n\t\t\tbool shifted = false;\n\t\t\tint bits = 0, u = 0;\n\n\t\t\tfor (int index = 0; index < text.Length; index++) {\n\t\t\t\tchar c = text[index];\n\n\t\t\t\tif (c >= 0x20 && c < 0x7f) {\n\t\t\t\t\t// characters with octet values 0x20-0x25 and 0x27-0x7e\n\t\t\t\t\t// represent themselves while 0x26 (\"&\") is represented\n\t\t\t\t\t// by the two-octet sequence \"&-\"\n\n\t\t\t\t\tif (shifted) {\n\t\t\t\t\t\tUtf7ShiftOut (encoded, u, bits);\n\t\t\t\t\t\tshifted = false;\n\t\t\t\t\t\tbits = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c == 0x26)\n\t\t\t\t\t\tencoded.Append (\"&-\");\n\t\t\t\t\telse\n\t\t\t\t\t\tencoded.Append (c);\n\t\t\t\t} else {\n\t\t\t\t\t// base64 encode\n\t\t\t\t\tif (!shifted) {\n\t\t\t\t\t\tencoded.Append ('&');\n\t\t\t\t\t\tshifted = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tu = (u << 16) | (c & 0xffff);\n\t\t\t\t\tbits += 16;\n\n\t\t\t\t\twhile (bits >= 6) {\n\t\t\t\t\t\tint x = (u >> (bits - 6)) & 0x3f;\n\t\t\t\t\t\tencoded.Append (utf7_alphabet[x]);\n\t\t\t\t\t\tbits -= 6;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shifted)\n\t\t\t\tUtf7ShiftOut (encoded, u, bits);\n\n\t\t\treturn encoded.ToString ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapEngine.cs",
    "content": "﻿//\n// ImapEngine.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Buffers;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\n\nnamespace MailKit.Net.Imap {\n\tdelegate ImapFolder CreateImapFolderDelegate (ImapFolderConstructorArgs args);\n\n\t/// <summary>\n\t/// The state of the <see cref=\"ImapEngine\"/>.\n\t/// </summary>\n\tenum ImapEngineState {\n\t\t/// <summary>\n\t\t/// The ImapEngine is in the disconnected state.\n\t\t/// </summary>\n\t\tDisconnected,\n\n\t\t/// <summary>\n\t\t/// The ImapEngine is in the process of connecting.\n\t\t/// </summary>\n\t\tConnecting,\n\n\t\t/// <summary>\n\t\t/// The ImapEngine is connected but not yet authenticated.\n\t\t/// </summary>\n\t\tConnected,\n\n\t\t/// <summary>\n\t\t/// The ImapEngine is in the authenticated state.\n\t\t/// </summary>\n\t\tAuthenticated,\n\n\t\t/// <summary>\n\t\t/// The ImapEngine is in the selected state.\n\t\t/// </summary>\n\t\tSelected,\n\n\t\t/// <summary>\n\t\t/// The ImapEngine is in the IDLE state.\n\t\t/// </summary>\n\t\tIdle\n\t}\n\n\tenum ImapProtocolVersion {\n\t\tUnknown,\n\t\tIMAP4,\n\t\tIMAP4rev1,\n\t\tIMAP4rev2,\n\t}\n\n\tenum ImapUntaggedResult {\n\t\tOk,\n\t\tNo,\n\t\tBad,\n\t\tHandled\n\t}\n\n\tenum ImapQuirksMode {\n\t\tNone,\n\t\tCourier,\n\t\tCyrus,\n\t\tDomino,\n\t\tDovecot,\n\t\tExchange,\n\t\tExchange2003,\n\t\tExchange2007,\n\t\tGMail,\n\t\thMailServer,\n\t\tiCloud,\n\t\tProtonMail,\n\t\tQQMail,\n\t\tSmarterMail,\n\t\tUW,\n\t\tYahoo,\n\t\tYandex,\n\t\tZoho\n\t}\n\n\tclass ImapFolderNameComparer : IEqualityComparer<string>\n\t{\n\t\tpublic char DirectorySeparator;\n\n\t\tpublic ImapFolderNameComparer (char directorySeparator)\n\t\t{\n\t\t\tDirectorySeparator = directorySeparator;\n\t\t}\n\n\t\tpublic bool Equals (string? x, string? y)\n\t\t{\n\t\t\tx = ImapUtils.CanonicalizeMailboxName (x!, DirectorySeparator);\n\t\t\ty = ImapUtils.CanonicalizeMailboxName (y!, DirectorySeparator);\n\n\t\t\treturn x == y;\n\t\t}\n\n\t\tpublic int GetHashCode (string obj)\n\t\t{\n\t\t\treturn ImapUtils.CanonicalizeMailboxName (obj, DirectorySeparator).GetHashCode ();\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An IMAP command engine.\n\t/// </summary>\n\tclass ImapEngine : IDisposable\n\t{\n\t\tinternal const string GenericUntaggedResponseSyntaxErrorFormat = \"Syntax error in untagged {0} response. {1}\";\n\t\tinternal const string GenericItemSyntaxErrorFormat = \"Syntax error in {0}. {1}\";\n\t\tinternal const string FetchBodySyntaxErrorFormat = \"Syntax error in BODY. {0}\";\n\t\tconst string GenericResponseCodeSyntaxErrorFormat = \"Syntax error in {0} response code. {1}\";\n\t\tconst string GreetingSyntaxErrorFormat = \"Syntax error in IMAP server greeting. {0}\";\n\t\tconst int BufferSize = 4096;\n\n\t\tstatic int TagPrefixIndex;\n\n#if NET6_0_OR_GREATER\n\t\treadonly ClientMetrics? metrics;\n#endif\n\n\t\tinternal readonly Dictionary<string, ImapFolder> FolderCache;\n\t\treadonly CreateImapFolderDelegate createImapFolder;\n\t\treadonly ImapFolderNameComparer cacheComparer;\n\t\tinternal ImapQuirksMode QuirksMode;\n\t\treadonly List<ImapCommand> queue;\n\t\tlong clientConnectedTimestamp;\n\t\tinternal char TagPrefix;\n\t\tImapCommand? current;\n\t\tMimeParser? parser;\n\t\tinternal int Tag;\n\t\tbool disposed;\n\t\tbool secure;\n\n\t\tpublic ImapEngine (CreateImapFolderDelegate createImapFolderDelegate)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\t// Use the globally configured Pop3Client metrics.\n\t\t\tmetrics = Telemetry.ImapClient.Metrics;\n#endif\n\n\t\t\tcacheComparer = new ImapFolderNameComparer ('.');\n\n\t\t\tFolderCache = new Dictionary<string, ImapFolder> (cacheComparer);\n\t\t\tThreadingAlgorithms = new HashSet<ThreadingAlgorithm> ();\n\t\t\tAuthenticationMechanisms = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tCompressionAlgorithms = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tSupportedContexts = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tSupportedCharsets = new HashSet<string> (StringComparer.OrdinalIgnoreCase);\n\t\t\tRights = new AccessRights ();\n\n\t\t\tPersonalNamespaces = new FolderNamespaceCollection ();\n\t\t\tSharedNamespaces = new FolderNamespaceCollection ();\n\t\t\tOtherNamespaces = new FolderNamespaceCollection ();\n\n\t\t\tProtocolVersion = ImapProtocolVersion.Unknown;\n\t\t\tcreateImapFolder = createImapFolderDelegate;\n\t\t\tCapabilities = ImapCapabilities.None;\n\t\t\tQuirksMode = ImapQuirksMode.None;\n\t\t\tqueue = new List<ImapCommand> ();\n\n\t\t\tTagPrefix = (char) ('A' + (TagPrefixIndex++ % 26));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the authentication mechanisms supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authentication mechanisms are queried during the\n\t\t/// <see cref=\"Connect\"/> or <see cref=\"ConnectAsync\"/> methods.\n\t\t/// </remarks>\n\t\t/// <value>The authentication mechanisms.</value>\n\t\tpublic HashSet<string> AuthenticationMechanisms {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the compression algorithms supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The compression algorithms are populated by the\n\t\t/// <see cref=\"QueryCapabilities\"/> and\n\t\t/// <see cref=\"QueryCapabilitiesAsync\"/> methods.\n\t\t/// </remarks>\n\t\t/// <value>The compression algorithms.</value>\n\t\tpublic HashSet<string> CompressionAlgorithms {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The threading algorithms are populated by the\n\t\t/// <see cref=\"QueryCapabilities\"/> and\n\t\t/// <see cref=\"QueryCapabilitiesAsync\"/> methods.\n\t\t/// </remarks>\n\t\t/// <value>The threading algorithms.</value>\n\t\tpublic HashSet<ThreadingAlgorithm> ThreadingAlgorithms {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the append limit supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the append limit supported by the IMAP server.\n\t\t/// </remarks>\n\t\t/// <value>The append limit.</value>\n\t\tpublic uint? AppendLimit {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the I18NLEVEL supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the I18NLEVEL supported by the IMAP server.\n\t\t/// </remarks>\n\t\t/// <value>The internationalization level.</value>\n\t\tpublic int I18NLevel {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the capabilities supported by the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been\n\t\t/// made via the <see cref=\"Connect\"/> or <see cref=\"ConnectAsync\"/> method.\n\t\t/// </remarks>\n\t\t/// <value>The capabilities.</value>\n\t\tpublic ImapCapabilities Capabilities {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Indicates whether or not the engine is busy processing commands.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Indicates whether or not the engine is busy processing commands.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if th e engine is busy processing commands; otherwise, <see langword=\"false\" />.</value>\n\t\tinternal bool IsBusy {\n\t\t\tget { return current != null; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the capabilities version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Every time the engine receives an untagged CAPABILITIES\n\t\t/// response from the server, it increments this value.\n\t\t/// </remarks>\n\t\t/// <value>The capabilities version.</value>\n\t\tpublic int CapabilitiesVersion {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the IMAP protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the IMAP protocol version.\n\t\t/// </remarks>\n\t\t/// <value>The IMAP protocol version.</value>\n\t\tpublic ImapProtocolVersion ProtocolVersion {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the rights specified in the capabilities.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the rights specified in the capabilities.\n\t\t/// </remarks>\n\t\t/// <value>The rights.</value>\n\t\tpublic AccessRights Rights {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the supported charsets.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the supported charsets.\n\t\t/// </remarks>\n\t\t/// <value>The supported charsets.</value>\n\t\tpublic HashSet<string> SupportedCharsets {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the supported contexts.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the supported contexts.\n\t\t/// </remarks>\n\t\t/// <value>The supported contexts.</value>\n\t\tpublic HashSet<string> SupportedContexts {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the QRESYNC feature has been enabled.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the QRESYNC feature has been enabled.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the QRESYNC feature has been enabled; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool QResyncEnabled {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the UTF8=ACCEPT feature has been enabled.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the UTF8=ACCEPT feature has been enabled.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the UTF8=ACCEPT feature has been enabled; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool UTF8Enabled {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the URI of the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the URI of the IMAP server.\n\t\t/// </remarks>\n\t\t/// <value>The URI of the IMAP server.</value>\n\t\tpublic Uri? Uri {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the underlying IMAP stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the underlying IMAP stream.\n\t\t/// </remarks>\n\t\t/// <value>The IMAP stream.</value>\n\t\tpublic ImapStream? Stream {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or sets the state of the engine.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the state of the engine.\n\t\t/// </remarks>\n\t\t/// <value>The engine state.</value>\n\t\tpublic ImapEngineState State {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the engine is currently connected to a IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the engine is currently connected to a IMAP server.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the engine is connected; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, nameof (Stream))]\n\t\tpublic bool IsConnected {\n\t\t\tget { return Stream != null && Stream.IsConnected; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently in the IDLE state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the client is currently in the IDLE state.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if an IDLE command is active; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, nameof (Stream))]\n\t\tpublic bool IsIdle {\n\t\t\tget { return IsConnected && State == ImapEngineState.Idle; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, nameof (Stream))]\n\t\tpublic bool IsSecure {\n\t\t\tget { return IsConnected && secure; }\n\t\t\tset { secure = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the personal folder namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the personal folder namespaces.\n\t\t/// </remarks>\n\t\t/// <value>The personal folder namespaces.</value>\n\t\tpublic FolderNamespaceCollection PersonalNamespaces {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the shared folder namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the shared folder namespaces.\n\t\t/// </remarks>\n\t\t/// <value>The shared folder namespaces.</value>\n\t\tpublic FolderNamespaceCollection SharedNamespaces {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the other folder namespaces.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the other folder namespaces.\n\t\t/// </remarks>\n\t\t/// <value>The other folder namespaces.</value>\n\t\tpublic FolderNamespaceCollection OtherNamespaces {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the selected folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the selected folder.\n\t\t/// </remarks>\n\t\t/// <value>The selected folder.</value>\n\t\tpublic ImapFolder? Selected {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets a value indicating whether the engine is disposed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a value indicating whether the engine is disposed.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the engine is disposed; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsDisposed {\n\t\t\tget { return disposed; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether the current NOTIFY status prevents using indexes and * for referencing messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the current NOTIFY status prevents using indexes and * for referencing messages. This is the case when the client has asked for MessageNew or MessageExpunge events on the SELECTED mailbox.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the use of indexes and * is prevented; otherwise, <see langword=\"false\" />.</value>\n\t\tinternal bool NotifySelectedNewExpunge {\n\t\t\tget; set;\n\t\t}\n\n\t\t#region Special Folders\n\n\t\t/// <summary>\n\t\t/// Gets the Inbox folder.\n\t\t/// </summary>\n\t\t/// <value>The Inbox folder.</value>\n\t\tpublic ImapFolder? Inbox {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special folder containing an aggregate of all messages.\n\t\t/// </summary>\n\t\t/// <value>The folder containing all messages.</value>\n\t\tpublic ImapFolder? All {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special archive folder.\n\t\t/// </summary>\n\t\t/// <value>The archive folder.</value>\n\t\tpublic ImapFolder? Archive {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special folder containing drafts.\n\t\t/// </summary>\n\t\t/// <value>The drafts folder.</value>\n\t\tpublic ImapFolder? Drafts {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special folder containing flagged messages.\n\t\t/// </summary>\n\t\t/// <value>The flagged folder.</value>\n\t\tpublic ImapFolder? Flagged {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special folder containing important messages.\n\t\t/// </summary>\n\t\t/// <value>The important folder.</value>\n\t\tpublic ImapFolder? Important {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special folder containing junk messages.\n\t\t/// </summary>\n\t\t/// <value>The junk folder.</value>\n\t\tpublic ImapFolder? Junk {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the special folder containing sent messages.\n\t\t/// </summary>\n\t\t/// <value>The sent.</value>\n\t\tpublic ImapFolder? Sent {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the folder containing deleted messages.\n\t\t/// </summary>\n\t\t/// <value>The trash folder.</value>\n\t\tpublic ImapFolder? Trash {\n\t\t\tget; private set;\n\t\t}\n\n\t\t#endregion\n\n\t\tinternal ImapFolder CreateImapFolder (string encodedName, FolderAttributes attributes, char delim)\n\t\t{\n\t\t\tvar args = new ImapFolderConstructorArgs (this, encodedName, attributes, delim);\n\n\t\t\treturn createImapFolder (args);\n\t\t}\n\n\t\tinternal static ImapProtocolException UnexpectedToken (string format, params object[] args)\n\t\t{\n\t\t\tfor (int i = 0; i < args.Length; i++) {\n\t\t\t\tif (args[i] is ImapToken token) {\n\t\t\t\t\tswitch (token.Type) {\n\t\t\t\t\tcase ImapTokenType.Atom: args[i] = string.Format (\"Unexpected atom token: {0}\", token); break;\n\t\t\t\t\tcase ImapTokenType.Flag: args[i] = string.Format (\"Unexpected flag token: {0}\", token); break;\n\t\t\t\t\tcase ImapTokenType.QString: args[i] = string.Format (\"Unexpected qstring token: {0}\", token); break;\n\t\t\t\t\tcase ImapTokenType.Literal: args[i] = string.Format (\"Unexpected literal token: {0}\", token); break;\n\t\t\t\t\tdefault: args[i] = string.Format (\"Unexpected token: {0}\", token); break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new ImapProtocolException (string.Format (CultureInfo.InvariantCulture, format, args)) { UnexpectedToken = true };\n\t\t}\n\n\t\tinternal static void AssertToken (ImapToken token, ImapTokenType type, string format, params object[] args)\n\t\t{\n\t\t\tif (token.Type != type)\n\t\t\t\tthrow UnexpectedToken (format, args);\n\t\t}\n\n\t\tinternal static void AssertToken (ImapToken token, ImapTokenType type1, ImapTokenType type2, string format, params object[] args)\n\t\t{\n\t\t\tif (token.Type != type1 && token.Type != type2)\n\t\t\t\tthrow UnexpectedToken (format, args);\n\t\t}\n\n\t\tinternal static uint ParseNumber (ImapToken token, bool nonZero, string format, params object[] args)\n\t\t{\n\t\t\tAssertToken (token, ImapTokenType.Atom, format, args);\n\n\t\t\t// Note: Broken IMAP servers such as mail.ru sometimes incorrectly format integers as numbers with decimals and exponents. (e.g. 9.3736e+06)\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/1838 and https://github.com/jstedfast/MailKit/issues/1840 for details.\n\t\t\tif (!uint.TryParse ((string) token.Value, NumberStyles.AllowDecimalPoint | NumberStyles.AllowExponent, CultureInfo.InvariantCulture, out var value) || (nonZero && value == 0))\n\t\t\t\tthrow UnexpectedToken (format, args);\n\n\t\t\treturn value;\n\t\t}\n\n\t\tinternal static ulong ParseNumber64 (ImapToken token, bool nonZero, string format, params object[] args)\n\t\t{\n\t\t\tAssertToken (token, ImapTokenType.Atom, format, args);\n\n\t\t\tif (!ulong.TryParse ((string) token.Value, NumberStyles.None, CultureInfo.InvariantCulture, out var value) || (nonZero && value == 0))\n\t\t\t\tthrow UnexpectedToken (format, args);\n\n\t\t\treturn value;\n\t\t}\n\n\t\tinternal static bool TryParseNumber64 (ImapToken token, out ulong value)\n\t\t{\n\t\t\treturn ulong.TryParse ((string) token.Value, NumberStyles.None, CultureInfo.InvariantCulture, out value);\n\t\t}\n\n\t\tinternal static UniqueIdSet ParseUidSet (ImapToken token, uint validity, out UniqueId? minValue, out UniqueId? maxValue, string format, params object[] args)\n\t\t{\n\t\t\tAssertToken (token, ImapTokenType.Atom, format, args);\n\n\t\t\tif (!UniqueIdSet.TryParse ((string) token.Value, validity, out var uids, out minValue, out maxValue))\n\t\t\t\tthrow UnexpectedToken (format, args);\n\n\t\t\treturn uids;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the stream - this is only here to be used by the unit tests.\n\t\t/// </summary>\n\t\t/// <param name=\"stream\">The IMAP stream.</param>\n\t\tinternal void SetStream (ImapStream stream)\n\t\t{\n\t\t\tStream = stream;\n\t\t}\n\n\t\tpublic NetworkOperation StartNetworkOperation (NetworkOperationKind kind, Uri? uri = null)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\treturn NetworkOperation.Start (kind, uri ?? Uri!, Telemetry.ImapClient.ActivitySource, metrics);\n#else\n\t\t\treturn NetworkOperation.Start (kind, uri ?? Uri!);\n#endif\n\t\t}\n\n\t\t[MemberNotNull (nameof (Stream))]\n\t\tvoid Initialize (ImapStream stream)\n\t\t{\n\t\t\tclientConnectedTimestamp = Stopwatch.GetTimestamp ();\n\t\t\tProtocolVersion = ImapProtocolVersion.Unknown;\n\t\t\tCapabilities = ImapCapabilities.None;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tCompressionAlgorithms.Clear ();\n\t\t\tThreadingAlgorithms.Clear ();\n\t\t\tSupportedCharsets.Clear ();\n\t\t\tSupportedContexts.Clear ();\n\t\t\tRights.Clear ();\n\n\t\t\tsecure = stream.Stream is SslStream;\n\t\t\tState = ImapEngineState.Connecting;\n\t\t\tQuirksMode = ImapQuirksMode.None;\n\t\t\tSupportedCharsets.Add (\"US-ASCII\");\n\t\t\tSupportedCharsets.Add (\"UTF-8\");\n\t\t\tCapabilitiesVersion = 0;\n\t\t\tQResyncEnabled = false;\n\t\t\tUTF8Enabled = false;\n\t\t\tAppendLimit = null;\n\t\t\tSelected = null;\n\t\t\tStream = stream;\n\t\t\tI18NLevel = 0;\n\t\t\tTag = 0;\n\t\t}\n\n\t\tImapEngineState ParseConnectedState (ImapToken token, out bool bye)\n\t\t{\n\t\t\tvar atom = (string) token.Value;\n\n\t\t\tbye = false;\n\n\t\t\tif (atom.Equals (\"OK\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\treturn ImapEngineState.Connected;\n\t\t\t} else if (atom.Equals (\"BYE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tbye = true;\n\n\t\t\t\treturn State;\n\t\t\t} else if (atom.Equals (\"PREAUTH\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\treturn ImapEngineState.Authenticated;\n\t\t\t} else {\n\t\t\t\tthrow UnexpectedToken (GreetingSyntaxErrorFormat, token);\n\t\t\t}\n\t\t}\n\n\t\tvoid DetectQuirksMode (string text)\n\t\t{\n\t\t\tif (text.StartsWith (\"Courier-IMAP ready.\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.Courier;\n\t\t\telse if (text.Contains (\" Cyrus IMAP \"))\n\t\t\t\tQuirksMode = ImapQuirksMode.Cyrus;\n\t\t\telse if (text.StartsWith (\"Domino IMAP4 Server\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.Domino;\n\t\t\telse if (text.StartsWith (\"Dovecot ready.\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.Dovecot;\n\t\t\telse if (text.StartsWith (\"Microsoft Exchange Server 2003 IMAP4rev1\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.Exchange2003;\n\t\t\telse if (text.StartsWith (\"Microsoft Exchange Server 2007 IMAP4 service is ready\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.Exchange2007;\n\t\t\telse if (text.StartsWith (\"The Microsoft Exchange IMAP4 service is ready.\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.Exchange;\n\t\t\telse if (text.StartsWith (\"Gimap ready\", StringComparison.Ordinal))\n\t\t\t\tQuirksMode = ImapQuirksMode.GMail;\n\t\t\telse if (text.Contains (\"QQMail \"))\n\t\t\t\tQuirksMode = ImapQuirksMode.QQMail;\n\t\t\telse if (text.StartsWith (\"IMAPrev1\", StringComparison.Ordinal)) // https://github.com/hmailserver/hmailserver/blob/master/hmailserver/source/Server/IMAP/IMAPConnection.cpp#L127\n\t\t\t\tQuirksMode = ImapQuirksMode.hMailServer;\n\t\t\telse if (text.Contains (\" IMAP4rev1 2007f.\") || text.Contains (\" Panda IMAP \"))\n\t\t\t\tQuirksMode = ImapQuirksMode.UW;\n\t\t\telse if (text.Contains (\"SmarterMail\"))\n\t\t\t\tQuirksMode = ImapQuirksMode.SmarterMail;\n\t\t\telse if (text.Contains (\"Yandex \"))\n\t\t\t\tQuirksMode = ImapQuirksMode.Yandex;\n\t\t\telse if (text.Contains (\"Zoho Mail \"))\n\t\t\t\tQuirksMode = ImapQuirksMode.Zoho;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Takes possession of the <see cref=\"ImapStream\"/> and reads the greeting.\n\t\t/// </summary>\n\t\t/// <param name=\"stream\">The IMAP stream.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void Connect (ImapStream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitialize (stream);\n\n\t\t\ttry {\n\t\t\t\tvar token = ReadToken (cancellationToken);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Asterisk, GreetingSyntaxErrorFormat, token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GreetingSyntaxErrorFormat, token);\n\n\t\t\t\tvar state = ParseConnectedState (token, out bool bye);\n\t\t\t\tvar text = string.Empty;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\tvar code = ParseResponseCode (false, cancellationToken);\n\t\t\t\t\tif (code.Type == ImapResponseCodeType.Alert) {\n\t\t\t\t\t\tOnAlert (code.Message);\n\n\t\t\t\t\t\tif (bye)\n\t\t\t\t\t\t\tthrow new ImapProtocolException (code.Message);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = code.Message;\n\t\t\t\t\t}\n\t\t\t\t} else if (token.Type != ImapTokenType.Eoln) {\n\t\t\t\t\ttext = ReadLine (cancellationToken).TrimEnd ();\n\t\t\t\t\ttext = token.Value.ToString () + text;\n\n\t\t\t\t\tif (bye)\n\t\t\t\t\t\tthrow new ImapProtocolException (text);\n\t\t\t\t} else if (bye) {\n\t\t\t\t\tthrow new ImapProtocolException (\"The IMAP server unexpectedly refused the connection.\");\n\t\t\t\t}\n\n\t\t\t\tDetectQuirksMode (text);\n\n\t\t\t\tState = state;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tDisconnect (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Takes possession of the <see cref=\"ImapStream\"/> and reads the greeting.\n\t\t/// </summary>\n\t\t/// <param name=\"stream\">The IMAP stream.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task ConnectAsync (ImapStream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitialize (stream);\n\n\t\t\ttry {\n\t\t\t\tvar token = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Asterisk, GreetingSyntaxErrorFormat, token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GreetingSyntaxErrorFormat, token);\n\n\t\t\t\tvar state = ParseConnectedState (token, out bool bye);\n\t\t\t\tvar text = string.Empty;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\tvar code = await ParseResponseCodeAsync (false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tif (code.Type == ImapResponseCodeType.Alert) {\n\t\t\t\t\t\tOnAlert (code.Message);\n\n\t\t\t\t\t\tif (bye)\n\t\t\t\t\t\t\tthrow new ImapProtocolException (code.Message);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = code.Message;\n\t\t\t\t\t}\n\t\t\t\t} else if (token.Type != ImapTokenType.Eoln) {\n\t\t\t\t\ttext = (await ReadLineAsync (cancellationToken).ConfigureAwait (false)).TrimEnd ();\n\t\t\t\t\ttext = token.Value.ToString () + text;\n\n\t\t\t\t\tif (bye)\n\t\t\t\t\t\tthrow new ImapProtocolException (text);\n\t\t\t\t} else if (bye) {\n\t\t\t\t\tthrow new ImapProtocolException (\"The IMAP server unexpectedly refused the connection.\");\n\t\t\t\t}\n\n\t\t\t\tDetectQuirksMode (text);\n\n\t\t\t\tState = state;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tDisconnect (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tvoid RecordClientDisconnected (Exception? ex)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\tmetrics?.RecordClientDisconnected (clientConnectedTimestamp, Uri!, ex);\n#endif\n\t\t\tclientConnectedTimestamp = 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Disconnects the <see cref=\"ImapEngine\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Disconnects the <see cref=\"ImapEngine\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"ex\">The exception that is causing the disconnection.</param>\n\t\tpublic void Disconnect (Exception? ex)\n\t\t{\n\t\t\tRecordClientDisconnected (ex);\n\n\t\t\tif (Selected != null) {\n\t\t\t\tSelected.Reset ();\n\t\t\t\tSelected.OnClosed ();\n\t\t\t\tSelected = null;\n\t\t\t}\n\n\t\t\tcurrent = null;\n\n\t\t\tif (Stream != null) {\n\t\t\t\tStream.Dispose ();\n\t\t\t\tStream = null;\n\t\t\t}\n\n\t\t\tsecure = false;\n\n\t\t\tif (State != ImapEngineState.Disconnected) {\n\t\t\t\tState = ImapEngineState.Disconnected;\n\t\t\t\tOnDisconnected ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a single line from the <see cref=\"ImapStream\"/>.\n\t\t/// </summary>\n\t\t/// <returns>The line.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic string ReadLine (CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tbool complete;\n\n\t\t\t\tdo {\n\t\t\t\t\tcomplete = Stream!.ReadLine (builder, cancellationToken);\n\t\t\t\t} while (!complete);\n\n\t\t\t\t// FIXME: All callers expect CRLF to be trimmed, but many also want all trailing whitespace trimmed.\n\t\t\t\tbuilder.TrimNewLine ();\n\n\t\t\t\treturn builder.ToString ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads a single line from the <see cref=\"ImapStream\"/>.\n\t\t/// </summary>\n\t\t/// <returns>The line.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<string> ReadLineAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tbool complete;\n\n\t\t\t\tdo {\n\t\t\t\t\tcomplete = await Stream!.ReadLineAsync (builder, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} while (!complete);\n\n\t\t\t\t// FIXME: All callers expect CRLF to be trimmed, but many also want all trailing whitespace trimmed.\n\t\t\t\tbuilder.TrimNewLine ();\n\n\t\t\t\treturn builder.ToString ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the next token.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ImapToken ReadToken (CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Stream!.ReadToken (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads the next token.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ValueTask<ImapToken> ReadTokenAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Stream!.ReadTokenAsync (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the next token.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"specials\">A list of characters that are not legal in bare string tokens.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ImapToken ReadToken (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Stream!.ReadToken (specials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads the next token.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"specials\">A list of characters that are not legal in bare string tokens.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ValueTask<ImapToken> ReadTokenAsync (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Stream!.ReadTokenAsync (specials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Peeks at the next token.\n\t\t/// </summary>\n\t\t/// <returns>The next token.</returns>\n\t\t/// <param name=\"specials\">A list of characters that are not legal in bare string tokens.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ImapToken PeekToken (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = Stream!.ReadToken (specials, cancellationToken);\n\n\t\t\tStream.UngetToken (token);\n\n\t\t\treturn token;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously peeks at the next token.\n\t\t/// </summary>\n\t\t/// <returns>The next token.</returns>\n\t\t/// <param name=\"specials\">A list of characters that are not legal in bare string tokens.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async ValueTask<ImapToken> PeekTokenAsync (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await Stream!.ReadTokenAsync (specials, cancellationToken).ConfigureAwait (false);\n\n\t\t\tStream.UngetToken (token);\n\n\t\t\treturn token;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Peeks at the next token.\n\t\t/// </summary>\n\t\t/// <returns>The next token.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic ImapToken PeekToken (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = Stream!.ReadToken (cancellationToken);\n\n\t\t\tStream.UngetToken (token);\n\n\t\t\treturn token;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously peeks at the next token.\n\t\t/// </summary>\n\t\t/// <returns>The next token.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An IMAP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async ValueTask<ImapToken> PeekTokenAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await Stream!.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tStream.UngetToken (token);\n\n\t\t\treturn token;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Unget a token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Ungets a token.\n\t\t/// </remarks>\n\t\t/// <param name=\"token\">The token.</param>\n\t\tpublic void UngetToken (ImapToken token)\n\t\t{\n\t\t\tStream!.UngetToken (token);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the literal as a string.\n\t\t/// </summary>\n\t\t/// <returns>The literal.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Stream\"/> is not in literal mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic string ReadLiteral (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Stream!.Mode != ImapStreamMode.Literal)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\tint literalLength = Stream.LiteralLength;\n\t\t\tvar buf = ArrayPool<byte>.Shared.Rent (literalLength);\n\n\t\t\ttry {\n\t\t\t\tint n, nread = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((n = Stream.Read (buf, nread, literalLength - nread, cancellationToken)) > 0)\n\t\t\t\t\t\tnread += n;\n\t\t\t\t} while (nread < literalLength);\n\n\t\t\t\ttry {\n\t\t\t\t\treturn TextEncodings.UTF8.GetString (buf, 0, nread);\n\t\t\t\t} catch {\n\t\t\t\t\treturn TextEncodings.Latin1.GetString (buf, 0, nread);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads the literal as a string.\n\t\t/// </summary>\n\t\t/// <returns>The literal.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Stream\"/> is not in literal mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<string> ReadLiteralAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Stream!.Mode != ImapStreamMode.Literal)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\tint literalLength = Stream.LiteralLength;\n\t\t\tvar buf = ArrayPool<byte>.Shared.Rent (literalLength);\n\n\t\t\ttry {\n\t\t\t\tint n, nread = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((n = await Stream.ReadAsync (buf, nread, literalLength - nread, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\t\tnread += n;\n\t\t\t\t} while (nread < literalLength);\n\n\t\t\t\ttry {\n\t\t\t\t\treturn TextEncodings.UTF8.GetString (buf, 0, nread);\n\t\t\t\t} catch {\n\t\t\t\t\treturn TextEncodings.Latin1.GetString (buf, 0, nread);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t}\n\t\t}\n\n\t\tvoid SkipLine (CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.Literal) {\n\t\t\t\t\tvar buf = ArrayPool<byte>.Shared.Rent (BufferSize);\n\t\t\t\t\tint nread;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tnread = Stream!.Read (buf, 0, BufferSize, cancellationToken);\n\t\t\t\t\t\t} while (nread > 0);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t}\n\n\t\tasync Task SkipLineAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.Literal) {\n\t\t\t\t\tvar buf = ArrayPool<byte>.Shared.Rent (BufferSize);\n\t\t\t\t\tint nread;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tnread = await Stream!.ReadAsync (buf, 0, BufferSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t} while (nread > 0);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t}\n\n\t\tstatic bool TryParseUInt32 (string text, int startIndex, out uint value)\n\t\t{\n#if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER\n\t\t\tvar token = text.AsSpan (startIndex);\n#else\n\t\t\tvar token = text.Substring (startIndex);\n#endif\n\n\t\t\treturn uint.TryParse (token, NumberStyles.None, CultureInfo.InvariantCulture, out value);\n\t\t}\n\n\t\tvoid ResetCapabilities ()\n\t\t{\n\t\t\t// Clear the extensions except STARTTLS so that this capability stays set after a STARTTLS command.\n\t\t\tProtocolVersion = ImapProtocolVersion.Unknown;\n\t\t\tCapabilities &= ImapCapabilities.StartTLS;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tCompressionAlgorithms.Clear ();\n\t\t\tThreadingAlgorithms.Clear ();\n\t\t\tSupportedContexts.Clear ();\n\t\t\tCapabilitiesVersion++;\n\t\t\tAppendLimit = null;\n\t\t\tRights.Clear ();\n\t\t\tI18NLevel = 0;\n\t\t}\n\n\t\tvoid ProcessCapabilityToken (string atom)\n\t\t{\n\t\t\tif (atom.StartsWith (\"AUTH=\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAuthenticationMechanisms.Add (atom.Substring (\"AUTH=\".Length));\n\t\t\t} else if (atom.StartsWith (\"APPENDLIMIT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (atom.Length >= \"APPENDLIMIT\".Length) {\n\t\t\t\t\tif (atom.Length >= \"APPENDLIMIT=\".Length && TryParseUInt32 (atom, \"APPENDLIMIT=\".Length, out uint limit))\n\t\t\t\t\t\tAppendLimit = limit;\n\n\t\t\t\t\tCapabilities |= ImapCapabilities.AppendLimit;\n\t\t\t\t}\n\t\t\t} else if (atom.StartsWith (\"COMPRESS=\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCompressionAlgorithms.Add (atom.Substring (\"COMPRESS=\".Length));\n\t\t\t\tCapabilities |= ImapCapabilities.Compress;\n\t\t\t} else if (atom.StartsWith (\"CONTEXT=\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tSupportedContexts.Add (atom.Substring (\"CONTEXT=\".Length));\n\t\t\t\tCapabilities |= ImapCapabilities.Context;\n\t\t\t} else if (atom.StartsWith (\"I18NLEVEL=\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (TryParseUInt32 (atom, \"I18NLEVEL=\".Length, out uint level))\n\t\t\t\t\tI18NLevel = (int) level;\n\n\t\t\t\tCapabilities |= ImapCapabilities.I18NLevel;\n\t\t\t} else if (atom.StartsWith (\"RIGHTS=\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tvar rights = atom.Substring (\"RIGHTS=\".Length);\n\t\t\t\tRights.AddRange (rights);\n\t\t\t} else if (atom.StartsWith (\"THREAD=\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (string.Compare (\"ORDEREDSUBJECT\", 0, atom, \"THREAD=\".Length, \"ORDEREDSUBJECT\".Length, StringComparison.OrdinalIgnoreCase) == 0)\n\t\t\t\t\tThreadingAlgorithms.Add (ThreadingAlgorithm.OrderedSubject);\n\t\t\t\telse if (string.Compare (\"REFERENCES\", 0, atom, \"THREAD=\".Length, \"REFERENCES\".Length, StringComparison.OrdinalIgnoreCase) == 0)\n\t\t\t\t\tThreadingAlgorithms.Add (ThreadingAlgorithm.References);\n\n\t\t\t\tCapabilities |= ImapCapabilities.Thread;\n\t\t\t} else if (atom.Equals (\"IMAP4\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.IMAP4;\n\t\t\t} else if (atom.Equals (\"IMAP4REV1\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.IMAP4rev1;\n\t\t\t} else if (atom.Equals (\"IMAP4REV2\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.IMAP4rev2;\n\t\t\t} else if (atom.Equals (\"STATUS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Status;\n\t\t\t} else if (atom.Equals (\"ACL\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Acl;\n\t\t\t} else if (atom.Equals (\"QUOTA\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Quota;\n\t\t\t} else if (atom.Equals (\"LITERAL+\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.LiteralPlus;\n\t\t\t} else if (atom.Equals (\"IDLE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Idle;\n\t\t\t} else if (atom.Equals (\"MAILBOX-REFERRALS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.MailboxReferrals;\n\t\t\t} else if (atom.Equals (\"LOGIN-REFERRALS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.LoginReferrals;\n\t\t\t} else if (atom.Equals (\"NAMESPACE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Namespace;\n\t\t\t} else if (atom.Equals (\"ID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Id;\n\t\t\t} else if (atom.Equals (\"CHILDREN\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Children;\n\t\t\t} else if (atom.Equals (\"LOGINDISABLED\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.LoginDisabled;\n\t\t\t} else if (atom.Equals (\"STARTTLS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.StartTLS;\n\t\t\t} else if (atom.Equals (\"MULTIAPPEND\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.MultiAppend;\n\t\t\t} else if (atom.Equals (\"BINARY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Binary;\n\t\t\t} else if (atom.Equals (\"UNSELECT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Unselect;\n\t\t\t} else if (atom.Equals (\"UIDPLUS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.UidPlus;\n\t\t\t} else if (atom.Equals (\"CATENATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Catenate;\n\t\t\t} else if (atom.Equals (\"CONDSTORE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.CondStore;\n\t\t\t} else if (atom.Equals (\"ESEARCH\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.ESearch;\n\t\t\t} else if (atom.Equals (\"SASL-IR\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.SaslIR;\n\t\t\t} else if (atom.Equals (\"WITHIN\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Within;\n\t\t\t} else if (atom.Equals (\"ENABLE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Enable;\n\t\t\t} else if (atom.Equals (\"QRESYNC\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.QuickResync;\n\t\t\t} else if (atom.Equals (\"SEARCHRES\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.SearchResults;\n\t\t\t} else if (atom.Equals (\"SORT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Sort;\n\t\t\t} else if (atom.Equals (\"ANNOTATE-EXPERIMENT-1\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Annotate;\n\t\t\t} else if (atom.Equals (\"LIST-EXTENDED\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.ListExtended;\n\t\t\t} else if (atom.Equals (\"CONVERT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Convert;\n\t\t\t} else if (atom.Equals (\"LANGUAGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Language;\n\t\t\t} else if (atom.Equals (\"ESORT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.ESort;\n\t\t\t} else if (atom.Equals (\"METADATA\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Metadata;\n\t\t\t} else if (atom.Equals (\"METADATA-SERVER\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.MetadataServer;\n\t\t\t} else if (atom.Equals (\"NOTIFY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Notify;\n\t\t\t} else if (atom.Equals (\"FILTERS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Filters;\n\t\t\t} else if (atom.Equals (\"LIST-STATUS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.ListStatus;\n\t\t\t} else if (atom.Equals (\"SORT=DISPLAY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.SortDisplay;\n\t\t\t} else if (atom.Equals (\"CREATE-SPECIAL-USE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.CreateSpecialUse;\n\t\t\t} else if (atom.Equals (\"SPECIAL-USE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.SpecialUse;\n\t\t\t} else if (atom.Equals (\"SEARCH=FUZZY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.FuzzySearch;\n\t\t\t} else if (atom.Equals (\"MULTISEARCH\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.MultiSearch;\n\t\t\t} else if (atom.Equals (\"MOVE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Move;\n\t\t\t} else if (atom.Equals (\"UTF8=ACCEPT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.UTF8Accept;\n\t\t\t} else if (atom.Equals (\"UTF8=ONLY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.UTF8Only;\n\t\t\t} else if (atom.Equals (\"LITERAL-\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.LiteralMinus;\n\t\t\t} else if (atom.Equals (\"UNAUTHENTICATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Unauthenticate;\n\t\t\t} else if (atom.Equals (\"STATUS=SIZE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.StatusSize;\n\t\t\t} else if (atom.Equals (\"LIST-MYRIGHTS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.ListMyRights;\n\t\t\t} else if (atom.Equals (\"OBJECTID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.ObjectID;\n\t\t\t} else if (atom.Equals (\"REPLACE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Replace;\n\t\t\t} else if (atom.Equals (\"SAVEDATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.SaveDate;\n\t\t\t} else if (atom.Equals (\"PREVIEW\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.Preview;\n\t\t\t} else if (atom.Equals (\"XLIST\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.XList;\n\t\t\t} else if (atom.Equals (\"X-GM-EXT-1\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tCapabilities |= ImapCapabilities.GMailExt1;\n\t\t\t\tQuirksMode = ImapQuirksMode.GMail;\n\t\t\t} else if (atom.Equals (\"XSTOP\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tQuirksMode = ImapQuirksMode.ProtonMail;\n\t\t\t} else if (atom.Equals (\"XAPPLEPUSHSERVICE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tQuirksMode = ImapQuirksMode.iCloud;\n\t\t\t} else if (atom.Equals (\"XYMHIGHESTMODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tQuirksMode = ImapQuirksMode.Yahoo;\n\t\t\t}\n\t\t}\n\n\t\tvoid StandardizeCapabilities ()\n\t\t{\n\t\t\tif ((Capabilities & ImapCapabilities.IMAP4rev2) != 0) {\n\t\t\t\tProtocolVersion = ImapProtocolVersion.IMAP4rev2;\n\n\t\t\t\t// Rfc9051, Appendix E defines the capabilities that IMAP4rev2 should be assumed to implement:\n\t\t\t\tCapabilities |= ImapCapabilities.Status |\n\t\t\t\t\tImapCapabilities.Namespace | ImapCapabilities.Unselect | ImapCapabilities.UidPlus | ImapCapabilities.ESearch |\n\t\t\t\t\tImapCapabilities.SearchResults | ImapCapabilities.Enable | ImapCapabilities.Idle | ImapCapabilities.SaslIR | ImapCapabilities.ListExtended |\n\t\t\t\t\tImapCapabilities.ListStatus | ImapCapabilities.Move | ImapCapabilities.LiteralMinus | ImapCapabilities.SpecialUse;\n\n\t\t\t\t// Note: IMAP4rev2 also supports the FETCH portion of the 'BINARY' extension but not the APPEND portion. Since\n\t\t\t\t// we currently have no way to distinguish between them using the ImapCapabilities enum, we do not enable the\n\t\t\t\t// ImapCapabilities.Binary extension flag.\n\t\t\t} else if ((Capabilities & ImapCapabilities.IMAP4rev1) != 0) {\n\t\t\t\tProtocolVersion = ImapProtocolVersion.IMAP4rev1;\n\t\t\t\tCapabilities |= ImapCapabilities.Status;\n\t\t\t} else if ((Capabilities & ImapCapabilities.IMAP4) != 0) {\n\t\t\t\tProtocolVersion = ImapProtocolVersion.IMAP4;\n\t\t\t}\n\n\t\t\tif ((Capabilities & ImapCapabilities.QuickResync) != 0)\n\t\t\t\tCapabilities |= ImapCapabilities.CondStore;\n\n\t\t\tif ((Capabilities & ImapCapabilities.UTF8Only) != 0)\n\t\t\t\tCapabilities |= ImapCapabilities.UTF8Accept;\n\t\t}\n\n\t\tvoid UpdateCapabilities (ImapTokenType sentinel, CancellationToken cancellationToken)\n\t\t{\n\t\t\tResetCapabilities ();\n\n\t\t\tvar token = ReadToken (cancellationToken);\n\n\t\t\t// Note: Some buggy IMAP servers mistakenly put a space between \"LITERAL\" and \"+\" which causes our tokenizer to read\n\t\t\t// a '+' token thereby causing an \"Unexpected token: '+'\" exception to be thrown. If we treat '+' tokens as atoms\n\t\t\t// like we did in v4.1.0 (and older), then we can avoid this exception.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/1654 for details.\n\t\t\twhile (token.Type == ImapTokenType.Atom) {\n\t\t\t\tvar atom = token.Value.ToString ();\n\n\t\t\t\tProcessCapabilityToken (atom!);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t}\n\n\t\t\tAssertToken (token, sentinel, GenericItemSyntaxErrorFormat, \"CAPABILITIES\", token);\n\n\t\t\t// unget the sentinel\n\t\t\tUngetToken (token);\n\n\t\t\tStandardizeCapabilities ();\n\t\t}\n\n\t\tasync Task UpdateCapabilitiesAsync (ImapTokenType sentinel, CancellationToken cancellationToken)\n\t\t{\n\t\t\tResetCapabilities ();\n\n\t\t\tvar token = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t// Note: Some buggy IMAP servers mistakenly put a space between \"LITERAL\" and \"+\" which causes our tokenizer to read\n\t\t\t// a '+' token thereby causing an \"Unexpected token: '+'\" exception to be thrown. If we treat '+' tokens as atoms\n\t\t\t// like we did in v4.1.0 (and older), then we can avoid this exception.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/1654 for details.\n\t\t\twhile (token.Type == ImapTokenType.Atom) {\n\t\t\t\tvar atom = token.Value.ToString ();\n\n\t\t\t\tProcessCapabilityToken (atom!);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tAssertToken (token, sentinel, GenericItemSyntaxErrorFormat, \"CAPABILITIES\", token);\n\n\t\t\t// unget the sentinel\n\t\t\tUngetToken (token);\n\n\t\t\tStandardizeCapabilities ();\n\t\t}\n\n\t\tvoid UpdateNamespaces (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar namespaces = new List<FolderNamespaceCollection> {\n\t\t\t\tPersonalNamespaces, OtherNamespaces, SharedNamespaces\n\t\t\t};\n\t\t\tImapToken token;\n\t\t\tstring path;\n\t\t\tchar delim;\n\t\t\tint n = 0;\n\n\t\t\tPersonalNamespaces.Clear ();\n\t\t\tSharedNamespaces.Clear ();\n\t\t\tOtherNamespaces.Clear ();\n\n\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\tdo {\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t// parse the list of namespace pairs...\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\twhile (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\t// parse the namespace pair - first token is the path\n\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\tpath = (string) token.Value;\n\n\t\t\t\t\t\t// second token is the directory separator\n\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\t\tAssertToken (token, ImapTokenType.QString, ImapTokenType.Nil, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\tvar qstring = token.Type == ImapTokenType.Nil ? string.Empty : (string) token.Value;\n\n\t\t\t\t\t\tif (qstring.Length > 0) {\n\t\t\t\t\t\t\tdelim = qstring[0];\n\n\t\t\t\t\t\t\t// canonicalize the namespace path\n\t\t\t\t\t\t\tpath = path.TrimEnd (delim);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelim = '\\0';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnamespaces[n].Add (new FolderNamespace (delim, DecodeMailboxName (path)));\n\n\t\t\t\t\t\tif (!TryGetCachedFolder (path, out var folder)) {\n\t\t\t\t\t\t\tfolder = CreateImapFolder (path, FolderAttributes.None, delim);\n\t\t\t\t\t\t\tCacheFolder (folder);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfolder.UpdateIsNamespace (true);\n\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// NAMESPACE extension\n\n\t\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\t\t\t\t\t\t\t} while (true);\n\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\t// read the next token - it should either be '(' or ')'\n\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\t\t\t\t} else {\n\t\t\t\t\tAssertToken (token, ImapTokenType.Nil, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\t\t\t\t}\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tn++;\n\t\t\t} while (n < 3);\n\n\t\t\twhile (token.Type != ImapTokenType.Eoln)\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t}\n\n\t\tasync ValueTask UpdateNamespacesAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar namespaces = new List<FolderNamespaceCollection> {\n\t\t\t\tPersonalNamespaces, OtherNamespaces, SharedNamespaces\n\t\t\t};\n\t\t\tImapToken token;\n\t\t\tstring path;\n\t\t\tchar delim;\n\t\t\tint n = 0;\n\n\t\t\tPersonalNamespaces.Clear ();\n\t\t\tSharedNamespaces.Clear ();\n\t\t\tOtherNamespaces.Clear ();\n\n\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tdo {\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t// parse the list of namespace pairs...\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\twhile (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\t// parse the namespace pair - first token is the path\n\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\tpath = (string) token.Value;\n\n\t\t\t\t\t\t// second token is the directory separator\n\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tAssertToken (token, ImapTokenType.QString, ImapTokenType.Nil, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\tvar qstring = token.Type == ImapTokenType.Nil ? string.Empty : (string) token.Value;\n\n\t\t\t\t\t\tif (qstring.Length > 0) {\n\t\t\t\t\t\t\tdelim = qstring[0];\n\n\t\t\t\t\t\t\t// canonicalize the namespace path\n\t\t\t\t\t\t\tpath = path.TrimEnd (delim);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdelim = '\\0';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnamespaces[n].Add (new FolderNamespace (delim, DecodeMailboxName (path)));\n\n\t\t\t\t\t\tif (!TryGetCachedFolder (path, out var folder)) {\n\t\t\t\t\t\t\tfolder = CreateImapFolder (path, FolderAttributes.None, delim);\n\t\t\t\t\t\t\tCacheFolder (folder);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfolder.UpdateIsNamespace (true);\n\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// NAMESPACE extension\n\n\t\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\t\t\t\t\t\t\t} while (true);\n\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\t// read the next token - it should either be '(' or ')'\n\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\t\t\t\t} else {\n\t\t\t\t\tAssertToken (token, ImapTokenType.Nil, GenericUntaggedResponseSyntaxErrorFormat, \"NAMESPACE\", token);\n\t\t\t\t}\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tn++;\n\t\t\t} while (n < 3);\n\n\t\t\twhile (token.Type != ImapTokenType.Eoln)\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\tvoid ProcessResponseCodes (ImapCommand ic)\n\t\t{\n\t\t\tforeach (var code in ic.RespCodes) {\n\t\t\t\tswitch (code.Type) {\n\t\t\t\tcase ImapResponseCodeType.Alert:\n\t\t\t\t\tOnAlert (code.Message);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.WebAlert:\n\t\t\t\t\tvar webAlert = (WebAlertResponseCode) code;\n\t\t\t\t\tif (webAlert.WebUri != null)\n\t\t\t\t\t\tOnWebAlert (webAlert.WebUri, code.Message);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.NotificationOverflow:\n\t\t\t\t\tOnNotificationOverflow ();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid EmitMetadataChanged (Metadata metadata)\n\t\t{\n\t\t\tvar encodedName = metadata.EncodedName;\n\n\t\t\tif (encodedName.Length == 0) {\n\t\t\t\tOnMetadataChanged (metadata);\n\t\t\t} else if (FolderCache.TryGetValue (encodedName, out var folder)) {\n\t\t\t\tfolder.OnMetadataChanged (metadata);\n\t\t\t}\n\t\t}\n\n\t\tinternal MetadataCollection FilterMetadata (MetadataCollection metadata, string encodedName)\n\t\t{\n\t\t\tfor (int i = 0; i < metadata.Count; i++) {\n\t\t\t\tif (metadata[i].EncodedName == encodedName)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tEmitMetadataChanged (metadata[i]);\n\t\t\t\tmetadata.RemoveAt (i);\n\t\t\t\ti--;\n\t\t\t}\n\n\t\t\treturn metadata;\n\t\t}\n\n\t\tinternal void ProcessMetadataChanges (MetadataCollection metadata)\n\t\t{\n\t\t\tfor (int i = 0; i < metadata.Count; i++)\n\t\t\t\tEmitMetadataChanged (metadata[i]);\n\t\t}\n\n\t\tinternal static ImapResponseCodeType GetResponseCodeType (string atom)\n\t\t{\n\t\t\tif (atom.Equals (\"ALERT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Alert;\n\t\t\tif (atom.Equals (\"BADCHARSET\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.BadCharset;\n\t\t\tif (atom.Equals (\"CAPABILITY\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Capability;\n\t\t\tif (atom.Equals (\"NEWNAME\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NewName;\n\t\t\tif (atom.Equals (\"PARSE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Parse;\n\t\t\tif (atom.Equals (\"PERMANENTFLAGS\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.PermanentFlags;\n\t\t\tif (atom.Equals (\"READ-ONLY\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.ReadOnly;\n\t\t\tif (atom.Equals (\"READ-WRITE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.ReadWrite;\n\t\t\tif (atom.Equals (\"TRYCREATE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.TryCreate;\n\t\t\tif (atom.Equals (\"UIDNEXT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UidNext;\n\t\t\tif (atom.Equals (\"UIDVALIDITY\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UidValidity;\n\t\t\tif (atom.Equals (\"UNSEEN\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Unseen;\n\t\t\tif (atom.Equals (\"REFERRAL\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Referral;\n\t\t\tif (atom.Equals (\"UNKNOWN-CTE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UnknownCte;\n\t\t\tif (atom.Equals (\"APPENDUID\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.AppendUid;\n\t\t\tif (atom.Equals (\"COPYUID\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.CopyUid;\n\t\t\tif (atom.Equals (\"UIDNOTSTICKY\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UidNotSticky;\n\t\t\tif (atom.Equals (\"URLMECH\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UrlMech;\n\t\t\tif (atom.Equals (\"BADURL\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.BadUrl;\n\t\t\tif (atom.Equals (\"TOOBIG\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.TooBig;\n\t\t\tif (atom.Equals (\"HIGHESTMODSEQ\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.HighestModSeq;\n\t\t\tif (atom.Equals (\"MODIFIED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Modified;\n\t\t\tif (atom.Equals (\"NOMODSEQ\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NoModSeq;\n\t\t\tif (atom.Equals (\"COMPRESSIONACTIVE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.CompressionActive;\n\t\t\tif (atom.Equals (\"CLOSED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Closed;\n\t\t\tif (atom.Equals (\"NOTSAVED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NotSaved;\n\t\t\tif (atom.Equals (\"BADCOMPARATOR\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.BadComparator;\n\t\t\tif (atom.Equals (\"ANNOTATE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Annotate;\n\t\t\tif (atom.Equals (\"ANNOTATIONS\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Annotations;\n\t\t\tif (atom.Equals (\"MAXCONVERTMESSAGES\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.MaxConvertMessages;\n\t\t\tif (atom.Equals (\"MAXCONVERTPARTS\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.MaxConvertParts;\n\t\t\tif (atom.Equals (\"TEMPFAIL\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.TempFail;\n\t\t\tif (atom.Equals (\"NOUPDATE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NoUpdate;\n\t\t\tif (atom.Equals (\"METADATA\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Metadata;\n\t\t\tif (atom.Equals (\"NOTIFICATIONOVERFLOW\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NotificationOverflow;\n\t\t\tif (atom.Equals (\"BADEVENT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.BadEvent;\n\t\t\tif (atom.Equals (\"UNDEFINED-FILTER\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UndefinedFilter;\n\t\t\tif (atom.Equals (\"UNAVAILABLE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Unavailable;\n\t\t\tif (atom.Equals (\"AUTHENTICATIONFAILED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.AuthenticationFailed;\n\t\t\tif (atom.Equals (\"AUTHORIZATIONFAILED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.AuthorizationFailed;\n\t\t\tif (atom.Equals (\"EXPIRED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Expired;\n\t\t\tif (atom.Equals (\"PRIVACYREQUIRED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.PrivacyRequired;\n\t\t\tif (atom.Equals (\"CONTACTADMIN\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.ContactAdmin;\n\t\t\tif (atom.Equals (\"NOPERM\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NoPerm;\n\t\t\tif (atom.Equals (\"INUSE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.InUse;\n\t\t\tif (atom.Equals (\"EXPUNGEISSUED\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.ExpungeIssued;\n\t\t\tif (atom.Equals (\"CORRUPTION\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Corruption;\n\t\t\tif (atom.Equals (\"SERVERBUG\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.ServerBug;\n\t\t\tif (atom.Equals (\"CLIENTBUG\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.ClientBug;\n\t\t\tif (atom.Equals (\"CANNOT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.CanNot;\n\t\t\tif (atom.Equals (\"LIMIT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.Limit;\n\t\t\tif (atom.Equals (\"OVERQUOTA\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.OverQuota;\n\t\t\tif (atom.Equals (\"ALREADYEXISTS\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.AlreadyExists;\n\t\t\tif (atom.Equals (\"NONEXISTENT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.NonExistent;\n\t\t\tif (atom.Equals (\"USEATTR\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.UseAttr;\n\t\t\tif (atom.Equals (\"MAILBOXID\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.MailboxId;\n\t\t\tif (atom.Equals (\"WEBALERT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn ImapResponseCodeType.WebAlert;\n\n\t\t\treturn ImapResponseCodeType.Unknown;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the response code.\n\t\t/// </summary>\n\t\t/// <returns>The response code.</returns>\n\t\t/// <param name=\"isTagged\">Whether or not the resp-code is tagged vs untagged.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic ImapResponseCode ParseResponseCode (bool isTagged, CancellationToken cancellationToken)\n\t\t{\n\t\t\tuint validity = Selected != null ? Selected.UidValidity : 0;\n\t\t\tImapResponseCode code;\n\t\t\tstring atom, value;\n\t\t\tImapToken token;\n\n\t\t\t//\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t//\n\t\t\t//\t\t\tif (token.Type != ImapTokenType.LeftBracket) {\n\t\t\t//\t\t\t\tDebug.WriteLine (\"Expected a '[' followed by a RESP-CODE, but got: {0}\", token);\n\t\t\t//\t\t\t\tthrow UnexpectedToken (token, false);\n\t\t\t//\t\t\t}\n\n\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\tAssertToken (token, ImapTokenType.Atom, \"Syntax error in response code. {0}\", token);\n\n\t\t\tatom = (string) token.Value;\n\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\tcode = ImapResponseCode.Create (GetResponseCodeType (atom));\n\t\t\tcode.IsTagged = isTagged;\n\n\t\t\tswitch (code.Type) {\n\t\t\tcase ImapResponseCodeType.BadCharset:\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tSupportedCharsets.Clear ();\n\t\t\t\t\twhile (token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.QString) {\n\t\t\t\t\t\tSupportedCharsets.Add ((string) token.Value);\n\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericResponseCodeSyntaxErrorFormat, \"BADCHARSET\", token);\n\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Capability:\n\t\t\t\tUngetToken (token);\n\t\t\t\tUpdateCapabilities (ImapTokenType.CloseBracket, cancellationToken);\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.PermanentFlags:\n\t\t\t\tvar perm = (PermanentFlagsResponseCode) code;\n\n\t\t\t\tUngetToken (token);\n\t\t\t\tperm.Flags = ImapUtils.ParseFlagsList (this, \"PERMANENTFLAGS\", perm.Keywords, cancellationToken);\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.UidNext:\n\t\t\t\tvar next = (UidNextResponseCode) code;\n\n\t\t\t\t// Note: we allow '0' here because some servers have been known to send \"* OK [UIDNEXT 0]\".\n\t\t\t\t// The *probable* explanation here is that the folder has never been opened and/or no messages\n\t\t\t\t// have ever been delivered (yet) to that mailbox and so the UIDNEXT has not (yet) been\n\t\t\t\t// initialized.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1010 for an example.\n\t\t\t\tvar uid = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"UIDNEXT\", token);\n\t\t\t\tnext.Uid = uid > 0 ? new UniqueId (uid) : UniqueId.Invalid;\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.UidValidity:\n\t\t\t\tvar uidvalidity = (UidValidityResponseCode) code;\n\n\t\t\t\t// Note: we allow '0' here because some servers have been known to send \"* OK [UIDVALIDITY 0]\".\n\t\t\t\t// The *probable* explanation here is that the folder has never been opened and/or no messages\n\t\t\t\t// have ever been delivered (yet) to that mailbox and so the UIDVALIDITY has not (yet) been\n\t\t\t\t// initialized.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/150 for an example.\n\t\t\t\tuidvalidity.UidValidity = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"UIDVALIDITY\", token);\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Unseen:\n\t\t\t\tvar unseen = (UnseenResponseCode) code;\n\n\t\t\t\t// Note: we allow '0' here because some servers have been known to send \"* OK [UNSEEN 0]\" when the\n\t\t\t\t// mailbox contains no messages.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/34 for details.\n\t\t\t\tvar n = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"UNSEEN\", token);\n\n\t\t\t\tunseen.Index = n > 0 ? (int) (n - 1) : 0;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.NewName:\n\t\t\t\tvar rename = (NewNameResponseCode) code;\n\n\t\t\t\t// Note: this RESP-CODE existed in rfc2060 but has been removed in rfc3501:\n\t\t\t\t//\n\t\t\t\t// 85) Remove NEWNAME.  It can't work because mailbox names can be\n\t\t\t\t// literals and can include \"]\".  Functionality can be addressed via\n\t\t\t\t// referrals.\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"NEWNAME\", token);\n\n\t\t\t\trename.OldName = (string) token.Value;\n\n\t\t\t\t// the next token should be another atom or qstring token representing the new name of the folder\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"NEWNAME\", token);\n\n\t\t\t\trename.NewName = (string) token.Value;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.AppendUid:\n\t\t\t\tvar append = (AppendUidResponseCode) code;\n\n\t\t\t\tappend.UidValidity = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"APPENDUID\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t// The MULTIAPPEND extension redefines APPENDUID's second argument to be a uid-set instead of a single uid.\n\t\t\t\tappend.UidSet = ParseUidSet (token, append.UidValidity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"APPENDUID\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.CopyUid:\n\t\t\t\tvar copy = (CopyUidResponseCode) code;\n\n\t\t\t\tcopy.UidValidity = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"COPYUID\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t// Note: Outlook.com will apparently sometimes issue a [COPYUID nz_number SPACE SPACE] resp-code\n\t\t\t\t// in response to a UID COPY or UID MOVE command. Likely this happens only when the source message\n\t\t\t\t// didn't exist or something? See https://github.com/jstedfast/MailKit/issues/555 for details.\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseBracket) {\n\t\t\t\t\tcopy.SrcUidSet = ParseUidSet (token, validity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"COPYUID\", token);\n\t\t\t\t} else {\n\t\t\t\t\tcopy.SrcUidSet = new UniqueIdSet ();\n\t\t\t\t\tUngetToken (token);\n\t\t\t\t}\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseBracket) {\n\t\t\t\t\tcopy.DestUidSet = ParseUidSet (token, copy.UidValidity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"COPYUID\", token);\n\t\t\t\t} else {\n\t\t\t\t\tcopy.DestUidSet = new UniqueIdSet ();\n\t\t\t\t\tUngetToken (token);\n\t\t\t\t}\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.BadUrl:\n\t\t\t\tvar badurl = (BadUrlResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"BADURL\", token);\n\n\t\t\t\tbadurl.BadUrl = (string) token.Value;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.HighestModSeq:\n\t\t\t\tvar highest = (HighestModSeqResponseCode) code;\n\n\t\t\t\thighest.HighestModSeq = ParseNumber64 (token, false, GenericResponseCodeSyntaxErrorFormat, \"HIGHESTMODSEQ\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Modified:\n\t\t\t\tvar modified = (ModifiedResponseCode) code;\n\n\t\t\t\tmodified.UidSet = ParseUidSet (token, validity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"MODIFIED\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.MaxConvertMessages:\n\t\t\tcase ImapResponseCodeType.MaxConvertParts:\n\t\t\t\tvar maxConvert = (MaxConvertResponseCode) code;\n\n\t\t\t\tmaxConvert.MaxConvert = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, atom, token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.NoUpdate:\n\t\t\t\tvar noUpdate = (NoUpdateResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"NOUPDATE\", token);\n\n\t\t\t\tnoUpdate.Tag = (string) token.Value;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Annotate:\n\t\t\t\tvar annotate = (AnnotateResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATE\", token);\n\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tif (value.Equals (\"TOOBIG\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tannotate.SubType = AnnotateResponseCodeSubType.TooBig;\n\t\t\t\telse if (value.Equals (\"TOOMANY\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tannotate.SubType = AnnotateResponseCodeSubType.TooMany;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Annotations:\n\t\t\t\tvar annotations = (AnnotationsResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATIONS\", token);\n\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tif (value.Equals (\"NONE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// nothing\n\t\t\t\t} else if (value.Equals (\"READ-ONLY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tannotations.Access = AnnotationAccess.ReadOnly;\n\t\t\t\t} else {\n\t\t\t\t\tannotations.Access = AnnotationAccess.ReadWrite;\n\t\t\t\t\tannotations.MaxSize = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATIONS\", token);\n\t\t\t\t}\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (annotations.Access != AnnotationAccess.None) {\n\t\t\t\t\tannotations.Scopes = AnnotationScope.Both;\n\n\t\t\t\t\tif (token.Type != ImapTokenType.CloseBracket) {\n\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATIONS\", token);\n\n\t\t\t\t\t\tif (((string) token.Value).Equals (\"NOPRIVATE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\t\tannotations.Scopes = AnnotationScope.Shared;\n\n\t\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Metadata:\n\t\t\t\tvar metadata = (MetadataResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"METADATA\", token);\n\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tif (value.Equals (\"LONGENTRIES\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.LongEntries;\n\t\t\t\t\tmetadata.IsError = false;\n\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tmetadata.Value = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"METADATA LONGENTRIES\", token);\n\t\t\t\t} else if (value.Equals (\"MAXSIZE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.MaxSize;\n\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tmetadata.Value = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"METADATA MAXSIZE\", token);\n\t\t\t\t} else if (value.Equals (\"TOOMANY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.TooMany;\n\t\t\t\t} else if (value.Equals (\"NOPRIVATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.NoPrivate;\n\t\t\t\t}\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.UndefinedFilter:\n\t\t\t\tvar undefined = (UndefinedFilterResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"UNDEFINED-FILTER\", token);\n\n\t\t\t\tundefined.Name = (string) token.Value;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.MailboxId:\n\t\t\t\tvar mailboxid = (MailboxIdResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericResponseCodeSyntaxErrorFormat, \"MAILBOXID\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"MAILBOXID\", token);\n\n\t\t\t\tmailboxid.MailboxId = (string) token.Value;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericResponseCodeSyntaxErrorFormat, \"MAILBOXID\", token);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.WebAlert:\n\t\t\t\tvar webalert = (WebAlertResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"WEBALERT\", token);\n\n\t\t\t\tUri.TryCreate ((string) token.Value, UriKind.Absolute, out webalert.WebUri);\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Note: This code-path handles: [ALERT], [CLOSED], [READ-ONLY], [READ-WRITE], etc.\n\n\t\t\t\t//if (code.Type == ImapResponseCodeType.Unknown)\n\t\t\t\t//\tDebug.WriteLine (string.Format (\"Unknown RESP-CODE encountered: {0}\", atom));\n\n\t\t\t\t// extensions are of the form: \"[\" atom [SPACE 1*<any TEXT_CHAR except \"]\">] \"]\"\n\n\t\t\t\t// skip over tokens until we get to a ']'\n\t\t\t\twhile (token.Type != ImapTokenType.CloseBracket && token.Type != ImapTokenType.Eoln)\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tAssertToken (token, ImapTokenType.CloseBracket, \"Syntax error in response code. {0}\", token);\n\n\t\t\tcode.Message = ReadLine (cancellationToken).Trim ();\n\n\t\t\treturn code;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the response code.\n\t\t/// </summary>\n\t\t/// <returns>The response code.</returns>\n\t\t/// <param name=\"isTagged\">Whether or not the resp-code is tagged vs untagged.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async ValueTask<ImapResponseCode> ParseResponseCodeAsync (bool isTagged, CancellationToken cancellationToken)\n\t\t{\n\t\t\tuint validity = Selected != null ? Selected.UidValidity : 0;\n\t\t\tImapResponseCode code;\n\t\t\tstring atom, value;\n\t\t\tImapToken token;\n\n\t\t\t//\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t//\n\t\t\t//\t\t\tif (token.Type != ImapTokenType.LeftBracket) {\n\t\t\t//\t\t\t\tDebug.WriteLine (\"Expected a '[' followed by a RESP-CODE, but got: {0}\", token);\n\t\t\t//\t\t\t\tthrow UnexpectedToken (token, false);\n\t\t\t//\t\t\t}\n\n\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tAssertToken (token, ImapTokenType.Atom, \"Syntax error in response code. {0}\", token);\n\n\t\t\tatom = (string) token.Value;\n\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tcode = ImapResponseCode.Create (GetResponseCodeType (atom));\n\t\t\tcode.IsTagged = isTagged;\n\n\t\t\tswitch (code.Type) {\n\t\t\tcase ImapResponseCodeType.BadCharset:\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tSupportedCharsets.Clear ();\n\t\t\t\t\twhile (token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.QString) {\n\t\t\t\t\t\tSupportedCharsets.Add ((string) token.Value);\n\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericResponseCodeSyntaxErrorFormat, \"BADCHARSET\", token);\n\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Capability:\n\t\t\t\tUngetToken (token);\n\t\t\t\tawait UpdateCapabilitiesAsync (ImapTokenType.CloseBracket, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.PermanentFlags:\n\t\t\t\tvar perm = (PermanentFlagsResponseCode) code;\n\n\t\t\t\tUngetToken (token);\n\t\t\t\tperm.Flags = await ImapUtils.ParseFlagsListAsync (this, \"PERMANENTFLAGS\", perm.Keywords, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.UidNext:\n\t\t\t\tvar next = (UidNextResponseCode) code;\n\n\t\t\t\t// Note: we allow '0' here because some servers have been known to send \"* OK [UIDNEXT 0]\".\n\t\t\t\t// The *probable* explanation here is that the folder has never been opened and/or no messages\n\t\t\t\t// have ever been delivered (yet) to that mailbox and so the UIDNEXT has not (yet) been\n\t\t\t\t// initialized.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1010 for an example.\n\t\t\t\tvar uid = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"UIDNEXT\", token);\n\t\t\t\tnext.Uid = uid > 0 ? new UniqueId (uid) : UniqueId.Invalid;\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.UidValidity:\n\t\t\t\tvar uidvalidity = (UidValidityResponseCode) code;\n\n\t\t\t\t// Note: we allow '0' here because some servers have been known to send \"* OK [UIDVALIDITY 0]\".\n\t\t\t\t// The *probable* explanation here is that the folder has never been opened and/or no messages\n\t\t\t\t// have ever been delivered (yet) to that mailbox and so the UIDVALIDITY has not (yet) been\n\t\t\t\t// initialized.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/150 for an example.\n\t\t\t\tuidvalidity.UidValidity = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"UIDVALIDITY\", token);\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Unseen:\n\t\t\t\tvar unseen = (UnseenResponseCode) code;\n\n\t\t\t\t// Note: we allow '0' here because some servers have been known to send \"* OK [UNSEEN 0]\" when the\n\t\t\t\t// mailbox contains no messages.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/34 for details.\n\t\t\t\tvar n = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"UNSEEN\", token);\n\n\t\t\t\tunseen.Index = n > 0 ? (int) (n - 1) : 0;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.NewName:\n\t\t\t\tvar rename = (NewNameResponseCode) code;\n\n\t\t\t\t// Note: this RESP-CODE existed in rfc2060 but has been removed in rfc3501:\n\t\t\t\t//\n\t\t\t\t// 85) Remove NEWNAME.  It can't work because mailbox names can be\n\t\t\t\t// literals and can include \"]\".  Functionality can be addressed via\n\t\t\t\t// referrals.\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"NEWNAME\", token);\n\n\t\t\t\trename.OldName = (string) token.Value;\n\n\t\t\t\t// the next token should be another atom or qstring token representing the new name of the folder\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"NEWNAME\", token);\n\n\t\t\t\trename.NewName = (string) token.Value;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.AppendUid:\n\t\t\t\tvar append = (AppendUidResponseCode) code;\n\n\t\t\t\tappend.UidValidity = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"APPENDUID\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// The MULTIAPPEND extension redefines APPENDUID's second argument to be a uid-set instead of a single uid.\n\t\t\t\tappend.UidSet = ParseUidSet (token, append.UidValidity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"APPENDUID\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.CopyUid:\n\t\t\t\tvar copy = (CopyUidResponseCode) code;\n\n\t\t\t\tcopy.UidValidity = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"COPYUID\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// Note: Outlook.com will apparently sometimes issue a [COPYUID nz_number SPACE SPACE] resp-code\n\t\t\t\t// in response to a UID COPY or UID MOVE command. Likely this happens only when the source message\n\t\t\t\t// didn't exist or something? See https://github.com/jstedfast/MailKit/issues/555 for details.\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseBracket) {\n\t\t\t\t\tcopy.SrcUidSet = ParseUidSet (token, validity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"COPYUID\", token);\n\t\t\t\t} else {\n\t\t\t\t\tcopy.SrcUidSet = new UniqueIdSet ();\n\t\t\t\t\tUngetToken (token);\n\t\t\t\t}\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseBracket) {\n\t\t\t\t\tcopy.DestUidSet = ParseUidSet (token, copy.UidValidity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"COPYUID\", token);\n\t\t\t\t} else {\n\t\t\t\t\tcopy.DestUidSet = new UniqueIdSet ();\n\t\t\t\t\tUngetToken (token);\n\t\t\t\t}\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.BadUrl:\n\t\t\t\tvar badurl = (BadUrlResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"BADURL\", token);\n\n\t\t\t\tbadurl.BadUrl = (string) token.Value;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.HighestModSeq:\n\t\t\t\tvar highest = (HighestModSeqResponseCode) code;\n\n\t\t\t\thighest.HighestModSeq = ParseNumber64 (token, false, GenericResponseCodeSyntaxErrorFormat, \"HIGHESTMODSEQ\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Modified:\n\t\t\t\tvar modified = (ModifiedResponseCode) code;\n\n\t\t\t\tmodified.UidSet = ParseUidSet (token, validity, out _, out _, GenericResponseCodeSyntaxErrorFormat, \"MODIFIED\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.MaxConvertMessages:\n\t\t\tcase ImapResponseCodeType.MaxConvertParts:\n\t\t\t\tvar maxConvert = (MaxConvertResponseCode) code;\n\n\t\t\t\tmaxConvert.MaxConvert = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, atom, token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.NoUpdate:\n\t\t\t\tvar noUpdate = (NoUpdateResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, GenericResponseCodeSyntaxErrorFormat, \"NOUPDATE\", token);\n\n\t\t\t\tnoUpdate.Tag = (string) token.Value;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Annotate:\n\t\t\t\tvar annotate = (AnnotateResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATE\", token);\n\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tif (value.Equals (\"TOOBIG\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tannotate.SubType = AnnotateResponseCodeSubType.TooBig;\n\t\t\t\telse if (value.Equals (\"TOOMANY\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tannotate.SubType = AnnotateResponseCodeSubType.TooMany;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Annotations:\n\t\t\t\tvar annotations = (AnnotationsResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATIONS\", token);\n\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tif (value.Equals (\"NONE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// nothing\n\t\t\t\t} else if (value.Equals (\"READ-ONLY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tannotations.Access = AnnotationAccess.ReadOnly;\n\t\t\t\t} else {\n\t\t\t\t\tannotations.Access = AnnotationAccess.ReadWrite;\n\t\t\t\t\tannotations.MaxSize = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATIONS\", token);\n\t\t\t\t}\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (annotations.Access != AnnotationAccess.None) {\n\t\t\t\t\tannotations.Scopes = AnnotationScope.Both;\n\n\t\t\t\t\tif (token.Type != ImapTokenType.CloseBracket) {\n\t\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"ANNOTATIONS\", token);\n\n\t\t\t\t\t\tif (((string) token.Value).Equals (\"NOPRIVATE\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\t\tannotations.Scopes = AnnotationScope.Shared;\n\n\t\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.Metadata:\n\t\t\t\tvar metadata = (MetadataResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"METADATA\", token);\n\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tif (value.Equals (\"LONGENTRIES\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.LongEntries;\n\t\t\t\t\tmetadata.IsError = false;\n\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tmetadata.Value = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"METADATA LONGENTRIES\", token);\n\t\t\t\t} else if (value.Equals (\"MAXSIZE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.MaxSize;\n\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tmetadata.Value = ParseNumber (token, false, GenericResponseCodeSyntaxErrorFormat, \"METADATA MAXSIZE\", token);\n\t\t\t\t} else if (value.Equals (\"TOOMANY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.TooMany;\n\t\t\t\t} else if (value.Equals (\"NOPRIVATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmetadata.SubType = MetadataResponseCodeSubType.NoPrivate;\n\t\t\t\t}\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.UndefinedFilter:\n\t\t\t\tvar undefined = (UndefinedFilterResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"UNDEFINED-FILTER\", token);\n\n\t\t\t\tundefined.Name = (string) token.Value;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.MailboxId:\n\t\t\t\tvar mailboxid = (MailboxIdResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericResponseCodeSyntaxErrorFormat, \"MAILBOXID\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"MAILBOXID\", token);\n\n\t\t\t\tmailboxid.MailboxId = (string) token.Value;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericResponseCodeSyntaxErrorFormat, \"MAILBOXID\", token);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapResponseCodeType.WebAlert:\n\t\t\t\tvar webalert = (WebAlertResponseCode) code;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericResponseCodeSyntaxErrorFormat, \"WEBALERT\", token);\n\n\t\t\t\tUri.TryCreate ((string) token.Value, UriKind.Absolute, out webalert.WebUri);\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Note: This code-path handles: [ALERT], [CLOSED], [READ-ONLY], [READ-WRITE], etc.\n\n\t\t\t\t//if (code.Type == ImapResponseCodeType.Unknown)\n\t\t\t\t//\tDebug.WriteLine (string.Format (\"Unknown RESP-CODE encountered: {0}\", atom));\n\n\t\t\t\t// extensions are of the form: \"[\" atom [SPACE 1*<any TEXT_CHAR except \"]\">] \"]\"\n\n\t\t\t\t// skip over tokens until we get to a ']'\n\t\t\t\twhile (token.Type != ImapTokenType.CloseBracket && token.Type != ImapTokenType.Eoln)\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tAssertToken (token, ImapTokenType.CloseBracket, \"Syntax error in response code. {0}\", token);\n\n\t\t\tcode.Message = (await ReadLineAsync (cancellationToken).ConfigureAwait (false)).Trim ();\n\n\t\t\treturn code;\n\t\t}\n\n\t\tstatic bool UpdateSimpleStatusValue (ImapFolder? folder, string atom, ImapToken token)\n\t\t{\n\t\t\tuint count, uid;\n\t\t\tulong modseq;\n\n\t\t\tif (atom.Equals (\"HIGHESTMODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tmodseq = ParseNumber64 (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.UpdateHighestModSeq (modseq);\n\t\t\t} else if (atom.Equals (\"MESSAGES\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tcount = ParseNumber (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.OnExists ((int) count);\n\t\t\t} else if (atom.Equals (\"RECENT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tcount = ParseNumber (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.OnRecent ((int) count);\n\t\t\t} else if (atom.Equals (\"UIDNEXT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tuid = ParseNumber (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.UpdateUidNext (uid > 0 ? new UniqueId (uid) : UniqueId.Invalid);\n\t\t\t} else if (atom.Equals (\"UIDVALIDITY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tuid = ParseNumber (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.UpdateUidValidity (uid);\n\t\t\t} else if (atom.Equals (\"UNSEEN\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tcount = ParseNumber (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.UpdateUnread ((int) count);\n\t\t\t} else if (atom.Equals (\"APPENDLIMIT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (token.Type == ImapTokenType.Atom) {\n\t\t\t\t\tvar limit = ParseNumber (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tfolder?.UpdateAppendLimit (limit);\n\t\t\t\t} else {\n\t\t\t\t\tAssertToken (token, ImapTokenType.Nil, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\t\tfolder?.UpdateAppendLimit (null);\n\t\t\t\t}\n\t\t\t} else if (atom.Equals (\"SIZE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tvar size = ParseNumber64 (token, false, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\tfolder?.UpdateSize (size);\n\t\t\t} else {\n\t\t\t\t// This is probably the MAILBOXID value which is multiple tokens and can't be handled here.\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvoid UpdateStatus (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = ReadToken (ImapStream.AtomSpecials, cancellationToken);\n\t\t\tstring name;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tname = ReadLiteral (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tname = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t// Note: according to rfc3501, section 4.5, NIL is acceptable as a mailbox name.\n\t\t\t\tname = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow UnexpectedToken (GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\t\t\t}\n\n\t\t\t// Note: if the folder is null, then it probably means the user is using NOTIFY\n\t\t\t// and hasn't yet requested the folder. That's ok.\n\t\t\tTryGetCachedFolder (name, out var folder);\n\n\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (UpdateSimpleStatusValue (folder, atom, token))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (atom.Equals (\"MAILBOXID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tfolder?.UpdateId ((string) token.Value);\n\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\tAssertToken (token, ImapTokenType.Eoln, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\t\t}\n\n\t\tasync ValueTask UpdateStatusAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await ReadTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\t\t\tstring name;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tname = await ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tname = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t// Note: according to rfc3501, section 4.5, NIL is acceptable as a mailbox name.\n\t\t\t\tname = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow UnexpectedToken (GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\t\t\t}\n\n\t\t\t// Note: if the folder is null, then it probably means the user is using NOTIFY\n\t\t\t// and hasn't yet requested the folder. That's ok.\n\t\t\tTryGetCachedFolder (name, out var folder);\n\n\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (UpdateSimpleStatusValue (folder, atom, token))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (atom.Equals (\"MAILBOXID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tAssertToken (token, ImapTokenType.OpenParen, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tfolder?.UpdateId ((string) token.Value);\n\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.CloseParen, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tAssertToken (token, ImapTokenType.Eoln, GenericUntaggedResponseSyntaxErrorFormat, \"STATUS\", token);\n\t\t}\n\n\t\tstatic bool IsOkNoOrBad (string atom, out ImapUntaggedResult result)\n\t\t{\n\t\t\tif (atom.Equals (\"OK\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tresult = ImapUntaggedResult.Ok;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\tif (atom.Equals (\"NO\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tresult = ImapUntaggedResult.No;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (atom.Equals (\"BAD\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tresult = ImapUntaggedResult.Bad;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tresult = ImapUntaggedResult.Ok;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Processes an untagged response.\n\t\t/// </summary>\n\t\t/// <returns>The untagged response.</returns>\n\t\t/// <param name=\"ic\">The IMAP command that is currently being processed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tinternal void ProcessUntaggedResponse (ImapCommand ic, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = ReadToken (cancellationToken);\n\t\t\tvar folder = ic.Folder ?? Selected;\n\t\t\tImapUntaggedHandler? handler;\n\t\t\tstring atom;\n\n\t\t\t// Note: work around broken IMAP servers such as home.pl which sends \"* [COPYUID ...]\" resp-codes\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/115#issuecomment-313684616 for details.\n\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t// unget the '[' token and then pretend that we got an \"OK\"\n\t\t\t\tUngetToken (token);\n\t\t\t\tatom = \"OK\";\n\t\t\t} else if (token.Type != ImapTokenType.Atom) {\n\t\t\t\t// if we get anything else here, just ignore it?\n\t\t\t\tUngetToken (token);\n\t\t\t\tSkipLine (cancellationToken);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tatom = (string) token.Value;\n\t\t\t}\n\n\t\t\tif (atom.Equals (\"BYE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\tvar code = ParseResponseCode (false, cancellationToken);\n\t\t\t\t\tic.RespCodes.Add (code);\n\t\t\t\t} else {\n\t\t\t\t\tvar text = ReadLine (cancellationToken).TrimEnd ();\n\t\t\t\t\tic.ResponseText = token.Value.ToString () + text;\n\t\t\t\t}\n\n\t\t\t\tic.Bye = true;\n\n\t\t\t\t// Note: Yandex IMAP is broken and will continue sending untagged BYE responses until the client closes\n\t\t\t\t// the connection. In order to avoid this scenario, consider this command complete as soon as we receive\n\t\t\t\t// the very first untagged BYE response and do not hold out hoping for a tagged response following the\n\t\t\t\t// untagged BYE.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/938 for details.\n\t\t\t\tif (QuirksMode == ImapQuirksMode.Yandex && !ic.Logout)\n\t\t\t\t\tic.Status = ImapCommandStatus.Complete;\n\t\t\t} else if (atom.Equals (\"CAPABILITY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tUpdateCapabilities (ImapTokenType.Eoln, cancellationToken);\n\n\t\t\t\t// read the eoln token\n\t\t\t\tReadToken (cancellationToken);\n\t\t\t} else if (atom.Equals (\"ENABLED\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tdo {\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.Eoln)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tvar feature = (string) token.Value;\n\t\t\t\t\tif (feature.Equals (\"UTF8=ACCEPT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tUTF8Enabled = true;\n\t\t\t\t\telse if (feature.Equals (\"QRESYNC\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tQResyncEnabled = true;\n\t\t\t\t} while (true);\n\t\t\t} else if (atom.Equals (\"FLAGS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tvar keywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\t\tvar flags = ImapUtils.ParseFlagsList (this, atom, keywords, cancellationToken);\n\t\t\t\tfolder?.UpdateAcceptedFlags (flags, keywords);\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Eoln, GenericUntaggedResponseSyntaxErrorFormat, atom, token);\n\t\t\t} else if (atom.Equals (\"NAMESPACE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tUpdateNamespaces (cancellationToken);\n\t\t\t} else if (atom.Equals (\"STATUS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tUpdateStatus (cancellationToken);\n\t\t\t} else if (IsOkNoOrBad (atom, out var result)) {\n\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\tvar code = ParseResponseCode (false, cancellationToken);\n\t\t\t\t\tic.RespCodes.Add (code);\n\t\t\t\t} else if (token.Type != ImapTokenType.Eoln) {\n\t\t\t\t\tvar text = ReadLine (cancellationToken).TrimEnd ();\n\t\t\t\t\tic.ResponseText = token.Value.ToString () + text;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uint.TryParse (atom, NumberStyles.None, CultureInfo.InvariantCulture, out uint number)) {\n\t\t\t\t\t// we probably have something like \"* 1 EXISTS\"\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, \"Syntax error in untagged response. {0}\", token);\n\n\t\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\t\tif (ic.UntaggedHandlers.TryGetValue (atom, out handler)) {\n\t\t\t\t\t\t// the command registered an untagged handler for this atom...\n\t\t\t\t\t\thandler (this, ic, (int) number - 1, false).GetAwaiter ().GetResult ();\n\t\t\t\t\t} else if (folder != null) {\n\t\t\t\t\t\tif (atom.Equals (\"EXISTS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tfolder.OnExists ((int) number);\n\t\t\t\t\t\t} else if (atom.Equals (\"EXPUNGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tif (number == 0)\n\t\t\t\t\t\t\t\tthrow UnexpectedToken (\"Syntax error in untagged EXPUNGE response. Unexpected message index: 0\");\n\n\t\t\t\t\t\t\tfolder.OnExpunge ((int) number - 1);\n\t\t\t\t\t\t} else if (atom.Equals (\"FETCH\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\t// Apparently Courier-IMAP (2004) will reply with \"* 0 FETCH ...\" sometimes.\n\t\t\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/428 for details.\n\t\t\t\t\t\t\t//if (number == 0)\n\t\t\t\t\t\t\t//\tthrow UnexpectedToken (\"Syntax error in untagged FETCH response. Unexpected message index: 0\");\n\n\t\t\t\t\t\t\tfolder.OnUntaggedFetchResponse (this, (int) number - 1, cancellationToken);\n\t\t\t\t\t\t} else if (atom.Equals (\"RECENT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tfolder.OnRecent ((int) number);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//Debug.WriteLine (\"Unhandled untagged response: * {0} {1}\", number, atom);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//Debug.WriteLine (\"Unhandled untagged response: * {0} {1}\", number, atom);\n\t\t\t\t\t}\n\n\t\t\t\t\tSkipLine (cancellationToken);\n\t\t\t\t} else if (ic.UntaggedHandlers.TryGetValue (atom, out handler)) {\n\t\t\t\t\t// the command registered an untagged handler for this atom...\n\t\t\t\t\thandler (this, ic, -1, false).GetAwaiter ().GetResult ();\n\t\t\t\t\tSkipLine (cancellationToken);\n\t\t\t\t} else if (atom.Equals (\"LIST\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// unsolicited LIST response - probably due to NOTIFY MailboxName or MailboxSubscribe event\n\t\t\t\t\tImapUtils.ParseFolderList (this, null, false, true, cancellationToken);\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\t\tAssertToken (token, ImapTokenType.Eoln, \"Syntax error in untagged LIST response. {0}\", token);\n\t\t\t\t} else if (atom.Equals (\"METADATA\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// unsolicited METADATA response - probably due to NOTIFY MailboxMetadataChange or ServerMetadataChange\n\t\t\t\t\tvar metadata = new MetadataCollection ();\n\t\t\t\t\tImapUtils.ParseMetadata (this, metadata, cancellationToken);\n\t\t\t\t\tProcessMetadataChanges (metadata);\n\n\t\t\t\t\ttoken = ReadToken (cancellationToken);\n\t\t\t\t\tAssertToken (token, ImapTokenType.Eoln, \"Syntax error in untagged LIST response. {0}\", token);\n\t\t\t\t} else if (atom.Equals (\"VANISHED\", StringComparison.OrdinalIgnoreCase) && folder != null) {\n\t\t\t\t\tfolder.OnVanished (this, cancellationToken);\n\t\t\t\t\tSkipLine (cancellationToken);\n\t\t\t\t} else {\n\t\t\t\t\t// don't know how to handle this... eat it?\n\t\t\t\t\tSkipLine (cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Processes an untagged response.\n\t\t/// </summary>\n\t\t/// <returns>The untagged response.</returns>\n\t\t/// <param name=\"ic\">The IMAP command that is currently being processed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tinternal async Task ProcessUntaggedResponseAsync (ImapCommand ic, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tvar folder = ic.Folder ?? Selected;\n\t\t\tImapUntaggedHandler? handler;\n\t\t\tstring atom;\n\n\t\t\t// Note: work around broken IMAP servers such as home.pl which sends \"* [COPYUID ...]\" resp-codes\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/115#issuecomment-313684616 for details.\n\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t// unget the '[' token and then pretend that we got an \"OK\"\n\t\t\t\tUngetToken (token);\n\t\t\t\tatom = \"OK\";\n\t\t\t} else if (token.Type != ImapTokenType.Atom) {\n\t\t\t\t// if we get anything else here, just ignore it?\n\t\t\t\tUngetToken (token);\n\t\t\t\tawait SkipLineAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tatom = (string) token.Value;\n\t\t\t}\n\n\t\t\tif (atom.Equals (\"BYE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\tvar code = await ParseResponseCodeAsync (false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tic.RespCodes.Add (code);\n\t\t\t\t} else {\n\t\t\t\t\tvar text = (await ReadLineAsync (cancellationToken).ConfigureAwait (false)).TrimEnd ();\n\t\t\t\t\tic.ResponseText = token.Value.ToString () + text;\n\t\t\t\t}\n\n\t\t\t\tic.Bye = true;\n\n\t\t\t\t// Note: Yandex IMAP is broken and will continue sending untagged BYE responses until the client closes\n\t\t\t\t// the connection. In order to avoid this scenario, consider this command complete as soon as we receive\n\t\t\t\t// the very first untagged BYE response and do not hold out hoping for a tagged response following the\n\t\t\t\t// untagged BYE.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/938 for details.\n\t\t\t\tif (QuirksMode == ImapQuirksMode.Yandex && !ic.Logout)\n\t\t\t\t\tic.Status = ImapCommandStatus.Complete;\n\t\t\t} else if (atom.Equals (\"CAPABILITY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tawait UpdateCapabilitiesAsync (ImapTokenType.Eoln, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// read the eoln token\n\t\t\t\tawait ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t} else if (atom.Equals (\"ENABLED\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.Eoln)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, GenericUntaggedResponseSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tvar feature = (string) token.Value;\n\t\t\t\t\tif (feature.Equals (\"UTF8=ACCEPT\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tUTF8Enabled = true;\n\t\t\t\t\telse if (feature.Equals (\"QRESYNC\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tQResyncEnabled = true;\n\t\t\t\t} while (true);\n\t\t\t} else if (atom.Equals (\"FLAGS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tvar keywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\t\tvar flags = await ImapUtils.ParseFlagsListAsync (this, atom, keywords, cancellationToken).ConfigureAwait (false);\n\t\t\t\tfolder?.UpdateAcceptedFlags (flags, keywords);\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAssertToken (token, ImapTokenType.Eoln, GenericUntaggedResponseSyntaxErrorFormat, atom, token);\n\t\t\t} else if (atom.Equals (\"NAMESPACE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tawait UpdateNamespacesAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t} else if (atom.Equals (\"STATUS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tawait UpdateStatusAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t} else if (IsOkNoOrBad (atom, out var result)) {\n\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\tvar code = await ParseResponseCodeAsync (false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tic.RespCodes.Add (code);\n\t\t\t\t} else if (token.Type != ImapTokenType.Eoln) {\n\t\t\t\t\tvar text = (await ReadLineAsync (cancellationToken).ConfigureAwait (false)).TrimEnd ();\n\t\t\t\t\tic.ResponseText = token.Value.ToString () + text;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uint.TryParse (atom, NumberStyles.None, CultureInfo.InvariantCulture, out uint number)) {\n\t\t\t\t\t// we probably have something like \"* 1 EXISTS\"\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tAssertToken (token, ImapTokenType.Atom, \"Syntax error in untagged response. {0}\", token);\n\n\t\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\t\tif (ic.UntaggedHandlers.TryGetValue (atom, out handler)) {\n\t\t\t\t\t\t// the command registered an untagged handler for this atom...\n\t\t\t\t\t\tawait handler (this, ic, (int) number - 1, doAsync: true).ConfigureAwait (false);\n\t\t\t\t\t} else if (folder != null) {\n\t\t\t\t\t\tif (atom.Equals (\"EXISTS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tfolder.OnExists ((int) number);\n\t\t\t\t\t\t} else if (atom.Equals (\"EXPUNGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tif (number == 0)\n\t\t\t\t\t\t\t\tthrow UnexpectedToken (\"Syntax error in untagged EXPUNGE response. Unexpected message index: 0\");\n\n\t\t\t\t\t\t\tfolder.OnExpunge ((int) number - 1);\n\t\t\t\t\t\t} else if (atom.Equals (\"FETCH\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\t// Apparently Courier-IMAP (2004) will reply with \"* 0 FETCH ...\" sometimes.\n\t\t\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/428 for details.\n\t\t\t\t\t\t\t//if (number == 0)\n\t\t\t\t\t\t\t//\tthrow UnexpectedToken (\"Syntax error in untagged FETCH response. Unexpected message index: 0\");\n\n\t\t\t\t\t\t\tawait folder.OnUntaggedFetchResponseAsync (this, (int) number - 1, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t} else if (atom.Equals (\"RECENT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tfolder.OnRecent ((int) number);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//Debug.WriteLine (\"Unhandled untagged response: * {0} {1}\", number, atom);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//Debug.WriteLine (\"Unhandled untagged response: * {0} {1}\", number, atom);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait SkipLineAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (ic.UntaggedHandlers.TryGetValue (atom, out handler)) {\n\t\t\t\t\t// the command registered an untagged handler for this atom...\n\t\t\t\t\tawait handler (this, ic, -1, doAsync: true).ConfigureAwait (false);\n\t\t\t\t\tawait SkipLineAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (atom.Equals (\"LIST\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// unsolicited LIST response - probably due to NOTIFY MailboxName or MailboxSubscribe event\n\t\t\t\t\tawait ImapUtils.ParseFolderListAsync (this, null, false, true, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tAssertToken (token, ImapTokenType.Eoln, \"Syntax error in untagged LIST response. {0}\", token);\n\t\t\t\t} else if (atom.Equals (\"METADATA\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// unsolicited METADATA response - probably due to NOTIFY MailboxMetadataChange or ServerMetadataChange\n\t\t\t\t\tvar metadata = new MetadataCollection ();\n\t\t\t\t\tawait ImapUtils.ParseMetadataAsync (this, metadata, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tProcessMetadataChanges (metadata);\n\n\t\t\t\t\ttoken = await ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tAssertToken (token, ImapTokenType.Eoln, \"Syntax error in untagged LIST response. {0}\", token);\n\t\t\t\t} else if (atom.Equals (\"VANISHED\", StringComparison.OrdinalIgnoreCase) && folder != null) {\n\t\t\t\t\tawait folder.OnVanishedAsync (this, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tawait SkipLineAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t} else {\n\t\t\t\t\t// don't know how to handle this... eat it?\n\t\t\t\t\tawait SkipLineAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[MemberNotNull (nameof (current))]\n\t\tvoid PopNextCommand ()\n\t\t{\n\t\t\tlock (queue) {\n\t\t\t\tif (queue.Count == 0)\n\t\t\t\t\tthrow new InvalidOperationException (\"The IMAP command queue is empty.\");\n\n\t\t\t\tif (IsBusy)\n\t\t\t\t\tthrow new InvalidOperationException (\"The ImapClient is currently busy processing a command in another thread. Lock the SyncRoot property to properly synchronize your threads.\");\n\n\t\t\t\tcurrent = queue[0];\n\t\t\t\tqueue.RemoveAt (0);\n\n\t\t\t\ttry {\n\t\t\t\t\tcurrent.CancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\t} catch {\n\t\t\t\t\tqueue.RemoveAll (x => x.CancellationToken.IsCancellationRequested);\n\t\t\t\t\tcurrent = null;\n\t\t\t\t\tthrow;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an IMAP protocol exception by disconnecting and then potentially throwing a replacement exception.\n\t\t/// </summary>\n\t\t/// <param name=\"ic\">The current <see cref=\"ImapCommand\"/> being processed.</param>\n\t\t/// <param name=\"ex\">THe <see cref=\"ImapProtocolException\"/> that was thrown.</param>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// An ALERT or some resp-text was found that would enhance the exception message\n\t\t/// of the <paramref name=\"ex\"/> provided.\n\t\t/// </exception>\n\t\tvoid OnImapProtocolException (ImapCommand ic, ImapProtocolException ex)\n\t\t{\n\t\t\tDisconnect (ex);\n\n\t\t\tif (ic.Bye) {\n\t\t\t\tif (ic.RespCodes.Count > 0) {\n\t\t\t\t\tvar code = ic.RespCodes[ic.RespCodes.Count - 1];\n\n\t\t\t\t\tif (code.Type == ImapResponseCodeType.Alert) {\n\t\t\t\t\t\tOnAlert (code.Message);\n\n\t\t\t\t\t\tthrow new ImapProtocolException (code.Message, ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!string.IsNullOrEmpty (ic.ResponseText))\n\t\t\t\t\tthrow new ImapProtocolException (ic.ResponseText!, ex);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Iterate the command pipeline.\n\t\t/// </summary>\n\t\tvoid Iterate ()\n\t\t{\n\t\t\tPopNextCommand ();\n\n\t\t\tcurrent.Status = ImapCommandStatus.Active;\n\n\t\t\ttry {\n\t\t\t\twhile (current.Step ()) {\n\t\t\t\t\t// more literal data to send...\n\t\t\t\t}\n\n\t\t\t\tif (current.Bye && !current.Logout)\n\t\t\t\t\tthrow new ImapProtocolException (\"Bye.\");\n\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\tOnImapProtocolException (current, ex);\n\t\t\t\tthrow;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tDisconnect (ex);\n\t\t\t\tthrow;\n\t\t\t} finally {\n\t\t\t\tcurrent = null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously iterate the command pipeline.\n\t\t/// </summary>\n\t\tasync Task IterateAsync ()\n\t\t{\n\t\t\tPopNextCommand ();\n\n\t\t\tcurrent.Status = ImapCommandStatus.Active;\n\n\t\t\ttry {\n\t\t\t\twhile (await current.StepAsync ().ConfigureAwait (false)) {\n\t\t\t\t\t// more literal data to send...\n\t\t\t\t}\n\n\t\t\t\tif (current.Bye && !current.Logout)\n\t\t\t\t\tthrow new ImapProtocolException (\"Bye.\");\n\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\tOnImapProtocolException (current, ex);\n\t\t\t\tthrow;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tDisconnect (ex);\n\t\t\t\tthrow;\n\t\t\t} finally {\n\t\t\t\tcurrent = null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Wait for the specified command to finish.\n\t\t/// </summary>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"ic\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic ImapCommandResponse Run (ImapCommand ic)\n\t\t{\n\t\t\tif (ic == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (ic));\n\n\t\t\twhile (ic.Status < ImapCommandStatus.Complete) {\n\t\t\t\t// continue processing commands...\n\t\t\t\tIterate ();\n\t\t\t}\n\n\t\t\tProcessResponseCodes (ic);\n\n\t\t\treturn ic.Response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Wait for the specified command to finish.\n\t\t/// </summary>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"ic\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic async Task<ImapCommandResponse> RunAsync (ImapCommand ic)\n\t\t{\n\t\t\tif (ic == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (ic));\n\n\t\t\twhile (ic.Status < ImapCommandStatus.Complete) {\n\t\t\t\t// continue processing commands...\n\t\t\t\tawait IterateAsync ().ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tProcessResponseCodes (ic);\n\n\t\t\treturn ic.Response;\n\t\t}\n\n\t\tpublic IEnumerable<ImapCommand> CreateCommands (CancellationToken cancellationToken, ImapFolder folder, string format, IList<UniqueId> uids, params object[] args)\n\t\t{\n\t\t\tvar vargs = new List<object> ();\n\t\t\tint maxLength;\n\n\t\t\t// we assume that uids is the first formatter (with a %s)\n\t\t\tvargs.Add (\"1\");\n\n\t\t\tfor (int i = 0; i < args.Length; i++)\n\t\t\t\tvargs.Add (args[i]);\n\n\t\t\targs = vargs.ToArray ();\n\n\t\t\tif (QuirksMode == ImapQuirksMode.Courier) {\n\t\t\t\t// Courier IMAP's command parser allows each token to be up to 16k in size.\n\t\t\t\tmaxLength = 16 * 1024;\n\t\t\t} else {\n\t\t\t\tint estimated = ImapCommand.EstimateCommandLength (this, format, args);\n\n\t\t\t\tswitch (QuirksMode) {\n\t\t\t\tcase ImapQuirksMode.Dovecot:\n\t\t\t\t\t// Dovecot, by default, allows commands up to 64k.\n\t\t\t\t\t// See https://github.com/dovecot/core/blob/master/src/imap/imap-settings.c#L94\n\t\t\t\t\tmaxLength = Math.Max ((64 * 1042) - estimated, 24);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapQuirksMode.GMail:\n\t\t\t\t\t// GMail seems to support command-lines up to at least 16k.\n\t\t\t\t\tmaxLength = Math.Max ((16 * 1042) - estimated, 24);\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapQuirksMode.Yahoo:\n\t\t\t\tcase ImapQuirksMode.UW:\n\t\t\t\t\t// Follow the IMAP4 Implementation Recommendations which states that clients\n\t\t\t\t\t// *SHOULD* limit their command lengths to 1000 octets.\n\t\t\t\t\tmaxLength = Math.Max (1000 - estimated, 24);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// Push the boundaries of the IMAP4 Implementation Recommendations which states\n\t\t\t\t\t// that servers *SHOULD* accept command lengths of up to 8000 octets.\n\t\t\t\t\tmaxLength = Math.Max (8000 - estimated, 24);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tforeach (var subset in UniqueIdSet.EnumerateSerializedSubsets (uids, maxLength)) {\n\t\t\t\targs[0] = subset;\n\n\t\t\t\tyield return new ImapCommand (this, cancellationToken, folder, format, args);\n\t\t\t}\n\t\t}\n\n\t\tpublic IEnumerable<ImapCommand> QueueCommands (CancellationToken cancellationToken, ImapFolder folder, string format, IList<UniqueId> uids, params object[] args)\n\t\t{\n\t\t\tforeach (var ic in CreateCommands (cancellationToken, folder, format, uids, args)) {\n\t\t\t\tQueueCommand (ic);\n\t\t\t\tyield return ic;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queues the command.\n\t\t/// </summary>\n\t\t/// <returns>The command.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"folder\">The folder that the command operates on.</param>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"format\">The command format.</param>\n\t\t/// <param name=\"args\">The command arguments.</param>\n\t\tpublic ImapCommand QueueCommand (CancellationToken cancellationToken, ImapFolder? folder, FormatOptions options, string format, params object[] args)\n\t\t{\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, folder, options, format, args);\n\t\t\tQueueCommand (ic);\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queues the command.\n\t\t/// </summary>\n\t\t/// <returns>The command.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"folder\">The folder that the command operates on.</param>\n\t\t/// <param name=\"format\">The command format.</param>\n\t\t/// <param name=\"args\">The command arguments.</param>\n\t\tpublic ImapCommand QueueCommand (CancellationToken cancellationToken, ImapFolder? folder, string format, params object[] args)\n\t\t{\n\t\t\treturn QueueCommand (cancellationToken, folder, FormatOptions.Default, format, args);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queues the command.\n\t\t/// </summary>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\tpublic void QueueCommand (ImapCommand ic)\n\t\t{\n\t\t\tlock (queue) {\n\t\t\t\tic.Status = ImapCommandStatus.Queued;\n\t\t\t\tqueue.Add (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queries the capabilities.\n\t\t/// </summary>\n\t\t/// <returns>The command result.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic ImapCommandResponse QueryCapabilities (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueCommand (cancellationToken, null, \"CAPABILITY\\r\\n\");\n\n\t\t\treturn Run (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queries the capabilities.\n\t\t/// </summary>\n\t\t/// <returns>The command result.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic Task<ImapCommandResponse> QueryCapabilitiesAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueCommand (cancellationToken, null, \"CAPABILITY\\r\\n\");\n\n\t\t\treturn RunAsync (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Cache the specified folder.\n\t\t/// </summary>\n\t\t/// <param name=\"folder\">The folder.</param>\n\t\tpublic void CacheFolder (ImapFolder folder)\n\t\t{\n\t\t\tif ((folder.Attributes & FolderAttributes.Inbox) != 0)\n\t\t\t\tcacheComparer.DirectorySeparator = folder.DirectorySeparator;\n\n\t\t\tFolderCache.Add (folder.EncodedName, folder);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the cached folder.\n\t\t/// </summary>\n\t\t/// <returns><see langword=\"true\" /> if the folder was retrieved from the cache; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"encodedName\">The encoded folder name.</param>\n\t\t/// <param name=\"folder\">The cached folder.</param>\n\t\tpublic bool TryGetCachedFolder (string encodedName, [NotNullWhen (true)] out ImapFolder? folder)\n\t\t{\n\t\t\treturn FolderCache.TryGetValue (encodedName, out folder);\n\t\t}\n\n\t\tbool RequiresParentLookup (ImapFolder folder, [NotNullWhen (true)] out string? encodedParentName)\n\t\t{\n\t\t\tencodedParentName = null;\n\n\t\t\tif (folder.ParentFolder != null)\n\t\t\t\treturn false;\n\n\t\t\tint index;\n\n\t\t\t// FIXME: should this search EncodedName instead of FullName?\n\t\t\tif ((index = folder.FullName.LastIndexOf (folder.DirectorySeparator)) != -1) {\n\t\t\t\tif (index == 0)\n\t\t\t\t\treturn false;\n\n\t\t\t\tvar parentName = folder.FullName.Substring (0, index);\n\t\t\t\tencodedParentName = EncodeMailboxName (parentName);\n\t\t\t} else {\n\t\t\t\tencodedParentName = string.Empty;\n\t\t\t}\n\n\t\t\tif (TryGetCachedFolder (encodedParentName, out var parent)) {\n\t\t\t\tfolder.ParentFolder = parent;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tImapCommand QueueLookupParentFolderCommand (string encodedName, CancellationToken cancellationToken)\n\t\t{\n\t\t\t// Note: folder names can contain wildcards (including '*' and '%'), so replace '*' with '%'\n\t\t\t// in order to reduce the list of folders returned by our LIST command.\n\t\t\tvar pattern = encodedName.Replace ('*', '%');\n\t\t\tvar command = new StringBuilder (\"LIST \\\"\\\" %S\");\n\t\t\tvar returnsSubscribed = false;\n\n\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t// Try to get the \\Subscribed and \\HasChildren or \\HasNoChildren attributes\n\t\t\t\tcommand.Append (\" RETURN (SUBSCRIBED CHILDREN)\");\n\t\t\t\treturnsSubscribed = true;\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, command.ToString (), pattern);\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.ListReturnsSubscribed = returnsSubscribed;\n\t\t\tic.UserData = new List<ImapFolder> ();\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessLookupParentFolderResponse (ImapCommand ic, List<ImapFolder> list, ImapFolder folder, string encodedParentName)\n\t\t{\n\t\t\tif (!TryGetCachedFolder (encodedParentName, out var parent)) {\n\t\t\t\tparent = CreateImapFolder (encodedParentName, FolderAttributes.NonExistent, folder.DirectorySeparator);\n\t\t\t\tCacheFolder (parent);\n\t\t\t} else if (parent.ParentFolder == null && !parent.IsNamespace) {\n\t\t\t\tlist.Add (parent);\n\t\t\t}\n\n\t\t\tfolder.ParentFolder = parent;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Looks up and sets the <see cref=\"MailFolder.ParentFolder\"/> property of each of the folders.\n\t\t/// </summary>\n\t\t/// <param name=\"folders\">The IMAP folders.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tinternal void LookupParentFolders (IEnumerable<ImapFolder> folders, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar list = new List<ImapFolder> (folders);\n\n\t\t\t// Note: we use a for-loop instead of foreach because we conditionally add items to the list.\n\t\t\tfor (int i = 0; i < list.Count; i++) {\n\t\t\t\tvar folder = list[i];\n\n\t\t\t\tif (!RequiresParentLookup (folder, out var encodedParentName))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar ic = QueueLookupParentFolderCommand (encodedParentName, cancellationToken);\n\n\t\t\t\tRun (ic);\n\n\t\t\t\tProcessLookupParentFolderResponse (ic, list, folder, encodedParentName);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Looks up and sets the <see cref=\"MailFolder.ParentFolder\"/> property of each of the folders.\n\t\t/// </summary>\n\t\t/// <param name=\"folders\">The IMAP folders.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tinternal async Task LookupParentFoldersAsync (IEnumerable<ImapFolder> folders, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar list = new List<ImapFolder> (folders);\n\n\t\t\t// Note: we use a for-loop instead of foreach because we conditionally add items to the list.\n\t\t\tfor (int i = 0; i < list.Count; i++) {\n\t\t\t\tvar folder = list[i];\n\n\t\t\t\tif (!RequiresParentLookup (folder, out var encodedParentName))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar ic = QueueLookupParentFolderCommand (encodedParentName, cancellationToken);\n\n\t\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessLookupParentFolderResponse (ic, list, folder, encodedParentName);\n\t\t\t}\n\t\t}\n\n\t\tvoid ProcessNamespaceResponse (ImapCommand ic)\n\t\t{\n\t\t\tif (QuirksMode == ImapQuirksMode.Exchange && ic.Response == ImapCommandResponse.Bad) {\n\t\t\t\tState = ImapEngineState.Connected; // Reset back to Connected-but-not-Authenticated state\n\t\t\t\tthrow ImapCommandException.Create (\"NAMESPACE\", ic);\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueListNamespaceCommand (List<ImapFolder> list, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, \"LIST \\\"\\\" \\\"\\\"\\r\\n\");\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.UserData = list;\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessListNamespaceResponse (ImapCommand ic, List<ImapFolder> list)\n\t\t{\n\t\t\tPersonalNamespaces.Clear ();\n\t\t\tSharedNamespaces.Clear ();\n\t\t\tOtherNamespaces.Clear ();\n\n\t\t\tif (list.Count > 0) {\n\t\t\t\tvar empty = list.FirstOrDefault (x => x.EncodedName.Length == 0);\n\n\t\t\t\tif (empty == null) {\n\t\t\t\t\tempty = CreateImapFolder (string.Empty, FolderAttributes.None, list[0].DirectorySeparator);\n\t\t\t\t\tCacheFolder (empty);\n\t\t\t\t}\n\n\t\t\t\tPersonalNamespaces.Add (new FolderNamespace (empty.DirectorySeparator, empty.FullName));\n\t\t\t\tempty.UpdateIsNamespace (true);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queries the namespaces.\n\t\t/// </summary>\n\t\t/// <returns>The command result.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic ImapCommandResponse QueryNamespaces (CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapCommand ic;\n\n\t\t\t// Note: It seems that on Exchange 2003 (maybe Chinese-only version?), the NAMESPACE command causes the server\n\t\t\t// to immediately drop the connection. Avoid this issue by not using the NAMESPACE command if we detect that\n\t\t\t// the server is Microsoft Exchange 2003. See https://github.com/jstedfast/MailKit/issues/1512 for details.\n\t\t\tif (QuirksMode != ImapQuirksMode.Exchange2003 && (Capabilities & ImapCapabilities.Namespace) != 0) {\n\t\t\t\tic = QueueCommand (cancellationToken, null, \"NAMESPACE\\r\\n\");\n\n\t\t\t\tRun (ic);\n\n\t\t\t\tProcessNamespaceResponse (ic);\n\t\t\t} else {\n\t\t\t\tvar list = new List<ImapFolder> ();\n\n\t\t\t\tic = QueueListNamespaceCommand (list, cancellationToken);\n\n\t\t\t\tRun (ic);\n\n\t\t\t\tProcessListNamespaceResponse (ic, list);\n\n\t\t\t\tLookupParentFolders (list, cancellationToken);\n\t\t\t}\n\n\t\t\treturn ic.Response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously queries the namespaces.\n\t\t/// </summary>\n\t\t/// <returns>The command result.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async Task<ImapCommandResponse> QueryNamespacesAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapCommand ic;\n\n\t\t\t// Note: It seems that on Exchange 2003 (maybe Chinese-only version?), the NAMESPACE command causes the server\n\t\t\t// to immediately drop the connection. Avoid this issue by not using the NAMESPACE command if we detect that\n\t\t\t// the server is Microsoft Exchange 2003. See https://github.com/jstedfast/MailKit/issues/1512 for details.\n\t\t\tif (QuirksMode != ImapQuirksMode.Exchange2003 && (Capabilities & ImapCapabilities.Namespace) != 0) {\n\t\t\t\tic = QueueCommand (cancellationToken, null, \"NAMESPACE\\r\\n\");\n\n\t\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessNamespaceResponse (ic);\n\t\t\t} else {\n\t\t\t\tvar list = new List<ImapFolder> ();\n\n\t\t\t\tic = QueueListNamespaceCommand (list, cancellationToken);\n\n\t\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessListNamespaceResponse (ic, list);\n\n\t\t\t\tawait LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\treturn ic.Response;\n\t\t}\n\n\t\tinternal static ImapFolder? GetFolder (List<ImapFolder> folders, string encodedName)\n\t\t{\n\t\t\tfor (int i = 0; i < folders.Count; i++) {\n\t\t\t\tif (encodedName.Equals (folders[i].EncodedName, StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\treturn folders[i];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Assigns a folder as a special folder.\n\t\t/// </summary>\n\t\t/// <param name=\"folder\">The special folder.</param>\n\t\tpublic void AssignSpecialFolder (ImapFolder folder)\n\t\t{\n\t\t\tif ((folder.Attributes & FolderAttributes.All) != 0)\n\t\t\t\tAll = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Archive) != 0)\n\t\t\t\tArchive = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Drafts) != 0)\n\t\t\t\tDrafts = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Flagged) != 0)\n\t\t\t\tFlagged = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Important) != 0)\n\t\t\t\tImportant = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Junk) != 0)\n\t\t\t\tJunk = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Sent) != 0)\n\t\t\t\tSent = folder;\n\t\t\tif ((folder.Attributes & FolderAttributes.Trash) != 0)\n\t\t\t\tTrash = folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Assigns the special folders.\n\t\t/// </summary>\n\t\t/// <param name=\"list\">The list of folders.</param>\n\t\tpublic void AssignSpecialFolders (IList<ImapFolder> list)\n\t\t{\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t\tAssignSpecialFolder (list[i]);\n\t\t}\n\n\t\tImapCommand QueueListInboxCommand (CancellationToken cancellationToken, out StringBuilder command, out List<ImapFolder> list)\n\t\t{\n\t\t\tbool returnsSubscribed = false;\n\n\t\t\tcommand = new StringBuilder (\"LIST \\\"\\\" \\\"INBOX\\\"\");\n\t\t\tlist = new List<ImapFolder> ();\n\n\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\tcommand.Append (\" RETURN (SUBSCRIBED CHILDREN)\");\n\t\t\t\treturnsSubscribed = true;\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, command.ToString ());\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.ListReturnsSubscribed = returnsSubscribed;\n\t\t\tic.UserData = list;\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessListInboxResponse (ImapCommand ic, StringBuilder command, List<ImapFolder> list)\n\t\t{\n\t\t\tTryGetCachedFolder (\"INBOX\", out var folder);\n\t\t\tInbox = folder;\n\n\t\t\tcommand.Clear ();\n\t\t\tlist.Clear ();\n\t\t}\n\n\t\tImapCommand QueueListSpecialUseCommand (StringBuilder command, List<ImapFolder> list, CancellationToken cancellationToken)\n\t\t{\n\t\t\tbool returnsSubscribed = false;\n\n\t\t\tcommand.Append (\"LIST \");\n\n\t\t\t// Note: Some IMAP servers like ProtonMail respond to SPECIAL-USE LIST queries with BAD, so fall\n\t\t\t// back to just issuing a standard LIST command and hope we get back some SPECIAL-USE attributes.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/674 for details.\n\t\t\tif (QuirksMode != ImapQuirksMode.ProtonMail)\n\t\t\t\tcommand.Append (\"(SPECIAL-USE) \\\"\\\" \\\"*\\\"\");\n\t\t\telse\n\t\t\t\tcommand.Append (\"\\\"\\\" \\\"%%\\\"\");\n\n\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\tcommand.Append (\" RETURN (SUBSCRIBED CHILDREN)\");\n\t\t\t\treturnsSubscribed = true;\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, command.ToString ());\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.ListReturnsSubscribed = returnsSubscribed;\n\t\t\tic.UserData = list;\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tImapCommand QueueXListCommand (List<ImapFolder> list, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, \"XLIST \\\"\\\" \\\"*\\\"\\r\\n\");\n\t\t\tic.RegisterUntaggedHandler (\"XLIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.UserData = list;\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queries the special folders.\n\t\t/// </summary>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic void QuerySpecialFolders (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueListInboxCommand (cancellationToken, out var command, out var list);\n\n\t\t\tRun (ic);\n\n\t\t\tProcessListInboxResponse (ic, command, list);\n\n\t\t\tif (Inbox == null) {\n\t\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\t// Note: This is a work-around for IMAP servers such as imap.strato.de which do not return a list of folders\n\t\t\t\t\t// for the `LIST \"\" \"INBOX\" RETURN (SUBSCRIBED CHILDREN)` command. Disable the LIST-EXTENDED (and dependent)\n\t\t\t\t\t// capabilities since they are clearly broken.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1957 for details.\n\t\t\t\t\tCapabilities &= ~(ImapCapabilities.ListExtended | ImapCapabilities.ListStatus | ImapCapabilities.SpecialUse);\n\n\t\t\t\t\t// Send a vanilla `LIST \"\" \"INBOX\"` command to get the INBOX folder.\n\t\t\t\t\tic = QueueListInboxCommand (cancellationToken, out command, out list);\n\n\t\t\t\t\tRun (ic);\n\n\t\t\t\t\tProcessListInboxResponse (ic, command, list);\n\t\t\t\t}\n\n\t\t\t\tif (Inbox == null) {\n\t\t\t\t\t// If we still don't have the INBOX folder, just create a placeholder for it.\n\t\t\t\t\tchar delim = PersonalNamespaces.Count > 0 ? PersonalNamespaces[0].DirectorySeparator : '/';\n\t\t\t\t\tvar inbox = CreateImapFolder (\"INBOX\", FolderAttributes.Inbox, delim);\n\t\t\t\t\tCacheFolder (inbox);\n\t\t\t\t\tInbox = inbox;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((Capabilities & ImapCapabilities.SpecialUse) != 0) {\n\t\t\t\tic = QueueListSpecialUseCommand (command, list, cancellationToken);\n\n\t\t\t\tRun (ic);\n\n\t\t\t\t// Note: We specifically don't throw if we get a LIST error.\n\t\t\t} else if ((Capabilities & ImapCapabilities.XList) != 0) {\n\t\t\t\tic = QueueXListCommand (list, cancellationToken);\n\n\t\t\t\tRun (ic);\n\n\t\t\t\t// Note: We specifically don't throw if we get a XLIST error.\n\t\t\t}\n\n\t\t\tLookupParentFolders (list, cancellationToken);\n\n\t\t\tAssignSpecialFolders (list);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queries the special folders.\n\t\t/// </summary>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async Task QuerySpecialFoldersAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueListInboxCommand (cancellationToken, out var command, out var list);\n\n\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessListInboxResponse (ic, command, list);\n\n\t\t\tif (Inbox == null) {\n\t\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\t// Note: This is a work-around for IMAP servers such as imap.strato.de which do not return a list of folders\n\t\t\t\t\t// for the `LIST \"\" \"INBOX\" RETURN (SUBSCRIBED CHILDREN)` command. Disable the LIST-EXTENDED (and dependent)\n\t\t\t\t\t// capabilities since they are clearly broken.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1957 for details.\n\t\t\t\t\tCapabilities &= ~(ImapCapabilities.ListExtended | ImapCapabilities.ListStatus | ImapCapabilities.SpecialUse);\n\n\t\t\t\t\t// Send a vanilla `LIST \"\" \"INBOX\"` command to get the INBOX folder.\n\t\t\t\t\tic = QueueListInboxCommand (cancellationToken, out command, out list);\n\n\t\t\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t\tProcessListInboxResponse (ic, command, list);\n\t\t\t\t}\n\n\t\t\t\tif (Inbox == null) {\n\t\t\t\t\t// If we still don't have the INBOX folder, just create a placeholder for it.\n\t\t\t\t\tchar delim = PersonalNamespaces.Count > 0 ? PersonalNamespaces[0].DirectorySeparator : '/';\n\t\t\t\t\tvar inbox = CreateImapFolder (\"INBOX\", FolderAttributes.Inbox, delim);\n\t\t\t\t\tCacheFolder (inbox);\n\t\t\t\t\tInbox = inbox;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((Capabilities & ImapCapabilities.SpecialUse) != 0) {\n\t\t\t\tic = QueueListSpecialUseCommand (command, list, cancellationToken);\n\n\t\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t// Note: We specifically don't throw if we get a LIST error.\n\t\t\t} else if ((Capabilities & ImapCapabilities.XList) != 0) {\n\t\t\t\tic = QueueXListCommand (list, cancellationToken);\n\n\t\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t// Note: We specifically don't throw if we get a LIST error.\n\t\t\t}\n\n\t\t\tawait LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\n\t\t\tAssignSpecialFolders (list);\n\t\t}\n\n\t\tImapFolder ProcessGetQuotaRootResponse (ImapCommand ic, string quotaRoot, out List<ImapFolder> list)\n\t\t{\n\t\t\tImapFolder? folder;\n\n\t\t\tlist = (List<ImapFolder>) ic.UserData!;\n\n\t\t\tic.ThrowIfNotOk (\"LIST\");\n\n\t\t\tif ((folder = GetFolder (list, quotaRoot)) == null) {\n\t\t\t\tfolder = CreateImapFolder (quotaRoot, FolderAttributes.NonExistent, '.');\n\t\t\t\tCacheFolder (folder);\n\t\t\t}\n\n\t\t\treturn folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the folder representing the specified quota root.\n\t\t/// </summary>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"quotaRoot\">The name of the quota root.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic ImapFolder GetQuotaRootFolder (string quotaRoot, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (TryGetCachedFolder (quotaRoot, out var folder))\n\t\t\t\treturn folder;\n\n\t\t\tvar ic = QueueGetFolderCommand (quotaRoot, cancellationToken);\n\n\t\t\tRun (ic);\n\n\t\t\tfolder = ProcessGetQuotaRootResponse (ic, quotaRoot, out var list);\n\n\t\t\tLookupParentFolders (list, cancellationToken);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the folder representing the specified quota root.\n\t\t/// </summary>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"quotaRoot\">The name of the quota root.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async Task<ImapFolder> GetQuotaRootFolderAsync (string quotaRoot, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (TryGetCachedFolder (quotaRoot, out var folder))\n\t\t\t\treturn folder;\n\n\t\t\tvar ic = QueueGetFolderCommand (quotaRoot, cancellationToken);\n\n\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tfolder = ProcessGetQuotaRootResponse (ic, quotaRoot, out var list);\n\n\t\t\tawait LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\tImapCommand QueueGetFolderCommand (string encodedName, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = new StringBuilder (\"LIST \\\"\\\" %S\");\n\t\t\tvar list = new List<ImapFolder> ();\n\t\t\tvar returnsSubscribed = false;\n\n\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\tcommand.Append (\" RETURN (SUBSCRIBED CHILDREN)\");\n\t\t\t\treturnsSubscribed = true;\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, command.ToString (), encodedName);\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.ListReturnsSubscribed = returnsSubscribed;\n\t\t\tic.UserData = list;\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tstatic ImapFolder ProcessGetFolderResponse (ImapCommand ic, string path, string encodedName, out List<ImapFolder> list)\n\t\t{\n\t\t\tImapFolder? folder;\n\n\t\t\tlist = (List<ImapFolder>) ic.UserData!;\n\n\t\t\tic.ThrowIfNotOk (\"LIST\");\n\n\t\t\tif ((folder = GetFolder (list, encodedName)) == null)\n\t\t\t\tthrow new FolderNotFoundException (path);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic ImapFolder GetFolder (string path, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar encodedName = EncodeMailboxName (path);\n\n\t\t\tif (TryGetCachedFolder (encodedName, out var folder))\n\t\t\t\treturn folder;\n\n\t\t\tvar ic = QueueGetFolderCommand (encodedName, cancellationToken);\n\n\t\t\tRun (ic);\n\n\t\t\tfolder = ProcessGetFolderResponse (ic, path, encodedName, out var list);\n\n\t\t\tLookupParentFolders (list, cancellationToken);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the folder for the specified path.\n\t\t/// </summary>\n\t\t/// <returns>The folder.</returns>\n\t\t/// <param name=\"path\">The folder path.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async Task<IMailFolder> GetFolderAsync (string path, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar encodedName = EncodeMailboxName (path);\n\n\t\t\tif (TryGetCachedFolder (encodedName, out var folder))\n\t\t\t\treturn folder;\n\n\t\t\tvar ic = QueueGetFolderCommand (encodedName, cancellationToken);\n\n\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tfolder = ProcessGetFolderResponse (ic, path, encodedName, out var list);\n\n\t\t\tawait LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\tinternal string GetStatusQuery (StatusItems items)\n\t\t{\n\t\t\tvar flags = string.Empty;\n\n\t\t\tif ((items & StatusItems.Count) != 0)\n\t\t\t\tflags += \"MESSAGES \";\n\t\t\tif ((items & StatusItems.Recent) != 0)\n\t\t\t\tflags += \"RECENT \";\n\t\t\tif ((items & StatusItems.UidNext) != 0)\n\t\t\t\tflags += \"UIDNEXT \";\n\t\t\tif ((items & StatusItems.UidValidity) != 0)\n\t\t\t\tflags += \"UIDVALIDITY \";\n\t\t\tif ((items & StatusItems.Unread) != 0)\n\t\t\t\tflags += \"UNSEEN \";\n\n\t\t\tif ((Capabilities & ImapCapabilities.CondStore) != 0) {\n\t\t\t\tif ((items & StatusItems.HighestModSeq) != 0)\n\t\t\t\t\tflags += \"HIGHESTMODSEQ \";\n\t\t\t}\n\n\t\t\t// Note: If the IMAP server specifies a limit in the CAPABILITY response, then\n\t\t\t// it seems we cannot expect to be able to query this in a STATUS command...\n\t\t\tif ((Capabilities & ImapCapabilities.AppendLimit) != 0 && !AppendLimit.HasValue) {\n\t\t\t\tif ((items & StatusItems.AppendLimit) != 0)\n\t\t\t\t\tflags += \"APPENDLIMIT \";\n\t\t\t}\n\n\t\t\tif ((Capabilities & ImapCapabilities.StatusSize) != 0) {\n\t\t\t\tif ((items & StatusItems.Size) != 0)\n\t\t\t\t\tflags += \"SIZE \";\n\t\t\t}\n\n\t\t\tif ((Capabilities & ImapCapabilities.ObjectID) != 0) {\n\t\t\t\tif ((items & StatusItems.MailboxId) != 0)\n\t\t\t\t\tflags += \"MAILBOXID \";\n\t\t\t}\n\n\t\t\treturn flags.TrimEnd ();\n\t\t}\n\n\t\tImapCommand QueueGetFoldersCommand (FolderNamespace @namespace, StatusItems items, bool subscribedOnly, CancellationToken cancellationToken, out bool status)\n\t\t{\n\t\t\tvar encodedName = EncodeMailboxName (@namespace.Path);\n\t\t\tvar pattern = encodedName.Length > 0 ? encodedName + @namespace.DirectorySeparator : string.Empty;\n\t\t\tvar list = new List<ImapFolder> ();\n\t\t\tvar command = new StringBuilder ();\n\t\t\tvar returnsSubscribed = false;\n\t\t\tvar lsub = subscribedOnly;\n\n\t\t\tstatus = items != StatusItems.None;\n\n\t\t\tif (!TryGetCachedFolder (encodedName, out var folder))\n\t\t\t\tthrow new FolderNotFoundException (@namespace.Path);\n\n\t\t\tif (subscribedOnly) {\n\t\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\tcommand.Append (\"LIST (SUBSCRIBED)\");\n\t\t\t\t\treturnsSubscribed = true;\n\t\t\t\t\tlsub = false;\n\t\t\t\t} else {\n\t\t\t\t\tcommand.Append (\"LSUB\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcommand.Append (\"LIST\");\n\t\t\t}\n\n\t\t\tcommand.Append (\" \\\"\\\" %S\");\n\n\t\t\tif (!lsub) {\n\t\t\t\tif (items != StatusItems.None && (Capabilities & ImapCapabilities.ListStatus) != 0) {\n\t\t\t\t\tcommand.Append (\" RETURN (\");\n\n\t\t\t\t\tif ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\t\tif (!subscribedOnly) {\n\t\t\t\t\t\t\tcommand.Append (\"SUBSCRIBED \");\n\t\t\t\t\t\t\treturnsSubscribed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommand.Append (\"CHILDREN \");\n\t\t\t\t\t}\n\n\t\t\t\t\tcommand.Append (\"STATUS (\");\n\t\t\t\t\tcommand.Append (GetStatusQuery (items));\n\t\t\t\t\tcommand.Append (\"))\");\n\t\t\t\t\tstatus = false;\n\t\t\t\t} else if ((Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\tcommand.Append (\" RETURN (\");\n\t\t\t\t\tif (!subscribedOnly) {\n\t\t\t\t\t\tcommand.Append (\"SUBSCRIBED \");\n\t\t\t\t\t\treturnsSubscribed = true;\n\t\t\t\t\t}\n\t\t\t\t\tcommand.Append (\"CHILDREN\");\n\t\t\t\t\tcommand.Append (')');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (this, cancellationToken, null, command.ToString (), pattern + \"*\");\n\t\t\tic.RegisterUntaggedHandler (lsub ? \"LSUB\" : \"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.ListReturnsSubscribed = returnsSubscribed;\n\t\t\tic.UserData = list;\n\t\t\tic.Lsub = lsub;\n\n\t\t\tQueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tstatic IList<IMailFolder> ToListOfIMailFolder (List<ImapFolder> list)\n\t\t{\n\t\t\tvar folders = new IMailFolder[list.Count];\n\t\t\tfor (int i = 0; i < folders.Length; i++)\n\t\t\t\tfolders[i] = list[i];\n\n\t\t\treturn folders;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The list of folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic IList<IMailFolder> GetFolders (FolderNamespace @namespace, StatusItems items, bool subscribedOnly, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueGetFoldersCommand (@namespace, items, subscribedOnly, cancellationToken, out bool status);\n\t\t\tvar list = (List<ImapFolder>) ic.UserData!;\n\n\t\t\tRun (ic);\n\n\t\t\tic.ThrowIfNotOk (ic.Lsub ? \"LSUB\" : \"LIST\");\n\n\t\t\tLookupParentFolders (list, cancellationToken);\n\n\t\t\tif (status) {\n\t\t\t\tfor (int i = 0; i < list.Count; i++) {\n\t\t\t\t\tif (list[i].Exists)\n\t\t\t\t\t\tlist[i].Status (items, false, cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ToListOfIMailFolder (list);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get all of the folders within the specified namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets all of the folders within the specified namespace.\n\t\t/// </remarks>\n\t\t/// <returns>The list of folders.</returns>\n\t\t/// <param name=\"namespace\">The namespace.</param>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, StatusItems items, bool subscribedOnly, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueGetFoldersCommand (@namespace, items, subscribedOnly, cancellationToken, out bool status);\n\t\t\tvar list = (List<ImapFolder>) ic.UserData!;\n\n\t\t\tawait RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tic.ThrowIfNotOk (ic.Lsub ? \"LSUB\" : \"LIST\");\n\n\t\t\tawait LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (status) {\n\t\t\t\tfor (int i = 0; i < list.Count; i++) {\n\t\t\t\t\tif (list[i].Exists)\n\t\t\t\t\t\tawait list[i].StatusAsync (items, false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ToListOfIMailFolder (list);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Decodes the name of the mailbox.\n\t\t/// </summary>\n\t\t/// <returns>The mailbox name.</returns>\n\t\t/// <param name=\"encodedName\">The encoded name.</param>\n\t\tpublic string DecodeMailboxName (string encodedName)\n\t\t{\n\t\t\treturn UTF8Enabled ? encodedName : ImapEncoding.Decode (encodedName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encodes the name of the mailbox.\n\t\t/// </summary>\n\t\t/// <returns>The mailbox name.</returns>\n\t\t/// <param name=\"mailboxName\">The encoded mailbox name.</param>\n\t\tpublic string EncodeMailboxName (string mailboxName)\n\t\t{\n\t\t\treturn UTF8Enabled ? mailboxName : ImapEncoding.Encode (mailboxName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether the mailbox name is valid or not.\n\t\t/// </summary>\n\t\t/// <returns><see langword=\"true\" /> if the mailbox name is valid; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"mailboxName\">The mailbox name.</param>\n\t\t/// <param name=\"delim\">The path delimiter.</param>\n\t\tpublic static bool IsValidMailboxName (string mailboxName, char delim)\n\t\t{\n\t\t\t// From rfc6855:\n\t\t\t//\n\t\t\t// Mailbox names MUST comply with the Net-Unicode Definition ([RFC5198], Section 2)\n\t\t\t// with the specific exception that they MUST NOT contain control characters\n\t\t\t// (U+0000-U+001F and U+0080-U+009F), a delete character (U+007F), a line separator (U+2028),\n\t\t\t// or a paragraph separator (U+2029).\n\t\t\tfor (int i = 0; i < mailboxName.Length; i++) {\n\t\t\t\tchar c = mailboxName[i];\n\n\t\t\t\tif (c <= 0x1F || (c >= 0x80 && c <= 0x9F) || c == 0x7F || c == 0x2028 || c == 0x2029 || c == delim)\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn mailboxName.Length > 0;\n\t\t}\n\n\t\t[MemberNotNull (nameof (parser))]\n\t\tvoid InitializeParser (Stream stream, bool persistent)\n\t\t{\n\t\t\tif (parser == null)\n\t\t\t\tparser = new MimeParser (ParserOptions.Default, stream, persistent);\n\t\t\telse\n\t\t\t\tparser.SetStream (stream, persistent);\n\t\t}\n\n\t\tpublic HeaderList ParseHeaders (Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitializeParser (stream, false);\n\n\t\t\treturn parser.ParseHeaders (cancellationToken);\n\t\t}\n\n\t\tpublic Task<HeaderList> ParseHeadersAsync (Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitializeParser (stream, false);\n\n\t\t\treturn parser.ParseHeadersAsync (cancellationToken);\n\t\t}\n\n\t\tpublic MimeMessage ParseMessage (Stream stream, bool persistent, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitializeParser (stream, persistent);\n\n\t\t\treturn parser.ParseMessage (cancellationToken);\n\t\t}\n\n\t\tpublic Task<MimeMessage> ParseMessageAsync (Stream stream, bool persistent, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitializeParser (stream, persistent);\n\n\t\t\treturn parser.ParseMessageAsync (cancellationToken);\n\t\t}\n\n\t\tpublic MimeEntity ParseEntity (Stream stream, bool persistent, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitializeParser (stream, persistent);\n\n\t\t\treturn parser.ParseEntity (cancellationToken);\n\t\t}\n\n\t\tpublic Task<MimeEntity> ParseEntityAsync (Stream stream, bool persistent, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitializeParser (stream, persistent);\n\n\t\t\treturn parser.ParseEntityAsync (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the engine receives an alert message from the server.\n\t\t/// </summary>\n\t\tpublic event EventHandler<AlertEventArgs>? Alert;\n\n\t\tinternal void OnAlert (string message)\n\t\t{\n\t\t\tAlert?.Invoke (this, new AlertEventArgs (message));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the engine receives a webalert message from the server.\n\t\t/// </summary>\n\t\tpublic event EventHandler<WebAlertEventArgs>? WebAlert;\n\n\t\tinternal void OnWebAlert (Uri uri, string message)\n\t\t{\n\t\t\tWebAlert?.Invoke (this, new WebAlertEventArgs (uri, message));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the engine receives a notification that a folder has been created.\n\t\t/// </summary>\n\t\tpublic event EventHandler<FolderCreatedEventArgs>? FolderCreated;\n\n\t\tinternal void OnFolderCreated (IMailFolder folder)\n\t\t{\n\t\t\tFolderCreated?.Invoke (this, new FolderCreatedEventArgs (folder));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the engine receives a notification that metadata has changed.\n\t\t/// </summary>\n\t\tpublic event EventHandler<MetadataChangedEventArgs>? MetadataChanged;\n\n\t\tinternal void OnMetadataChanged (Metadata metadata)\n\t\t{\n\t\t\tMetadataChanged?.Invoke (this, new MetadataChangedEventArgs (metadata));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Occurs when the engine receives a notification overflow message from the server.\n\t\t/// </summary>\n\t\tpublic event EventHandler<EventArgs>? NotificationOverflow;\n\n\t\tinternal void OnNotificationOverflow ()\n\t\t{\n\t\t\t// [NOTIFICATIONOVERFLOW] will reset to NOTIFY NONE\n\t\t\tNotifySelectedNewExpunge = false;\n\n\t\t\tNotificationOverflow?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\tpublic event EventHandler<EventArgs>? Disconnected;\n\n\t\tvoid OnDisconnected ()\n\t\t{\n\t\t\tDisconnected?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases all resource used by the <see cref=\"MailKit.Net.Imap.ImapEngine\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>Call <see cref=\"Dispose\"/> when you are finished using the <see cref=\"MailKit.Net.Imap.ImapEngine\"/>. The\n\t\t/// <see cref=\"Dispose\"/> method leaves the <see cref=\"MailKit.Net.Imap.ImapEngine\"/> in an unusable state. After\n\t\t/// calling <see cref=\"Dispose\"/>, you must release all references to the <see cref=\"MailKit.Net.Imap.ImapEngine\"/> so\n\t\t/// the garbage collector can reclaim the memory that the <see cref=\"MailKit.Net.Imap.ImapEngine\"/> was occupying.</remarks>\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tdisposed = true;\n\t\t\tDisconnect (null);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapEventGroup.cs",
    "content": "﻿//\n// ImapFolderFetch.cs\n//\n// Authors: Steffen Kieß <s-kiess@web.de>\n//          Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An IMAP event group used with the NOTIFY command.\n\t/// </summary>\n\t/// <remarks>\n\t/// An IMAP event group used with the NOTIFY command.\n\t/// </remarks>\n\tpublic sealed class ImapEventGroup\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEventGroup\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEventGroup\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"mailboxFilter\">The mailbox filter.</param>\n\t\t/// <param name=\"events\">The list of IMAP events.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"mailboxFilter\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"events\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic ImapEventGroup (ImapMailboxFilter mailboxFilter, IList<ImapEvent> events)\n\t\t{\n\t\t\tif (mailboxFilter == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mailboxFilter));\n\n\t\t\tif (events == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (events));\n\n\t\t\tMailboxFilter = mailboxFilter;\n\t\t\tEvents = events;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEventGroup\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEventGroup\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"mailboxFilter\">The mailbox filter.</param>\n\t\t/// <param name=\"events\">The list of IMAP events.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"mailboxFilter\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"events\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic ImapEventGroup (ImapMailboxFilter mailboxFilter, params ImapEvent[] events) : this (mailboxFilter, (IList<ImapEvent>) events)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the mailbox filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the mailbox filter.\n\t\t/// </remarks>\n\t\t/// <value>The mailbox filter.</value>\n\t\tpublic ImapMailboxFilter MailboxFilter {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the list of IMAP events.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the list of IMAP events.\n\t\t/// </remarks>\n\t\t/// <value>The events.</value>\n\t\tpublic IList<ImapEvent> Events {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Format the IMAP NOTIFY command for this particular IMAP event group.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Formats the IMAP NOTIFY command for this particular IMAP event group.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"command\">The IMAP command builder.</param>\n\t\t/// <param name=\"args\">The IMAP command argument builder.</param>\n\t\t/// <param name=\"notifySelectedNewExpunge\">Gets set to <see langword=\"true\" /> if the NOTIFY command requests the MessageNew or\n\t\t/// MessageExpunged events for a SELECTED or SELECTED-DELAYED mailbox filter; otherwise it is left unchanged.</param>\n\t\tinternal void Format (ImapEngine engine, StringBuilder command, IList<object> args, ref bool notifySelectedNewExpunge)\n\t\t{\n\t\t\tbool isSelectedFilter = MailboxFilter == ImapMailboxFilter.Selected || MailboxFilter == ImapMailboxFilter.SelectedDelayed;\n\n\t\t\tcommand.Append ('(');\n\t\t\tMailboxFilter.Format (engine, command, args);\n\t\t\tcommand.Append (' ');\n\n\t\t\tif (Events.Count > 0) {\n\t\t\t\tvar haveAnnotationChange = false;\n\t\t\t\tvar haveMessageExpunge = false;\n\t\t\t\tvar haveMessageNew = false;\n\t\t\t\tvar haveFlagChange = false;\n\n\t\t\t\tcommand.Append ('(');\n\n\t\t\t\tfor (int i = 0; i < Events.Count; i++) {\n\t\t\t\t\tvar @event = Events[i];\n\n\t\t\t\t\tif (isSelectedFilter && !@event.IsMessageEvent)\n\t\t\t\t\t\tthrow new InvalidOperationException (\"Only message events may be specified when SELECTED or SELECTED-DELAYED is used.\");\n\n\t\t\t\t\tif (@event is ImapEvent.MessageNew)\n\t\t\t\t\t\thaveMessageNew = true;\n\t\t\t\t\telse if (@event == ImapEvent.MessageExpunge)\n\t\t\t\t\t\thaveMessageExpunge = true;\n\t\t\t\t\telse if (@event == ImapEvent.FlagChange)\n\t\t\t\t\t\thaveFlagChange = true;\n\t\t\t\t\telse if (@event == ImapEvent.AnnotationChange)\n\t\t\t\t\t\thaveAnnotationChange = true;\n\n\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\tcommand.Append (' ');\n\n\t\t\t\t\t@event.Format (engine, command, args, isSelectedFilter);\n\t\t\t\t}\n\t\t\t\tcommand.Append (')');\n\n\t\t\t\t// https://tools.ietf.org/html/rfc5465#section-5\n\t\t\t\tif ((haveMessageNew && !haveMessageExpunge) || (!haveMessageNew && haveMessageExpunge))\n\t\t\t\t\tthrow new InvalidOperationException (\"If MessageNew or MessageExpunge is specified, both must be specified.\");\n\n\t\t\t\tif ((haveFlagChange || haveAnnotationChange) && (!haveMessageNew || !haveMessageExpunge))\n\t\t\t\t\tthrow new InvalidOperationException (\"If FlagChange and/or AnnotationChange are specified, MessageNew and MessageExpunge must also be specified.\");\n\n\t\t\t\tnotifySelectedNewExpunge = (haveMessageNew || haveMessageExpunge) && MailboxFilter == ImapMailboxFilter.Selected;\n\t\t\t} else {\n\t\t\t\tcommand.Append (\"NONE\");\n\t\t\t}\n\n\t\t\tcommand.Append (')');\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An IMAP mailbox filter for use with the NOTIFY command.\n\t/// </summary>\n\t/// <remarks>\n\t/// An IMAP mailbox filter for use with the NOTIFY command.\n\t/// </remarks>\n\tpublic class ImapMailboxFilter\n\t{\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter specifying that the client wants immediate notifications for\n\t\t/// the currently selected folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <c>SELECTED</c> mailbox specifier requires the server to send immediate\n\t\t/// notifications for the currently selected mailbox about all specified\n\t\t/// message events.\n\t\t/// </remarks>\n\t\tpublic static readonly ImapMailboxFilter Selected = new ImapMailboxFilter (\"SELECTED\");\n\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter specifying the currently selected folder but delays notifications\n\t\t/// until a command has been issued.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <c>SELECTED-DELAYED</c> mailbox specifier requires the server to delay a\n\t\t/// <see cref=\"ImapEvent.MessageExpunge\"/> event until the client issues a command that allows\n\t\t/// returning information about expunged messages (see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-7.4.1\">Section 7.4.1 of RFC3501]</a>\n\t\t/// for more details), for example, till a <c>NOOP</c> or an <c>IDLE</c> command has been issued.\n\t\t/// When <c>SELECTED-DELAYED</c> is specified, the server MAY also delay returning other message\n\t\t/// events until the client issues one of the commands specified above, or it MAY return them\n\t\t/// immediately.\n\t\t/// </remarks>\n\t\tpublic static readonly ImapMailboxFilter SelectedDelayed = new ImapMailboxFilter (\"SELECTED-DELAYED\");\n\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter specifying the currently selected folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>INBOXES</c> mailbox specifier refers to all selectable mailboxes in the user's\n\t\t/// personal namespace(s) to which messages may be delivered by a Message Delivery Agent (MDA).\n\t\t/// </para>\n\t\t/// <para>If the IMAP server cannot easily compute this set, it MUST treat <see cref=\"Inboxes\"/>\n\t\t/// as equivalent to <see cref=\"Personal\"/>.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapMailboxFilter Inboxes = new ImapMailboxFilter (\"INBOXES\");\n\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter specifying all selectable folders within the user's personal namespace.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <c>PERSONAL</c> mailbox specifier refers to all selectable folders within the user's personal namespace.\n\t\t/// </remarks>\n\t\tpublic static readonly ImapMailboxFilter Personal = new ImapMailboxFilter (\"PERSONAL\");\n\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter that refers to all subscribed folders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>SUBSCRIBED</c> mailbox specifier refers to all folders subscribed to by the user.</para>\n\t\t/// <para>If the subscription list changes, the server MUST reevaluate the list.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapMailboxFilter Subscribed = new ImapMailboxFilter (\"SUBSCRIBED\");\n\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter that specifies a list of folders to receive notifications about.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// An IMAP mailbox filter that specifies a list of folders to receive notifications about.\n\t\t/// </remarks>\n\t\tpublic class Mailboxes : ImapMailboxFilter\n\t\t{\n\t\t\treadonly ImapFolder[] folders;\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Mailboxes\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Mailboxes\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"folders\">The list of folders to watch for events.</param>\n\t\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t\t/// <paramref name=\"folders\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> is empty.</para>\n\t\t\t/// <para>-or-</para>\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> contains folders that are not of\n\t\t\t/// type <see cref=\"ImapFolder\"/>.</para>\n\t\t\t/// </exception>\n\t\t\tpublic Mailboxes (IList<IMailFolder> folders) : this (\"MAILBOXES\", folders)\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Mailboxes\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Mailboxes\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"folders\">The list of folders to watch for events.</param>\n\t\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t\t/// <paramref name=\"folders\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> is empty.</para>\n\t\t\t/// <para>-or-</para>\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> contains folders that are not of\n\t\t\t/// type <see cref=\"ImapFolder\"/>.</para>\n\t\t\t/// </exception>\n\t\t\tpublic Mailboxes (params IMailFolder[] folders) : this ((IList<IMailFolder>) folders)\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Mailboxes\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Mailboxes\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"name\">The name of the mailbox filter.</param>\n\t\t\t/// <param name=\"folders\">The list of folders to watch for events.</param>\n\t\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t\t/// <paramref name=\"folders\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> is empty.</para>\n\t\t\t/// <para>-or-</para>\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> contains folders that are not of\n\t\t\t/// type <see cref=\"ImapFolder\"/>.</para>\n\t\t\t/// </exception>\n\t\t\tinternal Mailboxes (string name, IList<IMailFolder> folders) : base (name)\n\t\t\t{\n\t\t\t\tif (folders == null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (folders));\n\n\t\t\t\tif (folders.Count == 0)\n\t\t\t\t\tthrow new ArgumentException (\"Must supply at least one folder.\", nameof (folders));\n\n\t\t\t\tthis.folders = new ImapFolder[folders.Count];\n\t\t\t\tfor (int i = 0; i < folders.Count; i++) {\n\t\t\t\t\tif (folders[i] is not ImapFolder folder)\n\t\t\t\t\t\tthrow new ArgumentException (\"All folders must be ImapFolders.\", nameof (folders));\n\n\t\t\t\t\tthis.folders[i] = folder;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Format the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Formats the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t\t/// <param name=\"command\">The IMAP command builder.</param>\n\t\t\t/// <param name=\"args\">The IMAP command argument builder.</param>\n\t\t\tinternal override void Format (ImapEngine engine, StringBuilder command, IList<object> args)\n\t\t\t{\n\t\t\t\tcommand.Append (Name);\n\t\t\t\tcommand.Append (' ');\n\n\t\t\t\t// FIXME: should we verify that each ImapFolder belongs to this ImapEngine?\n\n\t\t\t\tif (folders.Length == 1) {\n\t\t\t\t\tcommand.Append (\"%F\");\n\t\t\t\t\targs.Add (folders[0]);\n\t\t\t\t} else {\n\t\t\t\t\tcommand.Append ('(');\n\n\t\t\t\t\tfor (int i = 0; i < folders.Length; i++) {\n\t\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\t\tcommand.Append (' ');\n\t\t\t\t\t\tcommand.Append (\"%F\");\n\t\t\t\t\t\targs.Add (folders[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tcommand.Append (')');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// An IMAP mailbox filter that specifies a list of folder subtrees to get notifications about.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The client will receive notifications for each specified folder plus all selectable\n\t\t/// folders that are subordinate to any of the specified folders.</para>\n\t\t/// </remarks>\n\t\tpublic class Subtree : Mailboxes\n\t\t{\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Subtree\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Subtree\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"folders\">The list of folders to watch for events.</param>\n\t\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t\t/// <paramref name=\"folders\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> is empty.</para>\n\t\t\t/// <para>-or-</para>\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> contains folders that are not of\n\t\t\t/// type <see cref=\"ImapFolder\"/>.</para>\n\t\t\t/// </exception>\n\t\t\tpublic Subtree (IList<IMailFolder> folders) : base (\"SUBTREE\", folders)\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Subtree\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter.Subtree\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"folders\">The list of folders to watch for events.</param>\n\t\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t\t/// <paramref name=\"folders\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> is empty.</para>\n\t\t\t/// <para>-or-</para>\n\t\t\t/// <para>The list of <paramref name=\"folders\"/> contains folders that are not of\n\t\t\t/// type <see cref=\"ImapFolder\"/>.</para>\n\t\t\t/// </exception>\n\t\t\tpublic Subtree (params IMailFolder[] folders) : this ((IList<IMailFolder>) folders)\n\t\t\t{\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapMailboxFilter\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The name of the mailbox filter.</param>\n\t\tinternal ImapMailboxFilter (string name)\n\t\t{\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the mailbox filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the mailbox filter.\n\t\t/// </remarks>\n\t\t/// <value>The name.</value>\n\t\tpublic string Name { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Format the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Formats the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"command\">The IMAP command builder.</param>\n\t\t/// <param name=\"args\">The IMAP command argument builder.</param>\n\t\tinternal virtual void Format (ImapEngine engine, StringBuilder command, IList<object> args)\n\t\t{\n\t\t\tcommand.Append (Name);\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An IMAP notification event.\n\t/// </summary>\n\t/// <remarks>\n\t/// An IMAP notification event.\n\t/// </remarks>\n\tpublic class ImapEvent\n\t{\n\t\t/// <summary>\n\t\t/// An IMAP event notification for expunged messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the expunged message or messages are in the selected mailbox, the server notifies the client\n\t\t/// using <see cref=\"IMailFolder.MessageExpunged\"/> (or <see cref=\"IMailFolder.MessagesVanished\"/> if\n\t\t/// the <a href=\"https://tools.ietf.org/html/rfc5162\">QRESYNC</a> extension has been enabled via\n\t\t/// <see cref=\"ImapClient.EnableQuickResync(System.Threading.CancellationToken)\"/> or\n\t\t/// <see cref=\"ImapClient.EnableQuickResyncAsync(System.Threading.CancellationToken)\"/>).</para>\n\t\t/// <para>If the expunged message or messages are in another mailbox, the <see cref=\"IMailFolder.UidNext\"/>\n\t\t/// and <see cref=\"IMailFolder.Count\"/> properties will be updated and the appropriate\n\t\t/// <see cref=\"IMailFolder.UidNextChanged\"/> and <see cref=\"IMailFolder.CountChanged\"/> events will be\n\t\t/// emitted for the relevant folder. If the <a href=\"https://tools.ietf.org/html/rfc5162\">QRESYNC</a>\n\t\t/// extension is enabled, the <see cref=\"IMailFolder.HighestModSeq\"/> property will also be updated and\n\t\t/// the <see cref=\"IMailFolder.HighestModSeqChanged\"/> event will be emitted.</para>\n\t\t/// <note type=\"note\">if a client requests <see cref=\"MessageExpunge\"/> with the <see cref=\"ImapMailboxFilter.Selected\"/>\n\t\t/// mailbox specifier, the meaning of a message index can change at any time, so the client cannot use\n\t\t/// message indexes in commands anymore. The client MUST use API variants that take <see cref=\"UniqueId\"/> or\n\t\t/// a <see cref=\"IList{UniqueId}\"/>. The meaning of <c>*</c>* can also change when messages are added or expunged.\n\t\t/// A client wishing to keep using message indexes can either use the <see cref=\"ImapMailboxFilter.SelectedDelayed\"/>\n\t\t/// mailbox specifier or can avoid using the <see cref=\"MessageExpunge\"/> event entirely.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent MessageExpunge = new ImapEvent (\"MessageExpunge\", true);\n\n\t\t/// <summary>\n\t\t/// An IMAP event notification for message flag changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the <see cref=\"FlagChange\"/> notification arrives for a message located in the currently selected\n\t\t/// folder, then that folder will emit a <see cref=\"IMailFolder.MessageFlagsChanged\"/> event as well as a\n\t\t/// <see cref=\"IMailFolder.MessageSummaryFetched\"/> event with an appropriately populated\n\t\t/// <see cref=\"IMessageSummary\"/>.</para>\n\t\t/// <para>On the other hand, if the <see cref=\"FlagChange\"/> notification arrives for a message that is not\n\t\t/// located in the currently selected folder, then the events that are emitted will depend on the\n\t\t/// <see cref=\"ImapCapabilities\"/> of the IMAP server.</para>\n\t\t/// <para>If the server supports the <see cref=\"ImapCapabilities.CondStore\"/> capability (or the\n\t\t/// <see cref=\"ImapCapabilities.QuickResync\"/> capability and the client has enabled it via\n\t\t/// <see cref=\"ImapClient.EnableQuickResync(System.Threading.CancellationToken)\"/>), then the\n\t\t/// <see cref=\"IMailFolder.HighestModSeqChanged\"/> event will be emitted as well as the\n\t\t/// <see cref=\"IMailFolder.UidValidityChanged\"/> event (if the latter has changed). If the number of\n\t\t/// seen messages has changed, then the <see cref=\"IMailFolder.UnreadChanged\"/> event may also be emitted.</para>\n\t\t/// <para>If the server does not support either the <see cref=\"ImapCapabilities.CondStore\"/> capability nor\n\t\t/// the <see cref=\"ImapCapabilities.QuickResync\"/> capability and the client has not enabled the later capability\n\t\t/// via <see cref=\"ImapClient.EnableQuickResync(System.Threading.CancellationToken)\"/>, then the server may choose\n\t\t/// only to notify the client of <see cref=\"IMailFolder.UidValidity\"/> changes by emitting the\n\t\t/// <see cref=\"IMailFolder.UidValidityChanged\"/> event.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent FlagChange = new ImapEvent (\"FlagChange\", true);\n\n\t\t/// <summary>\n\t\t/// An IMAP event notification for message annotation changes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the <see cref=\"AnnotationChange\"/> notification arrives for a message located in the currently selected\n\t\t/// folder, then that folder will emit a <see cref=\"IMailFolder.AnnotationsChanged\"/> event as well as a\n\t\t/// <see cref=\"IMailFolder.MessageSummaryFetched\"/> event with an appropriately populated\n\t\t/// <see cref=\"IMessageSummary\"/>.</para>\n\t\t/// <para>On the other hand, if the <see cref=\"AnnotationChange\"/> notification arrives for a message that is not\n\t\t/// located in the currently selected folder, then the events that are emitted will depend on the\n\t\t/// <see cref=\"ImapCapabilities\"/> of the IMAP server.</para>\n\t\t/// <para>If the server supports the <see cref=\"ImapCapabilities.CondStore\"/> capability (or the\n\t\t/// <see cref=\"ImapCapabilities.QuickResync\"/> capability and the client has enabled it via\n\t\t/// <see cref=\"ImapClient.EnableQuickResync(System.Threading.CancellationToken)\"/>), then the\n\t\t/// <see cref=\"IMailFolder.HighestModSeqChanged\"/> event will be emitted as well as the\n\t\t/// <see cref=\"IMailFolder.UidValidityChanged\"/> event (if the latter has changed). If the number of\n\t\t/// seen messages has changed, then the <see cref=\"IMailFolder.UnreadChanged\"/> event may also be emitted.</para>\n\t\t/// <para>If the server does not support either the <see cref=\"ImapCapabilities.CondStore\"/> capability nor\n\t\t/// the <see cref=\"ImapCapabilities.QuickResync\"/> capability and the client has not enabled the later capability\n\t\t/// via <see cref=\"ImapClient.EnableQuickResync(System.Threading.CancellationToken)\"/>, then the server may choose\n\t\t/// only to notify the client of <see cref=\"IMailFolder.UidValidity\"/> changes by emitting the\n\t\t/// <see cref=\"IMailFolder.UidValidityChanged\"/> event.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent AnnotationChange = new ImapEvent (\"AnnotationChange\", true);\n\n\t\t/// <summary>\n\t\t/// AN IMAP event notification for folders that have been created, deleted, or renamed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>These notifications are sent if an affected mailbox name was created, deleted, or renamed.</para>\n\t\t/// <para>As these notifications are received by the client, the appropriate will be emitted:\n\t\t/// <see cref=\"MailStore.FolderCreated\"/>, <see cref=\"IMailFolder.Deleted\"/>, or\n\t\t/// <see cref=\"IMailFolder.Renamed\"/>, respectively.</para>\n\t\t/// <note type=\"info\">If the server supports <see cref=\"ImapCapabilities.Acl\"/>, granting or revocation of the\n\t\t/// <see cref=\"AccessRight.LookupFolder\"/> right to the current user on the affected folder will also be\n\t\t/// considered folder creation or deletion, respectively. If a folder is created or deleted, the folder itself\n\t\t/// and its direct parent (whether it is an existing folder or not) are considered to be affected.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent MailboxName = new ImapEvent (\"MailboxName\", false);\n\n\t\t/// <summary>\n\t\t/// An IMAP event notification for folders who have had their subscription status changed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This event requests that the server notifies the client of any subscription changes,\n\t\t/// causing the <see cref=\"IMailFolder.Subscribed\"/> or <see cref=\"IMailFolder.Unsubscribed\"/>\n\t\t/// events to be emitted accordingly on the affected <see cref=\"IMailFolder\"/>.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent SubscriptionChange = new ImapEvent (\"SubscriptionChange\", false);\n\n\t\t/// <summary>\n\t\t/// An IMAP event notification for changes to folder metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Support for this event type is OPTIONAL unless <see cref=\"ImapCapabilities.Metadata\"/> is supported\n\t\t/// by the server, in which case support for this event type is REQUIRED.</para>\n\t\t/// <para>If the server does support this event, then the <see cref=\"IMailFolder.MetadataChanged\"/> event\n\t\t/// will be emitted whenever metadata changes for any folder included in the <see cref=\"ImapMailboxFilter\"/>.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent MailboxMetadataChange = new ImapEvent (\"MailboxMetadataChange\", false);\n\n\t\t/// <summary>\n\t\t/// An IMAP event notification for changes to server metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Support for this event type is OPTIONAL unless <see cref=\"ImapCapabilities.Metadata\"/> is supported\n\t\t/// by the server, in which case support for this event type is REQUIRED.</para>\n\t\t/// <para>If the server does support this event, then the <see cref=\"IMailStore.MetadataChanged\"/> event\n\t\t/// will be emitted whenever metadata changes.</para>\n\t\t/// </remarks>\n\t\tpublic static readonly ImapEvent ServerMetadataChange = new ImapEvent (\"ServerMetadataChange\", false);\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The name of the IMAP event.</param>\n\t\t/// <param name=\"isMessageEvent\"><see langword=\"true\" /> if the event is a message event; otherwise, <see langword=\"false\" />.</param>\n\t\tinternal ImapEvent (string name, bool isMessageEvent)\n\t\t{\n\t\t\tIsMessageEvent = isMessageEvent;\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not this <see cref=\"T:MailKit.Net.Imap.ImapEvent\"/> is a message event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not this <see cref=\"T:MailKit.Net.Imap.ImapEvent\"/> is a message event.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if is message event; otherwise, <see langword=\"false\" />.</value>\n\t\tinternal bool IsMessageEvent {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the IMAP event.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the IMAP event.\n\t\t/// </remarks>\n\t\t/// <value>The name of the IMAP event.</value>\n\t\tpublic string Name {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Format the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Formats the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"command\">The IMAP command builder.</param>\n\t\t/// <param name=\"args\">The IMAP command argument builder.</param>\n\t\t/// <param name=\"isSelectedFilter\"><see langword=\"true\" /> if the event is being registered for a\n\t\t/// <see cref=\"ImapMailboxFilter.Selected\"/> or <see cref=\"ImapMailboxFilter.SelectedDelayed\"/>\n\t\t/// mailbox filter.</param>\n\t\tinternal virtual void Format (ImapEngine engine, StringBuilder command, IList<object> args, bool isSelectedFilter)\n\t\t{\n\t\t\tcommand.Append (Name);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// An IMAP event notification for new or appended messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>An IMAP event notification for new or appended messages.</para>\n\t\t/// <para>If the new or appended message is in the selected folder, the folder will emit the\n\t\t/// <see cref=\"IMailFolder.CountChanged\"/> event, followed by a\n\t\t/// <see cref=\"IMailFolder.MessageSummaryFetched\"/> event containing the information requested by the client.</para>\n\t\t/// <note type=\"note\">These events will not be emitted for any message created by the client on this particular folder\n\t\t/// as a result of, for example, a call to\n\t\t/// <see cref=\"IMailFolder.Append(IAppendRequest, System.Threading.CancellationToken)\"/>\n\t\t/// or <see cref=\"IMailFolder.CopyTo(IList{UniqueId}, IMailFolder, System.Threading.CancellationToken)\"/>.</note>\n\t\t/// </remarks>\n\t\tpublic class MessageNew : ImapEvent\n\t\t{\n\t\t\treadonly IFetchRequest request;\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"request\">The fetch request to use when new messages arrive.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\tpublic MessageNew (IFetchRequest request) : base (\"MessageNew\", true)\n\t\t\t{\n\t\t\t\tif (request == null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\t\tthis.request = request;\n\t\t\t}\n\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"items\">The message summary items to automatically retrieve for new messages.</param>\n\t\t\tpublic MessageNew (MessageSummaryItems items = MessageSummaryItems.None) : this (new FetchRequest (items))\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"items\">The message summary items to automatically retrieve for new messages.</param>\n\t\t\t/// <param name=\"headers\">Additional message headers to retrieve for new messages.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"ArgumentException\">\n\t\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t\t/// </exception>\n\t\t\tpublic MessageNew (MessageSummaryItems items, IEnumerable<HeaderId> headers) : this (new FetchRequest (items, headers))\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Imap.ImapEvent.MessageNew\"/> class.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"items\">The message summary items to automatically retrieve for new messages.</param>\n\t\t\t/// <param name=\"headers\">Additional message headers to retrieve for new messages.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"headers\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\t/// <exception cref=\"ArgumentException\">\n\t\t\t/// <para>One or more of the specified <paramref name=\"headers\"/> is invalid.</para>\n\t\t\t/// </exception>\n\t\t\tpublic MessageNew (MessageSummaryItems items, IEnumerable<string> headers) : this (new FetchRequest (items, headers))\n\t\t\t{\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Format the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Formats the IMAP NOTIFY command for this particular IMAP mailbox filter.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t\t/// <param name=\"command\">The IMAP command builder.</param>\n\t\t\t/// <param name=\"args\">The IMAP command argument builder.</param>\n\t\t\t/// <param name=\"isSelectedFilter\"><see langword=\"true\" /> if the event is being registered for a\n\t\t\t/// <see cref=\"ImapMailboxFilter.Selected\"/> or <see cref=\"ImapMailboxFilter.SelectedDelayed\"/>\n\t\t\t/// mailbox filter.</param>\n\t\t\tinternal override void Format (ImapEngine engine, StringBuilder command, IList<object> args, bool isSelectedFilter)\n\t\t\t{\n\t\t\t\tcommand.Append (Name);\n\n\t\t\t\tif (ImapFolder.IsEmptyFetchRequest (request))\n\t\t\t\t\treturn;\n\n\t\t\t\tif (!isSelectedFilter)\n\t\t\t\t\tthrow new InvalidOperationException (\"The MessageNew event cannot have any parameters for mailbox filters other than SELECTED and SELECTED-DELAYED.\");\n\n\t\t\t\tcommand.Append (' ');\n\t\t\t\tcommand.Append (ImapFolder.FormatSummaryItems (engine, request, out _, isNotify: true));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolder.cs",
    "content": "﻿//\n// ImapFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\n\nusing MailKit.Search;\n\n#if NET5_0_OR_GREATER\nusing IReadOnlySetOfStrings = System.Collections.Generic.IReadOnlySet<string>;\n#else\nusing IReadOnlySetOfStrings = System.Collections.Generic.ISet<string>;\n#endif\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An IMAP folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// An IMAP folder.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"DownloadMessagesByUniqueId\"/>\n\t/// </example>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t/// </example>\n\tpublic partial class ImapFolder : MailFolder, IImapFolder\n\t{\n\t\tbool supportsModSeq;\n\t\tbool countChanged;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapFolder\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Creates a new <see cref=\"ImapFolder\"/>.</para>\n\t\t/// <para>If you subclass <see cref=\"ImapFolder\"/>, you will also need to subclass\n\t\t/// <see cref=\"ImapClient\"/> and override the\n\t\t/// <see cref=\"ImapClient.CreateImapFolder(ImapFolderConstructorArgs)\"/>\n\t\t/// method in order to return a new instance of your ImapFolder subclass.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"args\">The constructor arguments.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"args\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic ImapFolder (ImapFolderConstructorArgs args)\n\t\t\t: base (args?.FullName ?? string.Empty, args?.DirectorySeparator ?? '.', args?.Attributes ?? FolderAttributes.None)\n\t\t{\n\t\t\tif (args == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (args));\n\n\t\t\tEncodedName = args.EncodedName;\n\t\t\tEngine = args.Engine;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the IMAP command engine.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the IMAP command engine.\n\t\t/// </remarks>\n\t\t/// <value>The engine.</value>\n\t\tinternal ImapEngine Engine {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the encoded name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the encoded name of the folder.\n\t\t/// </remarks>\n\t\t/// <value>The encoded name.</value>\n\t\tinternal string EncodedName {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets an object that can be used to synchronize access to the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets an object that can be used to synchronize access to the IMAP server.</para>\n\t\t/// <para>When using the non-Async methods from multiple threads, it is important to lock the\n\t\t/// <see cref=\"SyncRoot\"/> object for thread safety when using the synchronous methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The lock object.</value>\n\t\tpublic override object SyncRoot {\n\t\t\tget { return Engine; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the threading algorithms supported by the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get the threading algorithms supported by the folder.\n\t\t/// </remarks>\n\t\t/// <value>The supported threading algorithms.</value>\n\t\tpublic override HashSet<ThreadingAlgorithm> ThreadingAlgorithms {\n\t\t\tget { return Engine.ThreadingAlgorithms; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine whether or not an <see cref=\"ImapFolder\"/> supports a feature.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not an <see cref=\"ImapFolder\"/> supports a feature.\n\t\t/// </remarks>\n\t\t/// <param name=\"feature\">The desired feature.</param>\n\t\t/// <returns><see langword=\"true\" /> if the feature is supported; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic override bool Supports (FolderFeature feature)\n\t\t{\n\t\t\tswitch (feature) {\n\t\t\tcase FolderFeature.AccessRights: return (Engine.Capabilities & ImapCapabilities.Acl) != 0;\n\t\t\tcase FolderFeature.Annotations: return AnnotationAccess != AnnotationAccess.None;\n\t\t\tcase FolderFeature.Metadata: return (Engine.Capabilities & ImapCapabilities.Metadata) != 0;\n\t\t\tcase FolderFeature.ModSequences: return supportsModSeq;\n\t\t\tcase FolderFeature.QuickResync: return Engine.QResyncEnabled;\n\t\t\tcase FolderFeature.Quotas: return (Engine.Capabilities & ImapCapabilities.Quota) != 0;\n\t\t\tcase FolderFeature.Sorting: return (Engine.Capabilities & ImapCapabilities.Sort) != 0;\n\t\t\tcase FolderFeature.Threading: return (Engine.Capabilities & ImapCapabilities.Thread) != 0;\n\t\t\tcase FolderFeature.UTF8: return Engine.UTF8Enabled;\n\t\t\tdefault: return false;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckState (bool open, bool rw)\n\t\t{\n\t\t\tif (Engine.IsDisposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (ImapClient));\n\n\t\t\tif (!Engine.IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The ImapClient is not connected.\");\n\n\t\t\tif (Engine.State < ImapEngineState.Authenticated)\n\t\t\t\tthrow new ServiceNotAuthenticatedException (\"The ImapClient is not authenticated.\");\n\n\t\t\tif (open) {\n\t\t\t\tvar access = rw ? FolderAccess.ReadWrite : FolderAccess.ReadOnly;\n\n\t\t\t\tif (!IsOpen || Access < access)\n\t\t\t\t\tthrow new FolderNotOpenException (FullName, access);\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckAllowIndexes ()\n\t\t{\n\t\t\t// Indexes (\"Message Sequence Numbers\" or MSNs in the RFCs) and * are not stable while MessageNew/MessageExpunge is registered for SELECTED and therefore should not be used\n\t\t\t// https://tools.ietf.org/html/rfc5465#section-5.2\n\t\t\tif (Engine.NotifySelectedNewExpunge)\n\t\t\t\tthrow new InvalidOperationException (\"Indexes and '*' cannot be used while MessageNew/MessageExpunge is registered with NOTIFY for SELECTED.\");\n\t\t}\n\n\t\tvoid CheckValidDestination (IMailFolder destination)\n\t\t{\n\t\t\tif (destination == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (destination));\n\n\t\t\tif (destination is not ImapFolder target || (target.Engine != Engine))\n\t\t\t\tthrow new ArgumentException (\"The destination folder does not belong to this ImapClient.\", nameof (destination));\n\t\t}\n\n\t\tinternal void Reset ()\n\t\t{\n\t\t\t// basic state\n\t\t\t((HashSet<string>) PermanentKeywords).Clear ();\n\t\t\t((HashSet<string>) AcceptedKeywords).Clear ();\n\t\t\tPermanentFlags = MessageFlags.None;\n\t\t\tAcceptedFlags = MessageFlags.None;\n\t\t\tAccess = FolderAccess.None;\n\n\t\t\t// annotate state\n\t\t\tAnnotationAccess = AnnotationAccess.None;\n\t\t\tAnnotationScopes = AnnotationScope.None;\n\t\t\tMaxAnnotationSize = 0;\n\n\t\t\t// condstore state\n\t\t\tsupportsModSeq = false;\n\t\t\tHighestModSeq = 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Notifies the folder that a parent folder has been renamed.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the <see cref=\"MailFolder.FullName\"/> property.\n\t\t/// </remarks>\n\t\tprotected override void OnParentFolderRenamed ()\n\t\t{\n\t\t\tvar oldEncodedName = EncodedName;\n\n\t\t\tFullName = ParentFolder!.FullName + DirectorySeparator + Name;\n\t\t\tEncodedName = Engine.EncodeMailboxName (FullName);\n\t\t\tEngine.FolderCache.Remove (oldEncodedName);\n\t\t\tEngine.FolderCache[EncodedName] = this;\n\t\t\tReset ();\n\n\t\t\tif (Engine.Selected == this) {\n\t\t\t\tEngine.State = ImapEngineState.Authenticated;\n\t\t\t\tEngine.Selected = null;\n\t\t\t\tOnClosed ();\n\t\t\t}\n\t\t}\n\n\t\tvoid ProcessResponseCodes (ImapCommand ic, IMailFolder? folder, bool throwNotFound = true)\n\t\t{\n\t\t\tbool tryCreate = false;\n\n\t\t\tforeach (var code in ic.RespCodes) {\n\t\t\t\tswitch (code.Type) {\n\t\t\t\tcase ImapResponseCodeType.PermanentFlags:\n\t\t\t\t\tvar permanent = (PermanentFlagsResponseCode) code;\n\t\t\t\t\tPermanentKeywords = permanent.Keywords;\n\t\t\t\t\tPermanentFlags = permanent.Flags;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.ReadOnly:\n\t\t\t\t\tif (code.IsTagged)\n\t\t\t\t\t\tAccess = FolderAccess.ReadOnly;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.ReadWrite:\n\t\t\t\t\tif (code.IsTagged)\n\t\t\t\t\t\tAccess = FolderAccess.ReadWrite;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.TryCreate:\n\t\t\t\t\ttryCreate = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.UidNext:\n\t\t\t\t\tUidNext = ((UidNextResponseCode) code).Uid;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.UidValidity:\n\t\t\t\t\tvar uidValidity = ((UidValidityResponseCode) code).UidValidity;\n\t\t\t\t\tif (IsOpen)\n\t\t\t\t\t\tUpdateUidValidity (uidValidity);\n\t\t\t\t\telse\n\t\t\t\t\t\tUidValidity = uidValidity;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.Unseen:\n\t\t\t\t\tFirstUnread = ((UnseenResponseCode) code).Index;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.HighestModSeq:\n\t\t\t\t\tvar highestModSeq = ((HighestModSeqResponseCode) code).HighestModSeq;\n\t\t\t\t\tsupportsModSeq = true;\n\t\t\t\t\tif (IsOpen)\n\t\t\t\t\t\tUpdateHighestModSeq (highestModSeq);\n\t\t\t\t\telse\n\t\t\t\t\t\tHighestModSeq = highestModSeq;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.NoModSeq:\n\t\t\t\t\tsupportsModSeq = false;\n\t\t\t\t\tHighestModSeq = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.MailboxId:\n\t\t\t\t\t// Note: an untagged MAILBOX resp-code is returned on SELECT/EXAMINE while\n\t\t\t\t\t// a *tagged* MAILBOXID resp-code is returned on CREATE.\n\t\t\t\t\tif (!code.IsTagged)\n\t\t\t\t\t\tId = ((MailboxIdResponseCode) code).MailboxId;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ImapResponseCodeType.Annotations:\n\t\t\t\t\tvar annotations = (AnnotationsResponseCode) code;\n\t\t\t\t\tAnnotationAccess = annotations.Access;\n\t\t\t\t\tAnnotationScopes = annotations.Scopes;\n\t\t\t\t\tMaxAnnotationSize = annotations.MaxSize;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tryCreate && throwNotFound && folder != null)\n\t\t\t\tthrow new FolderNotFoundException (folder.FullName);\n\t\t}\n\n\t\t#region IMailFolder implementation\n\n\t\t/// <summary>\n\t\t/// Gets a value indicating whether the folder is currently open.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a value indicating whether the folder is currently open.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the folder is currently open; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsOpen {\n\t\t\tget { return Engine.Selected == this; }\n\t\t}\n\n\t\tstatic string SelectOrExamine (FolderAccess access)\n\t\t{\n\t\t\treturn access == FolderAccess.ReadOnly ? \"EXAMINE\" : \"SELECT\";\n\t\t}\n\n\t\tstatic Task UntaggedQResyncFetchHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar folder = ic.Folder!;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn folder.OnUntaggedFetchResponseAsync (engine, index, ic.CancellationToken);\n\n\t\t\tfolder.OnUntaggedFetchResponse (engine, index, ic.CancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tImapCommand QueueOpenCommand (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (access != FolderAccess.ReadOnly && access != FolderAccess.ReadWrite)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (access));\n\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.QuickResync) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the QRESYNC extension.\");\n\n\t\t\tif (!Supports (FolderFeature.QuickResync))\n\t\t\t\tthrow new InvalidOperationException (\"The QRESYNC extension has not been enabled.\");\n\n\t\t\tstring qresync;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Annotate) != 0 && Engine.QuirksMode != ImapQuirksMode.iCloud)\n\t\t\t\tqresync = string.Format (CultureInfo.InvariantCulture, \"(ANNOTATE QRESYNC ({0} {1}\", uidValidity, highestModSeq);\n\t\t\telse\n\t\t\t\tqresync = string.Format (CultureInfo.InvariantCulture, \"(QRESYNC ({0} {1}\", uidValidity, highestModSeq);\n\n\t\t\tif (uids.Count > 0) {\n\t\t\t\tvar set = UniqueIdSet.ToString (uids);\n\t\t\t\tqresync += \" \" + set;\n\t\t\t}\n\n\t\t\tqresync += \"))\";\n\n\t\t\tvar command = string.Format (\"{0} %F {1}\\r\\n\", SelectOrExamine (access), qresync);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, this);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", UntaggedQResyncFetchHandler);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessOpenResponse (ImapCommand ic, FolderAccess access)\n\t\t{\n\t\t\tProcessResponseCodes (ic, this);\n\n\t\t\tic.ThrowIfNotOk (access == FolderAccess.ReadOnly ? \"EXAMINE\" : \"SELECT\");\n\t\t}\n\n\t\tFolderAccess Open ()\n\t\t{\n\t\t\tif (Engine.Selected != null && Engine.Selected != this) {\n\t\t\t\tvar folder = Engine.Selected;\n\n\t\t\t\tfolder.Reset ();\n\n\t\t\t\tfolder.OnClosed ();\n\t\t\t}\n\n\t\t\tEngine.State = ImapEngineState.Selected;\n\t\t\tEngine.Selected = this;\n\n\t\t\tOnOpened ();\n\n\t\t\treturn Access;\n\t\t}\n\n\t\tFolderAccess Open (ImapCommand ic, FolderAccess access)\n\t\t{\n\t\t\tReset ();\n\n\t\t\tif (access == FolderAccess.ReadWrite) {\n\t\t\t\t// Note: if the server does not respond with a PERMANENTFLAGS response,\n\t\t\t\t// then we need to assume all flags are permanent.\n\t\t\t\tPermanentFlags = SettableFlags | MessageFlags.UserDefined;\n\t\t\t} else {\n\t\t\t\tPermanentFlags = MessageFlags.None;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessOpenResponse (ic, access);\n\t\t\t} catch {\n\t\t\t\tPermanentFlags = MessageFlags.None;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn Open ();\n\t\t}\n\n\t\tasync Task<FolderAccess> OpenAsync (ImapCommand ic, FolderAccess access)\n\t\t{\n\t\t\tReset ();\n\n\t\t\tif (access == FolderAccess.ReadWrite) {\n\t\t\t\t// Note: if the server does not respond with a PERMANENTFLAGS response,\n\t\t\t\t// then we need to assume all flags are permanent.\n\t\t\t\tPermanentFlags = SettableFlags | MessageFlags.UserDefined;\n\t\t\t} else {\n\t\t\t\tPermanentFlags = MessageFlags.None;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessOpenResponse (ic, access);\n\t\t\t} catch {\n\t\t\t\tPermanentFlags = MessageFlags.None;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn Open ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This variant of the <see cref=\"Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// method is meant for quick resynchronization of the folder. Before calling this method,\n\t\t/// the <see cref=\"ImapClient.EnableQuickResync(CancellationToken)\"/> method MUST be called.</para>\n\t\t/// <para>You should also make sure to add listeners to the <see cref=\"MailFolder.MessagesVanished\"/> and\n\t\t/// <see cref=\"MailFolder.MessageFlagsChanged\"/> events to get notifications of changes since\n\t\t/// the last time the folder was opened.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"uidValidity\">The last known <see cref=\"MailFolder.UidValidity\"/> value.</param>\n\t\t/// <param name=\"highestModSeq\">The last known <see cref=\"MailFolder.HighestModSeq\"/> value.</param>\n\t\t/// <param name=\"uids\">The last known list of unique message identifiers.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The QRESYNC feature has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QRESYNC extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override FolderAccess Open (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueOpenCommand (access, uidValidity, highestModSeq, uids, cancellationToken);\n\n\t\t\treturn Open (ic, access);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>This variant of the <see cref=\"Open(FolderAccess,System.Threading.CancellationToken)\"/>\n\t\t/// method is meant for quick resynchronization of the folder. Before calling this method,\n\t\t/// the <see cref=\"ImapClient.EnableQuickResync(CancellationToken)\"/> method MUST be called.</para>\n\t\t/// <para>You should also make sure to add listeners to the <see cref=\"MailFolder.MessagesVanished\"/> and\n\t\t/// <see cref=\"MailFolder.MessageFlagsChanged\"/> events to get notifications of changes since\n\t\t/// the last time the folder was opened.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"uidValidity\">The last known <see cref=\"MailFolder.UidValidity\"/> value.</param>\n\t\t/// <param name=\"highestModSeq\">The last known <see cref=\"MailFolder.HighestModSeq\"/> value.</param>\n\t\t/// <param name=\"uids\">The last known list of unique message identifiers.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The QRESYNC feature has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QRESYNC extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<FolderAccess> OpenAsync (FolderAccess access, uint uidValidity, ulong highestModSeq, IList<UniqueId> uids, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueOpenCommand (access, uidValidity, highestModSeq, uids, cancellationToken);\n\n\t\t\treturn OpenAsync (ic, access);\n\t\t}\n\n\t\tImapCommand QueueOpenCommand (FolderAccess access, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (access != FolderAccess.ReadOnly && access != FolderAccess.ReadWrite)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (access));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tvar @params = string.Empty;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.CondStore) != 0)\n\t\t\t\t@params += \"CONDSTORE\";\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Annotate) != 0 && Engine.QuirksMode != ImapQuirksMode.iCloud)\n\t\t\t\t@params += \" ANNOTATE\";\n\n\t\t\tif (@params.Length > 0)\n\t\t\t\t@params = \" (\" + @params.TrimStart () + \")\";\n\n\t\t\tvar command = string.Format (\"{0} %F{1}\\r\\n\", SelectOrExamine (access), @params);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, this);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Opens the folder using the requested folder access.\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override FolderAccess Open (FolderAccess access, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueOpenCommand (access, cancellationToken);\n\n\t\t\treturn Open (ic, access);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously open the folder using the requested folder access.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Opens the folder using the requested folder access.\n\t\t/// </remarks>\n\t\t/// <returns>The <see cref=\"FolderAccess\"/> state of the folder.</returns>\n\t\t/// <param name=\"access\">The requested folder access.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"access\"/> is not a valid value.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<FolderAccess> OpenAsync (FolderAccess access, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueOpenCommand (access, cancellationToken);\n\n\t\t\treturn OpenAsync (ic, access);\n\t\t}\n\n\t\tImapCommand? QueueCloseCommand (bool expunge, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (true, expunge);\n\n\t\t\tImapCommand? ic;\n\n\t\t\tif (expunge) {\n\t\t\t\tic = Engine.QueueCommand (cancellationToken, this, \"CLOSE\\r\\n\");\n\t\t\t} else if ((Engine.Capabilities & ImapCapabilities.Unselect) != 0) {\n\t\t\t\tic = Engine.QueueCommand (cancellationToken, this, \"UNSELECT\\r\\n\");\n\t\t\t} else {\n\t\t\t\tic = null;\n\t\t\t}\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessCloseResponse (ImapCommand ic, bool expunge)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (expunge ? \"CLOSE\" : \"UNSELECT\");\n\t\t}\n\n\t\tvoid Close ()\n\t\t{\n\t\t\tReset ();\n\n\t\t\tif (Engine.Selected == this) {\n\t\t\t\tEngine.State = ImapEngineState.Authenticated;\n\t\t\t\tEngine.Selected = null;\n\t\t\t\tOnClosed ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Close the folder, optionally expunging the messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Closes the folder, optionally expunging the messages marked for deletion.\n\t\t/// </remarks>\n\t\t/// <param name=\"expunge\">If set to <see langword=\"true\" />, expunge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Close (bool expunge = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCloseCommand (expunge, cancellationToken);\n\n\t\t\tif (ic != null) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessCloseResponse (ic, expunge);\n\t\t\t}\n\n\t\t\tClose ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously close the folder, optionally expunging the messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Closes the folder, optionally expunging the messages marked for deletion.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"expunge\">If set to <see langword=\"true\" />, expunge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task CloseAsync (bool expunge = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCloseCommand (expunge, cancellationToken);\n\n\t\t\tif (ic != null) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessCloseResponse (ic, expunge);\n\t\t\t}\n\n\t\t\tClose ();\n\t\t}\n\n\t\tImapCommand QueueGetCreatedFolderCommand (string encodedName, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, \"LIST \\\"\\\" %S\\r\\n\", encodedName);\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.UserData = new List<ImapFolder> ();\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tIMailFolder? ProcessGetCreatedFolderResponse (ImapCommand ic, string encodedName, string? id, bool specialUse)\n\t\t{\n\t\t\tvar list = (List<ImapFolder>) ic.UserData!;\n\t\t\tImapFolder? folder;\n\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"LIST\");\n\n\t\t\tif ((folder = ImapEngine.GetFolder (list, encodedName)) != null) {\n\t\t\t\tfolder.ParentFolder = this;\n\t\t\t\tfolder.Id = id;\n\n\t\t\t\tif (specialUse)\n\t\t\t\t\tEngine.AssignSpecialFolder (folder);\n\n\t\t\t\tEngine.OnFolderCreated (folder);\n\t\t\t}\n\n\t\t\treturn folder;\n\t\t}\n\n\t\tImapCommand QueueCreateCommand (string name, bool isMessageFolder, CancellationToken cancellationToken, out string encodedName)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif (!ImapEngine.IsValidMailboxName (name, DirectorySeparator))\n\t\t\t\tthrow new ArgumentException (\"The name is not a legal folder name.\", nameof (name));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tif (!string.IsNullOrEmpty (FullName) && DirectorySeparator == '\\0')\n\t\t\t\tthrow new InvalidOperationException (\"Cannot create child folders.\");\n\n\t\t\tvar fullName = !string.IsNullOrEmpty (FullName) ? FullName + DirectorySeparator + name : name;\n\t\t\tencodedName = Engine.EncodeMailboxName (fullName);\n\t\t\tvar createName = encodedName;\n\n\t\t\tif (!isMessageFolder && Engine.QuirksMode != ImapQuirksMode.GMail)\n\t\t\t\tcreateName += DirectorySeparator;\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"CREATE %S\\r\\n\", createName);\n\t\t}\n\n\t\tMailboxIdResponseCode? ProcessCreateResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tif (ic.Response != ImapCommandResponse.Ok && ic.GetResponseCode (ImapResponseCodeType.AlreadyExists) == null)\n\t\t\t\tthrow ImapCommandException.Create (\"CREATE\", ic);\n\n\t\t\treturn ic.GetResponseCode (ImapResponseCodeType.MailboxId) as MailboxIdResponseCode;\n\t\t}\n\n\t\tIMailFolder? Create (ImapCommand ic, string encodedName, bool specialUse, CancellationToken cancellationToken)\n\t\t{\n\t\t\tEngine.Run (ic);\n\n\t\t\tvar mailboxIdResponseCode = ProcessCreateResponse (ic);\n\t\t\tvar id = mailboxIdResponseCode?.MailboxId;\n\n\t\t\tic = QueueGetCreatedFolderCommand (encodedName, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetCreatedFolderResponse (ic, encodedName, id, specialUse);\n\t\t}\n\n\t\tasync Task<IMailFolder?> CreateAsync (ImapCommand ic, string encodedName, bool specialUse, CancellationToken cancellationToken)\n\t\t{\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tvar mailboxIdResponseCode = ProcessCreateResponse (ic);\n\t\t\tvar id = mailboxIdResponseCode?.MailboxId;\n\n\t\t\tic = QueueGetCreatedFolderCommand (encodedName, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetCreatedFolderResponse (ic, encodedName, id, specialUse);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"isMessageFolder\"><see langword=\"true\" /> if the folder will be used to contain messages; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty or invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailFolder.DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IMailFolder? Create (string name, bool isMessageFolder, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCreateCommand (name, isMessageFolder, cancellationToken, out var encodedName);\n\n\t\t\treturn Create (ic, encodedName, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"isMessageFolder\"><see langword=\"true\" /> if the folder will be used to contain messages; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty or invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailFolder.DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<IMailFolder?> CreateAsync (string name, bool isMessageFolder, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCreateCommand (name, isMessageFolder, cancellationToken, out var encodedName);\n\n\t\t\treturn CreateAsync (ic, encodedName, false, cancellationToken);\n\t\t}\n\n\t\tImapCommand QueueCreateCommand (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken, out string encodedName)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif (!ImapEngine.IsValidMailboxName (name, DirectorySeparator))\n\t\t\t\tthrow new ArgumentException (\"The name is not a legal folder name.\", nameof (name));\n\n\t\t\tif (specialUses == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (specialUses));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tif (!string.IsNullOrEmpty (FullName) && DirectorySeparator == '\\0')\n\t\t\t\tthrow new InvalidOperationException (\"Cannot create child folders.\");\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.CreateSpecialUse) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the CREATE-SPECIAL-USE extension.\");\n\n\t\t\tvar uses = new StringBuilder ();\n\t\t\tuint used = 0;\n\n\t\t\tforeach (var use in specialUses) {\n\t\t\t\tvar bit = (uint) (1 << ((int) use));\n\n\t\t\t\tif ((used & bit) != 0)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tused |= bit;\n\n\t\t\t\tif (uses.Length > 0)\n\t\t\t\t\tuses.Append (' ');\n\n\t\t\t\tswitch (use) {\n\t\t\t\tcase SpecialFolder.All:       uses.Append (\"\\\\All\"); break;\n\t\t\t\tcase SpecialFolder.Archive:   uses.Append (\"\\\\Archive\"); break;\n\t\t\t\tcase SpecialFolder.Drafts:    uses.Append (\"\\\\Drafts\"); break;\n\t\t\t\tcase SpecialFolder.Flagged:   uses.Append (\"\\\\Flagged\"); break;\n\t\t\t\tcase SpecialFolder.Important: uses.Append (\"\\\\Important\"); break;\n\t\t\t\tcase SpecialFolder.Junk:      uses.Append (\"\\\\Junk\"); break;\n\t\t\t\tcase SpecialFolder.Sent:      uses.Append (\"\\\\Sent\"); break;\n\t\t\t\tcase SpecialFolder.Trash:     uses.Append (\"\\\\Trash\"); break;\n\t\t\t\tdefault: if (uses.Length > 0) uses.Length--; break;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar fullName = !string.IsNullOrEmpty (FullName) ? FullName + DirectorySeparator + name : name;\n\t\t\tencodedName = Engine.EncodeMailboxName (fullName);\n\t\t\tstring command;\n\n\t\t\tif (uses.Length > 0)\n\t\t\t\tcommand = string.Format (\"CREATE %S (USE ({0}))\\r\\n\", uses);\n\t\t\telse\n\t\t\t\tcommand = \"CREATE %S\\r\\n\";\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, command, encodedName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUses\">A list of special uses for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"specialUses\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty or invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailFolder.DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the CREATE-SPECIAL-USE extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IMailFolder? Create (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCreateCommand (name, specialUses, cancellationToken, out var encodedName);\n\n\t\t\treturn Create (ic, encodedName, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously create a new subfolder with the given name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new subfolder with the given name.\n\t\t/// </remarks>\n\t\t/// <returns>The created folder.</returns>\n\t\t/// <param name=\"name\">The name of the folder to create.</param>\n\t\t/// <param name=\"specialUses\">A list of special uses for the folder being created.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"specialUses\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty or invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"MailFolder.DirectorySeparator\"/> is nil, and thus child folders cannot be created.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the CREATE-SPECIAL-USE extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<IMailFolder?> CreateAsync (string name, IEnumerable<SpecialFolder> specialUses, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCreateCommand (name, specialUses, cancellationToken, out var encodedName);\n\n\t\t\treturn CreateAsync (ic, encodedName, true, cancellationToken);\n\t\t}\n\n\t\tImapCommand QueueRenameCommand (IMailFolder parent, string name, CancellationToken cancellationToken, out string encodedName)\n\t\t{\n\t\t\tif (parent == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (parent));\n\n\t\t\tif (parent == this)\n\t\t\t\tthrow new ArgumentException (\"Cannot rename a folder using itself as the new parent folder.\", nameof (parent));\n\n\t\t\tif (parent is not ImapFolder || ((ImapFolder) parent).Engine != Engine)\n\t\t\t\tthrow new ArgumentException (\"The parent folder does not belong to this ImapClient.\", nameof (parent));\n\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif (!ImapEngine.IsValidMailboxName (name, DirectorySeparator))\n\t\t\t\tthrow new ArgumentException (\"The name is not a legal folder name.\", nameof (name));\n\n\t\t\tif (IsNamespace || (Attributes & FolderAttributes.Inbox) != 0)\n\t\t\t\tthrow new InvalidOperationException (\"Cannot rename this folder.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\tstring newFullName;\n\n\t\t\tif (!string.IsNullOrEmpty (parent.FullName))\n\t\t\t\tnewFullName = parent.FullName + parent.DirectorySeparator + name;\n\t\t\telse\n\t\t\t\tnewFullName = name;\n\n\t\t\tencodedName = Engine.EncodeMailboxName (newFullName);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"RENAME %F %S\\r\\n\", this, encodedName);\n\t\t}\n\n\t\tvoid ProcessRenameResponse (ImapCommand ic, IMailFolder parent, string name, string encodedName)\n\t\t{\n\t\t\tvar oldFullName = FullName;\n\n\t\t\tProcessResponseCodes (ic, this);\n\n\t\t\tic.ThrowIfNotOk (\"RENAME\");\n\n\t\t\tEngine.FolderCache.Remove (EncodedName);\n\t\t\tEngine.FolderCache[encodedName] = this;\n\n\t\t\tParentFolder = parent;\n\n\t\t\tFullName = Engine.DecodeMailboxName (encodedName);\n\t\t\tEncodedName = encodedName;\n\t\t\tName = name;\n\n\t\t\tReset ();\n\n\t\t\tif (Engine.Selected == this) {\n\t\t\t\tEngine.State = ImapEngineState.Authenticated;\n\t\t\t\tEngine.Selected = null;\n\t\t\t\tOnClosed ();\n\t\t\t}\n\n\t\t\tOnRenamed (oldFullName, FullName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Rename the folder to exist with a new name under a new parent folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Renames the folder to exist with a new name under a new parent folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"parent\">The new parent folder.</param>\n\t\t/// <param name=\"name\">The new name of the folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"parent\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"parent\"/> does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is not a legal folder name.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be renamed (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Rename (IMailFolder parent, string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueRenameCommand (parent, name, cancellationToken, out var encodedName);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessRenameResponse (ic, parent, name, encodedName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously rename the folder to exist with a new name under a new parent folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Renames the folder to exist with a new name under a new parent folder.\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"parent\">The new parent folder.</param>\n\t\t/// <param name=\"name\">The new name of the folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"parent\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"parent\"/> does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"name\"/> is not a legal folder name.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be renamed (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task RenameAsync (IMailFolder parent, string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueRenameCommand (parent, name, cancellationToken, out var encodedName);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessRenameResponse (ic, parent, name, encodedName);\n\t\t}\n\n\t\tImapCommand QueueDeleteCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsNamespace || (Attributes & FolderAttributes.Inbox) != 0)\n\t\t\t\tthrow new InvalidOperationException (\"Cannot delete this folder.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"DELETE %F\\r\\n\", this);\n\t\t}\n\n\t\tvoid ProcessDeleteResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, this);\n\n\t\t\tic.ThrowIfNotOk (\"DELETE\");\n\n\t\t\tReset ();\n\n\t\t\tif (Engine.Selected == this) {\n\t\t\t\tEngine.State = ImapEngineState.Authenticated;\n\t\t\t\tEngine.Selected = null;\n\t\t\t\tOnClosed ();\n\t\t\t}\n\n\t\t\tAttributes |= FolderAttributes.NonExistent;\n\t\t\tOnDeleted ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Delete the folder on the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Deletes the folder on the IMAP server.</para>\n\t\t/// <note type=\"note\">This method will not delete any child folders.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Delete (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueDeleteCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessDeleteResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously delete the folder on the IMAP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Deletes the folder on the IMAP server.</para>\n\t\t/// <note type=\"note\">This method will not delete any child folders.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The folder cannot be deleted (it is either a namespace or the Inbox).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task DeleteAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueDeleteCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessDeleteResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueSubscribeCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (false, false);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"SUBSCRIBE %F\\r\\n\", this);\n\t\t}\n\n\t\tvoid ProcessSubscribeResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"SUBSCRIBE\");\n\n\t\t\tif ((Attributes & FolderAttributes.Subscribed) == 0) {\n\t\t\t\tAttributes |= FolderAttributes.Subscribed;\n\n\t\t\t\tOnSubscribed ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Subscribe the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Subscribes the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Subscribe (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSubscribeCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessSubscribeResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously subscribe the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Subscribes the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task SubscribeAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSubscribeCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessSubscribeResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueUnsubscribeCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (false, false);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"UNSUBSCRIBE %F\\r\\n\", this);\n\t\t}\n\n\t\tvoid ProcessUnsubscribeResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"UNSUBSCRIBE\");\n\n\t\t\tif ((Attributes & FolderAttributes.Subscribed) != 0) {\n\t\t\t\tAttributes &= ~FolderAttributes.Subscribed;\n\n\t\t\t\tOnUnsubscribed ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Unsubscribe the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Unsubscribes the folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Unsubscribe (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueUnsubscribeCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessUnsubscribeResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously unsubscribe the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Unsubscribes the folder.\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task UnsubscribeAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueUnsubscribeCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessUnsubscribeResponse (ic);\n\t\t}\n\n\t\tbool TryQueueGetSubfoldersCommand (StatusItems items, bool subscribedOnly, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic, [NotNullWhen (true)] out List<ImapFolder>? list, out bool status)\n\t\t{\n\t\t\tCheckState (false, false);\n\n\t\t\t// Any folder with a nil directory separator cannot have children.\n\t\t\tif (DirectorySeparator == '\\0') {\n\t\t\t\tstatus = false;\n\t\t\t\tlist = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Note: folder names can contain wildcards (including '*' and '%'), so replace '*' with '%'\n\t\t\t// in order to reduce the list of folders returned by our LIST command.\n\t\t\tvar pattern = new StringBuilder (EncodedName.Length + 2);\n\t\t\tpattern.Append (EncodedName);\n\t\t\tfor (int i = 0; i < pattern.Length; i++) {\n\t\t\t\tif (pattern[i] == '*')\n\t\t\t\t\tpattern[i] = '%';\n\t\t\t}\n\t\t\tif (pattern.Length > 0)\n\t\t\t\tpattern.Append (DirectorySeparator);\n\t\t\tpattern.Append ('%');\n\n\t\t\tstatus = items != StatusItems.None;\n\t\t\tlist = new List<ImapFolder> ();\n\n\t\t\tvar command = new StringBuilder ();\n\t\t\tvar returnsSubscribed = false;\n\t\t\tvar lsub = subscribedOnly;\n\n\t\t\tif (subscribedOnly) {\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\tcommand.Append (\"LIST (SUBSCRIBED)\");\n\t\t\t\t\treturnsSubscribed = true;\n\t\t\t\t\tlsub = false;\n\t\t\t\t} else {\n\t\t\t\t\tcommand.Append (\"LSUB\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcommand.Append (\"LIST\");\n\t\t\t}\n\n\t\t\tcommand.Append (\" \\\"\\\" %S\");\n\n\t\t\tif (!lsub) {\n\t\t\t\tif (items != StatusItems.None && (Engine.Capabilities & ImapCapabilities.ListStatus) != 0) {\n\t\t\t\t\tcommand.Append (\" RETURN (\");\n\n\t\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\t\tif (!subscribedOnly) {\n\t\t\t\t\t\t\tcommand.Append (\"SUBSCRIBED \");\n\t\t\t\t\t\t\treturnsSubscribed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommand.Append (\"CHILDREN \");\n\t\t\t\t\t}\n\n\t\t\t\t\tcommand.Append (\"STATUS (\");\n\t\t\t\t\tcommand.Append (Engine.GetStatusQuery (items));\n\t\t\t\t\tcommand.Append (\"))\");\n\t\t\t\t\tstatus = false;\n\t\t\t\t} else if ((Engine.Capabilities & ImapCapabilities.ListExtended) != 0) {\n\t\t\t\t\tcommand.Append (\" RETURN (\");\n\t\t\t\t\tif (!subscribedOnly) {\n\t\t\t\t\t\tcommand.Append (\"SUBSCRIBED \");\n\t\t\t\t\t\treturnsSubscribed = true;\n\t\t\t\t\t}\n\t\t\t\t\tcommand.Append (\"CHILDREN\");\n\t\t\t\t\tcommand.Append (')');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tic = new ImapCommand (Engine, cancellationToken, null, command.ToString (), pattern.ToString ());\n\t\t\tic.RegisterUntaggedHandler (lsub ? \"LSUB\" : \"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.ListReturnsSubscribed = returnsSubscribed;\n\t\t\tic.UserData = list;\n\t\t\tic.Lsub = lsub;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tIList<IMailFolder> ProcessGetSubfoldersResponse (ImapCommand ic, List<ImapFolder> list, out bool unparented)\n\t\t{\n\t\t\t// Note: Due to the fact that folders can contain wildcards in them, we'll need to\n\t\t\t// filter out any folders that are not children of this folder.\n\t\t\tvar prefix = FullName.Length > 0 ? FullName + DirectorySeparator : string.Empty;\n\t\t\tprefix = ImapUtils.CanonicalizeMailboxName (prefix, DirectorySeparator);\n\t\t\tvar children = new List<IMailFolder> ();\n\t\t\tunparented = false;\n\n\t\t\tforeach (var folder in list) {\n\t\t\t\tvar canonicalFullName = ImapUtils.CanonicalizeMailboxName (folder.FullName, folder.DirectorySeparator);\n\t\t\t\tvar canonicalName = ImapUtils.IsInbox (folder.FullName) ? \"INBOX\" : folder.Name;\n\n\t\t\t\tif (!canonicalFullName.StartsWith (prefix, StringComparison.Ordinal)) {\n\t\t\t\t\tunparented |= folder.ParentFolder == null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (string.Compare (canonicalFullName, prefix.Length, canonicalName, 0, canonicalName.Length, StringComparison.Ordinal) != 0) {\n\t\t\t\t\tunparented |= folder.ParentFolder == null;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfolder.ParentFolder = this;\n\t\t\t\tchildren.Add (folder);\n\t\t\t}\n\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (ic.Lsub ? \"LSUB\" : \"LIST\");\n\n\t\t\treturn children;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the subfolders.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<IMailFolder> GetSubfolders (StatusItems items, bool subscribedOnly = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueGetSubfoldersCommand (items, subscribedOnly, cancellationToken, out var ic, out var list, out var status))\n\t\t\t\treturn Array.Empty<IMailFolder> ();\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tvar children = ProcessGetSubfoldersResponse (ic, list, out var unparented);\n\n\t\t\t// Note: if any folders returned in the LIST command are unparented, have the ImapEngine look up their\n\t\t\t// parent folders now so that they are not left in an inconsistent state.\n\t\t\tif (unparented)\n\t\t\t\tEngine.LookupParentFolders (list, cancellationToken);\n\n\t\t\tif (status) {\n\t\t\t\tfor (int i = 0; i < children.Count; i++) {\n\t\t\t\t\tif (children[i].Exists)\n\t\t\t\t\t\t((ImapFolder) children[i]).Status (items, false, cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn children;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the subfolders.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the subfolders.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolders.</returns>\n\t\t/// <param name=\"items\">The status items to pre-populate.</param>\n\t\t/// <param name=\"subscribedOnly\">If set to <see langword=\"true\" />, only subscribed folders will be listed.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<IMailFolder>> GetSubfoldersAsync (StatusItems items, bool subscribedOnly = false, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueGetSubfoldersCommand (items, subscribedOnly, cancellationToken, out var ic, out var list, out var status))\n\t\t\t\treturn Array.Empty<IMailFolder> ();\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tvar children = ProcessGetSubfoldersResponse (ic, list, out var unparented);\n\n\t\t\t// Note: if any folders returned in the LIST command are unparented, have the ImapEngine look up their\n\t\t\t// parent folders now so that they are not left in an inconsistent state.\n\t\t\tif (unparented)\n\t\t\t\tawait Engine.LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (status) {\n\t\t\t\tfor (int i = 0; i < children.Count; i++) {\n\t\t\t\t\tif (children[i].Exists)\n\t\t\t\t\t\tawait ((ImapFolder) children[i]).StatusAsync (items, false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn children;\n\t\t}\n\n\t\tbool TryQueueGetSubfolderCommand (string name, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic, [NotNullWhen (true)] out List<ImapFolder>? list, [NotNullWhen (true)] out string? fullName, [NotNullWhen (true)] out string? encodedName, out ImapFolder? folder)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif (!ImapEngine.IsValidMailboxName (name, DirectorySeparator))\n\t\t\t\tthrow new ArgumentException (\"The name of the subfolder is invalid.\", nameof (name));\n\n\t\t\tCheckState (false, false);\n\n\t\t\t// Any folder with a nil directory separator cannot have children.\n\t\t\tif (DirectorySeparator == '\\0') {\n\t\t\t\tencodedName = null;\n\t\t\t\tfullName = null;\n\t\t\t\tfolder = null;\n\t\t\t\tlist = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfullName = FullName.Length > 0 ? FullName + DirectorySeparator + name : name;\n\t\t\tencodedName = Engine.EncodeMailboxName (fullName);\n\n\t\t\tif (Engine.TryGetCachedFolder (encodedName, out folder)) {\n\t\t\t\tlist = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Note: folder names can contain wildcards (including '*' and '%'), so replace '*' with '%'\n\t\t\t// in order to reduce the list of folders returned by our LIST command.\n\t\t\tvar pattern = encodedName.Replace ('*', '%');\n\n\t\t\tic = new ImapCommand (Engine, cancellationToken, null, \"LIST \\\"\\\" %S\\r\\n\", pattern);\n\t\t\tic.RegisterUntaggedHandler (\"LIST\", ImapUtils.UntaggedListHandler);\n\t\t\tic.UserData = list = new List<ImapFolder> ();\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tImapFolder? ProcessGetSubfolderResponse (ImapCommand ic, List<ImapFolder> list, string encodedName)\n\t\t{\n\t\t\tImapFolder? folder;\n\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"LIST\");\n\n\t\t\tif ((folder = ImapEngine.GetFolder (list, encodedName)) != null)\n\t\t\t\tfolder.ParentFolder = this;\n\n\t\t\treturn folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified subfolder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified subfolder.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolder.</returns>\n\t\t/// <param name=\"name\">The name of the subfolder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is either an empty string or contains the <see cref=\"MailFolder.DirectorySeparator\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The requested folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IMailFolder GetSubfolder (string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueGetSubfolderCommand (name, cancellationToken, out var ic, out var list, out var fullName, out var encodedName, out var folder))\n\t\t\t\treturn folder ?? throw new FolderNotFoundException (name);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tfolder = ProcessGetSubfolderResponse (ic, list, encodedName);\n\n\t\t\tif (list.Count > 1 || folder == null) {\n\t\t\t\t// Note: if any folders returned in the LIST command are unparented, have the ImapEngine look up their\n\t\t\t\t// parent folders now so that they are not left in an inconsistent state.\n\t\t\t\tEngine.LookupParentFolders (list, cancellationToken);\n\t\t\t}\n\n\t\t\tif (folder == null)\n\t\t\t\tthrow new FolderNotFoundException (fullName);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified subfolder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified subfolder.\n\t\t/// </remarks>\n\t\t/// <returns>The subfolder.</returns>\n\t\t/// <param name=\"name\">The name of the subfolder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is either an empty string or contains the <see cref=\"MailFolder.DirectorySeparator\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The requested folder could not be found.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IMailFolder> GetSubfolderAsync (string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueGetSubfolderCommand (name, cancellationToken, out var ic, out var list, out var fullName, out var encodedName, out var folder))\n\t\t\t\treturn folder ?? throw new FolderNotFoundException (name);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tfolder = ProcessGetSubfolderResponse (ic, list, encodedName);\n\n\t\t\tif (list.Count > 1 || folder == null) {\n\t\t\t\t// Note: if any folders returned in the LIST command are unparented, have the ImapEngine look up their\n\t\t\t\t// parent folders now so that they are not left in an inconsistent state.\n\t\t\t\tawait Engine.LookupParentFoldersAsync (list, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tif (folder == null)\n\t\t\t\tthrow new FolderNotFoundException (fullName);\n\n\t\t\treturn folder;\n\t\t}\n\n\t\tImapCommand QueueCheckCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (true, false);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, this, \"CHECK\\r\\n\");\n\t\t}\n\n\t\tvoid ProcessCheckResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"CHECK\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Force the server to sync its in-memory state with its disk state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>CHECK</c> command forces the IMAP server to sync its\n\t\t/// in-memory state with its disk state.</para>\n\t\t/// <para>For more information about the <c>CHECK</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.4.1\">rfc350101</a>.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Check (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCheckCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessCheckResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously force the server to sync its in-memory state with its disk state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>CHECK</c> command forces the IMAP server to sync its\n\t\t/// in-memory state with its disk state.</para>\n\t\t/// <para>For more information about the <c>CHECK</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.4.1\">rfc350101</a>.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task CheckAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCheckCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessCheckResponse (ic);\n\t\t}\n\n\t\tImapCommand? QueueStatusCommand (StatusItems items, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Status) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the STATUS command.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\tif (items == StatusItems.None)\n\t\t\t\treturn null;\n\n\t\t\tvar command = string.Format (\"STATUS %F ({0})\\r\\n\", Engine.GetStatusQuery (items));\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, command, this);\n\t\t}\n\n\t\tvoid ProcessStatusResponse (ImapCommand ic, bool throwNotFound)\n\t\t{\n\t\t\tProcessResponseCodes (ic, this, throwNotFound);\n\n\t\t\tic.ThrowIfNotOk (\"STATUS\");\n\t\t}\n\n\t\tinternal void Status (StatusItems items, bool throwNotFound, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueStatusCommand (items, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessStatusResponse (ic, throwNotFound);\n\t\t}\n\n\t\tinternal async Task StatusAsync (StatusItems items, bool throwNotFound, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueStatusCommand (items, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessStatusResponse (ic, throwNotFound);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Update the values of the specified items.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Updates the values of the specified items.</para>\n\t\t/// <para>The <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/> method\n\t\t/// MUST NOT be used on a folder that is already in the opened state. Instead, other ways\n\t\t/// of getting the desired information should be used.</para>\n\t\t/// <para>For example, a common use for the <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t\t/// method is to get the number of unread messages in the folder. When the folder is open, however, it is\n\t\t/// possible to use the <see cref=\"MailFolder.Search(MailKit.Search.SearchQuery, System.Threading.CancellationToken)\"/>\n\t\t/// method to query for the list of unread messages.</para>\n\t\t/// <para>For more information about the <c>STATUS</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.3.10\">rfc3501</a>.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"items\">The items to update.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the STATUS command.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Status (StatusItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tStatus (items, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously update the values of the specified items.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Updates the values of the specified items.</para>\n\t\t/// <para>The <see cref=\"Status(StatusItems, System.Threading.CancellationToken)\"/> method\n\t\t/// MUST NOT be used on a folder that is already in the opened state. Instead, other ways\n\t\t/// of getting the desired information should be used.</para>\n\t\t/// <para>For example, a common use for the <see cref=\"Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t\t/// method is to get the number of unread messages in the folder. When the folder is open, however, it is\n\t\t/// possible to use the <see cref=\"MailFolder.Search(MailKit.Search.SearchQuery, System.Threading.CancellationToken)\"/>\n\t\t/// method to query for the list of unread messages.</para>\n\t\t/// <para>For more information about the <c>STATUS</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.3.10\">rfc3501</a>.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"items\">The items to update.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the STATUS command.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task StatusAsync (StatusItems items, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn StatusAsync (items, true, cancellationToken);\n\t\t}\n\n\t\tstatic void ParseAcl (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ACL\", \"{0}\");\n\t\t\tvar acl = (AccessControlList) ic.UserData!;\n\t\t\tstring name, rights;\n\t\t\tImapToken token;\n\n\t\t\t// read the mailbox name\n\t\t\tImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\tdo {\n\t\t\t\tname = ImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\t\t\t\trights = ImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\t\tacl.Add (new AccessControl (name, rights));\n\n\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t}\n\n\t\tstatic async Task ParseAclAsync (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ACL\", \"{0}\");\n\t\t\tvar acl = (AccessControlList) ic.UserData!;\n\t\t\tstring name, rights;\n\t\t\tImapToken token;\n\n\t\t\t// read the mailbox name\n\t\t\tawait ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\tdo {\n\t\t\t\tname = await ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\trights = await ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tacl.Add (new AccessControl (name, rights));\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t}\n\n\t\tstatic Task UntaggedAclHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseAclAsync (engine, ic);\n\n\t\t\tParseAcl (engine, ic);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tImapCommand QueueGetAccessControlListCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Acl) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ACL extension.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, \"GETACL %F\\r\\n\", this);\n\t\t\tic.RegisterUntaggedHandler (\"ACL\", UntaggedAclHandler);\n\t\t\tic.UserData = new AccessControlList ();\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tAccessControlList ProcessGetAccessControlListResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"GETACL\");\n\n\t\t\treturn (AccessControlList) ic.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the complete access control list for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the complete access control list for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The access control list.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override AccessControlList GetAccessControlList (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetAccessControlListCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetAccessControlListResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the complete access control list for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the complete access control list for the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The access control list.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task<AccessControlList> GetAccessControlListAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetAccessControlListCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetAccessControlListResponse (ic);\n\t\t}\n\n\t\tstatic void ParseListRights (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"LISTRIGHTS\", \"{0}\");\n\t\t\tvar access = (AccessRights) ic.UserData!;\n\t\t\tImapToken token;\n\n\t\t\t// read the mailbox name\n\t\t\tImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\t// read the identity name\n\t\t\tImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\tdo {\n\t\t\t\tvar rights = ImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\t\taccess.AddRange (rights);\n\n\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t}\n\n\t\tstatic async Task ParseListRightsAsync (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"LISTRIGHTS\", \"{0}\");\n\t\t\tvar access = (AccessRights) ic.UserData!;\n\t\t\tImapToken token;\n\n\t\t\t// read the mailbox name\n\t\t\tawait ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t// read the identity name\n\t\t\tawait ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\tdo {\n\t\t\t\tvar rights = await ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\taccess.AddRange (rights);\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t}\n\n\t\tstatic Task UntaggedListRightsHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseListRightsAsync (engine, ic);\n\n\t\t\tParseListRights (engine, ic);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tImapCommand QueueGetAccessRightsCommand (string name, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Acl) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ACL extension.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, \"LISTRIGHTS %F %S\\r\\n\", this, name);\n\t\t\tic.RegisterUntaggedHandler (\"LISTRIGHTS\", UntaggedListRightsHandler);\n\t\t\tic.UserData = new AccessRights ();\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tAccessRights ProcessGetAccessRightsResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"LISTRIGHTS\");\n\n\t\t\treturn (AccessRights) ic.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the access rights for a particular identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for a particular identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override AccessRights GetAccessRights (string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetAccessRightsCommand (name, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for a particular identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for a particular identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"name\">The identifier name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task<AccessRights> GetAccessRightsAsync (string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetAccessRightsCommand (name, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetAccessRightsResponse (ic);\n\t\t}\n\n\t\tstatic void ParseMyRights (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"MYRIGHTS\", \"{0}\");\n\t\t\tvar access = (AccessRights) ic.UserData!;\n\n\t\t\t// read the mailbox name\n\t\t\tImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\t// read the access rights\n\t\t\taccess.AddRange (ImapUtils.ReadStringToken (engine, format, ic.CancellationToken));\n\t\t}\n\n\t\tstatic async Task ParseMyRightsAsync (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"MYRIGHTS\", \"{0}\");\n\t\t\tvar access = (AccessRights) ic.UserData!;\n\n\t\t\t// read the mailbox name\n\t\t\tawait ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t// read the access rights\n\t\t\taccess.AddRange (await ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false));\n\t\t}\n\n\t\tstatic Task UntaggedMyRightsHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseMyRightsAsync (engine, ic);\n\n\t\t\tParseMyRights (engine, ic);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tImapCommand QueueGetMyAccessRightsCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Acl) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ACL extension.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, \"MYRIGHTS %F\\r\\n\", this);\n\t\t\tic.RegisterUntaggedHandler (\"MYRIGHTS\", UntaggedMyRightsHandler);\n\t\t\tic.UserData = new AccessRights ();\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tAccessRights ProcessGetMyAccessRightsResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"MYRIGHTS\");\n\n\t\t\treturn (AccessRights) ic.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the access rights for the current authenticated user.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for the current authenticated user.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override AccessRights GetMyAccessRights (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMyAccessRightsCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetMyAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for the current authenticated user.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the access rights for the current authenticated user.\n\t\t/// </remarks>\n\t\t/// <returns>The access rights.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task<AccessRights> GetMyAccessRightsAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMyAccessRightsCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetMyAccessRightsResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueModifyAccessRightsCommand (string name, string action, AccessRights rights, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif (rights == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (rights));\n\n\t\t\tif (action.Length != 0 && rights.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No rights were specified.\", nameof (rights));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Acl) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ACL extension.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"SETACL %F %S %S\\r\\n\", this, name, action + rights);\n\t\t}\n\n\t\tvoid ProcessModifyAccessRightsResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"SETACL\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Add access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// No rights were specified.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override void AddAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueModifyAccessRightsCommand (name, \"+\", rights, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessModifyAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously add access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// No rights were specified.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task AddAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueModifyAccessRightsCommand (name, \"+\", rights, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessModifyAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// No rights were specified.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override void RemoveAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueModifyAccessRightsCommand (name, \"-\", rights, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessModifyAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the given access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// No rights were specified.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task RemoveAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueModifyAccessRightsCommand (name, \"-\", rights, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessModifyAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override void SetAccessRights (string name, AccessRights rights, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueModifyAccessRightsCommand (name, string.Empty, rights, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessModifyAccessRightsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the access rights for the specified identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the access rights for the specified identity.\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"rights\">The access rights.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"name\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"rights\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task SetAccessRightsAsync (string name, AccessRights rights, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueModifyAccessRightsCommand (name, string.Empty, rights, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessModifyAccessRightsResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueRemoveAccessCommand (string name, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Acl) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ACL extension.\");\n\n\t\t\tCheckState (false, false);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, null, \"DELETEACL %F %S\\r\\n\", this, name);\n\t\t}\n\n\t\tvoid ProcessRemoveAccessResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"DELETEACL\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Remove all access rights for the given identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all access rights for the given identity.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override void RemoveAccess (string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueRemoveAccessCommand (name, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessRemoveAccessResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously remove all access rights for the given identity.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes all access rights for the given identity.\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"name\">The identity name.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the ACL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The command failed.\n\t\t/// </exception>\n\t\tpublic override async Task RemoveAccessAsync (string name, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueRemoveAccessCommand (name, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessRemoveAccessResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueGetMetadataCommand (MetadataTag tag, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (false, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Metadata) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the METADATA extension.\");\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, \"GETMETADATA %F %S\\r\\n\", this, tag.Id);\n\t\t\tic.RegisterUntaggedHandler (\"METADATA\", ImapUtils.UntaggedMetadataHandler);\n\t\t\tvar metadata = new MetadataCollection ();\n\t\t\tic.UserData = metadata;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tstring? ProcessGetMetadataResponse (ImapCommand ic, MetadataTag tag)\n\t\t{\n\t\t\tvar metadata = (MetadataCollection) ic.UserData!;\n\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"GETMETADATA\");\n\n\t\t\tstring? value = null;\n\n\t\t\tfor (int i = 0; i < metadata.Count; i++) {\n\t\t\t\tif (metadata[i].EncodedName == EncodedName && metadata[i].Tag.Id == tag.Id) {\n\t\t\t\t\tvalue = metadata[i].Value;\n\t\t\t\t\tmetadata.RemoveAt (i);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tEngine.ProcessMetadataChanges (metadata);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override string? GetMetadata (MetadataTag tag, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMetadataCommand (tag, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, tag);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata value.</returns>\n\t\t/// <param name=\"tag\">The metadata tag.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<string?> GetMetadataAsync (MetadataTag tag, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMetadataCommand (tag, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, tag);\n\t\t}\n\n\t\tImapCommand? QueueGetMetadataCommand (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (tags == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (tags));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Metadata) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the METADATA extension.\");\n\n\t\t\tvar command = new StringBuilder (\"GETMETADATA %F\");\n\t\t\tvar args = new List<object> ();\n\t\t\tbool hasOptions = false;\n\n\t\t\tif (options.MaxSize.HasValue || options.Depth != 0) {\n\t\t\t\tcommand.Append (\" (\");\n\t\t\t\tif (options.MaxSize.HasValue) {\n\t\t\t\t\tcommand.Append (\"MAXSIZE \");\n\t\t\t\t\tcommand.Append (options.MaxSize.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\t\tcommand.Append (' ');\n\t\t\t\t}\n\t\t\t\tif (options.Depth > 0) {\n\t\t\t\t\tcommand.Append (\"DEPTH \");\n\t\t\t\t\tcommand.Append (options.Depth == int.MaxValue ? \"infinity\" : \"1\");\n\t\t\t\t\tcommand.Append (' ');\n\t\t\t\t}\n\t\t\t\tcommand[command.Length - 1] = ')';\n\t\t\t\tcommand.Append (' ');\n\t\t\t\thasOptions = true;\n\t\t\t}\n\n\t\t\targs.Add (this);\n\n\t\t\tint startIndex = command.Length;\n\t\t\tforeach (var tag in tags) {\n\t\t\t\tcommand.Append (\" %S\");\n\t\t\t\targs.Add (tag.Id);\n\t\t\t}\n\n\t\t\tif (hasOptions) {\n\t\t\t\tcommand[startIndex] = '(';\n\t\t\t\tcommand.Append (')');\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tif (args.Count == 1)\n\t\t\t\treturn null;\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, command.ToString (), args.ToArray ());\n\t\t\tic.RegisterUntaggedHandler (\"METADATA\", ImapUtils.UntaggedMetadataHandler);\n\t\t\tic.UserData = new MetadataCollection ();\n\t\t\toptions.LongEntries = 0;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tMetadataCollection ProcessGetMetadataResponse (ImapCommand ic, MetadataOptions options)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"GETMETADATA\");\n\n\t\t\tvar rc = ic.GetResponseCode (ImapResponseCodeType.Metadata);\n\t\t\tif (rc is MetadataResponseCode metadata && metadata.SubType == MetadataResponseCodeSubType.LongEntries)\n\t\t\t\toptions.LongEntries = metadata.Value;\n\n\t\t\treturn Engine.FilterMetadata ((MetadataCollection) ic.UserData!, EncodedName);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMetadataCommand (options, tags, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn new MetadataCollection ();\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, options);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>The requested metadata.</returns>\n\t\t/// <param name=\"options\">The metadata options.</param>\n\t\t/// <param name=\"tags\">The metadata tags.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"tags\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<MetadataCollection> GetMetadataAsync (MetadataOptions options, IEnumerable<MetadataTag> tags, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetMetadataCommand (options, tags, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn new MetadataCollection ();\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetMetadataResponse (ic, options);\n\t\t}\n\n\t\tImapCommand? QueueSetMetadataCommand (MetadataCollection metadata, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (metadata == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (metadata));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Metadata) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the METADATA extension.\");\n\n\t\t\tif (metadata.Count == 0)\n\t\t\t\treturn null;\n\n\t\t\tvar command = new StringBuilder (\"SETMETADATA %F (\");\n\t\t\tvar args = new List<object> {\n\t\t\t\tthis\n\t\t\t};\n\n\t\t\tfor (int i = 0; i < metadata.Count; i++) {\n\t\t\t\tif (i > 0)\n\t\t\t\t\tcommand.Append (' ');\n\n\t\t\t\tif (metadata[i].Value != null) {\n\t\t\t\t\tcommand.Append (\"%S %S\");\n\t\t\t\t\targs.Add (metadata[i].Tag.Id);\n\t\t\t\t\targs.Add (metadata[i].Value);\n\t\t\t\t} else {\n\t\t\t\t\tcommand.Append (\"%S NIL\");\n\t\t\t\t\targs.Add (metadata[i].Tag.Id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcommand.Append (\")\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, command.ToString (), args.ToArray ());\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessSetMetadataResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"SETMETADATA\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void SetMetadata (MetadataCollection metadata, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSetMetadataCommand (metadata, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessSetMetadataResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the specified metadata.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the specified metadata.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"metadata\">The metadata.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"metadata\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the METADATA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task SetMetadataAsync (MetadataCollection metadata, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSetMetadataCommand (metadata, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessSetMetadataResponse (ic);\n\t\t}\n\n\t\tclass Quota\n\t\t{\n\t\t\tpublic uint? MessageLimit;\n\t\t\tpublic uint? StorageLimit;\n\t\t\tpublic uint? CurrentMessageCount;\n\t\t\tpublic uint? CurrentStorageSize;\n\t\t}\n\n\t\tclass QuotaContext\n\t\t{\n\t\t\tpublic QuotaContext ()\n\t\t\t{\n\t\t\t\tQuotas = new Dictionary<string, Quota> ();\n\t\t\t\tQuotaRoots = new List<string> ();\n\t\t\t}\n\n\t\t\tpublic List<string> QuotaRoots {\n\t\t\t\tget; private set;\n\t\t\t}\n\n\t\t\tpublic Dictionary<string, Quota> Quotas {\n\t\t\t\tget; private set;\n\t\t\t}\n\t\t}\n\n\t\tstatic void ParseQuotaRoot (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"QUOTAROOT\", \"{0}\");\n\t\t\tvar ctx = (QuotaContext) ic.UserData!;\n\n\t\t\t// The first token should be the mailbox name\n\t\t\tImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\n\t\t\t// ...followed by 0 or more quota roots\n\t\t\tvar token = engine.PeekToken (ic.CancellationToken);\n\n\t\t\twhile (token.Type != ImapTokenType.Eoln) {\n\t\t\t\tvar root = ImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\t\t\t\tctx.QuotaRoots.Add (root);\n\n\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task ParseQuotaRootAsync (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"QUOTAROOT\", \"{0}\");\n\t\t\tvar ctx = (QuotaContext) ic.UserData!;\n\n\t\t\t// The first token should be the mailbox name\n\t\t\tawait ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t// ...followed by 0 or more quota roots\n\t\t\tvar token = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\twhile (token.Type != ImapTokenType.Eoln) {\n\t\t\t\tvar root = await ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\tctx.QuotaRoots.Add (root);\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an untagged QUOTAROOT response.\n\t\t/// </summary>\n\t\t/// <returns>An asynchronous task.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <param name=\"doAsync\">Whether or not asynchronous IO methods should be used.</param>\n\t\tstatic Task UntaggedQuotaRootHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseQuotaRootAsync (engine, ic);\n\n\t\t\tParseQuotaRoot (engine, ic);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tstatic void ParseQuota (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"QUOTA\", \"{0}\");\n\t\t\tvar quotaRoot = ImapUtils.ReadStringToken (engine, format, ic.CancellationToken);\n\t\t\tvar ctx = (QuotaContext) ic.UserData!;\n\t\t\tvar quota = new Quota ();\n\n\t\t\tvar token = engine.ReadToken (ic.CancellationToken);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tulong used, limit;\n\t\t\t\tstring resource;\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, format, token);\n\n\t\t\t\tresource = (string) token.Value;\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t// Note: We parse these quota values as UInt64 because GMail uses 64bit integer values.\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1602 for details.\n\t\t\t\tused = ImapEngine.ParseNumber64 (token, false, format, token);\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t// Note: We parse these quota values as UInt64 because GMail uses 64bit integer values.\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1602 for details.\n\t\t\t\tlimit = ImapEngine.ParseNumber64 (token, false, format, token);\n\n\t\t\t\tif (resource.Equals (\"MESSAGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tquota.CurrentMessageCount = (uint) (used & 0xffffffff);\n\t\t\t\t\tquota.MessageLimit = (uint) (limit & 0xffffffff);\n\t\t\t\t} else if (resource.Equals (\"STORAGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tquota.CurrentStorageSize = (uint) (used & 0xffffffff);\n\t\t\t\t\tquota.StorageLimit = (uint) (limit & 0xffffffff);\n\t\t\t\t}\n\n\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\t\t\t}\n\n\t\t\t// read the closing paren\n\t\t\tengine.ReadToken (ic.CancellationToken);\n\n\t\t\tctx.Quotas[quotaRoot] = quota;\n\t\t}\n\n\t\tstatic async Task ParseQuotaAsync (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"QUOTA\", \"{0}\");\n\t\t\tvar quotaRoot = await ImapUtils.ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\t\t\tvar ctx = (QuotaContext) ic.UserData!;\n\t\t\tvar quota = new Quota ();\n\n\t\t\tvar token = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tulong used, limit;\n\t\t\t\tstring resource;\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, format, token);\n\n\t\t\t\tresource = (string) token.Value;\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// Note: We parse these quota values as UInt64 because GMail uses 64bit integer values.\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1602 for details.\n\t\t\t\tused = ImapEngine.ParseNumber64 (token, false, format, token);\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// Note: We parse these quota values as UInt64 because GMail uses 64bit integer values.\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1602 for details.\n\t\t\t\tlimit = ImapEngine.ParseNumber64 (token, false, format, token);\n\n\t\t\t\tif (resource.Equals (\"MESSAGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tquota.CurrentMessageCount = (uint) (used & 0xffffffff);\n\t\t\t\t\tquota.MessageLimit = (uint) (limit & 0xffffffff);\n\t\t\t\t} else if (resource.Equals (\"STORAGE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tquota.CurrentStorageSize = (uint) (used & 0xffffffff);\n\t\t\t\t\tquota.StorageLimit = (uint) (limit & 0xffffffff);\n\t\t\t\t}\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\t// read the closing paren\n\t\t\tawait engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\tctx.Quotas[quotaRoot] = quota;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an untagged QUOTA response.\n\t\t/// </summary>\n\t\t/// <returns>An asynchronous task.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <param name=\"doAsync\">Whether or not asynchronous IO methods should be used.</param>\n\t\tstatic Task UntaggedQuotaHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseQuotaAsync (engine, ic);\n\n\t\t\tParseQuota (engine, ic);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tImapCommand QueueGetQuotaCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (false, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Quota) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the QUOTA extension.\");\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, \"GETQUOTAROOT %F\\r\\n\", this);\n\t\t\tvar ctx = new QuotaContext ();\n\n\t\t\tic.RegisterUntaggedHandler (\"QUOTAROOT\", UntaggedQuotaRootHandler);\n\t\t\tic.RegisterUntaggedHandler (\"QUOTA\", UntaggedQuotaHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tbool TryProcessGetQuotaResponse (ImapCommand ic, [NotNullWhen (true)] out string? encodedName, [NotNullWhen (true)] out Quota? quota)\n\t\t{\n\t\t\tvar ctx = (QuotaContext) ic.UserData!;\n\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"GETQUOTAROOT\");\n\n\t\t\tfor (int i = 0; i < ctx.QuotaRoots.Count; i++) {\n\t\t\t\tencodedName = ctx.QuotaRoots[i];\n\n\t\t\t\tif (ctx.Quotas.TryGetValue (encodedName, out quota))\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tencodedName = null;\n\t\t\tquota = null;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the quota information for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the quota information for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"ImapClient.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QUOTA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override FolderQuota GetQuota (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetQuotaCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tif (!TryProcessGetQuotaResponse (ic, out var encodedName, out var quota))\n\t\t\t\treturn new FolderQuota (null);\n\n\t\t\tvar quotaRoot = Engine.GetQuotaRootFolder (encodedName, cancellationToken);\n\n\t\t\treturn new FolderQuota (quotaRoot) {\n\t\t\t\tCurrentMessageCount = quota.CurrentMessageCount,\n\t\t\t\tCurrentStorageSize = quota.CurrentStorageSize,\n\t\t\t\tMessageLimit = quota.MessageLimit,\n\t\t\t\tStorageLimit = quota.StorageLimit\n\t\t\t};\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the quota information for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the quota information for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"ImapClient.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QUOTA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<FolderQuota> GetQuotaAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueGetQuotaCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tif (!TryProcessGetQuotaResponse (ic, out var encodedName, out var quota))\n\t\t\t\treturn new FolderQuota (null);\n\n\t\t\tvar quotaRoot = await Engine.GetQuotaRootFolderAsync (encodedName, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn new FolderQuota (quotaRoot) {\n\t\t\t\tCurrentMessageCount = quota.CurrentMessageCount,\n\t\t\t\tCurrentStorageSize = quota.CurrentStorageSize,\n\t\t\t\tMessageLimit = quota.MessageLimit,\n\t\t\t\tStorageLimit = quota.StorageLimit\n\t\t\t};\n\t\t}\n\n\t\tImapCommand QueueSetQuotaCommand (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (false, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Quota) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the QUOTA extension.\");\n\n\t\t\tvar command = new StringBuilder (\"SETQUOTA %F (\");\n\t\t\tif (messageLimit.HasValue) {\n\t\t\t\tcommand.Append (\"MESSAGE \");\n\t\t\t\tcommand.Append (messageLimit.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tcommand.Append (' ');\n\t\t\t}\n\t\t\tif (storageLimit.HasValue) {\n\t\t\t\tcommand.Append (\"STORAGE \");\n\t\t\t\tcommand.Append (storageLimit.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tcommand.Append (' ');\n\t\t\t}\n\t\t\tcommand[command.Length - 1] = ')';\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, command.ToString (), this);\n\t\t\tvar ctx = new QuotaContext ();\n\n\t\t\tic.RegisterUntaggedHandler (\"QUOTA\", UntaggedQuotaHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tFolderQuota ProcessSetQuotaResponse (ImapCommand ic)\n\t\t{\n\t\t\tvar ctx = (QuotaContext) ic.UserData!;\n\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"SETQUOTA\");\n\n\t\t\tif (ctx.Quotas.TryGetValue (EncodedName, out var quota)) {\n\t\t\t\treturn new FolderQuota (this) {\n\t\t\t\t\tCurrentMessageCount = quota.CurrentMessageCount,\n\t\t\t\t\tCurrentStorageSize = quota.CurrentStorageSize,\n\t\t\t\t\tMessageLimit = quota.MessageLimit,\n\t\t\t\t\tStorageLimit = quota.StorageLimit\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn new FolderQuota (null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the quota limits for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sets the quota limits for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"ImapClient.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"messageLimit\">If not <see langword=\"null\" />, sets the maximum number of messages to allow.</param>\n\t\t/// <param name=\"storageLimit\">If not <see langword=\"null\" />, sets the maximum storage size (in kilobytes).</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QUOTA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override FolderQuota SetQuota (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSetQuotaCommand (messageLimit, storageLimit, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessSetQuotaResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the quota limits for the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sets the quota limits for the folder.</para>\n\t\t/// <para>To determine if a quotas are supported, check the \n\t\t/// <see cref=\"ImapClient.SupportsQuotas\"/> property.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The folder quota.</returns>\n\t\t/// <param name=\"messageLimit\">If not <see langword=\"null\" />, sets the maximum number of messages to allow.</param>\n\t\t/// <param name=\"storageLimit\">If not <see langword=\"null\" />, sets the maximum storage size (in kilobytes).</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the QUOTA extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<FolderQuota> SetQuotaAsync (uint? messageLimit, uint? storageLimit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSetQuotaCommand (messageLimit, storageLimit, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessSetQuotaResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueExpungeCommand (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckState (true, true);\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, this, \"EXPUNGE\\r\\n\");\n\t\t}\n\n\t\tvoid ProcessExpungeResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"EXPUNGE\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Expunge the folder, permanently removing all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>EXPUNGE</c> command permanently removes all messages in the folder\n\t\t/// that have the <see cref=\"MessageFlags.Deleted\"/> flag set.</para>\n\t\t/// <para>For more information about the <c>EXPUNGE</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.4.3\">rfc3501</a>.</para>\n\t\t/// <note type=\"note\">Normally, a <see cref=\"MailFolder.MessageExpunged\"/> event will be emitted\n\t\t/// for each message that is expunged. However, if the IMAP server supports the QRESYNC extension\n\t\t/// and it has been enabled via the <see cref=\"ImapClient.EnableQuickResync(CancellationToken)\"/>\n\t\t/// method, then the <see cref=\"MailFolder.MessagesVanished\"/> event will be emitted rather than\n\t\t/// the <see cref=\"MailFolder.MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Expunge (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueExpungeCommand (cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessExpungeResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously expunge the folder, permanently removing all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <c>EXPUNGE</c> command permanently removes all messages in the folder\n\t\t/// that have the <see cref=\"MessageFlags.Deleted\"/> flag set.</para>\n\t\t/// <para>For more information about the <c>EXPUNGE</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3501#section-6.4.3\">rfc3501</a>.</para>\n\t\t/// <note type=\"note\">Normally, a <see cref=\"MailFolder.MessageExpunged\"/> event will be emitted\n\t\t/// for each message that is expunged. However, if the IMAP server supports the QRESYNC extension\n\t\t/// and it has been enabled via the <see cref=\"ImapClient.EnableQuickResync(CancellationToken)\"/>\n\t\t/// method, then the <see cref=\"MailFolder.MessagesVanished\"/> event will be emitted rather than\n\t\t/// the <see cref=\"MailFolder.MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task ExpungeAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueExpungeCommand (cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessExpungeResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Expunge the specified uids, permanently removing them from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Expunges the specified uids, permanently removing them from the folder.</para>\n\t\t/// <para>If the IMAP server supports the UIDPLUS extension (check the\n\t\t/// <see cref=\"ImapClient.Capabilities\"/> for the <see cref=\"ImapCapabilities.UidPlus\"/>\n\t\t/// flag), then this operation is atomic. Otherwise, MailKit implements this operation\n\t\t/// by first searching for the full list of message uids in the folder that are marked for\n\t\t/// deletion, unmarking the set of message uids that are not within the specified list of\n\t\t/// uids to be be expunged, expunging the folder (thus expunging the requested uids), and\n\t\t/// finally restoring the deleted flag on the collection of message uids that were originally\n\t\t/// marked for deletion that were not included in the list of uids provided. For this reason,\n\t\t/// it is advisable for clients that wish to maintain state to implement this themselves when\n\t\t/// the IMAP server does not support the UIDPLUS extension.</para>\n\t\t/// <para>For more information about the <c>UID EXPUNGE</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc4315#section-2.1\">rfc4315</a>.</para>\n\t\t/// <note type=\"note\">Normally, a <see cref=\"MailFolder.MessageExpunged\"/> event will be emitted\n\t\t/// for each message that is expunged. However, if the IMAP server supports the QRESYNC extension\n\t\t/// and it has been enabled via the <see cref=\"ImapClient.EnableQuickResync(CancellationToken)\"/>\n\t\t/// method, then the <see cref=\"MailFolder.MessagesVanished\"/> event will be emitted rather than\n\t\t/// the <see cref=\"MailFolder.MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The message uids.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Expunge (IList<UniqueId> uids, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) == 0) {\n\t\t\t\t// get the list of messages marked for deletion that should not be expunged\n\t\t\t\tvar query = SearchQuery.Deleted.And (SearchQuery.Not (SearchQuery.Uids (uids)));\n\t\t\t\tvar unmark = Search (SearchOptions.None, query, cancellationToken);\n\n\t\t\t\tif (unmark.Count > 0) {\n\t\t\t\t\t// clear the \\Deleted flag on all messages except the ones that are to be expunged\n\t\t\t\t\tStore (unmark.UniqueIds, RemoveDeletedFlag, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\t// expunge the folder\n\t\t\t\tExpunge (cancellationToken);\n\n\t\t\t\tif (unmark.Count > 0) {\n\t\t\t\t\t// restore the \\Deleted flags\n\t\t\t\t\tStore (unmark.UniqueIds, AddDeletedFlag, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tforeach (var ic in Engine.QueueCommands (cancellationToken, this, \"UID EXPUNGE %s\\r\\n\", uids)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessExpungeResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously expunge the specified uids, permanently removing them from the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Expunges the specified uids, permanently removing them from the folder.</para>\n\t\t/// <para>If the IMAP server supports the UIDPLUS extension (check the\n\t\t/// <see cref=\"ImapClient.Capabilities\"/> for the <see cref=\"ImapCapabilities.UidPlus\"/>\n\t\t/// flag), then this operation is atomic. Otherwise, MailKit implements this operation\n\t\t/// by first searching for the full list of message uids in the folder that are marked for\n\t\t/// deletion, unmarking the set of message uids that are not within the specified list of\n\t\t/// uids to be be expunged, expunging the folder (thus expunging the requested uids), and\n\t\t/// finally restoring the deleted flag on the collection of message uids that were originally\n\t\t/// marked for deletion that were not included in the list of uids provided. For this reason,\n\t\t/// it is advisable for clients that wish to maintain state to implement this themselves when\n\t\t/// the IMAP server does not support the UIDPLUS extension.</para>\n\t\t/// <para>For more information about the <c>UID EXPUNGE</c> command, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc4315#section-2.1\">rfc4315</a>.</para>\n\t\t/// <note type=\"note\">Normally, a <see cref=\"MailFolder.MessageExpunged\"/> event will be emitted\n\t\t/// for each message that is expunged. However, if the IMAP server supports the QRESYNC extension\n\t\t/// and it has been enabled via the <see cref=\"ImapClient.EnableQuickResync(CancellationToken)\"/>\n\t\t/// method, then the <see cref=\"MailFolder.MessagesVanished\"/> event will be emitted rather than\n\t\t/// the <see cref=\"MailFolder.MessageExpunged\"/> event.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uids\">The message uids.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task ExpungeAsync (IList<UniqueId> uids, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) == 0) {\n\t\t\t\t// get the list of messages marked for deletion that should not be expunged\n\t\t\t\tvar query = SearchQuery.Deleted.And (SearchQuery.Not (SearchQuery.Uids (uids)));\n\t\t\t\tvar unmark = await SearchAsync (SearchOptions.None, query, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (unmark.Count > 0) {\n\t\t\t\t\t// clear the \\Deleted flag on all messages except the ones that are to be expunged\n\t\t\t\t\tawait StoreAsync (unmark.UniqueIds, RemoveDeletedFlag, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\t// expunge the folder\n\t\t\t\tawait ExpungeAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (unmark.Count > 0) {\n\t\t\t\t\t// restore the \\Deleted flags\n\t\t\t\t\tawait StoreAsync (unmark.UniqueIds, AddDeletedFlag, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tforeach (var ic in Engine.QueueCommands (cancellationToken, this, \"UID EXPUNGE %s\\r\\n\", uids)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessExpungeResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\tFormatOptions CreateAppendOptions (FormatOptions options)\n\t\t{\n\t\t\tif (options.International && (Engine.Capabilities & ImapCapabilities.UTF8Accept) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the UTF8 extension.\");\n\n\t\t\tvar format = options.Clone ();\n\t\t\tformat.NewLineFormat = NewLineFormat.Dos;\n\t\t\tformat.EnsureNewLine = true;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UTF8Only) == ImapCapabilities.UTF8Only)\n\t\t\t\tformat.International = true;\n\n\t\t\tif (format.International && !Engine.UTF8Enabled)\n\t\t\t\tthrow new InvalidOperationException (\"The UTF8 extension has not been enabled.\");\n\n\t\t\treturn format;\n\t\t}\n\n\t\tImapCommand QueueAppendCommand (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tCheckState (false, false);\n\n\t\t\tvar format = CreateAppendOptions (options);\n\n\t\t\tif (request.Annotations != null && request.Annotations.Count > 0 && (Engine.Capabilities & ImapCapabilities.Annotate) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support annotations.\");\n\n\t\t\tint numKeywords = request.Keywords != null ? request.Keywords.Count : 0;\n\t\t\tvar builder = new StringBuilder (\"APPEND %F \");\n\t\t\tvar list = new List<object> {\n\t\t\t\tthis\n\t\t\t};\n\n\t\t\tif ((request.Flags & SettableFlags) != 0 || numKeywords > 0) {\n\t\t\t\tImapUtils.FormatFlagsList (builder, request.Flags, numKeywords);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t}\n\n\t\t\tif (request.Keywords != null) {\n\t\t\t\tforeach (var keyword in request.Keywords)\n\t\t\t\t\tlist.Add (keyword);\n\t\t\t}\n\n\t\t\tif (request.InternalDate.HasValue) {\n\t\t\t\tbuilder.Append ('\"');\n\t\t\t\tbuilder.Append (ImapUtils.FormatInternalDate (request.InternalDate.Value));\n\t\t\t\tbuilder.Append (\"\\\" \");\n\t\t\t}\n\n\t\t\tif (request.Annotations != null && request.Annotations.Count > 0) {\n\t\t\t\tImapUtils.FormatAnnotations (builder, request.Annotations, list, false);\n\n\t\t\t\tif (builder[builder.Length - 1] != ' ')\n\t\t\t\t\tbuilder.Append (' ');\n\t\t\t}\n\n\t\t\tbuilder.Append (\"%L\\r\\n\");\n\t\t\tlist.Add (request.Message);\n\n\t\t\tvar command = builder.ToString ();\n\t\t\tvar args = list.ToArray ();\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, format, command, args) {\n\t\t\t\tProgress = request.TransferProgress\n\t\t\t};\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tUniqueId? ProcessAppendResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, this);\n\n\t\t\tic.ThrowIfNotOk (\"APPEND\");\n\n\t\t\tvar rc = ic.GetResponseCode (ImapResponseCodeType.AppendUid) as AppendUidResponseCode;\n\n\t\t\treturn rc?.UidSet?[0];\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override UniqueId? Append (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueAppendCommand (options, request, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessAppendResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append a message to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends a message to the folder and returns the UniqueId assigned to the message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the appended message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"request\">The append request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The request included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<UniqueId?> AppendAsync (FormatOptions options, IAppendRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueAppendCommand (options, request, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessAppendResponse (ic);\n\t\t}\n\n\t\tvoid ValidateArguments (FormatOptions options, IList<IAppendRequest> requests)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (requests == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (requests));\n\n\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\tif (requests[i] == null)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the requests is null.\");\n\n\t\t\t\tvar annotations = requests[i].Annotations;\n\t\t\t\tif (annotations != null && annotations.Count > 0 && (Engine.Capabilities & ImapCapabilities.Annotate) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"One ore more requests included annotations but the IMAP server does not support annotations.\");\n\t\t\t}\n\n\t\t\tCheckState (false, false);\n\t\t}\n\n\t\tImapCommand QueueMultiAppendCommand (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = CreateAppendOptions (options);\n\t\t\tvar builder = new StringBuilder (\"APPEND %F\");\n\t\t\tvar list = new List<object> {\n\t\t\t\tthis\n\t\t\t};\n\n\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\tvar keywords = requests[i].Keywords;\n\t\t\t\tint numKeywords = keywords != null ? keywords.Count : 0;\n\n\t\t\t\tbuilder.Append (' ');\n\n\t\t\t\tif ((requests[i].Flags & SettableFlags) != 0 || numKeywords > 0) {\n\t\t\t\t\tImapUtils.FormatFlagsList (builder, requests[i].Flags, numKeywords);\n\t\t\t\t\tbuilder.Append (' ');\n\t\t\t\t}\n\n\t\t\t\tif (keywords != null) {\n\t\t\t\t\tforeach (var keyword in keywords)\n\t\t\t\t\t\tlist.Add (keyword);\n\t\t\t\t}\n\n\t\t\t\tvar internalDate = requests[i].InternalDate;\n\t\t\t\tif (internalDate.HasValue) {\n\t\t\t\t\tbuilder.Append ('\"');\n\t\t\t\t\tbuilder.Append (ImapUtils.FormatInternalDate (internalDate.Value));\n\t\t\t\t\tbuilder.Append (\"\\\" \");\n\t\t\t\t}\n\n\t\t\t\tvar annotations = requests[i].Annotations;\n\t\t\t\tif (annotations != null && annotations.Count > 0) {\n\t\t\t\t\tImapUtils.FormatAnnotations (builder, annotations, list, false);\n\n\t\t\t\t\tif (builder[builder.Length - 1] != ' ')\n\t\t\t\t\t\tbuilder.Append (' ');\n\t\t\t\t}\n\n\t\t\t\tbuilder.Append (\"%L\");\n\t\t\t\tlist.Add (requests[i].Message);\n\t\t\t}\n\n\t\t\tbuilder.Append (\"\\r\\n\");\n\n\t\t\tvar command = builder.ToString ();\n\t\t\tvar args = list.ToArray ();\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, format, command, args) {\n\t\t\t\tProgress = requests[0].TransferProgress\n\t\t\t};\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tIList<UniqueId> ProcessMultiAppendResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, this);\n\n\t\t\tic.ThrowIfNotOk (\"APPEND\");\n\n\t\t\tvar rc = ic.GetResponseCode (ImapResponseCodeType.AppendUid) as AppendUidResponseCode;\n\n\t\t\tif (rc != null && rc.UidSet != null)\n\t\t\t\treturn rc.UidSet;\n\n\t\t\treturn Array.Empty<UniqueId> ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Appends multiple messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"requests\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<UniqueId> Append (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (options, requests);\n\n\t\t\tif (requests.Count == 0)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.MultiAppend) != 0) {\n\t\t\t\tvar ic = QueueMultiAppendCommand (options, requests, cancellationToken);\n\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessMultiAppendResponse (ic);\n\t\t\t}\n\n\t\t\t// FIXME: use an aggregate progress reporter\n\t\t\tvar uids = new List<UniqueId> ();\n\n\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\tvar uid = Append (options, requests[i], cancellationToken);\n\t\t\t\tif (uids != null && uid.HasValue)\n\t\t\t\t\tuids.Add (uid.Value);\n\t\t\t\telse\n\t\t\t\t\tuids = null;\n\t\t\t}\n\n\t\t\tif (uids == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn uids;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously append multiple messages to the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously appends multiple messages to the folder and returns the UniqueIds assigned to the messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the appended messages, if available; otherwise an empty array.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"requests\">The append requests.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"requests\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// One or more of the <paramref name=\"requests\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One ore more requests included annotations but the folder does not support annotations.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<UniqueId>> AppendAsync (FormatOptions options, IList<IAppendRequest> requests, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (options, requests);\n\n\t\t\tif (requests.Count == 0)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.MultiAppend) != 0) {\n\t\t\t\tvar ic = QueueMultiAppendCommand (options, requests, cancellationToken);\n\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessMultiAppendResponse (ic);\n\t\t\t}\n\n\t\t\t// FIXME: use an aggregate progress reporter\n\t\t\tvar uids = new List<UniqueId> ();\n\n\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\tvar uid = await AppendAsync (options, requests[i], cancellationToken).ConfigureAwait (false);\n\t\t\t\tif (uids != null && uid.HasValue)\n\t\t\t\t\tuids.Add (uid.Value);\n\t\t\t\telse\n\t\t\t\t\tuids = null;\n\t\t\t}\n\n\t\t\tif (uids == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn uids;\n\t\t}\n\n\t\tvoid ValidateArguments (FormatOptions options, UniqueId uid, IReplaceRequest request)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.Destination != null && !(request.Destination is ImapFolder target && target.Engine == Engine))\n\t\t\t\tthrow new ArgumentException (\"The destination folder does not belong to this ImapClient.\", nameof (request));\n\n\t\t\tif (request.Annotations != null && request.Annotations.Count > 0 && (Engine.Capabilities & ImapCapabilities.Annotate) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support annotations.\");\n\n\t\t\tCheckState (true, true);\n\t\t}\n\n\t\tImapCommand QueueReplaceCommand (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = CreateAppendOptions (options);\n\t\t\tint numKeywords = request.Keywords != null ? request.Keywords.Count : 0;\n\t\t\tvar builder = new StringBuilder ($\"UID REPLACE {uid} %F \");\n\t\t\tvar list = new List<object> {\n\t\t\t\trequest.Destination ?? this\n\t\t\t};\n\n\t\t\tif ((request.Flags & SettableFlags) != 0 || numKeywords > 0) {\n\t\t\t\tImapUtils.FormatFlagsList (builder, request.Flags, numKeywords);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t}\n\n\t\t\tif (request.Keywords != null) {\n\t\t\t\tforeach (var keyword in request.Keywords)\n\t\t\t\t\tlist.Add (keyword);\n\t\t\t}\n\n\t\t\tif (request.InternalDate.HasValue) {\n\t\t\t\tbuilder.Append ('\"');\n\t\t\t\tbuilder.Append (ImapUtils.FormatInternalDate (request.InternalDate.Value));\n\t\t\t\tbuilder.Append (\"\\\" \");\n\t\t\t}\n\n\t\t\tif (request.Annotations != null && request.Annotations.Count > 0) {\n\t\t\t\tImapUtils.FormatAnnotations (builder, request.Annotations, list, false);\n\n\t\t\t\tif (builder[builder.Length - 1] != ' ')\n\t\t\t\t\tbuilder.Append (' ');\n\t\t\t}\n\n\t\t\tbuilder.Append (\"%L\\r\\n\");\n\t\t\tlist.Add (request.Message);\n\n\t\t\tvar command = builder.ToString ();\n\t\t\tvar args = list.ToArray ();\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, format, command, args) {\n\t\t\t\tProgress = request.TransferProgress\n\t\t\t};\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tUniqueId? ProcessReplaceResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, this);\n\n\t\t\tic.ThrowIfNotOk (\"REPLACE\");\n\n\t\t\tvar rc = ic.GetResponseCode (ImapResponseCodeType.AppendUid) as AppendUidResponseCode;\n\n\t\t\treturn rc?.UidSet?[0];\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override UniqueId? Replace (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (options, uid, request);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Replace) == 0) {\n\t\t\t\tvar destination = request.Destination as ImapFolder ?? this;\n\t\t\t\tvar appended = destination.Append (options, request, cancellationToken);\n\t\t\t\tStore (new[] { uid }, AddDeletedFlag, cancellationToken);\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) != 0)\n\t\t\t\t\tExpunge (new[] { uid }, cancellationToken);\n\t\t\t\treturn appended;\n\t\t\t}\n\n\t\t\tvar ic = QueueReplaceCommand (options, uid, request, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessReplaceResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"uid\">The UID of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uid\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to this <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<UniqueId?> ReplaceAsync (FormatOptions options, UniqueId uid, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (options, uid, request);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Replace) == 0) {\n\t\t\t\tvar destination = request.Destination as ImapFolder ?? this;\n\t\t\t\tvar appended = await destination.AppendAsync (options, request, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait StoreAsync (new[] { uid }, AddDeletedFlag, cancellationToken).ConfigureAwait (false);\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) != 0)\n\t\t\t\t\tawait ExpungeAsync (new[] { uid }, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn appended;\n\t\t\t}\n\n\t\t\tvar ic = QueueReplaceCommand (options, uid, request, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessReplaceResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueReplaceCommand (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = CreateAppendOptions (options);\n\t\t\tint numKeywords = request.Keywords != null ? request.Keywords.Count : 0;\n\t\t\tvar builder = new StringBuilder ($\"REPLACE %d %F \");\n\t\t\tvar list = new List<object> {\n\t\t\t\tindex + 1,\n\t\t\t\trequest.Destination ?? this\n\t\t\t};\n\n\t\t\tif ((request.Flags & SettableFlags) != 0) {\n\t\t\t\tImapUtils.FormatFlagsList (builder, request.Flags, numKeywords);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t}\n\n\t\t\tif (request.Keywords != null) {\n\t\t\t\tforeach (var keyword in request.Keywords)\n\t\t\t\t\tlist.Add (keyword);\n\t\t\t}\n\n\t\t\tif (request.InternalDate.HasValue) {\n\t\t\t\tbuilder.Append ('\"');\n\t\t\t\tbuilder.Append (ImapUtils.FormatInternalDate (request.InternalDate.Value));\n\t\t\t\tbuilder.Append (\"\\\" \");\n\t\t\t}\n\n\t\t\tif (request.Annotations != null && request.Annotations.Count > 0) {\n\t\t\t\tImapUtils.FormatAnnotations (builder, request.Annotations, list, false);\n\n\t\t\t\tif (builder[builder.Length - 1] != ' ')\n\t\t\t\t\tbuilder.Append (' ');\n\t\t\t}\n\n\t\t\tbuilder.Append (\"%L\\r\\n\");\n\t\t\tlist.Add (request.Message);\n\n\t\t\tvar command = builder.ToString ();\n\t\t\tvar args = list.ToArray ();\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, null, format, command, args) {\n\t\t\t\tProgress = request.TransferProgress\n\t\t\t};\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ValidateArguments (FormatOptions options, int index, IReplaceRequest request)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.Destination != null && !(request.Destination is ImapFolder target && target.Engine == Engine))\n\t\t\t\tthrow new ArgumentException (\"The destination folder does not belong to this ImapClient.\", nameof (request));\n\n\t\t\tif (request.Annotations != null && request.Annotations.Count > 0 && (Engine.Capabilities & ImapCapabilities.Annotate) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support annotations.\");\n\n\t\t\tCheckState (true, true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"ImapClient\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override UniqueId? Replace (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (options, index, request);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Replace) == 0) {\n\t\t\t\tvar destination = request.Destination as ImapFolder ?? this;\n\t\t\t\tvar uid = destination.Append (options, request, cancellationToken);\n\t\t\t\tStore (new[] { index }, AddDeletedFlag, cancellationToken);\n\t\t\t\treturn uid;\n\t\t\t}\n\n\t\t\tvar ic = QueueReplaceCommand (options, index, request, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessReplaceResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously replace a message in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously replaces a message in the folder and returns the UniqueId assigned to the new message.\n\t\t/// </remarks>\n\t\t/// <returns>The UID of the new message, if available; otherwise, <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"index\">The index of the message to be replaced.</param>\n\t\t/// <param name=\"request\">The replace request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The destination folder does not belong to this <see cref=\"ImapClient\"/>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Internationalized formatting was requested but has not been enabled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>Internationalized formatting was requested but is not supported by the server.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<UniqueId?> ReplaceAsync (FormatOptions options, int index, IReplaceRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (options, index, request);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Replace) == 0) {\n\t\t\t\tvar destination = request.Destination as ImapFolder ?? this;\n\t\t\t\tvar uid = await destination.AppendAsync (options, request, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait StoreAsync (new[] { index }, AddDeletedFlag, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn uid;\n\t\t\t}\n\n\t\t\tvar ic = QueueReplaceCommand (options, index, request, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessReplaceResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueGetIndexesCommand (IList<UniqueId> uids, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = string.Format (\"SEARCH UID {0}\\r\\n\", UniqueIdSet.ToString (uids));\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESearch) != 0)\n\t\t\t\tic.RegisterUntaggedHandler (\"ESEARCH\", UntaggedESearchHandler);\n\n\t\t\tic.RegisterUntaggedHandler (\"SEARCH\", UntaggedSearchHandler);\n\t\t\tic.UserData = new SearchResults (SortOrder.Ascending);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tIList<int> ProcessGetIndexesResponse (ImapCommand ic)\n\t\t{\n\t\t\tvar results = ProcessSearchResponse (ic);\n\t\t\tvar indexes = new int[results.UniqueIds.Count];\n\t\t\tfor (int i = 0; i < indexes.Length; i++)\n\t\t\t\tindexes[i] = (int) results.UniqueIds[i].Id - 1;\n\n\t\t\treturn indexes;\n\t\t}\n\n\t\tIList<int> GetIndexes (IList<UniqueId> uids, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueGetIndexesCommand (uids, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessGetIndexesResponse (ic);\n\t\t}\n\n\t\tasync Task<IList<int>> GetIndexesAsync (IList<UniqueId> uids, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueGetIndexesCommand (uids, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessGetIndexesResponse (ic);\n\t\t}\n\n\t\tvoid ValidateArguments (IList<UniqueId> uids, IMailFolder destination)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tCheckValidDestination (destination);\n\t\t}\n\n\t\tstatic void GetCopiedUids (ImapCommand ic, ref UniqueIdSet? src, ref UniqueIdSet? dest)\n\t\t{\n\t\t\tvar rc = ic.GetResponseCode (ImapResponseCodeType.CopyUid);\n\n\t\t\tif (rc is CopyUidResponseCode copy && copy.SrcUidSet != null && copy.DestUidSet != null) {\n\t\t\t\tif (dest == null) {\n\t\t\t\t\tdest = copy.DestUidSet;\n\t\t\t\t\tsrc = copy.SrcUidSet;\n\t\t\t\t} else {\n\t\t\t\t\tdest.AddRange (copy.DestUidSet);\n\t\t\t\t\tsrc!.AddRange (copy.SrcUidSet);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid ProcessCopyToResponse (ImapCommand ic, IMailFolder destination, ref UniqueIdSet? src, ref UniqueIdSet? dest)\n\t\t{\n\t\t\tProcessCopyToResponse (ic, destination);\n\n\t\t\tGetCopiedUids (ic, ref src, ref dest);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override UniqueIdMap CopyTo (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (uids, destination);\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) == 0) {\n\t\t\t\tvar indexes = GetIndexes (uids, cancellationToken);\n\t\t\t\tCopyTo (indexes, destination, cancellationToken);\n\t\t\t\treturn UniqueIdMap.Empty;\n\t\t\t}\n\n\t\t\tUniqueIdSet? dest = null;\n\t\t\tUniqueIdSet? src = null;\n\n\t\t\tforeach (var ic in Engine.QueueCommands (cancellationToken, this, \"UID COPY %s %F\\r\\n\", uids, destination)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessCopyToResponse (ic, destination, ref src, ref dest);\n\t\t\t}\n\n\t\t\tif (src == null || dest == null)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\treturn new UniqueIdMap (src, dest);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the UIDPLUS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<UniqueIdMap> CopyToAsync (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (uids, destination);\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) == 0) {\n\t\t\t\tvar indexes = await GetIndexesAsync (uids, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait CopyToAsync (indexes, destination, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn UniqueIdMap.Empty;\n\t\t\t}\n\n\t\t\tUniqueIdSet? dest = null;\n\t\t\tUniqueIdSet? src = null;\n\n\t\t\tforeach (var ic in Engine.QueueCommands (cancellationToken, this, \"UID COPY %s %F\\r\\n\", uids, destination)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessCopyToResponse (ic, destination, ref src, ref dest);\n\t\t\t}\n\n\t\t\tif (src == null || dest == null)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\treturn new UniqueIdMap (src, dest);\n\t\t}\n\n\t\tvoid ProcessMoveToResponse (ImapCommand ic, IMailFolder destination, ref UniqueIdSet? src, ref UniqueIdSet? dest)\n\t\t{\n\t\t\tProcessMoveToResponse (ic, destination);\n\n\t\t\tGetCopiedUids (ic, ref src, ref dest);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Moves the specified messages to the destination folder.</para>\n\t\t/// <para>If the IMAP server supports the MOVE extension (check the <see cref=\"ImapClient.Capabilities\"/>\n\t\t/// property for the <see cref=\"ImapCapabilities.Move\"/> flag), then this operation will be atomic.\n\t\t/// Otherwise, MailKit implements this by first copying the messages to the destination folder, then\n\t\t/// marking them for deletion in the originating folder, and finally expunging them (see\n\t\t/// <see cref=\"Expunge(IList&lt;UniqueId&gt;,CancellationToken)\"/> for more information about how a\n\t\t/// subset of messages are expunged). Since the server could disconnect at any point between those 3\n\t\t/// (or more) commands, it is advisable for clients to implement their own logic for moving messages when\n\t\t/// the IMAP server does not support the MOVE command in order to better handle spontaneous server\n\t\t/// disconnects and other error conditions.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override UniqueIdMap MoveTo (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Move) == 0) {\n\t\t\t\tvar copied = CopyTo (uids, destination, cancellationToken);\n\t\t\t\tStore (uids, AddDeletedFlag, cancellationToken);\n\t\t\t\tExpunge (uids, cancellationToken);\n\t\t\t\treturn copied;\n\t\t\t}\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) == 0) {\n\t\t\t\tvar indexes = GetIndexes (uids, cancellationToken);\n\t\t\t\tMoveTo (indexes, destination, cancellationToken);\n\t\t\t\treturn UniqueIdMap.Empty;\n\t\t\t}\n\n\t\t\tValidateArguments (uids, destination);\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\tUniqueIdSet? dest = null;\n\t\t\tUniqueIdSet? src = null;\n\n\t\t\tforeach (var ic in Engine.QueueCommands (cancellationToken, this, \"UID MOVE %s %F\\r\\n\", uids, destination)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessMoveToResponse (ic, destination, ref src, ref dest);\n\t\t\t}\n\n\t\t\tif (dest == null)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\treturn new UniqueIdMap (src!, dest);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Moves the specified messages to the destination folder.</para>\n\t\t/// <para>If the IMAP server supports the MOVE extension (check the <see cref=\"ImapClient.Capabilities\"/>\n\t\t/// property for the <see cref=\"ImapCapabilities.Move\"/> flag), then this operation will be atomic.\n\t\t/// Otherwise, MailKit implements this by first copying the messages to the destination folder, then\n\t\t/// marking them for deletion in the originating folder, and finally expunging them (see\n\t\t/// <see cref=\"Expunge(IList&lt;UniqueId&gt;,CancellationToken)\"/> for more information about how a\n\t\t/// subset of messages are expunged). Since the server could disconnect at any point between those 3\n\t\t/// (or more) commands, it is advisable for clients to implement their own logic for moving messages when\n\t\t/// the IMAP server does not support the MOVE command in order to better handle spontaneous server\n\t\t/// disconnects and other error conditions.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The UID mapping of the messages in the destination folder, if available; otherwise an empty mapping.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<UniqueIdMap> MoveToAsync (IList<UniqueId> uids, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Move) == 0) {\n\t\t\t\tvar copied = await CopyToAsync (uids, destination, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait StoreAsync (uids, AddDeletedFlag, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait ExpungeAsync (uids, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn copied;\n\t\t\t}\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.UidPlus) == 0) {\n\t\t\t\tvar indexes = await GetIndexesAsync (uids, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait MoveToAsync (indexes, destination, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn UniqueIdMap.Empty;\n\t\t\t}\n\n\t\t\tValidateArguments (uids, destination);\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\tUniqueIdSet? dest = null;\n\t\t\tUniqueIdSet? src = null;\n\n\t\t\tforeach (var ic in Engine.QueueCommands (cancellationToken, this, \"UID MOVE %s %F\\r\\n\", uids, destination)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessMoveToResponse (ic, destination, ref src, ref dest);\n\t\t\t}\n\n\t\t\tif (dest == null)\n\t\t\t\treturn UniqueIdMap.Empty;\n\n\t\t\treturn new UniqueIdMap (src!, dest);\n\t\t}\n\n\t\tvoid ValidateArguments (IList<int> indexes, IMailFolder destination)\n\t\t{\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tCheckValidDestination (destination);\n\t\t}\n\n\t\tImapCommand? QueueCopyToCommand (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken)\n\t\t{\n\t\t\tValidateArguments (indexes, destination);\n\n\t\t\tCheckState (true, false);\n\t\t\tCheckAllowIndexes ();\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn null;\n\n\t\t\tvar command = new StringBuilder (\"COPY \");\n\t\t\tImapUtils.FormatIndexSet (Engine, command, indexes);\n\t\t\tcommand.Append (\" %F\\r\\n\");\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, this, command.ToString (), destination);\n\t\t}\n\n\t\tvoid ProcessCopyToResponse (ImapCommand ic, IMailFolder destination)\n\t\t{\n\t\t\tProcessResponseCodes (ic, destination);\n\n\t\t\tic.ThrowIfNotOk (\"COPY\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void CopyTo (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCopyToCommand (indexes, destination, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessCopyToResponse (ic, destination);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously copy the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the specified messages to the destination folder.\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages to copy.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task CopyToAsync (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueCopyToCommand (indexes, destination, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessCopyToResponse (ic, destination);\n\t\t}\n\n\t\tImapCommand? QueueMoveToCommand (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken)\n\t\t{\n\t\t\tValidateArguments (indexes, destination);\n\n\t\t\tCheckState (true, true);\n\t\t\tCheckAllowIndexes ();\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn null;\n\n\t\t\tvar command = new StringBuilder (\"MOVE \");\n\t\t\tImapUtils.FormatIndexSet (Engine, command, indexes);\n\t\t\tcommand.Append (\" %F\\r\\n\");\n\n\t\t\treturn Engine.QueueCommand (cancellationToken, this, command.ToString (), destination);\n\t\t}\n\n\t\tvoid ProcessMoveToResponse (ImapCommand ic, IMailFolder destination)\n\t\t{\n\t\t\tProcessResponseCodes (ic, destination);\n\n\t\t\tic.ThrowIfNotOk (\"MOVE\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the IMAP server supports the MOVE command, then the MOVE command will be used. Otherwise,\n\t\t/// the messages will first be copied to the destination folder and then marked as \\Deleted in the\n\t\t/// originating folder. Since the server could disconnect at any point between those 2 operations, it\n\t\t/// may be advisable to implement your own logic for moving messages in this case in order to better\n\t\t/// handle spontaneous server disconnects and other error conditions.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void MoveTo (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Move) == 0) {\n\t\t\t\tCopyTo (indexes, destination, cancellationToken);\n\t\t\t\tStore (indexes, AddDeletedFlag, cancellationToken);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ic = QueueMoveToCommand (indexes, destination, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessMoveToResponse (ic, destination);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously move the specified messages to the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the IMAP server supports the MOVE command, then the MOVE command will be used. Otherwise,\n\t\t/// the messages will first be copied to the destination folder and then marked as \\Deleted in the\n\t\t/// originating folder. Since the server could disconnect at any point between those 2 operations, it\n\t\t/// may be advisable to implement your own logic for moving messages in this case in order to better\n\t\t/// handle spontaneous server disconnects and other error conditions.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages to move.</param>\n\t\t/// <param name=\"destination\">The destination folder.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"indexes\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The destination folder does not belong to the <see cref=\"ImapClient\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotFoundException\">\n\t\t/// <paramref name=\"destination\"/> does not exist.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task MoveToAsync (IList<int> indexes, IMailFolder destination, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Move) == 0) {\n\t\t\t\tawait CopyToAsync (indexes, destination, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait StoreAsync (indexes, AddDeletedFlag, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ic = QueueMoveToCommand (indexes, destination, cancellationToken);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessMoveToResponse (ic, destination);\n\t\t}\n\n\t\t#region IEnumerable<MimeMessage> implementation\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the messages in the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\tpublic override IEnumerator<MimeMessage> GetEnumerator ()\n\t\t{\n\t\t\tCheckState (true, false);\n\n\t\t\tfor (int i = 0; i < Count; i++)\n\t\t\t\tyield return GetMessage (i, CancellationToken.None);\n\n\t\t\tyield break;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region Untagged response handlers called by ImapEngine\n\n\t\tinternal void OnExists (int count)\n\t\t{\n\t\t\tcountChanged = false;\n\t\t\tCount = count;\n\n\t\t\tOnCountChanged ();\n\t\t}\n\n\t\tinternal void OnExpunge (int index)\n\t\t{\n\t\t\t// Note: It is not required for the IMAP server to send an explicit untagged `* # EXISTS` response if it sends\n\t\t\t// untagged `* # EXPUNGE` responses, so we queue a CountChanged event (that is only emitted if the server does\n\t\t\t// NOT send the `* # EXISTS` response).\n\t\t\tcountChanged = true;\n\t\t\tCount--;\n\n\t\t\tOnMessageExpunged (new MessageEventArgs (index));\n\t\t}\n\n\t\tinternal void FlushQueuedEvents ()\n\t\t{\n\t\t\tif (countChanged) {\n\t\t\t\tcountChanged = false;\n\t\t\t\tOnCountChanged ();\n\t\t\t}\n\t\t}\n\n\t\tvoid OnFetchAsyncCompleted (MessageSummary message)\n\t\t{\n\t\t\tint index = message.Index;\n\t\t\tUniqueId? uid = null;\n\n\t\t\tif ((message.Fields & MessageSummaryItems.UniqueId) != 0)\n\t\t\t\tuid = message.UniqueId;\n\n\t\t\tif (message.Flags.HasValue) {\n\t\t\t\tvar args = new MessageFlagsChangedEventArgs (index, message.Flags.Value, (HashSet<string>) message.Keywords) {\n\t\t\t\t\tModSeq = message.ModSeq,\n\t\t\t\t\tUniqueId = uid\n\t\t\t\t};\n\n\t\t\t\tOnMessageFlagsChanged (args);\n\t\t\t}\n\n\t\t\tif (message.GMailLabels != null) {\n\t\t\t\tvar args = new MessageLabelsChangedEventArgs (index, message.GMailLabels) {\n\t\t\t\t\tModSeq = message.ModSeq,\n\t\t\t\t\tUniqueId = uid\n\t\t\t\t};\n\n\t\t\t\tOnMessageLabelsChanged (args);\n\t\t\t}\n\n\t\t\tif (message.Annotations != null) {\n\t\t\t\tvar args = new AnnotationsChangedEventArgs (index, message.Annotations) {\n\t\t\t\t\tModSeq = message.ModSeq,\n\t\t\t\t\tUniqueId = uid\n\t\t\t\t};\n\n\t\t\t\tOnAnnotationsChanged (args);\n\t\t\t}\n\n\t\t\tif (message.ModSeq.HasValue) {\n\t\t\t\tvar args = new ModSeqChangedEventArgs (index, message.ModSeq.Value) {\n\t\t\t\t\tUniqueId = uid\n\t\t\t\t};\n\n\t\t\t\tOnModSeqChanged (args);\n\t\t\t}\n\n\t\t\tif (message.Fields != MessageSummaryItems.None)\n\t\t\t\tOnMessageSummaryFetched (message);\n\t\t}\n\n\t\tinternal void OnUntaggedFetchResponse (ImapEngine engine, int index, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar message = new MessageSummary (this, index);\n\n\t\t\tParseSummaryItems (engine, message, OnFetchAsyncCompleted, cancellationToken);\n\t\t}\n\n\t\tinternal Task OnUntaggedFetchResponseAsync (ImapEngine engine, int index, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar message = new MessageSummary (this, index);\n\n\t\t\treturn ParseSummaryItemsAsync (engine, message, OnFetchAsyncCompleted, cancellationToken);\n\t\t}\n\n\t\tinternal void OnRecent (int count)\n\t\t{\n\t\t\tif (Recent == count)\n\t\t\t\treturn;\n\n\t\t\tRecent = count;\n\n\t\t\tOnRecentChanged ();\n\t\t}\n\n\t\tvoid OnVanished (bool earlier, ImapToken token)\n\t\t{\n\t\t\tvar vanished = ImapEngine.ParseUidSet (token, UidValidity, out _, out _, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"VANISHED\", token);\n\n\t\t\tOnMessagesVanished (new MessagesVanishedEventArgs (vanished, earlier));\n\n\t\t\tif (!earlier) {\n\t\t\t\tCount -= vanished.Count;\n\n\t\t\t\tOnCountChanged ();\n\t\t\t}\n\t\t}\n\n\t\tinternal void OnVanished (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tbool earlier = false;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\tdo {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"VANISHED\", token);\n\n\t\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\t\tif (atom.Equals (\"EARLIER\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tearlier = true;\n\t\t\t\t} while (true);\n\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\t\t\t}\n\n\t\t\tOnVanished (earlier, token);\n\t\t}\n\n\t\tinternal async Task OnVanishedAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tbool earlier = false;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"VANISHED\", token);\n\n\t\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\t\tif (atom.Equals (\"EARLIER\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tearlier = true;\n\t\t\t\t} while (true);\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tOnVanished (earlier, token);\n\t\t}\n\n\t\tinternal void UpdateAttributes (FolderAttributes attrs)\n\t\t{\n\t\t\tvar unsubscribed = false;\n\t\t\tvar subscribed = false;\n\n\t\t\tif ((attrs & FolderAttributes.Subscribed) == 0)\n\t\t\t\tunsubscribed = (Attributes & FolderAttributes.Subscribed) != 0;\n\t\t\telse\n\t\t\t\tsubscribed = (Attributes & FolderAttributes.Subscribed) == 0;\n\n\t\t\tvar deleted = ((attrs & FolderAttributes.NonExistent) != 0) &&\n\t\t\t\t(Attributes & FolderAttributes.NonExistent) == 0;\n\n\t\t\tAttributes = attrs;\n\n\t\t\tif (unsubscribed)\n\t\t\t\tOnUnsubscribed ();\n\n\t\t\tif (subscribed)\n\t\t\t\tOnSubscribed ();\n\n\t\t\tif (deleted)\n\t\t\t\tOnDeleted ();\n\t\t}\n\n\t\tinternal void UpdateAcceptedFlags (MessageFlags flags, IReadOnlySetOfStrings keywords)\n\t\t{\n\t\t\tAcceptedKeywords = keywords;\n\t\t\tAcceptedFlags = flags;\n\t\t}\n\n\t\tinternal void UnsetAcceptedFlags ()\n\t\t{\n\t\t\t((HashSet<string>) AcceptedKeywords).Clear ();\n\t\t\tAcceptedFlags = MessageFlags.None;\n\t\t}\n\n\t\tinternal void UnsetPermanentFlags ()\n\t\t{\n\t\t\t((HashSet<string>) PermanentKeywords).Clear ();\n\t\t\tPermanentFlags = MessageFlags.None;\n\t\t}\n\n\t\tinternal void UpdateIsNamespace (bool value)\n\t\t{\n\t\t\tIsNamespace = value;\n\t\t}\n\n\t\tinternal void UpdateUnread (int count)\n\t\t{\n\t\t\tif (Unread == count)\n\t\t\t\treturn;\n\n\t\t\tUnread = count;\n\n\t\t\tOnUnreadChanged ();\n\t\t}\n\n\t\tinternal void UpdateUidNext (UniqueId uid)\n\t\t{\n\t\t\tif (UidNext.HasValue && UidNext.Value == uid)\n\t\t\t\treturn;\n\n\t\t\tUidNext = uid;\n\n\t\t\tOnUidNextChanged ();\n\t\t}\n\n\t\tinternal void UpdateAppendLimit (uint? limit)\n\t\t{\n\t\t\tAppendLimit = limit;\n\t\t}\n\n\t\tinternal void UpdateSize (ulong? size)\n\t\t{\n\t\t\tif (Size == size)\n\t\t\t\treturn;\n\n\t\t\tSize = size;\n\n\t\t\tOnSizeChanged ();\n\t\t}\n\n\t\tinternal void UpdateId (string id)\n\t\t{\n\t\t\tif (Id == id)\n\t\t\t\treturn;\n\n\t\t\tId = id;\n\n\t\t\tOnIdChanged ();\n\t\t}\n\n\t\tinternal void UpdateHighestModSeq (ulong modseq)\n\t\t{\n\t\t\tif (HighestModSeq == modseq)\n\t\t\t\treturn;\n\n\t\t\tHighestModSeq = modseq;\n\n\t\t\tOnHighestModSeqChanged ();\n\t\t}\n\n\t\tinternal void UpdateUidValidity (uint validity)\n\t\t{\n\t\t\tif (UidValidity == validity)\n\t\t\t\treturn;\n\n\t\t\tUidValidity = validity;\n\n\t\t\tOnUidValidityChanged ();\n\t\t}\n\n\t\tinternal void OnRenamed (string encodedName, char delim, FolderAttributes attrs)\n\t\t{\n\t\t\tvar oldFullName = FullName;\n\n\t\t\tEncodedName = encodedName;\n\t\t\tFullName = Engine.DecodeMailboxName (encodedName);\n\t\t\tName = GetBaseName (FullName, delim);\n\t\t\tDirectorySeparator = delim;\n\t\t\tAttributes = attrs;\n\n\t\t\tOnRenamed (oldFullName, FullName);\n\t\t}\n\n\t\t#endregion\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderAnnotations.cs",
    "content": "﻿//\n// ImapFolderAnnotations.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Net.Imap\n{\n\tpublic partial class ImapFolder\n\t{\n\t\tIEnumerable<ImapCommand> QueueStoreCommands (IList<UniqueId> uids, ulong? modseq, IList<Annotation> annotations, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (modseq.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tif (annotations == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (annotations));\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (AnnotationAccess == AnnotationAccess.None)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support annotations.\");\n\n\t\t\tif (uids.Count == 0 || annotations.Count == 0)\n\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\tvar builder = new StringBuilder (\"UID STORE %s \");\n\t\t\tvar values = new List<object> ();\n\n\t\t\tif (modseq.HasValue) {\n\t\t\t\tbuilder.Append (\"(UNCHANGEDSINCE \");\n\t\t\t\tbuilder.Append (modseq.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbuilder.Append (\") \");\n\t\t\t}\n\n\t\t\tImapUtils.FormatAnnotations (builder, annotations, values, true);\n\t\t\tbuilder.Append (\"\\r\\n\");\n\n\t\t\tvar command = builder.ToString ();\n\t\t\tvar args = values.ToArray ();\n\n\t\t\treturn Engine.QueueCommands (cancellationToken, this, command, uids, args);\n\t\t}\n\n\t\tvoid ProcessStoreAnnotationsResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\t// TODO: Do something with the AnnotateResponseCode if it exists??\n\n\t\t\t\tthrow ImapCommandException.Create (\"STORE\", ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Store (IList<UniqueId> uids, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tforeach (var ic in QueueStoreCommands (uids, null, annotations, cancellationToken)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessStoreAnnotationsResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task StoreAsync (IList<UniqueId> uids, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tforeach (var ic in QueueStoreCommands (uids, null, annotations, cancellationToken)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessStoreAnnotationsResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<UniqueId> Store (IList<UniqueId> uids, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tUniqueIdSet? unmodified = null;\n\n\t\t\tforeach (var ic in QueueStoreCommands (uids, modseq, annotations, cancellationToken)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessStoreAnnotationsResponse (ic);\n\n\t\t\t\tProcessUnmodified (ic, ref unmodified, modseq);\n\t\t\t}\n\n\t\t\tif (unmodified == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn unmodified;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The unique IDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The UIDs of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tUniqueIdSet? unmodified = null;\n\n\t\t\tforeach (var ic in QueueStoreCommands (uids, modseq, annotations, cancellationToken)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessStoreAnnotationsResponse (ic);\n\n\t\t\t\tProcessUnmodified (ic, ref unmodified, modseq);\n\t\t\t}\n\n\t\t\tif (unmodified == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn unmodified;\n\t\t}\n\n\t\tbool TryQueueStoreCommand (IList<int> indexes, ulong? modseq, IList<Annotation> annotations, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (modseq.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tif (annotations == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (annotations));\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (AnnotationAccess == AnnotationAccess.None)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support annotations.\");\n\n\t\t\tif (indexes.Count == 0 || annotations.Count == 0) {\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar command = new StringBuilder (\"STORE \");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tImapUtils.FormatIndexSet (Engine, command, indexes);\n\t\t\tcommand.Append (' ');\n\n\t\t\tif (modseq.HasValue) {\n\t\t\t\tcommand.Append (\"(UNCHANGEDSINCE \");\n\t\t\t\tcommand.Append (modseq.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tcommand.Append (\") \");\n\t\t\t}\n\n\t\t\tImapUtils.FormatAnnotations (command, annotations, args, true);\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tic = Engine.QueueCommand (cancellationToken, this, command.ToString (), args.ToArray ());\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override void Store (IList<int> indexes, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, null, annotations, cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessStoreAnnotationsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support annotations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task StoreAsync (IList<int> indexes, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, null, annotations, cancellationToken, out var ic))\n\t\t\t\treturn;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessStoreAnnotationsResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<int> Store (IList<int> indexes, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, modseq, annotations, cancellationToken, out var ic))\n\t\t\t\treturn Array.Empty<int> ();\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessStoreAnnotationsResponse (ic);\n\n\t\t\treturn GetUnmodified (ic, modseq);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store the annotations for the specified messages only if their mod-sequence value is less than the specified value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously stores the annotations for the specified messages only if their mod-sequence value is less than the specified value.s\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\t/// <param name=\"annotations\">The annotations to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"annotations\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// Cannot store annotations without any properties defined.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support annotations.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <see cref=\"ImapFolder\"/> does not support mod-sequences.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<int>> StoreAsync (IList<int> indexes, ulong modseq, IList<Annotation> annotations, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, modseq, annotations, cancellationToken, out var ic))\n\t\t\t\treturn Array.Empty<int> ();\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessStoreAnnotationsResponse (ic);\n\n\t\t\treturn GetUnmodified (ic, modseq);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderConstructorArgs.cs",
    "content": "﻿//\n// ImapFolderInfo.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// Constructor arguments for <see cref=\"ImapFolder\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>Constructor arguments for <see cref=\"ImapFolder\"/>.</para>\n\t/// <para>The <see cref=\"ImapFolderConstructorArgs\"/> are meant only to allow subclassing of <see cref=\"ImapFolder\"/>\n\t/// by overriding the <see cref=\"ImapClient.CreateImapFolder(ImapFolderConstructorArgs)\"/> method.</para>\n\t/// </remarks>\n\tpublic sealed class ImapFolderConstructorArgs\n\t{\n\t\tinternal readonly string EncodedName;\n\t\tinternal readonly ImapEngine Engine;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapFolderConstructorArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP command engine.</param>\n\t\t/// <param name=\"encodedName\">The encoded name.</param>\n\t\t/// <param name=\"attributes\">The attributes.</param>\n\t\t/// <param name=\"delim\">The directory separator.</param>\n\t\tinternal ImapFolderConstructorArgs (ImapEngine engine, string encodedName, FolderAttributes attributes, char delim)\n\t\t{\n\t\t\tFullName = engine.DecodeMailboxName (encodedName);\n\t\t\tDirectorySeparator = delim;\n\t\t\tEncodedName = encodedName;\n\t\t\tAttributes = attributes;\n\t\t\tEngine = engine;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the folder attributes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the folder attributes.\n\t\t/// </remarks>\n\t\t/// <value>The folder attributes.</value>\n\t\tpublic FolderAttributes Attributes {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the directory separator.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the directory separator.\n\t\t/// </remarks>\n\t\t/// <value>The directory separator.</value>\n\t\tpublic char DirectorySeparator {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the full name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This is the equivalent of the full path of a file on a file system.\n\t\t/// </remarks>\n\t\t/// <value>The full name of the folder.</value>\n\t\tpublic string FullName {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This is the equivalent of the file name of a file on the file system.\n\t\t/// </remarks>\n\t\t/// <value>The name of the folder.</value>\n\t\t[Obsolete]\n\t\tpublic string Name {\n\t\t\tget { return MailFolder.GetBaseName (FullName, DirectorySeparator); }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderFetch.cs",
    "content": "﻿//\n// ImapFolderFetch.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Buffers;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\nusing MimeKit.IO;\nusing MimeKit.Text;\nusing MimeKit.Utils;\n\nusing MailKit.Search;\n\nnamespace MailKit.Net.Imap\n{\n\tpublic partial class ImapFolder\n\t{\n\t\tconst int PreviewHtmlLength = 16 * 1024;\n\t\tconst int PreviewTextLength = 512;\n\t\tconst int BufferSize = 4096;\n\n\t\tclass FetchSummaryContext\n\t\t{\n\t\t\tpublic readonly List<IMessageSummary> Messages;\n\n\t\t\tpublic FetchSummaryContext (int capacity)\n\t\t\t{\n\t\t\t\tMessages = new List<IMessageSummary> (capacity);\n\t\t\t}\n\n\t\t\tint BinarySearch (int index, bool insert)\n\t\t\t{\n\t\t\t\tint min = 0, max = Messages.Count;\n\n\t\t\t\tif (max == 0)\n\t\t\t\t\treturn insert ? 0 : -1;\n\n\t\t\t\tif (insert && index > Messages[max - 1].Index)\n\t\t\t\t\treturn max;\n\n\t\t\t\tdo {\n\t\t\t\t\tint i = min + ((max - min) / 2);\n\n\t\t\t\t\tif (index == Messages[i].Index)\n\t\t\t\t\t\treturn i;\n\n\t\t\t\t\tif (index > Messages[i].Index) {\n\t\t\t\t\t\tmin = i + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmax = i;\n\t\t\t\t\t}\n\t\t\t\t} while (min < max);\n\n\t\t\t\treturn insert ? min : -1;\n\t\t\t}\n\n\t\t\tpublic void Add (int index, MessageSummary message)\n\t\t\t{\n\t\t\t\tint i = BinarySearch (index, true);\n\n\t\t\t\tif (i < Messages.Count)\n\t\t\t\t\tMessages.Insert (i, message);\n\t\t\t\telse\n\t\t\t\t\tMessages.Add (message);\n\t\t\t}\n\n\t\t\tpublic bool TryGetValue (int index, [NotNullWhen (true)] out MessageSummary? message)\n\t\t\t{\n\t\t\t\tint i;\n\n\t\t\t\tif ((i = BinarySearch (index, false)) == -1) {\n\t\t\t\t\tmessage = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tmessage = (MessageSummary) Messages[i];\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tpublic void OnMessageExpunged (object? sender, MessageEventArgs args)\n\t\t\t{\n\t\t\t\tint index = BinarySearch (args.Index, false);\n\n\t\t\t\tif (index == -1)\n\t\t\t\t\treturn;\n\n\t\t\t\tMessages.RemoveAt (index);\n\n\t\t\t\tfor (int i = index; i < Messages.Count; i++) {\n\t\t\t\t\tvar message = (MessageSummary) Messages[i];\n\t\t\t\t\tmessage.Index--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void ReadLiteralData (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar buf = ArrayPool<byte>.Shared.Rent (BufferSize);\n\t\t\tint nread;\n\n\t\t\ttry {\n\t\t\t\tdo {\n\t\t\t\t\tnread = engine.Stream!.Read (buf, 0, BufferSize, cancellationToken);\n\t\t\t\t} while (nread > 0);\n\t\t\t} finally {\n\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task ReadLiteralDataAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar buf = ArrayPool<byte>.Shared.Rent (BufferSize);\n\t\t\tint nread;\n\n\t\t\ttry {\n\t\t\t\tdo {\n\t\t\t\t\tnread = await engine.Stream!.ReadAsync (buf, 0, BufferSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} while (nread > 0);\n\t\t\t} finally {\n\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t}\n\t\t}\n\n\t\tstatic void SkipParenthesizedList (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tint depth = 1;\n\n\t\t\tdo {\n\t\t\t\tvar token = engine.PeekToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln)\n\t\t\t\t\treturn;\n\n\t\t\t\t// token is safe to read, so pop it off the queue\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen) {\n\t\t\t\t\tdepth--;\n\t\t\t\t} else if (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\tdepth++;\n\t\t\t\t} else if (token.Type == ImapTokenType.Literal) {\n\t\t\t\t\t// consume the literal string\n\t\t\t\t\tReadLiteralData (engine, cancellationToken);\n\t\t\t\t}\n\t\t\t} while (depth > 0);\n\t\t}\n\n\t\tstatic async Task SkipParenthesizedListAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tint depth = 1;\n\n\t\t\tdo {\n\t\t\t\tvar token = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln)\n\t\t\t\t\treturn;\n\n\t\t\t\t// token is safe to read, so pop it off the queue\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen) {\n\t\t\t\t\tdepth--;\n\t\t\t\t} else if (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\tdepth++;\n\t\t\t\t} else if (token.Type == ImapTokenType.Literal) {\n\t\t\t\t\t// consume the literal string\n\t\t\t\t\tawait ReadLiteralDataAsync (engine, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t} while (depth > 0);\n\t\t}\n\n\t\tstatic DateTimeOffset? ReadDateTimeOffsetToken (ImapEngine engine, string atom, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\treturn ImapUtils.ParseInternalDate ((string) token.Value);\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task<DateTimeOffset?> ReadDateTimeOffsetTokenAsync (ImapEngine engine, string atom, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\treturn ImapUtils.ParseInternalDate ((string) token.Value);\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t}\n\t\t}\n\n\t\tdelegate void FetchSummaryItemsCompletedCallback (MessageSummary message);\n\n\t\tvoid ParseSummaryItems (ImapEngine engine, MessageSummary message, FetchSummaryItemsCompletedCallback completed, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen || token.Type == ImapTokenType.Eoln)\n\t\t\t\t\tbreak;\n\n\t\t\t\tbool parenthesized = false;\n\t\t\t\tif (engine.QuirksMode == ImapQuirksMode.Domino && token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t// Note: Lotus Domino IMAP will (sometimes?) encapsulate the `ENVELOPE` segment of the\n\t\t\t\t\t// response within an extra set of parenthesis.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/943 for details.\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\t\t\t\t\tparenthesized = true;\n\t\t\t\t}\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\t\tvar atom = (string) token.Value;\n\t\t\t\tstring format;\n\t\t\t\tulong value64;\n\t\t\t\tuint value;\n\t\t\t\tint idx;\n\n\t\t\t\tif (atom.Equals (\"INTERNALDATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.InternalDate = ReadDateTimeOffsetToken (engine, atom, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.InternalDate;\n\t\t\t\t} else if (atom.Equals (\"SAVEDATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.SaveDate = ReadDateTimeOffsetToken (engine, atom, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.SaveDate;\n\t\t\t\t} else if (atom.Equals (\"RFC822.SIZE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tmessage.Size = ImapEngine.ParseNumber (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Size;\n\t\t\t\t} else if (atom.Equals (\"BODYSTRUCTURE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tformat = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, \"BODYSTRUCTURE\", \"{0}\");\n\t\t\t\t\tmessage.Body = ImapUtils.ParseBody (engine, format, string.Empty, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.BodyStructure;\n\t\t\t\t} else if (atom.Equals (\"BODY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\t\tformat = ImapEngine.FetchBodySyntaxErrorFormat;\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\t\tvar referencesField = false;\n\t\t\t\t\t\tvar headerFields = false;\n\n\t\t\t\t\t\t// consume the '['\n\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenBracket, format, token);\n\n\t\t\t\t\t\t// References and/or other headers were requested...\n\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseBracket)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t// the header field names will generally be atoms or qstrings but may also be literals\n\t\t\t\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\t\t\t\tvar field = ImapUtils.ReadStringToken (engine, format, cancellationToken);\n\n\t\t\t\t\t\t\t\t\tif (headerFields && !referencesField && field.Equals (\"REFERENCES\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\t\t\t\t\treferencesField = true;\n\t\t\t\t\t\t\t\t} while (true);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, format, token);\n\n\t\t\t\t\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\t\t\t\t\tif (atom.Equals (\"HEADER\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\t\t\t// if we're fetching *all* headers, then it will include the References header (if it exists)\n\t\t\t\t\t\t\t\t\treferencesField = true;\n\t\t\t\t\t\t\t\t\theaderFields = false;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\theaderFields = atom.Equals (\"HEADER.FIELDS\", StringComparison.OrdinalIgnoreCase);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseBracket, format, token);\n\n\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Literal, format, token);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tmessage.Headers = engine.ParseHeaders (engine.Stream!, cancellationToken);\n\t\t\t\t\t\t} catch (FormatException) {\n\t\t\t\t\t\t\tmessage.Headers = new HeaderList ();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// consume any remaining literal data... (typically extra blank lines)\n\t\t\t\t\t\tReadLiteralData (engine, cancellationToken);\n\n\t\t\t\t\t\tmessage.References = new MessageIdList ();\n\n\t\t\t\t\t\tif ((idx = message.Headers.IndexOf (HeaderId.References)) != -1) {\n\t\t\t\t\t\t\tvar references = message.Headers[idx];\n\t\t\t\t\t\t\tvar rawValue = references.RawValue;\n\n\t\t\t\t\t\t\tforeach (var msgid in MimeUtils.EnumerateReferences (rawValue, 0, rawValue.Length))\n\t\t\t\t\t\t\t\tmessage.References.Add (msgid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Headers;\n\n\t\t\t\t\t\tif (referencesField)\n\t\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.References;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage.Body = ImapUtils.ParseBody (engine, format, string.Empty, cancellationToken);\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Body;\n\t\t\t\t\t}\n\t\t\t\t} else if (atom.Equals (\"ENVELOPE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.Envelope = ImapUtils.ParseEnvelope (engine, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Envelope;\n\t\t\t\t} else if (atom.Equals (\"FLAGS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.Flags = ImapUtils.ParseFlagsList (engine, atom, (HashSet<string>) message.Keywords, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Flags;\n\t\t\t\t} else if (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t// Note: Some IMAP servers (such as Zoho Mail) will return a MODSEQ of -1 in some cases (not sure why).\n\t\t\t\t\t//\n\t\t\t\t\t// If we get an invalid value, just ignore it.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1686 for details.\n\t\t\t\t\tif (ImapEngine.TryParseNumber64 (token, out value64)) {\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.ModSeq;\n\t\t\t\t\t\tmessage.ModSeq = value64;\n\n\t\t\t\t\t\tif (value64 > HighestModSeq)\n\t\t\t\t\t\t\tUpdateHighestModSeq (value64);\n\t\t\t\t\t}\n\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"UID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tvalue = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tmessage.UniqueId = new UniqueId (UidValidity, value);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.UniqueId;\n\t\t\t\t} else if (atom.Equals (\"EMAILID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.EmailId;\n\t\t\t\t\tmessage.EmailId = (string) token.Value;\n\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"THREADID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.ThreadId;\n\t\t\t\t\t\tmessage.ThreadId = (string) token.Value;\n\n\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Nil, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.ThreadId;\n\t\t\t\t\t\tmessage.ThreadId = null;\n\t\t\t\t\t}\n\t\t\t\t} else if (atom.Equals (\"X-GM-MSGID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tvalue64 = ImapEngine.ParseNumber64 (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.GMailMessageId;\n\t\t\t\t\tmessage.GMailMessageId = value64;\n\t\t\t\t} else if (atom.Equals (\"X-GM-THRID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tvalue64 = ImapEngine.ParseNumber64 (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.GMailThreadId;\n\t\t\t\t\tmessage.GMailThreadId = value64;\n\t\t\t\t} else if (atom.Equals (\"X-GM-LABELS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.GMailLabels = ImapUtils.ParseLabelsList (engine, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.GMailLabels;\n\t\t\t\t} else if (atom.Equals (\"ANNOTATION\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.Annotations = ImapUtils.ParseAnnotations (engine, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Annotations;\n\t\t\t\t} else if (atom.Equals (\"PREVIEW\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tformat = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, \"PREVIEW\", \"{0}\");\n\t\t\t\t\tmessage.PreviewText = ImapUtils.ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.PreviewText;\n\t\t\t\t} else {\n\t\t\t\t\t// Unexpected or unknown token (such as XAOL.SPAM.REASON or XAOL-MSGID). Simply read 1 more token (the argument) and ignore.\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\t\tSkipParenthesizedList (engine, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tif (parenthesized) {\n\t\t\t\t\t// Note: This is the second half of the Lotus Domino IMAP server work-around.\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tcompleted (message);\n\t\t}\n\n\t\tasync Task ParseSummaryItemsAsync (ImapEngine engine, MessageSummary message, FetchSummaryItemsCompletedCallback completed, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen || token.Type == ImapTokenType.Eoln)\n\t\t\t\t\tbreak;\n\n\t\t\t\tbool parenthesized = false;\n\t\t\t\tif (engine.QuirksMode == ImapQuirksMode.Domino && token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t// Note: Lotus Domino IMAP will (sometimes?) encapsulate the `ENVELOPE` segment of the\n\t\t\t\t\t// response within an extra set of parenthesis.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/943 for details.\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tparenthesized = true;\n\t\t\t\t}\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\t\tvar atom = (string) token.Value;\n\t\t\t\tstring format;\n\t\t\t\tulong value64;\n\t\t\t\tuint value;\n\t\t\t\tint idx;\n\n\t\t\t\tif (atom.Equals (\"INTERNALDATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.InternalDate = await ReadDateTimeOffsetTokenAsync (engine, atom, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.InternalDate;\n\t\t\t\t} else if (atom.Equals (\"SAVEDATE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.SaveDate = await ReadDateTimeOffsetTokenAsync (engine, atom, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.SaveDate;\n\t\t\t\t} else if (atom.Equals (\"RFC822.SIZE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tmessage.Size = ImapEngine.ParseNumber (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Size;\n\t\t\t\t} else if (atom.Equals (\"BODYSTRUCTURE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tformat = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, \"BODYSTRUCTURE\", \"{0}\");\n\t\t\t\t\tmessage.Body = await ImapUtils.ParseBodyAsync (engine, format, string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.BodyStructure;\n\t\t\t\t} else if (atom.Equals (\"BODY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tformat = ImapEngine.FetchBodySyntaxErrorFormat;\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenBracket) {\n\t\t\t\t\t\tvar referencesField = false;\n\t\t\t\t\t\tvar headerFields = false;\n\n\t\t\t\t\t\t// consume the '['\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenBracket, format, token);\n\n\t\t\t\t\t\t// References and/or other headers were requested...\n\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseBracket)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t// the header field names will generally be atoms or qstrings but may also be literals\n\t\t\t\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\t\t\t\tvar field = await ImapUtils.ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\t\t\tif (headerFields && !referencesField && field.Equals (\"REFERENCES\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\t\t\t\t\treferencesField = true;\n\t\t\t\t\t\t\t\t} while (true);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, format, token);\n\n\t\t\t\t\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\t\t\t\t\tif (atom.Equals (\"HEADER\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\t\t\t// if we're fetching *all* headers, then it will include the References header (if it exists)\n\t\t\t\t\t\t\t\t\treferencesField = true;\n\t\t\t\t\t\t\t\t\theaderFields = false;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\theaderFields = atom.Equals (\"HEADER.FIELDS\", StringComparison.OrdinalIgnoreCase);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseBracket, format, token);\n\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Literal, format, token);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tmessage.Headers = await engine.ParseHeadersAsync (engine.Stream!, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t} catch (FormatException) {\n\t\t\t\t\t\t\tmessage.Headers = new HeaderList ();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// consume any remaining literal data... (typically extra blank lines)\n\t\t\t\t\t\tawait ReadLiteralDataAsync (engine, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tmessage.References = new MessageIdList ();\n\n\t\t\t\t\t\tif ((idx = message.Headers.IndexOf (HeaderId.References)) != -1) {\n\t\t\t\t\t\t\tvar references = message.Headers[idx];\n\t\t\t\t\t\t\tvar rawValue = references.RawValue;\n\n\t\t\t\t\t\t\tforeach (var msgid in MimeUtils.EnumerateReferences (rawValue, 0, rawValue.Length))\n\t\t\t\t\t\t\t\tmessage.References.Add (msgid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Headers;\n\n\t\t\t\t\t\tif (referencesField)\n\t\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.References;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage.Body = await ImapUtils.ParseBodyAsync (engine, format, string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Body;\n\t\t\t\t\t}\n\t\t\t\t} else if (atom.Equals (\"ENVELOPE\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.Envelope = await ImapUtils.ParseEnvelopeAsync (engine, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Envelope;\n\t\t\t\t} else if (atom.Equals (\"FLAGS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.Flags = await ImapUtils.ParseFlagsListAsync (engine, atom, (HashSet<string>) message.Keywords, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Flags;\n\t\t\t\t} else if (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t// Note: Some IMAP servers (such as Zoho Mail) will return a MODSEQ of -1 in some cases (not sure why).\n\t\t\t\t\t//\n\t\t\t\t\t// If we get an invalid value, just ignore it.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1686 for details.\n\t\t\t\t\tif (ImapEngine.TryParseNumber64 (token, out value64)) {\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.ModSeq;\n\t\t\t\t\t\tmessage.ModSeq = value64;\n\n\t\t\t\t\t\tif (value64 > HighestModSeq)\n\t\t\t\t\t\t\tUpdateHighestModSeq (value64);\n\t\t\t\t\t}\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"UID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tvalue = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tmessage.UniqueId = new UniqueId (UidValidity, value);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.UniqueId;\n\t\t\t\t} else if (atom.Equals (\"EMAILID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.EmailId;\n\t\t\t\t\tmessage.EmailId = (string) token.Value;\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"THREADID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.ThreadId;\n\t\t\t\t\t\tmessage.ThreadId = (string) token.Value;\n\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Nil, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t\tmessage.Fields |= MessageSummaryItems.ThreadId;\n\t\t\t\t\t\tmessage.ThreadId = null;\n\t\t\t\t\t}\n\t\t\t\t} else if (atom.Equals (\"X-GM-MSGID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tvalue64 = ImapEngine.ParseNumber64 (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.GMailMessageId;\n\t\t\t\t\tmessage.GMailMessageId = value64;\n\t\t\t\t} else if (atom.Equals (\"X-GM-THRID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tvalue64 = ImapEngine.ParseNumber64 (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.GMailThreadId;\n\t\t\t\t\tmessage.GMailThreadId = value64;\n\t\t\t\t} else if (atom.Equals (\"X-GM-LABELS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.GMailLabels = await ImapUtils.ParseLabelsListAsync (engine, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.GMailLabels;\n\t\t\t\t} else if (atom.Equals (\"ANNOTATION\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tmessage.Annotations = await ImapUtils.ParseAnnotationsAsync (engine, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.Annotations;\n\t\t\t\t} else if (atom.Equals (\"PREVIEW\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tformat = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, \"PREVIEW\", \"{0}\");\n\t\t\t\t\tmessage.PreviewText = await ImapUtils.ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.PreviewText;\n\t\t\t\t} else {\n\t\t\t\t\t// Unexpected or unknown token (such as XAOL.SPAM.REASON or XAOL-MSGID). Simply read 1 more token (the argument) and ignore.\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\t\tawait SkipParenthesizedListAsync (engine, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tif (parenthesized) {\n\t\t\t\t\t// Note: This is the second half of the Lotus Domino IMAP server work-around.\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tcompleted (message);\n\t\t}\n\n\t\tTask UntaggedFetchSummaryItemsHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar ctx = (FetchSummaryContext) ic.UserData!;\n\n\t\t\tif (!ctx.TryGetValue (index, out var message)) {\n\t\t\t\tmessage = new MessageSummary (this, index);\n\t\t\t\tctx.Add (index, message);\n\t\t\t}\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseSummaryItemsAsync (engine, message, OnMessageSummaryFetched, ic.CancellationToken);\n\n\t\t\tParseSummaryItems (engine, message, OnMessageSummaryFetched, ic.CancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tstatic bool IsEmptyExclude (HeaderSet headers, bool requestReferences)\n\t\t{\n\t\t\t// return whether or not we've got an empty set of excluded headers or if the user has requested the References header *and* asked us to exclude only the References header.\n\t\t\treturn headers.Exclude && (headers.Count == 0 || (headers.Count == 1 && requestReferences && headers.Contains (\"REFERENCES\")));\n\t\t}\n\n\t\tinternal static string FormatSummaryItems (ImapEngine engine, IFetchRequest request, out bool previewText, bool isNotify = false)\n\t\t{\n\t\t\tvar items = request.Items;\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Preview) == 0 && (items & MessageSummaryItems.PreviewText) != 0) {\n\t\t\t\t// if the user wants the preview text, we will also need the UIDs and BODYSTRUCTUREs\n\t\t\t\t// so that we can request a preview of the body text in subsequent FETCH requests.\n\t\t\t\titems |= MessageSummaryItems.BodyStructure | MessageSummaryItems.UniqueId;\n\t\t\t\titems &= ~MessageSummaryItems.PreviewText;\n\t\t\t\tpreviewText = true;\n\t\t\t} else {\n\t\t\t\tpreviewText = false;\n\t\t\t}\n\n\t\t\tif ((items & MessageSummaryItems.BodyStructure) != 0 && (items & MessageSummaryItems.Body) != 0) {\n\t\t\t\t// don't query both the BODY and BODYSTRUCTURE, that's just dumb...\n\t\t\t\titems &= ~MessageSummaryItems.Body;\n\t\t\t}\n\n\t\t\tif (engine.QuirksMode != ImapQuirksMode.GMail && !isNotify) {\n\t\t\t\tif (items == MessageSummaryItems.All)\n\t\t\t\t\treturn \"ALL\";\n\n\t\t\t\tif (items == MessageSummaryItems.Full)\n\t\t\t\t\treturn \"FULL\";\n\n\t\t\t\tif (items == MessageSummaryItems.Fast)\n\t\t\t\t\treturn \"FAST\";\n\t\t\t}\n\n\t\t\tvar tokens = new List<string> ();\n\n\t\t\t// now add on any additional summary items...\n\t\t\tif ((items & MessageSummaryItems.UniqueId) != 0)\n\t\t\t\ttokens.Add (\"UID\");\n\t\t\tif ((items & MessageSummaryItems.Flags) != 0)\n\t\t\t\ttokens.Add (\"FLAGS\");\n\t\t\tif ((items & MessageSummaryItems.InternalDate) != 0)\n\t\t\t\ttokens.Add (\"INTERNALDATE\");\n\t\t\tif ((items & MessageSummaryItems.Size) != 0)\n\t\t\t\ttokens.Add (\"RFC822.SIZE\");\n\t\t\tif ((items & MessageSummaryItems.Envelope) != 0)\n\t\t\t\ttokens.Add (\"ENVELOPE\");\n\t\t\tif ((items & MessageSummaryItems.BodyStructure) != 0)\n\t\t\t\ttokens.Add (\"BODYSTRUCTURE\");\n\t\t\tif ((items & MessageSummaryItems.Body) != 0)\n\t\t\t\ttokens.Add (\"BODY\");\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.CondStore) != 0) {\n\t\t\t\tif ((items & MessageSummaryItems.ModSeq) != 0)\n\t\t\t\t\ttokens.Add (\"MODSEQ\");\n\t\t\t}\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Annotate) != 0) {\n\t\t\t\tif ((items & MessageSummaryItems.Annotations) != 0)\n\t\t\t\t\ttokens.Add (\"ANNOTATION (/* (value size))\");\n\t\t\t}\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.ObjectID) != 0) {\n\t\t\t\tif ((items & MessageSummaryItems.EmailId) != 0)\n\t\t\t\t\ttokens.Add (\"EMAILID\");\n\t\t\t\tif ((items & MessageSummaryItems.ThreadId) != 0)\n\t\t\t\t\ttokens.Add (\"THREADID\");\n\t\t\t}\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.SaveDate) != 0) {\n\t\t\t\tif ((items & MessageSummaryItems.SaveDate) != 0)\n\t\t\t\t\ttokens.Add (\"SAVEDATE\");\n\t\t\t}\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.Preview) != 0) {\n\t\t\t\tif ((items & MessageSummaryItems.PreviewText) != 0) {\n#if ENABLE_LAZY_PREVIEW_API\n\t\t\t\t\tif (request.PreviewOptions == PreviewOptions.Lazy)\n\t\t\t\t\t\ttokens.Add (\"PREVIEW (LAZY)\");\n\t\t\t\t\telse\n\t\t\t\t\t\ttokens.Add (\"PREVIEW\");\n#else\n\t\t\t\t\ttokens.Add (\"PREVIEW\");\n#endif\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((engine.Capabilities & ImapCapabilities.GMailExt1) != 0) {\n\t\t\t\t// now for the GMail extension items\n\t\t\t\tif ((items & MessageSummaryItems.GMailMessageId) != 0)\n\t\t\t\t\ttokens.Add (\"X-GM-MSGID\");\n\t\t\t\tif ((items & MessageSummaryItems.GMailThreadId) != 0)\n\t\t\t\t\ttokens.Add (\"X-GM-THRID\");\n\t\t\t\tif ((items & MessageSummaryItems.GMailLabels) != 0)\n\t\t\t\t\ttokens.Add (\"X-GM-LABELS\");\n\t\t\t}\n\n\t\t\tif (request.Headers != null) {\n\t\t\t\tbool requestReferences = (items & MessageSummaryItems.References) != 0;\n\n\t\t\t\tif (IsEmptyExclude (request.Headers, requestReferences)) {\n\t\t\t\t\ttokens.Add (\"BODY.PEEK[HEADER]\");\n\t\t\t\t} else if (request.Headers.Exclude) {\n\t\t\t\t\tvar headerFields = new StringBuilder (\"BODY.PEEK[HEADER.FIELDS.NOT (\");\n\n\t\t\t\t\tforeach (var header in request.Headers) {\n\t\t\t\t\t\tif (requestReferences && header.Equals (\"REFERENCES\", StringComparison.Ordinal))\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\theaderFields.Append (header);\n\t\t\t\t\t\theaderFields.Append (' ');\n\t\t\t\t\t}\n\n\t\t\t\t\theaderFields[headerFields.Length - 1] = ')';\n\t\t\t\t\theaderFields.Append (']');\n\n\t\t\t\t\ttokens.Add (headerFields.ToString ());\n\t\t\t\t} else {\n\t\t\t\t\tvar headerFields = new StringBuilder (\"BODY.PEEK[HEADER.FIELDS (\");\n\n\t\t\t\t\tforeach (var header in request.Headers) {\n\t\t\t\t\t\theaderFields.Append (header);\n\t\t\t\t\t\theaderFields.Append (' ');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (requestReferences && !request.Headers.Contains (\"REFERENCES\"))\n\t\t\t\t\t\theaderFields.Append (\"REFERENCES \");\n\n\t\t\t\t\theaderFields[headerFields.Length - 1] = ')';\n\t\t\t\t\theaderFields.Append (']');\n\n\t\t\t\t\ttokens.Add (headerFields.ToString ());\n\t\t\t\t}\n\t\t\t} else if ((items & MessageSummaryItems.Headers) != 0) {\n\t\t\t\ttokens.Add (\"BODY.PEEK[HEADER]\");\n\t\t\t} else if ((items & MessageSummaryItems.References) != 0) {\n\t\t\t\ttokens.Add (\"BODY.PEEK[HEADER.FIELDS (REFERENCES)]\");\n\t\t\t}\n\n\t\t\tif (tokens.Count == 1 && !isNotify)\n\t\t\t\treturn tokens[0];\n\n\t\t\treturn string.Format (\"({0})\", string.Join (\" \", tokens));\n\t\t}\n\n\t\tclass FetchPreviewTextContext : FetchStreamContextBase\n\t\t{\n\t\t\tstatic readonly PlainTextPreviewer textPreviewer = new PlainTextPreviewer ();\n\t\t\tstatic readonly HtmlTextPreviewer htmlPreviewer = new HtmlTextPreviewer ();\n\n\t\t\treadonly FetchSummaryContext ctx;\n\t\t\treadonly ImapFolder folder;\n\n\t\t\tpublic FetchPreviewTextContext (ImapFolder folder, FetchSummaryContext ctx) : base (null)\n\t\t\t{\n\t\t\t\tthis.folder = folder;\n\t\t\t\tthis.ctx = ctx;\n\t\t\t}\n\n\t\t\tpublic override void Add (Section section, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (!ctx.TryGetValue (section.Index, out var message))\n\t\t\t\t\treturn;\n\n\t\t\t\tvar body = message.TextBody;\n\t\t\t\tTextPreviewer previewer;\n\n\t\t\t\tif (body == null) {\n\t\t\t\t\tpreviewer = htmlPreviewer;\n\t\t\t\t\tbody = message.HtmlBody;\n\t\t\t\t} else {\n\t\t\t\t\tpreviewer = textPreviewer;\n\t\t\t\t}\n\n\t\t\t\tif (body == null)\n\t\t\t\t\treturn;\n\n\t\t\t\tvar charset = body.ContentType.Charset ?? \"utf-8\";\n\t\t\t\tContentEncoding encoding;\n\n\t\t\t\tif (string.IsNullOrEmpty (body.ContentTransferEncoding) || !MimeUtils.TryParse (body.ContentTransferEncoding, out encoding))\n\t\t\t\t\tencoding = ContentEncoding.Default;\n\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tvar content = new MimeContent (section.Stream, encoding);\n\n\t\t\t\t\tcontent.DecodeTo (memory, cancellationToken);\n\t\t\t\t\tmemory.Position = 0;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmessage.PreviewText = previewer.GetPreviewText (memory, charset);\n\t\t\t\t\t} catch (DecoderFallbackException) {\n\t\t\t\t\t\tmemory.Position = 0;\n\n\t\t\t\t\t\tmessage.PreviewText = previewer.GetPreviewText (memory, TextEncodings.Latin1);\n\t\t\t\t\t}\n\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.PreviewText;\n\t\t\t\t\tfolder.OnMessageSummaryFetched (message);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpublic override void SetUniqueId (int index, UniqueId uid, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\t// no-op\n\t\t\t}\n\t\t}\n\n\t\tvoid ProcessFetchResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"FETCH\");\n\t\t}\n\n\t\tImapCommand QueueFetchPreviewTextCommand (FetchSummaryContext sctx, KeyValuePair<string, UniqueIdSet> pair, int octets, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar uids = pair.Value;\n\t\t\tstring specifier;\n\n\t\t\tif (!string.IsNullOrEmpty (pair.Key))\n\t\t\t\tspecifier = pair.Key;\n\t\t\telse\n\t\t\t\tspecifier = \"TEXT\";\n\n\t\t\t// TODO: if the IMAP server supports the CONVERT extension, we could possibly use the\n\t\t\t// CONVERT command instead to decode *and* convert (html) into utf-8 plain text.\n\t\t\t//\n\t\t\t// e.g. \"UID CONVERT {0} (\\\"text/plain\\\" (\\\"charset\\\" \\\"utf-8\\\")) BINARY[{1}]<0.{2}>\\r\\n\"\n\t\t\t//\n\t\t\t// This would allow us to more accurately fetch X number of characters because we wouldn't\n\t\t\t// need to guesstimate accounting for base64/quoted-printable decoding.\n\n\t\t\tvar command = string.Format (CultureInfo.InvariantCulture, \"UID FETCH {0} (BODY.PEEK[{1}]<0.{2}>)\\r\\n\", uids, specifier, octets);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tvar ctx = new FetchPreviewTextContext (this, sctx);\n\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid FetchPreviewText (FetchSummaryContext sctx, Dictionary<string, UniqueIdSet> bodies, int octets, CancellationToken cancellationToken)\n\t\t{\n\t\t\tforeach (var pair in bodies) {\n\t\t\t\tvar ic = QueueFetchPreviewTextCommand (sctx, pair, octets, cancellationToken);\n\t\t\t\tvar ctx = (FetchPreviewTextContext) ic.UserData!;\n\n\t\t\t\ttry {\n\t\t\t\t\tEngine.Run (ic);\n\n\t\t\t\t\tProcessFetchResponse (ic);\n\t\t\t\t} finally {\n\t\t\t\t\tctx.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync Task FetchPreviewTextAsync (FetchSummaryContext sctx, Dictionary<string, UniqueIdSet> bodies, int octets, CancellationToken cancellationToken)\n\t\t{\n\t\t\tforeach (var pair in bodies) {\n\t\t\t\tvar ic = QueueFetchPreviewTextCommand (sctx, pair, octets, cancellationToken);\n\t\t\t\tvar ctx = (FetchPreviewTextContext) ic.UserData!;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t\tProcessFetchResponse (ic);\n\t\t\t\t} finally {\n\t\t\t\t\tctx.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid CreateFetchPreviewTextMappings (FetchSummaryContext sctx, out Dictionary<string, UniqueIdSet> textBodies, out Dictionary<string, UniqueIdSet> htmlBodies)\n\t\t{\n\t\t\ttextBodies = new Dictionary<string, UniqueIdSet> ();\n\t\t\thtmlBodies = new Dictionary<string, UniqueIdSet> ();\n\n\t\t\tforeach (var item in sctx.Messages) {\n\t\t\t\tDictionary<string, UniqueIdSet> bodies;\n\t\t\t\tvar message = (MessageSummary) item;\n\t\t\t\tvar body = message.TextBody;\n\n\t\t\t\tif (body == null) {\n\t\t\t\t\tbody = message.HtmlBody;\n\t\t\t\t\tbodies = htmlBodies;\n\t\t\t\t} else {\n\t\t\t\t\tbodies = textBodies;\n\t\t\t\t}\n\n\t\t\t\tif (body == null || body.Octets == 0) {\n\t\t\t\t\tmessage.Fields |= MessageSummaryItems.PreviewText;\n\t\t\t\t\tmessage.PreviewText = string.Empty;\n\t\t\t\t\tOnMessageSummaryFetched (message);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!bodies.TryGetValue (body.PartSpecifier, out var uids)) {\n\t\t\t\t\tuids = new UniqueIdSet (SortOrder.Ascending);\n\t\t\t\t\tbodies.Add (body.PartSpecifier, uids);\n\t\t\t\t}\n\n\t\t\t\tuids.Add (message.UniqueId);\n\t\t\t}\n\t\t}\n\n\t\tvoid GetPreviewText (FetchSummaryContext sctx, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCreateFetchPreviewTextMappings (sctx, out var textBodies, out var htmlBodies);\n\n\t\t\tMessageExpunged += sctx.OnMessageExpunged;\n\n\t\t\ttry {\n\t\t\t\tFetchPreviewText (sctx, textBodies, PreviewTextLength, cancellationToken);\n\t\t\t\tFetchPreviewText (sctx, htmlBodies, PreviewHtmlLength, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tMessageExpunged -= sctx.OnMessageExpunged;\n\t\t\t}\n\t\t}\n\n\t\tasync Task GetPreviewTextAsync (FetchSummaryContext sctx, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCreateFetchPreviewTextMappings (sctx, out var textBodies, out var htmlBodies);\n\n\t\t\tMessageExpunged += sctx.OnMessageExpunged;\n\n\t\t\ttry {\n\t\t\t\tawait FetchPreviewTextAsync (sctx, textBodies, PreviewTextLength, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait FetchPreviewTextAsync (sctx, htmlBodies, PreviewHtmlLength, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tMessageExpunged -= sctx.OnMessageExpunged;\n\t\t\t}\n\t\t}\n\n\t\tinternal static bool IsEmptyFetchRequest (IFetchRequest request)\n\t\t{\n\t\t\treturn request.Items == MessageSummaryItems.None && (request.Headers == null || (request.Headers.Count == 0 && !request.Headers.Exclude));\n\t\t}\n\n\t\tbool CheckCanFetch (IList<UniqueId> uids, IFetchRequest request)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.ChangedSince.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tCheckState (true, false);\n\n\t\t\treturn uids.Count > 0 && !IsEmptyFetchRequest (request);\n\t\t}\n\n\t\tstring CreateFetchCommand (IList<UniqueId> uids, IFetchRequest request, out bool previewText)\n\t\t{\n\t\t\tvar query = FormatSummaryItems (Engine, request, out previewText);\n\t\t\tvar changedSince = string.Empty;\n\n\t\t\tif (request.ChangedSince.HasValue) {\n\t\t\t\tvar vanished = Engine.QResyncEnabled ? \" VANISHED\" : string.Empty;\n\n\t\t\t\tchangedSince = string.Format (CultureInfo.InvariantCulture, \" (CHANGEDSINCE {0}{1})\", request.ChangedSince.Value, vanished);\n\t\t\t}\n\n\t\t\treturn string.Format (\"UID FETCH %s {0}{1}\\r\\n\", query, changedSince);\n\t\t}\n\n\t\tstatic int EstimateInitialCapacity (IList<UniqueId> uids)\n\t\t{\n\t\t\tif (uids is UniqueIdRange || uids is UniqueIdSet) {\n\t\t\t\t// UniqueIdRange is likely to refer to UIDs that have not yet been assigned or have been expunged,\n\t\t\t\t// so cap our maximum initial capacity to 1024 (a reasonable limit?).\n\t\t\t\treturn Math.Min (uids.Count, 1024);\n\t\t\t}\n\n\t\t\t// If the user supplied an exact set of UIDs, then we'll assume they all exist\n\t\t\t// and therefore we can use the capacity of `uids` as our initial capacity.\n\t\t\treturn uids.Count;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetches the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the IMAP server may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<IMessageSummary> Fetch (IList<UniqueId> uids, IFetchRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanFetch (uids, request))\n\t\t\t\treturn Array.Empty<IMessageSummary> ();\n\n\t\t\tvar command = CreateFetchCommand (uids, request, out bool previewText);\n\t\t\tvar ctx = new FetchSummaryContext (EstimateInitialCapacity (uids));\n\n\t\t\tMessageExpunged += ctx.OnMessageExpunged;\n\n\t\t\ttry {\n\t\t\t\tforeach (var ic in Engine.CreateCommands (cancellationToken, this, command, uids)) {\n\t\t\t\t\tic.RegisterUntaggedHandler (\"FETCH\", UntaggedFetchSummaryItemsHandler);\n\t\t\t\t\tic.UserData = ctx;\n\n\t\t\t\t\tEngine.QueueCommand (ic);\n\n\t\t\t\t\tEngine.Run (ic);\n\n\t\t\t\t\tProcessFetchResponse (ic);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tMessageExpunged -= ctx.OnMessageExpunged;\n\t\t\t}\n\n\t\t\tif (previewText)\n\t\t\t\tGetPreviewText (ctx, cancellationToken);\n\n\t\t\treturn ctx.Messages.AsReadOnly ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetches the message summaries for the specified message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message UIDs.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the IMAP server may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"uids\">The UIDs.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<IMessageSummary>> FetchAsync (IList<UniqueId> uids, IFetchRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanFetch (uids, request))\n\t\t\t\treturn Array.Empty<IMessageSummary> ();\n\n\t\t\tvar command = CreateFetchCommand (uids, request, out bool previewText);\n\t\t\tvar ctx = new FetchSummaryContext (EstimateInitialCapacity (uids));\n\n\t\t\tMessageExpunged += ctx.OnMessageExpunged;\n\n\t\t\ttry {\n\t\t\t\tforeach (var ic in Engine.CreateCommands (cancellationToken, this, command, uids)) {\n\t\t\t\t\tic.RegisterUntaggedHandler (\"FETCH\", UntaggedFetchSummaryItemsHandler);\n\t\t\t\t\tic.UserData = ctx;\n\n\t\t\t\t\tEngine.QueueCommand (ic);\n\n\t\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t\tProcessFetchResponse (ic);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tMessageExpunged -= ctx.OnMessageExpunged;\n\t\t\t}\n\n\t\t\tif (previewText)\n\t\t\t\tawait GetPreviewTextAsync (ctx, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ctx.Messages.AsReadOnly ();\n\t\t}\n\n\t\tbool CheckCanFetch (IList<int> indexes, IFetchRequest request)\n\t\t{\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.ChangedSince.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tCheckState (true, false);\n\t\t\tCheckAllowIndexes ();\n\n\t\t\treturn indexes.Count > 0 && !IsEmptyFetchRequest (request);\n\t\t}\n\n\t\tImapCommand QueueFetchCommand (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken, out bool previewText)\n\t\t{\n\t\t\tvar query = FormatSummaryItems (Engine, request, out previewText);\n\t\t\tvar set = ImapUtils.FormatIndexSet (Engine, indexes);\n\t\t\tvar changedSince = string.Empty;\n\n\t\t\tif (request.ChangedSince.HasValue)\n\t\t\t\tchangedSince = string.Format (CultureInfo.InvariantCulture, \" (CHANGEDSINCE {0})\", request.ChangedSince.Value);\n\n\t\t\tvar command = string.Format (\"FETCH {0} {1}{2}\\r\\n\", set, query, changedSince);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tvar ctx = new FetchSummaryContext (indexes.Count);\n\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", UntaggedFetchSummaryItemsHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetches the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the IMAP server may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<IMessageSummary> Fetch (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanFetch (indexes, request))\n\t\t\t\treturn Array.Empty<IMessageSummary> ();\n\n\t\t\tvar ic = QueueFetchCommand (indexes, request, cancellationToken, out bool previewText);\n\t\t\tvar ctx = (FetchSummaryContext) ic.UserData!;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (previewText)\n\t\t\t\tGetPreviewText (ctx, cancellationToken);\n\n\t\t\treturn ctx.Messages.AsReadOnly ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetches the message summaries for the specified message indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the specified message indexes.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the IMAP server may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<IMessageSummary>> FetchAsync (IList<int> indexes, IFetchRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanFetch (indexes, request))\n\t\t\t\treturn Array.Empty<IMessageSummary> ();\n\n\t\t\tvar ic = QueueFetchCommand (indexes, request, cancellationToken, out bool previewText);\n\t\t\tvar ctx = (FetchSummaryContext) ic.UserData!;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (previewText)\n\t\t\t\tawait GetPreviewTextAsync (ctx, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ctx.Messages.AsReadOnly ();\n\t\t}\n\n\t\tstatic string GetFetchRange (int min, int max)\n\t\t{\n\t\t\tvar minValue = (min + 1).ToString (CultureInfo.InvariantCulture);\n\n\t\t\tif (min == max)\n\t\t\t\treturn minValue;\n\n\t\t\tvar maxValue = max != -1 ? (max + 1).ToString (CultureInfo.InvariantCulture) : \"*\";\n\n\t\t\treturn string.Format (CultureInfo.InvariantCulture, \"{0}:{1}\", minValue, maxValue);\n\t\t}\n\n\t\tbool CheckCanFetch (int min, int max, IFetchRequest request)\n\t\t{\n\t\t\tif (min < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (min));\n\n\t\t\tif (max != -1 && max < min)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (max));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.ChangedSince.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tCheckState (true, false);\n\t\t\tCheckAllowIndexes ();\n\n\t\t\treturn Count > 0 && !IsEmptyFetchRequest (request);\n\t\t}\n\n\t\tImapCommand QueueFetchCommand (int min, int max, IFetchRequest request, CancellationToken cancellationToken, out bool previewText)\n\t\t{\n\t\t\tint capacity = Math.Max (max < 0 || max > Count ? Count : max, min) - min;\n\t\t\tvar query = FormatSummaryItems (Engine, request, out previewText);\n\t\t\tvar set = GetFetchRange (min, max);\n\t\t\tvar changedSince = string.Empty;\n\n\t\t\tif (request.ChangedSince.HasValue)\n\t\t\t\tchangedSince = string.Format (CultureInfo.InvariantCulture, \" (CHANGEDSINCE {0})\", request.ChangedSince.Value);\n\n\t\t\tvar command = string.Format (\"FETCH {0} {1}{2}\\r\\n\", set, query, changedSince);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tvar ctx = new FetchSummaryContext (capacity);\n\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", UntaggedFetchSummaryItemsHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Fetches the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the IMAP server may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<IMessageSummary> Fetch (int min, int max, IFetchRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanFetch (min, max, request))\n\t\t\t\treturn Array.Empty<IMessageSummary> ();\n\n\t\t\tvar ic = QueueFetchCommand (min, max, request, cancellationToken, out bool previewText);\n\t\t\tvar ctx = (FetchSummaryContext) ic.UserData!;\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (previewText)\n\t\t\t\tGetPreviewText (ctx, cancellationToken);\n\n\t\t\treturn ctx.Messages.AsReadOnly ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously fetches the message summaries for the messages between the two indexes, inclusive.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Fetches the message summaries for the messages between the two\n\t\t/// indexes, inclusive.</para>\n\t\t/// <para>It should be noted that if another client has modified any message\n\t\t/// in the folder, the IMAP server may choose to return information that was\n\t\t/// not explicitly requested. It is therefore important to be prepared to\n\t\t/// handle both additional fields on a <see cref=\"IMessageSummary\"/> for\n\t\t/// messages that were requested as well as summaries for messages that were\n\t\t/// not requested at all.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An enumeration of summaries for the requested messages.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"request\">The fetch request.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"request\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<IMessageSummary>> FetchAsync (int min, int max, IFetchRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanFetch (min, max, request))\n\t\t\t\treturn Array.Empty<IMessageSummary> ();\n\n\t\t\tvar ic = QueueFetchCommand (min, max, request, cancellationToken, out bool previewText);\n\t\t\tvar ctx = (FetchSummaryContext) ic.UserData!;\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (previewText)\n\t\t\t\tawait GetPreviewTextAsync (ctx, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ctx.Messages.AsReadOnly ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a backing stream for use with the GetMessage, GetBodyPart, and GetStream methods.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Allows subclass implementations to override the type of stream\n\t\t/// created for use with the GetMessage, GetBodyPart and GetStream methods.</para>\n\t\t/// <para>This could be useful for subclass implementations that intend to implement\n\t\t/// support for caching and/or for subclass implementations that want to use\n\t\t/// temporary file streams instead of memory-based streams for larger amounts of\n\t\t/// message data.</para>\n\t\t/// <para>Subclasses that implement caching using this API should wait for\n\t\t/// <see cref=\"CommitStream\"/> before adding the stream to their cache.</para>\n\t\t/// <para>Streams returned by this method SHOULD clean up any allocated resources\n\t\t/// such as deleting temporary files from the file system.</para>\n\t\t/// <note type=\"note\">The <paramref name=\"uid\"/> will not be available for the various\n\t\t/// GetMessage(), GetBodyPart() and GetStream() methods that take a message index rather\n\t\t/// than a <see cref=\"UniqueId\"/>. It may also not be available if the IMAP server\n\t\t/// response does not specify the <c>UID</c> value prior to sending the <c>literal-string</c>\n\t\t/// token containing the message stream.</note>\n\t\t/// </remarks>\n\t\t/// <seealso cref=\"CommitStream\"/>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The unique identifier of the message, if available.</param>\n\t\t/// <param name=\"section\">The section of the message that is being fetched.</param>\n\t\t/// <param name=\"offset\">The starting offset of the message section being fetched.</param>\n\t\t/// <param name=\"length\">The length of the stream being fetched, measured in bytes.</param>\n\t\tprotected virtual Stream CreateStream (UniqueId? uid, string section, int offset, int length)\n\t\t{\n\t\t\tif (length > 4096)\n\t\t\t\treturn new MemoryBlockStream ();\n\n\t\t\treturn new MemoryStream (length);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Commit a stream returned by <see cref=\"CreateStream\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Commits a stream returned by <see cref=\"CreateStream\"/>.</para>\n\t\t/// <para>This method is called only after both the message data has successfully\n\t\t/// been written to the stream returned by <see cref=\"CreateStream\"/> and a\n\t\t/// <see cref=\"UniqueId\"/> has been obtained for the associated message.</para>\n\t\t/// <para>For subclasses implementing caching, this method should be used for\n\t\t/// committing the stream to their cache.</para>\n\t\t/// <note type=\"note\">Subclass implementations may take advantage of the fact that\n\t\t/// <see cref=\"CommitStream\"/> allows returning a new <see cref=\"System.IO.Stream\"/>\n\t\t/// reference if they move a file on the file system and wish to return a new\n\t\t/// <see cref=\"System.IO.FileStream\"/> based on the new path, for example.</note>\n\t\t/// </remarks>\n\t\t/// <seealso cref=\"CreateStream\"/>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"stream\">The stream.</param>\n\t\t/// <param name=\"uid\">The unique identifier of the message.</param>\n\t\t/// <param name=\"section\">The section of the message that the stream represents.</param>\n\t\t/// <param name=\"offset\">The starting offset of the message section.</param>\n\t\t/// <param name=\"length\">The length of the stream, measured in bytes.</param>\n\t\tprotected virtual Stream CommitStream (Stream stream, UniqueId uid, string section, int offset, int length)\n\t\t{\n\t\t\treturn stream;\n\t\t}\n\n\t\tHeaderList ParseHeaders (Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn Engine.ParseHeaders (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tstream.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tasync Task<HeaderList> ParseHeadersAsync (Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn await Engine.ParseHeadersAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tstream.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tMimeMessage ParseMessage (Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tbool dispose = !(stream is MemoryStream || stream is MemoryBlockStream);\n\n\t\t\ttry {\n\t\t\t\treturn Engine.ParseMessage (stream, !dispose, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tif (dispose)\n\t\t\t\t\tstream.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tasync Task<MimeMessage> ParseMessageAsync (Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tbool dispose = !(stream is MemoryStream || stream is MemoryBlockStream);\n\n\t\t\ttry {\n\t\t\t\treturn await Engine.ParseMessageAsync (stream, !dispose, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tif (dispose)\n\t\t\t\t\tstream.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tMimeEntity ParseEntity (Stream stream, bool dispose, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn Engine.ParseEntity (stream, !dispose, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tif (dispose)\n\t\t\t\t\tstream.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tasync Task<MimeEntity> ParseEntityAsync (Stream stream, bool dispose, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn await Engine.ParseEntityAsync (stream, !dispose, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tif (dispose)\n\t\t\t\t\tstream.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tclass Section\n\t\t{\n\t\t\tpublic int Index;\n\t\t\tpublic UniqueId? UniqueId;\n\t\t\tpublic Stream Stream;\n\t\t\tpublic string Name;\n\t\t\tpublic int Offset;\n\t\t\tpublic int Length;\n\n\t\t\tpublic Section (Stream stream, int index, UniqueId? uid, string name, int offset, int length)\n\t\t\t{\n\t\t\t\tStream = stream;\n\t\t\t\tOffset = offset;\n\t\t\t\tLength = length;\n\t\t\t\tUniqueId = uid;\n\t\t\t\tIndex = index;\n\t\t\t\tName = name;\n\t\t\t}\n\t\t}\n\n\t\tabstract class FetchStreamContextBase : IDisposable\n\t\t{\n\t\t\tpublic readonly List<Section> Sections = new List<Section> ();\n\t\t\treadonly ITransferProgress? progress;\n\n\t\t\tprotected FetchStreamContextBase (ITransferProgress? progress)\n\t\t\t{\n\t\t\t\tthis.progress = progress;\n\t\t\t}\n\n\t\t\tpublic abstract void Add (Section section, CancellationToken cancellationToken);\n\n\t\t\tpublic virtual Task AddAsync (Section section, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tAdd (section, cancellationToken);\n\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tpublic virtual bool Contains (int index, string specifier, [NotNullWhen (true)] out Section? section)\n\t\t\t{\n\t\t\t\tsection = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tpublic abstract void SetUniqueId (int index, UniqueId uid, CancellationToken cancellationToken);\n\n\t\t\tpublic virtual Task SetUniqueIdAsync (int index, UniqueId uid, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tSetUniqueId (index, uid, cancellationToken);\n\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tpublic void Report (long nread, long total)\n\t\t\t{\n\t\t\t\tif (progress == null)\n\t\t\t\t\treturn;\n\n\t\t\t\tprogress.Report (nread, total);\n\t\t\t}\n\n\t\t\tpublic void Dispose ()\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < Sections.Count; i++) {\n\t\t\t\t\tvar section = Sections[i];\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsection.Stream.Dispose ();\n\t\t\t\t\t} catch (IOException) {\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tclass FetchStreamContext : FetchStreamContextBase\n\t\t{\n\t\t\tpublic FetchStreamContext (ITransferProgress? progress) : base (progress)\n\t\t\t{\n\t\t\t}\n\n\t\t\tpublic override void Add (Section section, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tSections.Add (section);\n\t\t\t}\n\n\t\t\tpublic bool TryGetSection (UniqueId uid, string specifier, [NotNullWhen (true)] out Section? section, bool remove = false)\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < Sections.Count; i++) {\n\t\t\t\t\tvar item = Sections[i];\n\n\t\t\t\t\tif (!item.UniqueId.HasValue || item.UniqueId.Value != uid)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (item.Name.Equals (specifier, StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\tif (remove)\n\t\t\t\t\t\t\tSections.RemoveAt (i);\n\n\t\t\t\t\t\tsection = item;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsection = null;\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tpublic bool TryGetSection (int index, string specifier, [NotNullWhen (true)] out Section? section, bool remove = false)\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < Sections.Count; i++) {\n\t\t\t\t\tvar item = Sections[i];\n\n\t\t\t\t\tif (item.Index != index)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (item.Name.Equals (specifier, StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\tif (remove)\n\t\t\t\t\t\t\tSections.RemoveAt (i);\n\n\t\t\t\t\t\tsection = item;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsection = null;\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tpublic override void SetUniqueId (int index, UniqueId uid, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < Sections.Count; i++) {\n\t\t\t\t\tif (Sections[i].Index == index)\n\t\t\t\t\t\tSections[i].UniqueId = uid;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid FetchStream (ImapEngine engine, ImapCommand ic, int index)\n\t\t{\n\t\t\tvar token = engine.ReadToken (ic.CancellationToken);\n\t\t\tvar ctx = (FetchStreamContextBase) ic.UserData!;\n\t\t\tvar sectionBuilder = new StringBuilder ();\n\t\t\tIList<Annotation>? annotations = null;\n\t\t\tMessageFlags flags = MessageFlags.None;\n\t\t\tHashSet<string>? keywords = null;\n\t\t\tIList<string>? labels = null;\n\t\t\tlong nread = 0, size = 0;\n\t\t\tUniqueId? uid = null;\n\t\t\tulong? modseq = null;\n\t\t\tStream stream;\n\t\t\tstring name;\n\t\t\tbyte[] buf;\n\t\t\tint n;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln) {\n\t\t\t\t\t// Note: Most likely the message body was calculated to be 1 or 2 bytes too\n\t\t\t\t\t// short (e.g. did not include the trailing <CRLF>) and that is the EOLN we just\n\t\t\t\t\t// reached. Ignore it and continue as normal.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/954 for details.\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\t\tvar atom = (string) token.Value;\n\t\t\t\tint offset = 0, length;\n\t\t\t\tuint value;\n\n\t\t\t\tif (atom.Equals (\"BODY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenBracket, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tsectionBuilder.Clear ();\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseBracket)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\t\tsectionBuilder.Append (\" (\");\n\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t// the header field names will generally be atoms or qstrings but may also be literals\n\t\t\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\t\t\tvar field = ImapUtils.ReadStringToken (engine, ImapEngine.FetchBodySyntaxErrorFormat, ic.CancellationToken);\n\n\t\t\t\t\t\t\t\tsectionBuilder.Append (field);\n\t\t\t\t\t\t\t\tsectionBuilder.Append (' ');\n\t\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\t\tif (sectionBuilder[sectionBuilder.Length - 1] == ' ')\n\t\t\t\t\t\t\t\tsectionBuilder.Length--;\n\n\t\t\t\t\t\t\tsectionBuilder.Append (')');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t\t\tsectionBuilder.Append ((string) token.Value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseBracket, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.Atom) {\n\t\t\t\t\t\t// this might be a region (\"<###>\")\n\t\t\t\t\t\tvar expr = (string) token.Value;\n\n\t\t\t\t\t\tif (expr.Length > 2 && expr[0] == '<' && expr[expr.Length - 1] == '>') {\n\t\t\t\t\t\t\tvar region = expr.Substring (1, expr.Length - 2);\n\n\t\t\t\t\t\t\tint.TryParse (region, NumberStyles.None, CultureInfo.InvariantCulture, out offset);\n\n\t\t\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tname = sectionBuilder.ToString ();\n\n\t\t\t\t\tswitch (token.Type) {\n\t\t\t\t\tcase ImapTokenType.Literal:\n\t\t\t\t\t\tlength = (int) token.Value;\n\t\t\t\t\t\tsize += length;\n\n\t\t\t\t\t\tstream = CreateStream (uid, name, offset, length);\n\n\t\t\t\t\t\tbuf = ArrayPool<byte>.Shared.Rent (BufferSize);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tn = engine.Stream!.Read (buf, 0, BufferSize, ic.CancellationToken);\n\n\t\t\t\t\t\t\t\tif (n > 0) {\n\t\t\t\t\t\t\t\t\tstream.Write (buf, 0, n);\n\t\t\t\t\t\t\t\t\tnread += n;\n\n\t\t\t\t\t\t\t\t\tctx.Report (nread, size);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\t\tstream.Position = 0;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ImapTokenType.QString:\n\t\t\t\t\tcase ImapTokenType.Atom:\n\t\t\t\t\t\tbuf = Encoding.UTF8.GetBytes ((string) token.Value);\n\t\t\t\t\t\tlength = buf.Length;\n\t\t\t\t\t\tnread += length;\n\t\t\t\t\t\tsize += length;\n\n\t\t\t\t\t\tstream = CreateStream (uid, name, offset, length);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tstream.Write (buf, 0, length);\n\t\t\t\t\t\t\tctx.Report (nread, size);\n\t\t\t\t\t\t\tstream.Position = 0;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t\t\tstream = CreateStream (uid, name, offset, 0);\n\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ImapTokenType.CloseParen:\n\t\t\t\t\t\t// Note: Yandex IMAP servers sometimes do not include the BODY[<section>] content value in the FETCH response.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1708 for details.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// Unget the ')' token and pretend we got a NIL token.\n\t\t\t\t\t\tengine.UngetToken (token);\n\t\t\t\t\t\tgoto case ImapTokenType.Nil;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (uid.HasValue)\n\t\t\t\t\t\tstream = CommitStream (stream, uid.Value, name, offset, length);\n\n\t\t\t\t\t// prevent leaks in the (invalid) case where a section may be returned twice\n\t\t\t\t\tif (ctx.Contains (index, name, out var section))\n\t\t\t\t\t\tsection.Stream.Dispose ();\n\n\t\t\t\t\tsection = new Section (stream, index, uid, name, offset, length);\n\t\t\t\t\tctx.Add (section, ic.CancellationToken);\n\t\t\t\t} else if (atom.Equals (\"UID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tvalue = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tuid = new UniqueId (UidValidity, value);\n\n\t\t\t\t\tctx.SetUniqueId (index, uid.Value, ic.CancellationToken);\n\t\t\t\t} else if (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t// Note: Some IMAP servers (such as Zoho Mail) will return a MODSEQ of -1 in some cases (not sure why).\n\t\t\t\t\t//\n\t\t\t\t\t// If we get an invalid value, just ignore it.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1686 for details.\n\t\t\t\t\tif (ImapEngine.TryParseNumber64 (token, out ulong n64)) {\n\t\t\t\t\t\tif (n64 > HighestModSeq)\n\t\t\t\t\t\t\tUpdateHighestModSeq (n64);\n\n\t\t\t\t\t\tmodseq = n64;\n\t\t\t\t\t}\n\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"FLAGS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// even though we didn't request this piece of information, the IMAP server\n\t\t\t\t\t// may send it if another client has recently modified the message flags.\n\t\t\t\t\tkeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\t\t\tflags = ImapUtils.ParseFlagsList (engine, atom, keywords, ic.CancellationToken);\n\t\t\t\t} else if (atom.Equals (\"X-GM-LABELS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// even though we didn't request this piece of information, the IMAP server\n\t\t\t\t\t// may send it if another client has recently modified the message labels.\n\t\t\t\t\tlabels = ImapUtils.ParseLabelsList (engine, ic.CancellationToken);\n\t\t\t\t} else if (atom.Equals (\"ANNOTATION\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// even though we didn't request this piece of information, the IMAP server\n\t\t\t\t\t// may send it if another client has recently modified the message annotations.\n\t\t\t\t\tannotations = ImapUtils.ParseAnnotations (engine, ic.CancellationToken);\n\t\t\t\t} else {\n\t\t\t\t\t// Unexpected or unknown token (such as XAOL.SPAM.REASON or XAOL-MSGID). Simply read 1 more token (the argument) and ignore.\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\t\tSkipParenthesizedList (engine, ic.CancellationToken);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tif (keywords != null)\n\t\t\t\tOnMessageFlagsChanged (new MessageFlagsChangedEventArgs (index, flags, keywords) { UniqueId = uid, ModSeq = modseq });\n\n\t\t\tif (labels != null)\n\t\t\t\tOnMessageLabelsChanged (new MessageLabelsChangedEventArgs (index, labels) { UniqueId = uid, ModSeq = modseq });\n\n\t\t\tif (annotations != null)\n\t\t\t\tOnAnnotationsChanged (new AnnotationsChangedEventArgs (index, annotations) { UniqueId = uid, ModSeq = modseq });\n\n\t\t\tif (modseq.HasValue)\n\t\t\t\tOnModSeqChanged (new ModSeqChangedEventArgs (index, modseq.Value) { UniqueId = uid });\n\t\t}\n\n\t\tasync Task FetchStreamAsync (ImapEngine engine, ImapCommand ic, int index)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\tvar ctx = (FetchStreamContextBase) ic.UserData!;\n\t\t\tvar sectionBuilder = new StringBuilder ();\n\t\t\tIList<Annotation>? annotations = null;\n\t\t\tMessageFlags flags = MessageFlags.None;\n\t\t\tHashSet<string>? keywords = null;\n\t\t\tIList<string>? labels = null;\n\t\t\tlong nread = 0, size = 0;\n\t\t\tUniqueId? uid = null;\n\t\t\tulong? modseq = null;\n\t\t\tStream stream;\n\t\t\tstring name;\n\t\t\tbyte[] buf;\n\t\t\tint n;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln) {\n\t\t\t\t\t// Note: Most likely the message body was calculated to be 1 or 2 bytes too\n\t\t\t\t\t// short (e.g. did not include the trailing <CRLF>) and that is the EOLN we just\n\t\t\t\t\t// reached. Ignore it and continue as normal.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/954 for details.\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\t\tvar atom = (string) token.Value;\n\t\t\t\tint offset = 0, length;\n\t\t\t\tuint value;\n\n\t\t\t\tif (atom.Equals (\"BODY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenBracket, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tsectionBuilder.Clear ();\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseBracket)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t\t\tsectionBuilder.Append (\" (\");\n\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t// the header field names will generally be atoms or qstrings but may also be literals\n\t\t\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\t\t\tvar field = await ImapUtils.ReadStringTokenAsync (engine, ImapEngine.FetchBodySyntaxErrorFormat, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\t\tsectionBuilder.Append (field);\n\t\t\t\t\t\t\t\tsectionBuilder.Append (' ');\n\t\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\t\tif (sectionBuilder[sectionBuilder.Length - 1] == ' ')\n\t\t\t\t\t\t\t\tsectionBuilder.Length--;\n\n\t\t\t\t\t\t\tsectionBuilder.Append (')');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t\t\tsectionBuilder.Append ((string) token.Value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseBracket, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.Atom) {\n\t\t\t\t\t\t// this might be a region (\"<###>\")\n\t\t\t\t\t\tvar expr = (string) token.Value;\n\n\t\t\t\t\t\tif (expr.Length > 2 && expr[0] == '<' && expr[expr.Length - 1] == '>') {\n\t\t\t\t\t\t\tvar region = expr.Substring (1, expr.Length - 2);\n\n\t\t\t\t\t\t\tint.TryParse (region, NumberStyles.None, CultureInfo.InvariantCulture, out offset);\n\n\t\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tname = sectionBuilder.ToString ();\n\n\t\t\t\t\tswitch (token.Type) {\n\t\t\t\t\tcase ImapTokenType.Literal:\n\t\t\t\t\t\tlength = (int) token.Value;\n\t\t\t\t\t\tsize += length;\n\n\t\t\t\t\t\tstream = CreateStream (uid, name, offset, length);\n\n\t\t\t\t\t\tbuf = ArrayPool<byte>.Shared.Rent (BufferSize);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tn = await engine.Stream!.ReadAsync (buf, 0, BufferSize, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\t\t\tif (n > 0) {\n\t\t\t\t\t\t\t\t\tstream.Write (buf, 0, n);\n\t\t\t\t\t\t\t\t\tnread += n;\n\n\t\t\t\t\t\t\t\t\tctx.Report (nread, size);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} while (true);\n\n\t\t\t\t\t\t\tstream.Position = 0;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tArrayPool<byte>.Shared.Return (buf);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ImapTokenType.QString:\n\t\t\t\t\tcase ImapTokenType.Atom:\n\t\t\t\t\t\tbuf = Encoding.UTF8.GetBytes ((string) token.Value);\n\t\t\t\t\t\tlength = buf.Length;\n\t\t\t\t\t\tnread += length;\n\t\t\t\t\t\tsize += length;\n\n\t\t\t\t\t\tstream = CreateStream (uid, name, offset, length);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tstream.Write (buf, 0, length);\n\t\t\t\t\t\t\tctx.Report (nread, size);\n\t\t\t\t\t\t\tstream.Position = 0;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t\t\tstream = CreateStream (uid, name, offset, 0);\n\t\t\t\t\t\tlength = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase ImapTokenType.CloseParen:\n\t\t\t\t\t\t// Note: Yandex IMAP servers sometimes do not include the BODY[<section>] content value in the FETCH response.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1708 for details.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// Unget the ')' token and pretend we got a NIL token.\n\t\t\t\t\t\tengine.UngetToken (token);\n\t\t\t\t\t\tgoto case ImapTokenType.Nil;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (uid.HasValue)\n\t\t\t\t\t\tstream = CommitStream (stream, uid.Value, name, offset, length);\n\n\t\t\t\t\t// prevent leaks in the (invalid) case where a section may be returned twice\n\t\t\t\t\tif (ctx.Contains (index, name, out var section))\n\t\t\t\t\t\tsection.Stream.Dispose ();\n\n\t\t\t\t\tsection = new Section (stream, index, uid, name, offset, length);\n\t\t\t\t\tawait ctx.AddAsync (section, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (atom.Equals (\"UID\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tvalue = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tuid = new UniqueId (UidValidity, value);\n\n\t\t\t\t\tawait ctx.SetUniqueIdAsync (index, uid.Value, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\t// Note: Some IMAP servers (such as Zoho Mail) will return a MODSEQ of -1 in some cases (not sure why).\n\t\t\t\t\t//\n\t\t\t\t\t// If we get an invalid value, just ignore it.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1686 for details.\n\t\t\t\t\tif (ImapEngine.TryParseNumber64 (token, out ulong n64)) {\n\t\t\t\t\t\tif (n64 > HighestModSeq)\n\t\t\t\t\t\t\tUpdateHighestModSeq (n64);\n\n\t\t\t\t\t\tmodseq = n64;\n\t\t\t\t\t}\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"FLAGS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// even though we didn't request this piece of information, the IMAP server\n\t\t\t\t\t// may send it if another client has recently modified the message flags.\n\t\t\t\t\tkeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t\t\t\tflags = await ImapUtils.ParseFlagsListAsync (engine, atom, keywords, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (atom.Equals (\"X-GM-LABELS\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// even though we didn't request this piece of information, the IMAP server\n\t\t\t\t\t// may send it if another client has recently modified the message labels.\n\t\t\t\t\tlabels = await ImapUtils.ParseLabelsListAsync (engine, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t} else if (atom.Equals (\"ANNOTATION\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t// even though we didn't request this piece of information, the IMAP server\n\t\t\t\t\t// may send it if another client has recently modified the message annotations.\n\t\t\t\t\tannotations = await ImapUtils.ParseAnnotationsAsync (engine, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t} else {\n\t\t\t\t\t// Unexpected or unknown token (such as XAOL.SPAM.REASON or XAOL-MSGID). Simply read 1 more token (the argument) and ignore.\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\t\tawait SkipParenthesizedListAsync (engine, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"FETCH\", token);\n\n\t\t\tif (keywords != null)\n\t\t\t\tOnMessageFlagsChanged (new MessageFlagsChangedEventArgs (index, flags, keywords) { UniqueId = uid, ModSeq = modseq });\n\n\t\t\tif (labels != null)\n\t\t\t\tOnMessageLabelsChanged (new MessageLabelsChangedEventArgs (index, labels) { UniqueId = uid, ModSeq = modseq });\n\n\t\t\tif (annotations != null)\n\t\t\t\tOnAnnotationsChanged (new AnnotationsChangedEventArgs (index, annotations) { UniqueId = uid, ModSeq = modseq });\n\n\t\t\tif (modseq.HasValue)\n\t\t\t\tOnModSeqChanged (new ModSeqChangedEventArgs (index, modseq.Value) { UniqueId = uid });\n\t\t}\n\n\t\tTask FetchStreamHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn FetchStreamAsync (engine, ic, index);\n\n\t\t\tFetchStream (engine, ic, index);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tstatic string GetBodyPartQuery (string partSpec, bool headersOnly, out string[] tags)\n\t\t{\n\t\t\tstring query;\n\n\t\t\tif (headersOnly) {\n\t\t\t\ttags = new string[1];\n\n\t\t\t\tif (partSpec.Length > 0) {\n\t\t\t\t\tquery = string.Format (\"BODY.PEEK[{0}.MIME]\", partSpec);\n\t\t\t\t\ttags[0] = partSpec + \".MIME\";\n\t\t\t\t} else {\n\t\t\t\t\tquery = \"BODY.PEEK[HEADER]\";\n\t\t\t\t\ttags[0] = \"HEADER\";\n\t\t\t\t}\n\t\t\t} else if (partSpec.Length > 0) {\n\t\t\t\ttags = new string[] {\n\t\t\t\t\tpartSpec + \".MIME\",\n\t\t\t\t\tpartSpec\n\t\t\t\t};\n\n\t\t\t\tquery = string.Format (\"BODY.PEEK[{0}] BODY.PEEK[{1}]\", tags[0], tags[1]);\n\t\t\t} else {\n\t\t\t\ttags = new string[] { string.Empty };\n\t\t\t\tquery = \"BODY.PEEK[]\";\n\t\t\t}\n\n\t\t\treturn query;\n\t\t}\n\n\t\tImapCommand QueueGetHeadersCommand (UniqueId uid, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, \"UID FETCH %u (BODY.PEEK[HEADER])\\r\\n\", uid.Id);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetHeadersResponse (ImapCommand ic, FetchStreamContext ctx, UniqueId uid)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (uid, \"HEADER\", out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested message headers.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override HeaderList GetHeaders (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (uid, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, uid);\n\n\t\t\t\treturn ParseHeaders (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<HeaderList> GetHeadersAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (uid, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, uid);\n\n\t\t\t\treturn await ParseHeadersAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueGetHeadersCommand (UniqueId uid, string partSpecifier, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx, out string[] tags)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (partSpecifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (partSpecifier));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar command = string.Format (\"UID FETCH {0} ({1})\\r\\n\", uid, GetBodyPartQuery (partSpecifier, true, out tags));\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetHeadersResponse (ImapCommand ic, FetchStreamContext ctx, UniqueId uid, string[] tags)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (uid, tags[0], out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested body part headers.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual HeaderList GetHeaders (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (uid, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, uid, tags);\n\n\t\t\t\treturn ParseHeaders (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task<HeaderList> GetHeadersAsync (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (uid, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, uid, tags);\n\n\t\t\t\treturn await ParseHeadersAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override HeaderList GetHeaders (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetHeaders (uid, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<HeaderList> GetHeadersAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetHeadersAsync (uid, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\tImapCommand QueueGetHeadersCommand (int index, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, \"FETCH %d (BODY.PEEK[HEADER])\\r\\n\", index + 1);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetHeadersResponse (ImapCommand ic, FetchStreamContext ctx, int index)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (index, \"HEADER\", out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested message headers.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override HeaderList GetHeaders (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (index, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, index);\n\n\t\t\t\treturn ParseHeaders (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message headers.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<HeaderList> GetHeadersAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (index, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, index);\n\n\t\t\t\treturn await ParseHeadersAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueGetHeadersCommand (int index, string partSpecifier, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx, out string[] tags)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (partSpecifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (partSpecifier));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar command = string.Format (\"FETCH {0} ({1})\\r\\n\", index + 1, GetBodyPartQuery (partSpecifier, true, out tags));\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetHeadersResponse (ImapCommand ic, FetchStreamContext ctx, int index, string[] tags)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (index, tags[0], out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested body part headers.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual HeaderList GetHeaders (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (index, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, index, tags);\n\n\t\t\t\treturn ParseHeaders (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task<HeaderList> GetHeadersAsync (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetHeadersCommand (index, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tvar stream = ProcessGetHeadersResponse (ic, ctx, index, tags);\n\n\t\t\t\treturn await ParseHeadersAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override HeaderList GetHeaders (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetHeaders (index, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part headers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part headers.\n\t\t/// </remarks>\n\t\t/// <returns>The body part headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested body part headers.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<HeaderList> GetHeadersAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetHeadersAsync (index, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\tImapCommand QueueGetMessageCommand (UniqueId uid, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, \"UID FETCH %u (BODY.PEEK[])\\r\\n\", uid.Id);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetMessageResponse (ImapCommand ic, FetchStreamContext ctx, UniqueId uid)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (uid, string.Empty, out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested message.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override MimeMessage GetMessage (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetMessageCommand (uid, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tvar stream = ProcessGetMessageResponse (ic, ctx, uid);\n\n\t\t\t\treturn ParseMessage (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<MimeMessage> GetMessageAsync (UniqueId uid, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetMessageCommand (uid, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tvar stream = ProcessGetMessageResponse (ic, ctx, uid);\n\n\t\t\t\treturn await ParseMessageAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueGetMessageCommand (int index, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, \"FETCH %d (BODY.PEEK[])\\r\\n\", index + 1);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetMessageResponse (ImapCommand ic, FetchStreamContext ctx, int index)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (index, string.Empty, out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested message.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override MimeMessage GetMessage (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetMessageCommand (index, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tvar stream = ProcessGetMessageResponse (ic, ctx, index);\n\n\t\t\t\treturn ParseMessage (stream, cancellationToken);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified message.\n\t\t/// </remarks>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<MimeMessage> GetMessageAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetMessageCommand (index, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tvar stream = ProcessGetMessageResponse (ic, ctx, index);\n\n\t\t\t\treturn await ParseMessageAsync (stream, cancellationToken).ConfigureAwait (false);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueGetBodyPartCommand (UniqueId uid, string partSpecifier, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx, out string[] tags)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (partSpecifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (partSpecifier));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar command = string.Format (\"UID FETCH {0} ({1})\\r\\n\", uid, GetBodyPartQuery (partSpecifier, false, out tags));\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessGetBodyPartResponse (ImapCommand ic, FetchStreamContext ctx, UniqueId uid, string[] tags, out ChainedStream chained, out bool dispose)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tchained = new ChainedStream ();\n\t\t\tdispose = false;\n\n\t\t\ttry {\n\t\t\t\tforeach (var tag in tags) {\n\t\t\t\t\tif (!ctx.TryGetSection (uid, tag, out var section, true))\n\t\t\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested body part.\");\n\n\t\t\t\t\tif (!(section.Stream is MemoryStream || section.Stream is MemoryBlockStream))\n\t\t\t\t\t\tdispose = true;\n\n\t\t\t\t\tchained.Add (section.Stream);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tchained.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tvoid RemoveMessageHeaders (MimeEntity entity)\n\t\t{\n\t\t\tfor (int i = entity.Headers.Count; i > 0; i--) {\n\t\t\t\tvar header = entity.Headers[i - 1];\n\n\t\t\t\tif (!header.Field.StartsWith (\"Content-\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tentity.Headers.RemoveAt (i - 1);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual MimeEntity GetBodyPart (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetBodyPartCommand (uid, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\t\t\tChainedStream chained;\n\t\t\tbool dispose;\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessGetBodyPartResponse (ic, ctx, uid, tags, out chained, out dispose);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\n\t\t\tvar entity = ParseEntity (chained, dispose, cancellationToken);\n\n\t\t\tif (partSpecifier.Length == 0)\n\t\t\t\tRemoveMessageHeaders (entity);\n\n\t\t\treturn entity;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task<MimeEntity> GetBodyPartAsync (UniqueId uid, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetBodyPartCommand (uid, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\t\t\tChainedStream chained;\n\t\t\tbool dispose;\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessGetBodyPartResponse (ic, ctx, uid, tags, out chained, out dispose);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\n\t\t\tvar entity = await ParseEntityAsync (chained, dispose, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (partSpecifier.Length == 0)\n\t\t\t\tRemoveMessageHeaders (entity);\n\n\t\t\treturn entity;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override MimeEntity GetBodyPart (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetBodyPart (uid, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartsByUniqueId\"/>\n\t\t/// </example>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message body.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<MimeEntity> GetBodyPartAsync (UniqueId uid, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetBodyPartAsync (uid, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\tImapCommand QueueGetBodyPartCommand (int index, string partSpecifier, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx, out string[] tags)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (partSpecifier == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (partSpecifier));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar seqid = (index + 1).ToString (CultureInfo.InvariantCulture);\n\t\t\tvar command = string.Format (\"FETCH {0} ({1})\\r\\n\", seqid, GetBodyPartQuery (partSpecifier, false, out tags));\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tvoid ProcessGetBodyPartResponse (ImapCommand ic, FetchStreamContext ctx, int index, string[] tags, out ChainedStream chained, out bool dispose)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tchained = new ChainedStream ();\n\t\t\tdispose = false;\n\n\t\t\ttry {\n\t\t\t\tforeach (var tag in tags) {\n\t\t\t\t\tif (!ctx.TryGetSection (index, tag, out var section, true))\n\t\t\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested body part.\");\n\n\t\t\t\t\tif (!(section.Stream is MemoryStream || section.Stream is MemoryBlockStream))\n\t\t\t\t\t\tdispose = true;\n\n\t\t\t\t\tchained.Add (section.Stream);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tchained.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual MimeEntity GetBodyPart (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetBodyPartCommand (index, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\t\t\tChainedStream chained;\n\t\t\tbool dispose;\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessGetBodyPartResponse (ic, ctx, index, tags, out chained, out dispose);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\n\t\t\tvar entity = ParseEntity (chained, dispose, cancellationToken);\n\n\t\t\tif (partSpecifier.Length == 0)\n\t\t\t\tRemoveMessageHeaders (entity);\n\n\t\t\treturn entity;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the specified body part.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"partSpecifier\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"partSpecifier\">The body part specifier.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"partSpecifier\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task<MimeEntity> GetBodyPartAsync (int index, string partSpecifier, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetBodyPartCommand (index, partSpecifier, cancellationToken, progress, out var ctx, out var tags);\n\t\t\tChainedStream chained;\n\t\t\tbool dispose;\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessGetBodyPartResponse (ic, ctx, index, tags, out chained, out dispose);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\n\t\t\tvar entity = await ParseEntityAsync (chained, dispose, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (partSpecifier.Length == 0)\n\t\t\t\tRemoveMessageHeaders (entity);\n\n\t\t\treturn entity;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override MimeEntity GetBodyPart (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetBodyPart (index, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the specified body part.\n\t\t/// </remarks>\n\t\t/// <returns>The body part.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"part\">The body part.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"part\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<MimeEntity> GetBodyPartAsync (int index, BodyPart part, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (part == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (part));\n\n\t\t\treturn GetBodyPartAsync (index, part.PartSpecifier, cancellationToken, progress);\n\t\t}\n\n\t\tbool TryQueueGetStreamCommand (UniqueId uid, int offset, int count, CancellationToken cancellationToken, ITransferProgress? progress, [NotNullWhen (true)] out ImapCommand? ic, [NotNullWhen (true)] out FetchStreamContext? ctx)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (count == 0) {\n\t\t\t\tctx = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tic = new ImapCommand (Engine, cancellationToken, this, \"UID FETCH %u (BODY.PEEK[]<%d.%d>)\\r\\n\", uid.Id, offset, count);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tStream ProcessGetStreamResponse (ImapCommand ic, FetchStreamContext ctx, UniqueId uid)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (uid, string.Empty, out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested stream.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Fetches a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, the stream will\n\t\t/// end where the message ends.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (UniqueId uid, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (uid, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, uid);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Fetches a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message,  the stream will\n\t\t/// end where the message ends.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> GetStreamAsync (UniqueId uid, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (uid, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, uid);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tbool TryQueueGetStreamCommand (int index, int offset, int count, CancellationToken cancellationToken, ITransferProgress? progress, [NotNullWhen (true)] out ImapCommand? ic, [NotNullWhen (true)] out FetchStreamContext? ctx)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (count == 0) {\n\t\t\t\tctx = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tic = new ImapCommand (Engine, cancellationToken, this, \"FETCH %d (BODY.PEEK[]<%d.%d>)\\r\\n\", index + 1, offset, count);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tStream ProcessGetStreamResponse (ImapCommand ic, FetchStreamContext ctx, int index)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (index, string.Empty, out var section, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested stream.\");\n\n\t\t\treturn section.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Fetches a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (int index, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (index, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, index);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Fetches a substream of the message. If the starting offset is beyond\n\t\t/// the end of the message, an empty stream is returned. If the number of\n\t\t/// bytes desired extends beyond the end of the message, a truncated stream\n\t\t/// will be returned.\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> GetStreamAsync (int index, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (index, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, index);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueGetStreamCommand (UniqueId uid, string section, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (section == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (section));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar command = string.Format (\"UID FETCH {0} (BODY.PEEK[{1}])\\r\\n\", uid, section);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetStreamResponse (ImapCommand ic, FetchStreamContext ctx, UniqueId uid, string section)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (uid, section, out var s, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested stream.\");\n\n\t\t\treturn s.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (UniqueId uid, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetStreamCommand (uid, section, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, uid, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets a substream of the specified body part.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapBodyPartExamples.cs\" region=\"GetBodyPartStreamsByUniqueIdAndSpecifier\"/>\n\t\t/// </example>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> GetStreamAsync (UniqueId uid, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetStreamCommand (uid, section, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, uid, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tbool TryQueueGetStreamCommand (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken, ITransferProgress? progress, [NotNullWhen (true)] out ImapCommand? ic, [NotNullWhen (true)] out FetchStreamContext? ctx)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"The uid is invalid.\", nameof (uid));\n\n\t\t\tif (section == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (section));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (count == 0) {\n\t\t\t\tctx = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar range = string.Format (CultureInfo.InvariantCulture, \"{0}.{1}\", offset, count);\n\t\t\tvar command = string.Format (\"UID FETCH {0} (BODY.PEEK[{1}]<{2}>)\\r\\n\", uid, section, range);\n\t\t\t\n\t\t\tic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (uid, section, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, uid, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"uid\">The UID of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> GetStreamAsync (UniqueId uid, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (uid, section, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, uid, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tImapCommand QueueGetStreamCommand (int index, string section, CancellationToken cancellationToken, ITransferProgress? progress, out FetchStreamContext ctx)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (section == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (section));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar seqid = (index + 1).ToString (CultureInfo.InvariantCulture);\n\t\t\tvar command = string.Format (\"FETCH {0} (BODY.PEEK[{1}])\\r\\n\", seqid, section);\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tStream ProcessGetStreamResponse (ImapCommand ic, FetchStreamContext ctx, int index, string section)\n\t\t{\n\t\t\tProcessFetchResponse (ic);\n\n\t\t\tif (!ctx.TryGetSection (index, section, out var sect, true))\n\t\t\t\tthrow new MessageNotFoundException (\"The IMAP server did not return the requested stream.\");\n\n\t\t\treturn sect.Stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (int index, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetStreamCommand (index, section, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, index, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> GetStreamAsync (int index, string section, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar ic = QueueGetStreamCommand (index, section, cancellationToken, progress, out var ctx);\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, index, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tbool TryQueueGetStreamCommand (int index, string section, int offset, int count, CancellationToken cancellationToken, ITransferProgress? progress, [NotNullWhen (true)] out ImapCommand? ic, [NotNullWhen (true)] out FetchStreamContext? ctx)\n\t\t{\n\t\t\tif (index < 0 || index >= Count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (section == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (section));\n\n\t\t\tif (offset < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (count == 0) {\n\t\t\t\tctx = null;\n\t\t\t\tic = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar seqid = (index + 1).ToString (CultureInfo.InvariantCulture);\n\t\t\tvar range = string.Format (CultureInfo.InvariantCulture, \"{0}.{1}\", offset, count);\n\t\t\tvar command = string.Format (\"FETCH {0} (BODY.PEEK[{1}]<{2}>)\\r\\n\", seqid, section, range);\n\n\t\t\tic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx = new FetchStreamContext (progress);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (int index, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (index, section, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, index, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously gets a substream of the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets a substream of the specified message. If the starting offset is beyond\n\t\t/// the end of the specified section of the message, an empty stream is returned. If\n\t\t/// the number of bytes desired extends beyond the end of the section, a truncated\n\t\t/// stream will be returned.</para>\n\t\t/// <note type=\"note\">For more information about how to construct the <paramref name=\"section\"/>,\n\t\t/// see <a href=\"https://www.rfc-editor.org/rfc/rfc3501.html#section-6.4.5\">RFC3501, Section 6.4.5</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"section\">The desired section of the message.</param>\n\t\t/// <param name=\"offset\">The starting offset of the first desired byte.</param>\n\t\t/// <param name=\"count\">The number of bytes desired.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"section\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"index\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"offset\"/> is negative.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"count\"/> is negative.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MessageNotFoundException\">\n\t\t/// The IMAP server did not return the requested message stream.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> GetStreamAsync (int index, string section, int offset, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!TryQueueGetStreamCommand (index, section, offset, count, cancellationToken, progress, out var ic, out var ctx))\n\t\t\t\treturn new MemoryStream ();\n\n\t\t\ttry {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\treturn ProcessGetStreamResponse (ic, ctx, index, section);\n\t\t\t} finally {\n\t\t\t\tctx.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tclass FetchStreamCallbackContext : FetchStreamContextBase\n\t\t{\n\t\t\treadonly ImapFolder folder;\n\t\t\treadonly object callback;\n\n\t\t\tpublic FetchStreamCallbackContext (ImapFolder folder, object callback, ITransferProgress? progress) : base (progress)\n\t\t\t{\n\t\t\t\tthis.folder = folder;\n\t\t\t\tthis.callback = callback;\n\t\t\t}\n\n\t\t\tvoid InvokeCallback (ImapFolder folder, int index, UniqueId uid, Stream stream, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\t((ImapFetchStreamCallback) callback) (folder, index, uid, stream);\n\t\t\t}\n\n\t\t\tTask InvokeCallbackAsync (ImapFolder folder, int index, UniqueId uid, Stream stream, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\treturn ((ImapFetchStreamAsyncCallback) callback) (folder, index, uid, stream, cancellationToken);\n\t\t\t}\n\n\t\t\tpublic override void Add (Section section, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (section.UniqueId.HasValue) {\n\t\t\t\t\tInvokeCallback (folder, section.Index, section.UniqueId.Value, section.Stream, cancellationToken);\n\t\t\t\t\tsection.Stream.Dispose ();\n\t\t\t\t} else {\n\t\t\t\t\tSections.Add (section);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic override async Task AddAsync (Section section, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (section.UniqueId.HasValue) {\n\t\t\t\t\tawait InvokeCallbackAsync (folder, section.Index, section.UniqueId.Value, section.Stream, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tsection.Stream.Dispose ();\n\t\t\t\t} else {\n\t\t\t\t\tSections.Add (section);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic override void SetUniqueId (int index, UniqueId uid, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < Sections.Count; i++) {\n\t\t\t\t\tif (Sections[i].Index == index) {\n\t\t\t\t\t\tInvokeCallback (folder, index, uid, Sections[i].Stream, cancellationToken);\n\t\t\t\t\t\tSections[i].Stream.Dispose ();\n\t\t\t\t\t\tSections.RemoveAt (i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic override async Task SetUniqueIdAsync (int index, UniqueId uid, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < Sections.Count; i++) {\n\t\t\t\t\tif (Sections[i].Index == index) {\n\t\t\t\t\t\tawait InvokeCallbackAsync (folder, index, uid, Sections[i].Stream, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tSections[i].Stream.Dispose ();\n\t\t\t\t\t\tSections.RemoveAt (i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid ValidateArguments (IList<UniqueId> uids, object callback)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (callback == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (callback));\n\n\t\t\tCheckState (true, false);\n\t\t}\n\n\t\tIEnumerable<ImapCommand> QueueGetStreamsCommands (FetchStreamCallbackContext ctx, IList<UniqueId> uids, object callback, CancellationToken cancellationToken)\n\t\t{\n\t\t\tforeach (var ic in Engine.CreateCommands (cancellationToken, this, \"UID FETCH %s (BODY.PEEK[])\\r\\n\", uids)) {\n\t\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\t\tic.UserData = ctx;\n\n\t\t\t\tEngine.QueueCommand (ic);\n\n\t\t\t\tyield return ic;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The uids of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual void GetStreams (IList<UniqueId> uids, ImapFetchStreamCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (uids, callback);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tusing (var ctx = new FetchStreamCallbackContext (this, callback, progress)) {\n\t\t\t\tforeach (var ic in QueueGetStreamsCommands (ctx, uids, callback, cancellationToken)) {\n\t\t\t\t\tEngine.Run (ic);\n\n\t\t\t\t\tProcessFetchResponse (ic);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"uids\">The uids of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task GetStreamsAsync (IList<UniqueId> uids, ImapFetchStreamAsyncCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (uids, callback);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tusing (var ctx = new FetchStreamCallbackContext (this, callback, progress)) {\n\t\t\t\tforeach (var ic in QueueGetStreamsCommands (ctx, uids, callback, cancellationToken)) {\n\t\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\t\tProcessFetchResponse (ic);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid ValidateArguments (IList<int> indexes, object callback)\n\t\t{\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (callback == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (callback));\n\n\t\t\tCheckState (true, false);\n\t\t\tCheckAllowIndexes ();\n\t\t}\n\n\t\tImapCommand QueueGetStreamsCommand (FetchStreamCallbackContext ctx, IList<int> indexes, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = new StringBuilder (\"FETCH \");\n\t\t\tImapUtils.FormatIndexSet (Engine, command, indexes);\n\t\t\tcommand.Append (\" (UID BODY.PEEK[])\\r\\n\");\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command.ToString ());\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual void GetStreams (IList<int> indexes, ImapFetchStreamCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (indexes, callback);\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tusing (var ctx = new FetchStreamCallbackContext (this, callback, progress)) {\n\t\t\t\tvar ic = QueueGetStreamsCommand (ctx, indexes, cancellationToken);\n\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessFetchResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"callback\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task GetStreamsAsync (IList<int> indexes, ImapFetchStreamAsyncCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (indexes, callback);\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn;\n\n\t\t\tusing (var ctx = new FetchStreamCallbackContext (this, callback, progress)) {\n\t\t\t\tvar ic = QueueGetStreamsCommand (ctx, indexes, cancellationToken);\n\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessFetchResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\tvoid ValidateArguments (int min, int max, object callback)\n\t\t{\n\t\t\tif (min < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (min));\n\n\t\t\tif (max != -1 && max < min)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (max));\n\n\t\t\tif (callback == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (callback));\n\n\t\t\tCheckState (true, false);\n\t\t\tCheckAllowIndexes ();\n\t\t}\n\n\t\tImapCommand QueueGetStreamsCommand (FetchStreamCallbackContext ctx, int min, int max, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = string.Format (\"FETCH {0} (UID BODY.PEEK[])\\r\\n\", GetFetchRange (min, max));\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tic.RegisterUntaggedHandler (\"FETCH\", FetchStreamHandler);\n\t\t\tic.UserData = ctx;\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"callback\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual void GetStreams (int min, int max, ImapFetchStreamCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (min, max, callback);\n\n\t\t\tif (min == Count)\n\t\t\t\treturn;\n\n\t\t\tusing (var ctx = new FetchStreamCallbackContext (this, callback, progress)) {\n\t\t\t\tvar ic = QueueGetStreamsCommand (ctx, min, max, cancellationToken);\n\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessFetchResponse (ic);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the streams for the specified messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously gets the streams for the specified messages.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"min\">The minimum index.</param>\n\t\t/// <param name=\"max\">The maximum index, or <c>-1</c> to specify no upper bound.</param>\n\t\t/// <param name=\"callback\">A callback method that gets called for each stream as it is received.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"min\"/> is out of range.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"max\"/> is out of range.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"callback\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task GetStreamsAsync (int min, int max, ImapFetchStreamAsyncCallback callback, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (min, max, callback);\n\n\t\t\tif (min == Count)\n\t\t\t\treturn;\n\n\t\t\tusing (var ctx = new FetchStreamCallbackContext (this, callback, progress)) {\n\t\t\t\tvar ic = QueueGetStreamsCommand (ctx, min, max, cancellationToken);\n\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessFetchResponse (ic);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderFlags.cs",
    "content": "﻿//\n// ImapFolderFlags.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Net.Imap\n{\n\tpublic partial class ImapFolder\n\t{\n\t\tstatic readonly IStoreFlagsRequest AddDeletedFlag = new StoreFlagsRequest (StoreAction.Add, MessageFlags.Deleted) { Silent = true };\n\t\tstatic readonly IStoreFlagsRequest RemoveDeletedFlag = new StoreFlagsRequest (StoreAction.Remove, MessageFlags.Deleted) { Silent = true };\n\n\t\tstatic void ProcessUnmodified (ImapCommand ic, ref UniqueIdSet? uids, ulong? modseq)\n\t\t{\n\t\t\tif (modseq.HasValue) {\n\t\t\t\tforeach (var rc in ic.RespCodes.OfType<ModifiedResponseCode> ()) {\n\t\t\t\t\tif (uids != null && rc.UidSet != null)\n\t\t\t\t\t\tuids.AddRange (rc.UidSet);\n\t\t\t\t\telse\n\t\t\t\t\t\tuids = rc.UidSet;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid ProcessStoreResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"STORE\");\n\t\t}\n\n\t\tstatic IList<int> GetUnmodified (ImapCommand ic, ulong? modseq)\n\t\t{\n\t\t\tif (modseq.HasValue) {\n\t\t\t\tvar rc = ic.RespCodes.OfType<ModifiedResponseCode> ().FirstOrDefault ();\n\n\t\t\t\tif (rc != null && rc.UidSet != null) {\n\t\t\t\t\tvar unmodified = new int[rc.UidSet.Count];\n\t\t\t\t\tfor (int i = 0; i < unmodified.Length; i++)\n\t\t\t\t\t\tunmodified[i] = (int) (rc.UidSet[i].Id - 1);\n\n\t\t\t\t\treturn unmodified;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.Empty<int> ();\n\t\t}\n\n\t\tIEnumerable<ImapCommand> QueueStoreCommands (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.UnchangedSince.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\tint numKeywords = request.Keywords != null ? request.Keywords.Count : 0;\n\t\t\tstring action;\n\n\t\t\tswitch (request.Action) {\n\t\t\tcase StoreAction.Add:\n\t\t\t\tif ((request.Flags & SettableFlags) == 0 && numKeywords == 0)\n\t\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\t\taction = request.Silent ? \"+FLAGS.SILENT\" : \"+FLAGS\";\n\t\t\t\tbreak;\n\t\t\tcase StoreAction.Remove:\n\t\t\t\tif ((request.Flags & SettableFlags) == 0 && numKeywords == 0)\n\t\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\t\taction = request.Silent ? \"-FLAGS.SILENT\" : \"-FLAGS\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\taction = request.Silent ? \"FLAGS.SILENT\" : \"FLAGS\";\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar flaglist = ImapUtils.FormatFlagsList (request.Flags & PermanentFlags, request.Keywords != null ? request.Keywords.Count : 0);\n\t\t\tvar keywordList = request.Keywords != null ? request.Keywords.ToArray () : Array.Empty<object> ();\n\t\t\tvar @params = string.Empty;\n\n\t\t\tif (request.UnchangedSince.HasValue)\n\t\t\t\t@params = string.Format (CultureInfo.InvariantCulture, \" (UNCHANGEDSINCE {0})\", request.UnchangedSince.Value);\n\n\t\t\tvar command = string.Format (\"UID STORE %s{0} {1} {2}\\r\\n\", @params, action, flaglist);\n\n\t\t\treturn Engine.QueueCommands (cancellationToken, this, command, uids, keywordList);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<UniqueId> Store (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tUniqueIdSet? unmodified = null;\n\n\t\t\tforeach (var ic in QueueStoreCommands (uids, request, cancellationToken)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessStoreResponse (ic);\n\n\t\t\t\tProcessUnmodified (ic, ref unmodified, request.UnchangedSince);\n\t\t\t}\n\n\t\t\tif (unmodified == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn unmodified;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tUniqueIdSet? unmodified = null;\n\n\t\t\tforeach (var ic in QueueStoreCommands (uids, request, cancellationToken)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessStoreResponse (ic);\n\n\t\t\t\tProcessUnmodified (ic, ref unmodified, request.UnchangedSince);\n\t\t\t}\n\n\t\t\tif (unmodified == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn unmodified;\n\t\t}\n\n\t\tbool TryQueueStoreCommand (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif (request.UnchangedSince.HasValue && !supportsModSeq)\n\t\t\t\tthrow new NotSupportedException (\"The ImapFolder does not support mod-sequences.\");\n\n\t\t\tCheckState (true, true);\n\n\t\t\tic = null;\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn false;\n\n\t\t\tint numKeywords = request.Keywords != null ? request.Keywords.Count : 0;\n\t\t\tstring action;\n\n\t\t\tswitch (request.Action) {\n\t\t\tcase StoreAction.Add:\n\t\t\t\tif ((request.Flags & SettableFlags) == 0 && numKeywords == 0)\n\t\t\t\t\treturn false;\n\n\t\t\t\taction = request.Silent ? \"+FLAGS.SILENT\" : \"+FLAGS\";\n\t\t\t\tbreak;\n\t\t\tcase StoreAction.Remove:\n\t\t\t\tif ((request.Flags & SettableFlags) == 0 && numKeywords == 0)\n\t\t\t\t\treturn false;\n\n\t\t\t\taction = request.Silent ? \"-FLAGS.SILENT\" : \"-FLAGS\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\taction = request.Silent ? \"FLAGS.SILENT\" : \"FLAGS\";\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar keywordList = request.Keywords != null ? request.Keywords.ToArray () : Array.Empty<object> ();\n\t\t\tvar command = new StringBuilder (\"STORE \");\n\t\t\tImapUtils.FormatIndexSet (Engine, command, indexes);\n\t\t\tcommand.Append (' ');\n\n\t\t\tif (request.UnchangedSince.HasValue) {\n\t\t\t\tcommand.Append (\"(UNCHANGEDSINCE \");\n\t\t\t\tcommand.Append (request.UnchangedSince.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tcommand.Append (\") \");\n\t\t\t}\n\n\t\t\tcommand.Append (action);\n\t\t\tcommand.Append (' ');\n\t\t\tImapUtils.FormatFlagsList (command, request.Flags & PermanentFlags, request.Keywords != null ? request.Keywords.Count : 0);\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tic = Engine.QueueCommand (cancellationToken, this, command.ToString (), keywordList);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the message flags and keywords for a set of message.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<int> Store (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, request, cancellationToken, out var ic))\n\t\t\t\treturn Array.Empty<int> ();\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessStoreResponse (ic);\n\n\t\t\treturn GetUnmodified (ic, request.UnchangedSince);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store message flags and keywords for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the message flags and keywords for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The message flags and keywords to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<int>> StoreAsync (IList<int> indexes, IStoreFlagsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, request, cancellationToken, out var ic))\n\t\t\t\treturn Array.Empty<int> ();\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessStoreResponse (ic);\n\n\t\t\treturn GetUnmodified (ic, request.UnchangedSince);\n\t\t}\n\n\t\tvoid AppendLabelList (StringBuilder command, ISet<string> labels, List<object> args)\n\t\t{\n\t\t\tcommand.Append ('(');\n\n\t\t\tif (labels != null) {\n\t\t\t\tint index = 0;\n\n\t\t\t\tforeach (var label in labels) {\n\t\t\t\t\tif (index > 0)\n\t\t\t\t\t\tcommand.Append (' ');\n\n\t\t\t\t\tindex++;\n\n\t\t\t\t\tif (label == null) {\n\t\t\t\t\t\tcommand.Append (\"NIL\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (label) {\n\t\t\t\t\tcase \"\\\\AllMail\":\n\t\t\t\t\tcase \"\\\\Drafts\":\n\t\t\t\t\tcase \"\\\\Important\":\n\t\t\t\t\tcase \"\\\\Inbox\":\n\t\t\t\t\tcase \"\\\\Spam\":\n\t\t\t\t\tcase \"\\\\Sent\":\n\t\t\t\t\tcase \"\\\\Starred\":\n\t\t\t\t\tcase \"\\\\Trash\":\n\t\t\t\t\t\tcommand.Append (label);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcommand.Append (\"%S\");\n\t\t\t\t\t\targs.Add (Engine.EncodeMailboxName (label));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommand.Append (')');\n\t\t}\n\n\t\tIEnumerable<ImapCommand> QueueStoreCommands (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.GMailExt1) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the Google Mail extensions.\");\n\n\t\t\tCheckState (true, true);\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\tstring action;\n\n\t\t\tswitch (request.Action) {\n\t\t\tcase StoreAction.Add:\n\t\t\t\tif (request.Labels == null || request.Labels.Count == 0)\n\t\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\t\taction = request.Silent ? \"+X-GM-LABELS.SILENT\" : \"+X-GM-LABELS\";\n\t\t\t\tbreak;\n\t\t\tcase StoreAction.Remove:\n\t\t\t\tif (request.Labels == null || request.Labels.Count == 0)\n\t\t\t\t\treturn Array.Empty<ImapCommand> ();\n\n\t\t\t\taction = request.Silent ? \"-X-GM-LABELS.SILENT\" : \"-X-GM-LABELS\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\taction = request.Silent ? \"X-GM-LABELS.SILENT\" : \"X-GM-LABELS\";\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar command = new StringBuilder (\"UID STORE %s \");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tif (request.UnchangedSince.HasValue) {\n\t\t\t\tcommand.Append (\"(UNCHANGEDSINCE \");\n\t\t\t\tcommand.Append (request.UnchangedSince.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tcommand.Append (\") \");\n\t\t\t}\n\n\t\t\tcommand.Append (action);\n\t\t\tcommand.Append (' ');\n\t\t\tAppendLabelList (command, request.Labels, args);\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\treturn Engine.QueueCommands (cancellationToken, this, command.ToString (), uids, args.ToArray ());\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<UniqueId> Store (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tUniqueIdSet? unmodified = null;\n\n\t\t\tforeach (var ic in QueueStoreCommands (uids, request, cancellationToken)) {\n\t\t\t\tEngine.Run (ic);\n\n\t\t\t\tProcessStoreResponse (ic);\n\n\t\t\t\tProcessUnmodified (ic, ref unmodified, request.UnchangedSince);\n\t\t\t}\n\n\t\t\tif (unmodified == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn unmodified;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The UIDs of the messages that were not updated.</returns>\n\t\t/// <param name=\"uids\">The message UIDs.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"uids\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tUniqueIdSet? unmodified = null;\n\n\t\t\tforeach (var ic in QueueStoreCommands (uids, request, cancellationToken)) {\n\t\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\t\tProcessStoreResponse (ic);\n\n\t\t\t\tProcessUnmodified (ic, ref unmodified, request.UnchangedSince);\n\t\t\t}\n\n\t\t\tif (unmodified == null)\n\t\t\t\treturn Array.Empty<UniqueId> ();\n\n\t\t\treturn unmodified;\n\t\t}\n\n\t\tbool TryQueueStoreCommand (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken, [NotNullWhen (true)] out ImapCommand? ic)\n\t\t{\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (request == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (request));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.GMailExt1) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the Google Mail extensions.\");\n\n\t\t\tCheckState (true, true);\n\n\t\t\tic = null;\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn false;\n\n\t\t\tstring action;\n\n\t\t\tswitch (request.Action) {\n\t\t\tcase StoreAction.Add:\n\t\t\t\tif (request.Labels == null || request.Labels.Count == 0)\n\t\t\t\t\treturn false;\n\n\t\t\t\taction = request.Silent ? \"+X-GM-LABELS.SILENT\" : \"+X-GM-LABELS\";\n\t\t\t\tbreak;\n\t\t\tcase StoreAction.Remove:\n\t\t\t\tif (request.Labels == null || request.Labels.Count == 0)\n\t\t\t\t\treturn false;\n\n\t\t\t\taction = request.Silent ? \"-X-GM-LABELS.SILENT\" : \"-X-GM-LABELS\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\taction = request.Silent ? \"X-GM-LABELS.SILENT\" : \"X-GM-LABELS\";\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar command = new StringBuilder (\"STORE \");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tImapUtils.FormatIndexSet (Engine, command, indexes);\n\t\t\tcommand.Append (' ');\n\n\t\t\tif (request.UnchangedSince.HasValue) {\n\t\t\t\tcommand.Append (\"(UNCHANGEDSINCE \");\n\t\t\t\tcommand.Append (request.UnchangedSince.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tcommand.Append (\") \");\n\t\t\t}\n\n\t\t\tcommand.Append (action);\n\t\t\tcommand.Append (' ');\n\t\t\tAppendLabelList (command, request.Labels, args);\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\tic = Engine.QueueCommand (cancellationToken, this, command.ToString (), args.ToArray ());\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Updates the GMail-style labels for a set of message.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<int> Store (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, request, cancellationToken, out var ic))\n\t\t\t\treturn Array.Empty<int> ();\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tProcessStoreResponse (ic);\n\n\t\t\treturn GetUnmodified (ic, request.UnchangedSince);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously store GMail-style labels for a set of messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously updates the GMail-style labels for a set of messages.\n\t\t/// </remarks>\n\t\t/// <returns>The indexes of the messages that were not updated.</returns>\n\t\t/// <param name=\"indexes\">The message indexes.</param>\n\t\t/// <param name=\"request\">The GMail-style labels to store.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"request\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> is invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open in read-write mode.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The <paramref name=\"request\"/> specified an <see cref=\"IStoreRequest.UnchangedSince\"/> value\n\t\t/// but the <see cref=\"ImapFolder\"/> does not support mod-sequences.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<int>> StoreAsync (IList<int> indexes, IStoreLabelsRequest request, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!TryQueueStoreCommand (indexes, request, cancellationToken, out var ic))\n\t\t\t\treturn Array.Empty<int> ();\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tProcessStoreResponse (ic);\n\n\t\t\treturn GetUnmodified (ic, request.UnchangedSince);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderSearch.cs",
    "content": "﻿//\n// ImapFolderSearch.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MailKit.Search;\n\nnamespace MailKit.Net.Imap\n{\n\tpublic partial class ImapFolder\n\t{\n\t\tstatic bool IsAscii (string text)\n\t\t{\n\t\t\tfor (int i = 0; i < text.Length; i++) {\n\t\t\t\tif (text[i] > 127)\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic string FormatDateTime (DateTime date)\n\t\t{\n\t\t\treturn date.ToString (\"d-MMM-yyyy\", CultureInfo.InvariantCulture);\n\t\t}\n\n\t\tbool IsBadCharset (ImapCommand ic, string? charset)\n\t\t{\n\t\t\t// Note: if `charset` is null, then the charset is actually US-ASCII...\n\t\t\treturn ic.Response == ImapCommandResponse.No &&\n\t\t\t\tic.RespCodes.Any (rc => rc.Type == ImapResponseCodeType.BadCharset) &&\n\t\t\t\tcharset != null && !Engine.SupportedCharsets.Contains (charset);\n\t\t}\n\n\t\tvoid AddTextArgument (StringBuilder builder, List<object> args, string text, ref string? charset)\n\t\t{\n\t\t\tif (IsAscii (text)) {\n\t\t\t\tbuilder.Append (\"%S\");\n\t\t\t\targs.Add (text);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Engine.SupportedCharsets.Contains (\"UTF-8\")) {\n\t\t\t\tbuilder.Append (\"%S\");\n\t\t\t\tcharset = \"UTF-8\";\n\t\t\t\targs.Add (text);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// force the text into US-ASCII...\n\t\t\tvar buffer = new byte[text.Length];\n\t\t\tfor (int i = 0; i < text.Length; i++)\n\t\t\t\tbuffer[i] = (byte) text[i];\n\n\t\t\tbuilder.Append (\"%L\");\n\t\t\targs.Add (buffer);\n\t\t}\n\n\t\tvoid AddKeywordArgument (StringBuilder builder, List<object> args, string text, ref string? charset)\n\t\t{\n\t\t\t// Note: Technically, the IMAP RFC states that keywords are not allowed to start with '\\',\n\t\t\t// but some non-rfc-compliant IMAP servers do it anyway, so we need to allow it here.\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/1906 for details.\n\t\t\tint startIndex = text[0] == '\\\\' ? 1 : 0;\n\t\t\tbool isAtom = true;\n\n\t\t\tfor (int i = startIndex; i < text.Length; i++) {\n\t\t\t\tif (!ImapCommand.IsAtom (text[i])) {\n\t\t\t\t\tisAtom = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isAtom) {\n\t\t\t\tbuilder.Append (\"%s\");\n\t\t\t\targs.Add (text);\n\t\t\t} else {\n\t\t\t\tAddTextArgument (builder, args, text, ref charset);\n\t\t\t}\n\t\t}\n\n\t\tvoid BuildQuery (StringBuilder builder, SearchQuery query, List<object> args, bool parens, ref string? charset)\n\t\t{\n\t\t\tAnnotationSearchQuery annotation;\n\t\t\tNumericSearchQuery numeric;\n\t\t\tFilterSearchQuery filter;\n\t\t\tHeaderSearchQuery header;\n\t\t\tBinarySearchQuery binary;\n\t\t\tUnarySearchQuery unary;\n\t\t\tDateSearchQuery date;\n\t\t\tTextSearchQuery text;\n\t\t\tUidSearchQuery uid;\n\n\t\t\tswitch (query.Term) {\n\t\t\tcase SearchTerm.All:\n\t\t\t\tbuilder.Append (\"ALL\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.And:\n\t\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\t\tif (parens)\n\t\t\t\t\tbuilder.Append ('(');\n\t\t\t\tBuildQuery (builder, binary.Left, args, false, ref charset);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t\tBuildQuery (builder, binary.Right, args, false, ref charset);\n\t\t\t\tif (parens)\n\t\t\t\t\tbuilder.Append (')');\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Annotation:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.Annotate) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The ANNOTATION search term is not supported by the IMAP server.\");\n\n\t\t\t\tannotation = (AnnotationSearchQuery) query;\n\t\t\t\tbuilder.Append (\"ANNOTATION \");\n\t\t\t\tbuilder.Append (annotation.Entry);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t\tbuilder.Append (annotation.Attribute);\n\t\t\t\tbuilder.Append (\" %S\");\n\t\t\t\targs.Add (annotation.Value);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Answered:\n\t\t\t\tbuilder.Append (\"ANSWERED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.BccContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"BCC \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.BodyContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"BODY \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.CcContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"CC \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Deleted:\n\t\t\t\tbuilder.Append (\"DELETED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.DeliveredAfter:\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SINCE \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.DeliveredBefore:\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"BEFORE \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.DeliveredOn:\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"ON \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Draft:\n\t\t\t\tbuilder.Append (\"DRAFT\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Filter:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.Filters) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The FILTER search term is not supported by the IMAP server.\");\n\n\t\t\t\tfilter = (FilterSearchQuery) query;\n\t\t\t\tbuilder.Append (\"FILTER %S\");\n\t\t\t\targs.Add (filter.Name);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Flagged:\n\t\t\t\tbuilder.Append (\"FLAGGED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.FromContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"FROM \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Fuzzy:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.FuzzySearch) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The FUZZY search term is not supported by the IMAP server.\");\n\n\t\t\t\tbuilder.Append (\"FUZZY \");\n\t\t\t\tunary = (UnarySearchQuery) query;\n\t\t\t\tBuildQuery (builder, unary.Operand, args, true, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.HeaderContains:\n\t\t\t\theader = (HeaderSearchQuery) query;\n\t\t\t\tbuilder.Append (\"HEADER \");\n\t\t\t\tbuilder.Append (header.Field);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t\tAddTextArgument (builder, args, header.Value, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Keyword:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"KEYWORD \");\n\t\t\t\tAddKeywordArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.LargerThan:\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"LARGER \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.MessageContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"TEXT \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.ModSeq:\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"MODSEQ \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.New:\n\t\t\t\tbuilder.Append (\"NEW\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Not:\n\t\t\t\tbuilder.Append (\"NOT \");\n\t\t\t\tunary = (UnarySearchQuery) query;\n\t\t\t\tBuildQuery (builder, unary.Operand, args, true, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotAnswered:\n\t\t\t\tbuilder.Append (\"UNANSWERED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotDeleted:\n\t\t\t\tbuilder.Append (\"UNDELETED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotDraft:\n\t\t\t\tbuilder.Append (\"UNDRAFT\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotFlagged:\n\t\t\t\tbuilder.Append (\"UNFLAGGED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotKeyword:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"UNKEYWORD \");\n\t\t\t\tAddKeywordArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotRecent:\n\t\t\t\tbuilder.Append (\"OLD\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.NotSeen:\n\t\t\t\tbuilder.Append (\"UNSEEN\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Older:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.Within) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The OLDER search term is not supported by the IMAP server.\");\n\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"OLDER \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Or:\n\t\t\t\tbuilder.Append (\"OR \");\n\t\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\t\tBuildQuery (builder, binary.Left, args, true, ref charset);\n\t\t\t\tbuilder.Append (' ');\n\t\t\t\tBuildQuery (builder, binary.Right, args, true, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Recent:\n\t\t\t\tbuilder.Append (\"RECENT\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SaveDateSupported:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.SaveDate) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The SAVEDATESUPPORTED search term is not supported by the IMAP server.\");\n\n\t\t\t\tbuilder.Append (\"SAVEDATESUPPORTED\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SavedBefore:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.SaveDate) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The SAVEDBEFORE search term is not supported by the IMAP server.\");\n\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SAVEDBEFORE \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SavedOn:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.SaveDate) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The SAVEDON search term is not supported by the IMAP server.\");\n\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SAVEDON \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SavedSince:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.SaveDate) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The SAVEDSINCE search term is not supported by the IMAP server.\");\n\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SAVEDSINCE \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Seen:\n\t\t\t\tbuilder.Append (\"SEEN\");\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SentBefore:\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SENTBEFORE \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SentOn:\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SENTON \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SentSince:\n\t\t\t\tdate = (DateSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SENTSINCE \");\n\t\t\t\tbuilder.Append (FormatDateTime (date.Date));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SmallerThan:\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SMALLER \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.SubjectContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"SUBJECT \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.ToContains:\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"TO \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Uid:\n\t\t\t\tuid = (UidSearchQuery) query;\n\t\t\t\tbuilder.Append (\"UID \");\n\t\t\t\tbuilder.Append (UniqueIdSet.ToString (uid.Uids));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.Younger:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.Within) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The YOUNGER search term is not supported by the IMAP server.\");\n\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"YOUNGER \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.GMailMessageId:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.GMailExt1) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The X-GM-MSGID search term is not supported by the IMAP server.\");\n\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"X-GM-MSGID \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.GMailThreadId:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.GMailExt1) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The X-GM-THRID search term is not supported by the IMAP server.\");\n\n\t\t\t\tnumeric = (NumericSearchQuery) query;\n\t\t\t\tbuilder.Append (\"X-GM-THRID \");\n\t\t\t\tbuilder.Append (numeric.Value.ToString (CultureInfo.InvariantCulture));\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.GMailLabels:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.GMailExt1) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The X-GM-LABELS search term is not supported by the IMAP server.\");\n\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"X-GM-LABELS \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\tcase SearchTerm.GMailRaw:\n\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.GMailExt1) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The X-GM-RAW search term is not supported by the IMAP server.\");\n\n\t\t\t\ttext = (TextSearchQuery) query;\n\t\t\t\tbuilder.Append (\"X-GM-RAW \");\n\t\t\t\tAddTextArgument (builder, args, text.Text, ref charset);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tstring BuildQueryExpression (SearchQuery query, List<object> args, out string? charset)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tcharset = null;\n\n\t\t\tBuildQuery (builder, query, args, false, ref charset);\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tstring BuildSortOrder (IList<OrderBy> orderBy)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tbuilder.Append ('(');\n\t\t\tfor (int i = 0; i < orderBy.Count; i++) {\n\t\t\t\tif (builder.Length > 1)\n\t\t\t\t\tbuilder.Append (' ');\n\n\t\t\t\tif (orderBy[i].Order == SortOrder.Descending)\n\t\t\t\t\tbuilder.Append (\"REVERSE \");\n\n\t\t\t\tswitch (orderBy[i].Type) {\n\t\t\t\tcase OrderByType.Annotation:\n\t\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.Annotate) == 0)\n\t\t\t\t\t\tthrow new NotSupportedException (\"The ANNOTATION search term is not supported by the IMAP server.\");\n\n\t\t\t\t\tvar annotation = (OrderByAnnotation) orderBy[i];\n\t\t\t\t\tbuilder.Append (\"ANNOTATION \");\n\t\t\t\t\tbuilder.Append (annotation.Entry);\n\t\t\t\t\tbuilder.Append (' ');\n\t\t\t\t\tbuilder.Append (annotation.Attribute);\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.Arrival:     builder.Append (\"ARRIVAL\"); break;\n\t\t\t\tcase OrderByType.Cc:          builder.Append (\"CC\"); break;\n\t\t\t\tcase OrderByType.Date:        builder.Append (\"DATE\"); break;\n\t\t\t\tcase OrderByType.DisplayFrom:\n\t\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.SortDisplay) == 0)\n\t\t\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the SORT=DISPLAY extension.\");\n\n\t\t\t\t\tbuilder.Append (\"DISPLAYFROM\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.DisplayTo:\n\t\t\t\t\tif ((Engine.Capabilities & ImapCapabilities.SortDisplay) == 0)\n\t\t\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the SORT=DISPLAY extension.\");\n\n\t\t\t\t\tbuilder.Append (\"DISPLAYTO\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase OrderByType.From:        builder.Append (\"FROM\"); break;\n\t\t\t\tcase OrderByType.Size:        builder.Append (\"SIZE\"); break;\n\t\t\t\tcase OrderByType.Subject:     builder.Append (\"SUBJECT\"); break;\n\t\t\t\tcase OrderByType.To:          builder.Append (\"TO\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuilder.Append (')');\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tstatic void ParseESearchResults (ImapEngine engine, ImapCommand ic, SearchResults results)\n\t\t{\n\t\t\tvar token = engine.ReadToken (ic.CancellationToken);\n\t\t\tUniqueId? minValue = null, maxValue = null;\n\t\t\tvar folder = ic.Folder!;\n\t\t\tbool hasCount = false;\n\t\t\tint parenDepth = 0;\n\t\t\t//bool uid = false;\n\t\t\tstring atom, tag;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t// optional search correlator\n\t\t\t\tdo {\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\t\tif (atom == \"TAG\") {\n\t\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\t\ttag = (string) token.Value;\n\n\t\t\t\t\t\tif (tag != ic.Tag)\n\t\t\t\t\t\t\tthrow new ImapProtocolException (\"Unexpected TAG value in untagged ESEARCH response: \" + tag);\n\t\t\t\t\t}\n\t\t\t\t} while (true);\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t}\n\n\t\t\tif (token.Type == ImapTokenType.Atom && ((string) token.Value) == \"UID\") {\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t\t//uid = true;\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen) {\n\t\t\t\t\tif (parenDepth == 0)\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t\t\tparenDepth--;\n\t\t\t\t}\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln) {\n\t\t\t\t\t// unget the eoln token\n\t\t\t\t\tengine.UngetToken (token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t\t\tparenDepth++;\n\t\t\t\t}\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\tif (atom.Equals (\"RELEVANCY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tresults.Relevancy = new List<byte> ();\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tvar score = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\t\tif (score > 100)\n\t\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\t\tresults.Relevancy.Add ((byte) score);\n\t\t\t\t\t} while (true);\n\t\t\t\t} else if (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tresults.ModSeq = ImapEngine.ParseNumber64 (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"COUNT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar count = ImapEngine.ParseNumber (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tresults.Count = (int) count;\n\t\t\t\t\thasCount = true;\n\t\t\t\t} else if (atom.Equals (\"MIN\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar min = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tresults.Min = new UniqueId (folder.UidValidity, min);\n\t\t\t\t} else if (atom.Equals (\"MAX\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar max = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tresults.Max = new UniqueId (folder.UidValidity, max);\n\t\t\t\t} else if (atom.Equals (\"ALL\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar uids = ImapEngine.ParseUidSet (token, folder.UidValidity, out minValue, out maxValue, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tif (!hasCount)\n\t\t\t\t\t\tresults.Count = uids.Count;\n\n\t\t\t\t\tresults.UniqueIds = uids;\n\t\t\t\t} else {\n\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\t\t\t\t}\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\t\t\t} while (true);\n\n\t\t\tif (!results.Min.HasValue)\n\t\t\t\tresults.Min = minValue;\n\n\t\t\tif (!results.Max.HasValue)\n\t\t\t\tresults.Max = maxValue;\n\t\t}\n\n\t\tstatic async Task ParseESearchResultsAsync (ImapEngine engine, ImapCommand ic, SearchResults results)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\tUniqueId? minValue = null, maxValue = null;\n\t\t\tvar folder = ic.Folder!;\n\t\t\tbool hasCount = false;\n\t\t\tint parenDepth = 0;\n\t\t\t//bool uid = false;\n\t\t\tstring atom, tag;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t// optional search correlator\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\t\tif (atom == \"TAG\") {\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\t\ttag = (string) token.Value;\n\n\t\t\t\t\t\tif (tag != ic.Tag)\n\t\t\t\t\t\t\tthrow new ImapProtocolException (\"Unexpected TAG value in untagged ESEARCH response: \" + tag);\n\t\t\t\t\t}\n\t\t\t\t} while (true);\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tif (token.Type == ImapTokenType.Atom && ((string) token.Value) == \"UID\") {\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t//uid = true;\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen) {\n\t\t\t\t\tif (parenDepth == 0)\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t\tparenDepth--;\n\t\t\t\t}\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln) {\n\t\t\t\t\t// unget the eoln token\n\t\t\t\t\tengine.UngetToken (token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t\tparenDepth++;\n\t\t\t\t}\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\tatom = (string) token.Value;\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (atom.Equals (\"RELEVANCY\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tresults.Relevancy = new List<byte> ();\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tvar score = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\t\tif (score > 100)\n\t\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\t\tresults.Relevancy.Add ((byte) score);\n\t\t\t\t\t} while (true);\n\t\t\t\t} else if (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tresults.ModSeq = ImapEngine.ParseNumber64 (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t} else if (atom.Equals (\"COUNT\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar count = ImapEngine.ParseNumber (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tresults.Count = (int) count;\n\t\t\t\t\thasCount = true;\n\t\t\t\t} else if (atom.Equals (\"MIN\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar min = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tresults.Min = new UniqueId (folder.UidValidity, min);\n\t\t\t\t} else if (atom.Equals (\"MAX\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar max = ImapEngine.ParseNumber (token, true, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\n\t\t\t\t\tresults.Max = new UniqueId (folder.UidValidity, max);\n\t\t\t\t} else if (atom.Equals (\"ALL\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\n\t\t\t\t\tvar uids = ImapEngine.ParseUidSet (token, folder.UidValidity, out minValue, out maxValue, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\tif (!hasCount)\n\t\t\t\t\t\tresults.Count = uids.Count;\n\n\t\t\t\t\tresults.UniqueIds = uids;\n\t\t\t\t} else {\n\t\t\t\t\tthrow ImapEngine.UnexpectedToken (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ESEARCH\", token);\n\t\t\t\t}\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t} while (true);\n\n\t\t\tif (!results.Min.HasValue)\n\t\t\t\tresults.Min = minValue;\n\n\t\t\tif (!results.Max.HasValue)\n\t\t\t\tresults.Max = maxValue;\n\t\t}\n\n\t\tstatic Task UntaggedESearchHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar results = (SearchResults) ic.UserData!;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseESearchResultsAsync (engine, ic, results);\n\n\t\t\tParseESearchResults (engine, ic, results);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tstatic void ParseSearchResults (ImapEngine engine, ImapCommand ic, SearchResults results)\n\t\t{\n\t\t\tvar folder = ic.Folder!;\n\t\t\tvar uids = results.UniqueIds;\n\t\t\tuint min = uint.MaxValue;\n\t\t\tuint uid, max = 0;\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\n\t\t\t\t// keep reading UIDs until we get to the end of the line or until we get a \"(MODSEQ ####)\"\n\t\t\t\tif (token.Type == ImapTokenType.Eoln || token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\tuid = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"SEARCH\", token);\n\t\t\t\tuids.Add (new UniqueId (folder.UidValidity, uid));\n\t\t\t\tmin = Math.Min (min, uid);\n\t\t\t\tmax = Math.Max (max, uid);\n\t\t\t} while (true);\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\tengine.ReadToken (ic.CancellationToken);\n\n\t\t\t\tdo {\n\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"SEARCH\", token);\n\n\t\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\t\tif (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\ttoken = engine.ReadToken (ic.CancellationToken);\n\n\t\t\t\t\t\tresults.ModSeq = ImapEngine.ParseNumber64 (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\t}\n\n\t\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\t\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t\t}\n\n\t\t\tresults.UniqueIds = uids;\n\t\t\tresults.Count = uids.Count;\n\t\t\tif (uids.Count > 0) {\n\t\t\t\tresults.Min = new UniqueId (folder.UidValidity, min);\n\t\t\t\tresults.Max = new UniqueId (folder.UidValidity, max);\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task ParseSearchResultsAsync (ImapEngine engine, ImapCommand ic, SearchResults results)\n\t\t{\n\t\t\tvar folder = ic.Folder!;\n\t\t\tvar uids = results.UniqueIds;\n\t\t\tuint min = uint.MaxValue;\n\t\t\tuint uid, max = 0;\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// keep reading UIDs until we get to the end of the line or until we get a \"(MODSEQ ####)\"\n\t\t\t\tif (token.Type == ImapTokenType.Eoln || token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tuid = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"SEARCH\", token);\n\t\t\t\tuids.Add (new UniqueId (folder.UidValidity, uid));\n\t\t\t\tmin = Math.Min (min, uid);\n\t\t\t\tmax = Math.Max (max, uid);\n\t\t\t} while (true);\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\tawait engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"SEARCH\", token);\n\n\t\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\t\tif (atom.Equals (\"MODSEQ\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tresults.ModSeq = ImapEngine.ParseNumber64 (token, false, ImapEngine.GenericItemSyntaxErrorFormat, atom, token);\n\t\t\t\t\t}\n\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\t} while (token.Type != ImapTokenType.Eoln);\n\t\t\t}\n\n\t\t\tresults.UniqueIds = uids;\n\t\t\tresults.Count = uids.Count;\n\t\t\tif (uids.Count > 0) {\n\t\t\t\tresults.Min = new UniqueId (folder.UidValidity, min);\n\t\t\t\tresults.Max = new UniqueId (folder.UidValidity, max);\n\t\t\t}\n\t\t}\n\n\t\tstatic Task UntaggedSearchHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar results = (SearchResults) ic.UserData!;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseSearchResultsAsync (engine, ic, results);\n\n\t\t\tParseSearchResults (engine, ic, results);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tImapCommand QueueSearchCommand (string query, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tquery = query.Trim ();\n\n\t\t\tif (query.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search using an empty query.\", nameof (query));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar command = \"UID SEARCH \" + query + \"\\r\\n\";\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESearch) != 0)\n\t\t\t\tic.RegisterUntaggedHandler (\"ESEARCH\", UntaggedESearchHandler);\n\n\t\t\t// Note: always register the untagged SEARCH handler because some servers will brokenly\n\t\t\t// respond with \"* SEARCH ...\" instead of \"* ESEARCH ...\" even when using the extended\n\t\t\t// search syntax.\n\t\t\tic.RegisterUntaggedHandler (\"SEARCH\", UntaggedSearchHandler);\n\t\t\tic.UserData = new SearchResults (UidValidity, SortOrder.Ascending);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tSearchResults ProcessSearchResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"SEARCH\");\n\n\t\t\treturn (SearchResults) ic.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SEARCH</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SEARCH</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual SearchResults Search (string query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSearchCommand (query, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessSearchResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SEARCH</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SEARCH</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task<SearchResults> SearchAsync (string query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSearchCommand (query, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessSearchResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueSearchCommand (SearchOptions options, SearchQuery query, CancellationToken cancellationToken, out string? charset)\n\t\t{\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (options != SearchOptions.None && (Engine.Capabilities & ImapCapabilities.ESearch) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ESEARCH extension.\");\n\n\t\t\tvar args = new List<object> ();\n\t\t\tvar optimized = query.Optimize (new ImapSearchQueryOptimizer ());\n\t\t\tvar expr = BuildQueryExpression (optimized, args, out charset);\n\t\t\tvar command = \"UID SEARCH \";\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESearch) != 0) {\n\t\t\t\tcommand += \"RETURN (\";\n\n\t\t\t\tif (options != SearchOptions.All && options != SearchOptions.None) {\n\t\t\t\t\tif ((options & SearchOptions.All) != 0)\n\t\t\t\t\t\tcommand += \"ALL \";\n\t\t\t\t\tif ((options & SearchOptions.Relevancy) != 0)\n\t\t\t\t\t\tcommand += \"RELEVANCY \";\n\t\t\t\t\tif ((options & SearchOptions.Count) != 0)\n\t\t\t\t\t\tcommand += \"COUNT \";\n\t\t\t\t\tif ((options & SearchOptions.Min) != 0)\n\t\t\t\t\t\tcommand += \"MIN \";\n\t\t\t\t\tif ((options & SearchOptions.Max) != 0)\n\t\t\t\t\t\tcommand += \"MAX \";\n\t\t\t\t\tcommand = command.TrimEnd ();\n\t\t\t\t} else {\n\t\t\t\t\tcommand += \"ALL\";\n\t\t\t\t}\n\n\t\t\t\tcommand += \") \";\n\t\t\t}\n\n\t\t\tif (charset != null && args.Count > 0 && !Engine.UTF8Enabled)\n\t\t\t\tcommand += \"CHARSET \" + charset + \" \";\n\n\t\t\tcommand += expr + \"\\r\\n\";\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, args.ToArray ()) {\n\t\t\t\tUserData = new SearchResults (UidValidity, SortOrder.Ascending)\n\t\t\t};\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESearch) != 0)\n\t\t\t\tic.RegisterUntaggedHandler (\"ESEARCH\", UntaggedESearchHandler);\n\n\t\t\t// Note: always register the untagged SEARCH handler because some servers will brokenly\n\t\t\t// respond with \"* SEARCH ...\" instead of \"* ESEARCH ...\" even when using the extended\n\t\t\t// search syntax.\n\t\t\tic.RegisterUntaggedHandler (\"SEARCH\", UntaggedSearchHandler);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tbool TryProcessSearchResponse (ImapCommand ic, string? charset, bool retry, [NotNullWhen (true)] out SearchResults? results)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\tif (retry && IsBadCharset (ic, charset)) {\n\t\t\t\t\tresults = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthrow ImapCommandException.Create (\"SEARCH\", ic);\n\t\t\t}\n\n\t\t\tresults = (SearchResults) ic.UserData!;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tSearchResults Search (SearchOptions options, SearchQuery query, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueSearchCommand (options, query, cancellationToken, out string? charset);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tif (TryProcessSearchResponse (ic, charset, retry, out var results))\n\t\t\t\treturn results;\n\n\t\t\treturn Search (options, query, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The IMAP server does not support the ESEARCH extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override SearchResults Search (SearchOptions options, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Search (options, query, true, cancellationToken);\n\t\t}\n\n\t\tasync Task<SearchResults> SearchAsync (SearchOptions options, SearchQuery query, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueSearchCommand (options, query, cancellationToken, out string? charset);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tif (TryProcessSearchResponse (ic, charset, retry, out var results))\n\t\t\t\treturn results;\n\n\t\t\treturn await SearchAsync (options, query, false, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously search the folder for messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query,\n\t\t/// returning only the specified search results.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The IMAP server does not support the ESEARCH extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<SearchResults> SearchAsync (SearchOptions options, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn SearchAsync (options, query, true, cancellationToken);\n\t\t}\n\n\t\tImapCommand QueueSortCommand (string query, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tquery = query.Trim ();\n\n\t\t\tif (query.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot sort using an empty query.\", nameof (query));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Sort) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the SORT extension.\");\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar command = \"UID SORT \" + query + \"\\r\\n\";\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command);\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESort) != 0)\n\t\t\t\tic.RegisterUntaggedHandler (\"ESEARCH\", UntaggedESearchHandler);\n\t\t\tic.RegisterUntaggedHandler (\"SORT\", UntaggedSearchHandler);\n\t\t\tic.UserData = new SearchResults (UidValidity);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tSearchResults ProcessSortResponse (ImapCommand ic)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tic.ThrowIfNotOk (\"SORT\");\n\n\t\t\treturn (SearchResults) ic.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SORT</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SORT</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the SORT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual SearchResults Sort (string query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSortCommand (query, cancellationToken);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\treturn ProcessSortResponse (ic);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a <c>UID SORT</c> command with the specified query passed directly to the IMAP server\n\t\t/// with no interpretation by MailKit. This means that the query may contain any arguments that a\n\t\t/// <c>UID SORT</c> command is allowed to have according to the IMAP specifications and any\n\t\t/// extensions that are supported, including <c>RETURN</c> parameters.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"query\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The IMAP server does not support the SORT extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic virtual async Task<SearchResults> SortAsync (string query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar ic = QueueSortCommand (query, cancellationToken);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\treturn ProcessSortResponse (ic);\n\t\t}\n\n\t\tImapCommand QueueSortCommand (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken, out string? charset)\n\t\t{\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tif (orderBy == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (orderBy));\n\n\t\t\tif (orderBy.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No sort order provided.\", nameof (orderBy));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Sort) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the SORT extension.\");\n\n\t\t\tvar args = new List<object> ();\n\t\t\tvar optimized = query.Optimize (new ImapSearchQueryOptimizer ());\n\t\t\tvar expr = BuildQueryExpression (optimized, args, out charset);\n\t\t\tvar order = BuildSortOrder (orderBy);\n\t\t\tvar command = \"UID SORT \";\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESort) != 0)\n\t\t\t\tcommand += \"RETURN (ALL) \";\n\n\t\t\tcommand += order + \" \" + (charset ?? \"US-ASCII\") + \" \" + expr + \"\\r\\n\";\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, args.ToArray ()) {\n\t\t\t\tUserData = new SearchResults (UidValidity)\n\t\t\t};\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESort) != 0)\n\t\t\t\tic.RegisterUntaggedHandler (\"ESEARCH\", UntaggedESearchHandler);\n\t\t\telse\n\t\t\t\tic.RegisterUntaggedHandler (\"SORT\", UntaggedSearchHandler);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tbool TryProcessSortResponse (ImapCommand ic, string? charset, bool retry, [NotNullWhen (true)] out IList<UniqueId>? results)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\tif (retry && IsBadCharset (ic, charset)) {\n\t\t\t\t\tresults = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthrow ImapCommandException.Create (\"SORT\", ic);\n\t\t\t}\n\n\t\t\tresults = ((SearchResults) ic.UserData!).UniqueIds;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tIList<UniqueId> Sort (SearchQuery query, IList<OrderBy> orderBy, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueSortCommand (query, orderBy, cancellationToken, out string? charset);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tif (TryProcessSortResponse (ic, charset, retry, out IList<UniqueId>? results))\n\t\t\t\treturn results;\n\n\t\t\treturn Sort (query, orderBy, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the SORT extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<UniqueId> Sort (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Sort (query, orderBy, true, cancellationToken);\n\t\t}\n\n\t\tasync Task<IList<UniqueId>> SortAsync (SearchQuery query, IList<OrderBy> orderBy, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueSortCommand (query, orderBy, cancellationToken, out string? charset);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tif (TryProcessSortResponse (ic, charset, retry, out IList<UniqueId>? results))\n\t\t\t\treturn results;\n\n\t\t\treturn await SortAsync (query, orderBy, false, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The returned array of unique identifiers will be sorted in the preferred order and\n\t\t/// can be used with <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of matching UIDs in the specified sort order.</returns>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the SORT extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<IList<UniqueId>> SortAsync (SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn SortAsync (query, orderBy, true, cancellationToken);\n\t\t}\n\n\t\tImapCommand QueueSortCommand (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken, out string? charset)\n\t\t{\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tif (orderBy == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (orderBy));\n\n\t\t\tif (orderBy.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No sort order provided.\", nameof (orderBy));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (options != SearchOptions.None && (Engine.Capabilities & ImapCapabilities.ESort) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the ESORT extension.\");\n\n\t\t\tvar args = new List<object> ();\n\t\t\tvar optimized = query.Optimize (new ImapSearchQueryOptimizer ());\n\t\t\tvar expr = BuildQueryExpression (optimized, args, out charset);\n\t\t\tvar order = BuildSortOrder (orderBy);\n\t\t\tvar command = \"UID SORT \";\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESort) != 0) {\n\t\t\t\tcommand += \"RETURN (\";\n\n\t\t\t\tif (options != SearchOptions.All && options != SearchOptions.None) {\n\t\t\t\t\tif ((options & SearchOptions.All) != 0)\n\t\t\t\t\t\tcommand += \"ALL \";\n\t\t\t\t\tif ((options & SearchOptions.Relevancy) != 0)\n\t\t\t\t\t\tcommand += \"RELEVANCY \";\n\t\t\t\t\tif ((options & SearchOptions.Count) != 0)\n\t\t\t\t\t\tcommand += \"COUNT \";\n\t\t\t\t\tif ((options & SearchOptions.Min) != 0)\n\t\t\t\t\t\tcommand += \"MIN \";\n\t\t\t\t\tif ((options & SearchOptions.Max) != 0)\n\t\t\t\t\t\tcommand += \"MAX \";\n\t\t\t\t\tcommand = command.TrimEnd ();\n\t\t\t\t} else {\n\t\t\t\t\tcommand += \"ALL\";\n\t\t\t\t}\n\n\t\t\t\tcommand += \") \";\n\t\t\t}\n\n\t\t\tcommand += order + \" \" + (charset ?? \"US-ASCII\") + \" \" + expr + \"\\r\\n\";\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, args.ToArray ()) {\n\t\t\t\tUserData = new SearchResults (UidValidity)\n\t\t\t};\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.ESort) != 0)\n\t\t\t\tic.RegisterUntaggedHandler (\"ESEARCH\", UntaggedESearchHandler);\n\t\t\telse\n\t\t\t\tic.RegisterUntaggedHandler (\"SORT\", UntaggedSearchHandler);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tbool TryProcessSortResponse (ImapCommand ic, string? charset, bool retry, [NotNullWhen (true)] out SearchResults? results)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\tif (retry && IsBadCharset (ic, charset)) {\n\t\t\t\t\tresults = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthrow ImapCommandException.Create (\"SORT\", ic);\n\t\t\t}\n\n\t\t\tresults = (SearchResults) ic.UserData!;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tSearchResults Sort (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueSortCommand (options, query, orderBy, cancellationToken, out string? charset);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tif (TryProcessSortResponse (ic, charset, retry, out SearchResults? results))\n\t\t\t\treturn results;\n\n\t\t\treturn Sort (options, query, orderBy, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The IMAP server does not support the ESORT extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override SearchResults Sort (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Sort (options, query, orderBy, true, cancellationToken);\n\t\t}\n\n\t\tasync Task<SearchResults> SortAsync (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueSortCommand (options, query, orderBy, cancellationToken, out string? charset);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tif (TryProcessSortResponse (ic, charset, retry, out SearchResults? results))\n\t\t\t\treturn results;\n\n\t\t\treturn await SortAsync (options, query, orderBy, false, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously sort messages matching the specified query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Searches the folder for messages matching the specified query, returning the search results in the specified sort order.\n\t\t/// </remarks>\n\t\t/// <returns>The search results.</returns>\n\t\t/// <param name=\"options\">The search options.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"orderBy\">The sort order.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"orderBy\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"orderBy\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The IMAP server does not support the ESORT extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<SearchResults> SortAsync (SearchOptions options, SearchQuery query, IList<OrderBy> orderBy, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn SortAsync (options, query, orderBy, true, cancellationToken);\n\t\t}\n\n\t\tImapCommand QueueThreadCommand (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken, out string? charset)\n\t\t{\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Thread) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the THREAD extension.\");\n\n\t\t\tif (!Engine.ThreadingAlgorithms.Contains (algorithm))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (algorithm), \"The specified threading algorithm is not supported.\");\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tvar method = algorithm.ToString ().ToUpperInvariant ();\n\t\t\tvar args = new List<object> ();\n\t\t\tvar optimized = query.Optimize (new ImapSearchQueryOptimizer ());\n\t\t\tvar expr = BuildQueryExpression (optimized, args, out charset);\n\t\t\tvar command = \"UID THREAD \" + method + \" \" + (charset ?? \"US-ASCII\") + \" \";\n\n\t\t\tcommand += expr + \"\\r\\n\";\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, args.ToArray ());\n\t\t\tic.RegisterUntaggedHandler (\"THREAD\", ImapUtils.UntaggedThreadHandler);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tbool TryProcessThreadResponse (ImapCommand ic, string? charset, bool retry, [NotNullWhen (true)] out IList<MessageThread>? threads)\n\t\t{\n\t\t\tProcessResponseCodes (ic, null);\n\n\t\t\tif (ic.Response != ImapCommandResponse.Ok) {\n\t\t\t\tif (retry && IsBadCharset (ic, charset)) {\n\t\t\t\t\tthreads = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthrow ImapCommandException.Create (\"THREAD\", ic);\n\t\t\t}\n\n\t\t\tthreads = (IList<MessageThread>) ic.UserData! ?? Array.Empty<MessageThread> ();\n\n\t\t\treturn true;\n\t\t}\n\n\t\tIList<MessageThread> Thread (ThreadingAlgorithm algorithm, SearchQuery query, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueThreadCommand (algorithm, query, cancellationToken, out string? charset);\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tif (TryProcessThreadResponse (ic, charset, retry, out IList<MessageThread>? threads))\n\t\t\t\treturn threads;\n\n\t\t\treturn Thread (algorithm, query, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the THREAD extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<MessageThread> Thread (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Thread (algorithm, query, true, cancellationToken);\n\t\t}\n\n\t\tasync Task<IList<MessageThread>> ThreadAsync (ThreadingAlgorithm algorithm, SearchQuery query, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueThreadCommand (algorithm, query, cancellationToken, out string? charset);\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tif (TryProcessThreadResponse (ic, charset, retry, out IList<MessageThread>? threads))\n\t\t\t\treturn threads;\n\n\t\t\treturn await ThreadAsync (algorithm, query, false, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"query\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the THREAD extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<IList<MessageThread>> ThreadAsync (ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn ThreadAsync (algorithm, query, true, cancellationToken);\n\t\t}\n\n\t\tImapCommand? QueueThreadCommand (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken, out string? charset)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif ((Engine.Capabilities & ImapCapabilities.Thread) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The IMAP server does not support the THREAD extension.\");\n\n\t\t\tif (!Engine.ThreadingAlgorithms.Contains (algorithm))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (algorithm), \"The specified threading algorithm is not supported.\");\n\n\t\t\tif (query == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (query));\n\n\t\t\tCheckState (true, false);\n\n\t\t\tif (uids.Count == 0) {\n\t\t\t\tcharset = null;\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar method = algorithm.ToString ().ToUpperInvariant ();\n\t\t\tvar set = UniqueIdSet.ToString (uids);\n\t\t\tvar args = new List<object> ();\n\t\t\tvar optimized = query.Optimize (new ImapSearchQueryOptimizer ());\n\t\t\tvar expr = BuildQueryExpression (optimized, args, out charset);\n\t\t\tvar command = \"UID THREAD \" + method + \" \" + (charset ?? \"US-ASCII\") + \" \";\n\n\t\t\tcommand += \"UID \" + set + \" \" + expr + \"\\r\\n\";\n\n\t\t\tvar ic = new ImapCommand (Engine, cancellationToken, this, command, args.ToArray ());\n\t\t\tic.RegisterUntaggedHandler (\"THREAD\", ImapUtils.UntaggedThreadHandler);\n\n\t\t\tEngine.QueueCommand (ic);\n\n\t\t\treturn ic;\n\t\t}\n\n\t\tIList<MessageThread> Thread (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueThreadCommand (uids, algorithm, query, cancellationToken, out string? charset);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn Array.Empty<MessageThread> ();\n\n\t\t\tEngine.Run (ic);\n\n\t\t\tif (TryProcessThreadResponse (ic, charset!, retry, out IList<MessageThread>? threads))\n\t\t\t\treturn threads;\n\n\t\t\treturn Thread (uids, algorithm, query, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the THREAD extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override IList<MessageThread> Thread (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn Thread (uids, algorithm, query, true, cancellationToken);\n\t\t}\n\n\t\tasync Task<IList<MessageThread>> ThreadAsync (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, bool retry, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar ic = QueueThreadCommand (uids, algorithm, query, cancellationToken, out string? charset);\n\n\t\t\tif (ic == null)\n\t\t\t\treturn Array.Empty<MessageThread> ();\n\n\t\t\tawait Engine.RunAsync (ic).ConfigureAwait (false);\n\n\t\t\tif (TryProcessThreadResponse (ic, charset!, retry, out IList<MessageThread>? threads))\n\t\t\t\treturn threads;\n\n\t\t\treturn await ThreadAsync (uids, algorithm, query, false, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously thread the messages in the folder that match the search query using the specified threading algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The <see cref=\"MessageThread.UniqueId\"/> can be used with methods such as\n\t\t/// <see cref=\"IMailFolder.GetMessage(UniqueId,CancellationToken,ITransferProgress)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An array of message threads.</returns>\n\t\t/// <param name=\"uids\">The subset of UIDs</param>\n\t\t/// <param name=\"algorithm\">The threading algorithm to use.</param>\n\t\t/// <param name=\"query\">The search query.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"algorithm\"/> is not supported.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uids\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"query\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"uids\"/> is empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>One or more of the <paramref name=\"uids\"/> is invalid.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <para>One or more search terms in the <paramref name=\"query\"/> are not supported by the IMAP server.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The server does not support the THREAD extension.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"ImapClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"ImapClient\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"FolderNotOpenException\">\n\t\t/// The <see cref=\"ImapFolder\"/> is not currently open.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapProtocolException\">\n\t\t/// The server's response contained unexpected tokens.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ImapCommandException\">\n\t\t/// The server replied with a NO or BAD response.\n\t\t/// </exception>\n\t\tpublic override Task<IList<MessageThread>> ThreadAsync (IList<UniqueId> uids, ThreadingAlgorithm algorithm, SearchQuery query, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\treturn ThreadAsync (uids, algorithm, query, true, cancellationToken);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapIdleContext.cs",
    "content": "﻿//\n// ImapIdleContext.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An IMAP IDLE context.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>An IMAP IDLE command does not work like normal commands. Unlike most commands,\n\t/// the IDLE command does not end until the client sends a separate \"DONE\" command.</para>\n\t/// <para>In order to facilitate this, the way this works is that the consumer of MailKit's\n\t/// IMAP APIs provides a 'doneToken' which signals to the command-processing loop to\n\t/// send the \"DONE\" command. Since, like every other IMAP command, it is also necessary to\n\t/// provide a means of cancelling the IDLE command, it becomes necessary to link the\n\t/// 'doneToken' and the 'cancellationToken' together.</para>\n\t/// </remarks>\n\tsealed class ImapIdleContext : IDisposable\n\t{\n\t\tstatic readonly byte[] DoneCommand = Encoding.ASCII.GetBytes (\"DONE\\r\\n\");\n\t\tCancellationTokenRegistration registration;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"doneToken\">The done token.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic ImapIdleContext (ImapEngine engine, CancellationToken doneToken, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCancellationToken = cancellationToken;\n\t\t\tDoneToken = doneToken;\n\t\t\tEngine = engine;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the engine.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the engine.\n\t\t/// </remarks>\n\t\t/// <value>The engine.</value>\n\t\tpublic ImapEngine Engine {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the cancellation token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get the cancellation token.\n\t\t/// </remarks>\n\t\t/// <value>The cancellation token.</value>\n\t\tpublic CancellationToken CancellationToken {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the done token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the done token.\n\t\t/// </remarks>\n\t\t/// <value>The done token.</value>\n\t\tpublic CancellationToken DoneToken {\n\t\t\tget; private set;\n\t\t}\n\n#if false\n\t\t/// <summary>\n\t\t/// Get whether or not cancellation has been requested.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not cancellation has been requested.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if cancellation has been requested; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsCancellationRequested {\n\t\t\tget { return CancellationToken.IsCancellationRequested; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the IDLE command should be ended.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the IDLE command should be ended.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the IDLE command should end; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsDoneRequested {\n\t\t\tget { return DoneToken.IsCancellationRequested; }\n\t\t}\n#endif\n\n\t\tvoid IdleComplete ()\n\t\t{\n\t\t\tif (Engine.IsIdle) {\n\t\t\t\ttry {\n\t\t\t\t\tEngine.Stream.Write (DoneCommand, 0, DoneCommand.Length, CancellationToken);\n\t\t\t\t\tEngine.Stream.Flush (CancellationToken);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tEngine.State = ImapEngineState.Selected;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Callback method to be used as the ImapCommand's ContinuationHandler.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Callback method to be used as the ImapCommand's ContinuationHandler.\n\t\t/// </remarks>\n\t\t/// <param name=\"engine\">The ImapEngine.</param>\n\t\t/// <param name=\"ic\">The ImapCommand.</param>\n\t\t/// <param name=\"text\">The text.</param>\n\t\t/// <param name=\"doAsync\"><see langword=\"true\" /> if the command is being run asynchronously; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <returns></returns>\n\t\tpublic Task ContinuationHandler (ImapEngine engine, ImapCommand ic, string text, bool doAsync)\n\t\t{\n\t\t\tEngine.State = ImapEngineState.Idle;\n\n\t\t\tregistration = DoneToken.Register (IdleComplete);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases all resource used by the <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>Call <see cref=\"Dispose\"/> when you are finished using the <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/>. The\n\t\t/// <see cref=\"Dispose\"/> method leaves the <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/> in an unusable state. After\n\t\t/// calling <see cref=\"Dispose\"/>, you must release all references to the\n\t\t/// <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/> so the garbage collector can reclaim the memory that the\n\t\t/// <see cref=\"MailKit.Net.Imap.ImapIdleContext\"/> was occupying.</remarks>\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tregistration.Dispose ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapImplementation.cs",
    "content": "﻿//\n// ImapImplementation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// The details of an IMAP client or server implementation.\n\t/// </summary>\n\t/// <remarks>\n\t/// Allows an IMAP client and server to share their implementation details\n\t/// with each other for the purposes of debugging.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\tpublic class ImapImplementation\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapImplementation\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.Net.Imap.ImapImplementation\"/>.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\tpublic ImapImplementation ()\n\t\t{\n\t\t\tProperties = new Dictionary<string, string?> ();\n\t\t}\n\n\t\tstring? GetProperty (string property)\n\t\t{\n\t\t\tProperties.TryGetValue (property, out var value);\n\n\t\t\treturn value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the identification properties.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the dictionary of raw identification properties.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The properties.</value>\n\t\tpublic Dictionary<string, string?> Properties {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the name of the program.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the name of the program.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The program name.</value>\n\t\tpublic string? Name {\n\t\t\tget { return GetProperty (\"name\"); }\n\t\t\tset { Properties[\"name\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the version of the program.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the version of the program.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ImapExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The program version.</value>\n\t\tpublic string? Version {\n\t\t\tget { return GetProperty (\"version\"); }\n\t\t\tset { Properties[\"version\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the name of the operating system.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the name of the operating system.\n\t\t/// </remarks>\n\t\t/// <value>The name of the operation system.</value>\n\t\tpublic string? OS {\n\t\t\tget { return GetProperty (\"os\"); }\n\t\t\tset { Properties[\"os\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the version of the operating system.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the version of the operating system.\n\t\t/// </remarks>\n\t\t/// <value>The version of the operation system.</value>\n\t\tpublic string? OSVersion {\n\t\t\tget { return GetProperty (\"os-version\"); }\n\t\t\tset { Properties[\"os-version\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the name of the vendor.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the name of the vendor.\n\t\t/// </remarks>\n\t\t/// <value>The name of the vendor.</value>\n\t\tpublic string? Vendor {\n\t\t\tget { return GetProperty (\"vendor\"); }\n\t\t\tset { Properties[\"vendor\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the support URL.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the support URL.\n\t\t/// </remarks>\n\t\t/// <value>The support URL.</value>\n\t\tpublic string? SupportUrl {\n\t\t\tget { return GetProperty (\"support-url\"); }\n\t\t\tset { Properties[\"support-url\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the postal address of the vendor.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the postal address of the vendor.\n\t\t/// </remarks>\n\t\t/// <value>The postal address.</value>\n\t\tpublic string? Address {\n\t\t\tget { return GetProperty (\"address\"); }\n\t\t\tset { Properties[\"address\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the release date of the program.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the release date of the program.\n\t\t/// </remarks>\n\t\t/// <value>The release date.</value>\n\t\tpublic string? ReleaseDate {\n\t\t\tget { return GetProperty (\"date\"); }\n\t\t\tset { Properties[\"date\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the command used to start the program.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the command used to start the program.\n\t\t/// </remarks>\n\t\t/// <value>The command used to start the program.</value>\n\t\tpublic string? Command {\n\t\t\tget { return GetProperty (\"command\"); }\n\t\t\tset { Properties[\"command\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the command-line arguments used to start the program.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the command-line arguments used to start the program.\n\t\t/// </remarks>\n\t\t/// <value>The command-line arguments used to start the program.</value>\n\t\tpublic string? Arguments {\n\t\t\tget { return GetProperty (\"arguments\"); }\n\t\t\tset { Properties[\"arguments\"] = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the environment variables available to the program.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get or set the environment variables available to the program.\n\t\t/// </remarks>\n\t\t/// <value>The environment variables.</value>\n\t\tpublic string? Environment {\n\t\t\tget { return GetProperty (\"environment\"); }\n\t\t\tset { Properties[\"environment\"] = value; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapLiteral.cs",
    "content": "﻿//\n// ImapLiteral.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing MimeKit;\nusing MimeKit.IO;\n\nnamespace MailKit.Net.Imap {\n\tenum ImapLiteralType\n\t{\n\t\tString,\n\t\t//Stream,\n\t\tMimeMessage\n\t}\n\n\t/// <summary>\n\t/// An IMAP literal object.\n\t/// </summary>\n\t/// <remarks>\n\t/// The literal can be a string, byte[], Stream, or a MimeMessage.\n\t/// </remarks>\n\tclass ImapLiteral\n\t{\n\t\tpublic readonly ImapLiteralType Type;\n\t\tpublic readonly object Literal;\n\t\treadonly FormatOptions format;\n\t\treadonly Action<int> update;\n\n\t\tstatic void DefaultUpdate (int value)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapLiteral\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.Net.Imap.ImapLiteral\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"action\">The progress update action.</param>\n\t\tpublic ImapLiteral (FormatOptions options, MimeMessage message, Action<int> action)\n\t\t{\n\t\t\tformat = options.Clone ();\n\t\t\tformat.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\tupdate = action;\n\n\t\t\tType = ImapLiteralType.MimeMessage;\n\t\t\tLiteral = message;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapLiteral\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.Net.Imap.ImapLiteral\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"literal\">The literal.</param>\n\t\tpublic ImapLiteral (FormatOptions options, byte[] literal)\n\t\t{\n\t\t\tformat = options.Clone ();\n\t\t\tformat.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\tupdate = DefaultUpdate;\n\n\t\t\tType = ImapLiteralType.String;\n\t\t\tLiteral = literal;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the length of the literal, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the literal, in bytes.\n\t\t/// </remarks>\n\t\t/// <value>The length.</value>\n\t\tpublic long Length {\n\t\t\tget {\n\t\t\t\tif (Type == ImapLiteralType.String)\n\t\t\t\t\treturn ((byte[]) Literal).Length;\n\n\t\t\t\tusing (var measure = new MeasuringStream ()) {\n\t\t\t\t\t//if (Type == ImapLiteralType.Stream) {\n\t\t\t\t\t//\tvar stream = (Stream) Literal;\n\t\t\t\t\t//\tstream.CopyTo (measure, 4096);\n\t\t\t\t\t//\tstream.Position = 0;\n\n\t\t\t\t\t//\treturn measure.Length;\n\t\t\t\t\t//}\n\n\t\t\t\t\t((MimeMessage) Literal).WriteTo (format, measure);\n\n\t\t\t\t\treturn measure.Length;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Write the literal to the specified stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes the literal to the specified stream.\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic void WriteTo (ImapStream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Type == ImapLiteralType.String) {\n\t\t\t\tvar bytes = (byte[]) Literal;\n\n\t\t\t\tstream.Write (bytes, 0, bytes.Length, cancellationToken);\n\t\t\t\tstream.Flush (cancellationToken);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//if (Type == ImapLiteralType.Stream) {\n\t\t\t//\tvar literal = (Stream) Literal;\n\t\t\t//\tvar buf = new byte[4096];\n\t\t\t//\tint nread;\n\n\t\t\t//\twhile ((nread = literal.Read (buf, 0, buf.Length)) > 0)\n\t\t\t//\t\tstream.Write (buf, 0, nread, cancellationToken);\n\n\t\t\t//\tstream.Flush (cancellationToken);\n\t\t\t//\treturn;\n\t\t\t//}\n\n\t\t\tvar message = (MimeMessage) Literal;\n\n\t\t\tusing (var s = new ProgressStream (stream, update)) {\n\t\t\t\tmessage.WriteTo (format, s, cancellationToken);\n\t\t\t\ts.Flush (cancellationToken);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously write the literal to the specified stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously writes the literal to the specified stream.\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic async Task WriteToAsync (ImapStream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Type == ImapLiteralType.String) {\n\t\t\t\tvar bytes = (byte[]) Literal;\n\n\t\t\t\tawait stream.WriteAsync (bytes, 0, bytes.Length, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//if (Type == ImapLiteralType.Stream) {\n\t\t\t//\tvar literal = (Stream) Literal;\n\t\t\t//\tvar buf = new byte[4096];\n\t\t\t//\tint nread;\n\n\t\t\t//\twhile ((nread = await literal.ReadAsync (buf, 0, buf.Length, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t//\t\tawait stream.WriteAsync (buf, 0, nread, cancellationToken).ConfigureAwait (false);\n\n\t\t\t//\tawait stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t//\treturn;\n\t\t\t//}\n\n\t\t\tvar message = (MimeMessage) Literal;\n\n\t\t\tusing (var s = new ProgressStream (stream, update)) {\n\t\t\t\tawait message.WriteToAsync (format, s, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait s.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapProtocolException.cs",
    "content": "﻿//\n// ImapException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An IMAP protocol exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when there is an error communicating with an IMAP server. An\n\t/// <see cref=\"ImapProtocolException\"/> is typically fatal and requires the <see cref=\"ImapClient\"/>\n\t/// to be reconnected.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class ImapProtocolException : ProtocolException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapProtocolException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected ImapProtocolException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tpublic ImapProtocolException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic ImapProtocolException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapProtocolException\"/>.\n\t\t/// </remarks>\n\t\tpublic ImapProtocolException ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets whether or not this exception was thrown due to an unexpected token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets whether or not this exception was thrown due to an unexpected token.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if an unexpected token was encountered; otherwise, <see langword=\"false\" />.</value>\n\t\tinternal bool UnexpectedToken {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a new <see cref=\"ImapProtocolException\"/> based on the <see cref=\"ImapCommand\"/> state.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Create a new <see cref=\"ImapProtocolException\"/> based on the <see cref=\"ImapCommand\"/> state.\n\t\t/// </remarks>\n\t\t/// <returns>A new protocol exception.</returns>\n\t\t/// <param name=\"ic\">The command state.</param>\n\t\tinternal static ImapProtocolException Create (ImapCommand ic)\n\t\t{\n\t\t\tstring? message = null;\n\n\t\t\tif (string.IsNullOrEmpty (ic.ResponseText)) {\n\t\t\t\tfor (int i = ic.RespCodes.Count - 1; i >= 0; i--) {\n\t\t\t\t\tif (ic.RespCodes[i].IsError && !string.IsNullOrEmpty (ic.RespCodes[i].Message)) {\n\t\t\t\t\t\tmessage = ic.RespCodes[i].Message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmessage ??= string.Empty;\n\t\t\t} else {\n\t\t\t\tmessage = ic.ResponseText!;\n\t\t\t}\n\n\t\t\treturn ic.Exception != null ? new ImapProtocolException (message, ic.Exception) : new ImapProtocolException (message);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapResponseCode.cs",
    "content": "﻿//\n// ImapResponseCode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Imap {\n\tenum ImapResponseCodeType : byte {\n\t\tAlert,\n\t\tBadCharset,\n\t\tCapability,\n\t\tNewName,\n\t\tParse,\n\t\tPermanentFlags,\n\t\tReadOnly,\n\t\tReadWrite,\n\t\tTryCreate,\n\t\tUidNext,\n\t\tUidValidity,\n\t\tUnseen,\n\n\t\t// RESP-CODES introduced in rfc2221:\n\t\tReferral,\n\n\t\t// RESP-CODES introduced in rfc3516,\n\t\tUnknownCte,\n\n\t\t// RESP-CODES introduced in rfc4315:\n\t\tAppendUid,\n\t\tCopyUid,\n\t\tUidNotSticky,\n\n\t\t// RESP-CODES introduced in rfc4467:\n\t\tUrlMech,\n\n\t\t// RESP-CODES introduced in rfc4469:\n\t\tBadUrl,\n\t\tTooBig,\n\n\t\t// RESP-CODES introduced in rfc4551:\n\t\tHighestModSeq,\n\t\tModified,\n\t\tNoModSeq,\n\n\t\t// RESP-CODES introduced in rfc4978:\n\t\tCompressionActive,\n\n\t\t// RESP-CODES introduced in rfc5162:\n\t\tClosed,\n\n\t\t// RESP-CODES introduced in rfc5182:\n\t\tNotSaved,\n\n\t\t// RESP-CODES introduced in rfc5255:\n\t\tBadComparator,\n\n\t\t// RESP-CODES introduced in rfc5257:\n\t\tAnnotate,\n\t\tAnnotations,\n\n\t\t// RESP-CODES introduced in rfc5259:\n\t\tMaxConvertMessages,\n\t\tMaxConvertParts,\n\t\tTempFail,\n\n\t\t// RESP-CODES introduced in rfc5267:\n\t\tNoUpdate,\n\n\t\t// RESP-CODES introduced in rfc5464:\n\t\tMetadata,\n\n\t\t// RESP-CODES introduced in rfc5465:\n\t\tNotificationOverflow,\n\t\tBadEvent,\n\n\t\t// RESP-CODES introduced in rfc5466:\n\t\tUndefinedFilter,\n\n\t\t// RESP-CODES introduced in rfc5530:\n\t\tUnavailable,\n\t\tAuthenticationFailed,\n\t\tAuthorizationFailed,\n\t\tExpired,\n\t\tPrivacyRequired,\n\t\tContactAdmin,\n\t\tNoPerm,\n\t\tInUse,\n\t\tExpungeIssued,\n\t\tCorruption,\n\t\tServerBug,\n\t\tClientBug,\n\t\tCanNot,\n\t\tLimit,\n\t\tOverQuota,\n\t\tAlreadyExists,\n\t\tNonExistent,\n\n\t\t// RESP-CODES introduced in rfc6154:\n\t\tUseAttr,\n\n\t\t// RESP-CODES introduced in rfc8474:\n\t\tMailboxId,\n\n\t\t// GMail-specific RESP-CODES\n\t\tWebAlert,\n\n\t\tUnknown       = 255\n\t}\n\n\tclass ImapResponseCode\n\t{\n\t\tpublic readonly ImapResponseCodeType Type;\n\t\tpublic bool IsTagged, IsError;\n\t\tpublic string Message;\n\n\t\tinternal ImapResponseCode (ImapResponseCodeType type, bool isError)\n\t\t{\n\t\t\tMessage = string.Empty;\n\t\t\tIsError = isError;\n\t\t\tType = type;\n\t\t}\n\n\t\tpublic static ImapResponseCode Create (ImapResponseCodeType type)\n\t\t{\n\t\t\tswitch (type) {\n\t\t\tcase ImapResponseCodeType.Alert:                return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.BadCharset:           return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.Capability:           return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.NewName:              return new NewNameResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Parse:                return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.PermanentFlags:       return new PermanentFlagsResponseCode (type);\n\t\t\tcase ImapResponseCodeType.ReadOnly:             return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.ReadWrite:            return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.TryCreate:            return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.UidNext:              return new UidNextResponseCode (type);\n\t\t\tcase ImapResponseCodeType.UidValidity:          return new UidValidityResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Unseen:               return new UnseenResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Referral:             return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.UnknownCte:           return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.AppendUid:            return new AppendUidResponseCode (type);\n\t\t\tcase ImapResponseCodeType.CopyUid:              return new CopyUidResponseCode (type);\n\t\t\tcase ImapResponseCodeType.UidNotSticky:         return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.UrlMech:              return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.BadUrl:               return new BadUrlResponseCode (type);\n\t\t\tcase ImapResponseCodeType.TooBig:               return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.HighestModSeq:        return new HighestModSeqResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Modified:             return new ModifiedResponseCode (type);\n\t\t\tcase ImapResponseCodeType.NoModSeq:             return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.CompressionActive:    return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.Closed:               return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.NotSaved:             return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.BadComparator:        return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.Annotate:             return new AnnotateResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Annotations:          return new AnnotationsResponseCode (type);\n\t\t\tcase ImapResponseCodeType.MaxConvertMessages:   return new MaxConvertResponseCode (type);\n\t\t\tcase ImapResponseCodeType.MaxConvertParts:      return new MaxConvertResponseCode (type);\n\t\t\tcase ImapResponseCodeType.TempFail:             return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.NoUpdate:             return new NoUpdateResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Metadata:             return new MetadataResponseCode (type);\n\t\t\tcase ImapResponseCodeType.NotificationOverflow: return new ImapResponseCode (type, false);\n\t\t\tcase ImapResponseCodeType.BadEvent:             return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.UndefinedFilter:      return new UndefinedFilterResponseCode (type);\n\t\t\tcase ImapResponseCodeType.Unavailable:          return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.AuthenticationFailed: return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.AuthorizationFailed:  return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.Expired:              return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.PrivacyRequired:      return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.ContactAdmin:         return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.NoPerm:               return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.InUse:                return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.ExpungeIssued:        return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.Corruption:           return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.ServerBug:            return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.ClientBug:            return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.CanNot:               return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.Limit:                return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.OverQuota:            return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.AlreadyExists:        return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.NonExistent:          return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.UseAttr:              return new ImapResponseCode (type, true);\n\t\t\tcase ImapResponseCodeType.MailboxId:            return new MailboxIdResponseCode (type);\n\t\t\tcase ImapResponseCodeType.WebAlert:             return new WebAlertResponseCode (type);\n\t\t\tdefault:                                        return new ImapResponseCode (type, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tclass NewNameResponseCode : ImapResponseCode\n\t{\n\t\tpublic string? OldName;\n\t\tpublic string? NewName;\n\n\t\tinternal NewNameResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass PermanentFlagsResponseCode : ImapResponseCode\n\t{\n\t\tpublic HashSet<string> Keywords;\n\t\tpublic MessageFlags Flags;\n\n\t\tinternal PermanentFlagsResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t\tKeywords = new HashSet<string> (StringComparer.Ordinal);\n\t\t}\n\t}\n\n\tclass UidNextResponseCode : ImapResponseCode\n\t{\n\t\tpublic UniqueId Uid;\n\n\t\tinternal UidNextResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass UidValidityResponseCode : ImapResponseCode\n\t{\n\t\tpublic uint UidValidity;\n\n\t\tinternal UidValidityResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass UnseenResponseCode : ImapResponseCode\n\t{\n\t\tpublic int Index;\n\n\t\tinternal UnseenResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass AppendUidResponseCode : UidValidityResponseCode\n\t{\n\t\tpublic UniqueIdSet? UidSet;\n\n\t\tinternal AppendUidResponseCode (ImapResponseCodeType type) : base (type)\n\t\t{\n\t\t}\n\t}\n\n\tclass CopyUidResponseCode : UidValidityResponseCode\n\t{\n\t\tpublic UniqueIdSet? SrcUidSet, DestUidSet;\n\n\t\tinternal CopyUidResponseCode (ImapResponseCodeType type) : base (type)\n\t\t{\n\t\t}\n\t}\n\n\tclass BadUrlResponseCode : ImapResponseCode\n\t{\n\t\tpublic string? BadUrl;\n\n\t\tinternal BadUrlResponseCode (ImapResponseCodeType type) : base (type, true)\n\t\t{\n\t\t}\n\t}\n\n\tclass HighestModSeqResponseCode : ImapResponseCode\n\t{\n\t\tpublic ulong HighestModSeq;\n\n\t\tinternal HighestModSeqResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass ModifiedResponseCode : ImapResponseCode\n\t{\n\t\tpublic UniqueIdSet? UidSet;\n\n\t\tinternal ModifiedResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass MaxConvertResponseCode : ImapResponseCode\n\t{\n\t\tpublic uint MaxConvert;\n\n\t\tinternal MaxConvertResponseCode (ImapResponseCodeType type) : base (type, true)\n\t\t{\n\t\t}\n\t}\n\n\tclass NoUpdateResponseCode : ImapResponseCode\n\t{\n\t\tpublic string? Tag;\n\n\t\tinternal NoUpdateResponseCode (ImapResponseCodeType type) : base (type, true)\n\t\t{\n\t\t}\n\t}\n\n\tenum AnnotateResponseCodeSubType\n\t{\n\t\tTooBig,\n\t\tTooMany\n\t}\n\n\tclass AnnotateResponseCode : ImapResponseCode\n\t{\n\t\tpublic AnnotateResponseCodeSubType SubType;\n\n\t\tinternal AnnotateResponseCode (ImapResponseCodeType type) : base (type, true)\n\t\t{\n\t\t}\n\t}\n\n\tclass AnnotationsResponseCode : ImapResponseCode\n\t{\n\t\tpublic AnnotationAccess Access;\n\t\tpublic AnnotationScope Scopes;\n\t\tpublic uint MaxSize;\n\n\t\tinternal AnnotationsResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tenum MetadataResponseCodeSubType\n\t{\n\t\tLongEntries,\n\t\tMaxSize,\n\t\tTooMany,\n\t\tNoPrivate\n\t}\n\n\tclass MetadataResponseCode : ImapResponseCode\n\t{\n\t\tpublic MetadataResponseCodeSubType SubType;\n\t\tpublic uint Value;\n\n\t\tinternal MetadataResponseCode (ImapResponseCodeType type) : base (type, true)\n\t\t{\n\t\t}\n\t}\n\n\tclass UndefinedFilterResponseCode : ImapResponseCode\n\t{\n\t\tpublic string? Name;\n\n\t\tinternal UndefinedFilterResponseCode (ImapResponseCodeType type) : base (type, true)\n\t\t{\n\t\t}\n\t}\n\n\tclass MailboxIdResponseCode : ImapResponseCode\n\t{\n\t\tpublic string? MailboxId;\n\n\t\tinternal MailboxIdResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n\n\tclass WebAlertResponseCode : ImapResponseCode\n\t{\n\t\tpublic Uri? WebUri;\n\n\t\tinternal WebAlertResponseCode (ImapResponseCodeType type) : base (type, false)\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapSearchQueryOptimizer.cs",
    "content": "﻿//\n// ImapSearchQueryOptimizer.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Search;\n\nnamespace MailKit.Net.Imap {\n\tclass ImapSearchQueryOptimizer : ISearchQueryOptimizer\n\t{\n\t\t#region ISearchQueryOptimizer implementation\n\n\t\tpublic SearchQuery Reduce (SearchQuery expr)\n\t\t{\n\t\t\tif (expr.Term == SearchTerm.And) {\n\t\t\t\tvar and = (BinarySearchQuery) expr;\n\n\t\t\t\tif (and.Left.Term == SearchTerm.All)\n\t\t\t\t\treturn and.Right.Optimize (this);\n\n\t\t\t\tif (and.Right.Term == SearchTerm.All)\n\t\t\t\t\treturn and.Left.Optimize (this);\n\t\t\t} else if (expr.Term == SearchTerm.Or) {\n\t\t\t\tvar or = (BinarySearchQuery) expr;\n\n\t\t\t\tif (or.Left.Term == SearchTerm.All)\n\t\t\t\t\treturn SearchQuery.All;\n\n\t\t\t\tif (or.Right.Term == SearchTerm.All)\n\t\t\t\t\treturn SearchQuery.All;\n\t\t\t} else if (expr.Term == SearchTerm.Not) {\n\t\t\t\tvar unary = (UnarySearchQuery) expr;\n\n\t\t\t\tswitch (unary.Operand.Term) {\n\t\t\t\tcase SearchTerm.Not: return ((UnarySearchQuery) unary.Operand).Operand.Optimize (this);\n\t\t\t\tcase SearchTerm.NotAnswered: return SearchQuery.Answered;\n\t\t\t\tcase SearchTerm.Answered: return SearchQuery.NotAnswered;\n\t\t\t\tcase SearchTerm.NotDeleted: return SearchQuery.Deleted;\n\t\t\t\tcase SearchTerm.Deleted: return SearchQuery.NotDeleted;\n\t\t\t\tcase SearchTerm.NotDraft: return SearchQuery.Draft;\n\t\t\t\tcase SearchTerm.Draft: return SearchQuery.NotDraft;\n\t\t\t\tcase SearchTerm.NotFlagged: return SearchQuery.Flagged;\n\t\t\t\tcase SearchTerm.Flagged: return SearchQuery.NotFlagged;\n\t\t\t\tcase SearchTerm.NotRecent: return SearchQuery.Recent;\n\t\t\t\tcase SearchTerm.Recent: return SearchQuery.NotRecent;\n\t\t\t\tcase SearchTerm.NotSeen: return SearchQuery.Seen;\n\t\t\t\tcase SearchTerm.Seen: return SearchQuery.NotSeen;\n\t\t\t\t}\n\n\t\t\t\tif (unary.Operand.Term == SearchTerm.Keyword)\n\t\t\t\t\treturn new TextSearchQuery (SearchTerm.NotKeyword, ((TextSearchQuery) unary.Operand).Text);\n\n\t\t\t\tif (unary.Operand.Term == SearchTerm.NotKeyword)\n\t\t\t\t\treturn new TextSearchQuery (SearchTerm.Keyword, ((TextSearchQuery) unary.Operand).Text);\n\t\t\t}\n\n\t\t\treturn expr;\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapStream.cs",
    "content": "﻿//\n// ImapStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit.IO;\n\nusing Buffer = System.Buffer;\nusing SslStream = MailKit.Net.SslStream;\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// An enumeration of the possible IMAP streaming modes.\n\t/// </summary>\n\t/// <remarks>\n\t/// Normal operation is done in the <see cref=\"ImapStreamMode.Token\"/> mode,\n\t/// but when reading literal string data, the\n\t/// <see cref=\"ImapStreamMode.Literal\"/> mode should be used.\n\t/// </remarks>\n\tenum ImapStreamMode {\n\t\t/// <summary>\n\t\t/// Reads 1 token at a time.\n\t\t/// </summary>\n\t\tToken,\n\n\t\t/// <summary>\n\t\t/// Reads literal string data.\n\t\t/// </summary>\n\t\tLiteral\n\t}\n\n\tclass ImapStream : Stream, ICancellableStream\n\t{\n\t\tpublic const string AtomSpecials    = \"(){%*\\\\\\\"\";\n\t\tpublic const string DefaultSpecials = \"[]\" + AtomSpecials;\n\t\tconst int ReadAheadSize = 128;\n\t\tconst int BlockSize = 4096;\n\t\tconst int PadSize = 4;\n\n\t\t// I/O buffering\n\t\treadonly byte[] input = new byte[ReadAheadSize + BlockSize + PadSize];\n\t\tconst int inputStart = ReadAheadSize;\n\t\tint inputIndex = ReadAheadSize;\n\t\tint inputEnd = ReadAheadSize;\n\n\t\treadonly byte[] output = new byte[BlockSize];\n\t\tint outputIndex;\n\n\t\treadonly Stack<ImapToken> tokens;\n\t\treadonly IProtocolLogger logger;\n\t\tint literalDataLeft;\n\t\tbool disposed;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Imap.ImapStream\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ImapStream\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"source\">The underlying network stream.</param>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\tpublic ImapStream (Stream source, IProtocolLogger protocolLogger)\n\t\t{\n\t\t\ttokens = new Stack<ImapToken> ();\n\t\t\tlogger = protocolLogger;\n\t\t\tIsConnected = true;\n\t\t\tStream = source;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or sets the underlying network stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying network stream.\n\t\t/// </remarks>\n\t\t/// <value>The underlying network stream.</value>\n\t\tpublic Stream Stream {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or sets the mode used for reading.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the mode used for reading.\n\t\t/// </remarks>\n\t\t/// <value>The mode.</value>\n\t\tpublic ImapStreamMode Mode {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the length of the literal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the literal.\n\t\t/// </remarks>\n\t\t/// <value>The length of the literal.</value>\n\t\tpublic int LiteralLength {\n\t\t\tget { return literalDataLeft; }\n\t\t\tinternal set { literalDataLeft = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the stream is connected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the stream is connected.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsConnected {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports reading.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports reading.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports reading; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanRead {\n\t\t\tget { return Stream.CanRead; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports writing.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports writing.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports writing; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanWrite {\n\t\t\tget { return Stream.CanWrite; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports seeking.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports seeking.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports seeking; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports I/O timeouts.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports I/O timeouts.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports I/O timeouts; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return Stream.CanTimeout; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </remarks>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to read before timing out.</returns>\n\t\t/// <value>The read timeout.</value>\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return Stream.ReadTimeout; }\n\t\t\tset { Stream.ReadTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </remarks>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to write before timing out.</returns>\n\t\t/// <value>The write timeout.</value>\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return Stream.WriteTimeout; }\n\t\t\tset { Stream.WriteTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the position within the current stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the position within the current stream.\n\t\t/// </remarks>\n\t\t/// <returns>The current position within the stream.</returns>\n\t\t/// <value>The position of the stream.</value>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\tpublic override long Position {\n\t\t\tget { return Stream.Position; }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the length of the stream, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the stream, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>A long value representing the length of the stream in bytes.</returns>\n\t\t/// <value>The length of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\tpublic override long Length {\n\t\t\tget { return Stream.Length; }\n\t\t}\n\n\t\tbool AlignReadAheadBuffer (int atleast, out int left, out int start, out int end)\n\t\t{\n\t\t\tleft = inputEnd - inputIndex;\n\t\t\tstart = inputStart;\n\t\t\tend = inputEnd;\n\n\t\t\tif (left >= atleast)\n\t\t\t\treturn false;\n\n\t\t\tif (left > 0) {\n\t\t\t\tint index = inputIndex;\n\n\t\t\t\t// attempt to align the end of the remaining input with ReadAheadSize\n\t\t\t\tif (index >= start) {\n\t\t\t\t\tstart -= Math.Min (ReadAheadSize, left);\n\t\t\t\t\tBuffer.BlockCopy (input, index, input, start, left);\n\t\t\t\t\tindex = start;\n\t\t\t\t\tstart += left;\n\t\t\t\t} else if (index > 0) {\n\t\t\t\t\tint shift = Math.Min (index, end - start);\n\t\t\t\t\tBuffer.BlockCopy (input, index, input, index - shift, left);\n\t\t\t\t\tindex -= shift;\n\t\t\t\t\tstart = index + left;\n\t\t\t\t} else {\n\t\t\t\t\t// we can't shift...\n\t\t\t\t\tstart = end;\n\t\t\t\t}\n\n\t\t\t\tinputIndex = index;\n\t\t\t\tinputEnd = start;\n\t\t\t} else {\n\t\t\t\tinputIndex = start;\n\t\t\t\tinputEnd = start;\n\t\t\t}\n\n\t\t\tend = input.Length - PadSize;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tint ReadAhead (int atleast, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (!AlignReadAheadBuffer (atleast, out int left, out int start, out int end))\n\t\t\t\treturn left;\n\n\t\t\ttry {\n\t\t\t\tvar network = Stream as NetworkStream;\n\t\t\t\tint nread;\n\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tnetwork?.Poll (SelectMode.SelectRead, cancellationToken);\n\n\t\t\t\tif ((nread = Stream.Read (input, start, end - start)) > 0) {\n\t\t\t\t\tlogger.LogServer (input, start, nread);\n\t\t\t\t\tinputEnd += nread;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new ImapProtocolException (\"The IMAP server has unexpectedly disconnected.\");\n\t\t\t\t}\n\n\t\t\t\tif (network == null)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t} catch {\n\t\t\t\tIsConnected = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn inputEnd - inputIndex;\n\t\t}\n\n\t\tasync ValueTask<int> ReadAheadAsync (int atleast, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (!AlignReadAheadBuffer (atleast, out int left, out int start, out int end))\n\t\t\t\treturn left;\n\n\t\t\ttry {\n\t\t\t\tint nread;\n\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tif ((nread = await Stream.ReadAsync (input, start, end - start, cancellationToken).ConfigureAwait (false)) > 0) {\n\t\t\t\t\tlogger.LogServer (input, start, nread);\n\t\t\t\t\tinputEnd += nread;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new ImapProtocolException (\"The IMAP server has unexpectedly disconnected.\");\n\t\t\t\t}\n\n\t\t\t\tif (Stream is not NetworkStream)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t} catch {\n\t\t\t\tIsConnected = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn inputEnd - inputIndex;\n\t\t}\n\n\t\tstatic void ValidateArguments (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || count > (buffer.Length - offset))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (ImapStream));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The stream is in token mode (see <see cref=\"ImapStreamMode.Token\"/>).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic int Read (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (Mode != ImapStreamMode.Literal)\n\t\t\t\treturn 0;\n\n\t\t\tcount = Math.Min (count, literalDataLeft);\n\n\t\t\tint length = inputEnd - inputIndex;\n\t\t\tint n;\n\n\t\t\tif (length < count && length <= ReadAheadSize)\n\t\t\t\tReadAhead (BlockSize, cancellationToken);\n\n\t\t\tlength = inputEnd - inputIndex;\n\t\t\tn = Math.Min (count, length);\n\n\t\t\tBuffer.BlockCopy (input, inputIndex, buffer, offset, n);\n\t\t\tliteralDataLeft -= n;\n\t\t\tinputIndex += n;\n\n\t\t\tif (literalDataLeft == 0)\n\t\t\t\tMode = ImapStreamMode.Token;\n\n\t\t\treturn n;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The stream is in token mode (see <see cref=\"ImapStreamMode.Token\"/>).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\treturn Read (buffer, offset, count, CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (Mode != ImapStreamMode.Literal)\n\t\t\t\treturn 0;\n\n\t\t\tcount = Math.Min (count, literalDataLeft);\n\n\t\t\tint length = inputEnd - inputIndex;\n\t\t\tint n;\n\n\t\t\tif (length < count && length <= ReadAheadSize)\n\t\t\t\tawait ReadAheadAsync (BlockSize, cancellationToken).ConfigureAwait (false);\n\n\t\t\tlength = inputEnd - inputIndex;\n\t\t\tn = Math.Min (count, length);\n\n\t\t\tBuffer.BlockCopy (input, inputIndex, buffer, offset, n);\n\t\t\tliteralDataLeft -= n;\n\t\t\tinputIndex += n;\n\n\t\t\tif (literalDataLeft == 0)\n\t\t\t\tMode = ImapStreamMode.Token;\n\n\t\t\treturn n;\n\t\t}\n\n\t\tstatic bool IsAtom (byte c, string specials)\n\t\t{\n\t\t\treturn !IsCtrl (c) && c != (byte) ' ' && specials.IndexOf ((char) c) == -1;\n\t\t}\n\n\t\tstatic bool IsCtrl (byte c)\n\t\t{\n\t\t\treturn c <= 0x1f || c == 0x7f;\n\t\t}\n\n\t\tstatic bool IsWhiteSpace (byte c)\n\t\t{\n\t\t\treturn c == (byte) ' ' || c == (byte) '\\r';\n\t\t}\n\n\t\tbool TryReadQuotedString (ByteArrayBuilder builder, ref bool escaped)\n\t\t{\n\t\t\tdo {\n\t\t\t\twhile (inputIndex < inputEnd) {\n\t\t\t\t\tif (input[inputIndex] == (byte) '\"' && !escaped)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tif (input[inputIndex] == (byte) '\\\\' && !escaped) {\n\t\t\t\t\t\tescaped = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuilder.Append (input[inputIndex]);\n\t\t\t\t\t\tescaped = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tinputIndex++;\n\t\t\t\t}\n\n\t\t\t\tif (inputIndex + 1 < inputEnd) {\n\t\t\t\t\t// skip over closing '\"'\n\t\t\t\t\tinputIndex++;\n\n\t\t\t\t\t// Note: Some IMAP servers do not properly escape double-quotes inside\n\t\t\t\t\t// of a qstring token and so, as an attempt at working around this\n\t\t\t\t\t// problem, check that the closing '\"' character is not immediately\n\t\t\t\t\t// followed by any character that we would expect immediately following\n\t\t\t\t\t// a qstring token.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/485 for details.\n\t\t\t\t\tif (\"]) \\r\\n\".IndexOf ((char) input[inputIndex]) != -1)\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\tbuilder.Append ((byte) '\"');\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t} while (true);\n\t\t}\n\n\t\tImapToken ReadQuotedStringToken (CancellationToken cancellationToken)\n\t\t{\n\t\t\tbool escaped = false;\n\n\t\t\t// skip over the opening '\"'\n\t\t\tinputIndex++;\n\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\twhile (!TryReadQuotedString (builder, ref escaped))\n\t\t\t\t\tReadAhead (2, cancellationToken);\n\n\t\t\t\tvar qstring = builder.ToString ();\n\n\t\t\t\treturn ImapToken.Create (ImapTokenType.QString, qstring);\n\t\t\t}\n\t\t}\n\n\t\tasync ValueTask<ImapToken> ReadQuotedStringTokenAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tbool escaped = false;\n\n\t\t\t// skip over the opening '\"'\n\t\t\tinputIndex++;\n\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\twhile (!TryReadQuotedString (builder, ref escaped))\n\t\t\t\t\tawait ReadAheadAsync (2, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tvar qstring = builder.ToString ();\n\n\t\t\t\treturn ImapToken.Create (ImapTokenType.QString, qstring);\n\t\t\t}\n\t\t}\n\n\t\tbool TryReadAtomString (ImapTokenType type, ByteArrayBuilder builder, string specials)\n\t\t{\n\t\t\tinput[inputEnd] = (byte) '\\n';\n\n\t\t\tif (type == ImapTokenType.Flag && builder.Length == 1 && input[inputIndex] == (byte) '*') {\n\t\t\t\t// this is a special wildcard flag\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\t\t\t}\n\n\t\t\twhile (IsAtom (input[inputIndex], specials))\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\treturn inputIndex < inputEnd;\n\t\t}\n\n\t\tImapToken ReadAtomString (ImapTokenType type, string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (32)) {\n\t\t\t\tif (type == ImapTokenType.Flag)\n\t\t\t\t\tbuilder.Append ((byte) '\\\\');\n\n\t\t\t\twhile (!TryReadAtomString (type, builder, specials))\n\t\t\t\t\tReadAhead (1, cancellationToken);\n\n\t\t\t\treturn ImapToken.Create (type, builder);\n\t\t\t}\n\t\t}\n\n\t\tasync ValueTask<ImapToken> ReadAtomStringAsync (ImapTokenType type, string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (32)) {\n\t\t\t\tif (type == ImapTokenType.Flag)\n\t\t\t\t\tbuilder.Append ((byte) '\\\\');\n\n\t\t\t\twhile (!TryReadAtomString (type, builder, specials))\n\t\t\t\t\tawait ReadAheadAsync (1, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\treturn ImapToken.Create (type, builder);\n\t\t\t}\n\t\t}\n\n\t\tImapToken ReadAtomToken (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn ReadAtomString (ImapTokenType.Atom, specials, cancellationToken);\n\t\t}\n\n\t\tValueTask<ImapToken> ReadAtomTokenAsync (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn ReadAtomStringAsync (ImapTokenType.Atom, specials, cancellationToken);\n\t\t}\n\n\t\tImapToken ReadFlagToken (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tinputIndex++;\n\n\t\t\treturn ReadAtomString (ImapTokenType.Flag, specials, cancellationToken);\n\t\t}\n\n\t\tValueTask<ImapToken> ReadFlagTokenAsync (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tinputIndex++;\n\n\t\t\treturn ReadAtomStringAsync (ImapTokenType.Flag, specials, cancellationToken);\n\t\t}\n\n\t\tbool TryReadLiteralTokenValue (ByteArrayBuilder builder)\n\t\t{\n\t\t\tinput[inputEnd] = (byte) '}';\n\n\t\t\twhile (input[inputIndex] != (byte) '}' && input[inputIndex] != '+')\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\treturn inputIndex < inputEnd;\n\t\t}\n\n\t\tbool TryReadUntilCloseCurlyBrace (ByteArrayBuilder builder)\n\t\t{\n\t\t\tinput[inputEnd] = (byte) '}';\n\n\t\t\twhile (input[inputIndex] != (byte) '}')\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\treturn inputIndex < inputEnd;\n\t\t}\n\n\t\tbool TrySkipUntilNewLine ()\n\t\t{\n\t\t\tinput[inputEnd] = (byte) '\\n';\n\n\t\t\twhile (input[inputIndex] != (byte) '\\n')\n\t\t\t\tinputIndex++;\n\n\t\t\treturn inputIndex < inputEnd;\n\t\t}\n\n\t\tImapToken ReadLiteralToken (CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (16)) {\n\t\t\t\t// skip over the '{'\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\t\twhile (!TryReadLiteralTokenValue (builder))\n\t\t\t\t\tReadAhead (1, cancellationToken);\n\n\t\t\t\tint endIndex = builder.Length;\n\n\t\t\t\tif (input[inputIndex] == (byte) '+')\n\t\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\t\t// technically, we need \"}\\r\\n\", but in order to be more lenient, we'll accept \"}\\n\"\n\t\t\t\tReadAhead (2, cancellationToken);\n\n\t\t\t\tif (input[inputIndex] != (byte) '}') {\n\t\t\t\t\t// PROTOCOL ERROR... but maybe we can work around it?\n\t\t\t\t\twhile (!TryReadUntilCloseCurlyBrace (builder))\n\t\t\t\t\t\tReadAhead (1, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\t// skip over the '}'\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\t\t// read until we get a new line...\n\t\t\t\twhile (!TrySkipUntilNewLine ())\n\t\t\t\t\tReadAhead (1, cancellationToken);\n\n\t\t\t\t// skip over the '\\n'\n\t\t\t\tinputIndex++;\n\n\t\t\t\tif (!builder.TryParse (1, endIndex, out literalDataLeft))\n\t\t\t\t\treturn ImapToken.Create (ImapTokenType.Error, builder.ToString ());\n\n\t\t\t\tMode = ImapStreamMode.Literal;\n\n\t\t\t\treturn ImapToken.Create (ImapTokenType.Literal, literalDataLeft);\n\t\t\t}\n\t\t}\n\n\t\tasync ValueTask<ImapToken> ReadLiteralTokenAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (16)) {\n\t\t\t\t// skip over the '{'\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\t\twhile (!TryReadLiteralTokenValue (builder))\n\t\t\t\t\tawait ReadAheadAsync (1, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tint endIndex = builder.Length;\n\n\t\t\t\tif (input[inputIndex] == (byte) '+')\n\t\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\t\t// technically, we need \"}\\r\\n\", but in order to be more lenient, we'll accept \"}\\n\"\n\t\t\t\tawait ReadAheadAsync (2, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (input[inputIndex] != (byte) '}') {\n\t\t\t\t\t// PROTOCOL ERROR... but maybe we can work around it?\n\t\t\t\t\twhile (!TryReadUntilCloseCurlyBrace (builder))\n\t\t\t\t\t\tawait ReadAheadAsync (1, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\t// skip over the '}'\n\t\t\t\tbuilder.Append (input[inputIndex++]);\n\n\t\t\t\t// read until we get a new line...\n\t\t\t\twhile (!TrySkipUntilNewLine ())\n\t\t\t\t\tawait ReadAheadAsync (1, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// skip over the '\\n'\n\t\t\t\tinputIndex++;\n\n\t\t\t\tif (!builder.TryParse (1, endIndex, out literalDataLeft) || literalDataLeft < 0)\n\t\t\t\t\treturn ImapToken.Create (ImapTokenType.Error, builder.ToString ());\n\n\t\t\t\tMode = ImapStreamMode.Literal;\n\n\t\t\t\treturn ImapToken.Create (ImapTokenType.Literal, literalDataLeft);\n\t\t\t}\n\t\t}\n\n\t\tbool TrySkipWhiteSpace ()\n\t\t{\n\t\t\tinput[inputEnd] = (byte) '\\n';\n\n\t\t\twhile (IsWhiteSpace (input[inputIndex]))\n\t\t\t\tinputIndex++;\n\n\t\t\treturn inputIndex < inputEnd;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the next available token from the stream.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"specials\">The special characters that are not allowed in an atom token.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic ImapToken ReadToken (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (tokens.Count > 0)\n\t\t\t\treturn tokens.Pop ();\n\n\t\t\t// skip over white space between tokens...\n\t\t\twhile (!TrySkipWhiteSpace ())\n\t\t\t\tReadAhead (1, cancellationToken);\n\n\t\t\tchar c = (char) input[inputIndex];\n\n\t\t\tif (c == '\"')\n\t\t\t\treturn ReadQuotedStringToken (cancellationToken);\n\n\t\t\tif (c == '{')\n\t\t\t\treturn ReadLiteralToken (cancellationToken);\n\n\t\t\tif (c == '\\\\')\n\t\t\t\treturn ReadFlagToken (specials, cancellationToken);\n\n\t\t\tif (IsAtom (input[inputIndex], specials))\n\t\t\t\treturn ReadAtomToken (specials, cancellationToken);\n\n\t\t\t// special character token\n\t\t\tinputIndex++;\n\n\t\t\treturn ImapToken.Create ((ImapTokenType) c, c);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads the next available token from the stream.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"specials\">The special characters that are not allowed in an atom token.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic async ValueTask<ImapToken> ReadTokenAsync (string specials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (tokens.Count > 0)\n\t\t\t\treturn tokens.Pop ();\n\n\t\t\t// skip over white space between tokens...\n\t\t\twhile (!TrySkipWhiteSpace ())\n\t\t\t\tawait ReadAheadAsync (1, cancellationToken).ConfigureAwait (false);\n\n\t\t\tchar c = (char) input[inputIndex];\n\n\t\t\tif (c == '\"')\n\t\t\t\treturn await ReadQuotedStringTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (c == '{')\n\t\t\t\treturn await ReadLiteralTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (c == '\\\\')\n\t\t\t\treturn await ReadFlagTokenAsync (specials, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (IsAtom (input[inputIndex], specials))\n\t\t\t\treturn await ReadAtomTokenAsync (specials, cancellationToken).ConfigureAwait (false);\n\n\t\t\t// special character token\n\t\t\tinputIndex++;\n\n\t\t\treturn ImapToken.Create ((ImapTokenType) c, c);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads the next available token from the stream.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic ImapToken ReadToken (CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn ReadToken (DefaultSpecials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads the next available token from the stream.\n\t\t/// </summary>\n\t\t/// <returns>The token.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic ValueTask<ImapToken> ReadTokenAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn ReadTokenAsync (DefaultSpecials, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Unget a token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Ungets a token.\n\t\t/// </remarks>\n\t\t/// <param name=\"token\">The token.</param>\n\t\tpublic void UngetToken (ImapToken token)\n\t\t{\n\t\t\tif (token == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (token));\n\n\t\t\ttokens.Push (token);\n\t\t}\n\n\t\tunsafe bool TryReadLine (ByteArrayBuilder builder)\n\t\t{\n\t\t\tfixed (byte* inbuf = input) {\n\t\t\t\tbyte* start, inptr, inend;\n\t\t\t\tint offset = inputIndex;\n\t\t\t\tint count;\n\n\t\t\t\tstart = inbuf + inputIndex;\n\t\t\t\tinend = inbuf + inputEnd;\n\t\t\t\t*inend = (byte) '\\n';\n\t\t\t\tinptr = start;\n\n\t\t\t\t// FIXME: use SIMD to optimize this\n\t\t\t\twhile (*inptr != (byte) '\\n')\n\t\t\t\t\tinptr++;\n\n\t\t\t\tinputIndex = (int) (inptr - inbuf);\n\t\t\t\tcount = (int) (inptr - start);\n\n\t\t\t\tif (inptr == inend) {\n\t\t\t\t\tbuilder.Append (input, offset, count);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// consume the '\\n'\n\t\t\t\tinputIndex++;\n\t\t\t\tcount++;\n\n\t\t\t\tbuilder.Append (input, offset, count);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a single line of input from the stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method should be called in a loop until it returns <see langword=\"true\" />.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" />, if reading the line is complete, <see langword=\"false\" /> otherwise.</returns>\n\t\t/// <param name=\"builder\">The output buffer write the line data into.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tinternal bool ReadLine (ByteArrayBuilder builder, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (inputIndex == inputEnd)\n\t\t\t\tReadAhead (1, cancellationToken);\n\n\t\t\treturn TryReadLine (builder);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads a single line of input from the stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method should be called in a loop until it returns <see langword=\"true\" />.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" />, if reading the line is complete, <see langword=\"false\" /> otherwise.</returns>\n\t\t/// <param name=\"builder\">The output buffer write the line data into.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tinternal async ValueTask<bool> ReadLineAsync (ByteArrayBuilder builder, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (inputIndex == inputEnd)\n\t\t\t\tawait ReadAheadAsync (1, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn TryReadLine (builder);\n\t\t}\n\n\t\tvoid AppendToOutputBuffer (byte[] buffer, ref int index, ref int left)\n\t\t{\n\t\t\tint n = Math.Min (BlockSize - outputIndex, left);\n\n\t\t\tif (outputIndex > 0 || n < BlockSize) {\n\t\t\t\t// append the data to the output buffer\n\t\t\t\tBuffer.BlockCopy (buffer, index, output, outputIndex, n);\n\t\t\t\toutputIndex += n;\n\t\t\t\tindex += n;\n\t\t\t\tleft -= n;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void Write (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\t\t\t\tint index = offset;\n\t\t\t\tint left = count;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tAppendToOutputBuffer (buffer, ref index, ref left);\n\n\t\t\t\t\tif (outputIndex == BlockSize) {\n\t\t\t\t\t\t// flush the output buffer\n\t\t\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\t\t\tStream.Write (output, 0, BlockSize);\n\n\t\t\t\t\t\tlogger.LogClient (output, 0, BlockSize);\n\t\t\t\t\t\toutputIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == 0) {\n\t\t\t\t\t\t// write blocks of data to the stream without buffering\n\t\t\t\t\t\twhile (left >= BlockSize) {\n\t\t\t\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\t\t\t\tStream.Write (buffer, index, BlockSize);\n\n\t\t\t\t\t\t\tlogger.LogClient (buffer, index, BlockSize);\n\t\t\t\t\t\t\tindex += BlockSize;\n\t\t\t\t\t\t\tleft -= BlockSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tWrite (buffer, offset, count, CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <returns>A task that represents the asynchronous write operation.</returns>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\ttry {\n\t\t\t\tint index = offset;\n\t\t\t\tint left = count;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tAppendToOutputBuffer (buffer, ref index, ref left);\n\n\t\t\t\t\tif (outputIndex == BlockSize) {\n\t\t\t\t\t\t// flush the output buffer\n\t\t\t\t\t\tawait Stream.WriteAsync (output, 0, BlockSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tlogger.LogClient (output, 0, BlockSize);\n\t\t\t\t\t\toutputIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == 0) {\n\t\t\t\t\t\t// write blocks of data to the stream without buffering\n\t\t\t\t\t\twhile (left >= BlockSize) {\n\t\t\t\t\t\t\tawait Stream.WriteAsync (buffer, index, BlockSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\tlogger.LogClient (buffer, index, BlockSize);\n\t\t\t\t\t\t\tindex += BlockSize;\n\t\t\t\t\t\t\tleft -= BlockSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void Flush (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (outputIndex == 0)\n\t\t\t\treturn;\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\n\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\tStream.Write (output, 0, outputIndex);\n\t\t\t\tStream.Flush ();\n\n\t\t\t\tlogger.LogClient (output, 0, outputIndex);\n\t\t\t\toutputIndex = 0;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all output buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tFlush (CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <returns>A task that represents the asynchronous flush operation.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (outputIndex == 0)\n\t\t\t\treturn;\n\n\t\t\ttry {\n\t\t\t\tawait Stream.WriteAsync (output, 0, outputIndex, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tlogger.LogClient (output, 0, outputIndex);\n\t\t\t\toutputIndex = 0;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// It is not possible to seek within a <see cref=\"ImapStream\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>The new position within the stream.</returns>\n\t\t/// <param name=\"offset\">The offset into the stream relative to the <paramref name=\"origin\"/>.</param>\n\t\t/// <param name=\"origin\">The origin to seek from.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the length of the stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// It is not possible to set the length of a <see cref=\"ImapStream\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"value\">The desired length of the stream in bytes.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support setting the length.\n\t\t/// </exception>\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"ImapStream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"ImapStream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tStream.Dispose ();\n\t\t\t}\n\n\t\t\tdisposed = true;\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapToken.cs",
    "content": "﻿//\n// ImapToken.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Globalization;\nusing System.Collections.Generic;\n\nusing MimeKit.Utils;\n\nnamespace MailKit.Net.Imap {\n\tenum ImapTokenType {\n\t\tNoData        = -7,\n\t\tError         = -6,\n\t\tNil           = -5,\n\t\tAtom          = -4,\n\t\tFlag          = -3,\n\t\tQString       = -2,\n\t\tLiteral       = -1,\n\n\t\t// character tokens:\n\t\tEoln          = (int) '\\n',\n\t\tOpenParen     = (int) '(',\n\t\tCloseParen    = (int) ')',\n\t\tAsterisk      = (int) '*',\n\t\tOpenBracket   = (int) '[',\n\t\tCloseBracket  = (int) ']',\n\t}\n\n\tclass ImapToken\n\t{\n\t\tpublic static readonly ImapToken Plus = new ImapToken (ImapTokenType.Atom, \"+\");\n\t\tpublic static readonly ImapToken Asterisk = new ImapToken (ImapTokenType.Asterisk, '*');\n\t\tpublic static readonly ImapToken OpenParen = new ImapToken (ImapTokenType.OpenParen, '(');\n\t\tpublic static readonly ImapToken CloseParen = new ImapToken (ImapTokenType.CloseParen, ')');\n\t\tpublic static readonly ImapToken OpenBracket = new ImapToken (ImapTokenType.OpenBracket, '[');\n\t\tpublic static readonly ImapToken CloseBracket = new ImapToken (ImapTokenType.CloseBracket, ']');\n\t\tpublic static readonly ImapToken Nil = new ImapToken (ImapTokenType.Nil, \"NIL\");\n\t\tpublic static readonly ImapToken Eoln = new ImapToken (ImapTokenType.Eoln, '\\n');\n\n\t\tstatic readonly ImapToken[] CommonMessageFlagTokens = new ImapToken[] {\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\Answered\"),\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\Deleted\"),\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\Draft\"),\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\Flagged\"),\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\Recent\"),\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\Seen\"),\n\t\t\tnew ImapToken (ImapTokenType.Flag, \"\\\\*\")\n\t\t};\n\n\t\tstatic readonly List<ImapToken> NilTokens = new List<ImapToken> (6) {\n\t\t\tNil\n\t\t};\n\n\t\tstatic readonly ImapToken Ok = new ImapToken (ImapTokenType.Atom, \"OK\");\n\t\tstatic readonly ImapToken Fetch = new ImapToken (ImapTokenType.Atom, \"FETCH\");\n\t\t//static readonly ImapToken Annotation = new ImapToken (ImapTokenType.Atom, \"ANNOTATION\");\n\t\tstatic readonly ImapToken Body = new ImapToken (ImapTokenType.Atom, \"BODY\");\n\t\tstatic readonly ImapToken BodyStructure = new ImapToken (ImapTokenType.Atom, \"BODYSTRUCTURE\");\n\t\t//static readonly ImapToken EmailId = new ImapToken (ImapTokenType.Atom, \"EMAILID\");\n\t\tstatic readonly ImapToken Envelope = new ImapToken (ImapTokenType.Atom, \"ENVELOPE\");\n\t\tstatic readonly ImapToken Flags = new ImapToken (ImapTokenType.Atom, \"FLAGS\");\n\t\t//static readonly ImapToken Header = new ImapToken (ImapTokenType.Atom, \"HEADER\");\n\t\t//static readonly ImapToken HeaderFields = new ImapToken (ImapTokenType.Atom, \"HEADER.FIELDS\");\n\t\tstatic readonly ImapToken InternalDate = new ImapToken (ImapTokenType.Atom, \"INTERNALDATE\");\n\t\tstatic readonly ImapToken ModSeq = new ImapToken (ImapTokenType.Atom, \"MODSEQ\");\n\t\tstatic readonly ImapToken Rfc822Size = new ImapToken (ImapTokenType.Atom, \"RFC822.SIZE\");\n\t\t//static readonly ImapToken SaveDate = new ImapToken (ImapTokenType.Atom, \"SAVEDATE\");\n\t\t//static readonly ImapToken ThreadId = new ImapToken (ImapTokenType.Atom, \"THREADID\");\n\t\tstatic readonly ImapToken Uid = new ImapToken (ImapTokenType.Atom, \"UID\");\n\t\tstatic readonly ImapToken XGMLabels = new ImapToken (ImapTokenType.Atom, \"X-GM-LABELS\");\n\t\tstatic readonly ImapToken XGMMsgId = new ImapToken (ImapTokenType.Atom, \"X-GM-MSGID\");\n\t\tstatic readonly ImapToken XGMThrId = new ImapToken (ImapTokenType.Atom, \"X-GM-THRID\");\n\n\t\tpublic readonly ImapTokenType Type;\n\t\tpublic readonly object Value;\n\n\t\tImapToken (ImapTokenType type, object value)\n\t\t{\n\t\t\tValue = value;\n\t\t\tType = type;\n\n\t\t\t//System.Console.WriteLine (\"token: {0}\", this);\n\t\t}\n\n\t\tpublic static ImapToken Create (ImapTokenType type, char c)\n\t\t{\n\t\t\tswitch (type) {\n\t\t\tcase ImapTokenType.Asterisk: return Asterisk;\n\t\t\tcase ImapTokenType.OpenParen: return OpenParen;\n\t\t\tcase ImapTokenType.CloseParen: return CloseParen;\n\t\t\tcase ImapTokenType.OpenBracket: return OpenBracket;\n\t\t\tcase ImapTokenType.CloseBracket: return CloseBracket;\n\t\t\tcase ImapTokenType.Eoln: return Eoln;\n\t\t\t}\n\n\t\t\treturn new ImapToken (type, c);\n\t\t}\n\n\t\tpublic static ImapToken Create (ImapTokenType type, int literalLength)\n\t\t{\n\t\t\treturn new ImapToken (type, literalLength);\n\t\t}\n\n\t\tpublic static ImapToken Create (ImapTokenType type, ByteArrayBuilder builder)\n\t\t{\n\t\t\tstring value;\n\n\t\t\tif (type == ImapTokenType.Flag) {\n\t\t\t\tforeach (var token in CommonMessageFlagTokens) {\n\t\t\t\t\tvalue = (string) token.Value;\n\n\t\t\t\t\tif (builder.Equals (value, true))\n\t\t\t\t\t\treturn token;\n\t\t\t\t}\n\t\t\t} else if (type == ImapTokenType.Atom) {\n\t\t\t\tif (builder.Equals (\"NIL\", true)) {\n\t\t\t\t\t// Look for the cached NIL token that matches this capitalization.\n\t\t\t\t\tlock (NilTokens) {\n\t\t\t\t\t\tforeach (var token in NilTokens) {\n\t\t\t\t\t\t\tvalue = (string) token.Value;\n\n\t\t\t\t\t\t\tif (builder.Equals (value))\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add this new variation to our NIL token cache.\n\t\t\t\t\t\tvar nil = new ImapToken (ImapTokenType.Nil, builder.ToString ());\n\t\t\t\t\t\tNilTokens.Add (nil);\n\n\t\t\t\t\t\treturn nil;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (builder.Equals (\"+\", false))\n\t\t\t\t\treturn Plus;\n\t\t\t\tif (builder.Equals (\"OK\", false))\n\t\t\t\t\treturn Ok;\n\t\t\t\tif (builder.Equals (\"FETCH\", false))\n\t\t\t\t\treturn Fetch;\n\t\t\t\tif (builder.Equals (\"BODY\", false))\n\t\t\t\t\treturn Body;\n\t\t\t\tif (builder.Equals (\"BODYSTRUCTURE\", false))\n\t\t\t\t\treturn BodyStructure;\n\t\t\t\tif (builder.Equals (\"ENVELOPE\", false))\n\t\t\t\t\treturn Envelope;\n\t\t\t\tif (builder.Equals (\"FLAGS\", false))\n\t\t\t\t\treturn Flags;\n\t\t\t\tif (builder.Equals (\"INTERNALDATE\", false))\n\t\t\t\t\treturn InternalDate;\n\t\t\t\tif (builder.Equals (\"MODSEQ\", false))\n\t\t\t\t\treturn ModSeq;\n\t\t\t\tif (builder.Equals (\"RFC822.SIZE\", false))\n\t\t\t\t\treturn Rfc822Size;\n\t\t\t\tif (builder.Equals (\"UID\", false))\n\t\t\t\t\treturn Uid;\n\t\t\t\tif (builder.Equals (\"X-GM-LABELS\", false))\n\t\t\t\t\treturn XGMLabels;\n\t\t\t\tif (builder.Equals (\"X-GM-MSGID\", false))\n\t\t\t\t\treturn XGMMsgId;\n\t\t\t\tif (builder.Equals (\"X-GM-THRID\", false))\n\t\t\t\t\treturn XGMThrId;\n\t\t\t}\n\n\t\t\tvalue = builder.ToString ();\n\n\t\t\treturn new ImapToken (type, value);\n\t\t}\n\n\t\tpublic static ImapToken Create (ImapTokenType type, string value)\n\t\t{\n\t\t\treturn new ImapToken (type, value);\n\t\t}\n\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tswitch (Type) {\n\t\t\tcase ImapTokenType.NoData:       return \"<no data>\";\n\t\t\tcase ImapTokenType.Nil:          return (string) Value;\n\t\t\tcase ImapTokenType.Atom:         return (string) Value;\n\t\t\tcase ImapTokenType.Flag:         return (string) Value;\n\t\t\tcase ImapTokenType.QString:      return MimeUtils.Quote ((string) Value);\n\t\t\tcase ImapTokenType.Literal:      return string.Format (CultureInfo.InvariantCulture, \"{{{0}}}\", (int) Value);\n\t\t\tcase ImapTokenType.Eoln:         return \"'\\\\n'\";\n\t\t\tcase ImapTokenType.OpenParen:    return \"'('\";\n\t\t\tcase ImapTokenType.CloseParen:   return \"')'\";\n\t\t\tcase ImapTokenType.Asterisk:     return \"'*'\";\n\t\t\tcase ImapTokenType.OpenBracket:  return \"'['\";\n\t\t\tcase ImapTokenType.CloseBracket: return \"']'\";\n\t\t\tdefault:                         return string.Format (CultureInfo.InvariantCulture, \"[{0}: '{1}']\", Type, Value);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Imap/ImapUtils.cs",
    "content": "﻿//\n// ImapUtils.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nnamespace MailKit.Net.Imap {\n\t/// <summary>\n\t/// IMAP utility functions.\n\t/// </summary>\n\tstatic class ImapUtils\n\t{\n\t\tconst FolderAttributes SpecialUseAttributes = FolderAttributes.All | FolderAttributes.Archive | FolderAttributes.Drafts |\n\t\t    FolderAttributes.Flagged | FolderAttributes.Important | FolderAttributes.Inbox | FolderAttributes.Junk |\n\t\t\tFolderAttributes.Sent | FolderAttributes.Trash;\n\t\tconst string QuotedSpecials = \" \\t()<>@,;:\\\\\\\"/[]?=\";\n\t\tstatic readonly int InboxLength = \"INBOX\".Length;\n\n\t\tstatic readonly string[] Months = {\n\t\t\t\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\t\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"\n\t\t};\n\n\t\t/// <summary>\n\t\t/// Formats a date in a format suitable for use with the APPEND command.\n\t\t/// </summary>\n\t\t/// <returns>The formatted date string.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static string FormatInternalDate (DateTimeOffset date)\n\t\t{\n\t\t\treturn string.Format (CultureInfo.InvariantCulture, \"{0:D2}-{1}-{2:D4} {3:D2}:{4:D2}:{5:D2} {6:+00;-00}{7:00}\",\n\t\t\t\tdate.Day, Months[date.Month - 1], date.Year, date.Hour, date.Minute, date.Second,\n\t\t\t\tdate.Offset.Hours, Math.Abs (date.Offset.Minutes));\n\t\t}\n\n\t\tstatic bool TryGetInt32 (string text, ref int index, out int value)\n\t\t{\n\t\t\tint startIndex = index;\n\n\t\t\tvalue = 0;\n\n\t\t\twhile (index < text.Length && text[index] >= '0' && text[index] <= '9') {\n\t\t\t\tint digit = text[index] - '0';\n\n\t\t\t\tif (value > int.MaxValue / 10 || (value == int.MaxValue / 10 && digit > int.MaxValue % 10)) {\n\t\t\t\t\t// integer overflow\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvalue = (value * 10) + digit;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn index > startIndex;\n\t\t}\n\n\t\tstatic bool TryGetInt32 (string text, ref int index, char delim, out int value)\n\t\t{\n\t\t\treturn TryGetInt32 (text, ref index, out value) && index < text.Length && text[index] == delim;\n\t\t}\n\n\t\tstatic bool TryGetMonth (string text, ref int index, char delim, out int month)\n\t\t{\n\t\t\tint startIndex = index;\n\n\t\t\tmonth = 0;\n\n\t\t\tif ((index = text.IndexOf (delim, index)) == -1 || (index - startIndex) != 3)\n\t\t\t\treturn false;\n\n\t\t\tfor (int i = 0; i < Months.Length; i++) {\n\t\t\t\tif (string.Compare (Months[i], 0, text, startIndex, 3, StringComparison.OrdinalIgnoreCase) == 0) {\n\t\t\t\t\tmonth = i + 1;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tstatic bool TryGetTimeZone (string text, ref int index, out TimeSpan timezone)\n\t\t{\n\t\t\tint sign = 1;\n\n\t\t\tif (text[index] == '-') {\n\t\t\t\tsign = -1;\n\t\t\t\tindex++;\n\t\t\t} else if (text[index] == '+') {\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tif (!TryGetInt32 (text, ref index, out var tzone)) {\n\t\t\t\ttimezone = new TimeSpan ();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttzone *= sign;\n\n\t\t\twhile (tzone < -1400)\n\t\t\t\ttzone += 2400;\n\n\t\t\twhile (tzone > 1400)\n\t\t\t\ttzone -= 2400;\n\n\t\t\tint minutes = tzone % 100;\n\t\t\tint hours = tzone / 100;\n\n\t\t\ttimezone = new TimeSpan (hours, minutes, 0);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the internal date string.\n\t\t/// </summary>\n\t\t/// <returns>The date.</returns>\n\t\t/// <param name=\"text\">The text to parse.</param>\n\t\tpublic static DateTimeOffset ParseInternalDate (string text)\n\t\t{\n\t\t\tint index = 0;\n\n\t\t\twhile (index < text.Length && char.IsWhiteSpace (text[index]))\n\t\t\t\tindex++;\n\n\t\t\tif (index >= text.Length || !TryGetInt32 (text, ref index, '-', out int day) || day < 1 || day > 31)\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\tindex++;\n\t\t\tif (index >= text.Length || !TryGetMonth (text, ref index, '-', out int month))\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\tindex++;\n\t\t\tif (index >= text.Length || !TryGetInt32 (text, ref index, ' ', out int year) || year < 1969)\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\tindex++;\n\t\t\tif (index >= text.Length || !TryGetInt32 (text, ref index, ':', out int hour) || hour > 23)\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\tindex++;\n\t\t\tif (index >= text.Length || !TryGetInt32 (text, ref index, ':', out int minute) || minute > 59)\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\tindex++;\n\t\t\tif (index >= text.Length || !TryGetInt32 (text, ref index, ' ', out int second) || second > 59)\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\tindex++;\n\t\t\tif (index >= text.Length || !TryGetTimeZone (text, ref index, out var timezone))\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\twhile (index < text.Length && char.IsWhiteSpace (text[index]))\n\t\t\t\tindex++;\n\n\t\t\tif (index < text.Length)\n\t\t\t\treturn DateTimeOffset.MinValue;\n\n\t\t\t// return DateTimeOffset.ParseExact (text.Trim (), \"d-MMM-yyyy HH:mm:ss zzz\", CultureInfo.InvariantCulture.DateTimeFormat);\n\t\t\treturn new DateTimeOffset (year, month, day, hour, minute, second, timezone);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Formats a list of annotations for a STORE or APPEND command.\n\t\t/// </summary>\n\t\t/// <param name=\"command\">The command builder.</param>\n\t\t/// <param name=\"annotations\">The annotations.</param>\n\t\t/// <param name=\"args\">the argument list.</param>\n\t\t/// <param name=\"throwOnError\">Throw an exception if there are any annotations without properties.</param>\n\t\tpublic static void FormatAnnotations (StringBuilder command, IList<Annotation> annotations, List<object> args, bool throwOnError)\n\t\t{\n\t\t\tint length = command.Length;\n\t\t\tint added = 0;\n\n\t\t\tcommand.Append (\"ANNOTATION (\");\n\n\t\t\tfor (int i = 0; i < annotations.Count; i++) {\n\t\t\t\tvar annotation = annotations[i];\n\n\t\t\t\tif (annotation.Properties.Count == 0) {\n\t\t\t\t\tif (throwOnError)\n\t\t\t\t\t\tthrow new ArgumentException (\"One or more annotations does not define any attributes.\", nameof (annotations));\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcommand.Append (annotation.Entry);\n\t\t\t\tcommand.Append (\" (\");\n\n\t\t\t\tforeach (var property in annotation.Properties) {\n\t\t\t\t\tcommand.Append (property.Key);\n\n\t\t\t\t\tif (property.Value != null) {\n\t\t\t\t\t\tcommand.Append (\" %S \");\n\t\t\t\t\t\targs.Add (property.Value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommand.Append (\" NIL \");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcommand[command.Length - 1] = ')';\n\t\t\t\tcommand.Append (' ');\n\n\t\t\t\tadded++;\n\t\t\t}\n\n\t\t\tif (added > 0)\n\t\t\t\tcommand[command.Length - 1] = ')';\n\t\t\telse\n\t\t\t\tcommand.Length = length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Formats the array of indexes as a string suitable for use with IMAP commands.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"engine\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"builder\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// One or more of the indexes has a negative value.\n\t\t/// </exception>\n\t\tpublic static void FormatIndexSet (ImapEngine engine, StringBuilder builder, IList<int> indexes)\n\t\t{\n\t\t\tif (engine == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (engine));\n\n\t\t\tif (builder == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (builder));\n\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No indexes were specified.\", nameof (indexes));\n\n\t\t\tint index = 0;\n\n\t\t\twhile (index < indexes.Count) {\n\t\t\t\tif (indexes[index] < 0)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the indexes is negative.\", nameof (indexes));\n\n\t\t\t\tint begin = indexes[index];\n\t\t\t\tint end = indexes[index];\n\t\t\t\tint i = index + 1;\n\n\t\t\t\tif (i < indexes.Count) {\n\t\t\t\t\tif (indexes[i] == end + 1) {\n\t\t\t\t\t\tend = indexes[i++];\n\n\t\t\t\t\t\twhile (i < indexes.Count && indexes[i] == end + 1) {\n\t\t\t\t\t\t\tend++;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (indexes[i] == end - 1 && engine.QuirksMode != ImapQuirksMode.hMailServer) {\n\t\t\t\t\t\tend = indexes[i++];\n\n\t\t\t\t\t\twhile (i < indexes.Count && indexes[i] == end - 1) {\n\t\t\t\t\t\t\tend--;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (index > 0)\n\t\t\t\t\tbuilder.Append (',');\n\n\t\t\t\tbuilder.Append ((begin + 1).ToString (CultureInfo.InvariantCulture));\n\n\t\t\t\tif (begin != end) {\n\t\t\t\t\tbuilder.Append (':');\n\t\t\t\t\tbuilder.Append ((end + 1).ToString (CultureInfo.InvariantCulture));\n\t\t\t\t}\n\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Formats the array of indexes as a string suitable for use with IMAP commands.\n\t\t/// </summary>\n\t\t/// <returns>The index set.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"indexes\">The indexes.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"engine\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"indexes\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// One or more of the indexes has a negative value.\n\t\t/// </exception>\n\t\tpublic static string FormatIndexSet (ImapEngine engine, IList<int> indexes)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tFormatIndexSet (engine, builder, indexes);\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses an untagged ID response.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\tstatic void ParseImplementation (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ID\", \"{0}\");\n\t\t\tvar token = engine.ReadToken (ic.CancellationToken);\n\t\t\tImapImplementation implementation;\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\n\t\t\timplementation = new ImapImplementation ();\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tvar property = ReadStringToken (engine, format, ic.CancellationToken);\n\t\t\t\tvar value = ReadNStringToken (engine, format, false, ic.CancellationToken);\n\n\t\t\t\timplementation.Properties[property] = value;\n\n\t\t\t\ttoken = engine.PeekToken (ic.CancellationToken);\n\t\t\t}\n\n\t\t\tic.UserData = implementation;\n\n\t\t\t// read the ')' token\n\t\t\tengine.ReadToken (ic.CancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously parses an untagged ID response.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\tstatic async Task ParseImplementationAsync (ImapEngine engine, ImapCommand ic)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ID\", \"{0}\");\n\t\t\tvar token = await engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\tImapImplementation implementation;\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\timplementation = new ImapImplementation ();\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tvar property = await ReadStringTokenAsync (engine, format, ic.CancellationToken).ConfigureAwait (false);\n\t\t\t\tvar value = await ReadNStringTokenAsync (engine, format, false, ic.CancellationToken).ConfigureAwait (false);\n\n\t\t\t\timplementation.Properties[property] = value;\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tic.UserData = implementation;\n\n\t\t\t// read the ')' token\n\t\t\tawait engine.ReadTokenAsync (ic.CancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an untagged ID response.\n\t\t/// </summary>\n\t\t/// <returns>An asynchronous task.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <param name=\"doAsync\">Whether or not asynchronous IO methods should be used.</param>\n\t\tpublic static Task UntaggedIdHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseImplementationAsync (engine, ic);\n\n\t\t\tParseImplementation (engine, ic);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Canonicalize the name of the mailbox.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Canonicalizes the name of the mailbox by replacing various\n\t\t/// capitalizations of \"INBOX\" with the literal \"INBOX\" string.\n\t\t/// </remarks>\n\t\t/// <returns>The mailbox name.</returns>\n\t\t/// <param name=\"mailboxName\">The encoded mailbox name.</param>\n\t\t/// <param name=\"directorySeparator\">The directory separator.</param>\n\t\tpublic static string CanonicalizeMailboxName (string mailboxName, char directorySeparator)\n\t\t{\n\t\t\tif (!mailboxName.StartsWith (\"INBOX\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\treturn mailboxName;\n\n\t\t\tif (mailboxName.Length > InboxLength && mailboxName[InboxLength] == directorySeparator)\n\t\t\t\treturn \"INBOX\" + mailboxName.Substring (InboxLength);\n\n\t\t\tif (mailboxName.Length == InboxLength)\n\t\t\t\treturn \"INBOX\";\n\n\t\t\treturn mailboxName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified mailbox is the Inbox.\n\t\t/// </summary>\n\t\t/// <returns><see langword=\"true\" /> if the specified mailbox name is the Inbox; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"mailboxName\">The mailbox name.</param>\n\t\tpublic static bool IsInbox (string mailboxName)\n\t\t{\n\t\t\treturn string.Compare (mailboxName, \"INBOX\", StringComparison.OrdinalIgnoreCase) == 0;\n\t\t}\n\n\t\tstatic string ReadFolderName (ImapEngine engine, char delim, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (ImapStream.AtomSpecials, cancellationToken);\n\t\t\tstring encodedName;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tencodedName = engine.ReadLiteral (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tencodedName = (string) token.Value;\n\n\t\t\t\t// Note: Exchange (Office365 and potentially 2016/2019/other versions) has a bug where it doesn't quote folder names that contain CTRL characters (including tab).\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/945 for details.\n\t\t\t\tif (token.Type == ImapTokenType.Atom && engine.QuirksMode == ImapQuirksMode.Exchange) {\n\t\t\t\t\tvar line = engine.ReadLine (cancellationToken);\n\n\t\t\t\t\t// unget the \\r\\n sequence\n\t\t\t\t\tengine.UngetToken (ImapToken.Eoln);\n\n\t\t\t\t\tencodedName += line;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t// Note: according to rfc3501, section 4.5, NIL is acceptable as a mailbox name.\n\t\t\t\treturn \"NIL\";\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\treturn encodedName.TrimEnd (delim);\n\t\t}\n\n\t\tstatic async Task<string> ReadFolderNameAsync (ImapEngine engine, char delim, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\t\t\tstring encodedName;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tencodedName = await engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tencodedName = (string) token.Value;\n\n\t\t\t\t// Note: Exchange (Office365 and potentially 2016/2019/other versions) has a bug where it doesn't quote folder names that contain CTRL characters (including tab).\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/945 for details.\n\t\t\t\tif (token.Type == ImapTokenType.Atom && engine.QuirksMode == ImapQuirksMode.Exchange) {\n\t\t\t\t\tvar line = await engine.ReadLineAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t// unget the \\r\\n sequence\n\t\t\t\t\tengine.UngetToken (ImapToken.Eoln);\n\n\t\t\t\t\tencodedName += line;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t// Note: according to rfc3501, section 4.5, NIL is acceptable as a mailbox name.\n\t\t\t\treturn \"NIL\";\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\treturn encodedName.TrimEnd (delim);\n\t\t}\n\n\t\tstatic void AddFolderAttribute (ref FolderAttributes attrs, string atom)\n\t\t{\n\t\t\tif (atom.Equals (\"\\\\noinferiors\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.NoInferiors;\n\t\t\telse if (atom.Equals (\"\\\\noselect\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.NoSelect;\n\t\t\telse if (atom.Equals (\"\\\\marked\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Marked;\n\t\t\telse if (atom.Equals (\"\\\\unmarked\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Unmarked;\n\t\t\telse if (atom.Equals (\"\\\\nonexistent\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.NonExistent;\n\t\t\telse if (atom.Equals (\"\\\\subscribed\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Subscribed;\n\t\t\telse if (atom.Equals (\"\\\\remote\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Remote;\n\t\t\telse if (atom.Equals (\"\\\\haschildren\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.HasChildren;\n\t\t\telse if (atom.Equals (\"\\\\hasnochildren\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.HasNoChildren;\n\t\t\telse if (atom.Equals (\"\\\\all\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.All;\n\t\t\telse if (atom.Equals (\"\\\\archive\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Archive;\n\t\t\telse if (atom.Equals (\"\\\\drafts\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Drafts;\n\t\t\telse if (atom.Equals (\"\\\\flagged\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Flagged;\n\t\t\telse if (atom.Equals (\"\\\\important\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Important;\n\t\t\telse if (atom.Equals (\"\\\\junk\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Junk;\n\t\t\telse if (atom.Equals (\"\\\\sent\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Sent;\n\t\t\telse if (atom.Equals (\"\\\\trash\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Trash;\n\t\t\t// XLIST flags:\n\t\t\telse if (atom.Equals (\"\\\\allmail\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.All;\n\t\t\telse if (atom.Equals (\"\\\\inbox\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Inbox;\n\t\t\telse if (atom.Equals (\"\\\\spam\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Junk;\n\t\t\telse if (atom.Equals (\"\\\\starred\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tattrs |= FolderAttributes.Flagged;\n\t\t}\n\n\t\tstatic void AddFolder (ImapEngine engine, List<ImapFolder>? list, ImapFolder? folder, string encodedName, char delim, FolderAttributes attrs, bool isLsub, bool returnsSubscribed)\n\t\t{\n\t\t\tif (folder != null || engine.TryGetCachedFolder (encodedName, out folder)) {\n\t\t\t\tif ((attrs & FolderAttributes.NonExistent) != 0) {\n\t\t\t\t\tfolder.UnsetPermanentFlags ();\n\t\t\t\t\tfolder.UnsetAcceptedFlags ();\n\t\t\t\t\tfolder.UpdateUidNext (UniqueId.Invalid);\n\t\t\t\t\tfolder.UpdateHighestModSeq (0);\n\t\t\t\t\tfolder.UpdateUidValidity (0);\n\t\t\t\t\tfolder.UpdateUnread (0);\n\t\t\t\t}\n\n\t\t\t\tif (isLsub) {\n\t\t\t\t\t// Note: merge all pre-existing attributes since the LSUB response will not contain them\n\t\t\t\t\tattrs |= folder.Attributes | FolderAttributes.Subscribed;\n\t\t\t\t} else {\n\t\t\t\t\t// Note: only merge the SPECIAL-USE and \\Subscribed attributes for a LIST command\n\t\t\t\t\tattrs |= folder.Attributes & SpecialUseAttributes;\n\n\t\t\t\t\t// Note: only merge \\Subscribed if the LIST command isn't expected to include it\n\t\t\t\t\tif (!returnsSubscribed)\n\t\t\t\t\t\tattrs |= folder.Attributes & FolderAttributes.Subscribed;\n\t\t\t\t}\n\n\t\t\t\tfolder.UpdateAttributes (attrs);\n\t\t\t} else {\n\t\t\t\tfolder = engine.CreateImapFolder (encodedName, attrs, delim);\n\t\t\t\tengine.CacheFolder (folder);\n\n\t\t\t\tif (list == null)\n\t\t\t\t\tengine.OnFolderCreated (folder);\n\t\t\t}\n\n\t\t\t// Note: list will be null if this is an unsolicited LIST response due to an active NOTIFY request\n\t\t\tlist?.Add (folder);\n\t\t}\n\n\t\tstatic void ProcessListExtensionProperty (ImapEngine engine, ref ImapFolder? folder, string encodedName, char delim, FolderAttributes attrs, string property, string? value)\n\t\t{\n\t\t\tif (property.Equals (\"OLDNAME\", StringComparison.OrdinalIgnoreCase) && value != null) {\n\t\t\t\tvar oldEncodedName = value.TrimEnd (delim);\n\n\t\t\t\tif (engine.FolderCache.TryGetValue (oldEncodedName, out ImapFolder? oldFolder)) {\n\t\t\t\t\tengine.FolderCache.Remove (oldEncodedName);\n\t\t\t\t\tengine.FolderCache[encodedName] = oldFolder;\n\t\t\t\t\toldFolder.OnRenamed (encodedName, delim, attrs);\n\t\t\t\t\tfolder = oldFolder;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic char ParseFolderSeparator (ImapToken token, string format)\n\t\t{\n\t\t\tif (token.Type == ImapTokenType.QString) {\n\t\t\t\tvar qstring = (string) token.Value;\n\n\t\t\t\treturn qstring.Length > 0 ? qstring[0] : '\\0';\n\t\t\t} else if (token.Type == ImapTokenType.Nil) {\n\t\t\t\treturn '\\0';\n\t\t\t} else {\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses an untagged LIST or LSUB response.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"list\">The list of folders to be populated.</param>\n\t\t/// <param name=\"isLsub\"><see langword=\"true\" /> if it is an LSUB response; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"returnsSubscribed\"><see langword=\"true\" /> if the LIST response is expected to return \\Subscribed flags; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static void ParseFolderList (ImapEngine engine, List<ImapFolder>? list, bool isLsub, bool returnsSubscribed, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, isLsub ? \"LSUB\" : \"LIST\", \"{0}\");\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tvar attrs = FolderAttributes.None;\n\t\t\tImapFolder? folder = null;\n\t\t\tstring encodedName;\n\t\t\tchar delim;\n\n\t\t\t// parse the folder attributes list\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\twhile (token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.Atom) {\n\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\tAddFolderAttribute (ref attrs, atom);\n\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\t\t\t}\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\t// parse the path delimiter\n\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\tdelim = ParseFolderSeparator (token, format);\n\n\t\t\tencodedName = ReadFolderName (engine, delim, format, cancellationToken);\n\n\t\t\tif (IsInbox (encodedName))\n\t\t\t\tattrs |= FolderAttributes.Inbox;\n\n\t\t\t// peek at the next token to see if we have a LIST extension\n\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t// read the '(' token\n\t\t\t\tengine.ReadToken (cancellationToken);\n\n\t\t\t\tdo {\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// A LIST extension (rfc5258).\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, format, token);\n\n\t\t\t\t\tvar property = (string) token.Value;\n\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\tvar value = ReadNStringToken (engine, format, false, cancellationToken);\n\n\t\t\t\t\t\tProcessListExtensionProperty (engine, ref folder, encodedName, delim, attrs, property, value);\n\t\t\t\t\t} while (true);\n\t\t\t\t} while (true);\n\t\t\t} else {\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Eoln, format, token);\n\t\t\t}\n\n\t\t\tAddFolder (engine, list, folder, encodedName, delim, attrs, isLsub, returnsSubscribed);\n\t\t}\n\n\n\t\t/// <summary>\n\t\t/// Asynchronously parses an untagged LIST or LSUB response.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"list\">The list of folders to be populated.</param>\n\t\t/// <param name=\"isLsub\"><see langword=\"true\" /> if it is an LSUB response; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"returnsSubscribed\"><see langword=\"true\" /> if the LIST response is expected to return \\Subscribed flags; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task ParseFolderListAsync (ImapEngine engine, List<ImapFolder>? list, bool isLsub, bool returnsSubscribed, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, isLsub ? \"LSUB\" : \"LIST\", \"{0}\");\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tvar attrs = FolderAttributes.None;\n\t\t\tImapFolder? folder = null;\n\t\t\tstring encodedName;\n\t\t\tchar delim;\n\n\t\t\t// parse the folder attributes list\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\twhile (token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.Atom) {\n\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\tAddFolderAttribute (ref attrs, atom);\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\t// parse the path delimiter\n\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tdelim = ParseFolderSeparator (token, format);\n\n\t\t\tencodedName = await ReadFolderNameAsync (engine, delim, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (IsInbox (encodedName))\n\t\t\t\tattrs |= FolderAttributes.Inbox;\n\n\t\t\t// peek at the next token to see if we have a LIST extension\n\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t// read the '(' token\n\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// A LIST extension (rfc5258).\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Atom, ImapTokenType.QString, format, token);\n\n\t\t\t\t\tvar property = (string) token.Value;\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\tvar value = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tProcessListExtensionProperty (engine, ref folder, encodedName, delim, attrs, property, value);\n\t\t\t\t\t} while (true);\n\t\t\t\t} while (true);\n\t\t\t} else {\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.Eoln, format, token);\n\t\t\t}\n\n\t\t\tAddFolder (engine, list, folder, encodedName, delim, attrs, isLsub, returnsSubscribed);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an untagged LIST or LSUB response.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <param name=\"doAsync\">Whether or not asynchronous IO methods should be used.</param>\n\t\tpublic static Task UntaggedListHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar list = (List<ImapFolder>) ic.UserData!;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseFolderListAsync (engine, list, ic.Lsub, ic.ListReturnsSubscribed, ic.CancellationToken);\n\n\t\t\tParseFolderList (engine, list, ic.Lsub, ic.ListReturnsSubscribed, ic.CancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses an untagged METADATA response.\n\t\t/// </summary>\n\t\t/// <returns>The encoded name of the folder that the metadata belongs to.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"metadata\">The metadata collection to be populated.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static void ParseMetadata (ImapEngine engine, MetadataCollection metadata, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"METADATA\", \"{0}\");\n\t\t\tvar encodedName = ReadStringToken (engine, format, cancellationToken);\n\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tvar tag = ReadStringToken (engine, format, cancellationToken);\n\t\t\t\tvar value = ReadStringToken (engine, format, cancellationToken);\n\n\t\t\t\tmetadata.Add (new Metadata (MetadataTag.Create (tag), value) { EncodedName = encodedName });\n\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\t// read the closing paren\n\t\t\tengine.ReadToken (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously parses an untagged METADATA response.\n\t\t/// </summary>\n\t\t/// <returns>The encoded name of the folder that the metadata belongs to.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"metadata\">The metadata collection to be populated.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task ParseMetadataAsync (ImapEngine engine, MetadataCollection metadata, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"METADATA\", \"{0}\");\n\t\t\tvar encodedName = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tvar tag = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\tvar value = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tmetadata.Add (new Metadata (MetadataTag.Create (tag), value) { EncodedName = encodedName });\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\t// read the closing paren\n\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an untagged METADATA response.\n\t\t/// </summary>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <param name=\"doAsync\">Whether or not asynchronous IO methods should be used.</param>\n\t\tpublic static Task UntaggedMetadataHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar metadata = (MetadataCollection) ic.UserData!;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseMetadataAsync (engine, metadata, ic.CancellationToken);\n\n\t\t\tParseMetadata (engine, metadata, ic.CancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tinternal static string ReadStringToken (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\treturn engine.ReadLiteral (cancellationToken);\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\treturn (string) token.Value;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\t\t}\n\n\t\tinternal static async ValueTask<string> ReadStringTokenAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\treturn await engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\treturn (string) token.Value;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\t\t}\n\n\t\tinternal static string? ReadNStringToken (ImapEngine engine, string format, bool rfc2047, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tstring value;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tvalue = engine.ReadLiteral (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\tif (rfc2047)\n\t\t\t\treturn Rfc2047.DecodeText (TextEncodings.UTF8.GetBytes (value));\n\n\t\t\treturn value;\n\t\t}\n\n\t\tinternal static async ValueTask<string?> ReadNStringTokenAsync (ImapEngine engine, string format, bool rfc2047, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tstring value;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tvalue = await engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\tif (rfc2047)\n\t\t\t\treturn Rfc2047.DecodeText (TextEncodings.UTF8.GetBytes (value));\n\n\t\t\treturn value;\n\t\t}\n\n\t\tstatic uint ParseNumberToken (ImapToken token, string format)\n\t\t{\n\t\t\t// Note: this is a work-around for broken IMAP servers that return negative integer values for things\n\t\t\t// like octet counts and line counts.\n\t\t\tif (token.Type == ImapTokenType.Atom) {\n\t\t\t\tvar atom = (string) token.Value;\n\n\t\t\t\tif (atom.Length > 0 && atom[0] == '-') {\n\t\t\t\t\tif (!int.TryParse (atom, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out _))\n\t\t\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\n\t\t\t\t\t// Note: since Octets & Lines are the only 2 values this method is responsible for parsing,\n\t\t\t\t\t// it seems the only sane value to return would be 0.\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ImapEngine.ParseNumber (token, false, format, token);\n\t\t}\n\n\t\tstatic uint ReadNumber (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\treturn ParseNumberToken (token, format);\n\t\t}\n\n\t\tstatic async ValueTask<uint> ReadNumberAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseNumberToken (token, format);\n\t\t}\n\n\t\tstatic bool NeedsQuoting (string value)\n\t\t{\n\t\t\tfor (int i = 0; i < value.Length; i++) {\n\t\t\t\tif (value[i] > 127 || char.IsControl (value[i]))\n\t\t\t\t\treturn true;\n\n\t\t\t\tif (QuotedSpecials.IndexOf (value[i]) != -1)\n\t\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn value.Length == 0;\n\t\t}\n\n\t\tstatic void ParseParameterList (StringBuilder builder, ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tvar name = ReadStringToken (engine, format, cancellationToken);\n\n\t\t\t\t// Note: technically, the value should also be a 'string' token and not an 'nstring',\n\t\t\t\t// but issue #124 reveals a server that is sending NIL for boundary values.\n\t\t\t\tvar value = ReadNStringToken (engine, format, false, cancellationToken) ?? string.Empty;\n\n\t\t\t\tbuilder.Append (\"; \").Append (name).Append ('=');\n\n\t\t\t\tif (NeedsQuoting (value))\n\t\t\t\t\tMimeUtils.AppendQuoted (builder, value);\n\t\t\t\telse\n\t\t\t\t\tbuilder.Append (value);\n\t\t\t} while (true);\n\n\t\t\t// read the ')'\n\t\t\tengine.ReadToken (cancellationToken);\n\t\t}\n\n\t\tstatic async Task ParseParameterListAsync (StringBuilder builder, ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tvar name = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// Note: technically, the value should also be a 'string' token and not an 'nstring',\n\t\t\t\t// but issue #124 reveals a server that is sending NIL for boundary values.\n\t\t\t\tvar value = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false) ?? string.Empty;\n\n\t\t\t\tbuilder.Append (\"; \").Append (name).Append ('=');\n\n\t\t\t\tif (NeedsQuoting (value))\n\t\t\t\t\tMimeUtils.AppendQuoted (builder, value);\n\t\t\t\telse\n\t\t\t\t\tbuilder.Append (value);\n\t\t\t} while (true);\n\n\t\t\t// read the ')'\n\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t//static readonly string[] MediaTypes = new string[] { \"text\", \"application\", \"audio\", \"image\", \"message\", \"multipart\", \"video\" };\n\n\t\tstatic bool IsMediaTypeWithDefaultSubtype (string type, [NotNullWhen (true)] out string? subtype)\n\t\t{\n\t\t\tif (type.Equals (\"text\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tsubtype = \"plain\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (type.Equals (\"application\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tsubtype = \"octet-stream\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (type.Equals (\"multipart\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tsubtype = \"mixed\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Note: if we ever decide to uncomment this, we'll *probably* have to modify ParseBodyPartAsync() unless\n\t\t\t// we want it to construct a BodyPartMessage. Most likely this will depend on an actual test-case to know\n\t\t\t// what the \"correct\" behavior should be.\n\t\t\t//if (type.Equals (\"message\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t//\tsubtype = \"rfc822\";\n\t\t\t//\treturn true;\n\t\t\t//}\n\n\t\t\tsubtype = null;\n\t\t\treturn false;\n\t\t}\n\n\t\tstatic ContentType ParseContentType (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar type = ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\tvar token = engine.PeekToken (cancellationToken);\n\t\t\tstring? subtype;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen || token.Type == ImapTokenType.Nil) {\n\t\t\t\t// Note: work around broken IMAP server implementations...\n\t\t\t\tif (type == null) {\n\t\t\t\t\tif (token.Type == ImapTokenType.Nil) {\n\t\t\t\t\t\t// The type and subtype tokens are both NIL. We probably got something like:\n\t\t\t\t\t\t// (NIL NIL NIL NIL NIL \"7BIT\" 0 NIL NIL NIL NIL)\n\t\t\t\t\t\t// Consume the NIL subtype token.\n\t\t\t\t\t\tengine.ReadToken (cancellationToken);\n\t\t\t\t\t}\n\n\t\t\t\t\ttype = \"application\";\n\t\t\t\t\tsubtype = \"octet-stream\";\n\t\t\t\t} else {\n\t\t\t\t\t// Note: In some IMAP server implementations, such as the one found in\n\t\t\t\t\t// https://github.com/jstedfast/MailKit/issues/371, if the server comes\n\t\t\t\t\t// across something like \"Content-Type: X-ZIP\", it will only send an\n\t\t\t\t\t// empty string as the media-type.\n\t\t\t\t\t//\n\t\t\t\t\t// e.g. ( \"X-ZIP\" NIL ...) or ( \"PLAIN\" (\"CHARSET\" \"US-ASCII\") ...)\n\t\t\t\t\t//\n\t\t\t\t\t// Take special note of the leading <SPACE> character after the '('.\n\t\t\t\t\tif (!IsMediaTypeWithDefaultSubtype (type, out subtype)) {\n\t\t\t\t\t\tsubtype = type;\n\t\t\t\t\t\ttype = \"application\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttype ??= \"application\";\n\t\t\t\tsubtype = ReadStringToken (engine, format, cancellationToken);\n\t\t\t}\n\n\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn new ContentType (type, subtype);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbuilder.Append (type);\n\t\t\tbuilder.Append ('/');\n\t\t\tbuilder.Append (subtype);\n\n\t\t\tParseParameterList (builder, engine, format, cancellationToken);\n\n\t\t\tif (!ContentType.TryParse (builder.ToString (), out var contentType))\n\t\t\t\tcontentType = new ContentType (type, subtype);\n\n\t\t\treturn contentType;\n\t\t}\n\n\t\tstatic async Task<ContentType> ParseContentTypeAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar type = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\tvar token = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tstring? subtype;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen || token.Type == ImapTokenType.Nil) {\n\t\t\t\t// Note: work around broken IMAP server implementations...\n\t\t\t\tif (type == null) {\n\t\t\t\t\tif (token.Type == ImapTokenType.Nil) {\n\t\t\t\t\t\t// The type and subtype tokens are both NIL. We probably got something like:\n\t\t\t\t\t\t// (NIL NIL NIL NIL NIL \"7BIT\" 0 NIL NIL NIL NIL)\n\t\t\t\t\t\t// Consume the NIL subtype token.\n\t\t\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t}\n\n\t\t\t\t\ttype = \"application\";\n\t\t\t\t\tsubtype = \"octet-stream\";\n\t\t\t\t} else {\n\t\t\t\t\t// Note: In some IMAP server implementations, such as the one found in\n\t\t\t\t\t// https://github.com/jstedfast/MailKit/issues/371, if the server comes\n\t\t\t\t\t// across something like \"Content-Type: X-ZIP\", it will only send an\n\t\t\t\t\t// empty string as the media-type.\n\t\t\t\t\t//\n\t\t\t\t\t// e.g. ( \"X-ZIP\" NIL ...) or ( \"PLAIN\" (\"CHARSET\" \"US-ASCII\") ...)\n\t\t\t\t\t//\n\t\t\t\t\t// Take special note of the leading <SPACE> character after the '('.\n\t\t\t\t\tif (!IsMediaTypeWithDefaultSubtype (type, out subtype)) {\n\t\t\t\t\t\tsubtype = type;\n\t\t\t\t\t\ttype = \"application\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttype ??= \"application\";\n\t\t\t\tsubtype = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn new ContentType (type, subtype);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbuilder.Append (type);\n\t\t\tbuilder.Append ('/');\n\t\t\tbuilder.Append (subtype);\n\n\t\t\tawait ParseParameterListAsync (builder, engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (!ContentType.TryParse (builder.ToString (), out var contentType))\n\t\t\t\tcontentType = new ContentType (type, subtype);\n\n\t\t\treturn contentType;\n\t\t}\n\n\t\tstatic ContentDisposition? ParseContentDisposition (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\t// body-fld-dsp    = \"(\" string SP body-fld-param \")\" / nil\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn null;\n\n\t\t\tif (token.Type != ImapTokenType.OpenParen) {\n\t\t\t\t// Note: this is a work-around for issue #919 where Exchange sends `\"inline\"` instead of `(\"inline\" NIL)`\n\t\t\t\tif (token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.QString)\n\t\t\t\t\treturn new ContentDisposition ((string) token.Value);\n\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\t// Exchange bug: ... (NIL NIL) ...\n\t\t\tvar dsp = ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbool isNil = false;\n\n\t\t\t// Note: These are work-arounds for some bugs in some mail clients that\n\t\t\t// either leave out the disposition value or quote it.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/486 for details.\n\t\t\tif (string.IsNullOrEmpty (dsp))\n\t\t\t\tbuilder.Append (ContentDisposition.Attachment);\n\t\t\telse\n\t\t\t\tbuilder.Append (dsp!.Trim ('\"'));\n\n\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\tParseParameterList (builder, engine, format, cancellationToken);\n\t\t\telse if (token.Type != ImapTokenType.Nil)\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\telse\n\t\t\t\tisNil = true;\n\n\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\tif (dsp == null && isNil)\n\t\t\t\treturn null;\n\n\t\t\tContentDisposition.TryParse (builder.ToString (), out var disposition);\n\n\t\t\treturn disposition;\n\t\t}\n\n\t\tstatic async Task<ContentDisposition?> ParseContentDispositionAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\t// body-fld-dsp    = \"(\" string SP body-fld-param \")\" / nil\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn null;\n\n\t\t\tif (token.Type != ImapTokenType.OpenParen) {\n\t\t\t\t// Note: this is a work-around for issue #919 where Exchange sends `\"inline\"` instead of `(\"inline\" NIL)`\n\t\t\t\tif (token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.QString)\n\t\t\t\t\treturn new ContentDisposition ((string) token.Value);\n\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\t// Exchange bug: ... (NIL NIL) ...\n\t\t\tvar dsp = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbool isNil = false;\n\n\t\t\t// Note: These are work-arounds for some bugs in some mail clients that\n\t\t\t// either leave out the disposition value or quote it.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/486 for details.\n\t\t\tif (string.IsNullOrEmpty (dsp))\n\t\t\t\tbuilder.Append (ContentDisposition.Attachment);\n\t\t\telse\n\t\t\t\tbuilder.Append (dsp!.Trim ('\"'));\n\n\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\tawait ParseParameterListAsync (builder, engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\telse if (token.Type != ImapTokenType.Nil)\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\telse\n\t\t\t\tisNil = true;\n\n\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\tif (dsp == null && isNil)\n\t\t\t\treturn null;\n\n\t\t\tContentDisposition.TryParse (builder.ToString (), out var disposition);\n\n\t\t\treturn disposition;\n\t\t}\n\n\t\tstatic string[]? ParseContentLanguage (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tvar languages = new List<string> ();\n\t\t\tstring? language;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tlanguage = engine.ReadLiteral (cancellationToken);\n\t\t\t\tlanguages.Add (language);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tlanguage = (string) token.Value;\n\t\t\t\tlanguages.Add (language);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tcase ImapTokenType.OpenParen:\n\t\t\t\tdo {\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Note: Some broken IMAP servers send `NIL` tokens in this list. Just ignore them.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/953\n\t\t\t\t\tlanguage = ReadNStringToken (engine, format, false, cancellationToken);\n\n\t\t\t\t\tif (language != null)\n\t\t\t\t\t\tlanguages.Add (language);\n\t\t\t\t} while (true);\n\n\t\t\t\t// read the ')'\n\t\t\t\tengine.ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\treturn languages.ToArray ();\n\t\t}\n\n\t\tstatic async Task<string[]?> ParseContentLanguageAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tvar languages = new List<string> ();\n\t\t\tstring? language;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tlanguage = await engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tlanguages.Add (language);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tlanguage = (string) token.Value;\n\t\t\t\tlanguages.Add (language);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tcase ImapTokenType.OpenParen:\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Note: Some broken IMAP servers send `NIL` tokens in this list. Just ignore them.\n\t\t\t\t\t//\n\t\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/953\n\t\t\t\t\tlanguage = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (language != null)\n\t\t\t\t\t\tlanguages.Add (language);\n\t\t\t\t} while (true);\n\n\t\t\t\t// read the ')'\n\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\treturn languages.ToArray ();\n\t\t}\n\n\t\tstatic Uri? ParseContentLocation (string? location)\n\t\t{\n\t\t\tif (string.IsNullOrWhiteSpace (location))\n\t\t\t\treturn null;\n\n\t\t\tif (Uri.IsWellFormedUriString (location, UriKind.Absolute))\n\t\t\t\treturn new Uri (location, UriKind.Absolute);\n\n\t\t\tif (Uri.IsWellFormedUriString (location, UriKind.Relative))\n\t\t\t\treturn new Uri (location, UriKind.Relative);\n\n\t\t\treturn null;\n\t\t}\n\n\t\tstatic Uri? ParseContentLocation (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar location = ReadNStringToken (engine, format, false, cancellationToken);\n\n\t\t\treturn ParseContentLocation (location);\n\t\t}\n\n\t\tstatic async Task<Uri?> ParseContentLocationAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar location = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseContentLocation (location);\n\t\t}\n\n\t\tstatic void SkipBodyExtension (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.OpenParen:\n\t\t\t\tdo {\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tSkipBodyExtension (engine, format, cancellationToken);\n\t\t\t\t} while (true);\n\n\t\t\t\t// read the ')'\n\t\t\t\tengine.ReadToken (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tengine.ReadLiteral (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task SkipBodyExtensionAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.OpenParen:\n\t\t\t\tdo {\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tawait SkipBodyExtensionAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} while (true);\n\n\t\t\t\t// read the ')'\n\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tawait engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\t\t}\n\n\t\tstatic BodyPart ParseMultipart (ImapEngine engine, string format, string path, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar prefix = path.Length > 0 ? path + \".\" : string.Empty;\n\t\t\tvar bodyParts = new BodyPartCollection ();\n\t\t\tImapToken token;\n\t\t\tint index = 1;\n\n\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\tif (token.Type != ImapTokenType.Nil) {\n\t\t\t\tdo {\n\t\t\t\t\tvar part = ParseBody (engine, format, prefix + index, cancellationToken);\n\n\t\t\t\t\tif (part != null)\n\t\t\t\t\t\tbodyParts.Add (part);\n\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\t\tindex++;\n\t\t\t\t} while (token.Type == ImapTokenType.OpenParen);\n\t\t\t} else {\n\t\t\t\t// Note: Sometimes, when a multipart contains no children, IMAP servers (even Dovecot!)\n\t\t\t\t// will reply with a BODYSTRUCTURE that looks like (NIL \"alternative\" (\"boundary\" \"...\n\t\t\t\t// Obviously, this is not a body-type-1part because \"alternative\" is a multipart subtype.\n\t\t\t\t// This suggests that the NIL represents an empty list of children.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1393 for more details.\n\t\t\t\tengine.ReadToken (cancellationToken);\n\t\t\t}\n\n\t\t\tvar subtype = ReadStringToken (engine, format, cancellationToken);\n\t\t\tvar contentType = new ContentType (\"multipart\", subtype);\n\t\t\tvar body = new BodyPartMultipart (contentType, path, bodyParts);\n\n\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapTokenType.Nil, format, token);\n\n\t\t\t\tvar builder = new StringBuilder ();\n\t\t\t\tbuilder.Append (body.ContentType.MediaType);\n\t\t\t\tbuilder.Append ('/');\n\t\t\t\tbuilder.Append (body.ContentType.MediaSubtype);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\tParseParameterList (builder, engine, format, cancellationToken);\n\n\t\t\t\tif (ContentType.TryParse (builder.ToString (), out contentType))\n\t\t\t\t\tbody.ContentType = contentType;\n\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\tif (token.Type == ImapTokenType.QString) {\n\t\t\t\t// Note: This is a work-around for broken Exchange servers.\n\t\t\t\t//\n\t\t\t\t// See https://stackoverflow.com/questions/33481604/mailkit-fetch-unexpected-token-in-imap-response-qstring-multipart-message\n\t\t\t\t// for details.\n\n\t\t\t\t// Read what appears to be a Content-Description.\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\t// Peek ahead at the next token. It has been suggested that this next token seems to be the Content-Language value.\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t} else if (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tbody.ContentDisposition = ParseContentDisposition (engine, format, cancellationToken);\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tbody.ContentLanguage = ParseContentLanguage (engine, format, cancellationToken);\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tbody.ContentLocation = ParseContentLocation (engine, format, cancellationToken);\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tSkipBodyExtension (engine, format, cancellationToken);\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\t// read the ')'\n\t\t\tengine.ReadToken (cancellationToken);\n\n\t\t\treturn body;\n\t\t}\n\n\t\tstatic async Task<BodyPart> ParseMultipartAsync (ImapEngine engine, string format, string path, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar prefix = path.Length > 0 ? path + \".\" : string.Empty;\n\t\t\tvar bodyParts = new BodyPartCollection ();\n\t\t\tImapToken token;\n\t\t\tint index = 1;\n\n\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type != ImapTokenType.Nil) {\n\t\t\t\tdo {\n\t\t\t\t\tvar part = await ParseBodyAsync (engine, format, prefix + index, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (part != null)\n\t\t\t\t\t\tbodyParts.Add (part);\n\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tindex++;\n\t\t\t\t} while (token.Type == ImapTokenType.OpenParen);\n\t\t\t} else {\n\t\t\t\t// Note: Sometimes, when a multipart contains no children, IMAP servers (even Dovecot!)\n\t\t\t\t// will reply with a BODYSTRUCTURE that looks like (NIL \"alternative\" (\"boundary\" \"...\n\t\t\t\t// Obviously, this is not a body-type-1part because \"alternative\" is a multipart subtype.\n\t\t\t\t// This suggests that the NIL represents an empty list of children.\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/1393 for more details.\n\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tvar subtype = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tvar contentType = new ContentType (\"multipart\", subtype);\n\t\t\tvar body = new BodyPartMultipart (contentType, path, bodyParts);\n\n\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapTokenType.Nil, format, token);\n\n\t\t\t\tvar builder = new StringBuilder ();\n\t\t\t\tbuilder.Append (body.ContentType.MediaType);\n\t\t\t\tbuilder.Append ('/');\n\t\t\t\tbuilder.Append (body.ContentType.MediaSubtype);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen)\n\t\t\t\t\tawait ParseParameterListAsync (builder, engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (ContentType.TryParse (builder.ToString (), out contentType))\n\t\t\t\t\tbody.ContentType = contentType;\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tif (token.Type == ImapTokenType.QString) {\n\t\t\t\t// Note: This is a work-around for broken Exchange servers.\n\t\t\t\t//\n\t\t\t\t// See https://stackoverflow.com/questions/33481604/mailkit-fetch-unexpected-token-in-imap-response-qstring-multipart-message\n\t\t\t\t// for details.\n\n\t\t\t\t// Read what appears to be a Content-Description.\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// Peek ahead at the next token. It has been suggested that this next token seems to be the Content-Language value.\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t} else if (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tbody.ContentDisposition = await ParseContentDispositionAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tbody.ContentLanguage = await ParseContentLanguageAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tbody.ContentLocation = await ParseContentLocationAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tawait SkipBodyExtensionAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\t// read the ')'\n\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn body;\n\t\t}\n\n\t\tstatic bool ShouldParseMultipart (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tImapToken nextToken;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Atom: // Note: Technically, we should never get an Atom here, but if we do, we'll treat it as a QString.\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tif (engine.QuirksMode is ImapQuirksMode.GMail or ImapQuirksMode.QQMail or ImapQuirksMode.Yandex && token.Type != ImapTokenType.Literal) {\n\t\t\t\t\t// Note: GMail's IMAP server implementation breaks when it encounters nested multiparts with the same\n\t\t\t\t\t// boundary and returns a BODYSTRUCTURE like the example in https://github.com/jstedfast/MailKit/issues/205\n\t\t\t\t\t// or like the example in https://github.com/jstedfast/MailKit/issues/777. There's also an issue with BODY\n\t\t\t\t\t// responses like the one in https://github.com/jstedfast/MailKit/issues/1841.\n\t\t\t\t\t//\n\t\t\t\t\t// (\"ALTERNATIVE\" (\"BOUNDARY\" \"==alternative_xad5934455aeex\") NIL NIL)\n\t\t\t\t\t// or\n\t\t\t\t\t// (\"RELATED\" NIL (\"ATTACHMENT\" NIL) NIL)\n\t\t\t\t\t// or\n\t\t\t\t\t// (\"ALTERNATIVE\")\n\t\t\t\t\t//\n\t\t\t\t\t// Check if the next token is either a '(', ')' or NIL.\n\t\t\t\t\t//\n\t\t\t\t\t// If it is '(', then that would indicate the start of the Content-Type parameter list.\n\t\t\t\t\t// If it is ')', then that would indicate a BODY response without a Content-Type parameter list.\n\t\t\t\t\t// If it is NIL, then it would signify that the Content-Type has no parameters.\n\t\t\t\t\t//\n\t\t\t\t\t// Note: Yandex also has this problem. See https://github.com/jstedfast/MailKit/issues/1861\n\t\t\t\t\t// As does QQMail: https://github.com/jstedfast/MailKit/issues/1076\n\n\t\t\t\t\t// Peek at the next token to see what we've got. If we get a '(' or NIL, then treat this as a multipart.\n\t\t\t\t\tnextToken = engine.PeekToken (cancellationToken);\n\n\t\t\t\t\tif (nextToken.Type == ImapTokenType.OpenParen || nextToken.Type == ImapTokenType.CloseParen || nextToken.Type == ImapTokenType.Nil) {\n\t\t\t\t\t\t// Unget the multipart subtype.\n\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\t// Now unget a fake NIL token that represents an empty set of children.\n\t\t\t\t\t\tengine.UngetToken (ImapToken.Nil);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall through and treat things normally.\n\t\t\t\t}\n\n\t\t\t\t// We've got a string which normally means it's the first token of a mime-type.\n\t\t\t\tengine.UngetToken (token);\n\t\t\t\treturn false;\n\t\t\tcase ImapTokenType.OpenParen:\n\t\t\t\t// We've got children, so this is definitely a multipart.\n\t\t\t\tengine.UngetToken (token);\n\t\t\t\treturn true;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t// We've got a NIL token. Technically, this is illegal syntax, but we need to be able to handle it.\n\t\t\t\t//\n\t\t\t\t// There are currently 2 known examples of this:\n\t\t\t\t//\n\t\t\t\t// 1. Sometimes, when a multipart contains no children, IMAP servers (even Dovecot!)\n\t\t\t\t// will reply with a BODYSTRUCTURE that looks like (NIL \"alternative\" (\"boundary\" \"...\n\t\t\t\t// Obviously, this is not a body-type-1part because \"alternative\" is a multipart subtype.\n\t\t\t\t// This suggests that the NIL represents an empty list of children.\n\t\t\t\t//\n\t\t\t\t// For an example of this particular case, see https://github.com/jstedfast/MailKit/issues/1393.\n\t\t\t\t//\n\t\t\t\t// 2. There have been several reports of Office365 sending body-type-1parts of the following form:\n\t\t\t\t// (NIL NIL NIL NIL NIL \"7BIT\" 0 NIL NIL NIL NIL)\n\t\t\t\t//\n\t\t\t\t// Presumably this is a text/plain part with no headers?\n\t\t\t\t//\n\t\t\t\t// For examples of this, see:\n\t\t\t\t// https://github.com/jstedfast/MailKit/issues/1415#issuecomment-1206533214 and\n\t\t\t\t// https://github.com/jstedfast/MailKit/issues/1446\n\t\t\t\tnextToken = engine.PeekToken (cancellationToken);\n\n\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\tif (nextToken.Type == ImapTokenType.Nil) {\n\t\t\t\t\t// Looks like we've probably encountered the `(NIL NIL NIL NIL NIL \"7BIT\" 0 NIL NIL NIL NIL)` variant.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Assume (NIL \"alternative\" (\"boundary\" \"...\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\tengine.UngetToken (token);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task<bool> ShouldParseMultipartAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tImapToken nextToken;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Atom: // Note: Technically, we should never get an Atom here, but if we do, we'll treat it as a QString.\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tif (engine.QuirksMode is ImapQuirksMode.GMail or ImapQuirksMode.QQMail or ImapQuirksMode.Yandex && token.Type != ImapTokenType.Literal) {\n\t\t\t\t\t// Note: GMail's IMAP server implementation breaks when it encounters nested multiparts with the same\n\t\t\t\t\t// boundary and returns a BODYSTRUCTURE like the example in https://github.com/jstedfast/MailKit/issues/205\n\t\t\t\t\t// or like the example in https://github.com/jstedfast/MailKit/issues/777. There's also an issue with BODY\n\t\t\t\t\t// responses like the one in https://github.com/jstedfast/MailKit/issues/1841.\n\t\t\t\t\t//\n\t\t\t\t\t// (\"ALTERNATIVE\" (\"BOUNDARY\" \"==alternative_xad5934455aeex\") NIL NIL)\n\t\t\t\t\t// or\n\t\t\t\t\t// (\"RELATED\" NIL (\"ATTACHMENT\" NIL) NIL)\n\t\t\t\t\t// or\n\t\t\t\t\t// (\"ALTERNATIVE\")\n\t\t\t\t\t//\n\t\t\t\t\t// Check if the next token is either a '(', ')' or NIL.\n\t\t\t\t\t//\n\t\t\t\t\t// If it is '(', then that would indicate the start of the Content-Type parameter list.\n\t\t\t\t\t// If it is ')', then that would indicate a BODY response without a Content-Type parameter list.\n\t\t\t\t\t// If it is NIL, then it would signify that the Content-Type has no parameters.\n\t\t\t\t\t//\n\t\t\t\t\t// Note: Yandex also has this problem. See https://github.com/jstedfast/MailKit/issues/1861\n\t\t\t\t\t// As does QQMail: https://github.com/jstedfast/MailKit/issues/1076\n\n\t\t\t\t\t// Peek at the next token to see what we've got. If we get a '(' or NIL, then treat this as a multipart.\n\t\t\t\t\tnextToken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (nextToken.Type == ImapTokenType.OpenParen || nextToken.Type == ImapTokenType.CloseParen || nextToken.Type == ImapTokenType.Nil) {\n\t\t\t\t\t\t// Unget the multipart subtype.\n\t\t\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\t\t\t// Now unget a fake NIL token that represents an empty set of children.\n\t\t\t\t\t\tengine.UngetToken (ImapToken.Nil);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall through and treat things nomrally.\n\t\t\t\t}\n\n\t\t\t\t// We've got a string which normally means it's the first token of a mime-type.\n\t\t\t\tengine.UngetToken (token);\n\t\t\t\treturn false;\n\t\t\tcase ImapTokenType.OpenParen:\n\t\t\t\t// We've got children, so this is definitely a multipart.\n\t\t\t\tengine.UngetToken (token);\n\t\t\t\treturn true;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\t// We've got a NIL token. Technically, this is illegal syntax, but we need to be able to handle it.\n\t\t\t\t//\n\t\t\t\t// There are currently 2 known examples of this:\n\t\t\t\t//\n\t\t\t\t// 1. Sometimes, when a multipart contains no children, IMAP servers (even Dovecot!)\n\t\t\t\t// will reply with a BODYSTRUCTURE that looks like (NIL \"alternative\" (\"boundary\" \"...\n\t\t\t\t// Obviously, this is not a body-type-1part because \"alternative\" is a multipart subtype.\n\t\t\t\t// This suggests that the NIL represents an empty list of children.\n\t\t\t\t//\n\t\t\t\t// For an example of this particular case, see https://github.com/jstedfast/MailKit/issues/1393.\n\t\t\t\t//\n\t\t\t\t// 2. There have been several reports of Office365 sending body-type-1parts of the following form:\n\t\t\t\t// (NIL NIL NIL NIL NIL \"7BIT\" 0 NIL NIL NIL NIL)\n\t\t\t\t//\n\t\t\t\t// Presumably this is a text/plain part with no headers?\n\t\t\t\t//\n\t\t\t\t// For examples of this, see:\n\t\t\t\t// https://github.com/jstedfast/MailKit/issues/1415#issuecomment-1206533214 and\n\t\t\t\t// https://github.com/jstedfast/MailKit/issues/1446\n\t\t\t\tnextToken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tengine.UngetToken (token);\n\n\t\t\t\tif (nextToken.Type == ImapTokenType.Nil) {\n\t\t\t\t\t// Looks like we've probably encountered the `(NIL NIL NIL NIL NIL \"7BIT\" 0 NIL NIL NIL NIL)` variant.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Assume (NIL \"alternative\" (\"boundary\" \"...\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\tengine.UngetToken (token);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tpublic static BodyPart? ParseBody (ImapEngine engine, string format, string path, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn null;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t// Note: If we immediately get a closing ')', then treat it the same as if we had gotten a `NIL` `body` token.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/944 for details.\n\t\t\tif (token.Type == ImapTokenType.CloseParen) {\n\t\t\t\tengine.ReadToken (cancellationToken);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (ShouldParseMultipart (engine, cancellationToken))\n\t\t\t\treturn ParseMultipart (engine, format, path, cancellationToken);\n\n\t\t\tvar type = ParseContentType (engine, format, cancellationToken);\n\t\t\tvar id = ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\tvar desc = ReadNStringToken (engine, format, true, cancellationToken);\n\t\t\t// Note: technically, body-fld-enc, is not allowed to be NIL, but we need to deal with broken servers...\n\t\t\tvar enc = ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\tvar octets = ReadNumber (engine, format, cancellationToken);\n\t\t\tvar isMultipart = false;\n\t\t\tBodyPartBasic body;\n\n\t\t\tif (type.IsMimeType (\"message\", \"rfc822\")) {\n\t\t\t\tvar rfc822 = new BodyPartMessage (type, path);\n\n\t\t\t\t// Note: GMail (and potentially other IMAP servers) will send body-part-basic\n\t\t\t\t// expressions instead of body-part-msg expressions when they encounter\n\t\t\t\t// message/rfc822 MIME parts that are illegally encoded using base64 (or\n\t\t\t\t// quoted-printable?). According to rfc3501, IMAP servers are REQUIRED to\n\t\t\t\t// send body-part-msg expressions for message/rfc822 parts, however, it is\n\t\t\t\t// understandable why GMail (and other IMAP servers?) do what they do in this\n\t\t\t\t// particular case.\n\t\t\t\t//\n\t\t\t\t// For examples, see issue #32 and issue #59.\n\t\t\t\t//\n\t\t\t\t// The workaround is to check for the expected '(' signifying an envelope token.\n\t\t\t\t// If we do not get an '(', then we are likely looking at the Content-MD5 token\n\t\t\t\t// which gets handled below.\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\trfc822.Envelope = ParseEnvelope (engine, cancellationToken);\n\t\t\t\t\trfc822.Body = ParseBody (engine, format, path, cancellationToken);\n\t\t\t\t\trfc822.Lines = ReadNumber (engine, format, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tbody = rfc822;\n\t\t\t} else if (type.IsMimeType (\"text\", \"*\")) {\n\t\t\t\tvar text = new BodyPartText (type, path) {\n\t\t\t\t\tLines = ReadNumber (engine, format, cancellationToken)\n\t\t\t\t};\n\t\t\t\tbody = text;\n\t\t\t} else {\n\t\t\t\tisMultipart = type.IsMimeType (\"multipart\", \"*\");\n\t\t\t\tbody = new BodyPartBasic (type, path);\n\t\t\t}\n\n\t\t\tbody.ContentTransferEncoding = enc;\n\t\t\tbody.ContentDescription = desc;\n\t\t\tbody.ContentId = id;\n\t\t\tbody.Octets = octets;\n\n\t\t\t// if we are parsing a BODYSTRUCTURE, we may get some more tokens before the ')'\n\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\tif (!isMultipart) {\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tbody.ContentMd5 = ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tbody.ContentDisposition = ParseContentDisposition (engine, format, cancellationToken);\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tbody.ContentLanguage = ParseContentLanguage (engine, format, cancellationToken);\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen && token.Type != ImapTokenType.OpenParen) {\n\t\t\t\t\tbody.ContentLocation = ParseContentLocation (engine, format, cancellationToken);\n\t\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tSkipBodyExtension (engine, format, cancellationToken);\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t}\n\n\t\t\t// read the ')'\n\t\t\tengine.ReadToken (cancellationToken);\n\n\t\t\treturn body;\n\t\t}\n\n\t\tpublic static async Task<BodyPart?> ParseBodyAsync (ImapEngine engine, string format, string path, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn null;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t// Note: If we immediately get a closing ')', then treat it the same as if we had gotten a `NIL` `body` token.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/944 for details.\n\t\t\tif (token.Type == ImapTokenType.CloseParen) {\n\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (await ShouldParseMultipartAsync (engine, cancellationToken).ConfigureAwait (false))\n\t\t\t\treturn await ParseMultipartAsync (engine, format, path, cancellationToken).ConfigureAwait (false);\n\n\t\t\tvar type = await ParseContentTypeAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tvar id = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\tvar desc = await ReadNStringTokenAsync (engine, format, true, cancellationToken).ConfigureAwait (false);\n\t\t\t// Note: technically, body-fld-enc, is not allowed to be NIL, but we need to deal with broken servers...\n\t\t\tvar enc = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\tvar octets = await ReadNumberAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tvar isMultipart = false;\n\t\t\tBodyPartBasic body;\n\n\t\t\tif (type.IsMimeType (\"message\", \"rfc822\")) {\n\t\t\t\tvar rfc822 = new BodyPartMessage (type, path);\n\n\t\t\t\t// Note: GMail (and potentially other IMAP servers) will send body-part-basic\n\t\t\t\t// expressions instead of body-part-msg expressions when they encounter\n\t\t\t\t// message/rfc822 MIME parts that are illegally encoded using base64 (or\n\t\t\t\t// quoted-printable?). According to rfc3501, IMAP servers are REQUIRED to\n\t\t\t\t// send body-part-msg expressions for message/rfc822 parts, however, it is\n\t\t\t\t// understandable why GMail (and other IMAP servers?) do what they do in this\n\t\t\t\t// particular case.\n\t\t\t\t//\n\t\t\t\t// For examples, see issue #32 and issue #59.\n\t\t\t\t//\n\t\t\t\t// The workaround is to check for the expected '(' signifying an envelope token.\n\t\t\t\t// If we do not get an '(', then we are likely looking at the Content-MD5 token\n\t\t\t\t// which gets handled below.\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\trfc822.Envelope = await ParseEnvelopeAsync (engine, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\trfc822.Body = await ParseBodyAsync (engine, format, path, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\trfc822.Lines = await ReadNumberAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tbody = rfc822;\n\t\t\t} else if (type.IsMimeType (\"text\", \"*\")) {\n\t\t\t\tvar text = new BodyPartText (type, path) {\n\t\t\t\t\tLines = await ReadNumberAsync (engine, format, cancellationToken).ConfigureAwait (false)\n\t\t\t\t};\n\t\t\t\tbody = text;\n\t\t\t} else {\n\t\t\t\tisMultipart = type.IsMimeType (\"multipart\", \"*\");\n\t\t\t\tbody = new BodyPartBasic (type, path);\n\t\t\t}\n\n\t\t\tbody.ContentTransferEncoding = enc;\n\t\t\tbody.ContentDescription = desc;\n\t\t\tbody.ContentId = id;\n\t\t\tbody.Octets = octets;\n\n\t\t\t// if we are parsing a BODYSTRUCTURE, we may get some more tokens before the ')'\n\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (!isMultipart) {\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tbody.ContentMd5 = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tbody.ContentDisposition = await ParseContentDispositionAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tbody.ContentLanguage = await ParseContentLanguageAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen && token.Type != ImapTokenType.OpenParen) {\n\t\t\t\t\tbody.ContentLocation = await ParseContentLocationAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tawait SkipBodyExtensionAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\t// read the ')'\n\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn body;\n\t\t}\n\n\t\treadonly struct EnvelopeAddress\n\t\t{\n\t\t\tpublic readonly string? Name;\n\t\t\tpublic readonly string? Route;\n\t\t\tpublic readonly string? Mailbox;\n\t\t\tpublic readonly string? Domain;\n\n\t\t\tpublic EnvelopeAddress (string?[] values)\n\t\t\t{\n\t\t\t\tName = values[0];\n\t\t\t\tRoute = values[1];\n\t\t\t\tMailbox = values[2];\n\t\t\t\tDomain = values[3];\n\t\t\t}\n\n\t\t\tpublic bool IsGroupStart {\n\t\t\t\tget { return Name == null && Route == null && Mailbox != null && Domain == null; }\n\t\t\t}\n\n\t\t\tpublic bool IsGroupEnd {\n\t\t\t\tget { return Name == null && Route == null && Mailbox == null && Domain == null; }\n\t\t\t}\n\n\t\t\tpublic MailboxAddress ToMailboxAddress (ImapEngine engine)\n\t\t\t{\n\t\t\t\tif (engine.QuirksMode == ImapQuirksMode.GMail && Name != null && Name[0] == '<' && Name[Name.Length - 1] == '>' && Mailbox != null && Domain == null) {\n\t\t\t\t\t// For whatever reason, GMail seems to sometimes break by reversing the Name and Mailbox tokens.\n\t\t\t\t\t// For an example, see the second error report in https://github.com/jstedfast/MailKit/issues/494\n\t\t\t\t\t// where the Sender: address in the ENVELOPE has the name and address tokens flipped.\n\t\t\t\t\t//\n\t\t\t\t\t// Another example can be seen in https://github.com/jstedfast/MailKit/pull/1319.\n\t\t\t\t\tvar reversed = string.Format (\"{0} {1}\", Mailbox, Name);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn MailboxAddress.Parse (reversed);\n\t\t\t\t\t} catch (ParseException) {\n\t\t\t\t\t\t// fall through to normal processing\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar mailbox = Mailbox;\n\t\t\t\tvar domain = Domain;\n\t\t\t\tstring? name = null;\n\t\t\t\tstring address;\n\n\t\t\t\tif (Name != null)\n\t\t\t\t\tname = Rfc2047.DecodePhrase (TextEncodings.UTF8.GetBytes (Name));\n\n\t\t\t\t// Note: When parsing mailbox addresses w/o a domain, Dovecot will\n\t\t\t\t// use \"MISSING_DOMAIN\" as the domain string to prevent it from\n\t\t\t\t// appearing as a group address in the IMAP ENVELOPE response.\n\t\t\t\tif (domain == \"MISSING_DOMAIN\" || domain == \".MISSING-HOST-NAME.\")\n\t\t\t\t\tdomain = null;\n\t\t\t\telse if (domain != null)\n\t\t\t\t\tdomain = domain.TrimEnd ('>');\n\n\t\t\t\tif (mailbox != null) {\n\t\t\t\t\tmailbox = mailbox.TrimStart ('<');\n\n\t\t\t\t\taddress = domain != null ? mailbox + \"@\" + domain : mailbox;\n\t\t\t\t} else {\n\t\t\t\t\taddress = string.Empty;\n\t\t\t\t}\n\n\t\t\t\tif (Route != null && DomainList.TryParse (Route, out var route))\n\t\t\t\t\treturn new MailboxAddress (name, route, address);\n\n\t\t\t\treturn new MailboxAddress (name, address);\n\t\t\t}\n\n\t\t\tpublic GroupAddress ToGroupAddress (ImapEngine engine)\n\t\t\t{\n\t\t\t\tvar name = string.Empty;\n\n\t\t\t\tif (Mailbox != null)\n\t\t\t\t\tname = Rfc2047.DecodePhrase (TextEncodings.UTF8.GetBytes (Mailbox));\n\n\t\t\t\treturn new GroupAddress (name);\n\t\t\t}\n\t\t}\n\n\t\tstatic bool TryAddEnvelopeAddressToken (ImapToken token, ref int index, string?[] values, bool[] qstrings, string format)\n\t\t{\n\t\t\t// This is a work-around for mail servers which output too many tokens for an ENVELOPE address. In at least 1 case, this happened\n\t\t\t// because the server sent a literal token as the name component and miscalculated the literal length as 38 when it was actually 69\n\t\t\t// (likely using Unicode characters instead of UTF-8 bytes).\n\t\t\t//\n\t\t\t// The work-around is to keep merging tokens at the beginning of the list until we end up with only 4 tokens.\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/1369 for details.\n\t\t\tif (index >= 4) {\n\t\t\t\tif (qstrings[0])\n\t\t\t\t\tvalues[0] = MimeUtils.Quote (values[0]!);\n\t\t\t\tif (qstrings[1])\n\t\t\t\t\tvalues[1] = MimeUtils.Quote (values[1]!);\n\t\t\t\tvalues[0] = values[0] + ' ' + values[1];\n\t\t\t\tqstrings[0] = false;\n\t\t\t\tqstrings[1] = qstrings[2];\n\t\t\t\tvalues[1] = values[2];\n\t\t\t\tqstrings[2] = qstrings[3];\n\t\t\t\tvalues[2] = values[3];\n\t\t\t\tindex = 3;\n\t\t\t}\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\t// Return control to our caller so that it can read the literal token.\n\t\t\t\tqstrings[index] = false;\n\t\t\t\treturn false;\n\t\t\tcase ImapTokenType.QString:\n\t\t\t\tvalues[index] = (string) token.Value;\n\t\t\t\tqstrings[index] = true;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tvalues[index] = (string) token.Value;\n\t\t\t\tqstrings[index] = false;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\tvalues[index] = null;\n\t\t\t\tqstrings[index] = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic EnvelopeAddress ParseEnvelopeAddress (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar values = new string?[4];\n\t\t\tvar qstrings = new bool[4];\n\t\t\tImapToken token;\n\t\t\tint index = 0;\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (!TryAddEnvelopeAddressToken (token, ref index, values, qstrings, format))\n\t\t\t\t\tvalues[index] = engine.ReadLiteral (cancellationToken);\n\n\t\t\t\tindex++;\n\t\t\t} while (true);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\treturn new EnvelopeAddress (values);\n\t\t}\n\n\t\tstatic async Task<EnvelopeAddress> ParseEnvelopeAddressAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar values = new string?[4];\n\t\t\tvar qstrings = new bool[4];\n\t\t\tImapToken token;\n\t\t\tint index = 0;\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (!TryAddEnvelopeAddressToken (token, ref index, values, qstrings, format))\n\t\t\t\t\tvalues[index] = await engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tindex++;\n\t\t\t} while (true);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\treturn new EnvelopeAddress (values);\n\t\t}\n\n\t\tstatic void AddEnvelopeAddress (ImapEngine engine, List<InternetAddressList> stack, ref int sp, EnvelopeAddress address)\n\t\t{\n\t\t\tif (address.IsGroupStart && engine.QuirksMode != ImapQuirksMode.GMail) {\n\t\t\t\tvar group = address.ToGroupAddress (engine);\n\t\t\t\tstack[sp].Add (group);\n\t\t\t\tstack.Add (group.Members);\n\t\t\t\tsp++;\n\t\t\t} else if (address.IsGroupEnd) {\n\t\t\t\tif (sp > 0) {\n\t\t\t\t\tstack.RemoveAt (sp);\n\t\t\t\t\tsp--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\t// Note: We need to do a try/catch around ToMailboxAddress() because some addresses\n\t\t\t\t\t// returned by the IMAP server might be completely horked. For an example, see the\n\t\t\t\t\t// second error report in https://github.com/jstedfast/MailKit/issues/494 where one\n\t\t\t\t\t// of the addresses in the ENVELOPE has the name and address tokens flipped.\n\t\t\t\t\tvar mailbox = address.ToMailboxAddress (engine);\n\t\t\t\t\tstack[sp].Add (mailbox);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void ParseEnvelopeAddressList (InternetAddressList list, ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\tvar stack = new List<InternetAddressList> ();\n\t\t\tint sp = 0;\n\n\t\t\tstack.Add (list);\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Note: As seen in https://github.com/jstedfast/MailKit/issues/991, it seems that SmarterMail IMAP\n\t\t\t\t// servers will sometimes include a NIL address token within the address list. Just ignore it.\n\t\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\t\tvar address = ParseEnvelopeAddress (engine, format, cancellationToken);\n\n\t\t\t\tAddEnvelopeAddress (engine, stack, ref sp, address);\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic async Task ParseEnvelopeAddressListAsync (InternetAddressList list, ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\treturn;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\tvar stack = new List<InternetAddressList> ();\n\t\t\tint sp = 0;\n\n\t\t\tstack.Add (list);\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Note: As seen in https://github.com/jstedfast/MailKit/issues/991, it seems that SmarterMail IMAP\n\t\t\t\t// servers will sometimes include a NIL address token within the address list. Just ignore it.\n\t\t\t\tif (token.Type == ImapTokenType.Nil)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\t\tvar address = await ParseEnvelopeAddressAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tAddEnvelopeAddress (engine, stack, ref sp, address);\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic DateTimeOffset? ParseEnvelopeDate (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tstring value;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tvalue = engine.ReadLiteral (cancellationToken);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\tif (!DateUtils.TryParse (value, out var date))\n\t\t\t\treturn null;\n\n\t\t\treturn date;\n\t\t}\n\n\t\tstatic async Task<DateTimeOffset?> ParseEnvelopeDateAsync (ImapEngine engine, string format, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tstring value;\n\n\t\t\tswitch (token.Type) {\n\t\t\tcase ImapTokenType.Literal:\n\t\t\t\tvalue = await engine.ReadLiteralAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.QString:\n\t\t\tcase ImapTokenType.Atom:\n\t\t\t\tvalue = (string) token.Value;\n\t\t\t\tbreak;\n\t\t\tcase ImapTokenType.Nil:\n\t\t\t\treturn null;\n\t\t\tdefault:\n\t\t\t\tthrow ImapEngine.UnexpectedToken (format, token);\n\t\t\t}\n\n\t\t\tif (!DateUtils.TryParse (value, out var date))\n\t\t\t\treturn null;\n\n\t\t\treturn date;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the ENVELOPE parenthesized list.\n\t\t/// </summary>\n\t\t/// <returns>The envelope.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static Envelope ParseEnvelope (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, \"ENVELOPE\", \"{0}\");\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tstring? nstring;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\tvar envelope = new Envelope ();\n\t\t\tenvelope.Date = ParseEnvelopeDate (engine, format, cancellationToken);\n\t\t\tenvelope.Subject = ReadNStringToken (engine, format, true, cancellationToken);\n\t\t\tParseEnvelopeAddressList (envelope.From, engine, format, cancellationToken);\n\t\t\tParseEnvelopeAddressList (envelope.Sender, engine, format, cancellationToken);\n\t\t\tParseEnvelopeAddressList (envelope.ReplyTo, engine, format, cancellationToken);\n\t\t\tParseEnvelopeAddressList (envelope.To, engine, format, cancellationToken);\n\t\t\tParseEnvelopeAddressList (envelope.Cc, engine, format, cancellationToken);\n\t\t\tParseEnvelopeAddressList (envelope.Bcc, engine, format, cancellationToken);\n\n\t\t\t// Note: Some broken IMAP servers will forget to include the In-Reply-To token (I guess if the header isn't set?).\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/932\n\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tif ((nstring = ReadNStringToken (engine, format, false, cancellationToken)) != null)\n\t\t\t\t\tenvelope.InReplyTo = MimeUtils.EnumerateReferences (nstring).FirstOrDefault ();\n\n\t\t\t\t// Note: Some broken IMAP servers will forget to include the Message-Id token (I guess if the header isn't set?).\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/669\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tif ((nstring = ReadNStringToken (engine, format, false, cancellationToken)) != null) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope.MessageId = MimeUtils.ParseMessageId (nstring);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tenvelope.MessageId = nstring;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\treturn envelope;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the ENVELOPE parenthesized list.\n\t\t/// </summary>\n\t\t/// <returns>The envelope.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task<Envelope> ParseEnvelopeAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tstring format = string.Format (ImapEngine.GenericItemSyntaxErrorFormat, \"ENVELOPE\", \"{0}\");\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tstring? nstring;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, format, token);\n\n\t\t\tvar envelope = new Envelope ();\n\t\t\tenvelope.Date = await ParseEnvelopeDateAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tenvelope.Subject = await ReadNStringTokenAsync (engine, format, true, cancellationToken).ConfigureAwait (false);\n\t\t\tawait ParseEnvelopeAddressListAsync (envelope.From, engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tawait ParseEnvelopeAddressListAsync (envelope.Sender, engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tawait ParseEnvelopeAddressListAsync (envelope.ReplyTo, engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tawait ParseEnvelopeAddressListAsync (envelope.To, engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tawait ParseEnvelopeAddressListAsync (envelope.Cc, engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\tawait ParseEnvelopeAddressListAsync (envelope.Bcc, engine, format, cancellationToken).ConfigureAwait (false);\n\n\t\t\t// Note: Some broken IMAP servers will forget to include the In-Reply-To token (I guess if the header isn't set?).\n\t\t\t//\n\t\t\t// See https://github.com/jstedfast/MailKit/issues/932\n\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\tif ((nstring = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false)) != null)\n\t\t\t\t\tenvelope.InReplyTo = MimeUtils.EnumerateReferences (nstring).FirstOrDefault ();\n\n\t\t\t\t// Note: Some broken IMAP servers will forget to include the Message-Id token (I guess if the header isn't set?).\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/669\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tif (token.Type != ImapTokenType.CloseParen) {\n\t\t\t\t\tif ((nstring = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false)) != null) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope.MessageId = MimeUtils.ParseMessageId (nstring);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tenvelope.MessageId = nstring;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, format, token);\n\n\t\t\treturn envelope;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Formats a flags list suitable for use with the APPEND command.\n\t\t/// </summary>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"builder\">The string builder.</param>\n\t\t/// <param name=\"numKeywords\">The number of keywords.</param>\n\t\tpublic static void FormatFlagsList (StringBuilder builder, MessageFlags flags, int numKeywords)\n\t\t{\n\t\t\tbuilder.Append ('(');\n\n\t\t\tif ((flags & MessageFlags.Answered) != 0)\n\t\t\t\tbuilder.Append (\"\\\\Answered \");\n\t\t\tif ((flags & MessageFlags.Deleted) != 0)\n\t\t\t\tbuilder.Append (\"\\\\Deleted \");\n\t\t\tif ((flags & MessageFlags.Draft) != 0)\n\t\t\t\tbuilder.Append (\"\\\\Draft \");\n\t\t\tif ((flags & MessageFlags.Flagged) != 0)\n\t\t\t\tbuilder.Append (\"\\\\Flagged \");\n\t\t\tif ((flags & MessageFlags.Seen) != 0)\n\t\t\t\tbuilder.Append (\"\\\\Seen \");\n\n\t\t\tfor (int i = 0; i < numKeywords; i++)\n\t\t\t\tbuilder.Append (\"%S \");\n\n\t\t\tif (builder.Length > 1)\n\t\t\t\tbuilder.Length--;\n\n\t\t\tbuilder.Append (')');\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Formats a flags list suitable for use with the APPEND command.\n\t\t/// </summary>\n\t\t/// <returns>The flags list string.</returns>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"numKeywords\">The number of keywords.</param>\n\t\tpublic static string FormatFlagsList (MessageFlags flags, int numKeywords)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tFormatFlagsList (builder, flags, numKeywords);\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tstatic void AddFlag (ImapToken token, ref MessageFlags flags, HashSet<string> keywords)\n\t\t{\n\t\t\tif (token.Type != ImapTokenType.Nil) {\n\t\t\t\tvar flag = (string) token.Value;\n\n\t\t\t\tif (flag.Equals (\"\\\\Answered\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.Answered;\n\t\t\t\telse if (flag.Equals (\"\\\\Deleted\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.Deleted;\n\t\t\t\telse if (flag.Equals (\"\\\\Draft\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.Draft;\n\t\t\t\telse if (flag.Equals (\"\\\\Flagged\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.Flagged;\n\t\t\t\telse if (flag.Equals (\"\\\\Seen\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.Seen;\n\t\t\t\telse if (flag.Equals (\"\\\\Recent\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.Recent;\n\t\t\t\telse if (flag.Equals (\"\\\\*\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tflags |= MessageFlags.UserDefined;\n\t\t\t\telse if (keywords != null)\n\t\t\t\t\tkeywords.Add (flag);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the flags list.\n\t\t/// </summary>\n\t\t/// <returns>The message flags.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"name\">The name of the flags being parsed.</param>\n\t\t/// <param name=\"keywords\">A hash set of user-defined message flags that will be populated if non-null.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static MessageFlags ParseFlagsList (ImapEngine engine, string name, HashSet<string> keywords, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tvar flags = MessageFlags.None;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, name, token);\n\n\t\t\ttoken = engine.ReadToken (ImapStream.AtomSpecials, cancellationToken);\n\n\t\t\twhile (token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.QString || token.Type == ImapTokenType.Nil) {\n\t\t\t\tAddFlag (token, ref flags, keywords);\n\n\t\t\t\ttoken = engine.ReadToken (ImapStream.AtomSpecials, cancellationToken);\n\t\t\t}\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, name, token);\n\n\t\t\treturn flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the flags list.\n\t\t/// </summary>\n\t\t/// <returns>The message flags.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"name\">The name of the flags being parsed.</param>\n\t\t/// <param name=\"keywords\">A hash set of user-defined message flags that will be populated if non-null.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task<MessageFlags> ParseFlagsListAsync (ImapEngine engine, string name, HashSet<string> keywords, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tvar flags = MessageFlags.None;\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, name, token);\n\n\t\t\ttoken = await engine.ReadTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\n\t\t\twhile (token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.QString || token.Type == ImapTokenType.Nil) {\n\t\t\t\tAddFlag (token, ref flags, keywords);\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, name, token);\n\n\t\t\treturn flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the ANNOTATION list.\n\t\t/// </summary>\n\t\t/// <returns>The list of annotations.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static ReadOnlyCollection<Annotation> ParseAnnotations (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ANNOTATION\", \"{0}\");\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tvar annotations = new List<Annotation> ();\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, \"ANNOTATION\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.PeekToken (ImapStream.AtomSpecials, cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tvar path = ReadStringToken (engine, format, cancellationToken);\n\t\t\t\tvar entry = AnnotationEntry.Parse (path);\n\t\t\t\tvar annotation = new Annotation (entry);\n\n\t\t\t\tannotations.Add (annotation);\n\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t\t// Note: Unsolicited FETCH responses that include ANNOTATION data do not include attribute values.\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t// consume the '('\n\t\t\t\t\tengine.ReadToken (cancellationToken);\n\n\t\t\t\t\t// read the attribute/value pairs\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = engine.PeekToken (ImapStream.AtomSpecials, cancellationToken);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tvar name = ReadStringToken (engine, format, cancellationToken);\n\t\t\t\t\t\tvar value = ReadNStringToken (engine, format, false, cancellationToken);\n\t\t\t\t\t\tvar attribute = new AnnotationAttribute (name);\n\n\t\t\t\t\t\tannotation.Properties[attribute] = value;\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\t// consume the ')'\n\t\t\t\t\tengine.ReadToken (cancellationToken);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\t// consume the ')'\n\t\t\tengine.ReadToken (cancellationToken);\n\n\t\t\treturn new ReadOnlyCollection<Annotation> (annotations);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the ANNOTATION list.\n\t\t/// </summary>\n\t\t/// <returns>The list of annotations.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task<ReadOnlyCollection<Annotation>> ParseAnnotationsAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar format = string.Format (ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"ANNOTATION\", \"{0}\");\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tvar annotations = new List<Annotation> ();\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, \"ANNOTATION\", token);\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.PeekTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tvar path = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\tvar entry = AnnotationEntry.Parse (path);\n\t\t\t\tvar annotation = new Annotation (entry);\n\n\t\t\t\tannotations.Add (annotation);\n\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// Note: Unsolicited FETCH responses that include ANNOTATION data do not include attribute values.\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\t// consume the '('\n\t\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t// read the attribute/value pairs\n\t\t\t\t\tdo {\n\t\t\t\t\t\ttoken = await engine.PeekTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tvar name = await ReadStringTokenAsync (engine, format, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tvar value = await ReadNStringTokenAsync (engine, format, false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tvar attribute = new AnnotationAttribute (name);\n\n\t\t\t\t\t\tannotation.Properties[attribute] = value;\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\t// consume the ')'\n\t\t\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\t// consume the ')'\n\t\t\tawait engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn new ReadOnlyCollection<Annotation> (annotations);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the X-GM-LABELS list.\n\t\t/// </summary>\n\t\t/// <returns>The message labels.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static ReadOnlyCollection<string> ParseLabelsList (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tvar labels = new List<string> ();\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, \"X-GM-LABELS\", token);\n\n\t\t\ttoken = engine.ReadToken (ImapStream.AtomSpecials, cancellationToken);\n\n\t\t\twhile (token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.QString || token.Type == ImapTokenType.Nil) {\n\t\t\t\t// Apparently it's possible to set a NIL label in GMail...\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/244 for an example.\n\t\t\t\tif (token.Type != ImapTokenType.Nil) {\n\t\t\t\t\tvar label = engine.DecodeMailboxName ((string) token.Value);\n\n\t\t\t\t\tlabels.Add (label);\n\t\t\t\t} else {\n\t\t\t\t\tlabels.Add ((string) token.Value);\n\t\t\t\t}\n\n\t\t\t\ttoken = engine.ReadToken (ImapStream.AtomSpecials, cancellationToken);\n\t\t\t}\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, \"X-GM-LABELS\", token);\n\n\t\t\treturn new ReadOnlyCollection<string> (labels);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the X-GM-LABELS list.\n\t\t/// </summary>\n\t\t/// <returns>The message labels.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task<ReadOnlyCollection<string>> ParseLabelsListAsync (ImapEngine engine, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tvar labels = new List<string> ();\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericItemSyntaxErrorFormat, \"X-GM-LABELS\", token);\n\n\t\t\ttoken = await engine.ReadTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\n\t\t\twhile (token.Type == ImapTokenType.Flag || token.Type == ImapTokenType.Atom || token.Type == ImapTokenType.QString || token.Type == ImapTokenType.Nil) {\n\t\t\t\t// Apparently it's possible to set a NIL label in GMail...\n\t\t\t\t//\n\t\t\t\t// See https://github.com/jstedfast/MailKit/issues/244 for an example.\n\t\t\t\tif (token.Type != ImapTokenType.Nil) {\n\t\t\t\t\tvar label = engine.DecodeMailboxName ((string) token.Value);\n\n\t\t\t\t\tlabels.Add (label);\n\t\t\t\t} else {\n\t\t\t\t\tlabels.Add ((string) token.Value);\n\t\t\t\t}\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (ImapStream.AtomSpecials, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tImapEngine.AssertToken (token, ImapTokenType.CloseParen, ImapEngine.GenericItemSyntaxErrorFormat, \"X-GM-LABELS\", token);\n\n\t\t\treturn new ReadOnlyCollection<string> (labels);\n\t\t}\n\n\t\tstatic MessageThread ParseThread (ImapEngine engine, uint uidValidity, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = engine.ReadToken (cancellationToken);\n\t\t\tMessageThread thread, node, child;\n\t\t\tuint uid;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\tthread = new MessageThread ((UniqueId?) null /*UniqueId.Invalid*/);\n\n\t\t\t\tdo {\n\t\t\t\t\tchild = ParseThread (engine, uidValidity, cancellationToken);\n\t\t\t\t\tthread.Children.Add (child);\n\n\t\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\t\t\t\t} while (token.Type != ImapTokenType.CloseParen);\n\n\t\t\t\treturn thread;\n\t\t\t}\n\n\t\t\tuid = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"THREAD\", token);\n\t\t\tnode = thread = new MessageThread (new UniqueId (uidValidity, uid));\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\tchild = ParseThread (engine, uidValidity, cancellationToken);\n\t\t\t\t\tnode.Children.Add (child);\n\t\t\t\t} else {\n\t\t\t\t\tuid = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"THREAD\", token);\n\t\t\t\t\tchild = new MessageThread (new UniqueId (uidValidity, uid));\n\t\t\t\t\tnode.Children.Add (child);\n\t\t\t\t\tnode = child;\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\treturn thread;\n\t\t}\n\n\t\tstatic async Task<MessageThread> ParseThreadAsync (ImapEngine engine, uint uidValidity, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar token = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tMessageThread thread, node, child;\n\t\t\tuint uid;\n\n\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\tthread = new MessageThread ((UniqueId?) null /*UniqueId.Invalid*/);\n\n\t\t\t\tdo {\n\t\t\t\t\tchild = await ParseThreadAsync (engine, uidValidity, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tthread.Children.Add (child);\n\n\t\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t} while (token.Type != ImapTokenType.CloseParen);\n\n\t\t\t\treturn thread;\n\t\t\t}\n\n\t\t\tuid = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"THREAD\", token);\n\t\t\tnode = thread = new MessageThread (new UniqueId (uidValidity, uid));\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.CloseParen)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (token.Type == ImapTokenType.OpenParen) {\n\t\t\t\t\tchild = await ParseThreadAsync (engine, uidValidity, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tnode.Children.Add (child);\n\t\t\t\t} else {\n\t\t\t\t\tuid = ImapEngine.ParseNumber (token, true, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"THREAD\", token);\n\t\t\t\t\tchild = new MessageThread (new UniqueId (uidValidity, uid));\n\t\t\t\t\tnode.Children.Add (child);\n\t\t\t\t\tnode = child;\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\treturn thread;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses an untagged THREAD response.\n\t\t/// </summary>\n\t\t/// <returns>The task.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"uidValidity\">The UIDVALIDITY of the folder.</param>\n\t\t/// <param name=\"threads\">The list of message threads that this method will append to.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static void ParseThreads (ImapEngine engine, uint uidValidity, List<MessageThread> threads, CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = engine.PeekToken (cancellationToken);\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln)\n\t\t\t\t\tbreak;\n\n\t\t\t\ttoken = engine.ReadToken (cancellationToken);\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"THREAD\", token);\n\n\t\t\t\tthreads.Add (ParseThread (engine, uidValidity, cancellationToken));\n\t\t\t} while (true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the threads.\n\t\t/// </summary>\n\t\t/// <returns>The task.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"uidValidity\">The UIDVALIDITY of the folder.</param>\n\t\t/// <param name=\"threads\">THe list of message threads that will be appended to.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic static async Task ParseThreadsAsync (ImapEngine engine, uint uidValidity, List<MessageThread> threads, CancellationToken cancellationToken)\n\t\t{\n\t\t\tImapToken token;\n\n\t\t\tdo {\n\t\t\t\ttoken = await engine.PeekTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (token.Type == ImapTokenType.Eoln)\n\t\t\t\t\tbreak;\n\n\t\t\t\ttoken = await engine.ReadTokenAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tImapEngine.AssertToken (token, ImapTokenType.OpenParen, ImapEngine.GenericUntaggedResponseSyntaxErrorFormat, \"THREAD\", token);\n\n\t\t\t\tthreads.Add (await ParseThreadAsync (engine, uidValidity, cancellationToken).ConfigureAwait (false));\n\t\t\t} while (true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Handles an untagged THREAD response.\n\t\t/// </summary>\n\t\t/// <returns>The task.</returns>\n\t\t/// <param name=\"engine\">The IMAP engine.</param>\n\t\t/// <param name=\"ic\">The IMAP command.</param>\n\t\t/// <param name=\"index\">THe index.</param>\n\t\t/// <param name=\"doAsync\">Whether or not asynchronous IO methods should be used.</param>\n\t\tpublic static Task UntaggedThreadHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\tvar threads = new List<MessageThread> ();\n\t\t\tvar folder = ic.Folder!;\n\n\t\t\tic.UserData = threads;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ParseThreadsAsync (engine, folder.UidValidity, threads, ic.CancellationToken);\n\n\t\t\tParseThreads (engine, folder.UidValidity, threads, ic.CancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/NetworkOperation.cs",
    "content": "﻿//\n// NetworkOperation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Diagnostics;\n\nnamespace MailKit.Net {\n\tenum NetworkOperationKind\n\t{\n\t\tAuthenticate,\n\t\tConnect,\n\t\tSend\n\t}\n\n\tclass NetworkOperation : IDisposable\n\t{\n#if NET6_0_OR_GREATER\n\t\tstatic readonly string[] ActivityNames = {\n\t\t\t\"Authenticate\",\n\t\t\t\"Connect\",\n\t\t\t\"Send\"\n\t\t};\n\t\tstatic readonly string[] OperationValues = {\n\t\t\t\"authenticate\",\n\t\t\t\"connect\",\n\t\t\t\"send\"\n\t\t};\n\n\t\treadonly NetworkOperationKind kind;\n\t\treadonly ClientMetrics? metrics;\n\t\treadonly Activity? activity;\n\t\treadonly long startTimestamp;\n\t\treadonly Uri uri;\n\t\tException? ex;\n\n\t\tNetworkOperation (NetworkOperationKind kind, Uri uri, Activity? activity, ClientMetrics? metrics)\n\t\t{\n\t\t\tthis.kind = kind;\n\t\t\tthis.uri = uri;\n\t\t\tthis.activity = activity;\n\t\t\tthis.metrics = metrics;\n\n\t\t\tif (activity is not null) {\n\t\t\t\tactivity.AddTag (\"url.scheme\", uri.Scheme);\n\t\t\t\tactivity.AddTag (\"server.address\", uri.Host);\n\t\t\t\tactivity.AddTag (\"server.port\", uri.Port);\n\t\t\t}\n\n\t\t\tstartTimestamp = Stopwatch.GetTimestamp ();\n\t\t}\n#else\n\t\tException? ex;\n\n\t\tNetworkOperation ()\n\t\t{\n\t\t}\n#endif\n\n\t\tpublic void SetError (Exception ex)\n\t\t{\n\t\t\tthis.ex = ex;\n\t\t}\n\n#if NET6_0_OR_GREATER\n\t\t// TagList is a huge struct, so we avoid storing it in a field to reduce the amount we allocate on the heap.\n\t\tTagList GetTags ()\n\t\t{\n\t\t\tvar tags = ClientMetrics.GetTags (uri, ex);\n\n\t\t\ttags.Add (\"network.operation\", OperationValues[(int) kind]);\n\n\t\t\treturn tags;\n\t\t}\n#endif\n\n\t\tpublic void Dispose ()\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\tif (metrics is not null && (metrics.OperationCounter.Enabled || metrics.OperationDuration.Enabled)) {\n\t\t\t\tvar tags = GetTags ();\n\n\t\t\t\tif (metrics.OperationDuration.Enabled) {\n\t\t\t\t\tvar duration = TimeSpan.FromTicks (Stopwatch.GetTimestamp () - startTimestamp).TotalMilliseconds;\n\n\t\t\t\t\tmetrics.OperationDuration.Record (duration, tags);\n\t\t\t\t}\n\n\t\t\t\tif (metrics.OperationCounter.Enabled)\n\t\t\t\t\tmetrics.OperationCounter.Add (1, tags);\n\t\t\t}\n\n\t\t\tif (activity is not null) {\n\t\t\t\tif (ex is not null)\n\t\t\t\t\tactivity.SetStatus (ActivityStatusCode.Error);\n\t\t\t\telse\n\t\t\t\t\tactivity.SetStatus (ActivityStatusCode.Ok);\n\n\t\t\t\tactivity.Dispose ();\n\t\t\t}\n#endif\n\t\t}\n\n#if NET6_0_OR_GREATER\n\t\tpublic static NetworkOperation Start (NetworkOperationKind kind, Uri uri, ActivitySource source, ClientMetrics? metrics)\n\t\t{\n\n\t\t\tvar activity = source?.StartActivity (ActivityNames[(int) kind], ActivityKind.Client);\n\n\t\t\treturn new NetworkOperation (kind, uri, activity, metrics);\n\t\t}\n#else\n\t\tpublic static NetworkOperation Start (NetworkOperationKind kind, Uri uri)\n\t\t{\n\t\t\treturn new NetworkOperation ();\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/NetworkStream.cs",
    "content": "﻿//\n// NetworkStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net\n{\n\tclass NetworkStream : Stream\n\t{\n\t\tSocketAsyncEventArgs? send;\n\t\tSocketAsyncEventArgs? recv;\n\t\tbool ownsSocket;\n\t\tbool connected;\n\n\t\tpublic NetworkStream (Socket socket, bool ownsSocket)\n\t\t{\n\t\t\tsend = new SocketAsyncEventArgs ();\n\t\t\tsend.Completed += AsyncOperationCompleted;\n\t\t\tsend.AcceptSocket = socket;\n\n\t\t\trecv = new SocketAsyncEventArgs ();\n\t\t\trecv.Completed += AsyncOperationCompleted;\n\t\t\trecv.AcceptSocket = socket;\n\n\t\t\tthis.ownsSocket = ownsSocket;\n\t\t\tconnected = socket.Connected;\n\t\t\tSocket = socket;\n\t\t}\n\n\t\tpublic Socket Socket {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic bool DataAvailable {\n\t\t\tget { return connected && Socket.Available > 0; }\n\t\t}\n\n\t\tpublic override bool CanRead {\n\t\t\tget { return connected; }\n\t\t}\n\n\t\tpublic override bool CanWrite {\n\t\t\tget { return connected; }\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return connected; }\n\t\t}\n\n\t\tpublic override long Length {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t}\n\n\t\tpublic override long Position {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\tpublic override int ReadTimeout {\n\t\t\tget {\n\t\t\t\tint timeout = Socket.ReceiveTimeout;\n\n\t\t\t\treturn timeout == 0 ? Timeout.Infinite : timeout;\n\t\t\t}\n\t\t\tset {\n\t\t\t\tif (value <= 0 && value != Timeout.Infinite)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (value));\n\n\t\t\t\tSocket.ReceiveTimeout = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic override int WriteTimeout {\n\t\t\tget {\n\t\t\t\tint timeout = Socket.SendTimeout;\n\n\t\t\t\treturn timeout == 0 ? Timeout.Infinite : timeout;\n\t\t\t}\n\t\t\tset {\n\t\t\t\tif (value <= 0 && value != Timeout.Infinite)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (value));\n\n\t\t\t\tSocket.SendTimeout = value;\n\t\t\t}\n\t\t}\n\n\t\tvoid AsyncOperationCompleted (object? sender, SocketAsyncEventArgs args)\n\t\t{\n\t\t\tvar tcs = (TaskCompletionSource<bool>) args.UserToken!;\n\n\t\t\tif (args.SocketError == SocketError.Success) {\n\t\t\t\ttcs.TrySetResult (true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttcs.TrySetException (new SocketException ((int) args.SocketError));\n\t\t}\n\n\t\tvoid Cleanup ()\n\t\t{\n\t\t\tif (send != null) {\n\t\t\t\tsend.Completed -= AsyncOperationCompleted;\n\t\t\t\tsend.AcceptSocket = null;\n\t\t\t\tsend?.Dispose ();\n\t\t\t\tsend = null;\n\t\t\t}\n\n\t\t\tif (recv != null) {\n\t\t\t\trecv.Completed -= AsyncOperationCompleted;\n\t\t\t\trecv.AcceptSocket = null;\n\t\t\t\trecv.Dispose ();\n\t\t\t\trecv = null;\n\t\t\t}\n\t\t}\n\n\t\tvoid Disconnect ()\n\t\t{\n\t\t\ttry {\n\t\t\t\tSocket.Disconnect (false);\n\t\t\t\tSocket.Dispose ();\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t} finally {\n\t\t\t\tconnected = false;\n\t\t\t\tCleanup ();\n\t\t\t}\n\t\t}\n\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn Socket.Receive (buffer, offset, count, SocketFlags.None);\n\t\t\t} catch (SocketException ex) {\n\t\t\t\tthrow new IOException (ex.Message, ex);\n\t\t\t}\n\t\t}\n\n\t\tpublic override async Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar tcs = new TaskCompletionSource<bool> ();\n\n\t\t\t// Capture the ReadTimeout so even if we get an exception and disconnect the socket, we still have it.\n\t\t\tint readTimeout = ReadTimeout;\n\n\t\t\tusing (var timeout = new CancellationTokenSource (readTimeout)) {\n\t\t\t\tusing (var linked = CancellationTokenSource.CreateLinkedTokenSource (cancellationToken, timeout.Token)) {\n\t\t\t\t\tusing (var registration = linked.Token.Register (() => tcs.TrySetCanceled (), false)) {\n\t\t\t\t\t\trecv!.SetBuffer (buffer, offset, count);\n\t\t\t\t\t\trecv.UserToken = tcs;\n\n\t\t\t\t\t\tif (!Socket.ReceiveAsync (recv))\n\t\t\t\t\t\t\tAsyncOperationCompleted (null, recv);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait tcs.Task.ConfigureAwait (false);\n\t\t\t\t\t\t\treturn recv.BytesTransferred;\n\t\t\t\t\t\t} catch (OperationCanceledException ex) {\n\t\t\t\t\t\t\tDisconnect ();\n\t\t\t\t\t\t\tif (timeout.IsCancellationRequested)\n\t\t\t\t\t\t\t\tthrow new TimeoutException ($\"Operation timed out after {readTimeout} milliseconds\", ex);\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tDisconnect ();\n\t\t\t\t\t\t\tif (ex is SocketException)\n\t\t\t\t\t\t\t\tthrow new IOException (ex.Message, ex);\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\ttry {\n\t\t\t\tSocket.Send (buffer, offset, count, SocketFlags.None);\n\t\t\t} catch (SocketException ex) {\n\t\t\t\tthrow new IOException (ex.Message, ex);\n\t\t\t}\n\t\t}\n\n\t\tpublic override async Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar tcs = new TaskCompletionSource<bool> ();\n\n\t\t\t// Capture the WriteTimeout so even if we get an exception and disconnect the socket, we still have it.\n\t\t\tint writeTimeout = WriteTimeout;\n\n\t\t\tusing (var timeout = new CancellationTokenSource (writeTimeout)) {\n\t\t\t\tusing (var linked = CancellationTokenSource.CreateLinkedTokenSource (cancellationToken, timeout.Token)) {\n\t\t\t\t\tusing (var registration = linked.Token.Register (() => tcs.TrySetCanceled (), false)) {\n\t\t\t\t\t\tsend!.SetBuffer (buffer, offset, count);\n\t\t\t\t\t\tsend.UserToken = tcs;\n\n\t\t\t\t\t\tif (!Socket.SendAsync (send))\n\t\t\t\t\t\t\tAsyncOperationCompleted (null, send);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait tcs.Task.ConfigureAwait (false);\n\t\t\t\t\t\t} catch (OperationCanceledException ex) {\n\t\t\t\t\t\t\tDisconnect ();\n\t\t\t\t\t\t\tif (timeout.IsCancellationRequested)\n\t\t\t\t\t\t\t\tthrow new TimeoutException ($\"Operation timed out after {writeTimeout} milliseconds\", ex);\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tDisconnect ();\n\t\t\t\t\t\t\tif (ex is SocketException)\n\t\t\t\t\t\t\t\tthrow new IOException (ex.Message, ex);\n\t\t\t\t\t\t\tthrow;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Flush ()\n\t\t{\n\t\t}\n\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\tpublic static NetworkStream? Get (Stream stream)\n\t\t{\n#if !MAILKIT_LITE\n\t\t\tif (stream is CompressedStream compressed)\n\t\t\t\tstream = compressed.InnerStream;\n#endif\n\n\t\t\tif (stream is SslStream ssl)\n\t\t\t\tstream = ssl.InnerStream;\n\n\t\t\treturn stream as NetworkStream;\n\t\t}\n\n\t\tpublic void Poll (SelectMode mode, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (!cancellationToken.CanBeCanceled)\n\t\t\t\treturn;\n\n\t\t\tdo {\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\t// wait 1/4 second and then re-check for cancellation\n\t\t\t} while (!Socket.Poll (250000, mode));\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t}\n\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing) {\n\t\t\t\tif (ownsSocket && connected) {\n\t\t\t\t\townsSocket = false;\n\t\t\t\t\tDisconnect ();\n\t\t\t\t} else {\n\t\t\t\t\tCleanup ();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/AsyncPop3Client.cs",
    "content": "﻿//\n// AsyncPop3Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\n\nusing MimeKit;\n\nusing MailKit.Security;\n\nnamespace MailKit.Net.Pop3\n{\n\tpublic partial class Pop3Client\n\t{\n\t\tTask SendCommandAsync (CancellationToken token, string command)\n\t\t{\n\t\t\tengine.QueueCommand (null, Encoding.ASCII, command);\n\n\t\t\treturn engine.RunAsync (true, token);\n\t\t}\n\n\t\tTask<string> SendCommandAsync (CancellationToken token, string format, params object[] args)\n\t\t{\n\t\t\treturn SendCommandAsync (token, Encoding.ASCII, format, args);\n\t\t}\n\n\t\tasync Task<string> SendCommandAsync (CancellationToken token, Encoding encoding, string format, params object[] args)\n\t\t{\n\t\t\tvar pc = engine.QueueCommand (null, encoding, format, args);\n\n\t\t\tawait engine.RunAsync (true, token).ConfigureAwait (false);\n\n\t\t\treturn pc.StatusText ?? string.Empty;\n\t\t}\n\n\t\tasync Task ProbeCapabilitiesAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif ((engine.Capabilities & Pop3Capabilities.UIDL) == 0 && (probed & ProbedCapabilities.UIDL) == 0) {\n\t\t\t\t// if the message count is > 0, we can probe the UIDL command\n\t\t\t\tif (total > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait GetMessageUidAsync (0, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (NotSupportedException) {\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync Task<int> UpdateMessageCountAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tengine.QueueCommand (ProcessStatResponse, \"STAT\\r\\n\");\n\n\t\t\tawait engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn Count;\n\t\t}\n\n\t\tasync Task OnAuthenticatedAsync (string message, CancellationToken cancellationToken)\n\t\t{\n\t\t\tengine.State = Pop3EngineState.Transaction;\n\n\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tawait UpdateMessageCountAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tawait ProbeCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\t\t\tOnAuthenticated (message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// An POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task AuthenticateAsync (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar saslUri = CheckCanAuthenticate (mechanism, cancellationToken);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tvar ctx = GetSaslAuthContext (mechanism, saslUri);\n\n\t\t\t\tvar pc = await ctx.AuthenticateAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (pc.Status == Pop3CommandStatus.Error)\n\t\t\t\t\tthrow new AuthenticationException ();\n\n\t\t\t\tpc.ThrowIfError ();\n\n\t\t\t\tawait OnAuthenticatedAsync (ctx.AuthMessage!, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticates using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the POP3 server supports the APOP authentication mechanism,\n\t\t/// then APOP is used.</para>\n\t\t/// <para>If the APOP authentication mechanism is not supported and the\n\t\t/// server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including\n\t\t/// any OAUTH mechanisms) are tried in order of greatest security to weakest\n\t\t/// security. Once a SASL authentication mechanism is found that both client\n\t\t/// and server support, the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the <c>USER</c> and <c>PASS</c> commands are used as a\n\t\t/// fallback.</para>\n\t\t/// <note type=\"tip\"><para>To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</para>\n\t\t/// <para>In the case of the APOP authentication mechanism, remove it from the\n\t\t/// <see cref=\"Capabilities\"/> property instead.</para></note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The text encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// An POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task AuthenticateAsync (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar saslUri = CheckCanAuthenticate (encoding, credentials, cancellationToken);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tstring userName, password;\n\t\t\t\tNetworkCredential? cred;\n\t\t\t\tstring? message = null;\n\n\t\t\t\tif ((engine.Capabilities & Pop3Capabilities.Apop) != 0 && (cred = credentials.GetCredential (saslUri, \"APOP\")) != null) {\n\t\t\t\t\tvar apop = GetApopCommand (encoding, cred);\n\n\t\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmessage = await SendCommandAsync (cancellationToken, encoding, apop).ConfigureAwait (false);\n\t\t\t\t\t\tengine.State = Pop3EngineState.Transaction;\n\t\t\t\t\t} catch (Pop3CommandException) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (engine.State == Pop3EngineState.Transaction) {\n\t\t\t\t\t\tawait OnAuthenticatedAsync (message ?? string.Empty, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ((engine.Capabilities & Pop3Capabilities.Sasl) != 0) {\n\t\t\t\t\tforeach (var authmech in SaslMechanism.Rank (engine.AuthenticationMechanisms)) {\n\t\t\t\t\t\tSaslMechanism? sasl;\n\n\t\t\t\t\t\tcred = credentials.GetCredential (saslUri, authmech);\n\n\t\t\t\t\t\tif (cred == null || (sasl = SaslMechanism.Create (authmech, encoding, cred)) == null)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\t\tvar ctx = GetSaslAuthContext (sasl, saslUri);\n\n\t\t\t\t\t\tvar pc = await ctx.AuthenticateAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (pc.Status == Pop3CommandStatus.Error)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tpc.ThrowIfError ();\n\n\t\t\t\t\t\tawait OnAuthenticatedAsync (ctx.AuthMessage!, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// fall back to the classic USER & PASS commands...\n\t\t\t\tif ((cred = credentials.GetCredential (saslUri, \"DEFAULT\")) == null)\n\t\t\t\t\tthrow new AuthenticationException (\"No credentials could be found for the POP3 server.\");\n\n\t\t\t\tuserName = utf8 ? SaslMechanism.SaslPrep (cred.UserName) : cred.UserName;\n\t\t\t\tpassword = utf8 ? SaslMechanism.SaslPrep (cred.Password) : cred.Password;\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait SendCommandAsync (cancellationToken, encoding, \"USER {0}\\r\\n\", userName).ConfigureAwait (false);\n\t\t\t\t\tmessage = await SendCommandAsync (cancellationToken, encoding, \"PASS {0}\\r\\n\", password).ConfigureAwait (false);\n\t\t\t\t} catch (Pop3CommandException) {\n\t\t\t\t\tthrow new AuthenticationException ();\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tawait OnAuthenticatedAsync (message, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tasync Task SslHandshakeAsync (SslStream ssl, string host, CancellationToken cancellationToken)\n\t\t{\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t\tawait ssl.AuthenticateAsClientAsync (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate), cancellationToken).ConfigureAwait (false);\n#else\n\t\t\tawait ssl.AuthenticateAsClientAsync (host, ClientCertificates, SslProtocols, CheckCertificateRevocation).ConfigureAwait (false);\n#endif\n\t\t}\n\n\t\tasync Task PostConnectAsync (Stream stream, string host, int port, SecureSocketOptions options, bool starttls, CancellationToken cancellationToken)\n\t\t{\n\t\t\tprobed = ProbedCapabilities.None;\n\n\t\t\ttry {\n\t\t\t\tProtocolLogger.LogConnect (engine.Uri!);\n\t\t\t} catch {\n\t\t\t\tstream.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tvar pop3 = new Pop3Stream (stream, ProtocolLogger);\n\n\t\t\tawait engine.ConnectAsync (pop3, cancellationToken).ConfigureAwait (false);\n\n\t\t\ttry {\n\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (options == SecureSocketOptions.StartTls && (engine.Capabilities & Pop3Capabilities.StartTLS) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the STLS extension.\");\n\n\t\t\t\tif (starttls && (engine.Capabilities & Pop3Capabilities.StartTLS) != 0) {\n\t\t\t\t\tawait SendCommandAsync (cancellationToken, \"STLS\\r\\n\").ConfigureAwait (false);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar tls = new SslStream (stream, false, ValidateRemoteCertificate);\n\t\t\t\t\t\tpop3.Stream = tls;\n\n\t\t\t\t\t\tawait SslHandshakeAsync (tls, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, true, \"POP3\", host, port, 995, 110);\n\t\t\t\t\t}\n\n\t\t\t\t\tengine.IsSecure = true;\n\n\t\t\t\t\t// re-issue a CAPA command\n\t\t\t\t\tawait engine.QueryCapabilitiesAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tengine.Disconnect (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tengine.Disconnected += OnEngineDisconnected;\n\t\t\tOnConnected (host, port, options);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified POP3 or POP3/S server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified POP3 or POP3/S server.</para>\n\t\t/// <para>If the <paramref name=\"port\"/> has a value of <c>0</c>, then the\n\t\t/// <paramref name=\"options\"/> parameter is used to determine the default port to\n\t\t/// connect to. The default port used with <see cref=\"SecureSocketOptions.SslOnConnect\"/>\n\t\t/// is <c>995</c>. All other values will use a default port of <c>110</c>.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>995</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the POP3 server does not support the STLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task ConnectAsync (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (host, port);\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tvar stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false);\n\t\t\t\tstream.WriteTimeout = timeout;\n\t\t\t\tstream.ReadTimeout = timeout;\n\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait SslHandshakeAsync (ssl, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"POP3\", host, port, 995, 110);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream = ssl;\n\t\t\t\t}\n\n\t\t\t\tawait PostConnectAsync (stream, host, port, options, starttls, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified POP3 or POP3/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified POP3 or POP3/S server using\n\t\t/// the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>995</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the POP3 server does not support the STLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task ConnectAsync (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (socket, host, port);\n\n\t\t\treturn ConnectAsync (new NetworkStream (socket, true), host, port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified POP3 or POP3/S server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified POP3 or POP3/S server using\n\t\t/// the provided stream.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>995</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"stream\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the POP3 server does not support the STLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task ConnectAsync (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (stream, host, port);\n\n\t\t\tStream network;\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait SslHandshakeAsync (ssl, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"POP3\", host, port, 995, 110);\n\t\t\t\t\t}\n\n\t\t\t\t\tnetwork = ssl;\n\t\t\t\t} else {\n\t\t\t\t\tnetwork = stream;\n\t\t\t\t}\n\n\t\t\t\tif (network.CanTimeout) {\n\t\t\t\t\tnetwork.WriteTimeout = timeout;\n\t\t\t\t\tnetwork.ReadTimeout = timeout;\n\t\t\t\t}\n\n\t\t\t\tawait PostConnectAsync (network, host, port, options, starttls, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic override async Task DisconnectAsync (bool quit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!engine.IsConnected)\n\t\t\t\treturn;\n\n\t\t\tif (quit) {\n\t\t\t\ttry {\n\t\t\t\t\tawait SendCommandAsync (cancellationToken, \"QUIT\\r\\n\").ConfigureAwait (false);\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t} catch (Pop3ProtocolException) {\n\t\t\t\t} catch (Pop3CommandException) {\n\t\t\t\t} catch (IOException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisconnecting = true;\n\t\t\tengine.Disconnect (null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously gets the message count.\n\t\t/// </remarks>\n\t\t/// <returns>The message count.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<int> GetMessageCountAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn UpdateMessageCountAsync (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Ping the POP3 server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>Mail servers, if left idle for too long, will automatically drop the connection.</remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task NoOpAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn SendCommandAsync (cancellationToken, \"NOOP\\r\\n\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable UTF8 mode.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The POP3 UTF8 extension allows the client to retrieve messages in the UTF-8 encoding and\n\t\t/// may also allow the user to authenticate using a UTF-8 encoded username or password.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has already been authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UTF8 extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task EnableUTF8Async (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanEnableUTF8 ())\n\t\t\t\treturn;\n\n\t\t\tawait SendCommandAsync (cancellationToken, \"UTF8\\r\\n\").ConfigureAwait (false);\n\t\t\tutf8 = true;\n\t\t}\n\n\t\tstatic async Task ReadLangResponseAsync (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar langs = (List<Pop3Language>) pc.UserData!;\n\n\t\t\tdo {\n\t\t\t\tvar response = await engine.ReadLineAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (response == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tvar tokens = response.Split (Space, 2);\n\t\t\t\tif (tokens.Length != 2)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlangs.Add (new Pop3Language (tokens[0], tokens[1]));\n\t\t\t} while (true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the list of languages supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// query the list of languages supported by the POP3 server that can\n\t\t/// be used for error messages.\n\t\t/// </remarks>\n\t\t/// <returns>The supported languages.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<IList<Pop3Language>> GetLanguagesAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueLangCommand (out var langs);\n\n\t\t\tawait engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn new ReadOnlyCollection<Pop3Language> (langs);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the language used by the POP3 server for error messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// set the language used by the POP3 server for error messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"lang\">The language code.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"lang\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"lang\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic Task SetLanguageAsync (string lang, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanSetLanguage (lang);\n\n\t\t\treturn SendCommandAsync (cancellationToken, $\"LANG {lang}\\r\\n\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the UID of the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the UID of the message at the specified index.</para>\n\t\t/// <note type=\"warning\">Not all servers support UIDs, so you should first check the\n\t\t/// <see cref=\"Capabilities\"/> property for the <see cref=\"Pop3Capabilities.UIDL\"/> flag or\n\t\t/// the <see cref=\"SupportsUids\"/> convenience property.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The message UID.</returns>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<string> GetMessageUidAsync (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueUidlCommand (index);\n\n\t\t\tawait engine.RunAsync (false, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn OnUidlComplete<string> (pc);\n\t\t}\n\n\t\tstatic async Task ReadUidlAllResponseAsync (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tdo {\n\t\t\t\tvar response = await engine.ReadLineAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (response == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (pc.Exception != null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tParseUidlAllResponse (pc, response);\n\t\t\t} while (true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the full list of available message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the full list of available message UIDs.</para>\n\t\t/// <note type=\"warning\">Not all servers support UIDs, so you should first check the\n\t\t/// <see cref=\"Capabilities\"/> property for the <see cref=\"Pop3Capabilities.UIDL\"/> flag or\n\t\t/// the <see cref=\"SupportsUids\"/> convenience property.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadNewMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The message uids.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<string>> GetMessageUidsAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueUidlCommand ();\n\n\t\t\tawait engine.RunAsync (false, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn OnUidlComplete<List<string>> (pc);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the size of the specified message, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the size of the specified message, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message size, in bytes.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<int> GetMessageSizeAsync (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueListCommand (index);\n\n\t\t\tawait engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn (int) pc.UserData!;\n\t\t}\n\n\t\tstatic async Task ReadListAllResponseAsync (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tdo {\n\t\t\t\tvar response = await engine.ReadLineAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (response == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (pc.Exception != null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tParseListAllResponse (pc, response);\n\t\t\t} while (true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the sizes for all available messages, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sizes for all available messages, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message sizes, in bytes.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<IList<int>> GetMessageSizesAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar sizes = QueueListCommand ();\n\n\t\t\tawait engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn sizes;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers for the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers for the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<HeaderList> GetMessageHeadersAsync (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanDownload (index);\n\n\t\t\tvar ctx = new DownloadHeaderContext (this, parser);\n\n\t\t\treturn ctx.DownloadAsync (index, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers for the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the headers for the messages at the specified indexes.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessageHeaders(int,CancellationToken)\"/> for each message because\n\t\t/// it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The headers for the specified messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<IList<HeaderList>> GetMessageHeadersAsync (IList<int> indexes, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDownload (indexes))\n\t\t\t\treturn Task.FromResult ((IList<HeaderList>) Array.Empty<HeaderList> ());\n\n\t\t\tvar ctx = new DownloadHeaderContext (this, parser);\n\n\t\t\treturn ctx.DownloadAsync (indexes, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the headers of the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the headers of the messages within the specified range.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessageHeaders(int,CancellationToken)\"/> for each message because\n\t\t/// it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The headers of the messages within the specified range.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<IList<HeaderList>> GetMessageHeadersAsync (int startIndex, int count, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDownload (startIndex, count))\n\t\t\t\treturn Task.FromResult ((IList<HeaderList>) Array.Empty<HeaderList> ());\n\n\t\t\tvar ctx = new DownloadHeaderContext (this, parser);\n\n\t\t\treturn ctx.DownloadAsync (startIndex, count, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<MimeMessage> GetMessageAsync (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tCheckCanDownload (index);\n\n\t\t\tvar ctx = new DownloadMessageContext (this, parser, progress);\n\n\t\t\treturn ctx.DownloadAsync (index, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the messages at the specified indexes.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessage(int,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<IList<MimeMessage>> GetMessagesAsync (IList<int> indexes, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (indexes))\n\t\t\t\treturn Task.FromResult ((IList<MimeMessage>) Array.Empty<MimeMessage> ());\n\n\t\t\tvar ctx = new DownloadMessageContext (this, parser, progress);\n\n\t\t\treturn ctx.DownloadAsync (indexes, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the messages within the specified range.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessage(int,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"BatchDownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<IList<MimeMessage>> GetMessagesAsync (int startIndex, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (startIndex, count))\n\t\t\t\treturn Task.FromResult ((IList<MimeMessage>) Array.Empty<MimeMessage> ());\n\n\t\t\tvar ctx = new DownloadMessageContext (this, parser, progress);\n\n\t\t\treturn ctx.DownloadAsync (startIndex, count, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header stream at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message or header stream at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<Stream> GetStreamAsync (int index, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tCheckCanDownload (index);\n\n\t\t\tvar ctx = new DownloadStreamContext (this, progress);\n\n\t\t\treturn ctx.DownloadAsync (index, headersOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header streams at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Get the message or header streams at the specified indexes.</para>\n\t\t/// <para>If the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetStream(int,bool,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<IList<Stream>> GetStreamsAsync (IList<int> indexes, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (indexes))\n\t\t\t\treturn Task.FromResult ((IList<Stream>) Array.Empty<Stream> ());\n\n\t\t\tvar ctx = new DownloadStreamContext (this, progress);\n\n\t\t\treturn ctx.DownloadAsync (indexes, headersOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the message or header streams within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message or header streams within the specified range.</para>\n\t\t/// <para>If the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetStream(int,bool,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first stream to get.</param>\n\t\t/// <param name=\"count\">The number of streams to get.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<IList<Stream>> GetStreamsAsync (int startIndex, int count, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (startIndex, count))\n\t\t\t\treturn Task.FromResult ((IList<Stream>) Array.Empty<Stream> ());\n\n\t\t\tvar ctx = new DownloadStreamContext (this, progress);\n\n\t\t\treturn ctx.DownloadAsync (startIndex, count, headersOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified message for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task DeleteMessageAsync (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanDelete (index, out string seqid);\n\n\t\t\treturn SendCommandAsync (cancellationToken, $\"DELE {seqid}\\r\\n\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task DeleteMessagesAsync (IList<int> indexes, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDelete (indexes))\n\t\t\t\treturn;\n\n\t\t\tif ((Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\t\tawait SendCommandAsync (cancellationToken, \"DELE {0}\\r\\n\", indexes[i] + 1).ConfigureAwait (false);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\tengine.QueueCommand (null, \"DELE {0}\\r\\n\", indexes[i] + 1);\n\n\t\t\tawait engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark the specified range of messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"BatchDownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to mark for deletion.</param>\n\t\t/// <param name=\"count\">The number of messages to mark for deletion.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task DeleteMessagesAsync (int startIndex, int count, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDelete (startIndex, count))\n\t\t\t\treturn;\n\n\t\t\tif ((Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\t\tawait SendCommandAsync (cancellationToken, \"DELE {0}\\r\\n\", startIndex + i + 1).ConfigureAwait (false);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\tengine.QueueCommand (null, \"DELE {0}\\r\\n\", startIndex + i + 1);\n\n\t\t\tawait engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously mark all messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task DeleteAllMessagesAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (total > 0)\n\t\t\t\treturn DeleteMessagesAsync (0, total, cancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reset the state of all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <returns>An awaitable task.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task ResetAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn SendCommandAsync (cancellationToken, \"RSET\\r\\n\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/IPop3Client.cs",
    "content": "﻿//\n// IPop3Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// An interface for a POP3 client.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by <see cref=\"MailKit.Net.Pop3.Pop3Client\"/>.\n\t/// </remarks>\n\tpublic interface IPop3Client : IMailSpool\n\t{\n\t\t/// <summary>\n\t\t/// Gets the capabilities supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been made \n\t\t/// and may change once the client is authenticated.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The capabilities.</value>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// Capabilities cannot be enabled, they may only be disabled.\n\t\t/// </exception>\n\t\tPop3Capabilities Capabilities { get; set; }\n\n\t\t/// <summary>\n\t\t/// Gets the expiration policy.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the server supports the EXPIRE capability (<see cref=\"Pop3Capabilities.Expire\"/>), the value\n\t\t/// of the <see cref=\"ExpirePolicy\"/> property will reflect the value advertized by the server.</para>\n\t\t/// <para>A value of <c>-1</c> indicates that messages will never expire.</para>\n\t\t/// <para>A value of <c>0</c> indicates that messages that have been retrieved during the current session\n\t\t/// will be purged immediately after the connection is closed via the <c>QUIT</c> command.</para>\n\t\t/// <para>Values larger than <c>0</c> indicate the minimum number of days that the server will retain\n\t\t/// messages which have been retrieved.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The expiration policy.</value>\n\t\tint ExpirePolicy { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the implementation details of the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the server advertizes its implementation details, this value will be set to a string containing the\n\t\t/// information details provided by the server.\n\t\t/// </remarks>\n\t\t/// <value>The implementation details.</value>\n\t\tstring? Implementation { get; }\n\n\t\t/// <summary>\n\t\t/// Gets the minimum delay, in milliseconds, between logins.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the server supports the LOGIN-DELAY capability (<see cref=\"Pop3Capabilities.LoginDelay\"/>), this value\n\t\t/// will be set to the minimum number of milliseconds that the client must wait between logins.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The login delay.</value>\n\t\tint LoginDelay { get; }\n\n\t\t/// <summary>\n\t\t/// Enable UTF8 mode.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The POP3 UTF8 extension allows the client to retrieve messages in the UTF-8 encoding and\n\t\t/// may also allow the user to authenticate using a UTF-8 encoded username or password.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has already been authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UTF8 extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tvoid EnableUTF8 (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously enable UTF8 mode.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The POP3 UTF8 extension allows the client to retrieve messages in the UTF-8 encoding and\n\t\t/// may also allow the user to authenticate using a UTF-8 encoded username or password.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has already been authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UTF8 extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tTask EnableUTF8Async (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Get the list of languages supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// query the list of languages supported by the POP3 server that can\n\t\t/// be used for error messages.\n\t\t/// </remarks>\n\t\t/// <returns>The supported languages.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tIList<Pop3Language> GetLanguages (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the list of languages supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// query the list of languages supported by the POP3 server that can\n\t\t/// be used for error messages.\n\t\t/// </remarks>\n\t\t/// <returns>The supported languages.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tTask<IList<Pop3Language>> GetLanguagesAsync (CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Set the language used by the POP3 server for error messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// set the language used by the POP3 server for error messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"lang\">The language code.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"lang\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"lang\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tvoid SetLanguage (string lang, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously set the language used by the POP3 server for error messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// set the language used by the POP3 server for error messages.\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"lang\">The language code.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"lang\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"lang\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tTask SetLanguageAsync (string lang, CancellationToken cancellationToken = default);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3AuthenticationSecretDetector.cs",
    "content": "﻿//\n// Pop3AuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Pop3 {\n\tclass Pop3AuthenticationSecretDetector : IAuthenticationSecretDetector\n\t{\n\t\tstatic readonly IList<AuthenticationSecret> EmptyAuthSecrets = Array.Empty<AuthenticationSecret> ();\n\n\t\tenum Pop3AuthCommandState\n\t\t{\n\t\t\tNone,\n\t\t\tA,\n\t\t\tApop,\n\t\t\tApopUserName,\n\t\t\tApopToken,\n\t\t\tApopNewLine,\n\t\t\tAuth,\n\t\t\tAuthMechanism,\n\t\t\tAuthNewLine,\n\t\t\tAuthToken,\n\t\t\tUser,\n\t\t\tUserName,\n\t\t\tUserNewLine,\n\t\t\tPass,\n\t\t\tPassword,\n\t\t\tPassNewLine,\n\t\t\tError\n\t\t}\n\n\t\tPop3AuthCommandState state;\n\t\tbool isAuthenticating;\n\t\tint commandIndex;\n\n\t\tpublic bool IsAuthenticating {\n\t\t\tget { return isAuthenticating; }\n\t\t\tset {\n\t\t\t\tstate = Pop3AuthCommandState.None;\n\t\t\t\tisAuthenticating = value;\n\t\t\t\tcommandIndex = 0;\n\t\t\t}\n\t\t}\n\n\t\tbool SkipCommand (string command, byte[] buffer, ref int index, int endIndex)\n\t\t{\n\t\t\twhile (index < endIndex && commandIndex < command.Length) {\n\t\t\t\tif (buffer[index] != (byte) command[commandIndex]) {\n\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcommandIndex++;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn commandIndex == command.Length;\n\t\t}\n\n\t\tIList<AuthenticationSecret> DetectApopSecrets (byte[] buffer, int offset, int endIndex)\n\t\t{\n\t\t\tvar secrets = new List<AuthenticationSecret> ();\n\t\t\tint index = offset;\n\t\t\tint startIndex;\n\n\t\t\tif (state == Pop3AuthCommandState.ApopNewLine)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tif (state == Pop3AuthCommandState.Apop) {\n\t\t\t\tif (SkipCommand (\"APOP \", buffer, ref index, endIndex))\n\t\t\t\t\tstate = Pop3AuthCommandState.ApopUserName;\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.ApopUserName) {\n\t\t\t\tstartIndex = index;\n\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) ' ')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index > startIndex)\n\t\t\t\t\tsecrets.Add (new AuthenticationSecret (startIndex, index - startIndex));\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tstate = Pop3AuthCommandState.ApopToken;\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn secrets;\n\t\t\t}\n\n\t\t\tstartIndex = index;\n\n\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\r')\n\t\t\t\tindex++;\n\n\t\t\tif (index < endIndex)\n\t\t\t\tstate = Pop3AuthCommandState.ApopNewLine;\n\n\t\t\tif (index > startIndex)\n\t\t\t\tsecrets.Add (new AuthenticationSecret (startIndex, index - startIndex));\n\n\t\t\treturn secrets;\n\t\t}\n\n\t\tIList<AuthenticationSecret> DetectAuthSecrets (byte[] buffer, int offset, int endIndex)\n\t\t{\n\t\t\tint index = offset;\n\n\t\t\tif (state == Pop3AuthCommandState.Auth) {\n\t\t\t\tif (SkipCommand (\"AUTH \", buffer, ref index, endIndex))\n\t\t\t\t\tstate = Pop3AuthCommandState.AuthMechanism;\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.AuthMechanism) {\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) ' ' && buffer[index] != (byte) '\\r')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) ' ') {\n\t\t\t\t\t\tstate = Pop3AuthCommandState.AuthToken;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = Pop3AuthCommandState.AuthNewLine;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.AuthNewLine) {\n\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\tstate = Pop3AuthCommandState.AuthToken;\n\t\t\t\t\tindex++;\n\t\t\t\t} else {\n\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tint startIndex = index;\n\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\r')\n\t\t\t\tindex++;\n\n\t\t\tif (index < endIndex)\n\t\t\t\tstate = Pop3AuthCommandState.AuthNewLine;\n\n\t\t\tif (index == startIndex)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tvar secret = new AuthenticationSecret (startIndex, index - startIndex);\n\n\t\t\tif (state == Pop3AuthCommandState.AuthNewLine) {\n\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\t\tstate = Pop3AuthCommandState.AuthToken;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new AuthenticationSecret[] { secret };\n\t\t}\n\n\t\tIList<AuthenticationSecret> DetectUserPassSecrets (byte[] buffer, int offset, int endIndex)\n\t\t{\n\t\t\tvar secrets = new List<AuthenticationSecret> ();\n\t\t\tint index = offset;\n\n\t\t\tif (state == Pop3AuthCommandState.User) {\n\t\t\t\tif (SkipCommand (\"USER \", buffer, ref index, endIndex))\n\t\t\t\t\tstate = Pop3AuthCommandState.UserName;\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.UserName) {\n\t\t\t\tint startIndex = index;\n\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\r')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index > startIndex)\n\t\t\t\t\tsecrets.Add (new AuthenticationSecret (startIndex, index - startIndex));\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tstate = Pop3AuthCommandState.UserNewLine;\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn secrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.UserNewLine) {\n\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\tstate = Pop3AuthCommandState.Pass;\n\t\t\t\t\tcommandIndex = 0;\n\t\t\t\t\tindex++;\n\t\t\t\t} else {\n\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn secrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.Pass) {\n\t\t\t\tif (SkipCommand (\"PASS \", buffer, ref index, endIndex))\n\t\t\t\t\tstate = Pop3AuthCommandState.Password;\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.Password) {\n\t\t\t\tint startIndex = index;\n\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\r')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index > startIndex)\n\t\t\t\t\tsecrets.Add (new AuthenticationSecret (startIndex, index - startIndex));\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tstate = Pop3AuthCommandState.PassNewLine;\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn secrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.PassNewLine) {\n\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\tstate = Pop3AuthCommandState.None;\n\t\t\t\t\tcommandIndex = 0;\n\t\t\t\t\tindex++;\n\t\t\t\t} else {\n\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn secrets;\n\t\t}\n\n\t\tpublic IList<AuthenticationSecret> DetectSecrets (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (!IsAuthenticating || state == Pop3AuthCommandState.Error || count == 0)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tint endIndex = offset + count;\n\t\t\tint index = offset;\n\n\t\t\tif (state == Pop3AuthCommandState.None) {\n\t\t\t\tswitch ((char) buffer[index]) {\n\t\t\t\tcase 'A':\n\t\t\t\t\tstate = Pop3AuthCommandState.A;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'U':\n\t\t\t\t\tstate = Pop3AuthCommandState.User;\n\t\t\t\t\tcommandIndex = 1;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == Pop3AuthCommandState.A) {\n\t\t\t\tswitch ((char) buffer[index]) {\n\t\t\t\tcase 'P':\n\t\t\t\t\tstate = Pop3AuthCommandState.Apop;\n\t\t\t\t\tcommandIndex = 2;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'U':\n\t\t\t\t\tstate = Pop3AuthCommandState.Auth;\n\t\t\t\t\tcommandIndex = 2;\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tstate = Pop3AuthCommandState.Error;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || state == Pop3AuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state >= Pop3AuthCommandState.Apop && state <= Pop3AuthCommandState.ApopNewLine)\n\t\t\t\treturn DetectApopSecrets (buffer, index, endIndex);\n\n\t\t\tif (state >= Pop3AuthCommandState.Auth && state <= Pop3AuthCommandState.AuthToken)\n\t\t\t\treturn DetectAuthSecrets (buffer, index, endIndex);\n\n\t\t\treturn DetectUserPassSecrets (buffer, index, endIndex);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Capabilities.cs",
    "content": "﻿//\n// Pop3Capabilities.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// Capabilities supported by a POP3 server.\n\t/// </summary>\n\t/// <remarks>\n\t/// Capabilities are read as part of the response to the <c>CAPA</c> command that\n\t/// is issued during the connection and authentication phases of the\n\t/// <see cref=\"Pop3Client\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\t[Flags]\n\tpublic enum Pop3Capabilities : uint {\n\t\t/// <summary>\n\t\t/// The server does not support any additional extensions.\n\t\t/// </summary>\n\t\tNone                   = 0,\n\n\t\t/// <summary>\n\t\t/// The server supports <a href=\"https://tools.ietf.org/html/rfc1939#page-15\">APOP</a>\n\t\t/// authentication.\n\t\t/// </summary>\n\t\tApop                   = 1 << 0,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2449\">EXPIRE</a> extension\n\t\t/// and defines the expiration policy for messages (see <see cref=\"Pop3Client.ExpirePolicy\"/>).\n\t\t/// </summary>\n\t\tExpire                 = 1 << 1,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2449\">LOGIN-DELAY</a> extension,\n\t\t/// allowing the server to specify to the client a minimum number of seconds between login attempts\n\t\t/// (see <see cref=\"Pop3Client.LoginDelay\"/>).\n\t\t/// </summary>\n\t\tLoginDelay             = 1 << 2,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2449\">PIPELINING</a> extension,\n\t\t/// allowing the client to batch multiple requests to the server at at time.\n\t\t/// </summary>\n\t\tPipelining             = 1 << 3,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2449\">RESP-CODES</a> extension,\n\t\t/// allowing the server to provide clients with extended information in error responses.\n\t\t/// </summary>\n\t\tResponseCodes          = 1 << 4,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2449\">SASL</a> authentication\n\t\t/// extension, allowing the client to authenticate using the advertized authentication mechanisms\n\t\t/// (see <see cref=\"Pop3Client.AuthenticationMechanisms\"/>).\n\t\t/// </summary>\n\t\tSasl                   = 1 << 5,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2595\">STLS</a> extension,\n\t\t/// allowing clients to switch to an encrypted SSL/TLS connection after connecting.\n\t\t/// </summary>\n\t\tStartTLS               = 1 << 6,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc1939#page-11\">TOP</a> command,\n\t\t/// allowing clients to fetch the headers plus an arbitrary number of lines.\n\t\t/// </summary>\n\t\tTop                    = 1 << 7,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc1939#page-12\">UIDL</a> command,\n\t\t/// allowing the client to refer to messages via a UID as opposed to a sequence ID.\n\t\t/// </summary>\n\t\tUIDL                   = 1 << 8,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc1939#page-13\">USER</a>\n\t\t/// authentication command, allowing the client to authenticate via a plain-text username\n\t\t/// and password command (not recommended unless no other authentication mechanisms exist).\n\t\t/// </summary>\n\t\tUser                   = 1 << 9,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6856\">UTF8</a> extension,\n\t\t/// allowing clients to retrieve messages in the UTF-8 encoding.\n\t\t/// </summary>\n\t\tUTF8                   = 1 << 10,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6856\">UTF8=USER</a> extension,\n\t\t/// allowing clients to authenticate using UTF-8 encoded usernames and passwords.\n\t\t/// </summary>\n\t\tUTF8User               = 1 << 11,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6856\">LANG</a> extension,\n\t\t/// allowing clients to specify which language the server should use for error strings.\n\t\t/// </summary>\n\t\tLang                   = 1 << 12,\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Client.cs",
    "content": "﻿//\n// Pop3Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Buffers;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Security.Cryptography;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MimeKit;\nusing MimeKit.IO;\n\nusing MailKit.Security;\n\nusing SslStream = MailKit.Net.SslStream;\nusing AuthenticationException = MailKit.Security.AuthenticationException;\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// A POP3 client that can be used to retrieve messages from a server.\n\t/// </summary>\n\t/// <remarks>\n\t/// The <see cref=\"Pop3Client\"/> class supports both the \"pop\" and \"pops\" protocols. The \"pop\" protocol\n\t/// makes a clear-text connection to the POP3 server and does not use SSL or TLS unless the POP3 server\n\t/// supports the <a href=\"https://tools.ietf.org/html/rfc2595\">STLS</a> extension. The \"pops\" protocol,\n\t/// however, connects to the POP3 server using an SSL-wrapped connection.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t/// </example>\n\tpublic partial class Pop3Client : MailSpool, IPop3Client\n\t{\n\t\t[Flags]\n\t\tenum ProbedCapabilities : byte {\n\t\t\tNone   = 0,\n\t\t\tTop    = (1 << 0),\n\t\t\tUIDL   = (1 << 1)\n\t\t}\n\n\t\tstatic readonly char[] Space = new char[] { ' ' };\n\n\t\treadonly Pop3AuthenticationSecretDetector detector = new Pop3AuthenticationSecretDetector ();\n\t\treadonly MimeParser parser = new MimeParser (Stream.Null);\n\t\treadonly Pop3Engine engine;\n\t\tSslCertificateValidationInfo? sslValidationInfo;\n\t\tProbedCapabilities probed;\n\t\tbool disposed, disconnecting, utf8;\n\t\tint timeout = 2 * 60 * 1000;\n\t\tlong octets;\n\t\tint total;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can retrieve messages with the <see cref=\"Pop3Client\"/>, you must first call\n\t\t/// one of the <a href=\"Overload_MailKit_Net_Pop3_Pop3Client_Connect.htm\">Connect</a> methods\n\t\t/// and authenticate using one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Pop3_Pop3Client_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"ProtocolLogger\"/>\n\t\t/// </example>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic Pop3Client (IProtocolLogger protocolLogger) : base (protocolLogger)\n\t\t{\n\t\t\tprotocolLogger.AuthenticationSecretDetector = detector;\n\t\t\tengine = new Pop3Engine ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can retrieve messages with the <see cref=\"Pop3Client\"/>, you must first call\n\t\t/// one of the <a href=\"Overload_MailKit_Net_Pop3_Pop3Client_Connect.htm\">Connect</a> methods\n\t\t/// and authenticate using one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Pop3_Pop3Client_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\tpublic Pop3Client () : this (new NullProtocolLogger ())\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets an object that can be used to synchronize access to the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets an object that can be used to synchronize access to the POP3 server.</para>\n\t\t/// <para>When using the non-Async methods from multiple threads, it is important to lock the\n\t\t/// <see cref=\"SyncRoot\"/> object for thread safety when using the synchronous methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The lock object.</value>\n\t\tpublic override object SyncRoot {\n\t\t\tget { return engine; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the protocol supported by the message service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the protocol supported by the message service.\n\t\t/// </remarks>\n\t\t/// <value>The protocol.</value>\n\t\tprotected override string Protocol {\n\t\t\tget { return \"pop\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the capabilities supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been made \n\t\t/// and may change once the client is authenticated.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The capabilities.</value>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// Capabilities cannot be enabled, they may only be disabled.\n\t\t/// </exception>\n\t\tpublic Pop3Capabilities Capabilities {\n\t\t\tget { return engine.Capabilities; }\n\t\t\tset {\n\t\t\t\tif ((engine.Capabilities | value) > engine.Capabilities)\n\t\t\t\t\tthrow new ArgumentException (\"Capabilities cannot be enabled, they may only be disabled.\", nameof (value));\n\n\t\t\t\tengine.Capabilities = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the expiration policy.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>If the server supports the EXPIRE capability (<see cref=\"Pop3Capabilities.Expire\"/>), the value\n\t\t/// of the <see cref=\"ExpirePolicy\"/> property will reflect the value advertized by the server.</para>\n\t\t/// <para>A value of <c>-1</c> indicates that messages will never expire.</para>\n\t\t/// <para>A value of <c>0</c> indicates that messages that have been retrieved during the current session\n\t\t/// will be purged immediately after the connection is closed via the <c>QUIT</c> command.</para>\n\t\t/// <para>Values larger than <c>0</c> indicate the minimum number of days that the server will retain\n\t\t/// messages which have been retrieved.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The expiration policy.</value>\n\t\tpublic int ExpirePolicy {\n\t\t\tget { return engine.ExpirePolicy; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the implementation details of the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the server advertizes its implementation details, this value will be set to a string containing the\n\t\t/// information details provided by the server.\n\t\t/// </remarks>\n\t\t/// <value>The implementation details.</value>\n\t\tpublic string? Implementation {\n\t\t\tget { return engine.Implementation; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the minimum delay, in milliseconds, between logins.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the server supports the LOGIN-DELAY capability (<see cref=\"Pop3Capabilities.LoginDelay\"/>), this value\n\t\t/// will be set to the minimum number of milliseconds that the client must wait between logins.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The login delay.</value>\n\t\tpublic int LoginDelay {\n\t\t\tget { return engine.LoginDelay; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the size of the POP3 mailbox, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the size of the POP3 mailbox, in bytes.</para>\n\t\t/// <para>This value is updated as a side-effect of calling <see cref=\"GetMessageCount\"/> or <see cref=\"GetMessageCountAsync\"/>.</para>\n\t\t/// </remarks>\n\t\t/// <value>The size of the mailbox if available.</value>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic long Size {\n\t\t\tget {\n\t\t\t\tCheckDisposed ();\n\t\t\t\tCheckConnected ();\n\t\t\t\tCheckAuthenticated ();\n\n\t\t\t\treturn octets;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (Pop3Client));\n\t\t}\n\n\t\tvoid CheckConnected ()\n\t\t{\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The Pop3Client is not connected.\");\n\t\t}\n\n\t\tvoid CheckAuthenticated ()\n\t\t{\n\t\t\tif (!IsAuthenticated)\n\t\t\t\tthrow new ServiceNotAuthenticatedException (\"The Pop3Client has not been authenticated.\");\n\t\t}\n\n\t\tbool ValidateRemoteCertificate (object? sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\tvar host = engine.Uri!.Host;\n\t\t\tbool valid;\n\n\t\t\tsslValidationInfo?.Dispose ();\n\t\t\tsslValidationInfo = null;\n\n\t\t\tif (ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n#if NETFRAMEWORK\n\t\t\t} else if (ServicePointManager.ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServicePointManager.ServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n#endif\n\t\t\t} else {\n\t\t\t\tvalid = DefaultServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\tif (!valid) {\n\t\t\t\t// Note: The SslHandshakeException.Create() method will nullify this once it's done using it.\n\t\t\t\tsslValidationInfo = new SslCertificateValidationInfo (host, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\treturn valid;\n\t\t}\n\n\t\tstatic ProtocolException CreatePop3ParseException (Exception innerException, string format, params object[] args)\n\t\t{\n\t\t\treturn new Pop3ProtocolException (string.Format (CultureInfo.InvariantCulture, format, args), innerException);\n\t\t}\n\n\t\tstatic ProtocolException CreatePop3ParseException (string format, params object[] args)\n\t\t{\n\t\t\treturn new Pop3ProtocolException (string.Format (CultureInfo.InvariantCulture, format, args));\n\t\t}\n\n\t\tstatic int GetExpectedSequenceId (Pop3Command pc)\n\t\t{\n\t\t\tint index = pc.Command.IndexOf (' ') + 1;\n\t\t\tint endIndex = pc.Command.IndexOf ('\\r', index);\n\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t\tvar seqid = pc.Command.AsSpan (index, endIndex - index);\n#else\n\t\t\tvar seqid = pc.Command.Substring (index, endIndex - index);\n#endif\n\n\t\t\treturn int.Parse (seqid, NumberStyles.None, CultureInfo.InvariantCulture);\n\t\t}\n\n\t\tvoid SendCommand (CancellationToken token, string command)\n\t\t{\n\t\t\tengine.QueueCommand (null, Encoding.ASCII, command);\n\n\t\t\tengine.Run (true, token);\n\t\t}\n\n\t\tstring SendCommand (CancellationToken token, string format, params object[] args)\n\t\t{\n\t\t\treturn SendCommand (token, Encoding.ASCII, format, args);\n\t\t}\n\n\t\tstring SendCommand (CancellationToken token, Encoding encoding, string format, params object[] args)\n\t\t{\n\t\t\tvar pc = engine.QueueCommand (null, encoding, format, args);\n\n\t\t\tengine.Run (true, token);\n\n\t\t\treturn pc.StatusText ?? string.Empty;\n\t\t}\n\n\t\t#region IMailService implementation\n\n\t\t/// <summary>\n\t\t/// Gets the authentication mechanisms supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The authentication mechanisms are queried as part of the\n\t\t/// connection process.</para>\n\t\t/// <para>Servers that do not support the SASL capability will typically\n\t\t/// support either the <c>APOP</c> authentication mechanism\n\t\t/// (<see cref=\"Pop3Capabilities.Apop\"/>) or the ability to login using the\n\t\t/// <c>USER</c> and <c>PASS</c> commands (<see cref=\"Pop3Capabilities.User\"/>).\n\t\t/// </para>\n\t\t/// <note type=\"tip\"><para>To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before authenticating.</para>\n\t\t/// <para>In the case of the APOP authentication mechanism, remove it from the\n\t\t/// <see cref=\"Capabilities\"/> property instead.</para></note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The authentication mechanisms.</value>\n\t\tpublic override HashSet<string> AuthenticationMechanisms {\n\t\t\tget { return engine.AuthenticationMechanisms; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the timeout for network streaming operations, in milliseconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying socket stream's <see cref=\"System.IO.Stream.ReadTimeout\"/>\n\t\t/// and <see cref=\"System.IO.Stream.WriteTimeout\"/> values.\n\t\t/// </remarks>\n\t\t/// <value>The timeout in milliseconds.</value>\n\t\tpublic override int Timeout {\n\t\t\tget { return timeout; }\n\t\t\tset {\n\t\t\t\tif (engine.IsConnected && engine.Stream.CanTimeout) {\n\t\t\t\t\tengine.Stream.WriteTimeout = value;\n\t\t\t\t\tengine.Stream.ReadTimeout = value;\n\t\t\t\t}\n\n\t\t\t\ttimeout = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the client is currently connected to an POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <see cref=\"IsConnected\"/> state is set to <see langword=\"true\" /> immediately after\n\t\t/// one of the <a href=\"Overload_MailKit_Net_Pop3_Pop3Client_Connect.htm\">Connect</a>\n\t\t/// methods succeeds and is not set back to <see langword=\"false\" /> until either the client\n\t\t/// is disconnected via <see cref=\"Disconnect(bool,CancellationToken)\"/> or until a\n\t\t/// <see cref=\"Pop3ProtocolException\"/> is thrown while attempting to read or write to\n\t\t/// the underlying network socket.</para>\n\t\t/// <para>When an <see cref=\"Pop3ProtocolException\"/> is caught, the connection state of the\n\t\t/// <see cref=\"Pop3Client\"/> should be checked before continuing.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"ExceptionHandling\"/>\n\t\t/// </example>\n\t\t/// <value><see langword=\"true\" /> if the client is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsConnected {\n\t\t\tget { return engine.IsConnected; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsSecure {\n\t\t\tget { return engine.IsSecure; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is encrypted; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsEncrypted {\n\t\t\tget { return engine.IsSecure && (engine.Stream.Stream is SslStream sslStream) && sslStream.IsEncrypted; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is signed; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsSigned {\n\t\t\tget { return engine.IsSecure && (engine.Stream.Stream is SslStream sslStream) && sslStream.IsSigned; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the negotiated SSL or TLS protocol version once an SSL or TLS connection has been made.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS protocol version.</value>\n\t\tpublic override SslProtocols SslProtocol {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.SslProtocol;\n\n\t\t\t\treturn SslProtocols.None;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override CipherAlgorithmType? SslCipherAlgorithm {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.CipherAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslCipherStrength {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.CipherStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n#if NET5_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher suite.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher suite once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher suite.</value>\n\t\tpublic override TlsCipherSuite? SslCipherSuite {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.NegotiatedCipherSuite;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override HashAlgorithmType? SslHashAlgorithm {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.HashAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslHashStrength {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.HashStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override ExchangeAlgorithmType? SslKeyExchangeAlgorithm {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.KeyExchangeAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslKeyExchangeStrength {\n\t\t\tget {\n\t\t\t\tif (engine.IsSecure && (engine.Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.KeyExchangeStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently authenticated with the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the client is currently authenticated with the POP3 server.</para>\n\t\t/// <para>To authenticate with the POP3 server, use one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Pop3_Pop3Client_Authenticate.htm\">Authenticate</a> methods.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is authenticated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsAuthenticated {\n\t\t\tget { return engine.State == Pop3EngineState.Transaction; }\n\t\t}\n\n\t\tTask ProcessStatResponse (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\t// the response should be \"<count> <total size>\"\n\t\t\tvar tokens = text.Split (Space, StringSplitOptions.RemoveEmptyEntries);\n\n\t\t\tif (tokens.Length < 2) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an incomplete response to the STAT command: {0}\", text);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[0], NumberStyles.None, CultureInfo.InvariantCulture, out total) || total < 0) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an invalid response to the STAT command: {0}\", text);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tif (!long.TryParse (tokens[1], NumberStyles.Integer, CultureInfo.InvariantCulture, out octets)) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an invalid response to the STAT command: {0}\", text);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tint UpdateMessageCount (CancellationToken cancellationToken)\n\t\t{\n\t\t\tengine.QueueCommand (ProcessStatResponse, \"STAT\\r\\n\");\n\n\t\t\tengine.Run (true, cancellationToken);\n\n\t\t\treturn Count;\n\t\t}\n\n\t\tvoid ProbeCapabilities (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif ((engine.Capabilities & Pop3Capabilities.UIDL) == 0 && (probed & ProbedCapabilities.UIDL) == 0) {\n\t\t\t\t// if the message count is > 0, we can probe the UIDL command\n\t\t\t\tif (total > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tGetMessageUid (0, cancellationToken);\n\t\t\t\t\t} catch (NotSupportedException) {\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tclass SaslAuthContext\n\t\t{\n\t\t\treadonly SaslMechanism mechanism;\n\t\t\treadonly Pop3Client client;\n\n\t\t\tpublic SaslAuthContext (Pop3Client client, SaslMechanism mechanism)\n\t\t\t{\n\t\t\t\tthis.mechanism = mechanism;\n\t\t\t\tthis.client = client;\n\t\t\t}\n\n\t\t\tpublic string? AuthMessage {\n\t\t\t\tget; private set;\n\t\t\t}\n\n\t\t\tPop3Engine Engine {\n\t\t\t\tget { return client.engine; }\n\t\t\t}\n\n\t\t\tvoid OnDataReceived (Pop3Engine pop3, Pop3Command pc, string text, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tpop3.CheckConnected ();\n\n\t\t\t\twhile (pc.Status == Pop3CommandStatus.Continue && !mechanism.IsAuthenticated) {\n\t\t\t\t\tvar challenge = mechanism.Challenge (text, cancellationToken);\n\t\t\t\t\tvar buf = Encoding.ASCII.GetBytes (challenge + \"\\r\\n\");\n\n\t\t\t\t\tpop3.Stream.Write (buf, 0, buf.Length, cancellationToken);\n\t\t\t\t\tpop3.Stream.Flush (cancellationToken);\n\n\t\t\t\t\tvar response = pop3.ReadLine (cancellationToken).TrimEnd ();\n\t\t\t\t\tpc.Status = Pop3Engine.GetCommandStatus (response, out text);\n\t\t\t\t\tpc.StatusText = text;\n\n\t\t\t\t\tif (pc.Status == Pop3CommandStatus.ProtocolError)\n\t\t\t\t\t\tthrow new Pop3ProtocolException (string.Format (\"Unexpected response from server: {0}\", response));\n\t\t\t\t}\n\n\t\t\t\tAuthMessage = text;\n\t\t\t}\n\n\t\t\tasync Task OnDataReceivedAsync (Pop3Engine pop3, Pop3Command pc, string text, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tpop3.CheckConnected ();\n\n\t\t\t\twhile (pc.Status == Pop3CommandStatus.Continue && !mechanism.IsAuthenticated) {\n\t\t\t\t\tvar challenge = await mechanism.ChallengeAsync (text, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tvar buf = Encoding.ASCII.GetBytes (challenge + \"\\r\\n\");\n\n\t\t\t\t\tawait pop3.Stream.WriteAsync (buf, 0, buf.Length, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tawait pop3.Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tvar response = (await pop3.ReadLineAsync (cancellationToken).ConfigureAwait (false)).TrimEnd ();\n\t\t\t\t\tpc.Status = Pop3Engine.GetCommandStatus (response, out text);\n\t\t\t\t\tpc.StatusText = text;\n\n\t\t\t\t\tif (pc.Status == Pop3CommandStatus.ProtocolError)\n\t\t\t\t\t\tthrow new Pop3ProtocolException (string.Format (\"Unexpected response from server: {0}\", response));\n\t\t\t\t}\n\n\t\t\t\tAuthMessage = text;\n\t\t\t}\n\n\t\t\tTask OnDataReceived (Pop3Engine pop3, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (doAsync)\n\t\t\t\t\treturn OnDataReceivedAsync (pop3, pc, text, cancellationToken);\n\n\t\t\t\tOnDataReceived (pop3, pc, text, cancellationToken);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tpublic Pop3Command Authenticate (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tvar pc = Engine.QueueCommand (OnDataReceived, \"AUTH {0}\\r\\n\", mechanism.MechanismName);\n\n\t\t\t\tAuthMessage = string.Empty;\n\n\t\t\t\tclient.detector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Note: We defer throwing exceptions on command failure so that our caller can continue trying other authentication mechanisms.\n\t\t\t\t\tEngine.Run (false, cancellationToken);\n\t\t\t\t} finally {\n\t\t\t\t\tclient.detector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\treturn pc;\n\t\t\t}\n\n\t\t\tpublic async Task<Pop3Command> AuthenticateAsync (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tvar pc = Engine.QueueCommand (OnDataReceived, \"AUTH {0}\\r\\n\", mechanism.MechanismName);\n\n\t\t\t\tAuthMessage = string.Empty;\n\n\t\t\t\tclient.detector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Note: We defer throwing exceptions on command failure so that our caller can continue trying other authentication mechanisms.\n\t\t\t\t\tawait Engine.RunAsync (false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} finally {\n\t\t\t\t\tclient.detector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\treturn pc;\n\t\t\t}\n\t\t}\n\n\t\tUri CheckCanAuthenticate (SaslMechanism mechanism, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (mechanism == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mechanism));\n\n\t\t\tif (!engine.IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The Pop3Client must be connected before you can authenticate.\");\n\n\t\t\tif (IsAuthenticated)\n\t\t\t\tthrow new InvalidOperationException (\"The Pop3Client is already authenticated.\");\n\n\t\t\tCheckDisposed ();\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\treturn new Uri (\"pop://\" + engine.Uri.Host);\n\t\t}\n\n\t\tSaslAuthContext GetSaslAuthContext (SaslMechanism mechanism, Uri saslUri)\n\t\t{\n\t\t\tmechanism.ChannelBindingContext = engine.Stream!.Stream as IChannelBindingContext;\n\t\t\tmechanism.Uri = saslUri;\n\n\t\t\treturn new SaslAuthContext (this, mechanism);\n\t\t}\n\n\t\tvoid OnAuthenticated (string message, CancellationToken cancellationToken)\n\t\t{\n\t\t\tengine.State = Pop3EngineState.Transaction;\n\n\t\t\tengine.QueryCapabilities (cancellationToken);\n\t\t\tUpdateMessageCount (cancellationToken);\n\t\t\tProbeCapabilities (cancellationToken);\n\t\t\tOnAuthenticated (message);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// An POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Authenticate (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar saslUri = CheckCanAuthenticate (mechanism, cancellationToken);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tvar ctx = GetSaslAuthContext (mechanism, saslUri);\n\n\t\t\t\tvar pc = ctx.Authenticate (cancellationToken);\n\n\t\t\t\tif (pc.Status == Pop3CommandStatus.Error)\n\t\t\t\t\tthrow new AuthenticationException ();\n\n\t\t\t\tpc.ThrowIfError ();\n\n\t\t\t\tOnAuthenticated (ctx.AuthMessage!, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tUri CheckCanAuthenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tif (credentials == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (credentials));\n\n\t\t\tif (!engine.IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The Pop3Client must be connected before you can authenticate.\");\n\n\t\t\tif (IsAuthenticated)\n\t\t\t\tthrow new InvalidOperationException (\"The Pop3Client is already authenticated.\");\n\n\t\t\tCheckDisposed ();\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\treturn new Uri (\"pop://\" + engine.Uri.Host);\n\t\t}\n\n\t\tstring GetApopCommand (Encoding encoding, NetworkCredential cred)\n\t\t{\n\t\t\tvar userName = utf8 ? SaslMechanism.SaslPrep (cred.UserName) : cred.UserName;\n\t\t\tvar password = utf8 ? SaslMechanism.SaslPrep (cred.Password) : cred.Password;\n\t\t\tvar challenge = engine.ApopToken + password;\n\t\t\tvar md5sum = new StringBuilder ();\n\t\t\tbyte[] digest;\n\n\t\t\tusing (var md5 = MD5.Create ())\n\t\t\t\tdigest = md5.ComputeHash (encoding.GetBytes (challenge));\n\n\t\t\tfor (int i = 0; i < digest.Length; i++)\n\t\t\t\tmd5sum.Append (digest[i].ToString (\"x2\"));\n\n\t\t\treturn $\"APOP {userName} {md5sum}\\r\\n\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the POP3 server supports the APOP authentication mechanism,\n\t\t/// then APOP is used.</para>\n\t\t/// <para>If the APOP authentication mechanism is not supported and the\n\t\t/// server supports one or more SASL authentication mechanisms, then\n\t\t/// the SASL mechanisms that both the client and server support (not including\n\t\t/// any OAUTH mechanisms) are tried in order of greatest security to weakest\n\t\t/// security. Once a SASL authentication mechanism is found that both client\n\t\t/// and server support, the credentials are used to authenticate.</para>\n\t\t/// <para>If the server does not support SASL or if no common SASL mechanisms\n\t\t/// can be found, then the <c>USER</c> and <c>PASS</c> commands are used as a\n\t\t/// fallback.</para>\n\t\t/// <note type=\"tip\"><para>To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</para>\n\t\t/// <para>In the case of the APOP authentication mechanism, remove it from the\n\t\t/// <see cref=\"Capabilities\"/> property instead.</para></note>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// An POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Authenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar saslUri = CheckCanAuthenticate (encoding, credentials, cancellationToken);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tstring userName, password;\n\t\t\t\tNetworkCredential? cred;\n\t\t\t\tstring? message = null;\n\n\t\t\t\tif ((engine.Capabilities & Pop3Capabilities.Apop) != 0 && (cred = credentials.GetCredential (saslUri, \"APOP\")) != null) {\n\t\t\t\t\tvar apop = GetApopCommand (encoding, cred);\n\n\t\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmessage = SendCommand (cancellationToken, encoding, apop);\n\t\t\t\t\t\tengine.State = Pop3EngineState.Transaction;\n\t\t\t\t\t} catch (Pop3CommandException) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (engine.State == Pop3EngineState.Transaction) {\n\t\t\t\t\t\tOnAuthenticated (message ?? string.Empty, cancellationToken);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ((engine.Capabilities & Pop3Capabilities.Sasl) != 0) {\n\t\t\t\t\tforeach (var authmech in SaslMechanism.Rank (engine.AuthenticationMechanisms)) {\n\t\t\t\t\t\tSaslMechanism? sasl;\n\n\t\t\t\t\t\tcred = credentials.GetCredential (saslUri, authmech);\n\n\t\t\t\t\t\tif (cred == null || (sasl = SaslMechanism.Create (authmech, encoding, cred)) == null)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\t\tvar ctx = GetSaslAuthContext (sasl, saslUri);\n\n\t\t\t\t\t\tvar pc = ctx.Authenticate (cancellationToken);\n\n\t\t\t\t\t\tif (pc.Status == Pop3CommandStatus.Error)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tpc.ThrowIfError ();\n\n\t\t\t\t\t\tOnAuthenticated (ctx.AuthMessage!, cancellationToken);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// fall back to the classic USER & PASS commands...\n\t\t\t\tif ((cred = credentials.GetCredential (saslUri, \"DEFAULT\")) == null)\n\t\t\t\t\tthrow new AuthenticationException (\"No credentials could be found for the POP3 server.\");\n\n\t\t\t\tuserName = utf8 ? SaslMechanism.SaslPrep (cred.UserName) : cred.UserName;\n\t\t\t\tpassword = utf8 ? SaslMechanism.SaslPrep (cred.Password) : cred.Password;\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tSendCommand (cancellationToken, encoding, \"USER {0}\\r\\n\", userName);\n\t\t\t\t\tmessage = SendCommand (cancellationToken, encoding, \"PASS {0}\\r\\n\", password);\n\t\t\t\t} catch (Pop3CommandException) {\n\t\t\t\t\tthrow new AuthenticationException ();\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tOnAuthenticated (message, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tinternal static void ComputeDefaultValues (string host, ref int port, ref SecureSocketOptions options, out Uri uri, out bool starttls)\n\t\t{\n\t\t\tswitch (options) {\n\t\t\tdefault:\n\t\t\t\tif (port == 0)\n\t\t\t\t\tport = 110;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.Auto:\n\t\t\t\tswitch (port) {\n\t\t\t\tcase 0: port = 110; goto default;\n\t\t\t\tcase 995: options = SecureSocketOptions.SslOnConnect; break;\n\t\t\t\tdefault: options = SecureSocketOptions.StartTlsWhenAvailable; break;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.SslOnConnect:\n\t\t\t\tif (port == 0)\n\t\t\t\t\tport = 995;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (IPAddress.TryParse (host, out var ip) && ip.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\thost = \"[\" + host + \"]\";\n\n\t\t\tswitch (options) {\n\t\t\tcase SecureSocketOptions.StartTlsWhenAvailable:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"pop://{0}:{1}/?starttls=when-available\", host, port));\n\t\t\t\tstarttls = true;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.StartTls:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"pop://{0}:{1}/?starttls=always\", host, port));\n\t\t\t\tstarttls = true;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.SslOnConnect:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"pops://{0}:{1}\", host, port));\n\t\t\t\tstarttls = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"pop://{0}:{1}\", host, port));\n\t\t\t\tstarttls = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckCanConnect (string host, int port)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The host name cannot be empty.\", nameof (host));\n\n\t\t\tif (port < 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (IsConnected)\n\t\t\t\tthrow new InvalidOperationException (\"The Pop3Client is already connected.\");\n\t\t}\n\n\t\tvoid SslHandshake (SslStream ssl, string host, CancellationToken cancellationToken)\n\t\t{\n#if NET5_0_OR_GREATER\n\t\t\tssl.AuthenticateAsClient (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate));\n#else\n\t\t\tssl.AuthenticateAsClient (host, ClientCertificates, SslProtocols, CheckCertificateRevocation);\n#endif\n\t\t}\n\n\t\tvoid PostConnect (Stream stream, string host, int port, SecureSocketOptions options, bool starttls, CancellationToken cancellationToken)\n\t\t{\n\t\t\tprobed = ProbedCapabilities.None;\n\n\t\t\ttry {\n\t\t\t\tProtocolLogger.LogConnect (engine.Uri!);\n\t\t\t} catch {\n\t\t\t\tstream.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tvar pop3 = new Pop3Stream (stream, ProtocolLogger);\n\n\t\t\tengine.Connect (pop3, cancellationToken);\n\n\t\t\ttry {\n\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\n\t\t\t\tif (options == SecureSocketOptions.StartTls && (engine.Capabilities & Pop3Capabilities.StartTLS) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the STLS extension.\");\n\n\t\t\t\tif (starttls && (engine.Capabilities & Pop3Capabilities.StartTLS) != 0) {\n\t\t\t\t\tSendCommand (cancellationToken, \"STLS\\r\\n\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar tls = new SslStream (stream, false, ValidateRemoteCertificate);\n\t\t\t\t\t\tpop3.Stream = tls;\n\n\t\t\t\t\t\tSslHandshake (tls, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, true, \"POP3\", host, port, 995, 110);\n\t\t\t\t\t}\n\n\t\t\t\t\tengine.IsSecure = true;\n\n\t\t\t\t\t// re-issue a CAPA command\n\t\t\t\t\tengine.QueryCapabilities (cancellationToken);\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tengine.Disconnect (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tengine.Disconnected += OnEngineDisconnected;\n\t\t\tOnConnected (host, port, options);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified POP3 or POP3/S server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified POP3 or POP3/S server.</para>\n\t\t/// <para>If the <paramref name=\"port\"/> has a value of <c>0</c>, then the\n\t\t/// <paramref name=\"options\"/> parameter is used to determine the default port to\n\t\t/// connect to. The default port used with <see cref=\"SecureSocketOptions.SslOnConnect\"/>\n\t\t/// is <c>995</c>. All other values will use a default port of <c>110</c>.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>995</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the POP3 server does not support the STLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (host, port);\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tvar stream = ConnectNetwork (host, port, cancellationToken);\n\t\t\t\tstream.WriteTimeout = timeout;\n\t\t\t\tstream.ReadTimeout = timeout;\n\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tSslHandshake (ssl, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"POP3\", host, port, 995, 110);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream = ssl;\n\t\t\t\t}\n\n\t\t\t\tPostConnect (stream, host, port, options, starttls, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckCanConnect (Stream stream, string host, int port)\n\t\t{\n\t\t\tif (stream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (stream));\n\n\t\t\tCheckCanConnect (host, port);\n\t\t}\n\n\t\tvoid CheckCanConnect (Socket socket, string host, int port)\n\t\t{\n\t\t\tif (socket == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (socket));\n\n\t\t\tif (!socket.Connected)\n\t\t\t\tthrow new ArgumentException (\"The socket is not connected.\", nameof (socket));\n\n\t\t\tCheckCanConnect (host, port);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified POP3 or POP3/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified POP3 or POP3/S server using\n\t\t/// the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>995</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the POP3 server does not support the STLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (socket, host, port);\n\n\t\t\tConnect (new NetworkStream (socket, true), host, port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified POP3 or POP3/S server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified POP3 or POP3/S server using\n\t\t/// the provided stream.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>995</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the POP3 server does not support the STLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanConnect (stream, host, port);\n\n\t\t\tStream network;\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out var uri, out var starttls);\n\n\t\t\tusing var operation = engine.StartNetworkOperation (NetworkOperationKind.Connect, uri);\n\n\t\t\ttry {\n\t\t\t\tengine.Uri = uri;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tSslHandshake (ssl, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"POP3\", host, port, 995, 110);\n\t\t\t\t\t}\n\n\t\t\t\t\tnetwork = ssl;\n\t\t\t\t} else {\n\t\t\t\t\tnetwork = stream;\n\t\t\t\t}\n\n\t\t\t\tif (network.CanTimeout) {\n\t\t\t\t\tnetwork.WriteTimeout = timeout;\n\t\t\t\t\tnetwork.ReadTimeout = timeout;\n\t\t\t\t}\n\n\t\t\t\tPostConnect (network, host, port, options, starttls, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic override void Disconnect (bool quit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!engine.IsConnected)\n\t\t\t\treturn;\n\n\t\t\tif (quit) {\n\t\t\t\ttry {\n\t\t\t\t\tSendCommand (cancellationToken, \"QUIT\\r\\n\");\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t} catch (Pop3ProtocolException) {\n\t\t\t\t} catch (Pop3CommandException) {\n\t\t\t\t} catch (IOException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisconnecting = true;\n\t\t\tengine.Disconnect (null);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message count.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message count.\n\t\t/// </remarks>\n\t\t/// <returns>The message count.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override int GetMessageCount (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\treturn UpdateMessageCount (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Ping the POP3 server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>Mail servers, if left idle for too long, will automatically drop the connection.</remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void NoOp (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tSendCommand (cancellationToken, \"NOOP\\r\\n\");\n\t\t}\n\n\t\tvoid OnEngineDisconnected (object? sender, EventArgs e)\n\t\t{\n\t\t\tvar options = SecureSocketOptions.None;\n\t\t\tbool requested = disconnecting;\n\t\t\tstring? host = null;\n\t\t\tint port = 0;\n\n\t\t\tif (engine.Uri != null) {\n\t\t\t\toptions = GetSecureSocketOptions (engine.Uri);\n\t\t\t\thost = engine.Uri.Host;\n\t\t\t\tport = engine.Uri.Port;\n\t\t\t}\n\n\t\t\tengine.Disconnected -= OnEngineDisconnected;\n\t\t\tdisconnecting = utf8 = false;\n\t\t\toctets = total = 0;\n\t\t\tengine.Uri = null;\n\n\t\t\tif (host != null)\n\t\t\t\tOnDisconnected (host, port, options, requested);\n\t\t}\n\n\t\t#endregion\n\n\t\tbool CheckCanEnableUTF8 ()\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif (engine.State != Pop3EngineState.Connected)\n\t\t\t\tthrow new InvalidOperationException (\"You must enable UTF-8 mode before authenticating.\");\n\n\t\t\tif ((engine.Capabilities & Pop3Capabilities.UTF8) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the UTF8 extension.\");\n\n\t\t\treturn !utf8;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Enable UTF8 mode.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The POP3 UTF8 extension allows the client to retrieve messages in the UTF-8 encoding and\n\t\t/// may also allow the user to authenticate using a UTF-8 encoded username or password.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has already been authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UTF8 extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void EnableUTF8 (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanEnableUTF8 ())\n\t\t\t\treturn;\n\n\t\t\tSendCommand (cancellationToken, \"UTF8\\r\\n\");\n\t\t\tutf8 = true;\n\t\t}\n\n\t\tstatic void ReadLangResponse (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar langs = (List<Pop3Language>) pc.UserData!;\n\n\t\t\tdo {\n\t\t\t\tvar response = engine.ReadLine (cancellationToken);\n\n\t\t\t\tif (response == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tvar tokens = response.Split (Space, 2);\n\t\t\t\tif (tokens.Length != 2)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlangs.Add (new Pop3Language (tokens[0], tokens[1]));\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic Task ProcessLangResponse (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ReadLangResponseAsync (engine, pc, cancellationToken);\n\n\t\t\tReadLangResponse (engine, pc, cancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tPop3Command QueueLangCommand (out List<Pop3Language> langs)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif ((Capabilities & Pop3Capabilities.Lang) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the LANG extension.\");\n\n\t\t\tvar pc = engine.QueueCommand (ProcessLangResponse, \"LANG\\r\\n\");\n\t\t\tpc.UserData = langs = new List<Pop3Language> ();\n\n\t\t\treturn pc;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the list of languages supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// query the list of languages supported by the POP3 server that can\n\t\t/// be used for error messages.\n\t\t/// </remarks>\n\t\t/// <returns>The supported languages.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic IList<Pop3Language> GetLanguages (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueLangCommand (out var langs);\n\n\t\t\tengine.Run (true, cancellationToken);\n\n\t\t\treturn new ReadOnlyCollection<Pop3Language> (langs);\n\t\t}\n\n\t\tvoid CheckCanSetLanguage (string lang)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\n\t\t\tif (lang == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (lang));\n\n\t\t\tif (lang.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The language code cannot be empty.\", nameof (lang));\n\n\t\t\tif ((Capabilities & Pop3Capabilities.Lang) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the LANG extension.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Set the language used by the POP3 server for error messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If the POP3 server supports the LANG extension, it is possible to\n\t\t/// set the language used by the POP3 server for error messages.\n\t\t/// </remarks>\n\t\t/// <param name=\"lang\">The language code.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"lang\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"lang\"/> is empty.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the LANG extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic void SetLanguage (string lang, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanSetLanguage (lang);\n\n\t\t\tSendCommand (cancellationToken, $\"LANG {lang}\\r\\n\");\n\t\t}\n\n\t\t#region IMailSpool implementation\n\n\t\t/// <summary>\n\t\t/// Get the number of messages available in the message spool.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the number of messages available on the POP3 server.</para>\n\t\t/// <para>Once authenticated, the <see cref=\"Count\"/> property will be set\n\t\t/// to the number of available messages on the POP3 server.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <value>The message count.</value>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic override int Count {\n\t\t\tget {\n\t\t\t\tCheckDisposed ();\n\t\t\t\tCheckConnected ();\n\t\t\t\tCheckAuthenticated ();\n\n\t\t\t\treturn total;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the <see cref=\"Pop3Client\"/> supports referencing messages by UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Not all servers support referencing messages by UID, so this property should\n\t\t/// be checked before using <see cref=\"GetMessageUid(int, CancellationToken)\"/>\n\t\t/// and <see cref=\"GetMessageUids(CancellationToken)\"/>.</para>\n\t\t/// <para>If the server does not support UIDs, then all methods that take UID arguments\n\t\t/// along with <see cref=\"GetMessageUid(int, CancellationToken)\"/> and\n\t\t/// <see cref=\"GetMessageUids(CancellationToken)\"/> will fail.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if supports UIDs; otherwise, <see langword=\"false\" />.</value>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\tpublic override bool SupportsUids {\n\t\t\tget {\n\t\t\t\tCheckDisposed ();\n\t\t\t\tCheckConnected ();\n\t\t\t\tCheckAuthenticated ();\n\n\t\t\t\treturn (engine.Capabilities & Pop3Capabilities.UIDL) != 0;\n\t\t\t}\n\t\t}\n\n\t\tstatic Task ProcessUidlResponse (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tvar tokens = text.Split (Space, StringSplitOptions.RemoveEmptyEntries);\n\t\t\tint seqid = GetExpectedSequenceId (pc);\n\n\t\t\tif (tokens.Length < 2) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an incomplete response to the UIDL command.\");\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[0], NumberStyles.None, CultureInfo.InvariantCulture, out int id) || id != seqid) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an unexpected response to the UIDL command.\");\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tpc.UserData = tokens[1];\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tPop3Command QueueUidlCommand (int index)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (index < 0 || index >= total)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tif (!SupportsUids && (probed & ProbedCapabilities.UIDL) != 0)\n\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the UIDL extension.\");\n\n\t\t\treturn engine.QueueCommand (ProcessUidlResponse, \"UIDL {0}\\r\\n\", index + 1);\n\t\t}\n\n\t\tT OnUidlComplete<T> (Pop3Command pc)\n\t\t{\n\t\t\tprobed |= ProbedCapabilities.UIDL;\n\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok && !SupportsUids)\n\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the UIDL extension.\");\n\n\t\t\tpc.ThrowIfError ();\n\n\t\t\tengine.Capabilities |= Pop3Capabilities.UIDL;\n\n\t\t\treturn (T) pc.UserData!;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the UID of the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the UID of the message at the specified index.</para>\n\t\t/// <note type=\"warning\">Not all servers support UIDs, so you should first check the\n\t\t/// <see cref=\"Capabilities\"/> property for the <see cref=\"Pop3Capabilities.UIDL\"/> flag or\n\t\t/// the <see cref=\"SupportsUids\"/> convenience property.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The message UID.</returns>\n\t\t/// <param name=\"index\">The message index.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override string GetMessageUid (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueUidlCommand (index);\n\n\t\t\tengine.Run (false, cancellationToken);\n\n\t\t\treturn OnUidlComplete<string> (pc);\n\t\t}\n\n\t\tstatic void ParseUidlAllResponse (Pop3Command pc, string response)\n\t\t{\n\t\t\tvar tokens = response.Split (Space, StringSplitOptions.RemoveEmptyEntries);\n\t\t\tvar uids = (List<string>) pc.UserData!;\n\n\t\t\tif (tokens.Length < 2) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an incomplete response to the UIDL command.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[0], NumberStyles.None, CultureInfo.InvariantCulture, out int seqid) || seqid != uids.Count + 1) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an invalid response to the UIDL command.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tuids.Add (tokens[1]);\n\t\t}\n\n\t\tstatic void ReadUidlAllResponse (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tdo {\n\t\t\t\tvar response = engine.ReadLine (cancellationToken);\n\n\t\t\t\tif (response == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (pc.Exception != null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tParseUidlAllResponse (pc, response);\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic Task ProcessUidlAllResponse (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ReadUidlAllResponseAsync (engine, pc, cancellationToken);\n\n\t\t\tReadUidlAllResponse (engine, pc, cancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tPop3Command QueueUidlCommand ()\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (!SupportsUids && (probed & ProbedCapabilities.UIDL) != 0)\n\t\t\t\tthrow new NotSupportedException (\"The POP3 server does not support the UIDL extension.\");\n\n\t\t\tvar pc = engine.QueueCommand (ProcessUidlAllResponse, \"UIDL\\r\\n\");\n\t\t\tvar uids = new List<string> ();\n\t\t\tpc.UserData = uids;\n\n\t\t\treturn pc;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the full list of available message UIDs.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the full list of available message UIDs.</para>\n\t\t/// <note type=\"warning\">Not all servers support UIDs, so you should first check the\n\t\t/// <see cref=\"Capabilities\"/> property for the <see cref=\"Pop3Capabilities.UIDL\"/> flag or\n\t\t/// the <see cref=\"SupportsUids\"/> convenience property.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadNewMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The message uids.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<string> GetMessageUids (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueUidlCommand ();\n\n\t\t\tengine.Run (false, cancellationToken);\n\n\t\t\treturn OnUidlComplete<List<string>> (pc);\n\t\t}\n\n\t\tTask ProcessListResponse (Pop3Engine pop3, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tvar tokens = text.Split (Space, StringSplitOptions.RemoveEmptyEntries);\n\t\t\tint seqid = GetExpectedSequenceId (pc);\n\n\t\t\tif (tokens.Length < 2) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an incomplete response to the LIST command: {0}\", text);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[0], NumberStyles.None, CultureInfo.InvariantCulture, out int id) || id != seqid) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an unexpected sequence-id token to the LIST command: {0}\", tokens[0]);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[1], NumberStyles.None, CultureInfo.InvariantCulture, out int size) || size < 0) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an unexpected size token to the LIST command: {0}\", tokens[1]);\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tpc.UserData = size;\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tPop3Command QueueListCommand (int index)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (index < 0 || index >= total)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\treturn engine.QueueCommand (ProcessListResponse, \"LIST {0}\\r\\n\", index + 1);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the size of the specified message, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the size of the specified message, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message size, in bytes.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override int GetMessageSize (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar pc = QueueListCommand (index);\n\n\t\t\tengine.Run (true, cancellationToken);\n\n\t\t\treturn (int) pc.UserData!;\n\t\t}\n\n\t\tstatic void ParseListAllResponse (Pop3Command pc, string response)\n\t\t{\n\t\t\tvar tokens = response.Split (Space, StringSplitOptions.RemoveEmptyEntries);\n\t\t\tvar sizes = (List<int>) pc.UserData!;\n\n\t\t\tif (tokens.Length < 2) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an incomplete response to the LIST command: {0}\", response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[0], NumberStyles.None, CultureInfo.InvariantCulture, out int seqid) || seqid != sizes.Count + 1) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an unexpected sequence-id token to the LIST command: {0}\", tokens[0]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!int.TryParse (tokens[1], NumberStyles.None, CultureInfo.InvariantCulture, out int size) || size < 0) {\n\t\t\t\tpc.Exception = CreatePop3ParseException (\"Pop3 server returned an unexpected size token to the LIST command: {0}\", tokens[1]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsizes.Add (size);\n\t\t}\n\n\t\tstatic void ReadListAllResponse (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tdo {\n\t\t\t\tvar response = engine.ReadLine (cancellationToken);\n\n\t\t\t\tif (response == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (pc.Exception != null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tParseListAllResponse (pc, response);\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic Task ProcessListAllResponse (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ReadListAllResponseAsync (engine, pc, cancellationToken);\n\n\t\t\tReadListAllResponse (engine, pc, cancellationToken);\n\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tList<int> QueueListCommand ()\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tvar pc = engine.QueueCommand (ProcessListAllResponse, \"LIST\\r\\n\");\n\t\t\tvar sizes = new List<int> ();\n\t\t\tpc.UserData = sizes;\n\n\t\t\treturn sizes;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the sizes for all available messages, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sizes for all available messages, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The message sizes, in bytes.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<int> GetMessageSizes (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar sizes = QueueListCommand ();\n\n\t\t\tengine.Run (true, cancellationToken);\n\n\t\t\treturn sizes;\n\t\t}\n\n\t\tabstract class DownloadContext<T>\n\t\t{\n\t\t\treadonly ITransferProgress? progress;\n\t\t\treadonly Pop3Client client;\n\t\t\tT[]? downloaded;\n\t\t\tlong nread;\n\t\t\tint idx;\n\n\t\t\tprotected DownloadContext (Pop3Client client, ITransferProgress? progress)\n\t\t\t{\n\t\t\t\tthis.progress = progress;\n\t\t\t\tthis.client = client;\n\t\t\t}\n\n\t\t\tprotected Pop3Engine Engine {\n\t\t\t\tget { return client.engine; }\n\t\t\t}\n\n\t\t\tprotected abstract T Parse (Pop3Stream data, CancellationToken cancellationToken);\n\n\t\t\tprotected abstract Task<T> ParseAsync (Pop3Stream data, CancellationToken cancellationToken);\n\n\t\t\tprotected void Update (int n)\n\t\t\t{\n\t\t\t\tif (progress == null)\n\t\t\t\t\treturn;\n\n\t\t\t\tnread += n;\n\n\t\t\t\tprogress.Report (nread);\n\t\t\t}\n\n\t\t\tvoid OnDataReceived (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tengine.CheckConnected ();\n\n\t\t\t\ttry {\n\t\t\t\t\tengine.Stream.Mode = Pop3StreamMode.Data;\n\n\t\t\t\t\tvar item = Parse (engine.Stream, cancellationToken);\n\n\t\t\t\t\tdownloaded![idx++] = item;\n\t\t\t\t} catch (FormatException ex) {\n\t\t\t\t\tpc.Exception = CreatePop3ParseException (ex, \"Failed to parse data.\");\n\n\t\t\t\t\tengine.Stream.CopyTo (Stream.Null, 4096);\n\t\t\t\t} finally {\n\t\t\t\t\tengine.Stream.Mode = Pop3StreamMode.Line;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tasync Task OnDataReceivedAsync (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tengine.CheckConnected ();\n\n\t\t\t\ttry {\n\t\t\t\t\tengine.Stream.Mode = Pop3StreamMode.Data;\n\n\t\t\t\t\tvar item = await ParseAsync (engine.Stream, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tdownloaded![idx++] = item;\n\t\t\t\t} catch (FormatException ex) {\n\t\t\t\t\tpc.Exception = CreatePop3ParseException (ex, \"Failed to parse data.\");\n\n\t\t\t\t\tawait engine.Stream.CopyToAsync (Stream.Null, 4096, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} finally {\n\t\t\t\t\tengine.Stream.Mode = Pop3StreamMode.Line;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tTask OnDataReceived (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\t\treturn Task.CompletedTask;\n\n\t\t\t\tif (doAsync)\n\t\t\t\t\treturn OnDataReceivedAsync (engine, pc, cancellationToken);\n\n\t\t\t\tOnDataReceived (engine, pc, cancellationToken);\n\n\t\t\t\treturn Task.CompletedTask;\n\t\t\t}\n\n\t\t\tPop3Command QueueCommand (int index, bool headersOnly)\n\t\t\t{\n\t\t\t\tif (headersOnly)\n\t\t\t\t\treturn Engine.QueueCommand (OnDataReceived, \"TOP {0} 0\\r\\n\", index + 1);\n\n\t\t\t\treturn Engine.QueueCommand (OnDataReceived, \"RETR {0}\\r\\n\", index + 1);\n\t\t\t}\n\n\t\t\tvoid DownloadItem (int index, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tQueueCommand (index, headersOnly);\n\n\t\t\t\tEngine.Run (true, cancellationToken);\n\t\t\t}\n\n\t\t\tasync Task DownloadItemAsync (int index, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tQueueCommand (index, headersOnly);\n\n\t\t\t\tawait Engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tpublic T Download (int index, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tdownloaded = new T[1];\n\t\t\t\tidx = 0;\n\n\t\t\t\tDownloadItem (index, headersOnly, cancellationToken);\n\n\t\t\t\treturn downloaded[0];\n\t\t\t}\n\n\t\t\tpublic async Task<T> DownloadAsync (int index, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tdownloaded = new T[1];\n\t\t\t\tidx = 0;\n\n\t\t\t\tawait DownloadItemAsync (index, headersOnly, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\treturn downloaded[0];\n\t\t\t}\n\n\t\t\tpublic IList<T> Download (IList<int> indexes, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tdownloaded = new T[indexes.Count];\n\t\t\t\tidx = 0;\n\n\t\t\t\tif ((Engine.Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\t\t\tDownloadItem (indexes[i], headersOnly, cancellationToken);\n\n\t\t\t\t\treturn downloaded;\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\t\tQueueCommand (indexes[i], headersOnly);\n\n\t\t\t\tEngine.Run (true, cancellationToken);\n\n\t\t\t\treturn downloaded;\n\t\t\t}\n\n\t\t\tpublic async Task<IList<T>> DownloadAsync (IList<int> indexes, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tdownloaded = new T[indexes.Count];\n\t\t\t\tidx = 0;\n\n\t\t\t\tif ((Engine.Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\t\t\tawait DownloadItemAsync (indexes[i], headersOnly, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\treturn downloaded;\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\t\tQueueCommand (indexes[i], headersOnly);\n\n\t\t\t\tawait Engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\treturn downloaded;\n\t\t\t}\n\n\t\t\tpublic IList<T> Download (int startIndex, int count, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tdownloaded = new T[count];\n\t\t\t\tidx = 0;\n\n\t\t\t\tif ((Engine.Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\t\t\tDownloadItem (startIndex + i, headersOnly, cancellationToken);\n\n\t\t\t\t\treturn downloaded;\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\t\tQueueCommand (startIndex + i, headersOnly);\n\n\t\t\t\tEngine.Run (true, cancellationToken);\n\n\t\t\t\treturn downloaded;\n\t\t\t}\n\n\t\t\tpublic async Task<IList<T>> DownloadAsync (int startIndex, int count, bool headersOnly, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tdownloaded = new T[count];\n\t\t\t\tidx = 0;\n\n\t\t\t\tif ((Engine.Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\t\t\tawait DownloadItemAsync (startIndex + i, headersOnly, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\treturn downloaded;\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\t\tQueueCommand (startIndex + i, headersOnly);\n\n\t\t\t\tawait Engine.RunAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\treturn downloaded;\n\t\t\t}\n\t\t}\n\n\t\tclass DownloadStreamContext : DownloadContext<Stream>\n\t\t{\n\t\t\tconst int BufferSize = 4096;\n\n\t\t\tpublic DownloadStreamContext (Pop3Client client, ITransferProgress? progress = null) : base (client, progress)\n\t\t\t{\n\t\t\t}\n\n\t\t\tprotected override Stream Parse (Pop3Stream data, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tvar buffer = ArrayPool<byte>.Shared.Rent (BufferSize);\n\t\t\t\tvar stream = new MemoryBlockStream ();\n\n\t\t\t\ttry {\n\t\t\t\t\tint nread;\n\n\t\t\t\t\twhile ((nread = data.Read (buffer, 0, BufferSize, cancellationToken)) > 0) {\n\t\t\t\t\t\tstream.Write (buffer, 0, nread);\n\t\t\t\t\t\tUpdate (nread);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\treturn stream;\n\t\t\t\t} catch {\n\t\t\t\t\tstream.Dispose ();\n\t\t\t\t\tthrow;\n\t\t\t\t} finally {\n\t\t\t\t\tArrayPool<byte>.Shared.Return (buffer);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprotected override async Task<Stream> ParseAsync (Pop3Stream data, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tvar buffer = ArrayPool<byte>.Shared.Rent (BufferSize);\n\t\t\t\tvar stream = new MemoryBlockStream ();\n\n\t\t\t\ttry {\n\t\t\t\t\tint nread;\n\n\t\t\t\t\twhile ((nread = await data.ReadAsync (buffer, 0, BufferSize, cancellationToken).ConfigureAwait (false)) > 0) {\n\t\t\t\t\t\tstream.Write (buffer, 0, nread);\n\t\t\t\t\t\tUpdate (nread);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\treturn stream;\n\t\t\t\t} catch {\n\t\t\t\t\tstream.Dispose ();\n\t\t\t\t\tthrow;\n\t\t\t\t} finally {\n\t\t\t\t\tArrayPool<byte>.Shared.Return (buffer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tclass DownloadHeaderContext : DownloadContext<HeaderList>\n\t\t{\n\t\t\treadonly MimeParser parser;\n\n\t\t\tpublic DownloadHeaderContext (Pop3Client client, MimeParser parser) : base (client, null)\n\t\t\t{\n\t\t\t\tthis.parser = parser;\n\t\t\t}\n\n\t\t\tprotected override HeaderList Parse (Pop3Stream data, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tusing (var stream = new ProgressStream (data, Update)) {\n\t\t\t\t\tparser.SetStream (stream);\n\n\t\t\t\t\treturn parser.ParseMessage (cancellationToken).Headers;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprotected override async Task<HeaderList> ParseAsync (Pop3Stream data, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tusing (var stream = new ProgressStream (data, Update)) {\n\t\t\t\t\tparser.SetStream (stream);\n\n\t\t\t\t\treturn (await parser.ParseMessageAsync (cancellationToken).ConfigureAwait (false)).Headers;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tclass DownloadMessageContext : DownloadContext<MimeMessage>\n\t\t{\n\t\t\treadonly MimeParser parser;\n\n\t\t\tpublic DownloadMessageContext (Pop3Client client, MimeParser parser, ITransferProgress? progress = null) : base (client, progress)\n\t\t\t{\n\t\t\t\tthis.parser = parser;\n\t\t\t}\n\n\t\t\tprotected override MimeMessage Parse (Pop3Stream data, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tusing (var stream = new ProgressStream (data, Update)) {\n\t\t\t\t\tparser.SetStream (stream);\n\n\t\t\t\t\treturn parser.ParseMessage (cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprotected override Task<MimeMessage> ParseAsync (Pop3Stream data, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tusing (var stream = new ProgressStream (data, Update)) {\n\t\t\t\t\tparser.SetStream (stream);\n\n\t\t\t\t\treturn parser.ParseMessageAsync (cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid CheckCanDownload (int index)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (index < 0 || index >= total)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\t\t}\n\n\t\tbool CheckCanDownload (IList<int> indexes)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn false;\n\n\t\t\tfor (int i = 0; i < indexes.Count; i++) {\n\t\t\t\tif (indexes[i] < 0 || indexes[i] >= total)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the indexes are invalid.\", nameof (indexes));\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tbool CheckCanDownload (int startIndex, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (startIndex < 0 || startIndex >= total)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (startIndex));\n\n\t\t\tif (count < 0 || count > (total - startIndex))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\treturn count > 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the headers for the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the headers for the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message headers.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override HeaderList GetMessageHeaders (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanDownload (index);\n\n\t\t\tvar ctx = new DownloadHeaderContext (this, parser);\n\n\t\t\treturn ctx.Download (index, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the headers for the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the headers for the messages at the specified indexes.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessageHeaders(int,CancellationToken)\"/> for each message because\n\t\t/// it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The headers for the specified messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<HeaderList> GetMessageHeaders (IList<int> indexes, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDownload (indexes))\n\t\t\t\treturn Array.Empty<HeaderList> ();\n\n\t\t\tvar ctx = new DownloadHeaderContext (this, parser);\n\n\t\t\treturn ctx.Download (indexes, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the headers of the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the headers of the messages within the specified range.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessageHeaders(int,CancellationToken)\"/> for each message because\n\t\t/// it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The headers of the messages within the specified range.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<HeaderList> GetMessageHeaders (int startIndex, int count, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDownload (startIndex, count))\n\t\t\t\treturn Array.Empty<HeaderList> ();\n\n\t\t\tvar ctx = new DownloadHeaderContext (this, parser);\n\n\t\t\treturn ctx.Download (startIndex, count, true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message at the specified index.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The message.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override MimeMessage GetMessage (int index, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tCheckCanDownload (index);\n\n\t\t\tvar ctx = new DownloadMessageContext (this, parser, progress);\n\n\t\t\treturn ctx.Download (index, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the messages at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the messages at the specified indexes.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessage(int,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<MimeMessage> GetMessages (IList<int> indexes, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (indexes))\n\t\t\t\treturn Array.Empty<MimeMessage> ();\n\n\t\t\tvar ctx = new DownloadMessageContext (this, parser, progress);\n\n\t\t\treturn ctx.Download (indexes, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the messages within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the messages within the specified range.</para>\n\t\t/// <para>When the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetMessage(int,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"BatchDownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <returns>The messages.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first message to get.</param>\n\t\t/// <param name=\"count\">The number of messages to get.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<MimeMessage> GetMessages (int startIndex, int count, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (startIndex, count))\n\t\t\t\treturn Array.Empty<MimeMessage> ();\n\n\t\t\tvar ctx = new DownloadMessageContext (this, parser, progress);\n\n\t\t\treturn ctx.Download (startIndex, count, false, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message or header stream at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the message or header stream at the specified index.\n\t\t/// </remarks>\n\t\t/// <returns>The message or header stream.</returns>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Stream GetStream (int index, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tCheckCanDownload (index);\n\n\t\t\tvar ctx = new DownloadStreamContext (this, progress);\n\n\t\t\treturn ctx.Download (index, headersOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message or header streams at the specified indexes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Get the message or header streams at the specified indexes.</para>\n\t\t/// <para>If the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetStream(int,bool,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<Stream> GetStreams (IList<int> indexes, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (indexes))\n\t\t\t\treturn Array.Empty<Stream> ();\n\n\t\t\tvar ctx = new DownloadStreamContext (this, progress);\n\n\t\t\treturn ctx.Download (indexes, headersOnly, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the message or header streams within the specified range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the message or header streams within the specified range.</para>\n\t\t/// <para>If the POP3 server supports the <see cref=\"Pop3Capabilities.Pipelining\"/>\n\t\t/// extension, this method will likely be more efficient than using\n\t\t/// <see cref=\"GetStream(int,bool,CancellationToken,ITransferProgress)\"/> for each message\n\t\t/// because it will batch the commands to reduce latency.</para>\n\t\t/// </remarks>\n\t\t/// <returns>The message or header streams.</returns>\n\t\t/// <param name=\"startIndex\">The index of the first stream to get.</param>\n\t\t/// <param name=\"count\">The number of streams to get.</param>\n\t\t/// <param name=\"headersOnly\"><see langword=\"true\" /> if only the headers should be retrieved; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The POP3 server does not support the UIDL extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IList<Stream> GetStreams (int startIndex, int count, bool headersOnly = false, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tif (!CheckCanDownload (startIndex, count))\n\t\t\t\treturn Array.Empty<Stream> ();\n\n\t\t\tvar ctx = new DownloadStreamContext (this, progress);\n\n\t\t\treturn ctx.Download (startIndex, count, headersOnly, cancellationToken);\n\t\t}\n\n\t\tvoid CheckCanDelete (int index, out string seqid)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (index < 0 || index >= total)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tseqid = (index + 1).ToString (CultureInfo.InvariantCulture);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Mark the specified message for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"DownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <param name=\"index\">The index of the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is not a valid message index.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void DeleteMessage (int index, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckCanDelete (index, out string seqid);\n\n\t\t\tSendCommand (cancellationToken, $\"DELE {seqid}\\r\\n\");\n\t\t}\n\n\t\tbool CheckCanDelete (IList<int> indexes)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (indexes == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (indexes));\n\n\t\t\tif (indexes.Count == 0)\n\t\t\t\treturn false;\n\n\t\t\tfor (int i = 0; i < indexes.Count; i++) {\n\t\t\t\tif (indexes[i] < 0 || indexes[i] >= total)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the indexes are invalid.\", nameof (indexes));\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Mark the specified messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"indexes\">The indexes of the messages.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"indexes\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the <paramref name=\"indexes\"/> are invalid.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void DeleteMessages (IList<int> indexes, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDelete (indexes))\n\t\t\t\treturn;\n\n\t\t\tif ((Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\t\tSendCommand (cancellationToken, \"DELE {0}\\r\\n\", indexes[i] + 1);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < indexes.Count; i++)\n\t\t\t\tengine.QueueCommand (null, \"DELE {0}\\r\\n\", indexes[i] + 1);\n\n\t\t\tengine.Run (true, cancellationToken);\n\t\t}\n\n\t\tbool CheckCanDelete (int startIndex, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tif (startIndex < 0 || startIndex >= total)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (startIndex));\n\n\t\t\tif (count < 0 || count > (total - startIndex))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\treturn count >= 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Mark the specified range of messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"BatchDownloadMessages\"/>\n\t\t/// </example>\n\t\t/// <param name=\"startIndex\">The index of the first message to mark for deletion.</param>\n\t\t/// <param name=\"count\">The number of messages to mark for deletion.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"startIndex\"/> and <paramref name=\"count\"/> do not specify\n\t\t/// a valid range of messages.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void DeleteMessages (int startIndex, int count, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!CheckCanDelete (startIndex, count))\n\t\t\t\treturn;\n\n\t\t\tif ((Capabilities & Pop3Capabilities.Pipelining) == 0) {\n\t\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\t\tSendCommand (cancellationToken, \"DELE {0}\\r\\n\", startIndex + i + 1);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < count; i++)\n\t\t\t\tengine.QueueCommand (null, \"DELE {0}\\r\\n\", startIndex + i + 1);\n\n\t\t\tengine.Run (true, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Mark all messages for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void DeleteAllMessages (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (total > 0)\n\t\t\t\tDeleteMessages (0, total, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the state of all messages marked for deletion.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Messages marked for deletion are not actually deleted until the session\n\t\t/// is cleanly disconnected\n\t\t/// (see <see cref=\"Pop3Client.Disconnect(bool, CancellationToken)\"/>).\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// The POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Reset (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tSendCommand (cancellationToken, \"RSET\\r\\n\");\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable<MimeMessage> implementation\n\n\t\t/// <summary>\n\t\t/// Get an enumerator for the messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the messages in the folder.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// The <see cref=\"Pop3Client\"/> is not authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3CommandException\">\n\t\t/// A POP3 command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"Pop3ProtocolException\">\n\t\t/// A POP3 protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override IEnumerator<MimeMessage> GetEnumerator ()\n\t\t{\n\t\t\tCheckDisposed ();\n\t\t\tCheckConnected ();\n\t\t\tCheckAuthenticated ();\n\n\t\t\tfor (int i = 0; i < total; i++)\n\t\t\t\tyield return GetMessage (i, CancellationToken.None);\n\n\t\t\tyield break;\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"Pop3Client\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"Pop3Client\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tengine.Disconnect (null);\n\t\t\t\tdisposed = true;\n\t\t\t}\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Command.cs",
    "content": "﻿//\n// Pop3Command.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// POP3 command handler.\n\t/// </summary>\n\t/// <remarks>\n\t/// All exceptions thrown by the handler are considered fatal and will\n\t/// force-disconnect the connection. If a non-fatal error occurs, set\n\t/// it on the <see cref=\"Pop3Command.Exception\"/> property.\n\t/// </remarks>\n\tdelegate Task Pop3CommandHandler (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken);\n\n\tenum Pop3CommandStatus {\n\t\tQueued         = -5,\n\t\tActive         = -4,\n\t\tContinue       = -3,\n\t\tProtocolError  = -2,\n\t\tError          = -1,\n\t\tOk             =  0\n\t}\n\n\tclass Pop3Command\n\t{\n\t\tpublic Pop3CommandHandler? Handler { get; private set; }\n\t\tpublic Encoding Encoding { get; private set; }\n\t\tpublic string Command { get; private set; }\n\n\t\t// output\n\t\tpublic Pop3CommandStatus Status { get; internal set; }\n\t\tpublic ProtocolException? Exception { get; set; }\n\t\tpublic string? StatusText { get; set; }\n\n\t\tpublic object? UserData { get; set; }\n\n\t\tpublic Pop3Command (Pop3CommandHandler? handler, Encoding encoding, string format, params object[] args)\n\t\t{\n\t\t\tCommand = string.Format (CultureInfo.InvariantCulture, format, args);\n\t\t\tEncoding = encoding;\n\t\t\tHandler = handler;\n\t\t}\n\n\t\tstatic Exception CreatePop3Exception (Pop3Command pc)\n\t\t{\n\t\t\tvar command = pc.Command.Split (' ')[0].TrimEnd ();\n\t\t\tvar message = string.Format (\"POP3 server did not respond with a +OK response to the {0} command.\", command);\n\n\t\t\tif (pc.Status == Pop3CommandStatus.Error)\n\t\t\t\treturn new Pop3CommandException (message, pc.StatusText!);\n\n\t\t\treturn new Pop3ProtocolException (message);\n\t\t}\n\n\t\tpublic void ThrowIfError ()\n\t\t{\n\t\t\tif (Status != Pop3CommandStatus.Ok)\n\t\t\t\tthrow CreatePop3Exception (this);\n\n\t\t\tif (Exception != null)\n\t\t\t\tthrow Exception;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3CommandException.cs",
    "content": "﻿//\n// Pop3CommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// A POP3 command exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when a POP3 command fails. Unlike a <see cref=\"Pop3ProtocolException\"/>,\n\t/// a <see cref=\"Pop3CommandException\"/> does not require the <see cref=\"Pop3Client\"/> to be reconnected.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"ExceptionHandling\"/>\n\t/// </example>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class Pop3CommandException : CommandException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3CommandException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected Pop3CommandException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tStatusText = info.GetString (\"StatusText\");\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tpublic Pop3CommandException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tStatusText = string.Empty;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"statusText\">The response status text.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"statusText\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic Pop3CommandException (string message, string statusText, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tif (statusText == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (statusText));\n\n\t\t\tStatusText = statusText;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic Pop3CommandException (string message) : base (message)\n\t\t{\n\t\t\tStatusText = string.Empty;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3CommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"statusText\">The response status text.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"statusText\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic Pop3CommandException (string message, string statusText) : base (message)\n\t\t{\n\t\t\tif (statusText == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (statusText));\n\n\t\t\tStatusText = statusText;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3CommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3CommandException\"/>.\n\t\t/// </remarks>\n\t\tpublic Pop3CommandException ()\n\t\t{\n\t\t\tStatusText = string.Empty;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the response status text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the response status text.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"ExceptionHandling\"/>\n\t\t/// </example>\n\t\t/// <value>The response status text.</value>\n\t\tpublic string StatusText {\n\t\t\tget; private set;\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serializes the state of the <see cref=\"FolderNotFoundException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecurityCritical]\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tinfo.AddValue (\"StatusText\", StatusText);\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Engine.cs",
    "content": "﻿//\n// Pop3Engine.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// The state of the <see cref=\"Pop3Engine\"/>.\n\t/// </summary>\n\tenum Pop3EngineState {\n\t\t/// <summary>\n\t\t/// The Pop3Engine is in the disconnected state.\n\t\t/// </summary>\n\t\tDisconnected,\n\n\t\t/// <summary>\n\t\t/// The Pop3Engine is in the connected state.\n\t\t/// </summary>\n\t\tConnected,\n\n\t\t/// <summary>\n\t\t/// The Pop3Engine is in the transaction state, indicating that it is \n\t\t/// authenticated and may retrieve messages from the server.\n\t\t/// </summary>\n\t\tTransaction\n\t}\n\n\t/// <summary>\n\t/// A POP3 command engine.\n\t/// </summary>\n\tclass Pop3Engine\n\t{\n#if NET6_0_OR_GREATER\n\t\treadonly ClientMetrics? metrics;\n#endif\n\t\treadonly List<Pop3Command> queue;\n\t\tlong clientConnectedTimestamp;\n\t\tbool secure;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3Engine\"/> class.\n\t\t/// </summary>\n\t\tpublic Pop3Engine ()\n\t\t{\n\t\t\tAuthenticationMechanisms = new HashSet<string> (StringComparer.Ordinal);\n\t\t\tCapabilities = Pop3Capabilities.User;\n\t\t\tqueue = new List<Pop3Command> ();\n\n#if NET6_0_OR_GREATER\n\t\t\t// Use the globally configured Pop3Client metrics.\n\t\t\tmetrics = Telemetry.Pop3Client.Metrics;\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the URI of the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the URI of the POP3 server.\n\t\t/// </remarks>\n\t\t/// <value>The URI of the POP3 server.</value>\n\t\tpublic Uri? Uri {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the authentication mechanisms supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authentication mechanisms are queried during the\n\t\t/// <see cref=\"ConnectAsync(Pop3Stream,CancellationToken)\"/> method.\n\t\t/// </remarks>\n\t\t/// <value>The authentication mechanisms.</value>\n\t\tpublic HashSet<string> AuthenticationMechanisms {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the capabilities supported by the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection\n\t\t/// has been made via the <see cref=\"ConnectAsync(Pop3Stream,CancellationToken)\"/> method.\n\t\t/// </remarks>\n\t\t/// <value>The capabilities.</value>\n\t\tpublic Pop3Capabilities Capabilities {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the underlying POP3 stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the underlying POP3 stream.\n\t\t/// </remarks>\n\t\t/// <value>The pop3 stream.</value>\n\t\tpublic Pop3Stream? Stream {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the state of the engine.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the state of the engine.\n\t\t/// </remarks>\n\t\t/// <value>The engine state.</value>\n\t\tpublic Pop3EngineState State {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the engine is currently connected to a POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the engine is currently connected to a POP3 server.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the engine is connected; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, new[] { nameof (Stream), nameof (Uri) })]\n\t\tpublic bool IsConnected {\n\t\t\tget { return Stream != null && Stream.IsConnected; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, new[] { nameof (Stream), nameof (Uri) })]\n\t\tpublic bool IsSecure {\n\t\t\tget { return IsConnected && secure; }\n\t\t\tset { secure = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the APOP authentication token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the APOP authentication token.\n\t\t/// </remarks>\n\t\t/// <value>The APOP authentication token.</value>\n\t\tpublic string? ApopToken {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the EXPIRE extension policy value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the EXPIRE extension policy value.\n\t\t/// </remarks>\n\t\t/// <value>The EXPIRE policy.</value>\n\t\tpublic int ExpirePolicy {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the implementation details of the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the implementation details of the server.\n\t\t/// </remarks>\n\t\t/// <value>The implementation details.</value>\n\t\tpublic string? Implementation {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the login delay.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the login delay.\n\t\t/// </remarks>\n\t\t/// <value>The login delay.</value>\n\t\tpublic int LoginDelay {\n\t\t\tget; private set;\n\t\t}\n\n\t\t[MemberNotNull (nameof (Stream))]\n\t\tinternal void CheckConnected ()\n\t\t{\n\t\t\tif (Stream == null)\n\t\t\t\tthrow new InvalidOperationException ();\n\t\t}\n\n\t\t[MemberNotNull (nameof (Stream))]\n\t\tvoid Initialize (Pop3Stream pop3)\n\t\t{\n\t\t\tStream?.Dispose ();\n\n\t\t\tclientConnectedTimestamp = Stopwatch.GetTimestamp ();\n\t\t\tCapabilities = Pop3Capabilities.User;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tState = Pop3EngineState.Disconnected;\n\t\t\tApopToken = null;\n\n\t\t\tsecure = pop3.Stream is SslStream;\n\t\t\tStream = pop3;\n\t\t}\n\n\t\tvoid ParseGreeting (string greeting)\n\t\t{\n\t\t\tint index = greeting.IndexOf (' ');\n\t\t\tstring token, text;\n\n\t\t\tif (index != -1) {\n\t\t\t\ttoken = greeting.Substring (0, index);\n\n\t\t\t\twhile (index < greeting.Length && char.IsWhiteSpace (greeting[index]))\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index < greeting.Length)\n\t\t\t\t\ttext = greeting.Substring (index);\n\t\t\t\telse\n\t\t\t\t\ttext = string.Empty;\n\t\t\t} else {\n\t\t\t\ttext = string.Empty;\n\t\t\t\ttoken = greeting;\n\t\t\t}\n\n\t\t\tif (token != \"+OK\") {\n\t\t\t\tStream!.Dispose ();\n\t\t\t\tStream = null;\n\n\t\t\t\tthrow new Pop3ProtocolException (string.Format (\"Unexpected greeting from server: {0}\", greeting));\n\t\t\t}\n\n\t\t\tindex = text.IndexOf ('<');\n\t\t\tif (index != -1 && index + 1 < text.Length) {\n\t\t\t\tint endIndex = text.IndexOf ('>', index + 1);\n\n\t\t\t\tif (endIndex++ != -1) {\n\t\t\t\t\tApopToken = text.Substring (index, endIndex - index);\n\t\t\t\t\tCapabilities |= Pop3Capabilities.Apop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tState = Pop3EngineState.Connected;\n\t\t}\n\n\t\tpublic NetworkOperation StartNetworkOperation (NetworkOperationKind kind, Uri? uri = null)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\treturn NetworkOperation.Start (kind, uri ?? Uri!, Telemetry.Pop3Client.ActivitySource, metrics);\n#else\n\t\t\treturn NetworkOperation.Start (kind, uri ?? Uri!);\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Takes possession of the <see cref=\"Pop3Stream\"/> and reads the greeting.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Takes possession of the <see cref=\"Pop3Stream\"/> and reads the greeting.\n\t\t/// </remarks>\n\t\t/// <param name=\"pop3\">The pop3 stream.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token</param>\n\t\tpublic void Connect (Pop3Stream pop3, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitialize (pop3);\n\n\t\t\t// read the pop3 server greeting\n\t\t\tvar greeting = ReadLine (cancellationToken).TrimEnd ();\n\n\t\t\tParseGreeting (greeting);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Takes possession of the <see cref=\"Pop3Stream\"/> and reads the greeting.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Takes possession of the <see cref=\"Pop3Stream\"/> and reads the greeting.\n\t\t/// </remarks>\n\t\t/// <param name=\"pop3\">The pop3 stream.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token</param>\n\t\tpublic async Task ConnectAsync (Pop3Stream pop3, CancellationToken cancellationToken)\n\t\t{\n\t\t\tInitialize (pop3);\n\n\t\t\t// read the pop3 server greeting\n\t\t\tvar greeting = (await ReadLineAsync (cancellationToken).ConfigureAwait (false)).TrimEnd ();\n\n\t\t\tParseGreeting (greeting);\n\t\t}\n\n\t\tpublic event EventHandler<EventArgs>? Disconnected;\n\n\t\tvoid OnDisconnected ()\n\t\t{\n\t\t\tDisconnected?.Invoke (this, EventArgs.Empty);\n\t\t}\n\n\t\tvoid RecordClientDisconnected (Exception? ex)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\tmetrics?.RecordClientDisconnected (clientConnectedTimestamp, Uri!, ex);\n#endif\n\t\t\tclientConnectedTimestamp = 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Disconnects the <see cref=\"Pop3Engine\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Disconnects the <see cref=\"Pop3Engine\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"ex\">The exception that is causing the disconnection.</param>\n\t\tpublic void Disconnect (Exception? ex)\n\t\t{\n\t\t\tRecordClientDisconnected (ex);\n\n\t\t\tif (Stream != null) {\n\t\t\t\tStream.Dispose ();\n\t\t\t\tStream = null;\n\t\t\t}\n\n\t\t\tsecure = false;\n\n\t\t\tif (State != Pop3EngineState.Disconnected) {\n\t\t\t\tState = Pop3EngineState.Disconnected;\n\t\t\t\tOnDisconnected ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a single line from the <see cref=\"Pop3Stream\"/>.\n\t\t/// </summary>\n\t\t/// <returns>The line.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic string ReadLine (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckConnected ();\n\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tbool complete;\n\n\t\t\t\tdo {\n\t\t\t\t\tcomplete = Stream.ReadLine (builder, cancellationToken);\n\t\t\t\t} while (!complete);\n\n\t\t\t\t// FIXME: All callers expect CRLF to be trimmed, but many also want all trailing whitespace trimmed.\n\t\t\t\tbuilder.TrimNewLine ();\n\n\t\t\t\treturn builder.ToString ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a single line from the <see cref=\"Pop3Stream\"/>.\n\t\t/// </summary>\n\t\t/// <returns>The line.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<string> ReadLineAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckConnected ();\n\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tbool complete;\n\n\t\t\t\tdo {\n\t\t\t\t\tcomplete = await Stream.ReadLineAsync (builder, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} while (!complete);\n\n\t\t\t\t// FIXME: All callers expect CRLF to be trimmed, but many also want all trailing whitespace trimmed.\n\t\t\t\tbuilder.TrimNewLine ();\n\n\t\t\t\treturn builder.ToString ();\n\t\t\t}\n\t\t}\n\n\t\tpublic static Pop3CommandStatus GetCommandStatus (string response, out string text)\n\t\t{\n\t\t\tint index = response.IndexOf (' ');\n\t\t\tstring token;\n\n\t\t\tif (index != -1) {\n\t\t\t\ttoken = response.Substring (0, index);\n\n\t\t\t\twhile (index < response.Length && char.IsWhiteSpace (response[index]))\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index < response.Length)\n\t\t\t\t\ttext = response.Substring (index);\n\t\t\t\telse\n\t\t\t\t\ttext = string.Empty;\n\t\t\t} else {\n\t\t\t\ttext = string.Empty;\n\t\t\t\ttoken = response;\n\t\t\t}\n\n\t\t\tif (token == \"+OK\")\n\t\t\t\treturn Pop3CommandStatus.Ok;\n\n\t\t\tif (token == \"-ERR\")\n\t\t\t\treturn Pop3CommandStatus.Error;\n\n\t\t\tif (token == \"+\")\n\t\t\t\treturn Pop3CommandStatus.Continue;\n\n\t\t\treturn Pop3CommandStatus.ProtocolError;\n\t\t}\n\n\t\tvoid ReadResponse (Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tstring response;\n\n\t\t\ttry {\n\t\t\t\tresponse = ReadLine (cancellationToken).TrimEnd ();\n\t\t\t} catch (Exception ex) {\n\t\t\t\tpc.Status = Pop3CommandStatus.ProtocolError;\n\t\t\t\tDisconnect (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tpc.Status = GetCommandStatus (response, out string text);\n\t\t\tpc.StatusText = text;\n\n\t\t\tswitch (pc.Status) {\n\t\t\tcase Pop3CommandStatus.ProtocolError:\n\t\t\t\tvar pex = new Pop3ProtocolException (string.Format (\"Unexpected response from server: {0}\", response));\n\t\t\t\tDisconnect (pex);\n\t\t\t\tthrow pex;\n\t\t\tcase Pop3CommandStatus.Continue:\n\t\t\tcase Pop3CommandStatus.Ok:\n\t\t\t\tif (pc.Handler != null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpc.Handler (this, pc, text, false, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tpc.Status = Pop3CommandStatus.ProtocolError;\n\t\t\t\t\t\tDisconnect (ex);\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tasync Task ReadResponseAsync (Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tstring response;\n\n\t\t\ttry {\n\t\t\t\tresponse = (await ReadLineAsync (cancellationToken).ConfigureAwait (false)).TrimEnd ();\n\t\t\t} catch (Exception ex) {\n\t\t\t\tpc.Status = Pop3CommandStatus.ProtocolError;\n\t\t\t\tDisconnect (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tpc.Status = GetCommandStatus (response, out string text);\n\t\t\tpc.StatusText = text;\n\n\t\t\tswitch (pc.Status) {\n\t\t\tcase Pop3CommandStatus.ProtocolError:\n\t\t\t\tvar pex = new Pop3ProtocolException (string.Format (\"Unexpected response from server: {0}\", response));\n\t\t\t\tDisconnect (pex);\n\t\t\t\tthrow pex;\n\t\t\tcase Pop3CommandStatus.Continue:\n\t\t\tcase Pop3CommandStatus.Ok:\n\t\t\t\tif (pc.Handler != null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait pc.Handler (this, pc, text, true, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tpc.Status = Pop3CommandStatus.ProtocolError;\n\t\t\t\t\t\tDisconnect (ex);\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t[MemberNotNull (nameof (Stream))]\n\t\tvoid CheckCanRun (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckConnected ();\n\n\t\t\tif (cancellationToken.IsCancellationRequested) {\n\t\t\t\tqueue.Clear ();\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Run the command pipeline.\n\t\t/// </summary>\n\t\t/// <param name=\"throwOnError\"><see langword=\"true\" /> if exceptions should be thrown for failed commands; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\tpublic void Run (bool throwOnError, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckCanRun (cancellationToken);\n\n\t\t\ttry {\n\t\t\t\tfor (int i = 0; i < queue.Count; i++) {\n\t\t\t\t\tvar pc = queue[i];\n\n\t\t\t\t\tpc.Status = Pop3CommandStatus.Active;\n\n\t\t\t\t\tStream.QueueCommand (pc.Encoding, pc.Command, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tStream.Flush (cancellationToken);\n\n\t\t\t\tfor (int i = 0; i < queue.Count; i++)\n\t\t\t\t\tReadResponse (queue[i], cancellationToken);\n\n\t\t\t\tfor (int i = 0; i < queue.Count && throwOnError; i++)\n\t\t\t\t\tqueue[i].ThrowIfError ();\n\t\t\t} finally {\n\t\t\t\tqueue.Clear ();\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously run the command pipeline.\n\t\t/// </summary>\n\t\t/// <param name=\"throwOnError\"><see langword=\"true\" /> if exceptions should be thrown for failed commands; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"InvalidOperationException\">\n\t\t/// The engine is not connected.\n\t\t/// </exception>\n\t\tpublic async Task RunAsync (bool throwOnError, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckCanRun (cancellationToken);\n\n\t\t\ttry {\n\t\t\t\tfor (int i = 0; i < queue.Count; i++) {\n\t\t\t\t\tvar pc = queue[i];\n\n\t\t\t\t\tpc.Status = Pop3CommandStatus.Active;\n\n\t\t\t\t\tawait Stream.QueueCommandAsync (pc.Encoding, pc.Command, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tawait Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tfor (int i = 0; i < queue.Count; i++)\n\t\t\t\t\tawait ReadResponseAsync (queue[i], cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tfor (int i = 0; i < queue.Count && throwOnError; i++)\n\t\t\t\t\tqueue[i].ThrowIfError ();\n\t\t\t} finally {\n\t\t\t\tqueue.Clear ();\n\t\t\t}\n\t\t}\n\n\t\tpublic Pop3Command QueueCommand (Pop3CommandHandler? handler, Encoding encoding, string format, params object[] args)\n\t\t{\n\t\t\tvar pc = new Pop3Command (handler, encoding, format, args);\n\t\t\tqueue.Add (pc);\n\t\t\treturn pc;\n\t\t}\n\n\t\tpublic Pop3Command QueueCommand (Pop3CommandHandler? handler, string format, params object[] args)\n\t\t{\n\t\t\treturn QueueCommand (handler, Encoding.ASCII, format, args);\n\t\t}\n\n\t\tstatic bool IsCapability (string capability, string text, int length, bool hasValue = false)\n\t\t{\n\t\t\tif (hasValue) {\n\t\t\t\tif (length < capability.Length)\n\t\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tif (length != capability.Length)\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (string.Compare (text, 0, capability, 0, capability.Length, StringComparison.OrdinalIgnoreCase) != 0)\n\t\t\t\treturn false;\n\n\t\t\tif (hasValue) {\n\t\t\t\tint index = capability.Length;\n\n\t\t\t\treturn length == capability.Length || text[index] == ' ' || text[index] == '=';\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool IsToken (string token, string text, int startIndex, int length)\n\t\t{\n\t\t\treturn length == token.Length && string.Compare (text, startIndex, token, 0, token.Length, StringComparison.OrdinalIgnoreCase) == 0;\n\t\t}\n\n\t\tstatic bool ReadNextToken (string text, ref int index, out int startIndex, out int length)\n\t\t{\n\t\t\twhile (index < text.Length && char.IsWhiteSpace (text[index]))\n\t\t\t\tindex++;\n\n\t\t\tstartIndex = index;\n\n\t\t\twhile (index < text.Length && !char.IsWhiteSpace (text[index]))\n\t\t\t\tindex++;\n\n\t\t\tlength = index - startIndex;\n\n\t\t\treturn length > 0;\n\t\t}\n\n\t\tvoid AddAuthenticationMechanisms (string text, int startIndex)\n\t\t{\n\t\t\tint index = startIndex;\n\n\t\t\twhile (ReadNextToken (text, ref index, out var tokenIndex, out var length)) {\n\t\t\t\tvar mechanism = text.Substring (tokenIndex, length);\n\n\t\t\t\tAuthenticationMechanisms.Add (mechanism);\n\t\t\t}\n\t\t}\n\n\t\tstatic bool TryParseInt32 (string text, int startIndex, int length, out int value)\n\t\t{\n#if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER\n\t\t\tvar token = text.AsSpan (startIndex, length);\n#else\n\t\t\tvar token = text.Substring (startIndex, length);\n#endif\n\n\t\t\treturn int.TryParse (token, NumberStyles.None, CultureInfo.InvariantCulture, out value);\n\t\t}\n\n\t\tstatic void ParseCapaResponse (Pop3Engine engine, string response)\n\t\t{\n\t\t\tint index = response.IndexOf (' ');\n\t\t\tint startIndex, length, value;\n\n\t\t\tif (index == -1)\n\t\t\t\tindex = response.Length;\n\n\t\t\tif (IsCapability (\"EXPIRE\", response, index, true)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.Expire;\n\n\t\t\t\tif (ReadNextToken (response, ref index, out startIndex, out length)) {\n\t\t\t\t\tif (IsToken (\"NEVER\", response, startIndex, length)) {\n\t\t\t\t\t\tengine.ExpirePolicy = -1;\n\t\t\t\t\t} else if (TryParseInt32 (response, startIndex, length, out value)) {\n\t\t\t\t\t\tengine.ExpirePolicy = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (IsCapability (\"IMPLEMENTATION\", response, index, true)) {\n\t\t\t\tengine.Implementation = response.Substring (index + 1);\n\t\t\t} else if (IsCapability (\"LANG\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.Lang;\n\t\t\t} else if (IsCapability (\"LOGIN-DELAY\", response, index, true)) {\n\t\t\t\tif (ReadNextToken (response, ref index, out startIndex, out length)) {\n\t\t\t\t\tif (TryParseInt32 (response, startIndex, length, out value)) {\n\t\t\t\t\t\tengine.Capabilities |= Pop3Capabilities.LoginDelay;\n\t\t\t\t\t\tengine.LoginDelay = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (IsCapability (\"PIPELINING\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.Pipelining;\n\t\t\t} else if (IsCapability (\"RESP-CODES\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.ResponseCodes;\n\t\t\t} else if (IsCapability (\"SASL\", response, index, true)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.Sasl;\n\t\t\t\tengine.AddAuthenticationMechanisms (response, index);\n\t\t\t} else if (IsCapability (\"STLS\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.StartTLS;\n\t\t\t} else if (IsCapability (\"TOP\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.Top;\n\t\t\t} else if (IsCapability (\"UIDL\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.UIDL;\n\t\t\t} else if (IsCapability (\"USER\", response, index)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.User;\n\t\t\t} else if (IsCapability (\"UTF8\", response, index, true)) {\n\t\t\t\tengine.Capabilities |= Pop3Capabilities.UTF8;\n\n\t\t\t\twhile (ReadNextToken (response, ref index, out startIndex, out length)) {\n\t\t\t\t\tif (IsToken (\"USER\", response, startIndex, length)) {\n\t\t\t\t\t\tengine.Capabilities |= Pop3Capabilities.UTF8User;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void ReadCapaResponse (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tstring response;\n\n\t\t\tdo {\n\t\t\t\tif ((response = engine.ReadLine (cancellationToken)) == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tParseCapaResponse (engine, response);\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic async Task ReadCapaResponseAsync (Pop3Engine engine, Pop3Command pc, CancellationToken cancellationToken)\n\t\t{\n\t\t\tstring response;\n\n\t\t\tdo {\n\t\t\t\tif ((response = await engine.ReadLineAsync (cancellationToken).ConfigureAwait (false)) == \".\")\n\t\t\t\t\tbreak;\n\n\t\t\t\tParseCapaResponse (engine, response);\n\t\t\t} while (true);\n\t\t}\n\n\t\tstatic Task ProcessCapaResponse (Pop3Engine engine, Pop3Command pc, string text, bool doAsync, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (pc.Status != Pop3CommandStatus.Ok)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\tif (doAsync)\n\t\t\t\treturn ReadCapaResponseAsync (engine, pc, cancellationToken);\n\n\t\t\tReadCapaResponse (engine, pc, cancellationToken);\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\tPop3Command QueueCapabilitiesCommand ()\n\t\t{\n\t\t\tCheckConnected ();\n\n\t\t\t// Clear all CAPA response capabilities (except the APOP, USER, and STLS capabilities).\n\t\t\tCapabilities &= Pop3Capabilities.Apop | Pop3Capabilities.User | Pop3Capabilities.StartTLS;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tImplementation = null;\n\t\t\tExpirePolicy = 0;\n\t\t\tLoginDelay = 0;\n\n\t\t\treturn QueueCommand (ProcessCapaResponse, \"CAPA\\r\\n\");\n\t\t}\n\n\t\tpublic void QueryCapabilities (CancellationToken cancellationToken)\n\t\t{\n\t\t\tQueueCapabilitiesCommand ();\n\n\t\t\tRun (false, cancellationToken);\n\t\t}\n\n\t\tpublic Task QueryCapabilitiesAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tQueueCapabilitiesCommand ();\n\n\t\t\treturn RunAsync (false, cancellationToken);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Language.cs",
    "content": "﻿//\n// Pop3Language.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// A POP3 language.\n\t/// </summary>\n\t/// <remarks>\n\t/// A POP3 language.\n\t/// </remarks>\n\tpublic class Pop3Language\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3Language\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3Language\"/>.\n\t\t/// </remarks>\n\t\tinternal Pop3Language (string lang, string desc)\n\t\t{\n\t\t\tLanguage = lang;\n\t\t\tDescription = desc;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the language code.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the language code. This is the value that should be given to\n\t\t/// <see cref=\"Pop3Client.SetLanguage(string,System.Threading.CancellationToken)\"/>.\n\t\t/// </remarks>\n\t\t/// <value>The language.</value>\n\t\tpublic string Language {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the description.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the description.\n\t\t/// </remarks>\n\t\t/// <value>The description.</value>\n\t\tpublic string Description {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3ProtocolException.cs",
    "content": "﻿//\n// Pop3ProtocolException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// A POP3 protocol exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when there is an error communicating with a POP3 server. A\n\t/// <see cref=\"Pop3ProtocolException\"/> is typically fatal and requires the <see cref=\"Pop3Client\"/>\n\t/// to be reconnected.\n    /// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\Pop3Examples.cs\" region=\"ExceptionHandling\"/>\n\t/// </example>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class Pop3ProtocolException : ProtocolException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3ProtocolException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected Pop3ProtocolException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3ProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tpublic Pop3ProtocolException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3ProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic Pop3ProtocolException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3ProtocolException\"/>.\n\t\t/// </remarks>\n\t\tpublic Pop3ProtocolException ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Stream.cs",
    "content": "﻿//\n// Pop3Stream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\n\nusing MimeKit.IO;\n\nusing Buffer = System.Buffer;\nusing SslStream = MailKit.Net.SslStream;\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Pop3 {\n\t/// <summary>\n\t/// An enumeration of the possible POP3 streaming modes.\n\t/// </summary>\n\t/// <remarks>\n\t/// Normal operation is done in the <see cref=\"Pop3StreamMode.Line\"/> mode,\n\t/// but when retrieving messages (via RETR) or headers (via TOP), the\n\t/// <see cref=\"Pop3StreamMode.Data\"/> mode should be used.\n\t/// </remarks>\n\tenum Pop3StreamMode {\n\t\t/// <summary>\n\t\t/// Reads 1 line at a time.\n\t\t/// </summary>\n\t\tLine,\n\n\t\t/// <summary>\n\t\t/// Reads data in chunks, ignoring line state.\n\t\t/// </summary>\n\t\tData\n\t}\n\n\t/// <summary>\n\t/// A stream for communicating with a POP3 server.\n\t/// </summary>\n\t/// <remarks>\n\t/// A stream capable of reading data line-by-line (<see cref=\"Pop3StreamMode.Line\"/>)\n\t/// or by raw byte streams (<see cref=\"Pop3StreamMode.Data\"/>).\n\t/// </remarks>\n\tclass Pop3Stream : Stream, ICancellableStream\n\t{\n\t\tconst int ReadAheadSize = 128;\n\t\tconst int BlockSize = 4096;\n\t\tconst int PadSize = 4;\n\n\t\t// I/O buffering\n\t\treadonly byte[] input = new byte[ReadAheadSize + BlockSize + PadSize];\n\t\tconst int inputStart = ReadAheadSize;\n\n\t\treadonly byte[] output = new byte[BlockSize];\n\t\tint outputIndex;\n\n\t\treadonly IProtocolLogger logger;\n\t\tint inputIndex = ReadAheadSize;\n\t\tint inputEnd = ReadAheadSize;\n\t\tPop3StreamMode mode;\n\t\tbool disposed;\n\t\tbool midline;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Pop3.Pop3Stream\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"Pop3Stream\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"source\">The underlying network stream.</param>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\tpublic Pop3Stream (Stream source, IProtocolLogger protocolLogger)\n\t\t{\n\t\t\tlogger = protocolLogger;\n\t\t\tIsConnected = true;\n\t\t\tStream = source;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or sets the underlying network stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying network stream.\n\t\t/// </remarks>\n\t\t/// <value>The underlying network stream.</value>\n\t\tpublic Stream Stream {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the mode used for reading.\n\t\t/// </summary>\n\t\t/// <value>The mode.</value>\n\t\tpublic Pop3StreamMode Mode {\n\t\t\tget { return mode; }\n\t\t\tset {\n\t\t\t\tIsEndOfData = false;\n\t\t\t\tmode = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the stream is connected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the stream is connected.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsConnected {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the end of the raw data has been reached in <see cref=\"Pop3StreamMode.Data\"/> mode.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// When reading the response to a command such as RETR, the end of the data is marked by line matching \".\\r\\n\".\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the end of the data has been reached; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsEndOfData {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports reading.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports reading.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports reading; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanRead {\n\t\t\tget { return Stream.CanRead; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports writing.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports writing.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports writing; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanWrite {\n\t\t\tget { return Stream.CanWrite; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports seeking.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports seeking.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports seeking; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports I/O timeouts.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports I/O timeouts.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports I/O timeouts; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return Stream.CanTimeout; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </remarks>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to read before timing out.</returns>\n\t\t/// <value>The read timeout.</value>\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return Stream.ReadTimeout; }\n\t\t\tset { Stream.ReadTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </remarks>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to write before timing out.</returns>\n\t\t/// <value>The write timeout.</value>\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return Stream.WriteTimeout; }\n\t\t\tset { Stream.WriteTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the position within the current stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the position within the current stream.\n\t\t/// </remarks>\n\t\t/// <returns>The current position within the stream.</returns>\n\t\t/// <value>The position of the stream.</value>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\tpublic override long Position {\n\t\t\tget { return Stream.Position; }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the length of the stream, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the stream, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>A long value representing the length of the stream in bytes.</returns>\n\t\t/// <value>The length of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\tpublic override long Length {\n\t\t\tget { return Stream.Length; }\n\t\t}\n\n\t\tvoid AlignReadAheadBuffer (out int start, out int end)\n\t\t{\n\t\t\tint left = inputEnd - inputIndex;\n\n\t\t\tstart = inputStart;\n\t\t\tend = inputEnd;\n\n\t\t\tif (left > 0) {\n\t\t\t\tint index = inputIndex;\n\n\t\t\t\t// attempt to align the end of the remaining input with ReadAheadSize\n\t\t\t\tif (index >= start) {\n\t\t\t\t\tstart -= Math.Min (ReadAheadSize, left);\n\t\t\t\t\tBuffer.BlockCopy (input, index, input, start, left);\n\t\t\t\t\tindex = start;\n\t\t\t\t\tstart += left;\n\t\t\t\t} else if (index > 0) {\n\t\t\t\t\tint shift = Math.Min (index, end - start);\n\t\t\t\t\tBuffer.BlockCopy (input, index, input, index - shift, left);\n\t\t\t\t\tindex -= shift;\n\t\t\t\t\tstart = index + left;\n\t\t\t\t} else {\n\t\t\t\t\t// we can't shift...\n\t\t\t\t\tstart = end;\n\t\t\t\t}\n\n\t\t\t\tinputIndex = index;\n\t\t\t\tinputEnd = start;\n\t\t\t} else {\n\t\t\t\tinputIndex = start;\n\t\t\t\tinputEnd = start;\n\t\t\t}\n\n\t\t\tend = input.Length - PadSize;\n\t\t}\n\n\t\tvoid OnReadAhead (int start, int nread)\n\t\t{\n\t\t\tif (nread > 0) {\n\t\t\t\tlogger.LogServer (input, start, nread);\n\t\t\t\tinputEnd += nread;\n\t\t\t} else {\n\t\t\t\tthrow new Pop3ProtocolException (\"The POP3 server has unexpectedly disconnected.\");\n\t\t\t}\n\t\t}\n\n\t\tint ReadAhead (CancellationToken cancellationToken)\n\t\t{\n\t\t\tAlignReadAheadBuffer (out int start, out int end);\n\n\t\t\ttry {\n\t\t\t\tvar network = Stream as NetworkStream;\n\t\t\t\tint nread;\n\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tnetwork?.Poll (SelectMode.SelectRead, cancellationToken);\n\t\t\t\tnread = Stream.Read (input, start, end - start);\n\n\t\t\t\tOnReadAhead (start, nread);\n\t\t\t} catch {\n\t\t\t\tIsConnected = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn inputEnd - inputIndex;\n\t\t}\n\n\t\tasync Task<int> ReadAheadAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tAlignReadAheadBuffer (out int start, out int end);\n\n\t\t\ttry {\n\t\t\t\tint nread;\n\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tnread = await Stream.ReadAsync (input, start, end - start, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tOnReadAhead (start, nread);\n\t\t\t} catch {\n\t\t\t\tIsConnected = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn inputEnd - inputIndex;\n\t\t}\n\n\t\tstatic void ValidateArguments (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || count > (buffer.Length - offset))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (Pop3Stream));\n\t\t}\n\n\t\tbool NeedInput (int index, int inputLeft)\n\t\t{\n\t\t\tif (inputLeft == 2 && input[index] == (byte) '.' && input[index + 1] == '\\n')\n\t\t\t\treturn false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvoid Read (byte[] buffer, ref int index, int endIndex)\n\t\t{\n\t\t\t// terminate the input buffer with a '\\n' to remove bounds checking in our inner loop\n\t\t\tinput[inputEnd] = (byte) '\\n';\n\n\t\t\twhile (inputIndex < inputEnd) {\n\t\t\t\tif (midline) {\n\t\t\t\t\t// read until end-of-line\n\t\t\t\t\twhile (index < endIndex && input[inputIndex] != (byte) '\\n')\n\t\t\t\t\t\tbuffer[index++] = input[inputIndex++];\n\n\t\t\t\t\tif (inputIndex == inputEnd || index == endIndex)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// consume the '\\n' character\n\t\t\t\t\tbuffer[index++] = input[inputIndex++];\n\t\t\t\t\tmidline = false;\n\t\t\t\t}\n\n\t\t\t\tif (inputIndex == inputEnd)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (input[inputIndex] == (byte) '.') {\n\t\t\t\t\tint inputLeft = inputEnd - inputIndex;\n\n\t\t\t\t\t// check for \".\\r\\n\" which signifies the end of the data stream\n\t\t\t\t\tif (inputLeft >= 3 && input[inputIndex + 1] == (byte) '\\r' && input[inputIndex + 2] == (byte) '\\n') {\n\t\t\t\t\t\tIsEndOfData = true;\n\t\t\t\t\t\tmidline = false;\n\t\t\t\t\t\tinputIndex += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for \".\\n\" which is used by some broken UNIX servers in place of \".\\r\\n\"\n\t\t\t\t\tif (inputLeft >= 2 && input[inputIndex + 1] == (byte) '\\n') {\n\t\t\t\t\t\tIsEndOfData = true;\n\t\t\t\t\t\tmidline = false;\n\t\t\t\t\t\tinputIndex += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for \".\" or \".\\r\" which might be an incomplete termination sequence\n\t\t\t\t\tif (inputLeft == 1 || (inputLeft == 2 && input[inputIndex + 1] == (byte) '\\r')) {\n\t\t\t\t\t\t// not enough data...\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for lines beginning with \"..\" which should be transformed into \".\"\n\t\t\t\t\tif (input[inputIndex + 1] == (byte) '.')\n\t\t\t\t\t\tinputIndex++;\n\t\t\t\t}\n\n\t\t\t\tmidline = true;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The stream is in line mode (see <see cref=\"Pop3StreamMode.Line\"/>).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic int Read (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (Mode != Pop3StreamMode.Data)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\tif (IsEndOfData || count == 0)\n\t\t\t\treturn 0;\n\n\t\t\tint endIndex = offset + count;\n\t\t\tint index = offset;\n\t\t\tint inputLeft;\n\n\t\t\tdo {\n\t\t\t\tinputLeft = inputEnd - inputIndex;\n\n\t\t\t\t// we need at least 3 bytes: \".\\r\\n\"\n\t\t\t\tif (inputLeft < 3 && (midline || NeedInput (inputIndex, inputLeft))) {\n\t\t\t\t\tif (index > offset)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tReadAhead (cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tRead (buffer, ref index, endIndex);\n\t\t\t} while (index < endIndex && !IsEndOfData);\n\n\t\t\treturn index - offset;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The stream is in line mode (see <see cref=\"Pop3StreamMode.Line\"/>).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\treturn Read (buffer, offset, count, CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The stream is in line mode (see <see cref=\"Pop3StreamMode.Line\"/>).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tif (Mode != Pop3StreamMode.Data)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\tif (IsEndOfData || count == 0)\n\t\t\t\treturn 0;\n\n\t\t\tint endIndex = offset + count;\n\t\t\tint index = offset;\n\t\t\tint inputLeft;\n\n\t\t\tdo {\n\t\t\t\tinputLeft = inputEnd - inputIndex;\n\n\t\t\t\t// we need at least 3 bytes: \".\\r\\n\"\n\t\t\t\tif (inputLeft < 3 && (midline || NeedInput (inputIndex, inputLeft))) {\n\t\t\t\t\tif (index > offset)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tawait ReadAheadAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tRead (buffer, ref index, endIndex);\n\t\t\t} while (index < endIndex && !IsEndOfData);\n\n\t\t\treturn index - offset;\n\t\t}\n\n\t\tbool TryReadLine (ByteArrayBuilder builder)\n\t\t{\n\t\t\tunsafe {\n\t\t\t\tfixed (byte* inbuf = input) {\n\t\t\t\t\tbyte* start, inptr, inend;\n\t\t\t\t\tint offset = inputIndex;\n\t\t\t\t\tint count;\n\n\t\t\t\t\tstart = inbuf + inputIndex;\n\t\t\t\t\tinend = inbuf + inputEnd;\n\t\t\t\t\t*inend = (byte) '\\n';\n\t\t\t\t\tinptr = start;\n\n\t\t\t\t\t// FIXME: use SIMD to optimize this\n\t\t\t\t\twhile (*inptr != (byte) '\\n')\n\t\t\t\t\t\tinptr++;\n\n\t\t\t\t\tinputIndex = (int) (inptr - inbuf);\n\t\t\t\t\tcount = (int) (inptr - start);\n\n\t\t\t\t\tif (inptr == inend) {\n\t\t\t\t\t\tbuilder.Append (input, offset, count);\n\t\t\t\t\t\tmidline = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// consume the '\\n'\n\t\t\t\t\tmidline = false;\n\t\t\t\t\tinputIndex++;\n\t\t\t\t\tcount++;\n\n\t\t\t\t\tbuilder.Append (input, offset, count);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a single line of input from the stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method should be called in a loop until it returns <see langword=\"true\" />.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" />, if reading the line is complete, <see langword=\"false\" /> otherwise.</returns>\n\t\t/// <param name=\"builder\">The output buffer to write the line data into.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tinternal bool ReadLine (ByteArrayBuilder builder, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (inputIndex == inputEnd)\n\t\t\t\tReadAhead (cancellationToken);\n\n\t\t\treturn TryReadLine (builder);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads a single line of input from the stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method should be called in a loop until it returns <see langword=\"true\" />.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" />, if reading the line is complete, <see langword=\"false\" /> otherwise.</returns>\n\t\t/// <param name=\"builder\">The output buffer to write the line data into.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tinternal async Task<bool> ReadLineAsync (ByteArrayBuilder builder, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (inputIndex == inputEnd)\n\t\t\t\tawait ReadAheadAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn TryReadLine (builder);\n\t\t}\n\n\t\tunsafe bool TryQueueCommand (Encoder encoder, string command, ref int index)\n\t\t{\n\t\t\tfixed (char* cmd = command) {\n\t\t\t\tint outputLeft = output.Length - outputIndex;\n\t\t\t\tint charCount = command.Length - index;\n\t\t\t\tchar* chars = cmd + index;\n\n\t\t\t\tvar needed = encoder.GetByteCount (chars, charCount, true);\n\n\t\t\t\tif (needed > output.Length) {\n\t\t\t\t\t// If the command we are trying to queue is larger than the output buffer and we\n\t\t\t\t\t// already have some commands queued in the output buffer, then flush the queue\n\t\t\t\t\t// before queuing this command.\n\t\t\t\t\tif (outputIndex > 0)\n\t\t\t\t\t\treturn false;\n\t\t\t\t} else if (needed > outputLeft && index == 0) {\n\t\t\t\t\t// If we are trying to queue a new command (index == 0) and we need more space than\n\t\t\t\t\t// what remains in the output buffer, then flush the output buffer before queueing\n\t\t\t\t\t// the new command. Some servers do not handle receiving partial commands well.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tfixed (byte* outbuf = output) {\n\t\t\t\t\tbyte* outptr = outbuf + outputIndex;\n\n\t\t\t\t\tencoder.Convert (chars, charCount, outptr, outputLeft, true, out int charsUsed, out int bytesUsed, out bool completed);\n\t\t\t\t\toutputIndex += bytesUsed;\n\t\t\t\t\tindex += charsUsed;\n\n\t\t\t\t\treturn completed;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queue a command to the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Queues a command to the POP3 server.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The character encoding.</param>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void QueueCommand (Encoding encoding, string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar encoder = encoding.GetEncoder ();\n\t\t\tint index = 0;\n\n\t\t\twhile (!TryQueueCommand (encoder, command, ref index))\n\t\t\t\tFlush (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously queue a command to the POP3 server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously queues a command to the POP3 server.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The character encoding.</param>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic async Task QueueCommandAsync (Encoding encoding, string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar encoder = encoding.GetEncoder ();\n\t\t\tint index = 0;\n\n\t\t\twhile (!TryQueueCommand (encoder, command, ref index))\n\t\t\t\tawait FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\tvoid OnWriteException (Exception ex, CancellationToken cancellationToken)\n\t\t{\n\t\t\tIsConnected = false;\n\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void Write (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\t\t\t\tint index = offset;\n\t\t\t\tint left = count;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tint n = Math.Min (BlockSize - outputIndex, left);\n\n\t\t\t\t\tif (outputIndex > 0 || n < BlockSize) {\n\t\t\t\t\t\t// append the data to the output buffer\n\t\t\t\t\t\tBuffer.BlockCopy (buffer, index, output, outputIndex, n);\n\t\t\t\t\t\toutputIndex += n;\n\t\t\t\t\t\tindex += n;\n\t\t\t\t\t\tleft -= n;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == BlockSize) {\n\t\t\t\t\t\t// flush the output buffer\n\t\t\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\t\t\tStream.Write (output, 0, BlockSize);\n\t\t\t\t\t\tlogger.LogClient (output, 0, BlockSize);\n\t\t\t\t\t\toutputIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == 0) {\n\t\t\t\t\t\t// write blocks of data to the stream without buffering\n\t\t\t\t\t\twhile (left >= BlockSize) {\n\t\t\t\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\t\t\t\tStream.Write (buffer, index, BlockSize);\n\t\t\t\t\t\t\tlogger.LogClient (buffer, index, BlockSize);\n\t\t\t\t\t\t\tindex += BlockSize;\n\t\t\t\t\t\t\tleft -= BlockSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tOnWriteException (ex, cancellationToken);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tIsEndOfData = false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tWrite (buffer, offset, count, CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <returns>A task that represents the asynchronous write operation.</returns>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\ttry {\n\t\t\t\tint index = offset;\n\t\t\t\tint left = count;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tint n = Math.Min (BlockSize - outputIndex, left);\n\n\t\t\t\t\tif (outputIndex > 0 || n < BlockSize) {\n\t\t\t\t\t\t// append the data to the output buffer\n\t\t\t\t\t\tBuffer.BlockCopy (buffer, index, output, outputIndex, n);\n\t\t\t\t\t\toutputIndex += n;\n\t\t\t\t\t\tindex += n;\n\t\t\t\t\t\tleft -= n;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == BlockSize) {\n\t\t\t\t\t\t// flush the output buffer\n\t\t\t\t\t\tawait Stream.WriteAsync (output, 0, BlockSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tlogger.LogClient (output, 0, BlockSize);\n\t\t\t\t\t\toutputIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == 0) {\n\t\t\t\t\t\t// write blocks of data to the stream without buffering\n\t\t\t\t\t\twhile (left >= BlockSize) {\n\t\t\t\t\t\t\tawait Stream.WriteAsync (buffer, index, BlockSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\tlogger.LogClient (buffer, index, BlockSize);\n\t\t\t\t\t\t\tindex += BlockSize;\n\t\t\t\t\t\t\tleft -= BlockSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tOnWriteException (ex, cancellationToken);\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tIsEndOfData = false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void Flush (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (outputIndex == 0)\n\t\t\t\treturn;\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\n\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\tStream.Write (output, 0, outputIndex);\n\t\t\t\tStream.Flush ();\n\n\t\t\t\tlogger.LogClient (output, 0, outputIndex);\n\t\t\t\toutputIndex = 0;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tOnWriteException (ex, cancellationToken);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tFlush (CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <returns>A task that represents the asynchronous flush operation.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (outputIndex == 0)\n\t\t\t\treturn;\n\n\t\t\ttry {\n\t\t\t\tawait Stream.WriteAsync (output, 0, outputIndex, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tlogger.LogClient (output, 0, outputIndex);\n\t\t\t\toutputIndex = 0;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tOnWriteException (ex, cancellationToken);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <returns>The new position within the stream.</returns>\n\t\t/// <param name=\"offset\">The offset into the stream relative to the <paramref name=\"origin\"/>.</param>\n\t\t/// <param name=\"origin\">The origin to seek from.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the length of the stream.\n\t\t/// </summary>\n\t\t/// <param name=\"value\">The desired length of the stream in bytes.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support setting the length.\n\t\t/// </exception>\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"Pop3Stream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tStream.Dispose ();\n\t\t\t}\n\n\t\t\tdisposed = true;\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/HttpProxyClient.cs",
    "content": "﻿//\n// HttpProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Buffers;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// An HTTP proxy client.\n\t/// </summary>\n\t/// <remarks>\n\t/// An HTTP proxy client.\n\t/// </remarks>\n\tpublic class HttpProxyClient : ProxyClient\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic HttpProxyClient (string host, int port) : base (host, port)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic HttpProxyClient (string host, int port, NetworkCredential credentials) : base (host, port, credentials)\n\t\t{\n\t\t}\n\n\t\tinternal static byte[] GetConnectCommand (string host, int port, NetworkCredential? proxyCredentials)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tbuilder.AppendFormat (CultureInfo.InvariantCulture, \"CONNECT {0}:{1} HTTP/1.1\\r\\n\", host, port);\n\t\t\tbuilder.AppendFormat (CultureInfo.InvariantCulture, \"Host: {0}:{1}\\r\\n\", host, port);\n\t\t\tif (proxyCredentials != null) {\n\t\t\t\tvar token = Encoding.UTF8.GetBytes (string.Format (CultureInfo.InvariantCulture, \"{0}:{1}\", proxyCredentials.UserName, proxyCredentials.Password));\n\t\t\t\tvar base64 = Convert.ToBase64String (token);\n\t\t\t\tbuilder.AppendFormat (CultureInfo.InvariantCulture, \"Proxy-Authorization: Basic {0}\\r\\n\", base64);\n\t\t\t}\n\t\t\tbuilder.Append (\"\\r\\n\");\n\n\t\t\treturn Encoding.UTF8.GetBytes (builder.ToString ());\n\t\t}\n\n\t\tinternal static bool TryConsumeHeaders (ByteArrayBuilder builder, byte c, ref bool newLine)\n\t\t{\n\t\t\tvar endOfHeaders = false;\n\n\t\t\tswitch ((char) c) {\n\t\t\tcase '\\r':\n\t\t\t\tbreak;\n\t\t\tcase '\\n':\n\t\t\t\tendOfHeaders = newLine;\n\t\t\t\tnewLine = true;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tnewLine = false;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbuilder.Append (c);\n\n\t\t\treturn endOfHeaders;\n\t\t}\n\n\t\tinternal static void ValidateHttpResponse (string response, string host, int port)\n\t\t{\n\t\t\t// Verify that the response starts with something like \"HTTP/1.1 200 ...\"\n\t\t\tif (response.Length >= 15 && response.StartsWith (\"HTTP/1.\", StringComparison.OrdinalIgnoreCase) &&\n\t\t\t\t(response[7] == '1' || response[7] == '0') && response[8] == ' ' &&\n\t\t\t\tresponse[9] == '2' && response[10] == '0' && response[11] == '0' &&\n\t\t\t\tresponse[12] == ' ') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthrow new ProxyProtocolException (string.Format (CultureInfo.InvariantCulture, \"Failed to connect to {0}:{1}: {2}\", host, port, response));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Stream Connect (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar command = GetConnectCommand (host, port, ProxyCredentials);\n\t\t\tvar socket = SocketUtils.Connect (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken);\n\n\t\t\ttry {\n\t\t\t\tSend (socket, command, 0, command.Length, cancellationToken);\n\n\t\t\t\tvar builder = new ByteArrayBuilder (256);\n\t\t\t\tvar buffer = new byte[1];\n\t\t\t\tvar newline = false;\n\t\t\t\tstring response;\n\n\t\t\t\ttry {\n\t\t\t\t\t// read until we consume the end of the headers\n\t\t\t\t\tdo {\n\t\t\t\t\t\tint nread = Receive (socket, buffer, 0, 1, cancellationToken);\n\n\t\t\t\t\t\tif (nread < 1 || TryConsumeHeaders (builder, buffer[0], ref newline))\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\tresponse = builder.ToString ();\n\t\t\t\t} finally {\n\t\t\t\t\tbuilder.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tValidateHttpResponse (response, host, port);\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t} catch {\n\t\t\t\tif (socket.Connected)\n\t\t\t\t\tsocket.Disconnect (false);\n\t\t\t\tsocket.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = await SocketUtils.ConnectAsync (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken).ConfigureAwait (false);\n\t\t\tvar command = GetConnectCommand (host, port, ProxyCredentials);\n\n\t\t\ttry {\n\t\t\t\tawait SendAsync (socket, command, 0, command.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tvar builder = new ByteArrayBuilder (256);\n\t\t\t\tvar buffer = new byte[1];\n\t\t\t\tvar newline = false;\n\t\t\t\tstring response;\n\n\t\t\t\ttry {\n\t\t\t\t\t// read until we consume the end of the headers\n\t\t\t\t\tdo {\n\t\t\t\t\t\tint nread = await ReceiveAsync (socket, buffer, 0, 1, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (nread < 1 || TryConsumeHeaders (builder, buffer[0], ref newline))\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\tresponse = builder.ToString ();\n\t\t\t\t} finally {\n\t\t\t\t\tbuilder.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tValidateHttpResponse (response, host, port);\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t} catch {\n\t\t\t\tif (socket.Connected)\n\t\t\t\t\tsocket.Disconnect (false);\n\t\t\t\tsocket.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/HttpsProxyClient.cs",
    "content": "﻿//\n// HttpsProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Buffers;\nusing System.Threading;\nusing System.Net.Security;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MailKit.Security;\n\nusing SslStream = MailKit.Net.SslStream;\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Proxy {\n\t/// <summary>\n\t/// An HTTPS proxy client.\n\t/// </summary>\n\t/// <remarks>\n\t/// An HTTPS proxy client.\n\t/// </remarks>\n\tpublic class HttpsProxyClient : ProxyClient\n\t{\n#if NET48_OR_GREATER || NET5_0_OR_GREATER\n\t\tconst SslProtocols DefaultSslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13;\n#else\n\t\tconst SslProtocols DefaultSslProtocols = SslProtocols.Tls12 | (SslProtocols) 12288;\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpsProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpsProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic HttpsProxyClient (string host, int port) : base (host, port)\n\t\t{\n\t\t\tSslProtocols = DefaultSslProtocols;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpsProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.HttpsProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic HttpsProxyClient (string host, int port, NetworkCredential credentials) : base (host, port, credentials)\n\t\t{\n\t\t\tSslProtocols = DefaultSslProtocols;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the set of enabled SSL and/or TLS protocol versions that the client is allowed to use.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the enabled SSL and/or TLS protocol versions that the client is allowed to use.</para>\n\t\t/// <para>By default, MailKit initializes this value to enable only TLS v1.2 and greater.\n\t\t/// TLS v1.1, TLS v1.0 and all versions of SSL are not enabled by default due to them all being\n\t\t/// susceptible to security vulnerabilities such as POODLE.</para>\n\t\t/// <para>This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_Net_Proxy_ProxyClient_Connect.htm\">Connect</a> methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The SSL and TLS protocol versions that are enabled.</value>\n\t\tpublic SslProtocols SslProtocols {\n\t\t\tget; set;\n\t\t}\n\n#if NET5_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Gets or sets the cipher suites allowed to be used when negotiating an SSL or TLS connection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Specifies the cipher suites allowed to be used when negotiating an SSL or TLS connection.\n\t\t/// When set to <see langword=\"null\" />, the operating system default is used. Use extreme caution when\n\t\t/// changing this setting.\n\t\t/// </remarks>\n\t\t/// <value>The cipher algorithms allowed for use when negotiating SSL or TLS encryption.</value>\n\t\tpublic CipherSuitesPolicy? SslCipherSuitesPolicy {\n\t\t\tget; set;\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Gets or sets the client SSL certificates.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Some servers may require the client SSL certificates in order\n\t\t/// to allow the user to connect.</para>\n\t\t/// <para>This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_Net_Proxy_ProxyClient_Connect.htm\">Connect</a> methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The client SSL certificates.</value>\n\t\tpublic X509CertificateCollection? ClientCertificates {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether connecting via SSL/TLS should check certificate revocation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether connecting via SSL/TLS should check certificate revocation.</para>\n\t\t/// <para>Normally, the value of this property should be set to <see langword=\"true\" /> (the default) for security\n\t\t/// reasons, but there are times when it may be necessary to set it to <see langword=\"false\" />.</para>\n\t\t/// <para>For example, most Certificate Authorities are probably pretty good at keeping their CRL and/or\n\t\t/// OCSP servers up 24/7, but occasionally they do go down or are otherwise unreachable due to other\n\t\t/// network problems between the client and the Certificate Authority. When this happens, it becomes\n\t\t/// impossible to check the revocation status of one or more of the certificates in the chain\n\t\t/// resulting in an <see cref=\"Security.SslHandshakeException\"/> being thrown in the\n\t\t/// <a href=\"Overload_MailKit_Net_Proxy_ProxyClient_Connect.htm\">Connect</a> method. If this becomes a problem,\n\t\t/// it may become desirable to set <see cref=\"CheckCertificateRevocation\"/> to <see langword=\"false\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if certificate revocation should be checked; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool CheckCertificateRevocation {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or sets a callback function to validate the server certificate.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a callback function to validate the server certificate.</para>\n\t\t/// <para>This property should be set before calling any of the\n\t\t/// <a href=\"Overload_MailKit_Net_Proxy_ProxyClient_Connect.htm\">Connect</a> methods.</para>\n\t\t/// </remarks>\n\t\t/// <value>The server certificate validation callback function.</value>\n\t\tpublic RemoteCertificateValidationCallback? ServerCertificateValidationCallback {\n\t\t\tget; set;\n\t\t}\n\n\t\t// Note: This is used by SslHandshakeException to build the exception message.\n\t\tSslCertificateValidationInfo? sslValidationInfo;\n\n\t\tbool ValidateRemoteCertificate (object sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\tbool valid;\n\n\t\t\tsslValidationInfo?.Dispose ();\n\t\t\tsslValidationInfo = null;\n\n\t\t\tif (ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServerCertificateValidationCallback (ProxyHost, certificate, chain, sslPolicyErrors);\n#if NETFRAMEWORK\n\t\t\t} else if (ServicePointManager.ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServicePointManager.ServerCertificateValidationCallback (ProxyHost, certificate, chain, sslPolicyErrors);\n#endif\n\t\t\t} else {\n\t\t\t\tvalid = sslPolicyErrors == SslPolicyErrors.None;\n\t\t\t}\n\n\t\t\tif (!valid) {\n\t\t\t\t// Note: The SslHandshakeException.Create() method will nullify this once it's done using it.\n\t\t\t\tsslValidationInfo = new SslCertificateValidationInfo (ProxyHost, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\treturn valid;\n\t\t}\n\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t/// <summary>\n\t\t/// Gets the SSL/TLS client authentication options for use with .NET5's SslStream.AuthenticateAsClient() API.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the SSL/TLS client authentication options for use with .NET5's SslStream.AuthenticateAsClient() API.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The target host that the client is connected to.</param>\n\t\t/// <param name=\"remoteCertificateValidationCallback\">The remote certificate validation callback.</param>\n\t\t/// <returns>The client SSL/TLS authentication options.</returns>\n\t\tSslClientAuthenticationOptions GetSslClientAuthenticationOptions (string host, RemoteCertificateValidationCallback remoteCertificateValidationCallback)\n\t\t{\n\t\t\treturn new SslClientAuthenticationOptions {\n\t\t\t\tCertificateRevocationCheckMode = CheckCertificateRevocation ? X509RevocationMode.Online : X509RevocationMode.NoCheck,\n\t\t\t\tApplicationProtocols = new List<SslApplicationProtocol> { SslApplicationProtocol.Http11 },\n\t\t\t\tRemoteCertificateValidationCallback = remoteCertificateValidationCallback,\n#if NET5_0_OR_GREATER\n\t\t\t\tCipherSuitesPolicy = SslCipherSuitesPolicy,\n#endif\n\t\t\t\tClientCertificates = ClientCertificates,\n\t\t\t\tEnabledSslProtocols = SslProtocols,\n\t\t\t\tTargetHost = host\n\t\t\t};\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Stream Connect (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = SocketUtils.Connect (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken);\n\t\t\tvar ssl = new SslStream (new NetworkStream (socket, true), false, ValidateRemoteCertificate);\n\n\t\t\ttry {\n#if NET5_0_OR_GREATER\n\t\t\t\tssl.AuthenticateAsClient (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate));\n#else\n\t\t\t\tssl.AuthenticateAsClient (host, ClientCertificates, SslProtocols, CheckCertificateRevocation);\n#endif\n\t\t\t} catch (Exception ex) {\n\t\t\t\tssl.Dispose ();\n\n\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"HTTP\", host, port, 443, 80);\n\t\t\t}\n\n\t\t\tvar command = HttpProxyClient.GetConnectCommand (host, port, ProxyCredentials);\n\n\t\t\ttry {\n\t\t\t\tssl.Write (command, 0, command.Length);\n\n\t\t\t\tvar builder = new ByteArrayBuilder (256);\n\t\t\t\tvar buffer = new byte[1];\n\t\t\t\tvar newline = false;\n\t\t\t\tstring response;\n\n\t\t\t\ttry {\n\t\t\t\t\t// read until we consume the end of the headers\n\t\t\t\t\tdo {\n\t\t\t\t\t\tint nread = ssl.Read (buffer, 0, 1);\n\n\t\t\t\t\t\tif (nread < 1 || HttpProxyClient.TryConsumeHeaders (builder, buffer[0], ref newline))\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\tresponse = builder.ToString ();\n\t\t\t\t} finally {\n\t\t\t\t\tbuilder.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tHttpProxyClient.ValidateHttpResponse (response, host, port);\n\t\t\t\treturn ssl;\n\t\t\t} catch {\n\t\t\t\tssl.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = await SocketUtils.ConnectAsync (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken).ConfigureAwait (false);\n\t\t\tvar ssl = new SslStream (new NetworkStream (socket, true), false, ValidateRemoteCertificate);\n\n\t\t\ttry {\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t\t\tawait ssl.AuthenticateAsClientAsync (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate), cancellationToken).ConfigureAwait (false);\n#else\n\t\t\t\tawait ssl.AuthenticateAsClientAsync (host, ClientCertificates, SslProtocols, CheckCertificateRevocation).ConfigureAwait (false);\n#endif\n\t\t\t} catch (Exception ex) {\n\t\t\t\tssl.Dispose ();\n\n\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"HTTP\", host, port, 443, 80);\n\t\t\t}\n\n\t\t\tvar command = HttpProxyClient.GetConnectCommand (host, port, ProxyCredentials);\n\n\t\t\ttry {\n\t\t\t\tawait ssl.WriteAsync (command, 0, command.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tvar builder = new ByteArrayBuilder (256);\n\t\t\t\tvar buffer = new byte[1];\n\t\t\t\tvar newline = false;\n\t\t\t\tstring response;\n\n\t\t\t\ttry {\n\t\t\t\t\t// read until we consume the end of the headers\n\t\t\t\t\tdo {\n\t\t\t\t\t\tint nread = ssl.Read (buffer, 0, 1);\n\n\t\t\t\t\t\tif (HttpProxyClient.TryConsumeHeaders (builder, buffer[0], ref newline))\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t} while (true);\n\n\t\t\t\t\tresponse = builder.ToString ();\n\t\t\t\t} finally {\n\t\t\t\t\tbuilder.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tHttpProxyClient.ValidateHttpResponse (response, host, port);\n\t\t\t\treturn ssl;\n\t\t\t} catch {\n\t\t\t\tssl.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/IProxyClient.cs",
    "content": "﻿//\n// IProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// An interface for connecting to services via a proxy.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by <see cref=\"HttpProxyClient\"/>, <see cref=\"HttpsProxyClient\"/>,\n\t/// <see cref=\"Socks4Client\"/>, <see cref=\"Socks4aClient\"/> and <see cref=\"Socks5Client\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t/// </example>\n\tpublic interface IProxyClient\n\t{\n\t\t/// <summary>\n\t\t/// Gets the proxy credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the credentials to use when authenticating with the proxy server.\n\t\t/// </remarks>\n\t\t/// <value>The proxy credentials.</value>\n\t\tNetworkCredential? ProxyCredentials { get; }\n\n\t\t/// <summary>\n\t\t/// Get the proxy host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the host name of the proxy server.\n\t\t/// </remarks>\n\t\t/// <value>The host name of the proxy server.</value>\n\t\tstring ProxyHost { get; }\n\n\t\t/// <summary>\n\t\t/// Get the proxy port.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the port to use when connecting to the proxy server.\n\t\t/// </remarks>\n\t\t/// <value>The proxy port.</value>\n\t\tint ProxyPort { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set the local IP end point to use when connecting to a remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the local IP end point to use when connecting to a remote host.\n\t\t/// </remarks>\n\t\t/// <value>The local IP end point or <see langword=\"null\" /> to use the default end point.</value>\n\t\tIPEndPoint? LocalEndPoint { get; set; }\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tStream Connect (string host, int port, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tTask<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"timeout\">The timeout, in milliseconds.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.TimeoutException\">\n\t\t/// The operation timed out.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tStream Connect (string host, int port, int timeout, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"timeout\">The timeout, in milliseconds.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.TimeoutException\">\n\t\t/// The operation timed out.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tTask<Stream> ConnectAsync (string host, int port, int timeout, CancellationToken cancellationToken = default);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/ProxyClient.cs",
    "content": "﻿//\n// ProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\n\n#if NET6_0_OR_GREATER\nusing System.Net.Http;\n#endif\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// An abstract proxy client base class.\n\t/// </summary>\n\t/// <remarks>\n\t/// A proxy client can be used to connect to a service through a firewall that\n\t/// would otherwise be blocked.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t/// </example>\n\tpublic abstract class ProxyClient : IProxyClient\n\t{\n#if NET6_0_OR_GREATER\n\t\tstatic IProxyClient? systemProxy;\n\n\t\t/// <summary>\n\t\t/// Get a client for the default system proxy.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets a client for the default system proxy.\n\t\t/// </remarks>\n\t\t/// <value>A client for the default system proxy.</value>\n\t\tpublic static IProxyClient SystemProxy {\n\t\t\tget {\n\t\t\t\tsystemProxy ??= new WebProxyClient (HttpClient.DefaultProxy);\n\n\t\t\t\treturn systemProxy;\n\t\t\t}\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.ProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.ProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tprotected ProxyClient (string host, int port)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0 || host.Length > 255)\n\t\t\t\tthrow new ArgumentException (\"The length of the host name must be between 0 and 256 characters.\", nameof (host));\n\n\t\t\tif (port < 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\n\t\t\tProxyHost = host;\n\t\t\tProxyPort = port == 0 ? 1080 : port;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.ProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.ProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tprotected ProxyClient (string host, int port, NetworkCredential credentials) : this (host, port)\n\t\t{\n\t\t\tif (credentials == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (credentials));\n\n\t\t\tProxyCredentials = credentials;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the proxy credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the credentials to use when authenticating with the proxy server.\n\t\t/// </remarks>\n\t\t/// <value>The proxy credentials.</value>\n\t\tpublic NetworkCredential? ProxyCredentials {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the proxy host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the host name of the proxy server.\n\t\t/// </remarks>\n\t\t/// <value>The host name of the proxy server.</value>\n\t\tpublic string ProxyHost {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the proxy port.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the port to use when connecting to the proxy server.\n\t\t/// </remarks>\n\t\t/// <value>The proxy port.</value>\n\t\tpublic int ProxyPort {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the local IP end point to use when connecting to a remote host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the local IP end point to use when connecting to a remote host.\n\t\t/// </remarks>\n\t\t/// <value>The local IP end point or <see langword=\"null\" /> to use the default end point.</value>\n\t\tpublic IPEndPoint? LocalEndPoint {\n\t\t\tget; set;\n\t\t}\n\n\t\tinternal static void ValidateArguments (string host, int port)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0 || host.Length > 255)\n\t\t\t\tthrow new ArgumentException (\"The length of the host name must be between 0 and 256 characters.\", nameof (host));\n\n\t\t\tif (port <= 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\t\t}\n\n\t\tstatic void ValidateArguments (string host, int port, int timeout)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tif (timeout < -1)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (timeout));\n\t\t}\n\n\t\tstatic void AsyncOperationCompleted (object? sender, SocketAsyncEventArgs args)\n\t\t{\n\t\t\tvar tcs = (TaskCompletionSource<bool>) args.UserToken!;\n\n\t\t\tif (args.SocketError == SocketError.Success) {\n\t\t\t\ttcs.TrySetResult (true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttcs.TrySetException (new SocketException ((int) args.SocketError));\n\t\t}\n\n\t\tinternal static void Send (Socket socket, byte[] buffer, int offset, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (cancellationToken.CanBeCanceled) {\n\t\t\t\tvar tcs = new TaskCompletionSource<bool> ();\n\n\t\t\t\tusing (var registration = cancellationToken.Register (() => tcs.TrySetCanceled (), false)) {\n\t\t\t\t\tusing (var args = new SocketAsyncEventArgs ()) {\n\t\t\t\t\t\targs.Completed += AsyncOperationCompleted;\n\t\t\t\t\t\targs.SetBuffer (buffer, offset, length);\n\t\t\t\t\t\targs.AcceptSocket = socket;\n\t\t\t\t\t\targs.UserToken = tcs;\n\n\t\t\t\t\t\tif (!socket.SendAsync (args))\n\t\t\t\t\t\t\tAsyncOperationCompleted (null, args);\n\n\t\t\t\t\t\ttcs.Task.GetAwaiter ().GetResult ();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tSocketUtils.Poll (socket, SelectMode.SelectWrite, cancellationToken);\n\n\t\t\tsocket.Send (buffer, offset, length, SocketFlags.None);\n\t\t}\n\n\t\tinternal static async Task SendAsync (Socket socket, byte[] buffer, int offset, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar tcs = new TaskCompletionSource<bool> ();\n\n\t\t\tusing (var registration = cancellationToken.Register (() => tcs.TrySetCanceled (), false)) {\n\t\t\t\tusing (var args = new SocketAsyncEventArgs ()) {\n\t\t\t\t\targs.Completed += AsyncOperationCompleted;\n\t\t\t\t\targs.SetBuffer (buffer, offset, length);\n\t\t\t\t\targs.AcceptSocket = socket;\n\t\t\t\t\targs.UserToken = tcs;\n\n\t\t\t\t\tif (!socket.SendAsync (args))\n\t\t\t\t\t\tAsyncOperationCompleted (null, args);\n\n\t\t\t\t\tawait tcs.Task.ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinternal static int Receive (Socket socket, byte[] buffer, int offset, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (cancellationToken.CanBeCanceled) {\n\t\t\t\tvar tcs = new TaskCompletionSource<bool> ();\n\n\t\t\t\tusing (var registration = cancellationToken.Register (() => tcs.TrySetCanceled (), false)) {\n\t\t\t\t\tusing (var args = new SocketAsyncEventArgs ()) {\n\t\t\t\t\t\targs.Completed += AsyncOperationCompleted;\n\t\t\t\t\t\targs.SetBuffer (buffer, offset, length);\n\t\t\t\t\t\targs.AcceptSocket = socket;\n\t\t\t\t\t\targs.UserToken = tcs;\n\n\t\t\t\t\t\tif (!socket.ReceiveAsync (args))\n\t\t\t\t\t\t\tAsyncOperationCompleted (null, args);\n\n\t\t\t\t\t\ttcs.Task.GetAwaiter ().GetResult ();\n\n\t\t\t\t\t\treturn args.BytesTransferred;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tSocketUtils.Poll (socket, SelectMode.SelectRead, cancellationToken);\n\n\t\t\treturn socket.Receive (buffer, offset, length, SocketFlags.None);\n\t\t}\n\n\t\tinternal static async Task<int> ReceiveAsync (Socket socket, byte[] buffer, int offset, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar tcs = new TaskCompletionSource<bool> ();\n\n\t\t\tusing (var registration = cancellationToken.Register (() => tcs.TrySetCanceled (), false)) {\n\t\t\t\tusing (var args = new SocketAsyncEventArgs ()) {\n\t\t\t\t\targs.Completed += AsyncOperationCompleted;\n\t\t\t\t\targs.SetBuffer (buffer, offset, length);\n\t\t\t\t\targs.AcceptSocket = socket;\n\t\t\t\t\targs.UserToken = tcs;\n\n\t\t\t\t\tif (!socket.ReceiveAsync (args))\n\t\t\t\t\t\tAsyncOperationCompleted (null, args);\n\n\t\t\t\t\tawait tcs.Task.ConfigureAwait (false);\n\n\t\t\t\t\treturn args.BytesTransferred;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Stream Connect (string host, int port, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic abstract Task<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"timeout\">The timeout, in milliseconds.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"timeout\"/> is less than <c>-1</c>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.TimeoutException\">\n\t\t/// The operation timed out.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic virtual Stream Connect (string host, int port, int timeout, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port, timeout);\n\n\t\t\tusing (var ts = new CancellationTokenSource (timeout)) {\n\t\t\t\tusing (var linked = CancellationTokenSource.CreateLinkedTokenSource (cancellationToken, ts.Token)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn Connect (host, port, linked.Token);\n \t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tif (!cancellationToken.IsCancellationRequested)\n\t\t\t\t\t\t\tthrow new TimeoutException ();\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"timeout\">The timeout, in milliseconds.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"timeout\"/> is less than <c>-1</c>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.TimeoutException\">\n\t\t/// The operation timed out.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic async virtual Task<Stream> ConnectAsync (string host, int port, int timeout, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port, timeout);\n\n\t\t\tusing (var ts = new CancellationTokenSource (timeout)) {\n\t\t\t\tusing (var linked = CancellationTokenSource.CreateLinkedTokenSource (cancellationToken, ts.Token)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await ConnectAsync (host, port, linked.Token).ConfigureAwait (false);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tif (!cancellationToken.IsCancellationRequested)\n\t\t\t\t\t\t\tthrow new TimeoutException ();\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/ProxyProtocolException.cs",
    "content": "﻿//\n// ProxyProtocolException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// A proxy protocol exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when there is an error communicating with a proxy server.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class ProxyProtocolException : ProtocolException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Proxy.ProxyProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProxyProtocolException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected ProxyProtocolException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Proxy.ProxyProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProxyProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tpublic ProxyProtocolException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Proxy.ProxyProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProxyProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic ProxyProtocolException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Proxy.ProxyProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProxyProtocolException\"/>.\n\t\t/// </remarks>\n\t\tpublic ProxyProtocolException ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/Socks4Client.cs",
    "content": "﻿//\n// Socks4Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// A SOCKS4 proxy client.\n\t/// </summary>\n\t/// <remarks>\n\t/// A SOCKS4 proxy client.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t/// </example>\n\tpublic class Socks4Client : SocksClient\n\t{\n\t\tstatic readonly byte[] InvalidIPAddress = { 0, 0, 0, 1 };\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic Socks4Client (string host, int port) : base (4, host, port)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\tpublic Socks4Client (string host, int port, NetworkCredential credentials) : base (4, host, port, credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether this <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> is a Socks4a client.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets whether this <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> is a Socks4a client.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if is is a Socks4a client; otherwise, <see langword=\"false\" />.</value>\n\t\tprotected bool IsSocks4a {\n\t\t\tget; set;\n\t\t}\n\n\t\tenum Socks4Command : byte\n\t\t{\n\t\t\tConnect = 0x01,\n\t\t\tBind    = 0x02,\n\t\t}\n\n\t\tenum Socks4Reply : byte\n\t\t{\n\t\t\tRequestGranted        = 0x5a,\n\t\t\tRequestRejected       = 0x5b,\n\t\t\tRequestFailedNoIdentd = 0x5c,\n\t\t\tRequestFailedWrongId  = 0x5d\n\t\t}\n\n\t\tstatic string GetFailureReason (byte reply)\n\t\t{\n\t\t\tswitch ((Socks4Reply) reply) {\n\t\t\tcase Socks4Reply.RequestRejected:       return \"Request rejected or failed.\";\n\t\t\tcase Socks4Reply.RequestFailedNoIdentd: return \"Request failed; unable to contact client machine's identd service.\";\n\t\t\tcase Socks4Reply.RequestFailedWrongId:  return \"Request failed; client ID does not match specified username.\";\n\t\t\tdefault:                                return \"Unknown error.\";\n\t\t\t}\n\t\t}\n\n\t\tstatic IPAddress Resolve (string host, IPAddress[] ipAddresses)\n\t\t{\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tif (ipAddresses[i].AddressFamily == AddressFamily.InterNetwork)\n\t\t\t\t\treturn ipAddresses[i];\n\t\t\t}\n\n\t\t\tthrow new ArgumentException ($\"Could not resolve a suitable IPv4 address for '{host}'.\", nameof (host));\n\t\t}\n\n\t\tstatic IPAddress Resolve (string host, CancellationToken cancellationToken)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\n\t\t\treturn Resolve (host, ipAddresses);\n\t\t}\n\n\t\tstatic async Task<IPAddress> ResolveAsync (string host, CancellationToken cancellationToken)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n#if NET6_0_OR_GREATER\n\t\t\tvar ipAddresses = await Dns.GetHostAddressesAsync (host, cancellationToken).ConfigureAwait (false);\n#else\n\t\t\tvar ipAddresses = await Dns.GetHostAddressesAsync (host).ConfigureAwait (false);\n#endif\n\n\t\t\treturn Resolve (host, ipAddresses);\n\t\t}\n\n\t\tbyte[] GetConnectCommand (byte[]? domain, byte[] addr, int port)\n\t\t{\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\t// |VER | CMD | DST.PORT | DST.ADDR |  USERID  | NULL  |  DST.DOMAIN  | NULL  |\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\t// | 1  |  1  |    2     |    4     | VARIABLE | X'00' |   VARIABLE   | X'00' |\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\tvar user = ProxyCredentials != null ? Encoding.UTF8.GetBytes (ProxyCredentials.UserName) : Array.Empty<byte> ();\n\t\t\tint bufferSize = 9 + user.Length + (domain != null ? domain.Length + 1 : 0);\n\t\t\tvar buffer = new byte[bufferSize];\n\t\t\tint n = 0;\n\n\t\t\tbuffer[n++] = (byte) SocksVersion;\n\t\t\tbuffer[n++] = (byte) Socks4Command.Connect;\n\t\t\tbuffer[n++] = (byte) (port >> 8);\n\t\t\tbuffer[n++] = (byte) port;\n\t\t\tBuffer.BlockCopy (addr, 0, buffer, n, 4);\n\t\t\tn += 4;\n\t\t\tBuffer.BlockCopy (user, 0, buffer, n, user.Length);\n\t\t\tn += user.Length;\n\t\t\tbuffer[n++] = 0x00;\n\n\t\t\tif (domain != null) {\n\t\t\t\tBuffer.BlockCopy (domain, 0, buffer, n, domain.Length);\n\t\t\t\tn += domain.Length;\n\t\t\t\tbuffer[n++] = 0x00;\n\t\t\t}\n\n\t\t\treturn buffer;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Stream Connect (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tbyte[]? domain = null;\n\t\t\tbyte[] addr;\n\n\t\t\tValidateArguments (host, port);\n\n\t\t\tif (!IPAddress.TryParse (host, out var ip)) {\n\t\t\t\tif (IsSocks4a) {\n\t\t\t\t\tdomain = Encoding.UTF8.GetBytes (host);\n\t\t\t\t\taddr = InvalidIPAddress;\n\t\t\t\t} else {\n\t\t\t\t\tip = Resolve (host, cancellationToken);\n\t\t\t\t\taddr = ip.GetAddressBytes ();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (ip.AddressFamily != AddressFamily.InterNetwork)\n\t\t\t\t\tthrow new ArgumentException (\"The specified host address must be IPv4.\", nameof (host));\n\n\t\t\t\taddr = ip.GetAddressBytes ();\n\t\t\t}\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = SocketUtils.Connect (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken);\n\n\t\t\ttry {\n\t\t\t\tvar buffer = GetConnectCommand (domain, addr, port);\n\n\t\t\t\tSend (socket, buffer, 0, buffer.Length, cancellationToken);\n\n\t\t\t\t// +-----+-----+----------+----------+\n\t\t\t\t// | VER | REP | BND.PORT | BND.ADDR |\n\t\t\t\t// +-----+-----+----------+----------+\n\t\t\t\t// |  1  |  1  |    2     |    4     |\n\t\t\t\t// +-----+-----+----------+----------+\n\t\t\t\tint nread, n = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((nread = Receive (socket, buffer, 0 + n, 8 - n, cancellationToken)) > 0)\n\t\t\t\t\t\tn += nread;\n\t\t\t\t} while (n < 8);\n\n\t\t\t\tif (buffer[1] != (byte) Socks4Reply.RequestGranted)\n\t\t\t\t\tthrow new ProxyProtocolException (string.Format (CultureInfo.InvariantCulture, \"Failed to connect to {0}:{1}: {2}\", host, port, GetFailureReason (buffer[1])));\n\n\t\t\t\t// TODO: do we care about BND.ADDR and BND.PORT?\n\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t} catch {\n\t\t\t\tif (socket.Connected)\n\t\t\t\t\tsocket.Disconnect (false);\n\n\t\t\t\tsocket.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tbyte[]? domain = null;\n\t\t\tbyte[] addr;\n\n\t\t\tValidateArguments (host, port);\n\n\t\t\tif (!IPAddress.TryParse (host, out var ip)) {\n\t\t\t\tif (IsSocks4a) {\n\t\t\t\t\tdomain = Encoding.UTF8.GetBytes (host);\n\t\t\t\t\taddr = InvalidIPAddress;\n\t\t\t\t} else {\n\t\t\t\t\tip = await ResolveAsync (host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\taddr = ip.GetAddressBytes ();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (ip.AddressFamily != AddressFamily.InterNetwork)\n\t\t\t\t\tthrow new ArgumentException (\"The specified host address must be IPv4.\", nameof (host));\n\n\t\t\t\taddr = ip.GetAddressBytes ();\n\t\t\t}\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = await SocketUtils.ConnectAsync (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken).ConfigureAwait (false);\n\n\t\t\ttry {\n\t\t\t\tvar buffer = GetConnectCommand (domain, addr, port);\n\n\t\t\t\tawait SendAsync (socket, buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// +-----+-----+----------+----------+\n\t\t\t\t// | VER | REP | BND.PORT | BND.ADDR |\n\t\t\t\t// +-----+-----+----------+----------+\n\t\t\t\t// |  1  |  1  |    2     |    4     |\n\t\t\t\t// +-----+-----+----------+----------+\n\t\t\t\tint nread, n = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((nread = await ReceiveAsync (socket, buffer, 0 + n, 8 - n, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\t\tn += nread;\n\t\t\t\t} while (n < 8);\n\n\t\t\t\tif (buffer[1] != (byte) Socks4Reply.RequestGranted)\n\t\t\t\t\tthrow new ProxyProtocolException (string.Format (CultureInfo.InvariantCulture, \"Failed to connect to {0}:{1}: {2}\", host, port, GetFailureReason (buffer[1])));\n\n\t\t\t\t// TODO: do we care about BND.ADDR and BND.PORT?\n\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t} catch {\n\t\t\t\tif (socket.Connected)\n\t\t\t\t\tsocket.Disconnect (false);\n\n\t\t\t\tsocket.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/Socks4aClient.cs",
    "content": "﻿//\n// Socks4aClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// A SOCKS4a proxy client.\n\t/// </summary>\n\t/// <remarks>\n\t/// A SOCKS4a proxy client.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t/// </example>\n\tpublic class Socks4aClient : Socks4Client\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4aClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4aClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic Socks4aClient (string host, int port) : base (host, port)\n\t\t{\n\t\t\tIsSocks4a = true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks4Client\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\tpublic Socks4aClient (string host, int port, NetworkCredential credentials) : base (host, port, credentials)\n\t\t{\n\t\t\tIsSocks4a = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/Socks5Client.cs",
    "content": "﻿//\n// Socks5Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Globalization;\nusing System.Threading.Tasks;\n\nusing MailKit.Security;\n\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// A SOCKS5 proxy client.\n\t/// </summary>\n\t/// <remarks>\n\t/// A SOCKS5 proxy client.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t/// </example>\n\tpublic class Socks5Client : SocksClient\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks5Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks5Client\"/> class.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t\t/// </example>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic Socks5Client (string host, int port) : base (5, host, port)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks5Client\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.Socks5Client\"/> class.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\ProxyExamples.cs\" region=\"ProxyClient\" />\n\t\t/// </example>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The length of <paramref name=\"host\"/> is greater than 255 characters.</para>\n\t\t/// </exception>\n\t\tpublic Socks5Client (string host, int port, NetworkCredential credentials) : base (5, host, port, credentials)\n\t\t{\n\t\t}\n\n\t\tinternal enum Socks5AddressType : byte\n\t\t{\n\t\t\tNone   = 0x00,\n\t\t\tIPv4   = 0x01,\n\t\t\tDomain = 0x03,\n\t\t\tIPv6   = 0x04\n\t\t}\n\n\t\tenum Socks5AuthMethod : byte\n\t\t{\n\t\t\tAnonymous    = 0x00,\n\t\t\tGSSAPI       = 0x01,\n\t\t\tUserPassword = 0x02,\n\t\t\tNotSupported = 0xff\n\t\t}\n\n\t\tenum Socks5Command : byte\n\t\t{\n\t\t\tConnect      = 0x01,\n\t\t\tBind         = 0x02,\n\t\t\tUdpAssociate = 0x03,\n\t\t}\n\n\t\tinternal enum Socks5Reply : byte\n\t\t{\n\t\t\tSuccess                 = 0x00,\n\t\t\tGeneralServerFailure    = 0x01,\n\t\t\tConnectionNotAllowed    = 0x02,\n\t\t\tNetworkUnreachable      = 0x03,\n\t\t\tHostUnreachable         = 0x04,\n\t\t\tConnectionRefused       = 0x05,\n\t\t\tTTLExpired              = 0x06,\n\t\t\tCommandNotSupported     = 0x07,\n\t\t\tAddressTypeNotSupported = 0x08\n\t\t}\n\n\t\tinternal static string GetFailureReason (byte reply)\n\t\t{\n\t\t\tswitch ((Socks5Reply) reply) {\n\t\t\tcase Socks5Reply.GeneralServerFailure:    return \"General server failure.\";\n\t\t\tcase Socks5Reply.ConnectionNotAllowed:    return \"Connection not allowed.\";\n\t\t\tcase Socks5Reply.NetworkUnreachable:      return \"Network unreachable.\";\n\t\t\tcase Socks5Reply.HostUnreachable:         return \"Host unreachable.\";\n\t\t\tcase Socks5Reply.ConnectionRefused:       return \"Connection refused.\";\n\t\t\tcase Socks5Reply.TTLExpired:              return \"TTL expired.\";\n\t\t\tcase Socks5Reply.CommandNotSupported:     return \"Command not supported.\";\n\t\t\tcase Socks5Reply.AddressTypeNotSupported: return \"Address type not supported.\";\n\t\t\tdefault:                                  return string.Format (CultureInfo.InvariantCulture, \"Unknown error ({0}).\", (int) reply);\n\t\t\t}\n\t\t}\n\n\t\tinternal static Socks5AddressType GetAddressType (string host, out IPAddress? ip)\n\t\t{\n\t\t\tif (!IPAddress.TryParse (host, out ip))\n\t\t\t\treturn Socks5AddressType.Domain;\n\n\t\t\tswitch (ip.AddressFamily) {\n\t\t\tcase AddressFamily.InterNetworkV6: return Socks5AddressType.IPv6;\n\t\t\tcase AddressFamily.InterNetwork: return Socks5AddressType.IPv4;\n\t\t\tdefault: throw new ArgumentException (\"The host address must be an IPv4 or IPv6 address.\", nameof (host));\n\t\t\t}\n\t\t}\n\n\t\tvoid VerifySocksVersion (byte version)\n\t\t{\n\t\t\tif (version != (byte) SocksVersion)\n\t\t\t\tthrow new ProxyProtocolException (string.Format (CultureInfo.InvariantCulture, \"Proxy server responded with unknown SOCKS version: {0}\", (int) version));\n\t\t}\n\n\t\tbyte[] GetNegotiateAuthMethodCommand (Socks5AuthMethod[] methods)\n\t\t{\n\t\t\t// +-----+----------+----------+\n\t\t\t// | VER | NMETHODS | METHODS  |\n\t\t\t// +-----+----------+----------+\n\t\t\t// |  1  |    1     | 1 to 255 |\n\t\t\t// +-----+----------+----------+\n\t\t\tvar buffer = new byte[2 + methods.Length];\n\t\t\tint n = 0;\n\n\t\t\tbuffer[n++] = (byte) SocksVersion;\n\t\t\tbuffer[n++] = (byte) methods.Length;\n\t\t\tfor (int i = 0; i < methods.Length; i++)\n\t\t\t\tbuffer[n++] = (byte) methods[i];\n\n\t\t\treturn buffer;\n\t\t}\n\n\t\tSocks5AuthMethod NegotiateAuthMethod (Socket socket, CancellationToken cancellationToken, params Socks5AuthMethod[] methods)\n\t\t{\n\t\t\tvar buffer = GetNegotiateAuthMethodCommand (methods);\n\n\t\t\tSend (socket, buffer, 0, buffer.Length, cancellationToken);\n\n\t\t\t// +-----+--------+\n\t\t\t// | VER | METHOD |\n\t\t\t// +-----+--------+\n\t\t\t// |  1  |   1    |\n\t\t\t// +-----+--------+\n\t\t\tint nread, n = 0;\n\t\t\tdo {\n\t\t\t\tif ((nread = Receive (socket, buffer, 0 + n, 2 - n, cancellationToken)) > 0)\n\t\t\t\t\tn += nread;\n\t\t\t} while (n < 2);\n\n\t\t\tVerifySocksVersion (buffer[0]);\n\n\t\t\treturn (Socks5AuthMethod) buffer[1];\n\t\t}\n\n\t\tasync Task<Socks5AuthMethod> NegotiateAuthMethodAsync (Socket socket, CancellationToken cancellationToken, params Socks5AuthMethod[] methods)\n\t\t{\n\t\t\tvar buffer = GetNegotiateAuthMethodCommand (methods);\n\n\t\t\tawait SendAsync (socket, buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\t// +-----+--------+\n\t\t\t// | VER | METHOD |\n\t\t\t// +-----+--------+\n\t\t\t// |  1  |   1    |\n\t\t\t// +-----+--------+\n\t\t\tint nread, n = 0;\n\t\t\tdo {\n\t\t\t\tif ((nread = await ReceiveAsync (socket, buffer, 0 + n, 2 - n, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\tn += nread;\n\t\t\t} while (n < 2);\n\n\t\t\tVerifySocksVersion (buffer[0]);\n\n\t\t\treturn (Socks5AuthMethod) buffer[1];\n\t\t}\n\n\t\tbyte[] GetAuthenticateCommand ()\n\t\t{\n\t\t\tvar user = Encoding.UTF8.GetBytes (ProxyCredentials!.UserName);\n\n\t\t\tif (user.Length > 255)\n\t\t\t\tthrow new AuthenticationException (\"User name too long.\");\n\n\t\t\tvar passwd = Encoding.UTF8.GetBytes (ProxyCredentials.Password);\n\n\t\t\tif (passwd.Length > 255) {\n\t\t\t\tArray.Clear (passwd, 0, passwd.Length);\n\t\t\t\tthrow new AuthenticationException (\"Password too long.\");\n\t\t\t}\n\n\t\t\tvar buffer = new byte[user.Length + passwd.Length + 3];\n\t\t\tint n = 0;\n\n\t\t\tbuffer[n++] = 1;\n\t\t\tbuffer[n++] = (byte) user.Length;\n\t\t\tBuffer.BlockCopy (user, 0, buffer, n, user.Length);\n\t\t\tn += user.Length;\n\t\t\tbuffer[n++] = (byte) passwd.Length;\n\t\t\tBuffer.BlockCopy (passwd, 0, buffer, n, passwd.Length);\n\n\t\t\tArray.Clear (passwd, 0, passwd.Length);\n\n\t\t\treturn buffer;\n\t\t}\n\n\t\tvoid Authenticate (Socket socket, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar buffer = GetAuthenticateCommand ();\n\n\t\t\tSend (socket, buffer, 0, buffer.Length, cancellationToken);\n\n\t\t\tint nread, n = 0;\n\n\t\t\tdo {\n\t\t\t\tif ((nread = Receive (socket, buffer, 0 + n, 2 - n, cancellationToken)) > 0)\n\t\t\t\t\tn += nread;\n\t\t\t} while (n < 2);\n\n\t\t\tif (buffer[1] != (byte) Socks5Reply.Success)\n\t\t\t\tthrow new AuthenticationException (\"Failed to authenticate with SOCKS5 proxy server.\");\n\t\t}\n\n\t\tasync Task AuthenticateAsync (Socket socket, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar buffer = GetAuthenticateCommand ();\n\n\t\t\tawait SendAsync (socket, buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\tint nread, n = 0;\n\n\t\t\tdo {\n\t\t\t\tif ((nread = await ReceiveAsync (socket, buffer, 0 + n, 2 - n, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\tn += nread;\n\t\t\t} while (n < 2);\n\n\t\t\tif (buffer[1] != (byte) Socks5Reply.Success)\n\t\t\t\tthrow new AuthenticationException (\"Failed to authenticate with SOCKS5 proxy server.\");\n\t\t}\n\n\t\tbyte[] GetConnectCommand (Socks5AddressType addrType, byte[]? domain, IPAddress? ip, int port, out int n)\n\t\t{\n\t\t\t// +----+-----+-------+------+----------+----------+\n\t\t\t// |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n\t\t\t// +----+-----+-------+------+----------+----------+\n\t\t\t// | 1  |  1  | X'00' |  1   | Variable |    2     |\n\t\t\t// +----+-----+-------+------+----------+----------+\n\t\t\tvar buffer = new byte[4 + 257 + 2];\n\t\t\tbyte[] addr;\n\n\t\t\tn = 0;\n\n\t\t\tbuffer[n++] = (byte) SocksVersion;\n\t\t\tbuffer[n++] = (byte) Socks5Command.Connect;\n\t\t\tbuffer[n++] = 0x00;\n\t\t\tbuffer[n++] = (byte) addrType;\n\t\t\tswitch (addrType) {\n\t\t\tcase Socks5AddressType.Domain:\n\t\t\t\tbuffer[n++] = (byte) domain!.Length;\n\t\t\t\tBuffer.BlockCopy (domain, 0, buffer, n, domain.Length);\n\t\t\t\tn += domain.Length;\n\t\t\t\tbreak;\n\t\t\tcase Socks5AddressType.IPv6:\n\t\t\t\taddr = ip!.GetAddressBytes ();\n\t\t\t\tBuffer.BlockCopy (addr, 0, buffer, n, addr.Length);\n\t\t\t\tn += 16;\n\t\t\t\tbreak;\n\t\t\tcase Socks5AddressType.IPv4:\n\t\t\t\taddr = ip!.GetAddressBytes ();\n\t\t\t\tBuffer.BlockCopy (addr, 0, buffer, n, addr.Length);\n\t\t\t\tn += 4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbuffer[n++] = (byte) (port >> 8);\n\t\t\tbuffer[n++] = (byte) port;\n\n\t\t\treturn buffer;\n\t\t}\n\n\t\tint ProcessPartialConnectResponse (string host, int port, byte[] buffer)\n\t\t{\n\t\t\tVerifySocksVersion (buffer[0]);\n\n\t\t\tif (buffer[1] != (byte) Socks5Reply.Success)\n\t\t\t\tthrow new ProxyProtocolException (string.Format (CultureInfo.InvariantCulture, \"Failed to connect to {0}:{1}: {2}\", host, port, GetFailureReason (buffer[1])));\n\n\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t// | VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |\n\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t// |  1  |  1  | X'00' |  1   | Variable |    2     |\n\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\tvar addrType = (Socks5AddressType) buffer[3];\n\n\t\t\tswitch (addrType) {\n\t\t\tcase Socks5AddressType.Domain: return 4 + buffer[4] + 2;\n\t\t\tcase Socks5AddressType.IPv6: return 4 + 16 + 2;\n\t\t\tcase Socks5AddressType.IPv4: return 4 + 4 + 2;\n\t\t\tdefault: throw new ProxyProtocolException (\"Proxy server returned unknown address type.\");\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Stream Connect (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = SocketUtils.Connect (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken);\n\t\t\tvar addrType = GetAddressType (host, out var ip);\n\t\t\tbyte[]? domain = null;\n\n\t\t\tif (addrType == Socks5AddressType.Domain)\n\t\t\t\tdomain = Encoding.UTF8.GetBytes (host);\n\n\t\t\ttry {\n\t\t\t\tSocks5AuthMethod method;\n\n\t\t\t\tif (ProxyCredentials != null)\n\t\t\t\t\tmethod = NegotiateAuthMethod (socket, cancellationToken, Socks5AuthMethod.UserPassword, Socks5AuthMethod.Anonymous);\n\t\t\t\telse\n\t\t\t\t\tmethod = NegotiateAuthMethod (socket, cancellationToken, Socks5AuthMethod.Anonymous);\n\n\t\t\t\tswitch (method) {\n\t\t\t\tcase Socks5AuthMethod.UserPassword:\n\t\t\t\t\tAuthenticate (socket, cancellationToken);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Socks5AuthMethod.Anonymous:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ProxyProtocolException (\"Failed to negotiate authentication method with the proxy server.\");\n\t\t\t\t}\n\n\t\t\t\tvar buffer = GetConnectCommand (addrType, domain, ip, port, out int n);\n\n\t\t\t\tSend (socket, buffer, 0, n, cancellationToken);\n\n\t\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t\t// | VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |\n\t\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t\t// |  1  |  1  | X'00' |  1   | Variable |    2     |\n\t\t\t\t// +-----+-----+-------+------+----------+----------+\n\n\t\t\t\t// Note: We know we'll need at least 4 bytes of header + a minimum of 1 byte\n\t\t\t\t// to determine the length of the BND.ADDR field if ATYP is a domain.\n\t\t\t\tint nread, need = 5;\n\t\t\t\tn = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((nread = Receive (socket, buffer, 0 + n, need - n, cancellationToken)) > 0)\n\t\t\t\t\t\tn += nread;\n\t\t\t\t} while (n < need);\n\n\t\t\t\tneed = ProcessPartialConnectResponse (host, port, buffer);\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((nread = Receive (socket, buffer, 0 + n, need - n, cancellationToken)) > 0)\n\t\t\t\t\t\tn += nread;\n\t\t\t\t} while (n < need);\n\n\t\t\t\t// TODO: do we care about BND.ADDR and BND.PORT?\n\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t} catch {\n\t\t\t\tif (socket.Connected)\n\t\t\t\t\tsocket.Disconnect (false);\n\n\t\t\t\tsocket.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar socket = await SocketUtils.ConnectAsync (ProxyHost, ProxyPort, LocalEndPoint, cancellationToken).ConfigureAwait (false);\n\t\t\tvar addrType = GetAddressType (host, out var ip);\n\t\t\tbyte[]? domain = null;\n\n\t\t\tif (addrType == Socks5AddressType.Domain)\n\t\t\t\tdomain = Encoding.UTF8.GetBytes (host);\n\n\t\t\ttry {\n\t\t\t\tSocks5AuthMethod method;\n\n\t\t\t\tif (ProxyCredentials != null)\n\t\t\t\t\tmethod = await NegotiateAuthMethodAsync (socket, cancellationToken, Socks5AuthMethod.UserPassword, Socks5AuthMethod.Anonymous).ConfigureAwait (false);\n\t\t\t\telse\n\t\t\t\t\tmethod = await NegotiateAuthMethodAsync (socket, cancellationToken, Socks5AuthMethod.Anonymous).ConfigureAwait (false);\n\n\t\t\t\tswitch (method) {\n\t\t\t\tcase Socks5AuthMethod.UserPassword:\n\t\t\t\t\tawait AuthenticateAsync (socket, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Socks5AuthMethod.Anonymous:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ProxyProtocolException (\"Failed to negotiate authentication method with the proxy server.\");\n\t\t\t\t}\n\n\t\t\t\tvar buffer = GetConnectCommand (addrType, domain, ip, port, out int n);\n\n\t\t\t\tawait SendAsync (socket, buffer, 0, n, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t\t// | VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |\n\t\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t\t// |  1  |  1  | X'00' |  1   | Variable |    2     |\n\t\t\t\t// +-----+-----+-------+------+----------+----------+\n\n\t\t\t\t// Note: We know we'll need at least 4 bytes of header + a minimum of 1 byte\n\t\t\t\t// to determine the length of the BND.ADDR field if ATYP is a domain.\n\t\t\t\tint nread, need = 5;\n\t\t\t\tn = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((nread = await ReceiveAsync (socket, buffer, 0 + n, need - n, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\t\tn += nread;\n\t\t\t\t} while (n < need);\n\n\t\t\t\tneed = ProcessPartialConnectResponse (host, port, buffer);\n\n\t\t\t\tdo {\n\t\t\t\t\tif ((nread = await ReceiveAsync (socket, buffer, 0 + n, need - n, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\t\tn += nread;\n\t\t\t\t} while (n < need);\n\n\t\t\t\t// TODO: do we care about BND.ADDR and BND.PORT?\n\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t} catch {\n\t\t\t\tif (socket.Connected)\n\t\t\t\t\tsocket.Disconnect (false);\n\n\t\t\t\tsocket.Dispose ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/SocksClient.cs",
    "content": "﻿//\n// SocksClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// An abstract SOCKS proxy client.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract SOCKS proxy client.\n\t/// </remarks>\n\tpublic abstract class SocksClient : ProxyClient\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.SocksClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.SocksClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"version\">The SOCKS protocol version.</param>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\tprotected SocksClient (int version, string host, int port) : base (host, port)\n\t\t{\n\t\t\tSocksVersion = version;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.SocksClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.SocksClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"version\">The SOCKS protocol version.</param>\n\t\t/// <param name=\"host\">The host name of the proxy server.</param>\n\t\t/// <param name=\"port\">The proxy server port.</param>\n\t\t/// <param name=\"credentials\">The credentials to use to authenticate with the proxy server.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>1</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\tprotected SocksClient (int version, string host, int port, NetworkCredential credentials) : base (host, port, credentials)\n\t\t{\n\t\t\tSocksVersion = version;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the SOCKS protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the SOCKS protocol version.\n\t\t/// </remarks>\n\t\t/// <value>The SOCKS protocol version.</value>\n\t\tpublic int SocksVersion {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Proxy/WebProxyClient.cs",
    "content": "﻿//\n// WebProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0_OR_GREATER\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net.Proxy\n{\n\t/// <summary>\n\t/// A proxy client that makes use of a <see cref=\"IWebProxy\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// A proxy client that makes use of a <see cref=\"IWebProxy\"/>.\n\t/// </remarks>\n\tinternal class WebProxyClient : ProxyClient\n\t{\n\t\treadonly IWebProxy proxy;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.WebProxyClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Net.Proxy.ProxyClient\"/> class.\n\t\t/// </remarks>\n\t\t/// <param name=\"proxy\">The web proxy.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"proxy\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic WebProxyClient (IWebProxy proxy) : base (\"System\", 0)\n\t\t{\n\t\t\tif (proxy is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (proxy));\n\n\t\t\tthis.proxy = proxy;\n\t\t}\n\n\t\tstatic Uri GetTargetUri (string host, int port)\n\t\t{\n\t\t\tstring scheme;\n\n\t\t\tswitch (port) {\n\t\t\tcase 25: case 465: case 587: scheme = \"smtp\"; break;\n\t\t\tcase 110: case 995: scheme = \"pop\"; break;\n\t\t\tcase 143: case 993: scheme = \"imap\"; break;\n\t\t\tdefault: scheme = \"http\"; break;\n\t\t\t}\n\n\t\t\treturn new Uri ($\"{scheme}://{host}:{port}\");\n\t\t}\n\n\t\tstatic NetworkCredential? GetNetworkCredential (ICredentials? credentials, Uri uri)\n\t\t{\n\t\t\tif (credentials == null)\n\t\t\t\treturn null;\n\n\t\t\tif (credentials is NetworkCredential network)\n\t\t\t\treturn network;\n\n\t\t\treturn credentials.GetCredential (uri, \"Basic\");\n\t\t}\n\n\t\tinternal static ProxyClient GetProxyClient (Uri proxyUri, ICredentials? credentials)\n\t\t{\n\t\t\tvar credential = GetNetworkCredential (credentials, proxyUri);\n\n\t\t\tif (proxyUri.Scheme.Equals (\"https\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (credential != null)\n\t\t\t\t\treturn new HttpsProxyClient (proxyUri.Host, proxyUri.Port, credential);\n\n\t\t\t\treturn new HttpsProxyClient (proxyUri.Host, proxyUri.Port);\n\t\t\t}\n\n\t\t\tif (proxyUri.Scheme.Equals (\"http\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (credential != null)\n\t\t\t\t\treturn new HttpProxyClient (proxyUri.Host, proxyUri.Port, credential);\n\n\t\t\t\treturn new HttpProxyClient (proxyUri.Host, proxyUri.Port);\n\t\t\t}\n\n\t\t\tif (proxyUri.Scheme.Equals (\"socks4\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (credential != null)\n\t\t\t\t\treturn new Socks4Client (proxyUri.Host, proxyUri.Port, credential);\n\n\t\t\t\treturn new Socks4Client (proxyUri.Host, proxyUri.Port);\n\t\t\t}\n\n\t\t\tif (proxyUri.Scheme.Equals (\"socks4a\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (credential != null)\n\t\t\t\t\treturn new Socks4aClient (proxyUri.Host, proxyUri.Port, credential);\n\n\t\t\t\treturn new Socks4aClient (proxyUri.Host, proxyUri.Port);\n\t\t\t}\n\n\t\t\tif (proxyUri.Scheme.Equals (\"socks5\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\tif (credential != null)\n\t\t\t\t\treturn new Socks5Client (proxyUri.Host, proxyUri.Port, credential);\n\n\t\t\t\treturn new Socks5Client (proxyUri.Host, proxyUri.Port);\n\t\t\t}\n\n\t\t\tthrow new NotSupportedException ($\"The default system proxy does not support {proxyUri.Scheme}.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Stream Connect (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tvar targetUri = GetTargetUri (host, port);\n\t\t\tvar proxyUri = proxy.GetProxy (targetUri);\n\n\t\t\tif (proxyUri is null || proxy.IsBypassed (targetUri)) {\n\t\t\t\t// Note: if the proxy URI is null, then it means that the proxy should be bypassed.\n\t\t\t\tvar socket = SocketUtils.Connect (host, port, LocalEndPoint, cancellationToken);\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t}\n\n\t\t\tvar proxyClient = GetProxyClient (proxyUri, proxy.Credentials);\n\t\t\t\n\t\t\treturn proxyClient.Connect (host, port, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously connect to the target host.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously connects to the target host and port through the proxy server.\n\t\t/// </remarks>\n\t\t/// <returns>The connected network stream.</returns>\n\t\t/// <param name=\"host\">The host name of the target server.</param>\n\t\t/// <param name=\"port\">The target server port.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task<Stream> ConnectAsync (string host, int port, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tvar targetUri = GetTargetUri (host, port);\n\t\t\tvar proxyUri = proxy.GetProxy (targetUri);\n\n\t\t\tif (proxyUri is null) {\n\t\t\t\t// Note: if the proxy URI is null, then it means that the proxy should be bypassed.\n\t\t\t\tvar socket = await SocketUtils.ConnectAsync (host, port, LocalEndPoint, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn new NetworkStream (socket, true);\n\t\t\t}\n\n\t\t\tvar proxyClient = GetProxyClient (proxyUri, proxy.Credentials);\n\n\t\t\treturn await proxyClient.ConnectAsync (host, port, cancellationToken);\n\t\t}\n\t}\n}\n\n#endif\n"
  },
  {
    "path": "MailKit/Net/SelectMode.cs",
    "content": "﻿//\n// SelectMode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2019 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Net\n{\n\tenum SelectMode {\n\t\tSelectRead,\n\t\tSelectWrite,\n\t\tSelectError\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/AsyncSmtpClient.cs",
    "content": "﻿//\n// AsyncSmtpClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MimeKit;\nusing MimeKit.IO;\n\nusing MailKit.Security;\n\nnamespace MailKit.Net.Smtp\n{\n\tpublic partial class SmtpClient\n\t{\n\t\tasync Task QueueCommandAsync (SmtpCommand type, string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tawait Stream!.QueueCommandAsync (command, cancellationToken).ConfigureAwait (false);\n\t\t\tqueued.Add (type);\n\t\t}\n\n\t\tasync Task<QueueResults> FlushCommandQueueAsync (MimeMessage message, MailboxAddress sender, IList<MailboxAddress> recipients, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\t// Note: Queued commands are buffered by the stream\n\t\t\t\tawait Stream!.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t} catch {\n\t\t\t\tqueued.Clear ();\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tvar responses = new List<SmtpResponse> (queued.Count);\n\t\t\tException? rex = null;\n\n\t\t\t// Note: We need to read all responses from the server before we can process\n\t\t\t// them in case any of them have any errors so that we can RSET the state.\n\t\t\ttry {\n\t\t\t\tfor (int i = 0; i < queued.Count; i++) {\n\t\t\t\t\tvar response = await Stream.ReadResponseAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tresponses.Add (response);\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\t// Note: Most likely this exception is due to an unexpected disconnect.\n\t\t\t\t// Usually, before an SMTP server disconnects the client, it will send an\n\t\t\t\t// error code response that will be more useful to the user than an error\n\t\t\t\t// stating that the server has unexpected disconnected. Save this exception\n\t\t\t\t// in case the server didn't give us a response with an error code.\n\t\t\t\trex = ex;\n\t\t\t}\n\n\t\t\treturn ParseCommandQueueResponses (message, sender, recipients, responses, rex);\n\t\t}\n\n\t\tasync Task<SmtpResponse> SendCommandInternalAsync (string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn await Stream!.SendCommandAsync (command, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch {\n\t\t\t\tDisconnect (uri!.Host, uri.Port, GetSecureSocketOptions (uri), false);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously send a custom command to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously sends a custom command to the SMTP server.</para>\n\t\t/// <note type=\"note\">The command string should not include the terminating <c>\\r\\n</c> sequence.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The command response.</returns>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"command\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tprotected Task<SmtpResponse> SendCommandAsync (string command, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (command == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (command));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient must be connected before you can send commands.\");\n\n\t\t\tif (!command.EndsWith (\"\\r\\n\", StringComparison.Ordinal))\n\t\t\t\tcommand += \"\\r\\n\";\n\n\t\t\treturn SendCommandInternalAsync (command, cancellationToken);\n\t\t}\n\n\t\tTask<SmtpResponse> SendEhloAsync (bool connecting, string helo, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = CreateEhloCommand (helo);\n\n\t\t\tif (connecting)\n\t\t\t\treturn Stream!.SendCommandAsync (command, cancellationToken);\n\n\t\t\treturn SendCommandInternalAsync (command, cancellationToken);\n\t\t}\n\n\t\tasync Task EhloAsync (bool connecting, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar response = await SendEhloAsync (connecting, \"EHLO\", cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok) {\n\t\t\t\t// Try sending HELO instead...\n\t\t\t\tresponse = await SendEhloAsync (connecting, \"HELO\", cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\t\t\t} else {\n\t\t\t\tUpdateCapabilities (response);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SMTP server does not support authentication.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task AuthenticateAsync (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (mechanism);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tSaslException? saslException = null;\n\t\t\t\tSmtpResponse response;\n\t\t\t\tstring challenge;\n\t\t\t\tstring command;\n\n\t\t\t\t// send an initial challenge if the mechanism supports it\n\t\t\t\tif (mechanism.SupportsInitialResponse) {\n\t\t\t\t\tchallenge = await mechanism.ChallengeAsync (null, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tcommand = string.Format (\"AUTH {0} {1}\\r\\n\", mechanism.MechanismName, challenge);\n\t\t\t\t} else {\n\t\t\t\t\tcommand = string.Format (\"AUTH {0}\\r\\n\", mechanism.MechanismName);\n\t\t\t\t}\n\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tresponse = await SendCommandInternalAsync (command, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationMechanismTooWeak)\n\t\t\t\t\t\tthrow new AuthenticationException (response.Response);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\twhile (response.StatusCode == SmtpStatusCode.AuthenticationChallenge) {\n\t\t\t\t\t\t\tchallenge = await mechanism.ChallengeAsync (response.Response, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\tresponse = await SendCommandInternalAsync (challenge + \"\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsaslException = null;\n\t\t\t\t\t} catch (SaslException ex) {\n\t\t\t\t\t\t// reset the authentication state\n\t\t\t\t\t\tresponse = await SendCommandInternalAsync (\"\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tsaslException = ex;\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationSuccessful) {\n\t\t\t\t\tif (mechanism.NegotiatedSecurityLayer)\n\t\t\t\t\t\tawait EhloAsync (false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tauthenticated = true;\n\t\t\t\t\tOnAuthenticated (response.Response);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar message = string.Format (CultureInfo.InvariantCulture, \"{0}: {1}\", (int) response.StatusCode, response.Response);\n\n\t\t\t\tif (saslException != null)\n\t\t\t\t\tthrow new AuthenticationException (message, saslException);\n\n\t\t\t\tthrow new AuthenticationException (message);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously authenticates using the supplied credentials.</para>\n\t\t/// <para>If the SMTP server supports authentication, then the SASL mechanisms\n\t\t/// that both the client and server support (not including any OAUTH mechanisms)\n\t\t/// are tried in order of greatest security to weakest security. Once a SASL\n\t\t/// authentication mechanism is found that both client and server support, the\n\t\t/// credentials are used to authenticate.</para>\n\t\t/// <para>If, on the other hand, authentication is not supported by the SMTP\n\t\t/// server, then this method will throw <see cref=\"System.NotSupportedException\"/>.\n\t\t/// The <see cref=\"Capabilities\"/> property can be checked for the\n\t\t/// <see cref=\"SmtpCapabilities.Authentication\"/> flag to make sure the\n\t\t/// SMTP server supports authentication before calling this method.</para>\n\t\t/// <note type=\"tip\"> To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"encoding\">The text encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SMTP server does not support authentication.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task AuthenticateAsync (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (encoding, credentials);\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tvar saslUri = new Uri ($\"smtp://{uri.Host}\");\n\t\t\t\tAuthenticationException? authException = null;\n\t\t\t\tSaslException? saslException;\n\t\t\t\tSmtpResponse response;\n\t\t\t\tSaslMechanism? sasl;\n\t\t\t\tbool tried = false;\n\t\t\t\tstring challenge;\n\t\t\t\tstring command;\n\n\t\t\t\tforeach (var authmech in SaslMechanism.Rank (AuthenticationMechanisms)) {\n\t\t\t\t\tvar cred = credentials.GetCredential (uri, authmech);\n\n\t\t\t\t\tif (cred == null || (sasl = SaslMechanism.Create (authmech, encoding, cred)) == null)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tsasl.ChannelBindingContext = Stream.Stream as IChannelBindingContext;\n\t\t\t\t\tsasl.Uri = saslUri;\n\n\t\t\t\t\ttried = true;\n\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\t// send an initial challenge if the mechanism supports it\n\t\t\t\t\tif (sasl.SupportsInitialResponse) {\n\t\t\t\t\t\tchallenge = await sasl.ChallengeAsync (null, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tcommand = string.Format (\"AUTH {0} {1}\\r\\n\", authmech, challenge);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommand = string.Format (\"AUTH {0}\\r\\n\", authmech);\n\t\t\t\t\t}\n\n\t\t\t\t\tdetector.IsAuthenticating = true;\n\t\t\t\t\tsaslException = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await SendCommandInternalAsync (command, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationMechanismTooWeak)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twhile (!sasl.IsAuthenticated) {\n\t\t\t\t\t\t\t\tif (response.StatusCode != SmtpStatusCode.AuthenticationChallenge)\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tchallenge = await sasl.ChallengeAsync (response.Response, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\t\tresponse = await SendCommandInternalAsync (challenge + \"\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsaslException = null;\n\t\t\t\t\t\t} catch (SaslException ex) {\n\t\t\t\t\t\t\t// reset the authentication state\n\t\t\t\t\t\t\tresponse = await SendCommandInternalAsync (\"\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\tsaslException = ex;\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationSuccessful) {\n\t\t\t\t\t\tif (sasl.NegotiatedSecurityLayer)\n\t\t\t\t\t\t\tawait EhloAsync (false, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tauthenticated = true;\n\t\t\t\t\t\tOnAuthenticated (response.Response);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar message = string.Format (CultureInfo.InvariantCulture, \"{0}: {1}\", (int) response.StatusCode, response.Response);\n\t\t\t\t\tException inner;\n\n\t\t\t\t\tif (saslException != null)\n\t\t\t\t\t\tinner = new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response, saslException);\n\t\t\t\t\telse\n\t\t\t\t\t\tinner = new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\t\t\tauthException = new AuthenticationException (message, inner);\n\t\t\t\t}\n\n\t\t\t\tif (tried)\n\t\t\t\t\tthrow authException ?? new AuthenticationException ();\n\n\t\t\t\tthrow new NotSupportedException (\"No compatible authentication mechanisms found.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tasync Task SslHandshakeAsync (SslStream ssl, string host, CancellationToken cancellationToken)\n\t\t{\n#if NET5_0_OR_GREATER || NETSTANDARD2_1_OR_GREATER\n\t\t\tawait ssl.AuthenticateAsClientAsync (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate), cancellationToken).ConfigureAwait (false);\n#else\n\t\t\tawait ssl.AuthenticateAsClientAsync (host, ClientCertificates, SslProtocols, CheckCertificateRevocation).ConfigureAwait (false);\n#endif\n\t\t}\n\n\t\tasync Task PostConnectAsync (Stream stream, string host, int port, SecureSocketOptions options, bool starttls, CancellationToken cancellationToken)\n\t\t{\n\t\t\tclientConnectedTimestamp = Stopwatch.GetTimestamp ();\n\n\t\t\ttry {\n\t\t\t\tProtocolLogger.LogConnect (uri!);\n\t\t\t} catch {\n\t\t\t\tstream.Dispose ();\n\t\t\t\tsecure = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tStream = new SmtpStream (stream, ProtocolLogger);\n\n\t\t\ttry {\n\t\t\t\t// read the greeting\n\t\t\t\tvar response = await Stream.ReadResponseAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (response.StatusCode != SmtpStatusCode.ServiceReady)\n\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\t\t// Send EHLO and get a list of supported extensions\n\t\t\t\tawait EhloAsync (true, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (options == SecureSocketOptions.StartTls && (capabilities & SmtpCapabilities.StartTLS) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The SMTP server does not support the STARTTLS extension.\");\n\n\t\t\t\tif (starttls && (capabilities & SmtpCapabilities.StartTLS) != 0) {\n\t\t\t\t\tresponse = await Stream.SendCommandAsync (\"STARTTLS\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tif (response.StatusCode != SmtpStatusCode.ServiceReady)\n\t\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar tls = new SslStream (stream, false, ValidateRemoteCertificate);\n\t\t\t\t\t\tStream.Stream = tls;\n\n\t\t\t\t\t\tawait SslHandshakeAsync (tls, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, true, \"SMTP\", host, port, 465, 25, 587);\n\t\t\t\t\t}\n\n\t\t\t\t\tsecure = true;\n\n\t\t\t\t\t// Send EHLO again and get the new list of supported extensions\n\t\t\t\t\tawait EhloAsync (true, cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\n\t\t\t\tconnected = true;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tRecordClientDisconnected (ex);\n\t\t\t\tStream.Dispose ();\n\t\t\t\tsecure = false;\n\t\t\t\tStream = null;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tOnConnected (host, port, options);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified SMTP or SMTP/S server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified SMTP or SMTP/S server.</para>\n\t\t/// <para>If the <paramref name=\"port\"/> has a value of <c>0</c>, then the\n\t\t/// <paramref name=\"options\"/> parameter is used to determine the default port to\n\t\t/// connect to. The default port used with <see cref=\"SecureSocketOptions.SslOnConnect\"/>\n\t\t/// is <c>465</c>. All other values will use a default port of <c>25</c>.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>465</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"note\">The connection established by any of the\n\t\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_ConnectAsync.htm\">Connect</a>\n\t\t/// methods may be re-used if an application wishes to send multiple messages\n\t\t/// to the same SMTP server. Since connecting and authenticating can be expensive\n\t\t/// operations, re-using a connection can significantly improve performance when\n\t\t/// sending a large number of messages to the same SMTP server over a short\n\t\t/// period of time.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the SMTP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// An SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task ConnectAsync (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcapabilities = SmtpCapabilities.None;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tMaxSize = 0;\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Connect);\n\n\t\t\ttry {\n\t\t\t\tvar stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false);\n\t\t\t\tstream.WriteTimeout = timeout;\n\t\t\t\tstream.ReadTimeout = timeout;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait SslHandshakeAsync (ssl, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"SMTP\", host, port, 465, 25, 587);\n\t\t\t\t\t}\n\n\t\t\t\t\tsecure = true;\n\t\t\t\t\tstream = ssl;\n\t\t\t\t} else {\n\t\t\t\t\tsecure = false;\n\t\t\t\t}\n\n\t\t\t\tawait PostConnectAsync (stream, host, port, options, starttls, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified SMTP or SMTP/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified SMTP or SMTP/S server using the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>465</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the SMTP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// An SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override Task ConnectAsync (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (socket, host, port);\n\n\t\t\treturn ConnectAsync (new NetworkStream (socket, true), host, port, options, cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously establish a connection to the specified SMTP or SMTP/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified SMTP or SMTP/S server using the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>465</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the SMTP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// An SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task ConnectAsync (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (stream, host, port);\n\n\t\t\tcapabilities = SmtpCapabilities.None;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tMaxSize = 0;\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Connect);\n\n\t\t\ttry {\n\t\t\t\tStream network;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait SslHandshakeAsync (ssl, host, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"SMTP\", host, port, 465, 25, 587);\n\t\t\t\t\t}\n\n\t\t\t\t\tnetwork = ssl;\n\t\t\t\t\tsecure = true;\n\t\t\t\t} else {\n\t\t\t\t\tnetwork = stream;\n\t\t\t\t\tsecure = false;\n\t\t\t\t}\n\n\t\t\t\tif (network.CanTimeout) {\n\t\t\t\t\tnetwork.WriteTimeout = timeout;\n\t\t\t\t\tnetwork.ReadTimeout = timeout;\n\t\t\t\t}\n\n\t\t\t\tawait PostConnectAsync (network, host, port, options, starttls, cancellationToken).ConfigureAwait (false);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic override async Task DisconnectAsync (bool quit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\treturn;\n\n\t\t\tif (quit) {\n\t\t\t\ttry {\n\t\t\t\t\tawait Stream.SendCommandAsync (\"QUIT\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t} catch (SmtpProtocolException) {\n\t\t\t\t} catch (SmtpCommandException) {\n\t\t\t\t} catch (IOException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tDisconnect (uri.Host, uri.Port, GetSecureSocketOptions (uri), true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously ping the SMTP server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>Mail servers, if left idle for too long, will automatically drop the connection.</remarks>\n\t\t/// <returns>An asynchronous task context.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task NoOpAsync (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient is not connected.\");\n\n\t\t\tvar response = await SendCommandInternalAsync (\"NOOP\\r\\n\", cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously get the size of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Asynchronously calculates the size of the message in bytes.</para>\n\t\t/// <para>This method is called by <a href=\"Overload_MailKit_MailTransport_SendAsync.htm\">SendAsync</a>\n\t\t/// methods in the following conditions:</para>\n\t\t/// <list type=\"bullet\">\n\t\t/// <item>The SMTP server supports the <c>SIZE=</c> parameter in the <c>MAIL FROM</c> command.</item>\n\t\t/// <item>The <see cref=\"ITransferProgress\"/> parameter is non-null.</item>\n\t\t/// <item>The SMTP server supports the <c>CHUNKING</c> extension.</item>\n\t\t/// </list>\n\t\t/// </remarks>\n\t\t/// <returns>The size of the message, in bytes.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tprotected virtual async Task<long> GetSizeAsync (FormatOptions options, MimeMessage message, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var measure = new MeasuringStream ()) {\n\t\t\t\tawait message.WriteToAsync (options, measure, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\treturn measure.Length;\n\t\t\t}\n\t\t}\n\n\t\tasync Task MailFromAsync (FormatOptions options, MimeMessage message, MailboxAddress mailbox, SmtpExtensions extensions, long size, bool pipeline, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = CreateMailFromCommand (options, message, mailbox, extensions, size);\n\n\t\t\tif (pipeline) {\n\t\t\t\tawait QueueCommandAsync (SmtpCommand.MailFrom, command, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar response = await Stream!.SendCommandAsync (command, cancellationToken).ConfigureAwait (false);\n\n\t\t\tParseMailFromResponse (message, mailbox, response);\n\t\t}\n\n\t\tasync Task<bool> RcptToAsync (FormatOptions options, MimeMessage message, MailboxAddress mailbox, bool pipeline, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = CreateRcptToCommand (options, message, mailbox);\n\n\t\t\tif (pipeline) {\n\t\t\t\tawait QueueCommandAsync (SmtpCommand.RcptTo, command, cancellationToken).ConfigureAwait (false);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar response = await Stream!.SendCommandAsync (command, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseRcptToResponse (message, mailbox, response);\n\t\t}\n\n\t\tasync Task<string> BdatAsync (FormatOptions options, MimeMessage message, long size, CancellationToken cancellationToken, ITransferProgress? progress)\n\t\t{\n\t\t\tvar command = string.Format (CultureInfo.InvariantCulture, \"BDAT {0} LAST\\r\\n\", size);\n\n\t\t\tawait Stream!.QueueCommandAsync (command, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (progress != null) {\n\t\t\t\tvar ctx = new SendContext (progress, size);\n\n\t\t\t\tusing (var stream = new ProgressStream (Stream, ctx.Update)) {\n\t\t\t\t\tawait message.WriteToAsync (options, stream, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tawait stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait message.WriteToAsync (options, Stream, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t}\n\n\t\t\tvar response = await Stream.ReadResponseAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseBdatResponse (message, response);\n\t\t}\n\n\t\tasync Task<string> MessageDataAsync (FormatOptions options, MimeMessage message, long size, CancellationToken cancellationToken, ITransferProgress? progress)\n\t\t{\n\t\t\tif (progress != null) {\n\t\t\t\tvar ctx = new SendContext (progress, size);\n\n\t\t\t\tusing (var stream = new ProgressStream (Stream!, ctx.Update)) {\n\t\t\t\t\tusing (var filtered = new FilteredStream (stream)) {\n\t\t\t\t\t\tfiltered.Add (new SmtpDataFilter ());\n\n\t\t\t\t\t\tawait message.WriteToAsync (options, filtered, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tawait filtered.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tusing (var filtered = new FilteredStream (Stream!)) {\n\t\t\t\t\tfiltered.Add (new SmtpDataFilter ());\n\n\t\t\t\t\tawait message.WriteToAsync (options, filtered, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tawait filtered.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait Stream!.WriteAsync (EndData, 0, EndData.Length, cancellationToken).ConfigureAwait (false);\n\t\t\tawait Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tvar response = await Stream.ReadResponseAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseMessageDataResponse (message, response);\n\t\t}\n\n\t\tasync Task ResetAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tSmtpResponse response;\n\n\t\t\ttry {\n\t\t\t\tresponse = await SendCommandInternalAsync (\"RSET\\r\\n\", cancellationToken).ConfigureAwait (false);\n\t\t\t} catch {\n\t\t\t\t// Swallow RSET exceptions so that we do not obscure the exception that caused the need for the RSET command in the first place.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\tDisconnect (uri!.Host, uri.Port, GetSecureSocketOptions (uri), false);\n\t\t}\n\n\t\tasync Task<string> SendAsync (FormatOptions options, MimeMessage message, MailboxAddress sender, IList<MailboxAddress> recipients, CancellationToken cancellationToken, ITransferProgress? progress)\n\t\t{\n\t\t\tvar format = Prepare (options, message, sender, recipients, out var extensions);\n\t\t\tvar pipeline = (capabilities & SmtpCapabilities.Pipelining) != 0;\n\t\t\tvar bdat = UseBdatCommand (extensions);\n\t\t\tlong size;\n\n\t\t\tif (bdat || (Capabilities & SmtpCapabilities.Size) != 0 || progress != null) {\n\t\t\t\tsize = await GetSizeAsync (format, message, cancellationToken).ConfigureAwait (false);\n\t\t\t} else {\n\t\t\t\tsize = -1;\n\t\t\t}\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Send);\n\n\t\t\ttry {\n\t\t\t\t// Note: if PIPELINING is supported, MailFrom() and RcptTo() will\n\t\t\t\t// queue their commands instead of sending them immediately.\n\t\t\t\tawait MailFromAsync (format, message, sender, extensions, size, pipeline, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tint recipientsAccepted = 0;\n\t\t\t\tfor (int i = 0; i < recipients.Count; i++) {\n\t\t\t\t\tif (await RcptToAsync (format, message, recipients[i], pipeline, cancellationToken).ConfigureAwait (false))\n\t\t\t\t\t\trecipientsAccepted++;\n\t\t\t\t}\n\n\t\t\t\tif (queued.Count > 0) {\n\t\t\t\t\t// Note: if PIPELINING is supported, this will flush all outstanding\n\t\t\t\t\t// MAIL FROM and RCPT TO commands to the server and then process\n\t\t\t\t\t// all of their responses.\n\t\t\t\t\tvar results = await FlushCommandQueueAsync (message, sender, recipients, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\trecipientsAccepted = results.RecipientsAccepted;\n\n\t\t\t\t\tif (results.FirstException != null)\n\t\t\t\t\t\tthrow results.FirstException;\n\t\t\t\t}\n\n\t\t\t\tif (recipientsAccepted == 0) {\n\t\t\t\t\tOnNoRecipientsAccepted (message);\n\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.MessageNotAccepted, SmtpStatusCode.TransactionFailed, \"No recipients were accepted.\");\n\t\t\t\t}\n\n\t\t\t\tif (bdat)\n\t\t\t\t\treturn await BdatAsync (format, message, size, cancellationToken, progress).ConfigureAwait (false);\n\n\t\t\t\tvar dataResponse = await Stream.SendCommandAsync (\"DATA\\r\\n\", cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tParseDataResponse (dataResponse);\n\n\t\t\t\treturn await MessageDataAsync (format, message, size, cancellationToken, progress).ConfigureAwait (false);\n\t\t\t} catch (ServiceNotAuthenticatedException ex) {\n\t\t\t\toperation.SetError (ex);\n\n\t\t\t\t// do not disconnect\n\t\t\t\tawait ResetAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tthrow;\n\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\toperation.SetError (ex);\n\n\t\t\t\t// do not disconnect\n\t\t\t\tawait ResetAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tthrow;\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\n\t\t\t\tDisconnect (uri!.Host, uri.Port, GetSecureSocketOptions (uri), false);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessageWithOptions\"/>\n\t\t/// </example>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic override Task<string> SendAsync (FormatOptions options, MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (options, message, out var sender, out var recipients);\n\n\t\t\treturn SendAsync (options, message, sender, recipients, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends the message by uploading it to an SMTP server using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"sender\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"recipients\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic override Task<string> SendAsync (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar rcpts = ValidateArguments (options, message, sender, recipients);\n\n\t\t\treturn SendAsync (options, message, sender, rcpts, cancellationToken, progress);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously expand a mailing address alias.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Expands a mailing address alias.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExpandAlias\"/>\n\t\t/// </example>\n\t\t/// <returns>The expanded list of mailbox addresses.</returns>\n\t\t/// <param name=\"alias\">The mailing address alias.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"alias\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"alias\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before expanding an alias.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic async Task<InternetAddressList> ExpandAsync (string alias, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar response = await SendCommandInternalAsync (CreateExpandCommand (alias), cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseExpandResponse (response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously verify the existence of a mailbox address.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Verifies the existence a mailbox address with the SMTP server, returning the expanded\n\t\t/// mailbox address if it exists.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"VerifyAddress\"/>\n\t\t/// </example>\n\t\t/// <returns>The expanded mailbox address.</returns>\n\t\t/// <param name=\"address\">The mailbox address.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"address\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"address\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before verifying the existence of an address.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic async Task<MailboxAddress> VerifyAsync (string address, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar response = await SendCommandInternalAsync (CreateVerifyCommand (address), cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn ParseVerifyResponse (response);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/ISmtpClient.cs",
    "content": "﻿//\n// ISmtpClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing MimeKit;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An interface for an SMTP client.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implemented by <see cref=\"MailKit.Net.Smtp.SmtpClient\"/>.\n\t/// </remarks>\n\tpublic interface ISmtpClient : IMailTransport\n\t{\n\t\t/// <summary>\n\t\t/// Get the capabilities supported by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been made \n\t\t/// and may change once the client is authenticated.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The capabilities.</value>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// Capabilities cannot be enabled, they may only be disabled.\n\t\t/// </exception>\n\t\tSmtpCapabilities Capabilities { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set the local domain.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The local domain is used in the HELO or EHLO commands sent to\n\t\t/// the SMTP server. If left unset, the local IP address will be\n\t\t/// used instead.\n\t\t/// </remarks>\n\t\t/// <value>The local domain.</value>\n\t\tstring? LocalDomain { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get the maximum message size supported by the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The maximum message size will not be known until a successful connection has\n\t\t/// been made and may change once the client is authenticated.</para>\n\t\t/// <note type=\"note\">This value is only relevant if the <see cref=\"Capabilities\"/> includes\n\t\t/// the <see cref=\"SmtpCapabilities.Size\"/> flag.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The maximum message size supported by the server.</value>\n\t\tuint MaxSize { get; }\n\n\t\t/// <summary>\n\t\t/// Get or set whether the client should use the REQUIRETLS extension if it is available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether the client should use the REQUIRETLS extension if it is available.</para>\n\t\t/// <para>The REQUIRETLS extension (as defined in rfc8689) is a way to ensure that every SMTP server\n\t\t/// that a message passes through on its way to the recipient is required to use a TLS connection in\n\t\t/// order to transfer the message to the next SMTP server.</para>\n\t\t/// <note type=\"note\">This feature is only available if <see cref=\"Capabilities\"/> contains the\n\t\t/// <see cref=\"SmtpCapabilities.RequireTLS\"/> flag when sending the message.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the REQUIRETLS extension should be used; otherwise, <see langword=\"false\" />.</value>\n\t\tbool RequireTLS { get; set; }\n\n\t\t/// <summary>\n\t\t/// Get or set how much of the message to include in any failed delivery status notifications.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets how much of the message to include in any failed delivery status notifications.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"DeliveryStatusNotification\"/>\n\t\t/// </example>\n\t\t/// <value>A value indicating how much of the message to include in a failure delivery status notification.</value>\n\t\tDeliveryStatusNotificationType DeliveryStatusNotificationType { get; set; }\n\n\t\t/// <summary>\n\t\t/// Expand a mailing address alias.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Expands a mailing address alias.\n\t\t/// </remarks>\n\t\t/// <returns>The expanded list of mailbox addresses.</returns>\n\t\t/// <param name=\"alias\">The mailing address alias.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"alias\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"alias\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before verifying the existence of an address.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tInternetAddressList Expand (string alias, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously expand a mailing address alias.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Expands a mailing address alias.\n\t\t/// </remarks>\n\t\t/// <returns>The expanded list of mailbox addresses.</returns>\n\t\t/// <param name=\"alias\">The mailing address alias.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"alias\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"alias\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before verifying the existence of an address.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tTask<InternetAddressList> ExpandAsync (string alias, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Verify the existence of a mailbox address.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Verifies the existence a mailbox address with the SMTP server, returning the expanded\n\t\t/// mailbox address if it exists.\n\t\t/// </remarks>\n\t\t/// <returns>The expanded mailbox address.</returns>\n\t\t/// <param name=\"address\">The mailbox address.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"address\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"address\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before verifying the existence of an address.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tMailboxAddress Verify (string address, CancellationToken cancellationToken = default);\n\n\t\t/// <summary>\n\t\t/// Asynchronously verify the existence of a mailbox address.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Verifies the existence a mailbox address with the SMTP server, returning the expanded\n\t\t/// mailbox address if it exists.\n\t\t/// </remarks>\n\t\t/// <returns>The expanded mailbox address.</returns>\n\t\t/// <param name=\"address\">The mailbox address.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"address\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"address\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before verifying the existence of an address.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tTask<MailboxAddress> VerifyAsync (string address, CancellationToken cancellationToken = default);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpAuthenticationSecretDetector.cs",
    "content": "﻿//\n// SmtpAuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit.Net.Smtp {\n\tclass SmtpAuthenticationSecretDetector : IAuthenticationSecretDetector\n\t{\n\t\tstatic readonly IList<AuthenticationSecret> EmptyAuthSecrets = Array.Empty<AuthenticationSecret>();\n\n\t\tenum SmtpAuthCommandState\n\t\t{\n\t\t\tAuth,\n\t\t\tAuthMechanism,\n\t\t\tAuthNewLine,\n\t\t\tAuthToken,\n\t\t\tError\n\t\t}\n\n\t\tSmtpAuthCommandState state;\n\t\tbool isAuthenticating;\n\t\tint commandIndex;\n\n\t\tpublic bool IsAuthenticating {\n\t\t\tget { return isAuthenticating; }\n\t\t\tset {\n\t\t\t\tstate = SmtpAuthCommandState.Auth;\n\t\t\t\tisAuthenticating = value;\n\t\t\t\tcommandIndex = 0;\n\t\t\t}\n\t\t}\n\n\t\tbool SkipCommand (string command, byte[] buffer, ref int index, int endIndex)\n\t\t{\n\t\t\twhile (index < endIndex && commandIndex < command.Length) {\n\t\t\t\tif (buffer[index] != (byte) command[commandIndex]) {\n\t\t\t\t\tstate = SmtpAuthCommandState.Error;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcommandIndex++;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn commandIndex == command.Length;\n\t\t}\n\n\t\tpublic IList<AuthenticationSecret> DetectSecrets (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (!IsAuthenticating || state == SmtpAuthCommandState.Error || count == 0)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tint endIndex = offset + count;\n\t\t\tint index = offset;\n\n\t\t\tif (state == SmtpAuthCommandState.Auth) {\n\t\t\t\tif (SkipCommand (\"AUTH \", buffer, ref index, endIndex))\n\t\t\t\t\tstate = SmtpAuthCommandState.AuthMechanism;\n\n\t\t\t\tif (index >= endIndex || state == SmtpAuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == SmtpAuthCommandState.AuthMechanism) {\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) ' ' && buffer[index] != (byte) '\\r')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) ' ') {\n\t\t\t\t\t\tstate = SmtpAuthCommandState.AuthToken;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = SmtpAuthCommandState.AuthNewLine;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tif (state == SmtpAuthCommandState.AuthNewLine) {\n\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\tstate = SmtpAuthCommandState.AuthToken;\n\t\t\t\t\tindex++;\n\t\t\t\t} else {\n\t\t\t\t\tstate = SmtpAuthCommandState.Error;\n\t\t\t\t}\n\n\t\t\t\tif (index >= endIndex || state == SmtpAuthCommandState.Error)\n\t\t\t\t\treturn EmptyAuthSecrets;\n\t\t\t}\n\n\t\t\tint startIndex = index;\n\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\r')\n\t\t\t\tindex++;\n\n\t\t\tif (index < endIndex)\n\t\t\t\tstate = SmtpAuthCommandState.AuthNewLine;\n\n\t\t\tif (index == startIndex)\n\t\t\t\treturn EmptyAuthSecrets;\n\n\t\t\tvar secret = new AuthenticationSecret (startIndex, index - startIndex);\n\n\t\t\tif (state == SmtpAuthCommandState.AuthNewLine) {\n\t\t\t\tindex++;\n\n\t\t\t\tif (index < endIndex) {\n\t\t\t\t\tif (buffer[index] == (byte) '\\n') {\n\t\t\t\t\t\tstate = SmtpAuthCommandState.AuthToken;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = SmtpAuthCommandState.Error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new AuthenticationSecret[] { secret };\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpCapabilities.cs",
    "content": "﻿//\n// SmtpCapabilities.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitations the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// Capabilities supported by an SMTP server.\n\t/// </summary>\n\t/// <remarks>\n\t/// Capabilities are read as part of the response to the EHLO command that\n\t/// is issued during the connection phase of the <see cref=\"SmtpClient\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"Capabilities\"/>\n\t/// </example>\n\t[Flags]\n\tpublic enum SmtpCapabilities : uint {\n\t\t/// <summary>\n\t\t/// The server does not support any additional extensions.\n\t\t/// </summary>\n\t\tNone                = 0,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc1870\">SIZE</a> extension\n\t\t/// and may have a maximum message size limitation (see <see cref=\"SmtpClient.MaxSize\"/>).\n\t\t/// </summary>\n\t\tSize                = 1 << 0,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc1891\">DSN</a> extension,\n\t\t/// allowing clients to specify which (if any) recipients they would like to receive delivery\n\t\t/// notifications for.\n\t\t/// </summary>\n\t\tDsn                 = 1 << 1,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2034\">ENHANCEDSTATUSCODES</a>\n\t\t/// extension.\n\t\t/// </summary>\n\t\tEnhancedStatusCodes = 1 << 2,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2554\">AUTH</a> extension,\n\t\t/// allowing clients to authenticate via supported SASL mechanisms.\n\t\t/// </summary>\n\t\tAuthentication      = 1 << 3,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2821\">8BITMIME</a> extension,\n\t\t/// allowing clients to send messages using the \"8bit\" Content-Transfer-Encoding.\n\t\t/// </summary>\n\t\tEightBitMime        = 1 << 4,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc2920\">PIPELINING</a> extension,\n\t\t/// allowing clients to send multiple commands at once in order to reduce round-trip latency.\n\t\t/// </summary>\n\t\tPipelining          = 1 << 5,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3030\">BINARYMIME</a> extension.\n\t\t/// </summary>\n\t\tBinaryMime          = 1 << 6,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3030\">CHUNKING</a> extension,\n\t\t/// allowing clients to upload messages in chunks.\n\t\t/// </summary>\n\t\tChunking            = 1 << 7,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc3207\">STARTTLS</a> extension,\n\t\t/// allowing clients to switch to an encrypted SSL/TLS connection after connecting.\n\t\t/// </summary>\n\t\tStartTLS            = 1 << 8,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc6531\">SMTPUTF8</a> extension.\n\t\t/// </summary>\n\t\tUTF8                = 1 << 9,\n\n\t\t/// <summary>\n\t\t/// The server supports the <a href=\"https://tools.ietf.org/html/rfc8689\">REQUIRETLS</a> extension.\n\t\t/// </summary>\n\t\tRequireTLS          = 1 << 10,\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpClient.cs",
    "content": "﻿//\n// SmtpClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Linq;\nusing System.Text;\nusing System.Buffers;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Globalization;\nusing System.Collections.Generic;\n#if NET6_0_OR_GREATER\nusing System.Diagnostics.Metrics;\n#endif\nusing System.Net.NetworkInformation;\nusing System.Security.Authentication;\nusing System.Runtime.CompilerServices;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MimeKit;\nusing MimeKit.IO;\nusing MimeKit.Cryptography;\n\nusing MailKit.Security;\n\nusing SslStream = MailKit.Net.SslStream;\nusing AuthenticationException = MailKit.Security.AuthenticationException;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An SMTP client that can be used to send email messages.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>The <see cref=\"SmtpClient\"/> class supports both the \"smtp\" and \"smtps\" protocols. The \"smtp\"\n\t/// protocol makes a clear-text connection to the SMTP server and does not use SSL or TLS unless the SMTP\n\t/// server supports the <a href=\"https://tools.ietf.org/html/rfc3207\">STARTTLS</a> extension. The \"smtps\"\n\t/// protocol, however, connects to the SMTP server using an SSL-wrapped connection.</para>\n\t/// <para>The connection established by any of the\n\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm\">Connect</a> methods may be re-used if an\n\t/// application wishes to send multiple messages to the same SMTP server. Since connecting and authenticating\n\t/// can be expensive operations, re-using a connection can significantly improve performance when sending a\n\t/// large number of messages to the same SMTP server over a short period of time.</para>\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessages\"/>\n\t/// </example>\n\tpublic partial class SmtpClient : MailTransport, ISmtpClient\n\t{\n\t\tstatic readonly byte[] EndData = Encoding.ASCII.GetBytes (\".\\r\\n\");\n\t\tstatic readonly char[] NewLineCharacters = { '\\r', '\\n' };\n\t\tinternal static string DefaultLocalDomain;\n\t\tconst int MaxLineLength = 998;\n\n\t\tenum SmtpCommand {\n\t\t\tMailFrom,\n\t\t\tRcptTo\n\t\t}\n\n\t\treadonly HashSet<string> authenticationMechanisms = new HashSet<string> (StringComparer.Ordinal);\n\t\treadonly SmtpAuthenticationSecretDetector detector = new SmtpAuthenticationSecretDetector ();\n\t\treadonly List<SmtpCommand> queued = new List<SmtpCommand> ();\n\t\tSslCertificateValidationInfo? sslValidationInfo;\n#if NET6_0_OR_GREATER\n\t\treadonly ClientMetrics? metrics;\n#endif\n\t\tlong clientConnectedTimestamp;\n\t\tSmtpCapabilities capabilities;\n\t\tint timeout = 2 * 60 * 1000;\n\t\tbool authenticated;\n\t\tbool connected;\n\t\tbool disposed;\n\t\tbool secure;\n\t\tUri? uri;\n\n\t\tinternal static string? GetSafeHostName (string? hostName)\n\t\t{\n\t\t\tvar idn = new IdnMapping ();\n\n\t\t\tif (!string.IsNullOrEmpty (hostName)) {\n\t\t\t\thostName = hostName!.Replace ('_', '-');\n\n\t\t\t\ttry {\n\t\t\t\t\treturn idn.GetAscii (hostName);\n\t\t\t\t} catch {\n\t\t\t\t\t// This can happen if the hostName contains illegal unicode characters.\n\t\t\t\t\tvar ascii = new StringBuilder ();\n\t\t\t\t\tfor (int i = 0; i < hostName.Length; i++) {\n\t\t\t\t\t\tif (hostName[i] <= 0x7F)\n\t\t\t\t\t\t\tascii.Append (hostName[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ascii.Length > 0 ? ascii.ToString () : null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tstatic SmtpClient ()\n\t\t{\n\t\t\tvar hostName = GetSafeHostName (IPGlobalProperties.GetIPGlobalProperties ().HostName);\n\n\t\t\tDefaultLocalDomain = hostName ?? \"localhost\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can send messages with the <see cref=\"SmtpClient\"/>, you must first call one of\n\t\t/// the <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm\">Connect</a> methods.\n\t\t/// Depending on whether the SMTP server requires authenticating or not, you may also need to\n\t\t/// authenticate using one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessages\"/>\n\t\t/// </example>\n\t\tpublic SmtpClient () : this (new NullProtocolLogger ())\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can send messages with the <see cref=\"SmtpClient\"/>, you must first call one of\n\t\t/// the <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm\">Connect</a> methods.\n\t\t/// Depending on whether the SMTP server requires authenticating or not, you may also need to\n\t\t/// authenticate using one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ProtocolLogger\"/>\n\t\t/// </example>\n\t\tpublic SmtpClient (IProtocolLogger protocolLogger) : base (protocolLogger)\n\t\t{\n\t\t\tprotocolLogger.AuthenticationSecretDetector = detector;\n\n#if NET6_0_OR_GREATER\n\t\t\t// Use the globally configured SmtpClient metrics.\n\t\t\tmetrics = Telemetry.SmtpClient.Metrics;\n#endif\n\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpClient\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Before you can send messages with the <see cref=\"SmtpClient\"/>, you must first call one of\n\t\t/// the <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm\">Connect</a> methods.\n\t\t/// Depending on whether the SMTP server requires authenticating or not, you may also need to\n\t\t/// authenticate using one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Authenticate.htm\">Authenticate</a> methods.\n\t\t/// </remarks>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\t/// <param name=\"meterFactory\">The meter factory.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"protocolLogger\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"meterFactory\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ProtocolLogger\"/>\n\t\t/// </example>\n\t\tpublic SmtpClient (IProtocolLogger protocolLogger, IMeterFactory meterFactory) : base (protocolLogger)\n\t\t{\n\t\t\tif (meterFactory == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (meterFactory));\n\n\t\t\tprotocolLogger.AuthenticationSecretDetector = detector;\n\n\t\t\tvar meter = meterFactory.Create (Telemetry.SmtpClient.MeterName, Telemetry.SmtpClient.MeterVersion);\n\t\t\tmetrics = Telemetry.SmtpClient.CreateMetrics (meter);\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Get the underlying SMTP stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the underlying SMTP stream.\n\t\t/// </remarks>\n\t\t/// <value>The SMTP stream.</value>\n\t\tSmtpStream? Stream {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets an object that can be used to synchronize access to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets an object that can be used to synchronize access to the SMTP server between multiple threads.</para>\n\t\t/// <para>When using <see cref=\"SmtpClient\"/> methods from multiple threads, it is important to lock the\n\t\t/// <see cref=\"SyncRoot\"/> object for thread safety.</para>\n\t\t/// </remarks>\n\t\t/// <value>The lock object.</value>\n\t\tpublic override object SyncRoot {\n\t\t\tget { return this; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the protocol supported by the message service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the protocol supported by the message service.\n\t\t/// </remarks>\n\t\t/// <value>The protocol.</value>\n\t\tprotected override string Protocol {\n\t\t\tget { return \"smtp\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the capabilities supported by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The capabilities will not be known until a successful connection has been made\n\t\t/// and may change once the client is authenticated.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The capabilities.</value>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// Capabilities cannot be enabled, they may only be disabled.\n\t\t/// </exception>\n\t\tpublic SmtpCapabilities Capabilities {\n\t\t\tget { return capabilities; }\n\t\t\tset {\n\t\t\t\tif ((capabilities | value) > capabilities)\n\t\t\t\t\tthrow new ArgumentException (\"Capabilities cannot be enabled, they may only be disabled.\", nameof (value));\n\n\t\t\t\tcapabilities = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the local domain.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The local domain is used in the HELO or EHLO commands sent to\n\t\t/// the SMTP server. If left unset, the local IP address will be\n\t\t/// used instead.\n\t\t/// </remarks>\n\t\t/// <value>The local domain.</value>\n\t\tpublic string? LocalDomain {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the BDAT command is preferred over the DATA command.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the <c>BDAT</c> command is preferred over the standard <c>DATA</c>\n\t\t/// command.</para>\n\t\t/// <para>The <c>BDAT</c> command is normally only used when the message being sent contains binary data\n\t\t/// (e.g. one or more MIME parts contains a <c>Content-Transfer-Encoding: binary</c> header). This\n\t\t/// option provides a way to override this behavior, forcing the <see cref=\"SmtpClient\"/> to send\n\t\t/// messages using the <c>BDAT</c> command instead of the <c>DATA</c> command even when it is not\n\t\t/// necessary to do so.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the <c>BDAT</c> command is preferred over the <c>DATA</c> command; otherwise, <see langword=\"false\" />.</value>\n\t\tprotected virtual bool PreferSendAsBinaryData {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the maximum message size supported by the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The maximum message size will not be known until a successful connection has\n\t\t/// been made and may change once the client is authenticated.</para>\n\t\t/// <note type=\"note\">This value is only relevant if the <see cref=\"Capabilities\"/> includes\n\t\t/// the <see cref=\"SmtpCapabilities.Size\"/> flag.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The maximum message size supported by the server.</value>\n\t\tpublic uint MaxSize {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether the client should use the REQUIRETLS extension if it is available.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether the client should use the REQUIRETLS extension if it is available.</para>\n\t\t/// <para>The REQUIRETLS extension (as defined in rfc8689) is a way to ensure that every SMTP server\n\t\t/// that a message passes through on its way to the recipient is required to use a TLS connection in\n\t\t/// order to transfer the message to the next SMTP server.</para>\n\t\t/// <note type=\"note\">This feature is only available if <see cref=\"Capabilities\"/> contains the\n\t\t/// <see cref=\"SmtpCapabilities.RequireTLS\"/> flag when sending the message.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the REQUIRETLS extension should be used; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool RequireTLS {\n\t\t\tget; set;\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (SmtpClient));\n\t\t}\n\n\t\t#region IMailService implementation\n\n\t\t/// <summary>\n\t\t/// Get the authentication mechanisms supported by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The authentication mechanisms are queried as part of the connection\n\t\t/// process.</para>\n\t\t/// <note type=\"tip\">To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before authenticating.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"Capabilities\"/>\n\t\t/// </example>\n\t\t/// <value>The authentication mechanisms.</value>\n\t\tpublic override HashSet<string> AuthenticationMechanisms {\n\t\t\tget { return authenticationMechanisms; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the timeout for network streaming operations, in milliseconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying socket stream's <see cref=\"System.IO.Stream.ReadTimeout\"/>\n\t\t/// and <see cref=\"System.IO.Stream.WriteTimeout\"/> values.\n\t\t/// </remarks>\n\t\t/// <value>The timeout in milliseconds.</value>\n\t\tpublic override int Timeout {\n\t\t\tget { return timeout; }\n\t\t\tset {\n\t\t\t\tif (IsConnected && Stream.CanTimeout) {\n\t\t\t\t\tStream.WriteTimeout = value;\n\t\t\t\t\tStream.ReadTimeout = value;\n\t\t\t\t}\n\n\t\t\t\ttimeout = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently connected to an SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The <see cref=\"IsConnected\"/> state is set to <see langword=\"true\" /> immediately after\n\t\t/// one of the <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm\">Connect</a>\n\t\t/// methods succeeds and is not set back to <see langword=\"false\" /> until either the client\n\t\t/// is disconnected via <see cref=\"Disconnect(bool,CancellationToken)\"/> or until an\n\t\t/// <see cref=\"SmtpProtocolException\"/> is thrown while attempting to read or write to\n\t\t/// the underlying network socket.</para>\n\t\t/// <para>When an <see cref=\"SmtpProtocolException\"/> is caught, the connection state of the\n\t\t/// <see cref=\"SmtpClient\"/> should be checked before continuing.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t\t/// </example>\n\t\t/// <value><see langword=\"true\" /> if the client is connected; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, new[] { nameof (Stream), nameof (uri) })]\n\t\tpublic override bool IsConnected {\n\t\t\tget { return connected; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is secure (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is secure; otherwise, <see langword=\"false\" />.</value>\n\t\t[MemberNotNullWhen (true, new[] { nameof (Stream), nameof (uri) })]\n\t\tpublic override bool IsSecure {\n\t\t\tget { return IsConnected && secure; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is encrypted (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is encrypted; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsEncrypted {\n\t\t\tget { return IsSecure && (Stream.Stream is SslStream sslStream) && sslStream.IsEncrypted; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the connection is signed (typically via SSL or TLS).\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the connection is signed; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsSigned {\n\t\t\tget { return IsSecure && (Stream.Stream is SslStream sslStream) && sslStream.IsSigned; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS protocol version.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the negotiated SSL or TLS protocol version once an SSL or TLS connection has been made.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS protocol version.</value>\n\t\tpublic override SslProtocols SslProtocol {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.SslProtocol;\n\n\t\t\t\treturn SslProtocols.None;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override CipherAlgorithmType? SslCipherAlgorithm {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.CipherAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS cipher algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslCipherStrength {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.CipherStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n#if NET5_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS cipher suite.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS cipher suite once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <value>The negotiated SSL or TLS cipher suite.</value>\n\t\tpublic override TlsCipherSuite? SslCipherSuite {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.NegotiatedCipherSuite;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override HashAlgorithmType? SslHashAlgorithm {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.HashAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS hash algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS hash algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS hash algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslHashStrength {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.HashStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override ExchangeAlgorithmType? SslKeyExchangeAlgorithm {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.KeyExchangeAlgorithm;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the negotiated SSL or TLS key exchange algorithm strength.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the negotiated SSL or TLS key exchange algorithm strength once an SSL or TLS connection has been made.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SslConnectionInformation\"/>\n\t\t/// </example>\n\t\t/// <value>The negotiated SSL or TLS key exchange algorithm strength.</value>\n#if NET10_0_OR_GREATER\n\t\t[Obsolete (\"Use SslCipherSuite instead.\")]\n#endif\n\t\tpublic override int? SslKeyExchangeStrength {\n\t\t\tget {\n\t\t\t\tif (IsSecure && (Stream.Stream is SslStream sslStream))\n\t\t\t\t\treturn sslStream.KeyExchangeStrength;\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the client is currently authenticated with the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the client is currently authenticated with the SMTP server.</para>\n\t\t/// <para>To authenticate with the SMTP server, use one of the\n\t\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Authenticate.htm\">Authenticate</a>\n\t\t/// methods.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the client is authenticated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool IsAuthenticated {\n\t\t\tget { return authenticated; }\n\t\t}\n\n\t\tNetworkOperation StartNetworkOperation (NetworkOperationKind kind)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\treturn NetworkOperation.Start (kind, uri!, Telemetry.SmtpClient.ActivitySource, metrics);\n#else\n\t\t\treturn NetworkOperation.Start (kind, uri!);\n#endif\n\t\t}\n\n\t\tbool ValidateRemoteCertificate (object? sender, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\tvar host = uri!.Host;\n\t\t\tbool valid;\n\n\t\t\tsslValidationInfo?.Dispose ();\n\t\t\tsslValidationInfo = null;\n\n\t\t\tif (ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n#if NETFRAMEWORK\n\t\t\t} else if (ServicePointManager.ServerCertificateValidationCallback != null) {\n\t\t\t\tvalid = ServicePointManager.ServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n#endif\n\t\t\t} else {\n\t\t\t\tvalid = DefaultServerCertificateValidationCallback (host, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\tif (!valid) {\n\t\t\t\t// Note: The SslHandshakeException.Create() method will nullify this once it's done using it.\n\t\t\t\tsslValidationInfo = new SslCertificateValidationInfo (host, certificate, chain, sslPolicyErrors);\n\t\t\t}\n\n\t\t\treturn valid;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Invoked only when no recipients were accepted by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <see cref=\"OnRecipientNotAccepted\"/> is overridden to not throw\n\t\t/// an exception, this method should be overridden to throw an appropriate\n\t\t/// exception instead.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\tprotected virtual void OnNoRecipientsAccepted (MimeMessage message)\n\t\t{\n\t\t}\n\n\t\tvoid QueueCommand (SmtpCommand type, string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tStream!.QueueCommand (command, cancellationToken);\n\t\t\tqueued.Add (type);\n\t\t}\n\n\t\tstruct QueueResults\n\t\t{\n\t\t\tpublic readonly int RecipientsAccepted;\n\t\t\tpublic Exception? FirstException;\n\n\t\t\tpublic QueueResults (int recipientsAccepted, Exception? firstException)\n\t\t\t{\n\t\t\t\tRecipientsAccepted = recipientsAccepted;\n\t\t\t\tFirstException = firstException;\n\t\t\t}\n\t\t}\n\n\t\tQueueResults ParseCommandQueueResponses (MimeMessage message, MailboxAddress sender, IList<MailboxAddress> recipients, List<SmtpResponse> responses, Exception? readResponseException)\n\t\t{\n\t\t\tException? firstException = null;\n\t\t\tint recipientsAccepted = 0;\n\t\t\tint rcpt = 0;\n\n\t\t\ttry {\n\t\t\t\t// process the responses\n\t\t\t\tfor (int i = 0; i < responses.Count; i++) {\n\t\t\t\t\tswitch (queued[i]) {\n\t\t\t\t\tcase SmtpCommand.MailFrom:\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tParseMailFromResponse (message, sender, responses[i]);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tfirstException ??= ex;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SmtpCommand.RcptTo:\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (ParseRcptToResponse (message, recipients[rcpt++], responses[i]))\n\t\t\t\t\t\t\t\trecipientsAccepted++;\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tfirstException ??= ex;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tqueued.Clear ();\n\t\t\t}\n\n\t\t\treturn new QueueResults (recipientsAccepted, firstException ?? readResponseException);\n\t\t}\n\n\t\tQueueResults FlushCommandQueue (MimeMessage message, MailboxAddress sender, IList<MailboxAddress> recipients, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\t// Note: Queued commands are buffered by the stream\n\t\t\t\tStream!.Flush (cancellationToken);\n\t\t\t} catch {\n\t\t\t\tqueued.Clear ();\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tvar responses = new List<SmtpResponse> (queued.Count);\n\t\t\tException? rex = null;\n\n\t\t\t// Note: We need to read all responses from the server before we can process\n\t\t\t// them in case any of them have any errors so that we can RSET the state.\n\t\t\ttry {\n\t\t\t\tfor (int i = 0; i < queued.Count; i++) {\n\t\t\t\t\tvar response = Stream.ReadResponse (cancellationToken);\n\t\t\t\t\tresponses.Add (response);\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\t// Note: Most likely this exception is due to an unexpected disconnect.\n\t\t\t\t// Usually, before an SMTP server disconnects the client, it will send an\n\t\t\t\t// error code response that will be more useful to the user than an error\n\t\t\t\t// stating that the server has unexpected disconnected. Save this exception\n\t\t\t\t// in case the server didn't give us a response with an error code.\n\t\t\t\trex = ex;\n\t\t\t}\n\n\t\t\treturn ParseCommandQueueResponses (message, sender, recipients, responses, rex);\n\t\t}\n\n\t\tSmtpResponse SendCommandInternal (string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\ttry {\n\t\t\t\treturn Stream!.SendCommand (command, cancellationToken);\n\t\t\t} catch {\n\t\t\t\tDisconnect (uri!.Host, uri.Port, GetSecureSocketOptions (uri), false);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send a custom command to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends a custom command to the SMTP server.</para>\n\t\t/// <note type=\"note\">The command string should not include the terminating <c>\\r\\n</c> sequence.</note>\n\t\t/// </remarks>\n\t\t/// <returns>The command response.</returns>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"command\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tprotected SmtpResponse SendCommand (string command, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (command == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (command));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient must be connected before you can send commands.\");\n\n\t\t\tif (!command.EndsWith (\"\\r\\n\", StringComparison.Ordinal))\n\t\t\t\tcommand += \"\\r\\n\";\n\n\t\t\treturn SendCommandInternal (command, cancellationToken);\n\t\t}\n\n\t\tstatic bool ReadNextLine (string text, ref int index, out int lineStartIndex, out int lineEndIndex)\n\t\t{\n\t\t\tlineStartIndex = 0;\n\t\t\tlineEndIndex = 0;\n\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\tlineStartIndex = index;\n\t\t\tlineEndIndex = index;\n\n\t\t\tdo {\n\t\t\t\tchar c = text[index++];\n\n\t\t\t\tif (c == '\\n')\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Only update lineEndIndex when we see a non-whitespace character. This effectively Trim()'s the end.\n\t\t\t\tif (!char.IsWhiteSpace (c))\n\t\t\t\t\tlineEndIndex = index;\n\t\t\t} while (index < text.Length);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool IsCapability (string capability, string text, int startIndex, int endIndex, bool hasValue = false)\n\t\t{\n\t\t\tint length = endIndex - startIndex;\n\n\t\t\tif (hasValue) {\n\t\t\t\tif (length <= capability.Length)\n\t\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tif (length != capability.Length)\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (string.Compare (text, startIndex, capability, 0, capability.Length, StringComparison.OrdinalIgnoreCase) != 0)\n\t\t\t\treturn false;\n\n\t\t\tif (hasValue) {\n\t\t\t\tint index = startIndex + capability.Length;\n\n\t\t\t\treturn length > capability.Length && (text[index] == ' ' || text[index] == '=');\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvoid AddAuthenticationMechanisms (string mechanisms, int startIndex, int endIndex)\n\t\t{\n\t\t\tint index = startIndex;\n\n\t\t\tdo {\n\t\t\t\twhile (index < endIndex && char.IsWhiteSpace (mechanisms[index]))\n\t\t\t\t\tindex++;\n\n\t\t\t\tint mechanismIndex = index;\n\n\t\t\t\twhile (index < endIndex && !char.IsWhiteSpace (mechanisms[index]))\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (index > mechanismIndex) {\n\t\t\t\t\tvar mechanism = mechanisms.Substring (mechanismIndex, index - mechanismIndex);\n\n\t\t\t\t\tAuthenticationMechanisms.Add (mechanism);\n\t\t\t\t}\n\t\t\t} while (index < endIndex);\n\t\t}\n\n\t\tvoid SetMaxSize (string capability, int startIndex, int endIndex)\n\t\t{\n\t\t\tint index = startIndex;\n\n\t\t\twhile (index < endIndex && char.IsWhiteSpace (capability[index]))\n\t\t\t\tindex++;\n\n#if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER\n\t\t\tvar value = capability.AsSpan (index, endIndex - index);\n#else\n\t\t\tvar value = capability.Substring (index, endIndex - index);\n#endif\n\n\t\t\tif (index < endIndex && uint.TryParse (value, NumberStyles.None, CultureInfo.InvariantCulture, out uint size))\n\t\t\t\tMaxSize = size;\n\t\t}\n\n\t\tvoid UpdateCapabilities (SmtpResponse response)\n\t\t{\n\t\t\t// Clear the extensions except STARTTLS so that this capability stays set after a STARTTLS command.\n\t\t\tcapabilities &= SmtpCapabilities.StartTLS;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tMaxSize = 0;\n\n\t\t\tstring text = response.Response;\n\t\t\tint index = 0;\n\n\t\t\twhile (ReadNextLine (text, ref index, out int lineStartIndex, out int lineEndIndex)) {\n\t\t\t\tif (IsCapability (\"AUTH\", text, lineStartIndex, lineEndIndex, true)) {\n\t\t\t\t\tint startIndex = lineStartIndex + 5;\n\n\t\t\t\t\tAddAuthenticationMechanisms (text, startIndex, lineEndIndex);\n\t\t\t\t\tcapabilities |= SmtpCapabilities.Authentication;\n\t\t\t\t} else if (IsCapability (\"X-EXPS\", text, lineStartIndex, lineEndIndex, true)) {\n\t\t\t\t\tint startIndex = lineStartIndex + 7;\n\n\t\t\t\t\tAddAuthenticationMechanisms (text, startIndex, lineEndIndex);\n\t\t\t\t\tcapabilities |= SmtpCapabilities.Authentication;\n\t\t\t\t} else if (IsCapability (\"SIZE\", text, lineStartIndex, lineEndIndex, true)) {\n\t\t\t\t\tint startIndex = lineStartIndex + 5;\n\n\t\t\t\t\tSetMaxSize (text, startIndex, lineEndIndex);\n\t\t\t\t\tcapabilities |= SmtpCapabilities.Size;\n\t\t\t\t} else if (IsCapability (\"DSN\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.Dsn;\n\t\t\t\t} else if (IsCapability (\"BINARYMIME\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.BinaryMime;\n\t\t\t\t} else if (IsCapability (\"CHUNKING\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.Chunking;\n\t\t\t\t} else if (IsCapability (\"ENHANCEDSTATUSCODES\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.EnhancedStatusCodes;\n\t\t\t\t} else if (IsCapability (\"8BITMIME\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.EightBitMime;\n\t\t\t\t} else if (IsCapability (\"PIPELINING\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.Pipelining;\n\t\t\t\t} else if (IsCapability (\"STARTTLS\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.StartTLS;\n\t\t\t\t} else if (IsCapability (\"SMTPUTF8\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.UTF8;\n\t\t\t\t} else if (IsCapability (\"REQUIRETLS\", text, lineStartIndex, lineEndIndex)) {\n\t\t\t\t\tcapabilities |= SmtpCapabilities.RequireTLS;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstring CreateEhloCommand (string helo)\n\t\t{\n\t\t\tstring domain;\n\n\t\t\tif (!string.IsNullOrEmpty (LocalDomain)) {\n\t\t\t\tif (IPAddress.TryParse (LocalDomain, out var ip)) {\n\t\t\t\t\tif (ip.IsIPv4MappedToIPv6) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tip = ip.MapToIPv4 ();\n\t\t\t\t\t\t} catch (ArgumentOutOfRangeException) {\n\t\t\t\t\t\t\t// .NET 4.5.2 bug on Windows 7 SP1 (issue #814)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ip.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\t\t\treturn string.Format (\"{0} [IPv6:{1}]\\r\\n\", helo, ip);\n\n\t\t\t\t\treturn string.Format (\"{0} [{1}]\\r\\n\", helo, ip);\n\t\t\t\t} else {\n\t\t\t\t\tdomain = LocalDomain!;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdomain = DefaultLocalDomain;\n\t\t\t}\n\n\t\t\treturn string.Format (\"{0} {1}\\r\\n\", helo, domain);\n\t\t}\n\n\t\tSmtpResponse SendEhlo (bool connecting, string helo, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = CreateEhloCommand (helo);\n\n\t\t\tif (connecting)\n\t\t\t\treturn Stream!.SendCommand (command, cancellationToken);\n\n\t\t\treturn SendCommandInternal (command, cancellationToken);\n\t\t}\n\n\t\tvoid Ehlo (bool connecting, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar response = SendEhlo (connecting, \"EHLO\", cancellationToken);\n\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok) {\n\t\t\t\t// Try sending HELO instead...\n\t\t\t\tresponse = SendEhlo (connecting, \"HELO\", cancellationToken);\n\n\t\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\t\t\t} else {\n\t\t\t\tUpdateCapabilities (response);\n\t\t\t}\n\t\t}\n\n\t\tvoid ValidateArguments (SaslMechanism mechanism)\n\t\t{\n\t\t\tif (mechanism == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mechanism));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient must be connected before you can authenticate.\");\n\n\t\t\tif (IsAuthenticated)\n\t\t\t\tthrow new InvalidOperationException (\"The SmtpClient is already authenticated.\");\n\n\t\t\tif ((capabilities & SmtpCapabilities.Authentication) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The SMTP server does not support authentication.\");\n\n\t\t\tmechanism.ChannelBindingContext = Stream.Stream as IChannelBindingContext;\n\t\t\tmechanism.Uri = new Uri ($\"smtp://{uri.Host}\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the specified SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the specified SASL mechanism.</para>\n\t\t/// <para>For a list of available SASL authentication mechanisms supported by the server,\n\t\t/// check the <see cref=\"AuthenticationMechanisms\"/> property after the service has been\n\t\t/// connected.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SMTP server does not support authentication.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Authenticate (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (mechanism);\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tSaslException? saslException = null;\n\t\t\t\tSmtpResponse response;\n\t\t\t\tstring challenge;\n\t\t\t\tstring command;\n\n\t\t\t\t// send an initial challenge if the mechanism supports it\n\t\t\t\tif (mechanism.SupportsInitialResponse) {\n\t\t\t\t\tchallenge = mechanism.Challenge (null, cancellationToken);\n\t\t\t\t\tcommand = string.Format (\"AUTH {0} {1}\\r\\n\", mechanism.MechanismName, challenge);\n\t\t\t\t} else {\n\t\t\t\t\tcommand = string.Format (\"AUTH {0}\\r\\n\", mechanism.MechanismName);\n\t\t\t\t}\n\n\t\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tresponse = SendCommandInternal (command, cancellationToken);\n\n\t\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationMechanismTooWeak)\n\t\t\t\t\t\tthrow new AuthenticationException (response.Response);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\twhile (response.StatusCode == SmtpStatusCode.AuthenticationChallenge) {\n\t\t\t\t\t\t\tchallenge = mechanism.Challenge (response.Response, cancellationToken);\n\t\t\t\t\t\t\tresponse = SendCommandInternal (challenge + \"\\r\\n\", cancellationToken);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsaslException = null;\n\t\t\t\t\t} catch (SaslException ex) {\n\t\t\t\t\t\t// reset the authentication state\n\t\t\t\t\t\tresponse = SendCommandInternal (\"\\r\\n\", cancellationToken);\n\t\t\t\t\t\tsaslException = ex;\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t}\n\n\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationSuccessful) {\n\t\t\t\t\tif (mechanism.NegotiatedSecurityLayer)\n\t\t\t\t\t\tEhlo (false, cancellationToken);\n\t\t\t\t\tauthenticated = true;\n\t\t\t\t\tOnAuthenticated (response.Response);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar message = string.Format (CultureInfo.InvariantCulture, \"{0}: {1}\", (int) response.StatusCode, response.Response);\n\n\t\t\t\tif (saslException != null)\n\t\t\t\t\tthrow new AuthenticationException (message, saslException);\n\n\t\t\t\tthrow new AuthenticationException (message);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t[MemberNotNull (nameof (Stream), nameof (uri))]\n\t\tvoid ValidateArguments (Encoding encoding, ICredentials credentials)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tif (credentials == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (credentials));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient must be connected before you can authenticate.\");\n\n\t\t\tif (IsAuthenticated)\n\t\t\t\tthrow new InvalidOperationException (\"The SmtpClient is already authenticated.\");\n\n\t\t\tif ((capabilities & SmtpCapabilities.Authentication) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The SMTP server does not support authentication.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Authenticate using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Authenticates using the supplied credentials.</para>\n\t\t/// <para>If the SMTP server supports authentication, then the SASL mechanisms\n\t\t/// that both the client and server support (not including any OAUTH mechanisms)\n\t\t/// are tried in order of greatest security to weakest security. Once a SASL\n\t\t/// authentication mechanism is found that both client and server support, the\n\t\t/// credentials are used to authenticate.</para>\n\t\t/// <para>If, on the other hand, authentication is not supported by the SMTP\n\t\t/// server, then this method will throw <see cref=\"System.NotSupportedException\"/>.\n\t\t/// The <see cref=\"Capabilities\"/> property can be checked for the\n\t\t/// <see cref=\"SmtpCapabilities.Authentication\"/> flag to make sure the\n\t\t/// SMTP server supports authentication before calling this method.</para>\n\t\t/// <note type=\"tip\"> To prevent the usage of certain authentication mechanisms,\n\t\t/// simply remove them from the <see cref=\"AuthenticationMechanisms\"/> hash set\n\t\t/// before calling this method.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already authenticated.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SMTP server does not support authentication.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.AuthenticationException\">\n\t\t/// Authentication using the supplied credentials has failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"MailKit.Security.SaslException\">\n\t\t/// A SASL authentication error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Authenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (encoding, credentials);\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Authenticate);\n\n\t\t\ttry {\n\t\t\t\tvar saslUri = new Uri ($\"smtp://{uri.Host}\");\n\t\t\t\tAuthenticationException? authException = null;\n\t\t\t\tSaslException? saslException;\n\t\t\t\tSmtpResponse response;\n\t\t\t\tSaslMechanism? sasl;\n\t\t\t\tbool tried = false;\n\t\t\t\tstring challenge;\n\t\t\t\tstring command;\n\n\t\t\t\tforeach (var authmech in SaslMechanism.Rank (AuthenticationMechanisms)) {\n\t\t\t\t\tvar cred = credentials.GetCredential (uri, authmech);\n\n\t\t\t\t\tif (cred == null || (sasl = SaslMechanism.Create (authmech, encoding, cred)) == null)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tsasl.ChannelBindingContext = Stream.Stream as IChannelBindingContext;\n\t\t\t\t\tsasl.Uri = saslUri;\n\n\t\t\t\t\ttried = true;\n\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\t\t// send an initial challenge if the mechanism supports it\n\t\t\t\t\tif (sasl.SupportsInitialResponse) {\n\t\t\t\t\t\tchallenge = sasl.Challenge (null, cancellationToken);\n\t\t\t\t\t\tcommand = string.Format (\"AUTH {0} {1}\\r\\n\", authmech, challenge);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcommand = string.Format (\"AUTH {0}\\r\\n\", authmech);\n\t\t\t\t\t}\n\n\t\t\t\t\tdetector.IsAuthenticating = true;\n\t\t\t\t\tsaslException = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = SendCommandInternal (command, cancellationToken);\n\n\t\t\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationMechanismTooWeak)\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twhile (response.StatusCode == SmtpStatusCode.AuthenticationChallenge) {\n\t\t\t\t\t\t\t\tchallenge = sasl.Challenge (response.Response, cancellationToken);\n\t\t\t\t\t\t\t\tresponse = SendCommandInternal (challenge + \"\\r\\n\", cancellationToken);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsaslException = null;\n\t\t\t\t\t\t} catch (SaslException ex) {\n\t\t\t\t\t\t\t// reset the authentication state\n\t\t\t\t\t\t\tresponse = SendCommandInternal (\"\\r\\n\", cancellationToken);\n\t\t\t\t\t\t\tsaslException = ex;\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tdetector.IsAuthenticating = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationSuccessful) {\n\t\t\t\t\t\tif (sasl.NegotiatedSecurityLayer)\n\t\t\t\t\t\t\tEhlo (false, cancellationToken);\n\t\t\t\t\t\tauthenticated = true;\n\t\t\t\t\t\tOnAuthenticated (response.Response);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar message = string.Format (CultureInfo.InvariantCulture, \"{0}: {1}\", (int) response.StatusCode, response.Response);\n\t\t\t\t\tException inner;\n\n\t\t\t\t\tif (saslException != null)\n\t\t\t\t\t\tinner = new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response, saslException);\n\t\t\t\t\telse\n\t\t\t\t\t\tinner = new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\t\t\tauthException = new AuthenticationException (message, inner);\n\t\t\t\t}\n\n\t\t\t\tif (tried)\n\t\t\t\t\tthrow authException ?? new AuthenticationException ();\n\n\t\t\t\tthrow new NotSupportedException (\"No compatible authentication mechanisms found.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tinternal static void ComputeDefaultValues (string host, ref int port, ref SecureSocketOptions options, out Uri uri, out bool starttls)\n\t\t{\n\t\t\tswitch (options) {\n\t\t\tdefault:\n\t\t\t\tif (port == 0)\n\t\t\t\t\tport = 25;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.Auto:\n\t\t\t\tswitch (port) {\n\t\t\t\tcase 0: port = 25; goto default;\n\t\t\t\tcase 465: options = SecureSocketOptions.SslOnConnect; break;\n\t\t\t\tdefault: options = SecureSocketOptions.StartTlsWhenAvailable; break;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.SslOnConnect:\n\t\t\t\tif (port == 0)\n\t\t\t\t\tport = 465;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (IPAddress.TryParse (host, out var ip) && ip.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\thost = \"[\" + host + \"]\";\n\n\t\t\tswitch (options) {\n\t\t\tcase SecureSocketOptions.StartTlsWhenAvailable:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"smtp://{0}:{1}/?starttls=when-available\", host, port));\n\t\t\t\tstarttls = true;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.StartTls:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"smtp://{0}:{1}/?starttls=always\", host, port));\n\t\t\t\tstarttls = true;\n\t\t\t\tbreak;\n\t\t\tcase SecureSocketOptions.SslOnConnect:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"smtps://{0}:{1}\", host, port));\n\t\t\t\tstarttls = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\turi = new Uri (string.Format (CultureInfo.InvariantCulture, \"smtp://{0}:{1}\", host, port));\n\t\t\t\tstarttls = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvoid SslHandshake (SslStream ssl, string host, CancellationToken cancellationToken)\n\t\t{\n#if NET5_0_OR_GREATER\n\t\t\tssl.AuthenticateAsClient (GetSslClientAuthenticationOptions (host, ValidateRemoteCertificate));\n#else\n\t\t\tssl.AuthenticateAsClient (host, ClientCertificates, SslProtocols, CheckCertificateRevocation);\n#endif\n\t\t}\n\n\t\tvoid RecordClientDisconnected (Exception? ex)\n\t\t{\n#if NET6_0_OR_GREATER\n\t\t\tmetrics?.RecordClientDisconnected (clientConnectedTimestamp, uri!, ex);\n#endif\n\t\t\tclientConnectedTimestamp = 0;\n\t\t}\n\n\t\tvoid PostConnect (Stream stream, string host, int port, SecureSocketOptions options, bool starttls, CancellationToken cancellationToken)\n\t\t{\n\t\t\tclientConnectedTimestamp = Stopwatch.GetTimestamp ();\n\n\t\t\ttry {\n\t\t\t\tProtocolLogger.LogConnect (uri!);\n\t\t\t} catch {\n\t\t\t\tstream.Dispose ();\n\t\t\t\tsecure = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tStream = new SmtpStream (stream, ProtocolLogger);\n\n\t\t\ttry {\n\t\t\t\t// read the greeting\n\t\t\t\tvar response = Stream.ReadResponse (cancellationToken);\n\n\t\t\t\tif (response.StatusCode != SmtpStatusCode.ServiceReady)\n\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\t\t// Send EHLO and get a list of supported extensions\n\t\t\t\tEhlo (true, cancellationToken);\n\n\t\t\t\tif (options == SecureSocketOptions.StartTls && (capabilities & SmtpCapabilities.StartTLS) == 0)\n\t\t\t\t\tthrow new NotSupportedException (\"The SMTP server does not support the STARTTLS extension.\");\n\n\t\t\t\tif (starttls && (capabilities & SmtpCapabilities.StartTLS) != 0) {\n\t\t\t\t\tresponse = Stream.SendCommand (\"STARTTLS\\r\\n\", cancellationToken);\n\t\t\t\t\tif (response.StatusCode != SmtpStatusCode.ServiceReady)\n\t\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar tls = new SslStream (stream, false, ValidateRemoteCertificate);\n\t\t\t\t\t\tStream.Stream = tls;\n\n\t\t\t\t\t\tSslHandshake (tls, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, true, \"SMTP\", host, port, 465, 25, 587);\n\t\t\t\t\t}\n\n\t\t\t\t\tsecure = true;\n\n\t\t\t\t\t// Send EHLO again and get the new list of supported extensions\n\t\t\t\t\tEhlo (true, cancellationToken);\n\t\t\t\t}\n\n\t\t\t\tconnected = true;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tRecordClientDisconnected (ex);\n\t\t\t\tStream.Dispose ();\n\t\t\t\tsecure = false;\n\t\t\t\tStream = null;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\tOnConnected (host, port, options);\n\t\t}\n\n\t\tvoid ValidateArguments (string host, int port)\n\t\t{\n\t\t\tif (host == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (host));\n\n\t\t\tif (host.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The host name cannot be empty.\", nameof (host));\n\n\t\t\tif (port < 0 || port > 65535)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (port));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (IsConnected)\n\t\t\t\tthrow new InvalidOperationException (\"The SmtpClient is already connected.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified SMTP or SMTP/S server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified SMTP or SMTP/S server.</para>\n\t\t/// <para>If the <paramref name=\"port\"/> has a value of <c>0</c>, then the\n\t\t/// <paramref name=\"options\"/> parameter is used to determine the default port to\n\t\t/// connect to. The default port used with <see cref=\"SecureSocketOptions.SslOnConnect\"/>\n\t\t/// is <c>465</c>. All other values will use a default port of <c>25</c>.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>465</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"note\">The connection established by any of the\n\t\t/// <a href=\"Overload_MailKit_Net_Smtp_SmtpClient_Connect.htm\">Connect</a>\n\t\t/// methods may be re-used if an application wishes to send multiple messages\n\t\t/// to the same SMTP server. Since connecting and authenticating can be expensive\n\t\t/// operations, re-using a connection can significantly improve performance when\n\t\t/// sending a large number of messages to the same SMTP server over a short\n\t\t/// period of time.</note>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"host\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the SMTP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.Net.Sockets.SocketException\">\n\t\t/// A socket error occurred trying to connect to the remote host.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// An SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (host, port);\n\n\t\t\tcapabilities = SmtpCapabilities.None;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tMaxSize = 0;\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Connect);\n\n\t\t\ttry {\n\t\t\t\tvar stream = ConnectNetwork (host, port, cancellationToken);\n\t\t\t\tstream.WriteTimeout = timeout;\n\t\t\t\tstream.ReadTimeout = timeout;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tSslHandshake (ssl, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"SMTP\", host, port, 465, 25, 587);\n\t\t\t\t\t}\n\n\t\t\t\t\tsecure = true;\n\t\t\t\t\tstream = ssl;\n\t\t\t\t} else {\n\t\t\t\t\tsecure = false;\n\t\t\t\t}\n\n\t\t\t\tPostConnect (stream, host, port, options, starttls, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tvoid ValidateArguments (Socket socket, string host, int port)\n\t\t{\n\t\t\tif (socket == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (socket));\n\n\t\t\tif (!socket.Connected)\n\t\t\t\tthrow new ArgumentException (\"The socket is not connected.\", nameof (socket));\n\n\t\t\tValidateArguments (host, port);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified SMTP or SMTP/S server using the provided socket.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified SMTP or SMTP/S server using the provided socket.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>465</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"socket\">The socket to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"socket\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para><paramref name=\"socket\"/> is not connected.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"host\"/> is a zero-length string.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the SMTP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// An SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (socket, host, port);\n\n\t\t\tConnect (new NetworkStream (socket, true), host, port, options, cancellationToken);\n\t\t}\n\n\t\tvoid ValidateArguments (Stream stream, string host, int port)\n\t\t{\n\t\t\tif (stream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (stream));\n\n\t\t\tValidateArguments (host, port);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Establish a connection to the specified SMTP or SMTP/S server using the provided stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Establishes a connection to the specified SMTP or SMTP/S server using the provided stream.</para>\n\t\t/// <para>If the <paramref name=\"options\"/> has a value of\n\t\t/// <see cref=\"SecureSocketOptions.Auto\"/>, then the <paramref name=\"port\"/> is used\n\t\t/// to determine the default security options. If the <paramref name=\"port\"/> has a value\n\t\t/// of <c>465</c>, then the default options used will be\n\t\t/// <see cref=\"SecureSocketOptions.SslOnConnect\"/>. All other values will use\n\t\t/// <see cref=\"SecureSocketOptions.StartTlsWhenAvailable\"/>.</para>\n\t\t/// <para>Once a connection is established, properties such as\n\t\t/// <see cref=\"AuthenticationMechanisms\"/> and <see cref=\"Capabilities\"/> will be\n\t\t/// populated.</para>\n\t\t/// <note type=\"info\">With the exception of using the <paramref name=\"port\"/> to determine the\n\t\t/// default <see cref=\"SecureSocketOptions\"/> to use when the <paramref name=\"options\"/> value\n\t\t/// is <see cref=\"SecureSocketOptions.Auto\"/>, the <paramref name=\"host\"/> and\n\t\t/// <paramref name=\"port\"/> parameters are only used for logging purposes.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream to use for the connection.</param>\n\t\t/// <param name=\"host\">The host name to connect to.</param>\n\t\t/// <param name=\"port\">The port to connect to. If the specified port is <c>0</c>, then the default port will be used.</param>\n\t\t/// <param name=\"options\">The secure socket options to when connecting.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"stream\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"host\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"port\"/> is not between <c>0</c> and <c>65535</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// The <paramref name=\"host\"/> is a zero-length string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is already connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// <paramref name=\"options\"/> was set to\n\t\t/// <see cref=\"MailKit.Security.SecureSocketOptions.StartTls\"/>\n\t\t/// and the SMTP server does not support the STARTTLS extension.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SslHandshakeException\">\n\t\t/// An error occurred during the SSL/TLS negotiations.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// An SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void Connect (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tValidateArguments (stream, host, port);\n\n\t\t\tcapabilities = SmtpCapabilities.None;\n\t\t\tAuthenticationMechanisms.Clear ();\n\t\t\tMaxSize = 0;\n\n\t\t\tComputeDefaultValues (host, ref port, ref options, out uri, out var starttls);\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Connect);\n\n\t\t\ttry {\n\t\t\t\tStream network;\n\n\t\t\t\tif (options == SecureSocketOptions.SslOnConnect) {\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tSslHandshake (ssl, host, cancellationToken);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"SMTP\", host, port, 465, 25, 587);\n\t\t\t\t\t}\n\n\t\t\t\t\tnetwork = ssl;\n\t\t\t\t\tsecure = true;\n\t\t\t\t} else {\n\t\t\t\t\tnetwork = stream;\n\t\t\t\t\tsecure = false;\n\t\t\t\t}\n\n\t\t\t\tif (network.CanTimeout) {\n\t\t\t\t\tnetwork.WriteTimeout = timeout;\n\t\t\t\t\tnetwork.ReadTimeout = timeout;\n\t\t\t\t}\n\n\t\t\t\tPostConnect (network, host, port, options, starttls, cancellationToken);\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Disconnect the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If <paramref name=\"quit\"/> is <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessage\"/>\n\t\t/// </example>\n\t\t/// <param name=\"quit\">If set to <see langword=\"true\" />, a <c>QUIT</c> command will be issued in order to disconnect cleanly.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\tpublic override void Disconnect (bool quit, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\treturn;\n\n\t\t\tif (quit) {\n\t\t\t\ttry {\n\t\t\t\t\tStream.SendCommand (\"QUIT\\r\\n\", cancellationToken);\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t} catch (SmtpProtocolException) {\n\t\t\t\t} catch (SmtpCommandException) {\n\t\t\t\t} catch (IOException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tDisconnect (uri.Host, uri.Port, GetSecureSocketOptions (uri), true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Ping the SMTP server to keep the connection alive.\n\t\t/// </summary>\n\t\t/// <remarks>Mail servers, if left idle for too long, will automatically drop the connection.</remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic override void NoOp (CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient is not connected.\");\n\n\t\t\tvar response = SendCommandInternal (\"NOOP\\r\\n\", cancellationToken);\n\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\t\t}\n\n\t\tvoid Disconnect (string? host, int port, SecureSocketOptions options, bool requested)\n\t\t{\n\t\t\t// Note: if the uri is null, then the user manually disconnected already.\n\t\t\tif (uri != null)\n\t\t\t\tRecordClientDisconnected (null);\n\n\t\t\tcapabilities = SmtpCapabilities.None;\n\t\t\tauthenticated = false;\n\t\t\tconnected = false;\n\t\t\tsecure = false;\n\t\t\tqueued.Clear ();\n\t\t\turi = null;\n\n\t\t\tif (Stream != null) {\n\t\t\t\tStream.Dispose ();\n\t\t\t\tStream = null;\n\t\t\t}\n\n\t\t\tif (host != null)\n\t\t\t\tOnDisconnected (host, port, options, requested);\n\t\t}\n\n#endregion\n\n\t\t#region IMailTransport implementation\n\n\t\tstatic MailboxAddress? GetMessageSender (MimeMessage message)\n\t\t{\n\t\t\tif (message.ResentSender != null)\n\t\t\t\treturn message.ResentSender;\n\n\t\t\tif (message.ResentFrom.Count > 0)\n\t\t\t\treturn message.ResentFrom.Mailboxes.FirstOrDefault ();\n\n\t\t\tif (message.Sender != null)\n\t\t\t\treturn message.Sender;\n\n\t\t\treturn message.From.Mailboxes.FirstOrDefault ();\n\t\t}\n\n\t\tstatic void AddUnique (List<MailboxAddress> recipients, HashSet<string> unique, IEnumerable<MailboxAddress> mailboxes)\n\t\t{\n\t\t\tforeach (var mailbox in mailboxes) {\n\t\t\t\tif (unique.Add (mailbox.Address))\n\t\t\t\t\trecipients.Add (mailbox);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<MailboxAddress> GetMessageRecipients (MimeMessage message)\n\t\t{\n\t\t\tvar unique = new HashSet<string> (StringComparer.OrdinalIgnoreCase);\n\t\t\tvar recipients = new List<MailboxAddress> ();\n\n\t\t\tif (message.ResentSender != null || message.ResentFrom.Count > 0) {\n\t\t\t\tAddUnique (recipients, unique, message.ResentTo.Mailboxes);\n\t\t\t\tAddUnique (recipients, unique, message.ResentCc.Mailboxes);\n\t\t\t\tAddUnique (recipients, unique, message.ResentBcc.Mailboxes);\n\t\t\t} else {\n\t\t\t\tAddUnique (recipients, unique, message.To.Mailboxes);\n\t\t\t\tAddUnique (recipients, unique, message.Cc.Mailboxes);\n\t\t\t\tAddUnique (recipients, unique, message.Bcc.Mailboxes);\n\t\t\t}\n\n\t\t\treturn recipients;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Invoked when the sender is accepted by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The default implementation does nothing.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t/// <param name=\"mailbox\">The mailbox used in the <c>MAIL FROM</c> command.</param>\n\t\t/// <param name=\"response\">The response to the <c>MAIL FROM</c> command.</param>\n\t\tprotected virtual void OnSenderAccepted (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Invoked when the sender is not accepted by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The default implementation throws an appropriate <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t/// <param name=\"mailbox\">The mailbox used in the <c>MAIL FROM</c> command.</param>\n\t\t/// <param name=\"response\">The response to the <c>MAIL FROM</c> command.</param>\n\t\tprotected virtual void OnSenderNotAccepted (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t{\n\t\t\tthrow new SmtpCommandException (SmtpErrorCode.SenderNotAccepted, response.StatusCode, mailbox, response.Response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the envelope identifier to be used with delivery status notifications.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>The envelope identifier, if non-empty, is useful in determining which message a delivery\n\t\t/// status notification was issued for.</para>\n\t\t/// <para>The envelope identifier should be unique and may be up to 100 characters in length, but\n\t\t/// must consist only of printable ASCII characters and no white space.</para>\n\t\t/// <para>For more information, see\n\t\t/// <a href=\"https://tools.ietf.org/html/rfc3461#section-4.4\">rfc3461, section 4.4</a>.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"DeliveryStatusNotification\"/>\n\t\t/// </example>\n\t\t/// <returns>The envelope identifier.</returns>\n\t\t/// <param name=\"message\">The message.</param>\n\t\tprotected virtual string? GetEnvelopeId (MimeMessage message)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set how much of the message to include in any failed delivery status notifications.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets how much of the message to include in any failed delivery status notifications.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"DeliveryStatusNotification\"/>\n\t\t/// </example>\n\t\t/// <value>A value indicating how much of the message to include in a failure delivery status notification.</value>\n\t\tpublic DeliveryStatusNotificationType DeliveryStatusNotificationType {\n\t\t\tget; set;\n\t\t}\n\n\t\tstatic void AppendHexEncoded (StringBuilder builder, string value)\n\t\t{\n\t\t\tint index = 0;\n\n\t\t\twhile (index < value.Length) {\n\t\t\t\tchar c = value[index];\n\n\t\t\t\tif (c < 33 || c > 126 || c == (byte) '+' || c == (byte) '=')\n\t\t\t\t\tbreak;\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tbuilder.Append (value, 0, index);\n\n\t\t\tif (index == value.Length)\n\t\t\t\treturn;\n\n\t\t\tint length = value.Length - index;\n\t\t\tvar buffer = ArrayPool<byte>.Shared.Rent (length * 3);\n\n\t\t\ttry {\n\t\t\t\tint n = Encoding.UTF8.GetBytes (value, index, length, buffer, 0);\n\t\t\t\tconst string HexAlphabet = \"0123456789ABCDEF\";\n\n\t\t\t\tfor (index = 0; index < n; index++) {\n\t\t\t\t\tbyte c = buffer[index];\n\n\t\t\t\t\tif (c >= 33 && c <= 126 && c != (byte) '+' && c != (byte) '=') {\n\t\t\t\t\t\tbuilder.Append ((char) c);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuilder.Append ('+');\n\t\t\t\t\t\tbuilder.Append (HexAlphabet[(c >> 4) & 0xF]);\n\t\t\t\t\t\tbuilder.Append (HexAlphabet[c & 0xF]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tArrayPool<byte>.Shared.Return (buffer);\n\t\t\t}\n\t\t}\n\n\t\t[Flags]\n\t\tenum SmtpExtensions\n\t\t{\n\t\t\tNone = 0,\n\t\t\tEightBitMime = 1 << 0,\n\t\t\tBinaryMime = 1 << 1,\n\t\t\tUTF8 = 1 << 2,\n\t\t}\n\n\t\tstring CreateMailFromCommand (FormatOptions options, MimeMessage message, MailboxAddress mailbox, SmtpExtensions extensions, long size)\n\t\t{\n\t\t\tvar idnEncode = (extensions & SmtpExtensions.UTF8) == 0;\n\t\t\tvar builder = new StringBuilder (\"MAIL FROM:<\");\n\n\t\t\tvar addrspec = mailbox.GetAddress (idnEncode);\n\t\t\tbuilder.Append (addrspec);\n\t\t\tbuilder.Append ('>');\n\n\t\t\tif (!idnEncode)\n\t\t\t\tbuilder.Append (\" SMTPUTF8\");\n\n\t\t\tif ((Capabilities & SmtpCapabilities.Size) != 0 && size != -1) {\n\t\t\t\tbuilder.Append (\" SIZE=\");\n\t\t\t\tbuilder.Append (size.ToString (CultureInfo.InvariantCulture));\n\t\t\t}\n\n\t\t\tif ((extensions & SmtpExtensions.BinaryMime) != 0)\n\t\t\t\tbuilder.Append (\" BODY=BINARYMIME\");\n\t\t\telse if ((extensions & SmtpExtensions.EightBitMime) != 0)\n\t\t\t\tbuilder.Append (\" BODY=8BITMIME\");\n\n\t\t\tif ((capabilities & SmtpCapabilities.Dsn) != 0) {\n\t\t\t\tvar envid = GetEnvelopeId (message);\n\n\t\t\t\tif (!string.IsNullOrEmpty (envid)) {\n\t\t\t\t\tbuilder.Append (\" ENVID=\");\n\t\t\t\t\tAppendHexEncoded (builder, envid!);\n\t\t\t\t}\n\n\t\t\t\tswitch (DeliveryStatusNotificationType) {\n\t\t\t\tcase DeliveryStatusNotificationType.HeadersOnly:\n\t\t\t\t\tbuilder.Append (\" RET=HDRS\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase DeliveryStatusNotificationType.Full:\n\t\t\t\t\tbuilder.Append (\" RET=FULL\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (RequireTLS && (Capabilities & SmtpCapabilities.RequireTLS) != 0) {\n\t\t\t\t// Check to see if the message has a TLS-Required header. If it does, then the only defined value it can have is \"No\".\n\t\t\t\tvar index = message.Headers.IndexOf (HeaderId.TLSRequired);\n\n\t\t\t\tif (index == -1)\n\t\t\t\t\tbuilder.Append (\" REQUIRETLS\");\n\t\t\t}\n\n\t\t\tbuilder.Append (\"\\r\\n\");\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tvoid ParseMailFromResponse (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t{\n\t\t\tif (response.StatusCode >= SmtpStatusCode.Ok && response.StatusCode < (SmtpStatusCode) 260) {\n\t\t\t\tOnSenderAccepted (message, mailbox, response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationRequired)\n\t\t\t\tthrow new ServiceNotAuthenticatedException (response.Response);\n\n\t\t\tOnSenderNotAccepted (message, mailbox, response);\n\t\t}\n\n\t\tvoid MailFrom (FormatOptions options, MimeMessage message, MailboxAddress mailbox, SmtpExtensions extensions, long size, bool pipeline, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = CreateMailFromCommand (options, message, mailbox, extensions, size);\n\n\t\t\tif (pipeline) {\n\t\t\t\tQueueCommand (SmtpCommand.MailFrom, command, cancellationToken);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar response = Stream!.SendCommand (command, cancellationToken);\n\n\t\t\tParseMailFromResponse (message, mailbox, response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Invoked when a recipient is accepted by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The default implementation does nothing.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t/// <param name=\"mailbox\">The mailbox used in the <c>RCPT TO</c> command.</param>\n\t\t/// <param name=\"response\">The response to the <c>RCPT TO</c> command.</param>\n\t\tprotected virtual void OnRecipientAccepted (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Invoked when a recipient is not accepted by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The default implementation throws an appropriate <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t/// <param name=\"mailbox\">The mailbox used in the <c>RCPT TO</c> command.</param>\n\t\t/// <param name=\"response\">The response to the <c>RCPT TO</c> command.</param>\n\t\tprotected virtual void OnRecipientNotAccepted (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t{\n\t\t\tthrow new SmtpCommandException (SmtpErrorCode.RecipientNotAccepted, response.StatusCode, mailbox, response.Response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the types of delivery status notification desired for the specified recipient mailbox.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the types of delivery status notification desired for the specified recipient mailbox.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"DeliveryStatusNotification\"/>\n\t\t/// </example>\n\t\t/// <returns>The desired delivery status notification type.</returns>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t/// <param name=\"mailbox\">The recipient mailbox.</param>\n\t\tprotected virtual DeliveryStatusNotification? GetDeliveryStatusNotifications (MimeMessage message, MailboxAddress mailbox)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the original intended recipient address and address type.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the original intended recipient address and address type for the purpose of delivery status notification.</para>\n\t\t/// <para>When initially submitting a message via SMTP, the address returned by this method MUST be identical to the <paramref name=\"mailbox\"/>\n\t\t/// address. Likewise, when a mailing list submits a message via SMTP to be distributed to the list subscribers, the address returned by\n\t\t/// this method MUST match the new RCPT TO address of each recipient, not the address specified by the original sender of the message.)</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message being sent.</param>\n\t\t/// <param name=\"mailbox\">The recipient mailbox.</param>\n\t\t/// <param name=\"addrType\">The original recipient address type.</param>\n\t\t/// <param name=\"address\">The original recipient address.</param>\n\t\tvoid GetOriginalRecipientAddress (MimeMessage message, MailboxAddress mailbox, out string addrType, out string address)\n\t\t{\n\t\t\tvar idnEncode = (Capabilities & SmtpCapabilities.UTF8) == 0;\n\n\t\t\taddrType = \"rfc822\";\n\t\t\taddress = mailbox.GetAddress (idnEncode);\n\t\t}\n\n\t\tstatic string GetNotifyString (DeliveryStatusNotification notify)\n\t\t{\n\t\t\tstring value = string.Empty;\n\n\t\t\tif (notify == DeliveryStatusNotification.Never)\n\t\t\t\treturn \"NEVER\";\n\n\t\t\tif ((notify & DeliveryStatusNotification.Success) != 0)\n\t\t\t\tvalue += \"SUCCESS,\";\n\n\t\t\tif ((notify & DeliveryStatusNotification.Failure) != 0)\n\t\t\t\tvalue += \"FAILURE,\";\n\n\t\t\tif ((notify & DeliveryStatusNotification.Delay) != 0)\n\t\t\t\tvalue += \"DELAY\";\n\n\t\t\treturn value.TrimEnd (',');\n\t\t}\n\n\t\tstring CreateRcptToCommand (FormatOptions options, MimeMessage message, MailboxAddress mailbox)\n\t\t{\n\t\t\tvar idnEncode = (Capabilities & SmtpCapabilities.UTF8) == 0;\n\t\t\tvar command = new StringBuilder (\"RCPT TO:<\");\n\n\t\t\tcommand.Append (mailbox.GetAddress (idnEncode));\n\t\t\tcommand.Append ('>');\n\n\t\t\tif ((capabilities & SmtpCapabilities.Dsn) != 0) {\n\t\t\t\tvar notify = GetDeliveryStatusNotifications (message, mailbox);\n\n\t\t\t\tif (notify.HasValue) {\n\t\t\t\t\tcommand.Append (\" NOTIFY=\");\n\t\t\t\t\tcommand.Append (GetNotifyString (notify.Value));\n\n\t\t\t\t\tGetOriginalRecipientAddress (message, mailbox, out var addrType, out var address);\n\t\t\t\t\tcommand.Append (\" ORCPT=\");\n\t\t\t\t\tcommand.Append (addrType);\n\t\t\t\t\tcommand.Append (';');\n\t\t\t\t\tAppendHexEncoded (command, address);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\n\t\t\treturn command.ToString ();\n\t\t}\n\n\t\tbool ParseRcptToResponse (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t{\n\t\t\tif (response.StatusCode < (SmtpStatusCode) 300) {\n\t\t\t\tOnRecipientAccepted (message, mailbox, response);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (response.StatusCode == SmtpStatusCode.AuthenticationRequired)\n\t\t\t\tthrow new ServiceNotAuthenticatedException (response.Response);\n\n\t\t\tOnRecipientNotAccepted (message, mailbox, response);\n\n\t\t\treturn false;\n\t\t}\n\n\t\tbool RcptTo (FormatOptions options, MimeMessage message, MailboxAddress mailbox, bool pipeline, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar command = CreateRcptToCommand (options, message, mailbox);\n\n\t\t\tif (pipeline) {\n\t\t\t\tQueueCommand (SmtpCommand.RcptTo, command, cancellationToken);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar response = Stream!.SendCommand (command, cancellationToken);\n\n\t\t\treturn ParseRcptToResponse (message, mailbox, response);\n\t\t}\n\n\t\tclass SendContext\n\t\t{\n\t\t\treadonly ITransferProgress progress;\n\t\t\treadonly long size;\n\t\t\tlong nwritten;\n\n\t\t\tpublic SendContext (ITransferProgress progress, long size)\n\t\t\t{\n\t\t\t\tthis.progress = progress;\n\t\t\t\tthis.size = size;\n\t\t\t}\n\n\t\t\tpublic void Update (int n)\n\t\t\t{\n\t\t\t\tnwritten += n;\n\n\t\t\t\tif (size != -1)\n\t\t\t\t\tprogress.Report (nwritten, size);\n\t\t\t\telse\n\t\t\t\t\tprogress.Report (nwritten);\n\t\t\t}\n\t\t}\n\n\t\tstring ParseBdatResponse (MimeMessage message, SmtpResponse response)\n\t\t{\n\t\t\tswitch (response.StatusCode) {\n\t\t\tdefault:\n\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.MessageNotAccepted, response.StatusCode, response.Response);\n\t\t\tcase SmtpStatusCode.AuthenticationRequired:\n\t\t\t\tthrow new ServiceNotAuthenticatedException (response.Response);\n\t\t\tcase SmtpStatusCode.Ok:\n\t\t\t\tOnMessageSent (new MessageSentEventArgs (message, response.Response));\n\t\t\t\treturn response.Response;\n\t\t\t}\n\t\t}\n\n\t\tstring Bdat (FormatOptions options, MimeMessage message, long size, CancellationToken cancellationToken, ITransferProgress? progress)\n\t\t{\n\t\t\tvar command = string.Format (CultureInfo.InvariantCulture, \"BDAT {0} LAST\\r\\n\", size);\n\n\t\t\tStream!.QueueCommand (command, cancellationToken);\n\n\t\t\tif (progress != null) {\n\t\t\t\tvar ctx = new SendContext (progress, size);\n\n\t\t\t\tusing (var stream = new ProgressStream (Stream, ctx.Update)) {\n\t\t\t\t\tmessage.WriteTo (options, stream, cancellationToken);\n\t\t\t\t\tstream.Flush (cancellationToken);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmessage.WriteTo (options, Stream, cancellationToken);\n\t\t\t\tStream.Flush (cancellationToken);\n\t\t\t}\n\n\t\t\tvar response = Stream.ReadResponse (cancellationToken);\n\n\t\t\treturn ParseBdatResponse (message, response);\n\t\t}\n\n\t\tstatic void ParseDataResponse (SmtpResponse response)\n\t\t{\n\t\t\tif (response.StatusCode != SmtpStatusCode.StartMailInput)\n\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\t\t}\n\n\t\tstring ParseMessageDataResponse (MimeMessage message, SmtpResponse response)\n\t\t{\n\t\t\tswitch (response.StatusCode) {\n\t\t\tdefault:\n\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.MessageNotAccepted, response.StatusCode, response.Response);\n\t\t\tcase SmtpStatusCode.AuthenticationRequired:\n\t\t\t\tthrow new ServiceNotAuthenticatedException (response.Response);\n\t\t\tcase SmtpStatusCode.Ok:\n\t\t\t\tOnMessageSent (new MessageSentEventArgs (message, response.Response));\n\t\t\t\treturn response.Response;\n\t\t\t}\n\t\t}\n\n\t\tstring MessageData (FormatOptions options, MimeMessage message, long size, CancellationToken cancellationToken, ITransferProgress? progress)\n\t\t{\n\t\t\tif (progress != null) {\n\t\t\t\tvar ctx = new SendContext (progress, size);\n\n\t\t\t\tusing (var stream = new ProgressStream (Stream!, ctx.Update)) {\n\t\t\t\t\tusing (var filtered = new FilteredStream (stream)) {\n\t\t\t\t\t\tfiltered.Add (new SmtpDataFilter ());\n\n\t\t\t\t\t\tmessage.WriteTo (options, filtered, cancellationToken);\n\t\t\t\t\t\tfiltered.Flush (cancellationToken);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tusing (var filtered = new FilteredStream (Stream!)) {\n\t\t\t\t\tfiltered.Add (new SmtpDataFilter ());\n\n\t\t\t\t\tmessage.WriteTo (options, filtered, cancellationToken);\n\t\t\t\t\tfiltered.Flush (cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tStream!.Write (EndData, 0, EndData.Length, cancellationToken);\n\t\t\tStream.Flush (cancellationToken);\n\n\t\t\tvar response = Stream.ReadResponse (cancellationToken);\n\n\t\t\treturn ParseMessageDataResponse (message, response);\n\t\t}\n\n\t\tvoid Reset (CancellationToken cancellationToken)\n\t\t{\n\t\t\tSmtpResponse response;\n\n\t\t\ttry {\n\t\t\t\tresponse = SendCommandInternal (\"RSET\\r\\n\", cancellationToken);\n\t\t\t} catch {\n\t\t\t\t// Swallow RSET exceptions so that we do not obscure the exception that caused the need for the RSET command in the first place.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\tDisconnect (uri!.Host, uri.Port, GetSecureSocketOptions (uri), false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Prepare the message for transport with the specified constraints.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Prepares the message for transport with the specified constraints.</para>\n\t\t/// <para>Typically, this involves calling <see cref=\"MimeMessage.Prepare(EncodingConstraint, int)\"/> on\n\t\t/// the message with the provided constraints.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"options\">The format options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"constraint\">The encoding constraint.</param>\n\t\t/// <param name=\"maxLineLength\">The max line length supported by the server.</param>\n\t\tprotected virtual void Prepare (FormatOptions options, MimeMessage message, EncodingConstraint constraint, int maxLineLength)\n\t\t{\n\t\t\tif (!message.Headers.Contains (HeaderId.DomainKeySignature) &&\n\t\t\t\t!message.Headers.Contains (HeaderId.DkimSignature) &&\n\t\t\t\t!message.Headers.Contains (HeaderId.ArcSeal)) {\n\t\t\t\t// prepare the message\n\t\t\t\tmessage.Prepare (constraint, maxLineLength);\n\t\t\t} else {\n\t\t\t\t// Note: we do not want to risk reformatting of headers to the international\n\t\t\t\t// UTF-8 encoding, so disable it.\n\t\t\t\toptions.International = false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the size of the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Calculates the size of the message in bytes.</para>\n\t\t/// <para>This method is called by <a href=\"Overload_MailKit_MailTransport_Send.htm\">Send</a>\n\t\t/// methods in the following conditions:</para>\n\t\t/// <list type=\"bullet\">\n\t\t/// <item>The SMTP server supports the <c>SIZE=</c> parameter in the <c>MAIL FROM</c> command.</item>\n\t\t/// <item>The <see cref=\"ITransferProgress\"/> parameter is non-null.</item>\n\t\t/// <item>The SMTP server supports the <c>CHUNKING</c> extension.</item>\n\t\t/// </list>\n\t\t/// </remarks>\n\t\t/// <returns>The size of the message, in bytes.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tprotected virtual long GetSize (FormatOptions options, MimeMessage message, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var measure = new MeasuringStream ()) {\n\t\t\t\tmessage.WriteTo (options, measure, cancellationToken);\n\n\t\t\t\treturn measure.Length;\n\t\t\t}\n\t\t}\n\n\t\t[MemberNotNull (nameof (Stream), nameof (uri))]\n\t\tFormatOptions Prepare (FormatOptions options, MimeMessage message, MailboxAddress sender, IList<MailboxAddress> recipients, out SmtpExtensions extensions)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient is not connected.\");\n\n\t\t\tvar format = options.Clone ();\n\t\t\tformat.NewLineFormat = NewLineFormat.Dos;\n\t\t\tformat.EnsureNewLine = true;\n\n\t\t\tif (format.International && (Capabilities & SmtpCapabilities.UTF8) == 0)\n\t\t\t\tformat.International = false;\n\n\t\t\tif (format.International && (Capabilities & SmtpCapabilities.EightBitMime) == 0)\n\t\t\t\tthrow new NotSupportedException (\"The SMTP server does not support the 8BITMIME extension.\");\n\n\t\t\tEncodingConstraint constraint;\n\n\t\t\tif ((Capabilities & SmtpCapabilities.BinaryMime) != 0)\n\t\t\t\tconstraint = EncodingConstraint.None;\n\t\t\telse if ((Capabilities & SmtpCapabilities.EightBitMime) != 0)\n\t\t\t\tconstraint = EncodingConstraint.EightBit;\n\t\t\telse\n\t\t\t\tconstraint = EncodingConstraint.SevenBit;\n\n\t\t\tPrepare (format, message, constraint, MaxLineLength);\n\n\t\t\t// figure out which SMTP extensions we need to use\n\t\t\textensions = SmtpExtensions.None;\n\n\t\t\tusing (var iter = new MimeIterator (message)) {\n\t\t\t\twhile (iter.MoveNext ()) {\n\t\t\t\t\tif (iter.Current is MimePart part) {\n\t\t\t\t\t\tif (part.ContentTransferEncoding == ContentEncoding.EightBit) {\n\t\t\t\t\t\t\tif ((capabilities & SmtpCapabilities.EightBitMime) != 0) {\n\t\t\t\t\t\t\t\textensions |= SmtpExtensions.EightBitMime;\n\n\t\t\t\t\t\t\t\tif ((capabilities & SmtpCapabilities.BinaryMime) == 0) {\n\t\t\t\t\t\t\t\t\t// BINARYMIME is not supported, so there's no sense in continuing to scan more MimeParts.\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (part.ContentTransferEncoding == ContentEncoding.Binary) {\n\t\t\t\t\t\t\tif ((capabilities & SmtpCapabilities.BinaryMime) != 0) {\n\t\t\t\t\t\t\t\t// Once we've decided we require BINARYMIME, no sense continuing to check for 8BITMIME.\n\t\t\t\t\t\t\t\textensions |= SmtpExtensions.BinaryMime;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((Capabilities & SmtpCapabilities.UTF8) != 0 && (format.International || sender.IsInternational || recipients.Any (x => x.IsInternational)))\n\t\t\t\textensions |= SmtpExtensions.UTF8;\n\n\t\t\treturn format;\n\t\t}\n\n\t\t[MethodImpl (MethodImplOptions.AggressiveInlining)]\n\t\tbool UseBdatCommand (SmtpExtensions extensions)\n\t\t{\n\t\t\treturn (extensions & SmtpExtensions.BinaryMime) != 0 || (PreferSendAsBinaryData && (Capabilities & (SmtpCapabilities.BinaryMime | SmtpCapabilities.Chunking)) != 0);\n\t\t}\n\n\t\tstring Send (FormatOptions options, MimeMessage message, MailboxAddress sender, IList<MailboxAddress> recipients, CancellationToken cancellationToken, ITransferProgress? progress)\n\t\t{\n\t\t\tvar format = Prepare (options, message, sender, recipients, out var extensions);\n\t\t\tvar pipeline = (capabilities & SmtpCapabilities.Pipelining) != 0;\n\t\t\tvar bdat = UseBdatCommand (extensions);\n\t\t\tlong size;\n\n\t\t\tif (bdat || (Capabilities & SmtpCapabilities.Size) != 0 || progress != null) {\n\t\t\t\tsize = GetSize (format, message, cancellationToken);\n\t\t\t} else {\n\t\t\t\tsize = -1;\n\t\t\t}\n\n\t\t\tusing var operation = StartNetworkOperation (NetworkOperationKind.Send);\n\n\t\t\ttry {\n\t\t\t\t// Note: if PIPELINING is supported, MailFrom() and RcptTo() will\n\t\t\t\t// queue their commands instead of sending them immediately.\n\t\t\t\tMailFrom (format, message, sender, extensions, size, pipeline, cancellationToken);\n\n\t\t\t\tint recipientsAccepted = 0;\n\t\t\t\tfor (int i = 0; i < recipients.Count; i++) {\n\t\t\t\t\tif (RcptTo (format, message, recipients[i], pipeline, cancellationToken))\n\t\t\t\t\t\trecipientsAccepted++;\n\t\t\t\t}\n\n\t\t\t\tif (queued.Count > 0) {\n\t\t\t\t\t// Note: if PIPELINING is supported, this will flush all outstanding\n\t\t\t\t\t// MAIL FROM and RCPT TO commands to the server and then process\n\t\t\t\t\t// all of their responses.\n\t\t\t\t\tvar results = FlushCommandQueue (message, sender, recipients, cancellationToken);\n\n\t\t\t\t\trecipientsAccepted = results.RecipientsAccepted;\n\n\t\t\t\t\tif (results.FirstException != null)\n\t\t\t\t\t\tthrow results.FirstException;\n\t\t\t\t}\n\n\t\t\t\tif (recipientsAccepted == 0) {\n\t\t\t\t\tOnNoRecipientsAccepted (message);\n\t\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.MessageNotAccepted, SmtpStatusCode.TransactionFailed, \"No recipients were accepted.\");\n\t\t\t\t}\n\n\t\t\t\tif (bdat)\n\t\t\t\t\treturn Bdat (format, message, size, cancellationToken, progress);\n\n\t\t\t\tvar dataResponse = Stream.SendCommand (\"DATA\\r\\n\", cancellationToken);\n\n\t\t\t\tParseDataResponse (dataResponse);\n\n\t\t\t\treturn MessageData (format, message, size, cancellationToken, progress);\n\t\t\t} catch (ServiceNotAuthenticatedException ex) {\n\t\t\t\toperation.SetError (ex);\n\n\t\t\t\t// do not disconnect\n\t\t\t\tReset (cancellationToken);\n\t\t\t\tthrow;\n\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\toperation.SetError (ex);\n\n\t\t\t\t// do not disconnect\n\t\t\t\tReset (cancellationToken);\n\t\t\t\tthrow;\n\t\t\t} catch (Exception ex) {\n\t\t\t\toperation.SetError (ex);\n\n\t\t\t\tDisconnect (uri.Host, uri.Port, GetSecureSocketOptions (uri), false);\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\tstatic void ValidateArguments (FormatOptions options, MimeMessage message, out MailboxAddress sender, out IList<MailboxAddress> recipients)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tvar mailbox = GetMessageSender (message);\n\n\t\t\tif (mailbox == null)\n\t\t\t\tthrow new InvalidOperationException (\"No sender has been specified.\");\n\n\t\t\tsender = mailbox;\n\t\t\trecipients = GetMessageRecipients (message);\n\n\t\t\tif (recipients.Count == 0)\n\t\t\t\tthrow new InvalidOperationException (\"No recipients have been specified.\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send the specified message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Sends the specified message.</para>\n\t\t/// <para>The sender address is determined by checking the following\n\t\t/// message headers (in order of precedence): Resent-Sender,\n\t\t/// Resent-From, Sender, and From.</para>\n\t\t/// <para>If either the Resent-Sender or Resent-From addresses are present,\n\t\t/// the recipients are collected from the Resent-To, Resent-Cc, and\n\t\t/// Resent-Bcc headers, otherwise the To, Cc, and Bcc headers are used.</para>\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SendMessageWithOptions\"/>\n\t\t/// </example>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic override string Send (FormatOptions options, MimeMessage message, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tValidateArguments (options, message, out var sender, out var recipients);\n\n\t\t\treturn Send (options, message, sender, recipients, cancellationToken, progress);\n\t\t}\n\n\t\tstatic List<MailboxAddress> ValidateArguments (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients)\n\t\t{\n\t\t\tif (options == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (options));\n\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tif (sender == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (sender));\n\n\t\t\tif (recipients == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (recipients));\n\n\t\t\tvar unique = new HashSet<string> (StringComparer.OrdinalIgnoreCase);\n\t\t\tvar rcpts = new List<MailboxAddress> ();\n\n\t\t\tAddUnique (rcpts, unique, recipients);\n\n\t\t\tif (rcpts.Count == 0)\n\t\t\t\tthrow new InvalidOperationException (\"No recipients have been specified.\");\n\n\t\t\treturn rcpts;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send the specified message using the supplied sender and recipients.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends the message by uploading it to an SMTP server using the supplied sender and recipients.\n\t\t/// </remarks>\n\t\t/// <returns>The final free-form text response from the server.</returns>\n\t\t/// <param name=\"options\">The formatting options.</param>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"sender\">The mailbox address to use for sending the message.</param>\n\t\t/// <param name=\"recipients\">The mailbox addresses that should receive the message.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <param name=\"progress\">The progress reporting mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"options\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"sender\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"recipients\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before sending a message.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// <para>A sender has not been specified.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No recipients have been specified.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// Internationalized formatting was requested but is not supported by the server.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic override string Send (FormatOptions options, MimeMessage message, MailboxAddress sender, IEnumerable<MailboxAddress> recipients, CancellationToken cancellationToken = default, ITransferProgress? progress = null)\n\t\t{\n\t\t\tvar rcpts = ValidateArguments (options, message, sender, recipients);\n\n\t\t\treturn Send (options, message, sender, rcpts, cancellationToken, progress);\n\t\t}\n\n\t\t#endregion\n\n\t\tstring CreateExpandCommand (string alias)\n\t\t{\n\t\t\tif (alias == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (alias));\n\n\t\t\tif (alias.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The alias cannot be empty.\", nameof (alias));\n\n\t\t\tif (alias.IndexOfAny (NewLineCharacters) != -1)\n\t\t\t\tthrow new ArgumentException (\"The alias cannot contain newline characters.\", nameof (alias));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient is not connected.\");\n\n\t\t\treturn string.Format (\"EXPN {0}\\r\\n\", alias);\n\t\t}\n\n\t\tstatic InternetAddressList ParseExpandResponse (SmtpResponse response)\n\t\t{\n\t\t\tif (response.StatusCode != SmtpStatusCode.Ok)\n\t\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\n\t\t\tvar lines = response.Response.Split ('\\n');\n\t\t\tvar list = new InternetAddressList ();\n\n\t\t\tfor (int i = 0; i < lines.Length; i++) {\n\t\t\t\tif (InternetAddress.TryParse (lines[i], out var address))\n\t\t\t\t\tlist.Add (address);\n\t\t\t}\n\n\t\t\treturn list;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Expand a mailing address alias.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Expands a mailing address alias.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExpandAlias\"/>\n\t\t/// </example>\n\t\t/// <returns>The expanded list of mailbox addresses.</returns>\n\t\t/// <param name=\"alias\">The mailing address alias.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"alias\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"alias\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before expanding an alias.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic InternetAddressList Expand (string alias, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar response = SendCommandInternal (CreateExpandCommand (alias), cancellationToken);\n\n\t\t\treturn ParseExpandResponse (response);\n\t\t}\n\n\t\tstring CreateVerifyCommand (string address)\n\t\t{\n\t\t\tif (address == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (address));\n\n\t\t\tif (address.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The address cannot be empty.\", nameof (address));\n\n\t\t\tif (address.IndexOfAny (NewLineCharacters) != -1)\n\t\t\t\tthrow new ArgumentException (\"The address cannot contain newline characters.\", nameof (address));\n\n\t\t\tCheckDisposed ();\n\n\t\t\tif (!IsConnected)\n\t\t\t\tthrow new ServiceNotConnectedException (\"The SmtpClient is not connected.\");\n\n\t\t\treturn string.Format (\"VRFY {0}\\r\\n\", address);\n\t\t}\n\n\t\tstatic MailboxAddress ParseVerifyResponse (SmtpResponse response)\n\t\t{\n\t\t\tif (response.StatusCode == SmtpStatusCode.Ok)\n\t\t\t\treturn MailboxAddress.Parse (response.Response);\n\n\t\t\tthrow new SmtpCommandException (SmtpErrorCode.UnexpectedStatusCode, response.StatusCode, response.Response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Verify the existence of a mailbox address.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Verifies the existence a mailbox address with the SMTP server, returning the expanded\n\t\t/// mailbox address if it exists.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"VerifyAddress\"/>\n\t\t/// </example>\n\t\t/// <returns>The expanded mailbox address.</returns>\n\t\t/// <param name=\"address\">The mailbox address.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"address\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"address\"/> is an empty string.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotConnectedException\">\n\t\t/// The <see cref=\"SmtpClient\"/> is not connected.\n\t\t/// </exception>\n\t\t/// <exception cref=\"ServiceNotAuthenticatedException\">\n\t\t/// Authentication is required before verifying the existence of an address.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation has been canceled.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpCommandException\">\n\t\t/// The SMTP command failed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol exception occurred.\n\t\t/// </exception>\n\t\tpublic MailboxAddress Verify (string address, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tvar response = SendCommandInternal (CreateVerifyCommand (address), cancellationToken);\n\n\t\t\treturn ParseVerifyResponse (response);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"SmtpClient\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"SmtpClient\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tdisposed = true;\n\t\t\t\tDisconnect (null, 0, SecureSocketOptions.None, false);\n\t\t\t}\n\n\t\t\tbase.Dispose (disposed);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpCommandException.cs",
    "content": "﻿//\n// SmtpCommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nusing MimeKit;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An SMTP protocol exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when an SMTP command fails. Unlike a <see cref=\"SmtpProtocolException\"/>,\n\t/// a <see cref=\"SmtpCommandException\"/> does not require the <see cref=\"SmtpClient\"/> to be reconnected.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t/// </example>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class SmtpCommandException : CommandException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpCommandException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected SmtpCommandException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tvar value = info.GetString (\"Mailbox\");\n\n\t\t\tif (!string.IsNullOrEmpty (value) && MailboxAddress.TryParse (value, out var mailbox))\n\t\t\t\tMailbox = mailbox;\n\n\t\t\tErrorCode = (SmtpErrorCode) info.GetValue (\"ErrorCode\", typeof (SmtpErrorCode));\n\t\t\tStatusCode = (SmtpStatusCode) info.GetValue (\"StatusCode\", typeof (SmtpStatusCode));\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"code\">The error code.</param>\n\t\t/// <param name=\"status\">The status code.</param>\n\t\t/// <param name=\"mailbox\">The rejected mailbox.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\tpublic SmtpCommandException (SmtpErrorCode code, SmtpStatusCode status, MailboxAddress mailbox, string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tStatusCode = status;\n\t\t\tMailbox = mailbox;\n\t\t\tErrorCode = code;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"code\">The error code.</param>\n\t\t/// <param name=\"status\">The status code.</param>\n\t\t/// <param name=\"mailbox\">The rejected mailbox.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic SmtpCommandException (SmtpErrorCode code, SmtpStatusCode status, MailboxAddress mailbox, string message) : base (message)\n\t\t{\n\t\t\tStatusCode = status;\n\t\t\tMailbox = mailbox;\n\t\t\tErrorCode = code;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"code\">The error code.</param>\n\t\t/// <param name=\"status\">The status code.</param>>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\tpublic SmtpCommandException (SmtpErrorCode code, SmtpStatusCode status, string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tStatusCode = status;\n\t\t\tErrorCode = code;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpCommandException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"code\">The error code.</param>\n\t\t/// <param name=\"status\">The status code.</param>>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic SmtpCommandException (SmtpErrorCode code, SmtpStatusCode status, string message) : base (message)\n\t\t{\n\t\t\tStatusCode = status;\n\t\t\tErrorCode = code;\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serializes the state of the <see cref=\"SmtpCommandException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecurityCritical]\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tif (Mailbox != null)\n\t\t\t\tinfo.AddValue (\"Mailbox\", Mailbox.ToString ());\n\t\t\telse\n\t\t\t\tinfo.AddValue (\"Mailbox\", string.Empty);\n\n\t\t\tinfo.AddValue (\"ErrorCode\", ErrorCode, typeof (SmtpErrorCode));\n\t\t\tinfo.AddValue (\"StatusCode\", StatusCode, typeof (SmtpStatusCode));\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Get the error code which may provide additional information.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The error code can be used to programmatically deal with the\n\t\t/// exception without necessarily needing to display the raw\n\t\t/// exception message to the user.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t\t/// </example>\n\t\t/// <value>The status code.</value>\n\t\tpublic SmtpErrorCode ErrorCode {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the mailbox that the error occurred on.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This property will only be available when the <see cref=\"ErrorCode\"/>\n\t\t/// value is either <see cref=\"SmtpErrorCode.SenderNotAccepted\"/> or\n\t\t/// <see cref=\"SmtpErrorCode.RecipientNotAccepted\"/> and may be used\n\t\t/// to help the user decide how to proceed.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t\t/// </example>\n\t\t/// <value>The mailbox.</value>\n\t\tpublic MailboxAddress? Mailbox {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the status code returned by the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The raw SMTP status code that resulted in the <see cref=\"SmtpCommandException\"/>\n\t\t/// being thrown.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t\t/// </example>\n\t\t/// <value>The status code.</value>\n\t\tpublic SmtpStatusCode StatusCode {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpDataFilter.cs",
    "content": "﻿//\n// SmtpDataFilter.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit.IO.Filters;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An SMTP filter designed to format a message stream for the DATA command.\n\t/// </summary>\n\t/// <remarks>\n\t/// A special stream filter that can encode or decode lines beginning with a '.' as\n\t/// needed when sending/receiving a message via the SMTP protocol or when saving a\n\t/// message to an IIS message pickup directory.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SaveToPickupDirectory\"/>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"LoadFromPickupDirectory\"/>\n\t/// </example>\n\tpublic class SmtpDataFilter : MimeFilterBase\n\t{\n\t\treadonly bool decode;\n\t\tbool bol;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpDataFilter\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpDataFilter\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"decode\"><see langword=\"true\" /> if the filter should decode the content; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"SaveToPickupDirectory\"/>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"LoadFromPickupDirectory\"/>\n\t\t/// </example>\n\t\tpublic SmtpDataFilter (bool decode = false)\n\t\t{\n\t\t\tthis.decode = decode;\n\t\t\tbol = true;\n\t\t}\n\n\t\tbyte[] Encode (byte[] input, int startIndex, int length, out int outputIndex, out int outputLength, bool flush)\n\t\t{\n\t\t\tint inputEnd = startIndex + length;\n\t\t\tbool escape = bol;\n\t\t\tint ndots = 0;\n\t\t\tint crlf = 0;\n\n\t\t\tfor (int i = startIndex; i < inputEnd; i++) {\n\t\t\t\tbyte c = input[i];\n\n\t\t\t\tif (c == (byte) '.' && escape) {\n\t\t\t\t\tescape = false;\n\t\t\t\t\tndots++;\n\t\t\t\t} else {\n\t\t\t\t\tescape = c == (byte) '\\n';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (flush && !escape)\n\t\t\t\tcrlf = 2;\n\n\t\t\tif (ndots + crlf == 0) {\n\t\t\t\toutputIndex = startIndex;\n\t\t\t\toutputLength = length;\n\t\t\t\tbol = escape;\n\t\t\t\treturn input;\n\t\t\t}\n\n\t\t\tEnsureOutputSize (length + ndots + crlf, false);\n\t\t\tint index = 0;\n\n\t\t\tfor (int i = startIndex; i < inputEnd; i++) {\n\t\t\t\tbyte c = input[i];\n\n\t\t\t\tif (c == (byte) '.' && bol) {\n\t\t\t\t\tOutputBuffer[index++] = (byte) '.';\n\t\t\t\t\tbol = false;\n\t\t\t\t} else {\n\t\t\t\t\tbol = c == (byte) '\\n';\n\t\t\t\t}\n\n\t\t\t\tOutputBuffer[index++] = c;\n\t\t\t}\n\n\t\t\tif (crlf > 0) {\n\t\t\t\tOutputBuffer[index++] = (byte) '\\r';\n\t\t\t\tOutputBuffer[index++] = (byte) '\\n';\n\t\t\t}\n\n\t\t\toutputLength = index;\n\t\t\toutputIndex = 0;\n\n\t\t\treturn OutputBuffer;\n\t\t}\n\n\t\tbyte[] Decode (byte[] input, int startIndex, int length, out int outputIndex, out int outputLength, bool flush)\n\t\t{\n\t\t\tint inputEnd = startIndex + length;\n\t\t\tint index = startIndex;\n\n\t\t\tEnsureOutputSize (length, false);\n\t\t\toutputLength = 0;\n\t\t\toutputIndex = 0;\n\n\t\t\twhile (index < inputEnd) {\n\t\t\t\tbyte c = input[index++];\n\n\t\t\t\tif (bol && c == (byte) '.') {\n\t\t\t\t\tbol = false;\n\t\t\t\t} else {\n\t\t\t\t\tOutputBuffer[outputLength++] = c;\n\t\t\t\t\tbol = c == (byte) '\\n';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn OutputBuffer;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Filter the specified input.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Filters the specified input buffer starting at the given index,\n\t\t/// spanning across the specified number of bytes.\n\t\t/// </remarks>\n\t\t/// <returns>The filtered output.</returns>\n\t\t/// <param name=\"input\">The input buffer.</param>\n\t\t/// <param name=\"startIndex\">The starting index of the input buffer.</param>\n\t\t/// <param name=\"length\">The length of the input buffer, starting at <paramref name=\"startIndex\"/>.</param>\n\t\t/// <param name=\"outputIndex\">The output index.</param>\n\t\t/// <param name=\"outputLength\">The output length.</param>\n\t\t/// <param name=\"flush\">If set to <see langword=\"true\" />, all internally buffered data should be flushed to the output buffer.</param>\n\t\tprotected override byte[] Filter (byte[] input, int startIndex, int length, out int outputIndex, out int outputLength, bool flush)\n\t\t{\n\t\t\tif (decode)\n\t\t\t\treturn Decode (input, startIndex, length, out outputIndex, out outputLength, flush);\n\n\t\t\treturn Encode (input, startIndex, length, out outputIndex, out outputLength, flush);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the filter.\n\t\t/// </remarks>\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tbase.Reset ();\n\t\t\tbol = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpErrorCode.cs",
    "content": "﻿//\n// SmtpErrorCode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An enumeration of the possible error codes that may be reported by a <see cref=\"SmtpCommandException\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of the possible error codes that may be reported by a <see cref=\"SmtpCommandException\"/>.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t/// </example>\n\tpublic enum SmtpErrorCode\n\t{\n\t\t/// <summary>\n\t\t/// The message was not accepted for delivery. This may happen if\n\t\t/// the server runs out of available disk space.\n\t\t/// </summary>\n\t\tMessageNotAccepted,\n\n\t\t/// <summary>\n\t\t/// The sender's mailbox address was not accepted. Check the\n\t\t/// <see cref=\"SmtpCommandException.Mailbox\"/> property for the\n\t\t/// mailbox used as the sender's mailbox address.\n\t\t/// </summary>\n\t\tSenderNotAccepted,\n\n\t\t/// <summary>\n\t\t/// A recipient's mailbox address was not accepted. Check the\n\t\t/// <see cref=\"SmtpCommandException.Mailbox\"/> property for the\n\t\t/// particular recipient mailbox that was not accepted.\n\t\t/// </summary>\n\t\tRecipientNotAccepted,\n\n\t\t/// <summary>\n\t\t/// An unexpected status code was returned by the server.\n\t\t/// For more details, the <see cref=\"Exception.Message\"/>\n\t\t/// property may provide some additional hints.\n\t\t/// </summary>\n\t\tUnexpectedStatusCode,\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpProtocolException.cs",
    "content": "﻿//\n// SmtpProtocolException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An SMTP protocol exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when there is an error communicating with an SMTP server. An\n\t/// <see cref=\"SmtpProtocolException\"/> is typically fatal and requires the <see cref=\"SmtpClient\"/>\n\t/// to be reconnected.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ExceptionHandling\"/>\n\t/// </example>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class SmtpProtocolException : ProtocolException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpProtocolException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected SmtpProtocolException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\tpublic SmtpProtocolException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic SmtpProtocolException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpProtocolException\"/>.\n\t\t/// </remarks>\n\t\tpublic SmtpProtocolException ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpResponse.cs",
    "content": "﻿//\n// SmtpResponse.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An SMTP command response.\n\t/// </summary>\n\t/// <remarks>\n\t/// An SMTP command response.\n\t/// </remarks>\n\tpublic class SmtpResponse\n\t{\n\t\t/// <summary>\n\t\t/// Get the status code.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the status code.\n\t\t/// </remarks>\n\t\t/// <value>The status code.</value>\n\t\tpublic SmtpStatusCode StatusCode { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Get the response text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the response text.\n\t\t/// </remarks>\n\t\t/// <value>The response text.</value>\n\t\tpublic string Response { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpResponse\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpResponse\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"code\">The status code.</param>\n\t\t/// <param name=\"response\">The response text.</param>\n\t\tpublic SmtpResponse (SmtpStatusCode code, string response)\n\t\t{\n\t\t\tStatusCode = code;\n\t\t\tResponse = response;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpStatusCode.cs",
    "content": "﻿//\n// SmtpStatusCode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// An enumeration of possible SMTP status codes.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of possible SMTP status codes.\n\t/// </remarks>\n\tpublic enum SmtpStatusCode {\n\t\t/// <summary>\n\t\t/// The \"system status\" status code.\n\t\t/// </summary>\n\t\tSystemStatus = 211,\n\n\t\t/// <summary>\n\t\t/// The \"help\" status code.\n\t\t/// </summary>\n\t\tHelpMessage = 214,\n\n\t\t/// <summary>\n\t\t/// The \"service ready\" status code.\n\t\t/// </summary>\n\t\tServiceReady = 220,\n\n\t\t/// <summary>\n\t\t/// The \"service closing transmission channel\" status code.\n\t\t/// </summary>\n\t\tServiceClosingTransmissionChannel = 221,\n\n\t\t/// <summary>\n\t\t/// The \"authentication successful\" status code.\n\t\t/// </summary>\n\t\tAuthenticationSuccessful = 235,\n\n\t\t/// <summary>\n\t\t/// The general purpose \"OK\" status code.\n\t\t/// </summary>\n\t\tOk = 250,\n\n\t\t/// <summary>\n\t\t/// The \"User not local; will forward\" status code.\n\t\t/// </summary>\n\t\tUserNotLocalWillForward = 251,\n\n\t\t/// <summary>\n\t\t/// The \"cannot verify user; will attempt delivery\" status code.\n\t\t/// </summary>\n\t\tCannotVerifyUserWillAttemptDelivery = 252,\n\n\t\t/// <summary>\n\t\t/// The \"authentication challenge\" status code.\n\t\t/// </summary>\n\t\tAuthenticationChallenge = 334,\n\n\t\t/// <summary>\n\t\t/// The \"start mail input\" status code.\n\t\t/// </summary>\n\t\tStartMailInput = 354,\n\n\t\t/// <summary>\n\t\t/// The \"service not available\" status code.\n\t\t/// </summary>\n\t\tServiceNotAvailable = 421,\n\n\t\t/// <summary>\n\t\t/// The \"password transition needed\" status code.\n\t\t/// </summary>\n\t\tPasswordTransitionNeeded = 432,\n\n\t\t/// <summary>\n\t\t/// The \"mailbox busy\" status code.\n\t\t/// </summary>\n\t\tMailboxBusy = 450,\n\n\t\t/// <summary>\n\t\t/// The \"error in processing\" status code.\n\t\t/// </summary>\n\t\tErrorInProcessing = 451,\n\n\t\t/// <summary>\n\t\t/// The \"insufficient storage\" status code.\n\t\t/// </summary>\n\t\tInsufficientStorage = 452,\n\n\t\t/// <summary>\n\t\t/// The \"temporary authentication failure\" status code.\n\t\t/// </summary>\n\t\tTemporaryAuthenticationFailure = 454,\n\n\t\t/// <summary>\n\t\t/// The \"command unrecognized\" status code.\n\t\t/// </summary>\n\t\tCommandUnrecognized = 500,\n\n\t\t/// <summary>\n\t\t/// The \"syntax error\" status code.\n\t\t/// </summary>\n\t\tSyntaxError = 501,\n\n\t\t/// <summary>\n\t\t/// The \"command not implemented\" status code.\n\t\t/// </summary>\n\t\tCommandNotImplemented = 502,\n\n\t\t/// <summary>\n\t\t/// The \"bad command sequence\" status code.\n\t\t/// </summary>\n\t\tBadCommandSequence = 503,\n\n\t\t/// <summary>\n\t\t/// The \"command parameter not implemented\" status code.\n\t\t/// </summary>\n\t\tCommandParameterNotImplemented = 504,\n\n\t\t/// <summary>\n\t\t/// The \"authentication required\" status code.\n\t\t/// </summary>\n\t\tAuthenticationRequired = 530,\n\n\t\t/// <summary>\n\t\t/// The \"authentication mechanism too weak\" status code.\n\t\t/// </summary>\n\t\tAuthenticationMechanismTooWeak = 534,\n\n\t\t/// <summary>\n\t\t/// The \"authentication invalid credentials\" status code.\n\t\t/// </summary>\n\t\tAuthenticationInvalidCredentials = 535,\n\n\t\t/// <summary>\n\t\t/// The \"encryption required for authentication mechanism\" status code.\n\t\t/// </summary>\n\t\tEncryptionRequiredForAuthenticationMechanism = 538,\n\n\t\t/// <summary>\n\t\t/// The \"mailbox unavailable\" status code.\n\t\t/// </summary>\n\t\tMailboxUnavailable = 550,\n\n\t\t/// <summary>\n\t\t/// The \"user not local try alternate path\" status code.\n\t\t/// </summary>\n\t\tUserNotLocalTryAlternatePath = 551,\n\n\t\t/// <summary>\n\t\t/// The \"exceeded storage allocation\" status code.\n\t\t/// </summary>\n\t\tExceededStorageAllocation = 552,\n\n\t\t/// <summary>\n\t\t/// The \"mailbox name not allowed\" status code.\n\t\t/// </summary>\n\t\tMailboxNameNotAllowed = 553,\n\n\t\t/// <summary>\n\t\t/// The \"transaction failed\" status code.\n\t\t/// </summary>\n\t\tTransactionFailed = 554,\n\n\t\t/// <summary>\n\t\t/// The \"mail from/rcpt to parameters not recognized or not implemented\" status code.\n\t\t/// </summary>\n\t\tMailFromOrRcptToParametersNotRecognizedOrNotImplemented = 555,\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/Smtp/SmtpStream.cs",
    "content": "﻿//\n// SmtpStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Threading.Tasks;\n\nusing MimeKit.IO;\n\nusing Buffer = System.Buffer;\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace MailKit.Net.Smtp {\n\t/// <summary>\n\t/// A stream for communicating with an SMTP server.\n\t/// </summary>\n\t/// <remarks>\n\t/// A stream capable of reading SMTP server responses.\n\t/// </remarks>\n\tclass SmtpStream : Stream, ICancellableStream\n\t{\n\t\tconst int BlockSize = 4096;\n\t\tconst int PadSize = 4;\n\n\t\t// I/O buffering\n\t\treadonly byte[] input = new byte[BlockSize + PadSize];\n\t\treadonly byte[] output = new byte[BlockSize];\n\t\tint outputIndex;\n\n\t\treadonly IProtocolLogger logger;\n\t\tint inputIndex, inputEnd;\n\t\tstring? lastResponse;\n\t\tbool disposed;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Net.Smtp.SmtpStream\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SmtpStream\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"source\">The underlying network stream.</param>\n\t\t/// <param name=\"protocolLogger\">The protocol logger.</param>\n\t\tpublic SmtpStream (Stream source, IProtocolLogger protocolLogger)\n\t\t{\n\t\t\tlogger = protocolLogger;\n\t\t\tIsConnected = true;\n\t\t\tStream = source;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or sets the underlying network stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the underlying network stream.\n\t\t/// </remarks>\n\t\t/// <value>The underlying network stream.</value>\n\t\tpublic Stream Stream {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the stream is connected.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the stream is connected.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream is connected; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsConnected {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports reading.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports reading.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports reading; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanRead {\n\t\t\tget { return Stream.CanRead; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports writing.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports writing.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports writing; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanWrite {\n\t\t\tget { return Stream.CanWrite; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports seeking.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports seeking.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports seeking; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether the stream supports I/O timeouts.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether the stream supports I/O timeouts.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the stream supports I/O timeouts; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return Stream.CanTimeout; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.\n\t\t/// </remarks>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to read before timing out.</returns>\n\t\t/// <value>The read timeout.</value>\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return Stream.ReadTimeout; }\n\t\t\tset { Stream.ReadTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.\n\t\t/// </remarks>\n\t\t/// <returns>A value, in milliseconds, that determines how long the stream will attempt to write before timing out.</returns>\n\t\t/// <value>The write timeout.</value>\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return Stream.WriteTimeout; }\n\t\t\tset { Stream.WriteTimeout = value; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the position within the current stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the position within the current stream.\n\t\t/// </remarks>\n\t\t/// <returns>The current position within the stream.</returns>\n\t\t/// <value>The position of the stream.</value>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\tpublic override long Position {\n\t\t\tget { return Stream.Position; }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the length of the stream, in bytes.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the length of the stream, in bytes.\n\t\t/// </remarks>\n\t\t/// <returns>A long value representing the length of the stream in bytes.</returns>\n\t\t/// <value>The length of the stream.</value>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\tpublic override long Length {\n\t\t\tget { return Stream.Length; }\n\t\t}\n\n\t\tvoid AlignReadAheadBuffer (out int offset, out int count)\n\t\t{\n\t\t\tint left = inputEnd - inputIndex;\n\n\t\t\tif (left > 0) {\n\t\t\t\tif (inputIndex > 0) {\n\t\t\t\t\t// move all of the remaining input to the beginning of the buffer\n\t\t\t\t\tBuffer.BlockCopy (input, inputIndex, input, 0, left);\n\t\t\t\t\tinputEnd = left;\n\t\t\t\t\tinputIndex = 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinputIndex = 0;\n\t\t\t\tinputEnd = 0;\n\t\t\t}\n\n\t\t\tcount = BlockSize - inputEnd;\n\t\t\toffset = inputEnd;\n\t\t}\n\n\t\tint ReadAhead (CancellationToken cancellationToken)\n\t\t{\n\t\t\tAlignReadAheadBuffer (out int offset, out int count);\n\n\t\t\ttry {\n\t\t\t\tvar network = Stream as NetworkStream;\n\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tnetwork?.Poll (SelectMode.SelectRead, cancellationToken);\n\t\t\t\tint nread = Stream.Read (input, offset, count);\n\n\t\t\t\tif (nread > 0) {\n\t\t\t\t\tlogger.LogServer (input, offset, nread);\n\t\t\t\t\tinputEnd += nread;\n\n\t\t\t\t\t// Optimization hack used by ReadResponse\n\t\t\t\t\tinput[inputEnd] = (byte) '\\n';\n\t\t\t\t} else if (lastResponse is not null) {\n\t\t\t\t\tthrow new SmtpProtocolException ($\"The SMTP server has unexpectedly disconnected: {lastResponse}\");\n\t\t\t\t} else {\n\t\t\t\t\tthrow new SmtpProtocolException (\"The SMTP server has unexpectedly disconnected.\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tIsConnected = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn inputEnd - inputIndex;\n\t\t}\n\n\t\tasync Task<int> ReadAheadAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tAlignReadAheadBuffer (out int offset, out int count);\n\n\t\t\ttry {\n\t\t\t\tvar network = Stream as NetworkStream;\n\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tint nread = await Stream.ReadAsync (input, offset, count, cancellationToken).ConfigureAwait (false);\n\n\t\t\t\tif (nread > 0) {\n\t\t\t\t\tlogger.LogServer (input, offset, nread);\n\t\t\t\t\tinputEnd += nread;\n\n\t\t\t\t\t// Optimization hack used by ReadResponse\n\t\t\t\t\tinput[inputEnd] = (byte) '\\n';\n\t\t\t\t} else if (lastResponse is not null) {\n\t\t\t\t\tthrow new SmtpProtocolException ($\"The SMTP server has unexpectedly disconnected: {lastResponse}\");\n\t\t\t\t} else {\n\t\t\t\t\tthrow new SmtpProtocolException (\"The SMTP server has unexpectedly disconnected.\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tIsConnected = false;\n\t\t\t\tthrow;\n\t\t\t}\n\n\t\t\treturn inputEnd - inputIndex;\n\t\t}\n\n\t\tstatic void ValidateArguments (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || count > (buffer.Length - offset))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (SmtpStream));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic int Read (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n#if false // Note: this code will never get called as we always use ReadResponse() instead.\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tint length = inputEnd - inputIndex;\n\t\t\tint n;\n\n\t\t\tif (length < count && length <= ReadAheadSize)\n\t\t\t\tawait ReadAheadAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tlength = inputEnd - inputIndex;\n\t\t\tn = Math.Min (count, length);\n\n\t\t\tBuffer.BlockCopy (input, inputIndex, buffer, offset, n);\n\t\t\tinputIndex += n;\n\n\t\t\treturn n;\n#else\n\t\t\tthrow new NotImplementedException ();\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\treturn Read (buffer, offset, count, CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a sequence of bytes from the stream and advances the position\n\t\t/// within the stream by the number of bytes read.\n\t\t/// </remarks>\n\t\t/// <returns>The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many\n\t\t/// bytes are not currently available, or zero (0) if the end of the stream has been reached.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <param name=\"offset\">The buffer offset.</param>\n\t\t/// <param name=\"count\">The number of bytes to read.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n#if false // Note: this code will never get called as we always use ReadResponse() instead.\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tint length = inputEnd - inputIndex;\n\t\t\tint n;\n\n\t\t\tif (length < count && length <= ReadAheadSize)\n\t\t\t\tawait ReadAheadAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\tlength = inputEnd - inputIndex;\n\t\t\tn = Math.Min (count, length);\n\n\t\t\tBuffer.BlockCopy (input, inputIndex, buffer, offset, n);\n\t\t\tinputIndex += n;\n\n\t\t\treturn n;\n#else\n\t\t\tthrow new NotImplementedException ();\n#endif\n\t\t}\n\n\t\tstatic bool TryParseStatusCode (byte[] text, int startIndex, out int code)\n\t\t{\n\t\t\tint endIndex = startIndex + 3;\n\n\t\t\tcode = 0;\n\n\t\t\tfor (int index = startIndex; index < endIndex; index++) {\n\t\t\t\tif (text[index] < (byte) '0' || text[index] > (byte) '9')\n\t\t\t\t\treturn false;\n\n\t\t\t\tint digit = text[index] - (byte) '0';\n\t\t\t\tcode = (code * 10) + digit;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool IsLegalAfterStatusCode (byte c)\n\t\t{\n\t\t\treturn c == (byte) '-' || c == (byte) ' ' || c == (byte) '\\r' || c == (byte) '\\n';\n\t\t}\n\n\t\tbool ReadResponse (ByteArrayBuilder builder, ref bool newLine, ref bool more, ref int code)\n\t\t{\n\t\t\tdo {\n\t\t\t\tint startIndex = inputIndex;\n\n\t\t\t\tif (newLine) {\n\t\t\t\t\tif (inputIndex + 3 < inputEnd) {\n\t\t\t\t\t\tif (!TryParseStatusCode (input, inputIndex, out int value))\n\t\t\t\t\t\t\tthrow new SmtpProtocolException (\"Unable to parse status code returned by the server.\");\n\n\t\t\t\t\t\tinputIndex += 3;\n\n\t\t\t\t\t\tif (value < 100 || !IsLegalAfterStatusCode (input[inputIndex]))\n\t\t\t\t\t\t\tthrow new SmtpProtocolException (\"Invalid status code returned by the server.\");\n\n\t\t\t\t\t\tif (code == 0) {\n\t\t\t\t\t\t\tcode = value;\n\t\t\t\t\t\t} else if (value != code) {\n\t\t\t\t\t\t\tthrow new SmtpProtocolException (\"The status codes returned by the server did not match.\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewLine = false;\n\n\t\t\t\t\t\tmore = input[inputIndex] == (byte) '-';\n\t\t\t\t\t\tif (more || input[inputIndex] == (byte) ' ')\n\t\t\t\t\t\t\tinputIndex++;\n\n\t\t\t\t\t\tstartIndex = inputIndex;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Need input.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Note: This depends on ReadAhead[Async] setting input[inputEnd] = '\\n'\n\t\t\t\twhile (input[inputIndex] != (byte) '\\n')\n\t\t\t\t\tinputIndex++;\n\n\t\t\t\tint endIndex = inputIndex;\n\t\t\t\tif (inputIndex > startIndex && input[inputIndex - 1] == (byte) '\\r')\n\t\t\t\t\tendIndex--;\n\n\t\t\t\tbuilder.Append (input, startIndex, endIndex - startIndex);\n\n\t\t\t\tif (inputIndex < inputEnd && input[inputIndex] == (byte) '\\n') {\n\t\t\t\t\tif (more)\n\t\t\t\t\t\tbuilder.Append ((byte) '\\n');\n\t\t\t\t\tnewLine = true;\n\t\t\t\t\tinputIndex++;\n\t\t\t\t}\n\t\t\t} while (more && inputIndex < inputEnd);\n\n\t\t\treturn inputIndex == inputEnd;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Read an SMTP server response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a full command response from the SMTP server.\n\t\t/// </remarks>\n\t\t/// <returns>The response.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic SmtpResponse ReadResponse (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tusing (var builder = new ByteArrayBuilder (256)) {\n\t\t\t\tbool needInput = inputIndex == inputEnd;\n\t\t\t\tbool newLine = true;\n\t\t\t\tbool more = true;\n\t\t\t\tint code = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif (needInput)\n\t\t\t\t\t\tReadAhead (cancellationToken);\n\n\t\t\t\t\tneedInput = ReadResponse (builder, ref newLine, ref more, ref code);\n\t\t\t\t} while (more || !newLine);\n\n\t\t\t\tvar message = builder.ToString ();\n\n\t\t\t\tlastResponse = message;\n\n\t\t\t\treturn new SmtpResponse ((SmtpStatusCode) code, message);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously read an SMTP server response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Reads a full command response from the SMTP server.\n\t\t/// </remarks>\n\t\t/// <returns>The response.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<SmtpResponse> ReadResponseAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tusing (var builder = new ByteArrayBuilder (256)) {\n\t\t\t\tbool needInput = inputIndex == inputEnd;\n\t\t\t\tbool newLine = true;\n\t\t\t\tbool more = true;\n\t\t\t\tint code = 0;\n\n\t\t\t\tdo {\n\t\t\t\t\tif (needInput)\n\t\t\t\t\t\tawait ReadAheadAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\t\t\tneedInput = ReadResponse (builder, ref newLine, ref more, ref code);\n\t\t\t\t} while (more || !newLine);\n\n\t\t\t\tvar message = builder.ToString ();\n\n\t\t\t\tlastResponse = message;\n\n\t\t\t\treturn new SmtpResponse ((SmtpStatusCode) code, message);\n\t\t\t}\n\t\t}\n\n\t\tunsafe bool TryQueueCommand (Encoder encoder, string command, ref int index)\n\t\t{\n\t\t\tfixed (char* cmd = command) {\n\t\t\t\tint outputLeft = output.Length - outputIndex;\n\t\t\t\tint charCount = command.Length - index;\n\t\t\t\tchar* chars = cmd + index;\n\n\t\t\t\tvar needed = encoder.GetByteCount (chars, charCount, true);\n\n\t\t\t\tif (needed > output.Length) {\n\t\t\t\t\t// If the command we are trying to queue is larger than the output buffer and we\n\t\t\t\t\t// already have some commands queued in the output buffer, then flush the queue\n\t\t\t\t\t// before queuing this command.\n\t\t\t\t\tif (outputIndex > 0)\n\t\t\t\t\t\treturn false;\n\t\t\t\t} else if (needed > outputLeft && index == 0) {\n\t\t\t\t\t// If we are trying to queue a new command (index == 0) and we need more space than\n\t\t\t\t\t// what remains in the output buffer, then flush the output buffer before queueing\n\t\t\t\t\t// the new command. Some servers do not handle receiving partial commands well.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tfixed (byte* outbuf = output) {\n\t\t\t\t\tbyte* outptr = outbuf + outputIndex;\n\n\t\t\t\t\tencoder.Convert (chars, charCount, outptr, outputLeft, true, out int charsUsed, out int bytesUsed, out bool completed);\n\t\t\t\t\toutputIndex += bytesUsed;\n\t\t\t\t\tindex += charsUsed;\n\n\t\t\t\t\treturn completed;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Queue a command to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Queues a command to the SMTP server.\n\t\t/// </remarks>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void QueueCommand (string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar encoder = Encoding.UTF8.GetEncoder ();\n\t\t\tint index = 0;\n\n\t\t\twhile (!TryQueueCommand (encoder, command, ref index))\n\t\t\t\tFlush (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously queue a command to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously queues a command to the SMTP server.\n\t\t/// </remarks>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic async Task QueueCommandAsync (string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar encoder = Encoding.UTF8.GetEncoder ();\n\t\t\tint index = 0;\n\n\t\t\twhile (!TryQueueCommand (encoder, command, ref index))\n\t\t\t\tawait FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Send a command to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sends a command to the SMTP server and reads the response.\n\t\t/// </remarks>\n\t\t/// <returns>The response.</returns>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic SmtpResponse SendCommand (string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tQueueCommand (command, cancellationToken);\n\t\t\tFlush (cancellationToken);\n\n\t\t\treturn ReadResponse (cancellationToken);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously send a command to the SMTP server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously sends a command to the SMTP server and reads the response.\n\t\t/// </remarks>\n\t\t/// <returns>The response.</returns>\n\t\t/// <param name=\"command\">The command.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SmtpProtocolException\">\n\t\t/// An SMTP protocol error occurred.\n\t\t/// </exception>\n\t\tpublic async Task<SmtpResponse> SendCommandAsync (string command, CancellationToken cancellationToken)\n\t\t{\n\t\t\tawait QueueCommandAsync (command, cancellationToken).ConfigureAwait (false);\n\t\t\tawait FlushAsync (cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn await ReadResponseAsync (cancellationToken).ConfigureAwait (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void Write (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\t\t\t\tint index = offset;\n\t\t\t\tint left = count;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tint n = Math.Min (BlockSize - outputIndex, left);\n\n\t\t\t\t\tif (outputIndex > 0 || n < BlockSize) {\n\t\t\t\t\t\t// append the data to the output buffer\n\t\t\t\t\t\tBuffer.BlockCopy (buffer, index, output, outputIndex, n);\n\t\t\t\t\t\toutputIndex += n;\n\t\t\t\t\t\tindex += n;\n\t\t\t\t\t\tleft -= n;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == BlockSize) {\n\t\t\t\t\t\t// flush the output buffer\n\t\t\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\t\t\tStream.Write (output, 0, BlockSize);\n\t\t\t\t\t\tlogger.LogClient (output, 0, BlockSize);\n\t\t\t\t\t\toutputIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == 0) {\n\t\t\t\t\t\t// write blocks of data to the stream without buffering\n\t\t\t\t\t\twhile (left >= BlockSize) {\n\t\t\t\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\t\t\t\tStream.Write (buffer, index, BlockSize);\n\t\t\t\t\t\t\tlogger.LogClient (buffer, index, BlockSize);\n\t\t\t\t\t\t\tindex += BlockSize;\n\t\t\t\t\t\t\tleft -= BlockSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tWrite (buffer, offset, count, CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Writes a sequence of bytes to the stream and advances the current\n\t\t/// position within this stream by the number of bytes written.\n\t\t/// </remarks>\n\t\t/// <returns>A task that represents the asynchronous write operation.</returns>\n\t\t/// <param name='buffer'>The buffer to write.</param>\n\t\t/// <param name='offset'>The offset of the first byte to write.</param>\n\t\t/// <param name='count'>The number of bytes to write.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\t\t\t\tint index = offset;\n\t\t\t\tint left = count;\n\n\t\t\t\twhile (left > 0) {\n\t\t\t\t\tint n = Math.Min (BlockSize - outputIndex, left);\n\n\t\t\t\t\tif (outputIndex > 0 || n < BlockSize) {\n\t\t\t\t\t\t// append the data to the output buffer\n\t\t\t\t\t\tBuffer.BlockCopy (buffer, index, output, outputIndex, n);\n\t\t\t\t\t\toutputIndex += n;\n\t\t\t\t\t\tindex += n;\n\t\t\t\t\t\tleft -= n;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == BlockSize) {\n\t\t\t\t\t\t// flush the output buffer\n\t\t\t\t\t\tawait Stream.WriteAsync (output, 0, BlockSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tlogger.LogClient (output, 0, BlockSize);\n\t\t\t\t\t\toutputIndex = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (outputIndex == 0) {\n\t\t\t\t\t\t// write blocks of data to the stream without buffering\n\t\t\t\t\t\twhile (left >= BlockSize) {\n\t\t\t\t\t\t\tawait Stream.WriteAsync (buffer, index, BlockSize, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\tlogger.LogClient (buffer, index, BlockSize);\n\t\t\t\t\t\t\tindex += BlockSize;\n\t\t\t\t\t\t\tleft -= BlockSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void Flush (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (outputIndex == 0)\n\t\t\t\treturn;\n\n\t\t\ttry {\n\t\t\t\tvar network = NetworkStream.Get (Stream);\n\n\t\t\t\tnetwork?.Poll (SelectMode.SelectWrite, cancellationToken);\n\t\t\t\tStream.Write (output, 0, outputIndex);\n\t\t\t\tStream.Flush ();\n\n\t\t\t\tlogger.LogClient (output, 0, outputIndex);\n\t\t\t\toutputIndex = 0;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tFlush (CancellationToken.None);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears all buffers for this stream and causes any buffered data to be written\n\t\t/// to the underlying device.\n\t\t/// </remarks>\n\t\t/// <returns>A task that represents the asynchronous flush operation.</returns>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The stream has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support writing.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic override async Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (outputIndex == 0)\n\t\t\t\treturn;\n\n\t\t\ttry {\n\t\t\t\tawait Stream.WriteAsync (output, 0, outputIndex, cancellationToken).ConfigureAwait (false);\n\t\t\t\tawait Stream.FlushAsync (cancellationToken).ConfigureAwait (false);\n\t\t\t\tlogger.LogClient (output, 0, outputIndex);\n\t\t\t\toutputIndex = 0;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tif (ex is not OperationCanceledException)\n\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\tthrow;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the position within the current stream.\n\t\t/// </summary>\n\t\t/// <returns>The new position within the stream.</returns>\n\t\t/// <param name=\"offset\">The offset into the stream relative to the <paramref name=\"origin\"/>.</param>\n\t\t/// <param name=\"origin\">The origin to seek from.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support seeking.\n\t\t/// </exception>\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sets the length of the stream.\n\t\t/// </summary>\n\t\t/// <param name=\"value\">The desired length of the stream in bytes.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The stream does not support setting the length.\n\t\t/// </exception>\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"SmtpStream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"SmtpStream\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tIsConnected = false;\n\t\t\t\tStream.Dispose ();\n\t\t\t}\n\n\t\t\tdisposed = true;\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/SocketMetrics.cs",
    "content": "﻿//\n// SocketMetrics.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0_OR_GREATER\n\nusing System;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Diagnostics;\nusing System.Diagnostics.Metrics;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Net {\n\tsealed class SocketMetrics\n\t{\n\t\treadonly Counter<long> connectCounter;\n\t\treadonly Histogram<double> connectDuration;\n\n\t\tpublic SocketMetrics (Meter meter)\n\t\t{\n\t\t\tconnectCounter = meter.CreateCounter<long> (\n\t\t\t\tname: $\"{Telemetry.Socket.MeterName}.connect.count\",\n\t\t\t\tunit: \"{attempt}\",\n\t\t\t\tdescription: \"The number of times a socket attempted to connect to a remote host.\");\n\n\t\t\tconnectDuration = meter.CreateHistogram<double> (\n\t\t\t\tname: $\"{Telemetry.Socket.MeterName}.connect.duration\",\n\t\t\t\tunit: \"ms\",\n\t\t\t\tdescription: \"The number of milliseconds taken for a socket to connect to a remote host.\");\n\t\t}\n\n\t\tstatic SocketException? GetSocketException (Exception exception)\n\t\t{\n\t\t\tException? ex = exception;\n\n\t\t\tdo {\n\t\t\t\tif (ex is SocketException se)\n\t\t\t\t\treturn se;\n\n\t\t\t\tex = ex.InnerException;\n\t\t\t} while (ex is not null);\n\n\t\t\treturn null;\n\t\t}\n\n\t\tinternal static bool TryGetErrorType (Exception exception, bool exceptionTypeFallback, [NotNullWhen (true)] out string? errorType)\n\t\t{\n\t\t\tif (exception is OperationCanceledException) {\n\t\t\t\terrorType = \"cancelled\";\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar socketException = GetSocketException (exception);\n\n\t\t\tif (socketException is not null) {\n\t\t\t\tswitch (socketException.SocketErrorCode) {\n\t\t\t\tcase SocketError.HostNotFound: errorType = \"host_not_found\"; return true;\n\t\t\t\tcase SocketError.HostUnreachable: errorType = \"host_unreachable\"; return true;\n\t\t\t\tcase SocketError.NetworkUnreachable: errorType = \"network_unreachable\"; return true;\n\n\t\t\t\tcase SocketError.ConnectionAborted: errorType = \"connection_aborted\"; return true;\n\t\t\t\tcase SocketError.ConnectionRefused: errorType = \"connection_refused\"; return true;\n\t\t\t\tcase SocketError.ConnectionReset: errorType = \"connection_reset\"; return true;\n\n\t\t\t\tcase SocketError.TimedOut: errorType = \"timed_out\"; return true;\n\t\t\t\tcase SocketError.TooManyOpenSockets: errorType = \"too_many_open_sockets\"; return true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (exceptionTypeFallback)\n\t\t\t\terrorType = exception.GetType ().FullName;\n\t\t\telse\n\t\t\t\terrorType = null;\n\n\t\t\treturn errorType != null;\n\t\t}\n\n\t\tstatic TagList GetTags (IPAddress ip, string host, int port, Exception? ex = null)\n\t\t{\n\t\t\tvar tags = new TagList {\n\t\t\t\t{ \"network.peer.address\", ip.ToString () },\n\t\t\t\t{ \"server.address\", host },\n\t\t\t\t{ \"server.port\", port },\n\t\t\t};\n\n\t\t\tif (ex is not null && TryGetErrorType (ex, true, out var errorType))\n\t\t\t\ttags.Add (\"error.type\", errorType);\n\n\t\t\treturn tags;\n\t\t}\n\n\t\tpublic void RecordConnected (long connectStartedTimestamp, IPAddress ip, string host, int port)\n\t\t{\n\t\t\tif (connectCounter.Enabled || connectDuration.Enabled) {\n\t\t\t\tvar tags = GetTags (ip, host, port);\n\n\t\t\t\tif (connectDuration.Enabled) {\n\t\t\t\t\tvar duration = TimeSpan.FromTicks (Stopwatch.GetTimestamp () - connectStartedTimestamp).TotalMilliseconds;\n\n\t\t\t\t\tconnectDuration.Record (duration, tags);\n\t\t\t\t}\n\n\t\t\t\tif (connectCounter.Enabled)\n\t\t\t\t\tconnectCounter.Add (1, tags);\n\t\t\t}\n\t\t}\n\n\t\tpublic void RecordConnectFailed (long connectStartedTimestamp, IPAddress ip, string host, int port, bool cancelled, Exception? ex = null)\n\t\t{\n\t\t\tif (connectCounter.Enabled || connectDuration.Enabled) {\n\t\t\t\tvar tags = GetTags (ip, host, port, ex);\n\n\t\t\t\tif (connectDuration.Enabled) {\n\t\t\t\t\tvar duration = TimeSpan.FromTicks (Stopwatch.GetTimestamp () - connectStartedTimestamp).TotalMilliseconds;\n\n\t\t\t\t\tconnectDuration.Record (duration, tags);\n\t\t\t\t}\n\n\t\t\t\tif (connectCounter.Enabled)\n\t\t\t\t\tconnectCounter.Add (1, tags);\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0_OR_GREATER\n"
  },
  {
    "path": "MailKit/Net/SocketUtils.cs",
    "content": "﻿//\n// SocketUtils.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Threading;\nusing System.Net.Sockets;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\n\nnamespace MailKit.Net\n{\n\tstatic class SocketUtils\n\t{\n\t\tclass SocketConnectState\n\t\t{\n\t\t\treadonly TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool> ();\n#if NET6_0_OR_GREATER\n\t\t\treadonly long connectStartTicks = Stopwatch.GetTimestamp ();\n#endif\n\t\t\treadonly Socket socket;\n\t\t\treadonly IPAddress ip;\n\t\t\treadonly string host;\n\t\t\treadonly int port;\n\n\t\t\tpublic SocketConnectState (Socket socket, IPAddress ip, string host, int port)\n\t\t\t{\n\t\t\t\tthis.socket = socket;\n\t\t\t\tthis.ip = ip;\n\t\t\t\tthis.host = host;\n\t\t\t\tthis.port = port;\n\t\t\t}\n\n\t\t\tpublic Task Task { get { return tcs.Task; } }\n\n\t\t\tpublic void OnCanceled ()\n\t\t\t{\n\t\t\t\ttcs.TrySetCanceled ();\n\t\t\t}\n\n\t\t\tpublic void OnEndConnect (IAsyncResult ar)\n\t\t\t{\n\t\t\t\ttry {\n\t\t\t\t\tsocket.EndConnect (ar);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t// The connection failed. Try setting an exception in case the connection hasn't also been cancelled.\n#if NET6_0_OR_GREATER\n\t\t\t\t\tbool cancelled = !tcs.TrySetException (ex);\n\n\t\t\t\t\tTelemetry.Socket.Metrics?.RecordConnectFailed (connectStartTicks, ip, host, port, cancelled, ex);\n#else\n\t\t\t\t\ttcs.TrySetException (ex);\n#endif\n\t\t\t\t\tsocket.Dispose ();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// The connection was successful.\n\t\t\t\tif (tcs.TrySetResult (true)) {\n#if NET6_0_OR_GREATER\n\t\t\t\t\tTelemetry.Socket.Metrics?.RecordConnected (connectStartTicks, ip, host, port);\n#endif\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Note: If we get this far, then it means that the connection has been cancelled.\n#if NET6_0_OR_GREATER\n\t\t\t\tTelemetry.Socket.Metrics?.RecordConnectFailed (connectStartTicks, ip, host, port, true);\n#endif\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket.Disconnect (false);\n\t\t\t\t\tsocket.Dispose ();\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void OnEndConnect (IAsyncResult ar)\n\t\t{\n\t\t\tvar state = (SocketConnectState) ar.AsyncState!;\n\n\t\t\tstate.OnEndConnect (ar);\n\t\t}\n\n\t\tpublic static Socket Connect (string host, int port, IPEndPoint? localEndPoint, CancellationToken cancellationToken)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tvar socket = new Socket (ipAddresses[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp);\n\n\t\t\t\ttry {\n\t\t\t\t\tif (localEndPoint != null)\n\t\t\t\t\t\tsocket.Bind (localEndPoint);\n\t\t\t\t} catch {\n\t\t\t\t\tsocket.Dispose ();\n\n\t\t\t\t\tif (i + 1 == ipAddresses.Length)\n\t\t\t\t\t\tthrow;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n#if NET6_0_OR_GREATER\n\t\t\t\tlong connectStartTicks = Stopwatch.GetTimestamp ();\n#endif\n\n\t\t\t\ttry {\n\t\t\t\t\tif (cancellationToken.CanBeCanceled) {\n\t\t\t\t\t\tvar state = new SocketConnectState (socket, ipAddresses[i], host, port);\n\n\t\t\t\t\t\tusing (var registration = cancellationToken.Register (state.OnCanceled, false)) {\n\t\t\t\t\t\t\tvar ar = socket.BeginConnect (ipAddresses[i], port, OnEndConnect, state);\n\t\t\t\t\t\t\tstate.Task.GetAwaiter ().GetResult ();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsocket.Connect (ipAddresses[i], port);\n\n#if NET6_0_OR_GREATER\n\t\t\t\t\t\tTelemetry.Socket.Metrics?.RecordConnected (connectStartTicks, ipAddresses[i], host, port);\n#endif\n\t\t\t\t\t}\n\n\t\t\t\t\treturn socket;\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\tthrow;\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tif (!cancellationToken.CanBeCanceled) {\n#if NET6_0_OR_GREATER\n\t\t\t\t\t\tTelemetry.Socket.Metrics?.RecordConnectFailed (connectStartTicks, ipAddresses[i], host, port, false, ex);\n#endif\n\n\t\t\t\t\t\tsocket.Dispose ();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (i + 1 == ipAddresses.Length)\n\t\t\t\t\t\tthrow;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new IOException (string.Format (\"Failed to resolve host: {0}\", host));\n\t\t}\n\n\t\tpublic static async Task<Socket> ConnectAsync (string host, int port, IPEndPoint? localEndPoint, CancellationToken cancellationToken)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n#if NET6_0_OR_GREATER\n\t\t\tvar ipAddresses = await Dns.GetHostAddressesAsync (host, cancellationToken).ConfigureAwait (false);\n#else\n\t\t\tvar ipAddresses = await Dns.GetHostAddressesAsync (host).ConfigureAwait (false);\n#endif\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t\tvar socket = new Socket (ipAddresses[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp);\n\n\t\t\t\ttry {\n\t\t\t\t\tif (localEndPoint != null)\n\t\t\t\t\t\tsocket.Bind (localEndPoint);\n\t\t\t\t} catch {\n\t\t\t\t\tsocket.Dispose ();\n\n\t\t\t\t\tif (i + 1 == ipAddresses.Length)\n\t\t\t\t\t\tthrow;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar state = new SocketConnectState (socket, ipAddresses[i], host, port);\n\n\t\t\t\t\tusing (var registration = cancellationToken.Register (state.OnCanceled, false)) {\n\t\t\t\t\t\tvar ar = socket.BeginConnect (ipAddresses[i], port, OnEndConnect, state);\n\t\t\t\t\t\tawait state.Task.ConfigureAwait (false);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn socket;\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\tthrow;\n\t\t\t\t} catch {\n\t\t\t\t\tif (i + 1 == ipAddresses.Length)\n\t\t\t\t\t\tthrow;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new IOException (string.Format (\"Failed to resolve host: {0}\", host));\n\t\t}\n\n\t\tpublic static Socket Connect (string host, int port, IPEndPoint? localEndPoint, int timeout, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var ts = new CancellationTokenSource (timeout)) {\n\t\t\t\tusing (var linked = CancellationTokenSource.CreateLinkedTokenSource (cancellationToken, ts.Token)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn Connect (host, port, localEndPoint, linked.Token);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tif (!cancellationToken.IsCancellationRequested)\n\t\t\t\t\t\t\tthrow new TimeoutException ();\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic static async Task<Socket> ConnectAsync (string host, int port, IPEndPoint? localEndPoint, int timeout, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var ts = new CancellationTokenSource (timeout)) {\n\t\t\t\tusing (var linked = CancellationTokenSource.CreateLinkedTokenSource (cancellationToken, ts.Token)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await ConnectAsync (host, port, localEndPoint, linked.Token).ConfigureAwait (false);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tif (!cancellationToken.IsCancellationRequested)\n\t\t\t\t\t\t\tthrow new TimeoutException ();\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic static void Poll (Socket socket, SelectMode mode, CancellationToken cancellationToken)\n\t\t{\n\t\t\tdo {\n\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\t// wait 1/4 second and then re-check for cancellation\n\t\t\t} while (!socket.Poll (250000, mode));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Net/SslStream.cs",
    "content": "﻿//\n// SslStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Net.Security;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Security.Authentication.ExtendedProtection;\n\nnamespace MailKit.Net\n{\n\tclass SslStream : System.Net.Security.SslStream, IChannelBindingContext\n\t{\n\t\tChannelBinding? tlsServerEndPoint;\n\t\tChannelBinding? tlsUnique;\n\n\t\tpublic SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback) : base (innerStream, leaveInnerStreamOpen, userCertificateValidationCallback)\n\t\t{\n\t\t}\n\n\t\tnew public Stream InnerStream {\n\t\t\tget { return base.InnerStream; }\n\t\t}\n\n\t\tChannelBinding? GetChannelBinding (ChannelBindingKind kind)\n\t\t{\n\t\t\tChannelBinding? channelBinding;\n\n\t\t\ttry {\n\t\t\t\t// Note: Documentation for TransportContext.GetChannelBinding() states that it will return null if the\n\t\t\t\t// requested channel binding type is not supported, but it also states that it will throw\n\t\t\t\t// NotSupportedException, so we handle both.\n\t\t\t\tchannelBinding = TransportContext?.GetChannelBinding (kind);\n\t\t\t} catch (NotSupportedException) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (channelBinding == null || channelBinding.IsClosed || channelBinding.IsInvalid)\n\t\t\t\treturn null;\n\n\t\t\treturn channelBinding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Try to get a channel-binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Tries to get the specified channel-binding.\n\t\t/// </remarks>\n\t\t/// <param name=\"kind\">The kind of channel-binding desired.</param>\n\t\t/// <param name=\"channelBinding\">The channel-binding.</param>\n\t\t/// <returns><see langword=\"true\" /> if the channel-binding token was acquired; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic bool TryGetChannelBinding (ChannelBindingKind kind, [NotNullWhen (true)] out ChannelBinding? channelBinding)\n\t\t{\n\t\t\tint identifierLength;\n\n\t\t\tif (kind == ChannelBindingKind.Endpoint) {\n\t\t\t\tchannelBinding = tlsServerEndPoint ??= GetChannelBinding (kind);\n\t\t\t\tidentifierLength = \"tls-server-end-point:\".Length;\n\t\t\t} else if (kind == ChannelBindingKind.Unique) {\n\t\t\t\tchannelBinding = tlsUnique ??= GetChannelBinding (kind);\n\t\t\t\tidentifierLength = \"tls-unique:\".Length;\n\t\t\t} else {\n\t\t\t\tchannelBinding = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (channelBinding == null || channelBinding.Size <= 32 + identifierLength)\n\t\t\t\treturn false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Try to get a channel-binding token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Tries to get the specified channel-binding.\n\t\t/// </remarks>\n\t\t/// <param name=\"kind\">The kind of channel-binding desired.</param>\n\t\t/// <param name=\"token\">The channel-binding token.</param>\n\t\t/// <returns><see langword=\"true\" /> if the channel-binding token was acquired; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic bool TryGetChannelBindingToken (ChannelBindingKind kind, [NotNullWhen (true)] out byte[]? token)\n\t\t{\n\t\t\ttoken = null;\n\n\t\t\tif (!TryGetChannelBinding (kind, out var channelBinding))\n\t\t\t\treturn false;\n\n\t\t\tint identifierLength;\n\n\t\t\tif (kind == ChannelBindingKind.Endpoint) {\n\t\t\t\tidentifierLength = \"tls-server-end-point:\".Length;\n\t\t\t} else if (kind == ChannelBindingKind.Unique) {\n\t\t\t\tidentifierLength = \"tls-unique:\".Length;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tint tokenLength = (channelBinding.Size - 32) - identifierLength;\n\t\t\ttoken = new byte[tokenLength];\n\n\t\t\tunsafe {\n\t\t\t\tbyte* inbuf = (byte*) channelBinding.DangerousGetHandle ().ToPointer ();\n\t\t\t\tbyte* inptr = inbuf + 32 + identifierLength;\n\t\t\t\tbyte* inend = inbuf + channelBinding.Size;\n\n\t\t\t\tfixed (byte* outbuf = token) {\n\t\t\t\t\tbyte* outptr = outbuf;\n\n\t\t\t\t\twhile (inptr < inend)\n\t\t\t\t\t\t*outptr++ = *inptr++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing) {\n\t\t\t\ttlsServerEndPoint?.Close ();\n\t\t\t\ttlsServerEndPoint = null;\n\t\t\t\ttlsUnique?.Close ();\n\t\t\t\ttlsUnique = null;\n\t\t\t}\n\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/NullProtocolLogger.cs",
    "content": "﻿//\n// NullProtocolLogger.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A protocol logger that does not log to anywhere.\n\t/// </summary>\n\t/// <remarks>\n\t/// By default, the <see cref=\"MailKit.Net.Smtp.SmtpClient\"/>,\n\t/// <see cref=\"MailKit.Net.Pop3.Pop3Client\"/>, and\n\t/// <see cref=\"MailKit.Net.Imap.ImapClient\"/> all use a\n\t/// <see cref=\"NullProtocolLogger\"/>.\n\t/// </remarks>\n\tpublic sealed class NullProtocolLogger : IProtocolLogger\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.NullProtocolLogger\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NullProtocolLogger\"/>.\n\t\t/// </remarks>\n\t\tpublic NullProtocolLogger ()\n\t\t{\n\t\t}\n\n\t\t#region IProtocolLogger implementation\n\n\t\t/// <summary>\n\t\t/// Get or set the authentication secret detector.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the authentication secret detector.\n\t\t/// </remarks>\n\t\t/// <value>The authentication secret detector.</value>\n\t\tpublic IAuthenticationSecretDetector? AuthenticationSecretDetector { get; set; }\n\n\t\t/// <summary>\n\t\t/// Logs a connection to the specified URI.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method does nothing.\n\t\t/// </remarks>\n\t\t/// <param name=\"uri\">The URI.</param>\n\t\tpublic void LogConnect (Uri uri)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Logs a sequence of bytes sent by the client.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method does nothing.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to log.</param>\n\t\t/// <param name='offset'>The offset of the first byte to log.</param>\n\t\t/// <param name='count'>The number of bytes to log.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic void LogClient (byte[] buffer, int offset, int count)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Logs a sequence of bytes sent by the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This method does nothing.\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to log.</param>\n\t\t/// <param name='offset'>The offset of the first byte to log.</param>\n\t\t/// <param name='count'>The number of bytes to log.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic void LogServer (byte[] buffer, int offset, int count)\n\t\t{\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable implementation\n\n\t\t/// <summary>\n\t\t/// Releases all resource used by the <see cref=\"MailKit.NullProtocolLogger\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>Call <see cref=\"Dispose\"/> when you are finished using the <see cref=\"MailKit.NullProtocolLogger\"/>. The\n\t\t/// <see cref=\"Dispose\"/> method leaves the <see cref=\"MailKit.NullProtocolLogger\"/> in an unusable state. After\n\t\t/// calling <see cref=\"Dispose\"/>, you must release all references to the <see cref=\"MailKit.NullProtocolLogger\"/> so\n\t\t/// the garbage collector can reclaim the memory that the <see cref=\"MailKit.NullProtocolLogger\"/> was occupying.</remarks>\n\t\tpublic void Dispose ()\n\t\t{\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/PreviewOptions.cs",
    "content": "﻿//\n// PreviewOptions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n#if ENABLE_LAZY_PREVIEW_API\n\n\t/// <summary>\n\t/// A set of options for fetching the preview text for messages.\n\t/// </summary>\n\tpublic enum PreviewOptions\n\t{\n\t\t/// <summary>\n\t\t/// No options specified.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// The preview text should only be fetched if the server has it instantly available (cached).\n\t\t/// </summary>\n\t\tLazy\n\t}\n#endif\n}\n"
  },
  {
    "path": "MailKit/ProgressStream.cs",
    "content": "﻿//\n// ProgressStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing MimeKit.IO;\n\nnamespace MailKit {\n\tclass ProgressStream : Stream, ICancellableStream\n\t{\n\t\treadonly ICancellableStream? cancellable;\n\n\t\tpublic ProgressStream (Stream source, Action<int> update)\n\t\t{\n\t\t\tif (source == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (source));\n\n\t\t\tif (update == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (update));\n\n\t\t\tcancellable = source as ICancellableStream;\n\t\t\tSource = source;\n\t\t\tUpdate = update;\n\t\t}\n\n\t\tpublic Stream Source {\n\t\t\tget; private set;\n\t\t}\n\n\t\tAction<int> Update {\n\t\t\tget; set;\n\t\t}\n\n\t\tpublic override bool CanRead {\n\t\t\tget { return Source.CanRead; }\n\t\t}\n\n\t\tpublic override bool CanWrite {\n\t\t\tget { return Source.CanWrite; }\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return Source.CanTimeout; }\n\t\t}\n\n\t\tpublic override long Length {\n\t\t\tget { return Source.Length; }\n\t\t}\n\n\t\tpublic override long Position {\n\t\t\tget { return Source.Position; }\n\t\t\tset { Seek (value, SeekOrigin.Begin); }\n\t\t}\n\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return Source.ReadTimeout; }\n\t\t\tset { Source.ReadTimeout = value; }\n\t\t}\n\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return Source.WriteTimeout; }\n\t\t\tset { Source.WriteTimeout = value; }\n\t\t}\n\n\t\tpublic int Read (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tint n;\n\n\t\t\tif (cancellable != null) {\n\t\t\t\tif ((n = cancellable.Read (buffer, offset, count, cancellationToken)) > 0)\n\t\t\t\t\tUpdate (n);\n\t\t\t} else {\n\t\t\t\tif ((n = Source.Read (buffer, offset, count)) > 0)\n\t\t\t\t\tUpdate (n);\n\t\t\t}\n\n\t\t\treturn n;\n\t\t}\n\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tint n;\n\n\t\t\tif ((n = Source.Read (buffer, offset, count)) > 0)\n\t\t\t\tUpdate (n);\n\n\t\t\treturn n;\n\t\t}\n\n\t\tpublic override async Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tint n;\n\n\t\t\tif ((n = await Source.ReadAsync (buffer, offset, count, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\tUpdate (n);\n\n\t\t\treturn n;\n\t\t}\n\n\t\tpublic void Write (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (cancellable != null)\n\t\t\t\tcancellable.Write (buffer, offset, count, cancellationToken);\n\t\t\telse\n\t\t\t\tSource.Write (buffer, offset, count);\n\n\t\t\tif (count > 0)\n\t\t\t\tUpdate (count);\n\t\t}\n\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tSource.Write (buffer, offset, count);\n\n\t\t\tif (count > 0)\n\t\t\t\tUpdate (count);\n\t\t}\n\n\t\tpublic override async Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tawait Source.WriteAsync (buffer, offset, count, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (count > 0)\n\t\t\t\tUpdate (count);\n\t\t}\n\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException (\"The stream does not support seeking.\");\n\t\t}\n\n\t\tpublic void Flush (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (cancellable != null)\n\t\t\t\tcancellable.Flush (cancellationToken);\n\t\t\telse\n\t\t\t\tSource.Flush ();\n\t\t}\n\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tSource.Flush ();\n\t\t}\n\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Source.FlushAsync (cancellationToken);\n\t\t}\n\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException (\"The stream does not support resizing.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Properties/AssemblyInfo.cs",
    "content": "//\n// AssemblyInfo.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing 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 (\"MailKit\")]\n[assembly: AssemblyDescription (\"A cross-platform mail client library.\")]\n[assembly: AssemblyConfiguration (\"\")]\n[assembly: AssemblyCompany (\".NET Foundation\")]\n[assembly: AssemblyProduct (\"MailKit\")]\n[assembly: AssemblyCopyright (\"Copyright © 2013-2026 .NET Foundation and Contributors\")]\n[assembly: AssemblyTrademark (\".NET Foundation\")]\n[assembly: AssemblyCulture (\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible (true)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid (\"2fe79b66-d107-45da-9493-175f59c4a53c\")]\n[assembly: InternalsVisibleTo (\"UnitTests, PublicKey=002400000480000094000000060200\" +\n\t\"0000240000525341310004000011000000cde209732ce60a8fa70ee643cb32e9bf8149b61018c5\" +\n\t\"b166489b8a5cae44f1f88ca97ab9d9e035421933a6f0d556acc7c2219ae1464e35386ca1e239aa\" +\n\t\"42508b9edbb4164bfa82aa2a0f4cd983d9e5ba2acfe08a10a2093e2b2bf8408eef43114db89b39\" +\n\t\"99c59af1d3dc2c9f0cdbf51074e9a482cf09c9116ae1c5543ce8ff9b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Micro Version\n//      Build Number\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//\n// Note: AssemblyVersion is what the CLR matches against at runtime, so be careful\n// about updating it. The AssemblyFileVersion is the official release version while\n// the AssemblyInformationalVersion is just used as a display version.\n//\n// Based on my current understanding, AssemblyVersion is essentially the \"API Version\"\n// and so should only be updated when the API changes. The other 2 Version attributes\n// represent the \"Release Version\".\n//\n// Making releases:\n//\n// If any classes, methods, or enum values have been added, bump the Micro Version\n//    in all version attributes and set the Build Number back to 0.\n//\n// If there have only been bug fixes, bump the Micro Version and/or the Build Number\n//    in the AssemblyFileVersion attribute.\n[assembly: AssemblyInformationalVersion (\"4.15.1.0\")]\n[assembly: AssemblyFileVersion (\"4.15.1.0\")]\n[assembly: AssemblyVersion (\"4.15.0.0\")]\n"
  },
  {
    "path": "MailKit/ProtocolException.cs",
    "content": "﻿//\n// ProtocolException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when there is a protocol error.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>A <see cref=\"ProtocolException\"/> can be thrown by any of the various client\n\t/// methods in MailKit.</para>\n\t/// <para>Since many protocol exceptions are fatal, it is important to check whether\n\t/// or not the client is still connected using the <see cref=\"IMailService.IsConnected\"/>\n\t/// property when this exception is thrown.</para>\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic abstract class ProtocolException : Exception\n\t{\n\t\tconst string ProtocolLogHelpLink = \"https://github.com/jstedfast/MailKit/blob/master/FAQ.md#protocol-log\";\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected ProtocolException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tprotected ProtocolException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tHelpLink = ProtocolLogHelpLink;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProtocolException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tprotected ProtocolException (string message) : base (message)\n\t\t{\n\t\t\tHelpLink = ProtocolLogHelpLink;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ProtocolException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProtocolException\"/>.\n\t\t/// </remarks>\n\t\tprotected ProtocolException ()\n\t\t{\n\t\t\tHelpLink = ProtocolLogHelpLink;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ProtocolLogger.cs",
    "content": "﻿//\n// ProtocolLogger.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Globalization;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A default protocol logger for logging the communication between a client and server.\n\t/// </summary>\n\t/// <remarks>\n\t/// A default protocol logger for logging the communication between a client and server.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ProtocolLogger\"/>\n\t/// </example>\n\tpublic class ProtocolLogger : IProtocolLogger\n\t{\n\t\tstatic byte[] defaultClientPrefix = Encoding.ASCII.GetBytes (\"C: \");\n\t\tstatic byte[] defaultServerPrefix = Encoding.ASCII.GetBytes (\"S: \");\n\t\tstatic readonly byte[] Secret = Encoding.ASCII.GetBytes (\"********\");\n\t\tstatic readonly byte[] Space = new byte[] { (byte) ' ' };\n\n\t\tconst string DefaultTimestampFormat = \"yyyy-MM-ddTHH:mm:ssZ\";\n\n\t\tbyte[] clientPrefix = defaultClientPrefix;\n\t\tbyte[] serverPrefix = defaultServerPrefix;\n\t\treadonly Stream stream;\n\t\treadonly bool leaveOpen;\n\t\tbool clientMidline;\n\t\tbool serverMidline;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ProtocolLogger\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProtocolLogger\"/> to log to a specified file. The file is created if it does not exist.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\SmtpExamples.cs\" region=\"ProtocolLogger\"/>\n\t\t/// </example>\n\t\t/// <param name=\"fileName\">The file name.</param>\n\t\t/// <param name=\"append\"><see langword=\"true\" /> if the file should be appended to; otherwise, <see langword=\"false\" />. Defaults to <see langword=\"true\" />.</param>\n\t\tpublic ProtocolLogger (string fileName, bool append = true)\n\t\t{\n\t\t\tstream = File.Open (fileName, append ? FileMode.Append : FileMode.Create, FileAccess.Write, FileShare.Read);\n\t\t\tTimestampFormat = DefaultTimestampFormat;\n\t\t\tRedactSecrets = true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ProtocolLogger\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ProtocolLogger\"/> to log to a specified stream.\n\t\t/// </remarks>\n\t\t/// <param name=\"stream\">The stream.</param>\n\t\t/// <param name=\"leaveOpen\"><see langword=\"true\" /> if the stream should be left open after the protocol logger is disposed.</param>\n\t\tpublic ProtocolLogger (Stream stream, bool leaveOpen = false)\n\t\t{\n\t\t\tif (stream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (stream));\n\n\t\t\tTimestampFormat = DefaultTimestampFormat;\n\t\t\tRedactSecrets = true;\n\n\t\t\tthis.leaveOpen = leaveOpen;\n\t\t\tthis.stream = stream;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases unmanaged resources and performs other cleanup operations before the <see cref=\"MailKit.ProtocolLogger\"/>\n\t\t/// is reclaimed by garbage collection.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases unmanaged resources and performs other cleanup operations before the <see cref=\"MailKit.ProtocolLogger\"/>\n\t\t/// is reclaimed by garbage collection.\n\t\t/// </remarks>\n\t\t~ProtocolLogger ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the log stream.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the log stream.\n\t\t/// </remarks>\n\t\t/// <value>The log sstream.</value>\n\t\tpublic Stream Stream {\n\t\t\tget { return stream; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the default client prefix to use when creating new <see cref=\"MailKit.ProtocolLogger\"/> instances.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get or set the default client prefix to use when creating new <see cref=\"MailKit.ProtocolLogger\"/> instances.\n\t\t/// </remarks>\n\t\t/// <value>The default client prefix.</value>\n\t\tpublic static string DefaultClientPrefix\n\t\t{\n\t\t\tget { return Encoding.UTF8.GetString (defaultClientPrefix); }\n\t\t\tset { defaultClientPrefix = Encoding.UTF8.GetBytes (value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the default server prefix to use when creating new <see cref=\"MailKit.ProtocolLogger\"/> instances.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Get or set the default server prefix to use when creating new <see cref=\"MailKit.ProtocolLogger\"/> instances.\n\t\t/// </remarks>\n\t\t/// <value>The default server prefix.</value>\n\t\tpublic static string DefaultServerPrefix\n\t\t{\n\t\t\tget { return Encoding.UTF8.GetString (defaultServerPrefix); }\n\t\t\tset { defaultServerPrefix = Encoding.UTF8.GetBytes (value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the client prefix to use when logging client messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the client prefix to use when logging client messages.\n\t\t/// </remarks>\n\t\t/// <value>The client prefix.</value>\n\t\tpublic string ClientPrefix\n\t\t{\n\t\t\tget { return Encoding.UTF8.GetString (clientPrefix); }\n\t\t\tset { clientPrefix = Encoding.UTF8.GetBytes (value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the server prefix to use when logging server messages.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the server prefix to use when logging server messages.\n\t\t/// </remarks>\n\t\t/// <value>The server prefix.</value>\n\t\tpublic string ServerPrefix\n\t\t{\n\t\t\tget { return Encoding.UTF8.GetString (serverPrefix); }\n\t\t\tset { serverPrefix = Encoding.UTF8.GetBytes (value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether or not authentication secrets should be redacted.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets whether or not authentication secrets should be redacted.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if authentication secrets should be redacted; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool RedactSecrets {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether timestamps should be logged.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets whether or not timestamps should be logged.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if timestamps should be logged; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool LogTimestamps {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the date and time serialization format that should be used when logging timestamps.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the date and time serialization format that should be used when logging timestamps.\n\t\t/// </remarks>\n\t\t/// <value>The date and time serialization format that should be used when logging timestamps.</value>\n\t\tpublic string TimestampFormat {\n\t\t\tget; set;\n\t\t}\n\n\t\t#region IProtocolLogger implementation\n\n\t\t/// <summary>\n\t\t/// Get or set the authentication secret detector.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the authentication secret detector.\n\t\t/// </remarks>\n\t\t/// <value>The authentication secret detector.</value>\n\t\tpublic IAuthenticationSecretDetector? AuthenticationSecretDetector { get; set; }\n\n\t\tstatic void ValidateArguments (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || count > (buffer.Length - offset))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\t\t}\n\n\t\tvoid Log (byte[] prefix, ref bool midline, byte[] buffer, int offset, int count, bool isClient)\n\t\t{\n\t\t\tint endIndex = offset + count;\n\t\t\tint index = offset;\n\t\t\tint start;\n\n\t\t\twhile (index < endIndex) {\n\t\t\t\tstart = index;\n\n\t\t\t\twhile (index < endIndex && buffer[index] != (byte) '\\n')\n\t\t\t\t\tindex++;\n\n\t\t\t\tif (!midline) {\n\t\t\t\t\tif (LogTimestamps) {\n\t\t\t\t\t\tvar timestamp = Encoding.ASCII.GetBytes (DateTime.UtcNow.ToString (TimestampFormat, CultureInfo.InvariantCulture));\n\t\t\t\t\t\tstream.Write (timestamp, 0, timestamp.Length);\n\t\t\t\t\t\tstream.Write (Space, 0, Space.Length);\n\t\t\t\t\t}\n\n\t\t\t\t\tstream.Write (prefix, 0, prefix.Length);\n\t\t\t\t}\n\n\t\t\t\tif (index < endIndex && buffer[index] == (byte) '\\n') {\n\t\t\t\t\tmidline = false;\n\t\t\t\t\tindex++;\n\t\t\t\t} else {\n\t\t\t\t\tmidline = true;\n\t\t\t\t}\n\n\t\t\t\tif (isClient && RedactSecrets && AuthenticationSecretDetector != null) {\n\t\t\t\t\tvar secrets = AuthenticationSecretDetector.DetectSecrets (buffer, start, index - start);\n\n\t\t\t\t\tforeach (var secret in secrets) {\n\t\t\t\t\t\tif (secret.StartIndex > start)\n\t\t\t\t\t\t\tstream.Write (buffer, start, secret.StartIndex - start);\n\t\t\t\t\t\tstart = secret.StartIndex + secret.Length;\n\t\t\t\t\t\tstream.Write (Secret, 0, Secret.Length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstream.Write (buffer, start, index - start);\n\t\t\t}\n\n\t\t\tstream.Flush ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Logs a connection to the specified URI.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Logs a connection to the specified URI.\n\t\t/// </remarks>\n\t\t/// <param name=\"uri\">The URI.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uri\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The logger has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void LogConnect (Uri uri)\n\t\t{\n\t\t\tif (uri == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uri));\n\n\t\t\tstring message;\n\n\t\t\tif (LogTimestamps) {\n\t\t\t\tmessage = string.Format (\"{0} Connected to {1}\\r\\n\", DateTime.UtcNow.ToString (TimestampFormat, CultureInfo.InvariantCulture), uri);\n\t\t\t} else {\n\t\t\t\tmessage = string.Format (\"Connected to {0}\\r\\n\", uri);\n\t\t\t}\n\n\t\t\tvar buf = Encoding.ASCII.GetBytes (message);\n\n\t\t\tif (clientMidline || serverMidline) {\n\t\t\t\tstream.WriteByte ((byte) '\\r');\n\t\t\t\tstream.WriteByte ((byte) '\\n');\n\t\t\t\tclientMidline = false;\n\t\t\t\tserverMidline = false;\n\t\t\t}\n\n\t\t\tstream.Write (buf, 0, buf.Length);\n\t\t\tstream.Flush ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Logs a sequence of bytes sent by the client.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Logs a sequence of bytes sent by the client.</para>\n\t\t/// <para><see cref=\"LogClient(byte[], int, int)\"/> is called by the <see cref=\"IMailService\"/> upon every successful\n\t\t/// write operation to its underlying network stream, passing the exact same <paramref name=\"buffer\"/>,\n\t\t/// <paramref name=\"offset\"/>, and <paramref name=\"count\"/> arguments to the logging function.</para>\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to log.</param>\n\t\t/// <param name='offset'>The offset of the first byte to log.</param>\n\t\t/// <param name='count'>The number of bytes to log.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The logger has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void LogClient (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tLog (clientPrefix, ref clientMidline, buffer, offset, count, true);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Logs a sequence of bytes sent by the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Logs a sequence of bytes sent by the server.</para>\n\t\t/// <para><see cref=\"LogServer(byte[], int, int)\"/> is called by the <see cref=\"IMailService\"/> upon every successful\n\t\t/// read of its underlying network stream with the exact buffer that was read.</para>\n\t\t/// </remarks>\n\t\t/// <param name='buffer'>The buffer to log.</param>\n\t\t/// <param name='offset'>The offset of the first byte to log.</param>\n\t\t/// <param name='count'>The number of bytes to log.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"offset\"/> is less than zero or greater than the length of <paramref name=\"buffer\"/>.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>The <paramref name=\"buffer\"/> is not large enough to contain <paramref name=\"count\"/> bytes starting\n\t\t/// at the specified <paramref name=\"offset\"/>.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The logger has been disposed.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.IO.IOException\">\n\t\t/// An I/O error occurred.\n\t\t/// </exception>\n\t\tpublic void LogServer (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tValidateArguments (buffer, offset, count);\n\n\t\t\tLog (serverPrefix, ref serverMidline, buffer, offset, count, false);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IDisposable implementation\n\n\t\t/// <summary>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"ProtocolLogger\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Releases the unmanaged resources used by the <see cref=\"ProtocolLogger\"/> and\n\t\t/// optionally releases the managed resources.\n\t\t/// </remarks>\n\t\t/// <param name=\"disposing\"><see langword=\"true\" /> to release both managed and unmanaged resources;\n\t\t/// <see langword=\"false\" /> to release only the unmanaged resources.</param>\n\t\tprotected virtual void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !leaveOpen)\n\t\t\t\tstream.Dispose ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases all resource used by the <see cref=\"MailKit.ProtocolLogger\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>Call <see cref=\"Dispose()\"/> when you are finished using the <see cref=\"MailKit.ProtocolLogger\"/>. The\n\t\t/// <see cref=\"Dispose()\"/> method leaves the <see cref=\"MailKit.ProtocolLogger\"/> in an unusable state. After calling\n\t\t/// <see cref=\"Dispose()\"/>, you must release all references to the <see cref=\"MailKit.ProtocolLogger\"/> so the garbage\n\t\t/// collector can reclaim the memory that the <see cref=\"MailKit.ProtocolLogger\"/> was occupying.</remarks>\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tDispose (true);\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\n\t\t#endregion\n\t}\n}\n"
  },
  {
    "path": "MailKit/ReplaceRequest.cs",
    "content": "﻿//\n// ReplaceRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for replacing a message in a folder.\n\t/// </summary>\n\t/// <remarks>\n\t/// A request for replacing a message in a folder.\n\t/// </remarks>\n\tpublic class ReplaceRequest : AppendRequest, IReplaceRequest\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"ReplaceRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ReplaceRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic ReplaceRequest (MimeMessage message, MessageFlags flags = MessageFlags.None) : base (message, flags)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"ReplaceRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ReplaceRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The message keywords.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"keywords\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic ReplaceRequest (MimeMessage message, MessageFlags flags, IEnumerable<string> keywords) : base (message, flags, keywords)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"ReplaceRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ReplaceRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"internalDate\">The internal date of the message.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"message\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic ReplaceRequest (MimeMessage message, MessageFlags flags, DateTimeOffset internalDate) : base (message, flags, internalDate)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"ReplaceRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ReplaceRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The message.</param>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <param name=\"keywords\">The message keywords.</param>\n\t\t/// <param name=\"internalDate\">The internal date of the message.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"keywords\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic ReplaceRequest (MimeMessage message, MessageFlags flags, IEnumerable<string> keywords, DateTimeOffset internalDate) : base (message, flags, keywords, internalDate)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the folder where the replacement message should be appended.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the folder where the replacement message should be appended.</para>\n\t\t/// <para>If no destination folder is specified, then the replacement message will be\n\t\t/// appended to the original folder.</para>\n\t\t/// </remarks>\n\t\t/// <value>The destination folder.</value>\n\t\tpublic IMailFolder? Destination {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/AnnotationSearchQuery.cs",
    "content": "﻿//\n// AnnotationSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search\n{\n\t/// <summary>\n\t/// An annotation-based search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// An annotation-based search query.\n\t/// </remarks>\n\tpublic class AnnotationSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.AnnotationSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new annotation-based search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"entry\">The annotation entry.</param>\n\t\t/// <param name=\"attribute\">The annotation attribute.</param>\n\t\t/// <param name=\"value\">The annotation attribute value.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"entry\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"attribute\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"attribute\"/> is not a valid attribute for searching.\n\t\t/// </exception>\n\t\tpublic AnnotationSearchQuery (AnnotationEntry entry, AnnotationAttribute attribute, string value) : base (SearchTerm.Annotation)\n\t\t{\n\t\t\tif (entry is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (entry));\n\n\t\t\tif (attribute is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (attribute));\n\n\t\t\tif (attribute.Name != \"value\")\n\t\t\t\tthrow new ArgumentException (\"Only the \\\"value\\\", \\\"value.priv\\\", and \\\"value.shared\\\" attributes can be searched.\", nameof (attribute));\n\n\t\t\tAttribute = attribute;\n\t\t\tEntry = entry;\n\t\t\tValue = value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation entry.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation entry.\n\t\t/// </remarks>\n\t\t/// <value>The annotation entry.</value>\n\t\tpublic AnnotationEntry Entry {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation attribute.\n\t\t/// </remarks>\n\t\t/// <value>The annotation attribute.</value>\n\t\tpublic AnnotationAttribute Attribute {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation attribute value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation attribute value.\n\t\t/// </remarks>\n\t\t/// <value>The annotation attribute value.</value>\n\t\tpublic string Value {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/BinarySearchQuery.cs",
    "content": "﻿//\n// BinarySearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// A binary search query such as an AND or OR expression.\n\t/// </summary>\n\t/// <remarks>\n\t/// A binary search query such as an AND or OR expression.\n\t/// </remarks>\n\tpublic class BinarySearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.BinarySearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new binary search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"term\">THe search term.</param>\n\t\t/// <param name=\"left\">The left expression.</param>\n\t\t/// <param name=\"right\">The right expression.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"left\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"right\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic BinarySearchQuery (SearchTerm term, SearchQuery left, SearchQuery right) : base (term)\n\t\t{\n\t\t\tif (left == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (left));\n\n\t\t\tif (right == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (right));\n\n\t\t\tRight = right;\n\t\t\tLeft = left;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the left operand of the expression.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the left operand of the expression.\n\t\t/// </remarks>\n\t\t/// <value>The left operand.</value>\n\t\tpublic SearchQuery Left {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the right operand of the expression.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the right operand of the expression.\n\t\t/// </remarks>\n\t\t/// <value>The right operand.</value>\n\t\tpublic SearchQuery Right {\n\t\t\tget; private set;\n\t\t}\n\n\t\tinternal override SearchQuery Optimize (ISearchQueryOptimizer optimizer)\n\t\t{\n\t\t\tvar right = Right.Optimize (optimizer);\n\t\t\tvar left = Left.Optimize (optimizer);\n\t\t\tSearchQuery binary;\n\n\t\t\tif (left != Left || right != Right)\n\t\t\t\tbinary = new BinarySearchQuery (Term, left, right);\n\t\t\telse\n\t\t\t\tbinary = this;\n\n\t\t\treturn optimizer.Reduce (binary);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/DateSearchQuery.cs",
    "content": "﻿//\n// DateSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// A date-based search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// A date-based search query.\n\t/// </remarks>\n\tpublic class DateSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.DateSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new date-based search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"term\">The search term.</param>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic DateSearchQuery (SearchTerm term, DateTime date) : base (term)\n\t\t{\n\t\t\tDate = date;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the date value of the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the date value of the search query.\n\t\t/// </remarks>\n\t\t/// <value>The date.</value>\n\t\tpublic DateTime Date {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/FilterSearchQuery.cs",
    "content": "﻿//\n// FilterSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search\n{\n\t/// <summary>\n\t/// A filter-based search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// A filter-based search query.\n\t/// </remarks>\n\tpublic class FilterSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.FilterSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A search query that references a predefined filter.\n\t\t/// </remarks>\n\t\t/// <param name=\"name\">The name of the filter.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"name\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"name\"/> is empty.\n\t\t/// </exception>\n\t\tpublic FilterSearchQuery (string name) : base (SearchTerm.Filter)\n\t\t{\n\t\t\tif (name == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (name));\n\n\t\t\tif (name.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The filter name cannot be empty.\", nameof (name));\n\n\t\t\tName = name;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.FilterSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A search query that references a predefined filter.\n\t\t/// </remarks>\n\t\t/// <param name=\"filter\">The metadata tag representing the filter.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"filter\"/> does not reference a valid filter.\n\t\t/// </exception>\n\t\tpublic FilterSearchQuery (MetadataTag filter) : base (SearchTerm.Filter)\n\t\t{\n\t\t\tif (filter.Id.StartsWith (\"/private/filters/values/\", StringComparison.Ordinal))\n\t\t\t\tName = filter.Id.Substring (\"/private/filters/values/\".Length);\n\t\t\telse if (filter.Id.StartsWith (\"/shared/filters/values/\", StringComparison.Ordinal))\n\t\t\t\tName = filter.Id.Substring (\"/shared/filters/values/\".Length);\n\t\t\telse\n\t\t\t\tthrow new ArgumentException (\"Metadata tag does not reference a valid filter.\", nameof (filter));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the filter.\n\t\t/// </remarks>\n\t\t/// <value>The name of the filter.</value>\n\t\tpublic string Name {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/HeaderSearchQuery.cs",
    "content": "﻿//\n// HeaderSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// A header-based search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// A header-based search query.\n\t/// </remarks>\n\tpublic class HeaderSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.HeaderSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new header search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"field\">The header field name.</param>\n\t\t/// <param name=\"value\">The value to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"field\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"value\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"field\"/> is empty.\n\t\t/// </exception>\n\t\tpublic HeaderSearchQuery (string field, string value) : base (SearchTerm.HeaderContains)\n\t\t{\n\t\t\tif (field == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (field));\n\n\t\t\tif (field.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search an empty header field name.\", nameof (field));\n\n\t\t\tif (value == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (value));\n\n\t\t\tField = field;\n\t\t\tValue = value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the header field name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the header field name.\n\t\t/// </remarks>\n\t\t/// <value>The header field.</value>\n\t\tpublic string Field {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the value to match against.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the value to match against.\n\t\t/// </remarks>\n\t\t/// <value>The value.</value>\n\t\tpublic string Value {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/ISearchQueryOptimizer.cs",
    "content": "﻿//\n// ISearchQueryOptimizer.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Search {\n\tinterface ISearchQueryOptimizer\n\t{\n\t\tSearchQuery Reduce (SearchQuery expr);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/NumericSearchQuery.cs",
    "content": "﻿//\n// NumericSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// A numeric search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// A numeric search query.\n\t/// </remarks>\n\tpublic class NumericSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.NumericSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new numeric search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"term\">The search term.</param>\n\t\t/// <param name=\"value\">The numeric value.</param>\n\t\tpublic NumericSearchQuery (SearchTerm term, ulong value) : base (term)\n\t\t{\n\t\t\tValue = value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the numeric value to match against.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the numeric value to match against.\n\t\t/// </remarks>\n\t\t/// <value>The numeric value.</value>\n\t\tpublic ulong Value {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/OrderBy.cs",
    "content": "﻿//\n// OrderBy.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// Specifies a sort order for search results.\n\t/// </summary>\n\t/// <remarks>\n\t/// You can combine multiple <see cref=\"OrderBy\"/> rules to specify the sort\n\t/// order that <see cref=\"IMailFolder.Sort(SearchQuery,System.Collections.Generic.IList&lt;OrderBy&gt;,System.Threading.CancellationToken)\"/>\n\t/// should return the results in.\n\t/// </remarks>\n\tpublic class OrderBy\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Search.OrderBy\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"OrderBy\"/> instance.\n\t\t/// </remarks>\n\t\t/// <param name=\"type\">The field to sort by.</param>\n\t\t/// <param name=\"order\">The sort order.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"order\"/> cannot be <see cref=\"SortOrder.None\"/>.\n\t\t/// </exception>\n\t\tpublic OrderBy (OrderByType type, SortOrder order)\n\t\t{\n\t\t\tif (order == SortOrder.None)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (order));\n\n\t\t\tOrder = order;\n\t\t\tType = type;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the field used for sorting.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the field used for sorting.\n\t\t/// </remarks>\n\t\t/// <value>The field used for sorting.</value>\n\t\tpublic OrderByType Type {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the sort order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sort order.\n\t\t/// </remarks>\n\t\t/// <value>The sort order.</value>\n\t\tpublic SortOrder Order {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Sort results by arrival date in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by arrival date in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy Arrival = new OrderBy (OrderByType.Arrival, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by arrival date in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by arrival date in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseArrival = new OrderBy (OrderByType.Arrival, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first email address in the Cc header in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first email address in the Cc header in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy Cc = new OrderBy (OrderByType.Cc, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first email address in the Cc header in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first email address in the Cc header in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseCc = new OrderBy (OrderByType.Cc, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the sent date in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the sent date in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy Date = new OrderBy (OrderByType.Date, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the sent date in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the sent date in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseDate = new OrderBy (OrderByType.Date, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first email address in the From header in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first email address in the From header in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy From = new OrderBy (OrderByType.From, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first email address in the From header in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first email address in the From header in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseFrom = new OrderBy (OrderByType.From, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first display name in the From header in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first display name in the From header in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy DisplayFrom = new OrderBy (OrderByType.DisplayFrom, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first display name in the From header in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first display name in the From header in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseDisplayFrom = new OrderBy (OrderByType.DisplayFrom, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the message size in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the message size in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy Size = new OrderBy (OrderByType.Size, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the message size in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the message size in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseSize = new OrderBy (OrderByType.Size, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the Subject header in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the Subject header in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy Subject = new OrderBy (OrderByType.Subject, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the Subject header in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the Subject header in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseSubject = new OrderBy (OrderByType.Subject, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first email address in the To header in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first email address in the To header in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy To = new OrderBy (OrderByType.To, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first email address in the To header in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first email address in the To header in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseTo = new OrderBy (OrderByType.To, SortOrder.Descending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first display name in the To header in ascending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first display name in the To header in ascending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy DisplayTo = new OrderBy (OrderByType.DisplayTo, SortOrder.Ascending);\n\n\t\t/// <summary>\n\t\t/// Sort results by the first display name in the To header in descending order.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sort results by the first display name in the To header in descending order.\n\t\t/// </remarks>\n\t\tpublic static readonly OrderBy ReverseDisplayTo = new OrderBy (OrderByType.DisplayTo, SortOrder.Descending);\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/OrderByAnnotation.cs",
    "content": "﻿//\n// OrderByAnnotation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// Specifies an annotation-based sort order for search results.\n\t/// </summary>\n\t/// <remarks>\n\t/// You can combine multiple <see cref=\"OrderBy\"/> rules to specify the sort\n\t/// order that <see cref=\"IMailFolder.Sort(SearchQuery,System.Collections.Generic.IList&lt;OrderBy&gt;,System.Threading.CancellationToken)\"/>\n\t/// should return the results in.\n\t/// </remarks>\n\tpublic class OrderByAnnotation : OrderBy\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Search.OrderByAnnotation\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"OrderByAnnotation\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"entry\">The annotation entry to sort by.</param>\n\t\t/// <param name=\"attribute\">The annotation attribute to use for sorting.</param>\n\t\t/// <param name=\"order\">The sort order.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"entry\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"attribute\"/>is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"attribute\"/> is not a valid attribute for sorting.\n\t\t/// </exception>\n\t\tpublic OrderByAnnotation (AnnotationEntry entry, AnnotationAttribute attribute, SortOrder order) : base (OrderByType.Annotation, order)\n\t\t{\n\t\t\tif (entry is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (entry));\n\n\t\t\tif (attribute is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (attribute));\n\n\t\t\tif (attribute.Name != \"value\" || attribute.Scope == AnnotationScope.Both)\n\t\t\t\tthrow new ArgumentException (\"Only the \\\"value.priv\\\" and \\\"value.shared\\\" attributes can be used for sorting.\", nameof (attribute));\n\n\t\t\tEntry = entry;\n\t\t\tAttribute = attribute;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation entry.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation entry.\n\t\t/// </remarks>\n\t\t/// <value>The annotation entry.</value>\n\t\tpublic AnnotationEntry Entry {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the annotation attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the annotation attribute.\n\t\t/// </remarks>\n\t\t/// <value>The annotation attribute.</value>\n\t\tpublic AnnotationAttribute Attribute {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/OrderByType.cs",
    "content": "﻿//\n// OrderByType.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// The field to sort by.\n\t/// </summary>\n\t/// <remarks>\n\t/// The field to sort by.\n\t/// </remarks>\n\tpublic enum OrderByType {\n\t\t/// <summary>\n\t\t/// Sort by an annotation value.\n\t\t/// </summary>\n\t\tAnnotation,\n\n\t\t/// <summary>\n\t\t/// Sort by the arrival date.\n\t\t/// </summary>\n\t\tArrival,\n\n\t\t/// <summary>\n\t\t/// Sort by the Cc header.\n\t\t/// </summary>\n\t\tCc,\n\n\t\t/// <summary>\n\t\t/// Sort by the Date header.\n\t\t/// </summary>\n\t\tDate,\n\n\t\t/// <summary>\n\t\t/// Sort by the Display Name of the From header.\n\t\t/// </summary>\n\t\tDisplayFrom,\n\n\t\t/// <summary>\n\t\t/// Sort by the Display Name of the To header.\n\t\t/// </summary>\n\t\tDisplayTo,\n\n\t\t/// <summary>\n\t\t/// Sort by the From header.\n\t\t/// </summary>\n\t\tFrom,\n\n\t\t/// <summary>\n\t\t/// Sort by the mod-sequence.\n\t\t/// </summary>\n\t\tModSeq,\n\n\t\t/// <summary>\n\t\t/// Sort by the message size.\n\t\t/// </summary>\n\t\tSize,\n\n\t\t/// <summary>\n\t\t/// Sort by the message subject.\n\t\t/// </summary>\n\t\tSubject,\n\n\t\t/// <summary>\n\t\t/// Sort by the To header.\n\t\t/// </summary>\n\t\tTo\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/SearchOptions.cs",
    "content": "﻿//\n// SearchOptions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// Advanced search options.\n\t/// </summary>\n\t/// <remarks>\n\t/// Advanced search options.\n\t/// </remarks>\n\t[Flags]\n\tpublic enum SearchOptions {\n\t\t/// <summary>\n\t\t/// No options specified.\n\t\t/// </summary>\n\t\tNone      = 0,\n\n\t\t/// <summary>\n\t\t/// Returns all of the matching unique identifiers.\n\t\t/// </summary>\n\t\tAll       = 1 << 0,\n\n\t\t/// <summary>\n\t\t/// Returns the number of messages that match the search query.\n\t\t/// </summary>\n\t\tCount     = 1 << 1,\n\n\t\t/// <summary>\n\t\t/// Returns the minimum unique identifier of the messages that match the search query.\n\t\t/// </summary>\n\t\tMin       = 1 << 2,\n\n\t\t/// <summary>\n\t\t/// Returns the maximum unique identifier of the messages that match the search query.\n\t\t/// </summary>\n\t\tMax       = 1 << 3,\n\n\t\t/// <summary>\n\t\t/// Returns the relevancy scores of the messages that match the query. Can only be used\n\t\t/// when using FUZZY search.\n\t\t/// </summary>\n\t\tRelevancy = 1 << 4\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/SearchQuery.cs",
    "content": "﻿//\n// SearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// A specialized query for searching messages in a <see cref=\"IMailFolder\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// A specialized query for searching messages in a <see cref=\"IMailFolder\"/>.\n\t/// </remarks>\n\tpublic class SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.SearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SearchQuery\"/> that matches all messages.\n\t\t/// </remarks>\n\t\tpublic SearchQuery () : this (SearchTerm.All)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.SearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SearchQuery\"/> with the specified search term.\n\t\t/// </remarks>\n\t\t/// <param name=\"term\">The search term.</param>\n\t\tprotected SearchQuery (SearchTerm term)\n\t\t{\n\t\t\tTerm = term;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the search term used by the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the search term used by the search query.\n\t\t/// </remarks>\n\t\t/// <value>The term.</value>\n\t\tpublic SearchTerm Term {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match all messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches all messages in the folder.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>ALL</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery All = new SearchQuery (SearchTerm.All);\n\n\t\t/// <summary>\n\t\t/// Create a conditional AND operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A conditional AND operation only evaluates the second operand if the first operand evaluates to true.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"BinarySearchQuery\"/> representing the conditional AND operation.</returns>\n\t\t/// <param name=\"left\">The first operand.</param>\n\t\t/// <param name=\"right\">The second operand.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"left\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"right\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic static BinarySearchQuery And (SearchQuery left, SearchQuery right)\n\t\t{\n\t\t\tif (left == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (left));\n\n\t\t\tif (right == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (right));\n\n\t\t\treturn new BinarySearchQuery (SearchTerm.And, left, right);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a conditional AND operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A conditional AND operation only evaluates the second operand if the first operand evaluates to true.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"BinarySearchQuery\"/> representing the conditional AND operation.</returns>\n\t\t/// <param name=\"expr\">An additional query to execute.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"expr\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic BinarySearchQuery And (SearchQuery expr)\n\t\t{\n\t\t\tif (expr == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (expr));\n\n\t\t\treturn new BinarySearchQuery (SearchTerm.And, this, expr);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the specified annotation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the specified annotation.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>ANNOTATION</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc5257#section-4.8\">rfc5257</a>\n\t\t/// and is therefor only available for use with IMAP servers that support the <c>ANNOTATE</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.Annotate\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <param name=\"entry\">The annotation entry.</param>\n\t\t/// <param name=\"attribute\">The annotation attribute.</param>\n\t\t/// <param name=\"value\">The annotation attribute value.</param>\n\t\t/// <returns>A <see cref=\"AnnotationSearchQuery\"/>.</returns>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"entry\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"attribute\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"attribute\"/> is not a valid attribute for searching.\n\t\t/// </exception>\n\t\tpublic static AnnotationSearchQuery AnnotationsContain (AnnotationEntry entry, AnnotationAttribute attribute, string value)\n\t\t{\n\t\t\treturn new AnnotationSearchQuery (entry, attribute, value);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Answered\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Answered\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>ANSWERED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Answered = new SearchQuery (SearchTerm.Answered);\n\n\t\t/// <summary>\n\t\t/// Match messages where the Bcc header contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the Bcc header contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>BCC</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery BccContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.BccContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages where the message body contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the message body contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>BODY</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery BodyContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.BodyContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages where the Cc header contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the Cc header contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>CC</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery CcContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.CcContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that have mod-sequence values greater than or equal to the specified mod-sequence value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have mod-sequence values greater than or equal to the specified mod-sequence value.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>MODSEQ</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc4551#section-3.4\">rfc4551</a>\n\t\t/// and is therefor only available for use with IMAP servers that support the <c>CONDSTORE</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.CondStore\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"modseq\">The mod-sequence value.</param>\n\t\tpublic static SearchQuery ChangedSince (ulong modseq)\n\t\t{\n\t\t\treturn new NumericSearchQuery (SearchTerm.ModSeq, modseq);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Deleted\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Deleted\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>DELETED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Deleted = new SearchQuery (SearchTerm.Deleted);\n\n\t\t/// <summary>\n\t\t/// Match messages that were delivered after the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were delivered after the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SINCE</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery DeliveredAfter (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.DeliveredAfter, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that were delivered before the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were delivered before the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>BEFORE</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery DeliveredBefore (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.DeliveredBefore, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that were delivered on the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were delivered on the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>ON</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery DeliveredOn (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.DeliveredOn, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Draft\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Draft\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>DRAFT</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Draft = new SearchQuery (SearchTerm.Draft);\n\n\t\t/// <summary>\n\t\t/// Match messages using a saved search filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages using a saved search filter.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>FILTER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc5466\">rfc5466</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>FILTERS</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.Filters\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"FilterSearchQuery\"/>.</returns>\n\t\t/// <param name=\"name\">The name of the saved search.</param>\n\t\tpublic static SearchQuery Filter (string name)\n\t\t{\n\t\t\treturn new FilterSearchQuery (name);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages using a saved search filter.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages using a saved search filter.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>FILTER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc5466\">rfc5466</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>FILTERS</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.Filters\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"FilterSearchQuery\"/>.</returns>\n\t\t/// <param name=\"filter\">The name of the saved search.</param>\n\t\tpublic static SearchQuery Filter (MetadataTag filter)\n\t\t{\n\t\t\treturn new FilterSearchQuery (filter);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Flagged\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Flagged\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>FLAGGED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Flagged = new SearchQuery (SearchTerm.Flagged);\n\n\t\t/// <summary>\n\t\t/// Match messages where the From header contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the From header contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>FROM</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery FromContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.FromContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Apply a fuzzy matching algorithm to the specified expression.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Applies a fuzzy matching algorithm to the specified expression.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>OLDER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc6203\">rfc6203</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>SEARCH=FUZZY</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.FuzzySearch\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"UnarySearchQuery\"/>.</returns>\n\t\t/// <param name=\"expr\">The expression</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"expr\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static UnarySearchQuery Fuzzy (SearchQuery expr)\n\t\t{\n\t\t\tif (expr == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (expr));\n\n\t\t\treturn new UnarySearchQuery (SearchTerm.Fuzzy, expr);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that have the specified flags set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have the specified flag(s) set.</para>\n\t\t/// <note type=\"note\">Maps each flag to the corresponding search key (<c>ANSWERED</c>, <c>DELETED</c>, <c>DRAFT</c>, <c>FLAGGED</c>,\n\t\t/// <c>RECENT</c> or <c>SEEN</c>) as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"flags\"/> does not specify any valid message flags.\n\t\t/// </exception>\n\t\tpublic static SearchQuery HasFlags (MessageFlags flags)\n\t\t{\n\t\t\tvar list = new List<SearchQuery> ();\n\n\t\t\tif ((flags & MessageFlags.Seen) != 0)\n\t\t\t\tlist.Add (Seen);\n\t\t\tif ((flags & MessageFlags.Answered) != 0)\n\t\t\t\tlist.Add (Answered);\n\t\t\tif ((flags & MessageFlags.Flagged) != 0)\n\t\t\t\tlist.Add (Flagged);\n\t\t\tif ((flags & MessageFlags.Deleted) != 0)\n\t\t\t\tlist.Add (Deleted);\n\t\t\tif ((flags & MessageFlags.Draft) != 0)\n\t\t\t\tlist.Add (Draft);\n\t\t\tif ((flags & MessageFlags.Recent) != 0)\n\t\t\t\tlist.Add (Recent);\n\n\t\t\tif (list.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No flags specified.\", nameof (flags));\n\n\t\t\tvar query = list[0];\n\t\t\tfor (int i = 1; i < list.Count; i++)\n\t\t\t\tquery = query.And (list[i]);\n\n\t\t\treturn query;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have any of the specified flags set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have any of the specified flags set.</para>\n\t\t/// <note type=\"note\">Maps each flag to the corresponding search key (<c>UNANSWERED</c>, <c>UNDELETED</c>, <c>UNDRAFT</c>, <c>UNFLAGGED</c>,\n\t\t/// <c>OLD</c> or <c>UNSEEN</c>) as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"flags\">The message flags.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"flags\"/> does not specify any valid message flags.\n\t\t/// </exception>\n\t\tpublic static SearchQuery NotFlags (MessageFlags flags)\n\t\t{\n\t\t\tvar list = new List<SearchQuery> ();\n\n\t\t\tif ((flags & MessageFlags.Seen) != 0)\n\t\t\t\tlist.Add (NotSeen);\n\t\t\tif ((flags & MessageFlags.Answered) != 0)\n\t\t\t\tlist.Add (NotAnswered);\n\t\t\tif ((flags & MessageFlags.Flagged) != 0)\n\t\t\t\tlist.Add (NotFlagged);\n\t\t\tif ((flags & MessageFlags.Deleted) != 0)\n\t\t\t\tlist.Add (NotDeleted);\n\t\t\tif ((flags & MessageFlags.Draft) != 0)\n\t\t\t\tlist.Add (NotDraft);\n\t\t\tif ((flags & MessageFlags.Recent) != 0)\n\t\t\t\tlist.Add (NotRecent);\n\n\t\t\tif (list.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No flags specified.\", nameof (flags));\n\n\t\t\tvar query = list[0];\n\t\t\tfor (int i = 1; i < list.Count; i++)\n\t\t\t\tquery = query.And (list[i]);\n\n\t\t\treturn query;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that have the specified keyword set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have the specified keyword set.</para>\n\t\t/// <para>A keyword is a user-defined message flag that can be set (or unset) on a message.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>KEYWORD</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"keyword\">The keyword.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keyword\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"keyword\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery HasKeyword (string keyword)\n\t\t{\n\t\t\tif (keyword == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keyword));\n\n\t\t\tif (keyword.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The keyword cannot be an empty string.\", nameof (keyword));\n\n\t\t\treturn new TextSearchQuery (SearchTerm.Keyword, keyword);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that have all of the specified keywords set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have all of the specified keywords set.</para>\n\t\t/// <para>A keyword is a user-defined message flag that can be set (or unset) on a message.</para>\n\t\t/// <note type=\"note\">This is equivalent to AND-ing multiple <c>KEYWORD</c> search keys as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"keywords\">The keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"keywords\"/> is <see langword=\"null\" /> or empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No keywords were given.</para>\n\t\t/// </exception>\n\t\tpublic static SearchQuery HasKeywords (params string[] keywords)\n\t\t{\n\t\t\treturn HasKeywords ((IEnumerable<string>) keywords);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that have all of the specified keywords set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have all of the specified keywords set.</para>\n\t\t/// <para>A keyword is a user-defined message flag that can be set (or unset) on a message.</para>\n\t\t/// <note type=\"note\">This is equivalent to AND-ing multiple <c>KEYWORD</c> search keys as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"keywords\">The keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"keywords\"/> is <see langword=\"null\" /> or empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No keywords were given.</para>\n\t\t/// </exception>\n\t\tpublic static SearchQuery HasKeywords (IEnumerable<string> keywords)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tvar list = new List<SearchQuery> ();\n\n\t\t\tforeach (var keyword in keywords) {\n\t\t\t\tif (string.IsNullOrEmpty (keyword))\n\t\t\t\t\tthrow new ArgumentException (\"Cannot search for null or empty keywords.\", nameof (keywords));\n\n\t\t\t\tlist.Add (new TextSearchQuery (SearchTerm.Keyword, keyword));\n\t\t\t}\n\n\t\t\tif (list.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No keywords specified.\", nameof (keywords));\n\n\t\t\tvar query = list[0];\n\t\t\tfor (int i = 1; i < list.Count; i++)\n\t\t\t\tquery = query.And (list[i]);\n\n\t\t\treturn query;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the specified keyword set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the specified keyword set.</para>\n\t\t/// <para>A keyword is a user-defined message flag that can be set (or unset) on a message.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UNKEYWORD</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"keyword\">The keyword.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keyword\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"keyword\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery NotKeyword (string keyword)\n\t\t{\n\t\t\tif (keyword == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keyword));\n\n\t\t\tif (keyword.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"The keyword cannot be an empty string.\", nameof (keyword));\n\n\t\t\treturn new TextSearchQuery (SearchTerm.NotKeyword, keyword);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have any of the specified keywords set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have any of the specified keywords set.</para>\n\t\t/// <para>A keyword is a user-defined message flag that can be set (or unset) on a message.</para>\n\t\t/// <note type=\"note\">This is equivalent to AND-ing multiple <c>UNKEYWORD</c> search keys as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"keywords\">The keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"keywords\"/> is <see langword=\"null\" /> or empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No keywords were given.</para>\n\t\t/// </exception>\n\t\tpublic static SearchQuery NotKeywords (params string[] keywords)\n\t\t{\n\t\t\treturn NotKeywords ((IEnumerable<string>) keywords);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have any of the specified keywords set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have any of the specified keywords set.</para>\n\t\t/// <para>A keyword is a user-defined message flag that can be set (or unset) on a message.</para>\n\t\t/// <note type=\"note\">This is equivalent to AND-ing multiple <c>UNKEYWORD</c> search keys as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"SearchQuery\"/>.</returns>\n\t\t/// <param name=\"keywords\">The keywords.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <para>One or more of the <paramref name=\"keywords\"/> is <see langword=\"null\" /> or empty.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para>No keywords were given.</para>\n\t\t/// </exception>\n\t\tpublic static SearchQuery NotKeywords (IEnumerable<string> keywords)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tvar list = new List<SearchQuery> ();\n\n\t\t\tforeach (var keyword in keywords) {\n\t\t\t\tif (string.IsNullOrEmpty (keyword))\n\t\t\t\t\tthrow new ArgumentException (\"Cannot search for null or empty keywords.\", nameof (keywords));\n\n\t\t\t\tlist.Add (new TextSearchQuery (SearchTerm.NotKeyword, keyword));\n\t\t\t}\n\n\t\t\tif (list.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"No flags specified.\", nameof (keywords));\n\n\t\t\tvar query = list[0];\n\t\t\tfor (int i = 1; i < list.Count; i++)\n\t\t\t\tquery = query.And (list[i]);\n\n\t\t\treturn query;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages where the specified header contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the specified header contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>HEADER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"HeaderSearchQuery\"/>.</returns>\n\t\t/// <param name=\"field\">The header field to match against.</param>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"field\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"text\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"field\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static HeaderSearchQuery HeaderContains (string field, string text)\n\t\t{\n\t\t\tif (field == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (field));\n\n\t\t\tif (field.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search an empty header field name.\", nameof (field));\n\n\t\t\tif (text == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (text));\n\n\t\t\treturn new HeaderSearchQuery (field, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that are larger than the specified number of octets.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that are larger than the specified number of octets.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>LARGER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"NumericSearchQuery\"/>.</returns>\n\t\t/// <param name=\"octets\">The number of octets.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"octets\"/> is a negative value.\n\t\t/// </exception>\n\t\tpublic static NumericSearchQuery LargerThan (int octets)\n\t\t{\n\t\t\tif (octets < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (octets));\n\n\t\t\treturn new NumericSearchQuery (SearchTerm.LargerThan, (ulong) octets);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that contain the specified text in either the header or the body.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that contain the specified text in either the header or the body.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>TEXT</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery MessageContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.MessageContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Recent\"/> flag set but not the <see cref=\"MessageFlags.Seen\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Recent\"/> flag set but not the <see cref=\"MessageFlags.Seen\"/>.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>NEW</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery New = new SearchQuery (SearchTerm.New);\n\n\t\t/// <summary>\n\t\t/// Create a logical negation of the specified expression.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Creates a logical negation of the specified expression.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>NOT</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"UnarySearchQuery\"/>.</returns>\n\t\t/// <param name=\"expr\">The expression</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"expr\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static UnarySearchQuery Not (SearchQuery expr)\n\t\t{\n\t\t\tif (expr == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (expr));\n\n\t\t\treturn new UnarySearchQuery (SearchTerm.Not, expr);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Answered\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Answered\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UNANSWERED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery NotAnswered = new SearchQuery (SearchTerm.NotAnswered);\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Deleted\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Deleted\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UNDELETED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery NotDeleted = new SearchQuery (SearchTerm.NotDeleted);\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Draft\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Draft\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UNDRAFT</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery NotDraft = new SearchQuery (SearchTerm.NotDraft);\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Flagged\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Flagged\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UNFLAGGED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery NotFlagged = new SearchQuery (SearchTerm.NotFlagged);\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Recent\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Recent\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>OLD</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery NotRecent = new SearchQuery (SearchTerm.NotRecent);\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Seen\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Seen\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UNSEEN</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery NotSeen = new SearchQuery (SearchTerm.NotSeen);\n\n\t\t/// <summary>\n\t\t/// Match messages that do not have the <see cref=\"MessageFlags.Recent\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that do not have the <see cref=\"MessageFlags.Recent\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>OLD</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Old = new SearchQuery (SearchTerm.NotRecent);\n\n\t\t/// <summary>\n\t\t/// Match messages older than the specified number of seconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages older than the specified number of seconds.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>OLDER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc5032\">rfc5032</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>WITHIN</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.Within\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"NumericSearchQuery\"/>.</returns>\n\t\t/// <param name=\"seconds\">The number of seconds.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// The number of seconds cannot be less than <c>1</c>.\n\t\t/// </exception>\n\t\tpublic static NumericSearchQuery OlderThan (int seconds)\n\t\t{\n\t\t\tif (seconds < 1)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (seconds));\n\n\t\t\treturn new NumericSearchQuery (SearchTerm.Older, (ulong) seconds);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a conditional OR operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>A conditional OR operation only evaluates the second operand if the first operand evaluates to false.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>OR</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"BinarySearchQuery\"/> representing the conditional OR operation.</returns>\n\t\t/// <param name=\"left\">The first operand.</param>\n\t\t/// <param name=\"right\">The second operand.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"left\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"right\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic static BinarySearchQuery Or (SearchQuery left, SearchQuery right)\n\t\t{\n\t\t\tif (left == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (left));\n\n\t\t\tif (right == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (right));\n\n\t\t\treturn new BinarySearchQuery (SearchTerm.Or, left, right);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create a conditional OR operation.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>A conditional OR operation only evaluates the second operand if the first operand evaluates to true.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>OR</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"BinarySearchQuery\"/> representing the conditional AND operation.</returns>\n\t\t/// <param name=\"expr\">An additional query to execute.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"expr\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic BinarySearchQuery Or (SearchQuery expr)\n\t\t{\n\t\t\tif (expr == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (expr));\n\n\t\t\treturn new BinarySearchQuery (SearchTerm.Or, this, expr);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Recent\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Recent\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>RECENT</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Recent = new SearchQuery (SearchTerm.Recent);\n\n\t\t/// <summary>\n\t\t/// Match all messages in the mailbox when the underlying storage of that mailbox supports\n\t\t/// the save date attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches all messages in the mailbox when the underlying storage of that mailbox supports\n\t\t/// the save date attribute. Conversely, it matches no messages in the mailbox when the save\n\t\t/// date attribute is not supported.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SAVEDATESUPPORTED</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc8514\">rfc8514, section 4.3</a>\n\t\t/// and is therefor only available for use with IMAP servers that support the <c>SAVEDATE</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.SaveDate\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery SaveDateSupported = new SearchQuery (SearchTerm.SaveDateSupported);\n\n\t\t/// <summary>\n\t\t/// Match messages that were saved to the mailbox before the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were saved to the mailbox before the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SAVEDBEFORE</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc8514\">rfc8514, section 4.3</a>\n\t\t/// and is therefor only available for use with IMAP servers that support the <c>SAVEDATE</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.SaveDate\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery SavedBefore (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.SavedBefore, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that were saved to the mailbox on the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were saved to the mailbox on the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SAVEDON</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc8514\">rfc8514, section 4.3</a>\n\t\t/// and is therefor only available for use with IMAP servers that support the <c>SAVEDATE</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.SaveDate\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery SavedOn (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.SavedOn, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that were saved to the mailbox since the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were saved to the mailbox since the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SAVEDSINCE</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc8514\">rfc8514, section 4.3</a>\n\t\t/// and is therefor only available for use with IMAP servers that support the <c>SAVEDATE</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.SaveDate\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery SavedSince (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.SavedSince, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages with the <see cref=\"MessageFlags.Seen\"/> flag set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages with the <see cref=\"MessageFlags.Seen\"/> flag set.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SEEN</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\tpublic static readonly SearchQuery Seen = new SearchQuery (SearchTerm.Seen);\n\n\t\t/// <summary>\n\t\t/// Match messages that were sent before the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were sent before the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SENTBEFORE</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery SentBefore (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.SentBefore, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that were sent on the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were sent on the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SENTON</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery SentOn (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.SentOn, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that were sent since the specified date.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that were sent since the specified date.</para>\n\t\t/// <para>The resolution of this search query does not include the time.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SENTSINCE</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"DateSearchQuery\"/>.</returns>\n\t\t/// <param name=\"date\">The date.</param>\n\t\tpublic static DateSearchQuery SentSince (DateTime date)\n\t\t{\n\t\t\treturn new DateSearchQuery (SearchTerm.SentSince, date);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that are smaller than the specified number of octets.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that are smaller than the specified number of octets.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SMALLER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"NumericSearchQuery\"/>.</returns>\n\t\t/// <param name=\"octets\">The number of octets.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"octets\"/> is a negative value.\n\t\t/// </exception>\n\t\tpublic static NumericSearchQuery SmallerThan (int octets)\n\t\t{\n\t\t\tif (octets < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (octets));\n\n\t\t\treturn new NumericSearchQuery (SearchTerm.SmallerThan, (ulong) octets);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages where the Subject header contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the Subject header contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>SUBJECT</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery SubjectContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.SubjectContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages where the To header contains the specified text.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages where the To header contains the specified text.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>TO</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery ToContains (string text)\n\t\t{\n\t\t\treturn new TextSearchQuery (SearchTerm.ToContains, text);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Limit the search query to messages with the specified unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Limits the search query to messages with the specified unique identifiers.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>UID</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-6.4.4\">rfc3501</a>.</note>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"UidSearchQuery\"/>.</returns>\n\t\t/// <param name=\"uids\">The unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uids\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static UidSearchQuery Uids (IList<UniqueId> uids)\n\t\t{\n\t\t\treturn new UidSearchQuery (uids);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages younger than the specified number of seconds.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages younger than the specified number of seconds.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>YOUNGER</c> search key as defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc5032\">rfc5032</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>WITHIN</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.Within\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"NumericSearchQuery\"/>.</returns>\n\t\t/// <param name=\"seconds\">The number of seconds.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// The number of seconds cannot be less than <c>1</c>.\n\t\t/// </exception>\n\t\tpublic static NumericSearchQuery YoungerThan (int seconds)\n\t\t{\n\t\t\tif (seconds < 1)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (seconds));\n\n\t\t\treturn new NumericSearchQuery (SearchTerm.Younger, (ulong) seconds);\n\t\t}\n\n\t\t#region GMail extensions\n\n\t\t/// <summary>\n\t\t/// Match messages that have the specified GMail message identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have the specified GMail message identifier.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>X-GM-MSGID</c> search key as defined in <a href=\"https://developers.google.com/gmail/imap_extensions\">Google's IMAP extensions</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>X-GM-EXT1</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.GMailExt1\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"NumericSearchQuery\"/>.</returns>\n\t\t/// <param name=\"id\">The GMail message identifier.</param>\n\t\tpublic static NumericSearchQuery GMailMessageId (ulong id)\n\t\t{\n\t\t\treturn new NumericSearchQuery (SearchTerm.GMailMessageId, id);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages belonging to the specified GMail thread.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages belonging to the specified GMail thread.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>X-GM-THRID</c> search key as defined in <a href=\"https://developers.google.com/gmail/imap_extensions\">Google's IMAP extensions</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>X-GM-EXT1</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.GMailExt1\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"NumericSearchQuery\"/>.</returns>\n\t\t/// <param name=\"thread\">The GMail thread.</param>\n\t\tpublic static NumericSearchQuery GMailThreadId (ulong thread)\n\t\t{\n\t\t\treturn new NumericSearchQuery (SearchTerm.GMailThreadId, thread);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages that have the specified GMail label.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages that have the specified GMail label.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>X-GM-LABELS</c> search key as defined in <a href=\"https://developers.google.com/gmail/imap_extensions\">Google's IMAP extensions</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>X-GM-EXT1</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.GMailExt1\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"label\">The GMail label.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"label\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"label\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery HasGMailLabel (string label)\n\t\t{\n\t\t\tif (label == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (label));\n\n\t\t\tif (label.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search for an empty string.\", nameof (label));\n\n\t\t\treturn new TextSearchQuery (SearchTerm.GMailLabels, label);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Match messages using the GMail search expression.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Matches messages using Google's custom message search syntax.</para>\n\t\t/// <note type=\"note\">This is equivalent to the <c>X-GM-RAW</c> search key as defined in <a href=\"https://developers.google.com/gmail/imap_extensions\">Google's IMAP extensions</a> and is therefor only available\n\t\t/// for use with IMAP servers that support the <c>X-GM-EXT1</c> extension.</note>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapCapabilities.GMailExt1\"/>\n\t\t/// <seealso cref=\"MailKit.Net.Imap.ImapClient.Capabilities\"/>\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"TextSearchQuery\"/>.</returns>\n\t\t/// <param name=\"expression\">The raw GMail search text.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"expression\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"expression\"/> is empty.\n\t\t/// </exception>\n\t\tpublic static TextSearchQuery GMailRawSearch (string expression)\n\t\t{\n\t\t\tif (expression == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (expression));\n\n\t\t\tif (expression.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search for an empty string.\", nameof (expression));\n\n\t\t\treturn new TextSearchQuery (SearchTerm.GMailRaw, expression);\n\t\t}\n\n\t\t#endregion\n\n\t\tinternal virtual SearchQuery Optimize (ISearchQueryOptimizer optimizer)\n\t\t{\n\t\t\treturn optimizer.Reduce (this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/SearchResults.cs",
    "content": "﻿//\n// SearchResults.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// The results of a search.\n\t/// </summary>\n\t/// <remarks>\n\t/// The results of a search.\n\t/// </remarks>\n\tpublic class SearchResults\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Search.SearchResults\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SearchResults\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"uidValidity\">The UID validity value.</param>\n\t\t/// <param name=\"order\">The sort-order to use for the unique identifiers.</param>\n\t\tpublic SearchResults (uint uidValidity, SortOrder order = SortOrder.None)\n\t\t{\n\t\t\tUniqueIds = new UniqueIdSet (uidValidity, order);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Search.SearchResults\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SearchResults\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"order\">The sort-order to use for the unique identifiers.</param>\n\t\tpublic SearchResults (SortOrder order = SortOrder.None)\n\t\t{\n\t\t\tUniqueIds = new UniqueIdSet (order);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the unique identifiers of the messages that matched the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the unique identifiers of the messages that matched the search query.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifiers.</value>\n\t\tpublic IList<UniqueId> UniqueIds {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the number of messages that matched the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the number of messages that matched the search query.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the minimum unique identifier that matched the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the minimum unique identifier that matched the search query.\n\t\t/// </remarks>\n\t\t/// <value>The minimum unique identifier.</value>\n\t\tpublic UniqueId? Min {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the maximum unique identifier that matched the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the maximum unique identifier that matched the search query.\n\t\t/// </remarks>\n\t\t/// <value>The maximum unique identifier.</value>\n\t\tpublic UniqueId? Max {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the mod-sequence identifier of the messages that matched the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the mod-sequence identifier of the messages that matched the search query.\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence identifier.</value>\n\t\tpublic ulong? ModSeq {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the relevancy scores of the messages that matched the search query.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the relevancy scores of the messages that matched the search query.\n\t\t/// </remarks>\n\t\t/// <value>The relevancy scores.</value>\n\t\tpublic IList<byte>? Relevancy {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/SearchTerm.cs",
    "content": "﻿//\n// SearchTerm.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// A search term.\n\t/// </summary>\n\t/// <remarks>\n\t/// The search term as used by <see cref=\"SearchQuery\"/>.\n\t/// </remarks>\n\tpublic enum SearchTerm {\n\t\t/// <summary>\n\t\t/// A search term that matches all messages.\n\t\t/// </summary>\n\t\tAll,\n\n\t\t/// <summary>\n\t\t/// A search term that logically combines 2 or more other\n\t\t/// search expressions such that messages must match both\n\t\t/// expressions.\n\t\t/// </summary>\n\t\tAnd,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have the specified annotation.\n\t\t/// </summary>\n\t\tAnnotation,\n\n\t\t/// <summary>\n\t\t/// A search term that matches answered messages.\n\t\t/// </summary>\n\t\tAnswered,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within the <c>Bcc</c> header.\n\t\t/// </summary>\n\t\tBccContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within the body of the message.\n\t\t/// </summary>\n\t\tBodyContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within the <c>Cc</c> header.\n\t\t/// </summary>\n\t\tCcContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches deleted messages.\n\t\t/// </summary>\n\t\tDeleted,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages delivered after a specified date.\n\t\t/// </summary>\n\t\tDeliveredAfter,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages delivered before a specified date.\n\t\t/// </summary>\n\t\tDeliveredBefore,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages delivered on a specified date.\n\t\t/// </summary>\n\t\tDeliveredOn,\n\n\t\t/// <summary>\n\t\t/// A search term that matches draft messages.\n\t\t/// </summary>\n\t\tDraft,\n\n\t\t/// <summary>\n\t\t/// A search term that makes use of a predefined filter.\n\t\t/// </summary>\n\t\tFilter,\n\n\t\t/// <summary>\n\t\t/// A search term that matches flagged messages.\n\t\t/// </summary>\n\t\tFlagged,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within the <c>From</c> header.\n\t\t/// </summary>\n\t\tFromContains,\n\n\t\t/// <summary>\n\t\t/// A search term that modifies another search expression to allow\n\t\t/// fuzzy matching.\n\t\t/// </summary>\n\t\tFuzzy,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within a particular header.\n\t\t/// </summary>\n\t\tHeaderContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// keyword.\n\t\t/// </summary>\n\t\tKeyword,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are larger than a\n\t\t/// specified number of bytes.\n\t\t/// </summary>\n\t\tLargerThan,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string anywhere within the message.\n\t\t/// </summary>\n\t\tMessageContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have the specified\n\t\t/// modification sequence value.\n\t\t/// </summary>\n\t\tModSeq,\n\n\t\t/// <summary>\n\t\t/// A search term that matches new messages.\n\t\t/// </summary>\n\t\tNew,\n\n\t\t/// <summary>\n\t\t/// A search term that modifies another search expression such that\n\t\t/// messages must match the logical inverse of the expression.\n\t\t/// </summary>\n\t\tNot,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have not been answered.\n\t\t/// </summary>\n\t\tNotAnswered,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have not been deleted.\n\t\t/// </summary>\n\t\tNotDeleted,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are not drafts.\n\t\t/// </summary>\n\t\tNotDraft,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have not been flagged.\n\t\t/// </summary>\n\t\tNotFlagged,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that do not contain a specified\n\t\t/// keyword.\n\t\t/// </summary>\n\t\tNotKeyword,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are not recent.\n\t\t/// </summary>\n\t\tNotRecent,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have not been seen.\n\t\t/// </summary>\n\t\tNotSeen,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are older than a specified date.\n\t\t/// </summary>\n\t\tOlder,\n\n\t\t/// <summary>\n\t\t/// A search term that logically combines 2 or more other\n\t\t/// search expressions such that messages only need to match\n\t\t/// one of the expressions.\n\t\t/// </summary>\n\t\tOr,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are recent.\n\t\t/// </summary>\n\t\tRecent,\n\n\t\t/// <summary>\n\t\t/// A search term that matches all messages in the mailbox when the underlying storage of\n\t\t/// that mailbox supports the save date attribute. Conversely, it matches no messages in\n\t\t/// the mailbox when the save date attribute is not supported.\n\t\t/// </summary>\n\t\tSaveDateSupported,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that were saved to the mailbox before a specified date.\n\t\t/// </summary>\n\t\tSavedBefore,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that were saved to the mailbox on a specified date.\n\t\t/// </summary>\n\t\tSavedOn,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that were saved to the mailbox since a specified date.\n\t\t/// </summary>\n\t\tSavedSince,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that have been seen.\n\t\t/// </summary>\n\t\tSeen,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that were sent before a specified date.\n\t\t/// </summary>\n\t\tSentBefore,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that were sent on a specified date.\n\t\t/// </summary>\n\t\tSentOn,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that were sent since a specified date.\n\t\t/// </summary>\n\t\tSentSince,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are smaller than a\n\t\t/// specified number of bytes.\n\t\t/// </summary>\n\t\tSmallerThan,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within the <c>Subject</c> header.\n\t\t/// </summary>\n\t\tSubjectContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that contain a specified\n\t\t/// string within the <c>To</c> header.\n\t\t/// </summary>\n\t\tToContains,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages included within a specified\n\t\t/// set of unique identifiers.\n\t\t/// </summary>\n\t\tUid,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages that are younger than a specified date.\n\t\t/// </summary>\n\t\tYounger,\n\n\t\t// GMail SEARCH extensions\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages with a specified GMail message identifier.\n\t\t/// </summary>\n\t\tGMailMessageId,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages with a specified GMail thread (conversation)\n\t\t/// identifier.\n\t\t/// </summary>\n\t\tGMailThreadId,\n\n\t\t/// <summary>\n\t\t/// A search term that matches messages with the specified GMail labels.\n\t\t/// </summary>\n\t\tGMailLabels,\n\n\t\t/// <summary>\n\t\t/// A search term that uses the GMail search syntax.\n\t\t/// </summary>\n\t\tGMailRaw,\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/SortOrder.cs",
    "content": "﻿//\n// SortOrder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Search {\n\t/// <summary>\n\t/// An enumeration of sort orders.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of sort orders.\n\t/// </remarks>\n\tpublic enum SortOrder {\n\t\t/// <summary>\n\t\t/// No sorting order.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// Sort in ascending order.\n\t\t/// </summary>\n\t\tAscending,\n\n\t\t/// <summary>\n\t\t/// Sort in descending order.\n\t\t/// </summary>\n\t\tDescending\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/TextSearchQuery.cs",
    "content": "﻿//\n// TextSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search\n{\n\t/// <summary>\n\t/// A text-based search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// A text-based search query.\n\t/// </remarks>\n\tpublic class TextSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.TextSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new text-based search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"term\">The search term.</param>\n\t\t/// <param name=\"text\">The text to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"text\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"text\"/> is empty.\n\t\t/// </exception>\n\t\tpublic TextSearchQuery (SearchTerm term, string text) : base (term)\n\t\t{\n\t\t\tif (text == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (text));\n\n\t\t\tif (text.Length == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search for an empty string.\", nameof (text));\n\n\t\t\tText = text;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the text to match against.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the text to match against.\n\t\t/// </remarks>\n\t\t/// <value>The text.</value>\n\t\tpublic string Text {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/UidSearchQuery.cs",
    "content": "﻿//\n// UidSearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit.Search\n{\n\t/// <summary>\n\t/// A unique identifier-based search query.\n\t/// </summary>\n\t/// <remarks>\n\t/// A unique identifier-based search query.\n\t/// </remarks>\n\tpublic class UidSearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.UidSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new unique identifier-based search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The unique identifiers to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uids\"/> is empty.\n\t\t/// </exception>\n\t\tpublic UidSearchQuery (IList<UniqueId> uids) : base (SearchTerm.Uid)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (uids.Count == 0)\n\t\t\t\tthrow new ArgumentException (\"Cannot search for an empty set of unique identifiers.\", nameof (uids));\n\n\t\t\tUids = uids;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.UidSearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new unique identifier-based search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"uid\">The unique identifier to match against.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is an invalid unique identifier.\n\t\t/// </exception>\n\t\tpublic UidSearchQuery (UniqueId uid) : base (SearchTerm.Uid)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"Cannot search for an invalid unique identifier.\", nameof (uid));\n\n\t\t\tUids = new UniqueIdSet (SortOrder.Ascending) {\n\t\t\t\tuid\n\t\t\t};\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the unique identifiers to match against.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the unique identifiers to match against.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifiers.</value>\n\t\tpublic new IList<UniqueId> Uids {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Search/UnarySearchQuery.cs",
    "content": "﻿//\n// UnarySearchQuery.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Search\n{\n\t/// <summary>\n\t/// A unary search query such as a NOT expression.\n\t/// </summary>\n\t/// <remarks>\n\t/// A unary search query such as a NOT expression.\n\t/// </remarks>\n\tpublic class UnarySearchQuery : SearchQuery\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.Search.UnarySearchQuery\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new unary search query.\n\t\t/// </remarks>\n\t\t/// <param name=\"term\">The search term.</param>\n\t\t/// <param name=\"operand\">The operand.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"operand\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic UnarySearchQuery (SearchTerm term, SearchQuery operand) : base (term)\n\t\t{\n\t\t\tif (operand == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (operand));\n\n\t\t\tOperand = operand;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the inner operand.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the inner operand.\n\t\t/// </remarks>\n\t\t/// <value>The operand.</value>\n\t\tpublic SearchQuery Operand {\n\t\t\tget; private set;\n\t\t}\n\n\t\tinternal override SearchQuery Optimize (ISearchQueryOptimizer optimizer)\n\t\t{\n\t\t\tvar operand = Operand.Optimize (optimizer);\n\t\t\tSearchQuery unary;\n\n\t\t\tif (operand != Operand)\n\t\t\t\tunary = new UnarySearchQuery (Term, operand);\n\t\t\telse\n\t\t\t\tunary = this;\n\n\t\t\treturn optimizer.Reduce (unary);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/AuthenticationException.cs",
    "content": "﻿//\n// AuthenticationException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The exception that is thrown when there is an authentication error.\n\t/// </summary>\n\t/// <remarks>\n\t/// The exception that is thrown when there is an authentication error.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class AuthenticationException : Exception\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AuthenticationException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AuthenticationException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected AuthenticationException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AuthenticationException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AuthenticationException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tpublic AuthenticationException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AuthenticationException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AuthenticationException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic AuthenticationException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"AuthenticationException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"AuthenticationException\"/>.\n\t\t/// </remarks>\n\t\tpublic AuthenticationException () : base (\"Authentication failed.\")\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/KeyedHashAlgorithm.cs",
    "content": "﻿//\n// KeyedHashAlgorithm.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2019 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing Windows.Storage.Streams;\nusing Windows.Security.Cryptography;\nusing Windows.Security.Cryptography.Core;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// A keyed hash algorithm.\n\t/// </summary>\n\t/// <remarks>\n\t/// A keyed hash algorithm.\n\t/// </remarks>\n\tpublic abstract class KeyedHashAlgorithm : IDisposable\n\t{\n\t\tCryptographicHash hmac;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.KeyedHashAlgorithm\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new keyed hash algorithm context.\n\t\t/// </remarks>\n\t\t/// <param name=\"algorithm\">The MAC algorithm name.</param>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tprotected KeyedHashAlgorithm (string algorithm, byte[] key)\n\t\t{\n\t\t\tvar mac = MacAlgorithmProvider.OpenAlgorithm (algorithm);\n\t\t\tvar buf = CryptographicBuffer.CreateFromByteArray (key);\n\t\t\thmac = mac.CreateHash (buf);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Computes the hash code for the buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Computes the hash code for the buffer.\n\t\t/// </remarks>\n\t\t/// <returns>The computed hash code.</returns>\n\t\t/// <param name=\"buffer\">The buffer.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"buffer\"/> is <c>null</c>.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ObjectDisposedException\">\n\t\t/// The keyed hash algorithm context has been disposed.\n\t\t/// </exception>\n\t\tpublic byte[] ComputeHash (byte[] buffer)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (\"data\");\n\n\t\t\thmac.Append (CryptographicBuffer.CreateFromByteArray (buffer));\n\t\t\tvar value = hmac.GetValueAndReset ();\n\t\t\tbyte[] hash;\n\n\t\t\tCryptographicBuffer.CopyToByteArray (value, out hash);\n\n\t\t\treturn hash;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Releases all resource used by the <see cref=\"MailKit.Security.KeyedHashAlgorithm\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>Call <see cref=\"Dispose()\"/> when you are finished using the <see cref=\"MailKit.Security.KeyedHashAlgorithm\"/>. The\n\t\t/// <see cref=\"Dispose()\"/> method leaves the <see cref=\"MailKit.Security.KeyedHashAlgorithm\"/> in an unusable state. After calling\n\t\t/// <see cref=\"Dispose()\"/>, you must release all references to the <see cref=\"MailKit.Security.KeyedHashAlgorithm\"/> so the\n\t\t/// garbage collector can reclaim the memory that the <see cref=\"MailKit.Security.KeyedHashAlgorithm\"/> was occupying.</remarks>\n\t\tpublic void Dispose ()\n\t\t{\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// The HMAC SHA-1 algorithm.\n\t/// </summary>\n\t/// <remarks>\n\t/// The HMAC SHA-1 algorithm.\n\t/// </remarks>\n\tpublic class HMACSHA1 : KeyedHashAlgorithm\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.HMACSHA1\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new HMAC SHA-1 context.\n\t\t/// </remarks>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tpublic HMACSHA1 (byte[] key) : base (MacAlgorithmNames.HmacSha1, key)\n\t\t{\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// The HMAC SHA-256 algorithm.\n\t/// </summary>\n\t/// <remarks>\n\t/// The HMAC SHA-256 algorithm.\n\t/// </remarks>\n\tpublic class HMACSHA256 : KeyedHashAlgorithm\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.HMACSHA256\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new HMAC SHA-256 context.\n\t\t/// </remarks>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tpublic HMACSHA256 (byte[] key) : base (MacAlgorithmNames.HmacSha256, key)\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/BitConverterLE.cs",
    "content": "//\n// Mono.Security.BitConverterLE.cs\n//  Like System.BitConverter but always little endian\n//\n// Author: Bernie Solomon\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit.Security.Ntlm {\n\tstatic class BitConverterLE\n\t{\n\t\tunsafe static byte[] GetULongBytes (byte *bytes)\n\t\t{\n\t\t\tif (BitConverter.IsLittleEndian)\n\t\t\t\treturn new [] { bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7] };\n\n\t\t\treturn new [] { bytes[7], bytes[6], bytes[5], bytes[4], bytes[3], bytes[2], bytes[1], bytes[0] };\n\t\t}\n\n\t\tunsafe internal static byte[] GetBytes (long value)\n\t\t{\n\t\t\treturn GetULongBytes ((byte *) &value);\n\t\t}\n\n\t\tunsafe static void UShortFromBytes (byte *dst, byte[] src, int startIndex)\n\t\t{\n\t\t\tif (BitConverter.IsLittleEndian) {\n\t\t\t\tdst[0] = src[startIndex];\n\t\t\t\tdst[1] = src[startIndex + 1];\n\t\t\t} else {\n\t\t\t\tdst[0] = src[startIndex + 1];\n\t\t\t\tdst[1] = src[startIndex];\n\t\t\t}\n\t\t}\n\n\t\tunsafe static void UIntFromBytes (byte *dst, byte[] src, int startIndex)\n\t\t{\n\t\t\tif (BitConverter.IsLittleEndian) {\n\t\t\t\tdst[0] = src[startIndex];\n\t\t\t\tdst[1] = src[startIndex + 1];\n\t\t\t\tdst[2] = src[startIndex + 2];\n\t\t\t\tdst[3] = src[startIndex + 3];\n\t\t\t} else {\n\t\t\t\tdst[0] = src[startIndex + 3];\n\t\t\t\tdst[1] = src[startIndex + 2];\n\t\t\t\tdst[2] = src[startIndex + 1];\n\t\t\t\tdst[3] = src[startIndex];\n\t\t\t}\n\t\t}\n\n\t\tpublic unsafe static short ToInt16 (byte[] value, int startIndex)\n\t\t{\n\t\t\tshort ret;\n\n\t\t\tUShortFromBytes ((byte *) &ret, value, startIndex);\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tpublic unsafe static int ToInt32 (byte[] value, int startIndex)\n\t\t{\n\t\t\tint ret;\n\n\t\t\tUIntFromBytes ((byte *) &ret, value, startIndex);\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tpublic unsafe static ushort ToUInt16 (byte[] value, int startIndex)\n\t\t{\n\t\t\tushort ret;\n\n\t\t\tUShortFromBytes ((byte *) &ret, value, startIndex);\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tpublic unsafe static uint ToUInt32 (byte[] value, int startIndex)\n\t\t{\n\t\t\tuint ret;\n\n\t\t\tUIntFromBytes ((byte *) &ret, value, startIndex);\n\n\t\t\treturn ret;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/DES.cs",
    "content": "﻿//\n// DES.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2017 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Security.Cryptography;\n\nusing Org.BouncyCastle.Crypto.Engines;\nusing Org.BouncyCastle.Crypto.Parameters;\n\nnamespace MailKit.Security.Ntlm {\n\tclass DES : SymmetricAlgorithm\n\t{\n\t\tDES ()\n\t\t{\n\t\t\tBlockSize = 64;\n\t\t\tKeySize = 64;\n\t\t}\n\n\t\tpublic static DES Create ()\n\t\t{\n\t\t\treturn new DES ();\n\t\t}\n\n\t\tpublic override KeySizes[] LegalBlockSizes {\n\t\t\tget { return new [] { new KeySizes (64, 64, 0) }; }\n\t\t}\n\n\t\tpublic override KeySizes[] LegalKeySizes {\n\t\t\tget { return new [] { new KeySizes (64, 64, 0) }; }\n\t\t}\n\n\t\tpublic override void GenerateIV ()\n\t\t{\n\t\t\tvar iv = new byte[8];\n\n\t\t\tusing (var rng = RandomNumberGenerator.Create ())\n\t\t\t\trng.GetBytes (iv);\n\n\t\t\tIV = iv;\n\t\t}\n\n\t\tpublic override void GenerateKey ()\n\t\t{\n\t\t\tvar key = new byte[8];\n\n\t\t\tusing (var rng = RandomNumberGenerator.Create ()) {\n\t\t\t\tdo {\n\t\t\t\t\trng.GetBytes (key);\n\t\t\t\t} while (IsWeakKey (key) || IsSemiWeakKey (key));\n\t\t\t}\n\n\t\t\tKey = key;\n\t\t}\n\n\t\tclass DesTransform : ICryptoTransform\n\t\t{\n\t\t\treadonly DesEngine engine;\n\n\t\t\tpublic DesTransform (bool encryption, byte[] key)\n\t\t\t{\n\t\t\t\tengine = new DesEngine ();\n\n\t\t\t\tengine.Init (encryption, new KeyParameter (key));\n\t\t\t}\n\n\t\t\tpublic bool CanReuseTransform {\n\t\t\t\tget { return false; }\n\t\t\t}\n\n\t\t\tpublic bool CanTransformMultipleBlocks {\n\t\t\t\tget { return false; }\n\t\t\t}\n\n\t\t\tpublic int InputBlockSize {\n\t\t\t\tget { return 8; }\n\t\t\t}\n\n\t\t\tpublic int OutputBlockSize {\n\t\t\t\tget { return 8; }\n\t\t\t}\n\n\t\t\tpublic int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)\n\t\t\t{\n\t\t\t\tif (inputBuffer == null)\n\t\t\t\t\tthrow new ArgumentNullException (\"inputBuffer\");\n\n\t\t\t\tif (inputOffset < 0 || inputOffset > inputBuffer.Length)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (\"inputOffset\");\n\n\t\t\t\tif (inputCount < 0 || inputOffset > inputBuffer.Length - inputCount)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (\"inputCount\");\n\n\t\t\t\tif (inputCount != 8)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (\"inputCount\", \"Can only transform 8 bytes at a time.\");\n\n\t\t\t\tif (outputBuffer == null)\n\t\t\t\t\tthrow new ArgumentNullException (\"outputBuffer\");\n\n\t\t\t\tif (outputOffset < 0 || outputOffset > outputBuffer.Length - 8)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (\"outputOffset\");\n\n\t\t\t\treturn engine.ProcessBlock (inputBuffer, inputOffset, outputBuffer, outputOffset);\n\t\t\t}\n\n\t\t\tpublic byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)\n\t\t\t{\n\t\t\t\tif (inputBuffer == null)\n\t\t\t\t\tthrow new ArgumentNullException (\"inputBuffer\");\n\n\t\t\t\tif (inputOffset < 0 || inputOffset > inputBuffer.Length)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (\"inputOffset\");\n\n\t\t\t\tif (inputCount < 0 || inputOffset > inputBuffer.Length - inputCount)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (\"inputCount\");\n\n\t\t\t\tvar output = new byte[8];\n\n\t\t\t\tengine.ProcessBlock (inputBuffer, inputOffset, output, 0);\n\n\t\t\t\treturn output;\n\t\t\t}\n\n\t\t\tpublic void Dispose ()\n\t\t\t{\n\t\t\t}\n\t\t}\n\n\t\tpublic override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[] rgbIV)\n\t\t{\n\t\t\treturn new DesTransform (false, rgbKey);\n\t\t}\n\n\t\tpublic override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[] rgbIV)\n\t\t{\n\t\t\treturn new DesTransform (true, rgbKey);\n\t\t}\n\n\t\t// The following code is Copyright (C) Microsoft Corporation. All rights reserved.\n\n\t\tpublic static bool IsWeakKey (byte[] rgbKey)\n\t\t{\n\t\t\tif (!IsLegalKeySize (rgbKey))\n\t\t\t\tthrow new CryptographicException (\"Invalid key size.\");\n\n\t\t\tbyte[] rgbOddParityKey = FixupKeyParity (rgbKey);\n\t\t\tulong key = QuadWordFromBigEndian (rgbOddParityKey);\n\n\t\t\treturn ((key == 0x0101010101010101) ||\n\t\t\t\t(key == 0xfefefefefefefefe) ||\n\t\t\t\t(key == 0x1f1f1f1f0e0e0e0e) ||\n\t\t\t\t(key == 0xe0e0e0e0f1f1f1f1));\n\t\t}\n\n\t\tpublic static bool IsSemiWeakKey (byte[] rgbKey)\n\t\t{\n\t\t\tif (!IsLegalKeySize (rgbKey))\n\t\t\t\tthrow new CryptographicException (\"Invalid key size.\");\n\n\t\t\tbyte[] rgbOddParityKey = FixupKeyParity (rgbKey);\n\t\t\tulong key = QuadWordFromBigEndian (rgbOddParityKey);\n\n\t\t\treturn ((key == 0x01fe01fe01fe01fe) ||\n\t\t\t\t(key == 0xfe01fe01fe01fe01) ||\n\t\t\t\t(key == 0x1fe01fe00ef10ef1) ||\n\t\t\t\t(key == 0xe01fe01ff10ef10e) ||\n\t\t\t\t(key == 0x01e001e001f101f1) ||\n\t\t\t\t(key == 0xe001e001f101f101) ||\n\t\t\t\t(key == 0x1ffe1ffe0efe0efe) ||\n\t\t\t\t(key == 0xfe1ffe1ffe0efe0e) ||\n\t\t\t\t(key == 0x011f011f010e010e) ||\n\t\t\t\t(key == 0x1f011f010e010e01) ||\n\t\t\t\t(key == 0xe0fee0fef1fef1fe) ||\n\t\t\t\t(key == 0xfee0fee0fef1fef1));\n\t\t}\n\n\t\tstatic byte[] FixupKeyParity (byte[] key)\n\t\t{\n\t\t\tbyte[] oddParityKey = new byte[key.Length];\n\n\t\t\tfor (int index = 0; index < key.Length; index++) {\n\t\t\t\t// Get the bits we are interested in\n\t\t\t\toddParityKey[index] = (byte) (key[index] & 0xfe);\n\t\t\t\t// Get the parity of the sum of the previous bits\n\t\t\t\tbyte tmp1 = (byte) ((oddParityKey[index] & 0xF) ^ (oddParityKey[index] >> 4));\n\t\t\t\tbyte tmp2 = (byte) ((tmp1 & 0x3) ^ (tmp1 >> 2));\n\t\t\t\tbyte sumBitsMod2 = (byte) ((tmp2 & 0x1) ^ (tmp2 >> 1));\n\t\t\t\t// We need to set the last bit in oddParityKey[index] to the negation\n\t\t\t\t// of the last bit in sumBitsMod2\n\t\t\t\tif (sumBitsMod2 == 0)\n\t\t\t\t\toddParityKey[index] |= 1;\n\t\t\t}\n\n\t\t\treturn oddParityKey;\n\t\t}\n\n\t\tstatic bool IsLegalKeySize (byte[] rgbKey)\n\t\t{\n\t\t\treturn rgbKey != null && rgbKey.Length == 8;\n\t\t}\n\n\t\tstatic ulong QuadWordFromBigEndian (byte[] block)\n\t\t{\n\t\t\treturn (((ulong) block[0]) << 56) | (((ulong) block[1]) << 48) |\n\t\t\t\t(((ulong) block[2]) << 40) | (((ulong) block[3]) << 32) |\n\t\t\t\t(((ulong) block[4]) << 24) | (((ulong) block[5]) << 16) |\n\t\t\t\t(((ulong) block[6]) << 8) | ((ulong) block[7]);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/HMACMD5.cs",
    "content": "﻿//\n// HMACMD5.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2017 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\n\nusing Org.BouncyCastle.Crypto.Macs;\nusing Org.BouncyCastle.Crypto.Digests;\nusing Org.BouncyCastle.Crypto.Parameters;\n\nnamespace MailKit.Security.Ntlm {\n\tclass HMACMD5 : IDisposable\n\t{\n\t\treadonly HMac hash = new HMac (new MD5Digest ());\n\t\tbyte[] hashValue, key;\n\t\tbool disposed;\n\n\t\tpublic HMACMD5 (byte[] key)\n\t\t{\n\t\t\tKey = key;\n\t\t}\n\n\t\t~HMACMD5 ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\tpublic byte[] Hash\n\t\t{\n\t\t\tget {\n\t\t\t\tif (hashValue == null)\n\t\t\t\t\tthrow new InvalidOperationException (\"No hash value computed.\");\n\n\t\t\t\treturn hashValue;\n\t\t\t}\n\t\t}\n\n\t\tpublic byte[] Key {\n\t\t\tget { return key; }\n\t\t\tset {\n\t\t\t\tif (value == null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (value));\n\n\t\t\t\tif (key != null)\n\t\t\t\t\tArray.Clear (key, 0, key.Length);\n\n\t\t\t\tkey = value;\n\t\t\t\tInitialize ();\n\t\t\t}\n\t\t}\n\n\t\tvoid HashCore (byte[] block, int offset, int size)\n\t\t{\n\t\t\thash.BlockUpdate (block, offset, size);\n\t\t}\n\n\t\tbyte[] HashFinal ()\n\t\t{\n\t\t\tvar value = new byte[hash.GetMacSize ()];\n\n\t\t\thash.DoFinal (value, 0);\n\t\t\thash.Reset ();\n\n\t\t\treturn value;\n\t\t}\n\n\t\tpublic void Initialize ()\n\t\t{\n\t\t\thash.Init (new KeyParameter (Key));\n\t\t}\n\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\tpublic byte[] ComputeHash (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || offset > buffer.Length - count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (\"HashAlgorithm\");\n\n\t\t\tHashCore (buffer, offset, count);\n\t\t\thashValue = HashFinal ();\n\n\t\t\treturn hashValue;\n\t\t}\n\n\t\tpublic byte[] ComputeHash (byte[] buffer)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\treturn ComputeHash (buffer, 0, buffer.Length);\n\t\t}\n\n\t\tpublic byte[] ComputeHash (Stream inputStream)\n\t\t{\n\t\t\t// don't read stream unless object is ready to use\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (\"HashAlgorithm\");\n\n\t\t\tvar buffer = new byte[4096];\n\t\t\tint nread;\n\n\t\t\tdo {\n\t\t\t\tif ((nread = inputStream.Read (buffer, 0, buffer.Length)) > 0)\n\t\t\t\t\tHashCore (buffer, 0, nread);\n\t\t\t} while (nread > 0);\n\n\t\t\thashValue = HashFinal ();\n\n\t\t\treturn hashValue;\n\t\t}\n\n\t\tpublic int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)\n\t\t{\n\t\t\tif (inputBuffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (inputBuffer));\n\n\t\t\tif (inputOffset < 0 || inputOffset > inputBuffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputOffset));\n\n\t\t\tif (inputCount < 0 || inputOffset > inputBuffer.Length - inputCount)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputCount));\n\n\t\t\tif (outputBuffer != null) {\n\t\t\t\tif (outputOffset < 0 || outputOffset > outputBuffer.Length - inputCount)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (outputOffset));\n\t\t\t}\n\n\t\t\tHashCore (inputBuffer, inputOffset, inputCount);\n\n\t\t\tif (outputBuffer != null)\n\t\t\t\tBuffer.BlockCopy (inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);\n\n\t\t\treturn inputCount;\n\t\t}\n\n\t\tpublic byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)\n\t\t{\n\t\t\tif (inputCount < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputCount));\n\n\t\t\tvar outputBuffer = new byte[inputCount];\n\n\t\t\t// note: other exceptions are handled by Buffer.BlockCopy\n\t\t\tBuffer.BlockCopy (inputBuffer, inputOffset, outputBuffer, 0, inputCount);\n\n\t\t\tHashCore (inputBuffer, inputOffset, inputCount);\n\t\t\thashValue = HashFinal ();\n\n\t\t\treturn outputBuffer;\n\t\t}\n\n\t\tvoid Dispose (bool disposing)\n\t\t{\n\t\t\tif (key != null) {\n\t\t\t\tArray.Clear (key, 0, Key.Length);\n\t\t\t\tkey = null;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tDispose (true);\n\t\t\tGC.SuppressFinalize (this);\n\t\t\tdisposed = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/MD4.cs",
    "content": "﻿//\n// MD4.cs\n//\n// Authors: Sebastien Pouliot <sebastien@ximian.com>\n//          Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2003 Motus Technologies Inc. (http://www.motus.com)\n// Copyright (c) 2004-2005, 2010 Novell, Inc (http://www.novell.com)\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\n\nnamespace MailKit.Security.Ntlm {\n\tsealed class MD4 : IDisposable\n\t{\n\t\tconst int S11 = 3;\n\t\tconst int S12 = 7;\n\t\tconst int S13 = 11;\n\t\tconst int S14 = 19;\n\t\tconst int S21 = 3;\n\t\tconst int S22 = 5;\n\t\tconst int S23 = 9;\n\t\tconst int S24 = 13;\n\t\tconst int S31 = 3;\n\t\tconst int S32 = 9;\n\t\tconst int S33 = 11;\n\t\tconst int S34 = 15;\n\n\t\treadonly byte[] buffered;\n\t\treadonly uint[] state;\n\t\treadonly uint[] count;\n\t\treadonly uint[] x;\n\t\tbyte[]? hashValue;\n\t\tbool disposed;\n\n\t\tpublic MD4 ()\n\t\t{\n\t\t\t// we allocate the context memory\n\t\t\tbuffered = new byte[64];\n\t\t\tstate = new uint[4];\n\t\t\tcount = new uint[2];\n\n\t\t\t// temporary buffer in MD4Transform that we don't want to allocate on each iteration\n\t\t\tx = new uint[16];\n\n\t\t\t// the initialize our context\n\t\t\tInitialize ();\n\t\t}\n\n\t\t~MD4 ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\tpublic byte[] Hash {\n\t\t\tget {\n\t\t\t\tif (hashValue == null)\n\t\t\t\t\tthrow new InvalidOperationException (\"No hash value computed.\");\n\n\t\t\t\treturn hashValue;\n\t\t\t}\n\t\t}\n\n\t\tvoid HashCore (byte[] block, int offset, int size)\n\t\t{\n\t\t\t// Compute number of bytes mod 64\n\t\t\tint index = (int) ((count[0] >> 3) & 0x3F);\n\n\t\t\t// Update number of bits\n\t\t\tcount[0] += (uint) (size << 3);\n\t\t\tif (count[0] < (size << 3))\n\t\t\t\tcount[1]++;\n\n\t\t\tcount[1] += (uint) (size >> 29);\n\n\t\t\tint partLen = 64 - index;\n\t\t\tint i = 0;\n\n\t\t\t// Transform as many times as possible.\n\t\t\tif (size >= partLen) {\n\t\t\t\tBuffer.BlockCopy (block, offset, buffered, index, partLen);\n\t\t\t\tMD4Transform (buffered, 0);\n\n\t\t\t\tfor (i = partLen; i + 63 < size; i += 64)\n\t\t\t\t\tMD4Transform (block, offset + i);\n\n\t\t\t\tindex = 0;\n\t\t\t}\n\n\t\t\t// Buffer remaining input\n\t\t\tBuffer.BlockCopy (block, offset + i, buffered, index, size - i);\n\t\t}\n\n\t\tbyte[] HashFinal ()\n\t\t{\n\t\t\t// Save number of bits\n\t\t\tvar bits = new byte[8];\n\t\t\tEncode (bits, count);\n\n\t\t\t// Pad out to 56 mod 64.\n\t\t\tuint index = ((count [0] >> 3) & 0x3f);\n\t\t\tint padLen = (int) ((index < 56) ? (56 - index) : (120 - index));\n\t\t\tHashCore (Padding (padLen), 0, padLen);\n\n\t\t\t// Append length (before padding)\n\t\t\tHashCore (bits, 0, 8);\n\n\t\t\t// Store state in digest\n\t\t\tvar digest = new byte[16];\n\t\t\tEncode (digest, state);\n\n\t\t\treturn digest;\n\t\t}\n\n\t\tpublic void Initialize ()\n\t\t{\n\t\t\tcount[0] = 0;\n\t\t\tcount[1] = 0;\n\t\t\tstate[0] = 0x67452301;\n\t\t\tstate[1] = 0xefcdab89;\n\t\t\tstate[2] = 0x98badcfe;\n\t\t\tstate[3] = 0x10325476;\n\n\t\t\t// Clear sensitive information\n\t\t\tArray.Clear (buffered, 0, 64);\n\t\t\tArray.Clear (x, 0, 16);\n\t\t}\n\n\t\tstatic byte[] Padding (int length)\n\t\t{\n\t\t\tif (length > 0) {\n\t\t\t\tvar padding = new byte[length];\n\t\t\t\tpadding[0] = 0x80;\n\t\t\t\treturn padding;\n\t\t\t}\n\n\t\t\treturn Array.Empty<byte> ();\n\t\t}\n\n\t\t// F, G and H are basic MD4 functions.\n\t\tstatic uint F (uint x, uint y, uint z)\n\t\t{\n\t\t\treturn (x & y) | (~x & z);\n\t\t}\n\n\t\tstatic uint G (uint x, uint y, uint z)\n\t\t{\n\t\t\treturn (x & y) | (x & z) | (y & z);\n\t\t}\n\n\t\tstatic uint H (uint x, uint y, uint z)\n\t\t{\n\t\t\treturn x ^ y ^ z;\n\t\t}\n\n\t\t// ROTATE_LEFT rotates x left n bits.\n\t\tstatic uint ROL (uint x, byte n)\n\t\t{\n\t\t\treturn (x << n) | (x >> (32 - n));\n\t\t}\n\n\t\t/* FF, GG and HH are transformations for rounds 1, 2 and 3 */\n\t\t/* Rotation is separate from addition to prevent recomputation */\n\t\tstatic void FF (ref uint a, uint b, uint c, uint d, uint x, byte s)\n\t\t{\n\t\t\ta += F (b, c, d) + x;\n\t\t\ta = ROL (a, s);\n\t\t}\n\n\t\tstatic void GG (ref uint a, uint b, uint c, uint d, uint x, byte s)\n\t\t{\n\t\t\ta += G (b, c, d) + x + 0x5a827999;\n\t\t\ta = ROL (a, s);\n\t\t}\n\n\t\tstatic void HH (ref uint a, uint b, uint c, uint d, uint x, byte s)\n\t\t{\n\t\t\ta += H (b, c, d) + x + 0x6ed9eba1;\n\t\t\ta = ROL (a, s);\n\t\t}\n\n\t\tstatic void Encode (byte[] output, uint[] input)\n\t\t{\n\t\t\tfor (int i = 0, j = 0; j < output.Length; i++, j += 4) {\n\t\t\t\toutput[j + 0] = (byte) (input[i]);\n\t\t\t\toutput[j + 1] = (byte) (input[i] >> 8);\n\t\t\t\toutput[j + 2] = (byte) (input[i] >> 16);\n\t\t\t\toutput[j + 3] = (byte) (input[i] >> 24);\n\t\t\t}\n\t\t}\n\n\t\tstatic void Decode (uint[] output, byte[] input, int index)\n\t\t{\n\t\t\tfor (int i = 0, j = index; i < output.Length; i++, j += 4)\n\t\t\t\toutput[i] = (uint) ((input[j]) | (input[j + 1] << 8) | (input[j + 2] << 16) | (input[j + 3] << 24));\n\t\t}\n\n\t\tvoid MD4Transform (byte[] block, int index)\n\t\t{\n\t\t\tuint a = state[0];\n\t\t\tuint b = state[1];\n\t\t\tuint c = state[2];\n\t\t\tuint d = state[3];\n\n\t\t\tDecode (x, block, index);\n\n\t\t\t/* Round 1 */\n\t\t\tFF (ref a, b, c, d, x[ 0], S11); /* 1 */\n\t\t\tFF (ref d, a, b, c, x[ 1], S12); /* 2 */\n\t\t\tFF (ref c, d, a, b, x[ 2], S13); /* 3 */\n\t\t\tFF (ref b, c, d, a, x[ 3], S14); /* 4 */\n\t\t\tFF (ref a, b, c, d, x[ 4], S11); /* 5 */\n\t\t\tFF (ref d, a, b, c, x[ 5], S12); /* 6 */\n\t\t\tFF (ref c, d, a, b, x[ 6], S13); /* 7 */\n\t\t\tFF (ref b, c, d, a, x[ 7], S14); /* 8 */\n\t\t\tFF (ref a, b, c, d, x[ 8], S11); /* 9 */\n\t\t\tFF (ref d, a, b, c, x[ 9], S12); /* 10 */\n\t\t\tFF (ref c, d, a, b, x[10], S13); /* 11 */\n\t\t\tFF (ref b, c, d, a, x[11], S14); /* 12 */\n\t\t\tFF (ref a, b, c, d, x[12], S11); /* 13 */\n\t\t\tFF (ref d, a, b, c, x[13], S12); /* 14 */\n\t\t\tFF (ref c, d, a, b, x[14], S13); /* 15 */\n\t\t\tFF (ref b, c, d, a, x[15], S14); /* 16 */\n\n\t\t\t/* Round 2 */\n\t\t\tGG (ref a, b, c, d, x[ 0], S21); /* 17 */\n\t\t\tGG (ref d, a, b, c, x[ 4], S22); /* 18 */\n\t\t\tGG (ref c, d, a, b, x[ 8], S23); /* 19 */\n\t\t\tGG (ref b, c, d, a, x[12], S24); /* 20 */\n\t\t\tGG (ref a, b, c, d, x[ 1], S21); /* 21 */\n\t\t\tGG (ref d, a, b, c, x[ 5], S22); /* 22 */\n\t\t\tGG (ref c, d, a, b, x[ 9], S23); /* 23 */\n\t\t\tGG (ref b, c, d, a, x[13], S24); /* 24 */\n\t\t\tGG (ref a, b, c, d, x[ 2], S21); /* 25 */\n\t\t\tGG (ref d, a, b, c, x[ 6], S22); /* 26 */\n\t\t\tGG (ref c, d, a, b, x[10], S23); /* 27 */\n\t\t\tGG (ref b, c, d, a, x[14], S24); /* 28 */\n\t\t\tGG (ref a, b, c, d, x[ 3], S21); /* 29 */\n\t\t\tGG (ref d, a, b, c, x[ 7], S22); /* 30 */\n\t\t\tGG (ref c, d, a, b, x[11], S23); /* 31 */\n\t\t\tGG (ref b, c, d, a, x[15], S24); /* 32 */\n\n\t\t\tHH (ref a, b, c, d, x[ 0], S31); /* 33 */\n\t\t\tHH (ref d, a, b, c, x[ 8], S32); /* 34 */\n\t\t\tHH (ref c, d, a, b, x[ 4], S33); /* 35 */\n\t\t\tHH (ref b, c, d, a, x[12], S34); /* 36 */\n\t\t\tHH (ref a, b, c, d, x[ 2], S31); /* 37 */\n\t\t\tHH (ref d, a, b, c, x[10], S32); /* 38 */\n\t\t\tHH (ref c, d, a, b, x[ 6], S33); /* 39 */\n\t\t\tHH (ref b, c, d, a, x[14], S34); /* 40 */\n\t\t\tHH (ref a, b, c, d, x[ 1], S31); /* 41 */\n\t\t\tHH (ref d, a, b, c, x[ 9], S32); /* 42 */\n\t\t\tHH (ref c, d, a, b, x[ 5], S33); /* 43 */\n\t\t\tHH (ref b, c, d, a, x[13], S34); /* 44 */\n\t\t\tHH (ref a, b, c, d, x[ 3], S31); /* 45 */\n\t\t\tHH (ref d, a, b, c, x[11], S32); /* 46 */\n\t\t\tHH (ref c, d, a, b, x[ 7], S33); /* 47 */\n\t\t\tHH (ref b, c, d, a, x[15], S34); /* 48 */\n\n\t\t\tstate [0] += a;\n\t\t\tstate [1] += b;\n\t\t\tstate [2] += c;\n\t\t\tstate [3] += d;\n\t\t}\n\n\t\tpublic byte[] ComputeHash (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (offset < 0 || offset > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (offset));\n\n\t\t\tif (count < 0 || offset > buffer.Length - count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (count));\n\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (MD4));\n\n\t\t\tHashCore (buffer, offset, count);\n\t\t\thashValue = HashFinal ();\n\t\t\tInitialize ();\n\n\t\t\treturn hashValue;\n\t\t}\n\n\t\tpublic byte[] ComputeHash (byte[] buffer)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\treturn ComputeHash (buffer, 0, buffer.Length);\n\t\t}\n\n\t\tpublic byte[] ComputeHash (Stream inputStream)\n\t\t{\n\t\t\tif (inputStream == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (inputStream));\n\n\t\t\t// don't read stream unless object is ready to use\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (nameof (MD4));\n\n\t\t\tvar buffer = new byte[4096];\n\t\t\tint nread;\n\n\t\t\tdo {\n\t\t\t\tif ((nread = inputStream.Read (buffer, 0, buffer.Length)) > 0)\n\t\t\t\t\tHashCore (buffer, 0, nread);\n\t\t\t} while (nread > 0);\n\n\t\t\thashValue = HashFinal ();\n\t\t\tInitialize ();\n\n\t\t\treturn hashValue;\n\t\t}\n\n\t\tpublic int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)\n\t\t{\n\t\t\tif (inputBuffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (inputBuffer));\n\n\t\t\tif (inputOffset < 0 || inputOffset > inputBuffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputOffset));\n\n\t\t\tif (inputCount < 0 || inputOffset > inputBuffer.Length - inputCount)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputCount));\n\n\t\t\tif (outputBuffer != null) {\n\t\t\t\tif (outputOffset < 0 || outputOffset > outputBuffer.Length - inputCount)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (outputOffset));\n\t\t\t}\n\n\t\t\tHashCore (inputBuffer, inputOffset, inputCount);\n\n\t\t\tif (outputBuffer != null)\n\t\t\t\tBuffer.BlockCopy (inputBuffer, inputOffset, outputBuffer, outputOffset, inputCount);\n\n\t\t\treturn inputCount;\n\t\t}\n\n\t\tpublic byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)\n\t\t{\n\t\t\tif (inputCount < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputCount));\n\n\t\t\tvar outputBuffer = new byte[inputCount];\n\n\t\t\t// note: other exceptions are handled by Buffer.BlockCopy\n\t\t\tBuffer.BlockCopy (inputBuffer, inputOffset, outputBuffer, 0, inputCount);\n\n\t\t\tHashCore (inputBuffer, inputOffset, inputCount);\n\t\t\thashValue = HashFinal ();\n\t\t\tInitialize ();\n\n\t\t\treturn outputBuffer;\n\t\t}\n\n\t\tvoid Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tArray.Clear (buffered, 0, buffered.Length);\n\t\t\t\tArray.Clear (state, 0, state.Length);\n\t\t\t\tArray.Clear (count, 0, count.Length);\n\t\t\t\tArray.Clear (x, 0, x.Length);\n\t\t\t\tdisposed = true;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tDispose (true);\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmAttribute.cs",
    "content": "﻿//\n// NtlmAttribute.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nnamespace MailKit.Security.Ntlm\n{\n\tenum NtlmAttribute : short\n\t{\n\t\tEOL            = 0,\n\t\tServerName     = 1,\n\t\tDomainName     = 2,\n\t\tDnsServerName  = 3,\n\t\tDnsDomainName  = 4,\n\t\tDnsTreeName    = 5,\n\t\tFlags          = 6,\n\t\tTimestamp      = 7,\n\t\tSingleHost     = 8,\n\t\tTargetName     = 9,\n\t\tChannelBinding = 10\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmAttributeValuePair.cs",
    "content": "﻿//\n// NtlmAttributeValuePair.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Text;\nusing System.Diagnostics;\n\nnamespace MailKit.Security.Ntlm {\n\t/// <summary>\n\t/// An abstract NTLM attribute and value pair.\n\t/// </summary>\n\t/// <remarks>\n\t/// An abstract NTLM attribute and value pair.\n\t/// </remarks>\n\tabstract class NtlmAttributeValuePair\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\tprotected NtlmAttributeValuePair (NtlmAttribute attr)\n\t\t{\n\t\t\tAttribute = attr;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the NTLM attribute that this pair represents.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the NTLM attribute that this pair represents.\n\t\t/// </remarks>\n\t\t/// <value>The NTLM attribute.</value>\n\t\tpublic NtlmAttribute Attribute {\n\t\t\tget; private set;\n\t\t}\n\n\t\tprotected static void EncodeInt16 (byte[] buf, ref int index, short value)\n\t\t{\n\t\t\tbuf[index++] = (byte) (value);\n\t\t\tbuf[index++] = (byte) (value >> 8);\n\t\t}\n\n\t\tprotected static void EncodeInt32 (byte[] buf, ref int index, int value)\n\t\t{\n\t\t\tbuf[index++] = (byte) (value);\n\t\t\tbuf[index++] = (byte) (value >> 8);\n\t\t\tbuf[index++] = (byte) (value >> 16);\n\t\t\tbuf[index++] = (byte) (value >> 24);\n\t\t}\n\n\t\tprotected static void EncodeTypeAndLength (byte[] buf, ref int index, NtlmAttribute attr, short length)\n\t\t{\n\t\t\tEncodeInt16 (buf, ref index, (short) attr);\n\t\t\tEncodeInt16 (buf, ref index, length);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of bytes needed for encoding the attribute value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of bytes needed for encoding the attribute value.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <returns>The number of bytes needed to encode the value.</returns>\n\t\tpublic abstract int GetEncodedLength (Encoding encoding);\n\n\t\t/// <summary>\n\t\t/// Encode the attribute value to the specified buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the attribute value to the specified buffer.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <param name=\"buffer\">The output buffer.</param>\n\t\t/// <param name=\"index\">The index into the buffer to start appending the encoded attribute.</param>\n\t\tpublic abstract void EncodeTo (Encoding encoding, byte[] buffer, ref int index);\n\t}\n\n\t/// <summary>\n\t/// An NTLM attribute and value pair consisting of a string value.\n\t/// </summary>\n\t/// <remarks>\n\t/// An NTLM attribute and value pair consisting of a string value.\n\t/// </remarks>\n\t[DebuggerDisplay (\"{Attribute} = {Value}\")]\n\tsealed class NtlmAttributeStringValuePair : NtlmAttributeValuePair\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeStringValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair consisting of a string value.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\t/// <param name=\"value\">The NTLM attribute value.</param>\n\t\tpublic NtlmAttributeStringValuePair (NtlmAttribute attr, string value) : base (attr)\n\t\t{\n\t\t\tValue = value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the value of the attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the value of the attribute.\n\t\t/// </remarks>\n\t\t/// <value>The attribute value.</value>\n\t\tpublic string Value {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of bytes needed for encoding the attribute value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of bytes needed for encoding the attribute value.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <returns>The number of bytes needed to encode the value.</returns>\n\t\tpublic override int GetEncodedLength (Encoding encoding)\n\t\t{\n\t\t\treturn 4 + encoding.GetByteCount (Value);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encode the attribute value to the specified buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the attribute value to the specified buffer.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <param name=\"buffer\">The output buffer.</param>\n\t\t/// <param name=\"index\">The index into the buffer to start appending the encoded attribute.</param>\n\t\tpublic override void EncodeTo (Encoding encoding, byte[] buffer, ref int index)\n\t\t{\n\t\t\tint length = encoding.GetByteCount (Value);\n\n\t\t\tEncodeTypeAndLength (buffer, ref index, Attribute, (short) length);\n\t\t\tencoding.GetBytes (Value, 0, Value.Length, buffer, index);\n\t\t\tindex += length;\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An NTLM attribute and value pair consisting of a flags value.\n\t/// </summary>\n\t/// <remarks>\n\t/// An NTLM attribute and value pair consisting of a flags value.\n\t/// </remarks>\n\t[DebuggerDisplay (\"{Attribute} = {Value}\")]\n\tsealed class NtlmAttributeFlagsValuePair : NtlmAttributeValuePair\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeFlagsValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair consisting of a flags value.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\t/// <param name=\"value\">The NTLM attribute value.</param>\n\t\t/// <param name=\"size\">The size of the encoded flags value.</param>\n\t\tinternal NtlmAttributeFlagsValuePair (NtlmAttribute attr, int value, short size) : base (attr)\n\t\t{\n\t\t\tValue = value;\n\t\t\tSize = size;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeFlagsValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair consisting of a flags value.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\t/// <param name=\"value\">The NTLM attribute value.</param>\n\t\tpublic NtlmAttributeFlagsValuePair (NtlmAttribute attr, int value) : this (attr, value, 4)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the size of the encoded flags value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the size of the encoded flags value.\n\t\t/// </remarks>\n\t\tpublic short Size {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the value of the attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the value of the attribute.\n\t\t/// </remarks>\n\t\t/// <value>The attribute value.</value>\n\t\tpublic int Value {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of bytes needed for encoding the attribute value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of bytes needed for encoding the attribute value.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <returns>The number of bytes needed to encode the value.</returns>\n\t\tpublic override int GetEncodedLength (Encoding encoding)\n\t\t{\n\t\t\treturn 4 + Size;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encode the attribute value to the specified buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the attribute value to the specified buffer.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <param name=\"buffer\">The output buffer.</param>\n\t\t/// <param name=\"index\">The index into the buffer to start appending the encoded attribute.</param>\n\t\tpublic override void EncodeTo (Encoding encoding, byte[] buffer, ref int index)\n\t\t{\n\t\t\tEncodeTypeAndLength (buffer, ref index, Attribute, Size);\n\n\t\t\tswitch (Size) {\n\t\t\tcase 2: EncodeInt16 (buffer, ref index, (short) Value); break;\n\t\t\tdefault: EncodeInt32 (buffer, ref index, Value); break;\n\t\t\t}\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An NTLM attribute and value pair consisting of a timestamp value.\n\t/// </summary>\n\t/// <remarks>\n\t/// An NTLM attribute and value pair consisting of a timestamp value.\n\t/// </remarks>\n\t[DebuggerDisplay (\"{Attribute} = {Value}\")]\n\tsealed class NtlmAttributeTimestampValuePair : NtlmAttributeValuePair\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeTimestampValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair consisting of a timestamp value.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\t/// <param name=\"value\">The NTLM attribute value.</param>\n\t\t/// <param name=\"size\">The size of the encoded flags value.</param>\n\t\tinternal NtlmAttributeTimestampValuePair (NtlmAttribute attr, long value, short size) : base (attr)\n\t\t{\n\t\t\tValue = value;\n\t\t\tSize = size;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeTimestampValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair consisting of a timestamp value.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\t/// <param name=\"value\">The NTLM attribute value.</param>\n\t\tpublic NtlmAttributeTimestampValuePair (NtlmAttribute attr, long value) : this (attr, value, 8)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the size of the encoded timestamp value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the size of the encoded timestamp value.\n\t\t/// </remarks>\n\t\tpublic short Size {\n\t\t\tget; internal set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the value of the attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the value of the attribute.\n\t\t/// </remarks>\n\t\t/// <value>The attribute value.</value>\n\t\tpublic long Value {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of bytes needed for encoding the attribute value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of bytes needed for encoding the attribute value.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <returns>The number of bytes needed to encode the value.</returns>\n\t\tpublic override int GetEncodedLength (Encoding encoding)\n\t\t{\n\t\t\treturn 4 + Size;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encode the attribute value to the specified buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the attribute value to the specified buffer.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <param name=\"buffer\">The output buffer.</param>\n\t\t/// <param name=\"index\">The index into the buffer to start appending the encoded attribute.</param>\n\t\tpublic override void EncodeTo (Encoding encoding, byte[] buffer, ref int index)\n\t\t{\n\t\t\tEncodeTypeAndLength (buffer, ref index, Attribute, Size);\n\n\t\t\tswitch (Size) {\n\t\t\tcase 2: EncodeInt16 (buffer, ref index, (short) (Value & 0xffff)); break;\n\t\t\tcase 4: EncodeInt32 (buffer, ref index, (int) (Value & 0xffffffff)); break;\n\t\t\tdefault:\n\t\t\t\tEncodeInt32 (buffer, ref index, (int) (Value & 0xffffffff));\n\t\t\t\tEncodeInt32 (buffer, ref index, (int) (Value >> 32));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// An NTLM attribute and value pair consisting of a byte array value.\n\t/// </summary>\n\t/// <remarks>\n\t/// An NTLM attribute and value pair consisting of a byte array value.\n\t/// </remarks>\n\tsealed class NtlmAttributeByteArrayValuePair : NtlmAttributeValuePair\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmAttributeByteArrayValuePair\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM attribute and value pair consisting of a byte array value.\n\t\t/// </remarks>\n\t\t/// <param name=\"attr\">The NTLM attribute.</param>\n\t\t/// <param name=\"value\">The NTLM attribute value.</param>\n\t\tpublic NtlmAttributeByteArrayValuePair (NtlmAttribute attr, byte[] value) : base (attr)\n\t\t{\n\t\t\tValue = value;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the value of the attribute.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the value of the attribute.\n\t\t/// </remarks>\n\t\t/// <value>The attribute value.</value>\n\t\tpublic byte[] Value {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the number of bytes needed for encoding the attribute value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of bytes needed for encoding the attribute value.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <returns>The number of bytes needed to encode the value.</returns>\n\t\tpublic override int GetEncodedLength (Encoding encoding)\n\t\t{\n\t\t\treturn 4 + Value.Length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encode the attribute value to the specified buffer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the attribute value to the specified buffer.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The text encoding.</param>\n\t\t/// <param name=\"buffer\">The output buffer.</param>\n\t\t/// <param name=\"index\">The index into the buffer to start appending the encoded attribute.</param>\n\t\tpublic override void EncodeTo (Encoding encoding, byte[] buffer, ref int index)\n\t\t{\n\t\t\tEncodeTypeAndLength (buffer, ref index, Attribute, (short) Value.Length);\n\n\t\t\tBuffer.BlockCopy (Value, 0, buffer, index, Value.Length);\n\t\t\tindex += Value.Length;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmAuthenticateMessage.cs",
    "content": "﻿//\n// NtlmAuthenticateMessage.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Text;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Security.Ntlm {\n\tclass NtlmAuthenticateMessage : NtlmMessageBase\n\t{\n\t\tstatic readonly byte[] Z16 = new byte[16];\n\n\t\treadonly NtlmNegotiateMessage? negotiate;\n\t\treadonly NtlmChallengeMessage? challenge;\n\t\tbyte[] clientChallenge;\n\n\t\tpublic NtlmAuthenticateMessage (NtlmNegotiateMessage negotiate, NtlmChallengeMessage challenge, string userName, string password, string domain, string workstation) : base (3)\n\t\t{\n\t\t\tif (negotiate == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (negotiate));\n\n\t\t\tif (challenge == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (challenge));\n\n\t\t\tif (userName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (userName));\n\n\t\t\tif (password == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (password));\n\n\t\t\tclientChallenge = NtlmUtils.NONCE (8);\n\t\t\tthis.negotiate = negotiate;\n\t\t\tthis.challenge = challenge;\n\n\t\t\tif (!string.IsNullOrEmpty (domain)) {\n\t\t\t\tDomain = domain;\n\t\t\t} else if ((challenge.Flags & NtlmFlags.TargetTypeDomain) != 0) {\n\t\t\t\t// The server is domain-joined, so the TargetName will be the domain.\n\t\t\t\tDomain = challenge.TargetName ?? string.Empty;\n\t\t\t} else if (challenge.TargetInfo != null) {\n\t\t\t\t// The server is not domain-joined, so the TargetName will be the machine name of the server.\n\t\t\t\tDomain = challenge.TargetInfo.DomainName ?? string.Empty;\n\t\t\t} else {\n\t\t\t\tDomain = string.Empty;\n\t\t\t}\n\n\t\t\tWorkstation = workstation;\n\t\t\tUserName = userName;\n\t\t\tPassword = password;\n\n\t\t\t// Use only the features supported by both the client and server.\n\t\t\tFlags = negotiate.Flags & challenge.Flags;\n\n\t\t\t// If the client and server both support NEGOTIATE_UNICODE, disable NEGOTIATE_OEM.\n\t\t\tif ((Flags & NtlmFlags.NegotiateUnicode) != 0)\n\t\t\t\tFlags &= ~NtlmFlags.NegotiateOem;\n\t\t\t// TODO: throw if Unicode && Oem are both unset?\n\n\t\t\t// If the client and server both support NEGOTIATE_EXTENDED_SESSIONSECURITY, disable NEGOTIATE_LM_KEY.\n\t\t\tif ((Flags & NtlmFlags.NegotiateExtendedSessionSecurity) != 0)\n\t\t\t\tFlags &= ~NtlmFlags.NegotiateLanManagerKey;\n\n\t\t\t// Disable NEGOTIATE_KEY_EXCHANGE if neither NEGOTIATE_SIGN nor NEGOTIATE_SEAL are also present.\n\t\t\tif ((Flags & NtlmFlags.NegotiateKeyExchange) != 0 && (Flags & (NtlmFlags.NegotiateSign | NtlmFlags.NegotiateSeal)) == 0)\n\t\t\t\tFlags &= ~NtlmFlags.NegotiateKeyExchange;\n\n\t\t\t// If we had RequestTarget in our initial NEGOTIATE_MESSAGE, include it again in this message(?)\n\t\t\tif ((negotiate.Flags & NtlmFlags.RequestTarget) != 0)\n\t\t\t\tFlags |= NtlmFlags.RequestTarget;\n\n\t\t\t// If NEGOTIATE_VERSION is set, grab the OSVersion from our original negotiate message.\n\t\t\tif ((Flags & NtlmFlags.NegotiateVersion) != 0)\n\t\t\t\tOSVersion = negotiate.OSVersion ?? OSVersion;\n\t\t}\n\n\t\t// Note: This .ctor is for debugging purposes only. It allows us to decode an NTLM AUTHENTICATE_MESSAGE without having to go through the entire NTLM authentication process.\n\t\tpublic NtlmAuthenticateMessage (byte[] message, int startIndex, int length) : base (3)\n\t\t{\n\t\t\tDecode (message, startIndex, length);\n\t\t\tclientChallenge = Array.Empty<byte> ();\n\t\t\tchallenge = null;\n\t\t\tPassword = string.Empty;\n\t\t}\n\n\t\t~NtlmAuthenticateMessage ()\n\t\t{\n\t\t\tif (clientChallenge != null && clientChallenge.Length > 0)\n\t\t\t\tArray.Clear (clientChallenge, 0, clientChallenge.Length);\n\n\t\t\tif (LmChallengeResponse != null)\n\t\t\t\tArray.Clear (LmChallengeResponse, 0, LmChallengeResponse.Length);\n\n\t\t\tif (NtChallengeResponse != null)\n\t\t\t\tArray.Clear (NtChallengeResponse, 0, NtChallengeResponse.Length);\n\n\t\t\tif (ExportedSessionKey != null)\n\t\t\t\tArray.Clear (ExportedSessionKey, 0, ExportedSessionKey.Length);\n\n\t\t\tif (EncryptedRandomSessionKey != null)\n\t\t\t\tArray.Clear (EncryptedRandomSessionKey, 0, EncryptedRandomSessionKey.Length);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// This is only used for unit testing purposes.\n\t\t/// </summary>\n\t\tinternal byte[]? ClientChallenge {\n\t\t\tget { return clientChallenge; }\n\t\t\tset {\n\t\t\t\tif (value == null)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (value.Length != 8)\n\t\t\t\t\tthrow new ArgumentException (\"Invalid nonce length (should be 8 bytes).\", nameof (value));\n\n\t\t\t\tArray.Clear (clientChallenge, 0, clientChallenge.Length);\n\t\t\t\tclientChallenge = value;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// This is only used for unit testing purposes.\n\t\t/// </summary>\n\t\tinternal long? Timestamp {\n\t\t\tget; set;\n\t\t}\n\n\t\tpublic string Domain {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic string Workstation {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic string Password {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic string UserName {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic byte[]? Mic {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic byte[]? LmChallengeResponse {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic byte[]? NtChallengeResponse {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic byte[]? ExportedSessionKey {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic byte[]? EncryptedRandomSessionKey {\n\t\t\tget; private set;\n\t\t}\n\n\t\t[MemberNotNull (nameof (LmChallengeResponse), nameof (NtChallengeResponse), nameof (Domain), nameof (UserName), nameof (Workstation), nameof (EncryptedRandomSessionKey))]\n\t\tvoid Decode (byte[] message, int startIndex, int length)\n\t\t{\n\t\t\tint payloadOffset = length;\n\t\t\tint micOffset = 64;\n\n\t\t\tValidateArguments (message, startIndex, length);\n\n\t\t\tif (message.Length >= 64)\n\t\t\t\tFlags = (NtlmFlags) BitConverterLE.ToUInt32 (message, startIndex + 60);\n\t\t\telse\n\t\t\t\tFlags = (NtlmFlags) 0x8201;\n\n\t\t\tint lmLength = BitConverterLE.ToUInt16 (message, startIndex + 12);\n\t\t\tint lmOffset = BitConverterLE.ToUInt16 (message, startIndex + 16);\n\t\t\tLmChallengeResponse = new byte[lmLength];\n\t\t\tBuffer.BlockCopy (message, startIndex + lmOffset, LmChallengeResponse, 0, lmLength);\n\t\t\tpayloadOffset = Math.Min (payloadOffset, lmOffset);\n\n\t\t\tint ntLength = BitConverterLE.ToUInt16 (message, startIndex + 20);\n\t\t\tint ntOffset = BitConverterLE.ToUInt16 (message, startIndex + 24);\n\t\t\tNtChallengeResponse = new byte[ntLength];\n\t\t\tBuffer.BlockCopy (message, startIndex + ntOffset, NtChallengeResponse, 0, ntLength);\n\t\t\tpayloadOffset = Math.Min (payloadOffset, ntOffset);\n\n\t\t\tint domainLength = BitConverterLE.ToUInt16 (message, startIndex + 28);\n\t\t\tint domainOffset = BitConverterLE.ToUInt16 (message, startIndex + 32);\n\t\t\tDomain = DecodeString (message, startIndex + domainOffset, domainLength);\n\t\t\tpayloadOffset = Math.Min (payloadOffset, domainOffset);\n\n\t\t\tint userLength = BitConverterLE.ToUInt16 (message, startIndex + 36);\n\t\t\tint userOffset = BitConverterLE.ToUInt16 (message, startIndex + 40);\n\t\t\tUserName = DecodeString (message, startIndex + userOffset, userLength);\n\t\t\tpayloadOffset = Math.Min (payloadOffset, userOffset);\n\n\t\t\tint workstationLength = BitConverterLE.ToUInt16 (message, startIndex + 44);\n\t\t\tint workstationOffset = BitConverterLE.ToUInt16 (message, startIndex + 48);\n\t\t\tWorkstation = DecodeString (message, startIndex + workstationOffset, workstationLength);\n\t\t\tpayloadOffset = Math.Min (payloadOffset, workstationOffset);\n\n\t\t\tint skeyLength = BitConverterLE.ToUInt16 (message, startIndex + 52);\n\t\t\tint skeyOffset = BitConverterLE.ToUInt16 (message, startIndex + 56);\n\t\t\tEncryptedRandomSessionKey = new byte[skeyLength];\n\t\t\tBuffer.BlockCopy (message, startIndex + skeyOffset, EncryptedRandomSessionKey, 0, skeyLength);\n\t\t\tpayloadOffset = Math.Min (payloadOffset, skeyOffset);\n\n\t\t\t// OSVersion\n\t\t\tif ((Flags & NtlmFlags.NegotiateVersion) != 0 && length >= 72) {\n\t\t\t\t// decode the OS Version\n\t\t\t\tint major = message[startIndex + 64];\n\t\t\t\tint minor = message[startIndex + 65];\n\t\t\t\tint build = BitConverterLE.ToUInt16 (message, startIndex + 66);\n\n\t\t\t\tOSVersion = new Version (major, minor, build);\n\t\t\t\tmicOffset += 8;\n\t\t\t}\n\n\t\t\t// MIC\n\t\t\tif (micOffset + 16 <= payloadOffset) {\n\t\t\t\tMic = new byte[16];\n\t\t\t\tBuffer.BlockCopy (message, startIndex + micOffset, Mic, 0, Mic.Length);\n\t\t\t}\n\t\t}\n\n\t\tstring DecodeString (byte[] buffer, int offset, int len)\n\t\t{\n\t\t\tvar encoding = (Flags & NtlmFlags.NegotiateUnicode) != 0 ? Encoding.Unicode : Encoding.UTF8;\n\n\t\t\treturn encoding.GetString (buffer, offset, len);\n\t\t}\n\n\t\tbyte[] EncodeString (string text)\n\t\t{\n\t\t\tif (text == null)\n\t\t\t\treturn Array.Empty<byte> ();\n\n\t\t\tvar encoding = (Flags & NtlmFlags.NegotiateUnicode) != 0 ? Encoding.Unicode : Encoding.UTF8;\n\n\t\t\treturn encoding.GetBytes (text);\n\t\t}\n\n\t\tpublic void ComputeNtlmV2 (string? targetName, bool unverifiedTargetName, byte[]? channelBinding)\n\t\t{\n\t\t\tif (challenge == null || negotiate == null)\n\t\t\t\treturn;\n\n\t\t\tvar targetInfo = new NtlmTargetInfo ();\n\t\t\tint avFlags = 0;\n\n\t\t\t// If the CHALLENGE_MESSAGE contains a TargetInfo field\n\t\t\tif (challenge.TargetInfo != null) {\n\t\t\t\tchallenge.TargetInfo.CopyTo (targetInfo);\n\n\t\t\t\tif (targetInfo.Flags.HasValue)\n\t\t\t\t\tavFlags = targetInfo.Flags.Value;\n\n\t\t\t\t// If the CHALLENGE_MESSAGE TargetInfo field (section 2.2.1.2) has an MsvAvTimestamp present, the client SHOULD provide a MIC.\n\t\t\t\tif (challenge.TargetInfo?.Timestamp != null) {\n\t\t\t\t\t// If there is an AV_PAIR structure (section 2.2.2.1) with the AvId field set to MsvAvFlags, then in the Value field, set bit 0x2 to 1.\n\t\t\t\t\t// Else add an AV_PAIR structure and set the AvId field to MsvAvFlags and the Value field bit 0x2 to 1.\n\t\t\t\t\ttargetInfo.Flags = avFlags |= 0x2;\n\n\t\t\t\t\t// Temporarily set the MIC to Z16.\n\t\t\t\t\tMic = Z16;\n\t\t\t\t}\n\n\t\t\t\t// If ClientSuppliedTargetName (section 3.1.1.2) is not NULL\n\t\t\t\tif (targetName != null) {\n\t\t\t\t\t// If UnverifiedTargetName (section 3.1.1.2) is TRUE, then in AvId field = MsvAvFlags set 0x00000004 bit.\n\t\t\t\t\tif (unverifiedTargetName)\n\t\t\t\t\t\ttargetInfo.Flags = avFlags |= 0x4;\n\n\t\t\t\t\t// Add an AV_PAIR structure and set the AvId field to MsvAvTargetName and the Value field to ClientSuppliedTargetName without\n\t\t\t\t\t// terminating NULL.\n\t\t\t\t\ttargetInfo.TargetName = targetName;\n\t\t\t\t} else {\n\t\t\t\t\t// Else add an AV_PAIR structure and set the AvId field to MsvAvTargetName and the Value field to an empty string without terminating NULL.\n\t\t\t\t\ttargetInfo.TargetName = string.Empty;\n\t\t\t\t}\n\n\t\t\t\t// The client SHOULD send the channel binding AV_PAIR:\n\t\t\t\t// If the ClientChannelBindingsUnhashed (section 3.1.1.2) is not NULL\n\t\t\t\tif (channelBinding != null) {\n\t\t\t\t\t// Add an AV_PAIR structure and set the AvId field to MsvAvChannelBindings and the Value field to MD5_HASH(ClientChannelBindingsUnhashed).\n\t\t\t\t\ttargetInfo.ChannelBinding = NtlmUtils.MD5 (channelBinding);\n\t\t\t\t} else {\n\t\t\t\t\t// Else add an AV_PAIR structure and set the AvId field to MsvAvChannelBindings and the Value field to Z(16).\n\t\t\t\t\ttargetInfo.ChannelBinding = Z16;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar encodedTargetInfo = targetInfo.Encode ((Flags & NtlmFlags.NegotiateUnicode) != 0);\n\n\t\t\t// Note: For NTLMv2, the sessionBaseKey is the same as the keyExchangeKey.\n\t\t\tNtlmUtils.ComputeNtlmV2 (challenge, Domain, UserName, Password, encodedTargetInfo, clientChallenge, Timestamp, out var ntChallengeResponse, out var lmChallengeResponse, out var keyExchangeKey);\n\n\t\t\tNtChallengeResponse = ntChallengeResponse;\n\t\t\tLmChallengeResponse = lmChallengeResponse;\n\n\t\t\tif ((Flags & NtlmFlags.NegotiateKeyExchange) != 0 && (Flags & (NtlmFlags.NegotiateSign | NtlmFlags.NegotiateSeal)) != 0) {\n\t\t\t\tExportedSessionKey = NtlmUtils.NONCE (16);\n\t\t\t\tEncryptedRandomSessionKey = NtlmUtils.RC4K (keyExchangeKey, ExportedSessionKey);\n\t\t\t} else {\n\t\t\t\tExportedSessionKey = keyExchangeKey;\n\t\t\t\tEncryptedRandomSessionKey = null;\n\t\t\t}\n\n\t\t\t// If the CHALLENGE_MESSAGE TargetInfo field (section 2.2.1.2) has an MsvAvTimestamp present, the client SHOULD provide a MIC.\n\t\t\tif ((avFlags & 0x2) != 0)\n\t\t\t\tMic = NtlmUtils.HMACMD5 (ExportedSessionKey, NtlmUtils.ConcatenationOf (negotiate.Encode (), challenge.Encode (), Encode ()));\n\t\t}\n\n\t\tpublic override byte[] Encode ()\n\t\t{\n\t\t\tvar target = EncodeString (Domain);\n\t\t\tvar user = EncodeString (UserName);\n\t\t\tvar workstation = EncodeString (Workstation);\n\t\t\tint payloadOffset = 72, micOffset = -1;\n\n\t\t\tif (Mic != null) {\n\t\t\t\tmicOffset = payloadOffset;\n\t\t\t\tpayloadOffset += Mic.Length;\n\t\t\t}\n\n\t\t\tvar lmResponseLength = LmChallengeResponse != null ? LmChallengeResponse.Length : 0;\n\t\t\tvar ntResponseLength = NtChallengeResponse != null ? NtChallengeResponse.Length : 0;\n\t\t\tint skeyLength = EncryptedRandomSessionKey != null ? EncryptedRandomSessionKey.Length : 0;\n\n\t\t\tvar message = PrepareMessage (payloadOffset + target.Length + user.Length + workstation.Length + lmResponseLength + ntResponseLength + skeyLength);\n\n\t\t\t// LmChallengeResponse\n\t\t\tshort lmResponseOffset = (short) (payloadOffset + target.Length + user.Length + workstation.Length);\n\t\t\tmessage[12] = (byte) lmResponseLength;\n\t\t\tmessage[13] = (byte) 0x00;\n\t\t\tmessage[14] = message[12];\n\t\t\tmessage[15] = message[13];\n\t\t\tmessage[16] = (byte) lmResponseOffset;\n\t\t\tmessage[17] = (byte) (lmResponseOffset >> 8);\n\t\t\t//message[18] = (byte) (lmResponseOffset >> 16);\n\t\t\t//message[19] = (byte) (lmResponseOffset >> 24);\n\n\t\t\t// NtChallengeResponse\n\t\t\tshort ntResponseOffset = (short) (lmResponseOffset + lmResponseLength);\n\t\t\tmessage[20] = (byte) ntResponseLength;\n\t\t\tmessage[21] = (byte) (ntResponseLength >> 8);\n\t\t\tmessage[22] = message[20];\n\t\t\tmessage[23] = message[21];\n\t\t\tmessage[24] = (byte) ntResponseOffset;\n\t\t\tmessage[25] = (byte) (ntResponseOffset >> 8);\n\t\t\t//message[26] = (byte) (ntResponseOffset >> 16);\n\t\t\t//message[27] = (byte) (ntResponseOffset >> 24);\n\n\t\t\t// Target\n\t\t\tshort domainLength = (short) target.Length;\n\t\t\tshort domainOffset = (short) payloadOffset;\n\t\t\tmessage[28] = (byte) domainLength;\n\t\t\tmessage[29] = (byte) (domainLength >> 8);\n\t\t\tmessage[30] = message[28];\n\t\t\tmessage[31] = message[29];\n\t\t\tmessage[32] = (byte) domainOffset;\n\t\t\tmessage[33] = (byte) (domainOffset >> 8);\n\t\t\t//message[34] = (byte) (domainOffset >> 16);\n\t\t\t//message[35] = (byte) (domainOffset >> 24);\n\n\t\t\t// UserName\n\t\t\tshort userLength = (short) user.Length;\n\t\t\tshort userOffset = (short) (domainOffset + domainLength);\n\t\t\tmessage[36] = (byte) userLength;\n\t\t\tmessage[37] = (byte) (userLength >> 8);\n\t\t\tmessage[38] = message[36];\n\t\t\tmessage[39] = message[37];\n\t\t\tmessage[40] = (byte) userOffset;\n\t\t\tmessage[41] = (byte) (userOffset >> 8);\n\t\t\t//message[42] = (byte) (userOffset >> 16);\n\t\t\t//message[43] = (byte) (userOffset >> 24);\n\n\t\t\t// Workstation\n\t\t\tshort workstationLength = (short) workstation.Length;\n\t\t\tshort workstationOffset = (short) (userOffset + userLength);\n\t\t\tmessage[44] = (byte) workstationLength;\n\t\t\tmessage[45] = (byte) (workstationLength >> 8);\n\t\t\tmessage[46] = message[44];\n\t\t\tmessage[47] = message[45];\n\t\t\tmessage[48] = (byte) workstationOffset;\n\t\t\tmessage[49] = (byte) (workstationOffset >> 8);\n\t\t\t//message[50] = (byte) (workstationOffset >> 16);\n\t\t\t//message[51] = (byte) (workstationOffset >> 24);\n\n\t\t\t// EncryptedRandomSessionKey\n\t\t\tshort skeyOffset = (short) (ntResponseOffset + ntResponseLength);\n\t\t\tmessage[52] = (byte) skeyLength;\n\t\t\tmessage[53] = (byte) (skeyLength >> 8);\n\t\t\tmessage[54] = message[52];\n\t\t\tmessage[55] = message[53];\n\t\t\tmessage[56] = (byte) skeyOffset;\n\t\t\tmessage[57] = (byte) (skeyOffset >> 8);\n\t\t\t//message[58] = (byte) (skeyOffset >> 16);\n\t\t\t//message[59] = (byte) (skeyOffset >> 24);\n\n\t\t\t// options flags\n\t\t\tmessage[60] = (byte) Flags;\n\t\t\tmessage[61] = (byte)((uint) Flags >> 8);\n\t\t\tmessage[62] = (byte)((uint) Flags >> 16);\n\t\t\tmessage[63] = (byte)((uint) Flags >> 24);\n\n\t\t\tif (challenge != null && (challenge.Flags & NtlmFlags.NegotiateVersion) != 0) {\n\t\t\t\tif (OSVersion != null) {\n\t\t\t\t\tmessage[64] = (byte) OSVersion.Major;\n\t\t\t\t\tmessage[65] = (byte) OSVersion.Minor;\n\t\t\t\t\tmessage[66] = (byte) OSVersion.Build;\n\t\t\t\t\tmessage[67] = (byte)(OSVersion.Build >> 8);\n\t\t\t\t}\n\t\t\t\tmessage[68] = 0x00;\n\t\t\t\tmessage[69] = 0x00;\n\t\t\t\tmessage[70] = 0x00;\n\t\t\t\tmessage[71] = 0x0f;\n\t\t\t}\n\n\t\t\tif (Mic != null)\n\t\t\t\tBuffer.BlockCopy (Mic, 0, message, micOffset, Mic.Length);\n\n\t\t\tBuffer.BlockCopy (target, 0, message, domainOffset, target.Length);\n\t\t\tBuffer.BlockCopy (user, 0, message, userOffset, user.Length);\n\t\t\tBuffer.BlockCopy (workstation, 0, message, workstationOffset, workstation.Length);\n\n\t\t\tif (LmChallengeResponse != null)\n\t\t\t\tBuffer.BlockCopy (LmChallengeResponse, 0, message, lmResponseOffset, LmChallengeResponse.Length);\n\n\t\t\tif (NtChallengeResponse != null)\n\t\t\t\tBuffer.BlockCopy (NtChallengeResponse, 0, message, ntResponseOffset, NtChallengeResponse.Length);\n\n\t\t\tif ((Flags & NtlmFlags.NegotiateKeyExchange) != 0 && EncryptedRandomSessionKey != null)\n\t\t\t\tBuffer.BlockCopy (EncryptedRandomSessionKey, 0, message, skeyOffset, EncryptedRandomSessionKey.Length);\n\n\t\t\treturn message;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmChallengeMessage.cs",
    "content": "﻿//\n// NtlmChallengeMessage.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Text;\n\nnamespace MailKit.Security.Ntlm {\n\tclass NtlmChallengeMessage : NtlmMessageBase\n\t{\n\t\tconst NtlmFlags DefaultFlags = NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateUnicode /*| NtlmFlags.NegotiateAlwaysSign*/;\n\t\tbyte[] serverChallenge;\n\t\tbyte[]? cached;\n\n\t\tpublic NtlmChallengeMessage (NtlmFlags flags, Version? osVersion = null) : base (2)\n\t\t{\n\t\t\tserverChallenge = NtlmUtils.NONCE (8);\n\t\t\tOSVersion = osVersion;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\tpublic NtlmChallengeMessage (Version? osVersion = null) : this (DefaultFlags, osVersion)\n\t\t{\n\t\t}\n\n\t\tpublic NtlmChallengeMessage (byte[] message, int startIndex, int length) : base (2)\n\t\t{\n\t\t\tserverChallenge = new byte[8];\n\t\t\tDecode (message, startIndex, length);\n\n\t\t\tcached = new byte[length];\n\t\t\tBuffer.BlockCopy (message, startIndex, cached, 0, length);\n\t\t}\n\n\t\t~NtlmChallengeMessage ()\n\t\t{\n\t\t\tif (serverChallenge != null)\n\t\t\t\tArray.Clear (serverChallenge, 0, serverChallenge.Length);\n\t\t}\n\n\t\tpublic byte[] ServerChallenge {\n\t\t\tget { return serverChallenge; }\n\t\t\tset { \n\t\t\t\tif (value == null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (value));\n\n\t\t\t\tif (value.Length != 8)\n\t\t\t\t\tthrow new ArgumentException (\"Invalid nonce length (should be 8 bytes).\", nameof (value));\n\n\t\t\t\tArray.Clear (serverChallenge, 0, serverChallenge.Length);\n\t\t\t\tserverChallenge = value;\n\t\t\t}\n\t\t}\n\n\t\tpublic string? TargetName {\n\t\t\tget; set;\n\t\t}\n\n\t\tpublic NtlmTargetInfo? TargetInfo {\n\t\t\tget; set;\n\t\t}\n\n\t\tpublic byte[]? GetEncodedTargetInfo ()\n\t\t{\n\t\t\treturn TargetInfo?.Encode ((Flags & NtlmFlags.NegotiateUnicode) != 0);\n\t\t}\n\n\t\tvoid Decode (byte[] message, int startIndex, int length)\n\t\t{\n\t\t\tValidateArguments (message, startIndex, length);\n\n\t\t\tFlags = (NtlmFlags) BitConverterLE.ToUInt32 (message, startIndex + 20);\n\n\t\t\tBuffer.BlockCopy (message, startIndex + 24, serverChallenge, 0, 8);\n\n\t\t\tvar targetNameLength = BitConverterLE.ToUInt16 (message, startIndex + 12);\n\t\t\t//var targetNameMaxLength = BitConverterLE.ToUInt16 (message, startIndex + 14);\n\t\t\tvar targetNameOffset = BitConverterLE.ToInt32 (message, startIndex + 16);\n\n\t\t\tif (targetNameLength > 0) {\n\t\t\t\tvar encoding = (Flags & NtlmFlags.NegotiateUnicode) != 0 ? Encoding.Unicode : Encoding.UTF8;\n\n\t\t\t\tTargetName = encoding.GetString (message, startIndex + targetNameOffset, targetNameLength);\n\t\t\t}\n\n\t\t\tif ((Flags & NtlmFlags.NegotiateVersion) != 0 && length >= 56) {\n\t\t\t\t// decode the OS Version\n\t\t\t\tint major = message[startIndex + 48];\n\t\t\t\tint minor = message[startIndex + 49];\n\t\t\t\tint build = BitConverterLE.ToUInt16 (message, startIndex + 50);\n\n\t\t\t\tOSVersion = new Version (major, minor, build);\n\t\t\t}\n\n\t\t\t// The Target Info block is optional.\n\t\t\tif (length >= 48 && targetNameOffset >= 48) {\n\t\t\t\tvar targetInfoLength = BitConverterLE.ToUInt16 (message, startIndex + 40);\n\t\t\t\tvar targetInfoOffset = BitConverterLE.ToUInt16 (message, startIndex + 44);\n\n\t\t\t\tif (targetInfoLength > 0 && targetInfoOffset < length && targetInfoLength <= (length - targetInfoOffset))\n\t\t\t\t\tTargetInfo = new NtlmTargetInfo (message, startIndex + targetInfoOffset, targetInfoLength, (Flags & NtlmFlags.NegotiateUnicode) != 0);\n\t\t\t}\n\t\t}\n\n\t\tpublic override byte[] Encode ()\n\t\t{\n\t\t\tif (cached != null)\n\t\t\t\treturn cached;\n\n\t\t\tvar targetInfo = GetEncodedTargetInfo ();\n\t\t\tint targetNameOffset = 48;\n\t\t\tint targetInfoOffset = 56;\n\t\t\tbyte[]? targetName = null;\n\t\t\tint size = 48;\n\n\t\t\tif (TargetName != null) {\n\t\t\t\tvar encoding = (Flags & NtlmFlags.NegotiateUnicode) != 0 ? Encoding.Unicode : Encoding.UTF8;\n\n\t\t\t\ttargetName = encoding.GetBytes (TargetName);\n\t\t\t\ttargetInfoOffset += targetName.Length;\n\t\t\t\tsize += targetName.Length;\n\t\t\t}\n\n\t\t\tif (targetInfo != null) {\n\t\t\t\tsize += 8 + targetInfo.Length;\n\t\t\t\ttargetNameOffset += 8;\n\t\t\t}\n\n\t\t\t// 12 bytes\n\t\t\tvar message = PrepareMessage (size);\n\n\t\t\t// TargetName (8 bytes)\n\t\t\tif (targetName != null) {\n\t\t\t\tmessage[12] = (byte) targetName.Length;\n\t\t\t\tmessage[13] = (byte)(targetName.Length >> 8);\n\t\t\t\tmessage[14] = (byte)targetName.Length;\n\t\t\t\tmessage[15] = (byte)(targetName.Length >> 8);\n\t\t\t\tmessage[16] = (byte) targetNameOffset;\n\t\t\t\tmessage[17] = (byte)(targetNameOffset >> 8);\n\t\t\t\t//message[18] = (byte) (targetNameOffset >> 16);\n\t\t\t\t//message[19] = (byte) (targetNameOffset >> 24);\n\n\t\t\t\t// TargetName Payload\n\t\t\t\tBuffer.BlockCopy (targetName, 0, message, targetNameOffset, targetName.Length);\n\t\t\t}\n\n\t\t\t// NegotiateFlags (4 bytes)\n\t\t\tmessage[20] = (byte) Flags;\n\t\t\tmessage[21] = (byte) ((uint) Flags >> 8);\n\t\t\tmessage[22] = (byte) ((uint) Flags >> 16);\n\t\t\tmessage[23] = (byte) ((uint) Flags >> 24);\n\n\t\t\t// ServerChallenge (8 bytes)\n\t\t\tBuffer.BlockCopy (serverChallenge, 0, message, 24, serverChallenge.Length);\n\n\t\t\t// Reserved (8 bytes)\n\n\t\t\t// TargetInfo (8 bytes)\n\t\t\tif (targetInfo != null) {\n\t\t\t\tmessage[40] = (byte) targetInfo.Length;\n\t\t\t\tmessage[41] = (byte)(targetInfo.Length >> 8);\n\t\t\t\tmessage[42] = (byte) targetInfo.Length;\n\t\t\t\tmessage[43] = (byte)(targetInfo.Length >> 8);\n\t\t\t\tmessage[44] = (byte) targetInfoOffset;\n\t\t\t\tmessage[45] = (byte)(targetInfoOffset >> 8);\n\n\t\t\t\t// TargetInfo Payload\n\t\t\t\tBuffer.BlockCopy (targetInfo, 0, message, targetInfoOffset, targetInfo.Length);\n\t\t\t}\n\n\t\t\tif ((Flags & NtlmFlags.NegotiateVersion) != 0) {\n\t\t\t\tif (OSVersion != null) {\n\t\t\t\t\tmessage[48] = (byte) OSVersion.Major;\n\t\t\t\t\tmessage[49] = (byte) OSVersion.Minor;\n\t\t\t\t\tmessage[50] = (byte) OSVersion.Build;\n\t\t\t\t\tmessage[51] = (byte)(OSVersion.Build >> 8);\n\t\t\t\t}\n\t\t\t\tmessage[52] = 0x00;\n\t\t\t\tmessage[53] = 0x00;\n\t\t\t\tmessage[54] = 0x00;\n\t\t\t\tmessage[55] = 0x0f;\n\t\t\t}\n\n\t\t\tcached = message;\n\n\t\t\treturn message;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmFlags.cs",
    "content": "﻿//\n// NtlmFlags.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\n\nnamespace MailKit.Security.Ntlm {\n\t/// <summary>\n\t/// The NTLM message header flags.\n\t/// </summary>\n\t/// <remarks>\n\t/// More details here: http://davenport.sourceforge.net/ntlm.html#theNtlmMessageHeaderLayout\n\t/// and at https://msdn.microsoft.com/en-us/library/cc236650.aspx\n\t/// </remarks>\n\t[Flags]\n\tenum NtlmFlags {\n\t\t/// <summary>\n\t\t/// Indicates that Unicode strings are supported for use in security buffer data.\n\t\t/// </summary>\n\t\tNegotiateUnicode = 0x00000001,\n\n\t\t/// <summary>\n\t\t/// Indicates that OEM strings are supported for use in security buffer data.\n\t\t/// </summary>\n\t\tNegotiateOem = 0x00000002,\n\n\t\t/// <summary>\n\t\t/// Requests that the server's authentication realm be included in the Type 2 message.\n\t\t/// </summary>\n\t\tRequestTarget = 0x00000004,\n\n\t\t/// <summary>\n\t\t/// This flag's usage has not been identified.\n\t\t/// </summary>\n\t\tR10 = 0x00000008,\n\n\t\t/// <summary>\n\t\t/// Specifies that authenticated communication between the client and server should carry a digital signature (message integrity).\n\t\t/// </summary>\n\t\tNegotiateSign = 0x00000010,\n\n\t\t/// <summary>\n\t\t/// Specifies that authenticated communication between the client and server should be encrypted (message confidentiality).\n\t\t/// </summary>\n\t\tNegotiateSeal = 0x00000020,\n\n\t\t/// <summary>\n\t\t/// Indicates that datagram authentication is being used.\n\t\t/// </summary>\n\t\tNegotiateDatagramStyle = 0x00000040,\n\n\t\t/// <summary>\n\t\t/// Indicates that the Lan Manager Session Key should be used for signing\n\t\t/// and sealing authenticated communications.\n\t\t/// </summary>\n\t\tNegotiateLanManagerKey = 0x00000080,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r8)\n\t\t/// </summary>\n\t\tR9 = 0x00000100,\n\n\t\t/// <summary>\n\t\t/// Indicates that NTLM authentication is being used.\n\t\t/// </summary>\n\t\tNegotiateNtlm = 0x00000200,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r8)\n\t\t/// </summary>\n\t\tR8 = 0x00000400,\n\n\t\t/// <summary>\n\t\t/// Sent by the client in the Type 3 message to indicate that an anonymous\n\t\t/// context has been established. This also affects the response fields.\n\t\t/// </summary>\n\t\tNegotiateAnonymous = 0x00000800,\n\n\t\t/// <summary>\n\t\t/// Sent by the client in the Type 1 message to indicate that the name of the\n\t\t/// domain in which the client workstation has membership is included in the\n\t\t/// message. This is used by the server to determine whether the client is\n\t\t/// eligible for local authentication.\n\t\t/// </summary>\n\t\tNegotiateDomainSupplied = 0x00001000,\n\n\t\t/// <summary>\n\t\t/// Sent by the client in the Type 1 message to indicate that the client\n\t\t/// workstation's name is included in the message. This is used by the server\n\t\t/// to determine whether the client is eligible for local authentication.\n\t\t/// </summary>\n\t\tNegotiateWorkstationSupplied = 0x00002000,\n\n\t\t/// <summary>\n\t\t/// Sent by the server to indicate that the server and client are on the same\n\t\t/// machine. Implies that the client may use the established local credentials\n\t\t/// for authentication instead of calculating a response to the challenge.\n\t\t/// </summary>\n\t\tNegotiateLocalCall = 0x00004000,\n\t\tR7 = NegotiateLocalCall,\n\n\t\t/// <summary>\n\t\t/// Indicates that authenticated communication between the client and server\n\t\t/// should be signed with a \"dummy\" signature.\n\t\t/// </summary>\n\t\tNegotiateAlwaysSign = 0x00008000,\n\n\t\t/// <summary>\n\t\t/// Sent by the server in the Type 2 message to indicate that the target\n\t\t/// authentication realm is a domain.\n\t\t/// </summary>\n\t\tTargetTypeDomain = 0x00010000,\n\n\t\t/// <summary>\n\t\t/// Sent by the server in the Type 2 message to indicate that the target\n\t\t/// authentication realm is a server.\n\t\t/// </summary>\n\t\tTargetTypeServer = 0x00020000,\n\n\t\t/// <summary>\n\t\t/// Sent by the server in the Type 2 message to indicate that the target\n\t\t/// authentication realm is a share. Presumably, this is for share-level\n\t\t/// authentication. Usage is unclear.\n\t\t/// </summary>\n\t\tTargetTypeShare = 0x00040000,\n\t\tR6 = TargetTypeShare,\n\n\t\t/// <summary>\n\t\t/// If set, requests usage of the NTLM v2 session security. NTLM v2 session\n\t\t/// security is a misnomer because it is not NTLM v2. It is NTLM v1 using the\n\t\t/// extended session security that is also in NTLM v2. NTLMSSP_NEGOTIATE_LM_KEY\n\t\t/// and NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY are mutually exclusive. If\n\t\t/// both NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY and NTLMSSP_NEGOTIATE_LM_KEY\n\t\t/// are requested, NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY alone MUST be\n\t\t/// returned to the client. NTLM v2 authentication session key generation MUST\n\t\t/// be supported by both the client and the DC in order to be used, and extended\n\t\t/// session security signing and sealing requires support from the client and\n\t\t/// the server in order to be used.\n\t\t/// </summary>\n\t\tNegotiateExtendedSessionSecurity = 0x00080000,\n\n\t\t/// <summary>\n\t\t/// This flag's usage has not been identified.\n\t\t/// </summary>\n\t\tNegotiateIdentify = 0x00100000,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r5)\n\t\t/// </summary>\n\t\tR5 = 0x00200000,\n\n\t\t/// <summary>\n\t\t/// Indicates that the LMOWF function should be used to generate a session key.\n\t\t/// </summary>\n\t\tRequestNonNTSessionKey = 0x00400000,\n\n\t\t/// <summary>\n\t\t/// Sent by the server in the Type 2 message to indicate that it is including\n\t\t/// a Target Information block in the message. The Target Information block\n\t\t/// is used in the calculation of the NTLMv2 response.\n\t\t/// </summary>\n\t\tNegotiateTargetInfo = 0x00800000,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r4)\n\t\t/// </summary>\n\t\tR4 = 0x01000000,\n\n\t\t/// <summary>\n\t\t/// Indicates that the version field is present.\n\t\t/// </summary>\n\t\tNegotiateVersion = 0x02000000,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r3)\n\t\t/// </summary>\n\t\tR3 = 0x04000000,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r2)\n\t\t/// </summary>\n\t\tR2 = 0x08000000,\n\n\t\t/// <summary>\n\t\t/// This flag is unused and MUST be zero. (r1)\n\t\t/// </summary>\n\t\tR1 = 0x10000000,\n\n\t\t/// <summary>\n\t\t/// Indicates that 128-bit encryption is supported.\n\t\t/// </summary>\n\t\tNegotiate128 = 0x20000000,\n\n\t\t/// <summary>\n\t\t/// Indicates that the client will provide an encrypted master key in the\n\t\t/// \"Session Key\" field of the Type 3 message.\n\t\t/// </summary>\n\t\tNegotiateKeyExchange = 0x40000000,\n\n\t\t/// <summary>\n\t\t/// Indicates that 56-bit encryption is supported.\n\t\t/// </summary>\n\t\tNegotiate56 = (unchecked ((int) 0x80000000))\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmMessageBase.cs",
    "content": "//\n// NtlmMessageBase.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Globalization;\n\nnamespace MailKit.Security.Ntlm {\n\tabstract class NtlmMessageBase\n\t{\n\t\tstatic readonly byte[] Signature = { (byte) 'N', (byte) 'T', (byte) 'L', (byte) 'M', (byte) 'S', (byte) 'S', (byte) 'P', 0x00 };\n\n\t\tprotected NtlmMessageBase (int type)\n\t\t{\n\t\t\tType = type;\n\t\t}\n\n\t\tpublic NtlmFlags Flags {\n\t\t\tget; protected set;\n\t\t}\n\n\t\tpublic Version? OSVersion {\n\t\t\tget; protected set;\n\t\t}\n\n\t\tpublic int Type {\n\t\t\tget; private set;\n\t\t}\n\n\t\tprotected byte[] PrepareMessage (int size)\n\t\t{\n\t\t\tvar message = new byte[size];\n\n\t\t\tBuffer.BlockCopy (Signature, 0, message, 0, 8);\n\n\t\t\tmessage[ 8] = (byte) Type;\n\t\t\tmessage[ 9] = (byte)(Type >> 8);\n\t\t\tmessage[10] = (byte)(Type >> 16);\n\t\t\tmessage[11] = (byte)(Type >> 24);\n\n\t\t\treturn message;\n\t\t}\n\n\t\tbool CheckSignature (byte[] message, int startIndex)\n\t\t{\n\t\t\tfor (int i = 0; i < Signature.Length; i++) {\n\t\t\t\tif (message[startIndex + i] != Signature[i])\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn BitConverterLE.ToUInt32 (message, startIndex + 8) == Type;\n\t\t}\n\n\t\tprotected void ValidateArguments (byte[] message, int startIndex, int length)\n\t\t{\n\t\t\tif (message == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (message));\n\n\t\t\tif (startIndex < 0 || startIndex > message.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (startIndex));\n\n\t\t\tif (length < 12 || length > (message.Length - startIndex))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (length));\n\n\t\t\tif (!CheckSignature (message, startIndex))\n\t\t\t\tthrow new ArgumentException (string.Format (CultureInfo.InvariantCulture, \"Invalid Type{0} message.\", Type), nameof (message));\n\n\t\t\tvar messageType = BitConverterLE.ToUInt32 (message, 8);\n\t\t\tif (messageType != Type)\n\t\t\t\tthrow new ArgumentException (string.Format (CultureInfo.InvariantCulture, \"Invalid Type{0} message.\", Type), nameof (message));\n\t\t}\n\n\t\tpublic abstract byte[] Encode ();\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmNegotiateMessage.cs",
    "content": "﻿//\n// NtlmNegotiateMessage.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// NTLM specification: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n//\n// NTLM registry key documentation: https://learn.microsoft.com/en-us/troubleshoot/windows-client/windows-security/enable-ntlm-2-authentication\n// Note: Ideally, we'd default our flags based on the registry settings of the OS.\n\nusing System;\nusing System.Text;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Security.Ntlm {\n\tclass NtlmNegotiateMessage : NtlmMessageBase\n\t{\n\t\t// System.Net.Mail seems to default to:           NtlmFlags.Negotiate56 | NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateExtendedSessionSecurity | NtlmFlags.NegotiateVersion | NtlmFlags.Negotiate128\n\t\tinternal const NtlmFlags DefaultFlags = NtlmFlags.Negotiate56 | NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateExtendedSessionSecurity | NtlmFlags.Negotiate128;\n\n\t\tbyte[]? cached;\n\n\t\tpublic NtlmNegotiateMessage (NtlmFlags flags, string? domain, string? workstation, Version? osVersion = null) : base (1)\n\t\t{\n\t\t\tFlags = flags & ~(NtlmFlags.NegotiateDomainSupplied | NtlmFlags.NegotiateWorkstationSupplied | NtlmFlags.NegotiateVersion);\n\n\t\t\t// Note: If the NTLMSSP_NEGOTIATE_VERSION flag is set by the client application, the Version field\n\t\t\t// MUST be set to the current version (section 2.2.2.10), the DomainName field MUST be set to\n\t\t\t// a zero-length string, and the Workstation field MUST be set to a zero-length string.\n\t\t\tif (osVersion != null) {\n\t\t\t\tFlags |= NtlmFlags.NegotiateVersion;\n\t\t\t\tWorkstation = string.Empty;\n\t\t\t\tDomain = string.Empty;\n\t\t\t\tOSVersion = osVersion;\n\t\t\t} else {\n\t\t\t\tif (!string.IsNullOrEmpty (workstation)) {\n\t\t\t\t\tFlags |= NtlmFlags.NegotiateWorkstationSupplied;\n\t\t\t\t\tWorkstation = workstation!.ToUpperInvariant ();\n\t\t\t\t} else {\n\t\t\t\t\tWorkstation = string.Empty;\n\t\t\t\t}\n\n\t\t\t\tif (!string.IsNullOrEmpty (domain)) {\n\t\t\t\t\tFlags |= NtlmFlags.NegotiateDomainSupplied;\n\t\t\t\t\tDomain = domain!.ToUpperInvariant ();\n\t\t\t\t} else {\n\t\t\t\t\tDomain = string.Empty;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic NtlmNegotiateMessage (string? domain = null, string? workstation = null, Version? osVersion = null) : this (DefaultFlags, domain, workstation, osVersion)\n\t\t{\n\t\t}\n\n\t\tpublic NtlmNegotiateMessage (byte[] message, int startIndex, int length) : base (1)\n\t\t{\n\t\t\tDecode (message, startIndex, length);\n\n\t\t\tcached = new byte[length];\n\t\t\tBuffer.BlockCopy (message, startIndex, cached, 0, length);\n\t\t}\n\n\t\tpublic string Domain {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic string Workstation {\n\t\t\tget; private set;\n\t\t}\n\n\t\t[MemberNotNull (nameof (Domain), nameof (Workstation))]\n\t\tvoid Decode (byte[] message, int startIndex, int length)\n\t\t{\n\t\t\tValidateArguments (message, startIndex, length);\n\n\t\t\tFlags = (NtlmFlags) BitConverterLE.ToUInt32 (message, startIndex + 12);\n\n\t\t\t// decode the domain\n\t\t\tvar domainLength = BitConverterLE.ToUInt16 (message, startIndex + 16);\n\t\t\tvar domainOffset = BitConverterLE.ToUInt16 (message, startIndex + 20);\n\t\t\tDomain = Encoding.UTF8.GetString (message, startIndex + domainOffset, domainLength);\n\n\t\t\t// decode the workstation/host\n\t\t\tvar workstationLength = BitConverterLE.ToUInt16 (message, startIndex + 24);\n\t\t\tvar workstationOffset = BitConverterLE.ToUInt16 (message, startIndex + 28);\n\t\t\tWorkstation = Encoding.UTF8.GetString (message, startIndex + workstationOffset, workstationLength);\n\n\t\t\tif ((Flags & NtlmFlags.NegotiateVersion) != 0 && length >= 40) {\n\t\t\t\t// decode the OS Version\n\t\t\t\tint major = message[startIndex + 32];\n\t\t\t\tint minor = message[startIndex + 33];\n\t\t\t\tint build = BitConverterLE.ToUInt16 (message, startIndex + 34);\n\n\t\t\t\tOSVersion = new Version (major, minor, build);\n\t\t\t}\n\t\t}\n\n\t\tpublic override byte[] Encode ()\n\t\t{\n\t\t\tif (cached != null)\n\t\t\t\treturn cached;\n\n\t\t\tvar workstation = Encoding.UTF8.GetBytes (Workstation);\n\t\t\tvar domain = Encoding.UTF8.GetBytes (Domain);\n\t\t\tconst int versionLength = 8;\n\t\t\tint workstationOffset = 32 + versionLength;\n\t\t\tint domainOffset = workstationOffset + workstation.Length;\n\n\t\t\tvar message = PrepareMessage (32 + domain.Length + workstation.Length + versionLength);\n\n\t\t\tmessage[12] = (byte) Flags;\n\t\t\tmessage[13] = (byte)((uint) Flags >> 8);\n\t\t\tmessage[14] = (byte)((uint) Flags >> 16);\n\t\t\tmessage[15] = (byte)((uint) Flags >> 24);\n\n\t\t\tmessage[16] = (byte) domain.Length;\n\t\t\tmessage[17] = (byte)(domain.Length >> 8);\n\t\t\tmessage[18] = message[16];\n\t\t\tmessage[19] = message[17];\n\t\t\tmessage[20] = (byte) domainOffset;\n\t\t\tmessage[21] = (byte)(domainOffset >> 8);\n\n\t\t\tmessage[24] = (byte) workstation.Length;\n\t\t\tmessage[25] = (byte)(workstation.Length >> 8);\n\t\t\tmessage[26] = message[24];\n\t\t\tmessage[27] = message[25];\n\t\t\tmessage[28] = (byte) workstationOffset;\n\t\t\tmessage[29] = (byte)(workstationOffset >> 8);\n\n\t\t\tif ((Flags & NtlmFlags.NegotiateVersion) != 0) {\n\t\t\t\tif (OSVersion != null) {\n\t\t\t\t\tmessage[32] = (byte) OSVersion.Major;\n\t\t\t\t\tmessage[33] = (byte) OSVersion.Minor;\n\t\t\t\t\tmessage[34] = (byte) OSVersion.Build;\n\t\t\t\t\tmessage[35] = (byte)(OSVersion.Build >> 8);\n\t\t\t\t}\n\t\t\t\tmessage[36] = 0x00;\n\t\t\t\tmessage[37] = 0x00;\n\t\t\t\tmessage[38] = 0x00;\n\t\t\t\tmessage[39] = 0x0f;\n\t\t\t}\n\n\t\t\tBuffer.BlockCopy (workstation, 0, message, workstationOffset, workstation.Length);\n\t\t\tBuffer.BlockCopy (domain, 0, message, domainOffset, domain.Length);\n\n\t\t\tcached = message;\n\n\t\t\treturn message;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmSingleHostData.cs",
    "content": "﻿//\n// NtlmSingleHostData.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace MailKit.Security.Ntlm {\n\t/// <summary>\n\t/// An NTLM SingleHostData structure.\n\t/// </summary>\n\t/// <remarks>\n\t/// An NTLM SingleHostData structure.\n\t/// </remarks>\n\tclass NtlmSingleHostData\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmSingleHostData\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NtlmSingleHostData\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"buffer\">The raw target info buffer to decode.</param>\n\t\t/// <param name=\"startIndex\">The starting index of the single host data structure.</param>\n\t\t/// <param name=\"length\">The length of the single host data structure.</param>\n\t\tpublic NtlmSingleHostData (byte[] buffer, int startIndex, int length)\n\t\t{\n\t\t\tDecode (buffer, startIndex, length);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmSingleHostData\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NtlmSingleHostData\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"customData\">The 8-byte platform-specific blob.</param>\n\t\t/// <param name=\"machineId\">The 256-bit randomly generated machine id.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <para><paramref name=\"customData\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"machineId\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\t/// <exception cref=\"ArgumentException\">\n\t\t/// <para><paramref name=\"customData\"/> is not 8 bytes.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"machineId\"/> is not 32 bytes.</para>\n\t\t/// </exception>\n\t\tpublic NtlmSingleHostData (byte[] customData, byte[] machineId)\n\t\t{\n\t\t\tif (customData == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (customData));\n\n\t\t\tif (customData.Length != 8)\n\t\t\t\tthrow new ArgumentException (\"The custom data must be 8 bytes.\", nameof (customData));\n\n\t\t\tif (machineId == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (machineId));\n\n\t\t\tif (machineId.Length != 32)\n\t\t\t\tthrow new ArgumentException (\"The machine id must be 32 bytes.\", nameof (machineId));\n\n\t\t\tCustomData = customData;\n\t\t\tMachineId = machineId;\n\t\t\tSize = 48;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set an 8-byte platform-specific blob.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets an 8-byte platform-specific blob.\n\t\t/// </remarks>\n\t\tpublic byte[] CustomData {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the 256-bit randomly generated machine ID.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the 256-bit randomly generated machine ID.\n\t\t/// </remarks>\n\t\t/// <value>The 256-bit randomly generated machine ID.</value>\n\t\tpublic byte[] MachineId {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the size of the SingleHostData structure.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the size of the SingleHostData structure.\n\t\t/// </remarks>\n\t\t/// <value>The size of the SingleHostData structure.</value>\n\t\tpublic int Size {\n\t\t\tget; private set;\n\t\t}\n\n\t\t[MemberNotNull (nameof (CustomData), nameof (MachineId))]\n\t\tvoid Decode (byte[] buffer, int startIndex, int length)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (startIndex < 0 || startIndex > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (startIndex));\n\n\t\t\tif (length < 48 || length > (buffer.Length - startIndex))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (length));\n\n\t\t\tint index = startIndex;\n\n\t\t\t// Size (4 bytes): A 32-bit unsigned integer that defines the length, in bytes, of the Value field in the AV_PAIR (section 2.2.2.1) structure.\n\t\t\tSize = BitConverterLE.ToInt32 (buffer, index);\n\t\t\tindex += 4;\n\n\t\t\t// Z4 (4 bytes): A 32-bit integer value containing 0x00000000.\n\t\t\tindex += 4;\n\n\t\t\t// CustomData (8 bytes): An 8-byte platform-specific blob containing info only relevant when the client and the server are on the same host.\n\t\t\tCustomData = new byte[8];\n\t\t\tBuffer.BlockCopy (buffer, index, CustomData, 0, 8);\n\t\t\tindex += 8;\n\n\t\t\t// MachineID (32 bytes): A 256-bit random number created at computer startup to identify the calling machine.\n\t\t\tMachineId = new byte[32];\n\t\t\tBuffer.BlockCopy (buffer, index, MachineId, 0, 32);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encode the SingleHostData structure.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the SingleHostData structure.\n\t\t/// </remarks>\n\t\t/// <returns>The encoded SingleHostData structure.</returns>\n\t\tpublic byte[] Encode ()\n\t\t{\n\t\t\tvar buffer = new byte[Size];\n\t\t\tint index = 0;\n\n\t\t\t// Size (4 bytes): A 32-bit unsigned integer that defines the length, in bytes, of the Value field in the AV_PAIR (section 2.2.2.1) structure.\n\t\t\tbuffer[index++] = (byte) (Size);\n\t\t\tbuffer[index++] = (byte) (Size >> 8);\n\t\t\tbuffer[index++] = (byte) (Size >> 16);\n\t\t\tbuffer[index++] = (byte) (Size >> 24);\n\n\t\t\t// Z4 (4 bytes): A 32-bit integer value containing 0x00000000.\n\t\t\tindex += 4;\n\n\t\t\t// CustomData (8 bytes): An 8-byte platform-specific blob containing info only relevant when the client and the server are on the same host.\n\t\t\tBuffer.BlockCopy (CustomData, 0, buffer, index, 8);\n\t\t\tindex += 8;\n\n\t\t\t// MachineID (32 bytes): A 256-bit random number created at computer startup to identify the calling machine.\n\t\t\tBuffer.BlockCopy (MachineId, 0, buffer, index, 32);\n\n\t\t\treturn buffer;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmTargetInfo.cs",
    "content": "﻿//\n// NtlmTargetInfo.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Text;\nusing System.Collections.Generic;\n\nnamespace MailKit.Security.Ntlm {\n\t/// <summary>\n\t/// An NTLM TargetInfo structure.\n\t/// </summary>\n\t/// <remarks>\n\t/// An NTLM TargetInfo structure.\n\t/// </remarks>\n\tclass NtlmTargetInfo\n\t{\n\t\treadonly List<NtlmAttributeValuePair> attributes = new List<NtlmAttributeValuePair> ();\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmTargetInfo\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NtlmTargetInfo\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"buffer\">The raw target info buffer to decode.</param>\n\t\t/// <param name=\"startIndex\">The starting index of the target info structure.</param>\n\t\t/// <param name=\"length\">The length of the target info structure.</param>\n\t\t/// <param name=\"unicode\"><see langword=\"true\" /> if the target info strings are unicode; otherwise, <see langword=\"false\" />.</param>\n\t\tpublic NtlmTargetInfo (byte[] buffer, int startIndex, int length, bool unicode)\n\t\t{\n\t\t\tDecode (buffer, startIndex, length, unicode);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"NtlmTargetInfo\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NtlmTargetInfo\"/>.\n\t\t/// </remarks>\n\t\tpublic NtlmTargetInfo ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copy the attribute value pairs to another TargetInfo.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies the attribute value pairs to another TargetInfo.\n\t\t/// </remarks>\n\t\tpublic void CopyTo (NtlmTargetInfo targetInfo)\n\t\t{\n\t\t\ttargetInfo.attributes.Clear ();\n\n\t\t\tforeach (var attribute in attributes) {\n\t\t\t\tif (attribute is NtlmAttributeTimestampValuePair timestamp)\n\t\t\t\t\ttargetInfo.attributes.Add (new NtlmAttributeTimestampValuePair (timestamp.Attribute, timestamp.Value, timestamp.Size));\n\t\t\t\telse if (attribute is NtlmAttributeFlagsValuePair flags)\n\t\t\t\t\ttargetInfo.attributes.Add (new NtlmAttributeFlagsValuePair (flags.Attribute, flags.Value, flags.Size));\n\t\t\t\telse if (attribute is NtlmAttributeByteArrayValuePair array)\n\t\t\t\t\ttargetInfo.attributes.Add (new NtlmAttributeByteArrayValuePair (array.Attribute, array.Value));\n\t\t\t\telse if (attribute is NtlmAttributeStringValuePair str)\n\t\t\t\t\ttargetInfo.attributes.Add (new NtlmAttributeStringValuePair (str.Attribute, str.Value));\n\t\t\t}\n\t\t}\n\n\t\tinternal NtlmAttributeValuePair? GetAvPair (NtlmAttribute attr)\n\t\t{\n\t\t\tfor (int i = 0; i < attributes.Count; i++) {\n\t\t\t\tif (attributes[i].Attribute == attr)\n\t\t\t\t\treturn attributes[i];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tstring? GetAvPairString (NtlmAttribute attr)\n\t\t{\n\t\t\treturn ((NtlmAttributeStringValuePair?) GetAvPair (attr))?.Value;\n\t\t}\n\n\t\tvoid SetAvPairString (NtlmAttribute attr, string? value)\n\t\t{\n\t\t\tvar pair = (NtlmAttributeStringValuePair?) GetAvPair (attr);\n\n\t\t\tif (pair == null) {\n\t\t\t\tif (value != null)\n\t\t\t\t\tattributes.Add (new NtlmAttributeStringValuePair (attr, value));\n\t\t\t} else if (value != null) {\n\t\t\t\tpair.Value = value;\n\t\t\t} else {\n\t\t\t\tattributes.Remove (pair);\n\t\t\t}\n\t\t}\n\n\t\tbyte[]? GetAvPairByteArray (NtlmAttribute attr)\n\t\t{\n\t\t\treturn ((NtlmAttributeByteArrayValuePair?) GetAvPair (attr))?.Value;\n\t\t}\n\n\t\tvoid SetAvPairByteArray (NtlmAttribute attr, byte[]? value)\n\t\t{\n\t\t\tvar pair = (NtlmAttributeByteArrayValuePair?) GetAvPair (attr);\n\n\t\t\tif (pair == null) {\n\t\t\t\tif (value != null)\n\t\t\t\t\tattributes.Add (new NtlmAttributeByteArrayValuePair (attr, value));\n\t\t\t} else if (value != null) {\n\t\t\t\tpair.Value = value;\n\t\t\t} else {\n\t\t\t\tattributes.Remove (pair);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the server's NetBIOS computer name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the server's NetBIOS computer name.\n\t\t/// </remarks>\n\t\t/// <value>The server's NetBIOS computer name if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic string? ServerName {\n\t\t\tget { return GetAvPairString (NtlmAttribute.ServerName); }\n\t\t\tset { SetAvPairString (NtlmAttribute.ServerName, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the server's NetBIOS domain name.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the server's NetBIOS domain name.\n\t\t/// </remarks>\n\t\t/// <value>The server's NetBIOS domain name if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic string? DomainName {\n\t\t\tget { return GetAvPairString (NtlmAttribute.DomainName); }\n\t\t\tset { SetAvPairString (NtlmAttribute.DomainName, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the fully qualified domain name (FQDN) of the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the fully qualified domain name (FQDN) of the server.\n\t\t/// </remarks>\n\t\t/// <value>The fully qualified domain name (FQDN) of the server if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic string? DnsServerName {\n\t\t\tget { return GetAvPairString (NtlmAttribute.DnsServerName); }\n\t\t\tset { SetAvPairString (NtlmAttribute.DnsServerName, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the fully qualified domain name (FQDN) of the domain.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the fully qualified domain name (FQDN) of the domain.\n\t\t/// </remarks>\n\t\t/// <value>The fully qualified domain name (FQDN) of the domain if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic string? DnsDomainName {\n\t\t\tget { return GetAvPairString (NtlmAttribute.DnsDomainName); }\n\t\t\tset { SetAvPairString (NtlmAttribute.DnsDomainName, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the fully qualified domain name (FQDN) of the forest.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the fully qualified domain name (FQDN) of the forest.\n\t\t/// </remarks>\n\t\t/// <value>The fully qualified domain name (FQDN) of the forest if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic string? DnsTreeName {\n\t\t\tget { return GetAvPairString (NtlmAttribute.DnsTreeName); }\n\t\t\tset { SetAvPairString (NtlmAttribute.DnsTreeName, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a 32-bit value indicating server or client configuration.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a 32-bit value indicating server or client configuration.</para>\n\t\t/// <para>0x00000001: Indicates to the client that the account authentication is constrained.</para>\n\t\t/// <para>0x00000002: Indicates that the client is providing message integrity in the MIC field (section 2.2.1.3) in the AUTHENTICATE_MESSAGE.</para>\n\t\t/// <para>0x00000004: Indicates that the client is providing a target SPN generated from an untrusted source.</para>\n\t\t/// </remarks>\n\t\t/// <value>The 32-bit flags value if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic int? Flags {\n\t\t\tget { return ((NtlmAttributeFlagsValuePair?) GetAvPair (NtlmAttribute.Flags))?.Value; }\n\t\t\tset {\n\t\t\t\tvar pair = (NtlmAttributeFlagsValuePair?) GetAvPair (NtlmAttribute.Flags);\n\n\t\t\t\tif (pair == null) {\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tattributes.Add (new NtlmAttributeFlagsValuePair (NtlmAttribute.Flags, value.Value));\n\t\t\t\t} else if (value != null) {\n\t\t\t\t\tpair.Size = Math.Max (pair.Size, (short) (value.Value > short.MaxValue ? 4 : 2));\n\t\t\t\t\tpair.Value = value.Value;\n\t\t\t\t} else {\n\t\t\t\t\tattributes.Remove (pair);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a timestamp that contains the server local time.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a timestamp that contains the server local time.</para>\n\t\t/// <para>A FILETIME structure ([MS-DTYP] section 2.3.3) in little-endian byte order that contains\n\t\t/// the server local time. This structure is always sent in the CHALLENGE_MESSAGE.</para>\n\t\t/// </remarks>\n\t\t/// <value>The local time of the server, if available; otherwise <see langword=\"null\" />.</value>\n\t\tpublic long? Timestamp {\n\t\t\tget { return ((NtlmAttributeTimestampValuePair?) GetAvPair (NtlmAttribute.Timestamp))?.Value; }\n\t\t\tset {\n\t\t\t\tvar pair = (NtlmAttributeTimestampValuePair?) GetAvPair (NtlmAttribute.Timestamp);\n\n\t\t\t\tif (pair == null) {\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tattributes.Add (new NtlmAttributeTimestampValuePair (NtlmAttribute.Timestamp, value.Value));\n\t\t\t\t} else if (value != null) {\n\t\t\t\t\tpair.Size = Math.Max (pair.Size, (short) (value.Value > int.MaxValue ? 8 : 4));\n\t\t\t\t\tpair.Value = value.Value;\n\t\t\t\t} else {\n\t\t\t\t\tattributes.Remove (pair);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the single host data structure.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the single host data structure.</para>\n\t\t/// <para>The Value field contains a platform-specific blob, as well as a MachineID created at computer startup to identify the calling machine.</para>\n\t\t/// </remarks>\n\t\t/// <value>The single host data structure, if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic byte[]? SingleHost {\n\t\t\tget { return GetAvPairByteArray (NtlmAttribute.SingleHost); }\n\t\t\tset { SetAvPairByteArray (NtlmAttribute.SingleHost, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the Service Principal Name (SPN) of the server.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the Service Principal Name (SPN) of the server.\n\t\t/// </remarks>\n\t\t/// <value>The Service Principal Name (SPN) of the server, if available; otherwise, <see langword=\"null\" />.</value>\n\t\tpublic string? TargetName {\n\t\t\tget { return GetAvPairString (NtlmAttribute.TargetName); }\n\t\t\tset { SetAvPairString (NtlmAttribute.TargetName, value); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the channel binding hash.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the channel binding hash.\n\t\t/// </remarks>\n\t\t/// <value>An MD5 hash of the channel binding data, if available; otherwise <see langword=\"null\" />.</value>\n\t\tpublic byte[]? ChannelBinding {\n\t\t\tget { return GetAvPairByteArray (NtlmAttribute.ChannelBinding); }\n\t\t\tset { SetAvPairByteArray (NtlmAttribute.ChannelBinding, value); }\n\t\t}\n\n\t\tstatic byte[] DecodeByteArray (byte[] buffer, ref int index)\n\t\t{\n\t\t\tvar length = BitConverterLE.ToInt16 (buffer, index);\n\t\t\tvar value = new byte[length];\n\n\t\t\tBuffer.BlockCopy (buffer, index + 2, value, 0, length);\n\n\t\t\tindex += 2 + length;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tstatic string DecodeString (byte[] buffer, ref int index, bool unicode)\n\t\t{\n\t\t\tvar encoding = unicode ? Encoding.Unicode : Encoding.UTF8;\n\t\t\tvar length = BitConverterLE.ToInt16 (buffer, index);\n\t\t\tvar value = encoding.GetString (buffer, index + 2, length);\n\n\t\t\tindex += 2 + length;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tstatic int DecodeFlags (byte[] buffer, ref int index, out short size)\n\t\t{\n\t\t\tsize = BitConverterLE.ToInt16 (buffer, index);\n\t\t\tint flags;\n\n\t\t\tindex += 2;\n\n\t\t\tswitch (size) {\n\t\t\tcase 4:  flags = BitConverterLE.ToInt32 (buffer, index); break;\n\t\t\tcase 2:  flags = BitConverterLE.ToInt16 (buffer, index); break;\n\t\t\tdefault: flags = 0; break;\n\t\t\t}\n\n\t\t\tindex += size;\n\n\t\t\treturn flags;\n\t\t}\n\n\t\tstatic long DecodeTimestamp (byte[] buffer, ref int index, out short size)\n\t\t{\n\t\t\tsize = BitConverterLE.ToInt16 (buffer, index);\n\t\t\tlong value;\n\n\t\t\tindex += 2;\n\n\t\t\tswitch (size) {\n\t\t\tcase 8:\n\t\t\t\tlong lo = BitConverterLE.ToUInt32 (buffer, index);\n\t\t\t\tlong hi = BitConverterLE.ToUInt32 (buffer, index + 4);\n\t\t\t\tvalue = (hi << 32) | lo;\n\t\t\t\tbreak;\n\t\t\tcase 4: value = BitConverterLE.ToUInt32 (buffer, index); break;\n\t\t\tcase 2: value = BitConverterLE.ToUInt16 (buffer, index); break;\n\t\t\tdefault: value = 0; break;\n\t\t\t}\n\n\t\t\tindex += size;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tvoid Decode (byte[] buffer, int startIndex, int length, bool unicode)\n\t\t{\n\t\t\tif (buffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (buffer));\n\n\t\t\tif (startIndex < 0 || startIndex > buffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (startIndex));\n\n\t\t\tif (length < 12 || length > (buffer.Length - startIndex))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (length));\n\n\t\t\tint index = startIndex;\n\n\t\t\tdo {\n\t\t\t\tvar attr = (NtlmAttribute) BitConverterLE.ToInt16 (buffer, index);\n\t\t\t\tshort size;\n\n\t\t\t\tindex += 2;\n\n\t\t\t\tswitch (attr) {\n\t\t\t\tcase NtlmAttribute.EOL:\n\t\t\t\t\tindex = startIndex + length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase NtlmAttribute.ServerName:\n\t\t\t\tcase NtlmAttribute.DomainName:\n\t\t\t\tcase NtlmAttribute.DnsServerName:\n\t\t\t\tcase NtlmAttribute.DnsDomainName:\n\t\t\t\tcase NtlmAttribute.DnsTreeName:\n\t\t\t\tcase NtlmAttribute.TargetName:\n\t\t\t\t\tattributes.Add (new NtlmAttributeStringValuePair (attr, DecodeString (buffer, ref index, unicode)));\n\t\t\t\t\tbreak;\n\t\t\t\tcase NtlmAttribute.Flags:\n\t\t\t\t\tattributes.Add (new NtlmAttributeFlagsValuePair (attr, DecodeFlags (buffer, ref index, out size), size));\n\t\t\t\t\tbreak;\n\t\t\t\tcase NtlmAttribute.Timestamp:\n\t\t\t\t\tattributes.Add (new NtlmAttributeTimestampValuePair (attr, DecodeTimestamp (buffer, ref index, out size), size));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tattributes.Add (new NtlmAttributeByteArrayValuePair (attr, DecodeByteArray (buffer, ref index)));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (index < startIndex + length);\n\t\t}\n\n\t\tint CalculateSize (Encoding encoding)\n\t\t{\n\t\t\tint length = 4;\n\n\t\t\tforeach (var attribute in attributes)\n\t\t\t\tlength += attribute.GetEncodedLength (encoding);\n\n\t\t\treturn length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Encode the TargetInfo structure.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Encodes the TargetInfo structure.\n\t\t/// </remarks>\n\t\t/// <param name=\"unicode\"><see langword=\"true\" /> if the strings should be encoded in Unicode; otherwise, <see langword=\"false\" />.</param>\n\t\t/// <returns>The encoded TargetInfo.</returns>\n\t\tpublic byte[] Encode (bool unicode)\n\t\t{\n\t\t\tvar encoding = unicode ? Encoding.Unicode : Encoding.UTF8;\n\t\t\tvar buf = new byte[CalculateSize (encoding)];\n\t\t\tint index = 0;\n\n\t\t\tforeach (var attribute in attributes)\n\t\t\t\tattribute.EncodeTo (encoding, buf, ref index);\n\n\t\t\treturn buf;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/NtlmUtils.cs",
    "content": "//\n// NtlmUtils.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Text;\nusing System.Security.Cryptography;\n\nusing SSCMD5 = System.Security.Cryptography.MD5;\n\nnamespace MailKit.Security.Ntlm {\n\tstatic class NtlmUtils\n\t{\n\t\t//static readonly byte[] ClientSealMagic = Encoding.ASCII.GetBytes (\"session key to client-to-server sealing key magic constant\");\n\t\t//static readonly byte[] ServerSealMagic = Encoding.ASCII.GetBytes (\"session key to server-to-client sealing key magic constant\");\n\t\t//static readonly byte[] ClientSignMagic = Encoding.ASCII.GetBytes (\"session key to client-to-server signing key magic constant\");\n\t\t//static readonly byte[] ServerSignMagic = Encoding.ASCII.GetBytes (\"session key to server-to-client signing key magic constant\");\n\t\t//static readonly byte[] SealKeySuffix40 = new byte[] { 0xe5, 0x38, 0xb0 };\n\t\t//static readonly byte[] SealKeySuffix56 = new byte[] { 0xa0 };\n\t\tstatic readonly byte[] Responserversion = new byte[] { 1 };\n\t\tstatic readonly byte[] HiResponserversion = new byte[] { 1 };\n\t\tstatic readonly byte[] Z0 = Array.Empty<byte> ();\n\t\tstatic readonly byte[] Z24 = new byte[24];\n\t\tstatic readonly byte[] Z6 = new byte[6];\n\t\tstatic readonly byte[] Z4 = new byte[4];\n\t\tstatic readonly byte[] Z1 = new byte[1];\n\n\t\tpublic static byte[] ConcatenationOf (params string[] values)\n\t\t{\n\t\t\tvar concatenatedValue = string.Concat (values);\n\n\t\t\treturn Encoding.Unicode.GetBytes (concatenatedValue);\n\t\t}\n\n\t\tpublic static byte[] ConcatenationOf (params byte[][] values)\n\t\t{\n\t\t\tint index = 0, length = 0;\n\n\t\t\tfor (int i = 0; i < values.Length; i++)\n\t\t\t\tlength += values[i].Length;\n\n\t\t\tvar concatenated = new byte[length];\n\t\t\tfor (int i = 0; i < values.Length; i++) {\n\t\t\t\tlength = values[i].Length;\n\t\t\t\tBuffer.BlockCopy (values[i], 0, concatenated, index, length);\n\t\t\t\tindex += length;\n\t\t\t}\n\n\t\t\treturn concatenated;\n\t\t}\n\n\t\tstatic byte[] MD4 (byte[] buffer)\n\t\t{\n\t\t\tusing (var md4 = new MD4 ())\n\t\t\t\treturn md4.ComputeHash (buffer);\n\t\t}\n\n\t\tstatic byte[] MD4 (string password)\n\t\t{\n\t\t\tvar unicode = Encoding.Unicode.GetBytes (password);\n\t\t\tvar hash = MD4 (unicode);\n\n\t\t\tArray.Clear (unicode, 0, unicode.Length);\n\n\t\t\treturn hash;\n\t\t}\n\n\t\tpublic static byte[] MD5 (byte[] buffer)\n\t\t{\n\t\t\tusing (var md5 = SSCMD5.Create ())\n\t\t\t\treturn md5.ComputeHash (buffer);\n\t\t}\n\n\t\tpublic static byte[] HMACMD5 (byte[] key, params byte[][] values)\n\t\t{\n\t\t\tusing (var md5 = new HMACMD5 (key)) {\n\t\t\t\tint i;\n\n\t\t\t\tfor (i = 0; i < values.Length - 1; i++)\n\t\t\t\t\tmd5.TransformBlock (values[i], 0, values[i].Length, null, 0);\n\n\t\t\t\tmd5.TransformFinalBlock (values[i], 0, values[i].Length);\n\n\t\t\t\treturn md5.Hash!;\n\t\t\t}\n\t\t}\n\n\t\tpublic static byte[] NONCE (int size)\n\t\t{\n\t\t\tvar nonce = new byte[size];\n\n\t\t\tusing (var rng = RandomNumberGenerator.Create ())\n\t\t\t\trng.GetBytes (nonce);\n\n\t\t\treturn nonce;\n\t\t}\n\n\t\tpublic static byte[] RC4K (byte[] key, byte[] message)\n\t\t{\n\t\t\ttry {\n\t\t\t\tusing (var rc4 = new RC4 ()) {\n\t\t\t\t\trc4.Key = key;\n\n\t\t\t\t\treturn rc4.TransformFinalBlock (message, 0, message.Length);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tArray.Clear (key, 0, key.Length);\n\t\t\t}\n\t\t}\n\n#if false\n\t\tpublic static byte[] SEALKEY (NtlmFlags flags, byte[] exportedSessionKey, bool client = true)\n\t\t{\n\t\t\tif ((flags & NtlmFlags.NegotiateExtendedSessionSecurity) != 0) {\n\t\t\t\tbyte[] subkey;\n\n\t\t\t\tif ((flags & NtlmFlags.Negotiate128) != 0) {\n\t\t\t\t\tsubkey = exportedSessionKey;\n\t\t\t\t} else if ((flags & NtlmFlags.Negotiate56) != 0) {\n\t\t\t\t\tsubkey = new byte[7];\n\t\t\t\t\tBuffer.BlockCopy (exportedSessionKey, 0, subkey, 0, subkey.Length);\n\t\t\t\t} else {\n\t\t\t\t\tsubkey = new byte[5];\n\t\t\t\t\tBuffer.BlockCopy (exportedSessionKey, 0, subkey, 0, subkey.Length);\n\t\t\t\t}\n\n\t\t\t\tvar magic = client ? ClientSealMagic : ServerSealMagic;\n\t\t\t\tvar sealKey = MD5 (ConcatenationOf (subkey, magic));\n\n\t\t\t\tif (subkey != exportedSessionKey)\n\t\t\t\t\tArray.Clear (subkey, 0, subkey.Length);\n\n\t\t\t\treturn sealKey;\n\t\t\t} else if ((flags & NtlmFlags.NegotiateLanManagerKey) != 0) {\n\t\t\t\tbyte[] suffix;\n\t\t\t\tint length;\n\n\t\t\t\tif ((flags & NtlmFlags.Negotiate56) != 0) {\n\t\t\t\t\tsuffix = SealKeySuffix56;\n\t\t\t\t\tlength = 7;\n\t\t\t\t} else {\n\t\t\t\t\tsuffix = SealKeySuffix40;\n\t\t\t\t\tlength = 5;\n\t\t\t\t}\n\n\t\t\t\tvar sealKey = new byte[length + suffix.Length];\n\t\t\t\tBuffer.BlockCopy (exportedSessionKey, 0, sealKey, 0, length);\n\t\t\t\tBuffer.BlockCopy (suffix, 0, sealKey, length, suffix.Length);\n\n\t\t\t\treturn sealKey;\n\t\t\t} else {\n\t\t\t\treturn exportedSessionKey;\n\t\t\t}\n\t\t}\n#endif\n\n#if false\n\t\tpublic static byte[] SIGNKEY (NtlmFlags flags, byte[] exportedSessionKey, bool client = true)\n\t\t{\n\t\t\tif ((flags & NtlmFlags.NegotiateExtendedSessionSecurity) != 0) {\n\t\t\t\tvar magic = client ? ClientSignMagic : ServerSignMagic;\n\t\t\t\treturn MD5 (ConcatenationOf (exportedSessionKey, magic));\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n#endif\n\n\t\tstatic byte[] NTOWFv2 (string domain, string userName, string password)\n\t\t{\n\t\t\tvar hash = MD4 (password);\n\t\t\tbyte[] responseKey;\n\n\t\t\tusing (var md5 = new HMACMD5 (hash)) {\n\t\t\t\tvar userDom = ConcatenationOf (userName.ToUpperInvariant (), domain);\n\t\t\t\tresponseKey = md5.ComputeHash (userDom);\n\t\t\t}\n\n\t\t\tArray.Clear (hash, 0, hash.Length);\n\n\t\t\treturn responseKey;\n\t\t}\n\n\t\tpublic static void ComputeNtlmV2 (NtlmChallengeMessage type2, string domain, string userName, string password, byte[] targetInfo, byte[] clientChallenge, long? time, out byte[]? ntChallengeResponse, out byte[] lmChallengeResponse, out byte[] sessionBaseKey)\n\t\t{\n\t\t\tif (userName.Length == 0 && password.Length == 0) {\n\t\t\t\t// Special case for anonymous authentication\n\t\t\t\tntChallengeResponse = null;\n\t\t\t\tlmChallengeResponse = Z1;\n\t\t\t\tsessionBaseKey = Z0;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar timestamp = (time ?? DateTime.UtcNow.Ticks) - 504911232000000000;\n\t\t\tvar responseKey = NTOWFv2 (domain, userName, password);\n\n\t\t\t// Note: If NTLM v2 authentication is used, the client SHOULD send the timestamp in the CHALLENGE_MESSAGE.\n\t\t\tif (type2.TargetInfo?.Timestamp != null)\n\t\t\t\ttimestamp = type2.TargetInfo.Timestamp.Value;\n\n\t\t\t// Set temp to ConcatenationOf(Responserversion, HiResponserversion, Z(6), Time, ClientChallenge, Z(4), ServerName, Z(4))\n\t\t\tvar temp = ConcatenationOf (Responserversion, HiResponserversion, Z6, BitConverterLE.GetBytes (timestamp), clientChallenge, Z4, targetInfo, Z4);\n\n\t\t\t// Set NTProofStr to HMAC_MD5(ResponseKeyNT, ConcatenationOf(CHALLENGE_MESSAGE.ServerChallenge, temp))\n\t\t\tvar proof = HMACMD5 (responseKey, type2.ServerChallenge, temp);\n\n\t\t\t// Set SessionBaseKey to HMAC_MD5(ResponseKeyNT, NTProofStr)\n\t\t\tsessionBaseKey = HMACMD5 (responseKey, proof);\n\n\t\t\t// Set NtChallengeResponse to ConcatenationOf(NTProofStr, temp)\n\t\t\tntChallengeResponse = ConcatenationOf (proof, temp);\n\t\t\tArray.Clear (proof, 0, proof.Length);\n\t\t\tArray.Clear (temp, 0, temp.Length);\n\n\t\t\t// Note: If NTLM v2 authentication is used and the CHALLENGE_MESSAGE TargetInfo field (section 2.2.1.2) has an\n\t\t\t// MsvAvTimestamp present, the client SHOULD NOT send the LmChallengeResponse and SHOULD send Z(24) instead.\n\t\t\tif (type2.TargetInfo?.Timestamp == null) {\n\t\t\t\t// Set LmChallengeResponse to ConcatenationOf(HMAC_MD5(ResponseKeyLM, ConcatenationOf(CHALLENGE_MESSAGE.ServerChallenge, ClientChallenge)), ClientChallenge)\n\t\t\t\tvar hash = HMACMD5 (responseKey, type2.ServerChallenge, clientChallenge);\n\t\t\t\tlmChallengeResponse = ConcatenationOf (hash, clientChallenge);\n\t\t\t\tArray.Clear (hash, 0, hash.Length);\n\t\t\t} else {\n\t\t\t\tlmChallengeResponse = Z24;\n\t\t\t}\n\n\t\t\tArray.Clear (responseKey, 0, responseKey.Length);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/Ntlm/RC4.cs",
    "content": "﻿//\n// ARC4Managed.cs: Alleged RC4(tm) compatible symmetric stream cipher\n//\tRC4 is a trademark of RSA Security\n//\n\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nusing System;\nusing System.Security.Cryptography;\n\nnamespace MailKit.Security.Ntlm {\n\t// References:\n\t// a.\tUsenet 1994 - RC4 Algorithm revealed\n\t//\thttp://www.qrst.de/html/dsds/rc4.htm\n\n\tclass RC4 : SymmetricAlgorithm, ICryptoTransform\n\t{\n\t\tbyte[] state;\n\t\tbyte[]? key;\n\t\tbyte x, y;\n\t\tbool disposed;\n\n\t\tpublic RC4 () : base ()\n\t\t{\n\t\t\tstate = new byte[256];\n\t\t\tKeySizeValue = 64;\n\t\t}\n\n\t\t~RC4 ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\tpublic bool CanReuseTransform {\n\t\t\tget { return false; }\n\t\t}\n\n\t\tpublic bool CanTransformMultipleBlocks {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic int InputBlockSize {\n\t\t\tget { return 1; }\n\t\t}\n\n\t\tpublic int OutputBlockSize {\n\t\t\tget { return 1; }\n\t\t}\n\n\t\tpublic override byte[] Key {\n\t\t\tget {\n\t\t\t\tif (key == null)\n\t\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\t\treturn (byte[]) key.Clone ();\n\t\t\t}\n\t\t\tset {\n\t\t\t\tif (value == null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (value));\n\n\t\t\t\tif (value.Length == 0)\n\t\t\t\t\tthrow new ArgumentException (\"Invalid key length.\", nameof (value));\n\n\t\t\t\tKeySizeValue = value.Length << 3;\n\t\t\t\tkey = (byte[]) value.Clone ();\n\t\t\t\tKeySetup (key);\n\t\t\t}\n\t\t}\n\n\t\tpublic override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[]? rgvIV)\n\t\t{\n\t\t\treturn new RC4 { Key = rgbKey };\n\t\t}\n\n\t\tpublic override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[]? rgvIV)\n\t\t{\n\t\t\treturn new RC4 { Key = rgbKey };\n\t\t}\n\n\t\tpublic override void GenerateIV ()\n\t\t{\n\t\t\t// not used for a stream cipher\n\t\t\tIV = Array.Empty<byte> ();\n\t\t}\n\n\t\tpublic override void GenerateKey ()\n\t\t{\n\t\t\tkey = new byte[KeySizeValue >> 3];\n\t\t\tusing (var rng = RandomNumberGenerator.Create ())\n\t\t\t\trng.GetBytes (key);\n\t\t\tKeySetup (key);\n\t\t}\n\n\t\tvoid KeySetup (byte[] key)\n\t\t{\n\t\t\tbyte index1 = 0;\n\t\t\tbyte index2 = 0;\n\n\t\t\tfor (int counter = 0; counter < 256; counter++)\n\t\t\t\tstate[counter] = (byte) counter;\n\n\t\t\tx = y = 0;\n\n\t\t\tfor (int counter = 0; counter < 256; counter++) {\n\t\t\t\tindex2 = (byte) (key[index1] + state[counter] + index2);\n\t\t\t\t// swap byte\n\t\t\t\tbyte tmp = state[counter];\n\t\t\t\tstate[counter] = state[index2];\n\t\t\t\tstate[index2] = tmp;\n\t\t\t\tindex1 = (byte) ((index1 + 1) % key.Length);\n\t\t\t}\n\t\t}\n\n\t\tstatic void CheckInput (byte[] inputBuffer, int inputOffset, int inputCount)\n\t\t{\n\t\t\tif (inputBuffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (inputBuffer));\n\n\t\t\tif (inputOffset < 0 || inputOffset > inputBuffer.Length)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputOffset));\n\n\t\t\tif (inputCount < 0 || inputOffset > inputBuffer.Length - inputCount)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (inputCount));\n\t\t}\n\n\t\tpublic int TransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)\n\t\t{\n\t\t\tCheckInput (inputBuffer, inputOffset, inputCount);\n\n\t\t\t// check output parameters\n\t\t\tif (outputBuffer == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (outputBuffer));\n\n\t\t\tif (outputOffset < 0 || outputOffset > outputBuffer.Length - inputCount)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (outputOffset));\n\n\t\t\treturn InternalTransformBlock (inputBuffer, inputOffset, inputCount, outputBuffer, outputOffset);\n\t\t}\n\n\t\tint InternalTransformBlock (byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset)\n\t\t{\n\t\t\tbyte xorIndex;\n\n\t\t\tfor (int counter = 0; counter < inputCount; counter++) {\n\t\t\t\tx = (byte) (x + 1);\n\t\t\t\ty = (byte) (state[x] + y);\n\n\t\t\t\t// swap byte\n\t\t\t\tbyte tmp = state[x];\n\t\t\t\tstate[x] = state[y];\n\t\t\t\tstate[y] = tmp;\n\n\t\t\t\txorIndex = (byte) (state[x] + state[y]);\n\t\t\t\toutputBuffer[outputOffset + counter] = (byte) (inputBuffer[inputOffset + counter] ^ state[xorIndex]);\n\t\t\t}\n\t\t\treturn inputCount;\n\t\t}\n\n\t\tpublic byte[] TransformFinalBlock (byte[] inputBuffer, int inputOffset, int inputCount)\n\t\t{\n\t\t\tCheckInput (inputBuffer, inputOffset, inputCount);\n\n\t\t\tvar output = new byte[inputCount];\n\t\t\tInternalTransformBlock (inputBuffer, inputOffset, inputCount, output, 0);\n\t\t\treturn output;\n\t\t}\n\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\treturn;\n\n\t\t\tx = y = 0;\n\n\t\t\tif (key != null)\n\t\t\t\tArray.Clear (key, 0, key.Length);\n\n\t\t\tArray.Clear (state, 0, state.Length);\n\n\t\t\tif (disposing)\n\t\t\t\tkey = null;\n\n\t\t\tdisposed = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/RandomNumberGenerator.cs",
    "content": "﻿//\n// RandomNumberGenerator.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2019 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing Windows.Security.Cryptography;\n\nnamespace MailKit.Security {\n\tclass RandomNumberGenerator : IDisposable\n\t{\n\t\tpublic static RandomNumberGenerator Create ()\n\t\t{\n\t\t\treturn new RandomNumberGenerator ();\n\t\t}\n\n\t\tpublic void GetBytes (byte[] bytes)\n\t\t{\n\t\t\tvar buffer = CryptographicBuffer.GenerateRandom ((uint) bytes.Length);\n\t\t\tbyte[] rand;\n\n\t\t\tCryptographicBuffer.CopyToByteArray (buffer, out rand);\n\n\t\t\tArray.Copy (rand, 0, bytes, 0, rand.Length);\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslException.cs",
    "content": "﻿//\n// SaslException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Security;\nusing System.Runtime.Serialization;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// An enumeration of the possible error codes that may be reported by a <see cref=\"SaslException\"/>.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of the possible error codes that may be reported by a <see cref=\"SaslException\"/>.\n\t/// </remarks>\n\tpublic enum SaslErrorCode {\n\t\t/// <summary>\n\t\t/// The server's challenge was too long.\n\t\t/// </summary>\n\t\tChallengeTooLong,\n\n\t\t/// <summary>\n\t\t/// The server's response contained an incomplete challenge.\n\t\t/// </summary>\n\t\tIncompleteChallenge,\n\n\t\t/// <summary>\n\t\t/// The server's challenge was invalid.\n\t\t/// </summary>\n\t\tInvalidChallenge,\n\n\t\t/// <summary>\n\t\t/// The server's response did not contain a challenge.\n\t\t/// </summary>\n\t\tMissingChallenge,\n\n\t\t/// <summary>\n\t\t/// The server's challenge contained an incorrect hash.\n\t\t/// </summary>\n\t\tIncorrectHash\n\t}\n\n\t/// <summary>\n\t/// A SASL authentication exception.\n\t/// </summary>\n\t/// <remarks>\n\t/// Typically indicates an error while parsing a server's challenge token.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class SaslException : AuthenticationException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deserializes a <see cref=\"SaslException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected SaslException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tErrorCode = (SaslErrorCode) info.GetInt32 (\"ErrorCode\");\n\t\t\tMechanism = info.GetString (\"Mechanism\");\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SaslException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"mechanism\">The SASL mechanism.</param>\n\t\t/// <param name=\"code\">The error code.</param>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslException (string mechanism, SaslErrorCode code, string message) : base (message)\n\t\t{\n\t\t\tif (mechanism == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mechanism));\n\n\t\t\tMechanism = mechanism;\n\t\t\tErrorCode = code;\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serializes the state of the <see cref=\"SaslException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecurityCritical]\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tinfo.AddValue (\"ErrorCode\", (int) ErrorCode);\n\t\t\tinfo.AddValue (\"Mechanism\", Mechanism);\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Gets the error code.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the error code.\n\t\t/// </remarks>\n\t\t/// <value>The error code.</value>\n\t\tpublic SaslErrorCode ErrorCode {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the name of the SASL mechanism that had the error.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism that had the error.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic string Mechanism {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanism.cs",
    "content": "﻿//\n// SaslMechanism.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Net;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// A SASL authentication mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// Authenticating via a SASL mechanism may be a multi-step process.\n\t/// To determine if the mechanism has completed the necessary steps\n\t/// to authentication, check the <see cref=\"IsAuthenticated\"/> after\n\t/// each call to <see cref=\"Challenge(string,CancellationToken)\"/>.\n\t/// </remarks>\n\tpublic abstract class SaslMechanism\n\t{\n\t\t/// <summary>\n\t\t/// The supported authentication mechanisms in order of strongest to weakest.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Used by the various clients when authenticating via SASL to determine\n\t\t/// which order the SASL mechanisms supported by the server should be tried.</para>\n\t\t/// </remarks>\n\t\tstatic readonly string[] RankedAuthenticationMechanisms;\n\n#if NET7_0_OR_GREATER\n\t\tstatic Lazy<bool> NativeNtlmSupported = new Lazy<bool> (CheckNativeNtlmSupported, LazyThreadSafetyMode.ExecutionAndPublication);\n\t\tstatic Lazy<bool> GssapiSupported = new Lazy<bool> (CheckGssapiSupported, LazyThreadSafetyMode.ExecutionAndPublication);\n#endif\n\t\tstatic readonly bool Md5Supported;\n\n\t\tstatic SaslMechanism ()\n\t\t{\n\t\t\ttry {\n\t\t\t\tusing (var md5 = MD5.Create ())\n\t\t\t\t\tMd5Supported = true;\n\t\t\t} catch {\n\t\t\t\tMd5Supported = false;\n\t\t\t}\n\n\t\t\tvar supported = new List<string> {\n\t\t\t\t\"SCRAM-SHA-512\",\n\t\t\t\t\"SCRAM-SHA-256\",\n\t\t\t\t\"SCRAM-SHA-1\",\n\n\t\t\t\t// Note: NTLM is considered less secure than even SCRAM-SHA-1 (even though SHA-1 is considered weak)\n\t\t\t\t// because it is vulnerable to replay and MitM attacks. The cryptography used by NTLM is also very\n\t\t\t\t// weak at this point (DES for NTLMv1 and HMAC-MD5 for NTLMv2).\n\t\t\t\t\"NTLM\"\n\t\t\t};\n\n\t\t\tif (Md5Supported) {\n\t\t\t\tsupported.Add (\"DIGEST-MD5\");\n\t\t\t\tsupported.Add (\"CRAM-MD5\");\n\t\t\t}\n\t\t\tsupported.Add (\"PLAIN\");\n\t\t\tsupported.Add (\"LOGIN\");\n\n\t\t\tRankedAuthenticationMechanisms = supported.ToArray ();\n\t\t}\n\n#if NET7_0_OR_GREATER\n\t\tstatic bool CheckNativeNtlmSupported ()\n\t\t{\n\t\t\treturn SaslMechanismNegotiateBase.CheckSupported (\"NTLM\");\n\t\t}\n\n\t\tstatic bool CheckGssapiSupported ()\n\t\t{\n\t\t\treturn SaslMechanismNegotiateBase.CheckSupported (\"GSSAPI\");\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Rank authentication mechanisms in order of security.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Ranks authentication mechanisms in order of security.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"authenticationMechanisms\">The authentication mechanisms supported by the server.</param>\n\t\t/// <returns>The supported authentication mechanisms in ranked order.</returns>\n\t\tinternal static IEnumerable<string> Rank (HashSet<string> authenticationMechanisms)\n\t\t{\n\t\t\tforeach (var mechanism in RankedAuthenticationMechanisms) {\n\t\t\t\tif (mechanism.StartsWith (\"SCRAM-SHA\", StringComparison.Ordinal)) {\n\t\t\t\t\tvar plus = mechanism + \"-PLUS\";\n\n\t\t\t\t\tif (authenticationMechanisms.Contains (plus)) {\n\t\t\t\t\t\t// Note: If the server supports SCRAM-SHA-#-PLUS, we opt for the -PLUS variant and do not include the non-PLUS variant.\n\t\t\t\t\t\tyield return plus;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (authenticationMechanisms.Contains (mechanism))\n\t\t\t\t\tyield return mechanism;\n\t\t\t}\n\n\t\t\tyield break;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanism\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected SaslMechanism (NetworkCredential credentials)\n\t\t{\n\t\t\tif (credentials == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (credentials));\n\n\t\t\tCredentials = credentials;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanism\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tprotected SaslMechanism (string userName, string password)\n\t\t{\n\t\t\tif (userName == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (userName));\n\n\t\t\tif (password == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (password));\n\n\t\t\tCredentials = new NetworkCredential (userName, password);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the mechanism.</value>\n\t\tpublic abstract string MechanismName {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the user's credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the user's credentials.\n\t\t/// </remarks>\n\t\t/// <value>The user's credentials.</value>\n\t\tpublic NetworkCredential Credentials {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports channel binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports channel binding.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports channel binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic virtual bool SupportsChannelBinding {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the SASL mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic virtual bool SupportsInitialResponse {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether the SASL mechanism has finished authenticating.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets whether the SASL mechanism has finished authenticating.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism has finished authenticating; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsAuthenticated {\n\t\t\tget; protected set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not channel-binding was negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not channel-binding has been negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">Some SASL mechanisms, such as SCRAM-SHA1-PLUS and NTLM, are able to negotiate\n\t\t/// channel-bindings.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if channel-binding was negotiated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic virtual bool NegotiatedChannelBinding {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not a security layer was negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not a security layer has been negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">Some SASL mechanisms, such as GSSAPI, are able to negotiate security layers\n\t\t/// such as integrity and confidentiality protection.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if a security layer was negotiated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic virtual bool NegotiatedSecurityLayer {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the channel-binding context.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the channel-binding context.\n\t\t/// </remarks>\n\t\t/// <value>The channel-binding context.</value>\n\t\tinternal IChannelBindingContext? ChannelBindingContext {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the URI of the service.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the URI of the service.\n\t\t/// </remarks>\n\t\t/// <value>The URI of the service.</value>\n\t\tinternal Uri? Uri {\n\t\t\tget; set;\n\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Try to get a channel-binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Tries to get the specified channel-binding.\n\t\t/// </remarks>\n\t\t/// <param name=\"kind\">The kind of channel-binding desired.</param>\n\t\t/// <param name=\"channelBinding\">A buffer containing the channel-binding.</param>\n\t\t/// <returns><see langword=\"true\" /> if the channel-binding token was acquired; otherwise, <see langword=\"false\" />.</returns>\n\t\tprotected bool TryGetChannelBinding (ChannelBindingKind kind, [NotNullWhen (true)] out ChannelBinding? channelBinding)\n\t\t{\n\t\t\tif (ChannelBindingContext == null) {\n\t\t\t\tchannelBinding = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn ChannelBindingContext.TryGetChannelBinding (kind, out channelBinding);\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Try to get a channel-binding token.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Tries to get the specified channel-binding.\n\t\t/// </remarks>\n\t\t/// <param name=\"kind\">The kind of channel-binding desired.</param>\n\t\t/// <param name=\"token\">A buffer containing the channel-binding token.</param>\n\t\t/// <returns><see langword=\"true\" /> if the channel-binding token was acquired; otherwise, <see langword=\"false\" />.</returns>\n\t\tprotected bool TryGetChannelBindingToken (ChannelBindingKind kind, [NotNullWhen (true)] out byte[]? token)\n\t\t{\n\t\t\tif (ChannelBindingContext == null) {\n\t\t\t\ttoken = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn ChannelBindingContext.TryGetChannelBindingToken (kind, out token);\n\t\t}\n\n\t\tstatic byte[]? Base64Decode (string? token, out int length)\n\t\t{\n\t\t\tbyte[]? decoded = null;\n\n\t\t\tlength = 0;\n\n\t\t\tif (token != null) {\n\t\t\t\ttry {\n\t\t\t\t\tdecoded = Convert.FromBase64String (token);\n\t\t\t\t\tlength = decoded.Length;\n\t\t\t\t} catch (FormatException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn decoded;\n\t\t}\n\n\t\tstatic string Base64Encode (byte[]? challenge)\n\t\t{\n\t\t\tif (challenge == null || challenge.Length == 0)\n\t\t\t\treturn string.Empty;\n\n\t\t\treturn Convert.ToBase64String (challenge);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected abstract byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken);\n\n\t\t/// <summary>\n\t\t/// Decode the base64-encoded server challenge and return the next challenge response encoded in base64.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Decodes the base64-encoded server challenge and returns the next challenge response encoded in base64.\n\t\t/// </remarks>\n\t\t/// <returns>The next base64-encoded challenge response.</returns>\n\t\t/// <param name=\"token\">The server's base64-encoded challenge token.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tpublic string Challenge (string? token, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tbyte[]? decoded = Base64Decode (token?.Trim (), out int length);\n\n\t\t\tvar challenge = Challenge (decoded, 0, length, cancellationToken);\n\n\t\t\treturn Base64Encode (challenge);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected virtual Task<byte[]?> ChallengeAsync (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\treturn Task.FromResult (Challenge (token, startIndex, length, cancellationToken));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Asynchronously decode the base64-encoded server challenge and return the next challenge response encoded in base64.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Asynchronously decodes the base64-encoded server challenge and returns the next challenge response encoded in base64.\n\t\t/// </remarks>\n\t\t/// <returns>The next base64-encoded challenge response.</returns>\n\t\t/// <param name=\"token\">The server's base64-encoded challenge token.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tpublic async Task<string> ChallengeAsync (string? token, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\tbyte[]? decoded = Base64Decode (token?.Trim (), out int length);\n\n\t\t\tvar challenge = await ChallengeAsync (decoded, 0, length, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn Base64Encode (challenge);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the state of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </remarks>\n\t\tpublic virtual void Reset ()\n\t\t{\n\t\t\tIsAuthenticated = false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine if the specified SASL mechanism is supported by MailKit.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Use this method to make sure that a SASL mechanism is supported before calling\n\t\t/// <see cref=\"Create(string,NetworkCredential)\"/>.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified SASL mechanism is supported; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"mechanism\">The name of the SASL mechanism.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"mechanism\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool IsSupported (string mechanism)\n\t\t{\n\t\t\tif (mechanism == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mechanism));\n\n\t\t\tswitch (mechanism) {\n\t\t\tcase \"SCRAM-SHA-512-PLUS\": return true;\n\t\t\tcase \"SCRAM-SHA-512\":      return true;\n\t\t\tcase \"SCRAM-SHA-256-PLUS\": return true;\n\t\t\tcase \"SCRAM-SHA-256\":      return true;\n\t\t\tcase \"SCRAM-SHA-1-PLUS\":   return true;\n\t\t\tcase \"SCRAM-SHA-1\":        return true;\n\t\t\tcase \"DIGEST-MD5\":         return Md5Supported;\n\t\t\tcase \"CRAM-MD5\":           return Md5Supported;\n\t\t\tcase \"OAUTHBEARER\":        return true;\n\t\t\tcase \"XOAUTH2\":            return true;\n\t\t\tcase \"PLAIN\":              return true;\n\t\t\tcase \"LOGIN\":              return true;\n\t\t\tcase \"NTLM\":               return true;\n\t\t\tcase \"ANONYMOUS\":          return true;\n#if NET7_0_OR_GREATER\n\t\t\tcase \"GSSAPI\":             return GssapiSupported.Value;\n#endif\n\t\t\tdefault:                   return false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create an instance of the specified SASL mechanism using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If unsure that a particular SASL mechanism is supported, you should first call\n\t\t/// <see cref=\"IsSupported\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An instance of the requested SASL mechanism if supported; otherwise <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"mechanism\">The name of the SASL mechanism.</param>\n\t\t/// <param name=\"encoding\">The text encoding to use for the credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"mechanism\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic static SaslMechanism? Create (string mechanism, Encoding encoding, NetworkCredential credentials)\n\t\t{\n\t\t\t// FIXME: This API should throw NotSupportedException rather than returning null if the mechanism is not supported.\n\n\t\t\tif (mechanism == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (mechanism));\n\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tif (credentials == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (credentials));\n\n\t\t\tswitch (mechanism) {\n\t\t\t//case \"KERBEROS_V4\":      return null;\n\t\t\tcase \"SCRAM-SHA-512-PLUS\": return new SaslMechanismScramSha512Plus (credentials);\n\t\t\tcase \"SCRAM-SHA-512\":      return new SaslMechanismScramSha512 (credentials);\n\t\t\tcase \"SCRAM-SHA-256-PLUS\": return new SaslMechanismScramSha256Plus (credentials);\n\t\t\tcase \"SCRAM-SHA-256\":      return new SaslMechanismScramSha256 (credentials);\n\t\t\tcase \"SCRAM-SHA-1-PLUS\":   return new SaslMechanismScramSha1Plus (credentials);\n\t\t\tcase \"SCRAM-SHA-1\":        return new SaslMechanismScramSha1 (credentials);\n\t\t\tcase \"DIGEST-MD5\":         return Md5Supported ? new SaslMechanismDigestMd5 (credentials) : null;\n\t\t\tcase \"CRAM-MD5\":           return Md5Supported ? new SaslMechanismCramMd5 (credentials) : null;\n\t\t\tcase \"OAUTHBEARER\":        return new SaslMechanismOAuthBearer (credentials);\n\t\t\tcase \"XOAUTH2\":            return new SaslMechanismOAuth2 (credentials);\n\t\t\tcase \"PLAIN\":              return new SaslMechanismPlain (encoding, credentials);\n\t\t\tcase \"LOGIN\":              return new SaslMechanismLogin (encoding, credentials);\n#if NET7_0_OR_GREATER\n\t\t\tcase \"GSSAPI\":             return GssapiSupported.Value ? new SaslMechanismGssapi (credentials) : null;\n\t\t\tcase \"NTLM\":               return NativeNtlmSupported.Value ? new SaslMechanismNtlmNative (credentials) : new SaslMechanismNtlm (credentials);\n#else\n\t\t\tcase \"NTLM\":               return new SaslMechanismNtlm (credentials);\n#endif\n\t\t\tcase \"ANONYMOUS\":          return new SaslMechanismAnonymous (encoding, credentials);\n\t\t\tdefault:                   return null;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create an instance of the specified SASL mechanism using the supplied credentials.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// If unsure that a particular SASL mechanism is supported, you should first call\n\t\t/// <see cref=\"IsSupported\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>An instance of the requested SASL mechanism if supported; otherwise <see langword=\"null\" />.</returns>\n\t\t/// <param name=\"mechanism\">The name of the SASL mechanism.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"mechanism\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic static SaslMechanism? Create (string mechanism, NetworkCredential credentials)\n\t\t{\n\t\t\treturn Create (mechanism, Encoding.UTF8, credentials);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine if the character is a non-ASCII space.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This list was obtained from http://tools.ietf.org/html/rfc3454#appendix-C.1.2\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the character is a non-ASCII space; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"c\">The character.</param>\n\t\tstatic bool IsNonAsciiSpace (char c)\n\t\t{\n\t\t\tswitch (c) {\n\t\t\tcase '\\u00A0': // NO-BREAK SPACE\n\t\t\tcase '\\u1680': // OGHAM SPACE MARK\n\t\t\tcase '\\u2000': // EN QUAD\n\t\t\tcase '\\u2001': // EM QUAD\n\t\t\tcase '\\u2002': // EN SPACE\n\t\t\tcase '\\u2003': // EM SPACE\n\t\t\tcase '\\u2004': // THREE-PER-EM SPACE\n\t\t\tcase '\\u2005': // FOUR-PER-EM SPACE\n\t\t\tcase '\\u2006': // SIX-PER-EM SPACE\n\t\t\tcase '\\u2007': // FIGURE SPACE\n\t\t\tcase '\\u2008': // PUNCTUATION SPACE\n\t\t\tcase '\\u2009': // THIN SPACE\n\t\t\tcase '\\u200A': // HAIR SPACE\n\t\t\tcase '\\u200B': // ZERO WIDTH SPACE\n\t\t\tcase '\\u202F': // NARROW NO-BREAK SPACE\n\t\t\tcase '\\u205F': // MEDIUM MATHEMATICAL SPACE\n\t\t\tcase '\\u3000': // IDEOGRAPHIC SPACE\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine if the character is commonly mapped to nothing.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This list was obtained from http://tools.ietf.org/html/rfc3454#appendix-B.1\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the character is commonly mapped to nothing; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"c\">The character.</param>\n\t\tstatic bool IsCommonlyMappedToNothing (char c)\n\t\t{\n\t\t\tswitch (c) {\n\t\t\tcase '\\u00AD': case '\\u034F': case '\\u1806':\n\t\t\tcase '\\u180B': case '\\u180C': case '\\u180D':\n\t\t\tcase '\\u200B': case '\\u200C': case '\\u200D':\n\t\t\tcase '\\u2060': case '\\uFE00': case '\\uFE01':\n\t\t\tcase '\\uFE02': case '\\uFE03': case '\\uFE04':\n\t\t\tcase '\\uFE05': case '\\uFE06': case '\\uFE07':\n\t\t\tcase '\\uFE08': case '\\uFE09': case '\\uFE0A':\n\t\t\tcase '\\uFE0B': case '\\uFE0C': case '\\uFE0D':\n\t\t\tcase '\\uFE0E': case '\\uFE0F': case '\\uFEFF':\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determine if the character is prohibited.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// This list was obtained from http://tools.ietf.org/html/rfc3454#appendix-C.3\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the character is prohibited; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"s\">The string.</param>\n\t\t/// <param name=\"index\">The character index.</param>\n\t\tstatic bool IsProhibited (string s, int index)\n\t\t{\n\t\t\tint u = char.ConvertToUtf32 (s, index);\n\n\t\t\t// Private Use characters: http://tools.ietf.org/html/rfc3454#appendix-C.3\n\t\t\tif ((u >= 0xE000 && u <= 0xF8FF) || (u >= 0xF0000 && u <= 0xFFFFD) || (u >= 0x100000 && u <= 0x10FFFD))\n\t\t\t\treturn true;\n\n\t\t\t// Non-character code points: http://tools.ietf.org/html/rfc3454#appendix-C.4\n\t\t\tif ((u >= 0xFDD0 && u <= 0xFDEF) || (u >= 0xFFFE && u <= 0xFFFF) || (u >= 0x1FFFE && u <= 0x1FFFF) ||\n\t\t\t\t(u >= 0x2FFFE && u <= 0x2FFFF) || (u >= 0x3FFFE && u <= 0x3FFFF) || (u >= 0x4FFFE && u <= 0x4FFFF) ||\n\t\t\t\t(u >= 0x5FFFE && u <= 0x5FFFF) || (u >= 0x6FFFE && u <= 0x6FFFF) || (u >= 0x7FFFE && u <= 0x7FFFF) ||\n\t\t\t\t(u >= 0x8FFFE && u <= 0x8FFFF) || (u >= 0x9FFFE && u <= 0x9FFFF) || (u >= 0xAFFFE && u <= 0xAFFFF) ||\n\t\t\t\t(u >= 0xBFFFE && u <= 0xBFFFF) || (u >= 0xCFFFE && u <= 0xCFFFF) || (u >= 0xDFFFE && u <= 0xDFFFF) ||\n\t\t\t\t(u >= 0xEFFFE && u <= 0xEFFFF) || (u >= 0xFFFFE && u <= 0xFFFFF) || (u >= 0x10FFFE && u <= 0x10FFFF))\n\t\t\t\treturn true;\n\n\t\t\t// Surrogate code points: http://tools.ietf.org/html/rfc3454#appendix-C.5\n\t\t\tif (u >= 0xD800 && u <= 0xDFFF)\n\t\t\t\treturn true;\n\n\t\t\t// Inappropriate for plain text characters: http://tools.ietf.org/html/rfc3454#appendix-C.6\n\t\t\tswitch (u) {\n\t\t\tcase 0xFFF9: // INTERLINEAR ANNOTATION ANCHOR\n\t\t\tcase 0xFFFA: // INTERLINEAR ANNOTATION SEPARATOR\n\t\t\tcase 0xFFFB: // INTERLINEAR ANNOTATION TERMINATOR\n\t\t\tcase 0xFFFC: // OBJECT REPLACEMENT CHARACTER\n\t\t\tcase 0xFFFD: // REPLACEMENT CHARACTER\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Inappropriate for canonical representation: http://tools.ietf.org/html/rfc3454#appendix-C.7\n\t\t\tif (u >= 0x2FF0 && u <= 0x2FFB)\n\t\t\t\treturn true;\n\n\t\t\t// Change display properties or are deprecated: http://tools.ietf.org/html/rfc3454#appendix-C.8\n\t\t\tswitch (u) {\n\t\t\tcase 0x0340: // COMBINING GRAVE TONE MARK\n\t\t\tcase 0x0341: // COMBINING ACUTE TONE MARK\n\t\t\tcase 0x200E: // LEFT-TO-RIGHT MARK\n\t\t\tcase 0x200F: // RIGHT-TO-LEFT MARK\n\t\t\tcase 0x202A: // LEFT-TO-RIGHT EMBEDDING\n\t\t\tcase 0x202B: // RIGHT-TO-LEFT EMBEDDING\n\t\t\tcase 0x202C: // POP DIRECTIONAL FORMATTING\n\t\t\tcase 0x202D: // LEFT-TO-RIGHT OVERRIDE\n\t\t\tcase 0x202E: // RIGHT-TO-LEFT OVERRIDE\n\t\t\tcase 0x206A: // INHIBIT SYMMETRIC SWAPPING\n\t\t\tcase 0x206B: // ACTIVATE SYMMETRIC SWAPPING\n\t\t\tcase 0x206C: // INHIBIT ARABIC FORM SHAPING\n\t\t\tcase 0x206D: // ACTIVATE ARABIC FORM SHAPING\n\t\t\tcase 0x206E: // NATIONAL DIGIT SHAPES\n\t\t\tcase 0x206F: // NOMINAL DIGIT SHAPES\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Tagging characters: http://tools.ietf.org/html/rfc3454#appendix-C.9\n\t\t\tif (u == 0xE0001 || (u >= 0xE0020 && u <= 0xE007F))\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Prepare the user name or password string.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Prepares a user name or password string according to the rules of rfc4013.\n\t\t/// </remarks>\n\t\t/// <returns>The prepared string.</returns>\n\t\t/// <param name=\"s\">The string to prepare.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"s\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"s\"/> contains prohibited characters.\n\t\t/// </exception>\n\t\tpublic static string SaslPrep (string s)\n\t\t{\n\t\t\tif (s == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (s));\n\n\t\t\tif (s.Length == 0)\n\t\t\t\treturn s;\n\n\t\t\tvar builder = new StringBuilder (s.Length);\n\t\t\tfor (int i = 0; i < s.Length; i++) {\n\t\t\t\tif (IsNonAsciiSpace (s[i])) {\n\t\t\t\t\t// non-ASCII space characters [StringPrep, C.1.2] that can be\n\t\t\t\t\t// mapped to SPACE (U+0020).\n\t\t\t\t\tbuilder.Append (' ');\n\t\t\t\t} else if (IsCommonlyMappedToNothing (s[i])) {\n\t\t\t\t\t// the \"commonly mapped to nothing\" characters [StringPrep, B.1]\n\t\t\t\t\t// that can be mapped to nothing.\n\t\t\t\t} else if (char.IsControl (s[i])) {\n\t\t\t\t\tthrow new ArgumentException (\"Control characters are prohibited.\", nameof (s));\n\t\t\t\t} else if (IsProhibited (s, i)) {\n\t\t\t\t\tthrow new ArgumentException (\"One or more characters in the string are prohibited.\", nameof (s));\n\t\t\t\t} else {\n\t\t\t\t\tbuilder.Append (s[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn builder.ToString ().Normalize (NormalizationForm.FormKC);\n\t\t}\n\n\t\tinternal static string GenerateEntropy (int n)\n\t\t{\n\t\t\tvar entropy = new byte[n];\n\n\t\t\tusing (var rng = RandomNumberGenerator.Create ())\n\t\t\t\trng.GetBytes (entropy);\n\n\t\t\treturn Convert.ToBase64String (entropy);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismAnonymous.cs",
    "content": "﻿//\n// SaslMechanismAnonymous.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The ANONYMOUS SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// The ANONYMOUS SASL mechanism provides a way to authenticate with servers\n\t/// that allow anonymous access.\n\t/// </remarks>\n\tpublic class SaslMechanismAnonymous : SaslMechanism\n\t{\n\t\treadonly Encoding encoding;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismAnonymous\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new ANONYMOUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismAnonymous (Encoding encoding, NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tthis.encoding = encoding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismAnonymous\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new ANONYMOUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismAnonymous (Encoding encoding, string userName) : base (userName, string.Empty)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tthis.encoding = encoding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismAnonymous\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new ANONYMOUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismAnonymous (NetworkCredential credentials) : this (Encoding.UTF8, credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismAnonymous\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new ANONYMOUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"userName\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismAnonymous (string userName) : this (Encoding.UTF8, userName)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"ANONYMOUS\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tvar buffer = encoding.GetBytes (Credentials.UserName);\n\t\t\tIsAuthenticated = true;\n\n\t\t\treturn buffer;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismCramMd5.cs",
    "content": "﻿//\n// SaslMechanismCramMd5.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Security.Cryptography;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The CRAM-MD5 SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A SASL mechanism based on HMAC-MD5.\n\t/// </remarks>\n\tpublic class SaslMechanismCramMd5 : SaslMechanism\n\t{\n\t\tstatic readonly byte[] HexAlphabet = {\n\t\t\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // '0' -> '7'\n\t\t\t0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, // '8' -> 'f'\n\t\t};\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismCramMd5\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new CRAM-MD5 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismCramMd5 (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismCramMd5\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new CRAM-MD5 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismCramMd5 (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"CRAM-MD5\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (token == null)\n\t\t\t\tthrow new NotSupportedException (\"CRAM-MD5 does not support SASL-IR.\");\n\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tvar userName = Encoding.UTF8.GetBytes (Credentials.UserName);\n\t\t\tvar password = Encoding.UTF8.GetBytes (Credentials.Password);\n\t\t\tvar ipad = new byte[64];\n\t\t\tvar opad = new byte[64];\n\t\t\tbyte[] digest, passwd;\n\n\t\t\tif (password.Length > 64) {\n\t\t\t\tusing (var md5 = MD5.Create ())\n\t\t\t\t\tpasswd = md5.ComputeHash (password);\n\t\t\t} else {\n\t\t\t\tpasswd = password;\n\t\t\t}\n\n\t\t\tArray.Copy (passwd, ipad, passwd.Length);\n\t\t\tArray.Copy (passwd, opad, passwd.Length);\n\n\t\t\tArray.Clear (password, 0, password.Length);\n\n\t\t\tfor (int i = 0; i < 64; i++) {\n\t\t\t\tipad[i] ^= 0x36;\n\t\t\t\topad[i] ^= 0x5c;\n\t\t\t}\n\n\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\tmd5.TransformBlock (ipad, 0, ipad.Length, null, 0);\n\t\t\t\tmd5.TransformFinalBlock (token, startIndex, length);\n\t\t\t\tdigest = md5.Hash!;\n\t\t\t}\n\n\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\tmd5.TransformBlock (opad, 0, opad.Length, null, 0);\n\t\t\t\tmd5.TransformFinalBlock (digest, 0, digest.Length);\n\t\t\t\tdigest = md5.Hash!;\n\t\t\t}\n\n\t\t\tvar buffer = new byte[userName.Length + 1 + (digest.Length * 2)];\n\t\t\tint offset = 0;\n\n\t\t\tfor (int i = 0; i < userName.Length; i++)\n\t\t\t\tbuffer[offset++] = userName[i];\n\t\t\tbuffer[offset++] = 0x20;\n\t\t\tfor (int i = 0; i < digest.Length; i++) {\n\t\t\t\tbyte c = digest[i];\n\n\t\t\t\tbuffer[offset++] = HexAlphabet[(c >> 4) & 0x0f];\n\t\t\t\tbuffer[offset++] = HexAlphabet[c & 0x0f];\n\t\t\t}\n\n\t\t\tIsAuthenticated = true;\n\n\t\t\treturn buffer;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismDigestMd5.cs",
    "content": "﻿//\n// SaslMechanismDigestMd5.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Diagnostics.CodeAnalysis;\n\nusing MimeKit.Utils;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The DIGEST-MD5 SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// Unlike the PLAIN and LOGIN SASL mechanisms, the DIGEST-MD5 mechanism\n\t/// provides some level of protection and should be relatively safe to\n\t/// use even with a clear-text connection.\n\t/// </remarks>\n\tpublic class SaslMechanismDigestMd5 : SaslMechanism\n\t{\n\t\tenum LoginState {\n\t\t\tAuth,\n\t\t\tFinal\n\t\t}\n\n\t\tDigestChallenge? challenge;\n\t\tDigestResponse? response;\n\t\tinternal string? cnonce;\n\t\tEncoding? encoding;\n\t\tLoginState state;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismDigestMd5\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new DIGEST-MD5 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismDigestMd5 (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismDigestMd5\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new DIGEST-MD5 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismDigestMd5 (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the authorization identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authorization identifier is the desired user account that the server should use\n\t\t/// for all accesses. This is separate from the user name used for authentication.\n\t\t/// </remarks>\n\t\t/// <value>The authorization identifier.</value>\n\t\tpublic string? AuthorizationId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"DIGEST-MD5\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tif (Uri is null)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\tswitch (state) {\n\t\t\tcase LoginState.Auth:\n\t\t\t\tif (token == null)\n\t\t\t\t\tthrow new NotSupportedException (\"DIGEST-MD5 does not support SASL-IR.\");\n\n\t\t\t\tif (token.Length > 2048)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.ChallengeTooLong, \"Server challenge too long.\");\n\n\t\t\t\tchallenge = DigestChallenge.Parse (Encoding.UTF8.GetString (token, startIndex, length));\n\t\t\t\tencoding = challenge.Charset != null ? Encoding.UTF8 : TextEncodings.Latin1;\n\t\t\t\tcnonce ??= GenerateEntropy (15);\n\n\t\t\t\tresponse = new DigestResponse (challenge, encoding, Uri.Scheme, Uri.DnsSafeHost, AuthorizationId, Credentials.UserName, Credentials.Password, cnonce);\n\t\t\t\tstate = LoginState.Final;\n\n\t\t\t\treturn response.Encode (encoding);\n\t\t\tcase LoginState.Final:\n\t\t\t\tif (token == null || token.Length == 0)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.MissingChallenge, \"Server response did not contain any authentication data.\");\n\n\t\t\t\tvar text = encoding!.GetString (token, startIndex, length);\n\t\t\t\tstring? key, value;\n\n\t\t\t\tif (!DigestChallenge.TryParseKeyValuePair (text, out key, out value))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncompleteChallenge, \"Server response contained incomplete authentication data.\");\n\n\t\t\t\tif (!key.Equals (\"rspauth\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.InvalidChallenge, \"Server response contained invalid data.\");\n\n\t\t\t\tvar expected = response!.ComputeHash (encoding, Credentials.Password, false);\n\t\t\t\tif (value != expected)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncorrectHash, \"Server response did not contain the expected hash.\");\n\n\t\t\t\tIsAuthenticated = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the state of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </remarks>\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tstate = LoginState.Auth;\n\t\t\tchallenge = null;\n\t\t\tresponse = null;\n\t\t\tcnonce = null;\n\t\t\tbase.Reset ();\n\t\t}\n\t}\n\n\tclass DigestChallenge\n\t{\n\t\tpublic string[]? Realms { get; private set; }\n\t\tpublic string? Nonce { get; private set; }\n\t\tpublic HashSet<string> Qop { get; private set; }\n\t\tpublic bool? Stale { get; private set; }\n\t\tpublic int? MaxBuf { get; private set; }\n\t\tpublic string? Charset { get; private set; }\n\t\tpublic string? Algorithm { get; private set; }\n\t\tpublic HashSet<string> Ciphers { get; private set; }\n\n\t\tDigestChallenge (string nonce, string? algorithm, string? charset, string[]? ciphers, string[]? realms, string[]? qop, bool? stale, int? maxbuf)\n\t\t{\n\t\t\tCiphers = ciphers != null ? new HashSet<string> (ciphers, StringComparer.Ordinal) : new HashSet<string> (StringComparer.Ordinal);\n\t\t\tQop = qop != null ? new HashSet<string> (qop, StringComparer.Ordinal) : new HashSet<string> (StringComparer.Ordinal);\n\t\t\tAlgorithm = algorithm;\n\t\t\tCharset = charset;\n\t\t\tMaxBuf = maxbuf;\n\t\t\tRealms = realms;\n\t\t\tNonce = nonce;\n\t\t\tStale = stale;\n\t\t}\n\n\t\tstatic bool SkipWhiteSpace (string text, ref int index)\n\t\t{\n\t\t\tint startIndex = index;\n\n\t\t\twhile (index < text.Length && char.IsWhiteSpace (text[index]))\n\t\t\t\tindex++;\n\n\t\t\treturn index > startIndex;\n\t\t}\n\n\t\tstatic string GetKey (string text, ref int index)\n\t\t{\n\t\t\tint startIndex = index;\n\n\t\t\twhile (index < text.Length && !char.IsWhiteSpace (text[index]) && text[index] != '=' && text[index] != ',')\n\t\t\t\tindex++;\n\n\t\t\treturn text.Substring (startIndex, index - startIndex);\n\t\t}\n\n\t\tstatic bool TryParseQuoted (string text, ref int index, [NotNullWhen (true)] out string? value)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbool escaped = false;\n\n\t\t\tvalue = null;\n\n\t\t\t// skip over leading '\"'\n\t\t\tindex++;\n\n\t\t\twhile (index < text.Length) {\n\t\t\t\tif (text[index] == '\\\\') {\n\t\t\t\t\tif (escaped)\n\t\t\t\t\t\tbuilder.Append (text[index]);\n\n\t\t\t\t\tescaped = !escaped;\n\t\t\t\t} else if (!escaped) {\n\t\t\t\t\tif (text[index] == '\"')\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tbuilder.Append (text[index]);\n\t\t\t\t} else {\n\t\t\t\t\tescaped = false;\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tif (index >= text.Length || text[index] != '\"')\n\t\t\t\treturn false;\n\n\t\t\tindex++;\n\n\t\t\tvalue = builder.ToString ();\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParseValue (string text, ref int index, [NotNullWhen (true)] out string? value)\n\t\t{\n\t\t\tif (text[index] == '\"')\n\t\t\t\treturn TryParseQuoted (text, ref index, out value);\n\n\t\t\tint startIndex = index;\n\n\t\t\twhile (index < text.Length && !char.IsWhiteSpace (text[index]) && text[index] != ',')\n\t\t\t\tindex++;\n\n\t\t\tvalue = text.Substring (startIndex, index - startIndex);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic bool TryParseKeyValuePair (string text, ref int index, [NotNullWhen (true)] out string? key, [NotNullWhen (true)] out string? value)\n\t\t{\n\t\t\tvalue = null;\n\n\t\t\tkey = GetKey (text, ref index);\n\n\t\t\tSkipWhiteSpace (text, ref index);\n\t\t\tif (index >= text.Length || text[index] != '=')\n\t\t\t\treturn false;\n\n\t\t\t// skip over '='\n\t\t\tindex++;\n\n\t\t\tSkipWhiteSpace (text, ref index);\n\t\t\tif (index >= text.Length)\n\t\t\t\treturn false;\n\n\t\t\treturn TryParseValue (text, ref index, out value);\n\t\t}\n\n\t\tpublic static bool TryParseKeyValuePair (string text, [NotNullWhen (true)] out string? key, [NotNullWhen (true)] out string? value)\n\t\t{\n\t\t\tint index = 0;\n\n\t\t\tvalue = null;\n\t\t\tkey = null;\n\n\t\t\tSkipWhiteSpace (text, ref index);\n\t\t\tif (index >= text.Length || !TryParseKeyValuePair (text, ref index, out key, out value))\n\t\t\t\treturn false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tstatic readonly char[] Comma = new char[] { ',' };\n\n\t\tpublic static DigestChallenge Parse (string token)\n\t\t{\n\t\t\tstring[]? realms = null, qop = null, ciphers = null;\n\t\t\tstring? algorithm = null;\n\t\t\tstring? charset = null;\n\t\t\tstring? nonce = null;\n\t\t\tbool? stale = null;\n\t\t\tint maxbuf = -1;\n\t\t\tint index = 0;\n\n\t\t\tSkipWhiteSpace (token, ref index);\n\n\t\t\twhile (index < token.Length) {\n\t\t\t\tif (!TryParseKeyValuePair (token, ref index, out var key, out var value))\n\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\n\t\t\t\tswitch (key.ToLowerInvariant ()) {\n\t\t\t\tcase \"realm\":\n\t\t\t\t\tif (realms != null)\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\trealms = value.Split (Comma, StringSplitOptions.RemoveEmptyEntries);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"nonce\":\n\t\t\t\t\tif (nonce != null)\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\tnonce = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"qop\":\n\t\t\t\t\tif (qop != null)\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\tqop = value.Split (Comma, StringSplitOptions.RemoveEmptyEntries);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"stale\":\n\t\t\t\t\tif (stale.HasValue)\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\tstale = value.Equals (\"true\", StringComparison.OrdinalIgnoreCase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"maxbuf\":\n\t\t\t\t\tif (maxbuf != -1 || !int.TryParse (value, NumberStyles.None, CultureInfo.InvariantCulture, out maxbuf))\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"charset\":\n\t\t\t\t\tif (charset != null || !value.Equals (\"utf-8\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\tcharset = \"utf-8\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"algorithm\":\n\t\t\t\t\tif (algorithm != null)\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\talgorithm = value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cipher\":\n\t\t\t\t\tif (ciphers != null)\n\t\t\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\t\t\t\t\tciphers = value.Split (Comma, StringSplitOptions.RemoveEmptyEntries);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tSkipWhiteSpace (token, ref index);\n\t\t\t\tif (index < token.Length && token[index] == ',') {\n\t\t\t\t\tindex++;\n\n\t\t\t\t\tSkipWhiteSpace (token, ref index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (nonce == null)\n\t\t\t\tthrow new SaslException (\"DIGEST-MD5\", SaslErrorCode.InvalidChallenge, string.Format (\"Invalid SASL challenge from the server: {0}\", token));\n\n\t\t\treturn new DigestChallenge (nonce, algorithm, charset, ciphers, realms, qop, stale, maxbuf != -1 ? maxbuf : null);\n\t\t}\n\t}\n\n\tclass DigestResponse\n\t{\n\t\tpublic string UserName { get; private set; }\n\t\tpublic string Realm { get; private set; }\n\t\tpublic string? Nonce { get; private set; }\n\t\tpublic string CNonce { get; private set; }\n\t\tpublic int Nc { get; private set; }\n\t\tpublic string Qop { get; private set; }\n\t\tpublic string DigestUri { get; private set; }\n\t\tpublic string Response { get; private set; }\n\t\tpublic int? MaxBuf { get; private set; }\n\t\tpublic string? Charset { get; private set; }\n\t\tpublic string? Algorithm { get; private set; }\n\t\tpublic string? Cipher { get; private set; }\n\t\tpublic string? AuthZid { get; private set; }\n\n\t\tpublic DigestResponse (DigestChallenge challenge, Encoding encoding, string protocol, string hostName, string? authzid, string userName, string password, string cnonce)\n\t\t{\n\t\t\tUserName = userName;\n\n\t\t\tif (challenge.Realms != null && challenge.Realms.Length > 0)\n\t\t\t\tRealm = challenge.Realms[0];\n\t\t\telse\n\t\t\t\tRealm = string.Empty;\n\n\t\t\tNonce = challenge.Nonce;\n\t\t\tCNonce = cnonce;\n\t\t\tNc = 1;\n\n\t\t\t// FIXME: make sure this is supported\n\t\t\tQop = \"auth\";\n\n\t\t\tDigestUri = string.Format (\"{0}/{1}\", protocol, hostName);\n\t\t\tAlgorithm = challenge.Algorithm;\n\t\t\tCharset = challenge.Charset;\n\t\t\tMaxBuf = challenge.MaxBuf;\n\t\t\tAuthZid = authzid;\n\t\t\tCipher = null;\n\n\t\t\tResponse = ComputeHash (encoding, password, true);\n\t\t}\n\n\t\tstatic string HexEncode (byte[] digest)\n\t\t{\n\t\t\tvar hex = new StringBuilder ();\n\n\t\t\tfor (int i = 0; i < digest.Length; i++)\n\t\t\t\thex.Append (digest[i].ToString (\"x2\"));\n\n\t\t\treturn hex.ToString ();\n\t\t}\n\n\t\tpublic string ComputeHash (Encoding encoding, string password, bool client)\n\t\t{\n\t\t\tstring text, a1, a2;\n\t\t\tbyte[] buf, digest;\n\n\t\t\t// compute A1\n\t\t\ttext = string.Format (\"{0}:{1}:{2}\", UserName, Realm, password);\n\t\t\tbuf = encoding.GetBytes (text);\n\t\t\tusing (var md5 = MD5.Create ())\n\t\t\t\tdigest = md5.ComputeHash (buf);\n\n\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\tmd5.TransformBlock (digest, 0, digest.Length, null, 0);\n\t\t\t\ttext = string.Format (\":{0}:{1}\", Nonce, CNonce);\n\t\t\t\tif (!string.IsNullOrEmpty (AuthZid))\n\t\t\t\t\ttext += \":\" + AuthZid;\n\t\t\t\tbuf = encoding.GetBytes (text);\n\t\t\t\tmd5.TransformFinalBlock (buf, 0, buf.Length);\n\t\t\t\ta1 = HexEncode (md5.Hash!);\n\t\t\t}\n\n\t\t\t// compute A2\n\t\t\ttext = client ? \"AUTHENTICATE:\" : \":\";\n\t\t\ttext += DigestUri;\n\n\t\t\tif (Qop == \"auth-int\" || Qop == \"auth-conf\")\n\t\t\t\ttext += \":00000000000000000000000000000000\";\n\n\t\t\tbuf = encoding.GetBytes (text);\n\t\t\tusing (var md5 = MD5.Create ())\n\t\t\t\tdigest = md5.ComputeHash (buf);\n\t\t\ta2 = HexEncode (digest);\n\n\t\t\t// compute KD\n\t\t\ttext = string.Format (\"{0}:{1}:{2:x8}:{3}:{4}:{5}\", a1, Nonce, Nc, CNonce, Qop, a2);\n\t\t\tbuf = encoding.GetBytes (text);\n\t\t\tusing (var md5 = MD5.Create ())\n\t\t\t\tdigest = md5.ComputeHash (buf);\n\n\t\t\treturn HexEncode (digest);\n\t\t}\n\n\t\tpublic byte[] Encode (Encoding encoding)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tbuilder.Append (\"username=\");\n\t\t\tMimeUtils.AppendQuoted (builder, UserName);\n\t\t\tbuilder.AppendFormat (\",realm=\\\"{0}\\\"\", Realm);\n\t\t\tbuilder.AppendFormat (\",nonce=\\\"{0}\\\"\", Nonce);\n\t\t\tbuilder.AppendFormat (\",cnonce=\\\"{0}\\\"\", CNonce);\n\t\t\tbuilder.AppendFormat (\",nc={0:x8}\", Nc);\n\t\t\tbuilder.AppendFormat (\",qop=\\\"{0}\\\"\", Qop);\n\t\t\tbuilder.AppendFormat (\",digest-uri=\\\"{0}\\\"\", DigestUri);\n\t\t\tbuilder.AppendFormat (\",response={0}\", Response);\n\t\t\tif (MaxBuf.HasValue)\n\t\t\t\tbuilder.AppendFormat (CultureInfo.InvariantCulture, \",maxbuf={0}\", MaxBuf.Value);\n\t\t\tif (!string.IsNullOrEmpty (Charset))\n\t\t\t\tbuilder.AppendFormat (\",charset={0}\", Charset);\n\t\t\tif (!string.IsNullOrEmpty (Algorithm))\n\t\t\t\tbuilder.AppendFormat (\",algorithm={0}\", Algorithm);\n\t\t\tif (!string.IsNullOrEmpty (Cipher))\n\t\t\t\tbuilder.AppendFormat (\",cipher=\\\"{0}\\\"\", Cipher);\n\t\t\tif (!string.IsNullOrEmpty (AuthZid))\n\t\t\t\tbuilder.AppendFormat (\",authzid=\\\"{0}\\\"\", AuthZid);\n\n\t\t\treturn encoding.GetBytes (builder.ToString ());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismGssapi.cs",
    "content": "﻿//\n// SaslMechanismGssapi.cs\n//\n// Authors: Roman Konecny <rokonecn@microsoft.com>\n//          Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET7_0_OR_GREATER\n\nusing System;\nusing System.Net;\nusing System.Net.Security;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// A SASL mechanism that uses the Kerberos/GSSAPI protocol.\n\t/// </summary>\n\t/// <remarks>\n\t/// Implements the GSSAPI for KERBEROS SASL mechanism.\n\t/// </remarks>\n\tpublic class SaslMechanismGssapi : SaslMechanismNegotiateBase\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismGssapi\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new GSSAPI SASL context using the default network credentials.\n\t\t/// </remarks>\n\t\tpublic SaslMechanismGssapi () : this (CredentialCache.DefaultNetworkCredentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismGssapi\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new GSSAPI SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismGssapi (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismGssapi\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new GSSAPI SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismGssapi (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the authentication mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the name of the authentication mechanism.</para>\n\t\t/// <note type=\"note\">This value MUST be one of the following: \"NTLM\", \"Kerberos\" or \"Negotiate\".</note>\n\t\t/// </remarks>\n\t\t/// <value>The name of the authentication mechanism.</value>\n\t\tprotected override string AuthMechanism {\n\t\t\tget { return \"Kerberos\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"GSSAPI\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports negotiating a security layer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports negotiating a security layer.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\"/> if the SASL mechanism supports negotiating a security layer; otherwise, <see langword=\"false\"/>.</value>\n\t\tprotected override bool SupportsSecurityLayer {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the required protection level.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the required protection level.\n\t\t/// </remarks>\n\t\t/// <value>The required protection level.</value>\n\t\tprotected override ProtectionLevel RequiredProtectionLevel {\n\t\t\tget {\n\t\t\t\t// Work-around for https://github.com/gssapi/gss-ntlmssp/issues/77\n\t\t\t\t// GSSAPI NTLM SSP does not support gss_wrap/gss_unwrap unless confidentiality\n\t\t\t\t// is negotiated.\n\t\t\t\tif (OperatingSystem.IsLinux ())\n\t\t\t\t\treturn ProtectionLevel.EncryptAndSign;\n\n\t\t\t\treturn ProtectionLevel.Sign;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create the <see cref=\"NegotiateAuthenticationClientOptions\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates the <see cref=\"NegotiateAuthenticationClientOptions\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>The client options.</returns>\n\t\tprotected override NegotiateAuthenticationClientOptions CreateClientOptions ()\n\t\t{\n\t\t\tvar options = base.CreateClientOptions ();\n\n\t\t\tif (Uri is null)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\t// Provide a default TargetName (the base implementation already sets the\n\t\t\t// TargetName to the ServicePrincipalName if the value was provided).\n\t\t\toptions.TargetName ??= $\"SMTPSVC/{Uri.Host}\";\n\n\t\t\treturn options;\n\t\t}\n\t}\n}\n\n#endif // NET7_0_OR_GREATER\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismLogin.cs",
    "content": "﻿//\n// SaslMechanismLogin.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The LOGIN SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// The LOGIN SASL mechanism provides little protection over the use\n\t/// of plain-text passwords by obscuring the user name and password within\n\t/// individual base64-encoded blobs and should be avoided unless used in\n\t/// combination with an SSL or TLS connection.\n\t/// </remarks>\n\tpublic class SaslMechanismLogin : SaslMechanism\n\t{\n\t\tenum LoginState {\n\t\t\tUserName,\n\t\t\tPassword\n\t\t}\n\n\t\treadonly Encoding encoding;\n\t\tLoginState state;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismLogin\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new LOGIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismLogin (Encoding encoding, NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tthis.encoding = encoding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismLogin\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new LOGIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismLogin (Encoding encoding, string userName, string password) : base (userName, password)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tthis.encoding = encoding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismLogin\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new LOGIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismLogin (NetworkCredential credentials) : this (Encoding.UTF8, credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismLogin\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new LOGIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismLogin (string userName, string password) : this (Encoding.UTF8, userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"LOGIN\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tbyte[]? challenge = null;\n\n\t\t\tswitch (state) {\n\t\t\tcase LoginState.UserName:\n\t\t\t\tif (token == null)\n\t\t\t\t\tthrow new NotSupportedException (\"LOGIN does not support SASL-IR.\");\n\n\t\t\t\tchallenge = encoding.GetBytes (Credentials.UserName);\n\t\t\t\tstate = LoginState.Password;\n\t\t\t\tbreak;\n\t\t\tcase LoginState.Password:\n\t\t\t\tchallenge = encoding.GetBytes (Credentials.Password);\n\t\t\t\tIsAuthenticated = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn challenge;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </remarks>\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tstate = LoginState.UserName;\n\t\t\tbase.Reset ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismNegotiateBase.cs",
    "content": "﻿//\n// SaslMechanismNegotiateBase.cs\n//\n// Authors: Roman Konecny <rokonecn@microsoft.com>\n//          Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET7_0_OR_GREATER\n\nusing System;\nusing System.Net;\nusing System.Buffers;\nusing System.Threading;\nusing System.Net.Security;\nusing System.Security.Authentication.ExtendedProtection;\n\nnamespace MailKit.Security\n{\n\t/// <summary>\n\t/// The base class for .NET Core's NegotiateAuthentication-based SASL mechanisms.\n\t/// </summary>\n\t/// <remarks>\n\t/// The base class for .NET Core's <see cref=\"NegotiateAuthentication\"/>-based SASL mechanisms.\n\t/// </remarks>\n\tpublic abstract class SaslMechanismNegotiateBase : SaslMechanism\n\t{\n\t\tstatic ReadOnlySpan<byte> SaslNoSecurityLayerToken => new byte[] { 1, 0, 0, 0 };\n\n\t\tNegotiateAuthentication? negotiate;\n\t\tbool negotiatedChannelBinding;\n\t\tbool requestedChannelBinding;\n\t\tbool negotiatedSecurityLayer;\n\n\t\tstatic SaslException GetSaslException (string mechanismName, NegotiateAuthenticationStatusCode statusCode)\n\t\t{\n\t\t\tvar errorCode = SaslErrorCode.InvalidChallenge;\n\t\t\tstring message;\n\n\t\t\tswitch (statusCode) {\n\t\t\tcase NegotiateAuthenticationStatusCode.GenericFailure: message = \"Operation resulted in failure but no specific error code was given.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.BadBinding: message = \"Channel binding mismatch between client and server.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.Unsupported: message = \"Unsupported authentication package was requested.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.MessageAltered: message = \"Message was altered and failed an integrity check validation.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.ContextExpired: message = \"Referenced authentication context has expired.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.CredentialsExpired: message = \"Authentication credentials have expired.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.InvalidCredentials: message = \"Consistency checks performed on the credential failed.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.InvalidToken: message = \"Checks performed on the authentication token failed.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.UnknownCredentials: message = \"The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.QopNotSupported: message = \"Requested protection level is not supported.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.OutOfSequence: message = \"Authentication token was identfied as duplicate, old, or out of expected sequence.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.SecurityQosFailed: message = \"Validation of RequiredProtectionLevel against negotiated protection level failed.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.TargetUnknown: message = \"Validation of the target name failed.\"; break;\n\t\t\tcase NegotiateAuthenticationStatusCode.ImpersonationValidationFailed: message = \"Validation of the impersonation level failed.\"; break;\n\t\t\tdefault: message = $\"Failed with unknown status code {statusCode}.\"; break;\n\t\t\t}\n\n\t\t\treturn new SaslException (mechanismName, errorCode, $\"{mechanismName} authentication error: {message}\");\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNegotiateBase\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NegotiateAuthentication\"/>-based SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected SaslMechanismNegotiateBase (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNegotiateBase\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"NegotiateAuthentication\"/>-based SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tprotected SaslMechanismNegotiateBase (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the SASL mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the authentication mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the name of the authentication mechanism.</para>\n\t\t/// <note type=\"note\">This value MUST be one of the following: \"NTLM\", \"Kerberos\" or \"Negotiate\".</note>\n\t\t/// </remarks>\n\t\t/// <value>The name of the authentication mechanism.</value>\n\t\tprotected abstract string AuthMechanism {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the required protection level.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the required protection level.\n\t\t/// </remarks>\n\t\t/// <value>The required protection level.</value>\n\t\tprotected virtual ProtectionLevel RequiredProtectionLevel {\n\t\t\tget { return ProtectionLevel.None; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports channel binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports channel binding.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports channel binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsChannelBinding {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not channel-binding was negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not channel-binding has been negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">Some SASL mechanisms, such as SCRAM-SHA1-PLUS and NTLM, are able to negotiate\n\t\t/// channel-bindings.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if channel-binding was negotiated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool NegotiatedChannelBinding {\n\t\t\tget { return negotiatedChannelBinding; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the desired channel-binding to be negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets the desired channel-binding to be negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">This value is optional.</note>\n\t\t/// </remarks>\n\t\t/// <value>The type of channel-binding.</value>\n\t\tpublic ChannelBindingKind DesiredChannelBinding {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports negotiating a security layer.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports negotiating a security layer.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\"/> if the SASL mechanism supports negotiating a security layer; otherwise, <see langword=\"false\"/>.</value>\n\t\tprotected virtual bool SupportsSecurityLayer {\n\t\t\tget { return false; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not a security layer was negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not a security layer has been negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">Some SASL mechanisms, such as GSSAPI, are able to negotiate security layers\n\t\t/// such as integrity and confidentiality protection.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if a security layer was negotiated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool NegotiatedSecurityLayer {\n\t\t\tget { return negotiatedSecurityLayer; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the service principal name (SPN) of the service that the client wishes to authenticate with.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Get or set the service principal name (SPN) of the service that the client wishes to authenticate with.</para>\n\t\t/// <note type=\"note\">This value is optional.</note>\n\t\t/// </remarks>\n\t\t/// <value>The service principal name (SPN) of the service that the client wishes to authenticate with.</value>\n\t\tpublic string? ServicePrincipalName {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken = default)\n\t\t{\n\t\t\tif (!SupportsSecurityLayer && IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\n\t\t\t// On the first call, initialize the NegotiateAuthentication if needed.\n\t\t\tnegotiate ??= new NegotiateAuthentication (CreateClientOptions ());\n\n\t\t\tvar challenge = token != null ? token.AsSpan (startIndex, length) : ReadOnlySpan<byte>.Empty;\n\n\t\t\tif (IsAuthenticated) {\n\t\t\t\t// If auth completed and another challenge was received, then the server\n\t\t\t\t// may be doing \"correct\" form of GSSAPI SASL. Validate the incoming and\n\t\t\t\t// produce outgoing SASL security layer negotiate message.\n\t\t\t\treturn GetSecurityLayerNegotiationResponse (challenge);\n\t\t\t}\n\n\t\t\t// Calculate the challenge response.\n\t\t\treturn GetChallengeResponse (challenge);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create the <see cref=\"NegotiateAuthenticationClientOptions\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates the <see cref=\"NegotiateAuthenticationClientOptions\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>The client options.</returns>\n\t\tprotected virtual NegotiateAuthenticationClientOptions CreateClientOptions ()\n\t\t{\n\t\t\tvar options = new NegotiateAuthenticationClientOptions {\n\t\t\t\tRequiredProtectionLevel = RequiredProtectionLevel,\n\t\t\t\tCredential = Credentials,\n\t\t\t\tPackage = AuthMechanism,\n\t\t\t};\n\n\t\t\tif (DesiredChannelBinding != ChannelBindingKind.Unknown && TryGetChannelBinding (DesiredChannelBinding, out var channelBinding)) {\n\t\t\t\toptions.Binding = channelBinding;\n\t\t\t\trequestedChannelBinding = true;\n\t\t\t}\n\n\t\t\tif (!string.IsNullOrEmpty (ServicePrincipalName))\n\t\t\t\toptions.TargetName = ServicePrincipalName;\n\n\t\t\treturn options;\n\t\t}\n\n\t\tbyte[]? GetChallengeResponse (ReadOnlySpan<byte> challenge)\n\t\t{\n\t\t\tvar response = negotiate!.GetOutgoingBlob (challenge, out NegotiateAuthenticationStatusCode statusCode);\n\n\t\t\tswitch (statusCode) {\n\t\t\tcase NegotiateAuthenticationStatusCode.Completed:\n\t\t\t\t// Authentication is completed (but may receive a Security Layer negotiation challenge next).\n\t\t\t\tnegotiatedChannelBinding = requestedChannelBinding;\n\t\t\t\tIsAuthenticated = true;\n\t\t\t\tbreak;\n\t\t\tcase NegotiateAuthenticationStatusCode.ContinueNeeded:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow GetSaslException (MechanismName, statusCode);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\n\t\t// Function for SASL security layer negotiation after authorization completes.\n\t\t//\n\t\t// Returns null for failure.\n\t\t//\n\t\t// Cloned from: https://github.com/dotnet/runtime/blob/4631ecec883a90ae9c29c058eea4527f9f2cb473/src/libraries/System.Net.Mail/src/System/Net/Mail/SmtpNegotiateAuthenticationModule.cs#L107\n\t\tbyte[]? GetSecurityLayerNegotiationResponse (ReadOnlySpan<byte> challenge)\n\t\t{\n\t\t\tNegotiateAuthenticationStatusCode statusCode;\n\t\t\tbyte[] input = challenge.ToArray ();\n\t\t\tSpan<byte> unwrapped;\n\n\t\t\tstatusCode = negotiate!.UnwrapInPlace (input, out int unwrappedOffset, out int unwrappedLength, out _);\n\t\t\tif (statusCode != NegotiateAuthenticationStatusCode.Completed)\n\t\t\t\treturn null;\n\n\t\t\tunwrapped = input.AsSpan (unwrappedOffset, unwrappedLength);\n\n\t\t\t// Per RFC 2222 Section 7.2.2:\n\t\t\t//   the client should then expect the server to issue a\n\t\t\t//   token in a subsequent challenge.  The client passes\n\t\t\t//   this token to GSS_Unwrap and interprets the first\n\t\t\t//   octet of cleartext as a bit-mask specifying the\n\t\t\t//   security layers supported by the server and the\n\t\t\t//   second through fourth octets as the maximum size\n\t\t\t//   output_message to send to the server.\n\t\t\t// Section 7.2.3\n\t\t\t//   The security layer and their corresponding bit-masks\n\t\t\t//   are as follows:\n\t\t\t//     1 No security layer\n\t\t\t//     2 Integrity protection\n\t\t\t//       Sender calls GSS_Wrap with conf_flag set to FALSE\n\t\t\t//     4 Privacy protection\n\t\t\t//       Sender calls GSS_Wrap with conf_flag set to TRUE\n\t\t\t//\n\t\t\t// Exchange 2007 and our client only support\n\t\t\t// \"No security layer\". We verify that the server offers\n\t\t\t// option to use no security layer and negotiate that if\n\t\t\t// possible.\n\n\t\t\tif (unwrapped.Length != 4 || (unwrapped[0] & 0x01) != 0x01)\n\t\t\t\treturn null;\n\n\t\t\t// Continuing with RFC 2222 section 7.2.2:\n\t\t\t//   The client then constructs data, with the first octet\n\t\t\t//   containing the bit-mask specifying the selected security\n\t\t\t//   layer, the second through fourth octets containing in\n\t\t\t//   network byte order the maximum size output_message the client\n\t\t\t//   is able to receive, and the remaining octets containing the\n\t\t\t//   authorization identity.\n\t\t\t//\n\t\t\t// So now this constructs the \"wrapped\" response.\n\n\t\t\t// let MakeSignature figure out length of output\n\t\t\tArrayBufferWriter<byte> writer = new ArrayBufferWriter<byte> ();\n\t\t\tstatusCode = negotiate.Wrap (SaslNoSecurityLayerToken, writer, false, out _);\n\t\t\tif (statusCode != NegotiateAuthenticationStatusCode.Completed)\n\t\t\t\treturn null;\n\n\t\t\tnegotiatedSecurityLayer = true;\n\n\t\t\treturn writer.WrittenSpan.ToArray ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the state of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </remarks>\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tif (negotiate != null) {\n\t\t\t\tnegotiatedChannelBinding = false;\n\t\t\t\trequestedChannelBinding = false;\n\t\t\t\tnegotiatedSecurityLayer = false;\n\t\t\t\tnegotiate.Dispose ();\n\t\t\t\tnegotiate = null;\n\t\t\t}\n\n\t\t\tbase.Reset ();\n\t\t}\n\n\t\tinternal static bool CheckSupported (string mechanismName)\n\t\t{\n\t\t\ttry {\n\t\t\t\tvar options = new NegotiateAuthenticationClientOptions {\n\t\t\t\t\tCredential = new NetworkCredential (\"username\", \"password\"),\n\t\t\t\t\tPackage = mechanismName,\n\t\t\t\t};\n\t\t\t\tvar negotiate = new NegotiateAuthentication (options);\n\n\t\t\t\tnegotiate.GetOutgoingBlob (Array.Empty<byte> (), out NegotiateAuthenticationStatusCode statusCode);\n\n\t\t\t\treturn statusCode == NegotiateAuthenticationStatusCode.Completed;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET7_0_OR_GREATER\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismNtlm.cs",
    "content": "﻿//\n// SaslMechanismNtlm.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/b38c36ed-2804-4868-a9ff-8dd3182128e4\n\nusing System;\nusing System.Net;\nusing System.Threading;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Security.Ntlm;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The NTLM SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>A SASL mechanism based on NTLM.</para>\n\t/// <note type=\"warning\">\n\t/// <para>NTLM is a legacy challenge-response authentication mechanism introduced by Microsoft\n\t/// in the 1990's and suffers from the following weaknesses:</para>\n\t/// <list type=\"bullet\">\n\t/// <item>Pass-the-Hash Attacks: Stolen NTLM hashes can be reused without knowing the password.</item>\n\t/// <item>Relay Attacks: NTLM does not protect against credential forwarding.</item>\n\t/// <item>Cryptography: NTLMv1 relies on DES and MD4 which are both very weak. NTLMv2 relies on HMAC-MD5\n\t/// which is better but still considered very weak by modern standards.</item>\n\t/// </list>\n\t/// <para>Microsoft recommends disabling NTLM and migrating to Kerberos\n\t/// (<a href=\"T_MailKit_Security_SaslMechanismGssapi.htm\">GSSAPI</a>)\n\t/// or modern alternatives.</para>\n\t/// </note>\n\t/// </remarks>\n\tpublic class SaslMechanismNtlm : SaslMechanism\n\t{\n\t\tstatic readonly Version DefaultOSVersion;\n\n\t\tenum LoginState {\n\t\t\tNegotiate,\n\t\t\tChallenge\n\t\t}\n\n\t\tNtlmNegotiateMessage? negotiate;\n\t\tbool negotiatedChannelBinding;\n\t\tLoginState state;\n\n\t\tstatic SaslMechanismNtlm ()\n\t\t{\n\t\t\tif (Environment.OSVersion.Platform == PlatformID.Win32NT)\n\t\t\t\tDefaultOSVersion = Environment.OSVersion.Version;\n\t\t\telse\n\t\t\t\tDefaultOSVersion = new Version (10, 0, 22000, 0);\n\t\t}\n\n#if NET48_OR_GREATER || NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNtlm\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM SASL context using the default network credentials.\n\t\t/// </remarks>\n\t\tpublic SaslMechanismNtlm () : this (CredentialCache.DefaultNetworkCredentials)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNtlm\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismNtlm (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t\tOSVersion = DefaultOSVersion;\n\t\t\tWorkstation = Environment.MachineName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNtlm\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismNtlm (string userName, string password) : base (userName, password)\n\t\t{\n\t\t\tOSVersion = DefaultOSVersion;\n\t\t\tWorkstation = Environment.MachineName;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// This is only used for unit testing purposes.\n\t\t/// </summary>\n\t\tinternal byte[]? Nonce {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// This is only used for unit testing purposes.\n\t\t/// </summary>\n\t\tinternal long? Timestamp {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"NTLM\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports channel binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports channel binding.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports channel binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsChannelBinding {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not channel-binding was negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not channel-binding has been negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">Some SASL mechanisms, such as SCRAM-SHA1-PLUS and NTLM, are able to negotiate\n\t\t/// channel-bindings.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if channel-binding was negotiated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool NegotiatedChannelBinding {\n\t\t\tget { return negotiatedChannelBinding; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value indicating whether or not the NTLM SASL mechanism should allow channel-binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a value indicating whether or not the NTLM SASL mechanism should allow channel-binding.</para>\n\t\t/// <note type=\"note\">In the future, this option will disappear as channel-binding will become the default. For now,\n\t\t/// it is only an option because this feature has not been thoroughly tested.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the NTLM SASL mechanism should allow channel-binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool AllowChannelBinding {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the Windows OS version to use in the NTLM negotiation (used for debugging purposes).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the Windows OS version to use in the NTLM negotiation (used for debugging purposes).\n\t\t/// </remarks>\n\t\t/// <value>The Windows OS version.</value>\n\t\tpublic Version OSVersion {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the workstation name to use for authentication.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the workstation name to use for authentication.\n\t\t/// </remarks>\n\t\t/// <value>The workstation name.</value>\n\t\tpublic string Workstation {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the service principal name (SPN) of the service that the client wishes to authenticate with.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Get or set the service principal name (SPN) of the service that the client wishes to authenticate with.</para>\n\t\t/// <note type=\"note\">This value is optional.</note>\n\t\t/// </remarks>\n\t\t/// <value>The service principal name (SPN) of the service that the client wishes to authenticate with.</value>\n\t\tpublic string? ServicePrincipalName {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a value indicating that the caller generated the target's SPN from an untrusted source.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets a value indicating that the caller generated the target's SPN from an untrusted source.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the <see cref=\"ServicePrincipalName\"/> is unverified; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsUnverifiedServicePrincipalName {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tstring userName = Credentials.UserName;\n\t\t\tstring domain = Credentials.Domain;\n\t\t\tNtlmMessageBase? message = null;\n\n\t\t\tif (string.IsNullOrEmpty (domain)) {\n\t\t\t\tint index;\n\n\t\t\t\tif ((index = userName.LastIndexOf ('@')) != -1) {\n\t\t\t\t\tdomain = userName.Substring (index + 1);\n\t\t\t\t\tuserName = userName.Substring (0, index);\n\t\t\t\t} else {\n\t\t\t\t\tif ((index = userName.IndexOf ('\\\\')) == -1)\n\t\t\t\t\t\tindex = userName.IndexOf ('/');\n\n\t\t\t\t\tif (index >= 0) {\n\t\t\t\t\t\tdomain = userName.Substring (0, index);\n\t\t\t\t\t\tuserName = userName.Substring (index + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (state) {\n\t\t\tcase LoginState.Negotiate:\n\t\t\t\tmessage = negotiate = new NtlmNegotiateMessage (domain, Workstation, OSVersion);\n\t\t\t\tstate = LoginState.Challenge;\n\t\t\t\tbreak;\n\t\t\tcase LoginState.Challenge:\n\t\t\t\tif (token == null)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.MissingChallenge, \"Server response did not contain any authentication data.\");\n\n\t\t\t\tvar password = Credentials.Password;\n\t\t\t\tmessage = GetChallengeResponse (domain, userName, password, token, startIndex, length);\n\t\t\t\tIsAuthenticated = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn message?.Encode ();\n\t\t}\n\n\t\tNtlmAuthenticateMessage GetChallengeResponse (string domain, string userName, string password, byte[] token, int startIndex, int length)\n\t\t{\n\t\t\tvar challenge = new NtlmChallengeMessage (token, startIndex, length);\n\t\t\tvar authenticate = new NtlmAuthenticateMessage (negotiate!, challenge, userName, password, domain, Workstation) {\n\t\t\t\tClientChallenge = Nonce,\n\t\t\t\tTimestamp = Timestamp\n\t\t\t};\n\t\t\tbyte[]? channelBindingToken = null;\n\n\t\t\tif (AllowChannelBinding && challenge.TargetInfo != null) {\n\t\t\t\t// Only bother with attempting to channel-bind if the CHALLENGE_MESSAGE's TargetInfo is not NULL.\n\t\t\t\t// Not sure which channel-binding types are supported by NTLM, but I am told that supposedly the\n\t\t\t\t// System.Net.Mail.SmtpClient uses tls-unique, so we'll go with that...\n\t\t\t\tnegotiatedChannelBinding = TryGetChannelBindingToken (ChannelBindingKind.Endpoint, out channelBindingToken);\n\t\t\t}\n\n\t\t\tauthenticate.ComputeNtlmV2 (ServicePrincipalName, IsUnverifiedServicePrincipalName, channelBindingToken);\n\n\t\t\tif (channelBindingToken != null)\n\t\t\t\tArray.Clear (channelBindingToken, 0, channelBindingToken.Length);\n\n\t\t\tnegotiate = null;\n\n\t\t\treturn authenticate;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the state of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </remarks>\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tnegotiatedChannelBinding = false;\n\t\t\tstate = LoginState.Negotiate;\n\t\t\tnegotiate = null;\n\t\t\tbase.Reset ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismNtlmNative.cs",
    "content": "﻿//\n// SaslMechanismNtlmNative.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET7_0_OR_GREATER\n\nusing System.Net;\nusing System.Net.Security;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The NTLM SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>A SASL mechanism based on NTLM that uses .NET Core's <see cref=\"NegotiateAuthentication\"/> class for authenticating.</para>\n\t/// <note type=\"warning\">\n\t/// <para>NTLM is a legacy challenge-response authentication mechanism introduced by Microsoft\n\t/// in the 1990's and suffers from the following weaknesses:</para>\n\t/// <list type=\"bullet\">\n\t/// <item>Pass-the-Hash Attacks: Stolen NTLM hashes can be reused without knowing the password.</item>\n\t/// <item>Relay Attacks: NTLM does not protect against credential forwarding.</item>\n\t/// <item>Cryptography: NTLMv1 relies on DES and MD4 which are both very weak. NTLMv2 relies on HMAC-MD5\n\t/// which is better but still considered very weak by modern standards.</item>\n\t/// </list>\n\t/// <para>Microsoft recommends disabling NTLM and migrating to Kerberos\n\t/// (<a href=\"T_MailKit_Security_SaslMechanismGssapi.htm\">GSSAPI</a>)\n\t/// or modern alternatives.</para>\n\t/// </note>\n\t/// </remarks>\n\tpublic class SaslMechanismNtlmNative : SaslMechanismNegotiateBase\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNtlmNative\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SASL context using the default network credentials.\n\t\t/// </remarks>\n\t\tpublic SaslMechanismNtlmNative () : this (CredentialCache.DefaultNetworkCredentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNtlmNative\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismNtlmNative (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismNtlmNative\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new NTLM SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismNtlmNative (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the authentication mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets the name of the authentication mechanism.</para>\n\t\t/// <note type=\"note\">This value MUST be one of the following: \"NTLM\", \"Kerberos\" or \"Negotiate\".</note>\n\t\t/// </remarks>\n\t\t/// <value>The name of the authentication mechanism.</value>\n\t\tprotected override string AuthMechanism {\n\t\t\tget { return MechanismName; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"NTLM\"; }\n\t\t}\n\t}\n}\n\n#endif // NET7_0_OR_GREATER\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismOAuth2.cs",
    "content": "﻿//\n// SaslMechanismOAuth2.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Threading;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The OAuth2 SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A SASL mechanism used by Google that makes use of a short-lived\n\t/// OAuth 2.0 access token.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\OAuth2GMailExample.cs\"/>\n\t/// <code language=\"c#\" source=\"Examples\\OAuth2ExchangeExample.cs\"/>\n\t/// </example>\n\tpublic class SaslMechanismOAuth2 : SaslMechanism\n\t{\n\t\tconst string AuthBearer = \"auth=Bearer \";\n\t\tconst string UserEquals = \"user=\";\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismOAuth2\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new XOAUTH2 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismOAuth2 (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismOAuth2\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new XOAUTH2 SASL context.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\OAuth2GMailExample.cs\"/>\n\t\t/// <code language=\"c#\" source=\"Examples\\OAuth2ExchangeExample.cs\"/>\n\t\t/// </example>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"auth_token\">The auth token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"auth_token\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismOAuth2 (string userName, string auth_token) : base (userName, auth_token)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"XOAUTH2\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tvar authToken = Credentials.Password;\n\t\t\tvar userName = Credentials.UserName;\n\t\t\tint index = 0;\n\n\t\t\tvar buf = new byte[UserEquals.Length + userName.Length + AuthBearer.Length + authToken.Length + 3];\n\t\t\tfor (int i = 0; i < UserEquals.Length; i++)\n\t\t\t\tbuf[index++] = (byte) UserEquals[i];\n\t\t\tfor (int i = 0; i < userName.Length; i++)\n\t\t\t\tbuf[index++] = (byte) userName[i];\n\t\t\tbuf[index++] = 1;\n\t\t\tfor (int i = 0; i < AuthBearer.Length; i++)\n\t\t\t\tbuf[index++] = (byte) AuthBearer[i];\n\t\t\tfor (int i = 0; i < authToken.Length; i++)\n\t\t\t\tbuf[index++] = (byte) authToken[i];\n\t\t\tbuf[index++] = 1;\n\t\t\tbuf[index++] = 1;\n\n\t\t\tIsAuthenticated = true;\n\n\t\t\treturn buf;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismOAuthBearer.cs",
    "content": "﻿//\n// SaslMechanismOAuthBearer.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The OAuth Bearer SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A SASL mechanism that makes use of a short-lived OAuth Bearer access tokens.\n\t/// </remarks>\n\t/// <example>\n\t/// <code language=\"c#\" source=\"Examples\\OAuth2GMailExample.cs\"/>\n\t/// <code language=\"c#\" source=\"Examples\\OAuth2ExchangeExample.cs\"/>\n\t/// </example>\n\tpublic class SaslMechanismOAuthBearer : SaslMechanism\n\t{\n\t\tstatic readonly byte[] ErrorResponse = new byte[1] { 0x01 };\n\t\tconst string AuthBearer = \"auth=Bearer \";\n\t\tconst string HostEquals = \"host=\";\n\t\tconst string PortEquals = \"port=\";\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismOAuthBearer\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new OAUTHBEARER SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismOAuthBearer (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismOAuthBearer\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new OAUTHBEARER SASL context.\n\t\t/// </remarks>\n\t\t/// <example>\n\t\t/// <code language=\"c#\" source=\"Examples\\OAuth2GMailExample.cs\"/>\n\t\t/// <code language=\"c#\" source=\"Examples\\OAuth2ExchangeExample.cs\"/>\n\t\t/// </example>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"auth_token\">The auth token.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"auth_token\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismOAuthBearer (string userName, string auth_token) : base (userName, auth_token)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"OAUTHBEARER\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tstatic int CalculateBufferSize (byte[] authzid, byte[] host, string port, string token)\n\t\t{\n\t\t\tint length = 0;\n\n\t\t\tlength += 2; // channel binding (\"n,\")\n\t\t\tlength += 2; // a=\n\t\t\tlength += authzid.Length;\n\t\t\tlength += 1; // ','\n\n\t\t\tlength++; // ^A\n\n\t\t\tlength += HostEquals.Length;\n\t\t\tlength += host.Length;\n\t\t\tlength++; // ^A\n\n\t\t\tlength += PortEquals.Length;\n\t\t\tlength += port.Length;\n\t\t\tlength++; // ^A\n\n\t\t\tlength += AuthBearer.Length;\n\t\t\tlength += token.Length;\n\t\t\tlength += 2; // ^A^A\n\n\t\t\treturn length;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn ErrorResponse;\n\n\t\t\tif (Uri is null)\n\t\t\t\tthrow new InvalidOperationException ();\n\n\t\t\tvar authzid = Encoding.UTF8.GetBytes (Credentials.UserName);\n\t\t\tvar port = Uri.Port.ToString (CultureInfo.InvariantCulture);\n\t\t\tvar host = Encoding.UTF8.GetBytes (Uri.Host);\n\t\t\tvar authToken = Credentials.Password;\n\n\t\t\tvar buf = new byte[CalculateBufferSize (authzid, host, port, authToken)];\n\t\t\tint index = 0;\n\n\t\t\tbuf[index++] = (byte) 'n'; // channel binding not supported\n\t\t\tbuf[index++] = (byte) ',';\n\t\t\tbuf[index++] = (byte) 'a';\n\t\t\tbuf[index++] = (byte) '=';\n\t\t\tfor (int i = 0; i < authzid.Length; i++)\n\t\t\t\tbuf[index++] = authzid[i];\n\t\t\tbuf[index++] = (byte) ',';\n\t\t\tbuf[index++] = 0x01;\n\n\t\t\tfor (int i = 0; i < HostEquals.Length; i++)\n\t\t\t\tbuf[index++] = (byte) HostEquals[i];\n\t\t\tfor (int i = 0; i < host.Length; i++)\n\t\t\t\tbuf[index++] = host[i];\n\t\t\tbuf[index++] = 0x01;\n\n\t\t\tfor (int i = 0; i < PortEquals.Length; i++)\n\t\t\t\tbuf[index++] = (byte) PortEquals[i];\n\t\t\tfor (int i = 0; i < port.Length; i++)\n\t\t\t\tbuf[index++] = (byte) port[i];\n\t\t\tbuf[index++] = 0x01;\n\n\t\t\tfor (int i = 0; i < AuthBearer.Length; i++)\n\t\t\t\tbuf[index++] = (byte) AuthBearer[i];\n\t\t\tfor (int i = 0; i < authToken.Length; i++)\n\t\t\t\tbuf[index++] = (byte) authToken[i];\n\t\t\tbuf[index++] = 0x01;\n\t\t\tbuf[index++] = 0x01;\n\n\t\t\tIsAuthenticated = true;\n\n\t\t\treturn buf;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismPlain.cs",
    "content": "﻿//\n// SaslMechanismPlain.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The PLAIN SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// The PLAIN SASL mechanism provides little protection over the use\n\t/// of plain-text passwords by combining the user name and password and\n\t/// obscuring them within a base64-encoded blob and should be avoided\n\t/// unless used in combination with an SSL or TLS connection.\n\t/// </remarks>\n\tpublic class SaslMechanismPlain : SaslMechanism\n\t{\n\t\treadonly Encoding encoding;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismPlain\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new PLAIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"credentials\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismPlain (Encoding encoding, NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tthis.encoding = encoding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismPlain\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new PLAIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"encoding\">The encoding to use for the user's credentials.</param>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"encoding\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismPlain (Encoding encoding, string userName, string password) : base (userName, password)\n\t\t{\n\t\t\tif (encoding == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (encoding));\n\n\t\t\tthis.encoding = encoding;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismPlain\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new PLAIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismPlain (NetworkCredential credentials) : this (Encoding.UTF8, credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismPlain\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new PLAIN SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismPlain (string userName, string password) : this (Encoding.UTF8, userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the authorization identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authorization identifier is the desired user account that the server should use\n\t\t/// for all accesses. This is separate from the user name used for authentication.\n\t\t/// </remarks>\n\t\t/// <value>The authorization identifier.</value>\n\t\tpublic string? AuthorizationId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"PLAIN\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tvar authzid = encoding.GetBytes (AuthorizationId ?? string.Empty);\n\t\t\tvar authcid = encoding.GetBytes (Credentials.UserName);\n\t\t\tvar passwd = encoding.GetBytes (Credentials.Password);\n\t\t\tvar buffer = new byte[authzid.Length + authcid.Length + passwd.Length + 2];\n\t\t\tint offset = 0;\n\n\t\t\tfor (int i = 0; i < authzid.Length; i++)\n\t\t\t\tbuffer[offset++] = authzid[i];\n\n\t\t\tbuffer[offset++] = 0;\n\t\t\tfor (int i = 0; i < authcid.Length; i++)\n\t\t\t\tbuffer[offset++] = authcid[i];\n\n\t\t\tbuffer[offset++] = 0;\n\t\t\tfor (int i = 0; i < passwd.Length; i++)\n\t\t\t\tbuffer[offset++] = passwd[i];\n\n\t\t\tArray.Clear (passwd, 0, passwd.Length);\n\n\t\t\tIsAuthenticated = true;\n\n\t\t\treturn buffer;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismScramBase.cs",
    "content": "﻿//\n// SaslMechanismScramBase.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Text;\nusing System.Threading;\nusing System.Globalization;\nusing System.Collections.Generic;\nusing System.Security.Cryptography;\nusing System.Security.Authentication.ExtendedProtection;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The base class for SCRAM-based SASL mechanisms.\n\t/// </summary>\n\t/// <remarks>\n\t/// SCRAM-based SASL mechanisms are salted challenge/response authentication mechanisms.\n\t/// </remarks>\n\tpublic abstract class SaslMechanismScramBase : SaslMechanism\n\t{\n\t\tenum LoginState {\n\t\t\tInitial,\n\t\t\tFinal,\n\t\t\tValidate\n\t\t}\n\n\t\tChannelBindingKind channelBindingKind;\n\t\tbool negotiatedChannelBinding;\n\t\tbyte[]? channelBindingToken;\n\t\tinternal string? cnonce;\n\t\tstring? client, server;\n\t\tbyte[]? salted, auth;\n\t\tLoginState state;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramBase\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-based SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tprotected SaslMechanismScramBase (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramBase\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-based SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tprotected SaslMechanismScramBase (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the authorization identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The authorization identifier is the desired user account that the server should use\n\t\t/// for all accesses. This is separate from the user name used for authentication.\n\t\t/// </remarks>\n\t\t/// <value>The authorization identifier.</value>\n\t\tpublic string? AuthorizationId {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the mechanism supports an initial response (SASL-IR).\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Get whether or not the mechanism supports an initial response (SASL-IR).</para>\n\t\t/// <para>SASL mechanisms that support sending an initial client response to the server\n\t\t/// should return <see langword=\"true\" />.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the mechanism supports an initial response; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsInitialResponse {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not channel-binding was negotiated by the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets whether or not channel-binding has been negotiated by the SASL mechanism.</para>\n\t\t/// <note type=\"note\">Some SASL mechanisms, such as SCRAM-SHA1-PLUS and NTLM, are able to negotiate\n\t\t/// channel-bindings.</note>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if channel-binding was negotiated; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool NegotiatedChannelBinding {\n\t\t\tget { return negotiatedChannelBinding; }\n\t\t}\n\n\t\tstatic string Normalize (string str)\n\t\t{\n\t\t\tvar prepared = SaslPrep (str);\n\n\t\t\tif (prepared.Length == 0)\n\t\t\t\treturn prepared;\n\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tfor (int i = 0; i < prepared.Length; i++) {\n\t\t\t\tswitch (prepared[i]) {\n\t\t\t\tcase ',': builder.Append (\"=2C\"); break;\n\t\t\t\tcase '=': builder.Append (\"=3D\"); break;\n\t\t\t\tdefault:\n\t\t\t\t\tbuilder.Append (prepared[i]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create the HMAC context.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates the HMAC context using the secret key.\n\t\t/// </remarks>\n\t\t/// <returns>The HMAC context.</returns>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tprotected abstract KeyedHashAlgorithm CreateHMAC (byte[] key);\n\n\t\t/// <summary>\n\t\t/// Apply the HMAC keyed algorithm.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// HMAC(key, str): Apply the HMAC keyed hash algorithm (defined in\n\t\t/// [RFC2104]) using the octet string represented by \"key\" as the key\n\t\t/// and the octet string \"str\" as the input string.  The size of the\n\t\t/// result is the hash result size for the hash function in use.  For\n\t\t/// example, it is 20 octets for SHA-1 (see [RFC3174]).\n\t\t/// </remarks>\n\t\t/// <returns>The results of the HMAC keyed algorithm.</returns>\n\t\t/// <param name=\"key\">The key.</param>\n\t\t/// <param name=\"str\">The string.</param>\n\t\tbyte[] HMAC (byte[] key, byte[] str)\n\t\t{\n\t\t\tusing (var hmac = CreateHMAC (key))\n\t\t\t\treturn hmac.ComputeHash (str);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Apply the cryptographic hash function.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// H(str): Apply the cryptographic hash function to the octet string\n\t\t/// \"str\", producing an octet string as a result.  The size of the\n\t\t/// result depends on the hash result size for the hash function in\n\t\t/// use.\n\t\t/// </remarks>\n\t\t/// <returns>The results of the hash.</returns>\n\t\t/// <param name=\"str\">The string.</param>\n\t\tprotected abstract byte[] Hash (byte[] str);\n\n\t\t/// <summary>\n\t\t/// Apply the exclusive-or operation to combine two octet strings.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Apply the exclusive-or operation to combine the octet string\n\t\t/// on the left of this operator with the octet string on the right of\n\t\t/// this operator.  The length of the output and each of the two\n\t\t/// inputs will be the same for this use.\n\t\t/// </remarks>\n\t\t/// <param name=\"a\">The alpha component.</param>\n\t\t/// <param name=\"b\">The blue component.</param>\n\t\tstatic void Xor (byte[] a, byte[] b)\n\t\t{\n\t\t\tfor (int i = 0; i < a.Length; i++)\n\t\t\t\ta[i] = (byte) (a[i] ^ b[i]);\n\t\t}\n\n\t\t// Hi(str, salt, i):\n\t\t//\n\t\t// U1   := HMAC(str, salt + INT(1))\n\t\t// U2   := HMAC(str, U1)\n\t\t// ...\n\t\t// Ui-1 := HMAC(str, Ui-2)\n\t\t// Ui   := HMAC(str, Ui-1)\n\t\t//\n\t\t// Hi := U1 XOR U2 XOR ... XOR Ui\n\t\t//\n\t\t// where \"i\" is the iteration count, \"+\" is the string concatenation\n\t\t// operator, and INT(g) is a 4-octet encoding of the integer g, most\n\t\t// significant octet first.\n\t\t//\n\t\t// Hi() is, essentially, PBKDF2 [RFC2898] with HMAC() as the\n\t\t// pseudorandom function (PRF) and with dkLen == output length of\n\t\t// HMAC() == output length of H().\n\t\tbyte[] Hi (byte[] str, byte[] salt, int count)\n\t\t{\n\t\t\tusing (var hmac = CreateHMAC (str)) {\n\t\t\t\tvar salt1 = new byte[salt.Length + 4];\n\t\t\t\tbyte[] hi, u1;\n\n\t\t\t\tBuffer.BlockCopy (salt, 0, salt1, 0, salt.Length);\n\t\t\t\tsalt1[salt1.Length - 1] = (byte) 1;\n\n\t\t\t\thi = u1 = hmac.ComputeHash (salt1);\n\n\t\t\t\tfor (int i = 1; i < count; i++) {\n\t\t\t\t\tvar u2 = hmac.ComputeHash (u1);\n\t\t\t\t\tXor (hi, u2);\n\t\t\t\t\tu1 = u2;\n\t\t\t\t}\n\n\t\t\t\treturn hi;\n\t\t\t}\n\t\t}\n\n\t\tstatic Dictionary<char, string> ParseServerChallenge (string challenge)\n\t\t{\n\t\t\tvar results = new Dictionary<char, string> ();\n\n\t\t\tforeach (var pair in challenge.Split (',')) {\n\t\t\t\tif (pair.Length < 2 || pair[1] != '=')\n\t\t\t\t\tcontinue;\n\n\t\t\t\tresults.Add (pair[0], pair.Substring (2));\n\t\t\t}\n\n\t\t\treturn results;\n\t\t}\n\n\t\tstatic string GetChannelBindingName (ChannelBindingKind kind)\n\t\t{\n\t\t\treturn kind == ChannelBindingKind.Endpoint ? \"tls-server-end-point\" : \"tls-unique\";\n\t\t}\n\n\t\tstatic string GetChannelBindingInput (ChannelBindingKind kind, string? authzid)\n\t\t{\n\t\t\tstring flag;\n\n\t\t\tif (kind != ChannelBindingKind.Unknown) {\n\t\t\t\tflag = \"p=\" + GetChannelBindingName (kind);\n\t\t\t} else {\n\t\t\t\tflag = \"n\";\n\t\t\t}\n\n\t\t\tauthzid ??= string.Empty;\n\n\t\t\treturn flag + \",\" + Normalize (authzid) + \",\";\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse the server's challenge token and return the next challenge response.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses the server's challenge token and returns the next challenge response.\n\t\t/// </remarks>\n\t\t/// <returns>The next challenge response.</returns>\n\t\t/// <param name=\"token\">The server's challenge token.</param>\n\t\t/// <param name=\"startIndex\">The index into the token specifying where the server's challenge begins.</param>\n\t\t/// <param name=\"length\">The length of the server's challenge.</param>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The SASL mechanism does not support SASL-IR.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OperationCanceledException\">\n\t\t/// The operation was canceled via the cancellation token.\n\t\t/// </exception>\n\t\t/// <exception cref=\"SaslException\">\n\t\t/// An error has occurred while parsing the server's challenge token.\n\t\t/// </exception>\n\t\tprotected override byte[]? Challenge (byte[]? token, int startIndex, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (IsAuthenticated)\n\t\t\t\treturn null;\n\n\t\t\tbyte[] response, signature;\n\t\t\tstring input;\n\n\t\t\tswitch (state) {\n\t\t\tcase LoginState.Initial:\n\t\t\t\tcnonce ??= GenerateEntropy (18);\n\t\t\t\tclient = \"n=\" + Normalize (Credentials.UserName) + \",r=\" + cnonce;\n\n\t\t\t\t// Note: RFC7677 states:\n\t\t\t\t//\n\t\t\t\t// After publication of [RFC5802], it was discovered that Transport\n\t\t\t\t// Layer Security (TLS) [RFC5246] does not have the expected properties\n\t\t\t\t// for the \"tls-unique\" channel binding to be secure[RFC7627].\n\t\t\t\t//\n\t\t\t\t// Based on this, we attempt to use \"tls-server-end-point\" instead of \"tls-unique\" when available.\n\t\t\t\tif (SupportsChannelBinding) {\n\t\t\t\t\tif (TryGetChannelBindingToken (ChannelBindingKind.Endpoint, out channelBindingToken)) {\n\t\t\t\t\t\tchannelBindingKind = ChannelBindingKind.Endpoint;\n\t\t\t\t\t} else if (TryGetChannelBindingToken (ChannelBindingKind.Unique, out channelBindingToken)) {\n\t\t\t\t\t\tchannelBindingKind = ChannelBindingKind.Unique;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchannelBindingKind = ChannelBindingKind.Unknown;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tinput = GetChannelBindingInput (channelBindingKind, AuthorizationId);\n\t\t\t\tresponse = Encoding.UTF8.GetBytes (input + client);\n\t\t\t\tstate = LoginState.Final;\n\t\t\t\tbreak;\n\t\t\tcase LoginState.Final:\n\t\t\t\tif (token == null)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.MissingChallenge, \"Server response did not contain any authentication data.\");\n\n\t\t\t\tserver = Encoding.UTF8.GetString (token, startIndex, length);\n\t\t\t\tvar tokens = ParseServerChallenge (server);\n\t\t\t\tstring? salt, nonce, iterations;\n\t\t\t\tint count;\n\n\t\t\t\tif (!tokens.TryGetValue ('s', out salt))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncompleteChallenge, \"Challenge did not contain a salt.\");\n\n\t\t\t\tif (!tokens.TryGetValue ('r', out nonce))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncompleteChallenge, \"Challenge did not contain a nonce.\");\n\n\t\t\t\tif (!tokens.TryGetValue ('i', out iterations))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncompleteChallenge, \"Challenge did not contain an iteration count.\");\n\n\t\t\t\tif (!nonce.StartsWith (cnonce!, StringComparison.Ordinal))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.InvalidChallenge, \"Challenge contained an invalid nonce.\");\n\n\t\t\t\tif (!int.TryParse (iterations, NumberStyles.None, CultureInfo.InvariantCulture, out count) || count < 1)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.InvalidChallenge, \"Challenge contained an invalid iteration count.\");\n\n\t\t\t\tvar password = Encoding.UTF8.GetBytes (SaslPrep (Credentials.Password));\n\t\t\t\tsalted = Hi (password, Convert.FromBase64String (salt), count);\n\t\t\t\tArray.Clear (password, 0, password.Length);\n\n\t\t\t\tinput = GetChannelBindingInput (channelBindingKind, AuthorizationId);\n\t\t\t\tvar inputBuffer = Encoding.ASCII.GetBytes (input);\n\t\t\t\tstring base64;\n\n\t\t\t\tif (SupportsChannelBinding && channelBindingToken != null) {\n\t\t\t\t\tvar binding = new byte[inputBuffer.Length + channelBindingToken.Length];\n\n\t\t\t\t\tBuffer.BlockCopy (inputBuffer, 0, binding, 0, inputBuffer.Length);\n\t\t\t\t\tBuffer.BlockCopy (channelBindingToken, 0, binding, inputBuffer.Length, channelBindingToken.Length);\n\n\t\t\t\t\t// Zero the channel binding token. We don't need it anymore.\n\t\t\t\t\tArray.Clear (channelBindingToken, 0, channelBindingToken.Length);\n\t\t\t\t\tchannelBindingToken = null;\n\n\t\t\t\t\tbase64 = Convert.ToBase64String (binding);\n\t\t\t\t} else {\n\t\t\t\t\tbase64 = Convert.ToBase64String (inputBuffer);\n\t\t\t\t}\n\n\t\t\t\tvar withoutProof = \"c=\" + base64 + \",r=\" + nonce;\n\n\t\t\t\tauth = Encoding.UTF8.GetBytes (client + \",\" + server + \",\" + withoutProof);\n\n\t\t\t\tvar key = HMAC (salted, Encoding.ASCII.GetBytes (\"Client Key\"));\n\t\t\t\tsignature = HMAC (Hash (key), auth);\n\t\t\t\tXor (key, signature);\n\n\t\t\t\tresponse = Encoding.UTF8.GetBytes (withoutProof + \",p=\" + Convert.ToBase64String (key));\n\t\t\t\tstate = LoginState.Validate;\n\t\t\t\tbreak;\n\t\t\tcase LoginState.Validate:\n\t\t\t\tif (token == null)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.MissingChallenge, \"Server response did not contain any authentication data.\");\n\n\t\t\t\tvar challenge = Encoding.UTF8.GetString (token, startIndex, length);\n\n\t\t\t\tif (!challenge.StartsWith (\"v=\", StringComparison.Ordinal))\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.InvalidChallenge, \"Challenge did not start with a signature.\");\n\n\t\t\t\tsignature = Convert.FromBase64String (challenge.Substring (2));\n\t\t\t\tvar serverKey = HMAC (salted!, Encoding.ASCII.GetBytes (\"Server Key\"));\n\t\t\t\tvar calculated = HMAC (serverKey, auth!);\n\n\t\t\t\tif (signature.Length != calculated.Length)\n\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncorrectHash, \"Challenge contained a signature with an invalid length.\");\n\n\t\t\t\tfor (int i = 0; i < signature.Length; i++) {\n\t\t\t\t\tif (signature[i] != calculated[i])\n\t\t\t\t\t\tthrow new SaslException (MechanismName, SaslErrorCode.IncorrectHash, $\"Challenge contained an invalid signature. Expected: {Convert.ToBase64String (calculated)}\");\n\t\t\t\t}\n\n\t\t\t\tnegotiatedChannelBinding = channelBindingKind != ChannelBindingKind.Unknown;\n\t\t\t\tIsAuthenticated = true;\n\t\t\t\tresponse = Array.Empty<byte> ();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new IndexOutOfRangeException (\"state\");\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Reset the state of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Resets the state of the SASL mechanism.\n\t\t/// </remarks>\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tif (channelBindingToken != null) {\n\t\t\t\tArray.Clear (channelBindingToken, 0, channelBindingToken.Length);\n\t\t\t\tchannelBindingToken = null;\n\t\t\t}\n\n\t\t\tchannelBindingKind = ChannelBindingKind.Unknown;\n\t\t\tnegotiatedChannelBinding = false;\n\t\t\tstate = LoginState.Initial;\n\t\t\tclient = null;\n\t\t\tserver = null;\n\t\t\tsalted = null;\n\t\t\tcnonce = null;\n\t\t\tauth = null;\n\n\t\t\tbase.Reset ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismScramSha1.cs",
    "content": "﻿//\n// SaslMechanismScramSha1.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Security.Cryptography;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The SCRAM-SHA-1 SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A salted challenge/response SASL mechanism that uses the HMAC SHA-1 algorithm.\n\t/// </remarks>\n\tpublic class SaslMechanismScramSha1 : SaslMechanismScramBase\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha1\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-1 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha1 (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha1\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-1 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha1 (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"SCRAM-SHA-1\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create the HMAC context.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates the HMAC context using the secret key.\n\t\t/// </remarks>\n\t\t/// <returns>The HMAC context.</returns>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tprotected override KeyedHashAlgorithm CreateHMAC (byte[] key)\n\t\t{\n\t\t\treturn new HMACSHA1 (key);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Apply the cryptographic hash function.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// H(str): Apply the cryptographic hash function to the octet string\n\t\t/// \"str\", producing an octet string as a result. The size of the\n\t\t/// result depends on the hash result size for the hash function in\n\t\t/// use.\n\t\t/// </remarks>\n\t\t/// <returns>The results of the hash.</returns>\n\t\t/// <param name=\"str\">The string.</param>\n\t\tprotected override byte[] Hash (byte[] str)\n\t\t{\n\t\t\tusing (var sha1 = SHA1.Create ())\n\t\t\t\treturn sha1.ComputeHash (str);\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// The SCRAM-SHA-1-PLUS SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A salted challenge/response SASL mechanism that uses the HMAC SHA-1 algorithm and Transport Layer Security (TLS) channel binding.\n\t/// </remarks>\n\tpublic class SaslMechanismScramSha1Plus : SaslMechanismScramSha1\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha1Plus\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-1-PLUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha1Plus (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha1Plus\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-1-PLUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha1Plus (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"SCRAM-SHA-1-PLUS\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports channel binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports channel binding.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports channel binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsChannelBinding {\n\t\t\tget { return true; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismScramSha256.cs",
    "content": "﻿//\n// SaslMechanismScramSha256.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Security.Cryptography;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The SCRAM-SHA-256 SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A salted challenge/response SASL mechanism that uses the HMAC SHA-256 algorithm.\n\t/// </remarks>\n\tpublic class SaslMechanismScramSha256 : SaslMechanismScramBase\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha256\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-256 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha256 (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha256\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-256 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha256 (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"SCRAM-SHA-256\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create the HMAC context.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates the HMAC context using the secret key.\n\t\t/// </remarks>\n\t\t/// <returns>The HMAC context.</returns>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tprotected override KeyedHashAlgorithm CreateHMAC (byte[] key)\n\t\t{\n\t\t\treturn new HMACSHA256 (key);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Apply the cryptographic hash function.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// H(str): Apply the cryptographic hash function to the octet string\n\t\t/// \"str\", producing an octet string as a result. The size of the\n\t\t/// result depends on the hash result size for the hash function in\n\t\t/// use.\n\t\t/// </remarks>\n\t\t/// <returns>The results of the hash.</returns>\n\t\t/// <param name=\"str\">The string.</param>\n\t\tprotected override byte[] Hash (byte[] str)\n\t\t{\n\t\t\tusing (var sha256 = SHA256.Create ())\n\t\t\t\treturn sha256.ComputeHash (str);\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// The SCRAM-SHA-256-PLUS SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A salted challenge/response SASL mechanism that uses the HMAC SHA-256 algorithm and Transport Layer Security (TLS) channel binding.\n\t/// </remarks>\n\tpublic class SaslMechanismScramSha256Plus : SaslMechanismScramSha256\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha256Plus\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-256-PLUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha256Plus (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha256Plus\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-256-PLUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha256Plus (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"SCRAM-SHA-256-PLUS\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports channel binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports channel binding.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports channel binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsChannelBinding {\n\t\t\tget { return true; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SaslMechanismScramSha512.cs",
    "content": "﻿//\n// SaslMechanismScramSha512.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Net;\nusing System.Security.Cryptography;\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// The SCRAM-SHA-512 SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A salted challenge/response SASL mechanism that uses the HMAC SHA-512 algorithm.\n\t/// </remarks>\n\tpublic class SaslMechanismScramSha512 : SaslMechanismScramBase\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha512\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-512 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha512 (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha512\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-512 SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha512 (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"SCRAM-SHA-512\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Create the HMAC context.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates the HMAC context using the secret key.\n\t\t/// </remarks>\n\t\t/// <returns>The HMAC context.</returns>\n\t\t/// <param name=\"key\">The secret key.</param>\n\t\tprotected override KeyedHashAlgorithm CreateHMAC (byte[] key)\n\t\t{\n\t\t\treturn new HMACSHA512 (key);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Apply the cryptographic hash function.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// H(str): Apply the cryptographic hash function to the octet string\n\t\t/// \"str\", producing an octet string as a result. The size of the\n\t\t/// result depends on the hash result size for the hash function in\n\t\t/// use.\n\t\t/// </remarks>\n\t\t/// <returns>The results of the hash.</returns>\n\t\t/// <param name=\"str\">The string.</param>\n\t\tprotected override byte[] Hash (byte[] str)\n\t\t{\n\t\t\tusing (var sha512 = SHA512.Create ())\n\t\t\t\treturn sha512.ComputeHash (str);\n\t\t}\n\t}\n\n\t/// <summary>\n\t/// The SCRAM-SHA-512-PLUS SASL mechanism.\n\t/// </summary>\n\t/// <remarks>\n\t/// A salted challenge/response SASL mechanism that uses the HMAC SHA-512 algorithm and Transport Layer Security (TLS) channel binding.\n\t/// </remarks>\n\tpublic class SaslMechanismScramSha512Plus : SaslMechanismScramSha512\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha512Plus\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-512-PLUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"credentials\">The user's credentials.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"credentials\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha512Plus (NetworkCredential credentials) : base (credentials)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.Security.SaslMechanismScramSha512Plus\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new SCRAM-SHA-512-PLUS SASL context.\n\t\t/// </remarks>\n\t\t/// <param name=\"userName\">The user name.</param>\n\t\t/// <param name=\"password\">The password.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"userName\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"password\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic SaslMechanismScramSha512Plus (string userName, string password) : base (userName, password)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the name of the SASL mechanism.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the name of the SASL mechanism.\n\t\t/// </remarks>\n\t\t/// <value>The name of the SASL mechanism.</value>\n\t\tpublic override string MechanismName {\n\t\t\tget { return \"SCRAM-SHA-512-PLUS\"; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the SASL mechanism supports channel binding.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the SASL mechanism supports channel binding.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the SASL mechanism supports channel binding; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic override bool SupportsChannelBinding {\n\t\t\tget { return true; }\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SecureSocketOptions.cs",
    "content": "﻿//\n// SecureSocketOptions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit.Security {\n\t/// <summary>\n\t/// Secure socket options.\n\t/// </summary>\n\t/// <remarks>\n\t/// Provides a way of specifying the SSL and/or TLS encryption that\n\t/// should be used for a connection.\n\t/// </remarks>\n\tpublic enum SecureSocketOptions {\n\t\t/// <summary>\n\t\t/// No SSL or TLS encryption should be used.\n\t\t/// </summary>\n\t\tNone,\n\n\t\t/// <summary>\n\t\t/// Allow the <see cref=\"IMailService\"/> to decide which SSL or TLS\n\t\t/// options to use (default). If the server does not support SSL or TLS,\n\t\t/// then the connection will continue without any encryption.\n\t\t/// </summary>\n\t\tAuto,\n\n\t\t/// <summary>\n\t\t/// The connection should use SSL or TLS encryption immediately.\n\t\t/// </summary>\n\t\tSslOnConnect,\n\n\t\t/// <summary>\n\t\t/// Elevates the connection to use TLS encryption immediately after\n\t\t/// reading the greeting and capabilities of the server. If the server\n\t\t/// does not support the STARTTLS extension, then the connection will\n\t\t/// fail and a <see cref=\"System.NotSupportedException\"/> will be thrown.\n\t\t/// </summary>\n\t\tStartTls,\n\n\t\t/// <summary>\n\t\t/// Elevates the connection to use TLS encryption immediately after\n\t\t/// reading the greeting and capabilities of the server, but only if\n\t\t/// the server supports the STARTTLS extension.\n\t\t/// </summary>\n\t\tStartTlsWhenAvailable,\n\t}\n}\n"
  },
  {
    "path": "MailKit/Security/SslHandshakeException.cs",
    "content": "﻿//\n// SslHandshakeException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Text;\nusing System.Formats.Asn1;\nusing System.Net.Security;\nusing System.Globalization;\nusing System.Collections.Generic;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\nusing System.Security.Cryptography.X509Certificates;\n\nnamespace MailKit.Security\n{\n\t/// <summary>\n\t/// The exception that is thrown when there is an error during the SSL/TLS handshake.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>The exception that is thrown when there is an error during the SSL/TLS handshake.</para>\n\t/// <para>When this exception occurs, it typically means that the IMAP, POP3 or SMTP server that\n\t/// you are connecting to is using an SSL certificate that is either expired or untrusted by\n\t/// your system.</para>\n\t/// <para>Often times, mail servers will use self-signed certificates instead of using a certificate\n\t/// that has been signed by a trusted Certificate Authority. When your system is unable to validate\n\t/// the mail server's certificate because it is not signed by a known and trusted Certificate Authority,\n\t/// this exception will occur.</para>\n\t/// <para>You can work around this problem by supplying a custom <see cref=\"System.Net.Security.RemoteCertificateValidationCallback\"/>\n\t/// and setting it on the client's <see cref=\"MailService.ServerCertificateValidationCallback\"/> property.</para>\n\t/// <para>Most likely, you'll want to compare the thumbprint of the server's certificate with a known\n\t/// value and/or prompt the user to accept the certificate (similar to what you've probably seen web\n\t/// browsers do when they encounter untrusted certificates).</para>\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class SslHandshakeException : Exception\n\t{\n\t\tconst string SslHandshakeHelpLink = \"https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ssl-handshake-exception\";\n\t\tconst string DefaultMessage = \"An error occurred while attempting to establish an SSL or TLS connection.\";\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"SslHandshakeException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SslHandshakeException\"/> from the serialized data.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected SslHandshakeException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t\tvar base64 = info.GetString (\"ServerCertificate\");\n\n\t\t\tif (base64 != null)\n\t\t\t\tServerCertificate = new X509Certificate2 (Convert.FromBase64String (base64));\n\n\t\t\tbase64 = info.GetString (\"RootCertificateAuthority\");\n\n\t\t\tif (base64 != null)\n\t\t\t\tRootCertificateAuthority = new X509Certificate2 (Convert.FromBase64String (base64));\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"SslHandshakeException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SslHandshakeException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">An inner exception.</param>\n\t\tpublic SslHandshakeException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t\tHelpLink = SslHandshakeHelpLink;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"SslHandshakeException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SslHandshakeException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic SslHandshakeException (string message) : base (message)\n\t\t{\n\t\t\tHelpLink = SslHandshakeHelpLink;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"SslHandshakeException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"SslHandshakeException\"/>.\n\t\t/// </remarks>\n\t\tpublic SslHandshakeException () : base (DefaultMessage)\n\t\t{\n\t\t\tHelpLink = SslHandshakeHelpLink;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the server's SSL certificate.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the server's SSL certificate, if it is available.\n\t\t/// </remarks>\n\t\t/// <value>The server's SSL certificate.</value>\n\t\tpublic X509Certificate? ServerCertificate {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the certificate for the Root Certificate Authority.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the certificate for the Root Certificate Authority, if it is available.\n\t\t/// </remarks>\n\t\t/// <value>The Root Certificate Authority certificate.</value>\n\t\tpublic X509Certificate? RootCertificateAuthority {\n\t\t\tget; private set;\n\t\t}\n\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// When overridden in a derived class, sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Sets the <see cref=\"System.Runtime.Serialization.SerializationInfo\"/>\n\t\t/// with information about the exception.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecurityCritical]\n#if NET8_0_OR_GREATER\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n#endif\n\t\tpublic override void GetObjectData (SerializationInfo info, StreamingContext context)\n\t\t{\n\t\t\tbase.GetObjectData (info, context);\n\n\t\t\tif (ServerCertificate != null)\n\t\t\t\tinfo.AddValue (\"ServerCertificate\", Convert.ToBase64String (ServerCertificate.GetRawCertData ()));\n\t\t\telse\n\t\t\t\tinfo.AddValue (\"ServerCertificate\", null, typeof (string));\n\n\t\t\tif (RootCertificateAuthority != null)\n\t\t\t\tinfo.AddValue (\"RootCertificateAuthority\", Convert.ToBase64String (RootCertificateAuthority.GetRawCertData ()));\n\t\t\telse\n\t\t\t\tinfo.AddValue (\"RootCertificateAuthority\", null, typeof (string));\n\t\t}\n#endif\n\n\t\tinternal static SslHandshakeException Create (ref SslCertificateValidationInfo? validationInfo, Exception ex, bool starttls, string protocol, string host, int port, int sslPort, params int[] standardPorts)\n\t\t{\n\t\t\tvar message = new StringBuilder (DefaultMessage);\n\t\t\tX509Certificate2? certificate = null;\n\t\t\tX509Certificate2? root = null;\n\n\t\t\tif (ex is AggregateException aggregate) {\n\t\t\t\taggregate = aggregate.Flatten ();\n\n\t\t\t\tif (aggregate.InnerExceptions.Count == 1)\n\t\t\t\t\tex = aggregate.InnerExceptions[0];\n\t\t\t\telse\n\t\t\t\t\tex = aggregate;\n\t\t\t}\n\n\t\t\tmessage.AppendLine ();\n\t\t\tmessage.AppendLine ();\n\n\t\t\tif (validationInfo != null) {\n\t\t\t\ttry {\n\t\t\t\t\tint rootIndex = validationInfo.ChainElements.Count - 1;\n\n\t\t\t\t\tif (rootIndex > 0) {\n#if NET10_0_OR_GREATER\n\t\t\t\t\t\troot = X509CertificateLoader.LoadCertificate (validationInfo.ChainElements[rootIndex].Certificate.RawData);\n#else\n\t\t\t\t\t\troot = new X509Certificate2 (validationInfo.ChainElements[rootIndex].Certificate.RawData);\n#endif\n\t\t\t\t\t}\n\n\t\t\t\t\tif (validationInfo.Certificate != null) {\n#if NET10_0_OR_GREATER\n\t\t\t\t\t\tcertificate = X509CertificateLoader.LoadCertificate (validationInfo.Certificate.RawData);\n#else\n\t\t\t\t\t\tcertificate = new X509Certificate2 (validationInfo.Certificate.RawData);\n#endif\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((validationInfo.SslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) != 0) {\n\t\t\t\t\t\tmessage.AppendLine (\"The SSL certificate for the server was not available.\");\n\t\t\t\t\t} else if ((validationInfo.SslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) != 0) {\n\t\t\t\t\t\tvar dnsNames = GetDnsNames (certificate);\n\n\t\t\t\t\t\tif (dnsNames.Count == 1) {\n\t\t\t\t\t\t\tmessage.AppendLine ($\"The host name ({host}) did not match the name given in the server's SSL certificate ({dnsNames.Single ()}).\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar formattedDnsNames = string.Join (Environment.NewLine, dnsNames.Select (dnsName => $\"  \\u2022 {dnsName}\"));\n\t\t\t\t\t\t\tmessage.AppendLine ($\"The host name ({host}) did not match any of the names given in the server's SSL certificate:{Environment.NewLine}{formattedDnsNames}\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage.AppendLine (\"The server's SSL certificate could not be validated for the following reasons:\");\n\n\t\t\t\t\t\tbool haveReason = false;\n\n\t\t\t\t\t\tfor (int chainIndex = 0; chainIndex < validationInfo.ChainElements.Count; chainIndex++) {\n\t\t\t\t\t\t\tvar element = validationInfo.ChainElements[chainIndex];\n\n\t\t\t\t\t\t\tif (element.ChainElementStatus == null || element.ChainElementStatus.Length == 0)\n\t\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t\tif (chainIndex == 0) {\n\t\t\t\t\t\t\t\tmessage.AppendLine (\"\\u2022 The server certificate has the following errors:\");\n\t\t\t\t\t\t\t} else if (chainIndex == rootIndex) {\n\t\t\t\t\t\t\t\tmessage.AppendLine (\"\\u2022 The root certificate has the following errors:\");\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmessage.AppendLine (\"\\u2022 An intermediate certificate has the following errors:\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tforeach (var status in element.ChainElementStatus) {\n\t\t\t\t\t\t\t\tmessage.Append (\"  \\u2022 \");\n\t\t\t\t\t\t\t\tmessage.AppendLine (status.StatusInformation);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\thaveReason = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Note: Because Mono does not include any elements in the chain (at least on macOS), we need\n\t\t\t\t\t\t// to find the inner-most exception and append its Message.\n\t\t\t\t\t\tif (!haveReason) {\n\t\t\t\t\t\t\tvar innerException = ex;\n\n\t\t\t\t\t\t\twhile (innerException.InnerException != null)\n\t\t\t\t\t\t\t\tinnerException = innerException.InnerException;\n\n\t\t\t\t\t\t\tmessage.AppendLine (\"\\u2022 \" + innerException.Message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tvalidationInfo.Dispose ();\n\t\t\t\t\tvalidationInfo = null;\n\t\t\t\t}\n\t\t\t} else if (!starttls && standardPorts.Contains (port)) {\n\t\t\t\tstring an = \"AEHIOS\".IndexOf (protocol[0]) != -1 ? \"an\" : \"a\";\n\n\t\t\t\tmessage.AppendFormat (CultureInfo.InvariantCulture, \"When connecting to {0} {1} service, port {2} is typically reserved for plain-text connections. If{3}\", an, protocol, port, Environment.NewLine);\n\t\t\t\tmessage.AppendFormat (CultureInfo.InvariantCulture, \"you intended to connect to {0} on the SSL port, try connecting to port {1} instead. Otherwise,{2}\", protocol, sslPort, Environment.NewLine);\n\t\t\t\tmessage.AppendLine (\"if you intended to use STARTTLS, make sure to use the following code:\");\n\t\t\t\tmessage.AppendLine ();\n\t\t\t\tmessage.AppendFormat (CultureInfo.InvariantCulture, \"client.Connect (\\\"{0}\\\", {1}, SecureSocketOptions.StartTls);{2}\", host, port, Environment.NewLine);\n\t\t\t} else {\n\t\t\t\tmessage.AppendLine (\"This usually means that the SSL certificate presented by the server is not trusted by the system for one or more of\");\n\t\t\t\tmessage.AppendLine (\"the following reasons:\");\n\t\t\t\tmessage.AppendLine ();\n\t\t\t\tmessage.AppendLine (\"1. The server is using a self-signed certificate which cannot be verified.\");\n\t\t\t\tmessage.AppendLine (\"2. The local system is missing a Root or Intermediate certificate needed to verify the server's certificate.\");\n\t\t\t\tmessage.AppendLine (\"3. A Certificate Authority CRL server for one or more of the certificates in the chain is temporarily unavailable.\");\n\t\t\t\tmessage.AppendLine (\"4. The certificate presented by the server is expired or invalid.\");\n\t\t\t\tmessage.AppendLine (\"5. The set of SSL/TLS protocols supported by the client and server do not match.\");\n\t\t\t\tif (!starttls)\n\t\t\t\t\tmessage.AppendLine (\"6. You are trying to connect to a port which does not support SSL/TLS.\");\n\t\t\t\tmessage.AppendLine ();\n\t\t\t\tmessage.AppendLine (\"See \" + SslHandshakeHelpLink + \" for possible solutions.\");\n\t\t\t}\n\n\t\t\treturn new SslHandshakeException (message.ToString (), ex) { ServerCertificate = certificate, RootCertificateAuthority = root };\n\t\t}\n\n\t\t// Adapted from Sebastian Krysmanski's https://github.com/skrysmanski/AppMotor/blob/main/src/AppMotor.Core/Certificates/SanExtensionHelpers.cs under the MIT license\n\t\tstatic IReadOnlyCollection<string> GetDnsNames (X509Certificate2? certificate)\n\t\t{\n\t\t\tconst string subjectAlternativeNameOid = \"2.5.29.17\";\n\t\t\tvar dnsNames = new SortedSet<string> ();\n\n\t\t\tif (certificate == null)\n\t\t\t\treturn dnsNames;\n\n\t\t\tvar dnsNameInfo = certificate.GetNameInfo (X509NameType.DnsName, forIssuer: false);\n\t\t\tif (dnsNameInfo != null)\n\t\t\t\tdnsNames.Add (dnsNameInfo);\n\n\t\t\tvar extension = certificate.Extensions[subjectAlternativeNameOid];\n\t\t\tif (extension == null)\n\t\t\t\treturn dnsNames;\n\n\t\t\ttry {\n\t\t\t\t// Tag value \"2\" is defined by:\n\t\t\t\t//\n\t\t\t\t//    dNSName                         [2]     IA5String,\n\t\t\t\t//\n\t\t\t\t// in: https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.6\n\t\t\t\tvar dnsNameTag = new Asn1Tag (TagClass.ContextSpecific, tagValue: 2, isConstructed: false);\n\t\t\t\tvar asnReader = new AsnReader (extension.RawData, AsnEncodingRules.BER);\n\t\t\t\tvar sequenceReader = asnReader.ReadSequence (Asn1Tag.Sequence);\n\n\t\t\t\twhile (sequenceReader.HasData) {\n\t\t\t\t\tvar tag = sequenceReader.PeekTag ();\n\t\t\t\t\tif (tag != dnsNameTag) {\n\t\t\t\t\t\tsequenceReader.ReadEncodedValue ();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar dnsName = sequenceReader.ReadCharacterString (UniversalTagNumber.IA5String, dnsNameTag);\n\t\t\t\t\tdnsNames.Add (dnsName);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// ignore, the error message will not include subject alternative names\n\t\t\t}\n\n\t\t\treturn dnsNames;\n\t\t}\n\t}\n\n\tsealed class SslChainElement : IDisposable\n\t{\n\t\tpublic readonly X509Certificate2 Certificate;\n\t\tpublic readonly X509ChainStatus[] ChainElementStatus;\n\t\tpublic readonly string Information;\n\n\t\tpublic SslChainElement (X509ChainElement element)\n\t\t{\n#if NET10_0_OR_GREATER\n\t\t\tCertificate = X509CertificateLoader.LoadCertificate (element.Certificate.RawData);\n#else\n\t\t\tCertificate = new X509Certificate2 (element.Certificate.RawData);\n#endif\n\t\t\tChainElementStatus = element.ChainElementStatus;\n\t\t\tInformation = element.Information;\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tCertificate.Dispose ();\n\t\t}\n\t}\n\n\tsealed class SslCertificateValidationInfo : IDisposable\n\t{\n\t\tpublic readonly List<SslChainElement> ChainElements;\n\t\tpublic readonly X509ChainStatus[] ChainStatus;\n\t\tpublic readonly SslPolicyErrors SslPolicyErrors;\n\t\tpublic readonly X509Certificate2? Certificate;\n\t\tpublic readonly string Host;\n\n\t\tpublic SslCertificateValidationInfo (string host, X509Certificate? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n#if NET10_0_OR_GREATER\n\t\t\tCertificate = certificate != null ? X509CertificateLoader.LoadCertificate (certificate.Export (X509ContentType.Cert)) : null;\n#else\n\t\t\tCertificate = certificate != null ? new X509Certificate2 (certificate.Export (X509ContentType.Cert)) : null;\n#endif\n\t\t\tChainElements = new List<SslChainElement> ();\n\t\t\tSslPolicyErrors = sslPolicyErrors;\n\t\t\tHost = host;\n\n\t\t\t// Note: we need to copy the ChainElements because the chain will be destroyed\n\t\t\tif (chain != null) {\n\t\t\t\tChainStatus = chain.ChainStatus;\n\n\t\t\t\tforeach (var element in chain.ChainElements)\n\t\t\t\t\tChainElements.Add (new SslChainElement (element));\n\t\t\t} else {\n\t\t\t\tChainStatus = Array.Empty<X509ChainStatus> ();\n\t\t\t}\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tCertificate?.Dispose ();\n\t\t\tforeach (var element in ChainElements)\n\t\t\t\telement.Dispose ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ServiceNotAuthenticatedException.cs",
    "content": "﻿//\n// ServiceNotAuthenticatedException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when the <see cref=\"IMailService\"/> is not authenticated.\n\t/// </summary>\n\t/// <remarks>\n\t/// This exception is thrown when an operation on a service could not be completed\n\t/// due to the service not being authenticated.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class ServiceNotAuthenticatedException : InvalidOperationException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotAuthenticatedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deserializes a <see cref=\"ServiceNotAuthenticatedException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected ServiceNotAuthenticatedException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotAuthenticatedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ServiceNotAuthenticatedException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\tpublic ServiceNotAuthenticatedException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotAuthenticatedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ServiceNotAuthenticatedException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic ServiceNotAuthenticatedException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotAuthenticatedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ServiceNotAuthenticatedException\"/>.\n\t\t/// </remarks>\n\t\tpublic ServiceNotAuthenticatedException ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ServiceNotConnectedException.cs",
    "content": "﻿//\n// ServiceNotConnectedException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n#if SERIALIZABLE\nusing System.Security;\nusing System.Runtime.Serialization;\n#endif\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The exception that is thrown when the <see cref=\"IMailService\"/> is not connected.\n\t/// </summary>\n\t/// <remarks>\n\t/// This exception is thrown when an operation on a service could not be completed\n\t/// due to the service not being connected.\n\t/// </remarks>\n#if SERIALIZABLE\n\t[Serializable]\n#endif\n\tpublic class ServiceNotConnectedException : InvalidOperationException\n\t{\n#if SERIALIZABLE\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotConnectedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Deserializes a <see cref=\"ServiceNotConnectedException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"info\">The serialization info.</param>\n\t\t/// <param name=\"context\">The streaming context.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"info\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t[SecuritySafeCritical]\n\t\t[Obsolete (\"This API supports obsolete formatter-based serialization. It should not be called or extended by application code.\")]\n\t\tprotected ServiceNotConnectedException (SerializationInfo info, StreamingContext context) : base (info, context)\n\t\t{\n\t\t}\n#endif\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotConnectedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ServiceNotConnectedException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\t/// <param name=\"innerException\">The inner exception.</param>\n\t\tpublic ServiceNotConnectedException (string message, Exception innerException) : base (message, innerException)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotConnectedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ServiceNotConnectedException\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"message\">The error message.</param>\n\t\tpublic ServiceNotConnectedException (string message) : base (message)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.ServiceNotConnectedException\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"ServiceNotConnectedException\"/>.\n\t\t/// </remarks>\n\t\tpublic ServiceNotConnectedException ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/SpecialFolder.cs",
    "content": "﻿//\n// SpecialFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An enumeration of special folders.\n\t/// </summary>\n\t/// <remarks>\n\t/// An enumeration of special folders.\n\t/// </remarks>\n\tpublic enum SpecialFolder {\n\t\t/// <summary>\n\t\t/// The special folder containing an aggregate of all messages.\n\t\t/// </summary>\n\t\tAll,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains archived messages.\n\t\t/// </summary>\n\t\tArchive,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains message drafts.\n\t\t/// </summary>\n\t\tDrafts,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains flagged messages.\n\t\t/// </summary>\n\t\tFlagged,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains important messages.\n\t\t/// </summary>\n\t\tImportant,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains spam messages.\n\t\t/// </summary>\n\t\tJunk,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains sent messages.\n\t\t/// </summary>\n\t\tSent,\n\n\t\t/// <summary>\n\t\t/// The special folder that contains deleted messages.\n\t\t/// </summary>\n\t\tTrash\n\t}\n}\n"
  },
  {
    "path": "MailKit/StatusItems.cs",
    "content": "﻿//\n// StatusItems.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Status items.\n\t/// </summary>\n\t/// <remarks>\n\t/// Used with <see cref=\"IMailFolder.Status(StatusItems,System.Threading.CancellationToken)\"/>\n\t/// </remarks>\n\t[Flags]\n\tpublic enum StatusItems {\n\t\t/// <summary>\n\t\t/// No status requested.\n\t\t/// </summary>\n\t\tNone           = 0,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.Count\"/>.\n\t\t/// </summary>\n\t\tCount          = 1 << 0,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.Recent\"/>.\n\t\t/// </summary>\n\t\tRecent         = 1 << 1,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.UidNext\"/>.\n\t\t/// </summary>\n\t\tUidNext        = 1 << 2,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.UidValidity\"/>.\n\t\t/// </summary>\n\t\tUidValidity    = 1 << 3,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.Unread\"/>.\n\t\t/// </summary>\n\t\tUnread         = 1 << 4,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.HighestModSeq\"/>.\n\t\t/// </summary>\n\t\tHighestModSeq  = 1 << 5,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.AppendLimit\"/>.\n\t\t/// </summary>\n\t\tAppendLimit    = 1 << 6,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.Size\"/>.\n\t\t/// </summary>\n\t\tSize           = 1 << 7,\n\n\t\t/// <summary>\n\t\t/// Updates <see cref=\"IMailFolder.Id\"/>.\n\t\t/// </summary>\n\t\tMailboxId      = 1 << 8,\n\t}\n}\n"
  },
  {
    "path": "MailKit/StoreAction.cs",
    "content": "﻿//\n// StoreAction.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// The action to perform when storing flags, keywords, or labels.\n\t/// </summary>\n\t/// <remarks>\n\t/// Used to specify whether the flags, keywords, or labels should be added, removed, or set for the message(s).\n\t/// </remarks>\n\tpublic enum StoreAction\n\t{\n\t\t/// <summary>\n\t\t/// Add the specified flags, keywords or labels.\n\t\t/// </summary>\n\t\tAdd,\n\n\t\t/// <summary>\n\t\t/// Remove the specified flags, keywords or labels.\n\t\t/// </summary>\n\t\tRemove,\n\n\t\t/// <summary>\n\t\t/// Replace the specified flags, keywords or labels.\n\t\t/// </summary>\n\t\tSet\n\t}\n}\n"
  },
  {
    "path": "MailKit/StoreFlagsRequest.cs",
    "content": "﻿//\n// StoreFlagsRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for storing message flags and keywords.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>A request suitable for storing message flags and keywords.</para>\n\t/// <para>This request is designed to be used with the <a href=\"Overload_MailKit_IMailFolder_Store.htm\">Store</a> and\n\t/// <a href=\"Overload_MailKit_IMailFolder_StoreAsync.htm\">StoreAsync</a> methods.</para>\n\t/// </remarks>\n\tpublic class StoreFlagsRequest : IStoreFlagsRequest\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"StoreFlagsRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"StoreFlagsRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"action\">The store action to perform.</param>\n\t\t/// <param name=\"flags\">The message flags to add, remove or set on the message.</param>\n\t\tpublic StoreFlagsRequest (StoreAction action, MessageFlags flags)\n\t\t{\n\t\t\tKeywords = new HashSet<string> ();\n\t\t\tAction = action;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"StoreFlagsRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"StoreFlagsRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"action\">The store action to perform.</param>\n\t\t/// <param name=\"keywords\">The custom keywords to add, remove or set on the message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic StoreFlagsRequest (StoreAction action, IEnumerable<string> keywords)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords as ISet<string> ?? new HashSet<string> (keywords);\n\t\t\tAction = action;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"StoreFlagsRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"StoreFlagsRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"action\">The store action to perform.</param>\n\t\t/// <param name=\"flags\">The message flags to add, remove or set on the message.</param>\n\t\t/// <param name=\"keywords\">The custom keywords to add, remove or set on the message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"keywords\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic StoreFlagsRequest (StoreAction action, MessageFlags flags, IEnumerable<string> keywords)\n\t\t{\n\t\t\tif (keywords == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (keywords));\n\n\t\t\tKeywords = keywords as ISet<string> ?? new HashSet<string> (keywords);\n\t\t\tAction = action;\n\t\t\tFlags = flags;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the store action to perform.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the store action to perform.\n\t\t/// </remarks>\n\t\t/// <value>The store action.</value>\n\t\tpublic StoreAction Action {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the flags to add, remove or set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the flags to add, remove or set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The message flags.</value>\n\t\tpublic MessageFlags Flags {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set the keywords to add, remove or set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the keywords to add, remove or set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The keywords.</value>\n\t\tpublic ISet<string> Keywords {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether the store operation should run silently.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether the store operation should run silently.</para>\n\t\t/// <para>Normally, when flags or keywords are changed on a message, a <see cref=\"IMailFolder.MessageFlagsChanged\"/> event is emitted.\n\t\t/// By setting <see cref=\"Silent\"/> to <see langword=\"true\" />, this event will not be emitted as a result of this store operation.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the store operation should run silently (not emitting events for flag changes); otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool Silent {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a mod-sequence number that the store operation should use to decide if the flags of a message should be updated or not.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a mod-sequence number that the store operation should use to decide if the flags of a message should be updated or not.</para>\n\t\t/// <para>For each message specified in the message set, the server performs the following. If the mod-sequence of every metadata item of the\n\t\t/// message affected by the store operation is equal to or less than the specified <see cref=\"UnchangedSince\"/> value, then the requested operation\n\t\t/// is performed.</para>\n\t\t/// <para>However, if the mod-sequence of any metadata item of the message is greater than the specified <see cref=\"UnchangedSince\"/> value, then the\n\t\t/// requested operation WILL NOT be performed. In this case, the mod-sequence attribute of the message is not updated, and the message index\n\t\t/// (or unique identifier in cases where <see cref=\"IMailFolder.Store(IList{UniqueId}, IStoreFlagsRequest, System.Threading.CancellationToken)\"/> or\n\t\t/// <see cref=\"IMailFolder.StoreAsync(IList{UniqueId}, IStoreFlagsRequest, System.Threading.CancellationToken)\"/> is used) is added to the list of\n\t\t/// messages that failed the UNCHANGEDSINCE test.</para>\n\t\t/// <note type=\"note\">The <see cref=\"UnchangedSince\"/> mod-sequence number can only be used if the server supports the <see cref=\"FolderFeature.ModSequences\"/>\n\t\t/// feature.</note>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence number.</value>\n\t\tpublic ulong? UnchangedSince {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/StoreLabelsRequest.cs",
    "content": "﻿//\n// StoreLabelsRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A request for storing GMail-style labels.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>A request suitable for storing GMail-style labels.</para>\n\t/// <para>This request is designed to be used with the <a href=\"Overload_MailKit_IMailFolder_Store.htm\">Store</a> and\n\t/// <a href=\"Overload_MailKit_IMailFolder_StoreAsync.htm\">StoreAsync</a> methods.</para>\n\t/// </remarks>\n\tpublic class StoreLabelsRequest : IStoreLabelsRequest\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"StoreLabelsRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"StoreLabelsRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"action\">The store action to perform.</param>\n\t\tpublic StoreLabelsRequest (StoreAction action)\n\t\t{\n\t\t\tLabels = new HashSet<string> ();\n\t\t\tAction = action;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"StoreLabelsRequest\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"StoreLabelsRequest\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"action\">The store action to perform.</param>\n\t\t/// <param name=\"labels\">The custom keywords to add, remove or set on the message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"labels\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic StoreLabelsRequest (StoreAction action, IEnumerable<string> labels)\n\t\t{\n\t\t\tif (labels == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (labels));\n\n\t\t\tLabels = labels as ISet<string> ?? new HashSet<string> (labels);\n\t\t\tAction = action;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the store action to perform.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the store action to perform.\n\t\t/// </remarks>\n\t\t/// <value>The store action.</value>\n\t\tpublic StoreAction Action {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the GMail-style labels to add, remove or set on the message.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the GMail-style labels to add, remove or set on the message.\n\t\t/// </remarks>\n\t\t/// <value>The GMail-style labels.</value>\n\t\tpublic ISet<string> Labels {\n\t\t\tget;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set whether the store operation should run silently.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets whether the store operation should run silently.</para>\n\t\t/// <para>Normally, when flags or keywords are changed on a message, a <see cref=\"IMailFolder.MessageLabelsChanged\"/> event is emitted.\n\t\t/// By setting <see cref=\"Silent\"/> to <see langword=\"true\" />, this event will not be emitted as a result of this store operation.</para>\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the store operation should run silently (not emitting events for label changes); otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool Silent {\n\t\t\tget; set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get or set a mod-sequence number that the store operation should use to decide if the labels of a message should be updated or not.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Gets or sets a mod-sequence number that the store operation should use to decide if the labels of a message should be updated or not.</para>\n\t\t/// <para>For each message specified in the message set, the server performs the following. If the mod-sequence of every metadata item of the\n\t\t/// message affected by the store operation is equal to or less than the specified <see cref=\"UnchangedSince\"/> value, then the requested operation\n\t\t/// is performed.</para>\n\t\t/// <para>However, if the mod-sequence of any metadata item of the message is greater than the specified <see cref=\"UnchangedSince\"/> value, then the\n\t\t/// requested operation WILL NOT be performed. In this case, the mod-sequence attribute of the message is not updated, and the message index\n\t\t/// (or unique identifier in cases where <see cref=\"IMailFolder.Store(IList{UniqueId}, IStoreLabelsRequest, System.Threading.CancellationToken)\"/> or\n\t\t/// <see cref=\"IMailFolder.StoreAsync(IList{UniqueId}, IStoreLabelsRequest, System.Threading.CancellationToken)\"/> is used) is added to the list of\n\t\t/// messages that failed the UNCHANGEDSINCE test.</para>\n\t\t/// <note type=\"note\">The <see cref=\"UnchangedSince\"/> mod-sequence number can only be used if the server supports the <see cref=\"FolderFeature.ModSequences\"/>\n\t\t/// feature.</note>\n\t\t/// </remarks>\n\t\t/// <value>The mod-sequence number.</value>\n\t\tpublic ulong? UnchangedSince {\n\t\t\tget; set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/Telemetry.cs",
    "content": "﻿//\n// Telemetry.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0_OR_GREATER\n\nusing System;\nusing System.Diagnostics;\nusing System.Diagnostics.Metrics;\n\nusing MailKit.Net;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// Telemetry constants for MailKit.\n\t/// </summary>\n\t/// <remarks>\n\t/// Telemetry constants for MailKit.\n\t/// </remarks>\n\tpublic static class Telemetry\n\t{\n\t\t/// <summary>\n\t\t/// The socket-level telemetry information.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The socket-level telemetry information.\n\t\t/// </remarks>\n\t\tpublic static class Socket\n\t\t{\n\t\t\t/// <summary>\n\t\t\t/// The name of the socket-level meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the socket-level meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterName = \"mailkit.net.socket\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the socket-level meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the socket-level meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterVersion = \"0.1\";\n\n\t\t\tstatic Meter? Meter;\n\n\t\t\tinternal static SocketMetrics? Metrics { get; private set; }\n\n\t\t\t/// <summary>\n\t\t\t/// Configure socket metering.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures socket metering.\n\t\t\t/// </remarks>\n\t\t\tpublic static void Configure ()\n\t\t\t{\n\t\t\t\tMeter ??= new Meter (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= new SocketMetrics (Meter);\n\t\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t\t/// <summary>\n\t\t\t/// Configure socket telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures socket telemetry.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"meterFactory\">The meter factory.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"meterFactory\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\tpublic static void Configure (IMeterFactory meterFactory)\n\t\t\t{\n\t\t\t\tif (meterFactory is null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (meterFactory));\n\n\t\t\t\tMeter ??= meterFactory.Create (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= new SocketMetrics (Meter);\n\t\t\t}\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The SmtpClient-level telemetry information.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The SmtpClient-level telemetry information.\n\t\t/// </remarks>\n\t\tpublic static class SmtpClient\n\t\t{\n\t\t\t/// <summary>\n\t\t\t/// The name of the SmtpClient activity source used for tracing.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the SmtpClient activity source used for tracing.\n\t\t\t/// </remarks>\n\t\t\tpublic const string ActivitySourceName = \"MailKit.Net.SmtpClient\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the SmtpClient activity source used for tracing.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the SmtpClient activity source used for tracing.\n\t\t\t/// </remarks>\n\t\t\tpublic const string ActivitySourceVersion = \"0.1\";\n\n\t\t\tinternal static readonly ActivitySource ActivitySource = new ActivitySource (ActivitySourceName, ActivitySourceVersion);\n\n\t\t\t/// <summary>\n\t\t\t/// The name of the SmtpClient meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the SmtpClient meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterName = \"mailkit.net.smtp\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the SmtpClient meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the SmtpClient meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterVersion = \"0.1\";\n\n\t\t\tstatic Meter? Meter;\n\n\t\t\tinternal static ClientMetrics? Metrics { get; private set; }\n\n\t\t\tinternal static ClientMetrics CreateMetrics (Meter meter)\n\t\t\t{\n\t\t\t\treturn new ClientMetrics (meter, MeterName, \"an\", \"SMTP\");\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Configure SmtpClient telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures SmtpClient telemetry.\n\t\t\t/// </remarks>\n\t\t\tpublic static void Configure ()\n\t\t\t{\n\t\t\t\tMeter ??= new Meter (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= CreateMetrics (Meter);\n\t\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t\t/// <summary>\n\t\t\t/// Configure SmtpClient telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures SmtpClient telemetry.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"meterFactory\">The meter factory.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"meterFactory\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\tpublic static void Configure (IMeterFactory meterFactory)\n\t\t\t{\n\t\t\t\tif (meterFactory is null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (meterFactory));\n\n\t\t\t\tMeter ??= meterFactory.Create (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= CreateMetrics (Meter);\n\t\t\t}\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The Pop3Client-level telemetry information.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The Pop3Client-level telemetry information.\n\t\t/// </remarks>\n\t\tpublic static class Pop3Client\n\t\t{\n\t\t\t/// <summary>\n\t\t\t/// The name of the Pop3Client activity source used for tracing.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the Pop3Client activity source used for tracing.\n\t\t\t/// </remarks>\n\t\t\tpublic const string ActivitySourceName = \"MailKit.Net.Pop3Client\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the Pop3Client activity source used for tracing.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the Pop3Client activity source used for tracing.\n\t\t\t/// </remarks>\n\t\t\tpublic const string ActivitySourceVersion = \"0.1\";\n\n\t\t\tinternal static readonly ActivitySource ActivitySource = new ActivitySource (ActivitySourceName, ActivitySourceVersion);\n\n\t\t\t/// <summary>\n\t\t\t/// The name of the Pop3Client meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the Pop3Client meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterName = \"mailkit.net.pop3\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the Pop3Client meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the Pop3Client meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterVersion = \"0.1\";\n\n\t\t\tstatic Meter? Meter;\n\n\t\t\tinternal static ClientMetrics? Metrics { get; private set; }\n\n\t\t\tinternal static ClientMetrics CreateMetrics (Meter meter)\n\t\t\t{\n\t\t\t\treturn new ClientMetrics (meter, MeterName, \"a\", \"POP3\");\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Configure Pop3Client telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures Pop3Client telemetry.\n\t\t\t/// </remarks>\n\t\t\tpublic static void Configure ()\n\t\t\t{\n\t\t\t\tMeter ??= new Meter (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= CreateMetrics (Meter);\n\t\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t\t/// <summary>\n\t\t\t/// Configure Pop3Client telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures Pop3Client telemetry.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"meterFactory\">The meter factory.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"meterFactory\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\tpublic static void Configure (IMeterFactory meterFactory)\n\t\t\t{\n\t\t\t\tif (meterFactory is null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (meterFactory));\n\n\t\t\t\tMeter ??= meterFactory.Create (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= CreateMetrics (Meter);\n\t\t\t}\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// The ImapClient-level telemetry information.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The ImapClient-level telemetry information.\n\t\t/// </remarks>\n\t\tpublic static class ImapClient\n\t\t{\n\t\t\t/// <summary>\n\t\t\t/// The name of the ImapClient activity source used for tracing.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the ImapClient activity source used for tracing.\n\t\t\t/// </remarks>\n\t\t\tpublic const string ActivitySourceName = \"MailKit.Net.ImapClient\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the ImapClient activity source used for tracing.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the ImapClient activity source used for tracing.\n\t\t\t/// </remarks>\n\t\t\tpublic const string ActivitySourceVersion = \"0.1\";\n\n\t\t\tinternal static readonly ActivitySource ActivitySource = new ActivitySource (ActivitySourceName, ActivitySourceVersion);\n\n\t\t\t/// <summary>\n\t\t\t/// The name of the ImapClient meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The name of the ImapClient meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterName = \"mailkit.net.imap\";\n\n\t\t\t/// <summary>\n\t\t\t/// The version of the ImapClient meter.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// The version of the ImapClient meter.\n\t\t\t/// </remarks>\n\t\t\tpublic const string MeterVersion = \"0.1\";\n\n\t\t\tstatic Meter? Meter;\n\n\t\t\tinternal static ClientMetrics? Metrics { get; private set; }\n\n\t\t\tinternal static ClientMetrics CreateMetrics (Meter meter)\n\t\t\t{\n\t\t\t\treturn new ClientMetrics (meter, MeterName, \"an\", \"IMAP\");\n\t\t\t}\n\n\t\t\t/// <summary>\n\t\t\t/// Configure ImapClient telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures ImapClient telemetry.\n\t\t\t/// </remarks>\n\t\t\tpublic static void Configure ()\n\t\t\t{\n\t\t\t\tMeter ??= new Meter (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= CreateMetrics (Meter);\n\t\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t\t/// <summary>\n\t\t\t/// Configure ImapClient telemetry.\n\t\t\t/// </summary>\n\t\t\t/// <remarks>\n\t\t\t/// Configures ImapClient telemetry.\n\t\t\t/// </remarks>\n\t\t\t/// <param name=\"meterFactory\">The meter factory.</param>\n\t\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t\t/// <paramref name=\"meterFactory\"/> is <see langword=\"null\" />.\n\t\t\t/// </exception>\n\t\t\tpublic static void Configure (IMeterFactory meterFactory)\n\t\t\t{\n\t\t\t\tif (meterFactory is null)\n\t\t\t\t\tthrow new ArgumentNullException (nameof (meterFactory));\n\n\t\t\t\tMeter ??= meterFactory.Create (MeterName, MeterVersion);\n\t\t\t\tMetrics ??= CreateMetrics (Meter);\n\t\t\t}\n#endif\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Configure telemetry in MailKit.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Configures telemetry in MailKit.\n\t\t/// </remarks>\n\t\tpublic static void Configure ()\n\t\t{\n\t\t\tSocket.Configure ();\n\t\t\tSmtpClient.Configure ();\n\t\t\tPop3Client.Configure ();\n\t\t\tImapClient.Configure ();\n\t\t}\n\n#if NET8_0_OR_GREATER\n\t\t/// <summary>\n\t\t/// Configure telemetry in MailKit.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Configures telemetry in MailKit.\n\t\t/// </remarks>\n\t\t/// <param name=\"meterFactory\">The meter factory.</param>\n\t\t/// <exception cref=\"ArgumentNullException\">\n\t\t/// <paramref name=\"meterFactory\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static void Configure (IMeterFactory meterFactory)\n\t\t{\n\t\t\tif (meterFactory is null)\n\t\t\t\tthrow new ArgumentNullException (nameof (meterFactory));\n\n\t\t\tSocket.Configure (meterFactory);\n\t\t\tSmtpClient.Configure (meterFactory);\n\t\t\tPop3Client.Configure (meterFactory);\n\t\t\tImapClient.Configure (meterFactory);\n\t\t}\n#endif\n\t}\n}\n\n#endif // NET6_0_OR_GREATER\n"
  },
  {
    "path": "MailKit/TextEncodings.cs",
    "content": "﻿//\n// TextEncodings.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\n\nnamespace MailKit {\n\tinternal static class TextEncodings\n\t{\n\t\tpublic static readonly Encoding Latin1;\n\t\tpublic static readonly Encoding UTF8;\n\n\t\tstatic TextEncodings ()\n\t\t{\n\t\t\tUTF8 = Encoding.GetEncoding (65001, new EncoderExceptionFallback (), new DecoderExceptionFallback ());\n\n\t\t\ttry {\n\t\t\t\tLatin1 = Encoding.GetEncoding (28591);\n\t\t\t} catch (NotSupportedException) {\n\t\t\t\tLatin1 = Encoding.ASCII;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/ThreadingAlgorithm.cs",
    "content": "﻿//\n// ThreadingAlgorithm.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nnamespace MailKit {\n\t/// <summary>\n\t/// An enumeration of threading algorithms.\n\t/// </summary>\n\t/// <remarks>\n\t/// A threading algorithm is used to group messages and their\n\t/// replies together.\n\t/// </remarks>\n\tpublic enum ThreadingAlgorithm {\n\t\t/// <summary>\n\t\t/// Thread messages based on their Subject headers.\n\t\t/// </summary>\n\t\tOrderedSubject,\n\n\t\t/// <summary>\n\t\t/// Threads messages based on their References, In-Reply-To, and Message-Id headers.\n\t\t/// This algorithm is far better than <see cref=\"OrderedSubject\"/> but is also more\n\t\t/// expensive to calculate.\n\t\t/// </summary>\n\t\tReferences,\n\t}\n}\n"
  },
  {
    "path": "MailKit/UniqueId.cs",
    "content": "﻿//\n// UniqueId.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Globalization;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A unique identifier.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>Represents a unique identifier for messages in a <see cref=\"IMailFolder\"/>.</para>\n\t/// <para>A 32-bit value assigned to each message, which when used with the\n\t/// unique identifier validity value (see below) forms a 64-bit value\n\t/// that MUST NOT refer to any other message in the mailbox or any\n\t/// subsequent mailbox with the same name forever.Unique identifiers\n\t/// are assigned in a strictly ascending fashion in the mailbox; as each\n\t/// message is added to the mailbox it is assigned a higher UID than the\n\t/// message(s) which were added previously. Unlike message sequence\n\t/// numbers, unique identifiers are not necessarily contiguous.</para>\n\t/// <para>The unique identifier of a message MUST NOT change during the\n\t/// session, and SHOULD NOT change between sessions. Any change of\n\t/// unique identifiers between sessions MUST be detectable using the\n\t/// UIDVALIDITY mechanism discussed below. Persistent unique identifiers\n\t/// are required for a client to resynchronize its state from a previous\n\t/// session with the server (e.g., disconnected or offline access\n\t/// clients); this is discussed further in\n\t/// [<a href=\"https://datatracker.ietf.org/doc/html/rfc3501#ref-IMAP-DISC\">IMAP-DISC</a>].</para>\n\t/// <note type=\"note\">For more information about unique identifiers, see\n\t/// <a href=\"https://datatracker.ietf.org/doc/html/rfc3501#section-2.3.1.1\">RFC 3501, section 2.3.1.1</a>.</note>\n\t/// </remarks>\n\tpublic readonly struct UniqueId : IComparable<UniqueId>, IEquatable<UniqueId>\n\t{\n\t\t/// <summary>\n\t\t/// The invalid <see cref=\"UniqueId\"/> value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The invalid <see cref=\"UniqueId\"/> value.\n\t\t/// </remarks>\n\t\tpublic static readonly UniqueId Invalid;\n\n\t\t/// <summary>\n\t\t/// The minimum <see cref=\"UniqueId\"/> value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The minimum <see cref=\"UniqueId\"/> value.\n\t\t/// </remarks>\n\t\tpublic static readonly UniqueId MinValue = new UniqueId (1);\n\n\t\t/// <summary>\n\t\t/// The maximum <see cref=\"UniqueId\"/> value.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The maximum <see cref=\"UniqueId\"/> value.\n\t\t/// </remarks>\n\t\tpublic static readonly UniqueId MaxValue = new UniqueId (uint.MaxValue);\n\n\t\treadonly uint validity;\n\t\treadonly uint id;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueId\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"UniqueId\"/> with the specified validity and value.\n\t\t/// </remarks>\n\t\t/// <param name=\"validity\">The uid validity.</param>\n\t\t/// <param name=\"id\">The unique identifier.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"id\"/> is <c>0</c>.\n\t\t/// </exception>\n\t\tpublic UniqueId (uint validity, uint id)\n\t\t{\n\t\t\tif (id == 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (id));\n\n\t\t\tthis.validity = validity;\n\t\t\tthis.id = id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueId\"/> struct.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"UniqueId\"/> with the specified value.\n\t\t/// </remarks>\n\t\t/// <param name=\"id\">The unique identifier.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"id\"/> is <c>0</c>.\n\t\t/// </exception>\n\t\tpublic UniqueId (uint id)\n\t\t{\n\t\t\tif (id == 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (id));\n\n\t\t\tthis.validity = 0;\n\t\t\tthis.id = id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The identifier.\n\t\t/// </remarks>\n\t\t/// <value>The identifier.</value>\n\t\tpublic uint Id {\n\t\t\tget { return id; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the validity, if non-zero.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the UidValidity of the containing folder.\n\t\t/// </remarks>\n\t\t/// <value>The UidValidity of the containing folder or <c>0</c> if not known.</value>\n\t\tpublic uint Validity {\n\t\t\tget { return validity; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets whether or not the unique identifier is valid.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the unique identifier is valid.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the unique identifier is valid; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsValid {\n\t\t\tget { return Id != 0; }\n\t\t}\n\n\t\t#region IComparable implementation\n\n\t\t/// <summary>\n\t\t/// Compares two <see cref=\"UniqueId\"/> objects.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Compares two <see cref=\"UniqueId\"/> objects.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns>\n\t\t/// A value less than <c>0</c> if this <see cref=\"UniqueId\"/> is less than <paramref name=\"other\"/>,\n\t\t/// a value of <c>0</c> if this <see cref=\"UniqueId\"/> is equal to <paramref name=\"other\"/>, or\n\t\t/// a value greater than <c>0</c> if this <see cref=\"UniqueId\"/> is greater than <paramref name=\"other\"/>.\n\t\t/// </returns>\n\t\t/// <param name=\"other\">The other unique identifier.</param>\n\t\tpublic int CompareTo (UniqueId other)\n\t\t{\n\t\t\treturn Id.CompareTo (other.Id);\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEquatable implementation\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified <see cref=\"MailKit.UniqueId\"/> is equal to the current <see cref=\"MailKit.UniqueId\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether the specified <see cref=\"MailKit.UniqueId\"/> is equal to the current <see cref=\"MailKit.UniqueId\"/>.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"other\">The <see cref=\"MailKit.UniqueId\"/> to compare with the current <see cref=\"MailKit.UniqueId\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"MailKit.UniqueId\"/> is equal to the current\n\t\t/// <see cref=\"MailKit.UniqueId\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic bool Equals (UniqueId other)\n\t\t{\n\t\t\treturn other.Id == Id;\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Determines whether two unique identifiers are equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether two unique identifiers are equal.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"uid1\"/> and <paramref name=\"uid2\"/> are equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid1\">The first unique id to compare.</param>\n\t\t/// <param name=\"uid2\">The second unique id to compare.</param>\n\t\tpublic static bool operator == (UniqueId uid1, UniqueId uid2)\n\t\t{\n\t\t\treturn uid1.Id == uid2.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether one unique identifier is greater than another unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether one unique identifier is greater than another unique identifier.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"uid1\"/> is greater than <paramref name=\"uid2\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid1\">The first unique id to compare.</param>\n\t\t/// <param name=\"uid2\">The second unique id to compare.</param>\n\t\tpublic static bool operator > (UniqueId uid1, UniqueId uid2)\n\t\t{\n\t\t\treturn uid1.Id > uid2.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether one unique identifier is greater than or equal to another unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether one unique identifier is greater than or equal to another unique identifier.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"uid1\"/> is greater than or equal to <paramref name=\"uid2\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid1\">The first unique id to compare.</param>\n\t\t/// <param name=\"uid2\">The second unique id to compare.</param>\n\t\tpublic static bool operator >= (UniqueId uid1, UniqueId uid2)\n\t\t{\n\t\t\treturn uid1.Id >= uid2.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether two unique identifiers are not equal.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether two unique identifiers are not equal.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"uid1\"/> and <paramref name=\"uid2\"/> are not equal; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid1\">The first unique id to compare.</param>\n\t\t/// <param name=\"uid2\">The second unique id to compare.</param>\n\t\tpublic static bool operator != (UniqueId uid1, UniqueId uid2)\n\t\t{\n\t\t\treturn uid1.Id != uid2.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether one unique identifier is less than another unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether one unique identifier is less than another unique identifier.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"uid1\"/> is less than <paramref name=\"uid2\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid1\">The first unique id to compare.</param>\n\t\t/// <param name=\"uid2\">The second unique id to compare.</param>\n\t\tpublic static bool operator < (UniqueId uid1, UniqueId uid2)\n\t\t{\n\t\t\treturn uid1.Id < uid2.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether one unique identifier is less than or equal to another unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether one unique identifier is less than or equal to another unique identifier.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if <paramref name=\"uid1\"/> is less than or equal to <paramref name=\"uid2\"/>; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid1\">The first unique id to compare.</param>\n\t\t/// <param name=\"uid2\">The second unique id to compare.</param>\n\t\tpublic static bool operator <= (UniqueId uid1, UniqueId uid2)\n\t\t{\n\t\t\treturn uid1.Id <= uid2.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.UniqueId\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Determines whether the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.UniqueId\"/>.</para>\n\t\t/// <note type=\"note\">Validity values are not used in the comparison.</note>\n\t\t/// </remarks>\n\t\t/// <param name=\"obj\">The <see cref=\"System.Object\"/> to compare with the current <see cref=\"MailKit.UniqueId\"/>.</param>\n\t\t/// <returns><see langword=\"true\" /> if the specified <see cref=\"System.Object\"/> is equal to the current <see cref=\"MailKit.UniqueId\"/>;\n\t\t/// otherwise, <see langword=\"false\" />.</returns>\n\t\tpublic override bool Equals (object? obj)\n\t\t{\n\t\t\treturn obj is UniqueId uid && uid.Id == Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.UniqueId\"/> object.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Serves as a hash function for a <see cref=\"MailKit.UniqueId\"/> object.\n\t\t/// </remarks>\n\t\t/// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a hash table.</returns>\n\t\tpublic override int GetHashCode ()\n\t\t{\n\t\t\treturn Id.GetHashCode ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.UniqueId\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.UniqueId\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"MailKit.UniqueId\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\treturn Id.ToString (CultureInfo.InvariantCulture);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse a unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse a unique identifier.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier was successfully parsed; otherwise, <c>false.</c>.</returns>\n\t\t/// <param name=\"token\">The token to parse.</param>\n\t\t/// <param name=\"index\">The index to start parsing.</param>\n\t\t/// <param name=\"uid\">The unique identifier.</param>\n\t\tinternal static bool TryParse (string token, ref int index, out uint uid)\n\t\t{\n\t\t\tuint value = 0;\n\n\t\t\twhile (index < token.Length) {\n\t\t\t\tchar c = token[index];\n\t\t\t\tuint v;\n\n\t\t\t\tif (c < '0' || c > '9')\n\t\t\t\t\tbreak;\n\n\t\t\t\tv = (uint) (c - '0');\n\n\t\t\t\tif (value > uint.MaxValue / 10 || (value == uint.MaxValue / 10 && v > uint.MaxValue % 10)) {\n\t\t\t\t\tuid = 0;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvalue = (value * 10) + v;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tuid = value;\n\n\t\t\treturn uid != 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse a unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse a unique identifier.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier was successfully parsed; otherwise, <c>false.</c>.</returns>\n\t\t/// <param name=\"token\">The token to parse.</param>\n\t\t/// <param name=\"validity\">The UIDVALIDITY value.</param>\n\t\t/// <param name=\"uid\">The unique identifier.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string token, uint validity, out UniqueId uid)\n\t\t{\n\t\t\tif (token == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (token));\n\n\t\t\tif (!uint.TryParse (token, NumberStyles.None, CultureInfo.InvariantCulture, out uint id) || id == 0) {\n\t\t\t\tuid = Invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tuid = new UniqueId (validity, id);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse a unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse a unique identifier.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier was successfully parsed; otherwise, <c>false.</c>.</returns>\n\t\t/// <param name=\"token\">The token to parse.</param>\n\t\t/// <param name=\"uid\">The unique identifier.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string token, out UniqueId uid)\n\t\t{\n\t\t\treturn TryParse (token, 0, out uid);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse a unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses a unique identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The unique identifier.</returns>\n\t\t/// <param name=\"token\">A string containing the unique identifier.</param>\n\t\t/// <param name=\"validity\">The UIDVALIDITY.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.FormatException\">\n\t\t/// <paramref name=\"token\"/> is not in the correct format.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OverflowException\">\n\t\t/// The unique identifier is greater than <see cref=\"MaxValue\"/>.\n\t\t/// </exception>\n\t\tpublic static UniqueId Parse (string token, uint validity)\n\t\t{\n\t\t\treturn new UniqueId (validity, uint.Parse (token, NumberStyles.None, CultureInfo.InvariantCulture));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Parse a unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Parses a unique identifier.\n\t\t/// </remarks>\n\t\t/// <returns>The unique identifier.</returns>\n\t\t/// <param name=\"token\">A string containing the unique identifier.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.FormatException\">\n\t\t/// <paramref name=\"token\"/> is not in the correct format.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.OverflowException\">\n\t\t/// The unique identifier is greater than <see cref=\"MaxValue\"/>.\n\t\t/// </exception>\n\t\tpublic static UniqueId Parse (string token)\n\t\t{\n\t\t\treturn new UniqueId (uint.Parse (token, NumberStyles.None, CultureInfo.InvariantCulture));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/UniqueIdMap.cs",
    "content": "﻿//\n// UniqueIdMap.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A mapping of unique identifiers.\n\t/// </summary>\n\t/// <remarks>\n\t/// <para>A <see cref=\"UniqueIdMap\"/> can be used to discover the mapping of one set of unique identifiers\n\t/// to another.</para>\n\t/// <para>For example, when copying or moving messages from one folder to another, it is often desirable\n\t/// to know what the unique identifiers are for each of the messages in the destination folder.</para>\n\t/// </remarks>\n\tpublic class UniqueIdMap : IReadOnlyDictionary<UniqueId, UniqueId>\n\t{\n\t\t/// <summary>\n\t\t/// Any empty mapping of unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Any empty mapping of unique identifiers.\n\t\t/// </remarks>\n\t\tpublic static readonly UniqueIdMap Empty = new UniqueIdMap ();\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueIdMap\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"MailKit.UniqueIdMap\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"source\">The unique identifiers used in the source folder.</param>\n\t\t/// <param name=\"destination\">The unique identifiers used in the destination folder.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"source\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"destination\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic UniqueIdMap (IList<UniqueId> source, IList<UniqueId> destination)\n\t\t{\n\t\t\tif (source == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (source));\n\n\t\t\tif (destination == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (destination));\n\n\t\t\tDestination = destination;\n\t\t\tSource = source;\n\t\t}\n\n\t\tUniqueIdMap ()\n\t\t{\n\t\t\tDestination = Source = Array.Empty<UniqueId> ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of unique identifiers used in the source folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the list of unique identifiers used in the source folder.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifiers used in the source folder.</value>\n\t\tpublic IList<UniqueId> Source {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the list of unique identifiers used in the destination folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the list of unique identifiers used in the destination folder.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifiers used in the destination folder.</value>\n\t\tpublic IList<UniqueId> Destination {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the number of unique identifiers that have been remapped.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of unique identifiers that have been remapped.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget { return Source.Count; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the keys.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the keys.\n\t\t/// </remarks>\n\t\t/// <value>The keys.</value>\n\t\tpublic IEnumerable<UniqueId> Keys {\n\t\t\tget { return Source; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the values.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the values.\n\t\t/// </remarks>\n\t\t/// <value>The values.</value>\n\t\tpublic IEnumerable<UniqueId> Values {\n\t\t\tget { return Destination; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks if the specified unique identifier has been remapped.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Checks if the specified unique identifier has been remapped.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier has been remapped; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"key\">The unique identifier.</param>\n\t\tpublic bool ContainsKey (UniqueId key)\n\t\t{\n\t\t\treturn Source.Contains (key);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Tries to get the remapped unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to get the remapped unique identifier.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> on success; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"key\">The unique identifier of the message in the source folder.</param>\n\t\t/// <param name=\"value\">The unique identifier of the message in the destination folder.</param>\n\t\tpublic bool TryGetValue (UniqueId key, out UniqueId value)\n\t\t{\n\t\t\tint index = Source.IndexOf (key);\n\n\t\t\tif (index == -1 || index >= Destination.Count) {\n\t\t\t\tvalue = UniqueId.Invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvalue = Destination[index];\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the remapped unique identifier.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the remapped unique identifier.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The unique identifier of the message in the source folder.</param>\n\t\t/// <value>The remapped unique identifier.</value>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic UniqueId this [UniqueId index] {\n\t\t\tget {\n\t\t\t\tif (!TryGetValue (index, out var uid))\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\treturn uid;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the enumerator for the remapped unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the enumerator for the remapped unique identifiers.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<KeyValuePair<UniqueId, UniqueId>> GetEnumerator ()\n\t\t{\n\t\t\tvar dst = Destination.GetEnumerator ();\n\t\t\tvar src = Source.GetEnumerator ();\n\n\t\t\twhile (src.MoveNext () && dst.MoveNext ())\n\t\t\t\tyield return new KeyValuePair<UniqueId, UniqueId> (src.Current, dst.Current);\n\n\t\t\tyield break;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the enumerator for the remapped unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the enumerator for the remapped unique identifiers.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn GetEnumerator ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/UniqueIdRange.cs",
    "content": "﻿//\n// UniqueIdRange.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections;\nusing System.Globalization;\nusing System.Collections.Generic;\n\nusing MailKit.Search;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A range of <see cref=\"UniqueId\"/> items.\n\t/// </summary>\n\t/// <remarks>\n\t/// When dealing with a large range, it is more efficient to use a\n\t/// <see cref=\"UniqueIdRange\"/> than a typical\n\t/// IList&lt;<see cref=\"UniqueId\"/>&gt;.\n\t/// </remarks>\n\tpublic class UniqueIdRange : IList<UniqueId>\n\t{\n\t\t/// <summary>\n\t\t/// A <see cref=\"UniqueIdRange\"/> that encompasses all messages in the folder.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Represents the range of messages from <see cref=\"UniqueId.MinValue\"/> to\n\t\t/// <see cref=\"UniqueId.MaxValue\"/>.\n\t\t/// </remarks>\n\t\tpublic static readonly UniqueIdRange All = new UniqueIdRange (UniqueId.MinValue, UniqueId.MaxValue);\n\n\t\tstatic readonly UniqueIdRange Invalid = new UniqueIdRange ();\n\n\t\treadonly uint validity;\n\t\tinternal uint start;\n\t\tinternal uint end;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"T:MailKit.UniqueIdRange\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new (invalid) range of unique identifiers.\n\t\t/// </remarks>\n\t\tUniqueIdRange ()\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueIdRange\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new range of unique identifiers.\n\t\t/// </remarks>\n\t\t/// <param name=\"validity\">The uid validity.</param>\n\t\t/// <param name=\"start\">The first unique identifier in the range.</param>\n\t\t/// <param name=\"end\">The last unique identifier in the range.</param>\n\t\tpublic UniqueIdRange (uint validity, uint start, uint end)\n\t\t{\n\t\t\tif (start == 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (start));\n\n\t\t\tif (end == 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (end));\n\n\t\t\tthis.validity = validity;\n\t\t\tthis.start = start;\n\t\t\tthis.end = end;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueIdRange\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new range of unique identifiers.\n\t\t/// </remarks>\n\t\t/// <param name=\"start\">The first <see cref=\"UniqueId\"/> in the range.</param>\n\t\t/// <param name=\"end\">The last <see cref=\"UniqueId\"/> in the range.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <para><paramref name=\"start\"/> is invalid.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"end\"/> is invalid.</para>\n\t\t/// </exception>\n\t\tpublic UniqueIdRange (UniqueId start, UniqueId end)\n\t\t{\n\t\t\tif (!start.IsValid)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (start));\n\n\t\t\tif (!end.IsValid)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (end));\n\n\t\t\tthis.validity = start.Validity;\n\t\t\tthis.start = start.Id;\n\t\t\tthis.end = end.Id;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the sort order of the unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sort order of the unique identifiers.\n\t\t/// </remarks>\n\t\t/// <value>The sort order.</value>\n\t\tpublic SortOrder SortOrder {\n\t\t\tget { return start <= end ? SortOrder.Ascending : SortOrder.Descending; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the validity, if non-zero.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the UidValidity of the containing folder.\n\t\t/// </remarks>\n\t\t/// <value>The UidValidity of the containing folder.</value>\n\t\tpublic uint Validity {\n\t\t\tget { return validity; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the minimum unique identifier in the range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the minimum unique identifier in the range.\n\t\t/// </remarks>\n\t\t/// <value>The minimum unique identifier.</value>\n\t\tpublic UniqueId Min {\n\t\t\tget { return start < end ? new UniqueId (validity, start) : new UniqueId (validity, end); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the maximum unique identifier in the range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the maximum unique identifier in the range.\n\t\t/// </remarks>\n\t\t/// <value>The maximum unique identifier.</value>\n\t\tpublic UniqueId Max {\n\t\t\tget { return start > end ? new UniqueId (validity, start) : new UniqueId (validity, end); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the start of the unique identifier range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the start of the unique identifier range.\n\t\t/// </remarks>\n\t\t/// <value>The start of the range.</value>\n\t\tpublic UniqueId Start {\n\t\t\tget { return new UniqueId (validity, start); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get the end of the unique identifier range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the end of the unique identifier range.\n\t\t/// </remarks>\n\t\t/// <value>The end of the range.</value>\n\t\tpublic UniqueId End {\n\t\t\tget { return new UniqueId (validity, end); }\n\t\t}\n\n\t\t#region ICollection implementation\n\n\t\t/// <summary>\n\t\t/// Get the number of unique identifiers in the range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of unique identifiers in the range.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget { return (int) Math.Min ((start <= end ? end - start : start - end) + 1, int.MaxValue); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the range is read only.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// A <see cref=\"UniqueIdRange\"/> is always read-only.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the range is read only; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsReadOnly {\n\t\t\tget { return true; }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds the unique identifier to the range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Since a <see cref=\"UniqueIdRange\"/> is read-only, unique ids cannot\n\t\t/// be added to the range.\n\t\t/// </remarks>\n\t\t/// <param name=\"uid\">The unique identifier to add.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support adding items.\n\t\t/// </exception>\n\t\tpublic void Add (UniqueId uid)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears the list.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Since a <see cref=\"UniqueIdRange\"/> is read-only, the range cannot be cleared.\n\t\t/// </remarks>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support being cleared.\n\t\t/// </exception>\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks if the range contains the specified unique id.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not the range contains the specified unique id.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified unique identifier is in the range; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The unique id.</param>\n\t\tpublic bool Contains (UniqueId uid)\n\t\t{\n\t\t\tif (start <= end)\n\t\t\t\treturn uid.Id >= start && uid.Id <= end;\n\n\t\t\treturn uid.Id <= start && uid.Id >= end;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copies all of the unique ids in the range to the specified array.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies all of the unique ids within the range into the array,\n\t\t/// starting at the specified array index.\n\t\t/// </remarks>\n\t\t/// <param name=\"array\">The array to copy the unique ids to.</param>\n\t\t/// <param name=\"arrayIndex\">The index into the array.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"array\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"arrayIndex\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic void CopyTo (UniqueId[] array, int arrayIndex)\n\t\t{\n\t\t\tif (array == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (array));\n\n\t\t\tif (arrayIndex < 0 || arrayIndex > (array.Length - Count))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (arrayIndex));\n\n\t\t\tint index = arrayIndex;\n\n\t\t\tif (start <= end) {\n\t\t\t\tfor (uint uid = start; uid <= end; uid++, index++)\n\t\t\t\t\tarray[index] = new UniqueId (validity, uid);\n\t\t\t} else {\n\t\t\t\tfor (uint uid = start; uid >= end; uid--, index++)\n\t\t\t\t\tarray[index] = new UniqueId (validity, uid);\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the unique identifier from the range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Since a <see cref=\"UniqueIdRange\"/> is read-only, unique ids cannot be removed.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier was removed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The unique identifier to remove.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support removing items.\n\t\t/// </exception>\n\t\tpublic bool Remove (UniqueId uid)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IList implementation\n\n\t\t/// <summary>\n\t\t/// Gets the index of the specified unique id, if it exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Finds the index of the specified unique id, if it exists.\n\t\t/// </remarks>\n\t\t/// <returns>The index of the specified unique id; otherwise <value>-1</value>.</returns>\n\t\t/// <param name=\"uid\">The unique id.</param>\n\t\tpublic int IndexOf (UniqueId uid)\n\t\t{\n\t\t\tif (start <= end) {\n\t\t\t\tif (uid.Id < start || uid.Id > end)\n\t\t\t\t\treturn -1;\n\n\t\t\t\treturn (int) (uid.Id - start);\n\t\t\t}\n\n\t\t\tif (uid.Id > start || uid.Id < end)\n\t\t\t\treturn -1;\n\n\t\t\treturn (int) (start - uid.Id);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Inserts the specified unique identifier at the given index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Inserts the unique identifier at the specified index in the range.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index to insert the unique id.</param>\n\t\t/// <param name=\"uid\">The unique id.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support inserting items.\n\t\t/// </exception>\n\t\tpublic void Insert (int index, UniqueId uid)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the unique identifier at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the unique identifier at the specified index.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support removing items.\n\t\t/// </exception>\n\t\tpublic void RemoveAt (int index)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the unique identifier at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the unique identifier at the specified index.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifier at the specified index.</value>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support setting items.\n\t\t/// </exception>\n\t\tpublic UniqueId this [int index] {\n\t\t\tget {\n\t\t\t\tif (index < 0 || index >= Count)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\tuint uid = start <= end ? start + (uint) index : start - (uint) index;\n\n\t\t\t\treturn new UniqueId (validity, uid);\n\t\t\t}\n\t\t\tset {\n\t\t\t\tthrow new NotSupportedException ();\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Gets an enumerator for the range of unique ids.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the range of unique ids.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<UniqueId> GetEnumerator ()\n\t\t{\n\t\t\tif (start <= end) {\n\t\t\t\tfor (uint uid = start; uid <= end; uid++)\n\t\t\t\t\tyield return new UniqueId (validity, uid);\n\t\t\t} else {\n\t\t\t\tfor (uint uid = start; uid >= end; uid--)\n\t\t\t\t\tyield return new UniqueId (validity, uid);\n\t\t\t}\n\n\t\t\tyield break;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Gets an enumerator for the range of unique ids.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the range of unique ids.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"UniqueIdRange\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"UniqueIdRange\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"UniqueIdRange\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tif (end == uint.MaxValue)\n\t\t\t\treturn string.Format (CultureInfo.InvariantCulture, \"{0}:*\", start);\n\n\t\t\treturn string.Format (CultureInfo.InvariantCulture, \"{0}:{1}\", start, end);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse a unique identifier range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse a unique identifier range.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier range was successfully parsed; otherwise, <c>false.</c>.</returns>\n\t\t/// <param name=\"token\">The token to parse.</param>\n\t\t/// <param name=\"validity\">The UIDVALIDITY value.</param>\n\t\t/// <param name=\"range\">The unique identifier range.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string token, uint validity, out UniqueIdRange range)\n\t\t{\n\t\t\tif (token == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (token));\n\n\t\t\tuint start, end;\n\t\t\tint index = 0;\n\n\t\t\tif (!UniqueId.TryParse (token, ref index, out start) || index + 2 > token.Length || token[index++] != ':') {\n\t\t\t\trange = Invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (token[index] != '*') {\n\t\t\t\tif (!UniqueId.TryParse (token, ref index, out end) || index < token.Length) {\n\t\t\t\t\trange = Invalid;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (index + 1 != token.Length) {\n\t\t\t\trange = Invalid;\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tend = uint.MaxValue;\n\t\t\t}\n\n\t\t\trange = new UniqueIdRange (validity, start, end);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse a unique identifier range.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse a unique identifier range.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier range was successfully parsed; otherwise, <c>false.</c>.</returns>\n\t\t/// <param name=\"token\">The token to parse.</param>\n\t\t/// <param name=\"range\">The unique identifier range.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string token, out UniqueIdRange range)\n\t\t{\n\t\t\treturn TryParse (token, 0, out range);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/UniqueIdSet.cs",
    "content": "﻿//\n// UniqueIdSet.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Text;\nusing System.Collections;\nusing System.Globalization;\nusing System.Collections.Generic;\n\nusing MailKit.Search;\n\nnamespace MailKit {\n\t/// <summary>\n\t/// A set of unique identifiers.\n\t/// </summary>\n\t/// <remarks>\n\t/// When dealing with a large number of unique identifiers, it may be more efficient to use a\n\t/// <see cref=\"UniqueIdSet\"/> than a typical IList&lt;<see cref=\"UniqueId\"/>&gt;.\n\t/// </remarks>\n\tpublic class UniqueIdSet : IList<UniqueId>\n\t{\n\t\tstruct Range\n\t\t{\n\t\t\tpublic uint Start;\n\t\t\tpublic uint End;\n\n\t\t\tpublic Range (uint start, uint end)\n\t\t\t{\n\t\t\t\tStart = start;\n\t\t\t\tEnd = end;\n\t\t\t}\n\n\t\t\tpublic int Count {\n\t\t\t\tget { return (int) (Start <= End ? End - Start : Start - End) + 1; }\n\t\t\t}\n\n\t\t\tpublic bool Contains (uint uid)\n\t\t\t{\n\t\t\t\tif (Start <= End)\n\t\t\t\t\treturn uid >= Start && uid <= End;\n\n\t\t\t\treturn uid <= Start && uid >= End;\n\t\t\t}\n\n\t\t\tpublic int IndexOf (uint uid)\n\t\t\t{\n\t\t\t\tif (Start <= End) {\n\t\t\t\t\tif (uid < Start || uid > End)\n\t\t\t\t\t\treturn -1;\n\n\t\t\t\t\treturn (int) (uid - Start);\n\t\t\t\t}\n\n\t\t\t\tif (uid > Start || uid < End)\n\t\t\t\t\treturn -1;\n\n\t\t\t\treturn (int) (Start - uid);\n\t\t\t}\n\n\t\t\tpublic uint this [int index] {\n\t\t\t\tget {\n\t\t\t\t\treturn Start <= End ? Start + (uint) index : Start - (uint) index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic IEnumerator<uint> GetEnumerator ()\n\t\t\t{\n\t\t\t\tif (Start <= End) {\n\t\t\t\t\tfor (uint uid = Start; uid <= End; uid++)\n\t\t\t\t\t\tyield return uid;\n\t\t\t\t} else {\n\t\t\t\t\tfor (uint uid = Start; uid >= End; uid--)\n\t\t\t\t\t\tyield return uid;\n\t\t\t\t}\n\n\t\t\t\tyield break;\n\t\t\t}\n\n\t\t\tpublic override string ToString ()\n\t\t\t{\n\t\t\t\tif (Start == End)\n\t\t\t\t\treturn Start.ToString (CultureInfo.InvariantCulture);\n\n\t\t\t\tif (Start <= End && End == uint.MaxValue)\n\t\t\t\t\treturn string.Format (CultureInfo.InvariantCulture, \"{0}:*\", Start);\n\n\t\t\t\treturn string.Format (CultureInfo.InvariantCulture, \"{0}:{1}\", Start, End);\n\t\t\t}\n\t\t}\n\n\t\treadonly List<Range> ranges = new List<Range> ();\n\t\tlong count;\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueIdSet\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new unique identifier set.\n\t\t/// </remarks>\n\t\t/// <param name=\"validity\">The uid validity.</param>\n\t\t/// <param name=\"order\">The sorting order to use for the unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"order\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic UniqueIdSet (uint validity, SortOrder order = SortOrder.None)\n\t\t{\n\t\t\tswitch (order) {\n\t\t\tcase SortOrder.Descending:\n\t\t\tcase SortOrder.Ascending:\n\t\t\tcase SortOrder.None:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (order));\n\t\t\t}\n\n\t\t\tValidity = validity;\n\t\t\tSortOrder = order;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueIdSet\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new unique identifier set.\n\t\t/// </remarks>\n\t\t/// <param name=\"order\">The sorting order to use for the unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"order\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic UniqueIdSet (SortOrder order = SortOrder.None) : this (0, order)\n\t\t{\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.UniqueIdSet\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new set of unique identifier set containing the specified uids.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">An initial set of unique ids.</param>\n\t\t/// <param name=\"order\">The sorting order to use for the unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"order\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic UniqueIdSet (IEnumerable<UniqueId> uids, SortOrder order = SortOrder.None) : this (order)\n\t\t{\n\t\t\tforeach (var uid in uids)\n\t\t\t\tAdd (uid);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the sort order of the unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the sort order of the unique identifiers.\n\t\t/// </remarks>\n\t\t/// <value>The sort order.</value>\n\t\tpublic SortOrder SortOrder {\n\t\t\tget; private set;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the validity, if non-zero.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the UidValidity of the containing folder.\n\t\t/// </remarks>\n\t\t/// <value>The UidValidity of the containing folder.</value>\n\t\tpublic uint Validity {\n\t\t\tget; private set;\n\t\t}\n\n\t\t#region ICollection implementation\n\n\t\t/// <summary>\n\t\t/// Get the number of unique ids in the set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets the number of unique ids in the set.\n\t\t/// </remarks>\n\t\t/// <value>The count.</value>\n\t\tpublic int Count {\n\t\t\tget { return (int) Math.Min (count, int.MaxValue); }\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Get whether or not the set is read only.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets whether or not the set is read-only.\n\t\t/// </remarks>\n\t\t/// <value><see langword=\"true\" /> if the set is read only; otherwise, <see langword=\"false\" />.</value>\n\t\tpublic bool IsReadOnly {\n\t\t\tget { return false; }\n\t\t}\n\n\t\tint BinarySearch (uint uid)\n\t\t{\n\t\t\tint min = 0, max = ranges.Count;\n\n\t\t\tif (max == 0)\n\t\t\t\treturn -1;\n\n\t\t\tdo {\n\t\t\t\tint i = min + ((max - min) / 2);\n\n\t\t\t\tif (SortOrder == SortOrder.Ascending) {\n\t\t\t\t\t// sorted ascending: 1:3,5:7,9\n\t\t\t\t\tif (uid >= ranges[i].Start) {\n\t\t\t\t\t\tif (uid <= ranges[i].End)\n\t\t\t\t\t\t\treturn i;\n\n\t\t\t\t\t\tmin = i + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmax = i;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// sorted descending: 9,7:5,3:1\n\t\t\t\t\tif (uid >= ranges[i].End) {\n\t\t\t\t\t\tif (uid <= ranges[i].Start)\n\t\t\t\t\t\t\treturn i;\n\n\t\t\t\t\t\tmax = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmin = i + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (min < max);\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tint IndexOfRange (uint uid)\n\t\t{\n\t\t\tif (SortOrder != SortOrder.None)\n\t\t\t\treturn BinarySearch (uid);\n\n\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\tif (ranges[i].Contains (uid))\n\t\t\t\t\treturn i;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tvoid BinaryInsertAscending (uint uid)\n\t\t{\n\t\t\tint min = 0, max = ranges.Count;\n\t\t\tint i;\n\n\t\t\tdo {\n\t\t\t\ti = min + ((max - min) / 2);\n\n\t\t\t\tif (uid >= ranges[i].Start) {\n\t\t\t\t\tif (uid <= ranges[i].End)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (uid == ranges[i].End + 1) {\n\t\t\t\t\t\tif (i + 1 < ranges.Count && uid + 1 >= ranges[i + 1].Start) {\n\t\t\t\t\t\t\t// merge the 2 ranges together\n\t\t\t\t\t\t\tranges[i] = new Range (ranges[i].Start, ranges[i + 1].End);\n\t\t\t\t\t\t\tranges.RemoveAt (i + 1);\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tranges[i] = new Range (ranges[i].Start, uid);\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tmin = i + 1;\n\t\t\t\t\ti = min;\n\t\t\t\t} else {\n\t\t\t\t\tif (uid == ranges[i].Start - 1) {\n\t\t\t\t\t\tif (i > 0 && uid - 1 <= ranges[i - 1].End) {\n\t\t\t\t\t\t\t// merge the 2 ranges together\n\t\t\t\t\t\t\tranges[i - 1] = new Range (ranges[i - 1].Start, ranges[i].End);\n\t\t\t\t\t\t\tranges.RemoveAt (i);\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tranges[i] = new Range (uid, ranges[i].End);\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tmax = i;\n\t\t\t\t}\n\t\t\t} while (min < max);\n\n\t\t\tvar range = new Range (uid, uid);\n\n\t\t\tif (i < ranges.Count)\n\t\t\t\tranges.Insert (i, range);\n\t\t\telse\n\t\t\t\tranges.Add (range);\n\n\t\t\tcount++;\n\t\t}\n\n\t\tvoid BinaryInsertDescending (uint uid)\n\t\t{\n\t\t\tint min = 0, max = ranges.Count;\n\t\t\tint i;\n\n\t\t\tdo {\n\t\t\t\ti = min + ((max - min) / 2);\n\n\t\t\t\tif (uid <= ranges[i].Start) {\n\t\t\t\t\tif (uid >= ranges[i].End)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (uid == ranges[i].End - 1) {\n\t\t\t\t\t\tif (i + 1 < ranges.Count && uid - 1 <= ranges[i + 1].Start) {\n\t\t\t\t\t\t\t// merge the 2 ranges together\n\t\t\t\t\t\t\tranges[i] = new Range (ranges[i].Start, ranges[i + 1].End);\n\t\t\t\t\t\t\tranges.RemoveAt (i + 1);\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tranges[i] = new Range (ranges[i].Start, uid);\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tmin = i + 1;\n\t\t\t\t\ti = min;\n\t\t\t\t} else {\n\t\t\t\t\tif (uid == ranges[i].Start + 1) {\n\t\t\t\t\t\tif (i > 0 && uid + 1 >= ranges[i - 1].End) {\n\t\t\t\t\t\t\t// merge the 2 ranges together\n\t\t\t\t\t\t\tranges[i - 1] = new Range (ranges[i - 1].Start, ranges[i].End);\n\t\t\t\t\t\t\tranges.RemoveAt (i);\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tranges[i] = new Range (uid, ranges[i].End);\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tmax = i;\n\t\t\t\t}\n\t\t\t} while (min < max);\n\n\t\t\tvar range = new Range (uid, uid);\n\n\t\t\tif (i < ranges.Count)\n\t\t\t\tranges.Insert (i, range);\n\t\t\telse\n\t\t\t\tranges.Add (range);\n\n\t\t\tcount++;\n\t\t}\n\n\t\tvoid Append (uint uid)\n\t\t{\n\t\t\tif (IndexOfRange (uid) != -1)\n\t\t\t\treturn;\n\n\t\t\tcount++;\n\n\t\t\tif (ranges.Count > 0) {\n\t\t\t\tint index = ranges.Count - 1;\n\t\t\t\tvar range = ranges[index];\n\n\t\t\t\tif (range.Start == range.End) {\n\t\t\t\t\tif (uid == range.End + 1 || uid == range.End - 1) {\n\t\t\t\t\t\tranges[index] = new Range (range.Start, uid);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else if (range.Start < range.End) {\n\t\t\t\t\tif (uid == range.End + 1) {\n\t\t\t\t\t\tranges[index] = new Range (range.Start, uid);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else if (range.Start > range.End) {\n\t\t\t\t\tif (uid == range.End - 1) {\n\t\t\t\t\t\tranges[index] = new Range (range.Start, uid);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tranges.Add (new Range (uid, uid));\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds the unique identifier to the set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds the unique identifier to the set.\n\t\t/// </remarks>\n\t\t/// <param name=\"uid\">The unique identifier to add.</param>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// <paramref name=\"uid\"/> is invalid.\n\t\t/// </exception>\n\t\tpublic void Add (UniqueId uid)\n\t\t{\n\t\t\tif (!uid.IsValid)\n\t\t\t\tthrow new ArgumentException (\"Invalid unique identifier.\", nameof (uid));\n\n\t\t\tif (ranges.Count == 0) {\n\t\t\t\tranges.Add (new Range (uid.Id, uid.Id));\n\t\t\t\tcount++;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tswitch (SortOrder) {\n\t\t\tcase SortOrder.Descending:\n\t\t\t\tBinaryInsertDescending (uid.Id);\n\t\t\t\tbreak;\n\t\t\tcase SortOrder.Ascending:\n\t\t\t\tBinaryInsertAscending (uid.Id);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tAppend (uid.Id);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Adds all of the uids to the set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Adds all of the uids to the set.\n\t\t/// </remarks>\n\t\t/// <param name=\"uids\">The collection of uids.</param>\n\t\tpublic void AddRange (IEnumerable<UniqueId> uids)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tforeach (var uid in uids)\n\t\t\t\tAdd (uid);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Clears the list.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Clears the list.\n\t\t/// </remarks>\n\t\t/// <exception cref=\"System.InvalidOperationException\">\n\t\t/// The collection is readonly.\n\t\t/// </exception>\n\t\tpublic void Clear ()\n\t\t{\n\t\t\tranges.Clear ();\n\t\t\tcount = 0;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Checks if the set contains the specified unique id.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Determines whether or not the set contains the specified unique id.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the specified unique identifier is in the set; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The unique id.</param>\n\t\tpublic bool Contains (UniqueId uid)\n\t\t{\n\t\t\treturn IndexOfRange (uid.Id) != -1;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Copies all of the unique ids in the set to the specified array.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Copies all of the unique ids within the set into the array,\n\t\t/// starting at the specified array index.\n\t\t/// </remarks>\n\t\t/// <param name=\"array\">The array to copy the unique ids to.</param>\n\t\t/// <param name=\"arrayIndex\">The index into the array.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"array\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"arrayIndex\"/> is out of set.\n\t\t/// </exception>\n\t\tpublic void CopyTo (UniqueId[] array, int arrayIndex)\n\t\t{\n\t\t\tif (array == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (array));\n\n\t\t\tif (arrayIndex < 0 || arrayIndex > (array.Length - Count))\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (arrayIndex));\n\n\t\t\tint index = arrayIndex;\n\n\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\tforeach (var uid in ranges[i])\n\t\t\t\t\tarray[index++] = new UniqueId (Validity, uid);\n\t\t\t}\n\t\t}\n\n\t\tvoid Remove (int index, uint uid)\n\t\t{\n\t\t\tvar range = ranges[index];\n\n\t\t\tif (uid == range.Start) {\n\t\t\t\t// remove the first item in the range\n\t\t\t\tif (range.Start != range.End) {\n\t\t\t\t\tif (range.Start <= range.End)\n\t\t\t\t\t\tranges[index] = new Range (uid + 1, range.End);\n\t\t\t\t\telse\n\t\t\t\t\t\tranges[index] = new Range (uid - 1, range.End);\n\t\t\t\t} else {\n\t\t\t\t\tranges.RemoveAt (index);\n\t\t\t\t}\n\t\t\t} else if (uid == range.End) {\n\t\t\t\t// remove the last item in the range\n\t\t\t\tif (range.Start <= range.End)\n\t\t\t\t\tranges[index] = new Range (range.Start, uid - 1);\n\t\t\t\telse\n\t\t\t\t\tranges[index] = new Range (range.Start, uid + 1);\n\t\t\t} else {\n\t\t\t\t// remove a uid from the middle of the range\n\t\t\t\tif (range.Start < range.End) {\n\t\t\t\t\tranges.Insert (index, new Range (range.Start, uid - 1));\n\t\t\t\t\tranges[index + 1] = new Range (uid + 1, range.End);\n\t\t\t\t} else {\n\t\t\t\t\tranges.Insert (index, new Range (range.Start, uid + 1));\n\t\t\t\t\tranges[index + 1] = new Range (uid - 1, range.End);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcount--;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the unique identifier from the set.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the unique identifier from the set.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the unique identifier was removed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"uid\">The unique identifier to remove.</param>\n\t\tpublic bool Remove (UniqueId uid)\n\t\t{\n\t\t\tint index = IndexOfRange (uid.Id);\n\n\t\t\tif (index == -1)\n\t\t\t\treturn false;\n\n\t\t\tRemove (index, uid.Id);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IList implementation\n\n\t\t/// <summary>\n\t\t/// Gets the index of the specified unique id, if it exists.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Finds the index of the specified unique id, if it exists.\n\t\t/// </remarks>\n\t\t/// <returns>The index of the specified unique id; otherwise <value>-1</value>.</returns>\n\t\t/// <param name=\"uid\">The unique id.</param>\n\t\tpublic int IndexOf (UniqueId uid)\n\t\t{\n\t\t\tint index = 0;\n\n\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\tif (ranges[i].Contains (uid.Id))\n\t\t\t\t\treturn index + ranges[i].IndexOf (uid.Id);\n\n\t\t\t\tindex += ranges[i].Count;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Inserts the specified unique identifier at the given index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Inserts the unique identifier at the specified index in the set.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index to insert the unique id.</param>\n\t\t/// <param name=\"uid\">The unique id.</param>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support inserting items.\n\t\t/// </exception>\n\t\tpublic void Insert (int index, UniqueId uid)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Removes the unique identifier at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Removes the unique identifier at the specified index.\n\t\t/// </remarks>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\tpublic void RemoveAt (int index)\n\t\t{\n\t\t\tif (index < 0 || index >= count)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\tint offset = 0;\n\n\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\tif (index >= offset + ranges[i].Count) {\n\t\t\t\t\toffset += ranges[i].Count;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar uid = ranges[i][index - offset];\n\t\t\t\tRemove (i, uid);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets or sets the unique identifier at the specified index.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets or sets the unique identifier at the specified index.\n\t\t/// </remarks>\n\t\t/// <value>The unique identifier at the specified index.</value>\n\t\t/// <param name=\"index\">The index.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"index\"/> is out of range.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.NotSupportedException\">\n\t\t/// The list does not support setting items.\n\t\t/// </exception>\n\t\tpublic UniqueId this [int index] {\n\t\t\tget {\n\t\t\t\tif (index < 0 || index >= count)\n\t\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\n\t\t\t\tint offset = 0;\n\n\t\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\t\tif (index >= offset + ranges[i].Count) {\n\t\t\t\t\t\toffset += ranges[i].Count;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tuint uid = ranges[i][index - offset];\n\n\t\t\t\t\treturn new UniqueId (Validity, uid);\n\t\t\t\t}\n\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (index));\n\t\t\t}\n\t\t\tset {\n\t\t\t\tthrow new NotSupportedException ();\n\t\t\t}\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Gets an enumerator for the set of unique ids.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the set of unique ids.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tpublic IEnumerator<UniqueId> GetEnumerator ()\n\t\t{\n\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\tforeach (var uid in ranges[i])\n\t\t\t\t\tyield return new UniqueId (Validity, uid);\n\t\t\t}\n\n\t\t\tyield break;\n\t\t}\n\n\t\t#endregion\n\n\t\t#region IEnumerable implementation\n\n\t\t/// <summary>\n\t\t/// Gets an enumerator for the set of unique ids.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Gets an enumerator for the set of unique ids.\n\t\t/// </remarks>\n\t\t/// <returns>The enumerator.</returns>\n\t\tIEnumerator IEnumerable.GetEnumerator ()\n\t\t{\n\t\t\treturn GetEnumerator ();\n\t\t}\n\n\t\t#endregion\n\n\t\t/// <summary>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"UniqueIdSet\"/>.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Returns a <see cref=\"System.String\"/> that represents the current <see cref=\"UniqueIdSet\"/>.\n\t\t/// </remarks>\n\t\t/// <returns>A <see cref=\"System.String\"/> that represents the current <see cref=\"UniqueIdSet\"/>.</returns>\n\t\tpublic override string ToString ()\n\t\t{\n\t\t\tforeach (var subset in EnumerateSerializedSubsets (int.MaxValue))\n\t\t\t\treturn subset;\n\n\t\t\treturn string.Empty;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Format a generic list of unique identifiers as a string.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Formats a generic list of unique identifiers as a string.\n\t\t/// </remarks>\n\t\t/// <returns>The string representation of the collection of unique identifiers.</returns>\n\t\t/// <param name=\"uids\">The unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the unique identifiers is invalid (has a value of <c>0</c>).\n\t\t/// </exception>\n\t\tpublic static string ToString (IList<UniqueId> uids)\n\t\t{\n\t\t\tforeach (var subset in EnumerateSerializedSubsets (uids, int.MaxValue))\n\t\t\t\treturn subset;\n\n\t\t\treturn string.Empty;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Format the set of unique identifiers as multiple strings that fit within the maximum defined character length.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Formats the set of unique identifiers as multiple strings that fit within the maximum defined character length.\n\t\t/// </remarks>\n\t\t/// <returns>A list of strings representing the collection of unique identifiers.</returns>\n\t\t/// <param name=\"maxLength\">The maximum length of any returned string of UIDs.</param>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"maxLength\"/> is negative.\n\t\t/// </exception>\n\t\tIEnumerable<string> EnumerateSerializedSubsets (int maxLength)\n\t\t{\n\t\t\tif (maxLength < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (maxLength));\n\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tfor (int i = 0; i < ranges.Count; i++) {\n\t\t\t\tvar range = ranges[i].ToString ();\n\n\t\t\t\tif (builder.Length > 0) {\n\t\t\t\t\tif (builder.Length + 1 + range.Length > maxLength) {\n\t\t\t\t\t\tyield return builder.ToString ();\n\t\t\t\t\t\tbuilder.Clear ();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuilder.Append (',');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbuilder.Append (range);\n\t\t\t}\n\n\t\t\tyield return builder.ToString ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Format a generic list of unique identifiers as multiple strings that fit within the maximum defined character length.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Formats a generic list of unique identifiers as multiple strings that fit within the maximum defined character length.\n\t\t/// </remarks>\n\t\t/// <returns>A list of strings representing the collection of unique identifiers.</returns>\n\t\t/// <param name=\"uids\">The unique identifiers.</param>\n\t\t/// <param name=\"maxLength\">The maximum length of any returned string of UIDs.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"uids\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentException\">\n\t\t/// One or more of the unique identifiers is invalid (has a value of <c>0</c>).\n\t\t/// </exception>\n\t\t/// <exception cref=\"System.ArgumentOutOfRangeException\">\n\t\t/// <paramref name=\"maxLength\"/> is negative.\n\t\t/// </exception>\n\t\tinternal static IEnumerable<string> EnumerateSerializedSubsets (IList<UniqueId> uids, int maxLength)\n\t\t{\n\t\t\tif (uids == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uids));\n\n\t\t\tif (maxLength < 0)\n\t\t\t\tthrow new ArgumentOutOfRangeException (nameof (maxLength));\n\n\t\t\tif (uids.Count == 0) {\n\t\t\t\tyield return string.Empty;\n\t\t\t\tyield break;\n\t\t\t}\n\n\t\t\tif (uids is UniqueIdRange range) {\n\t\t\t\tyield return range.ToString ();\n\t\t\t\tyield break;\n\t\t\t}\n\n\t\t\tif (uids is UniqueIdSet set) {\n\t\t\t\tforeach (var subset in set.EnumerateSerializedSubsets (maxLength))\n\t\t\t\t\tyield return subset;\n\t\t\t\tyield break;\n\t\t\t}\n\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tint index = 0;\n\n\t\t\twhile (index < uids.Count) {\n\t\t\t\tif (!uids[index].IsValid)\n\t\t\t\t\tthrow new ArgumentException (\"One or more of the uids is invalid.\", nameof (uids));\n\n\t\t\t\tuint start = uids[index].Id;\n\t\t\t\tuint end = uids[index].Id;\n\t\t\t\tint i = index + 1;\n\n\t\t\t\tif (i < uids.Count) {\n\t\t\t\t\tif (uids[i].Id == end + 1) {\n\t\t\t\t\t\tend = uids[i++].Id;\n\n\t\t\t\t\t\twhile (i < uids.Count && uids[i].Id == end + 1) {\n\t\t\t\t\t\t\tend++;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (uids[i].Id == end - 1) {\n\t\t\t\t\t\tend = uids[i++].Id;\n\n\t\t\t\t\t\twhile (i < uids.Count && uids[i].Id == end - 1) {\n\t\t\t\t\t\t\tend--;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstring next;\n\t\t\t\tif (start != end)\n\t\t\t\t\tnext = string.Format (CultureInfo.InvariantCulture, \"{0}:{1}\", start, end);\n\t\t\t\telse\n\t\t\t\t\tnext = start.ToString ();\n\n\t\t\t\tif (builder.Length > 0) {\n\t\t\t\t\tif (builder.Length + 1 + next.Length > maxLength) {\n\t\t\t\t\t\tyield return builder.ToString ();\n\t\t\t\t\t\tbuilder.Clear ();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuilder.Append (',');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbuilder.Append (next);\n\t\t\t\tindex = i;\n\t\t\t}\n\n\t\t\tyield return builder.ToString ();\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse the specified token as a set of unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse the specified token as a set of unique identifiers.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the set of unique identifiers were successfully parsed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"token\">The token containing the set of unique identifiers.</param>\n\t\t/// <param name=\"validity\">The UIDVALIDITY value.</param>\n\t\t/// <param name=\"uids\">The set of unique identifiers.</param>\n\t\t/// <param name=\"minValue\">The minimum unique identifier value parsed.</param>\n\t\t/// <param name=\"maxValue\">The maximum unique identifier value parsed.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tinternal static bool TryParse (string token, uint validity, out UniqueIdSet uids, out UniqueId? minValue, out UniqueId? maxValue)\n\t\t{\n\t\t\tif (token == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (token));\n\n\t\t\tuids = new UniqueIdSet (validity);\n\t\t\tminValue = maxValue = null;\n\n\t\t\tvar order = SortOrder.None;\n\t\t\tuint min = uint.MaxValue;\n\t\t\tuint max = 0;\n\t\t\tbool sorted = true;\n\t\t\tuint prev = 0;\n\t\t\tint index = 0;\n\n\t\t\tdo {\n\t\t\t\tif (!UniqueId.TryParse (token, ref index, out uint start))\n\t\t\t\t\treturn false;\n\n\t\t\t\tmin = Math.Min (min, start);\n\t\t\t\tmax = Math.Max (max, start);\n\n\t\t\t\tif (index < token.Length && token[index] == ':') {\n\t\t\t\t\tindex++;\n\n\t\t\t\t\tif (!UniqueId.TryParse (token, ref index, out uint end))\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tmin = Math.Min (min, end);\n\t\t\t\t\tmax = Math.Max (max, end);\n\n\t\t\t\t\tvar range = new Range (start, end);\n\t\t\t\t\tuids.count += range.Count;\n\t\t\t\t\tuids.ranges.Add (range);\n\n\t\t\t\t\tif (sorted) {\n\t\t\t\t\t\tswitch (order) {\n\t\t\t\t\t\tdefault: order = start <= end ? SortOrder.Ascending : SortOrder.Descending; break;\n\t\t\t\t\t\tcase SortOrder.Descending: sorted = start >= end && start <= prev; break;\n\t\t\t\t\t\tcase SortOrder.Ascending: sorted = start <= end && start >= prev; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tprev = end;\n\t\t\t\t} else {\n\t\t\t\t\tuids.ranges.Add (new Range (start, start));\n\t\t\t\t\tuids.count++;\n\n\t\t\t\t\tif (sorted && uids.ranges.Count > 1) {\n\t\t\t\t\t\tswitch (order) {\n\t\t\t\t\t\tdefault: order = start >= prev ? SortOrder.Ascending : SortOrder.Descending; break;\n\t\t\t\t\t\tcase SortOrder.Descending: sorted = start <= prev; break;\n\t\t\t\t\t\tcase SortOrder.Ascending: sorted = start >= prev; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tprev = start;\n\t\t\t\t}\n\n\t\t\t\tif (index >= token.Length)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (token[index++] != ',')\n\t\t\t\t\treturn false;\n\t\t\t} while (true);\n\n\t\t\tuids.SortOrder = sorted ? order : SortOrder.None;\n\n\t\t\tif (min <= max) {\n\t\t\t\tminValue = new UniqueId (validity, min);\n\t\t\t\tmaxValue = new UniqueId (validity, max);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse the specified token as a set of unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse the specified token as a set of unique identifiers.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the set of unique identifiers were successfully parsed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"token\">The token containing the set of unique identifiers.</param>\n\t\t/// <param name=\"validity\">The UIDVALIDITY value.</param>\n\t\t/// <param name=\"uids\">The set of unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string token, uint validity, out UniqueIdSet uids)\n\t\t{\n\t\t\treturn TryParse (token, validity, out uids, out _, out _);\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Attempt to parse the specified token as a set of unique identifiers.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Attempts to parse the specified token as a set of unique identifiers.\n\t\t/// </remarks>\n\t\t/// <returns><see langword=\"true\" /> if the set of unique identifiers were successfully parsed; otherwise, <see langword=\"false\" />.</returns>\n\t\t/// <param name=\"token\">The token containing the set of unique identifiers.</param>\n\t\t/// <param name=\"uids\">The set of unique identifiers.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <paramref name=\"token\"/> is <see langword=\"null\" />.\n\t\t/// </exception>\n\t\tpublic static bool TryParse (string token, out UniqueIdSet uids)\n\t\t{\n\t\t\treturn TryParse (token, 0, out uids, out _, out _);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/UriExtensions.cs",
    "content": "﻿//\n// UriExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace MailKit {\n\tstatic class UriExtensions\n\t{\n\t\tpublic static IDictionary<string, string> ParsedQuery (this Uri uri)\n\t\t{\n\t\t\tvar properties = new Dictionary<string, string> (StringComparer.OrdinalIgnoreCase);\n\t\t\tint index = 1;\n\n\t\t\tif (string.IsNullOrEmpty (uri.Query))\n\t\t\t\treturn properties;\n\n\t\t\t// Note: the query string begins with '?'\n\t\t\twhile (index < uri.Query.Length) {\n\t\t\t\tint startIndex = index;\n\n\t\t\t\twhile (index < uri.Query.Length && uri.Query[index] != '=')\n\t\t\t\t\tindex++;\n\n\t\t\t\tvar name = uri.Query.Substring (startIndex, index - startIndex);\n\n\t\t\t\tif (index >= uri.Query.Length) {\n\t\t\t\t\tproperties.Add (name, string.Empty);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tstartIndex = ++index;\n\n\t\t\t\twhile (index < uri.Query.Length && uri.Query[index] != '&')\n\t\t\t\t\tindex++;\n\n\t\t\t\tvar value = uri.Query.Substring (startIndex, index - startIndex);\n\n\t\t\t\tproperties.Add (name, Uri.UnescapeDataString (value));\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn properties;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit/WebAlertEventArgs.cs",
    "content": "﻿//\n// WebAlertEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nnamespace MailKit\n{\n\t/// <summary>\n\t/// Alert event arguments.\n\t/// </summary>\n\t/// <remarks>\n\t/// Some <see cref=\"IMailStore\"/> implementations, such as\n\t/// <see cref=\"MailKit.Net.Imap.ImapClient\"/>, will emit WebAlert\n\t/// events when they receive web alert messages from the server.\n\t/// </remarks>\n\tpublic class WebAlertEventArgs : AlertEventArgs\n\t{\n\t\t/// <summary>\n\t\t/// Initializes a new instance of the <see cref=\"MailKit.WebAlertEventArgs\"/> class.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// Creates a new <see cref=\"WebAlertEventArgs\"/>.\n\t\t/// </remarks>\n\t\t/// <param name=\"uri\">The web URI.</param>\n\t\t/// <param name=\"message\">The alert message.</param>\n\t\t/// <exception cref=\"System.ArgumentNullException\">\n\t\t/// <para><paramref name=\"uri\"/> is <see langword=\"null\" />.</para>\n\t\t/// <para>-or-</para>\n\t\t/// <para><paramref name=\"message\"/> is <see langword=\"null\" />.</para>\n\t\t/// </exception>\n\t\tpublic WebAlertEventArgs (Uri uri, string message) : base (message)\n\t\t{\n\t\t\tif (uri == null)\n\t\t\t\tthrow new ArgumentNullException (nameof (uri));\n\n\t\t\tWebUri = uri;\n\t\t}\n\n\t\t/// <summary>\n\t\t/// Gets the web URI.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// The URI that the user should visit to resolve the issue.\n\t\t/// </remarks>\n\t\t/// <value>The web URI.</value>\n\t\tpublic Uri WebUri {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "MailKit.Coverity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.30711.63\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \".nuget\", \".nuget\", \"{BB3237C7-E19C-4232-B875-6658ABDD184A}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t.nuget\\packages.config = .nuget\\packages.config\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MimeKit\", \"submodules\\MimeKit\\MimeKit\\MimeKit.csproj\", \"{4453C1EF-9C6A-4305-B70B-9154AE48B63C}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MailKit\", \"MailKit\\MailKit.csproj\", \"{67EBBC81-9334-49CE-BF7B-17DA659E9736}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{4453C1EF-9C6A-4305-B70B-9154AE48B63C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{4453C1EF-9C6A-4305-B70B-9154AE48B63C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{4453C1EF-9C6A-4305-B70B-9154AE48B63C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{4453C1EF-9C6A-4305-B70B-9154AE48B63C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{67EBBC81-9334-49CE-BF7B-17DA659E9736}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{67EBBC81-9334-49CE-BF7B-17DA659E9736}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{67EBBC81-9334-49CE-BF7B-17DA659E9736}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{67EBBC81-9334-49CE-BF7B-17DA659E9736}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {AE4FD452-949D-40F5-B83B-B439EBA814AA}\r\n\tEndGlobalSection\r\n\tGlobalSection(MonoDevelopProperties) = preSolution\r\n\t\tStartupItem = MailKit\\MailKit.Net45.csproj\r\n\t\tPolicies = $0\r\n\t\t$0.TextStylePolicy = $1\r\n\t\t$1.inheritsSet = null\r\n\t\t$1.scope = text/x-csharp\r\n\t\t$0.CSharpFormattingPolicy = $2\r\n\t\t$2.AlignEmbeddedUsingStatements = False\r\n\t\t$2.AlignEmbeddedIfStatements = False\r\n\t\t$2.NamespaceBraceStyle = EndOfLine\r\n\t\t$2.StructBraceStyle = EndOfLine\r\n\t\t$2.EnumBraceStyle = EndOfLine\r\n\t\t$2.BeforeIndexerDeclarationBracket = False\r\n\t\t$2.AfterDelegateDeclarationParameterComma = True\r\n\t\t$2.BeforeSizeOfParentheses = True\r\n\t\t$2.BeforeTypeOfParentheses = True\r\n\t\t$2.SpacesAfterTypecast = True\r\n\t\t$2.BlankLinesBeforeUsings = 1\r\n\t\t$2.inheritsSet = Mono\r\n\t\t$2.inheritsScope = text/x-csharp\r\n\t\t$2.scope = text/x-csharp\r\n\t\t$0.StandardHeader = $3\r\n\t\t$3.Text = @\\r\\n${FileName}\\n \\nAuthor: ${AuthorName} <${AuthorEmail}>\\n\\nCopyright (c) ${Year} ${CopyrightHolder}\\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\\nall copies 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\\nTHE SOFTWARE.\\n\r\n\t\t$3.IncludeInNewFiles = True\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "MailKit.Documentation.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.29926.136\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{7CF6DF6D-3B04-46F8-A40B-537D21BCA0B4}\") = \"Documentation\", \"Documentation\\Documentation.shfbproj\", \"{59115814-A1E3-46AE-AE30-4065AE8F4CAF}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MimeKit\", \"submodules\\MimeKit\\MimeKit\\MimeKit.csproj\", \"{FAEC8A91-6983-4ED9-A414-09C6B65B13BB}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MailKit\", \"MailKit\\MailKit.csproj\", \"{E543A427-93DE-4E65-ADF2-44412E440FB1}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{59115814-A1E3-46AE-AE30-4065AE8F4CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{59115814-A1E3-46AE-AE30-4065AE8F4CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{59115814-A1E3-46AE-AE30-4065AE8F4CAF}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{FAEC8A91-6983-4ED9-A414-09C6B65B13BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{FAEC8A91-6983-4ED9-A414-09C6B65B13BB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{FAEC8A91-6983-4ED9-A414-09C6B65B13BB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FAEC8A91-6983-4ED9-A414-09C6B65B13BB}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{E543A427-93DE-4E65-ADF2-44412E440FB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E543A427-93DE-4E65-ADF2-44412E440FB1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E543A427-93DE-4E65-ADF2-44412E440FB1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E543A427-93DE-4E65-ADF2-44412E440FB1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {EB22C82D-37B9-4F33-9228-B5FD1B590B1F}\r\n\tEndGlobalSection\r\n\tGlobalSection(MonoDevelopProperties) = preSolution\r\n\t\tPolicies = $0\r\n\t\t$0.StandardHeader = $1\r\n\t\t$1.Text = @\\n${FileName}\\n \\nAuthor: ${AuthorName} <${AuthorEmail}>\\n\\nCopyright (c) ${Year} ${CopyrightHolder}\\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\\nall copies 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\\nTHE SOFTWARE.\\n\r\n\t\t$1.IncludeInNewFiles = True\r\n\t\t$0.TextStylePolicy = $2\r\n\t\t$2.FileWidth = 120\r\n\t\t$2.TabsToSpaces = False\r\n\t\t$2.inheritsSet = VisualStudio\r\n\t\t$2.inheritsScope = text/plain\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "MailKit.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.2.32516.85\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{D5001AA9-4C61-475F-8EA3-4C15949D849F}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t.editorconfig = .editorconfig\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MimeKit\", \"submodules\\MimeKit\\MimeKit\\MimeKit.csproj\", \"{B0E5B7C4-710E-4DDE-9C00-1234844ADA76}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MailKit\", \"MailKit\\MailKit.csproj\", \"{12F096E4-8CDC-4D5B-87B8-8AD71A3B5BED}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"UnitTests\", \"UnitTests\\UnitTests.csproj\", \"{1B670279-AEA7-4D9B-A854-CB4CC177B277}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B0E5B7C4-710E-4DDE-9C00-1234844ADA76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B0E5B7C4-710E-4DDE-9C00-1234844ADA76}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B0E5B7C4-710E-4DDE-9C00-1234844ADA76}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B0E5B7C4-710E-4DDE-9C00-1234844ADA76}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{12F096E4-8CDC-4D5B-87B8-8AD71A3B5BED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{12F096E4-8CDC-4D5B-87B8-8AD71A3B5BED}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{12F096E4-8CDC-4D5B-87B8-8AD71A3B5BED}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{12F096E4-8CDC-4D5B-87B8-8AD71A3B5BED}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1B670279-AEA7-4D9B-A854-CB4CC177B277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1B670279-AEA7-4D9B-A854-CB4CC177B277}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1B670279-AEA7-4D9B-A854-CB4CC177B277}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1B670279-AEA7-4D9B-A854-CB4CC177B277}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {80311676-045A-4523-8BD6-AEAD1F21474C}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "MailKitLite.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.30114.105\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{D5001AA9-4C61-475F-8EA3-4C15949D849F}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t.editorconfig = .editorconfig\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MimeKitLite\", \"submodules\\MimeKit\\MimeKit\\MimeKitLite.csproj\", \"{23F999AF-CF50-42FF-A011-D56D68E60FB9}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MailKitLite\", \"MailKit\\MailKitLite.csproj\", \"{D6EBFBF3-5806-43A0-B3B3-02EF25C47A9C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{23F999AF-CF50-42FF-A011-D56D68E60FB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{23F999AF-CF50-42FF-A011-D56D68E60FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{23F999AF-CF50-42FF-A011-D56D68E60FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{23F999AF-CF50-42FF-A011-D56D68E60FB9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{D6EBFBF3-5806-43A0-B3B3-02EF25C47A9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D6EBFBF3-5806-43A0-B3B3-02EF25C47A9C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D6EBFBF3-5806-43A0-B3B3-02EF25C47A9C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D6EBFBF3-5806-43A0-B3B3-02EF25C47A9C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {80311676-045A-4523-8BD6-AEAD1F21474C}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "README.md",
    "content": "# MailKit\n\n|  Package  |Latest Release|Latest Build|\n|:----------|:------------:|:----------:|\n|**MimeKit**|[![MimeKit NuGet](https://img.shields.io/nuget/v/MimeKit.svg?logo=nuget&style=flat-square)](https://www.nuget.org/packages/MimeKit)![MimeKit NuGet Downloads](https://img.shields.io/nuget/dt/MimeKit.svg?style=flat-square)|[![MimeKit MyGet](https://img.shields.io/myget/mimekit/v/MimeKit.svg?logo=nuget&style=flat-square&label=myget)](https://www.myget.org/feed/mimekit/package/nuget/MimeKit)|\n|**MimeKitLite**|[![MimeKitLite NuGet](https://img.shields.io/nuget/v/MimeKitLite.svg?logo=nuget&style=flat-square)](https://www.nuget.org/packages/MimeKitLite)![MimeKitLite NuGet Downloads](https://img.shields.io/nuget/dt/MimeKitLite.svg?style=flat-square)||\n|**MailKit**|[![MailKit NuGet](https://img.shields.io/nuget/v/MailKit.svg?logo=nuget&style=flat-square)](https://www.nuget.org/packages/MailKit)![MailKit NuGet Downloads](https://img.shields.io/nuget/dt/MailKit.svg?style=flat-square)|[![MailKit MyGet](https://img.shields.io/myget/mimekit/v/MailKit.svg?logo=nuget&style=flat-square&label=myget)](https://www.myget.org/feed/mimekit/package/nuget/MailKit)|\n|**MailKitLite**|[![MailKitLite NuGet](https://img.shields.io/nuget/v/MailKitLite.svg?logo=nuget&style=flat-square)](https://www.nuget.org/packages/MailKitLite)![MailKitLite NuGet Downloads](https://img.shields.io/nuget/dt/MailKitLite.svg?style=flat-square)||\n\n\n|  Platform   |Build Status|Code Coverage|Static Analysis|\n|:------------|:----------:|:-----------:|:-------------:|\n|**Linux/Mac**|[![Build Status](https://github.com/jstedfast/MailKit/actions/workflows/main.yml/badge.svg?event=push)](https://github.com/jstedfast/MailKit/actions/workflows/main.yml)|[![Code Coverage](https://img.shields.io/coverallsCoverage/github/jstedfast/MailKit?branch=master)](https://coveralls.io/r/jstedfast/MailKit?branch=master)|[![Static Analysis](https://img.shields.io/coverity/scan/3202)](https://scan.coverity.com/projects/3202)|\n|**Windows**  |[![Build Status](https://github.com/jstedfast/MailKit/actions/workflows/main.yml/badge.svg?event=push)](https://github.com/jstedfast/MailKit/actions/workflows/main.yml)|[![Code Coverage](https://img.shields.io/coverallsCoverage/github/jstedfast/MailKit?branch=master)](https://coveralls.io/r/jstedfast/MailKit?branch=master)|[![Static Analysis](https://img.shields.io/coverity/scan/3202)](https://scan.coverity.com/projects/3202)|\n\n## What is MailKit?\n\nMailKit is a cross-platform mail client library built on top of [MimeKit](https://github.com/jstedfast/MimeKit).\n\n## Donate\n\nMailKit is a personal open source project that I have put thousands of hours into perfecting with the\ngoal of making it the very best email framework for .NET. I need your help to achieve this.\n\nDonating helps pay for things such as web hosting, domain registration and licenses for developer tools\nsuch as a performance profiler, memory profiler, a static code analysis tool, and more. It also helps\nmotivate me to continue working on the project.\n\n<a href=\"https://github.com/sponsors/jstedfast\" _target=\"blank\"><img alt=\"Click here to lend your support to MailKit by making a donation!\" src=\"https://www.paypal.com/en_US/i/btn/x-click-but21.gif\"></a>\n\n## Features\n\n* SASL Authentication\n  * Supports the following mechanisms: [CRAM-MD5](https://tools.ietf.org/html/rfc2195), [DIGEST-MD5](https://tools.ietf.org/html/rfc2831),\n  [LOGIN](https://tools.ietf.org/html/draft-murchison-sasl-login-00), [NTLM](https://davenport.sourceforge.net/ntlm.html),\n  [PLAIN](https://tools.ietf.org/html/rfc2595), [SCRAM-SHA-1[-PLUS]](https://tools.ietf.org/html/rfc5802),\n  [SCRAM-SHA-256[-PLUS]](https://tools.ietf.org/html/rfc5802), [SCRAM-SHA-512[-PLUS]](https://tools.ietf.org/html/draft-melnikov-scram-sha-512-04),\n  [OAUTHBEARER](https://tools.ietf.org/html/rfc7628) and XOAUTH2\n* Proxy Support\n  * Supports the following types of proxies: [SOCKS4/4a](https://www.openssh.com/txt/socks4.protocol), [SOCKS5](https://tools.ietf.org/html/rfc1928),\n  and [HTTP/S](https://tools.ietf.org/html/rfc2616)\n* SMTP Client\n  * Supports all of the SASL mechanisms listed above.\n  * Supports SSL-wrapped connections via the \"smtps\" protocol.\n  * Supports client SSL/TLS certificates.\n  * Supports the following extensions: [SIZE](https://tools.ietf.org/html/rfc1870), [DSN](https://tools.ietf.org/html/rfc1891),\n  [AUTH](https://tools.ietf.org/html/rfc2554), [8BITMIME](https://tools.ietf.org/html/rfc2821), [PIPELINING](https://tools.ietf.org/html/rfc2920),\n  [BINARYMIME](https://tools.ietf.org/html/rfc3030), [CHUNKING](https://tools.ietf.org/html/rfc3030), [STARTTLS](https://tools.ietf.org/html/rfc3207),\n  and [SMTPUTF8](https://tools.ietf.org/html/rfc6531)\n  * All APIs are cancellable.\n  * Async APIs are available.\n* POP3 Client\n  * Supports all of the SASL mechanisms listed above.\n  * Also supports authentication via [APOP](https://tools.ietf.org/html/rfc1939#page-15) and `USER`/`PASS`.\n  * Supports SSL-wrapped connections via the \"pops\" protocol.\n  * Supports client SSL/TLS certificates.\n  * Supports the following extensions: [TOP](https://tools.ietf.org/html/rfc1939#page-11), [UIDL](https://tools.ietf.org/html/rfc1939#page-12),\n  [EXPIRE](https://tools.ietf.org/html/rfc2449), [LOGIN-DELAY](https://tools.ietf.org/html/rfc2449), [PIPELINING](https://tools.ietf.org/html/rfc2449),\n  [SASL](https://tools.ietf.org/html/rfc2449), [STLS](https://tools.ietf.org/html/rfc2595), [UTF8](https://tools.ietf.org/html/rfc6856),\n  [UTF8=USER](https://tools.ietf.org/html/rfc6856), and [LANG](https://tools.ietf.org/html/rfc6856)\n  * All APIs are cancellable.\n  * Async APIs are available.\n* IMAP4 Client\n  * Supports all of the SASL mechanisms listed above.\n  * Supports SSL-wrapped connections via the \"imaps\" protocol.\n  * Supports client SSL/TLS certificates.\n  * Supports the following extensions: [ACL](https://tools.ietf.org/html/rfc4314), [QUOTA](https://tools.ietf.org/html/rfc2087),\n  [LITERAL+](https://tools.ietf.org/html/rfc2088), [IDLE](https://tools.ietf.org/html/rfc2177), [NAMESPACE](https://tools.ietf.org/html/rfc2342),\n  [ID](https://tools.ietf.org/html/rfc2971), [CHILDREN](https://tools.ietf.org/html/rfc3348), [LOGINDISABLED](https://tools.ietf.org/html/rfc3501),\n  [STARTTLS](https://tools.ietf.org/html/rfc3501), [MULTIAPPEND](https://tools.ietf.org/html/rfc3502), [UNSELECT](https://tools.ietf.org/html/rfc3691),\n  [UIDPLUS](https://tools.ietf.org/html/rfc4315), [CONDSTORE](https://tools.ietf.org/html/rfc4551), [ESEARCH](https://tools.ietf.org/html/rfc4731),\n  [SASL-IR](https://tools.ietf.org/html/rfc4959), [COMPRESS](https://tools.ietf.org/html/rfc4978), [WITHIN](https://tools.ietf.org/html/rfc5032),\n  [ENABLE](https://tools.ietf.org/html/rfc5161), [QRESYNC](https://tools.ietf.org/html/rfc5162), [SORT](https://tools.ietf.org/html/rfc5256),\n  [THREAD](https://tools.ietf.org/html/rfc5256), [ANNOTATE](https://tools.ietf.org/html/rfc5257), [LIST-EXTENDED](https://tools.ietf.org/html/rfc5258),\n  [ESORT](https://tools.ietf.org/html/rfc5267), [METADATA / METADATA-SERVER](https://tools.ietf.org/html/rfc5464), [NOTIFY](https://tools.ietf.org/html/rfc5465),\n  [FILTERS](https://tools.ietf.org/html/rfc5466), [LIST-STATUS](https://tools.ietf.org/html/rfc5819), [SORT=DISPLAY](https://tools.ietf.org/html/rfc5957),\n  [SPECIAL-USE / CREATE-SPECIAL-USE](https://tools.ietf.org/html/rfc6154), [SEARCH=FUZZY](https://tools.ietf.org/html/rfc6203),\n  [MOVE](https://tools.ietf.org/html/rfc6851), [UTF8=ACCEPT / UTF8=ONLY](https://tools.ietf.org/html/rfc6855), [LITERAL-](https://tools.ietf.org/html/rfc7888),\n  [APPENDLIMIT](https://tools.ietf.org/html/rfc7889), [STATUS=SIZE](https://tools.ietf.org/html/rfc8438), [OBJECTID](https://tools.ietf.org/html/rfc8474),\n  [REPLACE](https://tools.ietf.org/html/rfc8508), [SAVEDATE](https://tools.ietf.org/html/rfc8514), [XLIST](https://developers.google.com/gmail/imap_extensions),\n  and [X-GM-EXT1](https://developers.google.com/gmail/imap_extensions) (X-GM-MSGID, X-GM-THRID, X-GM-RAW and X-GM-LABELS)\n  * All APIs are cancellable.\n  * Async APIs are available.\n* Client-side sorting and threading of messages.\n\n## Goals\n\nThe main goal of this project is to provide the .NET world with robust, fully featured and RFC-compliant\nSMTP, POP3, and IMAP client implementations.\n\nAll of the other .NET IMAP client implementations that I could find suffer from major architectural\nproblems such as ignoring unexpected untagged responses, assuming that literal string tokens will\nnever be used for anything other than message bodies (when in fact they could be used for pretty\nmuch any string token in a response), assuming that the way to find the end of a message body in a\nFETCH response is by scanning for `\") UID\"`, and not properly handling mailbox names with international\ncharacters to simply name a few.\n\nIMAP requires a LOT of time spent laboriously reading and re-reading the IMAP specifications (as well\nas the MIME specifications) to understand all of the subtleties of the protocol and most (all?) of the\nother Open Source .NET IMAP libraries, at least, were written by developers that only cared enough that\nit worked for their simple needs. There's nothing necessarily wrong with doing that, but the web is full\nof half-working, non-RFC-compliant IMAP implementations out there that it was finally time for a carefully\ndesigned and implemented IMAP client library to be written.\n\nFor POP3, libraries such as OpenPOP.NET are actually fairly decent, although the MIME parser is far\ntoo strict - throwing exceptions any time it encounters a Content-Type or Content-Disposition\nparameter that it doesn't already know about, which, if you read over the mailing-list, is a problem\nthat OpenPOP.NET users are constantly running into. MailKit's Pop3Client, of course, doesn't have this\nproblem. It also parses messages directly from the socket instead of downloading the message into a\nlarge string buffer before parsing it, so you'll probably find that not only is MailKit faster (MailKit's\nMIME parser, [MimeKit](https://github.com/jstedfast/MimeKit), parses messages from disk 25x faster than\nOpenPOP.NET's parser), but also uses far less memory.\n\nFor SMTP, most developers use System.Net.Mail.SmtpClient which suits their needs more-or-less satisfactorily\nand so is probably not high on their list of needs. However, the SmtpClient implementation included with\nMailKit is a much better option if cross-platform support is needed or if the developer wants to be able to\nsave and re-load MIME messages before sending them via SMTP. MailKit's SmtpClient also supports PIPELINING\nwhich should improve performance of sending messages (although might not be very noticeable).\n\n## License Information\n\n```text\nMIT License\n\nCopyright (C) 2013-2026 .NET Foundation and Contributors\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\nall copies 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\nTHE SOFTWARE.\n```\n\n## Installing via NuGet\n\nThe easiest way to install MailKit is via [NuGet](https://www.nuget.org/packages/MailKit/).\n\nIn Visual Studio's [Package Manager Console](https://docs.nuget.org/docs/start-here/using-the-package-manager-console),\nenter the following command:\n\n    Install-Package MailKit\n\n## Getting the Source Code\n\nFirst, you'll need to clone MailKit from my GitHub repository. To do this using the command-line version of Git,\nyou'll need to issue the following command in your terminal:\n\n    git clone --recursive https://github.com/jstedfast/MailKit.git\n\nIf you are using [TortoiseGit](https://tortoisegit.org) on Windows, you'll need to right-click in the directory\nwhere you'd like to clone MailKit and select **Git Clone...** in the menu. Once you do that, you'll get the\nfollowing dialog:\n\n![Download the source code using TortoiseGit](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/clone.png)\n\nFill in the areas outlined in red and then click **OK**. This will recursively clone MailKit onto your local machine.\n\n## Updating the Source Code\n\nOccasionally you might want to update your local copy of the source code if I have made changes to MailKit since you\ndownloaded the source code in the step above. To do this using the command-line version of Git, you'll need to issue\nthe following commands in your terminal within the MailKit directory:\n\n    git pull\n    git submodule update\n\nIf you are using [TortoiseGit](https://tortoisegit.org) on Windows, you'll need to right-click on the MailKit\ndirectory and select **Git Sync...** in the menu. Once you do that, you'll need to click the **Pull** and\n**Submodule Update** buttons in the following dialog:\n\n![Update the source code using TortoiseGit](https://github.com/jstedfast/MailKit/blob/master/Documentation/media/update.png)\n\n## Building\n\nIn the top-level MailKit directory, there are a number of solution files; they are:\n\n* **MailKit.sln** - includes the projects for .NET Framework 4.6.2/4.7/4.8, .NETStandard 2.0/2.1, .NET6.0 as well as the unit tests.\n* **MailKit.Coverity.sln** - this is used to generate Coverity static analysis builds and is not generally useful.\n* **MailKit.Documentation.sln** - this is used to generate the documentation found at https://mimekit.net/docs\n\nOnce you've opened the appropriate MailKit solution file in [Visual Studio](https://www.visualstudio.com/downloads/),\nyou can choose the **Debug** or **Release** build configuration and then build.\n\nBoth Visual Studio 2017 and Visual Studio 2019 should be able to build MailKit without any issues, but older versions such as\nVisual Studio 2015 will require modifications to the projects in order to build correctly. It has been reported that adding\nNuGet package references to [Microsoft.Net.Compilers](https://www.nuget.org/packages/Microsoft.Net.Compilers/) >= 3.6.0\nand [System.ValueTuple](https://www.nuget.org/packages/System.ValueTuple/) >= 4.5.0 to the MimeKit and MailKit projects will\nallow them to build successfully.\n\nNote: The **Release** build will generate the xml API documentation, but the **Debug** build will not.\n\n## Using MailKit\n\n### Sending Messages\n\nOne of the more common operations that MailKit is meant for is sending email messages.\n\n```csharp\nusing System;\n\nusing MailKit.Net.Smtp;\nusing MailKit;\nusing MimeKit;\n\nnamespace TestClient {\n    class Program\n    {\n        public static void Main (string[] args)\n        {\n            var message = new MimeMessage ();\n            message.From.Add (new MailboxAddress (\"Joey Tribbiani\", \"joey@friends.com\"));\n            message.To.Add (new MailboxAddress (\"Mrs. Chanandler Bong\", \"chandler@friends.com\"));\n            message.Subject = \"How you doin'?\";\n\n            message.Body = new TextPart (\"plain\") {\n                Text = @\"Hey Chandler,\n\nI just wanted to let you know that Monica and I were going to go play some paintball, you in?\n\n-- Joey\"\n            };\n\n            using (var client = new SmtpClient ()) {\n                client.Connect (\"smtp.friends.com\", 587, false);\n\n                // Note: only needed if the SMTP server requires authentication\n                client.Authenticate (\"joey\", \"password\");\n\n                client.Send (message);\n                client.Disconnect (true);\n            }\n        }\n    }\n}\n```\n\n## Retrieving Messages (via Pop3)\n\nOne of the other main uses of MailKit is retrieving messages from pop3 servers.\n\n```csharp\nusing System;\n\nusing MailKit.Net.Pop3;\nusing MailKit;\nusing MimeKit;\n\nnamespace TestClient {\n    class Program\n    {\n        public static void Main (string[] args)\n        {\n            using (var client = new Pop3Client ()) {\n                client.Connect (\"pop.friends.com\", 110, false);\n\n                client.Authenticate (\"joey\", \"password\");\n\n                for (int i = 0; i < client.Count; i++) {\n                    var message = client.GetMessage (i);\n                    Console.WriteLine (\"Subject: {0}\", message.Subject);\n                }\n\n                client.Disconnect (true);\n            }\n        }\n    }\n}\n```\n\n## Using IMAP\n\nMore important than POP3 support is the IMAP support. Here's a simple use-case of retrieving messages from an IMAP server:\n\n```csharp\nusing System;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Net.Imap;\n\nnamespace TestClient {\n    class Program\n    {\n        public static void Main (string[] args)\n        {\n            using (var client = new ImapClient ()) {\n                client.Connect (\"imap.friends.com\", 993, true);\n\n                client.Authenticate (\"joey\", \"password\");\n\n                // The Inbox folder is always available on all IMAP servers...\n                var inbox = client.Inbox;\n                inbox.Open (FolderAccess.ReadOnly);\n\n                Console.WriteLine (\"Total messages: {0}\", inbox.Count);\n                Console.WriteLine (\"Recent messages: {0}\", inbox.Recent);\n\n                for (int i = 0; i < inbox.Count; i++) {\n                    var message = inbox.GetMessage (i);\n                    Console.WriteLine (\"Subject: {0}\", message.Subject);\n                }\n\n                client.Disconnect (true);\n            }\n        }\n    }\n}\n```\n\n### Fetching Information About the Messages in an IMAP Folder\n\nOne of the advantages of IMAP over POP3 is that the IMAP protocol allows clients to retrieve information about\nthe messages in a folder without having to first download all of them.\n\nUsing the [Fetch](https://www.mimekit.net/docs/html/Overload_MailKit_Net_Imap_ImapFolder_Fetch.htm) and\n[FetchAsync](https://www.mimekit.net/docs/html/Overload_MailKit_Net_Imap_ImapFolder_FetchAsync.htm) method overloads\n(or the convenient [extension methods](https://www.mimekit.net/docs/html/Overload_MailKit_IMailFolderExtensions_Fetch.htm)),\nit's possible to obtain any subset of summary information for any range of messages in a given folder.\n\n```csharp\nforeach (var summary in inbox.Fetch (0, -1, MessageSummaryItems.Envelope)) {\n    Console.WriteLine (\"[summary] {0:D2}: {1}\", summary.Index, summary.Envelope.Subject);\n```\n\nIt's also possible to use Fetch/FetchAsync APIs that take an [IFetchRequest](https://www.mimekit.net/docs/html/T_MailKit_IFetchRequest.htm)\nargument to get even more control over what to fetch:\n\n```csharp\n// Let's Fetch non-Received headers:\nvar request = new FetchRequest {\n    Headers = new HeaderSet (new HeaderId[] { HeaderId.Received }) {\n        Exclude = true\n    }\n};\n\nforeach (var summary in inbox.Fetch (0, -1, request)) {\n    Console.WriteLine (\"[summary] {0:D2}: {1}\", summary.Index, summary.Headers[HeaderId.Subject]);\n```\n\nThe results of a Fetch method can also be used to download individual MIME parts rather\nthan downloading the entire message. For example:\n\n```csharp\nforeach (var summary in inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure)) {\n    if (summary.TextBody != null) {\n        // this will download *just* the text/plain part\n        var text = inbox.GetBodyPart (summary.UniqueId, summary.TextBody);\n    }\n\n    if (summary.HtmlBody != null) {\n        // this will download *just* the text/html part\n        var html = inbox.GetBodyPart (summary.UniqueId, summary.HtmlBody);\n    }\n\n    // if you'd rather grab, say, an image attachment... it might look something like this:\n    if (summary.Body is BodyPartMultipart) {\n        var multipart = (BodyPartMultipart) summary.Body;\n\n        var attachment = multipart.BodyParts.OfType<BodyPartBasic> ().FirstOrDefault (x => x.FileName == \"logo.jpg\");\n        if (attachment != null) {\n            // this will download *just* the attachment\n            var part = inbox.GetBodyPart (summary.UniqueId, attachment);\n        }\n    }\n}\n```\n\n### Setting Message Flags in IMAP\n\nIn order to set or update the flags on a particular message, what is actually needed is the UID or index of the message and\nthe folder that it belongs to.\n\nAn obvious reason to want to update message flags is to mark a message as \"read\" (aka \"seen\") after a user has opened a\nmessage and read it.\n\n```csharp\nfolder.Store (uid, new StoreFlagsRequest (StoreAction.Add, MessageFlags.Seen) { Silent = true });\n```\n\n### Deleting Messages in IMAP\n\nDeleting messages in IMAP involves setting a `\\Deleted` flag on a message and, optionally, expunging it from the folder.\n\nThe way to mark a message as `\\Deleted` works the same way as marking a message as `\\Seen`.\n\n```csharp\nfolder.Store (uid, new StoreFlagsRequest (StoreAction.Add, MessageFlags.Deleted) { Silent = true });\nfolder.Expunge ();\n```\n\n### Searching an IMAP Folder\n\nYou may also be interested in sorting and searching...\n\n```csharp\n// let's search for all messages received after Jan 12, 2013 with \"MailKit\" in the subject...\nvar query = SearchQuery.DeliveredAfter (DateTime.Parse (\"2013-01-12\"))\n    .And (SearchQuery.SubjectContains (\"MailKit\")).And (SearchQuery.Seen);\n\nforeach (var uid in inbox.Search (query)) {\n    var message = inbox.GetMessage (uid);\n    Console.WriteLine (\"[match] {0}: {1}\", uid, message.Subject);\n}\n\n// let's do the same search, but this time sort them in reverse arrival order\nvar orderBy = new [] { OrderBy.ReverseArrival };\nforeach (var uid in inbox.Sort (query, orderBy)) {\n    var message = inbox.GetMessage (uid);\n    Console.WriteLine (\"[match] {0}: {1}\", uid, message.Subject);\n}\n\n// you'll notice that the orderBy argument is an array... this is because you\n// can actually sort the search results based on multiple columns:\norderBy = new [] { OrderBy.ReverseArrival, OrderBy.Subject };\nforeach (var uid in inbox.Sort (query, orderBy)) {\n    var message = inbox.GetMessage (uid);\n    Console.WriteLine (\"[match] {0}: {1}\", uid, message.Subject);\n}\n```\n\nOf course, instead of downloading the message, you could also fetch the summary information for the matching messages\nor do any of a number of other things with the UIDs that are returned.\n\n### Navigating Folders in IMAP\n\nHow about navigating folders? MailKit can do that, too:\n\n```csharp\n// Get the first personal namespace and list the toplevel folders under it.\nvar personal = client.GetFolder (client.PersonalNamespaces[0]);\nforeach (var folder in personal.GetSubfolders (false))\n    Console.WriteLine (\"[folder] {0}\", folder.Name);\n```\n\nIf the IMAP server supports the SPECIAL-USE or the XLIST (GMail) extension, you can get a hold of\nthe pre-defined All, Drafts, Flagged (aka Important), Junk, Sent, Trash, etc folders like this:\n\n```csharp\nif ((client.Capabilities & (ImapCapabilities.SpecialUse | ImapCapabilities.XList)) != 0) {\n    var drafts = client.GetFolder (SpecialFolder.Drafts);\n} else {\n    // maybe check the user's preferences for the Drafts folder?\n}\n```\n\nIn cases where the IMAP server does *not* support the SPECIAL-USE or XLIST extensions, you'll have to\ncome up with your own heuristics for getting the Sent, Drafts, Trash, etc folders. For example, you\nmight use logic similar to this:\n\n```csharp\nstatic string[] CommonSentFolderNames = { \"Sent Items\", \"Sent Mail\", \"Sent Messages\", /* maybe add some translated names */ };\n\nstatic IFolder GetSentFolder (ImapClient client, CancellationToken cancellationToken)\n{\n    var personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n    foreach (var folder in personal.GetSubfolders (false, cancellationToken)) {\n        foreach (var name in CommonSentFolderNames) {\n            if (folder.Name == name)\n                return folder;\n        }\n    }\n\n    return null;\n}\n```\n\nUsing LINQ, you could simplify this down to something more like this:\n\n```csharp\nstatic string[] CommonSentFolderNames = { \"Sent Items\", \"Sent Mail\", \"Sent Messages\", /* maybe add some translated names */ };\n\nstatic IFolder GetSentFolder (ImapClient client, CancellationToken cancellationToken)\n{\n    var personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n    return personal.GetSubfolders (false, cancellationToken).FirstOrDefault (x => CommonSentFolderNames.Contains (x.Name));\n}\n```\n\nAnother option might be to allow the user of your application to configure which folder he or she wants to use as their\nSent folder, Drafts folder, Trash folder, etc.\n\nHow you handle this is up to you.\n\n## Contributing\n\nThe first thing you'll need to do is fork MailKit to your own GitHub repository. For instructions on how to\ndo that, see the section titled **Getting the Source Code**.\n\nIf you use [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/) or [MonoDevelop](https://monodevelop.com),\nall of the solution files are configured with the coding style used by MailKit. If you use Visual Studio on Windows\nor some other editor, please try to maintain the existing coding style as best as you can.\n\nOnce you've got some changes that you'd like to submit upstream to the official MailKit repository,\nsend me a **Pull Request** and I will try to review your changes in a timely manner.\n\nIf you'd like to contribute but don't have any particular features in mind to work on, check out the issue\ntracker and look for something that might pique your interest!\n\n## Reporting Bugs\n\nHave a bug or a feature request? Please open a new\n[bug report](https://github.com/jstedfast/MailKit/issues/new?template=bug_report.md)\nor\n[feature request](https://github.com/jstedfast/MailKit/issues/new?template=feature_request.md).\n\nBefore opening a new issue, please search through any [existing issues](https://github.com/jstedfast/MailKit/issues)\nto avoid submitting duplicates. It may also be worth checking the\n[FAQ](https://github.com/jstedfast/MailKit/blob/master/FAQ.md) for common questions that other developers\nhave had.\n\nIf MailKit does not work with your mail server, please include a [protocol\nlog](https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog) in your bug report, otherwise\nthere is nothing I can do to fix the problem.\n\nIf you are getting an exception from somewhere within MailKit, don't just provide the `Exception.Message`\nstring. Please include the `Exception.StackTrace` as well. The `Message`, by itself, is often useless.\n\n## Documentation\n\nAPI documentation can be found at [https://www.mimekit.net/docs](https://www.mimekit.net/docs).\n\nSome example snippets can be found in the [`Documentation/Examples`](https://github.com/jstedfast/MailKit/tree/master/Documentation/Examples) directory.\n\nSample applications can be found in the [`samples`](https://github.com/jstedfast/MailKit/tree/master/samples) directory.\n\nA copy of the XML-formatted API reference documentation is also included in the NuGet package.\n\n## .NET Foundation\n\nMailKit is a [.NET Foundation](https://www.dotnetfoundation.org/projects) project.\n\nThis project has adopted the code of conduct defined by the [Contributor Covenant](https://contributor-covenant.org/) to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](https://www.dotnetfoundation.org/code-of-conduct).\n\nGeneral .NET OSS discussions: [.NET Foundation forums](https://forums.dotnetfoundation.org)\n"
  },
  {
    "path": "RFCs.md",
    "content": "### Specifications\n\nThe following IETF specifications define the IMAP, POP3 and SMTP protocols:\n\n* [821](https://tools.ietf.org/html/rfc821): SIMPLE MAIL TRANSFER PROTOCOL\n* [822](https://tools.ietf.org/html/rfc822): STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES\n* [974](https://tools.ietf.org/html/rfc974): MAIL ROUTING AND THE DOMAIN SYSTEM\n* [1081](https://tools.ietf.org/html/rfc1081): Post Office Protocol - Version 3\n* [1123](https://tools.ietf.org/html/rfc1123): Requirements for Internet Hosts -- Application and Support\n* [1225](https://tools.ietf.org/html/rfc1225): Post Office Protocol - Version 3 (Obsoletes rfc1081)\n* [1425](https://tools.ietf.org/html/rfc1425): SMTP Service Extensions\n* [1426](https://tools.ietf.org/html/rfc1426): SMTP Service Extension for 8bit-MIME transport\n* [1460](https://tools.ietf.org/html/rfc1460): Post Office Protocol - Version 3 (Obsoletes rfc1225)\n* [1651](https://tools.ietf.org/html/rfc1651): SMTP Service Extensions (Obsoletes rfc1425)\n* [1652](https://tools.ietf.org/html/rfc1652): SMTP Service Extension for 8bit-MIME transport (Obsoletes rfc1426)\n* [1653](https://tools.ietf.org/html/rfc1653): SMTP Service Extension for Message Size Declaration\n* [1725](https://tools.ietf.org/html/rfc1725): Post Office Protocol - Version 3 (Obsoletes rfc1460)\n* [1730](https://tools.ietf.org/html/rfc1730): INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4\n* [1731](https://tools.ietf.org/html/rfc1731): IMAP4 Authentication Mechanisms\n* [1734](https://tools.ietf.org/html/rfc1734): POP3 AUTHentication command\n* [1830](https://tools.ietf.org/html/rfc1830): SMTP Service Extensions for Transmission of Large and Binary MIME Messages\n* [1854](https://tools.ietf.org/html/rfc1854): SMTP Service Extension for Command Pipelining\n* [1870](https://tools.ietf.org/html/rfc1870): SMTP Service Extension for Message Size Declaration (Obsoletes rfc1653)\n* [1869](https://tools.ietf.org/html/rfc1869): SMTP Service Extensions\n* [1891](https://tools.ietf.org/html/rfc1891): SMTP Service Extension for Delivery Status Notifications\n* [1928](https://tools.ietf.org/html/rfc1928): SOCKS Protocol Version 5\n* [1929](https://tools.ietf.org/html/rfc1929): Username/Password Authentication for SOCKS V5\n* [1939](https://tools.ietf.org/html/rfc1939): Post Office Protocol - Version 3 (Obsoletes rfc1725)\n* [1961](https://tools.ietf.org/html/rfc1961): GSS-API Authentication Method for SOCKS Version 5\n* [2034](https://tools.ietf.org/html/rfc2034): SMTP Service Extension for Returning Enhanced Error Codes\n* [2060](https://tools.ietf.org/html/rfc2060): INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 (Obsoletes rfc1730)\n* [2086](https://tools.ietf.org/html/rfc2086): IMAP4 ACL extension\n* [2087](https://tools.ietf.org/html/rfc2087): IMAP4 QUOTA extension\n* [2088](https://tools.ietf.org/html/rfc2088): IMAP4 non-synchronizing literals\n* [2095](https://tools.ietf.org/html/rfc2095): IMAP/POP AUTHorize Extension for Simple Challenge/Response\n* [2177](https://tools.ietf.org/html/rfc2177): IMAP4 IDLE command\n* [2193](https://tools.ietf.org/html/rfc2193): IMAP4 Mailbox Referrals\n* [2195](https://tools.ietf.org/html/rfc2195): IMAP/POP AUTHorize Extension for Simple Challenge/Response (Obsoletes rfc2095)\n* [2197](https://tools.ietf.org/html/rfc2197): SMTP Service Extension for Command Pipelining (Obsoletes rfc1854)\n* [2221](https://tools.ietf.org/html/rfc2221): IMAP4 Login Referrals\n* [2222](https://tools.ietf.org/html/rfc2222): Simple Authentication and Security Layer (SASL)\n* [2245](https://tools.ietf.org/html/rfc2245): Anonymous SASL Mechanism\n* [2342](https://tools.ietf.org/html/rfc2342): IMAP4 Namespace\n* [2359](https://tools.ietf.org/html/rfc2359): IMAP4 UIDPLUS extension\n* [2449](https://tools.ietf.org/html/rfc2449): POP3 Extension Mechanism (Updates rfc1939)\n* [2487](https://tools.ietf.org/html/rfc2487): SMTP Service Extension for Secure SMTP over TLS\n* [2554](https://tools.ietf.org/html/rfc2554): SMTP Service Extension for Authentication\n* [2595](https://tools.ietf.org/html/rfc2595): Using TLS with IMAP, POP3 and ACAP\n* [2683](https://tools.ietf.org/html/rfc2683): IMAP4 Implementation Recommendations\n* [2821](https://tools.ietf.org/html/rfc2821): Simple Mail Transfer Protocol (Obsoletes rfc0821, rfc0974, rfc1869) (Updates rfc1123)\n* [2822](https://tools.ietf.org/html/rfc2822): Internet Message Format (Obsoletes rfc0822)\n* [2831](https://tools.ietf.org/html/rfc2831): Using Digest Authentication as a SASL Mechanism\n* [2920](https://tools.ietf.org/html/rfc2920): SMTP Service Extension for Command Pipelining (Obsoletes rfc2197)\n* [2971](https://tools.ietf.org/html/rfc2971): IMAP4 ID extension\n* [3030](https://tools.ietf.org/html/rfc3030): SMTP Service Extensions for Transmission of Large and Binary MIME Messages (Obsoletes rfc1830)\n* [3207](https://tools.ietf.org/html/rfc3207): SMTP Service Extension for Secure SMTP over Transport Layer Security (Obsoletes rfc2487)\n* [3348](https://tools.ietf.org/html/rfc3348): The Internet Message Action Protocol (IMAP4) Child Mailbox Extension\n* [3461](https://tools.ietf.org/html/rfc3461): Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs) (Obsoletes rfc1891)\n* [3501](https://tools.ietf.org/html/rfc3501): INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1 (Obsoletes rfc2060)\n* [3502](https://tools.ietf.org/html/rfc3502): Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension\n* [3516](https://tools.ietf.org/html/rfc3516): IMAP4 Binary Content Extension\n* [3691](https://tools.ietf.org/html/rfc3691): Handle System Namespace and Service Definition\n* [4013](https://tools.ietf.org/html/rfc4013): SASLprep: Stringprep Profile for User Names and Passwords\n* [4314](https://tools.ietf.org/html/rfc4314): IMAP4 Access Control List (ACL) Extension (Obsoletes rfc2086)\n* [4315](https://tools.ietf.org/html/rfc4315): Internet Message Access Protocol (IMAP) - UIDPLUS extension (Obsoletes rfc2359)\n* [4466](https://tools.ietf.org/html/rfc4466): Collected Extensions to IMAP4 ABNF (Updates rfc2088, rfc2342, rfc3501, rfc3502, rfc3516)\n* [4469](https://tools.ietf.org/html/rfc4469): Internet Message Access Protocol (IMAP) CATENATE Extension (Updates rfc3501, rfc3502)\n* [4505](https://tools.ietf.org/html/rfc4505): Anonymous Simple Authentication and Security Layer (SASL) Mechanism (Obsoletes rfc2245)\n* [4551](https://tools.ietf.org/html/rfc4551): IMAP Extension for Conditional STORE Operation or Quick Flag Changes Resynchronization (Updates rfc3501)\n* [4616](https://tools.ietf.org/html/rfc4616): The PLAIN Simple Authentication and Security Layer (SASL) Mechanism (Updates rfc2595)\n* [4731](https://tools.ietf.org/html/rfc4731): IMAP4 Extension to SEARCH Command for Controlling What Kind of Information Is Returned\n* [4952](https://tools.ietf.org/html/rfc4952): Overview and Framework for Internationalized Email\n* [4959](https://tools.ietf.org/html/rfc4959): IMAP Extension for Simple Authentication and Security Layer (SASL) Initial Client Response\n* [4978](https://tools.ietf.org/html/rfc4978): The IMAP COMPRESS Extension\n* [5032](https://tools.ietf.org/html/rfc5032): WITHIN Search Extension to the IMAP Protocol (Updates rfc3501)\n* [5161](https://tools.ietf.org/html/rfc5161): The IMAP ENABLE Extension\n* [5162](https://tools.ietf.org/html/rfc5162): IMAP4 Extensions for Quick Mailbox Resynchronization\n* [5182](https://tools.ietf.org/html/rfc5182): IMAP Extension for Referencing the Last SEARCH Result (Updates rfc3501)\n* [5255](https://tools.ietf.org/html/rfc5255): Internet Message Access Protocol Internationalization\n* [5256](https://tools.ietf.org/html/rfc5256): Internet Message Access Protocol - SORT and THREAD Extensions\n* [5257](https://tools.ietf.org/html/rfc5257): Internet Message Access Protocol - ANNOTATE Extension\n* [5258](https://tools.ietf.org/html/rfc5258): Internet Message Access Protocol version 4 - LIST Command Extensions (Obsoletes rfc3348) (Updates rfc2193)\n* [5259](https://tools.ietf.org/html/rfc5259): Internet Message Access Protocol - CONVERT Extension\n* [5267](https://tools.ietf.org/html/rfc5267): Contexts for IMAP4\n* [5321](https://tools.ietf.org/html/rfc5321): Simple Mail Transfer Protocol (Obsoletes rfc2821) (Updates rfc1123)\n* [5336](https://tools.ietf.org/html/rfc5336): SMTP Extension for Internationalized Email Addresses (Updates rfc2821, rfc2822, rfc4952)\n* [5464](https://tools.ietf.org/html/rfc5464): The IMAP METADATA Extension\n* [5465](https://tools.ietf.org/html/rfc5465): The IMAP NOTIFY Extension (Updates rfc5267)\n* [5466](https://tools.ietf.org/html/rfc5466): IMAP4 Extension for Named Searches (Filters)\n* [5530](https://tools.ietf.org/html/rfc5530): IMAP Response Codes\n* [5721](https://tools.ietf.org/html/rfc5721): POP3 Support for UTF-8\n* [5738](https://tools.ietf.org/html/rfc5738): IMAP Support for UTF-8 (Updates rfc3501)\n* [5788](https://tools.ietf.org/html/rfc5788): IMAP4 Keyword Registry\n* [5801](https://tools.ietf.org/html/rfc5801): Using Generic Security Service Application Program Interface (GSS-API) Mechanisms in Simple Authentication and Security Layer (SASL): The GS2 Mechanism Family\n* [5802](https://tools.ietf.org/html/rfc5802): Salted Challenge Response Authentication Mechanism (SCRAM) SASL and GSS-API Mechanisms\n* [5819](https://tools.ietf.org/html/rfc5819): IMAP4 Extension for Returning STATUS Information in Extended LIST\n* [5957](https://tools.ietf.org/html/rfc5957): Display-Based Address Sorting for the IMAP4 SORT Extension (Updates rfc5256)\n* [6154](https://tools.ietf.org/html/rfc6154): IMAP LIST Extension for Special-Use Mailboxes\n* [6203](https://tools.ietf.org/html/rfc6203): IMAP4 Extension for Fuzzy Search\n* [6237](https://tools.ietf.org/html/rfc6237): IMAP4 Multimailbox SEARCH Extension (Obsoletes rfc4466)\n* [6531](https://tools.ietf.org/html/rfc6531): SMTP Extension for Internationalized Email (Obsoletes rfc5336)\n* [6851](https://tools.ietf.org/html/rfc6851): Internet Message Access Protocol (IMAP) - MOVE Extension\n* [6855](https://tools.ietf.org/html/rfc6855): IMAP Support for UTF-8 (Obsoletes rfc5738)\n* [6856](https://tools.ietf.org/html/rfc6856): Post Office Protocol Version 3 (POP3) Support for UTF-8 (Obsoletes rfc5721)\n* [7162](https://tools.ietf.org/html/rfc7162): IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE) and Quick Mailbox Resynchronization (QRESYNC) (Obsoletes rfc4551, rfc5162) (Updates rfc2683)\n* [7377](https://tools.ietf.org/html/rfc7377): IMAP4 Multimailbox SEARCH Extension (Obsoletes rfc6237) (Updates rfc4466)\n* [7628](https://tools.ietf.org/html/rfc7628): A Set of Simple Authentication and Security Layer (SASL) Mechanisms for OAuth\n* [7677](https://tools.ietf.org/html/rfc7677): SCRAM-SHA-256 and SCRAM-SHA-256-PLUS Simple Authentication and Security Layer (SASL) Mechanisms (Updates rfc5802)\n* [7888](https://tools.ietf.org/html/rfc7888): IMAP4 Non-synchronizing Literals (Obsoletes rfc2088)\n* [7889](https://tools.ietf.org/html/rfc7889): The IMAP APPENDLIMIT Extension\n* [8437](https://tools.ietf.org/html/rfc8437): IMAP UNAUTHENTICATE Extension for Connection Reuse (Updates rfc3501)\n* [8438](https://tools.ietf.org/html/rfc8438): IMAP Extension for STATUS=SIZE\n* [8440](https://tools.ietf.org/html/rfc8440): IMAP4 Extension for Returning MYRIGHTS Information in Extended LIST\n* [8457](https://tools.ietf.org/html/rfc8457): IMAP \"$Important\" Keyword and \"\\Important\" Special-Use Attribute\n* [8474](https://tools.ietf.org/html/rfc8474): IMAP Extension for Object Identifiers\n* [8508](https://tools.ietf.org/html/rfc8508): IMAP REPLACE Extension (Updates rfc3501)\n* [8514](https://tools.ietf.org/html/rfc8514): Internet Message Access Protocol (IMAP) - SAVEDATE Extension\n* [8689](https://tools.ietf.org/html/rfc8689): SMTP Require TLS Option\n* [8970](https://tools.ietf.org/html/rfc8970): IMAP4 Extension: Message Preview Generation\n* [9051](https://tools.ietf.org/html/rfc9051): Internet Message Access Protocol (IMAP) - Version 4rev2\n* [9208](https://tools.ietf.org/html/rfc9208): IMAP QUOTA Extension (Obsoletes rfc2087)\n* [9394](https://tools.ietf.org/html/rfc9394): IMAP PARTIAL Extension for Paged SEARCH and FETCH\n"
  },
  {
    "path": "ReleaseNotes.md",
    "content": "# Release Notes\n\n## MailKit 4.15.1 (2026-03-04)\n\n* SECURITY: Bumped MimeKit to 4.15.1 for a security fix that prevents mailbox addresses from being allowed\n  to contain CRLF sequences which can be used to inject SMTP commands in the SmtpClient when it sends\n  `MAIL FROM` or `RCPT TO` commands.\n\n## MailKit 4.15.0 (2026-02-15)\n\n* Default the SmtpClient/Pop3Client/ImapClient.SslProtocols to the ServicePointManager.SecurityProtocol\n  value in .NET Framework (net4x). (issue [#1952](https://github.com/jstedfast/MailKit/issues/1952))\n* Added support for.NET 10.\n* Marked IMailService.SslCipherAlgorithm, SslCipherStrength, SslHashAlgorithm, SslHashStrength,\n  SslKeyExchangeAlgorithm, and SslKeyExchangeStrength as Obsolete in .NET 10 in favor of the\n  IMailService.SslCipherSuite property (.NET 10 only).\n* Bumped MimeKit dependency to 4.15.0.\n\n## MailKit 4.14.1 (2025-10-13)\n\n* Re-added NTLM to the list of mechanisms to try by default.\n  (issue [#1953](https://github.com/jstedfast/MailKit/issues/1953))\n* Fixed IMAP to treat '+' as a normal Atom token.\n  (issue [#1956](https://github.com/jstedfast/MailKit/issues/1956))\n* Added fallback logic for imap.strato.de if LIST doesn't return the INBOX.\n  (issue [#1957](https://github.com/jstedfast/MailKit/issues/1957))\n\n## MailKit 4.14.0 (2025-09-28)\n\n* Updated MailService::GetSslClientAuthenticationOptions to be protected virtual.\n  (issue [#1931](https://github.com/jstedfast/MailKit/issues/1931))\n* Fixed initialization of SaslMechanism to lazily check if GSSAPI and/or NTLM are\n  supported (natively) to avoid undesirable error messages appearing in dotnet logs\n  on Linux systems. (issue [#1924](https://github.com/jstedfast/MailKit/issues/1924))\n* Bumped MimeKit dependency to 4.14.0.\n\n## MailKit 4.13.0 (2025-06-25)\n\n* Fixed tokenization of IMAP atom tokens that start with '+'.\n  (issue [#1914](https://github.com/jstedfast/MailKit/issues/1914))\n* Fixed the Imap/Pop3/Smtp clients to no longer fallback to using the\n  ServicePointManager.ServerCertificateValidationCallback method on .NET Core.\n  (issue [#1925](https://github.com/jstedfast/MailKit/issues/1925))\n* Bumped MimeKit dependency to 4.13.0.\n\n## MailKit 4.12.1 (2025-05-17)\n\n* Fixed authentication bugs introduced into 4.12.0 related to adding GSSAPI and native NTLM auth support\n  which causes problems on Linux/Mac.\n  (issue [#1910](https://github.com/jstedfast/MailKit/issues/1910))\n  (issue [#1911](https://github.com/jstedfast/MailKit/issues/1911))\n* Reverted System.Threading.Tasks.Extensions dependency back to 4.6.2.\n* Reverted System.Formats.Asn1 dependency back to 8.0.1.\n\n## MailKit 4.12.0 (2025-04-28)\n\n* Added support for native NTLM auth (using .NET Core's NegotiateAuthentication API).\n  This new class is called SaslMechanismNtlmNative and is the default NTLM mechanism\n  used by MailKit clients on net8.0+.\n* Added support for the GSSAPI SASL mechanism for net8.0+.\n  (issue [#1249](https://github.com/jstedfast/MailKit/issues/1249))\n* Fixed MailFolder.FirstUnread to be initialized to -1 to indicate unknown.\n  (issue [#1898](https://github.com/jstedfast/MailKit/issues/1898))\n* Added support for non-compliant keywords that begin with '\\'.\n  (issue [#1906](https://github.com/jstedfast/MailKit/issues/1906))\n* Added SearchQuery.HasKeywords/NotKeywords() overloads that take params instead of IEnumerable&lt;string&gt;.\n* Bumped System.Threading.Tasks.Extensions from 4.6.2 to 4.6.3.\n* Bumped System.Formats.Asn1 from 8.0.1 to 8.0.2.\n* Bumped MimeKit dependency to 4.12.0.\n\n## MailKit 4.11.0 (2025-03-08)\n\n* Default MailService.SslProtocols to SslProtocols.None which is what the dotnet SslStream team recommends.\n  (As weird as it may seem, SslProtocols.None does not mean \"don't support any SSL protocols\", it means\n  don't override the default system settings.)\n* Bumped MimeKit dependency to 4.11.0.\n\n## MailKit 4.10.0 (2025-01-26)\n\n* Work around a QQMail/Yandex IMAP BODYSTRUCTURE response for empty multipart.\n  (issue [#1861](https://github.com/jstedfast/MailKit/issues/1861))\n* Added exception documentation for methods in IMailFolder.\n  (issue [#1868](https://github.com/jstedfast/MailKit/issues/1868))\n* Added IMailFolder.CanOpen property that checks IMailFolder.Attributes for NoSelect and NonExistent flags.\n* Bumped MimeKit dependency to 4.10.0.\n\n## MailKit 4.9.0 (2024-12-09)\n\n* Added an IMAP work-around for mail.ru which sometimes sends integer tokens as decimals in its responses.\n  (issue [#1838](https://github.com/jstedfast/MailKit/issues/1838))\n* Added a workaround for GMail IMAP BODY responses that include multipart expressions without any children\n  (e.g. `(\"ALTERNATIVE\")`). (issue [#1841](https://github.com/jstedfast/MailKit/issues/1841))\n* Fixed default system proxy to handle null credentials and check if the targetUri is bypassed.\n  (issue [#1852](https://github.com/jstedfast/MailKit/issues/1852))\n* Dropped support for net6.0 (Microsoft support ended Nov 12, 2024).\n* Bumped System.Threading.Tasks.Extensions dependency to 4.6.0.\n* Bumped MimeKit dependency to 4.9.0.\n\n## MailKit 4.8.0 (2024-09-29)\n\n* Added a UniqueIdRange.SortOrder property.\n* Updated the protocol log help link for ProtocolExceptions.\n  (issue [#1800](https://github.com/jstedfast/MailKit/issues/1800))\n* Fix SmtpClient.Dispose() when telemetry is configured.\n  (issue [#1816](https://github.com/jstedfast/MailKit/issues/1816))\n* Added ProxyClient.SystemProxy as a convenience property that wraps\n  the default system proxy (aka HttpClient.DefaultProxy) on net6.0+.\n\n## MailKit 4.7.1 (2024-07-12)\n\n* Fixed ImapClient and Pop3Client.Connect/Async() when OTEL is enabled.\n  (issue [#1765](https://github.com/jstedfast/MailKit/issues/1765))\n* Bumped MimeKit dependency to 4.7.1 to fix a denial of service security issue in the System.Formats.Asn1\n  dependency.\n\n## MailKit 4.7.0 (2024-06-29)\n\n* Added Activity/Metrics for Imap/Pop3/SmtpClient.\n  (issue [#1499](https://github.com/jstedfast/MailKit/issues/1499))\n* Bumped MimeKit dependency to 4.7.0.\n\n## MailKit 4.6.0 (2024-05-17)\n\n* Swallow SMTP RSET exceptions. These obscure other Send/SendAsync exceptions. Fixes a regression\n  introduced in 4.4.0. (issue [#1748](https://github.com/jstedfast/MailKit/issues/1748))\n* Fixed ImapUtils.FormatInternalDate() to properly handle negative timezone offsets with non-zero minutes.\n  (issue [#1743](https://github.com/jstedfast/MailKit/pull/1753))\n* Bumped MimeKit dependency to 4.6.0.\n\n## MailKit 4.5.0 (2024-04-13)\n\n* Added a new SmtpClient.RequireTLS property to fix sending mail via Strato.de.\n  (issue [#1737](https://github.com/jstedfast/MailKit/issues/1737))\n* Fixed SmtpClient to track the most recent response from the SMTP server in order to include\n  it in SmtpProtocolExceptions caused by unexpected server disconnects to provide more context.\n  (issue [#1744](https://github.com/jstedfast/MailKit/issues/1744))\n* Bumped MimeKit dependency to 4.5.0.\n\n## MailKit 4.4.0 (2024-03-02)\n\n* Added net8.0 targets\n* Split more sync/async logic to reduce allocations made by async state machines when\n  calling the synchronous public APIs instead of the async APIs.\n  (issue [#1335](https://github.com/jstedfast/MailKit/issues/1335))\n* Fixed logic for formatting IMAP FETCH HEADER.FIELDS.NOT corner case that was exposed by newly\n  added unit tests.\n* Fixed SmtpClient to disconnect during Authenticate/Async on socket errors.\n* Fixed SmtpClient's re-EHLO logic to disconnect on errors.\n* Added workaround for Zoho IMAP servers returning MODSEQ -1.\n  (issue [#1686](https://github.com/jstedfast/MailKit/issues/1686))\n* Added workaround for some IMAP servers that use () instead of NIL for an unset Content-Location header\n  in the BODYSTRUCTURE response.\n  (issue [#1700](https://github.com/jstedfast/MailKit/issues/1700))\n* Fixed an issue in the Socket.ConnectAsync logic that could result in unhandled exceptions on the\n  async thread if the ConnectAsync was cancelled.\n  (issue [#1703](https://github.com/jstedfast/MailKit/issues/1703))\n* Added work-around for Yandex IMAP GetBodyPart() response not including content.\n  (issue [#1708](https://github.com/jstedfast/MailKit/issues/1708))\n* Bumped MimeKit dependency to 4.4.0.\n\n## MailKit 4.3.0 (2023-11-11)\n\n* Fixed an ArgumentOutOfRangeException error in Fetch(int min, int max, ...) where min and max were greater\n  than folder.Count. (issue [#1640](https://github.com/jstedfast/MailKit/issues/1640))\n* Fixed parsing of IMAP FETCH (message/stream) responses with unsolicited FLAGS.\n* Fixed support for the IMAP FILTERS extension. Previously this extension was not properly detected.\n* When parsing IMAP CAPABILITIES, treat lone '+' tokens as atoms.\n  (issue [#1654](https://github.com/jstedfast/MailKit/issues/1654))\n* Bumped MimeKit dependency to 4.3.0.\n\n## MailKit 4.2.0 (2023-09-02)\n\n* Fixed a bug where the HttpProxyClient and HttpsProxyClient could end up reading the mail server greeting,\n  causing a connection failure for the ImapClient/Pop3Client/SmtpClient.\n  (issue [#1603](https://github.com/jstedfast/MailKit/issues/1603))\n* Parse IMAP quota values as ulongs instead of uints for GMail compatibility.\n  (issue [#1602](https://github.com/jstedfast/MailKit/issues/1602))\n* Added support for decoding SMTP DATA to the SmtpDataFilter.\n  (issue [#1607](https://github.com/jstedfast/MailKit/issues/1607))\n* Added a Pop3Client.Size property. (issue [#1623](https://github.com/jstedfast/MailKit/issues/1623))\n* Refactored more ImapClient commands to split sync/async implementations in order to improve\n  performance and reduce GC pressure. (issue [#1335](https://github.com/jstedfast/MailKit/issues/1335))\n* Added new IMailFolder.GetStream() methods that just take a uid/index and a BodyPart.\n* Added IMailFolder.GetStream/Async() methods that just take a uid or index.\n* Improved initial `List<IMessageSummary>` capacity estimation for `Fetch (IList<UniqueId>, ...)`.\n* Fixed ByteArrayBuilder.TrimNewLine() to check array bounds properly.\n  (issue [#1634](https://github.com/jstedfast/MailKit/issues/1634))\n* Bumped MimeKit dependency to 4.2.0.\n\n## MailKit 4.1.0 (2023-06-17)\n\n* Fixed queueing logic for pipelining SMTP and POP3 commands.\n  (issue [#1568](https://github.com/jstedfast/MailKit/issues/1568))\n* Improve SslHandshakeException diagnostic messages.\n  (issue [#1554](https://github.com/jstedfast/MailKit/issues/1554))\n* Bumped System.Formats.Asn1 dependency to 7.0.0.\n* Bumped MimeKit dependency to 4.1.0.\n\n## MailKit 4.0.0 (2023-04-15)\n\n* Marked the AccessRight and UniqueId structs as readonly.\n* Fixed POP3 client logic to calculate the needed bytes before converting commands into into the output buffer.\n* Ported to MimeKit v4.0 and BouncyCastle v2.1.1.\n\n## MailKit 3.6.0 (2023-03-04)\n\n* Decrement ImapFolder.Count when ImapClient receives an untagged EXPUNGE notification and emit a CountChanged event.\n  (issue [#1509](https://github.com/jstedfast/MailKit/issues/1509))\n* Avoid using the NAMESPACE command for Exchange 2003.\n  (issue [#1512](https://github.com/jstedfast/MailKit/issues/1512))\n* Added support for rfc8970 (IMAP4 Extension: Message Preview Generation).\n\n## MailKit 3.5.0 (2023-01-27)\n\n* Fixed bitmasking logic in SmtpClient.cs for deciding whether to use the BDAT command.\n* Fixed HttpProxyClient to call GetConnectCommand() *before* connecting a socket to prevent memory leaks when\n  connecting fails.\n* Improved the IMAP BODYSTRUCTURE parser to better handle broken responses.\n* Fixed bug in Envelope.Parse/TryParse when given `(NIL NIL \"\" \"localhost\")`\n  (issue [#1471](https://github.com/jstedfast/MailKit/issues/1471))\n* Fixed SMTP client logic to calculate the needed bytes before converting commands into into the output buffer.\n  (issue [#1498](https://github.com/jstedfast/MailKit/issues/1498))\n* Fixed SmtpClient to replace _'s with -'s in the default LocalDomain string (used in HELO/EHLO commands).\n  (issue [#1501](https://github.com/jstedfast/MailKit/issues/1501))\n\n## MailKit 3.4.3 (2022-11-25)\n\n* Fixed potential memory leaks in Pop3Client.\n* Reverted SMTP pipelining of the DATA command. (issue [#1459](https://github.com/jstedfast/MailKit/issues/1459))\n* Fixed ImapFolder.Rename() to disallow renaming a folder to be a child of itself.\n* Fixed SmtpStream.ReadResponse/Async() to handle buffers that do not contain a complete line.\n  (issue [#1467](https://github.com/jstedfast/MailKit/issues/1467))\n\n## MailKit 3.4.2 (2022-10-24)\n\n* Fixed fetching of MessageSummaryItems.PreviewText if the octet count of the message body is 0.\n  (issue [#1430](https://github.com/jstedfast/MailKit/issues/1430))\n* Modified ImapFolder.Search(SearchOptions.None, query) work the same as ImapFolder.Search(query).\n  (issue [#1437](https://github.com/jstedfast/MailKit/issues/1437))\n* Improved performance of SmtpClient by reducing memory allocations and pipelining the DATA command when the PIPELINING\n  extension is available.\n* Refactored sync and async SmtpClient APIs such that the synchronous APIs no longer call methods marked with async in order\n  to reduce AsyncMethodBuilder state machines/allocations.\n* Modified SmtpClient to only send the ORCPT argument to RCPT TO if NOTIFY is specified.\n* Improved performance of Pop3Client by reducing memory allocations.\n* Refactored sync and async Pop3Client APIs such that the synchronous APIs no longer call methods marked with async in order\n  to reduce AsyncMethodBuilder state machines/allocations.\n* Improved IMAP's BODY/BODYSTRUCTURE parser to be able to scan ahead multiple tokens in order to better handle syntactically\n  incorrect responses in a more graceful way.\n  (issue [#1446](https://github.com/jstedfast/MailKit/issues/1446))\n* Improved IMAP's ENVELOPE parser to handle (\"Microsoft Exchange Server\" NIL NIL \".MISSING-HOST-NAME.\") in a more graceful way.\n  (issue [#1451](https://github.com/jstedfast/MailKit/issues/1451))\n\n## MailKit 3.4.1 (2022-09-12)\n\n* Reverted the socket connection change to allow Socket.Connect() to do DNS lookups for us. Turns out, Socket.Connect()\n  doesn't iterate over all returned IP addresses until it finds an IP address that it can successfully connect to\n  for a given hostname which is what we need to do.\n\n## MailKit 3.4.0 (2022-09-05)\n\n* Fixed a bug that caused ImapFolder.Fetch/FetchAsync to throw TaskCanceledException instead of allowing\n  the correct exception to bubble up. (issue [#1415](https://github.com/jstedfast/MailKit/issues/1415))\n* Simplified socket connection logic to allow Socket.Connect() to do DNS lookups for us.\n* Updated common mail server SSL certificates.\n* Dropped net5.0 support.\n\n## MailKit 3.3.0 (2022-06-11)\n\n* Added work-around for IMAP BODYSTRUCTURE responses that have a NIL multipart body.\n  (issue [#1393](https://github.com/jstedfast/MailKit/issues/1393))\n* Considerably reduced memory overhead from compiler-generated async/await Tasks allocations in the IMAP\n  implementation (mostly focused on FETCH commands/responses).\n  (issue [#1335](https://github.com/jstedfast/MailKit/issues/1335))\n* Optimized FETCH response processing for the common case where FETCH responses are returned in sorted order.\n* Fixed the IMAP Literal string reader to use UTF-8 with fallback to iso-8859-1 (previously just used iso-8859-1).\n* Modified the IMAP ENVELOPE parser to combine ENVELOPE mailbox tokens if there are more than 4.\n  (issue [#1369](https://github.com/jstedfast/MailKit/issues/1369))\n* Prevent TypeLoadExceptions in the SmtpClient static .ctor by catching NotSupportedExceptions thrown by\n  IPGlobalProperties.GetIPGlobalProperties() on platforms like WASM.\n  (issue [#1381](https://github.com/jstedfast/MailKit/issues/1381))\n* Updated Google, GMX, and Yahoo! Mail SSL certificates.\n* Dropped support for net452 and net461.\n* Added support for net462.\n\n## MailKit 3.2.0 (2022-03-26)\n\n* Do not use ApplicationProtocols with SSL. (issue [#1352](https://github.com/jstedfast/MailKit/issues/1352))\n* Updated GMail, Yahoo, and Outlook.com certificates.\n* Lazy-initialize MessageSummary.Keywords. This reduces memory usage when the client isn't requesting Flags/Keywords.\n* Hard-cache some IMAP FETCH-related tokens in order to relieve GC pressure for commands like FETCH where there can\n  be a LOT of responses containing the same tokens over and over again.\n* Converted some IMAP async Task methods to use ValueTask to reduce GC pressure.\n* Reduced string allocations in the IMAP logic by avoiding use of ToUpperInvariant().\n* Added non-async implementations for ImapStream APIs to be used by the synchronous public APIs to avoid some async overhead.\n* Reduce MemoryStream (and thus byte[]) allocations by using a new ByteArrayBuilder.\n* Rewrote the IMAP CAPABILITY parser to avoid allocating strings.\n* Fixed some cases where IMAP NIL tokens were not compared case insensitively.\n* Always include the VERSION block in NTLM messages. (issue [#1340](https://github.com/jstedfast/MailKit/issues/1340))\n* Target .NET Framework v4.6.1 instead of v4.6 to match the changes in MimeKit.\n* Capture the Socket timeout value in Read/WriteAsync() to have it in case of exceptions.\n  (issue [#1327](https://github.com/jstedfast/MailKit/issues/1327))\n\n## MailKit 3.1.1 (2022-01-30)\n\n* Reduced string allocations in Pop3Engine's capability parser.\n* Updated GMail and Outlook.com SSL certificates.\n* Modified SmtpClient to try and use the system hostname in EHLO/HELO commands.\n  (issue [#1314](https://github.com/jstedfast/MailKit/issues/1314))\n\n## MailKit 3.1.0 (2022-01-14)\n\n* Fixed NTLM to always prefer the supplied domain over the TargetName or TargetInfo.DomainName.\n  (issue [#582](https://github.com/jstedfast/MailKit/issues/582))\n* Updated GMail and Outlook.com SSL certificate info.\n* Added a new SslCipherSuite property to each client that allows developers to get information\n  about the SSL/TLS cipher suite that was negotiated with the server.\n  (pull [#1312](https://github.com/jstedfast/MailKit/pull/1312))\n* Reduced string allocations in SmtpClient's EHLO capability parsing logic.\n* Default ProtocolLogger.RedactSecrets to true for added added security.\n* Added work-around for parsing malformed GMail ENVELOPE responses that reverse the name and address components\n  of the Sender address. (pull [#1319](https://github.com/jstedfast/MailKit/pull/1319))\n* Added net6.0 to the list of TargetFrameworks.\n\n## MailKit 3.0.0 (2021-12-11)\n\n* Removed APIs marked as \\[Obsolete\\] in 2.x.\n* Simplify Fetch()/FetchAsync() APIs by using a new IFetchRequest parameter instead. Made previous APIs into\n  extension methods to aid in porting from 2.x.\n* Replaced Add/Remove/SetFlags() APIs with Store()/StoreAsync() and simplified the APIs by using a new\n  IStoreFlagsRequest parameter. Made previous APIs into extension methods to aid in porting from 2.x.\n* Replaced Add/Remove/SetLabels() APIs with Store()/StoreAsync() and simplified the APIs by using a new\n  IStoreLabelsRequest parameter. Made previous APIs into extension methods to aid in porting from 2.x.\n* Simplify Append()/AppendAsync() APIs by using a new IAppendRequest parameter instead. Made previous APIs into\n  extension methods to aid in porting from 2.x.\n* Simplify Replace()/ReplaceAsync() APIs by using a new IReplaceRequest parameter instead. Made previous APIs into\n  extension methods to aid in porting from 2.x.\n* Updated SmtpClient.Send()/SendAsync() methods to return a string.\n  (issue [#1161](https://github.com/jstedfast/MailKit/issues/1161))\n* Added support for the SCRAM-SHA*-PLUS SASL mechanisms.\n  (issue [#950](https://github.com/jstedfast/MailKit/issues/950))\n* Added authzid support for SCRAM SASL mechanisms.\n* Added support for the ANONYMOUS SASL mechanism.\n* Added support for an HttpsProxyClient. (issue [#1251](https://github.com/jstedfast/MailKit/issues/1251))\n* Added AcceptedKeywords and PermanentKeywords to IMailFolder.\n  (issue [#1256](https://github.com/jstedfast/MailKit/issues/1256))\n* Rewrote NTLM support based on official specs. Now supports channel-binding and using the default system credentials.\n* Modified ImapFolder.Fetch(int, int, ...) to shortcut if ImapFolder.Count == 0.\n* Updated SmtpClient to append an ORCPT arg to RCPT TO commands and to hex-encode the ENVID parameter value.\n* Improved/simplified logic for ranking SASL authentication mechanisms for each client.\n* Added SaslMechanism.ChallengeAsync() to facilitate future SASL mechanisms that may need to make network requests\n  such as Kerberos/GSSAPI and perhaps even future/custom OAuth2 implementations.\n* Always set SearchResults.Count/Min/Max properties if we can.\n* Throw TimeoutException is case of a network time out.\n  (issue [#1269](https://github.com/jstedfast/MailKit/issues/1269))\n* Fixed parsing of IMAP flag lists to handle lowercase flag names.\n  (issue [#1277](https://github.com/jstedfast/MailKit/issues/1277))\n* Use OrdinalIgnoreCase when comparing \"EARLIER\" atom token.\n* Avoid unnecessary string copies. (issue [#1292](https://github.com/jstedfast/MailKit/pull/1292))\n* Drop support for .NET 4.5 and replace it with .NET 4.5.2\n* Simplified event emissions based on EXISTS and EXPUNGED notifications. A CountChanged event is now *always*\n  emitted when the server sends an EXISTS notification.\n  (issue [#1288](https://github.com/jstedfast/MailKit/issues/1288))\n\n## MailKit 2.15.0 (2021-08-18)\n\n* Use DebugType=full for .NET Framework v4.x. (issue [#1239](https://github.com/jstedfast/MailKit/issues/1239))\n* Updated GMail SSL certificate serial numbers and fingerprints.\n* Small NTLM code improvements.\n\n## MailKit 2.14.0 (2021-07-28)\n\n* Added support for logging timestamps in the `ProtocolLogger` (see the `LogTimestamps` and `TimestampFormat`\n  properties on `ProtocolLogger`).\n* Added support for automatically redacting user credentials in protocol logs. To enable this, set the\n  `ProtocolLogger.RedactSecrets` property to `true`. (issue [#1174](https://github.com/jstedfast/MailKit/issues/1174))\n* Added the GetMessageSizeAsync() method to the IMailSpool interface.\n  (issue [#1233](https://github.com/jstedfast/MailKit/issues/1233))\n* Added a work-around to the IMAP INTERNALDATE parser to handle invalid dates such as \"00-Jan-0000 00:00:00 +0000\"\n  which appears in Domino IMAP server responses, likely when the INTERNALDATE value is uninitialized in the database.\n  (issue [#1236](https://github.com/jstedfast/MailKit/issues/1236))\n* Make sure to dispose X509Certificates in .NET >= 4.6.\n* Re-added NTLM as one of the default supported SASL mechanisms.\n* Updated GMail SSL certificate serial numbers and fingerprints.\n\n## MailKit 2.13.0 (2021-06-12)\n\n* Added new properties to all clients to get SSL cipher/hash/protocol/key-exchange info.\n  (issue [#1175](https://github.com/jstedfast/MailKit/issues/1175))\n* Added support for GMail's WEBALERT resp-code.\n  (issue [#1214](https://github.com/jstedfast/MailKit/issues/1214))\n* Updated GMail SSL certificate serial numbers and fingerprints.\n\n## MailKit 2.12.0 (2021-05-12)\n\n* Fixed the .NET 5.0 build to include .NET 5.0-specific features. Previous releases incorrectly used\n  #if NET50 instead of #if NET5_0. (issue [#1140](https://github.com/jstedfast/MailKit/issues/1140))\n* Added support for NETStandard 2.1. (issue [#1181](https://github.com/jstedfast/MailKit/issues/1181))\n* .NETStandard 2.1 and .NET 5.0 versions of MailKit now use the newer SslStream.AuthenticateAsClientAsync()\n  methods that take SslClientAuthenticationOptions and CancellationToken arguments. In theory, this should\n  make upgrading a TCP/IP connection to SSL/TLS cancellable. Older .NET frameworks remain uncancellable for\n  this operation.\n* Fixed a NullReferenceException bug in the NTLM SASL mechanism logic.\n* Updated hard-coded SSL certificate serial numbers and fingerprints for common mail servers.\n\n## MailKit 2.11.1 (2021-03-16)\n\n* Added work-around for IMAP servers that do not correctly handle the ESEARCH `RETURN ()` syntax\n  the same as `RETURN (ALL)`. (issue [#1177](https://github.com/jstedfast/MailKit/issues/1177))\n\n## MailKit 2.11.0 (2021-03-12)\n\n* Handle BAD responses to the NAMESPACE command for Exchange.\n  (issue [#1135](https://github.com/jstedfast/MailKit/issues/1135))\n* Added support for configuring SSL/TLS cipher algorithms (only available in the .NET 5.0 API).\n  (issue [#1140](https://github.com/jstedfast/MailKit/issues/1140))\n* Updated GMail and Yahoo! Mail SSL certificate info.\n* Protect against NREs in NTLM authentication of no OSVersion is set.\n  (issue [#1148](https://github.com/jstedfast/MailKit/issues/1148))\n* Added work-around for hMailServer bug that doesn't accept seq-ranges in descending order.\n  (issue [#1150](https://github.com/jstedfast/MailKit/issues/1150))\n* Properly escape IPv6 addresses for Uri in order to allow Connect/Async methods to work with IPv6 addresses.\n  (issue [#1165](https://github.com/jstedfast/MailKit/issues/1165))\n* Added IsEncrypted and IsSigned properties to IMailService.\n  (issue [#1175](https://github.com/jstedfast/MailKit/issues/1175))\n\n## MailKit 2.10.1 (2021-01-02)\n\n* A few NTLM improvements that I hope are correct.\n\n## MailKit 2.10.0 (2020-11-20)\n\n* Don't enable support for TLS v1.1 by default anymore.\n  (issue [#1077](https://github.com/jstedfast/MailKit/issues/1077))\n* Added support for the SCRAM-SHA-512 SASL mechanism.\n  (issue [#1097](https://github.com/jstedfast/MailKit/issues/1097))\n* Added support for the OAUTHBEARER SASL mechanism.\n* Updated SSL certificate info for the common mail servers (GMail, outlook.com, Yahoo! Mail, etc).\n* Improved the SslHandshakeException error message to report common mistakes like trying to initiate\n  an SSL connection on a non-SSL port.\n* Improved IMAP's \"Unexpected token\" exception messages a bit\n* Updated code to use ArrayPools from System.Buffers.\n\n## MailKit 2.9.0 (2020-09-12)\n\n* Refactored Connect/ConnectAsync() logic to set timeouts *before* calling SslStream.AuthenticateAsClient()\n  when connecting to an SSL-wrapped service.\n  (issue [#1059](https://github.com/jstedfast/MailKit/issues/1059))\n* Hardcode the value of SslProtocols.Tls13 for frameworks that do not support it and add it to the\n  client's default SslProtocols. This adds TLS v1.3 support, by default, for apps using .NETStandard2.0\n  where the app project is built against a version of .NETCore that supports TLS v1.3.\n  (issue [#1058](https://github.com/jstedfast/MailKit/issues/1058))\n* Initialize IMAP SearchResults with the UIDVALIDITY value.\n  (issue [#1060](https://github.com/jstedfast/MailKit/issues/1060))\n* Make sure the ImapStream is not null (can be null if user calls Disconnect() causing IDLE to abort).\n  (issue [#1025](https://github.com/jstedfast/MailKit/issues/1025))\n* Case-insensitively match IMAP folder attribute flags (e.g. \\HasNoChildren and \\NoSelect).\n* Added support for the IMAP SAVEDATE extension.\n* Added support for detecting SMTP's REQUIRETLS extension.\n\n## MailKit 2.8.0 (2020-07-11)\n\n* Make sure to use the InvariantCulture when converting port values to a string.\n  (issue [#1040](https://github.com/jstedfast/MailKit/issues/1040))\n* Fixed other instances of string formatting for integer values to always use\n  CultureInfo.InvariantCulture.\n* Added a work-around for broken IMAP servers that allow NIL message flags.\n  (issue [#1042](https://github.com/jstedfast/MailKit/issues/1042))\n\n## MailKit 2.7.0 (2020-05-30)\n\n* Added a MessageSummary.Folder property and MessageThread.Message property\n  to allow developers to thread messages from multiple IMAP folders and be\n  able to figure out which folder each message belongs to.\n* Added a work-around for IMAP servers that send a UIDNEXT response with a\n  value of '0'. (issue [#1010](https://github.com/jstedfast/MailKit/issues/1010))\n* Added an IMailFolder.Supports(FolderFeature) method so that developers can check\n  whether a feature is supported by the folder without needing a reference to the\n  corresponding ImapClient object in order to check the Capabilities.\n* Fixed the HTTP proxy client to accept \"200 OK\" with an empty body as a successful\n  connection. (issue [#1015](https://github.com/jstedfast/MailKit/issues/1015))\n* Fixed the SOCKS5 proxy client to correctly send an authentication request.\n  (issue [#1019](https://github.com/jstedfast/MailKit/issues/1019))\n* Added support for customizable ProtocolLogger client/server prefixes.\n  (issue [#1024](https://github.com/jstedfast/MailKit/issues/1024))\n* Fixed an NRE in SslHandshakeException.Create() when running on Mono/Linux.\n* Modified the SmtpClient to take advantage of the SMTPUTF8 extension for the\n  `MAIL FROM` and `RCPT TO` commands even if a `options.International` is not\n  explicitly set to `true` if any of the mailbox addresses are international\n  addresses.\n  (issue [#1026](https://github.com/jstedfast/MailKit/issues/1026))\n* Added support for a new Important SpecialFolder ([rfc8457](https://tools.ietf.org/html/rfc8457)).\n* Added support for the IMAP REPLACE extension ([rfc8508](https://tools.ietf.org/html/rfc8508)).\n* NuGet packages now include the portable pdb's.\n\n## MailKit 2.6.0 (2020-04-03)\n\n* Properly handle connection drops in SmtpClient.NoOp() and NoOpAsync()\n  methods.\n* Improved default SSL certificate validation logic to be more secure\n  and to recognize the most commonly used mail servers even if their\n  Root CA Certificates are not available on the system.\n* SslHandshakeException's Message has been improved to be based on the\n  errors reported in the ServerCertificateValidationCallback and also\n  now has 2 new X509Certificate properties which represent the\n  ServerCertificate and the RootCertificateAuthority in order to help\n  developers diagnose problems.\n  (issue [#1002](https://github.com/jstedfast/MailKit/issues/1002))\n* Improved the IMAP PreviewText to extract text from HTML bodies.\n  (issue [#1001](https://github.com/jstedfast/MailKit/issues/1001))\n* Renamed MessageSummaryItems.Id to MessageSummaryItems.EmailId to\n  better map to the property name used in the IMAP OBJECTID\n  specification.\n* Updated NetworkStream.ReadAsync() and WriteAsync() methods to make use of\n  timeouts. (issue [#827](https://github.com/jstedfast/MailKit/issues/827))\n\n## MailKit 2.5.2 (2020-03-14)\n\n* Added work-around for ENVELOPE responses with a NIL address token in an address-list.\n  (issue [#991](https://github.com/jstedfast/MailKit/issues/991))\n\n## MailKit 2.5.1 (2020-02-15)\n\n* Fixed the IMAP ENVELOPE parser to have a more lenient fallback if it fails to be able to\n  parse the Message-Id token value.\n  (issue [#976](https://github.com/jstedfast/MailKit/issues/976))\n* Fixed MailService.DefaultServerCertificateValidationCallback() to compare certificates by\n  their hashes rather than via Object.Equals().\n  (issue [#977](https://github.com/jstedfast/MailKit/issues/977))\n* Added work-around for IMAP servers that send `-1` as a line count or octet count in the\n  BODYSTRUCTURE response.\n\n## MailKit 2.5.0 (2020-01-18)\n\n* Ignore NIL tokens in the body-fld-lang token list.\n  (issue [#953](https://github.com/jstedfast/MailKit/issues/953))\n* Added logic to handle unexpected `<CR><LF>` in untagged FETCH responses.\n  (issue [#954](https://github.com/jstedfast/MailKit/issues/954))\n* Added a way to override SmtpClient's preference for using BDAT vs DATA\n  via a new PreferSendAsBinaryData virtual property.\n* Update SslHandshakeException message to mention the possibility of SSL/TLS\n  version mismatch.\n  (issue [#957](https://github.com/jstedfast/MailKit/issues/957))\n* Fixed ImapFolder.GetStreamsAsync() to use an async callback delegate.\n  (issue [#958](https://github.com/jstedfast/MailKit/issues/958))\n* Added protocol-specific interfaces that inherit from IMailFolder,\n  IMailStore, etc.\n  (issue [#960](https://github.com/jstedfast/MailKit/issues/960))\n* Maintain the STARTTLS capability bit flag after a STARTTLS command.\n* Don't send the optional ANNOTATE parameter to SELECT/EXAMINE for\n  SUN IMAP servers (such as Apple's IMAP servers).\n  (issue [#970](https://github.com/jstedfast/MailKit/issues/970))\n\nNote: Developers using ImapFolder.GetStreamsAsync() will need to update their code as\nthis release breaks API/ABI.\n\n## MailKit 2.4.1 (2019-11-10)\n\n* Don't use PublicSign on non-Windows NT machines when building.\n* Work-around broken BODYSTRUCTUREs with `()` as a message/rfc822 body token.\n  (issue [#944](https://github.com/jstedfast/MailKit/issues/944))\n* Added work-around for an Exchange bug that forgets to quote folder names containing tabs.\n  (issue [#945](https://github.com/jstedfast/MailKit/issues/945))\n* Moved the SmtpDataFilter into the public API and updated the FAQ to show how to\n  use it when writing messages into an IIS \"pickup directory\".\n  (issue [#948](https://github.com/jstedfast/MailKit/issues/948))\n\n## MailKit 2.4.0 (2019-11-02)\n\n* Added work-around for IMAP ENVELOPE responses that do not include an In-Reply-To token.\n  (issue [#932](https://github.com/jstedfast/MailKit/issues/932))\n* Dropped support for WindowsPhone/Universal v8.1.\n* Added a net48 assembly to the NuGet package which supports TLS v1.3.\n* Added work-around for Yandex IMAP servers to disconnect immediately upon `* BYE`.\n  (issue [#938](https://github.com/jstedfast/MailKit/issues/938))\n* Fixed ImapClient.Idle() and IdleAsync().\n  (issue [#942](https://github.com/jstedfast/MailKit/issues/942))\n* Added work-around for Lotus Domino where it adds extra ()'s around some FETCH items.\n  (issue [#943](https://github.com/jstedfast/MailKit/issues/943))\n\n## MailKit 2.3.2 (2019-10-12)\n\n* Fixed trimming delimiters from the end of IMAP folder names.\n* Fixed fetching of IMAP PreviewText when message bodies do not contain any text parts.\n* Fixed Pop3Client to never emit Authenticated events w/ null messages.\n* Dropped SslProtocols.Tls (aka TLSv1.0) from the default SslProtocols used by IMAP, POP3\n  and SMTP clients. To override this behavior, use the client.SslProtocols property\n  to set the preferred SslProtocol(s).\n* Fixed ImapFolder.Search(string query) to properly encode the query string when the query\n  contains unicode characters.\n* If an IMAP SEARCH fails due to BADCHARSET, retry the search query after flattening the\n  query strings into US-ASCII. This *may* fix issues such as\n  issue [#808](https://github.com/jstedfast/MailKit/issues/808).\n* Added work-arounds for Exchange IMAP bugs causing it to send mal-formed body-fld-dsp\n  parameters. (issue [#919](https://github.com/jstedfast/MailKit/issues/919))\n* Go back to only using the BDAT command when the user is sending BINARYMIME in the SmtpClient.\n  (issue [#921](https://github.com/jstedfast/MailKit/issues/921))\n\n## MailKit 2.3.1 (2019-09-08)\n\n* Fixed SmtpClient.Send*() to make sure never to add an extra CRLF sequence to the end of\n  messages when sending via the DATA command.\n  (issue [#895](https://github.com/jstedfast/MailKit/issues/895))\n* Added assemblies for net46 and net47 to the NuGet package.\n\n## MailKit 2.3.0 (2019-08-24)\n\n* Improved the default SSL/TLS certificate validation logic.\n* Improved exception messages for the POP3 LIST and STAT commands.\n* Modified Pop3Client to accept negative values for the 'octets' value in the STAT response.\n  (issue [#872](https://github.com/jstedfast/MailKit/issues/872))\n* Added work-around for IMAP BODYSTRUCTURE responses that treat multiparts as basic parts.\n  (issue [#878](https://github.com/jstedfast/MailKit/issues/878))\n* Added check to make sure that MD5 is supported by the runtime and automatically disable\n  support for CRAM-MD5 and DIGEST-MD5 SASL mechanisms when MD5 is not supported.\n* Added a Stream property to ProtocolLogger.\n* Fixed fetching of PreviewText items if the body's ContentTransferEncoding is NIL.\n  (issue [#881](https://github.com/jstedfast/MailKit/issues/881))\n* Improved processing of pipelined SMTP commands to provide better exception messages.\n  (issue [#883](https://github.com/jstedfast/MailKit/issues/883))\n* Modified SmtpClient.Send*() to not call MimeMessage.Prepare() if any DKIM or ARC headers\n  are present in order to avoid the potential risk of altering the message and breaking\n  the signatures within those headers.\n* Added SmtpClient.SendCommand() and SendCommandAsync() to allow custom subclasses the\n  ability to send custom commands to the SMTP server.\n  (issue [#891](https://github.com/jstedfast/MailKit/issues/891))\n* Allow SmtpClient subclasses to override message preparation by overriding a new\n  SmtpClient.Prepare() method.\n  (issue [#891](https://github.com/jstedfast/MailKit/issues/891))\n* Improved ImapFolder's ModSeqChanged event to set the UniqueId property if available\n  in unsolicited FETCH notifications including a MODSEQ and UID value.\n* Fixed the IMAP client logic to properly handle lower or mixed case IMAP tokens.\n  (issue [#893](https://github.com/jstedfast/MailKit/issues/893))\n* Added support for IMAP's ANNOTATE-EXPERIMENT-1 extension.\n  (issue [#818](https://github.com/jstedfast/MailKit/issues/818))\n* Always use the SMTP BDAT command instead of DATA if CHUNKING is supported.\n  (issue [#896](https://github.com/jstedfast/MailKit/issues/896))\n* Improved SmtpClient to include a SIZE= parameter in the MAIL FROM command if the\n  SIZE extension is supported. Progress reporting will now always have the expected\n  message size available as well.\n\n## MailKit 2.2.0 (2019-06-11)\n\n* Optimized MailKit's logic for breaking apart long IMAP commands for\n  GMail, Dovecot, and Yahoo! Mail.\n* Fixed the IMAP stream tokenizer to properly handle UTF8 atom tokens.\n  (issue [#859](https://github.com/jstedfast/MailKit/issues/859))\n* Fixed IMAP search code to always handle untagged SEARCH responses even when\n  the response SHOULD be an untagged ESEARCH response.\n  (issue [#863](https://github.com/jstedfast/MailKit/issues/863))\n* Replaced SearchQuery.SentAfter with SentSince to be more consistent with IMAP\n  terminology.\n\n## MailKit 2.1.5 (2019-05-13)\n\n* Bumped the System.Net.Security dependency for security fixes (CVE-2017-0249).\n* Reduced explicit nuget dependencies.\n* Added a work-around for Microsoft Exchange IMAP servers that sometimes erroneously\n  respond with unneeded continuation responses.\n  (issue [#852](https://github.com/jstedfast/MailKit/issues/852))\n* Fixed the ImapClient to Stop looping over SASL mechanisms if the server disconnects us.\n  (issue [#851](https://github.com/jstedfast/MailKit/issues/851))\n* Added support for HTTP proxies. (issue [#847](https://github.com/jstedfast/MailKit/issues/847))\n* Fixed IMAP to properly handle EXPUNGE notifications during a FETCH request.\n  (issue [#850](https://github.com/jstedfast/MailKit/issues/850))\n\n## MailKit 2.1.4 (2019-04-13)\n\n* Fixed ImapUtils.GetUniqueHeaders() to accept all valid header field name characters.\n  (issue [#806](https://github.com/jstedfast/MailKit/issues/806))\n* Catch all exceptions thrown in IdleComplete().\n  (issue [#825](https://github.com/jstedfast/MailKit/issues/825))\n* Improved cancellability of IMAP, POP3 and SMTP clients when sending commands to the server.\n  (issue [#827](https://github.com/jstedfast/MailKit/issues/827))\n* Break apart IMAP commands with really long uid-sets.\n  (issue [#834](https://github.com/jstedfast/MailKit/issues/834))\n* Rewrote Connect logic to use Socket.Connect (IPAddress, int) instead of Connect (string, int)\n  in an attempt to fix [StackOverflow 87117](https://stackoverflow.com/q/55382267/87117)\n* Fixed SmtpStream.ReadAheadAsync() to preserve remaining input.\n  (issue [#842](https://github.com/jstedfast/MailKit/issues/842))\n\n## MailKit 2.1.3 (2019-02-24)\n\n* Fixed IMAP GetFolder() methods to match LIST responses case-insensitively.\n  (issue [#803](https://github.com/jstedfast/MailKit/issues/803))\n* Added a work-around to SmtpClient for a .NET 4.5.2 bug on Windows 7 SP1.\n  (issue [#814](https://github.com/jstedfast/MailKit/issues/814))\n* Added DeliveryStatusNotificationType and a property to SmtpClient to allow\n  developers to specify the `RET` parameter value to the `MAIL FROM` command.\n* Fixed a number of locations in the code to clear password buffers after using\n  them.\n* SmtpClient.Send() and SendAsync() methods that accept a FormatOptions argument\n  will no longer hide Bcc, Resent-Bcc, nor Content-Length headers when uploading\n  the raw message to the SMTP server. It is now up to callers to add these values\n  to their custom FormatOptions.HiddenHeaders property.\n  (issue [#360](https://github.com/jstedfast/MailKit/issues/360))\n\n## MailKit 2.1.2 (2018-12-30)\n\n* Fixed a bug in SmtpDataFilter. (issue [#788](https://github.com/jstedfast/MailKit/issues/788))\n* Fixed ImapFolder.Sort() to always return the UIDs in the correct order.\n  (issue [#789](https://github.com/jstedfast/MailKit/issues/789))\n* Fixed *Client.ConnectAsync() to more reliably abort when the cancellation token is cancelled.\n  (issue [#798](https://github.com/jstedfast/MailKit/issues/798))\n\n## MailKit 2.1.1 (2018-12-16)\n\n* Fixed ImapFolder.CopyTo() and ImapFolder.MoveTo() for IMAP servers that do not support UIDPLUS.\n  (issue [#787](https://github.com/jstedfast/MailKit/issues/787))\n* Fixed ImapClient.Connect() to capture authenticated state *before* calling OnConnected() so that\n  developers that call Authenticate() inside of the Connected event handler do not receive 2 Authenticated\n  events. (issue [#784](https://github.com/jstedfast/MailKit/issues/784))\n\n## MailKit 2.1.0 (2018-12-01)\n\n* A number of fixes to bugs exposed in new unit tests for NTLM authentication.\n* Made SmtpClient, Pop3Client, and ImapClient's Connect() methods truly cancellable as well\n  as made the underlying socket.Connect() call adhere to any specified client.Timeout value.\n* Added support for connecting via a SOCKS4, SOCKS4a, or SOCKS5 proxy server.\n* Fixed ImapClient's OnAuthenticated() method to protect against throwing an ArgumentNullException\n  when trying to emit the Authenticated event if the server did not supply any resp-code-text in\n  the OK response to the AUTHENTICATE command. (issue [#774](https://github.com/jstedfast/MailKit/issues/774))\n* Modified ImapFolder.Create() to handle [ALREADYEXISTS] resp-codes.\n* Fixed ImapFolder.Create() for GMail when the isMessageFolder parameter is false (GMail doesn't handle\n  it when the client attempts to create a folder ending with a directory separator).\n* Optimized ImapFolder's fallback for UID COPY command when UIDPLUS is not supported.\n* Reduced string allocations in the Connect(Uri) wrapper.\n* Added new ConnectedEventArgs and DisconnectedEventArgs that are used with the Connected and\n  Disconnected events to provide developers with even more useful information about what\n  server, port and SecureSocketOptions were used when connecting the client.\n* Fixed SmtpClient to immediately throw stream reading exceptions instead of ignoring them.\n  (issue [#776](https://github.com/jstedfast/MailKit/issues/776))\n* Fixed ImapClient.GetFoldersAsync() to call ImapFolder.StatusAsync() instead of Status()\n  when StatusItems are specified.\n* Changed ImapFolder.GetSubfolders() to return IList&lt;IMailFolder&gt; instead of IEnumerable&lt;IMailFolder&gt;.\n* Fixed ImapClient's NAMESPACE parser - it had Shared and Other namespace ordering reversed.\n* Fixed ImapFolder.Create() (for special-use) to only use unique uses if any were specified multiple times.\n* Modified ImapFolder.Open() to allow devs to re-Open() a folder with the same access in case they\n  need to do this to work around an IMAP server bug(?).\n* Fixed adding/removing/setting of GMail labels to use UTF-8 when enabled.\n* Added support for the IMAP STATUS=SIZE extension which now provides a ImapFolder.Size property\n  that specifies how large a folder is (in bytes). Clients can request this information using the\n  StatusItems.Size enum with either ImapFolder.GetSubfolders() or ImapFolder.Status().\n* Added support for the IMAP OBJECTID extension. ImapFolder and IMessageSummary now both have\n  an Id property which is a globally unique identifier. IMessageSummary also now has a ThreadId\n  property which is a unique identifier for the message thread/conversation that the message\n  belongs to. This information can be retrieved for ImapFolders using ImapFolder.Status() with the\n  new StatusItems.MailboxId enum value. The IMessageSummary.Id and ThreadId properties have\n  the corresponding MessageSummaryItems enum values of Id and ThreadId, respectively.\n* Added another work-around for bad GMail IMAP BODYSTRUCTURE responses.\n  (issue [#777](https://github.com/jstedfast/MailKit/issues/777))\n* Fixed all integer TryParse methods to use NumberStyles.None and CultureInfo.InvariantCulture.\n* Added Connect() and ConnectAsync() overloads which accept a Stream instead of a Socket.\n* All ImapFolder.MessageFlagsChanged, ModSeqChanged, and LabelsChanged events will now also be\n  followed by a MessageSummaryFetched event containing the combined information of those events.\n* Added support for IMAP's NOTIFY extension. Many thanks to [Steffen Kieß](https://github.com/steffen-kiess)\n  for getting the ball rolling on this feature by implementing the necessary ImapEvent, ImapEventGroup,\n  and ImapMailboxFilter classes as well as the initial support.\n\nAPI Changes Since 2.0.x:\n\n* Obsoleted SearchQuery.HasCustomFlags() and SearchQuery.DoesNotHaveCustomFlags(). These are\n  now SearchQuery.HasKeywords() and SearchQuery.NotKeywords(), respectively.\n* Obsoleted SearchQuery.DoesNotHaveFlags() in favor of SearchQuery.NotFlags().\n* Obsoleted the IMessageSummary.UserFlags property in favor of IMessageSummary.Keywords.\n* Obsoleted the MessageFlagsChangedEventArgs.UserFlags property in favor of\n  MessageFlagsChangedEventArgs.Keywords.\n* All IMailFolder.Fetch and IMailFolder.FetchAsync methods that took a HashSet&lt;string&gt; userFlags\n  argument now take an IEnumerable&lt;string&gt; keywords argument. Note: this only affects you if your\n  code used named method parameters (e.g. userFlags: myUserFlags).\n\n## MailKit 2.0.7 (2018-10-28)\n\n* Added a work-around for Exchange IMAP servers that send broken multipart BODYSTRUCTURE responses\n  without a `body-fld-dsp` token.\n* Added support for detecting (but not using) the UNAUTHENTICATE IMAP extension.\n* Reintroduced the Pop3Client.GetMessageCount() and GetMessageCountAsync() methods to allow developers\n  to poll POP3 servers for new messages. (issue [#762](https://github.com/jstedfast/MailKit/issues/762))\n* Fixed SmtpClient's status code logic to handle more than the expected error codes for the\n  `MAIL FROM` and `RCPT TO` commands. (issue [#764](https://github.com/jstedfast/MailKit/issues/764))\n* Added a work-around for IMAP servers that quote FLAGS responses.\n  (issue [#771](https://github.com/jstedfast/MailKit/issues/771))\n* Optimized SmtpClient's logic for byte-stuffing the message when writing it to the socket during\n  the `DATA` command.\n* Added an `SslProtocols` property to IMailService (was already in MailService).\n* Fixed the DIGEST-MD5 charset handling.\n* Fixed a bug in the BodyPart.TryParse() method that could be used when serializing and deserializing\n  FETCH'd responses from an IMAP server.\n* Fixed BodyPartCollection.IndexOf(Uri).\n* Fixed Envelope.ToString() and TryParse() to properly deal with the rfc822 group address syntax.\n* Fixed the ImapClient logic to properly handle parsing nested group addresses (not likely that\n  anyone would hit this).\n* Improved ImapClient's state tracking so that it is possible to re-connect the ImapClient in the\n  Disconnected event handler. (issue [#770](https://github.com/jstedfast/MailKit/issues/770))\n* Fixed IMAP API's that take IList of UIDs or indexes to accept 0 UIDs/indexes.\n* Fixed ImapClient's BODYSTRUCTURE parser to properly handle multiple body-extensions tokens.\n* Fixed ImapClient to properly handle the `* PREAUTH` greeting when connecting to an IMAP server.\n\n## MailKit 2.0.6 (2018-08-04)\n\n* Fixed ImapFolder.GetSubfolders (StatusItems) to make sure that the child folders exist before\n  calling STATUS on them when the server does not support the LIST-STATUS command.\n* Catch ArgumentExceptions when calling Encoding.GetEncoding(string).\n  (issue [#740](https://github.com/jstedfast/MailKit/issues/740))\n* Fixed parsing of IMAP threads where the root of a subtree is empty.\n  (issue [#739](https://github.com/jstedfast/MailKit/issues/739))\n* Added AuthorizationId property for PLAIN and DIGEST-MD5 SASL mechanisms.\n* Added MessageSummaryItems.Headers enum to fetch all headers.\n  (issue [#738](https://github.com/jstedfast/MailKit/issues/738))\n\n## MailKit 2.0.5 (2018-07-07)\n\n* When throwing AuthenticationException within SmtpClient, add an SmtpCommandException as the\n  InnerException property to help consumers diagnose authentication problems.\n  (issue [#717](https://github.com/jstedfast/MailKit/issues/717))\n* Added support for the authzid to the SASL PLAIN mechanism.\n* Modified ProtocolLogger file constructor to support Shared Read and an Append/Overwrite option.\n  (issue [#730](https://github.com/jstedfast/MailKit/issues/730))\n\n## MailKit 2.0.4 (2018-05-21)\n\n* Fixed SmtpClient to use the IPv4 literal if the socket is IPv4 address mapped to IPv6.\n  (issue [#704](https://github.com/jstedfast/MailKit/issues/704))\n* Updated SmtpClient and ImapFolder.Append to use FormatOptions.EnsureNewLine.\n  (MimeKit issue [#251](https://github.com/jstedfast/MimeKit/issues/251))\n\n## MailKit 2.0.3 (2018-04-15)\n\n* Fixed IMAP IDLE support.\n* Ignore unknown tokens in IMAP untagged FETCH responses such as XAOL.SPAM.REASON.\n\n## MailKit 2.0.2 (2018-03-18)\n\n* Added work-around for ProtonMail's IMAP server. (issue [#674](https://github.com/jstedfast/MailKit/issues/674))\n* Added work-around for IMAP servers that do not include msgid in the ENVELOPE response.\n  (issue [#669](https://github.com/jstedfast/MailKit/issues/669))\n* Added MessageSummaryItems.PreviewText to allow fetching a small preview of the message.\n  (issue [#650](https://github.com/jstedfast/MailKit/issues/650))\n* Added support for batch fetching IMAP message streams.\n  (issue [#650](https://github.com/jstedfast/MailKit/issues/650))\n\n## MailKit 2.0.1 (2018-01-06)\n\n* Obsoleted all SaslMechanism constructors that took a Uri argument and replaced them\n  with variants that no longer require the Uri and instead take a NetworkCredential\n  or a set of strings for the user name and password. This simplifies authenticating\n  with OAuth 2.0:\n\n```csharp\nvar oauth2 = new SaslMechanismOAuth2 (username, auth_token);\n\nclient.Authenticate (oauth2);\n```\n\n## MailKit 2.0.0 (2017-12-22)\n\n* Updated MailKit to fully support async IO instead of using Task.Run() wrappers.\n* Fixed a resource leak when fetching IMAP body parts gets an exception.\n* Fixed each of the Client.Connect() implementations to catch exceptions thrown by\n  IProtocolLogger.LogConnect().\n* Removed the ImapFolder.MessagesArrived event.\n* Added new Authenticate() methods that take a SaslMechanism to avoid the need to\n  manipulate Client.AuthenticationMechanisms in order to tweak which SASL mechanisms\n  you'd like the client to use in Authenticate().\n* Added new SslHandshakeException with a helpful error message that can be thrown by\n  the Connect() methods. This replaces the obscure SocketExceptions previously thrown\n  by SslStream.\n* Fixed support for the IMAP UTF8=ACCEPT extension.\n* Improved ImapFolder.CommitStream() API to provide section, offset and length.\n* Treat the SMTP X-EXPS capability in an EHLO response the same as AUTH.\n  (issue [#603](https://github.com/jstedfast/MailKit/issues/603))\n* Dropped support for .NET 4.0.\n\nNote: As of 2.0, XOAUTH2 is no longer in the list of SASL mechanisms that is tried\nwhen using the Authenticate() methods that have existed pre-MailKit 2.0.\nInstead, you must now use Authenticate(SaslMechanism, CancellationToken).\n\nAn example usage might look like this:\n\n```csharp\n// Note: The Uri isn't used except with ICredentials.GetCredential (Uri) so unless\n// you implemented your own ICredentials class, the Uri is a dummy argument.\nvar uri = new Uri (\"imap://imap.gmail.com\");\nvar oauth2 = new SaslMechanismOAuth2 (uri, username, auth_token);\n\nclient.Authenticate (oauth2);\n```\n\n## MailKit 1.22.0 (2017-11-24)\n\n* Enable TLSv1.1 and 1.2 for .NETStandard.\n* Read any remaining literal data after parsing headers. Fixes an issue when requesting\n  specific headers in an ImapFolder.Fetch() request if the server sends an extra newline.\n\n## MailKit 1.20.0 (2017-10-28)\n\n* Fixed UniqueIdRange.ToString() to always output a string in the form ${start}:${end} even if\n  start == end. (issue [#572](https://github.com/jstedfast/MailKit/issues/572))\n\n## MailKit 1.18.1 (2017-09-03)\n\n* Gracefully handle IMAP COPYUID resp-codes without src or dest uid-set tokens.\n  (issue [#555](https://github.com/jstedfast/MailKit/issues/555))\n* Be more lenient with unquoted IMAP folder names containing ']'.\n  (issue [#557](https://github.com/jstedfast/MailKit/issues/557))\n\n## MailKit 1.18.0 (2017-08-07)\n\n* Improved logic for cached FolderAttributes on ImapFolder objects.\n* If/when the \\NonExistent flag is present, reset ImapFolder state as it probably means\n  another client has deleted the folder.\n* Added work-around for home.pl which sends an untagged `* [COPYUID ...]` response\n  without an `OK` (technically, the COPYUID resp-code should only appear in the tagged\n  response, but accept it anyway).\n\n## MailKit 1.16.2 (2017-07-01)\n\n* Added a leaveOpen param to the ProtocolLogger .ctor.\n  (issue [#506](https://github.com/jstedfast/MailKit/issues/506))\n* Added a CheckCertificateRevocation property on MailService.\n  (issue [#520](https://github.com/jstedfast/MailKit/issues/520))\n* Fixed ImapFolder to update the Count property and emit CountChanged when the IMAP server sends\n  an untagged VANISHED response. (issue [#521](https://github.com/jstedfast/MailKit/issues/521))\n* Fixed ImapEngine to properly handle converting character tokens into strings.\n  (issue [#522](https://github.com/jstedfast/MailKit/issues/522))\n* Fixed SmtpClient to properly handle DIGEST-MD5 auth errors in order to fall back to the next\n  authentication mechanism.\n* Fixed Pop3Client to properly detect APOP tokens after arbitrary text.\n  (issue [#529](https://github.com/jstedfast/MailKit/issues/529))\n* Disabled NTLM authentication since it often doesn't work properly.\n  (issue [#532](https://github.com/jstedfast/MailKit/issues/532))\n\n## MailKit 1.16.1 (2017-05-05)\n\n* Properly handle a NIL body-fld-params token for body-part-mpart.\n  (issue [#503](https://github.com/jstedfast/MailKit/issues/503))\n\n## MailKit 1.16.0 (2017-04-21)\n\n* Improved IMAP ENVELOPE parser to prevent exceptions when parsing invalid mailbox addresses.\n  (issue [#494](https://github.com/jstedfast/MailKit/issues/494))\n* Fixed UniqueId and UniqueIdRange to prevent developers from creating invalid UIDs and ranges.\n* Fixed ImapFolder.FetchStream() to properly emit MODSEQ changes if the server sends them.\n* Fixed SmtpClient to call OnNoRecipientsAccepted even in the non-PIPELINE case.\n  (issue [#491](https://github.com/jstedfast/MailKit/issues/491))\n\n## MailKit 1.14.0 (2017-04-09)\n\n* Improved IMAP's BODYSTRUCTURE parser to sanitize the Content-Disposition values.\n  (issue [#486](https://github.com/jstedfast/MailKit/issues/486))\n* Improved robustness of IMAP's BODYSTRUCTURE parser in cases where qstring tokens have unescaped\n  quotes. (issue [#485](https://github.com/jstedfast/MailKit/issues/485))\n* Fixed IMAP to properly handle NIL as a folder name in LIST, LSUB and STATUS responses.\n  (issue [#482](https://github.com/jstedfast/MailKit/issues/482))\n* Added ImapFolder.GetHeaders() to allow developers to download the entire set of message headers.\n* Added SMTP support for International Domain Names in email addresses used in the MAIL FROM and\n  RCPT TO commands.\n* Modified SmtpClient to no longer throw a NotSupportedException when trying to send messages to\n  a recipient with a unicode local-part in the email address when the SMTP server does not support\n  the SMTPUTF8 extension. Instead, the local-part is passed through as UTF-8, leaving it up to the\n  server to reject either the command or the message. This seems to provide the best interoperability.\n\n## MailKit 1.12.0 (2017-03-12)\n\n* Allow an empty string text argument for SearchQuery.ContainsHeader().\n  (issue [#451](https://github.com/jstedfast/MailKit/issues/451))\n* Fixed SaslMechanism.IsProhibited() logic to properly use logical ands. Thanks to\n  Stefan Seering for this fix.\n\n## MailKit 1.10.2 (2017-01-28)\n\n* Added an IsAuthenticated property to IMailService.\n* Fixed the ImapFolder.Quota class to not be public.\n\n## MailKit 1.10.1 (2016-12-04)\n\n* Modified the ImapClient to always LIST the INBOX even if it is a namespace in order to get any\n  flags set on it.\n* Fixed ImapFolder to handle Quota Roots that do not match an existing folder.\n  (issue [#433](https://github.com/jstedfast/MailKit/issues/433))\n* Added work-around for Courier-IMAP sending \"* 0 FETCH ...\" on flag changes.\n  (issue [#428](https://github.com/jstedfast/MailKit/issues/428))\n* Updated MessageSorter to be smarter about validating arguments such that it will only\n  check for IMessageSummary fields that it will *actually* need in order to perform\n  the specified sort.\n* Fixed SmtpClient.Authenticate() to throw an AuthenticationException with a message\n  from the SMTP server if available.\n\n## MailKit 1.10.0 (2016-10-31)\n\n* Added SearchQuery.Uids() to allow more powerful search expressions involving sets of uids.\n* Changed ImapClient.GetFolders() to return IList instead of IEnumerable.\n* Fixed a bug in MessageThreader.\n* Fixed bugs in Envelope.ToString() and Envelope.TryParse().\n* Fixed NTLM's Type2Message.Encode() logic to properly handle a null TargetInfo field.\n* Obsoleted some ImapFolder.Search() methods and replaced them with an equivalent ImapFolder.Sort()\n  method.\n* Added a ResponseText property to ImapCommandException.\n* Fixed ImapFolder to emit a HighestModSeqChanged event when we get untagged FETCH responses with\n  a higher MODSEQ value.\n* Improved SearchQuery optimization for IMAP.\n* Added SearchOptions.None.\n\n## MailKit 1.8.1 (2016-09-26)\n\n* Fixed the NuGet packages to reference MimeKit 1.8.0.\n* Added an SmtpClient.QueryCapabilitiesAfterAuthenticating property to work around broken SMTP servers\n  where sending EHLO after a successful AUTH command incorrectly resets their authenticated state.\n\n## MailKit 1.8.0 (2016-09-26)\n\n* Added a new Search()/SearchAsync() to ImapFolder that take a raw query string.\n* Implemented support for the IMAP FILTERS extension and improved support for the METADATA extension.\n* Fixed NTLM authentication support to use NTLMv2. (issue [#397](https://github.com/jstedfast/MailKit/issues/397))\n* Added support for IMAP's SEARCH=FUZZY relevancy scores.\n* Added an IMailFolder.ModSeqChanged event.\n* Added UniqueIdRange.All for convenience.\n\n## MailKit 1.6.0 (2016-09-11)\n\n* Added support for the new IMAP LITERAL- extension.\n* Added support for the new IMAP APPENDLIMIT extension.\n* Fixed APOP authentication in the Pop3Client. (issue [#395](https://github.com/jstedfast/MailKit/issues/395))\n* Reset the SmtpClient's Capabilities after disconnecting.\n* Modified ImapFolder.Search() to return a UniqueIdSet for IMAP servers that do not support\n  the ESEARCH extension (which already returns a UniqueIdSet).\n* Added mail.shaw.ca to the list of SMTP servers that break when sending EHLO after AUTH.\n  (issue [#393](https://github.com/jstedfast/MailKit/issues/393))\n* Work around broken POP3 servers that reply \"+OK\" instead of \"+\" in SASL negotiations.\n  (issue [#391](https://github.com/jstedfast/MailKit/issues/391))\n* Modified the IMAP parser to properly allow \"[\" to appear within flag tokens.\n  (issue [#390](https://github.com/jstedfast/MailKit/issues/390))\n\n## MailKit 1.4.2.1 (2016-08-16)\n\n* Fixed a regression in 1.4.2 where using a bad password in ImapClient.Authenticate() did not properly\n  throw an exception when using a SASL mechanism. (issue [#383](https://github.com/jstedfast/MailKit/issues/383))\n\n## MailKit 1.4.2 (2016-08-14)\n\n* Properly initialize the private Uri fields in Connect() for Windows Universal 8.1.\n  (issue [#381, #382](https://github.com/jstedfast/MailKit/issues/381, #382))\n* Added SecuritySafeCritical attributes to try and match base Exception in case that matters.\n* Added missing GetObjectData() implementation to Pop3CommandException.\n* Strong-name the .NET Core assemblies.\n* Make sure to process Alert resp-codes in ImapClient.\n  (issue [#377](https://github.com/jstedfast/MailKit/issues/377))\n\n## MailKit 1.4.1 (2016-07-17)\n\n* Updated the NTLM SASL mechanism to include a Windows OS version in the response if the server\n  requests it (apparently this should only happen if the server is in debug mode).\n* Updated the IMAP BODYSTRUCTURE parser to try and work around BODYSTRUCTURE responses that\n  do not properly encode the mime-type of a part where it only provides the media-subtype token\n  instead of both the media-type and media-subtype tokens.\n  (issue [#371](https://github.com/jstedfast/MailKit/issues/371))\n* Added smtp.dm.aliyun.com to the list of broken SMTP servers that failed to read the SMTP\n  specifications and improperly reset their state after sending an EHLO command after\n  authenticating (which the specifications explicitly state the clients SHOULD do).\n  (issue [#370](https://github.com/jstedfast/MailKit/issues/370))\n\n## MailKit 1.4.0 (2016-07-01)\n\n* Added support for .NET Core 1.0\n\n## MailKit 1.2.24 (2016-06-16)\n\n* Fixed logic for constructing the HELO command on WP8. (issue [#351](https://github.com/jstedfast/MailKit/issues/351))\n* Modified ImapFolder.Search() to not send the optional CHARSET search param if the charset\n  is US-ASCII. This way work around some broken IMAP servers that do not properly implement\n  support for the CHARSET parameter. (issue [#348](https://github.com/jstedfast/MailKit/issues/348))\n* Added more MailService methods to IMailService.\n\n## MailKit 1.2.23 (2016-05-22)\n\n* Properly apply SecurityCriticalAttribute to GetObjectData() on custom Exceptions.\n  (issue [#340](https://github.com/jstedfast/MailKit/issues/340))\n\n## MailKit 1.2.22 (2016-05-07)\n\n* Updated IMAP BODY parser to handle a NIL media type by treating it as \"application\".\n* Updated IMAP SEARCH response parser to work around search-return-data pairs within parens.\n* Added a missing SmtpStatusCode enum value for code 555.\n  (issue [#327](https://github.com/jstedfast/MailKit/issues/327))\n* Opened up more of the SearchQuery API to make it possible to serialize/deserialize via JSON.\n  (issue [#331](https://github.com/jstedfast/MailKit/issues/331))\n* Updated to reference BouncyCastle via NuGet.org packages rather than via project references.\n\n## MailKit 1.2.21 (2016-03-13)\n\n* Replaced SmtpClient's virtual ProcessRcptToResponse() method with OnRecipientAccepted()\n  and OnRecipientNotAccepted(). (issue [#309](https://github.com/jstedfast/MailKit/issues/309))\n* Added MailService.DefaultServerCertificateValidationCallback() which accepts all\n  self-signed certificates (a common operation that consumers want).\n* Fixed encoding and decoding of IMAP folder names that include surrogate pairs.\n* Fixed IMAP SEARCH logic for X-GM-LABELS.\n\n## MailKit 1.2.20 (2016-02-28)\n\n* Added a work-around for GoDaddy's ASP.NET web host which does not support the iso-8859-1\n  System.Text.Encoding (used as a fallback encoding within MailKit) by falling back to\n  Windows-1252 instead.\n* Improved NTLM support.\n\n## MailKit 1.2.19 (2016-02-13)\n\n* Added support for the SMTP VRFY and EXPN commands.\n\n## MailKit 1.2.18 (2016-01-29)\n\n* If the IMAP server sends a `* ID NIL` response, return null for ImapClient.Identify().\n* Allow developers to override the charset used when authenticating.\n  (issue [#292](https://github.com/jstedfast/MailKit/issues/292))\n\n## MailKit 1.2.17 (2016-01-24)\n\n* Exposed MailKit.Search.OrderByType and MailKit.Search.SortOrder to the public API.\n* Modified IMailFolder.CopyTo() and MoveTo() to return a UniqueIdMap instead of a UniqueIdSet.\n* Improved ImapProtocolException error messages to be more informative.\n* Added an IsSecure property to ImapClient, Pop3Client and SmtpClient.\n* Fixed support for the IMAP COMPRESS=DEFLATE extension to work properly.\n* Modified UniqueId.Id and .Validity to be properties instead of fields.\n* Reduced memory usage for UniqueIdRange (-33%) and UniqueIdSet (-50%).\n* Vastly improved the performance of UniqueIdSet (~2x).\n* Added an ImapClient.GetFolders() overload that also requests the status of each folder.\n* Modified the headersOnly parameter to the various Pop3Client.GetStream() methods to default to\n  false instead of forcing developers to pass in a value.\n* Updated the IMAP, POP3 and SMTP clients to be stricter with validating SSL certificates.\n\n## MailKit 1.2.16 (2016-01-01)\n\n* Added support for the SCRAM-SHA-256 SASL mechanism.\n* Added support for the CREATE-SPECIAL-USE IMAP extension.\n* Added support for the METADATA IMAP extension.\n* Added support for the LIST-STATUS IMAP extension.\n\n## MailKit 1.2.15 (2015-11-29)\n\n* Be more forgiving during SASL auth when a POP3 server sends unexpected text after a + response.\n  (issue [#268](https://github.com/jstedfast/MailKit/issues/268))\n\n## MailKit 1.2.14 (2015-11-22)\n\n* Fixed ImapFolder.Search() to not capitalize the date strings in date queries.\n  (issue [#252](https://github.com/jstedfast/MailKit/issues/252))\n* Fixed filtering logic in ImapFolder.GetSubfolders() to not filter out subfolders named Inbox.\n  (issue [#255](https://github.com/jstedfast/MailKit/issues/255))\n* Exposed SmtpClient.ProcessRcptToResponse() as virtual protected to allow subclasses to override\n  error handling. (issue [#256](https://github.com/jstedfast/MailKit/issues/256))\n* Modified SmtpCommandException .ctors to be public and fixed serialization logic.\n  (issue [#257](https://github.com/jstedfast/MailKit/issues/257))\n* Added workaround for broken smtp.sina.com mail server.\n* Throw a custom ImapProtocolException on \"* BYE\" during connection instead of \"unexpected token\".\n  (issue [#262](https://github.com/jstedfast/MailKit/issues/262))\n\n## MailKit 1.2.13 (2015-10-18)\n\n* Fixed SmtpClient to not double dispose the socket.\n* Added a BodyPartVisitor class.\n* Fixed ImapFolder to allow NIL tokens for body parts. (issue [#244](https://github.com/jstedfast/MailKit/issues/244))\n\n## MailKit 1.2.12 (2015-09-20)\n\n* Allow developers to specify a local IPEndPoint to use for connecting to remote servers.\n  (issue [#247](https://github.com/jstedfast/MailKit/issues/247))\n* Added support for NIL GMail labels. (issue [#244](https://github.com/jstedfast/MailKit/issues/244))\n\n## MailKit 1.2.11.1 (2015-09-08)\n\n* Fixed ImapFolder.GetSubfolders() to work with Yahoo! Mail and other IMAP servers that\n  do not use the canonical INBOX naming convention for the INBOX folder.\n  (issue [#242](https://github.com/jstedfast/MailKit/issues/242))\n\n## MailKit 1.2.11 (2015-09-06)\n\n* Fixed SmtpStream logic for determining if a call to ReadAhead() is needed.\n  (issue [#232](https://github.com/jstedfast/MailKit/issues/232))\n* Fixed ImapFolder.Close() to change the state to Closed even if the IMAP server does not\n  support the UNSELECT command.\n* Allow the UIDVALIDITY argument to the COPYUID and APPENDUID resp-codes to be 0 even though\n  that value is illegal. Improves compatibility with SmarterMail.\n  (issue [#240](https://github.com/jstedfast/MailKit/issues/240))\n\n## MailKit 1.2.10 (2015-08-16)\n\n* Added an SslProtocols property to ImapClient, Pop3Client, and SmtpClient to allow\n  developers to override which SSL protocols are to be allowed for SSL connections.\n  (issue [#229](https://github.com/jstedfast/MailKit/issues/229))\n* Added a work-around for GMail IMAP (and other IMAP servers) that sometimes send an\n  illegal MODSEQ value of 0. (issue [#228](https://github.com/jstedfast/MailKit/issues/228))\n\n## MailKit 1.2.9 (2015-08-08)\n\n* Fixed ImapFolder.Append() methods to make sure to encode the message with `<CR><LF>`\n  line endings.\n* Added UniqueId.Invalid that can be used for error conditions.\n* Added UniqueId.IsValid property to check that the UniqueId is valid.\n* Added Opened and Closed events to IMailFolder.\n* Fixed the QRESYNC version of the IMailFolder.Open() method to take a uint uidValidity\n  instead of a UniqueId uidValidity argument for consistency.\n* Updated MessageSorter.Sort() to be an extension method and added a List&lt;T&gt; overload.\n* Updated MessageThreader.Thread() to be extension methods (required reordering of args).\n* Merged ISortable and IThreadable interfaces into IMessageSummary in order to\n  remove duplicated properties and simplify things.\n* Renamed IMessageSummary.MessageSize to IMessageSummary.Size.\n* Modified IMessageSummary.UniqueId to no longer be nullable.\n* Added TextBody, HtmlBody, BodyParts and Attachments properties to IMessageSummary.\n* Modified the IMAP parser to allow NIL for the Content-Type and subtype strings in\n  BODY and BODYSTRUCTURE values even though it is illegal. (issue [#226](https://github.com/jstedfast/MailKit/issues/226))\n* Modified the IMAP parser to properly handle Message-Id tokens that are not properly\n  encapsulated within angle brackets. (issue [#224](https://github.com/jstedfast/MailKit/issues/224))\n* Fixed IMAP to properly deal with folder names that contained unescaped square brackets.\n  (issue [#222](https://github.com/jstedfast/MailKit/issues/222))\n\n## MailKit 1.2.8 (2015-07-19)\n\n* Fixed ImapFolder to dispose the temporary streams used in GetMessage and GetBodyPart.\n* Added a MessageNotFoundException.\n* Added an ImapCommandResponse property to ImapCommandException.\n* Fixed SmtpClient to filter out duplicate recipient addresses in RCPT TO.\n* Modified MessageSorter/Threader to take IList&lt;OrderBy&gt; arguments instead of OrderBy[].\n* Added support for parsing group addresses in IMAP ENVELOPE responses.\n* Disable SASL-IR support for the LOGIN mechanism. (issue [#216](https://github.com/jstedfast/MailKit/issues/216))\n* Capture whether or not the IMAP server supports the I18NLEVEL and LANGUAGE extensions.\n\n## MailKit 1.2.7 (2015-07-06)\n\n* Fixed ImapFolder.Rename() to properly emit the Renamed event for child folders as well.\n* Fixed ImapFolder.Fetch() to always fill in the Headers property when requesting specific\n  headers even if the server replies with an empty list. (issue [#210](https://github.com/jstedfast/MailKit/issues/210))\n\n## MailKit 1.2.6 (2015-06-25)\n\n* Fixed UniqueIdSet.CopyTo() to work properly (also fixes LINQ usage).\n* Fixed ImapFolder.Status() where StatusItems.HighestModSeq is used.\n\n## MailKit 1.2.5 (2015-06-22)\n\n* Added support for extended IMAP search options (see the SearchOptions flags).\n* Added TryParse() convenience methods for UniqueIdSet, UniqueIdRange, and UniqueId.\n* Added a workaround for a GMail IMAP BODYSTRUCTURE bug. (issue [#205](https://github.com/jstedfast/MailKit/issues/205))\n* Added a ProtocolLogger property for ImapClient, Pop3Client, and SmtpClient.\n* Fixed the ImapFolder.GetStream() methods that take a BodyPart to call the\n  proper overload.\n\n## MailKit 1.2.4 (2015-06-14)\n\n* Updated SmtpClient to use MimeMessage.Prepare() instead of implementing its own logic.\n* Added a new ITransferProgress interface and updated IMAP, POP3 and SMTP methods to\n  take an optional ITransferProgress parameter to allow for progress reporting.\n* Implemented client-side UID EXPUNGE for IMAP servers that do not support the UIDPLUS\n  extension.\n* Improved API documentation.\n\n## MailKit 1.2.3 (2015-06-01)\n\n* Fixed ImapFolder.AddFlags() to throw FolderNotOpenException if the folder is not\n  opened in read-write mode. (issue [#202](https://github.com/jstedfast/MailKit/issues/202))\n* Fixed ImapFolder.GetMessage/BodyPart/Stream() to not modify a dictionary while\n  looping over it. (issue [#201](https://github.com/jstedfast/MailKit/issues/201))\n* Fixed ImapFolder to throw FolderNotFoundException instead of ArgumentException\n  when the command fails due to the folder not existing.\n\n## MailKit 1.2.2 (2015-05-31)\n\n* Added ImapClient.GetFolders(FolderNamespace, ...) to allow getting the full\n  (recursive) list of folders for a particular namespace.\n* Added a FolderAttributes.Inbox flag that gets set on the Inbox folder.\n* Fixed the IMAP code to properly treat the INBOX folder name case-insensitively.\n* Added ServiceNotConnectedException, ServiceNotAuthenticatedException, and\n  FolderNotOpenException as a more specific errors than InvalidOperationException.\n  (Note: they all subclass InvalidOperationException so old code continues to work).\n* Added Pop3Client.GetStream() to allow fetching messages or headers as an unparsed\n  stream. (issue [#198](https://github.com/jstedfast/MailKit/issues/198))\n* Fixed usage of Socket.Poll() to not loop 1000 times per second.\n* Added more ImapFolder.GetStream() overloads.\n* Added ImapFolder.CreateStream() and CommitStream() protected methods which are meant\n  for subclasses that intend to implement caching.\n\n## MailKit 1.2.1 (2015-05-26)\n\n* Added hooks to allow subclassing ImapFolder.\n\n## MailKit 1.2.0 (2015-05-24)\n\n* Added new ImapFolder.GetStream() overloads that allow fetching only the TEXT\n  stream.\n* Fixed ImapFolder.Search() to always treat the search results as UIDs even\n  when the server (such as AOL) does not include the required UID tag in the\n  ESEARCH response. (issue [#191](https://github.com/jstedfast/MailKit/issues/191))\n* Fixed ImapClient to set the engine.Uri even for Windows*81 profiles (fixes\n  a NullReferenceException for the various Windows*81 profiles). (issue [#192](https://github.com/jstedfast/MailKit/issues/192))\n* Work around a GMail bug where it does not quote flags containing []'s.\n  (issue [#193](https://github.com/jstedfast/MailKit/issues/193))\n* Fixed the IMAP code to accept GMail label names that start with a '+'.\n  (issue [#195](https://github.com/jstedfast/MailKit/issues/195))\n* Delay throwing ProtocolException due to an unexpected disconnect when reading\n  responses to PIPELINE'd SMTP commands in case one of the responses to those\n  commands contains an error code that might hint at why the server disconnected.\n  (issue [#194](https://github.com/jstedfast/MailKit/issues/194))\n\n## MailKit 1.0.17 (2015-05-12)\n\n* Fixed a STARTTLS regression in SmtpClient that was introduced in 1.0.15.\n  (issue [#187](https://github.com/jstedfast/MailKit/issues/187))\n\n## MailKit 1.0.16 (2015-05-10)\n\n* Modified the Pop3Client to immediately query for the message count once the\n  client is authenticated. This allows the Pop3Client to now have a Count\n  property that replaces the need for calling GetMessageCount(). (issue [#184](https://github.com/jstedfast/MailKit/issues/184))\n\n## MailKit 1.0.15 (2015-05-09)\n\n* Added SearchQuery.HeaderContains() and obsoleted SearchQuery.Header() for\n  API consistency.\n* Added workaround for GMail's broken FETCH command parser that does not accept\n  aliases. (issue [#183](https://github.com/jstedfast/MailKit/issues/183))\n\n## MailKit 1.0.14 (2015-04-11)\n\n* Added a ServerCertificateValidationCallback property to all clients so that\n  it is not necessary to set the global\n  System.Net.ServicePointManager.ServerCertificateValidationCallback property.\n* Fixed MailService.Connect(Uri) to properly handle Uri's with Port value that\n  had not been explicitly set. (issue [#170](https://github.com/jstedfast/MailKit/issues/170))\n* Added logic to properly handle MODSEQ-based search responses.\n  (issue [#166 and issue #173](https://github.com/jstedfast/MailKit/issues/166 and issue #173))\n* When an ImapClient gets disconnected, if an ImapFolder was in an opened state,\n  update its state to closed to prevent confusion once the ImapClient is\n  reconnected.\n* Fixed a bug in Pop3Client.Authenticate() for servers that just reply with\n  \"+OK\\r\\n\" to the SASL challenge. (issue [#171](https://github.com/jstedfast/MailKit/issues/171))\n* Clear the POP3 capability flags if the POP3 server responds with -ERR at\n  any time. Some servers will reply with a list of capabilities until the\n  client is authenticated, and then reply with -ERR meaning that the client\n  should not attempt to use previously listed capabilities. (issue [#174](https://github.com/jstedfast/MailKit/issues/174))\n\n## MailKit 1.0.13 (2015-03-29)\n\n* Added a FileName convenience property to BodyPartBasic which works the same\n  way as the MimeKit.MimePart.FileName property.\n* Added a MessageSummaryFetched event to IMailFolder to better enable developers\n  to both provide progress feedback to their users as well as enable them to\n  better recover from exceptions (such as a dropped connection) occurring during\n  the fetching of message summaries.\n* Added support for the IMAP SORT=DISPLAY extension.\n* Added a work-around for Cyrus IMAP 2.4.16 sending untagged SEARCH responses\n  when untagged ESEARCH responses are expected.\n\n## MailKit 1.0.12 (2015-03-21)\n\n* Fixed ImapFolder.GetMessage(), GetBodyPart() and GetStream() to throw an\n  ImapCommandException rather than returning null if the server did not\n  response with the message data.\n* Added new, much more usable, Connect() methods to ImapClient, Pop3Client,\n  and SmtpClient that take a hostname, port, and SecureSocketOptions.\n* Added a workaround for smtp.strato.de's blatant disregard for standards.\n  (issue [#162](https://github.com/jstedfast/MailKit/issues/162))\n* Fixed ImapFolder.Close() to require ReadWrite access if expunge is true.\n* Fixed IMAP SORT queries to inject \"RETURN\" before the orderBy param.\n  (issue [#164](https://github.com/jstedfast/MailKit/issues/164))\n* Implemented support for the IMAP ACL extension.\n\n## MailKit 1.0.11 (2015-03-14)\n\n* Make sure that the IMAP stream supports timeouts before using them (fixes a\n  regression introduced in 1.0.10).\n* Added BodyParts and Attachments convenience properties to MessageSummary.\n* Added TextBody and HtmlBody convenience properties to MessageSummary.\n* Added ImapClient.IsAuthenticated, Pop3Client.IsAuthenticated and\n  SmtpClient.IsAuthenticated properties.\n* Changed the ImapClient.Inbox property to throw InvalidOperationException if\n  you try to access it before authenticating instead of returning null.\n* Added an ImapClient.IsIdle property to check if the ImapClient is currently\n  in the IDLE state.\n\n## MailKit 1.0.10 (2015-03-08)\n\n* Added support for the IMAP ID extension.\n\n## MailKit 1.0.9 (2015-03-02)\n\n* Modified UniqueId to contain a Validity value. This allows ImapFolder.Append(),\n  CopyTo(), and MoveTo() to provide the caller with a way to make sure that the\n  UIDs are (still) valid in the destination folder at a future point in time.\n* Modified ImapFolder.UidValidity to be a uint instead of a UniqueId which not\n  only makes more sense but also simplifies comparison.\n* Fixed GMail Label APIs to use the modified UTF-7 encoding logic meant for\n  folder names as it appears that GMail wants label names to be encoded in this\n  way. (issue [#154](https://github.com/jstedfast/MailKit/issues/154))\n\n## MailKit 1.0.8 (2015-02-19)\n\n* Fixed the SMTP BINARYMIME extension support to work properly. (issue [#151](https://github.com/jstedfast/MailKit/issues/151))\n* Fixed ImapFolder.Open() to not set the PermanentFlags to None if another\n  folder was open (preventing SetFlags/AddFlags/RemoveFlags from functioning\n  properly). (issue [#153](https://github.com/jstedfast/MailKit/issues/153))\n\n## MailKit 1.0.7 (2015-02-17)\n\n* Marked Pop3Client methods that take UIDs as [Obsolete]. It is suggested that\n  the equivalent methods that take indexes be used instead and that UID-to-index\n  mapping is done by the developer. This takes the burden off of the Pop3Client\n  to maintain a mapping of UIDs to indexes that it cannot easily maintain.\n* Fixed SmtpCommandException to only serialize the Mailbox property when it is\n  non-null. (issue [#148](https://github.com/jstedfast/MailKit/issues/148))\n* Fixed IMAP support to accept a UIDVALIDITY value of 0 (even though it is\n  technically illegal) to work around a bug in SmarterMail 13.0. (issue [#150](https://github.com/jstedfast/MailKit/issues/150))\n* Fixed ImapFolder.GetSubfolders() to filter out non-child folders from the list\n  that it returns (once again, a work-around for a SmarterMail 13.0 bug).\n  (issue [#149](https://github.com/jstedfast/MailKit/issues/149))\n\n## MailKit 1.0.6 (2015-01-18)\n\n* Fixed some issues revealed by source analysis.\n* Migrated the iOS assemblies to Xamarin.iOS Unified API for 64-bit support.\n\nNote: If you are not yet ready to port your iOS application to the Unified API,\n      you will need to stick with the 1.0.5 release. The Classic MonoTouch API\n      is no longer supported.\n\n## MailKit 1.0.5 (2015-01-08)\n\n* Added Connect() overloads which takes a Socket argument (issue [#128](https://github.com/jstedfast/MailKit/issues/128)).\n* Added support for SMTP Delivery Status Notifications (issue [#136](https://github.com/jstedfast/MailKit/issues/136)).\n* Modified the ImapFolder logic such that if the IMAP server does not\n  send a PERMANENTFLAGS resp-code when SELECTing the folder, then it\n  will assume that all flags are permanent (issue [#140](https://github.com/jstedfast/MailKit/issues/140)).\n\n## MailKit 1.0.4 (2014-12-13)\n\n* Modified the IMAP BODYSTRUCTURE parser to allow NIL tokens for\n  Content-Type and Content-Disposition parameter values. (issue [#124](https://github.com/jstedfast/MailKit/issues/124))\n* Added ImapFolder.GetBodyPart() overrides to allow fetching body parts\n  based on a part specifier string. (issue [#130](https://github.com/jstedfast/MailKit/issues/130))\n\n## MailKit 1.0.3 (2014-12-05)\n\n* Added a new ImapFolder.Fetch() overload that takes a HashSet&lt;string&gt;\n  of header fields to fetch instead of a HashSet&lt;HeaderId&gt; for\n  developers that need the ability to request custom headers not\n  defined in the HeaderId enum.\n* Added an SmtpClient.MessageSent event and an OnMessageSent() method\n  that can be overridden.\n\n## MailKit 1.0.2 (2014-11-23)\n\n* Modified ProtocolLogger to flush the stream at the end of each Log().\n* Fixed IMAP SEARCH queries with empty string arguments.\n* Fixed the IMAP FETCH parser to accept qstrings and literals for\n  header field names.\n* Improved documentation.\n\n## MailKit 1.0.1 (2014-10-27)\n\n* Fixed Pop3Client.GetMessages (int startIndex, int count, ...) to use\n  1-based sequence numbers.\n* Fixed POP3 PIPELINING support to work as intended (issue [#114](https://github.com/jstedfast/MailKit/issues/114)).\n* Added a work-around for Office365.com IMAP to avoid\n  ImapProtocolExceptions about unexpected '[' tokens when moving or\n  copying messages between folders (issue [#115](https://github.com/jstedfast/MailKit/issues/115)).\n* Disabled SSLv3 for security reasons (POODLE), opting instead to use TLS.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\nThe MailKit team takes the security of our software products and services seriously.\n\nIf you believe you have found a security vulnerability in the MailKit repository, please report it to us as described below.\n\n## Supported Versions\n\nDue to the fact that the MailKit team is small (currently only myself), I can\nonly support security fixes for the latest version.\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 4.x     | :white_check_mark: |\n| < 4.0   | :x:                |\n\n## Reporting a Vulnerability\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nInstead, please report them via a [Private Security Advisory](https://github.com/jstedfast/MailKit/security/advisories/new) submission.\n\nFor more information about the fields available and guidance on filling in the form, see\n\"[Creating a repository security advisory](https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/creating-a-repository-security-advisory)\"\nand \"[Best practices for writing repository security advisories.](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/best-practices-for-writing-repository-security-advisories)\"\n\nYou should receive a response within 24 hours. If for some reason you do not, please follow up via [email](mailto:jestedfa@microsoft.com?subject=MailKit%20Security%20Advisory) to ensure we received your original message.\n\n## Preferred Languages\n\nAll communications should be in English.\n"
  },
  {
    "path": "TODO.md",
    "content": "## TODO\n\n* SASL Authentication\n  * Include code to fetch an OAuth2 token?\n* IMAP4 Client\n  * Consolidate MessageFlagsChanged, MessageLabelsChanged, and ModSeqChanged events into a single event?\n  * Extensions:\n    * BINARY\n    * CATENATE\n    * LIST-EXTENDED (Note: partially implemented already)\n    * CONVERT (Note: none of the mainstream IMAP servers seem to support this)\n    * MULTISEARCH (Note: none of the mainstream IMAP servers seem to support this)\n    * UNAUTHENTICATE\n* MessageThreader\n  * Fix UniqueId property to be just a UniqueId instead of Nullable<UniqueId>.\n* IMailFolder\n  * Modify Append() methods to simply return UniqueId instead of Nullable<UniqueId>?\n  * Modify CopyTo/MoveTo() methods to also return UniqueId instead of Nullable<UniqueId>?\n* Maildir\n* Thunderbird-style mbox folder trees?\n"
  },
  {
    "path": "Telemetry.md",
    "content": "# MailKit Telemetry Documentation\n\n## Socket Metrics\n\n### Metric: `mailkit.net.socket.connect.count`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.socket.connect.count`            | Counter             | `{attempt}`     | The number of times a socket attempted to connect to a remote host.        |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `network.peer.address`     | string   | Peer IP address of the socket connection.        | `142.251.167.109`                               | Always                |\n| `server.address`           | string   | The host name that the socket is connecting to.  | `smtp.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the socket is connecting to.       | `465`                                           | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n\nThis metric tracks the number of times a socket attempted to connect to a remote host.\n\n`error.type` has the following values:\n\n| **Value**               | **Description**                                                                |\n|:------------------------|:-------------------------------------------------------------------------------|\n| `cancelled`             | The operation was cancelled.                                                   |\n| `host_not_found`        | No such host is known. The name is not an official host name or alias.         |\n| `host_unreachable`      | There is no network route to the specified host.                               |\n| `network_unreachable`   | No route to the remote host exists.                                            |\n| `connection_aborted`    | The connection was aborted by .NET or the underlying socket provider.          |\n| `connection_refused`    | The remote host is actively refusing a connection.                             |\n| `connection_reset`      | The connection was reset by the remote peer.                                   |\n| `timed_out`             | The connection attempt timed out, or the connected host has failed to respond. |\n| `too_many_open_sockets` | There are too many open sockets in the underlying socket provider.             |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.socket.connect.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.socket.connect.duration`         | Histogram           | `ms`            | The number of milliseconds taken for a socket to connect to a remote host. |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `network.peer.address`     | string   | Peer IP address of the socket connection.        | `142.251.167.109`                               | Always                |\n| `server.address`           | string   | The host name that the socket is connecting to.  | `smtp.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the socket is connecting to.       | `465`                                           | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n\nThis metric measures the time it takes to connect a socket to a remote host.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n\nAvailable starting in: MailKit v4.7.0\n\n## SmtpClient Metrics\n\n### Metric: `mailkit.net.smtp.client.connection.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.smtp.client.connection.duration` | Histogram           | `s`             | The duration of successfully established connections to an SMTP server.    |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `smtp.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `25`, `465`, `587`                              | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `smtp` or `smtps`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, `send`, ...          | Always                |\n\nThis metric tracks the connection duration of each SmtpClient connection and records any error details if the connection was terminated involuntarily.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.smtp.client.operation.count`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.smtp.client.operation.count`     | Counter             | `{operation}`   | The number of times a client performed an operation on an SMTP server.     |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `smtp.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `25`, `465`, `587`                              | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `smtp` or `smtps`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, `send`, ...          | Always                |\n\nThis metric tracks the number of times an SmtpClient has performed an operation on an SMTP server.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.smtp.client.operation.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.smtp.client.operation.duration`  | Histogram           | `ms`            | The amount of time it takes for the SMTP server to perform an operation.   |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `smtp.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `25`, `465`, `587`                              | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `smtp` or `smtps`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, `send`, ...          | Always                |\n\nThis metric tracks the amount of time it takes an SMTP server to perform an operation.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n## Pop3Client Metrics\n\n### Metric: `mailkit.net.pop3.client.connection.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.pop3.client.connection.duration` | Histogram           | `s`             | The duration of successfully established connections to a POP3 server.     |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `pop.gmail.com`                                 | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `110`, `995`                                    | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `pop3` or `pop3s`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, ...                  | Always                |\n\nThis metric tracks the connection duration of each Pop3Client connection and records any error details if the connection was terminated involuntarily.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.pop3.client.operation.count`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.pop3.client.operation.count`     | Counter             | `{operation}`   | The number of times a client performed an operation on a POP3 server.      |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `pop.gmail.com`                                 | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `110`, `995`                                    | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `pop3` or `pop3s`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, ...                  | Always                |\n\nThis metric tracks the number of times an Pop3Client has performed an operation on a POP3 server.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.pop3.client.operation.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.pop3.client.operation.duration`  | Histogram           | `ms`            | The amount of time it takes for the POP3 server to perform an operation.   |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `pop.gmail.com`                                 | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `110`, `995`                                    | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `pop3` or `pop3s`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, ...                  | Always                |\n\nThis metric tracks the amount of time it takes a POP3 server to perform an operation.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n## ImapClient Metrics\n\n### Metric: `mailkit.net.imap.client.connection.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.imap.client.connection.duration` | Histogram           | `s`             | The duration of successfully established connections to an IMAP server.    |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `imap.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `143`, `993`                                    | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `imap` or `imaps`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, ...                  | Always                |\n\nThis metric tracks the connection duration of each ImapClient connection and records any error details if the connection was terminated involuntarily.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.imap.client.operation.count`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.imap.client.operation.count`     | Counter             | `{operation}`   | The number of times a client performed an operation on an IMAP server.     |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `imap.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `143`, `993`                                    | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `imap` or `imaps`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, ...                  | Always                |\n\nThis metric tracks the number of times an ImapClient has performed an operation on an IMAP server.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n\n### Metric: `mailkit.net.imap.client.operation.duration`\n\n**Status:** [Experimental](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.30.0/specification/document-status.md)\n\n| **Name**                                      | **Instrument Type** | **Unit**        | **Description**                                                            |\n|:----------------------------------------------|:--------------------|:----------------|:---------------------------------------------------------------------------|\n| `mailkit.net.imap.client.operation.duration`  | Histogram           | `ms`            | The amount of time it takes for the IMAP server to perform an operation.   |\n\n| **Attribute**              | **Type** | **Description**                                  | **Examples**                                    | **Presence**          |\n|:---------------------------|:---------|:-------------------------------------------------|:------------------------------------------------|:----------------------|\n| `server.address`           | string   | The host name that the client is connected to.   | `imap.gmail.com`                                | Always                |\n| `server.port`              | int      | The port that the client is connected to.        | `143`, `993`                                    | Always                |\n| `url.scheme`               | string   | The URL scheme of the protocol used.             | `imap` or `imaps`                               | Always                |\n| `error.type`               | string   | The type of error encountered.                   | `host_not_found`, `host_unreachable`, ...       | If an error occurred. |\n| `network.operation`        | string   | The name of the operation.                       | `connect`, `authenticate`, ...                  | Always                |\n\nThis metric tracks the amount of time it takes an IMAP server to perform an operation.\n\n`error.type` has the following values:\n\n| **Value**                 | **Description**                                                                         |\n|:--------------------------|:----------------------------------------------------------------------------------------|\n| `cancelled`               | An operation was cancelled.                                                             |\n| `host_not_found`          | No such host is known. The name is not an official host name or alias.                  |\n| `host_unreachable`        | There is no network route to the specified host.                                        |\n| `network_unreachable`     | No route to the remote host exists.                                                     |\n| `connection_aborted`      | The connection was aborted by .NET or the underlying socket provider.                   |\n| `connection_refused`      | The remote host is actively refusing a connection.                                      |\n| `connection_reset`        | The connection was reset by the remote peer.                                            |\n| `timed_out`               | The connection attempt timed out, or the connected host has failed to respond.          |\n| `too_many_open_sockets`   | There are too many open sockets in the underlying socket provider.                      |\n| `secure_connection_error` | An SSL or TLS connection could not be negotiated.                                       |\n| `protocol_error`          | The connection was terminated due to an incomplete or invalid response from the server. |\n\nAvailable starting in: MailKit v4.7.0\n"
  },
  {
    "path": "UnitTests/AccessControlListTests.cs",
    "content": "﻿//\n// AccessControlListTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections;\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class AccessControlListTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar enumeratedRights = new [] { AccessRight.OpenFolder, AccessRight.CreateFolder };\n\t\t\tvar array = new AccessRight[10];\n\n\t\t\tvar rights = new AccessRights (enumeratedRights);\n\t\t\tAssert.Throws<ArgumentNullException> (() => rights.AddRange ((string) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => rights.AddRange ((IEnumerable<AccessRight>) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessRights ((string) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessRights ((IEnumerable<AccessRight>) null));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => { var x = rights [-1]; });\n\t\t\tAssert.Throws<ArgumentNullException> (() => rights.CopyTo (null, 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => rights.CopyTo (array, -1));\n\n\t\t\tvar control = new AccessControl (\"control\");\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessControl (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessControl (null, \"rk\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessControl (null, enumeratedRights));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessControl (\"name\", (string) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessControl (\"name\", (IEnumerable<AccessRight>) null));\n\n\t\t\tvar list = new AccessControlList ();\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AccessControlList (null));\n\t\t\t//Assert.Throws<ArgumentNullException> (() => list.Add (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => list.AddRange (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAccessRight ()\n\t\t{\n\t\t\tAssert.That (AccessRight.Administer == new AccessRight (AccessRight.Administer.Right), Is.True, \"==\");\n\t\t\tAssert.That (AccessRight.Administer == new AccessRight (AccessRight.OpenFolder.Right), Is.False, \"==\");\n\n\t\t\tAssert.That (AccessRight.Administer != new AccessRight (AccessRight.Administer.Right), Is.False, \"!=\");\n\t\t\tAssert.That (AccessRight.Administer != new AccessRight (AccessRight.OpenFolder.Right), Is.True, \"!=\");\n\n\t\t\tAssert.That (AccessRight.Administer.Equals ((object) new AccessRight (AccessRight.Administer.Right)), Is.True, \"Equals\");\n\t\t\tAssert.That (new AccessRight (AccessRight.Administer.Right).GetHashCode (), Is.EqualTo (AccessRight.Administer.GetHashCode ()), \"GetHashCode\");\n\n\t\t\tAssert.That (AccessRight.Administer.ToString (), Is.EqualTo (\"a\"), \"ToString\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAccessRights ()\n\t\t{\n\t\t\tvar expected = new [] { AccessRight.OpenFolder, AccessRight.CreateFolder, AccessRight.DeleteFolder, AccessRight.ExpungeFolder, AccessRight.AppendMessages, AccessRight.SetMessageDeleted };\n\t\t\tvar rights = new AccessRights ();\n\t\t\tint i;\n\n\t\t\tAssert.That (rights.IsReadOnly, Is.False, \"IsReadOnly\");\n\n\t\t\tAssert.That (rights.Add (AccessRight.OpenFolder), Is.True, \"Add OpenFolder\");\n\t\t\tAssert.That (rights, Has.Count.EqualTo (1), \"Count after adding OpenFolder\");\n\t\t\tAssert.That (rights.Add (AccessRight.OpenFolder), Is.False, \"Add OpenFolder again\");\n\t\t\tAssert.That (rights, Has.Count.EqualTo (1), \"Count after adding OpenFolder again\");\n\n\t\t\tAssert.That (rights.Add (AccessRight.CreateFolder.Right), Is.True, \"Add CreateFolder\");\n\t\t\tAssert.That (rights, Has.Count.EqualTo (2), \"Count after adding CreateFolder\");\n\t\t\tAssert.That (rights.Add (AccessRight.CreateFolder), Is.False, \"Add CreateFolder again\");\n\t\t\tAssert.That (rights, Has.Count.EqualTo (2), \"Count after adding OpenFolder again\");\n\n\t\t\trights.AddRange (new [] { AccessRight.DeleteFolder, AccessRight.ExpungeFolder });\n\t\t\tAssert.That (rights, Has.Count.EqualTo (4), \"Count after adding DeleteFolder and ExpungeFolder\");\n\n\t\t\tAssert.That (rights, Does.Contain (AccessRight.DeleteFolder), \"Contains DeleteFolder\");\n\t\t\tAssert.That (rights, Does.Contain (AccessRight.ExpungeFolder), \"Contains ExpungeFolder\");\n\t\t\tAssert.That (rights, Does.Not.Contain (AccessRight.Administer), \"Contains Administer\");\n\n\t\t\trights.AddRange (\"it\");\n\t\t\tAssert.That (rights, Has.Count.EqualTo (6), \"Count after adding AppendMessages and SetMessageDeleted\");\n\n\t\t\tAssert.That (rights, Does.Contain (AccessRight.AppendMessages), \"Contains AppendMessages\");\n\t\t\tAssert.That (rights, Does.Contain (AccessRight.SetMessageDeleted), \"Contains SetMessageDeleted\");\n\t\t\tAssert.That (rights, Does.Not.Contain (AccessRight.Administer), \"Contains Administer\");\n\n\t\t\tfor (i = 0; i < 6; i++)\n\t\t\t\tAssert.That (rights[i], Is.EqualTo (expected[i]), $\"rights[{i}]\");\n\n\t\t\t((ICollection<AccessRight>) rights).Add (AccessRight.Administer);\n\t\t\tAssert.That (rights.Remove (AccessRight.Administer), Is.True, \"Remove Administer\");\n\t\t\tAssert.That (rights.Remove (AccessRight.Administer), Is.False, \"Remove Administer again\");\n\n\t\t\ti = 0;\n\t\t\tforeach (var right in rights)\n\t\t\t\tAssert.That (right, Is.EqualTo (expected[i]), $\"foreach rights[{i++}]\");\n\n\t\t\ti = 0;\n\t\t\tforeach (AccessRight right in ((IEnumerable) rights))\n\t\t\t\tAssert.That (right, Is.EqualTo (expected[i]), $\"generic foreach rights[{i++}]\");\n\n\t\t\tvar array = new AccessRight[rights.Count];\n\t\t\trights.CopyTo (array, 0);\n\n\t\t\tfor (i = 0; i < 6; i++)\n\t\t\t\tAssert.That (array[i], Is.EqualTo (expected[i]), $\"CopyTo[{i}]\");\n\n\t\t\tAssert.That (rights.ToString (), Is.EqualTo (\"rkxeit\"), \"ToString\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAccessControl ()\n\t\t{\n\t\t\tvar control = new AccessControl (\"empty\");\n\n\t\t\tAssert.That (control.Name, Is.EqualTo (\"empty\"), \"Name\");\n\t\t\tAssert.That (control.Rights.ToString (), Is.EqualTo (\"\"), \"Rights (empty)\");\n\n\t\t\tcontrol = new AccessControl (\"admin\", \"a\");\n\n\t\t\tAssert.That (control.Name, Is.EqualTo (\"admin\"), \"Name\");\n\t\t\tAssert.That (control.Rights.ToString (), Is.EqualTo (\"a\"), \"Rights (admin)\");\n\n\t\t\tcontrol = new AccessControl (\"it\", new [] { AccessRight.AppendMessages, AccessRight.SetMessageDeleted });\n\n\t\t\tAssert.That (control.Name, Is.EqualTo (\"it\"), \"Name\");\n\t\t\tAssert.That (control.Rights.ToString (), Is.EqualTo (\"it\"), \"Rights (it)\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAccessControlList ()\n\t\t{\n\t\t\tvar list = new AccessControlList (new [] { new AccessControl (\"admin\", new [] { AccessRight.Administer }) });\n\n\t\t\tAssert.That (list, Has.Count.EqualTo (1), \"Count\");\n\t\t\tAssert.That (list[0].Name, Is.EqualTo (\"admin\"), \"list[0].Name\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/AnnotationAttributeTests.cs",
    "content": "﻿//\n// AnnotationAttributeTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class AnnotationAttributeTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AnnotationAttribute (null));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationAttribute (string.Empty));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationAttribute (\"*\"));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationAttribute (\"%\"));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationAttribute (\"w*ldcard\"));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationAttribute (\"w%ldcard\"));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicFunctionality ()\n\t\t{\n\t\t\tAnnotationAttribute attr;\n\n\t\t\tattr = new AnnotationAttribute (\"value\");\n\t\t\tAssert.That (attr.Name, Is.EqualTo (\"value\"), \"Name\");\n\t\t\tAssert.That (attr.Specifier, Is.EqualTo (\"value\"), \"Specifier\");\n\t\t\tAssert.That (attr.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\n\t\t\tattr = new AnnotationAttribute (\"value.priv\");\n\t\t\tAssert.That (attr.Name, Is.EqualTo (\"value\"), \"Name\");\n\t\t\tAssert.That (attr.Specifier, Is.EqualTo (\"value.priv\"), \"Specifier\");\n\t\t\tAssert.That (attr.Scope, Is.EqualTo (AnnotationScope.Private), \"Scope\");\n\n\t\t\tattr = new AnnotationAttribute (\"value.shared\");\n\t\t\tAssert.That (attr.Name, Is.EqualTo (\"value\"), \"Name\");\n\t\t\tAssert.That (attr.Specifier, Is.EqualTo (\"value.shared\"), \"Specifier\");\n\t\t\tAssert.That (attr.Scope, Is.EqualTo (AnnotationScope.Shared), \"Scope\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEquality ()\n\t\t{\n\t\t\tvar value = new AnnotationAttribute (\"value\");\n\n\t\t\tAssert.That (value, Is.EqualTo (AnnotationAttribute.Value), \"AreEqual\");\n\t\t\tAssert.That (AnnotationAttribute.Value.Equals (value), Is.True, \".Equals\");\n\t\t\tAssert.That (value == AnnotationAttribute.Value, Is.True, \"value == value\");\n\t\t\tAssert.That (AnnotationAttribute.PrivateValue != AnnotationAttribute.SharedValue, Is.True, \"value.priv != value.shared\");\n\n\t\t\tAssert.That (AnnotationAttribute.Value.Equals ((object) null), Is.False, \"value.Equals ((object) null)\");\n\t\t\tAssert.That (AnnotationAttribute.Value.Equals ((AnnotationAttribute) null), Is.False, \"value.Equals ((AnnotationAttribute) null)\");\n\t\t\tAssert.That (AnnotationAttribute.Value == null, Is.False, \"value == null\");\n\t\t\tAssert.That (AnnotationAttribute.Value != null, Is.True, \"/comment != null\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/AnnotationEntryTests.cs",
    "content": "﻿//\n// AnnotationEntryTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class AnnotationEntryTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AnnotationEntry (null));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (string.Empty));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"x\")); // paths must begin with '/'\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/1.2.3.4.5\")); // paths must not begin with a part-spec\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/台北/日本語\")); // paths may not contain non-ascii characters\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/path/0wnz\")); // path components must not begin with a number\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/root//node\")); // path components must not contain \"//\"\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/root/\")); // path components must not end with '/'\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/root..node\")); // path components must not contain \"..\"\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/root./node\")); // path components must not end with '.'\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"/root.\")); // path components must not end with '.'\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AnnotationEntry ((string) null, \"/comment\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AnnotationEntry (\"1\", null));\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"abc\", \"/comment\")); // invalid part-spec\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"1.\", \"/comment\")); // invalid part-spec\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"1..\", \"/comment\")); // invalid part-spec\n\t\t\tAssert.Throws<ArgumentException> (() => new AnnotationEntry (\"1..2\", \"/comment\")); // invalid part-spec\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AnnotationEntry ((BodyPart) null, \"/comment\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => AnnotationEntry.Parse (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicFunctionality ()\n\t\t{\n\t\t\tvar body = new BodyPartBasic (new ContentType (\"image\", \"jpeg\"), \"1.2.3.4\");\n\t\t\tAnnotationEntry entry;\n\n\t\t\tentry = new AnnotationEntry (\"/comment\");\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/comment\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.Null, \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\n\t\t\tentry = new AnnotationEntry (\"/comment\", AnnotationScope.Private);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/comment.priv\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.Null, \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Private), \"Scope\");\n\n\t\t\tentry = new AnnotationEntry (\"/comment\", AnnotationScope.Shared);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/comment.shared\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.Null, \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Shared), \"Scope\");\n\n\n\t\t\tentry = new AnnotationEntry (\"1.2.3.4\", \"/comment\");\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\n\t\t\tentry = new AnnotationEntry (\"1.2.3.4\", \"/comment\", AnnotationScope.Private);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment.priv\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Private), \"Scope\");\n\n\t\t\tentry = new AnnotationEntry (\"1.2.3.4\", \"/comment\", AnnotationScope.Shared);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment.shared\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Shared), \"Scope\");\n\n\n\t\t\tentry = new AnnotationEntry (body, \"/comment\");\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\n\t\t\tentry = new AnnotationEntry (body, \"/comment\", AnnotationScope.Private);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment.priv\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Private), \"Scope\");\n\n\t\t\tentry = new AnnotationEntry (body, \"/comment\", AnnotationScope.Shared);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment.shared\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Shared), \"Scope\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEquality ()\n\t\t{\n\t\t\tvar comment = new AnnotationEntry (\"/comment\");\n\n\t\t\tAssert.That (comment, Is.EqualTo (AnnotationEntry.Comment), \"AreEqual\");\n\t\t\tAssert.That (AnnotationEntry.Comment.Equals (comment), Is.True, \".Equals\");\n\t\t\tAssert.That (comment == AnnotationEntry.Comment, Is.True, \"/comment == /comment\");\n\t\t\tAssert.That (AnnotationEntry.PrivateComment != AnnotationEntry.SharedComment, Is.True, \"/comment.priv != /comment.shared\");\n\n\t\t\tAssert.That (AnnotationEntry.Comment.Equals ((object) null), Is.False, \"/comment.Equals ((object) null)\");\n\t\t\tAssert.That (AnnotationEntry.Comment.Equals ((AnnotationEntry) null), Is.False, \"/comment.Equals ((AnnotationEntry) null)\");\n\t\t\tAssert.That (AnnotationEntry.Comment == null, Is.False, \"/comment == null\");\n\t\t\tAssert.That (AnnotationEntry.Comment != null, Is.True, \"/comment != null\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParse ()\n\t\t{\n\t\t\tAnnotationEntry entry;\n\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (string.Empty), \"string.Empty\");\n\n\t\t\t// invalid part-specs\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/1./comment\"), \"/1./comment\");\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/1../comment\"), \"/1../comment\");\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/1..2/comment\"), \"/1..2/comment\");\n\n\t\t\t// invalid paths\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"x\"), \"x\"); // paths must begin with '/'\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/1a/comment\"), \"/1a/comment\"); // invalid character in part-spec\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/1.2.3.4.5\"), \"/1.2.3.4.5\"); // paths must not contain only a part-spec\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/台北/日本語\"), \"/台北/日本語\"); // paths may not contain non-ascii characters\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/path/0wnz\"), \"/path/0wnz\"); // path components must not begin with a number\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/root//node\"), \"/root//node\"); // path components must not contain \"//\"\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/root/\"), \"/root/\"); // path components must not end with '/'\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/root..node\"), \"/root..node\"); // path components must not contain \"..\"\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/root./node\"), \"/root./node\"); // path components must not end with '.'\n\t\t\tAssert.Throws<FormatException> (() => AnnotationEntry.Parse (\"/root.\"), \"/root.\"); // path components must not end with '.'\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Parse (\"/comment\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/comment\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.Null, \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Parse (\"/comment.priv\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/comment.priv\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.Null, \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Private), \"Scope\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Parse (\"/comment.shared\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tentry = new AnnotationEntry (\"/comment\", AnnotationScope.Shared);\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/comment.shared\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.Null, \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Shared), \"Scope\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Parse (\"/1.2.3.4/comment\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Parse (\"/1.2.3.4/comment.priv\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment.priv\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Private), \"Scope\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Parse (\"/1.2.3.4/comment.shared\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment.shared\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Shared), \"Scope\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCreate ()\n\t\t{\n\t\t\tAnnotationEntry entry;\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/comment\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.Comment), \"/comment\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/comment.priv\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.PrivateComment), \"/comment.priv\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/comment.shared\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.SharedComment), \"/comment.shared\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/flags\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.Flags), \"/flags\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/flags.priv\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.PrivateFlags), \"/flags.priv\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/flags.shared\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.SharedFlags), \"/flags.shared\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/altsubject\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.AltSubject), \"/altsubject\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/altsubject.priv\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.PrivateAltSubject), \"/altsubject.priv\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/altsubject.shared\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry, Is.EqualTo (AnnotationEntry.SharedAltSubject), \"/altsubject.shared\");\n\n\t\t\ttry {\n\t\t\t\tentry = AnnotationEntry.Create (\"/1.2.3.4/comment\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Did not expect: {ex}\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tAssert.That (entry.Entry, Is.EqualTo (\"/1.2.3.4/comment\"), \"Entry\");\n\t\t\tAssert.That (entry.PartSpecifier, Is.EqualTo (\"1.2.3.4\"), \"PartSpecifier\");\n\t\t\tAssert.That (entry.Path, Is.EqualTo (\"/comment\"), \"Path\");\n\t\t\tAssert.That (entry.Scope, Is.EqualTo (AnnotationScope.Both), \"Scope\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/AnnotationTests.cs",
    "content": "﻿//\n// AnnotationTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class AnnotationTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Annotation (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicFunctionality ()\n\t\t{\n\t\t\tvar annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\tannotation.Properties.Add (AnnotationAttribute.SharedValue, \"Shared altsubject\");\n\t\t\tannotation.Properties.Add (AnnotationAttribute.PrivateValue, \"Private altsubject\");\n\t\t\tAssert.That (annotation.Entry, Is.EqualTo (AnnotationEntry.AltSubject), \"Entry\");\n\t\t\tAssert.That (annotation.Properties, Has.Count.EqualTo (2), \"Count\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/AppendRequestTests.cs",
    "content": "﻿//\n// AppendRequestTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class AppendRequestTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar keywords = new string[] { \"$Forwarded\" };\n\t\t\tvar message = new MimeMessage ();\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (null, MessageFlags.Seen));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (null, MessageFlags.Seen, DateTimeOffset.Now));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (null, MessageFlags.Seen, keywords));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (message, MessageFlags.Seen, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (null, MessageFlags.Seen, keywords, DateTimeOffset.Now));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AppendRequest (message, MessageFlags.Seen, null, DateTimeOffset.Now));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConstructors ()\n\t\t{\n\t\t\t//var annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t//annotation.Properties[AnnotationAttribute.PrivateValue] = string.Format (\"Alternate subject\");\n\t\t\t//var annotations = new Annotation[] { annotation };\n\t\t\tvar keywords = new string[] { \"$Forwarded\", \"$Junk\" };\n\t\t\tvar keywordSet = new HashSet<string> (keywords);\n\t\t\tvar flags = MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar internalDate = DateTimeOffset.Now;\n\t\t\tvar message = new MimeMessage ();\n\t\t\tAppendRequest request;\n\n\t\t\trequest = new AppendRequest (message);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #1\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (MessageFlags.None), \"Flags #1\");\n\t\t\tAssert.That (request.Keywords, Is.Null, \"Keywords #1\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #1\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #1\");\n\n\t\t\trequest = new AppendRequest (message, flags);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #2\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #2\");\n\t\t\tAssert.That (request.Keywords, Is.Null, \"Keywords #2\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #2\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #2\");\n\n\t\t\trequest = new AppendRequest (message, flags, keywords);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #3\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #3\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #3\");\n\t\t\tAssert.That (request.Keywords, Has.Count.EqualTo (keywords.Length), \"Keywords #3\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #3\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #3\");\n\n\t\t\trequest = new AppendRequest (message, flags, keywordSet);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #4\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #4\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #4\");\n\t\t\tAssert.That (request.Keywords, Is.EqualTo (keywordSet), \"Keywords #4\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #4\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #4\");\n\n\t\t\trequest = new AppendRequest (message, flags, internalDate);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #5\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #5\");\n\t\t\tAssert.That (request.Keywords, Is.Null, \"Keywords #5\");\n\t\t\tAssert.That (request.InternalDate.Value, Is.EqualTo (internalDate), \"InternalDate #5\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #5\");\n\n\t\t\trequest = new AppendRequest (message, flags, keywords, internalDate);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #6\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #6\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #6\");\n\t\t\tAssert.That (request.Keywords, Has.Count.EqualTo (keywords.Length), \"Keywords #6\");\n\t\t\tAssert.That (request.InternalDate.Value, Is.EqualTo (internalDate), \"InternalDate #6\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #6\");\n\n\t\t\trequest = new AppendRequest (message, flags, keywordSet, internalDate);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #7\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #7\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #7\");\n\t\t\tAssert.That (request.Keywords, Is.EqualTo (keywordSet), \"Keywords #7\");\n\t\t\tAssert.That (request.InternalDate.Value, Is.EqualTo (internalDate), \"InternalDate #7\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #7\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/ArgumentExceptionTests.cs",
    "content": "﻿//\n// ArgumentExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\nusing MailKit.Search;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class ArgumentExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new OrderBy (OrderByType.To, SortOrder.None));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new OrderByAnnotation (null, AnnotationAttribute.PrivateValue, SortOrder.Ascending));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new OrderByAnnotation (AnnotationEntry.AltSubject, null, SortOrder.Ascending));\n\t\t\tAssert.Throws<ArgumentException> (() => new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.Size, SortOrder.Ascending));\n\t\t\tAssert.Throws<ArgumentException> (() => new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.PrivateSize, SortOrder.Ascending));\n\t\t\tAssert.Throws<ArgumentException> (() => new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedSize, SortOrder.Ascending));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/BodyPartTests.cs",
    "content": "﻿//\n// BodyPartTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Collections;\n\nusing MimeKit;\nusing MailKit;\n\n// Note: These tests are for BodyPart and Envelope's custom format. While the format is similar\n//       to IMAP, it is not exactly the same. Do not assume that IMAP strings will work properly\n//       with these parsers.\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class BodyPartTests\n\t{\n\t\t[Test]\n\t\tpublic void TestBodyPartBasic ()\n\t\t{\n\t\t\tvar uri = new Uri (\"https://www.nationalgeographic.com/travel/contests/photographer-of-the-year-2018/wallpapers/week-9-nature/2/\");\n\t\t\tconst string expected = \"(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"wallpaper.jpg\\\") \\\"id@localhost\\\" \\\"A majestic supercell storm approaching a house in Kansas, 2016.\\\" \\\"base64\\\" 0 \\\"8criUiOQmpfifOuOmYFtEQ==\\\" (\\\"attachment\\\" (\\\"filename\\\" \\\"wallpaper.jpg\\\")) (\\\"en\\\" \\\"fr\\\") \\\"https://www.nationalgeographic.com/travel/contests/photographer-of-the-year-2018/wallpapers/week-9-nature/2/\\\")\";\n\t\t\tvar contentType = new ContentType (\"image\", \"jpeg\") {\n\t\t\t\tName = \"wallpaper.jpg\"\n\t\t\t};\n\t\t\tBodyPartBasic basic, parsed;\n\t\t\tBodyPart body;\n\n\t\t\tbasic = new BodyPartBasic (contentType, string.Empty) {\n\t\t\t\tContentId = \"id@localhost\",\n\t\t\t\tContentMd5 = \"8criUiOQmpfifOuOmYFtEQ==\",\n\t\t\t\tContentLanguage = new string[] { \"en\", \"fr\" },\n\t\t\t\tContentLocation = uri,\n\t\t\t\tContentDescription = \"A majestic supercell storm approaching a house in Kansas, 2016.\",\n\t\t\t\tContentDisposition = new ContentDisposition (ContentDisposition.Attachment) {\n\t\t\t\t\tFileName = \"wallpaper.jpg\"\n\t\t\t\t},\n\t\t\t\tContentTransferEncoding = \"base64\"\n\t\t\t};\n\n\t\t\tAssert.That (basic.IsAttachment, Is.True);\n\t\t\tAssert.That (basic.FileName, Is.EqualTo (\"wallpaper.jpg\"));\n\t\t\tAssert.That (basic.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (BodyPart.TryParse (expected, out body), Is.True);\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartBasic> ());\n\n\t\t\tparsed = (BodyPartBasic) body;\n\t\t\tAssert.That (parsed.ToString (), Is.EqualTo (expected));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNilSerialization ()\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tBodyPart.Encode (builder, (BodyPart) null);\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (\"NIL\"), \"BodyPart\");\n\n\t\t\tbuilder.Clear ();\n\t\t\tBodyPart.Encode (builder, (BodyPartCollection) null);\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (\"NIL\"), \"BodyPartCollection\");\n\n\t\t\tbuilder.Clear ();\n\t\t\tBodyPart.Encode (builder, (ContentDisposition) null);\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (\"NIL\"), \"ContentDisposition\");\n\n\t\t\t//builder.Clear ();\n\t\t\t//BodyPart.Encode (builder, (ContentType) null);\n\t\t\t//Assert.That (builder.ToString (), Is.EqualTo (\"NIL\"), \"ContentType\");\n\n\t\t\tbuilder.Clear ();\n\t\t\tBodyPart.Encode (builder, (Envelope) null);\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (\"NIL\"), \"Envelope\");\n\n\t\t\tbuilder.Clear ();\n\t\t\tBodyPart.Encode (builder, (IList<Parameter>) null);\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (\"NIL\"), \"IEnumerable<Parameter>\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSimplePlainTextBody ()\n\t\t{\n\t\t\tconst string expected = \"(\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"us-ascii\\\" \\\"name\\\" \\\"body.txt\\\") NIL NIL \\\"7bit\\\" 3028 NIL NIL NIL NIL 92)\";\n\t\t\tvar contentType = new ContentType (\"text\", \"plain\") { Charset = \"us-ascii\", Name = \"body.txt\" };\n\t\t\tBodyPartText text, parsed;\n\t\t\tBodyPart body;\n\n\t\t\ttext = new BodyPartText (contentType, string.Empty) {\n\t\t\t\tContentTransferEncoding = \"7bit\",\n\t\t\t\tOctets = 3028,\n\t\t\t\tLines = 92,\n\t\t\t};\n\n\t\t\tAssert.That (text.IsPlain, Is.True);\n\t\t\tAssert.That (text.IsHtml, Is.False);\n\t\t\tAssert.That (text.IsAttachment, Is.False);\n\t\t\tAssert.That (text.FileName, Is.EqualTo (\"body.txt\"));\n\t\t\tAssert.That (text.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (BodyPart.TryParse (expected, out body), Is.True);\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartText> ());\n\n\t\t\tparsed = (BodyPartText) body;\n\t\t\tAssert.That (parsed.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (parsed.ContentType.Charset, Is.EqualTo (\"us-ascii\"), \"charset param did not match\");\n\t\t\tAssert.That (parsed.ContentType.Name, Is.EqualTo (\"body.txt\"), \"name param did not match\");\n\t\t\tAssert.That (parsed.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (parsed.Octets, Is.EqualTo (3028), \"Octet count did not match.\");\n\t\t\tAssert.That (parsed.Lines, Is.EqualTo (92), \"Line count did not match.\");\n\t\t\tAssert.That (parsed.ToString (), Is.EqualTo (expected));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBodyPartCollection ()\n\t\t{\n\t\t\tvar text = new BodyPartText (new ContentType (\"text\", \"plain\"), string.Empty) { ContentLocation = new Uri (\"body\", UriKind.Relative) };\n\t\t\tvar image1 = new BodyPartBasic (new ContentType (\"image\", \"jpeg\"), string.Empty) { ContentLocation = new Uri (\"http://localhost/image1.jpg\") };\n\t\t\tvar image2 = new BodyPartBasic (new ContentType (\"image\", \"jpeg\"), string.Empty) { ContentId = \"image2@localhost\" };\n\t\t\tvar list = new BodyPartCollection ();\n\t\t\tvar parts = new BodyPart[3];\n\t\t\tint i = 0;\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => list.Add (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => list.Remove (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => list.Contains (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => list.IndexOf (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => list.CopyTo (null, 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => list.CopyTo (parts, -1));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => { var x = list[0]; });\n\n\t\t\tAssert.That (list.IsReadOnly, Is.False);\n\t\t\tAssert.That (list, Is.Empty);\n\n\t\t\tlist.Add (text);\n\t\t\tAssert.That (list, Has.Count.EqualTo (1));\n\t\t\tAssert.That (list, Does.Contain (text));\n\t\t\tAssert.That (list, Does.Not.Contain (image1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"body\", UriKind.Relative)), Is.EqualTo (0));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"http://localhost/image1.jpg\")), Is.EqualTo (-1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"cid:image2@localhost\")), Is.EqualTo (-1));\n\t\t\tAssert.That (list[0], Is.EqualTo (text));\n\n\t\t\tlist.Add (image1);\n\t\t\tAssert.That (list, Has.Count.EqualTo (2));\n\t\t\tAssert.That (list, Does.Contain (text));\n\t\t\tAssert.That (list, Does.Contain (image1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"body\", UriKind.Relative)), Is.EqualTo (0));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"http://localhost/image1.jpg\")), Is.EqualTo (1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"cid:image2@localhost\")), Is.EqualTo (-1));\n\t\t\tAssert.That (list[0], Is.EqualTo (text));\n\t\t\tAssert.That (list[1], Is.EqualTo (image1));\n\n\t\t\tAssert.That (list.Remove (text), Is.True);\n\t\t\tAssert.That (list, Has.Count.EqualTo (1));\n\t\t\tAssert.That (list, Does.Not.Contain (text));\n\t\t\tAssert.That (list, Does.Contain (image1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"body\", UriKind.Relative)), Is.EqualTo (-1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"http://localhost/image1.jpg\")), Is.EqualTo (0));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"cid:image2@localhost\")), Is.EqualTo (-1));\n\t\t\tAssert.That (list[0], Is.EqualTo (image1));\n\n\t\t\tlist.Clear ();\n\t\t\tAssert.That (list, Is.Empty);\n\n\t\t\tlist.Add (text);\n\t\t\tlist.Add (image1);\n\t\t\tlist.Add (image2);\n\t\t\tlist.CopyTo (parts, 0);\n\t\t\tAssert.That (list.IndexOf (new Uri (\"body\", UriKind.Relative)), Is.EqualTo (0));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"http://localhost/image1.jpg\")), Is.EqualTo (1));\n\t\t\tAssert.That (list.IndexOf (new Uri (\"cid:image2@localhost\")), Is.EqualTo (2));\n\n\t\t\tforeach (var part in list)\n\t\t\t\tAssert.That (part, Is.EqualTo (parts[i++]));\n\n\t\t\ti = 0;\n\t\t\tforeach (var part in (IEnumerable) list)\n\t\t\t\tAssert.That (part, Is.EqualTo (parts[i++]));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNestedBodyStructure ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 28 NIL NIL NIL NIL 2) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 1707 NIL NIL NIL NIL 65) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") NIL NIL NIL) (\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7bit\\\" 641 NIL (\\\"attachment\\\" NIL) NIL NIL (\\\"Sat, 08 Jan 2011 14:16:36 +0100\\\" \\\"Subj 2\\\" ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Recipient\\\" NIL \\\"example\\\" \\\"gmail.com\\\")) NIL NIL NIL NIL) (\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 185 NIL NIL (\\\"cs\\\") NIL 18) 31) (\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7bit\\\" 50592 NIL (\\\"attachment\\\" NIL) NIL NIL (\\\"Sat, 08 Jan 2011 13:58:39 +0100\\\" \\\"Subj 1\\\" ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Recipient\\\" NIL \\\"example\\\" \\\"gmail.com\\\")) NIL NIL NIL NIL) ((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 4296 NIL NIL NIL NIL 345) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 45069 NIL NIL NIL NIL 1295) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_0073_01CBB179.57530990\\\") NIL (\\\"cs\\\") NIL) 1669) \\\"mixed\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_0077_01CBB179.57530990\\\") NIL (\\\"cs\\\") NIL)\";\n\t\t\tBodyPartMultipart multipart;\n\t\t\tBodyPart body;\n\n\t\t\tAssert.That (BodyPart.TryParse (text, out body), Is.True, \"Failed to parse body.\");\n\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_000_0077_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartMessage> (), \"The type of the second child does not match.\");\n\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"The type of the third child does not match.\");\n\n\t\t\t// FIXME: assert more stuff\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultipartWithNoChildren ()\n\t\t{\n\t\t\tvar original = new BodyPartMultipart (new ContentType (\"multipart\", \"mixed\") { Boundary = \"----=_NextPart_000_001\" }, string.Empty);\n\t\t\toriginal.BodyParts.Add (new BodyPartMultipart (new ContentType (\"multipart\", \"alternative\") { Boundary = \"----=_AlternativePart_001_001\" }, string.Empty));\n\n\t\t\tvar serialized = original.ToString ();\n\n\t\t\tAssert.That (BodyPart.TryParse (serialized, out var body), Is.True, \"Failed to parse.\");\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\n\t\t\tvar multipart = (BodyPartMultipart) body;\n\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (original.ContentType.Boundary), \"boundary param did not match\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"BodyParts count does not match.\");\n\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\n\t\t\tvar alternative = (BodyPartMultipart) multipart.BodyParts[0];\n\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Inner Content-Type did not match.\");\n\t\t\tAssert.That (alternative.ContentType.Boundary, Is.EqualTo (original.BodyParts[0].ContentType.Boundary), \"Inner boundary param did not match\");\n\t\t\tAssert.That (alternative.BodyParts, Is.Empty, \"Inner BodyParts count does not match.\");\n\t\t}\n\n\t\tstatic ContentType CreateContentType (string type, string subtype, string partSpecifier)\n\t\t{\n\t\t\tvar contentType = new ContentType (type, subtype);\n\t\t\tcontentType.Parameters.Add (\"part-specifier\", partSpecifier);\n\t\t\treturn contentType;\n\t\t}\n\n\t\tstatic BodyPartMessage CreateMessage (string type, string subtype, string partSpecifier, BodyPart body)\n\t\t{\n\t\t\tvar message = new BodyPartMessage (CreateContentType (type, subtype, partSpecifier), partSpecifier) {\n\t\t\t\tBody = body\n\t\t\t};\n\t\t\treturn message;\n\t\t}\n\n\t\tstatic BodyPartMultipart CreateMultipart (string type, string subtype, string partSpecifier, params BodyPart[] bodyParts)\n\t\t{\n\t\t\tvar multipart = new BodyPartMultipart (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t\tforeach (var bodyPart in bodyParts)\n\t\t\t\tmultipart.BodyParts.Add (bodyPart);\n\t\t\treturn multipart;\n\t\t}\n\n\t\tstatic BodyPartBasic CreateBasic (string type, string subtype, string partSpecifier)\n\t\t{\n\t\t\treturn new BodyPartBasic (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t}\n\n\t\tstatic BodyPartText CreateText (string type, string subtype, string partSpecifier)\n\t\t{\n\t\t\treturn new BodyPartText (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t}\n\n\t\tstatic void VerifyPartSpecifier (BodyPart part)\n\t\t{\n\t\t\tvar expected = part.ContentType.Parameters[\"part-specifier\"];\n\n\t\t\tAssert.That (part.PartSpecifier, Is.EqualTo (expected), $\"The part-specifier does not match for {part.ContentType.MimeType}\");\n\n\t\t\tif (part is BodyPartMessage message) {\n\t\t\t\tVerifyPartSpecifier (message.Body);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (part is BodyPartMultipart multipart) {\n\t\t\t\tfor (int i = 0; i < multipart.BodyParts.Count; i++)\n\t\t\t\t\tVerifyPartSpecifier (multipart.BodyParts[i]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tclass TestVisitor : BodyPartVisitor\n\t\t{\n\t\t\treadonly StringBuilder builder = new StringBuilder ();\n\t\t\tint indent;\n\n\t\t\tpublic override void Visit (BodyPart body)\n\t\t\t{\n\t\t\t\tbuilder.Length = 0;\n\t\t\t\tindent = 0;\n\n\t\t\t\tbase.Visit (body);\n\t\t\t}\n\n\t\t\tprotected internal override void VisitBodyPart (BodyPart entity)\n\t\t\t{\n\t\t\t\tbuilder.Append (' ', indent);\n\t\t\t\tbuilder.Append (entity.ContentType.MimeType);\n\t\t\t\tbuilder.Append ('\\n');\n\n\t\t\t\tbase.VisitBodyPart (entity);\n\t\t\t}\n\n\t\t\tprotected override void VisitMessage (BodyPart message)\n\t\t\t{\n\t\t\t\tindent++;\n\t\t\t\tbase.VisitMessage (message);\n\t\t\t\tindent--;\n\t\t\t}\n\n\t\t\tprotected override void VisitChildren (BodyPartMultipart multipart)\n\t\t\t{\n\t\t\t\tindent++;\n\t\t\t\tbase.VisitChildren (multipart);\n\t\t\t\tindent--;\n\t\t\t}\n\n\t\t\tpublic override string ToString ()\n\t\t\t{\n\t\t\t\treturn builder.ToString ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComplexPartSpecifiersExampleRfc3501 ()\n\t\t{\n\t\t\tconst string expected = \"MULTIPART/MIXED\\n TEXT/PLAIN\\n APPLICATION/OCTET-STREAM\\n MESSAGE/RFC822\\n  MULTIPART/MIXED\\n   TEXT/PLAIN\\n   APPLICATION/OCTET-STREAM\\n MULTIPART/MIXED\\n  IMAGE/GIF\\n  MESSAGE/RFC822\\n   MULTIPART/MIXED\\n    TEXT/PLAIN\\n    MULTIPART/ALTERNATIVE\\n     TEXT/PLAIN\\n     TEXT/RICHTEXT\\n\";\n\t\t\tvar visitor = new TestVisitor ();\n\n\t\t\tBodyPart body = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1\"),\n\t\t\t\tCreateBasic (\"APPLICATION\", \"OCTET-STREAM\", \"2\"),\n\t\t\t\tCreateMessage (\"MESSAGE\", \"RFC822\", \"3\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"MIXED\", \"3\",\n\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"3.1\"),\n\t\t\t\t\t\tCreateBasic (\"APPLICATION\", \"OCTET-STREAM\", \"3.2\")\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tCreateMultipart (\"MULTIPART\", \"MIXED\", \"4\",\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"GIF\", \"4.1\"),\n\t\t\t\t\tCreateMessage (\"MESSAGE\", \"RFC822\", \"4.2\",\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"MIXED\", \"4.2\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"4.2.1\"),\n\t\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"4.2.2\",\n\t\t\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"4.2.2.1\"),\n\t\t\t\t\t\t\t\tCreateText (\"TEXT\", \"RICHTEXT\", \"4.2.2.2\")\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tvisitor.Visit (body);\n\n\t\t\tAssert.That (visitor.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new BodyPartText (new ContentType (\"text\", \"plain\"), string.Empty).Accept (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new BodyPartBasic (new ContentType (\"image\", \"jpeg\"), string.Empty).Accept (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new BodyPartMessage (new ContentType (\"message\", \"rfc822\"), string.Empty).Accept (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new BodyPartMultipart (new ContentType (\"multipart\", \"mixed\"), string.Empty).Accept (null));\n\n\t\t\tvar encoded = body.ToString ();\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => BodyPart.TryParse (null, out body));\n\t\t\tAssert.That (BodyPart.TryParse (encoded, out body), Is.True);\n\n\t\t\tVerifyPartSpecifier (body);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/CompressedStreamTests.cs",
    "content": "﻿//\n// CompressedStreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MailKit;\n\nusing UnitTests.Net;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class CompressedStreamTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Read (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, 0, -1));\n\t\t\t\tAssert.That (stream.Read (buffer, 0, 0), Is.EqualTo (0));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await stream.ReadAsync (null, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, -1, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Write (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, 0, -1));\n\t\t\t\tstream.Write (buffer, 0, 0);\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await stream.WriteAsync (null, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.WriteAsync (buffer, -1, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.WriteAsync (buffer, 0, -1));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeek ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tAssert.That (stream.CanRead, Is.True);\n\t\t\t\tAssert.That (stream.CanWrite, Is.True);\n\t\t\t\tAssert.That (stream.CanSeek, Is.False);\n\t\t\t\tAssert.That (stream.CanTimeout, Is.True);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSetTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tstream.ReadTimeout = 5;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (5), \"ReadTimeout\");\n\n\t\t\t\tstream.WriteTimeout = 7;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (7), \"WriteTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadWrite ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tstring command = \"A00000001 APPEND INBOX (\\\\Seen \\\\Draft) {4096+}\\r\\nFrom: Sample Sender <sender@sample.com>\\r\\nTo: Sample Recipient <recipient@sample.com>\\r\\nSubject: This is a test message...\\r\\nDate: Mon, 22 Oct 2018 18:22:56 EDT\\r\\nMessage-Id: <msgid@localhost.com>\\r\\n\\r\\nTesting... 1. 2. 3.\\r\\nTesting.\\r\\nOver and out.\\r\\n\";\n\t\t\t\tvar output = Encoding.ASCII.GetBytes (command);\n\t\t\t\tconst int compressedLength = 221;\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint n;\n\n\t\t\t\tstream.Write (output, 0, output.Length);\n\t\t\t\tstream.Flush ();\n\n\t\t\t\tAssert.That (stream.InnerStream.Position, Is.EqualTo (compressedLength), \"Compressed output length\");\n\n\t\t\t\tstream.InnerStream.Position = 0;\n\n\t\t\t\tn = stream.Read (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (output.Length), \"Decompressed input length\");\n\n\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\t\t\t\tAssert.That (text, Is.EqualTo (command));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadWriteAsync ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tstring command = \"A00000001 APPEND INBOX (\\\\Seen \\\\Draft) {4096+}\\r\\nFrom: Sample Sender <sender@sample.com>\\r\\nTo: Sample Recipient <recipient@sample.com>\\r\\nSubject: This is a test message...\\r\\nDate: Mon, 22 Oct 2018 18:22:56 EDT\\r\\nMessage-Id: <msgid@localhost.com>\\r\\n\\r\\nTesting... 1. 2. 3.\\r\\nTesting.\\r\\nOver and out.\\r\\n\";\n\t\t\t\tvar output = Encoding.ASCII.GetBytes (command);\n\t\t\t\tconst int compressedLength = 221;\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint n;\n\n\t\t\t\tawait stream.WriteAsync (output, 0, output.Length);\n\t\t\t\tawait stream.FlushAsync ();\n\n\t\t\t\tAssert.That (stream.InnerStream.Position, Is.EqualTo (compressedLength), \"Compressed output length\");\n\n\t\t\t\tstream.InnerStream.Position = 0;\n\n\t\t\t\tn = await stream.ReadAsync (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (output.Length), \"Decompressed input length\");\n\n\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\t\t\t\tAssert.That (text, Is.EqualTo (command));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSeek ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (0, SeekOrigin.Begin));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { var x = stream.Position; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Position = 500);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSetLength ()\n\t\t{\n\t\t\tusing (var stream = new CompressedStream (new DummyNetworkStream ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { var x = stream.Length; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (500));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/DuplexStreamTests.cs",
    "content": "﻿//\n// DuplexStreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nusing UnitTests.Net;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class DuplexStreamTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new DuplexStream (null, Stream.Null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new DuplexStream (Stream.Null, null));\n\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Read (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, 0, -1));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await stream.ReadAsync (null, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, -1, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Write (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, 0, -1));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await stream.WriteAsync (null, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.WriteAsync (buffer, -1, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.WriteAsync (buffer, 0, -1));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeek ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tAssert.That (stream.CanRead, Is.True);\n\t\t\t\tAssert.That (stream.CanWrite, Is.True);\n\t\t\t\tAssert.That (stream.CanSeek, Is.False);\n\t\t\t\tAssert.That (stream.CanTimeout, Is.True);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSetTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tstream.ReadTimeout = 5;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (5), \"ReadTimeout\");\n\n\t\t\t\tstream.WriteTimeout = 7;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (7), \"WriteTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRead ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint n;\n\n\t\t\t\tstream.InputStream.Write (buffer, 0, buffer.Length);\n\t\t\t\tstream.InputStream.Position = 0;\n\n\t\t\t\tn = stream.Read (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (buffer.Length));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadAsync ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint n;\n\n\t\t\t\tstream.InputStream.Write (buffer, 0, buffer.Length);\n\t\t\t\tstream.InputStream.Position = 0;\n\n\t\t\t\tn = await stream.ReadAsync (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (buffer.Length));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSeek ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (0, SeekOrigin.Begin));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { var x = stream.Position; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Position = 500);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSetLength ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { var x = stream.Length; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (500));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWrite ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tvar buffer = new byte[1024];\n\n\t\t\t\tstream.Write (buffer, 0, buffer.Length);\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (stream.OutputStream.Position, Is.EqualTo (buffer.Length));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestWriteAsync ()\n\t\t{\n\t\t\tusing (var stream = new DuplexStream (new DummyNetworkStream (), new DummyNetworkStream ())) {\n\t\t\t\tvar buffer = new byte[1024];\n\n\t\t\t\tawait stream.WriteAsync (buffer, 0, buffer.Length);\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (stream.OutputStream.Position, Is.EqualTo (buffer.Length));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/EnvelopeTests.cs",
    "content": "﻿//\n// EnvelopeTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class EnvelopeTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => Envelope.TryParse (null, out _));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSerialization ()\n\t\t{\n\t\t\tvar original = new Envelope ();\n\t\t\toriginal.Bcc.Add (new MailboxAddress (\"Bcc Recipient\", \"unit-tests@mimekit.org\"));\n\t\t\toriginal.Cc.Add (new MailboxAddress (\"Routed Mailbox\", new string[] { \"domain.org\" }, \"unit-tests@mimekit.org\"));\n\t\t\toriginal.Date = DateTimeOffset.Now;\n\t\t\toriginal.From.Add (new MailboxAddress (\"MailKit Unit Tests\", \"unit-tests@mimekit.org\"));\n\t\t\toriginal.InReplyTo = \"<xyz@mimekit.org>\";\n\t\t\toriginal.MessageId = \"<xyz123@mimekit.org>\";\n\t\t\toriginal.ReplyTo.Add (new MailboxAddress (\"Reply-To\", \"unit-tests@mimekit.org\"));\n\t\t\toriginal.Sender.Add (new MailboxAddress (\"The Real Sender\", \"unit-tests@mimekit.org\"));\n\t\t\toriginal.Subject = \"This is the subject\";\n\t\t\toriginal.To.Add (new GroupAddress (\"Group Address\", new MailboxAddress[] {\n\t\t\t\tnew MailboxAddress (\"John \\\"Q.\\\" Recipient\", \"unit-tests@mimekit.org\"),\n\t\t\t\tnew MailboxAddress (\"Sarah Connor\", \"unit-tests@mimekit.org\")\n\t\t\t}));\n\t\t\tvar text = original.ToString ();\n\t\t\tEnvelope envelope;\n\n\t\t\tAssert.That (Envelope.TryParse (text, out envelope), Is.True);\n\t\t\tvar text2 = envelope.ToString ();\n\n\t\t\tAssert.That (text2, Is.EqualTo (text));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnixAddressSerialization ()\n\t\t{\n\t\t\tvar original = new Envelope ();\n\t\t\toriginal.Date = DateTimeOffset.Now;\n\t\t\toriginal.From.Add (new MailboxAddress ((string) null, \"fejj\"));\n\t\t\toriginal.To.Add (new MailboxAddress ((string) null, \"notzed\"));\n\t\t\toriginal.InReplyTo = \"<xyz@mimekit.org>\";\n\t\t\toriginal.MessageId = \"<xyz123@mimekit.org>\";\n\t\t\toriginal.ReplyTo.Add (new MailboxAddress (\"Reply-To\", \"unit-tests@mimekit.org\"));\n\t\t\toriginal.Sender.Add (new MailboxAddress (\"The Real Sender\", string.Empty));\n\t\t\toriginal.Subject = \"This is the subject\";\n\t\t\tvar text = original.ToString ();\n\n\t\t\tAssert.That (Envelope.TryParse (text, out var envelope), Is.True);\n\t\t\tAssert.That (envelope.Sender.Mailboxes.First ().LocalPart, Is.EqualTo (string.Empty));\n\t\t\tAssert.That (envelope.From.Mailboxes.First ().LocalPart, Is.EqualTo (\"fejj\"));\n\t\t\tAssert.That (envelope.To.Mailboxes.First ().LocalPart, Is.EqualTo (\"notzed\"));\n\t\t\tvar text2 = envelope.ToString ();\n\n\t\t\tAssert.That (text2, Is.EqualTo (text));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExampleEnvelopeRfc3501 ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\\\" \\\"IMAP4rev1 WG mtg summary and minutes\\\" ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"imap\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"minutes\\\" \\\"CNRI.Reston.VA.US\\\") (\\\"John Klensin\\\" NIL \\\"KLENSIN\\\" \\\"MIT.EDU\\\")) NIL NIL \\\"<B27397-0100000@cac.washington.edu>\\\")\";\n\t\t\tEnvelope envelope;\n\n\t\t\tAssert.That (Envelope.TryParse (text, out envelope), Is.True, \"Failed to parse envelope.\");\n\n\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Wed, 17 Jul 1996 02:23:25 -0700\"), \"Date does not match.\");\n\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"Subject does not match.\");\n\n\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"From does not match.\");\n\n\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Sender does not match.\");\n\n\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Reply-To does not match.\");\n\n\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"imap@cac.washington.edu\"), \"To does not match.\");\n\n\t\t\tAssert.That (envelope.Cc, Has.Count.EqualTo (2), \"Cc counts do not match.\");\n\t\t\tAssert.That (envelope.Cc.ToString (), Is.EqualTo (\"minutes@CNRI.Reston.VA.US, \\\"John Klensin\\\" <KLENSIN@MIT.EDU>\"), \"Cc does not match.\");\n\n\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"B27397-0100000@cac.washington.edu\"), \"Message-Id does not match.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEmptyEnvelope ()\n\t\t{\n\t\t\tconst string expected = \"(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)\";\n\t\t\tvar envelope = new Envelope ();\n\n\t\t\tAssert.That (envelope.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (Envelope.TryParse (expected, out envelope), Is.True);\n\t\t\tAssert.That (envelope.ToString (), Is.EqualTo (expected));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGroupAddress ()\n\t\t{\n\t\t\tconst string expected = \"(NIL NIL NIL NIL NIL ((NIL NIL \\\"Agents of Shield\\\" NIL)(\\\"Skye\\\" NIL \\\"skye\\\" \\\"shield.gov\\\")(\\\"Leo Fitz\\\" NIL \\\"fitz\\\" \\\"shield.gov\\\")(\\\"Melinda May\\\" NIL \\\"may\\\" \\\"shield.gov\\\")(NIL NIL NIL NIL)) NIL NIL NIL NIL)\";\n\t\t\tvar group = GroupAddress.Parse (\"Agents of Shield: Skye <skye@shield.gov>, Leo Fitz <fitz@shield.gov>, Melinda May <may@shield.gov>;\");\n\t\t\tvar envelope = new Envelope ();\n\n\t\t\tenvelope.To.Add (group);\n\n\t\t\tAssert.That (envelope.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (Envelope.TryParse (expected, out envelope), Is.True);\n\t\t\tAssert.That (envelope.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1));\n\t\t\tAssert.That (envelope.To[0].ToString (), Is.EqualTo (group.ToString ()));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNestedGroupAddresses ()\n\t\t{\n\t\t\tconst string expected = \"(NIL NIL NIL NIL NIL ((NIL NIL \\\"Agents of Shield\\\" NIL)(NIL NIL \\\"Mutants\\\" NIL)(\\\"Skye\\\" NIL \\\"skye\\\" \\\"shield.gov\\\")(NIL NIL NIL NIL)(\\\"Leo Fitz\\\" NIL \\\"fitz\\\" \\\"shield.gov\\\")(\\\"Melinda May\\\" NIL \\\"may\\\" \\\"shield.gov\\\")(NIL NIL NIL NIL)) NIL NIL NIL NIL)\";\n\t\t\tvar group = GroupAddress.Parse (\"Agents of Shield: Mutants: Skye <skye@shield.gov>;, Leo Fitz <fitz@shield.gov>, Melinda May <may@shield.gov>;\");\n\t\t\tvar envelope = new Envelope ();\n\n\t\t\tenvelope.To.Add (group);\n\n\t\t\tAssert.That (envelope.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (Envelope.TryParse (expected, out envelope), Is.True);\n\t\t\tAssert.That (envelope.ToString (), Is.EqualTo (expected));\n\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1));\n\t\t\tAssert.That (envelope.To[0].ToString (), Is.EqualTo (group.ToString ()));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/EventArgsTests.cs",
    "content": "﻿//\n// EventArgsTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class EventArgsTests\n\t{\n\t\t[Test]\n\t\tpublic void TestAlertEventArgs ()\n\t\t{\n\t\t\tvar args = new AlertEventArgs (\"Klingons on the starboard bow!\");\n\n\t\t\tAssert.That (args.Message, Is.EqualTo (\"Klingons on the starboard bow!\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AlertEventArgs (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWebAlertEventArgs ()\n\t\t{\n\t\t\tvar args = new WebAlertEventArgs (new Uri (\"http://www.google.com/\"), \"Klingons on the starboard bow!\");\n\n\t\t\tAssert.That (args.WebUri.AbsoluteUri, Is.EqualTo (\"http://www.google.com/\"));\n\t\t\tAssert.That (args.Message, Is.EqualTo (\"Klingons on the starboard bow!\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new WebAlertEventArgs (null, \"message text.\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new WebAlertEventArgs (new Uri (\"http://www.google.com/\"), null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAnnotationsChangedEventArgs ()\n\t\t{\n\t\t\tvar annotations = new List<Annotation> ();\n\t\t\tvar args = new AnnotationsChangedEventArgs (0, annotations);\n\t\t\tAssert.That (args.Annotations, Is.Empty);\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AnnotationsChangedEventArgs (0, null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAuthenticatedEventArgs ()\n\t\t{\n\t\t\tvar args = new AuthenticatedEventArgs (\"Access Granted.\");\n\n\t\t\tAssert.That (args.Message, Is.EqualTo (\"Access Granted.\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new AuthenticatedEventArgs (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFolderCreatedEventArgs ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderCreatedEventArgs (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFolderRenamedEventArgs ()\n\t\t{\n\t\t\tvar args = new FolderRenamedEventArgs (\"Istanbul\", \"Constantinople\");\n\n\t\t\tAssert.That (args.OldName, Is.EqualTo (\"Istanbul\"));\n\t\t\tAssert.That (args.NewName, Is.EqualTo (\"Constantinople\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderRenamedEventArgs (null, \"name\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderRenamedEventArgs (\"name\", null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageEventArgs ()\n\t\t{\n\t\t\tvar args = new MessageEventArgs (0);\n\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageEventArgs (-1));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageFlagsChangedEventArgs ()\n\t\t{\n\t\t\tvar keywords = new HashSet<string> (new [] { \"custom1\", \"custom2\" });\n\t\t\tMessageFlagsChangedEventArgs args;\n\t\t\tvar uid = new UniqueId (5);\n\t\t\tulong modseq = 724;\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0);\n\t\t\tAssert.That (args.Keywords, Is.Empty);\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.None));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, MessageFlags.Answered);\n\t\t\tAssert.That (args.Keywords, Is.Empty);\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, MessageFlags.Answered, modseq);\n\t\t\tAssert.That (args.Keywords, Is.Empty);\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, MessageFlags.Answered, keywords);\n\t\t\tAssert.That (args.Keywords, Has.Count.EqualTo (keywords.Count));\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, MessageFlags.Answered, keywords, modseq);\n\t\t\tAssert.That (args.Keywords, Has.Count.EqualTo (keywords.Count));\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, uid, MessageFlags.Answered);\n\t\t\tAssert.That (args.Keywords, Is.Empty);\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (uid));\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, uid, MessageFlags.Answered, modseq);\n\t\t\tAssert.That (args.Keywords, Is.Empty);\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (uid));\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, uid, MessageFlags.Answered, keywords);\n\t\t\tAssert.That (args.Keywords, Has.Count.EqualTo (keywords.Count));\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (uid));\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageFlagsChangedEventArgs (0, uid, MessageFlags.Answered, keywords, modseq);\n\t\t\tAssert.That (args.Keywords, Has.Count.EqualTo (keywords.Count));\n\t\t\tAssert.That (args.Flags, Is.EqualTo (MessageFlags.Answered));\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (uid));\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, MessageFlags.Answered));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, MessageFlags.Answered, modseq));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, MessageFlags.Answered, keywords));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, MessageFlags.Answered, keywords, modseq));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, uid, MessageFlags.Answered));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, uid, MessageFlags.Answered, modseq));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, uid, MessageFlags.Answered, keywords));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageFlagsChangedEventArgs (-1, uid, MessageFlags.Answered, keywords, modseq));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageFlagsChangedEventArgs (0, MessageFlags.Answered, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageFlagsChangedEventArgs (0, MessageFlags.Answered, null, modseq));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageFlagsChangedEventArgs (0, uid, MessageFlags.Answered, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageFlagsChangedEventArgs (0, uid, MessageFlags.Answered, null, modseq));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageLabelsChangedEventArgs ()\n\t\t{\n\t\t\tvar labels = new string[] { \"label1\", \"label2\" };\n\t\t\tMessageLabelsChangedEventArgs args;\n\t\t\tvar uid = new UniqueId (5);\n\t\t\tulong modseq = 724;\n\n\t\t\targs = new MessageLabelsChangedEventArgs (0, labels);\n\t\t\tAssert.That (args.Labels, Has.Count.EqualTo (labels.Length));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageLabelsChangedEventArgs (0, labels, modseq);\n\t\t\tAssert.That (args.Labels, Has.Count.EqualTo (labels.Length));\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageLabelsChangedEventArgs (0, uid, labels);\n\t\t\tAssert.That (args.Labels, Has.Count.EqualTo (labels.Length));\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (uid));\n\t\t\tAssert.That (args.ModSeq.HasValue, Is.False);\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new MessageLabelsChangedEventArgs (0, uid, labels, modseq);\n\t\t\tAssert.That (args.Labels, Has.Count.EqualTo (labels.Length));\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (uid));\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageLabelsChangedEventArgs (-1, labels));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageLabelsChangedEventArgs (-1, labels, modseq));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageLabelsChangedEventArgs (-1, uid, labels));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageLabelsChangedEventArgs (-1, uid, labels, modseq));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageLabelsChangedEventArgs (0, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageLabelsChangedEventArgs (0, null, modseq));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageLabelsChangedEventArgs (0, uid, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageLabelsChangedEventArgs (0, uid, null, modseq));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageSentEventArgs ()\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tMessageSentEventArgs args;\n\n\t\t\targs = new MessageSentEventArgs (message, \"response\");\n\n\t\t\tAssert.That (args.Message, Is.EqualTo (message));\n\t\t\tAssert.That (args.Response, Is.EqualTo (\"response\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageSentEventArgs (null, \"response\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageSentEventArgs (message, null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageSummaryFetchedEventArgs ()\n\t\t{\n\t\t\tvar message = new MessageSummary (0);\n\t\t\tMessageSummaryFetchedEventArgs args;\n\n\t\t\targs = new MessageSummaryFetchedEventArgs (message);\n\n\t\t\tAssert.That (args.Message, Is.EqualTo (message));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageSummaryFetchedEventArgs (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessagesVanishedEventArgs ()\n\t\t{\n\t\t\tvar uids = new UniqueIdRange (0, 5, 7);\n\t\t\tMessagesVanishedEventArgs args;\n\n\t\t\targs = new MessagesVanishedEventArgs (uids, true);\n\n\t\t\tAssert.That (args.UniqueIds, Is.EqualTo (uids));\n\t\t\tAssert.That (args.Earlier, Is.True);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessagesVanishedEventArgs (null, false));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMetadataChangedEventArgs ()\n\t\t{\n\t\t\tvar args = new MetadataChangedEventArgs (new Metadata (MetadataTag.PrivateComment, \"this is a comment\"));\n\n\t\t\tAssert.That (args.Metadata.Tag, Is.EqualTo (MetadataTag.PrivateComment), \"Tag\");\n\t\t\tAssert.That (args.Metadata.Value, Is.EqualTo (\"this is a comment\"), \"Value\");\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MetadataChangedEventArgs (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestModSeqChangedEventArgs ()\n\t\t{\n\t\t\tModSeqChangedEventArgs args;\n\t\t\tulong modseq = 724;\n\n\t\t\targs = new ModSeqChangedEventArgs (0, modseq);\n\t\t\tAssert.That (args.UniqueId.HasValue, Is.False);\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\targs = new ModSeqChangedEventArgs (0, UniqueId.MinValue, modseq);\n\t\t\tAssert.That (args.UniqueId, Is.EqualTo (UniqueId.MinValue));\n\t\t\tAssert.That (args.ModSeq, Is.EqualTo (modseq));\n\t\t\tAssert.That (args.Index, Is.EqualTo (0));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new ModSeqChangedEventArgs (-1, modseq));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new ModSeqChangedEventArgs (-1, UniqueId.MinValue, modseq));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/ExceptionTests.cs",
    "content": "﻿//\n// ExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit;\nusing MailKit.Net.Imap;\nusing MailKit.Net.Pop3;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class ExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestFolderNotFoundException ()\n\t\t{\n\t\t\tvar expected = new FolderNotFoundException (\"Inbox\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (FolderNotFoundException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.FolderName, Is.EqualTo (expected.FolderName), \"Unexpected FolderName.\");\n\t\t\t}\n\n\t\t\texpected = new FolderNotFoundException (\"This is the error message.\", \"Inbox\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (FolderNotFoundException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.FolderName, Is.EqualTo (expected.FolderName), \"Unexpected FolderName.\");\n\t\t\t}\n\n\t\t\texpected = new FolderNotFoundException (\"This is the error message.\", \"Inbox\", new IOException (\"Inner Exception\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (FolderNotFoundException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.FolderName, Is.EqualTo (expected.FolderName), \"Unexpected FolderName.\");\n\t\t\t}\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNotFoundException (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNotFoundException (\"message\", null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNotFoundException (\"message\", null, new Exception (\"message\")));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFolderNotOpenException ()\n\t\t{\n\t\t\tvar expected = new FolderNotOpenException (\"Inbox\", FolderAccess.ReadWrite);\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (FolderNotOpenException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.FolderName, Is.EqualTo (expected.FolderName), \"Unexpected FolderName.\");\n\t\t\t\tAssert.That (ex.FolderAccess, Is.EqualTo (expected.FolderAccess), \"Unexpected FolderAccess.\");\n\t\t\t}\n\n\t\t\texpected = new FolderNotOpenException (\"Inbox\", FolderAccess.ReadWrite, \"This is the error message.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (FolderNotOpenException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.FolderName, Is.EqualTo (expected.FolderName), \"Unexpected FolderName.\");\n\t\t\t\tAssert.That (ex.FolderAccess, Is.EqualTo (expected.FolderAccess), \"Unexpected FolderAccess.\");\n\t\t\t}\n\n\t\t\texpected = new FolderNotOpenException (\"Inbox\", FolderAccess.ReadWrite, \"This is the error message.\", new IOException (\"Inner Exception\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (FolderNotOpenException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.FolderName, Is.EqualTo (expected.FolderName), \"Unexpected FolderName.\");\n\t\t\t\tAssert.That (ex.FolderAccess, Is.EqualTo (expected.FolderAccess), \"Unexpected FolderAccess.\");\n\t\t\t}\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNotOpenException (null, FolderAccess.ReadOnly));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNotOpenException (null, FolderAccess.ReadOnly, \"message\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNotOpenException (null, FolderAccess.ReadOnly, \"message\", new Exception (\"message\")));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageNotFoundException ()\n\t\t{\n\t\t\tvar expected = new MessageNotFoundException (\"This is the message.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (MessageNotFoundException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new MessageNotFoundException (\"This is the message.\", new IOException (\"Inner Exception\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (MessageNotFoundException)formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestServiceNotAuthenticatedException ()\n\t\t{\n\t\t\tvar expected = new ServiceNotAuthenticatedException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ServiceNotAuthenticatedException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new ServiceNotAuthenticatedException (\"This is the message.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ServiceNotAuthenticatedException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new ServiceNotAuthenticatedException (\"This is the message.\", new IOException (\"Inner Exception\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ServiceNotAuthenticatedException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestServiceNotConnectedException ()\n\t\t{\n\t\t\tvar expected = new ServiceNotConnectedException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ServiceNotConnectedException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new ServiceNotConnectedException (\"This is the message.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ServiceNotConnectedException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new ServiceNotConnectedException (\"This is the message.\", new IOException (\"Inner Exception\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ServiceNotConnectedException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestImapCommandException ()\n\t\t{\n\t\t\tvar expected = new ImapCommandException (ImapCommandResponse.Bad, \"Bad boys, bad boys. Whatcha gonna do?\", \"Message\", new Exception (\"InnerException\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapCommandException)formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Response, Is.EqualTo (expected.Response), \"Unexpected Response.\");\n\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (expected.ResponseText), \"Unexpected ResponseText.\");\n\t\t\t}\n\n\t\t\texpected = new ImapCommandException (ImapCommandResponse.Bad, \"Bad boys, bad boys. Whatcha gonna do?\", \"Message\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapCommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Response, Is.EqualTo (expected.Response), \"Unexpected Response.\");\n\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (expected.ResponseText), \"Unexpected ResponseText.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestImapProtocolException ()\n\t\t{\n\t\t\tvar expected = new ImapProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\", new Exception (\"InnerException\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = new ImapProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = new ImapProtocolException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestPop3CommandException ()\n\t\t{\n\t\t\tvar expected = new Pop3CommandException (\"Message\", \"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Pop3CommandException (\"Message\", (string) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Pop3CommandException (\"Message\", null, new Exception (\"inner\")));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3CommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.StatusText, Is.EqualTo (expected.StatusText), \"Unexpected StatusText.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestPop3ProtocolException ()\n\t\t{\n\t\t\tvar expected = new Pop3ProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\", new Exception (\"InnerException\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3ProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = new Pop3ProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3ProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = new Pop3ProtocolException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3ProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/ExceptionalProtocolLogger.cs",
    "content": "﻿//\n// ExceptionalProtocolLogger.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\tenum ExceptionalProtocolLoggerMode\n\t{\n\t\tThrowOnLogConnect,\n\t\tThrowOnLogClient,\n\t\tThrowOnLogServer,\n\t}\n\n\tclass ExceptionalProtocolLogger : IProtocolLogger\n\t{\n\t\treadonly ExceptionalProtocolLoggerMode mode;\n\n\t\tpublic IAuthenticationSecretDetector AuthenticationSecretDetector { get; set; }\n\n\t\tpublic ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode mode)\n\t\t{\n\t\t\tthis.mode = mode;\n\t\t}\n\n\t\tpublic void LogConnect (Uri uri)\n\t\t{\n\t\t\tif (mode == ExceptionalProtocolLoggerMode.ThrowOnLogConnect)\n\t\t\t\tthrow new NotImplementedException ();\n\t\t}\n\n\t\tpublic void LogClient (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (mode == ExceptionalProtocolLoggerMode.ThrowOnLogClient)\n\t\t\t\tthrow new NotImplementedException ();\n\t\t}\n\n\t\tpublic void LogServer (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (mode == ExceptionalProtocolLoggerMode.ThrowOnLogServer)\n\t\t\t\tthrow new NotImplementedException ();\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/FolderNamespaceTests.cs",
    "content": "﻿//\n// FolderNamespaceTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections;\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class FolderNamespaceTests\n\t{\n\t\t[Test]\n\t\tpublic void TestFolderNamespace ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FolderNamespace ('.', null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFolderNamespaceCollection ()\n\t\t{\n\t\t\tvar namespaces = new FolderNamespaceCollection ();\n\t\t\tFolderNamespace ns;\n\t\t\tint i = 0;\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => namespaces.Add (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => namespaces.Contains (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => namespaces.Remove (null));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => ns = namespaces[-1]);\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => namespaces[-1] = new FolderNamespace ('.', \"\"));\n\n\t\t\tAssert.That (namespaces, Is.Empty);\n\n\t\t\tns = new FolderNamespace ('.', \"\");\n\t\t\tnamespaces.Add (ns);\n\t\t\tAssert.That (namespaces, Has.Count.EqualTo (1));\n\t\t\tAssert.That (namespaces.Contains (ns), Is.True);\n\t\t\tAssert.Throws<ArgumentNullException> (() => namespaces[0] = null);\n\n\t\t\tns = new FolderNamespace ('\\\\', \"\");\n\t\t\tnamespaces[0] = ns;\n\t\t\tAssert.That (namespaces, Has.Count.EqualTo (1));\n\t\t\tAssert.That (namespaces.Contains (ns), Is.True);\n\n\t\t\tAssert.That (namespaces.Remove (ns), Is.True);\n\t\t\tAssert.That (namespaces, Is.Empty);\n\t\t\tAssert.That (namespaces.Contains (ns), Is.False);\n\n\t\t\tnamespaces.Add (new FolderNamespace ('.', \"\"));\n\t\t\tnamespaces.Add (new FolderNamespace ('\\\\', \"\"));\n\t\t\tforeach (var item in namespaces)\n\t\t\t\tAssert.That (item, Is.EqualTo (namespaces[i++]));\n\t\t\ti = 0;\n\t\t\tforeach (object item in (IEnumerable) namespaces)\n\t\t\t\tAssert.That (item, Is.EqualTo (namespaces[i++]));\n\n\t\t\tAssert.That (namespaces.ToString (), Is.EqualTo (\"((\\\".\\\" \\\"\\\")(\\\"\\\\\\\\\\\" \\\"\\\"))\"));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/HeaderSetTests.cs",
    "content": "﻿//\n// HeaderSetTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections;\n\nusing MimeKit;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class HeaderSetTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar headers = new HeaderSet ();\n\t\t\tvar array = new string[10];\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => headers.Add (HeaderId.Unknown));\n\t\t\tAssert.Throws<ArgumentNullException> (() => headers.AddRange ((IEnumerable<HeaderId>) null));\n\t\t\tAssert.Throws<ArgumentException> (() => headers.AddRange (new HeaderId[] { HeaderId.Unknown }));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => headers.Add (null));\n\t\t\tAssert.Throws<ArgumentException> (() => headers.Add (string.Empty));\n\t\t\tAssert.Throws<ArgumentException> (() => headers.Add (\"This is invalid\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => headers.AddRange ((IEnumerable<string>) null));\n\t\t\tAssert.Throws<ArgumentException> (() => headers.AddRange (new string[] { \"This is invalid\" }));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => ((ICollection<string>) headers).Add (null));\n\t\t\tAssert.Throws<ArgumentException> (() => ((ICollection<string>) headers).Add (string.Empty));\n\t\t\tAssert.Throws<ArgumentException> (() => ((ICollection<string>) headers).Add (\"This is invalid\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => headers.CopyTo (null, 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => headers.CopyTo (array, -1));\n\t\t\tAssert.Throws<ArgumentException> (() => headers.CopyTo (array, 11));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => headers.Contains (HeaderId.Unknown));\n\t\t\tAssert.Throws<ArgumentNullException> (() => headers.Contains (null));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => headers.Remove (HeaderId.Unknown));\n\t\t\tAssert.Throws<ArgumentNullException> (() => headers.Remove (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicFunctionality ()\n\t\t{\n\t\t\tvar headers = new HeaderSet ();\n\n\t\t\tAssert.That (headers.Add (\"From\"), Is.True, \"Adding From\");\n\t\t\tAssert.That (headers.Add (\"From\"), Is.False, \"Adding From duplicate #1\");\n\t\t\tAssert.That (headers.Add (\"FROM\"), Is.False, \"Adding From duplicate #2\");\n\t\t\tAssert.That (headers.Add (\"fRoM\"), Is.False, \"Adding From duplicate #3\");\n\t\t\tAssert.That (headers.Add (HeaderId.From), Is.False, \"Adding From duplicate #4\");\n\t\t\tAssert.That (headers, Has.Count.EqualTo (1), \"Count #1\");\n\n\t\t\tAssert.That (headers.Remove (HeaderId.From), Is.True, \"Removing From\");\n\t\t\tAssert.That (headers.Remove (\"From\"), Is.False, \"Removing From duplicate #1\");\n\t\t\tAssert.That (headers.Remove (HeaderId.From), Is.False, \"Removing From duplicate #2\");\n\t\t\tAssert.That (headers, Is.Empty, \"Count #2\");\n\n\t\t\theaders.AddRange (new HeaderId[] { HeaderId.Sender, HeaderId.From, HeaderId.ReplyTo });\n\t\t\tAssert.That (headers, Has.Count.EqualTo (3), \"Count #3\");\n\n\t\t\theaders.AddRange (new string[] { \"to\", \"cc\", \"bcc\" });\n\t\t\tAssert.That (headers, Has.Count.EqualTo (6), \"Count #4\");\n\n\t\t\tAssert.That (headers.Contains (HeaderId.To), Is.True, \"Contains #1\");\n\t\t\tAssert.That (headers.Contains (\"reply-to\"), Is.True, \"Contains #2\");\n\n\t\t\tvar results = new string[headers.Count];\n\t\t\theaders.CopyTo (results, 0);\n\t\t\tArray.Sort (results);\n\t\t\tAssert.That (results[0], Is.EqualTo (\"BCC\"));\n\t\t\tAssert.That (results[1], Is.EqualTo (\"CC\"));\n\t\t\tAssert.That (results[2], Is.EqualTo (\"FROM\"));\n\t\t\tAssert.That (results[3], Is.EqualTo (\"REPLY-TO\"));\n\t\t\tAssert.That (results[4], Is.EqualTo (\"SENDER\"));\n\t\t\tAssert.That (results[5], Is.EqualTo (\"TO\"));\n\n\t\t\tforeach (var header in headers)\n\t\t\t\tAssert.That (results, Does.Contain (header));\n\n\t\t\tforeach (string header in ((IEnumerable) headers))\n\t\t\t\tAssert.That (results, Does.Contain (header));\n\n\t\t\theaders.Clear ();\n\t\t\tAssert.That (headers, Is.Empty, \"Count after Clear\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/MailServiceTests.cs",
    "content": "﻿//\n// MailServiceTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net.Security;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\nusing MailKit.Net.Pop3;\nusing MailKit.Net.Smtp;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class MailServiceTests\n\t{\n\t\tbool SslCertificateValidationCallback (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)\n\t\t{\n\t\t\tvar certificate2 = certificate as X509Certificate2;\n\n\t\t\tAssert.That (certificate2, Is.Not.Null, \"Cast\");\n\n\t\t\treturn true;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIsKnownMailServerCertificate ()\n\t\t{\n\t\t\tvar servers = new string[] {\n\t\t\t\t\"imap://imap.gmail.com:993\",\n\t\t\t\t\"pop://pop.gmail.com:995\",\n\t\t\t\t\"smtp://smtp.gmail.com:587\",\n\n\t\t\t\t\"imap://outlook.office365.com:993\",\n\t\t\t\t\"pop://outlook.office365.com:995\",\n\t\t\t\t\"smtp://smtp.office365.com:587\",\n\t\t\t};\n\n\t\t\tforeach (var server in servers) {\n\t\t\t\tvar uri = new Uri (server);\n\t\t\t\tMailService client;\n\n\t\t\t\tswitch (uri.Scheme) {\n\t\t\t\tcase \"imap\": client = new ImapClient (); break;\n\t\t\t\tcase \"pop\": client = new Pop3Client (); break;\n\t\t\t\tcase \"smtp\": client = new SmtpClient (); break;\n\t\t\t\tdefault: throw new Exception (\"Unsupported protocol\");\n\t\t\t\t}\n\n\t\t\t\tusing (client) {\n\t\t\t\t\tclient.ServerCertificateValidationCallback = SslCertificateValidationCallback;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (uri.Host, uri.Port, SecureSocketOptions.Auto);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/MessageSortingTests.cs",
    "content": "﻿//\n// MessageSortingTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\n\nusing MailKit.Search;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class MessageSortingTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar messages = new List<MessageSummary> { new MessageSummary (0) };\n\t\t\tvar orderBy = new OrderBy[] { OrderBy.Subject };\n\t\t\tvar emptyOrderBy = Array.Empty<OrderBy> ();\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageSorter.Sort ((List<MessageSummary>) null, orderBy));\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageSorter.Sort (messages, null));\n\t\t\tAssert.Throws<ArgumentException> (() => MessageSorter.Sort (messages, emptyOrderBy));\n\t\t\tAssert.Throws<ArgumentException> (() => MessageSorter.Sort (messages, orderBy));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageSorter.Sort ((IEnumerable<MessageSummary>) null, orderBy));\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageSorter.Sort ((IEnumerable<MessageSummary>) messages, null));\n\t\t\tAssert.Throws<ArgumentException> (() => MessageSorter.Sort ((IEnumerable<MessageSummary>) messages, emptyOrderBy));\n\t\t\tAssert.Throws<ArgumentException> (() => MessageSorter.Sort ((IEnumerable<MessageSummary>) messages, orderBy));\n\t\t}\n\n\t\tstatic List<MessageSummary> Create ()\n\t\t{\n\t\t\tvar messages = new List<MessageSummary> ();\n\t\t\tMessageSummary summary;\n\n\t\t\tsummary = new MessageSummary (0);\n\t\t\tsummary.Fields = MessageSummaryItems.Annotations | MessageSummaryItems.Envelope | MessageSummaryItems.Size | MessageSummaryItems.ModSeq;\n\t\t\tsummary.Annotations = new List<Annotation> (new [] {\n\t\t\t\tnew Annotation (AnnotationEntry.AltSubject)\n\t\t\t});\n\t\t\tsummary.Annotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"aaaa\");\n\t\t\tsummary.Envelope = new Envelope ();\n\t\t\tsummary.Envelope.Date = DateTimeOffset.Now.AddSeconds (-2);\n\t\t\tsummary.Envelope.Subject = \"aaaa\";\n\t\t\tsummary.Envelope.From.Add (new MailboxAddress (\"A\", \"a@a.com\"));\n\t\t\tsummary.Envelope.To.Add (new MailboxAddress (\"A\", \"a@a.com\"));\n\t\t\tsummary.Envelope.Cc.Add (new MailboxAddress (\"A\", \"a@a.com\"));\n\t\t\tsummary.ModSeq = 80290;\n\t\t\tsummary.Size = 520;\n\t\t\tmessages.Add (summary);\n\n\t\t\tsummary = new MessageSummary (1);\n\t\t\tsummary.Fields = MessageSummaryItems.Annotations | MessageSummaryItems.Envelope | MessageSummaryItems.Size | MessageSummaryItems.ModSeq;\n\t\t\tsummary.Annotations = new List<Annotation> (new [] {\n\t\t\t\tnew Annotation (AnnotationEntry.AltSubject)\n\t\t\t});\n\t\t\tsummary.Annotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"bbbb\");\n\t\t\tsummary.Envelope = new Envelope ();\n\t\t\tsummary.Envelope.Date = DateTimeOffset.Now.AddSeconds (-1);\n\t\t\tsummary.Envelope.Subject = \"bbbb\";\n\t\t\tsummary.Envelope.From.Add (new MailboxAddress (\"B\", \"b@b.com\"));\n\t\t\tsummary.Envelope.To.Add (new MailboxAddress (\"B\", \"b@b.com\"));\n\t\t\tsummary.Envelope.Cc.Add (new MailboxAddress (\"B\", \"b@b.com\"));\n\t\t\tsummary.ModSeq = 70642;\n\t\t\tsummary.Size = 265;\n\t\t\tmessages.Add (summary);\n\n\t\t\tsummary = new MessageSummary (2);\n\t\t\tsummary.Fields = MessageSummaryItems.Annotations | MessageSummaryItems.Envelope | MessageSummaryItems.Size | MessageSummaryItems.ModSeq;\n\t\t\tsummary.Annotations = new List<Annotation> (new [] {\n\t\t\t\tnew Annotation (AnnotationEntry.AltSubject)\n\t\t\t});\n\t\t\tsummary.Annotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"cccc\");\n\t\t\tsummary.Envelope = new Envelope ();\n\t\t\tsummary.Envelope.Date = DateTimeOffset.Now;\n\t\t\tsummary.Envelope.Subject = \"cccc\";\n\t\t\tsummary.Envelope.From.Add (new MailboxAddress (\"C\", \"c@c.com\"));\n\t\t\tsummary.Envelope.To.Add (new MailboxAddress (\"C\", \"c@c.com\"));\n\t\t\tsummary.Envelope.Cc.Add (new MailboxAddress (\"C\", \"c@c.com\"));\n\t\t\tsummary.ModSeq = 80290;\n\t\t\tsummary.Size = 520;\n\t\t\tmessages.Add (summary);\n\n\t\t\treturn messages;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSorting ()\n\t\t{\n\t\t\tvar messages = Create ();\n\n\t\t\tmessages.Sort (new[] { OrderBy.Arrival });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by arrival failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by arrival failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by arrival failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.ReverseArrival });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (2), \"Sorting by reverse arrival failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by reverse arrival failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (0), \"Sorting by reverse arrival failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.Subject });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by subject failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by subject failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by subject failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.ReverseSubject });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (2), \"Sorting by reverse subject failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by reverse subject failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (0), \"Sorting by reverse subject failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.Size, OrderBy.Arrival });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (1), \"Sorting by size failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (0), \"Sorting by size failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by size failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.Date });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by date failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by date failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by date failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.Size, OrderBy.Subject });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (1), \"Sorting by size+subject failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (0), \"Sorting by size+subject failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by size+subject failed.\");\n\n\t\t\tmessages.Sort (new [] { OrderBy.ReverseSize, OrderBy.ReverseSubject });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (2), \"Sorting by reversed size+subject failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (0), \"Sorting by reversed size+subject failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (1), \"Sorting by reversed size+subject failed.\");\n\n\t\t\tmessages.Sort (new[] { OrderBy.DisplayFrom });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by display-from failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by display-from failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by display-from failed.\");\n\n\t\t\tmessages.Sort (new[] { OrderBy.From });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by from failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by from failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by from failed.\");\n\n\t\t\tmessages.Sort (new[] { OrderBy.DisplayTo });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by display-to failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by display-to failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by display-to failed.\");\n\n\t\t\tmessages.Sort (new[] { OrderBy.To });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by to failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by to failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by to failed.\");\n\n\t\t\tmessages.Sort (new[] { OrderBy.Cc });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by cc failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by cc failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by cc failed.\");\n\n\t\t\tmessages.Sort (new [] { new OrderBy (OrderByType.ModSeq, SortOrder.Ascending), OrderBy.Arrival });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (1), \"Sorting by modseq failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (0), \"Sorting by modseq failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by modseq failed.\");\n\n\t\t\tmessages.Sort (new[] { new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Ascending) });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (0), \"Sorting by altsubject failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by altsubject failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (2), \"Sorting by altsubject failed.\");\n\n\t\t\tmessages.Sort (new[] { new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Descending) });\n\t\t\tAssert.That (messages[0].Index, Is.EqualTo (2), \"Sorting by reverse altsubject failed.\");\n\t\t\tAssert.That (messages[1].Index, Is.EqualTo (1), \"Sorting by reverse altsubject failed.\");\n\t\t\tAssert.That (messages[2].Index, Is.EqualTo (0), \"Sorting by reverse altsubject failed.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSortingEnumerable ()\n\t\t{\n\t\t\tvar messages = Create ();\n\t\t\tIEnumerable<MessageSummary> enumerable = messages;\n\t\t\tIList<MessageSummary> sorted;\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.Arrival });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by arrival failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by arrival failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by arrival failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.ReverseArrival });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (2), \"Sorting by reverse arrival failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by reverse arrival failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (0), \"Sorting by reverse arrival failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.Subject });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by subject failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by subject failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by subject failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.ReverseSubject });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (2), \"Sorting by reverse subject failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by reverse subject failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (0), \"Sorting by reverse subject failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.Size, OrderBy.Arrival });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (1), \"Sorting by size failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (0), \"Sorting by size failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by size failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.Date });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by date failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by date failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by date failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.Size, OrderBy.Subject });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (1), \"Sorting by size+subject failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (0), \"Sorting by size+subject failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by size+subject failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.ReverseSize, OrderBy.ReverseSubject });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (2), \"Sorting by reversed size+subject failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (0), \"Sorting by reversed size+subject failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (1), \"Sorting by reversed size+subject failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.DisplayFrom });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by display-from failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by display-from failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by display-from failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.From });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by from failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by from failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by from failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.DisplayTo });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by display-to failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by display-to failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by display-to failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.To });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by to failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by to failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by to failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { OrderBy.Cc });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by cc failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by cc failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by cc failed.\");\n\n\t\t\tsorted = enumerable.Sort (new [] { new OrderBy (OrderByType.ModSeq, SortOrder.Ascending), OrderBy.Arrival });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (1), \"Sorting by modseq failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (0), \"Sorting by modseq failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by modseq failed.\");\n\n\t\t\tsorted = enumerable.Sort (new[] { new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Ascending) });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (0), \"Sorting by subject failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by subject failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (2), \"Sorting by subject failed.\");\n\n\t\t\tsorted = enumerable.Sort (new[] { new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Descending) });\n\t\t\tAssert.That (sorted[0].Index, Is.EqualTo (2), \"Sorting by reverse subject failed.\");\n\t\t\tAssert.That (sorted[1].Index, Is.EqualTo (1), \"Sorting by reverse subject failed.\");\n\t\t\tAssert.That (sorted[2].Index, Is.EqualTo (0), \"Sorting by reverse subject failed.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/MessageSummaryTests.cs",
    "content": "﻿//\n// MessageSummaryTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class MessageSummaryTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new MessageSummary (-1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MessageSummary (null, 0));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDefaultValues ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (17);\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (0), \"Attachments\");\n\t\t\tAssert.That (summary.Body, Is.Null, \"Body\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (0), \"BodyParts\");\n\t\t\tAssert.That (summary.Date, Is.EqualTo (DateTimeOffset.MinValue), \"Date\");\n\t\t\tAssert.That (summary.Envelope, Is.Null, \"Envelope\");\n\t\t\tAssert.That (summary.Flags, Is.Null, \"Flags\");\n\t\t\tAssert.That (summary.GMailLabels, Is.Null, \"GMailLabels\");\n\t\t\tAssert.That (summary.GMailMessageId, Is.Null, \"GMailMessageId\");\n\t\t\tAssert.That (summary.GMailThreadId, Is.Null, \"GMailThreadId\");\n\t\t\tAssert.That (summary.Headers, Is.Null, \"Headers\");\n\t\t\tAssert.That (summary.HtmlBody, Is.Null, \"HtmlBody\");\n\t\t\tAssert.That (summary.Index, Is.EqualTo (17), \"Index\");\n\t\t\tAssert.That (summary.InternalDate, Is.Null, \"InternalDate\");\n\t\t\tAssert.That (summary.IsReply, Is.False, \"IsReply\");\n\t\t\tAssert.That (summary.ModSeq, Is.Null, \"ModSeq\");\n\t\t\tAssert.That (summary.NormalizedSubject, Is.EqualTo (string.Empty), \"NormalizedSubject\");\n\t\t\tAssert.That (summary.PreviewText, Is.Null, \"PreviewText\");\n\t\t\tAssert.That (summary.References, Is.Null, \"References\");\n\t\t\tAssert.That (summary.Size, Is.Null, \"Size\");\n\t\t\tAssert.That (summary.TextBody, Is.Null, \"TextBody\");\n\t\t\tAssert.That (summary.UniqueId, Is.EqualTo (UniqueId.Invalid), \"UniqueId\");\n\t\t\tAssert.That (summary.Keywords, Is.Not.Null, \"Keywords\");\n\t\t\tAssert.That (summary.Keywords, Is.Empty, \"Keywords\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGMailProperties ()\n\t\t{\n\t\t\tulong msgid = 179111;\n\t\t\tulong thrid = 7192564;\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tGMailLabels = new List<string> (),\n\t\t\t\tGMailMessageId = msgid,\n\t\t\t\tGMailThreadId = thrid\n\t\t\t};\n\n\t\t\tAssert.That (summary.GMailLabels, Is.Empty, \"GMailLabels\");\n\t\t\tAssert.That (summary.GMailMessageId, Is.EqualTo (msgid), \"GMailMessageId\");\n\t\t\tAssert.That (summary.GMailThreadId, Is.EqualTo (thrid), \"GMailThreadId\");\n\t\t}\n\n\t\tstatic ContentType CreateContentType (string type, string subtype, string partSpecifier)\n\t\t{\n\t\t\tvar contentType = new ContentType (type, subtype);\n\t\t\tcontentType.Parameters.Add (\"part-specifier\", partSpecifier);\n\t\t\treturn contentType;\n\t\t}\n\n\t\tstatic BodyPartMessage CreateMessage (string type, string subtype, string partSpecifier, BodyPart body, bool attachment)\n\t\t{\n\t\t\tvar message = new BodyPartMessage (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t\tif (attachment)\n\t\t\t\tmessage.ContentDisposition = new ContentDisposition (ContentDisposition.Attachment);\n\t\t\tmessage.Body = body;\n\t\t\treturn message;\n\t\t}\n\n\t\tstatic BodyPartMultipart CreateMultipart (string type, string subtype, string partSpecifier, params BodyPart [] bodyParts)\n\t\t{\n\t\t\tvar multipart = new BodyPartMultipart (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t\tforeach (var bodyPart in bodyParts)\n\t\t\t\tmultipart.BodyParts.Add (bodyPart);\n\t\t\treturn multipart;\n\t\t}\n\n\t\tstatic BodyPartBasic CreateBasic (string type, string subtype, string partSpecifier, bool attachment)\n\t\t{\n\t\t\tvar basic = new BodyPartBasic (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t\tbasic.ContentDisposition = new ContentDisposition (attachment ? ContentDisposition.Attachment : ContentDisposition.Inline);\n\t\t\treturn basic;\n\t\t}\n\n\t\tstatic BodyPartText CreateText (string type, string subtype, string partSpecifier, bool attachment)\n\t\t{\n\t\t\tvar text = new BodyPartText (CreateContentType (type, subtype, partSpecifier), partSpecifier);\n\t\t\tif (attachment)\n\t\t\t\ttext.ContentDisposition = new ContentDisposition (ContentDisposition.Attachment);\n\t\t\treturn text;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestTextPlainBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateText (\"TEXT\", \"PLAIN\", \"1\", false)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Null, \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (0), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (1), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestTextHtmlBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateText (\"TEXT\", \"HTML\", \"1\", false)\n\t\t\t};\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1\"), \"HtmlBody\");\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Null, \"TextBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (0), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (1), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestImageJpegBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateBasic (\"IMAGE\", \"JPEG\", \"1\", false)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Null, \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Null, \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (0), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (1), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultipartAlternative ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"\",\n\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1\", false),\n\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"2\", false)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"2\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (0), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (2), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultipartAlternativeNoTextParts ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"\",\n\t\t\t\t\tCreateText (\"TEXT\", \"RICHTEXT\", \"1\", false),\n\t\t\t\t\tCreateBasic (\"APPLICATION\", \"PDF\", \"2\", false)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Null, \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Null, \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (0), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (2), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedTextPlainBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1\", false),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Null, \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (2), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedTextHtmlBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1\", false),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Null, \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (2), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRelatedTextPlainBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"RELATED\", \"\",\n\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1\", false),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Null, \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (2), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRelatedTextHtmlBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"RELATED\", \"\",\n\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1\", false),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Null, \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters [\"part-specifier\"], Is.EqualTo (\"1\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (2), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedAlternativeRelated ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1\",\n\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1.1\", false),\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"RELATED\", \"1.2\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1.2.1\", false),\n\t\t\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"1.2.2\", false)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.2.1\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (4), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedAlternativeRelatedWithStartParameter ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1\",\n\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1.1\", false),\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"RELATED\", \"1.2\",\n\t\t\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"1.2.1\", false),\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1.2.2\", false)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\t\t\tvar cid = \"html@localhost.com\";\n\t\t\tvar mixed = (BodyPartMultipart) summary.Body;\n\t\t\tvar alternative = (BodyPartMultipart) mixed.BodyParts[0];\n\t\t\tvar related = (BodyPartMultipart) alternative.BodyParts[1];\n\t\t\tvar html = (BodyPartText) related.BodyParts[1];\n\n\t\t\trelated.ContentType.Parameters[\"start\"] = cid;\n\t\t\thtml.ContentLocation = new Uri (\"cid:\" + cid);\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1\"), \"TextBody\");\n\n\t\t\thtml = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.2.2\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (4), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedRelatedAlternativeWithStartParameter ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"RELATED\", \"1\",\n\t\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"1.1\", false),\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1.2\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1.2.1\", false),\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1.2.2\", false)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\t\t\tvar cid = \"alternative@localhost.com\";\n\t\t\tvar mixed = (BodyPartMultipart) summary.Body;\n\t\t\tvar related = (BodyPartMultipart) mixed.BodyParts[0];\n\t\t\tvar alternative = (BodyPartMultipart) related.BodyParts[1];\n\n\t\t\trelated.ContentType.Parameters[\"start\"] = cid;\n\t\t\talternative.ContentLocation = new Uri (\"cid:\" + cid);\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.2.1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.2.2\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (4), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedRelatedAlternative ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"RELATED\", \"1\",\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1.1\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1.1.1\", false),\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1.1.2\", false)\n\t\t\t\t\t\t),\n\t\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"1.2\", false)\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1.1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1.2\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (4), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMixedNestedAlternative ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1\",\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1.1\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1.1.1\", false),\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1.1.2\", false)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"2\", true)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1.1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1.2\"), \"HtmlBody\");\n\n\t\t\tAssert.That (summary.Attachments.Count (), Is.EqualTo (1), \"Attachments\");\n\t\t\tAssert.That (summary.BodyParts.Count (), Is.EqualTo (3), \"BodyParts\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComplexBody ()\n\t\t{\n\t\t\tvar summary = new MessageSummary (0) {\n\t\t\t\tBody = CreateMultipart (\"MULTIPART\", \"MIXED\", \"\",\n\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"ALTERNATIVE\", \"1\",\n\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"1.1\", false),\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"RELATED\", \"1.2\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"HTML\", \"1.2.1\", false),\n\t\t\t\t\t\t\tCreateBasic (\"IMAGE\", \"JPEG\", \"1.2.2\", false)\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"APPLICATION\", \"OCTET-STREAM\", \"2\", true),\n\t\t\t\t\tCreateMessage (\"MESSAGE\", \"RFC822\", \"3\",\n\t\t\t\t\t\tCreateMultipart (\"MULTIPART\", \"MIXED\", \"3\",\n\t\t\t\t\t\t\tCreateText (\"TEXT\", \"PLAIN\", \"3.1\", false),\n\t\t\t\t\t\t\tCreateBasic (\"APPLICATION\", \"OCTET-STREAM\", \"3.2\", true)\n\t\t\t\t\t\t), true\n\t\t\t\t\t),\n\t\t\t\t\tCreateBasic (\"IMAGE\", \"GIF\", \"4\", true)\n\t\t\t\t)\n\t\t\t};\n\t\t\tint i;\n\n\t\t\tvar plain = summary.TextBody;\n\t\t\tAssert.That (plain, Is.Not.Null, \"TextBody\");\n\t\t\tAssert.That (plain.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.1\"), \"TextBody\");\n\n\t\t\tvar html = summary.HtmlBody;\n\t\t\tAssert.That (html, Is.Not.Null, \"HtmlBody\");\n\t\t\tAssert.That (html.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (\"1.2.1\"), \"HtmlBody\");\n\n\t\t\tvar bodyParts = new string [] { \"1.1\", \"1.2.1\", \"1.2.2\", \"2\", \"3\", \"4\" };\n\t\t\ti = 0;\n\n\t\t\tforeach (var part in summary.BodyParts)\n\t\t\t\tAssert.That (part.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (bodyParts[i++]), \"BodyParts\");\n\n\t\t\tvar attachments = new string[] { \"2\", \"3\", \"4\" };\n\t\t\ti = 0;\n\n\t\t\tforeach (var attachment in summary.Attachments)\n\t\t\t\tAssert.That (attachment.ContentType.Parameters[\"part-specifier\"], Is.EqualTo (attachments[i++]), \"Attachments\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/MessageThreadingTests.cs",
    "content": "﻿//\n// MessageThreadingTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MimeKit;\nusing MimeKit.Utils;\n\nusing MailKit;\nusing MailKit.Search;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class MessageThreadingTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar orderBy = new OrderBy[] { OrderBy.Arrival };\n\t\t\tvar messagesMissingInfo = new [] { new MessageSummary (0) };\n\t\t\tvar emptyOrderBy = Array.Empty<OrderBy> ();\n\n\t\t\tvar summary = new MessageSummary (0);\n\t\t\tsummary.UniqueId = UniqueId.MinValue;\n\t\t\tsummary.Envelope = new Envelope ();\n\t\t\tsummary.References = new MessageIdList ();\n\t\t\tsummary.Envelope.MessageId = \"xyz@mimekit.org\";\n\t\t\tsummary.Envelope.Subject = \"This is the subject\";\n\t\t\tsummary.Envelope.Date = DateTimeOffset.Now;\n\t\t\tsummary.Size = 0;\n\n\t\t\tvar messages = new MessageSummary[] { summary };\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageThreader.GetThreadableSubject (null, out _));\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageThreader.Thread ((IEnumerable<MessageSummary>) null, ThreadingAlgorithm.References));\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageThreader.Thread ((IEnumerable<MessageSummary>) null, ThreadingAlgorithm.References, orderBy));\n\t\t\tAssert.Throws<ArgumentException> (() => MessageThreader.Thread (messagesMissingInfo, ThreadingAlgorithm.References));\n\t\t\tAssert.Throws<ArgumentNullException> (() => MessageThreader.Thread (messages, ThreadingAlgorithm.References, null));\n\t\t\tAssert.Throws<ArgumentException> (() => MessageThreader.Thread (messages, ThreadingAlgorithm.References, emptyOrderBy));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestThreadableSubject ()\n\t\t{\n\t\t\tstring result;\n\t\t\tint depth;\n\n\t\t\tresult = MessageThreader.GetThreadableSubject (\"Re: simple subject\", out depth);\n\t\t\tAssert.That (result, Is.EqualTo (\"simple subject\"), \"#1a\");\n\t\t\tAssert.That (depth, Is.EqualTo (1), \"#1b\");\n\n\t\t\tresult = MessageThreader.GetThreadableSubject (\"Re: simple subject  \", out depth);\n\t\t\tAssert.That (result, Is.EqualTo (\"simple subject\"), \"#2a\");\n\t\t\tAssert.That (depth, Is.EqualTo (1), \"#2b\");\n\n\t\t\tresult = MessageThreader.GetThreadableSubject (\"Re: Re: simple subject  \", out depth);\n\t\t\tAssert.That (result, Is.EqualTo (\"simple subject\"), \"#3a\");\n\t\t\tAssert.That (depth, Is.EqualTo (2), \"#3b\");\n\n\t\t\tresult = MessageThreader.GetThreadableSubject (\"Re: Re[4]: simple subject  \", out depth);\n\t\t\tAssert.That (result, Is.EqualTo (\"simple subject\"), \"#4a\");\n\t\t\tAssert.That (depth, Is.EqualTo (5), \"#4b\");\n\n\t\t\tresult = MessageThreader.GetThreadableSubject (\"Re: [Mailing-List] Re[4]: simple subject  \", out depth);\n\t\t\tAssert.That (result, Is.EqualTo (\"simple subject\"), \"#5a\");\n\t\t\tAssert.That (depth, Is.EqualTo (5), \"#5b\");\n\t\t}\n\n\t\tstatic readonly char[] Space = new[] { ' ' };\n\n\t\tstatic MessageSummary MakeThreadable (ref int index, string subject, string msgid, string date, string refs)\n\t\t{\n\t\t\tDateUtils.TryParse (date, out var value);\n\n\t\t\tvar summary = new MessageSummary (++index);\n\t\t\tsummary.UniqueId = new UniqueId ((uint) summary.Index);\n\t\t\tsummary.Envelope = new Envelope ();\n\t\t\tsummary.References = new MessageIdList ();\n\t\t\tif (refs != null) {\n\t\t\t\tforeach (var id in refs.Split (Space, StringSplitOptions.RemoveEmptyEntries))\n\t\t\t\t\tsummary.References.Add (id);\n\t\t\t}\n\t\t\tsummary.Envelope.MessageId = MimeUtils.EnumerateReferences (msgid).FirstOrDefault ();\n\t\t\tsummary.Envelope.Subject = subject;\n\t\t\tsummary.Envelope.Date = value;\n\t\t\tsummary.Size = 0;\n\n\t\t\treturn summary;\n\t\t}\n\n\t\tstatic void WriteMessageThread (StringBuilder builder, IList<MessageSummary> messages, MessageThread thread, int depth)\n\t\t{\n\t\t\tbuilder.Append (new string (' ', depth * 3));\n\n\t\t\tif (thread.UniqueId.HasValue) {\n\t\t\t\tvar summary = messages[(int) thread.UniqueId.Value.Id - 1];\n\t\t\t\tbuilder.Append (summary.Envelope.Subject);\n\t\t\t} else {\n\t\t\t\tbuilder.Append (\"dummy\");\n\t\t\t}\n\n\t\t\tbuilder.Append ('\\n');\n\n\t\t\tforeach (var child in thread.Children)\n\t\t\t\tWriteMessageThread (builder, messages, child, depth + 1);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestThreadBySubject ()\n\t\t{\n\t\t\tconst string defaultDate = \"01 Jan 1997 12:00:00 -0400\";\n\t\t\tvar messages = new List<MessageSummary> ();\n\t\t\tint index = 0;\n\n\t\t\t// this test case was borrowed from Jamie Zawinski's TestThreader.java\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Subject\", \"<1>\", defaultDate, null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Re[2]: Subject\", \"<2>\", defaultDate, \"<1>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Re: Subject\", \"<3>\", defaultDate, \"<1> <2>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Re: Re: Subject\", \"<4>\", defaultDate, \"<1>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Re:RE:rE[3]: Subject\", \"<5>\", defaultDate, \"<3> <x1> <x2> <x3>\"));\n\n\t\t\tstring expected = @\"Subject\n   Re[2]: Subject\n   Re: Subject\n   Re: Re: Subject\n   Re:RE:rE[3]: Subject\n\".Replace (\"\\r\\n\", \"\\n\");\n\n\t\t\tvar threads = messages.Thread (ThreadingAlgorithm.OrderedSubject);\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tforeach (var thread in threads)\n\t\t\t\tWriteMessageThread (builder, messages, thread, 0);\n\n\t\t\t//Console.WriteLine (builder);\n\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (expected), \"Threading did not produce the expected results\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestThreadByReferences ()\n\t\t{\n\t\t\tconst string defaultDate = \"01 Jan 1997 12:00:00 -0400\";\n\t\t\tvar messages = new List<MessageSummary> ();\n\t\t\tint index = 0;\n\n\t\t\t// this test case was borrowed from Jamie Zawinski's TestThreader.java\n\t\t\tmessages.Add (MakeThreadable (ref index, \"A\", \"<1>\", defaultDate, null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"B\", \"<2>\", defaultDate, \"<1>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"C\", \"<3>\", defaultDate, \"<1> <2>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"D\", \"<4>\", defaultDate, \"<1>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"E\", \"<5>\", defaultDate, \"<3> <x1> <x2> <x3>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"F\", \"<6>\", defaultDate, \"<2>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"G\", \"<7>\", defaultDate, \"<nonesuch>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"H\", \"<8>\", defaultDate, \"<nonesuch>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop1\", \"<loop1>\", defaultDate, \"<loop2> <loop3>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop2\", \"<loop2>\", defaultDate, \"<loop3> <loop1>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop3\", \"<loop3>\", defaultDate, \"<loop1> <loop2>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop4\", \"<loop4>\", defaultDate, \"<loop5>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop5\", \"<loop5>\", defaultDate, \"<loop4>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop6\", \"<loop6>\", defaultDate, \"<loop6>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop7\",  \"<loop7>\",  defaultDate, \"<loop8>  <loop9>  <loop10> <loop8>  <loop9> <loop10>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop8\",  \"<loop8>\",  defaultDate, \"<loop9>  <loop10> <loop7>  <loop9>  <loop10> <loop7>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop8\",  \"<loop9>\",  defaultDate, \"<loop10> <loop7>  <loop8>  <loop10> <loop7>  <loop8>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Loop10\", \"<loop10>\", defaultDate, \"<loop7>  <loop8>  <loop9>  <loop7>  <loop8>  <loop9>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Ambig1\",  \"<ambig1>\",  defaultDate, null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Ambig2\",  \"<ambig2>\",  defaultDate, \"<ambig1>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Ambig3\",  \"<ambig3>\",  defaultDate, \"<ambig1> <ambig2>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Ambig4\",  \"<ambig4>\",  defaultDate, \"<ambig1> <ambig2> <ambig3>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Ambig5a\", \"<ambig5a>\", defaultDate, \"<ambig1> <ambig2> <ambig3> <ambig4>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Ambig5b\", \"<ambig5b>\", defaultDate, \"<ambig1> <ambig3> <ambig2> <ambig4>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"dup\",       \"<dup>\",       defaultDate, null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"dup-kid\",   \"<dup-kid>\",   defaultDate, \"<dup>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"dup-kid\",   \"<dup-kid>\",   defaultDate, \"<dup>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"dup-kid-2\", \"<dup-kid-2>\", defaultDate, \"<dup>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"dup-kid-2\", \"<dup-kid-2>\", defaultDate, \"<dup>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"dup-kid-2\", \"<dup-kid-2>\", defaultDate, \"<dup>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"same subject 1\", \"<ss1.1>\", defaultDate, null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"same subject 1\", \"<ss1.2>\", defaultDate, null));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"missingmessage\", \"<missa>\", defaultDate, null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"missingmessage\", \"<missc>\", defaultDate, \"<missa> <missb>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"liar 1\", \"<liar.1>\", defaultDate, \"<liar.a> <liar.c>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"liar 2\", \"<liar.2>\", defaultDate, \"<liar.a> <liar.b> <liar.c>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"liar2 1\", \"<liar2.1>\", defaultDate, \"<liar2.a> <liar2.b> <liar2.c>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"liar2 2\", \"<liar2.2>\", defaultDate, \"<liar2.a> <liar2.c>\"));\n\n\t\t\tmessages.Add (MakeThreadable (ref index, \"xx\", \"<331F7D61.2781@netscape.com>\", \"Thu, 06 Mar 1997 18:28:50 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"lkjhlkjh\", \"<3321E51F.41C6@netscape.com>\", \"Sat, 08 Mar 1997 14:15:59 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"test 2\", \"<3321E5A6.41C6@netscape.com>\", \"Sat, 08 Mar 1997 14:18:14 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"enc\", \"<3321E5C0.167E@netscape.com>\", \"Sat, 08 Mar 1997 14:18:40 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"lkjhlkjh\", \"<3321E715.15FB@netscape.com>\", \"Sat, 08 Mar 1997 14:24:21 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"eng\", \"<3321E7A4.59E2@netscape.com>\", \"Sat, 08 Mar 1997 14:26:44 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"lkjhl\", \"<3321E7BB.1CFB@netscape.com>\", \"Sat, 08 Mar 1997 14:27:07 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Re: certs and signed messages\", \"<332230AA.41C6@netscape.com>\", \"Sat, 08 Mar 1997 19:38:18 -0800\", \"<33222A5E.ED4@netscape.com>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"from dogbert\", \"<3323546E.BEE44C78@netscape.com>\", \"Sun, 09 Mar 1997 16:23:10 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"lkjhlkjhl\", \"<33321E2A.1C849A20@netscape.com>\", \"Thu, 20 Mar 1997 21:35:38 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"le:/u/jwz/mime/smi\", \"<33323C9D.ADA4BCBA@netscape.com>\", \"Thu, 20 Mar 1997 23:45:33 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"ile:/u/jwz\", \"<33323F62.402C573B@netscape.com>\", \"Thu, 20 Mar 1997 23:57:22 -0800\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"ljkljhlkjhl\", \"<336FBAD0.864BC1F4@netscape.com>\", \"Tue, 06 May 1997 16:12:16 -0700\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"lkjh\", \"<336FBB46.A0028A6D@netscape.com>\", \"Tue, 06 May 1997 16:14:14 -0700\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"foo\", \"<337265C1.5C758C77@netscape.com>\", \"Thu, 08 May 1997 16:46:09 -0700\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Welcome to Netscape\", \"<337AAB3D.C8BCE069@netscape.com>\", \"Wed, 14 May 1997 23:20:45 -0700\", null));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"Re: Welcome to Netscape\", \"<337AAE46.903032E4@netscape.com>\", \"Wed, 14 May 1997 23:33:45 -0700\", \"<337AAB3D.C8BCE069@netscape.com>\"));\n\t\t\tmessages.Add (MakeThreadable (ref index, \"[Fwd: enc/signed test 1]\", \"<338B6EE2.BB26C74C@netscape.com>\", \"Tue, 27 May 1997 16:31:46 -0700\", null));\n\n\t\t\tstring expected = @\"A\n   B\n      C\n         E\n      F\n   D\ndummy\n   G\n   H\nLoop5\n   Loop4\nLoop6\nAmbig1\n   Ambig2\n      Ambig3\n         Ambig4\n            Ambig5a\n            Ambig5b\ndup\n   dup-kid\n   dup-kid\n   dup-kid-2\n   dup-kid-2\n   dup-kid-2\ndummy\n   same subject 1\n   same subject 1\nmissingmessage\n   missingmessage\ndummy\n   liar 1\n   liar 2\ndummy\n   liar2 1\n   liar2 2\nxx\ndummy\n   lkjhlkjh\n   lkjhlkjh\ntest 2\nenc\neng\nlkjhl\nRe: certs and signed messages\nfrom dogbert\nlkjhlkjhl\nle:/u/jwz/mime/smi\nile:/u/jwz\nljkljhlkjhl\nlkjh\nfoo\nWelcome to Netscape\n   Re: Welcome to Netscape\n[Fwd: enc/signed test 1]\n\".Replace (\"\\r\\n\", \"\\n\");\n\n\t\t\tvar threads = messages.Thread (ThreadingAlgorithm.References);\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tforeach (var thread in threads)\n\t\t\t\tWriteMessageThread (builder, messages, thread, 0);\n\n\t\t\t//Console.WriteLine (builder);\n\n\t\t\tAssert.That (builder.ToString (), Is.EqualTo (expected), \"Threading did not produce the expected results\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestThreadableNodeUnusedProperties ()\n\t\t{\n\t\t\tvar node = new MessageThreader.ThreadableNode (new MessageSummary (0));\n\n\t\t\tAssert.That (node.Folder, Is.Null, \"Folder\");\n\t\t\tAssert.That (node.Body, Is.Null, \"Body\");\n\t\t\tAssert.That (node.TextBody, Is.Null, \"TextBody\");\n\t\t\tAssert.That (node.HtmlBody, Is.Null, \"HtmlBody\");\n\t\t\tAssert.That (node.BodyParts, Is.Empty, \"BodyParts\");\n\t\t\tAssert.That (node.Attachments, Is.Empty, \"Attachments\");\n\t\t\tAssert.That (node.PreviewText, Is.Null, \"PreviewText\");\n\t\t\tAssert.That (node.Envelope, Is.Null, \"Envelope\");\n\t\t\tAssert.That (node.Flags.HasValue, Is.False, \"Flags\");\n\t\t\tAssert.That (node.Keywords, Is.Empty, \"Keywords\");\n\t\t\tAssert.That (node.Headers, Is.Null, \"Headers\");\n\t\t\tAssert.That (node.InternalDate.HasValue, Is.False, \"InternalDate\");\n\t\t\tAssert.That (node.EmailId, Is.Null, \"EmailId\");\n\t\t\tAssert.That (node.ThreadId, Is.Null, \"ThreadId\");\n\t\t\tAssert.That (node.GMailMessageId.HasValue, Is.False, \"GMailMessageId\");\n\t\t\tAssert.That (node.GMailThreadId.HasValue, Is.False, \"GMailThreadId\");\n\t\t\tAssert.That (node.GMailLabels, Is.Null, \"GMailLabels\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/MetadataTests.cs",
    "content": "﻿//\n// MetadataTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class MetadataTests\n\t{\n\t\t[Test]\n\t\tpublic void TestMetadataTag ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MetadataTag (null));\n\t\t\tAssert.Throws<ArgumentException> (() => new MetadataTag (string.Empty));\n\n\t\t\tvar tag1 = new MetadataTag (\"/dev/null\");\n\t\t\tvar tag2 = new MetadataTag (\"/dev/null\");\n\t\t\tvar tag3 = new MetadataTag (\"/opt/nope\");\n\n\t\t\tAssert.That (tag1.Equals (tag2), Is.True, \"Equals #1\");\n\t\t\tAssert.That (tag1.Equals (tag3), Is.False, \"Equals #2\");\n\t\t\tAssert.That (tag2.GetHashCode (), Is.EqualTo (tag1.GetHashCode ()), \"GetHashCode #1\");\n\t\t\tAssert.That (tag3.GetHashCode (), Is.Not.EqualTo (tag1.GetHashCode ()), \"GetHashCode #2\");\n\n\t\t\tAssert.That (MetadataTag.Create (MetadataTag.PrivateComment.ToString ()), Is.EqualTo (MetadataTag.PrivateComment));\n\t\t\tAssert.That (MetadataTag.Create (MetadataTag.PrivateSpecialUse.ToString ()), Is.EqualTo (MetadataTag.PrivateSpecialUse));\n\t\t\tAssert.That (MetadataTag.Create (MetadataTag.SharedAdmin.ToString ()), Is.EqualTo (MetadataTag.SharedAdmin));\n\t\t\tAssert.That (MetadataTag.Create (MetadataTag.SharedComment.ToString ()), Is.EqualTo (MetadataTag.SharedComment));\n\t\t\tAssert.That (MetadataTag.Create (tag1.Id), Is.EqualTo (tag1));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMetadataOptions ()\n\t\t{\n\t\t\tvar options = new MetadataOptions ();\n\n\t\t\tAssert.That (options.Depth, Is.EqualTo (0));\n\t\t\tAssert.That (options.LongEntries, Is.EqualTo (0));\n\t\t\tAssert.That (options.MaxSize, Is.Null);\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => options.Depth = 500);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMetadataCollection ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new MetadataCollection (null));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/DummyNetworkStream.cs",
    "content": "﻿//\n// DummyNetworkStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n\nnamespace UnitTests.Net {\n\tpublic class DummyNetworkStream : MemoryStream\n\t{\n\t\treadonly bool throwOnWrite;\n\n\t\tpublic DummyNetworkStream (bool throwOnWrite = false)\n\t\t{\n\t\t\tthis.throwOnWrite = throwOnWrite;\n\t\t}\n\n\t\tpublic override bool CanSeek => false;\n\t\tpublic override bool CanTimeout => true;\n\n\t\tpublic override int ReadTimeout { get; set; }\n\t\tpublic override int WriteTimeout { get; set; }\n\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tif (throwOnWrite)\n\t\t\t\tthrow new IOException ();\n\n\t\t\tbase.Write (buffer, offset, count);\n\t\t}\n\n\t\tpublic override Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (throwOnWrite)\n\t\t\t\tthrow new IOException ();\n\n\t\t\treturn base.WriteAsync (buffer, offset, count, cancellationToken);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapAuthenticationSecretDetectorTests.cs",
    "content": "﻿//\n// ImapAuthenticationSecretDetectorTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapAuthenticationSecretDetectorTests\n\t{\n\t\t[Test]\n\t\tpublic void TestEmptyCommand ()\n\t\t{\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Array.Empty<byte> ();\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNonAuthCommand ()\n\t\t{\n\t\t\tstring command = string.Format (\"A00000000 APPEND INBOX (\\\\Seen) \\\"{0}\\\" {{4096}}\\r\\n\", ImapUtils.FormatInternalDate (DateTimeOffset.Now));\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotIsAuthenticating ()\n\t\t{\n\t\t\tconst string command = \"A00000000 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommand ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN username password\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (2), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (userIndex), \"UserName StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"UserName Length\");\n\t\t\tAssert.That (secrets[1].StartIndex, Is.EqualTo (passwdIndex), \"Password StartIndex\");\n\t\t\tAssert.That (secrets[1].Length, Is.EqualTo (8), \"Password Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN username password\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif ((index >= userIndex && index < userIndex + 8) || (index >= passwdIndex && index < passwdIndex + 8)) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandQStrings ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN \\\"username\\\" \\\"password\\\"\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (2), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (userIndex), \"UserName StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"UserName Length\");\n\t\t\tAssert.That (secrets[1].StartIndex, Is.EqualTo (passwdIndex), \"Password StartIndex\");\n\t\t\tAssert.That (secrets[1].Length, Is.EqualTo (8), \"Password Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandQStringsBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN \\\"username\\\" \\\"password\\\"\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif ((index >= userIndex && index < userIndex + 8) || (index >= passwdIndex && index < passwdIndex + 8)) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandEscapedQStrings ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN \\\"domain\\\\\\\\username\\\" \\\"pass\\\\\\\"word\\\"\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"domain\\\\\\\\username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"pass\\\\\\\"word\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (2), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (userIndex), \"UserName StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (16), \"UserName Length\");\n\t\t\tAssert.That (secrets[1].StartIndex, Is.EqualTo (passwdIndex), \"Password StartIndex\");\n\t\t\tAssert.That (secrets[1].Length, Is.EqualTo (10), \"Password Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandEscapedQStringsBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN \\\"domain\\\\\\\\username\\\" \\\"pass\\\\\\\"word\\\"\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"domain\\\\\\\\username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"pass\\\\\\\"word\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif ((index >= userIndex && index < userIndex + 16) || (index >= passwdIndex && index < passwdIndex + 10)) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandLiterals ()\n\t\t{\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tbyte[] buffer;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"A00000000 LOGIN {8}\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"LOGIN # of secrets\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"username {8}\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"username # of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"UserName StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"UserName Length\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"password\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"password # of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"Password StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"Password Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandLiteralsBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN {8}\\r\\nusername {8}\\r\\npassword\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif ((index >= userIndex && index < userIndex + 8) || (index >= passwdIndex && index < passwdIndex + 8)) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandLiteralPlus ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN {8+}\\r\\nusername {8+}\\r\\npassword\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (2), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (userIndex), \"UserName StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"UserName Length\");\n\t\t\tAssert.That (secrets[1].StartIndex, Is.EqualTo (passwdIndex), \"Password StartIndex\");\n\t\t\tAssert.That (secrets[1].Length, Is.EqualTo (8), \"Password Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginCommandLiteralPlusBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 LOGIN {8+}\\r\\nusername {8+}\\r\\npassword\\r\\n\";\n\t\t\tvar userIndex = command.IndexOf (\"username\", StringComparison.Ordinal);\n\t\t\tvar passwdIndex = command.IndexOf (\"password\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif ((index >= userIndex && index < userIndex + 8) || (index >= passwdIndex && index < passwdIndex + 8)) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthCommand ()\n\t\t{\n\t\t\tconst string command = \"A00000000 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar secretIndex = command.IndexOf (\"AHVzZXJuYW1lAHBhc3N3b3Jk\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (secretIndex), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (24), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar secretIndex = command.IndexOf (\"AHVzZXJuYW1lAHBhc3N3b3Jk\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= secretIndex && command[index] != '\\r' && command[index] != '\\n') {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultiLineSaslAuthCommand ()\n\t\t{\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tbyte[] buffer;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"A00000000 AUTHENTICATE LOGIN\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"initial # of secrets\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"dXNlcm5hbWU=\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (12), \"Length\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"cGFzc3dvcmQ=\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (12), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultiLineSaslAuthCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"A00000000 AUTHENTICATE LOGIN\\r\\ndXNlcm5hbWU=\\r\\ncGFzc3dvcmQ=\\r\\n\";\n\t\t\tvar secretIndex = command.IndexOf (\"dXNlcm5hbWU=\", StringComparison.Ordinal);\n\t\t\tvar detector = new ImapAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= secretIndex && command[index] != '\\r' && command[index] != '\\n') {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapClientTests.cs",
    "content": "﻿//\n// ImapClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MimeKit;\n\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\nusing MailKit.Net.Proxy;\n\nusing UnitTests.Security;\nusing UnitTests.Net.Proxy;\n\nusing AuthenticationException = MailKit.Security.AuthenticationException;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapClientTests\n\t{\n\t\tstatic readonly ImapCapabilities GreetingCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\tImapCapabilities.Namespace | ImapCapabilities.Unselect;\n\t\tstatic readonly ImapCapabilities DovecotInitialCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\tImapCapabilities.LiteralPlus | ImapCapabilities.SaslIR | ImapCapabilities.LoginReferrals | ImapCapabilities.Id |\n\t\t\tImapCapabilities.Enable | ImapCapabilities.Idle;\n\t\tstatic readonly ImapCapabilities DovecotAuthenticatedCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\tImapCapabilities.LiteralPlus | ImapCapabilities.SaslIR | ImapCapabilities.LoginReferrals | ImapCapabilities.Id |\n\t\t\tImapCapabilities.Enable | ImapCapabilities.Idle | ImapCapabilities.Sort | ImapCapabilities.SortDisplay |\n\t\t\tImapCapabilities.Thread | ImapCapabilities.MultiAppend | ImapCapabilities.Catenate | ImapCapabilities.Unselect |\n\t\t\tImapCapabilities.Children | ImapCapabilities.Namespace | ImapCapabilities.UidPlus | ImapCapabilities.ListExtended |\n\t\t\tImapCapabilities.I18NLevel | ImapCapabilities.CondStore | ImapCapabilities.QuickResync | ImapCapabilities.ESearch |\n\t\t\tImapCapabilities.ESort | ImapCapabilities.SearchResults | ImapCapabilities.Within | ImapCapabilities.Context |\n\t\t\tImapCapabilities.ListStatus | ImapCapabilities.Binary | ImapCapabilities.Move | ImapCapabilities.SpecialUse;\n\t\tstatic readonly ImapCapabilities GMailInitialCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\tImapCapabilities.Quota | ImapCapabilities.Idle | ImapCapabilities.Namespace | ImapCapabilities.Id |\n\t\t\tImapCapabilities.Children | ImapCapabilities.Unselect | ImapCapabilities.SaslIR | ImapCapabilities.XList |\n\t\t\tImapCapabilities.GMailExt1;\n\t\tstatic readonly ImapCapabilities GMailAuthenticatedCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\tImapCapabilities.Quota | ImapCapabilities.Idle | ImapCapabilities.Namespace | ImapCapabilities.Id |\n\t\t\tImapCapabilities.Children | ImapCapabilities.Unselect | ImapCapabilities.UidPlus | ImapCapabilities.CondStore |\n\t\t\tImapCapabilities.ESearch | ImapCapabilities.Compress | ImapCapabilities.Enable | ImapCapabilities.ListExtended |\n\t\t\tImapCapabilities.ListStatus | ImapCapabilities.Move | ImapCapabilities.UTF8Accept | ImapCapabilities.XList |\n\t\t\tImapCapabilities.GMailExt1 | ImapCapabilities.LiteralMinus | ImapCapabilities.AppendLimit;\n\t\tstatic readonly ImapCapabilities ICloudInitialCapabilities = ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 |\n\t\t\tImapCapabilities.Status | ImapCapabilities.SaslIR;\n\t\tstatic readonly ImapCapabilities ICloudAuthenticatedCapabilities = ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 |\n\t\t\tImapCapabilities.Status | ImapCapabilities.CondStore | ImapCapabilities.Enable | ImapCapabilities.QuickResync |\n\t\t\tImapCapabilities.Quota | ImapCapabilities.Namespace | ImapCapabilities.UidPlus | ImapCapabilities.Children |\n\t\t\tImapCapabilities.Binary | ImapCapabilities.Unselect | ImapCapabilities.Sort | ImapCapabilities.Catenate |\n\t\t\tImapCapabilities.Language | ImapCapabilities.ESearch | ImapCapabilities.ESort | ImapCapabilities.Thread |\n\t\t\tImapCapabilities.Context | ImapCapabilities.Within | ImapCapabilities.SaslIR | ImapCapabilities.SearchResults |\n\t\t\tImapCapabilities.Metadata | ImapCapabilities.Id | ImapCapabilities.Annotate | ImapCapabilities.MultiSearch |\n\t\t\tImapCapabilities.Idle | ImapCapabilities.ListStatus;\n\t\tstatic readonly ImapCapabilities IMAP4rev2CoreCapabilities = ImapCapabilities.IMAP4rev2 | ImapCapabilities.Status |\n\t\t\tImapCapabilities.Namespace | ImapCapabilities.Unselect | ImapCapabilities.UidPlus | ImapCapabilities.ESearch |\n\t\t\tImapCapabilities.SearchResults | ImapCapabilities.Enable | ImapCapabilities.Idle | ImapCapabilities.SaslIR | ImapCapabilities.ListExtended |\n\t\t\tImapCapabilities.ListStatus | ImapCapabilities.Move | ImapCapabilities.LiteralMinus | ImapCapabilities.SpecialUse;\n\t\tstatic readonly ImapCapabilities AclInitialCapabilities = GMailInitialCapabilities | ImapCapabilities.Acl;\n\t\tstatic readonly ImapCapabilities AclAuthenticatedCapabilities = GMailAuthenticatedCapabilities | ImapCapabilities.Acl;\n\t\tstatic readonly ImapCapabilities MetadataInitialCapabilities = GMailInitialCapabilities | ImapCapabilities.Metadata;\n\t\tstatic readonly ImapCapabilities MetadataAuthenticatedCapabilities = GMailAuthenticatedCapabilities | ImapCapabilities.Metadata;\n\t\tconst CipherAlgorithmType GmxDeCipherAlgorithm = CipherAlgorithmType.Aes256;\n\t\tconst int GmxDeCipherStrength = 256;\n#if !MONO\n\t\tconst HashAlgorithmType GmxDeHashAlgorithm = HashAlgorithmType.Sha384;\n#else\n\t\tconst HashAlgorithmType GmxDeHashAlgorithm = HashAlgorithmType.None;\n#endif\n\t\tconst ExchangeAlgorithmType EcdhEphemeral = (ExchangeAlgorithmType) 44550;\n\n\t\tstatic FolderAttributes GetSpecialFolderAttribute (SpecialFolder special)\n\t\t{\n\t\t\tswitch (special) {\n\t\t\tcase SpecialFolder.All:       return FolderAttributes.All;\n\t\t\tcase SpecialFolder.Archive:   return FolderAttributes.Archive;\n\t\t\tcase SpecialFolder.Drafts:    return FolderAttributes.Drafts;\n\t\t\tcase SpecialFolder.Flagged:   return FolderAttributes.Flagged;\n\t\t\tcase SpecialFolder.Important: return FolderAttributes.Important;\n\t\t\tcase SpecialFolder.Junk:      return FolderAttributes.Junk;\n\t\t\tcase SpecialFolder.Sent:      return FolderAttributes.Sent;\n\t\t\tcase SpecialFolder.Trash:     return FolderAttributes.Trash;\n\t\t\tdefault: throw new ArgumentOutOfRangeException (nameof (special));\n\t\t\t}\n\t\t}\n\n\t\tstatic Stream GetResourceStream (string name)\n\t\t{\n\t\t\treturn typeof (ImapClientTests).Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + name);\n\t\t}\n\n\t\tstatic void GetStreamsCallback (ImapFolder folder, int index, UniqueId uid, Stream stream)\n\t\t{\n\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\tconst string expected = \"This is some dummy text just to make sure this is working correctly.\";\n\t\t\t\tvar text = reader.ReadToEnd ();\n\n\t\t\t\tAssert.That (text, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task GetStreamsAsyncCallback (ImapFolder folder, int index, UniqueId uid, Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\tconst string expected = \"This is some dummy text just to make sure this is working correctly.\";\n#if NET8_0_OR_GREATER\n\t\t\t\tvar text = await reader.ReadToEndAsync (cancellationToken);\n#else\n\t\t\t\tvar text = await reader.ReadToEndAsync ();\n#endif\n\n\t\t\t\tAssert.That (text, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\tAssert.That (client.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\t// Connect\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Uri) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Uri) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (new Uri (\"path\", UriKind.Relative)));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (new Uri (\"path\", UriKind.Relative)));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (null, 143, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (null, 143, false));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (string.Empty, 143, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 143, false));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (\"host\", -1, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (\"host\", -1, false));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (null, 143, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (null, 143, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (string.Empty, 143, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 143, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (\"host\", -1, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (\"host\", -1, SecureSocketOptions.None));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Socket) null, \"host\", 143, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Socket) null, \"host\", 143, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Stream) null, \"host\", 143, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Stream) null, \"host\", 143, SecureSocketOptions.None));\n\n\t\t\t\tusing (var socket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {\n\t\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (socket, \"host\", 143, SecureSocketOptions.None));\n\t\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (socket, \"host\", 143, SecureSocketOptions.None));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Authenticate\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate ((SaslMechanism) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync ((SaslMechanism) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate ((ICredentials) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync ((ICredentials) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (\"username\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (\"username\", null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, credentials));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, credentials));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, \"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, \"username\", \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null, \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null, \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, \"username\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, \"username\", null));\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Notify\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Notify (true, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.NotifyAsync (true, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Notify (true, Array.Empty<ImapEventGroup> ()));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.NotifyAsync (true, Array.Empty<ImapEventGroup> ()));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => new ImapMailboxFilter.Subtree (client.Inbox, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => new ImapMailboxFilter.Mailboxes (client.Inbox, null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetFolder ((string) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetFolder ((FolderNamespace) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.GetFolderAsync ((string) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetFolders (null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetFolders (null, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.GetFoldersAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.GetFoldersAsync (null, false));\n\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"Personal\");\n\t\t\t\tAssert.That (client.SharedNamespaces, Is.Empty, \"Shared\");\n\t\t\t\tAssert.That (client.OtherNamespaces, Is.Empty, \"Other\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateIMAP4rev2Commands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* OK [CAPABILITY STARTTLS AUTH=SCRAM-SHA-256 LOGINDISABLED IMAP4rev2] IMAP4rev2 Service Ready\\r\\n\")),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIMAP4rev2 ()\n\t\t{\n\t\t\tvar commands = CreateIMAP4rev2Commands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (IMAP4rev2CoreCapabilities | ImapCapabilities.StartTLS | ImapCapabilities.LoginDisabled), \"Capabilities\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"SCRAM-SHA-256\"), \"AUTH=SCRAM-SHA-256\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestIMAP4rev2Async ()\n\t\t{\n\t\t\tvar commands = CreateIMAP4rev2Commands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (IMAP4rev2CoreCapabilities | ImapCapabilities.StartTLS | ImapCapabilities.LoginDisabled), \"Capabilities\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"SCRAM-SHA-256\"), \"AUTH=SCRAM-SHA-256\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEscapeUserName ()\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tImapClient.EscapeUserName (builder, \"user:/?@&=+$%,;name\");\n\t\t\tvar escaped = builder.ToString ();\n\n\t\t\tAssert.That (escaped, Is.EqualTo (\"user%3A%2F%3F%40%26%3D%2B%24%25%2C%3Bname\"));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnescapeUserName ()\n\t\t{\n\t\t\tvar unescaped = ImapClient.UnescapeUserName (\"user%3A%2F%3F%40%26%3D%2B%24%25%2C%3Bname\");\n\n\t\t\tAssert.That (unescaped, Is.EqualTo (\"user:/?@&=+$%,;name\"));\n\n\t\t\tunescaped = ImapClient.UnescapeUserName (\"user%3a%2f%3f%40%26%3d%2b%24%25%2c%3bname\");\n\n\t\t\tAssert.That (unescaped, Is.EqualTo (\"user:/?@&=+$%,;name\"));\n\t\t}\n\n\t\tstatic void AssertDefaultValues (string host, int port, SecureSocketOptions options, Uri expected)\n\t\t{\n\t\t\tImapClient.ComputeDefaultValues (host, ref port, ref options, out Uri uri, out bool starttls);\n\n\t\t\tif (expected.PathAndQuery == \"/?starttls=when-available\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.StartTlsWhenAvailable), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.True, $\"{expected}\");\n\t\t\t} else if (expected.PathAndQuery == \"/?starttls=always\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.StartTls), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.True, $\"{expected}\");\n\t\t\t} else if (expected.Scheme == \"imaps\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.SslOnConnect), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.False, $\"{expected}\");\n\t\t\t} else {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.None), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.False, $\"{expected}\");\n\t\t\t}\n\n\t\t\tAssert.That (uri.ToString (), Is.EqualTo (expected.ToString ()));\n\t\t\tAssert.That (port, Is.EqualTo (expected.Port), $\"{expected}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComputeDefaultValues ()\n\t\t{\n\t\t\tconst string host = \"imap.skyfall.net\";\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.None, new Uri ($\"imap://{host}:143\"));\n\t\t\tAssertDefaultValues (host, 143, SecureSocketOptions.None, new Uri ($\"imap://{host}:143\"));\n\t\t\tAssertDefaultValues (host, 993, SecureSocketOptions.None, new Uri ($\"imap://{host}:993\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.SslOnConnect, new Uri ($\"imaps://{host}:993\"));\n\t\t\tAssertDefaultValues (host, 143, SecureSocketOptions.SslOnConnect, new Uri ($\"imaps://{host}:143\"));\n\t\t\tAssertDefaultValues (host, 993, SecureSocketOptions.SslOnConnect, new Uri ($\"imaps://{host}:993\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.StartTls, new Uri ($\"imap://{host}:143/?starttls=always\"));\n\t\t\tAssertDefaultValues (host, 143, SecureSocketOptions.StartTls, new Uri ($\"imap://{host}:143/?starttls=always\"));\n\t\t\tAssertDefaultValues (host, 993, SecureSocketOptions.StartTls, new Uri ($\"imap://{host}:993/?starttls=always\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"imap://{host}:143/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 143, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"imap://{host}:143/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 993, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"imap://{host}:993/?starttls=when-available\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.Auto, new Uri ($\"imap://{host}:143/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 143, SecureSocketOptions.Auto, new Uri ($\"imap://{host}:143/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 993, SecureSocketOptions.Auto, new Uri ($\"imaps://{host}:993\"));\n\t\t}\n\n\t\tstatic Socket Connect (string host, int port)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\t\t\tSocket socket = null;\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tsocket = new Socket (ipAddresses[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp);\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket.Connect (ipAddresses[i], port);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch {\n\t\t\t\t\tsocket.Dispose ();\n\t\t\t\t\tsocket = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn socket;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSslHandshakeExceptions ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tSocket socket;\n\n\t\t\t\t// 1. Test connecting to a non-SSL port fails with an SslHandshakeException.\n\t\t\t\tAssert.Throws<SslHandshakeException> (() => client.Connect (\"www.gmail.com\", 80, true));\n\n\t\t\t\tsocket = Connect (\"www.gmail.com\", 80);\n\t\t\t\tAssert.Throws<SslHandshakeException> (() => client.Connect (socket, \"www.gmail.com\", 80, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t// 2. Test connecting to a server with a bad SSL certificate fails with an SslHandshakeException.\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = Connect (\"untrusted-root.badssl.com\", 443);\n\t\t\t\t\tclient.Connect (socket, \"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSslHandshakeExceptionsAsync ()\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tSocket socket;\n\n\t\t\t\t// 1. Test connecting to a non-SSL port fails with an SslHandshakeException.\n\t\t\t\tAssert.ThrowsAsync<SslHandshakeException> (async () => await client.ConnectAsync (\"www.gmail.com\", 80, true));\n\n\t\t\t\tsocket = Connect (\"www.gmail.com\", 80);\n\t\t\t\tAssert.ThrowsAsync<SslHandshakeException> (async () => await client.ConnectAsync (socket, \"www.gmail.com\", 80, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t// 2. Test connecting to a server with a bad SSL certificate fails with an SslHandshakeException.\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = Connect (\"untrusted-root.badssl.com\", 443);\n\t\t\t\t\tawait client.ConnectAsync (socket, \"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestStartTlsNotSupported ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.basic-greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"common.capability.txt\"),\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' })\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.StartTls), \"STARTTLS\");\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' })\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.StartTls), \"STARTTLS Async\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestProtocolLoggerExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogConnect)) { TagPrefix = 'A' })\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (Stream.Null, \"imap.gmail.com\", 143, SecureSocketOptions.None), \"LogConnect\");\n\n\t\t\tusing (var client = new ImapClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogConnect)) { TagPrefix = 'A' })\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (Stream.Null, \"imap.gmail.com\", 143, SecureSocketOptions.None), \"LogConnect Async\");\n\n\t\t\tusing (var client = new ImapClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogServer)) { TagPrefix = 'A' })\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (new ImapReplayStream (commands, false), \"imap.gmail.com\", 143, SecureSocketOptions.None), \"LogServer\");\n\n\t\t\tusing (var client = new ImapClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogServer)) { TagPrefix = 'A' })\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (new ImapReplayStream (commands, true), \"imap.gmail.com\", 143, SecureSocketOptions.None), \"LogServer Async\");\n\n\t\t\tusing (var client = new ImapClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogClient)) { TagPrefix = 'A' })\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (new ImapReplayStream (commands, false), \"imap.gmail.com\", 143, SecureSocketOptions.None), \"LogClient\");\n\n\t\t\tusing (var client = new ImapClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogClient)) { TagPrefix = 'A' })\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (new ImapReplayStream (commands, true), \"imap.gmail.com\", 143, SecureSocketOptions.None), \"LogClient Async\");\n\t\t}\n\n\t\tstatic void AssertGMailIsConnected (IMailService client)\n\t\t{\n\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\tAssert.That (client.SslCipherAlgorithm == CipherAlgorithmType.Aes128 || client.SslCipherAlgorithm == CipherAlgorithmType.Aes256, Is.True, $\"Unexpected SslCipherAlgorithm: {client.SslCipherAlgorithm}\");\n\t\t\tAssert.That (client.SslCipherStrength == 128 || client.SslCipherStrength == 256, Is.True, $\"Unexpected SslCipherStrength: {client.SslCipherStrength}\");\n#if !MONO\n\t\t\tAssert.That (client.SslCipherSuite == TlsCipherSuite.TLS_AES_128_GCM_SHA256 || client.SslCipherSuite == TlsCipherSuite.TLS_AES_256_GCM_SHA384, Is.True, $\"Unexpected SslCipherSuite: {client.SslCipherSuite}\");\n\t\t\tAssert.That (client.SslHashAlgorithm == HashAlgorithmType.Sha256 || client.SslHashAlgorithm == HashAlgorithmType.Sha384, Is.True, $\"Unexpected SslHashAlgorithm: {client.SslHashAlgorithm}\");\n#else\n\t\t\tAssert.That (client.SslHashAlgorithm == HashAlgorithmType.None, Is.True, $\"Unexpected SslHashAlgorithm: {client.SslHashAlgorithm}\");\n#endif\n\n\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t}\n\n\t\tstatic void AssertClientIsDisconnected (IMailService client)\n\t\t{\n\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\t\t\tAssert.That (client.IsSecure, Is.False, \"Expected IsSecure to be false after disconnecting\");\n\t\t\tAssert.That (client.IsEncrypted, Is.False, \"Expected IsEncrypted to be false after disconnecting\");\n\t\t\tAssert.That (client.IsSigned, Is.False, \"Expected IsSigned to be false after disconnecting\");\n\t\t\tAssert.That (client.SslProtocol, Is.EqualTo (SslProtocols.None), \"Expected SslProtocol to be None after disconnecting\");\n\t\t\tAssert.That (client.SslCipherAlgorithm, Is.Null, \"Expected SslCipherAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslCipherStrength, Is.Null, \"Expected SslCipherStrength to be null after disconnecting\");\n\t\t\tAssert.That (client.SslCipherSuite, Is.Null, \"Expected SslCipherSuite to be null after disconnecting\");\n\t\t\tAssert.That (client.SslHashAlgorithm, Is.Null, \"Expected SslHashAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslHashStrength, Is.Null, \"Expected SslHashStrength to be null after disconnecting\");\n\t\t\tAssert.That (client.SslKeyExchangeAlgorithm, Is.Null, \"Expected SslKeyExchangeAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.Null, \"Expected SslKeyExchangeStrength to be null after disconnecting\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMail ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"imap.gmail.com\";\n\t\t\tint port = 993;\n\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Connect (host, 0, options);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (host, 0, options));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"imap.gmail.com\";\n\t\t\tint port = 993;\n\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tawait client.ConnectAsync (host, 0, options);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (host, 0, options));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMailViaProxy ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"imap.gmail.com\";\n\t\t\tint port = 993;\n\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.ProxyClient = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\t\tclient.ServerCertificateValidationCallback = (s, c, h, e) => true;\n\t\t\t\t\tclient.ClientCertificates = null;\n\t\t\t\t\tclient.LocalEndPoint = null;\n\t\t\t\t\tclient.Timeout = 20000;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (host, 0, options);\n\t\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t\t}\n\t\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (host, 0, options));\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailViaProxyAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"imap.gmail.com\";\n\t\t\tint port = 993;\n\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\n\t\t\t\t\tclient.ProxyClient = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\t\tclient.ServerCertificateValidationCallback = (s, c, h, e) => true;\n\t\t\t\t\tclient.ClientCertificates = null;\n\t\t\t\t\tclient.LocalEndPoint = null;\n\t\t\t\t\tclient.Timeout = 20000;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (host, 0, options);\n\t\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t\t}\n\t\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (host, 0, options));\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMailSocket ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"imap.gmail.com\";\n\t\t\tint port = 993;\n\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tvar socket = Connect (host, port);\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (socket, null, port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (socket, \"\", port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (socket, host, -1, SecureSocketOptions.Auto));\n\n\t\t\t\tclient.Connect (socket, host, port, SecureSocketOptions.Auto);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (socket, host, port, SecureSocketOptions.Auto));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailSocketAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"imap.gmail.com\";\n\t\t\tint port = 993;\n\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tvar socket = Connect (host, port);\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (socket, null, port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (socket, \"\", port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (socket, host, -1, SecureSocketOptions.Auto));\n\n\t\t\t\tawait client.ConnectAsync (socket, host, port, SecureSocketOptions.Auto);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (socket, host, port, SecureSocketOptions.Auto));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGmxDe ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"imap.gmx.de\";\n\t\t\tint port = 143;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar uri = new Uri ($\"imap://{host}/?starttls=always\");\n\t\t\t\t\tclient.Connect (uri, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGmxDeAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"imap.gmx.de\";\n\t\t\tint port = 143;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar uri = new Uri ($\"imap://{host}/?starttls=always\");\n\t\t\t\t\tawait client.ConnectAsync (uri, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGmxDeSocket ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"imap.gmx.de\";\n\t\t\tint port = 143;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar socket = Connect (host, port);\n\t\t\t\t\tclient.Connect (socket, host, port, options, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGmxDeSocketAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"imap.gmx.de\";\n\t\t\tint port = 143;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar socket = Connect (host, port);\n\t\t\t\t\tawait client.ConnectAsync (socket, host, port, options, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnexpectedGreeting ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* INVALID\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' })\n\t\t\t\tAssert.Throws<ImapProtocolException> (() => client.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None), \"Connect\");\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' })\n\t\t\t\tAssert.ThrowsAsync<ImapProtocolException> (() => client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None), \"ConnectAsync\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGreetingCapabilities ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.capability-greeting.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GreetingCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGreetingCapabilitiesAsync ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.capability-greeting.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GreetingCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestByeGreeting ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* BYE\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to be connected.\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"The IMAP server unexpectedly refused the connection.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestByeGreetingAsync ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* BYE\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to be connected.\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"The IMAP server unexpectedly refused the connection.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestByeGreetingWithAlert ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* BYE [ALERT] Too many connections.\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint alerts = 0;\n\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"Too many connections.\"));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to be connected.\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"Too many connections.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Expected 1 alert\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestByeGreetingWithAlertAsync ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* BYE [ALERT] Too many connections.\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint alerts = 0;\n\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"Too many connections.\"));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to be connected.\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"Too many connections.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Expected 1 alert\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestByeGreetingWithRespText ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* BYE Too many connections.\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to be connected.\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"Too many connections.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestByeGreetingWithRespTextAsync ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* BYE Too many connections.\\r\\n\"))\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to be connected.\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"Too many connections.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUnexpectedByeCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+statussize+objectid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", Encoding.ASCII.GetBytes (\"* BYE System going down for a reboot.\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnexpectedBye ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\t\t\t\t\tAssert.Fail (\"Did not expect to open the Inbox\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"System going down for a reboot.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Open: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUnexpectedByeAsync ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\t\tAssert.Fail (\"Did not expect to open the Inbox\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"System going down for a reboot.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Open: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUnexpectedByeAfterCapabilityCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* OK Yandex IMAP4rev1 at sas8-bccc92f57f23.qloud-c.yandex.net:993 ready to talk with, 2019-Oct-18 07:41:00, 0fHtH613ZiE1\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", Encoding.ASCII.GetBytes (\"* BYE Autologout; idle for too long (1)\\r\\n* BYE Autologout; idle for too long (2)\\r\\n* BYE Autologout; idle for too long (3)\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnexpectedByeAfterCapability ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeAfterCapabilityCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to connect\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"Autologout; idle for too long (1)\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUnexpectedByeAfterCapabilityAsync ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeAfterCapabilityCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Did not expect to connect\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"Autologout; idle for too long (1)\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUnexpectedByeWithAlertCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+statussize+objectid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", Encoding.ASCII.GetBytes (\"* BYE [ALERT] System going down for a reboot.\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnexpectedByeWithAlert ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeWithAlertCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint alerts = 0;\n\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"System going down for a reboot.\"));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\t\t\t\t\tAssert.Fail (\"Did not expect to open the Inbox\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"System going down for a reboot.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Open: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Expected 1 alert\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUnexpectedByeWithAlertAsync ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeWithAlertCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint alerts = 0;\n\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"System going down for a reboot.\"));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\t\tAssert.Fail (\"Did not expect to open the Inbox\");\n\t\t\t\t} catch (ImapProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"System going down for a reboot.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Open: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Expected 1 alert\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUnexpectedByeInSaslAuthenticateCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", Encoding.ASCII.GetBytes (\"* BYE disconnecting\\r\\nA00000001 NO you are not allowed to act as a proxy server\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnexpectedByeInSaslAuthenticate ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeInSaslAuthenticateCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Expected failure\");\n\t\t\t\t} catch (ImapProtocolException pex) {\n\t\t\t\t\tAssert.That (pex.Message, Is.EqualTo (\"you are not allowed to act as a proxy server\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Expected ImapProtocolException, but got: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUnexpectedByeInSaslAuthenticateAsync ()\n\t\t{\n\t\t\tvar commands = CreateUnexpectedByeInSaslAuthenticateCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Expected failure\");\n\t\t\t\t} catch (ImapProtocolException pex) {\n\t\t\t\t\tAssert.That (pex.Message, Is.EqualTo (\"you are not allowed to act as a proxy server\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Expected ImapProtocolException, but got: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateInvalidTaggedByeDuringLogoutCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+statussize+objectid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LOGOUT\\r\\n\", Encoding.ASCII.GetBytes (\"A00000005 BYE IMAP4rev1 Server logging out\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestInvalidTaggedByeDuringLogout ()\n\t\t{\n\t\t\tvar commands = CreateInvalidTaggedByeDuringLogoutCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Exceptions should be swallowed in Disconnect: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestInvalidTaggedByeDuringLogoutAsync ()\n\t\t{\n\t\t\tvar commands = CreateInvalidTaggedByeDuringLogoutCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Exceptions should be swallowed in Disconnect: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreatePreAuthGreetingCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.preauth-greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"common.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LIST \\\"\\\" \\\"\\\"\\r\\n\", \"common.list-namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"common.list-inbox.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestPreAuthGreeting ()\n\t\t{\n\t\t\tvar capabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status;\n\t\t\tvar commands = CreatePreAuthGreetingCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.True, \"Client should be authenticated.\");\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (capabilities), \"Capabilities\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox), \"Expected Inbox attributes to be empty.\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestPreAuthGreetingAsync ()\n\t\t{\n\t\t\tvar capabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status;\n\t\t\tvar commands = CreatePreAuthGreetingCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.True, \"Client should be authenticated.\");\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (capabilities), \"Capabilities\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox), \"Expected Inbox attributes to be empty.\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreatePreAuthCapabilityGreetingCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.preauth-capability-greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LIST \\\"\\\" \\\"\\\"\\r\\n\", \"common.list-namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"common.list-inbox.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestPreAuthCapabilityGreeting ()\n\t\t{\n\t\t\tvar capabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status;\n\t\t\tvar commands = CreatePreAuthCapabilityGreetingCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.True, \"Client should be authenticated.\");\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (capabilities), \"Capabilities\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox), \"Expected Inbox attributes to be empty.\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestPreAuthCapabilityGreetingAsync ()\n\t\t{\n\t\t\tvar capabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status;\n\t\t\tvar commands = CreatePreAuthCapabilityGreetingCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.True, \"Client should be authenticated.\");\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (capabilities), \"Capabilities\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox), \"Expected Inbox attributes to be empty.\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateGMailWebAlertCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username password\\r\\n\", \"gmail.authenticate+webalert.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGMailWebAlert ()\n\t\t{\n\t\t\tconst string webUri = \"https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbsNd6RU3LIlgDfhmL9Y7ywYhtagFig_xfuSJCUHD9Eg3XqN8DKlDk3G8jmj2w5viIm5PDC3BS4SVy7iFMB6g1244cnQt1E60EdOTSEpnqDzL6FH2L-ReOAyZ3qkSXZQZs2pIfL2\";\n\t\t\tconst string alert = \"Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)\";\n\n\t\t\tvar commands = CreateGMailWebAlertCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint webalerts = 0;\n\t\t\t\tint alerts = 0;\n\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (alert));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\tclient.WebAlert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.WebUri.AbsoluteUri, Is.EqualTo (webUri));\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"Web login required.\"));\n\t\t\t\t\twebalerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (alert));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Expected 1 alert\");\n\t\t\t\tAssert.That (webalerts, Is.EqualTo (1), \"Expected 1 web alert\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGMailWebAlertAsync ()\n\t\t{\n\t\t\tconst string webUri = \"https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbsNd6RU3LIlgDfhmL9Y7ywYhtagFig_xfuSJCUHD9Eg3XqN8DKlDk3G8jmj2w5viIm5PDC3BS4SVy7iFMB6g1244cnQt1E60EdOTSEpnqDzL6FH2L-ReOAyZ3qkSXZQZs2pIfL2\";\n\t\t\tconst string alert = \"Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)\";\n\n\t\t\tvar commands = CreateGMailWebAlertCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tint webalerts = 0;\n\t\t\t\tint alerts = 0;\n\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (alert));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\tclient.WebAlert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.WebUri.AbsoluteUri, Is.EqualTo (webUri));\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"Web login required.\"));\n\t\t\t\t\twebalerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (alert));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Expected 1 alert\");\n\t\t\t\tAssert.That (webalerts, Is.EqualTo (1), \"Expected 1 web alert\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUnicodeRespTextCommands (out string respText)\n\t\t{\n\t\t\trespText = \"╟ы╩╣╙├╩┌╚и┬ы╡╟┬╝бг╧ъ╟щ╟ы┐┤\";\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username password\\r\\n\", Encoding.UTF8.GetBytes (\"A00000001 NO \" + respText + \"\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnicodeRespText ()\n\t\t{\n\t\t\tvar commands = CreateUnicodeRespTextCommands (out var respText);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (respText));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUnicodeRespTextAsync ()\n\t\t{\n\t\t\tvar commands = CreateUnicodeRespTextCommands (out var respText);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (respText));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateInvalidUntaggedResponseCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"Buggy Folder Listing\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", Encoding.ASCII.GetBytes (\"* {25}\\r\\nThis should be skipped...\\r\\n* LIST (\\\\NoSelect) \\\"/\\\" \\\"Buggy Folder Listing\\\"\\r\\nA00000005 OK LIST completed.\\r\\n\")),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestInvalidUntaggedResponse ()\n\t\t{\n\t\t\tvar commands = CreateInvalidUntaggedResponseCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar folder = client.GetFolder (\"Buggy Folder Listing\");\n\t\t\t\tAssert.That (folder.Name, Is.EqualTo (\"Buggy Folder Listing\"), \"Name\");\n\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (FolderAttributes.NoSelect), \"Attributes\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestInvalidUntaggedResponseAsync ()\n\t\t{\n\t\t\tvar commands = CreateInvalidUntaggedResponseCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar folder = await client.GetFolderAsync (\"Buggy Folder Listing\");\n\t\t\t\tAssert.That (folder.Name, Is.EqualTo (\"Buggy Folder Listing\"), \"Name\");\n\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (FolderAttributes.NoSelect), \"Attributes\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateInvalidUntaggedBadResponseCommands (out string alertText)\n\t\t{\n\t\t\talertText = \"Please enable IMAP access in your account settings first.\";\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.capability-greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", Encoding.UTF8.GetBytes (\"A00000000 OK [ALERT] \" + alertText + \"\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 CAPABILITY\\r\\n\", Encoding.UTF8.GetBytes (\"A00000001 NO [ALERT] \" + alertText + \"\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", Encoding.UTF8.GetBytes (\"A00000002 NO [ALERT] \" + alertText + \"\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", Encoding.UTF8.GetBytes (\"* BAD [ALERT] \" + alertText + \"\\r\\nA00000003 NO [ALERT] \" + alertText + \"\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestInvalidUntaggedBadResponse ()\n\t\t{\n\t\t\tvar commands = CreateInvalidUntaggedBadResponseCommands (out var alertText);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\tint alerts = 0;\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (alertText));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (alertText));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (5), $\"Unexpected number of alerts: {alerts}\");\n\n\t\t\t\tAssert.That (client.Inbox, Is.Not.Null, \"Inbox\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestInvalidUntaggedBadResponseAsync ()\n\t\t{\n\t\t\tvar commands = CreateInvalidUntaggedBadResponseCommands (out var alertText);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\tint alerts = 0;\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (alertText));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (alertText));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (alerts, Is.EqualTo (5), $\"Unexpected number of alerts: {alerts}\");\n\n\t\t\t\tAssert.That (client.Inbox, Is.Not.Null, \"Inbox\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\t// Tests issue https://github.com/jstedfast/MailKit/issues/115#issuecomment-313684616\n\t\tstatic IList<ImapReplayCommand> CreateUntaggedRespCodeCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID MOVE 1 \\\"[Gmail]/Trash\\\"\\r\\n\", Encoding.ASCII.GetBytes (\"* [COPYUID 123456 1 2]\\r\\n* 1 EXPUNGE\\r\\nA00000006 OK Completed.\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUntaggedRespCode ()\n\t\t{\n\t\t\tvar commands = CreateUntaggedRespCodeCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar trash = client.GetFolder (SpecialFolder.Trash);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\t\t\t\tvar moved = inbox.MoveTo (UniqueId.MinValue, trash);\n\t\t\t\tAssert.That (moved.Value.Id, Is.EqualTo (2));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUntaggedRespCodeAsync ()\n\t\t{\n\t\t\tvar commands = CreateUntaggedRespCodeCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar trash = client.GetFolder (SpecialFolder.Trash);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tvar moved = await inbox.MoveToAsync (UniqueId.MinValue, trash);\n\t\t\t\tAssert.That (moved.Value.Id, Is.EqualTo (2));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateSuperfluousUntaggedOkNoOrBadCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID MOVE 1 \\\"[Gmail]/Trash\\\"\\r\\n\", Encoding.ASCII.GetBytes (\"* OK The good,\\r\\n* BAD the bad,\\r\\n* NO and the ugly.\\r\\n* OK [COPYUID 123456 1 2]\\r\\n* 1 EXPUNGE\\r\\nA00000006 OK Completed.\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TesSuperfluousUntaggedOkNoOrBad ()\n\t\t{\n\t\t\tvar commands = CreateSuperfluousUntaggedOkNoOrBadCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar trash = client.GetFolder (SpecialFolder.Trash);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\t\t\t\tvar moved = inbox.MoveTo (UniqueId.MinValue, trash);\n\t\t\t\tAssert.That (moved.Value.Id, Is.EqualTo (2));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSuperfluousUntaggedOkNoOrBadAsync ()\n\t\t{\n\t\t\tvar commands = CreateSuperfluousUntaggedOkNoOrBadCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar trash = client.GetFolder (SpecialFolder.Trash);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tvar moved = await inbox.MoveToAsync (UniqueId.MinValue, trash);\n\t\t\t\tAssert.That (moved.Value.Id, Is.EqualTo (2));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateLoginCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN \\\"Indiana \\\\\\\"Han Solo\\\\\\\" Jones\\\" \\\"p@ss\\\\\\\\word\\\"\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLogin ()\n\t\t{\n\t\t\tvar commands = CreateLoginCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// Note: Do not try to use any SASL mechanisms\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new NetworkCredential (\"Indiana \\\"Han Solo\\\" Jones\", \"p@ss\\\\word\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestLoginAsync ()\n\t\t{\n\t\t\tvar commands = CreateLoginCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// Note: Do not try to use any SASL mechanisms\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new NetworkCredential (\"Indiana \\\"Han Solo\\\" Jones\", \"p@ss\\\\word\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateLoginSpecialCharacterCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username \\\"pass%word\\\"\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginSpecialCharacter ()\n\t\t{\n\t\t\tvar commands = CreateLoginSpecialCharacterCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// Note: Do not try to use any SASL mechanisms\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"pass%word\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestLoginSpecialCharacterAsync ()\n\t\t{\n\t\t\tvar commands = CreateLoginSpecialCharacterCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// Note: Do not try to use any SASL mechanisms\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"pass%word\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateLoginDisabledCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability+logindisabled.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", ImapReplayCommandResponse.NO)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginDisabled ()\n\t\t{\n\t\t\tvar commands = CreateLoginDisabledCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities | ImapCapabilities.LoginDisabled));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (\"AUTHENTICATE failed\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (\"The LOGIN command is disabled.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestLoginDisabledAsync ()\n\t\t{\n\t\t\tvar commands = CreateLoginDisabledCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities | ImapCapabilities.LoginDisabled));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (\"AUTHENTICATE failed\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (\"The LOGIN command is disabled.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateExchangeUserIsAuthenticatedButNotConnectedCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"exchange.capability-preauth.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN \\\"user@domain.com\\\\\\\\mailbox\\\" password\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 CAPABILITY\\r\\n\", \"exchange.capability-postauth.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 NAMESPACE\\r\\n\", Encoding.ASCII.GetBytes (\"A00000003 BAD User is authenticated but not connected.\\r\\n\"))\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExchangeUserIsAuthenticatedButNotConnected ()\n\t\t{\n\t\t\tvar commands = CreateExchangeUserIsAuthenticatedButNotConnectedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 | ImapCapabilities.SaslIR | ImapCapabilities.UidPlus | ImapCapabilities.Id |\n\t\t\t\t\tImapCapabilities.Unselect | ImapCapabilities.Children | ImapCapabilities.Idle | ImapCapabilities.Namespace | ImapCapabilities.LiteralPlus |\n\t\t\t\t\tImapCapabilities.Status));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"user@domain.com\\\\mailbox\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (ImapCommandException cx) {\n\t\t\t\t\tAssert.That (cx.Response, Is.EqualTo (ImapCommandResponse.Bad));\n\t\t\t\t\tAssert.That (cx.ResponseText, Is.EqualTo (\"User is authenticated but not connected.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExchangeUserIsAuthenticatedButNotConnectedAsync ()\n\t\t{\n\t\t\tvar commands = CreateExchangeUserIsAuthenticatedButNotConnectedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 | ImapCapabilities.SaslIR | ImapCapabilities.UidPlus | ImapCapabilities.Id |\n\t\t\t\t\tImapCapabilities.Unselect | ImapCapabilities.Children | ImapCapabilities.Idle | ImapCapabilities.Namespace | ImapCapabilities.LiteralPlus |\n\t\t\t\t\tImapCapabilities.Status));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"user@domain.com\\\\mailbox\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Did not expect Authenticate to work.\");\n\t\t\t\t} catch (ImapCommandException cx) {\n\t\t\t\t\tAssert.That (cx.Response, Is.EqualTo (ImapCommandResponse.Bad));\n\t\t\t\t\tAssert.That (cx.ResponseText, Is.EqualTo (\"User is authenticated but not connected.\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateAdvancedFeaturesCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability+login.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE LOGIN\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"dXNlcm5hbWU=\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000001\", \"cGFzc3dvcmQ=\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 ENABLE UTF8=ACCEPT\\r\\n\", \"gmail.utf8accept.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 GETQUOTAROOT INBOX\\r\\n\", \"common.getquota.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 SETQUOTA \\\"\\\" (MESSAGE 1000000 STORAGE 5242880)\\r\\n\", \"common.setquota.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAdvancedFeatures ()\n\t\t{\n\t\t\tvar commands = CreateAdvancedFeaturesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (6));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// Note: Do not try XOAUTH2 or PLAIN\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tclient.EnableUTF8 ();\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tvar quota = inbox.GetQuota ();\n\t\t\t\tAssert.That (quota, Is.Not.Null, \"Expected a non-null GETQUOTAROOT response.\");\n\t\t\t\tAssert.That (quota.QuotaRoot.FullName, Is.EqualTo (personal.FullName));\n\t\t\t\tAssert.That (quota.QuotaRoot, Is.EqualTo (personal));\n\t\t\t\tAssert.That (quota.CurrentStorageSize.Value, Is.EqualTo (3783));\n\t\t\t\tAssert.That (quota.StorageLimit.Value, Is.EqualTo (15728640));\n\t\t\t\tAssert.That (quota.CurrentMessageCount.HasValue, Is.False);\n\t\t\t\tAssert.That (quota.MessageLimit.HasValue, Is.False);\n\n\t\t\t\tquota = personal.SetQuota (1000000, 5242880);\n\t\t\t\tAssert.That (quota, Is.Not.Null, \"Expected non-null SETQUOTA response.\");\n\t\t\t\tAssert.That (quota.CurrentMessageCount.Value, Is.EqualTo (1107));\n\t\t\t\tAssert.That (quota.CurrentStorageSize.Value, Is.EqualTo (3783));\n\t\t\t\tAssert.That (quota.MessageLimit.Value, Is.EqualTo (1000000));\n\t\t\t\tAssert.That (quota.StorageLimit.Value, Is.EqualTo (5242880));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestAdvancedFeaturesAsync ()\n\t\t{\n\t\t\tvar commands = CreateAdvancedFeaturesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (6));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// Note: Do not try XOAUTH2 or PLAIN\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tawait client.EnableUTF8Async ();\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tvar quota = await inbox.GetQuotaAsync ();\n\t\t\t\tAssert.That (quota, Is.Not.Null, \"Expected a non-null GETQUOTAROOT response.\");\n\t\t\t\tAssert.That (quota.QuotaRoot.FullName, Is.EqualTo (personal.FullName));\n\t\t\t\tAssert.That (quota.QuotaRoot, Is.EqualTo (personal));\n\t\t\t\tAssert.That (quota.CurrentStorageSize.Value, Is.EqualTo (3783));\n\t\t\t\tAssert.That (quota.StorageLimit.Value, Is.EqualTo (15728640));\n\t\t\t\tAssert.That (quota.CurrentMessageCount.HasValue, Is.False);\n\t\t\t\tAssert.That (quota.MessageLimit.HasValue, Is.False);\n\n\t\t\t\tquota = await personal.SetQuotaAsync (1000000, 5242880);\n\t\t\t\tAssert.That (quota, Is.Not.Null, \"Expected non-null SETQUOTA response.\");\n\t\t\t\tAssert.That (quota.CurrentMessageCount.Value, Is.EqualTo (1107));\n\t\t\t\tAssert.That (quota.CurrentStorageSize.Value, Is.EqualTo (3783));\n\t\t\t\tAssert.That (quota.MessageLimit.Value, Is.EqualTo (1000000));\n\t\t\t\tAssert.That (quota.StorageLimit.Value, Is.EqualTo (5242880));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSendingStringsAsLiteralsCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability+login.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE LOGIN\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"dXNlcm5hbWU=\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000001\", \"cGFzc3dvcmQ=\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 ENABLE UTF8=ACCEPT\\r\\n\", \"gmail.utf8accept.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 ID (\\\"name\\\" \\\"MailKit\\\" \\\"version\\\" \\\"1.0\\\" \\\"vendor\\\" \\\"Xamarin Inc.\\\" \\\"address\\\" {35}\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000006\", \"1 Memorial Dr.\\r\\nCambridge, MA 02142)\\r\\n\", \"common.id.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSendingStringsAsLiterals ()\n\t\t{\n\t\t\tvar commands = CreateSendingStringsAsLiteralsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2 or PLAIN\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.EnableUTF8 ();\n\n\t\t\t\tvar implementation = new ImapImplementation {\n\t\t\t\t\tName = \"MailKit\", Version = \"1.0\", Vendor = \"Xamarin Inc.\", Address = \"1 Memorial Dr.\\r\\nCambridge, MA 02142\"\n\t\t\t\t};\n\n\t\t\t\t// Disable LITERAL+ and LITERAL- extensions\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.LiteralPlus;\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.LiteralMinus;\n\n\t\t\t\timplementation = client.Identify (implementation);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSendingStringsAsLiteralsAsync ()\n\t\t{\n\t\t\tvar commands = CreateSendingStringsAsLiteralsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2 or PLAIN\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.EnableUTF8Async ();\n\n\t\t\t\tvar implementation = new ImapImplementation {\n\t\t\t\t\tName = \"MailKit\", Version = \"1.0\", Vendor = \"Xamarin Inc.\", Address = \"1 Memorial Dr.\\r\\nCambridge, MA 02142\"\n\t\t\t\t};\n\n\t\t\t\t// Disable LITERAL+ and LITERAL- extensions\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.LiteralPlus;\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.LiteralMinus;\n\n\t\t\t\timplementation = await client.IdentifyAsync (implementation);\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSaslAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability+login.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE LOGIN\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"dXNlcm5hbWU=\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000001\", \"cGFzc3dvcmQ=\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateSaslAuthenticationCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (6));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateSaslAuthenticationCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (6));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSaslIRAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateSaslIRAuthenticationCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismPlain (credentials);\n\n\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslIRAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateSaslIRAuthenticationCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\tint authenticated = 0;\n\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\tauthenticated++;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismPlain (credentials);\n\n\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertRedacted (MemoryStream stream, string commandPrefix, string nextCommandPrefix)\n\t\t{\n\t\t\tstream.Position = 0;\n\n\t\t\tusing (var reader = new StreamReader (stream, Encoding.ASCII, false, 1024, true)) {\n\t\t\t\tstring secrets;\n\t\t\t\tstring line;\n\n\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\tif (line.StartsWith (commandPrefix, StringComparison.Ordinal))\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tAssert.That (line, Is.Not.Null, $\"Authentication command not found: {commandPrefix}\");\n\n\t\t\t\tif (line.Length > commandPrefix.Length) {\n\t\t\t\t\tsecrets = line.Substring (commandPrefix.Length);\n\n\t\t\t\t\tvar tokens = secrets.Split (' ');\n\t\t\t\t\tvar expectedTokens = new string[tokens.Length];\n\t\t\t\t\tfor (int i = 0; i < tokens.Length; i++) {\n\t\t\t\t\t\tif (tokens[i][0] == '\"')\n\t\t\t\t\t\t\texpectedTokens[i] = \"\\\"********\\\"\";\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\texpectedTokens[i] = \"********\";\n\t\t\t\t\t}\n\n\t\t\t\t\tvar expected = string.Join (\" \", expectedTokens);\n\n\t\t\t\t\tAssert.That (secrets, Is.EqualTo (expected), commandPrefix);\n\t\t\t\t}\n\n\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\tif (line.StartsWith (nextCommandPrefix, StringComparison.Ordinal))\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (!line.StartsWith (\"C: \", StringComparison.Ordinal))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tsecrets = line.Substring (3);\n\n\t\t\t\t\tAssert.That (secrets, Is.EqualTo (\"********\"), \"SASL challenge\");\n\t\t\t\t}\n\n\t\t\t\tAssert.Fail (\"Did not find response.\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateRedactLoginCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username \\\"pass%word\\\"\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactLogin ()\n\t\t{\n\t\t\tvar commands = CreateRedactLoginCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new ImapClient (new ProtocolLogger (stream, true) { RedactSecrets = true }) { TagPrefix = 'A' }) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t\t// Note: Do not try to use any SASL mechanisms\n\t\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\t\tint authenticated = 0;\n\t\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\t\tauthenticated++;\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"pass%word\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\t\tclient.Disconnect (false);\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: A00000001 LOGIN \", \"C: A00000002 NAMESPACE\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactLoginAsync ()\n\t\t{\n\t\t\tvar commands = CreateRedactLoginCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new ImapClient (new ProtocolLogger (stream, true) { RedactSecrets = true }) { TagPrefix = 'A' }) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t\t// Note: Do not try to use any SASL mechanisms\n\t\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\t\tint authenticated = 0;\n\t\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\t\tauthenticated++;\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"pass%word\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: A00000001 LOGIN \", \"C: A00000002 NAMESPACE\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateRedactAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateRedactAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new ImapClient (new ProtocolLogger (stream, true) { RedactSecrets = true }) { TagPrefix = 'A' }) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\n\t\t\t\t\tclient.Disconnect (false);\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: A00000001 AUTHENTICATE PLAIN \", \"C: A00000002 NAMESPACE\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateRedactAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new ImapClient (new ProtocolLogger (stream, true) { RedactSecrets = true }) { TagPrefix = 'A' }) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\n\t\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: A00000001 AUTHENTICATE PLAIN \", \"C: A00000002 NAMESPACE\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateRedactSaslAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability+login.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE LOGIN\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"dXNlcm5hbWU=\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000001\", \"cGFzc3dvcmQ=\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactSaslAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateRedactSaslAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new ImapClient (new ProtocolLogger (stream, true) { RedactSecrets = true }) { TagPrefix = 'A' }) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (6));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t\tint authenticated = 0;\n\t\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\t\tauthenticated++;\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\t\tclient.Disconnect (false);\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: A00000001 AUTHENTICATE LOGIN\", \"C: A00000002 NAMESPACE\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactSaslAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateRedactSaslAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new ImapClient (new ProtocolLogger (stream, true) { RedactSecrets = true }) { TagPrefix = 'A' }) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (6));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t\tint authenticated = 0;\n\t\t\t\t\tclient.Authenticated += (sender, e) => {\n\t\t\t\t\t\tauthenticated++;\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (authenticated, Is.EqualTo (1), \"Authenticated event was not emitted the expected number of times\");\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: A00000001 AUTHENTICATE LOGIN\", \"C: A00000002 NAMESPACE\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateEnableUTF8Commands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 ENABLE UTF8=ACCEPT\\r\\n\", \"gmail.utf8accept.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnableUTF8 ()\n\t\t{\n\t\t\tvar commands = CreateEnableUTF8Commands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tclient.EnableUTF8 ();\n\n\t\t\t\t// ENABLE UTF8 a second time should no-op.\n\t\t\t\tclient.EnableUTF8 ();\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEnableUTF8Async ()\n\t\t{\n\t\t\tvar commands = CreateEnableUTF8Commands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.SupportsQuotas, Is.True, \"SupportsQuotas\");\n\n\t\t\t\tawait client.EnableUTF8Async ();\n\n\t\t\t\t// ENABLE UTF8 a second time should no-op.\n\t\t\t\tawait client.EnableUTF8Async ();\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateEnableQuickResyncCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 ENABLE QRESYNC CONDSTORE\\r\\n\", \"dovecot.enable-qresync.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnableQuickResync ()\n\t\t{\n\t\t\tvar commands = CreateEnableQuickResyncCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"DIGEST-MD5\"), \"Expected SASL DIGEST-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"CRAM-MD5\"), \"Expected SASL CRAM-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.InternationalizationLevel, Is.EqualTo (1), \"Expected I18NLEVEL=1\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Expected THREAD=ORDEREDSUBJECT\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Expected THREAD=REFERENCES\");\n\n\t\t\t\tclient.EnableQuickResync ();\n\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.QuickResync), Is.True, \"Expected the INBOX to support QRESYNC\");\n\n\t\t\t\t// ENABLE QRESYNC a second time should no-op.\n\t\t\t\tclient.EnableQuickResync ();\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEnableQuickResyncAsync ()\n\t\t{\n\t\t\tvar commands = CreateEnableQuickResyncCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"DIGEST-MD5\"), \"Expected SASL DIGEST-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"CRAM-MD5\"), \"Expected SASL CRAM-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.InternationalizationLevel, Is.EqualTo (1), \"Expected I18NLEVEL=1\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Expected THREAD=ORDEREDSUBJECT\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Expected THREAD=REFERENCES\");\n\n\t\t\t\tawait client.EnableQuickResyncAsync ();\n\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.QuickResync), Is.True, \"Expected the INBOX to support QRESYNC\");\n\n\t\t\t\t// ENABLE QRESYNC a second time should no-op.\n\t\t\t\tawait client.EnableQuickResyncAsync ();\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateEnableQuickResynciCloudCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"icloud.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"icloud.authenticate-plain.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 CAPABILITY\\r\\n\", \"icloud.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"icloud.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"icloud.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 ENABLE QRESYNC CONDSTORE\\r\\n\", \"icloud.enable-qresync.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnableQuickResynciCloud ()\n\t\t{\n\t\t\tvar commands = CreateEnableQuickResynciCloudCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ICloudInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"ATOKEN\"), \"Expected SASL ATOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"ATOKEN2\"), \"Expected SASL ATOKEN2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ICloudAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Expected THREAD=ORDEREDSUBJECT\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Expected THREAD=REFERENCES\");\n\n\t\t\t\tclient.EnableQuickResync ();\n\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.QuickResync), Is.True, \"Expected the INBOX to support QRESYNC\");\n\n\t\t\t\t// ENABLE QRESYNC a second time should no-op.\n\t\t\t\tclient.EnableQuickResync ();\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEnableQuickResynciCloudAsync ()\n\t\t{\n\t\t\tvar commands = CreateEnableQuickResynciCloudCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ICloudInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"ATOKEN\"), \"Expected SASL ATOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"ATOKEN2\"), \"Expected SASL ATOKEN2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ICloudAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Expected THREAD=ORDEREDSUBJECT\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Expected THREAD=REFERENCES\");\n\n\t\t\t\tawait client.EnableQuickResyncAsync ();\n\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.QuickResync), Is.True, \"Expected the INBOX to support QRESYNC\");\n\n\t\t\t\t// ENABLE QRESYNC a second time should no-op.\n\t\t\t\tawait client.EnableQuickResyncAsync ();\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertFolder (IMailFolder folder, string fullName, string id, FolderAttributes attributes, bool subscribed, ulong highestmodseq, int count, int recent, uint uidnext, uint validity, int unread, ulong size)\n\t\t{\n\t\t\tif (subscribed)\n\t\t\t\tattributes |= FolderAttributes.Subscribed;\n\n\t\t\tAssert.That (folder.FullName, Is.EqualTo (fullName), \"FullName\");\n\t\t\tAssert.That (folder.Attributes, Is.EqualTo (attributes), \"Attributes\");\n\t\t\tAssert.That (folder.IsSubscribed, Is.EqualTo (subscribed), \"IsSubscribed\");\n\t\t\tAssert.That (folder.HighestModSeq, Is.EqualTo (highestmodseq), \"HighestModSeq\");\n\t\t\tAssert.That (folder, Has.Count.EqualTo (count), \"Count\");\n\t\t\tAssert.That (folder.Recent, Is.EqualTo (recent), \"Recent\");\n\t\t\tAssert.That (folder.Unread, Is.EqualTo (unread), \"Unread\");\n\t\t\tAssert.That (folder.UidNext.HasValue ? folder.UidNext.Value.Id : (uint) 0, Is.EqualTo (uidnext), \"UidNext\");\n\t\t\tAssert.That (folder.UidValidity, Is.EqualTo (validity), \"UidValidity\");\n\t\t\tAssert.That (folder.Size ?? (ulong) 0, Is.EqualTo (size), \"Size\");\n\t\t\tAssert.That (folder.Id, Is.EqualTo (id), \"MailboxId\");\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateGetFoldersCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+statussize+objectid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST (SUBSCRIBED) \\\"\\\" \\\"*\\\" RETURN (CHILDREN STATUS (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID))\\r\\n\", \"gmail.list-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-all-no-status.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 STATUS INBOX (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 STATUS +Folder (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-+folder.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 STATUS \\\"[Gmail]/All Mail\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-all-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 STATUS \\\"[Gmail]/Drafts\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-drafts.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 STATUS \\\"[Gmail]/Important\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-important.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 STATUS \\\"[Gmail]/Sent Mail\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-sent-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000013 STATUS \\\"[Gmail]/Spam\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-spam.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000014 STATUS \\\"[Gmail]/Starred\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-starred.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000015 STATUS \\\"[Gmail]/Trash\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-trash.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000016 LSUB \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.lsub-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000017 STATUS INBOX (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000018 STATUS +Folder (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-+folder.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000019 STATUS \\\"[Gmail]/All Mail\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-all-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000020 STATUS \\\"[Gmail]/Drafts\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-drafts.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000021 STATUS \\\"[Gmail]/Important\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-important.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000022 STATUS \\\"[Gmail]/Sent Mail\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-sent-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000023 STATUS \\\"[Gmail]/Spam\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-spam.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000024 STATUS \\\"[Gmail]/Starred\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-starred.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000025 STATUS \\\"[Gmail]/Trash\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ SIZE MAILBOXID)\\r\\n\", \"gmail.status-trash.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000026 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetFolders ()\n\t\t{\n\t\t\tvar commands = CreateGetFoldersCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities | ImapCapabilities.StatusSize | ImapCapabilities.ObjectID));\n\n\t\t\t\tvar all = StatusItems.Count | StatusItems.HighestModSeq | StatusItems.Recent | StatusItems.UidNext | StatusItems.UidValidity | StatusItems.Unread | StatusItems.Size | StatusItems.MailboxId;\n\t\t\t\tvar folders = client.GetFolders (client.PersonalNamespaces[0], all, true);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (10), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[1], \"+Folder\", \"f001Ed6c-ebee-41a5-a65e-9498d3e0aec0\", FolderAttributes.HasNoChildren, true, 41234, 6, 0, 7, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]\", null, FolderAttributes.HasChildren | FolderAttributes.NonExistent, true, 0, 0, 0, 0, 0, 0, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (folders[7], \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (folders[8], \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (folders[9], \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tAssertFolder (client.Inbox, \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\t// Now make the same query but disable LIST-STATUS\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListStatus;\n\t\t\t\tfolders = client.GetFolders (client.PersonalNamespaces[0], all, false);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (10), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[1], \"+Folder\", \"f001Ed6c-ebee-41a5-a65e-9498d3e0aec0\", FolderAttributes.HasNoChildren, true, 41234, 6, 0, 7, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]\", null, FolderAttributes.HasChildren | FolderAttributes.NonExistent, true, 0, 0, 0, 0, 0, 0, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (folders[7], \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (folders[8], \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (folders[9], \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tAssertFolder (client.Inbox, \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\t// Now make the same query but disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\t\t\t\tfolders = client.GetFolders (client.PersonalNamespaces[0], all, true);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (10), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[1], \"+Folder\", \"f001Ed6c-ebee-41a5-a65e-9498d3e0aec0\", FolderAttributes.HasNoChildren, true, 41234, 6, 0, 7, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]\", null, FolderAttributes.HasChildren | FolderAttributes.NonExistent, true, 0, 0, 0, 0, 0, 0, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (folders[7], \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (folders[8], \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (folders[9], \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tAssertFolder (client.Inbox, \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetFoldersAsync ()\n\t\t{\n\t\t\tvar commands = CreateGetFoldersCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities | ImapCapabilities.StatusSize | ImapCapabilities.ObjectID));\n\n\t\t\t\tvar all = StatusItems.Count | StatusItems.HighestModSeq | StatusItems.Recent | StatusItems.UidNext | StatusItems.UidValidity | StatusItems.Unread | StatusItems.Size | StatusItems.MailboxId;\n\t\t\t\tvar folders = await client.GetFoldersAsync (client.PersonalNamespaces[0], all, true);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (10), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[1], \"+Folder\", \"f001Ed6c-ebee-41a5-a65e-9498d3e0aec0\", FolderAttributes.HasNoChildren, true, 41234, 6, 0, 7, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]\", null, FolderAttributes.HasChildren | FolderAttributes.NonExistent, true, 0, 0, 0, 0, 0, 0, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (folders[7], \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (folders[8], \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (folders[9], \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tAssertFolder (client.Inbox, \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\t// Now make the same query but disable LIST-STATUS\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListStatus;\n\t\t\t\tfolders = await client.GetFoldersAsync (client.PersonalNamespaces[0], all, false);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (10), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[1], \"+Folder\", \"f001Ed6c-ebee-41a5-a65e-9498d3e0aec0\", FolderAttributes.HasNoChildren, true, 41234, 6, 0, 7, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]\", null, FolderAttributes.HasChildren | FolderAttributes.NonExistent, true, 0, 0, 0, 0, 0, 0, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (folders[7], \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (folders[8], \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (folders[9], \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tAssertFolder (client.Inbox, \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\t// Now make the same query but disable LIST-STATUS\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\t\t\t\tfolders = await client.GetFoldersAsync (client.PersonalNamespaces[0], all, true);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (10), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[1], \"+Folder\", \"f001Ed6c-ebee-41a5-a65e-9498d3e0aec0\", FolderAttributes.HasNoChildren, true, 41234, 6, 0, 7, 1, 0, 1024);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]\", null, FolderAttributes.HasChildren | FolderAttributes.NonExistent, true, 0, 0, 0, 0, 0, 0, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (folders[7], \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (folders[8], \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (folders[9], \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tAssertFolder (client.Inbox, \"INBOX\", \"d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24\", FolderAttributes.HasNoChildren | FolderAttributes.Inbox, true, 41234, 60, 0, 410, 1, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", \"f668b57d-9f42-453b-b315-a18cd3eb0f85\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", \"fdacc3c7-4e20-4ca0-a0d7-4f7267187e48\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", \"2a0410e1-252a-4ee8-b48d-30111cda734a\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", \"79da5ecd-afe4-440e-81ce-64ace69c9fbd\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", \"f5df5af8-5e11-49a5-891d-c3e05591265e\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", \"93ad849a-2127-4c8e-ac41-594cd0a346a4\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0, 1024);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", \"a663f6ce-4f36-434e-9f0c-7f757046a6d4\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0, 1024);\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateGetQuotaNonexistentQuotaRootCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 GETQUOTAROOT INBOX\\r\\n\", \"common.getquota-no-root.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" storage=0 RETURN (SUBSCRIBED CHILDREN)\\r\\n\", ImapReplayCommandResponse.OK)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetQuotaNonexistentQuotaRoot ()\n\t\t{\n\t\t\tvar commands = CreateGetQuotaNonexistentQuotaRootCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tvar quota = inbox.GetQuota ();\n\t\t\t\tAssert.That (quota, Is.Not.Null, \"Expected a non-null GETQUOTAROOT response.\");\n\t\t\t\tAssert.That (quota.QuotaRoot.Exists, Is.False);\n\t\t\t\tAssert.That (quota.QuotaRoot.FullName, Is.EqualTo (\"storage=0\"));\n\t\t\t\tAssert.That (quota.CurrentStorageSize.Value, Is.EqualTo (28257));\n\t\t\t\tAssert.That (quota.StorageLimit.Value, Is.EqualTo (256000));\n\t\t\t\tAssert.That (quota.CurrentMessageCount.HasValue, Is.False);\n\t\t\t\tAssert.That (quota.MessageLimit.HasValue, Is.False);\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetQuotaNonexistentQuotaRootAsync ()\n\t\t{\n\t\t\tvar commands = CreateGetQuotaNonexistentQuotaRootCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tvar quota = await inbox.GetQuotaAsync ();\n\t\t\t\tAssert.That (quota, Is.Not.Null, \"Expected a non-null GETQUOTAROOT response.\");\n\t\t\t\tAssert.That (quota.QuotaRoot.Exists, Is.False);\n\t\t\t\tAssert.That (quota.QuotaRoot.FullName, Is.EqualTo (\"storage=0\"));\n\t\t\t\tAssert.That (quota.CurrentStorageSize.Value, Is.EqualTo (28257));\n\t\t\t\tAssert.That (quota.StorageLimit.Value, Is.EqualTo (256000));\n\t\t\t\tAssert.That (quota.CurrentMessageCount.HasValue, Is.False);\n\t\t\t\tAssert.That (quota.MessageLimit.HasValue, Is.False);\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic MimeMessage CreateThreadableMessage (string subject, string msgid, string references, DateTimeOffset date)\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Unit Tests\", \"unit-tests@mimekit.net\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Unit Tests\", \"unit-tests@mimekit.net\"));\n\t\t\tmessage.MessageId = msgid;\n\t\t\tmessage.Subject = subject;\n\t\t\tmessage.Date = date;\n\n\t\t\tif (references != null) {\n\t\t\t\tforeach (var reference in references.Split (' '))\n\t\t\t\t\tmessage.References.Add (reference);\n\t\t\t}\n\n\t\t\tmessage.Body = new TextPart (\"plain\") { Text = \"This is the message body.\\r\\n\" };\n\n\t\t\treturn message;\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateDovecotCommands (out List<DateTimeOffset> internalDates, out List<MimeMessage> messages, out List<MessageFlags> flags)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 ENABLE QRESYNC CONDSTORE\\r\\n\", \"dovecot.enable-qresync.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\" RETURN (SUBSCRIBED CHILDREN STATUS (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ))\\r\\n\", \"dovecot.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 CREATE UnitTests.\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LIST \\\"\\\" UnitTests\\r\\n\", \"dovecot.list-unittests.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 CREATE UnitTests.Messages\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 LIST \\\"\\\" UnitTests.Messages\\r\\n\", \"dovecot.list-unittests-messages.txt\")\n\t\t\t};\n\n\t\t\tvar command = new StringBuilder (\"A00000010 APPEND UnitTests.Messages\");\n\t\t\tvar now = DateTimeOffset.Now;\n\n\t\t\tinternalDates = new List<DateTimeOffset> ();\n\t\t\tmessages = new List<MimeMessage> ();\n\t\t\tflags = new List<MessageFlags> ();\n\n\t\t\tmessages.Add (CreateThreadableMessage (\"A\", \"<a@mimekit.net>\", null, now.AddMinutes (-7)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"B\", \"<b@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-6)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"C\", \"<c@mimekit.net>\", \"<a@mimekit.net> <b@mimekit.net>\", now.AddMinutes (-5)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"D\", \"<d@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-4)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"E\", \"<e@mimekit.net>\", \"<c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\", now.AddMinutes (-3)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"F\", \"<f@mimekit.net>\", \"<b@mimekit.net>\", now.AddMinutes (-2)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"G\", \"<g@mimekit.net>\", null, now.AddMinutes (-1)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"H\", \"<h@mimekit.net>\", null, now));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tvar message = messages[i];\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tinternalDates.Add (messages[i].Date);\n\t\t\t\tflags.Add (MessageFlags.Draft);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, TextEncodings.Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tcommand.AppendFormat (\" (\\\\Draft) \\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\t\t\t\tcommand.Append ('{');\n\t\t\t\tcommand.AppendFormat (\"{0}+\", length);\n\t\t\t\tcommand.Append (\"}\\r\\n\");\n\t\t\t\tcommand.Append (latin1);\n\t\t\t}\n\t\t\tcommand.Append (\"\\r\\n\");\n\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), \"dovecot.multiappend.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000011 SELECT UnitTests.Messages (CONDSTORE)\\r\\n\", \"dovecot.select-unittests-messages.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000012 UID STORE 1:8 +FLAGS.SILENT (\\\\Seen)\\r\\n\", \"dovecot.store-seen.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000013 UID STORE 1:3 +FLAGS.SILENT (\\\\Answered)\\r\\n\", \"dovecot.store-answered.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000014 UID STORE 8 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", \"dovecot.store-deleted.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000015 UID EXPUNGE 8\\r\\n\", \"dovecot.uid-expunge.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000016 UID THREAD REFERENCES US-ASCII ALL\\r\\n\", \"dovecot.thread-references.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000017 UID THREAD ORDEREDSUBJECT US-ASCII UID 1:* ALL\\r\\n\", \"dovecot.thread-orderedsubject.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000018 UNSELECT\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000019 SELECT UnitTests.Messages (QRESYNC (1436832084 2 1:8))\\r\\n\", \"dovecot.select-unittests-messages-qresync.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000020 UID SEARCH RETURN (ALL RELEVANCY COUNT MIN MAX) MODSEQ 2\\r\\n\", \"dovecot.search-changed-since.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000021 UID FETCH 1:7 (UID FLAGS MODSEQ)\\r\\n\", \"dovecot.fetch1.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000022 UID FETCH 1:* (UID FLAGS MODSEQ) (CHANGEDSINCE 2 VANISHED)\\r\\n\", \"dovecot.fetch2.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000023 UID SORT RETURN (ALL RELEVANCY COUNT MIN MAX) (REVERSE ARRIVAL) US-ASCII ALL\\r\\n\", \"dovecot.sort-reverse-arrival.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000024 UID SEARCH RETURN (ALL) UNDELETED SEEN\\r\\n\", \"dovecot.optimized-search.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000025 CREATE UnitTests.Destination\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000026 LIST \\\"\\\" UnitTests.Destination\\r\\n\", \"dovecot.list-unittests-destination.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000027 UID COPY 1:7 UnitTests.Destination\\r\\n\", \"dovecot.copy.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000028 UID MOVE 1:7 UnitTests.Destination\\r\\n\", \"dovecot.move.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000029 STATUS UnitTests.Destination (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"dovecot.status-unittests-destination.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000030 SELECT UnitTests.Destination (CONDSTORE)\\r\\n\", \"dovecot.select-unittests-destination.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000031 UID FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES X-MAILER)]) (CHANGEDSINCE 1 VANISHED)\\r\\n\", \"dovecot.fetch3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000032 FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES X-MAILER)]) (CHANGEDSINCE 1)\\r\\n\", \"dovecot.fetch3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000033 FETCH 1:14 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES X-MAILER)]) (CHANGEDSINCE 1)\\r\\n\", \"dovecot.fetch3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000034 FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES)]) (CHANGEDSINCE 1)\\r\\n\", \"dovecot.fetch4.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000035 FETCH 1:14 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES)]) (CHANGEDSINCE 1)\\r\\n\", \"dovecot.fetch4.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000036 UID FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES X-MAILER)])\\r\\n\", \"dovecot.fetch3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000037 FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES X-MAILER)])\\r\\n\", \"dovecot.fetch3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000038 FETCH 1:14 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES X-MAILER)])\\r\\n\", \"dovecot.fetch3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000039 FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES)])\\r\\n\", \"dovecot.fetch4.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000040 FETCH 1:14 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES)])\\r\\n\", \"dovecot.fetch4.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000041 UID FETCH 1 (BODY.PEEK[])\\r\\n\", \"dovecot.getbodypart.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000042 FETCH 1 (BODY.PEEK[])\\r\\n\", \"dovecot.getbodypart.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000043 UID FETCH 2 (BODY.PEEK[1.MIME] BODY.PEEK[1])\\r\\n\", \"dovecot.getbodypart1.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000044 FETCH 2 (BODY.PEEK[1.MIME] BODY.PEEK[1])\\r\\n\", \"dovecot.getbodypart1.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000045 UID FETCH 1 (BODY.PEEK[HEADER])\\r\\n\", \"dovecot.getmessageheaders.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000046 FETCH 1 (BODY.PEEK[HEADER])\\r\\n\", \"dovecot.getmessageheaders.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000047 UID FETCH 1 (BODY.PEEK[HEADER])\\r\\n\", \"dovecot.getmessageheaders.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000048 FETCH 1 (BODY.PEEK[HEADER])\\r\\n\", \"dovecot.getmessageheaders.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000049 UID FETCH 2 (BODY.PEEK[1.MIME])\\r\\n\", \"dovecot.getbodypartheaders.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000050 FETCH 2 (BODY.PEEK[1.MIME])\\r\\n\", \"dovecot.getbodypartheaders.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000051 UID FETCH 1 (BODY.PEEK[]<128.64>)\\r\\n\", \"dovecot.getstream.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000052 UID FETCH 1 (BODY.PEEK[]<128.64>)\\r\\n\", \"dovecot.getstream2.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000053 FETCH 1 (BODY.PEEK[]<128.64>)\\r\\n\", \"dovecot.getstream.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000054 FETCH 1 (BODY.PEEK[]<128.64>)\\r\\n\", \"dovecot.getstream2.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000055 UID FETCH 1 (BODY.PEEK[HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)])\\r\\n\", \"dovecot.getstream-section.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000056 FETCH 1 (BODY.PEEK[HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)])\\r\\n\", \"dovecot.getstream-section2.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000057 UID STORE 1:14 (UNCHANGEDSINCE 3) +FLAGS.SILENT (\\\\Deleted $MailKit)\\r\\n\", \"dovecot.store-deleted-custom.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000058 STORE 1:7 (UNCHANGEDSINCE 5) FLAGS.SILENT (\\\\Deleted \\\\Seen $MailKit)\\r\\n\", \"dovecot.setflags-unchangedsince.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000059 UID SEARCH RETURN (ALL) UID 1:14 OR NEW OR OLD OR ANSWERED OR DELETED OR DRAFT OR FLAGGED OR RECENT OR UNANSWERED OR UNDELETED OR UNDRAFT OR UNFLAGGED OR UNSEEN OR KEYWORD $MailKit UNKEYWORD $MailKit\\r\\n\", \"dovecot.search-uids.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000060 UID SEARCH RETURN (ALL RELEVANCY COUNT MIN MAX) UID 1:14 LARGER 256 SMALLER 512\\r\\n\", \"dovecot.search-uids-options.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000061 UID SORT RETURN (ALL) (REVERSE DATE SUBJECT DISPLAYFROM SIZE) US-ASCII OR OR (SENTBEFORE 12-Oct-2016 SENTSINCE 10-Oct-2016) NOT SENTON 11-Oct-2016 OR (BEFORE 12-Oct-2016 SINCE 10-Oct-2016) NOT ON 11-Oct-2016\\r\\n\", \"dovecot.sort-by-date.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000062 UID SORT RETURN (ALL) (FROM TO CC) US-ASCII UID 1:14 OR BCC xyz OR CC xyz OR FROM xyz OR TO xyz OR SUBJECT xyz OR HEADER Message-Id mimekit.net OR BODY \\\"This is the message body.\\\" TEXT message\\r\\n\", \"dovecot.sort-by-strings.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000063 UID SORT RETURN (ALL RELEVANCY COUNT MIN MAX) (DISPLAYTO) US-ASCII UID 1:14 OLDER 1 YOUNGER 3600\\r\\n\", \"dovecot.sort-uids-options.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000064 UID SEARCH ALL\\r\\n\", \"dovecot.search-raw.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000065 UID SORT (REVERSE ARRIVAL) US-ASCII ALL\\r\\n\", \"dovecot.sort-raw.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000066 UID FETCH 1:* (BODY.PEEK[])\\r\\n\", \"dovecot.getstreams1.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000067 FETCH 1:3 (UID BODY.PEEK[])\\r\\n\", \"dovecot.getstreams1.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000068 FETCH 1:* (UID BODY.PEEK[])\\r\\n\", \"dovecot.getstreams2.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000069 EXPUNGE\\r\\n\", \"dovecot.expunge.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000070 CLOSE\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000071 NOOP\\r\\n\", \"dovecot.noop+alert.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000072 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDovecot ()\n\t\t{\n\t\t\tvar expectedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar expectedPermanentFlags = expectedFlags | MessageFlags.UserDefined;\n\t\t\tvar commands = CreateDovecotCommands (out var internalDates, out var messages, out var flags);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"DIGEST-MD5\"), \"Expected SASL DIGEST-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"CRAM-MD5\"), \"Expected SASL CRAM-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.InternationalizationLevel, Is.EqualTo (1), \"Expected I18NLEVEL=1\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Expected THREAD=ORDEREDSUBJECT\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Expected THREAD=REFERENCES\");\n\t\t\t\t// TODO: verify CONTEXT=SEARCH\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.AccessRights), Is.False);\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.Annotations), Is.False);\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.Metadata), Is.False);\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.ModSequences), Is.False); // not supported until opened\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.QuickResync), Is.False); // not supported until it is enabled\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.Quotas), Is.False);\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.Sorting), Is.True);\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.Threading), Is.True);\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.UTF8), Is.False);\n\n\t\t\t\t// Make sure these all throw NotSupportedException\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.EnableUTF8 ());\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.GetAccessRights (\"smith\"));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.GetMyAccessRights ());\n\t\t\t\tvar rights = new AccessRights (\"lrswida\");\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddAccessRights (\"smith\", rights));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveAccessRights (\"smith\", rights));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetAccessRights (\"smith\", rights));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveAccess (\"smith\"));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.GetQuota ());\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetQuota (null, null));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetMetadata (MetadataTag.PrivateComment));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetMetadata (new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.SetMetadata (new MetadataCollection ()));\n\t\t\t\tvar labels = new string[] { \"Label1\", \"Label2\" };\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddLabels (UniqueId.MinValue, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddLabels (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddLabels (UniqueIdRange.All, 1, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddLabels (0, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddLabels (new int[] { 0 }, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.AddLabels (new int[] { 0 }, 1, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveLabels (UniqueId.MinValue, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveLabels (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveLabels (UniqueIdRange.All, 1, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveLabels (0, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveLabels (new int[] { 0 }, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.RemoveLabels (new int[] { 0 }, 1, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetLabels (UniqueId.MinValue, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetLabels (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetLabels (UniqueIdRange.All, 1, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetLabels (0, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetLabels (new int[] { 0 }, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Inbox.SetLabels (new int[] { 0 }, 1, labels, true));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.EnableQuickResync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception when enabling QRESYNC: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.Supports (FolderFeature.QuickResync), Is.True);\n\n\t\t\t\t// take advantage of LIST-STATUS to get top-level personal folders...\n\t\t\t\tvar statusItems = StatusItems.Count | StatusItems.HighestModSeq | StatusItems.Recent | StatusItems.UidNext | StatusItems.UidValidity | StatusItems.Unread;\n\n\t\t\t\tvar folders = personal.GetSubfolders (statusItems, false).ToArray ();\n\t\t\t\tAssert.That (folders, Has.Length.EqualTo (7), \"Expected 7 folders\");\n\n\t\t\t\tvar expectedFolderNames = new [] { \"Archives\", \"Drafts\", \"Junk\", \"Sent Messages\", \"Trash\", \"INBOX\", \"NIL\" };\n\t\t\t\tvar expectedUidValidities = new [] { 1436832059, 1436832060, 1436832061, 1436832062, 1436832063, 1436832057, 1436832057 };\n\t\t\t\tvar expectedHighestModSeq = new [] { 1, 1, 1, 1, 1, 15, 1 };\n\t\t\t\tvar expectedMessages = new [] { 0, 0, 0, 0, 0, 4, 0 };\n\t\t\t\tvar expectedUidNext = new [] { 1, 1, 1, 1, 1, 5, 1 };\n\t\t\t\tvar expectedRecent = new [] { 0, 0, 0, 0, 0, 0, 0 };\n\t\t\t\tvar expectedUnseen = new [] { 0, 0, 0, 0, 0, 0, 0 };\n\n\t\t\t\tfor (int i = 0; i < folders.Length; i++) {\n\t\t\t\t\tAssert.That (folders[i].FullName, Is.EqualTo (expectedFolderNames[i]), \"FullName did not match\");\n\t\t\t\t\tAssert.That (folders[i].Name, Is.EqualTo (expectedFolderNames[i]), \"Name did not match\");\n\t\t\t\t\tAssert.That (folders[i].UidValidity, Is.EqualTo (expectedUidValidities[i]), \"UidValidity did not match\");\n\t\t\t\t\tAssert.That (folders[i].HighestModSeq, Is.EqualTo (expectedHighestModSeq[i]), \"HighestModSeq did not match\");\n\t\t\t\t\tAssert.That (folders[i], Has.Count.EqualTo (expectedMessages[i]), \"Count did not match\");\n\t\t\t\t\tAssert.That (folders[i].Recent, Is.EqualTo (expectedRecent[i]), \"Recent did not match\");\n\t\t\t\t\tAssert.That (folders[i].Unread, Is.EqualTo (expectedUnseen[i]), \"Unread did not match\");\n\t\t\t\t}\n\n\t\t\t\tvar unitTests = personal.Create (\"UnitTests\", false);\n\t\t\t\tAssert.That (unitTests.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"Unexpected UnitTests folder attributes\");\n\n\t\t\t\tvar folder = unitTests.Create (\"Messages\", true);\n\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"Unexpected UnitTests.Messages folder attributes\");\n\t\t\t\t//Assert.That (unitTests.Attributes, Is.EqualTo (FolderAttributes.HasChildren), \"Expected UnitTests Attributes to be updated\");\n\n\t\t\t\t// Use MULTIAPPEND to append some test messages\n\t\t\t\tvar appended = folder.Append (messages, flags, internalDates);\n\t\t\t\tAssert.That (appended, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\n\t\t\t\t// SELECT the folder so that we can test some stuff\n\t\t\t\tvar access = folder.Open (FolderAccess.ReadWrite);\n\t\t\t\tAssert.That (folder.Supports (FolderFeature.ModSequences), Is.True);\n\t\t\t\tAssert.That (folder.PermanentFlags, Is.EqualTo (expectedPermanentFlags), \"UnitTests.Messages PERMANENTFLAGS\");\n\t\t\t\tAssert.That (folder.AcceptedFlags, Is.EqualTo (expectedFlags), \"UnitTests.Messages FLAGS\");\n\t\t\t\tAssert.That (folder, Has.Count.EqualTo (8), \"UnitTests.Messages EXISTS\");\n\t\t\t\tAssert.That (folder.Recent, Is.EqualTo (8), \"UnitTests.Messages RECENT\");\n\t\t\t\tAssert.That (folder.FirstUnread, Is.EqualTo (0), \"UnitTests.Messages UNSEEN\");\n\t\t\t\tAssert.That (folder.UidValidity, Is.EqualTo (1436832084U), \"UnitTests.Messages UIDVALIDITY\");\n\t\t\t\tAssert.That (folder.UidNext.Value.Id, Is.EqualTo (9), \"UnitTests.Messages UIDNEXT\");\n\t\t\t\tAssert.That (folder.HighestModSeq, Is.EqualTo (2UL), \"UnitTests.Messages HIGHESTMODSEQ\");\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"Expected UnitTests.Messages to be opened in READ-WRITE mode\");\n\n\t\t\t\t// Keep track of various folder events\n\t\t\t\tvar flagsChanged = new List<MessageFlagsChangedEventArgs> ();\n\t\t\t\tvar modSeqChanged = new List<ModSeqChangedEventArgs> ();\n\t\t\t\tvar vanished = new List<MessagesVanishedEventArgs> ();\n\t\t\t\tbool recentChanged = false;\n\n\t\t\t\tfolder.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tflagsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tfolder.ModSeqChanged += (sender, e) => {\n\t\t\t\t\tmodSeqChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tfolder.MessagesVanished += (sender, e) => {\n\t\t\t\t\tvanished.Add (e);\n\t\t\t\t};\n\n\t\t\t\tfolder.RecentChanged += (sender, e) => {\n\t\t\t\t\trecentChanged = true;\n\t\t\t\t};\n\n\t\t\t\t// Keep track of UIDVALIDITY and HIGHESTMODSEQ values for our QRESYNC test later\n\t\t\t\tvar highestModSeq = folder.HighestModSeq;\n\t\t\t\tvar uidValidity = folder.UidValidity;\n\n\t\t\t\t// Make some FLAGS changes to our messages so we can test QRESYNC\n\t\t\t\tfolder.AddFlags (appended, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (flagsChanged, Is.Empty, \"Unexpected number of FlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (8), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].UniqueId.Value.Id, Is.EqualTo (i + 1), $\"Unexpected modSeqChanged[{i}].UniqueId\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (3), $\"Unexpected modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (recentChanged, Is.False, \"Unexpected RecentChanged event\");\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\tvar answered = new UniqueIdSet (SortOrder.Ascending) {\n\t\t\t\t\tappended[0], // A\n\t\t\t\t\tappended[1], // B\n\t\t\t\t\tappended[2] // C\n\t\t\t\t};\n\t\t\t\tfolder.AddFlags (answered, MessageFlags.Answered, true);\n\t\t\t\tAssert.That (flagsChanged, Is.Empty, \"Unexpected number of FlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (3), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].UniqueId.Value.Id, Is.EqualTo (i + 1), $\"Unexpected modSeqChanged[{i}].UniqueId\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (4), $\"Unexpected modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (recentChanged, Is.False, \"Unexpected RecentChanged event\");\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\t// Delete some messages so we can test that QRESYNC emits some MessageVanished events\n\t\t\t\t// both now *and* when we use QRESYNC to re-open the folder\n\t\t\t\tvar deleted = new UniqueIdSet (SortOrder.Ascending) {\n\t\t\t\t\tappended[7] // H\n\t\t\t\t};\n\t\t\t\tfolder.AddFlags (deleted, MessageFlags.Deleted, true);\n\t\t\t\tAssert.That (flagsChanged, Is.Empty, \"Unexpected number of FlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (1), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tAssert.That (modSeqChanged[0].Index, Is.EqualTo (7), $\"Unexpected modSeqChanged[{0}].Index\");\n\t\t\t\tAssert.That (modSeqChanged[0].UniqueId.Value.Id, Is.EqualTo (8), $\"Unexpected modSeqChanged[{0}].UniqueId\");\n\t\t\t\tAssert.That (modSeqChanged[0].ModSeq, Is.EqualTo (5), $\"Unexpected modSeqChanged[{0}].ModSeq\");\n\t\t\t\tAssert.That (recentChanged, Is.False, \"Unexpected RecentChanged event\");\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\tfolder.Expunge (deleted);\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Expected MessagesVanished event\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (1), \"Unexpected number of messages vanished\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds[0].Id, Is.EqualTo (8), \"Unexpected UID for vanished message\");\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.False, \"Expected EARLIER to be false\");\n\t\t\t\tAssert.That (recentChanged, Is.True, \"Expected RecentChanged event\");\n\t\t\t\trecentChanged = false;\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tAssert.That (folder.Supports (FolderFeature.Threading), Is.True, \"Supports threading\");\n\t\t\t\tAssert.That (folder.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Supports threading by References\");\n\t\t\t\tAssert.That (folder.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Supports threading by OrderedSubject\");\n\n\t\t\t\t// Verify that THREAD works correctly\n\t\t\t\tvar threaded = folder.Thread (ThreadingAlgorithm.References, SearchQuery.All);\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (2), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\tthreaded = folder.Thread (UniqueIdRange.All, ThreadingAlgorithm.OrderedSubject, SearchQuery.All);\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (7), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\t// UNSELECT the folder so we can re-open it using QRESYNC\n\t\t\t\tfolder.Close ();\n\n\t\t\t\t// Use QRESYNC to get the changes since last time we opened the folder\n\t\t\t\tAssert.That (folder.Supports (FolderFeature.QuickResync), Is.True, \"Supports QRESYNC\");\n\t\t\t\taccess = folder.Open (FolderAccess.ReadWrite, uidValidity, highestModSeq, appended);\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"Expected UnitTests.Messages to be opened in READ-WRITE mode\");\n\t\t\t\tAssert.That (flagsChanged, Has.Count.EqualTo (7), \"Unexpected number of MessageFlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (7), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tfor (int i = 0; i < flagsChanged.Count; i++) {\n\t\t\t\t\tvar messageFlags = MessageFlags.Seen | MessageFlags.Draft;\n\n\t\t\t\t\tif (i < 3)\n\t\t\t\t\t\tmessageFlags |= MessageFlags.Answered;\n\n\t\t\t\t\tAssert.That (flagsChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for flagsChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (flagsChanged[i].UniqueId.Value.Id, Is.EqualTo ((uint) (i + 1)), $\"Unexpected value for flagsChanged[{i}].UniqueId\");\n\t\t\t\t\tAssert.That (flagsChanged[i].Flags, Is.EqualTo (messageFlags), $\"Unexpected value for flagsChanged[{i}].Flags\");\n\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for modSeqChanged[{i}].Index\");\n\t\t\t\t\tif (i < 3)\n\t\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (4), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t\telse\n\t\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (3), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Unexpected number of MessagesVanished events\");\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.True, \"Expected VANISHED EARLIER\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (1), \"Unexpected number of messages vanished\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds[0].Id, Is.EqualTo (8), \"Unexpected UID for vanished message\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.GMailMessageId (1)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.GMailThreadId (1)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.HasGMailLabel (\"Custom Label\")));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.GMailRawSearch (\"has:attachment in:unread\")));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.Fuzzy (SearchQuery.SubjectContains (\"some fuzzy text\"))));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.Filter (new MetadataTag (\"/private/filters/values/saved-search\"))));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.Filter (\"saved-search\")));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SaveDateSupported));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SavedBefore (DateTime.Now)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SavedOn (DateTime.Now)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SavedSince (DateTime.Now)));\n\n\t\t\t\t// Use SEARCH and FETCH to get the same info\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Count | SearchOptions.Min | SearchOptions.Max | SearchOptions.Relevancy;\n\t\t\t\tvar changed = folder.Search (searchOptions, SearchQuery.ChangedSince (highestModSeq));\n\t\t\t\tAssert.That (changed.UniqueIds, Has.Count.EqualTo (7), \"Unexpected number of UIDs\");\n\t\t\t\tAssert.That (changed.Relevancy, Has.Count.EqualTo (changed.Count), \"Unexpected number of relevancy scores\");\n\t\t\t\tAssert.That (changed.ModSeq.HasValue, Is.True, \"Expected the ModSeq property to be set\");\n\t\t\t\tAssert.That (changed.ModSeq.Value, Is.EqualTo (4), \"Unexpected ModSeq value\");\n\t\t\t\tAssert.That (changed.Min.Value.Id, Is.EqualTo (1), \"Unexpected Min\");\n\t\t\t\tAssert.That (changed.Max.Value.Id, Is.EqualTo (7), \"Unexpected Max\");\n\t\t\t\tAssert.That (changed.Count, Is.EqualTo (7), \"Unexpected Count\");\n\n\t\t\t\tvar fetched = folder.Fetch (changed.UniqueIds, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (7), \"Unexpected number of messages fetched\");\n\t\t\t\tfor (int i = 0; i < fetched.Count; i++) {\n\t\t\t\t\tAssert.That (fetched[i].Index, Is.EqualTo (i), \"Unexpected Index\");\n\t\t\t\t\tAssert.That (fetched[i].UniqueId.Id, Is.EqualTo (i + 1), \"Unexpected UniqueId\");\n\t\t\t\t}\n\n\t\t\t\t// or... we could just use a single UID FETCH command like so:\n\t\t\t\tfetched = folder.Fetch (UniqueIdRange.All, highestModSeq, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\tfor (int i = 0; i < fetched.Count; i++) {\n\t\t\t\t\tAssert.That (fetched[i].Index, Is.EqualTo (i), \"Unexpected Index\");\n\t\t\t\t\tAssert.That (fetched[i].UniqueId.Id, Is.EqualTo (i + 1), \"Unexpected UniqueId\");\n\t\t\t\t}\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (7), \"Unexpected number of messages fetched\");\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Unexpected number of MessagesVanished events\");\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.True, \"Expected VANISHED EARLIER\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (1), \"Unexpected number of messages vanished\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds[0].Id, Is.EqualTo (8), \"Unexpected UID for vanished message\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\t// Use SORT to order by reverse arrival order\n\t\t\t\tvar orderBy = new OrderBy[] { new OrderBy (OrderByType.Arrival, SortOrder.Descending) };\n\t\t\t\tvar sorted = folder.Sort (searchOptions, SearchQuery.All, orderBy);\n\t\t\t\tAssert.That (sorted.UniqueIds, Has.Count.EqualTo (7), \"Unexpected number of UIDs\");\n\t\t\t\tAssert.That (sorted.Relevancy, Has.Count.EqualTo (sorted.Count), \"Unexpected number of relevancy scores\");\n\t\t\t\tfor (int i = 0; i < sorted.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (sorted.UniqueIds[i].Id, Is.EqualTo (7 - i), $\"Unexpected value for UniqueId[{i}]\");\n\t\t\t\tAssert.That (sorted.ModSeq.HasValue, Is.False, \"Expected the ModSeq property to be null\");\n\t\t\t\tAssert.That (sorted.Min.Value.Id, Is.EqualTo (7), \"Unexpected Min\");\n\t\t\t\tAssert.That (sorted.Max.Value.Id, Is.EqualTo (1), \"Unexpected Max\");\n\t\t\t\tAssert.That (sorted.Count, Is.EqualTo (7), \"Unexpected Count\");\n\n\t\t\t\t// Verify that optimizing NOT queries works correctly\n\t\t\t\tvar uids = folder.Search (SearchQuery.Not (SearchQuery.Deleted).And (SearchQuery.Not (SearchQuery.NotSeen)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (7), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\t// Create a Destination folder to use for copying/moving messages to\n\t\t\t\tvar destination = (ImapFolder) unitTests.Create (\"Destination\", true);\n\t\t\t\tAssert.That (destination.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"Unexpected UnitTests.Destination folder attributes\");\n\n\t\t\t\t// COPY messages to the Destination folder\n\t\t\t\tvar copied = folder.CopyTo (uids, destination);\n\t\t\t\tAssert.That (copied.Source, Has.Count.EqualTo (uids.Count), \"Unexpected Source.Count\");\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (uids.Count), \"Unexpected Destination.Count\");\n\n\t\t\t\t// MOVE messages to the Destination folder\n\t\t\t\tvar moved = folder.MoveTo (uids, destination);\n\t\t\t\tAssert.That (copied.Source, Has.Count.EqualTo (uids.Count), \"Unexpected Source.Count\");\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (uids.Count), \"Unexpected Destination.Count\");\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Expected VANISHED event\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tdestination.Status (statusItems);\n\t\t\t\tAssert.That (destination.UidValidity, Is.EqualTo (moved.Destination[0].Validity), \"Unexpected UIDVALIDITY\");\n\n\t\t\t\tdestination.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tflagsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tdestination.ModSeqChanged += (sender, e) => {\n\t\t\t\t\tmodSeqChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tdestination.MessagesVanished += (sender, e) => {\n\t\t\t\t\tvanished.Add (e);\n\t\t\t\t};\n\n\t\t\t\tdestination.RecentChanged += (sender, e) => {\n\t\t\t\t\trecentChanged = true;\n\t\t\t\t};\n\n\t\t\t\tdestination.Open (FolderAccess.ReadWrite);\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"Expected UnitTests.Destination to be opened in READ-WRITE mode\");\n\n\t\t\t\tvar fetchHeaders = new HashSet<HeaderId> {\n\t\t\t\t\tHeaderId.References,\n\t\t\t\t\tHeaderId.XMailer\n\t\t\t\t};\n\n\t\t\t\tvar indexes = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };\n\n\t\t\t\t// Fetch + modseq\n\t\t\t\tfetched = destination.Fetch (UniqueIdRange.All, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (0, -1, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (indexes, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (0, -1, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (indexes, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\t// Fetch\n\t\t\t\tfetched = destination.Fetch (UniqueIdRange.All, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (indexes, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = destination.Fetch (indexes, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                             MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                             MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tuids = new UniqueIdSet (SortOrder.Ascending);\n\n\t\t\t\tfor (int i = 0; i < fetched.Count; i++) {\n\t\t\t\t\tAssert.That (fetched[i].Index, Is.EqualTo (i), \"Unexpected Index\");\n\t\t\t\t\tAssert.That (fetched[i].UniqueId.Id, Is.EqualTo (i + 1), \"Unexpected UniqueId\");\n\n\t\t\t\t\tuids.Add (fetched[i].UniqueId);\n\t\t\t\t}\n\n\t\t\t\tusing (var entity = destination.GetBodyPart (fetched[0].UniqueId, fetched[0].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tusing (var entity = destination.GetBodyPart (fetched[0].Index, fetched[0].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tusing (var entity = destination.GetBodyPart (fetched[1].UniqueId, fetched[1].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tusing (var entity = destination.GetBodyPart (fetched[1].Index, fetched[1].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tvar headers =  destination.GetHeaders (fetched[0].UniqueId);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = destination.GetHeaders (fetched[0].Index);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(int) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = destination.GetHeaders (fetched[0].UniqueId, fetched[0].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId, BodyPart) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = destination.GetHeaders (fetched[0].Index, fetched[0].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(int, BodyPart) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = destination.GetHeaders (fetched[1].UniqueId, fetched[1].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = destination.GetHeaders (fetched[1].Index, fetched[1].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\tusing (var stream = destination.GetStream (fetched[0].UniqueId, 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = destination.GetStream (fetched[0].UniqueId, \"\", 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = destination.GetStream (fetched[0].Index, 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = destination.GetStream (fetched[0].Index, \"\", 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = destination.GetStream (fetched[0].UniqueId, \"HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)\")) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (62), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"MIME-Version: 1.0\\r\\nContent-Type: text/plain; charset=utf-8\\r\\n\\r\\n\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = destination.GetStream (fetched[0].Index, \"HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)\")) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (62), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"MIME-Version: 1.0\\r\\nContent-Type: text/plain; charset=utf-8\\r\\n\\r\\n\"));\n\t\t\t\t}\n\n\t\t\t\tvar custom = new HashSet<string> { \"$MailKit\" };\n\n\t\t\t\tvar unchanged1 = destination.AddFlags (uids, destination.HighestModSeq, MessageFlags.Deleted, custom, true);\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (14), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tAssert.That (destination.HighestModSeq, Is.EqualTo (5));\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (5), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (unchanged1, Has.Count.EqualTo (2), \"[MODIFIED uid-set]\");\n\t\t\t\tAssert.That (unchanged1[0].Id, Is.EqualTo (7), \"unchanged uids[0]\");\n\t\t\t\tAssert.That (unchanged1[1].Id, Is.EqualTo (9), \"unchanged uids[1]\");\n\t\t\t\tmodSeqChanged.Clear ();\n\n\t\t\t\tvar unchanged2 = destination.SetFlags (new int[] { 0, 1, 2, 3, 4, 5, 6 }, destination.HighestModSeq, MessageFlags.Seen | MessageFlags.Deleted, custom, true);\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (7), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tAssert.That (destination.HighestModSeq, Is.EqualTo (6));\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (6), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (unchanged2, Has.Count.EqualTo (2), \"[MODIFIED seq-set]\");\n\t\t\t\tAssert.That (unchanged2[0], Is.EqualTo (6), \"unchanged indexes[0]\");\n\t\t\t\tAssert.That (unchanged2[1], Is.EqualTo (8), \"unchanged indexes[1]\");\n\t\t\t\tmodSeqChanged.Clear ();\n\n\t\t\t\tvar results = destination.Search (uids, SearchQuery.New.Or (SearchQuery.Old.Or (SearchQuery.Answered.Or (SearchQuery.Deleted.Or (SearchQuery.Draft.Or (SearchQuery.Flagged.Or (SearchQuery.Recent.Or (SearchQuery.NotAnswered.Or (SearchQuery.NotDeleted.Or (SearchQuery.NotDraft.Or (SearchQuery.NotFlagged.Or (SearchQuery.NotSeen.Or (SearchQuery.HasKeyword (\"$MailKit\").Or (SearchQuery.NotKeyword (\"$MailKit\")))))))))))))));\n\t\t\t\tAssert.That (results, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\tvar matches = destination.Search (searchOptions, uids, SearchQuery.LargerThan (256).And (SearchQuery.SmallerThan (512)));\n\t\t\t\tvar expectedMatchedUids = new uint[] { 2, 3, 4, 5, 6, 9, 10, 11, 12, 13 };\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (10), \"Unexpected COUNT\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (13), \"Unexpected MAX\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (2), \"Unexpected MIN\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (10), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (expectedMatchedUids[i]));\n\t\t\t\tAssert.That (matches.Relevancy, Has.Count.EqualTo (matches.Count), \"Unexpected number of relevancy scores\");\n\n\t\t\t\torderBy = new OrderBy[] { OrderBy.ReverseDate, OrderBy.Subject, OrderBy.DisplayFrom, OrderBy.Size };\n\t\t\t\tvar sentDateQuery = SearchQuery.Or (SearchQuery.And (SearchQuery.SentBefore (new DateTime (2016, 10, 12)), SearchQuery.SentSince (new DateTime (2016, 10, 10))), SearchQuery.Not (SearchQuery.SentOn (new DateTime (2016, 10, 11))));\n\t\t\t\tvar deliveredDateQuery = SearchQuery.Or (SearchQuery.And (SearchQuery.DeliveredBefore (new DateTime (2016, 10, 12)), SearchQuery.DeliveredAfter (new DateTime (2016, 10, 10))), SearchQuery.Not (SearchQuery.DeliveredOn (new DateTime (2016, 10, 11))));\n\t\t\t\tresults = destination.Sort (sentDateQuery.Or (deliveredDateQuery), orderBy);\n\t\t\t\tvar expectedSortByDateResults = new uint[] { 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8 };\n\t\t\t\tAssert.That (results, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < results.Count; i++)\n\t\t\t\t\tAssert.That (results[i].Id, Is.EqualTo (expectedSortByDateResults[i]));\n\n\t\t\t\tvar stringQuery = SearchQuery.BccContains (\"xyz\").Or (SearchQuery.CcContains (\"xyz\").Or (SearchQuery.FromContains (\"xyz\").Or (SearchQuery.ToContains (\"xyz\").Or (SearchQuery.SubjectContains (\"xyz\").Or (SearchQuery.HeaderContains (\"Message-Id\", \"mimekit.net\").Or (SearchQuery.BodyContains (\"This is the message body.\").Or (SearchQuery.MessageContains (\"message\"))))))));\n\t\t\t\torderBy = new OrderBy[] { OrderBy.From, OrderBy.To, OrderBy.Cc };\n\t\t\t\tresults = destination.Sort (uids, stringQuery, orderBy);\n\t\t\t\tAssert.That (results, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < results.Count; i++)\n\t\t\t\t\tAssert.That (results[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\torderBy = new OrderBy[] { OrderBy.DisplayTo };\n\t\t\t\tmatches = destination.Sort (searchOptions, uids, SearchQuery.OlderThan (1).And (SearchQuery.YoungerThan (3600)), orderBy);\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"Unexpected COUNT\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (i + 1));\n\t\t\t\tAssert.That (matches.Relevancy, Has.Count.EqualTo (matches.Count), \"Unexpected number of relevancy scores\");\n\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ESearch;\n\t\t\t\tmatches = ((ImapFolder) destination).Search (\"ALL\");\n\t\t\t\tAssert.That (matches.Max.HasValue, Is.True, \"MAX should always be set\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX value\");\n\t\t\t\tAssert.That (matches.Min.HasValue, Is.True, \"MIN should always be set\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN value\");\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"COUNT should always be set\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ESort;\n\t\t\t\tmatches = ((ImapFolder) destination).Sort (\"(REVERSE ARRIVAL) US-ASCII ALL\");\n\t\t\t\tAssert.That (matches.Max.HasValue, Is.True, \"MAX should always be set\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX value\");\n\t\t\t\tAssert.That (matches.Min.HasValue, Is.True, \"MIN should always be set\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN value\");\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"COUNT should always be set\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14));\n\t\t\t\tvar expectedSortByReverseArrivalResults = new uint[] { 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8 };\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (expectedSortByReverseArrivalResults[i]));\n\n\t\t\t\tdestination.GetStreams (UniqueIdRange.All, GetStreamsCallback);\n\t\t\t\tdestination.GetStreams (new int[] { 0, 1, 2 }, GetStreamsCallback);\n\t\t\t\tdestination.GetStreams (0, -1, GetStreamsCallback);\n\n\t\t\t\tdestination.Expunge ();\n\t\t\t\tAssert.That (destination.HighestModSeq, Is.EqualTo (7));\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Unexpected number of Vanished events\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (14), \"Unexpected number of UIDs in Vanished event\");\n\t\t\t\tfor (int i = 0; i < vanished[0].UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (vanished[0].UniqueIds[i].Id, Is.EqualTo (i + 1));\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.False, \"Unexpected value for Earlier\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tdestination.Close (true);\n\n\t\t\t\tint alerts = 0;\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"System shutdown in 10 minutes\"));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\t\t\t\tclient.NoOp ();\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Alert event failed to fire.\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestDovecotAsync ()\n\t\t{\n\t\t\tvar expectedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar expectedPermanentFlags = expectedFlags | MessageFlags.UserDefined;\n\t\t\tvar commands = CreateDovecotCommands (out var internalDates, out var messages, out var flags);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"DIGEST-MD5\"), \"Expected SASL DIGEST-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"CRAM-MD5\"), \"Expected SASL CRAM-MD5 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (DovecotAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.InternationalizationLevel, Is.EqualTo (1), \"Expected I18NLEVEL=1\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.OrderedSubject), \"Expected THREAD=ORDEREDSUBJECT\");\n\t\t\t\tAssert.That (client.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Expected THREAD=REFERENCES\");\n\t\t\t\t// TODO: verify CONTEXT=SEARCH\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n\t\t\t\t// Make sure these all throw NotSupportedException\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.EnableUTF8Async ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.GetAccessRightsAsync (\"smith\"));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.GetMyAccessRightsAsync ());\n\t\t\t\tvar rights = new AccessRights (\"lrswida\");\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddAccessRightsAsync (\"smith\", rights));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveAccessRightsAsync (\"smith\", rights));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetAccessRightsAsync (\"smith\", rights));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveAccessAsync (\"smith\"));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.GetQuotaAsync ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetQuotaAsync (null, null));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.GetMetadataAsync (MetadataTag.PrivateComment));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.GetMetadataAsync (new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.SetMetadataAsync (new MetadataCollection ()));\n\t\t\t\tvar labels = new string[] { \"Label1\", \"Label2\" };\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddLabelsAsync (UniqueId.MinValue, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddLabelsAsync (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddLabelsAsync (UniqueIdRange.All, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddLabelsAsync (0, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddLabelsAsync (new int[] { 0 }, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.AddLabelsAsync (new int[] { 0 }, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveLabelsAsync (UniqueId.MinValue, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveLabelsAsync (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveLabelsAsync (UniqueIdRange.All, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveLabelsAsync (0, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveLabelsAsync (new int[] { 0 }, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.RemoveLabelsAsync (new int[] { 0 }, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetLabelsAsync (UniqueId.MinValue, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetLabelsAsync (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetLabelsAsync (UniqueIdRange.All, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetLabelsAsync (0, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetLabelsAsync (new int[] { 0 }, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.Inbox.SetLabelsAsync (new int[] { 0 }, 1, labels, true));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.EnableQuickResyncAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception when enabling QRESYNC: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// take advantage of LIST-STATUS to get top-level personal folders...\n\t\t\t\tvar statusItems = StatusItems.Count | StatusItems.HighestModSeq | StatusItems.Recent | StatusItems.UidNext | StatusItems.UidValidity | StatusItems.Unread;\n\n\t\t\t\tvar folders = (await personal.GetSubfoldersAsync (statusItems, false)).ToArray ();\n\t\t\t\tAssert.That (folders, Has.Length.EqualTo (7), \"Expected 7 folders\");\n\n\t\t\t\tvar expectedFolderNames = new [] { \"Archives\", \"Drafts\", \"Junk\", \"Sent Messages\", \"Trash\", \"INBOX\", \"NIL\" };\n\t\t\t\tvar expectedUidValidities = new [] { 1436832059, 1436832060, 1436832061, 1436832062, 1436832063, 1436832057, 1436832057 };\n\t\t\t\tvar expectedHighestModSeq = new [] { 1, 1, 1, 1, 1, 15, 1 };\n\t\t\t\tvar expectedMessages = new [] { 0, 0, 0, 0, 0, 4, 0 };\n\t\t\t\tvar expectedUidNext = new [] { 1, 1, 1, 1, 1, 5, 1 };\n\t\t\t\tvar expectedRecent = new [] { 0, 0, 0, 0, 0, 0, 0 };\n\t\t\t\tvar expectedUnseen = new [] { 0, 0, 0, 0, 0, 0, 0 };\n\n\t\t\t\tfor (int i = 0; i < folders.Length; i++) {\n\t\t\t\t\tAssert.That (folders[i].FullName, Is.EqualTo (expectedFolderNames[i]), \"FullName did not match\");\n\t\t\t\t\tAssert.That (folders[i].Name, Is.EqualTo (expectedFolderNames[i]), \"Name did not match\");\n\t\t\t\t\tAssert.That (folders[i].UidValidity, Is.EqualTo (expectedUidValidities[i]), \"UidValidity did not match\");\n\t\t\t\t\tAssert.That (folders[i].HighestModSeq, Is.EqualTo (expectedHighestModSeq[i]), \"HighestModSeq did not match\");\n\t\t\t\t\tAssert.That (folders[i], Has.Count.EqualTo (expectedMessages[i]), \"Count did not match\");\n\t\t\t\t\tAssert.That (folders[i].Recent, Is.EqualTo (expectedRecent[i]), \"Recent did not match\");\n\t\t\t\t\tAssert.That (folders[i].Unread, Is.EqualTo (expectedUnseen[i]), \"Unread did not match\");\n\t\t\t\t}\n\n\t\t\t\tvar unitTests = await personal.CreateAsync (\"UnitTests\", false);\n\t\t\t\tAssert.That (unitTests.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"Unexpected UnitTests folder attributes\");\n\n\t\t\t\tvar folder = await unitTests.CreateAsync (\"Messages\", true);\n\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"Unexpected UnitTests.Messages folder attributes\");\n\t\t\t\t//Assert.That (unitTests.Attributes, Is.EqualTo (FolderAttributes.HasChildren), \"Expected UnitTests Attributes to be updated\");\n\n\t\t\t\t// Use MULTIAPPEND to append some test messages\n\t\t\t\tvar appended = await folder.AppendAsync (messages, flags, internalDates);\n\t\t\t\tAssert.That (appended, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\n\t\t\t\t// SELECT the folder so that we can test some stuff\n\t\t\t\tvar access = await folder.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tAssert.That (folder.PermanentFlags, Is.EqualTo (expectedPermanentFlags), \"UnitTests.Messages PERMANENTFLAGS\");\n\t\t\t\tAssert.That (folder.AcceptedFlags, Is.EqualTo (expectedFlags), \"UnitTests.Messages FLAGS\");\n\t\t\t\tAssert.That (folder, Has.Count.EqualTo (8), \"UnitTests.Messages EXISTS\");\n\t\t\t\tAssert.That (folder.Recent, Is.EqualTo (8), \"UnitTests.Messages RECENT\");\n\t\t\t\tAssert.That (folder.FirstUnread, Is.EqualTo (0), \"UnitTests.Messages UNSEEN\");\n\t\t\t\tAssert.That (folder.UidValidity, Is.EqualTo (1436832084U), \"UnitTests.Messages UIDVALIDITY\");\n\t\t\t\tAssert.That (folder.UidNext.Value.Id, Is.EqualTo (9), \"UnitTests.Messages UIDNEXT\");\n\t\t\t\tAssert.That (folder.HighestModSeq, Is.EqualTo (2UL), \"UnitTests.Messages HIGHESTMODSEQ\");\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"Expected UnitTests.Messages to be opened in READ-WRITE mode\");\n\n\t\t\t\t// Keep track of various folder events\n\t\t\t\tvar flagsChanged = new List<MessageFlagsChangedEventArgs> ();\n\t\t\t\tvar modSeqChanged = new List<ModSeqChangedEventArgs> ();\n\t\t\t\tvar vanished = new List<MessagesVanishedEventArgs> ();\n\t\t\t\tbool recentChanged = false;\n\n\t\t\t\tfolder.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tflagsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tfolder.ModSeqChanged += (sender, e) => {\n\t\t\t\t\tmodSeqChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tfolder.MessagesVanished += (sender, e) => {\n\t\t\t\t\tvanished.Add (e);\n\t\t\t\t};\n\n\t\t\t\tfolder.RecentChanged += (sender, e) => {\n\t\t\t\t\trecentChanged = true;\n\t\t\t\t};\n\n\t\t\t\t// Keep track of UIDVALIDITY and HIGHESTMODSEQ values for our QRESYNC test later\n\t\t\t\tvar highestModSeq = folder.HighestModSeq;\n\t\t\t\tvar uidValidity = folder.UidValidity;\n\n\t\t\t\t// Make some FLAGS changes to our messages so we can test QRESYNC\n\t\t\t\tawait folder.AddFlagsAsync (appended, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (flagsChanged, Is.Empty, \"Unexpected number of FlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (8), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].UniqueId.Value.Id, Is.EqualTo (i + 1), $\"Unexpected modSeqChanged[{i}].UniqueId\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (3), $\"Unexpected modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (recentChanged, Is.False, \"Unexpected RecentChanged event\");\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\tvar answered = new UniqueIdSet (SortOrder.Ascending) {\n\t\t\t\t\tappended[0], // A\n\t\t\t\t\tappended[1], // B\n\t\t\t\t\tappended[2] // C\n\t\t\t\t};\n\t\t\t\tawait folder.AddFlagsAsync (answered, MessageFlags.Answered, true);\n\t\t\t\tAssert.That (flagsChanged, Is.Empty, \"Unexpected number of FlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (3), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].UniqueId.Value.Id, Is.EqualTo (i + 1), $\"Unexpected modSeqChanged[{i}].UniqueId\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (4), $\"Unexpected modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (recentChanged, Is.False, \"Unexpected RecentChanged event\");\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\t// Delete some messages so we can test that QRESYNC emits some MessageVanished events\n\t\t\t\t// both now *and* when we use QRESYNC to re-open the folder\n\t\t\t\tvar deleted = new UniqueIdSet (SortOrder.Ascending) {\n\t\t\t\t\tappended[7] // H\n\t\t\t\t};\n\t\t\t\tawait folder.AddFlagsAsync (deleted, MessageFlags.Deleted, true);\n\t\t\t\tAssert.That (flagsChanged, Is.Empty, \"Unexpected number of FlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (1), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tAssert.That (modSeqChanged[0].Index, Is.EqualTo (7), $\"Unexpected modSeqChanged[{0}].Index\");\n\t\t\t\tAssert.That (modSeqChanged[0].UniqueId.Value.Id, Is.EqualTo (8), $\"Unexpected modSeqChanged[{0}].UniqueId\");\n\t\t\t\tAssert.That (modSeqChanged[0].ModSeq, Is.EqualTo (5), $\"Unexpected modSeqChanged[{0}].ModSeq\");\n\t\t\t\tAssert.That (recentChanged, Is.False, \"Unexpected RecentChanged event\");\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\tawait folder.ExpungeAsync (deleted);\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Expected MessagesVanished event\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (1), \"Unexpected number of messages vanished\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds[0].Id, Is.EqualTo (8), \"Unexpected UID for vanished message\");\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.False, \"Expected EARLIER to be false\");\n\t\t\t\tAssert.That (recentChanged, Is.True, \"Expected RecentChanged event\");\n\t\t\t\trecentChanged = false;\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\t// Verify that THREAD works correctly\n\t\t\t\tvar threaded = await folder.ThreadAsync (ThreadingAlgorithm.References, SearchQuery.All);\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (2), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\tthreaded = await folder.ThreadAsync (UniqueIdRange.All, ThreadingAlgorithm.OrderedSubject, SearchQuery.All);\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (7), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\t// UNSELECT the folder so we can re-open it using QRESYNC\n\t\t\t\tawait folder.CloseAsync ();\n\n\t\t\t\t// Use QRESYNC to get the changes since last time we opened the folder\n\t\t\t\taccess = await folder.OpenAsync (FolderAccess.ReadWrite, uidValidity, highestModSeq, appended);\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"Expected UnitTests.Messages to be opened in READ-WRITE mode\");\n\t\t\t\tAssert.That (flagsChanged, Has.Count.EqualTo (7), \"Unexpected number of MessageFlagsChanged events\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (7), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tfor (int i = 0; i < flagsChanged.Count; i++) {\n\t\t\t\t\tvar messageFlags = MessageFlags.Seen | MessageFlags.Draft;\n\n\t\t\t\t\tif (i < 3)\n\t\t\t\t\t\tmessageFlags |= MessageFlags.Answered;\n\n\t\t\t\t\tAssert.That (flagsChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for flagsChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (flagsChanged[i].UniqueId.Value.Id, Is.EqualTo ((uint) (i + 1)), $\"Unexpected value for flagsChanged[{i}].UniqueId\");\n\t\t\t\t\tAssert.That (flagsChanged[i].Flags, Is.EqualTo (messageFlags), $\"Unexpected value for flagsChanged[{i}].Flags\");\n\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for modSeqChanged[{i}].Index\");\n\t\t\t\t\tif (i < 3)\n\t\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (4), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t\telse\n\t\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (3), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tmodSeqChanged.Clear ();\n\t\t\t\tflagsChanged.Clear ();\n\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Unexpected number of MessagesVanished events\");\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.True, \"Expected VANISHED EARLIER\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (1), \"Unexpected number of messages vanished\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds[0].Id, Is.EqualTo (8), \"Unexpected UID for vanished message\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.GMailMessageId (1)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.GMailThreadId (1)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.HasGMailLabel (\"Custom Label\")));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.GMailRawSearch (\"has:attachment in:unread\")));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.Fuzzy (SearchQuery.SubjectContains (\"some fuzzy text\"))));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.Filter (new MetadataTag (\"/private/filters/values/saved-search\"))));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.Filter (\"saved-search\")));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SaveDateSupported));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SavedBefore (DateTime.Now)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SavedOn (DateTime.Now)));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => folder.Search (SearchQuery.SavedSince (DateTime.Now)));\n\n\t\t\t\t// Use SEARCH and FETCH to get the same info\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Count | SearchOptions.Min | SearchOptions.Max | SearchOptions.Relevancy;\n\t\t\t\tvar changed = await folder.SearchAsync (searchOptions, SearchQuery.ChangedSince (highestModSeq));\n\t\t\t\tAssert.That (changed.UniqueIds, Has.Count.EqualTo (7), \"Unexpected number of UIDs\");\n\t\t\t\tAssert.That (changed.Relevancy, Has.Count.EqualTo (changed.Count), \"Unexpected number of relevancy scores\");\n\t\t\t\tAssert.That (changed.ModSeq.HasValue, Is.True, \"Expected the ModSeq property to be set\");\n\t\t\t\tAssert.That (changed.ModSeq.Value, Is.EqualTo (4), \"Unexpected ModSeq value\");\n\t\t\t\tAssert.That (changed.Min.Value.Id, Is.EqualTo (1), \"Unexpected Min\");\n\t\t\t\tAssert.That (changed.Max.Value.Id, Is.EqualTo (7), \"Unexpected Max\");\n\t\t\t\tAssert.That (changed.Count, Is.EqualTo (7), \"Unexpected Count\");\n\n\t\t\t\tvar fetched = await folder.FetchAsync (changed.UniqueIds, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (7), \"Unexpected number of messages fetched\");\n\t\t\t\tfor (int i = 0; i < fetched.Count; i++) {\n\t\t\t\t\tAssert.That (fetched[i].Index, Is.EqualTo (i), \"Unexpected Index\");\n\t\t\t\t\tAssert.That (fetched[i].UniqueId.Id, Is.EqualTo (i + 1), \"Unexpected UniqueId\");\n\t\t\t\t}\n\n\t\t\t\t// or... we could just use a single UID FETCH command like so:\n\t\t\t\tfetched = await folder.FetchAsync (UniqueIdRange.All, highestModSeq, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\tfor (int i = 0; i < fetched.Count; i++) {\n\t\t\t\t\tAssert.That (fetched[i].Index, Is.EqualTo (i), \"Unexpected Index\");\n\t\t\t\t\tAssert.That (fetched[i].UniqueId.Id, Is.EqualTo (i + 1), \"Unexpected UniqueId\");\n\t\t\t\t}\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (7), \"Unexpected number of messages fetched\");\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Unexpected number of MessagesVanished events\");\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.True, \"Expected VANISHED EARLIER\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (1), \"Unexpected number of messages vanished\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds[0].Id, Is.EqualTo (8), \"Unexpected UID for vanished message\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\t// Use SORT to order by reverse arrival order\n\t\t\t\tvar orderBy = new OrderBy[] { new OrderBy (OrderByType.Arrival, SortOrder.Descending) };\n\t\t\t\tvar sorted = await folder.SortAsync (searchOptions, SearchQuery.All, orderBy);\n\t\t\t\tAssert.That (sorted.UniqueIds, Has.Count.EqualTo (7), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < sorted.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (sorted.UniqueIds[i].Id, Is.EqualTo (7 - i), $\"Unexpected value for UniqueId[{i}]\");\n\t\t\t\tAssert.That (sorted.Relevancy, Has.Count.EqualTo (sorted.Count), \"Unexpected number of relevancy scores\");\n\t\t\t\tAssert.That (sorted.ModSeq.HasValue, Is.False, \"Expected the ModSeq property to be null\");\n\t\t\t\tAssert.That (sorted.Min.Value.Id, Is.EqualTo (7), \"Unexpected Min\");\n\t\t\t\tAssert.That (sorted.Max.Value.Id, Is.EqualTo (1), \"Unexpected Max\");\n\t\t\t\tAssert.That (sorted.Count, Is.EqualTo (7), \"Unexpected Count\");\n\n\t\t\t\t// Verify that optimizing NOT queries works correctly\n\t\t\t\tvar uids = await folder.SearchAsync (SearchQuery.Not (SearchQuery.Deleted).And (SearchQuery.Not (SearchQuery.NotSeen)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (7), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\t// Create a Destination folder to use for copying/moving messages to\n\t\t\t\tvar destination = (ImapFolder) await unitTests.CreateAsync (\"Destination\", true);\n\t\t\t\tAssert.That (destination.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"Unexpected UnitTests.Destination folder attributes\");\n\n\t\t\t\t// COPY messages to the Destination folder\n\t\t\t\tvar copied = await folder.CopyToAsync (uids, destination);\n\t\t\t\tAssert.That (copied.Source, Has.Count.EqualTo (uids.Count), \"Unexpected Source.Count\");\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (uids.Count), \"Unexpected Destination.Count\");\n\n\t\t\t\t// MOVE messages to the Destination folder\n\t\t\t\tvar moved = await folder.MoveToAsync (uids, destination);\n\t\t\t\tAssert.That (copied.Source, Has.Count.EqualTo (uids.Count), \"Unexpected Source.Count\");\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (uids.Count), \"Unexpected Destination.Count\");\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Expected VANISHED event\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tawait destination.StatusAsync (statusItems);\n\t\t\t\tAssert.That (destination.UidValidity, Is.EqualTo (moved.Destination[0].Validity), \"Unexpected UIDVALIDITY\");\n\n\t\t\t\tdestination.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tflagsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tdestination.ModSeqChanged += (sender, e) => {\n\t\t\t\t\tmodSeqChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tdestination.MessagesVanished += (sender, e) => {\n\t\t\t\t\tvanished.Add (e);\n\t\t\t\t};\n\n\t\t\t\tdestination.RecentChanged += (sender, e) => {\n\t\t\t\t\trecentChanged = true;\n\t\t\t\t};\n\n\t\t\t\tawait destination.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"Expected UnitTests.Destination to be opened in READ-WRITE mode\");\n\n\t\t\t\tvar fetchHeaders = new HashSet<HeaderId> {\n\t\t\t\t\tHeaderId.References,\n\t\t\t\t\tHeaderId.XMailer\n\t\t\t\t};\n\n\t\t\t\tvar indexes = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };\n\n\t\t\t\t// Fetch + modseq\n\t\t\t\tfetched = await destination.FetchAsync (UniqueIdRange.All, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (0, -1, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (indexes, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (0, -1, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (indexes, 1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\t// Fetch\n\t\t\t\tfetched = await destination.FetchAsync (UniqueIdRange.All, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (indexes, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References, fetchHeaders);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (0, -1, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tfetched = await destination.FetchAsync (indexes, MessageSummaryItems.Full | MessageSummaryItems.UniqueId | \n\t\t\t\t                                        MessageSummaryItems.BodyStructure | MessageSummaryItems.ModSeq | \n\t\t\t\t                                        MessageSummaryItems.References);\n\t\t\t\tAssert.That (fetched, Has.Count.EqualTo (14), \"Unexpected number of messages fetched\");\n\n\t\t\t\tuids = new UniqueIdSet (SortOrder.Ascending);\n\n\t\t\t\tfor (int i = 0; i < fetched.Count; i++) {\n\t\t\t\t\tAssert.That (fetched[i].Index, Is.EqualTo (i), \"Unexpected Index\");\n\t\t\t\t\tAssert.That (fetched[i].UniqueId.Id, Is.EqualTo (i + 1), \"Unexpected UniqueId\");\n\n\t\t\t\t\tuids.Add (fetched[i].UniqueId);\n\t\t\t\t}\n\n\t\t\t\tusing (var entity = await destination.GetBodyPartAsync (fetched[0].UniqueId, fetched[0].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tusing (var entity = await destination.GetBodyPartAsync (fetched[0].Index, fetched[0].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tusing (var entity = await destination.GetBodyPartAsync (fetched[1].UniqueId, fetched[1].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tusing (var entity = await destination.GetBodyPartAsync (fetched[1].Index, fetched[1].TextBody))\n\t\t\t\t\tAssert.That (entity, Is.InstanceOf<TextPart> ());\n\n\t\t\t\tvar headers = await destination.GetHeadersAsync (fetched[0].UniqueId);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = await destination.GetHeadersAsync (fetched[0].Index);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(int) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = await destination.GetHeadersAsync (fetched[0].UniqueId, fetched[0].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId, BodyPart) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = await destination.GetHeadersAsync (fetched[0].Index, fetched[0].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.From], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(int, BodyPart) failed to match From header\");\n\t\t\t\tAssert.That (headers[HeaderId.Date], Is.EqualTo (\"Sun, 02 Oct 2016 17:56:45 -0400\"), \"GetHeaders(UniqueId) failed to match Date header\");\n\t\t\t\tAssert.That (headers[HeaderId.Subject], Is.EqualTo (\"A\"), \"GetHeaders(UniqueId) failed to match Subject header\");\n\t\t\t\tAssert.That (headers[HeaderId.MessageId], Is.EqualTo (\"<a@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match Message-Id header\");\n\t\t\t\tAssert.That (headers[HeaderId.To], Is.EqualTo (\"Unit Tests <unit-tests@mimekit.net>\"), \"GetHeaders(UniqueId) failed to match To header\");\n\t\t\t\tAssert.That (headers[HeaderId.MimeVersion], Is.EqualTo (\"1.0\"), \"GetHeaders(UniqueId) failed to match MIME-Version header\");\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = await destination.GetHeadersAsync (fetched[1].UniqueId, fetched[1].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\theaders = await destination.GetHeadersAsync (fetched[1].Index, fetched[1].TextBody);\n\t\t\t\tAssert.That (headers[HeaderId.ContentType], Is.EqualTo (\"text/plain; charset=utf-8\"), \"GetHeaders(UniqueId) failed to match Content-Type header\");\n\n\t\t\t\tusing (var stream = await destination.GetStreamAsync (fetched[0].UniqueId, 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = await destination.GetStreamAsync (fetched[0].UniqueId, \"\", 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = await destination.GetStreamAsync (fetched[0].Index, 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = await destination.GetStreamAsync (fetched[0].Index, \"\", 128, 64)) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (64), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"nit Tests <unit-tests@mimekit.net>\\r\\nMIME-Version: 1.0\\r\\nContent-T\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = await destination.GetStreamAsync (fetched[0].UniqueId, \"HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)\")) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (62), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"MIME-Version: 1.0\\r\\nContent-Type: text/plain; charset=utf-8\\r\\n\\r\\n\"));\n\t\t\t\t}\n\n\t\t\t\tusing (var stream = await destination.GetStreamAsync (fetched[0].Index, \"HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)\")) {\n\t\t\t\t\tAssert.That (stream.Length, Is.EqualTo (62), \"Unexpected stream length\");\n\n\t\t\t\t\tstring text;\n\t\t\t\t\tusing (var reader = new StreamReader (stream))\n\t\t\t\t\t\ttext = reader.ReadToEnd ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"MIME-Version: 1.0\\r\\nContent-Type: text/plain; charset=utf-8\\r\\n\\r\\n\"));\n\t\t\t\t}\n\n\t\t\t\tvar custom = new HashSet<string> {\n\t\t\t\t\t\"$MailKit\"\n\t\t\t\t};\n\n\t\t\t\tvar unchanged1 = await destination.AddFlagsAsync (uids, destination.HighestModSeq, MessageFlags.Deleted, custom, true);\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (14), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tAssert.That (destination.HighestModSeq, Is.EqualTo (5));\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (5), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (unchanged1, Has.Count.EqualTo (2), \"[MODIFIED uid-set]\");\n\t\t\t\tAssert.That (unchanged1[0].Id, Is.EqualTo (7), \"unchanged uids[0]\");\n\t\t\t\tAssert.That (unchanged1[1].Id, Is.EqualTo (9), \"unchanged uids[1]\");\n\t\t\t\tmodSeqChanged.Clear ();\n\n\t\t\t\tvar unchanged2 = await destination.SetFlagsAsync (new int[] { 0, 1, 2, 3, 4, 5, 6 }, destination.HighestModSeq, MessageFlags.Seen | MessageFlags.Deleted, custom, true);\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (7), \"Unexpected number of ModSeqChanged events\");\n\t\t\t\tAssert.That (destination.HighestModSeq, Is.EqualTo (6));\n\t\t\t\tfor (int i = 0; i < modSeqChanged.Count; i++) {\n\t\t\t\t\tAssert.That (modSeqChanged[i].Index, Is.EqualTo (i), $\"Unexpected value for modSeqChanged[{i}].Index\");\n\t\t\t\t\tAssert.That (modSeqChanged[i].ModSeq, Is.EqualTo (6), $\"Unexpected value for modSeqChanged[{i}].ModSeq\");\n\t\t\t\t}\n\t\t\t\tAssert.That (unchanged2, Has.Count.EqualTo (2), \"[MODIFIED seq-set]\");\n\t\t\t\tAssert.That (unchanged2[0], Is.EqualTo (6), \"unchanged indexes[0]\");\n\t\t\t\tAssert.That (unchanged2[1], Is.EqualTo (8), \"unchanged indexes[1]\");\n\t\t\t\tmodSeqChanged.Clear ();\n\n\t\t\t\tvar results = await destination.SearchAsync (uids, SearchQuery.New.Or (SearchQuery.Old.Or (SearchQuery.Answered.Or (SearchQuery.Deleted.Or (SearchQuery.Draft.Or (SearchQuery.Flagged.Or (SearchQuery.Recent.Or (SearchQuery.NotAnswered.Or (SearchQuery.NotDeleted.Or (SearchQuery.NotDraft.Or (SearchQuery.NotFlagged.Or (SearchQuery.NotSeen.Or (SearchQuery.HasKeyword (\"$MailKit\").Or (SearchQuery.NotKeyword (\"$MailKit\")))))))))))))));\n\t\t\t\tAssert.That (results, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\tvar matches = await destination.SearchAsync (searchOptions, uids, SearchQuery.LargerThan (256).And (SearchQuery.SmallerThan (512)));\n\t\t\t\tvar expectedMatchedUids = new uint[] { 2, 3, 4, 5, 6, 9, 10, 11, 12, 13 };\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (10), \"Unexpected COUNT\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (13), \"Unexpected MAX\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (2), \"Unexpected MIN\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (10), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (expectedMatchedUids[i]));\n\t\t\t\tAssert.That (matches.Relevancy, Has.Count.EqualTo (matches.Count), \"Unexpected number of relevancy scores\");\n\n\t\t\t\torderBy = new OrderBy[] { OrderBy.ReverseDate, OrderBy.Subject, OrderBy.DisplayFrom, OrderBy.Size };\n\t\t\t\tvar sentDateQuery = SearchQuery.Or (SearchQuery.And (SearchQuery.SentBefore (new DateTime (2016, 10, 12)), SearchQuery.SentSince (new DateTime (2016, 10, 10))), SearchQuery.Not (SearchQuery.SentOn (new DateTime (2016, 10, 11))));\n\t\t\t\tvar deliveredDateQuery = SearchQuery.Or (SearchQuery.And (SearchQuery.DeliveredBefore (new DateTime (2016, 10, 12)), SearchQuery.DeliveredAfter (new DateTime (2016, 10, 10))), SearchQuery.Not (SearchQuery.DeliveredOn (new DateTime (2016, 10, 11))));\n\t\t\t\tresults = await destination.SortAsync (sentDateQuery.Or (deliveredDateQuery), orderBy);\n\t\t\t\tvar expectedSortByDateResults = new uint[] { 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8 };\n\t\t\t\tAssert.That (results, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < results.Count; i++)\n\t\t\t\t\tAssert.That (results[i].Id, Is.EqualTo (expectedSortByDateResults[i]));\n\n\t\t\t\tvar stringQuery = SearchQuery.BccContains (\"xyz\").Or (SearchQuery.CcContains (\"xyz\").Or (SearchQuery.FromContains (\"xyz\").Or (SearchQuery.ToContains (\"xyz\").Or (SearchQuery.SubjectContains (\"xyz\").Or (SearchQuery.HeaderContains (\"Message-Id\", \"mimekit.net\").Or (SearchQuery.BodyContains (\"This is the message body.\").Or (SearchQuery.MessageContains (\"message\"))))))));\n\t\t\t\torderBy = new OrderBy[] { OrderBy.From, OrderBy.To, OrderBy.Cc };\n\t\t\t\tresults = await destination.SortAsync (uids, stringQuery, orderBy);\n\t\t\t\tAssert.That (results, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < results.Count; i++)\n\t\t\t\t\tAssert.That (results[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\torderBy = new OrderBy[] { OrderBy.DisplayTo };\n\t\t\t\tmatches = await destination.SortAsync (searchOptions, uids, SearchQuery.OlderThan (1).And (SearchQuery.YoungerThan (3600)), orderBy);\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"Unexpected COUNT\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (i + 1));\n\t\t\t\tAssert.That (matches.Relevancy, Has.Count.EqualTo (matches.Count), \"Unexpected number of relevancy scores\");\n\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ESearch;\n\t\t\t\tmatches = await ((ImapFolder) destination).SearchAsync (\"ALL\");\n\t\t\t\tAssert.That (matches.Max.HasValue, Is.True, \"MAX should always be set\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX value\");\n\t\t\t\tAssert.That (matches.Min.HasValue, Is.True, \"MIN should always be set\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN value\");\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"COUNT should always be set\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ESort;\n\t\t\t\tmatches = await ((ImapFolder) destination).SortAsync (\"(REVERSE ARRIVAL) US-ASCII ALL\");\n\t\t\t\tAssert.That (matches.Max.HasValue, Is.True, \"MAX should always be set\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX value\");\n\t\t\t\tAssert.That (matches.Min.HasValue, Is.True, \"MIN should always be set\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN value\");\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"COUNT should always be set\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14));\n\t\t\t\tvar expectedSortByReverseArrivalResults = new uint[] { 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8 };\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (expectedSortByReverseArrivalResults[i]));\n\n\t\t\t\tawait destination.GetStreamsAsync (UniqueIdRange.All, GetStreamsAsyncCallback);\n\t\t\t\tawait destination.GetStreamsAsync (new int[] { 0, 1, 2 }, GetStreamsAsyncCallback);\n\t\t\t\tawait destination.GetStreamsAsync (0, -1, GetStreamsAsyncCallback);\n\n\t\t\t\tawait destination.ExpungeAsync ();\n\t\t\t\tAssert.That (destination.HighestModSeq, Is.EqualTo (7));\n\t\t\t\tAssert.That (vanished, Has.Count.EqualTo (1), \"Unexpected number of Vanished events\");\n\t\t\t\tAssert.That (vanished[0].UniqueIds, Has.Count.EqualTo (14), \"Unexpected number of UIDs in Vanished event\");\n\t\t\t\tfor (int i = 0; i < vanished[0].UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (vanished[0].UniqueIds[i].Id, Is.EqualTo (i + 1));\n\t\t\t\tAssert.That (vanished[0].Earlier, Is.False, \"Unexpected value for Earlier\");\n\t\t\t\tvanished.Clear ();\n\n\t\t\t\tawait destination.CloseAsync (true);\n\n\t\t\t\tint alerts = 0;\n\t\t\t\tclient.Alert += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Message, Is.EqualTo (\"System shutdown in 10 minutes\"));\n\t\t\t\t\talerts++;\n\t\t\t\t};\n\t\t\t\tawait client.NoOpAsync ();\n\t\t\t\tAssert.That (alerts, Is.EqualTo (1), \"Alert event failed to fire.\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateGMailCommands ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 CREATE UnitTests\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LIST \\\"\\\" UnitTests\\r\\n\", \"gmail.list-unittests.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 SELECT UnitTests (CONDSTORE)\\r\\n\", \"gmail.select-unittests.txt\")\n\t\t\t};\n\n\t\t\tfor (int i = 0; i < 50; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, TextEncodings.Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tmessage.Dispose ();\n\n\t\t\t\tvar tag = string.Format (\"A{0:D8}\", i + 9);\n\t\t\t\tvar command = string.Format (\"{0} APPEND UnitTests (\\\\Seen) \", tag);\n\n\t\t\t\tif (length > 4096) {\n\t\t\t\t\tcommand += \"{\" + length + \"}\\r\\n\";\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (command, \"gmail.go-ahead.txt\"));\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (tag, latin1 + \"\\r\\n\", string.Format (\"gmail.append.{0}.txt\", i + 1)));\n\t\t\t\t} else {\n\t\t\t\t\tcommand += \"{\" + length + \"+}\\r\\n\" + latin1 + \"\\r\\n\";\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (command, string.Format (\"gmail.append.{0}.txt\", i + 1)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000059 UID SEARCH RETURN (ALL) OR X-GM-MSGID 1 OR X-GM-THRID 5 OR X-GM-LABELS \\\"Custom Label\\\" X-GM-RAW \\\"has:attachment in:unread\\\"\\r\\n\", \"gmail.search.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000060 UID FETCH 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY X-GM-MSGID X-GM-THRID X-GM-LABELS)\\r\\n\", \"gmail.search-summary.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000061 UID FETCH 1 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.1.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000062 UID FETCH 2 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.2.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000063 UID FETCH 3 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.3.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000064 UID FETCH 5 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.5.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000065 UID FETCH 7 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.7.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000066 UID FETCH 8 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.8.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000067 UID FETCH 9 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.9.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000068 UID FETCH 11 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.11.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000069 UID FETCH 12 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.12.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000070 UID FETCH 13 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.13.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000071 UID FETCH 14 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.14.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000072 UID FETCH 26 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.26.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000073 UID FETCH 27 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.27.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000074 UID FETCH 28 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.28.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000075 UID FETCH 29 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.29.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000076 UID FETCH 31 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.31.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000077 UID FETCH 34 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.34.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000078 UID FETCH 41 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.41.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000079 UID FETCH 42 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.42.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000080 UID FETCH 43 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.43.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000081 UID FETCH 50 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.50.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000082 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.set-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000083 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 -X-GM-LABELS.SILENT (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000084 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.add-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000085 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UNCHANGEDSINCE 5) X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.set-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000086 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UNCHANGEDSINCE 5) -X-GM-LABELS.SILENT (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000087 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UNCHANGEDSINCE 5) +X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.add-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000088 STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.set-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000089 STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 -X-GM-LABELS.SILENT (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000090 STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.add-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000091 STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UNCHANGEDSINCE 5) X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.set-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000092 STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UNCHANGEDSINCE 5) -X-GM-LABELS.SILENT (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000093 STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 (UNCHANGEDSINCE 5) +X-GM-LABELS (\\\\Important \\\"Custom Label\\\" NIL)\\r\\n\", \"gmail.add-labels.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000094 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 FLAGS (\\\\Answered \\\\Seen)\\r\\n\", \"gmail.set-flags.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000095 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 -FLAGS.SILENT (\\\\Answered)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000096 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", \"gmail.add-flags.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000097 CHECK\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000098 UNSELECT\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000099 SUBSCRIBE UnitTests\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000100 LSUB \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.lsub-personal.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000101 UNSUBSCRIBE UnitTests\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000102 CREATE UnitTests/Dummy\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000103 LIST \\\"\\\" UnitTests/Dummy\\r\\n\", \"gmail.list-unittests-dummy.txt\"));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000104 RENAME UnitTests RenamedUnitTests\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000105 DELETE RenamedUnitTests\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000106 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGMail ()\n\t\t{\n\t\t\tvar commands = CreateGMailCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.AppendLimit.HasValue, Is.True, \"Expected AppendLimit to have a value\");\n\t\t\t\tAssert.That (client.AppendLimit.Value, Is.EqualTo (35651584), \"Expected AppendLimit value to match\");\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.EnableQuickResync ());\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Notify (true, new List<ImapEventGroup> {\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.FlagChange, new ImapEvent.MessageNew (), ImapEvent.MessageExpunge)\n\t\t\t\t}));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.DisableNotify ());\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar created = personal.Create (\"UnitTests\", true);\n\t\t\t\tAssert.That (created, Is.Not.Null, \"Expected a non-null created folder.\");\n\t\t\t\tAssert.That (created.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren));\n\n\t\t\t\tAssert.That (created.ParentFolder, Is.Not.Null, \"The ParentFolder property should not be null.\");\n\n\t\t\t\tconst MessageFlags ExpectedPermanentFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Draft | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.UserDefined;\n\t\t\t\tconst MessageFlags ExpectedAcceptedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Draft | MessageFlags.Deleted | MessageFlags.Seen;\n\t\t\t\tvar access = created.Open (FolderAccess.ReadWrite);\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"The UnitTests folder was not opened with the expected access mode.\");\n\t\t\t\tAssert.That (created.PermanentFlags, Is.EqualTo (ExpectedPermanentFlags), \"The PermanentFlags do not match the expected value.\");\n\t\t\t\tAssert.That (created.AcceptedFlags, Is.EqualTo (ExpectedAcceptedFlags), \"The AcceptedFlags do not match the expected value.\");\n\n\t\t\t\tfor (int i = 0; i < 50; i++) {\n\t\t\t\t\tusing (var stream = GetResourceStream (string.Format (\"common.message.{0}.msg\", i))) {\n\t\t\t\t\t\tusing (var message = MimeMessage.Load (stream)) {\n\t\t\t\t\t\t\tvar uid = created.Append (message, MessageFlags.Seen);\n\t\t\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UID to be returned from folder.Append().\");\n\t\t\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo ((uint) (i + 1)), \"The UID returned from the APPEND command does not match the expected UID.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar query = SearchQuery.GMailMessageId (1).Or (SearchQuery.GMailThreadId (5).Or (SearchQuery.HasGMailLabel (\"Custom Label\").Or (SearchQuery.GMailRawSearch (\"has:attachment in:unread\"))));\n\t\t\t\tvar matches = created.Search (query);\n\t\t\t\tAssert.That (matches, Has.Count.EqualTo (21));\n\n\t\t\t\tconst MessageSummaryItems items = MessageSummaryItems.Full | MessageSummaryItems.UniqueId | MessageSummaryItems.GMailLabels | MessageSummaryItems.GMailMessageId | MessageSummaryItems.GMailThreadId;\n\t\t\t\tvar summaries = created.Fetch (matches, items);\n\t\t\t\tvar indexes = new List<int> ();\n\n\t\t\t\tforeach (var summary in summaries) {\n\t\t\t\t\tAssert.That (summary.GMailMessageId.Value, Is.EqualTo (1592225494819146100 + summary.UniqueId.Id), \"GMailMessageId\");\n\t\t\t\t\tAssert.That (summary.GMailThreadId.Value, Is.EqualTo (1592225494819146100 + summary.UniqueId.Id), \"GMailThreadId\");\n\t\t\t\t\tAssert.That (summary.GMailLabels, Has.Count.EqualTo (2), \"GMailLabels.Count\");\n\t\t\t\t\tAssert.That (summary.GMailLabels[0], Is.EqualTo (\"Test Messages\"));\n\t\t\t\t\tAssert.That (summary.GMailLabels[1], Is.EqualTo (\"\\\\Important\"));\n\t\t\t\t\tAssert.That (summary.UniqueId.IsValid, Is.True, \"UniqueId.IsValid\");\n\n\t\t\t\t\tcreated.GetMessage (summary.UniqueId);\n\t\t\t\t\tindexes.Add (summary.Index);\n\t\t\t\t}\n\n\t\t\t\tvar labels = new [] { \"\\\\Important\", \"Custom Label\", null };\n\t\t\t\tcreated.SetLabels (matches, labels, false);\n\t\t\t\tcreated.RemoveLabels (matches, labels, true);\n\t\t\t\tcreated.AddLabels (matches, labels, false);\n\n\t\t\t\tcreated.SetLabels (matches, 5, labels, false);\n\t\t\t\tcreated.RemoveLabels (matches, 5, labels, true);\n\t\t\t\tcreated.AddLabels (matches, 5, labels, false);\n\n\t\t\t\tcreated.SetLabels (indexes, labels, false);\n\t\t\t\tcreated.RemoveLabels (indexes, labels, true);\n\t\t\t\tcreated.AddLabels (indexes, labels, false);\n\n\t\t\t\tcreated.SetLabels (indexes, 5, labels, false);\n\t\t\t\tcreated.RemoveLabels (indexes, 5, labels, true);\n\t\t\t\tcreated.AddLabels (indexes, 5, labels, false);\n\n\t\t\t\t// Verify that Adding and/or removing an empty set of labels is a no-op\n\t\t\t\tlabels = Array.Empty<string> ();\n\n\t\t\t\tcreated.RemoveLabels (matches, labels, true);\n\t\t\t\tcreated.AddLabels (matches, labels, false);\n\n\t\t\t\tcreated.RemoveLabels (matches, 5, labels, true);\n\t\t\t\tcreated.AddLabels (matches, 5, labels, false);\n\n\t\t\t\tcreated.RemoveLabels (indexes, labels, true);\n\t\t\t\tcreated.AddLabels (indexes, labels, false);\n\n\t\t\t\tcreated.RemoveLabels (indexes, 5, labels, true);\n\t\t\t\tcreated.AddLabels (indexes, 5, labels, false);\n\n\t\t\t\tcreated.SetFlags (matches, MessageFlags.Seen | MessageFlags.Answered, false);\n\t\t\t\tcreated.RemoveFlags (matches, MessageFlags.Answered, true);\n\t\t\t\tcreated.AddFlags (matches, MessageFlags.Deleted, true);\n\n\t\t\t\t// Verify that Adding and/or removing an empty set of flags is a no-op\n\t\t\t\tcreated.RemoveFlags (matches, MessageFlags.None, true);\n\t\t\t\tcreated.AddFlags (matches, MessageFlags.None, true);\n\n\t\t\t\tcreated.RemoveFlags (matches, 5, MessageFlags.None, true);\n\t\t\t\tcreated.AddFlags (matches, 5, MessageFlags.None, true);\n\n\t\t\t\tcreated.RemoveFlags (indexes, MessageFlags.None, true);\n\t\t\t\tcreated.AddFlags (indexes, MessageFlags.None, true);\n\n\t\t\t\tcreated.RemoveFlags (indexes, 5, MessageFlags.None, true);\n\t\t\t\tcreated.AddFlags (indexes, 5, MessageFlags.None, true);\n\n\t\t\t\tcreated.Check ();\n\n\t\t\t\tcreated.Close ();\n\t\t\t\tAssert.That (created.IsOpen, Is.False, \"Expected the UnitTests folder to be closed.\");\n\n\t\t\t\tcreated.Subscribe ();\n\t\t\t\tAssert.That (created.IsSubscribed, Is.True, \"Expected IsSubscribed to be true after subscribing to the folder.\");\n\n\t\t\t\tvar subscribed = personal.GetSubfolders (true);\n\t\t\t\tAssert.That (subscribed.Contains (created), Is.True, \"Expected the list of subscribed folders to contain the UnitTests folder.\");\n\n\t\t\t\tcreated.Unsubscribe ();\n\t\t\t\tAssert.That (created.IsSubscribed, Is.False, \"Expected IsSubscribed to be false after unsubscribing from the folder.\");\n\n\t\t\t\tvar dummy = created.Create (\"Dummy\", true);\n\t\t\t\tbool dummyRenamed = false;\n\t\t\t\tbool renamed = false;\n\t\t\t\tbool deleted = false;\n\n\t\t\t\tdummy.Renamed += (sender, e) => { dummyRenamed = true; };\n\t\t\t\tcreated.Renamed += (sender, e) => { renamed = true; };\n\n\t\t\t\tcreated.Rename (created.ParentFolder, \"RenamedUnitTests\");\n\t\t\t\tAssert.That (created.Name, Is.EqualTo (\"RenamedUnitTests\"));\n\t\t\t\tAssert.That (created.FullName, Is.EqualTo (\"RenamedUnitTests\"));\n\t\t\t\tAssert.That (renamed, Is.True, \"Expected the Rename event to be emitted for the UnitTests folder.\");\n\n\t\t\t\tAssert.That (dummy.FullName, Is.EqualTo (\"RenamedUnitTests/Dummy\"));\n\t\t\t\tAssert.That (dummyRenamed, Is.True, \"Expected the Rename event to be emitted for the UnitTests/Dummy folder.\");\n\n\t\t\t\tcreated.Deleted += (sender, e) => { deleted = true; };\n\n\t\t\t\tcreated.Delete ();\n\t\t\t\tAssert.That (deleted, Is.True, \"Expected the Deleted event to be emitted for the UnitTests folder.\");\n\t\t\t\tAssert.That (created.Exists, Is.False, \"Expected Exists to be false after deleting the folder.\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGMailAsync ()\n\t\t{\n\t\t\tvar commands = CreateGMailCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.AppendLimit.HasValue, Is.True, \"Expected AppendLimit to have a value\");\n\t\t\t\tAssert.That (client.AppendLimit.Value, Is.EqualTo (35651584), \"Expected AppendLimit value to match\");\n\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.EnableQuickResyncAsync ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.NotifyAsync (true, new List<ImapEventGroup> {\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.FlagChange, new ImapEvent.MessageNew (), ImapEvent.MessageExpunge)\n\t\t\t\t}));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await client.DisableNotifyAsync ());\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar created = await personal.CreateAsync (\"UnitTests\", true);\n\t\t\t\tAssert.That (created, Is.Not.Null, \"Expected a non-null created folder.\");\n\t\t\t\tAssert.That (created.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren));\n\n\t\t\t\tAssert.That (created.ParentFolder, Is.Not.Null, \"The ParentFolder property should not be null.\");\n\n\t\t\t\tconst MessageFlags ExpectedPermanentFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Draft | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.UserDefined;\n\t\t\t\tconst MessageFlags ExpectedAcceptedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Draft | MessageFlags.Deleted | MessageFlags.Seen;\n\t\t\t\tvar access = await created.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tAssert.That (access, Is.EqualTo (FolderAccess.ReadWrite), \"The UnitTests folder was not opened with the expected access mode.\");\n\t\t\t\tAssert.That (created.PermanentFlags, Is.EqualTo (ExpectedPermanentFlags), \"The PermanentFlags do not match the expected value.\");\n\t\t\t\tAssert.That (created.AcceptedFlags, Is.EqualTo (ExpectedAcceptedFlags), \"The AcceptedFlags do not match the expected value.\");\n\n\t\t\t\tfor (int i = 0; i < 50; i++) {\n\t\t\t\t\tusing (var stream = GetResourceStream (string.Format (\"common.message.{0}.msg\", i))) {\n\t\t\t\t\t\tusing (var message = MimeMessage.Load (stream)) {\n\t\t\t\t\t\t\tvar uid = await created.AppendAsync (message, MessageFlags.Seen);\n\t\t\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UID to be returned from folder.Append().\");\n\t\t\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo ((uint) (i + 1)), \"The UID returned from the APPEND command does not match the expected UID.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar query = SearchQuery.GMailMessageId (1).Or (SearchQuery.GMailThreadId (5).Or (SearchQuery.HasGMailLabel (\"Custom Label\").Or (SearchQuery.GMailRawSearch (\"has:attachment in:unread\"))));\n\t\t\t\tvar matches = await created.SearchAsync (query);\n\t\t\t\tAssert.That (matches, Has.Count.EqualTo (21));\n\n\t\t\t\tconst MessageSummaryItems items = MessageSummaryItems.Full | MessageSummaryItems.UniqueId | MessageSummaryItems.GMailLabels | MessageSummaryItems.GMailMessageId | MessageSummaryItems.GMailThreadId;\n\t\t\t\tvar summaries = await created.FetchAsync (matches, items);\n\t\t\t\tvar indexes = new List<int> ();\n\n\t\t\t\tforeach (var summary in summaries) {\n\t\t\t\t\tAssert.That (summary.GMailMessageId.Value, Is.EqualTo (1592225494819146100 + summary.UniqueId.Id), \"GMailMessageId\");\n\t\t\t\t\tAssert.That (summary.GMailThreadId.Value, Is.EqualTo (1592225494819146100 + summary.UniqueId.Id), \"GMailThreadId\");\n\t\t\t\t\tAssert.That (summary.GMailLabels, Has.Count.EqualTo (2), \"GMailLabels.Count\");\n\t\t\t\t\tAssert.That (summary.GMailLabels[0], Is.EqualTo (\"Test Messages\"));\n\t\t\t\t\tAssert.That (summary.GMailLabels[1], Is.EqualTo (\"\\\\Important\"));\n\t\t\t\t\tAssert.That (summary.UniqueId.IsValid, Is.True, \"UniqueId.IsValid\");\n\n\t\t\t\t\tawait created.GetMessageAsync (summary.UniqueId);\n\t\t\t\t\tindexes.Add (summary.Index);\n\t\t\t\t}\n\n\t\t\t\tvar labels = new [] { \"\\\\Important\", \"Custom Label\", null };\n\t\t\t\tawait created.SetLabelsAsync (matches, labels, false);\n\t\t\t\tawait created.RemoveLabelsAsync (matches, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (matches, labels, false);\n\n\t\t\t\tawait created.SetLabelsAsync (matches, 5, labels, false);\n\t\t\t\tawait created.RemoveLabelsAsync (matches, 5, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (matches, 5, labels, false);\n\n\t\t\t\tawait created.SetLabelsAsync (indexes, labels, false);\n\t\t\t\tawait created.RemoveLabelsAsync (indexes, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (indexes, labels, false);\n\n\t\t\t\tawait created.SetLabelsAsync (indexes, 5, labels, false);\n\t\t\t\tawait created.RemoveLabelsAsync (indexes, 5, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (indexes, 5, labels, false);\n\n\t\t\t\t// Verify that Adding and/or removing an empty set of labels is a no-op\n\t\t\t\tlabels = Array.Empty<string> ();\n\n\t\t\t\tawait created.RemoveLabelsAsync (matches, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (matches, labels, false);\n\n\t\t\t\tawait created.RemoveLabelsAsync (matches, 5, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (matches, 5, labels, false);\n\n\t\t\t\tawait created.RemoveLabelsAsync (indexes, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (indexes, labels, false);\n\n\t\t\t\tawait created.RemoveLabelsAsync (indexes, 5, labels, true);\n\t\t\t\tawait created.AddLabelsAsync (indexes, 5, labels, false);\n\n\t\t\t\tawait created.SetFlagsAsync (matches, MessageFlags.Seen | MessageFlags.Answered, false);\n\t\t\t\tawait created.RemoveFlagsAsync (matches, MessageFlags.Answered, true);\n\t\t\t\tawait created.AddFlagsAsync (matches, MessageFlags.Deleted, true);\n\n\t\t\t\t// Verify that Adding and/or removing an empty set of flags is a no-op\n\t\t\t\tawait created.RemoveFlagsAsync (matches, MessageFlags.None, true);\n\t\t\t\tawait created.AddFlagsAsync (matches, MessageFlags.None, true);\n\n\t\t\t\tawait created.RemoveFlagsAsync (matches, 5, MessageFlags.None, true);\n\t\t\t\tawait created.AddFlagsAsync (matches, 5, MessageFlags.None, true);\n\n\t\t\t\tawait created.RemoveFlagsAsync (indexes, MessageFlags.None, true);\n\t\t\t\tawait created.AddFlagsAsync (indexes, MessageFlags.None, true);\n\n\t\t\t\tawait created.RemoveFlagsAsync (indexes, 5, MessageFlags.None, true);\n\t\t\t\tawait created.AddFlagsAsync (indexes, 5, MessageFlags.None, true);\n\n\t\t\t\tawait created.CheckAsync ();\n\n\t\t\t\tawait created.CloseAsync ();\n\t\t\t\tAssert.That (created.IsOpen, Is.False, \"Expected the UnitTests folder to be closed.\");\n\n\t\t\t\tawait created.SubscribeAsync ();\n\t\t\t\tAssert.That (created.IsSubscribed, Is.True, \"Expected IsSubscribed to be true after subscribing to the folder.\");\n\n\t\t\t\tvar subscribed = await personal.GetSubfoldersAsync (true);\n\t\t\t\tAssert.That (subscribed.Contains (created), Is.True, \"Expected the list of subscribed folders to contain the UnitTests folder.\");\n\n\t\t\t\tawait created.UnsubscribeAsync ();\n\t\t\t\tAssert.That (created.IsSubscribed, Is.False, \"Expected IsSubscribed to be false after unsubscribing from the folder.\");\n\n\t\t\t\tvar dummy = await created.CreateAsync (\"Dummy\", true);\n\t\t\t\tbool dummyRenamed = false;\n\t\t\t\tbool renamed = false;\n\t\t\t\tbool deleted = false;\n\n\t\t\t\tdummy.Renamed += (sender, e) => { dummyRenamed = true; };\n\t\t\t\tcreated.Renamed += (sender, e) => { renamed = true; };\n\n\t\t\t\tawait created.RenameAsync (created.ParentFolder, \"RenamedUnitTests\");\n\t\t\t\tAssert.That (created.Name, Is.EqualTo (\"RenamedUnitTests\"));\n\t\t\t\tAssert.That (created.FullName, Is.EqualTo (\"RenamedUnitTests\"));\n\t\t\t\tAssert.That (renamed, Is.True, \"Expected the Rename event to be emitted for the UnitTests folder.\");\n\n\t\t\t\tAssert.That (dummy.FullName, Is.EqualTo (\"RenamedUnitTests/Dummy\"));\n\t\t\t\tAssert.That (dummyRenamed, Is.True, \"Expected the Rename event to be emitted for the UnitTests/Dummy folder.\");\n\n\t\t\t\tcreated.Deleted += (sender, e) => { deleted = true; };\n\n\t\t\t\tawait created.DeleteAsync ();\n\t\t\t\tAssert.That (deleted, Is.True, \"Expected the Deleted event to be emitted for the UnitTests folder.\");\n\t\t\t\tAssert.That (created.Exists, Is.False, \"Expected Exists to be false after deleting the folder.\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateGetFolderCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" Level1/Level2/Level3 RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-level3.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" Level1/Level2 RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-level2.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LIST \\\"\\\" Level1 RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-level1.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetFolder ()\n\t\t{\n\t\t\tvar commands = CreateGetFolderCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar level3 = client.GetFolder (\"Level1/Level2/Level3\");\n\t\t\t\tAssert.That (level3.FullName, Is.EqualTo (\"Level1/Level2/Level3\"));\n\t\t\t\tAssert.That (level3.Name, Is.EqualTo (\"Level3\"));\n\t\t\t\tAssert.That (level3.DirectorySeparator, Is.EqualTo ('/'));\n\t\t\t\tAssert.That (level3.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren));\n\n\t\t\t\tvar level2 = level3.ParentFolder;\n\t\t\t\tAssert.That (level2.FullName, Is.EqualTo (\"Level1/Level2\"));\n\t\t\t\tAssert.That (level2.Name, Is.EqualTo (\"Level2\"));\n\t\t\t\tAssert.That (level2.DirectorySeparator, Is.EqualTo ('/'));\n\t\t\t\tAssert.That (level2.Attributes, Is.EqualTo (FolderAttributes.HasChildren));\n\n\t\t\t\tvar level1 = level2.ParentFolder;\n\t\t\t\tAssert.That (level1.FullName, Is.EqualTo (\"Level1\"));\n\t\t\t\tAssert.That (level1.Name, Is.EqualTo (\"Level1\"));\n\t\t\t\tAssert.That (level1.DirectorySeparator, Is.EqualTo ('/'));\n\t\t\t\tAssert.That (level1.Attributes, Is.EqualTo (FolderAttributes.HasChildren));\n\n\t\t\t\tvar personal = level1.ParentFolder;\n\t\t\t\tAssert.That (personal.FullName, Is.EqualTo (string.Empty));\n\t\t\t\tAssert.That (personal.Name, Is.EqualTo (string.Empty));\n\t\t\t\tAssert.That (personal.IsNamespace, Is.True, \"IsNamespace\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetFolderAsync ()\n\t\t{\n\t\t\tvar commands = CreateGetFolderCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar level3 = await client.GetFolderAsync (\"Level1/Level2/Level3\");\n\t\t\t\tAssert.That (level3.FullName, Is.EqualTo (\"Level1/Level2/Level3\"));\n\t\t\t\tAssert.That (level3.Name, Is.EqualTo (\"Level3\"));\n\t\t\t\tAssert.That (level3.DirectorySeparator, Is.EqualTo ('/'));\n\t\t\t\tAssert.That (level3.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren));\n\n\t\t\t\tvar level2 = level3.ParentFolder;\n\t\t\t\tAssert.That (level2.FullName, Is.EqualTo (\"Level1/Level2\"));\n\t\t\t\tAssert.That (level2.Name, Is.EqualTo (\"Level2\"));\n\t\t\t\tAssert.That (level2.DirectorySeparator, Is.EqualTo ('/'));\n\t\t\t\tAssert.That (level2.Attributes, Is.EqualTo (FolderAttributes.HasChildren));\n\n\t\t\t\tvar level1 = level2.ParentFolder;\n\t\t\t\tAssert.That (level1.FullName, Is.EqualTo (\"Level1\"));\n\t\t\t\tAssert.That (level1.Name, Is.EqualTo (\"Level1\"));\n\t\t\t\tAssert.That (level1.DirectorySeparator, Is.EqualTo ('/'));\n\t\t\t\tAssert.That (level1.Attributes, Is.EqualTo (FolderAttributes.HasChildren));\n\n\t\t\t\tvar personal = level1.ParentFolder;\n\t\t\t\tAssert.That (personal.FullName, Is.EqualTo (string.Empty));\n\t\t\t\tAssert.That (personal.Name, Is.EqualTo (string.Empty));\n\t\t\t\tAssert.That (personal.IsNamespace, Is.True, \"IsNamespace\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateIdentifyCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 ID NIL\\r\\n\", \"common.id.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 ID (\\\"name\\\" \\\"MailKit\\\" \\\"version\\\" \\\"1.0\\\" \\\"vendor\\\" \\\"Xamarin Inc.\\\" \\\"address\\\" {35+}\\r\\n1 Memorial Dr.\\r\\nCambridge, MA 02142)\\r\\n\", \"common.id.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 ID (\\\"name\\\" \\\"MailKit\\\" \\\"version\\\" \\\"1.0\\\" \\\"vendor\\\" \\\"Xamarin Inc.\\\" \\\"address\\\" NIL)\\r\\n\", \"common.id.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIdentify ()\n\t\t{\n\t\t\tvar commands = CreateIdentifyCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tImapImplementation implementation;\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\n\t\t\t\timplementation = client.Identify (null);\n\t\t\t\tAssert.That (implementation, Is.Not.Null, \"Expected a non-null ID response.\");\n\t\t\t\tAssert.That (implementation.Name, Is.EqualTo (\"GImap\"));\n\t\t\t\tAssert.That (implementation.Vendor, Is.EqualTo (\"Google, Inc.\"));\n\t\t\t\tAssert.That (implementation.SupportUrl, Is.EqualTo (\"http://support.google.com/mail\"));\n\t\t\t\tAssert.That (implementation.Version, Is.EqualTo (\"gmail_imap_150623.03_p1\"));\n\t\t\t\tAssert.That (implementation.Properties[\"remote-host\"], Is.EqualTo (\"127.0.0.1\"));\n\n\t\t\t\timplementation = new ImapImplementation {\n\t\t\t\t\tName = \"MailKit\",\n\t\t\t\t\tVersion = \"1.0\",\n\t\t\t\t\tVendor = \"Xamarin Inc.\",\n\t\t\t\t\tAddress = \"1 Memorial Dr.\\r\\nCambridge, MA 02142\"\n\t\t\t\t};\n\n\t\t\t\timplementation = client.Identify (implementation);\n\t\t\t\tAssert.That (implementation, Is.Not.Null, \"Expected a non-null ID response.\");\n\t\t\t\tAssert.That (implementation.Name, Is.EqualTo (\"GImap\"));\n\t\t\t\tAssert.That (implementation.Vendor, Is.EqualTo (\"Google, Inc.\"));\n\t\t\t\tAssert.That (implementation.SupportUrl, Is.EqualTo (\"http://support.google.com/mail\"));\n\t\t\t\tAssert.That (implementation.Version, Is.EqualTo (\"gmail_imap_150623.03_p1\"));\n\t\t\t\tAssert.That (implementation.Properties[\"remote-host\"], Is.EqualTo (\"127.0.0.1\"));\n\n\t\t\t\timplementation = new ImapImplementation {\n\t\t\t\t\tName = \"MailKit\",\n\t\t\t\t\tVersion = \"1.0\",\n\t\t\t\t\tVendor = \"Xamarin Inc.\",\n\t\t\t\t\tAddress = null\n\t\t\t\t};\n\n\t\t\t\timplementation = client.Identify (implementation);\n\t\t\t\tAssert.That (implementation, Is.Not.Null, \"Expected a non-null ID response.\");\n\t\t\t\tAssert.That (implementation.Name, Is.EqualTo (\"GImap\"));\n\t\t\t\tAssert.That (implementation.Vendor, Is.EqualTo (\"Google, Inc.\"));\n\t\t\t\tAssert.That (implementation.SupportUrl, Is.EqualTo (\"http://support.google.com/mail\"));\n\t\t\t\tAssert.That (implementation.Version, Is.EqualTo (\"gmail_imap_150623.03_p1\"));\n\t\t\t\tAssert.That (implementation.Properties[\"remote-host\"], Is.EqualTo (\"127.0.0.1\"));\n\n\t\t\t\t// disable ID support\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Id;\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Identify (null));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestIdentifyAsync ()\n\t\t{\n\t\t\tvar commands = CreateIdentifyCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tImapImplementation implementation;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (5));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"OAUTHBEARER\"), \"Expected SASL OAUTHBEARER auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailAuthenticatedCapabilities));\n\n\t\t\t\timplementation = await client.IdentifyAsync (null);\n\t\t\t\tAssert.That (implementation, Is.Not.Null, \"Expected a non-null ID response.\");\n\t\t\t\tAssert.That (implementation.Name, Is.EqualTo (\"GImap\"));\n\t\t\t\tAssert.That (implementation.Vendor, Is.EqualTo (\"Google, Inc.\"));\n\t\t\t\tAssert.That (implementation.SupportUrl, Is.EqualTo (\"http://support.google.com/mail\"));\n\t\t\t\tAssert.That (implementation.Version, Is.EqualTo (\"gmail_imap_150623.03_p1\"));\n\t\t\t\tAssert.That (implementation.Properties[\"remote-host\"], Is.EqualTo (\"127.0.0.1\"));\n\n\t\t\t\timplementation = new ImapImplementation {\n\t\t\t\t\tName = \"MailKit\",\n\t\t\t\t\tVersion = \"1.0\",\n\t\t\t\t\tVendor = \"Xamarin Inc.\",\n\t\t\t\t\tAddress = \"1 Memorial Dr.\\r\\nCambridge, MA 02142\"\n\t\t\t\t};\n\n\t\t\t\timplementation = await client.IdentifyAsync (implementation);\n\t\t\t\tAssert.That (implementation, Is.Not.Null, \"Expected a non-null ID response.\");\n\t\t\t\tAssert.That (implementation.Name, Is.EqualTo (\"GImap\"));\n\t\t\t\tAssert.That (implementation.Vendor, Is.EqualTo (\"Google, Inc.\"));\n\t\t\t\tAssert.That (implementation.SupportUrl, Is.EqualTo (\"http://support.google.com/mail\"));\n\t\t\t\tAssert.That (implementation.Version, Is.EqualTo (\"gmail_imap_150623.03_p1\"));\n\t\t\t\tAssert.That (implementation.Properties[\"remote-host\"], Is.EqualTo (\"127.0.0.1\"));\n\n\t\t\t\timplementation = new ImapImplementation {\n\t\t\t\t\tName = \"MailKit\",\n\t\t\t\t\tVersion = \"1.0\",\n\t\t\t\t\tVendor = \"Xamarin Inc.\",\n\t\t\t\t\tAddress = null\n\t\t\t\t};\n\n\t\t\t\timplementation = await client.IdentifyAsync (implementation);\n\t\t\t\tAssert.That (implementation, Is.Not.Null, \"Expected a non-null ID response.\");\n\t\t\t\tAssert.That (implementation.Name, Is.EqualTo (\"GImap\"));\n\t\t\t\tAssert.That (implementation.Vendor, Is.EqualTo (\"Google, Inc.\"));\n\t\t\t\tAssert.That (implementation.SupportUrl, Is.EqualTo (\"http://support.google.com/mail\"));\n\t\t\t\tAssert.That (implementation.Version, Is.EqualTo (\"gmail_imap_150623.03_p1\"));\n\t\t\t\tAssert.That (implementation.Properties[\"remote-host\"], Is.EqualTo (\"127.0.0.1\"));\n\n\t\t\t\t// disable ID support\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Id;\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.IdentifyAsync (null));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateIdleCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 IDLE\\r\\n\", \"gmail.idle.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006\", \"DONE\\r\\n\", \"gmail.idle-done.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIdle ()\n\t\t{\n\t\t\tvar commands = CreateIdleCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var done = new CancellationTokenSource ()) {\n\t\t\t\t\tAssert.Throws<ArgumentException> (() => client.Idle (CancellationToken.None));\n\n\t\t\t\t\t// Should throw InvalidOperationException until a folder is selected.\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Idle (done.Token));\n\n\t\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t\tint count = 0, expunged = 0, flags = 0;\n\t\t\t\t\tbool droppedToZero = false;\n\n\t\t\t\t\tinbox.MessageExpunged += (o, e) => {\n\t\t\t\t\t\texpunged++;\n\t\t\t\t\t\tAssert.That (e.Index, Is.EqualTo (0), \"Expunged Index\");\n\t\t\t\t\t};\n\t\t\t\t\tinbox.MessageFlagsChanged += (o, e) => {\n\t\t\t\t\t\tflags++;\n\t\t\t\t\t\tAssert.That (e.Flags, Is.EqualTo (MessageFlags.Answered | MessageFlags.Deleted | MessageFlags.Seen), \"Flags\");\n\t\t\t\t\t};\n\t\t\t\t\tinbox.CountChanged += (o, e) => {\n\t\t\t\t\t\tcount++;\n\n\t\t\t\t\t\tif (inbox.Count == 0)\n\t\t\t\t\t\t\tdroppedToZero = true;\n\t\t\t\t\t\telse if (droppedToZero && inbox.Count == 1)\n\t\t\t\t\t\t\tdone.Cancel ();\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Idle (done.Token);\n\n\t\t\t\t\tAssert.That (expunged, Is.EqualTo (21), \"Unexpected number of Expunged events\");\n\t\t\t\t\tAssert.That (count, Is.EqualTo (2), \"Unexpected number of CountChanged events\");\n\t\t\t\t\tAssert.That (flags, Is.EqualTo (21), \"Unexpected number of FlagsChanged events\");\n\t\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestIdleAsync ()\n\t\t{\n\t\t\tvar commands = CreateIdleCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var done = new CancellationTokenSource ()) {\n\t\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => client.IdleAsync (CancellationToken.None));\n\n\t\t\t\t\t// Should throw InvalidOperationException until a folder is selected.\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (() => client.IdleAsync (done.Token));\n\n\t\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\t\tint count = 0, expunged = 0, flags = 0;\n\t\t\t\t\tbool droppedToZero = false;\n\n\t\t\t\t\tinbox.MessageExpunged += (o, e) => {\n\t\t\t\t\t\texpunged++;\n\t\t\t\t\t\tAssert.That (e.Index, Is.EqualTo (0), \"Expunged Index\");\n\t\t\t\t\t};\n\t\t\t\t\tinbox.MessageFlagsChanged += (o, e) => {\n\t\t\t\t\t\tflags++;\n\t\t\t\t\t\tAssert.That (e.Flags, Is.EqualTo (MessageFlags.Answered | MessageFlags.Deleted | MessageFlags.Seen), \"Flags\");\n\t\t\t\t\t};\n\t\t\t\t\tinbox.CountChanged += (o, e) => {\n\t\t\t\t\t\tcount++;\n\n\t\t\t\t\t\tif (inbox.Count == 0)\n\t\t\t\t\t\t\tdroppedToZero = true;\n\t\t\t\t\t\telse if (droppedToZero && inbox.Count == 1)\n\t\t\t\t\t\t\tdone.Cancel ();\n\t\t\t\t\t};\n\n\t\t\t\t\tawait client.IdleAsync (done.Token);\n\n\t\t\t\t\tAssert.That (expunged, Is.EqualTo (21), \"Unexpected number of Expunged events\");\n\t\t\t\t\tAssert.That (count, Is.EqualTo (2), \"Unexpected number of CountChanged events\");\n\t\t\t\t\tAssert.That (flags, Is.EqualTo (21), \"Unexpected number of FlagsChanged events\");\n\t\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateIdleNotSupportedCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIdleNotSupported ()\n\t\t{\n\t\t\tvar commands = CreateIdleNotSupportedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// disable IDLE\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Idle;\n\n\t\t\t\tusing (var done = new CancellationTokenSource ())\n\t\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Idle (done.Token));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestIdleNotSupportedAsync ()\n\t\t{\n\t\t\tvar commands = CreateIdleNotSupportedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\t// disable IDLE\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Idle;\n\n\t\t\t\tusing (var done = new CancellationTokenSource ())\n\t\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.IdleAsync (done.Token));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\t// TODO: test MessageNew w/ headers\n\t\tstatic List<ImapReplayCommand> CreateNotifyCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting-preauth.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"%\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.notify-list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 EXAMINE Folder (CONDSTORE)\\r\\n\", \"dovecot.examine-folder.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 NOTIFY SET STATUS (PERSONAL (MailboxName SubscriptionChange)) (SELECTED (MessageNew (UID FLAGS ENVELOPE BODYSTRUCTURE MODSEQ) MessageExpunge FlagChange)) (SUBTREE (INBOX Folder) (MessageNew MessageExpunge MailboxMetadataChange ServerMetadataChange))\\r\\n\", \"dovecot.notify.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 IDLE\\r\\n\", \"dovecot.notify-idle.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006\", \"DONE\\r\\n\", \"dovecot.notify-idle-done.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 NOTIFY NONE\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 NOTIFY SET STATUS (SELECTED (MessageNew (UID FLAGS ENVELOPE BODYSTRUCTURE MODSEQ BODY.PEEK[HEADER.FIELDS (REFERENCES)]) MessageExpunge FlagChange)) (MAILBOXES INBOX (MessageNew MessageExpunge MailboxMetadataChange ServerMetadataChange))\\r\\n\", \"dovecot.notify.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 NOTIFY NONE\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotify ()\n\t\t{\n\t\t\tconst MessageSummaryItems items = MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq;\n\t\t\tvar commands = CreateNotifyCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tvar folder = folders.FirstOrDefault (x => x.Name == \"Folder\");\n\t\t\t\tvar deleteMe = folders.FirstOrDefault (x => x.Name == \"DeleteMe\");\n\t\t\t\tvar renameMe = folders.FirstOrDefault (x => x.Name == \"RenameMe\");\n\t\t\t\tvar subscribeMe = folders.FirstOrDefault (x => x.Name == \"SubscribeMe\");\n\t\t\t\tvar unsubscribeMe = folders.FirstOrDefault (x => x.Name == \"UnsubscribeMe\");\n\n\t\t\t\tfolder.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tclient.Notify (true, new List<ImapEventGroup> {\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Personal, new List<ImapEvent> {\n\t\t\t\t\t\tImapEvent.MailboxName,\n\t\t\t\t\t\tImapEvent.SubscriptionChange\n\t\t\t\t\t}),\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Selected, new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (items),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.FlagChange\n\t\t\t\t\t}),\n\t\t\t\t\tnew ImapEventGroup (new ImapMailboxFilter.Subtree (inbox, folder), new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (new FetchRequest ()),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.MailboxMetadataChange,\n\t\t\t\t\t\tImapEvent.ServerMetadataChange\n\t\t\t\t\t}),\n\t\t\t\t});\n\n\t\t\t\t// Passing true to notify will update Count\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (1), \"Messages in INBOX\");\n\t\t\t\tAssert.That (folder, Has.Count.EqualTo (0), \"Messages in Folder\");\n\n\t\t\t\tIMessageSummary fetched = null;\n\t\t\t\tvar folderMessageSummaryFetched = 0;\n\t\t\t\tvar folderCountChanged = 0;\n\t\t\t\tvar folderFlagsChanged = 0;\n\n\t\t\t\tvar inboxHighestModSeqChanged = 0;\n\t\t\t\tvar inboxMetadataChanged = 0;\n\t\t\t\tvar inboxCountChanged = 0;\n\t\t\t\tvar metadataChanged = 0;\n\t\t\t\tvar unsubscribed = 0;\n\t\t\t\tvar subscribed = 0;\n\t\t\t\tvar created = 0;\n\t\t\t\tvar deleted = 0;\n\t\t\t\tvar renamed = 0;\n\n\t\t\t\tclient.FolderCreated += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Folder.FullName, Is.EqualTo (\"NewFolder\"), \"e.Folder.FullName\");\n\t\t\t\t\tAssert.That (e.Folder.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"e.Folder.Attributes\");\n\t\t\t\t\tcreated++;\n\t\t\t\t};\n\n\t\t\t\tclient.MetadataChanged += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Metadata.Tag.Id, Is.EqualTo (\"/private/comment\"), \"Metadata.Tag\");\n\t\t\t\t\tAssert.That (e.Metadata.Value, Is.EqualTo (\"this is a comment\"), \"Metadata.Value\");\n\t\t\t\t\tmetadataChanged++;\n\t\t\t\t};\n\n\t\t\t\tinbox.MetadataChanged += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Metadata.Tag.Id, Is.EqualTo (\"/private/comment\"), \"Metadata.Tag\");\n\t\t\t\t\tAssert.That (e.Metadata.Value, Is.EqualTo (\"this is a comment\"), \"Metadata.Value\");\n\t\t\t\t\tinboxMetadataChanged++;\n\t\t\t\t};\n\n\t\t\t\tdeleteMe.Deleted += (sender, e) => {\n\t\t\t\t\tdeleted++;\n\t\t\t\t};\n\n\t\t\t\trenameMe.Renamed += (sender, e) => {\n\t\t\t\t\tAssert.That (renameMe.FullName, Is.EqualTo (\"RenamedFolder\"), \"renameMe.FullName\");\n\t\t\t\t\trenamed++;\n\t\t\t\t};\n\n\t\t\t\tsubscribeMe.Subscribed += (sender, e) => {\n\t\t\t\t\tsubscribed++;\n\t\t\t\t};\n\n\t\t\t\tunsubscribeMe.Unsubscribed += (sender, e) => {\n\t\t\t\t\tunsubscribed++;\n\t\t\t\t};\n\n\t\t\t\tinbox.HighestModSeqChanged += (sender, e) => {\n\t\t\t\t\tinboxHighestModSeqChanged++;\n\t\t\t\t};\n\n\t\t\t\tinbox.CountChanged += (sender, e) => {\n\t\t\t\t\tinboxCountChanged++;\n\t\t\t\t};\n\n\t\t\t\tfolder.MessageSummaryFetched += (sender, e) => {\n\t\t\t\t\tfolderMessageSummaryFetched++;\n\t\t\t\t\tfetched = e.Message;\n\t\t\t\t};\n\n\t\t\t\tfolder.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tfolderFlagsChanged++;\n\t\t\t\t};\n\n\t\t\t\tfolder.CountChanged += (sender, e) => {\n\t\t\t\t\tfolderCountChanged++;\n\t\t\t\t};\n\n\t\t\t\tusing (var done = new CancellationTokenSource ()) {\n\t\t\t\t\tfolder.CountChanged += (o, e) => {\n\t\t\t\t\t\tdone.Cancel ();\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Idle (done.Token);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (3), \"Inbox.Count\");\n\t\t\t\tAssert.That (inbox.Unread, Is.EqualTo (3), \"Inbox.Unread\");\n\t\t\t\tAssert.That (inbox.UidNext.Value.Id, Is.EqualTo (4), \"Inbox.UidNext\");\n\t\t\t\tAssert.That (inbox.HighestModSeq, Is.EqualTo (3), \"Inbox.HighestModSeq\");\n\n\t\t\t\tAssert.That (inboxHighestModSeqChanged, Is.EqualTo (1), \"Inbox.HighestModSeqChanged\");\n\t\t\t\tAssert.That (inboxMetadataChanged, Is.EqualTo (1), \"Inbox.MetadataChanged\");\n\t\t\t\tAssert.That (inboxCountChanged, Is.EqualTo (1), \"Inbox.CountChanged\");\n\n\t\t\t\tAssert.That (created, Is.EqualTo (1), \"FolderCreated\");\n\t\t\t\tAssert.That (deleted, Is.EqualTo (1), \"deleteMe.Deleted\");\n\t\t\t\tAssert.That (renamed, Is.EqualTo (1), \"renameMe.Renamed\");\n\t\t\t\tAssert.That (subscribed, Is.EqualTo (1), \"subscribeMe.Deleted\");\n\t\t\t\tAssert.That (unsubscribed, Is.EqualTo (1), \"unsubscribeMe.Renamed\");\n\t\t\t\tAssert.That (metadataChanged, Is.EqualTo (1), \"metadataChanged\");\n\n\t\t\t\tAssert.That (folder, Has.Count.EqualTo (1), \"Folder.Count\");\n\t\t\t\tAssert.That (folderCountChanged, Is.EqualTo (1), \"Folder.CountChanged\");\n\t\t\t\tAssert.That (folderFlagsChanged, Is.EqualTo (1), \"Folder.MessageFlagsChanged\");\n\t\t\t\tAssert.That (folderMessageSummaryFetched, Is.EqualTo (1), \"Folder.MessageSummaryFetched\");\n\n\t\t\t\tAssert.That (fetched.UniqueId.Id, Is.EqualTo (1), \"fetched.UniqueId\");\n\t\t\t\tAssert.That (fetched.Flags.Value, Is.EqualTo (MessageFlags.Recent), \"fetched.Flags\");\n\t\t\t\tAssert.That (fetched.Envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"fetched.Envelope.Subject\");\n\t\t\t\tvar body = fetched.Body as BodyPartBasic;\n\t\t\t\tAssert.That (fetched.Body, Is.Not.Null, \"fetched.Body\");\n\t\t\t\tAssert.That (body.Octets, Is.EqualTo (3028), \"fetched.Body.Octets\");\n\t\t\t\tAssert.That (fetched.ModSeq.Value, Is.EqualTo (1), \"fetched.ModSeq\");\n\n\t\t\t\tclient.DisableNotify ();\n\n\t\t\t\tclient.Notify (true, new List<ImapEventGroup> {\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Selected, new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (items | MessageSummaryItems.References),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.FlagChange\n\t\t\t\t\t}),\n\t\t\t\t\tnew ImapEventGroup (new ImapMailboxFilter.Mailboxes (inbox), new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.MailboxMetadataChange,\n\t\t\t\t\t\tImapEvent.ServerMetadataChange\n\t\t\t\t\t}),\n\t\t\t\t});\n\n\t\t\t\tclient.DisableNotify ();\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestNotifyAsync ()\n\t\t{\n\t\t\tconst MessageSummaryItems items = MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq;\n\t\t\tvar commands = CreateNotifyCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tvar folder = folders.FirstOrDefault (x => x.Name == \"Folder\");\n\t\t\t\tvar deleteMe = folders.FirstOrDefault (x => x.Name == \"DeleteMe\");\n\t\t\t\tvar renameMe = folders.FirstOrDefault (x => x.Name == \"RenameMe\");\n\t\t\t\tvar subscribeMe = folders.FirstOrDefault (x => x.Name == \"SubscribeMe\");\n\t\t\t\tvar unsubscribeMe = folders.FirstOrDefault (x => x.Name == \"UnsubscribeMe\");\n\n\t\t\t\tawait folder.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tawait client.NotifyAsync (true, new List<ImapEventGroup> {\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Personal, new List<ImapEvent> {\n\t\t\t\t\t\tImapEvent.MailboxName,\n\t\t\t\t\t\tImapEvent.SubscriptionChange\n\t\t\t\t\t}),\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Selected, new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (items),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.FlagChange\n\t\t\t\t\t}),\n\t\t\t\t\tnew ImapEventGroup (new ImapMailboxFilter.Subtree (inbox, folder), new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (new FetchRequest ()),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.MailboxMetadataChange,\n\t\t\t\t\t\tImapEvent.ServerMetadataChange\n\t\t\t\t\t}),\n\t\t\t\t});\n\n\t\t\t\t// Passing true to notify will update Count\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (1), \"Messages in INBOX\");\n\t\t\t\tAssert.That (folder, Has.Count.EqualTo (0), \"Messages in Folder\");\n\n\t\t\t\tIMessageSummary fetched = null;\n\t\t\t\tvar folderMessageSummaryFetched = 0;\n\t\t\t\tvar folderCountChanged = 0;\n\t\t\t\tvar folderFlagsChanged = 0;\n\n\t\t\t\tvar inboxHighestModSeqChanged = 0;\n\t\t\t\tvar inboxMetadataChanged = 0;\n\t\t\t\tvar inboxCountChanged = 0;\n\t\t\t\tvar metadataChanged = 0;\n\t\t\t\tvar unsubscribed = 0;\n\t\t\t\tvar subscribed = 0;\n\t\t\t\tvar created = 0;\n\t\t\t\tvar deleted = 0;\n\t\t\t\tvar renamed = 0;\n\n\t\t\t\tclient.FolderCreated += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Folder.FullName, Is.EqualTo (\"NewFolder\"), \"e.Folder.FullName\");\n\t\t\t\t\tAssert.That (e.Folder.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren), \"e.Folder.Attributes\");\n\t\t\t\t\tcreated++;\n\t\t\t\t};\n\n\t\t\t\tclient.MetadataChanged += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Metadata.Tag.Id, Is.EqualTo (\"/private/comment\"), \"Metadata.Tag\");\n\t\t\t\t\tAssert.That (e.Metadata.Value, Is.EqualTo (\"this is a comment\"), \"Metadata.Value\");\n\t\t\t\t\tmetadataChanged++;\n\t\t\t\t};\n\n\t\t\t\tinbox.MetadataChanged += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Metadata.Tag.Id, Is.EqualTo (\"/private/comment\"), \"Metadata.Tag\");\n\t\t\t\t\tAssert.That (e.Metadata.Value, Is.EqualTo (\"this is a comment\"), \"Metadata.Value\");\n\t\t\t\t\tinboxMetadataChanged++;\n\t\t\t\t};\n\n\t\t\t\tdeleteMe.Deleted += (sender, e) => {\n\t\t\t\t\tdeleted++;\n\t\t\t\t};\n\n\t\t\t\trenameMe.Renamed += (sender, e) => {\n\t\t\t\t\tAssert.That (renameMe.FullName, Is.EqualTo (\"RenamedFolder\"), \"renameMe.FullName\");\n\t\t\t\t\trenamed++;\n\t\t\t\t};\n\n\t\t\t\tsubscribeMe.Subscribed += (sender, e) => {\n\t\t\t\t\tsubscribed++;\n\t\t\t\t};\n\n\t\t\t\tunsubscribeMe.Unsubscribed += (sender, e) => {\n\t\t\t\t\tunsubscribed++;\n\t\t\t\t};\n\n\t\t\t\tinbox.HighestModSeqChanged += (sender, e) => {\n\t\t\t\t\tinboxHighestModSeqChanged++;\n\t\t\t\t};\n\n\t\t\t\tinbox.CountChanged += (sender, e) => {\n\t\t\t\t\tinboxCountChanged++;\n\t\t\t\t};\n\n\t\t\t\tfolder.MessageSummaryFetched += (sender, e) => {\n\t\t\t\t\tfolderMessageSummaryFetched++;\n\t\t\t\t\tfetched = e.Message;\n\t\t\t\t};\n\n\t\t\t\tfolder.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tfolderFlagsChanged++;\n\t\t\t\t};\n\n\t\t\t\tfolder.CountChanged += (sender, e) => {\n\t\t\t\t\tfolderCountChanged++;\n\t\t\t\t};\n\n\t\t\t\tusing (var done = new CancellationTokenSource ()) {\n\t\t\t\t\tfolder.CountChanged += (o, e) => {\n\t\t\t\t\t\tdone.Cancel ();\n\t\t\t\t\t};\n\n\t\t\t\t\tawait client.IdleAsync (done.Token);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (3), \"Inbox.Count\");\n\t\t\t\tAssert.That (inbox.Unread, Is.EqualTo (3), \"Inbox.Unread\");\n\t\t\t\tAssert.That (inbox.UidNext.Value.Id, Is.EqualTo (4), \"Inbox.UidNext\");\n\t\t\t\tAssert.That (inbox.HighestModSeq, Is.EqualTo (3), \"Inbox.HighestModSeq\");\n\n\t\t\t\tAssert.That (inboxHighestModSeqChanged, Is.EqualTo (1), \"Inbox.HighestModSeqChanged\");\n\t\t\t\tAssert.That (inboxMetadataChanged, Is.EqualTo (1), \"Inbox.MetadataChanged\");\n\t\t\t\tAssert.That (inboxCountChanged, Is.EqualTo (1), \"Inbox.CountChanged\");\n\n\t\t\t\tAssert.That (created, Is.EqualTo (1), \"FolderCreated\");\n\t\t\t\tAssert.That (deleted, Is.EqualTo (1), \"deleteMe.Deleted\");\n\t\t\t\tAssert.That (renamed, Is.EqualTo (1), \"renameMe.Renamed\");\n\t\t\t\tAssert.That (subscribed, Is.EqualTo (1), \"subscribeMe.Deleted\");\n\t\t\t\tAssert.That (unsubscribed, Is.EqualTo (1), \"unsubscribeMe.Renamed\");\n\t\t\t\tAssert.That (metadataChanged, Is.EqualTo (1), \"metadataChanged\");\n\n\t\t\t\tAssert.That (folder, Has.Count.EqualTo (1), \"Folder.Count\");\n\t\t\t\tAssert.That (folderCountChanged, Is.EqualTo (1), \"Folder.CountChanged\");\n\t\t\t\tAssert.That (folderFlagsChanged, Is.EqualTo (1), \"Folder.MessageFlagsChanged\");\n\t\t\t\tAssert.That (folderMessageSummaryFetched, Is.EqualTo (1), \"Folder.MessageSummaryFetched\");\n\n\t\t\t\tAssert.That (fetched.UniqueId.Id, Is.EqualTo (1), \"fetched.UniqueId\");\n\t\t\t\tAssert.That (fetched.Flags.Value, Is.EqualTo (MessageFlags.Recent), \"fetched.Flags\");\n\t\t\t\tAssert.That (fetched.Envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"fetched.Envelope.Subject\");\n\t\t\t\tvar body = fetched.Body as BodyPartBasic;\n\t\t\t\tAssert.That (fetched.Body, Is.Not.Null, \"fetched.Body\");\n\t\t\t\tAssert.That (body.Octets, Is.EqualTo (3028), \"fetched.Body.Octets\");\n\t\t\t\tAssert.That (fetched.ModSeq.Value, Is.EqualTo (1), \"fetched.ModSeq\");\n\n\t\t\t\tawait client.DisableNotifyAsync ();\n\n\t\t\t\tawait client.NotifyAsync (true, new List<ImapEventGroup> {\n\t\t\t\t\tnew ImapEventGroup (ImapMailboxFilter.Selected, new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (items | MessageSummaryItems.References),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.FlagChange\n\t\t\t\t\t}),\n\t\t\t\t\tnew ImapEventGroup (new ImapMailboxFilter.Mailboxes (inbox), new List<ImapEvent> {\n\t\t\t\t\t\tnew ImapEvent.MessageNew (),\n\t\t\t\t\t\tImapEvent.MessageExpunge,\n\t\t\t\t\t\tImapEvent.MailboxMetadataChange,\n\t\t\t\t\t\tImapEvent.ServerMetadataChange\n\t\t\t\t\t}),\n\t\t\t\t});\n\n\t\t\t\tawait client.DisableNotifyAsync ();\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateCompressCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 COMPRESS DEFLATE\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 COMPRESS DEFLATE\\r\\n\", Encoding.ASCII.GetBytes (\"A00000006 NO [COMPRESSIONACTIVE] DEFLATE active via COMPRESS\\r\\n\"), true),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 COMPRESS DEFLATE\\r\\n\", Encoding.ASCII.GetBytes (\"A00000007 NO Compress failed for an unknown reason.\\r\\n\"), true),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\", true),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 UID SEARCH RETURN (ALL) ALL\\r\\n\", \"gmail.search.txt\", true),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK, true),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 UID EXPUNGE 1:3\\r\\n\", \"gmail.expunge.txt\", true),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 LOGOUT\\r\\n\", \"gmail.logout.txt\", true)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCompress ()\n\t\t{\n\t\t\tvar commands = CreateCompressCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Compress ();\n\t\t\t\tclient.Compress ();\n\t\t\t\tAssert.Throws<ImapCommandException> (() => client.Compress ());\n\n\t\t\t\tint changed = 0, expunged = 0;\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tinbox.MessageExpunged += (o, e) => { expunged++; Assert.That (e.Index, Is.EqualTo (0), \"Expunged event message index\"); };\n\t\t\t\tinbox.CountChanged += (o, e) => { changed++; };\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.All);\n\t\t\t\tinbox.AddFlags (uids, MessageFlags.Deleted, true);\n\n\t\t\t\tuids = new UniqueIdRange (0, 1, 3);\n\t\t\t\tinbox.Expunge (uids);\n\n\t\t\t\tAssert.That (expunged, Is.EqualTo (3), \"Unexpected number of Expunged events\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"Unexpected number of CountChanged events\");\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (18), \"Count\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCompressAsync ()\n\t\t{\n\t\t\tvar commands = CreateCompressCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.CompressAsync ();\n\t\t\t\tawait client.CompressAsync ();\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (() => client.CompressAsync ());\n\n\t\t\t\tint changed = 0, expunged = 0;\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tinbox.MessageExpunged += (o, e) => { expunged++; Assert.That (e.Index, Is.EqualTo (0), \"Expunged event message index\"); };\n\t\t\t\tinbox.CountChanged += (o, e) => { changed++; };\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.All);\n\t\t\t\tawait inbox.AddFlagsAsync (uids, MessageFlags.Deleted, true);\n\n\t\t\t\tuids = new UniqueIdRange (0, 1, 3);\n\t\t\t\tawait inbox.ExpungeAsync (uids);\n\n\t\t\t\tAssert.That (expunged, Is.EqualTo (3), \"Unexpected number of Expunged events\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"Unexpected number of CountChanged events\");\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (18), \"Count\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateAccessControlListsCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"acl.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"acl.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 GETACL INBOX\\r\\n\", \"acl.getacl.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LISTRIGHTS INBOX smith\\r\\n\", \"acl.listrights.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 MYRIGHTS INBOX\\r\\n\", \"acl.myrights.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 SETACL INBOX smith +lrswida\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 SETACL INBOX smith -lrswida\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 SETACL INBOX smith lrswida\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 DELETEACL INBOX smith\\r\\n\", ImapReplayCommandResponse.OK)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAccessControlLists ()\n\t\t{\n\t\t\tvar commands = CreateAccessControlListsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (AclInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.Rights.ToString (), Is.EqualTo (\"texk\"), \"Rights\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (AclAuthenticatedCapabilities));\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// GETACL INBOX\n\t\t\t\tvar acl = client.Inbox.GetAccessControlList ();\n\t\t\t\tAssert.That (acl, Has.Count.EqualTo (2), \"The number of access controls does not match.\");\n\t\t\t\tAssert.That (acl[0].Name, Is.EqualTo (\"Fred\"), \"The identifier for the first access control does not match.\");\n\t\t\t\tAssert.That (acl[0].Rights.ToString (), Is.EqualTo (\"rwipslxetad\"), \"The access rights for the first access control does not match.\");\n\t\t\t\tAssert.That (acl[1].Name, Is.EqualTo (\"Chris\"), \"The identifier for the second access control does not match.\");\n\t\t\t\tAssert.That (acl[1].Rights.ToString (), Is.EqualTo (\"lrswi\"), \"The access rights for the second access control does not match.\");\n\n\t\t\t\t// LISTRIGHTS INBOX smith\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.GetAccessRights (null));\n\t\t\t\t//Assert.Throws<ArgumentException> (() => client.Inbox.GetAccessRights (string.Empty));\n\t\t\t\tvar rights = client.Inbox.GetAccessRights (\"smith\");\n\t\t\t\tAssert.That (rights.ToString (), Is.EqualTo (\"lrswipkxtecda0123456789\"), \"The access rights do not match for user smith.\");\n\n\t\t\t\t// MYRIGHTS INBOX\n\t\t\t\trights = client.Inbox.GetMyAccessRights ();\n\t\t\t\tAssert.That (rights.ToString (), Is.EqualTo (\"rwiptsldaex\"), \"My access rights do not match.\");\n\n\t\t\t\t// SETACL INBOX smith +lrswida\n\t\t\t\tvar empty = new AccessRights (string.Empty);\n\t\t\t\trights = new AccessRights (\"lrswida\");\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.AddAccessRights (null, rights));\n\t\t\t\t//Assert.Throws<ArgumentException> (() => client.Inbox.AddAccessRights (string.Empty, rights));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.AddAccessRights (\"smith\", null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Inbox.AddAccessRights (\"smith\", empty));\n\t\t\t\tclient.Inbox.AddAccessRights (\"smith\", rights);\n\n\t\t\t\t// SETACL INBOX smith -lrswida\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.RemoveAccessRights (null, rights));\n\t\t\t\t//Assert.Throws<ArgumentException> (() => client.Inbox.RemoveAccessRights (string.Empty, rights));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.RemoveAccessRights (\"smith\", null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Inbox.RemoveAccessRights (\"smith\", empty));\n\t\t\t\tclient.Inbox.RemoveAccessRights (\"smith\", rights);\n\n\t\t\t\t// SETACL INBOX smith lrswida\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.SetAccessRights (null, rights));\n\t\t\t\t//Assert.Throws<ArgumentException> (() => client.Inbox.SetAccessRights (string.Empty, rights));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.SetAccessRights (\"smith\", null));\n\t\t\t\tclient.Inbox.SetAccessRights (\"smith\", rights);\n\n\t\t\t\t// DELETEACL INBOX smith\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Inbox.RemoveAccess (null));\n\t\t\t\t//Assert.Throws<ArgumentException> (() => client.Inbox.RemoveAccess (string.Empty));\n\t\t\t\tclient.Inbox.RemoveAccess (\"smith\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestAccessControlListsAsync ()\n\t\t{\n\t\t\tvar commands = CreateAccessControlListsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (AclInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\t\t\t\tAssert.That (client.Rights.ToString (), Is.EqualTo (\"texk\"), \"Rights\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (AclAuthenticatedCapabilities));\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// GETACL INBOX\n\t\t\t\tvar acl = await client.Inbox.GetAccessControlListAsync ();\n\t\t\t\tAssert.That (acl, Has.Count.EqualTo (2), \"The number of access controls does not match.\");\n\t\t\t\tAssert.That (acl[0].Name, Is.EqualTo (\"Fred\"), \"The identifier for the first access control does not match.\");\n\t\t\t\tAssert.That (acl[0].Rights.ToString (), Is.EqualTo (\"rwipslxetad\"), \"The access rights for the first access control does not match.\");\n\t\t\t\tAssert.That (acl[1].Name, Is.EqualTo (\"Chris\"), \"The identifier for the second access control does not match.\");\n\t\t\t\tAssert.That (acl[1].Rights.ToString (), Is.EqualTo (\"lrswi\"), \"The access rights for the second access control does not match.\");\n\n\t\t\t\t// LISTRIGHTS INBOX smith\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.GetAccessRightsAsync (null));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.GetAccessRightsAsync (string.Empty));\n\t\t\t\tvar rights = await client.Inbox.GetAccessRightsAsync (\"smith\");\n\t\t\t\tAssert.That (rights.ToString (), Is.EqualTo (\"lrswipkxtecda0123456789\"), \"The access rights do not match for user smith.\");\n\n\t\t\t\t// MYRIGHTS INBOX\n\t\t\t\trights = await client.Inbox.GetMyAccessRightsAsync ();\n\t\t\t\tAssert.That (rights.ToString (), Is.EqualTo (\"rwiptsldaex\"), \"My access rights do not match.\");\n\n\t\t\t\t// SETACL INBOX smith +lrswida\n\t\t\t\tvar empty = new AccessRights (string.Empty);\n\t\t\t\trights = new AccessRights (\"lrswida\");\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.AddAccessRightsAsync (null, rights));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.AddAccessRightsAsync (string.Empty, rights));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.AddAccessRightsAsync (\"smith\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.AddAccessRightsAsync (\"smith\", empty));\n\t\t\t\tawait client.Inbox.AddAccessRightsAsync (\"smith\", rights);\n\n\t\t\t\t// SETACL INBOX smith -lrswida\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.RemoveAccessRightsAsync (null, rights));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.RemoveAccessRightsAsync (string.Empty, rights));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.RemoveAccessRightsAsync (\"smith\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.RemoveAccessRightsAsync (\"smith\", empty));\n\t\t\t\tawait client.Inbox.RemoveAccessRightsAsync (\"smith\", rights);\n\n\t\t\t\t// SETACL INBOX smith lrswida\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.SetAccessRightsAsync (null, rights));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.SetAccessRightsAsync (string.Empty, rights));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.SetAccessRightsAsync (\"smith\", null));\n\t\t\t\tawait client.Inbox.SetAccessRightsAsync (\"smith\", rights);\n\n\t\t\t\t// DELETEACL INBOX smith\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.Inbox.RemoveAccessAsync (null));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await client.Inbox.RemoveAccessAsync (string.Empty));\n\t\t\t\tawait client.Inbox.RemoveAccessAsync (\"smith\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateMetadataCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"metadata.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"metadata.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 GETMETADATA \\\"\\\" /private/comment\\r\\n\", \"metadata.getmetadata.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 GETMETADATA \\\"\\\" (MAXSIZE 1024 DEPTH infinity) (/private)\\r\\n\", \"metadata.getmetadata-options.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 GETMETADATA \\\"\\\" /private/comment /shared/comment\\r\\n\", \"metadata.getmetadata-multi.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 SETMETADATA \\\"\\\" (/private/comment \\\"this is a comment\\\")\\r\\n\", \"metadata.setmetadata-noprivate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 SETMETADATA \\\"\\\" (/private/comment \\\"this comment is too long!\\\")\\r\\n\", \"metadata.setmetadata-maxsize.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 SETMETADATA \\\"\\\" (/private/comment \\\"this is a private comment\\\" /shared/comment \\\"this is a shared comment\\\")\\r\\n\", \"metadata.setmetadata-toomany.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 SETMETADATA \\\"\\\" (/private/comment NIL)\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 GETMETADATA INBOX /private/comment\\r\\n\", \"metadata.inbox-getmetadata.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000013 GETMETADATA INBOX (MAXSIZE 1024 DEPTH infinity) (/private)\\r\\n\", \"metadata.inbox-getmetadata-options.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000014 GETMETADATA INBOX /private/comment /shared/comment\\r\\n\", \"metadata.inbox-getmetadata-multi.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000015 SETMETADATA INBOX (/private/comment \\\"this is a comment\\\")\\r\\n\", \"metadata.inbox-setmetadata-noprivate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000016 SETMETADATA INBOX (/private/comment \\\"this comment is too long!\\\")\\r\\n\", \"metadata.inbox-setmetadata-maxsize.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000017 SETMETADATA INBOX (/private/comment \\\"this is a private comment\\\" /shared/comment \\\"this is a shared comment\\\")\\r\\n\", \"metadata.inbox-setmetadata-toomany.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000018 SETMETADATA INBOX (/private/comment NIL)\\r\\n\", ImapReplayCommandResponse.OK)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMetadata ()\n\t\t{\n\t\t\tvar commands = CreateMetadataCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tMetadataCollection metadata;\n\t\t\t\tMetadataOptions options;\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (MetadataInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (MetadataAuthenticatedCapabilities));\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// GETMETADATA\n\t\t\t\tAssert.That (client.GetMetadata (MetadataTag.PrivateComment), Is.EqualTo (\"this is a comment\"), \"The shared comment does not match.\");\n\n\t\t\t\toptions = new MetadataOptions { Depth = int.MaxValue, MaxSize = 1024 };\n\t\t\t\tmetadata = client.GetMetadata (options, new [] { new MetadataTag (\"/private\") });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (1), \"Expected 1 metadata value.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"Metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"Metadata value did not match.\");\n\t\t\t\tAssert.That (options.LongEntries, Is.EqualTo (2199), \"LongEntries does not match.\");\n\n\t\t\t\tmetadata = client.GetMetadata (new [] { MetadataTag.PrivateComment, MetadataTag.SharedComment });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (2), \"Expected 2 metadata values.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"First metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[1].Tag.Id, Is.EqualTo (MetadataTag.SharedComment.Id), \"Second metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"First metadata value did not match.\");\n\t\t\t\tAssert.That (metadata[1].Value, Is.EqualTo (\"this is a shared comment\"), \"Second metadata value did not match.\");\n\n\t\t\t\t// SETMETADATA\n\t\t\t\tAssert.Throws<ImapCommandException> (() => client.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a comment\")\n\t\t\t\t})), \"Expected NOPRIVATE RESP-CODE.\");\n\t\t\t\tAssert.Throws<ImapCommandException> (() => client.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this comment is too long!\")\n\t\t\t\t})), \"Expected MAXSIZE RESP-CODE.\");\n\t\t\t\tAssert.Throws<ImapCommandException> (() => client.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a private comment\"),\n\t\t\t\t\tnew Metadata (MetadataTag.SharedComment, \"this is a shared comment\"),\n\t\t\t\t})), \"Expected TOOMANY RESP-CODE.\");\n\n\t\t\t\t// This will no-op\n\t\t\t\tclient.SetMetadata (new MetadataCollection ());\n\n\t\t\t\tclient.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, null)\n\t\t\t\t}));\n\n\t\t\t\t// GETMETADATA folder\n\t\t\t\tAssert.That (inbox.GetMetadata (MetadataTag.PrivateComment), Is.EqualTo (\"this is a comment\"), \"The shared comment does not match.\");\n\n\t\t\t\toptions = new MetadataOptions { Depth = int.MaxValue, MaxSize = 1024 };\n\t\t\t\tmetadata = inbox.GetMetadata (options, new [] { new MetadataTag (\"/private\") });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (1), \"Expected 1 metadata value.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"Metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"Metadata value did not match.\");\n\t\t\t\tAssert.That (options.LongEntries, Is.EqualTo (2199), \"LongEntries does not match.\");\n\n\t\t\t\tmetadata = inbox.GetMetadata (new [] { MetadataTag.PrivateComment, MetadataTag.SharedComment });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (2), \"Expected 2 metadata values.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"First metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[1].Tag.Id, Is.EqualTo (MetadataTag.SharedComment.Id), \"Second metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"First metadata value did not match.\");\n\t\t\t\tAssert.That (metadata[1].Value, Is.EqualTo (\"this is a shared comment\"), \"Second metadata value did not match.\");\n\n\t\t\t\t// This will shortcut and return an empty collection\n\t\t\t\tmetadata = client.GetMetadata (Array.Empty<MetadataTag> ());\n\t\t\t\tAssert.That (metadata, Is.Empty, \"Expected 0 metadata values.\");\n\n\t\t\t\t// SETMETADATA folder\n\t\t\t\tAssert.Throws<ImapCommandException> (() => inbox.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a comment\")\n\t\t\t\t})), \"Expected NOPRIVATE RESP-CODE.\");\n\t\t\t\tAssert.Throws<ImapCommandException> (() => inbox.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this comment is too long!\")\n\t\t\t\t})), \"Expected MAXSIZE RESP-CODE.\");\n\t\t\t\tAssert.Throws<ImapCommandException> (() => inbox.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a private comment\"),\n\t\t\t\t\tnew Metadata (MetadataTag.SharedComment, \"this is a shared comment\"),\n\t\t\t\t})), \"Expected TOOMANY RESP-CODE.\");\n\t\t\t\tinbox.SetMetadata (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, null)\n\t\t\t\t}));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMetadataAsync ()\n\t\t{\n\t\t\tvar commands = CreateMetadataCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tMetadataCollection metadata;\n\t\t\t\tMetadataOptions options;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (MetadataInitialCapabilities));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH\"), \"Expected SASL XOAUTH auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN-CLIENTTOKEN\"), \"Expected SASL PLAIN-CLIENTTOKEN auth mechanism\");\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (MetadataAuthenticatedCapabilities));\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// GETMETADATA\n\t\t\t\tAssert.That (await client.GetMetadataAsync (MetadataTag.PrivateComment), Is.EqualTo (\"this is a comment\"), \"The shared comment does not match.\");\n\n\t\t\t\toptions = new MetadataOptions { Depth = int.MaxValue, MaxSize = 1024 };\n\t\t\t\tmetadata = await client.GetMetadataAsync (options, new [] { new MetadataTag (\"/private\") });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (1), \"Expected 1 metadata value.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"Metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"Metadata value did not match.\");\n\t\t\t\tAssert.That (options.LongEntries, Is.EqualTo (2199), \"LongEntries does not match.\");\n\n\t\t\t\tmetadata = await client.GetMetadataAsync (new [] { MetadataTag.PrivateComment, MetadataTag.SharedComment });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (2), \"Expected 2 metadata values.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"First metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[1].Tag.Id, Is.EqualTo (MetadataTag.SharedComment.Id), \"Second metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"First metadata value did not match.\");\n\t\t\t\tAssert.That (metadata[1].Value, Is.EqualTo (\"this is a shared comment\"), \"Second metadata value did not match.\");\n\n\t\t\t\t// This will shortcut and return an empty collection\n\t\t\t\tmetadata = await client.GetMetadataAsync (Array.Empty<MetadataTag> ());\n\t\t\t\tAssert.That (metadata, Is.Empty, \"Expected 0 metadata values.\");\n\n\t\t\t\t// SETMETADATA\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (async () => await client.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a comment\")\n\t\t\t\t})), \"Expected NOPRIVATE RESP-CODE.\");\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (async () => await client.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this comment is too long!\")\n\t\t\t\t})), \"Expected MAXSIZE RESP-CODE.\");\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (async () => await client.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a private comment\"),\n\t\t\t\t\tnew Metadata (MetadataTag.SharedComment, \"this is a shared comment\"),\n\t\t\t\t})), \"Expected TOOMANY RESP-CODE.\");\n\n\t\t\t\t// This will no-op\n\t\t\t\tawait client.SetMetadataAsync (new MetadataCollection ());\n\n\t\t\t\tawait client.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, null)\n\t\t\t\t}));\n\n\t\t\t\t// GETMETADATA folder\n\t\t\t\tAssert.That (await inbox.GetMetadataAsync (MetadataTag.PrivateComment), Is.EqualTo (\"this is a comment\"), \"The shared comment does not match.\");\n\n\t\t\t\toptions = new MetadataOptions { Depth = int.MaxValue, MaxSize = 1024 };\n\t\t\t\tmetadata = await inbox.GetMetadataAsync (options, new [] { new MetadataTag (\"/private\") });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (1), \"Expected 1 metadata value.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"Metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"Metadata value did not match.\");\n\t\t\t\tAssert.That (options.LongEntries, Is.EqualTo (2199), \"LongEntries does not match.\");\n\n\t\t\t\tmetadata = await inbox.GetMetadataAsync (new [] { MetadataTag.PrivateComment, MetadataTag.SharedComment });\n\t\t\t\tAssert.That (metadata, Has.Count.EqualTo (2), \"Expected 2 metadata values.\");\n\t\t\t\tAssert.That (metadata[0].Tag.Id, Is.EqualTo (MetadataTag.PrivateComment.Id), \"First metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[1].Tag.Id, Is.EqualTo (MetadataTag.SharedComment.Id), \"Second metadata tag did not match.\");\n\t\t\t\tAssert.That (metadata[0].Value, Is.EqualTo (\"this is a private comment\"), \"First metadata value did not match.\");\n\t\t\t\tAssert.That (metadata[1].Value, Is.EqualTo (\"this is a shared comment\"), \"Second metadata value did not match.\");\n\n\t\t\t\t// SETMETADATA folder\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (async () => await inbox.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a comment\")\n\t\t\t\t})), \"Expected NOPRIVATE RESP-CODE.\");\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (async () => await inbox.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this comment is too long!\")\n\t\t\t\t})), \"Expected MAXSIZE RESP-CODE.\");\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (async () => await inbox.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, \"this is a private comment\"),\n\t\t\t\t\tnew Metadata (MetadataTag.SharedComment, \"this is a shared comment\"),\n\t\t\t\t})), \"Expected TOOMANY RESP-CODE.\");\n\t\t\t\tawait inbox.SetMetadataAsync (new MetadataCollection (new [] {\n\t\t\t\t\tnew Metadata (MetadataTag.PrivateComment, null)\n\t\t\t\t}));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateNamespaceExtensionCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"common.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNamespaceExtensions ()\n\t\t{\n\t\t\tvar commands = CreateNamespaceExtensionCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"PersonalNamespaces.Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (string.Empty), \"PersonalNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"PersonalNamespaces[0].DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.OtherNamespaces, Has.Count.EqualTo (1), \"OtherNamespaces.Count\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].Path, Is.EqualTo (\"Other Users\"), \"OtherNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"OtherNamespaces[0].DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.SharedNamespaces, Has.Count.EqualTo (1), \"SharedNamespaces.Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].Path, Is.EqualTo (\"Public Folders\"), \"SharedNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"SharedNamespaces[0].DirectorySeparator\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestNamespaceExtensionsAsync ()\n\t\t{\n\t\t\tvar commands = CreateNamespaceExtensionCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"PersonalNamespaces.Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (string.Empty), \"PersonalNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"PersonalNamespaces[0].DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.OtherNamespaces, Has.Count.EqualTo (1), \"OtherNamespaces.Count\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].Path, Is.EqualTo (\"Other Users\"), \"OtherNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"OtherNamespaces[0].DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.SharedNamespaces, Has.Count.EqualTo (1), \"SharedNamespaces.Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].Path, Is.EqualTo (\"Public Folders\"), \"SharedNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"SharedNamespaces[0].DirectorySeparator\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateListInboxFallbackAfterEmptyListExtendedCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"strato.de.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 AUTHENTICATE PLAIN\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000000\", \"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"strato.de.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 CAPABILITY\\r\\n\", \"strato.de.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"strato.de.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"strato.de.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"strato.de.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LOGOUT\\r\\n\", ImapReplayCommandResponse.OK)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestListInboxFallbackAfterEmptyListExtended ()\n\t\t{\n\t\t\tconst ImapCapabilities InitialCapabilities = ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\t\tImapCapabilities.AppendLimit | ImapCapabilities.Enable | ImapCapabilities.Id | ImapCapabilities.Idle | ImapCapabilities.Move |\n\t\t\t\tImapCapabilities.ListExtended | ImapCapabilities.Namespace | ImapCapabilities.Quota | ImapCapabilities.Sort |\n\t\t\t\tImapCapabilities.SpecialUse | ImapCapabilities.UidPlus;\n\t\t\tconst ImapCapabilities AuthenticatedCapabilities = ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\t\tImapCapabilities.AppendLimit | ImapCapabilities.CreateSpecialUse | ImapCapabilities.Quota | ImapCapabilities.Children |\n\t\t\t\tImapCapabilities.CondStore | ImapCapabilities.Enable | ImapCapabilities.ESort | ImapCapabilities.ESearch | ImapCapabilities.I18NLevel |\n\t\t\t\tImapCapabilities.Id | ImapCapabilities.Idle | ImapCapabilities.Move | /*ImapCapabilities.ListStatus | ImapCapabilities.ListExtended |*/\n\t\t\t\tImapCapabilities.LiteralPlus | ImapCapabilities.Namespace | /*ImapCapabilities.Preview |*/ ImapCapabilities.FuzzySearch |\n\t\t\t\tImapCapabilities.Sort | ImapCapabilities.SearchResults | /*ImapCapabilities.SpecialUse |*/ ImapCapabilities.StatusSize |\n\t\t\t\tImapCapabilities.UidPlus | ImapCapabilities.Unselect | ImapCapabilities.Within | ImapCapabilities.XList;\n\t\t\tvar commands = CreateListInboxFallbackAfterEmptyListExtendedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (InitialCapabilities));\n\t\t\t\tAssert.That (client.AppendLimit, Is.EqualTo (104857600), \"AppendLimit\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (AuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"PersonalNamespaces.Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (string.Empty), \"PersonalNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('.'), \"PersonalNamespaces[0].DirectorySeparator\");\n\t\t\t\tAssert.That (client.OtherNamespaces, Has.Count.EqualTo (0), \"OtherNamespaces.Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces, Has.Count.EqualTo (0), \"SharedNamespaces.Count\");\n\n\t\t\t\tAssert.That (client.Inbox, Is.Not.Null, \"Inbox\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestListInboxFallbackAfterEmptyListExtendedAsync ()\n\t\t{\n\t\t\tconst ImapCapabilities InitialCapabilities = ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\t\tImapCapabilities.AppendLimit | ImapCapabilities.Enable | ImapCapabilities.Id | ImapCapabilities.Idle | ImapCapabilities.Move |\n\t\t\t\tImapCapabilities.ListExtended | ImapCapabilities.Namespace | ImapCapabilities.Quota | ImapCapabilities.Sort |\n\t\t\t\tImapCapabilities.SpecialUse | ImapCapabilities.UidPlus;\n\t\t\tconst ImapCapabilities AuthenticatedCapabilities = ImapCapabilities.IMAP4 | ImapCapabilities.IMAP4rev1 | ImapCapabilities.Status |\n\t\t\t\tImapCapabilities.AppendLimit | ImapCapabilities.CreateSpecialUse | ImapCapabilities.Quota | ImapCapabilities.Children |\n\t\t\t\tImapCapabilities.CondStore | ImapCapabilities.Enable | ImapCapabilities.ESort | ImapCapabilities.ESearch | ImapCapabilities.I18NLevel |\n\t\t\t\tImapCapabilities.Id | ImapCapabilities.Idle | ImapCapabilities.Move | /*ImapCapabilities.ListStatus | ImapCapabilities.ListExtended |*/\n\t\t\t\tImapCapabilities.LiteralPlus | ImapCapabilities.Namespace | /*ImapCapabilities.Preview |*/ ImapCapabilities.FuzzySearch |\n\t\t\t\tImapCapabilities.Sort | ImapCapabilities.SearchResults | /*ImapCapabilities.SpecialUse |*/ ImapCapabilities.StatusSize |\n\t\t\t\tImapCapabilities.UidPlus | ImapCapabilities.Unselect | ImapCapabilities.Within | ImapCapabilities.XList;\n\t\t\tvar commands = CreateListInboxFallbackAfterEmptyListExtendedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (InitialCapabilities));\n\t\t\t\tAssert.That (client.AppendLimit, Is.EqualTo (104857600), \"AppendLimit\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (AuthenticatedCapabilities));\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"PersonalNamespaces.Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (string.Empty), \"PersonalNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('.'), \"PersonalNamespaces[0].DirectorySeparator\");\n\t\t\t\tAssert.That (client.OtherNamespaces, Has.Count.EqualTo (0), \"OtherNamespaces.Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces, Has.Count.EqualTo (0), \"SharedNamespaces.Count\");\n\n\t\t\t\tAssert.That (client.Inbox, Is.Not.Null, \"Inbox\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLowercaseImapResponses ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"lowercase.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 CAPABILITY\\r\\n\", \"lowercase.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"\\\"\\r\\n\", \"lowercase.list.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"lowercase.list.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\"\\r\\n\", \"lowercase.list.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"PersonalNamespaces.Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (string.Empty), \"PersonalNamespaces[0].Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('/'), \"PersonalNamespaces[0].DirectorySeparator\");\n\t\t\t\tAssert.That (client.OtherNamespaces, Is.Empty, \"OtherNamespaces.Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces, Is.Empty, \"SharedNamespaces.Count\");\n\n\t\t\t\tAssert.That (client.Inbox, Is.Not.Null, \"Inbox\");\n\t\t\t}\n\t\t}\n\n\t\tstatic void TestQuirksModeDetectionBasedOnGreeting (string greeting, string capability, ImapQuirksMode quirksMode)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", greeting),\n\t\t\t};\n\n\t\t\tif (capability != null)\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", capability));\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tvar engine = (ImapEngine) client.SyncRoot;\n\n\t\t\t\tAssert.That (engine.QuirksMode, Is.EqualTo (quirksMode), \"QuirksMode\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionCourier ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"courier.greeting.txt\", null, ImapQuirksMode.Courier);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionCyrus ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"cyrus.greeting.txt\", null, ImapQuirksMode.Cyrus);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionDomino ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"domino.greeting.txt\", \"domino.capability.txt\", ImapQuirksMode.Domino);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionDovecot ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"dovecot.greeting.txt\", null, ImapQuirksMode.Dovecot);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionExchange2003 ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"exchange.greeting-2003.txt\", \"exchange.capability-preauth.txt\", ImapQuirksMode.Exchange2003);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionExchange2007 ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"exchange.greeting-2007.txt\", \"exchange.capability-preauth.txt\", ImapQuirksMode.Exchange2007);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionGMail ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"gmail.greeting.txt\", \"gmail.capability.txt\", ImapQuirksMode.GMail);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionQQMail ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"qqmail.greeting.txt\", null, ImapQuirksMode.QQMail);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionSmarterMail ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"smartermail.greeting.txt\", \"common.capability.txt\", ImapQuirksMode.SmarterMail);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionUW ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"uw.greeting.txt\", null, ImapQuirksMode.UW);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionYahooMail ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"yahoo.greeting.txt\", \"yahoo.capabilities.txt\", ImapQuirksMode.Yahoo);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionYandex ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"yandex.greeting.txt\", \"yandex.capability.txt\", ImapQuirksMode.Yandex);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQuirksModeDetectionZoho ()\n\t\t{\n\t\t\tTestQuirksModeDetectionBasedOnGreeting (\"zoho.greeting.txt\", \"zoho.capability.txt\", ImapQuirksMode.Zoho);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapCommandExceptionTests.cs",
    "content": "﻿//\n//\n// ImapCommandExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapCommandExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestImapCommandException ()\n\t\t{\n\t\t\tImapCommandException expected;\n\n\t\t\texpected = new ImapCommandException (ImapCommandResponse.Ok, \"This is the response text.\");\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapCommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Response, Is.EqualTo (expected.Response), \"Unexpected Response.\");\n\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (expected.ResponseText), \"Unexpected ResponseText.\");\n\t\t\t}\n\n\t\t\texpected = new ImapCommandException (ImapCommandResponse.Ok, \"This is the response text.\", \"This is the error message.\");\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapCommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Response, Is.EqualTo (expected.Response), \"Unexpected Response.\");\n\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (expected.ResponseText), \"Unexpected ResponseText.\");\n\t\t\t}\n\n\t\t\texpected = new ImapCommandException (ImapCommandResponse.Ok, \"This is the response text.\", \"This is the error message.\", new IOException (\"This is the IO error.\"));\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ImapCommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Response, Is.EqualTo (expected.Response), \"Unexpected Response.\");\n\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (expected.ResponseText), \"Unexpected ResponseText.\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapCommandTests.cs",
    "content": "﻿//\n// ImapCommandTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MimeKit;\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic  class ImapCommandTests : IDisposable\n\t{\n\t\treadonly ImapEngine Engine;\n\t\treadonly ImapFolder Inbox;\n\n\t\tpublic ImapCommandTests ()\n\t\t{\n\t\t\tEngine = new ImapEngine (CreateImapFolderDelegate) {\n\t\t\t\tCapabilities = ImapCapabilities.IMAP4rev1\n\t\t\t};\n\n\t\t\tvar args = new ImapFolderConstructorArgs (Engine, \"INBOX\", FolderAttributes.None, '.');\n\t\t\tInbox = new ImapFolder (args);\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tEngine.Dispose ();\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\n\t\tstatic ImapFolder CreateImapFolderDelegate (ImapFolderConstructorArgs args)\n\t\t{\n\t\t\treturn new ImapFolder (args);\n\t\t}\n\n\t\tstatic Task UntaggedResponseHandler (ImapEngine engine, ImapCommand ic, int index, bool doAsync)\n\t\t{\n\t\t\treturn Task.CompletedTask;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapCommand (null, CancellationToken.None, Inbox, \"NOOP\\r\\n\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapCommand (Engine, CancellationToken.None, Inbox, null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapCommand (null, CancellationToken.None, Inbox, FormatOptions.Default, \"NOOP\\r\\n\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapCommand (Engine, CancellationToken.None, Inbox, null, \"NOOP\\r\\n\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapCommand (Engine, CancellationToken.None, Inbox, FormatOptions.Default, null));\n\n\t\t\tvar ic = new ImapCommand (Engine, CancellationToken.None, Inbox, \"NOOP\\r\\n\");\n\t\t\tAssert.Throws<ArgumentNullException> (() => ic.RegisterUntaggedHandler (null, UntaggedResponseHandler));\n\t\t\tAssert.Throws<ArgumentNullException> (() => ic.RegisterUntaggedHandler (\"EVENT\", null));\n\n\t\t\tic.Status = ImapCommandStatus.Queued;\n\t\t\tAssert.Throws<InvalidOperationException> (() => ic.RegisterUntaggedHandler (\"EVENT\", UntaggedResponseHandler));\n\n\t\t\tic.Status = ImapCommandStatus.Active;\n\t\t\tAssert.Throws<InvalidOperationException> (() => ic.RegisterUntaggedHandler (\"EVENT\", UntaggedResponseHandler));\n\n\t\t\tic.Status = ImapCommandStatus.Complete;\n\t\t\tAssert.Throws<InvalidOperationException> (() => ic.RegisterUntaggedHandler (\"EVENT\", UntaggedResponseHandler));\n\n\t\t\tic.Status = ImapCommandStatus.Error;\n\t\t\tAssert.Throws<InvalidOperationException> (() => ic.RegisterUntaggedHandler (\"EVENT\", UntaggedResponseHandler));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatExceptions ()\n\t\t{\n\t\t\ttry {\n\t\t\t\tvar ic = new ImapCommand (Engine, CancellationToken.None, null, \"Lets try %X as a format argument.\");\n\t\t\t\tAssert.Fail (\"Expected FormatException\");\n\t\t\t} catch (FormatException ex) {\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"The %X format specifier is not supported.\"));\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Expected FormatException, but got {ex.GetType ().Name}\");\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tvar ic = ImapCommand.EstimateCommandLength (Engine, \"Lets try %Y as a format argument.\");\n\t\t\t\tAssert.Fail (\"Expected FormatException\");\n\t\t\t} catch (FormatException ex) {\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"The %Y format specifier is not supported.\"));\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Expected FormatException, but got {ex.GetType ().Name}\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEstimateCommandLengthWithLiteralString ()\n\t\t{\n\t\t\tconst string koreanProverb = \"꿩 먹고 알 먹는다\";\n\t\t\tvar literalLength = Encoding.UTF8.GetByteCount (koreanProverb);\n\t\t\tvar expected = $\"SEARCH TEXT {{{literalLength}}}\\r\\n{koreanProverb}\".Length;\n\n\t\t\tvar length = ImapCommand.EstimateCommandLength (Engine, \"SEARCH TEXT %S\", koreanProverb);\n\t\t\tAssert.That (length, Is.EqualTo (expected));\n\n\t\t\ttry {\n\t\t\t\tEngine.Capabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.LiteralPlus;\n\t\t\t\texpected = $\"SEARCH TEXT {{{literalLength}+}}\\r\\n{koreanProverb}\".Length;\n\t\t\t\tlength = ImapCommand.EstimateCommandLength (Engine, \"SEARCH TEXT %S\", koreanProverb);\n\t\t\t\tAssert.That (length, Is.EqualTo (expected), \"LITERAL+\");\n\n\t\t\t\tEngine.Capabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.LiteralMinus;\n\t\t\t\texpected = $\"SEARCH TEXT {{{literalLength}+}}\\r\\n{koreanProverb}\".Length;\n\t\t\t\tlength = ImapCommand.EstimateCommandLength (Engine, \"SEARCH TEXT %S\", koreanProverb);\n\t\t\t\tAssert.That (length, Is.EqualTo (expected), \"LITERAL-\");\n\t\t\t} finally {\n\t\t\t\tEngine.Capabilities = ImapCapabilities.IMAP4rev1;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapEncodingTests.cs",
    "content": "﻿//\n// ImapEncodingTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapEncodingTests\n\t{\n\t\t[Test]\n\t\tpublic void TestAmpersand ()\n\t\t{\n\t\t\tconst string text = \"Jack & Jill\";\n\n\t\t\tvar encoded = ImapEncoding.Encode (text);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"Jack &- Jill\"), $\"UTF-7 encoded text does not match the expected value: {encoded}\");\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (text), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArabicExample ()\n\t\t{\n\t\t\tconst string arabic = \"هل تتكلم اللغة الإنجليزية /العربية؟\";\n\n\t\t\tvar encoded = ImapEncoding.Encode (arabic);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"&BkcGRA- &BioGKgZDBkQGRQ- &BicGRAZEBjoGKQ- &BicGRAYlBkYGLAZEBkoGMgZKBik- /&BicGRAY5BjEGKAZKBikGHw-\"), $\"UTF-7 encoded text does not match the expected value: {encoded}\");\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (arabic), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestJapaneseExample ()\n\t\t{\n\t\t\tconst string japanese = \"狂ったこの世で狂うなら気は確かだ。\";\n\n\t\t\tvar encoded = ImapEncoding.Encode (japanese);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"&csIwYzBfMFMwbk4WMGdywjBGMGowiWwXMG94ujBLMGAwAg-\"), $\"UTF-7 encoded text does not match the expected value: {encoded}\");\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (japanese), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSurrogatePairs ()\n\t\t{\n\t\t\t// Example taken from: http://stackoverflow.com/questions/14347799/how-do-i-create-a-string-with-a-surrogate-pair-inside-of-it\n\t\t\t// which is in turn taken from: http://msmvps.com/blogs/jon_skeet/archive/2009/11/02/omg-ponies-aka-humanity-epic-fail.aspx\n\t\t\tvar text = \"Les Mise\" + char.ConvertFromUtf32 (0x301) + \"rables\";\n\n\t\t\tvar encoded = ImapEncoding.Encode (text);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"Les Mise&AwE-rables\"), $\"UTF-7 encoded text does not match the expected value: {encoded}\");\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (text), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestChineseSurrogatePairs ()\n\t\t{\n\t\t\tconst string chinese = \"‎中國哲學書電子化計劃\";\n\n\t\t\tvar encoded = ImapEncoding.Encode (chinese);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"&IA5OLVcLVPJbeGb4lvtbUFMWighSgw-\"), $\"UTF-7 encoded text does not match the expected value: {encoded}\");\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (chinese), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRfc3501Example ()\n\t\t{\n\t\t\tconst string mixed = \"~peter/mail/台北/日本語\";\n\n\t\t\tvar encoded = ImapEncoding.Encode (mixed);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"~peter/mail/&U,BTFw-/&ZeVnLIqe-\"), $\"UTF-7 encoded text does not match the expected value: {encoded}\");\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (mixed), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDecodeBadRfc3501Example ()\n\t\t{\n\t\t\tconst string encoded = \"&Jjo!\";\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (encoded), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDecodeInvalidUtf7 ()\n\t\t{\n\t\t\tconst string encoded = \"&台北日本語\";\n\n\t\t\tvar decoded = ImapEncoding.Decode (encoded);\n\t\t\tAssert.That (decoded, Is.EqualTo (encoded), $\"UTF-7 decoded text does not match the original text: {decoded}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRfc3501SuperfluousShiftExample ()\n\t\t{\n\t\t\tconst string example = \"&U,BTFw-&ZeVnLIqe-\";\n\n\t\t\t// Note: we may want to modify ImapEncoding.Decode() to fail and return the input text in this case\n\t\t\tvar decoded = ImapEncoding.Decode (example);\n\t\t\tAssert.That (decoded, Is.EqualTo (\"台北日本語\"), \"UTF-7 decoded text does not match the expected value.\");\n\n\t\t\tvar encoded = ImapEncoding.Encode (decoded);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"&U,BTF2XlZyyKng-\"), \"UTF-7 encoded text does not match the expected value.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDecodeSurrogatePair ()\n\t\t{\n\t\t\tconst string example = \"&2DzcHA-\";\n\n\t\t\tvar decoded = ImapEncoding.Decode (example);\n\t\t\tAssert.That (decoded, Is.EqualTo (\"\\ud83c\\udc1c\"), \"UTF-7 decoded text does not match the expected value.\");\n\n\t\t\tvar encoded = ImapEncoding.Encode (decoded);\n\t\t\tAssert.That (encoded, Is.EqualTo (\"&2DzcHA-\"), \"UTF-7 encoded text does not match the expected value.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapEngineTests.cs",
    "content": "﻿//\n// ImapEngineTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Globalization;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapEngineTests\n\t{\n\t\t[TestCase ('*', (int) ImapTokenType.Asterisk, (int) ImapTokenType.Atom)]\n\t\t[TestCase (\"ATOM\", (int) ImapTokenType.Atom, (int) ImapTokenType.Asterisk)]\n\t\t[TestCase (\"\\\\Flagged\", (int) ImapTokenType.Flag, (int) ImapTokenType.QString)]\n\t\t[TestCase (\"QSTRING\", (int) ImapTokenType.QString, (int) ImapTokenType.Atom)]\n\t\t[TestCase (123456, (int) ImapTokenType.Literal, (int) ImapTokenType.Atom)]\n\t\t[TestCase (\"NIL\", (int) ImapTokenType.Nil, (int) ImapTokenType.QString)]\n\n\t\tpublic void TestAssertToken (object value, int actual, int expected)\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tImapToken token;\n\n\t\t\t\tif (value is string str) {\n\t\t\t\t\tforeach (var c in str)\n\t\t\t\t\t\tbuilder.Append ((byte) c);\n\n\t\t\t\t\ttoken = ImapToken.Create ((ImapTokenType) actual, builder);\n\t\t\t\t} else if (value is char c) {\n\t\t\t\t\ttoken = ImapToken.Create ((ImapTokenType) actual, c);\n\t\t\t\t} else if (value is int literal) {\n\t\t\t\t\ttoken = ImapToken.Create ((ImapTokenType) actual, literal);\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tAssert.Throws<ImapProtocolException> (() => ImapEngine.AssertToken (token, (ImapTokenType) expected, \"Unexpected token: {0}\", token));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseNumber ()\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tImapToken token;\n\t\t\t\tuint value;\n\n\t\t\t\tbuilder.Append ((byte) '0');\n\n\t\t\t\ttoken = ImapToken.Create (ImapTokenType.Atom, builder);\n\t\t\t\tvalue = ImapEngine.ParseNumber (token, false, \"Unexpected number: {0}\", token);\n\t\t\t\tAssert.That (value, Is.EqualTo (0), \"number\");\n\n\t\t\t\tAssert.Throws<ImapProtocolException> (() => ImapEngine.ParseNumber (token, true, \"Unexpected number: {0}\", token), \"nz-number\");\n\n\t\t\t\tbuilder.Clear ();\n\t\t\t\tvar max = uint.MaxValue.ToString (CultureInfo.InvariantCulture);\n\t\t\t\tfor (int i = 0; i < max.Length; i++)\n\t\t\t\t\tbuilder.Append ((byte) max[i]);\n\n\t\t\t\ttoken = ImapToken.Create (ImapTokenType.Atom, builder);\n\t\t\t\tvalue = ImapEngine.ParseNumber (token, false, \"Unexpected number: {0}\", token);\n\t\t\t\tAssert.That (value, Is.EqualTo (uint.MaxValue), \"max number\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseNumber64 ()\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tImapToken token;\n\t\t\t\tulong value;\n\n\t\t\t\tbuilder.Append ((byte) '0');\n\n\t\t\t\ttoken = ImapToken.Create (ImapTokenType.Atom, builder);\n\t\t\t\tvalue = ImapEngine.ParseNumber64 (token, false, \"Unexpected number: {0}\", token);\n\t\t\t\tAssert.That (value, Is.EqualTo (0), \"number64\");\n\n\t\t\t\tAssert.Throws<ImapProtocolException> (() => ImapEngine.ParseNumber64 (token, true, \"Unexpected number: {0}\", token), \"nz-number64\");\n\n\t\t\t\tbuilder.Clear ();\n\t\t\t\tvar max = ulong.MaxValue.ToString (CultureInfo.InvariantCulture);\n\t\t\t\tfor (int i = 0; i < max.Length; i++)\n\t\t\t\t\tbuilder.Append ((byte) max[i]);\n\n\t\t\t\ttoken = ImapToken.Create (ImapTokenType.Atom, builder);\n\t\t\t\tvalue = ImapEngine.ParseNumber64 (token, false, \"Unexpected number: {0}\", token);\n\t\t\t\tAssert.That (value, Is.EqualTo (ulong.MaxValue), \"max number64\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseUidSet ()\n\t\t{\n\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\tUniqueId? min, max;\n\t\t\t\tUniqueIdSet uids;\n\t\t\t\tImapToken token;\n\n\t\t\t\tbuilder.Append ((byte) '0');\n\n\t\t\t\ttoken = ImapToken.Create (ImapTokenType.Atom, builder);\n\t\t\t\tAssert.Throws<ImapProtocolException> (() => ImapEngine.ParseUidSet (token, 0, out min, out max, \"Unexpected uid-set: {0}\", token), \"0\");\n\n\t\t\t\tbuilder.Clear ();\n\t\t\t\tvar bytes = Encoding.ASCII.GetBytes (\"1:500\");\n\t\t\t\tfor (int i = 0; i < bytes.Length; i++)\n\t\t\t\t\tbuilder.Append (bytes[i]);\n\n\t\t\t\ttoken = ImapToken.Create (ImapTokenType.Atom, builder);\n\t\t\t\tuids = ImapEngine.ParseUidSet (token, 0, out min, out max, \"Unexpected uid-set: {0}\", token);\n\t\t\t\tAssert.That (uids.ToString (), Is.EqualTo (\"1:500\"), \"uid-set\");\n\t\t\t\tAssert.That (min.ToString (), Is.EqualTo (\"1\"), \"min\");\n\t\t\t\tAssert.That (max.ToString (), Is.EqualTo (\"500\"), \"max\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetResponseCodeType ()\n\t\t{\n\t\t\tforeach (ImapResponseCodeType type in Enum.GetValues (typeof (ImapResponseCodeType))) {\n\t\t\t\tstring atom;\n\n\t\t\t\tswitch (type) {\n\t\t\t\tcase ImapResponseCodeType.ReadOnly: atom = \"READ-ONLY\"; break;\n\t\t\t\tcase ImapResponseCodeType.ReadWrite: atom = \"READ-WRITE\"; break;\n\t\t\t\tcase ImapResponseCodeType.UnknownCte: atom = \"UNKNOWN-CTE\"; break;\n\t\t\t\tcase ImapResponseCodeType.UndefinedFilter: atom = \"UNDEFINED-FILTER\"; break;\n\t\t\t\tdefault: atom = type.ToString ().ToUpperInvariant (); break;\n\t\t\t\t}\n\n\t\t\t\tvar result = ImapEngine.GetResponseCodeType (atom);\n\t\t\t\tAssert.That (result, Is.EqualTo (type));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeBadCharset ()\n\t\t{\n\t\t\tconst string text = \"BADCHARSET (US-ASCII \\\"iso-8859-1\\\" UTF-8)] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.BadCharset));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Has.Count.EqualTo (3));\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Does.Contain (\"US-ASCII\"), \"US-ASCII\");\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Does.Contain (\"iso-8859-1\"), \"iso-8859-1\");\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Does.Contain (\"UTF-8\"), \"UTF-8\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeBadCharsetAsync ()\n\t\t{\n\t\t\tconst string text = \"BADCHARSET (US-ASCII \\\"iso-8859-1\\\" UTF-8)] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.BadCharset));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Has.Count.EqualTo (3));\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Does.Contain (\"US-ASCII\"), \"US-ASCII\");\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Does.Contain (\"iso-8859-1\"), \"iso-8859-1\");\n\t\t\t\t\t\tAssert.That (engine.SupportedCharsets, Does.Contain (\"UTF-8\"), \"UTF-8\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeBadUrl ()\n\t\t{\n\t\t\tconst string text = \"BADURL \\\"/INBOX;UIDVALIDITY=785799047/;UID=113330;section=1.5.9\\\"] CATENATE append has failed, one message expunged\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.BadUrl));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"CATENATE append has failed, one message expunged\"));\n\n\t\t\t\t\t\tvar badurl = (BadUrlResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (badurl.BadUrl, Is.EqualTo (\"/INBOX;UIDVALIDITY=785799047/;UID=113330;section=1.5.9\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeBadUrlAsync ()\n\t\t{\n\t\t\tconst string text = \"BADURL \\\"/INBOX;UIDVALIDITY=785799047/;UID=113330;section=1.5.9\\\"] CATENATE append has failed, one message expunged\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.BadUrl));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"CATENATE append has failed, one message expunged\"));\n\n\t\t\t\t\t\tvar badurl = (BadUrlResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (badurl.BadUrl, Is.EqualTo (\"/INBOX;UIDVALIDITY=785799047/;UID=113330;section=1.5.9\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeMaxConvertMessages ()\n\t\t{\n\t\t\tconst string text = \"MAXCONVERTMESSAGES 1] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.MaxConvertMessages));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar maxconvert = (MaxConvertResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (maxconvert.MaxConvert, Is.EqualTo (1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeMaxConvertMessagesAsync ()\n\t\t{\n\t\t\tconst string text = \"MAXCONVERTMESSAGES 1] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.MaxConvertMessages));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar maxconvert = (MaxConvertResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (maxconvert.MaxConvert, Is.EqualTo (1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeMaxConvertParts ()\n\t\t{\n\t\t\tconst string text = \"MAXCONVERTPARTS 1] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.MaxConvertParts));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar maxconvert = (MaxConvertResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (maxconvert.MaxConvert, Is.EqualTo (1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeMaxConvertPartsAsync ()\n\t\t{\n\t\t\tconst string text = \"MAXCONVERTPARTS 1] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.MaxConvertParts));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar maxconvert = (MaxConvertResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (maxconvert.MaxConvert, Is.EqualTo (1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeNoUpdate ()\n\t\t{\n\t\t\tconst string text = \"NOUPDATE \\\"B02\\\"] Too many contexts\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (false, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.NoUpdate));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"Too many contexts\"));\n\n\t\t\t\t\t\tvar noupdate = (NoUpdateResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (noupdate.Tag, Is.EqualTo (\"B02\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeNoUpdateAsync ()\n\t\t{\n\t\t\tconst string text = \"NOUPDATE \\\"B02\\\"] Too many contexts\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (false, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.NoUpdate));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"Too many contexts\"));\n\n\t\t\t\t\t\tvar noupdate = (NoUpdateResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (noupdate.Tag, Is.EqualTo (\"B02\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeNewName ()\n\t\t{\n\t\t\tconst string text = \"NEWNAME OldName NewName] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.NewName));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar newname = (NewNameResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (newname.OldName, Is.EqualTo (\"OldName\"));\n\t\t\t\t\t\tAssert.That (newname.NewName, Is.EqualTo (\"NewName\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeNewNameAsync ()\n\t\t{\n\t\t\tconst string text = \"NEWNAME OldName NewName] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.NewName));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar newname = (NewNameResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (newname.OldName, Is.EqualTo (\"OldName\"));\n\t\t\t\t\t\tAssert.That (newname.NewName, Is.EqualTo (\"NewName\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseResponseCodeUndefinedFilter ()\n\t\t{\n\t\t\tconst string text = \"UNDEFINED-FILTER filter-name] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = engine.ParseResponseCode (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.UndefinedFilter));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar undefined = (UndefinedFilterResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (undefined.Name, Is.EqualTo (\"filter-name\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseResponseCodeUndefinedFilterAsync ()\n\t\t{\n\t\t\tconst string text = \"UNDEFINED-FILTER filter-name] This is some free-form text\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tImapResponseCode respCode;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trespCode = await engine.ParseResponseCodeAsync (true, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing RESP-CODE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (respCode.Type, Is.EqualTo (ImapResponseCodeType.UndefinedFilter));\n\t\t\t\t\t\tAssert.That (respCode.Message, Is.EqualTo (\"This is some free-form text\"));\n\n\t\t\t\t\t\tvar undefined = (UndefinedFilterResponseCode) respCode;\n\t\t\t\t\t\tAssert.That (undefined.Name, Is.EqualTo (\"filter-name\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid TestGreetingDetection (string server, string fileName, ImapQuirksMode expected)\n\t\t{\n\t\t\tusing (var input = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + server + \".\" + fileName)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (input, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tengine.Connect (tokenizer, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing greeting failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (engine.QuirksMode, Is.EqualTo (expected));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync Task TestGreetingDetectionAsync (string server, string fileName, ImapQuirksMode expected)\n\t\t{\n\t\t\tusing (var input = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + server + \".\" + fileName)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (input, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait engine.ConnectAsync (tokenizer, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing greeting failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (engine.QuirksMode, Is.EqualTo (expected));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCourierImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"courier\", \"greeting.txt\", ImapQuirksMode.Courier);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestCourierImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"courier\", \"greeting.txt\", ImapQuirksMode.Courier);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCyrusImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"cyrus\", \"greeting.txt\", ImapQuirksMode.Cyrus);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestCyrusImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"cyrus\", \"greeting.txt\", ImapQuirksMode.Cyrus);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDominoImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"domino\", \"greeting.txt\", ImapQuirksMode.Domino);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestDominoImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"domino\", \"greeting.txt\", ImapQuirksMode.Domino);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDovecotImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"dovecot\", \"greeting.txt\", ImapQuirksMode.Dovecot);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestDovecotImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"dovecot\", \"greeting.txt\", ImapQuirksMode.Dovecot);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExchangeImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"exchange\", \"greeting.txt\", ImapQuirksMode.Exchange);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestExchangeImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"exchange\", \"greeting.txt\", ImapQuirksMode.Exchange);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExchange2003ImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"exchange\", \"greeting-2003.txt\", ImapQuirksMode.Exchange2003);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestExchange2003ImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"exchange\", \"greeting-2003.txt\", ImapQuirksMode.Exchange2003);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExchange2007ImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"exchange\", \"greeting-2007.txt\", ImapQuirksMode.Exchange2007);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestExchange2007ImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"exchange\", \"greeting-2007.txt\", ImapQuirksMode.Exchange2007);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUWImapDetection ()\n\t\t{\n\t\t\tTestGreetingDetection (\"uw\", \"greeting.txt\", ImapQuirksMode.UW);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestUWImapDetectionAsync ()\n\t\t{\n\t\t\treturn TestGreetingDetectionAsync (\"uw\", \"greeting.txt\", ImapQuirksMode.UW);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapEventGroupTests.cs",
    "content": "﻿//\n// ImapEventGroupTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nusing MimeKit;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapEventGroupTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapEventGroup (null, new List<ImapEvent> ()));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapEventGroup (ImapMailboxFilter.Selected, (IList<ImapEvent>) null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapEventGroup (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapEventGroup (ImapMailboxFilter.Selected, null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapMailboxFilter.Mailboxes (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapMailboxFilter.Mailboxes ((IList<IMailFolder>) null));\n\n\t\t\tAssert.Throws<ArgumentException> (() => new ImapMailboxFilter.Mailboxes ());\n\t\t\tAssert.Throws<ArgumentException> (() => new ImapMailboxFilter.Mailboxes ((IList<IMailFolder>) Array.Empty<IMailFolder> ()));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapMailboxFilter.Subtree (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapMailboxFilter.Subtree ((IList<IMailFolder>) null));\n\n\t\t\tAssert.Throws<ArgumentException> (() => new ImapMailboxFilter.Subtree ());\n\t\t\tAssert.Throws<ArgumentException> (() => new ImapMailboxFilter.Subtree ((IList<IMailFolder>) Array.Empty<IMailFolder> ()));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapEvent.MessageNew (null));\n\t\t}\n\n\t\tstatic void AssertFormatEventGroup (ImapEventGroup eventGroup, string expected, bool expectedNotify)\n\t\t{\n\t\t\tusing var engine = new ImapEngine (null);\n\t\t\tbool notifySelectedNewExpunge = false;\n\t\t\tvar command = new StringBuilder ();\n\t\t\tvar args = new List<object> ();\n\n\t\t\tif (expected == null) {\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => eventGroup.Format (engine, command, args, ref notifySelectedNewExpunge));\n\t\t\t} else {\n\t\t\t\teventGroup.Format (engine, command, args, ref notifySelectedNewExpunge);\n\n\t\t\t\tAssert.That (command.ToString (), Is.EqualTo (expected));\n\t\t\t\tAssert.That (notifySelectedNewExpunge, Is.EqualTo (expectedNotify), \"notifySelectedNewExpunge\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_None ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, Array.Empty<ImapEvent> ());\n\n\t\t\tAssertFormatEventGroup (eventGroup, \"(INBOXES NONE)\", false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_AnnotationChange_Requires_MessageNew_And_MessageExpunge ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.AnnotationChange);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_AnnotationChange_MessageNew_Requires_MessageExpunge ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.AnnotationChange, new ImapEvent.MessageNew (MessageSummaryItems.None));\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_AnnotationChange_MessageExpunge_Requires_MessageNew ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.AnnotationChange, ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_FlagChange_Requires_MessageNew_And_MessageExpunge ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.FlagChange);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_FlagChange_MessageNew_Requires_MessageExpunge ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.FlagChange, new ImapEvent.MessageNew (MessageSummaryItems.None));\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_FlagChange_MessageExpunge_Requires_MessageNew ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.FlagChange, ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_FlagChange_MessageNew_MessageExpunge_AnnotationChange ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.FlagChange, new ImapEvent.MessageNew (MessageSummaryItems.None), ImapEvent.MessageExpunge, ImapEvent.AnnotationChange);\n\n\t\t\tAssertFormatEventGroup (eventGroup, \"(INBOXES (FlagChange MessageNew MessageExpunge AnnotationChange))\", false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageExpunge_Requires_MessageNew ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageNew_Requires_MessageExpunge ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, new ImapEvent.MessageNew (MessageSummaryItems.None));\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageNew_MessageExpunge ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, new ImapEvent.MessageNew (MessageSummaryItems.None), ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, \"(INBOXES (MessageNew MessageExpunge))\", false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageNew_Headers_Requires_Selected ()\n\t\t{\n\t\t\tvar headers = new HashSet<HeaderId> (new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date });\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, new ImapEvent.MessageNew (MessageSummaryItems.None, headers), ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageNew_Items_Requires_Selected ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Inboxes, new ImapEvent.MessageNew (MessageSummaryItems.Full), ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageNew_WithSpecificHeaderIds ()\n\t\t{\n\t\t\tvar headers = new HashSet<HeaderId> (new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date });\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Selected, new ImapEvent.MessageNew (MessageSummaryItems.None, headers), ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, \"(SELECTED (MessageNew (BODY.PEEK[HEADER.FIELDS (FROM SUBJECT DATE)]) MessageExpunge))\", true);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_MessageNew_WithSpecificHeaderNames ()\n\t\t{\n\t\t\tvar headers = new HashSet<string> (new string[] { \"From\", \"Subject\", \"Date\" });\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Selected, new ImapEvent.MessageNew (MessageSummaryItems.None, headers), ImapEvent.MessageExpunge);\n\n\t\t\tAssertFormatEventGroup (eventGroup, \"(SELECTED (MessageNew (BODY.PEEK[HEADER.FIELDS (FROM SUBJECT DATE)]) MessageExpunge))\", true);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_Selected_Requires_OnlyMessageEvents ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.Selected, ImapEvent.ServerMetadataChange);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatEventGroup_SelectedDelayed_Requires_OnlyMessageEvents ()\n\t\t{\n\t\t\tvar eventGroup = new ImapEventGroup (ImapMailboxFilter.SelectedDelayed, ImapEvent.ServerMetadataChange);\n\n\t\t\tAssertFormatEventGroup (eventGroup, null, false);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapFolderAnnotationsTests.cs",
    "content": "﻿//\n// ImapFolderAnnotationsTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Globalization;\n\nusing MimeKit;\n\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapFolderAnnotationsTests\n\t{\n\t\tstatic readonly Encoding Latin1 = Encoding.GetEncoding (28591);\n\n\t\tstatic Stream GetResourceStream (string name)\n\t\t{\n\t\t\treturn typeof (ImapFolderAnnotationsTests).Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + name);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tvar annotations = new List<Annotation> (new[] {\n\t\t\t\t\tnew Annotation (AnnotationEntry.AltSubject)\n\t\t\t\t});\n\t\t\t\tannotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"value\");\n\n\t\t\t\t// Store\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Store (-1, annotations));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.StoreAsync (-1, annotations));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (0, (IList<Annotation>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (0, (IList<Annotation>) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Store (UniqueId.Invalid, annotations));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.StoreAsync (UniqueId.Invalid, annotations));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueId.MinValue, (IList<Annotation>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueId.MinValue, (IList<Annotation>) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<int>) null, annotations));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<int>) null, annotations));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (new int[] { 0 }, (IList<Annotation>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (new int[] { 0 }, (IList<Annotation>) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<int>) null, 1, annotations));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<int>) null, 1, annotations));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (new int[] { 0 }, 1, (IList<Annotation>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (new int[] { 0 }, 1, (IList<Annotation>) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<UniqueId>) null, annotations));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<UniqueId>) null, annotations));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueIdRange.All, (IList<Annotation>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueIdRange.All, (IList<Annotation>) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<UniqueId>) null, 1, annotations));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<UniqueId>) null, 1, annotations));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueIdRange.All, 1, (IList<Annotation>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueIdRange.All, 1, (IList<Annotation>) null));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotSupportedExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (ANNOTATE)\\r\\n\", \"common.select-inbox-annotate-no-modseq.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.None), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.None), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tvar annotations = new List<Annotation> (new[] {\n\t\t\t\t\tnew Annotation (AnnotationEntry.AltSubject)\n\t\t\t\t});\n\t\t\t\tannotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"value\");\n\n\t\t\t\t// verify NotSupportedException for storing annotations\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Store (0, annotations));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StoreAsync (0, annotations));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Store (UniqueId.MinValue, annotations));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StoreAsync (UniqueId.MinValue, annotations));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Store (new int[] { 0 }, 1, annotations));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StoreAsync (new int[] { 0 }, 1, annotations));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Store (UniqueIdRange.All, 1, annotations));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StoreAsync (UniqueIdRange.All, 1, annotations));\n\n\t\t\t\t// disable CONDSTORE and verify that we get NotSupportedException when we send modseq\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.CondStore;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Store (new int[] { 0 }, 1, annotations));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StoreAsync (new int[] { 0 }, 1, annotations));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Store (UniqueIdRange.All, 1, annotations));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StoreAsync (UniqueIdRange.All, 1, annotations));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestChangingAnnotationsOnEmptyListOfMessages ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tvar annotations = new List<Annotation> (new[] {\n\t\t\t\t\tnew Annotation (AnnotationEntry.AltSubject)\n\t\t\t\t});\n\t\t\t\tannotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"value\");\n\n\t\t\t\tulong modseq = 409601020304;\n\t\t\t\tvar uids = Array.Empty<UniqueId> ();\n\t\t\t\tvar indexes = Array.Empty<int> ();\n\t\t\t\tIList<UniqueId> unmodifiedUids;\n\t\t\t\tIList<int> unmodifiedIndexes;\n\n\t\t\t\tunmodifiedIndexes = inbox.Store (indexes, modseq, annotations);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.Store (uids, modseq, annotations);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateAppendWithAnnotationsCommands (bool withInternalDates, out List<MimeMessage> messages, out List<MessageFlags> flags, out List<DateTimeOffset> internalDates, out List<Annotation> annotations)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\")\n\t\t\t};\n\n\t\t\tinternalDates = withInternalDates ? new List<DateTimeOffset> () : null;\n\t\t\tannotations = new List<Annotation> ();\n\t\t\tmessages = new List<MimeMessage> ();\n\t\t\tflags = new List<MessageFlags> ();\n\t\t\tvar command = new StringBuilder ();\n\t\t\tint id = 4;\n\n\t\t\tfor (int i = 0; i < 8; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tmessages.Add (message);\n\t\t\t\tflags.Add (MessageFlags.Seen);\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tinternalDates.Add (message.Date);\n\t\t\t\tvar annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties[AnnotationAttribute.PrivateValue] = string.Format (\"Alternate subject {0}\", i);\n\t\t\t\tannotations.Add (annotation);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tvar tag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\tcommand.Clear ();\n\n\t\t\t\tcommand.AppendFormat (\"{0} APPEND INBOX (\\\\Seen) \", tag);\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\n\t\t\t\tcommand.AppendFormat (\"ANNOTATION (/altsubject (value.priv \\\"Alternate subject {0}\\\")) \", i);\n\n\t\t\t\tcommand.Append ('{').Append (length.ToString (CultureInfo.InvariantCulture)).Append (\"+}\\r\\n\").Append (latin1).Append (\"\\r\\n\");\n\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (string.Format (\"A{0:D8} LOGOUT\\r\\n\", id), \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestAppendWithAnnotations\")]\n\t\t[TestCase (true, TestName = \"TestAppendWithAnnotationsAndInternalDates\")]\n\t\tpublic void TestAppendWithAnnotations (bool withInternalDates)\n\t\t{\n\t\t\tvar expectedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar expectedPermanentFlags = expectedFlags | MessageFlags.UserDefined;\n\n\t\t\tvar commands = CreateAppendWithAnnotationsCommands (withInternalDates, out var messages, out var flags, out var internalDates, out var annotations);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withInternalDates)\n\t\t\t\t\t\tuid = client.Inbox.Append (messages[i], flags[i], internalDates[i], new [] { annotations[i] });\n\t\t\t\t\telse\n\t\t\t\t\t\tuid = client.Inbox.Append (messages[i], flags[i], null, new [] { annotations[i] });\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\tmessages[i].Dispose ();\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestAppendWithAnnotationsAsync\")]\n\t\t[TestCase (true, TestName = \"TestAppendWithAnnotationsAndInternalDatesAsync\")]\n\t\tpublic async Task TestAppendWithAnnotationsAsync (bool withInternalDates)\n\t\t{\n\t\t\tvar expectedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar expectedPermanentFlags = expectedFlags | MessageFlags.UserDefined;\n\n\t\t\tvar commands = CreateAppendWithAnnotationsCommands (withInternalDates, out var messages, out var flags, out var internalDates, out var annotations);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withInternalDates)\n\t\t\t\t\t\tuid = await client.Inbox.AppendAsync (messages[i], flags[i], internalDates[i], new[] { annotations[i] });\n\t\t\t\t\telse\n\t\t\t\t\t\tuid = await client.Inbox.AppendAsync (messages[i], flags[i], null, new[] { annotations[i] });\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\tmessages[i].Dispose ();\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateMultiAppendWithAnnotationsCommands (bool withInternalDates, out List<IAppendRequest> requests)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\")\n\t\t\t};\n\n\t\t\tvar command = new StringBuilder (\"A00000004 APPEND INBOX\");\n\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\toptions.EnsureNewLine = true;\n\t\t\tint id = 5;\n\n\t\t\trequests = new List<IAppendRequest> ();\n\n\t\t\tfor (int i = 0; i < 8; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tvar request = new AppendRequest (message, MessageFlags.Seen);\n\t\t\t\trequests.Add (request);\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\trequest.InternalDate = message.Date;\n\n\t\t\t\tvar annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties[AnnotationAttribute.PrivateValue] = string.Format (\"Alternate subject {0}\", i);\n\t\t\t\trequest.Annotations = new Annotation[] { annotation };\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tcommand.Append (\" (\\\\Seen) \");\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\t\t\t\tcommand.AppendFormat (\"ANNOTATION (/altsubject (value.priv \\\"Alternate subject {0}\\\")) \", i);\n\t\t\t\tcommand.Append ('{');\n\t\t\t\tcommand.AppendFormat (\"{0}+\", length);\n\t\t\t\tcommand.Append (\"}\\r\\n\");\n\t\t\t\tcommand.Append (latin1);\n\t\t\t}\n\n\t\t\tcommand.Append (\"\\r\\n\");\n\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), \"dovecot.multiappend.txt\"));\n\n\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tcommand.Clear ();\n\t\t\t\tcommand.AppendFormat (\"A{0:D8} APPEND INBOX\", id++);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\trequests[i].Message.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tcommand.Append (\" (\\\\Seen) \");\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (requests[i].InternalDate.Value));\n\t\t\t\tcommand.AppendFormat (\"ANNOTATION (/altsubject (value.priv \\\"Alternate subject {0}\\\")) \", i);\n\t\t\t\tcommand.Append ('{');\n\t\t\t\tcommand.AppendFormat (\"{0}+\", length);\n\t\t\t\tcommand.Append (\"}\\r\\n\");\n\t\t\t\tcommand.Append (latin1);\n\t\t\t\tcommand.Append (\"\\r\\n\");\n\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (string.Format (\"A{0:D8} LOGOUT\\r\\n\", id), \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestMultiAppendWithAnnotations\")]\n\t\t[TestCase (true, TestName = \"TestMultiAppendWithAnnotationsAndInternalDates\")]\n\t\tpublic void TestMultiAppendWithAnnotations (bool withInternalDates)\n\t\t{\n\t\t\tvar expectedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar expectedPermanentFlags = expectedFlags | MessageFlags.UserDefined;\n\t\t\tIList<UniqueId> uids;\n\n\t\t\tvar commands = CreateMultiAppendWithAnnotationsCommands (withInternalDates, out var requests);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Use MULTIAPPEND to append some test messages\n\t\t\t\tuids = client.Inbox.Append (requests);\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t// Disable the MULTIAPPEND extension and do it again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.MultiAppend;\n\t\t\t\tuids = client.Inbox.Append (requests);\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\tclient.Disconnect (true);\n\n\t\t\t\tforeach (var request in requests)\n\t\t\t\t\trequest.Message.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestMultiAppendWithAnnotationsAsync\")]\n\t\t[TestCase (true, TestName = \"TestMultiAppendWithAnnotationsAndInternalDatesAsync\")]\n\t\tpublic async Task TestMultiAppendWithAnnotationsAsync (bool withInternalDates)\n\t\t{\n\t\t\tvar expectedFlags = MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar expectedPermanentFlags = expectedFlags | MessageFlags.UserDefined;\n\t\t\tIList<UniqueId> uids;\n\n\t\t\tvar commands = CreateMultiAppendWithAnnotationsCommands (withInternalDates, out var requests);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Use MULTIAPPEND to append some test messages\n\t\t\t\tuids = await client.Inbox.AppendAsync (requests);\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t// Disable the MULTIAPPEND extension and do it again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.MultiAppend;\n\t\t\t\tuids = await client.Inbox.AppendAsync (requests);\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\n\t\t\t\tforeach (var request in requests)\n\t\t\t\t\trequest.Message.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateReplaceWithAnnotationsCommands (bool byUid, out List<ReplaceRequest> requests)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate+replace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate.txt\")\n\t\t\t};\n\t\t\tvar command = new StringBuilder ();\n\t\t\tint id = 5;\n\n\t\t\trequests = new List<ReplaceRequest> ();\n\n\t\t\tfor (int i = 0; i < 8; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tvar annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties[AnnotationAttribute.PrivateValue] = string.Format (\"Alternate subject {0}\", i);\n\t\t\t\trequests.Add (new ReplaceRequest (message, MessageFlags.Seen) {\n\t\t\t\t\tAnnotations = new Annotation[] { annotation }\n\t\t\t\t});\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tvar tag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\tcommand.Clear ();\n\n\t\t\t\tcommand.AppendFormat (\"{0} {1} {2} INBOX (\\\\Seen) \", tag, byUid ? \"UID REPLACE\" : \"REPLACE\", i + 1);\n\t\t\t\tcommand.AppendFormat (\"ANNOTATION (/altsubject (value.priv \\\"Alternate subject {0}\\\")) \", i);\n\n\t\t\t\tcommand.Append ('{').Append (length.ToString (CultureInfo.InvariantCulture)).Append (\"+}\\r\\n\").Append (latin1).Append (\"\\r\\n\");\n\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (string.Format (\"A{0:D8} LOGOUT\\r\\n\", id), \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReplaceWithAnnotations ()\n\t\t{\n\t\t\tvar commands = CreateReplaceWithAnnotationsCommands (false, out var requests);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\t\tvar uid = client.Inbox.Replace (i, requests[i]);\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\trequests[i].Message.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReplaceWithAnnotationsAsync ()\n\t\t{\n\t\t\tvar commands = CreateReplaceWithAnnotationsCommands (false, out var requests);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\t\tvar uid = await client.Inbox.ReplaceAsync (i, requests[i]);\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\trequests[i].Message.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReplaceByUidWithAnnotations ()\n\t\t{\n\t\t\tvar commands = CreateReplaceWithAnnotationsCommands (true, out var requests);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\t\tvar uid = client.Inbox.Replace (new UniqueId ((uint) i + 1), requests[i]);\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\trequests[i].Message.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReplaceByUidWithAnnotationsAsync ()\n\t\t{\n\t\t\tvar commands = CreateReplaceWithAnnotationsCommands (true, out var requests);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < requests.Count; i++) {\n\t\t\t\t\tvar uid = await client.Inbox.ReplaceAsync (new UniqueId ((uint) i + 1), requests[i]);\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\trequests[i].Message.Dispose ();\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateSelectAnnotateNoneCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate-none.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSelectAnnotateNone ()\n\t\t{\n\t\t\tvar commands = CreateSelectAnnotateNoneCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.None), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.None), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSelectAnnotateNoneAsync ()\n\t\t{\n\t\t\tvar commands = CreateSelectAnnotateNoneCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.None), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.None), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSearchAnnotationsCommands ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate-readonly.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 UID SEARCH RETURN (ALL) ANNOTATION /comment value \\\"a comment\\\"\\r\\n\", \"dovecot.search-uids.txt\")\n\t\t\t};\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchAnnotations ()\n\t\t{\n\t\t\tvar commands = CreateSearchAnnotationsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadOnly), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Both), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tvar query = SearchQuery.AnnotationsContain (AnnotationEntry.Comment, AnnotationAttribute.Value, \"a comment\");\n\t\t\t\tvar uids = inbox.Search (query);\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\t// disable ANNOTATE-EXPERIMENT-1 and try again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Annotate;\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (query));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchAnnotationsAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchAnnotationsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadOnly), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Both), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tvar query = SearchQuery.AnnotationsContain (AnnotationEntry.Comment, AnnotationAttribute.Value, \"a comment\");\n\t\t\t\tvar uids = await inbox.SearchAsync (query);\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\t// disable ANNOTATE-EXPERIMENT-1 and try again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Annotate;\n\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (query));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSortAnnotationsCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate-readonly.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 UID SORT RETURN (ALL) (ANNOTATION /altsubject value.shared) US-ASCII ALL\\r\\n\", \"dovecot.sort-by-strings.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SORT RETURN (ALL) (REVERSE ANNOTATION /altsubject value.shared) US-ASCII ALL\\r\\n\", \"dovecot.sort-by-strings.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSortAnnotations ()\n\t\t{\n\t\t\tvar commands = CreateSortAnnotationsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadOnly), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Both), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tvar orderBy = new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Ascending);\n\t\t\t\tvar uids = inbox.Sort (SearchQuery.All, new OrderBy[] { orderBy });\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\torderBy = new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Descending);\n\t\t\t\tuids = inbox.Sort (SearchQuery.All, new OrderBy[] { orderBy });\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\t// disable ANNOTATE-EXPERIMENT-1 and try again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Annotate;\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Sort (SearchQuery.All, new OrderBy[] { orderBy }));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSortAnnotationsAsync ()\n\t\t{\n\t\t\tvar commands = CreateSortAnnotationsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadOnly), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Both), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (0), \"MaxAnnotationSize\");\n\n\t\t\t\tvar orderBy = new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Ascending);\n\t\t\t\tvar uids = await inbox.SortAsync (SearchQuery.All, new OrderBy[] { orderBy });\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\torderBy = new OrderByAnnotation (AnnotationEntry.AltSubject, AnnotationAttribute.SharedValue, SortOrder.Descending);\n\t\t\t\tuids = await inbox.SortAsync (SearchQuery.All, new OrderBy[] { orderBy });\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\n\t\t\t\t// disable ANNOTATE-EXPERIMENT-1 and try again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Annotate;\n\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SortAsync (SearchQuery.All, new OrderBy[] { orderBy }));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateStoreCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 STORE 1 ANNOTATION (/altsubject (value.shared \\\"This is an alternate subject.\\\"))\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID STORE 1 ANNOTATION (/altsubject (value.shared \\\"This is an alternate subject.\\\"))\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 STORE 1 ANNOTATION (/altsubject (value.shared NIL))\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID STORE 1 ANNOTATION (/altsubject (value.shared NIL))\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 STORE 1 (UNCHANGEDSINCE 42) ANNOTATION (/altsubject (value.shared NIL))\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 UID STORE 1 (UNCHANGEDSINCE 42) ANNOTATION (/altsubject (value.shared NIL))\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 STORE 1 ANNOTATION (/altsubject (value.shared \\\"This alternate subject will cause an error.\\\"))\\r\\n\", Encoding.ASCII.GetBytes (\"A00000011 NO [ANNOTATE TOOBIG] Annotate failed.\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 UID STORE 1 ANNOTATION (/altsubject (value.shared \\\"This alternate subject will cause an error.\\\"))\\r\\n\", Encoding.ASCII.GetBytes (\"A00000012 NO [ANNOTATE TOOMANY] Annotate failed.\\r\\n\")),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestStore ()\n\t\t{\n\t\t\tvar commands = CreateStoreCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tvar annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties.Add (AnnotationAttribute.SharedValue, \"This is an alternate subject.\");\n\n\t\t\t\tvar annotations = new [] { annotation };\n\n\t\t\t\tinbox.Store (0, annotations);\n\t\t\t\tinbox.Store (new UniqueId (1), annotations);\n\n\t\t\t\tannotation.Properties[AnnotationAttribute.SharedValue] = null;\n\n\t\t\t\tinbox.Store (0, annotations);\n\t\t\t\tinbox.Store (new UniqueId (1), annotations);\n\n\t\t\t\tinbox.Store (new[] { 0 }, 42, annotations);\n\t\t\t\tinbox.Store (new[] { new UniqueId (1) }, 42, annotations);\n\n\t\t\t\tannotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties.Add (AnnotationAttribute.SharedValue, \"This alternate subject will cause an error.\");\n\n\t\t\t\tannotations = new[] { annotation };\n\n\t\t\t\tAssert.Throws<ImapCommandException> (() => inbox.Store (0, annotations));\n\t\t\t\tAssert.Throws<ImapCommandException> (() => inbox.Store (new UniqueId (1), annotations));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestStoreAsync ()\n\t\t{\n\t\t\tvar commands = CreateStoreCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\tAssert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\tAssert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tvar annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties.Add (AnnotationAttribute.SharedValue, \"This is an alternate subject.\");\n\n\t\t\t\tvar annotations = new[] { annotation };\n\n\t\t\t\tawait inbox.StoreAsync (0, annotations);\n\t\t\t\tawait inbox.StoreAsync (new UniqueId (1), annotations);\n\n\t\t\t\tannotation.Properties[AnnotationAttribute.SharedValue] = null;\n\n\t\t\t\tawait inbox.StoreAsync (0, annotations);\n\t\t\t\tawait inbox.StoreAsync (new UniqueId (1), annotations);\n\n\t\t\t\tawait inbox.StoreAsync (new[] { 0 }, 42, annotations);\n\t\t\t\tawait inbox.StoreAsync (new[] { new UniqueId (1) }, 42, annotations);\n\n\t\t\t\tannotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t\tannotation.Properties.Add (AnnotationAttribute.SharedValue, \"This alternate subject will cause an error.\");\n\n\t\t\t\tannotations = new[] { annotation };\n\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (() => inbox.StoreAsync (0, annotations));\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (() => inbox.StoreAsync (new UniqueId (1), annotations));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapFolderFetchTests.cs",
    "content": "﻿//\n// ImapFolderFetchTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Security.Cryptography;\n\nusing MimeKit;\n\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapFolderFetchTests\n\t{\n\t\tstatic FolderAttributes GetSpecialFolderAttribute (SpecialFolder special)\n\t\t{\n\t\t\tswitch (special) {\n\t\t\tcase SpecialFolder.All:       return FolderAttributes.All;\n\t\t\tcase SpecialFolder.Archive:   return FolderAttributes.Archive;\n\t\t\tcase SpecialFolder.Drafts:    return FolderAttributes.Drafts;\n\t\t\tcase SpecialFolder.Flagged:   return FolderAttributes.Flagged;\n\t\t\tcase SpecialFolder.Important: return FolderAttributes.Important;\n\t\t\tcase SpecialFolder.Junk:      return FolderAttributes.Junk;\n\t\t\tcase SpecialFolder.Sent:      return FolderAttributes.Sent;\n\t\t\tcase SpecialFolder.Trash:     return FolderAttributes.Trash;\n\t\t\tdefault: throw new ArgumentOutOfRangeException (nameof (special));\n\t\t\t}\n\t\t}\n\n\t\tstatic string HexEncode (byte [] digest)\n\t\t{\n\t\t\tvar hex = new StringBuilder ();\n\n\t\t\tfor (int i = 0; i < digest.Length; i++)\n\t\t\t\thex.Append (digest[i].ToString (\"x2\"));\n\n\t\t\treturn hex.ToString ();\n\t\t}\n\n\t\tstatic void GetStreamsCallback (ImapFolder folder, int index, UniqueId uid, Stream stream)\n\t\t{\n\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\tconst string expected = \"This is some dummy text just to make sure this is working correctly.\";\n\t\t\t\tvar text = reader.ReadToEnd ();\n\n\t\t\t\tAssert.That (text, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\tstatic async Task GetStreamsAsyncCallback (ImapFolder folder, int index, UniqueId uid, Stream stream, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\tconst string expected = \"This is some dummy text just to make sure this is working correctly.\";\n\t\t\t\tvar text = await reader.ReadToEndAsync ();\n\n\t\t\t\tAssert.That (text, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// Fetch\n\t\t\t\tvar invalidHeaderFields = new string[] { \"Invalid Header Name\" };\n\t\t\t\tvar headerIds = new HeaderId [] { HeaderId.Subject };\n\t\t\t\tvar headerFields = new string [] { \"SUBJECT\" };\n\t\t\t\tvar uids = new UniqueId [] { UniqueId.MinValue };\n\t\t\t\tvar indexes = new int [] { 0 };\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (0, -1, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.FetchAsync (0, -1, null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.FetchAsync (uids, null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.FetchAsync (indexes, null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All, headerIds));\n\t\t\t\t//Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, MessageSummaryItems.None, headers));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.None, headers));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, MessageSummaryItems.All, headerIds));\n\t\t\t\t//Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, MessageSummaryItems.None, headers));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.None, headers));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, MessageSummaryItems.All, headerIds));\n\t\t\t\t//Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, MessageSummaryItems.None, headers));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.None, headers));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All, headerFields));\n\t\t\t\t//Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (0, 5, MessageSummaryItems.None, fields));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.None, fields));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Fetch (0, 5, MessageSummaryItems.All, invalidHeaderFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.FetchAsync (0, 5, MessageSummaryItems.All, invalidHeaderFields));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, MessageSummaryItems.All, headerFields));\n\t\t\t\t//Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (uids, MessageSummaryItems.None, fields));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.None, fields));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Fetch (uids, MessageSummaryItems.All, invalidHeaderFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.FetchAsync (uids, MessageSummaryItems.All, invalidHeaderFields));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, MessageSummaryItems.All, headerFields));\n\t\t\t\t//Assert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (indexes, MessageSummaryItems.None, fields));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.None, fields));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Fetch (indexes, MessageSummaryItems.All, invalidHeaderFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.FetchAsync (indexes, MessageSummaryItems.All, invalidHeaderFields));\n\n\t\t\t\t// Fetch + modseq\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, 31337, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, 31337, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, 31337, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, 31337, MessageSummaryItems.All));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, 31337, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, 31337, MessageSummaryItems.All));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, 31337, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, 31337, MessageSummaryItems.All));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, 31337, MessageSummaryItems.All, headerIds));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, (HashSet<HeaderId>) null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (-1, -1, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (-1, -1, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Fetch (5, 1, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.FetchAsync (5, 1, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Fetch (0, 5, 31337, MessageSummaryItems.All, invalidHeaderFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.FetchAsync (0, 5, 31337, MessageSummaryItems.All, invalidHeaderFields));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<UniqueId>) null, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Fetch (uids, 31337, MessageSummaryItems.All, invalidHeaderFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.FetchAsync (uids, 31337, MessageSummaryItems.All, invalidHeaderFields));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch ((IList<int>) null, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync ((IList<int>) null, 31337, MessageSummaryItems.All, headerFields));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, (HashSet<string>) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Fetch (indexes, 31337, MessageSummaryItems.All, invalidHeaderFields));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.FetchAsync (indexes, 31337, MessageSummaryItems.All, invalidHeaderFields));\n\n\t\t\t\t// GetHeaders\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetHeaders (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetHeadersAsync (-1));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetHeaders (UniqueId.Invalid));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetHeadersAsync (UniqueId.Invalid));\n\n\t\t\t\tvar bodyPart = new BodyPartText (new ContentType (\"text\", \"plain\"), \"1.2\");\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetHeaders (-1, bodyPart));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetHeadersAsync (-1, bodyPart));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetHeaders (0, (BodyPart) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetHeadersAsync (0, (BodyPart) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetHeaders (UniqueId.Invalid, bodyPart));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetHeadersAsync (UniqueId.Invalid, bodyPart));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetHeaders (UniqueId.MinValue, (BodyPart) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetHeadersAsync (UniqueId.MinValue, (BodyPart) null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetHeaders (-1, \"1.2\"));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetHeadersAsync (-1, \"1.2\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetHeaders (0, (string) null));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetHeadersAsync (0, (string) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetHeaders (UniqueId.Invalid, \"1.2\"));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await inbox.GetHeadersAsync (UniqueId.Invalid, \"1.2\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetHeaders (UniqueId.MinValue, (string) null));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetHeadersAsync (UniqueId.MinValue, (string) null));\n\n\t\t\t\t// GetMessage\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetMessage (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetMessageAsync (-1));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetMessage (UniqueId.Invalid));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetMessageAsync (UniqueId.Invalid));\n\n\t\t\t\t// GetBodyPart\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetBodyPart (-1, bodyPart));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetBodyPartAsync (-1, bodyPart));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (0, (BodyPart) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (0, (BodyPart) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetBodyPart (UniqueId.Invalid, bodyPart));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetBodyPartAsync (UniqueId.Invalid, bodyPart));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (UniqueId.MinValue, (BodyPart) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (UniqueId.MinValue, (BodyPart) null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetBodyPart (-1, \"1.2\"));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetBodyPartAsync (-1, \"1.2\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (0, (string) null));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (0, (string) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetBodyPart (UniqueId.Invalid, \"1.2\"));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentException> (async () => await inbox.GetBodyPartAsync (UniqueId.Invalid, \"1.2\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetBodyPart (UniqueId.MinValue, (string) null));\n\t\t\t\t//Assert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetBodyPartAsync (UniqueId.MinValue, (string) null));\n\n\t\t\t\t// GetStream\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, \"1.2\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, \"1.2\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (string) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (string) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, \"1.2\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, \"1.2\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (string) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (string) null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, bodyPart));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, bodyPart));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (BodyPart) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (BodyPart) null));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, bodyPart));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, bodyPart));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (BodyPart) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (BodyPart) null));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, 0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, 0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, \"1.2\", 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, \"1.2\", 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (string) null, 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (string) null, 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, \"1.2\", -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, \"1.2\", -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, \"1.2\", 0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, \"1.2\", 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, \"1.2\", 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, \"1.2\", 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (string) null, 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (string) null, 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, \"1.2\", -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, \"1.2\", -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, \"1.2\", 0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, \"1.2\", 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (-1, bodyPart, 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (-1, bodyPart, 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (0, (BodyPart) null, -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (0, (BodyPart) null, -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, bodyPart, -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, bodyPart, -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (0, bodyPart, 0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (0, bodyPart, 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetStream (UniqueId.Invalid, bodyPart, 0, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.GetStreamAsync (UniqueId.Invalid, bodyPart, 0, 1024));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStream (UniqueId.MinValue, (BodyPart) null, -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, (BodyPart) null, -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, bodyPart, -1, 1024));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, bodyPart, -1, 1024));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStream (UniqueId.MinValue, bodyPart, 0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamAsync (UniqueId.MinValue, bodyPart, 0, -1));\n\n\t\t\t\t// GetStreams\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStreams (-1, 0, GetStreamsCallback));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamsAsync (-1, 0, GetStreamsAsyncCallback));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.GetStreams (1, 0, GetStreamsCallback));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.GetStreamsAsync (1, 0, GetStreamsAsyncCallback));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStreams (0, -1, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamsAsync (0, -1, null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStreams ((IList<int>) null, GetStreamsCallback));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamsAsync ((IList<int>) null, GetStreamsAsyncCallback));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStreams (new int [] { 0 }, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamsAsync (new int [] { 0 }, null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStreams ((IList<UniqueId>) null, GetStreamsCallback));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamsAsync ((IList<UniqueId>) null, GetStreamsAsyncCallback));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetStreams (UniqueIdRange.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.GetStreamsAsync (UniqueIdRange.All, null));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotSupportedExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX\\r\\n\", \"common.select-inbox-no-modseq.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\t// disable all features\n\t\t\t\tclient.Capabilities = ImapCapabilities.None;\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// Fetch\n\t\t\t\tvar headers = new HashSet<HeaderId> (new HeaderId[] { HeaderId.Subject });\n\t\t\t\tvar fields = new HashSet<string> (new string[] { \"SUBJECT\" });\n\t\t\t\tvar uids = new UniqueId[] { UniqueId.MinValue };\n\t\t\t\tvar indexes = new int[] { 0 };\n\t\t\t\tulong modseq = 409601020304;\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (0, -1, modseq, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (0, -1, modseq, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (0, -1, modseq, MessageSummaryItems.All, headers));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (0, -1, modseq, MessageSummaryItems.All, headers));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (0, -1, modseq, MessageSummaryItems.All, fields));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (0, -1, modseq, MessageSummaryItems.All, fields));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (indexes, modseq, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (indexes, modseq, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (indexes, modseq, MessageSummaryItems.All, headers));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (indexes, modseq, MessageSummaryItems.All, headers));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (indexes, modseq, MessageSummaryItems.All, fields));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (indexes, modseq, MessageSummaryItems.All, fields));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (uids, modseq, MessageSummaryItems.All));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (uids, modseq, MessageSummaryItems.All));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (uids, modseq, MessageSummaryItems.All, headers));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (uids, modseq, MessageSummaryItems.All, headers));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Fetch (uids, modseq, MessageSummaryItems.All, fields));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (async () => await inbox.FetchAsync (uids, modseq, MessageSummaryItems.All, fields));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateEmptyFetchRequestCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEmptyFetchRequest ()\n\t\t{\n\t\t\tvar commands = CreateEmptyFetchRequestCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\t// First, test a non-empty requests with empty message sets\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Flags);\n\n\t\t\t\tvar messages = inbox.Fetch (Array.Empty<UniqueId> (), request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"UID FETCH (0 uids)\");\n\n\t\t\t\tmessages = inbox.Fetch (Array.Empty<int> (), request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"FETCH (0 indexes)\");\n\n\t\t\t\t// Now make the FetchRequest empty\n\t\t\t\trequest = new FetchRequest (MessageSummaryItems.None);\n\n\t\t\t\tmessages = inbox.Fetch (UniqueIdRange.All, request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"UID FETCH (None)\");\n\n\t\t\t\tmessages = inbox.Fetch (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"FETCH (None)\");\n\n\t\t\t\tmessages = inbox.Fetch (0, -1, request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"FETCH min:max (None)\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEmptyFetchRequestAsync ()\n\t\t{\n\t\t\tvar commands = CreateEmptyFetchRequestCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\t// First, test a non-empty requests with empty message sets\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Flags);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (Array.Empty<UniqueId> (), request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"UID FETCH (0 uids)\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (Array.Empty<int> (), request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"FETCH (0 indexes)\");\n\n\t\t\t\t// Now make the FetchRequest empty\n\t\t\t\trequest = new FetchRequest (MessageSummaryItems.None);\n\n\t\t\t\tmessages = await inbox.FetchAsync (UniqueIdRange.All, request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"UID FETCH (None)\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"FETCH (None)\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (0, -1, request);\n\t\t\t\tAssert.That (messages, Is.Empty, \"FETCH min:max (None)\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchAllHeadersCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1:* (UID FLAGS BODY.PEEK[HEADER])\\r\\n\", \"gmail.fetch-all-headers.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 FETCH 1:6 (UID FLAGS BODY.PEEK[HEADER])\\r\\n\", \"gmail.fetch-all-headers.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 FETCH 1:* (UID FLAGS BODY.PEEK[HEADER])\\r\\n\", \"gmail.fetch-all-headers.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchAllHeaders ()\n\t\t{\n\t\t\tvar commands = CreateFetchAllHeadersCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Flags | MessageSummaryItems.UniqueId) {\n\t\t\t\t\tHeaders = HeaderSet.All\n\t\t\t\t};\n\n\t\t\t\tvar messages = inbox.Fetch (UniqueIdRange.All, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"UID FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"UID FETCH fields\");\n\n\t\t\t\tmessages = inbox.Fetch (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH fields\");\n\n\t\t\t\tmessages = inbox.Fetch (0, -1, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH min:max\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH min:max fields\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchAllHeadersAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchAllHeadersCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Flags | MessageSummaryItems.UniqueId) {\n\t\t\t\t\tHeaders = HeaderSet.All\n\t\t\t\t};\n\n\t\t\t\tvar messages = await inbox.FetchAsync (UniqueIdRange.All, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"UID FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"UID FETCH fields\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH fields\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (0, -1, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH min:max\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH min:max fields\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchInvalidHeadersCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1:* (UID FLAGS BODY.PEEK[HEADER])\\r\\n\", \"gmail.fetch-invalid-headers.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 FETCH 1:6 (UID FLAGS BODY.PEEK[HEADER])\\r\\n\", \"gmail.fetch-invalid-headers.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 FETCH 1:* (UID FLAGS BODY.PEEK[HEADER])\\r\\n\", \"gmail.fetch-invalid-headers.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchInvalidHeaders ()\n\t\t{\n\t\t\tvar commands = CreateFetchInvalidHeadersCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Flags | MessageSummaryItems.UniqueId) {\n\t\t\t\t\tHeaders = HeaderSet.All\n\t\t\t\t};\n\n\t\t\t\tvar messages = inbox.Fetch (UniqueIdRange.All, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"UID FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"UID FETCH fields\");\n\n\t\t\t\tmessages = inbox.Fetch (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH fields\");\n\n\t\t\t\tmessages = inbox.Fetch (0, -1, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH min:max\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH min:max fields\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchInvalidHeadersAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchInvalidHeadersCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Flags | MessageSummaryItems.UniqueId) {\n\t\t\t\t\tHeaders = HeaderSet.All\n\t\t\t\t};\n\n\t\t\t\tvar messages = await inbox.FetchAsync (UniqueIdRange.All, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"UID FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"UID FETCH fields\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH fields\");\n\n\t\t\t\tmessages = await inbox.FetchAsync (0, -1, request);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (6), \"FETCH min:max\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Fields, Is.EqualTo (request.Items | MessageSummaryItems.Headers | MessageSummaryItems.References), \"FETCH min:max fields\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic readonly string[] PreviewTextValues = {\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\",\n\t\t\t\"Don't miss our celebrity guest Monday evening\",\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\",\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\",\n\t\t\t\"Don't miss our celebrity guest Monday evening\",\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\"\n\t\t};\n\n\t\tstatic List<ImapReplayCommand> CreateFetchPreviewTextCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+preview.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1:* (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE PREVIEW)\\r\\n\", \"gmail.fetch-preview.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 FETCH 1:6 (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE PREVIEW)\\r\\n\", \"gmail.fetch-preview.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 FETCH 1:* (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE PREVIEW)\\r\\n\", \"gmail.fetch-preview.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchPreviewText ()\n\t\t{\n\t\t\tvar commands = CreateFetchPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (UniqueIdRange.All, MessageSummaryItems.All | MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (PreviewTextValues.Length), \"UID FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = inbox.Fetch (new int[] { 0, 1, 2, 3, 4, 5 }, MessageSummaryItems.All | MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (PreviewTextValues.Length), \"FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = inbox.Fetch (0, -1, MessageSummaryItems.All | MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (PreviewTextValues.Length), \"FETCH min:max\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchPreviewTextAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (UniqueIdRange.All, MessageSummaryItems.All | MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (PreviewTextValues.Length), \"UID FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = await inbox.FetchAsync (new int[] { 0, 1, 2, 3, 4, 5 }, MessageSummaryItems.All | MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (PreviewTextValues.Length), \"FETCH\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = await inbox.FetchAsync (0, -1, MessageSummaryItems.All | MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (PreviewTextValues.Length), \"FETCH min:max\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n#if ENABLE_LAZY_PREVIEW_API\n\t\tstatic List<ImapReplayCommand> CreateFetchLazyPreviewTextCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+preview.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1:* (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE PREVIEW (LAZY))\\r\\n\", \"gmail.fetch-preview.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 FETCH 1:6 (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE PREVIEW (LAZY))\\r\\n\", \"gmail.fetch-preview.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 FETCH 1:* (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE PREVIEW (LAZY))\\r\\n\", \"gmail.fetch-preview.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchLazyPreviewText ()\n\t\t{\n\t\t\tvar commands = CreateFetchLazyPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.All | MessageSummaryItems.PreviewText) {\n\t\t\t\t\tPreviewOptions = PreviewOptions.Lazy\n\t\t\t\t};\n\n\t\t\t\tvar messages = inbox.Fetch (UniqueIdRange.All, request);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = inbox.Fetch (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = inbox.Fetch (0, -1, request);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchLazyPreviewTextAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchLazyPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.All | MessageSummaryItems.PreviewText) {\n\t\t\t\t\tPreviewOptions = PreviewOptions.Lazy\n\t\t\t\t};\n\n\t\t\t\tvar messages = await inbox.FetchAsync (UniqueIdRange.All, request);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = await inbox.FetchAsync (new int[] { 0, 1, 2, 3, 4, 5 }, request);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tmessages = await inbox.FetchAsync (0, -1, request);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (PreviewTextValues[i]));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n#endif\n\n\t\tstatic readonly string[] SimulatedPreviewTextValues = {\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver…\",\n\t\t\t\"Don’t miss our celebrity guest Monday evening\",\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver…\",\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver…\",\n\t\t\t\"Don’t miss our celebrity guest Monday evening\",\n\t\t\t\"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver…\",\n\t\t\tstring.Empty\n\t\t};\n\n\t\tstatic List<ImapReplayCommand> CreateFetchSimulatedPreviewTextCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE)\\r\\n\", \"gmail.fetch-previewtext-bodystructure.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID FETCH 1,4 (BODY.PEEK[TEXT]<0.512>)\\r\\n\", \"gmail.fetch-previewtext-peek-text-only.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 UID FETCH 3,6 (BODY.PEEK[1]<0.512>)\\r\\n\", \"gmail.fetch-previewtext-peek-text-alternative.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 UID FETCH 2,5 (BODY.PEEK[TEXT]<0.16384>)\\r\\n\", \"gmail.fetch-previewtext-peek-html-only.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 FETCH 1:7 (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE)\\r\\n\", \"gmail.fetch-previewtext-bodystructure.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 UID FETCH 1,4 (BODY.PEEK[TEXT]<0.512>)\\r\\n\", \"gmail.fetch-previewtext-peek-text-only.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000013 UID FETCH 3,6 (BODY.PEEK[1]<0.512>)\\r\\n\", \"gmail.fetch-previewtext-peek-text-alternative.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000014 UID FETCH 2,5 (BODY.PEEK[TEXT]<0.16384>)\\r\\n\", \"gmail.fetch-previewtext-peek-html-only.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000015 FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODYSTRUCTURE)\\r\\n\", \"gmail.fetch-previewtext-bodystructure.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000016 UID FETCH 1,4 (BODY.PEEK[TEXT]<0.512>)\\r\\n\", \"gmail.fetch-previewtext-peek-text-only.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000017 UID FETCH 3,6 (BODY.PEEK[1]<0.512>)\\r\\n\", \"gmail.fetch-previewtext-peek-text-alternative.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000018 UID FETCH 2,5 (BODY.PEEK[TEXT]<0.16384>)\\r\\n\", \"gmail.fetch-previewtext-peek-html-only.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchSimulatedPreviewText ()\n\t\t{\n\t\t\tvar commands = CreateFetchSimulatedPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (UniqueIdRange.All, MessageSummaryItems.Full | MessageSummaryItems.PreviewText);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (SimulatedPreviewTextValues[i]));\n\n\t\t\t\tmessages = inbox.Fetch (new int[] { 0, 1, 2, 3, 4, 5, 6 }, MessageSummaryItems.Full | MessageSummaryItems.PreviewText);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (SimulatedPreviewTextValues[i]));\n\n\t\t\t\tmessages = inbox.Fetch (0, -1, MessageSummaryItems.Full | MessageSummaryItems.PreviewText);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (SimulatedPreviewTextValues[i]));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchSimulatedPreviewTextAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchSimulatedPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (UniqueIdRange.All, MessageSummaryItems.Full | MessageSummaryItems.PreviewText);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (SimulatedPreviewTextValues[i]));\n\n\t\t\t\tmessages = await inbox.FetchAsync (new int[] { 0, 1, 2, 3, 4, 5, 6 }, MessageSummaryItems.Full | MessageSummaryItems.PreviewText);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (SimulatedPreviewTextValues[i]));\n\n\t\t\t\tmessages = await inbox.FetchAsync (0, -1, MessageSummaryItems.Full | MessageSummaryItems.PreviewText);\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].PreviewText, Is.EqualTo (SimulatedPreviewTextValues[i]));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchSimulatedKoreanPreviewTextCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1 (UID BODYSTRUCTURE)\\r\\n\", \"gmail.fetch-korean-previewtext-bodystructure.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID FETCH 1 (BODY.PEEK[TEXT]<0.512>)\\r\\n\", \"gmail.fetch-korean-previewtext-peek-text-only.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchSimulatedKoreanPreviewText ()\n\t\t{\n\t\t\tconst string koreanPreviewText = \"서기 250년경 고분 시대가 시작되면서 고분이라고 불리는 거대한 무덤이 건설된 것은 보다 집약적인 농업과 철기 기술의 도입에 힘입어 강력한 전사 엘리트의 출현을 나타냅니다. 일본은 철과 기타 물품의 공급을 확보하기 위해 남한의 연안 지배 집단과 집중적인 접촉을 벌이면서 중국에 사신을 파견하면서 대륙 본토와의 접촉이 증가했습니다(238, 243, 247). 4세기 동안 지속된 한반도의 한국 세력과\";\n\t\t\tvar commands = CreateFetchSimulatedKoreanPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (new[] { new UniqueId (1) }, MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages.Count, Is.EqualTo (1), \"Expected 1 message to be fetched.\");\n\t\t\t\tAssert.That (messages[0].PreviewText, Is.EqualTo (koreanPreviewText));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchSimulatedKoreanPreviewTextAsync ()\n\t\t{\n\t\t\tconst string koreanPreviewText = \"서기 250년경 고분 시대가 시작되면서 고분이라고 불리는 거대한 무덤이 건설된 것은 보다 집약적인 농업과 철기 기술의 도입에 힘입어 강력한 전사 엘리트의 출현을 나타냅니다. 일본은 철과 기타 물품의 공급을 확보하기 위해 남한의 연안 지배 집단과 집중적인 접촉을 벌이면서 중국에 사신을 파견하면서 대륙 본토와의 접촉이 증가했습니다(238, 243, 247). 4세기 동안 지속된 한반도의 한국 세력과\";\n\t\t\tvar commands = CreateFetchSimulatedKoreanPreviewTextCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (new[] { new UniqueId (1) }, MessageSummaryItems.PreviewText);\n\t\t\t\tAssert.That (messages.Count, Is.EqualTo (1), \"Expected 1 message to be fetched.\");\n\t\t\t\tAssert.That (messages[0].PreviewText, Is.EqualTo (koreanPreviewText));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchQuotedStringCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 FETCH 1:* (UID BODYSTRUCTURE)\\r\\n\", \"gmail.fetch-quoted-string-bodystructure.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID FETCH 1 (BODY.PEEK[1.TEXT]<0.512>)\\r\\n\", \"gmail.fetch-quoted-string.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchQuotedString ()\n\t\t{\n\t\t\tvar commands = CreateFetchQuotedStringCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\t\t\t\tusing (var stream = inbox.GetStream (messages[0].UniqueId, messages[0].TextBody.PartSpecifier + \".TEXT\", 0, 512)) {\n\t\t\t\t\tvar text = Encoding.UTF8.GetString (((MemoryStream) stream).ToArray ());\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"This is the message body as a quoted-string.\"), \"The message body does not match.\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchQuotedStringAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchQuotedStringCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\t\t\t\tusing (var stream = await inbox.GetStreamAsync (messages[0].UniqueId, messages[0].TextBody.PartSpecifier + \".TEXT\", 0, 512)) {\n\t\t\t\t\tvar text = Encoding.UTF8.GetString (((MemoryStream) stream).ToArray ());\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (\"This is the message body as a quoted-string.\"), \"The message body does not match.\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchNilCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 FETCH 1:* (UID BODYSTRUCTURE)\\r\\n\", \"gmail.fetch-nil-bodystructure.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID FETCH 1 (BODY.PEEK[1.TEXT]<0.512>)\\r\\n\", \"gmail.fetch-nil.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchNil ()\n\t\t{\n\t\t\tvar commands = CreateFetchNilCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\t\t\t\tusing (var stream = inbox.GetStream (messages[0].UniqueId, messages[0].TextBody.PartSpecifier + \".TEXT\", 0, 512)) {\n\t\t\t\t\tvar text = Encoding.UTF8.GetString (((MemoryStream) stream).ToArray ());\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (string.Empty), \"The message body does not match.\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchNilAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchNilCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);\n\t\t\t\tusing (var stream = await inbox.GetStreamAsync (messages[0].UniqueId, messages[0].TextBody.PartSpecifier + \".TEXT\", 0, 512)) {\n\t\t\t\t\tvar text = Encoding.UTF8.GetString (((MemoryStream) stream).ToArray ());\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (string.Empty), \"The message body does not match.\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateExpungeDuringFetchCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1:6 (UID INTERNALDATE ENVELOPE)\\r\\n\", \"gmail.expunge-during-fetch.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExpungeDuringFetch ()\n\t\t{\n\t\t\tvar commands = CreateExpungeDuringFetchCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar range = new UniqueIdRange (0, 1, 6);\n\t\t\t\tvar messages = inbox.Fetch (range, MessageSummaryItems.UniqueId | MessageSummaryItems.InternalDate | MessageSummaryItems.Envelope);\n\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (4), \"Count\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Index, Is.EqualTo (i), $\"Index #{i}\");\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo ((uint) 1), \"UniqueId #0\");\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo ((uint) 3), \"UniqueId #1\");\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo ((uint) 4), \"UniqueId #2\");\n\t\t\t\tAssert.That (messages[3].UniqueId.Id, Is.EqualTo ((uint) 5), \"UniqueId #3\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExpungeDuringFetchAsync ()\n\t\t{\n\t\t\tvar commands = CreateExpungeDuringFetchCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar range = new UniqueIdRange (0, 1, 6);\n\t\t\t\tvar messages = await inbox.FetchAsync (range, MessageSummaryItems.UniqueId | MessageSummaryItems.InternalDate | MessageSummaryItems.Envelope);\n\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (4), \"Count\");\n\t\t\t\tfor (int i = 0; i < messages.Count; i++)\n\t\t\t\t\tAssert.That (messages[i].Index, Is.EqualTo (i), $\"Index #{i}\");\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo ((uint) 1), \"UniqueId #0\");\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo ((uint) 3), \"UniqueId #1\");\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo ((uint) 4), \"UniqueId #2\");\n\t\t\t\tAssert.That (messages[3].UniqueId.Id, Is.EqualTo ((uint) 5), \"UniqueId #3\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateExtractingPrecisePangolinAttachmentCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"gmail.list-personal.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 FETCH 270 (BODY.PEEK[])\\r\\n\", \"gmail.precise-pangolin-message.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExtractingPrecisePangolinAttachment ()\n\t\t{\n\t\t\tvar commands = CreateExtractingPrecisePangolinAttachmentCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = personal.GetSubfolders ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tusing (var message = client.Inbox.GetMessage (269)) {\n\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"167a46aa81e881da2ea8a840727384d3\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExtractingPrecisePangolinAttachmentAsync ()\n\t\t{\n\t\t\tvar commands = CreateExtractingPrecisePangolinAttachmentCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: Do not try XOAUTH2\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"XOAUTH2\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tAssert.That (inbox, Is.Not.Null, \"Expected non-null Inbox folder.\");\n\t\t\t\tAssert.That (inbox.Attributes, Is.EqualTo (FolderAttributes.Inbox | FolderAttributes.HasNoChildren | FolderAttributes.Subscribed), \"Expected Inbox attributes to be \\\\HasNoChildren.\");\n\n\t\t\t\tforeach (var special in Enum.GetValues (typeof (SpecialFolder)).OfType<SpecialFolder> ()) {\n\t\t\t\t\tvar folder = client.GetFolder (special);\n\n\t\t\t\t\tif (special != SpecialFolder.Archive) {\n\t\t\t\t\t\tvar expected = GetSpecialFolderAttribute (special) | FolderAttributes.HasNoChildren;\n\n\t\t\t\t\t\tAssert.That (folder, Is.Not.Null, $\"Expected non-null {special} folder.\");\n\t\t\t\t\t\tAssert.That (folder.Attributes, Is.EqualTo (expected), $\"Expected {special} attributes to be \\\\HasNoChildren.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (folder, Is.Null, $\"Expected null {special} folder.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// disable LIST-EXTENDED\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListExtended;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar folders = await personal.GetSubfoldersAsync ();\n\t\t\t\tAssert.That (folders[0], Is.EqualTo (client.Inbox), \"Expected the first folder to be the Inbox.\");\n\t\t\t\tAssert.That (folders[1].FullName, Is.EqualTo (\"[Gmail]\"), \"Expected the second folder to be [Gmail].\");\n\t\t\t\tAssert.That (folders[1].Attributes, Is.EqualTo (FolderAttributes.NoSelect | FolderAttributes.HasChildren), \"Expected [Gmail] folder to be \\\\Noselect \\\\HasChildren.\");\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tusing (var message = await client.Inbox.GetMessageAsync (269)) {\n\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"167a46aa81e881da2ea8a840727384d3\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchObjectIdAttributesCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+statussize+objectid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 FETCH 1:* (UID EMAILID THREADID)\\r\\n\", \"gmail.fetch-objectid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchObjectIdAttributes ()\n\t\t{\n\t\t\tvar commands = CreateFetchObjectIdAttributesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.ObjectID), Is.True, \"OBJECTID\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.EmailId | MessageSummaryItems.ThreadId);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (4), \"Count\");\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo (1), \"UniqueId\");\n\t\t\t\tAssert.That (messages[0].EmailId, Is.EqualTo (\"M6d99ac3275bb4e\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[0].ThreadId, Is.EqualTo (\"T64b478a75b7ea9\"), \"ThreadId\");\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo (2), \"UniqueId\");\n\t\t\t\tAssert.That (messages[1].EmailId, Is.EqualTo (\"M288836c4c7a762\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[1].ThreadId, Is.EqualTo (\"T64b478a75b7ea9\"), \"ThreadId\");\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo (3), \"UniqueId\");\n\t\t\t\tAssert.That (messages[2].EmailId, Is.EqualTo (\"M5fdc09b49ea703\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[2].ThreadId, Is.EqualTo (\"T11863d02dd95b5\"), \"ThreadId\");\n\t\t\t\tAssert.That (messages[3].UniqueId.Id, Is.EqualTo (4), \"UniqueId\");\n\t\t\t\tAssert.That (messages[3].EmailId, Is.EqualTo (\"M4fdc09b49ea629\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[3].ThreadId, Is.EqualTo (null), \"ThreadId\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchObjectIdAttributesAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchObjectIdAttributesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.ObjectID), Is.True, \"OBJECTID\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.EmailId | MessageSummaryItems.ThreadId);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (4), \"Count\");\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo (1), \"UniqueId\");\n\t\t\t\tAssert.That (messages[0].EmailId, Is.EqualTo (\"M6d99ac3275bb4e\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[0].ThreadId, Is.EqualTo (\"T64b478a75b7ea9\"), \"ThreadId\");\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo (2), \"UniqueId\");\n\t\t\t\tAssert.That (messages[1].EmailId, Is.EqualTo (\"M288836c4c7a762\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[1].ThreadId, Is.EqualTo (\"T64b478a75b7ea9\"), \"ThreadId\");\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo (3), \"UniqueId\");\n\t\t\t\tAssert.That (messages[2].EmailId, Is.EqualTo (\"M5fdc09b49ea703\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[2].ThreadId, Is.EqualTo (\"T11863d02dd95b5\"), \"ThreadId\");\n\t\t\t\tAssert.That (messages[3].UniqueId.Id, Is.EqualTo (4), \"UniqueId\");\n\t\t\t\tAssert.That (messages[3].EmailId, Is.EqualTo (\"M4fdc09b49ea629\"), \"EmailId\");\n\t\t\t\tAssert.That (messages[3].ThreadId, Is.EqualTo (null), \"ThreadId\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchSaveDateCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+savedate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 FETCH 1:* (UID SAVEDATE)\\r\\n\", \"gmail.fetch-savedate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchSaveDate ()\n\t\t{\n\t\t\tvar commands = CreateFetchSaveDateCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.SaveDate), Is.True, \"SAVEDATE\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.SaveDate);\n\t\t\t\tvar dto = new DateTimeOffset (2023, 9, 12, 13, 39, 01, new TimeSpan (-4, 0, 0));\n\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (4), \"Count\");\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo (1), \"UniqueId\");\n\t\t\t\tAssert.That (messages[0].SaveDate, Is.EqualTo (dto), \"SaveDate\");\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo (2), \"UniqueId\");\n\t\t\t\tAssert.That (messages[1].SaveDate, Is.EqualTo (dto), \"SaveDate\");\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo (3), \"UniqueId\");\n\t\t\t\tAssert.That (messages[2].SaveDate, Is.EqualTo (dto), \"SaveDate\");\n\t\t\t\tAssert.That (messages[3].UniqueId.Id, Is.EqualTo (4), \"UniqueId\");\n\t\t\t\tAssert.That (messages[3].SaveDate, Is.EqualTo (null), \"SaveDate\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchSaveDateAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchSaveDateCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.SaveDate), Is.True, \"SAVEDATE\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.SaveDate);\n\t\t\t\tvar dto = new DateTimeOffset (2023, 9, 12, 13, 39, 01, new TimeSpan (-4, 0, 0));\n\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (4), \"Count\");\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo (1), \"UniqueId\");\n\t\t\t\tAssert.That (messages[0].SaveDate, Is.EqualTo (dto), \"SaveDate\");\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo (2), \"UniqueId\");\n\t\t\t\tAssert.That (messages[1].SaveDate, Is.EqualTo (dto), \"SaveDate\");\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo (3), \"UniqueId\");\n\t\t\t\tAssert.That (messages[2].SaveDate, Is.EqualTo (dto), \"SaveDate\");\n\t\t\t\tAssert.That (messages[3].UniqueId.Id, Is.EqualTo (4), \"UniqueId\");\n\t\t\t\tAssert.That (messages[3].SaveDate, Is.EqualTo (null), \"SaveDate\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateFetchAnnotationsCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate-readonly.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 FETCH 1:* (UID ANNOTATION (/* (value size)))\\r\\n\", \"common.fetch-annotations.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 NOOP\\r\\n\", \"common.fetch-annotations.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchAnnotations ()\n\t\t{\n\t\t\tvar commands = CreateFetchAnnotationsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Annotate), Is.True, \"ANNOTATE-EXPERIMENT-1\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadOnly), \"AnnotationAccess\");\n\t\t\t\t//Assert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\t//Assert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tvar messages = inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Annotations);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (3), \"Count\");\n\n\t\t\t\tIReadOnlyList<Annotation> annotations;\n\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo (1), \"UniqueId\");\n\t\t\t\tannotations = messages[0].Annotations;\n\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"Entry\");\n\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"Properties.Count\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"value.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"value.shared\");\n\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo (2), \"UniqueId\");\n\t\t\t\tannotations = messages[1].Annotations;\n\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"annotations[0].Properties.Count\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\tAssert.That (annotations[1].Entry, Is.EqualTo (AnnotationEntry.AltSubject), \"annotations[1].Entry\");\n\t\t\t\tAssert.That (annotations[1].Properties, Has.Count.EqualTo (2), \"annotations[1].Properties.Count\");\n\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My subject\"), \"annotations[1] value.priv\");\n\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[1] value.shared\");\n\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo (3), \"UniqueId\");\n\t\t\t\tannotations = messages[2].Annotations;\n\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (4), \"annotations[0].Properties.Count\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateSize], Is.EqualTo (\"10\"), \"annotations[0] size.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedSize], Is.EqualTo (\"0\"), \"annotations[0] size.shared\");\n\n\t\t\t\tvar annotationsChanged = new List<AnnotationsChangedEventArgs> ();\n\n\t\t\t\tinbox.AnnotationsChanged += (sender, e) => {\n\t\t\t\t\tannotationsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tclient.NoOp ();\n\n\t\t\t\tAssert.That (annotationsChanged, Has.Count.EqualTo (3), \"# AnnotationsChanged events\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchAnnotationsAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchAnnotationsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Annotate), Is.True, \"ANNOTATE-EXPERIMENT-1\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadOnly), \"AnnotationAccess\");\n\t\t\t\t//Assert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\t//Assert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\tvar messages = await inbox.FetchAsync (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Annotations);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (3), \"Count\");\n\n\t\t\t\tIReadOnlyList<Annotation> annotations;\n\n\t\t\t\tAssert.That (messages[0].UniqueId.Id, Is.EqualTo (1), \"UniqueId\");\n\t\t\t\tannotations = messages[0].Annotations;\n\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"Entry\");\n\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"Properties.Count\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"value.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"value.shared\");\n\n\t\t\t\tAssert.That (messages[1].UniqueId.Id, Is.EqualTo (2), \"UniqueId\");\n\t\t\t\tannotations = messages[1].Annotations;\n\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"annotations[0].Properties.Count\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\tAssert.That (annotations[1].Entry, Is.EqualTo (AnnotationEntry.AltSubject), \"annotations[1].Entry\");\n\t\t\t\tAssert.That (annotations[1].Properties, Has.Count.EqualTo (2), \"annotations[1].Properties.Count\");\n\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My subject\"), \"annotations[1] value.priv\");\n\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[1] value.shared\");\n\n\t\t\t\tAssert.That (messages[2].UniqueId.Id, Is.EqualTo (3), \"UniqueId\");\n\t\t\t\tannotations = messages[2].Annotations;\n\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (4), \"annotations[0].Properties.Count\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateSize], Is.EqualTo (\"10\"), \"annotations[0] size.priv\");\n\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedSize], Is.EqualTo (\"0\"), \"annotations[0] size.shared\");\n\n\t\t\t\tvar annotationsChanged = new List<AnnotationsChangedEventArgs> ();\n\n\t\t\t\tinbox.AnnotationsChanged += (sender, e) => {\n\t\t\t\t\tannotationsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tawait client.NoOpAsync ();\n\n\t\t\t\tAssert.That (annotationsChanged, Has.Count.EqualTo (3), \"# AnnotationsChanged events\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateDominoParenthesisWorkaroundCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", Encoding.ASCII.GetBytes (\"* OK Domino IMAP4 Server Release 10.0.1FP3 ready Wed, 30 Oct 2019 09:28:06 +0100\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"domino.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username password\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 CAPABILITY\\r\\n\", \"domino.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 NAMESPACE\\r\\n\", \"domino.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"domino.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT Inbox\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 FETCH 1:* (UID ENVELOPE BODYSTRUCTURE)\\r\\n\", \"domino.fetch-extra-parens.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDominoParenthesisWorkaround ()\n\t\t{\n\t\t\tvar commands = CreateDominoParenthesisWorkaroundCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"Personal Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (\"\"), \"Personal Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('\\\\'), \"Personal DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.OtherNamespaces, Has.Count.EqualTo (1), \"Other Count\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].Path, Is.EqualTo (\"Other\"), \"Other Path\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].DirectorySeparator, Is.EqualTo ('\\\\'), \"Other DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.SharedNamespaces, Has.Count.EqualTo (1), \"Shared Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].Path, Is.EqualTo (\"Shared\"), \"Shared Path\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].DirectorySeparator, Is.EqualTo ('\\\\'), \"Shared DirectorySeparator\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar messages = inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (29), \"Count\");\n\n\t\t\t\tfor (int i = 0; i < 29; i++) {\n\t\t\t\t\tAssert.That (messages[i].Index, Is.EqualTo (i), \"MessageSummaryItems are out of order!\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestDominoParenthesisWorkaroundAsync ()\n\t\t{\n\t\t\tvar commands = CreateDominoParenthesisWorkaroundCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.PersonalNamespaces, Has.Count.EqualTo (1), \"Personal Count\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].Path, Is.EqualTo (\"\"), \"Personal Path\");\n\t\t\t\tAssert.That (client.PersonalNamespaces[0].DirectorySeparator, Is.EqualTo ('\\\\'), \"Personal DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.OtherNamespaces, Has.Count.EqualTo (1), \"Other Count\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].Path, Is.EqualTo (\"Other\"), \"Other Path\");\n\t\t\t\tAssert.That (client.OtherNamespaces[0].DirectorySeparator, Is.EqualTo ('\\\\'), \"Other DirectorySeparator\");\n\n\t\t\t\tAssert.That (client.SharedNamespaces, Has.Count.EqualTo (1), \"Shared Count\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].Path, Is.EqualTo (\"Shared\"), \"Shared Path\");\n\t\t\t\tAssert.That (client.SharedNamespaces[0].DirectorySeparator, Is.EqualTo ('\\\\'), \"Shared DirectorySeparator\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar messages = await inbox.FetchAsync (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (29), \"Count\");\n\n\t\t\t\tfor (int i = 0; i < 29; i++) {\n\t\t\t\t\tAssert.That (messages[i].Index, Is.EqualTo (i), \"MessageSummaryItems are out of order!\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateFetchStreamUnsolicitedInfoCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE ANNOTATE)\\r\\n\", \"common.select-inbox-annotate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID FETCH 1 (BODY.PEEK[HEADER])\\r\\n\", \"gmail.headers.1+unsolicited-info.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID FETCH 1 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.1+unsolicited-info.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID FETCH 1 (BODY.PEEK[])\\r\\n\", \"gmail.fetch.1+unsolicited-info.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchStreamUnsolicitedInfo ()\n\t\t{\n\t\t\tvar commands = CreateFetchStreamUnsolicitedInfoCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Annotate), Is.True, \"ANNOTATE-EXPERIMENT-1\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\t//Assert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\t//Assert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\t// Keep track of various folder events\n\t\t\t\tvar annotationsChanged = new List<AnnotationsChangedEventArgs> ();\n\t\t\t\tvar flagsChanged = new List<MessageFlagsChangedEventArgs> ();\n\t\t\t\tvar labelsChanged = new List<MessageLabelsChangedEventArgs> ();\n\t\t\t\tvar modSeqChanged = new List<ModSeqChangedEventArgs> ();\n\n\t\t\t\tinbox.AnnotationsChanged += (sender, e) => {\n\t\t\t\t\tannotationsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tinbox.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tflagsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tinbox.MessageLabelsChanged += (sender, e) => {\n\t\t\t\t\tlabelsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tinbox.ModSeqChanged += (sender, e) => {\n\t\t\t\t\tmodSeqChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tAssert.That (inbox.HighestModSeq, Is.EqualTo (2), \"HIGHESTMODSEQ #1\");\n\n\t\t\t\tvar headers = inbox.GetHeaders (new UniqueId (1));\n\t\t\t\tvar message = inbox.GetMessage (new UniqueId (1));\n\t\t\t\tvar stream = inbox.GetStream (new UniqueId (1));\n\n\t\t\t\tAssert.That (inbox.HighestModSeq, Is.EqualTo (29233), \"HIGHESTMODSEQ #2\");\n\n\t\t\t\tAssert.That (annotationsChanged, Has.Count.EqualTo (3), \"AnnotationsChanged\");\n\t\t\t\tAssert.That (flagsChanged, Has.Count.EqualTo (3), \"FlagsChanged\");\n\t\t\t\tAssert.That (labelsChanged, Has.Count.EqualTo (3), \"LabelsChanged\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (3), \"ModSeqChanged\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchStreamUnsolicitedInfoAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchStreamUnsolicitedInfoCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Annotate), Is.True, \"ANNOTATE-EXPERIMENT-1\");\n\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.AnnotationAccess, Is.EqualTo (AnnotationAccess.ReadWrite), \"AnnotationAccess\");\n\t\t\t\t//Assert.That (inbox.AnnotationScopes, Is.EqualTo (AnnotationScope.Shared), \"AnnotationScopes\");\n\t\t\t\t//Assert.That (inbox.MaxAnnotationSize, Is.EqualTo (20480), \"MaxAnnotationSize\");\n\n\t\t\t\t// Keep track of various folder events\n\t\t\t\tvar annotationsChanged = new List<AnnotationsChangedEventArgs> ();\n\t\t\t\tvar flagsChanged = new List<MessageFlagsChangedEventArgs> ();\n\t\t\t\tvar labelsChanged = new List<MessageLabelsChangedEventArgs> ();\n\t\t\t\tvar modSeqChanged = new List<ModSeqChangedEventArgs> ();\n\n\t\t\t\tinbox.AnnotationsChanged += (sender, e) => {\n\t\t\t\t\tannotationsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tinbox.MessageFlagsChanged += (sender, e) => {\n\t\t\t\t\tflagsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tinbox.MessageLabelsChanged += (sender, e) => {\n\t\t\t\t\tlabelsChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tinbox.ModSeqChanged += (sender, e) => {\n\t\t\t\t\tmodSeqChanged.Add (e);\n\t\t\t\t};\n\n\t\t\t\tAssert.That (inbox.HighestModSeq, Is.EqualTo (2), \"HIGHESTMODSEQ #1\");\n\n\t\t\t\tvar headers = await inbox.GetHeadersAsync (new UniqueId (1));\n\t\t\t\tvar message = await inbox.GetMessageAsync (new UniqueId (1));\n\t\t\t\tvar stream = await inbox.GetStreamAsync (new UniqueId (1));\n\n\t\t\t\tAssert.That (inbox.HighestModSeq, Is.EqualTo (29233), \"HIGHESTMODSEQ #2\");\n\n\t\t\t\tAssert.That (annotationsChanged, Has.Count.EqualTo (3), \"AnnotationsChanged\");\n\t\t\t\tAssert.That (flagsChanged, Has.Count.EqualTo (3), \"FlagsChanged\");\n\t\t\t\tAssert.That (labelsChanged, Has.Count.EqualTo (3), \"LabelsChanged\");\n\t\t\t\tAssert.That (modSeqChanged, Has.Count.EqualTo (3), \"ModSeqChanged\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateFetchNegativeModSeqResponseValuesCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"zoho.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"zoho.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"zoho.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"zoho.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"zoho.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"zoho.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 EXAMINE Gesendet (CONDSTORE)\\r\\n\", \"zoho.examine-gesendet.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 FETCH 1:74 (UID FLAGS MODSEQ)\\r\\n\", \"zoho.fetch-negative-modseq-values.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFetchNegativeModSeqResponseValues ()\n\t\t{\n\t\t\tvar commands = CreateFetchNegativeModSeqResponseValuesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar gesendet = client.GetFolder (SpecialFolder.Sent);\n\t\t\t\tgesendet.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = gesendet.Fetch (0, 73, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (74), \"Count\");\n\n\t\t\t\tfor (int i = 0; i < 15; i++) {\n\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.EqualTo ((ulong) 0), $\"MODSEQ {i}\");\n\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen), $\"FLAGS {i}\");\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 15; i < 39; i++) {\n\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.EqualTo ((ulong) 0), $\"MODSEQ {i}\");\n\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen | MessageFlags.Recent), $\"FLAGS {i}\");\n\n\t\t\t\t\tif (i == 35) {\n\t\t\t\t\t\tAssert.That (messages[i].Keywords, Has.Count.EqualTo (1), $\"KEYWORDS {i}\");\n\t\t\t\t\t\tAssert.That (messages[i].Keywords.Contains (\"$FORWARDED\"), Is.True, $\"KEYWORDS {i}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 39; i < 70; i++) {\n\t\t\t\t\tif (i == 53) {\n\t\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.EqualTo (1538484935027010002), $\"MODSEQ {i}\");\n\t\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen | MessageFlags.Recent | MessageFlags.Answered), $\"FLAGS {i}\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.Null, $\"MODSEQ {i}\");\n\t\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen | MessageFlags.Recent), $\"FLAGS {i}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestFetchNegativeModSeqResponseValuesAsync ()\n\t\t{\n\t\t\tvar commands = CreateFetchNegativeModSeqResponseValuesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar gesendet = client.GetFolder (SpecialFolder.Sent);\n\t\t\t\tawait gesendet.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar messages = await gesendet.FetchAsync (0, 73, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\tAssert.That (messages, Has.Count.EqualTo (74), \"Count\");\n\n\t\t\t\tfor (int i = 0; i < 15; i++) {\n\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.EqualTo ((ulong) 0), $\"MODSEQ {i}\");\n\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen), $\"FLAGS {i}\");\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 15; i < 39; i++) {\n\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.EqualTo ((ulong) 0), $\"MODSEQ {i}\");\n\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen | MessageFlags.Recent), $\"FLAGS {i}\");\n\n\t\t\t\t\tif (i == 35) {\n\t\t\t\t\t\tAssert.That (messages[i].Keywords, Has.Count.EqualTo (1), $\"KEYWORDS {i}\");\n\t\t\t\t\t\tAssert.That (messages[i].Keywords.Contains (\"$FORWARDED\"), Is.True, $\"KEYWORDS {i}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 39; i < 70; i++) {\n\t\t\t\t\tif (i == 53) {\n\t\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.EqualTo (1538484935027010002), $\"MODSEQ {i}\");\n\t\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen | MessageFlags.Recent | MessageFlags.Answered), $\"FLAGS {i}\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tAssert.That (messages[i].ModSeq, Is.Null, $\"MODSEQ {i}\");\n\t\t\t\t\t\tAssert.That (messages[i].Flags, Is.EqualTo (MessageFlags.Seen | MessageFlags.Recent), $\"FLAGS {i}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateYandexGetBodyPartMissingContentCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"yandex.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"yandex.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN\\r\\n\", ImapReplayCommandResponse.Plus),\n\t\t\t\tnew ImapReplayCommand (\"A00000001\", \"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"yandex.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"yandex.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"yandex.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"yandex.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX\\r\\n\", \"yandex.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID FETCH 3016 (BODY.PEEK[2.MIME] BODY.PEEK[2])\\r\\n\", \"yandex.getbodypart-missing-content.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestYandexGetBodyPartMissingContent ()\n\t\t{\n\t\t\t// IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST UIDPLUS ENABLE ID AUTH=PLAIN AUTH=XOAUTH2 IDLE MOVE\n\t\t\tconst ImapCapabilities YandexGreetingCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Children | ImapCapabilities.Unselect |\n\t\t\t\tImapCapabilities.LiteralPlus | ImapCapabilities.Namespace | ImapCapabilities.XList | ImapCapabilities.UidPlus | ImapCapabilities.Enable |\n\t\t\t\tImapCapabilities.Id | ImapCapabilities.Idle | ImapCapabilities.Move | ImapCapabilities.Status;\n\t\t\tvar commands = CreateYandexGetBodyPartMissingContentCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (YandexGreetingCapabilities), \"Greeting Capabilities\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (YandexGreetingCapabilities), \"Greeting Capabilities\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t//var messages = client.Inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\t//Assert.That (messages, Has.Count.EqualTo (74), \"Count\");\n\n\t\t\t\tvar bodyPart = new BodyPartBasic (new ContentType (\"application\", \"pdf\"), \"2\");\n\t\t\t\tvar body = client.Inbox.GetBodyPart (new UniqueId (3016), bodyPart);\n\t\t\t\tAssert.That (body, Is.Not.Null);\n\t\t\t\tAssert.That (body, Is.InstanceOf<MimePart> ());\n\t\t\t\tvar part = (MimePart) body;\n\t\t\t\tAssert.That (part.ContentType.MimeType, Is.EqualTo (\"application/pdf\"), \"Content-Type\");\n\t\t\t\tAssert.That (part.ContentType.Name, Is.EqualTo (\"empty.pdf\"), \"name\");\n\t\t\t\tAssert.That (part.ContentDisposition.Disposition, Is.EqualTo (ContentDisposition.Attachment), \"Content-Disposition\");\n\t\t\t\tAssert.That (part.ContentDisposition.FileName, Is.EqualTo (\"empty.pdf\"), \"filename\");\n\t\t\t\tAssert.That (part.ContentTransferEncoding, Is.EqualTo (ContentEncoding.Base64), \"Content-Transfer-Encoding\");\n\t\t\t\tAssert.That (part.Content, Is.Null);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestYandexGetBodyPartMissingContentAsync ()\n\t\t{\n\t\t\t// IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST UIDPLUS ENABLE ID AUTH=PLAIN AUTH=XOAUTH2 IDLE MOVE\n\t\t\tconst ImapCapabilities YandexGreetingCapabilities = ImapCapabilities.IMAP4rev1 | ImapCapabilities.Children | ImapCapabilities.Unselect |\n\t\t\t\tImapCapabilities.LiteralPlus | ImapCapabilities.Namespace | ImapCapabilities.XList | ImapCapabilities.UidPlus | ImapCapabilities.Enable |\n\t\t\t\tImapCapabilities.Id | ImapCapabilities.Idle | ImapCapabilities.Move | ImapCapabilities.Status;\n\t\t\tvar commands = CreateYandexGetBodyPartMissingContentCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (YandexGreetingCapabilities), \"Greeting Capabilities\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (YandexGreetingCapabilities), \"Greeting Capabilities\");\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\t//var messages = client.Inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Flags | MessageSummaryItems.ModSeq);\n\t\t\t\t//Assert.That (messages, Has.Count.EqualTo (74), \"Count\");\n\n\t\t\t\tvar bodyPart = new BodyPartBasic (new ContentType (\"application\", \"pdf\"), \"2\");\n\t\t\t\tvar body = await client.Inbox.GetBodyPartAsync (new UniqueId (3016), bodyPart);\n\t\t\t\tAssert.That (body, Is.Not.Null);\n\t\t\t\tAssert.That (body, Is.InstanceOf<MimePart> ());\n\t\t\t\tvar part = (MimePart) body;\n\t\t\t\tAssert.That (part.ContentType.MimeType, Is.EqualTo (\"application/pdf\"), \"Content-Type\");\n\t\t\t\tAssert.That (part.ContentType.Name, Is.EqualTo (\"empty.pdf\"), \"name\");\n\t\t\t\tAssert.That (part.ContentDisposition.Disposition, Is.EqualTo (ContentDisposition.Attachment), \"Content-Disposition\");\n\t\t\t\tAssert.That (part.ContentDisposition.FileName, Is.EqualTo (\"empty.pdf\"), \"filename\");\n\t\t\t\tAssert.That (part.ContentTransferEncoding, Is.EqualTo (ContentEncoding.Base64), \"Content-Transfer-Encoding\");\n\t\t\t\tAssert.That (part.Content, Is.Null);\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (\"ALL\", MessageSummaryItems.All)]\n\t\t[TestCase (\"FAST\", MessageSummaryItems.Fast)]\n\t\t[TestCase (\"FULL\", MessageSummaryItems.Full)]\n\t\tpublic void TestFormatFetchSummaryItemsMacros (string expected, MessageSummaryItems items)\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (items);\n\t\t\t\tvar command = ImapFolder.FormatSummaryItems (engine, request, out _);\n\n\t\t\t\tAssert.That (command, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsExcludeHeaders ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest () {\n\t\t\t\t\tHeaders = new HeaderSet () {\n\t\t\t\t\t\tExclude = true\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tstring command;\n\n\t\t\t\tcommand = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER]\"));\n\n\t\t\t\trequest = new FetchRequest () {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { \"FROM\", \"SUBJECT\", \"DATE\" }) {\n\t\t\t\t\t\tExclude = true\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tcommand = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS.NOT (FROM SUBJECT DATE)]\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsReferences ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.References);\n\t\t\t\tstring command;\n\n\t\t\t\tcommand = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS (REFERENCES)]\"));\n\n\t\t\t\trequest = new FetchRequest () {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { \"REFERENCES\" })\n\t\t\t\t};\n\n\t\t\t\tcommand = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS (REFERENCES)]\"));\n\n\t\t\t\trequest = new FetchRequest (MessageSummaryItems.References) {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { \"REFERENCES\" })\n\t\t\t\t};\n\n\t\t\t\tcommand = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS (REFERENCES)]\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsAllHeaders ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.Headers);\n\n\t\t\t\tvar command = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER]\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsHeaderFieldsAndReferences ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.References) {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { HeaderId.InReplyTo })\n\t\t\t\t};\n\n\t\t\t\tvar command = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS (IN-REPLY-TO REFERENCES)]\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsExcludeHeaderFieldsReferencesAndReferences ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.References) {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { HeaderId.References }) {\n\t\t\t\t\t\tExclude = true\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar command = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER]\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsExcludeHeaderFieldsInReplyToAndReferences ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.References) {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { HeaderId.InReplyTo }) {\n\t\t\t\t\t\tExclude = true\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar command = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS.NOT (IN-REPLY-TO)]\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatFetchSummaryItemsExcludeHeaderFieldsInReplyToReferencesAndReferences ()\n\t\t{\n\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\tvar request = new FetchRequest (MessageSummaryItems.References) {\n\t\t\t\t\tHeaders = new HeaderSet (new[] { HeaderId.InReplyTo, HeaderId.References }) {\n\t\t\t\t\t\tExclude = true\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar command = ImapFolder.FormatSummaryItems (engine, request, out _);\n\t\t\t\tAssert.That (command, Is.EqualTo (\"BODY.PEEK[HEADER.FIELDS.NOT (IN-REPLY-TO)]\"));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapFolderFlagsTests.cs",
    "content": "﻿//\n// ImapFolderFlagsTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\n\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapFolderFlagsTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar keywords = new HashSet<string> (new string[] { \"$Forwarded\", \"$Junk\" });\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// AddFlags\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.AddFlags (-1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AddFlagsAsync (-1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.AddFlags (UniqueId.Invalid, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AddFlagsAsync (UniqueId.Invalid, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.AddFlags (-1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AddFlagsAsync (-1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.AddFlags (UniqueId.Invalid, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AddFlagsAsync (UniqueId.Invalid, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<int>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<int>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<UniqueId>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<int>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<int>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<UniqueId>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<int>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<int>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, keywords, true));\n\n\t\t\t\t// RemoveFlags\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.RemoveFlags (-1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.RemoveFlagsAsync (-1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.RemoveFlags (UniqueId.Invalid, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.RemoveFlagsAsync (UniqueId.Invalid, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.RemoveFlags (-1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.RemoveFlagsAsync (-1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.RemoveFlags (UniqueId.Invalid, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.RemoveFlagsAsync (UniqueId.Invalid, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<int>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<int>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<UniqueId>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<int>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<int>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<UniqueId>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<int>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<int>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, keywords, true));\n\n\t\t\t\t// SetFlags\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.SetFlags (-1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.SetFlagsAsync (-1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.SetFlags (UniqueId.Invalid, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.SetFlagsAsync (UniqueId.Invalid, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.SetFlags (-1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.SetFlagsAsync (-1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.SetFlags (UniqueId.Invalid, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.SetFlagsAsync (UniqueId.Invalid, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<int>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<int>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<UniqueId>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<int>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<int>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<UniqueId>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<UniqueId>) null, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<int>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<int>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<int>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetFlags ((IList<UniqueId>) null, 1, MessageFlags.Seen, keywords, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetFlagsAsync ((IList<UniqueId>) null, 1, MessageFlags.Seen, keywords, true));\n\n\t\t\t\t// Store Flags\n\t\t\t\tvar addSeen = new StoreFlagsRequest (StoreAction.Add, MessageFlags.Seen) { Silent = true };\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Store (UniqueId.Invalid, addSeen));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.StoreAsync (UniqueId.Invalid, addSeen));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueId.MinValue, (StoreFlagsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueId.MinValue, (StoreFlagsRequest) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Store (-1, addSeen));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.StoreAsync (-1, addSeen));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (0, (StoreFlagsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (0, (StoreFlagsRequest) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<UniqueId>) null, addSeen));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<UniqueId>) null, addSeen));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueIdRange.All, (StoreFlagsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueIdRange.All, (StoreFlagsRequest) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<int>) null, addSeen));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<int>) null, addSeen));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (new int[] { 0 }, (StoreFlagsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (new int[] { 0 }, (StoreFlagsRequest) null));\n\n\t\t\t\tvar labels = new string [] { \"Label1\", \"Label2\" };\n\t\t\t\tvar emptyLabels = Array.Empty<string> ();\n\n\t\t\t\t// AddLabels\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.AddLabels (-1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AddLabelsAsync (-1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels (0, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync (0, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels (UniqueId.MinValue, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync (UniqueId.MinValue, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<int>) null, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync ((IList<int>) null, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<UniqueId>) null, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync ((IList<UniqueId>) null, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels (new int [] { 0 }, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync (new int [] { 0 }, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels (UniqueIdRange.All, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync (UniqueIdRange.All, null, true));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<int>) null, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync ((IList<int>) null, 1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels ((IList<UniqueId>) null, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync ((IList<UniqueId>) null, 1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels (new int [] { 0 }, 1, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync (new int [] { 0 }, 1, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.AddLabels (UniqueIdRange.All, 1, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AddLabelsAsync (UniqueIdRange.All, 1, null, true));\n\n\t\t\t\t// RemoveLabels\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.RemoveLabels (-1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.RemoveLabelsAsync (-1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (0, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync (0, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (UniqueId.MinValue, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync (UniqueId.MinValue, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<int>) null, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync ((IList<int>) null, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<UniqueId>) null, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync ((IList<UniqueId>) null, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (new int [] { 0 }, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync (new int [] { 0 }, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (UniqueIdRange.All, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync (UniqueIdRange.All, null, true));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<int>) null, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync ((IList<int>) null, 1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels ((IList<UniqueId>) null, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync ((IList<UniqueId>) null, 1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (new int [] { 0 }, 1, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync (new int [] { 0 }, 1, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.RemoveLabels (UniqueIdRange.All, 1, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RemoveLabelsAsync (UniqueIdRange.All, 1, null, true));\n\n\t\t\t\t// SetLabels\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.SetLabels (-1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.SetLabelsAsync (-1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels (0, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync (0, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels (UniqueId.MinValue, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync (UniqueId.MinValue, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<int>) null, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync ((IList<int>) null, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<UniqueId>) null, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync ((IList<UniqueId>) null, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels (new int [] { 0 }, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync (new int [] { 0 }, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels (UniqueIdRange.All, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync (UniqueIdRange.All, null, true));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<int>) null, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync ((IList<int>) null, 1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels ((IList<UniqueId>) null, 1, labels, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync ((IList<UniqueId>) null, 1, labels, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels (new int [] { 0 }, 1, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync (new int [] { 0 }, 1, null, true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetLabels (UniqueIdRange.All, 1, null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetLabelsAsync (UniqueIdRange.All, 1, null, true));\n\n\t\t\t\t// Store Labels\n\t\t\t\tvar addLabel = new StoreLabelsRequest (StoreAction.Add, new string[] { \"Label1\" }) { Silent = true };\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Store (UniqueId.Invalid, addLabel));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.StoreAsync (UniqueId.Invalid, addLabel));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueId.MinValue, (StoreLabelsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueId.MinValue, (StoreLabelsRequest) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Store (-1, addLabel));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.StoreAsync (-1, addLabel));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (0, (StoreLabelsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (0, (StoreLabelsRequest) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<UniqueId>) null, addLabel));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<UniqueId>) null, addLabel));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (UniqueIdRange.All, (StoreLabelsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (UniqueIdRange.All, (StoreLabelsRequest) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store ((IList<int>) null, addLabel));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync ((IList<int>) null, addLabel));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Store (new int[] { 0 }, (StoreLabelsRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.StoreAsync (new int[] { 0 }, (StoreLabelsRequest) null));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotSupportedExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX\\r\\n\", \"common.select-inbox-no-modseq.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\t// disable all features\n\t\t\t\tclient.Capabilities = ImapCapabilities.None;\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar indexes = new int[] { 0 };\n\t\t\t\tulong modseq = 409601020304;\n\n\t\t\t\t// AddFlags\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.AddFlags (indexes, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AddFlagsAsync (indexes, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.AddFlags (UniqueIdRange.All, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AddFlagsAsync (UniqueIdRange.All, modseq, MessageFlags.Seen, true));\n\n\t\t\t\t// RemoveFlags\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveFlags (indexes, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveFlagsAsync (indexes, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveFlags (UniqueIdRange.All, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveFlagsAsync (UniqueIdRange.All, modseq, MessageFlags.Seen, true));\n\n\t\t\t\t// SetFlags\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetFlags (indexes, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetFlagsAsync (indexes, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetFlags (UniqueIdRange.All, modseq, MessageFlags.Seen, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetFlagsAsync (UniqueIdRange.All, modseq, MessageFlags.Seen, true));\n\n\t\t\t\tvar labels = new string[] { \"Label1\", \"Label2\" };\n\n\t\t\t\t// AddLabels\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.AddLabels (indexes, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AddLabelsAsync (indexes, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.AddLabels (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AddLabelsAsync (UniqueIdRange.All, labels, true));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.AddLabels (indexes, modseq, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AddLabelsAsync (indexes, modseq, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.AddLabels (UniqueIdRange.All, modseq, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AddLabelsAsync (UniqueIdRange.All, modseq, labels, true));\n\n\t\t\t\t// RemoveLabels\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveLabels (indexes, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveLabelsAsync (indexes, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveLabels (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveLabelsAsync (UniqueIdRange.All, labels, true));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveLabels (indexes, modseq, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveLabelsAsync (indexes, modseq, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveLabels (UniqueIdRange.All, modseq, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveLabelsAsync (UniqueIdRange.All, modseq, labels, true));\n\n\t\t\t\t// SetLabels\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetLabels (indexes, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetLabelsAsync (indexes, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetLabels (UniqueIdRange.All, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetLabelsAsync (UniqueIdRange.All, labels, true));\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetLabels (indexes, modseq, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetLabelsAsync (indexes, modseq, labels, true));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetLabels (UniqueIdRange.All, modseq, labels, true));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetLabelsAsync (UniqueIdRange.All, modseq, labels, true));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateChangingFlagsOnEmptyListOfMessagesCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestChangingFlagsOnEmptyListOfMessages ()\n\t\t{\n\t\t\tvar commands = CreateChangingFlagsOnEmptyListOfMessagesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tulong modseq = 409601020304;\n\t\t\t\tvar uids = Array.Empty<UniqueId> ();\n\t\t\t\tvar indexes = Array.Empty<int> ();\n\t\t\t\tIList<UniqueId> unmodifiedUids;\n\t\t\t\tIList<int> unmodifiedIndexes;\n\n\t\t\t\t// AddFlags\n\t\t\t\tunmodifiedIndexes = inbox.AddFlags (indexes, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.AddFlags (uids, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// RemoveFlags\n\t\t\t\tunmodifiedIndexes = inbox.RemoveFlags (indexes, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.RemoveFlags (uids, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// SetFlags\n\t\t\t\tunmodifiedIndexes = inbox.SetFlags (indexes, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.SetFlags (uids, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\tvar labels = new string[] { \"Label1\", \"Label2\" };\n\n\t\t\t\t// AddLabels\n\t\t\t\tunmodifiedIndexes = inbox.AddLabels (indexes, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.AddLabels (uids, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// RemoveLabels\n\t\t\t\tunmodifiedIndexes = inbox.RemoveLabels (indexes, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.RemoveLabels (uids, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// SetLabels\n\t\t\t\tunmodifiedIndexes = inbox.SetLabels (indexes, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = inbox.SetLabels (uids, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestChangingFlagsOnEmptyListOfMessagesAsync ()\n\t\t{\n\t\t\tvar commands = CreateChangingFlagsOnEmptyListOfMessagesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tulong modseq = 409601020304;\n\t\t\t\tvar uids = Array.Empty<UniqueId> ();\n\t\t\t\tvar indexes = Array.Empty<int> ();\n\t\t\t\tIList<UniqueId> unmodifiedUids;\n\t\t\t\tIList<int> unmodifiedIndexes;\n\n\t\t\t\t// AddFlags\n\t\t\t\tunmodifiedIndexes = await inbox.AddFlagsAsync (indexes, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = await inbox.AddFlagsAsync (uids, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// RemoveFlags\n\t\t\t\tunmodifiedIndexes = await inbox.RemoveFlagsAsync (indexes, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = await inbox.RemoveFlagsAsync (uids, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// SetFlags\n\t\t\t\tunmodifiedIndexes = await inbox.SetFlagsAsync (indexes, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = await inbox.SetFlagsAsync (uids, modseq, MessageFlags.Seen, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\tvar labels = new string[] { \"Label1\", \"Label2\" };\n\n\t\t\t\t// AddLabels\n\t\t\t\tunmodifiedIndexes = await inbox.AddLabelsAsync (indexes, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = await inbox.AddLabelsAsync (uids, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// RemoveLabels\n\t\t\t\tunmodifiedIndexes = await inbox.RemoveLabelsAsync (indexes, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = await inbox.RemoveLabelsAsync (uids, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\t// SetLabels\n\t\t\t\tunmodifiedIndexes = await inbox.SetLabelsAsync (indexes, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedIndexes, Is.Empty);\n\n\t\t\t\tunmodifiedUids = await inbox.SetLabelsAsync (uids, modseq, labels, true);\n\t\t\t\tAssert.That (unmodifiedUids, Is.Empty);\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapFolderSearchTests.cs",
    "content": "﻿//\n// ImapFolderSearchTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapFolderSearchTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// Search\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Min | SearchOptions.Max | SearchOptions.Count;\n\t\t\t\tvar orderBy = new OrderBy [] { OrderBy.Arrival };\n\t\t\t\tvar emptyOrderBy = Array.Empty<OrderBy> ();\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search ((SearchQuery) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync ((SearchQuery) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search ((IList<UniqueId>) null, SearchQuery.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync ((IList<UniqueId>) null, SearchQuery.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search (UniqueIdRange.All, (SearchQuery) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync (UniqueIdRange.All, (SearchQuery) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, (IList<UniqueId>) null, SearchQuery.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, (IList<UniqueId>) null, SearchQuery.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search (searchOptions, UniqueIdRange.All, (SearchQuery) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync (searchOptions, UniqueIdRange.All, (SearchQuery) null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Search ((string) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SearchAsync ((string) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Search (string.Empty));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.SearchAsync (string.Empty));\n\n\t\t\t\t// Sort\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort ((SearchQuery) null, orderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync ((SearchQuery) null, orderBy));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (SearchQuery.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (SearchQuery.All, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Sort (SearchQuery.All, emptyOrderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.SortAsync (SearchQuery.All, emptyOrderBy));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort ((IList<UniqueId>) null, SearchQuery.All, orderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync ((IList<UniqueId>) null, SearchQuery.All, orderBy));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (UniqueIdRange.All, (SearchQuery) null, orderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (UniqueIdRange.All, (SearchQuery) null, orderBy));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (UniqueIdRange.All, SearchQuery.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (UniqueIdRange.All, SearchQuery.All, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Sort (UniqueIdRange.All, SearchQuery.All, emptyOrderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.SortAsync (UniqueIdRange.All, SearchQuery.All, emptyOrderBy));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, (SearchQuery) null, orderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, (SearchQuery) null, orderBy));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, SearchQuery.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, SearchQuery.All, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Sort (searchOptions, SearchQuery.All, emptyOrderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.SortAsync (searchOptions, SearchQuery.All, emptyOrderBy));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, (IList<UniqueId>) null, SearchQuery.All, orderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, (IList<UniqueId>) null, SearchQuery.All, orderBy));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, UniqueIdRange.All, (SearchQuery) null, orderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, UniqueIdRange.All, (SearchQuery) null, orderBy));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort (searchOptions, UniqueIdRange.All, SearchQuery.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync (searchOptions, UniqueIdRange.All, SearchQuery.All, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Sort (searchOptions, UniqueIdRange.All, SearchQuery.All, emptyOrderBy));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.SortAsync (searchOptions, UniqueIdRange.All, SearchQuery.All, emptyOrderBy));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Sort ((string) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.SortAsync ((string) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Sort (string.Empty));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await inbox.SortAsync (string.Empty));\n\n\t\t\t\t// Thread\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Thread ((ThreadingAlgorithm) 500, SearchQuery.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.ThreadAsync ((ThreadingAlgorithm) 500, SearchQuery.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Thread (ThreadingAlgorithm.References, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.ThreadAsync (ThreadingAlgorithm.References, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Thread ((IList<UniqueId>) null, ThreadingAlgorithm.References, SearchQuery.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.ThreadAsync ((IList<UniqueId>) null, ThreadingAlgorithm.References, SearchQuery.All));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Thread (UniqueIdRange.All, (ThreadingAlgorithm) 500, SearchQuery.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await inbox.ThreadAsync (UniqueIdRange.All, (ThreadingAlgorithm) 500, SearchQuery.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Thread (UniqueIdRange.All, ThreadingAlgorithm.References, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await inbox.ThreadAsync (UniqueIdRange.All, ThreadingAlgorithm.References, null));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateSearchKeywordsCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+filters.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 UID SEARCH RETURN (ALL) KEYWORD \\\\flag\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) UNKEYWORD \\\\flag\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID SEARCH RETURN (ALL) KEYWORD \\\"two words\\\"\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID SEARCH RETURN (ALL) UNKEYWORD \\\"two words\\\"\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 UID SEARCH RETURN (ALL) KEYWORD $IsSpam\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 UID SEARCH RETURN (ALL) UNKEYWORD $IsSpam\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 UID SEARCH RETURN (ALL) KEYWORD \\\\flag KEYWORD \\\"two words\\\" KEYWORD $IsSpam\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 UID SEARCH RETURN (ALL) UNKEYWORD \\\\flag UNKEYWORD \\\"two words\\\" UNKEYWORD $IsSpam\\r\\n\", \"dovecot.search-all.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchKeywords ()\n\t\t{\n\t\t\tvar commands = CreateSearchKeywordsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Filters), Is.True, \"ImapCapabilities.Filters\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.HasKeyword (\"\\\\flag\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.NotKeyword (\"\\\\flag\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.HasKeyword (\"two words\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.NotKeyword (\"two words\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.HasKeyword (\"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.NotKeyword (\"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.HasKeywords (\"\\\\flag\", \"two words\", \"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.NotKeywords (\"\\\\flag\", \"two words\", \"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchKeywordsAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchKeywordsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Filters), Is.True, \"ImapCapabilities.Filters\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.HasKeyword (\"\\\\flag\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.NotKeyword (\"\\\\flag\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.HasKeyword (\"two words\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.NotKeyword (\"two words\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.HasKeyword (\"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.NotKeyword (\"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.HasKeywords (\"\\\\flag\", \"two words\", \"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.NotKeywords (\"\\\\flag\", \"two words\", \"$IsSpam\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateSearchFilterCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+filters.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 UID SEARCH RETURN (ALL) FILTER MyFilter\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) FILTER MyUndefinedFilter\\r\\n\", Encoding.ASCII.GetBytes (\"A00000006 NO [UNDEFINED-FILTER MyUndefinedFilter] THe specified filter is undefined.\\r\\n\")),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchFilter ()\n\t\t{\n\t\t\tvar commands = CreateSearchFilterCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Filters), Is.True, \"ImapCapabilities.Filters\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.Filter (\"MyFilter\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tAssert.Throws<ImapCommandException> (() => inbox.Search (SearchQuery.Filter (\"MyUndefinedFilter\")));\n\n\t\t\t\t// Now disable the FILTERS extension and try again...\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Filters;\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (SearchQuery.Filter (\"MyFilter\")));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchFilterAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchFilterCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Filters), Is.True, \"ImapCapabilities.Filters\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.Filter (\"MyFilter\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tAssert.ThrowsAsync<ImapCommandException> (() => inbox.SearchAsync (SearchQuery.Filter (\"MyUndefinedFilter\")));\n\n\t\t\t\t// Now disable the SAVEDATE extension and try again...\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Filters;\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (SearchQuery.Filter (\"MyFilter\")));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateSearchFuzzyCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+fuzzy.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 UID SEARCH RETURN (ALL) FUZZY BODY fuzzy-match\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchFuzzy ()\n\t\t{\n\t\t\tvar commands = CreateSearchFuzzyCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.FuzzySearch), Is.True, \"ImapCapabilities.FuzzySearch\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.Fuzzy (SearchQuery.BodyContains (\"fuzzy-match\")));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\t// Now disable the FUZZY extension and try again...\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.FuzzySearch;\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (SearchQuery.Fuzzy (SearchQuery.BodyContains (\"fuzzy-match\"))));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchFuzzyAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchFuzzyCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.FuzzySearch), Is.True, \"ImapCapabilities.FuzzySearch\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.Fuzzy (SearchQuery.BodyContains (\"fuzzy-match\")));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\t// Now disable the FUZZY extension and try again...\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.FuzzySearch;\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (SearchQuery.Fuzzy (SearchQuery.BodyContains (\"fuzzy-match\"))));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateSearchSaveDateCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+savedate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 UID SEARCH RETURN (ALL) SAVEDATESUPPORTED\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) SAVEDBEFORE 12-Oct-2016\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID SEARCH RETURN (ALL) SAVEDON 12-Oct-2016\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID SEARCH RETURN (ALL) SAVEDSINCE 12-Oct-2016\\r\\n\", \"dovecot.search-all.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchSaveDate ()\n\t\t{\n\t\t\tvar commands = CreateSearchSaveDateCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.SaveDate), Is.True, \"ImapCapabilities.SaveDate\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.SaveDateSupported);\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.SavedBefore (new DateTime (2016, 10, 12)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.SavedOn (new DateTime (2016, 10, 12)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = inbox.Search (SearchQuery.SavedSince (new DateTime (2016, 10, 12)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\t// Now disable the SAVEDATE extension and try again...\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.SaveDate;\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (SearchQuery.SaveDateSupported));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (SearchQuery.SavedBefore (new DateTime (2016, 10, 12))));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (SearchQuery.SavedOn (new DateTime (2016, 10, 12))));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Search (SearchQuery.SavedSince (new DateTime (2016, 10, 12))));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchSaveDateAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchSaveDateCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.SaveDate), Is.True, \"ImapCapabilities.SaveDate\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.SaveDateSupported);\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.SavedBefore (new DateTime (2016, 10, 12)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.SavedOn (new DateTime (2016, 10, 12)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\tuids = await inbox.SearchAsync (SearchQuery.SavedSince (new DateTime (2016, 10, 12)));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for uids[{i}]\");\n\n\t\t\t\t// Now disable the SAVEDATE extension and try again...\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.SaveDate;\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (SearchQuery.SaveDateSupported));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (SearchQuery.SavedBefore (new DateTime (2016, 10, 12))));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (SearchQuery.SavedOn (new DateTime (2016, 10, 12))));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SearchAsync (SearchQuery.SavedSince (new DateTime (2016, 10, 12))));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateRawUnicodeSearchCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID SEARCH SUBJECT {13+}\\r\\nComunicação\\r\\n\", \"dovecot.search-raw.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRawUnicodeSearch ()\n\t\t{\n\t\t\tvar commands = CreateRawUnicodeSearchCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar matches = inbox.Search (\"SUBJECT {13+}\\r\\nComunicação\");\n\t\t\t\tAssert.That (matches.Max.HasValue, Is.True, \"MAX should always be set\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX value\");\n\t\t\t\tAssert.That (matches.Min.HasValue, Is.True, \"MIN should always be set\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN value\");\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"COUNT should always be set\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRawUnicodeSearchAsync ()\n\t\t{\n\t\t\tvar commands = CreateRawUnicodeSearchCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar matches = await inbox.SearchAsync (\"SUBJECT {13+}\\r\\nComunicação\");\n\t\t\t\tAssert.That (matches.Max.HasValue, Is.True, \"MAX should always be set\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (14), \"Unexpected MAX value\");\n\t\t\t\tAssert.That (matches.Min.HasValue, Is.True, \"MIN should always be set\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (1), \"Unexpected MIN value\");\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (14), \"COUNT should always be set\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSearchStringWithSpacesCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"yahoo.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 CAPABILITY\\r\\n\", \"yahoo.capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"yahoo.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"yahoo.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 EXAMINE Inbox\\r\\n\", \"yahoo.examine-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID SEARCH SUBJECT \\\"Yahoo Mail\\\"\\r\\n\", \"yahoo.search.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchStringWithSpaces ()\n\t\t{\n\t\t\tvar commands = CreateSearchStringWithSpacesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.SubjectContains (\"Yahoo Mail\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchStringWithSpacesAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchStringWithSpacesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.SubjectContains (\"Yahoo Mail\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSearchBadCharsetFallbackCommands ()\n\t\t{\n\t\t\tvar badCharsetResponse = Encoding.ASCII.GetBytes (\"A00000005 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.\\r\\n\");\n\n\t\t\treturn  new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID SEARCH RETURN (ALL) CHARSET UTF-8 SUBJECT {12+}\\r\\nпривет\\r\\n\", badCharsetResponse),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) SUBJECT {6+}\\r\\n?@825B\\r\\n\", \"dovecot.search-raw.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchBadCharsetFallback ()\n\t\t{\n\t\t\tvar commands = CreateSearchBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchBadCharsetFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (14));\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1));\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSearchWithOptionsBadCharsetFallbackCommands ()\n\t\t{\n\t\t\tvar badCharsetResponse = Encoding.ASCII.GetBytes (\"A00000005 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.\\r\\n\");\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID SEARCH RETURN (ALL RELEVANCY COUNT MIN MAX) CHARSET UTF-8 SUBJECT {12+}\\r\\nпривет\\r\\n\", badCharsetResponse),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL RELEVANCY COUNT MIN MAX) SUBJECT {6+}\\r\\n?@825B\\r\\n\", \"dovecot.search-uids-options.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSearchWithOptionsBadCharsetFallback ()\n\t\t{\n\t\t\tvar commands = CreateSearchWithOptionsBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Count | SearchOptions.Min | SearchOptions.Max | SearchOptions.Relevancy;\n\t\t\t\tvar matches = inbox.Search (searchOptions, SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tvar expectedMatchedUids = new uint[] { 2, 3, 4, 5, 6, 9, 10, 11, 12, 13 };\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (10), \"Unexpected COUNT\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (13), \"Unexpected MAX\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (2), \"Unexpected MIN\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (10), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (expectedMatchedUids[i]));\n\t\t\t\tAssert.That (matches.Relevancy, Has.Count.EqualTo (matches.Count), \"Unexpected number of relevancy scores\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSearchWithOptionsBadCharsetFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateSearchWithOptionsBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Count | SearchOptions.Min | SearchOptions.Max | SearchOptions.Relevancy;\n\t\t\t\tvar matches = await inbox.SearchAsync (searchOptions, SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tvar expectedMatchedUids = new uint[] { 2, 3, 4, 5, 6, 9, 10, 11, 12, 13 };\n\t\t\t\tAssert.That (matches.Count, Is.EqualTo (10), \"Unexpected COUNT\");\n\t\t\t\tAssert.That (matches.Max.Value.Id, Is.EqualTo (13), \"Unexpected MAX\");\n\t\t\t\tAssert.That (matches.Min.Value.Id, Is.EqualTo (2), \"Unexpected MIN\");\n\t\t\t\tAssert.That (matches.UniqueIds, Has.Count.EqualTo (10), \"Unexpected number of UIDs\");\n\t\t\t\tfor (int i = 0; i < matches.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (matches.UniqueIds[i].Id, Is.EqualTo (expectedMatchedUids[i]));\n\t\t\t\tAssert.That (matches.Relevancy, Has.Count.EqualTo (matches.Count), \"Unexpected number of relevancy scores\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSortBadCharsetFallbackCommands ()\n\t\t{\n\t\t\tvar badCharsetResponse = Encoding.ASCII.GetBytes (\"A00000005 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.\\r\\n\");\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID SORT RETURN (ALL) (SUBJECT) UTF-8 SUBJECT {12+}\\r\\nпривет\\r\\n\", badCharsetResponse),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SORT RETURN (ALL) (SUBJECT) US-ASCII SUBJECT {6+}\\r\\n?@825B\\r\\n\", \"dovecot.sort-raw.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSortBadCharsetFallback ()\n\t\t{\n\t\t\tvar commands = CreateSortBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = inbox.Sort (SearchQuery.SubjectContains (\"привет\"), new OrderBy[] { OrderBy.Subject });\n\t\t\t\tvar expected = new uint[] { 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8 };\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (expected[i]), $\"Unexpected value for UniqueId[{i}]\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSortBadCharsetFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateSortBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar uids = await inbox.SortAsync (SearchQuery.SubjectContains (\"привет\"), new OrderBy[] { OrderBy.Subject });\n\t\t\t\tvar expected = new uint[] { 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8 };\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (expected[i]), $\"Unexpected value for UniqueId[{i}]\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateSortWithOptionsBadCharsetFallbackCommands ()\n\t\t{\n\t\t\tvar badCharsetResponse = Encoding.ASCII.GetBytes (\"A00000005 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.\\r\\n\");\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID SORT RETURN (ALL RELEVANCY COUNT MIN MAX) (ARRIVAL) UTF-8 SUBJECT {12+}\\r\\nпривет\\r\\n\", badCharsetResponse),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SORT RETURN (ALL RELEVANCY COUNT MIN MAX) (ARRIVAL) US-ASCII SUBJECT {6+}\\r\\n?@825B\\r\\n\", \"dovecot.sort-uids-options.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSortWithOptionsBadCharsetFallback ()\n\t\t{\n\t\t\tvar commands = CreateSortWithOptionsBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Count | SearchOptions.Min | SearchOptions.Max | SearchOptions.Relevancy;\n\t\t\t\tvar sorted = inbox.Sort (searchOptions, SearchQuery.SubjectContains (\"привет\"), new OrderBy[] { OrderBy.Arrival });\n\t\t\t\tAssert.That (sorted.UniqueIds, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tAssert.That (sorted.Relevancy, Has.Count.EqualTo (sorted.Count), \"Unexpected number of relevancy scores\");\n\t\t\t\tfor (int i = 0; i < sorted.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (sorted.UniqueIds[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for UniqueId[{i}]\");\n\t\t\t\tAssert.That (sorted.ModSeq.HasValue, Is.False, \"Expected the ModSeq property to be null\");\n\t\t\t\tAssert.That (sorted.Min.Value.Id, Is.EqualTo (1), \"Unexpected Min\");\n\t\t\t\tAssert.That (sorted.Max.Value.Id, Is.EqualTo (14), \"Unexpected Max\");\n\t\t\t\tAssert.That (sorted.Count, Is.EqualTo (14), \"Unexpected Count\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSortWithOptionsBadCharsetFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateSortWithOptionsBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar searchOptions = SearchOptions.All | SearchOptions.Count | SearchOptions.Min | SearchOptions.Max | SearchOptions.Relevancy;\n\t\t\t\tvar sorted = await inbox.SortAsync (searchOptions, SearchQuery.SubjectContains (\"привет\"), new OrderBy[] { OrderBy.Arrival });\n\t\t\t\tAssert.That (sorted.UniqueIds, Has.Count.EqualTo (14), \"Unexpected number of UIDs\");\n\t\t\t\tAssert.That (sorted.Relevancy, Has.Count.EqualTo (sorted.Count), \"Unexpected number of relevancy scores\");\n\t\t\t\tfor (int i = 0; i < sorted.UniqueIds.Count; i++)\n\t\t\t\t\tAssert.That (sorted.UniqueIds[i].Id, Is.EqualTo (i + 1), $\"Unexpected value for UniqueId[{i}]\");\n\t\t\t\tAssert.That (sorted.ModSeq.HasValue, Is.False, \"Expected the ModSeq property to be null\");\n\t\t\t\tAssert.That (sorted.Min.Value.Id, Is.EqualTo (1), \"Unexpected Min\");\n\t\t\t\tAssert.That (sorted.Max.Value.Id, Is.EqualTo (14), \"Unexpected Max\");\n\t\t\t\tAssert.That (sorted.Count, Is.EqualTo (14), \"Unexpected Count\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateThreadBadCharsetFallbackCommands ()\n\t\t{\n\t\t\tvar badCharsetResponse = Encoding.ASCII.GetBytes (\"A00000005 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.\\r\\n\");\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\t//new ImapReplayCommand (\"A00000005 UID THREAD REFERENCES US-ASCII \\r\\n\", \"dovecot.thread-references.txt\"),\n\t\t\t\t//(new ImapReplayCommand (\"A00000017 UID THREAD ORDEREDSUBJECT US-ASCII UID 1:* ALL\\r\\n\", \"dovecot.thread-orderedsubject.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID THREAD REFERENCES UTF-8 SUBJECT {12+}\\r\\nпривет\\r\\n\", badCharsetResponse),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID THREAD REFERENCES US-ASCII SUBJECT {6+}\\r\\n?@825B\\r\\n\", \"dovecot.thread-references.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestThreadBadCharsetFallback ()\n\t\t{\n\t\t\tvar commands = CreateThreadBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.Supports (FolderFeature.Threading), Is.True, \"Supports threading\");\n\t\t\t\tAssert.That (inbox.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Supports threading by References\");\n\n\t\t\t\tvar threaded = inbox.Thread (ThreadingAlgorithm.References, SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (2), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestThreadBadCharsetFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateThreadBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.Supports (FolderFeature.Threading), Is.True, \"Supports threading\");\n\t\t\t\tAssert.That (inbox.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Supports threading by References\");\n\n\t\t\t\tvar threaded = await inbox.ThreadAsync (ThreadingAlgorithm.References, SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (2), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateThreadUidsBadCharsetFallbackCommands ()\n\t\t{\n\t\t\tvar badCharsetResponse = Encoding.ASCII.GetBytes (\"A00000005 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.\\r\\n\");\n\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (Encoding.UTF8, \"A00000005 UID THREAD REFERENCES UTF-8 UID 1:* SUBJECT {12+}\\r\\nпривет\\r\\n\", badCharsetResponse),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID THREAD REFERENCES US-ASCII UID 1:* SUBJECT {6+}\\r\\n?@825B\\r\\n\", \"dovecot.thread-references.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestThreadUidsBadCharsetFallback ()\n\t\t{\n\t\t\tvar commands = CreateThreadUidsBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.Supports (FolderFeature.Threading), Is.True, \"Supports threading\");\n\t\t\t\tAssert.That (inbox.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Supports threading by References\");\n\n\t\t\t\tvar threaded = inbox.Thread (UniqueIdRange.All, ThreadingAlgorithm.References, SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (2), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestThreadUidsBadCharsetFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateThreadUidsBadCharsetFallbackCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tAssert.That (inbox.Supports (FolderFeature.Threading), Is.True, \"Supports threading\");\n\t\t\t\tAssert.That (inbox.ThreadingAlgorithms, Does.Contain (ThreadingAlgorithm.References), \"Supports threading by References\");\n\n\t\t\t\tvar threaded = await inbox.ThreadAsync (UniqueIdRange.All, ThreadingAlgorithm.References, SearchQuery.SubjectContains (\"привет\"));\n\t\t\t\tAssert.That (threaded, Has.Count.EqualTo (2), \"Unexpected number of root nodes in threaded results\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapFolderTests.cs",
    "content": "﻿//\n// ImapFolderTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Globalization;\n\nusing MimeKit;\n\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Security;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapFolderTests\n\t{\n\t\tstatic readonly Encoding Latin1 = Encoding.GetEncoding (28591);\n\n\t\tstatic MimeMessage CreateThreadableMessage (string subject, string msgid, string references, DateTimeOffset date)\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Unit Tests\", \"unit-tests@mimekit.net\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Unit Tests\", \"unit-tests@mimekit.net\"));\n\t\t\tmessage.MessageId = msgid;\n\t\t\tmessage.Subject = subject;\n\t\t\tmessage.Date = date;\n\n\t\t\tif (references != null) {\n\t\t\t\tforeach (var reference in references.Split (' '))\n\t\t\t\t\tmessage.References.Add (reference);\n\t\t\t}\n\n\t\t\tmessage.Body = new TextPart (\"plain\") { Text = \"This is the message body.\\r\\n\" };\n\n\t\t\treturn message;\n\t\t}\n\n\t\tstatic Stream GetResourceStream (string name)\n\t\t{\n\t\t\treturn typeof (ImapFolderTests).Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + name);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar multiappend = new List<IAppendRequest> ();\n\t\t\t\tvar dates = new List<DateTimeOffset> ();\n\t\t\t\tvar messages = new List<MimeMessage> ();\n\t\t\t\tvar flags = new List<MessageFlags> ();\n\t\t\t\tvar now = DateTimeOffset.Now;\n\t\t\t\tvar uid = new UniqueId (1);\n\t\t\t\tReplaceRequest replace = null;\n\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"A\", \"<a@mimekit.net>\", null, now.AddMinutes (-7)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"B\", \"<b@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-6)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"C\", \"<c@mimekit.net>\", \"<a@mimekit.net> <b@mimekit.net>\", now.AddMinutes (-5)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"D\", \"<d@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-4)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"E\", \"<e@mimekit.net>\", \"<c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\", now.AddMinutes (-3)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"F\", \"<f@mimekit.net>\", \"<b@mimekit.net>\", now.AddMinutes (-2)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"G\", \"<g@mimekit.net>\", null, now.AddMinutes (-1)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"H\", \"<h@mimekit.net>\", null, now));\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tdates.Add (DateTimeOffset.Now);\n\t\t\t\t\tflags.Add (MessageFlags.Seen);\n\t\t\t\t\tmultiappend.Add (new AppendRequest (messages[i], flags[i], dates[i]));\n\t\t\t\t\treplace ??= new ReplaceRequest (messages[i], flags[i], dates[i]);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// ImapFolder .ctor\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => new ImapFolder (null));\n\n\t\t\t\t// Open\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Open ((FolderAccess) 500));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Open ((FolderAccess) 500, 0, 0, UniqueIdRange.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Open (FolderAccess.ReadOnly, 0, 0, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.OpenAsync ((FolderAccess) 500));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.OpenAsync ((FolderAccess) 500, 0, 0, UniqueIdRange.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.OpenAsync (FolderAccess.ReadOnly, 0, 0, null));\n\n\t\t\t\t// Create\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Create (null, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Create (string.Empty, true));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Create (\"Folder./Name\", true));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Create (null, SpecialFolder.All));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Create (string.Empty, SpecialFolder.All));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Create (\"Folder./Name\", SpecialFolder.All));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Create (null, new SpecialFolder[] { SpecialFolder.All }));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Create (string.Empty, new SpecialFolder[] { SpecialFolder.All }));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Create (\"Folder./Name\", new SpecialFolder[] { SpecialFolder.All }));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Create (\"ValidName\", null));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Create (\"ValidName\", SpecialFolder.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CreateAsync (null, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CreateAsync (string.Empty, true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CreateAsync (\"Folder./Name\", true));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CreateAsync (null, SpecialFolder.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CreateAsync (string.Empty, SpecialFolder.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CreateAsync (\"Folder./Name\", SpecialFolder.All));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CreateAsync (null, new SpecialFolder[] { SpecialFolder.All }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CreateAsync (string.Empty, new SpecialFolder[] { SpecialFolder.All }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CreateAsync (\"Folder./Name\", new SpecialFolder[] { SpecialFolder.All }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CreateAsync (\"ValidName\", null));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.CreateAsync (\"ValidName\", SpecialFolder.All));\n\n\t\t\t\t// Rename\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Rename (null, \"NewName\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Rename (personal, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Rename (personal, string.Empty));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RenameAsync (null, \"NewName\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.RenameAsync (personal, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.RenameAsync (personal, string.Empty));\n\n\t\t\t\t// GetSubfolder\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetSubfolder (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.GetSubfolder (string.Empty));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.GetSubfolderAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.GetSubfolderAsync (string.Empty));\n\n\t\t\t\t// GetMetadata\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetMetadata (null, new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetMetadata (new MetadataOptions (), null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => client.GetMetadataAsync (null, new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => client.GetMetadataAsync (new MetadataOptions (), null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetMetadata (null, new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.GetMetadata (new MetadataOptions (), null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.GetMetadataAsync (null, new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.GetMetadataAsync (new MetadataOptions (), null));\n\n\t\t\t\t// SetMetadata\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.SetMetadata (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => client.SetMetadataAsync (null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.SetMetadata (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.SetMetadataAsync (null));\n\n\t\t\t\t// Expunge\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Expunge (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ExpungeAsync (null));\n\n\t\t\t\t// Append\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append ((MimeMessage) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync ((MimeMessage) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, messages[0]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, messages[0]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, (MimeMessage) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, (MimeMessage) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append ((IAppendRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync ((IAppendRequest) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, new AppendRequest (messages[0])));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, new AppendRequest (messages[0])));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, (IAppendRequest) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, (IAppendRequest) null));\n\n\t\t\t\t// MultiAppend\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, flags));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, flags));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (new MimeMessage[] { null }, flags));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (new MimeMessage[] { null }, flags));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (messages, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (messages, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (messages, new MessageFlags[messages.Count - 1]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (messages, new MessageFlags[messages.Count - 1]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, messages, flags));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, messages, flags));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null, flags));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, null, flags));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (FormatOptions.Default, new MimeMessage[] { null }, flags));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (FormatOptions.Default, new MimeMessage[] { null }, flags));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, messages, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, messages, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (FormatOptions.Default, messages, new MessageFlags[messages.Count - 1]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (FormatOptions.Default, messages, new MessageFlags[messages.Count - 1]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, flags, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, flags, dates));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (new MimeMessage[] { null }, flags, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (new MimeMessage[] { null }, flags, dates));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (messages, null, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (messages, null, dates));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (messages, flags, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (messages, flags, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (messages, new MessageFlags[messages.Count - 1], dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (messages, new MessageFlags[messages.Count - 1], dates));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (messages, flags, new DateTimeOffset[messages.Count - 1]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (messages, flags, new DateTimeOffset[messages.Count - 1]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, messages, flags, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, messages, flags, dates));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, null, flags, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, null, flags, dates));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (FormatOptions.Default, new MimeMessage[] { null }, flags, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (FormatOptions.Default, new MimeMessage[] { null }, flags, dates));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, messages, null, dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, messages, null, dates));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (FormatOptions.Default, messages, flags, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (FormatOptions.Default, messages, flags, null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (FormatOptions.Default, messages, new MessageFlags[messages.Count - 1], dates));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (FormatOptions.Default, messages, new MessageFlags[messages.Count - 1], dates));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (FormatOptions.Default, messages, flags, new DateTimeOffset[messages.Count - 1]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (FormatOptions.Default, messages, flags, new DateTimeOffset[messages.Count - 1]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append ((IList<IAppendRequest>) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync ((IList<IAppendRequest>) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Append (null, multiappend));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.AppendAsync (null, multiappend));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (new IAppendRequest[1]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (new IAppendRequest[1]));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Append (FormatOptions.Default, new IAppendRequest[1]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.AppendAsync (FormatOptions.Default, new IAppendRequest[1]));\n\n\t\t\t\t// Replace\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Replace (UniqueId.Invalid, messages[0]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.ReplaceAsync (UniqueId.Invalid, messages[0]));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Replace (UniqueId.Invalid, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.ReplaceAsync (UniqueId.Invalid, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (uid, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (uid, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (uid, null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (uid, null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (null, uid, messages[0]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (null, uid, messages[0]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (null, uid, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (null, uid, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Replace (-1, messages[0]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.ReplaceAsync (-1, messages[0]));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Replace (-1, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.ReplaceAsync (-1, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (0, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (0, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (0, null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (0, null, MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (null, 0, messages[0]));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (null, 0, messages[0]));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (null, 0, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (null, 0, messages[0], MessageFlags.None, DateTimeOffset.Now));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Replace (UniqueId.Invalid, replace));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.ReplaceAsync (UniqueId.Invalid, replace));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (UniqueId.MinValue, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (UniqueId.MinValue, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (null, UniqueId.MinValue, replace));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (null, UniqueId.MinValue, replace));\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.Replace (FormatOptions.Default, UniqueId.Invalid, replace));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.ReplaceAsync (FormatOptions.Default, UniqueId.Invalid, replace));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (FormatOptions.Default, UniqueId.MinValue, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (FormatOptions.Default, UniqueId.MinValue, null));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Replace (-1, replace));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.ReplaceAsync (-1, replace));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (0, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (0, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (null, 0, replace));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (null, 0, replace));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.Replace (FormatOptions.Default, -1, replace));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.ReplaceAsync (FormatOptions.Default, -1, replace));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.Replace (FormatOptions.Default, 0, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.ReplaceAsync (FormatOptions.Default, 0, null));\n\n\t\t\t\t// CopyTo\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.CopyTo (UniqueId.Invalid, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.CopyToAsync (UniqueId.Invalid, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.CopyTo (UniqueId.MinValue, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CopyToAsync (UniqueId.MinValue, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.CopyTo ((IList<UniqueId>) null, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CopyToAsync ((IList<UniqueId>) null, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.CopyTo (UniqueIdRange.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CopyToAsync (UniqueIdRange.All, null));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.CopyTo (-1, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.CopyToAsync (-1, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.CopyTo (0, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CopyToAsync (0, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.CopyTo ((IList<int>) null, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CopyToAsync ((IList<int>) null, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.CopyTo (new int[] { 0 }, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.CopyToAsync (new int[] { 0 }, null));\n\n\t\t\t\t// MoveTo\n\t\t\t\tAssert.Throws<ArgumentException> (() => inbox.MoveTo (UniqueId.Invalid, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (() => inbox.MoveToAsync (UniqueId.Invalid, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.MoveTo (UniqueId.MinValue, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.MoveToAsync (UniqueId.MinValue, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.MoveTo ((IList<UniqueId>) null, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.MoveToAsync ((IList<UniqueId>) null, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.MoveTo (UniqueIdRange.All, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.MoveToAsync (UniqueIdRange.All, null));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => inbox.MoveTo (-1, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (() => inbox.MoveToAsync (-1, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.MoveTo (0, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.MoveToAsync (0, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.MoveTo ((IList<int>) null, inbox));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.MoveToAsync ((IList<int>) null, inbox));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => inbox.MoveTo (new int[] { 0 }, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (() => inbox.MoveToAsync (new int[] { 0 }, null));\n\n\t\t\t\tclient.Disconnect (false);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotSupportedExceptions ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+gmail-capabilities.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\t//new ImapReplayCommand (\"A00000004 SELECT INBOX\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (credentials);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable all features\n\t\t\t\tclient.Capabilities = ImapCapabilities.None;\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar dates = new List<DateTimeOffset> ();\n\t\t\t\tvar messages = new List<MimeMessage> ();\n\t\t\t\tvar flags = new List<MessageFlags> ();\n\t\t\t\tvar now = DateTimeOffset.Now;\n\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"A\", \"<a@mimekit.net>\", null, now.AddMinutes (-7)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"B\", \"<b@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-6)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"C\", \"<c@mimekit.net>\", \"<a@mimekit.net> <b@mimekit.net>\", now.AddMinutes (-5)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"D\", \"<d@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-4)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"E\", \"<e@mimekit.net>\", \"<c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\", now.AddMinutes (-3)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"F\", \"<f@mimekit.net>\", \"<b@mimekit.net>\", now.AddMinutes (-2)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"G\", \"<g@mimekit.net>\", null, now.AddMinutes (-1)));\n\t\t\t\tmessages.Add (CreateThreadableMessage (\"H\", \"<h@mimekit.net>\", null, now));\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tdates.Add (DateTimeOffset.Now);\n\t\t\t\t\tflags.Add (MessageFlags.Seen);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Inbox.SyncRoot, Is.InstanceOf<ImapEngine> (), \"SyncRoot\");\n\n\t\t\t\tvar inbox = (ImapFolder) client.Inbox;\n\n\t\t\t\t// Open\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Open (FolderAccess.ReadOnly, 0, 0, UniqueIdRange.All));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.OpenAsync (FolderAccess.ReadOnly, 0, 0, UniqueIdRange.All));\n\n\t\t\t\t// Create\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Create (\"Folder\", SpecialFolder.All));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.CreateAsync (\"Folder\", SpecialFolder.All));\n\n\t\t\t\t// Rename - TODO\n\n\t\t\t\t// Append\n\t\t\t\tvar international = FormatOptions.Default.Clone ();\n\t\t\t\tinternational.International = true;\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Append (international, messages[0]));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AppendAsync (international, messages[0]));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Append (international, messages[0], flags[0]));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AppendAsync (international, messages[0], flags[0]));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Append (international, messages[0], flags[0], dates[0]));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AppendAsync (international, messages[0], flags[0], dates[0]));\n\n\t\t\t\t// MultiAppend\n\t\t\t\t//Assert.Throws<NotSupportedException> (() => inbox.Append (international, messages));\n\t\t\t\t//Assert.ThrowsAsync<NotSupportedException> (() => inbox.AppendAsync (international, messages));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Append (international, messages, flags));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AppendAsync (international, messages, flags));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Append (international, messages, flags, dates));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.AppendAsync (international, messages, flags, dates));\n\n\t\t\t\t// Status\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.Status (StatusItems.Count));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.StatusAsync (StatusItems.Count));\n\n\t\t\t\t// GetAccessControlList\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.GetAccessControlList ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.GetAccessControlListAsync ());\n\n\t\t\t\t// GetAccessRights\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.GetAccessRights (\"name\"));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.GetAccessRightsAsync (\"name\"));\n\n\t\t\t\t// GetMyAccessRights\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.GetMyAccessRights ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.GetMyAccessRightsAsync ());\n\n\t\t\t\t// RemoveAccess\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.RemoveAccess (\"name\"));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.RemoveAccessAsync (\"name\"));\n\n\t\t\t\t// GetMetadata\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetMetadata (MetadataTag.PrivateComment));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.GetMetadataAsync (MetadataTag.PrivateComment));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.GetMetadata (MetadataTag.PrivateComment));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.GetMetadataAsync (MetadataTag.PrivateComment));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetMetadata (new MetadataOptions (), new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.GetMetadataAsync (new MetadataOptions (), new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.GetMetadata (new MetadataOptions (), new MetadataTag[] { MetadataTag.PrivateComment }));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.GetMetadataAsync (new MetadataOptions (), new MetadataTag[] { MetadataTag.PrivateComment }));\n\n\t\t\t\t// SetMetadata\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.SetMetadata (new MetadataCollection ()));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.SetMetadataAsync (new MetadataCollection ()));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetMetadata (new MetadataCollection ()));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetMetadataAsync (new MetadataCollection ()));\n\n\t\t\t\t// GetQuota\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.GetQuota ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.GetQuotaAsync ());\n\n\t\t\t\t// SetQuota\n\t\t\t\tAssert.Throws<NotSupportedException> (() => inbox.SetQuota (5, 10));\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => inbox.SetQuotaAsync (5, 10));\n\n\t\t\t\tclient.Disconnect (false);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateLiteralFolderNamesCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.basic-greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"common.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username password\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 CAPABILITY\\r\\n\", \"common.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"\\\"\\r\\n\", \"common.list-namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"common.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"common.list-literal-subfolders.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 STATUS \\\"Literal Folder Name\\\" (MESSAGES)\\r\\n\", \"common.status-literal-folder.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLiteralFolderNames ()\n\t\t{\n\t\t\tvar commands = CreateLiteralFolderNamesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar subfolders = personal.GetSubfolders (false);\n\n\t\t\t\tAssert.That (subfolders, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\tAssert.That (subfolders[0].Name, Is.EqualTo (\"INBOX\"));\n\t\t\t\tAssert.That (subfolders[1].Name, Is.EqualTo (\"Literal Folder Name\"));\n\n\t\t\t\tsubfolders[1].Status (StatusItems.Count);\n\n\t\t\t\tAssert.That (subfolders[1], Has.Count.EqualTo (60), \"Count\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestLiteralFolderNamesAsync ()\n\t\t{\n\t\t\tvar commands = CreateLiteralFolderNamesCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar subfolders = await personal.GetSubfoldersAsync (false);\n\n\t\t\t\tAssert.That (subfolders, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\tAssert.That (subfolders[0].Name, Is.EqualTo (\"INBOX\"));\n\t\t\t\tAssert.That (subfolders[1].Name, Is.EqualTo (\"Literal Folder Name\"));\n\n\t\t\t\tawait subfolders[1].StatusAsync (StatusItems.Count);\n\n\t\t\t\tAssert.That (subfolders[1], Has.Count.EqualTo (60), \"Count\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateNilDirectorySeparatorCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"common.basic-greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"common.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 LOGIN username password\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 CAPABILITY\\r\\n\", \"common.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"\\\"\\r\\n\", \"common.list-namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"common.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"%\\\"\\r\\n\", \"common.list-nil-folder-delim.txt\"),\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNilDirectorySeparator ()\n\t\t{\n\t\t\tvar commands = CreateNilDirectorySeparatorCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar subfolders = personal.GetSubfolders (false);\n\n\t\t\t\tAssert.That (subfolders, Has.Count.EqualTo (3), \"Count\");\n\t\t\t\tAssert.That (subfolders[0].Name, Is.EqualTo (\"INBOX\"));\n\t\t\t\tAssert.That (subfolders[1].Name, Is.EqualTo (\"Folder1\"));\n\t\t\t\tAssert.That (subfolders[1].DirectorySeparator, Is.EqualTo ('\\0'));\n\t\t\t\tAssert.That (subfolders[2].Name, Is.EqualTo (\"Folder2\"));\n\t\t\t\tAssert.That (subfolders[2].DirectorySeparator, Is.EqualTo ('\\0'));\n\n\t\t\t\tAssert.Throws<FolderNotFoundException> (() => subfolders[1].GetSubfolder (\"Subfolder\"));\n\n\t\t\t\tvar empty = subfolders[1].GetSubfolders (false);\n\t\t\t\tAssert.That (empty, Is.Empty, \"GetSubfolders when DirectorySeparator is nil\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestNilDirectorySeparatorAsync ()\n\t\t{\n\t\t\tvar commands = CreateNilDirectorySeparatorCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar subfolders = await personal.GetSubfoldersAsync (false);\n\n\t\t\t\tAssert.That (subfolders, Has.Count.EqualTo (3), \"Count\");\n\t\t\t\tAssert.That (subfolders[0].Name, Is.EqualTo (\"INBOX\"));\n\t\t\t\tAssert.That (subfolders[1].Name, Is.EqualTo (\"Folder1\"));\n\t\t\t\tAssert.That (subfolders[1].DirectorySeparator, Is.EqualTo ('\\0'));\n\t\t\t\tAssert.That (subfolders[2].Name, Is.EqualTo (\"Folder2\"));\n\t\t\t\tAssert.That (subfolders[2].DirectorySeparator, Is.EqualTo ('\\0'));\n\n\t\t\t\tAssert.ThrowsAsync<FolderNotFoundException> (() => subfolders[1].GetSubfolderAsync (\"Subfolder\"));\n\n\t\t\t\tvar empty = await subfolders[1].GetSubfoldersAsync (false);\n\t\t\t\tAssert.That (empty, Is.Empty, \"GetSubfolders when DirectorySeparator is nil\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<ImapReplayCommand> CreateAppendLimitCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate-no-appendlimit-value.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 STATUS INBOX (APPENDLIMIT)\\r\\n\", \"gmail.status-inbox-appendlimit.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 STATUS INBOX (APPENDLIMIT)\\r\\n\", \"gmail.status-inbox-appendlimit-nil.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LIST \\\"\\\" \\\"%\\\" RETURN (SUBSCRIBED CHILDREN STATUS (MESSAGES UNSEEN APPENDLIMIT SIZE))\\r\\n\", \"gmail.list-personal-status-appendlimit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAppendLimit ()\n\t\t{\n\t\t\tvar commands = CreateAppendLimitCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.AppendLimit), Is.True, \"ImapCapabilities.AppendLimit\");\n\t\t\t\tAssert.That (client.AppendLimit, Is.Null, \"AppendLimit\");\n\n\t\t\t\tclient.Inbox.Status (StatusItems.AppendLimit);\n\t\t\t\tAssert.That (client.Inbox.AppendLimit, Is.EqualTo (35651584), \"Inbox.AppendLimit\");\n\n\t\t\t\tclient.Inbox.Status (StatusItems.AppendLimit);\n\t\t\t\tAssert.That (client.Inbox.AppendLimit, Is.Null, \"Inbox.AppendLimit NIL\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar subfolders = personal.GetSubfolders (StatusItems.Count | StatusItems.Unread | StatusItems.Size | StatusItems.AppendLimit, subscribedOnly: false);\n\t\t\t\tAssert.That (subfolders, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\tAssert.That (subfolders[0].Name, Is.EqualTo (\"INBOX\"));\n\t\t\t\tAssert.That (subfolders[0].AppendLimit, Is.EqualTo (1234567890), \"Inbox.AppendLimit\");\n\t\t\t\tAssert.That (subfolders[0], Has.Count.EqualTo (10), \"Inbox.Count\");\n\t\t\t\tAssert.That (subfolders[0].Unread, Is.EqualTo (1), \"Inbox.Unread\");\n\t\t\t\tAssert.That (subfolders[0].Size, Is.EqualTo (123456789), \"Inbox.Size\");\n\n\t\t\t\tclient.Disconnect (false);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestAppendLimitAsync ()\n\t\t{\n\t\t\tvar commands = CreateAppendLimitCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.AppendLimit), Is.True, \"ImapCapabilities.AppendLimit\");\n\t\t\t\tAssert.That (client.AppendLimit, Is.Null, \"AppendLimit\");\n\n\t\t\t\tawait client.Inbox.StatusAsync (StatusItems.AppendLimit);\n\t\t\t\tAssert.That (client.Inbox.AppendLimit, Is.EqualTo (35651584), \"Inbox.AppendLimit\");\n\n\t\t\t\tawait client.Inbox.StatusAsync (StatusItems.AppendLimit);\n\t\t\t\tAssert.That (client.Inbox.AppendLimit, Is.Null, \"Inbox.AppendLimit NIL\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar subfolders = await personal.GetSubfoldersAsync (StatusItems.Count | StatusItems.Unread | StatusItems.Size | StatusItems.AppendLimit, subscribedOnly: false);\n\t\t\t\tAssert.That (subfolders, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\tAssert.That (subfolders[0].Name, Is.EqualTo (\"INBOX\"));\n\t\t\t\tAssert.That (subfolders[0].AppendLimit, Is.EqualTo (1234567890), \"Inbox.AppendLimit\");\n\t\t\t\tAssert.That (subfolders[0], Has.Count.EqualTo (10), \"Inbox.Count\");\n\t\t\t\tAssert.That (subfolders[0].Unread, Is.EqualTo (1), \"Inbox.Unread\");\n\t\t\t\tAssert.That (subfolders[0].Size, Is.EqualTo (123456789), \"Inbox.Size\");\n\n\t\t\t\tawait client.DisconnectAsync (false);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateAppendCommands (bool withKeywords, bool withInternalDates, out List<MimeMessage> messages, out List<MessageFlags> flags, out List<List<string>> keywords, out List<DateTimeOffset> internalDates)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\")\n\t\t\t};\n\n\t\t\tinternalDates = withInternalDates ? new List<DateTimeOffset> () : null;\n\t\t\tkeywords = withKeywords ? new List<List<string>> () : null;\n\t\t\tmessages = new List<MimeMessage> ();\n\t\t\tflags = new List<MessageFlags> ();\n\t\t\tvar command = new StringBuilder ();\n\t\t\tint id = 5;\n\n\t\t\tfor (int i = 0; i < 8; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tmessages.Add (message);\n\t\t\t\tflags.Add (MessageFlags.Seen);\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tkeywords.Add (new List<string> { \"$NotJunk\" });\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tinternalDates.Add (message.Date);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tvar tag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\tcommand.Clear ();\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tcommand.AppendFormat (\"{0} APPEND INBOX (\\\\Seen $NotJunk) \", tag);\n\t\t\t\telse\n\t\t\t\t\tcommand.AppendFormat (\"{0} APPEND INBOX (\\\\Seen) \", tag);\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\n\t\t\t\tif (length > 4096) {\n\t\t\t\t\tcommand.Append ('{').Append (length.ToString (CultureInfo.InvariantCulture)).Append (\"}\\r\\n\");\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), ImapReplayCommandResponse.Plus));\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (tag, latin1 + \"\\r\\n\", string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t\t} else {\n\t\t\t\t\tcommand.Append ('{').Append (length.ToString (CultureInfo.InvariantCulture)).Append (\"+}\\r\\n\").Append (latin1).Append (\"\\r\\n\");\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (string.Format (\"A{0:D8} LOGOUT\\r\\n\", id), \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, false, TestName = \"TestAppend\")]\n\t\t[TestCase (true, false, TestName = \"TestAppendWithKeywords\")]\n\t\t[TestCase (false, true, TestName = \"TestAppendWithInternalDates\")]\n\t\t[TestCase (true, true, TestName = \"TestAppendWithKeywordsAndInternalDates\")]\n\t\tpublic void TestAppend (bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateAppendCommands (withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withKeywords) {\n\t\t\t\t\t\tAppendRequest request;\n\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequest = new AppendRequest (messages[i], flags[i], keywords[i], internalDates[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest = new AppendRequest (messages[i], flags[i], keywords[i]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuid = client.Inbox.Append (request);\n\t\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\t\tuid = client.Inbox.Append (messages[i], flags[i], internalDates[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuid = client.Inbox.Append (messages[i], flags[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\tmessages[i].Dispose ();\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, false, TestName = \"TestAppendAsync\")]\n\t\t[TestCase (true, false, TestName = \"TestAppendWithKeywordsAsync\")]\n\t\t[TestCase (false, true, TestName = \"TestAppendWithInternalDatesAsync\")]\n\t\t[TestCase (true, true, TestName = \"TestAppendWithKeywordsAndInternalDatesAsync\")]\n\t\tpublic async Task TestAppendAsync (bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateAppendCommands (withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withKeywords) {\n\t\t\t\t\t\tAppendRequest request;\n\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequest = new AppendRequest (messages[i], flags[i], keywords[i], internalDates[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest = new AppendRequest (messages[i], flags[i], keywords[i]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuid = await client.Inbox.AppendAsync (request);\n\t\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\t\tuid = await client.Inbox.AppendAsync (messages[i], flags[i], internalDates[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuid = await client.Inbox.AppendAsync (messages[i], flags[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t\tmessages[i].Dispose ();\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateMultiAppendCommands (bool withKeywords, bool withInternalDates, out List<MimeMessage> messages, out List<MessageFlags> flags, out List<List<string>> keywords, out List<DateTimeOffset> internalDates)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\")\n\t\t\t};\n\n\t\t\tvar command = new StringBuilder (\"A00000004 APPEND INBOX\");\n\t\t\tvar now = DateTimeOffset.Now;\n\n\t\t\tinternalDates = withInternalDates ? new List<DateTimeOffset> () : null;\n\t\t\tkeywords = withKeywords ? new List<List<string>> () : null;\n\t\t\tmessages = new List<MimeMessage> ();\n\t\t\tflags = new List<MessageFlags> ();\n\n\t\t\tmessages.Add (CreateThreadableMessage (\"A\", \"<a@mimekit.net>\", null, now.AddMinutes (-7)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"B\", \"<b@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-6)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"C\", \"<c@mimekit.net>\", \"<a@mimekit.net> <b@mimekit.net>\", now.AddMinutes (-5)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"D\", \"<d@mimekit.net>\", \"<a@mimekit.net>\", now.AddMinutes (-4)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"E\", \"<e@mimekit.net>\", \"<c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\", now.AddMinutes (-3)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"F\", \"<f@mimekit.net>\", \"<b@mimekit.net>\", now.AddMinutes (-2)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"G\", \"<g@mimekit.net>\", null, now.AddMinutes (-1)));\n\t\t\tmessages.Add (CreateThreadableMessage (\"H\", \"<h@mimekit.net>\", null, now));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tvar message = messages[i];\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tflags.Add (MessageFlags.Seen);\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tkeywords.Add (new List<string> { \"$NotJunk\" });\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tinternalDates.Add (messages[i].Date);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tcommand.Append (\" (\\\\Seen $NotJunk) \");\n\t\t\t\telse\n\t\t\t\t\tcommand.Append (\" (\\\\Seen) \");\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\n\t\t\t\tcommand.Append ('{');\n\t\t\t\tcommand.AppendFormat (\"{0}+\", length);\n\t\t\t\tcommand.Append (\"}\\r\\n\");\n\t\t\t\tcommand.Append (latin1);\n\t\t\t}\n\t\t\tcommand.Append (\"\\r\\n\");\n\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), \"dovecot.multiappend.txt\"));\n\n\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\tvar message = messages[i];\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tcommand.Clear ();\n\t\t\t\tcommand.AppendFormat (\"A{0:D8} APPEND INBOX\", i + 5);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tcommand.Append (\" (\\\\Seen $NotJunk) \");\n\t\t\t\telse\n\t\t\t\t\tcommand.Append (\" (\\\\Seen) \");\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\n\t\t\t\tcommand.Append ('{');\n\t\t\t\tcommand.AppendFormat (\"{0}+\", length);\n\t\t\t\tcommand.Append (\"}\\r\\n\");\n\t\t\t\tcommand.Append (latin1);\n\t\t\t\tcommand.Append (\"\\r\\n\");\n\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (\"A00000013 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, false, TestName = \"TestMultiAppend\")]\n\t\t[TestCase (true, false, TestName = \"TestMultiAppendWithKeywords\")]\n\t\t[TestCase (false, true, TestName = \"TestMultiAppendWithInternalDates\")]\n\t\t[TestCase (true, true, TestName = \"TestMultiAppendWithKeywordsAndInternalDates\")]\n\t\tpublic void TestMultiAppend (bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateMultiAppendCommands (withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\t\t\tIList<UniqueId> uids;\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.MultiAppend), Is.True, \"MULTIAPPEND\");\n\n\t\t\t\t// Use MULTIAPPEND to append some test messages\n\t\t\t\tif (withKeywords) {\n\t\t\t\t\tvar requests = new List<IAppendRequest> ();\n\n\t\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i], internalDates[i]));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tuids = client.Inbox.Append (requests);\n\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\tuids = client.Inbox.Append (messages, flags, internalDates);\n\t\t\t\t} else {\n\t\t\t\t\tuids = client.Inbox.Append (messages, flags);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t// Disable the MULTIAPPEND extension and do it again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.MultiAppend;\n\n\t\t\t\tif (withKeywords) {\n\t\t\t\t\tvar requests = new List<IAppendRequest> ();\n\n\t\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i], internalDates[i]));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tuids = client.Inbox.Append (requests);\n\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\tuids = client.Inbox.Append (messages, flags, internalDates);\n\t\t\t\t} else {\n\t\t\t\t\tuids = client.Inbox.Append (messages, flags);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\tclient.Disconnect (true);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, false, TestName = \"TestMultiAppendAsync\")]\n\t\t[TestCase (true, false, TestName = \"TestMultiAppendWithKeywordsAsync\")]\n\t\t[TestCase (false, true, TestName = \"TestMultiAppendWithInternalDatesAsync\")]\n\t\t[TestCase (true, true, TestName = \"TestMultiAppendWithKeywordsAndInternalDatesAsync\")]\n\t\tpublic async Task TestMultiAppendAsync (bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateMultiAppendCommands (withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\t\t\tIList<UniqueId> uids;\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.MultiAppend), Is.True, \"MULTIAPPEND\");\n\n\t\t\t\t// Use MULTIAPPEND to append some test messages\n\t\t\t\tif (withKeywords) {\n\t\t\t\t\tvar requests = new List<IAppendRequest> ();\n\n\t\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i], internalDates[i]));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tuids = await client.Inbox.AppendAsync (requests);\n\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\tuids = await client.Inbox.AppendAsync (messages, flags, internalDates);\n\t\t\t\t} else {\n\t\t\t\t\tuids = await client.Inbox.AppendAsync (messages, flags);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\t// Disable the MULTIAPPEND extension and do it again\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.MultiAppend;\n\n\t\t\t\tif (withKeywords) {\n\t\t\t\t\tvar requests = new List<IAppendRequest> ();\n\n\t\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i], internalDates[i]));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequests.Add (new AppendRequest (messages[i], flags[i], keywords[i]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tuids = await client.Inbox.AppendAsync (requests);\n\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\tuids = await client.Inbox.AppendAsync (messages, flags, internalDates);\n\t\t\t\t} else {\n\t\t\t\t\tuids = await client.Inbox.AppendAsync (messages, flags);\n\t\t\t\t}\n\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (8), \"Unexpected number of messages appended\");\n\n\t\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateReplaceCommands (bool clientSide, bool withKeywords, bool withInternalDates, out List<MimeMessage> messages, out List<MessageFlags> flags, out List<List<string>> keywords, out List<DateTimeOffset> internalDates)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+replace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tinternalDates = withInternalDates ? new List<DateTimeOffset> () : null;\n\t\t\tkeywords = withKeywords ? new List<List<string>> () : null;\n\t\t\tmessages = new List<MimeMessage> ();\n\t\t\tflags = new List<MessageFlags> ();\n\t\t\tvar command = new StringBuilder ();\n\t\t\tint id = 5;\n\n\t\t\tfor (int i = 0; i < 8; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tmessages.Add (message);\n\n\t\t\t\tflags.Add (MessageFlags.Seen);\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tkeywords.Add (new List<string> { \"$NotJunk\" });\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tinternalDates.Add (message.Date);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tvar tag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\tcommand.Clear ();\n\n\t\t\t\tif (clientSide)\n\t\t\t\t\tcommand.AppendFormat (\"{0} APPEND INBOX (\\\\Seen\", tag);\n\t\t\t\telse\n\t\t\t\t\tcommand.AppendFormat (\"{0} REPLACE {1} INBOX (\\\\Seen\", tag, i + 1);\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tcommand.Append (\" $NotJunk) \");\n\t\t\t\telse\n\t\t\t\t\tcommand.Append (\") \");\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\n\t\t\t\t//if (length > 4096) {\n\t\t\t\t//\tcommand.Append ('{').Append (length.ToString ()).Append (\"}\\r\\n\");\n\t\t\t\t//\tcommands.Add (new ImapReplayCommand (command.ToString (), ImapReplayCommandResponse.Plus));\n\t\t\t\t//\tcommands.Add (new ImapReplayCommand (tag, latin1 + \"\\r\\n\", string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t\t//} else {\n\t\t\t\t\tcommand.Append ('{').Append (length.ToString (CultureInfo.InvariantCulture)).Append (\"+}\\r\\n\").Append (latin1).Append (\"\\r\\n\");\n\t\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t\t//}\n\n\t\t\t\tif (clientSide) {\n\t\t\t\t\ttag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\t\tcommands.Add (new ImapReplayCommand ($\"{tag} STORE {i + 1} +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (string.Format (\"A{0:D8} LOGOUT\\r\\n\", id), \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, false, false, TestName = \"TestReplace\")]\n\t\t[TestCase (false, true, false, TestName = \"TestReplaceWithKeywords\")]\n\t\t[TestCase (false, false, true, TestName = \"TestReplaceWithInternalDates\")]\n\t\t[TestCase (false, true, true, TestName = \"TestReplaceWithKeywordsAndInternalDates\")]\n\t\t[TestCase (true, false, false, TestName = \"TestClientSideReplace\")]\n\t\t[TestCase (true, true, false, TestName = \"TestClientSideReplaceWithKeywords\")]\n\t\t[TestCase (true, false, true, TestName = \"TestClientSideReplaceWithInternalDates\")]\n\t\t[TestCase (true, true, true, TestName = \"TestClientSideReplaceWithKeywordsAndInternalDates\")]\n\t\tpublic void TestReplace (bool clientSide, bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateReplaceCommands (clientSide, withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tif (clientSide)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Replace;\n\t\t\t\telse\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Replace), Is.True, \"REPLACE\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withKeywords) {\n\t\t\t\t\t\tReplaceRequest request;\n\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i], internalDates[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuid = client.Inbox.Replace (i, request);\n\t\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\t\tuid = client.Inbox.Replace (i, messages[i], flags[i], internalDates[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuid = client.Inbox.Replace (i, messages[i], flags[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, false, false, TestName = \"TestReplaceAsync\")]\n\t\t[TestCase (false, true, false, TestName = \"TestReplaceWithKeywordsAsync\")]\n\t\t[TestCase (false, false, true, TestName = \"TestReplaceWithInternalDatesAsync\")]\n\t\t[TestCase (false, true, true, TestName = \"TestReplaceWithKeywordsAndInternalDatesAsync\")]\n\t\t[TestCase (true, false, false, TestName = \"TestClientSideReplaceAsync\")]\n\t\t[TestCase (true, true, false, TestName = \"TestClientSideReplaceWithKeywordsAsync\")]\n\t\t[TestCase (true, false, true, TestName = \"TestClientSideReplaceWithInternalDatesAsync\")]\n\t\t[TestCase (true, true, true, TestName = \"TestClientSideReplaceWithKeywordsAndInternalDatesAsync\")]\n\t\tpublic async Task TestReplaceAsync (bool clientSide, bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateReplaceCommands (clientSide, withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tif (clientSide)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Replace;\n\t\t\t\telse\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Replace), Is.True, \"REPLACE\");\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withKeywords) {\n\t\t\t\t\t\tReplaceRequest request;\n\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i], internalDates[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuid = await client.Inbox.ReplaceAsync (i, request);\n\t\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\t\tuid = await client.Inbox.ReplaceAsync (i, messages[i], flags[i], internalDates[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuid = await client.Inbox.ReplaceAsync (i, messages[i], flags[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateReplaceByUidCommands (bool clientSide, bool withKeywords, bool withInternalDates, out List<MimeMessage> messages, out List<MessageFlags> flags, out List<List<string>> keywords, out List<DateTimeOffset> internalDates)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"dovecot.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 LOGIN username password\\r\\n\", \"dovecot.authenticate+replace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 NAMESPACE\\r\\n\", \"dovecot.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST (SPECIAL-USE) \\\"\\\" \\\"*\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"dovecot.list-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 SELECT INBOX (CONDSTORE)\\r\\n\", \"common.select-inbox.txt\")\n\t\t\t};\n\n\t\t\tinternalDates = withInternalDates ? new List<DateTimeOffset> () : null;\n\t\t\tkeywords = withKeywords ? new List<List<string>> () : null;\n\t\t\tmessages = new List<MimeMessage> ();\n\t\t\tflags = new List<MessageFlags> ();\n\t\t\tvar command = new StringBuilder ();\n\t\t\tint id = 5;\n\n\t\t\tfor (int i = 0; i < 8; i++) {\n\t\t\t\tMimeMessage message;\n\t\t\t\tstring latin1;\n\t\t\t\tlong length;\n\n\t\t\t\tusing (var resource = GetResourceStream (string.Format (\"common.message.{0}.msg\", i)))\n\t\t\t\t\tmessage = MimeMessage.Load (resource);\n\n\t\t\t\tmessages.Add (message);\n\n\t\t\t\tflags.Add (MessageFlags.Seen);\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tkeywords.Add (new List<string> { \"$NotJunk\" });\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tinternalDates.Add (message.Date);\n\n\t\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tmessage.WriteTo (options, stream);\n\t\t\t\t\tlength = stream.Length;\n\t\t\t\t\tstream.Position = 0;\n\n\t\t\t\t\tusing (var reader = new StreamReader (stream, Latin1))\n\t\t\t\t\t\tlatin1 = reader.ReadToEnd ();\n\t\t\t\t}\n\n\t\t\t\tvar tag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\tcommand.Clear ();\n\n\t\t\t\tif (clientSide)\n\t\t\t\t\tcommand.AppendFormat (\"{0} APPEND INBOX (\\\\Seen\", tag);\n\t\t\t\telse\n\t\t\t\t\tcommand.AppendFormat (\"{0} UID REPLACE {1} INBOX (\\\\Seen\", tag, i + 1);\n\n\t\t\t\tif (withKeywords)\n\t\t\t\t\tcommand.Append (\" $NotJunk) \");\n\t\t\t\telse\n\t\t\t\t\tcommand.Append (\") \");\n\n\t\t\t\tif (withInternalDates)\n\t\t\t\t\tcommand.AppendFormat (\"\\\"{0}\\\" \", ImapUtils.FormatInternalDate (message.Date));\n\n\t\t\t\t//if (length > 4096) {\n\t\t\t\t//\tcommand.Append ('{').Append (length.ToString ()).Append (\"}\\r\\n\");\n\t\t\t\t//\tcommands.Add (new ImapReplayCommand (command.ToString (), ImapReplayCommandResponse.Plus));\n\t\t\t\t//\tcommands.Add (new ImapReplayCommand (tag, latin1 + \"\\r\\n\", string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t\t//} else {\n\t\t\t\tcommand.Append ('{').Append (length.ToString (CultureInfo.InvariantCulture)).Append (\"+}\\r\\n\").Append (latin1).Append (\"\\r\\n\");\n\t\t\t\tcommands.Add (new ImapReplayCommand (command.ToString (), string.Format (\"dovecot.append.{0}.txt\", i + 1)));\n\t\t\t\t//}\n\n\t\t\t\tif (clientSide) {\n\t\t\t\t\ttag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\t\tcommands.Add (new ImapReplayCommand ($\"{tag} UID STORE {i + 1} +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK));\n\n\t\t\t\t\ttag = string.Format (\"A{0:D8}\", id++);\n\t\t\t\t\tcommands.Add (new ImapReplayCommand ($\"{tag} UID EXPUNGE {i + 1}\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcommands.Add (new ImapReplayCommand (string.Format (\"A{0:D8} LOGOUT\\r\\n\", id), \"gmail.logout.txt\"));\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, false, false, TestName = \"TestReplaceByUid\")]\n\t\t[TestCase (false, true, false, TestName = \"TestReplaceByUidWithKeywords\")]\n\t\t[TestCase (false, false, true, TestName = \"TestReplaceByUidWithInternalDates\")]\n\t\t[TestCase (false, true, true, TestName = \"TestReplaceByUidWithKeywordsAndInternalDates\")]\n\t\t[TestCase (true, false, false, TestName = \"TestClientSideReplaceByUid\")]\n\t\t[TestCase (true, true, false, TestName = \"TestClientSideReplaceByUidWithKeywords\")]\n\t\t[TestCase (true, false, true, TestName = \"TestClientSideReplaceByUidWithInternalDates\")]\n\t\t[TestCase (true, true, true, TestName = \"TestClientSideReplaceByUidWithKeywordsAndInternalDates\")]\n\t\tpublic void TestReplaceByUid (bool clientSide, bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateReplaceByUidCommands (clientSide, withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tif (clientSide)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Replace;\n\t\t\t\telse\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Replace), Is.True, \"REPLACE\");\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withKeywords) {\n\t\t\t\t\t\tReplaceRequest request;\n\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i], internalDates[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuid = client.Inbox.Replace (new UniqueId ((uint) i + 1), request);\n\t\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\t\tuid = client.Inbox.Replace (new UniqueId ((uint) i + 1), messages[i], flags[i], internalDates[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuid = client.Inbox.Replace (new UniqueId ((uint) i + 1), messages[i], flags[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, false, false, TestName = \"TestReplaceByUidAsync\")]\n\t\t[TestCase (false, true, false, TestName = \"TestReplaceByUidWithKeywordsAsync\")]\n\t\t[TestCase (false, false, true, TestName = \"TestReplaceByUidWithInternalDatesAsync\")]\n\t\t[TestCase (false, true, true, TestName = \"TestReplaceByUidWithKeywordsAndInternalDatesAsync\")]\n\t\t[TestCase (true, false, false, TestName = \"TestClientSideReplaceByUidAsync\")]\n\t\t[TestCase (true, true, false, TestName = \"TestClientSideReplaceByUidWithKeywordsAsync\")]\n\t\t[TestCase (true, false, true, TestName = \"TestClientSideReplaceByUidWithInternalDatesAsync\")]\n\t\t[TestCase (true, true, true, TestName = \"TestClientSideReplaceByUidWithKeywordsAndInternalDatesAsync\")]\n\t\tpublic async Task TestReplaceByUidAsync (bool clientSide, bool withKeywords, bool withInternalDates)\n\t\t{\n\t\t\tvar commands = CreateReplaceByUidCommands (clientSide, withKeywords, withInternalDates, out var messages, out var flags, out var keywords, out var internalDates);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// Note: we do not want to use SASL at all...\n\t\t\t\tclient.AuthenticationMechanisms.Clear ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tif (clientSide)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Replace;\n\t\t\t\telse\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.Replace), Is.True, \"REPLACE\");\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tfor (int i = 0; i < messages.Count; i++) {\n\t\t\t\t\tUniqueId? uid;\n\n\t\t\t\t\tif (withKeywords) {\n\t\t\t\t\t\tReplaceRequest request;\n\n\t\t\t\t\t\tif (withInternalDates) {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i], internalDates[i]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trequest = new ReplaceRequest (messages[i], flags[i], keywords[i]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuid = await client.Inbox.ReplaceAsync (new UniqueId ((uint) i + 1), request);\n\t\t\t\t\t} else if (withInternalDates) {\n\t\t\t\t\t\tuid = await client.Inbox.ReplaceAsync (new UniqueId ((uint) i + 1), messages[i], flags[i], internalDates[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuid = await client.Inbox.ReplaceAsync (new UniqueId ((uint) i + 1), messages[i], flags[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (uid.HasValue, Is.True, \"Expected a UIDAPPEND resp-code\");\n\t\t\t\t\tAssert.That (uid.Value.Id, Is.EqualTo (i + 1), \"Unexpected UID\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\n\t\t\t\tforeach (var message in messages)\n\t\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateCreateRenameDeleteCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 CREATE TopLevel1\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" TopLevel1\\r\\n\", \"gmail.list-toplevel1.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 CREATE TopLevel2\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 LIST \\\"\\\" TopLevel2\\r\\n\", \"gmail.list-toplevel2.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 CREATE TopLevel1/SubLevel1\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 LIST \\\"\\\" TopLevel1/SubLevel1\\r\\n\", \"gmail.list-sublevel1.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 CREATE TopLevel2/SubLevel2\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 LIST \\\"\\\" TopLevel2/SubLevel2\\r\\n\", \"gmail.list-sublevel2.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000013 SELECT TopLevel1/SubLevel1 (CONDSTORE)\\r\\n\", \"gmail.select-sublevel1.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000014 RENAME TopLevel1/SubLevel1 TopLevel2/SubLevel1\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000015 DELETE TopLevel1\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000016 SELECT TopLevel2/SubLevel2 (CONDSTORE)\\r\\n\", \"gmail.select-sublevel2.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000017 RENAME TopLevel2 TopLevel\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000018 SELECT TopLevel (CONDSTORE)\\r\\n\", \"gmail.select-toplevel.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000019 DELETE TopLevel\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000020 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCreateRenameDelete ()\n\t\t{\n\t\t\tvar commands = CreateCreateRenameDeleteCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tint top1Renamed = 0, top2Renamed = 0, sub1Renamed = 0, sub2Renamed = 0;\n\t\t\t\tint top1Deleted = 0, top2Deleted = 0, sub1Deleted = 0, sub2Deleted = 0;\n\t\t\t\tint top1Closed = 0, top2Closed = 0, sub1Closed = 0, sub2Closed = 0;\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar toplevel1 = personal.Create (\"TopLevel1\", false);\n\t\t\t\tvar toplevel2 = personal.Create (\"TopLevel2\", false);\n\t\t\t\tvar sublevel1 = toplevel1.Create (\"SubLevel1\", true);\n\t\t\t\tvar sublevel2 = toplevel2.Create (\"SubLevel2\", true);\n\n\t\t\t\ttoplevel1.Renamed += (o, e) => { top1Renamed++; };\n\t\t\t\ttoplevel2.Renamed += (o, e) => { top2Renamed++; };\n\t\t\t\tsublevel1.Renamed += (o, e) => { sub1Renamed++; };\n\t\t\t\tsublevel2.Renamed += (o, e) => { sub2Renamed++; };\n\n\t\t\t\ttoplevel1.Deleted += (o, e) => { top1Deleted++; };\n\t\t\t\ttoplevel2.Deleted += (o, e) => { top2Deleted++; };\n\t\t\t\tsublevel1.Deleted += (o, e) => { sub1Deleted++; };\n\t\t\t\tsublevel2.Deleted += (o, e) => { sub2Deleted++; };\n\n\t\t\t\ttoplevel1.Closed += (o, e) => { top1Closed++; };\n\t\t\t\ttoplevel2.Closed += (o, e) => { top2Closed++; };\n\t\t\t\tsublevel1.Closed += (o, e) => { sub1Closed++; };\n\t\t\t\tsublevel2.Closed += (o, e) => { sub2Closed++; };\n\n\t\t\t\tAssert.That (sublevel1.CanOpen, Is.True, \"SubLevel1 can be opened\");\n\t\t\t\tsublevel1.Open (FolderAccess.ReadWrite);\n\t\t\t\tsublevel1.Rename (toplevel2, \"SubLevel1\");\n\n\t\t\t\tAssert.That (sub1Renamed, Is.EqualTo (1), \"SubLevel1 folder should have received a Renamed event\");\n\t\t\t\tAssert.That (sub1Closed, Is.EqualTo (1), \"SubLevel1 should have received a Closed event\");\n\t\t\t\tAssert.That (sublevel1.IsOpen, Is.False, \"SubLevel1 should be closed after being renamed\");\n\n\t\t\t\ttoplevel1.Delete ();\n\t\t\t\tAssert.That (top1Deleted, Is.EqualTo (1), \"TopLevel1 should have received a Deleted event\");\n\t\t\t\tAssert.That (toplevel1.Exists, Is.False, \"TopLevel1.Exists\");\n\n\t\t\t\tAssert.That (sublevel2.CanOpen, Is.True, \"SubLevel2 can be opened\");\n\t\t\t\tsublevel2.Open (FolderAccess.ReadWrite);\n\t\t\t\ttoplevel2.Rename (personal, \"TopLevel\");\n\n\t\t\t\tAssert.That (sub1Renamed, Is.EqualTo (2), \"SubLevel1 folder should have received a Renamed event\");\n\t\t\t\tAssert.That (sub2Renamed, Is.EqualTo (1), \"SubLevel2 folder should have received a Renamed event\");\n\t\t\t\tAssert.That (sub2Closed, Is.EqualTo (1), \"SubLevel2 should have received a Closed event\");\n\t\t\t\tAssert.That (sublevel2.IsOpen, Is.False, \"SubLevel2 should be closed after being renamed\");\n\t\t\t\tAssert.That (top2Renamed, Is.EqualTo (1), \"TopLevel2 folder should have received a Renamed event\");\n\n\t\t\t\ttoplevel2.Open (FolderAccess.ReadWrite);\n\t\t\t\ttoplevel2.Delete ();\n\t\t\t\tAssert.That (top2Closed, Is.EqualTo (1), \"TopLevel2 should have received a Closed event\");\n\t\t\t\tAssert.That (toplevel2.IsOpen, Is.False, \"TopLevel2 should be closed after being deleted\");\n\t\t\t\tAssert.That (top2Deleted, Is.EqualTo (1), \"TopLevel2 should have received a Deleted event\");\n\t\t\t\tAssert.That (toplevel2.Exists, Is.False, \"TopLevel2.Exists\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCreateRenameDeleteAsync ()\n\t\t{\n\t\t\tvar commands = CreateCreateRenameDeleteCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tint top1Renamed = 0, top2Renamed = 0, sub1Renamed = 0, sub2Renamed = 0;\n\t\t\t\tint top1Deleted = 0, top2Deleted = 0, sub1Deleted = 0, sub2Deleted = 0;\n\t\t\t\tint top1Closed = 0, top2Closed = 0, sub1Closed = 0, sub2Closed = 0;\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar toplevel1 = await personal.CreateAsync (\"TopLevel1\", false);\n\t\t\t\tvar toplevel2 = await personal.CreateAsync (\"TopLevel2\", false);\n\t\t\t\tvar sublevel1 = await toplevel1.CreateAsync (\"SubLevel1\", true);\n\t\t\t\tvar sublevel2 = await toplevel2.CreateAsync (\"SubLevel2\", true);\n\n\t\t\t\ttoplevel1.Renamed += (o, e) => { top1Renamed++; };\n\t\t\t\ttoplevel2.Renamed += (o, e) => { top2Renamed++; };\n\t\t\t\tsublevel1.Renamed += (o, e) => { sub1Renamed++; };\n\t\t\t\tsublevel2.Renamed += (o, e) => { sub2Renamed++; };\n\n\t\t\t\ttoplevel1.Deleted += (o, e) => { top1Deleted++; };\n\t\t\t\ttoplevel2.Deleted += (o, e) => { top2Deleted++; };\n\t\t\t\tsublevel1.Deleted += (o, e) => { sub1Deleted++; };\n\t\t\t\tsublevel2.Deleted += (o, e) => { sub2Deleted++; };\n\n\t\t\t\ttoplevel1.Closed += (o, e) => { top1Closed++; };\n\t\t\t\ttoplevel2.Closed += (o, e) => { top2Closed++; };\n\t\t\t\tsublevel1.Closed += (o, e) => { sub1Closed++; };\n\t\t\t\tsublevel2.Closed += (o, e) => { sub2Closed++; };\n\n\t\t\t\tAssert.That (sublevel1.CanOpen, Is.True, \"SubLevel1 can be opened\");\n\t\t\t\tawait sublevel1.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tawait sublevel1.RenameAsync (toplevel2, \"SubLevel1\");\n\n\t\t\t\tAssert.That (sub1Renamed, Is.EqualTo (1), \"SubLevel1 folder should have received a Renamed event\");\n\t\t\t\tAssert.That (sub1Closed, Is.EqualTo (1), \"SubLevel1 should have received a Closed event\");\n\t\t\t\tAssert.That (sublevel1.IsOpen, Is.False, \"SubLevel1 should be closed after being renamed\");\n\n\t\t\t\tawait toplevel1.DeleteAsync ();\n\t\t\t\tAssert.That (top1Deleted, Is.EqualTo (1), \"TopLevel1 should have received a Deleted event\");\n\t\t\t\tAssert.That (toplevel1.Exists, Is.False, \"TopLevel1.Exists\");\n\n\t\t\t\tAssert.That (sublevel2.CanOpen, Is.True, \"SubLevel2 can be opened\");\n\t\t\t\tawait sublevel2.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tawait toplevel2.RenameAsync (personal, \"TopLevel\");\n\n\t\t\t\tAssert.That (sub1Renamed, Is.EqualTo (2), \"SubLevel1 folder should have received a Renamed event\");\n\t\t\t\tAssert.That (sub2Renamed, Is.EqualTo (1), \"SubLevel2 folder should have received a Renamed event\");\n\t\t\t\tAssert.That (sub2Closed, Is.EqualTo (1), \"SubLevel2 should have received a Closed event\");\n\t\t\t\tAssert.That (sublevel2.IsOpen, Is.False, \"SubLevel2 should be closed after being renamed\");\n\t\t\t\tAssert.That (top2Renamed, Is.EqualTo (1), \"TopLevel2 folder should have received a Renamed event\");\n\n\t\t\t\tawait toplevel2.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tawait toplevel2.DeleteAsync ();\n\t\t\t\tAssert.That (top2Closed, Is.EqualTo (1), \"TopLevel2 should have received a Closed event\");\n\t\t\t\tAssert.That (toplevel2.IsOpen, Is.False, \"TopLevel2 should be closed after being deleted\");\n\t\t\t\tAssert.That (top2Deleted, Is.EqualTo (1), \"TopLevel2 should have received a Deleted event\");\n\t\t\t\tAssert.That (toplevel2.Exists, Is.False, \"TopLevel2.Exists\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateCreateMailboxIdCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+create-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 CREATE TopLevel1\\r\\n\", \"gmail.create-mailboxid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" TopLevel1\\r\\n\", \"gmail.list-toplevel1.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCreateMailboxId ()\n\t\t{\n\t\t\tvar commands = CreateCreateMailboxIdCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.ObjectID), Is.True, \"OBJECTID\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar toplevel1 = personal.Create (\"TopLevel1\", true);\n\t\t\t\tAssert.That (toplevel1.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren));\n\t\t\t\tAssert.That (toplevel1.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCreateMailboxIdAsync ()\n\t\t{\n\t\t\tvar commands = CreateCreateMailboxIdCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.ObjectID), Is.True, \"OBJECTID\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar toplevel1 = await personal.CreateAsync (\"TopLevel1\", true);\n\t\t\t\tAssert.That (toplevel1.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren));\n\t\t\t\tAssert.That (toplevel1.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateCreateSpecialUseCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+create-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 CREATE \\\"[Gmail]/Archives\\\" (USE (\\\\Archive))\\r\\n\", \"gmail.create-mailboxid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" \\\"[Gmail]/Archives\\\"\\r\\n\", \"gmail.list-archives.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 CREATE \\\"[Gmail]/Flagged\\\" (USE (\\\\Flagged))\\r\\n\", \"gmail.create-mailboxid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 LIST \\\"\\\" \\\"[Gmail]/Flagged\\\"\\r\\n\", \"gmail.list-flagged.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCreateSpecialUse ()\n\t\t{\n\t\t\tvar commands = CreateCreateSpecialUseCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.CreateSpecialUse), Is.True, \"CREATE-SPECIAL-USE\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar gmail = personal.GetSubfolder (\"[Gmail]\");\n\n\t\t\t\tvar archives = gmail.Create (\"Archives\", SpecialFolder.Archive);\n\t\t\t\tAssert.That (archives.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren | FolderAttributes.Archive));\n\t\t\t\tAssert.That (client.GetFolder (SpecialFolder.Archive), Is.EqualTo (archives));\n\t\t\t\tAssert.That (archives.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\tvar flagged = gmail.Create (\"Flagged\", SpecialFolder.Flagged);\n\t\t\t\tAssert.That (flagged.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren | FolderAttributes.Flagged));\n\t\t\t\tAssert.That (client.GetFolder (SpecialFolder.Flagged), Is.EqualTo (flagged));\n\t\t\t\tAssert.That (flagged.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCreateSpecialUseAsync ()\n\t\t{\n\t\t\tvar commands = CreateCreateSpecialUseCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.CreateSpecialUse), Is.True, \"CREATE-SPECIAL-USE\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar gmail = await personal.GetSubfolderAsync (\"[Gmail]\");\n\n\t\t\t\tvar archives = await gmail.CreateAsync (\"Archives\", SpecialFolder.Archive);\n\t\t\t\tAssert.That (archives.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren | FolderAttributes.Archive));\n\t\t\t\tAssert.That (client.GetFolder (SpecialFolder.Archive), Is.EqualTo (archives));\n\t\t\t\tAssert.That (archives.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\tvar flagged = await gmail.CreateAsync (\"Flagged\", SpecialFolder.Flagged);\n\t\t\t\tAssert.That (flagged.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren | FolderAttributes.Flagged));\n\t\t\t\tAssert.That (client.GetFolder (SpecialFolder.Flagged), Is.EqualTo (flagged));\n\t\t\t\tAssert.That (flagged.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateCreateSpecialUseMultipleCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate+create-special-use.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 CREATE \\\"[Gmail]/Archives\\\" (USE (\\\\All \\\\Archive \\\\Drafts \\\\Flagged \\\\Important \\\\Junk \\\\Sent \\\\Trash))\\r\\n\", \"gmail.create-mailboxid.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" \\\"[Gmail]/Archives\\\"\\r\\n\", \"gmail.list-archives.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 CREATE \\\"[Gmail]/MyImportant\\\" (USE (\\\\Important))\\r\\n\", Encoding.ASCII.GetBytes (\"A00000007 NO [USEATTR] An \\\\Important mailbox already exists\\r\\n\")),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCreateSpecialUseMultiple ()\n\t\t{\n\t\t\tvar commands = CreateCreateSpecialUseMultipleCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.CreateSpecialUse), Is.True, \"CREATE-SPECIAL-USE\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar gmail = personal.GetSubfolder (\"[Gmail]\");\n\n\t\t\t\tvar uses = new List<SpecialFolder> {\n\t\t\t\t\tSpecialFolder.All,\n\t\t\t\t\tSpecialFolder.Archive,\n\t\t\t\t\tSpecialFolder.Drafts,\n\t\t\t\t\tSpecialFolder.Flagged,\n\t\t\t\t\tSpecialFolder.Important,\n\t\t\t\t\tSpecialFolder.Junk,\n\t\t\t\t\tSpecialFolder.Sent,\n\t\t\t\t\tSpecialFolder.Trash,\n\n\t\t\t\t\t// specifically duplicate some special uses\n\t\t\t\t\tSpecialFolder.All,\n\t\t\t\t\tSpecialFolder.Flagged,\n\n\t\t\t\t\t// and add one that is invalid\n\t\t\t\t\t(SpecialFolder) 15\n\t\t\t\t};\n\n\t\t\t\tvar archive = gmail.Create (\"Archives\", uses);\n\t\t\t\tAssert.That (archive.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren | FolderAttributes.Archive));\n\t\t\t\tAssert.That (client.GetFolder (SpecialFolder.Archive), Is.EqualTo (archive));\n\t\t\t\tAssert.That (archive.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tgmail.Create (\"MyImportant\", new[] { SpecialFolder.Important });\n\t\t\t\t\tAssert.Fail (\"Creating the MyImportant folder should have thrown an ImapCommandException\");\n\t\t\t\t} catch (ImapCommandException ex) {\n\t\t\t\t\tAssert.That (ex.Response, Is.EqualTo (ImapCommandResponse.No));\n\t\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (\"An \\\\Important mailbox already exists\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCreateSpecialUseMultipleAsync ()\n\t\t{\n\t\t\tvar commands = CreateCreateSpecialUseMultipleCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.CreateSpecialUse), Is.True, \"CREATE-SPECIAL-USE\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar gmail = await personal.GetSubfolderAsync (\"[Gmail]\");\n\n\t\t\t\tvar uses = new List<SpecialFolder> {\n\t\t\t\t\tSpecialFolder.All,\n\t\t\t\t\tSpecialFolder.Archive,\n\t\t\t\t\tSpecialFolder.Drafts,\n\t\t\t\t\tSpecialFolder.Flagged,\n\t\t\t\t\tSpecialFolder.Important,\n\t\t\t\t\tSpecialFolder.Junk,\n\t\t\t\t\tSpecialFolder.Sent,\n\t\t\t\t\tSpecialFolder.Trash,\n\n\t\t\t\t\t// specifically duplicate some special uses\n\t\t\t\t\tSpecialFolder.All,\n\t\t\t\t\tSpecialFolder.Flagged,\n\n\t\t\t\t\t// and add one that is invalid\n\t\t\t\t\t(SpecialFolder) 15\n\t\t\t\t};\n\n\t\t\t\tvar archive = await gmail.CreateAsync (\"Archives\", uses);\n\t\t\t\tAssert.That (archive.Attributes, Is.EqualTo (FolderAttributes.HasNoChildren | FolderAttributes.Archive));\n\t\t\t\tAssert.That (client.GetFolder (SpecialFolder.Archive), Is.EqualTo (archive));\n\t\t\t\tAssert.That (archive.Id, Is.EqualTo (\"25dcfa84-fd65-41c3-abc3-633c8f10923f\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait gmail.CreateAsync (\"MyImportant\", new[] { SpecialFolder.Important });\n\t\t\t\t\tAssert.Fail (\"Creating the MyImportamnt folder should have thrown an ImapCommandException\");\n\t\t\t\t} catch (ImapCommandException ex) {\n\t\t\t\t\tAssert.That (ex.Response, Is.EqualTo (ImapCommandResponse.No));\n\t\t\t\t\tAssert.That (ex.ResponseText, Is.EqualTo (\"An \\\\Important mailbox already exists\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateCopyToCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) ALL\\r\\n\", \"gmail.search.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LIST \\\"\\\" \\\"Archived Messages\\\"\\r\\n\", \"gmail.list-archived-messages.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID COPY 1:3,5,7:9,11:14,26:29,31,34,41:43,50 \\\"Archived Messages\\\"\\r\\n\", \"gmail.uid-copy.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 SEARCH UID 1:3,5,7:9,11:14,26:29,31,34,41:43,50\\r\\n\", \"gmail.get-indexes.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 COPY 1:21 \\\"Archived Messages\\\"\\r\\n\", \"gmail.uid-copy.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCopyTo ()\n\t\t{\n\t\t\tvar commands = CreateCopyToCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\t\t\t\tvar uids = inbox.Search (SearchQuery.All);\n\n\t\t\t\tvar archived = personal.GetSubfolder (\"Archived Messages\");\n\n\t\t\t\t// Test copying using the UIDPLUS extension\n\t\t\t\tvar copied = inbox.CopyTo (uids, archived);\n\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (copied.Source.Count), \"Source and Destination UID counts do not match\");\n\n\t\t\t\t// Disable UIDPLUS and try again (to test GetIndexesAsync() and CopyTo(IList<int>, IMailFolder)\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.UidPlus;\n\t\t\t\tcopied = inbox.CopyTo (uids, archived);\n\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (copied.Source.Count), \"Source and Destination UID counts do not match\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCopyToAsync ()\n\t\t{\n\t\t\tvar commands = CreateCopyToCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.All);\n\n\t\t\t\tvar archived = await personal.GetSubfolderAsync (\"Archived Messages\");\n\n\t\t\t\t// Test copying using the UIDPLUS extension\n\t\t\t\tvar copied = await inbox.CopyToAsync (uids, archived);\n\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (copied.Source.Count), \"Source and Destination UID counts do not match\");\n\n\t\t\t\t// Disable UIDPLUS and try again (to test GetIndexesAsync() and CopyTo(IList<int>, IMailFolder)\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.UidPlus;\n\t\t\t\tcopied = await inbox.CopyToAsync (uids, archived);\n\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (copied.Source.Count), \"Source and Destination UID counts do not match\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateExchangeCopyUidRespCodeWithoutOkCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"exchange.capability-preauth.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 CAPABILITY\\r\\n\", \"exchange.capability-postauth.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 LIST \\\"\\\" \\\"INBOX\\\"\\r\\n\", \"common.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX\\r\\n\", \"common.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" Level1\\r\\n\", \"gmail.list-level1.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID MOVE 31 Level1\\r\\n\", \"exchange.issue115.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExchangeCopyUidRespCodeWithoutOk ()\n\t\t{\n\t\t\tvar commands = CreateExchangeCopyUidRespCodeWithoutOkCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\t// Test handling of broken Exchange IMAP response: \"[COPYUID 55 31 6]\" (it should be \"* OK [COPYUID 55 31 6]\")\n\t\t\t\tvar level1 = personal.GetSubfolder (\"Level1\");\n\t\t\t\tvar uids = new[] { new UniqueId (31) };\n\t\t\t\tvar copied = inbox.MoveTo (uids, level1);\n\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (copied.Source.Count), \"Source and Destination UID counts do not match\");\n\t\t\t\tAssert.That (uids[0], Is.EqualTo (copied.Source[0]), \"Source[0]\");\n\t\t\t\tAssert.That (new UniqueId (6), Is.EqualTo (copied.Destination[0]), \"Destination[0]\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExchangeCopyUidRespCodeWithoutOkAsync ()\n\t\t{\n\t\t\tvar commands = CreateExchangeCopyUidRespCodeWithoutOkCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\t// Test handling of broken Exchange IMAP response: \"[COPYUID 55 31 6]\" (it should be \"* OK [COPYUID 55 31 6]\")\n\t\t\t\tvar level1 = await personal.GetSubfolderAsync (\"Level1\");\n\t\t\t\tvar uids = new[] { new UniqueId (31) };\n\t\t\t\tvar copied = await inbox.MoveToAsync (uids, level1);\n\n\t\t\t\tAssert.That (copied.Destination, Has.Count.EqualTo (copied.Source.Count), \"Source and Destination UID counts do not match\");\n\t\t\t\tAssert.That (uids[0], Is.EqualTo (copied.Source[0]), \"Source[0]\");\n\t\t\t\tAssert.That (new UniqueId (6), Is.EqualTo (copied.Destination[0]), \"Destination[0]\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateMoveToCommands ()\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" \\\"Archived Messages\\\"\\r\\n\", \"gmail.list-archived-messages.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 MOVE 1:21 \\\"Archived Messages\\\"\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 COPY 1:21 \\\"Archived Messages\\\"\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 STORE 1:21 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMoveTo ()\n\t\t{\n\t\t\tvar commands = CreateMoveToCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tvar indexes = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };\n\t\t\t\tvar archived = personal.GetSubfolder (\"Archived Messages\");\n\n\t\t\t\tinbox.MoveTo (indexes, archived);\n\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Move;\n\t\t\t\tinbox.MoveTo (indexes, archived);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMoveToAsync ()\n\t\t{\n\t\t\tvar commands = CreateMoveToCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tvar indexes = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };\n\t\t\t\tvar archived = await personal.GetSubfolderAsync (\"Archived Messages\");\n\n\t\t\t\tawait inbox.MoveToAsync (indexes, archived);\n\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Move;\n\t\t\t\tawait inbox.MoveToAsync (indexes, archived);\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUidMoveToCommands (bool disableMove)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) ALL\\r\\n\", \"gmail.search.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LIST \\\"\\\" \\\"Archived Messages\\\"\\r\\n\", \"gmail.list-archived-messages.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 UID MOVE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 \\\"Archived Messages\\\"\\r\\n\", \"gmail.uid-move.txt\")\n\t\t\t};\n\t\t\tif (disableMove) {\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000009 UID COPY 1:3,5,7:9,11:14,26:29,31,34,41:43,50 \\\"Archived Messages\\\"\\r\\n\", \"gmail.uid-copy.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000010 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000011 UID EXPUNGE 1:3,5,7:9,11:14,26:29,31,34,41:43,50\\r\\n\", \"gmail.uid-expunge.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000012 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\t\t\t} else {\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000009 SEARCH UID 1:3,5,7:9,11:14,26:29,31,34,41:43,50\\r\\n\", \"gmail.get-indexes.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000010 MOVE 1:21 \\\"Archived Messages\\\"\\r\\n\", \"gmail.uid-move.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000011 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\t\t\t}\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (true, TestName = \"TestUidMoveToDisableMove\")]\n\t\t[TestCase (false, TestName = \"TestUidMoveToDisableUidPlus\")]\n\t\tpublic void TestUidMoveTo (bool disableMove)\n\t\t{\n\t\t\tvar commands = CreateUidMoveToCommands (disableMove);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces [0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\t\t\t\tvar uids = inbox.Search (SearchQuery.All);\n\n\t\t\t\tvar archived = personal.GetSubfolder (\"Archived Messages\");\n\t\t\t\tint changed = 0, expunged = 0;\n\n\t\t\t\tinbox.MessageExpunged += (o, e) => { expunged++; Assert.That (e.Index, Is.EqualTo (0), \"Expunged event message index\"); };\n\t\t\t\tinbox.CountChanged += (o, e) => { changed++; };\n\n\t\t\t\t// Test copying using the MOVE & UIDPLUS extensions\n\t\t\t\tvar moved = inbox.MoveTo (uids, archived);\n\n\t\t\t\tAssert.That (moved.Destination, Has.Count.EqualTo (moved.Source.Count), \"Source and Destination UID counts do not match\");\n\t\t\t\tAssert.That (expunged, Is.EqualTo (21), \"Expunged event\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"CountChanged event\");\n\n\t\t\t\tif (disableMove)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Move;\n\t\t\t\telse\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.UidPlus;\n\n\t\t\t\texpunged = changed = 0;\n\n\t\t\t\tmoved = inbox.MoveTo (uids, archived);\n\n\t\t\t\tAssert.That (moved.Destination, Has.Count.EqualTo (moved.Source.Count), \"Source and Destination UID counts do not match\");\n\t\t\t\tAssert.That (expunged, Is.EqualTo (21), \"Expunged event\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"CountChanged event\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (true, TestName = \"TestUidMoveToDisableMoveAsync\")]\n\t\t[TestCase (false, TestName = \"TestUidMoveToDisableUidPlusAsync\")]\n\t\tpublic async Task TestUidMoveToAsync (bool disableMove)\n\t\t{\n\t\t\tvar commands = CreateUidMoveToCommands (disableMove);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (ImapCapabilities.UidPlus), Is.True, \"Expected UIDPLUS extension\");\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces [0]);\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.All);\n\n\t\t\t\tvar archived = await personal.GetSubfolderAsync (\"Archived Messages\");\n\t\t\t\tint changed = 0, expunged = 0;\n\n\t\t\t\tinbox.MessageExpunged += (o, e) => { expunged++; Assert.That (e.Index, Is.EqualTo (0), \"Expunged event message index\"); };\n\t\t\t\tinbox.CountChanged += (o, e) => { changed++; };\n\n\t\t\t\t// Test moving using the MOVE & UIDPLUS extensions\n\t\t\t\tvar moved = await inbox.MoveToAsync (uids, archived);\n\n\t\t\t\tAssert.That (moved.Destination, Has.Count.EqualTo (moved.Source.Count), \"Source and Destination UID counts do not match\");\n\t\t\t\tAssert.That (expunged, Is.EqualTo (21), \"Expunged event\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"CountChanged event\");\n\n\t\t\t\tif (disableMove)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.Move;\n\t\t\t\telse\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.UidPlus;\n\n\t\t\t\texpunged = changed = 0;\n\n\t\t\t\tmoved = await inbox.MoveToAsync (uids, archived);\n\n\t\t\t\tAssert.That (moved.Destination, Has.Count.EqualTo (moved.Source.Count), \"Source and Destination UID counts do not match\");\n\t\t\t\tAssert.That (expunged, Is.EqualTo (21), \"Expunged event\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"CountChanged event\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateUidExpungeCommands (bool disableUidPlus)\n\t\t{\n\t\t\tvar commands = new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 SELECT INBOX (CONDSTORE)\\r\\n\", \"gmail.select-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 UID SEARCH RETURN (ALL) ALL\\r\\n\", \"gmail.search.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 UID STORE 1:3,5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK)\n\t\t\t};\n\t\t\tif (!disableUidPlus) {\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000008 UID EXPUNGE 1:3\\r\\n\", \"gmail.expunge.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000009 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\t\t\t} else {\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000008 UID SEARCH RETURN (ALL) DELETED NOT UID 1:3\\r\\n\", \"gmail.search-deleted-not-1-3.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000009 UID STORE 5,7:9,11:14,26:29,31,34,41:43,50 -FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000010 EXPUNGE\\r\\n\", \"gmail.expunge.txt\"));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000011 UID STORE 5,7:9,11:14,26:29,31,34,41:43,50 +FLAGS.SILENT (\\\\Deleted)\\r\\n\", ImapReplayCommandResponse.OK));\n\t\t\t\tcommands.Add (new ImapReplayCommand (\"A00000012 LOGOUT\\r\\n\", \"gmail.logout.txt\"));\n\t\t\t}\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestUidExpunge\")]\n\t\t[TestCase (true, TestName = \"TestUidExpungeDisableUidPlus\")]\n\t\tpublic void TestUidExpunge (bool disableUidPlus)\n\t\t{\n\t\t\tvar commands = CreateUidExpungeCommands (disableUidPlus);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tint changed = 0, expunged = 0;\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tinbox.Open (FolderAccess.ReadWrite);\n\n\t\t\t\tinbox.MessageExpunged += (o, e) => { expunged++; Assert.That (e.Index, Is.EqualTo (0), \"Expunged event message index\"); };\n\t\t\t\tinbox.CountChanged += (o, e) => { changed++; };\n\n\t\t\t\tvar uids = inbox.Search (SearchQuery.All);\n\t\t\t\tinbox.AddFlags (uids, MessageFlags.Deleted, true);\n\n\t\t\t\tif (disableUidPlus)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.UidPlus;\n\n\t\t\t\tuids = new UniqueIdRange (0, 1, 3);\n\t\t\t\tinbox.Expunge (uids);\n\n\t\t\t\tAssert.That (expunged, Is.EqualTo (3), \"Unexpected number of Expunged events\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"Unexpected number of CountChanged events\");\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (18), \"Count\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestUidExpungeAsync\")]\n\t\t[TestCase (true, TestName = \"TestUidExpungeDisableUidPlusAsync\")]\n\t\tpublic async Task TestUidExpungeAsync (bool disableUidPlus)\n\t\t{\n\t\t\tvar commands = CreateUidExpungeCommands (disableUidPlus);\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tint changed = 0, expunged = 0;\n\t\t\t\tvar inbox = client.Inbox;\n\n\t\t\t\tawait inbox.OpenAsync (FolderAccess.ReadWrite);\n\n\t\t\t\tinbox.MessageExpunged += (o, e) => { expunged++; Assert.That (e.Index, Is.EqualTo (0), \"Expunged event message index\"); };\n\t\t\t\tinbox.CountChanged += (o, e) => { changed++; };\n\n\t\t\t\tvar uids = await inbox.SearchAsync (SearchQuery.All);\n\t\t\t\tawait inbox.AddFlagsAsync (uids, MessageFlags.Deleted, true);\n\n\t\t\t\tif (disableUidPlus)\n\t\t\t\t\tclient.Capabilities &= ~ImapCapabilities.UidPlus;\n\n\t\t\t\tuids = new UniqueIdRange (0, 1, 3);\n\t\t\t\tawait inbox.ExpungeAsync (uids);\n\n\t\t\t\tAssert.That (expunged, Is.EqualTo (3), \"Unexpected number of Expunged events\");\n\t\t\t\tAssert.That (changed, Is.EqualTo (1), \"Unexpected number of CountChanged events\");\n\t\t\t\tAssert.That (inbox, Has.Count.EqualTo (18), \"Count\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateExplicitCountChangedCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\t// INBOX has 1 message present in this test\n\t\t\t\tnew ImapReplayCommand (\"A00000005 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.count.examine.txt\"),\n\t\t\t\t// The next response simulates an EXPUNGE notification followed by an explicit EXISTS notification.\n\t\t\t\tnew ImapReplayCommand (\"A00000006 NOOP\\r\\n\", $\"gmail.count-explicit.noop.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExplicitCountChanged ()\n\t\t{\n\t\t\tvar commands = CreateExplicitCountChangedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tint messageExpungedEmitted = 0;\n\t\t\t\tint messageExpungedIndex = -1;\n\t\t\t\tint messageExpungedCount = -1;\n\t\t\t\tint countChangedEmitted = 0;\n\t\t\t\tint countChangedValue = -1;\n\n\t\t\t\tclient.Inbox.CountChanged += delegate {\n\t\t\t\t\tcountChangedValue = client.Inbox.Count;\n\t\t\t\t\tcountChangedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tclient.Inbox.MessageExpunged += delegate (object sender, MessageEventArgs e) {\n\t\t\t\t\tmessageExpungedCount = client.Inbox.Count;\n\t\t\t\t\tmessageExpungedIndex = e.Index;\n\t\t\t\t\tmessageExpungedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tclient.NoOp ();\n\n\t\t\t\tAssert.That (client.Inbox, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\tAssert.That (countChangedEmitted, Is.EqualTo (1), \"CountChanged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (countChangedValue, Is.EqualTo (1), \"Count was not correct inside of the CountChanged event handler\");\n\n\t\t\t\tAssert.That (messageExpungedIndex, Is.EqualTo (0), \"The index of the expected message did not match\");\n\t\t\t\tAssert.That (messageExpungedEmitted, Is.EqualTo (1), \"MessageExpunged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (messageExpungedCount, Is.EqualTo (0), \"Count was not correct inside of the MessageExpunged event handler\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExplicitCountChangedAsync ()\n\t\t{\n\t\t\tvar commands = CreateExplicitCountChangedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tint messageExpungedEmitted = 0;\n\t\t\t\tint messageExpungedIndex = -1;\n\t\t\t\tint messageExpungedCount = -1;\n\t\t\t\tint countChangedEmitted = 0;\n\t\t\t\tint countChangedValue = -1;\n\n\t\t\t\tclient.Inbox.CountChanged += delegate {\n\t\t\t\t\tcountChangedValue = client.Inbox.Count;\n\t\t\t\t\tcountChangedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tclient.Inbox.MessageExpunged += delegate (object sender, MessageEventArgs e) {\n\t\t\t\t\tmessageExpungedCount = client.Inbox.Count;\n\t\t\t\t\tmessageExpungedIndex = e.Index;\n\t\t\t\t\tmessageExpungedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tawait client.NoOpAsync ();\n\n\t\t\t\tAssert.That (client.Inbox, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\tAssert.That (countChangedEmitted, Is.EqualTo (1), \"CountChanged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (countChangedValue, Is.EqualTo (1), \"Count was not correct inside of the CountChanged event handler\");\n\n\t\t\t\tAssert.That (messageExpungedIndex, Is.EqualTo (0), \"The index of the expected message did not match\");\n\t\t\t\tAssert.That (messageExpungedEmitted, Is.EqualTo (1), \"MessageExpunged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (messageExpungedCount, Is.EqualTo (0), \"Count was not correct inside of the MessageExpunged event handler\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateImplicitCountChangedCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\t// INBOX has 1 message present in this test\n\t\t\t\tnew ImapReplayCommand (\"A00000005 EXAMINE INBOX (CONDSTORE)\\r\\n\", \"gmail.count.examine.txt\"),\n\t\t\t\t// The next response simulates an EXPUNGE notification without an explicit EXISTS notification.\n\t\t\t\tnew ImapReplayCommand (\"A00000006 NOOP\\r\\n\", $\"gmail.count-implicit.noop.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestImplicitCountChanged ()\n\t\t{\n\t\t\tvar commands = CreateImplicitCountChangedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Inbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tint messageExpungedEmitted = 0;\n\t\t\t\tint messageExpungedIndex = -1;\n\t\t\t\tint messageExpungedCount = -1;\n\t\t\t\tint countChangedEmitted = 0;\n\t\t\t\tint countChangedValue = -1;\n\n\t\t\t\tclient.Inbox.CountChanged += delegate {\n\t\t\t\t\tcountChangedValue = client.Inbox.Count;\n\t\t\t\t\tcountChangedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tclient.Inbox.MessageExpunged += delegate (object sender, MessageEventArgs e) {\n\t\t\t\t\tmessageExpungedCount = client.Inbox.Count;\n\t\t\t\t\tmessageExpungedIndex = e.Index;\n\t\t\t\t\tmessageExpungedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tclient.NoOp ();\n\n\t\t\t\tAssert.That (client.Inbox, Has.Count.EqualTo (0), \"Count\");\n\t\t\t\tAssert.That (countChangedEmitted, Is.EqualTo (1), \"CountChanged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (countChangedValue, Is.EqualTo (0), \"Count was not correct inside of the CountChanged event handler\");\n\n\t\t\t\tAssert.That (messageExpungedIndex, Is.EqualTo (0), \"The index of the expected message did not match\");\n\t\t\t\tAssert.That (messageExpungedEmitted, Is.EqualTo (1), \"MessageExpunged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (messageExpungedCount, Is.EqualTo (0), \"Count was not correct inside of the MessageExpunged event handler\");\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestImplicitCountChangedAsync ()\n\t\t{\n\t\t\tvar commands = CreateImplicitCountChangedCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t\tint messageExpungedEmitted = 0;\n\t\t\t\tint messageExpungedIndex = -1;\n\t\t\t\tint messageExpungedCount = -1;\n\t\t\t\tint countChangedEmitted = 0;\n\t\t\t\tint countChangedValue = -1;\n\n\t\t\t\tclient.Inbox.CountChanged += delegate {\n\t\t\t\t\tcountChangedValue = client.Inbox.Count;\n\t\t\t\t\tcountChangedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tclient.Inbox.MessageExpunged += delegate (object sender, MessageEventArgs e) {\n\t\t\t\t\tmessageExpungedCount = client.Inbox.Count;\n\t\t\t\t\tmessageExpungedIndex = e.Index;\n\t\t\t\t\tmessageExpungedEmitted++;\n\t\t\t\t};\n\n\t\t\t\tawait client.NoOpAsync ();\n\n\t\t\t\tAssert.That (client.Inbox, Has.Count.EqualTo (0), \"Count\");\n\t\t\t\tAssert.That (countChangedEmitted, Is.EqualTo (1), \"CountChanged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (countChangedValue, Is.EqualTo (0), \"Count was not correct inside of the CountChanged event handler\");\n\n\t\t\t\tAssert.That (messageExpungedIndex, Is.EqualTo (0), \"The index of the expected message did not match\");\n\t\t\t\tAssert.That (messageExpungedEmitted, Is.EqualTo (1), \"MessageExpunged was not emitted the expected number of times\");\n\t\t\t\tAssert.That (messageExpungedCount, Is.EqualTo (0), \"Count was not correct inside of the MessageExpunged event handler\");\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertFolder (IMailFolder folder, string fullName, FolderAttributes attributes, bool subscribed, ulong highestmodseq, int count, int recent, uint uidnext, uint validity, int unread)\n\t\t{\n\t\t\tif (subscribed)\n\t\t\t\tattributes |= FolderAttributes.Subscribed;\n\n\t\t\tAssert.That (folder.FullName, Is.EqualTo (fullName), \"FullName\");\n\t\t\tAssert.That (folder.Attributes, Is.EqualTo (attributes), \"Attributes\");\n\t\t\tAssert.That (folder.IsSubscribed, Is.EqualTo (subscribed), \"IsSubscribed\");\n\t\t\tAssert.That (folder.HighestModSeq, Is.EqualTo (highestmodseq), \"HighestModSeq\");\n\t\t\tAssert.That (folder, Has.Count.EqualTo (count), \"Count\");\n\t\t\tAssert.That (folder.Recent, Is.EqualTo (recent), \"Recent\");\n\t\t\tAssert.That (folder.Unread, Is.EqualTo (unread), \"Unread\");\n\t\t\tAssert.That (folder.UidNext.HasValue ? folder.UidNext.Value.Id : (uint)0, Is.EqualTo (uidnext), \"UidNext\");\n\t\t\tAssert.That (folder.UidValidity, Is.EqualTo (validity), \"UidValidity\");\n\t\t}\n\n\t\tstatic List<ImapReplayCommand> CreateGetSubfoldersWithStatusItemsCommands ()\n\t\t{\n\t\t\treturn new List<ImapReplayCommand> {\n\t\t\t\tnew ImapReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000000 CAPABILITY\\r\\n\", \"gmail.capability.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000001 AUTHENTICATE PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.authenticate.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000002 NAMESPACE\\r\\n\", \"gmail.namespace.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000003 LIST \\\"\\\" \\\"INBOX\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-inbox.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000004 XLIST \\\"\\\" \\\"*\\\"\\r\\n\", \"gmail.xlist.txt\"),\n\t\t\t\t//new ImapReplayCommand (\"A00000005 LIST \\\"\\\" \\\"[Gmail]\\\"\\r\\n\", \"gmail.list-gmail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000005 LIST (SUBSCRIBED) \\\"\\\" \\\"[Gmail]/%\\\" RETURN (CHILDREN STATUS (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ))\\r\\n\", \"gmail.list-gmail-subfolders.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000006 LIST \\\"\\\" \\\"[Gmail]/%\\\" RETURN (SUBSCRIBED CHILDREN)\\r\\n\", \"gmail.list-gmail-subfolders-no-status.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000007 STATUS \\\"[Gmail]/All Mail\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-all-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000008 STATUS \\\"[Gmail]/Drafts\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-drafts.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000009 STATUS \\\"[Gmail]/Important\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-important.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000010 STATUS \\\"[Gmail]/Sent Mail\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-all-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000011 STATUS \\\"[Gmail]/Spam\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-drafts.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000012 STATUS \\\"[Gmail]/Starred\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-important.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000013 STATUS \\\"[Gmail]/Trash\\\" (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN HIGHESTMODSEQ)\\r\\n\", \"gmail.status-all-mail.txt\"),\n\t\t\t\tnew ImapReplayCommand (\"A00000014 LOGOUT\\r\\n\", \"gmail.logout.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSubfoldersWithStatusItems ()\n\t\t{\n\t\t\tvar commands = CreateGetSubfoldersWithStatusItemsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new ImapReplayStream (commands, false), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar gmail = personal.GetSubfolder (\"[Gmail]\");\n\t\t\t\tvar all = StatusItems.Count | StatusItems.HighestModSeq | StatusItems.Recent | StatusItems.UidNext | StatusItems.UidValidity | StatusItems.Unread;\n\t\t\t\tvar folders = gmail.GetSubfolders (all, true);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (7), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (folders[1], \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\t// Now make the same query but disable LIST-STATUS\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListStatus;\n\t\t\t\tfolders = gmail.GetSubfolders (all, false);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (7), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (folders[1], \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important | FolderAttributes.Marked, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent | FolderAttributes.Unmarked, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important | FolderAttributes.Marked, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent | FolderAttributes.Unmarked, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetSubfoldersWithStatusItemsAsync ()\n\t\t{\n\t\t\tvar commands = CreateGetSubfoldersWithStatusItemsCommands ();\n\n\t\t\tusing (var client = new ImapClient () { TagPrefix = 'A' }) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new ImapReplayStream (commands, true), \"localhost\", 143, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tvar personal = client.GetFolder (client.PersonalNamespaces[0]);\n\t\t\t\tvar gmail = await personal.GetSubfolderAsync (\"[Gmail]\");\n\t\t\t\tvar all = StatusItems.Count | StatusItems.HighestModSeq | StatusItems.Recent | StatusItems.UidNext | StatusItems.UidValidity | StatusItems.Unread;\n\t\t\t\tvar folders = await gmail.GetSubfoldersAsync (all, true);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (7), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (folders[1], \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\t// Now make the same query but disable LIST-STATUS\n\t\t\t\tclient.Capabilities &= ~ImapCapabilities.ListStatus;\n\t\t\t\tfolders = await gmail.GetSubfoldersAsync (all, false);\n\t\t\t\tAssert.That (folders, Has.Count.EqualTo (7), \"Unexpected folder count.\");\n\n\t\t\t\tAssertFolder (folders[0], \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (folders[1], \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (folders[2], \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important | FolderAttributes.Marked, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (folders[3], \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent | FolderAttributes.Unmarked, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (folders[4], \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (folders[5], \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (folders[6], \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.All), \"[Gmail]/All Mail\", FolderAttributes.HasNoChildren | FolderAttributes.All, true, 41234, 67, 0, 1210, 11, 3);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Drafts), \"[Gmail]/Drafts\", FolderAttributes.HasNoChildren | FolderAttributes.Drafts, true, 41234, 0, 0, 1, 6, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Important), \"[Gmail]/Important\", FolderAttributes.HasNoChildren | FolderAttributes.Important | FolderAttributes.Marked, true, 41234, 58, 0, 307, 9, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Sent), \"[Gmail]/Sent Mail\", FolderAttributes.HasNoChildren | FolderAttributes.Sent | FolderAttributes.Unmarked, true, 41234, 4, 0, 7, 5, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Junk), \"[Gmail]/Spam\", FolderAttributes.HasNoChildren | FolderAttributes.Junk, true, 41234, 0, 0, 1, 3, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Flagged), \"[Gmail]/Starred\", FolderAttributes.HasNoChildren | FolderAttributes.Flagged, true, 41234, 1, 0, 7, 4, 0);\n\t\t\t\tAssertFolder (client.GetFolder (SpecialFolder.Trash), \"[Gmail]/Trash\", FolderAttributes.HasNoChildren | FolderAttributes.Trash, true, 41234, 0, 0, 1143, 2, 0);\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapImplementationTests.cs",
    "content": "﻿//\n// ImapImplementationTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapImplementationTests\n\t{\n\t\t[Test]\n\t\tpublic void TestImapImplementationProperties ()\n\t\t{\n\t\t\tvar impl = new ImapImplementation ();\n\n\t\t\timpl.Address = \"50 Church St.\";\n\t\t\tAssert.That (impl.Address, Is.EqualTo (\"50 Church St.\"), \"Address\");\n\n\t\t\timpl.Arguments = \"-p -q\";\n\t\t\tAssert.That (impl.Arguments, Is.EqualTo (\"-p -q\"), \"Arguments\");\n\n\t\t\timpl.Command = \"mono ./imap.exe\";\n\t\t\tAssert.That (impl.Command, Is.EqualTo (\"mono ./imap.exe\"), \"Command\");\n\n\t\t\timpl.Environment = \"MONO_GC=sgen\";\n\t\t\tAssert.That (impl.Environment, Is.EqualTo (\"MONO_GC=sgen\"), \"Environment\");\n\n\t\t\timpl.Name = \"MailKit\";\n\t\t\tAssert.That (impl.Name, Is.EqualTo (\"MailKit\"), \"Name\");\n\n\t\t\timpl.OS = \"Windows\";\n\t\t\tAssert.That (impl.OS, Is.EqualTo (\"Windows\"), \"OS\");\n\n\t\t\timpl.OSVersion = \"6.1\";\n\t\t\tAssert.That (impl.OSVersion, Is.EqualTo (\"6.1\"), \"OSVersion\");\n\n\t\t\timpl.ReleaseDate = \"${Date}\";\n\t\t\tAssert.That (impl.ReleaseDate, Is.EqualTo (\"${Date}\"), \"ReleaseDate\");\n\n\t\t\timpl.SupportUrl = \"https://github.com/jstedfast/MailKit\";\n\t\t\tAssert.That (impl.SupportUrl, Is.EqualTo (\"https://github.com/jstedfast/MailKit\"), \"SupportUrl\");\n\n\t\t\timpl.Vendor = \"Microsoft\";\n\t\t\tAssert.That (impl.Vendor, Is.EqualTo (\"Microsoft\"), \"Vendor\");\n\n\t\t\timpl.Version = \"2.0.7\";\n\t\t\tAssert.That (impl.Version, Is.EqualTo (\"2.0.7\"), \"Version\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapReplayStream.cs",
    "content": "﻿//\n// ImapReplayStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MimeKit.IO;\nusing MimeKit.IO.Filters;\n\nusing MailKit;\n\nnamespace UnitTests.Net.Imap {\n\tenum ImapReplayCommandResponse {\n\t\tOK,\n\t\tNO,\n\t\tBAD,\n\t\tPlus\n\t}\n\n\tclass ImapReplayFilter : MimeFilterBase\n\t{\n\t\treadonly byte[] variable;\n\t\treadonly byte[] value;\n\n\t\tpublic ImapReplayFilter (string variable, string value)\n\t\t{\n\t\t\tthis.variable = Encoding.ASCII.GetBytes (variable);\n\t\t\tthis.value = Encoding.ASCII.GetBytes (value);\n\t\t}\n\n\t\tprotected override byte[] Filter (byte[] input, int startIndex, int length, out int outputIndex, out int outputLength, bool flush)\n\t\t{\n\t\t\tint endIndex = startIndex + length;\n\t\t\tint copyIndex = startIndex;\n\t\t\tint copyLength = 0;\n\n\t\t\tfor (int index = startIndex; index < endIndex - variable.Length; index++) {\n\t\t\t\tvar matched = true;\n\n\t\t\t\tfor (int i = 0; i < variable.Length; i++) {\n\t\t\t\t\tif (input[index + i] != variable[i]) {\n\t\t\t\t\t\tmatched = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tint n = index - copyIndex;\n\n\t\t\t\tEnsureOutputSize (copyLength + n + value.Length, true);\n\t\t\t\tBuffer.BlockCopy (input, copyIndex, OutputBuffer, copyLength, n);\n\t\t\t\tindex += variable.Length;\n\t\t\t\tcopyIndex = index;\n\t\t\t\tcopyLength += n;\n\n\t\t\t\tBuffer.BlockCopy (value, 0, OutputBuffer, copyLength, value.Length);\n\t\t\t\tcopyLength += value.Length;\n\t\t\t}\n\n\t\t\tif (flush) {\n\t\t\t\tif (copyLength == 0) {\n\t\t\t\t\toutputIndex = startIndex;\n\t\t\t\t\toutputLength = length;\n\n\t\t\t\t\treturn input;\n\t\t\t\t}\n\n\t\t\t\tint n = endIndex - copyIndex;\n\n\t\t\t\tEnsureOutputSize (copyLength + n, true);\n\t\t\t\tBuffer.BlockCopy (input, copyIndex, OutputBuffer, copyLength, n);\n\t\t\t\tcopyLength += n;\n\n\t\t\t\toutputLength = copyLength;\n\t\t\t\toutputIndex = 0;\n\n\t\t\t\treturn OutputBuffer;\n\t\t\t} else {\n\t\t\t\tint n = Math.Min (variable.Length, length);\n\n\t\t\t\tSaveRemainingInput (input, endIndex - n, n);\n\n\t\t\t\tif (copyLength == 0) {\n\t\t\t\t\toutputLength = length - n;\n\t\t\t\t\toutputIndex = startIndex;\n\n\t\t\t\t\treturn input;\n\t\t\t\t}\n\n\t\t\t\tendIndex -= n;\n\n\t\t\t\tif (endIndex > copyIndex) {\n\t\t\t\t\tn = endIndex - copyIndex;\n\t\t\t\t\tEnsureOutputSize (copyLength + n, true);\n\t\t\t\t\tBuffer.BlockCopy (input, copyIndex, OutputBuffer, copyLength, n);\n\t\t\t\t\tcopyLength += n;\n\t\t\t\t}\n\n\t\t\t\toutputLength = copyLength;\n\t\t\t\toutputIndex = 0;\n\n\t\t\t\treturn OutputBuffer;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Reset ()\n\t\t{\n\t\t\tbase.Reset ();\n\t\t}\n\t}\n\n\tclass ImapReplayCommand\n\t{\n\t\tstatic readonly Encoding Latin1 = Encoding.GetEncoding (28591);\n\n\t\tpublic Encoding Encoding { get; private set; }\n\t\tpublic byte[] CommandBuffer { get; private set; }\n\t\tpublic string Command { get; private set; }\n\t\tpublic byte[] Response { get; private set; }\n\t\tpublic bool Compressed { get; private set; }\n\n\t\tpublic ImapReplayCommand (string command, byte[] response, bool compressed = false) : this (Latin1, command, response, compressed)\n\t\t{\n\t\t}\n\n\t\tpublic ImapReplayCommand (Encoding encoding, string command, byte[] response, bool compressed = false)\n\t\t{\n\t\t\tCommandBuffer = encoding.GetBytes (command);\n\t\t\tCompressed = compressed;\n\t\t\tResponse = response;\n\t\t\tEncoding = encoding;\n\t\t\tCommand = command;\n\n\t\t\tif (compressed) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tusing (var compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tcompress.Write (CommandBuffer, 0, CommandBuffer.Length);\n\t\t\t\t\t\tcompress.Flush ();\n\n\t\t\t\t\t\tCommandBuffer = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tusing (Stream compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tcompress.Write (response, 0, response.Length);\n\t\t\t\t\t\tcompress.Flush ();\n\n\t\t\t\t\t\tResponse = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic ImapReplayCommand (string command, string resource, bool compressed = false) : this (Latin1, command, resource, compressed)\n\t\t{\n\t\t}\n\n\t\tpublic ImapReplayCommand (Encoding encoding, string command, string resource, bool compressed = false)\n\t\t{\n\t\t\tstring tag = null;\n\n\t\t\tCommandBuffer = encoding.GetBytes (command);\n\t\t\tCompressed = compressed;\n\t\t\tEncoding = encoding;\n\t\t\tCommand = command;\n\n\t\t\tif (command.StartsWith (\"A00000\", StringComparison.Ordinal))\n\t\t\t\ttag = command.Substring (0, 9);\n\n\t\t\tusing (var stream = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + resource)) {\n\t\t\t\tusing (var memory = new MemoryBlockStream ()) {\n\t\t\t\t\tusing (Stream compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tusing (var filtered = new FilteredStream (compressed ? compress : memory)) {\n\t\t\t\t\t\t\tif (tag != null)\n\t\t\t\t\t\t\t\tfiltered.Add (new ImapReplayFilter (\"A########\", tag));\n\n\t\t\t\t\t\t\tfiltered.Add (new Unix2DosFilter ());\n\t\t\t\t\t\t\tstream.CopyTo (filtered, 4096);\n\t\t\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tResponse = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (compressed) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tusing (var compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tcompress.Write (CommandBuffer, 0, CommandBuffer.Length);\n\t\t\t\t\t\tcompress.Flush ();\n\n\t\t\t\t\t\tCommandBuffer = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic ImapReplayCommand (string tag, string command, string resource, bool compressed = false) : this (Latin1, tag, command, resource, compressed)\n\t\t{\n\t\t}\n\n\t\tpublic ImapReplayCommand (Encoding encoding, string tag, string command, string resource, bool compressed = false)\n\t\t{\n\t\t\tCommandBuffer = encoding.GetBytes (command);\n\t\t\tCompressed = compressed;\n\t\t\tEncoding = encoding;\n\t\t\tCommand = command;\n\n\t\t\tusing (var stream = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Imap.Resources.\" + resource)) {\n\t\t\t\tusing (var memory = new MemoryBlockStream ()) {\n\t\t\t\t\tusing (Stream compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tusing (var filtered = new FilteredStream (compressed ? compress : memory)) {\n\t\t\t\t\t\t\tfiltered.Add (new ImapReplayFilter (\"A########\", tag));\n\t\t\t\t\t\t\tfiltered.Add (new Unix2DosFilter ());\n\t\t\t\t\t\t\tstream.CopyTo (filtered, 4096);\n\t\t\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tResponse = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (compressed) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tusing (var compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tcompress.Write (CommandBuffer, 0, CommandBuffer.Length);\n\t\t\t\t\t\tcompress.Flush ();\n\n\t\t\t\t\t\tCommandBuffer = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic ImapReplayCommand (string command, ImapReplayCommandResponse response, bool compressed = false) : this (Latin1, command, response, compressed)\n\t\t{\n\t\t}\n\n\t\tpublic ImapReplayCommand (Encoding encoding, string command, ImapReplayCommandResponse response, bool compressed = false)\n\t\t{\n\t\t\tCommandBuffer = encoding.GetBytes (command);\n\t\t\tCompressed = compressed;\n\t\t\tEncoding = encoding;\n\t\t\tCommand = command;\n\n\t\t\tstring text;\n\n\t\t\tif (response == ImapReplayCommandResponse.Plus) {\n\t\t\t\ttext = \"+\\r\\n\";\n\t\t\t} else {\n\t\t\t\tvar tokens = command.Split (' ');\n\t\t\t\tvar cmd = (tokens [1] == \"UID\" ? tokens [2] : tokens [1]).TrimEnd ();\n\t\t\t\tvar tag = tokens [0];\n\n\t\t\t\ttext = string.Format (\"{0} {1} {2} {3}\\r\\n\", tag, response, cmd, response == ImapReplayCommandResponse.OK ? \"completed\" : \"failed\");\n\t\t\t}\n\n\t\t\tif (compressed) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tusing (var compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tvar buffer = encoding.GetBytes (text);\n\n\t\t\t\t\t\tcompress.Write (buffer, 0, buffer.Length);\n\t\t\t\t\t\tcompress.Flush ();\n\n\t\t\t\t\t\tResponse = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tusing (var compress = new CompressedStream (memory)) {\n\t\t\t\t\t\tcompress.Write (CommandBuffer, 0, CommandBuffer.Length);\n\t\t\t\t\t\tcompress.Flush ();\n\n\t\t\t\t\t\tCommandBuffer = memory.ToArray ();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tResponse = encoding.GetBytes (text);\n\t\t\t}\n\t\t}\n\t}\n\n\tenum ImapReplayState {\n\t\tSendResponse,\n\t\tWaitForCommand,\n\t}\n\n\tclass ImapReplayStream : Stream\n\t{\n\t\treadonly MemoryStream sent = new MemoryStream ();\n\t\treadonly IList<ImapReplayCommand> commands;\n\t\treadonly bool testUnixFormat;\n\t\treadonly bool asyncIO;\n\t\tImapReplayState state;\n\t\tint timeout = 100000;\n\t\tStream stream;\n\t\tbool disposed;\n\t\tbool isAsync;\n\t\tbool done;\n\t\tint index;\n\n\t\tpublic ImapReplayStream (IList<ImapReplayCommand> commands, bool asyncIO, bool testUnixFormat = false)\n\t\t{\n\t\t\tstream = GetResponseStream (commands[0]);\n\t\t\tstate = ImapReplayState.SendResponse;\n\t\t\tthis.testUnixFormat = testUnixFormat;\n\t\t\tthis.commands = commands;\n\t\t\tthis.asyncIO = asyncIO;\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (\"ImapReplayStream\");\n\t\t}\n\n\t\t#region implemented abstract members of Stream\n\n\t\tpublic override bool CanRead {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanWrite {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override long Length {\n\t\t\tget { return stream.Length; }\n\t\t}\n\n\t\tpublic override long Position {\n\t\t\tget { return stream.Position; }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return timeout; }\n\t\t\tset { timeout = value; }\n\t\t}\n\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return timeout; }\n\t\t\tset { timeout = value; }\n\t\t}\n\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (asyncIO) {\n\t\t\t\tAssert.That (isAsync, Is.True, \"Trying to Read in an async unit test.\");\n\t\t\t} else {\n\t\t\t\tAssert.That (isAsync, Is.False, \"Trying to ReadAsync in a non-async unit test.\");\n\t\t\t}\n\n\t\t\tif (state != ImapReplayState.SendResponse) {\n\t\t\t\tif (index >= commands.Count)\n\t\t\t\t\treturn 0;\n\n\t\t\t\tvar command = GetSentCommand ();\n\n\t\t\t\tAssert.That (state, Is.EqualTo (ImapReplayState.SendResponse), $\"Trying to read before command received. Sent so far: {command}\");\n\t\t\t}\n\t\t\tAssert.That (stream, Is.Not.Null, \"Trying to read when no data available.\");\n\n\t\t\tint nread = stream.Read (buffer, offset, count);\n\n\t\t\tif (stream.Position == stream.Length) {\n\t\t\t\tstate = ImapReplayState.WaitForCommand;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn nread;\n\t\t}\n\n\t\tpublic override Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tisAsync = true;\n\n\t\t\ttry {\n\t\t\t\treturn Task.FromResult (Read (buffer, offset, count));\n\t\t\t} finally {\n\t\t\t\tisAsync = false;\n\t\t\t}\n\t\t}\n\n\t\tStream GetResponseStream (ImapReplayCommand command)\n\t\t{\n\t\t\tMemoryStream memory;\n\n\t\t\tif (testUnixFormat && !command.Compressed) {\n\t\t\t\tmemory = new MemoryStream ();\n\n\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\tfiltered.Add (new Dos2UnixFilter ());\n\t\t\t\t\tfiltered.Write (command.Response, 0, command.Response.Length);\n\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t}\n\n\t\t\t\tmemory.Position = 0;\n\t\t\t} else {\n\t\t\t\tmemory = new MemoryStream (command.Response, false);\n\t\t\t}\n\n\t\t\treturn memory;\n\t\t}\n\n\t\tstring GetSentCommand ()\n\t\t{\n\t\t\tif (!commands[index].Compressed)\n\t\t\t\treturn commands[index].Encoding.GetString (sent.GetBuffer (), 0, (int) sent.Length);\n\n\t\t\tusing (var memory = new MemoryStream (sent.GetBuffer (), 0, (int) sent.Length)) {\n\t\t\t\tusing (var compressed = new CompressedStream (memory)) {\n\t\t\t\t\tusing (var decompressed = new MemoryStream ()) {\n\t\t\t\t\t\tcompressed.CopyTo (decompressed, 4096);\n\n\t\t\t\t\t\treturn commands[index].Encoding.GetString (decompressed.GetBuffer (), 0, (int) decompressed.Length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (asyncIO) {\n\t\t\t\tif (count != 6 || Encoding.ASCII.GetString (buffer, offset, count) != \"DONE\\r\\n\")\n\t\t\t\t\tAssert.That (isAsync, Is.True, \"Trying to Write in an async unit test.\");\n\t\t\t\telse\n\t\t\t\t\tdone = true;\n\t\t\t} else {\n\t\t\t\tif (count != 6 || Encoding.ASCII.GetString (buffer, offset, count) != \"DONE\\r\\n\")\n\t\t\t\t\tAssert.That (isAsync, Is.False, \"Trying to WriteAsync in a non-async unit test.\");\n\t\t\t\telse\n\t\t\t\t\tdone = true;\n\t\t\t}\n\n\t\t\tAssert.That (state, Is.EqualTo (ImapReplayState.WaitForCommand), \"Trying to write when a command has already been given.\");\n\n\t\t\tsent.Write (buffer, offset, count);\n\n\t\t\tif (sent.Length >= commands[index].CommandBuffer.Length) {\n\t\t\t\tvar command = GetSentCommand ();\n\n\t\t\t\tAssert.That (command, Is.EqualTo (commands[index].Command), \"Commands did not match.\");\n\n\t\t\t\tstream?.Dispose ();\n\n\t\t\t\tstream = GetResponseStream (commands[index]);\n\t\t\t\tstate = ImapReplayState.SendResponse;\n\t\t\t\tsent.SetLength (0);\n\t\t\t}\n\t\t}\n\n\t\tpublic override Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tisAsync = true;\n\n\t\t\ttry {\n\t\t\t\tWrite (buffer, offset, count);\n\t\t\t\treturn Task.FromResult (true);\n\t\t\t} finally {\n\t\t\t\tisAsync = false;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tAssert.That (asyncIO && !done, Is.False, \"Trying to Flush in an async unit test.\");\n\t\t\tdone = false;\n\t\t}\n\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tAssert.That (asyncIO || done, Is.True, \"Trying to FlushAsync in a non-async unit test.\");\n\t\t\tdone = false;\n\n\t\t\treturn Task.FromResult (true);\n\t\t}\n\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t#endregion\n\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tstream?.Dispose ();\n\n\t\t\tbase.Dispose (disposing);\n\t\t\tdisposed = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapSearchQueryOptimizerTests.cs",
    "content": "﻿//\n// ImapSearchQueryOptimizerTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\nusing MailKit.Search;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapSearchQueryOptimizerTests\n\t{\n\t\treadonly ImapSearchQueryOptimizer optimizer = new ImapSearchQueryOptimizer ();\n\n\t\t[Test]\n\t\tpublic void TestReduceAnd ()\n\t\t{\n\t\t\tvar query = optimizer.Reduce (SearchQuery.And (SearchQuery.All, SearchQuery.Answered));\n\n\t\t\tAssert.That (query, Is.EqualTo (SearchQuery.Answered));\n\n\t\t\tquery = optimizer.Reduce (SearchQuery.And (SearchQuery.Answered, SearchQuery.All));\n\n\t\t\tAssert.That (query, Is.EqualTo (SearchQuery.Answered));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReduceOr ()\n\t\t{\n\t\t\tvar query = optimizer.Reduce (SearchQuery.Or (SearchQuery.All, SearchQuery.Answered));\n\n\t\t\tAssert.That (query, Is.EqualTo (SearchQuery.All));\n\n\t\t\tquery = optimizer.Reduce (SearchQuery.Or (SearchQuery.Answered, SearchQuery.All));\n\n\t\t\tAssert.That (query, Is.EqualTo (SearchQuery.All));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReduceNotFlags ()\n\t\t{\n\t\t\tforeach (MessageFlags flag in Enum.GetValues (typeof (MessageFlags))) {\n\t\t\t\tif (flag == MessageFlags.None || flag == MessageFlags.UserDefined)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar query = SearchQuery.Not (SearchQuery.HasFlags (flag));\n\t\t\t\tvar optimized = optimizer.Reduce (query);\n\n\t\t\t\tAssert.That (optimized.Term.ToString (), Is.EqualTo (\"Not\" + flag.ToString ()), $\"NOT ({flag})\");\n\n\t\t\t\tquery = SearchQuery.Not (SearchQuery.NotFlags (flag));\n\t\t\t\toptimized = optimizer.Reduce (query);\n\n\t\t\t\tAssert.That (optimized.Term.ToString (), Is.EqualTo (flag.ToString ()), $\"NOT ({query.Operand.Term})\");\n\n\t\t\t\tquery = SearchQuery.Not (SearchQuery.Not (SearchQuery.HasFlags (flag)));\n\t\t\t\toptimized = optimizer.Reduce (query);\n\n\t\t\t\tAssert.That (optimized.Term.ToString (), Is.EqualTo (flag.ToString ()), $\"NOT (NOT ({flag}))\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReduceNotFlag ()\n\t\t{\n\t\t\tvar query = SearchQuery.Not (SearchQuery.HasKeyword (\"custom\"));\n\t\t\tvar optimized = optimizer.Reduce (query);\n\n\t\t\tAssert.That (optimized.Term, Is.EqualTo (SearchTerm.NotKeyword), \"NOT KEYWORD\");\n\n\t\t\tquery = SearchQuery.Not (SearchQuery.NotKeyword (\"custom\"));\n\t\t\toptimized = optimizer.Reduce (query);\n\n\t\t\tAssert.That (optimized.Term, Is.EqualTo (SearchTerm.Keyword), $\"NOT NOTKEYWORD\");\n\n\t\t\tquery = SearchQuery.Not (SearchQuery.Not (SearchQuery.HasKeyword (\"custom\")));\n\t\t\toptimized = optimizer.Reduce (query);\n\n\t\t\tAssert.That (optimized.Term, Is.EqualTo (SearchTerm.Keyword), \"NOT NOT KEYWORD\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapStreamTests.cs",
    "content": "﻿//\n// ImapStreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Security.Cryptography;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapStreamTests\n\t{\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeek ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.That (stream.CanRead, Is.True);\n\t\t\t\tAssert.That (stream.CanWrite, Is.True);\n\t\t\t\tAssert.That (stream.CanSeek, Is.False);\n\t\t\t\tAssert.That (stream.CanTimeout, Is.True);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSetTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tstream.ReadTimeout = 5;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (5), \"ReadTimeout\");\n\n\t\t\t\tstream.WriteTimeout = 7;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (7), \"WriteTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRead ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"This is some random text...\\r\\n\");\n\t\t\t\tvar buffer = new byte[32];\n\t\t\t\tint n;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Read (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, 0, -1));\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tstream.LiteralLength = data.Length;\n\n\t\t\t\tstream.Mode = ImapStreamMode.Token;\n\t\t\t\tn = stream.Read (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (0), \"ImapStreamMode.Token\");\n\n\t\t\t\tstream.Mode = ImapStreamMode.Literal;\n\t\t\t\tn = stream.Read (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (data.Length), \"ImapStreamMode.Literal\");\n\t\t\t\tAssert.That (Encoding.ASCII.GetString (buffer, 0, n), Is.EqualTo (\"This is some random text...\\r\\n\"), \"Read\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadAsync ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"This is some random text...\\r\\n\");\n\t\t\t\tvar buffer = new byte[32];\n\t\t\t\tint n;\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await stream.ReadAsync (null, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, -1, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, 0, -1));\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tstream.LiteralLength = data.Length;\n\n\t\t\t\tstream.Mode = ImapStreamMode.Token;\n\t\t\t\tn = await stream.ReadAsync (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (0), \"ImapStreamMode.Token\");\n\n\t\t\t\tstream.Mode = ImapStreamMode.Literal;\n\t\t\t\tn = await stream.ReadAsync (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (data.Length), \"Read\");\n\t\t\t\tAssert.That (Encoding.ASCII.GetString (buffer, 0, n), Is.EqualTo (\"This is some random text...\\r\\n\"), \"Read\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadLine ()\n\t\t{\n\t\t\tvar line1 = \"This is a really long line...\" + new string ('.', 4096) + \"\\r\\n\";\n\t\t\tvar line2 = \"And this is another line...\\r\\n\";\n\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (line1 + line2);\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\t\twhile (!stream.ReadLine (builder, CancellationToken.None))\n\t\t\t\t\t\t;\n\n\t\t\t\t\tvar text = builder.ToString ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (line1), \"Line1\");\n\t\t\t\t}\n\n\t\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\t\twhile (!stream.ReadLine (builder, CancellationToken.None))\n\t\t\t\t\t\t;\n\n\t\t\t\t\tvar text = builder.ToString ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (line2), \"Line2\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadLineAsync ()\n\t\t{\n\t\t\tvar line1 = \"This is a really long line...\" + new string ('.', 4096) + \"\\r\\n\";\n\t\t\tvar line2 = \"And this is another line...\\r\\n\";\n\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (line1 + line2);\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\t\twhile (!await stream.ReadLineAsync (builder, CancellationToken.None))\n\t\t\t\t\t\t;\n\n\t\t\t\t\tvar text = builder.ToString ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (line1), \"Line1\");\n\t\t\t\t}\n\n\t\t\t\tusing (var builder = new ByteArrayBuilder (64)) {\n\t\t\t\t\twhile (!await stream.ReadLineAsync (builder, CancellationToken.None))\n\t\t\t\t\t\t;\n\n\t\t\t\t\tvar text = builder.ToString ();\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (line2), \"Line2\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadToken ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"* atom (\\\\flag \\\"qstring\\\" NIL Nil nil) [] \\r\\n\");\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.UngetToken (null));\n\n\t\t\t\tvar token = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Asterisk));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'*'\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Atom));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"atom\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.OpenParen));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'('\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Flag));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"\\\\flag\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.QString));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"\\\"qstring\\\"\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Nil));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"NIL\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Nil));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"Nil\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Nil));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"nil\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.CloseParen));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"')'\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.OpenBracket));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'['\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.CloseBracket));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"']'\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'\\\\n'\"));\n\n\t\t\t\tstream.UngetToken (token);\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'\\\\n'\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadTokenAsync ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"* atom (\\\\flag \\\"qstring\\\" NIL Nil nil) [] \\r\\n\");\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.UngetToken (null));\n\n\t\t\t\tvar token = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Asterisk));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'*'\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Atom));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"atom\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.OpenParen));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'('\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Flag));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"\\\\flag\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.QString));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"\\\"qstring\\\"\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Nil));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"NIL\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Nil));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"Nil\"));\n\n\t\t\t\ttoken = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Nil));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"nil\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.CloseParen));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"')'\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.OpenBracket));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'['\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.CloseBracket));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"']'\"));\n\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'\\\\n'\"));\n\n\t\t\t\tstream.UngetToken (token);\n\t\t\t\ttoken = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"'\\\\n'\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadContinuationToken ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"+ Please continue...\\r\\n\");\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tvar token = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Atom));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"+\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadContinuationTokenAsync ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"+ Please continue...\\r\\n\");\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tvar token = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Atom));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"+\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadBrokenLiteralToken ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"{4096+\" + new string (' ', 4096) + \"}\" + new string (' ', 4096) + \"\\r\\n\");\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tvar token = stream.ReadToken (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Literal));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"{4096}\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadBrokenLiteralTokenAsync ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"{4096+\" + new string (' ', 4096) + \"}\" + new string (' ', 4096) + \"\\r\\n\");\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tvar token = await stream.ReadTokenAsync (CancellationToken.None);\n\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Literal));\n\t\t\t\tAssert.That (token.ToString (), Is.EqualTo (\"{4096}\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSeek ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (0, SeekOrigin.Begin));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Position = 500);\n\t\t\t\tAssert.That (stream.Position, Is.EqualTo (0));\n\t\t\t\tAssert.That (stream.Length, Is.EqualTo (0));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSetLength ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (500));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWrite ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buf1k = RandomNumberGenerator.GetBytes (1024);\n\t\t\t\tvar buf4k = RandomNumberGenerator.GetBytes (4096);\n\t\t\t\tvar buf9k = RandomNumberGenerator.GetBytes (9216);\n\t\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\t\tvar buffer = new byte[8192];\n\t\t\t\tbyte[] mem;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Write (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, 0, -1));\n\n\t\t\t\t// Test #1: write less than 4K to make sure that ImapStream buffers it\n\t\t\t\tstream.Write (buf1k, 0, buf1k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (0), \"#1\");\n\n\t\t\t\t// Test #2: make sure that flushing the ImapStream flushes the entire buffer out to the network\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length), \"#2\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf1k[i]), $\"#2 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #3: write exactly 4K to make sure it passes through w/o the need to flush\n\t\t\t\tstream.Write (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf4k.Length), \"#3\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf4k[i]), $\"#3 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #4: write 1k and then write 4k, make sure that only 4k passes thru (last 1k gets buffered)\n\t\t\t\tstream.Write (buf1k, 0, buf1k.Length);\n\t\t\t\tstream.Write (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (4096), \"#4\");\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length + buf4k.Length), \"#4\");\n\t\t\t\tArray.Copy (buf1k, 0, buffer, 0, buf1k.Length);\n\t\t\t\tArray.Copy (buf4k, 0, buffer, buf1k.Length, buf4k.Length);\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length + buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buffer[i]), $\"#4 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #5: write 9k and make sure only the first 8k goes thru (last 1k gets buffered)\n\t\t\t\tstream.Write (buf9k, 0, buf9k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (8192), \"#5\");\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf9k.Length), \"#5\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf9k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf9k[i]), $\"#5 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestWriteAsync ()\n\t\t{\n\t\t\tusing (var stream = new ImapStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buf1k = RandomNumberGenerator.GetBytes (1024);\n\t\t\t\tvar buf4k = RandomNumberGenerator.GetBytes (4096);\n\t\t\t\tvar buf9k = RandomNumberGenerator.GetBytes (9216);\n\t\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\t\tvar buffer = new byte[8192];\n\t\t\t\tbyte[] mem;\n\n\t\t\t\t// Test #1: write less than 4K to make sure that ImapStream buffers it\n\t\t\t\tawait stream.WriteAsync (buf1k, 0, buf1k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (0), \"#1\");\n\n\t\t\t\t// Test #2: make sure that flushing the ImapStream flushes the entire buffer out to the network\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length), \"#2\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf1k[i]), $\"#2 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #3: write exactly 4K to make sure it passes through w/o the need to flush\n\t\t\t\tawait stream.WriteAsync (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf4k.Length), \"#3\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf4k[i]), $\"#3 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #4: write 1k and then write 4k, make sure that only 4k passes thru (last 1k gets buffered)\n\t\t\t\tawait stream.WriteAsync (buf1k, 0, buf1k.Length);\n\t\t\t\tawait stream.WriteAsync (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (4096), \"#4\");\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length + buf4k.Length), \"#4\");\n\t\t\t\tArray.Copy (buf1k, 0, buffer, 0, buf1k.Length);\n\t\t\t\tArray.Copy (buf4k, 0, buffer, buf1k.Length, buf4k.Length);\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length + buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buffer[i]), $\"#4 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #5: write 9k and make sure only the first 8k goes thru (last 1k gets buffered)\n\t\t\t\tawait stream.WriteAsync (buf9k, 0, buf9k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (8192), \"#5\");\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf9k.Length), \"#5\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf9k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf9k[i]), $\"#5 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/ImapUtilsTests.cs",
    "content": "﻿//\n// ImapBodyParsingTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing MimeKit.Utils;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace UnitTests.Net.Imap {\n\t[TestFixture]\n\tpublic class ImapUtilsTests : IDisposable\n\t{\n\t\treadonly ImapEngine engine = new ImapEngine (null);\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tengine.Dispose ();\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestResponseCodeCreation ()\n\t\t{\n\t\t\tforeach (ImapResponseCodeType type in Enum.GetValues (typeof (ImapResponseCodeType)))\n\t\t\t\tAssert.DoesNotThrow (() => ImapResponseCode.Create (type));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingSimpleIndexRange ()\n\t\t{\n\t\t\tint[] indexes = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };\n\t\t\tconst string expect = \"1:9\";\n\t\t\tstring actual;\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => ImapUtils.FormatIndexSet (null, new int[1]));\n\t\t\tAssert.Throws<ArgumentNullException> (() => ImapUtils.FormatIndexSet (engine, null));\n\t\t\tAssert.Throws<ArgumentException> (() => ImapUtils.FormatIndexSet (engine, Array.Empty<int> ()));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => ImapUtils.FormatIndexSet (engine, null, new int[1]));\n\n\t\t\tactual = ImapUtils.FormatIndexSet (engine, indexes);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a simple range of indexes failed.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingNonSequentialIndexes ()\n\t\t{\n\t\t\tint[] indexes = { 0, 2, 4, 6, 8 };\n\t\t\tconst string expect = \"1,3,5,7,9\";\n\t\t\tstring actual;\n\n\t\t\tactual = ImapUtils.FormatIndexSet (engine, indexes);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a non-sequential list of indexes.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingComplexSetOfIndexes ()\n\t\t{\n\t\t\tint[] indexes = { 0, 1, 2, 4, 5, 8, 9, 10, 11, 14, 18, 19 };\n\t\t\tconst string expect = \"1:3,5:6,9:12,15,19:20\";\n\t\t\tstring actual;\n\n\t\t\tactual = ImapUtils.FormatIndexSet (engine, indexes);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a complex list of indexes.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingReversedIndexes ()\n\t\t{\n\t\t\tint[] indexes = { 19, 18, 14, 11, 10, 9, 8, 5, 4, 2, 1, 0 };\n\t\t\tconst string expect = \"20:19,15,12:9,6:5,3:1\";\n\t\t\tstring actual;\n\n\t\t\tactual = ImapUtils.FormatIndexSet (engine, indexes);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a complex list of indexes.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingSimpleUidRange ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (4), new UniqueId (5), new UniqueId (6),\n\t\t\t\tnew UniqueId (7), new UniqueId (8), new UniqueId (9)\n\t\t\t};\n\t\t\tconst string expect = \"1:9\";\n\t\t\tstring actual;\n\n\t\t\tactual = UniqueIdSet.ToString (uids);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a simple range of uids failed.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingNonSequentialUids ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (3), new UniqueId (5),\n\t\t\t\tnew UniqueId (7), new UniqueId (9)\n\t\t\t};\n\t\t\tconst string expect = \"1,3,5,7,9\";\n\t\t\tstring actual;\n\n\t\t\tactual = UniqueIdSet.ToString (uids);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a non-sequential list of uids.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingComplexSetOfUids ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (5), new UniqueId (6), new UniqueId (9),\n\t\t\t\tnew UniqueId (10), new UniqueId (11), new UniqueId (12),\n\t\t\t\tnew UniqueId (15), new UniqueId (19), new UniqueId (20)\n\t\t\t};\n\t\t\tconst string expect = \"1:3,5:6,9:12,15,19:20\";\n\t\t\tstring actual;\n\n\t\t\tactual = UniqueIdSet.ToString (uids);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a complex list of uids.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormattingReversedUids ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (20), new UniqueId (19), new UniqueId (15),\n\t\t\t\tnew UniqueId (12), new UniqueId (11), new UniqueId (10),\n\t\t\t\tnew UniqueId (9), new UniqueId (6), new UniqueId (5),\n\t\t\t\tnew UniqueId (3), new UniqueId (2), new UniqueId (1)\n\t\t\t};\n\t\t\tconst string expect = \"20:19,15,12:9,6:5,3:1\";\n\t\t\tstring actual;\n\n\t\t\tactual = UniqueIdSet.ToString (uids);\n\t\t\tAssert.That (actual, Is.EqualTo (expect), \"Formatting a complex list of uids.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseInvalidInternalDates ()\n\t\t{\n\t\t\tvar internalDates = new string [] {\n\t\t\t\t\"00-Jan-0000 00:00:00 +0000\", // Note: This example is taken from an actual response from a Domino IMAP server. Likely represents an uninitialized value.\n\t\t\t\t\"98765432100-OCT-2018 13:41:57 -0400\",\n\t\t\t\t\"27-JAG-2018 13:41:57 -0400\",\n\t\t\t\t\"27-OCT-1909 13:41:57 -0400\",\n\t\t\t\t\"27-OCT-2018 33:41:57 -0400\",\n\t\t\t\t\"27-OCT-2018 13:411:57 -0400\",\n\t\t\t\t\"27-OCT-2018 13:41:577 -0400\",\n\t\t\t\t\"27-OCT-2018 13:41:577 -98765432100\",\n\t\t\t\t\"27-OCT-2018 13:41:57 -0400 XYZ\",\n\t\t\t};\n\n\t\t\tforeach (var internalDate in internalDates)\n\t\t\t\tAssert.That (ImapUtils.ParseInternalDate (internalDate), Is.EqualTo (DateTimeOffset.MinValue), internalDate);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCanonicalizeMailboxName ()\n\t\t{\n\t\t\tAssert.That (ImapUtils.CanonicalizeMailboxName (\"Name\", '.'), Is.EqualTo (\"Name\"), \"Name\");\n\t\t\tAssert.That (ImapUtils.CanonicalizeMailboxName (\"InbOx\", '.'), Is.EqualTo (\"INBOX\"), \"InbOx\");\n\t\t\tAssert.That (ImapUtils.CanonicalizeMailboxName (\"InboxSubfolder\", '.'), Is.EqualTo (\"InboxSubfolder\"), \"InboxSubfolder\");\n\t\t\tAssert.That (ImapUtils.CanonicalizeMailboxName (\"Inbox.Subfolder\", '.'), Is.EqualTo (\"INBOX.Subfolder\"), \"Inbox.Subfolder\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseLabelsListWithNIL ()\n\t\t{\n\t\t\tconst string text = \"(atom-label \\\\flag-label \\\"quoted-label\\\" NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<string> labels;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlabels = ImapUtils.ParseLabelsList (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing X-GM-LABELS failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseLabelsListWithNILAsync ()\n\t\t{\n\t\t\tconst string text = \"(atom-label \\\\flag-label \\\"quoted-label\\\" NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<string> labels;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlabels = await ImapUtils.ParseLabelsListAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing X-GM-LABELS failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseExampleBodyRfc3501 ()\n\t\t{\n\t\t\tconst string text = \"(\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"US-ASCII\\\") NIL NIL \\\"7BIT\\\" 3028 92)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartText basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODY failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartText> (), \"Body types did not match.\");\n\t\t\t\t\t\tbasic = (BodyPartText) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"charset\"], Is.EqualTo (\"US-ASCII\"), \"charset param did not match\");\n\n\t\t\t\t\t\tAssert.That (basic, Is.Not.Null, \"The parsed body is not BodyPartText.\");\n\t\t\t\t\t\tAssert.That (basic.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (3028), \"Octet count did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Lines, Is.EqualTo (92), \"Line count did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseExampleBodyRfc3501Async ()\n\t\t{\n\t\t\tconst string text = \"(\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"US-ASCII\\\") NIL NIL \\\"7BIT\\\" 3028 92)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartText basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODY failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartText> (), \"Body types did not match.\");\n\t\t\t\t\t\tbasic = (BodyPartText) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"charset\"], Is.EqualTo (\"US-ASCII\"), \"charset param did not match\");\n\n\t\t\t\t\t\tAssert.That (basic, Is.Not.Null, \"The parsed body is not BodyPartText.\");\n\t\t\t\t\t\tAssert.That (basic.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (3028), \"Octet count did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Lines, Is.EqualTo (92), \"Line count did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseExampleEnvelopeRfc3501 ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\\\" \\\"IMAP4rev1 WG mtg summary and minutes\\\" ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"imap\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"minutes\\\" \\\"CNRI.Reston.VA.US\\\") (\\\"John Klensin\\\" NIL \\\"KLENSIN\\\" \\\"MIT.EDU\\\")) NIL NIL \\\"<B27397-0100000@cac.washington.edu>\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Wed, 17 Jul 1996 02:23:25 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"imap@cac.washington.edu\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Has.Count.EqualTo (2), \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc.ToString (), Is.EqualTo (\"minutes@CNRI.Reston.VA.US, \\\"John Klensin\\\" <KLENSIN@MIT.EDU>\"), \"Cc does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"B27397-0100000@cac.washington.edu\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseExampleEnvelopeRfc3501Async ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\\\" \\\"IMAP4rev1 WG mtg summary and minutes\\\" ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"imap\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"minutes\\\" \\\"CNRI.Reston.VA.US\\\") (\\\"John Klensin\\\" NIL \\\"KLENSIN\\\" \\\"MIT.EDU\\\")) NIL NIL \\\"<B27397-0100000@cac.washington.edu>\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Wed, 17 Jul 1996 02:23:25 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"imap@cac.washington.edu\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Has.Count.EqualTo (2), \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc.ToString (), Is.EqualTo (\"minutes@CNRI.Reston.VA.US, \\\"John Klensin\\\" <KLENSIN@MIT.EDU>\"), \"Cc does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"B27397-0100000@cac.washington.edu\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseExampleEnvelopeRfc3501WithLiterals ()\n\t\t{\n\t\t\tconst string text = \"({37}\\r\\nWed, 17 Jul 1996 02:23:25 -0700 (PDT) {36}\\r\\nIMAP4rev1 WG mtg summary and minutes (({10}\\r\\nTerry Gray NIL {4}\\r\\ngray \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"imap\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"minutes\\\" \\\"CNRI.Reston.VA.US\\\") (\\\"John Klensin\\\" NIL \\\"KLENSIN\\\" \\\"MIT.EDU\\\")) NIL NIL {35}\\r\\n<B27397-0100000@cac.washington.edu>)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Wed, 17 Jul 1996 02:23:25 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"imap@cac.washington.edu\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Has.Count.EqualTo (2), \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc.ToString (), Is.EqualTo (\"minutes@CNRI.Reston.VA.US, \\\"John Klensin\\\" <KLENSIN@MIT.EDU>\"), \"Cc does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"B27397-0100000@cac.washington.edu\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseExampleEnvelopeRfc3501WithLiteralsAsync ()\n\t\t{\n\t\t\tconst string text = \"({37}\\r\\nWed, 17 Jul 1996 02:23:25 -0700 (PDT) {36}\\r\\nIMAP4rev1 WG mtg summary and minutes (({10}\\r\\nTerry Gray NIL {4}\\r\\ngray \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((\\\"Terry Gray\\\" NIL \\\"gray\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"imap\\\" \\\"cac.washington.edu\\\")) ((NIL NIL \\\"minutes\\\" \\\"CNRI.Reston.VA.US\\\") (\\\"John Klensin\\\" NIL \\\"KLENSIN\\\" \\\"MIT.EDU\\\")) NIL NIL {35}\\r\\n<B27397-0100000@cac.washington.edu>)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Wed, 17 Jul 1996 02:23:25 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"IMAP4rev1 WG mtg summary and minutes\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Terry Gray\\\" <gray@cac.washington.edu>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"imap@cac.washington.edu\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Has.Count.EqualTo (2), \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc.ToString (), Is.EqualTo (\"minutes@CNRI.Reston.VA.US, \\\"John Klensin\\\" <KLENSIN@MIT.EDU>\"), \"Cc does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"B27397-0100000@cac.washington.edu\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #1369\n\t\t[Test]\n\t\tpublic void TestParseEnvelopeWithMiscalculatedLiteralMailboxName ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Thu, 29 Apr 2021 10:57:07 +0000\\\" \\\"=?utf-8?B?0J/QsNGA0LrQuNC90LMg0L3QsCDQlNCw0L3QsNC40Lsg0JTQtdGH0LXQsg==?=\\\" (({38}\\r\\nРецепция Офис сграда \\\"Данаил Дечев\\\" №6 NIL \\\"facility\\\" \\\"xxxxxxxxxxx.com\\\")) NIL NIL ((\\\"Team\\\" NIL \\\"team\\\" \\\"xxxxxxxxxxx.com\\\")) NIL NIL NIL \\\"<d0f6ca6608cfb0b680b7b90824c79118@xxxxxxxxxxx.com>\\\")\\r\\n\";\n\n\t\t\t// Note: The server appears to have calculated the literal length as the number of unicode *characters* as opposed to *bytes*. The actual literal length *should be* 69, not 38.\n\t\t\tusing (var memory = new MemoryStream (Encoding.UTF8.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Thu, 29 Apr 2021 10:57:07 +0000\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"Паркинг на Данаил Дечев\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Рецепция Офис сграда \\\\\\\"Данаил Дечев\\\\\\\" №6\\\" <facility@xxxxxxxxxxx.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Is.Empty, \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Is.Empty, \"Reply-To counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"\\\"Team\\\" <team@xxxxxxxxxxx.com>\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"d0f6ca6608cfb0b680b7b90824c79118@xxxxxxxxxxx.com\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #1369\n\t\t[Test]\n\t\tpublic async Task TestParseEnvelopeWithMiscalculatedLiteralMailboxNameAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Thu, 29 Apr 2021 10:57:07 +0000\\\" \\\"=?utf-8?B?0J/QsNGA0LrQuNC90LMg0L3QsCDQlNCw0L3QsNC40Lsg0JTQtdGH0LXQsg==?=\\\" (({38}\\r\\nРецепция Офис сграда \\\"Данаил Дечев\\\" №6 NIL \\\"facility\\\" \\\"xxxxxxxxxxx.com\\\")) NIL NIL ((\\\"Team\\\" NIL \\\"team\\\" \\\"xxxxxxxxxxx.com\\\")) NIL NIL NIL \\\"<d0f6ca6608cfb0b680b7b90824c79118@xxxxxxxxxxx.com>\\\")\\r\\n\";\n\n\t\t\t// Note: The server appears to have calculated the literal length as the number of unicode *characters* as opposed to *bytes*. The actual literal length *should be* 69, not 38.\n\t\t\tusing (var memory = new MemoryStream (Encoding.UTF8.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Thu, 29 Apr 2021 10:57:07 +0000\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"Паркинг на Данаил Дечев\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Рецепция Офис сграда \\\\\\\"Данаил Дечев\\\\\\\" №6\\\" <facility@xxxxxxxxxxx.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Is.Empty, \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Is.Empty, \"Reply-To counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"\\\"Team\\\" <team@xxxxxxxxxxx.com>\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"d0f6ca6608cfb0b680b7b90824c79118@xxxxxxxxxxx.com\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #669\n\t\t[Test]\n\t\tpublic void TestParseEnvelopeWithMissingMessageId ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Tue, 24 Sep 2019 09:48:05 +0800\\\" \\\"subject\\\" ((\\\"From Name\\\" NIL \\\"from\\\" \\\"example.com\\\")) ((\\\"Sender Name\\\" NIL \\\"sender\\\" \\\"example.com\\\")) ((\\\"Reply-To Name\\\" NIL \\\"reply-to\\\" \\\"example.com\\\")) NIL NIL NIL \\\"<in-reply-to@example.com>\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Tue, 24 Sep 2019 09:48:05 +0800\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"subject\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"From Name\\\" <from@example.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Sender Name\\\" <sender@example.com>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Reply-To Name\\\" <reply-to@example.com>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Is.Empty, \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.EqualTo (\"in-reply-to@example.com\"), \"In-Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.Null, \"Message-Id is not null.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #669\n\t\t[Test]\n\t\tpublic async Task TestParseEnvelopeWithMissingMessageIdAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Tue, 24 Sep 2019 09:48:05 +0800\\\" \\\"subject\\\" ((\\\"From Name\\\" NIL \\\"from\\\" \\\"example.com\\\")) ((\\\"Sender Name\\\" NIL \\\"sender\\\" \\\"example.com\\\")) ((\\\"Reply-To Name\\\" NIL \\\"reply-to\\\" \\\"example.com\\\")) NIL NIL NIL \\\"<in-reply-to@example.com>\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Tue, 24 Sep 2019 09:48:05 +0800\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"subject\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"From Name\\\" <from@example.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Sender Name\\\" <sender@example.com>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Reply-To Name\\\" <reply-to@example.com>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Is.Empty, \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.EqualTo (\"in-reply-to@example.com\"), \"In-Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.Null, \"Message-Id is not null.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #932\n\t\t[Test]\n\t\tpublic void TestParseEnvelopeWithMissingInReplyTo ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Tue, 24 Sep 2019 09:48:05 +0800\\\" \\\"=?GBK?B?sbG+qdW9x/jI1bGose0=?=\\\" ((\\\"=?GBK?B?yv2+3bfWzvbQodfp?=\\\" NIL \\\"unknown-name\\\" \\\"unknown-domain\\\")) ((\\\"=?GBK?B?yv2+3bfWzvbQodfp?=\\\" NIL \\\"unknown-name\\\" \\\"unknown-domain\\\")) ((\\\"=?GBK?B?yv2+3bfWzvbQodfp?=\\\" NIL \\\"unknown-name\\\" \\\"unknown-domain\\\")) NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Tue, 24 Sep 2019 09:48:05 +0800\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"北京战区日报表\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"数据分析小组\\\" <unknown-name@unknown-domain>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"数据分析小组\\\" <unknown-name@unknown-domain>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"数据分析小组\\\" <unknown-name@unknown-domain>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Is.Empty, \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.Null, \"Message-Id is not null.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #932\n\t\t[Test]\n\t\tpublic async Task TestParseEnvelopeWithMissingInReplyToAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Tue, 24 Sep 2019 09:48:05 +0800\\\" \\\"=?GBK?B?sbG+qdW9x/jI1bGose0=?=\\\" ((\\\"=?GBK?B?yv2+3bfWzvbQodfp?=\\\" NIL \\\"unknown-name\\\" \\\"unknown-domain\\\")) ((\\\"=?GBK?B?yv2+3bfWzvbQodfp?=\\\" NIL \\\"unknown-name\\\" \\\"unknown-domain\\\")) ((\\\"=?GBK?B?yv2+3bfWzvbQodfp?=\\\" NIL \\\"unknown-name\\\" \\\"unknown-domain\\\")) NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Tue, 24 Sep 2019 09:48:05 +0800\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"北京战区日报表\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"数据分析小组\\\" <unknown-name@unknown-domain>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"数据分析小组\\\" <unknown-name@unknown-domain>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"数据分析小组\\\" <unknown-name@unknown-domain>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Is.Empty, \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.Null, \"Message-Id is not null.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseMalformedMailboxAddressInEnvelope ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 10 Apr 2017 06:04:00 -0700\\\" \\\"Session 2: Building the meditation habit\\\" ((\\\"Headspace\\\" NIL \\\"members\\\" \\\"headspace.com\\\")) ((NIL NIL \\\"<members=headspace.com\\\" \\\"members.headspace.com>\\\")) ((\\\"Headspace\\\" NIL \\\"members\\\" \\\"headspace.com\\\")) ((NIL NIL \\\"user\\\" \\\"gmail.com\\\")) NIL NIL NIL \\\"<bvqyalstpemxt9y3afoqh4an62b2arcd.rcd.1491829440@members.headspace.com>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Mon, 10 Apr 2017 06:04:00 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"Session 2: Building the meditation habit\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Headspace\\\" <members@headspace.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"members=headspace.com@members.headspace.com\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Headspace\\\" <members@headspace.com>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"user@gmail.com\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"bvqyalstpemxt9y3afoqh4an62b2arcd.rcd.1491829440@members.headspace.com\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseMalformedMailboxAddressInEnvelopeAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 10 Apr 2017 06:04:00 -0700\\\" \\\"Session 2: Building the meditation habit\\\" ((\\\"Headspace\\\" NIL \\\"members\\\" \\\"headspace.com\\\")) ((NIL NIL \\\"<members=headspace.com\\\" \\\"members.headspace.com>\\\")) ((\\\"Headspace\\\" NIL \\\"members\\\" \\\"headspace.com\\\")) ((NIL NIL \\\"user\\\" \\\"gmail.com\\\")) NIL NIL NIL \\\"<bvqyalstpemxt9y3afoqh4an62b2arcd.rcd.1491829440@members.headspace.com>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Mon, 10 Apr 2017 06:04:00 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"Session 2: Building the meditation habit\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Headspace\\\" <members@headspace.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"members=headspace.com@members.headspace.com\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Has.Count.EqualTo (1), \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Headspace\\\" <members@headspace.com>\"), \"Reply-To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"user@gmail.com\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"bvqyalstpemxt9y3afoqh4an62b2arcd.rcd.1491829440@members.headspace.com\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests a work-around for a bug in Gmail in which the sender header is in a correct format\n\t\t// (Sender: Name <sender@domain.com>) but in the FETCH response is not (((\"<sender@domain.com>\" NIL \"Name\" NIL)))\n\t\t[Test]\n\t\tpublic void TestParseGMailMalformedSenderInEnvelope ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 10 Apr 2017 06:04:00 -0700\\\" \\\"This is the subject\\\" ((\\\"From_DisplayName\\\" NIL \\\"from\\\" \\\"domain.com\\\")) ((\\\"<sender@domain.com>\\\" NIL \\\"=?UTF-8?Q?\\\"Dummy=C3=ADa_Pa=C3=A1ndez_Algo\\\"?=\\\" NIL)) NIL ((\\\"To_DisplayName\\\" NIL \\\"to\\\" \\\"domain.com\\\")) NIL NIL NIL \\\"<bvqyalstpemxt9y3afoqh4an62b2arcd@message.id>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Mon, 10 Apr 2017 06:04:00 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"This is the subject\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"From_DisplayName\\\" <from@domain.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Dummyía Paández Algo\\\" <sender@domain.com>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"\\\"To_DisplayName\\\" <to@domain.com>\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Is.Empty, \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"bvqyalstpemxt9y3afoqh4an62b2arcd@message.id\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests a work-around for a bug in Gmail in which the sender header is in a correct format\n\t\t// (Sender: Name <sender@domain.com>) but in the FETCH response is not (((\"<sender@domain.com>\" NIL \"Name\" NIL)))\n\t\t[Test]\n\t\tpublic async Task TestParseGMailMalformedSenderInEnvelopeAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 10 Apr 2017 06:04:00 -0700\\\" \\\"This is the subject\\\" ((\\\"From_DisplayName\\\" NIL \\\"from\\\" \\\"domain.com\\\")) ((\\\"<sender@domain.com>\\\" NIL \\\"=?UTF-8?Q?\\\"Dummy=C3=ADa_Pa=C3=A1ndez_Algo\\\"?=\\\" NIL)) NIL ((\\\"To_DisplayName\\\" NIL \\\"to\\\" \\\"domain.com\\\")) NIL NIL NIL \\\"<bvqyalstpemxt9y3afoqh4an62b2arcd@message.id>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Date.HasValue, Is.True, \"Parsed ENVELOPE date is null.\");\n\t\t\t\t\t\tAssert.That (DateUtils.FormatDate (envelope.Date.Value), Is.EqualTo (\"Mon, 10 Apr 2017 06:04:00 -0700\"), \"Date does not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"This is the subject\"), \"Subject does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.From, Has.Count.EqualTo (1), \"From counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"From_DisplayName\\\" <from@domain.com>\"), \"From does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.Sender, Has.Count.EqualTo (1), \"Sender counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Dummyía Paández Algo\\\" <sender@domain.com>\"), \"Sender does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.To, Has.Count.EqualTo (1), \"To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"\\\"To_DisplayName\\\" <to@domain.com>\"), \"To does not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo, Is.Empty, \"Reply-To counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Cc, Is.Empty, \"Cc counts do not match.\");\n\t\t\t\t\t\tAssert.That (envelope.Bcc, Is.Empty, \"Bcc counts do not match.\");\n\n\t\t\t\t\t\tAssert.That (envelope.InReplyTo, Is.Null, \"In-Reply-To is not null.\");\n\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"bvqyalstpemxt9y3afoqh4an62b2arcd@message.id\"), \"Message-Id does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests issue #1451\n\t\t[Test]\n\t\tpublic void TestParseEnvelopeWithNilMailbox ()\n\t\t{\n\t\t\tconst string text = \"(NIL \\\"Retrieval using the IMAP4 protocol failed for the following message: 3\\\" ((\\\"Microsoft Exchange Server\\\" NIL NIL \\\".MISSING-HOST-NAME.\\\")) NIL NIL ((\\\"username@testdomain.com\\\" NIL \\\"username\\\" \\\"testdomain.com\\\")) NIL NIL NIL NIL)\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"Retrieval using the IMAP4 protocol failed for the following message: 3\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Microsoft Exchange Server\\\" <>\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"\\\"username@testdomain.com\\\" <username@testdomain.com>\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseEnvelopeWithNilMailboxAsync ()\n\t\t{\n\t\t\tconst string text = \"(NIL \\\"Retrieval using the IMAP4 protocol failed for the following message: 3\\\" ((\\\"Microsoft Exchange Server\\\" NIL NIL \\\".MISSING-HOST-NAME.\\\")) NIL NIL ((\\\"username@testdomain.com\\\" NIL \\\"username\\\" \\\"testdomain.com\\\")) NIL NIL NIL NIL)\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Subject, Is.EqualTo (\"Retrieval using the IMAP4 protocol failed for the following message: 3\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Microsoft Exchange Server\\\" <>\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"\\\"username@testdomain.com\\\" <username@testdomain.com>\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseEnvelopeWithRoutedMailboxes ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 13 Jul 2015 21:15:32 -0400\\\" \\\"Test message\\\" ((\\\"Example From\\\" \\\"@route1,@route2\\\" \\\"from\\\" \\\"example.com\\\")) ((\\\"Example Sender\\\" NIL \\\"sender\\\" \\\"example.com\\\")) ((\\\"Example Reply-To\\\" NIL \\\"reply-to\\\" \\\"example.com\\\")) ((NIL NIL \\\"boys\\\" NIL)(NIL NIL \\\"aaron\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jeff\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"zach\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)(NIL NIL \\\"girls\\\" NIL)(NIL NIL \\\"alice\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"hailey\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jenny\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)) NIL NIL NIL \\\"<MV4F9T0FLVT4.2CZLZPO4HZ8B3@Jeffreys-MacBook-Air.local>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Example Sender\\\" <sender@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Example From\\\" <@route1,@route2:from@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Example Reply-To\\\" <reply-to@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"boys: aaron, jeff, zach;, girls: alice, hailey, jenny;\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseEnvelopeWithRoutedMailboxesAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 13 Jul 2015 21:15:32 -0400\\\" \\\"Test message\\\" ((\\\"Example From\\\" \\\"@route1,@route2\\\" \\\"from\\\" \\\"example.com\\\")) ((\\\"Example Sender\\\" NIL \\\"sender\\\" \\\"example.com\\\")) ((\\\"Example Reply-To\\\" NIL \\\"reply-to\\\" \\\"example.com\\\")) ((NIL NIL \\\"boys\\\" NIL)(NIL NIL \\\"aaron\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jeff\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"zach\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)(NIL NIL \\\"girls\\\" NIL)(NIL NIL \\\"alice\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"hailey\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jenny\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)) NIL NIL NIL \\\"<MV4F9T0FLVT4.2CZLZPO4HZ8B3@Jeffreys-MacBook-Air.local>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Example Sender\\\" <sender@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Example From\\\" <@route1,@route2:from@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Example Reply-To\\\" <reply-to@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"boys: aaron, jeff, zach;, girls: alice, hailey, jenny;\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #991\n\t\t[Test]\n\t\tpublic void TestParseEnvelopeWithNilAddress ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Thu, 18 Jul 2019 01:29:32 -0300\\\" \\\"Xxx xxx xxx xxx..\\\" (NIL ({123}\\r\\n_XXXXXXXX_xxxxxx_xxxx_xxx_?= =?iso-8859-1?Q?xxxx_xx_xxxxxxx_xxxxxxxxxx.Xxxxxxxx_xx_xxx=Xxxxxx_xx_xx_Xx?= =?iso-8859-1?Q?s?= NIL \\\"xxxxxxx\\\" \\\"xxxxxxxxxx.xxx\\\")) (NIL ({123}\\r\\n_XXXXXXXX_xxxxxx_xxxx_xxx_?= =?iso-8859-1?Q?xxxx_xx_xxxxxxx_xxxxxxxxxx.Xxxxxxxx_xx_xxx=Xxxxxx_xx_xx_Xx?= =?iso-8859-1?Q?s?= NIL \\\"xxxxxxx\\\" \\\"xxxxxxxxxx.xxx\\\")) ((NIL NIL \\\"xxxxxxx\\\" \\\"xxxxx.xxx.xx\\\")) ((NIL NIL \\\"xxxxxxx\\\" \\\"xxxxxxx.xxx.xx\\\")) NIL NIL NIL \\\"<0A9F01100712011D213C15B6D2B6DA@XXXXXXX-XXXXXXX>\\\"))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"_XXXXXXXX_xxxxxx_xxxx_xxx_?= xxxx xx xxxxxxx xxxxxxxxxx.Xxxxxxxx xx xxx=Xxxxxx xx xx Xxs\\\" <xxxxxxx@xxxxxxxxxx.xxx>\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"_XXXXXXXX_xxxxxx_xxxx_xxx_?= xxxx xx xxxxxxx xxxxxxxxxx.Xxxxxxxx xx xxx=Xxxxxx xx xx Xxs\\\" <xxxxxxx@xxxxxxxxxx.xxx>\"));\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"xxxxxxx@xxxxx.xxx.xx\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"xxxxxxx@xxxxxxx.xxx.xx\"));\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"0A9F01100712011D213C15B6D2B6DA@XXXXXXX-XXXXXXX\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #991\n\t\t[Test]\n\t\tpublic async Task TestParseEnvelopeWithNilAddressAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Thu, 18 Jul 2019 01:29:32 -0300\\\" \\\"Xxx xxx xxx xxx..\\\" (NIL ({123}\\r\\n_XXXXXXXX_xxxxxx_xxxx_xxx_?= =?iso-8859-1?Q?xxxx_xx_xxxxxxx_xxxxxxxxxx.Xxxxxxxx_xx_xxx=Xxxxxx_xx_xx_Xx?= =?iso-8859-1?Q?s?= NIL \\\"xxxxxxx\\\" \\\"xxxxxxxxxx.xxx\\\")) (NIL ({123}\\r\\n_XXXXXXXX_xxxxxx_xxxx_xxx_?= =?iso-8859-1?Q?xxxx_xx_xxxxxxx_xxxxxxxxxx.Xxxxxxxx_xx_xxx=Xxxxxx_xx_xx_Xx?= =?iso-8859-1?Q?s?= NIL \\\"xxxxxxx\\\" \\\"xxxxxxxxxx.xxx\\\")) ((NIL NIL \\\"xxxxxxx\\\" \\\"xxxxx.xxx.xx\\\")) ((NIL NIL \\\"xxxxxxx\\\" \\\"xxxxxxx.xxx.xx\\\")) NIL NIL NIL \\\"<0A9F01100712011D213C15B6D2B6DA@XXXXXXX-XXXXXXX>\\\"))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"_XXXXXXXX_xxxxxx_xxxx_xxx_?= xxxx xx xxxxxxx xxxxxxxxxx.Xxxxxxxx xx xxx=Xxxxxx xx xx Xxs\\\" <xxxxxxx@xxxxxxxxxx.xxx>\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"_XXXXXXXX_xxxxxx_xxxx_xxx_?= xxxx xx xxxxxxx xxxxxxxxxx.Xxxxxxxx xx xxx=Xxxxxx xx xx Xxs\\\" <xxxxxxx@xxxxxxxxxx.xxx>\"));\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"xxxxxxx@xxxxx.xxx.xx\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"xxxxxxx@xxxxxxx.xxx.xx\"));\n\t\t\t\t\t\tAssert.That (envelope.MessageId, Is.EqualTo (\"0A9F01100712011D213C15B6D2B6DA@XXXXXXX-XXXXXXX\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseDovcotEnvelopeWithGroupAddresses ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 13 Jul 2015 21:15:32 -0400\\\" \\\"Test message\\\" ((\\\"Example From\\\" NIL \\\"from\\\" \\\"example.com\\\")) ((\\\"Example Sender\\\" NIL \\\"sender\\\" \\\"example.com\\\")) ((\\\"Example Reply-To\\\" NIL \\\"reply-to\\\" \\\"example.com\\\")) ((NIL NIL \\\"boys\\\" NIL)(NIL NIL \\\"aaron\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jeff\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"zach\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)(NIL NIL \\\"girls\\\" NIL)(NIL NIL \\\"alice\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"hailey\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jenny\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)) NIL NIL NIL \\\"<MV4F9T0FLVT4.2CZLZPO4HZ8B3@Jeffreys-MacBook-Air.local>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = ImapUtils.ParseEnvelope (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Example Sender\\\" <sender@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Example From\\\" <from@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Example Reply-To\\\" <reply-to@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"boys: aaron, jeff, zach;, girls: alice, hailey, jenny;\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseDovcotEnvelopeWithGroupAddressesAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"Mon, 13 Jul 2015 21:15:32 -0400\\\" \\\"Test message\\\" ((\\\"Example From\\\" NIL \\\"from\\\" \\\"example.com\\\")) ((\\\"Example Sender\\\" NIL \\\"sender\\\" \\\"example.com\\\")) ((\\\"Example Reply-To\\\" NIL \\\"reply-to\\\" \\\"example.com\\\")) ((NIL NIL \\\"boys\\\" NIL)(NIL NIL \\\"aaron\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jeff\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"zach\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)(NIL NIL \\\"girls\\\" NIL)(NIL NIL \\\"alice\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"hailey\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL \\\"jenny\\\" \\\"MISSING_DOMAIN\\\")(NIL NIL NIL NIL)) NIL NIL NIL \\\"<MV4F9T0FLVT4.2CZLZPO4HZ8B3@Jeffreys-MacBook-Air.local>\\\")\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tEnvelope envelope;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tenvelope = await ImapUtils.ParseEnvelopeAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ENVELOPE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tAssert.That (envelope.Sender.ToString (), Is.EqualTo (\"\\\"Example Sender\\\" <sender@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.From.ToString (), Is.EqualTo (\"\\\"Example From\\\" <from@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.ReplyTo.ToString (), Is.EqualTo (\"\\\"Example Reply-To\\\" <reply-to@example.com>\"));\n\t\t\t\t\t\tAssert.That (envelope.To.ToString (), Is.EqualTo (\"boys: aaron, jeff, zach;, girls: alice, hailey, jenny;\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseExampleMultiLevelDovecotBodyStructure ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 28 2 NIL NIL NIL NIL) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") NIL NIL NIL) (\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7bit\\\" 641 (\\\"Sat, 8 Jan 2011 14:16:36 +0100\\\" \\\"Subj 2\\\" ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Recipient\\\" NIL \\\"example\\\" \\\"gmail.com\\\")) NIL NIL NIL NIL) (\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 185 18 NIL NIL (\\\"cs\\\") NIL) 31 NIL (\\\"attachment\\\" NIL) NIL NIL) (\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7bit\\\" 50592 (\\\"Sat, 8 Jan 2011 13:58:39 +0100\\\" \\\"Subj 1\\\" ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Recipient\\\" NIL \\\"example\\\" \\\"gmail.com\\\")) NIL NIL NIL NIL) ( (\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 4296 345 NIL NIL NIL NIL) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 45069 1295 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_0073_01CBB179.57530990\\\") NIL (\\\"cs\\\") NIL) 1669 NIL (\\\"attachment\\\" NIL) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_0077_01CBB179.57530990\\\") NIL (\\\"cs\\\") NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_000_0077_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartMessage> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"The type of the third child does not match.\");\n\n\t\t\t\t\t\t// FIXME: assert more stuff?\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseExampleMultiLevelDovecotBodyStructureAsync ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 28 2 NIL NIL NIL NIL) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") NIL NIL NIL) (\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7bit\\\" 641 (\\\"Sat, 8 Jan 2011 14:16:36 +0100\\\" \\\"Subj 2\\\" ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Recipient\\\" NIL \\\"example\\\" \\\"gmail.com\\\")) NIL NIL NIL NIL) (\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 185 18 NIL NIL (\\\"cs\\\") NIL) 31 NIL (\\\"attachment\\\" NIL) NIL NIL) (\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7bit\\\" 50592 (\\\"Sat, 8 Jan 2011 13:58:39 +0100\\\" \\\"Subj 1\\\" ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Some Name, SOMECOMPANY\\\" NIL \\\"recipient\\\" \\\"example.com\\\")) ((\\\"Recipient\\\" NIL \\\"example\\\" \\\"gmail.com\\\")) NIL NIL NIL NIL) ( (\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 4296 345 NIL NIL NIL NIL) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-2\\\") NIL NIL \\\"quoted-printable\\\" 45069 1295 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_0073_01CBB179.57530990\\\") NIL (\\\"cs\\\") NIL) 1669 NIL (\\\"attachment\\\" NIL) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_0077_01CBB179.57530990\\\") NIL (\\\"cs\\\") NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_000_0077_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartMessage> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"The type of the third child does not match.\");\n\n\t\t\t\t\t\t// FIXME: assert more stuff?\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #878\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithBrokenMultipartRelated ()\n\t\t{\n\t\t\tconst string text = \"((\\\"multipart\\\" \\\"related\\\" (\\\"boundary\\\" \\\"----=_@@@@BeautyqueenS87@_@147836_6893840099.85426606923635\\\") NIL NIL \\\"7BIT\\\" 400 (\\\"boundary\\\" \\\"----=_@@@@BeautyqueenS87@_@147836_6893840099.85426606923635\\\") NIL NIL NIL)(\\\"TEXT\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF8\\\") NIL NIL \\\"7BIT\\\" 1115 70 NIL NIL NIL NIL)(\\\"TEXT\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF8\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 16 2 NIL NIL NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"----=--_DRYORTABLE@@@_@@@8957836_03253840099.78526606923635\\\") NIL NIL NIL)\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=--_DRYORTABLE@@@_@@@8957836_03253840099.78526606923635\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartText> (), \"The type of the third child did not match.\");\n\n\t\t\t\t\t\tvar related = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (related.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (related.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_@@@@BeautyqueenS87@_@147836_6893840099.85426606923635\"), \"multipart/related boundary param did not match\");\n\t\t\t\t\t\tAssert.That (related.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"multipart/related Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (related.Octets, Is.EqualTo (400), \"multipart/related octets do not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #878\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithBrokenMultipartRelatedAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"multipart\\\" \\\"related\\\" (\\\"boundary\\\" \\\"----=_@@@@BeautyqueenS87@_@147836_6893840099.85426606923635\\\") NIL NIL \\\"7BIT\\\" 400 (\\\"boundary\\\" \\\"----=_@@@@BeautyqueenS87@_@147836_6893840099.85426606923635\\\") NIL NIL NIL)(\\\"TEXT\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF8\\\") NIL NIL \\\"7BIT\\\" 1115 70 NIL NIL NIL NIL)(\\\"TEXT\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF8\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 16 2 NIL NIL NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"----=--_DRYORTABLE@@@_@@@8957836_03253840099.78526606923635\\\") NIL NIL NIL)\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=--_DRYORTABLE@@@_@@@8957836_03253840099.78526606923635\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartText> (), \"The type of the third child did not match.\");\n\n\t\t\t\t\t\tvar related = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (related.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (related.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_@@@@BeautyqueenS87@_@147836_6893840099.85426606923635\"), \"multipart/related boundary param did not match\");\n\t\t\t\t\t\tAssert.That (related.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"multipart/related Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (related.Octets, Is.EqualTo (400), \"multipart/related octets do not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #944\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithEmptyParenListAsMessageRfc822BodyToken ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"base64\\\" 232 4 NIL NIL NIL)(\\\"message\\\" \\\"delivery-status\\\" NIL NIL NIL \\\"7BIT\\\" 421 NIL NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7BIT\\\" 787 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL) () 0 NIL NIL NIL) \\\"report\\\" (\\\"report-type\\\" \\\"delivery-status\\\" \\\"boundary\\\" \\\"==IFJRGLKFGIR60132UHRUHIHD\\\") NIL NIL)\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"report\"), Is.True, \"multipart/report Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"==IFJRGLKFGIR60132UHRUHIHD\"), \"boundary param did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"report-type\"], Is.EqualTo (\"delivery-status\"), \"report-type param did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"The type of the third child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"UTF-8\"), \"text/plain charset param did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"text/plain encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (232), \"text/plain octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (4), \"text/plain lines did not match.\");\n\n\t\t\t\t\t\tvar dstat = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (dstat.ContentType.IsMimeType (\"message\", \"delivery-status\"), Is.True, \"message/delivery-status Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (dstat.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"message/delivery-status encoding did not match.\");\n\t\t\t\t\t\tAssert.That (dstat.Octets, Is.EqualTo (421), \"message/delivery-status octets did not match.\");\n\n\t\t\t\t\t\tvar rfc822 = (BodyPartMessage) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (rfc822.ContentType.IsMimeType (\"message\", \"rfc822\"), Is.True, \"message/rfc822 Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentId, Is.Null, \"message/rfc822 Content-Id should be NIL.\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentDescription, Is.Null, \"message/rfc822 Content-Description should be NIL.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Sender, Is.Empty, \"message/rfc822 Envelope.Sender should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.From, Is.Empty, \"message/rfc822 Envelope.From should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.ReplyTo, Is.Empty, \"message/rfc822 Envelope.ReplyTo should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.To, Is.Empty, \"message/rfc822 Envelope.To should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Cc, Is.Empty, \"message/rfc822 Envelope.Cc should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Bcc, Is.Empty, \"message/rfc822 Envelope.Bcc should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Subject, Is.Null, \"message/rfc822 Envelope.Subject should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.MessageId, Is.Null, \"message/rfc822 Envelope.MessageId should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.InReplyTo, Is.Null, \"message/rfc822 Envelope.InReplyTo should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Date, Is.Null, \"message/rfc822 Envelope.Date should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"message/rfc822 encoding did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Octets, Is.EqualTo (787), \"message/rfc822 octets did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Body, Is.Null, \"message/rfc822 body should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Lines, Is.EqualTo (0), \"message/rfc822 lines did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #944\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithEmptyParenListAsMessageRfc822BodyTokenAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"base64\\\" 232 4 NIL NIL NIL)(\\\"message\\\" \\\"delivery-status\\\" NIL NIL NIL \\\"7BIT\\\" 421 NIL NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7BIT\\\" 787 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL) () 0 NIL NIL NIL) \\\"report\\\" (\\\"report-type\\\" \\\"delivery-status\\\" \\\"boundary\\\" \\\"==IFJRGLKFGIR60132UHRUHIHD\\\") NIL NIL)\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"report\"), Is.True, \"multipart/report Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"==IFJRGLKFGIR60132UHRUHIHD\"), \"boundary param did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"report-type\"], Is.EqualTo (\"delivery-status\"), \"report-type param did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"The type of the third child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"UTF-8\"), \"text/plain charset param did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"text/plain encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (232), \"text/plain octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (4), \"text/plain lines did not match.\");\n\n\t\t\t\t\t\tvar dstat = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (dstat.ContentType.IsMimeType (\"message\", \"delivery-status\"), Is.True, \"message/delivery-status Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (dstat.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"message/delivery-status encoding did not match.\");\n\t\t\t\t\t\tAssert.That (dstat.Octets, Is.EqualTo (421), \"message/delivery-status octets did not match.\");\n\n\t\t\t\t\t\tvar rfc822 = (BodyPartMessage) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (rfc822.ContentType.IsMimeType (\"message\", \"rfc822\"), Is.True, \"message/rfc822 Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentId, Is.Null, \"message/rfc822 Content-Id should be NIL.\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentDescription, Is.Null, \"message/rfc822 Content-Description should be NIL.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Sender, Is.Empty, \"message/rfc822 Envelope.Sender should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.From, Is.Empty, \"message/rfc822 Envelope.From should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.ReplyTo, Is.Empty, \"message/rfc822 Envelope.ReplyTo should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.To, Is.Empty, \"message/rfc822 Envelope.To should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Cc, Is.Empty, \"message/rfc822 Envelope.Cc should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Bcc, Is.Empty, \"message/rfc822 Envelope.Bcc should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Subject, Is.Null, \"message/rfc822 Envelope.Subject should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.MessageId, Is.Null, \"message/rfc822 Envelope.MessageId should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.InReplyTo, Is.Null, \"message/rfc822 Envelope.InReplyTo should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Envelope.Date, Is.Null, \"message/rfc822 Envelope.Date should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"message/rfc822 encoding did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Octets, Is.EqualTo (787), \"message/rfc822 octets did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Body, Is.Null, \"message/rfc822 body should be null.\");\n\t\t\t\t\t\tAssert.That (rfc822.Lines, Is.EqualTo (0), \"message/rfc822 lines did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithContentMd5DspLanguageAndLocation ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 28 2 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.txt\\\")) \\\"en\\\" \\\"http://www.google.com/body.txt\\\") (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.html\\\")) \\\"en\\\" \\\"http://www.google.com/body.html\\\") \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") (\\\"inline\\\" (\\\"filename\\\" \\\"alternative.txt\\\")) \\\"en\\\" \\\"http://www.google.com/alternative.txt\\\")\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_001_0078_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"multipart/alternative disposition did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.FileName, Is.EqualTo (\"alternative.txt\"), \"multipart/alternative filename did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Is.Not.Null, \"multipart/alternative Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"multipart/alternative Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"en\"), \"multipart/alternative Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/alternative.txt\"), \"multipart/alternative location did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/plain charset param did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/plain disposition did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.FileName, Is.EqualTo (\"body.txt\"), \"text/plain filename did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Is.Not.Null, \"text/plain Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Has.Length.EqualTo (1), \"text/plain Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage [0], Is.EqualTo (\"en\"), \"text/plain Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.txt\"), \"text/plain location did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (28), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (2), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tvar html = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset param did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/html disposition did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.FileName, Is.EqualTo (\"body.html\"), \"text/html filename did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Is.Not.Null, \"text/html Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Has.Length.EqualTo (1), \"text/html Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage [0], Is.EqualTo (\"en\"), \"text/html Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.html\"), \"text/html location did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (1707), \"text/html octets did not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (65), \"text/html lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithContentMd5DspLanguageAndLocationAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 28 2 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.txt\\\")) \\\"en\\\" \\\"http://www.google.com/body.txt\\\") (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.html\\\")) \\\"en\\\" \\\"http://www.google.com/body.html\\\") \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") (\\\"inline\\\" (\\\"filename\\\" \\\"alternative.txt\\\")) \\\"en\\\" \\\"http://www.google.com/alternative.txt\\\")\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_001_0078_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"multipart/alternative disposition did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.FileName, Is.EqualTo (\"alternative.txt\"), \"multipart/alternative filename did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Is.Not.Null, \"multipart/alternative Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"multipart/alternative Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"en\"), \"multipart/alternative Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/alternative.txt\"), \"multipart/alternative location did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/plain charset param did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/plain disposition did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.FileName, Is.EqualTo (\"body.txt\"), \"text/plain filename did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Is.Not.Null, \"text/plain Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Has.Length.EqualTo (1), \"text/plain Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage[0], Is.EqualTo (\"en\"), \"text/plain Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.txt\"), \"text/plain location did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (28), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (2), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tvar html = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset param did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/html disposition did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.FileName, Is.EqualTo (\"body.html\"), \"text/html filename did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Is.Not.Null, \"text/html Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Has.Length.EqualTo (1), \"text/html Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage[0], Is.EqualTo (\"en\"), \"text/html Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.html\"), \"text/html location did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (1707), \"text/html octets did not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (65), \"text/html lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithLiterals_LiteralsEverywhere ()\n\t\t{\n\t\t\tconst string text = \"(({4}\\r\\ntext {5}\\r\\nplain ({7}\\r\\ncharset {10}\\r\\niso-8859-1) NIL NIL {16}\\r\\nquoted-printable 28 2 {6}\\r\\nmd5sum ({6}\\r\\ninline ({8}\\r\\nfilename {8}\\r\\nbody.txt)) {2}\\r\\nen {30}\\r\\nhttp://www.google.com/body.txt) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.html\\\")) \\\"en\\\" \\\"http://www.google.com/body.html\\\") {11}\\r\\nalternative (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") (\\\"inline\\\" (\\\"filename\\\" \\\"alternative.txt\\\")) \\\"en\\\" \\\"http://www.google.com/alternative.txt\\\")\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart)body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters [\"boundary\"], Is.EqualTo (\"----=_NextPart_001_0078_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"multipart/alternative disposition did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.FileName, Is.EqualTo (\"alternative.txt\"), \"multipart/alternative filename did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Is.Not.Null, \"multipart/alternative Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"multipart/alternative Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage [0], Is.EqualTo (\"en\"), \"multipart/alternative Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/alternative.txt\"), \"multipart/alternative location did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts [0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts [1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText)multipart.BodyParts [0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/plain charset param did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/plain disposition did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.FileName, Is.EqualTo (\"body.txt\"), \"text/plain filename did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Is.Not.Null, \"text/plain Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Has.Length.EqualTo (1), \"text/plain Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage [0], Is.EqualTo (\"en\"), \"text/plain Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.txt\"), \"text/plain location did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (28), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (2), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tvar html = (BodyPartText)multipart.BodyParts [1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset param did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/html disposition did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.FileName, Is.EqualTo (\"body.html\"), \"text/html filename did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Is.Not.Null, \"text/html Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Has.Length.EqualTo (1), \"text/html Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage [0], Is.EqualTo (\"en\"), \"text/html Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.html\"), \"text/html location did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (1707), \"text/html octets did not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (65), \"text/html lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithLiterals_LiteralsEverywhereAsync ()\n\t\t{\n\t\t\tconst string text = \"(({4}\\r\\ntext {5}\\r\\nplain ({7}\\r\\ncharset {10}\\r\\niso-8859-1) NIL NIL {16}\\r\\nquoted-printable 28 2 {6}\\r\\nmd5sum ({6}\\r\\ninline ({8}\\r\\nfilename {8}\\r\\nbody.txt)) {2}\\r\\nen {30}\\r\\nhttp://www.google.com/body.txt) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.html\\\")) \\\"en\\\" \\\"http://www.google.com/body.html\\\") {11}\\r\\nalternative (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") (\\\"inline\\\" (\\\"filename\\\" \\\"alternative.txt\\\")) \\\"en\\\" \\\"http://www.google.com/alternative.txt\\\")\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_001_0078_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"multipart/alternative disposition did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.FileName, Is.EqualTo (\"alternative.txt\"), \"multipart/alternative filename did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Is.Not.Null, \"multipart/alternative Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"multipart/alternative Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"en\"), \"multipart/alternative Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/alternative.txt\"), \"multipart/alternative location did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/plain charset param did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/plain disposition did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.FileName, Is.EqualTo (\"body.txt\"), \"text/plain filename did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Is.Not.Null, \"text/plain Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Has.Length.EqualTo (1), \"text/plain Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage[0], Is.EqualTo (\"en\"), \"text/plain Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.txt\"), \"text/plain location did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (28), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (2), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tvar html = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset param did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/html disposition did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.FileName, Is.EqualTo (\"body.html\"), \"text/html filename did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Is.Not.Null, \"text/html Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Has.Length.EqualTo (1), \"text/html Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage[0], Is.EqualTo (\"en\"), \"text/html Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.html\"), \"text/html location did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (1707), \"text/html octets did not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (65), \"text/html lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithBodyExtensions ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 28 2 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.txt\\\")) \\\"en\\\" \\\"body.txt\\\" \\\"extension1\\\" 123 (\\\"extension2\\\" (\\\"nested-extension3\\\" \\\"nested-extension4\\\"))) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.html\\\")) \\\"en\\\" \\\"http://www.google.com/body.html\\\") \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") (\\\"inline\\\" (\\\"filename\\\" \\\"alternative.txt\\\")) \\\"en\\\" \\\"http://www.google.com/alternative.txt\\\" {10}\\r\\nextension1 123 (\\\"extension2\\\" (\\\"nested-extension3\\\" \\\"nested-extension4\\\")))\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart)body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters [\"boundary\"], Is.EqualTo (\"----=_NextPart_001_0078_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"multipart/alternative disposition did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.FileName, Is.EqualTo (\"alternative.txt\"), \"multipart/alternative filename did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Is.Not.Null, \"multipart/alternative Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"multipart/alternative Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage [0], Is.EqualTo (\"en\"), \"multipart/alternative Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/alternative.txt\"), \"multipart/alternative location did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts [0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts [1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText)multipart.BodyParts [0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/plain charset param did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/plain disposition did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.FileName, Is.EqualTo (\"body.txt\"), \"text/plain filename did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Is.Not.Null, \"text/plain Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Has.Length.EqualTo (1), \"text/plain Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage [0], Is.EqualTo (\"en\"), \"text/plain Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLocation.ToString (), Is.EqualTo (\"body.txt\"), \"text/plain location did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (28), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (2), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tvar html = (BodyPartText)multipart.BodyParts [1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset param did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/html disposition did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.FileName, Is.EqualTo (\"body.html\"), \"text/html filename did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Is.Not.Null, \"text/html Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Has.Length.EqualTo (1), \"text/html Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage [0], Is.EqualTo (\"en\"), \"text/html Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.html\"), \"text/html location did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (1707), \"text/html octets did not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (65), \"text/html lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithBodyExtensionsAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 28 2 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.txt\\\")) \\\"en\\\" \\\"body.txt\\\" \\\"extension1\\\" 123 (\\\"extension2\\\" (\\\"nested-extension3\\\" \\\"nested-extension4\\\"))) (\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL NIL \\\"quoted-printable\\\" 1707 65 \\\"md5sum\\\" (\\\"inline\\\" (\\\"filename\\\" \\\"body.html\\\")) \\\"en\\\" \\\"http://www.google.com/body.html\\\") \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_NextPart_001_0078_01CBB179.57530990\\\") (\\\"inline\\\" (\\\"filename\\\" \\\"alternative.txt\\\")) \\\"en\\\" \\\"http://www.google.com/alternative.txt\\\" {10}\\r\\nextension1 123 (\\\"extension2\\\" (\\\"nested-extension3\\\" \\\"nested-extension4\\\")))\\r\\n\";\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_001_0078_01CBB179.57530990\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"multipart/alternative disposition did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentDisposition.FileName, Is.EqualTo (\"alternative.txt\"), \"multipart/alternative filename did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Is.Not.Null, \"multipart/alternative Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"multipart/alternative Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"en\"), \"multipart/alternative Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/alternative.txt\"), \"multipart/alternative location did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child did not match.\");\n\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/plain charset param did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/plain disposition did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.FileName, Is.EqualTo (\"body.txt\"), \"text/plain filename did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Is.Not.Null, \"text/plain Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage, Has.Length.EqualTo (1), \"text/plain Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLanguage[0], Is.EqualTo (\"en\"), \"text/plain Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentLocation.ToString (), Is.EqualTo (\"body.txt\"), \"text/plain location did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (28), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (2), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tvar html = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset param did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"text/html disposition did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.FileName, Is.EqualTo (\"body.html\"), \"text/html filename did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentMd5, Is.EqualTo (\"md5sum\"), \"text/html Content-Md5 did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Is.Not.Null, \"text/html Content-Language should not be null\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage, Has.Length.EqualTo (1), \"text/html Content-Language count did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLanguage[0], Is.EqualTo (\"en\"), \"text/html Content-Language value did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentLocation.ToString (), Is.EqualTo (\"http://www.google.com/body.html\"), \"text/html location did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (1707), \"text/html octets did not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (65), \"text/html lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #205\n\t\t[Test]\n\t\tpublic void TestParseGMailBadlyFormedMultipartBodyStructure ()\n\t\t{\n\t\t\tconst string text = \"((\\\"ALTERNATIVE\\\" (\\\"BOUNDARY\\\" \\\"==alternative_xad5934455aeex\\\") NIL NIL)(\\\"TEXT\\\" \\\"HTML\\\" (\\\"CHARSET\\\" \\\"iso-8859-1\\\" \\\"NAME\\\" \\\"seti_letter.html\\\") NIL NIL \\\"7BIT\\\" 6769 171 NIL NIL NIL) \\\"ALTERNATIVE\\\" (\\\"BOUNDARY\\\" \\\"==alternative_xad5934455aeex\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart, broken;\n\t\t\t\t\t\tBodyPartText html;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"outer multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"==alternative_xad5934455aeex\"), \"outer multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbroken = (BodyPartMultipart) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (broken.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"inner multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"==alternative_xad5934455aeex\"), \"inner multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (broken.BodyParts, Is.Empty, \"inner multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\thtml = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Name, Is.EqualTo (\"seti_letter.html\"), \"text/html name parameter did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #205\n\t\t[Test]\n\t\tpublic async Task TestParseGMailBadlyFormedMultipartBodyStructureAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"ALTERNATIVE\\\" (\\\"BOUNDARY\\\" \\\"==alternative_xad5934455aeex\\\") NIL NIL)(\\\"TEXT\\\" \\\"HTML\\\" (\\\"CHARSET\\\" \\\"iso-8859-1\\\" \\\"NAME\\\" \\\"seti_letter.html\\\") NIL NIL \\\"7BIT\\\" 6769 171 NIL NIL NIL) \\\"ALTERNATIVE\\\" (\\\"BOUNDARY\\\" \\\"==alternative_xad5934455aeex\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart, broken;\n\t\t\t\t\t\tBodyPartText html;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"outer multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"==alternative_xad5934455aeex\"), \"outer multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbroken = (BodyPartMultipart) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (broken.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"inner multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"==alternative_xad5934455aeex\"), \"inner multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (broken.BodyParts, Is.Empty, \"inner multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\thtml = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"text/html charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Name, Is.EqualTo (\"seti_letter.html\"), \"text/html name parameter did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #777\n\t\t[Test]\n\t\tpublic void TestParseGMailBadlyFormedMultipartBodyStructure2 ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"UTF-8\\\" \\\"DELSP\\\" \\\"yes\\\" \\\"FORMAT\\\" \\\"flowed\\\") NIL NIL \\\"BASE64\\\" 10418 133 NIL NIL NIL)(\\\"TEXT\\\" \\\"HTML\\\" (\\\"CHARSET\\\" \\\"UTF-8\\\") NIL NIL \\\"BASE64\\\" 34544 442 NIL NIL NIL) \\\"ALTERNATIVE\\\" (\\\"BOUNDARY\\\" \\\"94eb2c1cd0507723d5054c1ce6cb\\\") NIL NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"94eb2c1cd0507723e6054c1ce6cd\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar mixed = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (mixed.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (mixed.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"94eb2c1cd0507723e6054c1ce6cd\"), \"multipart/mixed boundary param did not match\");\n\t\t\t\t\t\tAssert.That (mixed.BodyParts, Has.Count.EqualTo (5), \"multipart/mixed BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tvar alternative = (BodyPartMultipart) mixed.BodyParts[0];\n\t\t\t\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (alternative.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"94eb2c1cd0507723d5054c1ce6cb\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (alternative.BodyParts, Has.Count.EqualTo (2), \"multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (alternative.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tvar plain = (BodyPartText) alternative.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"UTF-8\"), \"text/plain charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Format, Is.EqualTo (\"flowed\"), \"text/plain format parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Parameters[\"delsp\"], Is.EqualTo (\"yes\"), \"text/plain delsp parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"BASE64\"), \"text/plain Content-Transfer-Encoding did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (10418), \"text/plain Octets do not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (133), \"text/plain Lines don't match\");\n\n\t\t\t\t\t\tAssert.That (alternative.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tvar html = (BodyPartText) alternative.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"UTF-8\"), \"text/html charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentTransferEncoding, Is.EqualTo (\"BASE64\"), \"text/phtml Content-Transfer-Encoding did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (34544), \"text/html Octets do not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (442), \"text/html Lines don't match\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[1], Is.InstanceOf<BodyPartMultipart> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tvar broken1 = (BodyPartMultipart) mixed.BodyParts[1];\n\t\t\t\t\t\tAssert.That (broken1.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken1.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[2], Is.InstanceOf<BodyPartMultipart> (), \"The type of the third child does not match.\");\n\t\t\t\t\t\tvar broken2 = (BodyPartMultipart) mixed.BodyParts[2];\n\t\t\t\t\t\tAssert.That (broken2.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken2.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[3], Is.InstanceOf<BodyPartMultipart> (), \"The type of the fourth child does not match.\");\n\t\t\t\t\t\tvar broken3 = (BodyPartMultipart) mixed.BodyParts[3];\n\t\t\t\t\t\tAssert.That (broken3.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken3.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[4], Is.InstanceOf<BodyPartMultipart> (), \"The type of the fifth child does not match.\");\n\t\t\t\t\t\tvar broken4 = (BodyPartMultipart) mixed.BodyParts[4];\n\t\t\t\t\t\tAssert.That (broken4.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken4.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests the work-around for issue #777\n\t\t[Test]\n\t\tpublic async Task TestParseGMailBadlyFormedMultipartBodyStructure2Async ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"UTF-8\\\" \\\"DELSP\\\" \\\"yes\\\" \\\"FORMAT\\\" \\\"flowed\\\") NIL NIL \\\"BASE64\\\" 10418 133 NIL NIL NIL)(\\\"TEXT\\\" \\\"HTML\\\" (\\\"CHARSET\\\" \\\"UTF-8\\\") NIL NIL \\\"BASE64\\\" 34544 442 NIL NIL NIL) \\\"ALTERNATIVE\\\" (\\\"BOUNDARY\\\" \\\"94eb2c1cd0507723d5054c1ce6cb\\\") NIL NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL)(\\\"RELATED\\\" NIL (\\\"ATTACHMENT\\\" NIL) NIL) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"94eb2c1cd0507723e6054c1ce6cd\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar mixed = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (mixed.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (mixed.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"94eb2c1cd0507723e6054c1ce6cd\"), \"multipart/mixed boundary param did not match\");\n\t\t\t\t\t\tAssert.That (mixed.BodyParts, Has.Count.EqualTo (5), \"multipart/mixed BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tvar alternative = (BodyPartMultipart) mixed.BodyParts[0];\n\t\t\t\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"multipart/alternative Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (alternative.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"94eb2c1cd0507723d5054c1ce6cb\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (alternative.BodyParts, Has.Count.EqualTo (2), \"multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (alternative.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tvar plain = (BodyPartText) alternative.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"UTF-8\"), \"text/plain charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Format, Is.EqualTo (\"flowed\"), \"text/plain format parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Parameters[\"delsp\"], Is.EqualTo (\"yes\"), \"text/plain delsp parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"BASE64\"), \"text/plain Content-Transfer-Encoding did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (10418), \"text/plain Octets do not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (133), \"text/plain Lines don't match\");\n\n\t\t\t\t\t\tAssert.That (alternative.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tvar html = (BodyPartText) alternative.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"text/html Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"UTF-8\"), \"text/html charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (html.ContentTransferEncoding, Is.EqualTo (\"BASE64\"), \"text/phtml Content-Transfer-Encoding did not match\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (34544), \"text/html Octets do not match\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (442), \"text/html Lines don't match\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[1], Is.InstanceOf<BodyPartMultipart> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tvar broken1 = (BodyPartMultipart) mixed.BodyParts[1];\n\t\t\t\t\t\tAssert.That (broken1.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken1.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[2], Is.InstanceOf<BodyPartMultipart> (), \"The type of the third child does not match.\");\n\t\t\t\t\t\tvar broken2 = (BodyPartMultipart) mixed.BodyParts[2];\n\t\t\t\t\t\tAssert.That (broken2.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken2.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[3], Is.InstanceOf<BodyPartMultipart> (), \"The type of the fourth child does not match.\");\n\t\t\t\t\t\tvar broken3 = (BodyPartMultipart) mixed.BodyParts[3];\n\t\t\t\t\t\tAssert.That (broken3.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken3.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (mixed.BodyParts[4], Is.InstanceOf<BodyPartMultipart> (), \"The type of the fifth child does not match.\");\n\t\t\t\t\t\tvar broken4 = (BodyPartMultipart) mixed.BodyParts[4];\n\t\t\t\t\t\tAssert.That (broken4.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"multipart/related Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (broken4.BodyParts, Is.Empty, \"multipart/related BodyParts count does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for issue #371 (except that the example from issue #371 is also missing body-fld-enc and body-fld-octets)\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithEmptyStringMediaType ()\n\t\t{\n\t\t\tconst string text = \"((\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"windows-1251\\\") NIL NIL \\\"base64\\\" 356 5)( \\\"X-ZIP\\\" (\\\"BOUNDARY\\\" \\\"\\\") NIL NIL \\\"base64\\\" 4096) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic xzip;\n\t\t\t\t\t\tBodyPartText plain;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"windows-1251\"), \"text/plain charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (356), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (5), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\txzip = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (xzip.ContentType.IsMimeType (\"application\", \"x-zip\"), Is.True, \"x-zip Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (xzip.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"\"), \"x-zip boundary parameter did not match\");\n\t\t\t\t\t\tAssert.That (xzip.Octets, Is.EqualTo (4096), \"x-zip octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for issue #371 (except that the example from issue #371 is also missing body-fld-enc and body-fld-octets)\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithEmptyStringMediaTypeAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"windows-1251\\\") NIL NIL \\\"base64\\\" 356 5)( \\\"X-ZIP\\\" (\\\"BOUNDARY\\\" \\\"\\\") NIL NIL \\\"base64\\\" 4096) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic xzip;\n\t\t\t\t\t\tBodyPartText plain;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"windows-1251\"), \"text/plain charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (356), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (5), \"text/plain lines did not match\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\txzip = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (xzip.ContentType.IsMimeType (\"application\", \"x-zip\"), Is.True, \"x-zip Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (xzip.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"\"), \"x-zip boundary parameter did not match\");\n\t\t\t\t\t\tAssert.That (xzip.Octets, Is.EqualTo (4096), \"x-zip octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeApplication ()\n\t\t{\n\t\t\tconst string text = \"((\\\"APPLICATION\\\" NIL NIL NIL \\\"base64\\\" 356) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"application\", \"octet-stream\"), Is.True, \"application/octet-stream Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (356), \"application/octet-stream octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeApplicationAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"APPLICATION\\\" NIL NIL NIL \\\"base64\\\" 356) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"application\", \"octet-stream\"), Is.True, \"application/octet-stream Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (356), \"application/octet-stream octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeAudio ()\n\t\t{\n\t\t\tconst string text = \"((\\\"AUDIO\\\" NIL NIL NIL \\\"base64\\\" 356) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"application\", \"audio\"), Is.True, \"application/audio Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (356), \"application/audio octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeAudioAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"AUDIO\\\" NIL NIL NIL \\\"base64\\\" 356) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"application\", \"audio\"), Is.True, \"application/audio Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (356), \"application/audio octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeMessage ()\n\t\t{\n\t\t\tconst string text = \"((\\\"MESSAGE\\\" NIL NIL NIL \\\"base64\\\" 356) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"application\", \"message\"), Is.True, \"application/message Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (356), \"application/message octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeMessageAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"MESSAGE\\\" NIL NIL NIL \\\"base64\\\" 356) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"application\", \"message\"), Is.True, \"application/message Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (356), \"application/message octets did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeText ()\n\t\t{\n\t\t\tconst string text = \"((\\\"TEXT\\\" (\\\"CHARSET\\\" \\\"windows-1251\\\") NIL NIL \\\"base64\\\" 356 5) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartText plain;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"windows-1251\"), \"text/plain charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (356), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (5), \"text/plain lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithMissingMediaSubtypeTextAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"TEXT\\\" (\\\"CHARSET\\\" \\\"windows-1251\\\") NIL NIL \\\"base64\\\" 356 5) \\\"MIXED\\\" (\\\"BOUNDARY\\\" \\\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartText plain;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"multipart/mixed Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"--cd49a2f5ed4ed0cbb6f9f1c7f125541f\"), \"multipart/alternative boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (1), \"outer multipart/alternative BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"text/plain Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"windows-1251\"), \"text/plain charset parameter did not match\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (356), \"text/plain octets did not match\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (5), \"text/plain lines did not match\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for issue #485\n\t\t[Test]\n\t\tpublic void TestParseBadlyQuotedBodyStructure ()\n\t\t{\n\t\t\tconst string text = \"((\\\"MOUNDARY=\\\"_006_5DBB50A5A54730AD4A54730AD4A54730AD4A54730AD42KOS_\\\"\\\" \\\"OCTET-STREAM\\\" (\\\"name\\\" \\\"test.dat\\\") NIL NIL \\\"quoted-printable\\\" 383137 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"test.dat\\\")))(\\\"MOUNDARY=\\\"_006_5DBB50A5D3ABEC4E85A03EAD527CA5474B3D0AF9E6EXMBXSVR02KOS_\\\"\\\" \\\"OCTET-STREAM\\\" (\\\"name\\\" \\\"test.dat\\\") NIL NIL \\\"quoted-printable\\\" 383137 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"test.dat\\\"))) \\\"MIXED\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_730AD4A547.730AD4A547F40\\\"))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters [\"boundary\"], Is.EqualTo (\"----=_NextPart_000_730AD4A547.730AD4A547F40\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaType, Is.EqualTo (\"MOUNDARY=\\\"_006_5DBB50A5A54730AD4A54730AD4A54730AD4A54730AD42KOS_\\\"\"), \"ContentType.MediaType does not match for first child.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaType, Is.EqualTo (\"MOUNDARY=\\\"_006_5DBB50A5D3ABEC4E85A03EAD527CA5474B3D0AF9E6EXMBXSVR02KOS_\\\"\"), \"ContentType.MediaType does not match for second child.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for issue #485\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyQuotedBodyStructureAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"MOUNDARY=\\\"_006_5DBB50A5A54730AD4A54730AD4A54730AD4A54730AD42KOS_\\\"\\\" \\\"OCTET-STREAM\\\" (\\\"name\\\" \\\"test.dat\\\") NIL NIL \\\"quoted-printable\\\" 383137 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"test.dat\\\")))(\\\"MOUNDARY=\\\"_006_5DBB50A5D3ABEC4E85A03EAD527CA5474B3D0AF9E6EXMBXSVR02KOS_\\\"\\\" \\\"OCTET-STREAM\\\" (\\\"name\\\" \\\"test.dat\\\") NIL NIL \\\"quoted-printable\\\" 383137 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"test.dat\\\"))) \\\"MIXED\\\" (\\\"boundary\\\" \\\"----=_NextPart_000_730AD4A547.730AD4A547F40\\\"))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_NextPart_000_730AD4A547.730AD4A547F40\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaType, Is.EqualTo (\"MOUNDARY=\\\"_006_5DBB50A5A54730AD4A54730AD4A54730AD4A54730AD42KOS_\\\"\"), \"ContentType.MediaType does not match for first child.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaType, Is.EqualTo (\"MOUNDARY=\\\"_006_5DBB50A5D3ABEC4E85A03EAD527CA5474B3D0AF9E6EXMBXSVR02KOS_\\\"\"), \"ContentType.MediaType does not match for second child.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseMultipartBodyStructureWithNilBodyFldParam ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"7bit\\\" 148 12 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"quoted-printable\\\" 337 6 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"6c7f221bed92d80548353834d8e2\\\") NIL NIL NIL)((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"us-ascii\\\") NIL NIL \\\"7bit\\\" 0 0) \\\"x-zip\\\" NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"YSOZ 265230.ZIP\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"c52bbfc0dd5365efa39b9f80eac3\\\") NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart, alternative, xzip;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"c52bbfc0dd5365efa39b9f80eac3\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\talternative = (BodyPartMultipart) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (alternative.ContentType.MediaSubtype, Is.EqualTo (\"alternative\"), \"Content-Type did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartMultipart> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\txzip = (BodyPartMultipart) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (xzip.ContentType.MediaSubtype, Is.EqualTo (\"x-zip\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (xzip.ContentType.Parameters, Is.Empty, \"Content-Type should not have params.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseMultipartBodyStructureWithNilBodyFldParamAsync ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"7bit\\\" 148 12 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"quoted-printable\\\" 337 6 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"6c7f221bed92d80548353834d8e2\\\") NIL NIL NIL)((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"us-ascii\\\") NIL NIL \\\"7bit\\\" 0 0) \\\"x-zip\\\" NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"YSOZ 265230.ZIP\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"c52bbfc0dd5365efa39b9f80eac3\\\") NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart, alternative, xzip;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"c52bbfc0dd5365efa39b9f80eac3\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\talternative = (BodyPartMultipart) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (alternative.ContentType.MediaSubtype, Is.EqualTo (\"alternative\"), \"Content-Type did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartMultipart> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\txzip = (BodyPartMultipart) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (xzip.ContentType.MediaSubtype, Is.EqualTo (\"x-zip\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (xzip.ContentType.Parameters, Is.Empty, \"Content-Type should not have params.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseMultipartBodyStructureWithoutBodyFldDsp ()\n\t\t{\n\t\t\t// Test case from https://stackoverflow.com/questions/33481604/mailkit-fetch-unexpected-token-in-imap-response-qstring-multipart-message\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL \\\"Message text\\\" \\\"Quoted-printable\\\" 209 6 NIL (\\\"inline\\\" NIL) NIL NIL)(\\\"text\\\" \\\"xml\\\" (\\\"name\\\" \\\"4441004299066.xml\\\") NIL \\\"4441004299066.xml\\\" \\\"Base64\\\" 10642 137 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"4441004299066.xml\\\")) NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"4441004299066.pdf\\\") NIL \\\"4441004299066.pdf\\\" \\\"Base64\\\" 48448 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"4441004299066.pdf\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"6624CFB2_17170C36_Synapse_boundary\\\") \\\"Multipart message\\\" NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters [\"boundary\"], Is.EqualTo (\"6624CFB2_17170C36_Synapse_boundary\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaSubtype, Is.EqualTo (\"plain\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDescription, Is.EqualTo (\"Message text\"), \"Content-Description does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaSubtype, Is.EqualTo (\"xml\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDescription, Is.EqualTo (\"4441004299066.xml\"), \"Content-Description does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartBasic> (), \"The type of the third child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaType, Is.EqualTo (\"application\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaSubtype, Is.EqualTo (\"pdf\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDescription, Is.EqualTo (\"4441004299066.pdf\"), \"Content-Description does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseMultipartBodyStructureWithoutBodyFldDspAsync ()\n\t\t{\n\t\t\t// Test case from https://stackoverflow.com/questions/33481604/mailkit-fetch-unexpected-token-in-imap-response-qstring-multipart-message\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL \\\"Message text\\\" \\\"Quoted-printable\\\" 209 6 NIL (\\\"inline\\\" NIL) NIL NIL)(\\\"text\\\" \\\"xml\\\" (\\\"name\\\" \\\"4441004299066.xml\\\") NIL \\\"4441004299066.xml\\\" \\\"Base64\\\" 10642 137 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"4441004299066.xml\\\")) NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"4441004299066.pdf\\\") NIL \\\"4441004299066.pdf\\\" \\\"Base64\\\" 48448 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"4441004299066.pdf\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"6624CFB2_17170C36_Synapse_boundary\\\") \\\"Multipart message\\\" NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"6624CFB2_17170C36_Synapse_boundary\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaSubtype, Is.EqualTo (\"plain\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDescription, Is.EqualTo (\"Message text\"), \"Content-Description does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaSubtype, Is.EqualTo (\"xml\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDescription, Is.EqualTo (\"4441004299066.xml\"), \"Content-Description does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartBasic> (), \"The type of the third child does not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaType, Is.EqualTo (\"application\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentType.MediaSubtype, Is.EqualTo (\"pdf\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDescription, Is.EqualTo (\"4441004299066.pdf\"), \"Content-Description does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for issue #919\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithNonParenthesizedBodyFldDsp ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"ISO-8859-1\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 850 31 NIL \\\"inline\\\" NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"ISO-8859-1\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 14692 502 NIL \\\"inline\\\" NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_Part_45280395_786508794.1562673197246\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartText plain, html;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_Part_45280395_786508794.1562673197246\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.MimeType, Is.EqualTo (\"text/plain\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"ISO-8859-1\"), \"Content-Type charset parameter did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"QUOTED-PRINTABLE\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (850), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (31), \"Lines did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\thtml = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.MimeType, Is.EqualTo (\"text/html\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"ISO-8859-1\"), \"Content-Type charset parameter did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentTransferEncoding, Is.EqualTo (\"QUOTED-PRINTABLE\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (14692), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (502), \"Lines did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for issue #919\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithNonParenthesizedBodyFldDspAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"ISO-8859-1\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 850 31 NIL \\\"inline\\\" NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"ISO-8859-1\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 14692 502 NIL \\\"inline\\\" NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"----=_Part_45280395_786508794.1562673197246\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartText plain, html;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"----=_Part_45280395_786508794.1562673197246\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.MimeType, Is.EqualTo (\"text/plain\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"ISO-8859-1\"), \"Content-Type charset parameter did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"QUOTED-PRINTABLE\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (850), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (31), \"Lines did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\thtml = (BodyPartText) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (html.ContentType.MimeType, Is.EqualTo (\"text/html\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentType.Charset, Is.EqualTo (\"ISO-8859-1\"), \"Content-Type charset parameter did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentTransferEncoding, Is.EqualTo (\"QUOTED-PRINTABLE\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (html.Octets, Is.EqualTo (14692), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (html.Lines, Is.EqualTo (502), \"Lines did not match.\");\n\t\t\t\t\t\tAssert.That (html.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for an Exchange bug\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithNilNilBodyFldDsp ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL \\\"Mail message body\\\" \\\"quoted-printable\\\" 2201 34 NIL NIL NIL NIL)(\\\"application\\\" \\\"msword\\\" NIL NIL NIL \\\"base64\\\" 50446 NIL (NIL NIL) NIL NIL)(\\\"application\\\" \\\"msword\\\" NIL NIL NIL \\\"base64\\\" 45544 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"PREIS ANSPRUCHS FORMULAR.doc\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"===============1176586998==\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic msword;\n\t\t\t\t\t\tBodyPartText plain;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"===============1176586998==\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.MimeType, Is.EqualTo (\"text/plain\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"Content-Type charset parameter did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"quoted-printable\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentDescription, Is.EqualTo (\"Mail message body\"), \"Content-Description did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (2201), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (34), \"Lines did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition, Is.Null, \"Content-Disposition did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tmsword = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (msword.ContentType.MimeType, Is.EqualTo (\"application/msword\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (msword.Octets, Is.EqualTo (50446), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentDisposition, Is.Null, \"Content-Disposition did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tmsword = (BodyPartBasic) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (msword.ContentType.MimeType, Is.EqualTo (\"application/msword\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (msword.Octets, Is.EqualTo (45544), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentDisposition.Disposition, Is.EqualTo (\"attachment\"), \"Content-Disposition did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentDisposition.FileName, Is.EqualTo (\"PREIS ANSPRUCHS FORMULAR.doc\"), \"Filename parameters do not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: This tests the work-around for an Exchange bug\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithNilNilBodyFldDspAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"iso-8859-1\\\") NIL \\\"Mail message body\\\" \\\"quoted-printable\\\" 2201 34 NIL NIL NIL NIL)(\\\"application\\\" \\\"msword\\\" NIL NIL NIL \\\"base64\\\" 50446 NIL (NIL NIL) NIL NIL)(\\\"application\\\" \\\"msword\\\" NIL NIL NIL \\\"base64\\\" 45544 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"PREIS ANSPRUCHS FORMULAR.doc\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"===============1176586998==\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPartBasic msword;\n\t\t\t\t\t\tBodyPartText plain;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (body.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (body.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"===============1176586998==\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"The type of the first child does not match.\");\n\t\t\t\t\t\tplain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentType.MimeType, Is.EqualTo (\"text/plain\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"iso-8859-1\"), \"Content-Type charset parameter did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"quoted-printable\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentDescription, Is.EqualTo (\"Mail message body\"), \"Content-Description did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (2201), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (34), \"Lines did not match.\");\n\t\t\t\t\t\tAssert.That (plain.ContentDisposition, Is.Null, \"Content-Disposition did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tmsword = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (msword.ContentType.MimeType, Is.EqualTo (\"application/msword\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (msword.Octets, Is.EqualTo (50446), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentDisposition, Is.Null, \"Content-Disposition did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartBasic> (), \"The type of the second child does not match.\");\n\t\t\t\t\t\tmsword = (BodyPartBasic) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (msword.ContentType.MimeType, Is.EqualTo (\"application/msword\"), \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (msword.Octets, Is.EqualTo (45544), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentDisposition.Disposition, Is.EqualTo (\"attachment\"), \"Content-Disposition did not match.\");\n\t\t\t\t\t\tAssert.That (msword.ContentDisposition.FileName, Is.EqualTo (\"PREIS ANSPRUCHS FORMULAR.doc\"), \"Filename parameters do not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithSwappedBodyFldDspAndBodyFldLang ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"format\\\" \\\"flowed\\\" \\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"8bit\\\" 314 8 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"8bit\\\" 763 18 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"b3_f0dcbd2fdb06033cba91309b09af1cd8\\\") NIL NIL NIL NIL)(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"18e5ca259ceb18af6dd3ea0659f83a4c\\\") \\\"<18e5ca259ceb18af6dd3ea0659f83a4c>\\\" NIL \\\"base64\\\" 334384 NIL NIL NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"87c487a1ff757e32ee27ff267d28af35\\\") \\\"<87c487a1ff757e32ee27ff267d28af35>\\\" NIL \\\"base64\\\" 375634 NIL NIL NIL NIL) \\\"related\\\" (\\\"type\\\" \\\"multipart/alternative\\\" \\\"charset\\\" \\\"UTF-8\\\" \\\"boundary\\\" \\\"b1_f0dcbd2fdb06033cba91309b09af1cd8\\\") NIL (\\\"inline\\\" NIL) NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"b1_f0dcbd2fdb06033cba91309b09af1cd8\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"Content-Language lengths do not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"inline\"), \"Content-Language does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithSwappedBodyFldDspAndBodyFldLangAsync ()\n\t\t{\n\t\t\tconst string text = \"(((\\\"text\\\" \\\"plain\\\" (\\\"format\\\" \\\"flowed\\\" \\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"8bit\\\" 314 8 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"UTF-8\\\") NIL NIL \\\"8bit\\\" 763 18 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"b3_f0dcbd2fdb06033cba91309b09af1cd8\\\") NIL NIL NIL NIL)(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"18e5ca259ceb18af6dd3ea0659f83a4c\\\") \\\"<18e5ca259ceb18af6dd3ea0659f83a4c>\\\" NIL \\\"base64\\\" 334384 NIL NIL NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"87c487a1ff757e32ee27ff267d28af35\\\") \\\"<87c487a1ff757e32ee27ff267d28af35>\\\" NIL \\\"base64\\\" 375634 NIL NIL NIL NIL) \\\"related\\\" (\\\"type\\\" \\\"multipart/alternative\\\" \\\"charset\\\" \\\"UTF-8\\\" \\\"boundary\\\" \\\"b1_f0dcbd2fdb06033cba91309b09af1cd8\\\") NIL (\\\"inline\\\" NIL) NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartMultipart multipart;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tmultipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"b1_f0dcbd2fdb06033cba91309b09af1cd8\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"BodyParts count does not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"Content-Language lengths do not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"inline\"), \"Content-Language does not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests a work-around for a bug in Exchange that was reported via email.\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithNegativeOctetValue ()\n\t\t{\n\t\t\tconst string text = \"(\\\"multipart\\\" \\\"digest\\\" (\\\"boundary\\\" \\\"ommgDs4vJ6fX2nQAghXj4aUy9wsHMMDb\\\") NIL NIL \\\"7BIT\\\" -1 NIL NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartBasic> (), \"Body types did not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) body;\n\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"multipart\", \"digest\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"ommgDs4vJ6fX2nQAghXj4aUy9wsHMMDb\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (basic.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (0), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDisposition, Is.Null, \"Content-Disposition did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This tests a work-around for a bug in Exchange that was reported via email.\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithNegativeOctetValueAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\"multipart\\\" \\\"digest\\\" (\\\"boundary\\\" \\\"ommgDs4vJ6fX2nQAghXj4aUy9wsHMMDb\\\") NIL NIL \\\"7BIT\\\" -1 NIL NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPartBasic basic;\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Unexpected token: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartBasic> (), \"Body types did not match.\");\n\t\t\t\t\t\tbasic = (BodyPartBasic) body;\n\n\t\t\t\t\t\tAssert.That (basic.ContentType.IsMimeType (\"multipart\", \"digest\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentType.Parameters[\"boundary\"], Is.EqualTo (\"ommgDs4vJ6fX2nQAghXj4aUy9wsHMMDb\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (basic.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (basic.Octets, Is.EqualTo (0), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (basic.ContentDisposition, Is.Null, \"Content-Disposition did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBodyStructureWithNilMultipartBody ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"7bit\\\" 727 16 NIL NIL NIL NIL)(\\\"message\\\" \\\"delivery-status\\\" (\\\"name\\\" \\\"Delivery status\\\") NIL NIL \\\"7bit\\\" 416 NIL NIL NIL NIL)(\\\"message\\\" \\\"rfc822\\\" (\\\"name\\\" \\\"Message headers\\\") NIL NIL \\\"7bit\\\" 903 (\\\"Mon, 17 Nov 2014 13:29:21 +0100\\\" \\\"Re: Adresy\\\" ((\\\"username\\\" NIL \\\"e.username\\\" \\\"example.com\\\")) ((\\\"username\\\" NIL \\\"e.username\\\" \\\"example.com\\\")) ((\\\"username\\\" NIL \\\"e.username\\\" \\\"example.com\\\")) ((\\\"=?utf-8?Q?Justyna?=\\\" NIL \\\"salesde\\\" \\\"some-company.eu\\\")) ((NIL NIL \\\"saleseu\\\" \\\"some-company.eu\\\")(\\\"Bogdan\\\" NIL \\\"bogdan\\\" \\\"some-company.eu\\\")) NIL \\\"<004901d00260$35405970$9fc10c50$@some-company.eu>\\\" \\\"<D6173425-9D71-4D78-8C3C-1CEB03BCB4D0@example.com>\\\") (NIL \\\"alternative\\\" (\\\"boundary\\\" \\\"Apple-Mail=_352FCEEC-EB15-428F-9D8B-D3B4259DD646\\\") NIL NIL NIL) 17 NIL NIL NIL NIL) \\\"report\\\" (\\\"report-type\\\" \\\"delivery-status\\\" \\\"boundary\\\" \\\"_e0d7475d888f9882b71de053e5efb221_idea\\\") NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"report\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"report-type\"], Is.EqualTo (\"delivery-status\"), \"report-type param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (\"_e0d7475d888f9882b71de053e5efb221_idea\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"multipart children did not match\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"First multipart subpart types did not match.\");\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (727), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (16), \"Lines did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"Second multipart subpart types did not match.\");\n\t\t\t\t\t\tvar deliveryStatus = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (deliveryStatus.ContentType.Name, Is.EqualTo (\"Delivery status\"), \"name param did not match\");\n\t\t\t\t\t\tAssert.That (deliveryStatus.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (deliveryStatus.Octets, Is.EqualTo (416), \"Octets did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"Third multipart subpart types did not match.\");\n\t\t\t\t\t\tvar rfc822 = (BodyPartMessage) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (rfc822.ContentType.Name, Is.EqualTo (\"Message headers\"), \"name param did not match\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Octets, Is.EqualTo (903), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Lines, Is.EqualTo (17), \"Lines did not match.\");\n\n\t\t\t\t\t\tAssert.That (rfc822.Body, Is.InstanceOf<BodyPartMultipart> (), \"rfc822 body types did not match.\");\n\t\t\t\t\t\tvar alternative = (BodyPartMultipart) rfc822.Body;\n\t\t\t\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (alternative.ContentType.Boundary, Is.EqualTo (\"Apple-Mail=_352FCEEC-EB15-428F-9D8B-D3B4259DD646\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (alternative.BodyParts, Is.Empty, \"alternative bodyparts count did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBodyStructureWithNilMultipartBodyAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"7bit\\\" 727 16 NIL NIL NIL NIL)(\\\"message\\\" \\\"delivery-status\\\" (\\\"name\\\" \\\"Delivery status\\\") NIL NIL \\\"7bit\\\" 416 NIL NIL NIL NIL)(\\\"message\\\" \\\"rfc822\\\" (\\\"name\\\" \\\"Message headers\\\") NIL NIL \\\"7bit\\\" 903 (\\\"Mon, 17 Nov 2014 13:29:21 +0100\\\" \\\"Re: Adresy\\\" ((\\\"username\\\" NIL \\\"e.username\\\" \\\"example.com\\\")) ((\\\"username\\\" NIL \\\"e.username\\\" \\\"example.com\\\")) ((\\\"username\\\" NIL \\\"e.username\\\" \\\"example.com\\\")) ((\\\"=?utf-8?Q?Justyna?=\\\" NIL \\\"salesde\\\" \\\"some-company.eu\\\")) ((NIL NIL \\\"saleseu\\\" \\\"some-company.eu\\\")(\\\"Bogdan\\\" NIL \\\"bogdan\\\" \\\"some-company.eu\\\")) NIL \\\"<004901d00260$35405970$9fc10c50$@some-company.eu>\\\" \\\"<D6173425-9D71-4D78-8C3C-1CEB03BCB4D0@example.com>\\\") (NIL \\\"alternative\\\" (\\\"boundary\\\" \\\"Apple-Mail=_352FCEEC-EB15-428F-9D8B-D3B4259DD646\\\") NIL NIL NIL) 17 NIL NIL NIL NIL) \\\"report\\\" (\\\"report-type\\\" \\\"delivery-status\\\" \\\"boundary\\\" \\\"_e0d7475d888f9882b71de053e5efb221_idea\\\") NIL NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\t\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\t\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"report\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Parameters[\"report-type\"], Is.EqualTo (\"delivery-status\"), \"report-type param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (\"_e0d7475d888f9882b71de053e5efb221_idea\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"multipart children did not match\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"First multipart subpart types did not match.\");\n\t\t\t\t\t\tvar plain = (BodyPartText) multipart.BodyParts[0];\n\t\t\t\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Octets, Is.EqualTo (727), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (plain.Lines, Is.EqualTo (16), \"Lines did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"Second multipart subpart types did not match.\");\n\t\t\t\t\t\tvar deliveryStatus = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\t\t\t\tAssert.That (deliveryStatus.ContentType.Name, Is.EqualTo (\"Delivery status\"), \"name param did not match\");\n\t\t\t\t\t\tAssert.That (deliveryStatus.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (deliveryStatus.Octets, Is.EqualTo (416), \"Octets did not match.\");\n\n\t\t\t\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"Third multipart subpart types did not match.\");\n\t\t\t\t\t\tvar rfc822 = (BodyPartMessage) multipart.BodyParts[2];\n\t\t\t\t\t\tAssert.That (rfc822.ContentType.Name, Is.EqualTo (\"Message headers\"), \"name param did not match\");\n\t\t\t\t\t\tAssert.That (rfc822.ContentTransferEncoding, Is.EqualTo (\"7bit\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Octets, Is.EqualTo (903), \"Octets did not match.\");\n\t\t\t\t\t\tAssert.That (rfc822.Lines, Is.EqualTo (17), \"Lines did not match.\");\n\n\t\t\t\t\t\tAssert.That (rfc822.Body, Is.InstanceOf<BodyPartMultipart> (), \"rfc822 body types did not match.\");\n\t\t\t\t\t\tvar alternative = (BodyPartMultipart) rfc822.Body;\n\t\t\t\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\t\t\tAssert.That (alternative.ContentType.Boundary, Is.EqualTo (\"Apple-Mail=_352FCEEC-EB15-428F-9D8B-D3B4259DD646\"), \"boundary param did not match\");\n\t\t\t\t\t\tAssert.That (alternative.BodyParts, Is.Empty, \"alternative bodyparts count did not match.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertParseBadlyFormedBodyStructureWithCompletelyNilBodyParts1 (BodyPart body)\n\t\t{\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"mixed\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (\"008_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\"), \"boundary param did not match\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (2), \"multipart children did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"First multipart/mixed subpart types did not match.\");\n\t\t\tvar related = (BodyPartMultipart) multipart.BodyParts[0];\n\t\t\tAssert.That (related.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (related.ContentType.Parameters[\"type\"], Is.EqualTo (\"multipart/alternative\"), \"type param did not match\");\n\t\t\tAssert.That (related.ContentType.Boundary, Is.EqualTo (\"007_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\"), \"boundary param did not match\");\n\t\t\tAssert.That (related.BodyParts, Has.Count.EqualTo (4), \"multipart children did not match\");\n\n\t\t\tAssert.That (related.BodyParts[0], Is.InstanceOf<BodyPartMultipart> (), \"First multipart/related subpart types did not match.\");\n\t\t\tvar alternative = (BodyPartMultipart) related.BodyParts[0];\n\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (alternative.ContentType.Boundary, Is.EqualTo (\"000_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\"), \"boundary param did not match\");\n\t\t\tAssert.That (alternative.BodyParts, Has.Count.EqualTo (2), \"multipart children did not match\");\n\n\t\t\tAssert.That (alternative.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"First multipart/alternative subpart types did not match.\");\n\t\t\tvar plain = (BodyPartText) alternative.BodyParts[0];\n\t\t\tAssert.That (plain.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (plain.ContentType.Charset, Is.EqualTo (\"us-ascii\"), \"Charset parameter did not match\");\n\t\t\tAssert.That (plain.ContentTransferEncoding, Is.EqualTo (\"quoted-printable\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (plain.Octets, Is.EqualTo (44619), \"Octets did not match.\");\n\t\t\tAssert.That (plain.Lines, Is.EqualTo (793), \"Lines did not match.\");\n\n\t\t\tAssert.That (alternative.BodyParts[1], Is.InstanceOf<BodyPartText> (), \"Second multipart/alternative subpart types did not match.\");\n\t\t\tvar html = (BodyPartText) alternative.BodyParts[1];\n\t\t\tAssert.That (html.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (html.ContentTransferEncoding, Is.EqualTo (\"quoted-printable\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (html.Octets, Is.EqualTo (143984), \"Octets did not match.\");\n\t\t\tAssert.That (html.Lines, Is.EqualTo (2321), \"Lines did not match.\");\n\n\t\t\tAssert.That (related.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"Second multipart/related subpart types did not match.\");\n\t\t\tvar jpeg = (BodyPartBasic) related.BodyParts[1];\n\t\t\tAssert.That (jpeg.ContentType.IsMimeType (\"image\", \"jpeg\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (jpeg.ContentType.Name, Is.EqualTo (\"~WRD0000.jpg\"), \"Name parameter did not match\");\n\t\t\tAssert.That (jpeg.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Disposition did not match\");\n\t\t\tAssert.That (jpeg.ContentDisposition.FileName, Is.EqualTo (\"~WRD0000.jpg\"), \"Filename parameter did not match\");\n\t\t\tAssert.That (jpeg.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (jpeg.Octets, Is.EqualTo (1130), \"Octets did not match.\");\n\n\t\t\tAssert.That (related.BodyParts[2], Is.InstanceOf<BodyPartBasic> (), \"Third multipart/related subpart types did not match.\");\n\t\t\tvar png = (BodyPartBasic) related.BodyParts[2];\n\t\t\tAssert.That (png.ContentType.IsMimeType (\"image\", \"png\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (png.ContentType.Name, Is.EqualTo (\"image001.png\"), \"Name parameter did not match\");\n\t\t\tAssert.That (png.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Disposition did not match\");\n\t\t\tAssert.That (png.ContentDisposition.FileName, Is.EqualTo (\"image001.png\"), \"Filename parameter did not match\");\n\t\t\tAssert.That (png.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (png.Octets, Is.EqualTo (8174), \"Octets did not match.\");\n\n\t\t\tAssert.That (related.BodyParts[3], Is.InstanceOf<BodyPartBasic> (), \"Fourth multipart/related subpart types did not match.\");\n\t\t\tpng = (BodyPartBasic) related.BodyParts[3];\n\t\t\tAssert.That (png.ContentType.IsMimeType (\"image\", \"png\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (png.ContentType.Name, Is.EqualTo (\"image002.png\"), \"Name parameter did not match\");\n\t\t\tAssert.That (png.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Disposition did not match\");\n\t\t\tAssert.That (png.ContentDisposition.FileName, Is.EqualTo (\"image002.png\"), \"Filename parameter did not match\");\n\t\t\tAssert.That (png.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (png.Octets, Is.EqualTo (3524), \"Octets did not match.\");\n\n\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartMessage> (), \"Second multipart/mixed subpart types did not match.\");\n\t\t\tvar rfc822 = (BodyPartMessage) multipart.BodyParts[1];\n\t\t\tAssert.That (rfc822.ContentType.Name, Is.EqualTo (null), \"name param did not match\");\n\t\t\tAssert.That (rfc822.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encoding did not match.\");\n\t\t\tAssert.That (rfc822.Octets, Is.EqualTo (0), \"Octets did not match.\");\n\t\t\tAssert.That (rfc822.Lines, Is.EqualTo (0), \"Lines did not match.\");\n\n\t\t\t// Okay, lets skip ahead to the juicy bits...\n\t\t\tmultipart = (BodyPartMultipart) rfc822.Body;\n\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (\"010_18f52bea798548b88470c3df62d666bcScrubbed\"), \"boundary param did not match\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (4), \"multipart children did not match\");\n\n\t\t\trfc822 = (BodyPartMessage) multipart.BodyParts[2];\n\t\t\tmultipart = (BodyPartMultipart) rfc822.Body;\n\t\t\talternative = (BodyPartMultipart) multipart.BodyParts[0];\n\n\t\t\tfor (int i = 0; i < alternative.BodyParts.Count; i++) {\n\t\t\t\tvar nils = (BodyPartBasic) alternative.BodyParts[i];\n\n\t\t\t\tAssert.That (nils.ContentType.IsMimeType (\"application\", \"octet-stream\"), Is.True, \"Content-Type did not match.\");\n\t\t\t\tAssert.That (nils.ContentDescription, Is.Null, \"Content-Description should be null\");\n\t\t\t\tAssert.That (nils.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\t\tAssert.That (nils.ContentId, Is.Null, \"Content-Id should be null\");\n\t\t\t\tAssert.That (nils.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\t\tAssert.That (nils.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\t\tAssert.That (nils.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\t\tAssert.That (nils.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encodings did not match\");\n\t\t\t\tAssert.That (nils.Octets, Is.EqualTo (0), \"Octets did not match\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithCompletelyNilBodyParts1 ()\n\t\t{\n\t\t\tconst string text = \"((((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"us-ascii\\\") NIL NIL \\\"quoted-printable\\\" 44619 793 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"us-ascii\\\") NIL NIL \\\"quoted-printable\\\" 143984 2321 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"000_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\\\") NIL NIL)(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"~WRD0000.jpg\\\") \\\"<~WRD0000.jpg>\\\" \\\"~WRD0000.jpg\\\" \\\"base64\\\" 1130 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"~WRD0000.jpg\\\" \\\"size\\\" \\\"823\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:26:49 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:16 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image001.png\\\") \\\"image001.png@01D89786.45095140\\\" \\\"image001.png\\\" \\\"base64\\\" 8174 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image001.png\\\" \\\"size\\\" \\\"5973\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image002.png\\\") \\\"image002.png@01D89786.45095140\\\" \\\"image002.png\\\" \\\"base64\\\" 3524 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image002.png\\\" \\\"size\\\" \\\"2572\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL) \\\"related\\\" (\\\"boundary\\\" \\\"007_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\\\" \\\"type\\\" \\\"multipart/alternative\\\") NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7BIT\\\" 0 (\\\"Thu, 14 Jul 2022 15:12:33 +0000\\\" \\\"Scrubbed\\\" ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL NIL ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\") (\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL \\\"Scrubbed@Scrubbed.com\\\" \\\"Scrubbed@Scrubbed.com\\\") ((((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"base64\\\" 53608 688 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"utf-8\\\") \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" NIL \\\"base64\\\" 176002 2257 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"000_18f52bea798548b88470c3df62d666bcScrubbed\\\") NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image001.png\\\") \\\"image001.png@01D89770.62F36800\\\" \\\"image001.png\\\" \\\"base64\\\" 8174 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image001.png\\\" \\\"size\\\" \\\"5973\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:32 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image002.jpg\\\") \\\"image002.jpg@01D89770.62F36800\\\" \\\"image002.jpg\\\" \\\"base64\\\" 1130 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image002.jpg\\\" \\\"size\\\" \\\"823\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:32 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image003.png\\\") \\\"image003.png@01D89770.62F36800\\\" \\\"image003.png\\\" \\\"base64\\\" 3524 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image003.png\\\" \\\"size\\\" \\\"2572\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:32 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL) \\\"related\\\" (\\\"boundary\\\" \\\"009_18f52bea798548b88470c3df62d666bcScrubbed\\\" \\\"type\\\" \\\"multipart/alternative\\\") NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Scrubbed.pdf\\\") \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" \\\"Scrubbed.pdf\\\" \\\"base64\\\" 324012 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Scrubbed.pdf\\\" \\\"size\\\" \\\"236776\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 14:53:00 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" NIL \\\"7BIT\\\" 0 (\\\"Tue, 11 Jan 2022 16:34:33 +0000\\\" \\\"RE: Scrubbed\\\" ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL NIL ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\") (\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\") (\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL \\\"Scrubbed@Scrubbed.com\\\" \\\"Scrubbed@Scrubbed.CANPRD01.PROD.OUTLOOK.COM\\\") (((NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL)(NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL)(NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL)(NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL) \\\"related\\\" (\\\"boundary\\\" \\\"007_YT2PR01MB47524CF92A3AD1F75AFF2D25D9519YT2PR01MB4752CANP\\\" \\\"type\\\" \\\"multipart/alternative\\\") NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Scrubbed.pdf\\\") NIL \\\"Scrubbed.pdf\\\" \\\"base64\\\" 215638 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Scrubbed.pdf\\\" \\\"size\\\" \\\"157579\\\" \\\"creation-date\\\" \\\"Wed, 02 Feb 2022 21:33:39 GMT\\\" \\\"modification-date\\\" \\\"Wed, 02 Feb 2022 21:33:39 GMT\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"008_YT2PR01MB47524CF92A3AD1F75AFF2D25D9519YT2PR01MB4752CANP\\\") NIL \\\"en-US\\\") 0 NIL (\\\"attachment\\\" (\\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:31 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Scrubbed.pdf?=\\\") \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" \\\"Scrubbed.pdf?=\\\" \\\"base64\\\" 208376 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Scrubbed.pdf?=\\\" \\\"size\\\" \\\"152274\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:05:00 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"010_18f52bea798548b88470c3df62d666bcScrubbed\\\") NIL \\\"en-US\\\") 0 NIL (\\\"attachment\\\" (\\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:33:16 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"008_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\\\") NIL \\\"en-US\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedBodyStructureWithCompletelyNilBodyParts1 (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithCompletelyNilBodyParts1Async ()\n\t\t{\n\t\t\tconst string text = \"((((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"us-ascii\\\") NIL NIL \\\"quoted-printable\\\" 44619 793 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"us-ascii\\\") NIL NIL \\\"quoted-printable\\\" 143984 2321 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"000_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\\\") NIL NIL)(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"~WRD0000.jpg\\\") \\\"<~WRD0000.jpg>\\\" \\\"~WRD0000.jpg\\\" \\\"base64\\\" 1130 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"~WRD0000.jpg\\\" \\\"size\\\" \\\"823\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:26:49 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:16 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image001.png\\\") \\\"image001.png@01D89786.45095140\\\" \\\"image001.png\\\" \\\"base64\\\" 8174 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image001.png\\\" \\\"size\\\" \\\"5973\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image002.png\\\") \\\"image002.png@01D89786.45095140\\\" \\\"image002.png\\\" \\\"base64\\\" 3524 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image002.png\\\" \\\"size\\\" \\\"2572\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL) \\\"related\\\" (\\\"boundary\\\" \\\"007_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\\\" \\\"type\\\" \\\"multipart/alternative\\\") NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"7BIT\\\" 0 (\\\"Thu, 14 Jul 2022 15:12:33 +0000\\\" \\\"Scrubbed\\\" ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL NIL ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\") (\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL \\\"Scrubbed@Scrubbed.com\\\" \\\"Scrubbed@Scrubbed.com\\\") ((((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"base64\\\" 53608 688 NIL NIL NIL NIL)(\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"utf-8\\\") \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" NIL \\\"base64\\\" 176002 2257 NIL NIL NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"000_18f52bea798548b88470c3df62d666bcScrubbed\\\") NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image001.png\\\") \\\"image001.png@01D89770.62F36800\\\" \\\"image001.png\\\" \\\"base64\\\" 8174 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image001.png\\\" \\\"size\\\" \\\"5973\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:32 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image002.jpg\\\") \\\"image002.jpg@01D89770.62F36800\\\" \\\"image002.jpg\\\" \\\"base64\\\" 1130 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image002.jpg\\\" \\\"size\\\" \\\"823\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:32 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"image003.png\\\") \\\"image003.png@01D89770.62F36800\\\" \\\"image003.png\\\" \\\"base64\\\" 3524 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image003.png\\\" \\\"size\\\" \\\"2572\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:32 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL) \\\"related\\\" (\\\"boundary\\\" \\\"009_18f52bea798548b88470c3df62d666bcScrubbed\\\" \\\"type\\\" \\\"multipart/alternative\\\") NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Scrubbed.pdf\\\") \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" \\\"Scrubbed.pdf\\\" \\\"base64\\\" 324012 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Scrubbed.pdf\\\" \\\"size\\\" \\\"236776\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 14:53:00 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:17 GMT\\\")) NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" NIL \\\"7BIT\\\" 0 (\\\"Tue, 11 Jan 2022 16:34:33 +0000\\\" \\\"RE: Scrubbed\\\" ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL NIL ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) ((\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\") (\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\") (\\\"Scrubbed\\\" NIL \\\"Scrubbed\\\" \\\"Scrubbed\\\")) NIL \\\"Scrubbed@Scrubbed.com\\\" \\\"Scrubbed@Scrubbed.CANPRD01.PROD.OUTLOOK.COM\\\") (((NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL)(NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL)(NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL)(NIL NIL NIL NIL NIL \\\"7BIT\\\" 0 NIL NIL NIL NIL) \\\"related\\\" (\\\"boundary\\\" \\\"007_YT2PR01MB47524CF92A3AD1F75AFF2D25D9519YT2PR01MB4752CANP\\\" \\\"type\\\" \\\"multipart/alternative\\\") NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Scrubbed.pdf\\\") NIL \\\"Scrubbed.pdf\\\" \\\"base64\\\" 215638 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Scrubbed.pdf\\\" \\\"size\\\" \\\"157579\\\" \\\"creation-date\\\" \\\"Wed, 02 Feb 2022 21:33:39 GMT\\\" \\\"modification-date\\\" \\\"Wed, 02 Feb 2022 21:33:39 GMT\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"008_YT2PR01MB47524CF92A3AD1F75AFF2D25D9519YT2PR01MB4752CANP\\\") NIL \\\"en-US\\\") 0 NIL (\\\"attachment\\\" (\\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:12:31 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Scrubbed.pdf?=\\\") \\\"Scrubbed@NAMP221.PROD.OUTLOOK.COM\\\" \\\"Scrubbed.pdf?=\\\" \\\"base64\\\" 208376 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Scrubbed.pdf?=\\\" \\\"size\\\" \\\"152274\\\" \\\"creation-date\\\" \\\"Thu, 14 Jul 2022 15:05:00 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"010_18f52bea798548b88470c3df62d666bcScrubbed\\\") NIL \\\"en-US\\\") 0 NIL (\\\"attachment\\\" (\\\"creation-date\\\" \\\"Thu, 14 Jul 2022 17:33:16 GMT\\\" \\\"modification-date\\\" \\\"Thu, 14 Jul 2022 17:33:18 GMT\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"008_BN0P221MB04483769DDD81948BC7C387DC8889BN0P221MB0448NAMP\\\") NIL \\\"en-US\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedBodyStructureWithCompletelyNilBodyParts1 (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertParseBadlyFormedBodyStructureWithCompletelyNilBodyParts2 (BodyPart body)\n\t\t{\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"report\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (\"272F16D4031920.1659452466/hermes.gatewaynet.com\"), \"boundary param did not match\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"multipart children did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartBasic> (), \"First multipart/report subpart types did not match.\");\n\t\t\tvar nils = (BodyPartBasic) multipart.BodyParts[0];\n\t\t\tAssert.That (nils.ContentType.IsMimeType (\"application\", \"octet-stream\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (nils.ContentDescription, Is.Null, \"Content-Description should be null\");\n\t\t\tAssert.That (nils.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (nils.ContentId, Is.Null, \"Content-Id should be null\");\n\t\t\tAssert.That (nils.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (nils.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (nils.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (nils.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (nils.Octets, Is.EqualTo (563), \"Octets did not match\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithCompletelyNilBodyParts2 ()\n\t\t{\n\t\t\tconst string text = \"((NIL NIL NIL NIL NIL \\\"7BIT\\\" 563 NIL NIL NIL NIL)(\\\"message\\\" \\\"delivery-status\\\" NIL NIL NIL \\\"7BIT\\\" 658 NIL NIL NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"8bit\\\" 0 (\\\"Tue, 2 Aug 2022 15:00:47 +0000\\\" \\\"[POSSIBLE SPAM 11.4] Invoices now overdue - 115365#\\\" ((NIL NIL \\\"MAILBOX\\\" \\\"OUR-DOMAIN\\\")) NIL NIL ((NIL NIL \\\"accounts\\\" \\\"OTHER-DOMAIN\\\") (NIL NIL \\\"safety\\\" \\\"OTHER-DOMAIN\\\") (NIL NIL \\\"USER\\\" \\\"OUR-DOMAIN\\\")) NIL NIL NIL \\\"<1IOGPFNLIHU4.377MHPZYJQ6E3@OUR-SERVER>\\\") (((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"8bit\\\" 597 16 NIL NIL NIL NIL)((\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"7BIT\\\" 1611 26 NIL NIL NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"0.dat\\\") \\\"<1KWGPFNLIHU4.4RR7HCVM8MQQ1@OUR-SERVER>\\\" NIL \\\"base64\\\" 14172 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"0.dat\\\")) NIL \\\"0.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"1.dat\\\") \\\"<1KWGPFNLIHU4.UWJ8R86RE2KA2@OUR-SERVER>\\\" NIL \\\"base64\\\" 486 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"1.dat\\\")) NIL \\\"1.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"2.dat\\\") \\\"<1KWGPFNLIHU4.EC7HN124OJC32@OUR-SERVER>\\\" NIL \\\"base64\\\" 506 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"2.dat\\\")) NIL \\\"2.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"3.dat\\\") \\\"<1KWGPFNLIHU4.WM1ALJTG745F1@OUR-SERVER>\\\" NIL \\\"base64\\\" 616 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"3.dat\\\")) NIL \\\"3.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"4.dat\\\") \\\"<1KWGPFNLIHU4.1B42S5EVSF4B2@OUR-SERVER>\\\" NIL \\\"base64\\\" 22470 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"4.dat\\\")) NIL \\\"4.dat\\\") \\\"related\\\" (\\\"boundary\\\" \\\"=-5nEE2FIlRoeXkJyZAHV8UA==\\\" \\\"type\\\" \\\"text/html\\\") NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"=-1sRjeMizXVbc5nGIFXbARA==\\\") NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Reminder.pdf\\\") \\\"<RJ2DSFNLIHU4.UUVSNNY5Z3ER@OUR-SERVER>\\\" NIL \\\"base64\\\" 359650 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Reminder.pdf\\\" \\\"size\\\" \\\"262820\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"=-EJwVTfPtacyNnTqY4DPQ0A==\\\") NIL NIL) 0 NIL NIL NIL NIL) \\\"report\\\" (\\\"report-type\\\" \\\"delivery-status\\\" \\\"boundary\\\" \\\"272F16D4031920.1659452466/hermes.gatewaynet.com\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedBodyStructureWithCompletelyNilBodyParts2 (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithCompletelyNilBodyParts2Async ()\n\t\t{\n\t\t\tconst string text = \"((NIL NIL NIL NIL NIL \\\"7BIT\\\" 563 NIL NIL NIL NIL)(\\\"message\\\" \\\"delivery-status\\\" NIL NIL NIL \\\"7BIT\\\" 658 NIL NIL NIL NIL)(\\\"message\\\" \\\"rfc822\\\" NIL NIL NIL \\\"8bit\\\" 0 (\\\"Tue, 2 Aug 2022 15:00:47 +0000\\\" \\\"[POSSIBLE SPAM 11.4] Invoices now overdue - 115365#\\\" ((NIL NIL \\\"MAILBOX\\\" \\\"OUR-DOMAIN\\\")) NIL NIL ((NIL NIL \\\"accounts\\\" \\\"OTHER-DOMAIN\\\") (NIL NIL \\\"safety\\\" \\\"OTHER-DOMAIN\\\") (NIL NIL \\\"USER\\\" \\\"OUR-DOMAIN\\\")) NIL NIL NIL \\\"<1IOGPFNLIHU4.377MHPZYJQ6E3@OUR-SERVER>\\\") (((\\\"text\\\" \\\"plain\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"8bit\\\" 597 16 NIL NIL NIL NIL)((\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"7BIT\\\" 1611 26 NIL NIL NIL NIL)(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"0.dat\\\") \\\"<1KWGPFNLIHU4.4RR7HCVM8MQQ1@OUR-SERVER>\\\" NIL \\\"base64\\\" 14172 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"0.dat\\\")) NIL \\\"0.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"1.dat\\\") \\\"<1KWGPFNLIHU4.UWJ8R86RE2KA2@OUR-SERVER>\\\" NIL \\\"base64\\\" 486 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"1.dat\\\")) NIL \\\"1.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"2.dat\\\") \\\"<1KWGPFNLIHU4.EC7HN124OJC32@OUR-SERVER>\\\" NIL \\\"base64\\\" 506 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"2.dat\\\")) NIL \\\"2.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"3.dat\\\") \\\"<1KWGPFNLIHU4.WM1ALJTG745F1@OUR-SERVER>\\\" NIL \\\"base64\\\" 616 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"3.dat\\\")) NIL \\\"3.dat\\\")(\\\"image\\\" \\\"png\\\" (\\\"name\\\" \\\"4.dat\\\") \\\"<1KWGPFNLIHU4.1B42S5EVSF4B2@OUR-SERVER>\\\" NIL \\\"base64\\\" 22470 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"4.dat\\\")) NIL \\\"4.dat\\\") \\\"related\\\" (\\\"boundary\\\" \\\"=-5nEE2FIlRoeXkJyZAHV8UA==\\\" \\\"type\\\" \\\"text/html\\\") NIL NIL) \\\"alternative\\\" (\\\"boundary\\\" \\\"=-1sRjeMizXVbc5nGIFXbARA==\\\") NIL NIL)(\\\"application\\\" \\\"pdf\\\" (\\\"name\\\" \\\"Reminder.pdf\\\") \\\"<RJ2DSFNLIHU4.UUVSNNY5Z3ER@OUR-SERVER>\\\" NIL \\\"base64\\\" 359650 NIL (\\\"attachment\\\" (\\\"filename\\\" \\\"Reminder.pdf\\\" \\\"size\\\" \\\"262820\\\")) NIL NIL) \\\"mixed\\\" (\\\"boundary\\\" \\\"=-EJwVTfPtacyNnTqY4DPQ0A==\\\") NIL NIL) 0 NIL NIL NIL NIL) \\\"report\\\" (\\\"report-type\\\" \\\"delivery-status\\\" \\\"boundary\\\" \\\"272F16D4031920.1659452466/hermes.gatewaynet.com\\\") NIL NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedBodyStructureWithCompletelyNilBodyParts2 (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertParseBadlyFormedBodyStructureWithEmptyParensInsteadOfContentLocation (BodyPart body)\n\t\t{\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"related\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (multipart.ContentType.Boundary, Is.EqualTo (\"_004_7D3F5AE184118942976793FC500B8F4A402D17DB3PRD0702MB097eu_\"), \"boundary param did not match\");\n\t\t\tAssert.That (multipart.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (multipart.ContentLanguage, Has.Length.EqualTo (1), \"Content-Language should not be null\");\n\t\t\tAssert.That (multipart.ContentLanguage[0], Is.EqualTo (\"de-DE\"), \"Content-Language did not match\");\n\t\t\tAssert.That (multipart.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (4), \"multipart children did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"First multipart/related subpart types did not match.\");\n\t\t\tvar text = (BodyPartText) multipart.BodyParts[0];\n\t\t\tAssert.That (text.ContentType.IsMimeType (\"text\", \"html\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (text.ContentType.Charset, Is.EqualTo (\"utf-8\"), \"Charset param did not match\");\n\t\t\tAssert.That (text.ContentDescription, Is.Null, \"Content-Description should be null\");\n\t\t\tAssert.That (text.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (text.ContentId, Is.Null, \"Content-Id should be null\");\n\t\t\tAssert.That (text.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (text.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (text.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (text.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (text.Octets, Is.EqualTo (38706), \"Octets did not match\");\n\t\t\tAssert.That (text.Lines, Is.EqualTo (497), \"Lines did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"Second multipart/related subpart types did not match.\");\n\t\t\tvar image1 = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\tAssert.That (image1.ContentType.IsMimeType (\"image\", \"jpeg\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (image1.ContentType.Name, Is.EqualTo (\"image003.jpg\"), \"Name parameter did not match\");\n\t\t\tAssert.That (image1.ContentDescription, Is.EqualTo (\"image003.jpg\"), \"Content-Description should be null\");\n\t\t\tAssert.That (image1.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match\");\n\t\t\tAssert.That (image1.ContentDisposition.Parameters.ToString (), Is.EqualTo (\"; filename=\\\"image003.jpg\\\"; size=\\\"2782\\\"; creation-date=\\\"Thu, 22 Mar 2012 13:56:38 GMT\\\"; modification-date=\\\"Thu, 22 Mar 2012 13:56:38 GMT\\\"\"), \"Content-Disposition parameters did not match\");\n\t\t\tAssert.That (image1.ContentId, Is.EqualTo (\"<image003.jpg@01CD0772.E9574810>\"), \"Content-Id did not match\");\n\t\t\tAssert.That (image1.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (image1.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (image1.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (image1.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (image1.Octets, Is.EqualTo (3446), \"Octets did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartBasic> (), \"Third multipart/related subpart types did not match.\");\n\t\t\tvar image2 = (BodyPartBasic) multipart.BodyParts[2];\n\t\t\tAssert.That (image2.ContentType.IsMimeType (\"image\", \"jpeg\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (image2.ContentType.Name, Is.EqualTo (\"image004.jpg\"), \"Name parameter did not match\");\n\t\t\tAssert.That (image2.ContentDescription, Is.EqualTo (\"image004.jpg\"), \"Content-Description should be null\");\n\t\t\tAssert.That (image2.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match\");\n\t\t\tAssert.That (image2.ContentDisposition.Parameters.ToString (), Is.EqualTo (\"; filename=\\\"image004.jpg\\\"; size=\\\"2782\\\"; creation-date=\\\"Thu, 22 Mar 2012 13:56:39 GMT\\\"; modification-date=\\\"Thu, 22 Mar 2012 13:56:39 GMT\\\"\"), \"Content-Disposition parameters did not match\");\n\t\t\tAssert.That (image2.ContentId, Is.EqualTo (\"<image004.jpg@01CD0772.E9574810>\"), \"Content-Id did not match\");\n\t\t\tAssert.That (image2.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (image2.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (image2.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (image2.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (image2.Octets, Is.EqualTo (3446), \"Octets did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[3], Is.InstanceOf<BodyPartBasic> (), \"Fourth multipart/related subpart types did not match.\");\n\t\t\tvar image3 = (BodyPartBasic) multipart.BodyParts[3];\n\t\t\tAssert.That (image3.ContentType.IsMimeType (\"image\", \"jpeg\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (image3.ContentType.Name, Is.EqualTo (\"image005.jpg\"), \"Name parameter did not match\");\n\t\t\tAssert.That (image3.ContentDescription, Is.EqualTo (\"image005.jpg\"), \"Content-Description should be null\");\n\t\t\tAssert.That (image3.ContentDisposition.Disposition, Is.EqualTo (\"inline\"), \"Content-Disposition did not match\");\n\t\t\tAssert.That (image3.ContentDisposition.Parameters.ToString (), Is.EqualTo (\"; filename=\\\"image005.jpg\\\"; size=\\\"2625\\\"; creation-date=\\\"Thu, 22 Mar 2012 13:56:39 GMT\\\"; modification-date=\\\"Thu, 22 Mar 2012 13:56:39 GMT\\\"\"), \"Content-Disposition parameters did not match\");\n\t\t\tAssert.That (image3.ContentId, Is.EqualTo (\"<image005.jpg@01CD0772.E9574810>\"), \"Content-Id did not match\");\n\t\t\tAssert.That (image3.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (image3.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (image3.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (image3.ContentTransferEncoding, Is.EqualTo (\"base64\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (image3.Octets, Is.EqualTo (3232), \"Octets did not match\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedBodyStructureWithEmptyParensInsteadOfContentLocation ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"base64\\\" 38706 497 NIL NIL NIL ()) (\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image003.jpg\\\") \\\"<image003.jpg@01CD0772.E9574810>\\\" \\\"image003.jpg\\\" \\\"base64\\\" 3446 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image003.jpg\\\" \\\"size\\\" \\\"2782\\\" \\\"creation-date\\\" \\\"Thu, 22 Mar 2012 13:56:38 GMT\\\" \\\"modification-date\\\" \\\"Thu, 22 Mar 2012 13:56:38 GMT\\\")) NIL ()) (\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image004.jpg\\\") \\\"<image004.jpg@01CD0772.E9574810>\\\" \\\"image004.jpg\\\" \\\"base64\\\" 3446 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image004.jpg\\\" \\\"size\\\" \\\"2782\\\" \\\"creation-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\" \\\"modification-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\")) NIL ()) (\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image005.jpg\\\") \\\"<image005.jpg@01CD0772.E9574810>\\\" \\\"image005.jpg\\\" \\\"base64\\\" 3232 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image005.jpg\\\" \\\"size\\\" \\\"2625\\\" \\\"creation-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\" \\\"modification-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\")) NIL ()) \\\"related\\\" (\\\"boundary\\\" \\\"_004_7D3F5AE184118942976793FC500B8F4A402D17DB3PRD0702MB097eu_\\\" \\\"type\\\" \\\"text/html\\\") NIL (\\\"de-DE\\\") NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedBodyStructureWithEmptyParensInsteadOfContentLocation (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedBodyStructureWithEmptyParensInsteadOfContentLocationAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"text\\\" \\\"html\\\" (\\\"charset\\\" \\\"utf-8\\\") NIL NIL \\\"base64\\\" 38706 497 NIL NIL NIL ()) (\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image003.jpg\\\") \\\"<image003.jpg@01CD0772.E9574810>\\\" \\\"image003.jpg\\\" \\\"base64\\\" 3446 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image003.jpg\\\" \\\"size\\\" \\\"2782\\\" \\\"creation-date\\\" \\\"Thu, 22 Mar 2012 13:56:38 GMT\\\" \\\"modification-date\\\" \\\"Thu, 22 Mar 2012 13:56:38 GMT\\\")) NIL ()) (\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image004.jpg\\\") \\\"<image004.jpg@01CD0772.E9574810>\\\" \\\"image004.jpg\\\" \\\"base64\\\" 3446 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image004.jpg\\\" \\\"size\\\" \\\"2782\\\" \\\"creation-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\" \\\"modification-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\")) NIL ()) (\\\"image\\\" \\\"jpeg\\\" (\\\"name\\\" \\\"image005.jpg\\\") \\\"<image005.jpg@01CD0772.E9574810>\\\" \\\"image005.jpg\\\" \\\"base64\\\" 3232 NIL (\\\"inline\\\" (\\\"filename\\\" \\\"image005.jpg\\\" \\\"size\\\" \\\"2625\\\" \\\"creation-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\" \\\"modification-date\\\" \\\"Thu, 22 Mar 2012 13:56:39 GMT\\\")) NIL ()) \\\"related\\\" (\\\"boundary\\\" \\\"_004_7D3F5AE184118942976793FC500B8F4A402D17DB3PRD0702MB097eu_\\\" \\\"type\\\" \\\"text/html\\\") NIL (\\\"de-DE\\\") NIL)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Syntax error in BODYSTRUCTURE: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODYSTRUCTURE failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedBodyStructureWithEmptyParensInsteadOfContentLocation (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertParseBadlyFormedGMailMultipartBodyResponseWithNoChildren (BodyPart body)\n\t\t{\n\t\t\tAssert.That (body, Is.InstanceOf<BodyPartMultipart> (), \"Body types did not match.\");\n\t\t\tvar multipart = (BodyPartMultipart) body;\n\n\t\t\tAssert.That (multipart.ContentType.IsMimeType (\"multipart\", \"report\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (multipart.ContentType.Boundary, Is.Null, \"boundary should be null\");\n\t\t\tAssert.That (multipart.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (multipart.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (multipart.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (multipart.BodyParts, Has.Count.EqualTo (3), \"multipart children did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[0], Is.InstanceOf<BodyPartText> (), \"First multipart/report subpart types did not match.\");\n\t\t\tvar text = (BodyPartText) multipart.BodyParts[0];\n\t\t\tAssert.That (text.ContentType.IsMimeType (\"text\", \"plain\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (text.ContentType.Charset, Is.EqualTo (\"windows-1252\"), \"Charset param did not match\");\n\t\t\tAssert.That (text.ContentDescription, Is.Null, \"Content-Description should be null\");\n\t\t\tAssert.That (text.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (text.ContentId, Is.Null, \"Content-Id should be null\");\n\t\t\tAssert.That (text.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (text.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (text.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (text.ContentTransferEncoding, Is.EqualTo (\"QUOTED-PRINTABLE\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (text.Octets, Is.EqualTo (211), \"Octets did not match\");\n\t\t\tAssert.That (text.Lines, Is.EqualTo (5), \"Lines did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[1], Is.InstanceOf<BodyPartBasic> (), \"Second multipart/report subpart types did not match.\");\n\t\t\tvar deliveryStatus = (BodyPartBasic) multipart.BodyParts[1];\n\t\t\tAssert.That (deliveryStatus.ContentType.IsMimeType (\"message\", \"delivery-status\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (deliveryStatus.ContentDescription, Is.Null, \"Content-Description should be null\");\n\t\t\tAssert.That (deliveryStatus.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (deliveryStatus.ContentId, Is.Null, \"Content-Id should be null\");\n\t\t\tAssert.That (deliveryStatus.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (deliveryStatus.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (deliveryStatus.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (deliveryStatus.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (deliveryStatus.Octets, Is.EqualTo (344), \"Octets did not match\");\n\n\t\t\tAssert.That (multipart.BodyParts[2], Is.InstanceOf<BodyPartMessage> (), \"Third multipart/report subpart types did not match.\");\n\t\t\tvar rfc822 = (BodyPartMessage) multipart.BodyParts[2];\n\t\t\tAssert.That (rfc822.ContentType.IsMimeType (\"message\", \"rfc822\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (rfc822.ContentDescription, Is.Null, \"Content-Description should be null\");\n\t\t\tAssert.That (rfc822.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (rfc822.ContentId, Is.Null, \"Content-Id should be null\");\n\t\t\tAssert.That (rfc822.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (rfc822.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (rfc822.ContentMd5, Is.Null, \"Content-Md5 should be null\");\n\t\t\tAssert.That (rfc822.ContentTransferEncoding, Is.EqualTo (\"7BIT\"), \"Content-Transfer-Encodings did not match\");\n\t\t\tAssert.That (rfc822.Octets, Is.EqualTo (2942), \"Octets did not match\");\n\n\t\t\tAssert.That (rfc822.Body, Is.InstanceOf<BodyPartMultipart> (), \"Body of message/rfc822 did not match.\");\n\t\t\tvar alternative = (BodyPartMultipart) rfc822.Body;\n\t\t\tAssert.That (alternative.ContentType.IsMimeType (\"multipart\", \"alternative\"), Is.True, \"Content-Type did not match.\");\n\t\t\tAssert.That (alternative.ContentType.Boundary, Is.Null, \"boundary should be null\");\n\t\t\tAssert.That (alternative.ContentDisposition, Is.Null, \"Content-Disposition should be null\");\n\t\t\tAssert.That (alternative.ContentLanguage, Is.Null, \"Content-Language should be null\");\n\t\t\tAssert.That (alternative.ContentLocation, Is.Null, \"Content-Location should be null\");\n\t\t\tAssert.That (alternative.BodyParts, Has.Count.EqualTo (0), \"multipart children did not match\");\n\t\t}\n\n\t\t// issue 1841\n\t\t[Test]\n\t\tpublic void TestParseBadlyFormedGMailMultipartBodyResponseWithNoChildren ()\n\t\t{\n\t\t\tconst string text = \"((\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"windows-1252\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 211 5)(\\\"MESSAGE\\\" \\\"DELIVERY-STATUS\\\" NIL NIL NIL \\\"7BIT\\\" 344)(\\\"MESSAGE\\\" \\\"RFC822\\\" NIL NIL NIL \\\"7BIT\\\" 2942 (\\\"Sat, 3 Jan 2015 19:26:15 +0100\\\" \\\"Re: MPG\\\" ((\\\"c p\\\" NIL \\\"---.---87\\\" \\\"gmail.com\\\")) ((\\\"c p\\\" NIL \\\"---.---87\\\" \\\"gmail.com\\\")) ((\\\"c p\\\" NIL \\\"---.---87\\\" \\\"gmail.com\\\")) ((\\\"am sa[cft]\\\" NIL \\\"sm\\\" \\\"cft.ce.fr\\\")) NIL NIL \\\"<D3CAD328B4CFD24E83DD07E8923DFEE902FA8F1B@PRDGCE8P4523.sigce.ce.fr>\\\" \\\"<D4A-8A32-4DC3-AC6C-98429154@gmail.com>\\\") (\\\"ALTERNATIVE\\\") 51) \\\"REPORT\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = ImapUtils.ParseBody (engine, \"Syntax error in BODY: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODY failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedGMailMultipartBodyResponseWithNoChildren (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// issue 1841\n\t\t[Test]\n\t\tpublic async Task TestParseBadlyFormedGMailMultipartBodyResponseWithNoChildrenAsync ()\n\t\t{\n\t\t\tconst string text = \"((\\\"TEXT\\\" \\\"PLAIN\\\" (\\\"CHARSET\\\" \\\"windows-1252\\\") NIL NIL \\\"QUOTED-PRINTABLE\\\" 211 5)(\\\"MESSAGE\\\" \\\"DELIVERY-STATUS\\\" NIL NIL NIL \\\"7BIT\\\" 344)(\\\"MESSAGE\\\" \\\"RFC822\\\" NIL NIL NIL \\\"7BIT\\\" 2942 (\\\"Sat, 3 Jan 2015 19:26:15 +0100\\\" \\\"Re: MPG\\\" ((\\\"c p\\\" NIL \\\"---.---87\\\" \\\"gmail.com\\\")) ((\\\"c p\\\" NIL \\\"---.---87\\\" \\\"gmail.com\\\")) ((\\\"c p\\\" NIL \\\"---.---87\\\" \\\"gmail.com\\\")) ((\\\"am sa[cft]\\\" NIL \\\"sm\\\" \\\"cft.ce.fr\\\")) NIL NIL \\\"<D3CAD328B4CFD24E83DD07E8923DFEE902FA8F1B@PRDGCE8P4523.sigce.ce.fr>\\\" \\\"<D4A-8A32-4DC3-AC6C-98429154@gmail.com>\\\") (\\\"ALTERNATIVE\\\") 51) \\\"REPORT\\\")\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tBodyPart body;\n\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.GMail;\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = await ImapUtils.ParseBodyAsync (engine, \"Syntax error in BODY: {0}\", string.Empty, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing BODY failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssertParseBadlyFormedGMailMultipartBodyResponseWithNoChildren (body);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseExampleThreads ()\n\t\t{\n\t\t\tconst string text = \"(2)(3 6 (4 23)(44 7 96))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar threads = new List<MessageThread> ();\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tImapUtils.ParseThreads (engine, 0, threads, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing THREAD response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (threads, Has.Count.EqualTo (2), \"Expected 2 threads.\");\n\n\t\t\t\t\t\tAssert.That (threads[0].UniqueId.Value.Id, Is.EqualTo ((uint) 2));\n\t\t\t\t\t\tAssert.That (threads[1].UniqueId.Value.Id, Is.EqualTo ((uint) 3));\n\n\t\t\t\t\t\tvar branches = threads[1].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (branches, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (branches[0].UniqueId.Value.Id, Is.EqualTo ((uint) 6));\n\n\t\t\t\t\t\tbranches = branches[0].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (branches, Has.Length.EqualTo (2), \"Expected 2 branches.\");\n\n\t\t\t\t\t\tAssert.That (branches[0].UniqueId.Value.Id, Is.EqualTo ((uint) 4));\n\t\t\t\t\t\tAssert.That (branches[1].UniqueId.Value.Id, Is.EqualTo ((uint) 44));\n\n\t\t\t\t\t\tvar children = branches[0].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (children, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 23));\n\t\t\t\t\t\tAssert.That (children[0].Children, Is.Empty, \"Expected no children.\");\n\n\t\t\t\t\t\tchildren = branches[1].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (children, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 7));\n\n\t\t\t\t\t\tchildren = children[0].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (children, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 96));\n\t\t\t\t\t\tAssert.That (children[0].Children, Is.Empty, \"Expected no children.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseExampleThreadsAsync ()\n\t\t{\n\t\t\tconst string text = \"(2)(3 6 (4 23)(44 7 96))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar threads = new List<MessageThread> ();\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ImapUtils.ParseThreadsAsync (engine, 0, threads, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing THREAD response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (threads, Has.Count.EqualTo (2), \"Expected 2 threads.\");\n\n\t\t\t\t\t\tAssert.That (threads[0].UniqueId.Value.Id, Is.EqualTo ((uint) 2));\n\t\t\t\t\t\tAssert.That (threads[1].UniqueId.Value.Id, Is.EqualTo ((uint) 3));\n\n\t\t\t\t\t\tvar branches = threads[1].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (branches, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (branches[0].UniqueId.Value.Id, Is.EqualTo ((uint) 6));\n\n\t\t\t\t\t\tbranches = branches[0].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (branches, Has.Length.EqualTo (2), \"Expected 2 branches.\");\n\n\t\t\t\t\t\tAssert.That (branches[0].UniqueId.Value.Id, Is.EqualTo ((uint) 4));\n\t\t\t\t\t\tAssert.That (branches[1].UniqueId.Value.Id, Is.EqualTo ((uint) 44));\n\n\t\t\t\t\t\tvar children = branches[0].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (children, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 23));\n\t\t\t\t\t\tAssert.That (children[0].Children, Is.Empty, \"Expected no children.\");\n\n\t\t\t\t\t\tchildren = branches[1].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (children, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 7));\n\n\t\t\t\t\t\tchildren = children[0].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (children, Has.Length.EqualTo (1), \"Expected 1 child.\");\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 96));\n\t\t\t\t\t\tAssert.That (children[0].Children, Is.Empty, \"Expected no children.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseLongDovecotExampleThread ()\n\t\t{\n\t\t\tconst string text = \"(3 4 5 6 7)(1)((2)(8)(15))(9)(16)(10)(11)(12 13)(14)(17)(18)(19)(20)(21)(22)(23)(24)(25 (26)(29 39)(31)(32))(27)(28)(38 35)(30 33 34)(37)(36)(40)(41)((42 43)(44)(48)(49)(50)(51 52))(45)((46)(55))(47)(53)(54)(56)(57 (58)(59)(60)(63))((61)(62))(64)(65)(70)((66)(67)(68)(69)(71))(72 73 (74)(75)(76 77))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar threads = new List<MessageThread> ();\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tImapUtils.ParseThreads (engine, 0, threads, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing THREAD response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (threads, Has.Count.EqualTo (40), \"Expected 40 threads.\");\n\n\t\t\t\t\t\tAssert.That (threads[0].UniqueId.Value.Id, Is.EqualTo ((uint) 3));\n\t\t\t\t\t\tAssert.That (threads[1].UniqueId.Value.Id, Is.EqualTo ((uint) 1));\n\t\t\t\t\t\t//Assert.That (threads[2].UniqueId.Value.Id, Is.EqualTo ((uint) 0));\n\t\t\t\t\t\tAssert.That (threads[2].UniqueId.HasValue, Is.False);\n\n\t\t\t\t\t\tvar branches = threads[2].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (branches, Has.Length.EqualTo (3), \"Expected 3 children.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseLongDovecotExampleThreadAsync ()\n\t\t{\n\t\t\tconst string text = \"(3 4 5 6 7)(1)((2)(8)(15))(9)(16)(10)(11)(12 13)(14)(17)(18)(19)(20)(21)(22)(23)(24)(25 (26)(29 39)(31)(32))(27)(28)(38 35)(30 33 34)(37)(36)(40)(41)((42 43)(44)(48)(49)(50)(51 52))(45)((46)(55))(47)(53)(54)(56)(57 (58)(59)(60)(63))((61)(62))(64)(65)(70)((66)(67)(68)(69)(71))(72 73 (74)(75)(76 77))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar threads = new List<MessageThread> ();\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ImapUtils.ParseThreadsAsync (engine, 0, threads, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing THREAD response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (threads, Has.Count.EqualTo (40), \"Expected 40 threads.\");\n\n\t\t\t\t\t\tAssert.That (threads[0].UniqueId.Value.Id, Is.EqualTo ((uint) 3));\n\t\t\t\t\t\tAssert.That (threads[1].UniqueId.Value.Id, Is.EqualTo ((uint) 1));\n\t\t\t\t\t\t//Assert.That (threads[2].UniqueId.Value.Id, Is.EqualTo ((uint) 0));\n\t\t\t\t\t\tAssert.That (threads[2].UniqueId.HasValue, Is.False);\n\n\t\t\t\t\t\tvar branches = threads[2].Children.ToArray ();\n\t\t\t\t\t\tAssert.That (branches, Has.Length.EqualTo (3), \"Expected 3 children.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseShortDovecotExampleThread ()\n\t\t{\n\t\t\tconst string text = \"((352)(381))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar threads = new List<MessageThread> ();\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tImapUtils.ParseThreads (engine, 0, threads, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing THREAD response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (threads, Has.Count.EqualTo (1), \"Expected 1 thread.\");\n\n\t\t\t\t\t\t//Assert.That (threads[0].UniqueId.Value.Id, Is.EqualTo ((uint) 0));\n\t\t\t\t\t\tAssert.That (threads[0].UniqueId.HasValue, Is.False);\n\n\t\t\t\t\t\tvar children = threads[0].Children;\n\t\t\t\t\t\tAssert.That (children, Has.Count.EqualTo (2), \"Expected 2 children.\");\n\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 352));\n\t\t\t\t\t\tAssert.That (children[1].UniqueId.Value.Id, Is.EqualTo ((uint) 381));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseShortDovecotExampleThreadAsync ()\n\t\t{\n\t\t\tconst string text = \"((352)(381))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar threads = new List<MessageThread> ();\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ImapUtils.ParseThreadsAsync (engine, 0, threads, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing THREAD response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (threads, Has.Count.EqualTo (1), \"Expected 1 thread.\");\n\n\t\t\t\t\t\t//Assert.That (threads[0].UniqueId.Value.Id, Is.EqualTo ((uint) 0));\n\t\t\t\t\t\tAssert.That (threads[0].UniqueId.HasValue, Is.False);\n\n\t\t\t\t\t\tvar children = threads[0].Children;\n\t\t\t\t\t\tAssert.That (children, Has.Count.EqualTo (2), \"Expected 2 children.\");\n\n\t\t\t\t\t\tAssert.That (children[0].UniqueId.Value.Id, Is.EqualTo ((uint) 352));\n\t\t\t\t\t\tAssert.That (children[1].UniqueId.Value.Id, Is.EqualTo ((uint) 381));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFormatAnnotations ()\n\t\t{\n\t\t\tvar annotations = new List<Annotation> ();\n\t\t\tvar command = new StringBuilder (\"STORE \");\n\t\t\tvar args = new List<object> ();\n\n\t\t\tImapUtils.FormatAnnotations (command, annotations, args, false);\n\t\t\tAssert.That (command.ToString (), Is.EqualTo (\"STORE \"), \"empty collection\");\n\n\t\t\tannotations.Add (new Annotation (AnnotationEntry.AltSubject));\n\n\t\t\tImapUtils.FormatAnnotations (command, annotations, args, false);\n\t\t\tAssert.That (command.ToString (), Is.EqualTo (\"STORE \"), \"annotation w/o properties\");\n\t\t\tAssert.Throws<ArgumentException> (() => ImapUtils.FormatAnnotations (command, annotations, args, true));\n\n\t\t\tcommand.Clear ();\n\t\t\tcommand.Append (\"STORE \");\n\t\t\tannotations[0].Properties.Add (AnnotationAttribute.SharedValue, \"This is an alternate subject.\");\n\t\t\tImapUtils.FormatAnnotations (command, annotations, args, true);\n\t\t\tAssert.That (command.ToString (), Is.EqualTo (\"STORE ANNOTATION (/altsubject (value.shared %S))\"));\n\t\t\tAssert.That (args, Has.Count.EqualTo (1), \"args\");\n\t\t\tAssert.That (args[0], Is.EqualTo (\"This is an alternate subject.\"), \"args[0]\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseAnnotationsExample1 ()\n\t\t{\n\t\t\tconst string text = \"(/comment (value.priv \\\"My comment\\\" value.shared NIL))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<Annotation> annotations;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tannotations = ImapUtils.ParseAnnotations (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ANNOTATION response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"Entry\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"value.shared\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseAnnotationsExample1Async ()\n\t\t{\n\t\t\tconst string text = \"(/comment (value.priv \\\"My comment\\\" value.shared NIL))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<Annotation> annotations;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tannotations = await ImapUtils.ParseAnnotationsAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ANNOTATION response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"Entry\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"value.shared\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseAnnotationsExample2 ()\n\t\t{\n\t\t\tconst string text = \"(/comment (value.priv \\\"My comment\\\" value.shared NIL) /altsubject (value.priv \\\"My subject\\\" value.shared NIL))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<Annotation> annotations;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tannotations = ImapUtils.ParseAnnotations (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ANNOTATION response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"annotations[0].Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\t\t\tAssert.That (annotations[1].Entry, Is.EqualTo (AnnotationEntry.AltSubject), \"annotations[1].Entry\");\n\t\t\t\t\t\tAssert.That (annotations[1].Properties, Has.Count.EqualTo (2), \"annotations[1].Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My subject\"), \"annotations[1] value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[1] value.shared\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseAnnotationsExample2Async ()\n\t\t{\n\t\t\tconst string text = \"(/comment (value.priv \\\"My comment\\\" value.shared NIL) /altsubject (value.priv \\\"My subject\\\" value.shared NIL))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<Annotation> annotations;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tannotations = await ImapUtils.ParseAnnotationsAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ANNOTATION response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (2), \"Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (2), \"annotations[0].Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\t\t\tAssert.That (annotations[1].Entry, Is.EqualTo (AnnotationEntry.AltSubject), \"annotations[1].Entry\");\n\t\t\t\t\t\tAssert.That (annotations[1].Properties, Has.Count.EqualTo (2), \"annotations[1].Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My subject\"), \"annotations[1] value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[1].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[1] value.shared\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseAnnotationsExample3 ()\n\t\t{\n\t\t\tconst string text = \"(/comment (value.priv \\\"My comment\\\" value.shared NIL size.priv \\\"10\\\" size.shared \\\"0\\\"))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<Annotation> annotations;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tannotations = ImapUtils.ParseAnnotations (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ANNOTATION response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (4), \"annotations[0].Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateSize], Is.EqualTo (\"10\"), \"annotations[0] size.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedSize], Is.EqualTo (\"0\"), \"annotations[0] size.shared\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseAnnotationsExample3Async ()\n\t\t{\n\t\t\tconst string text = \"(/comment (value.priv \\\"My comment\\\" value.shared NIL size.priv \\\"10\\\" size.shared \\\"0\\\"))\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tIList<Annotation> annotations;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tannotations = await ImapUtils.ParseAnnotationsAsync (engine, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing ANNOTATION response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (annotations, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Entry, Is.EqualTo (AnnotationEntry.Comment), \"annotations[0].Entry\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties, Has.Count.EqualTo (4), \"annotations[0].Properties.Count\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateValue], Is.EqualTo (\"My comment\"), \"annotations[0] value.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedValue], Is.EqualTo (null), \"annotations[0] value.shared\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.PrivateSize], Is.EqualTo (\"10\"), \"annotations[0] size.priv\");\n\t\t\t\t\t\tAssert.That (annotations[0].Properties[AnnotationAttribute.SharedSize], Is.EqualTo (\"0\"), \"annotations[0] size.shared\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseFlagsList ()\n\t\t{\n\t\t\tconst string text = \"(\\\\Answered \\\\Flagged \\\\Deleted \\\\Seen \\\\Draft + TAG TAG2 a b c d e f g h i j k l m n o p q r s t u v w x y z)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar keywords = new HashSet<string> ();\n\t\t\t\t\t\tMessageFlags flags;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tflags = ImapUtils.ParseFlagsList (engine, \"INBOX\", keywords, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing FLAGS response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (flags, Is.EqualTo (MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft), \"message flags\");\n\n\t\t\t\t\t\tAssert.That (keywords, Has.Count.EqualTo (29), \"keywords.Count\");\n\t\t\t\t\t\tAssert.That (keywords.Contains (\"+\"), Is.True, \"Contains +\");\n\t\t\t\t\t\tAssert.That (keywords.Contains (\"TAG\"), Is.True, \"Contains TAG\");\n\t\t\t\t\t\tAssert.That (keywords.Contains (\"TAG2\"), Is.True, \"Contains TAG2\");\n\n\t\t\t\t\t\tfor (char c = 'a'; c <= 'z'; c++)\n\t\t\t\t\t\t\tAssert.That (keywords.Contains (c.ToString ()), Is.True, $\"Contains {c}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseFlagsListAsync ()\n\t\t{\n\t\t\tconst string text = \"(\\\\Answered \\\\Flagged \\\\Deleted \\\\Seen \\\\Draft + TAG TAG2 a b c d e f g h i j k l m n o p q r s t u v w x y z)\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (null)) {\n\t\t\t\t\t\tvar keywords = new HashSet<string> ();\n\t\t\t\t\t\tMessageFlags flags;\n\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tflags = await ImapUtils.ParseFlagsListAsync (engine, \"INBOX\", keywords, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing FLAGS response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (flags, Is.EqualTo (MessageFlags.Answered | MessageFlags.Flagged | MessageFlags.Deleted | MessageFlags.Seen | MessageFlags.Draft), \"message flags\");\n\n\t\t\t\t\t\tAssert.That (keywords, Has.Count.EqualTo (29), \"keywords.Count\");\n\t\t\t\t\t\tAssert.That (keywords.Contains (\"+\"), Is.True, \"Contains +\");\n\t\t\t\t\t\tAssert.That (keywords.Contains (\"TAG\"), Is.True, \"Contains TAG\");\n\t\t\t\t\t\tAssert.That (keywords.Contains (\"TAG2\"), Is.True, \"Contains TAG2\");\n\n\t\t\t\t\t\tfor (char c = 'a'; c <= 'z'; c++)\n\t\t\t\t\t\t\tAssert.That (keywords.Contains (c.ToString ()), Is.True, $\"Contains {c}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tImapFolder CreateImapFolder (ImapFolderConstructorArgs args)\n\t\t{\n\t\t\treturn new ImapFolder (args);\n\t\t}\n\n\t\t// Tests the work-around for issue #945\n\t\t[Test]\n\t\tpublic void TestParseFolderListWithFolderNameContainingUnquotedTabs ()\n\t\t{\n\t\t\tconst string text = \" (\\\\HasNoChildren) \\\"/\\\" INBOX/Da\\tOggetto\\tRicevuto\\tDimensione\\tCategorie\\t\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (CreateImapFolder)) {\n\t\t\t\t\t\tvar list = new List<ImapFolder> ();\n\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.Exchange;\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tImapUtils.ParseFolderList (engine, list, false, false, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing LIST response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = engine.ReadToken (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (list, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t\t\tAssert.That (list[0].Name, Is.EqualTo (\"Da\\tOggetto\\tRicevuto\\tDimensione\\tCategorie\\t\"), \"Name\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseFolderListWithFolderNameContainingUnquotedTabsAsync ()\n\t\t{\n\t\t\tconst string text = \" (\\\\HasNoChildren) \\\"/\\\" INBOX/Da\\tOggetto\\tRicevuto\\tDimensione\\tCategorie\\t\\r\\n\";\n\n\t\t\tusing (var memory = new MemoryStream (Encoding.ASCII.GetBytes (text), false)) {\n\t\t\t\tusing (var tokenizer = new ImapStream (memory, new NullProtocolLogger ())) {\n\t\t\t\t\tusing (var engine = new ImapEngine (CreateImapFolder)) {\n\t\t\t\t\t\tvar list = new List<ImapFolder> ();\n\n\t\t\t\t\t\tengine.QuirksMode = ImapQuirksMode.Exchange;\n\t\t\t\t\t\tengine.SetStream (tokenizer);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ImapUtils.ParseFolderListAsync (engine, list, false, false, CancellationToken.None);\n\t\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\t\tAssert.Fail ($\"Parsing LIST response failed: {ex}\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = await engine.ReadTokenAsync (CancellationToken.None);\n\t\t\t\t\t\tAssert.That (token.Type, Is.EqualTo (ImapTokenType.Eoln), $\"Expected new-line, but got: {token}\");\n\n\t\t\t\t\t\tAssert.That (list, Has.Count.EqualTo (1), \"Count\");\n\t\t\t\t\t\tAssert.That (list[0].Name, Is.EqualTo (\"Da\\tOggetto\\tRicevuto\\tDimensione\\tCategorie\\t\"), \"Name\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\t[TestCase (2023, 5, 14, 12, 30, 45, -4, -30, \"14-May-2023 12:30:45 -0430\")] // Sunday\n\t\t[TestCase (2023, 5, 15, 12, 30, 45, -3, -30, \"15-May-2023 12:30:45 -0330\")] // Monday\n\t\t[TestCase (2023, 5, 16, 12, 30, 45, -2, 0, \"16-May-2023 12:30:45 -0200\")]   // Tuesday\n\t\t[TestCase (2023, 5, 17, 12, 30, 45, -1, 0, \"17-May-2023 12:30:45 -0100\")]   // Wednesday\n\t\tpublic void TestFormatInternalDateNegativeOffsets (int year, int month, int day, int hour, int minute, int second, int offsetHours, int offsetMinutes, string expected)\n\t\t{\n\t\t\tvar date = new DateTimeOffset (year, month, day, hour, minute, second, new TimeSpan (offsetHours, offsetMinutes, 0));\n\n\t\t\tstring formattedInternalDate = ImapUtils.FormatInternalDate (date);\n\n\t\t\tAssert.That (formattedInternalDate, Is.EqualTo (expected), $\"Expected {expected} but got {formattedInternalDate} for date {date}.\");\n\t\t}\n\n\t\t[Test]\n\t\t[TestCase (2023, 5, 18, 12, 30, 45, 1, 0, \"18-May-2023 12:30:45 +0100\")]   // Thursday\n\t\t[TestCase (2023, 5, 19, 12, 30, 45, 4, 30, \"19-May-2023 12:30:45 +0430\")]  // Friday\n\t\t[TestCase (2023, 5, 20, 12, 30, 45, 9, 30, \"20-May-2023 12:30:45 +0930\")]  // Saturday\n\t\t[TestCase (2023, 5, 21, 12, 30, 45, 12, 0, \"21-May-2023 12:30:45 +1200\")]  // Sunday\n\t\tpublic void TestFormatInternalDatePositiveOffsets (int year, int month, int day, int hour, int minute, int second, int offsetHours, int offsetMinutes, string expected)\n\t\t{\n\t\t\tvar date = new DateTimeOffset (year, month, day, hour, minute, second, new TimeSpan (offsetHours, offsetMinutes, 0));\n\n\t\t\tstring formattedInternalDate = ImapUtils.FormatInternalDate (date);\n\n\t\t\tAssert.That (formattedInternalDate, Is.EqualTo (expected), $\"Expected {expected} but got {formattedInternalDate} for date {date}.\");\n\t\t}\n\n\t\t[Test]\n\t\t[TestCase (2023, 5, 22, 12, 30, 45, 0, 0, \"22-May-2023 12:30:45 +0000\")]  // Monday\n\t\tpublic void TestFormatInternalDateZeroOffset (int year, int month, int day, int hour, int minute, int second, int offsetHours, int offsetMinutes, string expected)\n\t\t{\n\t\t\tvar date = new DateTimeOffset (year, month, day, hour, minute, second, new TimeSpan (offsetHours, offsetMinutes, 0));\n\n\t\t\tstring formattedInternalDate = ImapUtils.FormatInternalDate (date);\n\n\t\t\tAssert.That (formattedInternalDate, Is.EqualTo (expected), $\"Expected {expected} but got {formattedInternalDate} for date {date}.\");\n\t\t}\n\n\t\t[Test]\n\t\t[TestCase (2023, 5, 23, 23, 59, 59, 2, 30, \"23-May-2023 23:59:59 +0230\")]  // Tuesday\n\t\t[TestCase (2023, 5, 24, 0, 0, 0, -4, -30, \"24-May-2023 00:00:00 -0430\")]  // Wednesday\n\t\tpublic void TestFormatInternalDateEdgeCases (int year, int month, int day, int hour, int minute, int second, int offsetHours, int offsetMinutes, string expected)\n\t\t{\n\t\t\tvar date = new DateTimeOffset (year, month, day, hour, minute, second, new TimeSpan (offsetHours, offsetMinutes, 0));\n\n\t\t\tstring formattedInternalDate = ImapUtils.FormatInternalDate (date);\n\n\t\t\tAssert.That (formattedInternalDate, Is.EqualTo (expected), $\"Expected {expected} but got {formattedInternalDate} for date {date}.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/acl/authenticate.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 ACL RIGHTS=texk\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/acl/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN ACL RIGHTS=texk\nA######## OK Thats all she wrote! i9if7359725qay.199\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/acl/getacl.txt",
    "content": "* ACL INBOX Fred rwipslxetad Chris lrswi\nA######## OK GETACL completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/acl/listrights.txt",
    "content": "* LISTRIGHTS INBOX anyone \"\" l r s w i p k x t e c d a 0 1 2 3 4 5 6 7 8 9\nA######## OK LISTRIGHTS completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/acl/myrights.txt",
    "content": "* MYRIGHTS INBOX rwiptsldaex\nA######## OK MYRIGHTS completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/basic-greeting.txt",
    "content": "* OK IMAP4 server ready.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/capability-greeting.txt",
    "content": "* OK [CAPABILITY IMAP4rev1 UNSELECT NAMESPACE AUTH=PLAIN]\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/capability.txt",
    "content": "* CAPABILITY IMAP4rev1\nA######## OK CAPABILITY Complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/fetch-annotations.txt",
    "content": "* 1 FETCH (UID 1 ANNOTATION (/comment (value.priv \"My comment\" value.shared NIL)))\n* 2 FETCH (UID 2 ANNOTATION (/comment (value.priv \"My comment\" value.shared NIL) /altsubject (value.priv \"My subject\" value.shared NIL)))\n* 3 FETCH (UID 3 ANNOTATION (/comment (value.priv \"My comment\" value.shared NIL size.priv \"10\" size.shared \"0\")))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/getquota-no-root.txt",
    "content": "* QUOTAROOT INBOX storage=0\n* QUOTA storage=0 (STORAGE 28257 256000)\nA######## OK Getquotaroot completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/getquota.txt",
    "content": "* QUOTAROOT \"INBOX\" \"\"\n* QUOTA \"\" (STORAGE 3783 15728640)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/id.txt",
    "content": "* ID (\"name\" \"GImap\" \"vendor\" \"Google, Inc.\" \"support-url\" \"http://support.google.com/mail\" \"version\" \"gmail_imap_150623.03_p1\" \"remote-host\" \"127.0.0.1\")\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/list-inbox.txt",
    "content": "* LIST () \"/\" INBOX\nA######## OK LIST Completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/list-literal-subfolders.txt",
    "content": "* LIST () \"/\" INBOX\n* LIST (\\HasNoChildren) \"/\" {19}\nLiteral Folder Name\nA######## OK LIST Completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/list-namespace.txt",
    "content": "* LIST (\\Noselect) \"/\" \"\"\nA######## OK LIST Completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/list-nil-folder-delim.txt",
    "content": "* LIST () \"/\" INBOX\n* LIST (\\HasNoChildren) NIL \"Folder1\"\n* LIST (\\HasNoChildren) \"\" \"Folder2\"\nA######## OK LIST Completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.0.msg",
    "content": "Return-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA12840> for nsb; Thu, 19 Sep 91 12:41:43 EDT\nDate: Thu, 19 Sep 91 12:41:43 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9109191641.AA12840@greenbush.bellcore.com>\nTo: abel, bianchi, braun, cameron, carmen, jfp, jxr, kraut, lamb, lowery, lynn,\n        mlittman, nancyg, sau, shoshi, slr, stornett@flash, tkl\nCc: nsb, trina@flash\nSubject: Star Trek Party!\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=Outermost_Trek\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/parallel; boundary=Where_No_One_Has_Gone_Before\n\n--Where_No_One_Has_Gone_Before\n\nYou are invited to a \n\n*** STAR TREK 25TH ANNIVERSARY PARTY ***\n\nWhen:  September 28, 1991,  4:30 PM until whenever\nWhat:  For those interested, we'll have a rerun of last year's season-ending \n\tcliffhanger, and  then we'll tune in the season opener and the 25th \n\tanniversary TV special.   Prior to that, if you bring some food \n\twe'll have a pot-luck meal, and general merriment before and after.\nWho:  You and your family, including kids of course.\nWhere:  25 Washington Avenue, Morristown.  \n\t(See Nathaniel if you need directions.)\nRSVP:  993-8586\n\nWhat follows is some Star Trek related multimedia mail, the last of which will give you a chance to RSVP on line.  \n\nLive Long and Prosper!  -- Nathaniel & Trina\n--Where_No_One_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAFmUAAAAAQAAH0AAAAABAAAAAAAAAAD////////37+/r7e/z9/f7//93b29z\n//////v37evv7+vr7+/z9/97b2NdVU9OT09RWmFr9+Pd3d3e4+vt/29la21ra2lra3vn3dzn\n9+//YVtaV1tp9/PjzsjHxsbGy87P2ef3c2dz/+vr59/Z09HR1dLR2d7n/2lXTUU+OzY1NTQ1\nOD5ETmXf2dLP1dfb3O9jYWNhX19pb+/ZzsjIzMzP43dfVU1RX2/bybu6u7q7wcjN0+1ra1VR\nY3fv7+fZzsS/v8LEztXW62FPRj03Mi8sLCwsLTVFVffLwL6+v8XFy9b/W1tdV1RVWVtr2srG\nytXj/09LRT4/SVtd2MC0r66trrG2uL3I0/dOSE5WWVxn99nGvby7vsfR4VdKRT03MCwoJSYn\nJyowPURb0cfHz9lrZ2tZRktdd+HazcrGv7iwrrC4usHR5W9VTl1pd8i7tLSztbm/xcrb91dF\nPj9DREhXb+vQv7y7uby/wsr3XUQ7My8pJiYnJiYsOEFK38G9vL7Fzc/R72f/1dXe69/v99/M\nw87v919NSUU+PUVMTme8s66urKyvsrO2vcTNb1JVWVNLTmfr2szKx8HLzs3XY0o9ODQtKCYm\nKCYoLjpHacnIx8fI1W9dU0A9RU5nZf/Zxru2rKuusrK3xM/cb1pvd2PXu7Ovr7O2vtVlS0M9\nODM2Oj1ATVfr1cq/vbu6ur7DyutSPzoxKiUjJCUkJS48T+29trSxt7zCyNNYS1FYb+/t2c/H\nvrq6x9HbW0E9PDg6QE1dxbGtqaenqayxtbnC3FFNS1NeZ//c18/SzM7Pz/ddTktAOTUvLCgl\nJScmKCw3QV3bvru2trzCyMjrT0hTe+fXy767urCsq7G4vcn3WU4/P0NJTs+6tbS1uL3Oa0Y/\nPDcxMjg+SlBb3si8urq4uru+yNnvW0c9OTApJycmIyQpLzdFY8i8uLS2urzC71b/697j2sfC\nvLivr7W9xM1bRT88ODxHSnu8rqyqqquvtsDXd1NGRERKUVphX+HTz9LV2t/3b1tNRDs2MC8p\nJSUlJSUsND1I2MC3srK1urm7xldHRUtLTF7Vyr61rKutsLa8zmdKPjpDRlHPt6+ur7K7x+FZ\nRj86NzU3Pk9cb+/Nvry9wb6/w8jV/1pFOzgzLSssKygoLTQ9SNrHvbi3uLq8xNtMTE9eZWfn\nx8G6r6yttLa9ymdGODQ1PUBHzrWtrauutLrC2VlNPj1BRE1be+/jzMLJzNPjXVtKQDo2NDEu\nKygoKignKjA4QGvIv7u4uLq8v83hY2lvc+/Ovrm2r6utr7O7yetURzs5PUdbyrevrq+zusfP\n91lEPjs5OT5FTFBd98zIzcvKy93ja1lPQzs6Mi4sLCsqKzRFT9a5s7O3ubm9vcPnY1dMS1NN\nXdfMw7y9x8rI0V1VT1M+PUdvz76vq6+vr7zCy9VZTkpKTERhc1lr0d3Sy83azs5rXU5EODMu\nKykmJSQkIygyOkTOuLWzrrG/xbu41s7I1+u9ubmyrKytrbS7uuFCOjY0ODlAc8O+tbbAyM3v\nX11LRkZERV7f69PPz9vZyszKx8DYy8vrUT83Li8pJioqKCs0Oz13u7W0srXHwsXcUVQ9PEZE\nQE/XzsC6uL28xcHhRz9HQD5axbavq6mssbC+z+PTRzI8Ojg700ZFd9dN47nDz7+47cjM7ztD\nQy4qLS0jJygqMDNP38vPu7m8vbq2vsfG19fXzsO1tLOvrbPfu77VO0xFNS9CQEXCzL+3rcvY\n4108Qz0wO0jj/93awr7VwLW83bS6wtTDWzowMzMoIyYpIyorLkJd19W6r7K/vLH/zrz3Pc3M\nP2O/zky5s9HIr+dMPkIvNkpM0LinpJ+fo6qvvU5LSzYuMjk4SdDP3sO9z8vFTzZHQi49U0Rd\nzMnN59zrbzA3PDsuLi0xKTAuKz3rxb6urqWgsbe4n6Sqt6rGLTI2Kibrs8XBq8F7MDIfJCEn\nLjtfr6ain5+foqK1w0IvHyAoIzBByc+trKepq7HGZTErHx8fHx8fHyAnMkLIr6ifn5+fn5+f\no6Cx78HhLzRTPylHMysrOiwmTEU4P7Pew7P33atJSa6nc76sr0i2rMNevbs438hIJVlQLyx3\nOCgtNCslMTwuNOPQyLKtqqerrK7GzVvTNS0uRSwmRdM3T63FrqzM377eOT1fKy5XREjJt7Oq\nsLKtqv++wUfXwUss3UYvxNg8c6zLvrLDv75eS2suNy0iLjMfJjsyPa62yq2ipsyrxUq+zT5O\n20e5PTK8yz+8sV/VZ7NFS09NMi9UTTxetFzIu96yvt+7r1ezsMXMa1tO0z05KT0rIkAuMEn3\nQLfnabRWSkfJTDo3yk9DLN+qv1/RyUbrU0lFd0W5tr3Bv7xPZ9EwLsbEPFuvvVO+q7Cup7K4\nY080HyUgHyMmP0BXraOroammta3Jv0tLOygpKT5EL+mst8q7q6zv0cu1UUFZP003LjMzXS00\nRkYq4z0wz0M4QrNFyrNIvsS3T7HG07DDsrasv7m/XbprOzFILS48KD4wRT3XO0TEUEjJy99M\n3bPQY925RbbEa3OvQzrJOsTXTOvJ+9e/68FMr21aRMbDQcdCxMy92a9OwNXzX0bYOlVR33dO\nrcDjw7V31Uc8d0w/OzxTUz4/VdDz99/Ore3G78xCPjxBNi8/Ly85OTMywT+3b83Gzu3Vx0lD\n70nIzFHIt669966wU8RMUelET0DLNWdMa01ttmfBP824Ok9JPeEw6Va/O2e8ULZS07XHU7rK\nuljVw1vXa/tfQ088STlLSmPnzGO/W7/Wx//TxDxNXm8x/85D30nP5bJMw+PNN9Y9V1bBUc8/\n7bG94cO+zmvHZ0zLRz9CQjhZSztAc0TOXjhO38FTyM1XzXNH5z1JNFMqT0RfTdeyXa/pwcXI\nY1fS/87bX9nKzGf/vuHHz/e4T8DzuUpX73vFOs/Nzcr/yOf33kC/d9tcYchP671PxNDUSsL3\nuL3VxLXF+8tMS009KjM4LS45OkTjMtBZ3Ei6wtFKb0rBb0zIxcg6u2HP10vM1O8z2M81QzbO\nR8ZYtMzPU8vPz1HKU8tFYWvM90PdVMZY607HTkbcP8c9zuVFVDrINcw/QzzzZ0q9yeu0uLnJ\nu8NXb9rV+06+Srbf80/Zx8/USctaREndOE04XGFvwsW367fR3L7ezzzeOfdEyEhfw0vBd8xD\nxmvOWlNj5+c+Uzk+ODgvQDM+NUE/WVX/yMnAx3fA/7BlvGm+Ub5Rxsq+xdW988XhVmNGVzlL\nOFpjRMLTtc68w9PMy9vT7VnY8+//593aXc3Wz8/I28vv4UHHUVlMUDxANUU9OktJa9fFy8jK\nw9zM49nKTM5Zd1lR90/cXdTdz9vX3l5jUT5VTW9P2b++vbq/wdJ3Y1dKPkBGPUM+TFlvWs/F\n083Hw9HVzu1nRUg+QTU2ODQ2MzpNTGfcw8nLw8nhx9bO3cnVyMrAxrjFwL3Cu9vC92dcQ005\nPD5BS1Prv8TVx87I1Gfe/9NOa3dvT1X3d3NvzM7vz8jI02drXVM8OTk6NDQ2MTw+UljN0MC7\nv77SynfMZ1djUWtOY3PX0+3ry9Xn3ddlWm9LW0pIR/vdyb6+usPB2tTNZUxJUERLSllXa1nv\nx9bP2cfHx8rK1/9NVkM+NzM3NzM4PFxl18fFv8DFy8nMzszfxsXHzcTBwcjEyc/b299fR0M/\nPTs/TvfUyb64usHJ1W9hU01VV1JNUE1TVG9l49PcyNHN193r729OQ0Y1NjQyMTA2NUJKY8rE\nwsfCxtnZ69Tr39nj7+/OztXdysbP5//vW0NDPT9ARf/OvrivsLK1vsPP0P9eU0peWVFUW2v/\na9nZzdXO1P93d29IPz0+NTIxMC4tNjtFSf/TvLu+ubu5vb3Nztfez9LT19jLxczb/8f3UkRJ\nQz08QEpV28u/wcS/zdNvVE1fUD9DS0hMW13zzsfCur+3u77Jzd1PSUc/ODk2NTAvNzs/PmXj\nz9bJzd7N1MzP29fMydPIxsbAvr7B0cjTy2fnSkJBQ1lRzce+t7u9xMbTd3tXTEdHSU1Tb9nb\n6c7SzcjEyc/lWWFKOzk4Ly0uLSsuMkNPVM3Dvr28vL+8u73IzcTFzNDGy83X291rX1FGPDo+\nOjo5P0Jb28C/vb3Ix9HOzNFzVE1VT1lYXWNn59jNx727vb68ydlfU0s/NDAyNS8vNkVGT2fP\nzM3JzN/v1t1nb9/KzNPOzGGryd/Lw06zzMn3XNHb3TfG12dfsfPCVVfvsllvQkfDP8c64+NB\nUb9Ew9xc0+U8OL9K2FoyLjstOi89NOsuSz22ScPOrsixY8K/+04/47/e373FzcNQuMrTa2Vd\nY0AsP0M4z7a7q666y6v3R1XhPdZLNMjHQN3Id9m349m3wTTFRMI80zE+RTNfWVwsWka6UVlG\nsk3nv8tR9zYwwq9HONTJa008Zaavus6tu1cxLS8sIjDlvNfJpqemtr61tjYrNiciIB8nPz1Y\nq6Kon6GjpajBYfcvIx8iIx8nHys7vbemrZ+rs03rMy03Vc2trK+rr9c8QDo0PeW2tc6zpKW+\nyMXOTyYkJygjKy9GwaijoJ+fpKqryS8/LB8iIh8gKT0+Pb+wraOgpK9r4UY1LjXJwKu1tNVX\nKikhHyErN0vIuMasoa6/zME6LyYuM1VDY6ynp6Ofn6WyxunfNR8fKB8fIyYp2zU5ta9GwKOf\nxdGtrsZb2rGgpK2sqrc/LSwpHx8jMTQySc64rMfBs7c6PU44M2PZyq+ioqGfp62rtd3dPScu\nKx8jLiQr2z8uY6jRO7Gfw0ZfwMJPS8WiprW1r18tICQiIR8q08x3tKiuqq3S5VsnHyIoHy89\nX66foaSjqL5ZSUQ1MSk3KyknO0w7R8GzoqlvvqilTe+3vltS466hq7SutjkjJyYfHyAtPt9d\nrau1r6y43U0sNTctNMjVZ6afq6yrvddKLC1FNjM3PS46RitnscU9rqZra6ejXVGzsr/Z072k\nrNDOyDUfHyIfHyAwyb7DtJ+rw7W7dywoKy4rL1C+r6qfoamptNNvTz8/Qi45TCchLln3PDj3\n59/E+2Oon6/rqaHDP9G6p6/KuLdVIyInJiIlSry/ya6tvLnhz1Q1Kjo/LTe5sK6mn6Kps99v\nPi0kOD4vK0cyLEQ34cG+Ta2rrFU3UKeuNe+wxjI2R7atxdjB3SkfICsiISjntsLNqKOuX8Sx\nxy4kN1xENc6qqKqmrbbHOTs3Ki93Oj7HUTk8Zy85zKpESK6t5+t7p6CqS6yoyDhPxcW+Tklh\nNh8iKiciLty7tr2vpalLSMPILC9fXE3z27+yq6motVhpYyotLixM5TQ+tOM2O+/7vDQ7vai3\nudA1XbSsVEG31zwzOruvs0/d0zghHyMnKitZq6mpt8GrsTQz7eMtM8/JtM5jwKWjrLOww08x\nMt1nND20uzUvSW05P08+zae8bbmhs8Y/PrGt3yu/r9UyV7atyTdT9zkfISs0KTTBqrG/taev\nRjvrxz0wX8LOb//BuK2ssrXYQTA0LixQ1c7JW+9CNSw7SzswP0Jcy6Owtq6zyz0rWa/nLT26\nezwzS7GtzTFBUCkfJDFHRMKtn6evra/HPzE1NisuRqzXPGOyrq+2wrS4vtfDSDxNX0tGMi84\nTj4wOrq30dqmp846wKqtRCc4vksvWq3JL0U3OTkuObGvTzbVUzYlL2vEvbSfn6Sps7zAVywn\nMjw6P0jbwUw7x6/M22dDX0gpKD85Nzw/TmlMOUiyxeO/qqbDWdW5zEzrrVsvNUUzva+v6TpR\nMjQ6Q9exvP84MCwpKTN3uqyfn5+fn6KtvD0pKSsfHy42L0e+xrymuP9P8zgwQELv09c1Lyk5\nNS04tqaosbGvrcw9Pau0TCy+v+tALzTcwikqa8YqKTBNQj1Dt5+qurmzYy8oL9O6wa2fn6Os\nr7bPLyAqLiIgLC0yTT1DvbHL1VlXXVUyNs/GRlG9urvD47iuwsqvqq+80ruqXzT3wzw5Pv/H\nP1tfOSkxQDJBt7nVQEA4W09Uu6irzcvfbzAtQ72/uqafpqyzvVEuIB8fHx8gJCo3QLympbmr\nornLytvK1jo/+/83b763wK2oqa7L78/RRT0/dz4xLTg5N0BZSFH/T2d3b9RLzcbbd2/bSUnr\n/1V7wcHEyr22sLm2trC4vcZ3Ri4pLjMrKjdDOz5Nb9B3Qz1ZUUI4TsvK1bmmpaqqpKesr7W1\ntM1f71UvNT89NTc3Ny8uNkU7NDg1LzE3Pmm/ta+yuLGuvr+4vMXMVUnZzVFjylZFQzk1OTQr\nMDk4P93Pv73Bxs7zSlVv693EwMbCwr+9u8zR01tJPkNQ28vCu8Lfd15JPT5Oz8nfzr24ymdr\nzk8/Pk5PUT5D2dNBP2fX3evPvrrRSklXRTlB/148SnfF0e/jy8pXUt3aZ+O+w1ta52nn72Fv\nyc/3/8jB2/fGvcrvZ01GPzs4Oj88Slr/WGvOz9nEvsPlW2tINjU/U17Z083Jz93v3efrzsft\nd2tIOj1EU2HZx7u1vMDAurzC2tO/y0lBTkQzLC82SURNz7u4vr+7t73BvbzEzs3O0dLzW/tb\nSEpNSUxVZevrTz9KPTI6OTc8R1FOTkxTXV9VXffr187SycXNycnt2cnL0bmzubO3vr/DXD86\nOzs7PkZEODU0OD5PZ8i6u7q6vt/dysjvadnHyv9U08zZa8jEUWM3PD0uLDU+S0ZMVFdES2HL\ntbKzs7Czs7W9z9/Z1mNGS2vf/2Np2Ug5NDw7NDc8Zelnb9fLzM6+vLm9wr7Ed0lN4/9GQkJB\nOzk8RlNNYcbHzMvbWe3W68zEy83MbU1KTz5CTU9AQz9ASVFTY9zT1c/DvLm6v7vAz8vL1Wvp\n7//ryNZ3/+lVUVlbb+fd287L2V/e1eNzX0pKRjk0Okhb5c/KytnV3OPzX1ljZ1NGQUNZ59vB\ns7W8wMr3b3dfT05MXVtfY8a8xNPRzuNIOjg7PTk4RfdzW3fb3dbS07+8v7+8v8PEzN/n81VG\nPTMxNDU1OD5AREtFSFv/3M7CxMXI0tXJxMfKuLi7xOvnztfXzdRPP2NfN3f318jYyMbrU0xV\n5/Nf1cC+yMvf6917e+fba09VTUlEP0FVV0hBPzw+PkNES1Nr7czZ39nIwL68vMnJ7Xfv+1v3\n08vT2uv7/11PTldJPTw7Okbr2My/wMjN2VdaWktFWe9hXevjy8G+vru3xM/VaVNXSj9MV05M\n91FJSlJX99ZvbWFP89X3V83K0W9zSE1NUf/Bws3LydTjyr3IyMj7UfdPUW/U78i+yuFvT0z/\na1FOXFVcT0A9R1dQW+/z2+drd8rB09TK2U1LPTQ1NjVHW1tSysXS78bIw7q+0v9PR01PU9/J\nxMnD309Y3/db691VR0U/SFvj0cDCy9vtNELKL9xWPcRD1dNZvNdrubjf0dfp18nPzNPY/1BI\nPTg6MT7CPGPIxL5HRePFxtvjSt9KP2FZe83Jv9fj7U5PXlHl2XfvY1ZPS1nTyMC+2GV3Xmvd\n98Y3vrA9PD88uuPRr3vLzEh33l/n3cXDylFPMzE6LjY9TENVa/fny8G9tLfC1N1zOlc+Y9Pa\nuMPNx3Pj42Pr3lNXRj53Szaz6zi+P7m6NsRBQbc+XctXVkvczLfFusXd1VxGymHLZ9Xrad4z\nOj00TCphxy5S1y/PRFm/39bLZ0jZY9+9U7nP1k+/OEPFN8HNSc33Mki/P89N2rnTx99Kx1Xr\nOs1fyUk6uz1by0mzc/fE9zx33Efc58Tzx0nlwTjKWzpX0MM199lHW7DptOe/30vPd1ZExtTV\nucA7uz/JwN9lutVDSEtDU9/SU7tBzdRAvE//1z7GRllMO88+uU1ruW+zwUvrb0zEQ8ZLS05W\nPD08R91Gb0ha11XRRcJrb7TXVrpLQ8df17xnylPvvUXKukmxPlS7Ob9KQ7hD3NnIwTjA1Vuy\nSe++81Tbb0Ln31nhzcfUvEbGPM7Pu1S+tjy4Pjm3O8zIUzbE5yzDTVO9vTu1uz62UD27VU+9\nZ3fMzjm+bze+Osq+RDW+7z68OWG8XF9I2zjRNvdc2U1E2Tu+dz64W+W3UVHKvjXF50S/2TDL\nNzfPVTu7SEfITvPn0E292UvKXbhB29W8zle067/3R1awRb/Jzu9t3DhP1zXAW8rYrtA8x7tL\nRq9Xd+9ETdlXQkXAPbzZRNpZv03Ax8tLZzrjey5Ga8Ezw1s30/suz7bdSk7bWN9TPbtMVdFl\n2TP/TsvFPLtZQ84z1Ek42s7nSbl7V8V7V8NvxVE/1VxRc2drwW9B2rNKT8y9ytXRw8FUQsTR\nPURbVjrJPj5GXLFzTrW4zTvMvlLr90S7e0hDtU1GssnVukfY50s843dEONFTzOfMt2td6dHl\nPzTjPys8Z0BMXdm2ulm5u+/nuMdO3N1PNkhVLlVELzJNWzHZxeO5uv9Z1ckyMlHtuzfWpbNd\n16++RjFR0TUrPbzvLNuyVDSworJCr6a6RSlCsc0mMb3NMy3Nrq/DrKKnwWnntDYqQ0g4LTy2\nvse5srbeZT03LCcrMy4yPMO5t6ymoaWvsMZWQi8lJS4qLC03S764/7mpvDzrvy1ES7rWRUA/\nrkM0zavDSa6828XBPjE9QzD/bS7jt2/zzz1nuk4rQctBvUMxsq8+K/fKNSguurbPOUarrktG\nrKGpvby0rN83Q984JSUuT8LHT66frdwww709JUzSUCsu662xSu+soMMrQK/BLCvvs7Q+L1u+\nySoqwbIyMMdKSHdKy7CqX8Ct1d3tyMDNxkwxRTAqLO/dOzZdVUgvM1fRw907z7DBMjrPrLZ3\n26up1FHMvus4OExLMi1E49vnwbOusWHMsbBLNsm2Nf9ZLza8MSjfrDouxq3KY+k7Qcc+LNOv\n38quvju7p61rLTq8qUclOLRnJyzXpK4zK8qtQSc3q7dKLVa4tFkqPbyqazzn685ZOzXDuj0q\nOU0+LkG9r7U6OLGkySkv6aOvMi65o7s8JWmosDMsuKvZKTTDqtErKVOs0yw1rrMvLduotNgy\nWKu2LSnAq9U2xbmxxTAytK82N7VrSrz3LsusVjWyyzHerzguxP8oMbG+NkW03TxHWEy3tz06\nualON83eNkbAQ/Opu109PDU8S93fwL2/Uyouv0Ex26WrTURAPM29OTGzrkUtyaq+ODk7ratR\nK0yyOSY76biw1SdErdEuSv9YrK5ML82nYzNH2XfB1TTzralBM2e090EsUautPzHXres2LVOz\nsb+7V1e6QicnOGW7q9XjrsApKsvTRW9lyqzLJzi+vT8xN8SnxjQvx9dFNEXNwO/rvttTS0Y2\nPK+2PE/APWWyNzO+sTtcvddvvkMxX8//QUq00tjEucVNLylQwrxOMryo/0W/u+fRby1Lrbkt\nU7zN2zw4uqe0Xc7HSigu3aas3F33z1k2K1+qqMo2O0P7bzUyR7S4v9NDTMi/4+OzxEztZ0Zf\nWzE6uPM0OfutrcwoLbiq2TnTzsQvKDi02TvfwSopy62qwSgiVapWLDG3oao/Jy1Ctq3NRV62\n1WVLPz13rr1HSFlD0cBMN1nX18tGOcymwk/LsbpHMig2wbLWW8Oup9EsLOmvv0UvwK7KLTLN\nsK3IOEXHxzwpK+2svG82c7SuVjlWZ29lzlEtSbrKP8O5QS5vw0/Jsj9IvqzdLiEoxKm0NCw1\nO9y+R1OrqNs2JS/BsbTvWee/w005O0e7rLhISbi8Py0+58vGa1PQyc7XU0BJa//Hs7nd/9XO\nzWtCPkvbx8JnQsSzx03nvcXvYUo3M0xb69H398e6y0Q/W9O5v1hC0Md3REY/X8nhXFFbX+ta\nTsW6vcfGb07XzUxE5+9PRT4/Ozc228BnPUA5U8hfR2W/zFVRP0fIvszvtsT7W+lb48LB3s7B\nRjIvUOtPW9VSO0FvVVzRxe/X0/dG97zLyLjDy72270Y/S1bnymVF/7vC3drJzffdZTQuOV1z\n41tAU7e7Z+HDe8u360dOe0k/Ni9Ou8/rXz1G2cXXw7/OwsRdRFF3vMo8NlVvV048Kk7BVztJ\nRDvdwVNPycztz8PKv722sLi+02FCSffRWEM5QVdGPmfUX088OkvnvP89PcS9zsa72NPByGO8\ntr3tX1tV61h33VvfTzw+WktJzspJPVNYVV1vybu9yHfv/1Rdzru7vca/YTxnzsfezM5jd1dv\nXWPX619j+0NLVDw+TUs/Sz82Nu/rXdLZY07r1OdXTlvbwcPfXFdU68jD1dTW1/vfa09Vz9dR\nRv9WQDdNzrWsvlJO08zR1crEvLvETjk7S93N41tnSjw5RWfMxVw9U/PjXf/v5d3n0dF7d+vL\nwL/FTUvXymvvUE//u8FDOTxFUffvTU5hb2VRW/9d+9nGysr3R0nKxMDMVV1Y51Vj6+lMRkZd\n829nSU/Kw2dET1Hc3crQ3e33/0pKXPfvysLJ2V0+PDxP0c7ad1dIRWPT08q/u793P0ZKYcDD\nY1vnX0BHTs64uMtj3s27uLu4ucPN70NCSFN370tPTEBBOj1Zys/nTU9XTUZpv77H70lHZ/vO\n11/vx7/N90xGPEbjy8heQz5EQU1NSWvVY0c7RVPnwsjJy87nXXfDtri6yGdJa+9Tae3r5cnT\nTTk8TNnAw15FW95HUdm/ytRdSV/nT0Rr1c9lPzgyP1H3wbm5ub3DzdTdw8fvVz05Oz09Rk5b\n/29rb1rvyr+3s7i+0Vk/PUzMv9FdTEpLU/PLxcHHyvddSEVWe3dTSkpJRDo/78G/xdNrZVdB\nTNfnY01FRT04Nj/NvL/O4+tvUlnXxru/yVtFPkJt59HFy9/pa1Nvyrq4vcTra1FNWuvNzMvd\na15PX9LJz8vr/2dPRU9r3tvdb0U8PD9Y187Wd1FNSkpV183Cv7zFaU5c993QXUA7NzY2P1/d\n4d3ra29ZV823try/w8fj49fLxsvnTkA9PVHfysfJ111NPzxDX29fU0xJSlRjzsK8ycrjUUZV\nXWve2eNTRkRGTd7JysnMYUpGRlnRx8nVd11KSUVLb8nAwczT5djCvri7vs7Zd0dEZ+PR019R\nTVFNXtfHzNXn/2NMR0JU993pTEE+Q1Pn92NNT09XTlP/ycPP3F9tR0VJZ9nZ1+NJQUVVXc/F\nzVtISUlh68nCwLy/xdPd48y8x9hvU0dEQ0h3zMrU3/9jTlD3ycrnTkVAQ0RI5cbBxc5lRkRc\ny7/AyntNQD5CVtXIy9P7Xlv/49/EvsvaTT48QUdZZWNZc2NVe8a5tLW+ydNdSEdLb9jvYVxf\nWV9ryr27v8d3SURDTf/zW0tDPD9CTWnPz+Prd0xIS0//09leV0ZAQEvvyMrX3t9v7+fp0cnf\nX1lGQExrzL68wMbFy9Lb08G8xe9OQ0JGV//XzfNNTEVET2PZytfvX1dPU2fevri802tZSk5N\nTuvj/1xIRUZZa93Jz+9ZSUlOX+/PzOdPRkE/Rk1f0tHb4e//59XEuLe8y+lZSkZJc8/P+09T\nVV37387ExM/hWUlGS1zv4e1bT0xHSU1l499dTUhGVXfXxcDE3Onna/fj2NPX41lTTUtUZ+Xh\n33tjX1133tHFvL/EyczIx8nN095zWVZPTlVfc/NjTkhJSkhNUld3d19dXXPp08nAwc/j82FR\nTExNWWNZU1NQV2Vt99v3V1RZXWd38+vvY1FQT0tTa/fa3+/p1dfLx8PAwMfZ/11aZXf73d/z\n5/NrX2Nfa9vZ921jVFlfaefd52ttb19WTk9TV01MU1Bfd+vTx8jNztXz493l39XfY2lfU0lC\nSE5dZ11n7efn3M+/vb6/ws7/Z1dv721TWU5MTlFSWf979+9tU1FOW//nb/Pj7fP3/+/f5WNf\nT0FESE1X7+fj2/dfWFVb3dXb1dt3aWNhb+/pd3NhWWFjd8/DxsfGyM7R0c/K0eP7b1RNTVzj\nyszn4953YV1d99X3a2taT1FWZ9jQ2+t3a05HSkxf93dfWVNUXWPdz+Xv/15bV1Nj2dLd+2tX\nUEtQZ9HS2c7W397Wy7+7wMjVb1VPT1Xz4/drW05LTVRt0+ldV1JHREZT39HT1917Y19v49nf\nY1RTSkZKV+HFyc/T71tRUWfRzdfva1RNSU7/3dxnXF5fVl3fxr29wcXM193f18zO52NVTEtL\nXuPM2P93XktFSFPr22tbV1BTUWXVys7vWkxJQT9IY+PpZ2dnY1tn3cvK429ZVVNRV93N0mta\nW1lPTunMwsfN0dXX3s/EvsPO3GNWTEtZ18/Xb2FbUU5P5c/L3W9fUk1JUN3Iyc7nb19YUV7b\n3/tZTktLSlfPw7/L2/djVU9b18zT61hJRkNFXNPV7WdYUFFd38W7u8LO2+tjc9nDx9l3WkxJ\nSU3pzNN3U0dDP0NV69brXlVOTlNf0cPK1ltMRD9AS+3X3W9jU01LXNPJy9n/XlFMTV3azNbj\nY1VKR1bVwL7AxszX5evQwb7I1/tlTk1f28zM329VS0ZFV9fMzttzVUtFVd7Mxcvd711JRE5n\n9/9WTEU+PEFrz8nM1/NjTk7ry8XFzm9rTD9HWefa2+9eUUlL98e+vsTXbVVNVtXDv8LXd1dL\nSmHn09V3VUc+PUV30c3R5V1dUE/dxsPGzV9TRD5G99rT1d1vVUtMXNnIy873Z0pGTnfX0dj3\nV01ESe/Lv7y+x87X79fMxsPK12dTSUz/0snK2FtLRT5Eb+Pb33ddTUZKX9TFxMbdWkhDSVtj\nZ29UST49Qlfr1c7R+15NT+fbycXG0OtOQ0hf697X22NORkvjz8rHx9VvU0dY59XNytLfZ1Zb\n383NzM53UEJATO/W083db1lKVdHKxsfOWUs9PEln3NnT22NJQkZz09XV13tOQj9O39TT2P9b\nST1Ia8vGw8XM3W/v0cK9wcbdXklHUtvMy9HhV0g+O0lc6+//XUxBQUrvycTJy9VtTlNp2dnn\nZ0xDPTtD+9bLzd1vU0hQ98bCxcnha09LVdrLyM3nXU5DS9/Iw8LJ62tMSFvhysbH1/9bTVLX\nxcHCyfddTkdX1c7Ky+1fSUVLb87GydNvSTs6PlNz5+tzU0M/RHvOy8vNe1RCQVXj1M/W6VND\nQErvysG+wtJrU1nVxL++xutPRD5K28zIyedYQTw/TfPVztVdRjw+TOvOycbYZ0xLVdjIx8zb\nVUc8PUxv0MnO22NLRkrrysTFzW1LQURd0MnJzON3TUZZ08S/wMrZV0ZHVd7NycznWk5JWM/E\nwcTWa1FGR2nbz87X/09DQ0vny8bK1V9IPjtGZ+/t61ZGQT5E+9TIytHvWktJT9nJycrnWUpH\nRm3Iw8HF229bVmvKwL/H3WNMREdazcPCxdRnT0hJ/87LzeNVS0JEWdvJxcrnY09OXd/GydX/\nTUE/P0rjzMvaa1FMRk3jx7/E1ftRSUNFc8vL0ndSS0xP98O7vcrfZVVLV9PGyONhU0tITV/M\nv8znV0tFRU73zczfZ1VNSlfvw7zC2W9bSkNCSf/dXE5JREFCS+fHyeddVU5NU/PNv813Z1hP\nVV3jwbzJ1d/v//ffw7zA221XS0dKYdfAzOfnd1lSVePHx91fU0dCQE3byc7/d19XVFfjzch7\nTElDQkdMa8vP92tnVlRb5cS+ym9bVEpHSFfdzHtRUUxLTl3PwsfZ6/dnX2PlysPVa11cV1t3\n28XE3HtnVlFTXuvW5VtTU1hl68y/vcXf721OSUpRaW9RS0hISUxf3c7Q91pbWVxj3c/Jz/9v\nd2/z1czEv8zZ4+Hv49fMycnXX1dRTk9YZd3cZ11dVVll69bP31xRSkhMWm/TzeN773d773N7\n615FQkNESlBd4czV7+vt7+Pf1c3Pa1FOTEtMTlfnbU9NWGfz59nJw83f5+Pe3ePZy8jf8+fr\n5d/f08rX/19fV1dPT2n3Z1FXc/fv7dPIzOdlYVVPTUta92FRTlZdW1VZ7+F3XG//d19d99va\nb2/p3ePr3cvEy9LPz9XvZ2/d41dOVVVPSlRp2913d+//Y15r599fV1thWU9f18rM3dbR32NT\nVlpvVUlKTEtITGPUz9vp3ed3XXPbz9n/e29jUU9d89fj79/n/23318bDytfR6W9de9PKytXU\n1ON3Z3fYz+dvZ1BIQkNNXWdbd+t7e//by8fN42lXSkJDS23vc21vY1tPVu/Y3O9vWU1LTmPd\n0+X3/21rW//Xw7/JzdPjXVVr2djhd15RUUpJd9zT3f9rXldQb93S3fNzW1lPU+XKxMbN4WtV\nSUpdaWtYSkdGQUhezMfN0+13X1hr0MnO2G9WVU9Md8rFydPr3fdd6czBydn/V1FJSVvOxsnW\n92VYTVTZzM3bYUxLQkJW6c/U43dhW1NZ2cnL12lNR0I/TOfT0uddVk5FRV/Z0dxjVUxEQkrn\nz9PnY1lVVmPIuLW6v8vZXU5d3czK2OtnWExLd8nEydn/W0pHTPPPzuVfV05ETN3JwMPS32dI\nPkJc39rhb1VMQkVvzcjI2m9fSkBP28zIzuttV0NFWdPExcrZ51dR98jBxM97T0U9QGXayMfV\n62dGQ03bycbR71dHPkBc0cjJ0etfTkhd1MvJ21FJPTg+TO/Pzt1hTj8+TenNzdJrVEVASuvK\nxMXQ72tQT9nDubm9w89jTlXdy8jI0/dVSEdrzsfGyutZS0NId+HT0u9XST5DT9/Kw8TU/0lC\nRln/3dx3VExCQ2fby8vS81lDPkpd59nV71RGP0Jj18nGyNXpYVfdwr6+wdhtSD9GX9zNyMnf\nW0M/T9/QysnXZ0tFSfPOx8XD1u1RS2PXzMzN2FlDOTpIb93W0XdORD5K+9PPzd9dSz9I79HJ\nxsrYY0pLd8a8vL3D2FdGTevZ19Xcb1dGRHfPwcPF2PtKQkln0M7P22dJPj9Y1czM0/9TQjs/\nWPvj3/9fTD9KZ9HLzNF7Uz48RG/b3N93VEQ9QGfSysbL191dW8+/urvAy+lMP0Nn08vKz+Nc\nS0NW1cvLzfdVSD9J48zEwMjT51NSb8vGyc3/Tj89QV7Xzs7ZX04+PUlr6+f3V0s+PERb08nF\nzetVSkvnw7y7vMjfWktd2c7O1+1fSD5AVc+/wcLPd0pIT93MzM3bX0Q+P1PXzMvPa1A9OTxI\nZ+/l+1lKRkzrxr+/wdddR0VL683Nz+NWRz5Fd9PFwcfP/09OX8a7vb/J50tBRm/NyMfN62NI\nQU/TysrM32dMQENP1cfGxdHpW1NZ28bEx9VZSz87R1zf2NfdVEM9PUdr5+9vSz86OT9j2dLM\n2HdfVmPLvrm5vMHPa1lnz8vR1XtMRT8+T9XJyc/vWVNMV9jLyc3b/1RKTVvRx8rP71VDPjxK\n/+Pf71lQSkxf1cK/yuN3VElNX9PJzNlhSkRCSO3Iw8nX92ldZ9PDvcHU61FGQENdz8nN32VT\nTU1fzsHE1mtRS0ZM783Gy9z3Y1ZRW9fFy99TR0JARFXVy9NrT0dBP0Zf3+VdS0VBP0RN1sXS\n6WdeZ2fZv7S0vMTL0+v/28vCz19OTElNU//Iwdp7W1JOUVnjysxvWlNTWGPdybzF43daTEVD\nTtnO71pfVFRXY87Axf9WT0pNTF/bxt9XTklHRkhdzszna2938/fQvLnG52dTTExMb8jG529r\nX2Nbb8rC129SSkZHSvfGxNh3Y11jXmvdyeNMRD9BRUdezszvZ1NNTk5P88zVa05LSkpNa93K\n0/tpb//r3cW5ub3Fys/V3tnOzN9ZS0lJTVX308vjY11dXF9r49Hhd1VVVV/73czExuFfWUxJ\nSExf/29XU1Fca2/h0+VjTEtLTlRb8+fvWU5PU1tp7dHKz9vb18/MycbGx9xfUU9TU1nz2+dh\nXV1hb+/hzs3rZ1dXY2//48nI13fv49vj7+vjX0tGSE1bXGHn2f9fYWf/92/t0dNpTlFUXVpb\nd9vvXF7/3NXZzMDAxs7V19Xbb+/Z41dRXGtvXV/r3P9bXWd7X1FY/3deUVr/3Xdr2M3VaV1V\nUUlDSF/va1tdZ/djX/PX52tVYWdfTExdb1tOU1dfW2fjyMLHyMbBw8rOy8bO811dXU5IS237\nY1ldZ15XXf/Mzt3r7d/rd2vRxsza39fa/11d9/tVSktOTkdHT//ta2dv/11VUf/j71hTUk9L\nTmPj29/Z1NPW19HGwcTK0d7vXVJb8+tvaXdnWlNb693d7/P3d1pMTmX3ZVxdYV1RVuPNzdnh\nb19NSVL/3djd5ef/Xl1v2tHd6/9bS0VETWl7Z15fV05V7c6+vb29wMfP09PIyNnpZ1FGSVPv\n3N3j/1VMSU5n6dXa529dUVVf28jFys7XbVpVXvf3c11ORkJAR1lz2+Pra1RNTVbf1Nnj/1dL\nR0x3187P09jfd/PRxr++xdl3UkdFTnfd3+d3XVBPX9nMzNHfd1xMS1dv5d93Y11VTVHhy8nL\n3WtPQUBK/87N0ePzaVVY69HM1e9hTkA8PU138/tnV0tHTHfJv728v8PL09LIwb/J52VMPz9H\nc9PW3WtQREJFX+PZ22tTTklDVeXCv8DGz99bU2vY1d9zT0Y/PURX39jfc1dNRUNSe9PV72NV\nSEhO787Ex9Hjd2lv1cK8u73O91tOTmvjztd3Y1hOV3fOxcPI1ndUUVt729feY1FOTFjr0cTC\n02NRQTxDTF3p63daT0tP98/Hx9BrTUQ9RFVv3Nl7W01FTv/SxL+/ytXr3s/Hv77E2l1HQ0ZY\n/9/bb1RKP0Jb/97b42lOQkBFZ9fJxMXO32tz18vKz95fRj89TP/f0s/f+09ER1f34+fzVUc8\nOkJj2M/N1N3/W2/Lvbu7vcnR/2P/1crHzNp3TURKa9PLzM/nX0tGUe3Uzt5fXUhATG3Ry87r\nX0o8O0NU9+97WVpJSFrRw8DDz29XQ0FRZ+Pnb1lMRUBH38jAw8jT32Nj28fBwsnrU0g/SHPc\nzM/nZ1JFRlPdzsvN32NOSkzny8fFydPna13jzcrN2l9TRT5KX9XOzttfTUREV+3V1elTRz87\nP1n/2NXh92dZa8q+ubm7wtpjVFzbzMnK129QSUdn28/N011PQUFMY9/X3PNZSUFDZ83Gys9z\nTUA+Rl/f2dxfT0dBTO/Xy8vZbU1AQEr3z83VZ05BP0nvysK+w87pZW/Rwr6/x+lfR0BJXdnM\nzdpfT0ZHZ87Gx8rlXU1JT9nKwsLK3W1OTW/b0Nn/WUo+PkNpzsjIzntPRURO69nd91FJPzxD\nUOfc4/9bTklTd8S7urvC12tZXePIxMreW05HSFrpy8fL1WNLRUZb4dHX71dNSUlWzsLAxddX\nSkNBW9zL0N/3WU1KTefIyM3rTkQ/PEjfz83XZ1RLR03rwr2+wszl/+3Zwry8w91RSkRCVdnO\nzdlbS0VGTvfGwMnWY0tGRU7XxL/G129cVVFrzcvcX0dCPj9IZ83I1OlXSERET+PO1mNNRUNC\nR2vWytpdT0pGSWfRwL7L1mdjX13nw73D2WtTU1NfzsK/z+9rVE1OUu/N0fdUTkpLUe/Ev8bd\nXUlFREvvzcfa/2dUTlhrzsLM51pKQ0FBTt3M1mdaU0tPXdG/usTO1efr3dTEvMffW0xHSEhV\n0857T0dCQUZP/8XE3nNXT1Vde8a8xM3Zd2FdVXfPzmFNRkJESlH3ys9nWUxJS01e1c/lV01H\nR09Z3cjM72NbWmP/1cW7v8/b7213b97Ew8zrbV9j7+PNxsfab2teW1he39HnV1FLTldb78/T\n6VNKRkhMWeXOyd9rY15nc+vTzuNnVk1NTk9d5+NbTE1KTlb/z8fI1dvd2c3PzsfK91lTTU5R\nW//Z1XNOSklLVmf309tjWVtn79nOxL/Iz9//b2tXW+vnV0pLTlFcY2vh61hPSExjX2Xn195b\nU1Vj9//v19PrZ3Pz1czLxb6+zd/3/+//a+vW2nddZ2/j92/r1fdbV11jXFNV9+tlWVtv7/9h\nb+9vTUlLU2Nj79nL0vd3d+97ZWfn5/9YVVpbUUlPX1xJSVNbXFt328bGzMvGxM3a39ndZ1hb\nbe/3d+PT1GtjaW9zY2/n1etdY//n83vnzsvZ5f9vYU5JVf/3Y3vv429bWXvf/2VjbWdXUFvp\n329pd/tvV1n/29vv7eHR3ePfy8jP2+f/WUxHVe3d7/fj2+9dWW3b3e//e19PSU1z3ePn3en3\nd1xj6/9bUlVPTk1Qa9vc6//vY1dQUXvZ3+vrY09NSVF36+/7d2dlWW/ax8LDw8TJ2/P31tHV\n3v9va1lSa9vP3elnW09IUF7f5+vvb19QTlvcx8fN2fdjSkVMXeXj3ud3XVVP/9HT2edeTkhH\nS2nf63NZUExDRlnn09HV2+/7d+fHvcDGz/9RR0ln2M7O1+tvVElN59fU1913VUlFT93Ny83Z\n82tXWe/R0O9fT0pCP0ph18/T2ftjTUxX18vP1f9hS0dM787Jy9Pn/1ZV886/v8PK0PdXVvfQ\nzt1tU05HQU3nzcvV72NVSEz/2s7Z/19URkVO28fExs7nVkc/S2/r4/dtaU9LV9/Ix83j91lD\nQUpr+2dXTEc/PUFl1c3V6/9vV1nbxLm5vsbTX0xP3svHydlzXUlFT9zMzNZ3W05AQlnjz87Y\n5f9aVWfOxsnQY0o/OzxN3s3K0O//UUdX183HzO9jSz9EVenMzNT3YUxLZc7Cv8PR53dWWdrO\nydFnU0g+QE//0snP42dTSEzlzMjJ02lPRUBL4c7LzudrTUFFTF3v5+tfV0xNb83Bvr/K3ldJ\nS1v/7/9tT0pAPUtl2c/N1ftbUVrTwry7vcnhY05l2c7IxtZ3V0hN79fNz9dvU0FASXfc2dnl\nb11ST9vEwcXK81hBOj5O59XV3W9SREdX3dvb42FNPz1Ea9fV0tl7W0xT18nCwcXM315VY9TK\ny9P/U0Q/QVXr2dned11RTV/b0c/Z72lVS05r1szO0edlTEdOd97d72FTTUhM38W/w8nW51VN\nZ9PJy9xvTUA6O0/v19ffX1dLRl/Hv7u+ydPvU1Nz0cfIz9zvVkpZ1cfL03dUSD5BY9zRz+1b\nV0lGV+HIx87rUkU7PEr709PeY1RJR07jzs3XY0xGP0Fc5c/R32NUSEpay767vMbN5W9j2sfD\nx9dXSD89RHvVytD3XU1CRVLVx8nN71tKRk3Xv7u9xtxzSkdX387R52dPRkNN/8rBwsrvVUhF\nU9jJx9D/S0M8PFHv1d1vWE1FRlHNvr7B0XtTTlHjyMTG1G9XUk3vxMDF0WFORD9DV9vKzdxf\nTUdFV87Gxs9fRT47O1DhzM3XaVlNS1nbxcXP41VJQ0JXz8TH02VKR0VL28S8vcXN3fdt98y/\nwtdvS0M+P0/Xys3fV0pHRk3ey8XP719RTVNzw7q6vs13U0pFUt/X71NIQENEU9DDwtNvUUhC\nRk7TyNHvU0A9PT5SzsjO91ZPTlr3zbq3wM5nT0pMWM7Cx99jTk9OU9m/vsxvUUxGRk3/x8Pb\nd1VPTlf/x73B900/PT1AWMa9x+dpYVtb986+vdllTklJS1rPwMV3TURDSFHpyrvC2etnX2dv\n18DB6VlLRkdMX87Dy2dQS0xOVdzHweFRTUtRWWnMvL/R+1VOTUhL79z3SkVCRk1X3cfA111O\nS09SUufJ1WdMREZITWfHwMrrb2dn++PPvbzPd1lPT1NZ2cfRd1VLTE9Vb8i/zm9fXF9rd9nA\nwNLp/2X39+XJwMlfSEA/QkNR183hW1FPWWN33cbD3GVLSE1NWt3N019OS0xca9bIv8v/Z15n\nY//fzNVvU01PV1/pzsnQb1JRV2Fv0szMe05JSEtVX9/MytdfV1ddVV3/3eVZVFlb8+PQy8XR\nb11bY3f/59/nZ0pER0xZbd3Oy93r79vRzsvGw833Z11bb3P/2dfnWlNbY2t33c/X92Fjb/vr\n79jK1+tr99vX4evX611HQ0NDRUlXb2VPTlNf+//vzsjcb2Nnd29p99TW91dfb+n/d9PK029c\nYXdzV1V361pPU2Xn523dzdNrWmv33f/r287tVVVl7+1z/8/L3Ptvc3dVSlPv811c/9/a/+3W\nydT3Z+fdc1lTd/9dSkpPVE1KWefa7+XTy8vZ1srAyd/j63dSSk5v4/9cZ21fSUhd59737eXb\ne1NV68zR2tPQz/Npa9/3VUpHSEY/Q1vv+2Nrb/dhUVPdzdbb293vX1j/0tDb3+Pta1VR3cnI\n0dXZ61JHSGHrd29v82tdW+PJyM3R1dv/WWHpz9nj4/NvXFlf1MnZ5+ttTkVASmn/a+/j72db\nWe/LzNvb3/dcUVPn2ev/Z1NKQkFV3tnf1dvd93fWx7/Hz9f/TkA/TO/b3+N3YVBHTf/n3+f3\nZVFGSFXTyMbGydb/XF3d0+t3XU5APT1M69PY3ftvU0ZLY9XO0NXrX01MWNXJys/db1NMTenC\nvb2/x85rT1Fv3t9nWE1GP0BS08PDy9j/XUxN+9XN3mddVEdJ98zExtLnWUQ8PEv/3+n3bVtR\nTV/MwcHJ33dbS0xe2czP22lTRDs+X9na3GtdU1Fb18G9wM73Y0o9QlPb0M3X+3dSUnfQxsTP\n61pMSEf3y8jFzc7T82/by8PL42NLPzo6TO3My/NVTEdGW8/H1e9lX1dKTdnNyMXd3+1MTFvZ\nv7m7w91jXlvf2dXea05HPj5Lb9rMzdDvTTo6Tffb3f9PRENFZ83CvcHL419OVGdr5WtdW01G\nRErdx8TE229JQ0z3z8vI1mtLQ0BN79nU0WtOQ0NZ2crAwL/I3VFHTWvXy8vR51tMXdvJxMnZ\nY05MW2vT0N/O0vdcSEbau8XI1UxOQjhET0tXYUlb7UdabdvDwsbdVzxPY8e/bVnjZUtVPT3N\nyr21z9drX2/OzdvJz+9bODc9UePOzVvT1udrRC4qLkqyrK++1uNMZ1tJW0vav6u0t71F3VdC\nPzU1OVJrzsZjX+fKurnM39nj42VGZ2NBY0xOSURANLSlo6VPKh8nSq+fn6Gq50YtJCQrLz69\nu7S998+9v797Ni4xKzpvXbWwrq3H32NI1r/D1vdnP0g9KDlCM/tAMTUvOb+vublGOfdOv6+r\nqbC+SkUuLT9OvLzd1UZPzysuTbypt0ElHyy/p6Gfrba+OicfISnPtbOvvbm3sLe8xTkzKiIl\nKCtFva6qqK+tuGPN28O8yE9jOzlrSfPbR0A4NTp716+tt79vV9rPx7i/0c8yKyslLjUpO6ys\nqLkpHyYwtKu+q662sckvPWNXt9nnx8C1qKq0tV09MyMfHyQvO1NFT8zMvbKxr7DId0E0Li43\nSu/XzdLr1c7Fua+vr7zbzse5ra6uq7HLOTAlKjM0Ql1va+M6KjFbycTeOkL397ywuba3vLvK\nUUppy7W62Uk4MzpP78XI5VM4LCYmLT9Ye//hy8fHyMS+vcnbb1Bf18q3tbzH61FVSkNZ59r7\nST49PUNj0cC+ztPVXkxHQWPN09tpRkVPd8q5vO1dT01RPjpV3MG/xc7Myb++vsf/92VOPjo+\nU99nPTk8SePOzsTD0eljXV1b3b21t8vnc3fbz8e7vclrQDQyMzZK38jGyMzTSEy5REVZ3ExH\nPkdI3b+4v9VfUl5NPTXD0kRBPUhNd86tvM9lSnvrY8K5zsffUDld7V9GSMldT0hOR1w6OstX\nY1tnVrC5wqy+wb9A20VKzvNDrrr33TlHudDOs0fbTzpBOz9fW9PaO1Tf12XG1XdIXThvQ0JX\nv66suEJETeXl0Ve2vmk9Ly8tP1PNusqvu82/1b7C2UNMNjRbSjU6LzPKuLOqrKi12zk/NTg+\nS0vdwjxAQyMyRS3HxDbQybztNTpIvKWkuMq6srVvOiUutKaswCofJSw5u8a2oafGQC8rc9/V\ntbCno6WzyT4uLyonJSsqNjhGurW1uMrTy+PDtke+rFPMtEu7vjNfPi7vQS334TTD2tuptl3p\nY7irt8g5MC4kZdH/PiwrQjkpMC/Koaauu1w+TzIvvLCmqNEz2N9JbSooTkg6LjrPprE7QsjG\nvuM5uKq+ubbPsco8u1QsJCI4sqtBNzX3u0Et86ygo+vHrcOtr8a96yUlLShZqK21UiEfISk9\nrqmjn7NfUzQ0VVTVpaeur0I6STMqLzs+21kvRdK0smE3PETVu6+sqLRTNSMtPzVjuffpPic9\nWb3IzL24SiwpNLKqqKCpuEEnID08zq65sMpCQTIjNbfGvjQjNVVDyKupn6pNQDg221M1trK4\nv0I9vb5bTzU7X0MvP1q+uMrCvr7Me2fExj7G2b+460TBsUozJifZRnvN0cFILWs9QLmyd6u6\nSVYuQ+3de9NvRy8jNberr98uMTU7P/exoKS0UT0vLSQzU/+9tL2xu2dKw+97XTM7NTIyPWm4\nva+pxazKzLGtv7lIVT05NztVyPM9LjtZvs2zqcTGTyzX0b+trMm4QycqKDmuvLezZV88KCxC\n2bO4xLfDPlQuPnfX2b/X/+NXWNXHxrpcW1Q+PzcyP0pTz8LPwbK2t+/O619IKjEtPDdJN9E+\nwttJ07zLvb3MwtHH3Xfvwm9d4zxLPkXnzs7n48Jady5j0//DT9rN71xXOvdP1uNj2etK48rG\nwWfIT1s//9O0ta69w3s9MTA7Y8Xd4c1GRT1Ib8bhzNRfTURFyL64v+NnXUFHZ8nIyndJRTc7\nVdq6t75vQzU5PkzczcjpRTw8PEhYW9Pd520+PjxJ0cy9vuO1zL67u7a5ws5fTzszOj08Vk9V\nWj9DUsLMw85vzu9ZU+nfzcrTx8Ld17++vL3K0VtKPEdJ4+PX2W1va2XPxsHG0Fc+PC84Rltv\nzMvZ0UxKNk4+X07PydnHwbTHw8rt9088QEGws29V/9xZ/+/fzf/f4UlBMTpJTtR7181TST9b\nzW/AykvhTUdERj/Dy8Lpykb3Q01C2Gu9XD8+P8d7y8/LuMvtu97Vyr65tblVXEA6aUZv5Vvn\nQmtZxWXv0dpGv2vD58u0Z8M93Dj7P7r3usrf00dCRkLPY2nCTUw/Umfv41Hd/81PPldPZ/Pb\nS8s7Vjlv78i6wrzr50DnTNTfv9hf60fORlTFUbg/7zxRQP/UT7tpWUdEVzu6293G1sVJ2z7A\nwsfTslXWSVPXOsFOtFW5RWVMyEpGvUPISL49ylPO1+NYuFPN6d61xMZnwzfOTU/hvU7fa0Zc\nNVLrvt1H93dNWDXbTLBPUss+vkFXR8FJvl9bW0HMSV9Jx0TZQ2tXQ7ZPtD57N1NOMck4u8tJ\nWEhnSfdIs1fFT2/fU9w/ulnFv1F3PzrOd1e40XfRLkXfOtfA/8iuTVW6Pce+RLXEV8PrPbrH\n97zIPcY2K807Z8Nb7/+8P//fQq/3VcRIU0g3xP/LzVlZ/1VI2M/Gw7pWRdFHTHvdU3dTZ2NZ\nPjdRacjr0ffN1kBtRP/VPk09PEVBy8HFusnR401PUs/K18xHSkJKW02+v76/TE7ZUstZzcrJ\nZUhHOEVVZ8e640Vvt7XM2uPJtLXF4ffpz+dcVTo9ODo1Nj/P6dvOb+vF1sy7vca8XfNhSENr\nb2XjWVD3UF/Ku7i/yFNLMzQ5NlBDSkJGRUfr1Lu1uLy91sra38Bt49trRDgtPELvuMdfSTlB\nOVtJU19Fd0JGPz5Kvrqusq+ytru9r8G63TkzJSYiKiw4S0vZybuzq6ukp7CxyW9QQUhJ005A\nODs/Ql/Kt7CvvN3Ma1U5RsO+a0UtLC41V+vVREQxP0lTR9HNwrq+u83Hu7GqoaSpqa+9y/9L\nOykjIR8fHyAiMTxU08m7wrOusauuusnKY1PfTV3vY/9tZ9PJy7+2sbzL6VVJSjtFSThIQko5\nNzIzQOHLY1tAPkjOvLOtrbm4s6+pqaWqrLe72Vk/NDEuMCgoHx8gICcrNFFQzb+zrKekoZ+i\nqq66ytlr+0tTPzIuMjE3RG3NztDR2/vnztXNxl/VQT85OTU9Rk0+Ozo4SExvyry5ubq3vre5\nt7GyucPT22tlV0E+NC8rKywpLi42PEdHV9fOvL23sq+ytbu2srS0sri8zOf3b2PcX2f7UUJH\nQD5JOT4/Pjw1OzlNTO/ey83LxMG8v7vAuMXdZ0pIS0tLWm9jV1lUX1dvZ97e/1VnWV/Ta8XJ\n61lMS01YTE9fd29349/Z3eXb1NNdae/ZzdPHxr3Jz9Hn72NUSFhPRENHSFtZTuvl/2tlY2Nf\nS05ZWVhMWenb0dXMytvf+9Xj6effy8fV18/Kz8/XzMzfe/fn49Xz5dHdV1lcUVJISU1vTklO\nT2FnWl/33G9hY19eW01Za/dfZ+n382Xd0t3rXf//929z38/V4/vtb1hPSFl3Tk1MT09JR2Pz\n3f/3d/NpTWndys3RzcjT1OfVzcrd891391tW5+HtZ+Vv61RMXWNjWFtYb29WY9/b2+Pf2WtL\nSVB36eXX3ON3d2vSzMzP2dvnX1Jd29vn9/dnXldf4dvc6d/l329v68/V43tdWUhGS1rr42tr\na1dIR1Fp6+//42NJR01319TX0s7be13t0tXb6+vzX1Ra2c7K09LX7V9VXefZe2dVUUk/QlP/\n9+93b2dPTlnTxr/Cv8HV71nt3dPa3/d7WVhd59DT3+HvWk1JTv/7b2ttXV1SV+nZz93/ZVRB\nP0lV/+vf2d1zb+vMwMLGzNfnXVRj2dHj81lOSURLY29tb1lXWU5Z79PN1etVS0NBPdtzR7Zd\nSsxUxd9KubHv91gw105H1ufQxs9lb+P/z8TU19tXSEDj5dG8d72+XMPrTP9hW8/fO1ZCPthL\nX9VNXGdOSv/3c8a/Z7rAz7nAvthV50lIPUI5P1FG1mdVPUpP77vR3co741Jdurm9wrHnM08q\nMMI3vLs7tzAu60tPOq6/tLAzRD02z3exoq28OiwlK0A0v7dLtt5EvVPEws9pZ9c6zEQ1yELj\nt9+wVFa4SLq4TrnN/y7KtLqsVy0sJTytpqCgyTsqIjXF47i57bS/QkIvNNm1rLjVMSw5Pr6z\nycvzV0lWV2+9s7KzUylbt7mvSywlHylZr6mpvywqHy1D17yqqrOtPDEvJ1e6sq3OPVM8XcZU\nuuFzx2lNQm9fsK+9Wiv/ubW0MykiJtyto6jDMigiOXu9rdXM3ry93s4+RcjDzcTtPNJBSesy\nYUhnuLPUzr93qqtJPr3Jq8YuKh8o0a6kqksrJyBE48S061NPxMzfZzNPxsK9VDdBPUp3S09K\nR1XazsfFuLy6wkKuvrWuQTwjJtOspqtfJSQjO7+/t1w1QNPKyvcuREpzwONfY07pyczlVVtM\n48rBvbqs0zi5wqmv3dcpO821oK/TMicvP8u7bTw+aePNazpEPmPB381ZQlNAT1djy9dOSjbW\nuLZQu620p287KSrNq6OmzjMkI0f3vb9K6b3EvDwqKDjKsb5OLSg1T7e0xt9IO0RpzrFz/7HC\nqPc1SyzKtq6fuO8yKDZfu7rDS1NnzL3L30dHVU9HOC8yP9vCyrxIODgv07q+w6mzpbw0Lizr\nrKWfs0IoIytItKqxtldN5z/XzrSrtXcvJh8qNme6wLlMMyooUU7RrKSoskMpLT20rKu0NzUt\nLFrItL3NOV5N78Jrv77JyE00MC0wU0/CtPdWKyg+NkPbv6+ouzwmKE6tn5+r0zEsL1S3q6jT\nzUtLyWe2t6620Fc1Mi85RHe9vsE8KjEtPF/Gy6nJv0ErQzDCp62q3UEuK0S+sry467uxwLpv\nz8PNSz8uKi4rP2POustMOy8yOT/Hta7KPCgqLNy4prK50TNbWtumta2247C/v7rJzNlKRjor\nLykpOkHfykVILyxfPEzTOLew37RPO1g+r62ssU1NP++tv7y/17a/wsfJuMfZXT03MC4pNDJF\n3mfeRzI2NGPI2bzTvbS0uFNMQE24sauyzG85b8K4ucxeVcK2r8xIOTNBOzM7LTEvN+Pd91M0\nODk6RUzr1+PIzq2qrb89PzjBqqqor8jlZ0lJQzrMz8HDZVFAPEpLQWc0R89IzGsvM2s381Y7\n777VzK5luLDTqefHs8nHu7G1uMdGXHtX3chDOF00azo090FQa026O09MYc08TznERUfLSLJT\nsLZetEnzssSrZ6++vbZVuGO8VN86OdssSTYwQDIrSzlVPm0v4Uk6zDjaaz/Qv7G+vtq2Q7pG\n3dDK4fu2V7J7xFW9QL9nZ1Q9wD3GNOc1a0JrRFVfQ8VX0EB720xvvtDHvM7O7enr0mfK07/I\na8Xe48bV1XNtPd84zj/ZRVb3T2tvS+dPXE3pPctHX0xB/+PV40q3SbZKzEPIyT/LN8tU92Nd\nyG1La+FPwVW23Ne4XcNZwTrHP9BdRlRETUPvWm0740e/b0HjXMxbzMBKuN/FSMJvxMZKy/PV\nUsFDe9HtOXfZa99KsljEzO2/493r0NnATbdD0jbzPt3jPuVEtlq6P70/uTxT60zaQL1PxErn\nOOXlMtM0zlB3R0pZPnc32kvlTNFFxvdVxVddV10z3k3v69NjWsJP88lQxDjBO81X6/vnv1LR\n5c02xDPPXnfJ77blvj67Qs89yfv3Wul3Yds6z+vYe+NXVdNYytzMP89MwMtBvsvKxMg3xzVb\nTXdLXVxpY0nEMME/xsZV6dm8T7dIv03AXUjRP85CwVK8y1LXVGn/XMftS8s9zd86Ous8vknb\nOt4z7XM6wzPBTNtOO7pGs07SyEvOX+FOve/vSk/ZQWdjYbZvwkfnzVzMXc7Mukm+U0jbbT7r\n1N3lQbVNvNPFb7mwQLvIWLlE0bs4yjRt3DbJO0fANs3LL9dGPb9TXE7jc3e8RrrOQq86ybU6\ns01OtTy6SjxNX0tvbW/P20tLvzO+b0W/Qla+L0q/S17ASl3FVP+63cK9Sc7zOdQzPN49c2NF\nRldCXMdRWu9BY8ZFzVpZwdbVx03n2sXVvm+/xGvUSUvlzd3YysjfxUNC7We+usbjyj1XSEpS\nRk9F607/0eu21b/Azc7rS+NlZdlFT0VMyHfF1eG728tMTUBXZ+v3QUU4Pz9TR19Nzr7Lv0M8\nOmHEsa+94TQ2MkVOT1VFSOv7w7+5v77T1PNKPjU+Tnfze2dv7829sK+urrrIa0pvQ0VOQUM9\nOD42VWtdys/N0ddXzsC/uL7L31NLb0rMa1/PU+NcTlVV23PRXktRQUZdzrvDwO9QSU3lwb29\nxVM9MTdAU9fZzslcb1VZx8zH09XvTE9ITFrf385rX0E/P0nn1c/OX0tPPlpp3dzO1VdJRElL\n42/f/1tJVUta1dvPxc/KzWfrd9O8v7+/3ttMTv/c2ettSFVDSu3nu72zvb7JY9N31evcW0RC\nMz88a2H/505GPD40Tl931tnv70v737y4trbAxu1XXF3nzOfEZU9BP05h1VvRTV1HPz9AZ1zP\na/NEPj4/U9nMzcne72/71b7DwMHZ/0pFQVnv88x371NFV0fp08rL2VpRQU//z8rIzuNcTk9Y\n3czL3edbRkBLV+vGyMjR72dbb83Hxb3L2W9NR2ff38/vV0hBPkr/zsLGw9PfWVXj1cvO03tN\nQz1FV//K3+9RRT47Q2fv39NZa0nfd8i/w8DnaUJERFPj18/e911KSVxzwcHJd0pHUvPT0V9L\nTEn/y7/Fzv9YS05dU1dN2cS3sri/50w+RFXl6+dJOz4+RlbMx8TGyNLP7e/fy8HIzfdpRUVH\nT3dv61BMQz86SG/ZzMrM3M9z59XHz97Wa1pRTV3PzcrVTUk8OVfjw7u/1+9vT1ffxcDD305D\nQj9AU9labT85OTs7W8i/vc9jRUI/Ud++sbW4wM9aT09czNX/d1xET1ddxLy8zsnOT11OTM7P\nY18/OTg/RtjHzNDj2tVj08S/urTMz9FrTc7F68BLM089MUJH4bvKT2dXSkhtU9fR21/HVVVn\n5dfOVkc+ST9S6+PK00hV3Ur/1e3DytpO+2k/U0xjwMvpytte71nhu8C93VxDQU09aczj3mdX\nVW9N29PS11RKT0c+Rk7vbef//1vP7XfAxsbKTc7tUdH/zL7Oz9Fve2NTb8rz81tHQTxKU8m9\n7+N3RU5BWdXNwcnJyu/jTE7NycjOWXdAO0dT18FvVFVDRjxSWO/VTUfzPHdbP7zP0MJFXc9E\n3vff2j9VTl9v69u86+ndREJNQ/fAxczvRl9RW3fz389n3/vRVctjxbjAwMZRVUxO2MnBv+dh\nY0lrTvNd7/NVZ01fTEpS51tr7+PczOPL29DOTkM+REhIbd3M2FdpUFfX98fAxMnj729T32vJ\n2uPZVltWU+fRv87ca1JTVV3V2d9RPj89Q0JPTsvz5V9zQmdMY97Vy+9RWU7f3ci5zs1YVETZ\n///A1+XdPVhARdFvv8/dXEBDRUfr3rzO2fdYTlRfVcfJysv/ymtvzcS6wdHvS05Qd93RzGtM\nTEhIS1dnY1dJT1dHV0hn5+Nf2W1n2fvZw9TOSk5dS1tr0s3Fd1PjTOlpRtJGY15D1f9rym/N\n2FNX62fY3WnOVeFVR+NPb2Vf729JR0tS62/nxefH0+nOb1nnSN3vVtvr2tFPb2vR29v3zFVN\nVT7Rb1DP98nNXl1d///nZ8Npd+dNzNPNy83B3dRK2mNP3D3a52/PX7/KxdHYyEdVSU7LXNnn\nR2s8O11N81lMSkI/Q0hd0+XN52/GXNe907vve/9HUURzysTH52tDY0JMW2/K9//dRVlRb8rK\nydx7b1xbb+XT0M5n0/ff3t3Ra8xpT3dMRVd7xtfJ69ldYXdK0NPpXndl2f/zzNfeUUNHd1fv\nd3fXUltRSGtTe8DOudnzd2HjU8vjxtlrW1tr8+PYz29UP0lPd+vPzs/KSttLV/890mf31UNj\nXz9HREvcWdhZQWU8aV1j++v/c2d7bdHCvL7M9+ll/13329vJWFFvS2dX0+vS6Wd7UWtU5+PM\nztDbydPr0NXR2tnU3Hfbb//a995lX0g9TUbP1tTXX1dMTEj/3e/PZ9lNZ0VjzdHMzuFOS0Nb\nc83O51NEPz1MVdDHx8rd72lPUv/rz8/O1llMRExf43v/b0tPUVvHv8fG+2djXWfZ18Hn71lN\nW1NVY9Tj2GNIQkJCVtfpzmNeTWP/58u+xr7b3/9LZ03Tyr6//19HR1d33czM129ITFZNz9Zv\na2tX5U370N/B0f/TW1djd8jF299TWlNJQT9P89vf+0xJP1jhz2dPQlPd19/f2czJymNVSU9c\n/+NfW1VZSkxFSczMw83nZUZdd3fGy+POT1tZRmnv2dbO5fdHW2frwrzFwsvVTlNX7+Xpymtn\nQ0tP3MXf2Fd7XklHPUZv2e97UUlGS9nLw73O2l1OTmft0czN0Vv3TGdj38nO1ftfUE5TXsrP\n119BQE5OWd/SxcXPUUk/XdDHusfXXU8+Pk1SxsrLSkVAO2X3a1/Vd/dTPkRU4cPN33da/15c\n/8/M22VTW09ATP/Evcbba2NbW/vQ0cvNZ2NGVG3rwtXV011RX1fby7y+0dhz90pTY9z30d/3\nSzw+RtnPzednW0tHRe3Zy97XT0dDRm/Rv8bPe91LQU5P19vV309KQUNA38nIwtP3UUdO283Q\nb+ffV05HRHu/wr/Za1tDY+PAucLJWVtOTk1e59PH5d9IP0Bd2MZp329XTDo8X83Hy+ddY1xT\n1MnAw9vZY09DTnfBvcbbb1BFSErXy77Gc0I7SkxYY9XG0dtYU1l717y7vM1rVlpXa/fRy19v\nQklCSPvWw9xDQ0lEXWVj3P/ZTEg/Qk3pzdXIxuNVSz9N58zBe0tPPlFPb9HFyMTrVVtr3b/E\nw99VWU9KQ2/Xw8jO41db7+fUyL3D209GP0XfztPZ5WtbVkZP48nP505NSD5Md9nZ62VfXVlM\nZcy8vdVeTElh49fBw8bZVEpJS1tvXl/37WtRQUNLY9Tj71lNTV//zMfMvb+/20ld7ce+d09P\nV1lFRFTXx9ZVQ0dPUVtt/+f/41tGT2nXw8Pb7+1OTkNEW8/L2HdTSkhf987Mxcn3X1/fycDA\nzNvL129ORV/YwsPaZ1FPVd7b5+Xr0NdRPT5N99nW2d3lT0xW/83F1c9fSUBCXHfb1uP380tJ\nXVHW19zaW09FT3PZzMzR7+NaTk5DT9vnZ1JMRUNOX9fGzNX/911j/8q8ubrQ2efv7//rzthn\nSUZITlFNY9t7XVNJSUVQ39XO71Xv62ldd9zBx93/UldfaW//5+Xt/2FfX2nZx8v/+1FdaV/7\n79XI/09PRuXP0c7P69pvVVFKW2fbzNtbWUth/3Pr69n3a2ddd+9v2vdTUU9PVVdt69/la1tb\nUWdjb/Pje2P/Z2/3593S2ePl73tz/2/n53tbUk9TX+ff3uvv6+Pv0dnPysXL13Nne+3n6dvf\n7XdpXF1dZ2tvWVlYV2FXY2n/6ef/d2/v39/d3eP3X2NaW2l3/+//b+9v9+dvZ+/p5ettb//n\n/3Nrb3d3729nbf/Zzt3r+93naVtYd+ttW11dZ2tv8+/j82drYV9jZ//j/29nd3N37/Pb3/93\nc3NrY2d77+dz93d7///73+H393trc/f/+/f/7f9tY2N77+/j6/fz9/v3997Z3e///29hZWv7\n9/f7d/97d3d3/3d3a2tjX11n++/t9/9zb3dvd/Pv93tvb21v/+/r93f/////d3f37/f3d3t3\nb3t3+/f/9/f3///38/f7/+/z/3t3//v/e3Nvd3d3d/////f7//97d///9///////////+/f3\n/////////////////y8=\n\n--Where_No_One_Has_Gone_Before--\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Where_No_Man_Has_Gone_Before\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\n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\nl7Vry4B9aM+yKjifMosAADs=\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\nR0lGODdhQAHIAKcAACQkJNsAAAAAALZJJP+SbbZtJLYAANuSSZJJANttSf+2bZIkAJIAAEkk\nAElJSbZtSZJJJG1JSduSbW0kAElJJLaSbZJtSZJtbdu2krYkAP+2kv/bbdtJJG1tSf9tSf/b\ntgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQAHIAEAI/gABCBxIsKDBgwgTKlzIsKHD\nhxAjSpxIsaLFixgzCgCw0WDHgh8zchRJsqTJkxYdoCSokmHLgS8hqpzZMCbCkANxrtzJs6dP\nmD8HIoAwFABRCBIpQIxQ0CZCm0wNOlWoM2jCBQiwah2AoMCABAXAik1wgGwCAmStqqU4NeLQ\nt0QfFJB7FK5dog3y6t3LN2/BqA9VAhbYFsBUwC8Lr0WIYIDWrAgadx1QIKzZsmXREjiwuTPn\nz55Dg+a8mKTiiRLmqpabWi7rAxJgy35wgLbrt31z90XQgPdQvRDy8tabwHdvookJUph6WKDS\ng6d9WqAc+TFWyQO+FsA8WrRoBQTA/osPT15B9+5kL5Te2bZA67kIaLeWHTu27bkH8PZe4LUy\nWO7egUYZdUflVUBdZcmFGVm1HThgcFwF10BT65FUQVjZVQfZAlz1p10CIF523ncKiFdieeFx\nRl6AaB1wAQYVrnSfa/TN1uBr9TU4VmYqjucjij/+SMCQGBYwVGXaHaAkaAlA0ORbAzSAlEPR\nxQiABRX8pySSXjkGmWT+MchieUsOqcBZn5XllQURtGkBBWz2p+JmIJpHwHYZVSnRaRFQ4Jp7\nq6mW2qC1FfqnXCAquVmQQDbKaJBpkhXlcLlRCpdeT12kp0lYVnBBZJQpWRxkA3rFGXgHLAAA\nnAMQMOCG/tmFtWBZCmRHGZJnhcbgAUWiaaSVgRlmUHzxuXdjoIeqpuWijgLJWZEZVqboZZdt\nl+KQunqlW17jEQDsQpuKVRkCCXTYX3X9bbfdiGVlZ92X/1G7JJp2rshZteV+Ve6mbIErLFAN\nDQbXgXdFCpaH4oJoJoqahSepAhhEjEEEFlR8QK1fPbrikAaHZWBxoRaAEXMm2VQYArx6WRxW\n91aXXaJobnZAhlx5eR2sAyh6b1lgyVwZx7OCWGRS3z5kZAM5j6ZzZwzf6+NnGkfdrJ2f/RcW\nkmiB5yphRfekQGOaYWxdrNSZRa6+CeecqwKyitejiAuOdXDXVAIMUdLMaiwz/gEa8K1A391e\ny3HUcyqNr9DlFuBX3VwzTndCORPQ2Lta9fyszbB2RXnC2yF+tViq2p0pQn1KVHqeFFkG4MXX\nRkqrw1J3yzqjumJWJIYI+Ps4Qs9N1DtBA7DN1cyOlftlrBgiDzN3JVLdYqItiqx7RfwCq/p5\nA2SwwATZJ8CB9wR4EL73ZJ2pJOHOi8ozktPyKv23g/0rEMWoJ4dQAZtRByp2/Hvof5JmkRlY\n9AUgEG3kgCNBoAITyMAFbiQABmBABCfIgN0dhFwBDGCPGqWBE+mNY88LEc3WtTCOXa0AoVtP\n/KSykBUqRCm/awkCJ7C9rNRsMlpaGtSudTAj7UhE/thSn8gc2MAiGiAAFSSiEou4xKrE6EOf\n+5y8TqihrZQqZqAhUwm3lAAaInAtNFnI70g3EMQQpIlMbCAF4xUabHVQa+dxW4uyAkElHjGN\naMwjHvfoRCuRK4o8w9f1PAMpXrkvO3pcokjGOL2C9C6RfIykAy2gno6wyQIA24gBNhlBBkjQ\nAAswAAMlqEQJBuCUqEylKle5yiMe8ZScnOARGaBKV0IQlRUsSWMguUCUdW51q9ui+3YpyWJ+\nMYEFWGBEFMNLYzqzmXkMZS03CcFXutKT1IQlK1/JylZ2c5qfrKY2bcnNWT4EmgDwyhJzJ4Dt\nASBm1FpUvlBoTMmg855F/rzJM/fZRFkGYIGx5OQtU7lJbNbyoNwk6Ctp6cpsDhShqExoKyUI\npwtUgGIHUCg1rSlQbRL0lrnMCT/xCLIFqAQD3GOnhxCgRHri86UjPSZMl0jLb2bTodXc6EMD\nulGdTrSmNn0oLG0p1G06VKIEhYACNkCBClBAAktd6gEMQLGCCrSTQP3oUEU505h6VaYjEUhX\nx/pVjoDUk9vDJlK9CctwdjKW27zlVQ/60XB2k6jVzKpR7frNvt51kwtw605zCkoP1WxcHeJK\nY2hGs8kYyVbY4RCYbAXZc93whpalYpcUuFjHTCCsIxXrM8+1KgBM0JjS5KkEV0vBCW5TrwxF\n/qIn1YrTac6VnEUdp18V+tfZ5jaofZ1gWlkbW07uz0iTAdPkHsu/mn2lsTXjEGOJctguNbd/\n7rIVf7rS2cnZkLuXpQwkRdtEyzq2VAM4XWkjSMPZMoCG8A2sVSMq1/ri9a5ylSZD3yvf+9I3\noPYNMH49+l8I6jWnat0tfSdKQxye5SzwjSAKEysW6lQGudDFzoAuK5nIdIk6L6MMAB5gUYtG\n4AF+AkB4OxQZ8Gbou/9jLmbRy1I8ftiwkiWbYdH7q4a8l6Gd3J6Q3TuBhgYYt0iu5gTIcieQ\nnZAyPI0yXJNM5QIjOYKBxeZshQxfLUtZp/715nZABTLHTobDaL4u/maV+9iwxMeiC3jPAyJw\n0Q3U5royphlW0EthPZPqf2RLbH+sGGMe85h/C+mjaC3I6EaXpnqLMVlC2oKTSoMEtPpUtKM3\n/ZMq2a8nm/p045wz6tJoetGcTnUjKwSB1dQoR8miy6Xq4hAXslAhkmYKpPVZoQ1lTnm/1CCL\n2KVqKwlqNsZ6j5wBJZ/V3GUvv5GQlKB9HDcT5dbQmYioeXfpoHDX1zkeULxmxa5hm5tJFSg2\nSybdkFbTiEb1QRazVaOfbeVlAg3Ad2/2DW2C1aUut3lAtCm1FwqNetffWkC+qni8W8FsTHIs\nd+GYFkTR8Ew9YPwJBG5ULPm82lD4sQ8g/oU9talV7cL15ousH9CkAfz7N5g6CcItkqXtgJjh\nkvVfFNm4w/S1MXb2eh4G0q3ugzAlAoIy1qGOFe/5pGbcMSs50J9mHp5dykj/dnOFsR5zXKu6\nAp4SV2fGtT/HXLojDnBABBojpoOdbzMYUpNnuVwZOHYGRMGz+QHYve5+EcTW2VaIwO8D66TP\nSN46m7rUm0XxSCnO3nnRj9dlIr/FNBl/WJlAYyzTYsocbLHjVtHMwG1Dtc2LRwvazBt7JKoK\nZ6dWLjHNSSjQ6rjQ+0DOBgvLWT7sQl7Ndl5x1fsGQoE+sb1zJQThzh7PlztNZu9cmzlP9KSu\n428Pf6Pij+cV/tU06yqWcl5ZnlkUVqLzzApJbHuf9OWnp979LioxpFBhhIOAOw0aABdQAAUu\nsJE25Z9cdKJ4AtgonhE3V9MirVIZKcR+Bqdud1IqC8Ah4OEVMAZFO+YY0VV2KCMmrUNIZdJ6\nUTR8y1R5CaFrLYQSL8Fki+c8jtJzK9iCFrdz41J1m5E7jzaCJhE8roJz+zMzF4ZYZvZ9fxZF\nAnR+CWODMlch0SFsswMkXMIfUnQ+PaN45pZBB0MdE7I7oZZtCPc5VTQu2qdznCMuthM0meE5\nldEQjNR3pPYQgFcavxd1FkcWXpEBB5AB2ZOHeLiHeUgv2EI7TLI+wSc0A7BpTrFC/s0xOoH3\nTu2COdfhfDl2HZ4nJmoSNOWCemZRiG/Yhn8HausxSDsjL6J4Ki+YPraTL3jDJD0WI4Bnggex\nHHwnOgqheTnXPxcWSKlHiN1lKh1zhs+TKmX1QP/kVbtDQExoHuMBOPaCiafYYdL1M01odydH\nTxlnRuv3iqXGSzW0WNKCRXkTdDwTIHZyGQjAAIl0SsEYWoyWZuGVLuGHfDu0MFQzHmW2Rz3h\nig6xhh6Rjs1kVQywHZCCLSnCFdsTQQ2ERPyYQKZUTgaAQLMEUcq0FhF5QP6hOqOIRVoDjrZC\nVkS0gEshEZvEkZtURPHFVenoXihpSg6UYMGlYGG2U62F/ldJlkqnlhDl9Vl5NAA4uS4XKY9K\nMhkjxR/NJJSRJBEcmZBEhJKD9VFrtVVI9FB8tVYy6VdHRAE25U8cVV8EBks2GYzFEVYOkG65\no1KsM3abpypoNCBImZCwuJZNRFdDRVgaNWW/9VZNWWC8lVB36ZRbSVAIMCgUMHRDFwEvcmIF\nQFgN9ZAGFlch6ZYMRIEDUF6F2FXk5ZhHqUempGALZmA39UnWZFtyVVsTtZdamVcuGUG/tU1W\nuVuf9F45ZWWEJQAe1hVIkligAlnad1w3x2He51gOxBXOVJmVCVbNNJzFhIT4hF/kZABddpc1\n9VZI5E/KSZe61UqoOWARlZl7/iWamnmVoOSZUSZXLeZmzlVSGKhmONRd0QVZL0ZZ5oVm+qNw\nlPGM0SJdkhGG7LRPxrlO1mVdBDFbEwCgBdmaDJBaoQlXLllftBRbQFagrNVR1glmRwZcm1lX\nCIVV3Imd3yRBw9VanskhyfNcjjFh2seOItpczxiEf+R9F2ABagZi+hMtZyaJGlZoLpVG+6li\n/tN5hpZYC+FJXZaS8TUBg0WanslXqhRYBhagEKpb4VllUgmby6mdcuVlVMZJDypl9QWPc+Rc\n4acdN7RY6MmeyoWBtvJYGWNnYHdRBQB2SHcAFbBUFIimzhWm9Mlc/3OFRrKjHNGbgJZzhmaj\nGQIR/ljFX8SFoUQloS9ZSxMQFm4jaLHSM3QIFl92WxNKZWg1pP0VZb5VnXhJoah0m4KGouw4\nptx4ppuXONmBNM3VAC6aWKWagdx1LlnxWO+CXTqmP+gCgbGyP8k1n4uVY5IhUvuIahZRk0ZZ\ndMq6rN9iacYKWsh6EFURrcy6rNd4g9XKa9m6rTj4ONumiGwIrmpBrdxarqtWrfoYe47jd2fU\nlVRhrvC6GHYBb/Imay9XElXiQptoEPu6acdzXl4Rr+zKEzgCG8lmsLFGbwQnbXqBhG64iPOj\nHKVmdBCRrjFCOV66cz2JHgLbrROrEEfhajkysoCibMcicC/3cl23F/Fz/q3fyoARQa4Y4V2P\nMVlhEjTnlrMdKxII2yAm63Q+a7ByBnOQF3nCEXm4BxYMexcNuK6y2GjO+GsOF2zBJHE5myY7\nCxHJMigh92pK1yB1UbS7wRcMCxxjS7ZvMX1Nu7YmEQHa5Wu2CHU6dLV0GylZmxDzBm8nSx/M\nRrR8UbPt2FhfgrIDIxq3EbIpyxs1oW2siCQ8OFk8B3GlCELKVzsJQHSeqBYvwbVxUSwjayPK\n5iDvmHplaXIVJzTHMRz/Bk8HMK8OknK7RjLXShEXsnDgBqnipxlWu7uE1IGu06Kosx4m85eA\n0mqfK3Lz4XHvsSNZNICywzaJA5mNkRd0iLKi/qKyiott4to1dFabNNtw7/hD7QOO5rZ4ljt0\nI8MQFrtuCBcfhoKwX6u3TacsQBSNkxuQk8pdEOByUTh+bqYtC5CFmdsTWGI1vQm3Mya3HCiN\nd9e7JaKMZ7IrslMW6GsVLfEcp0EyB4EfseazXdts97E8G+S8JjeOwyQhqjsZR+Fy4AVzsaiu\nFVLAJwQtKPRdXDGGFrk0KaIwfLMgSNInfZJ4lXsvdcIrXVEyLzyCR1cQfyJnINfE9WoZTEPC\nsbNBAsR8kOcbASzAMLwnbJsnETB0tSst9td5C3B0qfpgaHFDq7J2E6YvHBMiHIMBB1B8GxGY\nBfA0aJE4dAh9sbhr/vg4eUm8KoN3bAl7yFI8wqX4LCFSLbwCFnDEwGRBcJViIIX4xSnxtBAb\nEWCRFVz2MkbsYdqxGfzhpjDEFB8gcLcKjb94FhY5xYH4ZGShAZcsEtsWP9ZIgoXxEijLwVGc\nLMuiyHo8yZglgwkjx84yh8WRG0zGFd5irpeXODQkbi5zRefTMYN2u8bYIqKyKGmiRSC4cLCn\nyeFKgh/bOLPLxEdir8VCXTiHPDwijysCj5jRKhXgAB0wEh3wAFmSAODRKgEZywP0MWrjH+Rc\nbPU3QGCKPxRYq6NclqyXL5JFerRphP58LyxSLf0BFh7piYCXiA2Rui/HM+5yQajCIEJi/r+P\nIsymG4piQZt7iiGa+xNGDIVC5s9Gch2m4od2AoSOiDM8Yj59HBbKZ4YYUi5dHCwvARj9Ws4Q\nISFJU2Gi0qY6iD9y5M9NQ8VS9ywGWC6a4c8i5mgItwB7TJAI0Kjh8WK0OW4+fauO6Hm4Az2s\nwyt398homMSxW0Yl+LARMSlvF3HfKI16zNJUfB6cs9N3ciYd6xRloSETwDHuUoEI48qb1zmJ\ns4Fjt0XDtj7iIoKCfM5OrSkXAYAqncwj7EGCM8WTW3HLlzY+VDXwCmkXUy5uLRlCQ8O3AiDh\ngT/3ci5OBnVW08mL+9nY2hDxLHX+IXqfEYHc80v2stJUozPz/hIvVyghFsy4bDi7z0EnPKgV\nM/MfXEGLoMIlvwQ1eNeNZaguAzTAGYHBGSHCDgxCk0pyVQzdhrMk0DIqnObeoG3OsuhCdOIV\n1oFC4Tep0OVwUITDds05nciv7peE/Z0Q6/sQP9R4dW0Wb3S/f0iAgXjbCF7LzFo9klZaABAV\nN9y6X9JigCo3U2s5AdLVdJgp/Qp/6bweocfaD8iHe3jWC8ABA/A937OHpJiRAV2Et7PHASvW\neL22+SoQC3AmyIUVnfM1pee45qIwnOF5ytwqy9fRKNHUm+wTD9cdT7ajhwXJ5ts6cYN3WO4z\n1KhuYG5G5WwT6/JilGPDGoJDMrin/hepJkT0tDKrrLKCJqSr2s57Ma4zfhnCw9GNdw5bIYPR\nloDB3/k4EQrH0GmWLmMoKf3Jema4KwaUkKfkSeNlQVSLkeXxN6oOOH+zMTKjPrc9OaDsk6/e\nZMC5GLZWfAOBSQ7A3xM+Ee1Ei+0Yheoj0F8Beo5cv/X8VaN+lHTzR+LLJBeOia6X55FKcVkN\nQlfDaOsXRnotQ0wkZOE2FuI4Oy6txt44JNSyT6d0mfbIaDH2vYB7XomSRfKcNcuoFfkELN7u\nSCQurg5Q6gf0Y6BX3vFtit2xjOVSZGh0RO6OThZU2Tis4Ol+70wmPIgUnCUB5l7HHA/PQLHE\nAPXOLKvn/oFuoySOIVsOZJAfLwAsr5+7c8yfbkhRh4woYkiaA/OKxO//0vI4Cu4OGVAir0WR\nQaSknkDDyJEQxU3g+ZpMCVKYthOQFIfcQW6GzkMbmZD7WWOdpkBcVpCVGl8ztZCh9GUKhEls\nkkavVERICpct6U0MaVWKCZu4hBEOlEzOxE6NDEw8DTTc5VW5SUSvkk6TiaMYsUkBb5mmBfaK\nn0f2lWB3SZqe+vRD5VafiVu4RK5Tr5N7FBkI9GBmaO6xgpbFBIHEWEzclmmN75jFVZpwf/mj\nHpWMWaFuf5WC5aS0zxAw5UVFVIhYsRFYlIv3l0hZsfrj5RQ+31WxpVAs2ZeL/iqXuHRUs9+X\nq0RRbPJXPuVTrl9N+0hWAs5AhchO5xOBr+JAm1cqyZ+OmWT8o8RRiflfPFWX0kn7/mVLmQmh\nUVpOd8UASoViYIcBAHGhAgULBzYYCGBAYcKEChEyRPgwwMSIACwKAIBRY0aOGz12BOlxAAIE\nGhcgGBmyY4EBKj9+vOhS5suZNWnGpJnTpsuJFCVK9BlxYc+GDiEyJEqRAYOhSYlGTIqQQU+g\nTotStZoQgQQFGyhUqGDhwoYCESJYiKDUoVCFU51CVahT7s6PLAcUQImAZYG5fen+vQkYJE7B\ncrNancq2J1OjVdfCRWrVANPDFCNfvSx5cuasCilE/kDQ1LJUhwwWTJAcuS3HBQkKsCwJckHN\nvCNta0Q5MrZf3oV99wbue8LppZsrRxXqNgBj0VEhLqz6dHnzt0+pv518/fhxhwsYY4XscKRd\nva/zwl6AV/3d2ncHjK+dG+97kvPdk7d9Pi8ABK4HbCQssOAGDImlCAj8qLHnTJtgKc4WQ8rB\nttY6jC3ouNssOqyIoqzC7DTcrrLSvnusqO7cq808+FaM7z3y5suLJNvYg28v+vKbEb/X3rtP\nLxTdW+Ck2RD8zcaUAvyLOeaM6myi4qIbqrillvRQwdEeZDJE5bBjassQQaRKIe+eLO25BXhM\nr70dT2pRTfNg1E2v8848/m9HHFtkDyXYfMTxTCHtU4/Ivlykb6/9LJpyyrkmaA6yL4tbDino\nlvKOws4oDO+o6n5yTqlNJ5MwRMuOm4q4JSk8E7YXSZJTzzbHUzG++vTLLwEaX5UPpTRllJNH\nXe8EtoDfCuyxvvtutSjZqUxLdLjhupzQuUwdBQ+i03xKiIEGqbxUwWkr3LBaL5N7UtQHnzot\nXWcTnUzGuwpwzTX0ZgXWRzhrO7PQG3ecT6ALLGgAWH0HSJNFBOgk1EYYjQRO4bvYTNi98dxL\ntmJEtTU1UXW9e67Eb8F8aIG2lhszyysfu/Db6q482UHpQNUOucSmQxmlBG4+4GZ4BzigPzpZ\n/pKXT13xw/NeX2vctwGD/MVAILMKOCBW+/Kbj05jjTzv2HjvG3KlG48leGKHx2bPYrMvZjDj\nZq8d6mNNFxsK5wQomzLlo1B2W0NOv2V2wUSlBPVUvO92Dt4ECCBUPh6NRBjXehfmcSTXNlBA\nArAikOC1CCrAvKvKGz/6RjYNNfQ9eW8k6Wd9ITf0YLGPJZvoZCk4u+K0Ge3Qwm2D8pbwaV9z\nLWcCDiCg+Jzh3RnvwfOuFqq/iXNW3eymbIjKTLd7KIE/bz3aXcdflfjW0y2goAEEHijgAQQg\nIKgB87sXWLd8AaXvYKLvXC//kYS0n//09j9Y/1oXn9oVMDGB+xu0/qZ0LUn5zoEJGUDwDqAA\nAijgePGK1fByZivlYcqBa1nKcFCmpLtNr3lfSg3CdhaxOBnteznq0elciD+JvRBiqAvg/2LH\nHoVlbYc/7FUQj2Q2mHCkgEY8YhKVuEQmNtGJT4RiFKV4NgdM0Yq1q+IVtXhE2hERibXDSEy0\nGMYtltGMZ0RjGtWIxShmMVlVdKMWI5CsOQKgixYjIxkJs0Y+9tGPfwRkIOMYyALCkZCHRGQi\nFblIKA5SiY7sI4C+iEQ9TrGSjMRkJjMJyYpBkpOF1CQULznJUYbSlKfc5BLrOMVPFvCOTVzl\n2UqJR1mi0pa3BGQrLaZLi3VxkLwEAC9f/hnFWYKRlkcsJi6V2UZb/vKUnoQiBeI4y2Qu05qa\nBOYWz5e+AkjgAJlDXzjPtz4EHNGZa8zmG9NYzWu20538gQA3H/DNbh4gnPIkJ/ogQE7z/dGT\nw3zlJ6sYgWF68Z0HRWgTBxDObzbUm+Dk5j4lSs59us+iDdgnKltZ0GSxE5P+yxHyMOiahB40\nnvqkaEonKtGIqvSiL3WfFh3JUTqa7TOf2SUylZnDANZppCJNwAGIN9ThlbSM6VxiPuW51Hs2\nNX32ZKpKEfDSYFaMpr00myGzykUmIjWR/nOd4uIVVLIKj6hnHV5ajSpIs21zng91aEPvCU56\nzlOcK10fTDE6/lW9TtScOX1kEmPZztTxNGtjzVliD4dWxqb1rGvtYxy7+VRvvhWqc61rXfEp\n0b1C4KWeNZ/7QLvXBPSnAHiFgDot4sbBsrGRt9SVYcVmOMUmtrG3dWxuIbvGyi4Vrr+NK10h\nylm9FteioC2AaKea1wbAqz8UFWwwA6raAtbxqh8lmGzlQ9uyLja3uAXv8BKw2yUC06l2nSxw\nH8pNcFLUuO8VLXyJ6z6pbnW1ZnSkR89ogRjxz03BK2t4BfzdtAZVkV5dY1PlWs/M9RZ9Dk4f\nP+E74Yoad77FTS15mRgB+WnXdNwVnncHPGINJqAC5EUwUyl7WRZDVH0VLu7GJsDT/gVYlE3x\nxOs9WYpavlb0bK0FpTV9RWMcRRBqQSUx8SpIVOMRGK1BvYA/Tali9D44uJOd52ht7CrEkpUA\nhwvqrVCrYtsOj8fEpa5rAXvLC9gFrI0DnpfDW0E6U9DOdR5xzjin4SRupaUKBm6Vv8nXvXCX\nwMa785cVvSPzjfmeQiVAVCca3wZU9b5qtmYFnJtdkG63zHMuXvEsSMFDkxq3UEYwIVNdMR2v\nj73BtadmIYpBxaa1zre+c6KHGjQYxyexUBsAaoPN13420Y3QtO8fOawisPrwyJAWapKdnNsm\nPzlqaFHmqi1yWVdbdr0Qtuw9u2zrXOPa3HbeNY3eU1wE/kRNfQQgZ0uommxtK/ICQeN0TwlF\naznbetoC1rWT9Qxk8vb2pLB+66vhir5xK7ncDz83niNtK7zEc2yHg1q7pRrTID+x3lq8N42a\nvW+gRq22CbDg8ND9b3ILeIP/SuLHEZleyjI41gxduGblBm2I9zzi6I4axddnZAmK17n77Fmj\nK51TrR7UAoYjD42vJlKqy43lZ/V5uR2b2ApgYIsy32I8G0zzyrbYofVk+LOHmvWf/5x4QT3t\n0FmKQR7jxaKWNjbek03IzUEdh/4tMtCe3e8lO9nU5daAAiBe4AOAhZlSJHjezTZHK8/1qZgt\ne8LRV+sJtp3tPv/yBpm73JUG/nvY+xwJaKlY0r4juYb5viHwBq/BtdNZ0UrGvcrFe4C7fCYC\ne+l8yqFWAQyq8bpWdKQ8b658u54d3GoXteel//AJCjXMFaevRZfb6LxMeulqBvverRgBDABV\nhoVVYc5yHW1qKz7Sule0zlxDULSYBS2JvYuSIw3pSLfkj760mMizI0xTPhfDssuDKgMEMN37\nvOmzvcIbquMZgNCysJQSLb1LswyUovCzmAq4N6CKNPTIjxyyI4IyQT0xKw3imQlSPOSxEZ6L\nOA16jS+zizMSwMc7otNCwAdjrx48L8MhNwdsQK07q+OZsB7jq0sjLwwAC5FKNxyhnc8oJ4so\nqIGK/iDX0IvDqSC4CyoFgBqzoB0MIL8DoID32Lodkb80Eqia2iIdFK7Lujwq46agYkAhxLW3\nUyzq+y7egy8LxEG2aqKuu7fWMLL+859C4z9Ssw3x8q/XUD+4U7IHqAAFMMGvKICUi0CdgZcN\nGiJM+0MNrB1pwsCKwbGa+8EfLDo7TDku1JmgIyt5gRdEezK7gy9TCyxt40AlIgBn8Y/yMMSp\nQzIEIKiM+IDPIL4JgD3T6S7hATbZiz5Se8WdicXXSKTp6qqzmSjNk0NxA0KHazujQxoMyq1+\nqz2Vy0RbMa7O+zI+swicOZh0KQ9bCRvTyZmRCLUBMEEA+IALgD3XiaBM/jw5s1o/xnPBCPJC\nj5uiwdqoJLqjuDsvt4qwn4I2x1q8nNmueNEL3tuL0jqYkQo+CCTIBNCrAkAclDiA+wKmXDyj\nC3qNIJkAwcsu05I9oNE/oWpJqSuPgESy0FssUrM9LlSRSFuk68oimhoklhKnF4swCFgoaZSX\nT3tGPCs66+O9lrCADgCADrAAi/m0gTxHlrgonhFLauSjpvMj+SOUl5SY7XHEnpS4m2y2tuQ8\ngVQADQg1Czq5oNEZUDq28jKnOUqnT4qllHqxfNKTn5JIt1y/mxG1MGNBC7jKrITM4rmLnqvJ\nAsNI9zmdqCGA2Vgz5EukAfBCeTQPnXmPk3AP/iRjv5qURz8hsitULMakSibDxF8TuqjxP1YC\nReuqmMi7QawSRXiSKmiTF1spyQGoIJ7xsjtkQAQYTRSsINgQqgYssNBDngm8Gcm5mY5DKAW4\nmfTYNJvMrtSsvUSLlX6cn51kRcXDxHGMzfzjvSkERU8MLCW0CMBcvay6quWawCtEw9lAC4JQ\nAPI5SQraROY8t9sawiYrKyfUyC+7i/n0o758rYpBgC9LlQQYDue0ldFRzjpMOdRBz/o4Mp4M\nOpIESTB7T+CRz8+8oqJESauyTyU6PkLDOJawIwwQQwrogA4gKAxwj9C7wwUl0iIESqixSQi9\nxoOClyBpjYOZgMXa/p/xkDNMLK0RFJJ8y0KVU7xXtEk6BMhohI2vi6YKzUBHstECg5O7QDJd\nI56AU0XpO8MNckHrM1DPtCazdFGLUACeiZ7hQDksNBYAC7E+yaEO+5/YZInW6DyTC9MTZQmV\nZMgZlak1S64IYjlzC0JTA9E49UoZvJmtgRcKMjl3WrULhcvTkNKw8ZGREh19Y5N3HA4Pnbbi\nWSw6ddVKFabfRKMsIgktHELatD1hJVLmJCr5Eyn4NJzxMqU1XNKKiZpFRYAZi068CCvBe0Hi\nmR9ptBlI28T2ZCxIA8qtqU8qdKJUk1SLWEHqLM9baz9VbKxoxCC7QLkt7KRUEr9rjKNI/ouR\nzrNWP4kYR4wa8LRN0zFH1wi18BrXnTkjpALAe6XQLUpEz3u7O7PL9Us5eN3DaITU/sQZYcEl\nDtRTAEDRf9U3PiHJ11BZWAzVNqXBwym3DVLNhS0tJeLVe8XZUQzAPZU8i/lHb7TMqNE6LUys\nLVzQcTTRVuRWjmNHKzIe9Asr2yjNHhE8TmRT87Af92DGnUOeaM3PXtVZ0ESqD23XclvUrh0e\nGRlVhGVXcD3DjxU6z3qniM3ZfGVDAOAZBYitkfOPoOEVfUvNkqPKZaw6kJ28mANFdMVATjq+\nJNrEnQTan0RYnXnXYhW42ZSh08JTU13cTyTZ4UFUnuragQXc/ra0Vaz9ny4zOaozXDOlz1uC\nTciNvnGUG+/sVMsEvWpTVJj0zHRtVnMNzleaI+vbW566QnDMUnuRxsKlNaiputysqo9zgKsK\nzgltojhLwWFlPDokVTuMyk+lyoIMGt89I1E8J+401xw8UdHNWuCpIRtJzMRctHlVJQltosY9\nopuFonaDvurburIigItFnAwYAAIOsO+NQSMNuncJuhbFJPLF2euKgPS4GagFWHt5l61BzDC1\nzpHaTkrFO968W7ut1Lrl2SNi0yplrAJmYQJ2YRZ2yY25xCXDXTxESyRzrnfS3/u0KYKr3jna\nmXY7zXkRq+y0FUIVsY2Nl7dj1h+z/sb0TSQINi2BPNawcVKCSQAOIAAt9gAC6GIPmM7I1UNb\ntc0dAVUHPjC/5OFz5SIgc076OIniBCAMnpEFPJ43Lbxo5MkmPpuCmqMdTqj820njobgXzoAs\nRmSanT4Fhju8ANMv69BmQlzxG1mcuq9YuqMbhdoJSh34cJeptJWJtD7jtGHtOdw1BgBAPir0\nNaP+kF08FNH2ANOjDdNQNdhjlceQ7Tj9hSQBRM5XBSvei0va+lLaAp5aU000Bk0QXuU+EuTt\nhUrvgtfaHGVgk5zLFKq7mIDfveTexCoZHWEpQk4stOI46TAAij3Rkce8IFSqbAmdqBh4pqRJ\nSqidm81N/tXYY8XVfWHACeLCzY3iAiKf2lklXUo1lPDOK3Uc2Akf9RjkpA1IYREUl4gIebam\nwYNKXKvLunS72hzX06TH2fVnssLRRWqtVXpYvvw6VsHIwOva7hJVdZtOMu6u27PIid6IbBkW\n2D2577KzjU68xONUfRbTTj5eb6xO4nEugFYkS05lKE7cE0am0zjZifFgzutg1Nm5Vnzl48Fp\nJ8Fpes6k2O3Kj1w5OdvdvXURkhRWilRqednmQ/LjELapDUxpWnKWqI3H2QMzc7QgDIIV1X27\n7U0AQZmIYfGLU3JEqtNJzmzQXjSsjfQ3d71MnTmNRCpoMg1MJMlrODvq23Nr/rwsTowebP8t\nKwJZjbCeC9iSvdoqyHkBvNRM4upbuY+EZJccjAfuXBMmaGOaCwZxF+xFK8qG5BJlrFVMLAYQ\njABA7OZeJqmDmKKRbVH+XkhDN47smiLioz8GwIGCaidSyKd2gNUOCaqmk6mkyApyv//16epT\nLJGhi8NW7Z3GpflhaNmTX6xz13pNaF35C1WrqfM1aN/+b46YElih7jpTvCIkVjw8GAOoCeae\n77DGJfxmbJp9Zep7U7v4D5lAEv3STcGsrsWd8JAoDTsOtQCutmlzPdzhCeUu8fm2pSy88Lwk\nPA3POBztjQ9v2K8d2RFvbtT+kFnW3uG2IIJZgIR4/onlCHKZgBQn4QmK8HBbukIk1snJTjTx\ncpHsFgweFwBldt0x6qgmT+yOmB6HmGH322jQhVIm94jJIHOQmBmo4J3vUA5OmQhJ+iO/aA0Q\nW0bZZU557HAKlwmmntSv/eYCivEud4AoC6Ms0ogPGZG6WRaQkPCZ8BJzeZkwoZLcIRwoj6TC\nkEu0JjyRDsH3WPQA4QuxDkXIi+c4L3HymyMB2MrxzghIN/DJWACNSIyXiBnsSQ06pxnoeIjr\n6QkQTyLc2ObgKKdQxeobN56emQ+cbt/7yKNVDwxWDts3Mom4+A0x6YuNmZnbERmI+JsRgo6M\nYAgBkG85/3UU0hvVwJSm/jB25rainBiAZd8JZMQInuHrMhtWaS8nAvkfutCTd66JT3QAb49x\nA9B3ZzGARQcOhoCWUUkNYHcMeVeQO//0w5aiudBmmzgJ1oDoKi08veDy3jgJAvHy3EbIMZd4\nWP8NjpGIOaeZcFkZ7sCSMJkQqcAWYc9zVq+l3mAJucj3jNj1aFtGb6Q4hPeLY5H5Mv/uXYr5\nqneJUMl4K6F4egcXTReR0hANu7F4CFciIsGLnOCLg8kIaKutCeKXlJ8JlIh6mC9w6sJ1q5/v\nbdkSYQd6aWkIy/gOlukUr2+SnreOzAAK5Vb0IOdIjaiiChCAtJ+NBRDlxPqf3Yh7rpn7POry\n/sXH+zg/oLqRjk2/FCfpmGrJ+UcxCyz5EJ5XDedQfFoK60W9dUf/jw5HzibTIbj/cqj/fM7f\n8aHffDL3IOt4cpx/G+vweddHfot3/rdgALPgHM0I/Ksw9op49RL372DiR5TAiCvdC97X8eEv\n8+Ag8N/PCOXJFgvpHeN/977/+cNvfsTvDAaAgAOIAH/hHAvoimIPfEsBiAAGBAYgWFCgAQAK\nAQhg6LAhxIcSI1J8mAABgoYAFiAYsKDAgAILJjoMWfEkSZQqU5JUuBLlQgcvWc6cycDgQQM6\nEQ4sOFAnUII9D/o0wGAn0aRCkwa9WZToUKg4ox5kAOHAgwMRKmDg/lqhQgQLWHUe7Rk0wM2B\nTnNWpem25sMBGOGafNvSLlyYeCUujJB370qEbKPuPJsTaNCfSgUyKLtYKlW1ZpkuVuxzsdUD\nEhRs7RqhQIQLYCFI/lkY6FqpPgGzrggSAYACCWTLRgCywN+ZLlvz1i2zN+vKQy3zLH4ZsWni\nUBvjVKp4uOnHwoc/vrqB84UIFK4/wG4huWCyqQcjZAA8t8OOHUMOOO92N3q98QFQ+D1/pvSq\nBpH6dBwZsVD8OcdcfpdJNV5+hlEFlQEIaAeBAhtoRpYBFHxnVHkLILiUafe556F8H74HHHwi\nQlSgUmsZVlZhTAGYmHRGLUgZdM0lyN+M/kQxEAGKZKHFwARLHXeYURANMEACIXU0UkMf2QZb\nkwgscORtT8p1pZVyNWCiQyWWWNGXXIYIokMTNCZgj2alhZaM1DH4nI0HHlUgcWqhyKabd954\nEwMa4sghYnIVsF6Sg1I55XoigYQlSBcdieWVR2Y56G1KQgrliBGFqRGJwHW0aW+NAakhgXeu\n5diPADoHaI5soRrjcqZiaKCeMWJopn9T8SSopQgkGalIGFFqZaIFDHupoSFN+WilhqoHrKTG\n/toeXAt1Gt9toOa2QGJGjfqqrf3tdBS4NBYXmYtrPvYfiuTWWiuG5CL3XGEdXeTsr4nq++iz\nSD56Kb+SPkkp/nsA21awr0pWeiRDUt62AMQLkZlblQNQIOKacP70LZo6EiTqjyy2Ch66zs1a\nma4b6shcq+/mxOeZ88475QKOqmesXOoNTCyVxvK8pLOLSkplr8gqaduvH1mas6IeOTmAh9qS\ndHDFUr8Uc8vHeasyUltjPfKL5po8clJzoixqxy4zdROuMtO75GyMvoYRRgYTHLDO/R5rG84G\n8+qRsYN2tGjeDnP06EVisoQw4RYrJFBr3Moor8hpF3Rm2R8DOXmL08E45IyGqfbyuiFbrnZ/\nAbSNWMY6CTs4pEjS7azRe1+57N/P9v0s74JipLRHVBIrpZS5C8rkXlYzVDHViS6U/qoBcE3Q\nosZFISevx2Zt3Ke8orv4OYcoZ33ZhmrFjHqMbJNaOWKI8tv4kbj3PnDReSdLe8L4Ayzw0ev5\nnrP75peziZWkSsJiT9W0AwCvAYkBDZnAAiD4QG7ZCE7v4tN+zLe60yEnfBYUm/jQIr7JuSxr\n6psei9zVIF+9ZlEfCaD+bla/271vaPkbWgTsFj8XJut/HJlfs2TnHgT2L4iEK4C1AICWCDYm\nghFsk7c0Ni+eoKl6BojgYBooMlvByIqwohXoEGQakL3LhAaAIBrXJyNESSskfXPSegToxhi+\nTnhXwpmhRBOBBgBRX3X8V++IaERlsWRTRqQb0RZGNQBE/sBa3mJin9KIQh+Rp3oJ4hAFyecn\n8EGGeh6MEwiPUyqtkfFOyiEPBJEkyTMxoHh8mw0s39i4QM6ShgobAAQGV6iOiEaPfERWouSH\npbpRjYj7ew1djPjDRBZMkElciFEgKKompjFXoPvkKVWDvWieL3RU9GI22QLGpZiNlJgzJY6A\nwrtY3iYBB5iAz4oVOEAOToD7utmS3qeeJDVAM72swAWy84ACDHR/kfLhARXJKPbMplKLu1/B\n3CdIZiHQNox8pkKiCclpjkqagKIc56yZH8mZb4vUSY4nvbiqcT4nk4dBWzjH+LUpBgBJB5DN\nAQ7gzkLxKnA+u10teVdLgR3s/ki5dKMEMHAAgAIUAwEFgAQ0Q1D//WyYieqVEWnTUARGhHHG\nZONEB2kojCaxMdXkaCSxeNJPVmZDHr0i1rA5RXCCEJwyMmf35jVTmX3SVwkgwAEIkCQZVipu\n+PSbHBlVVF8dQEJfAQtovhIBzTR2A0c9LM/ACtGe8XShR8RqRYNXTLEK8lNkTaKZHilNtD4x\nPNgM3+XO+BGdKiCwBzjSXFkVNpXC9rU6wVV5mohWmLotpSiTzWANW6XlHg6xfhuawmCnAAlc\nQAENkMBUH3CB7ihAAQ9oQOwUC0Bm8mqXt3Ol8JjXrN/1NKxhfdZpn/mtAF3xrE7ZrW8/ZhTA\n8rcA/jq9KSxxW1y+0rVO4SPXt6jpRDSiBood/GCCZkM82QFLqPZE7HL/RRtjgaUB3iVoASwQ\nAex+V382NNQPFzbHJRXPvYpc2DJdLGPaxVe+Cw7pZM4yYLmS5SMKAKw7qeROwP5XqwPuYn6l\nKKoF35h1dz2XJ9F5EEQ5bIaIvLA9MzyoABeAAntsAB/BDOY93tO5Kb6qR+oJQOJddZCifY1c\nOCJnkRCtX0+Db42TyBiO4pijBrKkkKpyxtnklABalU2vhpxTYx05yfTt6CYbTC8KXXN0wmGK\nK3ep0Lo5N8vGRDTzMGzlS6HXhmmWM6eDSN5lHq5SBwTcsuBcZTrjOc8LSrkvm4YLaTSy6Zp0\nJQqSdgrYH8fyVwX4sWBve2QpUojPblvVGHMc6NJB23edtSF6sfzcheFR2xSNIaTkHDvSHpJo\n0CK3jI33rIAAADs=\n\n--Where_No_Man_Has_Gone_Before\nContent-type: X-BE2; 12\nCOMMENT:  This is NOT a MIME-compliant content-type, but your software should be robust.\n\n\\begindata{text, 269602880}\n\\textdsversion{12}\n\\template{messages}\n\nWhere no man has gone before...  \n\nClick on the \"death star\" icon to start the animation:\n\n\\begindata{fad,270222644}\n$N icon12\n$C 30\n$T 30\n$L andy12\n$P 0,0,20000,256\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$A 29,24 -1,76\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$S 216,264\n\"Fire!\"\n$V 260,260 417,242\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 250,158\n$V 319,193 265,172\n$V 316,199 290,187\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 187,122\n$V 319,193 215,141\n$V 316,199 232,155\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 241,145 179,117\n$V 265,163 179,117\n$V 316,199 180,127\n$V 169,120 163,101\n$V 184,111 188,89\n$V 163,101 172,115\n$V 188,89 190,110\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 246,158 180,127\n$V 169,120 163,82\n$V 185,109 204,80\n$V 163,82 172,115\n$V 204,80 190,110\n$V 175,133 173,162\n$V 173,162 181,132\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 141,158\n$V 141,158 149,161\n$V 141,158 130,154\n$V 130,154 137,171\n$V 137,171 149,161\n$V 130,154 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 149,161\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 164,61\n$V 185,109 219,66\n$V 164,61 172,115\n$V 219,66 190,110\n$V 177,134 201,167\n$V 173,142 201,167\n$V 188,128 256,143\n$V 256,143 195,120\n$V 175,147 147,192\n$V 147,192 173,142\n$V 168,127 113,103\n$V 113,103 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 132,80\n$V 185,109 195,52\n$V 132,80 175,116\n$V 195,52 190,110\n$V 177,134 192,201\n$V 173,142 192,201\n$V 188,128 241,106\n$V 241,106 195,120\n$V 175,147 234,175\n$V 234,175 173,142\n$V 167,130 113,143\n$V 113,143 171,136\n$V 167,130 160,153\n$V 177,130 210,140\n$V 190,110 208,94\n$V 172,105 172,64\n$V 154,122 120,115\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 139,55\n$V 130,154 175,116\n$V 139,55 190,110\n$V 177,134 219,150\n$V 173,142 219,150\n$V 188,128 193,72\n$V 193,72 195,120\n$V 175,147 226,80\n$V 226,80 173,142\n$V 167,130 144,191\n$V 144,191 171,136\n$V 175,147 173,202\n$V 155,138 130,167\n$V 157,128 121,89\n$V 171,109 165,69\n$V 191,115 205,70\n$V 184,116 247,130\n$V 177,130 191,172\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 156,170\n$V 156,170 177,130\n$V 156,170 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 179,200\n$V 130,154 175,116\n$V 179,200 190,110\n$V 177,134 221,72\n$V 173,142 221,72\n$V 188,128 123,82\n$V 123,82 195,120\n$V 175,147 120,89\n$V 120,89 173,142\n$V 167,130 276,111\n$V 276,111 171,136\n$V 172,131 164,203\n$V 153,136 74,143\n$V 152,114 128,56\n$V 179,113 182,44\n$V 199,118 301,141\n$V 194,137 215,183\n$V 151,150 97,225\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 204,106 216,100\n$V 215,110 221,109\n$V 231,98 236,95\n$V 241,102 241,102\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 214,99 214,99\n$V 215,110 221,109\n$V 242,84 236,95\n$V 246,91 246,91\n$V 221,147 221,147\n$V 207,133 207,133\n$V 168,166 168,166\n$V 150,161 150,161\n$V 175,92 175,92\n$V 192,90 192,90\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 220,75 220,75\n$V 215,110 221,109\n$V 242,84 236,95\n$V 278,93 278,93\n$V 248,151 248,151\n$V 211,172 211,172\n$V 176,196 176,196\n$V 137,186 137,186\n$V 178,70 178,70\n$V 198,64 198,64\n$V 169,100 169,100\n$V 192,97 192,97\n$V 204,137 204,137\n$V 151,150 151,150\n$$\n\\enddata{fad,270222644}\n\\view{fadview,270222644,2,0,349}\n\n... by Curt Galloway\n\\enddata{text,269602880}\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: application/atomicmail\n\n;\n;\n;\n;\n; This message contains a ATOMICMAIL program.  If you are reading\n; this now, that probably means that your mail reader does not know\n; how to handle ATOMICMAIL programs.\n; \n; If you were reading this with a mailer that had been extended to understand\n; the ATOMICMAIL language, this mail message would automatically interact\n; with you and take certain actions based on your responses.  However,\n; the language is designed in such a way that ATOMICMAIL programs can\n; NEVER do you serious harm.\n; \n; If your computer has a ATOMICMAIL interpreter but it has not been linked\n; into your mail system, you can run this program by piping the mail\n; through the ATOMICMAIL interpreter.  (In Berkeley mail, for example, you simply type\n; \"pipe <message number> atomicmail\".)  Otherwise, you can simply write the mail\n; out to a file and then type \"atomicmail that-file-name\".\n; \n; If your computer doesn't have any ATOMICMAIL software at all, you\n; should probably reply to the sender of this message to tell\n; him or her that you were unable to run this program.\n; \n\n(&checkversion 1 12)\n\n(defun init-ctrs ()\n  (progn\n  (setq newline \"\n\")\n  (setq summarizer \"mmsurveyor@thumper.bellcore.com\")\n  (setq global-survey-qid-ctr 0)\n  (setq global-nesting-level nil)\n  (setq this-level-ctr 0)\n  (setq total-questions 0))\n)\n\n(defun nextctr ()\n  (progn\n   (setq this-level-ctr (plus this-level-ctr 1))\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1))))\n\n(defun pushnesting (txt) \n  (progn\n   (setq global-nesting-level \n         (cons (list this-level-ctr txt) global-nesting-level))\n   (setq this-level-ctr 0)))\n\n(defun popnesting ()\n  (progn\n   (setq this-level-ctr (caar global-nesting-level))\n   (setq global-nesting-level (cdr global-nesting-level))))\n\n(defunq onelevel (i)\n  (strcat (int-to-str (car i)) (cadr i) \".\"))\n\n(defun apply (f l)\n  (magiceval (cons f l)))\n\n(defun getstring-oneline (prompt def)\n  (newlines-to-spaces (strip-newline (getstring prompt def))))\n\n(defun getstring-notrailers (prompt def)\n  (strip-newline (getstring prompt def)))\n\n(defun newlines-to-spaces (s)\n  (let* ((l (strdecompose newline s)))\n    (cond\n     ((null l) s)\n     (t (strcat (car l) \" \" (newlines-to-spaces (car (cdr (cdr l)))))))))\n\n(defun strip-newline (s)\n  (do*((len (strlen s) (- len 1)))\n      ((or (lessp len 1)\n           (not (equal newline (substring s (- len 1) 1))))\n       (substring s 0 len))))\n\n(defun cadr (lis) (car (cdr lis)))\n\n(defun cadar (lis) (car (cdr (car lis))))\n\n(defun caddr (lis) (car (cdr (cdr lis))))\n\n(defun cdddr (lis) (cdr (cdr (cdr lis))))\n\n(defun cadddr (lis) (car (cdr (cdr (cdr lis)))))\n\n(defun cddddr (lis) (cdr (cdr (cdr (cdr lis)))))\n\n(defun caar (lis) (car (car lis)))\n\n(defun cddr (lis) (cdr (cdr lis)))\n\n(defun caddar (lis) (car (cdr (cdr (car lis)))))\n\n(defun > (a b) (and (not (lessp a b)) (not (equal a b))))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun thislabel ()\n  (strcat\n   (cond\n    ((null global-nesting-level) \"\")\n    (t (apply (quote strcat) (mapcar (quote onelevel) (revlist global-nesting-level)))))\n   (int-to-str this-level-ctr)))\n\n(defun revlist (l) ; like common lisp REVERSE\n  (cond ((null l) nil)\n        (t (append (revlist (cdr l)) (list (car l))))))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" (of at most \"\n   (int-to-str total-questions)\n   \"): \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (car\n     (car\n      (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n    newline)))\n\n; USAGE:  \n;(SURVEY-BRANCH \"What is your favorite color?\" \n;               (quote (\n;                 (\"red\" \"red\" (branch-question-set \"red\"\n;                               (quote ((SURVEY-SHORT-ANSWER \"Why do you like red?\")))))\n;                 (\"green\" \"green\" (branch-question-set \"green\"\n;                                   (quote ((SURVEY-BOOLEAN-ANSWER \"Are you green with envy?\"))))))))\n\n(defun survey-branch (prompt choices)\n  (progn\n    (nextctr)\n    (strcat\n     (thislabel)\n     \" (\"\n     prompt\n     \"): \"\n     (let* ((ans\n             (select (cons (list \"\" (informative prompt) NIL NIL) \n                           (cons (list \"\" \"\" NIL NIL) choices)))))\n       (strcat\n        (caar ans)\n        newline\n        (cadar ans))))))\n\n(defun branch-question-set (branch set)\n  (progn\n   (pushnesting (strcat \"/\" branch))\n   (let* ((ans (ask-question-set set)))\n     (progn\n      (popnesting)\n      ans))))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (getstring (informative prompt) \"\")\n    newline)))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (int-to-str (getinteger (informative prompt)))\n    newline)))\n\n; USAGE:  (survey-boolean-answer \"Do you think I am sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (cond ((getboolean (informative prompt)) \"Yes\")\n          (T \"No\"))\n    newline)))\n\n(defunq surv-pkg2 (q)\n  (progn\n    (nextctr)\n    (list (strcat\t(thislabel)\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q)))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (cond\n        ((equal (cadar lis) t) \"Yes\")\n        ((equal (cadar lis) nil) \"No\")\n        (t (sexp-to-str (car (cdr (car lis))))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n(defun survey-complex-form (preface qlist)\n  (progn\n   (setq this-level-ctr (+ 1 this-level-ctr))\n   (pushnesting \"\")\n   (let* ((ans\n           (formatfillinlist\n            (fillindata\n             (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n                   (mapcar (quote surv-pkg2) qlist))))))\n     (progn \n      (popnesting)\n      ans))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval (car qlist))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((equal (quote survey-branch) (caar l))\n    (plus (branchcount (caddar l) 0)\n          (qcount (cdr l))))\n   ((equal (quote survey-complex-form) (car (car l)))\n    (plus (dcount (magiceval (car (cdr (cdr (car l))))))\n          (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun branchcount (l prevmax)\n  (cond \n   ((null l) prevmax)\n   (t (let* ((this (plus 1 (qcount (magiceval (caddr (caddar (magiceval l))))))))\n        (cond\n         ((> this prevmax) this)\n         (t prevmax))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to summarize subject id qlist)\n  (progn\n    (init-ctrs)\n    (setq total-questions (qcount qlist))\n    (sendmessage\n     (cond \n      (summarize (strcat \"\\\"\" to \"\\\" <\" summarizer \">\"))\n      (t to))\n     nil\n     subject\n     (strcat\n      (cond\n       (summarize (strcat id newline to newline))\n       (t \"\"))\n      (ask-question-set qlist))\n     NIL\n     0\n     T)))\n\n(defun maybe-displaytext (tx)\n  (cond\n   ((equal tx NIL) NIL)\n   ((equal tx \"\") NIL)\n   (T (displaytext tx))))\n\n; THIS IS THE END OF BOILERPLATE CODE FOR THE RECIPIENTS\n\n; user-generated part begins here\n\n(maybe-displaytext\n \"\")\n(handle-survey \"nsb@greenbush.bellcore.com\" T \"RSVP NOW!\" \"nsb.greenbush.bellcore.com.1991.8.17.15.18.4\" (quote((SURVEY-BRANCH\n   \"So, can you come to the party?\"\n   (QUOTE\n    ((\"Yes, I can come\"\n      \"Yes, I can come\"\n      (BRANCH-QUESTION-SET\n       \"Yes, I can come\"\n       (QUOTE\n        ((SURVEY-INTEGER-ANSWER\n          \"That's great!  How many of you do you think will be coming (including yourself)?\")\n         (SURVEY-SHORT-ANSWER\n          \"What kind of *vegetarian* food would you like to bring, if you have any idea?\")\n         )\n        )\n       )\n      )\n     (\"No, I can't come.\"\n      \"No, I can't come.\"\n      (BRANCH-QUESTION-SET\n       \"No, I can't come.\"\n       (QUOTE\n        ((SURVEY-MULTIPLE-CHOICE\n          \"Aw, that's too bad.  Why not?\"\n          (QUOTE\n           (\"I'm busy that day.\"\n            \"I hate Star Trek.\"\n            \"I hate you.\"\n            \"None of the above.\")\n           )\n          )\n         )\n        )\n       )\n      )\n     (\"I  really don't know.\"\n      \"I  really don't know.\"\n      (BRANCH-QUESTION-SET\n       \"I  really don't know.\"\n       (QUOTE\n        ((SURVEY-BOOLEAN-ANSWER\n          \"Well, please don't forget to RSVP when you decide, OK?\")\n         )\n        )\n       )\n      )\n     )\n    )\n   )\n  )\n  ))\n\n\n--Where_No_Man_Has_Gone_Before--\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAIguAAAAAQAAH0AAAAABAAAAAAAAAAD///////93////////////////////\n//////f/9/////////f39/f37+/37///9/fr6+vr5+/r5+Pn4+fv6+/r6+ff2dnT1dXZ29vd\n5+fj6+//9//v///3//dv/2dnXV1dXV1fXVtVVVNVTk5MTU5PTU5XWV1bXV9r//f3/+////f/\n6+///3dfa/93b/d3d/f/5+fr49nZ3d3X3+Pn/29n///3//////f/d2dZUVFPVVVZX1lXWVtX\nX11bW1trX2fv49/b19HO0dHNzMzLx8bGwcbDzc3R193X49nf59vn52/r48/T3c/d119jZ9t3\n79/nz99ZT1/jY29X/+tdRm//Z0lLT01PSkNGW0o9SkRrS05FV0A9Q0tVWUlK3/9fV87Zx8/N\n2bzd68zBwMv3y8Ldzvf3xsrPyd3HyV3VzF3NTtf3zN/jSt93Tmtf71XrZ11VS+s/b3dLTmfn\n91tG3U1N511na+NLym9v19PKwsvZ29P//2PZxs5f78RLQG//TdlTuc9O6//nd13KY1v/2VtC\nvUHNO8VKv0dbw0b/SM9T11NIzlvZWb/n1VvK1WNXuv9FvzlPvzrB2UHHXUvEQ/fZRtlPytXO\nRWf3P0pZUdvTd8Q9RslGSrg378Q+vb7b91/A1V3/1VvFUUTAW0W+3z+4TU7AzUPPU+93/9s/\nT8K7PEZHRd+4vm/AWUc80znrumvMSWf3vknGvufZtkO5/0fLwj27zz/Asz/C20DV/0FLxS+5\nRkLC20jPwz2//0e8x0LCd0jNzzvT6+vLQUPd1zjjuFc/uD85wU8868A3Y74927s/91ldSFfd\nSe9fb3fd1z/f39dI08pHd85AWb3jQcHTT8fOPcnCT0XDz0xj2dFfZ9/F199ryuNfZ0TP/0x3\nPFnr/0lH2/fR0c/I3//jwFfX1ePf0//Z0cbLa8fbvGdjyGtX3+fdd2Pva9ffTufjTu/nY1nn\n1Vdr3UvT31Pd/0ld12d391dn61tKb+NPTu9MROtPVUVrQ0lVS0g/b0JI71VbSvdR2U9Z4+/L\n22PRyG//3dXfyszM68/Rxu/r293rZ+PLa9tfSOvK12f/Wd3j787bW+9r7//f5/9R60/TydfT\nzNfd3crJ2evr387H22Pv2W9X79Vnb2NTZ1dnV91K9+v/513X92drY2d3//9r42P////jb09d\nUVdXWVtNTFVMQU5NS0ZRSE5KTUxZV1X373dv39vR1+vf09fP49vf29vvzuNZb2fv2ev3b2ff\n5/fR21dn293R63fn59fj619VZ29r487X293Lw9f3Y/dRWXfZ72PKxMPBv8bJxcTLb2d3X1Hr\nW1tZ39/d9+ffVWtrU01fY1VP2d/Z1d/v901VSU9XTUk1ODQ8NTxKPDE1QUdCU9/TV2PJ4+tX\nV04/StvRz8e3srCvra20uLm731dFPzQ5Oz05PUzjzMXDubq3ubrEyc7rTEdPTzxGS0pD4+9j\nP/fTyDVP97hLVf+30W/PrLPO17e4XffP9z9Cb/88SF3I/0zR1dk/T189MTY3LCcrLjIvOE9n\nY8m0rrOura2urq2zsbO2wcK/z993W008Oz04LzU5MjE7QD85VfdfUVPT311r0crj68vG0Xdn\n519RQkY8Pjw7ODxJPD9F/99398Syvd22q6y1sqywr6+vsbe1wbvCvdPNy7vJ0ci/v9vLzMXr\n21tTS0M8OTcxLC0xLSkqMi4rLTUyMDA5PTY3Pk0/Rkj/X3ffy8TBxL23vLy5t7u+v7y8vr2/\nv73AxL++vLy9vr2/vsO9wcfGxcfIy8jd53dVSkI+PDg3NDg1NjQ4ODw/Q0lPTl9n43fd2dXV\n08vV09/j/2tbT0dBRD06OT09PT9ARk1VZ+PZ68vGvr+7uri3tbKwra6tra2ur7O2tr7Fx9Pn\n509PTkVAPDw5NzUzOTc3NTg4OTw6PTw8O0I9Pz49Q0Q/P0NLQU5RRP9Xd1XHX87JzcS+vsC/\nuLu9trG0srGvr662rLuytLXLvsPZzyrGrT8zw18zY808X3dVLz9IKD13PjhJPTQ9RzI9SjU4\nPkQ3Rk4/RFFXY1P/93fd58TRv8zExMXBwe+9xb7Iw8nCvMzCucO5vMq7xNu/z+P3a2dFY0tj\nPd82QjpNOlVJQldDTznJP9tBwEjB53fO1TzfvFnVxV9Ny+NVvtFPu8pN379J/0PLTUX3PFN3\nQTzNNE85XUs/Z0k859M+X8lbS8zTScfOv8m1zc68vsC6yr24v/+wU1O00V27XbzVstHO2cw4\nwe/n17bP1/drWU5HPjs5LCxBMS01Pzw9Qk1Tzl9jw9VX/9dvQ1k+QFNKQd3M6+O6vMPHv8Vv\n2+vP913NWdfP38zVwre9uK6zr62vsre6vHfOPEdHIyY0LyMlRSovPm80QmtOP9HI69HFzffJ\nZ0r/RD45Tj5DSudb0dW8vsqusNdIb+M3L0vfQefBsK+wra2tra2tra2tra2yvNPMyF85RM8t\nOjM0Ki4qLyg9NSwmO1NfLTnN3TxB09P3TUxIW0Y4MkJANjU/59lryrLvvq2rb0+9zC84X29j\n17OvrKysrKysrKysrK23tbiyxGfCw9dDT0o1NDcuLio+KicvNzMtNFc3Ql9LPTxP4zk2UedH\nTVNdP0hnWTxB69dNTdPIw8XEub++w2NPV8fO68q0sravra2tra2tra2tra+vtb7Ly9VfPz81\nMjA1Ni4sLi8yMDQ4Nj5DO0JKV2dKTllNWV1OSUdOUVNbb+tnXVFPT0dMTkxZXV3/38jBwry5\nsrW1s7G0sbGyt7m5vMK/x8jJ09HT3dXV1ePd09Xj3+P/W1lRT0dFPzs2NzUyMDAzMjA0Nzg4\nOj4+P05VY/fT083Iwb/AwL2+vsHBw8PBwsDCx8PHy9HT0+f319nT08vLy8bCwL6+u7+/v7/I\nzc3T629bV1NKRz9KPkBDPkFHRklVT0xGRT8+PEA9OzhHMj03PTo0RjxGPltbd83nweu+wru8\nura5u8W7tLzFzLvj09PG/13n/+Ndd19jRUpdX1FO69PbycW3vr+4srq5urW/xsjC1W9nW0dD\nPkM5PT07OT09PERGRU1XSExZa01FY01JQkg8Nzk3OTQ8OkM96/d30726vLKtsrWsrrOzsb2+\nwcvbW/dDTUdJPU5BPj5VRU3/5+/ZxrvNvcW8x8rBx9nV3/dPTl9RSl1jb2P3b2dRTkg+Pzs3\nNDI0Mjw6Qj9bU3fj2cnIu8DFvbq6yL++xcXIx9fd2edv53fK11/v481n1cPO1dvTzvf351lX\nTWNVU1lbX1dX//9bb2POV2tv70lGR1E/UVNMQE9XZ1VfX2dj1+vT2c/PydO/77/Cv9l3X99f\n90pITkE6TVU9Rv/rUW+/uL65scS2trrBzsW4d/9vTmdIS0YvLy83LS8vNTtMTkNCyL3Hyb21\nsryztbSwtrXB08G6xb531edjb0w7RkJJOT9JSFtf50TNd07PUWc67706NddPTzxrTj8vb+dL\nKziw5zA70cHbxbG+w62070jdwDgsQf9DRO++ycC0yf/d/0UxNUs8OFPjwL6zrVWts2M6189E\nLt/ITreusa6trcbGutE9U0hIRUNdb8rjZ1fZZ0k5TVM4P904NcnfMD3FW0xOSE08QzI9UzYt\nW0gvOUbOPz/Kz0jrxc5OyLa857u1wdPAt8e8s7S2sK+5vrm3yuPM0U/Xs87Rua/A39XXPjg6\nMTM4NS87QjYvODYuKyoqKy4qKDhIOztvv93Au7eyvrnC18K6w7vItK23ta2trrvFrK5X77a4\nxWvBsb/Cys3C0UE+Nzk3Ki05Oz85StXfWU1ISzouKy0vLCoxPD9FXV3Prb43yrVPRWvfxufJ\nus6svbyssd+z0dtfPUM9St1bTbPEz6+7ubXKuszDz9nGz9XOyMXGb9fZ/9s7R2M/MDU1MD0z\nNUM+TElFY1NHRkZJRkdX/9fM68bGv8XLv8vIx8nHxMzOwcHJxsHGz8vO99/M33fT/2/fZ1Nb\nVVFKR0tDPUU4ODs4MzU7OTlCRUddXWvV2dHKx8K/wry8x768ysfCz9HV2+/v929VU1tIS1dN\nSFfvZ3fr/+/d71Vn/29VW93j3c7MysfJyM3O0Wt3b1lOTE5VU11Z/+f/d9nX593b19HTyc7J\nvcHKv8bO29V3VV1MUVtXV3dd79fvz87O0cbGy8PHzMrH39H3b2NHSEpAPDs8PDk5OTg4OTU3\nOjg7PD4+QUNGS0pVW2//49vNz9XO3f/V4//R3dXJxs2/wMjHs+PftrzHxMrFur3Rxr+9xMG8\ny8O5wcXGxcXGxcfdwLpT57lLLbRPLDxdNS42PTAtMjY5LjE7OTQ6SEFASN/3Z9PJzcnIxsbI\nxb/Hysi9w8y/v762tbm4ur7Bu8rKyNHbb+/dT09rP0VFOT9MMzpCPj5GQkZNY0BHZ0RHXURA\nWUtIT01BU1U9SGNFWU53V07b1ePGvr26ub+3u7y1vbi4vbvBwb/EwL/O68rTz8/jzdHMzt/r\n1f/n509ITk89OTo5OTg9Ozw/QkNHQU5VRj5MRkdXa1/nzdnPvtFj28jI7//FzP/Tu85MzLvE\nX8LDXcq+x1vBvM9DQEdL39HX08rA011DLy8wLCgqLTVVy7u6sa2xtcs+NDUvLTE3RuO0try2\ns7W1vcfMyclv58nJxLi4sMK+r7vbyt1n1+Nfd0dbTDlVSU1jZ8vN1cb/TONdPzg6VUXfzz0x\nSUpPXVtTR1dbOy4uKi42OURTxK6tr7G8x8zvTklPa8zAxc3vwbe8vcDIwr7A3V1PY93vS0/H\nv723ubnTX81HKSs0Ly9XRUHdt89LRFVOVU9RR1NNRExLU+fHwl2+v1X/zk5KTm9r2b61vLy5\n1WtbX+v3v73Dv87ZyL3Dxec4LC0817yvsMPRPzIxNDxBW/9ry7S0srfHY1NKOjpEPVnvY19I\nPzpERUtANjzZSlFvPDZjR0fL37/HX8HjXbG9vLPVssHTuMjfucnEtruvusjZPiwuLDhJY9HP\nU01XvLu7wFEpJCw0za+4vsLDuLXPNCMlMMSsq6u7d0E8QEpd99XJys9dUUk/TlVOU1s4PUpF\nR0xVUUxXd8Kzy81Xz05nrK+6u0tLsbu2rMBPPTIuPWdX2Vk5RV1vQTcyLS1N60RLPjA6P0rn\nyetZy7q4ra20w626xLm/vrmura2trb1fRT9N2c/P1f9XSUE5MzU4PlVvT1E/Ni8vNjtGRj80\nM0FGSltrQUtLTFdI5+fLwV/v28C1trCzwb6ztb28ur3BubW4srW9z2dfd9Pj28LBv7rH2WNH\n1cbbvcNMLCYpKDK4s7vCNiQiIis4Z9FrXUg1OTs4Pz9RUT1JOzxASGdv72NEQ9s8Wb68/7ay\n4721vMStrbG3rbi8r7W9sK+yu8DjWcC/xb6/72/Nw9Hv199OSj0/PUJOVf9nM0z/Q0/VTDs4\nQDYsL0lNY9X3Vzs8SDY1OT1Pb+9JNkhjb9drQzc5Sv/369X/X+PDvte+ts7Ps7rEvdXXta+t\ns7/I38m0t+NvT0/ny8bO38jLwbrL1+NNV29jV1tFPVH3Tj83Ly44RE7Xt7rTWzYvN1XCvbm0\nxcvXW05GQFFPSl1ZST86PD9LVUlBQVXj2+NnQUBO68DZY11f18rN4+fn3+fF02/Gvr7R/8zP\nw7y80cXCyb/HwcPAvc1n/3fnx9XT09fBa0ZBQv++uNFJW8hjPz02Lj1RWz8/a8VfOj0yKC4+\nMyY2yNNCR2/jY2/ra2/Nwr/f28O2tMTHvrCxrrfPtbW+u7O4yMy8vtnEvMTIxMdvR05VRklN\nSjo6PkEzMTs+Ny8vOzYrKiwuLTM2Ny86Sk89PUvRye//ysW/ubq+u7Ovr66xta6tra6wr62v\ntby9uLO3vb3By9Pb605fb2ddY1lKS1lfSUdKRU1IST1AOz4/OjYyNDo4Ojk7QEU6QEQ/S0g+\nQ0RJSkxVV09O511NW1dbb1vO2c3Ky7/Dwbq/wcDKwr2/vb62vcC2v7vFwry/vb3Rv8Xnv933\n2f/va/9vT2dZSltITl1CXT9ETD1DQD5OPUJNPkJBNk84QE09QVlLR3dIXXdny2v/y9VvxdXn\nwcrHxcbMvsbIt8nDu8XHw8zryt3d79/ZV8tbWWNTU29NX1dOb1v3Z13bX+Pn3e/O18fL2cXj\nb8jM/9PPXczVWd/vV2vnUVFXT0FTVUBPWUdNSEVCRD08PDk+PTo9Pzg6Pjs6Pz5ATk5ATFFN\nUWdba9vb3dHJx8K/vru3ubWzsbGurq2tra2vr66vr7Cvs7e4u72+w8jM1d3jd1tPS0ZBQT8/\nPj46NzU0NDIwMDAvLzEuLzEyNTQ4OTk7Pj1AP01TV2Nn99/f19HOy8TFxMfFxsDAwcC9v76+\nv7+/xMC7vLy+vr3DvsbFx8/TzdPd3dn3b2NvXWNTTlFIR0REQ0Q/QUNJS0pdWVtnb+/n///f\nd+/r39nn2+vv92dnXVFXWU9XV29dW2dnb+dr99nV29fZ2ePv/29vY//vb//Z793b0dHP1c/T\nzdPZ21Xd1SqtrDwjrqwvLa2sNDK4uEkx77rRMWe8VzDTuj4xybtGPN3PY0vn0d93z8jV583H\n62fV3VFMS8NdPMjdRtFNz+vrSdm060qxzWutUVWtwziurS6+rHdHsVM/tl9Eb7o+vLsxvb5I\nML3rQD9v7z5H0T8uP7czNEXXPjw5XVEtR10tR+9VPTXv9znZdzeuWzbOu293xe/ZvMHPvky/\nrbxF562t6zStr0i+rsbOta3vzbews+tJurTJyELOtF0409dE71tALU68NShCuzUqMuM9Lz0+\nLTZdQyksRWcyKS/X5ysv004ySt06Q8q2Vz7DrsFD3bmv3cy3t823ssNfwK22Z8W0r9v3vLdr\n0bvFW8i8vFd3urnZUb2832PN2Vdbzuc8Qs3jPDVG31kuQu9HOktXNTx3WT49T9NZNFVvTmdv\nVffO0+9vzsTL3dHCx8nNwL3GxbrFzr6/083HwMpva8lvV2NNTGNXPj5LV05CTmfvSz5Db0s4\nOktCOjg8Ozg+STc8X99ZR1fCx0nPssvZvLvA472vv/+/ucbrb9nDV+vFzcm8u7i6trK4yMHB\nz0s/Tk43O0I3RXdvW2/Kw8jd28/ja1s9OD09PTUuQD80OV9LTkv3yf9nytffy8bGxsu/vs7N\nwr/Dxu/f0dlrWdfJ71Nj9/9MR1VFNzxLRTE4TVc8P2/PUWPI0WPvxsf3Y7i51/e/usTVxL/H\nxbm7v7+/vMnOwcXj1d3r70xVZ01XUU1ZU0FPSzo8T0k2NUtvQzRATEk+TW9MRVtdTElPV9vP\n62v3u77ZybzFzsPDvri5t7S+xbi568e93UVPvtk6SsDrT0TMu01CyE4vNk8/MThjVTo9X9tA\nPURPNzRESTo/WWdHP0rXTkFFystMa8fXT83H11/Zsr7XurG5xLe1vt+8tr/BtLrVwbeyv9u6\ntttZxtlTQd13OD1jTTE3SkgtL0k4MThHPj0/21VI3brX/8fAxN3Xw0k4Tu9KSv+4u99OU2NK\nMy9LTUVd/1n/287d3b28zc7j/9tVP+fFw2fNu79vx7rAwsvFxMzjwc3vyL/C09vNzNPbXWfv\nQ0dCPD8/Q0ZRU+9VRGvv51VV9+9FS1dHSVX302NX9z01PEU8PkJZ51lDY1tKTd/b487d6+/N\nx77HvLi5vr++v7y9z8nEvMfByb7FzczL111KU2NDV9lKTOfvSE9NTv/nY01Z23dV3+fvxMhn\nZ0RG3WNHX1fja0RGV0k6S09XQz7JWz5T/0VJRj9ZSV3RX0pbb3dTSs9348HOY8O/vMVTy7bT\nv8PXvrvJ6/fZv8zn09W0tsbNus/GxmdVY+vvQkdvdzs2OTw3Nzs8Nz4/NjZTP0FnSmvnV9Pb\n0+tn28ZKW8fna+fPzk//wNfj/9m9vsrKub/Gu7q8vL23uOPIvsfj48bBzN/L1efMTErI1UhT\n710/PU1OQVlrTzs4PkQvPFFAPUJBQ0A0QFdB//9rRllv1VFNX9XM1c3Nwc7GxtXZysnv67y5\nyFfO393O009vy/9v5+vn3dNNSdPHTU/300o+Y29NZ8znVc7L61PR22fd49vJt8zj78G9yc25\nvdHIvs1rY89v486/10rn60xJ3e9JTk1MOzlAOjw2PFFbOD1AQk02Nj5CVWddV1lbZ2NP92/G\nzePGvbzK1cvK2efHyMXLw8rbyr/Nd+/nyHd323fT2993/3fb1UxZb9tPT1vT3Vdrb1dT9+dr\nX2vTTVPT90ZJR0VTR1NMX9fvV1VZSUpvd1//z8PXTOvN79vN0cLA6+//Y29na2vLxMfV09v/\nd/fPzMnV0ePr319KV93P91vb7/dnTGNjd+/f58rG119T705dV0lN30o9SllMRk5ORT1n60Vd\n9106S19bSVvV09PT23fPx8rC3c3Ly9fJb+u/29vHxs7My/9Nb9dfa2fd18rZ/2tv3XfXX2/Z\nTmfnV1ffV/dvS1lVT05ARW9NZ29NzNlOSlFd301HW1lb/8//WdnVa1tr92d3/99j/8jfb99d\n/83P38/Z093/0ef319Pfy8Z368/nWUdNd2f/6+dda/f/909Pd9/ja+Pn19POb+ffa+tXX3ff\na//X61Fjd2tXSktbWU53d1VZ987b49X3/83Za3fVwb7vZ+fd591ja+Pn629dP11dT0n3d0pO\nZ2tKb813W+trb9Pf/+Pd12/j31frzNX/z9HbY13r4/dTWfdvTm9ZSFld2/dbXXdbUWdd/1XL\nxltX1+9v79fH0d/O/9ffb9X/SnfdXev/28//6+fn2+/rz29f1c13/+9r39Hv2eP/42fnWVNZ\nY2NZW1vr1d3/b99nWf9d99HLysXK1efV31Xj12tX2d3/Z2dXSE5ZTE1FR1FXTU9HTElTY0hG\nUe9bWU5dd193/9nf19Hnb/fv99HZ79PV2dXXb+/j58nL08rV18PH08rG173JzsnO28vCxcvZ\nztfvT2df7+tMSEJHW1NLSUxZVU9JRUtVTU5RX2P/VUdf31tf71tbb29VWVFMd1FKS11bSEtZ\nX1djU1Pn/1tr52f309n30e/v0dfryc/VzsnH093P2dnMy87OysHHwb7Cvb6/ysTGzMvd59/d\n3dn/X91fa1tVU1dvZ3ddT1dRT0JAP0tPRj9ETVdOTUpISltTSEVET1dbU19XSl9ZSkhFTUlb\nWVn36+fTze/XxM7b18rIwr/GwcK/vrvEz8nNy2//W1VjV19ja1tTW1Nfa+//b/f3//9vb19V\nY9vf3//v59nj49Xf28/P4+vX3d/fa/f359nj/1tjX1tbUVf349nr19fV19X///9db2tXVU9H\nP0E+RUVKS0lMUU5dTEj3d3fr3etrW2/nXVdd29nja+/n5+vn38932dPXzs7N287f1dvPyNHM\n09Xr92dj4+fv4/d39193XVtdX2/f/19v5+drZ/9v599j9+f/z8zOx8rDycvOx8nLyMnHytPr\n5+tnVV9jWVNZW09KQT9FRzw+Pj5ERUpOTVlLUV9JQ0pNSUlLTVVbTlln//93Y19ZY+ddZ+/b\ny9XV08rH19/b59XKyMLEzsXKy8jNzNfn193R5+vRy8fEw8TDwcbDxNHj393Vzszb/29ZV2Nd\nUVlNVU9TVU1NSUtKSkVIRkRHR1dbXVVOR0tfSUhNPkJRU01NU19rd/fv/1dv3dfOyMjLy8vf\n293j59XR09vf2d3Z083OyM3PxM3My87Jzs7Nz9nf9+/j0etja2NjZ11ZUVdJT0pVU0pOSERD\nP0NHSUZCSUpNSUZLS1drZ+vn783MzdPPzszN0dPJ0+fO3W/r09fV3+fPyM7b2/fV1dVv19PP\nzutZV2d3Z2tra2drV1tfW1lTUWNv39ndTln3W1lXSVFjY93Z7//FyM7n9+/V52N3a+vRzMvf\n29XV1eN32dXP2dP349/j43dTXV9bQ05GQ0tMV09RT11bR0JMTkxbT05MW/fb2/dv5+fO29/d\nzM3PzM/R1+dj39Hj1+dbV3dfWVVn69/r52ddT13X0+Nn59vZztXrX9vR291v3+9v09Hfa1/v\n42dV2ePfY/9ZW+PR0+tb3dfn499jV+vvb3dnd+N3b9fZ71VET09da1lOUUtXT0xNSFtbX1lb\nY2f/X//NwcjMz2/fybzI0dXPz8rjVV1r485PR0tVXVtJRU9jZ+t3W+/n411jb+vZ1+NrZ9vO\n011MTmfr2c/Tzcvb32/j3+fV0cnFzdlv41dX91tKWWv/409JU1t33+tNT0RGUVtX/+tKSERH\nSVtRWV9La89fU8/H1dvX39/rxLm958C6v7W90f/RwsLfW9nNydH352/DzF1nSlXTa0JNSERH\nPjw2O/9XSDtO29NTPEFHV93/V0Nb91NbS0JRXcfCy8Xn38rv577N09fPzc7LZ93Rx8HKvb7L\n39nn18bK/+dvd9/N3VdRWUhDUTs4d0xNu1syMjBVzlVJWd/GwNk/MjxOwbxMS0/T07rHb7C/\n69lVPtGuvciwwk6+9z5ESOPIXzRRvv9vSzw+47+/zltFx81bw9lJT79RMT9fRmtTU9VZMdfb\nPES5az/F51m7vM7byOvGvVXjv2fXzTj32UfdTUU/Rt9DOV09Y+NMvj882///Oj3HVdfZS01b\nwbnjd8RbvbzB00mssuuvT0+us7/bQsy7vF3bz0xNtmMxyL430esy68frWWc9PlVTMVfKK10/\nMEhrNjLvNTjLSzV3wDdXzWdjwlvGMa1bvuM/vt/IzetXvs3HwkC32V3V1z9X177LyddMd99j\nylNrPMnd7/9rZ1XIxUlrY7tbv+c8tcvPY9nJT8a8PUi5U8q9XW//zuPHPkxTvEo4uTk40U9N\nP0Q7W7cyM2ddSf9vMzm6z0tOQC21sDxjyUjHusw8Ubi3ur03Nq3DUUhO3bC6ySVA9+vF5z7J\nvkz/zT5fW7xVRMNIPcxrOsDE3UxZRk9VV0pb10hKZ2vXQ1PIyLi8PFu3x3exzFe7xL7GycFT\ny7Tdzbo3QKzNML3MMj9KZ76vvzNn5yMnQC48trzfvr5NTOf/yr5EO85fz77BXVu0zVFLJz6v\n3y7T22vKti8luq1ET7Ur1a33Kz63rTw+RStLvNs3R99fd71FObGuW7/rMretvD08vbdd6+/P\nr8ROYzpOYz5RvrisrLO5999fNEzvRMEyR7g7X73bLy1A2yN3rc05P7W2NyoyNrOuv8vZtbLN\nOzg+b9dvPjr/tb/rZ8XKyb7GRU7Nxzorx8ZRQVlCOkjJ4ztX389rSC5RtLfDvb69xOfOx8zF\nLjzDubtjTz4qLT9VPV2urbmvu1Pjz++8dz7f0b671W/Mw7rZNzc0NDs3Ki1HZ99jPEVdTEdd\nRl29s73PTV24trrHx7y0sdfVV1PL2UosOuPJzkQrO7RXOTZLuqyuua+4tbfDyLzZ98XNyMvI\n41tBOjkzNC4zMCstMjg3OT5DSkI6ODhHwL7C51drzdPIvsW0wri7wLq8zv9fSbq/07ndUXdj\nWbO3y7W6ta+str7BXdfXX+fd2//VO09fSVc9LS82Li0uKzA2LiosLzc+S1XrzevAy8e7ybe3\nu766trOxw8PN49nVWV9rUe9ORknf3VfPV0/Pyc+2ub6zwbm/v8e7vtfZUVNHTU8zRTo1Pj47\nN0A1MSswOjQxLjE4QVVn3by2rqysrKysrKysrKyur6++xc/jTF08MTEpKiktLygsMi89P1c/\n19HIvbyxs7mvvb/Husu/zedfUV9ITUVOQkk+Qz85Pj41RUVGREM/TWPdwb+2rq6tra2tra2t\nrbKyu73DyF9PQTg5LCwrLCwtKiowLTQ7PkZbW9nFu7itra2trbK0sbjBzP9JPT43Oj0/PDY+\nOUBDRUA6PTQ5NTE+PDw+QUlvwrmtq6ysraysrKysrKyytriysrS/70w/ODYuLSwnJCQmLDE2\nQEDdXfe/uq+trrevsLOvuLC7w8/dTz5CNTIuKiYnKCkrKiovMTM9U2PLxcG6uK6tra2tubm0\nuLOwtLa4vbq3uLW2ur7Fvbe5wru+w8xbY1P3V000MCwrKikoIyMjIyQrMD1NTmfZxLWurK2s\nubm5uLOzv8PO1ePN29PvVzkxLi8xMjIuMjU9Rv/bxry2raysrK2tra2trrG2ur7R51tFPjkv\nKCkpKCYnKycqLTY+TN3r07uvuLKtrq2tsLCurbG0ucHDd01KQDYyLiwzLi81NzU6P0JPU0pR\nV11d493PxsfGybyxtrq/w8PHzMzO39fEa7+0v1nn1cnNwL3AxcO9td9vd9fPXU9C3W9DNDA0\nKyMjKDI3OFHFwrm7sa++y8a/tr7CvLKusK+ytsfbTDstIyIiIiIiIycvOm/Py9vDtq2trq+t\nra+xubu/tri5zOvN50Y7KigvLCwxODpE58Wxuresq7K8u864xN22s7y3vc+1vPdJPC8sKCQu\nPjA6TkVCQ0rrTTMvLjsvOUtnzri1sbbAvLHC513fwN3/ydfBvrq3xru2v7u6tcHfX1dVWUJL\nRTZAY/80MkdINS4jKCowLCpCZ7vBrbaurbS3t77rw8O7vrmzra+ttb66ylc9LiojKSclKy0q\nNkb/vK+sq6usrK6wwN/J70VRQe/r/1NrTGc3OSszNikkJC42PTlRwK6svq+svqyuvsy/u7TI\n0bTfu8JJTFFLYzguOCwzOCg6SDJAP0bb693FyK24u768s7PE0d3Xz/fFuLjVtLnHrbi/urS6\n28/Ryf/rTEvCzDk3LzM7KSMvYyszSSw/40Qv98pbUTf3WdPKTcKzu7OyvbW9x7/nzUdKPuc4\nMWPrX1m9ucF3wj9M3SlBOydFxVPjZ7z/xq3VvaznS61DzUGxRi6tuzS5X8RZ374o3UEryy8z\nxlPARdnFStG0M7XLO8JfQLjvX7o/z7stu0g1vzs33zRBWyu9NbhHT641rkwvrkd3tC6xwePf\nsz9vrCesKzmsM7yxNqw2Ub++PMvKNawurj/FSLY0tOc51U02v0I81TXJQ+suvi7B0zPbYy++\nTz+tONW9QNe6Mm+xL61nN60sb602tK4+tWdBrS+/xi3MySyuNmc/QD3jN7Uqryxf4zW9TTuv\nLcrBP607xa4yrev/rz66zkfj2z/EyU3Ru8rT68zKRMPOSc///z/rW0xKOcs6W+s7V9NOZ8Y2\na9E9b0VPV13JyUy/U/fTxsi5PK09u8PJua1dsNXKvOfCPve/Mbc7/1n3Sdk21180xTczvyxn\n1yq/My/ZMdVKM8MyN78tV1szxDJbuS2/VT3dw8ay77TLxa7Hxq13rcC9sLdbrT+t2V2yY7yy\n/7xfw9vjPMRZRVHF00PEd1HNS85bTevMOLg4Sc8w9zA6UzlENk88QEkzUz9nNMlH389K20bH\nd120R8K7NbfTP67nVbQvTrQvsUDXV7FAtV/PvNVHsDbLy0nFPMRVY9tHxTg/vy3KPD/rxDa2\nMN9ZZ0S4QblGu9fKXVvTSdvj1T65RuPGb0u6OrxPd3fnX/dV5022W9W9QbRPxWOvQLrAwL7O\ny8i8PL1LtEPXV7k7xDjCO3fO4zq+PlnRREPXO88vQ0jrNmc9Y009RUkvuTRHdzpLPMY5TVnN\nVT21U9XXyGu34768xneyXcLIv0a6P7nV18JXukTvtj/MS89BuFtLv1PZW9tR091CyldDvj3B\nO9XPS9vKOsc7xz1jzTjTUePdVc8/skG7Mt3vb9k/uzq0U9/FQ9tB2c80uzu3OrtLzO/XVdlL\nPMVE107HSl9r3WM9W2dJyzGwLr7ZRtF360++SuPf40PjX0rD3z26QcNIvz+9Qe+7O8LvVbk0\ntfddyNndb0C9VbtVxW/TX09TVUhJ70VXY009a1lH/0rTTfe/yPfD47tnxb+/z7fA2bLTXbVX\nu0m/ScDOY9XOV1fNPms+azTPPTpfOT9FMFs9zzdJQu8+90VfWfc32TjRWW9vV9dv/2u/TblN\nyEK+90K6PLhNxM5DuetVvefbTLjvw+O7zve6v0fDVchOtD+/013CM68wska9T8+/QM5HSc1R\n711GzULKNboqzjvjTi+5Mt1vX0FK40ZX68pfXbtE28fKTsfdZ1XLVePN0zvX91M6wkxOPbg5\nRMI/zWO9SrnDxNXvvlG02f+tWbhPvd/fs0i80bpGw79Iv0vXQE9nMMs8QDZbPUlGMV9ESjnr\nTUVKWzz/70dv28NMzNtFvl/Z49fFXchvWefRa1XFVdlXulXTvc/Rzs3jwc7RyMzIwcTNv8jd\nyMm/19Pf6+dnS2/nTGtPQFlFRz9DPjg6PjxCQEJJSmNM30Z3a2dM7+ffR9/X21m81dPLz83I\nvVnTxM9O3cpTxV9nUbxvU9PvSXdVX0bfR+vZZ8M/vVPNTb8+698+/1e/POvJ28PEuc23612+\nSGM2TD1L9zPFycK/w6zjrLGu17RBz0dVIy0vLykzMDk/Sjc9Zz48Ok1OZ87NraysrKysrK2t\nusNROSYnIiIiIiMpLjVGu6+srK2tra2tr8PXXz0xMS8/SUbfv763vK/Gv8ZGL1NELytBOE9V\n38mxr7q6rb3Bzrj/t8bHtbOzu7CzvMDXT0Y0JiIkIyMjIyMjJis5WcK9rKusrKyssrK0wsnn\n38bbwevEuN9nusrXwkdTzM45Pci+Qbq7tbi1zsW541lO10ZL5+vDvLq9t7W+y9tRNCwnIyIi\nIiIiIiMkKzRLa7Szra2tra2tra+zvv9n31tRTVv/d//n12PXxc/Da8zLv9X31b/G18zByb7K\nxMK/w7/Gv8TGzt/O0Wd33VVrSk0/PTsxLSwqKCkpLCosLzEyPVXXyLazr6ysrayusrjBz85T\nQz44OTc2NzdHRFNd3f/PvcTn08C9vcG0r7Cysbi0ubnI519ZOjo1OzxHTVn/b13vRU9FPS8u\nLy4rMDA5QFdb/768tbezrbKvs7Kzt7m8v83Pzd3//1lIR0M/NDIyNCwvMTYzNz1GWU9j1b66\nvbGzrrK1tbq9vdfnY2tOSUlBRklBREFOPEg/TEJMTEljd9XPvbm3t6+1trW5u7zBxsLD1b/J\nvsvH5/fnT0lJOjcvKykoJyUnKCsrLzc7OUz3/09v0cnPu7q2trW2tLy1ub3Cw87N/+tv6+vd\n59HjysLOyb61ysvAv+/3zMzZx8nHwcnFys7Bwcy9x7/J09Nra04+Pzo1NC8uLSkoKSYjJywp\nKTA6OjZT2dV3u7extqysrK6tsbnFvshvZ+/rX+vIzMzEwcTOwc3IzHfdvtXv1c/KZ9e/07+5\nu8DEzNNXV11fS1dn51lTXV88PjwwLSwuKSgpKyskLio0NUZV983Nx825tba8sqystK2vrLO4\nxcPO90xIUUJFV0hn39HTzsXCzdnEU9W/3+drzOtP08DAt7Kys7y9u9l36+vfT2fC0V9r3Ugz\nOTwuKjAsJigtKiMsNjA9StPvW8+7xc3Auq+/r66vsrnAxW9RQzo2OTg9PUNZ5+fKyMHF09vj\nTT7V31E+U+tPZ8m7t66sraysrLm3r661sK2tsK6vvc3TVzcvNSwlIickIyMqKC47REJLY8xT\n0e/AxcPBtbi1wr/dXz88NDQuNDA2OEZVU9HNxtXRzv9R281JQf/XXee3uryysbm6sba2sq2u\nrq2tra2vsLzLZ04/NDEvKSYmKCIrLjgqPEFLPVnO3dO/urO9s7u9ys1jRj0/PDg9P0FDTExj\nTvdTTU1DRztPPktMUd3jy8W6s720uru4urK0rrGtra2tra2vtL3L3Vs+OzsvLyouKjcsPjlE\nPktbRkbv3dvjtLm8ubG7xtv/QDswMi8tLjQ1NkBFTD9LPjw5OzkzO0s/R9fIxL+usrGurbKx\nsK+xrK2srKysrKyzt7jMSm9INi80KyosLywwP0M+S9dVR2/v/9fGvLq0tLW7vtPbTUU7PDM1\nNDU0PTpGPkxISz0+PT41QUdFRc3XyL2vt7Wvr7aysra4sLWztK61r7m3zM9OSDUwLiwrKist\nLjA3QUBXTtXI0d/Fv8m/t6+zrayttLa82U9JPjMxNTQ3NUU/TUxXR05EPTs7MzpERUlf08zN\nubnAvLS5xrO3u7qvr7GzsbG4wr7NWzU1NTUmJzA1KzI7Ty493/9BRr3rd8qusruura28uLTM\nT013RDNEU0g/V91TR0dXOTI5MzAyPjZB3eNNb7rZzbq3vMO2vMW8uLq2rbK1ubG6x9FZSjIz\nLDE0LDQ5PDJNRVNOwsDvu7u4xrKsxrfIrMPGtrvDyV9bMzQtMCktLTgwOU/nX8zrzkxXQ0M/\nPTpJREjKtnf3v7nv17Szvr21usK7uMC1rbTIuL7Rd01JMi4tKjEqKj0yOT0u32NB48S+wL+t\nu8awr7fKvLPHY73B3V9r7zw2QDgzMTc/PEDr38/DwdVj3e88QUlAPDw0VbxrW86vvdG/rF+u\nvbivwa25ra25vMDrxkItyy8pVzw0KS9HNyZEPC8yukPGz7evSrmw289Zvchb27lnudPrdzVJ\nNSs0NzJBT/fP57i93dtXRzg3OTw1S19T666sw7Wsrry4tb63srG1rKyysLG2y1dPSDsuLC4w\nKy8+LSg2NzUuOltBRsHT67muu8HBs8LOws7Nyr6+yL6+y29VSjs8PDk8REZn3dvX4+drUUU+\nOTo6Oz1BQUlj19PbwcS/tra4tK+ur7Czub6/yf9nW0A+PjgwMS8uKy8rLTE2Nj5DT+PT08e9\nvb6/vL68tbW0r6+wr661ubi8ydHP3+/bb1tbWU9KTUxDRkhKSEpNS0pNRkFMSkVJTkpJW2/3\n48rHxMDGycbIztfXd1tXSz06OjIuLy8sLi4vLzY7P07v18S7srGwra2tra2tra6ur7O4ur/L\n1e9LQkE7NDI0NTQ4OjtBTFdXX/9fX19KVVFCQ0lGRGPd2cm8uLu1sri4tbm+v73Izc7VW1VR\nPTo8OzM1MzIuMTU0QUh30cS7s7Cvrq2vsK6vtrW1vsfGz+dnX0w/OjYtKyooKSkpLC41O0BT\nZ9fOy77Fvbm9x8fK39fRz9PGv8XFwcvKxcPTycjJzsvK693bZ01ZV0VAQjsvNDMuMT47SVnv\n1cy8urWzsa6ura2vtbW3u73Cw9vvXUM5NC8uLC8tLjQ8PUJVY93PzcjRvsLR0+9jTF9bTevR\ny9HJy9nLzcvZzcrTycvR5+NvT0pIPz86NjAvLi0sLS41PUhP78e8uLSvr62tra2tra2tr7O3\nvsHLY089NjMsLCwsLS4zOD1ESuv/09PFytPN79lH72/32dXFu7+8vrvCv8a8wMHCvcvV09tP\nU3c/PEA6MisuKyorLTE4UVXvzbi8tq+trKysrKysrq+0t7zI4/dbPjUzLysuLi0tODc6Ql1X\nWePJz9vT71lrb0gwxb1B2f//tcHbu8+6tcGxvLmvvcnTz8vZZ1E3Pz0uJyQkJi8xKzJHY2/B\nzbWtrKysrKurq6ysurO6xGdTPTg9NzEwNTU4Oz00N0BAN2dZRT1KTVPvxtHKtrb/99Vn9+/3\n27Gur62urLC4v9VHyT8vPDxILygpJC9CRiw0U0H/TDhfra2urbmtra2tt7TBx8VnNTpLX1tV\nPUJrz0hCPjdDQDzn/0dLY2fd583BvrrfPT1BY+/398ivsK+1trm8tu/v3/dbPkFGPCsvKzXV\nPztVN0BOMUqytcG0t7y1r6y8y7z/b2tdQkdf109FY0pnTzM4Nzg6TlVdQ0FE/7/Bxbm6zutv\nb+fXtrjIuK+tsrq9vt9fZ0pJW0Y5Ni87My9nOiw9Y1M7PsO7wsm9v761rq26ur9rP0pZT1VV\n42/bzspdS0E1ODg6OkZRTEpMZ2fPvrvAy2tb68nDu7Ozs7Ctra6yurzKXV1bVUAxLiooLi8t\nMS8wMjM7R0tv0cvCvLi0uLe4wsXI0efTd11NSUdDRUFDU1/3TmPr3ePX029vWd/f0dPT92Nr\nXdnPzs7L1dPGwbq4tLW1t7a3ubrB1WNKPUJANzUrLSwrKisyNzs3O03/zMC1s7a3tLS0tbq8\nxtNjV1NOSEY8Ojo6RE1PUVlnWUhGTVtjX1dOV1Pfzce/vbu3t7azr62ws7i7vb7IzutfQDky\nLS4uKS4tKTAwNEhFY9nGvLyzra2tra2ur7G5usrbV0U8NC8vLi8tLS8vMzg6R0tT/2dv2+PV\nysfOxcfNwr++urq5t7a1sK+urrC0try9v9XZX0Y9ODAtLCoqKissMDI5Rknr1cC7tLK0r6+x\nsbK8vsLZY19HOzoyLy4tLi4xMTc5P0pba9fIw8PHys3Nys7JyNnTysvNv8PBuru6t7a1srS2\nub2/xMnVa2NLPTg0MTAtLi0uLzI3PUROW9nKvrm1sbK1srS4urrI28NIQD4+NTczMTEwMjM7\nPkVPXe/ZzMS/ur3CvcHMx8bXzcnT1dPV29PGxcXFx8PEv8TBwMPHzdfrX01JPjg3MTAuLi0u\nLi8vMzk9Q0xd287Evbm7ubi6urq6vb7D1ed3V0hKR0dJR0ZMV13n1czCv7u5t7e5u7y9w8fX\n2/djSktJSz/3JNW4TEkqTLO8/+fPysnRzN/f61lLPD5NPDw/PDs1Ozo4Mjk+RUhd3c/Hv7y4\ntLCsrLG+yce7u7nD11NJQD9IRUE/PTY3SVnZ3dnbycm/wsPPW1dXUUxBOz1AR2fHv7/Bwb++\nvr7GyWtn52ddT0VDSllbR0Q8Oz5AP0JFVWtNW+vEvby7urq4usPJyMrVSz06Sd3Kz+d3a/9j\nW1VJQDs8RlN35+//08vAv8jTXUs9S1tPPjk5R9W7s7G0uLe4ur7OX1lOVV9bU1djZ1lbWU9H\nRD4+PT1BPT1IW1lVXdPHuri1usn/18jH1Ug8Ru/Dwszr/9/n52dORTo0Nz9TX2Nba82+vL/O\n519FQFNnSzsvTN+6s66vrq2srrjCzdv/VUxPRkVZX0w/QkpTTUk9NThATUs6PVN3y9fTxrq3\nub3Fz9/r0eNLPUld99nIy9vf2e9ZR0Q+ODQ1OkRRX2/Rx8HDxdHfYz9HX1s9OD13wrm0srCt\nra28yMrM3VVHQ0ZKT05APD1LS09IPDdMWUE2O03RzGNZY8+1srrLyMDD5/fJx+9V793NycfH\n09vb31lERj88Oj9DSk1b59fn2dlr/1tITW9HP0hfz7y2sLC0sq+3vr6/wc/Z419XW11AODg7\nPDw8OjM0PTw3OkRGR09n59HAt7vAwsHAu8XZ2d3VzMfFwMLMzs/nWVdJQT8+PDs9P1FZXWvb\n729nX1lKPUffY0dHXdvOxrq3vbmvr7e4uLzAx8/Z729j71NJSFVMQT1BPTo5PDo8PT9RWVVO\n58/T0czN3fdf0cxfU+Pn4+PT193359/3T09RSz8/REZHVWvr79HJxcjNysbN0cvV08TKzdfL\nx8rIv76+wL++v8LHzdHd2ddvV0lLR0I/NzY0MzQ1NDY6P0VLUVtfd+/d19PTz8rExsXFw8O/\nxMnHy87Tztff619PTEdKTUxKS05VVVVPVVVZU11rX2/33dnP68rRyMnOz9PX083Jz83T19nO\n0dvj929nX2NXUU9LT0xMTUtPUVNPT09NUUlKTUtTT2dd/9nOycvGwb68vL2/wMTByMzR23dn\nTkVJRT8/QEA+PkFAQEdLV2v/1czFxb/Cv7/Ew8PFx8TIztXX19vd9+//7293X11nZ2tnW1VV\nT0hFRUlDPz8/P0E+PkA/P0ZKV2dv4+vR0c7PzcjBwcC+vr29v77AvsbNztvjd11dT09HTEhM\nSEZJTU1LTlFVVWfd19HPzcTCv76+wcTEy8zOzOvf42fjX2NTV1VVT09NTUpMRkxGSE1JT1FV\nUVFPVVdOTkpMTUxLTlFbXW9rd3fn59vT0c/RycXBwcHBv77BxcHBx8jOyNHV29vd/29ZVUpK\nR0VDREhHS05TXW/n09HOysbIxcjJy8/Tz9XT/2f/V2NXTldXS1dPT05NT01IR0dGRkdLQ0ZD\nQ0dJS09bXWN379fPzcbIxcbCv8PCw7+/wcDEwsHIyszP0fdvZ3dfS01KSkVKSERCRkZGSk5T\nTlNNT1ldb/fbzszIzMjIxMjFw8fIy83Z2eNjUU9TTU5MSUpHSElCSkpHV2d3d+/n6+fj5+/j\n/+//d//j39fb0cvNz8rJx8LCxMfGxcnGys/Ozd3f4+NjWV1RR0dGRj9EPjw+Pzw5PDs8P0RG\nTFddU193///n39nRz87OxsfGysfM19nduTQ9rL0lPqw6P63OQcJrRcTnOee6PWe16z+6ukhr\nuchK3cpn99VZV9vZV3fD91nKyu/Iz3fX1Wfn13dv0+dX1cxF38dnQWtVPkZXPj9dRzxFRzxM\nSTk8Q0o9P1tHTs/r78TBwLvCwLi+xsbC32e/yk3CxUe9vUfd1d/b38rTb9m/RVtbxU41Qm9N\nNUs4a2M72URGvtdRyNXPvlvfxNf3zuvLzcvN/87I29lb3evbVUpX701GS0dTU0RAQ05PRUxb\na+/X0dXOxr3X473BTcNO28TvRs7GTsHbyL+7utnCv9nVWWdBP04wNTQ+LTo7PNs230fjW1Xv\nQWdNz01ZzE7E68G+wrzFvb2/zdPA58nJ113n1UVTRjs7Pjo3PDtFSkpX3cO+xLm5uLS5xbq7\n//9Za+PZzNW+sr68tse7w7/Fd29PU0M6QUZVMURNPDE2TjswRDs9QVM+Ud1TXc7Za8HF09vH\nz87O92/j/9NDX09d/0FnPVk/PEY7TjrvXc69z7rByLa51f/PW1/fTU5d67rNRbDFtsC82bjA\nN7gyrkU0rS65vz+8ONFCSzs9XzjbPk7vV9VPz8n/uMvCvcLJ48/Rd9NKb1HbT0r/V3dXS1dL\nWzpFRUhHXz5n929jX8VvZ7hLY///OtNON79Eb75NvTe1rS+sPUu3Sbw7sV1v2edNW8I1Vc07\nY01JUzLMMkfRP+9PyVPIS2/VTcBjSb4971u/5zm2SLs8tTeu2d3F3bjV48V3zcLAyNXJa7RO\nu1O808nPXbZGu0O7QUe4RDW4L8tHZ18yzUk3Y/85ty+5Ns2/NMvPLbY0zzpMTDvbvjfr5zvj\nZ09VWedTTcU8yjWtMrvFP7hLd7/du75dtUTFPNm9S1XDO7itLa0rTbUvrDG7ObzEO79BPLYu\nrjbJazu2PlW7Lq850bsurjS00UC8Tj+5OLZIV8I1w0XnTz3AN8LPMK4vRb5Lu9dRyUPPZ9td\nRfdJzkhJ43c/uji0OFm0LrAvtzS878tdU8RvUbsvrje3vj+0OK5IxcJCskS3/z2yU83B3U/f\nvf9byj23P8rLQspOd0pjP2s5zU5GzT/NP91K30xGzDjr1TTP529G21PnU2NHR+dCvNtHxj6u\nMcFfW8nVzMz3utlT18pXyMpPxT5vwjmxR0+9P+vDS7/XXbtO/7hfz64urDg2rFnjsTuvb0+u\nU3fTRdV3NP9TP7pBVd0860tZ69s4vj0yvi22TU7XTkrLQkK9Ql/EOlu9ObxNR68vXbhM2blI\nulu+1+/Zxv/M2dVZvVPP485dOsF3ObpTV0PPUz7vW0n/Re9Ld+tb/8E/zsJj3993zF9r33dK\n51l3/z3ZyTPd10RvTtFbTt9NV1tf59d3d9nKd9XVy83Zv8vTwMDnwc++w2vEzNPj0+vn72vX\na2/nY+fnT89Ma/db/1Nf/0VfX1dbSN9XT1FjVU1vSmtOX1lrW1tZWU1ZTFtOUVtPSlNPV01b\nVVtXWXdb71Nr6/f373fdY3fR/9HX18fZzNPR1c7b09fjz9fbytPGz83Pzt/L39fZ59X/zt3V\ny9fK08vR08rXz9HV2+Pd6+fva2ddXVtMWUlMSkhJQEtEP0pDSUpFU1VLY0v3Uf9OZ1lRb09b\n/1vr/9fv1+fd3+/d5+vZ79vj29nV29nd7+fd99l35+dv5/fr92v/Y+9f/2tn41vn929r713/\nd293W+93d+v34/fZd9v/69nv59X/0fff3dnj39nr3edr33fj9+dvY2tra2//9+fb5+vf3+Pj\n293b09nd59/jb/9rb2dX91NfV01PSUhPSk5JUUlOUURXRVNRV11VY29rd+/r6+Pv6//392f/\n393Z2dHZzt/N19HX0dfZ2c/b18/Pzs/O19PZ49tr72db51n3W+9jd2dbXVdfVV9Xa1N3WW9v\nd2v/7+tvb/dj62v/b/f/39/d2dHRys/O09PO68/Xa9XM21Fv0dfvZ9/3VVln3VlG511VU01f\nU1FRY1NNUV1vQ0xOTUtR/09ZWV9ra/fv52dv783b9/fb19Xn1dnv0dPNb93Dy2tRzu9n4/9v\nSl3d31nv229ra19bTe9vZ9VTSVnf1WPZ79/fzdnI2cnJzdu4tlNN2b7CWevn31u7ykFJyLd3\nSV9Bvb9IOUZXzdfPQzLNs0JHbztbvko4PU3V7+c4OufBVz5L51t3zDlOZ19PzOc0Y8vO6+tf\nxMfCb87BwL1rx8Ovul/Zv7iwvUpTvsvE01M3PN/Pazs6O0XGVTMuOG9dOC45R01NRTw6WdFd\nWVnr2dHMw9vf38avw//fua2w2Wu7sL13zsnHx79XWdvKz87rd1nZysn/Y+/bz/9ZVUlI79/3\nR0tO59XvU0pXb1NBODtCPzw6PUVOUXdNVWPVW1dMPkVGRjpBQUld11Xfu7y+wte+tLLI69fH\nzGNFQ1nX09v/zsvT09dZ2XdbY0c7TM/n59vTua+z2cO9tq+2vrm0v8bC1/9JRkpZSz5H07/D\n62tXUzkrJCMjIyMkKTM/W8+/vLmsrMw0MUfIzEo097Kutse7tq+z0Wdb62PnUzhIXdfJWU/V\nvbvDTnfVXetbRUn3vrm+xL+/w+9HT+fbY1lLQjo0MTAvKzI3O0v/ybCssba6v81ZOjAyMjI2\nWVtbsKutvLyyrKy+Ttu/vVVfa8u5sLTGxr7CyFUzLzg5MjAwPVNJTj083+9N6zkvQD1KZ05O\nw7u1rLq/sbr3zcdJQUhJd8TIzL3AxNtnRjAwLzg7QvfZvry3tsTG609VOikmKjNLy7Wxr7G5\ny2M8Oj9G2c7JuK+0vr3Zz7XTNjw9Sus8WcFfr706PVPj4/85LCxEura5vMKxr8w6LDEsOjIt\nQe+1rKyvsLW4yz0qKSsuMzY6W7K3rL3Ar8HrSj490brPvbG0vMG60c3G09nO0U1rX1NvSi4v\nvGMzRDY231MyMkRXPjdFPsy9XdlTza25yc0+Y7q6W0pL08vJy9m0trO5Y0xOOzIvMUV3xbiu\ntLezr8FvV0EzOjYtQHdn79VvR/d3PTxNUUVRVS9My1PXzNHI519XTUdLTEhFVTs2TF9Dyb6+\n3a6svK2tvMbEubatrbiurbbBuNEpOU42Qkk3RcbAxcdfR0U+KiIiIiIkKCtE71dXP0xRY1E/\nP2ddu7G0r6ysrKyyt7Kssba1tL/Dwc9vuLGxv2++/8pONElBV8vVK0BNPDQyMiwx7009/zwy\nNy0nLSgoMS43PefTtLy7vs/Oyms+PtW8urSusq2svrq6t62trq2tra2tsrCtvL++v9W972Nb\nOkE4PjY2LC8mKTAqOS1ELjs+MC8uLC00MkhKTF/Nyb3Xysn3V9e+X83nwNu4u1m9zr69vv/R\nur+yt7e9u7rOvtHP979fs8W+xd3IQudPQlXvQEc7OT8v/yrRP78/VetEyEvHXbjDtd+zd7W8\n00TRa0//X8swxTlZPl87YzFfPj28V1FVZ2/fyUpJd7pOzcpbyLvRuFevV7p3tj2uvb9vz8JM\nzF+9M8VE2z3/O28v1S09M+swRDxNNkJOW01Pd0/jWVG6S8+3L6wvuFe3b1esRqw3rUCvrj+s\nM7rfxFdVu1GuNbU3uEW6OcYub0NZNT1KN9sw2Tw8SUw6Ty/OML9NPdFM39lFvTjH0cjMzLrB\nwbbEuL3XrUyt67atv7nCvrzbt1e2UbpPwMzZU933SEhKvDfvN0JAQixGI04qPCdCJElMJFkj\nUyw+MjE2RT88XUhHxj+vU7m3v7usa6zMrLutrK2srK6suazLrLmuv66turO1tOO5ys/FU81M\naztKPzdAKUsiOSkrLykqLCorLihHI04oPzI+QDPPOl0+znfnw3fCzLr3rf+zuq69tK23rcet\nrrmsw6y+razHrMuzw8y6b71L51V3Tl8+TTfrMGMyNMslXTAvPj42Qjc1QTFGPzrVOOM/V1tZ\n02tOv8vTtlW2U69BsUZRt1G2d8lfu8jJV8Bv17xEvdHTxlm4S8nGSrpKtc1nuUK3XcFjRrhj\nd87ZyffZzUnGT83jb1lRxmNv2VFnU2tRWU9JYzxrSENJPUo3STc/Qj5MOlE8RERGTU5bW2Nf\nd+NV2V3Z/9Xv2dXNy83JxcfGwcq+xL+/xbvJvsnJycjN38rZyt/Ib8/r0+fb3+/jd2/nV+9n\na9332dfv0+f/11PbX1tdR908bz1HTEFRQltAUUhbS1FKSkxHT0RJQkZHPko9ST5ORkpMS1lL\n61nb49/P0crbxc/AyMHHv73Dur+4vbe3ubK3sbK2sruzu7m7vbvDwMTIytvb43drT1lGSD47\nPDk1NTIxLy4tLC0rLSwtLS4vMzE1Nzk8PUJHTFFVV19v39PJyL+/urq2tLOysrGvsK+vr6+v\nr7Gyr7Wytba2uri7u7+9xcfL0dfvd2dXU0tHQz89PTg3MzQyMDAuLi4tLi4sLi0vLzM0NDk8\nQ0ZOWV3vb+Pf1cnMw7+8uLixs7CysLGzs7W2uLi6ube3urW4ure9xMbX2eP3U1VMSkpHTkRO\nRkJFP0E+Pz04NzY8QUNCPDg8NT47Pz8+QkBJTedRTuvDW+9MTP/Ru7S3vsPDvL66s7a3tra3\ntri8vMXIysfX51VTV0lPW11dVVNMSEU/QkZFSkNAP0hGdzFAQFFvTTUrR0m+u0s7191Z02c3\nSOutray5wE/fz7m+uMK90761s7m3srm9wctPQE5TU2drRkhITFc9MDMxLjE2LiwuLzM5ODg+\nOkI+PkQ8QlNvZ+PXy8S5tbO4tbOvra2tra+vsq6zsLa0tre5vL7FzOP/X1dOQE1NVUt3OkVL\nRFU+Rjg4OD01OTUzOD9ER0I/OzxFQ01NRmNrX9Hn2d3Oyr+9w8TMwsa/vru/xM/Ryc3Tb2tX\nd8zMzF9CPT1K9/9XSj4/P01nZ2dPa013b8zZ59/j0c7KxtHr09HGxL7CztvV09nXzNv/X1dR\nR0pKWVVfW0s/QEM+QERNUU9OU2tnz8vM0d/P48rCxMnPy9vDz76/ycXPz+PPZ99bVWNO03fr\nb+vjX+PJ42Nv63dTd8pHPkZZT0vV70I+RD44P29BPkU8Oz1KTkZDVz89Y0FrX29b/9nXvMm1\nx8nFxbS8ure4vLXHurW7t8OuZ8W+79fLuP//290yRUI7S1VjSTdCQj5ZSkBROVs/V91R39NT\n72t3yte7xu/TTE5v/2PT0dHv68hX49vbd1nKTFFfdz1MzndPX8hCTUfjd0jIwzhdy8vLwr9n\nOjI5Ljzd58K62ctryr/AvbxfTEIvNjZFY3fLyGfH4//O3cLDzLvDxba9urvBzmvX51dj61Fr\nXV9fRudLRllEPj48ODUySER30e//a01jXc3Fx7TBur/J18fjxcW/v8LGzu/PZ2NfPjYxLy41\nOknfzMPJwsvR31NKODI1MTtOY8m7tbq5ubm6v73Oz+9f2dPHvLvCwutjRz9HOjxLPD9BPUpZ\n/+Pr998/TEk//0/fY1dXU2/O/8y+077Gv8a+ybrGxs5Z21VVw8jJusvK1Vf/X0lrU1tHVV1T\n/8XIwL3Pyk9MPzY6PTU8Pzg6PEY9SO9TU28+PTo2RkBNye/n505XX+Pnzb/Hy7/Py7y+t7K6\ntbq+u7i5trC4urO70bvNx768wsnBy9PFymfOW1dGOTQpLSoqMC8tOS0pLyUqLS04LjM0LTw5\nRcPIuLS+tsPVwNPbucy8z7q+wa6ut6yvvLW9triyrbG4tMnHyNHDyczEd9vnU05IRUo+Tkk3\nSjtDSUNJPz5DNjJCMTxKOEU+PEk9WWdTXVVIRD0+UUPXzM2/yN3dZ9/R28S9zsLE1+vNwMe7\ns7m3uLm+vsnKz1lrR0T/a9PHu8vXa0Q2MjQuNjg6PkBIX1Vny9P/zttLS+NOT9/ZW2tv53dT\nudHvusVn03fPy76tsbCsv8lnQD02Q933wLLBvsrTd0RIRC41NCsvMTc9OllGPEc5MUc7SdHJ\nuLi0r7i1ubO6vL7KZ1dPNlNbT7/P0cXf491rWff/3ePLydG9487Ka9vV/3fX/2vvTk1OT0Hr\nTlPXTUxvQjlZP0RGUTlFTjZGRFFr787BzO/HU0Rr79/HucC1sLS2tLO8v8PO29nR19vH2d9d\nTUY+PkpDRvdHRO9FS048RTc4MzU4O0NFWWdfVev3SXdna+d3zd3NvMfGub7FuLzAw8O9w729\nxM3b2V9r38jFs6+3srnDzt1PRE1BS01LXVNMT0hJR0JKTT5fSExIPkg+QUdLV0//W0xLQDo1\nNS4vMTA0PkX/X1/vVV/3783Xx72+ubK5sLWys7SwtbKztbi/vr+9wc7TxlvLwN3H1dFvV189\nRmtNR01FPlNFSdNK0989Pjk4MEtIW8PFv8fXVUQ2Ly8sLjlFTtXJ1+9KPjo2PExC0bzLtbjF\nvL6+vbu4wMHM3dl3373IwbvRXWffTtvOx7/KvVvn519vXf9RSEZMRk5r6+vZ3V9LSz46TjhK\n90fKX1P3T1lZ40v331vPycjIyePr10tj3U7ZwdfdyF9fzt/b2+tbTU48TzxNd0/r9/dV60RH\nRD9NQt/jy8fByrzXv85vylnNzM3BzL7F68lnUdtMz9lbxd/Gvby7wsrvPFFKOHdja8/X29vv\nZ1NEODMvLDA3O2vLy7vB2VM8Ny80NEFdV8vVd+f3Rmt3Quv3Z//J1b2zurCvtbSxuL2wubyv\nuri2wMfZz01fV0BTPEI9R0pIVU1DPDoyND42Rk5DZ0FVSkRRS/dVZ1tL/0xr29O+vrm7w8nv\nWVHj69vJwtnM52NNS0xIUVdO21vO09XKwsfRwdvj2dNvyef/zNXK/9nZd09jSEVXSetOa3dK\nPUBGPlP3d8vMXedJR9V3xcDJvmPVyGfJw8XJusDNxcHJ0dPrT0tZUU9VW2dORF02NUEvMzk7\nPT5KPj49OkdBTc1n38Hr38rj983J2dW+zLy6uLC7sLe9vMHK0cd30/ff4+vVV9Vba2NHa0FJ\nTmf/zc/IyddrWW9jb9Vdb+NRSE8+PD5KOD8+O01ASV9fV91rY8bX0b/Z58LJ47/b17xnzcpT\n3/dZZ+Nd2+9X411j/9fZy8L349NLTldKXV1TTVtZPWdKQsj/3evbW9vb38/O38nNd8zrzs/R\n0+/PX1HdVW9fU1VXRExrTV3/T1lbTEhKTD9RPkldT1FV/0vd6+/PyMDEw9PLz9PEvry2t7e/\nxs/ZZ2Pn5+Pfz93b3+t3V+t33dfX2WPjTmNFRz9CSzo8Qzk+PTpKSDxIRG9f0cfJusjLw19n\n791vxcfJxdfT129jUWdVa+NR0U9V3UxV39NZ/1tPZ1/r3+PR4+fr/87J4727xMXI0dvOV+/X\nSmdrVUhjSj1jTU9Vd0Z3d13X28vGztfO1Wfd213R02fMd99fd/9XY0JbSEFPRlFMZ19NUUFI\nP0pCRVNJd89db+fPzt/CysHMwr/Gx9PIU/9FXVtP0UfrV11nWVnbz9vIwse9xMPGycrJxc7J\n02vn993vyWfT42/nW1lZ30/nTkx3VVFbT0RPX0J3UU3jb3fR/+vP41/vW29ZV1VKVVs/UT9E\nPj5AQj9FY0Y+SENNRXdf0+PAvt3E28/r28LOucW4uLm4vr7Gyetv31f3Y1NnTutfd11bW1N3\n39nZz8bNv8bIvr2+ubzJxsF3zW9b60lrZ0Y9RDwxPTMvPDg5OUU9O0hIY0ZM1+Nn181va+dn\n6/ffx8zdwMzjvsjEvsfGvd3TydfJwsx3x2dVy0bn52/Pze/nxO/HyNfIzNPbxmNXX0lXSUZO\nO0Y+OjM5OjA+Njo2P0s9TUpTa2/r3dPPyc/fyNnKwMfAv7zFvr7CwMTAwsXDw8PrzMLbytPV\nY9n/WWNrze9T/11VY1t36/9TZ3dPWUZFXT9EP09CP1FITklXTlvnX/fdz8njw+fr191fb/9T\n719n719Ga0lMVU9db29da1Hn/2Pjz1dj1/fnzd/Gz8/ExMe9vrm9t7rIu7++wMfGzdnZ593n\nW1dJPEM+Pj05PDwvMi41NzY6M0FKOj9PSVdP51v/b9nC08jFvr6/ur2+wc67vdO+xMa5wL3I\nxMbEycfK0cjI283L18TE1cvGY9XXZ8tba11TRkhMQ0VAPjo5NjNDNDQ5Mi4xLi1DNTE+OTU9\nPD1dQ13VW9vRxufEvse6vLaytrWvtbuyu766ssK4v727vrrDwc7PzcTH09PL20tvW1lZb1NZ\nUUhTQUdKRUdMTj9VS0pKSENCUUlnUf9LRktTSk9rY9tbVU9IW1lvb9/Za9fn2+PR39Hf1dnn\nz9/T0crVzc3Ozdfd7+tdY+9v919XUV9OX2dbY+NXTndNY1dXU09PU1tvW2v3TmddV2v/1Wvb\n7+/O09++y8m9xsu+0cjE2cPT79Xb/19Xa1fOb2ffX+PT1efvV9NRT/dI3WffU0nVQ2tP91lv\nd07vUWNOQddL699Db1tHz0rN2UvLZ9XRS87L3bpjycdfvW/v00vMUdFj4/f/V2fdP2NnQONH\nU9U9bzw/Tzo9U0I6RTxEQ0ZTTUrKS8vT3cHb0cnJxsS908C9ybS4wLTEurTGsbfGsr6/u8DN\ntcHNusvNw0zDbz3dQ0FnQTJOLzU+LTk0KT8sKz0mPTYzQy87PTlMVU7KZ9PPyd/AxdW5yr+5\nxLm8urfHssTNutO9vne14/e478O7/77dSbdJ0chN41tE70RXSD5nPVVbPllJSFtO7+M80TU7\n3zDn4zbnO0xfQNFPTctJV8VEyF1nzFPGvlvB09e9yrSy16zfvbLXtbnPu99bvlPHzk3LRznE\nM9H/NtEw/1843TxDX0BXTkBRPUBdP1VXQe9FRP9GV+tCY0dRWT9jY03PY2/D68XI47rHwba/\nurfBtrrFr+O3w8+/0du5Z8fTWb9f3c8+6007Zz4+XzdIPjNHNjlGPEE+QUdAS09OVWtX12Pb\nyufHyf++yr6839HK68fA38/302vIxsDv3VdRz9nja193T2PP/2tNTVVn4+NTTEtLVU9LTkVn\nXUzjSV9ZWevf5+f/779d09fv1+fNyeO+42POW9PGy85n3c/rz/9P219Ty1vXZ9VnX19dY11j\nU+Pd3efnV1/fV9vfzXdfZ11f20ZO2U3db05ZTV1X/29Na0xRV1lb/3d3Z/fX29PX2/fZ99XL\n19HEzsLVz9PX383J1czb3dtXd01j90ZMQkBPREA/P0ZRRUxFTFVBW0tb71Nvb07f29vRX9nb\nzcD32c93zevR08zG0ci/zcnT58/Lx8DFxdvV2dXV09fX49fn51ljXVHdZ9vbU/dVZ3djWVNM\nUUZMQzpCPj1HQEpJREhCT01ESE9N711VX0dVXXfd293P79vbysbAv7u+vr28v8LIzcHBv8jM\n2d/j13ff2///Y+NjZ2dbXW9LT19OV1tNT1VVVU5NSkJORktTSkZMTEhKRUdJR0lRTlNbW2v/\n49/VyMfFw8PAv72+vb+8vr7CxcHFwMHJxs3RzePj//f3a2tRUU5DR0ZCSkNCPT09O0BCRVVI\nTVNRd1//193V0czJysvP08/Z1cnn2+Pv1etnX2tvY29ZW2vn//d3a2djW01NTElOWUtMRkxK\nTE5LS1Vv6+PXz8jEzMnEyb2/wMHEx77EycPGy8rJ29fb/9f//3ddb2v/X1lZW1VZUVdXd1tb\nTFVVTU1bSk1NU1VPX05fd1dOSk5NVV1ba2d34+/r6+PVz8jHx8vHzcnT19vj3evf5/9dV1FT\nUVtTTldVTU9LS09PW1dfX1dfZ2/n5+vr3ePb3efX29PT08/b39nn39PbzM3NzMzRyM/XzM7P\n29fd09fZ3+Pva1tVTk1MT0pGSUE7Pz1KS09RVV9nV2N379/f49nZ3dPOy87M0dPV19nP2//r\nY11fb//v6+dva/f35+9v4+ff4+fvb2tnXVlTZ1tdb2N3a1tjY19rW1tdZ2tdb+/v32tra2v/\n/2dfXW9b92tjVVdVT1lXY2//3efn59PNy8vLzcnJxcjIxcjOzc7N2+v37+dZVWNfZ2NdWV1b\nU0xOVVVZUe//d+vZzdPOz8zM08vNzs/b0dvf62drd+9rV1NbV01JS0xVTUZLTEpMSUdKQD49\nQ0lDR0VIU05OUVtb/+vf19vT19fR0c3Nz8jIysfJx8rV39XXz8/KyMjCx8nJ1c/Nys7Xy8rJ\ny87Ry9fR0dvdd2tnY11dV11bVUpEQUdEPzw+QkA9QENGSU1VTldrd9nVys3NyMXDxMXFyM3N\nz9vP2d/j9+/vb/9fZ2djV1VZU09XWVFTTk1NTUxOTU5NS0pKTE9ZX//d3ePdztfT29fR0c3X\n0+d3693r79/d2+d3/+f379/r9+vv5/f34+N3W2NfV1t369/r6+vj2dnf29nT09nj29PR0dvd\n29PR2dvXzM3O2dPX2d3V2+vvd1tXWVlNR0lJTEZBQ0lOTk9OV1tVVVVjZ2t3d9XZ09XZ0d/n\n9+v/b1lRS0xLR0pLS0tKSE1VU1NOV2NjY2/r69/Z0cnNz9fRztfd6+v3b//v59nX19PRzdHV\n09vX2dHO087O0c/LzMfJx8rKzc/b3dnT19fVz87b29vj629fW1VTW1FfU09RTExLSERAQT5D\nQD9DRUBDP0pMTU9NXWtjY1tnX2drb/9vd+Pfz83Kzs3IxsPBwsTGycPJyMvV1d/f62dvXVdZ\nVVNOT09PU1tdX2fv7+vf929nY/9nZ2dna19na2936+vd49/r7///7+/f39PT0dXX1c/P2dfj\n5///73f3b/d36+fZ0dXP0c/V2dHZ39tra11RUUtLS0lJTUlETEpOT0xPT1VnX2/r6+9r/+vn\nZ2dnX2NXW3d3//9v//9nY19jZ05XXV1fU1trWVdXU1dbV1FVVWdTd9/b2+/X0cvOycnKyMvR\nzcvFxMG/vL++vL29vry6vr7Ex8vP0dvf5+trX1ldWVNPT0pBRURHSkxLRklLS01MTUxNTU5X\nV1dfVVlRV1NRV0xKR0tESEdOUU9TU1tXX11nd3dr7+vb2+fd6+PvZ3ff593V2efvd29nZ3dv\n993Z29fX1dfTy8nDxsXHxsTHycXFxMbHyMfGys7P2dvn72/v/+P35/9vWVVVU1dVV1tZX19b\nWVNRUUpMS0pOTU5MTElHRkdIS09RT1dZWVlXWV9fX1tfb3fj3dXX0dPV09HLzM3Nzs7Nz8vN\n09fb19Pf3efv/2NjX1tZVVdTVVVXVVdPT01OU1ddY2dra2v/9/9r93d36+/f9//na+vj2dHI\ny8fJxsTExMbGx8rLz9HV29XX29XV29vjb2dvY2tnXWNfX11fV1FNTExLTUxISkpHSUhJSUVJ\nSUpITEpHTU9XY2Njb2vv5//v6/f/7+Pb0dPXztnV1d/j5+vn//9v6+PZ2dPKycfGxcXJxMfJ\nyMzKzs7T0dfb39vf69vvd+93Z1NbT09RUVFNSkpLS0tRUU5PTEpMSUpPXWNn9//v///3393d\n39vd69/d3efn929v5/f34//db2NnZ+93d93V3dvd4+vj99/32ePZz9HOz9nZ429v///n7+//\n//9dWVFVU09VT1VPTFdTU05RW19XT09RXVlrd3f/b//f693n6+fd7+f/9+vvb+Pf3dnf0dXT\n1c3T0c3OxtHLzNPb5+vv79/33+fV4+/373dvb2fn7+/rZ+fj/29v52/3Y3dfV1lNX1FRTFNP\nT0xJS01LTkpRTElHSEtIR0RISUxMV1lv9+/n18/TzcjFys3RysjMysjCyszLz83Mzs3KyMjK\nzMzNy8zJy83TztnZ1+Pn793f/2tnZ1dTT1VPSUpJTU9PVU5LS0hFSENERUNHSklLTExDP0RF\nS008SEZMS0dGSUtPTUpMSUhCSVFVT1V3b//3/2/v1dHHyr++v73EzcnKwMXLzMrNz8fJxMbH\nxMDDvcfFy9nrX2dnb11TXVtOT2Nf7/dva1/n42NfZ1lZZ09NTkFKS05dXWdfVf9PWVtbUU1G\nTkhDTUxITldf/2Nb7/fj49XnzM7MzdPRzdPXy/fO69nXy8/Vy87P1c/L28/Xztf/0e/f1dPN\n999rb1tbXV1XX0tTTk5MP1E7Pzo+Qz9LSEhPU09vb1vb39PMzsPEv8O/v768u7vAvsO9x8zV\n3WNvWetnWVtVTUxbVVdXVWdX42/XZ1lPSU1LR0ZLR01DSkZEPkdKTldr49/J59fTzdXZz8jX\n53fZV19j71Ndd1lvb/d3Y2fd9+PXz8nHyb3BvL+/v7/Av768wb/DyM/b32NFTkE8Pjo6ODM0\nNzY1NTU4PTo6QUpHRl9db3fj59nKzMLGwMDDvsbBxM3Kxb/Izc2/wMrJvr/AybzMwci9wr3A\n3cPTyNnv/19fTldNVVtMSU9JRUg9R1c/SDtFPzo8OTo3Nzo3PTo9Pj88Q0pMU1drd+fd39PZ\n59fNx8O+v769t7rBu77AvMPGw7/BxMPMzNXf7+/va/dnWU9NV2djX2dbXU5VQ01PU11XUVVR\nTD9VVUxbVXfr1czRysTO09XK0czFyc/Z2f93z3fT63dra1tfV+9n9+/j4+vvZ/f/3//r4+dn\nZ1dbUVFPVUhDRkNBODtAP0hHRFNVX1tvb2vv283Fxr++vru9vb24v73Av8rM29Xf7/9nU0tK\nRkxGS1NKV0pGTUlMSUdCP0dKR11r49Pd0dV31d/ZzMnPxMS7v7zAub+7wsTPxM/n91tbW1Fb\nZ19d/3dvZ1NNS0tNU1NZT1NKSkxRTU9NSlNPTldTT1FdV1VOUVVbX2NbXf/359vbz9PrXedb\n53d319XO08XJ0dtba2dr/+fPzM3NzMjJzcvTzdvM2dfbzt3N38vF0dHfz8vPz9HVd9dr6+tn\na11bR0hHTlFdWVlNR01LU1dRX1tfR0tKQUI/PTo7Ojg7PD4+SUJBSUBLSFVZ3+vXzsvIyMq8\nvr69vr67tra2srCxr6+xrrKztbm7wMbO12tdX1tVVUhOR0xBSUE/Pj5APEM9QDs/ODY5OTk1\nOjk+PEA/RT8+QE9jV+Nnx8PEwMO+wMPKxMvL18/Zz9fbz+PZ5+9n6+fv987Ry8XTzMjJwsDL\n1dXDwcfJzszHwOdXa2f/d05JSlvnX0pDPk1TUVdNU0VbVUk9PkRXU19Oa//jVVldS1VMX1XL\nvrvvUz5dv7rHwrrVzefZ19HK6+fn1cbbPTAuzr2ttNtIQDw0ODhNb8G9vFdnX/9dTl3dwut3\nz8RFTGNvPd/328O9/0bdXUc/WU7/T2dZTzw1NVnZSz41LzRF3dlrW9/Ty7+9vtusrKw9LzT/\nrKysrK+vtO9GOz7Er6640+vba0c+OEHjwWsvQzovLzEqKUDnQuPMXzxNzGfru7/BucDVa8HP\nx8bP1VlnWbu4zz85L1ljxVFK213OuCQpr6yyNSMoKKyrrMqwrOffNigpPbeszLzDsLTTST0+\nu7mu32P321U6MiswQfdnb1fIztdTPUNfuruyt7S9uNPZ18HJ1dXvVUlfRTY7N0I6Q0BbXdH3\nWzk2Oj08Sc3fx2eyrSNPra2vUyo2Ma2ttNOtrchTKykqScvNN9u4rc0+ODnXur3VX9u3vkwx\nLDlKY2NHd7uwtt9nY8C4tbu5sq64yklZ59PRV1Nn30s9MDY6QDw6RF3FTkFCTT5LV1tfuLBG\nK66srDolLTe/rLrBra2wUSoqNUHfX0TZra3AOzhT429MTNG4s8o7LzhDPTc7Ss2yrbbXz8rG\n1cjGta2tts5j2e9nSElr529EOjQyMjQuMTxLRD9jQzkySG/nUdHnwLvnsOs8raysQSvNv66t\nrqysrLM0LUxVOTNXya2srMHjw7lRNzlT193vTz9DPS8mJis0PkxjyL282V1LV2PTwLW0t8nj\na1U+NTg+TU9MSkNGQTw5SOvf39fOwsjvb93ZzdPBure9uLW1uVXbvrPOW9+trKxAd8a9Slf/\ns665TDQ4RSgjIy1FS13jwLm84zs5R1E5Nz/ZzNn3W93nXUFD2cfKxbu5tL3My7+5wM3Py9f3\nWUs/Pzw6ODk1NDY+Pzo/T29j38zNzL/IzNPOytPRx7m8w7aztcnMwsrTvclnzK65SzdTUTo0\nOk7JyVE1PUs2JictNDQ4Qte9u7u7s7bB09nKzONn3cO/ys7Ju7u9vLzFw9Hj393b3d/3X1FM\nSDw2MTAwLy4wNjc5QUdJT2/j0cfBw8G9vsLLy8G7vby2t7q6usrLxcvTxsv/29PnU0Zv51k+\nRkpEPjwzNDg5MzdBREFFUVNRb+fr39HLyL+8urq6u7q/wsPIzs7O3f9vd19fWVNOTltbV13/\nb2NZW1lTU01LTVdfW1tf///36+/n087N29PV1c/T3dHPysrO1+Pr72dTU1VbT05FQUJCP0FB\nRkxVVVVZY19dWVNMUVFLT1NXb+fd29HIyMXBwb+9vL69vb3CwL28v8LFwL7DztnR3/9ZT09O\nSj89Pj4/PD1AREdJR0VJTUtPXevf2efd49tnV1dfa19dWWNdT0xLU19nb+fb0c/P19PN0c7M\ny8rDysfJzM7Pzc3R09PR1d/n6+v3a2NfY1lVT09PU05NTk5VWV1fY2/v72/37+vj9+//5+f3\n92NvXWNXVVVdZ11jVVVXUU9LTktPT01NTE1GSktMU2fd0crGxL+8uru8vLq6vLq/vb7Ayc/O\n09vj7/9v7/9nXV9Xa05NTEdTV09OSlFRSE1IUUxZUU5NWV9TU1FXT1dVVU5bVU9OT1FRT09X\nW1lna/fn39XL08nKzc/Oz83NyMrHwMHCwMPEycrJy9XT0dPd3+/na19TSEhPSkhPW1VTWVtV\nTVFZXWNjd2/d3d3r2dXb6+fj/+/rd19bZ2NdW2NrZ/9jY1FZU0tPTE1TS1lVV1tTVWNjd2Pr\n9+fr99/j59/fzs3NzdPVztPj29XO19vMw8vKz8/LztXX387L1dfd2ePb3/d3a+dra2drWVVT\nT0pNSkVGSklFREtLTUZBSEdEQ0ZDSk9TTFNnY/9n49nj2dHTztHM1dXTzNPVzdXX1c3X1dHM\nysrGx8XHwL3Fxb6+xcbJzMfJ0d3Z2f9Za2tZWXdjTmtTOmNMODlTRDk+Pj46PUI+PkJFRz1T\n90VCVdldP1/LRES77zpZvU1O28XIX9W418a528y8ysrZvbzfQsex1zi8v29HwVnTzNfTxme5\ny0XBtlPvxf+972fMSP/FTUNNX1c3OUdbOFVGQFtOTks4b/83Rk9LU1fr2VfZwNX30dnL91/r\nVVfvS1Pj39HT0ca5vb7Dvb3Ezd/TzN/j2d/Z2e/v187d/2djUUpBQUFNVUpLWXdrX19XZ+v3\nd1NV919JWe/vUU/31VFb99VO78vRTd/r/03v3V0+2fdDSV/nZ9X/2z1Z3ddDOlu1zndR9+/M\nvcH/07C1xOfXzt1vX0BC2b2+y763tLy+zV1LUUU5MztDTl9nX+fMw8fb72v3Y1dMTW/371tv\nZ29rVT89RkRFRUlDQ01MQ0RTSz5NZ1lNd93jycTAwr/DyL21xMG/xdu6xO9nys7RxL5nT09n\nb1l33T1300lMSU5vT0hfa0ZT687V/3dOS2fZz9/Jwb7IxN1ZV1lTR0FXY11ra1NNTldnSlFV\nUU9Zb/drZ9tXTld3d+ffydnKwL7JxcjM6//f32/d093X18rO293r59fX329ZTldTRltZT0NJ\nV+fVzNlLR9HByNtbPTtO00lIUVdf78zNV0hdVztK12NBPzk4O9vCz+/Hxs7MyN0/RGdTSN/L\nx720r7G6uMDNd91nTk7n2dvIvcnOy87nX2tbSk9fZ//f1d////dTUU1ITk9XVU9VXVd3b1lV\nWV9OS2P372N3W0lOX1lvb2ddY+fv/+dnTFFRU1fvU05rzMLAy1tLV1n/02dn/0RL08zZWet3\nSu+5usXj905fv7rMa9vHyL67ushf/9tv68j3RU7XT07XXT06RPdCTvdKP2fr/2tV72dVxsLn\n59nL0c2+v+PZztvj49vvTFnda2fva19bW1lfZ1tr6//jW29fa2NLS13r911b99lnUV9MVdfn\nV0ZId3fT38dbLEu1tetTOCkvPbutuLPFUz1O0f8uKjEtQ8asrLK6uMvEvbpRNzQ6P3e8tsLf\n187O08bLXURMY83AtbW7xMbI2etjX0M9QU5dd+//Q0JHSEVLS01JT//3Z2PvXVVfb2v338//\nY2v3V1tdW09MX2NTW+vb6+PMzetZZ1tEXdnZ793Z1edf39dd08bX6/9ZUefNwb53SFFOTtPM\ny9VrW/fvxsLdU0xbXd3HyN9PW13v5+t3W0pXWWtZa2/v59/n62/31dv36+tbWWvv2/dj0ddj\nX83jd03f1d131XdKTnfR6+PV/1NEV/ffy8XZY/9bW1tj6/9TV3dbT1XIzGNHPj08P2PKy9fb\n/1NJTD88PD5Gd9fFvsLFwMXGycvnb1dbW//v7/9n7+vb29PV28rb1+Pf2dHOzcrP1dvX09/f\n73drW1dTWVdfU1NOUWPn3dvP31Vfxcv//9XrP013/1n/2/9M//dvSe/Hb01EZ2tX58PCyN9r\nSEtEPjo6PDs6P9/Czd/j19nV53d3WVlbU1Ff19nb3ePRy8jCzc3Oxsa/vry9vb2+zNvX619P\nSkY9PT5APkZHX1lr79nOzs7X3eN3629va3dZ3W/Z79/j9//n3c/dz9XT28/b0dfVd11OXU1M\nSU5CQEZVS0dPX0tTZ91379njWWdr72vv5+9ZU2P/a+/n5+vX0crMzs3X72v/W09RTkxGS1tr\nX3fb5+/V09fV2c/Z29nTz9fX529nW19TUVlfV0/r29PVxcfOyNHN08zDTMzN72/LZ2NFy2ND\nwkhbTUdMOWdZTlH3XWvN5+vT2dfr411fWVtba/f/d9vvX9/j4+fd1+f34+//6//n71tZX01T\nTVFRTFtbV1tRW1lf6/fr1dnV0czV29vX/3f3Z+f/529r92v///d3/+fv5+/r7+fd5+/v32P3\na+f/7+P35+Pf3+Pd52/v393Zzs7Xz9fNytHP0dVr5/dTU0Tf0z9OXz88PmtVTmPXU0t3129f\na2NHR0hdT0NTzFFd2dPGPm/GX+vbyt9L69NbT+vrW/fNytHTzcfKzr/Dzc3T29n379drV1dd\nUUxRU0tESk1PVXfr7+fZ19XP08nN1c/Z4//v52t329/j99vv//ff7+vf1+fn7293X2f/W09n\nWWNfXWddWWNfVVtTU11TW1dXX1ln/2vn4+vZ1dnO1czPys/M19Pv7/9fV11fZ2dr/2//Y3dn\nY29jV11dY1dnW2NfZ19bV1dVT09MVVFNW1tjZ293a+/n7+/b2d3f39HX19fX19vf0+/n3dXV\n2c3PzsfNyMnHxcTIyMfIyc/R09XZ3dvn5+/r92dnWVtdV1VXUUtKS0VFRURES0pJTEtLS01J\nT0tOTlVRV1NXT09OWVVXXWN3b/fr2dfZ2dnT59Xf2+fX9+Pf49/T5+Pd39vV19vT3dXV18/O\n0c7R1dXO183/3dHZ3+vf73fr3+v/73f3Y3drY2NnX2ddWWNbd1tra2djXVlbWVtZW11jb/f/\n72//d+vr/+9vd2v3X/9n52fv6+vv53dvd29v7/ffY/9v/2dv71/37/fv73fr/13d/3f34//v\n//drX1t3WVlvX1dbXV1bXWtnZ2dja/9fb3dn9+t3a3f/b+vv59vd39vb3+vja2Pd/2d3//9r\n2+P/387r1dnP0dPZ2dXf793X59nP987Ta83Oz9fr6+9n62NfXV9VV1tOTlNVTE5OSllRWU1n\nZ2tr3+9399/v5/fn59Pb3+Pv2+Prd+fv3/9j91lfW1NXX1FfV1lfWVtZU/9dW+db2e/329fZ\n3dPT19Pf0dvR19/T3///d9v///9Z93dra2tdU19RV01ZT1VXV2dra1tnd/9369/n2efn1dnV\n19nj793jd9Vnb+fj6//fa2//7+d33Xd34/d3Z+9r3d/V0dXr39Xf3dtv69/jX2vn5133d2f/\nb/drd2dnX2NPW1lZV1NnU09RU0xPVU1VXU1XXU5VXU9rWVnv5+Nd3d/n/9Xf593v79l33ePb\n3dPTz9PT1dHZ1c/P78/b4/fn711nW11r/1tv62//Wevva93rd+/P29/b39vb39XZ19XT59vn\na3dvW05bV1lRS0pKRklFTk1NTFn/d/drXdNrXefV79nR28rL18hnx9XvxUc/vfdBv8A8wtc9\nU8xdRtXRwi+7PWu7OMa1QUq5zji2OErXYzmwPzy2ON9b50xT389VSsRL42/fSknr71lGVb5K\n33fr69nn1VvZydfn28fPytnT293Ozevn2+Pd/1FTUf9vTVNv/+/dV+PZ0ddVVWfKZ2tv78pb\nQFVrd1VCP87May9bvsLTd0hRzs3/RE3IwNtfb//T109N29lVRNPG5zs4Pm/ZwcjIv7a9WT4+\nPzc8Oz1MvrO0vrmvtMlVRD45Ojs+W7/Da01TSzo1O0z/0c7Iure2v9fVuMvOxc9d50vLU9HR\na0DNSVdOvtlL57XBLi+urccpJkE+wsnO262tyTYsNSwkJSguR6+tt7utrcTnTD03SNnvTr+2\nvetbV05Z289v78W7wsXCv7m3vstfR0xGPkBfd/drb1NBR009SE7vY1PVwXc/Nz333z5frqzL\nRcm760pXut/Iuss9tKywMy9Hb++709m+t8kvJy06Kio9Q125rLxN2bbMR0tdX9O+utXRu7nv\nU9vVb8jCwd/Mvr/Z59HfX0pBOC4zNzo6Pj9FSD8+Nzk6Pzpd38nbz7y821XLra62zF27rq2+\nW9m2wL6/viv3razDLSlbTsvTzWe0rro0LC01LjEwMTu6rblJT7/E1VtZRG+8uNVT37/FV09f\n787AzdXdxclvRUZNS2fv91tdV0g6NzU3Njg7REpNU2NnY03rxsnGwcK9w7+/vlnZtK2vss1j\nObyvrVE4vK13NEe6xc/J2Tk5RVNATOs8KzdLPjVbxl9DT189NU/XSkvOtLu+t7TAvb6818/E\nv+PXzsT/U05LRFNv/0tNY2dRVUtBO0zrazs6P1FVb0k+SGtZPj/PyNl3y8VrWcC5ubG3wFdb\nyLe5ub7ZO0fMr733T10+NzzZydvRbysszq9nLCYuPe+2t+9jv8Y3LjVIP07O02vCra/Jzr/d\n3cu9zc69u91RUVE/SltbPUprd11rW1lVb1tXT3fO01c+TU5nT+PrzMrH0/9f/9fR31/TybjB\nPzhrr7PBRT7rt7LROUHJvj41O++2rsk0JyxTz99ES+/D11szOE1rZ1lPd8XJU0NASufOzm9b\n2bq4w8fGxsnK51VR48HIWVFMUVNJRklP6+9b9+vfy8zPzdvX2cvN6+v/Z3fnW9nrzONdSlFZ\nxMZbO0zP20NLZ105O85rPUDDTVtR2etX2bo117PBLzBbrsvBwsVVybe7Qk53d0VVV0ZA09dn\nPVHba13/UUI+VeNXRk9fVVlv42/v18rT0869wMPJzdXOwsHZ09HXZ2vv419bY0pHU1lDS0xf\nb1/v70Zj38nM68zAz8Nra8PHsrlny9fH01XIvlFvS9/jzclJLTnVzGc2Liw5a9dPMjtNPTlD\nzkZRXVE2PFvM/9u+vb28usjb073H083L08jCvsvZ1dFfTU5PW1dTW1NAXVlvT0prX2fPWVdf\nzbrBd9vPz81RRFnbvLXdU1XV5+NPWV/V72M4S9/nVV1X2T9Fw81TWXfDvk5jxcd3vlVMSsy5\nzOvn2V/jW+/dw+vdRUtvb0rb183jWUpFOz1nUWtVRktVT3d3WV1TV8vNa/9n3+dfTk1K/2v/\n12tnyt1Tb1nvvsjO1+/Z690/48fB1XdEUWNXv80+z9tvxFHj2e+7wz5ITOu4wf9dW8+497vR\n/3dd/8F3vb1XzcxXd8e/yD9ARj9K93dnTmdPOjg+ODs4OUBGXc7ZY2d3ysTBys/Pz9HPzcnJ\nycbI59/Mb9Nba+9jW+/Z33f/XU5ZREhTS0VGP05KRFFEO1NnWV3fzN3DvMtJWb++29Oyw0NZ\nycK2vudLTve1XUHOucTnQUNTXcO6w8fE31FDOz4+Ql9X99vd599339njyctRVWNnXUVGU0hN\nX0tETnfbV05VW+PVz9vvz8HRWWf/73dM/+tPWeNbQU1nd3dfUevra8e93U7vxL/rRNe5w9fK\n//e9xeNnV13Hzl/LPjbTt2tFOjpn42PJ20zV401GPUxXU09KXW/Nv87Pyb/Gy9tn0cLI02f3\n193v6+93a9fT///3d9HT493b39nvVU9nb1tNRkBGWUpDPUdPTENHRkpHX2dVTOPZUVm7ylXV\nsdtv97fnz765d//Tz2/P/2//xdlORszF6z/bZz4+T0k/P01LRkNKS1Nfa11399Pd2dfT2c7N\n0dPdy8rGxcrMysvMzs7O0cbJ3d/r09/f3/f3b+tjX2djZ29rX1NdZ2tvXW9379nvX13r61tZ\nU11RVUxHSUtOSExFSElLTEBKSl9bW2tvY/f/4+9d53fj3evf39fR09vTzM3R09/d1cvd1c3X\n1cvZ49vT4+fn49Xj3efR3e/d2ffvd2Pn//fvb29v/11jU1VVV1NdUWv//1n/a+tn/2tf5+PZ\n5/ff5/9v9/9dXXddY29rY/93X2vv/2tna/djY1tn63f/d9v/b+9n72//X/fr4//v73fj//f/\n/2vn/+Nf42/d/+P35+ff//93Y+93/2df7//dWV1n6/9rXVvrd+t3593j73fvY2v/X1dv/1VV\nX+9jZ/9vb//rb29v2+vf2c/r3c73593j79XVXefA7+PDyt/E41vAdz/b02dT019I22NFztdn\na11r92dPX/dN611T/1fnY2NM10/vTUDBOk9fRlPTPl3nOsrFP1Hda+P3791Jz8FdXd/Kz9X/\n/9PD/1v32ePr9+/TzdHV69nM2ffVy9P/09fb1///3+/j/19j1+9MTdnnVdvjW0ffX01R3dFN\nV29JTstRS+vIdzpV0T9Pd91TVcm+S0q9xks+WbzJVUndz9NfSMC9w3fr0c9ROj5J7z09RM/T\nXVvby9vI1VFr2fdHVWPvSVvRXU1d2c1v49XN68vI5+fFv9/VxcXT0c/M513Tb19b929RTmNK\nQFNGTVlRU05F62tNUWN3XWvbSVPOU09T2c1jS2PXy0fKu79fSsy/d//V0azRSGe8wWNDz8HP\ny1nZzdNdR2e/S1Pf70tfV09Cb11BSO9dQERvRj5TTk5KTF9LT13v29/v1ev3VVf3b2/j529Z\nz2P3z8pX78TVWdu+3+vf0cDM/92+zv9Pz9HnU8nL61vXx+fdQkvfW0FI3czZ3/fvY11da09n\nRXfP30df/9lR4+9vX+//SVljW0//a1Pfxe/vzNHG0dHfzdfb2c/37+N342tv/+NXVetjV1FT\nW01GUUljX1lT7/dvTevX21tdzc7j683N09fP1+Pf905bT1lIU//3Tl/Vz01v0e/3VVvIzEhb\n93dTXedrWbzTTNvB30j3w8Rnv8fZ1clrb9vG/0nGykpDa0hBT04+X/9NRlfvb2tV62ddSEl3\nY0tj3dfV1dHbyt/r09PPxN/XyL/L2cu+71PO0eNbz8znd9dd3ddfW+fdV1FfVUZjVUtO/08/\nVe9HT11VW9XvV2fMxetHUd/VQj9b3UxIR1XTd1Vb49f/Rf/P41Vj2d/jXffP0ev35+t3d1tj\nz+v/28rK49nTa8C/7/e/ws7Gxt3Jxl1jxM9V38xVb+9PTOtPR0ljU09XWU5nY0lf711T93dV\nXV1OXVljWWPb/2fn2dXn68zN3dvb/+ffZ2vn52tf72tRW3dbW11Vd2tOW/dTWXd3W+Pv7+vP\n9+Pj53fj419n4+N3Z+/j9/fr6//nb1vv6+Nv79/TZ//j7//n6+v3z+P/59nrb9fr79/f4+/d\n4+vf2+vv5+tnZ3dvZ2tnX19nZ133XVlTVVldZ2NnW113/2tv72f37+d349nn3d/V09vb3/fr\na2Nra1lZa19nX19TU19PT1VLTVVbUVFVWVtZX1dvd3dr3d3V08jPzdnP2dfR19fT09fb2czX\n3czX2c3d39nf7/fj5+/d2+t333dvY1NXU11PV19bVVNrV2tbWVlvX3dd6//v63fv9/9f71/f\na+//3eP/92fd399v79nv9+vra2//a19TY09ZV1ddT1FOVVdZX1/vXf9fb/dv2f/d09nf09fX\n3dfZ1+PR09PR09ff3dPj1evb19v36+/v4+fZ3e/va/9jZ1VbWVVPW1lXWV1bZ2NfX1VbS1lN\nU0lJWVVNXXdfb3f3991r2e/P1dfX2dPj29PV09vT3dPbz9/Kz8/dzs7f1+fj3+PrZ3fj7/93\nZ1tjUV9LVVVPUU1KS01LTUhNVUxTUVlTW2dZd2tvZ2Nf7+dv39vjz83O0cjNztXI2czTx9PK\nytPL1dHbzc/T19fn7/93X2djX19XV1VbT1FXVU1NTldRTFFOU1VZY1NXb2NrW2Nbb2vr/3fn\nZ///7/fj59/b4+fr6+fr5//P29XN1cvjz9vZ2+/P2d3d29XR39n/7+vn72P3b29db19RZ2NP\nY19dX1VdZ1lZVWtfd1lbY3fvd+93X/f3Y/9v//9vWd3dd//jb2trXVtfV11fY1n/WU1vWV1b\nd2fv493j1dvR1czdzs7PzM7HzMnb3ePv39X/z9nf29/33efjd2fnZ2tfd19fV3drd1dna2dP\nVV1dV1lZZ2NrX/9dTedV/2dX51lnX2f3Z+P30/fn9+9f591rb2PvVV33a/9r7+/ra3ffb+f/\nd+P/79nr3czVd83Ry+vT2+Pd39fv5+vn2ff/429n999f/193Z+/rb/dvb+939/9RWV13TEtr\nU05NU1NXTENTWU1MSUxdd1NZ9/fr/93V19PN08zP2c3j18/X48jN3czZ0dnR1Xfr7//n5+v3\n62vr53ff4+vj3+dv91lrZ/9nW2trZ0pdTldRd11ZTlNnUWtbZ11nW+//W1dZU/9P93fv33fr\n42tf2evPb+fv5+dn42ff39vnzdfj/3e6Vb1r39XZ1dPnzWPHa+dj2ePfSe9Na1v/THdZY2P/\n411rY2dPVevvZ+v/b0vV30TTY3f3/2fbV+Pnd2/rV9FdY1t3Tk93X05b61dnd//nb9/O1dPJ\nysLJycfL383F1dfP1+Pb59X/0//j51vZZ2tjX11ZX1dMU0NJRkdbTVdKd2NjVVFOSVdTY01r\nZ0/jY+Pv0+vfyevf79XfVclv41X/W0/vVe/va+fj02vvzkrNy1vf58tR1cJvzcrv38zNzMzK\n0b/b6//Xb/fE3cX/08pJwP/b51lbTe87Ttc5/0NExi652y+0Lsn3N8tLVzi9PTXEP2/nQ11b\nW81Ld8VB18w2x0TA2U9r0dXT9/fbxE7f72PFWc1Jz8vT79nD3cDDZ8S668P/XbvGTcPdv13/\nx9Pnx+tXy2vRTzr31ztM7z5vWUdTQ0zbPDjOU0HrTlNNz1VdTffvWW9N7+P/R2fd2U/OTV3Z\nW0dL31FH68tZ0d/P2cr30f/M/2PGy8rC48i7ycBfu71jy9tjumvXzP/Ld1fZW1XdS0/nUU9X\nX01bQ9FTPf9Fb1tCb0lX2T1X0VHbV0jnU81KP75RY8rrZ8LZ7/dZwWtOv/drxv9bu0y5wky6\nTffXPtnf/+PMUW/Z//dCWVnfW1NDUc9v4+dVv9dVZ1Vv2UZN6+/VU2Nf/+t3S1dv72dGXcx3\na//j2//3Z3fjzlNO61Pb70xr41ffb0/ba2vfd+PK1c3CztnX19nX0cbRz8fVxcPbydfZ083j\n3c/jW1vf49/P1ePf1+d372dbS01LSj9MSEVHSkRKTERESEpDXUFLTUlHRk9ZVU1nRU9bVWNb\n3/fv2ev349v/0+dr49PTys/RzsvXzdvJx9nH2cjLzc/Rx8vKycvIzMXOyMPIxcjPzdHb2evX\n02/jZ3f3VWNrWWtdSE5LS0tCR0dESUpISEhHSUBIRkhJRElMSkpNSFFRTE5KVVFRU2Nv2e/v\nzdvO1cnLxcfAxMPCw8jEyNXG2c7ZztvVzdXT0dHPz9PZ19Hj09fb3dnf3+//d29TTldOSkVF\nQ0dHR0hCSkhMS0lVTUtOSU1OWUxfU2v3V//Z29HZysnIycHIvb2+v77FwMXJz9PX6/dbb1tX\nWVtVV2dnUWtfWfddXWf/6+dn7+fv5+9n32tnWVNZVU9NT09OT0dZTWtZU1tTXVVRWVNTV1FV\nXV9jWVl3b///b2d3a+vb2cnXzsvOzMzKzcvFzsXDysTHw8rKxMzK0dHT39Xd59vr3+P32+Pn\n32fdb9/r69vv79/v493v7+9db1tjVU5XS0tKSkVJRUQ/QD89QTw/PDs9OzxAPD5BQ0RLS1FR\nW2dd79nVyMPCv7y+vby7vLq9ury4vb25vb7AxL/DyM7MytXZ2+vj/1tvV11ZWWNdb29TW09f\nSltNTFtjVVNTSlFKRExISkhNSE5JS0xLS05MV1NfV2tfX1VbZ2v3/+fV39Prys/d09Xf39HV\n3d3KycjT183f0+fj29fT3ePR4+Pj29/P59vv3+/r59vr1d9r9+//d99Zd1dRVU5dTndnd2Pr\nZ+tjY1lTU01rUU5ORktPRUpNS1lPU1lMb1lbVV1vU2tv72fn2evZ0dPNzcnPzcnKxca/xMC+\nvr6/xca/wczIzM7P3dPf/29v92dna1VMU05DSFFRQUtBQT8+PEJAP0E/QURGSUlNU1VdZ1ld\n99939+PPd9Pd3/fP38/b1dvXzsvPzNfP48vj1czZxcfIy9PAxcbKxs3Rz8jH2dXT49tf/+db\nd3dnY13rTWtRWVlDW09MTUhJQUJIS0ZJSU1ISEtKT1tPXUxfTVdXXV33Y2v33f/X2+v/39t3\nzd/X3eff1d3Z3dPv6+fv3dvZ18jHy8LIx8jHw8jFxsfNzuPf23fZ3fdr/+9fWVdVU0pRS0hP\nR0pBS0tEVUtTT1lITE5RT2NTX29nb+v32efTz9HIysvRxsjLzcvJys7Mz9XT1dfd3dnj28/d\n3e/f9+tbXVVTW0hPREtIRlFHT0xPSklJQ05GSVFPTl1RW1tfV+tvU3dv1eNr99/r19nZ0dXb\nys7VzMnKysrMzcvR09nX0+Pd1c/T0dvj593Rb+PZ6+fj5//rW2/vZ/9jZ2tjb2Nj73d3a2tr\nd2dbb3dnWWdV73dbd1FrUVlMWU9fVV1dW1n/Z/9fa19VWWtbb19V19dd4//XzG/j60fE29nJ\nVdXDVczZVdvF/93bW9tOY9dPb2dJV1FOX0RX/29rXW/v5/f3593Z0//XzufRztPnY89n5+tr\n3e9v3+Nvd1vfb2/dY2Pf3e9rW3dvWetrVWdvY13rZ2tr2Xfb4+/V791j7/fv3f/rd/fnd9nr\na+td//9Vb1dn429fZ3fra3dnd/djW1XrW/93X293Wffjd2PnVXdnd1f/a11j92ffXXf3791v\n5//n32P3a+Nj01fO/93P99fb2+fT2d3n7//d5+fr5+Pf3czZ2dPT19HN3dnX6+v/a//3Y3db\nV2ddXWtXd2drb1lRWU5bYz9IW1VXd0j/W1VvVVvbTmtOY1F3WU5XW19vV11fV19bV/9rb9vX\n69Pd29fV39HZzs7NzcrM1dfG29PM29PZ38jT68fN38hZ68lN01HRT2vnWdVX91NZZ1N3b1tv\nT2NMX1H/UVVbX2tVZ2NPVVdjWV1OWVVjT1VZWV9Zd2Nf7/dv49lrzslnv9fFv9nr38nvyt3f\nzmfOXd1d//fX4113V3dZ91f/71ljV1dXZ3drY19nV09XW19ZY1tVWW9bWWNnY29j42vj1+vj\nzMrOzGfna8JVvlfZ3+93601vd//Td29jd1FdX+/352Pr//fv7+/Z2f/j6+/v/2v/b3dVWe9f\na2NjX3dvX+N3d9vZY9XXWcdZxshT3WN31ddEyU9O7/9ZX0RZXWt3V1tPVU9bTmtdY3dba3dr\n79nf29/d5+P/a2dr62fr53ff6+vr3d33z9nR19Pb2c7bz83P593v2d932/9vY03n12dN70jv\n//9O70ffRtlX/01bZ05ZX2NJX0pOX2NVXVdTZ2Nv72P35+fr1dvZ2dPR08vR19PM49XT59//\n4+vnb+vn/+fv52/ZW+Pvb/d3a11na+9nb+dnZ+//a29rX2NZa1tZY2Nfb2f/a2/vX2v/91//\n//f/4+Pr6+/v4+fj7+vdd/9vb29rd2/3d3dX3dnvX19P49n/0WNr32dv/1nv3etvb/fr29vX\n49/d1+/v3efj92tvZ3dvb3d39/fv5+/r7//j6/9db2NRZ09nXV9ZV11rWVljb193Z2tfb2Nv\na2tnX2N3Z+vj79/r3d/Z1c/R087bzdvZ2+Pr28/d3d3v7/f/92Nra1tXXWtXWV1ZZ3dfZ29r\nY2dbW///929rb2/rd1trb29X/1ddXVnvX29j71/ra+fn/2933+9v29HT30+/zdfZ3d/Lzr/f\n0c5ra9nV1+Pj3Q==\n\n--Outermost_Trek--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.1.msg",
    "content": "Return-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA01648> for nsb; Fri, 29 Nov 91 07:13:33 EST\nReceived: from joyce.cs.su.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA11898> for nsb@greenbush; Fri, 29 Nov 91 07:11:57 EST\nMessage-Id: <9111291211.AA11898@thumper.bellcore.com>\nDate: Fri, 29 Nov 91 07:13:33 EST\nFrom: Bob Kummerfeld <bob@cs.su.oz.au>\nTo: nsb@thumper.bellcore.com\nSubject:  just testing...\nMIME-Version: 1.0\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\n\n//38/v3/fn/+f/3+//1//v3//f39/3///31+fnx8fXt+fn19e3x9fX39/P77/Pv8/f5+fHx8\neHt6eXp6e3t8fv36/Pr59/f59/v8/n3/fv99//3//n9/fn9+fX59/v39+/78/Pv9/v59/X3+\n/X/9fnx8fXx8/n79/f79/f37/P37/v79fn58fXp5e3l4d3l5e318fn/9+/z6/Pv8/v7+f35+\nfHx9fH1+fX59en17fH98f399/359fn3//v78/P38/v7+//z8/fv7/v3//v7//n9+f359fX1+\n//79+fz8/P78/f79/f79/n/+fX1+fv5+fn5//n7/fX19fn59fn1+fn7/fv/+/3//fH1/fH//\nfX58f/9+/n5+f/3///99/35+fn19fX18fn///vz+/vx+/P///n7+f/1/fv3+//37+vn7+/z/\n/f9+/31/fn5+fH1+fXx+fn/8/vv9/fv8+fv6f/7+/n58fXx+ff//fv3//3///35+fX19fHt6\nfH5//31+fP7/f/3/f3///n59/v5+/f58/37//n9+fn7//37/fX59ff18fXx7/31+f/9+/v9/\n/f/+/fv8/Pj49vf6+v7+/v3/fX96fH17fn1/f/79//7///7/f/7///7+/X7+/f76/fv+/fr8\n/f79//77/f38/v3/fXx7e3l6e3p8fH58/f3//X9+//78/fz7f/5+fH16fX16e3l5enp7/v78\n+f36/fz9/f5+fnt7e3x7fX5+/3/9f3//e359fv98fn18fHx+//3+/P7+/P78/P39/P7+/n79\nfv/8/v3+/f79/Pz8/v5+//97fXh7end5ent9/37//37+//v8f/1+/f/+//78/fz/f319fHx9\nfH17e3x5fXp8/P/8+//9/P77/v//fv39/v/+/f37+/r7+vz9+/7+/35/eXl7d3l5enl8e37/\n/vz+/P3+/v79//19ff5+/n/9/n9+fX56fn3//P5/fnx9fHp7fXt7fnx9//3+/Pz++/38/vz8\n+/n7+f37/P78fH96e3x7fH19fn7++/v7+vv6/P38f35/fX5+fX/+fX5/fn5+/n5+fn19fv59\n/3x8f31+fX1+fn7/f3//fX5+ff99fH18fv3+/fr6+Pj7+P39/P79fnx8e3l5enp8fv/8+/n7\n+vz7+/v8/P1/f319/n///v3++/z7/P/+/v/+f359enp6enp7fHx9/n59/X///v7+/fv+//7+\n/v79/v5+fHx7e3p+fHp9e3x9e//9/vz9/fz8/f1///1+/f7+/v/8/f37/f37/Pz9//5/f397\nfHx6ent5ent6fXt9fn7+/n9//v/8+/v9/fz8/39+fHp+fX3/fH19fX19fnx+f/3//f3++/3+\n/35+fXt7fHl7e3z+fvz9/v7//X///f39/Pz8/fr7+/v7/P7//n18fnx//31//v7+/Pv6+/v8\nfv9+fX96fX57fHx6e358/37//f79/f9+/319/319fv///vz//v7+fn5/fX5+fn18fXx8ent5\ne3x7/39//v79/fv6+/n5+vj5+/v4/Pv9/fv//318e317e3t6fHv+f379/fr8+/n7+/37+vz7\n/358/317fX9+fn9+f37//n7+f37/fn9/fn18fnx9fHx+fn59fP//fH//ff9+/f/+/P39/P3/\nfXx8e3t8e3t7e/7//f7+/fz9+vz9/f3///7+/v/7/f39/////v9+f359f37+/v9//v7+/Pz+\n/f7+///9/vv8f/////7+/v5+/v3+/n5+fXt8e3t7eHl7ent6e359+vz7+/v5/Pz9/35+fX17\ne3x6e318ff///fv8/f7+f37/fnt9fHt9enp8fX///3///f37/fv9/Pr8+vr5/fv7//x//n99\nfnt9fXx8fX17/35+/v/+/fz+/P39+/z7/fr9/f/+/v7+/v7//n59fnt7fHp9fn7+fX59e318\nen5/fH58fH1+fn7/f/39/f7+/X/9/399fH59fn58fH59fv3//vz8/P39/P79/n9+/37/fv7/\nfP///P38/f77/P3+/v39/P7+/3z//399fH58fX16fXx9f39+/37++3/9/n//fH59fHt7fHt9\ne37+//z8+vr7+vv5/Pv8/f3/fnx8e3t8f39//X5////9f/z9/fr8/f1/f/59fX18fXx+f31/\n/n7+/f/+fn7+fX58fX1+/n1+fH1+fH99/399f3x8/f///f9//f79/fz9/Pz8+fz7/Pv5/f5/\nfH19fXx7e3x+fn17fH19fn7/fn/+fv39/f39/P//fn59ff98fX19fH5/e397fP1+/v5+fvz+\n/P37+f37/Pz7/v///37+/33+fX19fX9+/f39/fv7+/v9/f3/fX19e3p7e3t8fHx+fv9//v7/\n/P38/fz7/vz/fn17fHp8fHt8e3x9fHt+/v78/Pz8+/v4+/z8fv39/v7+//39/v37/fz/fv5+\nf3t9fHt9fX58fX59fX1/fX7+fv7+/n//fn1/f35+f/9/fn5///3/f/98f33/fnt8fXx9//9+\n//38/fv8/fz++/z//f3//v5+//7//v//fX7+fv39/f38+/z7/358fnx6fXt9e31+fP7/fv/9\n/n7/f/7//v7//f/+/318e316enl8fX36/Pj5/Pv6+/36/fz//358fnp7fH5+f39//n/7/Pz7\n/Pn4+vv7/X9/f358e3x8fHt6e3x8fX1+fv9+/v7+/v//f/99/X59fn1/fX5+fnx8fn19/v37\n/fv9/f3//X7/fn9+fv5+fn/+//36/vz//P39/37/fP7/f/7++/z6/fz8f///fn19fH19f35+\nfnv///39f///f31/fHt7e3x/fn9+f/5+/v7//n7///39/v7+f31+e3t+e3x8fXz//v37/vz+\n//1+fXx9fXt8e319ff5//f3+/Pz8/P38+//7/f79/v39/n/9/v//ff59fv7//f/+/f39//7/\n/v38fv9///z9fv99/358fv///fr//v9+fnx9fXt8ent6fHt8fv/9/v79/v/+fn9/fX5+fn/9\n//1//v58/358fXx6fHt9fn3///39/f3+/v7+/39//37+/v38/v3+/f38+/r9/Pv++/97fHt4\nenp9fH5+fv98/////v3+//9+/v59f359/399/n9+/n5/fH18fH19/n/+/v/+//77+/n8+/v+\n/n5/fHx7en58fP3//fj7+vn8+vz9/P5+f/5+fn5+f3/+fn/+f/z8/fv+/vr+/v5+//9+/X58\nfv99fv99/33/fn3+//7/f/59fn1+fH5+e/19ev98fv99f399/3///H//f/38//99fXx8fHx9\nfv1/f/79+fz6+fr7+/39/////n58/319fHx7e3z+/v77//v7+/r6+fv4+vr8/35+fn19fHx7\nfP99fn1+/f39+/z7+vj4+vx+f3x8e3p6eXp4e3x+f/39/fz9/vz8/v5+/318fnx8e3x9fX58\nfH19fHx8/379/vz8/Pr6+vz8/P/8/P3//n19fn7/fv79/Pr9/P38/n9/fn57e3x6fHp7fXx9\nfX9/f/38+/v9/P1+f399fX19fHx+fH19fH5+fv9///99ff9+/39+/31+/f7+/f7+/359fn17\nfXx+/fz7+vn5+vn6+Pv9/P1+fH58fHx7fHt8e3t7///9+/36/Pj6/Pz7+vv6/H7/f37+////\n/35+fX1/fv39/v38/v7+f37+fn7/fn19/35//n59ff9+/n5+/n//fv98fH59fn19fn59fn//\nfH1/fv5+fn7/fn7/f3/+/f5/fn17fXt9fH1+f/3//P38+vv6/P3+fv3//v3+//9+fn99/35+\n/n/+/v7++vv8+P38/f3/enp5e3p8fXx/fv79fv3+/v79f35+fX5+/v//f/9+ff99//9+f31/\n/X3/fHx+fn17fnx9fX//f/99f/5+/v38+fn7+Pr8/P39/vz9//z/fv59fn5+fv99fv//fv7+\n//3+/f39/f3//v3+/Pr//f79/n//fHx5e3l5eXp7en9+fv7+/f39/fz+/397fn97/n59f39/\nf358f39+/f7//359/3x8fX19fX99fv5+//7/f/9+/v99fX1+/nx9fXt/fn7+/v79/fz9//5/\n/fz+/Pv8/Px//v7+/f/+/f//fv/+f379/f/9/n7+//3+fv9+f359fH58fH59/X7+/f7///1+\n/v///n9/fv99f39//X1+fX18en97fHx6e3t+fv99fv///P3+/f7//n99fHt8fH39/fn6+vn7\n+/z+//38//99fHx8fXt9fH1+fv59/vz9+/v5+vv7+/39/37/fn7/ff///f38+/r5+vz+//5+\nfXx7enh5eXd6fHl9fn1/fv38/Pv7+/n4+vj6//59fnt5e3d6eXh5e3p+/v38/vz9/f7//39+\nfXx9fX59fn59/39+/v9//359/317fn1//Pz9/v79/f36//38/v3/fH5+fP/+/v78/f79/v3+\n+/z8+f18fn16enl7e318fn9//39+fX58fX99//5+/P/7/Pz6/v97fnp6fHp9eH1+fP/+/P76\n+/38/fz6+//9/37+f35+fn7+///8f/38/fv9+/7//n5+fX58fv59fn7//3//fX9//n99fHx+\nfv9//f5//n58ff7//398fHt7e3x+//79+/r5+fr7/n99eHl3dnZ3e3p8/v3+/Pv6+fr8/P7/\n/f59fnx+f35+fv9//fz8/Pv8/fz/fn58fX19/37///z9+/n5+Pv7/P5+e3x6e3t6fHx+fX9/\nfX//fn7+/31+f39+/vz9/fz8/v99fX18ent6d3t9fH59fn/+/Pz8/v39/f19/3x9fXt9fX5/\n/v////7+/35/fv9+fn98e3x9fX97f/97///////9+/r7+/z9+/38//78/Pz9/f/9/f5/fv5/\nfHx8e3x8ff5//P7++/38/P3+/v78+//+/v76/fz6/f3+/n5+fv5+fX17enp4eXd6enp7fH//\n/P3//vz7+vv8/P/9/31/fv9+/357fnx6e3x+fH99fX7//f79/v//f31/f3x+fX1/fX99f37+\n////fn7//n9+fn7/f398fXz9/f79/v7+/v9/fn////7+f/1+//1+/f5//f38/vz9//z//n79\n/n/8/v3+/f39/n7/fH19e359fX1+fn/+/vz/f39+fH19fH1+f39//X3/f35+/317fXx+fHt+\n//79+vr9/Pr6+vf7/fz/f319fXt9enl7fnx+/v/7+/n5+vf6+fv7+//+fn97e////X7+/Pz8\n+/7//n//fX19en17ent7fH1+fX////3//v5//f1//n9+fv5//n99fn///358fnx+/n58e3x8\nfX5/f35//3/+f/79/Pv9/P38+/v8/Pz9/Pz+/n9/fv7///9+fn1+fn3/fv7+fv7+/v3//vz/\n/vz8//v7+/v//v7+/n1+fHt7enl4eXt8fn5///z9/f3+/H1+f35+/399fn18/X7//n7/f37/\nf31/fn//fn19fHx+fn58fH18fn99f//9/Pz7/fz8/v5+fH1+ff9+fP95e3t4eHl3e35+/vz9\n/Pr4+fj3+Pr8/P7+/n7//v5//n59fn1+fn58fP7+/fz9/vz9/fv+/vz+/n/8/n/+fn5/f37/\n//36/vv7/fj7/fz+fv/+e314eXt7e3p7eXx9fv99f37//v38/f1+/f39/v3+//7+/n59f37+\nfXx9fXx7fHl6e3r+fH5+fX99f////f3+/v///v7+//7+/v1/fnt6enl7fH59en39/v7+//36\n/fz8/fr9/P7//n/+//7///7+/P78/v79/vz/f319/v///v5//v1+/v/9///9fv/9/X79+//8\n/P39/f7//v19/358fXx5enp7e3p7e3p+f//9/Pz9/Pz7//1+/31+fnz+f37//n58/31+fn18\ne3x9fX19fH58//7//v7+fv/+/v99//5+/f9+/n9/fnx7fHx8fn19ff/9/v79/P78/Pz7/Pv9\n/P39/n//fH1+fv9+fv9+/v38+/z6+/v7+/3/f31+e3t6ent7eXt9fP///f7//vz7/Pr9/P79\n/X1/fHx7e3t5fHx7fX18fn5+fv3//f3//v5/fX1//n7//n79+3t+fXT99Xt5/P9+fHt9enx+\n/n3+f/z9/fv7+fv9+/37/f/9f/5/+/7//X79f35/fnt+fnv+//79+/z++v7//v/+//x+/v9+\n/Xx+fn1/fX99f//+/f79/v3/fXt5ent6fnx6fH18//7+/35+//7//P9+/f///P3+/f1/f/5/\nfn58ent6e3l4enl6fH7++/z7+vz8+vr8+f38+/78/P7+/n//f///fv///f1+/f5+/n9+fnp7\ne3p6fH18f39+fX5+f/z//fr7/P77/f39//58fXt5e3d5eHp6e////f78/v/9/3/+fv///39/\nfHx8e319fX19/v///v39/P7//nt9fHx+/3///35+fX1/f/3++f3/+fr2+/v//Pp/+317/X5+\nf31+/X7//X1+fn/+/vv9/Pn7+/v8/f59f/5//3x/fnx+fnp/fnr/fXt/fnx9fX1/fn5+f///\n//5//v///n3+fX/8/Pz9/3//f318fHp6fHt8e3t+e339/vz9/v76+vz7/vz9+vv+/f19fvz/\n//9+/39/+/39/P79f/9/fH5/fH9/f/38+vz6/v3+e399fn58fn7/fv9+fn59f////n79f///\nfn18f3x8e3t//n7/f319fv7+/v59/v///37+/v39/H17/nx+fnl9enx7enx9/339/v/9/vv8\n/Pz9+/z+/f1//H79+/78/fz+/P3/fXp9enl8eHx9ff9+/P9+/P7/+/v++/5+fXt8fHx9/35+\nfX39ff9+fH7/f318e31+fX3//v38/P3+/fr9+fr++X79+/39/v///n/7/H78fv9/e/99fv5+\n//7//f7++vz9/Pz//35+fHt7ff99//z9+/n+/Pz+/f5+fHp6e3l5enl7eHx+fv3++//+/P39\n/P7//v7//3z/e319e357fH59fn7+fX58fv98/33///z8fP1+/39+f3t8e3x8f/1//f79+fz7\n+fz7/Pz8//99fX59fH1+fnz9e3z+ff38+/v9+vv8/fv7/vz9fnx+fH3/e/9+fHx/fn7/fvx/\nfv5+f/58/n98fv1+fnx9fH1+e359fv39/f78//3+//18fX17f3t9fXzz5e167379bXF3a3Nu\ncm1xdfJ3fel76f3x8Xz2eH79/3r+fn75+PP89PP+fnx7dHF5dnB/eXv8/fj49PX38/j6+vn7\nfvl//fz++Xz3/nj/e3t5fHX+e/77ff5++H78/v19fPh/+X79+vn6/fn57/du9XR8fHr2cfB0\nfXl9/Xb2b/1zeX1x+nL7ePr/e/Ny7HPx/njubOxs73r7/Hr2c/d3fP5+ePJu727ueX74b+1s\n72z1eH36dfNs8HD3e3r2c/p4+n79e/v6evZ8/v96/Hx5fXx8/n52/fd98//59Hnye3z8ef15\n/X9+9nj0e3rvcvJ8ff9u+nT7/X/7+/z8+Xn5+/35//1+en38/f//+379/vv7+/t7/v/69Xh6\n/nz9+3x2ePx8dn77+Hf7/v/q42V26XX8aPtvb3hv+Wx+eX77dvh2/f58/3Xy+X38/vZ4/H/5\n+3f2+f98+/7++/z+e/7/eXX+/Hd2fn18eH5+e379/H//fv3+/3/9/X1++/x6//3+fnl+fX56\ndXz/f3l/fn36ev/5fPn5e//+fXn+fHv9ff51//t7+338/v38f/98fn5+fHR+fXt+e/58+fn/\nfn76fH15fn14+H/6/X/+/vj+/P7/fnp8fP1+fvx69f5+/n7x+nz7/X72+Xx/+Hx6fXz8/X3+\n9314/f3+eP9+ff97+f/1+Pv0+/f+/fr//Xd+ff/8dP/+//l++vv6/v73fn59/Xt2enz+ent3\n/vl4efz7/vz/+nz8+X37/nx9f3p++3n9fnZ7ent1fvp7+fj1/XP4+n19/H50/3x5eHn9+392\n/P7/fnr9f3/68f58/fz8ev59ff99fXx4d319env+/fz//vv7/fr8/39+f3v+fn/2/nv/9/v7\n/f76+3///n/9ff5+/v5+/3x+/376+/73//bzfP/+e3v+efv9evn++Pn/f33/fv/8fHz9/Ht/\n+Hr9/Pv+en7//np9fP76en75en58/f96fnx+/397+/n+//v+//76f3X5/Xx6ePt8e3h6fnt7\ne3n8/v/8/v79+f77+v/+/313//9zf3p0eHt9fPv+9v18+Pz5/vt+/3z/93d7/Xb/eXv9dPj6\nent++/98fH97fnt8/Pv+//z+/Hb//nz9ff37+Xzw+Xr1+/t4/358/n/5+/78f/3+e/t9f/7+\ne/71/nl9/vz/ev38f316/H7++Pn9+fj5+X39ff59fP53fnz/9np6+/z6/P17+vb8/nn+fv79\n/vx9fH75/Hl/fn17/P5+/338/P57dn39/Hd4+v5+/nz+/Xp9eXj+eHx2ffp8fvr7fff7+fl8\nfP75fvt4efp1f/13/Xp+e3/9d359+3p2/3r+/3t+/vJ6/Px++Xh9//1+fX19e3X+fXz8fPr7\nefz7fv34+374fX76/3t5+/f+ffr4+Xx++fR2efV4fXl+/fv9/nf69nT/9vh3/v5/+fv4/vf2\n+372+X36/375eXf8cnf7eHH8e3Z8/H/+fnj8fnx7/n57/fv3/fz7fvZ5fvJ6+/p2/P19fv54\neXt2fXh0eX9/e355/v999nb8+3z+fPh5/vh6+Hz59np+ePb9dv74eXz+eHd+e3h7ev3++v/9\n/H/+/Hx5fXt/e3x3ffZ6d/b7fvt7fvj9ffj69/v5//v1fPv//nt9fnp7/n//fvf9evH3ePzy\n/331fHr7eH38fnr9/Xl8fvz7//b7ee9+/Hx+83n+/v9+d/r6e358/Pv5en7x+f/6/Hz/fXv+\n93t8dnr8eXn++Px59vp89Xjv/vrzfu9/+vt99Hx9+/33b338dH18fnn8fnf4/nb6+3r4+XV5\n/v79fvz8/fn2/Pr6/vL7d+79c+57fn53+3d0dnd7f3Z0/H3/e3T5/nf++X1z/fH5fPX8ePN+\n+/5/fnb4enj9eP17/fl+fX7xeXf5fnd9eHN/d355c/l+f/j7fX38e3/99vd6fvz8e/z9b/j+\nc398fH19/Xz9+nr9e/t8evr+ef35//d8ev50eX94dX54efv+fvz39Pn8/fr8ffx+fHd7e3t5\nfXV7/XN++Xp58/z4eX34/37+f3T6dnr7+/98+Xt6evl5evp7fX79eXj7fHr38/b88vn+9n76\n+3b//np4/H18fXz5evl+//t6+Xh7fv79/Hp97vx99fb4fv/z/nf++fl+eX5+fHr4eXr3fXx+\n/3p99/98+P74fff7/vn68Xz8/f9+/PV9f/78/nJ2/Xn6fnp7fPh+/n77+fr5eX79fH35e/n3\n//v1/f75+n159Xt5e/17ffF2d/d7dPp5b/17ffl2//d0/f539Xj//v71fH799fx6/P7/e3H/\n/Hp+e/36dP35d/l8fP17fv57+/h7d/v8eXl8+Hr/fHbye3n4en3+/fz+e3n8enn5fXt9fv1+\n+3z69vv8evf//vN4/vh/+/7+e3z7/Hh6fHd/evt9fPv+/f/1fvX3ePn7e//4fXn9/HZ7/Hv+\n//j7+vb++vf8/PX/fvn6/35+//78f318dnd9eXh9dv5/fHz/+31+/X5++P3+9fj5/Hr++Xp7\nfnZ+fXh7fHh8+3v+///7e3v493r+/f97fH1+/nt//fd+/vr///x+/f16enr/fXx9/P/8/H7+\n/f77+f38+vp++f7+9vv9fv9+e3l5eXh4/n9//fv9+P1++/n6/Pf+/vn6fX3+enj+dXR4fH15\n+3p8/Pt+/P1+/Xx9//z8/P99/v7///59fX18eXt3f/p9/vz/fv7/f319fn//fHp7f/56fvp+\ne/38fH9/fPv6/fz8/H57f316fXl5fHl7fX5/+vh++vh//Pn8+/v//Pt/fX3+fPz+fft+fv5+\ne357ff1/f/z9/fn69/f6+vv7/nt8fX58eHp6d3h+/378/vv9//5//P7//Xt7f3p7+3x7/X7/\n/H7/+/98/P7//n5+e3x4eHx8fHp6//x+/v//+35++Pz+///+/X58/P5+fXv/f3x7fn5+ff7+\nfH18fn99fHv+/X58/Pp//Pz7+fz8/fv7//78/X1/fn78fXz9/3x9/v78+vv69vv++fz8/f5/\n/v57f316fnt6f/t/ffz7+/z+/v5//vr9/v7+/P39fv1/f/95fHx7enx9fP79//36/f9/fv9+\nfn5+f398eXt9e3x7fH98fnx6fX3//P7++/z3+Pv7/fp+fnx+fHh7fHp5e3l4fHp7/vr+f/v8\n+v38+P3+/3/9fv7+/3/+f/77//78+/3//Pv8/ft9e3x7fXx//35/f318f3//fn1+fH7+/H59\nf3x9fn7/fv3/fn96fX18/n9//P59/v9+fn79fn59e3x7e35/ff7//Pj8+//+/Pv9/Pn+/f58\ne3t9fHx+fv36+Pv3+fv4+vr8/f9+fnp9fX18ff5+fX5+ff7+/fr8+/38+//+/Pz8+vr9/f79\n/v//e3p7eHp7fH9+/399/357//57/fx5/H16fXx3e/9+en5/ff3+/v76+/77/v36/v9/fH17\nenl7enp5e3x//v/9/Pz6+/r6/Pv6/Px+fn59fXt7enp9fv7+/Pr6+Pn5+Pn7+v3//f9+e3t8\neHt8e319fnx8f/99fv38/fv9fn5+/v///f5+//5/f359e3t6e3p8fXp9fP/8/vv8+vv7/P3+\nf/5+//7//f/+f/79/f37+vv5+vn8//59e317e3t6enp6e3l3fHt9fn5///38+/r++/z7+v3+\n/397enl6enl6ent7fHz9+vv8+vn6+fn7/X59fHx7fX19/n9/fv36+/r6+/r6/P3/fn1+fHx+\nfX/9/v79/vr6+fn7+3/9/X99enx7fHx+/35/fX7+fX/+/v7//31+fX18fn19/33/fnt+f3/+\n/X7/f31/fn/+/f///n7/f358e3p6fX19/v7+fv3///7+/f77/Pv9/P3++/r9/Pz8//7///9+\n/3/+fn99fX58/3/9/Pz7/fz7+/v8/3/+fn5+fXx7fHx+f///fv5/f35+/35+fn5+fn59fX5+\n/v/+/v/8/f78/P7+fX19e3x9fHp7fH5/fH5//n59f31//v3+/v7+/P37/Hz+/n7/fX18fHt7\nen7///7+/fz7+vv+/f3///98/3x9fXz//n/+/X/7+/36+vj6/P3//v78//39/v7//37//33/\nff//fv///f78/Pz9fn5+fn19fnv/fXz+fP5///v8+v39/v5//397fHt7fHh7eXl8e3t+fn/+\n//78+/r9/f3+//9+fv99fn9+f399fn96fn1/fHx8e3t+fnt+/v79/vv6//n9/fz//v38/fz9\n/v37+fr6/v7/fH1+enx8e3p6e3t9fH1+fX/+/v79//v//n59/////P5+/P59f318fn1/fX1+\n/n5/f//+//78/v9+//3///3+f/3//f5//f78+/v7+fr6/P79fX99fHx7fX5+f37+//z7/Pn8\n+/z9/X7+fn19fHp6fn3//n7+f/79f/9+/35//v/9/v3+f397fXx8fXx8fXt8fXt7eXp+//39\n/P35+fr5+/z+/P1/fn1/ff/++/j6+/j79/r7+f37f37+fXz/fXl3dnR2c3J0c3VxcnZ3eXl9\nfH3//Pv8+Pn39/n29/b28vDu6unm5OPi5ebq7/h8cm9raWJZV1dWWlxhZm39bPXzfOz47O/r\n4Onh5Ovp7Ozw7/H18fL2+f15dm9oa29rZGJ7/Pvtfv7+9ntyc2x69f/7+fPz7/h6fHz9+vv6\n//17ef5yb29yc3r+dXb/eG9taGNmaGZobm90/Pr69+/08u3t7enp6uno6evq7vLw6+308ff+\n9fhten52+vt+b3dwY2j74mo8NEZNUcpx5sjGvd/cU0frZ2r78dHMxM1ud1xYYFJOWn3b1tvn\ncf13YltbX3zi5OTn6u3/b19ibnbv7e3t7O36fX9y+/T57vj18urrbmNlbW37bk5KTUtMUGFm\n6M3W0NXi7nl6XWR6c/Po3Nvd2vLu8fjv8+n16+jx9vX5/fp+dXp++u/q6unq+PHq7/Hy6nZY\nPjMuNElY3c7Nwr3A0WpPSlZ67tvOx8TDzvVcUlBPUVZl5NrY3/hrX19bWl5v79/b3+Lq+XVv\nePTm4eXg4+3t8Xd2dGNaXFhQTFLXbU5BO0VO+WX+4trLzNTx/Pz13+Dp2trh4vZqZWz78OTl\n6+fw/XRvbXXz/fn0fvfy9Pv59P/x6/xubmRhbXFhXmxhZXNqXUw7MTdW+NzK3MvFyt1oT0vp\n2c/LyMnM1WFVVFRl8+Tl4Od9e19bXWVweu94+/Z9/XZ0bXz0/vP+cHT8/1tt+G30b2tu8/h7\n72xZST1BRk1iae7s29fj5f7/++ve2c/V197+ZGFx/ujo5+Do6fxzcW9+fO7x9uvw8/h8c3h+\nb3BsXWHuYmRsX/RvbGN77WzweXzq/00+SkpMZlxt9N7q7OFx+ujs79nW3NHZ+Gt7aGrg7urj\n6/ru7G/5+nPz5e756/Z6+W9nbHhuZmdeWXNvY/prdvlsXVtfafni3uXpfFpMSUtHUVtq6t/f\nd+ltbeJ669rU29jeZW9za3Tr6u3Z4vj8fXTx5X3w4ujs6v5t739mb21pb2FfX15veHn3fm1v\nY15bXG3v29/p9v1qXExLVE9bZWxpbvN58PB07t/o3tvsdXp5/93s9e/v9/HlfPT18+Tf5uvt\n9Pp9/nh2e3h3a11obl5/eW/ya2ReYFxfdGVt8+vr5uh3/3Nba1tQVFVpbGhWbnNs3HXt8Pfn\n+O1l7fJ16Ord3drw/fV54+Hq6OHb3+n5e/tmZW599HpyY2ZrXXJrb3doalxnZmFubGZx8e/i\n6v34+vtqZV5p4Wlp+11uZWFuYHz+fvtea2RodV73+ePX4d3o7Ojn3uPd2eXd6+z8efJud2x6\nc2t2bGpqZ29wZGdpZF9lYGxucGxw+PLp9uxz/vn2+2v4+Pb7Zl14ce/gcGZlaV1lW1d0bHp2\n7+Pm3Prr6ufd59jg19zl3/nw9Od9aXV0bm/7YF5gZvpycWtwcmZrX1tk/+3qfWtYc3/x4Wb0\n+ujp8n1dZGxx7e196/d1cnprbO9n+XBX+lx0fm7mZOX2+Nl84ebl3/ffaejleNnv5Gh38lvj\nZ/d9X/BsflttbWHla2NtaGZvbmtyZ3Fs5+xw8HZ9b+Pr7uNd9PJ36GPs/WflaW13YfZmdGto\n23R4e2p/8v3q4N/x5Od65v7x5Nvc43trefv37uv9bWJedntnaFt1WWfzbf1afHZ7/G/y+/D7\naefm9Xxk+ejX4V51cVzs5P/68Xltf/xye19deGrp5eRtXmtd7+ro3/r49Oruefpz9+7i4urt\na/z6auf3c/lz42368mBvWut6YX5nXV1v9O718m7+bXdlbOl54+Xm5P58aOf1eOpdZGzv6PP5\nX2dWXnx433/reXPqad/n9uBl9W/o2OnR//Z7aNt35PF8dl5pYe71fm9fbvtvXGVnaeR85HLu\nd2LfV/1kV+r56nR5Y2ve8Xbjde3leP12/GRpbVr7Ym1nfOhp5Xjs3N7Y8d7j29fX2+zjbt/t\n/vxfal19a1zxVWV5XO5Wa1lm5lfxWWLjed/2ZWJw6vXk0fX2fW3pZ/D+XXRi+P/+XVrrXnf1\ncvHy+2rk4fPd5erc4+Pd4d3r5G/+3e3i8HhhY1phaGzieXphXFhYde/2ZHJdc99222tveW/e\n9N9jbnNi5HxyXV5fX2tZbn953O7k6fPg7unx3tvY1tzd6+Tp5+nu737w8299cV9ZYWF39FdY\nZV11/1tjbHbb3+tvaWhv2u94W09n697bck1OTVd859t66uju2OXa5OXY387X2dfs5vTn7e/a\n7vttWFdda3PpelxuXlP6X3D1Zn1v4d/s+1VPYWNkfmZfXGFdWFtcZGfs3dnQ3Ofk5drTz9LT\n1d7Z297f7Pd29ep5e21jZmBkZ2NdWl95d2pjbXvu7mBkb1xcTU1QU2dhdXZqZ2B0aurd4NbW\n0dHP1dvY29PX0tXY1uzm/3/t//lnZWdrZ19kXGZpbWVf//PiellTS0pNTlNcWl9tcu/4dmls\n997Rz9HV09XV0NbV19fS09Hc4vNt9vP1dW10ZmJgXlxkam5ubuXtdV5NTUdHSUtXVmn97+H7\nal5ZZOjUysrMz9HR08/W2tra09DP2uV7YXP69m9raV9pZGRpYmVz6tngVUg+O0VIVWNkdG7q\n7Ot2XFxe48/Fw8rO2tvZ1tTX09XS0tjf7Pxvfvv5em5vZmp0aV9gY/bW7k8/Ozo/T1VoeWf4\n39fmcltPX9vLw8PM2N3d2dPS2NbV09HW5HVoZnXo6vN0ZGVpenFsd/Xb/kc8ODc/Tlzj3+/y\n4eTs91xdZ97LxMLM1+Lw4trR0c7Q2Njj+PP+dvjx/HlwZ2z+bHJv+dj/TT41NjxLX9/c/vH9\n59/wX1df9czCwcjX7Pnl2tPP09LV2d3m9HJufezw9HlncWtyenfm5eVOOTc0OEte79zffOjU\n5utkT1nvzcW/xtjffu/c0tHRz9nY2ez2/3Bs7fptfGdpffv9fefi90o3NTU7Ul7h3+js69Xp\n62FPX/HKw8HK4u5259rU0dbT19jb7f1xevzu7ndvaGlz+vfv4d96QTQ1Mj5ZXtnm4/Xg1n/v\nUUxj4MbAv87t+G3f1NPU1tXY09vs+Wxu/e/xfmxlaGn573vp5PVBNDUvPldh0uThe9vTfeFT\nTV7sy8K/z+DxaejZ1dXS19vT3/HzfX727XNya2X3efv1/+rg1UkxNC42X13W1d5+3M1351xK\nV/nOxr3L7ONl/t3Z2tXR3dTZ/u3t+ezmeGVpX27m7et9eefY6zcuMC1H/u/N595uzNVq8UtW\netfKxsXg5Pdw6ebd2s7V29xxb+re3d/6WmBwbPX/en/y4d/U2z4rLy450V7T1eDc1chTZVNJ\n3dLMzsnc9NVvcvf0387L3t94W/jd3d7jaF1saH3wd/fs3+bc2upUKisxL9bl38/lzPbBYUte\nR+jRwsvOz1vifF9lcdzYxtTu+Vhk897u6+ht7f53eHB+befe3+Hq3txsLCY0Le3LaM/ox+bB\n6D9ZSPjOw8rOw/XsZUxOXdrZyM7x6WhgZHpiYej67+fze3b9ZHL1fd3Z2N58be7RLiE9LVy7\nTtV5vPPFzTZaTufTw8rsvNjf+FFLSPNj3NL64+7obfdmUmtmaHPz7OnW3vb4YWP45t/o6O3m\n2fbc/ywjNTZSxFj3zbvOz+o6TnLn6M/P0LvH6V5WTl3ba3DpaFlyY1JoaF1s9F1h6X/95+ty\n6uP05ux0bvN2feXd3uff/mtvZ0EvLThEVO9b5srDz/ZbS15/83PezMfBzvFoamdiamF33tnh\nb09MW1BQWl5r5eR49PZubW9lduPk4N/i7fF2YHbs6Ovnf1vn9Ft8XT88PDNBT0Zs6M7Py9Ve\n+HFdbH3o1cnJ1NPe+ntjXV/98+3n9HhuY0xETFNYYGBg59l9ZmVte/1rat3T2N3o7ubkcV52\n4+D3cezweX5qYVtoPz5KNTtJTFN40uHMy+fw5Pxf+evu1MzT19Pe/v5oXGd4cHzv9Hh1Y1ZO\nSkpPW11z6Obh8XxlaW9rfvzi29ja5ufq8XptcPP8dfh7b3XvfF9ydVttSj5OQDY7VEhU39/R\nycjr39dvanj17tLO2tLP2OfvalxqaV9m/v50cWdeXlRITE9NY2585tvec+t0ZG519e/Y2dvX\n3up/9Wtk//p1a/j/a2Zy9WZ08GNfUklLSkY4O1VTTXPYz8XK2NvN319rde/f2t/WzNLk8v5q\nZV1WXW90aW95dmxeV01NUkxTanLr39rl5+xudHh88d7c3NfZ3en2fW9qZ2tsbGlsb2xweVxj\n7+tjXVhKWEk/OkZdRV311cjJzNrJ0npmavv86Pnfz8/b49/se2FYWF9gXGNz/3lya2lZTE9P\nVV1f7eDV2+Df6u5tbnTs5Ofe3Nrk8XtvcGlpZWz6b2p+eGtrcflucnR/VU1dTj85SEtBYmTX\nyMPKzMDP43tsX2lqXe7V1drT1tzieVpaXFRTWWFpe3ttZlhWZVRXaHft7t/s3OHy8vTo7+Tt\n5+Dl7vrwevn8b255em5nb29s+mT98nl5clxPYU5AOz9KQVJW6srGxsi/xs3c/2psXVNdfeji\n2dfRz9jq+m5cVU5OT1FMSWP2XvTg3tjZ7/7c+2Rqdn7k5fzb1d/o5O7y725jbW9iYmVjZ/x0\nau/vevnvZ2dmVE0+NU9KOVVU7czFzca5wcrM1OrfaE1TYVhZbW3p09fk1tbqdltNT1BHSVBZ\nX/7t4dLP2NnV3+TsfG56dGR6+vjs5uvq5/l2b2FdXVpZWlxeYWdmbXlva3BvZVNPXlZUXFln\n9eDm3NLRz8/R1NLU3OTr/H1zZ2BiZF9eXVxeX2FhZ214+fv18O7y+Pr/9vT6f3/6/v5+eHt8\neXNydHV0cW9vdXNub25ucXV1eH389/f4+fr9fm1maWNgX11eY2hpb3zz6OHd29nZ2tzg6Ozz\ne21taWZnZWRnbG1udXR5fnx4ev35/Pz6+/b+ev9+enp6eXd5fXV3enl7eHh4e3x7f358/Pz/\n/fv6/XpsbW9qamZmaW10df3y7Ofk6Ofk5unr7O/v8v18eXl0c3NvdXhzdnV2eXt5eX79fHr+\n+33///78//r5f/t8/f98fnr9df56cvp6/v56f3d7e3Nta2xsa2lsb3T9//bu7enn6evo5+rq\n7fH19vp5fXt1dnl0dH14enp8fv18/vj9+/34+fn2+/j5+f99+3x+fHv/en16fX59fv/8fHl3\nd3Rva2tsbG1tb3R+9/Xz7u3p6Oro5ubn6u319fV8enl2eH1zcXl7dXh+df/8fH77+Pr2+3nu\n/vv1dff9fvpz9ft99Hb4+357eHl3cm9taGtpaGprbnh6+e/r6ujm6OXl5ujr6fP59nt1dXpv\ncnhrcGtlVFnwbN/a39HZ+XLa63Xfauveb3fm5vjo7H3m4X1pZWBYUE5KTE9OT1lkeuXf3NHO\nzs/P0tPU3en6dW5gX1tcYWVpanz16+nn4+Df4ebk5eHm7e347/7/d3p9dXlrdHNsb2VRT1BJ\nTUlKTVVeZOrd0crIyMbFx8nN1drjeVxZVU9TT1JaZmz+5+Pb2Nrc2trf4ejq5uv9dvt6fHdn\na29pZWZhYWNeT0RNUEZXUFNt2+7czM7LxcvPyczX1d528nZXWFxXWGBaXvbz+eHf49ja5OLd\n5eno+vryeWR4Z25zY21mamhjZ2NnbWptc2dfW1heXF1caW3x6+Tc1dHPz8/P0dnc5/h8aGRf\naGlwff3t5OLn3uDj4/P4eWxrYF9jX2thYGtrb2tvaHN1d3J+e/L18/ptamtsaHNrc/fv9evj\n393Z393b3OLi6fLm7vn66vPw7Pr75vH7727+eWptY3NnaGdpZGJqZ3Nn/Ht9/H3u9e/u7Pfp\nfehr6239em9tbm1xaHtq+3r47e7i4N7b3tvc3uHl3+/neuZr7XFtbVz+Y2VpZWdwb2BtfWxs\nfG799PF88Pd25nbpeufw++r6e+xw8Hv///X3efD0euf88vfv8/Bx53vyf334fv39+Xr+73fu\ndPJ26P137m7sbulf31zlaXVycn9k31vfYt5h33Dr+/F9d+Vj3V7cX91p7X7ka+bz9/7kXd9m\n6Xht4mHba+ly3VnZW/Fw9P9m5Hxv53XpXtFV3X5p4V7hXd1f7nz+dP/lXuJl3FjaX+XuX9Vb\n2Wvq+W/faupv6nb76Wjo+WHfb2jpb/J0+mzcXNVd4e54eXTubnv7+nTzfmfiYv/qc/3qeuJu\n3XXz8/j0aeVn62r3c/V983TkYe73bO902lTRWd5g6m9u2FPXau/8cfls7m/rc/V55nTl/uh5\n32/gbuxu/Wx4b298fW728Gns837863b0e398b+pg3mfned9s4nvs8O5z7nPfXeBm/u5h4GLg\ncf/q/vFp4GLvd2PoZfht9G9t5Xj05/J86ulx5nHpbu1s52PbXNpd6XJ1313cW+htfOx2dfT7\n+P/rbt9p4WXpb/V8e+1y8H187vZ353vpb+Vs4278/2LnWuNnbvdo7HXrfe7icefvfOh/9W3q\nauz+ae9n9Gr2bPf1fe/+8HPlbv369Hbp7m/hbPrqZupq8Xhf3lrjZuls8Hz78u1+7+9u63Dz\neHptb3pta/hqavb8b+77ffXq+f7zfHb8d2t9eHlz8f3+6vL37Ovt6+f26OXr7ujr7uvufvvu\nan5vaGxobGNuXHdgbGJ8cmnt+/vy4vPa4HhWWF1OVk9MVGBqZOjm183M0czMztTZ/3t2ZVta\nX2By+G/h4Nve3OPl3vV4dHNwe25rY/5hdWd2ZP9gaWlcfGZ7efXq29hjRFZVRVFDQU50VW/j\n2su9xMa/wMbDzebj42BaVktLV05MW19m5up+29Xd29nm3dfr7+rt9elxbXl2dG1zZ2dvX1po\nWmljbX312OPbSkVZSkZJP0RTd1nt1s3CvMG+vL3Bwc/e3/lYU01KTU5KS09aX/91997Z3dve\n39nY493l3uDj+fr1e3JtX2l2XGFjX2BuZF/2aOLy2OjVUUFcS0FNQD9RbFP71tbEu8C/ur3A\nv8zl2+5XVU5HTFNLSlNTWfFqcOTb5Nje7dnY6tvn4+LX8Xzr+H52amhtZGRpXmJqaF5tbHZu\n6nrr1Od2RFZWSE9HRE12XnDd18u+wMO+v8TDy+Xk5mFaV01PWlNPV1dXZm1ddvH16ODt5Nve\n4tvi3d7g8fflbfp6X/dgcF5lb19yX21jeHFudfr06eDe5V5Jak9PUktKXHte6NzXycHJyMTH\nysjW5N/uZ2hZU1ZaUVJWVVxmZ1/t/Ofk5uLg0/Hb4+Xn4H1++HN2bmlob25uZXdf9Whta/tr\n9n/6a9/qetft5l9VWVtSWE1VVH9n79/czsvLzsnNy8/X4eLueX5dXFpdWVhcW2L/anz46ebj\n4u/d6Ofn+fHtceli6Wn8aXT/avNw8Wxt61/7aXR0dX7oatx56dpuzk3cSN1L+VJYcF7eYNZ2\n0NXR0tXP19TY9dpj2lTpV2N1VO5M2UvNTtdn+t/zft9v4WzQTstOzE7YYGriXu5g61vobn38\neWznbPhq7HBy52fx/+794fdh9l51YHJkYvhu6XfacNbd6NXq03PMYNVp521xcG9b7GBf3lfr\n9nRnz0nESc19WchIzvROxkDBQsxeV8xHzVbp5VbOUuTsYunjVtBW01bZfGfbZuNj5Fpu/Fxv\ndWRo8Hl16eNs0GHIT8NsXbw5tje3OL9NVsxBwD29Qste5u9eyUbFW1rEPLk4vE1VvDSwMrY/\n3sc3sja+Tm7NP75G3uZoaNZW2mTw51bTVvD8X+5h5Gpp0kvHSstqXcFAvUzbzD+4Ps7PPLk7\ny+FCvD/W0UHATnnOS81a695RzFTt31bWXPPiUc5Wc9RO1l5+7V/hZOx4f/586WXu6mDm8Vzd\nbGTeYfPzbuNn7uBp4ely5erz7ezr/+zobvznbXHlc2/sd2/+dXZoef5f/vBi+O5ze+rwfe/r\n/fjpe/Xw/PV98Xx79HZ58Xt89Hb4fnjwcf3+dfVz/H7/fXvxdPj4+fP77vny7/fy9PP58/r8\nf378ev17fnx9fnz9ff1+/P3+/f76ff5/ff5+ff19//5//X79/v/8//76/P77//38ffx7+nv+\n/Xr5e/p8+//++H35/v76fvz9/fh+/X1+fXz/fn79/v79/fx9/P57/3z+fP99/n17/Xv9fHv/\ndv5+e/z//3/8/v7//n5+///+/n5+f3t9fHt+e355fH57/nx+/X31fvj7/vf8+fr5/Ph9/f57\nf3p+fP59f/18+X36/H72//n9/358f33+/n/++//4/fn6ffV6+v99+Xz7/n/+fv99f31+/Hn8\nfn77fPr//Pt+/v/+/f/+/f37//x///97/Hp+fXp7dn16fH18/33+fn/+//7/fn18fn9//H//\nf//9//3+/P9++3x+fX19fH56fH19fn3+f37//3x+e3p8///+/3/++/r2+vj2+vj6+P/7fv//\nfn56/3p9e319ff1///x9/v79/vz7fvz+/P38/X78/f78+vx+/P39+/1/fnx9fHl7dHp2d3l3\nfXp/f//9//z5+vr49/r3+v/6fX18fHp1e3R2eXh3fHt9/31//fv8/fz++/7+/f7+fXx+f319\nfH18e314e3t8/fv9/fn7/Pv8+fr7/P/7f/3+/v59fvz7/fv9/n/8fnt+eHp6eXp7fXp8fXp9\nfP9+//3//P35+vz+f/3+f/99fH19fn7/fH7/fn9+fn5+fnt6fHt8fv97fX9///78/P3/f31+\n/vz6/Pz//Pv7+v37/v38+/t9/nz//3t/e3t8fH7//f/+/Pz+/Pv7+v35/f79//1//nx/fnx+\nfHx7e3t6fHx8fX1/ff/8f//+/Pz+/P7/f359fXx8/n9+/n7+/v78f37/enx/fH59fP99fn1+\n/3x+f/9//f38/n7+fvv9/Pn9+/76/f/9f/19fv9+f/76/fr+/v1//n7//37+/////n58f37/\n/f/++vz8+/79/v3/f397fXx+e3p9en19f358/n38/H78/37/fX98e318/v7+/v///////v99\nfX18fn18/3z//3z8/v79/v3///7+//z9/vv7+vv9/X5+/37/ff3/fX19f//8//3//vn8/Pz9\n/vz9/P97fn19fX9+e/9//v5//X///31+fHx9fX18fX7+/fz9f/7+fv99e3p6fHt+fX5+/vz/\n/f3+/P79/P//fnx6eX59ff9+ff9/fXt9ff//f/v//v3++/39/Pz9/P/9/v78/v5/f318fnt8\nff7+/vz++/v7+fr5+v55dHx1aV9x6GT24vji5uXm6ujv+fb9eG99/HFvdHVlVWjuX+fu/mzu\n32hW/3Jm5Pflf+nk+vnt6vz/8PF1+e77bv36cW10/GtrcWtjaHZxb3P8fnz77/D06Obr7ebr\n8O7r7/ny9Pn89f14cXh4c357ZlBCPT08RVflz8vDycfIxcjM0+5cTk9PW3Hf3uPn7PL25un8\nZ2JaWF5u9u/i4uHi3d3e4ur1b3J2++zf2tjY2eFRNjEuKzI95c67tbu8wb3Jy9HvS0A/P0Zk\ny8O+vsDP3edyWEtIPjw+SlzcxsHFzNX8YltiXl9ufujdz8/Q1t3ueP317Ori8G1JMy8tLDdJ\nyb60srrB0NJy+v1kTUlLTFzWwr69v8t8WU9LSk1OSktPXH7SysnP3XNXVltt+t7b3dzb2Nvb\n4PF0a2939Ofj6ersWzsyMCwwPunCuK+2vc3XYlhralhSWlZd3sbBv7/J/FNLRURLUFBWXnX0\n1c3O1ehnUlReft/Sz9jc4uz6+PVxb3d+/vTs7PDq3e1KNzMtLDdNybuur7rF3F1LWGhmYm9j\nW/nPyMPAx+dVSkFASVZdYnJ3befW1Nfc+ltVXnHn0s7V3+l6a2/8dW16eW568/z+9+zj3P9B\nNzIsLz13wbWus73NckxJV2Bl/etubd3Py8bEz3JTSEBCTFddb+v78dzX29/lalpebfbbzs7Y\n3/BqYm17dv70eHP48O7o3tnXYzw0LiowPeO+sayyust3SUdRVV548Wpx2s/Kw8HM6l1JP0BI\nTVNj+v/r1tHV195sV1pfbeHQztTX3/tv//p48+76/PXr7t/S0G48NC0nLDZcxrKrr7S+1VNN\nUU5QWl5TWe7Vyr+8wM3gWEU/Q0ZHTFdYZ93PysrL22taVVRd7NvZ1dTb4t7d5+rve2x19eja\nz9ZKNzEqKS89bsq1sra6vcbW0tf3V1BHP0JQbd3Iv8PIzNX0a2taSkJAPj9LZt7Px8jMz9DU\n3uP8YVdZXmbv3Njc4eTt9u7r7OvgbkY8ODIyOENPY9PPzMrAv7+9vsbU335bV15dVVNVUVFe\nfunf2NrndmtoX2RnZ2Fjbnfw5uDp9X/9+/zz+Xlvcm5sb25rZ2hrbHB4//nz+WZWUFJVW2Jr\nZmRoZmt46+Xg3t/f39zc3uHo8fx9fvv19vx+dW9tbGloaGZjY2VmZ2hpaWpuef/z6+nq7O/x\n9fX09/n7+/5/fHd0c3RzbWliYF9eXl5gXl9hZGtue/75+PLt7ero5ubl4+Pj4+bp7fH3/X14\ncWxpZ2RkZGNjYmRnam94/vv8+fv69/bz8vP19vf7/P5+e3p5eHFua2dkY2JiYGJiYWRobG52\ne/79+e/s6Obk5ujp6+vr6+zu8vr+fHVybWtpZ2hpaWttbnF1e3p5fXx9/vr3+vv/f3x5e3l7\nfv7+f3x6eXVzbmxsa2tpaWpqbG1xdHl9//fz8e7t7e7u7/Lx7u/v8vL0+vr8fnhxcm9vc3R3\nd3h2dXZ3en1+e1xU0+VZ5mz97unuefL6+/nwfm9pXmpxaG1tamx3fG9vbmppZW/t6OXi3tva\n2t7r+Pf7/n1xd3v++P59/u7t9PV3ev36+nJucHV0cnJqaWppZ2VlZFtWUFFZVFhXW2Rt6ujd\n3NXPzs3Pz9DR19vf6/Z2bmplZWRmaGttc3328evn5ejq7O/5eHNtZ2RgX15dX19haGpxcXR4\n//j89/319/Hw8/Pz7e7v8vDx7/H18u/0+v/9fn7+fv78+vn39/Tw8/T2+fx9end2eXl4eHh2\neHh5dnl4dnh1dXV4enh7fH19e3x8fH5///38//7//fn6+vv9/f78/Pr6+/7+///8/Pz9//99\nfnx+fn1+/39+f3x9ff77+vf6+/3//v79/317eXd3eXp6e3p8e3x/fn98fn7//v3+fv/+///9\nfn/++392+fh1evx8dnv+d3d+/np+/H59/vv+ff5/fXz8/P38+/t++vr8+v38f319ff9+f/7+\n/3/8/Pz+/fz9/P39fn19fH58f////35/f/7//v5+fnt7fHp6eXp5eXt7f/9+/v79/P7+/P39\nf/9/e318fXx//n19fP78/fv79/j5+vz8/f5+fnx8fn59eXl7fP7+/Pz9/P39/fz9/fz8/f5+\n/3x8fX17fHx7fH59fn///v77/P38/P5+fHp6fXt9e3x9fP///Pv6/Pv+/v59fnx+fv//fXx8\nfnx9/P7+/n7/e3t9/n9+f//+/vz7/Pn7/Pv8+/3+/P38+v3/fX1/fX1+fH99fX59/379/P79\n/f37+vz8/vx//vz++vv7/n1+fX9+fn5+fnp8e3x8eXx9fHx8fXp//n7//nl3fGtJX7lRSMjX\nX1HP7kHnx05X03dOydBZ08nYVezdclt+aUX130RNV87lTsXQa9bMf3jVb299UV38cU9V5t9u\nfcjtacRzb+liW2NsUllfclNzz1vfz9jr19Dm8dp6Wm7wW2NmZE1Kb95p6tDQ3tvNb//YVVpk\nZ1RZ6l9k3ujl197e3NbufeFvampiXe5nZ3tq3+zl3d/tYeNnUGxgVWR2de3kc+HQ7Wnq12dV\n6O9if19e1vpTat3rT2zWbPx6bN7Za2PS12123vtr7mnu125o7en9eXT53PJz4dPf3trb3dja\n5OL9+WlRW1ZLTE9OTlNRXWti+ez95+336uDg/ujX2eTU1uzi7/Lt6u5l7913XWLs9V5mbPt0\ndfxr8OXd7/Pk6eH0ffbp2etfbe9rV1lfW2xhYV1fYk9XYvhx+93W0OTl6tjWe2pn3upqZGzq\n/t/o7M7Jxs7P09HS73hfa2f0a1NkX2haVE1TWktJP0A+PD44Oj9Hae7NzMa9v77FxMTAwcjH\nzMnP1/Vn7+zd3dzf5dzqfG99f3ZuW1dWVE5LTlFYWV1jYWli8e/87+jY3utfRjs+QkZPUmrm\n0s3Nztvf3vD6fu/k2dDRzdHW2NfV29ne3dzf3+rx/v3y/3N5cnFvaWNfW1VXU1ZdX25xffl6\n/n3s6XZOPDs6QExT7PvX08zHy8fP09vp6fji9OLd2tLV0dfX2eHf8fdvaGhhamdvbGlsanFt\nbmZmZl1bWl5fYWpx/PLs6enrZ0tDQUFHSV9vft3dz8/KysvJ0tbd5el87/3u6ufc393i5On2\n73hzbGNlZGViZGdmbW50eXn6fn3/+/v+9fr69vvze1tLTkxJSU9OTVdYau/f29PMz83KzczR\n1t3k8nbr8/jv7+/25ern5vn5d25mZ2deY19fYmRtdPTx7Onv8+rs9HJWSkxJRkhOS0xUWGrt\n3dfNy83JyczM0Njg53px93R2/n14+uvt4+Xw8XtsZ2pnYmRfX19hanrw7+Tk6eXo5u11T0pN\nRUVHTElNVFR07t/UzcrMx8nLy9LV3+t0dP9oeXV6//fq7OHo7ex8b2tuaGRkX2JhZW/87+/p\n6+zq6+p8VUpNR0VGTElMU1Rr7t/VzsnLx8jLy9HX3ep0bntobnZye/3v7eLn7Oz8dm9ycG5t\nY2RnY2v/8O/r6ezq6/FnTUtLRURHTUdPVFh57dzWzMrMxcnKy9PW4uprcn1icG5yc/fp79/r\n8Ov/eHD9bmhtYGZobXzz6u/m5urRyF9HRj48PD9JREtWXd3NwsC/v8rKztfjal1OTlFa8eLU\nz8vLzM3d92BZWl5scPD29ufh3eLf4+ro/vxsWlZMOjAxMDpDUtPgycm+vb+90dT7d3Bu8V7/\n/uHZ2NTj2+Tc2+x+X15WYXX95uLZ2M/S1+D0+3L5bnl1amdhY1lLMS4yL0NFauLexMi3wcDK\n39/512zpbmzk2s7e1fT14uDgfHtca21ubWz9ftnW0tPa4uzg+fX0fmtlZ1BRWFBEMDM0NU1H\n5XPOyMK6ycPb2Ovb2njjc+Pm0dnp4X7t7uJvbW1u/f5+Zfzt4dfT1tzb6vHxdmZxf3JlYFVN\nUE9KNTM3NklNbm/UyMe8xsfY0+Ha1+zu+uR63d/y8ubh6drsdnPueP7yam3s3uTY2ufp5vd8\nd2NhbXRfYV5OUVhVRzY4NztHSWZXztDBv8HFz8nXzdvde3t4aO12/HTd4dnZ4u7+7nT+amxr\n7ujj3eLl7ul6bl9fW1tgXGFaW1dZX2dRPkI/QEpNVE/o4M7JxsvPyc7N0Nb6bXFtcvv4duPZ\n1trX4fHr7fpqdWpmdu/49fJfc3RgZ2NaXVxZXlxZV1xcbm7/fFhNTUpNU1ZeX/js29TTz8/R\n0tDc2+L46u7m7/Hm4ODd4vLu8Hl2e21nYXNgZXdaWHFgV2RcX2NgYV9jd2Re+Vt36Hvy6ej0\n7vz0fu3y/PLy/3Z2b3R1+nnx7nr19+v/8vV/9Pz/72r45W71fftv7HdgZ3VnbW5pbGZ2Y2z0\n9P356vV/93p4bWxnbetlZnx37W93++7w9e55enh1anT3Y+n1avH5/29o4XNp53Fp83Nl8Hpr\nYXruaG1++n737ml44upv5vVl7fpn+3ptfv5vZPp7c3p2d3d1d3rscnvmeG5t/Xtzb292/n9q\nd/Fp/el/9/3vZfHzX+12fPX082Z87m3eeH7tbeJscfRnbm50a3Lvb/75dWxt8v32/m/1cml2\n9vz582v0+3z9/fB6+X5laG/97/z9//Rr+n5s5nl76G1/f2FscPB4/u5tdvDsaul9+/jvfGz2\nY3Ltcmntc/dzc27473f1cfNy73lz6v9vc3hy+25qdfJ463lue3r1fHp0bWvu8nlv+Xn44GN+\n8Hzo/X54c+Vsa+Vfc951dfZ5cvNxcel4/XZ7++h8av9353l19+19/nXuffX0ePB4+2ry8G1z\n7/t1fW559Ph6d/By+Xv1aXPoemlv/mVmbHVsc+947Nt9Z+z57/b+e3Xvbn3qce5pZ+tu6/Jx\n6PR7821383vp8u50/fP38fr4ft7peP59b2Bu/F/t8mJcYN5l5vFd3dr/dnZf9Ol/b23t5P/o\n6XT17uVt6Pdlf3xiben4d27abXruYe/371/tel7v8Pn/6HnievZ9cOx2/m9t/uzx9Ox6595o\nXu1ldfZvZXPlaW7p+3rr+XLp7GVidvL98Ozu9OP07/RyePB6ePp59WzpenXv8nHpfmT2ZGhk\nfF9n/Wzz/f1x+ufc7PH96Oj74HL16eZ4+vZsb+7xY/J2aHbtbWP5ZmntfFxu8m5u73Zn6vhx\ndOz4c+nrfurh8e/o9X7s73tz/3lzeXVkcHxua29vamprZ2Z6eWx2+3r89Pxz9vJ+8vL3++rs\n8O/t8+3j6Ofl6uvn5+vr7Ovr6e/08u7u8v39fnp7dG1ga3ny5vA/MD06PEpHSU7ExMC8vsXC\nvMve+l1LVVdKSlpt68rLz9LM2eDmXlFXamF/7O3iz83T1uV4/OtmWl1tbHjo5uzV1zQoOy8x\nSD0+R7e9uq+3v7q0zO1tSz5ZXklP8+7Uv8nd39peXF1GP0xYV/Df6djHy9HT4W5w7V1daG5+\n3dXn3tXd4OBzZXv3feLqOyYvOi5MSENMvLG7r7bFxbnLWVRHPU7oWlnh1M+9v9p4fllPVkU9\nQlhg5dTe3srG0Nb4XFh+alxpavvay9DY2N7p3u1kXVpfbOrl3N5FKy46MEFNQkvKtbqys8HG\nvcdvWEs+R25oZOLW1cG9yd5tVEpNSj4+SFb30c/XzsvN1OReUFheYW99fuPQzc/Q2Ozp7Wpa\nXVtZdO33997c0s9cMSsxMjZQSUrjurOxrrnIyMfuVko8Okpu8tbMzce8vsneW0M+Qj48P0hV\n28fHyMrN19r3V01QVmLn3+DZz8/Oz9z+bGBZV1hVWHzr4N3a1t/W1eFJMigtMzNcUmrXubGv\nrbbJ3OJaT0dAO0dv0sXAw8nDxMvmV0E8PT4+QklR8c7DxcfP3vB0YlBPT1zy1c7Ozs/R1Nry\nZVlXVllgZ2nz4OPc2+T24+zm3040KS0zNWfv7de9tbOus8jyZU5LTkw/RVzcyb2+x83P2PVm\nTD48Pj9FU15s58/JysvXfF1fXFxjanrn0s3MzdXk+HluYl9bV1tofPHo7Ojw7vD8/fXq41s8\nLS0zM1Hk19LFu7ixsbzYYkpGSlZQTlZ+18S8vsbW9VtVUUpDPz5BSmHm29TT09XT3P1eVVNZ\nbeHZ1NHS0tTY5XNfWlpfaW1tbXF669/g7fpsan3y3NlyPy0tLy9N5c7Lwr+8tLK5xO5FPkFK\nU29vberOx769xd1eS0VHSklGRUVKYd3Oys3Z6u5+fndoWlpo7NXMy9Db6ntze3BoYF9eZXv3\n7O3z+/j98uzy8ufnbEcxLS8sP2jPv7q9v7q4vb3JVUI9PEFk4tbNytPMxMfL0WZHQD4+RU9T\nVV9nfNTMzM/ZallYWmT25ebf2tjRztLd9mJWWV5pevR2bG5t9+fi5On+b3bu6nRKMS8tKz5W\nzbq1u728wMS9yO9XQzk8SlvWwcLJydHf1NPwZ1BAPD4/SFz96trX29XR2N7pX1VUWGXh1M/O\n0Nvi6vp6c2JcW1lcbPrs39/o7vhzb/zv7P1bPzAyLC5DUMy5trq4vMjFw9fbckg+QUBM5s3H\nv8PQ2ONlbWpUTEg+PUFHVOTPzMfL1t3ubGZlWltkaO/a0c7N0+HzaV1iZGRra2RocHf56uzv\n7O736v5dQjU0LC47Q9i8t7W0u8PDy9vW8VNMRT5FU2/QwsLDxtb3bVhQT0pDQT9AS13ly8XF\nx8/ndmJaW2Fha/zu3tTQz9DZ63NgW1lbXV9hY2dtfO3l493f6HVSOzcyLDY6S8+9ubO1u7/B\n0tPbaVdPQ0FHS1vZzcXAxM7U91tTS0NCQD9FTVvfzMjExc7Y6mZeXltdaGr8493W0NPW2+5t\nY1pYWVpaXWNmdvPq3djfa0Y8NS4zNT91yr62trm7vsjIzt72XkpGQ0FJWnfSyMbHydXra1FK\nR0FBREdOaeXSyMfJy9Tj82xfX11cY2x849vX0tTa3/VqX1pUVVhYXGZs9uLd4G1JQDYxNjZA\nX9jEurq7ur7DwsnP135UTEVARktX69bOycrQ1u5fVUxGRUZGTltv3c/NysrP09vs/W1hX19d\nYnP549rZ19jf7fxlXltXWFtbX2349HdPRj41OTg9UPjQv729vL3DwMXKzNZ2Xk5FRkdKWXLp\n1tDV1t54Z1lPTk5MUVlee+Xc1M/R0dPd3+h/eG9mZ29tfe3u4+Dm6O16bWdeXVxdZmdWSEM5\nNDk2P1Jvzr+/vbu+vr3Cw8XR5W9OR0ZCRk9XbODf3Nfg7e5oX15WU1hVWmhv897c2NLU1tPa\n3uH4cG9lY21tdPL49O/6ffxva3NpbVdEQTgxNzQ7TFvcxsLAu728ubu9vcfW5lZKSkRFTE1S\nZGhw5+jp3+j+9W1fZ15daGhp+fHu3Nva0tTX1dvm5/dvcGliZWNfZWRfaWloeWdORkE2ODk4\nSE762MfGwby+ubq7vMDL3PdTT0xIS0xMT1dZZPx87OPz7+x5e/hvcX5vdPP27N7h3tre3tzh\n5eX3eXVnZWdiX2NfWmVfXVRFRT07RD5KZVji29nLxsC+u73AwMvR0+x5b1ZPT0tLUFFUXl1b\nbm1t5ert4Oz56+346un76uj55N/r4d/9+PFkbm5cX1pYXFpeYmVxZlxWTE1JS1hPYnhf6tvd\nzMfKxsXMy8zT1Nnre2hbWFlYWFdWV1lcX2Zsb3T78e/n4ern5u/q6/bu+3n7/n5ueHlzeH9u\navpnbXRraGl3am9/c2xlYV9eYGhmaG5ucfLn5d7b3dza29vc4Obp8vh6bW5pZmZoaWxubG9w\nc3d7/vrz+PP1/PP6+vz+93t9/HdtfXtvfHd8/nV8/HN3/nV5+//+fPz+cW9vbWxtbG5zbXT9\n/frw7fTq6e/p5/P57fh49Pj7cnnydHT67nBr7npiWnr2XNvZ7dbc5uR76v5d8WtXb/lpYvDt\nXHvlaF/862Je329W//tdXf53W2rxc2/z6+z+6try79vo6eni4vPl9uTvXNd4Wd1pe13s5ljm\nefxvb+pfc15571Xw8mJt+O9pbeR0bnntd2bz6m1s5mJy52Luc/rhY911auNw6PR55G5q399m\n6utf5fxu7HF59Hz/a3ToZOjuXt1nbN9p7n93dWbuaWx6+Xz9aehuYdpp/Hr9fXhrc+Vi7/Fw\nenHxc+tz7d5k7O929nV5/+9z/fVj93P0923+fnd7dW9r+fN163vrc/3oann49Ph26W397Wfy\n6316b+tpfXlpd3L+euRh7eFo7G/sbWbdY+zxZeVcfOpd6Ots6Wl7+Gbqbmnpd3Xs+O11duH9\n+G9+325q8nR8bnbjbGzl9nh5+/F59vV57HR46/R/aHnyb2nw+HF79vBxdu30cfD87vn+62bo\nfl/ha3L2au/5dH576HN+5HXuZffeY3j6bu/1aOzscPHy7Xl6ber1ZOrtd/j3+2t6+/r2d/R4\nduT3ZPBvc3dv7Xl0fGry+Pzvd+lueulv+vP86/Nr/PR47W3x3nDz/P35Z/bxe31s8n5qb/78\naG3uc/z2bH7q8Xl+8Hxv9P94a3Ls9v569XRz/nLw7nt46vT9eHn+fnt9ePJ3avZ0eO1v9/b2\n73l8b2jtefzqZu70/W5z+3nv9mXw7WTu/n98be5y8Xhu/25vfn708/729ft/+Xv98nt+/PV4\ncnjp43Hz/HF6ZvF+bPhnfHxy8fx49W5/939/e+Zk7u5t9/j5bWx2/Hdp+vT46/Xqd21t9vhz\n63b+d370anV5fHv+83D0b3v4a/Vucfj38Ht67vv58n37fH54+/x4eP9/bPNt9e9p3/Lu5l5n\n4Pxr7XzydXt7du9nfex3/mZv/mv/a27sZf3tb+p5fuzveXnmcm52bf3+6n1u+elz/vBxcXXo\nceR/f+to6Xl553Dv9u/t/ehfX3xu8Wv8fHrx/+b8fv117Wtv8272dPjr6e729fv8eO9ofnlu\n9f3ze3187P/9fX9vdW1/d2nsbnvt/fl/+fL37vn57/3+em//dPH2YWnqfGTw62jq9XXo/331\n+nTzbvL19/V27/bxefXub23w7/l8fvVu83X+6nlnd/BxcnN07mP472Jy9Hp5cfV68ud5e3zu\n/2z6blZb0n5x63Haa+n5a3lj9d/4fXZr8HDr7vb27/Zt73F4fG9p+e9r8Gpq+mPr7HH9aOp9\n+Pdv/Gv9e+Hqc+py+XRj7n5vdnHkZnXqeel2+fR3/Xb/b3hrf+/+9vR/c/PvcXh+bHP2+fF4\ne/Zv+uxocH7+8Pjs/nT9cuh+fOdlbmh4dH/0en51929x+nR3dPTz8O/teGlwfPL2bPVx/ed2\n/nJncPHveuzs7n317m19ffv4/vD783T8/25wbX518Hp5cnV+fOxufHlz/PX1/+7r6frzb2J4\nbnPpdvt7a/d0bu9ua95odOBs6+T93O1i6d5xdWpzbXPudH56/uzk9P58cmlrdHPi8Xn3/eH/\nYvpuZ25u9vn/8vn06e/3+uxvYu5veHpv63v48/zp7Xbz937273t9c2x6bnRpZ/t1/+b9ffF4\n+f3++G958ezu7Ot/7/74+XJ7bm9uc/fu8u71/+vt831wb293/vz0/Hj4+vPwcnN3/W/+9W90\nevL+eW91+H/19/Xu8vf8fvv+ev3u+Pru7fh8/377dXBtaGpsdHV0c25teHt4+fry9f/0+/z9\ndf708ert6+bn5ejr6/Pw7evm7uvv/3d98vz+Z15jY2ZobW9hTkM9Oz9JV+nbzsrJwsC/wMvY\n9V9eXWJkV1dcbOfd1NXf6nRweGdjXl5u++HW1tbc4OHp6fJ9em91+/Ln6PT1/WE9Li4yOE1m\nxb7Lw8a+vMrN+k9MR2Pa2s/X1tDbzc7feUxLTExfa/7tbO/g4trsfWtaaHTt4O7o6efb2tjc\n7Pxud+ro4/BrZ2RfPzAxMzpMeMK/yMPLxcbU1GdQTkt229DK0c7X6dzn8mROUE9WcfPd5P7v\ne/nxffhpZm974+He3OTi5eTf6/9zcvnr6OjzfG9dPzAwMjhN88K+xsLMyMnZ211PTk36183I\nz87X4tvq9FtMTUxWbevb6e74dH91eXBfZGl+5OHd4ufm6eDh5Oh//nz+7e3u+nJvb25UOS8x\nMj1kzru+wsfZzdjh6lVWTVjb0cbIzdL27/1tbFFQTk9p+dra6fFjZGhp/Wtqa2ru6eDg7+5/\n8+jo4Orq7n3r7efof3ZhYGdsaEIzMjI5UNy/vcLH3dTX4ttrX1RX5tbIyM7U+Hhvcn1cV1JQ\nX3Lf3OfyYV5fZ/x7/HFt+vLj4+rvc3v669/h4en4+Pft6unvbmVdXmxlSjgzMzVH9ci8wcbX\n3tvs2+xsYlr63c3JztDlenJve2JbVk9YZfji5+9oXl5fdH3/d2x1eezl5un6e3vy5uLf5e/+\nfvrz7+79b2piZm92XkA1MjE6T+G/vcDI2dfp4N94fl5m79rMzs3V6/dud2lfWlJVWWj25+x9\na15gZ3H7/n1yd/nv5ujs+3h7++nk4ePu/nd6fvT3f29mamz56XxJNzMvNkZqwry+w9XY7ubf\n9OxhZG7o0tLL0Nrne/xqaVpVVVJfaPHu+f5hZmFrfnz1cXt9++nt6PT9fXrs6d/f5uz59v71\n9n1yZWVjavl/Ujw2MDM/Tsy9vb7N1fHy5O/e/nBt+93Zzc7R2u/6aWVbV1VQWFtqffr0c25l\nZm1v/n39fX319uzt8fL79O/q4+Xn7/X9fXp9eW5rZm55+/VNPDUvMz1Oy768vsvU+PP27976\neWt07d3Pzs3V4fVpYFhXVVJXWWJvfu/2e21paGp1dvv7//v98vXu7fDs7ujn6Onw8nx4eXJ3\ndW1pbXT4Wz86MjI7QOLEvrvFzOb+d2/e7uv7c/ru29LMz9bfdmVZVVVUVldbYGt+7+/xfW9o\naGpv//31+/n08+ns5ujq6O3r7/P6dm9sb291c3V9emxKPDcyOD1OzsW8vsfN4+pw5ujv62py\nb/7f087Q0+H5Z1lXVFRUVlhdaXnu7Oz3dWtnZ213/vf68/Xv6ujj5ufq7vD3+f17b21qaWts\ndX59WEM7Njc7Qv/PxL7FyNPd7Ong6+ZvamdhfuPV0c/U3exoX1hVU1JTVFxgd/bs6u/4dW9u\ncnN1ff769ezr5ePl5Onq7vP7dnFramZpampwd3FRQzw4Oj1Je9fHxsnK0Nbb2drd6XRrXl5p\n8t/a1dfa5vlsXlpWVFFVV1tqcvXu7Ozz9379eXFzb3F5fO/s6OPl5Ont8/x4cGtlZ2RmbGt7\nblRGPz0+QEpl7NPQz83Q0NHP0Nbd8n5kX2ht++3m4uLl6/JwaV9cWFhYWl1eaG95+/Pr6+jr\n8fV5eHJxeXb8+fbz8PP18v57d2tpZ2doaWxuYU9HRUVITVxu8OPl2tjV09LQ1Nnf5u99+nl9\nc250c3p7fXZ3dGprZ2doZWhlZmRmam13/vr6/Pv18/Lu7uzu8fT2+vf2+vt6cnVvb3RzdHZw\nXVBPT05RVFhZW1xl/+ve2dXU19bX1tfa3OPxd21qa2lnamhmZGRsa3Z1c3dra2xsb3J0eHhx\nd3789+7n6ebo7ejv7e348XhzcGttb3RxdmtXT09QUFZYW1tbX3Lt49vZ1tbZ2NbV2dre6fd3\nb3J0bm9tZmVjaGxvfHNybGlqa3J2/Xh1dm59+fHr6ujq6ejp6Ojq7/V6cm9scXJ1b3RwZVVP\nVFFSVldaWl1i/evf2dnV19fV09TY2+Lsf3R+d3puamljZmZvb3Rzbm5oa2x0f3j/dnh4f/Pv\n6+zp6Onm6ebn6+z1/Xh3bW9ybnBrcHFnVlNWU1RXWFpdX2fw6d/b2tXW1tTS1trc5ez4//3+\neG1raWZobHJycG5sampub3Z4dHZzdnv58u7t7eno5+bk4+jp7O/0+nt6eXBvbW1vcnRkVVNV\nU1RYWVleX2zu597a19XT1NLR1trc5Ozz+Pn8c2lraGdrbnJvbmtubG11cnR2b3J5ev307+3s\n6ufj5OPi5+jr7vT7fHZzb25ubm1weXdfVFRWVFRaWVpfYXbp6N3Z19TS09DS2Nrd5O3v9fp7\nbGxrampucGtrbGpubG9zcXRve3r9+Pju7+zq5uXh4uTi6Ors8/r/f3Zybm5ubnB0+n1fVFZX\nU1ZaWVpeYXjr593Y1tTR0dHQ2Nvb4+vv83x2bGdsaWxtcGxscm55dnJ4cnFzfnh/+nzx7+zp\n5uTj4uTj5+vr7/X7/np1dG5zcHB0/3RcUlZVUlVZWFlfZP/p5N3X1NPP0NDS2Nnc4+vv93tv\namlra2lsb2hscW93cnR0dHV3///8+vfv6+jm4uTj4eXk5uzu8f56fnNubG5vcHZ7/X5fVFdX\nU1VaWllfZnvr5N7Y1NTPz9DS2Nrb3ujr8Xt0bWlramppa2drc3R2dnVweHp8+Pz79/fv6ujm\n4+Tk4uTn6Onr8PX8fHVwb29xcnp5fn5nVlZaU1RZWlhfam/s5d/Z1NLQz9HS1drb3uTv8X1s\nbGhpbGpobWxreHt7d3p3ev58/ft8/vry7+vq6ebm4+Pk5+jq8PP1fnZ0cHF2cXN2fntmWFZY\nVFJZWlldanTv49/Z1NLQz8/T1dnb3ubu+X1taWtraGdoaWptdHp5d3t8fvz8+vj8+/Tv7uzr\n6uno5+bn6eno7vPy+Hhyc3RzcG95f39rWFZZVFJYW1hdaXH159/a1NHQzs/T1tjb3+Pu+Hxu\nZ2ptaGlqbGpyfH39eXp8fnx++/7///v18+/t6enl4uXj5+nn7fP3/Hpyb29tbnJvdn5uXVdZ\nWFNWXFtbaHD76uHc19HR0M/S1tfZ3eDo8v51aWhtaWdoamZqdnh5e3t6f/z89/j7+/X08e7u\n7uzn5ubm6Orp7fDx9ntycXBvbnBycXh3ZlhXWlVUWFlWWWZ459vV0s7MzMzO1N3xfndpaGFc\nXGf95+Pm4ebm6u1zX19dYmlwdfvr5Nva29/g4ufn8npvb3v4+fv7+u3t7vV1aWhqfmhJPjw/\nRlNcceTXycLByMzU3Nvg82lmY/ze2trc29/j7HVfWlVaX19hZ3zz4+Lo7e/u7Or5fn767Ofk\n5uXk6Oj3/f57/nr8cGpqZW1scHf75+5TPj0+QVRTZevXyMO/y87V3Nzf92Z0burc2uDf3unu\ndWRZXltja2ZobvL76/N/fvXv7Ov79u3o5uTs7uvl5e/7dPzv+3huamhka25tbXR75dtePzo7\nPk5XV/TXyL++ydPW4d7f/2Vw7uHU1t7f3t7ubFtTWFxfbGNkdu3n6vpzdfru8/V/9Oji5Ofv\n8efl5/N7eff//HpvbmhobnVoamly5d5OOTs8QWJVYt/Oxb/B1tfc6N7gbGno4tfQ2ube3eTs\nXE9VV19mY15q7unmfmhr//33f3H56d/h4ens5eTm6fV9/vT4/P1rbHJrZGZhaXF87eHeTDk7\nOz9YUF3dzMS/wdbY3Ovn62Ns5d7V0dvj3N7k9V5NVFhZaF9fbOru6flnbHh6fv109ubf4uPs\n7ubm5+nufP37+3t2amp1bmtoampsdXXl3E42PDw/eE5l3crFv8Li2d7x6eVebt7b1M/d6dzh\n7PZgTVNcWWplW2/q6+/1ZWr7eH79eP7j4Onl7Ozm6O3u7fTv7n5uanNvd3dkbGdpam/+9OdS\nODo/PWdXW9vNxMPB3t7e9O/nZm3d2tbR2+ve5e78aFVTWFpcY1xh/fDxf3Roef99eHl+7N7k\n5OXo5urv8fTv8/fz/31za29samNlaGlsbfzl+EM4Pz1KZ07v28jGv8zg2enp5/pg7d7a09bn\n4+Dp8nVcV1ZXXVxdXGt97PJ7dG5++vxye/zo4eTp7uvs6u749vLv7vd8dnN9eGxnYmNwb2tq\neOh6STk9PkZlUf3dysXByt7c5+vs+GT44NrV1eLk4ejxdV5ZWVRcW1pcZHXz8nt9e/x/+2x3\n+u7n6ezt5erq7/v67Ozv9f9xcHBubmhjZmhja2Zu+PxXPz1DQ1lbW+HWyMfH2d3h6ezwa2/n\n39rZ3ubf5+z8Z1tYVVhbW11jcvHv+Xt1fH3/dnP68erp6+zr6Ozu8fbv8vP5e3hzbWtraGRn\nY2RpZW/67GVEPUVCVlxW7trLyMbX3Nzj6etra/Ln39vi6eDl5vNvX1xWWFtXXF5t+e34+ft9\n/nxzbXz77Ofr6+ro6Ofr7u/x/n94am5sbnNsaWlkaWtsbnNxWkU+RkRTW1rp2czKydfa3OPn\n6m5y8+ji3uTm4OXp83RlXllZWllaXWh49Pn4/fn9/nZueH/x7u/v6+Xk5urr7u3vfXhtbG5s\nb2tpaGhpaGpmb29hTUFGR0xcVXbk0c3K0djY3N/k+XP27eji4+jg4+Pr/WthWllZWFlaYm79\n+fP19PL7e3R4/fbv8O/r5uTm6e7v8P16cW9za2traGpqZ2tqbnh5elFDRkZJWU9e8dnPys/Y\n09jb3fVtfv/47vD05ePg4e15amBeXVlYWF1ndHf/+vPs7vR9e3/5933/+u7p5+nq6ert9nht\nbGtsbWhoZ2ZoaGhvbXN0XUtKS0lVUlZv5trPz9bQ0dfW3vHy+Hl//2/37ezo7Xdvb2poY1td\nYWRsc2597u3p7fb17vf8/Xl+8PDy7vDv6vH2/3Zyb25mamJhZ2RnaWltfXdbUFNOVFZSWmv5\n4tjc2NPT09Pa3+Dp9Ptuam5yc3lwbHd2dXZtbG9ybW9sbXf//fn29e/u8vf8/n7+end8eHl9\ndnR1cW5xb29ubGxvcW9xdnn+/X9sZmZgYl9fZWx1+/Pz6+Xj3tzd3d3f5eju9v17dXFubG5t\nbXFzdXp8e3x7fP1/fv//fv9+en19fn/6+Pn19vX4/P1+e3l6dXN0cHBvc3BwcnN2eH1+//55\neXd3d3JzdXd5fn3/+Pbv7uzq6Obo6Ozu7vH0+f57eXd1dnd8enx8f/57/v//fn59eXp5enx8\nfH/9/v7+/n18fXx/fH7+f/z//v39/P75+/v8+vr8+vn4+Pfz+vn7/355fHh4dXd5fH58/fz3\n9PTv8fHx8/T2+P36/P78f////f5+fnp5d3l4eHd2fXt+fn9+e/39+/38+/z6+/n5+/39+33/\nfn19ff///359fXx+e3l4eHh5e3l9e338/Pj9+vj29fT19vn8+vz//n/+/vz7/v3//319fHh6\nd3p5eHl4eXl8e3t+fP79/Pr7+Pn4+PX4+fj7/f7+fXx8fH58e3x+/v77/f//fX1+f/79/fv6\n/vr5/P79/v39fH19ff9+/Pz7+vv9/fx/f355e3p7eHh6fH5+fXx6eHh6eHt7fH59/X39/n77\n/Pj5+fv5+vv7/X9//f5+/nx9fX17fH58e319fHt9fXl9/3x7e316ev7+/Pz7+/z3+/z6+fb4\n9vn7/P38/P3/fv99/n/+/nv9/37/fnv+fnv/eXp9ffv9f/78/P3+fvr+/ff3+vn4//v/fvp9\nfX96fnt7e3l6eXd6fnb+/n//f33+/Xr+fvv8fPt+evp+dPV7+vd383/+9374fXp9fF9c73Bu\n3/7m6W346Pxl/vdrenFr9/xnW3rnYOre69rs+9vfdG3ne2hva257amJ98GZu73t3+nN97m9s\n7vdt//R4/3569fV/efj0cvXxefn1/vv0f3X2/W348nL77nf17nr97H5673ty+/t4/Pl+//7+\n+vp/+vh9e/p8dP98evx8dXx8dnh7cXl7cHR8fXl++Pz++fn6+/r59f5/+Ph7f/x8fn//+vb9\n//f8f/b3+Pf2+Pj49vLw9fby9/r7+/93eHd6e2/8+XB68HtfYPReTm5fT1xdXWNhdPHu9NzV\n3tfQ1dfZ2d/m7ff4bWhzZWBoa2lpdn989O3p7ezl6+3t7/J/fP9ybnVub3t+8mpR9eg/YehC\nUWJRVlZva3v46M7f2sjP1M3L0drR2ePpfn1qWVtbVE9WWFFVX2Fiburs7dzZ29vX1t3d3eTt\n+PV3aW1qaWZnbGxud/v3ZVntdEZp/kdUY1RTWW5ka/no1+XZy9PUzMzU2M/a6ejydmNeX1pU\nVlpYVl9oZW7y6Ovk2tve3Nnd5eHl8n7/emtqa2tqa3Z89/lbWdpSQ99WQVtbTk5ebF56/drU\n5c3I0c/IydXQzt7p6v5rWlhZU05SWFFTX2ZldeXf49vS1dnW1Nzl4ed8cnFtZGJnaGdlevZ6\n7fVUX+BFR+xHRFxVTlVtbP7h5MzN1cbEzczIzt3Z33VpXVZTTk5RUlJcam365N3c2tbW2tzd\n5vL+eXJqanV+cP3n9/jm6fL06Pl+6WhIVe45PnE9PlNPWF3r287M0b6/y8HAytHT2nprXFlZ\nSk5XTVBbY2d459/g3dzc5OXg7u31fHx4d3b09PLn4unn3+j39v15ZGJoXmVkUkRuVDhOW0RK\nXHV4fdfWyszNw8TJy8zN3enucm9dWFhbWU9adGdm8ODfZevMU+bXV9/tXn7uamrw9X7y8e7u\n+vX3fH52bHNxZ2hta2t1a1leZ1RNXGVWYXpreunv9trY3tXQ19fU2d3Z4Orn73BtbWJlZ2Bm\nZ2VpaG91fPn48u7u8vLz+Pv6+/9+/359/Pr6/P5/fHp1eHdzcXR4cmxkX11WV1tbW19kZG54\n/urf3NnU1NTT1dfX2uDm7H5yb2lkaGZjZ2lpbXl4/u/z8u7u9fby/nx9enN4fnd9/n38+/v/\n+vn/+////fx7bmdjYFdVXVxZX2Jfb/xz8t3c3NXU1tLT29nX4+3rdGhza1xnd2RmfHNw8fh6\n6eb47ux7+v5ucXp4bXf/b3fzdXXs+XDv63T67vr06vdeWG5oSUxnU05nXVje3GrcytHQys/P\nzNbp4+hpXl9WVl5cWWn0/fHm5OTk5Ovp4vP+enn3ZXX9fX7/+/pdYNBjWslt89Nc1+Bf2e9g\nTD9tTTVITUVfWF3XzMfMzr29ysjL0tPuXldXX0xIWllbbHDm2dbY39nU5/nwfXxtamdq8vd3\n697e3d3e3t7oe3N+eWthbP3z9Vs8QOU+OEVBYU9b5WXBv9LGxby/0src59pcUExZb0pNXmHz\nde/n4M7Z7+rk3vppb3jo5u/05dbZ4uPi3N/vbWdsYF1VVF5fYGhs9/dIPFlOP0I/WU5412vM\nxb3Ay73DwsfR22bmdFJOT1lMVl1XZf3c7+vY29vo5PR56/P4dObf7Obv5uvw7X5zc35lXmhf\nX19fZmBudXl1S0NUUktISVZV7d7k2s3AxcXGx8jMytz7ef1sWFxWVlFbYFViavH97uDt5uXc\n6uzm6+z36Hx+/vLxa3/1b3D5a2Rrb2JjaGloZHN5dO/l62NRXGZaWlRYV2nr7+7k0s/Ozs7R\n0s7U3e7v+W1vYllWXl9cXWFoa/Xs7vTq5efn6+jv8Ozxe3Xzfnrz/Xp5/HtyZXFuaHJrb213\n+v7v5PFeUFtfWFhUV1Vs7fHw5dPTzs7P1NTP1t/s7HducmhcV2JgXl5kZWf89/x87OTp6Obp\n7uPi7fju9Xn093pz/3pvb3NubG9sbm58dHd98+pzW05WXVhYVFhZdefq593Rz83Nz9XU0djj\n7flvbW5oXFdeYV9hY2Vq9+zz9urm5+bm7fXl5fLw7/L17ux3bHNzcm9sa2dwdml0eHv77ubq\nWUpSVlJPTk9Oa+bm5dnNzMjIy9HPzdbl93liZ2xhWVhcXV5jZWFt+e/19uzn4uHl6ufh3+Tn\n6evx7+98bv9+a3FuZ2xzcWt5fPzt4d9SPUhLQ0RCSERu19vZyr7AvL3CzMjI23VeWE1TWE9N\nWWZgb+74d+Le6/jr+HXv7n585N/i3trh5t7i9H35b3N/dGRp+3V4dvf57+T+QzVCPzw9PUNE\n08zMyLu4ubW7w8/I1WZQS0ZFUE9NU+zi4Nra5OjZ9GFcYFdbbmhs6NPU0c3O1dPU43lzalxi\nZF1hdPl38eHe3t7eYDgzPzc4ODw+UcXKw7yztrSzvcvOzmBNRkI/SVRPWObO0MvP2+TgflFP\nT05OXWJm387Ny8fJzs/R6m9lW1VYXFlu8Org2t3e19bkbT0tOTczNjg/R8XBv7uysbOxvc3b\n1lpIQj8+SV1ZadnJy8jO3vD3ZExLSUtOYWv81srIx8bKztTbbV5ZVlJYYF584tve2Nvd2dv0\nSS8wOjE3Nj1A173Cu7axtbC6zd/cZElHPz9IZV9618vKx8zq+W1cS0tISlFjduzRysbFxc3P\n2edqWldSWltfZe7b29rZ3uLf6XBjPCw4NjQ6PEJPvr+/urS3tbbI3+LuTk5HQUhpcXHa0NDM\nzvL+ZV1NT01NV2f85M/NyMjJz9Lb8mlaWVNZXWVm8t7c6uPn7/PrcmNONTU7Nzs+Q0rVw8W+\nu7q7uMLT2N9jW1VJTWBrauTr5tvV5Xv4Y2BgXFVfbn/l2djSzM/W2d7/d2ZcWl5lY2lvfPjn\n6mdv83x3+25RPj5DPEFBREdY1dDIv7++ur3Hys7d7/hUT11cVltgYPbd6e/d6PDyblxlamt9\n6+re1Nzd2t/y72tgX2FfWFxiYvz4ZP7v7nD+bHvo7W1cT1JVTlJMWVt3cvzy3NjW0djW1NHe\n3/NqbndqX2/+6+Df6OPc3+To7O7o7Pr4+3jxeXB6d29sa2VjYmhiZGxoan/4dPp9cnl7c2p5\n7/Pzd3BhY1tUV1ZXYGJibPHn6t3c3uDc5O/d6+jl4+zf2+Td2tzb2d/h4Ob4fm1jaGlkY2tk\nY2xnXWtgYmZgZmL1Z/5yZe1u+n3593rtfvX/eG7yeWLvYmX9b11o81/m+Wl45upz13zq1e7p\n3OvY+tfkaMdNymTy2FLNSM5WcPtX61LbS9pR+OxM1EvldVPbT9VW3/1e0VnSWMtQzu1dzFHN\nT9FeaNRS2lrSTtJsYdtg6V3RTtJj8vF653TpZdhTzVLs00jIUuN9bv1o41vaUs1O2n5a1E7V\nXfPlV93rT8dI0vBOxEbLaV/QUtd0bt1e3VzaVttle+BX01jcYO3wW9VS2Fvob23aUM5W5vB1\n7XXtbuVh2Vbbb2TbVtZd5n368nTu+n597GnueW75/2rmZu13d+tl3mHmfm7lY+tzc+xl6G7+\n7W/ncfLzc+98fPpx+HH2fH7ydupz7/z8+X36ePRx/X94+v/+9v/yevT9fvl0+XP+eXj+dX96\ne359fv39/H7+enj+eXl8eXr/fP9//v3/+X77/vz6/X59f3t/fHx8fn98/n38/379fP98/357\nf/5+fvx+/f79+/9/f3x8fHp6enp5fHt8fn/9/fv8/Pf5+/v++///f39+ff5+/f3+/vz8/fz6\n/f37/v7+/v/+///9f35+fn19/nl+fX99fH59/v39+/v//P9+//7/fH16eHp7eX1/fP7/f35+\n/X//fn18fH98fn99/37+/v1/ff79/31/fP7+/v39/f77fv57fv18/f/+/n35fPx///x9+Xnz\nf/36efR29X/5/33va+xufnxsblFd20vhzlfDaNvOY9dv2VrmbV3lW35i5lzvdPRv6XH46G3u\nePFr82TvaXNubeJR01PWXurrbeZy5GfdaOZr3W5s4GR/9Pxo4nZ46HT7d+Ng7uxg53ln8nN+\n/W7vZN5d5HDtbOpx/txY2FveWt1h9336/HzkZdlb23N65u9q5mrfXNtsYdda+O5k+mvkWufy\nWthh6nvv7mDcc3Z/629t5WTu7Wtt4Gty6X/4bvrvYe/vavzqYXrfXfbt9GLeeHHn7G3o6fxs\n22d15WX4b+tf7/Fpcepo/Oxo/e1xcOZybOl9cPDpc+zoaPHtavvnZfzyae/vZuntZ+75ZvPv\nZXbmYXvnb27ebHLcbX/deW3bb2jm/F/r9mP57m537XJ56W5t6v5w8nt58mtw9W9u9Hdvf31u\n/nxw9vtx9PN1+e/8/PHv8uzz7+bt8unp9O7p8e/t9vD4evr6dnf9b3h8dXl+6uDvY091fzxM\ncEFFTlpQVvPw0NnTwMXJxb/H0MvU4vxlX1VNSU1MRk1WVVlr7ejc19PP09PS1d7n4fhub29o\nYW9vdfx+3+Pr3NjZcVpiVUk/QkY+PkRLTlB+2tDMxb2+vr6+wMrN1elnV1JNSUdJTExNT1lr\nZW3d2t/b0dTd293f6fj07/lu/ev1/e/j6vDo5env7u7w+vvq+kxBXFwzPlo+PkVmWmzW5b+/\nycC7u8zFwtPfbmZYUklFUU1JTl9sXvPh4dvh7uTcbGH5cF1baWlr/n7j2drc1M7Y29re7Pty\nYmhiV11qZWL67X1sXWFSTU1GS0lJTE9hYvXb08rKxcTExMrLz9jkc2lcVlFPUlJVWF5pYGD5\n+HD28+3s7vb76PV57+vq6+Xi5N7l6eHm8P7ze21xZ2RramJr+vrv9V1ZTk5UP0ZKSU9NYWzg\nz9fIw8HCxcLJy9Lp8mtcUE9PTlFQVV1peH3v6ef3fPJ7bGdnamttanrr6Obe2NfX2Nzc3Ob/\neXNmYGFfXV9hY2lwc3z69PF2YmFZTk1NSktOT1Zl++jXzszIxsfHyMzR1+F+aWBZVlZVVVle\nX2BnZXd9cnn07vXv7/Do5u7r4+Dg3+Lh3+X0/vl3cGZkZWJjYmBma21vb3b+9Xh19/BqYFVX\nWVJPT1laXXH+5tXPz8zJy8vN09vc6HdpX1xbW1VWXF9daGt09ezw7+fo5+nu7urt8fLx8u/u\n8Pvy+3t2c2hpa15hZGBgbl9me259+/379vf97fP47uz18+7v+X9sc25tZ2VpaXRsbm/38fL1\n7url7vf59Pf4e3Pv7+/v6Ojj4ubo5ubu8396eXNsbWppaWhnaGxqamhpaW5saWt6dP9+ef31\n9Xb3+/j9//7vfO90fvx773R7ePR6fvr9/el9+Hj3/nd+bf9w/2p7cf/8fHr96PPu/fLq7fnx\n9e7u9f/w8nHqZ/X9dXZ0d2l4Z21obWH+a3ht6mnlbe1u72Lq7fzt/+J7/PBx73ho+297cv7+\nae/6f3h662/bb/V5+vhzaPNv9f5d7fvyfO5v7/jqcfnqbvz3ZvBh513oavP6dvdp5GLibfH7\n4mriZuNf4mN983V062D0bO9l8W75/Oxm629w/v55ffZ9cv987/r87GrrZNxf5Gzubuhd313i\nauVq83LvcPj/dPJt51zgYep16GzyeP53d/p3aOle42Drb/N+evH9cvr5/P/+72zrafJw9Gzt\neP917m3nbOZ38Hn3entu9XFz8XV4+Hdz927xbXrvX+Bj63J+72vkZeZu83Xvfnrtf/7+fHZ+\n/W/uaN9c2l3tfmjrZOln+/78X9hU2Wf68X906WLcXuryYeBk7Gzw/2ndYu/8enR67GTkYuRi\n7O9a2VnfZehn6GfkZu7vY+d4c+ht8/ht417fbG/sa3XzafBv+n106Grtf3XyfXX3c+1o8/hp\n317lZ+pn9vVr8nt9dP3uZeJw+/zqXtta2VvdaWjYUNRY5Wnsaelj6270b+tk3l3ke2XaVNRe\n7upr8+di3V7kbfNv82HcVNpbf+RY11TZaHjuau5+/m/mbut5e+p29f508Hv1autl9H9q6mbo\nbnb2au1q7Gfz9GnydfnzdOtr6H107W3vfvVr62jobO9w8335dfd99316+P73a+Vf6Wn7Y/hl\nfnZu+m3qaO9s73zy9P/o7fTx7/R68m5z8HRj72lu62Dybu9r//hw8HL5behu6W7pd+5++P3h\naez1/vnze2zlZepr7F/tc2fvc3f7d/pv62R1/f1p63hy6Wt+++twfvd8dPpqf+tt9m5+e2nr\nXeRw/mX26mfn+P705Xty7Pxn63L/9Ptw/fH/aeRr8X3oaO3pXeFp8V3bXnf2a3557mH08HF7\n6Hb56Hh16Hh29/hs8e5wbOxqbf1rbu98Z+t993vvfe/1dXrtdHf5fHj4dmr2b3ly/v18+Xnx\n93fufPR++Xv8+XV5/fZ4d/Z0+vtu/HL+bv1vefn/c3zzc/r/e/b6fPj563fq83jt73P3/vv/\nfXF493Rsef5ufGp2e3hveX3//mt7+Htyen169XJv+Hxtb3x3/H1z+O75+vDr5+jp6d7i5OTl\n4ujv7unv+vv8fXdtZXtoYGtvZW1zaHPp7epmPk/xOz9HR01iT1fIx9TEvb+8wc3Hxu9dYlZN\nTkdKaWpc6NDQzc7Uzczk/+t2YFtVWGpiV3bp79/h7dnT5kgyXE0rPDc7Rk4+Z7vHybe3ta+6\nw7m87XxbSUlEODxNSEdf/NvIz9TDw9XY2OntalNZcGJZae/e29rb0czZ5uPf5Ww+Lk1DKTk0\nOUxPP/W3wsC2t7Ouu8W6v+12UkVKQzg8SUdKX2jZx8/SxcXO0N3n3f1ZXGtlYmZq39rf39TU\n2tvt++j+YkIxREotODg4TFJDXb7Ew7m7t6+5w7u9z9dtTFNNPT1EQUZPTV3Z3d/Ny8zIzdfP\n1vD+c2RnZFhgfHB67+nx3exq4GR4aG9cQEFRRTtGPkdaUE3yztTIxce9usHCv8XJzOZz/1tO\nTElJS0xKUV1n9uHb08/U2Nzk2mp37VHcU3NsWN5V72Z0bXt2afZt/HLy/PR6Xll0Xk1lT1xv\nYmV54O3d297Vz9TW0dfY2Ofu7e9wb2xibGtfYmlkaGplaXhwc/529/T59vXv8u/x9PDz9/r8\n//3/f3p7+33//nh7cWx8aGl2Zm9tb25xenT8/v/18O7u6unq6err7Ovv9PH6+ff/+vz++P7/\n/H3+fH18dnZ3dnF1c3F5eXd4e379+/X89Pb58vr5/316c3pvam5sanFwbXd3cHv+fPnz9PHu\n7uvs7e7t7O7v8e/x8PP6+Pn/enx6eHp5enV6fnd7fXV8/Ht8fX5+fv5++fj7+Pr5+v38+313\neHdvdHRvb3Zvb3t4df39evr4/PL19PH07vH07u/z7/Lz8/b6/P19fXx8e3h8fHh+fHh9fnd7\n/3p9f3p+/H37/nz5/3z7e//9ev7/eX79e319fH17eXd2enx6e3t4ff59+/j99vX49fP08PL0\n8fDz8fH2+Pf8/Pz//H1+/Xp8/H1/+3z+/Xz9/35+fH58en1+eX/8fH/8/vv7//z7/n7+fXt8\ndXR5dXN2dXd8/np3e3V4/X787+/v7/Lv8vjx8PLv7/by8/b0+vr7/vz8fnp5dnZ4/fx+//9/\ndnh+ef98fv90eX15/vr7+Pb3+n57cm5uaGtqaWttcm98/vvt6+nl5ebm6u/s7fLx+P79/3p+\n/n/+/v39+f77+P7///98/3p3fHZ7eXx7eHt6/n5++v39/vz99vv4+HFvY19hW15iXmBlZ2l5\n+/Pl4N/c29zb3N7e5O3v+nRzb2ttbW1ucXZ5+fj38fLw8PT5+f99fHh6eHt9/fn48PLw7vPz\n8fr+9X58+3NnXFhWUVNYVlZdYF9t+vDg2tjU0dLR09XX2d/o8XZvamNjYmNiY2Vnb3V5/vr5\n9Pb48vb59n1+/f5++fn27e/v6u3t7u/w9n//f3lkWVxWS09OUltRV25taezp39PU2c/P09PW\n2tfe9Pv2bGZrX2tvY2V+bmt2bXP4bW71/3b9eH/ydXrw7vTr6u3l7fXl7vjx9P/yc2/1eWdS\nTWJLP1NVUmtb/9j299DT1s/T08/c59rh/ft5a3FgX29tY3N4eX7+f/D6d/n+aFt+aFnfZfHf\nctvc+tre7uHrdeP6avfvaXf6eXru73NSSVlGNk9JPVpPXtv+28DMyb7Ex8jP19h7ZX5ZVGJW\nXGted+xs7ul58/ZrdmpeZmZhbHf+7url3t7g2t3k3+n693JrcGRjfWRl8Gj07nzd5lxQW1A4\nRGA5TGRM7fjlxM/JvsHGxcbU1eB2+FxWZVNVYl5mdnb97H346XNx/WNlZGFqaXb78+vj3t/b\n293c4ejsenN4Y2psYm5jeG1p63Ht4V5YWVY+P/Q6R+RGdenuytjHwcbFx8TY0tZ362RfY1Re\nXlxmb2pzfm/6enh/b25naGhncHb4++zm6N/e3d7e3+bn6/P9fW9taGlyYHp7Y+1+/ulpXldd\nRT7qPkHXRmTmfs7hx8fJxMfE1s3Q+d51a2FcXlpgXWppYnZpbHV1eXR2bG5sa3d4+/fx7Ork\n497f393j4uTr7vv6eWdxeWFp+GVn629ze1xWXkc/5j5F1URt7/zS7cbNy8fKxdvL1PTZfHpk\nZWBbal90aGn2X2x3ZG1tbWRpamVycPr98ubr5N/d3t3b4d7i6Of09Pl6b3Rwa3Jubnl5dWxp\nT1paPHhQPNlOWO910/3Kzc7HzcXYzs7s2vH1aWhsW25jb3hs+Gh0d1xvbFxmaWNgb3Jv/PDo\n7N/c39zb2t/e3ero6vD5f/Z4eH90dXV9cGZtXU1cTkReTEtjVmdu593czs/LzczL1NHX3ubx\n/mltZWZsanh0f/z9fnN7al9kZltea19lcXp+8+Pl4Nvc29zb3d/g5ejs7vT4+vj1f/31//97\nY3NWS2VIQ2RJSmdaYXvd29nMzcvMzcvW19rn9npxZGVkZmpr/vrz7Ovr7e75dWtpX1ZdW1Vb\nYWNi9e7v3dvY2dbV3Nzf5e77/m5uamtub//+8uvr6Ofp6ur1/HtmaVtTWU9OU09VWl9v+OLd\n1dHQzs/R1dnf6PB3bmpnaGduc33z7enn5Oft7/lvbGphYmNhZGlydv3v7Obk4OHl5enu835/\ndW92bXFzdX57+Pn78ff6/vl2cH1ub291dG78en/5/vP4/Pf2ff75e/r3+/Tw7e3p5+jm6enp\n7u/w8/h/fv9+d/9+e/F8/u18/nt6cV9bSHhfNc55N8RoXs3xyN3Lz9jI/N7YcV/+b1Z3YWz9\nc+fs2+rm2frx/m1mX15YXFldYmH/d/Pn597m3+Pr6fj1dm9vam9udnr58fHm7Ovvd/JyZG9k\namhrfnD08ezh59/i5uTu7/x9eG1vbGttcHN5+X798vr6+v79/nVxe29udnd6ef77+f779X/3\n/n38fPx6f/j99vny7/by8/H1/vl/en1zdXx0dXv+ff/x9/nw+Pv4/v/8+vX09PPu7Xt4+GJj\nZllaWltaX2hn/ezv3t7d3N/g7OzycHlvanl3ef/t6/z08ud8auh8cHx5+f16+e/t+fbo9fx+\nf/5vbXR2cGt1fnt8+ezy8e7r6O/w6uxwY3JdVU5GXVBCc2tl3eXTy9LV0c/ceul+ZWddY/lz\ncOXc3+Pc3e50a11cV1FcXl9p9uvh4N3c3OLt6fhxa2lrbG1yfu7s7+jo6+94eXVpZ2lsb3V1\n++nu8+TqfG5zXVhWUVBSVlVmb/Tj2tfT1NbV3OnzfmtkYWRkafv27N/f3tzf5+Tyc3ZsZmpq\nanZ7/fHu9fHx+vl9d3N2bXJ6cnv49fXu+vnr+213dl9mXWJrRjvSWDXOXmzH9uy+xG7Myuvc\n403n3k9Z4O747l3o019a4e9sal1m32VZ7OT07Pzx1O1j7Olyb2dp6O9k997t8Pn+4ulnbP17\nbFxfcHJhYnN+bmr4/Us+3k856k15zGfjwMXZyM3Zyt5S6+pUW15Q+vFP+d3q39/83dhcZPhl\naWpce95tetvk39559N97ZXNra3JcXPh6af5yfed2bPxycnhiXGlbQUhrQ0x0TM7WbcnLy8vK\n2NPK/PjpZnhzXF12a2X+cPnc8/zq/nt7ZWZwaWVtamp8dHL4/v31+fHr7e/p7fHw+vz6e3v/\nd3d0c3R2dnZ9dnd8eHJrXlhbWVZeZl5n/n70393a1dbV1dna29/n7XdtaWJgaGdncnR3+fX1\n7ezv7vR+fnlzdW9rbnFwevv48ezt7ezv7/D1+P56dXRwcHRydHd0ePx5aWRdXFxbXmRkZHR9\n++Xf3tjW2NbY29rc4+fzc25rZGdsaG51dHv49/Ls8PPx+n3/e3V6dm90en348/Ht7ezs7/Du\n7/f7f3Nycm9vb3FxdHf/+HdpYl5eXF1iZ2Vs/n7w4d/c19fX1dnb2t7k6PN2cWpkaGppbG9u\ncXl++PX59vf+f/7+/Pr8fX78+fbw7Ovt7O3w8/P2/Hp0dG9ubm9vb3RzdH76fG5nX1xZWl5o\nZmR6/3vi3+LX19jV19vc3OHi6f98c2ppaWdpc2ppcm99/fz//PR/+PN99/X79/v99e/08uzw\n7u739PL5//19dXdubnRvb3p9/fl8XlhkYFlcWV76ZGZvb+nZ1dvRzNHO1eTj4/tvZltbXl1b\nZnP84ufs4N7o6fFyfX1pa3Jv/PH87ubo5ePu6uj/eW9sbHBqZnt+e3t49u/3/nnt5OR0TEtT\nTEhLSVzj5d/VzsvEytHNztXZ82Bsc2RfZGX98W5z/vzz+WpodXBramdy8u/z7OPe3N/q6Obs\n8v12e/V8b3R0fPZ0bf70emxtYGtta2NsfO/a3VxJXFBKUEVL/ert2dPRxMTOzMvS0dhoX3Zi\nX2VeZO3ub3n6fev2YWt3a2xsZHPo7Ozi5N3Z4Ozo6vTzc2l5/npyeX9/bnZyYn9taW91Z3B1\nYHB4cfLo4t5dUHZLWlRMWP7k9dDa0snL1M7R2tfdbnF3YmpuX2P4cGh+d27m93Xw7nnz9W/v\n5uzi3+Xh3e717v5++HJrem1qaWpiZ2tgaWlje2pq+nn3/vdx/vL67f3r6d7leG7qfHd7a3vq\n6X7v6/Dm5Pjr4+jo7P717fhubm5wfnpye+7v6+3z7+ju8fDu8+rtfPz9fHRwamt6dW14cG98\nbWNpbnx1emx+/vj5d+z+7vr0d+/sd+ly4fXn+vn76PTw5mvgdeVj4GPqdP1t9Hp+9m3vZeRd\n5VzfV9hU21vbYNph12fYbeDu+uVz6W188m36eOlq7e13+Pd3fG/rZu9wcnL2avJt83X/727j\nat9r4f3732rhb/f/dHR/ae53a+dl3m3q6nTdaeNu/H5q5WHoe2bjYOhr+u9j2lfVYfDkWtVX\n1GZ621jSWt14b9te2HR73V7aW91hZ95U2lvlanriVNJX4Xv86GTbXuV8/P1993niduV25nv/\n5mDke3PpY91h6+1Qxz/AQ8xlTr47vkjXcVvKQ8ZS69tSzE7RbWTPTs1V9NxOz1Xu+F/SUMtP\n1OhWyUXDSdrdS8pO3vpVyEvgzUPFVn3US8hM3OtU0mBv3/xs4elteNJOzU3OV1/KRMhK1Vr1\n6lfOS8hN7s9HwkrW2kW9Ps/cRLw9v0voxzy5P8zfR75C2dNJ2tZK5sg7vVtEtTXE2kDBV2bt\n1krN3z+9UU3FWlzh2U/d30rFT1rCSVy7Os/BNLdbQr1SWs5wWNvrT9ziS81sSr5A7r4ytlg+\ntT7uxkDL5knCSuLdTs9Z7mrWV/PQSMlbdttQyUrnyz/K5EPGekbF70LCc0fFbE/S3UrW3U3Y\ndmPeXenlU9FrU8xgUs/nTdPpWd9v7GbwfPrlW9JW889GzfRS2u5ic9lf+vH9+H5j3nxd4HNu\nd+Vrb91c5+VV1XVi42jn+lrW/VnZf29u4upY2Gpt42npbXjhZGrda2337HZh3HVf4vJobd/+\nWd3nWujkZfnsfXD75mtw6Hht6P9r7fFqfuhvdfLyb3Lmdm/y+Hp49fJs//F4e371fXj7/X7x\n/H31/vj89nx98Hd3fv31bnfrbnn9+/5x73t2+/Z5ee56/H156nlx8PN5cOnvaO/ubX709m18\n6HRs8O5seOp1ffl6fPT6cnfnfWno/nj8+/Vzcej8Z+35be93ceVnbt52Zufma3Lt42dn23he\n799fZ9x0X+fpZWHZ7Fno5HRs7+JvX9/1Yehz/n37dO93ZdtZ4eNR0W1c121n7t5Y5O9g5exe\nb9Ffbul06Wlo3eNN1/ll317ZVuXieFTizEbb4WN96Gxey1JXxVZPwUvl2VDPV+dvcWnu3UnJ\nYk7FT+Zu5utZzlHVVd/qT8tFyt09wN5A2cFBX8flQea5O1u5SU3N92RYzmNPwkPpvzfBzjnE\n2T/BVljIRMBKQbw/Zb1I7rxaadrbbVfW+1F3zltOzWzvaunUSszsUttqbO1YbfxY32xc32r+\n7Vfa9F3r4WFy0V584n3aXOHaUNTvWN5j3fZc1m/8e+lvX9pg8u9u7vv1d3D9eGXsfmTqbHbr\nY/fvcXz/+Wls821g/O5ide1levVvdXvu/fvg9O/f6/Lj5ezf5uXm7d/u6u196O/v8nf69XFk\ncXxrbHdpYnVoX3B//PntVDtCWkI/SUxg5szO1727wsPGzNXoeU9JU05MV2jl2M3Jz8zL1+h8\nbmBbXl1h9Ono39rY4OHj83VjZF1VW2JfakEtQmQyRENL3926386wvr3Dysnvy/5FXVtWTVBv\nXN/N4dzPzeJt+ltaZ1xba9jY38/Q1M/Z8nDudlpiamZofG9t6d/gWjAvWjc0PjpjdbzF4rG1\nt73HxnDO+kNLTV5LUXln1MrN2NHK4m1hVFNbYVZr1M/Sz83T09f1YWh9WVVkZ3v79Xf03d76\nOyw9RS87OkvvxLnXubK1uszGdOnlSUZJc1tZ/vfQzsnc5tDma1FSUVh1XG/Zy8zQzNbY2e9e\nWHBmXmFl9OLe5+/u7OjuTS4sRzYzPUB+0rO/yLKzt8nK7lflWUZFbu1r7OvY1MrXaeLrcFZR\nU1X8+nDkzcrP09jk5u9jVV9+b25v8ODe3vf26X90eF03KTlAMT0+Zd26tdC4tLfHz9tP/29Q\nRmHX5tnq59bS2l9heW5dU1NZ7+V/6NPKzdTZ6uTlbVhZ931v8fXo3NjvZvbsZmNzSS0rRzc0\nQUjpzLHBxbW2vdDNW1fxXkpO397Wzt5z1c9nV1tkWWJYT2Pi3PPb087O1eF76PZmXGD56OTv\n5Nzc5Gp0ZmplW2NUNSk8PTZAQOzbtrrHu7e61NNjV2/1XE/dzszO0nlk22pLTFteX31eYN7Q\n6Xrb19va32zz3e1kaufk3eTx8+TgaGBfW2ptemRDLTNJNz0/X+W+uM3CvbvQ33hXeuF/VejN\nzM3P41vo4UxMVGZf/3lb4tHcbujb3t3fdm/c5Gpm9ejg3uv38uF3VmxvXmJy/0gwL0U7O0NM\n38O4yse8vcre/lNz4nJW9s/NzNPzc9nvTk9YX2h5YF7c1et+5N7a2ux269zvZWh86N3reerc\n6HJeYmxeYWtySC4zTDk8QVPowLrWw7q9z9j+WeniW1Pf0tHO0+991HhLV19hY3teZdjcfHvc\n3tvd6/Xf3XNra/zf43v75enrbl5hcmdff1k/LjpJNT5EX9q/wNS8ur/S1vR33m5QXtnc29be\n6djYWVdwYVtdXln25m183dnb197f2tx/bv1vffv/fOfg8np0eHxnWFpvaD8uO002PkFV3MLG\n3Lu5vs3O39/UX05g43bz5O3g0t5jeOdtYmBbX25nXXbl4tzY29XT3/Ht9mtubmp57X1z8vh6\nfWteb3plVjs3VD42Q0Ra59DqzLm/xsPGzMjVYm/nYVhjXV7wf2bz3+Tt4u/063dia3JlcPt6\n7N7q7N7j9+75bHz+ZGt1ZmtpaG5waWz+fntLRGxMP0xGTl9qW/bL0dHKysnDydTOzt/w9WFc\nZVdPW11bZnp/5trj4dvj9O36bX58aGx8cXL/ff3q7v3p7u9+cPRzc2lqbm99bF5LTm5HR1RK\nXmFfYODQ49TOzcrIztDL0uDi7XJuYVdYXVdYYGVy7Ozv4eHx8uz8/vh3cHv+anf3dPb59evo\n7O7n7vT6d3JzbWVpdv1kSUx4SEFQSVZkXGTfzd/UyszIys7Qzc/w7ulmbV5TXmRYWGhwcPP8\n79/oefPqev57dPh9Zvf47ud93vXj6H3yau9aaOlj6fH85+Hs5dtSPVxbNENGQF5SVejBzdG9\nwcDBytHJ2FlhZFRPU05ab1lq6ODk4t3i3fRqeHJoX2r78fTu4Nze5t/d5u7+dnhoXmVqZWhx\nfXR96+rx4/1CPGZDMEdCRmNV+cq7y8S5vr/FzdLQb0xbWExLVGRy73Lr0tt08+hwZFdWYF9X\nXfDh5t3U0NPc397ne2NqdWReY255dG7u5Ox99+pzbW9+6+9VPD78PTBRSl1e787EuNHCur/K\n287o7ltJXWBTTn7b5OTs3tfrV2D/XlFQX2ZpaHPa0t3d0tLe+vX8b2RcaXluafzl7fn58uj+\nYnF+dFxac3B1buTX70g8ZlszREf/cE/Hzry/zMO+wunn3+paTFVcZV5i49Pb/O/d7VxUWWFY\nUFdv6fP23c7T3t3c3HlkZG1qXmb+6e/069/qeWpue1teXGxqYG918frv5t/e4/lqPTzfOztN\nUsxZx8bEuMXLzsLeW2FcYk9VWXbf6OLez95ddmtWVE1YWGRxa97V1t/W0+Hpd3tpZ2dhfu/s\n7ujh6/twbWphXlheY2JuZ+fp4d9o4erwd3Hgc/1ZOT/WPUFU78jzv9fEus/p9M1xXVdcfHru\nX+HQ2u9z52tcVU9UXWBabd/d4d7d3N/n/njydW1sfu3u6+/o6O19cHhnXV9oXmN4dWnw4nL6\n6PFjbvlueezsf+frSDhkYz1YU8/XxsbyvcXVaPPoYHRYXXTY5Xna2djxaWBXW1VOVWZ9f+/e\n3Nre7Pn072lqdfnv+e3q293t7+/vdWZeX2ViYGx+cnh9/vt3dXd8a/p89ebt73TtVTpDfEFS\nW+POyr7vycbS+GD+WvJzY2vY0uPb4d7h7l1OV1lOUVpj+t/g7d7b6nlycm/7/Hfp3d7n5OTt\n6vNzd352bm1sbntua3F2a2xubW91fm76+ez+fXBqXD5DXEpZXejRysHZzszT5HFxYuntf/7f\n2Nza8PLs9WZaWlFYYFhccOnr6Onz6el4anv68u7p597b4ejp6u/4+Xj/8XZrbm5vd3JlZH9u\nYm1uZ3R8cn/6bFxpVURLXE9mfuDUy8naz9Te6PhtbOfu7+be3Nvc8PTueGViXlVXX1xbanf3\n6+v38On6e317+Oro6+He4eTi7PDo83x6fn12c2hkcnRfZ3Rwcm1oaHJrZWZqcX71bW1vWFlh\nXGdz6uHZ1t3b29/l5/Dr5ejs6+fs7e79cGhfYmJiZm7/9/f2/vTx/nd4/Pbz9u/t6ens7e7u\n7/D7/Hp6dmtva29ycv1taHNsamhnamlqemp793bxfvbv8vLv8/74/Pd6/nl5/Xp5dHx6fXp+\n+vj39/b38PLy8vHx8/P19fj4+Pv/f/79/P79/X5+fHt6eXl2d3Btbm5wb251eHN2dHV5c3N0\nfvf6+Pr07/l5d37++ff9+vDyfnl2/ff+/v748/p8en79/nt4//z7enZ8fX14eX/8+3t6fH78\nfHx9/Pj8fv/+/n16fHz8/Xp8fn98eXt8fv39/vz4/P5//fz+/33//f97ffv9/v5+/Pv+/f3+\n/P1//3/7/vz9//9//n3//v7+f/98//59fn99e319fX9+fn59/318fnx8e3p7enz/fX77+vv7\n+fj3+fz6+vv+/f3//nx8e318eXx7fn1+/3/8/Pn5+Pn7+P38/v7+ff59/359fn1+fHz///3+\n/v79+vv8/Pv7+fv8/3//eXx7e3x7/339/X3//vz9/H58fnt6eXt6fH1/+//9//z7fP37fHz4\neXr+e/94fn55/Hz9fn36fH77fn3/+Xx8/f58fft2fXt8ff37d/x9fv3++Hz6//z+//X//Pv9\n+nn5/3j8e/1+fft9fnt+/v1/+/76+vz7ffd9fvh+//v7fHr+/nl5/H18fX/5e330/f33+vx8\n+3/6+Xp+/H19+ft4//t5/f5+/vv+e/v2e35++vt8/nt8enx+eH7/fHp/+/7+fvd9ev56fH17\nenx8/3v8/nr4/v58fv51/Hd4+3379vr6+vr99v53+/54fHz8d3n9dvv5fvr1/fr+9/v893z/\n/Xt6fv16dvp9/ft7+v39+ft5+/p9efr9dvx3e/57f/55evx3/Ph8/n7+fnp+ffh5fn7/9XT6\nfHz//fd2+np+fnn+/v1///7++n11+nb/e3T5cnt/fPz/fHz6/3f8eX/4+vF5/PT6//52evr/\nenR/+n15cXv8e/p4fPlzfX15e376/vv6/vf4+/f29v97/vT8cft8cf58fPz8+P788X56fXr8\nenh6e/L5fv379XF5/X/8dv35/X9++fj7ffr08Pr+fn5+fHV4fPz9c/97fP/7ef34d377/Xz+\neP97en/9dW/2f//8fPl2fPn1e3b6dn50+u927vz8fXXvdnJ89/xydvl6/fZy+Xl9+2zx+XXz\ndfp6/Pd29nN4+v/5cW/+f/R5ffd28nx+d3T4/n548Pt1fHl9fHT/+vh/fvh+/HT68Hz/b37+\nff5t8/5z/Xb3//z5eHj99HH2+Hvzc/x/b/1u+vN89nP59v5weP52fXh6fv3y9Xp++31zdP14\nfvx4/nf8+fvw+vt8/vJ6e3B7/P7+eHV0e/r+bnx6f/38/Pr1/vLveXz9ffdtenZ4/Xf5dPnu\n+3p++3V/93R2enVxffv+7ft3+vn283f89nn7/vB0dfZ9/X1+fHz9/Xl99v//+n3ze23/+v99\n+vR9df35fPH/efT2fX37//rx8X3+dn98cv7ye3v8dn74f37+evry9X35/X56fPJvfHf4827v\neH73bvxw+PHu+n7q/Pj983d7/XP3eHpvdfX/fHr4+Hx09e16fO71fX197nx58nn0fX/3fO9w\ndf1+fnd7cf389fT+9n5x++92a/rvf3py/f79fPrx8+38+/X4fvx++/hyevh0b353/XZufnr9\ne3z2//z9fXd2/X3yfHvre3l2e/h+/HD++W559e79d/d2//13fXb5+XZ9/Pz9//FzdfZ1+XJq\n+P5t9e/7/n7qb2/zevl4fvf99Hh6+n92ePx5fm3++Hv5/u99e/P+eXh/fHp+enD59HX+bvn4\ncfpu+3l6fXjwevF/+Odt9/11/Hxybv3/bv33+Pf/7PN2ev76em7y+HN1eXlz/mx5e3H5e/d9\n/Pj+/Hvvf/r89fdy7fr5dm/p/nP+ffX8dHz08XZ37/x2/n59f3129v76e2347nt67vvzfnl+\nf3py+Pr4fPbx/Pp4/Xnye3L/+u11/3j8/nr4dv19+Xx6+vl6e/v8fvv5fPN6+/X2/nz5+vN3\n+v978XV87v76+XZ7cnp4cnx8/G3//nf9/PL9fnv3d332df3zev798vF2en30bnV9d/Z4eHb1\n/3P3+/t4d/Z4fnBwef/u9Pp78vdwdvPy9G799Wt4enn99Hx76f5td331a2j8/Px7/nzu63b+\n8PBvePL8bXL5f/tx/P/5fGn49354b/b7fHdz7/N5fPv++3N59nT+fv73c/t3+e7+9XH+7m96\n++9vZfbwbW/8fvh6dfZ7cOx7fftv8Xb5fHjxfP58e3z+8/J2+Ox1/vVv9X1w83f7/vl3fvpr\n6HP9/W7rZ3v8dvb69/n0ffvrcfbub/HufnDyeXT6eO//bnv0/m59fm159H13/O3wfvXf823x\n+nJue3n+dXHse3Tz/W706Hj79Pn8cnZ57e9x9/5r8nZ783Pt/Xr593B/+H9+cu/v7HD56+57\neXlu9XBqdHl57Htv7/p1ffz683r9ffX78/d8/Pf4d//ybPTpa/h+/vh9d3nxdPJ5c+77fvTy\nfm/6+Ht7evTvdXf3fn99fXl5fvdufO5t8XD06W3u9Hx48Pd5/PJ3/etqcfb8f3d67vR8dv3+\ndv7u+Wz/72317mz+4XV962r17HJvePz/+/N1dPN3fnh7evn7aurrdPHr9u/x/ffwePZrb/pr\nbWh+/Hdw7/l7/Hx4/Pv/d3z/fO577/d49u7/dfN1ce5uZfr//Wr7/X3ucfl5+fdu9vt69G/+\n7Xx19f979XH7+XBt/Xx573Z49fR8b3rzeHl4+Xb97mv/73h982968mzu6Wtz7/Z5eHj3+Hb5\nf3j8b/1+/Xl+d2zmb3Dxfuz2cffyem56dHnmZW7veX19//T8e+v7dnr2bv7ub/7v9n9vc/37\neGrz/3V9/m1z63F67PZp6/9w8HDz8n109fz1e3H1+PJ3e3b19f5v+e10en3rfnZ3evX8/3d7\n8H55/fj+dvfv+HXyevn/avj7fX3+ee5+ePZ69Hl4cH7ua3Xq/vzvf/z48Hj45m156HRtfHhu\n7nRr6/z473p19e52eH51+vpxbPTq+3b88vZ9+fd57XN38n50f/f072918fhzdX79/Gp8eP3z\nfnn+53J27f709Hb69W558fp/+Pn8/vv++3ly//zzdP7ueXp++X5+73Rw9vlz+3py8n/+e/X6\n/fd98Pd7+/R6eHt4fvlyeH579nV+e/n7cv7/+PV9ePz1/318dfB6dX7++nR2dfJ8fn1y8f5v\nefv1ffr5eO3senD8+Hn9b3l/enZsfHn0+3b89vh5+/l9/Pp1fvRudPP/fPr7e356d/l2dH35\n/Hv5+//0fnn9fvt1ffh5dnj383Z5dv/vc2/98//+dnf09X97+O/7bnx2c3x2/P56fnj++Pn/\n+PP79HZze/Z5cvX28/p8e/v6/Hv4+n19eX17fP/x/fTwfvz+fnt5/n52enl7fXb/fvz8+fJ8\n+vX58vT5+u/0e3h++3p7enj+fXn9///5/Ht8//58//l6+/n6/fv3efv6e31+fX/4/n18f/3+\n//38+PJ9/fX19/v/evv9fHp8f3z8/XZ5+vp6eX399/58/fP0e3759vr+enn+eHR2dXz8/fv3\n8/r7fXl//3t1enr/e3v/e3p7/f76/f36fH9+9/t79vf6/fx8fP58enN3dHV8e318ff/8+/79\n/fz5fnv+fnp6e318fn98//1+/v3+//36fnx7fPz+fX/7+/3/ffz8fn3/+v98d3l9fHx5/v7+\nfXl9f/77fnp+/P/+/Pv++/j89/Z8fvn4//r7fv59enj9/X1//f5+/3t9//5+ff7++fz9+Pv5\n+/z6f/99e3l9/f35+/v8/X18fX38/f3++/j9/v3+/3x7ent+e3p8fH3//31/fv1/ff/8+/r6\n/fx+fX95fX7/f35/enx6en5+/f/+/33/fn5+fn59fn1+fH5/f/7+/f79/f9/fn5+/319ent7\nen96e/99fn/+fv79/Pr6+fj3+vr5/v5+fXx9fXv/fn3+fv1/fv7//f38/Pv9+/j6+v79/35/\nfH19fnz/fnz//f78+vv+/Pz9/v9+fn3+/379/v78/vv+fXx8fH17ent7ent+/n1+/n39/vv/\nf/5+/3/+///9ff1/fn59fHx9fn5+fXz//X5+fXz/fnt9//9/f/79/v39/Pv8/Pz+/fv9/f9/\n/37+/n7+f/5+/v1+//79/v79/P7+/P7//Xx8en19fX5//378//79/////f///nt7fHt9fHt8\nf35+f35+/fv++v3+/P9/fHx+fHp8fXt9fHx9f/3/+vz9/f36/f3+f//+/f3+/f/+/f7+fnt+\nfHz/ff7+/Pr6+vz5+vv8/v59fX9+f35+fX59f/96enh7fH7+fX1+fn5/f33+/vr7/Pt+/35/\n////fH99fn59end9///+/n79+Xz7fHb7d37+eXx9fX58+vz99f37f379fvv9fX17ff359vz9\n/f77/v3//3//fnt+/v19f/9+fnz/ff35+vj3+Pr4+/j5/n14e3t9fXl4eHz/ff58fXt5fH3/\n/v3//fv9+/3+/Pn3+f19eXl6eHl8e/99ent5e37+//7+fH1+//z7/P7+/Pj29vl/fX3+/P36\nfn18/f38/Hz/fv7+//r9/X9/fn7+//78+v99///9+/7+/vz+f316fH3+/v1+eXx6ff//fX59\nfv9//nt+e3p+e/9+/fz+/nh8e339+vv9+35+f379/fn89vj+fXt7eP18dXlzcn7//v38e3l/\n//v5+37++/38/Hp6fX18fXp3e/5+/ft+fHt++vj6+P56fHp8//59ef7+/fz//376+Pb6/3p4\nenz7f357eHt+/X9/f3l8fn58fHt3/fv39PT5/Pj7+Pr5/f78/fj+fXl7/fv4+vp++/r5+f77\n+/f29vv7/n36+vr8f3Z6c29tZ2lobG9vbWpram1ub3Nwdnn79O7t7uvq6Orp6+zq6+rp6+zr\n7e3u8vP18vHw+3dxbnJ6e3Nvb3B4d2tmZWRpbmZXUEtCQFVg6MXWytXa4ezfXuj+59TQ1uvx\nXl56bf3u9vvr5//3bWFpc3Z78XJxfnz68fXz5+Xg3ul1e3j+6+jq+vRqaXNnbF9KQj06Tlrc\nyNLL3tbr6vNbdHLd0MrO23xdX2T9fu/t7eHj5n1sZWV2+vX5f3F4+/jx+/z+8+nm4uz+dX32\n4+Ln7XBta3VtX0c4NTpKbcjKzM7k2eXlX19ifs/Jx83ZcVxdY2X8/vXh4Ob3dF9iaGl6+v/+\n9f/89H9++X759fb37evu6vH27uvm5+f3aGxqd/NiQjU0OUnqys3K19zW3fBbXVnmzMfHzeNe\nZWZleGpx6t7e4fBiY2ZqeX5zbn59+/N/dXZ4ffT8fvv4+fL2+fft5OTl7vlvbGty+GtGNTM4\nRvDMzMzQ3dXa+V1bXOnLx8jN32RhZ19ram7n3Nzk9GVja256dnRz+/d//XBxff35+nx1e37/\n+Pr16+bg4O59b2Z8/vj7eW0/MzQ5SeHNzMjP1tHdZ1paXdnKycjO6mZsY15pZHve2d3jfWNr\na2xta2h09/rzf3Nz/vn59Hl2fv707/j17+3s8vl0am929fr27edsOzA0OlTUzcvLz9PO4VpU\nVWjRx8nL1PdsdWJcY2X12tjj7m5jc3JmYWRjeez0/Xtye/D7enZvdPPt+Pl5+ent8X5veHVt\nfn1xc/nv6Gg7MjQ7V9rO0MrPz8/pWlVccM/Lzc7U6Xd5XVpfaOra2+jufG58bV9fZG727X13\nd3T/+nNudnr28PV+c3n67OXx7e1vfXZteGx19u/o7lU7MzdAW9nU0s3PztXuWlxp5s/Mzc/S\n4f9qWlpib+rf4Orq9nx2ZF5fanL39P/6/v97dW14+/z6fHr9+O7s+fP4++j6enhpcXTv9ezo\n8l49MzY+UN7Y183Mzc/mW1pq79LN0M/P2OR5W1ZfcPvj7fDu8Pp1ZFleZG56/f787ff7fW92\n/Pp/+f599fH0/vx6++n2921ibnN4fHvv3+RYODI5QGfi6dbOy8zOdldfaOLS0tjP0NjbdlpZ\nY3H38XP57Ojtdl5aX2dvdHJ48+zy+XFsd/77/f9+9e3z7vZ69uf39/lofWpkZm179trZdj4z\nNj1Qbn7fzcnGy+NeXGb33Nzb0c3P1eVmXl9qc3Fydevo5vpnXl1kamxsdPfs7fd7dX7693tz\nevbt8/x3e/X18e72e2toam1sd/713n9GNjc9SW9l59LNyMvVZ2pqfN3e3djP0tHY+21jX2xv\nZWlz/e3tbmBfXmVuamt/8+zp83R9/Pr2en327Orq8P9+7+ry8f5tbnFta2pneuTgeT82Oz1P\nW13n3MvKx9Xu7Xbn5uXw49vb0tni9HlvbG9fY2Vr+v90ZGhqbnptaWpudvD5en/+9vbw+/Tz\n+u7w9Pz58fP7bmtqZmRoZmdwcu3keks9P0FLUVRyfdrOysvU1N3Y2OHqfn986uHl7H769O75\neG5oa2poYF9jant7eXZ6+fPx+311dHt++vj3+/X3/f52dXV4c2xsaWtrbW5wev3w/F1MSUxO\nT1FbX2vp3tna19XSz9XY3+nv8vJ/d2tqdf/49/T59u/8eGxpaGhnY2NjZ250eHl5/vz69fT4\n+v38+/r7+Pn6/3RwdG9wdG9wdHF2e2taVFpZVVVaWVtna3H37eXa1dfW19vb3N/m8Xt0dW5s\nbm1tdH95e/16ffx3cW5samxtbGxtcHb+/PXv7+zs7e/v9Pb0/HpycHBubm1wdXZ6bFtXXVpU\nV1xaXWhpcPbq4NrX2djY29rb3+js+Hl4cW1ucXZ5fnd3/vz8/Xpyb29tbW1ra291ef338+/r\n7O3u8O/y9fb+eHZ1bmxvcXF1eXRlWlpcWFdcYF1lbGt87eTe2tja2Nnb3N7k7O38d3l0dnj8\n/X/6//76+/19enNubm1ubmxtcXN3/vTy8e7v7u3v7/P3+v55dXRwcHBwcHRvYlpZWlZXW19g\nZXF3/+rf3NvX19jX2t3f4+ry+3hzdXp5ffz8/Pz6+fr6f3hyb25ucW9vcHZ+/PPv7u7r6+3t\n7u/x9f14cW9vbW9vb3J0bF5ZWFdZW11eYmpufO7l3trY19bY2dre4eft+Xx3c3Z5ev79/fz6\n+Pn3+f56dXRwb25tb3J2fP/59fTw7+7t7e7u9Pv+d3BvbW1vcHFvZl5bWlpbXl5ia21z+u7n\n3tza2NjZ2tzf4uju9v94dXd5ev359vj+/Pz7+397dXFubW5tb3R4/vn49vT09PHw8/P2/H56\nc3JycHFwb3NvZ2FeXV1fYWVrbnF88+zl4N7b2tvc3d7g4+ru+H11dHV1eXr/+vj4+vf6/P17\neHVvbW5ubm5wdXl9/vz6+Pj5+P3/fHh6eHl6eHp3fHx9/n3/d29ua2ptcHF5fPXffF/o5tnY\n6+3s39/sfnjy6vNyb//x9Hp3+vD9cG94fHRtb3p7dHF6enl8fPx/ff7/fnz4+/Xs9PHt7fHw\n7fDv7vn++357fn57e3x5enl4d3d3dHd3dXh2d3x+/vnz8e/u7Ozt7e3t7e3v9PT4+fv8/33+\nf//+/319fXp6eXd2d3l2ent7/Xx/+n/5+Pv2+Pz6+n1jWtDgUslkZc5Q2uda12t04mT59m/6\ndXv+e+32dun9eO53de1jTXfPX+heZs5OzvD8x03N9WTPS9v0XOpY3mHr/FrQX2DRUdTfW9dw\n6Otd42pv8F9w7VzpZmjVUdpmaddN2mL763nf+N1p2vZ24ede11/iaOrsVctN0WHy7Gnsb/7x\nYOVzXdJQ11nbW+J8at5i3lzXXtlf63T4/HDiV81P2Gpy5lfZT9hV4WLg53vVaNpt6nnsb+Bp\nfOBd3G765l7SVebsVNBN3mlk3VLZaWbSV9zvc91t3Wzo9uxk3F3m9mneZtdf2mPfdvvrZtpX\n2Ffje1zjVWheWVZXWVReZl3u7OPa0dPSy9bP09jf3Ov66Wh/+W5x5XN23v5p4/Ve7nlcae5g\na/Jpa+H7c95WP1NTPk1GRFnoY3nKzsW+xMq/xM/O3mt7c1BTWVNbaFxe6+555vL86Otpb/1s\n/flz79/m5Nzf3tzj7Ojt/vV6b374dHB6b3bv7et7P0NUPEpCP0Z3eWLNz8m+vsrDw87P1G1j\ne1pVXFZUc29m9Ofu5t7++Od9b/R2c+fw+uXk6d7h7+vsdXT+bXl8cG5rb19hZmFxfW9uV0pU\nUEtWVFdq5+vl1NXSy8/U0tXc3d/6ffdzbnBqd/nt+u/s8O/z/Hzzf3789u/u7/j17O/49Xd4\nemVpa2lkdGVge3FlcPpg+fFo6/Xt7dntbeJra2pjVl9cXF1idm7l7ejf3+Dp5evt4u/46+/m\n6OLn39/j4ejl7O999236aGbxX/Jk9Vx1aGJke15tZX5p7mr9//r8be5a3Gdv7nzt+ur+5u3o\n5m/qbupu31vob2PrWv9r/Gt97nns7G3id+z97fRu2l3bat1w3+p222Pndudv523rbuxwb/Ny\nZvNd/1/4ZHN7XeNZ7H78dOhj2V3SXOfnXOJycfn3dvxz6F/ZZvfm8vV2313aXthZ5+le3m3n\naNxj+up7dP77Xd5g7H349G7jbXjmcP7zdnJ89WDm+Gjk7mfk9m7u6GN++Wdt/GD0cfNy/ele\n2l/m+/fzattZ1VnnbXrnV85U1V7YYOf/cu9i41ncV+Zm/W/vd3bq+2/la+pz9Pdo4Wjz9m//\n517cYelj7HRu+XJ3bu9e5Pdr53Z78WTeWd9m9nz+f/DucfD2ePv1aO3vX9xb3WHgaup68n1o\n6l3fVuFd/35u8mHdXuF9dexo3V7faupt3mPz5mHaWttd3lzhafb+fmXeWd1e6m9p4FvkYd5c\n313dW9dY1FbYXeZv93Zp3FPWWt1j7e9b0k/QVt59Z9dY2l3STMxP3n1c1EvNUeN3bu9f2E7S\nWfb8cvFu6Wn28G/362zja+npWNBfbtVQ1F729GPnWtRP1lx82krDQcpcYtBLzVPh/mfeZex5\n/vJ1+PZred9Y3/Zc1Vjl71vTWXnVTddrXNFN1mhu9Pps7fhj2FTSXO7pYN1h6f1l32H09GTk\nav//fnf8ePh2+Px0727ze3vta+x1fvR1/nx8enl+eH7+dvZ3fvl5f/x0+Hp5+nL7e3z4e/37\ne/v+e/p++/78/P79fv19fnt6fnt+ev56e316+n37/vv7//z+f3z9eXt8eHp7fHv+fv/+/f7/\n/X78fvt+/X9+/nv9e355fXt7f339fH98/v59//z8//v9/Pr+f/x+/X58//79fn5+///+/P38\n/f38/vz7/f19fn19fn5/ff96/X98f/99fH58fnx9/n3/fX59fH3/f/78fn9+fn58/3//fH18\nff37+/38+/v8+/z+/f58fn57fH1/e31+//39+/z69vn4/P38/f1//Xt7fX3/e399fX19/3z9\nfP3+fv7/fn/+fX58e316e3t6fX5//fv9+/j6+vv6+fr6/fz8/v7/fH9+fHx7fHl8fX5+/f3+\n+/36/f79/vz//f5/fv3+//z+//3/fv5+/v18f3x7e3x8e319fXz9fnz+fv5/fn17fHt8e3/+\n/P3+/X78/v7+e316fnt8f31+fn/9/f78/3/+//7/fX19fHx+/n/9/v77//3+f/5/f/7+ff39\n/f3//n79f//7//7+/f7+f/9/ff5+/f7++fz6+/v7+/t+/v98fn59fH18en18fX99ff7+fv7+\nf/7+fX57f31+fX58fX7//f/8/H5/f/79/vv7/Pn8/vt+/v59/37//35+/n7+/n/9ff7//v38\n+vz6/Pr8+/5+fnt6eHt7eHt4eX1+/vz9+vv9+/78/nt8eXl5dXd5ff16//Lz6H3v62niX+dt\nbfJo5l/XeUfZ1TS4TU25PL9Y4277d/vSW9BWxVdZwkHKUv1tauNR7vFi/XRo52LiUtpoZ+BY\n3WfmZX3tdPZu3FjPVdpk5fZf11PSUudvS+xe71zCWMzZXs1p/HFu91bqaWvu/GPUYtxf1l96\n9l3pVd5J5kXqY1jKWcrt3Nvh3VjRU+df+l3r51nZd+Z352Tkf2R2dnRa6VXxb2l1fX32feRt\n4Hxs2k/OVt1s8v/x+33uZtNNzVLTXeZ28vNv9H3oZu1g4WXnX+bu8vPx7G7XVddc52J6+VTT\nUNlV2lvs6V3UV9BZ5O5e01LXbnPaVtRa4eNV1GH+62TzY95acd5X3V7ZVdNrY9hb2l3XUtVp\natxe7X3uX9lvdd72aePkXdzxXenpYWjiX2ngW2baaWDibmfedGHf6mjt6mnw52Z14HB16etz\n6+9s5vhr/ORre/BxdvB3aOr6bn7l+fbr++zu/nl+/3x0/nL6e23+em9y9m1xdm1fZV1WX1xa\nY2pr/u3n5dfb29bX2dvb397j5+Xl5uji4+Pq8u31cmhjZ2VcXGZfYmpiZvjx6dPdUT9mTThE\nP0hPX07ew8vNv7/Bv8rTytJbV19ST1NPX93v7tHP19vh9e59XF93a2v38+Tb5Orb3ejp+2x+\nZFticnPt10w2X08zQzxFT/NH7r7JzL+/w7vK38vLXVxlVFNgUFbb43vc09zd62Z09FxYbnF5\n7e/h1tnj3N3n7Hpua2xeXmRgaHPh3WY4TGg1QT1GTe5PYsDDycK+w73G3tXOaVdWUldfUVvd\n3N/Z19fX62hx/GBeZmz26fzl2N3j5eby63lecmJaW2NZaOd03sxWOeRKOEtAQ1jeR+3Czc6+\ny8i9zfPR1VtlW09b8FVq1Nbh0trh1+xda3xbX2Vi+eD47dvf9O54Z3hsWFhbW1xmaWrt4fLq\n2NJqSGBUQ0pDSVRjVnPR0MzJzsvFz97i5XhxZF555evt2tjW193q6O9oX2RjY2plbfL0/fh5\nfvJfWmxqXFVia3BuY/Pk735+7efs7ntd/WdPXVRUXGFccuHu49nd4drd79vl5ODk7+bf5t/f\n3d3f6+nqePxvZGxkaV1ybF/vXGtuYmdcd1xoZ2x3bnD++eZq+u5s52ryder86P7m52fjcu/x\nZXH3aWV0ZXP5b2v96/rp5/Ts3/zx433r4XPy42/z6H9q4G5v+XptdOxfcOlhYt9dYN1XX+Rf\nanLlXHHXV/ffX/ffZnjgcGPjc2vh5V3Z7Wrh93v28m93935a3l13+3R0/npu/3B4effs/+jv\neel/+Pzobuj6b+Bg2mLu/nF/b+pm5mD4cWHzcnl3futp73dx8mt+b3xrZd1W2mb17PZ5fOf+\n+vB7b+Vn9e1282zra+t4aux2/vDwZ+n7c/r5727kauD67PHzffVt7lzjX+93e339b3blX+R1\n7nLu+nXrbfJy413eY+17cfZm52d9dmjub2nlafZ/7/p33GLc7vvu6WjfbOpu5/pm3WDwauVf\n7Xtu6WLiW95g+Hxxcu9t8nzvcOxu6WfoaehwefHyeeRq6G/tbutp9flt3l/cXd17buJn7G7+\neXL4aPN4ZNxe3l7XXd53617XW+/vY9xZ3F/q5F3mdvd5ad5b217jXOV5cer4btld4Wv96WDj\nYd94e//7efh6+3Pmdv/+9//z9mvt+m/1a+9o9Xhj4lzdZ+z98etv7vzqZOR2a95e42Xja3zj\nXNtf4WLfY+Vk5GR5207MTthrcNtUz1rla+Fl5nl392vfX/jqXtZZ3/pr32jne3/392fhX+Vt\nb+9q6F7aWNxqe+lj21naZ/nnYeJveedo6f517XH1/n78d/Z2+H17/fJr63xu52bpeH3wbfJ9\ndPV9dvF5//V59P/79H76+X/8/v57+355+318/H34e/z5fvr9fvb9ffl5+/99/n1/fnn4fv/+\nfPZz83z+93/4/P/4/nz1dvx9/f94/Ht9/338/f39+338f/z8//79//38/vt8e317e3p5fXh7\nfHt8e/z9f/v5/P78/v5+fnt8fnt9fHr/fHz7fP98fv97/vx7fn99/f/9/f5+fv19fnt+enr/\n/3x+f//8f/z9/fx//v9+en9+eX17fHl7/318ff7/+/7+9vv99vv6+vv9fn/9ff39/v1+fX5/\nfn7//Xz8fn/5f/v5f/t9+vp9/Hx8fn7/enx/enx///19/v79/f38/37//Xx8fn17fHt7fHt9\nfX59fvx/fv9+fv/9/n/9fPz8fv5//X7+fnx7fnp9f3p//3z+fn3+f//+/H18/35++/59/f57\n/vx///v8+/z8/P38+/z6+n9+/nv//33+fHv///78/v39+/v9+vr9/P99fn16e359fX19/3r9\n/nx+//7+/35/fX//fv39eH3/enr+fHn/fH79fv37fP78/vr+/n7//nh8fHh6ff56fP5/+/z9\n/Pz8+/7+/X5/fHp5c3F0dW9u4eLq3mzSXWzdUe5L3PJ/1enl3+9f2V/1Y3l+XeBQ3W9i62Xg\nXthY3ff361/cYvD7ZONvauhi2Vzu7vNy8W3eWdld32778WzhXtpged5k4WPgcuz1adte427+\n42LfYuN07Xru42/sXFlIY1BMz1rU19/S1Ovc5vd973Zz7vx7duJj6flr32v1en13ZfpoYfpg\naf9sb/h7cvB39nzse3Hpau1r6XJ28Gzea99s4+5++Oj3+vT48/vvaeT/b+1x+X3ycffwbepy\n727ubm3zaP9sbGl6aWT8bm15/W/0fHTwf3h28nJ1+XP98Xj86fj44+jv4eTq3uru4e749vlv\neHNvcm5ybXxrcnl0bfd1bPBu/fHy6NzdYkny8jlNY0FLTVV1f2nRxNPMvsTIxsrN1Pptb1VK\nTlFKTVVcaWr22dzj1NDd39vm7/9uem5icfhueujt7+nu6ex28+xs/+RfPkrfNDfuPUBcWN/Z\n4Mm8y8y6w8/Jz9/zX1xpUk9lX19g+Of96ufd9Gvtflxeb2Vgdu7t6uLc3eLe3eft8fdwbm1r\nc216/vPm/tvbU0R6Wy5JYDRLXF3r387Dws+/vNPMyeByal9YWVFod1v73fTz2ubt7npvaFtb\nZVxedX39697f4d3d4ezo8XZzbXBvbPb7durt9Orq9OLjek5F6T4w7UM4cmlw687Jx8nJvcvX\nydhoZ3NZWF1kcF/94H7w2+b17/loX2BfXV9nc3H+5+vl4OHi6u7tfm5+dGt2dfR8eefue/Xj\ncW7v7PteSVh9MkTWM1DbWm/YyNjKy8bF3crPb3juZVZ4amBxbfL7feLm/fjuaV1uYVtoamhu\n/u3v6N7i6Obk8fX493Br/Gtsdnl7cO76bO7zZe/h/mNPbVc3Vmg3XuJSZdLP6crJzMvQy9z1\n5PJfaPVgYnxwb/jt8u7393pnaGpgX2tmZ3N+9fTl4+rm5er18fZ5dW96d2p89nb6+Pj5d3X0\n/2rj6lZT7Uc67Us753dN+87n48fOz8zN0eDe5Hls+3Bfdm9ke/d98e/7/3ZtbGxlaGtlaHJ5\nfPLr7u3p6+/r7ff3+3l0b3l6cPzycXnxcmfu+WTt7GdTcls8XWE9ZedQX9HhdcrN2c7M1t/X\n5vvy+HBnem1hdn1ufPJ0dPxza3dxY2txZ2n+/Hns6fLt5+vu6e348fx6fXd+dXR8cnF4fHF7\n+W7/6XFgb2FHT3BGUOlZV9/eadTN4NLL19/U3/7k63B3+2lo/29t7/t19vdwdfxsanFpZW1x\nbXn5+/fv7+/s6ers7ff7+n17e3x6e3h5eHl3eP92evp9bGhaTV1aS2Z3WGLf+W3U2OLTz97d\n1efq3el+8Pdocn5udvx2dfx3cf58cHV5bW14dnZ+/f348vDs7Ozt7O72+vr5/f3+fXZ0e3d1\nev96ePj1/mhaV1tWU15lW2D4eXbf297X0trc2N3k3+L08PNvbndzb3t+dXt8d3x9dHV8cG10\nc3F4fH399/Xw7Ozs6+7v8PX3+fv8/ntzdHVzdnd3e/z39W5aWFxXVF1nXV5+/nnj297Z09nc\n2N3m3+P19vltbHVzdX59e/9+fPv/dnl6b21yc3R4eXz8+Pbv7Ozq6u3v8PL2+v3+fXt5e3hz\nff94f/f49fRpV1tdVVdjYVto/Hfz3dzc1Nba19ng4d/t9PR0bHBycHv+fP34//n0/H//em9x\ncXF0d3t8/f307u3q6uzt7/X3+f9/fHp2dXt5fH7//376+fLveV5ZXFdUWl9dXnB2eufe3djV\n2NnY3N/e4+70f21rb250e3x9+/59+f18e3hxb3FucnV4fv358+/t6+rs7u71+/r9e37/eXl9\ne3Z8/n3//v779fB3XVteWldgamBl/f79497e2dfc3Nrh5ePr9Pp0bXJyc/33+/Tu9/bv+3t9\ndW5tbW1wcnN6ffv37+7s6u3w8fj+/n58enh2ent6fH5/fX7//fv6+HhfW1xaWF1lYGN1/vbm\n3d3Z19rb297j4un2/nlub3J0//v9+PT59/T5fnx4b25ubnFydnx9/fXx7+zr7e7v9vv6/X58\nfHRzdHBzeHZzdXd4/vj1+mpeX19cX2hmZG99f+vh4tza3Nzc3uLh6PP6e3BudHn++f338/v4\n9fn7/nlxb29ucnR0en799/Du7u3u8PT3+vr9/354c3N0c3Z2d3d6e3r8+ffzc2NfX11dZGlm\nanh9+ejh3tvc3Nze4OPm7/l8c3BzeHv5+Prz9PTy8vZ/eXJubm5vcXN1e//68e/t6+vu8PT6\n/X17d3Z1cXNxc3h5d3d9/3v99vn+cGRfX19fZGtpbnv87+bf3tvb3d3e4ebq8v55cGxvdnv9\n9vPy8O/v8Pb8fnVycm5vc3V4fvv38e3t7e7w8vj8/nx3dXVycHh4c3z//f74+P73+XtuZl9e\nX19hZmpud/Xt5d/e3dzd3t/j6e72fndyb3J5/vr07+/u7u7y+H98eXNxcG5wc3d8f/f08fDv\n7/b5//98eHh1c3F2eHl/f3p8/31++/n/b2hkX15gZWhsdX747eji3t3d3d7g4+ft9X95c29x\ndXv99vP28/Hv7/L2/H13dXNwc3V5fv779PDv7+/x9Pj7/X17eHNwcHR1d3h5fH79/Pz5+n5v\naWNgYGJnaWx0e/fs5+Df3t7f4OPm7fL6e3hzcnN6/fXv7u3t7e/x8/x+eHNvcXJyeHh8/Pz3\n9fj39/5+e3p8enl1dHZzd31//v77+Pr6+H9xZ2JfX2FlaWxyffbu5+Lf3t7f4OLn6vD6/3Rz\ndHV7/Pb17+7u7u/y9/t+eHRxb3BxdHl7/fby7+7w9fr+f3x6eHdzcXBvcnd4fP79+/n5+Pl8\nbmdkYmFlaGxudXz77uji3t/e3+Lk5uvy9352dXR2ev369/Hw7+/x8/b8fHp3cnFzc3V6ff36\n9/Hx8vH3+vv8fXl5dXRwb3N2eHz9/f77+/t/bmdiX19gZWlrb3j37+rj397e3t/j5unv+H53\ncXF0eH759PLv7/Hy8/j9fXZzb25ub3ByeH758/Dv7e7y9Pb7f35/e3Z0c3R3d3h6eXz//fr5\n/HFnYl9eX2JnbG93+/Dq5N/d3t7f4OTo7vT8eHJvcXZ7/vn18fT08fX6+353cXBvb3Fzdnv+\n+vTw7e3t7/j6/nt5enZzc3Bxdnl7fv78+/n5/HptZV9eXl9iaGxwffft5+Le3d3e3+Pn6vD4\nfHdzcHJ4//r08O/w8PDy9/97dW9ubW9vcXd7/Pjx7u/u7vL1+///fXh3c29xcXZ5fH79/Pz6\n+PxyaGBeXl5gZmpuefvv6OLf3tzd3+Hl6u7z+nhzb3J1ffj08/Hw9fb6/H13c29tbW5zd3z+\n+PTv7e3s7vP3/np1dHh5enp6eXl8fvz/+vf9+n50aGNfWllcYWNqe/Xv6uLd3tzb3N/l6e34\nfvx2cnRxe/718e3s9Pf0fHd5d3JvcnByef/8+PX28/P29Pf/fn13d3r9f/nx+/n6/Xr+/Hv/\n+/t/dWJdXFhUVWFjZv7r5uTf29na29zc5Ozu831weXFreG9+9PPx7ev2fvt9cnZ0dXF4e3r9\n+fX18fX18/f5+f5ydXluamH79m737/r773b663t36PFtYVtaUk9PW2Vld+Xe39vY19nc3+Hn\n+Xz6/HZw/Hx0+nby7/b39f5ubWttbG9x/v5/9e7v8O7u8fTz+Pbz+Pv7fXr8+/949vlzamt1\naWNy+PH58WxQVVNJSFFaX/vt2dHR1s/P2d3g6vX+aXjx/G/26Xvvfv7v/G1udmZkZGtvfXr6\n7fH39O/19/78+f5/9vTv9f36fn17e3z+dHJraHNrZXX+eOnsZ01NUktFS1xs7uzazMvU1dHV\n3+75+PNvaPnn9vju+uvzZ3T9dGNoam1taHT38X317/L5/X378v579erw8+7s8/19d3x1cnB4\nc2xtaW5qa/338997S0pQS0NGVGjg4t3Nx83X19fb5XFr6/Judebh6ep9fehsX2lwamZmZX18\nb3r08vX7evrw/Xb68u/w8PHp6PD6fvd9bm9ubnpvaGlv+HN0fe3k3/9JRE1LQUJPaNfa387E\nydfb3tvgb1755PX96+Da3vpo+fZcXF5oa2xibOvwen328u14a3ru9Hv87unn7Pfu5/ZwcHR3\nd25wfft6am9z9nFjb+vh3mxAQ1RIP0dR9s3W4czCzNfk79/ca1zv4efn6+bX2npoaWVkWlVd\ncHlpb/7q6X5tfO7ufG375+j4/O7l5/v+8uzydWtvfXVzbXF/f29nc33xfX7p3uBMO0VQQEVK\nW9LG09vFxs3Ye2be3mBf7+Pc2e3s2NxsXlpdYV1XXfjw+Xv37OXzbHTz83hycvPl6/rv5+fs\n+Ht993RscnVvfvpsa3pxam9vaX3r6uZmPz1WRUJOT+nMx+HMx87R32Nv2fFo/+rl09v46dv2\nYl9TXWFfWmjx9e3//fLqdW14fvj5/v/o5uru7uvo6/12/X10cWZq9vdsaXLvemFldHv+f+r7\nRDxKSEVOT23NxdPPys/P2Wlf5Ol6+Pjv1tPq7uLvamFVVF1kXWJ6/evxfHn3/3FzcXr48/vw\n6OXo6uz17/R9dHh3d3lwc3r2eGdocm5rbGN77+DnUDxAUENKTFjaxcnZy83N0etadd7u9/T6\n3s7Z7+nmdWdcUFZiYl5vdPjo73N5/W90c2537u7v6Oro5Oj47+v3+31vam97bnV6bP57Y2tz\namd1+eXcXjw9T0RJT07ixsTWzM/Rzt9bYuPp5+r+6c/R4vPwdGhgUlFcaWdydXzs5/ZxenV+\n/Hx09Obp6Ozr5+Xs/n36/31/dHP8+nJwa21rcW9vbW/u99/nTDlBTkBSTFjYwcnUydTPz+dW\ndOXr4OJ74c3W5u39a3JbTVJcXmdvbH/h5vh8b279/mx27enl4u7q4ufv9fP88/Vwb3t0dfZw\ncnpzdndmYnp3eejmWT87S0VLU0/izMHQy9DU0NtqXuzu4d/r79XR3ej3cW5qUk9aXWVwb3Pr\n4vP9c2t393Ju++7p4+ru5uTp7vP58/B8b3dxcXl4/npqbP5wZWtveujmaUo5QkxEV0571cDI\n0MzZ0tjtWG7u6d7g8uHQ2OLwdmhuW1FWWmNte3X25ur2d25q/3t1efLp5OHt7Orr8fX4+O7z\nd3Z/ent0dmprbGt6bmpzfv3o7FU+PE1ET1dV3crB0MvX2tTfZ170+dzb6OzX1N3k/2poZVRV\nV1tneXd58O3u/nRqc/58ffnt6N/k6ujn7PP5/vX3dnn+dXZ4dnNqam5tbGpwdvjs6nVLO0FM\nRVlQadbFyM/N3dfX6V9u8+za2+rj09je6XNjZ11UVllda31vf/Hu9v1vaHd+//3v7ebg6Ojp\n6+/v8/n8+nd0fm54+XVvenJtbGdkc3hz8/ZuVUA+S0ZVWmLfzcXPy9nc2998a/T93tvi6N3a\n4eH5Z15dWVhbW2V48vT18vn3em1sb3n68+7q6Ofn6Ovv8e7z+n1xeHx1ff16/nhuaWxqaWxn\nbX3j81o/PU5FWVRY5s7E0Mvd29TcfGb8e9za5u/c2d3d+mBdZFtZWlhjfPV9fvr67fZsann6\n9e3y7+Hg5ezx9vX0/nz+fvr4dnF9eXNsaG5va2Vnbnjz9HBWQEFOR1hWYeDOyNLM2trX3/9v\n7/zf3OXo3Nvg3/deXWRaXF5bY331dPt3c/j8cG97fu/p7/To5+fm7ffy7ff3f292+XlvdHBx\ndWtlamlkanNn/OTvaks/TEtOW1P938rNztHe1Nnfffr+89zm7Ovg4eDtXVthX2JjXmN+7/f4\ne3Xz7np1fHv37PD97+rr6e74+PD2fXpyef7/c3J5cG5taGRtbWxrcffn61dCRUxJXVNc79XL\nz8rc2NTb4PXzbOjj7ezq5ejefWJmX2FkZF5mcnT8/H558PH79n97+vL68e/47erp7e7yfnt5\ndXBxcHNybGxpZmdubmlrcn/v72hMRExKUltWeOzQz8zP2tLZ2eLre23u/PDv7+7s7Ht6bmtp\na2xkZ2ZscHv5+O7z7+/z+n76fvn5+vX07u3s8f56dXd1b2trc3FraWRoa29tbHj+6PZZTE5O\nUV1XaXvk1tHO2dbY2tnf6Xl+d3f1/Pr/+3r69Xh3b3ZvbmpnaGp4ffx+fvb27vHz9/r3+vX6\n+/v7+fz7e3Z2dHZzbmxqa2hqbW5vcHj68fpqWFJVVlxaYWty6N/Z2tjY2dXY3OLt9nn9fHl0\nbG1ve33+/X/4+355dW9udXl8enh5f/z69/r+f/v6+Pn+/v/8fnx9eX1//v97end3enp2dXJ0\ne3x5bmFdYWJfYWlmanr79O3n5eDb3Nvc3+Pl5uzw+XJubm9ucXhydXl7/v5/ff5/ff96dnV5\nfX76/vv59e/u7u/v8Pb29fv+fnh4eXJ0dnR1d359//x7a19hYl5eYGNfbHR78ezm4dva29rd\n3+Dj5urwem9sbG9vcHN4fP74/Pv6/Pz+/3dzc3Byd3l7fH/68e3s7e3u7u3y9fn+fXl4dnZy\ndXp2dHZ7fX5+b2FgYl5eX2NhanR69ezo4d3b29jb3t7g4+fs/XVzb29wc29weHv9/P759/79\n/nl4dXR2en9//fjz7uvq6u3u7u/z9Pj8/3p4dXJvb3F2cnJ4e334+XFnaGhkZGhoZ3B0//Lu\n6OLe3dzc3+Dj5efs93l1cm53eXd9/v34+Pn39vf6/Xx3dnZyd3d2fv358e/s7O/v7/X49/n9\nfXl4d3V1dXd4enx6fP34+n1sZmljYWVnZWx1//Pt6+Xf3d3c3uHk5+rs93t2b2x0d3p8/vr4\n9PTy8vX3+f57eXVzdnV5enz8+fPw7u3u7/P1+vv/eXx4d3d1d3V2e398ffz69vP6cGtraGdq\namhrcXT/8e/s5+Lf3uDg4ufq6+/8fHV1dnh8/f5++fb08fH09Pn9/3t6d3V3d3r+/Pj08e/w\n8vX4/v9/e3hycXV2dXZ6fH5++/769/by9fx0b25taWtqam10en/58O3o5OHg4uXn6+71+315\neHp+/fz49/Tv7ezr7/P3/nl4dHFxb29ydXh+/v34+Pn3+n/+e3d5dnR1dXZ4enl6fH7++vj0\n8/f08/p9e3NvcG5sb29veHz68/Du6+nr6+z0+Pf+fv1+ffv29O/u6+vr6uvu8PT7/3p1dHBw\ncXR2eXl5eXh7fn56fHp3dnp9ent8fv57ef1+e3/8+Pr59vTy8PT4+/t8d3Z0cW9zdXh5ffz4\n9PL09vf29vb29fLy8vDu7+3t6+zt7e/y9fn7/nx6enV4d3Z3eHZ2d3Z3eHZ4dHFydnZ3dnh5\ne3p8/f38+vj08vPx7Ozu7e7z9vn9/nt5c21sa2prbW9vc3r/+Pbw7u3r7O3t7u/v7u/v9PXy\n9PTz9PT19/n+/n56eHRwcm9ub29wbnFycXR1fnz//f7+/v//+/r6+Pr3+PXz8/Lx8fT4/Pv+\nfHx6eHh4d3V2dHBwcnFydnV4fH1///r49fHv7O3u7O3u7e/u8vT1+Pn6+v3+f3x2dHNwb3Bu\nb29vb3F0dXd7eXr+/Pz7+/v6+vv8/fr5+fb4+Pn3+fr4+vv8/v98fHp5eXh2d3RzdXZ1dXh6\neHl9f/76+vr3+Pf39vT29vX6+fr7+/7+/f////9/fn59enl7fHx5d3d2d3d1dnh4eHl4fHp+\nfv74+vf1+fn6/P39f3x9fX18fXt8f3/+/3l9f3l7/n59fn7+/v/8/f37+vn7/Pr8+vv8+fv9\n+fr7/Pz9+/v9/P98fHl6e3x8fHt4dnl5eXt8fH59ff5////+/39//318f3t+/f79/f5//35+\n/v7+fXx8fHx9/vz7+/z8/f/9/n9+ff////39/P39/H9//v3++/v7+/3///9+fP3/fX5+fX7/\n//5/fn1+fnp6fHt7e3l4eXl8e31/ff79+vj49/f6+fn/f/5+f3x8/v5/+/z//vz9/v/9/f79\n/fz8fn79fn1+ff99fX19fn1+/31//v/9/Pv6///9fXx7fnl7fXx+fHt9fH5+/n5+fn5//v5+\n/v1+fH19fHz//f7++fv9+fv6+vz8/vz+/nx7fX1+fH1/f/9+/v3/fn/+/P38+/77+v36+/z9\n/n59fnx+fHx6e3t6fn59fv7///5//n7//n5+fv78/Pz/f358fn//f31//n1//37+fXx9fnx7\nfn19fv//fH7/f31+fn///vz9/fv6+Pf4+vn6/v/+/31+/31+e3t+f35+/P38/v38fn7/fv7+\n/fz///78+fr8/X///31/fX78fnx//358e3x8fHx9fXt9//99fn99f358///9+/z9/Pz9/v79\nfnx7fHx8fHp6eXl9fP3+f/z8+/z8+/v8/vv9f/39/35+fv78f/39/vz8f/79/Pv//359fv//\nfnx7eXl6eHp6fH98//79/P36+vr5+fj4+317fn15e3x5d3V5eXp7ff9/ff78//7+/v1//v7+\n/v/9/P39/f9+//59e3x7en58fXx+fnv+/33/enx+fH/+f37+/f79/fr4+/r5+fv7+v7+fn1+\nfX19/n3+/Px/ff7//v79/P/9+/z9/vv8/v5//X97fX1+f/x/f/9+//59fX59f///fn9/fH59\nfH59fX1/fXx/ff3+/v7+/f3+/v7+fn9/f3t5fXt7fH7/fP/9/v7//Pz9/v3+//78///+/f5/\n//z9/fz7/fv5+/38/n18e3t9enp9e3x8fX//fH5/fP99/v1//v/9/v37+////359fXt8fXp9\n//78/Pv/fX57ff9+/vv///v8/fz8+/r7+/3/f3z++/z8/f79/f78/n1+e3t9e3x7enx8fH1+\n/nx//f38+vn7+/v7/X98fH58enh5eHl6eXz//v3+/v3//Pv8/Px/f35+/318fX57fn56e3v+\nfn3+f/3+f/58ff79/Pz7/fv+//3/fn/+/3x8fv9+f//+f33+/Pv7+ff4+/v6/P1/fn17fn1/\nfn7/fv3+/Pn8+v7+f319fXx9f31+/35+f399/f3//n/9/f/+fn5/f/99ff99fn3/fX59fH17\ne359fP7//X59+v39+/v8f398enp7e3x/fH5/fv1++/f8/vv9fH18fHt6eX39f35+e31//vv9\n/f/+/fz+/f3+/Pz8/v39f/z8/v9+fH5/fH/+//z8+/z++/r9fv5+/3x6fXt6eXx+ff7++vz9\n/P79fn5+f3t4fXx7eX79//7//f7+/X19fX5/fn19fX16e3/+/fv7/P7+/v19fv58fn57fv5/\n//37/H59fXx9fnx/fX19fH19fP9+/vr+/vv+/vv7+/19/n59/n7+/Pz7/f38fn/8/Pr6/f5+\nfv99e37+/f/9/P7+/n99ff///v39/f79/v79+/39/39+f35/fH3+/v79f3x8fHx8fHv//33+\n/35/fX59fn59fnt+/v3//vr9/vv9/37+fn//fX9+fH1+fnp5eXx9fXx//n79/Pn6/fn6+/n5\n+vv9/f5/fv//fv9+fXt6fXx9fv/9/Pv8+vv7+/r5f/5+fXx5e359fX///n19//7+/v///n9+\nfHt8fHt/f/7/fH99fH5+//99//z//v78+/7+/f7+/v79/v38/f38/f7+/v/+fv39/f3//f99\nfn19fXx9fHt8fXz//H/6+Pz8/f3+f37/fHx+e358e318fn5+fXx9/3///3/////8/P7+/H5+\nfXt/e3t8e////vz9f/79+/v7+/38+/39/v/+/X59fXt5ent9fv/+/fv8+/j7+Pf6+vz8fn17\nfHp6fHl8f/99fv58e31+fn3+fv77+/n6+/v/f399e317enx6fXt7fP/9fv3+/f3+/f/8+fv5\n+/v9/v1/fv5+//3+//5+//3+/f39/n19/359/35+fX3+/f/+/35+e31+fP////9+f/7+/v99\nfXx8/n59fn18fn18fn1//f38/fz9//z7/f3+/v3+fv9+fv9/fXx//P39+/v6+vr+fn5+fHp8\nenx9fHx8fX3///79/v/+f3/+/v5//39+/39///5+fnx+fHx9enp6en1//fz+/Pv7+vr5+fr8\n/Pz8/v3/fX18f35+fXx8fn5//v7+/f39+/r8+/v8+/5+fX9+f/99fn5+fn5+fn5+fn1+fv/+\nfn18fX99f39//v/+//3+fv59fX5+/318e3x7ent8fn/+/f77/P78/v3+fX5+fX5+fnp5e3x+\n/vz9/Pv+/v///f78/P/+/fz+/f3//f5//n///f//fn3+//37/f79+ff1635X6ORS1VHQ/UzL\nR87XUmnXVdVd8eZd42B3wlNIzUTF6Fxj/N5rYOh59u5c52Ld31hl4/r67WL0f+hzeuNY5eNd\n7XrxeW389n90dHl+83F9c/z9ePh6//x3+fp1/H78+n/+//v4dvz4fHx/eXl6en54+Xx9/Hz+\neXr9evz/ev59f357/n58/X38/Hv8/nn6fH1/efx9f/x8ff99f3x+fnt8fX19f3v+f35//f3/\n+v37+f38/n5+fXt7eXl6enp4d3p8fX1++v38/Pz29vj38/X6+fj8//38e3t2eHd1c3F3d3l7\nd3p8f/39/v36+fj69/j49vr5+fn7fvz/fHp5eXV0dnR3eXV3eXV3eHp+fX99fv39+vj49vXw\n8O/u8O/w9Pb7f316d3NycW9tbm1vb3F0d3p4ff7/+vj59fj19fXx8fHv7+/u7+/y9/j8/nx3\nd3NwcG5tbW5tb3NzdXZ0d3h6fH7+/vr5+fTw7u3t7Ovr6+rs7O/1+P99enZzb25tbWtra2ts\nbHBwcnV4en1//fv8+/n08/Du7u7s7Ovq6urr6+7v9v1+enhzb25sa2ppaGhpaWprbG1ucXJ6\n/v328vHv7ezq6urp6err6uvs6+3t7fH1+396dHJyb3V0bmtoamZiY2FiYmNnam50efzy7uzr\n5+bl4+Tl5OXm5ujp6+7v8/X8fHZvcG9sa21rbf5savtuaGZjXGRhX252bP75+fDs7uTg6eTf\n6u7q7e7o7O7o7u7r8PT1/3t4b2pta2Zoa2ptb292cmZkZmJjZ2lqbW5z+/Pv6OTk4+Hj4+Po\n6Ojs7vDv8vLv8fL2/f1+eHZybW1raWhoamttb29zb25va2tqaGlqbG91f/nw7Orm4uPi4eTl\n5ujr7O7z9PX69vb09PX5/f5+enh5dnBzcHFtYlxdWFVaXFteZ2lv9e7l3dzc29vf39/l5urw\n/XpybnV2evr/enl5ev35/X58cm1vcXF5enZ5d3p9/fv38vb6+v39+/v6/nt3b21raWloZ2Zn\naGtwdv/28O3r6ejn5ufm6Orr6+zu7+/v8fTy9fn7fXx5dnJwcm9uc3F4//v6cVlSWlVQXWZb\nXm5oed7d2dHT2trZ4d/d6PD7aWBnam367PX29Hv97u7t7vxuaWdianNxeHt2dfz07+bj5ufr\n8/Xy9/L4fnFfVVBTVVNcX15faXb539vZ1djc39/k6ur2/W9kaGxwfevn6ubq7uvr7u/weG1q\nZGVpbXJzdnR8/fTs7ezr7fX6+3/6d2deWFFTVldaYGNgcnzv3trX1tXZ3Nvh4uPt/G9qYmVp\nb/z49/v8+/ju7u/y/HJsa2ltcXN6fX5/+/Lv5+Pl5uv0fHNuaWpra2pjWlBKSk1RYXff3t3a\n39ra19jd3/t2cXD68+32+3x49u3l5e3+bmllam9yeXJ1evzx7Onu9vt/+fjx8vn/cnN1eH58\nfHpwb3J2fXxmUUZCQkdUdNjPz8/V1tfV19zkdmlla/zq3uPp/G96cPv3/XZpa2ly/fbv+vx6\nfvnx7fb5enf88ujl5+7+dG1xd/36e3Vqa25teHV4dWBPR0JDSlbv1M3N0Nbc3t/i5fB6dXvw\n5N3b3up8aWlpbX11e3VxdX38//10cHJyf/ny+P57efrx6ebn6/L6f/36+fj/d3FvcHd5dG9u\ncHh5Xk5GQkRLYN/Nys7S3+bs5+Tk6f33++vf3Nne539uY2JpaHlvdHhve3R6b25taXN69/Xx\n8vr2+/Lu6+ru8/r49O3q7fF9dW9wc3N2b29vcf32+19NQz5ARlnfz8fMz9rk5uvi6+/8efLq\n3tva3efwd3BqYGFeX2ps/fP3/nJuaW90evp7f//89fDu+fh+fvXu6enq7/X4fn56dHJvbnV2\neXxxcnB3fXtlU0ZBQUVZddDJzczZ3e3r8/zuee3n4drb2+HofnJuX2FdXWdtevTx/Xhuam51\nfPf3+vX09O7u9Pt9ePz48uzt7/t9dHN2dnx7enNtc3R/9/Tq4+JpRz06O0dY1sPFxs/a7Ov0\nd+9sd+rh2NbY4Oj8e/F+fWxeWVlfafz3e3hoaXB4f/14bXN49OXk6PB+d3/y6uTn7e/z9PD2\ne25nYmNtevPx//9vb3p593JcTT9AQkl468zLz8/c2u7pem73ft/a1dnd5v3vfPp9ZF1VWV9u\n6+vs+WtsbHV2eXJuf/Ln4ebvfHJy+u3r6u739vb1931vaGdsd/n3/nRrb3l+59/cbT87OzpT\netLCzMzY0d/n61hgYf3Zzc7b3fz/6e3veGZaYmhhbWtdZGZr9vd/bnFqdO3x6uru8ezr9ez3\n//X06+nm7PP6b2pmZmVufX7+dm5ob3j/8/RuWk4/P0dJfODUzdLP3NTpc3difOnY1dbY5efo\n7/p4amFlW1dlYm7xfvN7/W5x/2x///Tp5uLs6vh5+n/7/fTx8O31e25ranB+cWtsaXf5f3xt\ndnTu2t5yPzY+PlbZ6s/azMzKy2VkVV3t29Tk2t/e093yYGFeZ+92aFpcXmn8YmZlb/fu7213\nffLn6vF8+O/r6fZ3efPq5uXvfHRva2tnY2htdvV9d/3//X55a3FjUUw/Q1BT7+/d1tPK2Nnv\naP995uzi3d3V2d3r+31vfG5mXVdZYnRocW938PDybnR5+uzy8fLm4+jt/f757/X8+Pv5+vtt\nbHdscW1oamtvb250d3Xv5/RjRjlIUUt8XN7PxcTf0fDw4W9rXefc29Pj393b6mtqXWZrX1pZ\nZWpteGdu+vL/a3Z0+Ov58u3i5uzr/O7s7vT67e3r8nRwcm5lZmhpbHRtZ21xfW9zbnrucF5R\nSUZYVVRt/tHTzNTf1OLkd25//N/r6+Tf3OTpeHFrWVpfX2Ru/Hvz6v/7fXl4df929u3x7ezr\n8+/y/vr8+3/38nz/fHd0bmhpcnNpZW1wc3Bwb+/g/GpMQVZWSFFZ3NbP0eDKz9jsduv96W9n\n7ePd7ebm5+RiWmJiYFxjaXjqfX3x6/F2fHd+/HR3fe3w8+3w6evv+/7v/npxb/x6bm51dm1u\na2ZvcGppbnl6+/Dwd1lMVVtMVFt84t/X3s/Q2dzm3OTr+W/z+fH9+/x79mtubHX/cf9yen90\ndnjz+Pr1+PL3+Pr58PX49vb3+vl+eXpyb21vbGx1b29qbHBscGxzcXd7dfHw6vJbVWRaVFVa\ne/zj6eLV2Nbb3Nvf4fp8fnNuaG1udv579u7p7O/1fX1zbnJ0fHt8//719Pb09fX5+/17e3l2\ndXJub3R0cnl+dm9tbmpqa2twdXx8fPz57u3t7O3v/3lvZ2hnaG1vfPbw7ezn5ubk6Oz0/Xx5\nenv8+PHt7ezs6+zt7vb9fXRxcXFydHN1d3h6fn/++vv7/nx7eHd3dXRzcnNzc3R2e3p8/P78\n9/X5+/b18vDx7/Hw8vL0+Pn//3l0dG5vbm1wbnF1dn1//Pn08O/w8PDy7+/w8fb19Pf49fb3\n9Pb4+Pn6/X58eHRxb25tbm9vcHBwcHN2e317fX58//v5+fn4+fz7+/r7/P1/f/9+ff/+fXt9\nff/6+v59fX99e3p4d3Z3eHl6fH/+//z8+/z7+fj29vb29/X39vb5+fn4+f38fn19enp4enh2\neHd4eXp4eHp6enp7fHl7enp7ff9//fr6+fj29vj49fj6+fn6+vv8+/1+fX17d3l7ff9+fv99\nf/z+/n99/3p8f3/+/fv7/Pz6+Pf49/T39vj8/Pz/fn58fXx8fHp5d3l3d3p5e3t8e/7/ff5/\nfn55dnp6fv/9/v/9//35+fb09/b19/z7+v9+fn16eHl4eHh5e3x9fn79/fr6+Pb6+Pf4+Pr5\n+/7/fn5/fX5/fn59f358fX3/fv9+f35+fnp6ent9fP97enx7fX3+/v7/+/j7+vr6+/z7+/5+\nfH3/fn1+fn7/f3/8+fr7+Pz8+f38/Xx8e3t8fH19fn7//fz+/f5+/v5/fXx8ent8fH7//v3+\n/359fX1/fX19e35+f39+/fz9/fz9/Pz9/P///n59/H///X78/f79//79/f7//P3//fx+ff99\n/357fHh7fHt8fH7//Pz8/Pz9/f3+/n5+fHt+fXp7e3x+fXt8fX5+//z7+/r8/fn8/f58fXt6\neXd4eXp5fn19/339+/39/f19//58fv//f359fn19/X1+fnz/f31+/3t+fv/8/v3+/fz//X7+\n/X7/f35+fX5+/v/9+fv7+vv6+vz8/v7+fX18fHp8fX7+//3+/P39+fx//v9+/v1+/fx//n/+\n/n/9/n5+fX18fn1+/319ff/9/f7+fX5+fXx7fnx+f3/+f//8/f39/v39/35+fX18e3x8e3l6\nent+ff///v9+/X9+/f7+/fv9/v9+fn59fH1+e3x9fH1+fn59fn7//v36+/z8/Pv8+/18/X19\nfXx9fH1+/v/+/fz5+fj4+fr+/P39/n9+fn58f3x9/35+e31+ff39//z7+vz9/Pz7+/39/v39\nfH5//vz9/X7/fH19fH18e3p9e3x7fH17fH19fH1/ff7+/vz7+/v8+/r+//58fH5+fnt7enp7\ne3x7fXt+///9/vv5/fz8/fv8+/n6/v3+fv59fn99fXx+fX/9f/79/f/8/P7+//z///7//v7+\n/fz+/v39/fx//35+f3x9fX7//35/fX3+fX17e3x9fn9/fX19f31+f//8f//7//7+//7/fX19\nf/7+/v59fX19/v79/v7+f359fH/+fv/+//7/fvz8/Pn7+/r6+fv9/P79/n5/fHp8fXt9fXz/\n/v/6+vz6/Pv7/f3+//99f39+f37//v39/Pv7/Pv7/P39/n5+fX18enp6enl6enl6en1+fn7+\n/v38/Pv8+/z8+//+/Pz+/f7//39+fnx7enl6enp7eXp5eXh3eXp5en79//n6+/r8/Pv9+/r9\n+fv79vb5+Pn49fX09vj6/f97d3Zzb29vb29ubmxtbm9zeHx+/f36+fj18/L09fT19PPx8fDu\n7u3u7e3w8fb8fnlzbWxqaWlqaWdlY2JgYWVobHN8+/Tv7Orp5+fo6u3w9/19fHl4eXZ3e3z7\n+fXx8/T4/nx3c3BxcXFwcHBxcXJ2ef/9/f3//nt8enh3eXh1c3JxcXd5//j08vLv7+/u7/H0\n8/f5/P5///5//n58e3l4eXh7eXd6eXh6e3p8//z6/Pp8eHNsaGJfXl5eYWdtffLo4t7b2tnZ\n2tzf5evy/X53dnl7/fn4+PX3+Pf9+357eHNuYlhRTElISk5WaunZ0s7Mzc7Ozs/S1t3ubF5W\nUVFUWWBx+O3r6u3y7+/r7ezu/nVraWVobnnz7OTl5+nt9Pv39vf3/H12dG5wcnd//Pl+f3Ry\ncnRwaWleWVZTVVVcZ3rq39nY19ja3d/j6e37fG9sbWx0/u/m393c3eLo8n5ybWtrbG10ePnu\n59/b19jkb1BCPjg4Oz5NXd3MycLDwsLAwcHFy9N1WElCQUFITlpw7ebf3dza2dXY2uL2alxc\nWV1ld+3q4ePj5eXj5+Pn6/V/eW12e/bt6ODsZU1EPjc5PEBSds3JxL/EwsXBwsbFzt5fTkY/\nP0BHTFr85tfRzc7Oztbd7HpkXV9faHrv5+Xe3d3b29vh6vxnXltcX2hdSEE8Nzg7RlnlyMXC\nwsTEyMHCxMfQ5lVLRUJHTFpfbvp1+e7c1tLP2ORvX1pZa/nh3dze7uvr597c2uX7aFpYV19p\nd/T49HlZRkA9OTtAS1r90s/MxsK+vru8w8rbblJNTkxPU1NOTldbddzPzdDW6mlkaHr35N/s\n9vvy6t/W2N3ofmhfZmtsbGVeWlpfbP3m+Uw/PTg4P0xn89fP1cvBvLm5usLU8F5XU1lbT0tI\nRUlV/9jRzdTm7vHq5OPhfGVlafDd1NPd6fp4+Ovl8WlcVFFXX291dXNqcPRrST8+OTtDTmBm\n49PQxLy4ub2+ydfd5P9ZT0pERUlOVl909ObZ09LW3el9c/v39fj78/Ll3Nvb3ubs9/p9al9Z\nVllbX2ZjX2V87X1LPD49PElPVVJX18rBurq8wsK+xcvVbFFJTFRNSURETlvn09vf39rS09bf\nbGd87OXs/HNw69nY3+728O/t92BUVV1iYFxYWF58c0Y4P01ESE5MUWXQwcbMwr29vb/Fz+Lb\n22tPTE1MR0ZQVk9d59/o4tnQz9bY193p7e3+ZWBsc21hXmNqZ2BfY2prZmhpa3B1dnl+/PZ0\nW09V7uZcV3be3vZt+dza633v3t7l6unp6ez0+X17//v+d3n8/nVzdHr+e3F29/55fHl4eXp3\ncHZ2dv1zbXh/cnn29O7n4+PnaU9c7kw/WGlNWXRWbdDtX9XL3dvO09TN09/c1eNrcvpfWFxU\nU1xYU197d//k2trd3dze3fLx4ml/bGZ1Xnpda+lZ/O9p62723P/t3eb3U1bmUj5VX0VKU1Zb\na3D80svVzcDEy8fGy9DX4e15Wk9RT0ZITkxMUlxn/u3d0s/Rz8vP1NTb5PN3a2NfXV1gYF9u\nbGx+/vt89//6fXnx72BLXPVFQHZPRFJXXWx3+9DM1sy/xsvExcvO19vedVtcVExMSUxMTE9Y\nXWX749va08/O0dLR2OPp6nloZ2VfXGJmaGp1/Hp47vds735+fHn2dVFOb1Q+TmRDTVdYbHR4\n0cvSy8DCyMTDyMzV2d1vXl5XTEhOTUZLUlRWX33l5t3SztLSz8/Y3d7j921xcmZhaWxsbnXz\n9/74+vF1eftzaXp8b1FKW1w+QHdERlhdfPbqzsTLyL69xsTByM7Z5OpiUVRRS0hKS05MTWRm\nYu3a2tnUz9HW2NfY6u/m8mtsfXlsce/w9O/s5O799vl0YW9zYV9td2xcRkz3QzptUEJPZ+3r\n383CwsfCusHKxcjU7nJvWExMTk5LTFdZVl7u9n3g3Nzg39ze6vLt6fx96+ft7ufg4+rn4un8\ne3prZmFfYmZgaf1teO7q++XwSUz1RzxIX0dFYuHv3srFwMHCwL/I1NbYbFNVVE1KT1VZYm7/\n4eF55tr5Y3z6Ylxnb2lz+Ojd29rW0tXe3t/wbW9xY15gaWRkb3Z/9/3p7XX37n9u+N9ySD9V\nbDk6X/lLTM/Hy8y/v77Ays/N1GJQXF9LSFJmYWL33Nnf4O7v+GBVV15bVFz+6+rg1tDQ1dfY\n3Od6bGtmYV9meXp49+zr7vL2+n1vY2hxaWJs7ePrcVhCTftCPUflZlLqzcXKwcbHxMPSeevj\nYktQWVdVX3J+49nj+ejrcFlcX1xbYGlv6d3c3tbR1t7f4fJ6bWxkZ3Nzc/zq7vbw7X1veXxn\nX2pua2789uvl+lVATWJJREZoZvXb087JvsLKzsjO4P9rWlRaWVJRavPt9evq6ur1bl9iaGdf\nY2z+7uHf4N3Z2N/h6e/9eXtubnX9+v/99/5++P53b3NuZ2lqaGv46/FnTUVRUk5LTlld4dXQ\n1cvFxMjKzdne5PFdV1ZYV1xlZWt07O3v8/T8d3tzbGdud3357Orn4N3d39/j5+zx93l2dnJx\ncHBwdHd6dnd4enp0e37493FXRUdNS01MVVJj3s/NzcjGxcTEytTd4flmXFZPT1ZdXltka3nv\n5eXw8Ovp7u76eHjx6e3u6ebn393g6evq7PT6dGlmaW9ubm5qbHr//f7z92JNR0xKS0tOTlN1\n3tTRysfFxMHEy8/T2+9uXlNPUlRST1VcYXDx6u3m3tzf4OTr8e7s+nx+9fPr5ebq5eDj6u7w\n/nh4cWpoamtpbXf9flpIR05MSUdKTFV+4d7azMXCwcHFycnL1e9tZFtVVE9LTFRaWl5rf+7e\n2+Dj29nd5ufu+fHu/HP+7eru6+rs5t/o9/jyeWttbGZoemxMP0pUR0BDTE9cff7y0MLDyca/\nwMXJztzh4XFSTlNPSktOUFhqfHTs1tTc2tXZ3t7j+nrz/Gtt9/V88+bn59/h5+jq9XVwdXdo\nTD5HWUA6P1ZQRlPv2dHJysa+u8PLw8DQfvTxXExLSUxOTExa7/9x5M/T3dzZ3Ojzefz1f2p7\n5ur86tve5OLd5PX2e2VhZGBNPUZcOzhHX0lE5c7Y2cXDxMLFycnJ42zv91BMWF1RUGV6+vTj\n3dXb6+Tf82Fte2tibf/58+/m39vf4dzf7nr+d15eZFxEPmxCNUpZS0Hm2PvZy8jKxMvJxs3p\n4dxmVV1mVFheZXX779/W4eLe33xw+29panB1+n384t7r49je8+znb2JlYltNQUtWOEBYSkpX\n3HHY09DIycvMw87a2d13YW5aW19YYnt7/93Z5N3c6OzxfXV0aGdya2Z69H3z4+fp5Ovt8W9u\na1hLTFU+QFdDTVdafv7Z387I08jHzc7T1+bs+V9nZFhgaWV97e3l4N/o5eP4+vptamxlYWtr\nZ3R9fvj08/n5fnx/Z1pYWk1KWlZOW2hfaPfu5djX1tDR1Nfc3ODv+/J9bWx0fX1++u/u7vDt\n6u73+/p9b2xtbmtqam50bm52enVycGFYWldPUVlZWlxea/z7797Z1tTV1dXY3N3i6+/3/X57\ne/z29vbz8PHy8vL0+v58cW1raWdqa2tvbWxvb293fG9gXFxZVllaXF5fYWl1++zg3NnX19jZ\n3N7f5Ojt9fr5+/r29PDw7u3t7e3s7/l8dm5paGZlZ2dmZWZoaGpucW5lXV1aWFpcXmFkZW19\n9+zg3NrZ2Nna3N7g5Ojt8/j8/v349PDw7+7u7/Dv8vx4cG1oZWRiYmJjZWVmaGhsbnJ5dm9o\nZGNhY2Voamtuc3v78enj397e3d/g4OHk5unr7/j5+PXx7ezv7/T3+n9+dW1ramRiY2FhYGNj\nY2ZmaGtvdHZ7f/779vT19/r9fn57e3/8fn77/vv29fLu6+nq6ejp6+zs7e/u7/T5/Xx4c3Nw\nbm1pZmZkY2NjY2VoaWtucHN2ev/59/Tx7+7t6unq6uvv9fr5/P7+fn54d3d1dHF1cnB0dG5t\nbW1wcHd6fHd6fn59/vf18/P29Pf6+vj39/X19/v9/n16env+fv7/fX19fHl8fH97eHRubGlo\na25xev779vTy8fDu7uzs7O3z9/92dnNydnx9fXp7end5enV0d3h2d3l3dXt8fv/69/j29PX2\n9fT19/X4+v37+/38+vr8/P58fHt5d3Z1c3RxdHZ2eHh7enx+ff37+fb3+Pn59/n7/X5+e3p7\ne3p7fn18///+f/79/n7/f37+f39+/35/f3t9/3t8fHx8f/5//vz9/H/+/X3/fX7+fn/+fn79\n//77+/n6+/z9+/3+/f39/f39fX9+fn5+fHx/fXx+fX1//nx9fXp7fHhaXNB4b95r5fzx7X34\nbnX/c3v89vH2/v/4+v78+Pp9/np2fXx3//x8/nx8/379+v7/eX5+dHd6eH13c/5/fP1/+v17\n9f738v/29/z9eHp++evp6O73+01I1eHf2WPu/OPW2t3saWlpbfv8fW1lY29+8/LxfXF1b3Bx\na2B0fW52c3R4d37z6uz9d3H08O3t+fttbvj27vZvc2Zo/PLr/GxsbXns6Ofq+H7/9/jo7fn4\nb3v07uvs7/Xy+P58e3VxenFvamhsbnFycW9zcXV29fH38fX9e/Lw8/787vbv7Xx0dv/5enl+\nfP5/cXz09+3s/n/29/D48/b6+Pnq83d3cm55fXd4b3Vwa3T8f/NvX/9ycPb88/h++fvv73x7\na2Nv9O3v9Hz/+PPx+e7u/Hhxcmtte3R3c3d/efvt8fZ9cnF3dn39/fZ+dXv16+bm6vP+enJ0\ndm1sa2ltcv3y9/Xz9PT3/Xl6dW9xcG1yc3r8fPXw7u709//6+/97d3F1fPnw9vl++/fy7/f5\nfHZzcnZydXNwbnJ5dHNzeHx++PPv8e3u8u7y9P9/fXd7/vX3+P5waGNjYWBgXl5eYmp77uPd\n3NnX1dXW2d7i6evv9vl+fXh6fv/7f3x0b25qZWNlY2JlbHf++PHz7+fd0c3oRD08OT9IaFhU\n9t/Gv7a3vsTMz9/Z5ltIQEVGUW7j5u7b1M/Oz95dTEpLTFJZW1pu3dDKyMnS29vd5f1vW1NW\nYf7v5Oj1++ve4et7ZVxcbPrv49/0Ykc6PT4/SU1fWO3Lwbu7ur/Iy87XdFxMRkVMWl907d3X\nzsjL0utvW1JQTkxHR0lOWHXd2tPRzM3O0N3sbG9ydfp993zq39zc5OX3enVpY1tcXGN559zX\n1d91Tzs3Pjw/REtaWsq+urm7usPFyNB5S0pERklSW1Z72crHx8jT4Pt5XUxJRUVIUWFo+Ono\n5tfQ1+Hq7Xz/9/ttbO7h3NnX2uLf3ub+bWdfYGltamh/597Y2vBcTklCPz9BQkZRdN3OxcC/\nv7/Dy9bna1hST05OU2B359rSz8/Q1N/8ZVtSTUxMS0tUav7l2tPQz8zR2+fx+WllY15haP70\n+e3p5OLj4+/79PX3//Tq7X1lWkI5TU8+S0hZ+f6+x8/Cxr3H18xvXmpbWUdJW1hm/Obb4s/K\n0tzr4/ddX1dOTVFfWllq/eTe2dXd3trb5nJnYFtbW1tZWmL+6/Hi3NrX2dre6+vufmxkZWZj\nZWhpa3P69vn9+fL7+/90dW9zeG5uc3h+//38/fbx9Pj4/f7++/93e359enZ4fv/+/P37+vv8\n/X/9/39+enZ3enl7env9//78/vz8+vv//P1+f317fP9+e3/+f/7+f398eXh4enZ1dG92eHd5\neHr/+vf29PHw7u3t7fHz9PX29/f7/v1/fP78/vz/fXRsZ2JgX15fYWZqbnV4fP738u3o6OXl\n5+jp6evt7vL2+Xt4dHF0cG9vb25vb3Bwc3Z3eXp9/35+fn18fHt6e3l6e3v//f78+fj4+vf3\n+fj5/H9+fn1+/n18fnx8fHl5eHh6eXh8fn7+/v3///38/v3+fv59fX98/v/8/Pz6/v39/P7+\n/319enp6eXd8fHp+fn7+/v/+/P39/v78/v79/vz6+vr9/f39/P7++vz++/9+fXt+fXx8fH16\ne317enp5fn1//37///v8+/n+/P1//n59fX57fX7/fXz+/n58ff5+/v/+/v/9/f9+/319fv79\n/vz+/vz8+/z6/Pv6/vv+//59fHt8fHp6fv///Pv4+fr6/v77+v38/v/9f//+ff9+fn7//v/9\n/Pz5+/x9fXx9/n9+f31/f3x9fXx7e358fv5//n5+f37/f/3+//3//v99//5+f39+/35+fHt9\nfH79/319fX1+/n/+fnx9///+/fv7+fn9+/7+/Xx9fn3/fHx9fH1//v3//fz+/f39/f37/f/+\n+/n6+Pr8/f3+fn97eXp4enl7fXx8fP//f/3+//z8/f3/fXx6fHt8f35+f////v/9/f39/398\nfX97eXt9ff//f/9//v38/v7+fX59fX98fHz/f379/f38+/r8/Pv8/X//fnt9fH3/fv36/fz7\n/v38/P79/n3+/H/+/f/+/v/9/v38/v3+fn5/fH5+fXp7enx8ent+fX5+/v9+/v/8/v/9f//+\nff///v39f/9+e3x8eXt9fH59fH3///79/v7/f3x+fn1/fnt9///9+/v7+vv8/Pv8/v7+/v9/\nfn1+fn1+fH1//X5+/v78+vv7+/v4+fr4+/3///x/f359fXt7fHp6fHh4fHt8e319/vr6+vz7\n//5/fH17fH19fX1+/vv8/X9+/nn/+//8/f38+fr7+fv6+vz8/H1//3t6e3p8fHx6fX5+f33/\nff/+/318fnx/fnx+fXx/fn/9//78/v78/Pz8/Pr7/P39/P5+/v9+/v57c/j8ffL89Ph6dXJ3\nfPr3/X9+e//49PPz9vz+/fn5+Pp/fHx6fH56eXd2ent6enp6e3t9fnt9fv77/Pz/fn3//39+\nfX15fnt8/339+/z6+/n6+vj5+fn7/H57fX58enp6e3p7fH7//vz7+/v9+/r7/P7+/fv7+/z/\n/nx+/3x6eXl4e3t8f35///5//fv8/f1+fX18fXx6fHp9fX3+//n+/fv9/f7+//7+fHx7enx8\nfn3//3//fv///3//fX3+f//+//3+//1//fz9+/39/P38/v7+/v7//H///n//fX1///37/v39\n/vz+/vjn4XL26Wj6a2v3Z/htcvFy73n+925/bnB2a3h1//t99vjw8/by+Pb6/358fHt6en15\nfn57fHl8enh9en5+/fj8+Pr59vj4+/v7fXp3dnp4ent+f33+/n/9/n/9/3z+fnt6d3p7fX99\nf/v9/fv8/P7+/P9/+/n8/Pr7+vr9/H1//nx7d3h6e3p6fX59ff/+/n5//v/+/f1+f3//f37/\nfv7/fn56fn///X7//v7/ff99eH96eXt8fn39/v37//v7/Pv9+/v7/P78//37ff3/e3x+fv/7\nfHv8f//+/39+/fv8/Px9/v99fnx8f/9+fP7++/t4/v9+/Hx+//3+fn54+v55f3R7/nv/fH57\n/fv+/H74+/3+fH58enx4//7/fX5/d/x8/X3/9nz6ev78ef15fn1++3p9fnt+e/7+e3t8/P3+\n+fn4f/72ffr7//96/X1+/Hz//X/9/H7/fHt7//t9+v7/+376ff/5//r7e/x/f/x8/Hl5/f/8\n/vvz+fz7+/j/fn39ff94dPp6fv1++Hp7/3l9dnv9d31+fvv9fXl7/nx8ef38evn9+v369vj9\n//l+f///e3r+e3n+eHZ4d3p2e/9+fH35//7+/fx+9v1//fz6fH96fX53fnz8/nz7/vl5ef95\neXr/e/n9evz8+Px4fn97d3Z6e/7++vr8+fx/fn59eHt6ent/+np+fX78fv3//vn4//5+e3x8\n+Hx4//T9fvj7/H77+/n6f/56//94fv7+fPv2fXz8+Pz9+f3+fXv/fXv7fH7/evt9e3/8+vj1\n+/r5//78f372fnn39339+n17eXp7ev18e3z9+f/9fvt5cv5+e357fH99/378+3x9/P7693t/\n/Xz9/nt8+/x8eXR7eXt1d/14/vx/+fz79fz//359/Hh5fHl7ef3+f/v////9/X1/e3V4/376\n/3/ye315e/d9/nv//HZ+/P/7+vP5/vr8fHz7+H9+/P75/f9/fn1+e3n7/f17/v18/3/6fn77\n+/j6fn768vp/9/r8eXx6dH57e317eX73/Hx+9/v/e336fnd7eXx3ef5/fXP++/z7ff33+f3+\n/P78/Xz6/3R3ef1+ff77/np3fft7eH3+fXp+9nn6/3j0e/99efj/fn99/H1+eXl8//Z6dn5/\n+n5++vz49fn6/H7/+/t6/vz+/v7+//r8f/17ffx3evz/eHh9+3979/r89fT2+vj5/333fnn/\n+f11ef7/f3r9fnn4enz/fXh0f/57evj3/vr4+/79/Hx0/n11fXh5+v/+fvv4ev59eHx6eHX9\ndnv3evzz+Xv6fnz+/vh7fX7+/X9+dv78f313eH9+dnP9/H/6+/v7/f3+/Pv6/X199n15+H/+\n/3j4/H/9f/j7fnv4/Xd2/vn/fv34//v6ffV7b/9/+P95fvX5eHn8f3v8ef/+/nx5fXh6fH77\nePv8ePl++vz483l79fp8/3r7eH79df5+fH78dnN3//x7dnz5f3/+fPn2/3r5/Hz///7+eHd6\n+ndv/H/9+35/9fx8+fv7dX/2eHN6ff/7/P54fX59/P5zdvh1en14enz4/H78ffn4/vz+/nj/\n/Hb7en1+d3p7+ft8dn79+X54fPv3/Pj8/n1//XR7fnl8/n9+9Xz+evv4eX51enlze/p+evz7\n+fl39/n883z4/fr4ef35//j1env9fnZ3/n34+n7/c/v7fvn/9/37+/t/e/J2dnt0/fz+df72\nfPz9efjydn3/ev13eHt+fvr2fPz7en18f3F9/3X9/n189fd4f/j9+XR5fXj2//14ePh4/vx5\nfHR++XJ4+/z7e/v+//x4e/j5/P/3fHD1/XX9/Xj9/HF4/n51+374+nz4+vx5+v38/np/fP1+\nd375eHj/d3h+d3d8/Hp/+f75/Xx8+XR5/vrzdf59+vF+ffh6fvB4b3t+eHt3fHx/fHb+/vz/\n/vj7/fd8+vx69fh+fPt8//Z7env88X79+P/3/PX6cXp3fH7/b2/49Xd9+frw/v779/tzfff6\nevzu+Px/9vz983x9eXl8eHd/fnP8+3l8fv9+eft7dPT1fnR4/3h8+XT69Xf9+ff3+HNz+Htz\n/v7+fP/7fv37fn35/3h8e3F3/X769v988vj4+377/P9zd3lzbnt7dXV6/3p8d373+Xz99vb4\n+vZ/ff///H18f3p/+nh3/3x3en3//Pv++Pl2+fl3+vp7+ndw/Xp5dP96c/n9fHv/fXr9/X32\n+nv09/j49/j6+Pj4+v/+enP7ev/8d3j8+3V6eX3//Pv++Pj+eP34e3v4+nz5/n338/r69v35\nfnl7+nx8/Hp4c3h7fXd7/Xv8enj7e3z6/3z293z+/n34/H36ff37dXr7/f18e3v7eXZ7evj/\nfX59/vz+en99/nt2f3t8+f/4/PP5ffV//nz8/nz6e/r+fH17+nt4f377f336/nz6+/33+/33\n+Pn8/P37f3z7eH98ev19fnv6/v/5/X78+v59/fz/en73ff5//PZ+fvv7/X57fH//env6fHr/\nf339+H7/9/57/3l9f/5+dvz7ff/8+f7+/35+enp9/3x7ef7/ff96e355fX59/v//fvz6fvz8\n/n3+fHr/fH7+/n/7/n18enz9//t9/vz++v37/H39fnx+fPx+fXx6//9//Pv7+Pr99/v//P1/\nff59fvx9ffz8fv/8ff38/fx/fv37/Xz/+37//n7/f3t8fHt//vn+/v3/+vv/ff7/eHl+enl7\nenl8e3h9/358/P19/fv8/f3//n/+/vx9/Px//H7/fX1+e316e3x8eXl9e31+fn/9+/3++P38\n+337/Pv9fv7+/fz+/P1+fHt7fv9/f//9+//++Pv+/P1+fnx/fH59fv3/fn7/f37//35+/399\nfv59f//+/35/fH7+fnt8e///fHx+fn18fn7//f39f/9/e/97ff//fn1+//3+/v78/H5/fXx/\ne3l/fnx7e35+ff9+fv1+//z59vr59/n7/v7+/n1+fXx9fP9+/X58f3/+/v38+vz8/X/+f35/\n/f39/v7/f////vz8/v37/P78/v58fP98fX18fH5/fv7+fn1+fn1+fnp+fX1+fn9//n9+/v3+\n//9+fv7+/399fX18fP/+/356fv5+fnx//P39/vz8/P///P39fX3/ff9+//z9/Pv7/Pv+/fv7\n/H1+//58e3x6ent+//9+fH7+/fv+f3/+f33/fX17eXp5eXp8fH77/Pz6+vf3+vn6/Pz+fn99\nfX58fH9/fX5///37+/v+/fz+/P38/3p+fX1+fX5/fnx+fn5/fX5+/v9////9/Pv+/399fnt8\nfXt6ent9fX7+//79//3/fn7/f3x//n/+/v7/f/3+/v5/fn16fH19e39///5/f319/37/f/36\n+/r8/fv7/fv7/Pz+fn7+/f/8/P78f/9+fH59e33+/f7//fz7+vn7//9/fHt7eHh5enx9fn5+\n/f37+/37/f38/f59fXx+fHt9e357fH58/X58/X5+fX9+ff7+f/99fv5+fX9///1/fv9+fX9+\nfnx8fXx9fH7/fv/8//7+/vz8/Pz8/P38/P78/P39/Pz9/318e319fXx7fn1//v/9/319/399\nf37//35//v9+fn/9//3+fn18fHt7fHt9/37+/v39/Pz+/n/9/f37//5/fv7+fn1/fX5+f/z+\n/Pr6+fn5+f3/f39+/n19f3t+e319fv39+/39/Pv7+v//fn18fX58fnt7fXt6fXx9/v/+/f/7\n+/z7/fz9//9+fnx8fHp5enp7e3p6fn///vv5+vr8+/9+/v//fXt6eHl6e3z///z8/Pr8/P/+\n/3/+//3//v5//vz8/Pr6/f79/X5+/v77f318e318e3t9/n19ff/+/Pz//n3+/v//ff9+fX1/\nfv99e319/f9/fXp+fn5+fn79+/r7/P38/f77+vz7+379///9/fj+/n99fXx7e37+/n/8+vn7\n+/x//f77/X9+eXx+fX5+fXx+fn7//v5//f5//f59fX59e3x7e3t9fX19fX7+////f39//v7+\n/f3+/f3+/399//z/fHt7e358e3p6/X/9/n79/H99/n////39/f78/v35+vn8/fz8/f39/n18\nfH56enp6enp6fX5+/n7///38ff1+ff39/v7+fX79/n99/31/fnp8fX1+fP9+f/79/37+f/78\nfH1+fXt8fH1//f5+/f7+/Pz6+fn3+fv8/fv+fn59fX18fnx9fXt9e//8/vv7/vv9/v7//v39\n+vj6+vz9/v1//v1+/v36/37+fH5/fn5+fHt8fX58e3t7f33+fHz/fn79f3z9/f7+fn5+fXt7\ne3d4eX5+//3+/Pn3+fb3+fj4+fr7/Pz8/H9+/v9//35+fH1+e3x6e3l5eHh4d3l4enh1eXp5\ne31+eX3///v8+fn29vj39PLz8PDz8PT09fT09vb3+fr6/v3+fvv8+vx+eHl8enhyb2lkYV1c\nW1xdXmZwfu/p5uXm5urq6efl4+Lk5efp7fL09/j2+vr6/f7/ff/78/P0+3p3d35uZFVSUk5X\nUEpIaP7wzd/Z19XU+/poXe/o6d7k2Nra3HhrZWJpaWVla/31+3Jua2xvbWxqdXzy8fTz/PT6\n/Xt2fvz08vLy9PP6/XhvbXBwb25xcXR4cnRvb25ucW9yeXx8ef3x9O7v9PHx7/f5+vj18vL4\n9vf5+v94dnl0dXl3dnh4dnl4eXh3d3Z4fv33+f37+/d7dWpgXlxeXWNqdvTt5+np7vHz+fXx\n6+jm5ebp6u3x9fj19ff2+/v/eHdveHp6enZ2fPT+ev17fXp+fvTyX1VFND5dR9XU28fIvdnb\nbktWX3V04NbRy8nY9l9WUlhdW3H03tzb721sYGNfZWRv7unq6vd3fHNybXdzffX27vXt9PTv\n+/96e3V2+/L06Ons7X94bGVRSUlDSVhf+N/W1NLT5v5tZmZ67ubc19bZ3Op+dnNxd/389u7v\n+npwbnR1d3r++fTv8PLy7u35eW5naHBtbW9wYFRNPjpNUV/W2s/OxMza3WBdZPf86Nzc19LZ\n9WtfWV1tZ2/26unk7mpmZWprc3J28ejq7e5+/vb4/PPr7Ofn6e3r+HT1/W1oZV1dZF9PQz5D\nT2Ht4NzSzczT33hkaXzs6eDe2Nnk629obGx2ePj67ufs9nVva3F1dnV2fvrx+f7///Ps6+vs\n7e7v8vPx8P13al5eX1lIPDxDT2Xh3djNy8vV4mdfan/t5d7b1NLY721gXGdma2x59/To9Xdt\nbW1ze3R4+vPv7/V9evn19O/u7e3v+/j09/z7emppZWdiVUA7P0hXfd/i08vLztn9XWNv+Ong\n39jR0t78alxha2pub/jz6O15bWlqbnVvbXX68Ozv/P739fTz+vft7O3v8PL49vt3bGRrZmJY\nQjs9RlBu4eDUy8nN1exfYG7+7OPg29TS3PVsXV5taGtv/vDn53ptamtudG9rcv717/D8/fby\n8/L19+/o6O3u9vbx/HFqZl9hZmdQPjtASlnt6+LTzMvP2mxdZHH46OPh2dPV3vloXWJsaG9u\nfe7m63xyamttbmlmbXj58fV8//X18O7v8O7u7uvv/fv3/HNuaWZpa1pBOT1ETXrr49fLyM3Q\n8l9eaXfu5+fe1dLX3nBeXmBpZWxqeujl7XduaG5xb2ttd/vs6fZ9fXz59PL08e/u8Pf8fP3+\nenVqamtsbFdHPz5HTlv979nPy83U429nbXv57ejf2tfd7nllZ25vb296++vs+XVtbXF3c2xv\nevvz8Pb89/Hu7/P4/PH1fHN2fXV4c2plaXB0XEA6QEVR/ezk2MvKzNH0YWFs/ejm5t7W1dns\nb19ebGlvam7/6+j7em1scXlzbG10/e7t9fv27+zq7u/u7ez59/999vd3bWphX2NiTj48P0la\n7ube08zLztl5YWFv8ubk4tvX1dvwa19faGlsam/56+z6dWxrb3RvbW1z/e/u9/3+9/Lv8fn+\n9+7t7/T59vR+bmpnaGtlTT07P0hZ7ujc0czKztlxYF9s8+nk4tzW1dvzal1faWttanP76ur9\ncWprc3h0bW539Ovt+Pz48u3u8/j18Pf6+v378/h3aWVjZmxOPTo+RlXt5dzTzMrM1X5gXWr3\n5uLi3NjU1uVsXlpiZmhnZnb15+//bGhtdndubG/87uzx+Pv58e7u/Hz+8e/2+3z9+352bWlq\nbFpBODs/SWjx39jNyMrO42lbYXLv5+Tf29XU3P1lW15naWtndPbq6vlvZ2ttbmtmaHL58PX+\n/vjv7e3v9fnz6+3v8vj29n1nY2NnbltCODs/Smrx5NnOycnN4m1dYv7u5ubi29bU3v1jW19o\naGhlbvns6/hwaW13eHFqa3X16+/9fn/17+7z/P368O/z/H/29H9uZ2doalQ9OD1AT/3w3NbL\nycrR72RaY33t5+Pf2tPU3v1kW2BpZ2hkbvbr7n1tZmhvbmlnanXy7vP7fvv07+7x+P748vHw\n/Xh/fW9ramVrcVpAOTxAS2n64tnOycnP521cYnju6urj3dbV3fZoXmBmZWZian3v7/twaGtv\ncWxobHXz7O72+/j27+309vf39/n/dXt7//R5bWRpZ11KPDpBRlz37tfXyszM231mXm/56+vn\n39rW2+hyYGdpbG1pbHrv7vh0aWlscG1raW589vP5+Pfy7uvu8/T7+/n0+Pn5eW1qa2trblxC\nOz1ATV906NzQy8rO4H5kZnjv7u/n4NrY3e9uaGxtbWtmanrv7vV7b291c2xoaW19+Pj5/fvz\n7Ovs8/j8+/97dnd6c3FrZmRkaWFPQT5DRlZnft7czs3L1ODxb3j+7/by7uvm5ej8fnd2e3Zv\nbXB4fv95cG90d3VybGxvdn///v327+7u8fx6fnx7f3p0b25saGlrb2NLQENETFdg9OrY0cvM\n0tjm7/Xw9nhzb3vt5uTo7e/3+X9xa2ppaWxsbG1wenz+/nh1dnl8fH19/Pbx7/X2/P/9e3py\ncG5qa2xramlraF5VT09PVVphc//m3tjY2Nnb3N/i6vF/b2xtcXZ4fv337+vq7fH7enNwbmtr\nbG5weHl4e3t9//9/enl5dXZ4e3l4eXp6eXp6fn59fXRoYF9fXVthZWRqc3h+7+rj3t3c3d7h\n5ufq8fh9cm9ucHd+/Pj29vj5+f5/fnVycW1ubm9vdHz+9/Hw7uzr6+vu9Pn9f3l2d3BvcnFv\nY1xdW1hZX2FianR3/ezm4Nzb29vd4eXn7PH4e3Jxb3B5/fn29fj49/n8fXh0cG5ubW5wdXz7\n9vHv7u3t7u/1/X17dnN0cHJ0cm9iXV5cWVtiYWRtcnb36+Xf3Nzb3N7g5Ojs7/p9dnBwdv/6\n9/Lz9fTz9/z+eXJvbWxtbnB2e/348u7t7O3u7/T3+f95dXBvbnFzbmVdXVxZW19gY2xydfnt\n6d/c3Nvc3+Lm6Oru9Px7eHn++vj09fj6+fz+/Xt4dG5tbWxtc3d7/fz59PHv7+/z9vj7/Hp5\ndXFycnFybV9eX1tbX2Jiam9xfPbw6N/e3t3g4uXp6e3y+X14dnt++fby7/Lx8/n5/H53cW5r\na21tb3R2fP369/T09PL3+vr+fHl7dnZ2cm9pY15eXl5jaWtudHn78+zl4+Li5ejq6+3t8/n+\nfHp9+/n18fXy9fb5+fb7/XlycW9vb3Bxdnl6//759vX18/f3+37/e3h3dXV1dHZ4d29pZmVg\nYWVmaGxvcnv58ern5OLj5enr7+/z/P57eHz7+vTu7uzr7e3v8fb8e3RwbmxtbW5vb3B0eX79\n/Pz7+/37/nt9fHl5fHp6fXx1bmxnZGRlaGpsbnJ4fvbu6ubk5+jp7e7v8/P1+Pv49fPu7+/t\n7O/u7/X2+316dnBxcW9xcnBvcnN3ent8fnt7eXh3d3p3eHp4en79/vz/endxcG1ub29ub29y\ndv/58+/s7evt7uzt7+/x9PT08/Hv7e7t7e/v7/L2+f96dnJ0cnFwb25vcHB1d3V2d3d4eHh6\neXl9fHx+eXZ2e3V59/v38/Ty9fX09vf2+vx/fn14fH9/+/j38/Ly7u/y8vP0+Pb4+fj6+/j4\n+Pf4+fr6/n16dnZ1dHRzcXBxcnJ1dHV3eXl5en5+/v38/Pz6/vv3+/r5+/z7/v/+e3t7e3x6\ne3x7fX9+/v/8/Pv4+fj49fb48/X39vn5+/j3+Pv5+fr5/f1/fX55enl2dXV2cnNzcnJzdnh7\nd3h3eHx7fv78/fn6+vj5+Pj6/vz8fX58en18e3x9fn/+/n/+/X58ent7ff7+fn79/Pv39/b1\n+Pj5+vz9/X59e3p5d3h5eHp5eXh5eXl7fX59fX19fX9/fv5+fv9/+/z5+/n6+vr8+f37fXp9\nfv/+/Pv+/fv7/vz6+fx+e3Z7en39/vz/fH19/f38+/v9fn96enl8fHt9e3t7f359/H39/3t+\nfH/+f/9//v9+ff9+f/59f3t//P/+ff5+fv7/fv38/v5/fn9/fX59fnt3eXx8fn/8/Pz6+vr7\n/Pv8/fv7fv/+ff99fHt+/n/9/v7+//z8+vv5+33/fXt9fX3//v3+/fv++vr7+/z7+/3//n98\ne3p7e3p6eXp9fX/+//7+/Pv9//z//f9+/3p9e3l9e/99fn59fX1/fv7/fn18fH9/ff39/fv+\n/fv6+vv5+f36+3x8e3t9/v1+fn7/fn78+/37+/7//vz8+/n9fv98fn18/v/+/31+e3t9/v3+\n//9+eXl5eXx+fX7/fH3/fv77+/r3+fv+fX56enp8end5d3h9/Pn5+fn7/P37/Pz7/v39/n1/\n/n18fHt+fn/+/33//v///vz7+/76+vn6/Pn+/n18fXl6enx6fX19f3x+fn1//319///+fn1/\nf/z7+vf59/v+/f59ev7/fv59/v/++/v8////+/99/v3/ff3/fn/+/fz9fv79/fn9fn57fHt6\nfHx+fv5+fH39/v7+//7+/fz8+/z9//59fH56eXx7enh7e3p5fX5/ff/+//r6+fr8+fz7/Ht9\nenh4d3p8fHx8f35+//n6+vj6/P37/f7+/n///n5+fX5+fn3/fX79/v37+vr7/Pv7/vz8/359\nf/5//n5/fn19ent8eXt9fX/+f/7+/v7/ff//ff//fn//ff9///7//n3//v/+fn19fP/9//5+\nfv99fn5/fn5+fH19f//+/vz6+vj5+fr6/f38/v5+//7+/v78/P7+/P1/f35+/3x9fn//ff//\nfn//f/7///38/f77+vz6/fz+fv3/fX18fHx+fH17fv5//f39///+fXx9fn1/fn5/fP///v3/\nfn1+fHx9fH19/v7//P3/fH58fX16fHt7fX////79/Pr5+fn6+fj6+Pn9+37//n5+fHx6eXl6\ne3v+f/38/fz7+/r7/Pz//fz+/n///f36+/z+//5+fXx8fX16e318e359fn7/fn5+//x+f398\nfX5+fn5/f/39/P1+/v19/39+f319fX1+fHx8fH1+/319//7+/vz8+/z+/f3+/v7+/f3//vz8\n+/r7+/3//f7//39/fv3+fX99fHp9fXx+fnt9f31+/f7//n/+/n//fn5/f37//v/+f/9/fv5+\n/P5+/n19/n9+fH99fHx6fnt6/3/+///9/fz9/v7/f/v8/v9/f/79//5///3+/Pv9/f39//79\n/P3+/n/9/f//fHx8fHx8fH19fH1+fn58fn5//P37/f7+fX//fHx9e318ff9+fn1////8/H5+\nfXx9f/78/P3+//z+/fx9fX5+fv9+/37+/f/8/Pz5/Pj6/fv/el9e5Gjq4PDh/ur4//d5/nR3\neHR9fHd3dnh3e3t4/n99//57/v5+/n5+/f3+/vz7fP3+e/7/e31+fn79fH1+e3t+f37/fX79\n/X/6+/77/v37/f7+/X3//n19fn/+/f/++fv8+fn+bHLueO3y8On0+Pn8e/11dHh3c3B7b3lx\nfXh7/nb8e3z+/nb9fnj5eP99+fz69ff28PLv7fnv+Pr8/3b//HB+cndxent2e/V9/vT4+Pn+\n+3z6/fT8+/j8eHt6eH5u7Wbvbn5zfX1w+Pl27v1473159vxv6mzyenrya+9zeu9u+fNs6mzy\ndv70bO15cetr9Xf7eXf2aft+c/76/Xfy/2/oa/nybOtr62jscnnubvF193959nl57mXmbft7\n+nLzfHPwbe1t7G/6fPxv735r4F3eY+/3beVk5mv6e/dn6Wv/9mrpae77beZq73v9dfJ2b+1q\n+/tr72/6fnTxeXzoZeJu+Pl/en5+9Wnoa3noXt5c4GX17V7cXeRo62z39Xx57XB+62flY99d\n3mPvfm/qXtdP0Vfkb3zxYtlX1ljXWuP0Wc5LzE7WXO7xYN5a2VPQT9FY4Xlt4VzYVtlc313f\nZXzqYOJo7GXlbO//+HL0+HT572XeYudu+XzyaeZh6Wx07mPnZOlm5mLgYd9j31/fZ+9z7m59\n7l3dV9ZS0lTXUc5N0V3ja+ds73vy8WfbWdxb31veXuhk5V3cVtVV2l/lbe96/elf1VDOTc1P\n1VfbW+Vmfn1v7mnrbu9s6GXeXt1b3GDteHl972Piau99ceRe3Wb69GfkYN5kfepd2Vni/WHY\nUc5LzE3XZW7cU89U4fZi3VzZXeN2evX9b/n5au9tfn5t7GbjZOZp7G/19HH49Htx513eXdtZ\n329u5VzcW+Fo+/Vw8Pl37HT88v/uaeJi6216eP9r+298fXDrZOZ0/u1r7Grqavz9a2pQ5V37\n2XDO8t/e+t5l42D9cm96c/h48Pz39/xt/m5vaHNjc2V6aHpr92/tcO1173v+8W/vbOdk5XN+\n7XTncOX3f95s6Pj+8P/vee3/fvf5ePh0cv13cm9+cHl+dHb2e3rzfn72/3j6+nn1/Hz483j5\n7X3z8f787/r+8ff18vD86/f08fZ5/HhscWdkZGRiYWZhZ2dmamtwcHJ++/r17uzl5OPe3Nva\n2drZ2Nrd3N3f6/p+fHFpaGtvbnP9b09FPDtIOT5DRX3fzdC/vb6+x87T22hbVlBdZmr42M/L\nyMrLys/e7XlnZF9davju4uFNNj1FMzs5NUt37nzDv721vcjIyOpoVUJMV1JV99nNwcXKxcfP\n1+BpavZqYvro39LSajU4WC84OC9EW91Qxb2+s7rEysTlWlVARFNVUnrUzcDBy8rI0uTsa2Xz\n/HLl39bPztdCL046LUIuPlbV2+i1ybi7y9rd3EtYRkRUdnfzysrCv8jR0dN9bWheau/v79zW\n08/P3Ec0QjwvPDM8VerO67rDvbrKzezaVlBKQ05a8XvRysjBx8vU0N5rbl1eY3l89drZ1NPT\n/0I8Qjo3OzhFT/ra3sPIvr/GyNvXbl1PSU9UZm3m18/IycrNz9Xo/V9dXFxkZnn67eXj4P9V\nSUtHQkJES05c/n3o3dHPzsvQ19nf7nR6dm5++f597Onn3t3f4uHm7+7t9vXz+3378/TvclhP\nTkxGR0xMTFRdWF/24t/Uz9bV0tbf3t7u8ez4d//s7ujf3ubl4ujs5+318/n/fvf7b1dMTUtE\nQ0tMSFNdV13x3uDRzNHTz9Ld3t31e/pyZWz+d+/g4+Th3uXm4+3v9fp2b3Z5+nxdTUxOR0RL\nT0lOXllaeN3g2MzP1NLQ3OXe9W53bmVm/f/34uDj5d/k6OXs9H7+d21yd/30/F5NTU5IREpP\nSk1eWll23N3Yzc/V09Pb6OP2bXRtZ2j+8PDj4Obp5ebu6+/9end8cXP++e/s+1pMTU9HRUxP\nSk9eXF392tvYztHX1dXd6uP0cHd0bWr49PTl4+fs5+fx7/D8eHp4cG92eP719m5WTE5OSEZO\nUUxRYV5e+9vc2c/R1dTU2uPi8XZ1cGpmc3t88Ozt8ezo7u/2/Xx1e3hxdX369+/tfFxOT1FK\nR01RTE9fX1513drZz8/T1dPY4uXzbmtnZ2RqdXvw7evs7err7fH+dnN3d3J2en737erp7G1U\nTU9PR0VNTUxZYF9p38/U0s7Q09fd9G9zal5cXmn86efg2tja4+bq9XdoZGRmZmdz9+vm3tvZ\n2n1MSE9AOD1KT0VO6NvV1MvExcXR1tPmX1BbXU9NV2t4++DTztDY3N3raF5fXlVUXmlv/N/X\n1NLU1NXY4HlPQ0Y+NzdDSUNR+M/bzcTDwMnJz9X0VllVUk1PXmZq9dnP0dHP0999bGFbVFJW\nWlxi+t/a19DN0tbV2uT7UkFFQTg0QUw/TvbP3dHBxsDJyczU5lZdWk9MVFxdY3/b19LSzs/f\n8nhtWFJXV1dYZHvv39nQ0NLU1djm6vFeREBJPjM7U0JHX9DV5cPIw8jLzNfVXVpfWU1Pa1xl\nc+DZ2dDVz9ntf2xkUVVaWFhdeXns39jQ1dPU197p5/VxUEFESTsyQ1RASW3H6NnCx8HNx83R\n11liX1tJT3JaX2/c297R1tDb7fxsZlJVW1paW3r77ePZ0dbW1dXe6enrdVdDP0hBMzlWSEVP\nzMvpxcW/x8vJ185vVFhbVEVZbF9q+tPZ19LX0uP8ZmJgT1JZYl1f6+ji3tfT2NbZ3OTw831t\nXkY8Rks2NFBTTEncv93KycHBz8nj1t5VUE9pTkljdut05c/W0d3e3PRrVVtdUVNYbGxr7+Lb\n293Y2dvh7Oj0fHJtXkM7SE82Nk9bV0fawdHHzcPDzMn87NtfT0hbX0xWZt/d7NfVz9Pu7/x4\nXE1VW1pZWnzs6uXh1dXa3t/b5P13f/5tX0k6P1k8M0FZ6UxYw8jEyszBy8jUXH38YUxFWmpa\nXWjZ0tza3NbV9mddYWVST1hjdWVq6d7b4ebc297ofvXp8nNs+/NYPjtOTzg5RnDxT+bJx8LJ\ny8nOytZeXGBjV0dNa3Nvd+jT1NfY5+roc15UVl9ZVl5o++vp397c2N7m5+ru/XZ6e3B1X0M6\nQ1RAOT5W2m9o0cfDxcrLz9XQ3V1SVmJdTE5m8+bp6NvY2NnvaWprZVlQVmNqbG7439zc3d/f\n3+TueGx493traG1ZQTtHT0E9QVrd8/PRycbGyMnN2t3b+ldPU11cU1Zq6+Dh4d3a3ePya2Bg\nYl9ZWWN89O7p5N3c3N/p7vH8dHJvbWxra1hEPUNOSUBATe/b5N7PycbHy83U3+PncllPT1xm\nXFpo7Nzc3+Hh6fD8bF9aW19lYmJu9ubh5eTf4ujp8HZucH73cWBqb1NDPkVNSkVFUu3Z3NjN\nycjJy83T6Xp9dF5QTVRiZ2Rt9OLb29ze7np0bmddV1hgaWx49uvh3d7e4unu8f90eG9sa21v\nXks/P0lOS0ZGWODT1tXOysjJy87Y7Xl7dGRTTVNlc3Fxfeje3d7l+2xoaWphWlpid/Xu7Ong\n3dze5Oz5dXZ2cGxlZXJ7clRBPUJOT0pGTHnTz8/OzMnIycvQ5G5laWhaTU1Xafrv8und2trb\n53lkX2RnX1lbZn/q5uTj393c3uj1e3J0eXNvcnV1blhEPT9JTElGSmvWzs3LyMfHyszO3XJe\nXWFcUE1UYn/r6+Td3d3d5H1mXl5lYl1daPjk3+Pf3d3e4en2dmxrdn55dHJ4ZEs9PENMTEZF\nVN3OzcvJxsXIysrR7WRdYmdYTU9ZbOvo6d/e397f7m1fXGRrZmBjcund3t7d3t7e4+z5bmlv\n/vl+d3VqTT06QEpMR0NO6tDMycfFxMjJx8zfZ1lcY1lNTFJdfunk3d3h3dzj+WRbYWxoZGZt\n8OPg3dvc3d7f4ux3a295fntsbGhMOzg+SE1IQ0/r0cvGxMLDycnFy9tpV1tiWE5OUVhn+d/Z\n3ubf3N7sal9lZ2ZoanP68+fc29zd39/h7H5xa2ttam5zc15EOTtCSUxHSV7t2crDwMHJy8XG\nzd5pXV1VUFNSUFRc+dvb3d3c2t3q9XdmYGFoeXp49urf3d/i6PN8c21nX1tdXmFobm9XREBG\nTFJPT11pfN3Px8TJy8rKy9Dc5ndcV1hbW1hbaPvp4N7e5O729Pl3a2hscHV6fXp1dHp+dXFr\nZ2lmZmdmamhqbG1xcHJ5/fv69vT4enV3/vn28e7u8O/t6uns7/Dv8PDw8Pb+fn19e3Z3dG9w\ncHFydHZ6fXx8/vv8/X17e3h2d3d1dnh5eXl8fH1+fv7//vt///9+/v98fn59f31/fnt9/vz4\n+fv8+fr7/P/+/358e3p3enl6///8+vn39Pb39/z8/f77/P7+fn9/fH18e3h5fXx//n3++/n4\n9/n6+vv7+/5+eXh3e318fv37+fX3+Pn7+/1/fnt5eHd1e3x8fXp+f////v7+/P/8/X/7/Pz9\n//5+fnx8e3p5e3x9/3/8/fz8fH59fX57e3p+fv/9f/z9/fz9/X16enp6enl4eXh6fvz7/v34\n+fr6/X58e3x9fH19fXx9f39+ff///398//z8+/n4+fj8/Pz9//59e3x8fXt8fX77/fz5+vr5\n+Pr6/f78fnx8fH19fH9+ff5///z7+fv4+Pv4+vn7/X59enp8eHp5eX17e3t+/3x9ff9+fn1+\n/f77+fr7+/n6+/78fX3/eXx5eHh5e3t+en19f/7//P/++/78/v79/P7++/38/P5/f35+/n7/\n//////z8/P1//v5//n98fH1+//7+/fz6+ff4+vj9/P59fXt7e3t8eXl5e3x9/35//f/8+/z7\n+/z9/317e3h8fXt9e3x9fH1/ff/7/fz+/fz+/f///P/8/Pr7+/n8+v/9f3t+e3p6fHp7fXz+\nfn9+//3+/359fX19/n7//X7+f33+f3xdVuJuZ2dIZl7iztTJ0dXT4HpqZmNhb3748Pzn5eTe\n4env+3l+a2FiWlthYGdrbnJnZ3lsY2NvbGBwe3RvffT/9fHy7+ju6d/n6O3l5Ofn3Od55eT5\ndHzv++zpb3n4Y1/7bFx0cXH7fP57d+nsYfN5Xvx4fXtu5+r95d3ldfjxb3fp62rw5n159vFr\naP9sW2rreXTp6W/33vdn//JgeP1p9nh86/Ht++vqc+3uaGbuYV1uXOzy5dXh2un+/l9hZGBn\n+3Fo4f3t13ve23nk7+3raelkXO5ccuhp6O7u/m3qXGJzXW57amr9fn7s/vT89eZ06ut97XP+\n83Hs8XrjfP7fa3X2YP52b/F08vL86fT97vp9/+3xcvhsfv109n78efx4/fF67X3xeXl+afpp\naXJeZV9dXlxoY23/eujh3d3a2d3a3OHf3+bp4+jn4ujs5uj1+nJwZ2hmYWhlaGdpaGtsbnL+\n5eDiWklGOTxDQFh459XOx8nCwMjGzd/ra1pWWlhee+7d0s7P0NXn+29eWlxbXm/+7eDe4eHn\n9Pb5e319dHnz7/RPPz81NT89U+PbzcrFycS/y8nN63xpWVZdXl567OTUzs/Q1elxaVtXXl9n\n9uTc1tPT2uLoaHlubefs4d7bVTs8MS48PVLRxcbFv87Mx9bh32BQXF1e5tXd1tPh39ni9+5r\nW2RubOvd5N7a3t7b5n78bmVy9u/d2tvY20o0NiwsPEjdvra/v8Tc69V0XGpSTmXe3MjFz9vi\nXlpubGnv7Xjk3Orm5HRu+vby3d/u7PRw/eTh3Njc3/c7LzIpMUh5wra2xcbXY2TjWFphVVza\nzMvEyeRpXk9Zee7v3eLw4+J8e3pmafHl4tnc7fnxfPfh4eHe3eBQMjItKj5Xyrq0vs7XZVV2\n/FdrY2Dqy8nIyNhfW1RSa+jq5Nzo8OX1Zm1nZHXj4d/c5/L89/fo3uHi3+F9PS8yKzJS3L23\nt8/ZfFdZ5mpbb2X/1MfLy9VqU1hWZ+Hc4uDi/u/ub2hrZnDq3t/c5Pj4+fTw5+718efgTzM1\nLy1MdMS7uc3s+FRc8/hYeWj50MbLztpbT1VdcdbW29/mdHR6YF9pan/j4OPn8HH+9u3r6fd9\n7u/e3kUxNi0zYN++u73n7W1Wa+5iUndk28jEztZtTVBccN7P3N/oeWl4Zl1paXTr5Ozt9Hr4\n6ezr7f5v+/fz3uFONDYxMV//xb7C3ejnWe92XFJ3adfGydHfY01bYfLZ0d/f7GpxcGhhcWt8\n6Ov07vr96eju7v5tbnn58ODfTzQ3MjJjd8a+xNzl41jsa1lSeG7TxMvT5F9OX2Xu2dXh4exq\ndm9nZHVr/Or2/fb/++br8fF1a3R69+7k4W87NDgvRnjbvsPN7tZecf9ZU2P75cbK0N96UFxp\nd9zY3ObhbXNvZmVvcG/s/H/3/frm5e/t/mlud3vz6OXmVTY2NTJbdMu/xtbm21vvZFhVee7T\nxc3X719PZGrt2tvj5+xqeWplZG9ufux++/j37ebq8v9sZGpvefTr5uZKMzkyN3xwxMHH4N3l\nW+paVlXw7svG0N1vWVBwbeHb3ebl7mt9ZGRicWz+73J+fvns3+z5fmpobm/06evk3m05NDcv\nS/bYv8fR+9hhcm5VUmbh18LK1vdiUl369d3e4e3meG5pX15kdnLs+nB4+uzi3vB9bmZtefv2\n9O/r2/s5MTcuR+bVvsbOfdV/dnNZTl3c1MHH1mlbUlf/8+jk4Ovi7XFgXV1j7/Lye2lp/efk\n3+xzbnR1efxzevzr3tbZQi40MDjV2sLGzefg0XlrV0xO3c7Dw9JuVVlYdO/3+OHe3N9/X1hd\nX3vzfHRpbHzs6e7v+v73+Hx2bWr96+nj3Nt0Niw3MUjM18LNzd7Sz2BVT0llz8nCzN9eX2Nb\nZmBgedzW2uVtWl1kZW9oZm/+7+/xeXJ9fPf2dmtw//v07vfx6uzf2m01Kjc2SMLcyNHMzdfK\nUUlOS+vMx8nT2HLvflJRT2Hv09Dj9GpkaGdcWV5r+ezt/nNwb3ZxbnB49u7o7P5waXLs6+bn\n9+zfdzcpNT5Bw9vUzcm/5M5OQVdW3dfMztLH2+5gTU1Pb37o2ubm6vpeWFhVX2x1bnjx/ev7\naWJlbXD3+fHk4ejr7P5+dW94dW13+O/1UjswNk1HavT8yMe+3X1rT3dp/HHfy83L1vZlX19Q\nVVhh6uTm/vf/Z2NYWV1sdG3//ezu83lmcW5udfzv7OLq7+70/XZvb3B1eWx49u/oXUU1LlBN\nQ+dbw8e9y1fPZvtaVmhvyc/U19jX7nZTUl1lZ11mbu7oZ19da2lfZ2D+6u5+b/F1dndvdnf1\n//v88O306Oru+3ltYWhsbHV+cPfqdflhSUQ/O0RLTF/oy83KzdzY7XVeY/zw393W1dPX5/V3\nal9ZUk9eb2Jqden2+Xdjcm5kXmv3/PL47uvv/XL+fHRz+ezp5+7z83prZGVmY3J6a2/weW7v\nbVNPSzk/XEROaNPNzsPXzs7kZFzwaWz469zW1OHl3/BqXlxZWlxXWV9hbWdufXh9Z3Z2endv\n/P3t7+jm6er48/r7fXP99O/v9np3eWpmbWpicPpodnz/aXDxWE1USj9HUU1X9trYzcnS0NPh\nd3R+aG/26uXc2t/f4fBvZ15VT1BZWlxq+ujo6uzv93BnZ25ucvju6ufq7Ovvfnj+/Hl3d3Jx\neHR3bnD//WxfdXpobXPsd3NdV1g/QFVISVjo1tfJzsvJ0+P95m9iY2/08eLn29nf6Pf7YFlV\nUVBSX1pn7uzo7ODz8/hrbGx3cfvt7Ofl4+7s7fx7c3p0c3NubXl4bnF0/2hqdHFwbHZt8/1e\nWmdUQklVTU1e7t7VztHNy9Lk6OD7a2x7/vTt7eTe4fl0cV9XWFZXXWVpcevp7+nq8/f6eHN+\n/Xl98u7v6+ft8PT4eW1sZ2Zqbmhp/Xd0dHp6b3VkcXVpZXrlYF1ZRk9aSU1Z3/LrztHLzs/d\n39Xvdm3zcWl7cPXy9m5v+3RoYGhmaGloc/zz/Pru7fH5+n7//Hl99+/u7+3t7vL/d3FuaGls\nZmZtbGpuam12fWphen1ybG/27ed6cGlVXF1RV1j8c/Tf49XY1d7g2eTn/PN7dnhia2p0c2/6\n++zx8vp/93p6dXz7/fD17uzv9Pz3/n9+eXZ6fmxsb21pZWtsaWpmaHRoZm5udnX/d//3/vP2\n6/Du6e3p7n5hXmVdXFxhaG/19+3k3d7k3+Hi5u9+cXhvampudv/w9O/u6+3+8/v8/X14cf/8\nfHl2fvT/anFpY2xiY2lucXL8bXj093h0cW56e3Nwbvjt9vv98e7y8PP87e748P36+Ht6dHBz\nc3Rxbnd3eXR0env8+v388vD38vH08fb57/N+fvz7+P18/vh8cHd0enlzcn1/bnFwcv16bHdu\nf3pvcXP+cnt//Pj293zxevzxe/bzb3r3+/J0e/r//nv99Xp6/HH8fPz0/vH5eXt9c3t5dHV1\n/Hl9/257fHb/c/7z+vb/+fP2/vv4ffx+d//5eHV8em5973f/+Xt6+n51/Pt/9Hx6e/53c3t8\ne/j2fXj//H/8/Xb8/3v3/nP+8/5+/n9zf3p5enZ8+ez38e/6fvx5fvdxf/N1fX16//9+fX39\neP30d/Pye35//Hl+e/r9evl5/X1+fP31fff39373/3j7+PV4/fj3fPx7dP19enb7fX/6//R6\nc+98evl59/t//vv1/Pz3/f37ffv9eX59+Xl99n7+fv59e/14d/99/H99+vh/f/T1fPz0/fn5\n/3j1+XZ+ef75e3Z5fXh4e3P3eXX1dXr6+P58e333enl8efz493l+9X72+3z++v94fX55//z+\nfHn9e3P2e3b6fH7+fP72f2/9eXB8efl/d/f/+vp8+fr4+Pv19P57f/j9e3p8+H77/Xr3e3b+\nffv+fvV++/D6+fz4/nf3eHB9ePd8dnz98nd7/H71+nv+9fb8e/Z///R2e/d7e3509/R6/f37\n+/3y/Xj/fvh7f3h8+H59d/h3ffp2fXZ8+f96+fty/Pl8eXr5+fv7e/h5f/Z2e3j9/nR3b/n5\nbH74eHz39Hf283P7+Xt8ev97ffx+evR+dfZ7ePp8/fr8/XV9d3x9c318enp4/np79vr79P72\n93/v//74/v799vh/d/39eXp2c3l7fXb+9Pr5/n78+vn7/P99+fV/cfTydHr6/X5y8fd6+3Z/\n9Hl++P35efv8ffz8+nV88nNz+39+eXx/fn93f3n89/31+/X+9/d5eHx6c/92cXx7/W12/272\n/nV++fP7//v5e/h/+/j3+Pvvenr29H11e/pvcXFreHt8bn57dft2ff38/n/z/fru8vn4/fb0\ne/37fPz7ff7/cnhzdXVwe3L+e/98eX5u//h4fv35+H737vr8/fr+/H188nx+9vd8ePN6eX50\ndXV3cHR4cnt2ePt4+/t5/fLv+e/w/fvwfnp+f/h5/Pp9ff14aXP8cnp7d3dvfnZvfvZ/e+7/\n/Pb7+Pj2eff4e/T7/Hx3+f72f3f5f3t5eHNueG9we2xz/Xx2/vPz9/n27u/5ffj4+fz28nx7\nfHx7eHR0d3Jzd3Rzfnh5/Hz5/fby+u7v/vj6fvh3+PZu9Pp7+X18c//7+/h6ev70+HL5ePr6\nb3t+/Ppy+/lz+fj+9Pv88vP1e+76bfv9dnV+dP11e/9wf3t8cXj4ev///nz38nX08Hx79PV8\n/vz8d/98cnp9fG53/nd7fnZ28/h8+vx7fPL5dfr0eX7/ePP4/Xd09vd3dn77ef5+cXp9d/13\nfHd+9PX2/fB7//59e3v5dn71+P/5eX59+ff693jz+3J4fnJ4+Xx88Ph5+fb79fX+/fn3/Hl3\n/P5y8/Nvf/h4f3p5+3X5fHDye//8f33+8f/29/b2evv3/vT+efL/e/h+fH1+enZ8fHf+/nt7\n/f57+XR9+3v59PV/7/B79fb1/v36fvt5fn54+nl4/3V193x6//13fPp5//n8fvH1+fr29n32\n/Xt+e358/H16fvx3d/z7fHj5dX1+cfp++W95/X39fXv//nz2/Hz99fd89nf98XR/ef18d312\nfX10ff33/nz5dnj5fHr8fnP9/Xb8fPv4f3z69ft9c///fvj9/nb78HlzeP99fXlx/HhyeHt4\nev5+fPv2fPL2+vft8H35//n6eP/+fHT4+X/2cPXtb3Z79HJ8/Hj5d318/Pn88v7+9fX5fv33\ne31+d3h6/H94//n2/Pb6/vH+fv37e3V3fnd7f3r+/vx8/Pn/+fv0+Pvufv3z/f54+P99+n7/\n/nv/cX77cfp8b332enT7+Hp3f3J8dXV+fP57/v3++vh/+3/8+Hv5/np4dXd0cnXz9vXz8fj5\n6vj9/397cnt8//97/Pn8/XlvbnN3b212eXd/eXz5/vf+e/3+/f738/Xz+P/+e3p9fX17dnz/\ne3h3fXx+/vz8//78//309vf08/f3+PP0+394eHt5e317/P18/nxze3l0d3dzb3Bxb3Fzen77\n9fXy8u/y8vDz9PHz8+7v8O7u7O7u7u/w8/r8/n3+/X39fHVzcnNxbWptb3Nzdnd+8+/n6GtR\nSEtPTVZXW3Tazs/MzM/Pz9bseW5jZmxqY3Dv6+Lj6vf9fG5mX11eZnF6++/p5OHi7PT2/3p2\ncm969fLt6+rp6Ojs7+/8eHp+eXl9e/x/+nZiVkk/Rk1LXmH138zGzcrP2d7i819jaGr24+Po\n29nf6PJmWl5dWVxiZ3bl4ejj5u71+XNmbHBv/u/u6uDh6Ovs8fXzfnZ7eXZ9+fz//Hp0eHxo\nVUw/QU5MW2b738/Gzc7T4Ofs8mdkevzk3Nvh3t7t9nFcWV1eX2hwb/Pl5err83z+em1rdnn+\n7O3t6ebr7vF+/e/w+Pr4/vv0fW95/3x2dW5uaFdPQj9OTVt39t7Tx83Q0+bu7/Btavf54Nna\n3+Hi/f9tW1deYmJ3eHD16e7893ZqfHxvc/r/9ubq8O3t+fXu+frv9nz59HZ1e3lzdW1kbXRv\ncHNdVUxBTFFSb3Ti3M3M1NLe7O3u/XDu7uXb3ODl5Pxvbl1WXmRicX50/ervfPt7bHp/cnf6\n+vTp6u7u7vX17/f9+Pf89vF9cnV2dX56amdubW5+Z1ZVSUJSUFh0+N/Zy9HY1ufz7fBxdOvu\n39rf5eXm+3dqXlldZ2Vue3L87+95enlteX52ePn09Ofq9PLx9Prx+v/z9/r39n59/3j8fG9t\nbGxrbWxfVU9DSldPbnDr3tDN29bg8eju+3Lt7OTb4OTm4O3y+WZfZF9bYmhjePl9/Pb+cfx7\nbXx9//bu9fTr8vHu8fHu6e7w9H14enlucndweHNpbHJvb3BeVFRISVZQYXXo3dTN2tjc6+31\n/W7y6evg4OTl3+j7/WxgY2JZXWtmdvb8++7ueH16b3V7eHf38/Xr6e7v7PT57/Hx7vt7/n53\ne3JqdnFrbmpqbnNiVlZMSVdTWGr339rO2dvX4Obv9HD66PLr5uXm3+P38/xvYl9eVl5oY259\n+fvr7nV/enJwdnF08PT48e3u7Oz39vLz8vD6d396dHNwc3N6cmlsam1ta19WWk5NWlJdavfk\n3dHb19ne5PDvdff2+/Lu5eni5u3wc21pXlxeaGVqfHvv7O37+vJ7e3h2df38fPbv6+/u9Pv0\n+n98f3p99Xt1+PJ5ev9wa2hvZWdpW1pUT1hXWmFt6ejZ29rX2tzo5u7x9Xj9/ezy7+35+Pd0\nZmRnaGJpanT8+/v46/D0+fv+fX1vfvv8/vjx8e33+fx3eHJwbnR5dHZzbmxubmZqeXhuZWJW\nVGBSV11ufvfd49jW2d7f2+zs9f55e3xt/Ph8evZ+bXxzamt0bW19eXr37fjz6/L48/Z4fft6\nd/r3//j1+fn2f3l6dHFrbm5obGxtbnR1c/38/XVsXVtnV1lcZmtu6+7e29zd3djg5ent8357\nb3Jvb3Fv+Xt8/vb5fvf//P7//3z3+vz48fb18fXy9fb8/398d3BxbW9ra2xubWtwb25xcG90\nfXF3+vX2/PNxaXVtYWNsbmZ2ff3t6eno397k5OPn7vd7d25saWtzdHt+8O/u7O7s8PH19/p9\nfHh7dXFyd3p7/Xh4eHB0cnFyb25sb3htb3l+en/4+/P39Pr37/Pz9vH19/j7e359cnFzc25w\nc292e3z99fDw7Ovs6+vr7u/x9/f59vb8/31+fHx5d359eH90c35ub25rcW9vd3t9fnx+9Px6\n8PV9+vX+fP79/3t9+33/+39+/P56/Pb8+/r7+PT2/f75/Xp3fX91d3x7fHp5/Pb0+Pfu7/f0\n9fp++/78/Hp4ef58e/n0fX7+/X15eXd+dW93en1xf3539X16+v5+/fT3efz6fv77/3X/fHT4\nfm399Xh8+v3+//r5fv97enx9eHB9e3R8fH17f3/9/Pr5evv8eP31+Hn79Hb7+Pp/9Ppw9/V+\nd/f2+/1+9PT0+/zy/f/zfvx/dvx9dn59fHl3eXJ6eW96cXV4b3d1cXp5evr69/j89vf1/X7u\n+vrt8vf0+Pb5/P37+Xd7fX75ff9//nX+9W/+dHV/b3Jzc3dzeHT2eGnw/Hl693v78Hbs9vnz\n9Oz89H/8+P55fvxseHxtfnJ1ffp1cfN6fH529f79dX78bvp8+/R3/X3ub/vtdPf0/njven/0\ncvr8b/Z8ee9ufP1ycHx+cfV29/f++f/6+nd7+Hd2eX53//d09/J6fvP8dPj0e3v8enR5f213\nd3Bycntwefh5ePX8d+/rcPPoffny7XR17nP47n707O/+7ux69u59+/fyevT7dvZ0+3N0+nr2\n+vb9+uz3evT3bnVvXFteU1ZdVl1pZWn9/Hnq5ene2Nze1dnh2t3g4N/p8ef1d/tza2loZWNn\nYmRnY2ZoaGNrbWh4d3r++vD56O7v6vXt+fH6fO34/PvyeXz0b/z+evz+/3d7dnR1enpv/n9y\nff//f3x7ef5+efv6e3n8e3V8e3z9fH37/Hz78/z78vf5/PPu8u/17+z38+/y+vj6fH39fP78\neHL+f27993Z97/7++W1tYm1cU2tTWVxZYl1wbO/k7Nna2NfU1N3b3u37/mxfZ11cYl5jaHN6\n8ejq3t7f3N3f4eHt7e58fXJub25ubXl3cv35/e/zcGtiV2ZNTGRIUlRWXVrycd7c3MzSzs3N\nz9bQ3d/o/39kX1pbVFRVUVpUXGNnfHvl6eHc39vi3eHl5Ozp+PHy+fT67vj27vL1+PL9en5z\nbmpfY15OWl5JVlxOWVtoY3rr5tfd0s7Sz8/O19bX3+b49mpfZFxXWlhZW11iZmx59+/q4+Di\n4N/j5efr7/j8fnhycnNvcnR0enR6fHN2dnZpa2xaX2pVXGdZXmNvZ3nu7+Ln29nb2NjX3Nvb\n4+Xs7/5rbG9hXmpgXmNsamn7fv307uPw5+Pt6uvv8/p9fndzdnNvcndv/W958mn1+2nzbHt7\na/9xbXlubnhubXxwcnh9fXj19fTt7unr5+Tn5+jn7+/v9/t1+3dsdnRvb3l1eHz9+3v39n73\n/P/9/3h9/W74dXT5Z+xvc+xu/f/0df3tbvjwcPP6efj4eX31b3Z+cHB1cnJ1eX579/jz7uzp\n6uro6uju7O339/l9fXlv/GpzfWX6cWz9cnb5dvx7+/h8+Pr8d+xu+PJv8/79fPZ//P19+XXz\nc3r8bXtxdXR2cXZ4c31+/vvz9e/u8Ovu5+7p6ffo9vX2fn54enhzcntucX5seHd0/3T4/3fv\nb/J/dfFv9HRu62T28mfseP5//fpz7mz9em18aH1pbnFub3N4dn/79/Ts6+zp5ujo5ufs6+z3\n8vl+/XZ9dHl6cHl2dnV/eHd+/vx7+Hz59nLrbvv1evv9+//x9f32d3heZW5TXmNbXV99aHzs\n6d/f19bX1djW3OHk9HtqZl9bW1pcW19nann26+Xf3t7c39/m6+z7+3t5f3r+9vfu7ujv6eTy\n7e/3eFtZVkROTD5OS0tSYOx5z87KxMfCxcfM0db0b19XUE5PTk9TWV5t+Xzc3ePa29zq5Ox7\nfW15cXTz7OXk3Nrc3d7e5O3u8XV6dmhmTERGQUg3QFtAVGzWz86/wL2/xsHJ2PlxXk1LS01P\nU1/63trSzdDV3exxWlhPS1FRUl58693Uz8/O0tfa5/dzaGRnbHT/6tzd2dPY2eBdR0Q7PD0w\nQktGYtzGwLy7u7m+ztLhW0pGRUVIS1bu1tLKw8PHzdXoZlFIR0VDRE1WXvPe0MvNzs3Q3/lx\nY1xZWV5tfvLh2dna3N/k7nJma2tobfft5d7f2t1lU1JEOkZDOE5UV93MysO7v8bDyeX2Zk9O\nUExOYXn12c7Oy8vU3eVrVE9NSktOUVx76t3U0dTZ3fluXVVYUldeafjk2tTPz9LW2ub9bWNc\nXFxcYm987ebh4d3e4eXn5OLeXEtRPz5ROz5cVW7fzc3CvcfKxc3h8mZSV1hMT2BrduDb2c7O\n2d7e9mReVE5TVFFWZHTx4N3a1tXc4+j7bmNcWFtdWlpeanv09ujd29ze4eDh7Px+fX17c3N+\n9/r8//r0+X11dHZya2hra2xsam91dHp+/fDs+V1e+1xcX1ldcXpnf+Tj39ze39vY4OTj6+7u\nf21uc2tpaWZjZ2tkanNwdvfw9Ozr7ezr8PHt8Pr39//+/3x2enp2e3t9ff/5d250b2lmZF9e\nYl9eYWltdPz17uXf397d3d3c3uPl6e/4/3VubmxpaGlpa2xsbG9wdHN5eXj9+fn49Pf19Pn5\n+/r5fnx6enp7eHZ9e//7+fT08/Py9Pj0+Pr8//5/fX//e33/fn5+fn16d3d0dXNzdHR1d3p6\ne378+/38+vn5+Pj4/Pr7/v3+e3x9e35+fn/+/v34+vn29vPz9fT09vj5+/r+fX55enp5eHh4\nd3p7eXt+f/36/vt9dXl3cGhtbmhua2hrb3BvfPz77OTj4eDf4+Tm6+zt8Pn9fnZ3cm1rbW5t\nb3Bvdn17e/7+//39fHv9/H1+fn59f/59/fn7+Pb59/Lz9PTz9fX4/Pv5/nt8fXx4eHh2d3h1\nc3Z0dHl7en9+f/z7/Pr8+/r8+/7+/v9+f/78/Pv4+fb4+vr+/P58e3l4eXl7//7+/fv7+Pj7\n+/58fX57e3t7e3x+fX//f39+/3x9e3p+e359ff1+/vz9/f//fn18enp6eHd9e3p9fX7++P1f\nWOVnbdr+3Nvv6+LnffJ+bff6a3DydXX0d3Pw/HT99HZ7fW53/XZzeXp4+fd1/vD59/Dz7/T7\ncf5/amtnZGhraWt3/vzz7ezo5Ojp6erv8fp9+v16en5++vf99vH08/fz9Pf6//18fnl1enh9\ndH5/efR2/H97/Xf2e336eH3+fX7wfW97Zl1iY1tgZGRv9fbw39/f29vd3N3k6OjzfntlX2hh\nX2lqbf3z+Ozk6Ofm6ujn7vPx+P72eXd5/nJ2d3Fvb3NoanNxaHl7cnl4/m/7e/7y8fH4/Hxq\nZ2tgZGRmbHz7+Ofh4d3c3d3c4+3yeW9sZmdtdHn48uvm5uXp5uft8fx5c3ZvcGxpbXVqeXZp\neG9ta3BsaHVwbX15b/z4//bu+e3p6uvq5+3q9XFvfG5tbGtufH16+fDs6Onv7u3q7u/v7Ovv\n8e7u6+7y7frw9nd3eHV1bHNubW5vaW5ubm14Z297bf92fW399Xrv9O7y6/Pr6vXu+u/08PX9\n93198Xd9+W77enhy/nN1/3J3+v/+/PP7/Ot37fT49+998PL4ffnyc/F59nbwdnr2cP12fm7+\nbntzdHd3e3D0ae17/e/57Hrp/fntdO39/nx7/HD2eH979XL1e/72+vr+93nweext8Hl79HP5\ncO9v8Hb9/P119Xz873ToZux8c+53eedo7vBf2FjbbHriY+Bsf+tt/vpm9Gxt6GPlav7rbet7\n/e948/Bj3V/s82bhX+VxbetteO1t8uhl3Gns72zfY+h2dff1aONuadxa5mh/cPZu7GTcYvD4\n/nnr+mzeY+Jp5F3eYeNf3F/j+HbgbN9h3Wt4cudV2Vr3bmjeT81V5OVh22beaez5/2/ma3Ti\nWd5m8vlq3Vzh/2jke/v473T693z/+vZqdvhg8fxr6nT0ePfyb+/0bud37Hbrdu57fXP0d/55\n/3fy/e1w7X/5/vt8dvBw9XD4cfh/fvp59HP5cfZ7evRw7HHvcX/1ee54fXn7d/55c3r79//t\n+PHu7/J07nR3/Hd5/fV7+/f+dff+cf70efj1d330cXL8dnnyfXbu8fr29H388f57/Xt8+f9v\n/vp8+/d7/O7+e3p6c/v+fPv5+fn5dnd6e258dW5++3t6/XF9+Xp2/n54/v53dH92c3x/e/z6\nffr0+fjv8fPw7+zs6uvt7fD4/Xh8fn37/n58eG95enlxcXRzcXlwb3BzcXv99Pjs4eHY22hN\nU01LUk5PYN7e1M7Qz83Q4Oj8bGtuYGN2+uzh4Ojm63RhYFtaX2Nme+jj3dzd39/m9n56cnV9\nff3u6+vq7Pp5fGtnamhoa3z89Onp7m1lSkJUSE9cXnncyNLLzM/W1ONnbWZjZn5v/N7d3tzf\n7+3+aF5fXFxhX2FnePXt7O3t7O33enr/+u3p5uPi4uPq8Pb3+n52cnZ2cm9zdXx+d3d2+3p8\nbllaVkxMV1Rbe+/l2M7W1NTc5ujyanR/e/no5uje3+bs8nlral9cW1tfYHJ+8ejj3+nm7vv+\nfHx+8e/r6Ofq6+3z+n5+cnRub3V4cW9++fl3/v/78XZfX1BCT1ZMYGjn4szN2s7R1+vna152\nbmpq6+zj2+Hq6eN/a2hgXmJlXmBpbGpsenb+7PHv7efu7Ont6ufl6eXn7vT7fXn7/X73+fx4\ndXdsb3dua3h1evD+XVhiUUVLWU9ffuzfzsnVz8/U4ur2YW5vamV96uzh4ubq5+9taGZgXllY\nWltlcnrz5t7f4eTq7O/8d/nt7Ovo5ufp7fD2/v5yb21pbGlsbnf/ePt4f/13XVhjT0VMX09Z\nauPe1MvWzszO4e7fdm1laGNu8Xf56N3l6+Xx/mxcV1VYWVddd+7n4t3a2t7o7fLy/3R89vP1\n8Ovm6e3v7vpqaWpqZl5kbnVxbnrv63toZHVmT0ZcZ05RYNv33tnVzc7Q49XV5Wts7mtiYW9z\nffx79fL6aWd2a19fbXRtfPTq5uLk4t/i6vDq73tveXp1b2/+9ntte/h6amh6cmhreXlxdnt6\ndXl6c3JdVnFkVVl172J/4djh29XW2Nrb4d/m9nf//GpiaW1nZmhzeHp8+Ozt7e/o5+vv7Ory\n9PLy+/36/X9+eXZ0fHFscW5ubW9vanZzbnJ3/HF2+Pj9/fL08fP07u71d3/ufW5z7/5revDy\nevfq7PXs6Ort7u/0+vv9d3h8fHl6fv96//j6+/n5/v3+fXl5fXl2enp6eH39e/z8/f7//H58\n/f1/fn/8eXz9fnp+/H3++/v5/fz69vz69vn7f/n8fvp+fv9+/f/8f//+/ft+e3p7en14fX1+\n///5//n8/fz++P/+/319en19fX9+f3t9fX/9fP58fXx5e3Z8e3z+//v7+vj4+/389//++vx9\n/f/+fnl9fnx9/fz//Pn9/fj6fvv9/H59fnz8eXz+fHt9/f/+fff5f/r29v5/9vp7/33+fXn+\n/vx8fH99dnx6+3h7/nx/ef36fHz5//96/n1+f3z8e/f+//j//H3+/v7+e3x+fXf9fXx//3v+\n+HT5/X34evn2ePx69n57+Hv4/372//379/x99n1++3/9e31+dPl9fnr59nL8+Pp19vt0+f12\nXu3iY33k8Xjz5/h05/Z3//t4b/h3b/X5eHvv9XH2+nt1e/5zdnj9fHz+9Pr7+u929fP9fvnz\nc3p99G9893/9/f79+n5+/Ht7/nr/ef19+fx++vP9fPZ6f3R+/nZ8/n50eH/7dHv7/XZ++nN6\n/Hxzfvt8//z39n/48//6+vl3e/9yfnp0fvt9dvT5cX30+3H+73h4/f12c/l9dHb5/XL4fnX0\n+XT57314+PVtfH92dn78d312+v17fvv1+vt9+f52c/z9cnT8+Xr++/P0+H3/9f16d3v/fXFv\nf/t2d/j78/f0/Pb5eHV5/Hj5cnh2/Xhudnb8eH15+vt5cn1/a3Ftamhsam79+vj36unq7Ojl\n5ejo5+nn7e3s7vD7+Pp9fXRyem5nbWxqcG17cWx6+XZ08mxufnNzc93l3OZdTFxlR0hXfmb9\n39nNy9Dc0dDmbXp/aWRlan7s8fPl4/VuY2VkW1lec/v87ePd3N/p6unxdnT4/P347uvq6u3u\n9Xdtb2VfZm5qeH/77Ofzd/7r+FlaWURGZEpPZt7d28jUzc3Q7u/ibWZkdWzx6u/m3d7v8Ph1\nY19YU1pcXWX+6uPe4uXo6ft0ff/08uvp5t/l7fHp73VsbGloal5jbX/9/fF98vT+bfj4YF1i\nV0FMfUxdbNzb0Mzk0NDWb/3xcH90fXve3ubr4ub5fWdmX19aVldgbm56697f4er57+7/bn7r\n5+fn5+Xn8Xv6935tbWxrb2ppb/h0d+/0a37vbXf8XV12YU1Ba21Q9G7X2Mvh99Db7mXvdenh\n9/Xf2e3u8vr9/Gdhc3NnXmZgW2ZtYXjs8Pnq6/zr7v325erw6enu8/d2/fD8cn55b3Jsa29z\nbHR7dv5vdvT+b2hlYmRdTUVxblLy+NbVzunu0ON9bPL+5uZ37dzf/PH1/fZ4ZWv5eG5tbGZt\nZFNa8Gdo/e/m5ets7Ob7dfnq6uX19OTj9fvv8/V7aGRva2Ft9Xt4eXT9/WZg+nxtX2B2Z15L\nVPFcam3n2Nfd/tnb7nV68u3ofPbf4O/38PL0dmhufW9sb3N6amRgYVlld1719u3s6ez34fn7\n7enu7On56+3+fPn4enp4bnJ1a21zcnRudXxxfWlv/nd0aWVobl5PWPVaaXvw2tzf7tXe8fL1\n7vPyb+7h8fju6/L0dnP3e2tueHZyZ2BsaF5oa299/Pvu5+/z7O3z7+/x6ejv7Ovt9Pr+eH11\nbnN1bmxwcWxs+2t/+mv0e3Jsc3pra2VvbV5XbG5fd3To4ebr3tzr7e3r7fH+9+nv+e/r7vn9\neH18a2ttZ2FlaGdvbnj39Pj47vTz+Pvz7/f67vH28vP08fb69/p/fn52eHdtc29sbG5ubndv\ncnt1d3Z5df76c/t/d2dfb2Vga2718O/t4eHs6Ons7/X+9fN//PTx9PX4+fp6bm5xZmxsand1\nen32+/zy9/X1+vn3/f/7/Pr5+ff19v36+X16eHV0c21xb290bnd9+3x4/P92dHN5eXF4/Pty\neXViaG5haHNx/vPx7uLo7eXq7u/1/fn6ef/4/f78+v/9fnJ+e29ydXV4enV6+n189vf7+Pn8\n+ft8/vx9/3/+9/f2+Pn9ff19d3h4c3N1cXl3dHx6/Xh7fXT7eHv7//x1fHVna2llbG54/Pjz\n7+js6+nq6ezt8fX3fv99end2fXd4dnf/c3Z2en51fXn9+nv6+fb6/Pf9+fv//X/9fXl5eX18\nfv79/Hx7/nx6eXp9e3p3eXx4enh4enZ+en1/fPr+//z8+3x/e3Z8dnV8fvz++fXz8vTx8PPy\n9fT09vX09PX19vj3+/r7/v96fXx2eHZ3eHh6e3p7fHx8e3x7fXx6/v9///76+/n5+fn6+f39\n/Hx+f319e3x6en7/fvv8/v5+/3t8fXv+f3///Pn49/L09PH08/f4+Pr5/P39/37//n7+/31/\n/3///n9+fX18e3x8fHt6enx9fv/9/X/8+/35+vr6/P5//35+fX59eH5+fH//f37+/X7+fX/9\nfvv+/fr6+f77/Pv7/Pn//vr7/f36/P38f/7+fn5//fv7+Pj5+vx+end3d3Z0dXV2dnN2dXV3\neXt5e3x8fHt9fn7//v38/v79/f7/f/79/Pz9/f7+/v79fn5/e3p7enp7ent9e31+/3/+/v39\n//78/f78+/39/fv7//v8fv3+/31+fXx+fXx+fHp9e3d3eHZ2eHd3eXh4e318/Pf4+ff2+fby\n9/X0+fj7//5+fXl7eXZ6e35//37/+/79/P38/f3+//78/f38//7//v1//fz9/vz9//38/n9/\n/39/fXx7eXp5eXl2d3p5e319f/99f3/+fv/8///8/v37//7+//19/35+/3z/fv//fnx9/379\nfnx+enx8fH16e358fX///Pv+/vz9fv///399/v1+ff9+fH57fHx7e379/vz8/Pv9+/38+/v6\n/f3+/n5+f3x+fnt9fXz+/3///v7++/v79/j5+vv5f39+en17e3x8fn7+///+fv9+f37/fXx+\nfX59/n1/fXt8e3x7fH1+/v78/Pv7+vn6/Pv6/f39//9+fv////1//v9+fn1+//3+f/3+//78\n/f/9/n7+/n7//v7+/v7+/35+/359fn5/fXx9fHx9fHz/fHt9fn57ff99fX/8+/38/fv8+/n6\n/Pn7/Pr9fn58en58e3t8ent8fH17fH5//n//fn5+//98/X9//n7+fv3//vv7+v36/X5+fH14\neXh5eXl5enp+f/38+vv7+/z8/Pz9/v77+/37/vv7/n99f319enp4d3x7fHt9/f7+fn//fv/8\n/v7/fP/9f/7///99f/9+f31+fXx8e339////f/9//fx//37///79/fv7+ff6/Pz9/f1//v3/\n/31/fnx+eHt+e33//f/6+/r6/Pj7/f3/fv98fn58fn19f31+f/9+//3/f33/fH1/e/9+ff1+\n/398fn58ff99fH5+fX5+ff7+f/78/fz8/f3//357fHl8fXx9fHx7fX/+/Pz8/vz8/fz//P3+\n//79/P39+/7//f/+/v7//f5+/n59fX59f31//n7+/f39+/r7/P9//39+ff/+fv/+/n//fHx7\ne316ent7f35+fv79/vz8+/z++39+fHt9e3p7fX59f33//f79/f7/fn98fH17f3x9fXx/f//9\n+/78/P37/P3+/P5+/n3//378/f39/f19f319fn79/3//fv9+//7+/Pz7+vr9///9fnx8enx9\ne379/v79///9fn5+fHp8fH1/fn5//35+/35+/39//n59fXx8e3x8fH5+f/z+//38/f7//fv+\n/X59/3x+e3t8eXx7e3x7fn//ff37+/z8/P35+/z5+vn6/Pr8/v1/e3x7e3t7eXp7eXt8fP9/\n/////P79/f////9//f1///79f35/fH19e3t8fv97ff5+/f59fn18f35+/379/n78//78/fv9\n/f79/Pz9/v5+///+/n9+f35+//9+/378+/77+/z9/v39/v5/f/99e3x+fXt9fXx8fn9+f/5/\n//v8+/v+/v3//n19e3h3eXp5enp9fX7+/f39/f39+/z+///+fv9+fH1+fXx+fXz/fv7/fX18\nf35//P1//v59/35/fn9/fn57enl9e3x///v+/Pv++/z9/Pz9+/z+/v3+f39///3+/v79/n7+\n+/z8+/z+f399fX57fn19/f/9//77/fr6/P19fn99f3x9ff5//vz+//9+fv99fX58fn57fH7/\nfX//f/7+/f5+fX5+fH1+fX58fX1+/n5///7+/f7+fX3/fnt9/f7+//9+fX5///39/P37/P36\n/P3+/Pv9/P79f//9fnt9fHt+/n7//vz7+/v7/X98fH17fH57f359/n7+/v78/Pz+/fz8/f99\ne3t4e3t3eX16fP5///5+fv7+//z+//79/n57/318fnx8f35+/3//f/9/fX5+/n9+fn5+f/9+\nf31+fHx9f//+//z+/v3+/f36/Pv6/Pv8/Pz+/v7/fXx9e3x/f//+/vz9/vz8/P1+/P7+/v7+\n/vt//v5+f////f5//v9//f1/f/7+/P1+/Xx7fX59fn99fH17fP5+fv5+/399/X79/f79fn18\nfXx8fn7+/35+/v97fX59/X58/f3//358e3t9fnx+/31+///+fn//f35+/X5+/31+//5+fv59\nfv9/fn5+fX1+//7//vz7/vv7/Pn9/Px//398fHt9fnx+f/3///39+vv8+/37/fz6/vv8fn9+\nfX59fH17e3t7fnt8/37+fv38//1+f397fnt6fHx9fP/+/v5+//39/Pz6+/z6fv98enp4enh5\neHh7fHz+/f78/Pz8+/z7+v38+v3+/fz+fv59f/1//v9//n/+/3////9+//7//v78/vz9/f5+\n/31+fv9/fn99fn59/31//X39/379fX9/fH19ent8e319fn5+/f79/P/8/v///n59fX19fHx9\ne3l6fH7//fv7+vv8+/n9+vv+/X5/fn1+fHz/fv7/ff3//v79/P79/Pv7/P37/f/9fXt8e3x8\nfH18fX18fH58e/5///z8/f38/vz9f///fnx/fn5+fX58f318fn59//1+ff9//359fX19fH19\nfnx+/P79+fv6+fr5+vz7/P39f/9+fn19fHx8en1+fv7+/f/++/r7+vz++/v8/vz9//1/f398\n/n7/fnx+fnx7/n59fn3+f319fHx8fnx6fXt8/v///P/7+vv5+vr6+f38+v3+f359fXx+/359\n//9+/f/9/v3+/v99f//+//3+//7//P/9/P78+/z9+39+/n5+e35/fHx8fnl8fX19e//+/v37\n/v/+//5+/n9+/3p9f319fH18fH1+fn79ff38fv3//3/+/358fX16/318fX///v38+/z6/P39\n/v7+/v7+fn5/f/7++/59/X7+/n/9/v/+f3//f/1//fx//n7+/vr9/fz/f39+/39+fn9//3x+\nfn5///3+/v7//n98fH17en5+e39+fH5+///9/P78/f/+f359fHt6ent8fHx7fX58fn///fz7\n+fn7+Pr9/P79fnx8enh5eXZ2d3h7fv/++/z7/P/8/v79/358fHp7fn//f/7+/Pz//n1+fn39\nf/5+f318/3x9fP5+e318fv/+/v78/f3//f39+fv7/P7//fz9/f7+/3/9/n7/fn9/f/7//n5/\n/P3//P9+/v/+fv7+/f39/v37f/78fv//////fH5+e3x8fn19eXt7eH98ffz//Pz7/H/6/fz9\nf/99fX1+fnx9enx6fHp4fnh8fn19fv3/+/r8/Pv8/v3+f37/fn79/n7+fn7/fX58fHt9fHx7\nfH19ff//fv79fv/+/v78/n79//7+/f77+Pn2+vz9//3+//7//n5/fnx9/39//X/+/n7/+/99\n/n///37+fX/+/Pz+/f77/fr6/Pr8/Pz7/379fXt8fHp8eHp8eXt5fH19/v/7fvz8/vv7+/v8\n/X97eXh7eHp7fHx+f//+/fz//f3+/f/+f37+f318e3p7e3x+fP9/fn99f3/8//79/f19/3t8\nfHx9fXz/+33+//78/vr9/v59fv39fv79fv79/P3+/379/P/9///+//7/fv/9f/3+/v1+/v/+\nf3/9/v39/v78/P/8/3//fn17fnt+fXt8fHx8fX7//f7/f35+/v7/+//+/37/fHx8fH19f/79\n/3/+/v99fn59fv9/fH5+e3t/fn/9e319fP5//n3//vz7/fr9+/r8+v78/v76/f9/fH9/fX1+\nfX///v58fn////79/Pv6/Pz6/fz8/vv+f317fnp8fnx9fv3/f39///7+fv9+fHx8fX19e318\nev9+ff78/Pv7+/v9/P1//vz+/f99//5+//3+/f39f/z9//98fX58fH1///7///38/P7/fnt9\nfnt+fnz/fn3+fn18/n99f318fHp6fH5//v39/v38/fj3+fn5+fv5+/v/fXx6e3p6fHp6fX3/\n//v6/fr5+vn6/f3+/f39/v5///99fX59fHx9enp8eXx/f3/+/vz7/vz+fXz/f35+fHp6fX17\nfX3+/P37+/z9+/v6+fj5+/r/fv97fHx6eXt6e31+/f78+/v5/Pr8/f37+vv8/v/+fn5+fn16\nfH1+fn1+fn5/fv79/f79fn59fX59fHt+e3x/fH////9/f398fP9+fX3+f/79fv7+/v3+/f7+\nfn5/fHt6e3p8fHx+fn9+/vz8/Pv8/Pz8/P3+//5//v59fv5//f5+/X7+/f//fn5/fv99/vz6\n+fj6+/l//v5+f318e3x7enp6fHp9fXx/fH19/v7+/Pz6+fn8/vv+/n99fHt7enl5eXt+fn7+\n////f/38+vn4+/v8//1+f/7//v///v/9///+/37+/P78/f/+//3+//7+f398//99/f/9/P78\nf39+fn79+/3+f/5///9+fX3+ff7+fv7+/317fHp5fH1+/319/37/fH1/fX7/f35//35+fXz/\nfn///n/9/f78/X//fnN9fX19ev5//v1//f39/v9//v79+//+/v/9fn7/fv7///3+/fv8/Pl/\n/vr8+/7+/f19fnx6e3t8fX99fX9+/f38+f3/f359fH19fn5+/n17fHx9e3p7fH3+/f3+/vz+\n+/v9+/v7/fz//v19//59fn7/fP7/fvz9/f38//3+fv9//f7//v79/n19fv5//f3+/fz+/v5+\nfnx7fHt8fX58f3z+/H7+fn7+f/98fn5///9/fv98fn58/35+/f7+/v7/f////37/fn59fXx9\ne319fP99fH99fn7+/v79/fz7+vv6+vz7+/v9/358fXp8e3x9e/z///77+fj4+Pf6+/z9+/9+\n/v99fnx7e3x7fHx+fn39f/37/fr7+/v6+fv+f/59f358fXt8fX56fHx+fv/+/vz///5/fnx9\nfXx+fn99/v///39+fX59//5+fn1+fX3+/f7+/f3+/fz//v7///7//v/+/v/9f31//3//f/5/\n/f38/Pz8+/z9/v79//7+fn/9f/38fv7+/v1//317e3l5eHp4ent8fn78/vv5+/r+/f///f39\n//98e357fXx5enp7fHp7fnx/f//8/P39/P7+fn9/fX18fH58fn19fn3++/z++vz8+/9+ff5+\nfv3//fr9/P3/f39//P1//X59fn9+fv78+/38fn1/ff5/fXx//P/7/37+ff98/31+/n7+fXx8\nfH59fn18fX5+fn5//v7//f39/fz9//99fXt7e3x8fHx7fP3+/v79/Pz8+fz++33//nz+/v7/\n/f//+3/+/f79//38f359fn9//v7++vz9+37+/vz8/P98fnv//3/9/vv8/X98fnx8fH1+ent8\nfHp6eXd7e33//fz8+v79/P37/f5+/39+/3//fX5+/398fX18fHx9en//f/7+/339/f7/fH57\nfn19fHz+f/38/f78/f76/fz9/Pv8+35+/359fnt7fnt//339//36+vb6+/r9+/x/fX19en58\ne3x6fX98fv98/n///X3/fv3/f359/3x+fHx8e399fv7++//9/P3+/Px//n1+f/7+f/19/v3/\n+/z9/fv8+/7//v//fX5+ff3+/P3+/fz5/f7+ff3///98fX59fH97fXt5e3t/fHz///79//78\n//7+/vz+/f5+fn5/fHp6fHx8/3t9fXt/ff/+//z8+/n7+vv9+/v8/H78/v79fn18fn1+fX5/\nff3///z+/f38/f79fv9+f/7//P///33/fn5+/f39/Pv5/fr9/v19fHx6eHd2d3h5eXt8fn7+\n/v37/Pv6/Pz+/3//fn58fn5+f33/fv9/e359fn7+fnz+f//9f359e31+e359ff5+/3x+fnx+\nfv79//z9/P7+/n9/fn16e3l5e3t8fH5//v79/n/8/n/8/v7+/n59fXt9fn9//f7+/X7/fHx/\nfnx8/37+/3//fv/+/v79//3+/vz+//3+//38/Pv7/Pr+/P3//f/+/v99fv9/f319ent9fP/8\n/Pr6+Pn5+f39/H18fH58fH9+fP////7//n5/fn19fXx8f37/f33/fX59fnt8fX39//79/fz7\n+/v7/vz8+/n++/x+/n18fn1//n9+fnx//3/+/vz8/Pz+/f3+/Px+/35+fnx+fXt9fH59/v3/\n/P/+fnx+fP5+fH59fn7/fv99f3t8/3z+/n7+/v38/X/9fnx+fHx7fn18fXx9fv39/fz8/P78\n/f37fv5+f/1+/P39/f////9+/P9//37+fX1/f33/fXz/fH1/fH7+fv7+fn7+fP/+fv3++/v7\n/f7+e3x8e3t6eHl6eHx6fv3//P78+vv6+/n7/P39+//+fn79ff78/v38/f5/f358fXt7fn17\nfHp7e3t8fHt9fv7+//39/fz+/f3+/P38/ft/fX99fHx8eXp4eXp5ent+/fv7+vn9/f3//v7+\n/vz//v/+/f79/f7+/v39/v38/35+fv19f318/Xx9e3t6ev97//7//n39fX/+//v9/Pz+/f1+\n/fx/f3x8e3h3eHl6fHt8fX39fv3//vz8+v36/P77fH58e3x4e3l7fH1+///+/X79fn5+fP5+\n/v59f3t8fv9+//9//P/9/X7+//z6/Pv8/v7/f/3//n9+/359f//9/f39/f39+fz7/35/fX58\ne3x7fX5+ff7///1//v7+//9/fn5+f31/fH19fHt6eXt7fHz9/Pz5+vf4+fn7+vr7/v3+f398\nfHp8fn19fn7+/v79/v3+/vt///9+/3/+//78/v38/v/++/38/H7+f//+f37+/n9+fn98fXt8\nfHl9enx9fHx9/37+f//+/Pr8/P7/+///fnx5e3l3fHl6e3v+/vv6+vr5+vj5/fr7/Px9fX17\nff99fv56f359/vz5/Pr4+/v8/f77/f3/fX18fX18fXx+fX5+ev9///5//X7+/31/fXx9fX57\nfHx+/f3++/39+/v7/f3+/H5//X37/f3+//z/+/39fn1+fX58fHt9f31/fHp7fH5+/n5///3/\nf/9/f37/fX5+f/7+/fx//v7//X7+f37+fn18e3l7ent7e//+/v3//fz9/fv7+fv8+f7+////\n/v78/P3/ff9+fn9+//7+fv5+//5+/f78+v3+/n7+/37/fXx9f3z+f/5/ff19fX5+/399f39+\nfn58f3x+ff38//57fXx7fHt7fHx//fv8/vz7/Pz9/Pz+/P7+/f79//5+ff5+fv99/3///v3/\n/P5+/n7/fn79//z8/P7+/P7//3/+fn99fXx7e3x8en16ff7//f3+/v1//n59fX19fP/8/Pv9\n/v59fHx7e317fP99/v9//3/+fv3///5+fv78/vr8+/r9/f3+/vz7/f3+/v99fn19fn19fn5/\n/vz8/fz7+/r9/358/n7//33/fn7/fX1+fP7+fv98fH19fn3/fn/+/n98fn1+fnx/fX9///99\nfX3//f39/X/+/fz9/n5+fn1/fv5+/vz8+vv6+fr5+vv9/316eXp8ent5ent5eXp8fP/8/Pr6\n+vr6/Pv8/P9+/3x7e3x7enx8e35+fH1/fv9/f319/n/+/f37/Pr5+/v8+/3+fnx8f35+/n9+\n//79/v38/Pv8/f7+/f3/fXx8/359/n1+fXz/fnx+fX1+fXt9fH59fH19fv/+/v37+vn5+fn7\n+vr9/P5+f39+fX58e359fv9/f37/f/9+/vv9+/v9/Pv7/Px9e3x9fH5+fv5//fv9/Pz9/v19\nfnx8fHt9fn19fn19fXl8fXt9fnz/f/79/vt//f3//f39/v9+fv9+fnx8fXp8fHp7fH1+f/3+\n/vx//vz++/z7+//9fX7///v9/Pz9/P39/f79/nt7fnt7fHx9fX3//v///v7+/n5+fX7/fn//\nfnx9/n1+/3x/f3t+fn9+ff78+/v9/Pv9//x//35+fn58fn5+/P3+/P1+/f77/Pv7+/v8/f7+\ne3x8enp7e31+fn99/359/f99/n/+///+fn79fn39fnx/fP98f396fHl6enx9//37+vz7/f/9\n/v9+fn19fHt+e319fv9+/n59f/79/35+/n99/nz/fn79f/3++/v7+/v6+/j+/fx/fv78//3+\nfv59f/5//v/9//5/f37/f3x+f//9/f39/fz+/v7/fX7/f3x9/37+ff79fvv/+/x+/31/e3x+\nfH17fXx8enp8fX99fv///vz6/f37/v3+/v59fXx9e317fXx5fH1+/v37+fr6+Pn7/P79f/99\ne3x7e3p6fX3//f37+fr7+fn4+Pr6/P5+fHt5eX18f/7+/v/+f/79/Pv8+vz7+/78/v3+fn17\nfXt+fn1/fv9+fnp5fXl9e3x8e37//Pv6/P38f/7+/fz6/P38fn57e3x6fXx8fHp6enx8fnx7\nfn78/v39/vz++vn5+fr5/P3+/fz8/vz8/316e3p4enl6en1+fP5//vv+/n////3+f/57f3t8\nfHl9fH3+f/37+vv7+vn7+vv9/v9+fHx+fn19f3z//v78/fz8/v7//n5+/37+/vz9/f3//n/+\n/n/+f/5//v7//n/8/P3+ff9+/v7//v5//v1+fXx9f37/fXt8en58fv7+/fr+fv97fn58fn58\nfn59/319///+/n9+f359f317e3z9//v+/fv++/38/P39/fv+/P7+/n1/fX5+/37+f37+fH5+\n//3++/z8+fn5+vz+/v99fXx6eHh6eXx6e318/v7//n/+/fz9/f78/v39fv1+fX18fHl5fXt8\ne3x9fH79/f39/Pz8/P38/Pz6+/z8/318fXt6e3p9e/99ff/8/f7+fv9+fn9//35+/v//fn9+\nfv9//v9+fv59e318fv9+f37/fn9+fn5+///+f33/fn7//n5+fXx9fn9+fH3//37+///8fvz/\n///8+fr4/fr6/Pz9/359fn5+fX5+fv5+f379/v78/Pz+/P7+/n7/fv7//n///v/7/f39/31/\n/359fn3+f359fH59fXt+fXx/f31+f//+/f3/f/z+/P79/X/+/318eXt7e318eXt7fP7//v39\n/fz7+/z7+vv8+//9/n3+fnx9ff//f3/+/v78//79/v38/P79/3/+/33/f//9//z9fn99/39+\n/v37+/z+/v9+fnl7enl8fnx8fX/8fv7+fn5+f359fHx9fP9/fv7+/v79/35//v7+/v7/f3/+\nfnz+f359fHp5eHt7fP5+/v/9/P77+/n6+/r9/f/+/v39/v1/f318fnz//v7+/fz8+3/9/P38\nfn58fHt8f/5+fn9+//7//n5//318fX19/359fn1+/v7+/v/+/319fHx6en18/31+/P78/Pv7\n+Pn8+v/+//7+ff5+fv99fn59/v/+/f/9/v78/P78/f38/P39/fz9fX18fH9/fv7+/35+fn19\nfn56fHx6e3l9e/39/fz9/Pv8/vz9/fv+/v56fXp6end5d3t9fX9+//78/Pz+/v7/f33+/3z9\nev98dv1+/Xr/+Xh7/Pj9enz8/nz4+3l3fH57/v59f3//fXz7f31+fH19+Pl9fvn9ffz6+vv9\n/f7+/v7//H58//19//3+/3v+f/38+/z///79/v79/f78+3/+/v///P7//P3+ff//fH19ff9+\nfX57fX5+/318fX/+/fz8+/z4/P5/fHx9eXl+e3x8e3t4fHp+/v37+/v5+Pn5+vz8f3/+fX7+\n/v/+/n/9/f/+//v+/Pz9/3//fX5+/359/v9//v3//Pz9/v/9/X59fX59/v5+f319/31+/3z/\nf318fH58f358/31+/f///35+/n5//35/fn18fv9+/v5+e3p7fX19/f7+/f38/v38/v79+/7+\n/f3+/X/+fnx/fH///vz5+fj7+/v7/H5+f3x7fHp6e3t9fXx+fH1/ff79//3/f/1+//98ff5/\n/v9+fn5+fX1+/v39f3//fX59fnx8fX5/fn59f33//3/8//79/vz8+fv6/P//e39+//5//f/9\n/v/+/vz9/Pv+/vz9/P3+f/58fX58enl9ff5//vz9+Pr5+Pv5+v1//3t8fnh+enx9ev99fv9/\n/v3+/v98/n///n1+//79/n59fHx+fX19ff99fv59e3x9//5/+/7+/P38/P36+fz7/v//f/5+\nfX5+//3//v/+///9fv/7/fz8/P1+fn17/31+/X7/fv/9f/z8/P7//v78/v5//358fXx7e319\nfX99fX9//3//f31/fXx9fHx9fX/+/Pz9+/79/fz8/vr+/vz//P58fXx7fX5+/n79/P38/fz9\n/Pv7/X7+/f5///5/f3x9fXl4eHp5en5+//76/P35/f36/3//f31/fXp9e3p7e3t9f/7+f/59\n/35//X3//359fH//f359fHx9fv9/fv79/P/8/f77//v7+/j7/Pz+/f19/n5+fn19e3t7e359\n///7+/z5+vf6/Pv8/P5+fH19fHx8fH17fX57fn5+f35+//7//v9+/n5+fXt8enx9fv3+/f39\n+/78/fv7+vn7+/39fn3/en3/f/5+/v/+/3/+/vz7+/v7/n59fX5+fHx9fnx9fn79//5//v7/\n/X5//35+fX5+fnt9fXz+f3x8e3x8fn5/fn19/v38/P37/fz7+////n78/f79/v3//n59fX/+\nfv/+/Pz+/f1//v/+//7+/f5++359fn38/v5+fn5+fnx9fX59fX1+f31/fH18e399f/9+///9\n/f7+/fv5+/z9fHx8eXl3enl5fH59f/v8+vv8+vz7/P78/f3+fX59fnx//n78/fz9+vv8/H5+\nfX19fnt9fHp7e3x8fn59///9//78/v3+/n/+/n5/fHx9fH59fn7///9+f358fnt6fH5+/vz+\n/P5+/n7+f3/8f/78/f37+vv6/f39/v5/fv9+f/9+//59/v//+3/8/v/8//3+/f99fXt+fX19\nf////P78/f3+fn17fXt7fHx+fX98fP7//P79/v9/fX59fXt+f37/fv9/fv//f359///+/n5+\nfnt7fnx7fH5+/fz9+vv8/v3+/vv9+vv9+/z8///+fX18fXt8ff99ff7//P78/f77//v7/fv9\n/f7+f39/fX19fn9+/fz6+fn5+/v/fnt8fHt9e3p7eXp9fX7+/vv9/f1//v/+//39/v5/fX59\nfHp6fH18fnx8fn7/fn7+f//+fXx+/3/9//5/fX59f3/++/z7+vr6+vv8+vv7//7/fH18fXx+\nfH1+ev7//f3+/P78/vz8//v7+/v9/f3+//7//35//3x+f37//vz//P5+/37+fv5+fn58fXx8\nfn5+fHx8/3///f/6/f37/f3+fnt8e3p6eHt4e3x7fHx+///+/n//+/37/P38+/v//n59fHl7\nent7e3p7e3z+/v38/Pr6+fz7/X78/35+fn97/31+///9fv37/fz8/Pv7/f59fX18fXx8e3x8\nen5+f/39/P78/P/9/f7+f31+fXt9e3p5enp6e3p8fv/9/fz9+vz8+v37+/z8/n7+f33/fn5+\nfXx9/n/8/Pr6/Pj8/P9/f319fX59fXt5enx7e3x9fv79/f38+/z8f379fX59fn18enp+eXx7\nfHx6fn78/fz7+fj7+v3+/H79/f5/f3///37+fv79/f39+n7//n3+fHx7e3x7fn1/fX1/fn9+\n/v7//3x/fnx9fn///f77/v1+fH56fHx7fXt7fX7//Pz9+/38/f38/vz+/vz9/f39ff59fH5/\n/P79/v///f5//f7+/v//fv99fv3//f3+fX5+ff7///z8/P5/fX19ff9+fv5/f/9+fX19e356\nfHr/eXv6c/r/d/d9+/5++Hx8/fv9fXn/fn78+/55/n56+ft///1+fH77eHd8d3p5/X96en76\ne/36/fz9ff/+/vt9/352fX14eXt+e/78f/v6+fj5+fr7fP7+fXx8fn3+fn18fH1+/f77/Pr4\n+vj5+vv8/X9+fH16eXt4en58/vz+/Pv7/Pj8+/r7+/z9/399/v9+fn1/fv7+/vz++/z7fn5+\ne31+/39/f37/fn58fH59fn5+fH1+ff7+/fz9/v79f3/+/3x7fXt7enx8eft/ffx/fnz9/f/9\n/n7/f31+fX1+fnx9fHp8fn5+ff5/e/9+/fv6+Pv6+vj8/fv+fn5+f/19/n5+f37/fX/8/v78\n/Pv8+vx/f399e3t7fH9//n///vz9/vv8+fj4+fz7f35+fH58fX18e318fHx9/31+f31+fX3+\n/f79/f9/f398fH19fX18e37/f//8+vr5+Pn5+/z7/n99fXx5e3p8fn1+fv///v78/Pz6+/v6\n/Pz9/v//fv3/f/3/f39//v7//fz+/f7//X5+fn5+fX59fX3+f3x9fXp6fX1+fX7/fv39fvz9\n/f3//n98fX15e316fXx///39/v59f37//v7///5+//98fX19/f5+/3x8fHx9fn7+/Pz8+/v7\n+Pz5+v37//39/Pz9f35+fH18fv/+/fz9/fv7+/1+fnl7e3t7fH5+fn7/fn////3/f/9+/n7+\n/vx9+Hx59Hh//Xv8ePt9c355fv93fXx+f/76eXz8dv32/X1+/nt5+Px4/Xx8/f37+357/H56\n/f98fX15fX3/fXh8dnp+f/59/f39+vn7/Pv8/Pz6+/38+/r//ft+fv98enl7eHt6en59fn19\nfX7+/f5//H7+/n78f35//37/fn5/fX1+/X9+ff59f/9+fn3/fnx//n//fX59e35/f31//P78\n/vz7/v7+fn/9/v7///3+/vz9/fz/fn9+/3/+/v3+/v1+//9+///9/Pv6/Pz8fn59fX17enp7\nenp4e35+fv7//fz+/f78+vz8+/17fX58fnt+fHt9e3t5fP98fX/+fv38//19fn19fv//ff//\nf35/fn1//v7+/v5///39/P79+f78/P5/e/99fH1+f/79/fz8/fz9/f3///7+/n/+/3/+/f3+\n/P78/31+fH99fX1+fH1+fn///n79fn19e3x9fn99fXx8fn///v39/vz9/n7+/n7+fn1+fXt7\neXp7fX59fv///fz6+vv7+fv9/P9/fn7+ff/9fv7+/v3+/Pz9/fz6+/v8+39+f3x7enl6e3x6\nfHx/fX//fv/+/v/9//38/v3/f319fnx7fHt7/37//nx/fH3//fv8+/z7+v38/v79/v7//X59\nfnx+e3p7fX57fn79+/v5+vr7/vv+//1+ff//f/9+fv3+/vr++vn4+/78/f1+fnx4eXh3d3l6\nent7fH5+f37++/38/P78/H///n7+/37+fn59fXx9fXx9fX5+fv//f/39/v7/fv//fX18fHp9\nfnt8fH7//f39+/z9/Pv9/P/9/X39/X3//n7//39//3///P3+/v/+/f7+f3/9fn99f3///37+\nf/1/fn9+fnx9fH5//v3+f///fX5+fXx9fHp8e3t9fn3+fv/+fn9+f35/fX5+fn5+/3x9/v//\n/vz9+/z7/P77/P38/f78/P79/X99fn59fnx+ff7/fv5+fn5+fn/+/f37/Pv5/P37/v79f/9+\nfn1+fX//fv9+fX58enx9fX1/fnx9fX5+f37//n39/n7/fnx9fX1+fn//fn/+f//9//39//5+\nfXx8e3p7fHt8f/79/f37/f77/f37+v79/H/9//////5+/v7+//3/f359/319/3z+/P/8/f77\n/P39/n7/fn58fH17ff////7+/P7+/X7//379/3x7fXp6e3l7enp/fv5//v37/P38/f3+fX5+\nfn79//79//9//358fHx7e3t9e3t7fH3//v37/f38/v7//v/9/f78/f5//37+/379/f3+/P39\n/n/+ff9+fv7+/v78/fz///7///5+f/99fX5+fXx8fn18fHt7e3t8fHt+fn3+//79+/z9/P3+\n/fz+fX58e3t7fHt9fn7+//7+/Pz8/v7+fXx7enp7e358e3///f78/Pz5+vn5+vn6+/r8/f/+\nfn7/fn19fn5+fH1+fv/9f/z+/vz9+vn4/Pz9fn17eXt6e3t7fH59//1+/P38+vz6+v39/n58\neXp3dnp5e358fn9///9///5+f/9+/3///33+fX1+fH17e3t8f//+/X/9/Pv6+vj7+fz//f99\n/n99/n/+/35+fv59/3/+/f78/fz7/Pz//n9+f3//f3//fn///v38+/39/vz+f/7//P/+/n9+\nfXx8fHt5e3p7enx7enx7ff/+/fr5+vv7+/38fH5+e317fHp7e3t9fH////7//n5//v///n5+\nfnx7fX98fH58fv7++/v5+Pr7+v79/f79/359fnx9fn5/fv1//v7//f79/fz8+v38/P7+fn9+\n//7+/v3+/f5+f/9+//7+//3+/v7//X7+f31/fX5+fH//fn1+fn5+ff9+/n5/fv/+//7/f319\nfX1+fH1/fX19fH1+f31+/n/+/v/9/v39//z6+/n9f399fX7+/P38/P79/f/+/3t9fnx8fv//\n/fz8+v79/v78f//8/Pv8/v39fv98e3h4enl7ent+fX1//f7+/3//f/z8/f3+/v5+fXx9/31/\n/3t7enp6fH59///9/P7////9/n7+f37+fn16e3p8fX1+///+/P39/v/7/vz6/Pv7+vr9+/9+\n/319fH5+f37/fn7//v7/f/3+f/z8/f39/fv8/Px+/319/31+f39+f/9+fXx9eXt6eXx8fH7+\n/X9+fn5+/v3//Pz+/35+fX59f3x9/nt+e3t7ff98/35//v/+/f39/f3+f/99fXt4fXt8/3z+\n//3+f/v+/vz9/P78/Pz8/Pt///59fX19/n1//v37/Pv7+/v4+fr5/vz9fnx6fHt3eXl3enl6\nfH3/fv7++vv7+vv5/Pz9fn19fX19f35+fnx9fX5+/v//f399fX17e3p6fHx6fX7+/Pv6+Pj6\n+fz9/Pz9/vz8/f3//v9+fP99f/3//3//fn5+fn99fX9+fv7//fv8+vv7+/37/f79/P3//359\ne3t9e35+fX5+fn5+fn19fX5+fXx/f33/f319fX5+//7//fz9/v7+f/9/f31+fH19e357fn19\n/f3+/P3+/v39/P7///////7+/f9////+/v1+/vz9/P38/v7+fv5+fHx7fXx+fv/++/n7+/v5\n+vz8/////f5+f35+fX19fHp7enh4e3p9/////v3+f//8/P5/fnt8e316fH99fv9//v39/vv+\n/fz9/n7/fH17fXx6e3t7e35//v/+/v36/Pv7+vr8/P39/v7/f3///v7+/n79f//+fv9/f/79\n/f39//7+/f59fn1+fn3/fn9/ff9+/vz9/f7/fXx8fHt8fXt8fX5/fX7//v////3+fX19fX58\nfv7//f37/Pz6+/39/f7+/35/fn9+//9+fX5+f///+/z9/P39/X59f3t+f3/+fn5///5/fv9+\nf35+f///fP99e359fX7+f/7+fX5//X5//n19fn19fH1/fXv/fX38/fr9/fz9/f78/f7+///9\n/v9/ff99fH58fv/9+vv7+vn6+/r8/n5/fnp8enx6eXx7e31+ff9+//79/f37+/t+//9+f/9/\nfXt+e3t9e3t8enl8ff//f/9//fz7/Pr+/f3//P3+/P38/P37/P3+fn7//P/8/f/8fH5+ent4\ne3h5fHp6eXt8fH7//v3//P3++/z9/v79f/7+fX9+fn7//35+fn5+/318fn18f37//X79f359\nfHx8fHt9e3l9fH78/Pj5+vn7+vz7/f3+fn18fHx9fX1//v/9/fz7/Pv7+vn7+vz8e357eX16\ne3x8en19e358fn5+/v7+/f7+/3///35+fXp7fHx8fX5+/v3+/vz6+vj4+fr6/P1+fH59e3x7\ne358fv99f378/f34+vj6+/j6+/v8/P5//399fn59fX19/359/n7//n/8+/38/fz9/v//fn5+\nfnx7fH1+f//+/P79/Pz8/P3+/nx9fHt6eHp4eHl4eX19ff1+/v38+Pv6/P/+/v59fn18fHt7\neXt6en17//7//fz7+/r6+Pr6/f/+//5/fn57en17fH1+/v78+/38+vv6+vv9/n1+fX1/fn/+\n/v79/vz8/Pv8+n7+/3z/fX59fXx9fv//fX9+fn//f3t8fn//fv7/fn7/fnt8e3x8fX1+/n19\n/37//P36+fv5+vr7/fz9/n7+f35/fH18ent9fn/+/P37/Pr7+vr6+v/+/f99fXt9fHt7ent7\nfH1+fv3+ff5+//7+/f39/f1/fH18fn58fX18e3x//vr8/Pv9+/z8/v9+/319fHx7e317/v79\n+fz5+/j4+fn7/P38/P7+/v/+fn1+fX19fX9+/f/9//39fvz+/vz+/P59fX19fHp9fH3///9/\n/3/9/f78/v1/f/9+/35+fnt7ent8fHx9fHt7e3///v39/fv7/fv//fz//v7///39/f39/f5+\nf3/+/v9//v7//f7+/f5/fn5+fv//fX5/fH19fn1/fn59fn99f31//35+f39+ff99fX5//f/9\nfv37/Pv+/P98fH17enx6fHt7fXt9/37+/v/9/v/8/v77/Pz6/f79/f3+/v//f/9///9+//3/\n//v+/f3++/39/3x9e31+fXx9fX5/ff7//v7//v7+f/7+fX9+ent7e3x8ff/9/vz9/fz8/fz8\n/f39/f7//f7+/n5/fX1+fX79/v7+//7//fz7+vv8/P/+f31+fH18fXx8fXx+fH//fX9+f/3+\n/fz8/v9+fXt8fXt7fH18fX58fn//f//9//39/Pz9/fv7/fz8/Pz8/f1+fHx9e3x9fHx8fn3/\nf//9/399fXt9e3x/ff5///9+/n7//////v9+/f9+fn19fn7/ff/+/vr8/P39/P79/fz9/v9+\nfXx9fH18fH3//fz7+/38/P38/v/+//7+/fv+/P39/P//fX19e318fX58fH5//f9+/n9//v7/\n+/78/3t9fXx9fX18fX5+fn59ffz//v1//v///f7+/f99f//+/v38/f38+/v8+vr5/P9//n5+\n//////3+f359fX19fX19f/5+/f39+/z7+/v9/v3+/X59fX58fnx7fX18f/5+/37//v79f35+\nfn58fXt7e3l6enp+fv/+/v38/Pn8/fl5f/p8/H19/nb+enV+dv7/fP7//Pz7/n7+/n1+/n95\neXp2en9+//1+/Pv79vr8/P78/fz+/v1/fn/+/f5+/31+/v/+/379/v78/Pr8/P19/X55fX17\ne3p7fXx/fX1+e33/fv9+fv97/v7+/v/6f/79/v9+fXx8e358//7//n9+fn7/fnx/fHt/fv7+\n/v3+//79//3+/f1//P1/fv7+/f38/P///v/+/P39/v7////+///8/f1/ff///v/+/39+fn57\nfH9/fn59fX1+f359/3/+/33+fv5/fv1//X//f35+fH19fH5/fn59fn1+f//9/f39fn19enx7\nfHt8fH7+/fz7/Pz9/P38+//+f/5+fv9+/vz7/f7//n7//n77+/z8/n5/fX5+fXt6enx7fQ==\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.10.msg",
    "content": "Return-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA11583> for nsb; Thu, 26 Dec 91 15:15:38 EST\nReceived: from joyce.cs.su.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA13190> for nsb@greenbush; Thu, 26 Dec 91 15:15:16 EST\nMessage-Id: <9112262015.AA13190@thumper.bellcore.com>\nDate: 26 Dec 1991 20:45 (Thursday)\nFrom: bob@cs.su.oz.au (Bob Kummerfeld)\nTo: nsb@thumper.bellcore.com\nSubject: couldn't resist this\nMIME-Version: 1.0\nContent-Type: image/pbm\nContent-Transfer-Encoding: base64\n\n\nUDQKNjU2IDUxMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAHAAAH////////\n/////////gAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAP///////////n//wP/AE//BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAGAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8AAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAH///////gAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAYAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA/gAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAABgAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8YAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAA/AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAGAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAB+AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAYAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAH8AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAABgP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYPwAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAGPgAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAP//gAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAP//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAA/wAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAP+AA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAB/g\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA/wABhx8MBgAAAAAAAAAAAAAIAAAAAD/AAD//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA\nAAAA/+H24AALkAH/+wHnmAwAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOPh98AAG/AA/fsA5wAAAAAAAAAAAAAB\nAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAIAAAADj4PeAAB3gAEDxAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAAAA4+BzAAAI4AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAQAAAA+p///////AAAAA\nv///gAAAAMHAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAA\nAAAAAAAAAAAAAAAAAAP////////////////////oAIAAAADAAAIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAD/////////bAABP//\n///wAACAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAA\nAAAAAAAAAAAAAAAAAAAAAf/g/gAAAAAAAAAAAAAAAAOAgAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAP/AHAAAAAAH/4H\n//gQB////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwOMwAAAAAAAAAAAAAc\nAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////+AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAAAAB4cPjMAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAA///////////\n//8AH///wAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAD+HD4zAAAAAAAAAAAA\n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\nAAAAAAAAABgROf/4e5H4eBjwwBCfAAgYAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYMTn/2D+f+Dj/8MAAGAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAGPG5+Agfn/g//4HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wuAAICQAIL94BgAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAf8LgAAAAACCYAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPyAAAAAAAAgAAAEAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAA\nAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAPGAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwAAAAAA\nAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAGAAAAAAAAAABgMAAGAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAYDAGD/\nH+AAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNnvIPBhgWBiDfmBwA\nYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAQABjfY6A8Y4FgYgDgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAYTyHwHieAYCAAAA\nDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABAAGGwg8A4/AGAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhgYHAEPgBAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAYYCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+\nAAAQAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAIAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/8MQEAAAAB8AAAMAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH\nAYPnkDAAAN+/8AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAD/wGA55AwAADf//gAAwAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAD/+AH8AAAAA8\nA/8BgGeQMAAB2e78AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAfAAAAAA//gD/gAIH+fwHwAYBnmHAAcdh+DgADAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAcwP8AAec/PB\n/3MBMAGAZ5h4APPYfgcAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAADAAHOAAP/MDmAADDv37f/DgTgBgO+YeAHj2O4HAAMAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABwADhgAP/zA5gAAw7\n/02Dw4E4AYPN3PgDh3nuA4ABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAGAA8AAcAA4APzwB4OYAAMGgwNgcPBOAGHifz4Bwd7zgOAAYAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgDPoAGAAMAH+4AeDGAA\nDBoMDYDDwTgAnwn++AcGfw4DgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAIAAAAAAAAAADgMgAAYIz+ADgAHABzuAHwxgAAwaCA2Aw+GYAPwI/8wPDn4OA4ABgAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABAB+HOAAGGMjgA4ABwA4DAB8M\nIAAMOgwNgcPhmADwCP/MDg4+DgcAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAgAAAAAAAAwAfxz4ABhjIcAOAAf4cAwAfjCAADHIMDYH78ZgB4Bj3zA4MPw4HAAGAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAEAAAB8A8AEOc/AA4YyDgHgAH/uAcA\nO4wgAg72D8WB+3GYAPAQd8wcHD/OBgABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAACABDAMw/h/ABBvJ4AOGMgYB8AA+/gH/zHMIA4P5//lg+M5mAC4EPPOHBx7/gYAAYAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAQx7Oc4+AAQfyOAGhjIGAfAAAPw\nD/8x7CAOD4fwdcPDPJgAvh/zzhwf+P4MAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAIAEM/xkCPAAEHshwBsYyBgFwAAB8Af+MPxgDA+C4D3Hw56IAI8/8c4eP/h+DAAB\nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACADDd8ZADgABB7IcA7HMgIBMAA\nAfAHADB8IAAP4gA9xkOOjACH/3HOHj/4HhgAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAgAx2HGwA4AAQ+yHAMxzIGATgAAHwBwBwfCAADvIGPc5Dh4wAg/AwBw94GA44\nAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAMdBh8AMAAEfMhgDMeyBgP\n4AAB8AcB8DwgAAx6BjzcQ4PMAIHwMAcP+BgOcAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAACADnQId8DAABfzIYBjl8gYD+AAAfAPD/AcIAAMPgd0+E+BwACAcHAHB/gY\nAPCAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgA78CDf45gAfY6GAZ9fI\nMA/gABPwP//wHiAADA4D9Ph/AAAAgGAwB4G4GAHhwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAIAO+Agz/P4AHGOjgP/TzHAIYABz8P/+cA8AAAwGGeTweAAAAIAgAAOA\nAAADwcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACADvgIMB3+ADj/pwD/\nkczgGGAAP3/jwHAOAAAMA/gF4GAAAAAAAAADAAAAB4HAAcAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAgA+4HDAP4AAz/64A8bDMwBhgAB4/AAAABAAADAPwAcAAAAAAAAAA\nAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAPuBw4B8AAM/mu\nAMHw7YAYYAAMAAAAAAAAAAwBgAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAACAC7gcOAfAADPBvACB8O8AOCAAAAAAAAAAAAAMAAAAAAAAAAAA\nAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAucPDwHwAAz\ngPgAgPDvADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAIALHHw+D8OAM4DwAYDwbgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACR/sP/3/\ngBOA4AGAYGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAkfznP5/gABAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIG4/w\nAfgAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBgH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAgY\nA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA\nAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH\n/w//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/\n//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAHAAAP/9gH//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////\n/+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAf///////////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB//////AAB4AAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA\nAAAAAAAAAAAAAf8AABn/////wAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAfgAD///AAf/////4AAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA\nAAAAAB//////////w4AH//8fwAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAD//////////gAOABwAAAAAAAAAAAAAA\nAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAA\nAAAAAf///+H/kAABwAABgAcAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgB4D8AAAAAB///4AAAAAAAAAAAYAHAAAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfw//\n////////5AAAAAAAAAAAAAHABwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////+AAAAAAAAAAAAAABwAMAAAAAAAAA\nAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf\n+AAAAAAAAAAAAAAAAAAAAAAAAMADAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwAAAAAA\nAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOADAAAA\nAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAMA\nAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGADAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw\nAwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADADAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AwAAAAAAAAAAAAAAAAABAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAGAMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgDAAAAAAAAAAAAAAAAAAEAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAcAwAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOAAAAAAAAAAAAAAAAAAwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAwDAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAYAAAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAABgGAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBgAAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAGAYAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwGAAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAMBgAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAYAAAAAAAAAAAAAA\nAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBgAAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAADgYAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGAAAAAAAAA\nAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAGBgAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgMAAAAAA\nAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwAAA\nAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDA\nAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgwAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nYMAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAwwAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOAAAAAAAAAAAAAAAAADAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAADBgAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwYAAAAAAAAAAAAAAAAAMAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAOGAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhgAAAAAAAAAAAAAAAAAwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAYYAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGAAAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAABxgAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcAAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAADDAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwwAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAOMAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAAAAAAAAAAAA\nAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAYwAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMAAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAABzgAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM4AAAAAAAA\nAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxgAAAAA\nAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAA\nAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc\nAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3AAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nANwAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAzAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAAAAAAAAAAAGAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAABsAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAAAAAAAAAAAYAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAH4AAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAABwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAA\nAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAA\nAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAA\nAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAA\nAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB\ngAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8MAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/7/gAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAA8wA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAABwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAOAMAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOABgAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAABgPYAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P+ADgAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAPH/gAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH//gCAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABv//4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7//wAEAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAd///gBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANf//4AYAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAGv//+AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYMAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL///gAgAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHkAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAH///4AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH37\nAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf//+ACAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH8wAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD\n/+cQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL///4A\nEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3+IAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF///+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAP5/GAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf//\n/gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6/zAAAAAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn//74AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA+/9wAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7\n//++ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//4AAAAAAAAEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4n//MAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAf//8P//+gAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAMZ//jAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//+H/////gAAQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE//4QD/wAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAP///B//z//+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAADP/8EAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/////wSLMx3/8ABAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn//BAAGAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAB//////8FpsxKAfwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAJf/wAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ANgf//HaLM6zH/4EAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/4AAAMAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAD8AAAH///5JIEox//zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAALv+AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAD///2WTMUzHh/4AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv/CAAAMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAA4AAAA///5YkzFMxzd/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAP/wgAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAP//+WmzEoAOmP/gAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4IAAAYAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAADAAAAD///FpszLMbyM3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABf+CAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAB///xlkwAjEundP\n/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX/ggAAAwAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAcAAAAf///ZZMzTMUgCRj/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAF/wcAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAP////iSMUzFJ\niLGP/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf8PAAAAwAAAAAAAA\nAAAAAAAAAAAAAAAAAAAABwAAAD////abMyiEYYixyd/+AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAf/DQAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAB////emzMo\nzvIyQACL/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/hoAAABAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAB4AAAf///mWSJCMS+d0YmJjf8AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAB/4aAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfAAA/4//5ll\nzNcxWQJGJiYzv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+GgAEADAAA\n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\nAP//4Af//+p/P8wABwAAAAAAAQR///////xgiBEEeDgAAAAAAA4AA8AAAZsskmJAIlsZI5MR\nmNiaZY42M5EZuAAAAAAAAAAAAAAAAAAAAAAAAB//gAAD///+/z/GAAYAAAAAAAEEf//////8\nYIgBAP44AAAAAAAOAAGAAAHbLJJmUZkkRCETEZjcmNoxiAERGLgAAAAAAAAAAAAAAAAAAAAA\nAAA/8AAAAf/////7RwAOAAAAAAABBH/////8PGCIAfH//8AAAAAADgADgAAD//NFQlGJJObc\naGwgCJjaMYjMREI4AAAAAAAAAAAAAAAAAAAAAAAA74AAAAD/////+8MADgAAAAAAAQT/////\n/BxgiDnzwf/wAAAAAA4AA4AAA//zTdmmYghEDGxsZiNjJIGIzETGbAAAAAAAAAAAAAAAAAAA\nAAAAH94AAP/wf/tu///BgA4AAAAAAAEE//////gcYI/4hwA88AAAAAAOAAOAAAP/v8/ZpmLb\nGSMTRCYjZyWONhMQUC4AAAAAAAAAAAAAAAAAAAAAAP8YAD///D/zL///4YAcAAAAAAABBP//\n///4DECP2AYABhgAAAAADgAHAAABv76+7kEqGxkjExGY2JhFjHYzkzmeAAAAAAAAAAAAAAAA\nAAAAAAPgMAf///4f+2///2HAPAAAAAAAAQT/////+AxBjAAOAAYIAAAAAA4ABwAAAf///25R\nnSTEIRMRmNyY2jGIwRE5nwAAAAAAAAAAAAAAAAAAAAADAGB/////H//////gwDgAAAAAAAEE\n//////gEb4AADAACCAAAAAAOAAYAAAD////+UZkk5txo7CYomNoxicxMxkcAAAAAAAAAAAAA\nAAAAAAAADgBA/////x//////8MAwAAAAAAABCf/////4Bn8AAAwAAAgAAAAADgACAAAAf///\n/+5inkScaOxuI2cloQjMRMZngAAAAAAAAAAAAAAAAAAAAAwGwf////+P//+ff/DAMAAAAAAA\nAQn/////+AZwAAAOAAAIAAAAAAYAAAAAAH///7/uYpsZIxNMJiNnJY52ExAAR4AAAAAAAAAA\nAAAAAAAAAAA+/4f/////j////zs4YCAAAAAAAAAJ//////gGAAAADgAACAAAAAAGAAAAAAB/\n/7ZmcYIbGSMTE5HYmECMdjOTOZnAAAAAAAAAAAAAAAAAAAAAf/+P/////8/////7+HBAAAAA\nAAACCf/////4AgAAAD8AAAwAAAAABgAAAAAAf/6yZlGZJMSJExOR3JjaMYiJEDmZwAAAAAAA\nAAAAAAAAAAAAAH//j//////P//+///wwQAAAAAAAAgn/////+AYAAHH7gAAMAAAAAAYAAAAA\nAG/zQRpRmSTGnOjsZiqY2jGJzEzGZOAAAAAAAAAAAAAAAAAAAAB//5//////7993n//+MEAA\nAAAAAAIb//////gGAAPz78AADAAAAAAGAAAAAABP80mZrGKaRJxo7G4nZyWFCMhMxmbgAAAA\nAAAAAAAAAAAAAAAAf/+f/////+//////PjjAAAAAAAACG//////4Bg8fsw/wAAwAAAAABgAA\nAAAAX+zRGaxmmxsjEhFmI0cljnYzEhDm8AAAAAAAAAAAAAAAAAAAAH//n//////v//////8Z\ngAAAAAAAAhv/////+A5/HhMP+AAMAAAAAAYAAAAAAN/stGZRChsZIxcTkdiY5Yx2MzM5mTAA\nAAAAAAAAAAAAAAAAAAB//5//////7///////GYAAAAAAAAIb//////8M/xgTCP4ADAAAAAAG\nAAAAAADO7rRmU5lkzIgTE5nYmNoziIoAOZkwAAAAAAAAAAAAAAAAAAAAf/+f/////+/+d5//\n/5wAAAAAAAACG////////OMYMwh/AAwAAAAABgAAAAAA7/dJEFEZZObc6OxuIpjSM4nIzMZk\n2AAAAAAAAAAAAAAAAAAAAH//n//////v9ncf33+OAAAAAAAAAhv///////nDGDMIA4AMAAAA\nAAYAAAAAAP/3S5muZp/3+GjsbidnJY0oyMzGZvgAAAAAAAAAAAAAAAAAAAB//5//////7///\n/9//xwAAAAAAAAI7//////gxwxgzCADADAAAAAAGAAAAAAD/v9kZrGabP3MTDS4jRyWOdjMy\ncMT8AAAAAAAAAAAAAAAAAAAAf/+f/////+///////8cAAAAAAAAGO//////4EcMYMQgAQAwA\nAAAABgAAAAAB//28ZlGIGzv/t7eR2JjhjHYzMzmZHAAAAAAAAAAAAAAAAAAAAH//n//////v\n//+////nAAAAAAAABjP/////+BGDGDEIAGAMAAAAAD4AAAAAAf3+/O5TmWTdv/P30di40nOJ\nyEIxmR4AAAAAAAAAAAAAAAAAAAB//5//////7/53n/8d/gAAAAAAAAIz//////gRgxAxCAAg\nDAAAAAD+AAAAAAHM/+/e0RlExJ/4/+YimtJzicjMxGTeAAAAAAAAAAAAAAAAAAAAf/+f////\n/+/2/7/fPf4AAAAAAAAGM//////4EYMQM/gAAAwAAAAD/wAAAAABxv9//axmmhWf/OzuJ0cl\njCSIzMZm7wAAAAAAAAAAAAAAAAAAAH//n//////v///////8AAAAAAAABjP/////+DGCGHP4\nAAAMAAAAB/cAAAAAA7M9//msZps7b//xNCdHLYx2MzIxxM8AAAAAAAAAAAAAAAAAAAB//5//\n////7////////AAAAAAAAAYz//////whhh/x3AAADAAAAB4zAAAAAB+zLLzmURkaGyf385HY\nmNGMZiMzOZkTAAAAAAAAAAAAAAAAAAAAf/+f/////+//97///7wAAAAAAAAGc//////8IYYf\n4AwAAA4AAAH8hwAAAAA/xJC8ZlOZZMSf//sR2LjSc4nIQjGRE4AAAAAAAAAAAAAAAAAAAH//\nn//////v//////+8AAAAAAAABmP//////CGOHAAOAAAGAAAH+Y8AAAAAf83TSxnxGUTEn//8\nbiPY0nGJyMzERM2AAAAAAAAAAAAAAAAAAAB//5//////7////////gAAAAAAAAZn//////+h\n/gAABwAABgAAH9CPgAAAAFvHk0uZrGaaFZv/zm4nRiWMIYhMxGbswAAAAAAAAAAAAAAAAAAA\nf/+f/////+///5v///4AAAAAAAAGZ///////4fwAAAfAAAdAAf7GM4AAAAB7syyRUaxmmztj\nf/cUJkYtjGY3IjGUzcAAAAAAAAAAAAAAAAAAAH//n//////v/ve////+AAAAAAAABmf/////\n/eGAAAAH8AAH4AP4xjOAAAAAe7MstOZTGRIzY3/zkdi40wxmJzI5mzPAAAAAAAAAAAAAAAAA\nAAB//5//////7///////7gAAAAAAAAZn//////ggAAAAHngAA/v/4xCBwAAAAH/3uLRmU5lE\nxJj/8xGYuNJziYpCMZkz4AAAAAAAAAAAAAAAAAAAf/+f/////+///////+4AAAAAAAAMZ///\n///4IAAAAf48AAP//+c5jeAAAAB//9NLGbEZRMSY+OxuJtjSc4nIzMREzfgAAAAAAAAAAAAA\nAAAAAH//n//////v//+b///+AAAAAAAADGf/////+CAAAYPmBgAD//v+kI/gAAAA//+TSxms\nZpoVmPjMbidGKYxkiMzETM38AAAAAAAAAAAAAAAAAAB//5//////7//3n////wAAAAAAAAxn\n//////xgAD/DBgcAA/7r/+//+AAHd9//LLFRrGa7O2f/ExQnRi2MZiciM9TN/gAAAAAAAAAA\nAAAAAAAAf/+f/////+////////8AAAAAAAAM5//////8QBB/wwcAAAP/0f///////////+y0\n5lMZEjNn9zMRmLjRDGYnIjOzM++AAAAAAAAAAAAAAAAAAH//n//////v////////gAAAAAAA\nDMf//////EP4eMMHAAAD7/T//8x///////3+NEZTGUTEmPoTEZi50mOZgEIzkTPnwAAAAAAA\nAAAAAAAAAAB//5//////7v//3////4AAAAAAAAzH///////H+GBCBwAAAeP//zmMf/m2m//9\n90sZoVFExJjozGwmUJJjmZjMzETN7+AAAAAAAAAAAAAAAAAAf/+f/////+7//Z////+AAAAA\nAAAMx////z//x4hgQgeAAABgf/6AjH+5pmS///JLOazmshCZ6Mxu50YtiGSIzMxMzvzgAAAA\nAAAAAAAAAAAAAH//n//////v////////gAAAAAAADMf///4AA8YIYEIH4AAAIAP8xjEfxQZl\nv7votVEsZrozZ/YTdePGLZxmJyIxsM/88AAAAAAAAAAAAAAAAAB//5//////7////////4AA\nAAAAAAzH///8AABGCGDGB/AAACAA3sYzn85JiB+67LTGUxkSM0f3M/H4uNMIZCciM7M347AA\nAAAAAAAAAAAAAAAAf/+f/////+////////+AAAAAAAAIx///+AAATAhAxge4AAAgAA4xgA/e\nQZom/JI0RlMZRMSbyh/x+LnSY5mAzDGTN+OwAAAAAAAAAAAAAAAAAH//n//////v////////\ngAAAAAAACMf///AAAEwIQMYGnAAAIAAHMYxn+YEKBt2TSxGoUUTEm+jP/jZQkmMZmM3MTM/r\nWAAAAAAAAAAAAAAAAAB//5//////7////////4AAAAAAAAjH///gAABMAEDGNocAACAAB4QM\nY/mmZZH8kksZrOayMZvI7+5nRi2MZADMxEzPnNwAAAAAAAAAAAAAAAAAf/+f/////+//////\n//+AAAAAAAAIx///4AAAzBBAx/CDgAAgAAPOcRj8JmWZ+mi0VSxGujNH9n//NkYtnGZnIjOw\nj5xOAAAAAAAAAAAAAAAAAH//n//////v93v//9//gAAAAAAACMf//8AD/4gQQMfwgYAAIAAD\nxGMY/lGYEfpstMZTGVIzR/9/85i40QhkJyIzszdjPwAAAAAAAAAAAAAAAAB//5//////7///\n///f/8AAAAAAAAiH///AB/+IEEPHAMAAACAAA/GICP5RmkZfvvzOUzlFzL////uYudJjGZLu\nt/M3Yz+AAAAAAAAAAAAAAAAAf/+f/////+////f////AAAAAAAAIh///wA//iBB/gADgAAAg\nAAHxjGd/pUAGX5dLMaxBRcy////8JlayYxmYzcxMz59PwAAAAAAAAAAAAAAAAH//n//////v\n////////wAAAAAAACIf//+AP/4gQfgAA4AAAIAAB5AxjP65lmb/SSzGs5rIzn////mdOKZxl\noszMTM+czcAAAAAAAAAAAAAAAAB//5//////7////////8AAAAAAAACH///gH/+YMGAAAHAA\nACAAAe5jGM/kZZm7aDTULMayM0//9/82Rimc5GciM7K/nMjgAAAAAAAAAAAAAAAAf/+f////\n/+/3//8////AAAAAAAAQh///+B//n/AAAPg4AAAgAADkYxjO0ZoRO+i0zlMZUjNP//fzmbHT\naWQmIjOzM2MzYAAAAAAAAAAAAAAAAH//n//////v///3////wAAAAAAAEIf//////4/wAA/4\nHAAAAAAA8YhAxtGaRk3yLMRTGUXMn//78Zi50mMZmMynM3NjNyAAAAAAAAAAAAAAAAB//5//\n/////////////8AAAAAAABCH//////8IAAAPiAYAAAAAAHGMZzPkWAZNlksxrFVFzL//2Oxu\ndLJjGZjdzEzom0NgAAAAAAAAAAAAAAAAf/+f///////////////AAAAAAAAQh///////AAAC\nDAgGAAAgAAB8CEIz7GWRMhJLMazGsjPf/8jsbn4pGGQmzMxM7JzI4AAAAAAAAAAAAAAAAH//\nn///////////f///wAAAAAAAEIf//////wAAHwwAHgAAIAAAPGMYxORlkbJpdMQ4RrIzf/ez\nHZ92KRzkZiIzsqqYSPAAAAAAAAAAAAAAAAB//5///////////////8AAAAAAABCH//////8A\nwf+IAB4AACAAADwjGMxxmgUyaHTOUzlCs3/3Nx+fsZBpRCYiM7M3YzcwAAAAAAAAAAAAAAAA\nf/+f///////////////AAAAAAAAQh///////H+H7CBAeAAAgAAA9jEIEUZpGTZIMxFM5Tcy/\n+4sfm7HW4xOQ3I0yM2M3OAAAAAAAAAAAAAAAAH//n//////v////////wAAAAAAAEMf/////\n/h/hgwgQHwAAIAAAHYzmMaxABE2WSzGs1EGIv/vZ7+ZGEGMRkN3MTMiaQzgAAAAAAAAAAAAA\nAAB//5//////7//2d3f//8AAAAAAABDH//////4QYYMIEBcAACAAAB4IRjGsZZEgEgsxrMay\nM3//2e/mTikYZCbIjEzImNjYAAAAAAAAAAAAAAAAf/+f/////+339md3///AAAAAAAAwx///\n///+MGEDCBAXgAAgAAAeYxjMTEWxsmlkxFjGsjN/v//z1kYpGORmIjMyKpjI3AAAAAAAAAAA\nAAAAAH//n//////P///////fQAAAAAAAMMf//////iBjAwgQF4AAIAAADmMYzF+aRSJoZMxT\nOUCjf///c9mxkGBEJiIzszdnJzwAAAAAAAAAAAAAAAB//5//////z//////330AAAAAAADDH\n//////4gwwMAMBeAACAAAA+MQgRZGkRNlgxEUzFNyP/f/3mQsZbjE5DYjXIjZyc8AAAAAAAA\nAAAAAAAAf/+f/////8//9v/////AAAAAAAAwx//////8IMMDGfA2wAAgAAAPjMYzrEJEDZaL\nMajEQYj/+//8ZkYQYxOQ3cxMyJrKPAAAAAAAAAAAAAAAAH//n//////vt3Rndv//wAAAAAAA\nMMf//////CDDAx/ANsAAIAAADwBGMSxlsTACCzEsxrIz/+//zGZOaRjEZqiMTMiY2N4AAAAA\nAAAAAAAAAAB//5//////77/253f//+AAAAAAADDH//////wgwwMMADdAABAAAA9jGIxE5bMy\naWTECMSyN////9sWRikY5GYiMzKimMjeAAAAAAAAAAAAAAAAf/+f/////+//////9+/gAAAA\nAAAw5//////8IMMeAAA2QAAQAAAHYxnMU/pVIGlkzFMxQKP/9v/zkbGWY0VmIjMzJ0cnLgAA\nAAAAAAAAAAAAAH//n//////v//////f/4AAAAAAAEOf//////CHD/gAQNqAAEAAAB4hGAFH6\nTE2WCgRTMU2Pvf//+xGxluMTkNmMcidHJy4AAAAAAAAAAAAAAAB//5//////7//25/f//+AA\nAAAAABBn//////w/g+AA8CSwABAAAAeIxjMsYEQNloszKMRBj73////OThlDE5HdzEiImOYu\nAAAAAAAAAAAAAAAAf/+f/////++/dud3///gAAAAAAAQY//////8P4AAB/AmeAAQAAADwEYx\nLGWzMGIKMSzGsjfe////zk5pGORmqIxIiJjY3gAAAAAAAAAAAAAAAH//n//////v////////\n4AAAAAAAEGP//////AAABh8QJl4AEAAAA+MYhABFsTJpZMQIRLI3zvf/+9BECRjEZiIjMiqY\nyN4AAAAAAAAAAAAAAAB//5//////7////////+AAAAAAABBz//////gAAH4YEGZPgBAAAAPj\nGYxRGkQASCTMUzFAh9/3//vRsZTDESYiIzInRyYnAAAAAAAAAAAAAAAAf/+f/////+//9ud2\n///wAAAAAAAQcf/////4AAf+MBBkp8AQAAAD2MYAURJMDZYKIBIxSY//++/r0DGU4xOR2YxK\nI0cmIwAAAAAAAAAAAAAAAH//n//////v////////8AAAAAAAEDn/////+B8PwjAQZKbgGAAA\nA/jGMyxARAmWmzMoxEGf//n/7U5MCEMREdmMSJiYwiMAAAAAAAAAAAAAAAB//5//////7///\n//////AAAAAAABgf////+Bh/DAAwEGZEYBgAAAPgBiEsRbMgQAoxKMayf0e5/8xOTGkYxGYg\nDEiYmNjdAAAAAAAAAAAAAAAAf//P/////+/////////wAAAAAAAID/4B8AAY5wwEMDBuSbAY\nAAAD4xmMQAWzImlkzBIEsn9HtvfzECQJGMRmIiMyItLA3YAAAAAAAAAAAAAAAH//z//////v\n//Zjd///8AAAAAAADAAAAAAAGMYIBDHwTkmwGAAAAfMZjFMSRABIZMwTMUj757b385GxlP8R\nBCIjMmdHJiOAAAAAAAAAAAAAAAB//8//////7/d2Y3f//fAAAAAAAA4AAAAAADiGCAQ/8Mik\neBgAAAH4xiBREkwNloohEjFJ+fnZ+s+RMZT/M5HZjEgiRiYjwAAAAAAAAAAAAAAAf//P////\n/+//////+/3wAAAAAAAHAAAAAAAxhggcPgDIpG8YAAAB+MYzLEQECZaaMyjEg/ix2/jPzkwJ\nfhERmYxImJjAoeAAAAAAAAAAAAAAAH//z//////v//////v/+AAAAAAAAwAAAAAAcYwYfDAB\nykhP2AAAAPrGISxFsyBICiEoxLf/9u++z85MaTjEZCIICJi42NzgAAAAAAAAAAAAAAB//8//\n////7//+d//7//gAAAAAAAHAAAAAAGMMH+AAD8pJl/gAAAD72YxRBbMiaWTMUhS3//bv/xPx\nJB0YxG4iIzZmUsDY8AAAAAAAAAAAAAAAf//P/////+/+9mO36//4AAAAAAAB+AAAAAPjHB8A\nAf/KSRf4AAAA+92M0xJMCQBkjFMxT+727++T8TGexxMUoiM2Z0cmIvAAAAAAAAAAAAAAAH//\nz//////v//5z//v/+AAAAAAAAPwAAAA/4/gYAD/w+KRA+AAAAPjf4UMSTI2WmjECMU/s+e/7\n6HEh3sczEdmMSCJGJiJwAAAAAAAAAAAAAAB//8//////7/////////gAAAAAAAA/+B///8Pw\nAAP/AHikafgAAAD8//MsRAQJFpozKMyv7Pn5+exOT/sSExHZnMmYuNCaMAAAAAAAAAAAAAAA\nf//P/////+/////////8AAAAAAAAB/////nHgAB/4AH6T0D4AAAAfv/7LMWzIHkO8yjMvnde\nf/L8TE37GMxuIgoomLjZ3LgAAAAAAAAAAAAAAH//z//////v/953/////AAAAAAAAAB//DgB\nwAAD/gAf/l/WeAAAAH9//NEFsyB5ZPySML53Xj53PzEh+RjIbiJjNmZW8NicAAAAAAAAAAAA\nAAB//8//////7///////vvwAAAAAAAAAPAAAEYAP/8AP/+j/1ngAAAB+f/zTEk8JP3z8ljF/\n//6/Pj8xMfTGMxSgIzZnRiYiPgAAAAAAAAAAAAAAf//P/////+/////////8AAAAAAAAAD/+\nD//B//4D///J9v/4AAAAfv//qxJP77+6Mwowe/+/35/MXXG0xjMRmZzIokYmIn8AAAAAAAAA\nAAAAAH//z//////v/////////gAAAAAAAIA//v////8f///3wPb/uAAAAH7//6z9N39/njMo\nzPv//8/fzF5+aBDDEZmcyZi40do/AAAAAAAAAAAAAAB//8//////7/////////4AAAAAAAHg\nf///h/8B//5/2/Z/f7gAAAB+P//s/bP2f+6hCMz/f+/n/+5ff8sYyOwiIiqQuNHZvwAAAAAA\nAAAAAAAAf//P/////+/////////+AAAAAAAB8/4PgAPAH//8H/v+f394AAAAPz//0z8/s3/k\nzJI8/39v5v//P7/QEMhsImM2ZkYmmf+AAAAAAAAAAAAAAH//x//////v/////////gAAAAAc\nf3/u/gAB4H/gHh9/+P9/cAAAAD8f/9M+TZs/9IwXP8+f9/T/97ezlMYzEZACNmZGJi//wAAA\nAAAAAAAAAAB//8f/////7//93/////4AAAAD////z/gAAP/wAB//f+n//7AAAAA/3//5H0yf\nn/ozD7/vn/H5nent+TTeMxGZnMkGViY//8AAAAAAAAAAAAAAP//n/////+/vnZ3d///+AAAA\n////8//AAAB/gAAD//99//2YAAAAP8/7/M//7d/6c2vP///5+5347vx4PJIRmZzJmLjR///A\nAAAAAAAAAAAAAD//5//////vzZ3f/////gAAA////+P+AAAADAAAAB/9dtu/+AAAAH+z+/zP\nt+z79v9777f/fj/u+fz8ezjI7iJCLgCw0f/8AAAAAAAAAAAAAAA//+f/////78////////4A\nAP////fv8AAAAAQAAAAH/Tbbvv//wf//sb3/9//27f/////9/9437z8/Pz4QyGwmYzZmRj//\n/AAAAAAAAAAAAAAAP//n/////+//////////AAH////x/wAAAAAGAAAAAP///d7//////9G9\n9/P//27///9//f3/t+e/vz++xjMRmQImZkY/9/wAAAAAAAAAAAAAAD//5//////v//2d3f//\n/wAD//j/d/gAAAAAAgAAAAD2/+3f///////Oc//z//8+m3////398//zz98//sYzEZmcyZD3\n//d+AAAAAAAAAAAAAAA//+f/////7//9nf//+/8AP/8A+H/gAAAAAAIAAAAAf//t3//7v///\nxmN8z///958////8/vf/8e/P3+sQwFGZGMmYv//7fgAAAAAAAAAAAAAAP//n/////+//////\n////AH/wAPf/AAAAAAACAAAAAH//f///+7+//zGrfMUz/9tnv//9/nd+///rzU/7Ocju/kIi\nML//+74AAAAAAAAAAAAAAD//5//////v/////////wBgA///+AAAAAAAAwAAAAAf///////3\nv/8xjNMyS+1RZd7/+//nfn9///+///n9//5DNmb/7/++AAAAAAAAAAAAAAA//+f/////7//5\nnf////8AYX///hgAAAAAAAMAAAAAD//////9z///lYjTMkyZFt//////////////////////\nGiZv/y///wAAAAAAAAAAAAAAP//n/////+/9mZ3f//3/A///wDAQAAAAAAADAAAAAA//////\n/////97//7LMm7//////////////////////w5yJv//3//8AAAAAAAAAAAAAAD//5///////\n7Zmd///9/4P/8AAAEAAAAAAAA4AAAAP////////////////////////////////u4AP/4AAA\nAAMYif//8f//AAAAAAAAAAAAAAA//+f//////+2f///////DAAAAABAAAAAAH///////////\n//////////////////14AABAAAAAAAAAAAAAAAACQif/9/n/zwAAAAAAAAAAAAAAP//n////\n////////////xAAAAAAQIEAD/////////8A0CAAAAAAAD0AAAD4Z+AAAAAAAAAAAAAAAAAAA\nAAAAAkI//8/+f82AAAAAAAAAAAAAAD//4////////////////+QAAAAAGf/////7w4AMAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaf//H/mZhgAAAAAAAAAAAAAAf/+P/\n//////////////7kAAAAB/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADH/2f8d+Sc4AAAAAAAAAAAAAAH//j///////////9///+dgAAAP//+AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx/9n/HfmQOAAAAAAAAAAAAAAB//\n4//////////93//////////+ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAN//u91/5mJwAAAAAAAAAAAAAAf/+P////////f////////////4AAwAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3bvxm4mCMAAAAAAAAAAAAAA\nH//j/////////////////gAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAA/7/98YuJmLAAAAAAAAAAAAAAB//4/////////////////4AAAAAADAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//3GxkZJjwAAAAAAAAAAA\nAAAf//P////////dz///////AAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAD//8xsZGZCsAAAAAAAAAAAAAAD//z///////9nc/////+/4AAAAAAMAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/M3/kS1kQjgAAAAAAAA\nAAAAAA//8////////////f////+AAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAHzv/5OLmZo8AAAAAAAAAAAAAAP//P/////9///////////gAAAAAAw\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZn8Rq5mYnAAAAAA\nAAAAAAAAD//z//////f//////////8AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAd3Z8bGRkWI4AAAAAAAAAAAAAA//8f/////3///////////4AAAA\nADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHe7fExkZkIOAAA\nAAAAAAAAAAAP//H/////9////////////AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABzmbuTiwxGPgAAAAAAAAAAAAAB//x//////f////////+/+wA\nAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf927k5uZmD4\nAAAAAAAAAAAAAAf/8f/////3////////9v/uAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAH/vxU1vmbmOAAAAAAAAAAAAAAH//H/////9///////////\n78AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/78RMZOR\nZjgAAAAAAAAAAAAAB//x//////f//////////+fwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///TGTmRi4AAAAAAAAAAAAAAf/8f/////3////////\n///k8AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///5O\nb3cZuAAAAAAAAAAAAAAH//H/////9///////////5DgAAAAwAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+Tm5m67gAAAAAAAAAAAAAB//5//////f/////\n//////QIAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+5\nnzW/duZ4AAAAAAAAAAAAAAf/+P/////3///////////0DAAAADAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/uZ+zk5l+fAAAAAAAAAAAAAAH//j/////////\n////////9AwAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfFyAAAD\n///f95eRGbwAAAAAAAAAAAAAA//4//////v///////////QEAAAAMAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAP/////////////////+7s5sT1mcAAAAAAAAAAAAAAP/+P/////7\n///////////yBgAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/////////////\n///7nf5MbE7mnAAAAAAAAAAAAAAD//j/////+///////////8gIAAAAwAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAHwAAAD///wAAAAAAAAAAAH//PvZnzM5OX5nwAAAAAAAAAAAAAA//4////\n//v///////////IDAAAAMAAAAAAAAAAAAAAAAB4AAAAAAA///////9//////+AAAAAAAAAAA\nAAfwD93dcTOTkRp8AAAAAAAAAAAAAAP/+H/////7///////////6AwAAADAAAAAAAAAAAAAA\nAB///8AAA/////////wf///++AAAAAAAAAA//A///9/e7uxvf5EZnAAAAAAAAAAAAAAD//h/\n////+//2////////+gMAAAAwAAAAAAAAAAAABAf//f//////+A9A8AAAAAAAAAAAAAAAf///\n////////3ubszmxu4ZwAAAAAAAAAAAAAA//4f/////v/1P////////oBAAAAOAABgAAD/gIf\n////+AAD////AAAAAAAAAAAQAAf9+4f//////////wAAf//f3W1sTuY8AAAAAAAAAAAAAAP/\n+H/////7/9f//////v/7Af/7eX///////////////wAAAAAAAAAAA4/////////////////4\nAAAAAAAAAD///xMzk5dmfAAAAAAAAAAAAAAD//h/////+///////////+wD////////////P\n//8wAAAAAA7f///////f/////////39//wB4AAAAAAAAAAA/x/cTM5ORG3gAAAAAAAAAAAAA\nA//4f/////v///////////sA/////wAAAAAAAAAAAAAH////////////3+AAAAADgAAAAAAA\nOAAAAAAAAAAAPsd37MxtXRm4AAAAAAAAAAAAAAP//H/////7//Rm7+/////7AMAAAAwAAAAA\nAAAAf///////////gAgAAAAAAAAAA4AAAAAAADgAAAAAAAAAAD/39+7MbG73vAAAAAAAAAAA\nAAAB//x/////+//3////////+wBAAAAEAAAAAAAPn/////+74ADYAAAAAAAAAAAAAAGAAAAA\nAAA4AAAAAAAAAAA7e7kTL9/u5ngAAAAAAAAAAAAAAf/8f/////n///////////sAdhwAB///\n///////+8AAAAAAA2AAAAAAAAAAAAAABgAAAAAAAOAAAAAAAAAAAP/u5MzOTsXZ4AAAAAAAA\nAAAAAAH//H/////9///////////zAH///+f////////4ABAAAAAAANgAAAAAAAAAAAAAAYAA\nAAAAADgAAAAAAAAAAH//5f+nk7EZuAAAAAAAAAAAAAAB//w//////f/////v//7//wB/////\n//0h4AAAAAAQAAAAAADYAAAAAAAAAAAAAAGAAAAAAAA4AAAAAAAAAAB//+bs3GzPebgAAAAA\nAAAAAAAAAf/8P/////3////////////gfv///8AAAAAAAAAAEAAAAAAA2AAAAAAAAAAAAAAB\ngAAAAAAAOAAAAAAAAAAAP//U/Nxs7uf4AAAAAAAAAAAAAAH//D/////8D///////////+DbA\nAA/AAAAAAAAAABAAAAAAAPgAAAAAAAAAAAAAAYAAAAAAABgAAAAAAAAAAH//uzMzn//ueAAA\nAAAAAAAAAAAB//w//////4D///////////w8yH8NwAAAAAAAAAAQAAAAAAD4AAAAAAAAAAAA\nAAGAAAAAAAAYAAAAAAAAAAB///szM7OxH3gAAAAAAAAAAAAAAf/8P////////n/////////M\nGN///cAAAAAAAAAAEAAAAAAA+AAAAAAAAAAAAAABgAAAAAAAGAAAAAAAAAAAb//+7/9/9Rm4\nAAAAAAAAAAAAAAH//j//////////////////5Bj////gAAAAAAAAABAAAAAAAOgAAAAAAAAA\nAAAAAYAAAAAAABwAAAAAAAAAAH///u7cbM7buAAAAAAAAAAAAAAB//4/////////////////\n//YY/+D/4AAAAAAAAAAQAAAAAABoAAAAAAAAAAAAAAGAAAAAAAAcAAAAAAAAAABz//3///7O\n73gAAAAAAAAAAAAAAf/+P//////////////////2WPgABuAAAAAAAAAAEAAAAAAAaAAAAAAA\nAAAAAAABgAAAAAAAHAAAAAAAAAAAf///M3e39+94AAAAAAAAAAAAAAH//j//////////////\n////+nj4AAbgAAAAAAAAABAAAAAAAGgAAAAAAAAAAAAAAYAAAAAAABwAAAAAAAAAAH////v/\n9/E/+AAAAAAAAAAAAAAA//4f//////////////////o4+AAG4AAAAAAAAAAQAAAAAABoAAAA\nAAAAAAAAAAGAAAAAAAAcAAAAAAAAAAB//+7s///dObgAAAAAAAAAAAAAAP//H///////////\n///////6PPgABuAAAAAAAAAAEAAAAAAAaAAAAAAAAAAAAAABgAAAAAAAHAAAAAAAAAAAf//+\n7N7szs/4AAAAAAAAAAAAAAD//x///////////////////zz4AAZgAAAAAAAAABAAAAAAAGgA\nAAAAAAAAAAAAAYAAAAAAABwAAAAAAAAAAH//+z///+7u+AAAAA==\n\n \n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.11.msg",
    "content": "X-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.0.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Wed,  8 Jan 1992 11:21:00 -0500 (EST)\nMessage-ID: <wdOmHgu0M2Yt4Gzf9t@thumper.bellcore.com>\nDate: Wed,  8 Jan 1992 11:21:00 -0500 (EST)\nFrom: Nathaniel Borenstein <nsb>\nX-Andrew-Message-Size: 371+1\nMIME-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R\"\nTo: Dave Sincoskie <sincos>\nSubject: Re: PS -- Re: mailer error\nCC: Nathaniel Borenstein <nsb>\nIn-Reply-To: <9201062142.AA08914@raven.bellcore.com>\nReferences: <9201062142.AA08914@raven.bellcore.com>\n\nThis message has been composed in the 'multipart' format for extended\nmail bodies.  If you are reading this prefix, your mail reader probably has\nnot yet been modified to understand the new format, and some of what follows\nmay look strange.  You may wish to look into upgrading your mail reader.\n\nHowever, the first part of this message (immediately after the funny-looking\nboundary line) is the text-only version of the message.  If you read that part\nand skip the rest, you will probably understand the gist of the message.\n--Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R\n\nBOY, was that stupid.  As you can probably tell from the picture, I\nforgot to put the bold, underlined, and centered environments in place. \nThis should work better:\n\n                           Boldly I shall say\n                       That your bug has gone away\n                         But I wish to underline\n                   that if the bug remains, it's mine.\n\nNow, did that look better?  To me it looked like this:\n\n[An Andrew ToolKit view (a raster image) was included here, but could\nnot be displayed.]\nHow did it look to you?  -- Nathaniel\n\n--Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\"\n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nBOY, was that stupid.  As you can probably tell from the picture, I forgot to \nput the bold, underlined, and centered environments in place.  This should \nwork better:<nl><nl><center><bold>Boldly</bold> I shall say<nl>That your bug \nhas gone away<nl>But I wish to <underline>underline</underline><nl>that if the \nbug remains, it's mine.<nl></center><nl>Now, did that look better?  To me it \nlooked like this:<nl>\n<nl> \n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\nContent-type: image/xwd\nContent-Transfer-Encoding: base64\n\nAAAAawAAAAcAAAACAAAAAQAAAe4AAAFbAAAAAAAAAAEAAAAIAAAAAQAAAAgAAAABAAAAPgAA\nAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAHuAAABWwAAAAAAAAAAAAAAAHJhc3RlcgAA\nAAAAAAAAAAAAAAAAAAAB////////AAD/////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD8AAAAAAAAAAAAAAAAAAAAAAAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVUAAAPx/8AAAAAAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqgD/4/EAQAAAAAAAAAAAAAIBwAAAAAAAAAVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAIkj8WFAAAAAAAAAAAAAAgIgAAAACAAACqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAiSPxMkAAAAAAAAAAAAACAgAAAAAAAAA\nFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQCJI/EaQDRxxxxxxwBxyx4\nCBzTxxxixwAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAPkj8RBAKoo\nogooovoosogIIqoooiMogBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU\nAgSPxLEAq+YYei+YAY+iiAgiqiiYIiiAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqgCBI/EmQCqAQSKKAQASCKICCKqKIQiKIAVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVAP8j8UNAKoooonoogIooogIoqvIoiIngCqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAgCPxAEAiccceCccAccieAccigccciCAFVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQCAI/H/wAAAAACIAAAAAAAAAACAAAA\nCIAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAP/j8AAAAAAAAHAAAAA\nAAAAAAIAAAAHABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAPwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////d3dAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAf3d3cAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAB/3\nd3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAA72/w94AA\nAB0AAAAAH////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nwABmTbBmAAAAMwAAAAAf4P4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAADAAGZBsGwAAABhAAAAAB/g/gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAABAAAAACAAAAAAAAAABAAAAAgAAAHAAAACAAAAAAAAAgAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAQAoAAQAAAgAACAAAQAABAAAAAAQAgABAAAAfggAEAAIIAAAQ\nEAEQAAAAAAAAAAAAAAAAAAAAD+AADAAAAABACAABAAACAAAIAABAAAAAAAAABAAAAEAAAASA\nAAQAAggAABAQARAAAAAAAAAAAAAAAAAAAAAP4AAMAAAlY0yqsY0ByxoMZZzKY0GWRVOWdjLO\nYKwWXGMABLJgZY5KaEk5UhYzuZSAAAAAAAAAAAAAAAAAAA/gAAwAACWU0srKUwAsphKWSSyU\nwllFZFlJSySQshlClIAEypCWUUqYSUWUGUkSWAAAAAAAAAAAAAAAAAAAD+AADAAAJRReiovR\nAOiiEPRJ6PRD0SlEUUl6JGCiEU6HgASKYGRRSogqRRgReRPQAAAAAAAAAAAAAAAAAAAP4AAM\nAAAlFFCKihEBKKIQhEkIhEIRKURRSUIkEKIRUoQABIoQFFFKiCpFFBFBEhAAAAAAAAAAAAAA\nAAAAAA/gAAwAACUU0oqKUwEophKUSSiUwlERRFFJSiSQohlSlIAEipCUUUqYFEUSGUkSUAAA\nAAAAAAAAAAAAAAAAD+AADAAAHRNMiomNINiaDGRMyGNBkRFDkUkyJmCiFk1jEASKYGROOmgU\nORIWMZmQgAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAQAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAEAAAAAAAAAAAAAAAAAA\nAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgGGwAQBACgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAYbABAEAKAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM5ntsEGWco\nM5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nPm222wQlkKhIUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAzbabbBBkTqDHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAADNtptsEBRSoClQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM222zwQlFKhKTAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+OZ7GBBkTaDGoAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAgAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA\nAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAQAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAJABAAAACAAAgAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAlnOEnJULJNCzjA05Ywck\nuSAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAACZCQSilgyl\nMMhSE0WUgKSFIAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAJE5BSKUCKUQicwRRReDlR1AAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAkUkFIpQIpRCKQhFFFASVJUAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAACRSQMilAylMIpSE0UUhIokwAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAJE1ghx0CxzQiawNORMDShqAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAABAAAAEAAAAAAIAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA4AAADgAA\nAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAADwCBAAgQBAAAAIAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgIEAABAEAAAAgBAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAilwQkplg5wSsaZVWMAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADySBCSpZBIhLK\naWVlIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIp\nIEFSZEEiEoovRUXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAikgQVIUQSISiihFRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAACKSBAopRBIhKKaUVFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHMECiZEGcDommRUTAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nH//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAJABBGEgAIAAAAAAIAAEhAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAkAEAgSAAgAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAHWc4XDrGCyTQpnZysYBcmDsrGAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAJkJBIEykMpTDJSQrKQEgkJ\nKykAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAkTkEgSLwilE\nI9JOomASBgkqLwAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAC\nRSQSBIoCKUQiElKiEBIBCSooAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAJFJBIEikMpTCJSUqKQEgkJKikAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAA0TWEgaJgsc0IZJNomITBgkqJiAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAEAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAGIAAACggkAEEABAQ\nARAAYB8AAABIIACAAhUABIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAYgAAA\nICCQAQQAEBABEACQBAAAAAggAIACEQAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAABSckgGpodZzhOOSFjO5lBAEcHYwXCcckxoVJg6yYgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAFKKSAmpgmQkFFFQZSRJYIASISUhIKKKkphVJBMqQAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAASolQCKiCROQUUWBF5E9BABIhJeEgooseiFY8EimAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAABKiVAIqIJFJBRRUEUESEEAEiElASCiipCIV\nSASKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAEaIoAmpgkUkFFFIZSRJQAASI\nSUhIKKKUphUpBIqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAARnChBqaDRNYTj\nkhYxmZBABHBJMEwnHJMaFSYGimIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3/3QAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD93/3AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP93d0\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/d3dAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8AAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/d\n3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP93d0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD93d3AAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3d3QAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD///////////////////////////////////////////////////////////////////////\n////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////\n////////////////////////////////////////////////////////////\n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\nContent-type: text/plain\nContent-Transfer-Encoding: quoted-printable\n\n\n\nHow did it look to you?  -- Nathaniel\n\n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc--\n\n--Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.12.msg",
    "content": "Return-Path: <rhys@cs.uq.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA09077> for nsb; Thu, 6 Feb 92 23:18:13 EST\nReceived: from uqcspe.cs.uq.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA11919> for nsb@greenbush; Thu, 6 Feb 92 23:18:07 EST\nReceived: from solution.cs.uq.oz.au by uqcspe.cs.uq.oz.au \n\tid <AA14540@uqcspe.cs.uq.oz.au>; Fri, 7 Feb 92 14:33:40 +1100\nDate: Fri, 7 Feb 92 14:33:38 +1100\nFrom: rhys@cs.uq.oz.au\nMessage-Id: <9202070333.AA25077@client>\nTo: nsb@thumper.bellcore.com\nSubject: Test MIME message\nMime-Version: 1.0\nContent-Type: multipart/alternative;\n\tboundary=\"New_MetaSend_Alt_220042694\"\n\n\n> THIS IS A MULTIPART MESSAGE IN 'MIME' FORMAT.  It may contain enhanced\n> text, graphics, or sounds.  If you are reading this warning, your mail\n> reader does not understand MIME format, and some of what follows may look\n> strange.  However, the plain-text version of the message appears first,\n> and can be viewed with any mail reader.\n\n--New_MetaSend_Alt_220042694\n\n\nHi there!  Here's my first test message to you using my own version\nof metasend.\n\nFirst some piccys!!\n\nHere's the icon for my newsreader:\n\n[A part of type image/x-xbitmap was included here, but could not be displayed]\n\n\n... and how about this little devil to announce the arrival of mail:\n\n[A part of type image/x-xbitmap was included here, but could not be displayed]\n\n\nAnd ... any MIME message wouldn't be complete without a little bit of\n*richtext* to _liven_ things up. :-) \n\nWell, let me know how this goes on your end. -- Rhys. \n\n+   +=====================+==================================+\n+   || Rhys Weatherley | The University of Queensland, ||\n+   || rhys@cs.uq.oz.au | Australia. G'day!! ||\n+   || \"I'm a FAQ nut - what's your problem?\" ||\n+   +=====================+==================================+\n*_\n\n--New_MetaSend_Alt_220042694\nContent-type: multipart/mixed;\n\tboundary=\"New_MetaSend_Main_1292627053\"\n\n--New_MetaSend_Main_1292627053\nContent-type: text/plain\n\nHi there!  Here's my first test message to you using my own version\nof metasend.\n\nFirst some piccys!!\n\nHere's the icon for my newsreader:\n--New_MetaSend_Main_1292627053\nContent-type: image/x-xbitmap\nContent-Transfer-Encoding: base64\n\nI2RlZmluZSBEZXZpbDMyX3dpZHRoIDMyCiNkZWZpbmUgRGV2aWwzMl9oZWlnaHQgMzIKc3Rh\ndGljIGNoYXIgRGV2aWwzMl9iaXRzW10gPSB7CiAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs\nIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MDAsCiAgIDB4\nMDAsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4\nMGEsIDB4MjgsIDB4MDAsCiAgIDB4MDAsIDB4OWEsIDB4MmMsIDB4MDAsIDB4MDAsIDB4ZmEs\nIDB4MmYsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4MDAsCiAgIDB4MDAsIDB4ZGMsIDB4\nMWQsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGMsIDB4MDAsIDB4NzAsIDB4ZjAsIDB4MDcsIDB4\nMDcsCiAgIDB4OTAsIDB4YjMsIDB4ZTYsIDB4MDQsIDB4MjAsIDB4ZmMsIDB4MWYsIDB4MDIs\nIDB4YTAsIDB4ZTMsIDB4ZTMsIDB4MDIsCiAgIDB4NDAsIDB4MGYsIDB4MWMsIDB4MDEsIDB4\nNDAsIDB4NmYsIDB4NDMsIDB4MDEsIDB4YzAsIDB4MGUsIDB4YjgsIDB4MDEsCiAgIDB4ZTAs\nIDB4NjEsIDB4YmEsIDB4MDMsIDB4Y2MsIDB4MDMsIDB4ZjgsIDB4MTksIDB4YmUsIDB4NmMs\nIDB4Y2IsIDB4M2UsCiAgIDB4ZmUsIDB4MDIsIDB4YTAsIDB4M2YsIDB4ZmUsIDB4M2MsIDB4\nOTYsIDB4M2YsIDB4ZmMsIDB4NDIsIDB4YTEsIDB4MWYsCiAgIDB4ZjAsIDB4MzEsIDB4Y2Ms\nIDB4MDcsIDB4ODAsIDB4NDcsIDB4ZjMsIDB4MDAsIDB4MDAsIDB4MWUsIDB4M2MsIDB4MDAs\nCiAgIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MzgsIDB4MDAsIDB4\nMDAsIDB4MDQsIDB4MTAsIDB4MDAsCiAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs\nIDB4MDAsIDB4MDAsIDB4MDB9Owo=\n\n--New_MetaSend_Main_1292627053\nContent-type: text/plain\n\n... and how about this little devil to announce the arrival of mail:\n--New_MetaSend_Main_1292627053\nContent-type: image/x-xbitmap\nContent-Transfer-Encoding: base64\n\nI2RlZmluZSBEZW1vbkJpZmZfd2lkdGggMzIKI2RlZmluZSBEZW1vbkJpZmZfaGVpZ2h0IDMy\nCnN0YXRpYyBjaGFyIERlbW9uQmlmZl9iaXRzW10gPSB7CiAgIDB4ZmYsIDB4ZmYsIDB4ZmYs\nIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4YmUsIDB4MmIsIDB4YTAs\nCiAgIDB4MGQsIDB4YWEsIDB4MmEsIDB4YjAsIDB4MGQsIDB4YWEsIDB4MmIsIDB4YjAsIDB4\nMTUsIDB4YWEsIDB4ZWEsIDB4YTgsCiAgIDB4MTUsIDB4MDAsIDB4MDAsIDB4YTgsIDB4ZjUs\nIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4YmYsCiAgIDB4MDEsIDB4\nZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjgsIDB4\nMWYsIDB4MDAsCiAgIDB4MDAsIDB4ZjgsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYs\nIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4MDAsCiAgIDB4MDAsIDB4ZmMsIDB4M2YsIDB4\nMDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsCiAg\nIDB4YzAsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4Zjgs\nIDB4ZjAsIDB4OGYsIDB4MDcsCiAgIDB4M2MsIDB4ZTAsIDB4MDcsIDB4MGYsIDB4ZmYsIDB4\nZTIsIDB4NDcsIDB4MGUsIDB4YWIsIDB4ZmUsIDB4N2YsIDB4MWMsCiAgIDB4YWIsIDB4ZmMs\nIDB4M2YsIDB4MWMsIDB4ODksIDB4ZDgsIDB4MWIsIDB4M2MsIDB4ODEsIDB4OTgsIDB4MTks\nIDB4M2UsCiAgIDB4ODUsIDB4ZjgsIDB4MWYsIDB4MmEsIDB4YjUsIDB4ZDgsIDB4MWIsIDB4\nMmEsIDB4YjUsIDB4NTAsIDB4MGEsIDB4MDgsCiAgIDB4ODEsIDB4MTAsIDB4MDgsIDB4MDAs\nIDB4ZmYsIDB4ZTAsIDB4MDcsIDB4MDB9Owo=\n\n--New_MetaSend_Main_1292627053\nContent-type: text/richtext\n\nAnd ... any MIME message wouldn't be complete without a little bit\nof <bold>richtext</bold> to <italic>liven</italic> things up. :-)\n<nl>\n<nl>\nWell, let me know how this goes on your end. -- Rhys.\n<nl>\n<nl>\n<signature>\n+=====================+==================================+<nl>\n||  Rhys Weatherley   |  The University of Queensland,  ||<nl>\n||  rhys@cs.uq.oz.au  |  Australia.  G'day!!            ||<nl>\n||       \"I'm a FAQ nut - what's your problem?\"         ||<nl>\n+=====================+==================================+<nl>\n</signature>\n--New_MetaSend_Main_1292627053--\n\n--New_MetaSend_Alt_220042694--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.13.msg",
    "content": "Return-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA02859> for nsb; Tue, 16 Jun 92 04:34:26 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA17584> for nsb@greenbush; Tue, 16 Jun 92 04:34:20 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA19108; Tue, 16 Jun 92 17:34:14 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA24551; Tue, 16 Jun 92 17:34:14 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA12690; Tue, 16 Jun 92 17:34:08 JST\nDate: Tue, 16 Jun 92 17:34:08 JST\nReturn-Path: <ysato@etl.go.jp>\nTo: nsb@thumper.bellcore.com\nSubject: Re: transparent.el\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nContent-Type: text/plain; charset=ISO-2022-JP\nOrganization: Electrotechnical Laboratory, Tsukuba Science City\nMessage-Id: <gFQJR.ysato@etl.go.jp>\nReferences: <AKAHO.92Jun16162622@etlsu5.etl.go.jp>\nMIME-Version: 1.0\n\nHi. I forward my coleague's question about MIME.  He asks where he\ncould get \"transparent.el\" which is required to use Metamail in\nemacs.  I tried to find it using ARCHIE, but no record was found.\nCould you tell me where can I get the file?\n\nThanks in advance.\n--\nYutaka Sato <ysato@etl.go.jp>\nInformation Base Section\nELECTROTECHNICAL LABORATORY\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan\n\n\nOn 06/16/92(16:26) you akaho@etl.go.jp (Shotaro Akaho) wrote\nin <AKAHO.92Jun16162622@etlsu5.etl.go.jp> (etl.post.misc:148/etlss2):\n |(と)＠数理です.\n |\n |emacs 系のメイルシステムで MIME フォーマット対応にするには\n |transparent.el というのが必要みたいです (RMAIL, MH-e, VM いずれも).\n |\n |mime/mailers.txt より抜粋\n ||3.  Make sure you have the GNU \"transparent.el\" package installed.  This\n ||is not part of the standard distribution, but is widely available, and\n ||should be part of most FTP archives, etc.\n |\n |少しばかり探してみましたが, 手に入りませんでした.\n |どなたか持っていらっしゃる方がおいでになりましたら頂きたいのですが…\n |どこか共用のディレクトリに置いて下さっても結構です.\n |あるいはどこどこにあるよという情報でも構いません.\n |よろしくお願いします.\n |--\n |赤穗＠情報数理 akaho@etl.go.jp / 5549 / D-622\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.14.msg",
    "content": "Date: Fri, 29 Nov 91 07:13:35 EST\nFrom: Nathaniel Borenstein <nsb@thumper.bellcore.com>\nTo: caseau@france.bellcore.com (Yves J Caseau)\nSubject: Please check this out\nContent-type: text/plain; charset=iso-8859-1\nContent-transfer-encoding: quoted-printable\nMessage-Id: <635263359948238690.21002.3@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\nPlease let me know if I've typed this correctly.\nAnd thanks again for your help!  -- Nathaniel\n\nLe courrier =E9lectronique =E0 la fran=E7aise n=E9cessite \nquelques caract=E8res sp=E9ciaux pour faciliter la t=E2che \ndu lectein et =E9viter les ambigu=EFt=E9s"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.15.msg",
    "content": "X-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Tue, 16 Jun 1992 09:46:49 -0400 (EDT)\nMessage-ID: <4eDT39K0M2YtMC_2lL@thumper.bellcore.com>\nDate: Tue, 16 Jun 1992 09:46:49 -0400 (EDT)\nFrom: Nathaniel Borenstein <nsb>\nMIME-Version: 1.0\nContent-type: text/plain; charset=US-ASCII\nTo: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nSubject: Re: MIME & int'l mail\nIn-Reply-To: <gEJO+.ysato@etl.go.jp>\nReferences: <UeCBvVq0M2Yt4oUA83@thumper.bellcore.com>\n\t<gEJO+.ysato@etl.go.jp>\n\nI'm in my office now, so I can see the picture you sent me without\nextreme slowness.  Very nice.  As for your questions:\n\nThe white space in your name was an accident on my part -- sorry about that.\n\nThe characters you didn't recognize -- in my From: field & my signature\n-- are my name in Hebrew.  It's pronounced \"Naftali Ben Shalom\".\n\nWhen you say that it isn't easy to do multilingual mail in MIME, I\npresume what you mean is that it's a pain to have multiple parts, each\nof them plain text in a different character set?  If that's what you\nmean, I agree.  This will only be solved when the ISO 10646 and Unicode\nfolks finish their work and give us a \"one-world\" character set.  I look\nforward to that day!  -- Nathaniel"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.16.msg",
    "content": "X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]\n\t[nil \"Mon\" \"26\" \"June\" \"1995\" \"16:53:52\" \"-0800\" \"Aleksandar Totic\" \"atotic@netscape.com\" nil \"6272\" \"AppleDouble example\" \"^Date:\" nil nil \"6\" nil nil (mark number \"         26-Jun-95 16:53  Aleks Toti6272  AppleDouble example¥n\") nil]\n\tnil)\nReceived: from neon.netscape.com (steroid.mcom.com [198.93.92.10]) by abattoir.netscape.com (8.6.10/8.6.9) with ESMTP id QAA26158 for <jwz@abattoir.netscape.com>; Mon, 26 Jun 1995 16:50:29 -0700\nReceived: from [198.93.92.66] (nonlinear.mcom.com [198.93.92.66]) by neon.netscape.com (950215.SGI.8.6.10/8.6.9) with SMTP id QAA25749; Mon, 26 Jun 1995 16:46:00 -0700\nX-Sender: atotic@198.93.92.10\nMessage-Id: <ac15067506021004778a@[198.93.92.66]>\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"========================_26885646==_\"\nDate: Mon, 26 Jun 1995 16:53:52 -0800\nFrom: atotic@netscape.com (Aleksandar Totic)\nTo: atotic@mcom.com, jwz@mcom.com\nSubject: AppleDouble example\n\n\n\n--========================_26885646==_\nContent-Type: text/plain; charset=\"us-ascii\"\n\nHere comes a Mac file encoded as AppleDouble, with both forks.\n\nAleks\n\n\n\n--========================_26885646==_\nContent-Type: multipart/appledouble; boundary=\"========================_26885646==_D\"\n\n\n\n--========================_26885646==_D\nContent-Transfer-Encoding: base64\nContent-Type: application/applefile; name=\"%Aete_Editor_b1\"\nContent-Disposition: attachment; filename=\"%Aete_Editor_b1\"\n\nAAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAPgAAAA4AAAAJAAAATAAAACAA\nAAACAAAAbAAAveNBZXRlIEVkaXRvciBiMVNUQUtXSUxEAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAAAu+oAALrqAAAB+XJkIGJ1dHRvbiAiaGFzIGdsdWUgc3Vicm91dGlu\nZSIgDkFldGUgRWRpdG9yIGIxdAIAAABTVEFLV0lMRAEAAAAAAFNUQUtXSUxEAQAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAApdfAjQAEG8AAAL3jIGNhcmQgInByZWZlcmVuY2UiIGlu\ndG8gdmVyYm9zZQ1wdXQgY2FyZCBmaWVsZCAidGltZU91dCIgb2YgY2FyZCAicHJlZmVy\nZW5jZSIgaW50byBkZWZhdWx0VGltZW91dA1wdXQgY2FyZCBmaWVsZCAic2VuZFRhcmdl\ndCIgb2YgYwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAABGAAAERgAADkYAABZG\nAAAnhgAAQAYAAIAGAABADgAAJ/wAABf4AAAOAAAABgAAAAIAAAAAAWxgDgAAWEZDTgz9\nAAAAAAAAQfr/7iHICc5gAADsIl8gH6EiLohO0U5WAAAvDChuABApbgAMAFApbgAIAFQ5\nfAAOAEwvLABIIF9OkChfTl4gX978AAxO0E5W/wAvDCBuAAhD7v8AcD8i2FHI//wobgAM\nQe7/AClIAFA5fAAHAEwvLABIIF9OkC1sAHAAEChfTl4gX1BPTtBOVv8ALwwgbgAIQ+7/\nAHA/IthRyP/8KG4ADEHu/wApSABQOXwACgBMLywASCBfTpAtbABwABAoX05eIF9QT07Q\nTlYAAC8MKG4AECluAAwAUCluAAgAVDl8AAgATC8sAEggX06QKF9OXiBf3vwADE7QTlb+\n6EjnATAmbgAISlNvIC8LIGsAAi8QSG7+6E66/7JZTy8LSG7+6E66/2YuH2ACQodZTy8H\nTrr+3iRfQisARi8LLwpIbv7oTrr+1llPLwtIbv7oTrr++idfAEJM3wyATl4un051AAAM\n7k5WAAAvLgAITroCjE5eLp9OdYpFTlRSWVBPSU5UAAAATlb/ACBuAAgvKAAILy4ADEhu\n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\nZmMvDk66/kBCbv++YAAAwCBuAAxD7v/YItgi2Epu/75mFi18bWV0Yf/YQe7/4EPu/8gg\n2SDZYAxB7v/gQ+7/0CDZINlCZ0hu/9hIbv+6MDwEB6gWPV//sC1u/7r/onABLUD/tmBa\nQmdIbv/YLy7/ti88KioqKkhu/7JIbv/oMDwKC6gWLw5Ouv0+QmdIbv/gLy7/skhu/+gw\nPAYQqBY9X/+wQmdIbv/oMDwCBKgWVI8/Lv+wLw5Ouv0OUq7/tmkKIC7/trCu/6JvnFJu\n/75wAbBu/75sAP86QmdCp0KnHzwAAUhu/8AwPAcGqBYvDk66/NZCZ0hu/8AvPGF0dHJI\nbv/IMDwGEKgWLw5Ouvy6QmdIbv/IMDwCBKgWVI9Krv/UZypCZ0hu/8AvPHBhcm1Ibv/Q\nMDwGEKgWLw5OuvyKQmdIbv/QMDwCBKgWVI9CZ0hu/8AvPCRhZSRIbv+mMDwGA6gWVI9C\nZ0hu/8AwPAIEqBZUj2AAAQIgbgAMIDxsaXN0sJBXwCI8cmVjb7KQV8GAAWcAANgdfAAB\n/68gbgAMIDxyZWNvsJBmRC18cmVjb//4QmcvLgAMLzx0eXBlLzwqKioqSG7//Ehu//hw\nBC8ASG7/9DA8DhGoFlSPIDxyZWNvsK7/+FfARAAdQP+vEC7/r2dgcAAtQP/EQmdCp0Kn\nHzwAAUhu/8AwPAcGqBZKX2YyQmdIbv/ALzwtLS0tLy4ADDA8BhCoFkpfZhhCZ0hu/8Av\nPCRhZSRIbv+mMDwGA6gWVI9CZ0hu/8AwPAIEqBZUj2AkQmcvLgAMLy7/+Ehu/6YwPAYD\nqBZUj2AMIG4ADEPu/6Yi2CLYIG4ADCAoAASwrv+qZywgbgAIcAGwEGYOQmcvLgAMMDwC\nBKgWVI8gbgAIELwAASBuAAxD7v+mINkg2UJuABBP7v+CTN8c+E5eIF9QT07QTlb9+Ejn\nARgmbgAMLwsgbgAILxBIbv78TroC/Ehu/vxIegB4SG79+D88AAJOugNKQe7+/EPu/fhw\nPyDZUcj//EKnLwtIegBITroBPChfIAxnMEKnLwxCp0hu/v1CQBAu/vxIwC8AcP8vAEKn\nqeAuHy8LSHoAGi8MTroBTC8MIF+gI0zfGIBOXiBfUE9O0AtDcmVhdGVkRGVzYwEsTlb+\n5EjnAxgmbgAIKG4AEC4uABRCEyAMZwAAwkKnLwcvFE66AUhwBrCfbDogVHC+sBBmGiAU\n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\n/wAvPAAAAQBOuhLcQkAQLv8ASMDQlFKAKIAQLgAMZzY9fAEg/v4dfAAN/v9Ibv7+SG7/\nAE66E3g+H28KQe7/ABG8ACBwAEpHZuJIbv8ALy4ACE66/ahM3xCATl4gX978AApO0E5W\nAAAvLgAOHy4ADC8uAAhOuv96IG4ADhAoAAMCQAABZwJSkE5eIF/e/AAKTtBOVgAASG4A\nFEJnLy4ACE66/8IgbgAQIm4AFCCRIG4ADCJuABAgkU5eIF/e/AAQTtBOVgAAIG4ADCJu\nABAgkSBuAAgibgAMIJFOXiBf3vwADE7QTlb+/i8HEC4ADGc+Qe7/AEP6AEwg2TCRIG4A\nDi8QSG7/AXAELwBOuhHaSHoAMEhu/wBOuhKWPh9vBB1H/wBIbv8ALy4ACE66/NAgbgAO\nWJAuH05eIF/e/AAKTtABIAQ/Pz8/AE5WAABIbgAUQmcvLgAITrr+mEhuABRCZy8uAAhO\nuv7+IG4AECJuABQgkViuABQgbgAMIm4AFCCRTl4gX978ABBO0E5W//BKrgAUZywtbgAQ\n//AtbgAM//QtbgAI//hwAC1A//xCZ0hu//AvLgAUcBAvAE66EThUj05eIF/e/AAQTtBO\nVv/oSOcBGCZuABQgC2dkKFNCpy8LTroQ8C4M3p8gB5CMbyYgFLCuABBmGCAsAASwrgAM\nZggpbgAIAAxgNnAQ2cBg2nAQ2cBg1C1uABD/6C1uAAz/7HAALUD/8C1uAAj/9EJnSG7/\n6C8LcBAvAE66ELpUj0zfGIBOXiBf3vwAEE7QTlb/7kjnAwAgbgAoIFA8EC8uAChCZy8u\nAAhOuv0McAAtQP/wPUb/7n4BYFggbgAoLxBIbv/0SG7/+EHuAAwgGGcCLwAgUE6QLy4A\nJC8u//QvLv/4IG4AKC8QQe4AHCAYZwIvACBQTpAvLgAoSG7/8EKnQe4AFCAYZwIvACBQ\nTpBSR2kGvm7/7m+iTN8AwE5eIF/e/AAkTtBOVv/mSOcPGCZuAAhCp0KnTroP0i4fUmv6\n0DAr+tDlQEHr+rghhwAALy4AIC8HSHr+dkKnQe4AHC8gLyBB7gAULyAvIC8uAAhOuv8e\nLy4AHC8HSHr+kkKnQe4AHC8gLyBB7gAULyAvIC8uAAhOuv76QqcvB066D3hwEC8ATroP\nviAfPUD/+kHu//otSP/wSG7/8B88AAEvLgAITrr79HwAPW7/+v/megFgVCBHKAbYkHAQ\n3IBwAC1A//QoREqsAAhnDi1sAAj/8C1sAAz/9GAGLWwADP/wSG7/8Ehu//QfPAABSqwA\nDFbARAAfAEHuABQgGGcCLwAgUE6QUkVpBrpu/+Zvpi8HIF+gIzAr+tDlQEHr+rhyACGB\nAABTa/rQTN8Y8E5eIF/e/AAcTtBOVv/2SOcDACBuABggUDwQLy4AGB8uABYvLgAITrr7\nRnAALUD/+D1G//Z+AWAiLy4AGEhu//gfLgAWHy4AFEHuAAwgGGcCLwAgUE6QUkdpBr5u\n//Zv2EzfAMBOXiBf3vwAFE7QTlb//kjnAwAcLgAOIG4AEEqQZkovLgAUHwYvLgAITrr7\n0C8uABQfBi8uAAhOuvxCLy4AFB8GLy4ACE66/DQvLgAUHwYvLgAITrr7pi8uABQfBi8u\nAAhOuvriYAAAuCBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvt6Ly4AEBAHCgAAAR8ALy4A\nCE66+2YvLgAUHzwAAS8uAAhOuvvWLy4AFB88AAEvLgAITrr7xi8uABBCZy8uAAhOuvu4\nLy4AEEJnLy4ACE66+6ogbgAUIFBKEFbHRAcvLgAUHwcvLgAITrr7EC8uABAQBwoAAAEf\nAC8uAAhOuvr8Ly4AFB88AAEvLgAITrr6Ni8uABBCZy8uAAhOuvooTN8AwE5eIF/e/AAQ\nTtBOVv/+SOcDABwuAA4gbgAQSpBmAADCEC4ADGcQEAZnDEh6Al4vLgAITrr5Ui8uABQf\nBi8uAAhOuvoiLy4AFB8GLy4ACE66+ogvLgAUHwYvLgAITrr6+i8uABQfBi8uAAhOuvrs\nLy4AFB8GLy4ACE66+t4vLgAUHwYvLgAITrr6UC8uABQfBi8uAAhOuvmMLy4AFB8GLy4A\nCE66+rQvLgAUHwYvLgAITrr6Ji8uABQfBi8uAAhOuvliLy4AFB8GHy4ADEh6/hovLgAI\nLy4ACE66/apgAAGaSHoBpC8uAAhOuvicIG4AFCBQShBWx0QHLy4AFB8HLy4ACE66+WAv\nLgAQEAcKAAABHwAvLgAITrr5TCBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvmmLy4AEBAH\nCgAAAR8ALy4ACE66+ZIvLgAUHzwAAS8uAAhOuvoCLy4AEEJnLy4ACE66+fQvLgAUHzwA\nAS8uAAhOuvnkLy4AEEJnLy4ACE66+dYvLgAUHzwAAS8uAAhOuvnGLy4AEEJnLy4ACE66\n+bggbgAUIFBKEFbHRAcvLgAUHwcvLgAITrr5Hi8uABAQBwoAAAEfAC8uAAhOuvkKLy4A\nFB88AAEvLgAITrr4RC8uABBCZy8uAAhOuvg2Ly4AFB88AAEvLgAITrr5XC8uABBCZy8u\nAAhOuvlOIG4AFCBQShBWx0QHLy4AFB8HLy4ACE66+LQvLgAQEAcKAAABHwAvLgAITrr4\noC8uABQfPAABLy4ACE6699ovLgAQQmcvLgAITrr3zC8uABQvLgAQSHr8hi8uAAhIevic\nLy4ACC8uAAhOuvriTN8AwE5eIF/e/AAQTtACIyYAAiMqAE5WAAAgbgAQSpBmEi8uABQf\nLgAMLy4ACE66+LBgHi8uABQfPAABLy4ACE66+J4vLgAQQmcvLgAITrr4kE5eIF/e/AAQ\nTtBOVv/6SOcHABouAA4gbgAQSpBmRi8uABQfBS8uAAhOuvhkIG4AFCBQPBAvLgAUHwUv\nLgAITrr23j1G//p+AWASLy4AFB8FLy4ACE66+DhSR2lEvm7/+m/oYDwvLgAUHzwAAS8u\nAAhOuvgcLy4AEEJnLy4ACE66+A4vLgAULy4AEEh6/zgvLgAISHr32EKnLy4ACE66+fBM\n3wDgTl4gX978ABBO0E5W//5I5wcAGi4ADBwuAA4gbgAQSpBmchAFZxAQBmcMSHoBPi8u\nAAhOuvXkLy4AFB8GLy4ACE669ygvLgAUHwYvLgAITrr3mi8uABQfBi8uAAhOuvcMLy4A\nFB8GHwVIevsQLy4ACC8uAAhOuvqgLy4AFB8GHwVIev7kLy4ACC8uAAhOuvqIYAAAxkh6\nANAvLgAITrr1eiBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvayLy4AEBAHCgAAAR8ALy4A\nCE669p4vLgAUHzwAAS8uAAhOuvcOLy4AEEJnLy4ACE669wAgbgAUIFBKEFbHRAcvLgAU\nHwcvLgAITrr2Zi8uABAQBwoAAAEfAC8uAAhOuvZSLy4AFC8uABBIevpWLy4ACEh69mwv\nLgAILy4ACE66+LIvLgAULy4AEEh6/iIvLgAISHr2fEKnLy4ACE66+JRM3wDgTl4gX978\nABBO0AIjJgACIyoATlb//kjnAwAcLgAOIG4AEEqQZkQQLgAMZxAQBmcMSHoA0C8uAAhO\nuvSCLy4AFB8GLy4ACE669cYvLgAUHwYvLgAITrr2OC8uABQfBi8uAAhOuvWqYAAAiEh6\nAJIvLgAITrr0SCBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvWALy4AEBAHCgAAAR8ALy4A\nCE669WwvLgAUHzwAAS8uAAhOuvXcLy4AEEJnLy4ACE669c4gbgAUIFBKEFbHRAcvLgAU\nHwcvLgAITrr1NC8uABAQBwoAAAEfAC8uAAhOuvUgTN8AwE5eIF/e/AAQTtACIyYAAiMq\nAE5W//5I5wMAHC4ADiBuABBKkGYsLy4AFB8GLy4ACE669OgvLgAUHwYvLgAITrr1Wi8u\nABQfBi8uAAhOuvTMYHogbgAUIFBKEFbHRAcvLgAUHwcvLgAITrr0sC8uABAQBwoAAAEf\nAC8uAAhOuvScLy4AFB88AAEvLgAITrr1DC8uABRCZy8uAAhOuvT+IG4AFCBQShBWx0QH\nLy4AFB8HLy4ACE669GQvLgAQEAcKAAABHwAvLgAITrr0UEzfAMBOXiBf3vwAEE7QTlb/\n+kjnBwAeLgAOIG4AEEqQZngQLgAMZxAQB2cMSHoAyC8uAAhOuvLGLy4AFB8HLy4ACE66\n9IogbgAUIFA6EC8uABQfBy8uAAhOuvMEPUX/+nwBYC4vLgAUHwcvLgAITrrz3i8uABQf\nBy8uAAhOuvRQLy4AFB8HLy4ACE6688JSRmlSvG7/+m/MYEpIegBWLy4ACE668lgvLgAU\nHzwAAS8uAAhOuvQaLy4AEEJnLy4ACE669AwvLgAULy4AEEh6/ngvLgAISHrzpi8uAAgv\nLgAITrr17EzfAOBOXiBf3vwAEE7QAiMmAAIjKgBOVv/8SOcBGCZuAAhwAC1AABA9a/rW\n//x+AWAgMAfnQEHr+tBJ8AAAIC4ADLCUZggtbAAEABBgClJHaQa+bv/8b9pM3xiATl4g\nX1BPTtBOVvq4SOcfOHAALUD7eHAALUD8jh18AAH7fUJu+tAgbgAISlBvJC8uAAggaAAC\nLxBIbv78TroE9EJnLy4ACEhu/vxOugSmHV/7fUJu+34QLvt9Zy5Cpy88YWV1dD88AAGp\nnS1f+3hnGi8u+3hIbvt+SG77iEhu/vypqC8u+3ggX6ApQmeplD1f/JI9fP///JQgbgAI\ncAKwUG9GSG788C88ADIAMqiALy788Eh6BBRCpz88//9IbvzgQqdIbvyWPzwAAqnqEC78\nlmc+QmdIbvygPy78nB88AAGpxD1f/JRgKC8uAAggbgAIIGgABi8QSG7+/E66BDZCZ0hu\n/vxCZx88AAGpxD1f/JRw/7Bu/JRmBi8OTrrvBEKnLzxhZXRlPy77fqgfLV/8jmYSQqcv\nPGFldGU/PAABqA4tX/yOSq78jmYGLw5Ouu7SIG78jiBQPVD8jAxuAJD8jF3ADG4CAPyM\nXsGAAWcGLw5Ouu6uQqdCp066A/gtX/uEZgYvDk667ppKrvt4ZwABCiBu+3ggEFyALUD/\n/CBu//w9UPrWcBSwbvrWbAY9fAAU+tZIbv/8QmcvDk668GI9bvrW+ro9fAAB/PZgAAC+\nSG7//EJnLw5OuvDCSG7//EJnLw5OuvEqMC789udAIG7//EPu+tAjkAAASG7//EJnLw5O\nuvGMSG7//EJnLw5OuvAQSG7//EJnLw5OuvAEMC789udAQe761CGu//wAAEhu//xCZx88\nAAFIevYILw4vDk669HpIbv/8QmcfPAABSHr5YC8OLw5OuvRkSG7//EJnHzwAAUh6+q4v\nDi8OTrr0Tkhu//xCZx88AAFIevxULw4vDk669DhSbvz2aRIwLvz2sG76um8A/zpgBEJu\n+tZwAC1A+4BB7vygLUj//Ehu//wfPAABLw5Ouu/kLy78jkhu/IxIbvuISG77jKmoQe77\niC1I//xIbv/8HzwAAS8OTrrwsEHu/IwtSP/8SG7//B88AAEvDk667ypB7vuMLUj//Ehu\n//wfPAABLw5Ouu+QLy78jiBfoCkgbvyOLVD//Ehu//wfPAABLw5Ouu72SG7//B88AAEv\nDk667uhIbv/8HzwAAS8OTrru2iBu//w9UPz0SG7//B88AAEvDk667sQ9bvz0+rg9fAAB\n/PZgAAEoSG7//B88AAEvDk667yJIbv/8HzwAAS8OTrrviEKnIG7//C8QLw5OuvwmLV/6\n0khu//wfPAABLw5Ouu/oSG7//B88AAEvDk667mpIbv/8HzwAAS8OTrruXEqu+tJnakhu\n//xIbvrSSHr0bC8OSHrwGC8OLw5OuvGsSG7//Ehu+tJIevfALw5Ieu9ILw4vDk668ZJI\nbv/8SG760kh6+QovDkh67y4vDi8OTrrxeEhu//xIbvrSSHr6rC8OSHrvREKnLw5OuvFe\nYFhIbv/8HzwAAUJnSHr0AC8OLw5OuvJySG7//B88AAFCZ0h691gvDi8OTrryXEhu//wf\nPAABQmdIevimLw4vDk668kZIbv/8HzwAAUJnSHr6TC8OLw5OuvIwUm789mkMMC789rBu\n+rhvAP7QLy4ACC8u+4ROugAiIG4ACCFu+4QAQi8OTrrraE/u+phM3xz4Tl4un051AABO\nVgAALwwobgAMKW4ACABQOXwAIABMLywASCBfTpAoX05eIF9QT07QTlb/AC8MIG4ACEPu\n/wBwPyLYUcj//ChuAAxB7v8AKUgAUDl8AAsATC8sAEggX06QHWwAcwAQKF9OXiBfUE9O\n0E5WAAAvDChuABApbgAMAFApbgAIAFQ5fAAIAEwvLABIIF9OkChfTl4gX978AAxO0E5x\ncAAvCTHAAiBOdXAAYPYiXyAfoSIuiE7RIl8gX6AlLoBqBkKXTvr/3E76/9YiHyAfIl8g\nX6AuIkFO0SAvAAQibwAIIG8ADKnvP0AAECBfT+8ADE7QIG8ABCAvAAhCZ6nuIF9QT07Q\nTlYAAC8ALwEgLwAUIi8AEE66ABQvQQAUIh8gH05eL1cABFiPTnVI5z4AKgBqAkSALAFq\nAkSBJAFIQkpCZhw2AEJASEBnBIDBNABIQjADgME0ACICQkBIQGAiJABCQEhASEJCQiYB\ncgB4D9SC0YDSgbCDbQSQg1IBUcz/8EqFagJEgLuGagJEgUzfAHxOdUjn4PAgbwAgQkAQ\nGCJvACRCQhQZZyKQQmwEQkFgIFNCJEgmSTICtQtWyf/8ZwpSiFHI/+5CQWAGIgiSrwAg\nP0EAJkzfDwcvVwAGXE9OdQAABLRgDgAAWEZDTgz+AAAAAAAAQfr/7iHICc5gAAH8MC8A\nBEPvAAYyAOVJ0sEgUSKXSOcA4HIAUkhgGiRhdAAUGtICZAyUAVMCcABy/2ACENpRyv/8\nUcj/5EzfBwAQgS5JUkEgV07QSOfgwCJvABggbwAcL28AFAAccAAQGDQAEhmyAGQCFAFT\nQm0IswhWyv/8ZgKyAEzfAwdQj051LwoibwAIJG8ADDAvABA0ABIasgJkAhQBEsJgAhLa\nUcr//LABJF8gX0/vAApO0CJfIF+gJS6AagJCl07RIl8gHyBfoCRO0SIfIB8iXyBfoC4i\nQU7RIC8ABCJvAAggbwAMqe8/QAAQIF9P7wAMTtBOVgAALwwobgAMKW4ACABQOXwAAwBM\nLywASCBfTpAtbABwABAoX05eIF9QT07QTlYAAC8MKG4AECluAAwAUCluAAgAVDl8AA4A\nTC8sAEggX06QKF9OXiBf3vwADE7QTlb/AC8MIG4ACEPu/wBwPyLYUcj//ChuAAxB7v8A\nKUgAUDl8AAcATC8sAEggX06QLWwAcAAQKF9OXiBfUE9O0E5W/wAvDCBuAAhD7v8AcD8i\n2FHI//wobgAMQe7/AClIAFA5fAAKAEwvLABIIF9OkC1sAHAAEChfTl4gX1BPTtBOVgAA\nLwwobgAQKW4ADABQKW4ACABUOXwACABMLywASCBfTpAoX05eIF/e/AAMTtBOVv3WSOcP\nMCZuAAh+zgxTAANtAAI+Qq7+5iorAAJZTy8LIEUvEE66/spwBrCfbAACIiBFIFAQEEiA\nDED/vmYAAhIgRSAQWoAgQBAQSIAMQP++ZgAB/i8LIEUgEFyALwBIbv7sTrr/aiBFIBBS\ngC8ASG7+4nAELwBOuv5QWU8vC0hu/uxOuv8KLV/+5kqu/uZnAAHALwsgawAGLxBIbv7s\nTrr/Lkh6AfJIbv7sTrr9oGYEQgZgOEh6AdpIbv7sTrr9jmYEfAFgJkh6AcJIbv7sTrr9\nfGYEfAJgFEh6AapIbv7sTrr9amYEfANgAnwESgZmcFlPLwsgawAKLxBOuv30VE89X/7W\nDG4A//7WbwY9fAD//tZVT0Hu/tYuCFKHLwcvLv7mcAEvAE66/a4+H0pHZgAA9C8rAAog\nX6ApVU8gawAKLxAvLv7mPi7+1kjHLwdOuv2GPh8vKwAKIF+gKmAAAMYvCyBrAAovEEhu\n/uxOuv5gEAZgAACiWU8vC0hu/uxOuv4OLV/+2FVPQe7+2C4IVIcvBy8u/uZwAi8ATrr9\nOj4fYAAAgllPLwtIbv7sTrr94C1f/thVT0hu/tgvLv7mfgIvB066/RI+H2BacAAQLv7s\nWUBsJkhu/dZIbv7sSHoAoD88AAJOuvweWE8/PAD/SG791khu/uxOuvyKHXwABP7sVU9I\nbv7tLy7+5n4ELwdOuvzGPh9gDlMAZwD/XFMAZ4RTAGemDFMAA28mSkdmIllPLy7+5k66\n/HooHyAEAkAAAWcOLy7+5iAEUoAvAE66/HBCKwBGLwswB0jALwBIbv7sTrr8vFlPLwtI\nbv7sTrr84CdfAEJM3wzwTl4un051BCAgICAWBHRuYW0IBGxvbmcIBHNob3IIBHMyNTUI\nAAAGbE5WAAAvLgAITroDRk5eLp9OdYpFTlRSWVBPSU5UAAAATlb/ACBuAAxD7v8AcD8i\n2FHI//wibgAIIGkACC8IQqcibgAILykACEhu/wBOugSsIB8gXyFAAEIgbgAILEhO+gQI\nAABOXiBfUE9O0IRGQUlMAAAATlYAAEjnAQg+LgAMKG4ACHABsEdmUC8sAAggbAAIIGgA\nAi8QSGz/AE66BPRIbP8ASHoA+E66BZIQH2cOSHoAYi8uAAhOuv9mYBxIbP8ASHoA2E66\nBXQQH2cMSHoAjC8uAAhOuv9IcAOwR17AcgSyR13BgAFnDEh6ACgvLgAITrr/LEzfEIBO\nXiBfXE9O0I9DSEVDS1BBUkFNQ09VTlQAjEZGb3JtOiBTZWFyY2goY29udGFpbmVyLCB0\naGVTdHJpbmcsIHNlYXJjaFdob2xlLCBFdmVyeSBPY2N1cnJlbmNlIEZsYWcpAD9TZWFy\nY2ggWEZDTiAxLjEgqTE5OTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIFJpZ2h0cyBS\nZXNlcnZlZC4BIQE/TlYAACBuABAgLgAM0ZBOXiBf3vwADE7QkElOQ1JFTUVOVFBPSU5U\nRVIAAABOVv/+SOcBGCZuAAwobgAIQgcgUxAQSIBnJgRAAA1nDgRAABNnFgRAAAxnCmAa\nUqz79H4BYBJSrPvwYAx+AWAIfgEZfAAB++5SkyBTShBXwMAHZwYZfAAB++4QB2e0TN8Y\ngE5eIF9QT07Qi1NDQU5UT1NQQUNFAABOVgAALwwobgAIIG4ADCBQEBBIgGcaBEAADWcI\nBEAAH2cIYBRSrPv0YA5SrPvwYAgZfAAB++5gEC8uAAxwAS8ALy4ACE66/xYoX05eIF9Q\nT07QiFNDQU5ORVhUAAAATlb9AC8MKG4ACC8sAAgvLgAMSG7+AE66AgQvLAAILy4AEEhu\n/wBOugH0ECz772cySGz9AEhu/wBIegBySG7+AEhs/ABIbv0APzwABU66AupB7P0AQ+79\nAHA/INlRyP/8YDZKLP0AZjBIbP0ASG7/AEh6ADpIbv4ASGz8AEhu/QA/PAAFTroCskHs\n/QBD7v0AcD8g2VHI//woX05eIF/e/AAMTtCFTE9HSVQAAgEsTlb77EjnHzggbgAIPVD7\n+j8u+/ovDk66/QxCpy8uAAggbgAIIGgABi8QTroBBCAfPUD7+C8uAAggbgAIIGgACi8Q\nSG7/AE66AfpCZy8uAAhIbv8ATroBoB1f++1wBLBu+/pmCB18AAH772AEQi7770Iu++5w\nAS1A+/RwAS1A+/BCLv0AHXwAAf8AHXwAAfwAHXwADfwBIG4ACCBoAAItUPv8QmcgbgAI\nIGgABi8QLy77/D8u+/g/Lvv4TroBwkpfZhYvLvv0Ly778C8OTrr+hBAu++9mAmAkEC77\n7WcMSG77/C8OTrr9lmAKSG77/C8OTrr+AnABsC777mamIG4ACC8IQqcvLgAISG79AE66\nAJwgHyBfIUAAQk/u+8xM3xz4Tl4un051hlNFQVJDSAAAAE5WAAAvDChuAAwpbgAIAFA5\nfAADAEwvLABIIF9OkC1sAHAAEChfTl4gX1BPTtCMU1RSSU5HTEVOR1RIAAAATlYAAC8M\nKG4AECluAAwAUCluAAgAVDl8AA0ATC8sAEggX06QKF9OXiBf3vwADE7QiUxPTkdUT1NU\nUgAATlb/AC8MIG4ACEPu/wBwPyLYUcj//ChuAAxB7v8AKUgAUDl8AAcATC8sAEggX06Q\nLWwAcAAQKF9OXiBfUE9O0IlQQVNUT1pFUk8AAE5W/wAvDCBuAAhD7v8AcD8i2FHI//wo\nbgAMQe7/AClIAFA5fAALAEwvLABIIF9OkB1sAHMAEChfTl4gX1BPTtCJU1RSVE9CT09M\nAABOVgAALwwobgAQKW4ADABQKW4ACABUOXwACABMLywASCBfTpAoX05eIF/e/AAMTtCJ\nWkVST1RPUEFTAAA0PAAMIF8/Ai8Ire1I5+DgQ+8AHDAZIFk0ANRC1ELSwkJBUkhgICRh\nQkIUGtJCDEEA/28OBEEA/5RBMjwA/2ACENpRyv/8Ucj/3iBhEIEwISBJ0EDQQNDAVEgg\noSKITN8HBy5fTnVI58DAcgFgBkjnwMBCQSBvABgibwAUQkAQELMIVsj//GYECkEAAR9B\nABovbwAQABZM3wMDXE9OdQAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAZcAAAL6\ngAAHBsAABgHAAAsA4AAPD6B539ngijsf4Iv7GGCaFxjgaf3PwAAOAKAADYOQAAd9SAAD\n/6QAAPjSAAAAaQAAADUAAAAbAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZuAA\nlgAAAAAABw5SZXF1aXJlZCBTdWl0ZSxFdmVudHMgdGhhdCBldmVyeSBhcHBsaWNhdGlv\nbiBzaG91bGQgc3VwcG9ydHJlcWQAAQABAAMET3BlbiRPcGVuIHRoZSBzcGVjaWZpZWQg\nbGlzdCBvZiBkb2N1bWVudHNhZXZ0b2RvY251bGwAAIAAYWxpcxlMaXN0IG9mIGRvY3Vt\nZW50cyB0byBvcGVuUAAAAAVQcmludCVQcmludCB0aGUgc3BlY2lmaWVkIGxpc3Qgb2Yg\nZG9jdW1lbnRzYWV2dHBkb2NudWxsAACAAGFsaXMaTGlzdCBvZiBkb2N1bWVudHMgdG8g\ncHJpbnQAQAAAAARRdWl0EFF1aXQgYXBwbGljYXRpb25hZXZ0cXVpdG51bGwAAIAAbnVs\nbBxObyBkaXJlY3QgcGFyYW1ldGVyIHJlcXVpcmVkAJAAAAAAAAAAAAAKQ29yZSBTdWl0\nZSZTdWl0ZSB0aGF0IGFwcGxpZXMgdG8gYWxsIGFwcGxpY2F0aW9uc2NvcmUAAQABABAF\nQ2xvbmUPQ2xvbmUgYW4gb2JqZWN0Y29yZWNsb25vYmogAAAAAG9iaiATVGhlIG9iamVj\ndCB0byBjbG9uZRAAAAECVG8AaW5zaGluc2wfVGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhl\nIG9iamVjdIAABUNsb3NlD0Nsb3NlIGFuIG9iamVjdGNvcmVjbG9zbnVsbAAAgABvYmog\nE1RoZSBvYmplY3QgdG8gY2xvc2UQAAACBFNhdmUAc2F2b3Nhdm8/U3BlY2lmaWVzIHdo\nZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5n\noAAJU2F2aW5nIElua2ZpbGFsaXMkVGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUg\nb2JqZWN0AIAABUNvdW50RFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEg\ncGFydGljdWxhciBjbGFzcyB3aXRoaW4gYW4gb2JqZWN0AGNvcmVjbnRlbG9uZwAAAABv\nYmogK1RoZSBvYmplY3Qgd2hvc2UgZWxlbWVudHMgYXJlIHRvIGJlIGNvdW50ZWQAAAAB\nBUNsYXNza29jbHR5cGUnVGhlIGNsYXNzIG9mIHRoZSBlbGVtZW50cyB0byBiZSBjb3Vu\ndGVkAAAGQ3JlYXRlFENyZWF0ZSBhIG5ldyBlbGVtZW50Y29yZWNyZWxvYmogAAAAAG51\nbGwAAJAAAAQDTmV3a29jbHR5cGUcVGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAAA\nAAJBdABpbnNoaW5zbCtUaGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBl\nbGVtZW50AAAJV2l0aCBEYXRhZGF0YSoqKiogVGhlIGluaXRpYWwgZGF0YSBmb3IgdGhl\nIGVsZW1lbnQAgAAPV2l0aCBQcm9wZXJ0aWVzcHJkdHJlY28yVGhlIGluaXRpYWwgZGF0\nYSBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQAgAAGRGVsZXRlIERlbGV0\nZSBhbiBlbGVtZW50IGZyb20gYW4gb2JqZWN0Y29yZWRlbG9udWxsAACAAG9iaiAVVGhl\nIGVsZW1lbnQgdG8gZGVsZXRlEAAAAAZFeGlzdHMYVGVsbCBpZiBhbiBvYmplY3QgZXhp\nc3RzY29yZWRvZXhib29sAAAAAG9iaiAWVGhlIG9iamVjdCBpbiBxdWVzdGlvbgAAAAAA\nCkNsYXNzIEluZm8lR2V0IGluZm9ybWF0aW9uIGFib3V0IGFuIG9iamVjdCBjbGFzcwBj\nb3JlcW9iamNsaW4AAAAAdHlwZTVUaGUgb2JqZWN0IGNsYXNzIGFib3V0IHdoaWNoIGlu\nZm9ybWF0aW9uIGlzIHJlcXVlc3RlZIAAAAECSW4Ad3JjZGludGxDVGhlIGh1bWFuIGxh\nbmd1YWdlIGFuZCBzY3JpcHQgc3lzdGVtIGluIHdoaWNoIHRvIHJldHVybiBpbmZvcm1h\ndGlvboAACEdldCBEYXRhGkdldCB0aGUgZGF0YSBmb3IgYW4gb2JqZWN0Y29yZWdldGQq\nKioqAAAAAG9iaiAnVGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVk\nAAAAAQJBcwBydHlwdHlwZTZUaGUgZGVzaXJlZCB0eXBlcyBmb3IgdGhlIGRhdGEsIGlu\nIG9yZGVyIG9mIHByZWZlcmVuY2UAwAAJRGF0YSBTaXplJVJldHVybiB0aGUgc2l6ZSBp\nbiBieXRlcyBvZiBhbiBvYmplY3Rjb3JlZHNpemxvbmcAAAAAb2JqICxUaGUgb2JqZWN0\nIHdob3NlIGRhdGEgc2l6ZSBpcyB0byBiZSByZXR1cm5lZAAAAAABAkFzAHJ0eXB0eXBl\nLlRoZSBkYXRhIHR5cGUgZm9yIHdoaWNoIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQAgAAK\nRXZlbnQgSW5mbzFHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFwcGxlIGV2ZW50cyBp\nbiBhIHN1aXRlAGNvcmVndGVpZXZpbgAAQAB0eXBlQ1RoZSBldmVudCBjbGFzcyBvZiB0\naGUgQXBwbGUgZXZlbnRzIGZvciB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24AAAAB\nAkluAHdyY2RpbnRsQ1RoZSBodW1hbiBsYW5ndWFnZSBhbmQgc2NyaXB0IHN5c3RlbSBp\nbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb26AAARNb3ZlDk1vdmUgYW4gb2JqZWN0\nY29yZW1vdmVvYmogAAAAAG9iaiASVGhlIG9iamVjdCB0byBtb3ZlABAAAAECVG8AaW5z\naGluc2wfVGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhlIG9iamVjdAAABE9wZW4OT3BlbiBh\nbiBvYmplY3RhZXZ0b2RvY251bGwAAIAAb2JqIBJUaGUgb2JqZWN0IHRvIG9wZW4AEAAA\nAAVQcmludA9QcmludCBhbiBvYmplY3RhZXZ0cGRvY251bGwAAIAAb2JqIBNUaGUgb2Jq\nZWN0IHRvIHByaW50AAAAAARRdWl0MFBlcmZvcm0gdGFza3MgYmVmb3JlIHRlcm1pbmF0\naW9uLCB0aGVuIHRlcm1pbmF0ZWFldnRxdWl0bnVsbAAAgABudWxsAACQAAABBFNhdmUA\nc2F2b3Nhdm85U3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIHNhdmUgY3VycmVudGx5\nIG9wZW4gZG9jdW1lbnRzoAAEU2F2ZQ5TYXZlIGFuIG9iamVjdGNvcmVzYXZlbnVsbAAA\ngABvYmogElRoZSBvYmplY3QgdG8gc2F2ZQAQAAACAkluAGtmaWxhbGlzJFRoZSBmaWxl\nIGluIHdoaWNoIHRvIHNhdmUgdGhlIG9iamVjdACAAAJBcwBmbHRwdHlwZTdUaGUgZmls\nZSB0eXBlIG9mIHRoZSBkb2N1bWVudCBpbiB3aGljaCB0byBzYXZlIHRoZSBkYXRhgAAI\nU2V0IERhdGEUU2V0IGFuIG9iamVjdCdzIGRhdGFjb3Jlc2V0ZG51bGwAAIAAb2JqIBRU\naGUgb2JqZWN0IHRvIGNoYW5nZQAQAAABAlRvAGRhdGEqKioqDVRoZSBuZXcgdmFsdWUA\nAAAIC0FwcGxpY2F0aW9uY2FwcBdBIE1hY2ludG9zaCBhcHBsaWNhdGlvbgAJCUJlc3Qg\nVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0\neXBlCVRoZSBjbGFzcwAACUNsaXBib2FyZHBjbGkqKioqDVRoZSBjbGlwYm9hcmRQAAxE\nZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAAS\nSW5zZXJ0aW9uIGxvY2F0aW9uAHBpbnNpbnNsTVRoZSBsb2NhdGlvbiB3aGVyZSB0aGUg\nY29udGVudHMgb2YgdGhlIGNsaXBib2FyZCB3b3VsZCBiZSBpbnNlcnRlZCBieSBhIHBh\nc3RlAAAJRnJvbnRtb3N0cGlzZmJvb2wiSXMgdGhpcyB0aGUgZnJvbnRtb3N0IGFwcGxp\nY2F0aW9uPwAAAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lAAAADlVzZXIgU2VsZWN0aW9u\nAHB1c2xjc2VsLVRoZSBjdXJyZW50IHVzZXIgc2VsZWN0aW9uIG9yIGluc2VydGlvbiBw\nb2ludAAAB1ZlcnNpb252ZXJzbG9uZyVUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGFw\ncGxpY2F0aW9uAAAAAmRvY3UAAmluZHhuYW1lY3dpbgACaW5keG5hbWUJQ2hhcmFjdGVy\nY2hhIAtBIGNoYXJhY3RlcgAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2Ny\naXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9yY29scmNS\nR0IJVGhlIGNvbG9yEAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRl\nc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9udGN0eHQUVGhlIG5hbWUgb2YgdGhlIGZvbnQA\nEAAEU2l6ZQBwdHN6Zml4ZBJUaGUgc2l6ZSBpbiBwb2ludHMAEAAMV3JpdGluZyBDb2Rl\nAHBzY3RpbnRsHlRoZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVTdHlsZXR4\nc3R0c3R5DlRoZSB0ZXh0IHN0eWxlABAADlVuaWZvcm0gU3R5bGVzAHVzdGx0c3R5DlRo\nZSB0ZXh0IHN0eWxlAAAAAAJjaGEgAAFpbmR4Y3R4dAABaW5keA9UZXh0IFN0eWxlIElu\nZm90c3R5HU9uIGFuZCBPZmYgc3R5bGVzIG9mIHRleHQgcnVuAAIJT24gU3R5bGVzb25z\ndHN0eWwjVGhlIHN0eWxlcyB0aGF0IGFyZSBvbiBmb3IgdGhlIHRleHRgAApPZmYgU3R5\nbGVzAG9mc3RzdHlsKFRoZSBzdHlsZXMgdGhhdCBhcmUgb2ZmIGZvciBhbGwgdGhlIHRl\neHQAYAAAAAhEb2N1bWVudABkb2N1CkEgZG9jdW1lbnQAAAUJQmVzdCBUeXBlcGJzdHR5\ncGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhlIGNs\nYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3Ig\ndHlwZQAACE1vZGlmaWVkAGltb2Rib29sM0hhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2Rp\nZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPwAABE5hbWUAcG5hbWl0eHQIVGhlIG5hbWUA\nAAAAAWZpbGUAAmluZHhuYW1lBEZpbGUAZmlsZQZBIGZpbGUAAAUJQmVzdCBUeXBlcGJz\ndHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhl\nIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0\nb3IgdHlwZQAAClN0YXRpb25lcnkAcHNwZGJvb2weSXMgdGhlIGZpbGUgYSBzdGF0aW9u\nZXJ5IGZpbGU/ABAABE5hbWUAcG5hbWl0eHQIVGhlIG5hbWUAAAAAAAlTZWxlY3Rpb25j\nc2VsIVRoZSBzZWxlY3Rpb24gdmlzaWJsZSB0byB0aGUgdXNlcgADCUJlc3QgVHlwZXBi\nc3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRo\nZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAABb2JqIAABaW5keARUZXh0AGN0eHQEVGV4dAAACQlCZXN0IFR5cGVw\nYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAFQ2xhc3NwY2xzdHlwZQlU\naGUgY2xhc3MAAAVDb2xvcmNvbHJjUkdCIFRoZSBjb2xvciBvZiB0aGUgZmlyc3QgY2hh\ncmFjdGVyABAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAARGb250AGZvbnRjdHh0K1RoZSBuYW1lIG9mIHRoZSBmb250IG9mIHRo\nZSBmaXJzdCBjaGFyYWN0ZXIQAARTaXplAHB0c3pmaXhkKVRoZSBzaXplIGluIHBvaW50\ncyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAAMV3JpdGluZyBDb2RlAHBzY3RpbnRsHlRo\nZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVTdHlsZXR4c3R0c3R5JVRoZSB0\nZXh0IHN0eWxlIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIQAA5Vbmlmb3JtIFN0eWxlcwB1\nc3RsdHN0eTRUaGUgdGV4dCBzdHlsZXMgdGhhdCBhcmUgdW5pZm9ybSB0aHJvdWdob3V0\nIHRoZSB0ZXh0AAAAAAJjaGEgAAFpbmR4Y3R4dAABaW5keAZXaW5kb3cAY3dpbghBIHdp\nbmRvdwAADwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUA\nAAAGQm91bmRzAHBibmRxZHJ0JVRoZSBib3VuZGFyeSByZWN0YW5nbGUgZm9yIHRoZSB3\naW5kb3cQAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0\ndHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAA1IYXMgQ2xvc2UgQm94aGNs\nYmJvb2whRG9lcyB0aGUgd2luZG93IGhhdmUgYSBjbG9zZSBib3g/AAANSGFzIFRpdGxl\nIEJhcnB0aXRib29sIURvZXMgdGhlIHdpbmRvdyBoYXZlIGEgdGl0bGUgYmFyPwAABUlu\nZGV4cGlkeGxvbmcYVGhlIG51bWJlciBvZiB0aGUgd2luZG93ABAACEZsb2F0aW5nAGlz\nZmxib29sFkRvZXMgdGhlIHdpbmRvdyBmbG9hdD8AAAAFTW9kYWxwbW9kYm9vbBRJcyB0\naGUgd2luZG93IG1vZGFsPwAAAAlSZXNpemFibGVwcnN6Ym9vbBhJcyB0aGUgd2luZG93\nIHJlc2l6YWJsZT8AAAAIWm9vbWFibGUAaXN6bWJvb2wXSXMgdGhlIHdpbmRvdyB6b29t\nYWJsZT8AAAZab29tZWQAcHp1bWJvb2wVSXMgdGhlIHdpbmRvdyB6b29tZWQ/EAAETmFt\nZQBwbmFtaXR4dBdUaGUgdGl0bGUgb2YgdGhlIHdpbmRvdxAACVNlbGVjdGlvbnNlbGVj\nc2VsIVRoZSBzZWxlY3Rpb24gdmlzaWJsZSB0byB0aGUgdXNlchAAB1Zpc2libGVwdmlz\nYm9vbBZJcyB0aGUgd2luZG93IHZpc2libGU/ABAAAAFkb2N1AAJpbmR4bmFtZQAIC2Jl\nZ2lucyB3aXRoYmd3dAtCZWdpbnMgd2l0aAhjb250YWlucwBjb250CENvbnRhaW5zAAll\nbmRzIHdpdGhlbmRzCUVuZHMgd2l0aAE9PSAgIAVFcXVhbAE+PiAgIAxHcmVhdGVyIHRo\nYW4AAj49AD49ICAYR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvAAE8PCAgIAlMZXNzIHRo\nYW4CPD0APD0gIBVMZXNzIHRoYW4gb3IgZXF1YWwgdG8ABHNhdm8AAwNZZXN5ZXMgEFNh\ndmUgb2JqZWN0cyBub3cAAk5vAG5vICATRG8gbm90IHNhdmUgb2JqZWN0cwNBc2thc2sg\nHEFzayB0aGUgdXNlciB3aGV0aGVyIHRvIHNhdmUAcG9zaQAFBkJlZm9yZQBiZWZvF0Jl\nZm9yZSBzcGVjaWZpZWQgb2JqZWN0BUFmdGVyYWZ0ZRZBZnRlciBzcGVjaWZpZWQgb2Jq\nZWN0AAlCZWdpbm5pbmdiZ25nK0F0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmll\nZCBjb250YWluZXIDRW5kZW5kICVBdCB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQgY29u\ndGFpbmVyB1JlcGxhY2VycGxjHlJlcGxhY2luZyB0aGUgc3BlY2lmaWVkIG9iamVjdABr\nZnJtAAMFaW5kZXhpbmR4ImtleWZvcm0gZGVzaWduYXRpbmcgaW5kZXhlZCBhY2Nlc3MA\nBW5hbWVkbmFtZSBrZXlmb3JtIGRlc2lnbmF0aW5nIG5hbWVkIGFjY2VzcwACSUQAaWQg\nICRrZXlmb3JtIGRlc2lnbmF0aW5nIGlkZW50aWZlciBhY2Nlc3MAc3R5bAAPBVBsYWlu\ncGxhbgVQbGFpbgRCb2xkAGJvbGQEQm9sZAAGSXRhbGljAGl0YWwGSXRhbGljAAdPdXRs\naW5lb3V0bAdPdXRsaW5lBlNoYWRvdwBzaGFkBlNoYWRvdwAJVW5kZXJsaW5ldW5kbAlV\nbmRlcmxpbmULU3VwZXJzY3JpcHRzcHNjC1N1cGVyc2NyaXB0CVN1YnNjcmlwdHNic2MJ\nU3Vic2NyaXB0DVN0cmlrZXRocm91Z2hzdHJrDVN0cmlrZXRocm91Z2gKU21hbGwgQ2Fw\ncwBzbWNwClNtYWxsIENhcHMACUFsbCBDYXBzIGFsY3AJQWxsIENhcHMgCUxvd2VyY2Fz\nZWxvd2MJTG93ZXJjYXNlCUNvbmRlbnNlZGNvbmQJQ29uZGVuc2VkCEV4cGFuZGVkAHBl\neHAIRXhwYW5kZWQABkhpZGRlbgBoaWRuBkhpZGRlbgAKVGV4dCBTdWl0ZSpBIHNldCBv\nZiBiYXNpYyBjbGFzc2VzIGZvciB0ZXh0IHByb2Nlc3NpbmdURVhUAAEAAQAAAAYJQ2hh\ncmFjdGVyY2hhIAtBIGNoYXJhY3RlcgAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0\nIGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9y\nY29scmNSR0IJVGhlIGNvbG9yEAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZh\ndWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9udGN0eHQUVGhlIG5hbWUgb2YgdGhl\nIGZvbnQAEAAEU2l6ZQBwdHN6Zml4ZBJUaGUgc2l6ZSBpbiBwb2ludHMAEAAMV3JpdGlu\nZyBDb2RlAHBzY3RpbnRsHlRoZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVT\ndHlsZXR4c3R0c3R5DlRoZSB0ZXh0IHN0eWxlABAADlVuaWZvcm0gU3R5bGVzAHVzdGx0\nc3R5DlRoZSB0ZXh0IHN0eWxlAAAAAAVjaGEgAAFpbmR4Y2xpbgABaW5keGNwYXIAAWlu\nZHhjdHh0AAFpbmR4Y3dvcgABaW5keARMaW5lAGNsaW4OQSBsaW5lIG9mIHRleHQAAAoJ\nQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNz\ncGNsc3R5cGUJVGhlIGNsYXNzAAAFQ29sb3Jjb2xyY1JHQiBUaGUgY29sb3Igb2YgdGhl\nIGZpcnN0IGNoYXJhY3RlcgAQAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1\nbHQgZGVzY3JpcHRvciB0eXBlAAAERm9udABmb250Y3R4dCtUaGUgbmFtZSBvZiB0aGUg\nZm9udCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAANSnVzdGlmaWNhdGlvbnBqc3RqdXN0\nGUp1c3RpZmljYXRpb24gb2YgdGhlIHRleHQwAARTaXplAHB0c3pmaXhkKVRoZSBzaXpl\nIGluIHBvaW50cyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAAMV3JpdGluZyBDb2RlAHBz\nY3RpbnRsNVRoZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZSBvZiB0aGUgZmlyc3Qg\nY2hhcmFjdGVyAAAFU3R5bGV0eHN0dHN0eSVUaGUgdGV4dCBzdHlsZSBvZiB0aGUgZmly\nc3QgY2hhcmFjdGVyEAAOVW5pZm9ybSBTdHlsZXMAdXN0bHRzdHk0VGhlIHRleHQgc3R5\nbGVzIHRoYXQgYXJlIHVuaWZvcm0gdGhyb3VnaG91dCB0aGUgbGluZQAAAAAFY2hhIAAB\naW5keGNsaW4AAWluZHhjcGFyAAFpbmR4Y3R4dAABaW5keGN3b3IAAWluZHgJUGFyYWdy\nYXBoY3BhcgtBIHBhcmFncmFwaAAKCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRl\nc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9yY29s\ncmNSR0IgVGhlIGNvbG9yIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIAEAAMRGVmYXVsdCBU\neXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9u\ndGN0eHQrVGhlIG5hbWUgb2YgdGhlIGZvbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlchAA\nDUp1c3RpZmljYXRpb25wanN0anVzdBlKdXN0aWZpY2F0aW9uIG9mIHRoZSB0ZXh0MAAE\nU2l6ZQBwdHN6Zml4ZClUaGUgc2l6ZSBpbiBwb2ludHMgb2YgdGhlIGZpcnN0IGNoYXJh\nY3RlchAADFdyaXRpbmcgQ29kZQBwc2N0aW50bB5UaGUgc2NyaXB0IHN5c3RlbSBhbmQg\nbGFuZ3VhZ2UAAAAFU3R5bGV0eHN0dHN0eSVUaGUgdGV4dCBzdHlsZSBvZiB0aGUgZmly\nc3QgY2hhcmFjdGVyEAAOVW5pZm9ybSBTdHlsZXMAdXN0bHRzdHk5VGhlIHRleHQgc3R5\nbGVzIHRoYXQgYXJlIHVuaWZvcm0gdGhyb3VnaG91dCB0aGUgcGFyYWdyYXBoAAAABWNo\nYSAAAWluZHhjbGluAAFpbmR4Y3BhcgABaW5keGN0eHQAAWluZHhjd29yAAFpbmR4BFRl\neHQAY3R4dARUZXh0AAAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0\nb3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9yY29scmNSR0Ig\nVGhlIGNvbG9yIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIAEAAMRGVmYXVsdCBUeXBlAGRl\nZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9udGN0eHQr\nVGhlIG5hbWUgb2YgdGhlIGZvbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlchAABFNpemUA\ncHRzemZpeGQpVGhlIHNpemUgaW4gcG9pbnRzIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIQ\nAAxXcml0aW5nIENvZGUAcHNjdGludGweVGhlIHNjcmlwdCBzeXN0ZW0gYW5kIGxhbmd1\nYWdlAAAABVN0eWxldHhzdHRzdHk8VGhlIHRleHQgc3R5bGUgb2YgdGhlIGZpcnN0IGNo\nYXJhY3RlciBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyABAADlVuaWZvcm0gU3R5bGVzAHVz\ndGx0c3R5NFRoZSB0ZXh0IHN0eWxlcyB0aGF0IGFyZSB1bmlmb3JtIHRocm91Z2hvdXQg\ndGhlIHRleHQAEAAABWNoYSAAAWluZHhjbGluAAFpbmR4Y3BhcgABaW5keGN0eHQAAWlu\nZHhjd29yAAFpbmR4CVRleHQgRmxvd2NmbG8aQSBjb250aWd1b3VzIGJsb2NrIG9mIHRl\neHQAAAsJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAA\nBUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAFQ29sb3Jjb2xyY1JHQiBUaGUgY29sb3Ig\nb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgAQAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhl\nIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAAERm9udABmb250Y3R4dCtUaGUgbmFtZSBv\nZiB0aGUgZm9udCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAANSnVzdGlmaWNhdGlvbnBq\nc3RqdXN0GUp1c3RpZmljYXRpb24gb2YgdGhlIHRleHQwAARTaXplAHB0c3pmaXhkKVRo\nZSBzaXplIGluIHBvaW50cyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAAETmFtZQBwbmFt\naXR4dAhUaGUgbmFtZQAQAAxXcml0aW5nIENvZGUAcHNjdGludGweVGhlIHNjcmlwdCBz\neXN0ZW0gYW5kIGxhbmd1YWdlAAAABVN0eWxldHhzdHRzdHklVGhlIHRleHQgc3R5bGUg\nb2YgdGhlIGZpcnN0IGNoYXJhY3RlchAADlVuaWZvcm0gU3R5bGVzAHVzdGx0c3R5NFRo\nZSB0ZXh0IHN0eWxlcyB0aGF0IGFyZSB1bmlmb3JtIHRocm91Z2hvdXQgdGhlIHRleHQA\nAAAABWNoYSAAAWluZHhjbGluAAFpbmR4Y3BhcgABaW5keGN0eHQAAWluZHhjd29yAAFp\nbmR4BFdvcmQAY3dvcgZBIHdvcmQAAAkJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3Qg\nZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAFQ29sb3Jj\nb2xyY1JHQiBUaGUgY29sb3Igb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgAQAAxEZWZhdWx0\nIFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAAERm9udABm\nb250Y3R4dCtUaGUgbmFtZSBvZiB0aGUgZm9udCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVy\nEAAEU2l6ZQBwdHN6Zml4ZClUaGUgc2l6ZSBpbiBwb2ludHMgb2YgdGhlIGZpcnN0IGNo\nYXJhY3RlchAADFdyaXRpbmcgQ29kZQBwc2N0aW50bB5UaGUgc2NyaXB0IHN5c3RlbSBh\nbmQgbGFuZ3VhZ2UAAAAFU3R5bGV0eHN0dHN0eSVUaGUgdGV4dCBzdHlsZSBvZiB0aGUg\nZmlyc3QgY2hhcmFjdGVyEAAOVW5pZm9ybSBTdHlsZXMAdXN0bHRzdHk0VGhlIHRleHQg\nc3R5bGVzIHRoYXQgYXJlIHVuaWZvcm0gdGhyb3VnaG91dCB0aGUgd29yZAAQAAAFY2hh\nIAABaW5keGNsaW4AAWluZHhjcGFyAAFpbmR4Y3R4dAABaW5keGN3b3IAAWluZHgAAgI9\nPQBjc2VxFENhc2Utc2Vuc2l0aXZlIG1hdGNoAAMvPS93d2VxNENoYXJhY3RlcnMgbWF0\nY2ggYW5kIG9wZXJhbmRzIGVuZCBvbiB3b3JkIGJvdW5kYXJpZXMAAAFqdXN0AAQETGVm\ndABsZWZ0FkFsaWduIHdpdGggbGVmdCBtYXJnaW4ABVJpZ2h0cmdodBdBbGlnbiB3aXRo\nIHJpZ2h0IG1hcmdpbgZDZW50ZXIAY2VudBFBbGlnbiB3aXRoIGNlbnRlcgRGdWxsAGZ1\nbGwmQWxpZ24gd2l0aCBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMAGFF1aWNrRHJh\ndyBHcmFwaGljcyBTdWl0ZSNBIHNldCBvZiBiYXNpYyBjbGFzc2VzIGZvciBncmFwaGlj\ncwBxZHJ3AAEAAQAAAA0DQXJjY2FyYwZBbiBhcmMAAA0JQXJjIGFuZ2xlcGFyY2ZpeGQb\nQW5nbGUgb2YgdGhlIGFyYyBpbiBkZWdyZWVzEAAJQmVzdCBUeXBlcGJzdHR5cGUYVGhl\nIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABkJvdW5kcwBwYm5kcWRydDNUaGUgc21hbGxl\nc3QgcmVjdGFuZ2xlIHRoYXQgY29udGFpbnMgdGhlIGVudGlyZSBhcmMQAAVDbGFzc3Bj\nbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVs\ndCBkZXNjcmlwdG9yIHR5cGUAAA9EZWZpbml0aW9uIFJlY3RwZHJ0cWRydEVUaGUgcmVj\ndGFuZ2xlIHRoYXQgY29udGFpbnMgdGhlIGNpcmNsZSBvciBvdmFsIHVzZWQgdG8gZGVm\naW5lIHRoZSBhcmMQAApGaWxsIENvbG9yAGZsY2xjUkdCDlRoZSBmaWxsIGNvbG9yABAA\nDEZpbGwgUGF0dGVybgBmbHB0Y3BpeBBUaGUgZmlsbCBwYXR0ZXJuABAACVBlbiBDb2xv\ncnBwY2xjUkdCDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFjcGl4D1RoZSBw\nZW4gcGF0dGVybhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lkdGgQAAtTdGFy\ndCBhbmdsZXBhbmdmaXhkN1RoZSBhbmdsZSB0aGF0IGRlZmluZXMgdGhlIHN0YXJ0IG9m\nIHRoZSBhcmMsIGluIGRlZ3JlZXMQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRy\nYW5zZmVyIG1vZGUwAAAADERyYXdpbmcgQXJlYQBjZHJ3MUNvbnRhaW5lciBmb3IgZ3Jh\ncGhpY3MgYW5kIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24AFxBCYWNrZ3JvdW5kIENvbG9y\nAHBiY2xjUkdCKlRoZSBjb2xvciB1c2VkIHRvIGZpbGwgaW4gdW5vY2N1cGllZCBhcmVh\ncwAQABJCYWNrZ3JvdW5kIFBhdHRlcm4AcGJwdGNwaXgsVGhlIHBhdHRlcm4gdXNlZCB0\nbyBmaWxsIGluIHVub2NjdXBpZWQgYXJlYXMAEAAJQmVzdCBUeXBlcGJzdHR5cGUYVGhl\nIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABkJvdW5kcwBwYm5kcWRydCxUaGUgcmVjdGFu\nZ2xlIHRoYXQgY29udGFpbnMgdGhlIGRyYXdpbmcgYXJlYQAQAAVDbGFzc3BjbHN0eXBl\nCVRoZSBjbGFzcwAAC0NvbG9yIFRhYmxlY2x0YmNscnQPVGhlIGNvbG9yIHRhYmxlEAAM\nRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAA\nCkZpbGwgQ29sb3IAZmxjbGNSR0IvVGhlIGRlZmF1bHQgZmlsbCBjb2xvciB1c2VkIGZv\nciBncmFwaGljIG9iamVjdHMQAAxGaWxsIFBhdHRlcm4AZmxwdGNwaXgxVGhlIGRlZmF1\nbHQgZmlsbCBwYXR0ZXJuIHVzZWQgZm9yIGdyYXBoaWMgb2JqZWN0cxAACE9yZGVyaW5n\nAGdvYnNvYmogN1RoZSBvcmRlcmVkIGxpc3Qgb2YgZ3JhcGhpYyBvYmplY3RzIGluIHRo\nZSBkcmF3aW5nIGFyZWFQAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lABAAEERlZmF1bHQg\nTG9jYXRpb24AcG5lbFFEcHQvVGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgZWFjaCBuZXcg\nZ3JhcGhpYyBvYmplY3QQAAlQZW4gQ29sb3JwcGNsY1JHQg1UaGUgcGVuIGNvbG9yEAAL\nUGVuIFBhdHRlcm5wcHBhY3BpeA9UaGUgcGVuIHBhdHRlcm4QAAlQZW4gV2lkdGhwcHdk\nc2hvcg1UaGUgcGVuIHdpZHRoEAALUGl4ZWwgRGVwdGhwZHB0c2hvcg5CaXRzIHBlciBw\naXhlbAAQAAxXcml0aW5nIENvZGUAcHNjdGludGxCVGhlIHNjcmlwdCBzeXN0ZW0gYW5k\nIGxhbmd1YWdlIG9mIHRleHQgb2JqZWN0cyBpbiB0aGUgZHJhd2luZyBhcmVhAAAAClRl\neHQgQ29sb3IAcHR4Y2NSR0IiVGhlIGRlZmF1bHQgY29sb3IgZm9yIHRleHQgb2JqZWN0\ncwAQAARGb250AHB0eGZpdHh0LVRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGZvbnQgZm9y\nIHRleHQgb2JqZWN0cxAABFNpemUAcHRwc2ZpeGQnVGhlIGRlZmF1bHQgcG9pbnQgc2l6\nZSBmb3IgdGV4dCBvYmplY3RzEAAFU3R5bGV0eHN0dHN0eSdUaGUgZGVmYXVsdCB0ZXh0\nIHN0eWxlIGZvciB0ZXh0IG9iamVjdHMQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4tVGhl\nIGRlZmF1bHQgdHJhbnNmZXIgbW9kZSBmb3IgZ3JhcGhpYyBvYmplY3RzMAAQVXBkYXRl\nIE9uIENoYW5nZQBwdXBkYm9vbBlSZWRyYXcgYWZ0ZXIgZWFjaCBjaGFuZ2U/EAAACmNh\ncmMAAmluZHhuYW1lZ2xpbgACaW5keG5hbWVjZ3R4AAJpbmR4bmFtZWNwaWMAAmluZHhu\nYW1lY292bAACaW5keG5hbWVjcGl4AAJpbmR4bmFtZWNwZ24AAmluZHhuYW1lY3JlYwAC\naW5keG5hbWVjcnJjAAJpbmR4bmFtZWNnb2IAAmluZHhuYW1lDEdyYXBoaWMgTGluZQBn\nbGluDkEgZ3JhcGhpYyBsaW5lAAAMCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRl\nc2NyaXB0b3IgdHlwZQAAAAZCb3VuZHMAcGJuZHFkcnQ+VGhlIHNtYWxsZXN0IHJlY3Rh\nbmdsZSB0aGF0IGNvbnRhaW5zIHRoZSBlbnRpcmUgZ3JhcGhpYyBvYmplY3QAEAAFQ2xh\nc3NwY2xzdHlwZQlUaGUgY2xhc3MAAApEYXNoIFN0eWxlAHBkc3R0ZGFzDlRoZSBkYXNo\nIHN0eWxlAFAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAlFbmQgUG9pbnRwZW5kUURwdBxUaGUgZW5kaW5nIHBvaW50IG9mIHRo\nZSBsaW5lABAAC0Fycm93IFN0eWxlYXJyb2Fycm8PVGhlIGFycm93IHN0eWxlMAAJUGVu\nIENvbG9ycHBjbGNSR0INVGhlIHBlbiBjb2xvchAAC1BlbiBQYXR0ZXJucHBwYWNwaXgP\nVGhlIHBlbiBwYXR0ZXJuEAAJUGVuIFdpZHRocHB3ZHNob3INVGhlIHBlbiB3aWR0aBAA\nC1N0YXJ0IFBvaW50cHN0cFFEcHQeVGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBsaW5l\nABAADVRyYW5zZmVyIE1vZGVwcHRtdHJhbhFUaGUgdHJhbnNmZXIgbW9kZTAAAAAOR3Jh\ncGhpYyBPYmplY3QAY2dvYhBBIGdyYXBoaWMgb2JqZWN0AAAFCUJlc3QgVHlwZXBic3R0\neXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAZCb3VuZHMAcGJuZHFkcnQ+VGhl\nIHNtYWxsZXN0IHJlY3RhbmdsZSB0aGF0IGNvbnRhaW5zIHRoZSBlbnRpcmUgZ3JhcGhp\nYyBvYmplY3QAEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MAAAxEZWZhdWx0IFR5cGUA\nZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAANVHJhbnNmZXIgTW9k\nZXBwdG10cmFuEVRoZSB0cmFuc2ZlciBtb2RlMAAAAA1HcmFwaGljIFNoYXBlY2dzaA9B\nIGdyYXBoaWMgc2hhcGUACwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlw\ndG9yIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0NVRoZSBzbWFsbGVzdCByZWN0YW5nbGUg\ndGhhdCBjb250YWlucyB0aGUgZW50aXJlIHNoYXBlEAAFQ2xhc3NwY2xzdHlwZQlUaGUg\nY2xhc3MAAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRv\nciB0eXBlAAAPRGVmaW5pdGlvbiBSZWN0cGRydHFkcnQmVGhlIHJlY3RhbmdsZSB1c2Vk\nIHRvIGRlZmluZSB0aGUgc2hhcGUAEAAKRmlsbCBDb2xvcgBmbGNsY1JHQg5UaGUgZmls\nbCBjb2xvcgAQAAxGaWxsIFBhdHRlcm4AZmxwdGNwaXgQVGhlIGZpbGwgcGF0dGVybgAQ\nAAlQZW4gQ29sb3JwcGNsY1JHQg1UaGUgcGVuIGNvbG9yEAALUGVuIFBhdHRlcm5wcHBh\nY3BpeA9UaGUgcGVuIHBhdHRlcm4QAAlQZW4gV2lkdGhwcHdkc2hvcg1UaGUgcGVuIHdp\nZHRoEAANVHJhbnNmZXIgTW9kZXBwdG10cmFuEVRoZSB0cmFuc2ZlciBtb2RlMAAAAAxH\ncmFwaGljIFRleHQAY2d0eCxBIHNlcmllcyBvZiBjaGFyYWN0ZXJzIHdpdGhpbiBhIGRy\nYXdpbmcgYXJlYQAACwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9y\nIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0NFRoZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhh\ndCBjb250YWlucyB0aGUgZW50aXJlIHRleHQAEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xh\nc3MAAAVDb2xvcmNvbHJjUkdCIFRoZSBjb2xvciBvZiB0aGUgZmlyc3QgY2hhcmFjdGVy\nABAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5\ncGUAAARGb250AGZvbnRjdHh0K1RoZSBuYW1lIG9mIHRoZSBmb250IG9mIHRoZSBmaXJz\ndCBjaGFyYWN0ZXIQAARTaXplAHB0c3pmaXhkKVRoZSBzaXplIGluIHBvaW50cyBvZiB0\naGUgZmlyc3QgY2hhcmFjdGVyEAAMV3JpdGluZyBDb2RlAHBzY3RpbnRsHlRoZSBzY3Jp\ncHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVTdHlsZXR4c3R0c3R5JVRoZSB0ZXh0IHN0\neWxlIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4R\nVGhlIHRyYW5zZmVyIG1vZGUwAA5Vbmlmb3JtIFN0eWxlcwB1c3RsdHN0eTRUaGUgdGV4\ndCBzdHlsZXMgdGhhdCBhcmUgdW5pZm9ybSB0aHJvdWdob3V0IHRoZSB0ZXh0ABAAAAJj\naGEgAAFpbmR4Y3R4dAABaW5keA9Hcm91cGVkIEdyYXBoaWNjcGljEUdyb3VwIG9mIGdy\nYXBoaWNzAAcJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBl\nAAAABkJvdW5kcwBwYm5kcWRydD5UaGUgc21hbGxlc3QgcmVjdGFuZ2xlIHRoYXQgY29u\ndGFpbnMgdGhlIGVudGlyZSBncmFwaGljIG9iamVjdAAQAAVDbGFzc3BjbHN0eXBlCVRo\nZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAhPcmRlcmluZwBnb2Jzb2JqIDdUaGUgb3JkZXJlZCBsaXN0IG9mIGdy\nYXBoaWMgb2JqZWN0cyBpbiB0aGUgZHJhd2luZyBhcmVhUAAETmFtZQBwbmFtaXR4dAhU\naGUgbmFtZQAQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRyYW5zZmVyIG1vZGUw\nAAAKY2FyYwACaW5keG5hbWVnbGluAAJpbmR4bmFtZWNndHgAAmluZHhuYW1lY3BpYwAC\naW5keG5hbWVjb3ZsAAJpbmR4bmFtZWNwaXgAAmluZHhuYW1lY3BnbgACaW5keG5hbWVj\ncmVjAAJpbmR4bmFtZWNycmMAAmluZHhuYW1lY2dvYgACaW5keG5hbWUET3ZhbABjb3Zs\nB0FuIG92YWwACwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5\ncGUAAAAGQm91bmRzAHBibmRxZHJ0NFRoZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhhdCBj\nb250YWlucyB0aGUgZW50aXJlIG92YWwAEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MA\nAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBl\nAAAPRGVmaW5pdGlvbiBSZWN0cGRydHFkcnQlVGhlIHJlY3RhbmdsZSB1c2VkIHRvIGRl\nZmluZSB0aGUgb3ZhbBAACkZpbGwgQ29sb3IAZmxjbGNSR0IOVGhlIGZpbGwgY29sb3IA\nEAAMRmlsbCBQYXR0ZXJuAGZscHRjcGl4EFRoZSBmaWxsIHBhdHRlcm4AEAAJUGVuIENv\nbG9ycHBjbGNSR0INVGhlIHBlbiBjb2xvchAAC1BlbiBQYXR0ZXJucHBwYWNwaXgPVGhl\nIHBlbiBwYXR0ZXJuEAAJUGVuIFdpZHRocHB3ZHNob3INVGhlIHBlbiB3aWR0aBAADVRy\nYW5zZmVyIE1vZGVwcHRtdHJhbhFUaGUgdHJhbnNmZXIgbW9kZTAAAAAFUGl4ZWxjcHhs\nB0EgcGl4ZWwABAlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5\ncGUAAAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MAAAVDb2xvcmNvbHJjUkdCCVRoZSBj\nb2xvchAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9y\nIHR5cGUAAAAACVBpeGVsIE1hcGNwaXgLQSBwaXhlbCBtYXAABQlCZXN0IFR5cGVwYnN0\ndHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0MlRo\nZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhhdCBjb250YWlucyB0aGUgcGl4ZWwgbWFwABAA\nBUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1Ro\nZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAADVRyYW5zZmVyIE1vZGVwcHRtdHJhbhFU\naGUgdHJhbnNmZXIgbW9kZTAAAAFjcHhsAAFpbmR4B1BvbHlnb25jcGduCUEgcG9seWdv\nbgALCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAZC\nb3VuZHMAcGJuZHFkcnQ3VGhlIHNtYWxsZXN0IHJlY3RhbmdsZSB0aGF0IGNvbnRhaW5z\nIHRoZSBlbnRpcmUgcG9seWdvbhAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAPRGVm\naW5pdGlvbiBSZWN0cGRydHFkcnQoVGhlIHJlY3RhbmdsZSB1c2VkIHRvIGRlZmluZSB0\naGUgcG9seWdvbgAQAApGaWxsIENvbG9yAGZsY2xjUkdCDlRoZSBmaWxsIGNvbG9yABAA\nDEZpbGwgUGF0dGVybgBmbHB0Y3BpeBBUaGUgZmlsbCBwYXR0ZXJuABAACVBlbiBDb2xv\ncnBwY2xjUkdCDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFjcGl4D1RoZSBw\nZW4gcGF0dGVybhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lkdGgQAApQb2lu\ndCBMaXN0AHB0bHRRRHB0KlRoZSBsaXN0IG9mIHBvaW50cyB0aGF0IGRlZmluZSB0aGUg\ncG9seWdvbgBQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRyYW5zZmVyIG1vZGUw\nAAAACVJlY3RhbmdsZWNyZWMLQSByZWN0YW5nbGUACwlCZXN0IFR5cGVwYnN0dHlwZRhU\naGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0DVRoZSByZWN0\nYW5nbGUQAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0\ndHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAA9EZWZpbml0aW9uIFJlY3Rw\nZHJ0cWRydD9UaGUgdXBwZXItbGVmdCBhbmQgbG93ZXItcmlnaHQgcG9pbnRzIHRoYXQg\nZGVmaW5lIHRoZSByZWN0YW5nbGUQAApGaWxsIENvbG9yAGZsY2xjUkdCDlRoZSBmaWxs\nIGNvbG9yABAADEZpbGwgUGF0dGVybgBmbHB0Y3BpeBBUaGUgZmlsbCBwYXR0ZXJuABAA\nCVBlbiBDb2xvcnBwY2xjUkdCDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFj\ncGl4D1RoZSBwZW4gcGF0dGVybhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lk\ndGgQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRyYW5zZmVyIG1vZGUwAAAAEVJv\ndW5kZWQgUmVjdGFuZ2xlY3JyYxNBIHJvdW5kZWQgcmVjdGFuZ2xlAA0JQmVzdCBUeXBl\ncGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABkJvdW5kcwBwYm5kcWRy\ndA1UaGUgcmVjdGFuZ2xlEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MAABNDb3JuZXIg\nQ3VydmUgSGVpZ2h0cGNoZHNob3JGVGhlIGhlaWdodCBvZiB0aGUgb3ZhbCB1c2VkIHRv\nIGRlZmluZSB0aGUgc2hhcGUgb2YgdGhlIHJvdW5kZWQgY29ybmVycwAQABJDb3JuZXIg\nQ3VydmUgV2lkdGgAcGN3ZHNob3JFVGhlIHdpZHRoIG9mIHRoZSBvdmFsIHVzZWQgdG8g\nZGVmaW5lIHRoZSBzaGFwZSBvZiB0aGUgcm91bmRlZCBjb3JuZXJzEAAMRGVmYXVsdCBU\neXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAAD0RlZmluaXRp\nb24gUmVjdHBkcnRxZHJ0P1RoZSB1cHBlci1sZWZ0IGFuZCBsb3dlci1yaWdodCBwb2lu\ndHMgdGhhdCBkZWZpbmUgdGhlIHJlY3RhbmdsZRAACkZpbGwgQ29sb3IAZmxjbGNSR0IO\nVGhlIGZpbGwgY29sb3IAEAAMRmlsbCBQYXR0ZXJuAGZscHRjcGl4EFRoZSBmaWxsIHBh\ndHRlcm4AEAAJUGVuIENvbG9ycHBjbGNSR0INVGhlIHBlbiBjb2xvchAAC1BlbiBQYXR0\nZXJucHBwYWNwaXgPVGhlIHBlbiBwYXR0ZXJuEAAJUGVuIFdpZHRocHB3ZHNob3INVGhl\nIHBlbiB3aWR0aBAADVRyYW5zZmVyIE1vZGVwcHRtdHJhbhFUaGUgdHJhbnNmZXIgbW9k\nZTAAAAAAAAACdHJhbgAPBENvcHkAY3B5IAAAB05vdENvcHluY3B5AAACT3IAb3IgIAAA\nBU5vdE9ybnRvcgAAA0JpY2JpYyAAAAZOb3RCaWMAbmJpYwAAA1hvcnhvciAAAAZOb3RY\nb3IAbnhvcgAAB0FkZE92ZXJhZGRvAAAGQWRkUGluAGFkZHAAAAdTdWJPdmVyc3VibwAA\nBlN1YlBpbgBzdWJwAAAFQWRNYXhhZG14AAAFQWRNaW5hZG1uAAAFQmxlbmRibG5kAABh\ncnJvAAQITm8gQXJyb3cAYXJubxBObyBhcnJvdyBvbiBsaW5lAA5BcnJvdyBhdCBTdGFy\ndABhcnN0FkFycm93IGF0IHN0YXJ0IG9mIGxpbmUADEFycm93IGF0IEVuZABhcmVuFEFy\ncm93IGF0IGVuZCBvZiBsaW5lABJBcnJvdyBhdCBCb3RoIEVuZHMAYXJiby9BcnJvdyBh\ndCBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiB0aGUgbGluZSVRdWlja0RyYXcg\nR3JhcGhpY3MgU3VwcGxlbWVudGFsIFN1aXRlKkRlZmluZXMgdHJhbnNmb3JtYXRpb25z\nIG9mIGdyYXBoaWMgb2JqZWN0cwBxZHNwAAEAAQAAAAIMRHJhd2luZyBBcmVhAGNkcncx\nQ29udGFpbmVyIGZvciBncmFwaGljcyBhbmQgc3VwcG9ydGluZyBpbmZvcm1hdGlvbgAa\nEEJhY2tncm91bmQgQ29sb3IAcGJjbGNSR0IqVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBp\nbiB1bm9jY3VwaWVkIGFyZWFzABAAEkJhY2tncm91bmQgUGF0dGVybgBwYnB0Y3BpeCxU\naGUgcGF0dGVybiB1c2VkIHRvIGZpbGwgaW4gdW5vY2N1cGllZCBhcmVhcwAQAAlCZXN0\nIFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAGQm91bmRzAHBi\nbmRxZHJ0LFRoZSByZWN0YW5nbGUgdGhhdCBjb250YWlucyB0aGUgZHJhd2luZyBhcmVh\nABAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAALQ29sb3IgVGFibGVjbHRiY2xydA9U\naGUgY29sb3IgdGFibGUQAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQg\nZGVzY3JpcHRvciB0eXBlAAAKRmlsbCBDb2xvcgBmbGNsY1JHQi9UaGUgZGVmYXVsdCBm\naWxsIGNvbG9yIHVzZWQgZm9yIGdyYXBoaWMgb2JqZWN0cxAADEZpbGwgUGF0dGVybgBm\nbHB0Y3BpeDFUaGUgZGVmYXVsdCBmaWxsIHBhdHRlcm4gdXNlZCBmb3IgZ3JhcGhpYyBv\nYmplY3RzEAAIT3JkZXJpbmcAZ29ic29iaiA3VGhlIG9yZGVyZWQgbGlzdCBvZiBncmFw\naGljIG9iamVjdHMgaW4gdGhlIGRyYXdpbmcgYXJlYVAABE5hbWUAcG5hbWl0eHQIVGhl\nIG5hbWUAEAAQRGVmYXVsdCBMb2NhdGlvbgBwbmVsUURwdC9UaGUgZGVmYXVsdCBsb2Nh\ndGlvbiBvZiBlYWNoIG5ldyBncmFwaGljIG9iamVjdBAACVBlbiBDb2xvcnBwY2xjUkdC\nDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFjcGl4D1RoZSBwZW4gcGF0dGVy\nbhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lkdGgQAAtQaXhlbCBEZXB0aHBk\ncHRzaG9yDkJpdHMgcGVyIHBpeGVsABAACFJvdGF0aW9uAHByb3R0cm90NFRoZSBkZWZh\ndWx0IHJvdGF0aW9uIGZvciBvYmplY3RzIGluIHRoZSBkcmF3aW5nIGFyZWEAEAAFU2Nh\nbGVwc2NsZml4ZDNUaGUgZGVmYXVsdCBzY2FsaW5nIGZvciBvYmplY3RzIGluIHRoZSBk\ncmF3aW5nIGFyZWEQAAxXcml0aW5nIENvZGUAcHNjdGludGxCVGhlIHNjcmlwdCBzeXN0\nZW0gYW5kIGxhbmd1YWdlIG9mIHRleHQgb2JqZWN0cyBpbiB0aGUgZHJhd2luZyBhcmVh\nAAAAClRleHQgQ29sb3IAcHR4Y2NSR0IiVGhlIGRlZmF1bHQgY29sb3IgZm9yIHRleHQg\nb2JqZWN0cwAQAARGb250AHB0eGZpdHh0LVRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGZv\nbnQgZm9yIHRleHQgb2JqZWN0cxAABFNpemUAcHRwc2ZpeGQnVGhlIGRlZmF1bHQgcG9p\nbnQgc2l6ZSBmb3IgdGV4dCBvYmplY3RzEAAFU3R5bGV0eHN0dHN0eSdUaGUgZGVmYXVs\ndCB0ZXh0IHN0eWxlIGZvciB0ZXh0IG9iamVjdHMQAA1UcmFuc2ZlciBNb2RlcHB0bXRy\nYW4tVGhlIGRlZmF1bHQgdHJhbnNmZXIgbW9kZSBmb3IgZ3JhcGhpYyBvYmplY3RzMAAL\nVHJhbnNsYXRpb25wdHJzUURwdDlUaGUgZGVmYXVsdCByZXBvc2l0aW9uaW5nIGZvciBv\nYmplY3RzIGluIHRoZSBkcmF3aW5nIGFyZWEQABBVcGRhdGUgT24gQ2hhbmdlAHB1cGRi\nb29sGVJlZHJhdyBhZnRlciBlYWNoIGNoYW5nZT8QAAAKY2FyYwACaW5keG5hbWVnbGlu\nAAJpbmR4bmFtZWNndHgAAmluZHhuYW1lY3BpYwACaW5keG5hbWVjb3ZsAAJpbmR4bmFt\nZWNwaXgAAmluZHhuYW1lY3BnbgACaW5keG5hbWVjcmVjAAJpbmR4bmFtZWNycmMAAmlu\nZHhuYW1lY2dvYgACaW5keG5hbWUPR3JvdXBlZCBHcmFwaGljY3BpYxFHcm91cCBvZiBn\ncmFwaGljcwAKCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlw\nZQAAAAZCb3VuZHMAcGJuZHFkcnQ+VGhlIHNtYWxsZXN0IHJlY3RhbmdsZSB0aGF0IGNv\nbnRhaW5zIHRoZSBlbnRpcmUgZ3JhcGhpYyBvYmplY3QAEAAFQ2xhc3NwY2xzdHlwZQlU\naGUgY2xhc3MAAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3Jp\ncHRvciB0eXBlAAAIT3JkZXJpbmcAZ29ic29iaiA3VGhlIG9yZGVyZWQgbGlzdCBvZiBn\ncmFwaGljIG9iamVjdHMgaW4gdGhlIGRyYXdpbmcgYXJlYVAABE5hbWUAcG5hbWl0eHQI\nVGhlIG5hbWUAEAAIUm90YXRpb24AcHJvdHRyb3QMVGhlIHJvdGF0aW9uABAABVNjYWxl\ncHNjbGZpeGQLVGhlIHNjYWxpbmcQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRy\nYW5zZmVyIG1vZGUwAAtUcmFuc2xhdGlvbnB0cnNRRHB0D1RoZSB0cmFuc2xhdGlvbhAA\nAApjYXJjAAJpbmR4bmFtZWdsaW4AAmluZHhuYW1lY2d0eAACaW5keG5hbWVjcGljAAJp\nbmR4bmFtZWNvdmwAAmluZHhuYW1lY3BpeAACaW5keG5hbWVjcGduAAJpbmR4bmFtZWNy\nZWMAAmluZHhuYW1lY3JyYwACaW5keG5hbWVjZ29iAAJpbmR4bmFtZQAAAAALVGFibGUg\nU3VpdGUfQ2xhc3NlcyBmb3IgbWFuaXB1bGF0aW5nIHRhYmxlc3RibHMAAQABAAAABARD\nZWxsAGNjZWwGQSBjZWxsAAAFCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2Ny\naXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlw\nZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAAdGb3JtdWxhcGZv\ncmN0eHQXVGhlIGZvcm11bGEgb2YgdGhlIGNlbGwQAApQcm90ZWN0aW9uAHBwcm9wcnRu\nPUluZGljYXRlcyB3aGV0aGVyIHZhbHVlIG9yIGZvcm11bGEgaW4gdGhlIGNlbGwgY2Fu\nIGJlIGNoYW5nZWQwAAAABkNvbHVtbgBjY29sCEEgY29sdW1uAAAFCUJlc3QgVHlwZXBi\nc3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRo\nZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lABAAClByb3RlY3Rpb24AcHBy\nb3BydG5ISW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm11bGFzIG9mIHRoZSBjZWxscyBp\nbiB0aGUgY29sdW1uIGNhbiBiZSBjaGFuZ2VkADAAAAFjY2VsAAJpbmR4bmFtZQNSb3dj\ncm93BUEgcm93AAUJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0\neXBlAAAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0\neXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABE5hbWUAcG5hbWl0eHQIVGhl\nIG5hbWUAEAAKUHJvdGVjdGlvbgBwcHJvcHJ0bkVJbmRpY2F0ZXMgd2hldGhlciB0aGUg\nZm9ybXVsYXMgb2YgdGhlIGNlbGxzIGluIHRoZSByb3cgY2FuIGJlIGNoYW5nZWQwAAAB\nY2NlbAACaW5keG5hbWUFVGFibGVjdGJsB0EgdGFibGUABQlCZXN0IFR5cGVwYnN0dHlw\nZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xh\nc3MAAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0\neXBlAAAETmFtZQBwbmFtaXR4dAhUaGUgbmFtZQAQAApQcm90ZWN0aW9uAHBwcm9wcnRu\nR0luZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtdWxhcyBvZiB0aGUgY2VsbHMgaW4gdGhl\nIHRhYmxlIGNhbiBiZSBjaGFuZ2VkMAAAA2NjZWwAAmluZHhuYW1lY2NvbAACaW5keG5h\nbWVjcm93AAJpbmR4bmFtZQAAAAFwcnRuAAMJUmVhZCBPbmx5bm1vZB9DYW4ndCBjaGFu\nZ2UgdmFsdWVzIG9yIGZvcm11bGFzEkZvcm11bGFzIFByb3RlY3RlZABmcHJvI0NhbiBj\naGFuZ2VzIHZhbHVlcyBidXQgbm90IGZvcm11bGFzClJlYWQvV3JpdGUAbW9kZh5DYW4g\nY2hhbmdlIHZhbHVlcyBhbmQgZm9ybXVsYXMAHU1pc2NlbGxhbmVvdXMgU3RhbmRhcmRz\nIFN1aXRlKU1pc2NlbGxhbmVvdXMgc3RhbmRhcmQgZXZlbnRzIGFuZCBjbGFzc2VzbWlz\nYwABAAEADhFCZWdpbiBUcmFuc2FjdGlvbhNCZWdpbiBhIHRyYW5zYWN0aW9ubWlzY2Jl\nZ2lsb25nAAAAAG51bGwAAJAAAAAEQ29weR9Db3B5IGFuIG9iamVjdCB0byB0aGUgY2xp\ncGJvYXJkAG1pc2Njb3B5bnVsbAAAgABudWxsAACQAAAAEENyZWF0ZSBQdWJsaXNoZXIS\nQ3JlYXRlIGEgcHVibGlzaGVybWlzY2NwdWJudWxsAACAAG9iaiART2JqZWN0IHRvIHB1\nYmxpc2iQAAABB0VkaXRpb25lbG9jYWxpcyNBbGlhcyB0byB0aGUgZWRpdGlvbiBjb250\nYWluZXIgZmlsZYAAA0N1dB5DdXQgYW4gb2JqZWN0IHRvIHRoZSBjbGlwYm9hcmQAbWlz\nY2N1dCBudWxsAACAAG51bGwAAJAAAAAJRG8gU2NyaXB0EEV4ZWN1dGUgYSBzY3JpcHQA\nbWlzY2Rvc2MqKioqAACAAFRFWFQVVGhlIHNjcmlwdCB0byBleGVjdXRlEAAAAAxFZGl0\nIEdyYXBoaWMfRWRpdCB0aGUgc3BlY2lmaWVkIGRyYXdpbmcgYXJlYQBtaXNjZWRpdHRk\nYXIAAAAAdGRhch1UaGUgZHJhd2luZyBhcmVhIHRvIGJlIGVkaXRlZBAAAAAPRW5kIFRy\nYW5zYWN0aW9uEUVuZCBhIHRyYW5zYWN0aW9ubWlzY2VuZHRudWxsAACAAG51bGwAAJAA\nAAANSW1hZ2UgR3JhcGhpYyxDb252ZXJ0IGEgZ3JhcGhpYyBmcm9tIG9uZSBmb3JtYXQg\ndG8gYW5vdGhlcgBtaXNjaW1ncioqKioAAAAAKioqKihUaGUgZ3JhcGhpYyB0byBiZSBj\nb252ZXJ0ZWQgb3IgZm9ybWF0dGVkABAAAAoMQW50aWFsaWFzaW5nAGFudGFib29sEFVz\nZSBhbnRpYWxpYXNpbmcAgAAJRGl0aGVyaW5nZ2RpdGJvb2wNVXNlIGRpdGhlcmluZ4AA\nBlJvdGF0ZQBrZHJ0dHJvdBlUaGUgcm90YXRpb24gb2YgdGhlIGltYWdlgAAFU2NhbGVr\nc2NhZml4ZCZUaGUgZmFjdG9yIGJ5IHdoaWNoIHRvIHNjYWxlIHRoZSBpbWFnZQCAAAtU\ncmFuc2xhdGlvbmt0cmFRRHB0KU9mZnNldCBieSB3aGljaCB0aGUgaW1hZ2Ugc2hvdWxk\nIGJlIG1vdmVkgAAPRmxpcCBIb3Jpem9udGFsa2Zob2Jvb2wYRmxpcCBpbWFnZSBob3Jp\nem9udGFsbHk/AIAADUZsaXAgVmVydGljYWxrZnZ0Ym9vbBZGbGlwIGltYWdlIHZlcnRp\nY2FsbHk/AIAAB1F1YWxpdHlncXVhcXVhbBtJbWFnZSBxdWFsaXR5IG9mIHRoZSByZXN1\nbHSgAAZGb3JtYXQAa3JlbnR5cGUvVGhlIGZvcm1hdCBpbnRvIHdoaWNoIHRoZSBkYXRh\nIHNob3VsZCBiZSBpbWFnZWQAABJTdHJ1Y3R1cmVkIEdyYXBoaWMAdG9vZ2Jvb2w0UmV0\ndXJuIGEgc3RydWN0dXJlZCBncmFwaGljLCBpbnN0ZWFkIG9mIGEgcGl4ZWwgbWFwPwCA\nAAdVbmlmb3JtS0lzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IHRo\nZSBzYW1lIGZvciBhbGwgb2JqZWN0cyBpbiB0aGUgc2V0P21pc2Npc3VuYm9vbAAAAABv\nYmogL1RoZSBzZXQgb2Ygb2JqZWN0cyB0byBiZSBjaGVja2VkIGZvciB1bmlmb3JtaXR5\nAAAAAQJJbgBrcHJwdHlwZS5UaGUgcHJvcGVydHkgSUQgZm9yIHRoZSBwcm9wZXJ0eSB0\nbyBiZSBjaGVja2VkAAAABFNob3cZQnJpbmcgYW4gb2JqZWN0IGludG8gdmlldwBtaXNj\nbXZpc251bGwAAIAAb2JqIB1UaGUgb2JqZWN0IHRvIGJlIG1hZGUgdmlzaWJsZRAAAAIC\nSW4Ad25kd29iaiApVGhlIHdpbmRvdyBpbiB3aGljaCB0byBkaXNwbGF5IHRoZSBvYmpl\nY3SAAAJBdABzaG93UURwdChUaGUgcG9pbnQgYXQgd2hpY2ggdG8gZGlzcGxheSB0aGUg\nb2JqZWN0AIAABVBhc3RlIlBhc3RlIGFuIG9iamVjdCBmcm9tIHRoZSBjbGlwYm9hcmQA\nbWlzY3Bhc3RudWxsAACAAG51bGwAAJAAAAAEUmVkbzVSZXZlcnNlIHRoZSBhY3Rpb24g\nb2YgdGhlIGltbWVkaWF0ZWx5IHByZWNlZWRpbmcgdW5kbwBtaXNjcmVkb251bGwAAIAA\nbnVsbAAAkAAAAAZSZXZlcnQqUmVzdG9yZSB0aGUgb2JqZWN0IHRvIGl0cyBsYXN0IHNh\ndmVkIHN0YXRlbWlzY3J2cnRudWxsAACAAG9iaiAUVGhlIG9iamVjdCB0byByZXZlcnQA\nEAAAAARVbmRvOVVuZG8gdGhlIGFjdGlvbiBvZiB0aGUgcHJldmlvdXMgZXZlbnQgb3Ig\ndXNlciBpbnRlcmFjdGlvbgBtaXNjdW5kb251bGwAAIAAbnVsbAAAkAAAAAAEC0FwcGxp\nY2F0aW9uY2FwcBdBIE1hY2ludG9zaCBhcHBsaWNhdGlvbgAKCUJlc3QgVHlwZXBic3R0\neXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBj\nbGFzcwAACUNsaXBib2FyZHBjbGkqKioqDVRoZSBjbGlwYm9hcmRQAAxEZWZhdWx0IFR5\ncGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAASSW5zZXJ0aW9u\nIExvY2F0aW9uAHBpbnNpbnNsTVRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY29udGVudHMg\nb2YgdGhlIGNsaXBib2FyZCB3b3VsZCBiZSBpbnNlcnRlZCBieSBhIHBhc3RlAAAJRnJv\nbnRtb3N0cGlzZmJvb2wiSXMgdGhpcyB0aGUgZnJvbnRtb3N0IGFwcGxpY2F0aW9uPwAA\nAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lAAAAD0l0ZW0gRGVsaW1pdGVyc3R4ZGxpdHh0\nKlRoZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGRlbGltaXQgdGV4dCBpdGVtcwBAAA5Vc2Vy\nIFNlbGVjdGlvbgBwdXNsY3NlbC1UaGUgY3VycmVudCB1c2VyIHNlbGVjdGlvbiBvciBp\nbnNlcnRpb24gcG9pbnQAAAdWZXJzaW9udmVyc2xvbmclVGhlIHZlcnNpb24gbnVtYmVy\nIG9mIHRoZSBhcHBsaWNhdGlvbgAAAAJkb2N1AAJpbmR4bmFtZWN3aW4AAmluZHhuYW1l\nBEl0ZW0AY2l0bQtBIHRleHQgaXRlbQAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0\nIGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9y\nY29scmNSR0IgVGhlIGNvbG9yIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIAEAAMRGVmYXVs\ndCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQA\nZm9udGN0eHQrVGhlIG5hbWUgb2YgdGhlIGZvbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3Rl\nchAABFNpemUAcHRzemZpeGQpVGhlIHNpemUgaW4gcG9pbnRzIG9mIHRoZSBmaXJzdCBj\naGFyYWN0ZXIQAAxXcml0aW5nIENvZGUAcHNjdGludGweVGhlIHNjcmlwdCBzeXN0ZW0g\nYW5kIGxhbmd1YWdlAAAABVN0eWxldHhzdHRzdHklVGhlIHRleHQgc3R5bGUgb2YgdGhl\nIGZpcnN0IGNoYXJhY3RlchAADlVuaWZvcm0gU3R5bGVzAHVzdGx0c3R5NFRoZSB0ZXh0\nIHN0eWxlcyB0aGF0IGFyZSB1bmlmb3JtIHRocm91Z2hvdXQgdGhlIGl0ZW0AEAAAAmNo\nYSAAAWluZHhjdHh0AAFpbmR4BE1lbnUAY21udQZBIG1lbnUAAAUJQmVzdCBUeXBlcGJz\ndHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhl\nIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0\nb3IgdHlwZQAAB01lbnUgSURtbmlkc2hvchhUaGUgbWVudSBJRCBmb3IgdGhlIG1lbnUA\nAAAETmFtZQBwbmFtaXR4dAhUaGUgbmFtZQAAAAABY21lbgACaW5keG5hbWUJTWVudSBJ\ndGVtY21lbgtBIG1lbnUgaXRlbQAGCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRl\nc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQg\nVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAAdFbmFibGVk\nZW5ibGJvb2wcSXMgdGhlIG1lbnUgaXRlbSBpcyBlbmFibGVkPwAAAAtJdGVtIE51bWJl\ncml0bW5zaG9yFFRoZSBtZW51IGl0ZW0gbnVtYmVyAAAABE5hbWUAcG5hbWl0eHQIVGhl\nIG5hbWUAAAAAAAAAAAFxdWFsAAMFRHJhZnRmYXN0KEltYWdlIHRoZSBncmFwaGljIGFz\nIHF1aWNrbHkgYXMgcG9zc2libGUAB1JlZ3VsYXJyZWdsGkltYWdlIHRoZSBncmFwaGlj\nIG5vcm1hbGx5AARIaWdoAGhpcXUxSW1hZ2UgdGhlIGdyYXBoaWMgYXQgdGhlIGhpZ2hl\nc3QgcXVhbGl0eSBwb3NzaWJsZQAAAQAAALvqAAC66gAAAfkBJMq4EIgAAAAcARYAA2Fl\ndXQAAAAiSUNPTgAGAC5YRkNOAAQAglhDTUQABAC+AAAAwwAAVAYBJLlYGkAAACAAAAAA\nAAAAA/UAFSAAGYwAAAAAA/YAICAAGhAAAAAAI5AAKyAAMDIAAAAAYHYAPSAAMLYAAAAA\nIVoARSAAMToAAAAAPtP//yAAU4IAAAAADP0AUSAAAIQBJMsYDP4AsSAASFoBJMwgDQ0A\n2SAAMb4BJMp4DaoAWyAAAfQBJMwcAhIAvCAATRIBJMp0DP8AZiAADuYAAAAADQMAjiAA\nJoIAAAAADQQAniAAGpQAAAAAD6AAciAAEpgAAAAAD6EAfiAAEGAAAAAAFExvd2VyZWQg\ncmV0dXJuIGFycm93Ck5leHQgQXJyb3cKUHJldiBBcnJvdxFTdGFjayBJbmZvIFJ0IFRy\naQdIQyBIZWxwC0Nsb3NlciBMb29rCU5ld0hhbmRsZQpIUG9wVXBNZW51C0Rpc3Bvc2VE\nZXNjC1Nob3dCYWxsb29uD0hNUmVtb3ZlQmFsbG9vbg9Nb3ZlRGVzY1RvU2NyYXASU2F2\nZURlc2NBc1Jlc291cmNlCkV4dGVuZERlc2MGU2VhcmNoFVN0YW5kYXJkIEV2ZW50IFN1\naXRlcwlNZXJnZUFldGU=\n\n\n--========================_26885646==_D\nContent-Type: application/octet-stream; name=\"Aete_Editor_b1\"\n ; x-mac-type=\"5354414B\"\n ; x-mac-creator=\"57494C44\"\nContent-Disposition: attachment; filename=\"Aete_Editor_b1\"\nContent-Transfer-Encoding: base64\n\nAAA2AFNUQUv/////AAAAAAAAAAoABBvAAAA2AAAAAAAAAAAAAAAABgAADjwAAAAeAAA7\ngwAAOH8AAAAAAAAAAAAAQNkAAAAAAAUAABAAAAAAAAAAAAAAAAAAAAAAAAAAAhCAAAIQ\ngAACEIAAAiCAANrR7fYAAAAAAQgBQAJeA0AAAAAAA2YEgAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7wAADAYBVgIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA\nAAAIAAAAiAAiAIgAIgCIiCIiiIgiIoiqIqqIqiKqzKozqsyqM6ruqruq7qq7qu67u+7u\nu7vu/7v/7v+7/+7/u////7v//4AQAiABCEAE//////////+IIogiiCKIIhEiRIgRIkSI\nxIAMaEMCMCaxMAMb2MAMjaoAqgCqAKoAiCJVIogiVSKIVSJViFUiVXfdd9133XfdgAAA\nAAAAAACqVapVqlWqVQOESDAMAgEBgkQ5RIIBAQGIFCJBiEEiFICAQT4ICBTjIgSMdCIX\nmBC+gIgI6wiIgCXIMolkJEySopxBvirJFOtAoAAABAoAAIBAIAACBAgAqgCAAIgAgAD/\ngICAgICAgAgcIsGAAQIE/4CAgP8ICAj4dCJHjxcicb8Av7+wsLCw/3++XaJBgAD69fr1\noFCgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAb24gc3VzcGVuZFN0YWNrDXJlc2V0IG1lbnVCYXINZW5kIHN1c3BlbmRTdGFj\naw0Nb24gcmVzdW1lU3RhY2sNaWYgdGhlIHVzZXJMZXZlbCBpcyAxIHRoZW4gc2V0IHRo\nZSB1c2VyTGV2ZWwgdG8gMg1BZXRlRWR0aW9yTWVudQ1DaGVja1ByZWZlcmVuY2UNZW5k\nIHJlc3VtZVN0YWNrDQ1vbiBBZXRlRWR0aW9yTWVudQ1pZiB0aGVyZSBpcyBhIG1lbnUg\nIlN0eWxlIiB0aGVuIGRlbGV0ZSBtZW51ICJTdHlsZSINaWYgdGhlcmUgaXMgYSBtZW51\nICJGb250IiB0aGVuIGRlbGV0ZSBtZW51ICJGb250Ig1pZiB0aGVyZSBpcyBhIG1lbnUg\nIk9iamVjdHMiIHRoZW4gZGVsZXRlIG1lbnUgIk9iamVjdHMiDWlmIHRoZXJlIGlzIGEg\nbWVudSAiVG9vbHMiIHRoZW4gZGVsZXRlIG1lbnUgIlRvb2xzIg1jcmVhdGUgbWVudSAi\nQWV0ZUVkaXRvciINcHV0ICJJbnN0cnVjdGlvbnMsUHJlZmVyZW5jZXMsLSxSZXNvdXJj\nZSBUb29scyyuIFN1aXRlcyxFdmVudHMsQ2xhc3NlcyxFbnVtZXJhdGlvbnMsQ29tcGFy\naXNvbnMsLSxOZXcgRWRpdG9yySxFbXB0eSBTdGFja8ksLSxMb2NhbGl6ZSBhZXRlySIg\naW50byBtZW51ICJBZXRlRWRpdG9yIsINd2l0aCBtZW51TXNnICJJbnN0cnVjdGlvbnMs\nUHJlZmVyZW5jZXNDYXJkLCAscmVzb3VyY2VUb29scyxBRVN1aXRlc0JnLGV2ZW50c0Jn\nLGNsYXNzQmcsZW51bUJnLGNvbXBhcmlzb25CZywgLG1ha2VOZXdTdGFjayBmYWxzZSxl\nbXB0eVN0YWNrLCxsb2NhbGl6ZUl0Ig1lbmQgQWV0ZUVkdGlvck1lbnUNDW9uIFJlZ0xp\nc3QNcHV0IGNhcmQgZmllbGQgIm5hbWVsaXN0IiBvZiBjYXJkICJwcmVmZXJlbmNlIiBp\nbnRvIHRoZUxpc3QNcHV0IFNob3dMaXN0KHRoZUxpc3QsICJQaWNrIEEgTmFtZSIsIGZh\nbHNlLCB0cnVlLCAiT0ssQ2FuY2VsIiwgMCkgaW50byBjaG9pY2UNaWYgbGluZSAxIG9m\nIGNob2ljZSA9ICJPSyIgdGhlbg1wdXQgbGluZSAobGluZSAyIG9mIGNob2ljZSkgb2Yg\ndGhlTGlzdCBpbnRvIHgNcHV0IG9mZnNldCgiPSIgJiBxdW90ZSwgeCkgaW50byBuDWlm\nIHN0YXJ0SGVyZSA+IDAgdGhlbg1kZWxldGUgY2hhciAxIHRvIChuKzEpIG9mIHgNaWYg\nbGFzdCBjaGFyIG9mIHggPSBxdW90ZSB0aGVuIGRlbGV0ZSBsYXN0IGNoYXIgb2YgeA10\neXBlIHgNZW5kIGlmDWVuZCBpZg1lbmQgUmVnTGlzdA0Nb24gSW5zdHJ1Y3Rpb25zDWds\nb2JhbCBnV2hlcmVGcm9tDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ1nbyBj\nZCAiSW5zdHJ1Y3Rpb25zIg1lbmQgSW5zdHJ1Y3Rpb25zDQ1vbiBQcmVmZXJlbmNlc0Nh\ncmQNZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9t\nDWdvIGNkICJwcmVmZXJlbmNlIg1lbmQgUHJlZmVyZW5jZXNDYXJkDQ1vbiByZXNvdXJj\nZVRvb2xzDWdsb2JhbCBnV2hlcmVGcm9tDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJl\nRnJvbQ1nbyBjZCAibWFpbk1lbnUiDWVuZCByZXNvdXJjZVRvb2xzDQ1vbiBBRVN1aXRl\nc0JnDWdsb2JhbCBnV2hlcmVGcm9tDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJv\nbQ1pZiB0aGVyZSBpcyBhIGNkIDIgb2YgYmcgInN1aXRlSW5mbyIgdGhlbg1nbyBjZCAy\nIG9mIGJnICJzdWl0ZUluZm8iDWVsc2UNZ28gYmcgInN1aXRlSW5mbyINZW5kIGlmDWVu\nZCBBRVN1aXRlc0JnDQ1vbiBldmVudHNCZw1nbG9iYWwgZ1doZXJlRnJvbQ1wdXNoIGNk\nDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NaWYgdGhlcmUgaXMgYSBjZCAyIG9mIGJnICJl\ndmVudHMiIHRoZW4NZ28gY2QgMiBvZiBiZyAiZXZlbnRzIg1lbHNlDWdvIGJnICJldmVu\ndHMiDWVuZCBpZg1lbmQgZXZlbnRzQmcNDW9uIGNsYXNzQmcNZ2xvYmFsIGdXaGVyZUZy\nb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9tDWlmIHRoZXJlIGlzIGEgY2Qg\nMiBvZiBiZyAiY2xhc3MiIHRoZW4NZ28gY2QgMiBvZiBiZyAiY2xhc3MiDWVsc2UNZ28g\nYmcgImNsYXNzIg1lbmQgaWYNZW5kIGNsYXNzQmcNDW9uIGVudW1CZw1nbG9iYWwgZ1do\nZXJlRnJvbQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NaWYgdGhlcmUgaXMg\nYSBjZCAyIG9mIGJnICJlbnVtZXJhdGlvbiIgdGhlbg1nbyBjZCAyIG9mIGJnICJlbnVt\nZXJhdGlvbiINZWxzZQ1nbyBiZyAiZW51bWVyYXRpb24iDWVuZCBpZg1lbmQgZW51bUJn\nDQ1vbiBjb21wYXJpc29uQmcNZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2Qg\naW50byBnV2hlcmVGcm9tDWlmIHRoZXJlIGlzIGEgY2QgMiBvZiBiZyAiY29tcGFyaXNv\nbiIgdGhlbg1nbyBjZCAyIG9mIGJnICJjb21wYXJpc29uIg1lbHNlDWdvIGJnICJjb21w\nYXJpc29uIg1lbmQgaWYNZW5kIGNvbXBhcmlzb25CZw0Nb24gbWFrZU5ld1N0YWNrIG5l\nd1dpbmRvdw1nZXQgdGhlIHNoaWZ0S2V5IGlzIGRvd24NcHV0IGl0IGludG8gc2hpZnRE\nb3duDWFzayBmaWxlICJTYXZlIGEgbmV3IGVkaXRvciBzdGFjayBhczoiDWlmIHRoZSBy\nZXN1bHQgaXMgIkNhbmNlbCIgdGhlbiBleGl0IG1ha2VOZXdTdGFjaw1pZiBpdCBpcyBl\nbXB0eSB0aGVuDWFuc3dlciAiWW91IGhhdmUgdG8gc3VwcGx5IGEgbmFtZS4iDWFzayBm\naWxlICJDcmVhdGUgYSBuZXcgc3RhY2sgYXMiDWVuZCBpZg1pZiB0aGUgZnJlZXNpemUg\nb2YgdGhpcyBzdGFjayA+IDMyNzY4IHRoZW4gZG9NZW51ICJDb21wYWN0IFN0YWNrIg1z\nYXZlIHRoaXMgc3RhY2sgYXMgaXQNaWYgdGhlIHJlc3VsdCA8PiAiIiB0aGVuDWFuc3dl\nciAiSXQgZmFpbHMsIiAmJiB0aGUgcmVzdWx0DWV4aXQgdG8gSHlwZXJDYXJkDWVuZCBp\nZg1pZiBzaGlmdERvd24gdGhlbg1nbyBzdGFjayBpdCBpbiBhIG5ldyB3aW5kb3cNcHV0\nIHRoZSBsb2Mgb2YgY2Qgd2luZG93IGludG8gd2luZExvYw1zZXQgdGhlIGxvYyBvZiBj\nZCB3aW5kb3cgdG8gaXRlbSAxIG9mIHdpbmRMb2MgKzIwLCBpdGVtIDIgb2Ygd2luZExv\nYyArMjANZWxzZQ1pZiBuZXdXaW5kb3cgPD4gdHJ1ZSB0aGVuDWdvIHN0YWNrIGl0DWVs\nc2UNZ28gc3RhY2sgaXQgaW4gYSBuZXcgd2luZG93DXB1dCB0aGUgbG9jIG9mIGNkIHdp\nbmRvdyBpbnRvIHdpbmRMb2MNc2V0IHRoZSBsb2Mgb2YgY2Qgd2luZG93IHRvIGl0ZW0g\nMSBvZiB3aW5kTG9jICsyMCwgaXRlbSAyIG9mIHdpbmRMb2MgKzIwDWVuZCBpZg1lbmQg\naWYNZW1wdHlTdGFjayB5ZXMNZW5kIG1ha2VOZXdTdGFjaw0Nb24gbG9jYWxpemVJdA1h\nc2sgZmlsZSAiQ3JlYXRlIHRyYW5zbGF0aW9uIHN0YWNrIHdoZXJlPyIgd2l0aCAoKHNo\nb3J0IG5hbWUgb2YgdGhpcyBzdGFjaykgJiYgIkxvY2FsaXplZCIpDWlmIHRoZSByZXN1\nbHQgaXMgIkNhbmNlbCIgdGhlbiBleGl0IGxvY2FsaXplSXQNaWYgaXQgaXMgZW1wdHkg\ndGhlbg1hbnN3ZXIgIllvdSBoYXZlIHRvIHN1cHBseSBhIG5hbWUuIg1hc2sgZmlsZSAi\nQ3JlYXRlIHRyYW5zbGF0aW9uIHN0YWNrIHdoZXJlPyINZW5kIGlmDWlmIHRoZSBmcmVl\nc2l6ZSBvZiB0aGlzIHN0YWNrID4gMzI3NjggdGhlbiBkb01lbnUgIkNvbXBhY3QgU3Rh\nY2siDXNhdmUgdGhpcyBzdGFjayBhcyBpdA1pZiB0aGUgcmVzdWx0IDw+ICIiIHRoZW4N\nYW5zd2VyICJJdCBmYWlscywiICYmIHRoZSByZXN1bHQNZXhpdCB0byBIeXBlckNhcmQN\nZW5kIGlmDWdvIHN0YWNrIGl0IGluIGEgbmV3IHdpbmRvdw1wdXQgdGhlIGxvYyBvZiBj\nZCB3aW5kb3cgaW50byB3aW5kTG9jDXNldCB0aGUgbG9jIG9mIGNkIHdpbmRvdyB0byBp\ndGVtIDEgb2Ygd2luZExvYyArMjAsIGl0ZW0gMiBvZiB3aW5kTG9jICsyMA1Mb2NhbGl6\nYXRpb24gZmFsc2UNZW5kIGxvY2FsaXplSXQNDW9uIG9wZW5zdGFjaw1nbG9iYWwgaW5F\nZGl0LCBnRGVsZXRlU3VpdGUNcHV0IGZhbHNlIGludG8gZ0RlbGV0ZVN1aXRlDXB1dCB0\ncnVlIGludG8gaW5FZGl0DWlmIHRoZSBzY3JlZW5SZWN0IGlzICIwLDAsNTEyLDM0MiIg\ndGhlbiBzZXQgdGhlIGxvYyBvZiBjZCB3aW5kb3cgdG8gIjAsMCINaWYgdGhlIHVzZXJM\nZXZlbCBpcyAxIHRoZW4gc2V0IHRoZSB1c2VyTGV2ZWwgdG8gMg1BZXRlRWR0aW9yTWVu\ndQ1DaGVja1ByZWZlcmVuY2UNZW5kIG9wZW5zdGFjaw0Nb24gY2xvc2VDYXJkDWhtUmVt\nb3ZlQmFsbG9vbg1wYXNzIGNsb3NlQ2FyZA1lbmQgY2xvc2VDYXJkDQ1vbiBjbG9zZVN0\nYWNrDXJlc2V0IG1lbnVCYXINaWYgdGhlIGZyZWVzaXplIG9mIHRoaXMgc3RhY2sgPiAz\nMjc2OCB0aGVuIGRvTWVudSAiQ29tcGFjdCBTdGFjayINZW5kIGNsb3NlU3RhY2sNDWZ1\nbmN0aW9uIFByZWZlckNsaWVudExhbmdCdXR0b25JRA1yZXR1cm4gIjUsNiw3LDEzLDU3\nIg1lbmQgUHJlZmVyQ2xpZW50TGFuZ0J1dHRvbklEDQ1mdW5jdGlvbiBQcmVmZXJTZXJ2\nZXJMYW5nQnV0dG9uSUQNcmV0dXJuICIyLDMsMTAiDWVuZCBQcmVmZXJTZXJ2ZXJMYW5n\nQnV0dG9uSUQNDW9uIENoZWNrUHJlZmVyZW5jZQ1nbG9iYWwgZGVmYXVsdFRpbWVvdXQs\nZGVmYXVsdFRhcmdldCxkZWZhdWx0U2VuZE1vZGUsZGVmYXVsdElkbGVQcm9jLGRlZmF1\nbHRBRUZpbHRlcixkZWZhdWx0VGFyZ2V0RGVzYw1nbG9iYWwgc2VydmVyTGFuZyxjbGll\nbnRMYW5nLGNsaWVudEhhc0dsdWUsdmVyYm9zZQ1wdXQgUHJlZmVyQ2xpZW50TGFuZ0J1\ndHRvbklEKCkgaW50byB0aGVMaXN0DXB1dCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlTGlz\ndCBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1pZiBoaWxpdGUgb2YgY2FyZCBi\ndXR0b24gaWQgKGl0ZW0gaSBvZiB0aGVMaXN0KSBvZiBjYXJkICJwcmVmZXJlbmNlIiB0\naGVuDXB1dCBzaG9ydCBuYW1lIG9mIGNhcmQgYnV0dG9uIGlkIChpdGVtIGkgb2YgdGhl\nTGlzdCkgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byBjbGllbnRMYW5nDWV4aXQgcmVw\nZWF0DWVuZCBpZg1lbmQgcmVwZWF0DXB1dCBQcmVmZXJTZXJ2ZXJMYW5nQnV0dG9uSUQo\nKSBpbnRvIHRoZUxpc3QNcHV0IG51bWJlciBvZiBpdGVtcyBpbiB0aGVMaXN0IGludG8g\nbg1yZXBlYXQgd2l0aCBpID0gMSB0byBuDWlmIGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBp\nZCAoaXRlbSBpIG9mIHRoZUxpc3QpIG9mIGNhcmQgInByZWZlcmVuY2UiIHRoZW4NcHV0\nIHNob3J0IG5hbWUgb2YgY2FyZCBidXR0b24gaWQgKGl0ZW0gaSBvZiB0aGVMaXN0KSBv\nZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIHNlcnZlckxhbmcNZXhpdCByZXBlYXQNZW5k\nIGlmDWVuZCByZXBlYXQNcHV0IGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiAiaGFzIGdsdWUg\nc3Vicm91dGluZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byBjbGllbnRIYXNHbHVl\nDXB1dCBoaWxpdGUgb2YgY2FyZCBidXR0b24gInZlcmJvc2UiIG9mIGNhcmQgInByZWZl\ncmVuY2UiIGludG8gdmVyYm9zZQ1wdXQgY2FyZCBmaWVsZCAidGltZU91dCIgb2YgY2Fy\nZCAicHJlZmVyZW5jZSIgaW50byBkZWZhdWx0VGltZW91dA1wdXQgY2FyZCBmaWVsZCAi\nc2VuZFRhcmdldCIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byBkZWZhdWx0VGFyZ2V0\nDXB1dCBjYXJkIGZpZWxkICJ0YXJnZXREZXNjIiBvZiBjYXJkICJwcmVmZXJlbmNlIiBp\nbnRvIGRlZmF1bHRUYXJnZXREZXNjDXB1dCBjYXJkIGZpZWxkICJzZW5kTW9kZSIgb2Yg\nY2FyZCAicHJlZmVyZW5jZSIgaW50byBkZWZhdWx0U2VuZE1vZGUNcHV0IGNhcmQgZmll\nbGQgImlkbGVQcm9jIiBvZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIGRlZmF1bHRJZGxl\nUHJvYw1wdXQgY2FyZCBmaWVsZCAiYWVGaWx0ZXIiIG9mIGNhcmQgInByZWZlcmVuY2Ui\nIGludG8gZGVmYXVsdEFFRmlsdGVyDWVuZCBDaGVja1ByZWZlcmVuY2UNDWZ1bmN0aW9u\nIFN0cmlwU1AgeCwgbG93ZXJDYXNlDXB1dCBDaGFyVG9OdW0oY2hhciAxIG9mIHgpIGlu\ndG8gbg1pZiBsb3dlckNhc2UgPSB0cnVlIHRoZW4NaWYgKG4gPj0gNjUpIGFuZCAobiA8\nPSA5MCkgdGhlbg1wdXQgTnVtVG9DaGFyKG4rMzIpIGludG8gY2hhciAxIG9mIHgNZW5k\nIGlmDWVsc2UNaWYgKG4gPj0gOTcpIGFuZCAobiA8PSAxMjIpIHRoZW4NcHV0IE51bVRv\nQ2hhcihuLTMyKSBpbnRvIGNoYXIgMSBvZiB4DWVuZCBpZg1lbmQgaWYNcmVwZWF0IHVu\ndGlsIGkgPSAwDXB1dCBvZmZzZXQoc3BhY2UsIHgpIGludG8gaQ1pZiBpID4gMCB0aGVu\nDXB1dCBDaGFyVG9OdW0oY2hhciAoaSsxKSBvZiB4KSBpbnRvIG4NaWYgKG4gPj0gOTcp\nIGFuZCAobiA8PSAxMjIpIHRoZW4NcHV0IE51bVRvQ2hhcihuLTMyKSBpbnRvIGNoYXIg\nKGkrMSkgb2YgeA1lbmQgaWYNZGVsZXRlIGNoYXIgaSBvZiB4DWVuZCBpZg1lbmQgcmVw\nZWF0DXJldHVybiB4DWVuZCBTdHJpcFNQDQ1mdW5jdGlvbiBIVEtleVdvcmQgaW5mbw1w\ndXQgKChpdGVtIDQgb2YgaW5mbykgZGl2IDgxOTIpIG1vZCA0IGludG8gdGVtcA1pZiB0\nZW1wID4gMSB0aGVuDXB1dCAibGlzdCIgaW50byB0aGlzVHlwZQ1lbHNlIGlmIHRlbXAg\nPSAxIHRoZW4NcHV0ICJlbnVtIiBpbnRvIHRoaXNUeXBlDWVsc2UNcHV0IFJlc1R5cGUo\naXRlbSAzIG9mIGluZm8pIGludG8gdGhpc1R5cGUNZW5kIGlmDS0tIGlmIGl0IGlzIGEg\nc3BlY2lhbCB0eXBlLCB3ZSBuZWVkIHRvIGFwcGVuZCB0eXBlIGFmdGVyIGtleXdvcmQN\naWYgKHRoaXNUeXBlID0gIlRFWFQiKSBPUiAodGhpc1R5cGUgPSAib2JqICIpIE9SICh0\naGlzVHlwZSA9ICJsaXN0Iikgb3IgKHRoaXNUeXBlID0gIm51bGwiKSB0aGVuDXJldHVy\nbiBpdGVtIDIgb2YgaW5mbw1lbHNlDXJldHVybiBSZXNUeXBlKGl0ZW0gMiBvZiBpbmZv\nKSAmIFRoaXNUeXBlDWVuZCBpZg1lbmQgSFRLZXlXb3JkDQ1vbiBpZGxlDWdsb2JhbCBp\nbkVkaXQNcHV0IHRydWUgaW50byBpbkVkaXQNZW5kIGlkbGUNDWZ1bmN0aW9uIFJlc1R5\ncGUgeA1yZXR1cm4gY2hhciAxIHRvIDQgb2YgKHggJiAiICAgICIpDWVuZCBSZXNUeXBl\nDQ1mdW5jdGlvbiBqdW1wIHgNZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2Qg\naW50byBnV2hlcmVGcm9tDWdvIGNhcmQgeA1yZXR1cm4gKHRoZSByZXN1bHQgPSAiIikN\nZW5kIGp1bXANDW9uIE5hbWVJdCB4DXB1dCB3b3JkIDEgb2YgeCBpbnRvIHkNZGVsZXRl\nIHdvcmQgMSBvZiB4DWlmIChpdGVtIDIgb2YgeCA8PiAiIikgb3IgKGxhc3QgY2hhciBv\nZiB4ID0gIiwiKSB0aGVuDS0tIDIgaXRlbXMgbWVhbnMgaWQgKyBuYW1lLCBqdXN0IGtl\nZXAgdGhlIGlkDWRlbGV0ZSBpdGVtIDIgb2YgeA1lbmQgaWYNaWYgdGhlcmUgaXMgYSBj\nYXJkIHggdGhlbg1pZiAodGhlIGlkIG9mIHRoaXMgY2FyZCkgPD4gKHRoZSBpZCBvZiBj\nYXJkIHgpIHRoZW4NYW5zd2VyICJUaGUgSUQgb2YgdGhpcyIgJiYgeSAmJiAiYWxyZWFk\neSBleGlzdHMiDWVuZCBpZg1lbmQgaWYNc2V0IG5hbWUgb2YgdGhpcyBjYXJkIHRvIHgN\nZW5kIE5hbWVJdA0Nb24gQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1lLCBsaXN0TmFt\nZQ0tLSBjaGFuZ2Ugb2xkTmFtZSBpbiBmaWVsZCBsaXN0TmFtZSB0byBuZXdOYW1lDXB1\ndCB3b3JkIDEgb2Ygb2xkTmFtZSBpbnRvIHN1aXRlbmFtZQ1kZWxldGUgd29yZCAxIHRv\nIDIgb2Ygb2xkTmFtZQ1pZiAoaXRlbSAyIG9mIG9sZE5hbWUgPSAiIikgYW5kIChsYXN0\nIGNoYXIgb2Ygb2xkTmFtZSA8PiAiLCIpIHRoZW4NLS0gb25seSAxIGl0ZW0sIGl0IGlz\nIHRoZSBJRA1wdXQgMSBpbnRvIGNoZWNrSW5kZXgNcHV0IGl0ZW0gMSBvZiBvbGROYW1l\nIGludG8gY2hlY2tJdGVtDWVsc2UNLS0gbmFtZSBmb2xsb3dlZCBieSBJRCwgdXNlIHRo\nZSBJRA1wdXQgMiBpbnRvIGNoZWNrSW5kZXgNcHV0IGl0ZW0gMSBvZiBvbGROYW1lIGlu\ndG8gY2hlY2tJdGVtDXB1dCBpdGVtIDIgb2Ygb2xkTmFtZSAmICIsIiAmIGNoZWNrSXRl\nbSBpbnRvIG9sZE5hbWUNZW5kIGlmDXB1dCAic3VpdGUiICYmIFJlc1R5cGUoc3VpdGVO\nYW1lKSBpbnRvIHN1aXRlQ2FyZA1pZiB0aGVyZSBpcyBhIGNhcmQgc3VpdGVDYXJkIHRo\nZW4NcHV0IGZpZWxkIGxpc3ROYW1lIG9mIGNhcmQgc3VpdGVDYXJkIGludG8geA1wdXQg\ndGhlIG51bWJlciBvZiBsaW5lcyBpbiB4IGludG8gbg1wdXQgMSBpbnRvIGkNcHV0IGZh\nbHNlIGludG8gZm91bmQNcmVwZWF0IHVudGlsIChpID4gbikgb3IgZm91bmQNaWYgKGl0\nZW0gY2hlY2tJbmRleCBvZiBsaW5lIGkgb2YgeCkgPSBjaGVja0l0ZW0gdGhlbg1kZWxl\ndGUgbGluZSBpIG9mIHgNcHV0IHRydWUgaW50byBmb3VuZA1lbmQgaWYNYWRkIDEgdG8g\naQ1lbmQgcmVwZWF0DXB1dCB4IGludG8gZmllbGQgbGlzdE5hbWUgb2YgY2FyZCBzdWl0\nZUNhcmQNZW5kIGlmDWlmIG5ld05hbWUgPD4gIiIgdGhlbg1wdXQgd29yZCAxIG9mIG5l\nd05hbWUgaW50byBzdWl0ZW5hbWUNZGVsZXRlIHdvcmQgMSB0byAyIG9mIG5ld05hbWUN\naWYgKGl0ZW0gMiBvZiBuZXdOYW1lIDw+ICIiKSBvciAobGFzdCBjaGFyIG9mIG5ld05h\nbWUgPSAiLCIpIHRoZW4NLS0gbmV3TmFtZSBpcyBuYW1lICsgSUQsIGZsaXAgaXQgYXJv\ndW5kDXB1dCBpdGVtIDIgb2YgbmV3TmFtZSAmICIsIiAmIGl0ZW0gMSBvZiBuZXdOYW1l\nIGludG8gbmV3TmFtZQ1lbmQgaWYNcHV0ICJzdWl0ZSIgJiYgc3VpdGVOYW1lIGludG8g\nc3VpdGVDYXJkDWlmIHRoZXJlIGlzIGEgY2FyZCBzdWl0ZUNhcmQgdGhlbg1wdXQgbmV3\nTmFtZSAmIHJldHVybiBhZnRlciBmaWVsZCBsaXN0TmFtZSBvZiBjYXJkIHN1aXRlQ2Fy\nZA1lbmQgaWYNZW5kIGlmDWVuZCBDaGFuZ2VOYW1lDQ1vbiBSZURvU2NyaXB0DWdsb2Jh\nbCBpbkVkaXQNcHV0IGluRWRpdCBpbnRvIGN1ckVkaXQNcHV0IGZhbHNlIGludG8gaW5F\nZGl0DXB1c2ggY2FyZA1wdXQgbnVtYmVyIG9mIGNhcmRzIGluIGJrZ25kICJldmVudHMi\nIGludG8gbg1yZXBlYXQgd2l0aCBpID0gMiB0byBuDWdvIGNhcmQgaSBvZiBia2duZCAi\nZXZlbnRzIg1pZiB0aGUgcmVzdWx0ID0gIiIgdGhlbg1NYWtlU2NyaXB0VGVtcGxhdGUN\nZW5kIGlmDWVuZCByZXBlYXQNcG9wIGNhcmQNcHV0IGN1ckVkaXQgaW50byBpbkVkaXQN\nZW5kIFJlRG9TY3JpcHQNDWZ1bmN0aW9uIEVudW1PcHRpb24gc3VpdGVDb2RlLGVudW1l\ncmF0aW9uLGVudW1lcmF0b3IsaW5kZXgNcHV0ICIiIGludG8gdGhlTGlzdA1wdXQgImVu\ndW1lcmF0aW9uIiAmJiBlbnVtZXJhdGlvbiBpbnRvIHgNaWYgdGhlcmUgaXMgYSBjYXJk\nIHggdGhlbg1wdXQgZmllbGQgImVudW1JbmZvIiBvZiBjYXJkIHggaW50byB4DXB1dCBu\ndW1iZXIgb2YgbGluZXMgaW4geCBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1p\nZiAoZW51bWVyYXRvciA9ICIiKSB0aGVuDXB1dCBpdGVtIGluZGV4IG9mIGxpbmUgaSBv\nZiB4ICYgInwiIGFmdGVyIHRoZUxpc3QNZWxzZSBpZiAoZW51bWVyYXRvciA9IGl0ZW0g\nMSBvZiBsaW5lIGkgb2YgeCkgdGhlbg1wdXQgaXRlbSBpbmRleCBvZiBsaW5lIGkgb2Yg\neCAmICJ8IiBpbnRvIHRoZUxpc3QNZW5kIGlmDWVuZCByZXBlYXQNZW5kIGlmDWlmIHRo\nZUxpc3QgPSAiIiB0aGVuDXB1dCAic29tZUVudW0iIGludG8gdGhlTGlzdA1lbHNlDWRl\nbGV0ZSBsYXN0IGNoYXIgb2YgdGhlTGlzdA1lbmQgaWYNcmV0dXJuIHRoZUxpc3QNZW5k\nIEVudW1PcHRpb24NDWZ1bmN0aW9uIE5hbWVPZkRhdGFUeXBlIGRhdGFUeXBlDWlmIGRh\ndGFUeXBlID0gInNob3IiIHRoZW4NZ2V0ICJJbnRlZ2VyLFB0cixIYW5kbGUsdHlwZVNo\nb3J0SW50ZWdlcixzaG9ydCwyIg1lbHNlIGlmIGRhdGFUeXBlID0gImxvbmciIHRoZW4N\nZ2V0ICJMb25naW50LFB0cixIYW5kbGUsdHlwZUxvbmdJbnRlZ2VyLGxvbmcsNCINZWxz\nZSBpZiAoZGF0YVR5cGUgPSAiYm9vbCIpIG9yIChkYXRhVHlwZSA9ICJ0cnVlIikgdGhl\nbg1nZXQgIkJvb2xlYW4sUHRyLEhhbmRsZSx0eXBlQm9vbGVhbixCb29sZWFuLDEiDWVs\nc2UgaWYgZGF0YVR5cGUgPSAiVEVYVCIgdGhlbg1nZXQgIlN0cjI1NSxDaGFyc1B0cixD\naGFyc0hhbmRsZSx0eXBlQ2hhcixjaGFyLC0xIg1lbHNlIGlmIChkYXRhVHlwZSA9ICJl\nbnVtIikgdGhlbg1nZXQgIlJlc1R5cGUsUmVzVHlwZVB0cixIYW5kbGUsdHlwZUVudW1l\ncmF0ZWQsUmVzVHlwZSw0Ig1lbHNlIGlmIChkYXRhVHlwZSA9ICJ0eXBlIikgdGhlbg1n\nZXQgIlJlc1R5cGUsUmVzVHlwZVB0cixIYW5kbGUsdHlwZVR5cGUsUmVzVHlwZSw0Ig1l\nbHNlIGlmIChkYXRhVHlwZSA9ICJwcm9wIikgdGhlbg1nZXQgIlJlc1R5cGUsUmVzVHlw\nZVB0cixIYW5kbGUsdHlwZVByb3BlcnR5LFJlc1R5cGUsNCINZWxzZSBpZiAoZGF0YVR5\ncGUgPSAia2V5dyIpIHRoZW4NZ2V0ICJSZXNUeXBlLFJlc1R5cGVQdHIsSGFuZGxlLHR5\ncGVLZXl3b3JkLFJlc1R5cGUsNCINZWxzZSBpZiBkYXRhVHlwZSA9ICJsaXN0IiB0aGVu\nDWdldCAiQUVEZXNjTGlzdCxBRURlc2NMaXN0UHRyLCx0eXBlQUVMaXN0LEFFRGVzY0xp\nc3QsLTEiDWVsc2UgaWYgZGF0YVR5cGUgPSAiZXh0ZSIgdGhlbg1nZXQgImV4dGVuZGVk\nLFB0cixIYW5kbGUsdHlwZUV4dGVuZGVkLGV4dGVuZGVkLDEwIg1lbHNlIGlmIGRhdGFU\neXBlID0gInNpbmciIHRoZW4NZ2V0ICJSZWFsLFB0cixIYW5kbGUsdHlwZVNob3J0Rmxv\nYXQsZmxvYXQsNCINZWxzZSBpZiBkYXRhVHlwZSA9ICJkb3ViIiB0aGVuDWdldCAiRG91\nYmxlLFB0cixIYW5kbGUsdHlwZUxvbmdGbG9hdCxkb3VibGUsOCINZWxzZSBpZiBkYXRh\nVHlwZSA9ICJjb21wIiB0aGVuDWdldCAiQ29tcCxQdHIsSGFuZGxlLHR5cGVDb21wLGNv\nbXAsOCINZWxzZSBpZiBkYXRhVHlwZSA9ICJhbGlzIiB0aGVuDWdldCAiQWxpYXNSZWNv\ncmQsQWxpYXNQdHIsQWxpYXNIYW5kbGUsdHlwZUFsaWFzLEFsaWFzUmVjb3JkLC0xIg1l\nbHNlIGlmIGRhdGFUeXBlID0gImZzcyAiIHRoZW4NZ2V0ICJGU1NwZWMsRlNTcGVjUHRy\nLEZTU3BlY0hhbmRsZSx0eXBlRlNTLEZTU3BlYyw3MCINZWxzZQ1nZXQgIkFFRGVzYyxQ\ndHIsSGFuZGxlLHR5cGVVbmtub3duLHZvaWQsLTEiDWVuZCBpZg1yZXR1cm4gaXQNZW5k\nIE5hbWVPZkRhdGFUeXBlDQ0Nb24gZW1wdHlTdGFjayBub0RpYWxvZw1pZiBub0RpYWxv\nZyA8PiJ5ZXMiIHRoZW4NYW5zd2VyICJEZWxldGUgYWxsICdhZXRlJyBkYXRhIGZyb20g\ndGhpcyBzdGFjaz8iIHdpdGggIk9LIiBvciAiQ2FuY2VsIg1pZiBpdCBpcyBub3QgIk9L\nIiB0aGVuIGV4aXQgZW1wdHlTdGFjaw1lbmQgaWYNc2V0IGN1cnNvciB0byB3YXRjaA1n\nbG9iYWwgaW5FZGl0DXB1dCBmYWxzZSBpbnRvIGluRWRpdA1zZXQgbG9ja3NjcmVlbiB0\nbyB0cnVlDXB1c2ggY2FyZA1EZWxldGVBbGwgInN1aXRlSW5mbyINRGVsZXRlQWxsICJl\ndmVudHMiDURlbGV0ZUFsbCAiY2xhc3MiDURlbGV0ZUFsbCAiY29tcGFyaXNvbiINRGVs\nZXRlQWxsICJlbnVtZXJhdGlvbiINZ28gY2QgIm1haW5NZW51Ig1wdXQgIiIgaW50byBj\nYXJkIGZpZWxkICJTdWl0ZUxpc3QiDXB1dCAiIiBpbnRvIGNhcmQgZmllbGQgIlNjcmF0\nY2giDXB1dCAiIiBpbnRvIGNhcmQgZmllbGQgInNlbmRUYXJnZXQiIG9mIGNhcmQgInBy\nZWZlcmVuY2UiDXB1dCAiYWV0ZSIgaW50byBjYXJkIGZpZWxkICJyZXNvdXJjZVR5cGUi\nIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCAwIGludG8gY2FyZCBmaWVsZCAicmVzb3Vy\nY2VJRCIgb2YgY2FyZCAicHJlZmVyZW5jZSINcHV0ICIiIGludG8gY2FyZCBmaWVsZCAi\ncmVzb3VyY2VOYW1lIiBvZiBjYXJkICJwcmVmZXJlbmNlIg1wdXQgMSBpbnRvIGNhcmQg\nZmllbGQgIm1ham9yVmVyc2lvbiIgb2YgY2FyZCAicHJlZmVyZW5jZSINcHV0ICIwMCIg\naW50byBjYXJkIGZpZWxkICJtaW5vclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2Ui\nDXB1dCAwIGludG8gY2FyZCBmaWVsZCAibGFuZ3VhZ2VDb2RlIiBvZiBjYXJkICJwcmVm\nZXJlbmNlIg1wdXQgMCBpbnRvIGNhcmQgZmllbGQgInNjcmlwdENvZGUiIG9mIGNhcmQg\nInByZWZlcmVuY2UiDXB1dCB0cnVlIGludG8gaW5FZGl0DWlmIHRoZSBmcmVlc2l6ZSBv\nZiB0aGlzIHN0YWNrID4gMzI3NjggdGhlbiBkb01lbnUgIkNvbXBhY3QgU3RhY2siDWVu\nZCBlbXB0eVN0YWNrDQ0Nb24gRGVsZXRlQWxsIGJrZ25kTmFtZQ1wdXQgbnVtYmVyIG9m\nIGNhcmRzIGluIGJrZ25kIGJrZ25kTmFtZSBpbnRvIGkNcmVwZWF0IHdoaWxlIGkgPiAx\nDWdvIGNhcmQgaSBvZiBia2duZCBia2duZE5hbWUNZG9NZW51ICJEZWxldGUgQ2FyZCIN\nc3VidHJhY3QgMSBmcm9tIGkNZW5kIHJlcGVhdA1lbmQgRGVsZXRlQWxsDQ0AdGVBbGwN\nDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhwEJLR0QAAA48\nAAAAAAAAAAAAAAAAAAAABAAAE8AAAByvAAAAAQAAAAAAAAAAAAAAb24gTG9jYWxpemF0\naW9uIG91dE9ubHkNZ2xvYmFsIHRyYW5zbGF0aW9uVGFibGUNcHV0ICIiIGludG8gdHJh\nbnNsYXRpb25UYWJsZQ1pZiBub3Qgb3V0T25seSB0aGVuDWFuc3dlciBmaWxlICJEbyB5\nb3Ugd2lzaCB0byB1c2UgYSB0cmFuc2xhdGlvbiB0YWJsZSBmaWxlPyIgb2YgdHlwZSB0\nZXh0DWlmIChpdCA8PiAiIikgYW5kIChpdCA8PiAiQ2FuY2VsIikgdGhlbg1wdXQgaXQg\naW50byB0aGVGaWxlTmFtZQ1vcGVuIGZpbGUgdGhlRmlsZU5hbWUNcmVwZWF0IGZvcmV2\nZXINcmVhZCBmcm9tIGZpbGUgdGhlRmlsZU5hbWUgZm9yIDE2Mzg0DWlmIGl0IGlzIGVt\ncHR5IHRoZW4gZXhpdCByZXBlYXQNcHV0IGl0IGFmdGVyIHRyYW5zbGF0aW9uVGFibGUN\nZW5kIHJlcGVhdA1jbG9zZSBmaWxlIHRoZUZpbGVOYW1lDWVuZCBpZg1pZiB0cmFuc2xh\ndGlvblRhYmxlIDw+ICIiIHRoZW4NYW5zd2VyICJEbyB5b3Ugd2FudCB0byBjb25maXJt\nIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZCBzdHJpbmc/IiB3aXRoICJDYW5jZWwiIG9y\nICJObyIgb3IgIlllcyINaWYgaXQgPSAiQ2FuY2VsIiB0aGVuDXB1dCAiIiBpbnRvIHRy\nYW5zbGF0aW9uVGFibGUNZXhpdCB0byBIeXBlckNhcmQNZWxzZQ1wdXQgaXQgaW50byBv\ndXRPbmx5DWVuZCBpZg1lbmQgaWYNZW5kIGlmDXJlcGVhdCB3aXRoIGkgPSAyIHRvIG51\nbWJlciBvZiBjYXJkcyBpbiBia2duZCAiZXZlbnRzIg1pZiBub3QgaGlsaXRlIG9mIGJr\nZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiBvZiBjYXJkIGkgb2YgYmtnbmQgImV2ZW50cyIg\ndGhlbg1UcmFuc2xhdGVGaWVsZCBvdXRPbmx5LCJldmVudHMiLGksImV2ZW50TmFtZSIN\nVHJhbnNsYXRlRmllbGQgb3V0T25seSwiZXZlbnRzIixpLCJldmVudENvbW1lbnQiDVRy\nYW5zbGF0ZUdyb3VwIG91dE9ubHksNSwiZXZlbnRzIixpLCJwYXJhbUluZm8iDWVuZCBp\nZg1lbmQgcmVwZWF0DXJlcGVhdCB3aXRoIGkgPSAyIHRvIG51bWJlciBvZiBjYXJkcyBp\nbiBia2duZCAiY2xhc3MiDWlmIG5vdCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJmcm9t\nIEFFVVQiIG9mIGNhcmQgaSBvZiBia2duZCAiY2xhc3MiIHRoZW4NVHJhbnNsYXRlRmll\nbGQgb3V0T25seSwiY2xhc3MiLGksImNsYXNzTmFtZSINVHJhbnNsYXRlRmllbGQgb3V0\nT25seSwiY2xhc3MiLGksImNsYXNzQ29tbWVudCINVHJhbnNsYXRlR3JvdXAgb3V0T25s\neSw1LCJjbGFzcyIsaSwicHJvcEluZm8iDWVuZCBpZg1lbmQgcmVwZWF0DXJlcGVhdCB3\naXRoIGkgPSAyIHRvIG51bWJlciBvZiBjYXJkcyBpbiBia2duZCAiY29tcGFyaXNvbiIN\naWYgbm90IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgb2YgY2FyZCBp\nIG9mIGJrZ25kICJjb21wYXJpc29uIiB0aGVuDVRyYW5zbGF0ZUZpZWxkIG91dE9ubHks\nImNvbXBhcmlzb24iLGksImNvbXBhcmVOYW1lIg1UcmFuc2xhdGVGaWVsZCBvdXRPbmx5\nLCJjb21wYXJpc29uIixpLCJjb21wYXJlQ29tbWVudCINZW5kIGlmDWVuZCByZXBlYXQN\ncmVwZWF0IHdpdGggaSA9IDIgdG8gbnVtYmVyIG9mIGNhcmRzIGluIGJrZ25kICJlbnVt\nZXJhdGlvbiINaWYgbm90IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIg\nb2YgY2FyZCBpIG9mIGJrZ25kICJlbnVtZXJhdGlvbiIgdGhlbg1UcmFuc2xhdGVHcm91\ncCBvdXRPbmx5LDMsImVudW1lcmF0aW9uIixpLCJlbnVtSW5mbyINZW5kIGlmDWVuZCBy\nZXBlYXQNZ28gY2QgIm1haW5NZW51Ig1QdXRTY3JhdGNoIHRyYW5zbGF0aW9uVGFibGUs\nICJUcmFuc2xhdGlvbiB0YWJsZSINaWYgb3V0T25seSA8PiAidHJ1ZSIgdGhlbg1Db25z\ndHJ1Y3RMaW5rDWVuZCBpZg1wdXQgIiIgaW50byB0cmFuc2xhdGlvblRhYmxlDWVuZCBM\nb2NhbGl6YXRpb24NDW9uIFRyYW5zbGF0ZUZpZWxkIG91dE9ubHksIGJrZ25kTmFtZSwg\nY2FyZE5vLCBmaWVsZE5hbWUNcHV0ICJmaWVsZCIgJiYgcXVvdGUgJiBmaWVsZE5hbWUg\nJiBxdW90ZSAmJiAib2YgY2FyZCIgJiYgY2FyZE5vIMINJiYgIm9mIGJrZ25kIiAmJiBx\ndW90ZSAmIGJrZ25kTmFtZSAmIHF1b3RlIGludG8gY2h1bmtOYW1lDXB1dCB2YWx1ZSBv\nZiBjaHVua05hbWUgaW50byBjaHVua1ZhbHVlDWlmIGNodW5rVmFsdWUgaXMgbm90IGVt\ncHR5IHRoZW4NaWYgb3V0T25seSA9ICJ0cnVlIiB0aGVuDXNldCBjdXJzb3IgdG8gYnVz\neQ1VcGRhdGVUYWJsZSBjaHVua1ZhbHVlLCBjaHVua1ZhbHVlICYgIidzIHRyYW5zbGF0\naW9uIg1lbHNlDXB1dCBUcmFuc2xhdGVUaGlzKGNodW5rVmFsdWUpIGludG8gaXQNaWYg\nb3V0T25seSA9ICJubyIgdGhlbiAtLSB3ZSBkbyBub3QgbmVlZCB0byBjb25maXJtDWlm\nIGl0IDw+ICJAIyQlIiB0aGVuIC0tIHdlIGhhdmUgYSB0cmFuc2xhdGlvbg1pZiBpdCA8\nPiAiY2h1bmtWYWx1ZSIgdGhlbiAtLSB0aGUgdmFsdWUgaXMgY2hhbmdlZA1kbyAicHV0\nIGl0IGludG8iICYmIGNodW5rTmFtZSAtLSB3cml0ZSBpdCBiYWNrDWVuZCBpZg1leGl0\nIFRyYW5zbGF0ZUZpZWxkIC0tIGRvbmUNZW5kIGlmDWVuZCBpZg1wdXQgaXQgaW50byBv\nbGRUcmFucw1pZiBpdCA9ICJAIyQlIiB0aGVuIC0tIHdlIGRvIG5vdCBoYXZlIGEgdHJh\nbnNsYXRpb24NcHV0IGNodW5rVmFsdWUgaW50byBpdA1lbmQgaWYNYXNrICJUcmFuc2xh\ndGUiICYmIHF1b3RlICYgY2h1bmtWYWx1ZSAmIHF1b3RlICYmICJ0bzoiIHdpdGggaXQN\naWYgdGhlIHJlc3VsdCA9ICJDYW5jZWwiIHRoZW4NQ29uc3RydWN0TGluaw1leGl0IHRv\nIEh5cGVyQ2FyZA1lbHNlDWRvICJwdXQgaXQgaW50byIgJiYgY2h1bmtOYW1lDWlmIChv\nbGRUcmFucyA8PiBpdCkgYW5kIChjaHVua1ZhbHVlIDw+IGl0KSB0aGVuIC0tIHRoaXMg\naXMgYSBuZXcgdHJhbnNsYXRpb24sIHVwZGF0ZSB0YWJsZQ1VcGRhdGVUYWJsZSBjaHVu\na1ZhbHVlLCBpdA1lbmQgaWYNZW5kIGlmDWVuZCBpZg1lbmQgaWYNZW5kIFRyYW5zbGF0\nZUZpZWxkDQ1vbiBUcmFuc2xhdGVHcm91cCBvdXRPbmx5LCBjb21tZW50SXRlbSxia2du\nZE5hbWUsIGNhcmRObywgZmllbGROYW1lDXB1dCAiZmllbGQiICYmIHF1b3RlICYgZmll\nbGROYW1lICYgcXVvdGUgJiYgIm9mIGNhcmQiICYmIGNhcmRObyDCDSYmICJvZiBia2du\nZCIgJiYgcXVvdGUgJiBia2duZE5hbWUgJiBxdW90ZSBpbnRvIGNodW5rTmFtZQ1wdXQg\ndmFsdWUgb2YgY2h1bmtOYW1lIGludG8gcGFyYW1JbmZvDXJlcGVhdCB3aXRoIGkgPSAx\nIHRvIG51bWJlciBvZiBsaW5lcyBpbiBwYXJhbUluZm8NcHV0IGxpbmUgaSBvZiBwYXJh\nbUluZm8gaW50byB0aGlzUGFyYW0NcHV0IGl0ZW0gMSBvZiB0aGlzUGFyYW0gaW50byBp\ndHNOYW1lDXB1dCBpdGVtIDEgdG8gKGNvbW1lbnRJdGVtLTEpIG9mIHRoaXNQYXJhbSBp\nbnRvIG5ld1BhcmFtDWRlbGV0ZSBpdGVtIDEgdG8gKGNvbW1lbnRJdGVtLTEpIG9mIHRo\naXNQYXJhbQ1pZiBpdHNOYW1lIDw+ICIiIHRoZW4NcHV0IFRyYW5zbGF0ZVN0cmluZyhv\ndXRPbmx5LGl0c05hbWUpIGludG8gaXRlbSAxIG9mIG5ld1BhcmFtDWVuZCBpZg1pZiB0\naGlzUGFyYW0gPD4gIiIgdGhlbg1wdXQgIiwiICYgVHJhbnNsYXRlU3RyaW5nKG91dE9u\nbHksdGhpc1BhcmFtKSBhZnRlciBuZXdQYXJhbQ1lbHNlDXB1dCAiLCIgYWZ0ZXIgbmV3\nUGFyYW0NZW5kIGlmDXB1dCBuZXdQYXJhbSBpbnRvIGxpbmUgaSBvZiBwYXJhbUluZm8N\nZW5kIHJlcGVhdA1pZiBvdXRPbmx5IDw+ICJ0cnVlIiB0aGVuDWRvICJwdXQgcGFyYW1J\nbmZvIGludG8iICYmIGNodW5rTmFtZQ1lbmQgaWYNZW5kIFRyYW5zbGF0ZUdyb3VwDQ1m\ndW5jdGlvbiBUcmFuc2xhdGVTdHJpbmcgb3V0T25seSwgc3RyaW5nDWlmIG91dE9ubHkg\nPSAidHJ1ZSIgdGhlbg1zZXQgY3Vyc29yIHRvIGJ1c3kNVXBkYXRlVGFibGUgc3RyaW5n\nLCBzdHJpbmcgJiAiJ3MgdHJhbnNsYXRpb24iDXJldHVybiBzdHJpbmcNZWxzZQ1wdXQg\nVHJhbnNsYXRlVGhpcyhzdHJpbmcpIGludG8gaXQNaWYgb3V0T25seSA9ICJubyIgdGhl\nbiAtLSB3ZSBkbyBub3QgbmVlZCB0byBjb25maXJtDWlmIGl0IDw+ICJAIyQlIiB0aGVu\nIC0tIHdlIGhhdmUgYSB0cmFuc2xhdGlvbg1yZXR1cm4gaXQgLS0gZG9uZQ1lbmQgaWYN\nZW5kIGlmDXB1dCBpdCBpbnRvIG9sZFRyYW5zDWlmIGl0ID0gIkAjJCUiIHRoZW4gLS0g\nd2UgZG8gbm90IGhhdmUgYSB0cmFuc2xhdGlvbg1wdXQgc3RyaW5nIGludG8gaXQNZW5k\nIGlmDWFzayAiVHJhbnNsYXRlIiAmJiBxdW90ZSAmIHN0cmluZyAmIHF1b3RlICYmICJ0\nbzoiIHdpdGggaXQNaWYgdGhlIHJlc3VsdCA9ICJDYW5jZWwiIHRoZW4NQ29uc3RydWN0\nTGluaw1leGl0IHRvIEh5cGVyQ2FyZA1lbHNlDWlmIChvbGRUcmFucyA8PiBpdCkgYW5k\nIChzdHJpbmcgPD4gaXQpIHRoZW4gLS0gdGhpcyBpcyBhIG5ldyB0cmFuc2xhdGlvbiwg\ndXBkYXRlIHRhYmxlDVVwZGF0ZVRhYmxlIHN0cmluZywgaXQNZW5kIGlmDXJldHVybiBp\ndA1lbmQgaWYNZW5kIGlmDWVuZCBUcmFuc2xhdGVTdHJpbmcNDWZ1bmN0aW9uIFRyYW5z\nbGF0ZVRoaXMgc3RyaW5nDWdsb2JhbCB0cmFuc2xhdGlvblRhYmxlDWlmIHRyYW5zbGF0\naW9uVGFibGUgPD4gIiIgdGhlbg1wdXQgU2VhcmNoKHRyYW5zbGF0aW9uVGFibGUsIHN0\ncmluZyAmIHJldHVybiwgdHJ1ZSwgdHJ1ZSkgaW50byBsaW5lTGlzdA1wdXQgbnVtYmVy\nIG9mIGxpbmVzIGluIGxpbmVMaXN0IGludG8gbg1yZXBlYXQgd2l0aCBpID0gMSB0byBu\nDXB1dCBpdGVtIDEgb2YgbGluZSBpIG9mIGxpbmVMaXN0IGludG8gag1pZiAoaiBtb2Qg\nMikgPSAxIHRoZW4NaWYgbGluZSBqIG9mIHRyYW5zbGF0aW9uVGFibGUgPSBzdHJpbmcg\ndGhlbg1yZXR1cm4gbGluZSBqKzEgb2YgdHJhbnNsYXRpb25UYWJsZQ1lbmQgaWYNZW5k\nIGlmDWVuZCByZXBlYXQNZW5kIGlmDXJldHVybiAiQCMkJSINZW5kIFRyYW5zbGF0ZVRo\naXMNDW9uIFVwZGF0ZVRhYmxlIHNvdXJjZSx0cmFuc2xhdGlvbg1nbG9iYWwgdHJhbnNs\nYXRpb25UYWJsZQ1wdXQgU2VhcmNoKHRyYW5zbGF0aW9uVGFibGUsIHNvdXJjZSAmIHJl\ndHVybiwgdHJ1ZSwgdHJ1ZSkgaW50byBsaW5lTGlzdA1wdXQgbnVtYmVyIG9mIGxpbmVz\nIGluIGxpbmVMaXN0IGludG8gbg1yZXBlYXQgd2l0aCBpID0gMSB0byBuDXB1dCBpdGVt\nIDEgb2YgbGluZSBpIG9mIGxpbmVMaXN0IGludG8gag1pZiAoaiBtb2QgMikgPSAxIHRo\nZW4NaWYgbGluZSBqIG9mIHRyYW5zbGF0aW9uVGFibGUgPSBzb3VyY2UgdGhlbg0tLSB0\ncmFuc2xhdGlvbiBjaGFuZ2VkLCB3ZSB1cGRhdGUgaXQNcHV0IHRyYW5zbGF0aW9uIGlu\ndG8gbGluZSBqKzEgb2YgdHJhbnNsYXRpb25UYWJsZQ1leGl0IFVwZGF0ZVRhYmxlDWVu\nZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA0tLSBuZXcgdHJhbnNsYXRpb24sIHdlIGFkZCB0\nbyB0aGUgZW5kIG9mIHRoZSB0YWJsZQ1wdXQgc291cmNlICYgcmV0dXJuICYgdHJhbnNs\nYXRpb24gJiByZXR1cm4gYWZ0ZXIgdHJhbnNsYXRpb25UYWJsZQ1lbmQgVXBkYXRlVGFi\nbGUNDW9uIENvbnN0cnVjdExpbmsNZ2xvYmFsIGluRWRpdA1wdXQgZmFsc2UgaW50byBp\nbkVkaXQNcHV0IGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBpZCA4IG9mIGNhcmQgInByZWZl\ncmVuY2UiIGludG8gc29ydE5hbWUNcHV0IGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBpZCAy\nNiBvZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIGNsZWFuRmxhZw1pZiBzb3J0TmFtZSB0\naGVuDXNldCBjdXJzb3IgdG8gYnVzeQ1zb3J0IGJrZ25kICJldmVudHMiIGJ5IFJlc1R5\ncGUoZmllbGQgIlN1aXRlQ29kZSIpICYgZmllbGQgImV2ZW50TmFtZSINc2V0IGN1cnNv\nciB0byBidXN5DXNvcnQgYmtnbmQgImNsYXNzIiBieSBSZXNUeXBlKGZpZWxkICJTdWl0\nZUNvZGUiKSAmIGZpZWxkICJjbGFzc05hbWUiDXNldCBjdXJzb3IgdG8gYnVzeQ1zb3J0\nIGJrZ25kICJjb21wYXJpc29uIiBieSBSZXNUeXBlKGZpZWxkICJTdWl0ZUNvZGUiKSAm\nIGZpZWxkICJjb21wYXJlTmFtZSINc2V0IGN1cnNvciB0byBidXN5DXNvcnQgYmtnbmQg\nImVudW1lcmF0aW9uIiBieSBSZXNUeXBlKGZpZWxkICJTdWl0ZUNvZGUiKSAmIGZpZWxk\nICJlbnVtZXJhdGlvbiINZWxzZQ1zb3J0IGJrZ25kICJldmVudHMiIGJ5IGZpZWxkICJT\ndWl0ZUNvZGUiDXNvcnQgYmtnbmQgImNsYXNzIiBieSBmaWVsZCAiU3VpdGVDb2RlIg1z\nb3J0IGJrZ25kICJjb21wYXJpc29uIiBieSBmaWVsZCAiU3VpdGVDb2RlIg1zb3J0IGJr\nZ25kICJlbnVtZXJhdGlvbiIgYnkgZmllbGQgIlN1aXRlQ29kZSINZW5kIGlmDXB1dCBu\ndW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBuDXJlcGVhdCB3\naXRoIGkgPSAyIHRvIG4NZ28gY2FyZCBuIG9mIGJrZ25kICJzdWl0ZUluZm8iDS0tIGNs\nZWFyIGV2ZXJ5dGhpbmcNcHV0ICIiIGludG8gZmllbGQgImV2ZW50TGlzdCINcHV0ICIi\nIGludG8gZmllbGQgImNsYXNzTGlzdCINcHV0ICIiIGludG8gZmllbGQgImNvbXBhcmVM\naXN0Ig1wdXQgIiIgaW50byBmaWVsZCAiZW51bUxpc3QiDWVuZCByZXBlYXQNQ2xlYW5U\neXBlIGZhbHNlLCAiY2xhc3MiLCJjbGFzc0xpc3QiLCJjbGFzc05hbWUiLCJjbGFzc0lE\nIg1DbGVhblR5cGUgZmFsc2UsICJjb21wYXJpc29uIiwiY29tcGFyZUxpc3QiLCJjb21w\nYXJlTmFtZSIsImNvbXBhcmVJRCINQ2xlYW5UeXBlIGZhbHNlLCAiZW51bWVyYXRpb24i\nLCJlbnVtTGlzdCIsImVudW1lcmF0aW9uIg1DbGVhblR5cGUgY2xlYW5GbGFnLCAiZXZl\nbnRzIiwiZXZlbnRMaXN0IiwiZXZlbnROYW1lIiwiZXZlbnRDbGFzcyIsImV2ZW50SUQi\nDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBpDXB1\ndCAiIiBpbnRvIHN1aXRlTGlzdA1yZXBlYXQgd2hpbGUgaSA+IDENZ28gY2FyZCBpIG9m\nIGJrZ25kICJzdWl0ZUluZm8iDWlmIGZpZWxkICJzdWl0ZUNvZGUiID0gIiIgdGhlbg1k\nb21lbnUgImRlbGV0ZSBDYXJkIg1lbHNlDXNldCBsb2NrVGV4dCBvZiBmaWVsZCAic3Vp\ndGVDb2RlIiB0byB0cnVlDXNldCBzdHlsZSBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byBv\ncGFxdWUNcHV0IGZpZWxkICJzdWl0ZUNvZGUiICYgcmV0dXJuIGJlZm9yZSBzdWl0ZUxp\nc3QNZW5kIGlmDXN1YnRyYWN0IDEgZnJvbSBpDWVuZCByZXBlYXQNZ28gY2FyZCAibWFp\nbk1lbnUiDXB1dCBzdWl0ZUxpc3QgaW50byBjYXJkIGZpZWxkICJzdWl0ZUxpc3QiDXB1\ndCB0cnVlIGludG8gaW5FZGl0DWVuZCBDb25zdHJ1Y3RMaW5rDQ1vbiBDbGVhblR5cGUg\nY2xlYW5GbGFnLCBia2duZE5hbWUsbGlzdE5hbWUsZmllbGROYW1lLElEMSxJRDINcHV0\nIG51bWJlciBvZiBjYXJkcyBpbiBia2duZCBia2duZE5hbWUgaW50byBuDXB1dCAiIiBp\nbnRvIHRoZUxpc3QNcmVwZWF0IHdpdGggaSA9IDIgdG8gbg1zZXQgY3Vyc29yIHRvIGJ1\nc3kNZ28gY2FyZCBpIG9mIGJrZ25kIGJrZ25kTmFtZQ1pZiBia2duZE5hbWUgPSAiZXZl\nbnRzIiB0aGVuDWlmIGNsZWFuRmxhZyB0aGVuDUd1ZXNzUGFyYW1UeXBlDWVuZCBpZg1N\nYWtlU2NyaXB0VGVtcGxhdGUNZW5kIGlmDXB1dCBmaWVsZCAic3VpdGVDb2RlIiBpbnRv\nIHN1aXRlQ29kZQ1wdXQgZmllbGQgZmllbGROYW1lIGludG8gY3VyTmFtZQ1pZiBJRDEg\nPD4gIiIgdGhlbg1wdXQgIiwiICYgUmVzVHlwZShmaWVsZCBJRDEpIGFmdGVyIGN1ck5h\nbWUNaWYgSUQyIDw+ICIiIHRoZW4NcHV0IFJlc1R5cGUoZmllbGQgSUQyKSBhZnRlciBj\ndXJOYW1lDWVuZCBpZg1lbmQgaWYNaWYgKHN1aXRlQ29kZSA8PiBzdWl0ZVJ1bikgYW5k\nIChzdWl0UnVuIDw+ICIiKSB0aGVuDS0tIHdlIGFyZSBkb25lIHdpdGggYSBzdWl0ZQ1Q\ndXROYW1lTGlzdCBzdWl0ZVJ1bixsaXN0TmFtZSx0aGVMaXN0DXB1dCAiIiBpbnRvIHRo\nZUxpc3QNZW5kIGlmDXB1dCBzdWl0ZUNvZGUgaW50byBzdWl0ZVJ1bg1wdXQgY3VyTmFt\nZSAmIHJldHVybiBhZnRlciB0aGVMaXN0DWVuZCByZXBlYXQNaWYgbiA+IDEgdGhlbg1Q\ndXROYW1lTGlzdCBzdWl0ZVJ1bixsaXN0TmFtZSx0aGVMaXN0DWVuZCBpZg1lbmQgQ2xl\nYW5UeXBlDQ1vbiBQdXROYW1lTGlzdCBzdWl0ZUNvZGUsbGlzdE5hbWUsdGhlTGlzdA1n\nbyBjYXJkICJzdWl0ZSIgJiYgc3VpdGVDb2RlDWlmIHRoZSByZXN1bHQgPD4gIiIgdGhl\nbg0tLSB3ZSBkb24ndCBoYXZlIG9uZSB5ZXQsIHdlIG5lZWQgdG8gY3JlYXRlIGl0DWdv\nIGxhc3QgY2FyZCBvZiBia2duZCAic3VpdGVJbmZvIg1kb01lbnUgIm5ldyBjYXJkIg1l\nbmQgaWYNcHV0IHRoZUxpc3QgaW50byBmaWVsZCBsaXN0TmFtZQ1lbmQgUHV0TmFtZUxp\nc3QNDW9uIFB1dFNjcmF0Y2ggeCwgaXRzTmFtZQ1pZiBsZW5ndGgoeCkgPj0gMzAwMDAg\ndGhlbg0tLSB0b28gbXVjaCB0byBiZSBwdXQgaW50byBhIEh5cGVyQ2FyZCBmaWVsZCwg\ndHJ5IGZpbGUgaW5zdGVhZA1hc2sgZmlsZSAiU2F2ZSB0aGUgZGF0YSB0byBmaWxlIg1p\nZiBpdCA8PiAiIiB0aGVuDXB1dCBpdCBpbnRvIHJlZg1vcGVuIGZpbGUgcmVmDXdyaXRl\nIHggdG8gZmlsZSByZWYNY2xvc2UgZmlsZSByZWYNZWxzZQ1Nb3ZlRGVzY1RvU2NyYXAg\neCAtLSBwdXQgaXQgaW50byBzY3JhcCBhcyBhIGxhc3QgcmVzb3J0DWVuZCBpZg1lbHNl\nDXB1dCB4IGludG8gY2FyZCBmaWVsZCAic2NyYXRjaCINcHV0IGl0c05hbWUgaW50byBj\nYXJkIGZpZWxkICJwYWROYW1lIg1lbmQgaWYNZW5kIFB1dFNjcmF0Y2gNDQAAAAAAAAAA\nAAAAAAAAAAAAAAAYAEJLR0QAABPAAAAAAAAAEt9AAAAAAAAAAwAAFdgAAA48ABYAGwAA\nEHYACAAAAG4AyAACAgQAKQDZADsBhQACAAAAAAAAAAQADAAAABBzdWl0ZU5hbWUAAG9u\nIE1vdXNlV2l0aGluDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0\naGUgbmFtZSBvZiB0aGlzIHN1aXRlIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlz\nIGlzIHRoZSBuYW1lIG9mIHRoaXMgc3VpdGUuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGlu\nDQ0AAADSAAMCBAA8ANkAbgH8AAIAAAAAAAAABAAJAAAADHN1aXRlQ29tbWVudAAAb24g\nTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEg\nY29tbWVudCBmb3IgdGhpcyBzdWl0ZSBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhp\ncyBpcyB0aGUgY29tbWVudCBmb3IgdGhpcyBzdWl0ZS4iDWVuZCBpZg1lbmQgTW91c2VX\naXRoaW4NDQ0AAAEUAAQCIQCDAAQA3AD9QAcAAAAAAAAABAAJAAAADGV2ZW50TGlzdAAA\nb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgdGhlIGxpc3Qgb2YgZXZlbnRz\nIGZvciB0aGlzIHN1aXRlIGdvZXMgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91\nc2V1cA1wdXQgdmFsdWUgb2YgdGhlIGNsaWNrTGluZSBpbnRvIHgNaWYgeCA8PiAiIiB0\naGVuDUhNUmVtb3ZlQmFsbG9vbg1wdXQganVtcCgiZXZlbnQiICYmIGl0ZW0gMiBvZiB4\nKSBpbnRvIHZvaWQNZW5kIGlmDWVuZCBtb3VzZXVwAAAiAAUCDAAZAIQAKADZAAAAAAAA\n//8AFQAMAQAAEAAAAAAAIgAGAgwAKwCZAD0A2QAAAAAAAP//ABUADAEAABAAAAAAACIA\nBwIMADsAjQBNANoAAAAAAAD//wAVAAwBAAAQAAAAAAAiAAgCDQB0AAQAgwA7AAAAAAAA\nAAAAFQAMAQAAEAAAAAAAIgAJAgwAdAEDAIMBSwAAAAAAAAAAABUADAEAABAAAAAAARYA\nCgIhAIMBAwDcAfxABwAAAAAAAAAEAAkAAAAMY2xhc3NMaXN0AABvbiBNb3VzZVdpdGhp\nbg1TaG93QmFsbG9vbiAiVGhpcyB0aGUgbGlzdCBvZiBjbGFzc2VzIGZvciB0aGlzIHN1\naXRlIGdvZXMgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2V1cA1wdXQgdmFs\ndWUgb2YgdGhlIGNsaWNrTGluZSBpbnRvIHgNaWYgeCA8PiAiIiB0aGVuDUhNUmVtb3Zl\nQmFsbG9vbg1wdXQganVtcCgiY2xhc3MiICYmIGl0ZW0gMiBvZiB4KSBpbnRvIHZvaWQN\nZW5kIGlmDWVuZCBtb3VzZXVwAAAAIgALAgwA6QAEAPoAaAAAAAAAAAAAABUADAEAABAA\nAAAAACIADAIMAOkBAwD6AXQAAAAAAAAAAAAVAAwBAAAQAAAAAAEqAA0CIQD5AAQBUQD9\nQAcAAAAAAAAABAAJAAAADGNvbXBhcmVMaXN0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFs\nbG9vbiAiVGhpcyB0aGUgbGlzdCBvZiBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdGhp\ncyBzdWl0ZSBnb2VzIGhlcmUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNldXANcHV0\nIHZhbHVlIG9mIHRoZSBjbGlja0xpbmUgaW50byB4DWlmIHggPD4gIiIgdGhlbg1ITVJl\nbW92ZUJhbGxvb24NcHV0IGp1bXAoImNvbXBhcmlzb24iICYmIGl0ZW0gMiBvZiB4KSBp\nbnRvIHZvaWQNZW5kIGlmDWVuZCBtb3VzZXVwAAABFgAOAiEA+gECAVEB/EAHAAAAAAAA\nAAQACQAAAAxlbnVtTGlzdAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMg\ndGhlIGxpc3Qgb2YgZW51bWVyYXRpb25zIGZvciB0aGlzIHN1aXRlIGdvZXMgaGVyZS4i\nDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2V1cA1wdXQgdmFsdWUgb2YgdGhlIGNsaWNr\nTGluZSBpbnRvIHgNaWYgeCA8PiAiIiB0aGVuDUhNUmVtb3ZlQmFsbG9vbg1wdXQganVt\ncCgiZW51bWVyYXRpb24iICYmIHgpIGludG8gdm9pZA1lbmQgaWYNZW5kIG1vdXNldXAA\nAAEOAA8BAABxAMgAgQD9oAQAAAAAAAEAAAAMAAAAEE5ld8kAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGFkZCBhIG5ldyBldmVudCB0byB0aGlz\nIHN1aXRlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBnV2hlcmVG\ncm9tDWxvY2sgc2NyZWVuDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ1NYWtl\nSXRlbSAiZXZlbnRzIg11bmxvY2sgc2NyZWVuIHdpdGggdmlzdWFsIGRpc3NvbHZlIGZh\nc3QNZW5kIG1vdXNlVXAAAAEMABABAABxAccAgQH8gAQAAAAAAAEAAAAMAAAAEE5ld8kA\nAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGFkZCBhIG5l\ndyBjbGFzcyB0byB0aGlzIHN1aXRlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDWdsb2JhbCBnV2hlcmVGcm9tDWxvY2sgc2NyZWVuDXB1c2ggY2QNcG9wIGNkIGludG8g\nZ1doZXJlRnJvbQ1NYWtlSXRlbSAiY2xhc3MiDXVubG9jayBzY3JlZW4gd2l0aCB2aXN1\nYWwgZGlzc29sdmUgZmFzdA1lbmQgbW91c2VVcAABIAARAQAA5wDIAPcA/aAEAAAAAAAB\nAAAADAAAABBOZXfJAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVy\nZSB0byBhZGQgYSBuZXcgY29tcGFyaXNvbiBvcGVyYXRvciB0byB0aGlzIHN1aXRlLiIN\nZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBnV2hlcmVGcm9tDWxvY2sg\nc2NyZWVuDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ1NYWtlSXRlbSAiY29t\ncGFyaXNvbiINdW5sb2NrIHNjcmVlbiB3aXRoIHZpc3VhbCBkaXNzb2x2ZSBmYXN0DWVu\nZCBtb3VzZVVwAAABGAASAQAA6AHIAPgB/aAEAAAAAAABAAAADAAAABBOZXfJAABvbiBN\nb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBhZGQgYSBuZXcgZW51\nbWVyYXRpb24gdG8gdGhpcyBzdWl0ZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VV\ncA1nbG9iYWwgZ1doZXJlRnJvbQ1sb2NrIHNjcmVlbg1wdXNoIGNkDXBvcCBjZCBpbnRv\nIGdXaGVyZUZyb20NTWFrZUl0ZW0gIkVudW1lcmF0aW9uIg11bmxvY2sgc2NyZWVuIHdp\ndGggdmlzdWFsIGRpc3NvbHZlIGZhc3QNZW5kIG1vdXNlVXAAACIAEwINABkAAAAzAHAA\nAAAAAAAAAAAVABgIAAAgAAAAAAFYABQBAABEABYAYwA2IAAAAAOGAAEAAAAMAAAAEAAA\nb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhl\nIG5leHQgc3VpdGUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2V0IHRoZXJl\nIGlzIGEgY2FyZCAyIG9mIHRoaXMgYmtnbmQNaWYgbm90IGl0IHRoZW4gZXhpdCBtb3Vz\nZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBjYXJkIDIgb2YgdGhpcyBia2duZCBpbnRv\nIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkIDw+IHggdGhlbg12aXN1YWwg\nd2lwZSBsZWZ0DWdvIHByZXYgY2FyZCBvZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQgbW91\nc2VVcAAAASAAFQEAAEQAPwBjAF4gAAAAZzkAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhp\nbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0byB0aGUgcHJldmlvdXMgc3Vp\ndGUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1l\nIG9mIGxhc3QgY2FyZCBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFt\nZSBvZiB0aGlzIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIHJpZ2h0DWdvIG5leHQg\nY2FyZCBvZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQgbW91c2VVcAAAALgAFwEAAA8BuQA2\nAgCgAAAAPtMAAQAAAAwAAAAQUmVzb3VyY2UgVG9vbHMAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhlIHJlc291cmNlIHRv\nb2xzIGNhcmQuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ28gY2FyZCAibWFp\nbk1lbnUiDWVuZCBtb3VzZVVwAAHgABgCBQAWANkAKAEKAAEAAAAAAAAABAAOAQAAElN1\naXRlQ29kZQAAb24gTW91c2VXaXRoaW4NaWYgdGhlIGxvY2t0ZXh0IG9mIG1lIHRoZW4N\nU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGlkIG9mIHRoaXMgc3VpdGUuIg1lbHNlDVNo\nb3dCYWxsb29uICJFbnRlciBpcyB0aGUgaWQgb2YgdGhpcyBzdWl0ZSBoZXJlLiINZW5k\nIGlmDWVuZCBNb3VzZVdpdGhpbg0Nb24gZXhpdEZpZWxkDWdldCBtZQ1pZiBpdCBpcyBl\nbXB0eSB0aGVuDXB1dCBlbXB0eSBpbnRvIHRoZUNvZGUNcmVwZWF0IHdoaWxlIHRoZSBu\ndW1iZXIgb2YgY2hhcnMgaW4gdGhlQ29kZSA8IDQNYXNrICJQbGVhc2Ugc3VwcGx5IGEg\nNCBjaGFyYWN0ZXIgc3VpdGUgY29kZToiIHdpdGggdGhlQ29kZQ1wdXQgaXQgaW50byB0\naGVDb2RlDWVuZCByZXBlYXQNcHV0IHRoZUNvZGUgaW50byBmaWVsZCAic3VpdGVDb2Rl\nIg1lbmQgaWYNcGFzcyBleGl0RmllbGQNZW5kIGV4aXRGaWVsZA0NAAAFAAwAU3VpdGUg\nQ29kZToABgAGAE5hbWU6AAcACQBDb21tZW50OgAACAAHAEV2ZW50cwAACQAIAENsYXNz\nZXMACwAMAENvbXBhcmlzb25zAAwADQBFbnVtZXJhdGlvbnMAABMACACuU3VpdGVzc3Vp\ndGVJbmZvAG9uIE1ha2VJdGVtIGl0ZW1UeXBlDXB1dCBmaWVsZCAic3VpdGVDb2RlIiBp\nbnRvIGN1clN1aXRlQ29kZQ1nbyBsYXN0IGNhcmQgb2YgYmtnbmQgaXRlbVR5cGUNZG9N\nZW51ICJOZXcgQ2FyZCINcHV0IGN1clN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0ZUNv\nZGUiDWlmIGl0ZW1UeXBlID0gImV2ZW50cyIgdGhlbg1wdXQgY3VyU3VpdGVDb2RlIGlu\ndG8gZmllbGQgImV2ZW50Q2xhc3MiDWVuZCBpZg1lbmQgTWFrZUl0ZW0NDW9uIE5ld0Nh\ncmQNc2V0IGxvY2tUZXh0IG9mIGZpZWxkICJzdWl0ZUNvZGUiIHRvIGZhbHNlDXNldCBz\ndHlsZSBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byByZWN0YW5nbGUNUGFzcyBOZXdDYXJk\nDWVuZCBOZXdDYXJkDQ1vbiBDbG9zZUNhcmQNZ2xvYmFsIGluRWRpdA1pZiBpbkVkaXQg\ndGhlbg1wdXQgc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQgaW50byB4DWlmIHN0eWxlIG9m\nIGZpZWxkICJzdWl0ZUNvZGUiIGlzIHJlY3RhbmdsZSB0aGVuDS0tIGEgbmV3IHN1aXRl\nLCBhIGJldHRlciBjcml0ZXJpYSBtYXkgYmUgY2FyZCBuYW1lIGlzIGVtcHR5LCBidXQg\nd2UgaGF2ZSBwcm9ibGVtIHdpdGggdGhhdA1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50\nbyBuZXdOYW1lDXNldCBsb2NrVGV4dCBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byB0cnVl\nDXNldCBzdHlsZSBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byBvcGFxdWUNc2V0IHRoZSBu\nYW1lIG9mIHRoaXMgY2FyZCB0byAoInN1aXRlIiAmJiBuZXdOYW1lKQ1wdXQgbmV3TmFt\nZSAmIHJldHVybiBhZnRlciBjYXJkIGZpZWxkICJzdWl0ZUxpc3QiIG9mIGNhcmQgIm1h\naW5NZW51Ig1lbmQgaWYNZW5kIGlmDVBhc3MgQ2xvc2VDYXJkDWVuZCBDbG9zZUNhcmQN\nDW9uIGRvTWVudSBpdGVtLG1lbnUNaWYgKChpdGVtID0gImRlbGV0ZSBjYXJkIikgb3Ig\nKGl0ZW0gPSAiY3V0IGNhcmQiKSkgYW5kIChpZCBvZiB0aGlzIGJrZ25kID0gNTA1Nikg\ndGhlbg1nbG9iYWwgaW5FZGl0DWlmIGluRWRpdCB0aGVuDXB1dCBmYWxzZSBpbnRvIGlu\nRWRpdA1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBzdWl0ZUNvZGUNcHV0IGNhcmQg\nZmllbGQgInN1aXRlTGlzdCIgb2YgY2FyZCAibWFpbk1lbnUiIGludG8geA1wdXQgbnVt\nYmVyIG9mIGxpbmVzIGluIHggaW50byBuDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG4NaWYg\nbGluZSBpIG9mIHggPSBzdWl0ZUNvZGUgdGhlbg1kZWxldGUgbGluZSBpIG9mIHgNcHV0\nIHggaW50byBjYXJkIGZpZWxkICJzdWl0ZUxpc3QiIG9mIGNhcmQgIm1haW5NZW51Ig1l\neGl0IHJlcGVhdA1lbmQgaWYNZW5kIHJlcGVhdA1wdXNoIGNhcmQNRGVsZXRlU3VpdGUg\nImV2ZW50cyIsc3VpdGVDb2RlDURlbGV0ZVN1aXRlICJjbGFzcyIsc3VpdGVDb2RlDURl\nbGV0ZVN1aXRlICJjb21wYXJpc29uIixzdWl0ZUNvZGUNRGVsZXRlU3VpdGUgImVudW1l\ncmF0aW9uIixzdWl0ZUNvZGUNcG9wIGNhcmQNcHV0IHRydWUgaW50byBpbkVkaXQNZW5k\nIGlmDWVuZCBpZg1wYXNzIGRvTWVudQ1lbmQgZG9NZW51DQ1vbiBEZWxldGVTdWl0ZSBi\na2duZE5hbWUsc3VpdGVDb2RlDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgYmtn\nbmROYW1lIGludG8gaQ1yZXBlYXQgd2hpbGUgaSA+IDENZ28gY2FyZCBpIG9mIGJrZ25k\nIGJrZ25kTmFtZQ1pZiBmaWVsZCAic3VpdGVDb2RlIiA9IHN1aXRlQ29kZSB0aGVuDWRv\nTWVudSAiRGVsZXRlIENhcmQiDWVuZCBpZg1zdWJ0cmFjdCAxIGZyb20gaQ1lbmQgcmVw\nZWF0DWVuZCBEZWxldGVTdWl0ZQ0NAAAAAAAAAAAAAAAAAAAA4EJNQVAAABLfAAAAAAAA\nAAAAAQAAAAAAAAFWAgAAAAAAAVYCAAAYAAABUwH+AAAAAAAAAAAAAAAAAAAAnADC////\n/////////////////OOFih8C4x8D47mGiQDCVVVVVVVVVVVVVVVVVVVVVeMAwiqqqqqq\nqqqqqqqqqqqqqqrjv4G/gbKB4R8E4R8I4R8C4R8Ev4a/hrWGjhGA4S0CAeEeBI0RgOEt\nAQHhHgK+gYnhHwThHwjhHwLhHwS/hr+GtYaOEYDhLQIB4R4EjRGA4S0BAeEeAgdwAHcA\nAFoAAFXAQktHRAAAFdgAAAAAAAAWpkAAAAAAAAAQAAAYZAAAE8AAMwA+AAAyvgAIAAAA\nZAB+AAECBAAcAI4AMAC/AAIAAAAAAAEABAAOAQAAElN1aXRlQ29kZQAAb24gTW91c2VX\naXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgZXZlbnQgYmVsb25ncyB0byB0aGlzIHN1aXRl\nIGNvZGUuIg1lbmQgTW91c2VXaXRoaW4AAADGAAICBABAAFkAUwEJAAIAAAAAAAAABAAM\nAAAAEEV2ZW50TmFtZQAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hv\nd0JhbGxvb24gIkVudGVyIHRoZSBuYW1lIG9mIHRoaXMgZXZlbnQgaGVyZS4iDWVsc2UN\nU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIG5hbWUgb2YgdGhpcyBldmVudC4iDWVuZCBp\nZg1lbmQgTW91c2VXaXRoaW4NAAB+AAMCBAAcAP0AMAEuAAIAAAAAAAAABAAOAQAAEkV2\nZW50Q2xhc3MAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBl\ndmVudCBjbGFzcyBvZiB0aGUgZXZlbnQuIg1lbmQgTW91c2VXaXRoaW4AAADAAAQCBABA\nAUoAUwF4AAIAAAAAAAAABAAMAAAAEEV2ZW50SUQAAG9uIE1vdXNlV2l0aGluDWlmICBt\nZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0aGUgSUQgb2YgdGhpcyBldmVu\ndCBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgSUQgb2YgdGhpcyBl\ndmVudC4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NAADUAAUCBABVAFkAhQH7AAcAAAAA\nAAAABAAJAAAADEV2ZW50Q29tbWVudAAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIi\nIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEgY29tbWVudCBhYm91dCB0aGlzIGV2ZW50\nIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIGEgY29tbWVudCBhYm91dCB0\naGlzIGV2ZW50LiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0NDQAAAMoABgIFALMAQgDG\nARkAAgAAAAAAAAADAAwAAAAQRXZQYXJhbU5hbWUAAG9uIE1vdXNlV2l0aGluDWlmICBt\nZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciBhIHRoZSBuYW1lIGZvciB0aGlz\nIGV2ZW50IGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBuYW1lIG9m\nIHRoaXMgZXZlbnQuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluAADKAAcCBQCzAXsAxgGh\nAAIAAAAAAAEABAAMAAAAEAAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4N\nU2hvd0JhbGxvb24gIkVudGVyIGEga2V5d29yZCBpZCBmb3IgdGhlIHBhcmFtZXRlci4i\nDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGtleXdvcmQgaWQgZm9yIHRoZSBw\nYXJhbWV0ZXIuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQABKAAIAgQAswHTAMYB/QAC\nAAAAAAABAAQADAAAABAAAG9uIE1vdXNlV2l0aGluDWlmICBtZSBpcyAiIiB0aGVuDVNo\nb3dCYWxsb29uICJFbnRlciBhIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlci4iDWVs\nc2UNaWYgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiRW51bSIgdGhlbg1TaG93QmFsbG9v\nbiAiVGhlIHBhcmFtZXRlciBpcyBhbiBlbnVtZXJhdG9yLiINZWxzZQ1TaG93QmFsbG9v\nbiAiVGhlIGlzIHRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlci4iDWVuZCBpZg1l\nbmQgaWYNZW5kIE1vdXNlV2l0aGluDQ0AAADOAAkCBAD4AGQBUwH5AAcAAAAAAAAABAAJ\nAAAADAAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24g\nIkVudGVyIGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgcGFyYW1ldGVyLiINZWxzZQ1TaG93\nQmFsbG9vbiAiVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgcGFyYW1ldGVy\nLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbgAAACoACgKEAS8ARwFWAfsABwAAAAAAAAAD\nAAwAAAAQcGFyYW1JbmZvAAAAANYACwEAAB8AYwAxAI+gAAAAAAAAAQAAAAwAAAAQU3Vp\ndGU6AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSBpZiB5b3Ug\nd2FudCB0byBnbyB0aGUgc3VpdGUiICYmIGZpZWxkICJzdWl0ZUNvZGUiDWVuZCBNb3Vz\nZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQganVtcCgic3VpdGUiICYmIGZpZWxkIHN1aXRl\nQ29kZSkgaW50byB2b2lkDWVuZCBtb3VzZVVwAAAiAA8CDQBCAB4AUwBaAAAAAAAA//8A\nFQAMAQAAEAAAAAAAIgARAgwAQgERAFIBSwAAAAAAAP//ABUADAEAABAAAAAAACIAEgIN\nAFQABQBkAFoAAAAAAAD//wAVAAwBAAAQAAAAAAAiABMCDACbAAIArABXAAAAAAAA//8A\nFQAMAQAAEAAAAAAAIgAUAg0AtQAEAMYAQwAAAAAAAP//ABUADAEAABAAAAAAACIAFQIN\nALUBLQDGAXwAAAAAAAD//wAVAAwBAAAQAAAAAAAiABcCDQD3AAsBCQBlAAAAAAAA//8A\nFQAMAQAAEAAAAAABNAAYAQAAtAGtAMUB06AAAAAAAAABABUADAEAABBUeXBlAABvbiBN\nb3VzZVdpdGhpbg1pZiBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJFbnVtIiB0aGVuDVNo\nb3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBlbnVtZXJhdGlvbiIgJiYg\nKGZpZWxkIGlkIDgpICYgIi4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNl\nVXANaWYgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZW51bSIgdGhlbg1ITVJlbW92ZUJh\nbGxvb24NZ28gY2FyZCAiZW51bWVyYXRpb24iICYmIChmaWVsZCBpZCA4KQ1lbmQgaWYN\nZW5kIG1vdXNlVXAAAADWABkBAADdAAYA8ABRgAUAAAAAAAEAAAAMAAAAEE9wdGlvbmFs\nAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiSW5kaWNhdGVzIHdoZXRoZXIgdGhp\ncyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgb3IgcmVxdWlyZWQuIg1lbmQgTW91c2VXaXRo\naW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUg\nb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAA3gAaAQAAygAGANwANYAFAAAAAAABAAAADAAA\nABBMaXN0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiSWYgdGhpcyBpcyBvbiwg\ndGhlbiB0aGUgcGFyYW1ldGVyIGlzIGEgbGlzdCBvZiIgwg0mJiBmaWVsZCBpZCA4ICYg\nIi4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdl\ndCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAA9gAbAQAAygBk\nANwAnoAFAAAAAAABAAAADAAAABBFbnVtAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiSWYgdGhpcyBpcyBvbiwgdGhlbiB0aGUgcGFyYW1ldGVyIGlzIGFuIGVudW1lcmF0\nZWQgd2l0aCBlbnVtZXJhdGlvbiBpZCIgwg0mJiBmaWVsZCBpZCA4ICYgIi4iDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3Qg\nKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAABQAAcAQAA3QBkAPAA0oAFAAAA\nAAABAAAADAAAABBSZXNlcnZlZAAAb24gTW91c2VXaXRoaW4NaWYgdGhlIHNob3J0IG5h\nbWUgb2YgbWUgaXMgIlJlc2VydmVkIiB0aGVuDVNob3dCYWxsb29uICJUaGlzIGlzIHJl\nc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZWxzZQ1TaG93QmFsbG9vbiAiSW5kaWNhdGVz\nIHdoZXRoZXIgdGhpcyBldmVudCBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgdGFyZ2V0\nLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9m\nIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAC2AB0B\nAADeAS8A7wFAAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxv\nb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRo\naW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUg\nb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAHgEAAN4BQADvAVEABQAAAAAAAQAAAAwA\nAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBm\nb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGls\naXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVw\nAAAAtgAfAQAA3gFRAO8BYgAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1v\ndXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAo\naGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAC2ACABAADeAWIA7wFzAAUAAAAA\nAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVz\nZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXAN\nc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQg\nbW91c2VVcAAAALYAIQEAAN4BcwDvAYQABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4i\nDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0\nbyBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAiAQAA3gGEAO8B\nlQAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlz\nIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBt\nb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdl\ndCkNZW5kIG1vdXNlVXAAAAC2ACMBAADeAZUA7wGmAAUAAAAAAAEAAAAMAAAAEAAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVy\nZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0\nYXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAJAEA\nAN4BpgDvAbcABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBv\nZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAlAQAA3gG3AO8ByAAFAAAAAAABAAAADAAA\nABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZv\nciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxp\ndGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAA\nAAD6ACYBAADeAcgA7wHZAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hv\nd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQsIGJ1dCBoZXJlIHdlIGFyZSB1c2luZyBp\ndCB0byBkZW5vdGUgdGhlIGRhdGEgdHlwZSBpbiBQYXNjYWwvQy4iDWVuZCBNb3VzZVdp\ndGhpbg0Nb24gbW91c2VEb3duDS0tc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90ICho\naWxpdGUgb2YgdGFyZ2V0KQ1DaG9vc2VQYXJhbVR5cGUNZW5kIG1vdXNlRG93bgAA+gAn\nAQAA3gHZAO8B6gAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxs\nb29uICJUaGlzIGlzIHJlc2VydmVkLCBidXQgaGVyZSB3ZSBhcmUgdXNpbmcgaXQgdG8g\nZGVub3RlIHRoZSBkYXRhIHR5cGUgaW4gUGFzY2FsL0MuIg1lbmQgTW91c2VXaXRoaW4N\nDW9uIG1vdXNlRG93bg0tLXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRl\nIG9mIHRhcmdldCkNQ2hvb3NlUGFyYW1UeXBlDWVuZCBtb3VzZURvd24AAPoAKAEAAN4B\n6gDvAfsABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAi\nVGhpcyBpcyByZXNlcnZlZCwgYnV0IGhlcmUgd2UgYXJlIHVzaW5nIGl0IHRvIGRlbm90\nZSB0aGUgZGF0YSB0eXBlIGluIFBhc2NhbC9DLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBt\nb3VzZURvd24NLS1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0\nYXJnZXQpDUNob29zZVBhcmFtVHlwZQ1lbmQgbW91c2VEb3duAAIOACkBAACYAM4ArAEE\noAIAAAAAAAEAAAAMAAAAEE5leHQgPgAAb24gTW91c2VXaXRoaW4NcHV0IGZpZWxkICJj\ndXJQYXJhbSIgaW50byBjdXJyZW50UGFyYW0NaWYgY3VycmVudFBhcmFtID0gMSB0aGVu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdldCB0aGUgZGlyZWN0IHBhcmFtZXRl\nci4iDWVsc2UgaWYgbGluZSAoY3VycmVudFBhcmFtKzEpIG9mIGJrZ25kIGZpZWxkIGlk\nIDEwIDw+ICIiIHRoZW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ2V0IHRoZSBu\nZXh0IHBhcmFtZXRlci4iDWVsc2UNU2hvd0JhbGxvb24gIlRoZXJlIGlzIG5vIG5leHQg\ncGFyYW1ldGVyLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQg\nZmllbGQgY3VyUGFyYW0gaW50byBjdXJyZW50UGFyYW0NaWYgbGluZSAoY3VycmVudFBh\ncmFtKzEpIG9mIGJrZ25kIGZpZWxkIGlkIDEwIDw+ICIiIHRoZW4NU2F2ZVBhcmFtDVNo\nb3dQYXJhbSBjdXJyZW50UGFyYW0rMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVw\nAAACPAAqAQAAmACVAKwAy6ACAAAAAAABAAAADAAAABA8IFByZXYAAG9uIE1vdXNlV2l0\naGluDXB1dCBmaWVsZCAiY3VyUGFyYW0iIGludG8gY3VycmVudFBhcmFtDWlmIGN1cnJl\nbnRQYXJhbSA9IDEgdGhlbg1TaG93QmFsbG9vbiAiVGhlcmUgaXMgbm8gcHJldmlvdXMg\ncGFyYW1ldGVyLiINZWxzZSBpZiBjdXJyZW50UGFyYW0gPSAyIHRoZW4NU2hvd0JhbGxv\nb24gIkNsaWNrIGhlcmUgdG8gZ2V0IHRoZSByZXN1bHQgcGFyYW1ldGVyLiINZWxzZSBp\nZiBjdXJyZW50UGFyYW0gPSAzIHRoZW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8g\nZ2V0IHRoZSBkaXJlY3QgcGFyYW1ldGVyLiINZWxzZQ1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBnZXQgdGhlIHByZXZpb3VzIHBhcmFtZXRlci4iDWVuZCBpZg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJy\nZW50UGFyYW0NaWYgY3VycmVudFBhcmFtID4gMSB0aGVuDVNhdmVQYXJhbQ1TaG93UGFy\nYW0gY3VycmVudFBhcmFtLTENSE1SZW1vdmVCYWxsb29uDWVsc2UNYmVlcA1lbmQgaWYN\nZW5kIG1vdXNlVXAAAAEyACsBAACYAFcArACNoAQAAAAAAAEAAAAMAAAAEE5ldwAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gYWRkIGEgbmV3IHBh\ncmFtZXRlci4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgZmllbGQgImN1\nclBhcmFtIiBpbnRvIGN1cnJlbnRQYXJhbQ1TYXZlUGFyYW0NcHV0IDEgKyBudW1iZXIg\nb2YgbGluZXMgb2YgYmtnbmQgZmllbGQgaWQgMTAgaW50byBuDXB1dCAiLD8/Pz8sPz8/\nPywwLCIgaW50byBsaW5lIG4gb2YgYmtnbmQgZmllbGQgaWQgMTANU2hvd1BhcmFtIG4N\nZW5kIG1vdXNlVXAAAALAACwBAACYAVoArAGQoAQAAAAAAAEAAAAMAAAAEERlbGV0ZQAA\nb24gTW91c2VXaXRoaW4NcHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJyZW50UGFy\nYW0NaWYgY3VycmVudFBhcmFtIDw9IDIgdGhlbg1TaG93QmFsbG9vbiAiVG8gZGVsZXRl\nIHRoZSBkaXJlY3QvcmVzdWx0IHBhcmFtZXRlciwgY2hhbmdlIGRhdGEgdHlwZSB0byBu\ndWxsIHJhdGhlciB0aGFuIGNsaWNraW5nIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJD\nbGljayBoZXJlIHRvIGRlbGV0ZSB0aGlzIHBhcmFtZXRlci4iDWVuZCBpZg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANYW5zd2VyICJEZWxldGUgdGhpcyBwYXJhbWV0ZXI/\nIiB3aXRoICJPSyIgb3IgIkNhbmNlbCINaWYgaXQgaXMgIkNhbmNlbCIgdGhlbiBleGl0\nIG1vdXNlVXANcHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJyZW50UGFyYW0NaWYg\nY3VycmVudFBhcmFtID4gMiB0aGVuDWRlbGV0ZSBsaW5lIGN1cnJlbnRQYXJhbSBvZiBi\na2duZCBmaWVsZCBpZCAxMA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGJrZ25kIGZpZWxk\nIGlkIDEwIGludG8gbg1pZiBjdXJyZW50UGFyYW0gPiBuIHRoZW4Nc3VidHJhY3QgMSBm\ncm9tIGN1cnJlbnRQYXJhbQ1lbmQgaWYNU2hvd1BhcmFtIGN1cnJlbnRQYXJhbQ1lbHNl\nDXB1dCAibnVsbCIgaW50byBia2duZCBmaWVsZCBpZCA4DWVuZCBpZg1lbmQgbW91c2VV\ncAAAAVIALQEAAJgBHACsAVKgBAAAAAAAAQAAAAwAAAAQSW5zZXJ0AABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiQWRkIGEgbmV3IHBhcmFtZXRlciBhZnRlciB0aGlzIG9u\nZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgZmllbGQgImN1clBhcmFt\nIiBpbnRvIGN1cnJlbnRQYXJhbQ1pZiBjdXJyZW50UGFyYW0gPSAxIHRoZW4NcHV0IDIg\naW50byBjdXJyZW50UGFyYW0NZW5kIGlmDXB1dCByZXR1cm4gJiAiLD8/Pz8sPz8/Pyww\nLCIgYWZ0ZXIgbGluZSBjdXJyZW50UGFyYW0gb2YgYmtnbmQgZmllbGQgaWQgMTANU2hv\nd1BhcmFtIGN1cnJlbnRQYXJhbSsxDWVuZCBtb3VzZVVwAAAB6gAuAQAAcQACAIUAWKAE\nAAAAAAABAAAADAAAABBIaWRlIHNjcmlwdAAAb24gTW91c2VXaXRoaW4NaWYgdGhlIHNo\nb3J0IG5hbWUgb2YgbWUgaXMgIlNob3cgU2NyaXB0IiB0aGVuDVNob3dCYWxsb29uICJT\naG93IHRoZSBzY3JpcHQgZm9yIHRoaXMgZXZlbnQuIg1lbHNlDVNob3dCYWxsb29uICJI\naWRlIHRoZSBzY3JpcHQgZm9yIHRoaXMgZXZlbnQuIg1lbmQgaWYNZW5kIE1vdXNlV2l0\naGluDQ1vbiBtb3VzZVVwDWlmIHRoZSBzaG9ydCBuYW1lIG9mIG1lIGlzICJTaG93IFNj\ncmlwdCIgdGhlbg1TYXZlUGFyYW0NSE1SZW1vdmVCYWxsb29uDXNob3cgZmllbGQgInNj\ncmlwdFRlbXBsYXRlIg1zZXQgdGhlIG5hbWUgb2YgbWUgdG8gIkhpZGUgU2NyaXB0Ig1l\nbHNlDUhNUmVtb3ZlQmFsbG9vbg1TaG93UGFyYW0gMQ1oaWRlIGZpZWxkICJzY3JpcHRU\nZW1wbGF0ZSINc2V0IHRoZSBuYW1lIG9mIG1lIHRvICJTaG93IFNjcmlwdCINZW5kIGlm\nDWVuZCBtb3VzZVVwDQAAAo4AMAIFAIcAAQFTAfsABwAAAAAAAAADAAwAAAAQc2NyaXB0\nVGVtcGxhdGUAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBp\nbnRlcmZhY2UgdG8gdGhlIGV2ZW50IGluIHlvdXIgcHJlZmVyZWQiIMINJiYgImxhbmd1\nYWdlLiBUbyBlZGl0IGEgcGFyYW1ldGVyIGNsaWNrIG9uIHRoZSBwYXJhbWV0ZXIuIg1l\nbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNldXANSE1SZW1vdmVCYWxsb29uDWdsb2JhbCBj\nbGllbnRMYW5nDWlmIG1lID0gIiIgdGhlbg1wdXQgMiBpbnRvIGluZGV4DWVsc2UNcHV0\nIHdvcmQgMiBvZiB0aGUgY2xpY2tMaW5lIGludG8gaW5kZXgNcHV0IGZpZWxkICJwYXJh\nbUluZm8iIGludG8geA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHggaW50byBuDWlmIChp\nbmRleCA+IDEpIGFuZCAoaXRlbSAzIG9mIGxpbmUgMiBvZiB4ID0gIm51bGwiKSB0aGVu\nIGFkZCAxIHRvIGluZGV4DWlmIGluZGV4ID4gbiB0aGVuIHB1dCBuIGludG8gaW5kZXgN\nZW5kIGlmDWlmIHRoZXJlIGlzIGEgYmcgYnRuICJIaWRlIFNjcmlwdCIgdGhlbiBzZXQg\ndGhlIG5hbWUgb2YgYmcgYnRuICJIaWRlIFNjcmlwdCIgdG8gIlNob3cgU2NyaXB0Ig1o\naWRlIGZpZWxkICJzY3JpcHRUZW1wbGF0ZSINU2hvd1BhcmFtIGluZGV4DWVuZCBtb3Vz\nZXVwDQ0AACoAMQKVAUQAAQFVABgAAgAAAAAAAAADAAwAAAAQY3VyUGFyYW0AAAAAACIA\nMgINABkAAAA0AF4AAAAAAAAAAAAVABgIAAAgAAAAAAFqADQBAAA6AbQAUgHSIAAAAAP2\nAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUg\ndG8gZ28gdG8gdGhlIHByZXZpb3VzIGV2ZW50IGluIHRoaXMgc3VpdGUuIg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANZ2V0IHRoZXJlIGlzIGEgY2FyZCAyIG9mIHRoaXMg\nYmtnbmQNaWYgbm90IGl0IHRoZW4gZXhpdCBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFt\nZSBvZiBjYXJkIDIgb2YgdGhpcyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUg\nb2YgdGhpcyBjYXJkIDw+IHggdGhlbg12aXN1YWwgd2lwZSByaWdodA1nbyBwcmV2IGNh\ncmQgb2YgdGhpcyBia2duZA1lbmQgaWYNZW5kIG1vdXNlVXAAASgANQEAADoB1QBSAfMg\nAAAAA/UAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBnbyB0byB0aGUgbmV4dCBldmVudCBpbiB0aGlzIHN1aXRlLiINZW5kIE1v\ndXNlV2l0aGluDQ1vbiBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBsYXN0IGNh\ncmQgb2YgdGhpcyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBj\nYXJkIDw+IHggdGhlbg12aXN1YWwgd2lwZSBsZWZ0DWdvIG5leHQgY2FyZCBvZiB0aGlz\nIGJrZ25kDWVuZCBpZg1lbmQgbW91c2VVcAACtgA3AQAAHQE+ADMBopAFAAAAAAABAAAA\nDAAAABBmcm9tIEFFVVQAAG9uIE1vdXNlV2l0aGluDWlmIGhpbGl0ZSBvZiBtZSB0aGVu\nDVNob3dCYWxsb29uICJUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBldmVudCBjb21l\ncyBmcm9tIHRoZSBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgeW91IG1vZGlmeSB0aGUg\nZXZlbnQsIHlvdSBzaG91bGQgY2xpY2sgaGVyZSBzbyB0aGF0IHRoZSBldmVudCIgwg0m\nJiAiZ29lcyB0byB0aGUgYWV0ZSByZXNvdXJjZS4iDWVsc2UNU2hvd0JhbGxvb24gIlRo\naXMgc2hvd3MgdGhlIGV2ZW50IGNvbWVzIGZyb20gdGhlIGFldGUgcmVzb3VyY2UuIiDC\nDSYmICJUaGVyZSBpcyBubyByZWFzb24gdG8gbWFyayBpdCBhcyBjb21pbmcgZnJvbSB0\naGUgYWV1dCByZXNvdXJjZS4iIMINJiYgIklmIHlvdSBpbnNpc3Qgb24gY2hhbmdpbmcg\naXQsIGNsaWNrIGhlcmUgd2l0aCBvcHRpb24ga2V5IGRvd24uIiDCDSYmICJJdCB3aWxs\nIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBhZXRlIHJlc291cmNlLiINZW5kIGlmDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgaGlsaXRlIG9mIHRhcmdldCBpbnRvIGN1\nclN0YXRlDWlmIGN1clN0YXRlIG9yICh0aGUgb3B0aW9uS2V5IGlzIGRvd24pIHRoZW4N\nc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IGN1clN0YXRlDWVuZCBpZg1lbmQgbW91\nc2VVcA0AACgAOQEAAB8A0gAxAP6AAAAAAAAAAQAAAAwAAAAQQ2xhc3M6AAAAAAD4ADsB\nAAARAcEAOAHooAAAABpAAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhlIGNhcmQgeW91IGxh\nc3QgdmlzaXRlZCLCDSYmInRoaXMgc2Vzc2lvbi4iDWVuZCBNb3VzZVdpdGhpbg0Nb24g\nbW91c2VVcA1nbG9iYWwgZ1doZXJlZnJvbQ1ITVJlbW92ZUJhbGxvb24NdmlzdWFsIGRp\nc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQgbW91c2VVcA0ABcwAPQGAAHEAEQCF\nAEugBAAAAAAAAQAAAAwAAAAQU2VuZCBpdAAAb24gTW91c2VXaXRoaW4NU2hvd1BzdHJC\nYWxsb29uICJUaGlzIHdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBpbiB0aGUgZmluYWwg\ndmVyc2lvbi4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgUmVzVHlwZShm\naWVsZCAiZXZlbnRDbGFzcyIpICYgUmVzVHlwZShmaWVsZCAiZXZlbnRJRCIpIGludG8g\nZXZlbnRJRA1wdXQgKGZpZWxkICJldmVudE5hbWUiKSAmICIsIiAmIGV2ZW50SUQgaW50\nbyBldmVudE5hbWUNcHV0IGZpZWxkICJwYXJhbUluZm8iIGludG8gcGFyYW1JbmZvDWRl\nbGV0ZSBsaW5lIDEgb2YgcGFyYW1JbmZvDXB1dCAiLS0tLSIgaW50byBpdGVtIDIgb2Yg\ncGFyYW1JbmZvDXB1dCBldmVudElEIGludG8gaXRlbSAxIG9mIHBhcmFtSW5mbw1zZXQg\nbG9ja3NjcmVlbiB0byB0cnVlIC0tIHNvIHdlIGNhbiBzZWUgdGhlIGZpZWxkIGxhdGVy\nDWdvIGNhcmQgIlNlbmRBRSINaWYgdGhlIHJlc3VsdCA9ICIiIHRoZW4NcHV0IHdvcmQg\nMSBvZiBzaG9ydCBuYW1lIG9mIGNhcmQgYnV0dG9uIGlkIDQxICYgc3BhY2UgYmVmb3Jl\nIGV2ZW50TmFtZQ1zZXQgbmFtZSBvZiBjYXJkIGJ1dHRvbiBpZCA0MSB0byBldmVudE5h\nbWUNcHV0IHBhcmFtSW5mbyBpbnRvIGNhcmQgZmllbGQgInBhcmFtSW5mbyINcHV0IDEg\naW50byBjdXJGaWVsZA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRv\nIHBhcmFtQ291bnQNcmVwZWF0IHdpdGggcGFyYW1JbmRleCA9IDEgdG8gcGFyYW1Db3Vu\ndA1pZiAocGFyYW1JbmRleCA9IDEpIHRoZW4NaWYgKGl0ZW0gMyBvZiBsaW5lIDEgb2Yg\ncGFyYW1JbmZvIDw+ICJudWxsIikgdGhlbg1pZiAoaXRlbSA0IG9mIGxpbmUgMSBvZiBw\nYXJhbUluZm8pID4gMzI2MzcgdGhlbg1wdXQgIltkaXJlY3QgcGFyYW1ldGVyXSIgaW50\nbyBjYXJkIGZpZWxkIGlkIDENZWxzZQ1wdXQgImRpcmVjdCBwYXJhbWV0ZXIiIGludG8g\nY2FyZCBmaWVsZCBpZCAxDWVuZCBpZg1hZGQgMSB0byBjdXJGaWVsZA1lbmQgaWYNZWxz\nZQ1wdXQgbGluZSBwYXJhbUluZGV4IG9mIHBhcmFtSW5mbyBpbnRvIHgNaWYgKGl0ZW0g\nNCBvZiB4KSA+IDMyNjM3IHRoZW4NcHV0ICJbIiAmIChpdGVtIDEgb2YgeCkgJiAiXSIg\naW50byBjYXJkIGZpZWxkIGlkIGN1ckZpZWxkDWVsc2UNcHV0IGl0ZW0gMSBvZiB4IGlu\ndG8gY2FyZCBmaWVsZCBpZCBjdXJGaWVsZA1lbmQgaWYNYWRkIDEgdG8gY3VyRmllbGQN\nZW5kIGlmDWVuZCByZXBlYXQNcmVwZWF0IHdpdGggaSA9IDEgdG8gY3VyRmllbGQNc2hv\ndyBjYXJkIGZpZWxkIGlkIGkNcHV0ICIiIGludG8gY2FyZCBmaWVsZCBpZCAoaSsyMCkN\nc2hvdyBjYXJkIGZpZWxkIGlkIChpKzIwKQ1lbmQgcmVwZWF0DXJlcGVhdCB3aXRoIGkg\nPSBjdXJGaWVsZCB0byAyMA1oaWRlIGNhcmQgZmllbGQgaWQgaQ1oaWRlIGNhcmQgZmll\nbGQgaWQgKGkrMjApDWVuZCByZXBlYXQNZW5kIGlmDWVuZCBtb3VzZVVwAAAA+AA+AYAA\ncQABAIUAV6AEAAAAAAABAAAADAAAABBTaG93IFNjcmlwdAAAb24gTW91c2VXaXRoaW4N\nU2hvd0JhbGxvb24gIkhpZGUgdGhlIHNjcmlwdCBmb3IgdGhpcyBldmVudC4iDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA0tLSBTYXZlUGFyYW0NSE1SZW1vdmVCYWxsb29u\nDVNob3dQYXJhbSAxDWhpZGUgZmllbGQgInNjcmlwdFRlbXBsYXRlIg1zaG93IGJnIGJ0\nbiAiU2hvdyBTY3JpcHQiDWhpZGUgbWUNZW5kIG1vdXNlVXANAAAPAAYARXZlbnQAEQAD\nAElEAAASAAwARGVzY3JpcHRpb24AFwAMAERlc2NyaXB0aW9uABMACwBQYXJhbWV0ZXJz\nAAAUAAUATmFtZQAAFQAIAEtleXdvcmQAMgAHAEV2ZW50cwBldmVudHMAb24gb3BlbmNh\ncmQNZ2xvYmFsIGluRWRpdA1pZiBpbkVkaXQgdGhlbg1nbG9iYWwgY3VycmVudFN1aXRl\nLGN1cnJlbnROYW1lDVB1dCBmaWVsZCAic3VpdGVDb2RlIiBpbnRvIGN1cnJlbnRTdWl0\nZQ1wdXQgZmllbGQgImV2ZW50TmFtZSIgaW50byBjdXJyZW50TmFtZQ1pZiBmaWVsZCAi\nZXZlbnROYW1lIiA9ICIiIHRoZW4gLS0gZXZlbnQgbm90IHlldCBkZWZpbmVkDWhpZGUg\nZmllbGQgInNjcmlwdFRlbXBsYXRlIg1zZXQgdGhlIG5hbWUgb2YgYmcgYnV0dG9uIGlk\nIDQ2IHRvICJTaG93IHNjcmlwdCINU2hvd1BhcmFtIDENZWxzZQ1zaG93IGZpZWxkICJz\nY3JpcHRUZW1wbGF0ZSINc2V0IHRoZSBuYW1lIG9mIGJnIGJ1dHRvbiBpZCA0NiB0byAi\nSGlkZSBzY3JpcHQiDWVuZCBpZg1lbmQgaWYNUGFzcyBvcGVuY2FyZA1lbmQgb3BlbmNh\ncmQNDW9uIGNsb3NlY2FyZA1nbG9iYWwgaW5FZGl0DWlmIGZsZCBFdlBhcmFtTmFtZSBp\ncyBlbXB0eSB0aGVuDXB1dCAibWlzc2luZ05hbWUiJiIoIiZyYW5kb20oNTAwKSYiKSIg\naW50byBmbGQgRXZQYXJhbU5hbWUNZW5kIGlmDWlmIGluRWRpdCB0aGVuDWlmIGZpZWxk\nICJzdWl0ZUNvZGUiIDw+ICIqKioqIiB0aGVuDWdsb2JhbCBjdXJyZW50U3VpdGUsY3Vy\ncmVudE5hbWUNaWYgY3VycmVudFN1aXRlIDw+IGZpZWxkICJzdWl0ZUNvZGUiIHRoZW4N\ncHV0ICJzdWl0ZSIgJiYgZmllbGQgInN1aXRlQ29kZSIgaW50byBzdWl0ZU5hbWUNaWYg\nbm90ICh0aGVyZSBpcyBhIGNhcmQgc3VpdGVOYW1lKSB0aGVuDXB1dCBjdXJyZW50U3Vp\ndGUgaW50byBmaWVsZCAic3VpdGVDb2RlIg1hbnN3ZXIgc3VpdGVOYW1lICYgImRvZXMg\nbm90IGV4aXN0IGFuZCB3aWxsIG5vdCBiZSB1c2VkIg1lbmQgaWYNZW5kIGlmDWlmIG5v\ndCB0aGUgdmlzaWJsZSBvZiBmaWVsZCAic2NyaXB0VGVtcGxhdGUiIHRoZW4NU2F2ZVBh\ncmFtDXNob3cgZmllbGQgInNjcmlwdFRlbXBsYXRlIg1pZiB0aGVyZSBpcyBhIGJnIGJ0\nbiAic2hvdyBzY3JpcHQiIHRoZW4Nc2V0IHRoZSBuYW1lIG9mIGJnIGJ0biAic2hvdyBz\nY3JpcHQiIHRvICJIaWRlIHNjcmlwdCINZW5kIGlmDWVuZCBpZg1wdXQgY3VycmVudFN1\naXRlICYmIChzaG9ydCBuYW1lIG9mIHRoaXMgY2FyZCkgJiAiLCIgJiBjdXJyZW50TmFt\nZSBpbnRvIG9sZE5hbWUNcHV0IGZpZWxkICJzdWl0ZUNvZGUiICYmICJldmVudCIgJiYg\nUmVzVHlwZShmaWVsZCAiZXZlbnRDbGFzcyIpIMINJiBSZXNUeXBlKGZpZWxkICJldmVu\ndElEIikgJiAiLCIgJiBmaWVsZCAiZXZlbnROYW1lIiBpbnRvIG5ld05hbWUNaWYgbmV3\nTmFtZSA8PiBvbGROYW1lIHRoZW4NTmFtZUl0IG5ld05hbWUNQ2hhbmdlTmFtZSBvbGRO\nYW1lLCBuZXdOYW1lLCAiZXZlbnRMaXN0Ig1lbmQgaWYNUHV0IGZpZWxkICJzdWl0ZUNv\nZGUiIGludG8gY3VycmVudFN1aXRlDWVuZCBpZg1QYXNzIGNsb3NlY2FyZA1lbmQgaWYN\nZW5kIGNsb3NlY2FyZA0Nb24gbmV3Y2FyZA1nbG9iYWwgY3VycmVudFN1aXRlDXB1dCBj\ndXJyZW50U3VpdGUgaW50byBmaWVsZCBzdWl0ZUNvZGUNaWYgY3VycmVudFN1aXRlID0g\nImNvcmUiIHRoZW4NcHV0ICJhZXZ0IiBpbnRvIGZpZWxkIGV2ZW50Q2xhc3MNZWxzZQ1w\ndXQgY3VycmVudFN1aXRlIGludG8gZmllbGQgZXZlbnRDbGFzcw1lbmQgaWYNcHV0ICIs\nLG51bGwsMCwiIGludG8gbGluZSAxIG9mIGZpZWxkIGlkIDEwDXB1dCAiLCxudWxsLDAs\nIiBpbnRvIGxpbmUgMiBvZiBmaWVsZCBpZCAxMA1QYXNzIG5ld2NhcmQNZW5kIG5ld2Nh\ncmQNDW9uIGRlbGV0ZWNhcmQNQ2hhbmdlTmFtZSBmaWVsZCAic3VpdGVDb2RlIiAmJiBz\naG9ydCBuYW1lIG9mIHRoaXMgY2FyZCAmICIsIiAgJiBmaWVsZCAiZXZlbnROYW1lIiwg\nwg0iIiwgImV2ZW50TGlzdCINcGFzcyBkZWxldGVjYXJkDWVuZCBkZWxldGVjYXJkDQ1v\nbiBTaG93UGFyYW0gbg1wdXQgbiBpbnRvIGZpZWxkIGN1clBhcmFtDXB1dCBsaW5lIG4g\nb2YgZmllbGQgaWQgMTAgaW50byB4DXB1dCBpdGVtIDMgb2YgeCBpbnRvIGZpZWxkIGlk\nIDgNUmFkaW9BcnJheSBpdGVtIDQgb2YgeA1pZiBuIDwgMyB0aGVuDWlmIG4gPSAyIHRo\nZW4NcHV0ICJkaXJlY3Qgb2JqZWN0IiBpbnRvIGZpZWxkIGlkIDYNcHV0ICItLS0tIiBp\nbnRvIGZpZWxkIGlkIDcNc2V0IG5hbWUgb2YgYmcgYnV0dG9uIGlkIDI4IHRvICJDaGFu\nZ2UgU3RhdGUiDWVsc2UNcHV0ICJyZXBseSIgaW50byBmaWVsZCBpZCA2DXB1dCAicnBs\neSIgaW50byBmaWVsZCBpZCA3DXNldCBuYW1lIG9mIGJnIGJ1dHRvbiBpZCAyOCB0byAi\nUmVzZXJ2ZWQiDWVuZCBpZg1zZXQgbG9ja3RleHQgb2YgZmllbGQgaWQgNiB0byB0cnVl\nDXNldCBsb2NrdGV4dCBvZiBmaWVsZCBpZCA3IHRvIHRydWUNZWxzZQ1zZXQgbmFtZSBv\nZiBiZyBidXR0b24gaWQgMjggdG8gIlJlc2VydmVkIg1wdXQgaXRlbSAxIG9mIHggaW50\nbyBmaWVsZCBpZCA2DXB1dCBpdGVtIDIgb2YgeCBpbnRvIGZpZWxkIGlkIDcNc2V0IGxv\nY2t0ZXh0IG9mIGZpZWxkIGlkIDYgdG8gZmFsc2UNc2V0IGxvY2t0ZXh0IG9mIGZpZWxk\nIGlkIDcgdG8gZmFsc2UNZW5kIGlmDWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4DXB1dCB4\nIGludG8gYmtnbmQgZmllbGQgaWQgOQ1lbmQgU2hvd1BhcmFtDQ1vbiBTYXZlUGFyYW0N\ncHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJyZW50UGFyYW0NcHV0IGxpbmUgY3Vy\ncmVudFBhcmFtIG9mIGJrZ25kIGZpZWxkIGlkIDEwIGludG8gb2xkVmFsdWUNaWYgY3Vy\ncmVudFBhcmFtIDwgMyB0aGVuDXB1dCAiIiBpbnRvIGl0ZW0gMSBvZiB4DXB1dCAiIiBp\nbnRvIGl0ZW0gMiBvZiB4DWVsc2UNcHV0IGZpZWxkIGlkIDYgaW50byBpdGVtIDEgb2Yg\neA1wdXQgZmllbGQgaWQgNyBpbnRvIGl0ZW0gMiBvZiB4DWVuZCBpZg1wdXQgZmllbGQg\naWQgOCBpbnRvIGl0ZW0gMyBvZiB4DXB1dCAwIGludG8gbg1yZXBlYXQgd2l0aCBpID0g\nMjUgdG8gNDANbXVsdGlwbHkgbiBieSAyDWlmIGhpbGl0ZSBvZiBia2duZCBidXR0b24g\naWQgaSB0aGVuDWFkZCAxIHRvIG4NZW5kIGlmDWVuZCByZXBlYXQNcHV0IG4gaW50byBp\ndGVtIDQgb2YgeA1wdXQgYmtnbmQgZmllbGQgaWQgOSBpbnRvIHkNLS0gd2UgbXVzdCBy\nZW1vdmUgYWxsIGNhcnJpYWdlIHJldHVybiBmcm9tIHRoZSBjb21tYSBmaWVsZA1yZXBl\nYXQgdW50aWwgaSA9IDANcHV0IG9mZnNldChyZXR1cm4sIHkpIGludG8gaQ1pZiBpID4g\nMCB0aGVuIHB1dCBzcGFjZSBpbnRvIGNoYXIgaSBvZiB5DWVuZCByZXBlYXQNcHV0IHgg\nJiAiLCIgJiB5IGludG8gbmV3VmFsdWUNaWYgKG9sZFZhbHVlIDw+IG5ld1ZhbHVlKSBv\nciAoZmllbGQgInNjcmlwdFRlbXBsYXRlIiA9ICIiKSB0aGVuDXB1dCBuZXdWYWx1ZSBp\nbnRvIGxpbmUgY3VycmVudFBhcmFtIG9mIGJrZ25kIGZpZWxkIGlkIDEwDU1ha2VTY3Jp\ncHRUZW1wbGF0ZQ1lbmQgaWYNZW5kIFNhdmVQYXJhbQ0Nb24gTWFrZVNjcmlwdFRlbXBs\nYXRlDXB1dCBDbGllbnRUZW1wbGF0ZSgibXVsdGlMaW5lIikgaW50byBmaWVsZCAic2Ny\naXB0VGVtcGxhdGUiDWVuZCBNYWtlU2NyaXB0VGVtcGxhdGUNDW9uIFJhZGlvQXJyYXkg\nbg1yZXBlYXQgd2l0aCBpID0gMSB0byAxNg1pZiAobiBtb2QgMikgPSAxIHRoZW4Nc2V0\nIGhpbGl0ZSBvZiBia2duZCBidXR0b24gaWQgKDQxLWkpIHRvIHRydWUNZWxzZQ1zZXQg\naGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiBpZCAoNDEtaSkgdG8gZmFsc2UNZW5kIGlmDXB1\ndCBuIGRpdiAyIGludG8gbg1lbmQgcmVwZWF0DWVuZCBSYWRpb0FycmF5DQ1vbiBHdWVz\nc1BhcmFtVHlwZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3aGljaCBw\nYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgZmllbGQgInBhcmFtSW5mbyIgaW50\nbyBwYXJhbUluZm8NcHV0IG51bWJlciBvZiBsaW5lcyBpbiBwYXJhbUluZm8gaW50byBu\nDXJlcGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXB1dCBsaW5lIGluZGV4IG9mIHBhcmFt\nSW5mbyBpbnRvIHkNcHV0IGl0ZW0gMyBvZiB5IGludG8gZGF0YVR5cGUNaWYgKGRhdGFU\neXBlIDw+ICJudWxsIikgdGhlbg1wdXQgaXRlbSA0IG9mIHkgaW50byB0ZW1wDXB1dCBp\ndGVtIDMgb2YgeSBpbnRvIGRhdGFUeXBlDWlmIHRlbXAgPiAzMjc2NyB0aGVuDXN1YnRy\nYWN0IDMyNzY4IGZyb20gdGVtcA1lbmQgaWYNaWYgdGVtcCA+IDE2MzgzIHRoZW4NcHV0\nICJsaXN0IiBpbnRvIGRhdGFUeXBlDWVsc2UgaWYgdGVtcCA+IDgxOTEgdGhlbg1wdXQg\nImVudW0iIGludG8gZGF0YVR5cGUNZW5kIGlmDXB1dCAwIGludG8gcGFyYW1UeXBlDWlm\nIGRhdGFUeXBlID0gIlRFWFQiIHRoZW4NcHV0IDYgaW50byBwYXJhbVR5cGUNZWxzZSBp\nZiAoZGF0YVR5cGUgPSAiZW51bSIpIG9yIChkYXRhVHlwZSA9ICJib29sIikgb3IgKGRh\ndGFUeXBlID0gInRydWUiKSBvciAoZGF0YVR5cGUgPSAibG9uZyIpIHRoZW4NcHV0IDQg\naW50byBwYXJhbVR5cGUNZW5kIGlmDXB1dCBpdGVtIDQgb2YgeSBpbnRvIHRlbXANcHV0\nIHRlbXAgLSAodGVtcCBtb2QgOCkgKyBwYXJhbVR5cGUgaW50byBpdGVtIDQgb2YgeQ1w\ndXQgeSBpbnRvIGxpbmUgaW5kZXggb2YgcGFyYW1JbmZvDWVuZCBpZg1lbmQgcmVwZWF0\nDXB1dCBwYXJhbUluZm8gaW50byBmaWVsZCAicGFyYW1JbmZvIg1lbmQgR3Vlc3NQYXJh\nbVR5cGUNDWZ1bmN0aW9uIEdsdWVJbmZvIHBhcmFtSW5mbw1wdXQgIi0tLS0iIGludG8g\nZGFzaA1wdXQgInRoZVJlc3VsdCIgaW50byBpdGVtIDEgb2YgcGFyYW1JbmZvDXB1dCBk\nYXNoIGludG8gaXRlbSAyIG9mIHBhcmFtSW5mbw1wdXQgImRpcmVjdFBhcmFtIiBpbnRv\nIGl0ZW0gMSBvZiBsaW5lIDIgb2YgcGFyYW1JbmZvDXB1dCAiLS0tLSIgaW50byBpdGVt\nIDIgb2YgbGluZSAyIG9mIHBhcmFtSW5mbw1wdXQgbnVtYmVyIG9mIGxpbmVzIG9mIHBh\ncmFtSW5mbyBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1zZXQgY3Vyc29yIHRv\nIGJ1c3kNcHV0IGxpbmUgaSBvZiBwYXJhbUluZm8gaW50byB4DXB1dCBpdGVtIDQgb2Yg\neCBpbnRvIHRlbXANcHV0IHRlbXAgbW9kIDggaW50byBwYXJhbVR5cGUNcHV0IGl0ZW0g\nMyBvZiB4IGludG8gZGF0YVR5cGUNaWYgdGVtcCA+IDMyNzY3IHRoZW4NcHV0ICIsbyIg\nYWZ0ZXIgaXRlbSA0IG9mIHgNcHV0IHRydWUgaW50byBpc09wdGlvbmFsDXN1YnRyYWN0\nIDMyNzY4IGZyb20gdGVtcA1lbHNlDXB1dCAiLHIiIGFmdGVyIGl0ZW0gNCBvZiB4DXB1\ndCBmYWxzZSBpbnRvIGlzT3B0aW9uYWwNZW5kIGlmDWlmIHRlbXAgPiAxNjM4MyB0aGVu\nDXB1dCAibGlzdCIgaW50byBkYXRhVHlwZQ1lbHNlIGlmIHRlbXAgPiA4MTkxIHRoZW4N\ncHV0ICJlbnVtIiBpbnRvIGRhdGFUeXBlDWVuZCBpZg1pZiAoZGF0YVR5cGUgPSAib2Jq\nIikgb3IgKGRhdGFUeXBlID0gImxpc3QiKSBvciAoZGF0YVR5cGUgPSAiKioqKiIpIHRo\nZW4NaWYgcGFyYW1UeXBlIDw+IDIgdGhlbg1wdXQgMCBpbnRvIHBhcmFtVHlwZQ1lbmQg\naWYNZW5kIGlmDWlmIChwYXJhbVR5cGUgPSA2KSB0aGVuDWlmIGRhdGFUeXBlIDw+ICJU\nRVhUIiB0aGVuDXB1dCAwIGludG8gcGFyYW1UeXBlDWVuZCBpZg1lbHNlIGlmIChwYXJh\nbVR5cGUgPSA1KSBvciAocGFyYW1UeXBlID0gNykgdGhlbg1pZiBpID0gMSB0aGVuIHB1\ndCAwIGludG8gcGFyYW1UeXBlDWVuZCBpZg1pZiBpdGVtIDIgb2YgeCA9IGRhc2ggdGhl\nbg1wdXQgImtleURpcmVjdE9iamVjdCIgaW50byBpdGVtIDIgb2YgeA1lbHNlDS0tIHB1\ndCAia2V5QUUiICYgU3RyaXBTUChpdGVtIDEgb2YgeCkgaW50byBpdGVtIDIgb2YgeA1w\ndXQgIiciICYgUmVzVHlwZShpdGVtIDIgb2YgeCkgJiAiJyIgaW50byBpdGVtIDIgb2Yg\neA1lbmQgaWYNcHV0IFN0cmlwU1AoaXRlbSAxIG9mIHgsIHRydWUpIGludG8gaXRlbSAx\nIG9mIHgNcHV0ICJwdHJUbyIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBpbnRvIGl0ZW0g\nNiBvZiB4DWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgInNpemVPZiIgJiBTdHJpcFNQ\nKGl0ZW0gMSBvZiB4KSBpbnRvIGl0ZW0gNyBvZiB4DWVuZCBpZg1wdXQgZGF0YVR5cGUg\naW50byBpdGVtIDMgb2YgeA1wdXQgcGFyYW1UeXBlIGludG8gaXRlbSA0IG9mIHgNcHV0\nIHggaW50byBsaW5lIGkgb2YgcnN0DWVuZCByZXBlYXQNcmV0dXJuIHJzdA1lbmQgR2x1\nZUluZm8NDW9uIENob29zZVBhcmFtVHlwZQ1wdXQgIiIgaW50byBub3RGb3JOdWxsDWlm\nIGZpZWxkICJjdXJQYXJhbSIgPSAxIHRoZW4NcHV0ICIoIiBpbnRvIG5vdEZvclJlc3Vs\ndA1lbHNlDXB1dCAiIiBpbnRvIG5vdEZvclJlc3VsdA1lbmQgaWYNaWYgZmllbGQgaWQg\nOCA8PiAiVEVYVCIgdGhlbg1wdXQgIigiIGludG8gdGV4dE9ubHkNaWYgZmllbGQgaWQg\nOCA9ICJudWxsIiB0aGVuDXB1dCAiKCIgaW50byBub3RGb3JOdWxsDXB1dCAiKCIgaW50\nbyBub3RGb3JSZXN1bHQNZW5kIGlmDWVsc2UNcHV0ICIiIGludG8gdGV4dE9ubHkNZW5k\nIGlmDXB1dCBub3RGb3JOdWxsICYgIkRlc2NyaXB0b3IiICYgcmV0dXJuIGludG8gbWVu\ndQ1wdXQgbm90Rm9yTnVsbCAmICJIYW5kbGUiICYgcmV0dXJuIGFmdGVyIG1lbnUNcHV0\nICIoUmVzZXJ2ZWQiICYgcmV0dXJuIGFmdGVyIG1lbnUNcHV0ICIoUmVzZXJ2ZWQiICYg\ncmV0dXJuIGFmdGVyIG1lbnUNcHV0IG5vdEZvck51bGwgJiAiSW1tZWRpYXRlIiAmIHJl\ndHVybiBhZnRlciBtZW51DXB1dCBub3RGb3JSZXN1bHQgJiAiUG9pbnRlciBhbmQgU2l6\nZSIgJiByZXR1cm4gYWZ0ZXIgbWVudQ1wdXQgdGV4dE9ubHkgJiAiUGFzY2FsIFN0cmlu\nZyIgJiByZXR1cm4gYWZ0ZXIgbWVudQ1wdXQgbm90Rm9yUmVzdWx0ICYgdGV4dE9ubHkg\nJiAiQyBTdHJpbmciIGFmdGVyIG1lbnUNDXB1dCAwIGludG8gbg1yZXBlYXQgd2l0aCBp\nID0gMzggdG8gNDANbXVsdGlwbHkgbiBieSAyDWlmIGhpbGl0ZSBvZiBia2duZCBidXR0\nb24gaWQgaSB0aGVuDWFkZCAxIHRvIG4NZW5kIGlmDWVuZCByZXBlYXQNDXNldCBjdXJz\nb3IgdG8gYXJyb3cNcHV0IGl0ZW0gMSBvZiBIUG9wdXBNZW51KG1lbnUsbisxLFRoZSBN\nb3VzZVYtMTAsVGhlIE1vdXNlSC0zKSBpbnRvIHRoZUl0ZW0NaWYgdGhlSXRlbSA8PiAi\nIiB0aGVuDWlmIHRoZUl0ZW0gPSAiRGVzY3JpcHRvciIgdGhlbg1wdXQgMCBpbnRvIG4N\nZWxzZSBpZiB0aGVJdGVtID0gIkhhbmRsZSIgdGhlbg1wdXQgMSBpbnRvIG4NZWxzZSBp\nZiB0aGVJdGVtID0gIkltbWVkaWF0ZSIgdGhlbg1wdXQgNCBpbnRvIG4NZWxzZSBpZiB0\naGVJdGVtID0gIlBvaW50ZXIgYW5kIFNpemUiIHRoZW4NcHV0IDUgaW50byBuDWVsc2Ug\naWYgdGhlSXRlbSA9ICJQYXNjYWwgU3RyaW5nIiB0aGVuDXB1dCA2IGludG8gbg1lbHNl\nIGlmIHRoZUl0ZW0gPSAiQyBTdHJpbmciIHRoZW4NcHV0IDcgaW50byBuDWVuZCBpZg1w\ndXQgNCBpbnRvIG5iaXQNcmVwZWF0IHdpdGggaSA9IDM4IHRvIDQwDWlmIG4gPj0gbkJp\ndCB0aGVuDXN1YnRyYWN0IG5iaXQgZnJvbSBuDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0\ndG9uIGlkIGkgdG8gdHJ1ZQ1lbHNlDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uIGlk\nIGkgdG8gZmFsc2UNZW5kIGlmDXB1dCBuYml0IGRpdiAyIGludG8gbmJpdA1lbmQgcmVw\nZWF0DWVuZCBpZg1lbmQgQ2hvb3NlUGFyYW1UeXBlDQ0tLSBsYW5ndWFnZSBkZXBlbmRl\nbnQgcGFydA0NZnVuY3Rpb24gQ2xpZW50VGVtcGxhdGUgbXVsdGlMaW5lDS0tIGVpdGhl\nciByZXR1cm4gdGhlIHRlbXBsYXRlIG9yIHdoaWNoIHBhcmFtZXRlciBpcyBiZWluZyBj\nbGlja2VkDXB1dCBzcGFjZSAmIE51bVRvQ2hhcigxOTQpICYgcmV0dXJuICYgc3BhY2Ug\naW50byBjb250Q2hhcg1wdXQgZmllbGQgImV2ZW50TmFtZSIgaW50byB0ZW1wbGF0ZQ1w\ndXQgZmllbGQgInBhcmFtSW5mbyIgaW50byB4DXB1dCBudW1iZXIgb2YgbGluZXMgaW4g\neCBpbnRvIG4NcHV0IDAgaW50byBwYXJhbUluZGV4DXJlcGVhdCB3aXRoIGluZGV4ID0g\nMiB0byBuDXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgbGluZSBpbmRleCBvZiB4IGludG8g\neQ1wdXQgaXRlbSA0IG9mIHkgaW50byB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRv\nIGlzT3B0aW9uYWwNcHV0IHRlbXAgZGl2IDgxOTIgaW50byB0ZW1wDXB1dCAodGVtcCBt\nb2QgMiA9IDEpIGludG8gaXNFbnVtDXB1dCAiIiBpbnRvIGVudW1lcmF0ZWQNcHV0IChp\ndGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYgdXNlSXQgdGhlbg1hZGQg\nMSB0byBwYXJhbUluZGV4DS0tIGZvciBwcm90byBzdGF0ZW1lbnQNaWYgaXRlbSAzIG9m\nIHkgPSAidHJ1ZSIgdGhlbg1wdXQgInRydWUiIGludG8gdGhpc1BhcmFtDWVsc2UgaWYg\naW5kZXggPSAxIHRoZW4NcHV0ICJkaXJlY3RQYXJhbSIgaW50byB0aGlzUGFyYW0NZWxz\nZQ1wdXQgInBhcmFtIiBpbnRvIHRoaXNQYXJhbQ1lbmQgaWYNaWYgdXNlSXQgdGhlbg1p\nZiBtdWx0aUxpbmUgPSAibXVsdGlMaW5lIiB0aGVuDXB1dCBjb250Q2hhciBhZnRlciB0\nZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNaWYgaXNP\ncHRpb25hbCB0aGVuDXB1dCAiWyIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGluZGV4\nIDw+IDEgdGhlbg1wdXQgaXRlbSAxIG9mIHkgJiBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1l\nbmQgaWYNaWYgaXNFbnVtIHRoZW4NcHV0IEVudW1PcHRpb24oZmllbGQgInN1aXRlQ29k\nZSIsaXRlbSAzIG9mIHksZW51bWVyYXRlZCwxKSBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1\ndCB0aGlzUGFyYW0gYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGlzT3B0aW9uYWwgdGhl\nbg1wdXQgIl0iIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1lbmQgaWYNZW5kIGlmIC0tIHVz\nZUl0DWVuZCByZXBlYXQNcmV0dXJuIHRlbXBsYXRlDWVuZCBDbGllbnRUZW1wbGF0ZQ0A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoEJNQVAAABamAAAAAAAAAAAAAQAAAAAA\nAAFWAgAAAAAAAVYCAAAYAAAA6gH0AAAAAAAAAAAAAAAAAAABTED/////wf/////////A\n4wSFQP/////B/////////+DjBED/////wf/////////Q4wS5hkBVVVVVwVVVVVVVVVVQ\n4wRAKqqqqsGqqqqqqqqqoOMEv4G/gbqBjhJA4ysQAL+Bv4GjgYnjBME5kCAAAQgDCATj\nBMFEgCAAAQgBCATjBMFAsyQZxw4xOATjBMFAlKgFKQlJSATjBMFAlDAdKQlJSATjFETB\nlKglKQlJScAD4xQ4wZMkHScJMThAA+McQAOjheNqf/////AA42pAAEAAEACiheNqwABA\nAGAA4SwPgBUG4QzhLAzAFQbhDOEcDMHHhw8bZjw+YOEL4RwMwczMmZxmZmZg4QvhDMEP\njM4ZmGZmZuEM4QzBDM/HH5hmfmbhDOEMwQzMA5gYZmBm4QzhHAzBzEmYmGRiZmDhC+Ec\nDMHHhw8YeDw+YOELAAAAAAAAAAAAAAAAAAAAAAD///8AADCgQktHRAAAGGQAAAAAAAAZ\nUEAAAAAAAAADAAAehQAAFdgALgA+AAAj8AAJAAAAjgB+AAECBAAcAKUAMADWAAIAAAAA\nAAAABAAMAQAAEFN1aXRlQ29kZQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRo\naXMgaXMgdGhlIHN1aXRlIGNvZGUgb2YgdGhlIGNsYXNzLiINZW5kIE1vdXNlV2l0aGlu\nDQ0AAADGAAICBABAAFkAUwEJAAIAAAAAAAAABAAMAAAAEGNsYXNzTmFtZQAAb24gTW91\nc2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBu\nYW1lIG9mIHRoaXMgY2xhc3MgaGVyZS4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMg\ndGhlIG5hbWUgb2YgdGhpcyBjbGFzcy4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NAADA\nAAMCBABAAUoAUwF4AAIAAAAAAAAABAAMAAAAEGNsYXNzSUQAAG9uIE1vdXNlV2l0aGlu\nDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0aGUgSUQgb2YgdGhp\ncyBjbGFzcyBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgSUQgb2Yg\ndGhpcyBjbGFzcy4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4AAADUAAUCBABVAFkAhQH7\nAAcAAAAAAAAABAAJAAAADENsYXNzQ29tbWVudAAAb24gTW91c2VXaXRoaW4NaWYgIG1l\nIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEgY29tbWVudCBhYm91dCB0aGlz\nIGNsYXNzIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIGEgY29tbWVudCBh\nYm91dCB0aGlzIGNsYXNzLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0NDQAAAMYABgIE\nAK4AZgDBARkAAgAAAAAAAAAEAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMg\nIiIgdGhlbg1TaG93QmFsbG9vbiAiRW50ZXIgYSB0aGUgbmFtZSBmb3IgdGhpcyBwcm9w\nZXJ0eSBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgbmFtZSBvZiB0\naGlzIHByb3BlcnR5LiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbgAAALoABwIEAK4BbwDB\nAZ8AAgAAAAAAAAAEAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMgIiIgdGhl\nbg1TaG93QmFsbG9vbiAiRW50ZXIgYW4gSUQgZm9yIHRoaXMgcHJvcGVydHkuIg1lbHNl\nDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBJRCBmb3IgdGhpcyBwcm9wZXJ0eS4iDWVu\nZCBpZg1lbmQgTW91c2VXaXRoaW4AAOoACAIEAK4BzQDBAfsAAgAAAAAAAAAEAAwBAAAQ\nAABvbiBNb3VzZVdpdGhpbg1pZiBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJFbnVtIiB0\naGVuDVNob3dCYWxsb29uICJUaGUgY2xhc3Mgb2YgdGhlIHByb3BlcnR5IGlzIGFuIGVu\ndW1lcmF0b3IuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBjbGFzcyBvZiB0\naGUgcHJvcGVydHkiICYmIGZpZWxkIGlkIDYNZW5kIGlmDWVuZCBNb3VzZVdpdGhpbgAA\nANoACQIEAPAAWQEgAfsABwAAAAAAAAAEAAkAAAAMAABvbiBNb3VzZVdpdGhpbg1pZiAg\nbWUgaXMgIiIgdGhlbg1TaG93QmFsbG9vbiAiRW50ZXIgYSBjb21tZW50IGFib3V0IHRo\naXMgcHJvcGVydHkgaGVyZS4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMgYSBjb21t\nZW50IGFib3V0IHRoaXMgcHJvcGVydHkuIiAmJiBmaWVsZCBpZCA2DWVuZCBpZg1lbmQg\nTW91c2VXaXRoaW4NDQABRAAKAoUBLwBWAVYCAAAHAAAAAAAAAAQACQAAAAxwcm9wSW5m\nbwAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGxpc3Qgb2Yg\ndGhlIHByb3BlcnR5IG9mIHRoaXMgY2xhc3MsIiDCDSYmICJDbGljayBvbiB0aGUgb25l\nIHlvdSB3aXNoIHRvIGVkaXQuIg1lbmQgTW91c2VXaXRoaW4NDW9uIE1vdXNlVXANcHV0\nIHdvcmQgMiBvZiB0aGUgY2xpY2tMaW5lIGludG8gaQ1wdXQgdGhlIG51bWJlciBvZiBs\naW5lcyBpbiB0YXJnZXQgaW50byBuDWlmIChpID4gMCkgYW5kIChpIDw9IG4pIHRoZW4N\nU2hvd1BhcmFtIGkNZW5kIGlmDWVuZCBNb3VzZVVwAAAAZAALAQAAHQB8AC8ApKAAAAAA\nAAABABUADAEAABBTdWl0ZQAAb24gbW91c2VVcA1nbyB0byBjYXJkICgic3VpdGUiICYm\nIGZpZWxkIHN1aXRlQ29kZSkNZW5kIG1vdXNlVXAAACoADwINAEIABQBRAFoAAAAAAAD/\n/wAVAAwBAAAQY2xhc3NOYW1lAAAAACIAEAIdAEIBHABUAUsAAAAAAAD//wAVAAwBAAAQ\nAAAAAAAiABICDQBUAAkAZABaAAAAAAAAAAAAFQAMAQAAEAAAAAAAIgATAg0AjgABAKAA\nZwAAAAAAAAAAABUAEAEAABUAAAAAACIAFAINALAAAADBAGcAAAAAAAD//wAVAAwBAAAQ\nAAAAAAAiABUCDQCwASAAwQFwAAAAAAAA//8AFQAMAQAAEAAAAAAAIgAXAg0A7wAJAP8A\nWgAAAAAAAP//ABUADAEAABAAAAAAARYAGAEAAK8BpQDAAcugAAAAAAAAAQAVAAwBAAAQ\nQ2xhc3MAAG9uIE1vdXNlV2l0aGluDWlmIGhpbGl0ZSBvZiBia2duZCBidXR0b24gIkVu\ndW0iIHRoZW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIGVudW1l\ncmF0aW9uIiAmJiAoZmllbGQgaWQgOCkgJiAiLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1ITVJlbW92ZUJhbGxvbg1nbyBjYXJkIChmaWVsZCAic3VpdGVD\nb2RlIikgJiYgImNsYXNzIiAmJiBmaWVsZCBpZCA4DWVuZCBtb3VzZVVwAAAAtgAZAQAA\nzwACAOEAH4AFAAAAAAABAAAADAAAABAwAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBv\nZiB0YXJnZXQpDWVuZCBtb3VzZVVwAADyABoBAADPACAA4QBPgAUAAAAAAAEAAAAMAAAA\nEExpc3QAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJJZiB0aGlzIGJveCBpcyBj\naGVja2VkLCB0aGVuIHRoZSBwYXJhbWV0ZXIgaXMgYSBsaXN0IG9mIiDCDSYmcXVvdGUm\nIGZpZWxkIGlkIDggJnF1b3RlJiAiLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5k\nIG1vdXNlVXAAARQAGwEAAM8ATgDhAIiABQAAAAAAAQAAAAwAAAAQRW51bQAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIklmIHRoaXMgYm94IGlzIGNoZWNrZWQsIHRoZW4g\ndGhpcyBwYXJhbWV0ZXIgaXMgYW4gZW51bWVyYXRlZCBvbmUgd2l0aCB0aGUgZW51bWVy\nYXRpb24gaWQiIMINJiZxdW90ZSYgZmllbGQgaWQgOCAmIHF1b3RlJiIuIg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90ICho\naWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAANYAHAEAAM8AhwDhAOHABQAAAAAA\nAQAAAAwAAAAQUmVhZFdyaXRlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiSW5k\naWNhdGVzIHdoZXRoZXIgeW91IGNhbiB3cml0ZSB0byB0aGlzIHByb3BlcnR5IG9yIG5v\ndC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdl\ndCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAC2AB0BAADQATEA\n4QFCAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRo\naXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9u\nIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFy\nZ2V0KQ1lbmQgbW91c2VVcAAAALYAHgEAANABQgDhAVMABQAAAAAAAQAAAAwAAAAQAABv\nbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0\ndXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9m\nIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAf\nAQAA0AFTAOEBZAAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxs\nb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0\naGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRl\nIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAC2ACABAADQAWQA4QF1AAUAAAAAAAEAAAAM\nAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQg\nZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhp\nbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VV\ncAAAALYAIQEAANABdQDhAYYABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3Qg\nKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAiAQAA0AGGAOEBlwAFAAAA\nAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHJl\nc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5k\nIG1vdXNlVXAAAAC2ACMBAADQAZcA4QGoAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VX\naXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Uu\nIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQg\ndG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAJAEAANABqADh\nAbkABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhp\ncyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24g\nbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJn\nZXQpDWVuZCBtb3VzZVVwAAAAtgAlAQAA0AG5AOEBygAFAAAAAAABAAAADAAAABAAAG9u\nIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1\ncmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2Yg\ndGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAC2ACYB\nAADQAcoA4QHbAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxv\nb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRo\naW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUg\nb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAJwEAANAB2wDhAewABQAAAAAAAQAAAAwA\nAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBm\nb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGls\naXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVw\nAAAAtgAoAQAA0AHsAOEB/QAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1v\ndXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAo\naGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAEoACkBAACNANsAoQERoAIAAAAA\nAAEAAAAMAAAAEE5leHQgPgAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNr\nIGhlcmUgdG8gdmlldyB0aGUgbmV4dCBwcm9wZXJ0eSBpbiB0aGUgcHJvcGVydHkgbGlz\ndC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1nbG9iYWwgY3VycmVudFBhcmFt\nDWlmIGxpbmUgKGN1cnJlbnRQYXJhbSsxKSBvZiBia2duZCBmaWVsZCBpZCAxMCA8PiAi\nIiB0aGVuDVNhdmVQYXJhbQ1TaG93UGFyYW0gY3VycmVudFBhcmFtKzENZWxzZQ1iZWVw\nDWVuZCBpZg1lbmQgbW91c2VVcAAAAQoAKgEAAI0AowChANmgAgAAAAAAAQAAAAwAAAAQ\nPCBQcmV2AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byB2\naWV3IGEgcHJldmlvdXMgcHJvcGVydHkgaW4gdGhlIHByb3BlcnR5IGxpc3QuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGN1cnJlbnRQYXJhbQ1pZiBjdXJy\nZW50UGFyYW0gPiAxIHRoZW4NU2F2ZVBhcmFtDVNob3dQYXJhbSBjdXJyZW50UGFyYW0t\nMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVwAAABNAArAQAAjQBmAKEAnKAEAAAA\nAAABAAAADAAAABBOZXcAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBo\nZXJlIHRvIGFkZCBhIG5ldyBwcm9wZXJ0eSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiIN\nZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NU2F2\nZVBhcmFtDXB1dCAxICsgbnVtYmVyIG9mIGxpbmVzIG9mIGJrZ25kIGZpZWxkIGlkIDEw\nIGludG8gbg1wdXQgIiw/Pz8/LD8/Pz8sMCwiIGludG8gbGluZSBuIG9mIGJrZ25kIGZp\nZWxkIGlkIDEwDVNob3dQYXJhbSBuDWVuZCBtb3VzZVVwAAGAACwBAACNAXIAoQGooAQA\nAAAAAAEAAAAMAAAAEERlbGV0ZQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNs\naWNrIGhlcmUgdG8gZGVsZXRlIHRoaXMgcHJvcGVydHkuIg1lbmQgTW91c2VXaXRoaW4N\nDW9uIG1vdXNlVXANZ2xvYmFsIGN1cnJlbnRQYXJhbQ1pZiBjdXJyZW50UGFyYW0gPSAw\nIHRoZW4NYmVlcA1lbHNlDWRlbGV0ZSBsaW5lIGN1cnJlbnRQYXJhbSBvZiBia2duZCBm\naWVsZCBpZCAxMA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGJrZ25kIGZpZWxkIGlkIDEw\nIGludG8gbg1pZiBjdXJyZW50UGFyYW0gPiBuIHRoZW4Nc3VidHJhY3QgMSBmcm9tIGN1\ncnJlbnRQYXJhbQ1lbmQgaWYNU2hvd1BhcmFtIGN1cnJlbnRQYXJhbQ1lbmQgaWYNZW5k\nIG1vdXNlVXAAAAEUAC0BAACNATYAoQFsoAQAAAAAAAEAAAAMAAAAEEluc2VydAAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gYWRkIGEgbmV3IHBy\nb3BlcnR5IGFmdGVyIHRoaXMgb25lLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDWdsb2JhbCBjdXJyZW50UGFyYW0NcHV0IHJldHVybiAmICIsPz8/Pyw/Pz8/LDAsIiBh\nZnRlciBsaW5lIGN1cnJlbnRQYXJhbSBvZiBia2duZCBmaWVsZCBpZCAxMA1TaG93UGFy\nYW0gY3VycmVudFBhcmFtKzENZW5kIG1vdXNlVXAAAAAiADACDQEhABcBMgBaAAAAAAAA\nAAAAFQAMAQAAEAAAAAABZAAxAgQBIgBZAVIB+wAHAAAAAAAAAAQACQAAAAxlbGVtZW50\ncwAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGxpc3Qgb2Yg\nZWxlbWVudHMgaW4gdGhlIGNsYXNzLiIgwg0mJiAiRWFjaCBsaW5lIGlzIGFuIGVsZW1l\nbnQsIHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggbGluZSBpcyB0aGUgZWxlbWVudCBjbGFz\ncywiIMINJiYgInRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIHRoZSBrZXkgZm9ybXMuIEN1\ncnJlbnRseSB0aGVyZSBpcyBubyIgwg0mJiAic3BlY2lhbCB1c2VyIGludGVyZmFjZSBi\nZXNpZGVzIHRleHQgZW50cnkgZm9yIGVkaXRpbmcgdGhlc2UgZWxlbWVudHMuIg1lbmQg\nTW91c2VXaXRoaW4NAAFqADMBAAA6AbQAUgHSIAAAAAP2AAEAAAAMAAAAEAAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIHByZXZp\nb3VzIGNsYXNzIGluIHRoaXMgc3VpdGUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNl\nVXANZ2V0IHRoZXJlIGlzIGEgY2FyZCAyIG9mIHRoaXMgYmtnbmQNaWYgbm90IGl0IHRo\nZW4gZXhpdCBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBjYXJkIDIgb2YgdGhp\ncyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkIDw+IHgg\ndGhlbg12aXN1YWwgd2lwZSByaWdodA1nbyBwcmV2IGNhcmQgb2YgdGhpcyBia2duZA1l\nbmQgaWYNZW5kIG1vdXNlVXAAASgANAEAADoB1QBSAfMgAAAAA/UAAQAAAAwAAAAQAABv\nbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0byB0aGUg\nbmV4dCBjbGFzcyBpbiB0aGlzIHN1aXRlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3Vz\nZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBsYXN0IGNhcmQgb2YgdGhpcyBia2duZCBp\nbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkIDw+IHggdGhlbg12aXN1\nYWwgd2lwZSBsZWZ0DWdvIG5leHQgY2FyZCBvZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQg\nbW91c2VVcAAC2gA2AQAAHQE+ADMBopAFAAAAAAABAAAADAAAABBmcm9tIEFFVVQAAG9u\nIE1vdXNlV2l0aGluDWlmIGhpbGl0ZSBvZiBtZSB0aGVuDVNob3dCYWxsb29uICJUaGlz\nIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgY2xhc3MgY29tZXMgZnJvbSB0aGUgYWV1dCBy\nZXNvdXJjZS4iIMINJiYgIklmIHlvdSBtb2RpZnkgdGhlIGNsYXNzLCB5b3Ugc2hvdWxk\nIGNsaWNrIGhlcmUgc28gdGhhdCB0aGUgY2xhc3MiIMINJiYgImdvZXMgdG8gdGhlIGFl\ndGUgcmVzb3VyY2UuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIHNob3dzIHRoZSBjbGFz\ncyBjb21lcyBmcm9tIHRoZSBhZXRlIHJlc291cmNlLiIgwg0mJiAiVGhlcmUgaXMgbm8g\ncmVhc29uIHRvIG1hcmsgaXQgYXMgY29taW5nIGZyb20gdGhlIGFldXQgcmVzb3VyY2Uu\nIiDCDSYmICJJZiB5b3UgaW5zaXN0IG9uIGNoYW5naW5nIGl0LCBjbGljayBoZXJlIHdp\ndGggb3B0aW9uIGtleSBkb3duLiIgwg0mJiAiSXQgd2lsbCBub3QgYmUgd3JpdHRlbiB0\nbyB0aGUgYWV0ZSByZXNvdXJjZS4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NDW9uIG1v\ndXNlVXANcHV0IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgaW50byBj\ndXJTdGF0ZQ1pZiBjdXJTdGF0ZSBvciAodGhlIG9wdGlvbktleSBpcyBkb3duKSB0aGVu\nDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIHRvIG5vdCBjdXJT\ndGF0ZQ1lbmQgaWYNZW5kIG1vdXNlVXAAACIAOgINABkAAAA5AHYAAAAAAAAAAAAVABgI\nAAAgAAAAAAD4ADsBAAARAcEAOAHooAAAABpAAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhl\nIGNhcmQgeW91IGxhc3QgdmlzaXRlZCLCDSYmInRoaXMgc2Vzc2lvbi4iDWVuZCBNb3Vz\nZVdpdGhpbg0Nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlZnJvbQ1ITVJlbW92ZUJhbGxv\nb24NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQgbW91c2VVcA0A\nAA8ACwBDbGFzcyBOYW1lAAAQAAMASUQAABIADABEZXNjcmlwdGlvbgAXAAwARGVzY3Jp\ncHRpb24AEwALAFByb3BlcnRpZXMAABQADgBQcm9wZXJ0eSBOYW1lABUADABQcm9wZXJ0\neSBJRAAwAAkARWxlbWVudHMAADoAEYAKAAAABAAHAAZDbGFzc2VzAGNsYXNzAG9uIG9w\nZW5jYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4NZ2xvYmFsIGN1cnJlbnRT\ndWl0ZSxjdXJyZW50TmFtZQ1QdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJyZW50\nU3VpdGUNcHV0IGZpZWxkICJjbGFzc05hbWUiIGludG8gY3VycmVudE5hbWUNU2hvd1Bh\ncmFtIDENZW5kIGlmDVBhc3Mgb3BlbmNhcmQNZW5kIG9wZW5jYXJkDQ1vbiBjbG9zZWNh\ncmQNZ2xvYmFsIGluRWRpdA1pZiBpbkVkaXQgdGhlbg1nbG9iYWwgY3VycmVudFN1aXRl\nLGN1cnJlbnROYW1lDWlmIGZpZWxkICJzdWl0ZUNvZGUiIDw+ICIqKioqIiB0aGVuDWlm\nIGN1cnJlbnRTdWl0ZSA8PiBmaWVsZCAic3VpdGVDb2RlIiB0aGVuDXB1dCAic3VpdGUi\nICYmIGZpZWxkICJzdWl0ZUNvZGUiIGludG8gc3VpdGVOYW1lDWlmIG5vdCAodGhlcmUg\naXMgYSBjYXJkIHN1aXRlTmFtZSkgdGhlbg1wdXQgY3VycmVudFN1aXRlIGludG8gZmll\nbGQgInN1aXRlQ29kZSINYW5zd2VyIHN1aXRlTmFtZSAmICJkb2VzIG5vdCBleGlzdCBh\nbmQgd2lsbCBub3QgYmUgdXNlZCINZW5kIGlmDWVuZCBpZg1TYXZlUGFyYW0NcHV0IGN1\ncnJlbnRTdWl0ZSAmJiAoc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQpICYgIiwiICYgY3Vy\ncmVudE5hbWUgaW50byBvbGROYW1lDXB1dCAoZmllbGQgInN1aXRlQ29kZSIpICYmICJj\nbGFzcyIgJiYgUmVzVHlwZShmaWVsZCAiY2xhc3NJRCIpIMINJiAiLCIgJiBmaWVsZCAi\nY2xhc3NOYW1lIiBpbnRvIG5ld05hbWUNaWYgbmV3TmFtZSA8PiBvbGROYW1lIHRoZW4N\nTmFtZUl0IG5ld05hbWUNQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1lLCAiY2xhc3NM\naXN0Ig1lbmQgaWYNUHV0IGZpZWxkICJzdWl0ZUNvZGUiIGludG8gY3VycmVudFN1aXRl\nDWVuZCBpZg1lbmQgaWYNUGFzcyBjbG9zZWNhcmQNZW5kIGNsb3NlY2FyZA0Nb24gY2xv\nc2VjYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4NZ2xvYmFsIGN1cnJlbnRT\ndWl0ZSxjdXJyZW50TmFtZQ1pZiBub3QgdGhlIHZpc2libGUgb2YgZmllbGQgInNjcmlw\ndFRlbXBsYXRlIiB0aGVuDVNhdmVQYXJhbQ1zaG93IGZpZWxkICJzY3JpcHRUZW1wbGF0\nZSINZW5kIGlmDXB1dCBmaWVsZCAic3VpdGVDb2RlIiAmJiAoc2hvcnQgbmFtZSBvZiB0\naGlzIGNhcmQpICYgIiwiICYgY3VycmVudE5hbWUgaW50byBvbGROYW1lDXB1dCBmaWVs\nZCAic3VpdGVDb2RlIiAmJiAiZXZlbnQiICYmIFJlc1R5cGUoZmllbGQgImV2ZW50Q2xh\nc3MiKSDCDSYgUmVzVHlwZShmaWVsZCAiZXZlbnRJRCIpICYgIiwiICYgZmllbGQgImV2\nZW50TmFtZSIgaW50byBuZXdOYW1lDWlmIG5ld05hbWUgPD4gb2xkTmFtZSB0aGVuDU5h\nbWVJdCBuZXdOYW1lDUNoYW5nZU5hbWUgb2xkTmFtZSwgbmV3TmFtZSwgImV2ZW50TGlz\ndCINZW5kIGlmDVB1dCBmaWVsZCAic3VpdGVDb2RlIiBpbnRvIGN1cnJlbnRTdWl0ZQ1Q\nYXNzIGNsb3NlY2FyZA1lbmQgaWYNZW5kIGNsb3NlY2FyZA0Nb24gbmV3Y2FyZA1nbG9i\nYWwgY3VycmVudFN1aXRlDXB1dCBjdXJyZW50U3VpdGUgaW50byBmaWVsZCBzdWl0ZUNv\nZGUNUGFzcyBuZXdjYXJkDWVuZCBuZXdjYXJkDQ1vbiBkZWxldGVjYXJkDUNoYW5nZU5h\nbWUgZmllbGQgInN1aXRlQ29kZSIgJiYgc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQgJiAi\nLCIgICYgZmllbGQgImNsYXNzTmFtZSIsIMINIiIsICJjbGFzc0xpc3QiDXBhc3MgZGVs\nZXRlY2FyZA1lbmQgZGVsZXRlY2FyZA0Nb24gU2hvd1BhcmFtIG4NZ2xvYmFsIGN1cnJl\nbnRQYXJhbQ1wdXQgbiBpbnRvIGN1cnJlbnRQYXJhbQ1pZiBuIDw+IDAgdGhlbg1wdXQg\nbGluZSBuIG9mIGZpZWxkIGlkIDEwIGludG8geA1lbHNlDXB1dCAiIiBpbnRvIHgNZW5k\nIGlmDWlmIHggPSAiIiB0aGVuDVJhZGlvQXJyYXkgMA1wdXQgdHJ1ZSBpbnRvIGxvY2tp\nbmcNcHV0IDAgaW50byBjdXJyZW50UGFyYW0NZWxzZQ1SYWRpb0FycmF5IGl0ZW0gNCBv\nZiB4DXB1dCBmYWxzZSBpbnRvIGxvY2tpbmcNZW5kIGlmDXB1dCBpdGVtIDMgb2YgeCBp\nbnRvIGZpZWxkIGlkIDgNcHV0IGl0ZW0gMSBvZiB4IGludG8gZmllbGQgaWQgNg1wdXQg\naXRlbSAyIG9mIHggaW50byBmaWVsZCBpZCA3DWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4\nDXB1dCB4IGludG8gYmtnbmQgZmllbGQgaWQgOQ1yZXBlYXQgd2l0aCBpID0gNiB0byA5\nDXNldCBsb2NrdGV4dCBvZiBmaWVsZCBpZCBpIHRvIGxvY2tpbmcNZW5kIHJlcGVhdA1l\nbmQgU2hvd1BhcmFtDQ1vbiBTYXZlUGFyYW0NZ2xvYmFsIGN1cnJlbnRQYXJhbQ1pZiBj\ndXJyZW50UGFyYW0gPD4gMCB0aGVuDWlmIGZpZWxkIGlkIDYgPD4gIiIgdGhlbg1wdXQg\nZmllbGQgaWQgNiBpbnRvIGl0ZW0gMSBvZiB4DXB1dCBmaWVsZCBpZCA3IGludG8gaXRl\nbSAyIG9mIHgNcHV0IGZpZWxkIGlkIDggaW50byBpdGVtIDMgb2YgeA1wdXQgMCBpbnRv\nIG4NcmVwZWF0IHdpdGggaSA9IDI1IHRvIDQwDW11bHRpcGx5IG4gYnkgMg1pZiBoaWxp\ndGUgb2YgYmtnbmQgYnV0dG9uIGlkIGkgdGhlbg1hZGQgMSB0byBuDWVuZCBpZg1lbmQg\ncmVwZWF0DXB1dCBuIGludG8gaXRlbSA0IG9mIHgNcHV0IGJrZ25kIGZpZWxkIGlkIDkg\naW50byB5DS0tIHdlIG11c3QgcmVtb3ZlIGFsbCBjYXJyaWFnZSByZXR1cm4gZnJvbSB0\naGUgY29tbWVudCBmaWVsZA1yZXBlYXQgdW50aWwgaSA9IDANcHV0IG9mZnNldChyZXR1\ncm4sIHkpIGludG8gaQ1pZiBpID4gMCB0aGVuIHB1dCBzcGFjZSBpbnRvIGNoYXIgaSBv\nZiB5DWVuZCByZXBlYXQNcHV0IHggJiAiLCIgJiB5IGludG8gbGluZSBjdXJyZW50UGFy\nYW0gb2YgYmtnbmQgZmllbGQgaWQgMTANZW5kIGlmDWVuZCBpZg1lbmQgU2F2ZVBhcmFt\nDQ1vbiBSYWRpb0FycmF5IG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gMTYNaWYgKG4gbW9k\nIDIpID0gMSB0aGVuDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uIGlkICg0MS1pKSB0\nbyB0cnVlDWVsc2UNc2V0IGhpbGl0ZSBvZiBia2duZCBidXR0b24gaWQgKDQxLWkpIHRv\nIGZhbHNlDWVuZCBpZg1wdXQgbiBkaXYgMiBpbnRvIG4NZW5kIHJlcGVhdA1lbmQgUmFk\naW9BcnJheQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEJNQVAAABlQAAAA\nAAAAAAAAAQAAAAAAAAFWAgAAAAAAAVYCAAAYAAAA3AEvAAAAAAAAAAAAAAAAAAAAsFD/\n/////8H//////////+ELhYodgOEKHcDhCrmGiWBVVVVVVVXBVVVVVVVVVUDhCmAqqqqq\nqqrBqqqqqqqqqoDhCr+Bv4G/gb+Bv4GB4R74FmAC4R7MFmAC4Q7BzHhw8bZjw+YC4Q7B\nzMzJmcZmZmYC4Q7B+MzhmYZmZmAC4Q7BzPxx+YZn5mAC4Q7BzMA5gYZmBmAC4Q7BzMSZ\niYZGJmYC4Q7BzHhw8YeDw+YCAP////8AAAD//wD//wD//////wAAG2BCS0dEAAAehQAA\nAAAAABrtAAAAAAAAAAMAAByvAAAYZAAXADoAABMiAAcAAAB0AIQAAQIEAB8A3gAxAQgA\nAgAAAAAAAAAEAAwBAAAQU3VpdGVDb2RlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiVGhpcyBpcyB0aGUgc3VpdGUgY29kZSBvZiB0aGlzIGVudW1lcmF0aW9uLiINZW5k\nIE1vdXNlV2l0aGluDQ0AANAAAwIEAB8BIwAyAVoAAgAAAAAAAAAEAAwAAAAQZW51bWVy\nYXRpb24AAG9uIE1vdXNlV2l0aGluDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29u\nICJFbnRlciB0aGUgSUQgb2YgdGhpcyBlbnVtZXJhdGlvbiBoZXJlLiINZWxzZQ1TaG93\nQmFsbG9vbiAiVGhpcyBpcyB0aGUgSUQgb2YgdGhpcyBlbnVtZXJhdGlvbi4iDWVuZCBp\nZg1lbmQgTW91c2VXaXRoaW4NAADgAAYCBABiASkAdAH8AAIAAAAAAAAABAAMAAAAEGVu\ndW1OYW1lAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMgIiIgdGhlbg1TaG93QmFsbG9v\nbiAiRW50ZXIgdGhlIG5hbWUgdGhlIGVudW1lcmF0b3IgYmVpbmcgZWRpdGVkLiINZWxz\nZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRvciBi\nZWluZyBlZGl0ZWQuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQAAANwABwIEAGIAbQB0\nAKEAAgAAAAAAAAAEAAwAAAAQZW51bUlEAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMg\nIiIgdGhlbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhlIElEIG9mIHRoZSBlbnVtZXJhdG9y\nIGJlaW5nIGVkaXRlZC4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIElEIG9m\nIHRoZSBlbnVtZXJhdG9yIGJlaW5nIGVkaXRlZC4iDWVuZCBpZg1lbmQgTW91c2VXaXRo\naW4NAADsAAkCBAB5AG0A5QH8AAcAAAAAAAAABAAJAAAADAAAb24gTW91c2VXaXRoaW4N\naWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBkZXNjcmlwdGlv\nbiBmb3IgdGhlIGVudW1lcmF0b3IgIGJlaW5nIGVkaXRlZC4iDWVsc2UNU2hvd0JhbGxv\nb24gIlRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgZW51bWVyYXRvciAgYmVp\nbmcgZWRpdGVkLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0AAV4ACgIFAOwAbQFUAfwA\nBwAAAAAAAAAEAAkAAAAMZW51bUluZm8AAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29u\nICJUaGlzIGlzIGxpc3Qgb2YgYWxsIHRoZSBlbnVtZXJhdG9ycyBpbiB0aGlzIGVudW1l\ncmF0aW9uLCIgwg0mJiAiY2xpY2sgb24gdGhlIGVudW1lcmF0b3IgeW91IHdpc2ggdG8g\nZWRpdC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gTW91c2VVcA1wdXQgd29yZCAyIG9mIHRo\nZSBjbGlja0xpbmUgaW50byBpDXB1dCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRhcmdl\ndCBpbnRvIG4NaWYgKGkgPiAwKSBhbmQgKGkgPD0gbikgdGhlbg1TYXZlUGFyYW0NU2hv\nd1BhcmFtIGkNZW5kIGlmDWVuZCBNb3VzZVVwAAAAZAALAQAAHwCzADEA3qAAAAAAAAAB\nAAAADAAAABBTdWl0ZQAAb24gbW91c2VVcA1nbyB0byBjYXJkICgic3VpdGUiICYmIGZp\nZWxkIHN1aXRlQ29kZSkNZW5kIG1vdXNlVXAAACIAEAIdACEBCgAzASQAAAAAAAD//wAV\nAAwBAAAQAAAAAAAiABMCDQBCAAAAWABoAAAAAAAAAAAAFQASAAAAGAAAAAAAIgAUAg0A\nZACpAHUBKgAAAAAAAP//ABUADAEAABAAAAAAACIAFQINAGQAAQB2AG4AAAAAAAD//wAV\nAAwBAAAQAAAAAAAiABcCDAB4ABIAigBuAAAAAAAA//8AFQAMAQAAEAAAAAABLAApAQAA\nQgDdAFYBE6ACAAAAAAABAAAADAAAABBOZXh0ID4AAG9uIE1vdXNlV2l0aGluDVNob3dC\nYWxsb29uICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBwcmV2aW91cyBlbnVtZXJhdG9y\nIGluIHRoZSBlbnVtZXJhdGlvbiBsaXN0LiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3Vz\nZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NaWYgbGluZSAoY3VycmVudFBhcmFtKzEpIG9m\nIGZpZWxkIGlkIDEwIDw+ICIiIHRoZW4NU2F2ZVBhcmFtDVNob3dQYXJhbSBjdXJyZW50\nUGFyYW0rMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVwAAABDgAqAQAAQgClAFYA\n26ACAAAAAAABAAAADAAAABA8IFByZXYAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29u\nICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBuZXh0IGVudW1lcmF0b3IgaW4gdGhlIGVu\ndW1lcmF0aW9uIGxpc3QuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFs\nIGN1cnJlbnRQYXJhbQ1pZiBjdXJyZW50UGFyYW0gPiAxIHRoZW4NU2F2ZVBhcmFtDVNo\nb3dQYXJhbSBjdXJyZW50UGFyYW0tMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVw\nAAABMAArAQAAQgBpAFYAn6AEAAAAAAABAAAADAAAABBOZXcAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGFkZCBhIG5ldyBlbnVtZXJhdG9yIHRv\nIHRoZSBlbmQgdGhlIGVudW1lcmF0aW9uLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3Vz\nZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NU2F2ZVBhcmFtDXB1dCAxICsgbnVtYmVyIG9m\nIGxpbmVzIG9mIGJrZ25kIGZpZWxkIGlkIDEwIGludG8gbg1wdXQgIiwsIiBpbnRvIGxp\nbmUgbiBvZiBia2duZCBmaWVsZCBpZCAxMA1TaG93UGFyYW0gbg1lbmQgbW91c2VVcAAA\nAYIALAEAAEIBXQBWAZOgBAAAAAAAAQAAAAwAAAAQRGVsZXRlAABvbiBNb3VzZVdpdGhp\nbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBkZWxldGUgdGhpcyBlbnVtZXJhdG9y\nLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0N\naWYgY3VycmVudFBhcmFtIDw+IDAgdGhlbg1kZWxldGUgbGluZSBjdXJyZW50UGFyYW0g\nb2YgYmtnbmQgZmllbGQgaWQgMTANcHV0IG51bWJlciBvZiBsaW5lcyBpbiBia2duZCBm\naWVsZCBpZCAxMCBpbnRvIG4NaWYgY3VycmVudFBhcmFtID4gbiB0aGVuDXN1YnRyYWN0\nIDEgZnJvbSBjdXJyZW50UGFyYW0NZW5kIGlmDVNob3dQYXJhbSBjdXJyZW50UGFyYW0N\nZWxzZQ1iZWVwDWVuZCBpZg1lbmQgbW91c2VVcAABCAAtAQAAQgEhAFYBV6AEAAAAAAAB\nAAAADAAAABBJbnNlcnQAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBo\nZXJlIHRvIGluc2VydCBhIG5ldyBlbnVtZXJhdG9yIGFmdGVyIHRoaXMgb25lLiINZW5k\nIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NcHV0IHJl\ndHVybiAmICIsLCIgYWZ0ZXIgbGluZSBjdXJyZW50UGFyYW0gb2YgZmllbGQgaWQgMTAN\nU2hvd1BhcmFtIGN1cnJlbnRQYXJhbSsxDWVuZCBtb3VzZVVwAAAAIgAyAg0AGQAAADYA\nswAAAAAAAAAAABUAGAgAACAAAAAAAXAAMwEAADoBtABSAdIgAAAAA/YAAQAAAAwAAAAQ\nAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0byB0\naGUgcHJldmlvdXMgZW51bWVyYXRpb24gaW4gdGhpcyBzdWl0ZS4iDWVuZCBNb3VzZVdp\ndGhpbg0Nb24gbW91c2VVcA1nZXQgdGhlcmUgaXMgYSBjYXJkIDIgb2YgdGhpcyBia2du\nZA1pZiBub3QgaXQgdGhlbiBleGl0IG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1lIG9m\nIGNhcmQgMiBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFtZSBvZiB0\naGlzIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIHJpZ2h0DWdvIHByZXYgY2FyZCBv\nZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQgbW91c2VVcAABLgA0AQAAOgHVAFIB8yAAAAAD\n9QABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJl\nIHRvIGdvIHRvIHRoZSBuZXh0IGVudW1lcmF0aW9uIGluIHRoaXMgc3VpdGUuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1lIG9mIGxhc3Qg\nY2FyZCBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFtZSBvZiB0aGlz\nIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIGxlZnQNZ28gbmV4dCBjYXJkIG9mIHRo\naXMgYmtnbmQNZW5kIGlmDWVuZCBtb3VzZVVwAALsADYBAAAeAWEAMwG4kAUAAAAAAAEA\nAAAMAAAAEGZyb20gQUVVVAAAb24gTW91c2VXaXRoaW4NaWYgaGlsaXRlIG9mIG1lIHRo\nZW4NU2hvd0JhbGxvb24gIlRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudW1lcmF0\naW9uIGNvbWVzIGZyb20gdGhlIGFldXQgcmVzb3VyY2UuIiDCDSYmICJJZiB5b3UgbW9k\naWZ5IHRoZSBlbnVtZXJhdGlvbiwgeW91IHNob3VsZCBjbGljayBoZXJlIHNvIHRoYXQg\ndGhlIGNsYXNzIiDCDSYmICJnb2VzIHRvIHRoZSBhZXRlIHJlc291cmNlLiINZWxzZQ1T\naG93QmFsbG9vbiAiVGhpcyBzaG93cyB0aGUgZW51bWVyYXRpb24gY29tZXMgZnJvbSB0\naGUgYWV0ZSByZXNvdXJjZS4iIMINJiYgIlRoZXJlIGlzIG5vIHJlYXNvbiB0byBtYXJr\nIGl0IGFzIGNvbWluZyBmcm9tIHRoZSBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgeW91\nIGluc2lzdCBvbiBjaGFuZ2luZyBpdCwgY2xpY2sgaGVyZSB3aXRoIG9wdGlvbiBrZXkg\nZG93bi4iIMINJiYgIkl0IHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGFldGUgcmVz\nb3VyY2UuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXB1dCBoaWxp\ndGUgb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIGludG8gY3VyU3RhdGUNaWYgY3Vy\nU3RhdGUgb3IgKHRoZSBvcHRpb25LZXkgaXMgZG93bikgdGhlbg1zZXQgaGlsaXRlIG9m\nIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0byBub3QgY3VyU3RhdGUNZW5kIGlmDWVu\nZCBtb3VzZVVwAAAA+AA3AQAAEQHBADgB6KAAAAAaQAABAAAADAAAABBHbyBCYWNrAABv\nbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyBiYWNrIHRv\nIHRoZSBjYXJkIHlvdSBsYXN0IHZpc2l0ZWQiwg0mJiJ0aGlzIHNlc3Npb24uIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZWZyb20NSE1SZW1vdmVC\nYWxsb29uDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdvIGdXaGVyZUZyb20NZW5kIG1vdXNl\nVXANAAAiADoCDADrAAAA/QBuAAAAAAAA//8AFQAMAQAAEAAAAAAAEAADAElEAAAXAAwA\nRGVzY3JpcHRpb24AEwALAFBhcmFtZXRlcnMAABQAEABFbnVtZXJhdG9yIG5hbWUAFQAO\nAEVudW1lcmF0b3IgSUQAMgANAEVudW1lcmF0aW9ucwAAOgAQAEVudW1lcmF0b3IgTGlz\ndGVudW1lcmF0aW9uAG9uIG9wZW5jYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRo\nZW4NaWYgZmllbGQgInN1aXRlQ29kZSIgPD4gIioqKioiIHRoZW4NZ2xvYmFsIGN1cnJl\nbnRTdWl0ZQ1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJyZW50U3VpdGUNU2hv\nd1BhcmFtIDENZW5kIGlmDWVuZCBpZg1QYXNzIG9wZW5jYXJkDWVuZCBvcGVuY2FyZA0N\nb24gY2xvc2VjYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4NZ2xvYmFsIGN1\ncnJlbnRTdWl0ZQ1pZiBmaWVsZCAic3VpdGVDb2RlIiA8PiAiKioqKiIgdGhlbg1pZiBj\ndXJyZW50U3VpdGUgPD4gZmllbGQgInN1aXRlQ29kZSIgdGhlbg1wdXQgInN1aXRlIiAm\nJiBmaWVsZCAic3VpdGVDb2RlIiBpbnRvIHN1aXRlTmFtZQ1pZiBub3QgKHRoZXJlIGlz\nIGEgY2FyZCBzdWl0ZU5hbWUpIHRoZW4NcHV0IGN1cnJlbnRTdWl0ZSBpbnRvIGZpZWxk\nICJzdWl0ZUNvZGUiDWFuc3dlciBzdWl0ZU5hbWUgJiAiZG9lcyBub3QgZXhpc3QgYW5k\nIHdpbGwgbm90IGJlIHVzZWQiDWVuZCBpZg1lbmQgaWYNU2F2ZVBhcmFtDXB1dCBjdXJy\nZW50U3VpdGUgJiYgc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQgaW50byBvbGROYW1lDXB1\ndCAoZmllbGQgInN1aXRlQ29kZSIpICYmICJlbnVtZXJhdGlvbiIgJiYgUmVzVHlwZShm\naWVsZCAiZW51bWVyYXRpb24iKSBpbnRvIG5ld05hbWUNaWYgbmV3TmFtZSA8PiBvbGRO\nYW1lIHRoZW4NTmFtZUl0IG5ld05hbWUNQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1l\nLCAiZW51bUxpc3QiDWVuZCBpZg1QdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJy\nZW50U3VpdGUNZW5kIGlmDWVuZCBpZg1QYXNzIGNsb3NlY2FyZA1lbmQgY2xvc2VjYXJk\nDQ1vbiBuZXdjYXJkDWdsb2JhbCBjdXJyZW50U3VpdGUNcHV0IGN1cnJlbnRTdWl0ZSBp\nbnRvIGZpZWxkIHN1aXRlQ29kZQ1wdXQgIiwsIiBpbnRvIGxpbmUgMSBvZiBmaWVsZCBp\nZCAxMA1QYXNzIG5ld2NhcmQNZW5kIG5ld2NhcmQNDW9uIGRlbGV0ZWNhcmQNQ2hhbmdl\nTmFtZSBmaWVsZCAic3VpdGVDb2RlIiAmJiBzaG9ydCBuYW1lIG9mIHRoaXMgY2FyZCwg\nwg0iIiwgImVudW1MaXN0Ig1wYXNzIGRlbGV0ZWNhcmQNZW5kIGRlbGV0ZWNhcmQNDW9u\nIFNob3dQYXJhbSBuDWdsb2JhbCBjdXJyZW50UGFyYW0NcHV0IG4gaW50byBjdXJyZW50\nUGFyYW0NcHV0IGxpbmUgbiBvZiBmaWVsZCBpZCAxMCBpbnRvIHgNaWYgeCA9ICIiIHRo\nZW4NcHV0IDAgaW50byBjdXJyZW50UGFyYW0NcHV0IHRydWUgaW50byBsb2NraW5nDWVs\nc2UNcHV0IGl0ZW0gMSBvZiB4IGludG8gZmllbGQgaWQgNg1wdXQgaXRlbSAyIG9mIHgg\naW50byBmaWVsZCBpZCA3DWRlbGV0ZSBpdGVtIDEgdG8gMiBvZiB4DXB1dCB4IGludG8g\nZmllbGQgaWQgOQ1wdXQgZmFsc2UgaW50byBsb2NraW5nDWVuZCBpZg1zZXQgbG9ja3Rl\neHQgb2YgZmllbGQgaWQgNiB0byBsb2NraW5nDXNldCBsb2NrdGV4dCBvZiBmaWVsZCBp\nZCA3IHRvIGxvY2tpbmcNc2V0IGxvY2t0ZXh0IG9mIGZpZWxkIGlkIDkgdG8gbG9ja2lu\nZw1lbmQgU2hvd1BhcmFtDQ1vbiBTYXZlUGFyYW0NZ2xvYmFsIGN1cnJlbnRQYXJhbQ1p\nZiBjdXJyZW50UGFyYW0gPD4gMCB0aGVuDXB1dCBmaWVsZCBpZCA2IGludG8gaXRlbSAx\nIG9mIHgNcHV0IGZpZWxkIGlkIDcgaW50byBpdGVtIDIgb2YgeA1wdXQgZmllbGQgaWQg\nOSBpbnRvIHkNLS0gd2UgbXVzdCByZW1vdmUgYWxsIGNhcnJpYWdlIHJldHVybiBmcm9t\nIHRoZSBjb21tYSBmaWVsZA1yZXBlYXQgdW50aWwgaSA9IDANcHV0IG9mZnNldChyZXR1\ncm4sIHkpIGludG8gaQ1pZiBpID4gMCB0aGVuIHB1dCBzcGFjZSBpbnRvIGNoYXIgaSBv\nZiB5DWVuZCByZXBlYXQNcHV0IHggJiAiLCIgJiB5IGludG8gbGluZSBjdXJyZW50UGFy\nYW0gb2YgZmllbGQgaWQgMTANZW5kIGlmDWVuZCBTYXZlUGFyYW0NAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIBCTUFQAAAa7QAAAAAAAAAAAAEAAAAAAAABVgIAAAAAAAFWAgAAGAAA\nADcAsQAAAAAAAAAAAAAAAAAAACSMEIDhFAEChYrhJoAA4TUBgAC5ho4QgOElgACNEEDh\nJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgEJLR0QAAByvAAAAAAAA\nHxZAAAAAAAAAAQAADjwAAB6FAA0ADgAACqIABAAAADIAZAABAQAAIACjADIA1KAAAAAA\nAAABAAAADAAAABBTdWl0ZQAAb24gbW91c2VVcA1nbyB0byBjYXJkICgic3VpdGUiICYm\nIGZpZWxkIHN1aXRlQ29kZSkNZW5kIG1vdXNlVXAAAIgAAgIEACAAzgAyARYAAgAAAAAA\nAAAEAAwBAAAQU3VpdGVDb2RlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhp\ncyBpcyB0aGUgc3VpdGUgY29kZSBvZiB0aGlzIGNvbXBhcmUgb3BlcmF0b3IuIg1lbmQg\nTW91c2VXaXRoaW4NAAAiAAMCDABKACoAWwBZAAAAAAAA//8AFQAMAQAAEAAAAAAA4AAE\nAgQASABYAFsBCAACAAAAAAAAAAQADAAAABBjb21wYXJlTmFtZQAAb24gTW91c2VXaXRo\naW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBuYW1lIG9m\nIHRoaXMgY29tcGFyaXNvbiBvcGVyYXRvci4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMg\naXMgdGhlIG5hbWUgb2YgdGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZW5kIGlmDWVu\nZCBNb3VzZVdpdGhpbg0AAAAiAAUCHABKARMAXAFPAAAAAAAA//8AFQAMAQAAEAAAAAAA\n2gAGAgQASAFOAFoBgAACAAAAAAAAAAQADAAAABBjb21wYXJlSUQAAG9uIE1vdXNlV2l0\naGluDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0aGUgSUQgb2Yg\ndGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBp\ncyB0aGUgSUQgb2YgdGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZW5kIGlmDWVuZCBN\nb3VzZVdpdGhpbg0AAAAiAAcCDABsAAAAfABZAAAAAAAA//8AFQAMAQAAEAAAAAAA5gAI\nAgQAbQBYAN0B+wAHAAAAAAAAAAQACQAAAAxjb21wYXJlQ29tbWVudAAAb24gTW91c2VX\naXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEgY29tbWVu\ndCBmb3IgdGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZWxzZQ1TaG93QmFsbG9vbiAi\nVGhpcyBpcyBjb21tZW50IGFib3V0IHRoaXMgY29tcGFyaXNvbiBvcGVyYXRvci4iDWVu\nZCBpZg1lbmQgTW91c2VXaXRoaW4NAAAiAAkCDQAZAAAAOQCqAAAAAAAAAAAAFQAYCAAA\nIAAAAAABeAAKAQAAOgG0AFIB0iAAAAAD9gABAAAADAAAABAAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBwcmV2aW91cyBjb21w\nYXJpc29uIG9wZXJhdG9yIGluIHRoaXMgc3VpdGUuIg1lbmQgTW91c2VXaXRoaW4NDW9u\nIG1vdXNlVXANZ2V0IHRoZXJlIGlzIGEgY2FyZCAyIG9mIHRoaXMgYmtnbmQNaWYgbm90\nIGl0IHRoZW4gZXhpdCBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBjYXJkIDIg\nb2YgdGhpcyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJk\nIDw+IHggdGhlbg12aXN1YWwgd2lwZSByaWdodA1nbyBwcmV2IGNhcmQgb2YgdGhpcyBi\na2duZA1lbmQgaWYNZW5kIG1vdXNlVXAAATYACwEAADoB1QBSAfMgAAAAA/UAAQAAAAwA\nAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0\nbyB0aGUgbmV4dCBjb21wYXJpc29uIG9wZXJhdG9yIGluIHRoaXMgc3VpdGUuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1lIG9mIGxhc3Qg\nY2FyZCBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFtZSBvZiB0aGlz\nIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIGxlZnQNZ28gbmV4dCBjYXJkIG9mIHRo\naXMgYmtnbmQNZW5kIGlmDWVuZCBtb3VzZVVwAALoAA0BAAAfATsAMwGVkAUAAAAAAAEA\nAAAMAAAAEGZyb20gQUVVVAAAb24gTW91c2VXaXRoaW4NaWYgaGlsaXRlIG9mIG1lIHRo\nZW4NU2hvd0JhbGxvb24gIlRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbXBhcmlz\nb24gY29tZXMgZnJvbSB0aGUgYWV1dCByZXNvdXJjZS4iIMINJiYgIklmIHlvdSBtb2Rp\nZnkgdGhlIGNvbXBhcmlzb24sIHlvdSBzaG91bGQgY2xpY2sgaGVyZSBzbyB0aGF0IHRo\nZSBjbGFzcyIgwg0mJiAiZ29lcyB0byB0aGUgYWV0ZSByZXNvdXJjZS4iDWVsc2UNU2hv\nd0JhbGxvb24gIlRoaXMgc2hvd3MgdGhlIGNvbXBhcmlzb24gY29tZXMgZnJvbSB0aGUg\nYWV0ZSByZXNvdXJjZS4iIMINJiYgIlRoZXJlIGlzIG5vIHJlYXNvbiB0byBtYXJrIGl0\nIGFzIGNvbWluZyBmcm9tIHRoZSBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgeW91IGlu\nc2lzdCBvbiBjaGFuZ2luZyBpdCwgY2xpY2sgaGVyZSB3aXRoIG9wdGlvbiBrZXkgZG93\nbi4iIMINJiYgIkl0IHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGFldGUgcmVzb3Vy\nY2UuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXB1dCBoaWxpdGUg\nb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIGludG8gY3VyU3RhdGUNaWYgY3VyU3Rh\ndGUgb3IgKHRoZSBvcHRpb25LZXkgaXMgZG93bikgdGhlbg1zZXQgaGlsaXRlIG9mIGJr\nZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0byBub3QgY3VyU3RhdGUNZW5kIGlmDWVuZCBt\nb3VzZVVwAAD4AA4BAAARAcEAOAHooAAAABpAAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhl\nIGNhcmQgeW91IGxhc3QgdmlzaXRlZCLCDSYmInRoaXMgc2Vzc2lvbi4iDWVuZCBNb3Vz\nZVdpdGhpbg0Nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlZnJvbQ1ITVJlbW92ZUJhbGxv\nb24NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQgbW91c2VVcA0A\nAAMABQBOYW1lAAAFAAMASUQAAAcADABEZXNjcmlwdGlvbgAJAAwAQ29tcGFyaXNvbnNj\nb21wYXJpc29uAG9uIE9wZW5DYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4N\nZ2xvYmFsIGN1cnJlbnRTdWl0ZSxjdXJyZW50TmFtZQ1wdXQgZmllbGQgInN1aXRlQ29k\nZSIgaW50byBjdXJyZW50U3VpdGUNcHV0IGZpZWxkICJjb21wYXJlTmFtZSIgaW50byBj\ndXJyZW50TmFtZQ1lbmQgaWYNZW5kIE9wZW5DYXJkDQ1vbiBjbG9zZWNhcmQNZ2xvYmFs\nIGluRWRpdA1pZiBpbkVkaXQgdGhlbg1pZiBmaWVsZCAic3VpdGVDb2RlIiA8PiAiKioq\nKiIgdGhlbg1nbG9iYWwgY3VycmVudFN1aXRlLGN1cnJlbnROYW1lDWlmIGN1cnJlbnRT\ndWl0ZSA8PiBmaWVsZCAic3VpdGVDb2RlIiB0aGVuDXB1dCAic3VpdGUiICYmIGZpZWxk\nICJzdWl0ZUNvZGUiIGludG8gc3VpdGVOYW1lDWlmIG5vdCAodGhlcmUgaXMgYSBjYXJk\nIHN1aXRlTmFtZSkgdGhlbg1wdXQgY3VycmVudFN1aXRlIGludG8gZmllbGQgInN1aXRl\nQ29kZSINYW5zd2VyIHN1aXRlTmFtZSAmICJkb2VzIG5vdCBleGlzdCBhbmQgd2lsbCBu\nb3QgYmUgdXNlZCINZW5kIGlmDWVuZCBpZg1wdXQgY3VycmVudFN1aXRlICYmIChzaG9y\ndCBuYW1lIG9mIHRoaXMgY2FyZCkgJiAiLCIgJiBjdXJyZW50TmFtZSBpbnRvIG9sZE5h\nbWUNcHV0IGZpZWxkICJzdWl0ZUNvZGUiICYmICJjb21wYXJpc29uIiAmJiBSZXNUeXBl\nKGZpZWxkICJjb21wYXJlSUQiKSDCDSYgIiwiICYgZmllbGQgImNvbXBhcmVOYW1lIiBp\nbnRvIG5ld05hbWUNaWYgbmV3TmFtZSA8PiBvbGROYW1lIHRoZW4NTmFtZUl0IG5ld05h\nbWUNQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1lLCAiY29tcGFyZUxpc3QiDWVuZCBp\nZg1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJyZW50U3VpdGUNZW5kIGlmDWVu\nZCBpZg1QYXNzIGNsb3NlY2FyZA1lbmQgY2xvc2VjYXJkDQ1vbiBuZXdjYXJkDWdsb2Jh\nbCBjdXJyZW50U3VpdGUNcHV0IGN1cnJlbnRTdWl0ZSBpbnRvIGZpZWxkICJzdWl0ZUNv\nZGUiDVBhc3MgbmV3Y2FyZA1lbmQgbmV3Y2FyZA0Nb24gZGVsZXRlY2FyZA1DaGFuZ2VO\nYW1lIGZpZWxkICJzdWl0ZUNvZGUiICYmIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkLCDC\nDSIiLCAiY29tcGFyZUxpc3QiDXBhc3MgZGVsZXRlY2FyZA1lbmQgZGVsZXRlY2FyZA0A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQk1BUAAAHxYAAAAAAAAAAAABAAAAAAAA\nAVYCAAAAAAABVgIAABgAAAA3AKgAAAAAAAAAAAAAAAAAAAAkjBCA4RMCA6KFiuEUAQPh\nFAMDuIaOEIDhEwIDjRBA4RSAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nA8BDQVJEAAA7gwAAAAAAAA8tAAAAAAAAAAAAAAAAAAA68AAADjwABQAKAAAC1AACAAAA\nmgECAAQBAAEoAXwBVgG4oAAAAGB2AAEAFQAMAQAAEEluc3RydWN0aW9ucwAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ2V0IGluc3RydWN0aW9u\ncyBmb3IgdXNpbmcgdGhpcyBzdGFjay4iDWVuZCBNb3VzZVdpdGhpbg0NDW9uIG1vdXNl\nVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9t\nDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdvIGNkICJpbnN0cnVjdGlvbnMiDWVuZCBtb3Vz\nZVVwAAAiAAUCAABqAHwAkAHNAAAAAAAAAAAAFQAMAQAAEAAAAAAAmAAHAQAA+AC9AQQA\nzwAAAAAAAAABAAAADAAAABAAAG9uIG1vdXNlRW50ZXINYmVlcCAyDWVuZCBtb3VzZUVu\ndGVyDQ1vbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiUGxhY2UgdGhlIGN1cnNvciBo\nZXJlIHRvIGJlZXAgdHdpY2UuIg1lbmQgTW91c2VXaXRoaW4NAAAiAAgCBAE7AAMBVgCN\nAAAAAAAAAAAAAwAMAAAAEAAAAAAA9gAKAQABMgHNAUwB8iAAAAA+0wABABUADgEAABJQ\ncm9jZWVkyQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8g\nZ28gdG8gdGhlIFJlc291cmNlIFRvb2xzIGNhcmQuIg1lbmQgTW91c2VXaXRoaW4NDQ0N\nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlRnJvbQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdX\naGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gY2FyZCAiTWFpbk1lbnUiDWVu\nZCBtb3VzZVVwAAD/+wBdAFVzZSBzdGFjayB0aGlzIHRvIGNyZWF0ZSwgbWFpbnRhaW4s\nIGFuZCBleHRlbmQNQXBwbGUgRXZlbnSqIFRlcm1pbm9sb2d5IEV4dGVuc2lvbiByZXNv\ndXJjZXMuAP/4ADSABgAAAAepMTk5MiBBcHBsZSBDb21wdXRlciwgSW5jLg1BbGwgUmln\naHRzIFJlc2VydmVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2BCTUFQAAAP\nLQAAAAAAAAAAAAEAAAAAAAABVgIAAAAAAAFWAgAAIAAaAVMB/gAAAAAAAAAAAAAAAAAA\nCwgbwOMEKg/A4wQqP8DjBCr/wOMEOQP/wOMEOQf/wOMEOQ//gOMEOR//gOMEOT//gOME\nOX//gOMEKX//4wUp///jBSn//uMFOAH//uMFOAH//OMFOAP/+OMFOAP/8OMFhTgD/+Dj\nBTgH/4DjBSgH/+MGKAf+4wZ1A/8AB/gD/+MEBcEf//AHgD//8OMDBcF///8AA////OMD\nFAHB////8B/////jAyQD/8H/////////gOMCJA//wf/////////A4wIkH//B////////\n//DjAiQ//8H/////////+OMCJH//wf/////////84wKFJP//wf/////////+4wIzAf//\nwf/////////44wIzAf//wf/////////w4wIzA///wf/////////g4wKKHSASPnh///AA\nA+Hw4hMEGUASQBR8GnzhD+EQAeIPEwgZgBKAFIAagOEPHAEYBAPBh//wAAQh8AThDx8B\n4xMQGAITEFL+BwcA/iQHwMED5wcA/wB8cOEKHwJyAwGAAAMBgCM4MFMDAMABgOEKHAQi\nBCDBAAwAQAAMAEAzQAgEQgwAIILhC+ERgMEQACgBEAAhCGKAAEAoARATEOEKXwhAACD4\nwg4OIPgAD/+BA8AADg4AeBDhDBMgGAglAQQiAQQkDCBTIYYAAeDhCk8QgABCE0IkAhAU\nQhIC4QvhHggkAQThCx8hAsKD/AIQg/wCH/+EIACAQhCEEgjhC+EQCOIPP0H4QOIOH4By\nB//gAAf/4OIH4S0gECMCEuEMHgElBCAiBCBDAQCEIBMQ4QsvD/giB8AiB8AUQCQEIOEM\nTAgAAhByBBhAAAQYQCMhgCMGGOEN4TKD4ADBOIPgAD//gB5DOIHgQOEMPgQgAMEgAAGA\nCAABgGKEAEAgAAgShOEM4UAEAGACMmACCEICAMIBQkADACDhCxMgSAQACEBiGBwEABgc\nIwGDQgQAMAzhDYkjH//B//////////zjAyMf/8H//////////uMDhSMf/8H/////////\n/+MDMw///8H/////////gOMCMw///8H/////////wOMChTMP///B/////////+DjAjMH\n///B//////////jjAjMH///B//////////zjAjMH///B//////////7jAooTBCkBwOMB\nhRMCGkDjAaKFiST//8H//////////+MChSR//8H//////////uMChSQ//8H/////////\n/OMChSQf/8H/////////+OMCJA//wf/////////w4wKFJAf/wf/////////g4wKFJAP/\nwf/////////A4wIkAf/B/////////4DjAgXB///////////jA4UFwX/////////+4wMF\n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\nUkQAABAuAAAAAAAAEW8AAAAAAAAAAAAAAAAAADrwAAAOPAAGAAgAAAMQAAMAAHGkAC4A\nAgIFADEABgExAfsABwAAAAAAAAADAAwAAAAQSW5zdHJ1Y3Rpb25zAAAAAADAAAMBAAE5\nAAYBUwCVoAQAAAAAAAEAFQAMAQAAEFByaW50IEluc3RydWN0aW9ucwAAb24gTW91c2VX\naXRoaW4NU2hvd0JhbGxvb24gIlByaW50IGluc3R1Y3Rpb25zIGZvciB1c2luZyB0aGlz\nIHN0YWNrLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXByaW50IGNhcmQgZmll\nbGQgIkluc3RydWN0aW9ucyINZW5kIG1vdXNlVXAAAADoAAQBAAAGAb8ALgH2oAAAABpA\nAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGlj\nayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhlIGxhc3QgY2FyZCB5b3UgdmlzaXRlZCLCDSYi\nIGluIHRoaXMgc3RhY2suIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFs\nIGdXaGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQg\nbW91c2VVcAAA9gAFAQABMgHNAUwB8iAAAAA+0wABABUADgEAABJQcm9jZWVkyQAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIFJl\nc291cmNlIFRvb2xzIGNhcmQuIg1lbmQgTW91c2VXaXRoaW4NDQ0Nb24gbW91c2VVcA1n\nbG9iYWwgZ1doZXJlRnJvbQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20Ndmlz\ndWFsIGRpc3NvbHZlIGZhc3QNZ28gY2FyZCAiTWFpbk1lbnUiDWVuZCBtb3VzZVVwAAAA\nIgAGAgQAFgAGADEBBQAAAAAAAAAAABUAGAAAACAAAAAAACIACAIFABcABQAzAQMAAAAA\nAAAAAAAVABQIAAAaAAAAAP/+cXOB8gAAAAsAKgAMACsADQAwAAwANAANAL8ADADDAA0B\nowAKAckADQapAAsGvwAJBsAADRK/AAwSygANEwAADBMKAA0TdAAME38ADRPHAAwT0gAN\nFTUADBVCAA0WDAALFiYADRa9AAwWyQANFvIADBb9AA0XJQAMFzMADRdeAAwXZgANF5sA\nDBehAA0X9QAMF/wADRhPAAwYWwANGJsADBimAA0Y/wAMGQoADRmQAAwZnAANGfEADBoA\nAA0abwALGowADRuSAAwbnQANG88ADBvZAA0cHgAMHCkADRxbAAwcZAANHu8ADB7wAA0e\n8gAMHv0ADSA5AAwgRAANIcQACSJXAA0l6AAMJfIADSb5AAwnBAANJ8sACSh9AA0oggAM\nKI0ADSppAAkrGgANKx4ACysxAA0sewAMLIgADS1aAAwtaQANLvwADC8LAA0v2AAML+wA\nDTHbAAsx7AANMq4ACzLGAA00lgALNKsADTf6AAw3/gANONEADDjVAA05BAAMOQcADTnI\nAAk6AwANOmEADDpnAA07CAAMOw4ADTwaAAw8JQANPHUADDyAAA09lwALPasADUFKAAtB\nZQANQ0IAC0NkAA1EIAALRCwADUywABBMyAANTMoAC0zTAA1S3AALUu4ADVUXAAtVIwAN\nasQADGrFAA0NQWJvdXQgQWV0ZSBSZXNvdXJjZXMgYW5kIFVzaW5nIHRoaXMgU3RhY2sN\nVGhlICdhZXV0JyAoQXBwbGUgRXZlbnQgVXNlciBUZXJtaW5vbG9neSkgcmVzb3VyY2Ug\nZGVzY3JpYmVzIGNvbW1vbiBBcHBsZSBldmVudHMgYXMgZGVmaW5lZCBpbiB0aGUgbGF0\nZXN0IHZlcnNpb24gb2YgdGhlIEFwcGxlIEV2ZW50IFJlZ2lzdHJ5LiBUaGUgJ2FldGUn\nIChBcHBsZSBFdmVudCBUZXJtaW5vbG9neSBFeHRlbnNpb24pIHJlc291cmNlIGRlc2Ny\naWJlcyBob3cgYW4gYXBwbGljYXRpb24gc3VwcG9ydHMgQXBwbGUgZXZlbnRzLiBPZnRl\nbiBpdCBpcyBhbiBleHRlbnNpb24gZnJvbSB0aGUgY29udGVudCBvZiB0aGUgJ2FldXQn\nLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAnYWV1dCcgYW5kICdhZXRlJyByZXNvdXJj\nZXMsIHNlZSB0aGUgbGF0ZXN0IEFwcGxlIEV2ZW50IFVzZXIgVGVybWlub2xvZ3kgUmVz\nb3VyY2VzIGRldmVsb3BlciBub3RlLiBUaGlzIHN0YWNrIGFsbG93cyB5b3UgdG8gY29u\ndmVydCBhbiAnYWV0ZScgcmVzb3VyY2UgdG8gYW5kIGZyb20gYSBjb3B5IG9mIHRoaXMg\nc3RhY2suIEFmdGVyIGRvaW5nIHNvLCB5b3UgY2FuIHZpZXcgdGhlIGNvbnRlbnQgb2Yg\ndGhpcyByZXNvdXJjZSBhcyB3ZWxsIGFzIGVkaXQgaXQuIFlvdSBjYW4gYWxzbyBnZW5l\ncmF0ZSB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSB0aGlzIHN0YWNrLCBzdWNoIGFzIHNh\nbXBsZSBjb2RlIGZvciB1c2luZyBBcHBsZSBldmVudHMgZnJvbSBsYW5ndWFnZXMgc3Vj\naCBhcyBIeXBlclRhbGssIFBhc2NhbCwgb3IgQy4NDUFuICdhZXRlJyByZXNvdXJjZSBn\ncm91cHMgaW5mb3JtYXRpb24gaW50byBmdW5jdGlvbmFsIGFyZWFzLCBlYWNoIG9mIHdo\naWNoIGlzIGNhbGxlZCBhIHN1aXRlLiBBIHBhcnRpY3VsYXIgcmVzb3VyY2UgbWlnaHQg\nZGVmaW5lIGEgdGV4dCBzdWl0ZSwgZ3JhcGhpYyBzdWl0ZSwgZGF0YWJhc2Ugc3VpdGUs\nIGV0Yy4gV2l0aGluIGVhY2ggc3VpdGUsIHRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIGRh\ndGE6IGV2ZW50IGRlc2NyaXB0aW9ucywgdXNlciBhY2Nlc3NpYmxlIG9iamVjdCBjbGFz\ncyBkZXNjcmlwdGlvbnMsIGNvbXBhcmlzb24gb3BlcmF0b3IgZGVzY3JpcHRpb25zLCBh\nbmQgZW51bWVyYXRvciBkZXNjcmlwdGlvbnMuIFRoaXMgc3RhY2sgcmVmbGVjdHMgdGhl\nIG9yZ2FuaXphdGlvbiBvZiB0aGUgJ2FldGUnIHJlc291cmNlIGFuZCB1c2VzIGNhcmRz\nIG9mIGRpZmZlcmVudCBiYWNrZ3JvdW5kcyB0byBjb250YWluIHRoZSBkaWZmZXJlbnQg\na2luZHMgb2YgaW5mb3JtYXRpb27RdGhlcmUgYXJlIHN1aXRlIGNhcmRzIHRoYXQgYWN0\nIGFzIHRoZSB0YWJsZSBvZiBjb250ZW50cyBvZiB0aGUgZGF0YSBpbiB0aGUgc3VpdGUs\nIGFzIHdlbGwgYXMgZXZlbnQgY2FyZHMsIGNsYXNzIGNhcmRzLCBjb21wYXJpc29uIGNh\ncmRzIGFuZCBlbnVtZXJhdG9yIGNhcmRzLg0NQmFsbG9vbiBoZWxwIGlzIGF2YWlsYWJs\nZSB0aHJvdWdob3V0IHRoZSBzdGFjay4gVXNlIGl0IHRvIHN1cHBsZW1lbnQgdGhlc2Ug\naW5zdHJ1Y3Rpb25zIGFuZCBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBmdW5jdGlvbnMg\nYW5kIGJlaGF2aW9yIG9mIGVhY2ggc3RhY2sgZWxlbWVudC4NDUEgbWVtb3J5IHBhcnRp\ndGlvbiBvZiAxNTAwayBvciBncmVhdGVyIGZvciBIeXBlckNhcmQgaXMgcmVjb21tZW5k\nZWQgZm9yIHVzZSB3aXRoIHRoaXMgc3RhY2suDQ0NQW4gT3ZlcnZpZXcgVGhpcyBTdGFj\naw1Zb3UgY2FuIG5hdmlnYXRlIGZyb20gY2FyZCB0byBjYXJkIGluIHRoaXMgc3RhY2sg\nYnkgY2hvb3NpbmcgaXRlbXMgaW4gdGhlINJBZXRlRWRpdG9y0yBtZW51LCBjbGlja2lu\nZyBvbiBidXR0b25zLCBvciBjbGlja2luZyBvbiB0ZXh0Lg0NVG8gYmVnaW4gdXNpbmcg\ndGhpcyBzdGFjaywgY2xpY2sgb24gdGhlINJSZXNvdXJjZSBUb29sc9MgYnV0dG9uIG9u\nIHRoaXMgY2FyZCBvciBjaG9vc2Ug0lJlc291cmNlIFRvb2xz0yBmcm9tIHRoZSBBZXRl\nRWRpdG9yIG1lbnUuIFlvdSBjYW4gZ28gdG8gYW55IG90aGVyIHNlY3Rpb24gb2YgdGhp\ncyBzdGFjayBmcm9tIGFueSBvdGhlciBjYXJkIGJ5IGNob29zaW5nIGEgc2VjdGlvbtVz\nIG5hbWUgZnJvbSB0aGlzIG1lbnUuIA0NVGhlIFJlc291cmNlIFRvb2xzIGNhcmQgYWN0\ncyBhcyBhIGNvbnRyb2wgY2VudGVyIGZvciBvcGVyYXRpbmcgb24gJ2FldGUnIHJlc291\ncmNlcywgYXMgd2VsbCBhcyBjcmVhdGluZyBuZXcgQXBwbGUgRXZlbnQgc3VpdGVzIGFu\nZCBhY2Nlc3NpbmcgZXhpc3Rpbmcgb25lcy4gV2l0aGluIHRoaXMgY2FyZCwgeW911Wxs\nIG5vdGljZSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgYnV0dG9ucyBmb3IgZXhlY3V0aW5n\nIGNvbW1hbmRzLCBhIHNjcmF0Y2ggYXJlYSBmb3IgaG9sZGluZyBnZW5lcmF0ZWQgaW5m\nb3JtYXRpb24sIGFuZCBhIGxpc3Qgb2YgdGhlIHN1aXRlcyBkZXNjcmliZWQgaW4gdGhl\nIHN0YWNrLg0NQ2xpY2tpbmcgb24gYSBzdWl0ZSBpZCBpbiB0aGUgbWFpbiBtZW51IHRh\na2VzIHlvdSB0byB0aGUgY2FyZCBmb3IgdGhhdCBzdWl0ZS4gRWFjaCBzdWl0ZSBjYXJk\nIGNvbnRhaW5zIGxpc3RzIG9mIGV2ZW50cywgY2xhc3NlcywgY29tcGFyaXNvbnMgYW5k\nIGVudW1lcmF0b3JzLiBZb3UgY2FuIGNsaWNrIG9uIGFuIGl0ZW0gaW4gZWFjaCBvZiB0\naGVzZSBsaXN0cyB0byBhY2Nlc3MgYSBjYXJkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24g\nYWJvdXQgdGhhdCBpdGVtLiBUaGlzIHN0YWNrIGFsc28gY29udGFpbnMgYW4gZXhhbXBs\nZSAnYWV0ZScgcmVzb3VyY2Ugd2hpY2ggeW91IGNhbiB1c2UgdG8gYmVjb21lIGZhbWls\naWFyIHdpdGggdGhlIHN0YWNr1XMgbGF5b3V0LiANDU9mIGNvdXJzZSwgeW911XJlIHBy\nb2JhYmx5IG1vcmUgaW50ZXJlc3RlZCBpbiB3b3JraW5nIHdpdGggYW4gJ2FldGUnIHJl\nc291cmNlIG9mIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBvciBjcmVhdGluZyBhIHdo\nb2xlIG5ldyAnYWV0ZScgcmVzb3VyY2UuIEJlZm9yZSBhdHRlbXB0aW5nIHRvIGRvIGVp\ndGhlciBvZiB0aGVzZSwgdGhlIGZpcnN0IHRoaW5nIHlvdSBzaG91bGQgZG8gaXMgbWFr\nZSBhIGNvcHkgb2YgdGhpcyBzdGFjayB0byB3b3JrIHdpdGguIFRvIGRvIHRoaXMsIGNo\nb29zZSDSTmV3IEVkaXRvcsnTIGZyb20gdGhlIEFldGVFZGl0b3IgbWVudS4gSWYgeW91\nciBhcHBsaWNhdGlvbiBhbHJlYWR5IGhhcyBhbiAnYWV0ZScgcmVzb3VyY2UsIHlvdSBj\nYW4gcmVhZCBpdCBpbnRvIHRoaXMgc3RhY2sgYnkgY2xpY2tpbmcgb24gdGhlICJJbXBv\ncnQgYWV0ZSIgYnV0dG9uLiBBZnRlciBjaG9vc2luZyBhbiBhcHBsaWNhdGlvbiBmcm9t\nIHN0YW5kYXJkIGZpbGUsIHRoZSAnYWV0ZScgcmVzb3VyY2Ugd2lsbCBiZSByZWFkIGlu\nIGFuZCBjb252ZXJ0ZWQgaW50byBkYXRhIHByZXNlbnRlZCBpbiB0aGUgc3RhY2suIA0N\nTm9ybWFsbHksIHRoZSBzdGFjayB3aWxsIGRpc3BsYXkgdGhlIHNhbWUgY29udGVudCBh\ncyB0aGUgJ2FldGUnIHJlc291cmNlLiBJbiBvdGhlciB3b3JkcywgeW911WxsIHNlZSB0\naGUgY29udGVudCBpbiB0aGUgc2FtZSBvcmRlciBhcyBpZiB5b3XVZCBvcGVuZWQgYW4g\nJ2FldGUnIHJlc291cmNlIHVzaW5nIFJlc0VkaXQuIEhvd2V2ZXIsIHRoaXMgbWVhbnMg\ndGhhdCB5b3Ugd2lsbCBub3QgYmUgc2VlaW5nIGFsbCB0aGUgZXZlbnRzIGFuZCBjbGFz\nc2VzIHRoYXQgeW91IGhhZCBpbmhlcml0ZWQgZnJvbSB0aGUgJ2FldXQnIHJlc291cmNl\nLiBPcHRpb25hbGx5LCB5b3UgbWF5IGFsc28gbWVyZ2UgdGhlICdhZXRlJyByZXNvdXJj\nZSB3aXRoIHRoZSAnYWV1dCcgcmVzb3VyY2Ugd2hpY2ggaGFzIGJlZW4gaW5jbHVkZWQg\naW4gdGhpcyBzdGFjay4NDUFmdGVyIHlvddV2ZSByZWFkIGluIGFuICdhZXRlJyByZXNv\ndXJjZSAob3IgYWx0ZXJuYXRpdmVseSwgYmVndW4gd2l0aCBhbiBlbXB0eSBzdGFjayks\nIHlvdSBjYW4gc3RhcnQgZWRpdGluZyB0aGUgY29udGVudHMgb2YgdGhlIHN0YWNrLiBU\naGVyZSBhcmUgYnV0dG9ucyB3aGljaCB5b3UgY2FuIHVzZSB0byBjcmVhdGUgY2FyZHMg\nZm9yIGEgbmV3IHN1aXRlLCBldmVudCwgY2xhc3MsIGNvbXBhcmlzb24sIG9yIGVudW1l\ncmF0b3IuIFlvdSBtYXkgYWxzbywgaWYgeW91IHdpc2gsIHVzZSB0aGUgIk5ldyBDYXJk\nIiBvciDSRGVsZXRlIENhcmTTIG1lbnUgaXRlbXMgZnJvbSBIeXBlckNhcmTVcyBFZGl0\nIG1lbnUuIFlvdSBjYW4gbW9kaWZ5IHRoZSAnYWV0ZScgaW5mb3JtYXRpb24gb24gdGhl\nc2UgY2FyZHMgYnkgY2hhbmdpbmcgdGhlIGRhdGEgaW4gdGhlcmUgZmllbGRzLiBFYWNo\nIGNhcmQgY29udGFpbnMgbGlzdHMgYW5kIGJ1dHRvbnMgZm9yIGFkZGluZywgZGVsZXRp\nbmcgb3IgYWNjZXNzaW5nIGl0ZW1zIGZvciBlZGl0aW5nLg0NQWZ0ZXIgeW91IGZpbmlz\naCBlZGl0aW5nIHRoZSBzdGFjaywgeW91IG1heSBvYnRhaW4gaW5mb3JtYXRpb24gZnJv\nbSBpdC4gVGhpcyBpbmZvcm1hdGlvbiwgaWYgaXQgaXMgaW4gVEVYVCBmb3JtLCB3aWxs\nIGdvIHRvIHRoZSBzY3JhdGNocGFkIGZpZWxkIG9uIHRoZSBSZXNvdXJjZSBUb29scyBj\nYXJkIHdoZXJlIHlvdSBjYW4gdmlldyBpdCBpbiBpdHMgZW50aXJldHkuIFRoaXMgY2Fy\nZCBhbHNvIGhhcyBidXR0b25zIHdoaWNoIGxldCB5b3UgcHJpbnQgdGhlIGluZm9ybWF0\naW9uIGluIHRoZSBzY3JhdGNocGFkLCBzYXZlIGl0IHRvIGEgZmlsZSwgb3Igd3JpdGUg\naXQgdG8gdGhlIGNsaXBib2FyZC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYnV0dG9u\ncyBmb3IgZ2VuZXJhdGluZyBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgaW5m\nb3JtYXRpb246DQ2lIE91dHB1dCBhZXRlIC0gd3JpdGVzIHlvdXIgJ2FldGUnIHJlc291\ncmNlIHRvIHlvdXIgYXBwbGljYXRpb24uDaUgRGVyZXogYWV0ZSAtIGdlbmVyYXRlcyB0\naGUgcmVzb3VyY2UgaW4gZGVyZXogZm9ybWF0LCB3aGljaCB5b3UgY2FuIHRoZW4gY29w\neSB0byBNUFcgYW5kIHRvIHJleiB3aXRoIHlvdXIgcHJvZ3JhbS4NpSBTZXJ2ZXIgY29k\nZSAtIHNhbXBsZSBjb2RlIG9uIGhvdyB5b3UgY2FuIHByb2Nlc3MgdGhlc2UgQXBwbGUg\nRXZlbnRzIGFzIGEgc2VydmVyLg2lIENsaWVudCBjb2RlIC0gc2FtcGxlIGNvZGUgb24g\naG93IHlvdSBjYW4gc2VuZCB0aGVzZSBBcHBsZSBFdmVudHMgYXMgYSBjbGllbnQuDQ1G\naW5hbGx5LCB0aGVyZSBhcmUgYSBsb3Qgb2YgaW50ZXJuYWwgbGlua3MgdGhhdCBuZWVk\nIHRvIGJlIG1haW50YWluZWQgYmV0d2VlbiB0aGUgY2FyZHMgb2YgdGhpcyBzdGFjaywg\nYSBzdWl0ZSBwb2ludHMgdG8gaXRzIGV2ZW50IGFuZCB0aGUgZXZlbnQgcG9pbnRzIHRv\nIGl0cyBjb2RlLCBldGMuIFRoZXNlIGxpbmtzIGFyZSBtYWludGFpbmVkIGF1dG9tYXRp\nY2FsbHkuIElmIGZvciBzb21lIHJlYXNvbiB0aGVzZSBsaW5rcyBhcmUgYnJva2VuLCB0\naGVyZSBpcyBhbiBpbnRlcm5hbCBwcm9jZWR1cmUsIENvbnN0cnVjdExpbmssIHRoYXQg\nbGV0cyB5b3UgcmVjb25zdHJ1Y3QgdGhlIGxpbmtzIGFnYWluLiBUbyB1c2UgdGhpcyBy\nb3V0aW5lIHR5cGUg0kNvbnN0cnVjdExpbmvTIGluIEh5cGVyQ2FyZNVzIG1lc3NhZ2Ug\nYm94IGFuZCBoaXQgdGhlIGVudGVyIGtleSB0byBleGVjdXRlIGl0LiBIb3BlZnVsbHks\nIHlvddVsbCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIGZlYXR1cmUuDQ0NVXNpbmcgdGhl\nIEFldGVFZGl0b3IgTWVudQ1Zb3UgY2FuIHVzZSB0aGlzIG1lbnUgdG8gbmF2aWdhdGUg\nZnJvbSBvbmUgc2VjdGlvbiBvZiB0aGUgc3RhY2sgdG8gYW5vdGhlciBvciBwZXJmb3Jt\nIG90aGVyIHVzZWZ1bCB0YXNrcy4gQmVsb3cgaXMgYSBkZXNjcmlwdGlvbiBvZiBlYWNo\nIG1lbnUgaXRlbToNDaUgSW5zdHJ1Y3Rpb25zIC0gdGFrZXMgeW91IHRvIHRoZSBJbnN0\ncnVjdGlvbnMgY2FyZC4NpSBQcmVmZXJlbmNlcyAtIHRha2VzIHlvdSB0byB0aGUgUHJl\nZmVyZW5jZXMgY2FyZC4NpSBSZXNvdXJjZSBUb29scyAtIHRha2VzIHlvdSB0byB0aGUg\nUmVzb3VyY2UgVG9vbHMgY2FyZC4NpSCuIFN1aXRlcyAtIHRha2VzIHlvdSB0byB0aGUg\nZmlyc3QgQXBwbGUgRXZlbnQgU3VpdGVzIGNhcmQuDaUgRXZlbnRzIC0gdGFrZXMgeW91\nIHRvIHRoZSBmaXJzdCBldmVudCBjYXJkIG9mIHRoZSBmaXJzdCBzdWl0ZSBsaXN0ZWQg\naW4gUmVzb3VyY2UgVG9vbHMuDaUgQ2xhc3Nlcy0gdGFrZXMgeW91IHRvIHRoZSBmaXJz\ndCBjbGFzcyBjYXJkIG9mIHRoZSBmaXJzdCBzdWl0ZSBsaXN0ZWQgaW4gUmVzb3VyY2Ug\nVG9vbHMuDaUgRW51bWVyYXRpb25zLSB0YWtlcyB5b3UgdG8gdGhlIGZpcnN0IGVudW1l\ncmF0aW9uIGNhcmQgb2YgdGhlIGZpcnN0IHN1aXRlLg2lIENvbXBhcmlzb25zIC0gdGFr\nZXMgeW91IHRvIHRoZSBmaXJzdCBjb21wYXJpc29uIGNhcmQgb2YgdGhlIGZpcnN0IHN1\naXRlIGxpc3RlZCBpbiBSZXNvdXJjZSBUb29scy4NpSBOZXcgRWRpdG9yySAtIGNyZWF0\nZXMgYW4gZW1wdHkgY29weSBvZiB0aGUgc3RhY2sgYW5kIHRoZW4gdGFrZXMgeW91IHRv\nIGl0LiBIb2xkaW5nIGRvd24gdGhlIHNoaWZ0IGtleSB0YWtlcyB5b3UgdG8gdGhpcyBz\ndGFjayBpbiBhIG5ldyB3aW5kb3cuDaUgRW1wdHkgU3RhY2vJIC0gY2xlYXJzIHRoZSBz\ndGFjayBvZiBhbnkgc3RvcmVkINRhZXRl1SBpbmZvcm1hdGlvbi4gVGhpcyBhY3Rpb24g\naXMgbm90IHVuZG9hYmxlLg2lIExvY2FsaXplIGFldGXJIC0gY3JlYXRlcyBhIG5ldyBz\ndGFjayBpbiB3aGljaCB5b3UgY2FuIHRyYW5zbGF0ZSBuYW1lcyBpbiB0aGUgYWN0aXZl\nIEFldGVFZGl0b3Igc3RhY2sgaW50byBhbm90aGVyIGxhbmd1YWdlLg0NDVVzaW5nIHRo\nZSBSZXNvdXJjZSBUb29scyBDYXJkDVRoZXJlIGFyZSB0d28gZmllbGRzIG9uIHRoaXMg\nY2FyZC4gVGhlIGxhcmdlciBvZiB0aGUgdHdvIGlzIGEgc2NyYXRjaHBhZCBhcmVhIHdo\naWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgb3V0cHV0IG9mIGNsaWVudCBvciBzZXJ2ZXIg\nc2FtcGxlIGNvZGUsIG9yIHRoZSBvdXRwdXQgb2YgYSBkZXJlemVkICdhZXRlJyByZXNv\ndXJjZS4gVGhlcmUgYXJlIGZvdXIgYnV0dG9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBm\naWVsZCBhcyBkZXNjcmliZWQgYmVsb3c6DQ2lIENsZWFyIEZpZWxkIC0gY2xlYXJzIHRo\nZSBjb250ZW50cyBvZiB0aGUgc2NyYXRjaHBhZCBmaWVsZC4NpSBDb3B5IEZpZWxkIC0g\nY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc2NyYXRjaHBhZCBmaWVsZCBpbnRvIHRo\nZSBjbGlwYm9hcmQuDaUgUHJpbnQgRmllbGQgLSBwcmludHMgdGhlIGNvbnRlbnRzIG9m\nIHRoZSBzY3JhdGNocGFkIGZpZWxkLg2lIFNhdmUgQXPJIC0gc2F2ZXMgdGhlIGNvbnRl\nbnQgb2YgdGhlIHNjcmF0Y2hwYWQgZmllbGQgdG8gYSBURVhUIGZpbGUuDQ1UaGUgb3Ro\nZXIgZmllbGQgaXMgYSBsaXN0IG9mIHRoZSBzdWl0ZXMgaW4gdGhpcyBzdGFjay4gWW91\nIGNhbiBhY2Nlc3Mgc3VpdGUgaW5mb3JtYXRpb24gYnkgY2xpY2tpbmcgb24gb25lIG9m\nIHRoZSBzdWl0ZSBjb2RlcyBpbiB0aGUgbGlzdC4gU2VsZWN0IHRoZSAiTmV3IHN1aXRl\nIiBidXR0b24gbG9jYXRlZCBiZWxvdyB0aGlzIGZpZWxkIHRvIGNyZWF0ZSBhIG5ldyBz\ndWl0ZS4NDUNsaWNraW5nIG9uIHRoZSAiUHJlZmVyZW5jZXPJIiBidXR0b24gd2lsbCB0\nYWtlIHlvdSB0byB0aGUgUHJlZmVyZW5jZXMgY2FyZNFzZWUgdGhlIHNlY3Rpb24gb24g\ndGhlIFByZWZlcmVuY2VzIGNhcmQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2V0\ndGluZyBQcmVmZXJlbmNlcy4NDU9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGlzIGNh\ncmQgeW911WxsIG5vdGljZSB0aGF0IHRoZXJlIGFyZSBhIG51bWJlciBvZiBidXR0b25z\nIHRoYXQgYWxsb3cgeW91IHRvIGltcG9ydCDUYWV0ZdUgZGF0YSBvciBnZW5lcmF0ZSBp\nbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHN0YWNrLiBUaGV5\nIGFyZSBkZXNjcmliZWQgYmVsb3c6DQ2lIE91dHB1dCBhZXRlIC0gd3JpdGVzIHRoZSAn\nYWV0ZScgb3V0IHRvIHlvdXIgYXBwbGljYXRpb24uIEFmdGVyIHRoZSByZXNvdXJjZSBk\nYXRhIGlzIGNyZWF0ZWQsIHlvdSB3aWxsIGJlIGFza2VkIHdoaWNoIGZpbGUgdG8gc2F2\nZSBpdCB0by4gSWYgeW91IGNhbmNlbCBvdXQgb2YgdGhpcyBzdGFuZGFyZCBmaWxlIGRp\nYWxvZywgdGhlIGNvbnRlbnRzIG9mIHRoZSDUYWV0ZdUgd2lsbCBiZSBwdXQgb24gdGhl\nIGNsaXBib2FyZC4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3aXNoIHRvIHBhc3Rl\nIHRoaXMgcmVzb3VyY2UgaW50byBhIGZpbGUgdXNpbmcgUmVzRWRpdC4gDQ2lIEltcG9y\ndCBhZXRlIC0gbGV0cyB5b3UgcmVhZCBpbiBhbiAnYWV0ZScgcmVzb3VyY2UgZnJvbSBh\nIGZpbGUuIElmIHlvdSBnZXQgYSBuZXcgYXBwbGljYXRpb24sIGZvciBpbnN0YW5jZSwg\nYW5kIHdpc2ggdG8gZmluZCBvdXQgd2hpY2ggQXBwbGUgZXZlbnRzIGl0IHN1cHBvcnRz\nIHRvIHVzZSB0aGlzIGZlYXR1cmUsIHRoaXMgaXMgd2hhdCB5b3XVZCBkby4gQ3JlYXRl\nIGEgbmV3IHN0YWNrIGJ5IGNob29zaW5nIHRoZSDSTmV3IEVkaXRvcsnTIG1lbnUgaXRl\nbSBmcm9tIHRoZSBBZXRlRWRpdG9yIG1lbnUuIE5leHQsIGNsaWNrIHRoZSBJbXBvcnQg\nYWV0ZSBidXR0b24gdG8gcmVhZCB0aGUgJ2FldGUnIHJlc291cmNlIGZyb20gdGhlIGZp\nbGUgeW911XZlIGNob3NlbiBpbnRvIHRoZSBzdGFjay4gQWx0ZXJuYXRpdmVseSwgaG9s\nZCBkb3duIHRoZSBvcHRpb24ga2V5IHdoaWxlIGNsaWNraW5nIG9uIHRoZSBJbXBvcnQg\nYWV0ZSBidXR0b24gdG8gbWVyZ2UgdGhlINRhZXRl1SBkYXRhIHdpdGggdGhlIHN0YWNr\n1XMgYnVpbHQtaW4gJ2FldXQnIHJlc291cmNlLiAgKEluIHRoZSBmdXR1cmUsIHdoZW4g\ndGhlICdhZXV0JyByZXNvdXJjZSBnZXRzIHJldmlzZWQsIHlvddVsbCB3YW50IHRvIGNv\ncHkgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgcmVzb3VyY2UgaW50byB0aGUgc3RhY2sg\ndG8ga2VlcCBpdCB1cCB0byBkYXRlKS4gQnkgdXNpbmcgdGhpcyBvcHRpb24sIHRoZSBl\ndmVudHMgYW5kIGNsYXNzZXMgZnJvbSBidWlsdC1pbiAnYWV1dCcgcmVzb3VyY2UgYW5k\nIG5vdCBmcm9tIHRoZSAnYWV0ZScgZGF0YSB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoIGFu\nZCB3aWxsIG5vdCBnZXQgd3JpdHRlbiB3aGVuIHRoZSAnYWV0ZScgcmVzb3VyY2UgaXMg\nd3JpdHRlbiBvdXQuIFBsZWFzZSBub3RlIGhvd2V2ZXIsIHRoYXQgbm8gYXR0ZW1wdCBp\ncyBtYWRlIHRvIHdyaXRlIGl0IG91dCBpbiBpdNVzIG1vc3QgY29tcGFjdCBmb3JtLiBJ\nZiB5b3UgYXJlIGNvbmNlcm5lZCB3aXRoIGtlZXBpbmcgdGhlICdhZXRlJyBpbiBpdHMg\nbW9zdCBjb21wYWN0IGZvcm0sIHlvdSBzaG91bGQgbm90IHVzZSB0aGUgb3B0aW9uIGF0\nIHRoaXMgdGltZS4gDQ1Zb3UgbWF5IHdvbmRlciB3aGF0IG1pZ2h0IGhhcHBlbiBpZiB5\nb3UgZGlkbtV0IGVtcHR5IHRoZSBzdGFjayBiZWZvcmUgeW91IGltcG9ydGVkIGFuICdh\nZXRlJyByZXNvdXJjZS4gVGhlIG9yaWdpbmFsIGNvbnRlbnQgd291bGQgcmVtYWluLCBh\nbmQgdGhlIGV4dGVybmFsICdhZXRlJyB3b3VsZCBlaXRoZXIgYmUgYWRkZWQgdG8gdGhl\nIHN0YWNrIG9yIGl0IHdvdWxkIHJlcGxhY2UgYW4gZXhpc3RpbmcgZXZlbnQgaW4gdGhl\nIHN0YWNrLiBUaGlzIHdvdWxkIGJlIGRvbmUgb24gYSB3aG9sZSBldmVudCBiYXNpcywg\nYW5kIHRoZXJlIHdvdWxkIGJlIG5vIGF0dGVtcHQgdG8gbWVyZ2UgdGhlIGRhdGEgaW50\nbyB0aGUgc2FtZSBldmVudC4gDQ2lIERlcmV6IGFldGUgLSBwcm9kdWNlcyBkYXRhIGlu\nIGRlcmV6IGZvcm1hdCwgd2hpY2ggdGhlbiBjYW4gYmUgY29waWVkIHRvIE1QVyBhbmQg\ncmV6ZWQgd2l0aCB5b3VyIHByb2dyYW0uIFRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5k\nIGlzIHRleHR1YWwgYW5kIGFwcGVhcnMgaW4gdGhlIHNjcmF0Y2hwYWQgYXJlYS4gSW4g\ndGhlIGNhc2UgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBpcyA+IDMySywgaXQgd2ls\nbCBiZSB3cml0dGVuIHRvIGEgVEVYVCBmaWxlIGluc3RlYWQuDQ2lIFNlcnZlciBjb2Rl\nIC0gZ2VuZXJhdGVzIHNhbXBsZSBjb2RlIHdoaWNoIHNob3dzIGhvdyB5b3UgY2FuIHBy\nb2Nlc3MgQXBwbGUgZXZlbnRzIGFzIGEgc2VydmVyLiBUaGUgc2FtcGxlIGNvZGUgZGlz\ncGxheWVkIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBQYXNjYWwgYW5kIEMuIFdpdGggYXNz\nZW1ibGVyLCBvbmx5IG5hbWUgY29uc3RhbnRzIHdpbGwgYmUgZGlzcGxheWVkLiBJZiB5\nb3UgYXJyaXZlIGF0IHRoaXMgY2FyZCBmcm9tIGFuIGV2ZW50IGNhcmQsIHlvdSBjYW4g\naG9sZCBkb3duIHRoZSBvcHRpb24ga2V5IHdoaWxlIGNsaWNraW5nIHRoaXMgYnV0dG9u\nIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2RlIGZyb20gYSBzaW5nbGUgZXZlbnQgaW5zdGVh\nZCBvZiBmcm9tIGFsbCBldmVudHMuDQ2lIENsaWVudCBjb2RlIC0gZ2VuZXJhdGVzIHNh\nbXBsZSBjb2RlIHdoaWNoIHNob3dzIHlvdSBob3cgeW91IGNhbiBzZW5kIEFwcGxlIGV2\nZW50cyBhcyBhIGNsaWVudC4gWW91IGNhbiBjaG9vc2Ugd2hpY2ggbGFuZ3VhZ2UgaW4g\nd2hpY2ggdG8gdmlldyB0aGUgY29kZSBmcm9tIHRoZSBQcmVmZXJlbmNlcyBjYXJkLiBZ\nb3UgY2FuIHRoaW5rIG9mIHRoaXMgYXMgYSBkeW5hbWljIGN1c3RvbSBzYW1wbGUgY29k\nZSBnZW5lcmF0b3Igd2hpY2ggY3JlYXRlcyBjdXN0b20gY29kZSB0YWlsb3JlZCB0byB5\nb3VyIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uIFlvdSBtaWdodCBldmVuIGJlIGFibGUg\ndG8gY29weSB0aGUgY29kZSBhbmQgdHJ5IGl0IGluIGEgcHJvZ3JhbSBhcyBpcywgYnV0\nIHBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoaXMgc2FtcGxlIGNvZGUgaGFzIG5vdCBiZWVu\nIHRlc3RlZCBpbiB0aGlzIHZlcnNpb24gYW5kIG1heSBub3Qgd29yayBjb21wbGV0ZWx5\nLiBJZiB5b3UgYXJyaXZlIGF0IHRoaXMgY2FyZCBmcm9tIGFuIGV2ZW50IGNhcmQsIHlv\ndSBjYW4gaG9sZCBkb3duIHRoZSBvcHRpb24ga2V5IHdoaWxlIGNsaWNraW5nIHRoaXMg\nYnV0dG9uIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2RlIGZyb20gYSBzaW5nbGUgZXZlbnQg\naW5zdGVhZCBvZiBmcm9tIGFsbCBldmVudHMuDQ0NU2V0dGluZyBQcmVmZXJlbmNlcw1Z\nb3UgY2FuIGFjY2VzcyB0aGUgUHJlZmVyZW5jZXMgY2FyZCBieSBjbGlja2luZyBvbiB0\naGUg0lByZWZlcmVuY2XJ0yBidXR0b24gb24gdGhlIFJlc291cmNlIFRvb2xzIGNhcmQg\nb3IgYnkgY2hvb3Npbmcg0lByZWZlcmVuY2Vz0yBmcm9tIHRoZSBBZXRlRWRpdG9yIG1l\nbnUuIEZyb20gdGhpcyBjYXJkIHlvdSBjYW4gc3BlY2lmeSBoZWFkZXIgaW5mb3JtYXRp\nb24gYW5kIGNob29zZSBpdGVtcyBmcm9tIGFuIGFzc29ydG1lbnQgb2Ygb3B0aW9ucy4g\nQmVsb3cgYXJlIHNvbWUgb2YgdGhlIGl0ZW1zIG9uIHRoZSBQcmVmZXJlbmNlcyBjYXJk\nIGFuZCB3aGF0IHRoZXkgZG86DQ2lIFJlc291cmNlIFR5cGUgLSBkZXRlcm1pbmVzIHRo\nZSByZXNvdXJjZSB0eXBlIG9mIHRoZSByZXNvdXJjZS4gSXQgc2hvdWxkIG5vcm1hbGx5\nIGJlICdhZXRlJy4gT24gdGhlIHJhcmUgb2NjYXNpb24gd2hlcmUgeW91IG1pZ2h0IHdh\nbnQgdG8gd3JpdGUgaXQgb3V0IGFzIGFuICdhZXV0JywgeW91IGNhbiBjaGFuZ2UgdGhp\ncyBpdGVtIHRvICdhZXV0JyBiZWZvcmUgeW91IG91dHB1dCBpdC4NpSBDbGllbnQgTGFu\nZ3VhZ2UgLSBsZXRzIHlvdSBjaG9vc2Ugd2hpY2ggY2xpZW50IGxhbmd1YWdlIHlvdSB3\naXNoIHRvIHVzZS4gVGhlIGNob2ljZXMgaW4gdGhpcyB2ZXJzaW9uIGlzIG9mIHRoZSBz\ndGFjayBhcmU6ICdhZXRlJyBuYW1lLCBIeXBlclRhbGssIE1QVyBTaGVsbCwgUGFzY2Fs\nLCBhbmQgQy4gSWYgeW91IGRvbtV0IG5lZWQgdG8gZ2VuZXJhdGUgYW55IHNhbXBsZSBj\nb2RlIHlvdSBzaG91bGQgc2V0IHRoaXMgaXRlbSB0byAnYWV0ZScgbmFtZSwgb3RoZXJ3\naXNlIGl0IHdpbGwgYmUgc2xvd2VyIHRvIGVkaXQgZXZlbnQgcGFyYW1ldGVycy4gRm9y\nIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIGNsaWVudCBsYW5ndWFnZXMsIHJl\nZmVyIHRvIHRoZSBhcHBlbmRpeCBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuDaUg\nU2VydmVyIExhbmd1YWdlIC0gbGV0cyB5b3UgY2hvb3NlIHRoZSBzZXJ2ZXIgbGFuZ3Vh\nZ2UgeW911WxsIGJlIHVzaW5nLiBUaGUgY2hvaWNlcyBpbiB0aGlzIHZlcnNpb24gaXMg\nb2YgdGhlIHN0YWNrIGFyZTogUGFzY2FsLCBDLCBhbmQgQXNzZW1ibGVyLiBJZiBBc3Nl\nbWJsZXIgaGFzIGJlZW4gY2hvc2VuLCB0aGVuIG9ubHkgdGhlIGNvbnN0YW50cyB3aWxs\nIGJlIGdlbmVyYXRlZC4NpSBTb3J0IEV2ZW50cyBieSBOYW1lIC0gd2hlbiBhbiAnYWV0\nZScgcmVzb3VyY2UgaXMgcmVhZCBpbiwgdGhlIG9yZGVyaW5nIG9mIHRoZSBldmVudHMs\nIGNsYXNzZXMsIGV0Yy4gd2lsbCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFy\nZSBpbiB0aGUgcmVzb3VyY2UuIFRoZXJlZm9yZSB3aGVuIHlvdSB3cml0ZSBpdCBvdXQs\nIGl0IHdpbGwgYWxzbyByZXRhaW4gaXRzIG9yZGVyaW5nLiBJZiB5b3UgZG9u1XQgcmVh\nbGx5IGNhcmUgYWJvdXQgcHJlc2VydmluZyB0aGlzIG9yZGVyLCB0aGVuIGNoZWNraW5n\nIHRoaXMgaXRlbSB3aWxsIHNvcnQgdGhlc2UgZWxlbWVudHMgYWxwaGFiZXRpY2FsbHku\nDQ1UaGUgb3RoZXIgb3B0aW9ucyBvbiB0aGUgUHJlZmVyZW5jZXMgY2FyZCBhcmUgZm9y\nIHVzZSB3aXRoIFBhc2NhbCBjbGllbnQgc2FtcGxlIG9ubHkuIFBsZWFzZSByZWZlciB0\nbyB0aGUgc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50IHdoaWNoIGNvdmVycyB0aGF0IGZv\nciBtb3JlIGluZm9ybWF0aW9uLg0NVHJhbnNsYXRpb24gVGFibGUNVGhpcyBidXR0b24g\nY3JlYXRlcyBhIGxpc3Rpbmcgb2YgYWxsIHRoZSBsb2NhbGl6YWJsZSBuYW1lcyBpbiB0\naGUgQWV0ZUVkaXRvciBzdGFjayBhbmQgcGxhY2VzIHRoZW0gd2l0aCB0cmFuc2xhdGlv\nbiBwbGFjZWhvbGRlcnMgaW50byB0aGUg0kNvZGUgU2NyYXRjaHBhZNMgZmllbGQgb2Yg\ndGhlINJSZXNvdXJjZSBUb29sc9MgY2FyZC4NDUVkaXRpbmcgYW4griBTdWl0ZXMgQ2Fy\nZA1FYWNoIK4gU3VpdGUgY2FyZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQg\naXRzIHN1aXRlIGFuZCBhY3RzIGFzIGEgdGFibGUgb2YgY29udGVudHMgZm9yIGFsbCBv\nZiB0aGUgZXZlbnRzLCBjbGFzc2VzLCBjb21wYXJpc29uIG9wZXJhdG9ycywgYW5kIGVu\ndW1lcmF0b3JzIGluIGl0LiBZb3UgY2FuIGNsaWNrIG9uZSBvZiB0aGVzZSBpdGVtcyB0\nbyBnbyB0byBhIGNhcmQgd2hlcmUgeW91IGNhbiBlZGl0IGl0cyBjb250ZW50cy4gQ2xp\nY2sgb24gdGhlINJOZXfTIGJ1dHRvbiBuZXh0IHRvIGVhY2ggc2VjdGlvbiB0byBhZGQg\nYW4gaXRlbSBhbmQgZ28gdG8gYSBuZXcgY2FyZCBmb3IgaXQuIElmIHlvdSBjaG9vc2Ug\ndG8gZGVsZXRlIG9yIHJlbmFtZSBhbiBpdGVtLCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8g\ndGhpcyBmcm9tIHRoZSBpdGVt1XMgY2FyZCByYXRoZXIgdGhhbiBhbiCuIFN1aXRlIGNh\ncmQuDQ0NRWRpdGluZyBhbiBFdmVudCBDYXJkDUVhY2ggRXZlbnQgY2FyZCBjb250YWlu\ncyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGV2ZW50LiBDbGlja2luZyB0aGUg0lNob3cg\nU2NyaXB00yBvciDSSGlkZSBTY3JpcHTTIGJ1dHRvbnMgd2lsbCBkaXNwbGF5IG9yIGhp\nZGUgYSBmaWVsZCB3aGljaCBzdW1tYXJpemVzIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24g\nYWJvdXQgdGhlIGV2ZW50IHBhcmFtZXRlcnMuIFRoaXMgZmllbGQgYWxzbyBhY3RzIGFz\nIGEgZGlyZWN0b3J5IGZvciBldmVudHMuIE9ubHkgb25lIHBhcmFtZXRlciBpbiB0aGlz\nIGZpZWxkIGNhbiBiZSBlZGl0ZWQgYXQgYSB0aW1lLiBDbGlja2luZyBvbiBhIHBhcmFt\nZXRlciB3aWxsIGFsbG93IHlvdSB0byBlZGl0IGl0LiBBZnRlciBkb2luZyB0aGlzLCB0\naGUgcGFyYW1ldGVyIHN1bW1hcnkgZmllbGQgd2lsbCBiZSBoaWRkZW4gYW5kIHRoZSBw\nYXJhbWV0ZXIgeW91IGNsaWNrZWQgb24gd2lsbCBiZSBkaXNwbGF5ZWQgc28gdGhhdCB5\nb3UgY2FuIGVkaXQgaXRzIGNvbnRlbnRzLiBUaGUgcGFyYW1ldGVy1XMgYXR0cmlidXRl\ncyBjYW4gYmUgY2hhbmdlZCBieSBjbGlja2luZyBvbiB0aGUgYXR0cmlidXRlIGJpdCBj\naGVjayBib3hlcy4gV2UgdXNlIHRocmVlIG9mIHRoZXNlIGJpdHMgZm9yIHVzZSB3aXRo\nIHRoZSBQYXNjYWwgcGFyYW1ldGVyIGRhdGEgdHlwZS4gQ2xpY2tpbmcgdGhlIGxvd2Vy\nIDMgYml0cyBvZiB0aGUgY2hlY2sgYm94IHdpbGwgaW52b2tlIGEgcG9wIHVwIG1lbnUu\nIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGJ1dHRvbnMsIGxpc3Rl\nZCBiZWxvdywgZm9yIG5hdmlnYXRpbmcgZnJvbSBvbmUgcGFyYW1ldGVyIHRvIGFub3Ro\nZXIuDQ2lIFByZXYgLSBkaXNwbGF5cyB0aGUgcHJldmlvdXMgZXZlbnQgcGFyYW1ldGVy\nLiBOb3RlIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgb3JkZXJpbmcsIHRoZSBy\nZXBseSBkaXJlY3QgcGFyYW1ldGVyIGlzIHRyZWF0ZWQgYXMgdGhlIGZpcnN0IHBhcmFt\nZXRlciwgYW5kIHRoZSBkaXJlY3QgcGFyYW1ldGVyIGlzIHRyZWF0ZWQgYXMgdGhlIHNl\nY29uZCBwYXJhbWV0ZXIuDaUgTmV4dCAtIGRpc3BsYXlzIHRoZSBuZXh0IHBhcmFtZXRl\nciBvZiB0aGUgZXZlbnQuDaUgTmV3IC0gYWRkcyBhIG5ldyBwYXJhbWV0ZXIgYXQgdGhl\nIGVuZCBvZiB0aGUgZXZlbnQuIE5vdGUgdGhhdCB0aGUgZGlyZWN0IGFuZCB0aGUgcmVw\nbHkgcGFyYW1ldGVyIGlzIGFsd2F5cyBpbiB0aGUgJ2FldGUnIHJlc291cmNlLiBBYnNl\nbmNlIG9mIHRoZSBkaXJlY3QgcGFyYW1ldGVyIGlzIGluZGljYXRlZCBieSB0aGUgdHlw\nZSAnbnVsbCcuIFRvIGNyZWF0ZSB0aGUgZGlyZWN0IHBhcmFtZXRlciwgZG8gbm90IGNs\naWNrIHRoZSBOZXcgYnV0dG9uLiBJbnN0ZWFkLCBkaXNwbGF5IHRoZSBkaXJlY3QgcGFy\nYW1ldGVyIGFuZCB0aGVuIGNoYW5nZSBpdHMgZGF0YSB0eXBlIHRvIGFueXRoaW5nIGJ1\ndCBudWxsLg2lIERlbGV0ZSAtIGRlbGV0ZXMgdGhlIGRpc3BsYXllZCBwYXJhbWV0ZXIu\nIFRvIGRlbGV0ZSB0aGUgZGlyZWN0IG9yIHJlcGx5IHBhcmFtZXRlciwgZG8gbm90IHVz\nZSB0aGlzIGJ1dHRvbi4gSW5zdGVhZCwgY2hhbmdlIHRoZSBkYXRhIHR5cGUgb2YgdGhl\nIHBhcmFtZXRlciB0byAnbnVsbCcuDaUgSW5zZXJ0IC0gaW5zZXJ0cyBhIG5ldyBwYXJh\nbWV0ZXIgYWZ0ZXIgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgb25lICh1bmxlc3MgdGhp\ncyBwYXJhbWV0ZXIgaXMgdGhlIHJlcGx5IHBhcmFtZXRlciwgdGhlbiB0aGUgbmV3IHBh\ncmFtZXRlciBpcyBjcmVhdGVkIGFmdGVyIHRoZSBkaXJlY3QgcGFyYW1ldGVyKS4gVXNl\nIHRoaXMgYnV0dG9uIGluc3RlYWQgb2YgIk5ldyIgaWYgeW91IHdhbnQgYSBwYXJhbWV0\nZXIgdG8gaW5zZXJ0ZWQgaW4gYSBwYXJ0aWN1bGFyIGxvY2F0aW9uLg2lIEhpZGUgU2Ny\naXB0IC0gaGlkZXMgdGhlIHBhcmFtZXRlciBzdW1tYXJ5IGZpZWxkIHJldmVhbGluZyB0\naGUgcGFyYW1ldGVyIGVkaXRpbmcgYnV0dG9ucy4NpSBTaG93IFNjcmlwdCAtIGRpc3Bs\nYXlzIHRoZSBwYXJhbWV0ZXIgc3VtbWFyeSBmaWVsZCBoaWRpbmcgdGhlIHBhcmFtZXRl\nciBlZGl0aW5nIGJ1dHRvbnMuDQ1BY2NvcmRpbmcgdG8gdGhlICdhZXRlJyBkZWZpbml0\naW9uLCBpZiB0aGUgZW51bSBhdHRyaWJ1dGUgaXMgc2V0LCB0aGUgZGF0YSB0eXBlIGlz\nIGludGVycHJldGVkIGFzIGEgZW51bWVyYXRpb24gSUQuIEluIHRoaXMgY2FzZSwgeW91\nIGNhbiBjbGljayBvbiB0aGUgdHlwZSBidXR0b24gdG8gZ28gdG8gdGhhdCBlbnVtZXJh\ndGlvbiBJRCBjYXJkLg0NDUVkaXRpbmcgYSBDbGFzcyBDYXJkDUEgQ2xhc3MgY2FyZCBj\nb250YWlucyBhIHByb3BlcnR5IGxpc3QgYW5kIGdyb3VwIG9mIGF0dHJpYnV0ZXMgYXNz\nb2NpYXRlZCB3aXRoIGVhY2ggcHJvcGVydHkuIFRoZSBlZGl0aW5nIG9mIHRoZSBwcm9w\nZXJ0aWVzIG9uIGEgQ2xhc3MgY2FyZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gZWRpdGluZyB0\naGUgcGFyYW1ldGVycyBvZiBhbiBFdmVudCBjYXJkLiBDbGljayBvbiAiUHJldiIgb3Ig\nIk5leHQiIGJ1dHRvbnMgdG8gdmlldyB0aGUgcHJldmlvdXMgb3IgbmV4dCBwcm9wZXJ0\neSBpbiBhIGxpc3QuIENsaWNrIG9uIHRoZSAiTmV3IiBidXR0b24gdG8gY3JlYXRlIGEg\nbmV3IHByb3BlcnR5IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuIENsaWNrIG9uIHRoZSAi\nSW5zZXJ0IiBidXR0b24gdG8gYWRkIGEgcHJvcGVydHkganVzdCBhZnRlciB0aGUgY3Vy\ncmVudGx5IGRpc3BsYXllZCBvbmUuIENsaWNrIG9uICJEZWxldGUiIHRvIGRlbGV0ZSBh\nIHByb3BlcnR5Lg0NVGhlIGVsZW1lbnQgbGlzdCBpcyBqdXN0IGEgZmllbGQgb24gdGhl\nIGNhcmQgYXQgdGhpcyB0aW1lLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gdXNlciBpbnRl\ncmZhY2UgdG8gZWRpdCB0aGUgZWxlbWVudCBsaXN0LCBzbyB5b3XVbGwgaGF2ZSB0byBl\nZGl0IHRoZSBsaXN0IGRpcmVjdGx5LiBUaGUgZWxlbWVudCBsaXN0IGlzIHN0cnVjdHVy\nZWQgaW4gYSB3YXkgdGhhdCB0aGUgaW5mb3JtYXRpb24gb2YgZWFjaCBlbGVtZW50IG9j\nY3VwaWVzIG9uZSBsaW5lLiBFYWNoIGxpbmUgaGFzIGEgbnVtYmVyIG9mIGl0ZW1zIHNl\ncGFyYXRlZCBieSBjb21tYSBhbmQgZWFjaCBpdGVtIHNob3VsZCBiZSBmb3VyIGNoYXJh\nY3RlcnMgbG9uZy4gVGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGNsYXNzIElEIG9mIHRoZSBl\nbGVtZW50LiBUaGUgb3RoZXIgaXRlbXMgYXJlIHRoZSBrZXkgZm9ybXMuDQ0NRWRpdGlu\nZyBhbiBFbnVtZXJhdGlvbiBjYXJkDUVhY2ggRW51bWVyYXRpb24gY2FyZCBoYXMgYSBs\naXN0IG9mIGVudW1lcmF0b3JzLiBUaGUgRW51bWVyYXRpb24gTGlzdCBmaWVsZCBhdCB0\naGUgYm90dG9tIG9mIHRoZSBjYXJkIHNlcnZlcyBhcyBhbiBpbmRleC4gQ2xpY2sgb25l\nIG9mIHRoZSBlbnVtZXJhdG9ycyB0byBlZGl0IGl0LiBZb3UgY2FuIGFsc28gY2xpY2sg\nb24gIlByZXYiIG9yICJOZXh0IiBidXR0b25zIHRvIHZpZXcgdGhlIHByZXZpb3VzIG9y\nIG5leHQgZW51bWVyYXRlciBpbiB0aGUgbGlzdC4gQ2xpY2sgb24gdGhlICJOZXciIGJ1\ndHRvbiB0byBjcmVhdGUgYSBuZXcgZW51bWVyYXRlciBhdCB0aGUgZW5kIG9mIHRoZSBs\naXN0LiBDbGljayBvbiB0aGUgIkluc2VydCIgYnV0dG9uIHRvIGFkZCBhbiBlbnVtZXJh\ndGVyIGp1c3QgYWZ0ZXIgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgb25lLiBDbGljayBv\nbiAiRGVsZXRlIiB0byBkZWxldGUgYW4gZW51bWVyYXRpb24uDQ0NRWRpdGluZyBhIENv\nbXBhcmlzb24gT3BlcmF0b3IgQ2FyZA1FYWNoIENvbXBhcmlzb24gT3BlcmF0aW9uIGNh\ncmQgY29udGFpbnMgYSBmaWVsZCBmb3IgdGhlIGN1cnJlbnQgc3VpdGUgY29kZSwgYSBj\nb21wYXJpc29uIG9wZXJhdG9yIG5hbWUsIGFuIElELCBhbmQgYSBjb21tZW50LiBDb21w\nbGV0ZSB0aGVzZSBmaWVsZHMgdG8gYWRkIG9yIGVkaXQgY29tcGFyaXNvbiBvcGVyYXRv\ncnMuDQ0NTG9jYWxpemF0aW9uDUFsdGhvdWdoIGl01XMgcG9zc2libGUgdG8gbG9jYWxp\nemUgeW91ciDUYWV0ZdUgcmVzb3VyY2UgYnkgbWFraW5nIGEgY29weSBvZiB5b3VyIHN0\nYWNrLCBhbmQgdGhlbiBsb2NhdGluZyBhbmQgdHJhbnNsYXRpbmcgZXZlcnkgbmFtZSBp\nbiBpdCwgdGhpcyBpcyBhIHZlcnkgdGVkaW91cyBwcm9jZXNzLCBlc3BlY2lhbGx5IGlm\nIHlvdSBoYXZlIHRvIGRvIGl0IG1hbnkgdGltZXMuIEZvcnR1bmF0ZWx5LCB0aGlzIHN0\nYWNrIHByb3ZpZGVzIGEgbWV0aG9kIHdoaWNoIHNpbXBsaWZpZXMgdGhpcyBvcGVyYXRp\nb24uIA0NV2hlbiB5b3Ugc2VsZWN0IHRoZSDSTG9jYWxpemUgYWV0ZcnTIGNvbW1hbmQg\nZnJvbSB0aGUgQWV0ZUVkaXRvciBtZW51LCB5b3XVbGwgZmlyc3QgYmUgYXNrZWQgd2hl\ncmUgeW911WQgbGlrZSB0byBzdG9yZSB0aGUgdHJhbnNsYXRlZCBjb3B5IG9mIHRoZSBl\nZGl0b3Igc3RhY2sgd2hpY2ggd2FzIGZyb250bW9zdCB3aGVuIHRoZSBjb21tYW5kIHdh\ncyBleGVjdXRlZC4gWW91IHdpbGwgdGhlbiBiZSBhc2tlZCBpZiB5b3Ugd2lzaCB0byB1\nc2UgYSB0cmFuc2xhdGlvbiB0YWJsZSBmaWxlLiBBIHRyYW5zbGF0aW9uIHRhYmxlIGZp\nbGUgaXMgYSB0ZXh0IGZpbGUgd2hlcmUgdGhlIG9kZCBudW1iZXIgbGluZXMgYXJlIG5h\nbWVzIGZyb20gdGhlIGFldGUgc3RhY2sgaW4gdGhlIHNvdXJjZSBsYW5ndWFnZSwgYW5k\nIHRoZSBsaW5lIGZvbGxvd2luZyB0aGF0IGlzIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUg\ndGFyZ2V0IGxhbmd1YWdlLiBJZiB5b3UgZG8gaGF2ZSBvbmUsIHRoZW4geW91IHdpbGwg\nYmUgYXNrZWQgaWYgeW91IG5lZWQgdG8gY29uZmlybSB0aGUgdHJhbnNsYXRpb24uIA0N\nV2hlbiB0aGUgbG9jYWxpemF0aW9uIHRha2VzIHBsYWNlLCBhbGwgdGhlIGxvY2FsaXph\nYmxlIG5hbWVzIGluIHRoZSBzdGFjayB3aWxsIGJlIHByZXNlbnRlZCB0byB5b3Ugdmlh\nIGRpYWxvZ3MgYW5kIHlvdSB3aWxsIGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIGNoYW5n\nZSBlYWNoIG9uZS4gQnkgZGVmYXVsdCwgdGhlIGN1cnJlbnQgbmFtZSBhcHBlYXJzIGlu\nIHRoZSB0ZXh0IGVudHJ5IGJveCBvZiBlYWNoIGRpYWxvZy4gSWYgeW911XZlIGNob3Nl\nbiBhIHRyYW5sYXRpb24gdGFibGUgdG8gd29yayB3aXRoLCB0aGUgdHJhbnNsYXRpb25z\nIHN0b3JlZCBpbiB0aGlzIGZpbGUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRleHQg\nZW50cnkgYm94IG9mIHRoZSBkaWFsb2cuIElmIHlvdSBkZWNpZGUgdGhhdCB5b3UgZG9u\n1XQgbmVlZCBhbnkgZnVydGhlciBjb25maXJtYXRpb24gb2YgdHJhbnNsYXRpb25zIGRp\nc3BsYXllZCBmcm9tIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSwgY2xpY2tpbmcgdGhlINJD\nYW5jZWzTIGJ1dHRvbiB3aWxsIGFib3J0IHRoZSBjb25maXJtYXRpb24gcHJvY2VzcyBh\nbmQgdGhlIHJlbWFpbmluZyB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgdHJhbnNsYXRpb24g\nZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YWNrLiANDUFmdGVyIHRoZSBsb2Nh\nbGl6YXRpb24gdHJhbmxhdGlvbnMgYXJlIGNvbXBsZXRlZCwgdGhlIHN0YWNrIHdpbGwg\nYmUgcmVjb25zdHJ1Y3RlZCB0byBtYWtlIHN1cmUgYWxsIGNoYW5nZXMgaGF2ZSBiZWVu\nIG1hZGUuIFRoZSBzdW0gb2YgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIGFuZCB5b3VyIG93\nbiB0cmFuc2xhdGlvbiB3aWxsIGJlIHB1dCBpbiB0aGUg0kNvZGUgU2NyYXRjaHBhZNMg\nZmllbGQgb2YgdGhlINJSZXNvdXJjZSBUb29sc9MgY2FyZCBzbyB0aGF0IHlvdSBjYW4g\ndXNlIGl0IGFzIGEgdHJhbnNsYXRpb24gdGFibGUgaW4gdGhlIGZ1dHVyZS4gVG8gY3Jl\nYXRlIGEgdHJhbnNsYXRpb24gdGFibGUsIHNlbGVjdCB0aGUg0lRyYW5zbGF0aW9uIFRh\nYmxl0yBidXR0b24gb24gdGhlINJSZXNvdXJjZSBUb29sc9MgY2FyZC4gIFRoaXMgd2ls\nbCBkdW1wIGFsbCB0aGUgbmFtZXMgaW4gdGhlIHN0YWNrIHRvIHRoZSBzY3JhdGNocGFk\nLiBZb3UgY291bGQgdXNlIHRoaXMgdG8gc2VuZCB0aGlzIGxpc3RpbmcgdG8gc29tZW9u\nZSBlbHNlIHRvIGRvIHRoZSB0cmFuc2xhdGlvbnMuIEFmdGVyIGl01XMgdHJhbnNsYXRp\nb25zIGhhdmUgYmVlbiBjb21wbGV0ZWQsIHRoaXMgZmlsZSBjYW4gYmVjb21lIGEgdHJh\nbnNsYXRpb24gdGFibGUgZm9yIHRoZSBsb2NhbGl6YXRpb24gb2YgeW91ciByZXNvdXJj\nZS4NDQ1BcHBlbmRpeDogTGFuZ3VhZ2UgTm90ZXMNDUh5cGVyVGFsaw1TaW5jZSB0aGVy\nZSBpcyBubyBnZW5lcmFsIHB1cnBvc2UgU2VuZCBBcHBsZSBFdmVudCBjb21tYW5kIGlu\nIEh5cGVyVGFsaywgQXBwbGUgRXZlbnRzIGFyZSBzZW50IHRocm91Z2ggYW4gWENNRC4g\nQ2xpZW50IGNvZGUgaW4gSHlwZXJUYWxrIGRlcGVuZHMgb24gdGhlIGZvcm1hdCBvZiB0\naGUgWENNRC4gSGVyZSB3ZSBhcmUgdXNlIGFuIFhDTUQgY2FsbGVkICJBRVNlbmQiIGZy\nb20gdGhlIHN0YWNrICJYQ01EcyBGb3IgQXBwbGUgRXZlbnRzIi4gSW4gdGhpcyBYQ01E\nLCBlYWNoIEFwcGxlIGV2ZW50IHBhcmFtZXRlciBpcyByZXByZXNlbnRlZCBieSBhIGtl\neXdvcmQgKDQgbGV0dGVyIGNvZGUpIGFuZCBkYXRhIHBhaXIsIHRoZXJlZm9yZSwgdHdv\nIEh5cGVyVGFsayBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBlYWNoIEFwcGxlIGV2ZW50\nIHBhcmFtZXRlci4gVGhlIHNhbXBsZSBjb2RlIGlzIGVzc2VudGlhbGx5IGEgbGlzdCBv\nZiBrZXl3b3JkIGFuZCBkYXRhIHBhaXJzIGZvciBhbGwgdGhlIGtleXdvcmRzIGFsbG93\nZWQuIFRoZSBvcHRpb25hbCBvbmVzIGFyZSBlbmNsb3NlZCBieSBzcXVhcmUgYnJhY2tl\ndHMgc28geW91IGNhbiByZW1vdmUgdGhlIG9uZXMgeW91IGRvIG5vdCB3YW50LiANDUFs\nbCB0aGUgbGVnYWwgdmFsdWVzIG9mIHRoZSBlbnVtZXJhdG9ycyBhcmUgYWxzbyBsaXN0\nZWQuIFRoaXMgaXMgdGhlIGZvcm1hdCBpbiB0aGUgc2NyaXB0IHRlbXBsYXRlIGZpZWxk\nIG9mIGVhY2ggZXZlbnQgd2hlbiBIeXBlclRhbGsgaXMgdGhlIGNsaWVudCBsYW5ndWFn\nZSBhbmQgbm8gZ2x1ZSByb3V0aW5lIGlzIHVzZWQuIE9idmlvdXNseSwgdGhpcyBpcyBu\nb3QgdGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMuIEEgYmV0dGVyIHdheSB3b3VsZCBi\nZSB0byBwcm92aWRlIHNvbWUgZ2x1ZSBjb2RlIHNvIHRoYXQgc2VuZGluZyBhbiBBcHBs\nZSBldmVudCBsb29rcyBsaWtlIGp1c3QgYW5vdGhlciBIeXBlclRhbGsgZnVuY3Rpb24u\nIA0NV2l0aCB0aGlzIHN0YWNrIHlvdSBjYW4gZ2VuZXJhdGUgc2FtcGxlIGNsaWVudCBj\nb2RlLiBJbiB0aGlzIHNhbXBsZSBjb2RlLCB3ZSB0YWtlIGFsbCByZXF1aXJlZCBwYXJh\nbWV0ZXJzIGFuZCBtYWtlIHRoZW0gaW50byByZXF1aXJlZCBwYXJhbWV0ZXJzIG9mIEh5\ncGVyVGFsayBmdW5jdGlvbnMuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBieSBw\nb3NpdGlvbiBhbmQgbm90IGJ5IGtleXdvcmQgc28gdGhhdCB5b3UgZG9u1XQgaGF2ZSB0\nbyByZW1lbWJlciB0aGUga2V5d29yZHMuIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFy\nZSBzdGlsbCBieSBrZXl3b3JkIGJ1dCB5b3UgY2FuIHVzZSB0aGUgZnVsbCBuYW1lIGRl\nZmluZWQgaW4gdGhlICdhZXRlJyByZXNvdXJjZSBpbnN0ZWFkIG9mIHRoZSBmb3VyIGxl\ndHRlciBjb2Rlcy4gWW91IGNhbiBhbHNvIHVzZSBmdWxsIG5hbWVzIGluIGVudW1lcmF0\nb3JzLiBXaGVuIGdsdWUgcm91dGluZXMgYXJlIHVzZWQsIHRoZSBzY3JpcHQgdGVtcGxh\ndGUgZmllbGQgd2lsbCBzaG93IGFuIGludGVyZmFjZSB0byB0aGUgZ2x1ZSByb3V0aW5l\nLg0NDU1QVyBTaGVsbCBMYW5ndWFnZQ1MaWtlIEh5cGVyVGFsaywgdGhlcmUgYXJlIG5v\nIGJ1aWx0LWluIGNvbW1hbmRzIG9yIG9mZmljaWFsIE1QVyBjb21tYW5kcyB0byBzZW5k\nIEFwcGxlIGV2ZW50cy4gT3VyIHNhbXBsZSBjb2RlIGlzIGJhc2VkIG9uIGFuIE1QVyBj\nb21tYW5kIGNhbGxlZCAiU2VuZEFFIi4gIEFnYWluLCB0aGUgcGFyYW1ldGVycyBhcmUg\naW4gYSBrZXl3b3JkIGRhdGEgcGFpciBmb3JtYXQuIFdoZW4gdGhlcmUgaXMgbm8gZ2x1\nZSByb3V0aW5lLCB0aGUgdGVtcGxhdGUgZmllbGQgaXMgaW4gdGhlIGZvcm1hdCBvZiBh\nIFNlbmRBRSBNUFcgY29tbWFuZC4gT3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgZW5jbG9z\nZWQgYnkgYnJhY2tldHMgc28gdGhhdCB0aGV5IGNhbiBiZSByZW1vdmVkLg0NQ3VycmVu\ndGx5IHRoZSBnbHVlIHJvdXRpbmUgZm9yIGFuIE1QVyBTaGVsbCBjb21tYW5kIGlzIGp1\nc3QgYW4gYWxpYXMgc28gaXTVcyBub3QgbmVjZXNzYXJ5IHRvIHJlcGVhdCBpbmZvcm1h\ndGlvbiBzdWNoIGFzIGV2ZW50IGNsYXNzZXMgYW5kIElE1XMgb3IgdGhlIHRhcmdldCBh\ncHBsaWNhdGlvbi4NDQ1QYXNjYWwgYW5kIEMNVGhlcmUgaXMgYSB0b29sYm94IGNhbGwg\nQUVTZW5kIGZvciBzZW5kaW5nIEFwcGxlIGV2ZW50cywgYnV0IHRoaXMgY2FsbCBjYW5u\nb3QgYmUgdXNlZCBpbiBQYXNjYWwgd2l0aG91dCBnbHVlIHJvdXRpbmVzLiBJZiB5b3Ug\ndXNlIFBhc2NhbCBvciBDLCB5b3Ugd2lsbCBuZWVkIHNvbWUgZ2x1ZSByb3V0aW5lcy4g\nR2x1ZSByb3V0aW5lcyB0YWtlIGNhcmUgb2Ygc3R1ZmZpbmcgcGFyYW1ldGVycyBpbnRv\nIEFwcGxlIGV2ZW50cywgc2VuZGluZyB0aGVtIG9mZiwgYW5kIGV4dHJhY3RpbmcgcmVz\ndWx0cyBmcm9tIHRoZSByZXBseS4gUGFzY2FsIGRvZXMgbm90IHN1cHBvcnQgYSB2YXJp\nYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgc28geW91IGNhbm5vdCB1c2Uga2V5d29y\nZCBkYXRhIHBhaXJzIGFzIHlvdSB3b3VsZCB3aXRoIEh5cGVyVGFsayBvciBNUFcuIElu\nc3RlYWQsIGFsbCBwYXJhbWV0ZXJzIGFyZSBwb3NpdGlvbmFsLiBXaGVuIGEgcGFyYW1l\ndGVyIGlzIG9wdGlvbmFsLCBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgd2lsbCBiZSB1c2Vk\nIHNvIHRoYXQgTklMIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBhYnNlbmNlIG9m\nIGEgcGFyYW1ldGVyLiBBbm90aGVyIHByb2JsZW0gd2UgZW5jb3VudGVyIGlzIHRoYXQg\ndW5saWtlIEh5cGVyVGFsayBhbmQgTVBXLCB5b3Ugbm93IGNhbiBoYXZlIG11bHRpcGxl\nIHdheXMgb2YgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGtpbmQgb2YgZGF0YS4gRm9yIGV4\nYW1wbGUsIHN1cHBvc2Ugd2UgaGF2ZSBhIHBhcmFtZXRlciB3aG9zZSBkYXRhIHR5cGUg\naXMgVEVYVC4gSW4gUGFzY2FsLCB0aGUgdGV4dCBtYXkgYmUgaW4gdGhlIGZvcm0gb2Yg\nYSBkZXNjcmlwdG9yLCBhIGhhbmRsZSwgYSBwb2ludGVyIHRvIGEgYnVmZmVyIHBsdXMg\ndGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYSBQYXNjYWwgc3RyaW5nIG9yIGV2ZW4gYSB6\nZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiBUbyBpbmRpY2F0ZSB3aGljaCBmb3JtYXQgaXMg\ndXNlZCBpbiB0aGUgZ2x1ZSByb3V0aW5lLCB5b3UgY2FuIHVzZSB0aGUgdGhyZWUgbG93\nIGJpdHMgb2YgdGhlIHBhcmFtZXRlciBhdHRyaWJ1dGUgaW4gdGhlICdhZXRlJyByZXNv\ndXJjZS4gSGVyZSBpcyB0aGUgZm9ybWF0IHdlIGFsbG93Lg0NMS4gRGVzY3JpcHRvci4N\nMi4gSGFuZGxlLg0zLiBGaXhlZCBzaXplIGRhdGEgc3VjaCBhcyBpbnRlZ2VyIG9yIGZs\nb2F0aW5nIHBvaW50Lg00LiBQb2ludGVyIHRvIGEgYnVmZmVyIGFuZCB0aGUgc2l6ZSBv\nZiB0aGUgYnVmZmVyLg01LiBQYXNjYWwgU3RyaW5nLg02LiBDIFN0cmluZy4NDU9mIGNv\ndXJzZSwgbm90IGFsbCBvZiB0aGVtIGFyZSBhcHByb3ByaWF0ZSBmb3IgYW55IGdpdmVu\nIGRhdGEgdHlwZS4gRm9yIGV4YW1wbGUsIEMgc3RyaW5ncyB3b3VsZCBub3Qgd29yayBm\nb3IgaW50ZWdlciB0eXBlcy4gVGhhdNVzIHdoeSB3aGVuIHlvdSBwaWNrIGEgZm9ybWF0\nIHVzaW5nIHRoZSBwb3AgdXAgbWVudSwgc29tZSB3aWxsIGJlIGRpc2FibGVkLiBDdXJy\nZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IHRoZSBvcHRpb24gIzQgZm9ybWF0IHdoZW4g\naXQgaXMgdXNlZCBpbiB0aGUgcmVwbHkgcGFyYW1ldGVyLg0NSW4gYSBmZXcgc3BlY2lh\nbCBjYXNlcywgeW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIHBvaW50ZXIgdG8gYSBwYXJh\nbWV0ZXIgaW4gYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBXaGVuIHRoZSBkYXRhIHR5cGUg\naXMgJ3RydWUnLCB5b3UgY2FuIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyLiAgVGhlIGJv\nb2xlYW4gcmVzdWx0IG9mIGZhbHNlIHdpbGwgaW5kaWNhdGUgdGhlIGFic2VuY2Ugb2Yg\ndGhlIHBhcmFtZXRlci4gV2hlbiB0aGUgZGF0YSB0eXBlIGlzIGFuICdlbnVtJywgaWYg\neW91IGNhbiBhc3N1bWUgdGhhdCBhIHZhbGlkIHBhcmFtZXRlciBpcyBmb3VyIHByaW50\nYWJsZSBjaGFyYWN0ZXJzLCB0aGVuIHlvdSBjYW4gdXNlIHZhbHVlIDAgdG8gaW5kaWNh\ndGUgYWJzZW5jZSBvZiBhIHBhcmFtZXRlci4gV2hlbiB0aGUgcGFyYW1ldGVyIGlzIGEg\naGFuZGxlLCB1c2UgTklMIHRvIGluZGljYXRlIHRoZSBhYnNlbmNlIG9mIGEgcGFyYW1l\ndGVyLg0NV2hlbiBjb2RlIGlzIGdlbmVyYXRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGtu\nb3cgdGhhdCAnZnNzICcgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25zdGFudCB0eXBl\nRlNTLCB0aGUgUGFzY2FsIHR5cGUgRlNTcGVjIGFuZCB0aGUgQyB0eXBlIEZTU3BlYy4g\nSW5mb3JtYXRpb24gZm9yIHRoZSBjb21tb24gZGF0YSB0eXBlcyB1c2VkIGluIEFwcGxl\nIEV2ZW50cyBpcyBjb250YWluZWQgaW4gdGhlIHN0YWNrLiBIb3dldmVyIGl0IGlzIGEg\nbGFyZ2UgdGFzayB0byBkZWZpbmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgaW4gdGhl\nIE1hY2ludG9zaCwgYW5kIGl0IGlzIGltcG9zc2libGUgdG8ga25vdyB0aGUgbmFtZXMg\nb2YgeW91ciBwcml2YXRlIGRhdGEgdHlwZXMuIElmIHlvdSB3YW50IHRoZXNlIGV4dHJh\nIGRhdGEgdHlwZXMsIHlvdSBjYW4gYWRkIHlvdXIgb3duIGJ5IG1vZGlmeWluZyB0aGUg\nTmFtZU9mRGF0YVR5cGUgZnVuY3Rpb24gaW4gdGhlIHNjcmlwdCBvZiB0aGlzIHN0YWNr\nLiBJbiB0aGlzIGZ1bmN0aW9uLCBlYWNoIGZvdXIgY2hhcmFjdGVyIElEIGlzIGFzc29j\naWF0ZWQgd2l0aCBhIGxpc3Qgb2YgbmFtZXMuICBGb3IgZXhhbXBsZSwgJ2ZzcyAnIGlz\nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGxpc3Q6IA0gICAgICAgICAgICAg\nICAgIkZTU3BlYyxGU1NwZWNQdHIsRlNTcGVjSGFuZGxlLHR5cGVGU1MsRlNTcGVjLDcw\nIg1UaGUgZmlyc3QgbmFtZSBpcyB0aGUgUGFzY2FsIHR5cGUgbmFtZSwNc2Vjb25kIG5h\nbWUgaXMgdGhlIFBhc2NhbCBwb2ludGVyIG5hbWUsDXRoaXJkIG5hbWUgaXMgdGhlIFBh\nc2NhbCBIYW5kbGUgbmFtZSwNZm91cnRoIG5hbWUgaXMgdGhlIGNvbnN0YW50IHR5cGUg\nbmFtZSwNZmlmdGggbmFtZSBpcyB0aGUgQyB0eXBlIG5hbWUsDXNpeHRoIG5hbWUgaXMg\ndGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0eXBlLCB3aGVyZSAtMSBkZW5vdGVzIHZhcmlh\nYmxlIGxlbmd0aC4NDVRvIGludHJvZHVjZSBuZXcgZGF0YSB0eXBlLCBqdXN0IGFkZCBp\ndCB0byB0aGUgZnVuY3Rpb24uIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhlIGxlbmd0aCBm\naWVsZCBpcyB0byBkZWNpZGUgd2hldGhlciBhIHBhcmFtZXRlciBzaG91bGQgYmUgcGFz\nc2VkIG9uIHRoZSBzdGFjayBvciBwYXNzZWQgYnkgcmVmZXJlbmNlIGFzIGluIEMsIHNv\nIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgYWNjdXJhdGUuIEl0IHdpbGwgYmUgYXR0ZW1w\ndGVkIHRvIHBhc3Mgb24gdGhlIHN0YWNrIGlmIGl0IGlzIGxlc3MgdGhhbiA1IGJ5dGVz\nIGxvbmcuIElmIHlvdSBoYXZlIGEgZGF0YSB0eXBlIHRoYXQgaXMgbW9yZSB0aGFuIDQg\nYnl0ZXMgbG9uZyBidXQgeW91IHN0aWxsIHdhbnQgdG8gcGFzcyBpdCBvbiB0aGUgc3Rh\nY2sgaW4gQywgeW91IG1heSBmYWtlIGEgbGVuZ3RoIGVxdWFsIHRvIDQgdG8gZm9vbCB0\naGUgY29kZSBnZW5lcmF0b3IuDQ1XaGVuIHRoZSAnYWV0ZScgcmVzb3VyY2UgaXMgbm90\nIGRlc2lnbmVkIGFzIGEgUGFzY2FsIHJvdXRpbmUsIGFsbCB0aGUgcmVzZXJ2ZWQgYml0\ncyBhcmUgY2xlYXIgYW5kIHRoYXQgbWVhbnMgdGhhdCB0aGUgZm9ybWF0IGlzIGEgZGVz\nY3JpcHRvci4gU2luY2UgdGhpcyBpcyB0aGUgbW9zdCBnZW5lcmFsIGZvcm0sIGl0IGNh\nbiBhbHdheXMgYmUgdXNlZC4gSXQgc2hvdWxkIGJlIHBvaW50ZWQgb3V0IHRoZSAnYWV0\nZScgcmVzb3VyY2UgeW91IHJlYWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBpcyBkZWZpbmVk\nIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uLiBXaGVuIHlvdSBhcmUgdGhlIGNsaWVu\ndCwgeW91IGNhbiBjaGFuZ2UgdGhlIFBhc2NhbCBkYXRhIGZvcm1hdCBmb3IgeW91IG93\nbiB1c2UgYXMgYSBjbGllbnQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHNlcnZlctVzLiBT\nbyB5b3UgY2FuIHBpY2sgd2hhdCBzdWl0cyB5b3UgYXMgYSBjbGllbnQuIFlvdSBtYXkg\nYWxzbyBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9ybWF0IHdoZW4gYW4gJ2FldGUnIGlz\nIHJlYWQgZnJvbSBhbm90aGVyIGZpbGUuIEFzIGEgbWF0dGVyIG9mIGZhY3QsIGlmIGFz\nIGEgY2xpZW50LCB5b3UgYWx3YXlzIHVzZXMgYSBwYXJ0aWN1bGFyIG9wdGlvbmFsIHBh\ncmFtZXRlciwgeW91IG1heSBldmVuIGNoYW5nZSBpdCBmcm9tIG9wdGlvbmFsIHRvIHJl\ncXVpcmVkIGZvciB0aGUgcHVycG9zZSBvZiBnZW5lcmF0aW5nIGNsaWVudCBjb2RlLiBO\nbyBoYXJtIGlzIGRvbmUgYXMgbG9uZyBhcyB5b3UgZG8gbm90IHRyeSB0byB3cml0ZSBi\nYWNrIHRoZSAnYWV0ZScgcmVzb3VyY2UgdG8gdGhlIHNlcnZlciBhcHBsaWNhdGlvbi4N\nDUdsdWUgcm91dGluZXMgdGFrZSBjYXJlIG9mIG1vc3Qgb2YgdGhlIGludGVyZmFjZSB0\nbyB0aGUgQXBwbGUgRXZlbnQgTWFuYWdlciBmb3IgeW91LiAgSWYgeW91IGNhbiB1c2Ug\ndGhlbSBmcm9tIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgd2hlcmUgY29tcGlsaW5n\nIGlzIGZhc3QsIGFuZCB5b3UgY2FuIHNpbmdsZSBzdGVwIHRocm91Z2ggZWFjaCBzdGF0\nZW1lbnQgYW5kIGV4YW1pbmUgdmFyaWFibGVzIGFzIG5lZWRlZCwgdGhlbiB5b3UgY2Fu\nIHVzZSBpdCBhcyBhIHNjcmlwdGluZyBsYW5ndWFnZS4NDVRoZXJlIGFyZSBhIG51bWJl\nciBvZiBwYXJhbWV0ZXJzIHRvIEFFU2VuZC4gV2hlbiB0aGUgY2xpZW50IGNvZGUgaXMg\nZ2VuZXJhdGVkLCB0aGVyZSBpcyBhIGRlZmF1bHQgZm9yIGVhY2ggcGFyYW1ldGVyLiBG\nb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgaWRsZSBwcm9jZWR1cmUgaXMgTklMLiBIb3dl\ndmVyLCB5b3UgbWF5IHB1dCBpbiB5b3VyIG93biBkZWZhdWx0IGluIHRoZSBQcmVmZXJl\nbmNlcyBjYXJkLiBJbiB0aGUgZGVmYXVsdCB0YXJnZXQgZmllbGQgb2YgdGhlIFByZWZl\ncmVuY2UgY2FyZCwgaWYgdGhlcmUgaXMgYSBwcm9jZXNzIG5hbWUgcHJlc2VudCwgdGhp\ncyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQuIElmIHRo\nZXJlIGlzIG5vIG5hbWUsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgYXBwbGljYXRpb24g\nd2lsbCBiZSBzZWxlY3RlZCBieSB0aGUgUFBDIEJyb3dzZXIuIElmIHRoZSBuYW1lIGlz\nICJzZWxmIiwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBldmVudCB3aWxsIGJlIHNlbnQg\ndG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZi4NDU9uIHRoZSBzZXJ2ZXIgc2lkZSwgaXQg\nd291bGQgYmUgbmljZSB0byBoYXZlIGdsdWUgY29kZSB0aGF0IHdvdWxkIHRha2UgYW4g\nQXBwbGUgZXZlbnQgYW5kIHRyYW5zZm9ybSBpdCBpbnRvIGEgbm9ybWFsIHByb2NlZHVy\nZSBjYWxsLiBUaGF01XMgd2h5IHdlIGFsc28gZ2VuZXJhdGUgc2FtcGxlIHNlcnZlciBn\nbHVlIGNvZGUuIEZvciBldmVyeSBldmVudCwgdHdvIHByb2NlZHVyZXMgd2lsbCBiZSBn\nZW5lcmF0ZWQuIE9uZSBpcyB0aGUgc2hlbGwgcHJvY2VkdXJlIHRoYXQgYWN0dWFsbHkg\nZXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi4gKFlvdSBoYXZlIHRvIGZpbGwgaW4gdGhlIGFj\ndHVhbCBjb2RlIHlvdXJzZWxmKS4gVGhlIG90aGVyIHByb2NlZHVyZSBpcyBhbiBldmVu\ndCBoYW5kbGVyIHRoYXQgdHJhbnNsYXRlcyB0aGUgZXZlbnQgaW50byBhIHByb2NlZHVy\nZSBjYWxsLiBGb3IgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLCB5b3UgbXVzdCBmaWxsIGlu\nIHRoZSBkZWZhdWx0IHZhbHVlIChiZWNhdXNlIHRoYXQgaW5mb3JtYXRpb24gaXMgbm90\nIGF2YWlsYWJsZSBpbiB0aGUgJ2FldGUnIHJlc291cmNlKS4gIEFkZGl0aW9uYWxseSwg\neW91IG11c3QgcHJvdmlkZSB5b3VyIG93biBlcnJvciBoYW5kbGluZywgYnV0IHlvdSBk\nbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBleHRyYWN0aW5nIHBhcmFtZXRlcnMgZnJv\nbSB0aGUgQXBwbGUgRXZlbnQuDQ1JdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgaW50\nZXJmYWNlIHRvIHlvdXIgcHJvY2VkdXJlIGluIHRoZSBzZXJ2ZXIgc2FtcGxlIGNvZGUg\naXMgdGhlIHNhbWUgYXMgdGhlIGludGVyZmFjZSB0byB0aGUgc2VuZCBBcHBsZSBFdmVu\ndCBjbGllbnQgc2FtcGxlIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCBpZiBpbiB5b3VyIGNs\naWVudCBjb2RlIHlvdSBzZW5kIHRoZSBldmVudCB0byB5b3Vyc2VsZiwgeW91IGNhbiBj\nYWxsIGVpdGhlciBwcm9jZWR1cmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGUg\nb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgb25lIGdvZXMgdGhyb3VnaCB0aGUgQXBwbGUg\nRXZlbnQgYW5kIHRoZSBvdGhlciBvbmUgZG9lcyBub3QuIFdlIHRhbGsgYSBsb3QgYWJv\ndXQgZmFjdG9yaW5nIGluIEFwcGxlIEV2ZW50cy4gQnkgdGhpcyB3ZSBtZWFuIHRoYXQg\ndXNlciBpbnRlcmZhY2UgYWN0aW9ucyBzaG91bGQgYmUgdHJhbnNsYXRlZCBpbnRvIEFw\ncGxlIEV2ZW50cyBhbmQgc2VudCB0aHJvdWdoIHRoZSBBcHBsZSBFdmVudCBNYW5hZ2Vy\nLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciByZWNvcmRpbmcgQXBwbGUgRXZlbnRz\nIGluIHRoZSBmdXR1cmUuIFRoZSBzYW1wbGUgY29kZSBnZW5lcmF0ZWQgaXMgYWxyZWFk\neSBzZXQgdXAgZm9yIHRoZSBwdXJwb3NlIG9mIGZhY3RvcmluZyBhbmQgcmVjb3JkaW5n\nLg0NDUNvcHlyaWdodCAxOTkyIEFwcGxlIENvbXB1dGVyLCBJbmMuDUFwcGxlIGFuZCBB\ncHBsZaggRXZlbnQgYXJlIHRyYWRlbWFya3Mgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4s\nIHJlZ2lzdGVyZWQgaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4A//oAEgBB\nYm91dCB0aGlzIHN0YWNryf/4ABEAQWJvdXQgdGhpcyBTdGFjawBpbnN0cnVjdGlvbnMA\nAAAAAAAAAAAAAAABAEJNQVAAABFvAAAAAAAAAAAAAQAAAAAAAAFWAgAANQAGATMB/QAV\nAAABUwH+AAAAAAAAAAAAAAAkAAAAnI3jHxS/hb+Fv4W/hb+Fv4W/hb+Fo4UgAiDjLBAQ\nIAIg4w4AAIwQgOIQAuEOhYriEQLhDuIRA+EOtYaOEIDiEALhDo0QQOIRgOENpYGJ4x8Q\n4x8Iv4a/hr+Gv4a/hr+Gv4a/hqKGjhEQ4x0QjREg4x0EuYGJ4xceRAHwAYDjFxE1QACA\n4xcRwTHMlZjAQxic4xcewUoSliUgRKSg4xcUwXmSlCHgRKSY4xcSwUBSlCUARKSE4xcR\nwTOMdBjAQxi4AAAA1yBDQVJEAAA5+gAAAAAAAArKAAAAAAAAAAAAAAAAAAA68AAADjwA\nEwArAADRUAADAAAAQAB2AAMBgAAEARgAGQFygAMAAAAAAAEAAAAMAAAAEFJlYnVpbGQA\nAG9uIG1vdXNlVXANc2V0IGN1cnNvciB0byB3YXRjaA1wdXNoIGNhcmQNQ29uc3RydWN0\nTGluaw1wb3AgY2FyZA1lbmQgbW91c2VVcA0NAAABAgATAQAAFgG8AEoB+KAAAABgdgAB\nAAAADAAAABBJbnN0cnVjdGlvbnMAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJD\nbGljayBoZXJlIHRvIGdldCBpbnN0cnVjdGlvbnMgZm9yIHVzaW5nIHRoaXMgc3RhY2su\nIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVz\naCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9tDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdv\nIGNkICJJbnN0cnVjdGlvbnMiDWVuZCBtb3VzZVVwDQAAoAAUAgQATADNAT4B/AAHAAAA\nAAAAAAQACQAAAAxzY3JhdGNoAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhp\ncyBpcyBhIGdlbmVyYWwgcHVycG9zZSBzY3JhdGNoIGFyZWEgdG8gaG9sZCBnZW5lcmF0\nZWQgdGV4dCBpbmZvcm1hdGlvbi4iDWVuZCBNb3VzZVdpdGhpbg0AAcwAFQIVAEwAeQES\nAMoABwAAAAAAAAAEAAoAAAANc3VpdGVMaXN0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFs\nbG9vbiAiVGhpcyBpcyB0aGUgbGlzdCBvZiBzdWl0ZSBjb2RlcyBpbiB0aGlzIHN0YWNr\nLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZXVwDWdsb2JhbCBnRGVsZXRlU3VpdGUs\nZ1doZXJlRnJvbQ1wdXQgdmFsdWUgb2YgdGhlIGNsaWNrTGluZSBpbnRvIHgNDWlmIHgg\nPSAiIiB0aGVuIGV4aXQgbW91c2VVcA1pZiBnRGVsZXRlU3VpdGUgdGhlbg1kZWxldGVT\ndWl0ZSB4DXB1dCBmYWxzZSBpbnRvIGdEZWxldGVTdWl0ZQ1leGl0IG1vdXNlVXANZWxz\nZQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZh\nc3QNZ28gY2FyZCAic3VpdGUiICYmIHgNZW5kIGlmDWVuZCBtb3VzZXVwDQ1vbiBkZWxl\ndGVTdWl0ZSB0aGVTdWl0ZQ1iZWVwIDINZW5kIGRlbGV0ZVN1aXRlAADMABcBAAFBAWYB\nVAGzoAIAAAAAAAEAFQAKAQAADVByaW50IEZpZWxkAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBwcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNv\nZGUgc2NyYXRjaHBhZCBmaWVsZC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1w\ncmludCAoY2FyZCBmaWVsZCAic2NyYXRjaCIpDWVuZCBtb3VzZVVwAAFoABgBAAFBAbUB\nVAH8oAIAAAAAAAEAFQAKAQAADVNhdmUgQXPJAABvbiBNb3VzZVdpdGhpbg1TaG93QmFs\nbG9vbiAiQ2xpY2sgaGVyZSB0byBzYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgY29kZSBz\nY3JhdGNocGFkIGZpZWxkIHRvIGEgVEVYVCBmaWxlLiINZW5kIE1vdXNlV2l0aGluDQ1v\nbiBtb3VzZVVwDWFzayBmaWxlICJTYXZlIHRoZSBzY3JhdGNocGFkIGFzOiINaWYgaXQg\nPD4gIiIgb3IgdGhlIHJlc3VsdCBpcyBub3QgIkNhbmNlbCIgdGhlbg1wdXQgaXQgaW50\nbyByZWYNb3BlbiBmaWxlIHJlZg13cml0ZSBjYXJkIGZpZWxkICJzY3JhdGNoIiB0byBm\naWxlIHJlZg1jbG9zZSBmaWxlIHJlZg1lbmQgaWYNZW5kIG1vdXNlVXAAAAFkABkBAAFB\nAM0BVAEYoAIAAAAAAAEAFQAKAQAADUNsZWFyIEZpZWxkAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBjbGVhciB0aGUgY29kZSBzY3JhdGNocGFk\nIGZpZWxkLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWFuc3dlciAiQ2xlYXIg\ndGhlIGNvbnRlbnRzIG9mIHRoZSBjb2RlIHNjcmF0Y2ggcGFkIGZpZWxkLiIgd2l0aCAi\nT0siIG9yICJDYW5jZWwiDWlmIGl0IGlzICJDYW5jZWwiIHRoZW4gZXhpdCBtb3VzZVVw\nDXB1dCBlbXB0eSBpbnRvIGNhcmQgZmllbGQgInNjcmF0Y2giDXB1dCAiU2NyYXRjaHBh\nZCIgaW50byBjYXJkIGZpZWxkICJwYWROYW1lIg1lbmQgbW91c2VVcAAAAUYAGgEAARgA\neQEsAMqgBAAAAAAAAQAAAAwAAAAQTmV3IFN1aXRlAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBhZGQgYSBuZXcgc3VpdGUuIg1lbmQgTW91c2VX\naXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NbG9jayBzY3JlZW4NZ28g\nbGFzdCBjYXJkIG9mIGJrZ25kICJzdWl0ZUluZm8iDURvTWVudSAiTmV3IENhcmQiDXB1\nc2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ11bmxvY2sgc2NyZWVuIHdpdGggdmlz\ndWFsIHdpcGUgbGVmdA1jbGljayBhdCB0aGUgbG9jIG9mIGZsZCAic3VpdGVDb2RlIg1l\nbmQgbW91c2VVcAABJAAbAQABGAAKASwAbqAEAAAAAAABAAAADAAAABBQcmVmZXJlbmNl\nc8kAAG9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50\nbyBnV2hlcmVGcm9tDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdvIGNhcmQgInByZWZlcmVu\nY2UiDWVuZCBtb3VzZVVwDQ1vbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBnbyB0byBhIGNhcmQgd2hlcmUgeW91IGNhbiB2aWV3IGFuZCLCDSYiIHNl\ndCBwcmVmZXJlbmNlcyBmb3IgdGhpcyBzdGFjay4iDWVuZCBNb3VzZVdpdGhpbgAAB1oA\nHAEAAOUAEAD5AGegBAAAAAAAAQAAAAwAAAAQQ2xpZW50IENvZGUAAG9uIE1vdXNlV2l0\naGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2Rl\nIHRoYXQgYSBjbGllbnQgY291bGQgdXNlIHRvIHNlbmQgQXBwbGUgRXZlbnQuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGluRWRpdCwgY2xpZW50TGFuZw1z\nZXQgbG9ja1NjcmVlbiB0byB0cnVlDXNldCBsb2NrUmVjZW50IHRvIHRydWUNQ2hlY2tQ\ncmVmZXJlbmNlDXB1dCAiZmFsc2UiIGludG8gaW5FZGl0DXB1c2ggY2FyZA1wdXQgQ2xp\nZW50U2FtcGxlKCJpbml0IikgaW50byBzYW1wbGVDb2RlDWlmIHRoZSBvcHRpb25LZXkg\naXMgZG93biB0aGVuDWRvbWVudSAiQmFjayINcHV0IENsaWVudFNhbXBsZSh3b3JkIDEg\nb2Ygc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQpIGFmdGVyIHNhbXBsZUNvZGUNZWxzZQ0t\nLXB1dCAiIiBpbnRvIGV2ZW50SW52ZW50b3J5DWdvIHRvIGZpcnN0IGNhcmQgb2YgYmtn\nbmQgZXZlbnRzDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIg\naW50byBzdWl0ZUNvdW50DXJlcGVhdCB3aXRoIHN1aXRlSW5kZXggPSAyIHRvIHN1aXRl\nQ291bnQNc2V0IGN1cnNvciB0byBidXN5DWdvIGNhcmQgc3VpdGVJbmRleCBvZiBia2du\nZCAic3VpdGVJbmZvIg1wdXQgZmllbGQgIkV2ZW50TGlzdCIgaW50byBteUV2ZW50TGlz\ndA1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBteVN1aXRlQ29kZQ1wdXQgZmllbGQg\nIkNsYXNzTGlzdCIgaW50byBteUNsYXNzTGlzdA1wdXQgQ2xpZW50U2FtcGxlKCJzdWl0\nZSIpIGFmdGVyIHNhbXBsZUNvZGUgLS0gdGhpcyBpcyBhbiAiaW5pdGlhbGl6YXRpb24i\nDS0tIG5vdyBkbyBpdCBmb3IgZWFjaCBldmVudCBpbiB0aGUgbGlzdA1wdXQgbnVtYmVy\nIG9mIGxpbmVzIGluIG15RXZlbnRMaXN0IGludG8gZXZlbnRDb3VudA1yZXBlYXQgd2l0\naCBldmVudEluZGV4ID0gMSB0byBldmVudGNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1p\nZiBqdW1wKCJldmVudCIgJiYgaXRlbSAyIG9mIGxpbmUgZXZlbnRJbmRleCBvZiBteUV2\nZW50TGlzdCkgdGhlbg1wdXQgQ2xpZW50U2FtcGxlKCJldmVudCIpIGFmdGVyIHNhbXBs\nZUNvZGUNLS1wdXQgZmllbGQgInNjcmlwdFRlbXBsYXRlIiAmIHJldHVybiAmIHJldHVy\nbiBhZnRlciBldmVudEludmVudG9yeQ1lbmQgaWYNZW5kIHJlcGVhdA0tLSBub3cgZG8g\naXQgZm9yIGVhY2ggY2xhc3MgaW4gdGhlIGxpc3QNcHV0IG51bWJlciBvZiBsaW5lcyBp\nbiBteUNsYXNzTGlzdCBpbnRvIGNsYXNzQ291bnQNcmVwZWF0IHdpdGggY2xhc3NJbmRl\neCA9IDEgdG8gY2xhc3NDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiY2xh\nc3MiICYmIGl0ZW0gMiBvZiBsaW5lIGNsYXNzSW5kZXggb2YgbXlDbGFzc0xpc3QpIHRo\nZW4NcHV0IENsaWVudFNhbXBsZSgiY2xhc3MiKSBhZnRlciBzYW1wbGVDb2RlDWVuZCBp\nZg1lbmQgcmVwZWF0DXB1dCBDbGllbnRTYW1wbGUoInN1aXRlRW5kIikgYWZ0ZXIgc2Ft\ncGxlQ29kZSAtLSB0aGlzIGlzIGEgInRlcm1pbmF0aW9uIg1lbmQgcmVwZWF0DS0tIHB1\ndCBldmVudEludmVudG9yeSBhZnRlciBzYW1wbGVDb2RlDWVuZCBpZg1wb3AgY2FyZA1Q\ndXRTY3JhdGNoIHNhbXBsZUNvZGUsICJDbGllbnQgU2FtcGxlIENvZGUiDXB1dCB0cnVl\nIGludG8gaW5FZGl0DWVuZCBtb3VzZVVwDQ0tLSBsYW5ndWFnZSBkZXBlbmRlbnQgcGFy\ndA0NZnVuY3Rpb24gQ2xpZW50U2FtcGxlIGNhcmRUeXBlDWlmIGNhcmRUeXBlID0gImV2\nZW50IiB0aGVuDXJldHVybiBDbGllbnRUZW1wbGF0ZSgpICYgcmV0dXJuICYgcmV0dXJu\nDWVsc2UNcmV0dXJuICIiDWVuZCBpZg1lbmQgQ2xpZW50U2FtcGxlDQ0AAFE6AB0BAADL\nABAA3wBnoAQAAAAAAAEAAAAMAAAAEFNlcnZlciBDb2RlAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnZW5lcmF0ZSBzYW1wbGUgY29kZSB0aGF0\nIGEgY2xpZW50IGNvdWxkIHVzZSB0byBzZW5kIEFwcGxlIEV2ZW50LiINZW5kIE1vdXNl\nV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBpbkVkaXQsc2VydmVyTGFuZw1zZXQgbG9j\na1NjcmVlbiB0byB0cnVlDXNldCBsb2NrUmVjZW50IHRvIHRydWUNcHVzaCBjYXJkDXB1\ndCAiZmFsc2UiIGludG8gaW5FZGl0DXB1dCAiIiBpbnRvIGNvbnN0cw1pZiB0aGUgb3B0\naW9uS2V5IGlzIGRvd24gdGhlbg1kb21lbnUgIkJhY2siDXB1dCBTZXJ2ZXJTYW1wbGUo\nd29yZCAxIG9mIHRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgY2FyZCkgYWZ0ZXIgY29uc3Rz\nDWVsc2UNaWYgc2VydmVyTGFuZyA9ICJQYXNjYWwiIHRoZW4NcHV0ICJDT05TVCIgJiBy\nZXR1cm4gYWZ0ZXIgY29uc3RzDWVuZCBpZg1wdXQgIiIgaW50byBldmVudElESW5mbw1w\ndXQgIiIgaW50byBldmVudEtleUluZm8NcHV0ICIiIGludG8gY2xhc3NDb25zdA1wdXQg\nIiIgaW50byBwcm9wQ29uc3QNcHV0ICIiIGludG8gZW51bUNvbnN0DXB1dCAiIiBpbnRv\nIHNhbXBsZUNvZGUNcHV0ICIiIGludG8gaW5zdGFsbENvZGUNcHV0IFNlcnZlclNhbXBs\nZSgiaW5pdCIpIGFmdGVyIHNhbXBsZUNvZGUgLS0gdGhpcyBpcyBhbiAiaW5pdGlhbGl6\nYXRpb24iDWdvIHRvIGZpcnN0IGNhcmQgb2YgYmtnbmQgZXZlbnRzDXB1dCBudW1iZXIg\nb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBzdWl0ZUNvdW50DXJlcGVh\ndCB3aXRoIHN1aXRlSW5kZXggPSAyIHRvIHN1aXRlQ291bnQNc2V0IGN1cnNvciB0byBi\ndXN5DWdvIGNhcmQgc3VpdGVJbmRleCBvZiBia2duZCAic3VpdGVJbmZvIg1wdXQgZmll\nbGQgIkV2ZW50TGlzdCIgaW50byBteUV2ZW50TGlzdA1wdXQgZmllbGQgInN1aXRlQ29k\nZSIgaW50byBteVN1aXRlQ29kZQ1wdXQgZmllbGQgIkNsYXNzTGlzdCIgaW50byBteUNs\nYXNzTGlzdA1wdXQgZmllbGQgIkVudW1MaXN0IiBpbnRvIG15RW51bUxpc3QNLS0gbm93\nIGRvIGl0IGZvciBlYWNoIGV2ZW50IGluIHRoZSBsaXN0DXB1dCBudW1iZXIgb2YgbGlu\nZXMgaW4gbXlFdmVudExpc3QgaW50byBldmVudENvdW50DXJlcGVhdCB3aXRoIGV2ZW50\nSW5kZXggPSAxIHRvIGV2ZW50Y291bnQNc2V0IGN1cnNvciB0byBidXN5DWlmIGp1bXAo\nImV2ZW50IiAmJiBpdGVtIDIgb2YgbGluZSBldmVudEluZGV4IG9mIG15RXZlbnRMaXN0\nKSB0aGVuDXB1dCBTZXJ2ZXJTYW1wbGUoImV2ZW50IikgYWZ0ZXIgc2FtcGxlQ29kZQ1w\ndXQgU2VydmVyU2FtcGxlKCJpbnN0YWxsIikgYWZ0ZXIgaW5zdGFsbENvZGUgLS0gdGhp\ncyBpcyB0byBpbnN0YWxsIGhhbmRsZXINcHV0ICJrQUUiICYgU3RyaXBTUChmaWVsZCAi\nRXZlbnROYW1lIikgJiAiLCIgJiAiJyIgJiDCDVJlc1R5cGUoZmllbGQgIkV2ZW50SUQi\nKSAmICInIiAmIHJldHVybiBhZnRlciBldmVudElESW5mbw1yZXBlYXQgd2l0aCBpID0g\nMyB0byBudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgInBhcmFtSW5mbyINcHV0IGxpbmUg\naSBvZiBmaWVsZCAicGFyYW1JbmZvIiBpbnRvIHgNcHV0IHF1b3RlICYgImtleUFFIiAm\nIFN0cmlwU1AoaXRlbSAxIG9mIHgpICYgcXVvdGUgaW50byB0aGlzTmFtZQ1wdXQgcXVv\ndGUgJiAiJyIgJiBSZXNUeXBlKGl0ZW0gMiBvZiB4KSAmICInIiAmIHF1b3RlIGludG8g\ndGhpc0tleQ1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHByb3BMaXN0IGludG8gbg1wdXQg\nMSBpbnRvIGoNcmVwZWF0IHVudGlsICh0aGlzTmFtZSA9IGl0ZW0gMSBvZiBsaW5lIGog\nb2YgcHJvcExpc3QpIG9yIChqID4gbikNYWRkIDEgdG8gag1lbmQgcmVwZWF0DWlmIGog\nPiBuIHRoZW4NcHV0IHRoaXNOYW1lICYgIiwiICYgdGhpc0tleSAmIHJldHVybiBhZnRl\nciBldmVudEtleUluZm8NZWxzZQ1pZiB0aGlzS2V5IDw+IGl0ZW0gMiBvZiBsaW5lIGog\nb2YgcHJvcExpc3QgdGhlbg1wdXQgdGhpc05hbWUgJiAiLCIgJiB0aGlzS2V5ICYgIix0\ncnVlIiAmIHJldHVybiBhZnRlciBldmVudEtleUluZm8NZW5kIGlmDWVuZCBpZg1lbmQg\ncmVwZWF0DWVuZCBpZiAtLSBQYXNjYWwgQyBldGMsIGdldCB0aGUgZXZlbnQgYW5kIGtl\neXdvcmQNZW5kIHJlcGVhdA0tLSBub3cgZG8gaXQgZm9yIGVhY2ggY2xhc3MgaW4gdGhl\nIGxpc3QNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBteUNsYXNzTGlzdCBpbnRvIGNsYXNz\nQ291bnQNcmVwZWF0IHdpdGggY2xhc3NJbmRleCA9IDEgdG8gY2xhc3NDb3VudA1zZXQg\nY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiY2xhc3MiICYmIGl0ZW0gMiBvZiBsaW5lIGNs\nYXNzSW5kZXggb2YgbXlDbGFzc0xpc3QpIHRoZW4NcHV0IFNlcnZlclNhbXBsZSgiY2xh\nc3MiKSBhZnRlciBzYW1wbGVDb2RlDXB1dCAiYyIgJiBTdHJpcFNQKGZpZWxkICJjbGFz\nc05hbWUiKSAmICIsIiAmICInIiAmIMINUmVzVHlwZShmaWVsZCAiY2xhc3NJRCIpICYg\nIiciICYgcmV0dXJuIGFmdGVyIGNsYXNzQ29uc3QNcmVwZWF0IHdpdGggaSA9IDEgdG8g\nbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkICJwcm9wSW5mbyINcHV0IGxpbmUgaSBvZiBm\naWVsZCAicHJvcEluZm8iIGludG8geA1wdXQgInAiICYgU3RyaXBTUChpdGVtIDEgb2Yg\neCkgaW50byB0aGlzTmFtZQ1wdXQgIiciICYgUmVzVHlwZShpdGVtIDIgb2YgeCkgJiAi\nJyIgaW50byB0aGlzS2V5DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gcHJvcExpc3QgaW50\nbyBuDXB1dCAxIGludG8gag1yZXBlYXQgdW50aWwgKHRoaXNOYW1lID0gaXRlbSAxIG9m\nIGxpbmUgaiBvZiBwcm9wTGlzdCkgb3IgKGogPiBuKQ1hZGQgMSB0byBqDWVuZCByZXBl\nYXQNaWYgaiA+IG4gdGhlbg1wdXQgdGhpc05hbWUgJiAiLCIgJiB0aGlzS2V5ICYgcmV0\ndXJuIGFmdGVyIHByb3BDb25zdA1lbHNlDWlmIHRoaXNLZXkgPD4gaXRlbSAyIG9mIGxp\nbmUgaiBvZiBwcm9wTGlzdCB0aGVuDXB1dCB0aGlzTmFtZSAmICIsIiAmIHRoaXNLZXkg\nJiAiLHRydWUiICYgcmV0dXJuIGFmdGVyIHByb3BDb25zdA1lbmQgaWYNZW5kIGlmDWVu\nZCByZXBlYXQNZW5kIGlmDWVuZCByZXBlYXQNLS0gbm93IGRvIGl0IGZvciBlYWNoIGNs\nYXNzIGluIHRoZSBsaXN0DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gbXlFbnVtTGlzdCBp\nbnRvIGVudW1Db3VudA1yZXBlYXQgd2l0aCBlbnVtSW5kZXggPSAxIHRvIGVudW1Db3Vu\ndA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiZW51bWVyYXRpb24iICYmIGxpbmUg\nZW51bUluZGV4IG9mIG15RW51bUxpc3QpIHRoZW4NcHV0IFNlcnZlclNhbXBsZSgiZW51\nbSIpIGFmdGVyIHNhbXBsZUNvZGUNcmVwZWF0IHdpdGggaSA9IDEgdG8gbnVtYmVyIG9m\nIGxpbmVzIGluIGZpZWxkICJlbnVtSW5mbyINcHV0IGxpbmUgaSBvZiBmaWVsZCAiZW51\nbUluZm8iIGludG8geA1wdXQgImtBRUVudW0iICYgU3RyaXBTUChpdGVtIDEgb2YgeCkg\naW50byB0aGlzTmFtZQ1wdXQgIiciICYgUmVzVHlwZShpdGVtIDIgb2YgeCkgJiAiJyIg\naW50byB0aGlzS2V5DXB1dCB0aGlzTmFtZSAmICIsIiAmIHRoaXNLZXkgJiByZXR1cm4g\nYWZ0ZXIgZW51bUNvbnN0DWVuZCByZXBlYXQNZW5kIGlmDWVuZCByZXBlYXQNZW5kIHJl\ncGVhdA1wdXQgU2VydmVyU2FtcGxlKCJkb25lIikgYWZ0ZXIgc2FtcGxlQ29kZSAtLSB0\naGlzIGlzIGEgInRlcm1pbmF0aW9uIg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGV2ZW50\nSURJbmZvIGludG8gbg1yZXBlYXQgd2l0aCBpID0gMSB0byBuDXB1dCBTZXJ2ZXJDb25z\ndChsaW5lIGkgb2YgZXZlbnRJREluZm8pICYgcmV0dXJuIGFmdGVyIGNvbnN0cw1lbmQg\ncmVwZWF0DWlmIG4gPiAwIHRoZW4NcHV0IHJldHVybiBhZnRlciBjb25zdHMNZW5kIGlm\nDXB1dCBudW1iZXIgb2YgbGluZXMgaW4gZXZlbnRLZXlJbmZvIGludG8gbg1yZXBlYXQg\nd2l0aCBpID0gMSB0byBuDXB1dCBTZXJ2ZXJDb25zdChsaW5lIGkgb2YgZXZlbnRLZXlJ\nbmZvKSAmIHJldHVybiBhZnRlciBjb25zdHMNZW5kIHJlcGVhdA1pZiBuID4gMCB0aGVu\nDXB1dCByZXR1cm4gYWZ0ZXIgY29uc3RzDWVuZCBpZg1wdXQgbnVtYmVyIG9mIGxpbmVz\nIGluIGNsYXNzQ29uc3QgaW50byBuDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG4NcHV0IFNl\ncnZlckNvbnN0KGxpbmUgaSBvZiBjbGFzc0NvbnN0KSAmIHJldHVybiBhZnRlciBjb25z\ndHMNZW5kIHJlcGVhdA1pZiBuID4gMCB0aGVuDXB1dCByZXR1cm4gYWZ0ZXIgY29uc3Rz\nDWVuZCBpZg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHByb3BDb25zdCBpbnRvIG4NcmVw\nZWF0IHdpdGggaSA9IDEgdG8gbg1wdXQgU2VydmVyQ29uc3QobGluZSBpIG9mIHByb3BD\nb25zdCkgJiByZXR1cm4gYWZ0ZXIgY29uc3RzDWVuZCByZXBlYXQNaWYgbiA+IDAgdGhl\nbg1wdXQgcmV0dXJuIGFmdGVyIGNvbnN0cw1lbmQgaWYNcHV0IG51bWJlciBvZiBsaW5l\ncyBpbiBlbnVtQ29uc3QgaW50byBuDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG4NcHV0IFNl\ncnZlckNvbnN0KGxpbmUgaSBvZiBlbnVtQ29uc3QpICYgcmV0dXJuIGFmdGVyIGNvbnN0\ncw1lbmQgcmVwZWF0DWlmIG4gPiAwIHRoZW4NcHV0IHJldHVybiBhZnRlciBjb25zdHMN\nZW5kIGlmDXB1dCBzYW1wbGVDb2RlIGFmdGVyIGNvbnN0cw1pZiBpbnN0YWxsQ29kZSA8\nPiAiIiB0aGVuDXB1dCBTZXJ2ZXJJbnN0YWxsKGluc3RhbGxDb2RlKSBhZnRlciBjb25z\ndHMNZW5kIGlmDWVuZCBpZg1wb3AgY2FyZA1QdXRTY3JhdGNoIGNvbnN0cywgIlNlcnZl\nciBTYW1wbGUgQ29kZSINcHV0ICJ0cnVlIiBpbnRvIGluRWRpdA1lbmQgbW91c2VVcA0N\nLS0gbGFuZ3VhZ2UgZGVwZW5kZW50IHBhcnQNDWZ1bmN0aW9uIFNlcnZlclNhbXBsZSBj\nYXJkVHlwZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlw\nU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNZ2xvYmFsIHZlcmJvc2UN\naWYgdmVyYm9zZSB0aGVuDXB1dCBmaWVsZCAiZXZlbnRDb21tZW50IiBpbnRvIHRlbXAN\naWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAieyAiICYgdGVtcCAmICIgfSIgJiByZXR1cm4g\nJiByZXR1cm4gaW50byBwcm9jSGVhZGVyDWVuZCBpZg1lbmQgaWYNcHV0IFBhc2NhbENs\naWVudFRlbXBsYXRlKCkgJiByZXR1cm4gaW50byB0ZW1wDXB1dCAiRG8iIGFmdGVyIGNo\nYXIgOSBvZiB0ZW1wDXB1dCB0ZW1wIGFmdGVyIHByb2NIZWFkZXINcHV0IFRhYiAmICJC\nRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgVGFiICYgInsgcHV0IHlv\ndXIgY29kZSBoZXJlIH0iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0IFRhYiAm\nICJEbyIgJiBwcm9jTmFtZSAmICIgOj0gTm9FcnI7IiAmIHJldHVybiBhZnRlciBwcm9j\nSGVhZGVyDXB1dCBUYWIgJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIgcHJv\nY0hlYWRlcg1wdXQgIkZ1bmN0aW9uIEhhbmRsZSIgJiBwcm9jTmFtZSDCDSYgIih0aGVB\ncHBsZUV2ZW50LCB0aGVSZXBseTpBcHBsZUV2ZW50OyB0aGVSZWZDb246TE9OR0lOVCk6\nT1NFcnI7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCBHbHVlSW5mbyhmaWVs\nZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8NcHV0IG51bWJlciBvZiBsaW5lcyBv\nZiBwYXJhbUluZm8gaW50byBjb3VudA1wdXQgKGl0ZW0gMyBvZiBwYXJhbUluZm8gPD4g\nIm51bGwiKSBpbnRvIGlzRnVuYw1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFiDXB1dCBU\nYWIgJiB0d29UYWIgaW50byB0aHJlZVRhYg1wdXQgIiIgaW50byB2YXJEZWNsYXJlDXB1\ndCBmYWxzZSBpbnRvIG5lZWRFcnINcHV0ICIiIGludG8gY2xlYW5VcENvZGUNcHV0ICIi\nIGludG8gcHV0UmVzdWx0Q29kZQ1wdXQgVGFiICYgIkZhaWxFcnIoRG8iICYgcHJvY05h\nbWUgJiAiKCIgaW50byBjYWxsWW91ckNvZGUNcHV0IFRhYiAmICJCRUdJTiIgJiByZXR1\ncm4gaW50byBpbml0Q29kZQ1wdXQgMCBpbnRvIHRvdGFsUGFyYW0NLS0gaWYgYSBmdW5j\ndGlvbiBnZXQgdGhlIHJlc3VsdCBiYWNrDWlmIGlzRnVuYyB0aGVuDWFkZCAxIHRvIHRv\ndGFsUGFyYW0NcHV0IGxpbmUgMSBvZiBwYXJhbUluZm8gaW50byB4DXB1dCBpdGVtIDQg\nb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAzIG9mIHgp\nIGludG8gbmFtZUxpc3QNcHV0IFRhYiAmICJJRiB0aGVSZXBseS5kYXRhSGFuZGxlIDw+\nIE5JTCBUSEVOIiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWlmIHBhcmFtVHlw\nZSA8PSAzIHRoZW4gLS0gcmVzdWx0IGlzIEFFRGVzYyBvciBIYW5kbGUNcHV0ICJ0aGVS\nZXN1bHQ6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAm\nICJ0aGVSZXN1bHQuZGF0YUhhbmRsZSA6PSBOSUw7IiAmIHJldHVybiBhZnRlciBpbml0\nQ29kZQ1pZiAocGFyYW1UeXBlID0gMCkgb3IgKHBhcmFtVHlwZSA9IDIpIHRoZW4NcHV0\nICJ0aGVSZXN1bHQsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZQ1wdXQgVGFiICYgInRo\nZVJlc3VsdC5kZXNjcmlwdG9yVHlwZSA6PSAiICYgaXRlbSA0IG9mIG5hbWVMaXN0IMIN\nJiAiOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNaWYgaXRlbSAzIG9mIG5hbWVMaXN0\nID0gIkhhbmRsZSIgdGhlbg1wdXQgInRoZVJlc3VsdC5kYXRhSGFuZGxlLCIgYWZ0ZXIg\nY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMyBvZiBuYW1lTGlzdCAmICIodGhlUmVz\ndWx0LmRhdGFIYW5kbGUpLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1lbmQgaWYN\ncHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKHRoZVJlc3VsdCkp\nOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNcHV0IHR3b1RhYiAmICJGYWlsRXJy\nKEFFUHV0S2V5RGVzYyh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCB0aGVSZXN1bHQp\nKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxzZSBpZiAocGFyYW1UeXBl\nID0gNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4gLS0gcmVzdWx0IGlzIG9uIHN0YWNr\nDXB1dCAidGhlUmVzdWx0OiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0\ndXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0ICJ0aGVSZXN1bHQsIiBhZnRlciBjYWxsWW91\nckNvZGUNcHV0IHR3b1RhYiAmICJGYWlsRXJyKEFFUHV0S2V5UHRyKHRoZVJlcGx5LCBr\nZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIEB0aGVS\nZXN1bHQiIGFmdGVyIHB1dFJlc3VsdENvZGUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1\ndCAiLCBTaXplT2YoIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICIpKSk7IiAmIHJldHVy\nbiBhZnRlciBwdXRSZXN1bHRDb2RlDWVsc2UNcHV0ICJbMV0sIExlbmd0aCh0aGVSZXN1\nbHQpKSk7IiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWVuZCBpZg1lbmQgaWYN\nZW5kIGlmIC0tIGlzRnVuYw1yZXBlYXQgd2l0aCBwYXJhbUluZGV4ID0gMiB0byBjb3Vu\ndA1wdXQgbGluZSBwYXJhbUluZGV4IG9mIHBhcmFtSW5mbyBpbnRvIHgNaWYgaXRlbSAz\nIG9mIHggPD4gIm51bGwiIHRoZW4NYWRkIDEgdG8gdG90YWxQYXJhbQ1wdXQgaXRlbSA0\nIG9mIHggaW50byBwYXJhbVR5cGUNcHV0IChpdGVtIDUgb2YgeCA9ICJvIikgaW50byBp\nc09wdGlvbmFsDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVtIDMgb2YgeCkgaW50byBuYW1l\nTGlzdA1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IHR3b1RhYiBpbnRvIGluZGVudA1lbHNl\nDXB1dCBUYWIgaW50byBpbmRlbnQNZW5kIGlmDWlmIHBhcmFtVHlwZSA9IDAgdGhlbiAt\nLSBBRURlc2MNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0IHRoaXNOYW1l\nICYmICI6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAm\nIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlIDo9IE5JTDsiICYgcmV0dXJuIGFmdGVyIGlu\naXRDb2RlDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgaXRlbSA2IG9mIHggaW50byBwdHJU\naGlzTmFtZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogQUVEZXNjUHRyOyIgJiByZXR1cm4g\nYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgcHRyVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlv\ndXJDb2RlDXB1dCB0cnVlIGludG8gbmVlZEVycg1wdXQgVGFiICYgImVyciA6PSBBRUdl\ndEtleURlc2ModGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHggwg0mICIsdHlwZVdp\nbGRDYXJkLCIgJiB0aGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IFBhc2NhbE9wdGlvbkhhbmRsaW5nKHRoaXNOYW1lLCBwdHJUaGlzTmFtZSkgYWZ0\nZXIgcHJvY0JvZHkNZWxzZQ1wdXQgdGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJD\nb2RlDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVFdmVudCwi\nICYgaXRlbSAyIG9mIHggwg0mICIsdHlwZVdpbGRDYXJkLCIgJiB0aGlzTmFtZSAmICIp\nKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgdHdvVGFiICYgIkln\nbm9yZU9TRXJyKEFFRGlzcG9zZURlc2MoIiAmIHRoaXNOYW1lICYgIikpOyIgJiByZXR1\ncm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiBwYXJhbVR5cGUgPSAxIHRoZW4gLS0g\naGFuZGxlDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBpbnRvIHRo\naXNOYW1lDXB1dCB0aGlzTmFtZSAmJiAiOiBBRURlc2M7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBUYWIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSA6PSBOSUw7\nIiAmIHJldHVybiBhZnRlciBpbml0Q29kZQ1pZiBpdGVtIDMgb2YgbmFtZUxpc3QgPSAi\nSGFuZGxlIiB0aGVuDXB1dCB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSwiIGFmdGVyIGNh\nbGxZb3VyQ29kZQ1lbHNlDXB1dCBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiKCIgJiB0aGlz\nTmFtZSAmICIuZGF0YUhhbmRsZSksIiBhZnRlciBjYWxsWW91ckNvZGUNZW5kIGlmDWlm\nIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFRhYiAmICJl\ncnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMIN\nJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0aGlzTmFtZSAmICIpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJRiBlcnIgPSBlcnJBRURl\nc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiDCDSYgdHdvVGFiICYgInsgb3IgeW91IG1h\neSBwdXQgaW4geW91ciBkZWZhdWx0IGhlcmUgfSIgJiByZXR1cm4gwg0mIFRhYiAmICJF\nTFNFIEZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0\nIFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5RGVzYyh0aGVBcHBsZUV2ZW50LCIgJiBpdGVt\nIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwiICYgdGhpc05h\nbWUgJiAiKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IHR3b1Rh\nYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFtZSAmICIpKTsi\nICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWVsc2UgaWYgKHBhcmFtVHlwZSA9IDQp\nIG9yIChwYXJhbVR5cGUgPSA2KSB0aGVuDWlmIGl0ZW0gMyBvZiB4ID0gInRydWUiIHRo\nZW4NcHV0IGl0ZW0gMSBvZiB4ICYmICI6IEJvb2xlYW47IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBpdGVtIDEgb2YgeCAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUN\ncHV0IHRydWUgaW50byBuZWVkRXJyDXB1dCBQYXNjYWxUeXBlVHJ1ZUNvZGUoeCkgYWZ0\nZXIgcHJvY0JvZHkNZWxzZSBpZiBpc09wdGlvbmFsIHRoZW4NaWYgaXRlbSAzIG9mIHgg\nPSAiZW51bSIgdGhlbg1wdXQgaXRlbSAxIG9mIHggJiYgIjogUmVzVHlwZTsiICYgcmV0\ndXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IGl0ZW0gMSBvZiB4ICYgIiwiIGFmdGVyIGNh\nbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFBhc2NhbFR5cGVUcnVl\nQ29kZSh4KSBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCBpdGVtIDYgb2YgeCBpbnRvIHB0\nclRoaXNOYW1lDXB1dCBpdGVtIDEgb2YgeCBpbnRvIHRoaXNOYW1lDXB1dCB0aGlzTmFt\nZSAmJiAiOiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVy\nIHZhckRlY2xhcmUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCBwdHJUaGlzTmFtZSAm\nJiAiOiAiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVyIHZh\nckRlY2xhcmUNZWxzZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogU3RyaW5nUHRyOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQgaWYNcHV0IHB0clRoaXNOYW1lICYgIiwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFRhYiAm\nICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHgg\nwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsdHlwZUNvZGUsQCIgJiB0aGlz\nTmFtZSBhZnRlciBwcm9jQm9keQ1pZiBwYXJhbVR5cGUgPSA0IHRoZW4NcHV0ICIsU2l6\nZU9mKCIgJiB0aGlzTmFtZSAmICIpLGFjdHVhbFNpemUpOyIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0JvZHkNZWxzZSAtLSBzdHIyNTUNcHV0ICJbMV0sU2l6ZU9mKCIgJiB0aGlzTmFt\nZSAmICIpLTEsYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgdGhpc05hbWUgJiAiWzBdIDo9IGNocihhY3R1YWxTaXplKTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgUGFzY2FsT3B0aW9uSGFuZGxpbmcodGhp\nc05hbWUsIHB0clRoaXNOYW1lKSBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxzZSAtLSBy\nZXF1aXJlZA1wdXQgaXRlbSAxIG9mIHggaW50byB0aGlzTmFtZQ1wdXQgdGhpc05hbWUg\nJiYgIjogIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICI7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCB0aGlzTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNcHV0\nIFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRyKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0g\nMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLHR5cGVDb2RlLEAi\nICYgdGhpc05hbWUgYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1\ndCAiLFNpemVPZigiICYgdGhpc05hbWUgJiAiKSxhY3R1YWxTaXplKSk7IiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCAiWzFdLFNpemVPZigiICYgdGhpc05hbWUg\nJiAiKS0xLGFjdHVhbFNpemUpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBU\nYWIgJiB0aGlzTmFtZSAmICJbMF0gOj0gY2hyKGFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVuZCBpZg1lbHNlIGlmIChwYXJhbVR5cGUgPSA1\nKSBvciAocGFyYW1UeXBlID0gNykgdGhlbg1wdXQgImRlc2NGb3IiICYgU3RyaXBTUChp\ndGVtIDEgb2YgeCkgaW50byB0aGlzTmFtZQ1wdXQgdGhpc05hbWUgJiYgIjogQUVEZXNj\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgdGhpc05hbWUgJiAi\nLmRhdGFIYW5kbGUgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNcHV0IHR3\nb1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFtZSAmICIp\nKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWlmIGlzT3B0aW9uYWwgdGhlbg1w\ndXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IGl0ZW0gNiBvZiB4IGludG8gcHRyVGhpc05h\nbWUNcHV0IHB0clRoaXNOYW1lICYgIiA6IiAmIGl0ZW0gMiBvZiBuYW1lTGlzdCAmICI7\nIiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1w\ndXQgaXRlbSA3IG9mIHggaW50byBzaXplVGhpc05hbWUNcHV0IHNpemVUaGlzTmFtZSAm\nICIgOiBMT05HSU5UOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQgaWYNcHV0\nIFRhYiAmICJlcnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0g\nMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0aGlzTmFt\nZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJRiBlcnIg\nPSBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdv\nVGFiICYgcHRyVGhpc05hbWUgJiAiIDo9IE5JTDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgdHdvVGFiICYgc2l6ZVRoaXNOYW1l\nICYgIiA6PSAwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCB0d29U\nYWIgJiAieyBvciB5b3UgbWF5IHB1dCBpbiB5b3VyIGRlZmF1bHQgaGVyZSB9IiAmIHJl\ndHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORCIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJFTFNFIiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\ndHdvVGFiICYgIkZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlm\nIHBhcmFtVHlwZSA9IDcgdGhlbiAtLSBwdXQgaW4gemVybyB0ZXJtaW5hdG9yDXB1dCB0\nd29UYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIgJiB0aGlzTmFtZSDCDSYg\nIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYN\ncHV0IHR3b1RhYiAmICJXSVRIIiAmJiB0aGlzTmFtZSAmJiAiRE8iICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DXB1dCB0aHJlZVRhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNSB0aGVuDXB1dCB0aHJlZVRhYiAmIHNpemVU\naGlzTmFtZSAmICIgOj0gR2V0SGFuZGxlU2l6ZShkYXRhSGFuZGxlKTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1pZiBpdGVtIDIgb2YgbmFtZUxpc3QgPSAiUHRy\nIiB0aGVuDXB1dCB0aHJlZVRhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBkYXRhSGFuZGxl\nXjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IHRocmVlVGFiICYgcHRy\nVGhpc05hbWUgJiAiIDo9ICIgJiBpdGVtIDIgb2YgbmFtZUxpc3Qgwg0mICIoZGF0YUhh\nbmRsZV4pOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCB0aHJlZVRh\nYiAmICJITG9jayhkYXRhSGFuZGxlKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCB0aHJlZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdv\nVGFiICYgIkVORDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBwdHJUaGlzTmFt\nZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNaWYgcGFyYW1UeXBlID0gNSB0aGVuDXB1\ndCBzaXplVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1lbHNl\nDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVFdmVudCwiICYg\naXRlbSAyIG9mIHggwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIiAmIHRo\naXNOYW1lICYgIikpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBl\nID0gNyB0aGVuIC0tIHB1dCBpbiB6ZXJvIHRlcm1pbmF0b3INcHV0IHRydWUgaW50byBu\nZWVkRXJyDXB1dCBUYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIgJiB0aGlz\nTmFtZSDCDSYgIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1lbmQgaWYNcHV0IFRhYiAmICJITG9jaygiICYgdGhpc05hbWUgJiAiLmRhdGFIYW5k\nbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXRlbSAyIG9mIG5hbWVMaXN0\nID0gIlB0ciIgdGhlbg1wdXQgdGhpc05hbWUgJiAiLmRhdGFIYW5kbGVeLCIgYWZ0ZXIg\nY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMiBvZiBuYW1lTGlzdCAmICIoIiAmIHRo\naXNOYW1lICYgIi5kYXRhSGFuZGxlXiksIiBhZnRlciBjYWxsWW91ckNvZGUNZW5kIGlm\nDWlmIHBhcmFtVHlwZSA9IDUgdGhlbiAtLSB3ZSBuZWVkIHRoZSBzaXplIHRvbw1wdXQg\nIkdldEhhbmRsZVNpemUoIiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlKSwiIGFmdGVy\nIGNhbGxZb3VyQ29kZQ1lbmQgaWYNZW5kIGlmDWVuZCBpZg1lbmQgaWYgLS0gbm90IG51\nbGwNZW5kIHJlcGVhdA1pZiB2ZXJib3NlIHRoZW4NcHV0IFRhYiAmICJ7IFdlIGNoZWNr\nIHRvIHNlZSBpZiB3ZSBtaXNzZWQgYW55IHBhcmFtZXRlciBmcm9tIHRoZSBjbGllbnQg\nfSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiSUYgQUVT\naXplT2ZBdHRyaWJ1dGUodGhlQXBwbGVFdmVudCwga2V5TWlzc2VkS2V5d29yZEF0dHIs\nICIgwg0mICJ0eXBlQ29kZSwgYWN0dWFsU2l6ZSkgPD4gZXJyQUVEZXNjTm90Rm91bmQg\nVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJGYWlsRXJy\nKGVyckFFUGFyYW1NaXNzZWQpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgdG90\nYWxQYXJhbSA+IDAgdGhlbg1wdXQgIikiIGludG8gbGFzdCBjaGFyIG9mIGNhbGxZb3Vy\nQ29kZQ1lbHNlDWRlbGV0ZSBsYXN0IGNoYXIgb2YgY2FsbFlvdXJDb2RlDWVuZCBpZg1w\ndXQgY2FsbFlvdXJDb2RlICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\ncHV0UmVzdWx0Q29kZSBhZnRlciBwcm9jQm9keQ1pZiBjbGVhblVwQ29kZSA8PiAiIiB0\naGVuDXB1dCB0YWIgJiAiQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVu\nZCBpZg1wdXQgdGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAmICIgOj0gTm9FcnI7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdGFiICYgIkVORDsiICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DWlmIG5lZWRFcnIgdGhlbiBwdXQgImVyciA6IE9TRXJyOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgInR5cGVDb2RlIDogRGVzY1R5cGU7IiAm\nIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiYWN0dWFsU2l6ZSA6IExPTkdJTlQ7\nIiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHZhckRlY2xhcmUgPD4gIiIgdGhl\nbg1wdXQgdGFiICYgIlZBUiIgJiByZXR1cm4gaW50byB4DXJlcGVhdCB3aXRoIGkgPSAx\nIHRvIG51bWJlciBvZiBsaW5lcyBpbiB2YXJEZWNsYXJlDXB1dCB0d29UYWIgJiBsaW5l\nIGkgb2YgdmFyRGVjbGFyZSAmIHJldHVybiBhZnRlciB4DWVuZCByZXBlYXQNcHV0IHgg\nYWZ0ZXIgcHJvY0hlYWRlcg1lbmQgaWYNcHV0IEZhaWxFcnJTb3VyY2UocHJvY05hbWUs\nIGNsZWFuVXBDb2RlKSBhZnRlciBwcm9jSGVhZGVyDXJldHVybiBwcm9jSGVhZGVyICYg\naW5pdENvZGUgJiByZXR1cm4gJiBwcm9jQm9keSAmIHJldHVybg1lbHNlIGlmIGNhcmRU\neXBlID0gImluaXQiIHRoZW4NcmV0dXJuICJQUk9DRURVUkUgSWdub3JlT1NFcnIoZXJy\nOk9TRXJyKTsgSU5MSU5FICQ1NDhGOyB7IGFkZHEgIzIsc3AgfSAiICYgcmV0dXJuICYg\ncmV0dXJuDWVsc2UgaWYgY2FyZFR5cGUgPSAiaW5zdGFsbCIgdGhlbg1wdXQgIkFFIiAm\nIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNcmV0dXJuIFRh\nYiAmICJJZ25vcmVPU0VycihBRUluc3RhbGxFdmVudEhhbmRsZXIoJyIgJiBSZXNUeXBl\nKGZpZWxkICJldmVudENsYXNzIikgwg0mICInLCAnIiAmIFJlc1R5cGUoZmllbGQgImV2\nZW50SUQiKSAmICInLCBASGFuZGxlIiAmIHByb2NOYW1lIMINJiAiLCAwLCBGQUxTRSkp\nOyIgJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVuZCBTZXJ2ZXJTYW1wbGUN\nDWZ1bmN0aW9uIEZhaWxFcnJTb3VyY2UgcHJvY05hbWUsIGNsZWFudXBDb2RlDS0tIHdl\nIHB1dCB0aGlzIHNlcGFyYXRlIHNvIHRoZSBQYXNjYWxTZXJ2ZXJTYW1wbGUgd291bGQg\nbm90IGJlIHRvbyBsb25nDXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IFRhYiAm\nIHR3b1RhYiBpbnRvIHRocmVlVGFiDXB1dCAiIiBpbnRvIHByb2NIZWFkZXINLS0gdGhl\nIGNsZWFudXAgcm91dGluZQ1pZiBjbGVhblVwQ29kZSA8PiAiIiB0aGVuDXB1dCBUYWIg\nJiAiUFJPQ0VEVVJFIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1\ndCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0IGNs\nZWFuVXBDb2RlIGFmdGVyIHByb2NIZWFkZXINcHV0IHR3b1RhYiAmICJFTkQ7IiAmIHJl\ndHVybiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDWVuZCBpZg1wdXQgVGFiICYgIlBS\nT0NFRFVSRSBGYWlsRXJyKGVycjpPU0Vycik7IiAmIHJldHVybiBhZnRlciBwcm9jSGVh\nZGVyDXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXIN\ncHV0IHR3b1RhYiAmICJJRiBlcnIgPD4gTk9FcnIgVEhFTiIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0hlYWRlcg1wdXQgdGhyZWVUYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHBy\nb2NIZWFkZXINcHV0IHRocmVlVGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAmICIgOj0g\nZXJyOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1pZiBjbGVhblVwQ29kZSA8PiAi\nIiB0aGVuDXB1dCB0aHJlZVRhYiAmICJDbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0hlYWRlcg1lbmQgaWYNcHV0IHRocmVlVGFiICYgIkV4aXQoSGFuZGxlIiAmIHByb2NO\nYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0aHJlZVRhYiAm\nICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0d29UYWIgJiAiRU5E\nOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXR1cm4gcHJvY0hl\nYWRlcg1lbmQgRmFpbEVyclNvdXJjZQ0NZnVuY3Rpb24gUGFzY2FsVHlwZVRydWVDb2Rl\nIHgNcHV0IFRhYiAmICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVudCwiICYg\naXRlbSAyIG9mIHggJiAiLCAiIGludG8gcHJvY0JvZHkNaWYgaXRlbSAzIG9mIHggPSAi\ndHJ1ZSIgdGhlbg1wdXQgInR5cGVCb29sZWFuLCB0eXBlQ29kZSwgQCIgJiBpdGVtIDEg\nb2YgeCAmICIsU2l6ZU9mKEJvb2xlYW4pLCBhY3R1YWxTaXplKTsiICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DWVsc2UNcHV0ICJ0eXBlRW51bWVyYXRlZCwgdHlwZUNvZGUsIEAi\nICYgaXRlbSAxIG9mIHggJiAiLFNpemVPZihSZXNUeXBlKSwgYWN0dWFsU2l6ZSk7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJJRiBlcnIgPSBl\ncnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgVGFiICYgaXRlbSAxIG9mIHggJiAiIDo9ICIgYWZ0ZXIgcHJvY0JvZHkNaWYg\naXRlbSAzIG9mIHggPSAidHJ1ZSIgdGhlbg1wdXQgIkZBTFNFIiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbHNlDXB1dCAiUmVzVHlwZSgwKSIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiRUxTRSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IFRhYiAmIFRhYiAmICJGYWlsRXJyKGVycik7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkNZW5kIFBhc2NhbFR5cGVUcnVlQ29kZQ0NZnVu\nY3Rpb24gUGFzY2FsT3B0aW9uSGFuZGxpbmcgdGhpc05hbWUsIHB0clRoaXNOYW1lDXB1\ndCBUYWIgJiAiaWYgZXJyID0gZXJyQUVEZXNjTm90Rm91bmQgVEhFTiIgJiByZXR1cm4g\naW50byBwcm9jQm9keQ1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFiDXB1dCB0d29UYWIg\nJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiBwdHJU\naGlzTmFtZSAmICIgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3\nb1RhYiAmICJ7IG9yIHlvdSBtYXkgcHV0IGluIHlvdXIgZGVmYXVsdCBoZXJlIH0iICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EIiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgIkVMU0UiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCB0d29UYWIgJiAiRmFpbEVycihlcnIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBAIiAmIHRoaXNOYW1lICYgIjsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EOyIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcmV0dXJuIHByb2NCb2R5DWVuZCBQYXNjYWxPcHRpb25I\nYW5kbGluZw0NZnVuY3Rpb24gU2VydmVyQ29uc3QgY29uc3RJbmZvLGNvbW1lbnRPdXQN\ncHV0IGl0ZW0gMSBvZiBjb25zdEluZm8gJiAiID0gIiAmIGl0ZW0gMiBvZiBjb25zdElu\nZm8gJiAiOyIgaW50byB4DWlmIGNvbW1lbnRPdXQgPSAidHJ1ZSIgdGhlbg1wdXQgInsg\nIiAmIHggJiAiIH0iIGludG8geA1lbmQgaWYNcmV0dXJuIFRhYiAmIHgNZW5kIFNlcnZl\nckNvbnN0DQ1mdW5jdGlvbiBTZXJ2ZXJJbnN0YWxsIGluc3RhbGxDb2RlDXJldHVybiBy\nZXR1cm4gJiAiUHJvY2VkdXJlIEluc3RhbGxIYW5kbGVyczsiICYgcmV0dXJuIMINJiBU\nYWIgJiAiQkVHSU4iICYgcmV0dXJuICYgaW5zdGFsbENvZGUgJiBUYWIgJiAiRU5EOyIg\nJiByZXR1cm4NZW5kIFNlcnZlckluc3RhbGwNDWZ1bmN0aW9uIFBhc2NhbENsaWVudFRl\nbXBsYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3\naGljaCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgR2x1ZUluZm8oZmllbGQg\nInBhcmFtSW5mbyIpIGludG8gcGFyYW1JbmZvDXB1dCAiRnVuY3Rpb24gQUUiICYgU3Ry\naXBTUChmaWVsZCAiZXZlbnROYW1lIikgJiAiKCIgaW50byB0ZW1wbGF0ZQ1wdXQgbnVt\nYmVyIG9mIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRvIG4NcHV0IDAgaW50byBwYXJhbUlu\nZGV4DXJlcGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXNldCBjdXJzb3IgdG8gYnVzeQ1w\ndXQgbGluZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB5DXB1dCBpdGVtIDQgb2YgeSBp\nbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB5ID0gIm8iKSBpbnRvIGlzT3B0aW9u\nYWwNcHV0IChpdGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYgdXNlSXQg\ndGhlbg1hZGQgMSB0byBwYXJhbUluZGV4DWlmIHVzZUl0IHRoZW4NaWYgaW5kZXggPSAx\nIHRoZW4NcHV0ICJWQVIgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgZmFsc2UgaW50byBpc09w\ndGlvbmFsDWVsc2UNaWYgbXVsdGlMaW5lID0gIm11bHRpTGluZSIgdGhlbg1wdXQgcmV0\ndXJuICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgc3BhY2UgYWZ0ZXIgdGVt\ncGxhdGUNZW5kIGlmDWVuZCBpZg1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAzIG9mIHkp\nIGludG8gbmFtZUxpc3QNaWYgcGFyYW1UeXBlID0gMSB0aGVuIC0tIGhhbmRsZQ1wdXQg\naXRlbSAxIG9mIHkgJiAiOiIgJiBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiOyAiIGFmdGVy\nIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNSB0aGVuIC0tIHB0ciArIHNpemUN\ncHV0IGl0ZW0gNiBvZiB5ICYgIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiDC\nDSYgaXRlbSA3IG9mIHkgJiAiOiBMT05HSU5UOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2Ug\naWYgcGFyYW1UeXBlID0gNyB0aGVuIC0tIGNTdHJpbmcNcHV0IGl0ZW0gNiBvZiB5ICYg\nIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbHNl\nIGlmIGlzT3B0aW9uYWwgdGhlbiAtLSB1c2UgcG9pbnRlciB0byBkYXRhDWlmIHBhcmFt\nVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgNcHV0IGl0ZW0gMyBvZiB5IGludG8g\nZGF0YVR5cGUNaWYgZGF0YVR5cGUgPSAiZW51bSIgdGhlbiAtLSBzcGVjaWFsIGZvciBl\nbnVtDXB1dCBpdGVtIDEgb2YgeSAmICI6UmVzVHlwZTsgIiBhZnRlciB0ZW1wbGF0ZQ1l\nbHNlIGlmIGRhdGFUeXBlID0gInRydWUiIHRoZW4gLS0gYWxzbyBzcGVjaWFsIGZvciB0\ncnVlDXB1dCBpdGVtIDEgb2YgeSAmICI6Qm9vbGVhbjsgIiBhZnRlciB0ZW1wbGF0ZQ1l\nbHNlDXB1dCBpdGVtIDYgb2YgeSAmICI6IiAmIGl0ZW0gMiBvZiBuYW1lTGlzdCAmICI7\nICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVsc2UNcHV0IGl0ZW0gNiBvZiB5ICYgIjoi\nIGFmdGVyIHRlbXBsYXRlDWlmIChwYXJhbVR5cGUgPSAwKSB0aGVuDXB1dCAiQUVEZXNj\nUHRyOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgLS0gNiwgUFN0cmluZw1wdXQgIlN0cmlu\nZ1B0cjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmDWVsc2UgLS0gcmVxdWly\nZWQNcHV0IGl0ZW0gMSBvZiB5ICYgIjoiIGFmdGVyIHRlbXBsYXRlDWlmIChwYXJhbVR5\ncGUgPSAwKSB0aGVuIC0tIEFFRGVzYw1wdXQgIkFFRGVzYzsgIiBhZnRlciB0ZW1wbGF0\nZQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgNcHV0IGl0\nZW0gMSBvZiBuYW1lTGlzdCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSAtLSBzdHIy\nNTUNcHV0ICJTdHIyNTU7ICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZg1lbmQg\naWYgLS0gdXNlSXQNZW5kIGlmIC0tIHVzZUl0DWVuZCByZXBlYXQNRGVsZXRlIGxhc3Qg\nY2hhciBvZiB0ZW1wbGF0ZSAtLSBzcGFjZSBvciAoDWlmIHBhcmFtSW5kZXggPiAwIHRo\nZW4NcHV0ICIpIiBpbnRvIGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSAtLSByZXBsYWNlIDsN\nZW5kIGlmDXB1dCAiOk9TRXJyOyIgYWZ0ZXIgdGVtcGxhdGUNcmV0dXJuIHRlbXBsYXRl\nDWVuZCBQYXNjYWxDbGllbnRUZW1wbGF0ZQ0NAAApGgAeAQAApgAQALsAZ6AEAAAAAAAB\nAAAADAAAABBEZXJleiBhZXRlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xp\nY2sgaGVyZSB0byBnZW5lcmF0ZSBhIGRlcmV6ZWQgYWV0ZSByZXNvdXJjZSBmb3IgdXNl\nIGluIE1QVy4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1pZiBvcHRpb25LZXkg\naXMgZG93biB0aGVuDWFzayBmaWxlICJPdXRwdXQgZGVyZXplZCBhZXRlIHRvIg1pZiBp\ndCA8PiAiIiB0aGVuDXB1dCBpdCBpbnRvIHJlZg1vcGVuIGZpbGUgcmVmDXdyaXRlIGRl\ncmV6KCkgdG8gZmlsZSByZWYNY2xvc2UgZmlsZSByZWYNZW5kIGlmDWVsc2UNUHV0U2Ny\nYXRjaCBkZXJleigpDWVuZCBpZg1lbmQgbW91c2VVcA0NZnVuY3Rpb24gZGVyZXoNZ2xv\nYmFsIGluRWRpdA1zZXQgbG9ja1NjcmVlbiB0byB0cnVlDXNldCBsb2NrUmVjZW50IHRv\nIHRydWUNc2V0IGN1cnNvciB0byB3YXRjaA1wdXNoIGNhcmQNcHV0IGNhcmQgZmllbGQg\nInJlc291cmNlVHlwZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byByZXNvdXJjZVR5\ncGUNcHV0IGZhbHNlIGludG8gaW5FZGl0DWdvIHRvIGZpcnN0IGNhcmQgb2YgYmtnbmQg\nZXZlbnRzDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50\nbyBzdWl0ZUNvdW50DXB1dCB0YWIgJiB0YWIgaW50byB0YWIyDXB1dCB0YWIgJiB0YWIy\nIGludG8gdGFiMw1wdXQgdGFiICYgdGFiMyBpbnRvIHRhYjQNcHV0IHRhYiAmIHRhYjQg\naW50byB0YWI1DXB1dCB0YWIzICYgcXVvdGUgaW50byB0YWIzcXVvdGUNcHV0IHRhYjMg\nJiAiJyIgaW50byB0YWIzc3ENcHV0IHRhYjQgJiBxdW90ZSBpbnRvIHRhYjRxdW90ZQ1w\ndXQgdGFiNCAmICInIiBpbnRvIHRhYjRzcQ1wdXQgcXVvdGUgJiAiLCIgJiByZXR1cm4g\naW50byBxY3INcHV0ICInLCIgJiByZXR1cm4gaW50byBzcWNyDXB1dCBjYXJkIGZpZWxk\nICJyZXNvdXJjZUlEIiBvZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIHRlbXANcHV0ICJS\nZXNvdXJjZSAnIiAmIHJlc291cmNlVHlwZSAmICInICgiICYgdGVtcCDCDSYgIiwgIiAm\nIHF1b3RlICYgKGNhcmQgZmllbGQgInJlc291cmNlTmFtZSIgb2YgY2FyZCAicHJlZmVy\nZW5jZSIpICYgcXVvdGUgJiAiKSB7IiAmIHJldHVybiBpbnRvIGR6DXB1dCBjYXJkIGZp\nZWxkICJtYWpvclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2UiIGludG8gdGVtcA1w\ndXQgdGFiICYgKCh0ZW1wIGRpdiAxMCkgKiAxNiArICh0ZW1wIG1vZCAxMCkpICYgIiwi\nICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBjYXJkIGZpZWxkICJtaW5vclZlcnNpb24iIG9m\nIGNhcmQgInByZWZlcmVuY2UiIGludG8gdGVtcA1pZiBsZW5ndGgodGVtcCkgPSAxIHRo\nZW4gbXVsdGlwbHkgdGVtcCBieSAxMA1wdXQgdGFiICYgKCh0ZW1wIGRpdiAxMCkgKiAx\nNiArICh0ZW1wIG1vZCAxMCkpICYgIiwiICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBjYXJk\nIGZpZWxkICJsYW5ndWFnZUNvZGUiIG9mIGNhcmQgInByZWZlcmVuY2UiIGludG8geA1p\nZiB4ID0gMCB0aGVuIHB1dCAiZW5nbGlzaCIgaW50byB4DXB1dCB0YWIgJiB4ICYgIiwi\nICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBjYXJkIGZpZWxkICJzY3JpcHRDb2RlIiBvZiBj\nYXJkICJwcmVmZXJlbmNlIiBpbnRvIHgNaWYgeCA9IDAgdGhlbiBwdXQgInJvbWFuIiBp\nbnRvIHgNcHV0IHRhYiAmIHggJiAiLCIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0IHRhYiAm\nICJ7IiAmIHJldHVybiBhZnRlciBkeg1yZXBlYXQgd2l0aCBzdWl0ZUluZGV4ID0gMiB0\nbyBzdWl0ZUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1nbyBjYXJkIHN1aXRlSW5kZXgg\nb2YgYmtnbmQgInN1aXRlSW5mbyINcHV0IGZpZWxkICJzdWl0ZUNvZGUiIGludG8gbXlT\ndWl0ZUNvZGUNcHV0IHRhYjIgJiBxdW90ZSAmIGZpZWxkICJTdWl0ZU5hbWUiICYgcWNy\nIGFmdGVyIGR6DXB1dCB0YWIyICYgcXVvdGUgJiBSZW1vdmVDUihmaWVsZCAic3VpdGVD\nb21tZW50IikgJiBxY3IgYWZ0ZXIgZHoNcHV0IHRhYjIgJiAiJyIgJiBSZXNUeXBlKG15\nU3VpdGVDb2RlKSAmIHNxY3IgYWZ0ZXIgZHoNcHV0IHRhYjIgJiAiMSwiICYgcmV0dXJu\nIGFmdGVyIGR6DXB1dCB0YWIyICYgIjEsIiAmIHJldHVybiBhZnRlciBkeg1wdXQgdGFi\nMiAmICJ7IiAmIHJldHVybiBhZnRlciBkeg1wdXQgZmllbGQgRXZlbnRMaXN0IGludG8g\nbXlFdmVudExpc3QNcHV0IGZpZWxkIENsYXNzTGlzdCBpbnRvIG15Q2xhc3NMaXN0DXB1\ndCBmaWVsZCBDb21wYXJlTGlzdCBpbnRvIG15Q29tcGFyZUxpc3QNcHV0IGZpZWxkIEVu\ndW1MaXN0IGludG8gbXlFbnVtTGlzdA0tLSBub3cgZG8gaXQgZm9yIGVhY2ggZXZlbnQg\naW4gdGhlIGxpc3QNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBteUV2ZW50TGlzdCBpbnRv\nIGV2ZW50Q291bnQNcmVwZWF0IHdpdGggZXZlbnRJbmRleCA9IDEgdG8gZXZlbnRjb3Vu\ndA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiZXZlbnQiICYmIGl0ZW0gMiBvZiBs\naW5lIGV2ZW50SW5kZXggb2YgbXlFdmVudExpc3QpIHRoZW4NaWYgbm90IGhpbGl0ZSBv\nZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1wdXQgdGFiM3F1b3RlICYgZmll\nbGQgZXZlbnROYW1lICYgcWNyIGFmdGVyIGR6DXB1dCB0YWIzcXVvdGUgJiBSZW1vdmVD\nUihmaWVsZCBldmVudENvbW1lbnQpICYgcWNyIGFmdGVyIGR6DXB1dCB0YWIzc3EgJiBS\nZXNUeXBlKGZpZWxkIGV2ZW50Q2xhc3MpICYgc3FjciBhZnRlciBkeg1wdXQgdGFiM3Nx\nICYgUmVzVHlwZShmaWVsZCBldmVudElEKSAmIHNxY3IgYWZ0ZXIgZHoNcHV0IGxpbmUg\nMSBvZiBmaWVsZCBwYXJhbUluZm8gaW50byB4IC0tIHJlcGx5DXB1dCBSZXNUeXBlKGl0\nZW0gMyBvZiB4KSBpbnRvIHRlbXANaWYgdGVtcCA9ICJudWxsIiB0aGVuDXB1dCB0YWIz\nICYgIm5vUmVwbHksIiAmIHJldHVybiBhZnRlciBkeg1lbHNlDXB1dCB0YWIzc3EgJiB0\nZW1wICYgc3FjciBhZnRlciBkeg1lbmQgaWYNcHV0IGl0ZW0gNCBvZiB4IGludG8gdGVt\ncA1kZWxldGUgaXRlbSAxIHRvIDQgb2YgeA1wdXQgdGFiM3F1b3RlICYgUmVtb3ZlQ1Io\neCkgJiBxY3IgYWZ0ZXIgZHogLS0gcmVwbHkgY29tbWVudA1wdXQgQml0RmllbGQodGVt\ncCwgInJwbHkiKSBhZnRlciBkeiAtLSByZXBseSBhdHRyaWJ1dGUNcHV0IGxpbmUgMiBv\nZiBmaWVsZCBwYXJhbUluZm8gaW50byB4IC0tIGRpcmVjdCBvYmplY3QNcHV0IFJlc1R5\ncGUoaXRlbSAzIG9mIHgpIGludG8gdGVtcA1pZiB0ZW1wID0gIm51bGwiIHRoZW4NcHV0\nIHRhYjMgJiAibm9QYXJhbXMsIiAmIHJldHVybiBhZnRlciBkeg1lbHNlDXB1dCB0YWIz\nc3EgJiB0ZW1wICYgc3FjciBhZnRlciBkeg1lbmQgaWYNcHV0IGl0ZW0gNCBvZiB4IGlu\ndG8gdGVtcA1kZWxldGUgaXRlbSAxIHRvIDQgb2YgeA1wdXQgdGFiM3F1b3RlICYgUmVt\nb3ZlQ1IoeCkgJiBxY3IgYWZ0ZXIgZHogLS0gZGlyZWN0IG9iamVjdCBjb21tZW50DXB1\ndCBCaXRGaWVsZCh0ZW1wLCAiLS0tLSIpIGFmdGVyIGR6IC0tIGRpcmVjdCBhdHRyaWJ1\ndGUNcHV0IHRhYjMgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcmVwZWF0IHdpdGggaSA9\nIDMgdG8gbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkIHBhcmFtSW5mbw1zZXQgY3Vyc29y\nIHRvIGJ1c3kNcHV0IGxpbmUgaSBvZiBmaWVsZCBwYXJhbUluZm8gaW50byB4DXB1dCB0\nYWI0cXVvdGUgJiBpdGVtIDEgb2YgeCAmIHFjciBhZnRlciBkeiAtLSBwYXJhbSBuYW1l\nDXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMiBvZiB4KSAmIHNxY3IgYWZ0ZXIgZHog\nLS0gcGFyYW0ga2V5DXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMyBvZiB4KSAmIHNx\nY3IgYWZ0ZXIgZHogLS0gZGF0YSB0eXBlDXB1dCBpdGVtIDQgb2YgeCBpbnRvIHRlbXAN\nZGVsZXRlIGl0ZW0gMSB0byA0IG9mIHgNcHV0IHRhYjRxdW90ZSAmIFJlbW92ZUNSKHgp\nICYgcWNyIGFmdGVyIGR6IC0tIGNvbW1lbnQNcHV0IEJpdEZpZWxkKHRlbXAsICI/Pz8/\nIikgaW50byB0ZW1wIC0tIGF0dHJpYnV0ZQ0tLSBsYXN0IG9uZSBkbyBub3QgaGF2ZSBh\nIGNvbW1hIGF0IHRoZSBlbmQNaWYgaSA9IG51bWJlciBvZiBsaW5lcyBpbiBmaWVsZCBw\nYXJhbUluZm8gdGhlbg1kZWxldGUgbGFzdCBjaGFyIG9mIHRlbXANcHV0IHJldHVybiBp\nbnRvIGxhc3QgY2hhciBvZiB0ZW1wDWVuZCBpZg1wdXQgdGVtcCBhZnRlciBkeg1lbmQg\ncmVwZWF0DWlmIGV2ZW50SW5kZXggPD4gZXZlbnRDb3VudCB0aGVuDXB1dCB0YWIzICYg\nIn0sIiAmIHJldHVybiBhZnRlciBkeg1lbHNlIC0tIG5lZWQgY29tbWVudCBpZiBub3Qg\ndGhlIGxhc3Qgb25lIGluIHN1aXRlDXB1dCB0YWIzICYgIn0iICYgcmV0dXJuIGFmdGVy\nIGR6DWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGV2\nZW50IGluIHN1aXRlDXB1dCB0YWIyICYgIn0sIiAmIHJldHVybiBhZnRlciBkeg0tLSBu\nb3cgZG8gaXQgZm9yIGVhY2hjbGFzcyBpbiB0aGUgbGlzdA1wdXQgdGFiMiAmICJ7IiAm\nIHJldHVybiBhZnRlciBkeg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIG15Q2xhc3NMaXN0\nIGludG8gY2xhc3NDb3VudA1yZXBlYXQgd2l0aCBjbGFzc0luZGV4ID0gMSB0byBjbGFz\nc0NvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1wKCJjbGFzcyIgJiYgaXRlbSAy\nIG9mIGxpbmUgY2xhc3NJbmRleCBvZiBteUNsYXNzTGlzdCkgdGhlbg1pZiBub3QgaGls\naXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVuDXB1dCB0YWIzcXVvdGUg\nJiBmaWVsZCAiY2xhc3NOYW1lIiAmIHFjciBhZnRlciBkeg1wdXQgdGFiM3NxICYgUmVz\nVHlwZShmaWVsZCAiY2xhc3NJRCIpICYgc3FjciBhZnRlciBkeg1wdXQgdGFiM3F1b3Rl\nICYgUmVtb3ZlQ1IoZmllbGQgImNsYXNzQ29tbWVudCIpICYgcWNyIGFmdGVyIGR6DXB1\ndCB0YWIzICYgInsiICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBudW1iZXIgb2YgbGluZXMg\naW4gZmllbGQgInByb3BJbmZvIiBpbnRvIHByb3BDb3VudA1yZXBlYXQgd2l0aCBwcm9w\nSW5kZXggPSAxIHRvIHByb3BDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kNcHV0IGxpbmUg\ncHJvcEluZGV4IG9mIGZpZWxkICJwcm9wSW5mbyIgaW50byB4DXB1dCB0YWI0cXVvdGUg\nJiBpdGVtIDEgb2YgeCAmIHFjciBhZnRlciBkeiAtLSBwcm9wIG5hbWUNcHV0IHRhYjRz\ncSAmIFJlc1R5cGUoaXRlbSAyIG9mIHgpICYgc3FjciBhZnRlciBkeiAtLSBwcm9wIElE\nDXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMyBvZiB4KSAmIHNxY3IgYWZ0ZXIgZHog\nLS0gcHJvcCBjbGFzcw1wdXQgaXRlbSA0IG9mIHggaW50byB0ZW1wDWRlbGV0ZSBpdGVt\nIDEgdG8gNCBvZiB4DXB1dCB0YWI0cXVvdGUgJiBSZW1vdmVDUih4KSAmIHFjciBhZnRl\nciBkeiAtLSBjb21tZW50DXB1dCBCaXRGaWVsZCh0ZW1wLCAicHJvcCIpIGludG8gdGVt\ncCAtLSBhdHRyaWJ1dGUNLS0gbGFzdCBvbmUgZG8gbm90IGhhdmUgYSBjb21tYSBhdCB0\naGUgZW5kDWlmIHByb3BJbmRleCA9IHByb3BDb3VudCB0aGVuDWRlbGV0ZSBsYXN0IGNo\nYXIgb2YgdGVtcA1wdXQgcmV0dXJuIGludG8gbGFzdCBjaGFyIG9mIHRlbXANZW5kIGlm\nDXB1dCB0ZW1wIGFmdGVyIGR6DWVuZCByZXBlYXQNcHV0IHRhYjMgJiAifSwiICYgcmV0\ndXJuIGFmdGVyIGR6DXB1dCB0YWIzICYgInsiICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBu\ndW1iZXIgb2YgbGluZXMgaW4gZmllbGQgImVsZW1lbnRzIiBpbnRvIGVsZW1Db3VudA1y\nZXBlYXQgd2l0aCBlbGVtSW5kZXggPSAxIHRvIGVsZW1Db3VudA1zZXQgY3Vyc29yIHRv\nIGJ1c3kNcHV0IGxpbmUgZWxlbUluZGV4IG9mIGZpZWxkICJlbGVtZW50cyIgaW50byB4\nDXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMSBvZiB4KSAmIHNxY3IgYWZ0ZXIgZHoN\ncHV0IHRhYjQgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0IG51bWJlciBvZiBpdGVt\ncyBvZiB4IGludG8ga2V5Rm9ybUNvdW50DXJlcGVhdCB3aXRoIGtleUZvcm1JbmRleCA9\nIDIgdG8ga2V5Rm9ybUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgUmVzVHlwZShp\ndGVtIGtleUZvcm1JbmRleCBvZiB4KSBpbnRvIHRlbXANaWYgdGVtcCA9ICJpbmR4IiB0\naGVuDXB1dCAiZm9ybUFic29sdXRlUG9zaXRpb24iIGludG8gdGVtcA1lbHNlIGlmIHRl\nbXAgPSAibmFtZSIgdGhlbg1wdXQgImZvcm1OYW1lIiBpbnRvIHRlbXANZWxzZQ1wdXQg\nIiciICYgdGVtcCAmICInIiBpbnRvIHRlbXANZW5kIGlmDWlmIGtleUZvcm1JbmRleCA8\nPiBrZXlGb3JtQ291bnQgdGhlbg1wdXQgIiwiIGFmdGVyIHRlbXANZW5kIGlmDXB1dCB0\nYWI1ICYgdGVtcCAmIHJldHVybiBhZnRlciBkeg1lbmQgcmVwZWF0DS0tIGxhc3Qgb25l\nIGRvIG5vdCBoYXZlIGEgY29tbWEgYXQgdGhlIGVuZA1pZiBlbGVtSW5kZXggPD4gZWxl\nbUNvdW50IHRoZW4NcHV0IHRhYjQgJiAifSwiICYgcmV0dXJuIGFmdGVyIGR6DWVsc2UN\ncHV0IHRhYjQgJiAifSIgJiByZXR1cm4gYWZ0ZXIgZHoNZW5kIGlmDWVuZCByZXBlYXQN\nLS0gbGFzdCBvbmUgZG8gbm90IGhhdmUgYSBjb21tYSBhdCB0aGUgZW5kDWlmIGNsYXNz\nSW5kZXggPD4gY2xhc3NDb3VudCB0aGVuDXB1dCB0YWIzICYgIn0sIiAmIHJldHVybiBh\nZnRlciBkeg1lbHNlDXB1dCB0YWIzICYgIn0iICYgcmV0dXJuIGFmdGVyIGR6DWVuZCBp\nZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQNcHV0IHRhYjIgJiAifSwiICYgcmV0dXJu\nIGFmdGVyIGR6DS0tIG5vdyBkbyBjb21wYXJpc29uDXB1dCB0YWIyICYgInsiICYgcmV0\ndXJuIGFmdGVyIGR6DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gbXlDb21wYXJlTGlzdCBp\nbnRvIGNvbXBhcmVDb3VudA1yZXBlYXQgd2l0aCBjb21wYXJlSW5kZXggPSAxIHRvIGNv\nbXBhcmVDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiY29tcGFyaXNvbiIg\nJiYgaXRlbSAyIG9mIGxpbmUgY29tcGFyZUluZGV4IG9mIG15Q29tcGFyZUxpc3QpIHRo\nZW4NaWYgbm90IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1w\ndXQgdGFiM3F1b3RlICYgZmllbGQgImNvbXBhcmVOYW1lIiAmIHFjciBhZnRlciBkeg1w\ndXQgdGFiM3NxICYgUmVzVHlwZShmaWVsZCAiY29tcGFyZUlEIikgJiBzcWNyIGFmdGVy\nIGR6DWlmIGNvbXBhcmVJbmRleCA8PiBjb21wYXJlQ291bnQgdGhlbg1wdXQgdGFiM3F1\nb3RlICYgUmVtb3ZlQ1IoZmllbGQgImNvbXBhcmVDb21tZW50IikgJiBxY3IgYWZ0ZXIg\nZHoNZWxzZQ1wdXQgdGFiM3F1b3RlICYgUmVtb3ZlQ1IoZmllbGQgImNvbXBhcmVDb21t\nZW50IikgJiBxdW90ZSAmIHJldHVybiBhZnRlciBkeg1lbmQgaWYNZW5kIGlmDWVuZCBp\nZg1lbmQgcmVwZWF0DXB1dCB0YWIyICYgIn0sIiAmIHJldHVybiBhZnRlciBkeg0tLSBk\nbyBlbnVtZXJhdGlvbnMNcHV0IHRhYjIgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0\nIG51bWJlciBvZiBsaW5lcyBpbiBteUVudW1MaXN0IGludG8gZW51bUNvdW50DXJlcGVh\ndCB3aXRoIGVudW1JbmRleCA9IDEgdG8gZW51bUNvdW50DXNldCBjdXJzb3IgdG8gYnVz\neQ1pZiBqdW1wKCJlbnVtZXJhdGlvbiIgJiYgbGluZSBlbnVtSW5kZXggb2YgbXlFbnVt\nTGlzdCkgdGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVU\nIiB0aGVuDXB1dCB0YWIzc3EgJiBmaWVsZCAiZW51bWVyYXRpb24iICYgc3FjciBhZnRl\nciBkeg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkICJlbnVtSW5mbyIgaW50byBl\nbnVtZXJhdG9yQ291bnQNcHV0IHRhYjMgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcmVw\nZWF0IHdpdGggZW51bWVyYXRvckluZGV4ID0gMSB0byBlbnVtZXJhdG9yQ291bnQNc2V0\nIGN1cnNvciB0byBidXN5DXB1dCBsaW5lIGVudW1lcmF0b3JJbmRleCBvZiBmaWVsZCAi\nZW51bUluZm8iIGludG8geA1wdXQgdGFiNHF1b3RlICYgaXRlbSAxIG9mIHggJiBxY3Ig\nYWZ0ZXIgZHoNcHV0IHRhYjRzcSAmIFJlc1R5cGUoaXRlbSAyIG9mIHgpICYgc3FjciBh\nZnRlciBkeg1kZWxldGUgaXRlbSAxIHRvIDIgb2YgeA1pZiBlbnVtZXJhdG9ySW5kZXgg\nPD5lbnVtZXJhdG9yQ291bnQgdGhlbg1wdXQgdGFiNHF1b3RlICYgeCAmIHFjciBhZnRl\nciBkeg1lbHNlDXB1dCB0YWI0cXVvdGUgJiB4ICYgcXVvdGUgJiByZXR1cm4gYWZ0ZXIg\nZHoNZW5kIGlmDWVuZCByZXBlYXQNaWYgZW51bUluZGV4IDw+IGVudW1Db3VudCB0aGVu\nDXB1dCB0YWIzICYgIn0sIiAmIHJldHVybiBhZnRlciBkeg1lbHNlDXB1dCB0YWIzICYg\nIn0iICYgcmV0dXJuIGFmdGVyIGR6DWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBl\nYXQNaWYgc3VpdGVJbmRleCA8PiBzdWl0ZUNvdW50IHRoZW4NcHV0IHRhYjIgJiAifSwi\nICYgcmV0dXJuIGFmdGVyIGR6DWVsc2UNcHV0IHRhYjIgJiAifSIgJiByZXR1cm4gYWZ0\nZXIgZHoNZW5kIGlmDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IHN1aXRlDXB1dCB0YWIg\nJiAifSIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0ICJ9OyIgJiByZXR1cm4gYWZ0ZXIgZHoN\ncG9wIGNhcmQNcHV0IHRydWUgaW50byBpbkVkaXQNcmV0dXJuIGR6DWVuZCBkZXJleg0N\nZnVuY3Rpb24gQml0RmllbGQgeCwgdHlwZQ1wdXQgIiIgaW50byByDXB1dCB0YWIgJiB0\nYWIgJiB0YWIgaW50byB0YWJzDXB1dCAiLS0tLSIgaW50byBkYXNoDWlmICh0eXBlIDw+\nIGRhc2gpIGFuZCAodHlwZSA8PiAicnBseSIpIHRoZW4NcHV0IHRhYiBiZWZvcmUgdGFi\ncw1lbmQgaWYNcmVwZWF0IHdpdGggaSA9IDEgdG8gMTYNc2V0IGN1cnNvciB0byBidXN5\nDWlmIHggbW9kIDIgPSAxIHRoZW4NcHV0ICJ0cnVlIiBpbnRvIGZsYWcNZWxzZQ1wdXQg\nInJlc2VydmVkIiBpbnRvIGZsYWcNZW5kIGlmDWlmIChpID0gMTYpIGFuZCAodHlwZSA8\nPiAicHJvcCIpIHRoZW4NaWYgZmxhZyA9IHRydWUgdGhlbg1wdXQgIm9wdGlvbmFsIiBp\nbnRvIGZsYWcNZWxzZQ1wdXQgInJlcXVpcmVkIiBpbnRvIGZsYWcNZW5kIGlmDWlmIHR5\ncGUgPSBkYXNoIHRoZW4NcHV0ICJkaXJlY3RQYXJhbSIgYmVmb3JlIGZsYWcNZWxzZSBp\nZiB0eXBlID0gInJwbHkiIHRoZW4NcHV0IHJlcGx5IGJlZm9yZSBmbGFnDWVuZCBpZg1l\nbHNlIGlmIGkgPSAxNSB0aGVuDWlmIGZsYWcgPSB0cnVlIHRoZW4NcHV0ICJsaXN0T2ZJ\ndGVtcyIgaW50byBmbGFnDWVsc2UNcHV0ICJzaW5nbGVJdGVtIiBpbnRvIGZsYWcNZW5k\nIGlmDWVsc2UgaWYgaSA9IDE0IHRoZW4NaWYgZmxhZyA9IHRydWUgdGhlbg1wdXQgImVu\ndW1lcmF0ZWQiIGludG8gZmxhZw1lbHNlDXB1dCAibm90RW51bWVyYXRlZCIgaW50byBm\nbGFnDWVuZCBpZg1lbHNlIGlmIChpID0gMTMpIHRoZW4NaWYgdHlwZSA9IGRhc2ggdGhl\nbg1pZiBmbGFnID0gdHJ1ZSB0aGVuDXB1dCAiY2hhbmdlc1N0YXRlIiBpbnRvIGZsYWcN\nZWxzZQ1wdXQgImRvZXNudENoYW5nZVN0YXRlIiBpbnRvIGZsYWcNZW5kIGlmDWVsc2Ug\naWYgdHlwZSA9ICJwcm9wIiB0aGVuDWlmIGZsYWcgPSB0cnVlIHRoZW4NcHV0ICJyZWFk\nV3JpdGUiIGludG8gZmxhZw1lbHNlDXB1dCAicmVhZE9ubHkiIGludG8gZmxhZw1lbmQg\naWYNZW5kIGlmDWVuZCBpZg1wdXQgdGFicyAmIGZsYWcgJiAiLCIgJiByZXR1cm4gYmVm\nb3JlIHINcHV0IHggZGl2IDIgaW50byB4DWVuZCByZXBlYXQNcmV0dXJuIHINZW5kIEJp\ndEZpZWxkDQ1mdW5jdGlvbiBSZW1vdmVDciB4DWlmICJcIiBpcyBpbiB4IHRoZW4NcHV0\nICIiIGludG8geQ1yZXBlYXQgdW50aWwgeCA9ICIiDXB1dCBPZmZzZXQoIlwiLCB4KSBp\nbnRvIG4NaWYgbiA+IDAgdGhlbg1wdXQgY2hhciAxIHRvIG4tMSBvZiB4ICYgIlxcIiBh\nZnRlciB5DWRlbGV0ZSBjaGFyIDEgdG8gbiBvZiB4DWVsc2UNcHV0IHggYWZ0ZXIgeQ1w\ndXQgIiIgaW50byB4DWVuZCBpZg1lbmQgcmVwZWF0DXB1dCB5IGludG8geA1lbmQgaWYN\ncHV0IDEgaW50byBuDXJlcGVhdCB1bnRpbCBuID0gMA1wdXQgT2Zmc2V0KHJldHVybiwg\neCkgaW50byBuDWlmIG4gPiAwIHRoZW4gcHV0ICJcciIgaW50byBjaGFyIG4gb2YgeA1l\nbmQgcmVwZWF0DXB1dCAxIGludG8gbg1yZXBlYXQgdW50aWwgbiA9IDANcHV0IE9mZnNl\ndChUYWIsIHgpIGludG8gbg1pZiBuID4gMCB0aGVuIHB1dCAiXHQiIGludG8gY2hhciBu\nIG9mIHgNZW5kIHJlcGVhdA1pZiBxdW90ZSBpcyBpbiB4IHRoZW4NcHV0ICIiIGludG8g\neQ1yZXBlYXQgdW50aWwgeCA9ICIiDXB1dCBPZmZzZXQocXVvdGUsIHgpIGludG8gbg1p\nZiBuID4gMCB0aGVuDXB1dCBjaGFyIDEgdG8gbi0xIG9mIHggJiAiXCIgJiBxdW90ZSBh\nZnRlciB5DWRlbGV0ZSBjaGFyIDEgdG8gbiBvZiB4DWVsc2UNcHV0IHggYWZ0ZXIgeQ1w\ndXQgIiIgaW50byB4DWVuZCBpZg1lbmQgcmVwZWF0DXB1dCB5IGludG8geA1lbmQgaWYN\naWYgIiciIGlzIGluIHggdGhlbg1wdXQgIiIgaW50byB5DXJlcGVhdCB1bnRpbCB4ID0g\nIiINcHV0IE9mZnNldCgiJyIsIHgpIGludG8gbg1pZiBuID4gMCB0aGVuDXB1dCBjaGFy\nIDEgdG8gbi0xIG9mIHggJiAiXCciIGFmdGVyIHkNZGVsZXRlIGNoYXIgMSB0byBuIG9m\nIHgNZWxzZQ1wdXQgeCBhZnRlciB5DXB1dCAiIiBpbnRvIHgNZW5kIGlmDWVuZCByZXBl\nYXQNcHV0IHkgaW50byB4DWVuZCBpZg1yZXR1cm4geA1lbmQgUmVtb3ZlQ3IAHNIAIAEA\nAIYAEACcAGegBAAAAAAAAQAAAAwAAAAQSW1wb3J0IGFldGUAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIHJlYWQgYW4gYWV0ZSByZXNvdXJjZSBm\ncm9tIGFuIGZpbGUuIiDCDSYmICJIb2xkIGRvd24gb3B0aW9uIGtleSB0byBtZXJnZSB3\naXRoIHRoZSBidWlsdC1pbiBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgc3RhY2sgaXMg\nbm90IGVtcHR5LCB0aGUgZGF0YSB3aWxsIGJlIG1lcmdlZC4iDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1nbG9iYWwgaW5FZGl0DWlmIHRoZSBvcHRpb25LZXkgaXMgZG93\nbiB0aGVuDXB1dCBNZXJnZUFldGUoKSBpbnRvIGFldGUNZWxzZQ1wdXQgTWVyZ2VBZXRl\nKGZhbHNlKSBpbnRvIGFldGUNZW5kIGlmDWlmIGFldGUgPSAiIiB0aGVuDWFuc3dlciAi\nVW5hYmxlIHRvIHJlYWQgdGhlIGFldGUiIHdpdGggIkNhbmNlbCINZXhpdCBtb3VzZVVw\nDWVuZCBpZg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGFldGUgaW50byBuDXB1dCBsaW5l\nIDUgb2YgYWV0ZSBpbnRvIHZlcnNpb24NaWYgKHZlcnNpb24gPCAxNDQpIG9yICh2ZXJz\naW9uID49IDUxMikgdGhlbg1leGl0IG1vdXNlVXANZW5kIGlmDXB1c2ggY2FyZA1wdXQg\nbGluZSAxIG9mIGFldGUgaW50byBjYXJkIGZpZWxkICJzZW5kVGFyZ2V0IiBvZiBjYXJk\nICJwcmVmZXJlbmNlIg1wdXQgbGluZSAyIG9mIGFldGUgaW50byBjYXJkIGZpZWxkICJy\nZXNvdXJjZVR5cGUiIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCBsaW5lIDMgb2YgYWV0\nZSBpbnRvIGNhcmQgZmllbGQgInJlc291cmNlSUQiIG9mIGNhcmQgInByZWZlcmVuY2Ui\nDXB1dCBsaW5lIDQgb2YgYWV0ZSBpbnRvIGNhcmQgZmllbGQgInJlc291cmNlTmFtZSIg\nb2YgY2FyZCAicHJlZmVyZW5jZSINcHV0IHZlcnNpb24gZGl2IDI1NiBpbnRvIHgNcHV0\nICh4IGRpdiAxNikgKiAxMCArICh4IG1vZCAxNikgaW50byBjYXJkIGZpZWxkICJtYWpv\nclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCB2ZXJzaW9uIG1vZCAyNTYg\naW50byB4DXB1dCAoeCBkaXYgMTYpICogMTAgKyAoeCBtb2QgMTYpIGludG8gY2FyZCBm\naWVsZCAibWlub3JWZXJzaW9uIiBvZiBjYXJkICJwcmVmZXJlbmNlIg1wdXQgbGluZSA2\nIG9mIGFldGUgaW50byBjYXJkIGZpZWxkICJsYW5ndWFnZUNvZGUiIG9mIGNhcmQgInBy\nZWZlcmVuY2UiDXB1dCBsaW5lIDcgb2YgYWV0ZSBpbnRvIGNhcmQgZmllbGQgInNjcmlw\ndENvZGUiIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCBmYWxzZSBpbnRvIGluRWRpdA1w\ndXQgbGluZSA4IG9mIGFldGUgaW50byBzdWl0ZUNvdW50DWRlbGV0ZSBsaW5lIDEgdG8g\nOCBvZiBhZXRlDXJlcGVhdCBzdWl0ZUNvdW50IHRpbWVzDWdvIHRvIHRoaXMgY2QNc2V0\nIGxvY2tTY3JlZW4gdG8gdHJ1ZQ1zZXQgbG9ja1JlY2VudCB0byB0cnVlDXNldCBjdXJz\nb3IgdG8gYnVzeQ1wdXQgbGluZSAzIG9mIGFldGUgaW50byBzdWl0ZUNvZGUNaWYgbm90\nIGp1bXAoInN1aXRlIiAmJiBzdWl0ZUNvZGUpIHRoZW4NZ28gbGFzdCBjYXJkIGluIEJr\nZ25kICJzdWl0ZUluZm8iDWRvTWVudSAiTmV3IENhcmQiDXNldCBuYW1lIG9mIHRoaXMg\nY2FyZCB0byAic3VpdGUiICYmIHN1aXRlQ29kZQ1lbmQgaWYNcHV0IGxpbmUgMSBvZiBh\nZXRlIGludG8gZmllbGQgInN1aXRlTmFtZSINcHV0IGxpbmUgMiBvZiBhZXRlIGludG8g\nZmllbGQgInN1aXRlQ29tbWVudCINcHV0IHN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0\nZUNvZGUiDXB1dCBsaW5lIDYgb2YgYWV0ZSBpbnRvIGV2ZW50Q291bnQNZGVsZXRlIGxp\nbmUgMSB0byA2IG9mIGFldGUNcHVzaCBjYXJkDXJlcGVhdCBldmVudENvdW50IHRpbWVz\nDXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgbGluZSAxIG9mIGFldGUgaW50byBldmVudE5h\nbWUNaWYgY2hhciAxIHRvIDIgb2YgZXZlbnROYW1lID0gIiMqIiB0aGVuIC0tIGZyb20g\nQUVVVA1kZWxldGUgY2hhciAxIHRvIDIgb2YgZXZlbnROYW1lDXB1dCB0cnVlIGludG8g\nZnJvbUFldXQNZWxzZQ1pZiBjaGFyIDEgdG8gMiBvZiBldmVudE5hbWUgPSAiIyYiIHRo\nZW4gLS0gZnJvbSBib3RoLCB0cmVhdCBhcyBuZXcNZGVsZXRlIGNoYXIgMSB0byAyIG9m\nIGV2ZW50TmFtZQ1lbmQgaWYNcHV0IGZhbHNlIGludG8gZnJvbUFldXQNZW5kIGlmDXB1\ndCBsaW5lIDIgb2YgYWV0ZSBpbnRvIGV2ZW50Q29tbWVudA1wdXQgbGluZSAzIG9mIGFl\ndGUgaW50byBldmVudENsYXNzDXB1dCBsaW5lIDQgb2YgYWV0ZSBpbnRvIGV2ZW50SUQN\naWYgbm90IGp1bXAoImV2ZW50IiAmJiBSZXNUeXBlKGV2ZW50Q2xhc3MpICYgUmVzVHlw\nZShldmVudElEKSkgdGhlbg1nbyBsYXN0IGNhcmQgaW4gQmtnbmQgImV2ZW50cyINZG9N\nZW51ICJOZXcgQ2FyZCINcHV0IHN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0ZUNvZGUi\nDU5hbWVJdCBzdWl0ZUNvZGUgJiYgImV2ZW50IiAmJiBSZXNUeXBlKGV2ZW50Q2xhc3Mp\nICYgUmVzVHlwZShldmVudElEKQ1lbmQgaWYNc2V0IGhpbGl0ZSBvZiBia2duZCBidXR0\nb24gImZyb20gQUVVVCIgdG8gZnJvbUFldXQNcHV0IGV2ZW50TmFtZSBpbnRvIGZpZWxk\nICJldmVudE5hbWUiDXB1dCBldmVudENvbW1lbnQgaW50byBmaWVsZCAiZXZlbnRDb21t\nZW50Ig1wdXQgZXZlbnRDbGFzcyBpbnRvIGZpZWxkICJldmVudENsYXNzIg1wdXQgZXZl\nbnRJRCBpbnRvIGZpZWxkICJldmVudElEIg1wdXQgIiwsIiBpbnRvIHggLS0gcHV0IGlu\nIHRoZSByZXBseQ1wdXQgbGluZSA1IG9mIGFldGUgaW50byBpdGVtIDMgb2YgeA1wdXQg\nbGluZSA3IG9mIGFldGUgaW50byBpdGVtIDQgb2YgeA1wdXQgbGluZSA2IG9mIGFldGUg\naW50byBpdGVtIDUgb2YgeA1wdXQgeCBpbnRvIGxpbmUgMSBvZiBmaWVsZCBpZCAxMA1w\ndXQgIiwsIiBpbnRvIHggLS0gcHV0IGluIHRoZSBkaXJlY3QgcGFyYW1ldGVycw1wdXQg\nbGluZSA4IG9mIGFldGUgaW50byBpdGVtIDMgb2YgeA1wdXQgbGluZSAxMCBvZiBhZXRl\nIGludG8gaXRlbSA0IG9mIHgNcHV0IGxpbmUgOSBvZiBhZXRlIGludG8gaXRlbSA1IG9m\nIHgNcHV0IHggaW50byBsaW5lIDIgb2YgZmllbGQgaWQgMTANcHV0IGxpbmUgMTEgb2Yg\nYWV0ZSBpbnRvIHBhcmFtQ291bnQNcHV0IDExIGludG8gbGFzdFByb2MNcmVwZWF0IHdp\ndGggcGFyYW1JbmRleCA9IDEgdG8gcGFyYW1Db3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kN\ncHV0ICIiIGludG8geA1wdXQgbGluZSAobGFzdFByb2MrMSkgb2YgYWV0ZSBpbnRvIGl0\nZW0gMSBvZiB4DXB1dCBsaW5lIChsYXN0UHJvYysyKSBvZiBhZXRlIGludG8gaXRlbSAy\nIG9mIHgNcHV0IGxpbmUgKGxhc3RQcm9jKzMpIG9mIGFldGUgaW50byBpdGVtIDMgb2Yg\neA1wdXQgbGluZSAobGFzdFByb2MrNSkgb2YgYWV0ZSBpbnRvIGl0ZW0gNCBvZiB4DXB1\ndCBsaW5lIChsYXN0UHJvYys0KSBvZiBhZXRlIGludG8gaXRlbSA1IG9mIHgNYWRkIDUg\ndG8gbGFzdFByb2MNcHV0IHggaW50byBsaW5lIChwYXJhbUluZGV4KzIpIG9mIGZpZWxk\nIGlkIDEwDWVuZCByZXBlYXQNZGVsZXRlIGxpbmUgMSB0byBsYXN0UHJvYyBvZiBhZXRl\nDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGV2ZW50DXB1dCBsaW5lIDEgb2YgYWV0ZSBp\nbnRvIGNsYXNzQ291bnQNZGVsZXRlIGxpbmUgMSBvZiBhZXRlDXJlcGVhdCB3aXRoIGNs\nYXNzSW5kZXggPSAxIHRvIGNsYXNzQ291bnQNc2V0IGN1cnNvciB0byBidXN5DXB1dCBs\naW5lIDEgb2YgYWV0ZSBpbnRvIGNsYXNzTmFtZQ1pZiBjaGFyIDEgdG8gMiBvZiBjbGFz\nc05hbWUgPSAiIyoiIHRoZW4gLS0gZnJvbSBBRVVUDWRlbGV0ZSBjaGFyIDEgdG8gMiBv\nZiBjbGFzc05hbWUNcHV0IHRydWUgaW50byBmcm9tQWV1dA1lbHNlDWlmIGNoYXIgMSB0\nbyAyIG9mIGNsYXNzTmFtZSA9ICIjJiIgdGhlbiAtLSBmcm9tIGJvdGgsIHRyZWF0IGFz\nIG5ldw1kZWxldGUgY2hhciAxIHRvIDIgb2YgY2xhc3NOYW1lDWVuZCBpZg1wdXQgZmFs\nc2UgaW50byBmcm9tQWV1dA1lbmQgaWYNcHV0IGxpbmUgMiBvZiBhZXRlIGludG8gY2xh\nc3NJRA1pZiBub3QganVtcCgiY2xhc3MiICYmIGNsYXNzSUQpIHRoZW4NZ28gbGFzdCBj\nYXJkIGluIEJrZ25kICJjbGFzcyINZG9NZW51ICJOZXcgQ2FyZCINcHV0IHN1aXRlQ29k\nZSBpbnRvIGZpZWxkICJzdWl0ZUNvZGUiDU5hbWVJdCBzdWl0ZUNvZGUgJiYgImNsYXNz\nIiAmJiBSZXNUeXBlKGNsYXNzSUQpDWVuZCBpZg1wdXQgY2xhc3NOYW1lIGludG8gZmll\nbGQgImNsYXNzTmFtZSINc2V0IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVV\nVCIgdG8gZnJvbUFldXQNcHV0IGNsYXNzSUQgaW50byBmaWVsZCAiY2xhc3NJRCINcHV0\nIGxpbmUgMyBvZiBhZXRlIGludG8gZmllbGQgY2xhc3NDb21tZW50DXB1dCBsaW5lIDQg\nb2YgYWV0ZSBpbnRvIHByb3BDb3VudA1wdXQgNCBpbnRvIGxhc3RQcm9jDXJlcGVhdCB3\naXRoIHByb3BJbmRleCA9IDEgdG8gcHJvcENvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1w\ndXQgIiIgaW50byB4DXB1dCBsaW5lIChsYXN0UHJvYysxKSBvZiBhZXRlIGludG8gaXRl\nbSAxIG9mIHgNcHV0IGxpbmUgKGxhc3RQcm9jKzIpIG9mIGFldGUgaW50byBpdGVtIDIg\nb2YgeA1wdXQgbGluZSAobGFzdFByb2MrMykgb2YgYWV0ZSBpbnRvIGl0ZW0gMyBvZiB4\nDXB1dCBsaW5lIChsYXN0UHJvYys1KSBvZiBhZXRlIGludG8gaXRlbSA0IG9mIHgNcHV0\nIGxpbmUgKGxhc3RQcm9jKzQpIG9mIGFldGUgaW50byBpdGVtIDUgb2YgeA1hZGQgNSB0\nbyBsYXN0UHJvYw1wdXQgeCBpbnRvIGxpbmUgcHJvcEluZGV4IG9mIGZpZWxkIGlkIDEw\nDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IHByb3Blcml0eQ1hZGQgMSB0byBsYXN0UHJv\nYw1wdXQgbGluZSBsYXN0UHJvYyBvZiBhZXRlIGludG8gZWxlbUNvdW50DXJlcGVhdCB3\naXRoIGVsZW1JbmRleCA9IDEgdG8gZWxlbUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1w\ndXQgbGluZSAobGFzdFByb2MrMSkgb2YgYWV0ZSBpbnRvIHgNcHV0IGxpbmUgKGxhc3RQ\ncm9jKzIpIG9mIGFldGUgaW50byBrZXlGb3JtQ291bnQNYWRkIDIgdG8gbGFzdFByb2MN\ncmVwZWF0IGtleUZvcm1Db3VudCB0aW1lcw1zZXQgY3Vyc29yIHRvIGJ1c3kNYWRkIDEg\ndG8gbGFzdFByb2MNcHV0ICIsIiAmIGxpbmUgbGFzdFByb2Mgb2YgYWV0ZSBhZnRlciB4\nDWVuZCByZXBlYXQNcHV0IHggaW50byBsaW5lIGVsZW1JbmRleCBvZiBmaWVsZCAiZWxl\nbWVudHMiDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGVsZW1lbnQNZGVsZXRlIGxpbmUg\nMSB0byBsYXN0UHJvYyBvZiBhZXRlDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGNsYXNz\nDXB1dCBsaW5lIDEgb2YgYWV0ZSBpbnRvIGNvbXBhcmVDb3VudA1kZWxldGUgbGluZSAx\nIG9mIGFldGUNcmVwZWF0IGNvbXBhcmVDb3VudCB0aW1lcw1zZXQgY3Vyc29yIHRvIGJ1\nc3kNcHV0IGxpbmUgMSBvZiBhZXRlIGludG8gY29tcGFyZU5hbWUNaWYgY2hhciAxIHRv\nIDIgb2YgY29tcGFyZU5hbWUgPSAiIyoiIHRoZW4gLS0gZnJvbSBBRVVUDWRlbGV0ZSBj\naGFyIDEgdG8gMiBvZiBjb21wYXJlTmFtZQ1wdXQgdHJ1ZSBpbnRvIGZyb21BZXV0DWVs\nc2UNaWYgY2hhciAxIHRvIDIgb2YgY29tcGFyZU5hbWUgPSAiIyYiIHRoZW4gLS0gZnJv\nbSBib3RoLCB0cmVhdCBhcyBuZXcNZGVsZXRlIGNoYXIgMSB0byAyIG9mIGNvbXBhcmVO\nYW1lDWVuZCBpZg1wdXQgZmFsc2UgaW50byBmcm9tQWV1dA1lbmQgaWYNcHV0IGxpbmUg\nMiBvZiBhZXRlIGludG8gY29tcGFyZUlEDWlmIG5vdCBqdW1wKCJjb21wYXJpc29uIiAm\nJiBjb21wYXJlSUQpIHRoZW4NZ28gbGFzdCBjYXJkIGluIEJrZ25kICJjb21wYXJpc29u\nIg1kb01lbnUgIk5ldyBDYXJkIg1wdXQgc3VpdGVDb2RlIGludG8gZmllbGQgInN1aXRl\nQ29kZSINTmFtZUl0IHN1aXRlQ29kZSAmJiAiY29tcGFyaXNvbiIgJiYgUmVzVHlwZShj\nb21wYXJlSUQpDWVuZCBpZg1wdXQgY29tcGFyZU5hbWUgaW50byBmaWVsZCAiY29tcGFy\nZU5hbWUiDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIHRvIGZy\nb21BZXV0DXB1dCBjb21wYXJlSUQgaW50byBmaWVsZCAiY29tcGFyZUlEIg1wdXQgbGlu\nZSAzIG9mIGFldGUgaW50byBmaWVsZCAiY29tcGFyZUNvbW1lbnQiDWRlbGV0ZSBsaW5l\nIDEgdG8gMyBvZiBhZXRlDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGNvbXBhcmlzb24N\ncHV0IGxpbmUgMSBvZiBhZXRlIGludG8gZW51bWVyYXRpb25Db3VudA1kZWxldGUgbGlu\nZSAxIG9mIGFldGUNcmVwZWF0IGVudW1lcmF0aW9uQ291bnQgdGltZXMNc2V0IGN1cnNv\nciB0byBidXN5DXB1dCBsaW5lIDEgb2YgYWV0ZSBpbnRvIGVudW1lcmF0aW9uDWlmIGNo\nYXIgMSB0byAyIG9mIGVudW1lcmF0aW9uID0gIiMqIiB0aGVuIC0tIGZyb20gQUVVVA1k\nZWxldGUgY2hhciAxIHRvIDIgb2YgZW51bWVyYXRpb24NcHV0IHRydWUgaW50byBmcm9t\nQWV1dA1lbHNlDWlmIGNoYXIgMSB0byAyIG9mIGVudW1lcmF0aW9uID0gIiMmIiB0aGVu\nIC0tIGZyb20gYm90aCwgdHJlYXQgYXMgbmV3DWRlbGV0ZSBjaGFyIDEgdG8gMiBvZiBl\nbnVtZXJhdGlvbg1lbmQgaWYNcHV0IGZhbHNlIGludG8gZnJvbUFldXQNZW5kIGlmDWlm\nIG5vdCBqdW1wKCJlbnVtZXJhdGlvbiIgJiYgZW51bWVyYXRpb24pIHRoZW4NZ28gbGFz\ndCBjYXJkIGluIEJrZ25kICJlbnVtZXJhdGlvbiINZG9NZW51ICJOZXcgQ2FyZCINcHV0\nIHN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0ZUNvZGUiDU5hbWVJdCBzdWl0ZUNvZGUg\nJiYgImVudW1lcmF0aW9uIiAmJiBSZXNUeXBlKGVudW1lcmF0aW9uKQ1lbmQgaWYNc2V0\nIGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdG8gZnJvbUFldXQNcHV0\nIGVudW1lcmF0aW9uIGludG8gZmllbGQgImVudW1lcmF0aW9uIg1wdXQgbGluZSAyIG9m\nIGFldGUgaW50byBlbnVtZXJhdG9yQ291bnQNcHV0IDIgaW50byBsYXN0UHJvYw1yZXBl\nYXQgd2l0aCBlbnVtZXJhdG9ySW5kZXggPSAxIHRvIGVudW1lcmF0b3JDb3VudA1zZXQg\nY3Vyc29yIHRvIGJ1c3kNcHV0ICIiIGludG8geA1wdXQgbGluZSAobGFzdFByb2MrMSkg\nb2YgYWV0ZSBpbnRvIHgNcHV0IGxpbmUgKGxhc3RQcm9jKzIpIG9mIGFldGUgaW50byBp\ndGVtIDIgb2YgeA1wdXQgbGluZSAobGFzdFByb2MrMykgb2YgYWV0ZSBpbnRvIGl0ZW0g\nMyBvZiB4DWFkZCAzIHRvIGxhc3RQcm9jDXB1dCB4IGludG8gbGluZSBlbnVtZXJhdG9y\nSW5kZXggb2YgZmllbGQgImVudW1JbmZvIg1lbmQgcmVwZWF0IC0tIGZvciBldmVyeSBl\nbnVtZXJhdG9ycw1kZWxldGUgbGluZSAxIHRvIGxhc3RQcm9jIG9mIGFldGUNZW5kIHJl\ncGVhdA1lbmQgcmVwZWF0DXB1dCB0cnVlIGludG8gaW5FZGl0DUNvbnN0cnVjdExpbmsN\naWYgdGhlIGZyZWVzaXplIG9mIHRoaXMgc3RhY2sgPiAzMjc2OCB0aGVuIGRvTWVudSAi\nQ29tcGFjdCBTdGFjayINZW5kIG1vdXNlVXAAACQgACEBAABmABAAfABnoAQAAAAAAAEA\nAAAMAAAAEE91dHB1dCBhZXRlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xp\nY2sgaGVyZSB3cml0ZSBhbiBhZXRlIHJlc291cmNlIG91dCB0byBhIGZpbGUuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANLS1pZiB0aGUgb3B0aW9uS2V5IGlzIGRvd24g\ndGhlbg0tLSBwdXQgdHJ1ZSBpbnRvIHVzZUFFDS0tZWxzZQ0tLSAgcHV0IGZhbHNlIGlu\ndG8gdXNlQUUNLS1lbmQgaWYNc2V0IGN1cnNvciB0byB3YXRjaA1wdXQgTWFrZUFldGUo\nKSBpbnRvIGFldGVSZXNvdXJjZQ1zZXQgbG9ja1NjcmVlbiB0byB0cnVlDXNldCBsb2Nr\nUmVjZW50IHRvIHRydWUNc2V0IGN1cnNvciB0byBhcnJvdw1pZiBhZXRlUmVzb3VyY2Ug\nPD4gMCB0aGVuDS0taWYgdXNlQUUgdGhlbg0tLSBzZW5kIGl0IG91dCBhcyAnTUlTQycg\nJ1dSU0MnDS0tYW5zd2VyIHByb2dyYW0gIndyaXRlIHRvIHdoaWNoIHByb2dyYW0iDS0t\naWYgaXQgPD4gIiIgdGhlbg0tLVNlbmRBRSAiTUlTQyxXUlNDLCIgJiBpdCAmICIsMSwx\nMjAwLC0tLS0sKioqKixSU0lELHNob3IiLCK+YWV0Zb4iICYgYWV0ZVJlc291cmNlLDAN\nLS1wdXQgMCBpbnRvIGFldGVSZXNvdXJjZSAtLSB3ZSBzYXZlIGl0IGFscmVhZHkNLS1l\nbmQgaWYNLS1lbHNlDS0tIHdyaXRlIGl0IG91dA1hbnN3ZXIgZmlsZSAiU2F2ZSB0aGUg\nJ2FldGUnIHJlc291cmNlIHRvIGZpbGU6Ig1pZiBpdCA8PiAiIiB0aGVuDVNhdmVEZXNj\nQXNSZXNvdXJjZSBhZXRlUmVzb3VyY2UsIGl0LCAwDWlmIHRoZSByZXN1bHQgPD4gIiIg\ndGhlbg1hbnN3ZXIgIlRoZSBvcGVyYXRpb24gZmFpbGVkIHdpdGggZXJyb3IgIiAmIHRo\nZSByZXN1bHQNZW5kIGlmDXB1dCAwIGludG8gYWV0ZVJlc291cmNlIC0tIHdlIHNhdmUg\naXQgYWxyZWFkeQ1lbmQgaWYNLS1lbmQgaWYNZW5kIGlmDWlmIGFldGVSZXNvdXJjZSA8\nPiAwIHRoZW4NTW92ZURlc2NUb1NjcmFwIGFldGVSZXNvdXJjZQ1lbmQgaWYNZW5kIG1v\ndXNlVXANDWZ1bmN0aW9uIE1ha2VBZXRlDWdsb2JhbCBpbkVkaXQNcHV0IGNhcmQgZmll\nbGQgIm1ham9yVmVyc2lvbiIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byB4DXB1dCBj\nYXJkIGZpZWxkICJtaW5vclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2UiIGludG8g\neQ1pZiBsZW5ndGgoeSkgPSAxIHRoZW4gbXVsdGlwbHkgeSBieSAxMA1wdXQgKHggZGl2\nIDEwKSAqIDQwOTYgKyAoeCBtb2QgMTApICogMjU2ICsgKHkgZGl2IDEwKSAqIDE2ICsg\nKHkgbW9kIDEwKSBpbnRvIHZlcnNpb24NcHV0IGZhbHNlIGludG8gaW5FZGl0DXB1c2gg\nY2FyZA1nbyB0byBmaXJzdCBjYXJkIG9mIGJrZ25kIGV2ZW50cw1wdXQgIr4iICYgUmVz\nVHlwZShjYXJkIGZpZWxkICJyZXNvdXJjZVR5cGUiIG9mIGNhcmQgInByZWZlcmVuY2Ui\nKSAmICK+IiAmIE5ld0hhbmRsZSgpIGludG8gaGFuZA1wdXQgMCBpbnRvIGVyckNvdW50\nDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBzdWl0\nZUNvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInNob3IiLCB2ZXJzaW9uKSA8PiAwIHRo\nZW4gYWRkIDEgdG8gZXJyQ291bnQNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hvciIsIGNh\ncmQgZmllbGQgImxhbmd1YWdlQ29kZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIpIDw+IDAg\ndGhlbiBhZGQgMSB0byBlcnJDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwg\nY2FyZCBmaWVsZCAic2NyaXB0Q29kZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIpIDw+IDAg\ndGhlbiBhZGQgMSB0byBlcnJDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwg\nc3VpdGVDb3VudC0xKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0IHdp\ndGggc3VpdGVJbmRleCA9IDIgdG8gc3VpdGVDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kN\nZ28gY2FyZCBzdWl0ZUluZGV4IG9mIGJrZ25kICJzdWl0ZUluZm8iDXB1dCBmaWVsZCAi\nc3VpdGVDb2RlIiBpbnRvIG15U3VpdGVDb2RlDWlmIEV4dGVuZERlc2MoaGFuZCwgInMy\nNTUiLCBmaWVsZCAic3VpdGVOYW1lIikgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50\nDWlmIEV4dGVuZERlc2MoaGFuZCwgInMyNTUiLCBmaWVsZCAiU3VpdGVDb21tZW50Iiwg\ndHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50DWlmIEV4dGVuZERlc2MoaGFu\nZCwgInRuYW0iLCBteVN1aXRlQ29kZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50\nDWlmIEV4dGVuZERlc2MoaGFuZCwgInNob3IiLCAxKSA8PiAwIHRoZW4gYWRkIDEgdG8g\nZXJyQ291bnQgLS0gc3VpdGUgbGV2ZWwNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hvciIs\nIDEpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBzdWl0ZSB2ZXJzaW9uDXB1\ndCBmaWVsZCBFdmVudExpc3QgaW50byBteUV2ZW50TGlzdA1wdXQgZmllbGQgQ2xhc3NM\naXN0IGludG8gbXlDbGFzc0xpc3QNcHV0IGZpZWxkIENvbXBhcmVMaXN0IGludG8gbXlD\nb21wYXJlTGlzdA1wdXQgZmllbGQgRW51bUxpc3QgaW50byBteUVudW1MaXN0DS0tIG5v\ndyBkbyBpdCBmb3IgZWFjaCBldmVudCBpbiB0aGUgbGlzdA1wdXQgbnVtYmVyIG9mIGxp\nbmVzIGluIG15RXZlbnRMaXN0IGludG8gZXZlbnRDb3VudA0tLSBjaGVjayBhY3R1YWwg\nZXZlbnQgY291bnQNcHV0IDAgaW50byBhY3R1YWxDb3VudA1yZXBlYXQgd2l0aCBldmVu\ndEluZGV4ID0gMSB0byBldmVudGNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1w\nKCJldmVudCIgJiYgaXRlbSAyIG9mIGxpbmUgZXZlbnRJbmRleCBvZiBteUV2ZW50TGlz\ndCkgdGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0\naGVuDWFkZCAxIHRvIGFjdHVhbENvdW50DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA1p\nZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgYWN0dWFsQ291bnQpIDw+IDAgdGhlbiBh\nZGQgMSB0byBlcnJDb3VudA1yZXBlYXQgd2l0aCBldmVudEluZGV4ID0gMSB0byBldmVu\ndGNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1wKCJldmVudCIgJiYgaXRlbSAy\nIG9mIGxpbmUgZXZlbnRJbmRleCBvZiBteUV2ZW50TGlzdCkgdGhlbg1pZiBub3QgaGls\naXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVuDWlmIEV4dGVuZERlc2Mo\naGFuZCwgInMyNTUiLCBmaWVsZCAiZXZlbnROYW1lIikgPD4gMCB0aGVuIGFkZCAxIHRv\nIGVyckNvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInMyNTUiLCBmaWVsZCAiZXZlbnRD\nb21tZW50IiwgdHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikpIDw+\nIDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFt\nIiwgUmVzVHlwZShmaWVsZCAiZXZlbnRJRCIpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQNcHV0IGxpbmUgMSBvZiBmaWVsZCBwYXJhbUluZm8gaW50byB4IC0tIHJlcGx5\nDWlmIEV4dGVuZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0gMyBvZiB4KSkg\nPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50DXB1dCBpdGVtIDQgb2YgeCBpbnRvIHRl\nbXANZGVsZXRlIGl0ZW0gMSB0byA0IG9mIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1\nNSIsIHgsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSByZXBseSBj\nb21tZW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInNob3IiLCB0ZW1wKSA8PiAwIHRoZW4g\nYWRkIDEgdG8gZXJyQ291bnQgLS0gcmVwbHkgYXR0cmlidXRlDXB1dCBsaW5lIDIgb2Yg\nZmllbGQgcGFyYW1JbmZvIGludG8geCAtLSBkaXJlY3Qgb2JqZWN0DWlmIEV4dGVuZERl\nc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0gMyBvZiB4KSkgPD4gMCB0aGVuIGFk\nZCAxIHRvIGVyckNvdW50DXB1dCBpdGVtIDQgb2YgeCBpbnRvIHRlbXANZGVsZXRlIGl0\nZW0gMSB0byA0IG9mIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1NSIsIHgsIHRydWUp\nIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBkaXJlY3QgY29tbWVudA1pZiBF\neHRlbmREZXNjKGhhbmQsICJzaG9yIiwgdGVtcCkgPD4gMCB0aGVuIGFkZCAxIHRvIGVy\nckNvdW50IC0tIGRpcmVjdCBhdHRyaWJ1dGUNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hv\nciIsIChudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgcGFyYW1JbmZvLTIpKSA8PiAwIHRo\nZW4gYWRkIDEgdG8gZXJyQ291bnQgLS0gZXh0cmEgcGFyYW0gY291bnQNcmVwZWF0IHdp\ndGggaSA9IDMgdG8gbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkIHBhcmFtSW5mbw1wdXQg\nbGluZSBpIG9mIGZpZWxkIHBhcmFtSW5mbyBpbnRvIHgNaWYgRXh0ZW5kRGVzYyhoYW5k\nLCAiczI1NSIsIGl0ZW0gMSBvZiB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQgLS0gcGFyYW0gbmFtZQ1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFtIiwgaXRl\nbSAyIG9mIHgsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBwYXJh\nbSBrZXkNaWYgRXh0ZW5kRGVzYyhoYW5kLCAidG5hbSIsIGl0ZW0gMyBvZiB4LCB0cnVl\nKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQgLS0gcGFyYW0gdHlwZQ1wdXQgaXRl\nbSA0IG9mIHggaW50byB0ZW1wDWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInMyNTUiLCB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQgLS0gcGFyYW0gY29tbWVudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwg\ndGVtcCkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50IC0tIHBhcmFtIGF0dHJpYnV0\nZQ1lbmQgcmVwZWF0DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdCAtLSBmb3IgZXZlcnkg\nZXZlbnQgaW4gc3VpdGUNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBteUNsYXNzTGlzdCBp\nbnRvIGNsYXNzQ291bnQNcHV0IDAgaW50byBhY3R1YWxDb3VudA1yZXBlYXQgd2l0aCBj\nbGFzc0luZGV4ID0gMSB0byBjbGFzc0NvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBq\ndW1wKCJjbGFzcyIgJiYgaXRlbSAyIG9mIGxpbmUgY2xhc3NJbmRleCBvZiBteUNsYXNz\nTGlzdCkgdGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVU\nIiB0aGVuDWFkZCAxIHRvIGFjdHVhbENvdW50DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVh\ndA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgYWN0dWFsQ291bnQpIDw+IDAgdGhl\nbiBhZGQgMSB0byBlcnJDb3VudA1yZXBlYXQgd2l0aCBjbGFzc0luZGV4ID0gMSB0byBj\nbGFzc0NvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1wKCJjbGFzcyIgJiYgaXRl\nbSAyIG9mIGxpbmUgY2xhc3NJbmRleCBvZiBteUNsYXNzTGlzdCkgdGhlbg1pZiBub3Qg\naGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVuDWlmIEV4dGVuZERl\nc2MoaGFuZCwgInMyNTUiLCBmaWVsZCAiY2xhc3NOYW1lIiwgdHJ1ZSkgPD4gMCB0aGVu\nIGFkZCAxIHRvIGVyckNvdW50IC0tIGNsYXNzIG5hbWUNaWYgRXh0ZW5kRGVzYyhoYW5k\nLCAidG5hbSIsIFJlc1R5cGUoZmllbGQgImNsYXNzSUQiKSkgPD4gMCB0aGVuIGFkZCAx\nIHRvIGVyckNvdW50IC0tIGNsYXNzIElEDWlmIEV4dGVuZERlc2MoaGFuZCwgInMyNTUi\nLCBmaWVsZCAiY2xhc3NDb21tZW50IiwgdHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVy\nckNvdW50IC0tIGNsYXNzIGNvbW1lbnQNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBmaWVs\nZCAicHJvcEluZm8iIGludG8gcHJvcENvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInNo\nb3IiLCBwcm9wQ291bnQpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudA1yZXBlYXQg\nd2l0aCBwcm9wSW5kZXggPSAxIHRvIHByb3BDb3VudA1wdXQgbGluZSBwcm9wSW5kZXgg\nb2YgZmllbGQgInByb3BJbmZvIiBpbnRvIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1\nNSIsIGl0ZW0gMSBvZiB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQg\nLS0gY2xhc3MgbmFtZQ1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFtIiwgUmVzVHlwZShp\ndGVtIDIgb2YgeCkpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBjbGFzcyBJ\nRA1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFtIiwgUmVzVHlwZShpdGVtIDMgb2YgeCkp\nIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBjbGFzcyBJRA1wdXQgaXRlbSA0\nIG9mIHggaW50byB0ZW1wDWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4DWlmIEV4dGVuZERl\nc2MoaGFuZCwgInMyNTUiLCB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291\nbnQgLS0gY2xhc3MgY29tbWVudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgdGVt\ncCkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50IC0tIGF0dHJpYnV0ZQ1lbmQgcmVw\nZWF0DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgImVsZW1lbnRzIiBpbnRvIGVs\nZW1Db3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgZWxlbUNvdW50KSA8PiAw\nIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0IHdpdGggZWxlbUluZGV4ID0gMSB0\nbyBlbGVtQ291bnQNcHV0IGxpbmUgZWxlbUluZGV4IG9mIGZpZWxkICJlbGVtZW50cyIg\naW50byB4DWlmIEV4dGVuZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0gMSBv\nZiB4KSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50IC0tIGVsZW1lbnQgY2xhc3MN\ncHV0IG51bWJlciBvZiBpdGVtcyBvZiB4IGludG8ga2V5Rm9ybUNvdW50DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInNob3IiLCBrZXlGb3JtQ291bnQtMSkgPD4gMCB0aGVuIGFkZCAx\nIHRvIGVyckNvdW50DXJlcGVhdCB3aXRoIGtleUZvcm1JbmRleCA9IDIgdG8ga2V5Rm9y\nbUNvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0ga2V5\nRm9ybUluZGV4IG9mIHgpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQgLS0ga2V5\nIGZvcm0NZW5kIHJlcGVhdA1lbmQgcmVwZWF0DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVh\ndA0tLSBub3cgZG8gY29tcGFyaXNvbg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIG15Q29t\ncGFyZUxpc3QgaW50byBjb21wYXJlQ291bnQNcHV0IDAgaW50byBhY3R1YWxDb3VudA1y\nZXBlYXQgd2l0aCBjb21wYXJlSW5kZXggPSAxIHRvIGNvbXBhcmVDb3VudA1zZXQgY3Vy\nc29yIHRvIGJ1c3kNaWYganVtcCgiY29tcGFyaXNvbiIgJiYgaXRlbSAyIG9mIGxpbmUg\nY29tcGFyZUluZGV4IG9mIG15Q29tcGFyZUxpc3QpIHRoZW4NaWYgbm90IGhpbGl0ZSBv\nZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1hZGQgMSB0byBhY3R1YWxDb3Vu\ndA1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hv\nciIsIGFjdHVhbENvdW50KSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0\nIHdpdGggY29tcGFyZUluZGV4ID0gMSB0byBjb21wYXJlQ291bnQNc2V0IGN1cnNvciB0\nbyBidXN5DWlmIGp1bXAoImNvbXBhcmlzb24iICYmIGl0ZW0gMiBvZiBsaW5lIGNvbXBh\ncmVJbmRleCBvZiBteUNvbXBhcmVMaXN0KSB0aGVuDWlmIG5vdCBoaWxpdGUgb2YgYmtn\nbmQgYnV0dG9uICJmcm9tIEFFVVQiIHRoZW4NaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1\nNSIsIGZpZWxkICJjb21wYXJlTmFtZSIsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBl\ncnJDb3VudCAtLSBjb21wYXJlIG5hbWUNaWYgRXh0ZW5kRGVzYyhoYW5kLCAidG5hbSIs\nIFJlc1R5cGUoZmllbGQgImNvbXBhcmVJRCIpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQgLS0gZWxlbWVudCBjbGFzcw1pZiBFeHRlbmREZXNjKGhhbmQsICJzMjU1Iiwg\nZmllbGQgImNvbXBhcmVDb21tZW50IiwgdHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVy\nckNvdW50IC0tIGNvbXBhcmUgY29tbWVudA1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQN\nLS0gZG8gZW51bWVyYXRpb25zDXB1dCBudW1iZXIgb2YgbGluZXMgaW4gbXlFbnVtTGlz\ndCBpbnRvIGVudW1Db3VudA1wdXQgMCBpbnRvIGFjdHVhbENvdW50DXJlcGVhdCB3aXRo\nIGVudW1JbmRleCA9IDEgdG8gZW51bUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBq\ndW1wKCJlbnVtZXJhdGlvbiIgJiYgbGluZSBlbnVtSW5kZXggb2YgbXlFbnVtTGlzdCkg\ndGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVu\nDWFkZCAxIHRvIGFjdHVhbENvdW50DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA1pZiBF\neHRlbmREZXNjKGhhbmQsICJzaG9yIiwgYWN0dWFsQ291bnQpIDw+IDAgdGhlbiBhZGQg\nMSB0byBlcnJDb3VudA1yZXBlYXQgd2l0aCBlbnVtSW5kZXggPSAxIHRvIGVudW1Db3Vu\ndA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiZW51bWVyYXRpb24iICYmIGxpbmUg\nZW51bUluZGV4IG9mIG15RW51bUxpc3QpIHRoZW4NaWYgbm90IGhpbGl0ZSBvZiBia2du\nZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFt\nIiwgUmVzVHlwZShmaWVsZCAiZW51bWVyYXRpb24iKSkgPD4gMCB0aGVuIGFkZCAxIHRv\nIGVyckNvdW50DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgImVudW1JbmZvIiBp\nbnRvIGVudW1lcmF0b3JDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgZW51\nbWVyYXRvckNvdW50KSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0IHdp\ndGggZW51bWVyYXRvckluZGV4ID0gMSB0byBlbnVtZXJhdG9yQ291bnQNcHV0IGxpbmUg\nZW51bWVyYXRvckluZGV4IG9mIGZpZWxkICJlbnVtSW5mbyIgaW50byB4DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInMyNTUiLCBpdGVtIDEgb2YgeCwgdHJ1ZSkgPD4gMCB0aGVuIGFk\nZCAxIHRvIGVyckNvdW50IC0tIG5hbWUNaWYgRXh0ZW5kRGVzYyhoYW5kLCAidG5hbSIs\nIFJlc1R5cGUoaXRlbSAyIG9mIHgpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQg\nLS0gaWQNZGVsZXRlIGl0ZW0gMSB0byAyIG9mIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAi\nczI1NSIsIHgsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBjb21t\nZW50DWVuZCByZXBlYXQNZW5kIGlmDWVuZCBpZg1lbmQgcmVwZWF0DWVuZCByZXBlYXQg\nLS0gZm9yIGV2ZXJ5IHN1aXRlDXBvcCBjYXJkDXB1dCB0cnVlIGludG8gaW5FZGl0DWlm\nIGVyckNvdW50IDw+IDAgdGhlbg1EaXNwb3NlRGVzYyhoYW5kKQ1wdXQgIr5udWxsvjAi\nIGludG8gaGFuZA1lbmQgaWYNcmV0dXJuIGhhbmQNZW5kIE1ha2VBZXRlDQ0AAg4AJQGA\nATAAeQFEAMqgBAAAAAAAAQAAAAwAAAAQRGVsZXRlyQAAb24gbW91c2VVcA1nbG9iYWwg\nZ0RlbGV0ZVN1aXRlDWFuc3dlciAiQ2xpY2sgb24gYSBzdWl0ZSBpbiB0aGUgbGlzdCB0\nbyBkZWxldGUgaXQuIiB3aXRoICJPSyIgb3IgIkNhbmNlbCINaWYgaXQgaXMgIkNhbmNl\nbCIgdGhlbg1wdXQgZmFsc2UgaW50byBnRGVsZXRlU3VpdGUNcGFzcyBtb3VzZVVwDWVs\nc2UNcHV0IHRydWUgaW50byBnRGVsZXRlU3VpdGUNZW5kIGlmDXBhc3MgbW91c2VVcA0N\nDS0tIGdsb2JhbCBnV2hlcmVGcm9tDS0tIGxvY2sgc2NyZWVuDS0tIGdvIGxhc3QgY2Fy\nZCBvZiBia2duZCAic3VpdGVJbmZvIg0tLSBEb01lbnUgIk5ldyBDYXJkIg0tLSBzZXQg\ndGhlIGhpbGl0ZSBvZiBiZyBidG4gImFldGUiIHRvIHRydWUNLS0gcHV0ICJhZXRlIiBp\nbnRvIGJnIGZsZCAiU3VpdGVDb2RlIg0tLSBwdXNoIGNkDS0tIHBvcCBjZCBpbnRvIGdX\naGVyZUZyb20NLS0gdW5sb2NrIHNjcmVlbiB3aXRoIHZpc3VhbCB3aXBlIGxlZnQNZW5k\nIG1vdXNlVXANAAAiACgCBQAgAAAANQEKAAAAAAAAAAEAFQASCQAAGAAAAAABggApAQAB\nQQEaAVQBZKACAAAAAAABABUACgEAAA1Db3B5IEZpZWxkAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUg\nY29kZSBzY3JhdGNocGFkIGZpZWxkIHRvIHRoZSBjbGlwYm9hcmQuIg1lbmQgTW91c2VX\naXRoaW4NDW9uIG1vdXNlVXANY2xpY2sgYXQgbG9jIG9mIGNhcmQgZmllbGQgInNjcmF0\nY2giDXR5cGUgImEiIHdpdGggY29tbWFuZEtleSAtLSBzZWxlY3QgYWxsDWRvTWVudSAi\nQ29weSBUZXh0Ig1nZXQgcmVjdCBvZiBjYXJkIGZpZWxkICJzY3JhdGNoIg1wdXQgaXRl\nbSAxIG9mIGl0IGludG8geA1wdXQgKGl0ZW0gMiBvZiBpdCkgLSAyIGludG8geQ1jbGlj\nayBhdCB4LCB5DWVuZCBtb3VzZVVwAADwACoBAAEzAAoBRwCNoAQAAAAAAAEAAAAMAAAA\nEFRyYW5zbGF0aW9uIFRhYmxlAABvbiBtb3VzZVVwDWxvY2FsaXphdGlvbiB0cnVlDWVu\nZCBtb3VzZVVwDQ1vbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0\nbyBjcmVhdGUgYSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgbG9jYWxpemluZyB5b3VyICdh\nZXRlJy4gSXQgd2lsbCBhcHBlYXIgaW4gdGhlIHNjcmF0Y2hwYWQuIg1lbmQgTW91c2VX\naXRoaW4AAAAoACsCBQA8AM0ATAFiAAEAAAAAAAAAAwAMAQAAEHBhZE5hbWUAAAD/2AAb\nAFIgZSBzIG8gdSByIGMgZSAgVCBvIG8gbCBzAP/VAAsAU2NyYXRjaHBhZAD/6wALAHJl\ncWQNc21wbA0AbWFpbk1lbnUAZnVuY3Rpb24gVGNsQ2xpZW50U2FtcGxlIGNhcmRUeXBl\nDWlmIGNhcmRUeXBlID0gImV2ZW50IiB0aGVuDXB1dCBmaWVsZCAicGFyYW1JbmZvIiBp\nbnRvIHBhcmFtSW5mbw1wdXQgIkFFIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIp\nIGludG8gRXZlbnROYW1lDXB1dCBpdGVtIDMgb2YgZmllbGQgInBhcmFtSW5mbyIgPD4g\nIm51bGwiIGludG8gcmV0dXJuVHlwZQ1wdXQgImFlcmVnaXN0ZXIiICYmIEV2ZW50TmFt\nZSAmJiBmaWVsZCAiRXZlbnRDbGFzcyIgwg0mJiBmaWVsZCAiRXZlbnRJRCIgJiYgaXRl\nbSAzIG9mIHBhcmFtSW5mbyBpbnRvIHJzdA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHBh\ncmFtSW5mbyBpbnRvIGNvdW50DXB1dCAiIiBpbnRvIG9wdGlvbkxpc3QNcHV0ICIiIGlu\ndG8gcmVxdWlyZWRMaXN0DXJlcGVhdCB3aXRoIGluZGV4ID0gMiB0byBjb3VudA1wdXQg\nbGluZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB4DWlmIGluZGV4ID0gMiB0aGVuDXB1\ndCBkaXJlY3RQYXJhbSBpbnRvIGl0ZW0gMSBvZiB4DXB1dCAiLS0tLSIgaW50byBpdGVt\nIDIgb2YgeA1lbmQgaWYNcHV0IGl0ZW0gNCBvZiB4IGludG8gdGVtcA1wdXQgKHRlbXAg\nPiAzMjc2NykgaW50byBpc09wdGlvbmFsDXB1dCB0ZW1wIGRpdiA4MTkyIGludG8gdGVt\ncA1pZiAodGVtcCBtb2QgMikgPSAxIHRoZW4NcHV0ICJlbnVtIiBpbnRvIGl0ZW0gMyBv\nZiB4DWVuZCBpZg1pZiBpdGVtIDMgb2YgeCA8PiAibnVsbCIgdGhlbg1wdXQgc3BhY2Ug\naW50byB0ZW1wDWlmIGl0ZW0gMyBvZiB4ID0gIlRFWFQiIHRoZW4NcHV0IHF1b3RlICYg\naXRlbSAyIG9mIHggJiBxdW90ZSBhZnRlciB0ZW1wDWVsc2UNcHV0IHF1b3RlICYgUmVz\nVHlwZShpdGVtIDIgb2YgeCkgJiBSZXNUeXBlKGl0ZW0gMyBvZiB4KSAmIHF1b3RlIGFm\ndGVyIHRlbXANZW5kIGlmDWlmIHNwYWNlIGlzIGluIGl0ZW0gMSBvZiB4IHRoZW4NcHV0\nIHNwYWNlICYgcXVvdGUgJiBpdGVtIDEgb2YgeCAmIHF1b3RlIGFmdGVyIHRlbXANZWxz\nZQ1wdXQgc3BhY2UgJiBpdGVtIDEgb2YgeCBhZnRlciB0ZW1wDWVuZCBpZg1pZiBpc09w\ndGlvbmFsIHRoZW4NcHV0IHRlbXAgYWZ0ZXIgb3B0aW9uTGlzdA1lbHNlDXB1dCB0ZW1w\nIGFmdGVyIHJlcXVpcmVkTGlzdA1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQgLS0gMiB0\nbyBuDXB1dCByZXF1aXJlZExpc3QgYWZ0ZXIgcnN0DWlmIG9wdGlvbkxpc3QgPD4gIiIg\ndGhlbg1wdXQgIiBvcHRpb25hbGx5IiAmIG9wdGlvbkxpc3QgYWZ0ZXIgcnN0DWVuZCBp\nZg1yZXR1cm4gcnN0ICYgcmV0dXJuICYgcmV0dXJuDWVsc2UNcmV0dXJuICIiDWVuZCBp\nZg1lbmQgVGNsQ2xpZW50U2FtcGxlDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAGAQk1BUAAACsoAAAAAAAAAAAABAAAAAAAAAVYCAAAAAAABVgIAABsAAAEFARAA\nAAAAAAAAAAAAAEwAAADkv4K5go3iNSAAAuEI4hEBEyDhCuEaIBYBFQPhCOE4AgAg4gWu\nheEcIBYQEwXhCOEYAhMgJhAQEhThCL+Cv4K/gr+Cv4K/gr+Cv4KygowQgOIQAgKihYri\nEQEC4hEDAraGjhCA4hACAo0QQOIhgACogYlPDgAxgOEBTxkAAYDhAW8YMzPHhxgPbxwz\nMYzMmA9fDjMxjM7hXwczMY/H4W8DMzGMA4APbxMzMYxJmA9vDh8wx4cYD6+BjBABHUDh\nBYkgAYArAYDhBSABQCsDgOEFjCABoCsBwOEFiSABICsFgOEFIAEgKwaA4QW/hr+Gv4an\nhopCCqqqqsGqqqqqqqqgA+EGhokgASArBYDhBb+GvYaMIAGgKwHA4QWOEWgrBoDhBY0R\ngBsC4QaMEAEdQOEFZSBzZWxlY3Rpb24gdmlzaWIAAWmAQ0FSRAAALR0AAAAAAAALiwAA\nAAAAAAAAAAAAAAAAOvAAAA48AC8AOQABPiwAGQAAIBoApAATAgYANwCFAEoB+QACAAAA\nAAAAAAQADAAAABBzZW5kVGFyZ2V0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAi\nVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB0byBiZSB1c2VkIGluIFBB\nU0NBTCBjbGllbnQgc2FtcGxlIGNvZGUuIg1lbmQgTW91c2VXaXRoaW4NAACcAAwCBgBm\nASQAeQFdAAIAAAAAAAAABAAMAAAAEHRpbWVPdXQAAG9uIE1vdXNlV2l0aGluDVNob3dC\nYWxsb29uICJFbnRlciB0aGUgdGltZW91dCB2YWx1ZSB0byBiZSB1c2VkIGluIFBBU0NB\nTCBjbGllbnQgc2FtcGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAADCABgC\nBgB6ASQAjQH5AAIAAAAAAAAABAAMAAAAEHNlbmRNb2RlAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiRW50ZXIgdGhlIHNlbmQgbW9kZSAob3RoZXIgdGhhbiB3YWl0UmVw\nbHkvbm9SZXBseS9xdWV1ZVJlcGx5KSB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQg\nc2FtcGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAKAAFwIGAI4BJAChAfkA\nAgAAAAAAAAAEAAwAAAAQaWRsZVByb2MAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29u\nICJFbnRlciB0aGUgbmFtZSBvZiBpZGxlIHByb2MgdG8gYmUgdXNlZCBpbiBQQVNDQUwg\nY2xpZW50IHNhbXBsZSBjb2RlIGhlcmUuIg1lbmQgTW91c2VXaXRoaW4NAACwABkCBgCi\nASQAtQH5AAIAAAAAAAAAAwAMAAAAEGFlRmlsdGVyAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGZpbHRlciBmdW5jdGlv\nbiB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQgc2FtcGxlIGNvZGUgaGVyZS4iDWVu\nZCBNb3VzZVdpdGhpbg0AAKwAHAIGALYBJADJAfkAAgAAAAAAAAADAAwAAAAQdGFyZ2V0\nRGVzYwAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVydCB0aGUgbmFtZSBv\nZiB0YXJnZXQgZGVzY3JpcHRvciB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQgc2Ft\ncGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAAAiAAECBQDfAJ8A8QEYAAAA\nAAAAAAAAFQAMBQAAEAAAAAA/BgACAQAA8gCfAQUA+sAGAAAAAAABAAAADAAAABBQYXNj\nYWwAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGluZGlj\nYXRlIHRoYXQgdGhlIHNlcnZlciBjb2RlIHRvIGhhbmRsZSBBcHBsZSBFdmVudHMgd2ls\nbCBiZSBpbiBQQVNDQUwuIg1lbmQgTW91c2VXaXRoaW4NDWZ1bmN0aW9uIFNlcnZlclNh\nbXBsZSBjYXJkVHlwZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAm\nIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNZ2xvYmFsIHZl\ncmJvc2UNaWYgdmVyYm9zZSB0aGVuDXB1dCBmaWVsZCAiZXZlbnRDb21tZW50IiBpbnRv\nIHRlbXANaWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAieyAiICYgdGVtcCAmICIgfSIgJiBy\nZXR1cm4gJiByZXR1cm4gaW50byBwcm9jSGVhZGVyDWVuZCBpZg1lbmQgaWYNcHV0IFBh\nc2NhbENsaWVudFRlbXBsYXRlKCkgJiByZXR1cm4gaW50byB0ZW1wDXB1dCAiRG8iIGFm\ndGVyIGNoYXIgOSBvZiB0ZW1wDXB1dCB0ZW1wIGFmdGVyIHByb2NIZWFkZXINcHV0IFRh\nYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgVGFiICYgInsg\ncHV0IHlvdXIgY29kZSBoZXJlIH0iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0\nIFRhYiAmICJEbyIgJiBwcm9jTmFtZSAmICIgOj0gTm9FcnI7IiAmIHJldHVybiBhZnRl\nciBwcm9jSGVhZGVyDXB1dCBUYWIgJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0\nZXIgcHJvY0hlYWRlcg1wdXQgIkZ1bmN0aW9uIEhhbmRsZSIgJiBwcm9jTmFtZSDCDSYg\nIih0aGVBcHBsZUV2ZW50LCB0aGVSZXBseTpBcHBsZUV2ZW50OyB0aGVSZWZDb246TE9O\nR0lOVCk6T1NFcnI7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCBHbHVlSW5m\nbyhmaWVsZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8NcHV0IG51bWJlciBvZiBs\naW5lcyBvZiBwYXJhbUluZm8gaW50byBjb3VudA1wdXQgKGl0ZW0gMyBvZiBwYXJhbUlu\nZm8gPD4gIm51bGwiKSBpbnRvIGlzRnVuYw1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFi\nDXB1dCBUYWIgJiB0d29UYWIgaW50byB0aHJlZVRhYg1wdXQgIiIgaW50byB2YXJEZWNs\nYXJlDXB1dCBmYWxzZSBpbnRvIG5lZWRFcnINcHV0ICIiIGludG8gY2xlYW5VcENvZGUN\ncHV0ICIiIGludG8gcHV0UmVzdWx0Q29kZQ1wdXQgVGFiICYgIkZhaWxFcnIoRG8iICYg\ncHJvY05hbWUgJiAiKCIgaW50byBjYWxsWW91ckNvZGUNcHV0IFRhYiAmICJCRUdJTiIg\nJiByZXR1cm4gaW50byBpbml0Q29kZQ1wdXQgMCBpbnRvIHRvdGFsUGFyYW0NLS0gaWYg\nYSBmdW5jdGlvbiBnZXQgdGhlIHJlc3VsdCBiYWNrDWlmIGlzRnVuYyB0aGVuDWFkZCAx\nIHRvIHRvdGFsUGFyYW0NcHV0IGxpbmUgMSBvZiBwYXJhbUluZm8gaW50byB4DXB1dCBp\ndGVtIDQgb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAz\nIG9mIHgpIGludG8gbmFtZUxpc3QNcHV0IFRhYiAmICJJRiB0aGVSZXBseS5kYXRhSGFu\nZGxlIDw+IE5JTCBUSEVOIiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWlmIHBh\ncmFtVHlwZSA8PSAzIHRoZW4gLS0gcmVzdWx0IGlzIEFFRGVzYyBvciBIYW5kbGUNcHV0\nICJ0aGVSZXN1bHQ6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIFRhYiAmICJ0aGVSZXN1bHQuZGF0YUhhbmRsZSA6PSBOSUw7IiAmIHJldHVybiBhZnRl\nciBpbml0Q29kZQ1pZiAocGFyYW1UeXBlID0gMCkgb3IgKHBhcmFtVHlwZSA9IDIpIHRo\nZW4NcHV0ICJ0aGVSZXN1bHQsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZQ1wdXQgVGFi\nICYgInRoZVJlc3VsdC5kZXNjcmlwdG9yVHlwZSA6PSAiICYgaXRlbSA0IG9mIG5hbWVM\naXN0IMINJiAiOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNaWYgaXRlbSAzIG9mIG5h\nbWVMaXN0ID0gIkhhbmRsZSIgdGhlbg1wdXQgInRoZVJlc3VsdC5kYXRhSGFuZGxlLCIg\nYWZ0ZXIgY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMyBvZiBuYW1lTGlzdCAmICIo\ndGhlUmVzdWx0LmRhdGFIYW5kbGUpLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1l\nbmQgaWYNcHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKHRoZVJl\nc3VsdCkpOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNcHV0IHR3b1RhYiAmICJG\nYWlsRXJyKEFFUHV0S2V5RGVzYyh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCB0aGVS\nZXN1bHQpKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxzZSBpZiAocGFy\nYW1UeXBlID0gNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4gLS0gcmVzdWx0IGlzIG9u\nIHN0YWNrDXB1dCAidGhlUmVzdWx0OiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsi\nICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0ICJ0aGVSZXN1bHQsIiBhZnRlciBj\nYWxsWW91ckNvZGUNcHV0IHR3b1RhYiAmICJGYWlsRXJyKEFFUHV0S2V5UHRyKHRoZVJl\ncGx5LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIs\nIEB0aGVSZXN1bHQiIGFmdGVyIHB1dFJlc3VsdENvZGUNaWYgcGFyYW1UeXBlID0gNCB0\naGVuDXB1dCAiLCBTaXplT2YoIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICIpKSk7IiAm\nIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWVsc2UNcHV0ICJbMV0sIExlbmd0aCh0\naGVSZXN1bHQpKSk7IiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWVuZCBpZg1l\nbmQgaWYNZW5kIGlmIC0tIGlzRnVuYw1yZXBlYXQgd2l0aCBwYXJhbUluZGV4ID0gMiB0\nbyBjb3VudA1wdXQgbGluZSBwYXJhbUluZGV4IG9mIHBhcmFtSW5mbyBpbnRvIHgNaWYg\naXRlbSAzIG9mIHggPD4gIm51bGwiIHRoZW4NYWRkIDEgdG8gdG90YWxQYXJhbQ1wdXQg\naXRlbSA0IG9mIHggaW50byBwYXJhbVR5cGUNcHV0IChpdGVtIDUgb2YgeCA9ICJvIikg\naW50byBpc09wdGlvbmFsDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVtIDMgb2YgeCkgaW50\nbyBuYW1lTGlzdA1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IHR3b1RhYiBpbnRvIGluZGVu\ndA1lbHNlDXB1dCBUYWIgaW50byBpbmRlbnQNZW5kIGlmDWlmIHBhcmFtVHlwZSA9IDAg\ndGhlbiAtLSBBRURlc2MNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0IHRo\naXNOYW1lICYmICI6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIFRhYiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlIDo9IE5JTDsiICYgcmV0dXJuIGFm\ndGVyIGluaXRDb2RlDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgaXRlbSA2IG9mIHggaW50\nbyBwdHJUaGlzTmFtZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogQUVEZXNjUHRyOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgcHRyVGhpc05hbWUgJiAiLCIgYWZ0ZXIg\nY2FsbFlvdXJDb2RlDXB1dCB0cnVlIGludG8gbmVlZEVycg1wdXQgVGFiICYgImVyciA6\nPSBBRUdldEtleURlc2ModGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHggwg0mICIs\ndHlwZVdpbGRDYXJkLCIgJiB0aGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNcHV0IFBhc2NhbE9wdGlvbkhhbmRsaW5nKHRoaXNOYW1lLCBwdHJUaGlzTmFt\nZSkgYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1wdXQgdGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2Fs\nbFlvdXJDb2RlDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVF\ndmVudCwiICYgaXRlbSAyIG9mIHggwg0mICIsdHlwZVdpbGRDYXJkLCIgJiB0aGlzTmFt\nZSAmICIpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgdHdvVGFi\nICYgIklnbm9yZU9TRXJyKEFFRGlzcG9zZURlc2MoIiAmIHRoaXNOYW1lICYgIikpOyIg\nJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiBwYXJhbVR5cGUgPSAxIHRo\nZW4gLS0gaGFuZGxlDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBp\nbnRvIHRoaXNOYW1lDXB1dCB0aGlzTmFtZSAmJiAiOiBBRURlc2M7IiAmIHJldHVybiBh\nZnRlciB2YXJEZWNsYXJlDXB1dCBUYWIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSA6\nPSBOSUw7IiAmIHJldHVybiBhZnRlciBpbml0Q29kZQ1pZiBpdGVtIDMgb2YgbmFtZUxp\nc3QgPSAiSGFuZGxlIiB0aGVuDXB1dCB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSwiIGFm\ndGVyIGNhbGxZb3VyQ29kZQ1lbHNlDXB1dCBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiKCIg\nJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSksIiBhZnRlciBjYWxsWW91ckNvZGUNZW5k\nIGlmDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFRh\nYiAmICJlcnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBv\nZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0aGlzTmFtZSAm\nICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJRiBlcnIgPSBl\ncnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiDCDSYgdHdvVGFiICYgInsgb3Ig\neW91IG1heSBwdXQgaW4geW91ciBkZWZhdWx0IGhlcmUgfSIgJiByZXR1cm4gwg0mIFRh\nYiAmICJFTFNFIEZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVs\nc2UNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5RGVzYyh0aGVBcHBsZUV2ZW50LCIg\nJiBpdGVtIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwiICYg\ndGhpc05hbWUgJiAiKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0\nIHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFtZSAm\nICIpKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWVsc2UgaWYgKHBhcmFtVHlw\nZSA9IDQpIG9yIChwYXJhbVR5cGUgPSA2KSB0aGVuDWlmIGl0ZW0gMyBvZiB4ID0gInRy\ndWUiIHRoZW4NcHV0IGl0ZW0gMSBvZiB4ICYmICI6IEJvb2xlYW47IiAmIHJldHVybiBh\nZnRlciB2YXJEZWNsYXJlDXB1dCBpdGVtIDEgb2YgeCAmICIsIiBhZnRlciBjYWxsWW91\nckNvZGUNcHV0IHRydWUgaW50byBuZWVkRXJyDXB1dCBQYXNjYWxUeXBlVHJ1ZUNvZGUo\neCkgYWZ0ZXIgcHJvY0JvZHkNZWxzZSBpZiBpc09wdGlvbmFsIHRoZW4NaWYgaXRlbSAz\nIG9mIHggPSAiZW51bSIgdGhlbg1wdXQgaXRlbSAxIG9mIHggJiYgIjogUmVzVHlwZTsi\nICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IGl0ZW0gMSBvZiB4ICYgIiwiIGFm\ndGVyIGNhbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFBhc2NhbFR5\ncGVUcnVlQ29kZSh4KSBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCBpdGVtIDYgb2YgeCBp\nbnRvIHB0clRoaXNOYW1lDXB1dCBpdGVtIDEgb2YgeCBpbnRvIHRoaXNOYW1lDXB1dCB0\naGlzTmFtZSAmJiAiOiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJu\nIGFmdGVyIHZhckRlY2xhcmUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCBwdHJUaGlz\nTmFtZSAmJiAiOiAiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFm\ndGVyIHZhckRlY2xhcmUNZWxzZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogU3RyaW5nUHRy\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQgaWYNcHV0IHB0clRoaXNOYW1l\nICYgIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0\nIFRhYiAmICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVudCwiICYgaXRlbSAy\nIG9mIHggwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsdHlwZUNvZGUsQCIg\nJiB0aGlzTmFtZSBhZnRlciBwcm9jQm9keQ1pZiBwYXJhbVR5cGUgPSA0IHRoZW4NcHV0\nICIsU2l6ZU9mKCIgJiB0aGlzTmFtZSAmICIpLGFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNZWxzZSAtLSBzdHIyNTUNcHV0ICJbMV0sU2l6ZU9mKCIgJiB0\naGlzTmFtZSAmICIpLTEsYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgVGFiICYgdGhpc05hbWUgJiAiWzBdIDo9IGNocihhY3R1YWxTaXplKTsiICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgUGFzY2FsT3B0aW9uSGFuZGxp\nbmcodGhpc05hbWUsIHB0clRoaXNOYW1lKSBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxz\nZSAtLSByZXF1aXJlZA1wdXQgaXRlbSAxIG9mIHggaW50byB0aGlzTmFtZQ1wdXQgdGhp\nc05hbWUgJiYgIjogIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICI7IiAmIHJldHVybiBh\nZnRlciB2YXJEZWNsYXJlDXB1dCB0aGlzTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNv\nZGUNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRyKHRoZUFwcGxlRXZlbnQsIiAm\nIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLHR5cGVD\nb2RlLEAiICYgdGhpc05hbWUgYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNCB0\naGVuDXB1dCAiLFNpemVPZigiICYgdGhpc05hbWUgJiAiKSxhY3R1YWxTaXplKSk7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCAiWzFdLFNpemVPZigiICYgdGhp\nc05hbWUgJiAiKS0xLGFjdHVhbFNpemUpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5\nDXB1dCBUYWIgJiB0aGlzTmFtZSAmICJbMF0gOj0gY2hyKGFjdHVhbFNpemUpOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVuZCBpZg1lbHNlIGlmIChwYXJhbVR5\ncGUgPSA1KSBvciAocGFyYW1UeXBlID0gNykgdGhlbg1wdXQgImRlc2NGb3IiICYgU3Ry\naXBTUChpdGVtIDEgb2YgeCkgaW50byB0aGlzTmFtZQ1wdXQgdGhpc05hbWUgJiYgIjog\nQUVEZXNjOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgdGhpc05h\nbWUgJiAiLmRhdGFIYW5kbGUgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUN\ncHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFt\nZSAmICIpKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWlmIGlzT3B0aW9uYWwg\ndGhlbg1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IGl0ZW0gNiBvZiB4IGludG8gcHRy\nVGhpc05hbWUNcHV0IHB0clRoaXNOYW1lICYgIiA6IiAmIGl0ZW0gMiBvZiBuYW1lTGlz\ndCAmICI7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHBhcmFtVHlwZSA9IDUg\ndGhlbg1wdXQgaXRlbSA3IG9mIHggaW50byBzaXplVGhpc05hbWUNcHV0IHNpemVUaGlz\nTmFtZSAmICIgOiBMT05HSU5UOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQg\naWYNcHV0IFRhYiAmICJlcnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAm\nIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0\naGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJ\nRiBlcnIgPSBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9j\nQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdHdvVGFiICYgcHRyVGhpc05hbWUgJiAiIDo9IE5JTDsiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgdHdvVGFiICYgc2l6ZVRo\naXNOYW1lICYgIiA6PSAwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1\ndCB0d29UYWIgJiAieyBvciB5b3UgbWF5IHB1dCBpbiB5b3VyIGRlZmF1bHQgaGVyZSB9\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORCIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJFTFNFIiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgdHdvVGFiICYgIkZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWlmIHBhcmFtVHlwZSA9IDcgdGhlbiAtLSBwdXQgaW4gemVybyB0ZXJtaW5hdG9y\nDXB1dCB0d29UYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIgJiB0aGlzTmFt\nZSDCDSYgIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1l\nbmQgaWYNcHV0IHR3b1RhYiAmICJXSVRIIiAmJiB0aGlzTmFtZSAmJiAiRE8iICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0aHJlZVRhYiAmICJCRUdJTiIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNSB0aGVuDXB1dCB0aHJlZVRhYiAm\nIHNpemVUaGlzTmFtZSAmICIgOj0gR2V0SGFuZGxlU2l6ZShkYXRhSGFuZGxlKTsiICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1pZiBpdGVtIDIgb2YgbmFtZUxpc3Qg\nPSAiUHRyIiB0aGVuDXB1dCB0aHJlZVRhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBkYXRh\nSGFuZGxlXjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IHRocmVlVGFi\nICYgcHRyVGhpc05hbWUgJiAiIDo9ICIgJiBpdGVtIDIgb2YgbmFtZUxpc3Qgwg0mICIo\nZGF0YUhhbmRsZV4pOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCB0\naHJlZVRhYiAmICJITG9jayhkYXRhSGFuZGxlKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0aHJlZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdHdvVGFiICYgIkVORDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBwdHJU\naGlzTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNaWYgcGFyYW1UeXBlID0gNSB0\naGVuDXB1dCBzaXplVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBp\nZg1lbHNlDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVFdmVu\ndCwiICYgaXRlbSAyIG9mIHggwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIs\nIiAmIHRoaXNOYW1lICYgIikpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFy\nYW1UeXBlID0gNyB0aGVuIC0tIHB1dCBpbiB6ZXJvIHRlcm1pbmF0b3INcHV0IHRydWUg\naW50byBuZWVkRXJyDXB1dCBUYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIg\nJiB0aGlzTmFtZSDCDSYgIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJITG9jaygiICYgdGhpc05hbWUgJiAiLmRh\ndGFIYW5kbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXRlbSAyIG9mIG5h\nbWVMaXN0ID0gIlB0ciIgdGhlbg1wdXQgdGhpc05hbWUgJiAiLmRhdGFIYW5kbGVeLCIg\nYWZ0ZXIgY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMiBvZiBuYW1lTGlzdCAmICIo\nIiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlXiksIiBhZnRlciBjYWxsWW91ckNvZGUN\nZW5kIGlmDWlmIHBhcmFtVHlwZSA9IDUgdGhlbiAtLSB3ZSBuZWVkIHRoZSBzaXplIHRv\nbw1wdXQgIkdldEhhbmRsZVNpemUoIiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlKSwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1lbmQgaWYNZW5kIGlmDWVuZCBpZg1lbmQgaWYgLS0g\nbm90IG51bGwNZW5kIHJlcGVhdA1pZiB2ZXJib3NlIHRoZW4NcHV0IFRhYiAmICJ7IFdl\nIGNoZWNrIHRvIHNlZSBpZiB3ZSBtaXNzZWQgYW55IHBhcmFtZXRlciBmcm9tIHRoZSBj\nbGllbnQgfSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAi\nSUYgQUVTaXplT2ZBdHRyaWJ1dGUodGhlQXBwbGVFdmVudCwga2V5TWlzc2VkS2V5d29y\nZEF0dHIsICIgwg0mICJ0eXBlQ29kZSwgYWN0dWFsU2l6ZSkgPD4gZXJyQUVEZXNjTm90\nRm91bmQgVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJG\nYWlsRXJyKGVyckFFUGFyYW1NaXNzZWQpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\naWYgdG90YWxQYXJhbSA+IDAgdGhlbg1wdXQgIikiIGludG8gbGFzdCBjaGFyIG9mIGNh\nbGxZb3VyQ29kZQ1lbHNlDWRlbGV0ZSBsYXN0IGNoYXIgb2YgY2FsbFlvdXJDb2RlDWVu\nZCBpZg1wdXQgY2FsbFlvdXJDb2RlICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgcHV0UmVzdWx0Q29kZSBhZnRlciBwcm9jQm9keQ1pZiBjbGVhblVwQ29kZSA8\nPiAiIiB0aGVuDXB1dCB0YWIgJiAiQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVuZCBpZg1wdXQgdGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAmICIgOj0gTm9F\ncnI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdGFiICYgIkVORDsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DWlmIG5lZWRFcnIgdGhlbiBwdXQgImVyciA6IE9TRXJy\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgInR5cGVDb2RlIDogRGVzY1R5\ncGU7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiYWN0dWFsU2l6ZSA6IExP\nTkdJTlQ7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHZhckRlY2xhcmUgPD4g\nIiIgdGhlbg1wdXQgdGFiICYgIlZBUiIgJiByZXR1cm4gaW50byB4DXJlcGVhdCB3aXRo\nIGkgPSAxIHRvIG51bWJlciBvZiBsaW5lcyBpbiB2YXJEZWNsYXJlDXB1dCB0d29UYWIg\nJiBsaW5lIGkgb2YgdmFyRGVjbGFyZSAmIHJldHVybiBhZnRlciB4DWVuZCByZXBlYXQN\ncHV0IHggYWZ0ZXIgcHJvY0hlYWRlcg1lbmQgaWYNcHV0IEZhaWxFcnJTb3VyY2UocHJv\nY05hbWUsIGNsZWFuVXBDb2RlKSBhZnRlciBwcm9jSGVhZGVyDXJldHVybiBwcm9jSGVh\nZGVyICYgaW5pdENvZGUgJiByZXR1cm4gJiBwcm9jQm9keSAmIHJldHVybg1lbHNlIGlm\nIGNhcmRUeXBlID0gImluaXQiIHRoZW4NcmV0dXJuICJQUk9DRURVUkUgSWdub3JlT1NF\ncnIoZXJyOk9TRXJyKTsgSU5MSU5FICQ1NDhGOyB7IGFkZHEgIzIsc3AgfSAiICYgcmV0\ndXJuICYgcmV0dXJuDWVsc2UgaWYgY2FyZFR5cGUgPSAiaW5zdGFsbCIgdGhlbg1wdXQg\nIkFFIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNcmV0\ndXJuIFRhYiAmICJJZ25vcmVPU0VycihBRUluc3RhbGxFdmVudEhhbmRsZXIoJyIgJiBS\nZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikgwg0mICInLCAnIiAmIFJlc1R5cGUoZmll\nbGQgImV2ZW50SUQiKSAmICInLCBASGFuZGxlIiAmIHByb2NOYW1lIMINJiAiLCAwLCBG\nQUxTRSkpOyIgJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVuZCBTZXJ2ZXJT\nYW1wbGUNDWZ1bmN0aW9uIEZhaWxFcnJTb3VyY2UgcHJvY05hbWUsIGNsZWFudXBDb2Rl\nDS0tIHdlIHB1dCB0aGlzIHNlcGFyYXRlIHNvIHRoZSBQYXNjYWxTZXJ2ZXJTYW1wbGUg\nd291bGQgbm90IGJlIHRvbyBsb25nDXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0\nIFRhYiAmIHR3b1RhYiBpbnRvIHRocmVlVGFiDXB1dCAiIiBpbnRvIHByb2NIZWFkZXIN\nLS0gdGhlIGNsZWFudXAgcm91dGluZQ1pZiBjbGVhblVwQ29kZSA8PiAiIiB0aGVuDXB1\ndCBUYWIgJiAiUFJPQ0VEVVJFIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jSGVh\nZGVyDXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXIN\ncHV0IGNsZWFuVXBDb2RlIGFmdGVyIHByb2NIZWFkZXINcHV0IHR3b1RhYiAmICJFTkQ7\nIiAmIHJldHVybiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDWVuZCBpZg1wdXQgVGFi\nICYgIlBST0NFRFVSRSBGYWlsRXJyKGVycjpPU0Vycik7IiAmIHJldHVybiBhZnRlciBw\ncm9jSGVhZGVyDXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NI\nZWFkZXINcHV0IHR3b1RhYiAmICJJRiBlcnIgPD4gTk9FcnIgVEhFTiIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgdGhyZWVUYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFm\ndGVyIHByb2NIZWFkZXINcHV0IHRocmVlVGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAm\nICIgOj0gZXJyOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1pZiBjbGVhblVwQ29k\nZSA8PiAiIiB0aGVuDXB1dCB0aHJlZVRhYiAmICJDbGVhblVwOyIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0hlYWRlcg1lbmQgaWYNcHV0IHRocmVlVGFiICYgIkV4aXQoSGFuZGxlIiAm\nIHByb2NOYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0aHJl\nZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0d29UYWIg\nJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXR1cm4g\ncHJvY0hlYWRlcg1lbmQgRmFpbEVyclNvdXJjZQ0NZnVuY3Rpb24gUGFzY2FsVHlwZVRy\ndWVDb2RlIHgNcHV0IFRhYiAmICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVu\ndCwiICYgaXRlbSAyIG9mIHggJiAiLCAiIGludG8gcHJvY0JvZHkNaWYgaXRlbSAzIG9m\nIHggPSAidHJ1ZSIgdGhlbg1wdXQgInR5cGVCb29sZWFuLCB0eXBlQ29kZSwgQCIgJiBp\ndGVtIDEgb2YgeCAmICIsU2l6ZU9mKEJvb2xlYW4pLCBhY3R1YWxTaXplKTsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0ICJ0eXBlRW51bWVyYXRlZCwgdHlwZUNv\nZGUsIEAiICYgaXRlbSAxIG9mIHggJiAiLFNpemVPZihSZXNUeXBlKSwgYWN0dWFsU2l6\nZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJJRiBl\ncnIgPSBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgVGFiICYgVGFiICYgaXRlbSAxIG9mIHggJiAiIDo9ICIgYWZ0ZXIgcHJvY0Jv\nZHkNaWYgaXRlbSAzIG9mIHggPSAidHJ1ZSIgdGhlbg1wdXQgIkZBTFNFIiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCAiUmVzVHlwZSgwKSIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiRUxTRSIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0JvZHkNcHV0IFRhYiAmIFRhYiAmICJGYWlsRXJyKGVycik7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkNZW5kIFBhc2NhbFR5cGVUcnVlQ29k\nZQ0NZnVuY3Rpb24gUGFzY2FsT3B0aW9uSGFuZGxpbmcgdGhpc05hbWUsIHB0clRoaXNO\nYW1lDXB1dCBUYWIgJiAiaWYgZXJyID0gZXJyQUVEZXNjTm90Rm91bmQgVEhFTiIgJiBy\nZXR1cm4gaW50byBwcm9jQm9keQ1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFiDXB1dCB0\nd29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIg\nJiBwdHJUaGlzTmFtZSAmICIgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IHR3b1RhYiAmICJ7IG9yIHlvdSBtYXkgcHV0IGluIHlvdXIgZGVmYXVsdCBoZXJl\nIH0iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EIiAmIHJl\ndHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgIkVMU0UiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0d29UYWIgJiAiRmFpbEVycihlcnIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNcHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBAIiAmIHRoaXNOYW1l\nICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcmV0dXJuIHByb2NCb2R5DWVuZCBQYXNjYWxP\ncHRpb25IYW5kbGluZw0NZnVuY3Rpb24gU2VydmVyQ29uc3QgY29uc3RJbmZvLGNvbW1l\nbnRPdXQNcHV0IGl0ZW0gMSBvZiBjb25zdEluZm8gJiAiID0gIiAmIGl0ZW0gMiBvZiBj\nb25zdEluZm8gJiAiOyIgaW50byB4DWlmIGNvbW1lbnRPdXQgPSAidHJ1ZSIgdGhlbg1w\ndXQgInsgIiAmIHggJiAiIH0iIGludG8geA1lbmQgaWYNcmV0dXJuIFRhYiAmIHgNZW5k\nIFNlcnZlckNvbnN0DQ1mdW5jdGlvbiBTZXJ2ZXJJbnN0YWxsIGluc3RhbGxDb2RlDXJl\ndHVybiByZXR1cm4gJiAiUHJvY2VkdXJlIEluc3RhbGxIYW5kbGVyczsiICYgcmV0dXJu\nIMINJiBUYWIgJiAiQkVHSU4iICYgcmV0dXJuICYgaW5zdGFsbENvZGUgJiBUYWIgJiAi\nRU5EOyIgJiByZXR1cm4NZW5kIFNlcnZlckluc3RhbGwNDWZ1bmN0aW9uIFBhc2NhbENs\naWVudFRlbXBsYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0\nZSBvciB3aGljaCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgR2x1ZUluZm8o\nZmllbGQgInBhcmFtSW5mbyIpIGludG8gcGFyYW1JbmZvDXB1dCAiRnVuY3Rpb24gQUUi\nICYgU3RyaXBTUChmaWVsZCAiZXZlbnROYW1lIikgJiAiKCIgaW50byB0ZW1wbGF0ZQ1w\ndXQgbnVtYmVyIG9mIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRvIG4NcHV0IDAgaW50byBw\nYXJhbUluZGV4DXJlcGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXNldCBjdXJzb3IgdG8g\nYnVzeQ1wdXQgbGluZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB5DXB1dCBpdGVtIDQg\nb2YgeSBpbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB5ID0gIm8iKSBpbnRvIGlz\nT3B0aW9uYWwNcHV0IChpdGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYg\ndXNlSXQgdGhlbg1hZGQgMSB0byBwYXJhbUluZGV4DWlmIHVzZUl0IHRoZW4NaWYgaW5k\nZXggPSAxIHRoZW4NcHV0ICJWQVIgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgZmFsc2UgaW50\nbyBpc09wdGlvbmFsDWVsc2UNaWYgbXVsdGlMaW5lID0gIm11bHRpTGluZSIgdGhlbg1w\ndXQgcmV0dXJuICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgc3BhY2UgYWZ0\nZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZg1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAz\nIG9mIHkpIGludG8gbmFtZUxpc3QNaWYgcGFyYW1UeXBlID0gMSB0aGVuIC0tIGhhbmRs\nZQ1wdXQgaXRlbSAxIG9mIHkgJiAiOiIgJiBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiOyAi\nIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNSB0aGVuIC0tIHB0ciAr\nIHNpemUNcHV0IGl0ZW0gNiBvZiB5ICYgIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYg\nIjsgIiDCDSYgaXRlbSA3IG9mIHkgJiAiOiBMT05HSU5UOyAiIGFmdGVyIHRlbXBsYXRl\nDWVsc2UgaWYgcGFyYW1UeXBlID0gNyB0aGVuIC0tIGNTdHJpbmcNcHV0IGl0ZW0gNiBv\nZiB5ICYgIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0ZW1wbGF0\nZQ1lbHNlIGlmIGlzT3B0aW9uYWwgdGhlbiAtLSB1c2UgcG9pbnRlciB0byBkYXRhDWlm\nIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgNcHV0IGl0ZW0gMyBvZiB5\nIGludG8gZGF0YVR5cGUNaWYgZGF0YVR5cGUgPSAiZW51bSIgdGhlbiAtLSBzcGVjaWFs\nIGZvciBlbnVtDXB1dCBpdGVtIDEgb2YgeSAmICI6UmVzVHlwZTsgIiBhZnRlciB0ZW1w\nbGF0ZQ1lbHNlIGlmIGRhdGFUeXBlID0gInRydWUiIHRoZW4gLS0gYWxzbyBzcGVjaWFs\nIGZvciB0cnVlDXB1dCBpdGVtIDEgb2YgeSAmICI6Qm9vbGVhbjsgIiBhZnRlciB0ZW1w\nbGF0ZQ1lbHNlDXB1dCBpdGVtIDYgb2YgeSAmICI6IiAmIGl0ZW0gMiBvZiBuYW1lTGlz\ndCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVsc2UNcHV0IGl0ZW0gNiBvZiB5\nICYgIjoiIGFmdGVyIHRlbXBsYXRlDWlmIChwYXJhbVR5cGUgPSAwKSB0aGVuDXB1dCAi\nQUVEZXNjUHRyOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgLS0gNiwgUFN0cmluZw1wdXQg\nIlN0cmluZ1B0cjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmDWVsc2UgLS0g\ncmVxdWlyZWQNcHV0IGl0ZW0gMSBvZiB5ICYgIjoiIGFmdGVyIHRlbXBsYXRlDWlmIChw\nYXJhbVR5cGUgPSAwKSB0aGVuIC0tIEFFRGVzYw1wdXQgIkFFRGVzYzsgIiBhZnRlciB0\nZW1wbGF0ZQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgN\ncHV0IGl0ZW0gMSBvZiBuYW1lTGlzdCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSAt\nLSBzdHIyNTUNcHV0ICJTdHIyNTU7ICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBp\nZg1lbmQgaWYgLS0gdXNlSXQNZW5kIGlmIC0tIHVzZUl0DWVuZCByZXBlYXQNRGVsZXRl\nIGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSAtLSBzcGFjZSBvciAoDWlmIHBhcmFtSW5kZXgg\nPiAwIHRoZW4NcHV0ICIpIiBpbnRvIGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSAtLSByZXBs\nYWNlIDsNZW5kIGlmDXB1dCAiOk9TRXJyOyIgYWZ0ZXIgdGVtcGxhdGUNcmV0dXJuIHRl\nbXBsYXRlDWVuZCBQYXNjYWxDbGllbnRUZW1wbGF0ZQ0NAAA7NAADAQABBgCfARkA+oAG\nAAAAAAABAAAADAAAABBDAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjb25zdGFudCBuYW1lcyB3aWxsIGJlIGlu\nIEMuIg1lbmQgTW91c2VXaXRoaW4NDWZ1bmN0aW9uIFNlcnZlclNhbXBsZSBjYXJkVHlw\nZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1AoZmll\nbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNZ2xvYmFsIGNsaWVudExhbmcsdmVy\nYm9zZQ1pZiB2ZXJib3NlIHRoZW4NcHV0IGZpZWxkICJldmVudENvbW1lbnQiIGludG8g\ndGVtcA1pZiB0ZW1wIDw+ICIiIHRoZW4NcHV0ICIvKiAiICYgdGVtcCAmICIgKi8iICYg\ncmV0dXJuICYgcmV0dXJuIGludG8gcHJvY0hlYWRlcg1lbmQgaWYNZW5kIGlmDXB1dCBD\nVGVtcGxhdGUoKSAmIHJldHVybiBhZnRlciB0ZW1wDXB1dCAiRG8iIGFmdGVyIGNoYXIg\nNiBvZiB0ZW1wDXB1dCB0ZW1wIGFmdGVyIHByb2NIZWFkZXINcHV0ICJ7IiAmIHJldHVy\nbiBhZnRlciBwcm9jSGVhZGVyDXB1dCBUYWIgJiAiLyogcHV0IHlvdXIgY29kZSBoZXJl\nICovIiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCBUYWIgJiAicmV0dXJuIG5v\nRXJyOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgIn0iICYgcmV0dXJuICYg\ncmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0ICJwYXNjYWwgT1NFcnIgSGFuZGxlIiAm\nIHByb2NOYW1lIMINJiAiKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFwcGxlRXZlbnQsIGNv\nbnN0IEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHRoZVJlZkNvbikiICYgcmV0dXJu\nIGFmdGVyIHByb2NIZWFkZXINcHV0IEdsdWVJbmZvKGZpZWxkICJwYXJhbUluZm8iKSBp\nbnRvIHBhcmFtSW5mbw1wdXQgbnVtYmVyIG9mIGxpbmVzIG9mIHBhcmFtSW5mbyBpbnRv\nIGNvdW50DXB1dCAoaXRlbSAzIG9mIHBhcmFtSW5mbyA8PiAibnVsbCIpIGludG8gaXNG\ndW5jDXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IFRhYiAmIHR3b1RhYiBpbnRv\nIHRocmVlVGFiDXB1dCAiIiBpbnRvIGNsZWFuVXBDb2RlDXB1dCAiIiBpbnRvIHB1dFJl\nc3VsdENvZGUNcHV0ICIiIGludG8gaW5pdENvZGUNcHV0ICJPU0VyciBlcnI7IiAmIHJl\ndHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiRGVzY1R5cGUgdHlwZUNvZGU7IiAmIHJl\ndHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAibG9uZyBhY3R1YWxTaXplOyIgJiByZXR1\ncm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgImVyciA9IERvIiAmIHByb2NOYW1l\nICYgIigiIGludG8gY2FsbFlvdXJDb2RlDXB1dCAwIGludG8gdG90YWxQYXJhbQ0tLSBp\nZiBhIGZ1bmN0aW9uIGdldCB0aGUgcmVzdWx0IGJhY2sNaWYgaXNGdW5jIHRoZW4NYWRk\nIDEgdG8gdG90YWxQYXJhbQ1wdXQgbGluZSAxIG9mIHBhcmFtSW5mbyBpbnRvIHgNcHV0\nIGl0ZW0gNCBvZiB4IGludG8gcGFyYW1UeXBlDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVt\nIDMgb2YgeCkgaW50byBuYW1lTGlzdA1wdXQgVGFiICYgImlmICgoKnRoZVJlcGx5KS5k\nYXRhSGFuZGxlKSIgJiByZXR1cm4gYWZ0ZXIgcHV0UmVzdWx0Q29kZQ1pZiBwYXJhbVR5\ncGUgPD0gMSB0aGVuIC0tIHJlc3VsdCBpcyBBRURlc2Mgb3IgSGFuZGxlDXB1dCAiQUVE\nZXNjIHRoZVJlc3VsdDsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAm\nICJ0aGVSZXN1bHQuZGF0YUhhbmRsZSA9IG5pbDsiICYgcmV0dXJuIGFmdGVyIGluaXRD\nb2RlDWlmIChwYXJhbVR5cGUgPSAwKSB0aGVuDXB1dCAiJnRoZVJlc3VsdCwiIGFmdGVy\nIGNhbGxZb3VyQ29kZQ1lbHNlDXB1dCBUYWIgJiAidGhlUmVzdWx0LmRlc2NyaXB0b3JU\neXBlID0gIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCDCDSYgIjsiICYgcmV0dXJuIGFmdGVy\nIGluaXRDb2RlDXB1dCAiJnRoZVJlc3VsdC5kYXRhSGFuZGxlLCIgYWZ0ZXIgY2FsbFlv\ndXJDb2RlDWVuZCBpZg1wdXQgVGFiICYgIkFFRGlzcG9zZURlc2MoJnRoZVJlc3VsdCk7\nIiAmIHJldHVybiBhZnRlciBjbGVhblVwQ29kZQ1wdXQgdHdvVGFiICYgImVyciA9IEFF\nUHV0S2V5RGVzYyh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCAmdGhlUmVzdWx0KTsi\nICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxzZSBpZiAocGFyYW1UeXBlID0g\nNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4gLS0gcmVzdWx0IGlzIG9uIHN0YWNrDWlm\nIHBhcmFtVHlwZSA9IDQgdGhlbg1wdXQgaXRlbSA1IG9mIG5hbWVMaXN0ICYgIiB0aGVS\nZXN1bHQ7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiJnRoZVJlc3VsdCwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1lbHNlDXB1dCAiU3RyMjU1IHRoZVJlc3VsdDsiICYg\ncmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0ICIoU3RyaW5nUHRyKSAmdGhlUmVzdWx0\nLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1wdXQgdHdvVGFiICYgImVyciA9IEFF\nUHV0S2V5UHRyKHRoZVJlcGx5LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBv\nZiBuYW1lTGlzdCAmICIsIChQdHIpICZ0aGVSZXN1bHQiIGFmdGVyIHB1dFJlc3VsdENv\nZGUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCAiLCBzaXplb2YoIiAmIGl0ZW0gNSBv\nZiBuYW1lTGlzdCAmICIpKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxz\nZQ1wdXQgIlsxXSwgdGhlUmVzdWx0WzBdKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3Vs\ndENvZGUNZW5kIGlmDWVuZCBpZg1lbmQgaWYgLS0gaXNGdW5jDXJlcGVhdCB3aXRoIHBh\ncmFtSW5kZXggPSAyIHRvIGNvdW50DXB1dCBsaW5lIHBhcmFtSW5kZXggb2YgcGFyYW1J\nbmZvIGludG8geA1pZiBpdGVtIDMgb2YgeCA8PiAibnVsbCIgdGhlbg1hZGQgMSB0byB0\nb3RhbFBhcmFtDXB1dCBpdGVtIDQgb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0g\nNSBvZiB4ID0gIm8iKSBpbnRvIGlzT3B0aW9uYWwNcHV0IE5hbWVPZkRhdGFUeXBlKGl0\nZW0gMyBvZiB4KSBpbnRvIG5hbWVMaXN0DWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHdv\nVGFiIGludG8gaW5kZW50DWVsc2UNcHV0IFRhYiBpbnRvIGluZGVudA1lbmQgaWYNaWYg\ncGFyYW1UeXBlID0gMCB0aGVuIC0tIEFFRGVzYyBvciBoYW5kbGUNcHV0IGl0ZW0gMSBv\nZiB4IGludG8gdGhpc05hbWUNcHV0IFRhYiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxl\nID0gbmlsOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNcHV0IFRhYiAmICJlcnIgPSBB\nRUdldFBhcmFtRGVzYyh0aGVBcHBsZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCDCDSYgIix0\neXBlV2lsZENhcmQsJiIgJiB0aGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBpdGVtIDYgb2YgeCBpbnRvIHB0clRo\naXNOYW1lDXB1dCAiQUVEZXNjIiAmJiB0aGlzTmFtZSAmICIsIiAmJiAiKiIgJiBwdHJU\naGlzTmFtZSAmICI7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCBwdHJUaGlz\nTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNcHV0IENPcHRpb25IYW5kbGluZygi\nJiIgJiB0aGlzTmFtZSwgcHRyVGhpc05hbWUpIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0\nICJBRURlc2MiICYmIHRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xh\ncmUNcHV0ICImIiAmIHRoaXNOYW1lICYgIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQg\nVGFiICYgImlmIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVuZCBpZg1wdXQgVGFiICYgIkFFRGlzcG9zZURlc2MoJiIgJiB0aGlzTmFtZSAm\nICIpOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiBwYXJhbVR5cGUg\nPSAxIHRoZW4gLS0gaGFuZGxlDXB1dCBpdGVtIDEgb2YgeCBpbnRvIHB0clRoaXNOYW1l\nDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBpbnRvIHRoaXNOYW1l\nDXB1dCAiQUVEZXNjIiAmJiB0aGlzTmFtZSAmICI7IiAmIHJldHVybiBhZnRlciB2YXJE\nZWNsYXJlDXB1dCBUYWIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSA9IG5pbDsiICYg\ncmV0dXJuIGFmdGVyIGluaXRDb2RlDXB1dCB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRhYiAmICJl\ncnIgPSBBRUdldFBhcmFtRGVzYyh0aGVBcHBsZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCDC\nDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwmIiAmIHRoaXNOYW1lICYgIik7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgImlmIChlcnIgPT0gZXJy\nQUVEZXNjTm90Rm91bmQpIiAmIHJldHVybiDCDSYgdHdvVGFiICYgIi8qIG9yIHlvdSBt\nYXkgcHV0IGluIHlvdXIgZGVmYXVsdCBoZXJlICovOyIgJiByZXR1cm4gwg0mIHRhYiAm\nICJlbHNlIGlmIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVsc2UNcHV0IFRhYiAmICJlcnIgPSBBRUdldFBhcmFtRGVzYyh0aGVBcHBsZUV2\nZW50LCIgJiBpdGVtIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYg\nIiwmIiAmIHRoaXNOYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgImlmIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVuZCBpZg1wdXQgVGFiICYgIkFFRGlzcG9zZURlc2MoJiIgJiB0aGlzTmFtZSAm\nICIpOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiAocGFyYW1UeXBl\nID0gNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4NaWYgaXRlbSAzIG9mIHggPSAidHJ1\nZSIgdGhlbg1wdXQgIkJvb2xlYW4iICYmIGl0ZW0gMSBvZiB4ICYgIjsiICYgcmV0dXJu\nIGFmdGVyIHZhckRlY2xhcmUNcHV0IGl0ZW0gMSBvZiB4ICYgIiwiIGFmdGVyIGNhbGxZ\nb3VyQ29kZQ1wdXQgQ1R5cGVUcnVlQ29kZSh4KSBhZnRlciBwcm9jQm9keQ1lbHNlIGlm\nIGlzT3B0aW9uYWwgdGhlbg1pZiBpdGVtIDMgb2YgeCA9ICJlbnVtIiB0aGVuDXB1dCAi\nUmVzVHlwZSIgJiYgaXRlbSAxIG9mIHggJiAiOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVj\nbGFyZQ1wdXQgaXRlbSAxIG9mIHggJiAiLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDXB1dCBD\nVHlwZVRydWVDb2RlKHgpIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IGl0ZW0gNiBvZiB4\nIGludG8gcHRyVGhpc05hbWUNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNaWYg\ncGFyYW1UeXBlID0gNCB0aGVuDXB1dCBpdGVtIDUgb2YgbmFtZUxpc3QgJiYgdGhpc05h\nbWUgJiAiOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgaXRlbSA1IG9mIG5h\nbWVMaXN0ICYgIiAqIiAmIHB0clRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZh\nckRlY2xhcmUNZWxzZQ1wdXQgIlN0cjI1NSAiICYgdGhpc05hbWUgJiAiLCAqIiAmIHB0\nclRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNZW5kIGlmDXB1\ndCBUYWIgJiAiZXJyID0gQUVHZXRQYXJhbVB0cih0aGVBcHBsZUV2ZW50LCIgJiBpdGVt\nIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwmdHlwZUNvZGUs\nKFB0cikmIiAmIHRoaXNOYW1lIGFmdGVyIHByb2NCb2R5DWlmIHBhcmFtVHlwZSA9IDQg\ndGhlbg1wdXQgIixzaXplb2YoIiAmIHRoaXNOYW1lICYgIiksJmFjdHVhbFNpemUpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IENPcHRpb25IYW5kbGluZygiJiIgJiB0\naGlzTmFtZSwgcHRyVGhpc05hbWUpIGFmdGVyIHByb2NCb2R5DXB1dCBwdHJUaGlzTmFt\nZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZSAtLSBzdHIyNTUNcHV0ICJbMV0s\nc2l6ZW9mKCIgJiB0aGlzTmFtZSAmICIpLTEsJmFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJpZiAoIWVycikiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DXB1dCB0d29UYWIgJiB0aGlzTmFtZSAmICJbMF0gPSAoY2hhcikgYWN0\ndWFsU2l6ZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCAiKFN0cmluZ1B0cikg\nIiAmIHB0clRoaXNOYW1lICYgIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgQ09wdGlv\nbkhhbmRsaW5nKCIoU3RyMjU1ICopICYiICYgdGhpc05hbWUsIHB0clRoaXNOYW1lKSBh\nZnRlciBwcm9jQm9keQ1lbmQgaWYNZW5kIGlmDWVsc2UgLS0gcmVxdWlyZWQNcHV0IGl0\nZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0IFRhYiAmICJlcnIgPSBBRUdldFBhcmFt\nUHRyKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQg\nb2YgbmFtZUxpc3QgJiAiLCZ0eXBlQ29kZSwoUHRyKSYiICYgdGhpc05hbWUgYWZ0ZXIg\ncHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCBpdGVtIDUgb2YgbmFtZUxp\nc3QgJiYgdGhpc05hbWUgJiAiOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQg\nIixzaXplb2YoIiAmIHRoaXNOYW1lICYgIiksJmFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNcHV0IGl0ZW0gNiBvZiBuYW1lTGlzdCBpbnRvIGRhdGFTaXpl\nDWlmIChkYXRhU2l6ZSA8IDApIG9yIChkYXRhU2l6ZSA+IDQpIHRoZW4NcHV0ICImIiBh\nZnRlciBjYWxsWW91ckNvZGUNZW5kIGlmDXB1dCB0aGlzTmFtZSAmICIsIiBhZnRlciBj\nYWxsWW91ckNvZGUNZWxzZQ1wdXQgIihTdHJpbmdQdHIpICYgIiAmIHRoaXNOYW1lICYg\nIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgIlN0cjI1NSIgJiYgdGhpc05hbWUgJiAi\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgIlsxXSxzaXplb2YoIiAmIHRo\naXNOYW1lICYgIiktMSwmYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgVGFiICYgdGhpc05hbWUgJiAiWzBdID0gKGNoYXIpIGFjdHVhbFNpemU7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJpZiAoZXJyKSBn\nb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxzZSBp\nZiAocGFyYW1UeXBlID0gNSkgb3IgKHBhcmFtVHlwZSA9IDcpIHRoZW4NcHV0ICJkZXNj\nRm9yIiAmIFN0cmlwU1AoaXRlbSAxIG9mIHgpIGludG8gdGhpc05hbWUNcHV0ICJBRURl\nc2MiICYmIHRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIFRhYiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlID0gbmlsOyIgJiByZXR1cm4gYWZ0\nZXIgaW5pdENvZGUNcHV0IFRhYiAmICJBRURpc3Bvc2VEZXNjKCYiICYgdGhpc05hbWUg\nJiAiKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWlmIGlzT3B0aW9uYWwgdGhl\nbg1wdXQgInB0clRvIiAmIFN0cmlwU1AoaXRlbSAxIG9mIHgpIGludG8gcHRyVGhpc05h\nbWUNcHV0IGl0ZW0gMSBvZiB4ICYgIlNpemUiIGludG8gc2l6ZVRoaXNOYW1lDWlmIHBh\ncmFtVHlwZSA9IDUgdGhlbg1wdXQgIlB0ciIgJiYgcHRyVGhpc05hbWUgJiAiOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgImxvbmciICYmIHNpemVUaGlzTmFtZSAm\nICI7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWVsc2UNcHV0IGl0ZW0gNSBvZiBu\nYW1lTGlzdCAmJiAiKiIgJiBwdHJUaGlzTmFtZSAmICI7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDWVuZCBpZg1wdXQgVGFiICYgImVyciA9IEFFR2V0UGFyYW1EZXNjKHRo\nZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFt\nZUxpc3QgJiAiLCYiICYgdGhpc05hbWUgJiAiKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCBUYWIgJiAiaWYgKGVyciA9PSBlcnJBRURlc2NOb3RGb3VuZCkgeyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA9\nIG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIHBhcmFtVHlwZSA9IDUgdGhl\nbg1wdXQgdHdvVGFiICYgc2l6ZVRoaXNOYW1lICYgIiA9IDA7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbmQgaWYNcHV0IHR3b1RhYiAmICIvKiBvciB5b3UgbWF5IHB1dCBp\nbiB5b3VyIGRlZmF1bHQgaGVyZSAqLyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIFRhYiAmICJ9IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgImVsc2Ug\neyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJpZiAoZXJyKSBn\nb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1pZiBwYXJhbVR5cGUg\nPSA3IHRoZW4gLS0gcHV0IGluIHplcm8gdGVybWluYXRvcg1wdXQgdHdvVGFiICYgImVy\nciA9IFB0ckFuZEhhbmQoKFB0cikmZXJyLCAiICYgdGhpc05hbWUgwg0mICIuZGF0YUhh\nbmRsZSwgMSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgImlm\nIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBp\nZg1pZiBwYXJhbVR5cGUgPSA1IHRoZW4NcHV0IHR3b1RhYiAmIHNpemVUaGlzTmFtZSAm\nICIgPSBHZXRIYW5kbGVTaXplKCIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSk7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNaWYgaXRlbSAyIG9mIG5hbWVMaXN0\nID0gIlB0ciIgdGhlbg1wdXQgdHdvVGFiICYgcHRyVGhpc05hbWUgJiAiID0gKiIgJiB0\naGlzTmFtZSAmICIuZGF0YUhhbmRsZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVs\nc2UNcHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA9IChQdHIpICoiICYgdGhpc05h\nbWUgwg0mICIuZGF0YUhhbmRsZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBp\nZg1wdXQgdHdvVGFiICYgIkhMb2NrKCIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSk7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgIn07IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgcHRyVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJD\nb2RlDWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgc2l6ZVRoaXNOYW1lICYgIiwiIGFm\ndGVyIGNhbGxZb3VyQ29kZQ1lbmQgaWYNZWxzZQ1wdXQgVGFiICYgImVyciA9IEFFR2V0\nUGFyYW1EZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBp\ndGVtIDQgb2YgbmFtZUxpc3QgJiAiLCYiICYgdGhpc05hbWUgJiAiKTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAiaWYgKGVycikgZ290byBDbGVhblVwOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNyB0aGVuIC0tIHB1\ndCBpbiB6ZXJvIHRlcm1pbmF0b3INcHV0IFRhYiAmICJlcnIgPSBQdHJBbmRIYW5kKChQ\ndHIpJmVyciwgIiAmIHRoaXNOYW1lIMINJiAiLmRhdGFIYW5kbGUsIDEpOyIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJpZiAoZXJyKSBnb3RvIENsZWFuVXA7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJITG9jaygi\nICYgdGhpc05hbWUgJiAiLmRhdGFIYW5kbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNaWYgaXRlbSAyIG9mIG5hbWVMaXN0ID0gIlB0ciIgdGhlbg1wdXQgIioiICYgdGhp\nc05hbWUgJiAiLmRhdGFIYW5kbGUsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZSBpZiBw\nYXJhbVR5cGUgPSA3IHRoZW4NcHV0ICIoY2hhciAqKSAqIiAmIHRoaXNOYW1lICYgIi5k\nYXRhSGFuZGxlLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVsc2UNcHV0ICIoUHRyKSAqIiAm\nIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBp\nZg1pZiBwYXJhbVR5cGUgPSA1IHRoZW4gLS0gd2UgbmVlZCB0aGUgc2l6ZSB0b28NcHV0\nICJHZXRIYW5kbGVTaXplKCIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSksIiBhZnRl\nciBjYWxsWW91ckNvZGUNZW5kIGlmDWVuZCBpZg1lbmQgaWYNZW5kIGlmIC0tIG5vdCBu\ndWxsDWVuZCByZXBlYXQNaWYgdmVyYm9zZSB0aGVuDXB1dCBUYWIgJiAiLyogV2UgY2hl\nY2sgdG8gc2VlIGlmIHdlIG1pc3NlZCBhbnkgcGFyYW1ldGVyIGZyb20gdGhlIGNsaWVu\ndCAqLyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiaWYg\nKEFFU2l6ZU9mQXR0cmlidXRlKHRoZUFwcGxlRXZlbnQsIGtleU1pc3NlZEtleXdvcmRB\ndHRyLCAiIMINJiAiJnR5cGVDb2RlLCAmYWN0dWFsU2l6ZSkgIT0gZXJyQUVEZXNjTm90\nRm91bmQpIHsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiZXJy\nID09IGVyckFFUGFyYW1NaXNzZWQ7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\ndHdvVGFiICYgImdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCBUYWIgJiAifTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIHRvdGFsUGFyYW0g\nPiAwIHRoZW4NcHV0ICIpIiBpbnRvIGxhc3QgY2hhciBvZiBjYWxsWW91ckNvZGUNZWxz\nZQ1wdXQgIikiIGFmdGVyIGNhbGxZb3VyQ29kZQ1lbmQgaWYNcHV0IGNhbGxZb3VyQ29k\nZSAmICI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgImlmIChlcnIp\nIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBwdXRSZXN1\nbHRDb2RlIGFmdGVyIHByb2NCb2R5DXB1dCAiQ2xlYW5VcDoiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DXB1dCBDbGVhblVwQ29kZSAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdGFiICYgInJldHVybiBlcnI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nIn0iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCAieyIgJiByZXR1cm4gaW50byB4\nDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG51bWJlciBvZiBsaW5lcyBpbiB2YXJEZWNsYXJl\nDXB1dCBUYWIgJiBsaW5lIGkgb2YgdmFyRGVjbGFyZSAmIHJldHVybiBhZnRlciB4DWVu\nZCByZXBlYXQNcHV0IHggJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXR1cm4gcHJv\nY0hlYWRlciAmIGluaXRDb2RlICYgcmV0dXJuICYgcHJvY0JvZHkgJiByZXR1cm4NZWxz\nZSBpZiBjYXJkVHlwZSA9ICJpbml0IiB0aGVuDWVsc2UgaWYgY2FyZFR5cGUgPSAiaW5z\ndGFsbCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGlu\ndG8gcHJvY05hbWUNcmV0dXJuIFRhYiAmICJBRUluc3RhbGxFdmVudEhhbmRsZXIoJyIg\nJiBSZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikgwg0mICInLCAnIiAmIFJlc1R5cGUo\nZmllbGQgImV2ZW50SUQiKSAmICInLCAoUHJvY1B0cikgJkhhbmRsZSIgJiBwcm9jTmFt\nZSDCDSYgIiwgMCwgZmFsc2UpOyIgJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlm\nDWVuZCBTZXJ2ZXJTYW1wbGUNDWZ1bmN0aW9uIENUeXBlVHJ1ZUNvZGUgeA1wdXQgVGFi\nICYgImVyciA9IEFFR2V0UGFyYW1QdHIodGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9m\nIHggJiAiLCAiIGludG8gcHJvY0JvZHkNaWYgaXRlbSAzIG9mIHggPSAidHJ1ZSIgdGhl\nbg1wdXQgInR5cGVCb29sZWFuLCAmdHlwZUNvZGUsIChQdHIpJiIgJiBpdGVtIDEgb2Yg\neCAmICIsMSwgJmFjdHVhbFNpemUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZWxz\nZQ1wdXQgInR5cGVFbnVtZXJhdGVkLCAmdHlwZUNvZGUsIChQdHIpJiIgJiBpdGVtIDEg\nb2YgeCAmICIsc2l6ZW9mKFJlc1R5cGUpLCAmYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJpZiAoZXJyID09IGVyckFFRGVz\nY05vdEZvdW5kKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmIFRhYiAm\nIGl0ZW0gMSBvZiB4ICYgIiA9ICIgYWZ0ZXIgcHJvY0JvZHkNaWYgaXRlbSAzIG9mIHgg\nPSAidHJ1ZSIgdGhlbg1wdXQgImZhbHNlOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\nZWxzZQ1wdXQgIihSZXNUeXBlKSAwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5k\nIGlmDXB1dCBUYWIgJiAiZWxzZSBpZiAoZXJyKSBnb3RvIENsZWFuVXA7IiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkNZW5kIENUeXBlVHJ1ZUNvZGUN\nDWZ1bmN0aW9uIENPcHRpb25IYW5kbGluZyB0aGlzTmFtZSwgcHRyVGhpc05hbWUNcHV0\nIFRhYiAmICJpZiAoZXJyID09IGVyckFFRGVzY05vdEZvdW5kKSB7IiAmIHJldHVybiBp\nbnRvIHByb2NCb2R5DXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IHR3b1RhYiAm\nIHB0clRoaXNOYW1lICYgIiA9IG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCB0d29UYWIgJiAiLyogb3IgeW91IG1heSBwdXQgaW4geW91ciBkZWZhdWx0IGhlcmUg\nKi8iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAifSIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJlbHNlIHsiICYgcmV0dXJuIGFmdGVyIHBy\nb2NCb2R5DXB1dCB0d29UYWIgJiAiaWYgKGVycikgZ290byBDbGVhblVwOyIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNiB0aGVuDXB1dCB0d29UYWIg\nJiBwdHJUaGlzTmFtZSAmICIgPSAiICYgdGhpc05hbWUgJiAiOyIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0JvZHkNZWxzZQ1wdXQgdHdvVGFiICYgcHRyVGhpc05hbWUgJiAiID0gIiAm\nIHRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQg\nVGFiICYgIn07IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkN\nZW5kIENPcHRpb25IYW5kbGluZw0NZnVuY3Rpb24gU2VydmVyQ29uc3QgbmFtZSxjb25z\ndCxjb21tZW50T3V0DXB1dCAiI2RlZmluZSAiICYgbmFtZSAmJiBjb25zdCBpbnRvIHgN\naWYgY29tbWVudE91dCA9ICJ0cnVlIiB0aGVuDXB1dCAiLyogIiAmIHggJiAiICovIiBp\nbnRvIHgNZW5kIGlmDXJldHVybiB4DWVuZCBTZXJ2ZXJDb25zdA0NZnVuY3Rpb24gU2Vy\ndmVySW5zdGFsbCBpbnN0YWxsQ29kZQ1yZXR1cm4gcmV0dXJuICYgInZvaWQgSW5zdGFs\nbEhhbmRsZXJzKCkiICYgcmV0dXJuIMINJiAieyIgJiByZXR1cm4gJiBpbnN0YWxsQ29k\nZSAmICJ9IiAmIHJldHVybg1lbmQgU2VydmVySW5zdGFsbA0NZnVuY3Rpb24gQ1RlbXBs\nYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3aGlj\naCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgR2x1ZUluZm8oZmllbGQgInBh\ncmFtSW5mbyIpIGludG8gcGFyYW1JbmZvDXB1dCAiT1NFcnIgQUUiICYgU3RyaXBTUChm\naWVsZCAiZXZlbnROYW1lIikgJiAiKCIgaW50byB0ZW1wbGF0ZQ1wdXQgbnVtYmVyIG9m\nIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRvIG4NcHV0IDAgaW50byBwYXJhbUluZGV4DXJl\ncGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgbGlu\nZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB5DXB1dCBpdGVtIDQgb2YgeSBpbnRvIHBh\ncmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB5ID0gIm8iKSBpbnRvIGlzT3B0aW9uYWwNcHV0\nIChpdGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYgdXNlSXQgdGhlbg1h\nZGQgMSB0byBwYXJhbUluZGV4DWlmIHVzZUl0IHRoZW4NaWYgaW5kZXggPSAxIHRoZW4N\ncHV0IGZhbHNlIGludG8gaXNPcHRpb25hbA1lbHNlDWlmIG11bHRpTGluZSA9ICJtdWx0\naUxpbmUiIHRoZW4NcHV0IHJldHVybiAmIHNwYWNlIGFmdGVyIHRlbXBsYXRlDWVsc2UN\ncHV0IHNwYWNlIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1lbmQgaWYNcHV0IE5hbWVPZkRh\ndGFUeXBlKGl0ZW0gMyBvZiB5KSBpbnRvIG5hbWVMaXN0DXB1dCBpdGVtIDUgb2YgbmFt\nZUxpc3QgaW50byB0eXBlTmFtZQ1pZiBwYXJhbVR5cGUgPSAwIHRoZW4NaWYgaW5kZXgg\nPD4gMSB0aGVuIHB1dCAiY29uc3QgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgIkFFRGVzYyAq\nIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDEgdGhlbiAtLSBoYW5k\nbGUNcHV0ICJIYW5kbGUgIiBhZnRlciB0ZW1wbGF0ZQ1pZiBpbmRleCA9IDEgdGhlbg1w\ndXQgIioiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1lbHNlIGlmIHBhcmFtVHlwZSA9IDQg\ndGhlbiAtLSBpbW1lZGlhdGUNcHV0IGl0ZW0gMyBvZiB5IGludG8gZGF0YVR5cGUNcHV0\nIGl0ZW0gNiBvZiBuYW1lTGlzdCBpbnRvIGRhdGFTaXplDWlmIGRhdGFUeXBlID0gImVu\ndW0iIHRoZW4NcHV0ICJSZXNUeXBlICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBkYXRh\nVHlwZSA9ICJ0cnVlIiB0aGVuDXB1dCAiQm9vbGVhbiAiIGFmdGVyIHRlbXBsYXRlDWVs\nc2UgaWYgKGlzT3B0aW9uYWwgb3IgKGRhdGFTaXplIDwgMCkgb3IgKGRhdGFTaXplID4g\nNCkpIGFuZCAoaW5kZXggPD4gMSkgdGhlbiAtLSBmaXhlZCBsZW5ndGggb3B0aW9uYWwN\ncHV0ICJjb25zdCAiICYgdHlwZU5hbWUgJiAiICoiIGFmdGVyIHRlbXBsYXRlDWVsc2UN\ncHV0IHR5cGVOYW1lICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGluZGV4\nID0gMSB0aGVuDXB1dCAiKiIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVsc2UgaWYgcGFy\nYW1UeXBlID0gNyB0aGVuDWlmIGluZGV4IDw+IDEgdGhlbiBwdXQgImNvbnN0ICIgYWZ0\nZXIgdGVtcGxhdGUNcHV0IHR5cGVOYW1lICYgIiAqIiBhZnRlciB0ZW1wbGF0ZQ1lbmQg\naWYNaWYgKGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSA9ICIqIikgdGhlbg1wdXQgaXRlbSA2\nIG9mIHkgJiAiLCAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgKHBhcmFtVHlwZSA9IDUp\nIHRoZW4gLS0gcHRyICsgc2l6ZQ1wdXQgdHlwZU5hbWUgJiAiICoiICYgaXRlbSA2IG9m\nIHkgJiAiLCBsb25nICIgJiBpdGVtIDcgb2YgeSAmICIsICIgYWZ0ZXIgdGVtcGxhdGUN\nZWxzZSBpZiBwYXJhbVR5cGUgPSA2IHRoZW4NaWYgaW5kZXggPD4gMSB0aGVuIHB1dCAi\nY29uc3QgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgIlN0cmluZ1B0ciAiICYgaXRlbSA2IG9m\nIHkgJiAiLCAiIGFmdGVyIHRlbXBsYXRlDWVsc2UNcHV0IGl0ZW0gMSBvZiB5ICYgIiwg\nIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmIC0tIHVzZUl0DWVuZCBpZiAtLSB1\nc2VJdA1lbmQgcmVwZWF0DWlmIHBhcmFtSW5kZXggPiAwIHRoZW4NRGVsZXRlIGxhc3Qg\nY2hhciBvZiB0ZW1wbGF0ZSAtLSBzcGFjZSBvciAoDXB1dCAiKSIgaW50byBsYXN0IGNo\nYXIgb2YgdGVtcGxhdGUgLS0gcmVwbGFjZSAsDWVsc2UNcHV0ICIpIiBhZnRlciB0ZW1w\nbGF0ZQ1lbmQgaWYNcmV0dXJuIHRlbXBsYXRlDWVuZCBDVGVtcGxhdGUNDQAAIgAEAgUA\n3wADAPEAdgAAAAAAAAAAABUADAUAABAAAAAABewABQEAAQIAAgESAF3ABgAAAAAAAQAA\nAAwAAAAQYWV0ZSBOYW1lAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBzaG93IHRoZSBldmVudCBieSB1c2luZyB0aGUgZXZlbnQgbmFtZSBhbmQg\ncGFyYW1ldGVyIG5hbWUuIg1lbmQgTW91c2VXaXRoaW4NDWZ1bmN0aW9uIENsaWVudFRl\nbXBsYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3\naGljaCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgc3BhY2UgJiBOdW1Ub0No\nYXIoMTk0KSAmIHJldHVybiAmIHNwYWNlIGludG8gY29udENoYXINcHV0IGZpZWxkICJl\ndmVudE5hbWUiIGludG8gdGVtcGxhdGUNcHV0IGZpZWxkICJwYXJhbUluZm8iIGludG8g\neA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHggaW50byBuDXB1dCAwIGludG8gcGFyYW1J\nbmRleA1yZXBlYXQgd2l0aCBpbmRleCA9IDIgdG8gbg1zZXQgY3Vyc29yIHRvIGJ1c3kN\ncHV0IGxpbmUgaW5kZXggb2YgeCBpbnRvIHkNcHV0IGl0ZW0gNCBvZiB5IGludG8gdGVt\ncA1wdXQgKHRlbXAgPiAzMjc2NykgaW50byBpc09wdGlvbmFsDXB1dCB0ZW1wIGRpdiA4\nMTkyIGludG8gdGVtcA1wdXQgKHRlbXAgbW9kIDIgPSAxKSBpbnRvIGlzRW51bQ1wdXQg\nIiIgaW50byBlbnVtZXJhdGVkDXB1dCAoaXRlbSAzIG9mIHkgPD4gIm51bGwiKSBpbnRv\nIHVzZUl0DWlmIHVzZUl0IHRoZW4NYWRkIDEgdG8gcGFyYW1JbmRleA0tLSBmb3IgcHJv\ndG8gc3RhdGVtZW50DWlmIGl0ZW0gMyBvZiB5ID0gInRydWUiIHRoZW4NcHV0ICJ0cnVl\nIiBpbnRvIHRoaXNQYXJhbQ1lbHNlIGlmIGluZGV4ID0gMSB0aGVuDXB1dCAiZGlyZWN0\nUGFyYW0iIGludG8gdGhpc1BhcmFtDWVsc2UNcHV0ICJwYXJhbSIgaW50byB0aGlzUGFy\nYW0NZW5kIGlmDWlmIHVzZUl0IHRoZW4NaWYgbXVsdGlMaW5lID0gIm11bHRpTGluZSIg\ndGhlbg1wdXQgY29udENoYXIgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgc3BhY2UgYWZ0\nZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgIlsiIGFmdGVy\nIHRlbXBsYXRlDWVuZCBpZg1pZiBpbmRleCA8PiAxIHRoZW4NcHV0IGl0ZW0gMSBvZiB5\nICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGlzRW51bSB0aGVuDXB1dCBF\nbnVtT3B0aW9uKGZpZWxkICJzdWl0ZUNvZGUiLGl0ZW0gMyBvZiB5LGVudW1lcmF0ZWQs\nMSkgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgdGhpc1BhcmFtIGFmdGVyIHRlbXBsYXRl\nDWVuZCBpZg1pZiBpc09wdGlvbmFsIHRoZW4NcHV0ICJdIiBhZnRlciB0ZW1wbGF0ZQ1l\nbmQgaWYNZW5kIGlmDWVuZCBpZiAtLSB1c2VJdA1lbmQgcmVwZWF0DXJldHVybiB0ZW1w\nbGF0ZQ1lbmQgQ2xpZW50VGVtcGxhdGUNDWZ1bmN0aW9uIENsaWVudFNhbXBsZSBjYXJk\nVHlwZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1yZXR1cm4gQ2xpZW50VGVtcGxh\ndGUoKSAmIHJldHVybiAmIHJldHVybg1lbHNlDXJldHVybiAiIg1lbmQgaWYNZW5kIENs\naWVudFNhbXBsZQ0NADHAAAYBAAESAAIBIwBXgAYAAAAAAAEAAAAMAAAAEEh5cGVyVGFs\nawAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gc2hvdyB0\naGUgZXZlbnQgYXMgaXQgaXMgY2FsbGVkIGZyb20gSHlwZXJUYWxrLiINZW5kIE1vdXNl\nV2l0aGluDQ1mdW5jdGlvbiBDbGllbnRUZW1wbGF0ZSBtdWx0aUxpbmUNZ2xvYmFsIGNs\naWVudEhhc0dsdWUNcHV0IHNwYWNlICYgTnVtVG9DaGFyKDE5NCkgJiByZXR1cm4gJiBz\ncGFjZSBpbnRvIGNvbnRDaGFyDXB1dCBmaWVsZCAicGFyYW1JbmZvIiBpbnRvIHgNcHV0\nIHF1b3RlICYgIi0tLS0iICYgcXVvdGUgaW50byBkYXNoDXB1dCAoaXRlbSAzIG9mIGxp\nbmUgMSBvZiB4IDw+ICJudWxsIikgaW50byBpc0Z1bmMNcHV0IDAgaW50byBwYXJhbUlu\nZGV4DXB1dCBudW1iZXIgb2YgbGluZXMgaW4geCBpbnRvIG4NaWYgY2xpZW50SGFzR2x1\nZSB0aGVuDS0tIGVpdGhlciByZXR1cm4gdGhlIHRlbXBsYXRlIG9yIHdoaWNoIHBhcmFt\nZXRlciBpcyBiZWluZyBjbGlja2VkDXB1dCAiQUUiICYgU3RyaXBTUChmaWVsZCAiZXZl\nbnROYW1lIikgaW50byB0ZW1wbGF0ZQ1pZiBpc0Z1bmMgdGhlbg1wdXQgIiAoIiBhZnRl\nciB0ZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNcHV0\nIHRydWUgaW50byBmaXJzdFRpbWUgLS0gbm8gY29tbWEgYmVmb3JlIGZpcnN0IHBhcmFt\nDXB1dCAxIGludG8gb3B0aW9uRW5kIC0tIHdlIGxvb3AgdHdpY2UsIG9uY2UgZm9yIHJl\ncXVpcmVkIG9uY2UgZm9yIG9wdGlvbmFsDXB1dCAxIGludG8gZW51bU9wdGlvbkluZGV4\nIC0tIHdlIHdhbnQgZnVsbCBuYW1lDWVsc2UgLS0gbm8gZ2x1ZQ1wdXQgIkFFU2VuZCIg\nJiYgcXVvdGUgJiBSZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikgwg0mIFJlc1R5cGUo\nZmllbGQgImV2ZW50SUQiKSAmIHF1b3RlICYgwg0iLCB0YXJnZXRQcm9ncmFtLCBzZW5k\nTW9kZSwgdGltZU91dFZhbHVlIiBpbnRvIHRlbXBsYXRlDXB1dCBmYWxzZSBpbnRvIGZp\ncnN0VGltZSAtLSBjb21tYSBiZWZvciBmaXJzdCBwYXJhbQ1wdXQgMCBpbnRvIG9wdGlv\nbkVuZCAgLS0gd2UganVzdCBsb29wIG9uY2UNcHV0IDIgaW50byBlbnVtT3B0aW9uSW5k\nZXggLS0gd2Ugd2FudCA0IGxldHRlciBjb2RlDWVuZCBpZg0tLSB3ZSBsb29wIHRocm91\nZ2ggaXQgdHdpY2UsIG9uIHRpbWUgZm9yIHJlcXVpcmVkLCBvbmUgZm9yIG9wdA1yZXBl\nYXQgd2l0aCBvcHRpb24gPSAwIHRvIG9wdGlvbkVuZA1wdXQgKG9wdGlvbiA9IDEpIGlu\ndG8gd2FudE9wdGlvbmFsDXJlcGVhdCB3aXRoIGluZGV4ID0gMiB0byBuDXNldCBjdXJz\nb3IgdG8gYnVzeQ1wdXQgbGluZSBpbmRleCBvZiB4IGludG8geQ1wdXQgaXRlbSA0IG9m\nIHkgaW50byB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRvIGlzT3B0aW9uYWwNaWYg\nKGlzT3B0aW9uYWwgPSB3YW50T3B0aW9uYWwpIG9yIChub3QgY2xpZW50SGFzR2x1ZSkg\ndGhlbg1wdXQgdGVtcCBkaXYgODE5MiBpbnRvIHRlbXANcHV0ICh0ZW1wIG1vZCAyID0g\nMSkgaW50byBpc0VudW0NcHV0ICIiIGludG8gZW51bWVyYXRlZA1wdXQgdHJ1ZSBpbnRv\nIHVzZUl0DWlmIGluZGV4ID0gMiB0aGVuDWlmIGl0ZW0gMyBvZiB5ID0gIm51bGwiIHRo\nZW4gcHV0IGZhbHNlIGludG8gdXNlSXQNcHV0ICJkaXJlY3RQYXJhbSIgaW50byBpdGVt\nIDEgb2YgeQ1wdXQgIi0tLS0iIGludG8gaXRlbSAyIG9mIHkNZW5kIGlmDWlmIHVzZUl0\nIHRoZW4NYWRkIDEgdG8gcGFyYW1JbmRleA1pZiB1c2VJdCB0aGVuDWlmIG11bHRpTGlu\nZSA9ICJtdWx0aUxpbmUiIHRoZW4NcHV0IGNvbnRDaGFyIGFmdGVyIHRlbXBsYXRlDWVs\nc2UNcHV0IHNwYWNlIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1pZiBpc09wdGlvbmFsIHRo\nZW4NcHV0ICJbIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNaWYgKGluZGV4IDw+IDIpIGFu\nZCAod2FudE9wdGlvbmFsIG9yIChOb3QgQ2xpZW50SGFzR2x1ZSkpIHRoZW4NaWYgZmly\nc3RUaW1lIHRoZW4NcHV0IGZhbHNlIGludG8gZmlyc3RUaW1lDWVsc2UNcHV0ICIsIiBh\nZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNaWYgY2xpZW50SGFzR2x1ZSB0aGVuDXB1dCBpdGVt\nIDEgb2YgeSBpbnRvIHRoaXNLZXkNZWxzZQ1wdXQgSFRLZXlXb3JkKHkpIGludG8gdGhp\nc0tleQ1lbmQgaWYNcHV0IHF1b3RlICYgdGhpc0tleSAmIHF1b3RlIGFmdGVyIHRlbXBs\nYXRlDWVuZCBpZg1pZiBmaXJzdFRpbWUgdGhlbg1wdXQgZmFsc2UgaW50byBmaXJzdFRp\nbWUNZWxzZQ1wdXQgIiwiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1pZiB3YW50T3B0aW9u\nYWwgb3IgKE5vdCBDbGllbnRIYXNHbHVlKSB0aGVuDWlmIGl0ZW0gMyBvZiB5ID0gInRy\ndWUiIHRoZW4NcHV0ICJ0cnVlIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlIGlmIGlzRW51bSB0\naGVuDXB1dCBFbnVtT3B0aW9uKGZpZWxkICJTdWl0ZUNvZGUiLGl0ZW0gMyBvZiB5LGVu\ndW1lcmF0ZWQsZW51bU9wdGlvbkluZGV4KSBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCAi\nc29tZSIgJiBpdGVtIDMgb2YgeSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZWxzZQ1pZiBp\nc0VudW0gdGhlbg1wdXQgRW51bU9wdGlvbihmaWVsZCAiU3VpdGVDb2RlIixpdGVtIDMg\nb2YgeSxlbnVtZXJhdGVkLGVudW1PcHRpb25JbmRleCkgYWZ0ZXIgdGVtcGxhdGUNZWxz\nZQ1wdXQgaXRlbSAxIG9mIHkgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZg1pZiBp\nc09wdGlvbmFsIHRoZW4NcHV0ICJdIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlm\nDWVuZCBpZiAtLSB1c2VpdA1lbmQgaWYgLS0gdGhlIHJpZ2h0IGtpbmQgb2Ygb3B0aW9u\nDWVuZCByZXBlYXQNZW5kIHJlcGVhdA1pZiBpc0Z1bmMgYW5kIGNsaWVudEhhc0dsdWUg\ndGhlbg1wdXQgIiApIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNcmV0dXJuIHRlbXBsYXRl\nDWVuZCBDbGllbnRUZW1wbGF0ZQ0NZnVuY3Rpb24gQ2xpZW50U2FtcGxlIGNhcmRUeXBl\nDWdsb2JhbCBjbGllbnRIYXNHbHVlLCBkZWZhdWx0VGFyZ2V0LCBkZWZhdWx0VGltZU91\ndA1pZiBjbGllbnRIYXNHbHVlIHRoZW4NZ2xvYmFsIG5hbWluZ0Zvcm1MaXN0LGVsZW1l\nbnRMaXN0LGNsYXNzTmFtZUxpc3QNcHV0ICIiIGludG8gcnN0DWlmIGNhcmRUeXBlID0g\nInN1aXRlIiB0aGVuDXB1dCAiIiBpbnRvIG5hbWluZ0Zvcm1MaXN0DXB1dCAiIiBpbnRv\nIGVsZW1lbnRMaXN0DXB1dCAiIiBpbnRvIGNsYXNzTmFtZUxpc3QNcHV0ICJlbnVtZXJh\ndGlvbiBmb3JtIiBpbnRvIHgNaWYgdGhlcmUgaXMgYSBjYXJkIHggdGhlbg1wdXQgZmll\nbGQgImVudW1JbmZvIiBvZiBjYXJkIHggaW50byBuYW1pbmdGb3JtTGlzdA1lbmQgaWYN\nZWxzZSBpZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1Ao\nZmllbGQgIkV2ZW50TmFtZSIpIGludG8gRXZlbnROYW1lDXB1dCAoaXRlbSAzIG9mIGZp\nZWxkICJwYXJhbUluZm8iIDw+ICJudWxsIikgaW50byBpc0Z1bmMNaWYgaXNGdW5jIHRo\nZW4NcHV0ICJGdW5jdGlvbiIgaW50byBoZWFkZXINZWxzZQ1wdXQgIk9uIiBpbnRvIGhl\nYWRlcg1lbmQgaWYNcHV0IHNwYWNlICYgRXZlbnROYW1lIGFmdGVyIGhlYWRlcg1wdXQg\nc3BhY2UgJiBOdW1Ub0NoYXIoMTk0KSAmIHJldHVybiBpbnRvIGNvbnQNcHV0ICIgIHB1\ndCAiICYgcXVvdGUgJiAiQUVTZW5kICIgJiBxdW90ZSAmICIgJiBxdW90ZSAmICIgJiBx\ndW90ZSAmIFJlc1R5cGUoZmllbGQgImV2ZW50Q2xhc3MiKSAmIFJlc1R5cGUoZmllbGQg\nImV2ZW50SUQiKSAmIHF1b3RlICYgIiAmIHF1b3RlICYgIiAmIHF1b3RlICYgIiwiICYg\ncXVvdGUgJiBjb250IGFmdGVyIHNlbmRIZWFkZXINcHV0ICIgICYgcXVvdGUgJiAiICYg\ncXVvdGUgJiBkZWZhdWx0VGFyZ2V0ICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiICYgcXVv\ndGUgJiAiLCIgJiBxdW90ZSAmIGNvbnQgYWZ0ZXIgc2VuZEhlYWRlcg1wdXQgIiAgJiAi\nICYgcXVvdGUgYWZ0ZXIgc2VuZEhlYWRlcg1wdXQgIiAgQUVTZW5kICIgJiBxdW90ZSAm\nIFJlc1R5cGUoZmllbGQgImV2ZW50Q2xhc3MiKSAmIFJlc1R5cGUoZmllbGQgImV2ZW50\nSUQiKSAmIHF1b3RlICYgIiwiIMINJiBxdW90ZSAmIGRlZmF1bHRUYXJnZXQgJiBxdW90\nZSAmICIsIiBpbnRvIHNob3J0SGVhZGVyDWlmIGlzRnVuYyB0aGVuDXB1dCAiMywiIGFm\ndGVyIHNlbmRIZWFkZXINcHV0ICIzLCIgYWZ0ZXIgc2hvcnRIZWFkZXINZWxzZQ1wdXQg\nIjEsIiBhZnRlciBzZW5kSGVhZGVyDXB1dCAiMSwiIGFmdGVyIHNob3J0SGVhZGVyDWVu\nZCBpZg1wdXQgZGVmYXVsdFRpbWVPdXQgJiBxdW90ZSBhZnRlciBzZW5kSGVhZGVyDXB1\ndCBkZWZhdWx0VGltZU91dCBhZnRlciBzaG9ydEhlYWRlcg1wdXQgbGluZSAyIG9mIGZp\nZWxkICJwYXJhbUluZm8iIGludG8geA1wdXQgKGl0ZW0gMyBvZiB4IDw+ICJudWxsIikg\naW50byBoYXNEaXJlY3QNcHV0IChpdGVtIDQgb2YgeCA+IDMyNzY3KSBpbnRvIGRpcmVj\ndE9wdGlvbmFsDXB1dCAxIGludG8gcGFyYW1JbmRleA1wdXQgZmFsc2UgaW50byBoYXNP\ncHRpb25hbA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkICJwYXJhbUluZm8iIGlu\ndG8gY291bnQNcmVwZWF0IHdpdGggaW5kZXggPSAyIHRvIGNvdW50DXB1dCBsaW5lIGlu\nZGV4IG9mIGZpZWxkICJwYXJhbUluZm8iIGludG8geA1wdXQgaXRlbSA0IG9mIHggaW50\nbyB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRvIGlzT3B0aW9uYWwNaWYgaXRlbSAz\nIG9mIHggPD4gIm51bGwiIHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDWlmIGluZGV4IDw+\nIDIgdGhlbg1wdXQgdHJ1ZSBpbnRvIGhhc09wdGlvbmFsDWVuZCBpZg1lbHNlDXB1dCB0\nZW1wIGRpdiA4MTkyIGludG8gdGVtcA1wdXQgKHRlbXAgbW9kIDIpID0gMSBpbnRvIGlz\nRW51bQ1pZiBpbmRleCA9IDIgdGhlbg0tLSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGRp\ncmVjdCBwYXJhbWV0ZXINaWYgcGFyYW1JbmRleCA9IDEgdGhlbg1wdXQgIiAiIGFmdGVy\nIGhlYWRlcg1lbHNlDXB1dCAiLCIgYWZ0ZXIgaGVhZGVyDWVuZCBpZg1wdXQgImRpcmVj\ndFBhcmFtIiBhZnRlciBoZWFkZXINcHV0ICItLS0tIiBpbnRvIGl0ZW0gMiBvZiB4DXB1\ndCBIVEtleVdvcmQoeCkgaW50byB0aGlzVHlwZQ1pZiBsZW5ndGgodGhpc1R5cGUpID4g\nNCB0aGVuDS0tIHdlIG5lZWQgYSBrZXl3b3JkIGZvciBkaXJlY3RQYXJhbSBiZWNhdXNl\nIHRoZXJlIGlzIGEgdHlwZQ1wdXQgIiAmICIgJiBxdW90ZSAmICIsIiAmIHF1b3RlICYg\nIiAmIHF1b3RlICYgIiAmIHF1b3RlICYgdGhpc1R5cGUgJiBxdW90ZSAmICIgJiBxdW90\nZSAiIGFmdGVyIHNlbmRIZWFkZXINcHV0ICIsIiAmIHF1b3RlICYgdGhpc1R5cGUgJiBx\ndW90ZSBhZnRlciBzaG9ydEhlYWRlcg1pZiBjaGFyIDUgdG8gOCBvZiB0aGlzVHlwZSA9\nICJlbnVtIiB0aGVuDXB1dCBFbnVtTGluZXMoMSxpdGVtIDMgb2YgeCwgImRpcmVjdFBh\ncmFtIiwgdHJ1ZSkgYWZ0ZXIgcnN0DWVuZCBpZg1lbmQgaWYNcHV0ICIgJiAiICYgcXVv\ndGUgJiAiLGRpcmVjdFBhcmFtIiAmIHF1b3RlIGFmdGVyIHNlbmRIZWFkZXINcHV0ICIs\nZGlyZWN0UGFyYW0iIGFmdGVyIHNob3J0SGVhZGVyDWFkZCAxIHRvIHBhcmFtSW5kZXgN\nZWxzZQ1wdXQgU3RyaXBTUChpdGVtIDEgb2YgeCkgaW50byB0ZW1wDWlmIHBhcmFtSW5k\nZXggPSAxIHRoZW4NcHV0ICIgIiBhZnRlciBoZWFkZXINZWxzZQ1wdXQgIiwiIGFmdGVy\nIGhlYWRlcg1lbmQgaWYNcHV0IHRlbXAgYWZ0ZXIgaGVhZGVyDS0tIHB1dCBpbiB0aGUg\na2V5d29yZA1wdXQgSFRLZXlXb3JkKHgpIGludG8gdGhpc1R5cGUNcHV0ICIgJiAiICYg\ncXVvdGUgJiAiLCIgJiBxdW90ZSAmICIgJiBxdW90ZSAmICIgJiBxdW90ZSAmIHRoaXNU\neXBlICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiLCIgJiB0ZW1wICYg\ncXVvdGUgYWZ0ZXIgc2VuZEhlYWRlcg1wdXQgIiwiICYgcXVvdGUgJiB0aGlzVHlwZSAm\nIHF1b3RlICYgIiwiICYgdGVtcCBhZnRlciBzaG9ydEhlYWRlcg1pZiBjaGFyIDUgdG8g\nOCBvZiB0aGlzVHlwZSA9ICJlbnVtIiB0aGVuDXB1dCBFbnVtTGluZXMoMSxpdGVtIDMg\nb2YgeCwgdGVtcCwgdHJ1ZSkgYWZ0ZXIgcnN0DWVuZCBpZg1hZGQgMSB0byBwYXJhbUlu\nZGV4DWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQgLS0gMiB0byBuDWlmICho\nYXNPcHRpb25hbCkgb3IgKGhhc0RpcmVjdCBhbmQgZGlyZWN0T3B0aW9uYWwpIHRoZW4g\nLS0gbm90IGFsbCBwYXJhbSBhcmUgcmVxdWlyZWQNcHV0IGhlYWRlciAmIHJldHVybiAm\nIHNlbmRIZWFkZXIgJiAiIGFmdGVyIHN0bXQiICYgcmV0dXJuIGJlZm9yZSByc3QNaWYg\naGFzRGlyZWN0IGFuZCBkaXJlY3RPcHRpb25hbCB0aGVuDXB1dCAiICBwdXQgIiAmIHBh\ncmFtSW5kZXggJiAiIGludG8gaSIgJiByZXR1cm4gYWZ0ZXIgcnN0DS0tIHdlIGhhdmUg\nYSBvcHRpb25hbCBkaXJlY3QgcGFyYW1ldGVyDXB1dCAiICBpZiAodGhlIFBhcmFtQ291\nbnQiIGFmdGVyIHJzdA1pZiBwYXJhbUluZGV4ID4gMSB0aGVuIHB1dCBzcGFjZSAmICIt\nICIgJiBwYXJhbUluZGV4LTEgYWZ0ZXIgcnN0DXB1dCAiKSBtb2QgMiA9IDEgdGhlbiIg\nJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBsaW5lIDIgb2YgZmllbGQgInBhcmFtSW5mbyIg\naW50byB4DXB1dCAiLS0tLSIgaW50byBpdGVtIDIgb2YgeA1wdXQgSFRLZXlXb3JkKHgp\nIGludG8gdGhpc1R5cGUNcHV0IGZhbHNlIGludG8gcGFyYW1Jc1VwIC0tIHdlIGhhdmUg\nbm90IHB1dCBQYXJhbSB1cCB5ZXQNaWYgKHBhcmFtSW5kZXggPiAxKSBvciAobGVuZ3Ro\nKHRoaXNUeXBlKSA+IDQpIHRoZW4NLS0gd2UgaGF2ZSB0byBmYWtlIGEga2V5d29yZA1w\ndXQgIiAgICBwdXQgIiAmIHF1b3RlICYgIiwiICYgcXVvdGUgJiAiICYgcXVvdGUgJiAi\nICYgcXVvdGUgJiB0aGlzVHlwZSAmIHF1b3RlICYgIiAmIHF1b3RlIGFmdGVyIHN0bXQi\nICYgcmV0dXJuIGFmdGVyIHJzdA1pZiBjaGFyIDUgdG8gOCBvZiB0aGlzVHlwZSA9ICJl\nbnVtIiB0aGVuDXB1dCBFbnVtTGluZXMoMiwgaXRlbSAzIG9mIHgsICJQYXJhbShpKSIs\nIGZhbHNlKSBpbnRvIHRlbXANaWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAiICAgIHB1dCAi\nICYgcXVvdGUgJiAiLCIgJiBxdW90ZSAmICIgYWZ0ZXIgc3RtdCIgJiByZXR1cm4gYWZ0\nZXIgcnN0DXB1dCAiICAgIGVsc2UiIGludG8gbGFzdCBsaW5lIG9mIHRlbXANcHV0ICIg\nICAgICBwdXQgIiAmIHF1b3RlICYgIlBhcmFtKCIgJiBxdW90ZSAmICIgJiBpICYgIiAm\nIHF1b3RlICYgIikiICYgcXVvdGUgJiAiIGFmdGVyIHN0bXQiICYgcmV0dXJuIGFmdGVy\nIHRlbXANcHV0ICIgICAgZW5kIGlmIiAmIHJldHVybiBhZnRlciB0ZW1wDXB1dCB0ZW1w\nIGFmdGVyIHJzdA1wdXQgdHJ1ZSBpbnRvIHBhcmFtSXNVcCAtLSBub3cgd2UgaGF2ZSBw\ndXQgUGFyYW0gdXANZW5kIGlmDWVuZCBpZg1lbmQgaWYNaWYgbm90IHBhcmFtSXNVcCB0\naGVuDXB1dCAiICAgIHB1dCAiICYgcXVvdGUgJiAiLFBhcmFtKCIgJiBxdW90ZSAmICIg\nJiBpICYgIiAmIHF1b3RlICYgIikiICYgcXVvdGUgJiAiIGFmdGVyIHN0bXQiICYgcmV0\ndXJuIGFmdGVyIHJzdA1lbmQgaWYNaWYgaGFzT3B0aW9uYWwgdGhlbg0tLSBpbmNyZW1l\nbnQgaSBpZiB3ZSBuZWVkIGl0IGxhdGVyDXB1dCAiICAgIGFkZCAxIHRvIGkiICYgcmV0\ndXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0ICIgIGVuZCBpZiIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DWVsc2UgaWYgaGFzT3B0aW9uYWwgdGhlbg1wdXQgIiAgcHV0ICIgJiBwYXJhbUlu\nZGV4ICYgIiBpbnRvIGkiICYgcmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0IHRydWUg\naW50byBmaXJzdE9wdGlvbmFsDWlmIGhhc09wdGlvbmFsIHRoZW4NcHV0ICIgIHJlcGVh\ndCB1bnRpbCBpID4gdGhlIFBhcmFtQ291bnQiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQg\nIiAgICBwdXQgcGFyYW0oaSkgaW50byB4IiAmIHJldHVybiBhZnRlciByc3QNcHV0ICIg\nICAgcHV0ICIgJiBxdW90ZSAmICIsIiAmIHF1b3RlICYgIiBhZnRlciBzdG10IiAmIHJl\ndHVybiBhZnRlciByc3QNcHV0IGZhbHNlIGludG8gaGFzRW51bQ1yZXBlYXQgd2l0aCBp\nID0gMyB0byBjb3VudA1wdXQgbGluZSBpIG9mIGZpZWxkICJwYXJhbUluZm8iIGludG8g\neA1wdXQgaXRlbSA0IG9mIHggaW50byB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRv\nIGlzT3B0aW9uYWwNaWYgaXNPcHRpb25hbCB0aGVuDWlmIGZpcnN0T3B0aW9uYWwgdGhl\nbg1wdXQgIiAgICAiIGFmdGVyIHJzdA1wdXQgZmFsc2UgaW50byBmaXJzdE9wdGlvbmFs\nDWVsc2UNcHV0ICIgICAgZWxzZSAiIGFmdGVyIHJzdA1lbmQgaWYNcHV0IEhUS2V5V29y\nZCh4KSBpbnRvIHRoaXNLZXkNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0\nIFN0cmlwU1AodGhpc05hbWUpIGludG8gbm9TcE5hbWUNcHV0IChjaGFyIDUgdG8gOCBv\nZiB0aGlzS2V5ID0gImVudW0iKSBpbnRvIGlzRW51bQ1wdXQgImlmIHggPSAiICYgcXVv\ndGUgJiB0aGlzTmFtZSAmIHF1b3RlIGFmdGVyIHJzdA1pZiB0aGlzTmFtZSA8PiBub1Nw\nTmFtZSB0aGVuDXB1dCAiIG9yIHggPSAiICYgcXVvdGUgJiBub1NwTmFtZSAmIHF1b3Rl\nIGFmdGVyIHJzdA1lbmQgaWYNaWYgaXNFbnVtIGFuZCAoaXRlbSAyIG9mIHggPD4gbm9T\ncE5hbWUpIHRoZW4NcHV0ICIgb3IgeCA9ICIgJiBxdW90ZSAmIGl0ZW0gMiBvZiB4ICYg\ncXVvdGUgYWZ0ZXIgcnN0DWVuZCBpZg1wdXQgIiB0aGVuIiAmIHJldHVybiBhZnRlciBy\nc3QNcHV0ICIgICAgICBwdXQgcXVvdGUgJiAiICYgcXVvdGUgJiB0aGlzS2V5ICYgcXVv\ndGUgJiAiICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiLCIgJiBxdW90ZSAmICIgYWZ0ZXIg\nc3RtdCIgJiByZXR1cm4gYWZ0ZXIgcnN0DWlmIGlzRW51bSB0aGVuDXB1dCB0cnVlIGlu\ndG8gaGFzRW51bQ1wdXQgRW51bUxpbmVzKDMsIGl0ZW0gMyBvZiB4LCAieCIsIGZhbHNl\nKSBpbnRvIHRlbXANaWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAiICAgICAgcHV0IHBhcmFt\nKGkrMSkgaW50byB4IiAmIHJldHVybiBhZnRlciByc3QNcHV0IHRlbXAgYWZ0ZXIgcnN0\nDWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQNcHV0ICIgICAgZWxzZSIgJiBy\nZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICAgICAgcHV0ICIgJiBxdW90ZSAmICJQYXJhbSgi\nICYgcXVvdGUgJiAiICYgaSAmICIgJiBxdW90ZSAmICIpLCIgJiBxdW90ZSAmICIgYWZ0\nZXIgc3RtdCIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICAgIGVuZCBpZiIgJiByZXR1\ncm4gYWZ0ZXIgcnN0DWlmIGhhc0VudW0gdGhlbg1wdXQgIiAgICBpZiBsYXN0IGNoYXIg\nb2Ygc3RtdCA9ICIgJiBxdW90ZSAmICIsIiAmIHF1b3RlICYgIiB0aGVuIiAmIHJldHVy\nbiBhZnRlciByc3QNcHV0ICIgICAgICBwdXQgIiAmIHF1b3RlICYgIlBhcmFtKCIgJiBx\ndW90ZSAmICIgJiBpKzEgJiAiICYgcXVvdGUgJiAiKSIgJiBxdW90ZSAmICIgYWZ0ZXIg\nc3RtdCIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICAgIGVuZCBpZiIgJiByZXR1cm4g\nYWZ0ZXIgcnN0DWVsc2UNcHV0ICIgICAgcHV0ICIgJiBxdW90ZSAmICJQYXJhbSgiICYg\ncXVvdGUgJiAiICYgaSsxICYgIiAmIHF1b3RlICYgIikiICYgcXVvdGUgJiAiIGFmdGVy\nIHN0bXQiICYgcmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0ICIgICAgYWRkIDIgdG8g\naSIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICBlbmQgcmVwZWF0IiAmIHJldHVybiBh\nZnRlciByc3QNZW5kIGlmDXB1dCAiICBkbyBzdG10IiAmIHJldHVybiBhZnRlciByc3QN\nZWxzZSAtLSBhbGwgYXJlIHJlcXVpcmVkDXB1dCBoZWFkZXIgJiByZXR1cm4gYmVmb3Jl\nIHJzdA1wdXQgc2hvcnRIZWFkZXIgJiByZXR1cm4gYWZ0ZXIgcnN0DWVuZCBpZg1pZiBp\nc0Z1bmMgdGhlbg1wdXQgIiAgcmV0dXJuIGl0IiAmIHJldHVybiBhZnRlciByc3QNZW5k\nIGlmDXB1dCAiRW5kICIgJiBFdmVudE5hbWUgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIg\ncnN0DXJldHVybiByc3QNZWxzZSBpZiBjYXJkVHlwZSA9ICJjbGFzcyIgdGhlbg1wdXQg\nZmllbGQgY2xhc3NJRCAmICIsIiAmIGZpZWxkICJjbGFzc05hbWUiICYgcmV0dXJuIGFm\ndGVyIGNsYXNzTmFtZUxpc3QNcHV0IGZpZWxkICJlbGVtZW50cyIgaW50byB4DXB1dCBu\ndW1iZXIgb2YgbGluZXMgaW4geCBpbnRvIGVsZW1lbnRDb3VudA0tLSB3ZSB3YW50IGEg\ndW5pcXVlIGxpc3Qgb2YgY2xhc3MgLSBpbmRleCBmb3JtIHBhaXINcmVwZWF0IHdpdGgg\nZWxlbWVudEluZGV4ID0gMSB0byBlbGVtZW50Q291bnQNcHV0IGxpbmUgZWxlbWVudElu\nZGV4IG9mIHggaW50byB0aGlzTGluZQ1wdXQgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXNM\naW5lIGludG8gaUNvdW50DXJlcGVhdCB3aXRoIGkgPSAyIHRvIGlDb3VudA1wdXQgaXRl\nbSAxIG9mIHRoaXNMaW5lICYgIiwiICYgaXRlbSBpIG9mIHRoaXNMaW5lIGludG8gdGhp\nc0Zvcm0NcHV0IG51bWJlciBvZiBsaW5lcyBpbiBlbGVtZW50TGlzdCBpbnRvIGpDb3Vu\ndA1yZXBlYXQgd2l0aCBqID0gMSB0byBqQ291bnQNaWYgdGhpc0Zvcm0gPSBsaW5lIGog\nb2YgZWxlbWVudExpc3QgdGhlbg1kZWxldGUgbGluZSBqIG9mIGVsZW1lbnRMaXN0DWVu\nZCBpZg1lbmQgcmVwZWF0DXB1dCB0aGlzRm9ybSAmIHJldHVybiBhZnRlciBlbGVtZW50\nTGlzdA1lbmQgcmVwZWF0DWVuZCByZXBlYXQNcmV0dXJuICIiDWVsc2UgaWYgY2FyZFR5\ncGUgPSAic3VpdGVFbmQiIHRoZW4NLS0gd2UgY3JlYXRlIHRoZSBnbHVlIHJvdXRpbmUg\nZm9yIHRoZSBvYmplY3Qgc3BlY2lmaWVycw1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGVs\nZW1lbnRMaXN0IGludG8gZWxlbWVudENvdW50DXB1dCBudW1iZXIgb2YgbGluZXMgaW4g\nbmFtaW5nRm9ybUxpc3QgaW50byBuYW1lQ291bnQNcHV0IG51bWJlciBvZiBsaW5lcyBp\nbiBjbGFzc05hbWVMaXN0IGludG8gY2xhc3NDb3VudA1yZXBlYXQgd2l0aCBpID0gMSB0\nbyBlbGVtZW50Q291bnQNcHV0IGxpbmUgaSBvZiBlbGVtZW50TGlzdCBpbnRvIHgNcHV0\nIGl0ZW0gMSBvZiB4IGludG8gY2xhc3NJRA1wdXQgaXRlbSAyIG9mIHggaW50byBuYW1l\nRm9ybQ0tLSB3ZSBsb29rIGZvciB0aGUgbmFtaW5nIGZvcm0gbmFtZQ1yZXBlYXQgd2l0\naCBqID0gMSB0byBuYW1lQ291bnQNaWYgbmFtZUZvcm0gPSBpdGVtIDIgb2YgbGluZSBq\nIG9mIG5hbWluZ0Zvcm1MaXN0IHRoZW4NLS0gd2UgbG9vayBmb3IgdGhlIGNsYXNzIG5h\nbWUNcmVwZWF0IHdpdGggayA9IDEgdG8gY2xhc3NDb3VudA1pZiBjbGFzc0lEID0gaXRl\nbSAxIG9mIGxpbmUgayBvZiBjbGFzc05hbWVMaXN0IHRoZW4NcHV0IGl0ZW0gMiBvZiBs\naW5lIGsgb2YgY2xhc3NOYW1lTGlzdCAmIGl0ZW0gMSBvZiBsaW5lIGogb2YgbmFtaW5n\nRm9ybUxpc3QgaW50byB0aGlzTmFtZQ1wdXQgImZ1bmN0aW9uICIgJiB0aGlzTmFtZSAm\nICIsZGF0YSxjb250YWluZXIiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgIiAgcmV0dXJu\nIE9ialNwZWMgKCIgJiBxdW90ZSAmIFJlc1R5cGUoaXRlbSAxIG9mIHgpICYgcXVvdGUg\nJiAiLCAiIGFmdGVyIHJzdA1wdXQgcXVvdGUgJiBSZXNUeXBlKGl0ZW0gMiBvZiBsaW5l\nIGogb2YgbmFtaW5nRm9ybUxpc3QpICYgcXVvdGUgJiAiLCBkYXRhLCBjb250YWluZXIp\nIiAmIHJldHVybiBhZnRlciByc3QNcHV0ICJlbmQgIiAmIHRoaXNOYW1lICYgcmV0dXJu\nICYgcmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNZW5kIHJlcGVhdA1lbmQgaWYNZW5kIHJl\ncGVhdA1lbmQgcmVwZWF0DXJldHVybiByc3QNZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVs\nc2UNaWYgY2FyZFR5cGUgPSAiZXZlbnQiIHRoZW4NcmV0dXJuIENsaWVudFRlbXBsYXRl\nKCkgJiByZXR1cm4gJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVuZCBpZg1l\nbmQgQ2xpZW50U2FtcGxlDQ1mdW5jdGlvbiBFbnVtTGluZXMgaW5kZW50LCBlbnVtQ29k\nZSwgdmFyTmFtZSwgd3JpdGVUb1Zhcg1yZXBlYXQgaW5kZW50IHRpbWVzDXB1dCAiICAi\nIGFmdGVyIGluZGVudFNwYWNlDWVuZCByZXBlYXQNcHV0ICIiIGludG8gcnN0DXB1dCAi\nZW51bWVyYXRpb24iICYmIGVudW1Db2RlIGludG8geA1pZiB0aGVyZSBpcyBhIGNhcmQg\neCB0aGVuDXB1dCBmaWVsZCAiZW51bUluZm8iIG9mIGNhcmQgeCBpbnRvIHgNcHV0IG51\nbWJlciBvZiBsaW5lcyBpbiB4IGludG8gbg1pZiBuID4gMCB0aGVuDS0tIG5vdyB3ZSBn\nbyB0aHJvdWdoIHRoZSBlbnVtIGxpc3QgYW5kIGNoZWNrIGVhY2ggb25lDXJlcGVhdCB3\naXRoIGkgPSAxIHRvIG4NaWYgaSA9IDEgdGhlbg1wdXQgaW5kZW50U3BhY2UgJiAiaWYi\nIGFmdGVyIHJzdA1lbHNlDXB1dCBpbmRlbnRTcGFjZSAmICJlbHNlIGlmIiBhZnRlciBy\nc3QNZW5kIGlmDXB1dCBzcGFjZSAmIHZhck5hbWUgJiAiID0gIiAmIHF1b3RlICYgaXRl\nbSAxIG9mIGxpbmUgaSBvZiB4ICYgcXVvdGUgJiAiIHRoZW4iICYgcmV0dXJuIGFmdGVy\nIHJzdA1pZiB3cml0ZVRvVmFyIHRoZW4NcHV0IGluZGVudFNwYWNlICYgIiAgcHV0ICIg\nJiBxdW90ZSAmIFJlc1R5cGUoaXRlbSAyIG9mIGxpbmUgaSBvZiB4KSAmIHF1b3RlICYg\nIiBpbnRvICIgJiB2YXJOYW1lICYgcmV0dXJuIGFmdGVyIHJzdA1lbHNlDXB1dCBpbmRl\nbnRTcGFjZSAmICIgIHB1dCBxdW90ZSAmICIgJiBxdW90ZSAmIFJlc1R5cGUoaXRlbSAy\nIG9mIGxpbmUgaSBvZiB4KSAmIHF1b3RlICYgIiAmIHF1b3RlIGFmdGVyIHN0bXQiICYg\ncmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNZW5kIHJlcGVhdA1wdXQgaW5kZW50U3BhY2Ug\nJiAiZW5kIGlmIiAmIHJldHVybiBhZnRlciByc3QNZW5kIGlmIC0tIGlmIG4gPiAwDWVu\nZCBpZiAtLSBpZiBjYXJkIGV4aXN0cw1yZXR1cm4gcnN0DWVuZCBFbnVtTGluZXMNDQAL\n8AAHAQABIwACATMAWoAGAAAAAAABAAAADAAAABBNUFcgU2hlbGwAAG9uIE1vdXNlV2l0\naGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIHNob3cgdGhlIGV2ZW50IGFzIGl0\nIGlzIGNhbGxlZCBmcm9tIHRoZSBNUFcgU2hlbGwgTGFuZ3VhZ2UgdXNpbmcgdGhlIFNl\nbmRBRSBjb21tYW5kLiINZW5kIE1vdXNlV2l0aGluDQ1mdW5jdGlvbiBDbGllbnRUZW1w\nbGF0ZSBtdWx0aUxpbmUNZ2xvYmFsIGNsaWVudEhhc0dsdWUNcHV0IHNwYWNlICYgTnVt\nVG9DaGFyKDE5NCkgJiByZXR1cm4gJiBzcGFjZSBpbnRvIGNvbnRDaGFyDWlmIGNsaWVu\ndEhhc0dsdWUgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1AoZmllbGQgImV2ZW50TmFtZSIp\nIGludG8gdGVtcGxhdGUNZWxzZQ1wdXQgInNlbmRBRSAtZSAnIiAmIFJlc1R5cGUoZmll\nbGQgImV2ZW50Q2xhc3MiKSAmIFJlc1R5cGUoZmllbGQgImV2ZW50SUQiKSAmICInIiBp\nbnRvIHRlbXBsYXRlDWVuZCBpZg1wdXQgZmllbGQgInBhcmFtSW5mbyIgaW50byB4DS0t\nIGlmIGlzIGZ1bmN0aW9uIHRoZW4gV2FpdFJlcGx5IGVsc2Ugbm9SZXBseQ1pZiBpdGVt\nIDMgb2YgbGluZSAxIG9mIHggPSAibnVsbCIgdGhlbg1wdXQgIiAtbSAxIiBhZnRlciB0\nZW1wbGF0ZQ1lbHNlDXB1dCAiIC1tIDMiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1wdXQg\nbnVtYmVyIG9mIGxpbmVzIGluIHggaW50byBuDXB1dCAwIGludG8gcGFyYW1JbmRleA1y\nZXBlYXQgd2l0aCBpbmRleCA9IDIgdG8gbg1zZXQgY3Vyc29yIHRvIGJ1c3kNcHV0IGxp\nbmUgaW5kZXggb2YgeCBpbnRvIHkNcHV0IGl0ZW0gNCBvZiB5IGludG8gdGVtcA1wdXQg\nKHRlbXAgPiAzMjc2NykgaW50byBpc09wdGlvbmFsDXB1dCB0ZW1wIGRpdiA4MTkyIGlu\ndG8gdGVtcA1wdXQgKHRlbXAgbW9kIDIgPSAxKSBpbnRvIGlzRW51bQ1wdXQgIiIgaW50\nbyBlbnVtZXJhdGVkDXB1dCB0cnVlIGludG8gdXNlSXQNaWYgaW5kZXggPSAyIHRoZW4N\naWYgaXRlbSAzIG9mIHkgPSAibnVsbCIgdGhlbiBwdXQgZmFsc2UgaW50byB1c2VJdA1w\ndXQgZGlyZWN0UGFyYW0gaW50byBpdGVtIDEgb2YgeQ1pZiAobm90IGNsaWVudEhhc0ds\ndWUgb3IgaXNPcHRpb25hbCkgdGhlbg1wdXQgIi0tLS0iIGludG8gaXRlbSAyIG9mIHkN\nZW5kIGlmDWVuZCBpZg1pZiB1c2VJdCB0aGVuDWFkZCAxIHRvIHBhcmFtSW5kZXgNaWYg\ndXNlSXQgdGhlbg1pZiBtdWx0aUxpbmUgPSAibXVsdGlMaW5lIiB0aGVuDXB1dCBjb250\nQ2hhciBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1l\nbmQgaWYNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCAiWyIgYWZ0ZXIgdGVtcGxhdGUNZW5k\nIGlmDWlmIGlzRW51bSB0aGVuDXB1dCBNUFdLZXkoaXRlbSAyIG9mIHksImVudW0iKSBh\nZnRlciB0ZW1wbGF0ZQ1wdXQgc3BhY2UgJiBFbnVtT3B0aW9uKGZpZWxkICJTdWl0ZUNv\nZGUiLGl0ZW0gMyBvZiB5LGVudW1lcmF0ZWQsMikgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1w\ndXQgTVBXS2V5KGl0ZW0gMiBvZiB5LGl0ZW0gMyBvZiB5KSBhZnRlciB0ZW1wbGF0ZQ1w\ndXQgc3BhY2UgJiBTdHJpcFNQKGl0ZW0gMSBvZiB5KSBhZnRlciB0ZW1wbGF0ZQ1lbmQg\naWYNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCAiXSIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlm\nDWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA1yZXR1cm4gdGVtcGxhdGUNZW5kIENsaWVu\ndFRlbXBsYXRlDQ1mdW5jdGlvbiBNUFdLZXkga2V5LGRhdGFUeXBlDWlmIGtleSA9ICIi\nIHRoZW4NcmV0dXJuICIiDWVsc2UNcHV0IFJlc1R5cGUoa2V5KSBpbnRvIHgNaWYgKGRh\ndGFUeXBlIDw+ICJsaXN0IikgYW5kIChkYXRhVHlwZSA8PiAib2JqIikgdGhlbg1wdXQg\nUmVzVHlwZShkYXRhVHlwZSkgYWZ0ZXIgeA1lbmQgaWYNaWYgb2Zmc2V0KHNwYWNlLCB4\nKSA+IDAgdGhlbg1wdXQgIiciICYgeCAmICInIiBpbnRvIHgNZW5kIGlmDXJldHVybiAi\nLSIgJiB4DWVuZCBpZg1lbmQgTVBXS2V5DQ1mdW5jdGlvbiBDbGllbnRTYW1wbGUgY2Fy\nZFR5cGUNZ2xvYmFsIGNsaWVudEhhc0dsdWUNaWYgY2xpZW50SGFzR2x1ZSBhbmQgKGNh\ncmRUeXBlID0gImV2ZW50IikgdGhlbg1wdXQgImFsaWFzIEFFIiAmIFN0cmlwU1AoZmll\nbGQgImV2ZW50TmFtZSIpIMINJiYgIlNlbmRBRSAtZSAnIiAmIFJlc1R5cGUoZmllbGQg\nImV2ZW50Q2xhc3MiKSDCDSYgUmVzVHlwZSAoZmllbGQgImV2ZW50SUQiKSAmICInIiBp\nbnRvIHJzdA1nZXQgY2FyZCBmaWVsZCAic2VuZFRhcmdldCIgb2YgY2FyZCAiUHJlZmVy\nZW5jZSINaWYgaXQgPD4gIiIgdGhlbg1wdXQgIiAtdCAnIiAmIGl0ICYgIiciIGFmdGVy\nIHJzdA1lbmQgaWYNaWYgKGl0ZW0gMyBvZiBmaWVsZCAicGFyYW1JbmZvIiA8PiAibnVs\nbCIpIHRoZW4NcHV0ICIgLW0gMyIgYWZ0ZXIgcnN0DWVsc2UNcHV0ICIgLW0gMSIgYWZ0\nZXIgcnN0DWVuZCBpZg1wdXQgbGluZSAyIG9mIGZpZWxkICJwYXJhbUluZm8iIGludG8g\neQ1wdXQgaXRlbSA0IG9mIHkgaW50byB0ZW1wDWlmICh0ZW1wIDw9IDMyNzY3KSBhbmQg\nKGl0ZW0gMyBvZiB5IDw+ICJudWxsIikgdGhlbg0tLSB3ZSBoYXZlIGEgcmVxdWlyZWQg\nZGlyZWN0IHBhcmFtZXRlcg1wdXQgdGVtcCBkaXYgODE5MiBpbnRvIHRlbXANaWYgKHRl\nbXAgbW9kIDIgPSAxKSB0aGVuDXB1dCAiZW51bSIgaW50byB0aGlzVHlwZQ1lbHNlDXB1\ndCBSZXNUeXBlKGl0ZW0gMyBvZiB5KSBpbnRvIHRoaXNUeXBlDWVuZCBpZg1pZiAodGhp\nc1R5cGUgPSAib2JqICIpIG9yICh0aGlzVHlwZSA9ICJsaXN0IikgdGhlbg1wdXQgIiAt\nLS0tLSIgYWZ0ZXIgcnN0DWVsc2UgaWYgY2hhciA0IG9mIHRoaXNUeXBlID0gc3BhY2Ug\ndGhlbg1wdXQgIiAtLS0tLSciICYgdGhpc1R5cGUgJiAiJyIgYWZ0ZXIgcnN0DWVsc2UN\ncHV0ICIgLS0tLS0iICYgdGhpc1R5cGUgYWZ0ZXIgcnN0DWVuZCBpZg1lbmQgaWYNcmV0\ndXJuIHJzdCAmIHJldHVybiAmIHJldHVybg1lbHNlDWlmIGNhcmRUeXBlID0gZXZlbnQg\ndGhlbg1yZXR1cm4gQ2xpZW50VGVtcGxhdGUoKSAmIHJldHVybiAmIHJldHVybg1lbHNl\nDXJldHVybiAiIg1lbmQgaWYNZW5kIGlmDWVuZCBDbGllbnRTYW1wbGUNDQ0AAADSAAgB\nAADyAR8BBQHhoAUAAAAAAAEAAAAMAAAAEFNvcnQgRXZlbnRzIGJ5IE5hbWUAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGlja2luZyBoZXJlIGluZGljYXRlcyB3aGV0\naGVyIGV2ZW50cyBiZSBpbiB0aGUgYWN0dWFsIG9yZGVyIG9yIGluIGFscGhhYmV0aWNh\nbCBvcmRlciB3aGVuIGltcG9ydGluZyBhbiAnYWV0ZScuIg1lbmQgTW91c2VXaXRoaW4N\nAAI0AAkBgAE6AAMBTQBzoAUAAAAAAAEAAAAMAAAAEFNjcmlwdCBXcml0aW5nAABvbiBt\nb3VzZVVwDWlmIGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBpZCA5IHRoZW4NcHV0ICJTY3Jp\ncHQiIGludG8gdGhpc1ZlcmINZWxzZQ1wdXQgIlNlbmQiIGludG8gdGhpc1ZlcmINZW5k\nIGlmDWdldCBzaG9ydCBuYW1lIG9mIGNhcmQgYnV0dG9uIGlkIDQxIG9mIGNhcmQgIlNl\nbmRBRSINcHV0IHRoaXNWZXJiIGludG8gZmlyc3Qgd29yZCBvZiBpdA1zZXQgbmFtZSBv\nZiBjYXJkIGJ1dHRvbiBpZCA0MSBvZiBjYXJkICJTZW5kQUUiIHRvIGl0DWdldCBzaG9y\ndCBuYW1lIG9mIGJrZ25kIGJ1dHRvbiBpZCA0NyBvZiBjYXJkIDEgb2YgYmtnbmQgIkV2\nZW50cyINcHV0IHRoaXNWZXJiIGludG8gZmlyc3Qgd29yZCBvZiBpdA1zZXQgbmFtZSBv\nZiBia2duZCBidXR0b24gaWQgNDcgb2YgY2FyZCAxIG9mIGJrZ25kICJFdmVudHMiIHRv\nIGl0DS0tcHV0IHRoaXNWZXJiIGludG8gd29yZCAxIG9mIHRoZSBuYW1lIG9mIGJrZ25k\nIGJ1dHRvbiBpZCA0NyBvZiBjYXJkIDEgb2YgYmtnbmQgIkV2ZW50cyINZW5kIG1vdXNl\nVXAAAAF0AAoBAAEaAJ8BLQD6gAYAAAAAAAEAAAAMAAAAEEFzc2VtYmxlcgAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gaW5kaWNhdGUgdGhhdCB0\naGUgY29uc3RhbnQgbmFtZXMgd2lsbCBiZSBpbiBhc3NlbWJsZXIuIg1lbmQgTW91c2VX\naXRoaW4NDWZ1bmN0aW9uIFNlcnZlclNhbXBsZSBjYXJkVHlwZQ1yZXR1cm4gIiINZW5k\nIFNlcnZlclNhbXBsZQ0NZnVuY3Rpb24gU2VydmVyQ29uc3QgbmFtZSxjb25zdCxjb21t\nZW50T3V0DXB1dCBuYW1lICYgIiBFUVUgIiAmIGNvbnN0IGludG8geA1pZiBjb21tZW50\nT3V0ID0gInRydWUiIHRoZW4NcHV0ICI7ICIgYmVmb3JlIHgNZW5kIGlmDXJldHVybiB4\nDWVuZCBTZXJ2ZXJDb25zdA0NAACUAAsCBQBoALYAeQElAAAAAAAA//8AFQAMAQAAEAAA\nb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSB0aW1lb3V0IHZhbHVl\nIHRvIGJlIHVzZWQgaW4gUEFTQ0FMIGNsaWVudCBzYW1wbGUgY29kZSBoZXJlLiINZW5k\nIE1vdXNlV2l0aGluDQA17AANAQABMwACAUMAQoAGAAAAAAABAAAADAAAABBQYXNjYWwA\nAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIHNob3cgdGhl\nIGV2ZW50IGFzIGl0IGlzIGNhbGxlZCBmcm9tIFBBU0NBTC4iDWVuZCBNb3VzZVdpdGhp\nbg0NZnVuY3Rpb24gQ2xpZW50VGVtcGxhdGUgbXVsdGlMaW5lDS0tIGVpdGhlciByZXR1\ncm4gdGhlIHRlbXBsYXRlIG9yIHdoaWNoIHBhcmFtZXRlciBpcyBiZWluZyBjbGlja2Vk\nDXB1dCBHbHVlSW5mbyhmaWVsZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8NcHV0\nICJGdW5jdGlvbiBBRSIgJiBTdHJpcFNQKGZpZWxkICJldmVudE5hbWUiKSAmICIoIiBp\nbnRvIHRlbXBsYXRlDXB1dCBudW1iZXIgb2YgbGluZXMgaW4gcGFyYW1JbmZvIGludG8g\nbg1wdXQgMCBpbnRvIHBhcmFtSW5kZXgNcmVwZWF0IHdpdGggaW5kZXggPSAxIHRvIG4N\nc2V0IGN1cnNvciB0byBidXN5DXB1dCBsaW5lIGluZGV4IG9mIHBhcmFtSW5mbyBpbnRv\nIHkNcHV0IGl0ZW0gNCBvZiB5IGludG8gcGFyYW1UeXBlDXB1dCAoaXRlbSA1IG9mIHkg\nPSAibyIpIGludG8gaXNPcHRpb25hbA1wdXQgKGl0ZW0gMyBvZiB5IDw+ICJudWxsIikg\naW50byB1c2VJdA1pZiB1c2VJdCB0aGVuDWFkZCAxIHRvIHBhcmFtSW5kZXgNaWYgdXNl\nSXQgdGhlbg1pZiBpbmRleCA9IDEgdGhlbg1wdXQgIlZBUiAiIGFmdGVyIHRlbXBsYXRl\nDXB1dCBmYWxzZSBpbnRvIGlzT3B0aW9uYWwNZWxzZQ1pZiBtdWx0aUxpbmUgPSAibXVs\ndGlMaW5lIiB0aGVuDXB1dCByZXR1cm4gJiBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbHNl\nDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmDXB1dCBOYW1lT2ZE\nYXRhVHlwZShpdGVtIDMgb2YgeSkgaW50byBuYW1lTGlzdA1pZiBwYXJhbVR5cGUgPSAx\nIHRoZW4gLS0gaGFuZGxlDXB1dCBpdGVtIDEgb2YgeSAmICI6IiAmIGl0ZW0gMyBvZiBu\nYW1lTGlzdCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBwYXJhbVR5cGUgPSA1\nIHRoZW4gLS0gcHRyICsgc2l6ZQ1wdXQgaXRlbSA2IG9mIHkgJiAiOiIgJiBpdGVtIDIg\nb2YgbmFtZUxpc3QgJiAiOyAiIMINJiBpdGVtIDcgb2YgeSAmICI6IExPTkdJTlQ7ICIg\nYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBwYXJhbVR5cGUgPSA3IHRoZW4gLS0gY1N0cmlu\nZw1wdXQgaXRlbSA2IG9mIHkgJiAiOiIgJiBpdGVtIDIgb2YgbmFtZUxpc3QgJiAiOyAi\nIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgaXNPcHRpb25hbCB0aGVuIC0tIHVzZSBwb2lu\ndGVyIHRvIGRhdGENaWYgcGFyYW1UeXBlID0gNCB0aGVuIC0tIGZpeGVkIGxlbmd0aA1w\ndXQgaXRlbSAzIG9mIHkgaW50byBkYXRhVHlwZQ1pZiBkYXRhVHlwZSA9ICJlbnVtIiB0\naGVuIC0tIHNwZWNpYWwgZm9yIGVudW0NcHV0IGl0ZW0gMSBvZiB5ICYgIjpSZXNUeXBl\nOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgZGF0YVR5cGUgPSAidHJ1ZSIgdGhlbiAt\nLSBhbHNvIHNwZWNpYWwgZm9yIHRydWUNcHV0IGl0ZW0gMSBvZiB5ICYgIjpCb29sZWFu\nOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UNcHV0IGl0ZW0gNiBvZiB5ICYgIjoiICYgaXRl\nbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZWxzZQ1w\ndXQgaXRlbSA2IG9mIHkgJiAiOiIgYWZ0ZXIgdGVtcGxhdGUNaWYgKHBhcmFtVHlwZSA9\nIDApIHRoZW4NcHV0ICJBRURlc2NQdHI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSAtLSA2\nLCBQU3RyaW5nDXB1dCAiU3RyaW5nUHRyOyAiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1l\nbmQgaWYNZWxzZSAtLSByZXF1aXJlZA1wdXQgaXRlbSAxIG9mIHkgJiAiOiIgYWZ0ZXIg\ndGVtcGxhdGUNaWYgKHBhcmFtVHlwZSA9IDApIHRoZW4gLS0gQUVEZXNjDXB1dCAiQUVE\nZXNjOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNCB0aGVuIC0t\nIGZpeGVkIGxlbmd0aA1wdXQgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0\nZW1wbGF0ZQ1lbHNlIC0tIHN0cjI1NQ1wdXQgIlN0cjI1NTsgIiBhZnRlciB0ZW1wbGF0\nZQ1lbmQgaWYNZW5kIGlmDWVuZCBpZiAtLSB1c2VJdA1lbmQgaWYgLS0gdXNlSXQNZW5k\nIHJlcGVhdA1EZWxldGUgbGFzdCBjaGFyIG9mIHRlbXBsYXRlIC0tIHNwYWNlIG9yICgN\naWYgcGFyYW1JbmRleCA+IDAgdGhlbg1wdXQgIikiIGludG8gbGFzdCBjaGFyIG9mIHRl\nbXBsYXRlIC0tIHJlcGxhY2UgOw1lbmQgaWYNcHV0ICI6T1NFcnI7IiBhZnRlciB0ZW1w\nbGF0ZQ1yZXR1cm4gdGVtcGxhdGUNZW5kIENsaWVudFRlbXBsYXRlDQ1mdW5jdGlvbiBD\nbGllbnRTYW1wbGUgY2FyZFR5cGUNZ2xvYmFsIGRlZmF1bHRUYXJnZXREZXNjLCBkZWZh\ndWx0VGltZU91dCwgZGVmYXVsdElkbGVQcm9jLCBkZWZhdWx0QUVGaWx0ZXIsIGRlZmF1\nbHRTZW5kTW9kZSwgZGVmYXVsdFRhcmdldA1pZiBjYXJkVHlwZSA9ICJpbml0IiB0aGVu\nDXB1dCAiUFJPQ0VEVVJFIElnbm9yZU9TRXJyKGVycjpPU0Vycik7IElOTElORSAkNTQ4\nRjsgeyBhZGRxICMyLHNwIH0gIiAmIHJldHVybiAmIHJldHVybiBpbnRvIHJzdA1pZiBk\nZWZhdWx0VGFyZ2V0RGVzYyBpcyBlbXB0eSBvciBkZWZhdWx0VGFyZ2V0RGVzYyA9ICJz\nZWxmIiB0aGVuDWlmIGRlZmF1bHRUYXJnZXREZXNjIGlzIGVtcHR5IHRoZW4NcHV0ICJ0\nYXJnZXREZXNjIiBpbnRvIGRlZmF1bHRUYXJnZXREZXNjDWVuZCBpZg1wdXQgIlBST0NF\nRFVSRSBUYXJnZXRJbml0OyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBUYWIgJiBUYWIg\naW50byB0d29UYWINcHV0IFRhYiAmIHR3b1RhYiBpbnRvIHRocmVlVGFiDXB1dCBUYWIg\nJiB0aHJlZVRhYiBpbnRvIGZvdXJUYWINaWYgZGVmYXVsdFRhcmdldCA9ICJzZWxmIiB0\naGVuDS0tIHNlbmQgdG8gc2VsZg1wdXQgVGFiICYgIlZBUiBteVBTTjogUHJvY2Vzc1Nl\ncmlhbE51bWJlcjsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgVGFiICYgIkJFR0lOIiAm\nIHJldHVybiBhZnRlciByc3QNcHV0IFRhYiAmICJXSVRIIG15UFNOIERPIiAmIHJldHVy\nbiBhZnRlciByc3QNcHV0IHR3b1RhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcnN0\nDXB1dCB0d29UYWIgJiAiaGlnaExvbmdPZlBTTiA6PSAwOyIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DXB1dCB0d29UYWIgJiAibG93TG9uZ09mUFNOIDo9IGtDdXJyZW50UHJvY2Vzczsi\nICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgdHdvVGFiICYgIkVORDsiICYgcmV0dXJuIGFm\ndGVyIHJzdA1wdXQgVGFiICYgIklnbm9yZU9TRXJyKEFFQ3JlYXRlRGVzYyhUeXBlUHJv\nY2Vzc1NlcmlhbE51bWJlciwgQG15UFNOLCBTaXplT2YoUHJvY2Vzc1NlcmlhbE51bWJl\nciksIHRhcmdldERlc2MpKTsiICYgcmV0dXJuIGFmdGVyIHJzdA1lbHNlIGlmIGRlZmF1\nbHRUYXJnZXQgPD4gIiIgdGhlbg0tLSBzZW5kIHRvIHRhcmdldCBuYW1lDXB1dCBUYWIg\nJiAiVkFSIHRhcmdldE5hbWU6IFN0cjI1NTsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQg\nVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciByc3QNcHV0IFRhYiAmICJ0YXJnZXRO\nYW1lIDo9ICciICYgZGVmYXVsdFRhcmdldCAmICInOyIgJiByZXR1cm4gYWZ0ZXIgcnN0\nDXB1dCBUYWIgJiAiSWdub3JlT1NFcnIoQUVDb2VyY2VQdHIoVHlwZUNoYXIsIEB0YXJn\nZXROYW1lWzFdLCAiICYgTGVuZ3RoKGRlZmF1bHRUYXJnZXQpICYgIiwgdHlwZVRhcmdl\ndElELCB0YXJnZXREZXNjKSk7IiAmIHJldHVybiBhZnRlciByc3QNZWxzZQ0tLSB1c2Ug\nUFBDIEJyb3dzZXINcHV0IFRhYiAmICJWQVIiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQg\ndHdvVGFiICYgInRoZUxvY2F0aW9uOiBMb2NhdGlvbk5hbWVSZWM7IiAmIHJldHVybiBh\nZnRlciByc3QNcHV0IHR3b1RhYiAmICJ0aGVQb3J0SW5mbzogUG9ydEluZm9SZWM7IiAm\nIHJldHVybiBhZnRlciByc3QNcHV0IHR3b1RhYiAmICJhVGFyZ2V0SUQ6IFRhcmdldElE\nOyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBUYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFm\ndGVyIHJzdA1wdXQgVGFiICYgIklGIFBQQ0Jyb3dzZXIoJycsICcnLCBGQUxTRSwgdGhl\nTG9jYXRpb24sIHRoZVBvcnRJbmZvLCBOSUwsICcnKSA9IE5vRXJyIFRIRU4iICYgcmV0\ndXJuIGFmdGVyIHJzdA1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBy\nc3QNcHV0IHR3b1RhYiAmICJXSVRIIGFUYXJnZXRJRCBETyIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DXB1dCB0aHJlZVRhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCB0\naHJlZVRhYiAmICJsb2NhdGlvbiA6PSB0aGVMb2NhdGlvbjsiICYgcmV0dXJuIGFmdGVy\nIHJzdA1wdXQgdGhyZWVUYWIgJiAibmFtZSA6PSB0aGVQb3J0SW5mby5uYW1lOyIgJiBy\nZXR1cm4gYWZ0ZXIgcnN0DXB1dCB0aHJlZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRl\nciByc3QNcHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRUNyZWF0ZURlc2ModHlwZVRh\ncmdldElELCBAYVRhcmdldElELCBTaXplT2YodGFyZ2V0SUQpLCB0YXJnZXREZXNjKSk7\nIiAmIHJldHVybiBhZnRlciByc3QNcHV0IHR3b1RhYiAmICJFTkQ7IiAmIHJldHVybiBh\nZnRlciByc3QNZW5kIGlmDXB1dCBUYWIgJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4g\nYWZ0ZXIgcnN0DWVuZCBpZg1pZiBkZWZhdWx0SWRsZVByb2MgaXMgZW1wdHkgdGhlbg1w\ndXQgIk5JTCIgaW50byBkZWZhdWx0SWRsZVByb2MNZWxzZQ1wdXQgIkAiIGJlZm9yZSBk\nZWZhdWx0SWRsZVByb2MNZW5kIGlmDWlmIGRlZmF1bHRBRUZpbHRlciBpcyBlbXB0eSB0\naGVuDXB1dCAiTklMIiBpbnRvIGRlZmF1bHRBRUZpbHRlcg1lbHNlDXB1dCAiQCIgYmVm\nb3JlIGRlZmF1bHRBRUZpbHRlcg1lbmQgaWYNaWYgZGVmYXVsdFRpbWVPdXQgaXMgZW1w\ndHkgdGhlbg1wdXQgImtBRURlZmF1bHRUaW1lT3V0IiBpbnRvIGRlZmF1bHRUaW1lT3V0\nDWVuZCBpZg1yZXR1cm4gcnN0DWVsc2UgaWYgY2FyZFR5cGUgPSAiZXZlbnQiIHRoZW4N\ncHV0IENsaWVudFRlbXBsYXRlKCkgJiByZXR1cm4gJiByZXR1cm4gaW50byBwcm9jSGVh\nZGVyDXB1dCBHbHVlSW5mbyhmaWVsZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8N\ncHV0IG51bWJlciBvZiBsaW5lcyBvZiBwYXJhbUluZm8gaW50byBjb3VudA1wdXQgIkFF\nIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNcHV0IChp\ndGVtIDMgb2YgcGFyYW1JbmZvIDw+ICJudWxsIikgaW50byBpc0Z1bmMNcHV0IHRhYiAm\nIHRhYiBpbnRvIHR3b1RhYg1wdXQgdGFiICYgdHdvVGFiIGludG8gdGhyZWVUYWINcHV0\nICJ0aGVBcHBsZUV2ZW50IDogQXBwbGVFdmVudDsiICYgcmV0dXJuIGFmdGVyIHZhckRl\nY2xhcmUNcHV0ICJ0aGVSZXBseSA6IEFwcGxlRXZlbnQ7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBUYWIgJiAiUFJPQ0VEVVJFIENsZWFuVXA7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgdHdvVGFiICYgIklnbm9yZU9TRXJyKEFFRGlzcG9zZURlc2ModGhl\nQXBwbGVFdmVudCkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAm\nICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKHRoZVJlcGx5KSk7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORDsiICYgcmV0dXJuICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAiUFJPQ0VEVVJFIEZhaWxFcnIoZXJyOk9T\nRXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiQkVHSU4i\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiSUYgZXJyIDw+IE5P\nRXJyIFRIRU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0aHJlZVRhYiAmICJC\nRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHRocmVlVGFiICYgcHJvY05h\nbWUgJiAiIDo9IGVycjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0aHJlZVRh\nYiAmICJDbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHRocmVlVGFi\nICYgIkV4aXQoIiAmIHByb2NOYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgdGhyZWVUYWIgJiAiRU5EOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIHR3b1RhYiAmICJFTkQ7IiAmIHJldHVybiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYg\nInRoZUFwcGxlRXZlbnQuZGF0YUhhbmRsZSA6PSBOSUw7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgVGFiICYgInRoZVJlcGx5LmRhdGFIYW5kbGUgOj0gTklMOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJGYWlsRXJyKEFFQ3JlYXRlQXBw\nbGVFdmVudCgnIiAmIFJlc1R5cGUoZmllbGQgIkV2ZW50Q2xhc3MiKSDCDSYgIicsICci\nICYgUmVzVHlwZShmaWVsZCAiRXZlbnRJRCIpICYgIicsICIgJiBkZWZhdWx0VGFyZ2V0\nRGVzYyDCDSYgIiwga0F1dG9HZW5lcmF0ZVJldHVybklELCBrQW55VHJhbnNhY3Rpb25J\nRCwgdGhlQXBwbGVFdmVudCkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcmVwZWF0\nIHdpdGggcGFyYW1JbmRleCA9IDIgdG8gY291bnQNcHV0IGxpbmUgcGFyYW1JbmRleCBv\nZiBwYXJhbUluZm8gaW50byB4DWlmIGl0ZW0gMyBvZiB4IDw+ICJudWxsIiB0aGVuDXB1\ndCBpdGVtIDQgb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB4ID0gIm8i\nKSBpbnRvIGlzT3B0aW9uYWwNcHV0IE5hbWVPZkRhdGFUeXBlKGl0ZW0gMyBvZiB4KSBp\nbnRvIG5hbWVMaXN0DWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHdvVGFiIGludG8gaW5k\nZW50DWVsc2UNcHV0IFRhYiBpbnRvIGluZGVudA1lbmQgaWYNcHV0IFN0cmlwU3AoaXRl\nbSAxIG9mIHgpIGludG8gdGhpc05hbWUNaWYgKHBhcmFtVHlwZSA9IDApIG9yIChwYXJh\nbVR5cGUgPSAyKSB0aGVuIC0tIEFFRGVzYw1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRh\nYiAmICJJRiAiICYgaXRlbSA2IG9mIHggJiAiIDw+IE5JTCBUSEVOIiAmIHJldHVybiBp\nbnRvIHRlbXANcHV0IHRlbXAgYWZ0ZXIgcHJvY0JvZHkNLS1JRiBwYXJhbVR5cGUgPSAy\nIHRoZW4NLS0gIHB1dCBUYWIgJiB0ZW1wIGJlZm9yZSBsaW5lIDUgb2YgcHJvY0JvZHkN\nLS1lbmQgaWYNcHV0IGluZGVudCAmICJGYWlsRXJyKEFFUHV0S2V5RGVzYyh0aGVBcHBs\nZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCAmICIsIiAmIGl0ZW0gNiBvZiB4ICYgIl4pKTsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0taWYgcGFyYW1UeXBlID0gMiB0aGVuDS0t\nICBwdXQgdGhyZWVUYWIgJiAiSWdub3JlT1NFcnIoQUVEaXNwb3NlRGVzYygiICYgaXRl\nbSA2IG9mIHggJiAiXikpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNiBvZiBwcm9jQm9k\neQ0tLWVuZCBpZg1lbHNlDXB1dCBpbmRlbnQgJiAiRmFpbEVycihBRVB1dEtleURlc2Mo\ndGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHggJiAiLCIgJiBpdGVtIDEgb2YgeCAm\nICIpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0taWYgcGFyYW1UeXBlID0gMiB0\naGVuDS0tICBwdXQgVHdvVGFiICYgIklnbm9yZU9TRXJyKEFFRGlzcG9zZURlc2MoIiAm\nIGl0ZW0gMSBvZiB4ICYgIikpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNSBvZiBwcm9j\nQm9keQ0tLWVuZCBpZg1lbmQgaWYNZWxzZSBpZiAocGFyYW1UeXBlID0gMSkgb3IgKHBh\ncmFtVHlwZSA9IDMpIHRoZW4gLS0gaGFuZGxlDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNw\nKGl0ZW0gMSBvZiB4KSBpbnRvIGRlc2NGb3JUaGlzTmFtZQ1pZiBpc09wdGlvbmFsIHRo\nZW4NcHV0IFRhYiAmICJJRiAiICYgaXRlbSAxIG9mIHggJiAiIDw+IE5JTCBUSEVOIiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgaW5kZW50ICYgIkJFR0lOIiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IGRlc2NGb3JUaGlzTmFtZSAmICIgOiBB\nRURlc2M7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCBpbmRlbnQgJiAiV0lU\nSCIgJiYgZGVzY0ZvclRoaXNOYW1lICYmICJETyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IGluZGVudCAmIHRhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IGluZGVudCAmIHRhYiAmICJkZXNjcmlwdG9yVHlwZSA6PSAiICYgaXRlbSA0\nIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIGl0ZW0g\nMyBvZiBuYW1lTGlzdCA9ICJIYW5kbGUiIHRoZW4NcHV0IGluZGVudCAmIHRhYiAmICJk\nYXRhSGFuZGxlIDo9ICIgJiBpdGVtIDEgb2YgeCAmICI7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1lbHNlDXB1dCBpbmRlbnQgJiB0YWIgJiAiZGF0YUhhbmRsZSA6PSBIYW5k\nbGUoIiAmIGl0ZW0gMSBvZiB4ICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1l\nbmQgaWYNcHV0IGluZGVudCAmIHRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9j\nQm9keQ1wdXQgaW5kZW50ICYgIkZhaWxFcnIoQUVQdXRLZXlEZXNjKHRoZUFwcGxlRXZl\nbnQsIiAmIGl0ZW0gMiBvZiB4ICYgIiwiICYgZGVzY0ZvclRoaXNOYW1lICYgIikpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBpbmRl\nbnQgJiAiRU5EOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDS0taWYgcGFy\nYW1UeXBlID0gMyB0aGVuDS0tICBpZiBpdGVtIDMgb2YgbmFtZUxpc3QgPSAiSGFuZGxl\nIiB0aGVuDS0tICAgIHB1dCB0d29UYWIgJiAiRGlzcG9zSGFuZGxlKCIgJiBpdGVtIDEg\nb2YgeCAmICIpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNSBvZiBwcm9jQm9keQ0tLSAg\nZWxzZQ0tLSAgICBwdXQgdHdvVGFiICYgIkRpc3Bvc0hhbmRsZShIYW5kbGUoIiAmIGl0\nZW0gMSBvZiB4ICYgIikpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNSBvZiBwcm9jQm9k\neQ0tLSAgZW5kIGlmDS0tICBpZiBpc09wdGlvbmFsIHRoZW4NLS0gICAgcHV0IHR3b1Rh\nYiAmICJJRiAiICYgaXRlbSA2IG9mIHggJiAiIDw+IE5JTCBUSEVOIiAmIHJldHVybiAm\nIHRhYiBiZWZvcmUgbGluZSA1IG9mIHByb2NCb2R5DS0tICBlbmQgaWYNLS1lbmQgaWYN\nZWxzZSBpZiBwYXJhbVR5cGUgPSA0IHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDWlmIGl0\nZW0gMyBvZiB4ID0gImVudW0iIHRoZW4NcHV0IFRhYiAmICJJRiBMT05HSU5UKCIgJiBp\ndGVtIDEgb2YgeCAmICIpIDw+IDAgVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IHR3b1RhYiAmICJGYWlsRXJyKEFFUHV0S2V5UHRyKHRoZUFwcGxlRXZlbnQsICIg\nJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIEAi\nICYgaXRlbSAxIG9mIHggJiAiLCBTaXplT2YoIiDCDSYgaXRlbSAxIG9mIG5hbWVMaXN0\nICYgIikpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgaXRlbSAzIG9m\nIHggPSAidHJ1ZSIgdGhlbg1wdXQgVGFiICYgIklGICIgJiBpdGVtIDEgb2YgeCAmICIg\nVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJGYWlsRXJy\nKEFFUHV0S2V5UHRyKHRoZUFwcGxlRXZlbnQsICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwg\ndHlwZVRydWUsIE5JTCwgMCkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1w\ndXQgVGFiICYgIklGICIgJiBpdGVtIDYgb2YgeCAmICIgPD4gTklMIFRIRU4iICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRmFpbEVycihBRVB1dEtleVB0\ncih0aGVBcHBsZUV2ZW50LCAiICYgaXRlbSAyIG9mIHggwg0mICIsICIgJiBpdGVtIDQg\nb2YgbmFtZUxpc3QgJiAiLCBQdHIoIiAmIGl0ZW0gNiBvZiB4ICYgIiksIFNpemVPZigi\nIMINJiBpdGVtIDEgb2YgbmFtZUxpc3QgJiAiKSkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNZW5kIGlmDWVsc2UgIC0tIHJlcXVpcmVkDXB1dCBUYWIgJiAiRmFpbEVycihB\nRVB1dEtleVB0cih0aGVBcHBsZUV2ZW50LCAiICYgaXRlbSAyIG9mIHggwg0mICIsICIg\nJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCBAIiAmIGl0ZW0gMSBvZiB4ICYgIiwgU2l6\nZU9mKCIgwg0mIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICIpKSk7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbmQgaWYNZWxzZSBpZiAocGFyYW1UeXBlID0gNSkgb3IgKHBhcmFt\nVHlwZSA9IDcpIHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBUYWIgJiAiSUYgIiAm\nIGl0ZW0gNiBvZiB4ICYgIiA8PiBOSUwgVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNZW5kIGlmDXB1dCBpbmRlbnQgJiAiRmFpbEVycihBRVB1dEtleVB0cih0aGVBcHBs\nZUV2ZW50LCAiICYgaXRlbSAyIG9mIHggwg0mICIsICIgJiBpdGVtIDQgb2YgbmFtZUxp\nc3QgJiAiLCBQdHIoIiAmIGl0ZW0gNiBvZiB4ICYgIiksICIgYWZ0ZXIgcHJvY0JvZHkN\naWYgKHBhcmFtVHlwZSA9IDUpIHRoZW4gLS0gc2l6ZSBpcyB0aGUgcGFyYW1ldGVyDXB1\ndCBpdGVtIDcgb2YgeCAmICIpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UN\ncHV0ICJzdHJsZW4oUHRyKCIgJiBpdGVtIDYgb2YgeCAmICIpKSkpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVsc2UgaWYgcGFyYW1UeXBlID0gNiB0aGVuDWlm\nIGlzT3B0aW9uYWwgdGhlbg1wdXQgVGFiICYgIklGICIgJiBpdGVtIDYgb2YgeCAmICIg\nPD4gTklMIFRIRU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCAiUHRyKG9yZCgi\nICYgaXRlbSA2IG9mIHggJiAiKSsxKSIgaW50byBkYXRhQWRkcg1wdXQgaXRlbSA2IG9m\nIHggJiAiXiIgaW50byBkYXRhSXRlbQ1lbHNlICAtLSByZXF1aXJlZA1wdXQgIkAiICYg\naXRlbSAxIG9mIHggJiAiWzFdIiBpbnRvIGRhdGFBZGRyDXB1dCBpdGVtIDEgb2YgeCBp\nbnRvIGRhdGFJdGVtDWVuZCBpZg1wdXQgaW5kZW50ICYgIkZhaWxFcnIoQUVQdXRLZXlQ\ndHIodGhlQXBwbGVFdmVudCwgIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCAiICYgaXRlbSA0\nIG9mIG5hbWVMaXN0ICYgIiwgIiAmIGRhdGFBZGRyICYgIiwgTGVuZ3RoKCIgwg0mIGRh\ndGFJdGVtICYgIikpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1lbmQg\naWYgLS0gbm90IG51bGwNZW5kIHJlcGVhdA1wdXQgdGFiICYgIkZhaWxFcnIoQUVTZW5k\nKHRoZUFwcGxlRXZlbnQsIHRoZVJlcGx5LCAiIGFmdGVyIHByb2NCb2R5DWlmIGlzRnVu\nYyB0aGVuDXB1dCBrQUVXYWl0UmVwbHkgYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1wdXQga0FF\nTm9SZXBseSBhZnRlciBwcm9jQm9keQ1lbmQgaWYNaWYgZGVmYXVsdFNlbmRNb2RlIGlz\nIG5vdCBlbXB0eSB0aGVuIHB1dCAiKyIgJiBkZWZhdWx0U2VuZE1vZGUgYWZ0ZXIgcHJv\nY0JvZHkNcHV0ICIsIGtBRU5vcm1hbFByaW9yaXR5LCAiICYgZGVmYXVsdFRpbWVPdXQg\nJiAiLCIgJiYgZGVmYXVsdElkbGVQcm9jICYmICIsIiDCDSYgZGVmYXVsdEFFRmlsdGVy\nICYgIikpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXNGdW5jIHRoZW4NcHV0\nICJ0aGVFcnJuIDogTE9OR0lOVDsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nICJ0eXBlQ29kZSA6IERlc2NUeXBlOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1w\ndXQgImFjdHVhbFNpemUgOiBMT05HSU5UOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFy\nZQ1wdXQgdGFiICYgIklGIEFFR2V0S2V5UHRyKHRoZVJlcGx5LCAnZXJybicsIHR5cGVM\nb25nSW50ZWdlciwgdHlwZUNvZGUsIiDCDSYmICJAdGhlRXJybiwgU2l6ZU9mKHRoZUVy\ncm4pLCBhY3R1YWxTSXplKSA8PiBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgInsgeW91ciBlcnJvciBoYW5kbGluZyBjb2Rl\nIGhlcmV9IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORDsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0tIGdldCB0aGUgcmVzdWx0DXB1dCBpdGVt\nIDQgb2YgcGFyYW1JbmZvIGludG8gcGFyYW1UeXBlDXB1dCBOYW1lT2ZEYXRhVHlwZShp\ndGVtIDMgb2YgcGFyYW1JbmZvKSBpbnRvIG5hbWVMaXN0DWlmIHBhcmFtVHlwZSA9IDAg\ndGhlbiAtLSByZXN1bHQgaXMgQUVEZXNjDXB1dCB0YWIgJiAiRmFpbEVycihBRUdldEtl\neURlc2ModGhlQXBwbGVFdmVudCwga2V5RGlyZWN0T2JqZWN0LCAiIMINJiBpdGVtIDQg\nb2YgbmFtZUxpc3QgJiAiLCB0aGVSZXN1bHQpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVsc2UgaWYgKHBhcmFtVHlwZSA9IDEpIG9yIChwYXJhbVR5cGUgPSA1KSB0aGVu\nIC0tIHJlc3VsdCBpcyBIYW5kbGUNcHV0ICJhRGVzYyA6IEFFRGVzYzsiICYgcmV0dXJu\nIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5RGVzYyh0\naGVBcHBsZUV2ZW50LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1l\nTGlzdCAmICIsIGFEZXNjKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1pZiBpdGVt\nIDMgb2YgbmFtZUxpc3QgPSAiSGFuZGxlIiB0aGVuDXB1dCBUYWIgJiAidGhlUmVzdWx0\nIDo9IGFEZXNjLmRhdGFIYW5kbGU7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbHNl\nDXB1dCBUYWIgJiAidGhlUmVzdWx0IDo9ICIgJiBpdGVtIDMgb2YgbmFtZUxpc3QgJiAi\nKGFEZXNjLmRhdGFIYW5kbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlm\nDWVsc2UgaWYgcGFyYW1UeXBlID0gNCB0aGVuIC0tIHJlc3VsdCBpcyBmaXhlZCBsZW5n\ndGgNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRyKHRoZVJlcGx5LCBrZXlEaXJl\nY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIHR5cGVDb2RlLCBA\ndGhlUmVzdWx0LCBTaXplT2YodGhlUmVzdWx0KSIgwg0mICIsIGFjdHVhbFNpemUpKTsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgcGFyYW1UeXBlID0gNiB0aGVu\nIC0tIHJlc3VsdCBpcyBzdHIyNTUNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRy\nKHRoZVJlcGx5LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlz\ndCAmICIsIHR5cGVDb2RlLCBAdGhlUmVzdWx0WzFdLCBTaXplT2YodGhlUmVzdWx0KS0x\nIiDCDSYgIiwgYWN0dWFsU2l6ZSkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIFRhYiAmICJJRiBhY3R1YWxTaXplID49IFNpemVPZih0aGVSZXN1bHQpIFRIRU4iICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiYWN0dWFsU2l6ZSA6PSBT\naXplT2YodGhlUmVzdWx0KSAtIDE7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgInRoZVJlc3VsdFswXSA6PSBjaHIoYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1lbmQgaWYNZW5kIGlmDXB1dCB0YWIgJiAiQ2xlYW5VcDsiICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0YWIgJiBwcm9jTmFtZSAmICIgOj0gTm9F\ncnI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdGFiICYgIkVORDsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DWlmIHZhckRlY2xhcmUgPD4gIiIgdGhlbg1wdXQgdGFi\nICYgIlZBUiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXBlYXQgd2l0aCBpID0g\nMSB0byBudW1iZXIgb2YgbGluZXMgaW4gdmFyRGVjbGFyZQ1wdXQgdHdvVGFiICYgbGlu\nZSBpIG9mIHZhckRlY2xhcmUgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1lbmQgcmVw\nZWF0DWVuZCBpZg1yZXR1cm4gcHJvY0hlYWRlciAmIHJldHVybiAmIHByb2NCb2R5ICYg\ncmV0dXJuDWVsc2UNcmV0dXJuICIiDWVuZCBpZg1FbmQgQ2xpZW50U2FtcGxlDQ0AARAA\nDwEAAPIAAgECAJngBQAAAAAAAQAAAAwAAAAQSGFzIEdsdWUgU3Vicm91dGluZQAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNlcnRhaW4gbGFuZ3VhZ2VzIGhhdmUgYSBw\ncmltaXRpdmUgdG8gc2VuZCBBcHBsZSBFdmVudHMsIiDCDSYmICJidXQgdGhlcmUgbWF5\nIGFsc28gYmUgYSBnbHVlIHJvdXRpbmUgb24gdG9wIG9mIHRoZSBwcmltaXRpdmUuIiDC\nDSYmICJDbGljayB0aGlzIGJveCB0byB1c2UgdGhlIGdsdWUgcm91dGluZS4iDWVuZCBN\nb3VzZVdpdGhpbg0NAAAAtAAQAgUAVAC7AGUBJQAAAAAAAP//ABUADAEAABAAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayB0byBzZXQgdGhlIHJlc291cmNlIHR5\ncGUgdG8gYmUgd3JpdHRlbiBvdXQgYXMgJ2FldGUnIG9yICdhZXV0Jy4gTm9ybWFsbHkg\naXQgc2hvdWxkIGJlICdhZXRlJy4iDWVuZCBNb3VzZVdpdGhpbg0NAAADCgASAQAANgAK\nAEsAgYAAAAAAAAABABUADAEAABBUYXJnZXQgQXBwbGljYXRpb24AAC0tIG9uIE1vdXNl\nV2l0aGluDS0tIFNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGNob29zZSB0aGUgbmFt\nZSBvZiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHRvIGJlIHVzZWQgaW4gUEFTQ0FMIGNs\naWVudCBzYW1wbGUgY29kZS4iDS0tIGVuZCBNb3VzZVdpdGhpbg0NLS0gb24gbW91c2VV\ncA0tLSBpZiB0aGUgc3lzdGVtVmVyc2lvbiA8IDcgdGhlbg0tLSBhbnN3ZXIgIlRoaXMg\nZmVhdHVyZSByZXF1aXJlcyBTeXN0ZW0gNy4wIG9yIGxhdGVyLiINLS0gZXhpdCBtb3Vz\nZVVwDS0tIGVuZCBpZg0tLSBpZiB0aGUgdmVyc2lvbiA8IDIuMSB0aGVuDS0tIGFuc3dl\nciAiVGhpcyBmZWF0dXJlIHJlcXVpcmVzIEh5cGVyQ2FyZCAyLjEgb3IgbGF0ZXIuIg0t\nLSBlbmQgaWYNLS0gYW5zd2VyIHByb2dyYW0gIkNob29zZSBhbiBvcGVuIHByb2dyYW0g\ndG8gc2VuZCB0bzoiDS0tIGlmIGl0IDw+ICIiIHRoZW4NLS0gU2V0IHRoZSBpdGVtRGVs\naW1pdGVyIHRvICI6Ig0tLSBwdXQgaXQgaW50byB4DS0tIGRlbGV0ZSBsYXN0IGl0ZW0g\nb2YgeA0tLSBwdXQgdGhlIGFkZHJlc3MgaW50byB5DS0tIGRlbGV0ZSBsYXN0IGl0ZW0g\nb2YgeQ0tLSBpZiB4ID0geSB0aGVuDS0tIGRlbGV0ZSBpdGVtIDEgdG8gMiBvZiBpdA0t\nLSBlbmQgaWYNLS0gU2V0IHRoZSBpdGVtRGVsaW1pdGVyIHRvICIsIg0tLSBwdXQgaXQg\naW50byBjYXJkIGZpZWxkICJzZW5kVGFyZ2V0Ig0tLSBlbmQgaWYNLS0gZW5kIG1vdXNl\nVXAAALoAFAIFAHwAyQCNASUAAAAAAAD//wAVAAwBAAAQAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiRW50ZXIgdGhlIHNlbmQgbW9kZSAob3RoZXIgdGhhbiB3YWl0UmVw\nbHkvbm9SZXBseS9xdWV1ZVJlcGx5KSB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQg\nc2FtcGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAJgAFQIFAJAA3gChASUA\nAAAAAAD//wAVAAwBAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiRW50ZXIg\ndGhlIG5hbWUgb2YgaWRsZSBwcm9jIHRvIGJlIHVzZWQgaW4gUEFTQ0FMIGNsaWVudCBz\nYW1wbGUgY29kZSBoZXJlLiINZW5kIE1vdXNlV2l0aGluDQAAqAAWAgUApADeALUBJQAA\nAAAAAP//ABUADAEAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJFbnRlciB0\naGUgbmFtZSBvZiB0aGUgZXZlbnQgZmlsdGVyIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4g\nUEFTQ0FMIGNsaWVudCBzYW1wbGUgY29kZSBoZXJlLiINZW5kIE1vdXNlV2l0aGluDQAA\n1AAaAQABBgEfARkB/aAFAAAAAAABAAAADAAAABBBdXRvIEdlbmVyYXRlIFBhcmFtZXRl\nciBUeXBlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2tpbmcgaGVyZSBp\nbmRpY2F0ZXMgd2hldGhlciBkYXRhIHR5cGVzIGZvciB1c2UgaW4gUEFTQ0FMIHBhcmFt\nZXRlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCBnZW5lcmF0ZWQuIg1lbmQgTW91c2VX\naXRoaW4NAACiABsCBQC4AKoAyQElAAAAAAAA//8AFQAMAQAAEAAAb24gTW91c2VXaXRo\naW4NU2hvd0JhbGxvb24gIkVudGVydCB0aGUgbmFtZSBvZiB0YXJnZXQgZGVzY3JpcHRv\nciB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQgc2FtcGxlIGNvZGUgaGVyZS4iDWVu\nZCBNb3VzZVdpdGhpbg0AAAAoAB0BgAEhAAMBNABP4AUAAAAAAAEAAAAMAAAAEFZlcmJv\nc2UAAAABMAAhAQAAVAEkAGMBWuAGAAAAAAABAAAADAAAABBhZXRlAABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBzZXQgdGhlIHJlc291cmNlIHR5\ncGUgdG8gYmUgd3JpdHRlbiBvdXQgYXMgJ2FldGUnLiBUaGlzIGlzIHdoYXQgaXMgbm9y\nbWFsbHkgdGhpcyBzaG91bGQgYmUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXAN\nc2V0IHRoZSBoaWxpdGUgb2YgY2QgYnRuICJhZXV0IiB0byBmYWxzZQ1wdXQgdGhlIHNo\nb3J0IG5hbWUgb2YgbWUgaW50byBjZCBmbGQgInJlc291cmNlVHlwZSINZW5kIG1vdXNl\nVXAAASgAIgEAAFQBYABjAZagBgAAAAAAAQAAAAwAAAAQYWV1dAAAb24gTW91c2VXaXRo\naW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gc2V0IHRoZSByZXNvdXJjZSB0eXBl\nIHRvIGJlIHdyaXR0ZW4gb3V0IGFzICdhZXRlJy4gTm9ybWFsbHkgdGhpcyBzaG91bGQg\nYmUgJ2FldGUnLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCB0aGUgaGls\naXRlIG9mIGNkIGJ0biAiYWV0ZSIgdG8gZmFsc2UNcHV0IHRoZSBzaG9ydCBuYW1lIG9m\nIG1lIGludG8gY2QgZmxkICJyZXNvdXJjZVR5cGUiDWVuZCBtb3VzZVVwAAAApAAjAoQA\nUgF9AGQBogACAAAAAAAAAAMADAAAABByZXNvdXJjZVR5cGUAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJUaGUgcmVzb3VyY2UgdHlwZSB0byBiZSB3cml0dGVuIG91dCwg\nbm9ybWFsbHkgdGhpcyBzaG91bGQgc3RheSBhcyBhZXRlLiINZW5kIE1vdXNlV2l0aGlu\nDQ0AAAAiACQCBQAeALgAMAFNAAAAAAAAAAAAFQASSQAAGAAAAAAAbAAoAgUAXAAhAG0A\ndwABAAAAAAAAABUADAEAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJFbnRl\nciB0aGUgcmVzb3VyY2UgSUQgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0NAAAAdgApAgQA\nWgB2AG0ApAACAAAAAAAAAAQADAAAABByZXNvdXJjZUlEAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiRW50ZXIgdGhlIHJlc291cmNlIElEIGhlcmUuIg1lbmQgTW91c2VX\naXRoaW4NDQAAAGwAKgIFAJwABACsADEAAQAAAAAAAAAVAAwBAAAQAABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhlIHJlc291cmNlIG5hbWUgaGVyZS4iDWVu\nZCBNb3VzZVdpdGhpbgAAAHgAKwIEAJwAMACtAM8AAgAAAAAAAAAEAAwAAAAQcmVzb3Vy\nY2VOYW1lAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhlIHJlc291\ncmNlIG5hbWUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbgAAAG4ALAIFALEABADCAD0AAQAA\nAAAAAAAVAAwBAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhl\nIHJlc291cmNlIHZlcnNpb24gaGVyZS4iDWVuZCBNb3VzZVdpdGhpbgAAegAtAgQAsAA8\nAMEAXAACAAAAAP//AAQADAAAABBtYWpvclZlcnNpb24AAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJFbnRlciB0aGUgcmVzb3VyY2UgdmVyc2lvbiBoZXJlLiINZW5kIE1v\ndXNlV2l0aGluAAAiAC4CBQCwAFwAwQBoAAEAAAAAAAAABAAMAAAAEAAAAAAAegAvAgQA\nsABoAMEAhQACAAAAAAAAAAQADAAAABBtaW5vclZlcnNpb24AAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJFbnRlciB0aGUgcmVzb3VyY2UgdmVyc2lvbiBoZXJlLiINZW5k\nIE1vdXNlV2l0aGluAABsADACBQBwAAkAgQB3AAEAAAAA//8AFQAMAQAAEAAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBsYW5ndWFnZSBjb2RlIGhlcmUu\nIg1lbmQgTW91c2VXaXRoaW4AAAB4ADECBABuAHYAfwCkAAIAAAAAAAAABAAMAAAAEGxh\nbmd1YWdlQ29kZQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBs\nYW5ndWFnZSBjb2RlIGhlcmUuIg1lbmQgTW91c2VXaXRoaW4AAABqADICBQCCABUAkgB3\nAAEAAAAAAAAAFQAMAQAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVy\nIHRoZSBzY3JpcHQgY29kZSBoZXJlLiINZW5kIE1vdXNlV2l0aGluAAAAdAAzAgQAgAB2\nAJEApAACAAAAAAAAAAQADAAAABBzY3JpcHRDb2RlAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiRW50ZXIgdGhlIHNjcmlwdCBjb2RlIGhlcmUuIg1lbmQgTW91c2VXaXRo\naW4AAADuADYBAAEoAXwBVgG4oAAAAGB2AAEAFQAMAQAAEEluc3RydWN0aW9ucwAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ2V0IGluc3RydWN0\naW9ucyBmb3IgdXNpbmcgdGhpcyBzdGFjay4iDWVuZCBNb3VzZVdpdGhpbg0NDW9uIG1v\ndXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVG\ncm9tDWdvIGNkICJpbnN0cnVjdGlvbnMiDWVuZCBtb3VzZVVwAAAA9gA3AQABMgHNAUwB\n8iAAAAA+0wABABUADgEAABJQcm9jZWVkyQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxv\nb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIFJlc291cmNlIFRvb2xzIGNhcmQuIg1l\nbmQgTW91c2VXaXRoaW4NDQ0Nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlRnJvbQ1wdXNo\nIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28g\nY2FyZCAiTWFpbk1lbnUiDWVuZCBtb3VzZVVwAAAAKgA4AoUBIwEhAVYCAAAHAAAAAAAA\nAAMACQAAAAxuYW1lTGlzdAAAAAAufAA5AQABQwACAVIAIIAGAAAAAAABAAAADAAAABBD\nAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBzaG93IHRo\nZSBldmVudCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBDLiINZW5kIE1vdXNlV2l0aGluDQ1m\ndW5jdGlvbiBDbGllbnRUZW1wbGF0ZSBtdWx0aUxpbmUNLS0gZWl0aGVyIHJldHVybiB0\naGUgdGVtcGxhdGUgb3Igd2hpY2ggcGFyYW1ldGVyIGlzIGJlaW5nIGNsaWNrZWQNcHV0\nIEdsdWVJbmZvKGZpZWxkICJwYXJhbUluZm8iKSBpbnRvIHBhcmFtSW5mbw1wdXQgIk9T\nRXJyIEFFIiAmIFN0cmlwU1AoZmllbGQgImV2ZW50TmFtZSIpICYgIigiIGludG8gdGVt\ncGxhdGUNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBwYXJhbUluZm8gaW50byBuDXB1dCAw\nIGludG8gcGFyYW1JbmRleA1yZXBlYXQgd2l0aCBpbmRleCA9IDEgdG8gbg1zZXQgY3Vy\nc29yIHRvIGJ1c3kNcHV0IGxpbmUgaW5kZXggb2YgcGFyYW1JbmZvIGludG8geQ1wdXQg\naXRlbSA0IG9mIHkgaW50byBwYXJhbVR5cGUNcHV0IChpdGVtIDUgb2YgeSA9ICJvIikg\naW50byBpc09wdGlvbmFsDXB1dCAoaXRlbSAzIG9mIHkgPD4gIm51bGwiKSBpbnRvIHVz\nZUl0DWlmIHVzZUl0IHRoZW4NYWRkIDEgdG8gcGFyYW1JbmRleA1pZiB1c2VJdCB0aGVu\nDWlmIGluZGV4ID0gMSB0aGVuDXB1dCBmYWxzZSBpbnRvIGlzT3B0aW9uYWwNZWxzZQ1p\nZiBtdWx0aUxpbmUgPSAibXVsdGlMaW5lIiB0aGVuDXB1dCByZXR1cm4gJiBzcGFjZSBh\nZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYN\nZW5kIGlmDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVtIDMgb2YgeSkgaW50byBuYW1lTGlz\ndA1wdXQgaXRlbSA1IG9mIG5hbWVMaXN0IGludG8gdHlwZU5hbWUNaWYgcGFyYW1UeXBl\nID0gMCB0aGVuDWlmIGluZGV4IDw+IDEgdGhlbiBwdXQgImNvbnN0ICIgYWZ0ZXIgdGVt\ncGxhdGUNcHV0ICJBRURlc2MgKiIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBwYXJhbVR5\ncGUgPSAxIHRoZW4gLS0gaGFuZGxlDXB1dCAiSGFuZGxlICIgYWZ0ZXIgdGVtcGxhdGUN\naWYgaW5kZXggPSAxIHRoZW4NcHV0ICIqIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZWxz\nZSBpZiBwYXJhbVR5cGUgPSA0IHRoZW4gLS0gaW1tZWRpYXRlDXB1dCBpdGVtIDMgb2Yg\neSBpbnRvIGRhdGFUeXBlDXB1dCBpdGVtIDYgb2YgbmFtZUxpc3QgaW50byBkYXRhU2l6\nZQ1pZiBkYXRhVHlwZSA9ICJlbnVtIiB0aGVuDXB1dCAiUmVzVHlwZSAiIGFmdGVyIHRl\nbXBsYXRlDWVsc2UgaWYgZGF0YVR5cGUgPSAidHJ1ZSIgdGhlbg1wdXQgIkJvb2xlYW4g\nIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlIGlmIChpc09wdGlvbmFsIG9yIChkYXRhU2l6ZSA8\nIDApIG9yIChkYXRhU2l6ZSA+IDQpKSBhbmQgKGluZGV4IDw+IDEpIHRoZW4gLS0gZml4\nZWQgbGVuZ3RoIG9wdGlvbmFsDXB1dCAiY29uc3QgIiAmIHR5cGVOYW1lICYgIiAqIiBh\nZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCB0eXBlTmFtZSAmIHNwYWNlIGFmdGVyIHRlbXBs\nYXRlDWVuZCBpZg1pZiBpbmRleCA9IDEgdGhlbg1wdXQgIioiIGFmdGVyIHRlbXBsYXRl\nDWVuZCBpZg1lbHNlIGlmIHBhcmFtVHlwZSA9IDcgdGhlbg1pZiBpbmRleCA8PiAxIHRo\nZW4gcHV0ICJjb25zdCAiIGFmdGVyIHRlbXBsYXRlDXB1dCB0eXBlTmFtZSAmICIgKiIg\nYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIChsYXN0IGNoYXIgb2YgdGVtcGxhdGUgPSAi\nKiIpIHRoZW4NcHV0IGl0ZW0gNiBvZiB5ICYgIiwgIiBhZnRlciB0ZW1wbGF0ZQ1lbHNl\nIGlmIChwYXJhbVR5cGUgPSA1KSB0aGVuIC0tIHB0ciArIHNpemUNcHV0IHR5cGVOYW1l\nICYgIiAqIiAmIGl0ZW0gNiBvZiB5ICYgIiwgbG9uZyAiICYgaXRlbSA3IG9mIHkgJiAi\nLCAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNiB0aGVuDWlmIGlu\nZGV4IDw+IDEgdGhlbiBwdXQgImNvbnN0ICIgYWZ0ZXIgdGVtcGxhdGUNcHV0ICJTdHJp\nbmdQdHIgIiAmIGl0ZW0gNiBvZiB5ICYgIiwgIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1\ndCBpdGVtIDEgb2YgeSAmICIsICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZiAt\nLSB1c2VJdA1lbmQgaWYgLS0gdXNlSXQNZW5kIHJlcGVhdA1pZiBwYXJhbUluZGV4ID4g\nMCB0aGVuDURlbGV0ZSBsYXN0IGNoYXIgb2YgdGVtcGxhdGUgLS0gc3BhY2Ugb3IgKA1w\ndXQgIikiIGludG8gbGFzdCBjaGFyIG9mIHRlbXBsYXRlIC0tIHJlcGxhY2UgLA1lbHNl\nDXB1dCAiKSIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDXJldHVybiB0ZW1wbGF0ZQ1lbmQg\nQ2xpZW50VGVtcGxhdGUNDWZ1bmN0aW9uIENsaWVudFNhbXBsZSBjYXJkVHlwZQ1nbG9i\nYWwgZGVmYXVsdFRhcmdldERlc2MsIGRlZmF1bHRUaW1lT3V0LCBkZWZhdWx0SWRsZVBy\nb2MsIGRlZmF1bHRBRUZpbHRlciwgZGVmYXVsdFNlbmRNb2RlLCBkZWZhdWx0VGFyZ2V0\nDWlmIGNhcmRUeXBlID0gImluaXQiIHRoZW4NaWYgZGVmYXVsdFRhcmdldERlc2MgaXMg\nZW1wdHkgdGhlbg1wdXQgInRhcmdldERlc2MiIGludG8gZGVmYXVsdFRhcmdldERlc2MN\ncHV0ICJ2b2lkIFRhcmdldEluaXQoKSIgJiByZXR1cm4gJiAieyIgJiByZXR1cm4gYWZ0\nZXIgcnN0DXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IFRhYiAmIHR3b1RhYiBp\nbnRvIHRocmVlVGFiDXB1dCBUYWIgJiB0aHJlZVRhYiBpbnRvIGZvdXJUYWINaWYgZGVm\nYXVsdFRhcmdldCA9ICJzZWxmIiB0aGVuDS0tIHNlbmQgdG8gc2VsZg1wdXQgVGFiICYg\nIlByb2Nlc3NTZXJpYWxOdW1iZXIgbXlQU04gPSB7MCwga0N1cnJlbnRQcm9jZXNzfTsi\nICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgVGFiICYgIkFFQ3JlYXRlRGVzYyh0eXBlUHJv\nY2Vzc1NlcmlhbE51bWJlciwgKFB0cikgJm15UFNOLCBzaXplb2YoUHJvY2Vzc1Nlcmlh\nbE51bWJlciksICZ0YXJnZXREZXNjKTsiICYgcmV0dXJuIGFmdGVyIHJzdA1lbHNlIGlm\nIGRlZmF1bHRUYXJnZXQgPD4gIiIgdGhlbg0tLSBzZW5kIHRvIHRhcmdldCBuYW1lDXB1\ndCBUYWIgJiAiY2hhciAqdGFyZ2V0TmFtZSA9IiAmIHF1b3RlICYgZGVmYXVsdFRhcmdl\ndCAmIHF1b3RlICYgIjsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgVGFiICYgIkFFQ29l\ncmNlUHRyKHR5cGVDaGFyLCAoUHRyKSB0YXJnZXROYW1lLCAiICYgTGVuZ3RoKGRlZmF1\nbHRUYXJnZXQpICYgIiwgdHlwZVRhcmdldElELCAmdGFyZ2V0RGVzYyk7IiAmIHJldHVy\nbiBhZnRlciByc3QNZWxzZQ0tLSB1c2UgUFBDIEJyb3dzZXINcHV0IHR3b1RhYiAmICJM\nb2NhdGlvbk5hbWVSZWMgdGhlTG9jYXRpb247IiAmIHJldHVybiBhZnRlciByc3QNcHV0\nIHR3b1RhYiAmICJQb3J0SW5mb1JlYyB0aGVQb3J0SW5mbzsiICYgcmV0dXJuIGFmdGVy\nIHJzdA1wdXQgdHdvVGFiICYgIlRhcmdldElEIGFUYXJnZXRJRDsiICYgcmV0dXJuIGFm\ndGVyIHJzdA1wdXQgVGFiICYgImlmICghUFBDQnJvd3NlcigiICYgcXVvdGUgJiAiXHAi\nICYgcXVvdGUgJiAiLCAiIMINJiBxdW90ZSAmICJccCIgJiBxdW90ZSAmIiwgZmFsc2Us\nICZ0aGVMb2NhdGlvbiwgJnRoZVBvcnRJbmZvLCBuaWwsICIgwg0mIHF1b3RlICYgIlxw\nIiAmIHF1b3RlICYgIikpIHsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgdHdvVGFiICYg\nImFUYXJnZXRJRC5sb2NhdGlvbiA9IHRoZUxvY2F0aW9uOyIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DXB1dCB0d29UYWIgJiAiYVRhcmdldElELm5hbWUgPSB0aGVQb3J0SW5mby5uYW1l\nOyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCB0d29UYWIgJiAiQUVDcmVhdGVEZXNjKHR5\ncGVUYXJnZXRJRCwgKFB0cikgJmFUYXJnZXRJRCwgc2l6ZW9mKFRhcmdldElEKSwgJnRh\ncmdldERlc2MpOyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBUYWIgJiAifTsiICYgcmV0\ndXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0IFRhYiAmICJ9IiAmIHJldHVybiAmIHJldHVy\nbiBhZnRlciByc3QNZW5kIGlmDWlmIGRlZmF1bHRJZGxlUHJvYyBpcyBlbXB0eSB0aGVu\nDXB1dCAibmlsIiBpbnRvIGRlZmF1bHRJZGxlUHJvYw1lbHNlDXB1dCAiJiIgYmVmb3Jl\nIGRlZmF1bHRJZGxlUHJvYw1lbmQgaWYNaWYgZGVmYXVsdEFFRmlsdGVyIGlzIGVtcHR5\nIHRoZW4NcHV0ICJuaWwiIGludG8gZGVmYXVsdEFFRmlsdGVyDWVsc2UNcHV0ICImIiBi\nZWZvcmUgZGVmYXVsdEFFRmlsdGVyDWVuZCBpZg1pZiBkZWZhdWx0VGltZU91dCBpcyBl\nbXB0eSB0aGVuDXB1dCAia0FFRGVmYXVsdFRpbWVPdXQiIGludG8gZGVmYXVsdFRpbWVP\ndXQNZW5kIGlmDXJldHVybiByc3QNZWxzZSBpZiBjYXJkVHlwZSA9ICJldmVudCIgdGhl\nbg1wdXQgQ2xpZW50VGVtcGxhdGUoKSAmIHJldHVybiAmICJ7IiAmIHJldHVybiBpbnRv\nIHByb2NIZWFkZXINcHV0IEdsdWVJbmZvKGZpZWxkICJwYXJhbUluZm8iKSBpbnRvIHBh\ncmFtSW5mbw1wdXQgbnVtYmVyIG9mIGxpbmVzIG9mIHBhcmFtSW5mbyBpbnRvIGNvdW50\nDXB1dCAiQUUiICYgU3RyaXBTUChmaWVsZCAiRXZlbnROYW1lIikgaW50byBwcm9jTmFt\nZQ1wdXQgKGl0ZW0gMyBvZiBwYXJhbUluZm8gPD4gIm51bGwiKSBpbnRvIGlzRnVuYw1w\ndXQgdGFiICYgdGFiIGludG8gdHdvVGFiDXB1dCB0YWIgJiB0d29UYWIgaW50byB0aHJl\nZVRhYg1wdXQgIk9TRXJyIGVycjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nICJBcHBsZUV2ZW50IHRoZUFwcGxlRXZlbnQsIHRoZVJlcGx5OyIgJiByZXR1cm4gYWZ0\nZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgInRoZUFwcGxlRXZlbnQuZGF0YUhhbmRsZSA9\nIG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAidGhlUmVwbHku\nZGF0YUhhbmRsZSA9IG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIg\nJiAiaWYgKGVyciA9IEFFQ3JlYXRlQXBwbGVFdmVudCgnIiAmIFJlc1R5cGUoZmllbGQg\nIkV2ZW50Q2xhc3MiKSDCDSYgIicsICciICYgUmVzVHlwZShmaWVsZCAiRXZlbnRJRCIp\nICYgIicsICYiICYgZGVmYXVsdFRhcmdldERlc2Mgwg0mICIsIGtBdXRvR2VuZXJhdGVS\nZXR1cm5JRCwga0FueVRyYW5zYWN0aW9uSUQsICZ0aGVBcHBsZUV2ZW50KSkiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiZ290byBDbGVhblVwOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcmVwZWF0IHdpdGggcGFyYW1JbmRleCA9IDIgdG8g\nY291bnQNcHV0IGxpbmUgcGFyYW1JbmRleCBvZiBwYXJhbUluZm8gaW50byB4DWlmIGl0\nZW0gMyBvZiB4IDw+ICJudWxsIiB0aGVuDXB1dCBpdGVtIDQgb2YgeCBpbnRvIHBhcmFt\nVHlwZQ1wdXQgKGl0ZW0gNSBvZiB4ID0gIm8iKSBpbnRvIGlzT3B0aW9uYWwNcHV0IE5h\nbWVPZkRhdGFUeXBlKGl0ZW0gMyBvZiB4KSBpbnRvIG5hbWVMaXN0DWlmIGlzT3B0aW9u\nYWwgdGhlbg1wdXQgdHdvVGFiIGludG8gaW5kZW50DWVsc2UNcHV0IFRhYiBpbnRvIGlu\nZGVudA1lbmQgaWYNcHV0IFN0cmlwU3AoaXRlbSAxIG9mIHgpIGludG8gdGhpc05hbWUN\naWYgKHBhcmFtVHlwZSA9IDApIG9yIChwYXJhbVR5cGUgPSAyKSB0aGVuIC0tIEFFRGVz\nYw1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRhYiAmICJpZiAoIiAmIGl0ZW0gNiBvZiB4\nICYgIikgeyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IGluZGVudCAmICJpZiAo\nZXJyID0gQUVQdXRLZXlEZXNjKCZ0aGVBcHBsZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCAm\nICIsICIgJiBpdGVtIDYgb2YgeCAmICIpKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IGluZGVudCAmIHRhYiAmICJnb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgVGFiICYgIn07IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbHNl\nDXB1dCBpbmRlbnQgJiAiaWYgKGVyciA9IEFFUHV0S2V5RGVzYygmdGhlQXBwbGVFdmVu\ndCwiICYgaXRlbSAyIG9mIHggJiAiLCAiICYgaXRlbSA2IG9mIHggJiAiKSkiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCBpbmRlbnQgJiBUYWIgJiAiZ290byBDbGVhblVw\nOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVsc2UgaWYgKHBhcmFtVHlw\nZSA9IDEpIG9yIChwYXJhbVR5cGUgPSAzKSB0aGVuIC0tIGhhbmRsZQ1wdXQgImRlc2NG\nb3IiICYgU3RyaXBTcChpdGVtIDEgb2YgeCkgaW50byBkZXNjRm9yVGhpc05hbWUNaWYg\naXNPcHRpb25hbCB0aGVuDXB1dCBUYWIgJiAiaWYgKCIgJiBpdGVtIDEgb2YgeCAmICIp\nIHsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgIkFFRGVzYyAiICYg\nZGVzY0ZvclRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIGluZGVudCAmIGRlc2NGb3JUaGlzTmFtZSAmICIuZGVzY3JpcHRvclR5cGUgPSAiICYg\naXRlbSA0IG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCBpbmRlbnQgJiBkZXNjRm9yVGhpc05hbWUgJiAiLmRhdGFIYW5kbGUgPSAoSGFuZGxl\nKSIgJiBpdGVtIDEgb2YgeCAmICI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\naW5kZW50ICYgImlmIChlcnIgPSBBRVB1dEtleURlc2MoJnRoZUFwcGxlRXZlbnQsIiAm\nIGl0ZW0gMiBvZiB4ICYgIiwmIiAmIGRlc2NGb3JUaGlzTmFtZSAmICIpKSIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IGluZGVudCAmIFRhYiAmICJnb3RvIENsZWFuVXA7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IGlu\nZGVudCAmICJ9OyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVsc2UgaWYg\ncGFyYW1UeXBlID0gNCB0aGVuDWlmIGlzT3B0aW9uYWwgdGhlbg1pZiBpdGVtIDMgb2Yg\neCA9ICJlbnVtIiB0aGVuDXB1dCBUYWIgJiAiaWYgKChsb25nKSIgJiBpdGVtIDEgb2Yg\neCAmICIpIHsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiaWYg\nKGVyciA9IEFFUHV0S2V5UHRyKCZ0aGVBcHBsZUV2ZW50LCAiICYgaXRlbSAyIG9mIHgg\nwg0mICIsICIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCAoUHRyKSAmIiAmIGl0ZW0g\nMSBvZiB4ICYgIiwgc2l6ZW9mKCIgwg0mIGl0ZW0gNSBvZiBuYW1lTGlzdCAmICIpKSki\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgaXRlbSAzIG9mIHggPSAidHJ1\nZSIgdGhlbg1wdXQgVGFiICYgImlmICgiICYgaXRlbSAxIG9mIHggJiAiKSB7IiAmIHJl\ndHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgImlmIChlcnIgPSBBRVB1dEtl\neVB0cigmdGhlQXBwbGVFdmVudCwgIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCB0eXBlVHJ1\nZSwgbmlsLCAwKSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IFRhYiAm\nICJpZiAoIiAmIGl0ZW0gNiBvZiB4ICYgIikgeyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IHR3b1RhYiAmICJpZiAoZXJyID0gQUVQdXRLZXlQdHIoJnRoZUFwcGxlRXZl\nbnQsICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAm\nICIsIChQdHIpICIgJiBpdGVtIDYgb2YgeCAmICIsIHNpemVvZigiIMINJiBpdGVtIDUg\nb2YgbmFtZUxpc3QgJiAiKSkpIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYN\ncHV0IHRocmVlVGFiICYgImdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0d29UYWIgJiAifSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZWxzZSAg\nLS0gcmVxdWlyZWQNcHV0IFRhYiAmICJpZiAoZXJyID0gQUVQdXRLZXlQdHIoJnRoZUFw\ncGxlRXZlbnQsICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1l\nTGlzdCAmICIsIChQdHIpICIgYWZ0ZXIgcHJvY0JvZHkNcHV0IGl0ZW0gNiBvZiBuYW1l\nTGlzdCBpbnRvIGRhdGFTaXplDWlmIChkYXRhU2l6ZSA8IDApIG9yIChkYXRhU2l6ZSA+\nIDQpIHRoZW4NcHV0IGl0ZW0gNiBvZiB4IGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0ICIm\nIiAmIGl0ZW0gMSBvZiB4IGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgIiwgc2l6ZW9m\nKCIgJiBpdGVtIDUgb2YgbmFtZUxpc3QgJiAiKSkpIiAmIHJldHVybiBhZnRlciBwcm9j\nQm9keQ1wdXQgdHdvVGFiICYgImdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHBy\nb2NCb2R5DWVuZCBpZg1lbHNlIGlmIChwYXJhbVR5cGUgPSA1KSBvciAocGFyYW1UeXBl\nID0gNykgdGhlbg1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRhYiAmICJpZiAoIiAmIGl0\nZW0gNiBvZiB4ICYgIikgeyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1\ndCBpbmRlbnQgJiAiaWYgKGVyciA9IEFFUHV0S2V5UHRyKCZ0aGVBcHBsZUV2ZW50LCAi\nICYgaXRlbSAyIG9mIHggwg0mICIsICIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCAo\nUHRyKSAiIGFmdGVyIHByb2NCb2R5DWlmIChwYXJhbVR5cGUgPSA1KSB0aGVuIC0tIHNp\nemUgaXMgdGhlIHBhcmFtZXRlcg1wdXQgaXRlbSA2IG9mIHggJiAiLCAiICYgaXRlbSA3\nIG9mIHggJiAiKSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IGl0ZW0g\nNiBvZiB4ICYgIiwgc3RybGVuKCIgJiBpdGVtIDYgb2YgeCAmICIpKSkiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgdHdvVGFiICYgImdvdG8gQ2xlYW5VcDsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgVGFi\nICYgIn07IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxzZSBpZiBwYXJh\nbVR5cGUgPSA2IHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBUYWIgJiAiaWYgKCIg\nJiBpdGVtIDYgb2YgeCAmICIpIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYN\ncHV0IGluZGVudCAmICJpZiAoZXJyID0gQUVQdXRLZXlQdHIoJnRoZUFwcGxlRXZlbnQs\nICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIs\nIChQdHIpIChjaGFyICopIiAmIGl0ZW0gNiBvZiB4IMINJiAiKzEsICoodW5zaWduZWQg\nY2hhciAqKSIgJiBpdGVtIDYgb2YgeCAmICIpKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IGluZGVudCAmIHRhYiAmICJnb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbmQgaWYNZW5kIGlmIC0tIG5vdCBudWxsDWVuZCByZXBlYXQNaWYg\naXNGdW5jIHRoZW4NcHV0IHRhYiAmICJpZiAoZXJyID0gQUVTZW5kKCZ0aGVBcHBsZUV2\nZW50LCAmdGhlUmVwbHksIGtBRVdhaXRSZXBseSIgYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1w\ndXQgdGFiICYgImVyciA9IEFFU2VuZCgmdGhlQXBwbGVFdmVudCwgJnRoZVJlcGx5LCBr\nQUVOb1JlcGx5IiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNaWYgZGVmYXVsdFNlbmRNb2Rl\nIGlzIG5vdCBlbXB0eSB0aGVuIHB1dCAifCIgJiBkZWZhdWx0U2VuZE1vZGUgYWZ0ZXIg\ncHJvY0JvZHkNcHV0ICIsIGtBRU5vcm1hbFByaW9yaXR5LCAiICYgZGVmYXVsdFRpbWVP\ndXQgJiAiLCIgJiYgZGVmYXVsdElkbGVQcm9jICYmICIsIiDCDSYgZGVmYXVsdEFFRmls\ndGVyICYgIikiIGFmdGVyIHByb2NCb2R5DWlmIGlzRnVuYyB0aGVuDXB1dCAiKSIgJiBy\nZXR1cm4gJiBUYWIgJiAiZ290byBDbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0ICJsb25nIHRoZUVycm47IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1\ndCAiRGVzY1R5cGUgdHlwZUNvZGU7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1\ndCAibG9uZyBhY3R1YWxTaXplOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQg\ndGFiICYgImlmIChBRUdldEtleVB0cigmdGhlUmVwbHksICdlcnJuJywgdHlwZUxvbmdJ\nbnRlZ2VyLCAmdHlwZUNvZGUsIiDCDSYmICIoUHRyKSAmdGhlRXJybiwgc2l6ZW9mKHRo\nZUVycm4pLCAmYWN0dWFsU2l6ZSkgIT0gZXJyQUVEZXNjTm90Rm91bmQpIHsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiLyogeW91ciBlcnJvciBoYW5k\nbGluZyBjb2RlIGhlcmUgKi8iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29U\nYWIgJiAifTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0tIGdldCB0aGUgcmVzdWx0\nDXB1dCBpdGVtIDQgb2YgcGFyYW1JbmZvIGludG8gcGFyYW1UeXBlDXB1dCBOYW1lT2ZE\nYXRhVHlwZShpdGVtIDMgb2YgcGFyYW1JbmZvKSBpbnRvIG5hbWVMaXN0DWlmIHBhcmFt\nVHlwZSA9IDAgdGhlbiAtLSByZXN1bHQgaXMgQUVEZXNjDXB1dCB0YWIgJiAiZXJyID0g\nQUVHZXRLZXlEZXNjKCZ0aGVBcHBsZUV2ZW50LCBrZXlEaXJlY3RPYmplY3QsICIgwg0m\nIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIHB0clRvVGhlUmVzdWx0KTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgKHBhcmFtVHlwZSA9IDEpIHRoZW4gLS0gcmVz\ndWx0IGlzIEhhbmRsZQ1wdXQgIkFFRGVzYyAgYURlc2M7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBUYWIgJiAiaWYgKGVyciA9IEFFR2V0S2V5RGVzYygmdGhlQXBw\nbGVFdmVudCwga2V5RGlyZWN0T2JqZWN0LCAiIMINJiBpdGVtIDQgb2YgbmFtZUxpc3Qg\nJiAiLCAmYURlc2MpKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAm\nICJnb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYg\nIipwdHJUb1RoZVJlc3VsdCA9IGFEZXNjLmRhdGFIYW5kbGU7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSByZXN1bHQgaXMg\nZml4ZWQgbGVuZ3RoDXB1dCBUYWIgJiAiZXJyID0gQUVHZXRLZXlQdHIoJnRoZVJlcGx5\nLCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsICZ0\neXBlQ29kZSwgKFB0cikgcHRyVG9UaGVSZXN1bHQsIHNpemVvZigiICYgaXRlbSA1IG9m\nIG5hbWVMaXN0ICYgIikiIMINJiAiLCAmYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDYgdGhlbiAtLSByZXN1bHQgaXMg\nc3RyMjU1DXB1dCBUYWIgJiAiaWYgKGVyciA9IEFFR2V0S2V5UHRyKCZ0aGVSZXBseSwg\na2V5RGlyZWN0T2JqZWN0LCAiIMINJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCAmdHlw\nZUNvZGUsIChQdHIpIHB0clRvVGhlUmVzdWx0KzEsIDI1NSIgwg0mICIsICZhY3R1YWxT\naXplKSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiZ290byBD\nbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJpZiAoYWN0\ndWFsU2l6ZSA+IDI1NSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIg\nJiAiYWN0dWFsU2l6ZSA9IDI1NTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBU\nYWIgJiAiKih1bnNpZ25lZCBjaGFyICopcHRyVG9UaGVSZXN1bHQgPSAodW5zaWduZWQg\nY2hhcikgYWN0dWFsU2l6ZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1l\nbHNlDXB1dCAiOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkgLS0gZW5kIG9mIEFFU2Vu\nZA1lbmQgaWYNcHV0ICJDbGVhblVwOiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIFRhYiAmICJBRURpc3Bvc2VEZXNjKCZ0aGVBcHBsZUV2ZW50KTsiICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DXB1dCBUYWIgJiAiQUVEaXNwb3NlRGVzYygmdGhlUmVwbHkpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHRhYiAmICJyZXR1cm4gZXJyOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0ICJ9IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1pZiB2YXJEZWNsYXJlIDw+ICIiIHRoZW4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbnVt\nYmVyIG9mIGxpbmVzIGluIHZhckRlY2xhcmUNcHV0IFRhYiAmIGxpbmUgaSBvZiB2YXJE\nZWNsYXJlICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINZW5kIHJlcGVhdA1lbmQgaWYN\ncmV0dXJuIHByb2NIZWFkZXIgJiByZXR1cm4gJiBwcm9jQm9keSAmIHJldHVybg1lbHNl\nDXJldHVybiAiIg1lbmQgaWYNRW5kIENsaWVudFNhbXBsZQ0AAP//ABAAU2VydmVyIExh\nbmd1YWdl//wAEABDbGllbnQgTGFuZ3VhZ2X/9QAOAFRpbWVvdXQgVmFsdWX/9AAFADEy\nMDAA//AADgBSZXNvdXJjZSBUeXBl/+wACgBTZW5kIE1vZGX/6wAKAElkbGUgUHJvY//q\nAAkAriBGaWx0ZXIA/+UAEgBUYXJnZXQgRGVzY3JpcHRvcv/dAAUAYWV0ZQD/3AAMAFBy\nZWZlcmVuY2Vz/9gADABSZXNvdXJjZSBJRP/WAAUATmFtZQD/1AAIAFZlcnNpb27/0gAC\nAC7/0AAOAExhbmd1YWdlIENvZGX/zgAMAFNjcmlwdCBDb2Rl/9MAAgAx/9EAAgAw/88A\nAgAw/80AAgAw/9cAAgAw/8ge04AKAAAABB7JABFjQUVMaXN0PSJsaXN0Ig1jQXBwbGlj\nYXRpb249ImNhcHAiDWNBcmM9ImNhcmMiDWNCb29sZWFuPSJib29sIg1jQ2VsbD0iY2Nl\nbCINY0NoYXI9ImNoYSAiDWNDb2xvclRhYmxlPSJjbHJ0Ig1jQ29sdW1uPSJjY29sIg1j\nRG9jdW1lbnQ9ImRvY3UiDWNEcmF3aW5nQXJlYT0iY2RydyINY0VudW1lcmF0aW9uPSJl\nbnVtIg1jRmlsZT0iZmlsZSINY0ZpeGVkPSJmaXhkIg1jR3JhcGhpY0xpbmU9ImdsaW4i\nDWNHcmFwaGljT2JqZWN0PSJjZ29iIg1jR3JhcGhpY1NoYXBlPSJjZ3NoIg1jR3JhcGhp\nY1RleHQ9ImNndHgiDWNHcm91cGVkR3JhcGhpYz0iY3BpYyINY0luc2VydGlvbkxvYz0i\naW5zbCINY0ludGxUZXh0PSJpdHh0Ig1jSW50bFdyaXRpbmdDb2RlPSJpbnRsIg1jSXRl\nbT0iY2l0bSINY0xpbmU9ImNsaW4iDWNMb25nSW50ZWdlcj0ibG9uZyINY01lbnU9ImNt\nbnUiDWNNZW51SXRlbT0iY21lbiINY09iamVjdD0iY29iaiINY09iamVjdFNwZWNpZmll\ncj0ib2JqICINY09wZW5hYmxlT2JqZWN0PSJjb29iIg1jT3ZhbD0iY292bCINY1BhcmFn\ncmFwaD0iY3BhciINY1BpeGVsPSJjcHhsIg1jUGl4ZWxNYXA9ImNwaXgiDWNQb2x5Z29u\nPSJjcGduIg1jUURQb2ludD0iUURwdCINY1FEUmVjdGFuZ2xlPSJxZHJ0Ig1jUmVjdGFu\nZ2xlPSJjcmVjIg1jUkdCQ29sb3I9ImNSR0IiDWNSb3RhdGlvbj0idHJvdCINY1JvdW5k\nZWRSZWN0YW5nbGU9ImNycmMiDWNSb3c9ImNyb3ciDWNTZWxlY3Rpb249ImNzZWwiDWNT\naG9ydEludGVnZXI9InNob3IiDWNUYWJsZT0iY3RibCINY1RleHQ9ImN0eHQiDWNUZXh0\nRmxvdz0iY2ZsbyINY1RleHRTdHlsZXM9InRzdHkiDWNUeXBlPSJ0eXBlIg1jV2luZG93\nPSJjd2luIg1jV29yZD0iY3dvciINa0FFQWJvdXQ9ImFib3UiDWtBRUFmdGVyPSJhZnRl\nIg1rQUVBbGlhc1NlbGVjdGlvbj0ic2FsaSINa0FFQWxsQ2Fwcz0iYWxjcCINa0FFQXJy\nb3dBdEVuZD0iYXJlbiINa0FFQXJyb3dBdFN0YXJ0PSJhcnN0Ig1rQUVBcnJvd0JvdGhF\nbmRzPSJhcmJvIg1rQUVBc2s9ImFzayAiDWtBRUJlZm9yZT0iYmVmbyINa0FFQmVnaW5u\naW5nPSJiZ25nIg1rQUVCZWdpbnNXaXRoPSJiZ3d0Ig1rQUVCZWdpblRyYW5zYWN0aW9u\nPSJiZWdpIg1rQUVCb2xkPSJib2xkIg1rQUVDYXNlU2Vuc0VxdWFscz0iY3NlcSINa0FF\nQ2VudGVyZWQ9ImNlbnQiDWtBRUNoYW5nZVZpZXc9InZpZXciDWtBRUNsb25lPSJjbG9u\nIg1rQUVDbG9zZT0iY2xvcyINa0FFQ29uZGVuc2VkPSJjb25kIg1rQUVDb250YWlucz0i\nY29udCINa0FFQ29weT0iY29weSINa0FFQ29yZVN1aXRlPSJjb3JlIg1rQUVDb3VudEVs\nZW1lbnRzPSJjbnRlIg1rQUVDcmVhdGVFbGVtZW50PSJjcmVsIg1rQUVDcmVhdGVQdWJs\naXNoZXI9ImNwdWIiDWtBRUN1dD0iY3V0ICINa0FFRGVsZXRlPSJkZWxvIg1rQUVEb09i\namVjdHNFeGlzdD0iZG9leCINa0FFRG9TY3JpcHQ9ImRvc2MiDWtBRURyYWc9ImRyYWci\nDWtBRUR1cGxpY2F0ZVNlbGVjdGlvbj0ic2R1cCINa0FFRWRpdEdyYXBoaWM9ImVkaXQi\nDWtBRUVtcHR5VHJhc2g9ImVtcHQiDWtBRUVuZD0iZW5kICINa0FFRW5kc1dpdGg9ImVu\nZHMiDWtBRUVuZFRyYW5zYWN0aW9uPSJlbmR0Ig1rQUVFcXVhbHM9Ij0gICAiDWtBRUV4\ncGFuZGVkPSJwZXhwIg1rQUVGYXN0PSJmYXN0Ig1rQUVGaW5kZXJFdmVudHM9IkZORFIi\nDWtBRUZvcm11bGFQcm90ZWN0PSJmcHJvIg1rQUVGdWxseUp1c3RpZmllZD0iZnVsbCIN\na0FFR2V0Q2xhc3NJbmZvPSJxb2JqIg1rQUVHZXREYXRhPSJnZXRkIg1rQUVHZXREYXRh\nU2l6ZT0iZHNpeiINa0FFR2V0RXZlbnRJbmZvPSJndGVpIg1rQUVHZXRJbmZvU2VsZWN0\naW9uPSJzaW5mIg1rQUVHZXRQcml2aWxlZ2VTZWxlY3Rpb249InNwcnYiDWtBRUdyZWF0\nZXJUaGFuPSI+ICAgIg1rQUVHcmVhdGVyVGhhbkVxdWFscz0iPj0gICINa0FFR3Jvdz0i\nZ3JvdyINa0FFSGlkZGVuPSJoaWRuIg1rQUVIaVF1YWxpdHk9ImhpcXUiDWtBRUltYWdl\nR3JhcGhpYz0iaW1nciINIiJrQUVJbmZvPTExDWtBRUlzVW5pZm9ybT0iaXN1biINa0FF\nSXRhbGljPSJpdGFsIg1rQUVMZWZ0SnVzdGlmaWVkPSJsZWZ0Ig1rQUVMZXNzVGhhbj0i\nPCAgICINa0FFTGVzc1RoYW5FcXVhbHM9Ijw9ICAiDWtBRUxvd2VyY2FzZT0ibG93YyIN\nIiJrQUVNYWluPTANa0FFTWFrZU9iamVjdHNWaXNpYmxlPSJtdmlzIg1rQUVNaXNjU3Rh\nbmRhcmRzPSJtaXNjIg1rQUVNb2RpZmlhYmxlPSJtb2RmIg1rQUVNb3ZlPSJtb3ZlIg1r\nQUVObz0ibm8gICINa0FFTm9BcnJvdz0iYXJubyINa0FFTm9ubW9kaWZpYWJsZT0ibm1v\nZCINa0FFT3Blbj0ib2RvYyINa0FFT3BlblNlbGVjdGlvbj0ic29wZSINa0FFT3V0bGlu\nZT0ib3V0bCINa0FFUGFnZVNldHVwPSJwZ3N1Ig1rQUVQYXN0ZT0icGFzdCINa0FFUGxh\naW49InBsYW4iDWtBRVByaW50PSJwZG9jIg1rQUVQcmludFNlbGVjdGlvbj0ic3ByaSIN\na0FFUHJpbnRXaW5kb3c9InB3aW4iDWtBRVB1dEF3YXlTZWxlY3Rpb249InNwdXQiDWtB\nRVFEQWRkT3Zlcj0iYWRkbyINa0FFUURBZGRQaW49ImFkZHAiDWtBRVFEQWRNYXg9ImFk\nbXgiDWtBRVFEQWRNaW49ImFkbW4iDWtBRVFEQmljPSJiaWMgIg1rQUVRREJsZW5kPSJi\nbG5kIg1rQUVRRENvcHk9ImNweSAiDWtBRVFETm90QmljPSJuYmljIg1rQUVRRE5vdENv\ncHk9Im5jcHkiDWtBRVFETm90T3I9Im50b3IiDWtBRVFETm90WG9yPSJueG9yIg1rQUVR\nRE9yPSJvciAgIg1rQUVRRFN1Yk92ZXI9InN1Ym8iDWtBRVFEU3ViUGluPSJzdWJwIg1r\nQUVRRFhvcj0ieG9yICINa0FFUmVkbz0icmVkbyINa0FFUmVndWxhcj0icmVnbCINa0FF\nUmVwbGFjZT0icnBsYyINa0FFUmV2ZWFsU2VsZWN0aW9uPSJzcmV2Ig1rQUVSZXZlcnQ9\nInJ2cnQiDWtBRVJpZ2h0SnVzdGlmaWVkPSJyZ2h0Ig1rQUVTYXZlPSJzYXZlIg1rQUVT\nZXREYXRhPSJzZXRkIg1rQUVTZXRQb3NpdGlvbj0icG9zbiINa0FFU2hhZG93PSJzaGFk\nIg0iImtBRVNoYXJpbmc9MTMNa0FFU2hvd0NsaXBib2FyZD0ic2hjbCINa0FFU2xlZXA9\nInNsZXAiDWtBRVNtYWxsQ2Fwcz0ic21jcCINa0FFU3RyaWtldGhyb3VnaD0ic3RyayIN\na0FFU3Vic2NyaXB0PSJzYnNjIg1rQUVTdXBlcnNjcmlwdD0ic3BzYyINa0FFVHJhbnNh\nY3Rpb25UZXJtaW5hdGVkPSJ0dHJtIg1rQUVVbmRlcmxpbmU9InVuZGwiDWtBRVVuZG89\nInVuZG8iDWtBRVdob2xlV29yZEVxdWFscz0id3dlcSINa0FFWWVzPSJ5ZXMgIg1rQUVa\nb29tPSJ6b29tIg0iImtCeUNvbW1lbnRWaWV3PTYNIiJrQnlEYXRlVmlldz0zDSIia0J5\nSWNvblZpZXc9MQ0iImtCeUtpbmRWaWV3PTUNIiJrQnlMYWJlbFZpZXc9Nw0iImtCeU5h\nbWVWaWV3PTINIiJrQnlTaXplVmlldz00DSIia0J5U21hbGxJY29uPTANIiJrQnlWZXJz\naW9uVmlldz04DWtleUFFQW5nbGU9ImthbmciDWtleUFFQXJjQW5nbGU9ImtlbmQiDWtl\neUFFQmFzZUFkZHI9ImJhZGQiDWtleUFFQmduZENvbG9yPSJrYmNsIg1rZXlBRUJnbmRQ\nYXR0ZXJuPSJrYnB0Ig1rZXlBRUJvdW5kcz0ia2JuZCINa2V5QUVDZWxsTGlzdD0ia2Ns\ndCINa2V5QUVDbGFzc0lEPSJjbElEIg1rZXlBRUNvbG9yPSJrY2xyIg1rZXlBRUNvbG9y\nVGFibGU9ImtjbHMiDWtleUFFQ3VydmVIZWlnaHQ9ImtjaGQiDWtleUFFQ3VydmVXaWR0\naD0ia2N3ZCINa2V5QUVEYXNoU3R5bGU9ImRzdHkiDWtleUFFRGF0YT0iZGF0YSINa2V5\nQUVEZWZpbml0aW9uUmVjdD0ia2RlZiINa2V5QUVEZXNjVHlwZT0iZHN0cCINa2V5QUVE\nZXN0aW5hdGlvbj0iZGVzdCINa2V5QUVEb0FudGlBbGlhcz0iYW50YSINa2V5QUVEb0Rp\ndGhlcmVkPSJnZGl0Ig1rZXlBRURvUm90YXRlPSJrZHJ0Ig1rZXlBRURvU2NhbGU9Imtz\nY2EiDWtleUFFRG9UcmFuc2xhdGU9Imt0cmEiDWtleUFFRWRpdGlvbkZpbGVMb2M9ImVs\nb2MiDWtleUFFRWxlbWVudHM9ImVsbXMiDWtleUFFRW5kUG9pbnQ9ImtlZHAiDWtleUFF\nRXZlbnRDbGFzcz0iZXZjbCINa2V5QUVFdmVudElEPSJldnRpIg1rZXlBRUZpbGU9Imtm\naWwiDWtleUFFRmlsZVR5cGU9ImZsdHAiDWtleUFFRmlsbENvbG9yPSJrZmNsIg1rZXlB\nRUZpbGxQYXR0ZXJuPSJrZnB0Ig1rZXlBRUZsaXBIb3Jpem9udGFsPSJrZmhvIg1rZXlB\nRUZsaXBWZXJ0aWNhbD0ia2Z2dCINa2V5QUVGb250PSJrZm50Ig1rZXlBRUZvcm11bGE9\nImtmbGEiDWtleUFFR3JhcGhpY09iamVjdHM9ImtncnMiDWtleUFFSW1hZ2VRdWFsaXR5\nPSJncXVhIg1rZXlBRUluc2VydEhlcmU9Imluc2giDWtleUFFS2V5Rm9ybXM9ImtleWYi\nDWtleUFFS2V5d29yZD0ia3l3ZCINa2V5QUVMaW5lQXJyb3c9ImxuYXIiDWtleUFFTmFt\nZT0ia25hbSINa2V5QUVOZXdFbGVtZW50TG9jPSJrbmVsIg1rZXlBRU9iamVjdD0ia29i\naiINa2V5QUVPYmplY3RDbGFzcz0ia29jbCINa2V5QUVPZmZTdHlsZXM9Im9mc3QiDWtl\neUFFT25TdHlsZXM9Im9uc3QiDWtleUFFUGFyYW1ldGVycz0icHJtcyINa2V5QUVQYXJh\nbUZsYWdzPSJwbWZnIg1rZXlBRVBlbkNvbG9yPSJrcGNsIg1rZXlBRVBlblBhdHRlcm49\nImtwYXQiDWtleUFFUGVuV2lkdGg9Imtwd2QiDWtleUFFUGl4ZWxEZXB0aD0ia3BkcCIN\na2V5QUVQaXhNYXBNaW51cz0ia3BtbSINa2V5QUVQTVRhYmxlPSJrcG10Ig1rZXlBRVBv\naW50TGlzdD0ia3B0cyINa2V5QUVQb2ludFNpemU9ImtwdHoiDWtleUFFUG9zaXRpb249\nImtwb3MiDWtleUFFUHJvcERhdGE9InByZHQiDWtleUFFUHJvcGVydGllcz0icXBybyIN\na2V5QUVQcm9wZXJ0eT0ia3BycCINa2V5QUVQcm9wRmxhZ3M9InByZmciDWtleUFFUHJv\ncElEPSJwcm9wIg1rZXlBRVByb3RlY3Rpb249ImtwdGMiDWtleUFFUmVuZGVyQXM9Imty\nZW4iDWtleUFFUmVxdWVzdGVkVHlwZT0icnR5cCINa2V5QUVSZXN1bHQ9Ii0tLS0iDWtl\neUFFUmVzdWx0SW5mbz0icnNpbiINa2V5QUVSb3RhdGlvbj0ia3JvdCINa2V5QUVSb3RQ\nb2ludD0ia3J0cCINa2V5QUVSb3dMaXN0PSJrcmxzIg1rZXlBRVNhdmVPcHRpb25zPSJz\nYXZvIg1rZXlBRVNjYWxlPSJrc2NsIg1rZXlBRVNjcmlwdFRhZz0ia1N0ZyINa2V5QUVT\naG93V2hlcmU9InNob3ciDWtleUFFU3RhcnRBbmdsZT0ia3N0YSINa2V5QUVTdGFydFBv\naW50PSJrc3RyIg1rZXlBRVN0eWxlcz0ia3N0eSINa2V5QUVUZXh0PSJrdHh0Ig1rZXlB\nRVRleHRDb2xvcj0ia3R4YyINa2V5QUVUZXh0Rm9udD0ia3R4ZiINa2V5QUVUZXh0UG9p\nbnRTaXplPSJrdHBzIg1rZXlBRVRleHRTdHlsZXM9InR4dHMiDWtleUFFVGhlVGV4dD0i\ndGh0eCINa2V5QUVUcmFuc2Zlck1vZGU9Imt0cm4iDWtleUFFVHJhbnNsYXRpb249Imt0\ncmwiDWtleUFFVHJ5QXNTdHJ1Y3RHcmFmPSJ0b29nIg1rZXlBRVVuaWZvcm1TdHlsZXM9\nInVuaXMiDWtleUFFVXBkYXRlT249Imt1cGQiDWtleUFFVXNlclRlcm09InV0cm0iDWtl\neUFFV2luZG93PSJ3bmR3Ig1rZXlBRVdyaXRpbmdDb2RlPSJ3cmNkIg1rZXlNaXNjZWxs\nYW5lb3VzPSJmbXNjIg1rZXlTZWxlY3Rpb249ImZzZWwiDWtleVdpbmRvdz0ia3duZCIN\ncEFyY0FuZ2xlPSJwYXJjIg1wQmFja2dyb3VuZENvbG9yPSJwYmNsIg1wQmFja2dyb3Vu\nZFBhdHRlcm49InBicHQiDXBCZXN0VHlwZT0icGJzdCINcEJvdW5kcz0icGJuZCINcENs\nYXNzPSJwY2xzIg1wQ2xpcGJvYXJkPSJwY2xpIg1wQ29sb3I9ImNvbHIiDXBDb2xvclRh\nYmxlPSJjbHRiIg1wQ29ybmVyQ3VydmVIZWlnaHQ9InBjaGQiDXBDb3JuZXJDdXJ2ZVdp\nZHRoPSJwY3dkIg1wRGFzaFN0eWxlPSJwZHN0Ig1wRGVmYXVsdFR5cGU9ImRlZnQiDXBE\nZWZpbml0aW9uUmVjdD0icGRydCINcEVuYWJsZWQ9ImVuYmwiDXBFbmRQb2ludD0icGVu\nZCINcEZpbGxDb2xvcj0iZmxjbCINcEZpbGxQYXR0ZXJuPSJmbHB0Ig1wRm9udD0iZm9u\ndCINcEZvcm11bGE9InBmb3IiDXBHcmFwaGljT2JqZWN0cz0iZ29icyINcEhhc0Nsb3Nl\nQm94PSJoY2xiIg1wSGFzVGl0bGVCYXI9InB0aXQiDXBJbmRleD0icGlkeCINcEluc2Vy\ndGlvbkxvYz0icGlucyINcElzRmxvYXRpbmc9ImlzZmwiDXBJc0Zyb250UHJvY2Vzcz0i\ncGlzZiINcElzTW9kYWw9InBtb2QiDXBJc01vZGlmaWVkPSJpbW9kIg1wSXNSZXNpemFi\nbGU9InByc3oiDXBJc1N0YXRpb25lcnlQYWQ9InBzcGQiDXBJc1pvb21hYmxlPSJpc3pt\nIg1wSXNab29tZWQ9InB6dW0iDXBJdGVtTnVtYmVyPSJpdG1uIg1wSnVzdGlmaWNhdGlv\nbj0icGpzdCINcExpbmVBcnJvdz0iYXJybyINcE1lbnVJRD0ibW5pZCINcE5hbWU9InBu\nYW0iDXBOZXdFbGVtZW50TG9jPSJwbmVsIg1wUGVuQ29sb3I9InBwY2wiDXBQZW5QYXR0\nZXJuPSJwcHBhIg1wUGVuV2lkdGg9InBwd2QiDXBQaXhlbERlcHRoPSJwZHB0Ig1wUG9p\nbnRMaXN0PSJwdGx0Ig1wUG9pbnRTaXplPSJwdHN6Ig1wUHJvdGVjdGlvbj0icHBybyIN\ncFJvdGF0aW9uPSJwcm90Ig1wU2NhbGU9InBzY2wiDXBTY3JpcHRUYWc9InBzY3QiDXBT\nZWxlY3Rpb249InNlbGUiDXBTdGFydEFuZ2xlPSJwYW5nIg1wU3RhcnRQb2ludD0icHN0\ncCINcFRleHRDb2xvcj0icHR4YyINcFRleHRGb250PSJwdHhmIg1wVGV4dEl0ZW1EZWxp\nbWl0ZXJzPSJ0eGRsIg1wVGV4dFBvaW50U2l6ZT0icHRwcyINcFRleHRTdHlsZXM9InR4\nc3QiDXBUcmFuc2Zlck1vZGU9InBwdG0iDXBUcmFuc2xhdGlvbj0icHRycyINcFVuaWZv\ncm1TdHlsZXM9InVzdGwiDXBVcGRhdGVPbj0icHVwZCINcFVzZXJTZWxlY3Rpb249InB1\nc2wiDXBWZXJzaW9uPSJ2ZXJzIg1wVmlzaWJsZT0icHZpcyINdHlwZUFFVGV4dD0idFRY\nVCINdHlwZUFwcGxlRXZlbnQ9IkFFVlQiDXR5cGVBcmM9InRhcmMiDXR5cGVCZXN0PSJi\nZXN0Ig10eXBlQ2VsbD0iY2VsbCINdHlwZUNsYXNzSW5mbz0iY2xpbiINdHlwZUNvbG9y\nVGFibGU9ImNscnQiDXR5cGVDb2x1bW49ImNvbG0iDXR5cGVEYXNoU3R5bGU9InRkYXMi\nDXR5cGVEYXRhPSJ0ZHRhIg10eXBlRHJhd2luZ0FyZWE9InRkYXIiDXR5cGVFbGVtSW5m\nbz0iZWxpbiINdHlwZUVQUz0iRVBTICINdHlwZUV2ZW50SW5mbz0iZXZpbiINdHlwZUZp\nbmRlcldpbmRvdz0iZndpbiINdHlwZUZpeGVkPSJmaXhkIg10eXBlR3JhcGhpY0xpbmU9\nInRnbG4iDXR5cGVHcmFwaGljVGV4dD0iZ3R4dCINdHlwZUdyb3VwZWRHcmFwaGljPSJ0\nZ3J1Ig10eXBlSW5zZXJ0aW9uTG9jPSJpbnNsIg10eXBlSW50bFRleHQ9Iml0eHQiDXR5\ncGVJbnRsV3JpdGluZ0NvZGU9ImludGwiDXR5cGVPdmFsPSJ0b3ZsIg10eXBlUGFyYW1J\nbmZvPSJwbWluIg10eXBlUGljdD0iUElDVCINdHlwZVBpeGVsTWFwPSJ0cGl4Ig10eXBl\nUGl4TWFwTWludXM9InRwbW0iDXR5cGVQb2x5Z29uPSJ0cG9sIg10eXBlUHJvcEluZm89\nInBpbmYiDXR5cGVRRFBvaW50PSJRRHB0Ig10eXBlUURSZWN0YW5nbGU9InFkcnQiDXR5\ncGVSZWN0YW5nbGU9InJjdGUiDXR5cGVSR0IxNj0idHIxNiINdHlwZVJHQjk2PSJ0cjk2\nIg10eXBlUkdCQ29sb3I9IlJHQiAiDXR5cGVSb3RhdGlvbj0idHJvdCINdHlwZVJvdW5k\nZWRSZWN0YW5nbGU9InRyZHIiDXR5cGVSb3c9InJvdyAiDXR5cGVTY3JhcFN0eWxlcz0i\nc3R5bCINdHlwZVN0eWxlZFRleHQ9IlNUWFQiDXR5cGVUYWJsZT0idGFibCINdHlwZVRl\neHRTdHlsZXM9InRzdHkiDXR5cGVUSUZGPSJUSUZGIg0iInpvb21Jbj03DSIiem9vbU91\ndD04DWVudW1TYXZlT3B0aW9ucz0ic2F2byINZW51bVBvc2l0aW9uPSJwb3NpIg1lbnVt\nS2V5Rm9ybT0ia2ZybSINZW51bVN0eWxlPSJzdHlsIg1lbnVtSnVzdGlmaWNhdGlvbj0i\nanVzdCINZW51bVByb3RlY3Rpb249InBydG4iDWVudW1UcmFuc2Zlck1vZGU9InRyYW4i\nDWVudW1BcnJvd3M9ImFycm8iDWVudW1RdWFsaXR5PSJxdWFsIg1rQUVJbmRleD0iaW5k\neCINa0FFTmFtZT0ibmFtZSINa0FFSWRlbnRpZmllcj0iaWQgICINa0FFUmVxdWlyZWRT\ndWl0ZT0icmVxZCINa0FFVGV4dFN1aXRlPSJURVhUIg1rQUVRdWlja0RyYXdTdWl0ZT0i\ncWRydyINa0FFUURTdXBwbGVtZW50YWxTdWl0ZT0icWRzcCINa0FFVGFibGVTdWl0ZT0i\ndGJscyIA/+0ACwBDb3JlU2FtcGxlAP/VABEAQ29yZVNhbXBsZSBTdWl0ZQBwcmVmZXJl\nbmNlAG9uIG1vdXNlVXANaWYgd29yZCAxIHRvIDIgb2YgbG9uZyBuYW1lIG9mIHRhcmdl\ndCA9ICJjYXJkIGJ1dHRvbiIgdGhlbg1wdXQgaWQgb2YgdGFyZ2V0IGludG8gaQ1wdXQg\nUHJlZmVyQ2xpZW50TGFuZ0J1dHRvbklEKCkgaW50byBjbGllbnRMaXN0DXB1dCBQcmVm\nZXJTZXJ2ZXJMYW5nQnV0dG9uSUQoKSBpbnRvIHNlcnZlckxpc3QNaWYgQ2hlY2tHcm91\ncChpLFByZWZlclNlcnZlckxhbmdCdXR0b25JRCgpKSB0aGVuDWVsc2UgaWYgQ2hlY2tH\ncm91cChpLFByZWZlckNsaWVudExhbmdCdXR0b25JRCgpKSB0aGVuDWVsc2UNcGFzcyBt\nb3VzZVVwDWVuZCBpZg1zZXQgaGlsaXRlIG9mIGNhcmQgYnV0dG9uIGlkIGkgdG8gdHJ1\nZQ1lbmQgaWYNZW5kIG1vdXNlVXANDWZ1bmN0aW9uIENoZWNrR3JvdXAgdGhlTnVtLHRo\nZUxpc3QNcHV0IG51bWJlciBvZiBpdGVtcyBpbiB0aGVMaXN0IGludG8gbg1yZXBlYXQg\nd2l0aCBpID0gMSB0byBuDWlmIGl0ZW0gaSBvZiB0aGVMaXN0ID0gdGhlTnVtIHRoZW4N\ncmVwZWF0IHdpdGggaiA9IDEgdG8gbg1zZXQgaGlsaXRlIG9mIGNhcmQgYnV0dG9uIGlk\nIChpdGVtIGogb2YgdGhlTGlzdCkgdG8gZmFsc2UNZW5kIHJlcGVhdA1yZXR1cm4gdHJ1\nZQ1lbmQgaWYNZW5kIHJlcGVhdA1yZXR1cm4gZmFsc2UNZW5kIENoZWNrR3JvdXANDWZ1\nbmN0aW9uIFdoaWNoSW5Hcm91cCB0aGVMaXN0DXB1dCBudW1iZXIgb2YgaXRlbXMgaW4g\ndGhlTGlzdCBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1pZiBoaWxpdGUgb2Yg\nY2FyZCBidXR0b24gaWQgKGl0ZW0gaSBvZiB0aGVMaXN0KSB0aGVuDXJldHVybiBpdGVt\nIGkgb2YgdGhlTGlzdA1lbmQgaWYNZW5kIHJlcGVhdA1lbmQgV2hpY2hJbkdyb3VwDQ1v\nbiBjbG9zZUNhcmQNZ2xvYmFsIGNsaWVudExhbmcsY2xpZW50SGFzR2x1ZSxzZXJ2ZXJM\nYW5nDXB1dCBjbGllbnRMYW5nIGludG8gY3VyU2NyaXB0DXB1dCBzZXJ2ZXJMYW5nIGlu\ndG8gY3VyU2VydmVyDXB1dCBjbGllbnRIYXNHbHVlIGludG8gY3VyR2x1ZQ1DaGVja1By\nZWZlcmVuY2UNaWYgKGN1clNjcmlwdCA8PiBjbGllbnRMYW5nKSB0aGVuDXB1dCB0aGUg\nc2NyaXB0IG9mIGNhcmQgYnV0dG9uIGlkIFdoaWNoSW5Hcm91cChQcmVmZXJDbGllbnRM\nYW5nQnV0dG9uSUQoKSkgaW50byBidG5TY3JpcHQNcHV0IFNlYXJjaChidG5TY3JpcHQs\nICJmdW5jdGlvbiBDbGllbnRUZW1wbGF0ZSIsIHRydWUsIGZhbHNlKSBpbnRvIGxpbmVM\naXN0DXB1dCBpdGVtIDEgb2YgbGluZUxpc3QgaW50byBjbG50VG1wbFN0YXJ0DXB1dCBT\nZWFyY2goYnRuU2NyaXB0LCAiZnVuY3Rpb24gQ2xpZW50U2FtcGxlIiwgdHJ1ZSwgZmFs\nc2UpIGludG8gbGluZUxpc3QNcHV0IGl0ZW0gMSBvZiBsaW5lTGlzdCBpbnRvIGNsbnRT\nbXBsU3RhcnQNcHV0IHRoZSBzY3JpcHQgb2YgYmtnbmQgImV2ZW50cyIgaW50byBvcmdT\nY3JpcHQNcHV0IFNlYXJjaChvcmdTY3JpcHQsICItLSBsYW5ndWFnZSIsIHRydWUsIGZh\nbHNlKSBpbnRvIGxpbmVMaXN0DXB1dCBpdGVtIDEgb2YgbGluZUxpc3QgaW50byB4DWlm\nIHggPiAwIHRoZW4NcHV0IHJldHVybiAmIChsaW5lIGNsbnRUbXBsU3RhcnQgdG8gY2xu\ndFNtcGxTdGFydC0xIG9mIGJ0blNjcmlwdCkgwg1pbnRvIGxpbmUgeCsxIHRvIDMwMDAw\nIG9mIG9yZ1NjcmlwdA1zZXQgdGhlIHNjcmlwdCBvZiBia2duZCAiZXZlbnRzIiB0byBv\ncmdTY3JpcHQNZW5kIGlmDWRlbGV0ZSBsaW5lIDEgdG8gKGNsbnRTbXBsU3RhcnQtMSkg\nb2YgYnRuU2NyaXB0DXB1dCB0aGUgc2NyaXB0IG9mIGNhcmQgYnV0dG9uICJjbGllbnQg\nY29kZSIgb2YgY2FyZCAiTWFpbk1lbnUiIGludG8gb3JnU2NyaXB0DXB1dCBTZWFyY2go\nb3JnU2NyaXB0LCAiLS0gbGFuZ3VhZ2UiLCB0cnVlLCBmYWxzZSkgaW50byBsaW5lTGlz\ndA1wdXQgaXRlbSAxIG9mIGxpbmVMaXN0IGludG8geA1pZiB4ID4gMCB0aGVuDXB1dCBy\nZXR1cm4gJiBidG5TY3JpcHQgaW50byBsaW5lIHgrMSB0byAzMDAwMCBvZiBvcmdTY3Jp\ncHQNc2V0IHRoZSBzY3JpcHQgb2YgY2FyZCBidXR0b24gImNsaWVudCBjb2RlIiBvZiBj\nYXJkICJNYWluTWVudSIgdG8gb3JnU2NyaXB0DWVuZCBpZg1lbmQgaWYNaWYgKGN1clNl\ncnZlciA8PiBzZXJ2ZXJMYW5nKSB0aGVuDXB1dCB0aGUgc2NyaXB0IG9mIGNhcmQgYnV0\ndG9uIGlkIFdoaWNoSW5Hcm91cChQcmVmZXJTZXJ2ZXJMYW5nQnV0dG9uSUQoKSkgaW50\nbyBidG5TY3JpcHQNcHV0IFNlYXJjaChidG5TY3JpcHQsICJmdW5jdGlvbiBTZXJ2ZXJT\nYW1wbGUiLCB0cnVlLCBmYWxzZSkgaW50byBsaW5lTGlzdA1wdXQgaXRlbSAxIG9mIGxp\nbmVMaXN0IGludG8geA1kZWxldGUgbGluZSAxIHRvIHgtMSBvZiBidG5TY3JpcHQNcHV0\nIHRoZSBzY3JpcHQgb2YgY2FyZCBidXR0b24gInNlcnZlciBjb2RlIiBvZiBjYXJkICJN\nYWluTWVudSIgaW50byBvcmdTY3JpcHQNcHV0IFNlYXJjaChvcmdTY3JpcHQsICItLSBs\nYW5ndWFnZSIsIHRydWUsIGZhbHNlKSBpbnRvIGxpbmVMaXN0DXB1dCBpdGVtIDEgb2Yg\nbGluZUxpc3QgaW50byB4DWlmIHggPiAwIHRoZW4NcHV0IHJldHVybiAmIGJ0blNjcmlw\ndCBpbnRvIGxpbmUgeCsxIHRvIDMwMDAwIG9mIG9yZ1NjcmlwdA1zZXQgdGhlIHNjcmlw\ndCBvZiBjYXJkIGJ1dHRvbiAic2VydmVyIGNvZGUiIG9mIGNhcmQgIk1haW5NZW51IiB0\nbyBvcmdTY3JpcHQNZW5kIGlmDWVuZCBpZg1pZiAoY3VyU2NyaXB0IDw+IGNsaWVudExh\nbmcpIG9yIChjbGllbnRIYXNHbHVlIDw+IGN1ckdsdWUpIHRoZW4NUmVEb1NjcmlwdA1l\nbmQgaWYNcGFzcyBjbG9zZUNhcmQNZW5kIGNsb3NlQ2FyZA1mdW5jdGlvbiBDbGllbnRU\nZW1wbGF0ZQAAAAEgQk1BUAAAC4sAAAAAAAAAAAABAAAAAAAAAVYCAAAAAAAAAAAAABcA\nuAFTAf4AAAAAAAAAAAAAAAAAAADcjBOA4REg4QaFiuEVEOEG4RUw4Qa4ho4TgOERIOEG\njRNA4REI4Qa/gb+Bv4G/gb+Bv4GkgYkfIOEMgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGG\ngYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaB\nhoGGgYaBhoGGpIHiEx5EAfABgOITETVAAICK4gTBMcyVmMADGByJ4hMewUoSliUgRKSg\n4hMUwXmSlCHgRKSY4hMSwUBSlCUARKSE4hMRwTOMdBjAQxi4geITHkQAAABgQ0FSRAAA\nIwkAAAAAAAAAAEAAAAAAAAAAAAAAAAAAOvAAABPAAAAAAgAAAAAAAAAAAABzdWl0ZSBP\nSFBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgQ0FSRAAAIaAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAOvAAABPAAAAAAAAAAAAABAAAAIAAAgAPAFJlcXVpcmVk\nIFN1aXRlAAADAC0ARXZlbnRzIHRoYXQgZXZlcnkgYXBwbGljYXRpb24gc2hvdWxkIHN1\ncHBvcnQAABgABQByZXFkAAAEACwAT3BlbixhZXZ0b2RvYw1QcmludCxhZXZ0cGRvYw1R\ndWl0LGFldnRxdWl0DXN1aXRlIHJlcWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAaBDQVJEAAAmtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAE8AAAAAAAAAA\nAAAGAAABSgACAA4ATXkgQ29yZSBTdWl0ZQADACcAU3VpdGUgdGhhdCBhcHBsaWVzIHRv\nIGFsbCBhcHBsaWNhdGlvbnMAABgABQBzbXBsAAAKAB4AQXBwbGljYXRpb24sY2FwcA1X\naW5kb3csY3dpbg0ADgALAHBvc2kNa2ZybQ0AAAQAywBDbG9uZSxjb3JlY2xvbg1DbG9z\nZSxjb3JlY2xvcw1Db3VudCxjb3JlY250ZQ1DcmVhdGUsY29yZWNyZWwNRGVsZXRlLGNv\ncmVkZWxvDUV4aXN0cyxjb3JlZG9leA1DbGFzcyBJbmZvLGNvcmVxb2JqDUdldCBEYXRh\nLGNvcmVnZXRkDURhdGEgU2l6ZSxjb3JlZHNpeg1FdmVudCBJbmZvLGNvcmVndGVpDU1v\ndmUsY29yZW1vdmUNU2V0IERhdGEsY29yZXNldGQNAHN1aXRlIHNtcGwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABQENBUkQAABSxAAAAAAAAIElAAAAAAAAAAAAAAAAAADrwAAAV\n2AAAAAgAAAAAAAkAAADwAAEABQAqKioqAAAKACIALCxudWxsLDAsDSwsLDAsDSwsLDAs\nDSwsLDAsDSwsLDAsADEAAgAxAAMABQAqKioqAAAwAEoARnVuY3Rpb24gQUUoDSBkaXJl\nY3RQYXJhbTpBRURlc2M7IA0gOkFFRGVzYzsgDSA6QUVEZXNjOyANIDpBRURlc2MpOk9T\nRXJyOwAFAD+ABgAAAA9UaGlzIGlzIGEgdGVtcGxhdGUgY2FyZCBmb3IgdGhpcyBiYWNr\nZ3JvdW5k0WRvbid0IHVzZSBpdCEAAAYABgByZXBseQAIAAUAbnVsbAAABwAFAHJwbHkA\nZXZlbnQgICAgICAgICAsAAAAAAAAAAAAAAAAAABgQk1BUAAAIEkAAAAAAAAAAAABAAAA\nAAAAAVYCAADOAd0A1gHnAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAjSMBIAMjAUADFPAD\nFDADFCgDIwGwAyMD0gMjB48D//8AAAEAQ0FSRAAAIm8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAOvAAABXYAAAAAAAAAAAACQAAALoAAQAFAHJlcWQAAAMABQBhZXZ0AAAKADUALCxu\ndWxsLDMyNzY4LA0sLGFsaXMsMjA0ODAsTGlzdCBvZiBkb2N1bWVudHMgdG8gb3BlbgAA\nNwACADEAAgAFAE9wZW4AAAUAJQBPcGVuIHRoZSBzcGVjaWZpZWQgbGlzdCBvZiBkb2N1\nbWVudHMAAAQABQBvZG9jAAAGAA8AbWlzc2luZ05hbWUoOCkAADAADwBPcGVuIMINICBw\nYXJhbQBldmVudCBhZXZ0b2RvYwAAAAABIENBUkQAACRiAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAADrwAAAV2AAAAAAAAAAAAAkAAAC8AAEABQByZXFkAAADAAUAYWV2dAAACgA2ACws\nbnVsbCwzMjc2OCwNLCxhbGlzLDE2Mzg0LExpc3Qgb2YgZG9jdW1lbnRzIHRvIHByaW50\nADcAAgAxAAIABgBQcmludAAFACYAUHJpbnQgdGhlIHNwZWNpZmllZCBsaXN0IG9mIGRv\nY3VtZW50cwAEAAUAcGRvYwAABgARAG1pc3NpbmdOYW1lKDIxNCkAADAAEABQcmludCDC\nDSAgcGFyYW1ldmVudCBhZXZ0cGRvYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAABAENBUkQAACVvAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAAAAAA\nAAkAAACgAAEABQByZXFkAAADAAUAYWV2dAAACgA4ACwsbnVsbCwzMjc2OCwNLCxudWxs\nLDM2ODY0LE5vIGRpcmVjdCBwYXJhbWV0ZXIgcmVxdWlyZWQANwACADEAAgAFAFF1aXQA\nAAUAEQBRdWl0IGFwcGxpY2F0aW9uAAAEAAUAcXVpdAAABgARAG1pc3NpbmdOYW1lKDM5\nMikAADAABQBRdWl0AGV2ZW50IGFldnRxdWl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAASBDQVJEAAAn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAFdgAAAAAAAAA\nAAAIAAAA1gABAAUAc21wbAAAAwAFAGNvcmUAAAoAXQAsLG9iaiAsMCwNLCxvYmogLDQw\nOTYsVGhlIG9iamVjdCB0byBjbG9uZQ1UbyxpbnNoLGluc2wsMzI3NjgsVGhlIG5ldyBs\nb2NhdGlvbiBmb3IgdGhlIG9iamVjdAAAAgAGAENsb25lAAUAEABDbG9uZSBhbiBvYmpl\nY3QABAAFAGNsb24AAAYAEQBtaXNzaW5nTmFtZSgzODMpAAAwAB4AQ2xvbmUgwg0gIHBh\ncmFtIMINIFtUbyBwYXJhbV1ldmVudCBjb3JlY2xvbgAAAAAAAAAAAOBDQVJEAAAoTgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAFdgAAAAAAAAAAAAIAAAAmAABAAUAc21wbAAA\nAwAFAGNvcmUAAAoALgAsLG51bGwsMzI3NjgsDSwsb2JqICw0MDk2LFRoZSBvYmplY3Qg\ndG8gY2xvc2UAAgAGAENsb3NlAAUAEABDbG9zZSBhbiBvYmplY3QABAAFAGNsb3MAAAYA\nEQBtaXNzaW5nTmFtZSgxMzUpAAAwABAAQ2xvc2Ugwg0gIHBhcmFtZXZlbnQgY29yZWNs\nb3MAAAAAAAABgENBUkQAACljAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAA\nAAAAAAgAAAEqAAEABQBzbXBsAAADAAUAY29yZQAACgB5ACwsbG9uZywwLA0sLG9iaiAs\nMCxUaGUgb2JqZWN0IHdob3NlIGVsZW1lbnRzIGFyZSB0byBiZSBjb3VudGVkDUNsYXNz\nLGtvY2wsdHlwZSwwLFRoZSBjbGFzcyBvZiB0aGUgZWxlbWVudHMgdG8gYmUgY291bnRl\nZAAAAgAGAENvdW50AAUARQBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBh\nIHBhcnRpY3VsYXIgY2xhc3Mgd2l0aGluIGFuIG9iamVjdAAABAAFAGNudGUAAAYAEQBt\naXNzaW5nTmFtZSgxNTYpAAAwAB8AQ291bnQgwg0gIHBhcmFtIMINIENsYXNzIHBhcmFt\nAGV2ZW50IGNvcmVjbnRlAAAAAAAAAAAAAAAAAAAAAAAAAAACIENBUkQAACoTAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAAAAAAAAgAAAHGAAEABQBzbXBsAAADAAUA\nY29yZQAACgESACwsb2JqICwwLA0sLG51bGwsMzY4NjQsDU5ldyxrb2NsLHR5cGUsMCxU\naGUgY2xhc3Mgb2YgdGhlIG5ldyBlbGVtZW50DUF0LGluc2gsaW5zbCwzMjc2OCxUaGUg\nbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50DVdpdGggRGF0YSxk\nYXRhLCoqKiosMzI3NjgsVGhlIGluaXRpYWwgZGF0YSBmb3IgdGhlIGVsZW1lbnQNV2l0\naCBQcm9wZXJ0aWVzLHByZHQscmVjbywzMjc2OCxUaGUgaW5pdGlhbCBkYXRhIGZvciB0\naGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAACAAcAQ3JlYXRlAAAFABUAQ3JlYXRl\nIGEgbmV3IGVsZW1lbnQAAAQABQBjcmVsAAAGABEAbWlzc2luZ05hbWUoNDkxKQAAMABS\nAENyZWF0ZSDCDSBOZXcgcGFyYW0gwg0gW0F0IHBhcmFtXSDCDSBbV2l0aCBEYXRhIHBh\ncmFtXSDCDSBbV2l0aCBQcm9wZXJ0aWVzIHBhcmFtXWV2ZW50IGNvcmVjcmVsAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAQBDQVJEAAArnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6\n8AAAFdgAAAAAAAAAAAAIAAAAsAABAAUAc21wbAAAAwAFAGNvcmUAAAoAMAAsLG51bGws\nMzI3NjgsDSwsb2JqICw0MDk2LFRoZSBlbGVtZW50IHRvIGRlbGV0ZQACAAcARGVsZXRl\nAAAFACEARGVsZXRlIGFuIGVsZW1lbnQgZnJvbSBhbiBvYmplY3QAAAQABQBkZWxvAAAG\nABEAbWlzc2luZ05hbWUoNDU2KQAAMAARAERlbGV0ZSDCDSAgcGFyYW0AZXZlbnQgY29y\nZWRlbG8AAAAAAAAAAAAAAAAAAAEAQ0FSRAAALLMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nOvAAABXYAAAAAAAAAAAACAAAAKAAAQAFAHNtcGwAAAMABQBjb3JlAAAKACoALCxib29s\nLDAsDSwsb2JqICwwLFRoZSBvYmplY3QgaW4gcXVlc3Rpb24AAgAHAEV4aXN0cwAABQAZ\nAFRlbGwgaWYgYW4gb2JqZWN0IGV4aXN0cwAABAAFAGRvZXgAAAYAEABtaXNzaW5nTmFt\nZSg2MikAMAARAEV4aXN0cyDCDSAgcGFyYW0AZXZlbnQgY29yZWRvZXgAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAABoENBUkQAAC4mAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADrwAAAV2AAAAAAAAAAAAAgAAAFAAAEABQBzbXBsAAADAAUAY29yZQAACgCkACwsY2xp\nbiwwLA0sLHR5cGUsMzI3NjgsVGhlIG9iamVjdCBjbGFzcyBhYm91dCB3aGljaCBpbmZv\ncm1hdGlvbiBpcyByZXF1ZXN0ZWQNSW4sd3JjZCxpbnRsLDMyNzY4LFRoZSBodW1hbiBs\nYW5ndWFnZSBhbmQgc2NyaXB0IHN5c3RlbSBpbiB3aGljaCB0byByZXR1cm4gaW5mb3Jt\nYXRpb24AAgALAENsYXNzIEluZm8AAAUAJgBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYW4g\nb2JqZWN0IGNsYXNzAAQABQBxb2JqAAAGABEAbWlzc2luZ05hbWUoMjUxKQAAMAAlAENs\nYXNzIEluZm8gwg0gWyBwYXJhbV0gwg0gW0luIHBhcmFtXQBldmVudCBjb3JlcW9iagAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgQ0FSRAAAL7oAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAOvAAABXYAAAAAAAAAAAACAAAARIAAQAFAHNtcGwAAAMABQBjb3JlAAAK\nAIUALCwqKioqLDAsDSwsb2JqICwwLFRoZSBvYmplY3Qgd2hvc2UgZGF0YSBpcyB0byBi\nZSByZXR1cm5lZA1BcyxydHlwLHR5cGUsNDkxNTIsVGhlIGRlc2lyZWQgdHlwZXMgZm9y\nIHRoZSBkYXRhLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlAAACAAkAR2V0IERhdGEAAAUA\nGwBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAAABAAFAGdldGQAAAYAEQBtaXNzaW5n\nTmFtZSgyNTIpAAAwACEAR2V0IERhdGEgwg0gIHBhcmFtIMINIFtBcyBwYXJhbV0AZXZl\nbnQgY29yZWdldGQAAAAAAAAAAAAAAAABYENBUkQAADAsAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAADrwAAAV2AAAAAAAAAAAAAgAAAEYAAEABQBzbXBsAAADAAUAY29yZQAACgCCACws\nbG9uZywwLA0sLG9iaiAsMCxUaGUgb2JqZWN0IHdob3NlIGRhdGEgc2l6ZSBpcyB0byBi\nZSByZXR1cm5lZA1BcyxydHlwLHR5cGUsMzI3NjgsVGhlIGRhdGEgdHlwZSBmb3Igd2hp\nY2ggdGhlIHNpemUgaXMgY2FsY3VsYXRlZAACAAoARGF0YSBTaXplAAUAJgBSZXR1cm4g\ndGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gb2JqZWN0AAQABQBkc2l6AAAGABEAbWlzc2lu\nZ05hbWUoMzk0KQAAMAAiAERhdGEgU2l6ZSDCDSAgcGFyYW0gwg0gW0FzIHBhcmFtXWV2\nZW50IGNvcmVkc2l6AAAAAAAAAaBDQVJEAAAxbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6\n8AAAFdgAAAAAAAAAAAAIAAABWAABAAUAc21wbAAAAwAFAGNvcmUAAAoAsgAsLGV2aW4s\nMTYzODQsDSwsdHlwZSwwLFRoZSBldmVudCBjbGFzcyBvZiB0aGUgQXBwbGUgZXZlbnRz\nIGZvciB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24NSW4sd3JjZCxpbnRsLDMyNzY4\nLFRoZSBodW1hbiBsYW5ndWFnZSBhbmQgc2NyaXB0IHN5c3RlbSBpbiB3aGljaCB0byBy\nZXR1cm4gaW5mb3JtYXRpb24AAgALAEV2ZW50IEluZm8AAAUAMgBHZXQgaW5mb3JtYXRp\nb24gYWJvdXQgdGhlIEFwcGxlIGV2ZW50cyBpbiBhIHN1aXRlAAQABQBndGVpAAAGABEA\nbWlzc2luZ05hbWUoMzA3KQAAMAAjAEV2ZW50IEluZm8gwg0gIHBhcmFtIMINIFtJbiBw\nYXJhbV0AZXZlbnQgY29yZWd0ZWkAAAAAAAABIENBUkQAADLpAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADrwAAAV2AAAAAAAAAAAAAgAAADSAAEABQBzbXBsAAADAAUAY29yZQAACgBc\nACwsb2JqICwwLA0sLG9iaiAsNDA5NixUaGUgb2JqZWN0IHRvIG1vdmUNVG8saW5zaCxp\nbnNsLDMyNzY4LFRoZSBuZXcgbG9jYXRpb24gZm9yIHRoZSBvYmplY3QAAgAFAE1vdmUA\nAAUADwBNb3ZlIGFuIG9iamVjdAAABAAFAG1vdmUAAAYADwBtaXNzaW5nTmFtZSg3KQAA\nMAAdAE1vdmUgwg0gIHBhcmFtIMINIFtUbyBwYXJhbV0AZXZlbnQgY29yZW1vdmUAAAAA\nAAAAAAAAAAABIENBUkQAADPfAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAA\nAAAAAAgAAADOAAEABQBzbXBsAAADAAUAY29yZQAACgBMACwsbnVsbCwzMjc2OCwNLCxv\nYmogLDQwOTYsVGhlIG9iamVjdCB0byBjaGFuZ2UNVG8sZGF0YSwqKioqLDAsVGhlIG5l\ndyB2YWx1ZQACAAkAU2V0IERhdGEAAAUAFQBTZXQgYW4gb2JqZWN0J3MgZGF0YQAABAAF\nAHNldGQAAAYAEABtaXNzaW5nTmFtZSg3OCkAMAAfAFNldCBEYXRhIMINICBwYXJhbSDC\nDSBUbyBwYXJhbQBldmVudCBjb3Jlc2V0ZAAAAAAAAAAAAAAAAAAAAAAAwENBUkQAABfY\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAYZAAAAAcAAAAAAAQAAABoAAEABQAqKioq\nAAAFAD+ABgAAAA9UaGlzIGlzIGEgdGVtcGxhdGUgY2FyZCBmb3IgdGhpcyBiYWNrZ3Jv\ndW5k0WRvbid0IHVzZSBpdCEAADEAAgANAAoADwANLD8/Pz8sPz8/PywwLAAqKioqIGNs\nYXNzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgENBUkQAADSKAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAADrwAAAYZAAAAAAAAAAAAAYAAAEsAAEABQBzbXBsAAACAAwAQXBwbGlj\nYXRpb24AAwAFAGNhcHAAAAUAGABBIE1hY2ludG9zaCBhcHBsaWNhdGlvbgAKANMAQmVz\ndCBUeXBlLHBic3QsdHlwZSwwLFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQ1DbGFzcyxw\nY2xzLHR5cGUsMCxUaGUgY2xhc3MNRGVmYXVsdCBUeXBlLGRlZnQsdHlwZSwwLFRoZSBk\nZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQ1Gcm9udG1vc3QscGlzZixib29sLDAsSXMgdGhp\ncyB0aGUgZnJvbnRtb3N0IGFwcGxpY2F0aW9uPw1OYW1lLHBuYW0saXR4dCwwLFRoZSBu\nYW1lAAAxAA8AY3dpbixpbmR4LG5hbWUAY2xhc3MgY2FwcAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADQENBUkQAADXUAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAYZAAAAAAAAAAA\nAAUAAAL8AAEABQBzbXBsAAACAAcAV2luZG93AAADAAUAY3dpbgAABQAJAEEgd2luZG93\nAAAKAsoAQmVzdCBUeXBlLHBic3QsdHlwZSwwLFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlw\nZQ1Cb3VuZHMscGJuZCxxZHJ0LDQwOTYsVGhlIGJvdW5kYXJ5IHJlY3RhbmdsZSBmb3Ig\ndGhlIHdpbmRvdw1DbGFzcyxwY2xzLHR5cGUsMCxUaGUgY2xhc3MNRGVmYXVsdCBUeXBl\nLGRlZnQsdHlwZSwwLFRoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQ1IYXMgQ2xvc2Ug\nQm94LGhjbGIsYm9vbCwwLERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgY2xvc2UgYm94Pw1I\nYXMgVGl0bGUgQmFyLHB0aXQsYm9vbCwwLERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgdGl0\nbGUgYmFyPw1JbmRleCxwaWR4LGxvbmcsNDA5NixUaGUgbnVtYmVyIG9mIHRoZSB3aW5k\nb3cNRmxvYXRpbmcsaXNmbCxib29sLDAsRG9lcyB0aGUgd2luZG93IGZsb2F0Pw1Nb2Rh\nbCxwbW9kLGJvb2wsMCxJcyB0aGUgd2luZG93IG1vZGFsPw1Qb3NpdGlvbixwcG9zLFFE\ncHQsNDA5NixUaGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdw1SZXNpemFibGUscHJzeixi\nb29sLDAsSXMgdGhlIHdpbmRvdyByZXNpemFibGU/DVpvb21hYmxlLGlzem0sYm9vbCww\nLElzIHRoZSB3aW5kb3cgem9vbWFibGU/DVpvb21lZCxwenVtLGJvb2wsNDA5NixJcyB0\naGUgd2luZG93IHpvb21lZD8NTmFtZSxwbmFtLGl0eHQsNDA5NixUaGUgdGl0bGUgb2Yg\ndGhlIHdpbmRvdw1WaXNpYmxlLHB2aXMsYm9vbCw0MDk2LElzIHRoZSB3aW5kb3cgdmlz\naWJsZT9jbGFzcyBjd2luAAAAAAAAAKBDQVJEAAAd8gAAAAAAAAAAQAAAAAAAAAAAAAAA\nAAA68AAAHoUAAAAIAAAAAAADAAAAVgABAAUAKioqKgAACgADACwsAAAJAD+ABgAAAA9U\naGlzIGlzIGEgdGVtcGxhdGUgY2FyZCBmb3IgdGhpcyBiYWNrZ3JvdW5k0WRvbid0IHVz\nZSBpdCEAKioqKiBlbnVtZXJhdGlvbiAAAAAAAAFAQ0FSRAAANk4AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAOvAAAB6FAAAAAAAAAAAAAwAAAPQAAQAFAHNtcGwAAAoA3ABCZWZvcmUs\nYmVmbyxCZWZvcmUgc3BlY2lmaWVkIG9iamVjdA1BZnRlcixhZnRlLEFmdGVyIHNwZWNp\nZmllZCBvYmplY3QNQmVnaW5uaW5nLGJnbmcsQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg\nc3BlY2lmaWVkIGNvbnRhaW5lcg1FbmQsZW5kICxBdCB0aGUgZW5kIG9mIHRoZSBzcGVj\naWZpZWQgY29udGFpbmVyDVJlcGxhY2UscnBsYyxSZXBsYWNpbmcgdGhlIHNwZWNpZmll\nZCBvYmplY3QAAwAFAHBvc2kAZW51bWVyYXRpb24gcG9zaQAAAAAAAAAAAQBDQVJEAAA3\ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAHoUAAAAAAAAAAAADAAAAngABAAUAc21w\nbAAACgCGAGluZGV4LGluZHgsa2V5Zm9ybSBkZXNpZ25hdGluZyBpbmRleGVkIGFjY2Vz\ncw1uYW1lZCxuYW1lLGtleWZvcm0gZGVzaWduYXRpbmcgbmFtZWQgYWNjZXNzDUlELGlk\nICxrZXlmb3JtIGRlc2lnbmF0aW5nIGlkZW50aWZlciBhY2Nlc3MAAwAFAGtmcm0AZW51\nbWVyYXRpb24ga2ZybQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgQ0FSRAAA\nGxYAAAAAAAAAAEAAAAAAAAAAAAAAAAAAOvAAAByvAAAABgAAAAAAAgAAAE4AAgAFACoq\nKioAAAgAP4AGAAAAD1RoaXMgaXMgYSB0ZW1wbGF0ZSBjYXJkIGZvciB0aGlzIGJhY2tn\ncm91bmTRZG9uJ3QgdXNlIGl0IQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB\nIFNUQkwAAAwGAAAAAAAAAAsAAAASAAAABAAAAAEAAAAA////////AAAAAAAAAAAABgAA\nAAEAAAAAAAMAAAAMAAAAAAAAAAAABwAAAAEAAAAA/////wAJAAAAAAAAAAAACQAAAAEA\nAAAAABUEAP//AAAAAAAAAAAACgAAAAEAAAAAABUCAP//AAAAAAAAAAAACwAAAAEAAAAA\nABUBAAAOAAAAAAAAAAAADAAAAAEAAAAAABUBAP//AAAAAAAAAAAADQAAAAEAAAAAABX/\n////AAAAAAAAAAAADwAAAAEAAAAA/////wASAAAAAAAAAAAAEAAAAAEAAAAAABUBAAAS\nAAAAAAAAAAAAEQAAAAEAAAAAAAT//wAMAAAAAAAAAAAAYEZUQkwAAA3vAAAAAAAAAAQA\nAAAAABVIZWx2ZXRpY2EAAANHZW5ldmEACgAAQ2hpY2FnbwAABE1vbmFjbwAAAAAAAABA\nAQoO6AAKAAAAAACBAEQCEn//f/8AAAAAAAABQFBSTlQAAEDZAAAAAAALAgoANAAwACAA\nIAAIAAgAAAAAAVYCAABIAQEAugAAAAAEAwkJBK7/+GcSQmcvLv/4LzxQUkZUTq0Oqh4f\nLy3Rmi8u//xCp3AkLwBCp06tIRIgbdGaKFBTbAEiQmc/LAEgPywBIk6tIJI5XwEgSG3R\nrk6tILpM3xCATl5OdU5W/+4vDEhu/+5OrQf6QqcvPAAAASROrSDSK1/RmmYCYEpIbv/u\nIG3RmiBQLwhwDi8ATq0mGiBt0ZooUEHsAA5D7cYaINkg2Tl8AEgAFjl8AQEAGEIsABpw\nAClAABxCLAAgQqwBIBt8AAHReihfTl5OdU5W//ZI5wMYQi3RekqtqhZmCE66/3pgAACS\nQqcvLaoWLzxQUk5UTq0PEiZfIAtmEnAAAAAAACBMb2dpY2FsIHMAAAAgVEFJTP////8A\nAAAAD051IIpyIGRldCBzbHV0yQ==\n\n\n--========================_26885646==_D--\n\n\n--========================_26885646==_--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.17.msg",
    "content": "X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]\n\t[nil \"Mon\" \"26\" \"June\" \"1995\" \"16:53:52\" \"-0800\" \"Aleksandar Totic\" \"atotic@netscape.com\" nil \"6272\" \"AppleDouble example\" \"^Date:\" nil nil \"6\" nil nil (mark number \"         26-Jun-95 16:53  Aleks Toti6272  AppleDouble example¥n\") nil]\n\tnil)\nReceived: from neon.netscape.com (steroid.mcom.com [198.93.92.10]) by abattoir.netscape.com (8.6.10/8.6.9) with ESMTP id QAA26158 for <jwz@abattoir.netscape.com>; Mon, 26 Jun 1995 16:50:29 -0700\nReceived: from [198.93.92.66] (nonlinear.mcom.com [198.93.92.66]) by neon.netscape.com (950215.SGI.8.6.10/8.6.9) with SMTP id QAA25749; Mon, 26 Jun 1995 16:46:00 -0700\nX-Sender: atotic@198.93.92.10\nMessage-Id: <ac15067506021004778a@[198.93.92.66]>\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"========================_26885646==_\"\nDate: Mon, 26 Jun 1995 16:53:52 -0800\nFrom: atotic@netscape.com (Aleksandar Totic)\nTo: atotic@mcom.com, jwz@mcom.com\nSubject: AppleDouble example\n\n\n\n--========================_26885646==_\nContent-Type: text/plain; charset=\"us-ascii\"\n\nHere comes a Mac file encoded as AppleDouble, with both forks.\n\nAleks\n\n\n\n--========================_26885646==_\nContent-Type: multipart/header-set; boundary=\"========================_26885646==_D\"\n\n\n\n--========================_26885646==_D\nContent-Transfer-Encoding: base64\nContent-Type: application/applefile; name=\"%Aete_Editor_b1\"\nContent-Disposition: attachment; filename=\"%Aete_Editor_b1\"\n\nAAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAPgAAAA4AAAAJAAAATAAAACAA\nAAACAAAAbAAAveNBZXRlIEVkaXRvciBiMVNUQUtXSUxEAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAAAu+oAALrqAAAB+XJkIGJ1dHRvbiAiaGFzIGdsdWUgc3Vicm91dGlu\nZSIgDkFldGUgRWRpdG9yIGIxdAIAAABTVEFLV0lMRAEAAAAAAFNUQUtXSUxEAQAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAApdfAjQAEG8AAAL3jIGNhcmQgInByZWZlcmVuY2UiIGlu\ndG8gdmVyYm9zZQ1wdXQgY2FyZCBmaWVsZCAidGltZU91dCIgb2YgY2FyZCAicHJlZmVy\nZW5jZSIgaW50byBkZWZhdWx0VGltZW91dA1wdXQgY2FyZCBmaWVsZCAic2VuZFRhcmdl\ndCIgb2YgYwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAABGAAAERgAADkYAABZG\nAAAnhgAAQAYAAIAGAABADgAAJ/wAABf4AAAOAAAABgAAAAIAAAAAAWxgDgAAWEZDTgz9\nAAAAAAAAQfr/7iHICc5gAADsIl8gH6EiLohO0U5WAAAvDChuABApbgAMAFApbgAIAFQ5\nfAAOAEwvLABIIF9OkChfTl4gX978AAxO0E5W/wAvDCBuAAhD7v8AcD8i2FHI//wobgAM\nQe7/AClIAFA5fAAHAEwvLABIIF9OkC1sAHAAEChfTl4gX1BPTtBOVv8ALwwgbgAIQ+7/\nAHA/IthRyP/8KG4ADEHu/wApSABQOXwACgBMLywASCBfTpAtbABwABAoX05eIF9QT07Q\nTlYAAC8MKG4AECluAAwAUCluAAgAVDl8AAgATC8sAEggX06QKF9OXiBf3vwADE7QTlb+\n6EjnATAmbgAISlNvIC8LIGsAAi8QSG7+6E66/7JZTy8LSG7+6E66/2YuH2ACQodZTy8H\nTrr+3iRfQisARi8LLwpIbv7oTrr+1llPLwtIbv7oTrr++idfAEJM3wyATl4un051AAAM\n7k5WAAAvLgAITroCjE5eLp9OdYpFTlRSWVBPSU5UAAAATlb/ACBuAAgvKAAILy4ADEhu\n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\nZmMvDk66/kBCbv++YAAAwCBuAAxD7v/YItgi2Epu/75mFi18bWV0Yf/YQe7/4EPu/8gg\n2SDZYAxB7v/gQ+7/0CDZINlCZ0hu/9hIbv+6MDwEB6gWPV//sC1u/7r/onABLUD/tmBa\nQmdIbv/YLy7/ti88KioqKkhu/7JIbv/oMDwKC6gWLw5Ouv0+QmdIbv/gLy7/skhu/+gw\nPAYQqBY9X/+wQmdIbv/oMDwCBKgWVI8/Lv+wLw5Ouv0OUq7/tmkKIC7/trCu/6JvnFJu\n/75wAbBu/75sAP86QmdCp0KnHzwAAUhu/8AwPAcGqBYvDk66/NZCZ0hu/8AvPGF0dHJI\nbv/IMDwGEKgWLw5Ouvy6QmdIbv/IMDwCBKgWVI9Krv/UZypCZ0hu/8AvPHBhcm1Ibv/Q\nMDwGEKgWLw5OuvyKQmdIbv/QMDwCBKgWVI9CZ0hu/8AvPCRhZSRIbv+mMDwGA6gWVI9C\nZ0hu/8AwPAIEqBZUj2AAAQIgbgAMIDxsaXN0sJBXwCI8cmVjb7KQV8GAAWcAANgdfAAB\n/68gbgAMIDxyZWNvsJBmRC18cmVjb//4QmcvLgAMLzx0eXBlLzwqKioqSG7//Ehu//hw\nBC8ASG7/9DA8DhGoFlSPIDxyZWNvsK7/+FfARAAdQP+vEC7/r2dgcAAtQP/EQmdCp0Kn\nHzwAAUhu/8AwPAcGqBZKX2YyQmdIbv/ALzwtLS0tLy4ADDA8BhCoFkpfZhhCZ0hu/8Av\nPCRhZSRIbv+mMDwGA6gWVI9CZ0hu/8AwPAIEqBZUj2AkQmcvLgAMLy7/+Ehu/6YwPAYD\nqBZUj2AMIG4ADEPu/6Yi2CLYIG4ADCAoAASwrv+qZywgbgAIcAGwEGYOQmcvLgAMMDwC\nBKgWVI8gbgAIELwAASBuAAxD7v+mINkg2UJuABBP7v+CTN8c+E5eIF9QT07QTlb9+Ejn\nARgmbgAMLwsgbgAILxBIbv78TroC/Ehu/vxIegB4SG79+D88AAJOugNKQe7+/EPu/fhw\nPyDZUcj//EKnLwtIegBITroBPChfIAxnMEKnLwxCp0hu/v1CQBAu/vxIwC8AcP8vAEKn\nqeAuHy8LSHoAGi8MTroBTC8MIF+gI0zfGIBOXiBfUE9O0AtDcmVhdGVkRGVzYwEsTlb+\n5EjnAxgmbgAIKG4AEC4uABRCEyAMZwAAwkKnLwcvFE66AUhwBrCfbDogVHC+sBBmGiAU\n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\n/wAvPAAAAQBOuhLcQkAQLv8ASMDQlFKAKIAQLgAMZzY9fAEg/v4dfAAN/v9Ibv7+SG7/\nAE66E3g+H28KQe7/ABG8ACBwAEpHZuJIbv8ALy4ACE66/ahM3xCATl4gX978AApO0E5W\nAAAvLgAOHy4ADC8uAAhOuv96IG4ADhAoAAMCQAABZwJSkE5eIF/e/AAKTtBOVgAASG4A\nFEJnLy4ACE66/8IgbgAQIm4AFCCRIG4ADCJuABAgkU5eIF/e/AAQTtBOVgAAIG4ADCJu\nABAgkSBuAAgibgAMIJFOXiBf3vwADE7QTlb+/i8HEC4ADGc+Qe7/AEP6AEwg2TCRIG4A\nDi8QSG7/AXAELwBOuhHaSHoAMEhu/wBOuhKWPh9vBB1H/wBIbv8ALy4ACE66/NAgbgAO\nWJAuH05eIF/e/AAKTtABIAQ/Pz8/AE5WAABIbgAUQmcvLgAITrr+mEhuABRCZy8uAAhO\nuv7+IG4AECJuABQgkViuABQgbgAMIm4AFCCRTl4gX978ABBO0E5W//BKrgAUZywtbgAQ\n//AtbgAM//QtbgAI//hwAC1A//xCZ0hu//AvLgAUcBAvAE66EThUj05eIF/e/AAQTtBO\nVv/oSOcBGCZuABQgC2dkKFNCpy8LTroQ8C4M3p8gB5CMbyYgFLCuABBmGCAsAASwrgAM\nZggpbgAIAAxgNnAQ2cBg2nAQ2cBg1C1uABD/6C1uAAz/7HAALUD/8C1uAAj/9EJnSG7/\n6C8LcBAvAE66ELpUj0zfGIBOXiBf3vwAEE7QTlb/7kjnAwAgbgAoIFA8EC8uAChCZy8u\nAAhOuv0McAAtQP/wPUb/7n4BYFggbgAoLxBIbv/0SG7/+EHuAAwgGGcCLwAgUE6QLy4A\nJC8u//QvLv/4IG4AKC8QQe4AHCAYZwIvACBQTpAvLgAoSG7/8EKnQe4AFCAYZwIvACBQ\nTpBSR2kGvm7/7m+iTN8AwE5eIF/e/AAkTtBOVv/mSOcPGCZuAAhCp0KnTroP0i4fUmv6\n0DAr+tDlQEHr+rghhwAALy4AIC8HSHr+dkKnQe4AHC8gLyBB7gAULyAvIC8uAAhOuv8e\nLy4AHC8HSHr+kkKnQe4AHC8gLyBB7gAULyAvIC8uAAhOuv76QqcvB066D3hwEC8ATroP\nviAfPUD/+kHu//otSP/wSG7/8B88AAEvLgAITrr79HwAPW7/+v/megFgVCBHKAbYkHAQ\n3IBwAC1A//QoREqsAAhnDi1sAAj/8C1sAAz/9GAGLWwADP/wSG7/8Ehu//QfPAABSqwA\nDFbARAAfAEHuABQgGGcCLwAgUE6QUkVpBrpu/+Zvpi8HIF+gIzAr+tDlQEHr+rhyACGB\nAABTa/rQTN8Y8E5eIF/e/AAcTtBOVv/2SOcDACBuABggUDwQLy4AGB8uABYvLgAITrr7\nRnAALUD/+D1G//Z+AWAiLy4AGEhu//gfLgAWHy4AFEHuAAwgGGcCLwAgUE6QUkdpBr5u\n//Zv2EzfAMBOXiBf3vwAFE7QTlb//kjnAwAcLgAOIG4AEEqQZkovLgAUHwYvLgAITrr7\n0C8uABQfBi8uAAhOuvxCLy4AFB8GLy4ACE66/DQvLgAUHwYvLgAITrr7pi8uABQfBi8u\nAAhOuvriYAAAuCBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvt6Ly4AEBAHCgAAAR8ALy4A\nCE66+2YvLgAUHzwAAS8uAAhOuvvWLy4AFB88AAEvLgAITrr7xi8uABBCZy8uAAhOuvu4\nLy4AEEJnLy4ACE66+6ogbgAUIFBKEFbHRAcvLgAUHwcvLgAITrr7EC8uABAQBwoAAAEf\nAC8uAAhOuvr8Ly4AFB88AAEvLgAITrr6Ni8uABBCZy8uAAhOuvooTN8AwE5eIF/e/AAQ\nTtBOVv/+SOcDABwuAA4gbgAQSpBmAADCEC4ADGcQEAZnDEh6Al4vLgAITrr5Ui8uABQf\nBi8uAAhOuvoiLy4AFB8GLy4ACE66+ogvLgAUHwYvLgAITrr6+i8uABQfBi8uAAhOuvrs\nLy4AFB8GLy4ACE66+t4vLgAUHwYvLgAITrr6UC8uABQfBi8uAAhOuvmMLy4AFB8GLy4A\nCE66+rQvLgAUHwYvLgAITrr6Ji8uABQfBi8uAAhOuvliLy4AFB8GHy4ADEh6/hovLgAI\nLy4ACE66/apgAAGaSHoBpC8uAAhOuvicIG4AFCBQShBWx0QHLy4AFB8HLy4ACE66+WAv\nLgAQEAcKAAABHwAvLgAITrr5TCBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvmmLy4AEBAH\nCgAAAR8ALy4ACE66+ZIvLgAUHzwAAS8uAAhOuvoCLy4AEEJnLy4ACE66+fQvLgAUHzwA\nAS8uAAhOuvnkLy4AEEJnLy4ACE66+dYvLgAUHzwAAS8uAAhOuvnGLy4AEEJnLy4ACE66\n+bggbgAUIFBKEFbHRAcvLgAUHwcvLgAITrr5Hi8uABAQBwoAAAEfAC8uAAhOuvkKLy4A\nFB88AAEvLgAITrr4RC8uABBCZy8uAAhOuvg2Ly4AFB88AAEvLgAITrr5XC8uABBCZy8u\nAAhOuvlOIG4AFCBQShBWx0QHLy4AFB8HLy4ACE66+LQvLgAQEAcKAAABHwAvLgAITrr4\noC8uABQfPAABLy4ACE6699ovLgAQQmcvLgAITrr3zC8uABQvLgAQSHr8hi8uAAhIevic\nLy4ACC8uAAhOuvriTN8AwE5eIF/e/AAQTtACIyYAAiMqAE5WAAAgbgAQSpBmEi8uABQf\nLgAMLy4ACE66+LBgHi8uABQfPAABLy4ACE66+J4vLgAQQmcvLgAITrr4kE5eIF/e/AAQ\nTtBOVv/6SOcHABouAA4gbgAQSpBmRi8uABQfBS8uAAhOuvhkIG4AFCBQPBAvLgAUHwUv\nLgAITrr23j1G//p+AWASLy4AFB8FLy4ACE66+DhSR2lEvm7/+m/oYDwvLgAUHzwAAS8u\nAAhOuvgcLy4AEEJnLy4ACE66+A4vLgAULy4AEEh6/zgvLgAISHr32EKnLy4ACE66+fBM\n3wDgTl4gX978ABBO0E5W//5I5wcAGi4ADBwuAA4gbgAQSpBmchAFZxAQBmcMSHoBPi8u\nAAhOuvXkLy4AFB8GLy4ACE669ygvLgAUHwYvLgAITrr3mi8uABQfBi8uAAhOuvcMLy4A\nFB8GHwVIevsQLy4ACC8uAAhOuvqgLy4AFB8GHwVIev7kLy4ACC8uAAhOuvqIYAAAxkh6\nANAvLgAITrr1eiBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvayLy4AEBAHCgAAAR8ALy4A\nCE669p4vLgAUHzwAAS8uAAhOuvcOLy4AEEJnLy4ACE669wAgbgAUIFBKEFbHRAcvLgAU\nHwcvLgAITrr2Zi8uABAQBwoAAAEfAC8uAAhOuvZSLy4AFC8uABBIevpWLy4ACEh69mwv\nLgAILy4ACE66+LIvLgAULy4AEEh6/iIvLgAISHr2fEKnLy4ACE66+JRM3wDgTl4gX978\nABBO0AIjJgACIyoATlb//kjnAwAcLgAOIG4AEEqQZkQQLgAMZxAQBmcMSHoA0C8uAAhO\nuvSCLy4AFB8GLy4ACE669cYvLgAUHwYvLgAITrr2OC8uABQfBi8uAAhOuvWqYAAAiEh6\nAJIvLgAITrr0SCBuABQgUEoQVsdEBy8uABQfBy8uAAhOuvWALy4AEBAHCgAAAR8ALy4A\nCE669WwvLgAUHzwAAS8uAAhOuvXcLy4AEEJnLy4ACE669c4gbgAUIFBKEFbHRAcvLgAU\nHwcvLgAITrr1NC8uABAQBwoAAAEfAC8uAAhOuvUgTN8AwE5eIF/e/AAQTtACIyYAAiMq\nAE5W//5I5wMAHC4ADiBuABBKkGYsLy4AFB8GLy4ACE669OgvLgAUHwYvLgAITrr1Wi8u\nABQfBi8uAAhOuvTMYHogbgAUIFBKEFbHRAcvLgAUHwcvLgAITrr0sC8uABAQBwoAAAEf\nAC8uAAhOuvScLy4AFB88AAEvLgAITrr1DC8uABRCZy8uAAhOuvT+IG4AFCBQShBWx0QH\nLy4AFB8HLy4ACE669GQvLgAQEAcKAAABHwAvLgAITrr0UEzfAMBOXiBf3vwAEE7QTlb/\n+kjnBwAeLgAOIG4AEEqQZngQLgAMZxAQB2cMSHoAyC8uAAhOuvLGLy4AFB8HLy4ACE66\n9IogbgAUIFA6EC8uABQfBy8uAAhOuvMEPUX/+nwBYC4vLgAUHwcvLgAITrrz3i8uABQf\nBy8uAAhOuvRQLy4AFB8HLy4ACE6688JSRmlSvG7/+m/MYEpIegBWLy4ACE668lgvLgAU\nHzwAAS8uAAhOuvQaLy4AEEJnLy4ACE669AwvLgAULy4AEEh6/ngvLgAISHrzpi8uAAgv\nLgAITrr17EzfAOBOXiBf3vwAEE7QAiMmAAIjKgBOVv/8SOcBGCZuAAhwAC1AABA9a/rW\n//x+AWAgMAfnQEHr+tBJ8AAAIC4ADLCUZggtbAAEABBgClJHaQa+bv/8b9pM3xiATl4g\nX1BPTtBOVvq4SOcfOHAALUD7eHAALUD8jh18AAH7fUJu+tAgbgAISlBvJC8uAAggaAAC\nLxBIbv78TroE9EJnLy4ACEhu/vxOugSmHV/7fUJu+34QLvt9Zy5Cpy88YWV1dD88AAGp\nnS1f+3hnGi8u+3hIbvt+SG77iEhu/vypqC8u+3ggX6ApQmeplD1f/JI9fP///JQgbgAI\ncAKwUG9GSG788C88ADIAMqiALy788Eh6BBRCpz88//9IbvzgQqdIbvyWPzwAAqnqEC78\nlmc+QmdIbvygPy78nB88AAGpxD1f/JRgKC8uAAggbgAIIGgABi8QSG7+/E66BDZCZ0hu\n/vxCZx88AAGpxD1f/JRw/7Bu/JRmBi8OTrrvBEKnLzxhZXRlPy77fqgfLV/8jmYSQqcv\nPGFldGU/PAABqA4tX/yOSq78jmYGLw5Ouu7SIG78jiBQPVD8jAxuAJD8jF3ADG4CAPyM\nXsGAAWcGLw5Ouu6uQqdCp066A/gtX/uEZgYvDk667ppKrvt4ZwABCiBu+3ggEFyALUD/\n/CBu//w9UPrWcBSwbvrWbAY9fAAU+tZIbv/8QmcvDk668GI9bvrW+ro9fAAB/PZgAAC+\nSG7//EJnLw5OuvDCSG7//EJnLw5OuvEqMC789udAIG7//EPu+tAjkAAASG7//EJnLw5O\nuvGMSG7//EJnLw5OuvAQSG7//EJnLw5OuvAEMC789udAQe761CGu//wAAEhu//xCZx88\nAAFIevYILw4vDk669HpIbv/8QmcfPAABSHr5YC8OLw5OuvRkSG7//EJnHzwAAUh6+q4v\nDi8OTrr0Tkhu//xCZx88AAFIevxULw4vDk669DhSbvz2aRIwLvz2sG76um8A/zpgBEJu\n+tZwAC1A+4BB7vygLUj//Ehu//wfPAABLw5Ouu/kLy78jkhu/IxIbvuISG77jKmoQe77\niC1I//xIbv/8HzwAAS8OTrrwsEHu/IwtSP/8SG7//B88AAEvDk667ypB7vuMLUj//Ehu\n//wfPAABLw5Ouu+QLy78jiBfoCkgbvyOLVD//Ehu//wfPAABLw5Ouu72SG7//B88AAEv\nDk667uhIbv/8HzwAAS8OTrru2iBu//w9UPz0SG7//B88AAEvDk667sQ9bvz0+rg9fAAB\n/PZgAAEoSG7//B88AAEvDk667yJIbv/8HzwAAS8OTrrviEKnIG7//C8QLw5OuvwmLV/6\n0khu//wfPAABLw5Ouu/oSG7//B88AAEvDk667mpIbv/8HzwAAS8OTrruXEqu+tJnakhu\n//xIbvrSSHr0bC8OSHrwGC8OLw5OuvGsSG7//Ehu+tJIevfALw5Ieu9ILw4vDk668ZJI\nbv/8SG760kh6+QovDkh67y4vDi8OTrrxeEhu//xIbvrSSHr6rC8OSHrvREKnLw5OuvFe\nYFhIbv/8HzwAAUJnSHr0AC8OLw5OuvJySG7//B88AAFCZ0h691gvDi8OTrryXEhu//wf\nPAABQmdIevimLw4vDk668kZIbv/8HzwAAUJnSHr6TC8OLw5OuvIwUm789mkMMC789rBu\n+rhvAP7QLy4ACC8u+4ROugAiIG4ACCFu+4QAQi8OTrrraE/u+phM3xz4Tl4un051AABO\nVgAALwwobgAMKW4ACABQOXwAIABMLywASCBfTpAoX05eIF9QT07QTlb/AC8MIG4ACEPu\n/wBwPyLYUcj//ChuAAxB7v8AKUgAUDl8AAsATC8sAEggX06QHWwAcwAQKF9OXiBfUE9O\n0E5WAAAvDChuABApbgAMAFApbgAIAFQ5fAAIAEwvLABIIF9OkChfTl4gX978AAxO0E5x\ncAAvCTHAAiBOdXAAYPYiXyAfoSIuiE7RIl8gX6AlLoBqBkKXTvr/3E76/9YiHyAfIl8g\nX6AuIkFO0SAvAAQibwAIIG8ADKnvP0AAECBfT+8ADE7QIG8ABCAvAAhCZ6nuIF9QT07Q\nTlYAAC8ALwEgLwAUIi8AEE66ABQvQQAUIh8gH05eL1cABFiPTnVI5z4AKgBqAkSALAFq\nAkSBJAFIQkpCZhw2AEJASEBnBIDBNABIQjADgME0ACICQkBIQGAiJABCQEhASEJCQiYB\ncgB4D9SC0YDSgbCDbQSQg1IBUcz/8EqFagJEgLuGagJEgUzfAHxOdUjn4PAgbwAgQkAQ\nGCJvACRCQhQZZyKQQmwEQkFgIFNCJEgmSTICtQtWyf/8ZwpSiFHI/+5CQWAGIgiSrwAg\nP0EAJkzfDwcvVwAGXE9OdQAABLRgDgAAWEZDTgz+AAAAAAAAQfr/7iHICc5gAAH8MC8A\nBEPvAAYyAOVJ0sEgUSKXSOcA4HIAUkhgGiRhdAAUGtICZAyUAVMCcABy/2ACENpRyv/8\nUcj/5EzfBwAQgS5JUkEgV07QSOfgwCJvABggbwAcL28AFAAccAAQGDQAEhmyAGQCFAFT\nQm0IswhWyv/8ZgKyAEzfAwdQj051LwoibwAIJG8ADDAvABA0ABIasgJkAhQBEsJgAhLa\nUcr//LABJF8gX0/vAApO0CJfIF+gJS6AagJCl07RIl8gHyBfoCRO0SIfIB8iXyBfoC4i\nQU7RIC8ABCJvAAggbwAMqe8/QAAQIF9P7wAMTtBOVgAALwwobgAMKW4ACABQOXwAAwBM\nLywASCBfTpAtbABwABAoX05eIF9QT07QTlYAAC8MKG4AECluAAwAUCluAAgAVDl8AA4A\nTC8sAEggX06QKF9OXiBf3vwADE7QTlb/AC8MIG4ACEPu/wBwPyLYUcj//ChuAAxB7v8A\nKUgAUDl8AAcATC8sAEggX06QLWwAcAAQKF9OXiBfUE9O0E5W/wAvDCBuAAhD7v8AcD8i\n2FHI//wobgAMQe7/AClIAFA5fAAKAEwvLABIIF9OkC1sAHAAEChfTl4gX1BPTtBOVgAA\nLwwobgAQKW4ADABQKW4ACABUOXwACABMLywASCBfTpAoX05eIF/e/AAMTtBOVv3WSOcP\nMCZuAAh+zgxTAANtAAI+Qq7+5iorAAJZTy8LIEUvEE66/spwBrCfbAACIiBFIFAQEEiA\nDED/vmYAAhIgRSAQWoAgQBAQSIAMQP++ZgAB/i8LIEUgEFyALwBIbv7sTrr/aiBFIBBS\ngC8ASG7+4nAELwBOuv5QWU8vC0hu/uxOuv8KLV/+5kqu/uZnAAHALwsgawAGLxBIbv7s\nTrr/Lkh6AfJIbv7sTrr9oGYEQgZgOEh6AdpIbv7sTrr9jmYEfAFgJkh6AcJIbv7sTrr9\nfGYEfAJgFEh6AapIbv7sTrr9amYEfANgAnwESgZmcFlPLwsgawAKLxBOuv30VE89X/7W\nDG4A//7WbwY9fAD//tZVT0Hu/tYuCFKHLwcvLv7mcAEvAE66/a4+H0pHZgAA9C8rAAog\nX6ApVU8gawAKLxAvLv7mPi7+1kjHLwdOuv2GPh8vKwAKIF+gKmAAAMYvCyBrAAovEEhu\n/uxOuv5gEAZgAACiWU8vC0hu/uxOuv4OLV/+2FVPQe7+2C4IVIcvBy8u/uZwAi8ATrr9\nOj4fYAAAgllPLwtIbv7sTrr94C1f/thVT0hu/tgvLv7mfgIvB066/RI+H2BacAAQLv7s\nWUBsJkhu/dZIbv7sSHoAoD88AAJOuvweWE8/PAD/SG791khu/uxOuvyKHXwABP7sVU9I\nbv7tLy7+5n4ELwdOuvzGPh9gDlMAZwD/XFMAZ4RTAGemDFMAA28mSkdmIllPLy7+5k66\n/HooHyAEAkAAAWcOLy7+5iAEUoAvAE66/HBCKwBGLwswB0jALwBIbv7sTrr8vFlPLwtI\nbv7sTrr84CdfAEJM3wzwTl4un051BCAgICAWBHRuYW0IBGxvbmcIBHNob3IIBHMyNTUI\nAAAGbE5WAAAvLgAITroDRk5eLp9OdYpFTlRSWVBPSU5UAAAATlb/ACBuAAxD7v8AcD8i\n2FHI//wibgAIIGkACC8IQqcibgAILykACEhu/wBOugSsIB8gXyFAAEIgbgAILEhO+gQI\nAABOXiBfUE9O0IRGQUlMAAAATlYAAEjnAQg+LgAMKG4ACHABsEdmUC8sAAggbAAIIGgA\nAi8QSGz/AE66BPRIbP8ASHoA+E66BZIQH2cOSHoAYi8uAAhOuv9mYBxIbP8ASHoA2E66\nBXQQH2cMSHoAjC8uAAhOuv9IcAOwR17AcgSyR13BgAFnDEh6ACgvLgAITrr/LEzfEIBO\nXiBfXE9O0I9DSEVDS1BBUkFNQ09VTlQAjEZGb3JtOiBTZWFyY2goY29udGFpbmVyLCB0\naGVTdHJpbmcsIHNlYXJjaFdob2xlLCBFdmVyeSBPY2N1cnJlbmNlIEZsYWcpAD9TZWFy\nY2ggWEZDTiAxLjEgqTE5OTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIFJpZ2h0cyBS\nZXNlcnZlZC4BIQE/TlYAACBuABAgLgAM0ZBOXiBf3vwADE7QkElOQ1JFTUVOVFBPSU5U\nRVIAAABOVv/+SOcBGCZuAAwobgAIQgcgUxAQSIBnJgRAAA1nDgRAABNnFgRAAAxnCmAa\nUqz79H4BYBJSrPvwYAx+AWAIfgEZfAAB++5SkyBTShBXwMAHZwYZfAAB++4QB2e0TN8Y\ngE5eIF9QT07Qi1NDQU5UT1NQQUNFAABOVgAALwwobgAIIG4ADCBQEBBIgGcaBEAADWcI\nBEAAH2cIYBRSrPv0YA5SrPvwYAgZfAAB++5gEC8uAAxwAS8ALy4ACE66/xYoX05eIF9Q\nT07QiFNDQU5ORVhUAAAATlb9AC8MKG4ACC8sAAgvLgAMSG7+AE66AgQvLAAILy4AEEhu\n/wBOugH0ECz772cySGz9AEhu/wBIegBySG7+AEhs/ABIbv0APzwABU66AupB7P0AQ+79\nAHA/INlRyP/8YDZKLP0AZjBIbP0ASG7/AEh6ADpIbv4ASGz8AEhu/QA/PAAFTroCskHs\n/QBD7v0AcD8g2VHI//woX05eIF/e/AAMTtCFTE9HSVQAAgEsTlb77EjnHzggbgAIPVD7\n+j8u+/ovDk66/QxCpy8uAAggbgAIIGgABi8QTroBBCAfPUD7+C8uAAggbgAIIGgACi8Q\nSG7/AE66AfpCZy8uAAhIbv8ATroBoB1f++1wBLBu+/pmCB18AAH772AEQi7770Iu++5w\nAS1A+/RwAS1A+/BCLv0AHXwAAf8AHXwAAfwAHXwADfwBIG4ACCBoAAItUPv8QmcgbgAI\nIGgABi8QLy77/D8u+/g/Lvv4TroBwkpfZhYvLvv0Ly778C8OTrr+hBAu++9mAmAkEC77\n7WcMSG77/C8OTrr9lmAKSG77/C8OTrr+AnABsC777mamIG4ACC8IQqcvLgAISG79AE66\nAJwgHyBfIUAAQk/u+8xM3xz4Tl4un051hlNFQVJDSAAAAE5WAAAvDChuAAwpbgAIAFA5\nfAADAEwvLABIIF9OkC1sAHAAEChfTl4gX1BPTtCMU1RSSU5HTEVOR1RIAAAATlYAAC8M\nKG4AECluAAwAUCluAAgAVDl8AA0ATC8sAEggX06QKF9OXiBf3vwADE7QiUxPTkdUT1NU\nUgAATlb/AC8MIG4ACEPu/wBwPyLYUcj//ChuAAxB7v8AKUgAUDl8AAcATC8sAEggX06Q\nLWwAcAAQKF9OXiBfUE9O0IlQQVNUT1pFUk8AAE5W/wAvDCBuAAhD7v8AcD8i2FHI//wo\nbgAMQe7/AClIAFA5fAALAEwvLABIIF9OkB1sAHMAEChfTl4gX1BPTtCJU1RSVE9CT09M\nAABOVgAALwwobgAQKW4ADABQKW4ACABUOXwACABMLywASCBfTpAoX05eIF/e/AAMTtCJ\nWkVST1RPUEFTAAA0PAAMIF8/Ai8Ire1I5+DgQ+8AHDAZIFk0ANRC1ELSwkJBUkhgICRh\nQkIUGtJCDEEA/28OBEEA/5RBMjwA/2ACENpRyv/8Ucj/3iBhEIEwISBJ0EDQQNDAVEgg\noSKITN8HBy5fTnVI58DAcgFgBkjnwMBCQSBvABgibwAUQkAQELMIVsj//GYECkEAAR9B\nABovbwAQABZM3wMDXE9OdQAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAZcAAAL6\ngAAHBsAABgHAAAsA4AAPD6B539ngijsf4Iv7GGCaFxjgaf3PwAAOAKAADYOQAAd9SAAD\n/6QAAPjSAAAAaQAAADUAAAAbAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZuAA\nlgAAAAAABw5SZXF1aXJlZCBTdWl0ZSxFdmVudHMgdGhhdCBldmVyeSBhcHBsaWNhdGlv\nbiBzaG91bGQgc3VwcG9ydHJlcWQAAQABAAMET3BlbiRPcGVuIHRoZSBzcGVjaWZpZWQg\nbGlzdCBvZiBkb2N1bWVudHNhZXZ0b2RvY251bGwAAIAAYWxpcxlMaXN0IG9mIGRvY3Vt\nZW50cyB0byBvcGVuUAAAAAVQcmludCVQcmludCB0aGUgc3BlY2lmaWVkIGxpc3Qgb2Yg\nZG9jdW1lbnRzYWV2dHBkb2NudWxsAACAAGFsaXMaTGlzdCBvZiBkb2N1bWVudHMgdG8g\ncHJpbnQAQAAAAARRdWl0EFF1aXQgYXBwbGljYXRpb25hZXZ0cXVpdG51bGwAAIAAbnVs\nbBxObyBkaXJlY3QgcGFyYW1ldGVyIHJlcXVpcmVkAJAAAAAAAAAAAAAKQ29yZSBTdWl0\nZSZTdWl0ZSB0aGF0IGFwcGxpZXMgdG8gYWxsIGFwcGxpY2F0aW9uc2NvcmUAAQABABAF\nQ2xvbmUPQ2xvbmUgYW4gb2JqZWN0Y29yZWNsb25vYmogAAAAAG9iaiATVGhlIG9iamVj\ndCB0byBjbG9uZRAAAAECVG8AaW5zaGluc2wfVGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhl\nIG9iamVjdIAABUNsb3NlD0Nsb3NlIGFuIG9iamVjdGNvcmVjbG9zbnVsbAAAgABvYmog\nE1RoZSBvYmplY3QgdG8gY2xvc2UQAAACBFNhdmUAc2F2b3Nhdm8/U3BlY2lmaWVzIHdo\nZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5n\noAAJU2F2aW5nIElua2ZpbGFsaXMkVGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUg\nb2JqZWN0AIAABUNvdW50RFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEg\ncGFydGljdWxhciBjbGFzcyB3aXRoaW4gYW4gb2JqZWN0AGNvcmVjbnRlbG9uZwAAAABv\nYmogK1RoZSBvYmplY3Qgd2hvc2UgZWxlbWVudHMgYXJlIHRvIGJlIGNvdW50ZWQAAAAB\nBUNsYXNza29jbHR5cGUnVGhlIGNsYXNzIG9mIHRoZSBlbGVtZW50cyB0byBiZSBjb3Vu\ndGVkAAAGQ3JlYXRlFENyZWF0ZSBhIG5ldyBlbGVtZW50Y29yZWNyZWxvYmogAAAAAG51\nbGwAAJAAAAQDTmV3a29jbHR5cGUcVGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAAA\nAAJBdABpbnNoaW5zbCtUaGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBl\nbGVtZW50AAAJV2l0aCBEYXRhZGF0YSoqKiogVGhlIGluaXRpYWwgZGF0YSBmb3IgdGhl\nIGVsZW1lbnQAgAAPV2l0aCBQcm9wZXJ0aWVzcHJkdHJlY28yVGhlIGluaXRpYWwgZGF0\nYSBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQAgAAGRGVsZXRlIERlbGV0\nZSBhbiBlbGVtZW50IGZyb20gYW4gb2JqZWN0Y29yZWRlbG9udWxsAACAAG9iaiAVVGhl\nIGVsZW1lbnQgdG8gZGVsZXRlEAAAAAZFeGlzdHMYVGVsbCBpZiBhbiBvYmplY3QgZXhp\nc3RzY29yZWRvZXhib29sAAAAAG9iaiAWVGhlIG9iamVjdCBpbiBxdWVzdGlvbgAAAAAA\nCkNsYXNzIEluZm8lR2V0IGluZm9ybWF0aW9uIGFib3V0IGFuIG9iamVjdCBjbGFzcwBj\nb3JlcW9iamNsaW4AAAAAdHlwZTVUaGUgb2JqZWN0IGNsYXNzIGFib3V0IHdoaWNoIGlu\nZm9ybWF0aW9uIGlzIHJlcXVlc3RlZIAAAAECSW4Ad3JjZGludGxDVGhlIGh1bWFuIGxh\nbmd1YWdlIGFuZCBzY3JpcHQgc3lzdGVtIGluIHdoaWNoIHRvIHJldHVybiBpbmZvcm1h\ndGlvboAACEdldCBEYXRhGkdldCB0aGUgZGF0YSBmb3IgYW4gb2JqZWN0Y29yZWdldGQq\nKioqAAAAAG9iaiAnVGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVk\nAAAAAQJBcwBydHlwdHlwZTZUaGUgZGVzaXJlZCB0eXBlcyBmb3IgdGhlIGRhdGEsIGlu\nIG9yZGVyIG9mIHByZWZlcmVuY2UAwAAJRGF0YSBTaXplJVJldHVybiB0aGUgc2l6ZSBp\nbiBieXRlcyBvZiBhbiBvYmplY3Rjb3JlZHNpemxvbmcAAAAAb2JqICxUaGUgb2JqZWN0\nIHdob3NlIGRhdGEgc2l6ZSBpcyB0byBiZSByZXR1cm5lZAAAAAABAkFzAHJ0eXB0eXBl\nLlRoZSBkYXRhIHR5cGUgZm9yIHdoaWNoIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQAgAAK\nRXZlbnQgSW5mbzFHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFwcGxlIGV2ZW50cyBp\nbiBhIHN1aXRlAGNvcmVndGVpZXZpbgAAQAB0eXBlQ1RoZSBldmVudCBjbGFzcyBvZiB0\naGUgQXBwbGUgZXZlbnRzIGZvciB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24AAAAB\nAkluAHdyY2RpbnRsQ1RoZSBodW1hbiBsYW5ndWFnZSBhbmQgc2NyaXB0IHN5c3RlbSBp\nbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb26AAARNb3ZlDk1vdmUgYW4gb2JqZWN0\nY29yZW1vdmVvYmogAAAAAG9iaiASVGhlIG9iamVjdCB0byBtb3ZlABAAAAECVG8AaW5z\naGluc2wfVGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhlIG9iamVjdAAABE9wZW4OT3BlbiBh\nbiBvYmplY3RhZXZ0b2RvY251bGwAAIAAb2JqIBJUaGUgb2JqZWN0IHRvIG9wZW4AEAAA\nAAVQcmludA9QcmludCBhbiBvYmplY3RhZXZ0cGRvY251bGwAAIAAb2JqIBNUaGUgb2Jq\nZWN0IHRvIHByaW50AAAAAARRdWl0MFBlcmZvcm0gdGFza3MgYmVmb3JlIHRlcm1pbmF0\naW9uLCB0aGVuIHRlcm1pbmF0ZWFldnRxdWl0bnVsbAAAgABudWxsAACQAAABBFNhdmUA\nc2F2b3Nhdm85U3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIHNhdmUgY3VycmVudGx5\nIG9wZW4gZG9jdW1lbnRzoAAEU2F2ZQ5TYXZlIGFuIG9iamVjdGNvcmVzYXZlbnVsbAAA\ngABvYmogElRoZSBvYmplY3QgdG8gc2F2ZQAQAAACAkluAGtmaWxhbGlzJFRoZSBmaWxl\nIGluIHdoaWNoIHRvIHNhdmUgdGhlIG9iamVjdACAAAJBcwBmbHRwdHlwZTdUaGUgZmls\nZSB0eXBlIG9mIHRoZSBkb2N1bWVudCBpbiB3aGljaCB0byBzYXZlIHRoZSBkYXRhgAAI\nU2V0IERhdGEUU2V0IGFuIG9iamVjdCdzIGRhdGFjb3Jlc2V0ZG51bGwAAIAAb2JqIBRU\naGUgb2JqZWN0IHRvIGNoYW5nZQAQAAABAlRvAGRhdGEqKioqDVRoZSBuZXcgdmFsdWUA\nAAAIC0FwcGxpY2F0aW9uY2FwcBdBIE1hY2ludG9zaCBhcHBsaWNhdGlvbgAJCUJlc3Qg\nVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0\neXBlCVRoZSBjbGFzcwAACUNsaXBib2FyZHBjbGkqKioqDVRoZSBjbGlwYm9hcmRQAAxE\nZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAAS\nSW5zZXJ0aW9uIGxvY2F0aW9uAHBpbnNpbnNsTVRoZSBsb2NhdGlvbiB3aGVyZSB0aGUg\nY29udGVudHMgb2YgdGhlIGNsaXBib2FyZCB3b3VsZCBiZSBpbnNlcnRlZCBieSBhIHBh\nc3RlAAAJRnJvbnRtb3N0cGlzZmJvb2wiSXMgdGhpcyB0aGUgZnJvbnRtb3N0IGFwcGxp\nY2F0aW9uPwAAAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lAAAADlVzZXIgU2VsZWN0aW9u\nAHB1c2xjc2VsLVRoZSBjdXJyZW50IHVzZXIgc2VsZWN0aW9uIG9yIGluc2VydGlvbiBw\nb2ludAAAB1ZlcnNpb252ZXJzbG9uZyVUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGFw\ncGxpY2F0aW9uAAAAAmRvY3UAAmluZHhuYW1lY3dpbgACaW5keG5hbWUJQ2hhcmFjdGVy\nY2hhIAtBIGNoYXJhY3RlcgAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2Ny\naXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9yY29scmNS\nR0IJVGhlIGNvbG9yEAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRl\nc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9udGN0eHQUVGhlIG5hbWUgb2YgdGhlIGZvbnQA\nEAAEU2l6ZQBwdHN6Zml4ZBJUaGUgc2l6ZSBpbiBwb2ludHMAEAAMV3JpdGluZyBDb2Rl\nAHBzY3RpbnRsHlRoZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVTdHlsZXR4\nc3R0c3R5DlRoZSB0ZXh0IHN0eWxlABAADlVuaWZvcm0gU3R5bGVzAHVzdGx0c3R5DlRo\nZSB0ZXh0IHN0eWxlAAAAAAJjaGEgAAFpbmR4Y3R4dAABaW5keA9UZXh0IFN0eWxlIElu\nZm90c3R5HU9uIGFuZCBPZmYgc3R5bGVzIG9mIHRleHQgcnVuAAIJT24gU3R5bGVzb25z\ndHN0eWwjVGhlIHN0eWxlcyB0aGF0IGFyZSBvbiBmb3IgdGhlIHRleHRgAApPZmYgU3R5\nbGVzAG9mc3RzdHlsKFRoZSBzdHlsZXMgdGhhdCBhcmUgb2ZmIGZvciBhbGwgdGhlIHRl\neHQAYAAAAAhEb2N1bWVudABkb2N1CkEgZG9jdW1lbnQAAAUJQmVzdCBUeXBlcGJzdHR5\ncGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhlIGNs\nYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3Ig\ndHlwZQAACE1vZGlmaWVkAGltb2Rib29sM0hhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2Rp\nZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPwAABE5hbWUAcG5hbWl0eHQIVGhlIG5hbWUA\nAAAAAWZpbGUAAmluZHhuYW1lBEZpbGUAZmlsZQZBIGZpbGUAAAUJQmVzdCBUeXBlcGJz\ndHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhl\nIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0\nb3IgdHlwZQAAClN0YXRpb25lcnkAcHNwZGJvb2weSXMgdGhlIGZpbGUgYSBzdGF0aW9u\nZXJ5IGZpbGU/ABAABE5hbWUAcG5hbWl0eHQIVGhlIG5hbWUAAAAAAAlTZWxlY3Rpb25j\nc2VsIVRoZSBzZWxlY3Rpb24gdmlzaWJsZSB0byB0aGUgdXNlcgADCUJlc3QgVHlwZXBi\nc3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRo\nZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAABb2JqIAABaW5keARUZXh0AGN0eHQEVGV4dAAACQlCZXN0IFR5cGVw\nYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAFQ2xhc3NwY2xzdHlwZQlU\naGUgY2xhc3MAAAVDb2xvcmNvbHJjUkdCIFRoZSBjb2xvciBvZiB0aGUgZmlyc3QgY2hh\ncmFjdGVyABAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAARGb250AGZvbnRjdHh0K1RoZSBuYW1lIG9mIHRoZSBmb250IG9mIHRo\nZSBmaXJzdCBjaGFyYWN0ZXIQAARTaXplAHB0c3pmaXhkKVRoZSBzaXplIGluIHBvaW50\ncyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAAMV3JpdGluZyBDb2RlAHBzY3RpbnRsHlRo\nZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVTdHlsZXR4c3R0c3R5JVRoZSB0\nZXh0IHN0eWxlIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIQAA5Vbmlmb3JtIFN0eWxlcwB1\nc3RsdHN0eTRUaGUgdGV4dCBzdHlsZXMgdGhhdCBhcmUgdW5pZm9ybSB0aHJvdWdob3V0\nIHRoZSB0ZXh0AAAAAAJjaGEgAAFpbmR4Y3R4dAABaW5keAZXaW5kb3cAY3dpbghBIHdp\nbmRvdwAADwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUA\nAAAGQm91bmRzAHBibmRxZHJ0JVRoZSBib3VuZGFyeSByZWN0YW5nbGUgZm9yIHRoZSB3\naW5kb3cQAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0\ndHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAA1IYXMgQ2xvc2UgQm94aGNs\nYmJvb2whRG9lcyB0aGUgd2luZG93IGhhdmUgYSBjbG9zZSBib3g/AAANSGFzIFRpdGxl\nIEJhcnB0aXRib29sIURvZXMgdGhlIHdpbmRvdyBoYXZlIGEgdGl0bGUgYmFyPwAABUlu\nZGV4cGlkeGxvbmcYVGhlIG51bWJlciBvZiB0aGUgd2luZG93ABAACEZsb2F0aW5nAGlz\nZmxib29sFkRvZXMgdGhlIHdpbmRvdyBmbG9hdD8AAAAFTW9kYWxwbW9kYm9vbBRJcyB0\naGUgd2luZG93IG1vZGFsPwAAAAlSZXNpemFibGVwcnN6Ym9vbBhJcyB0aGUgd2luZG93\nIHJlc2l6YWJsZT8AAAAIWm9vbWFibGUAaXN6bWJvb2wXSXMgdGhlIHdpbmRvdyB6b29t\nYWJsZT8AAAZab29tZWQAcHp1bWJvb2wVSXMgdGhlIHdpbmRvdyB6b29tZWQ/EAAETmFt\nZQBwbmFtaXR4dBdUaGUgdGl0bGUgb2YgdGhlIHdpbmRvdxAACVNlbGVjdGlvbnNlbGVj\nc2VsIVRoZSBzZWxlY3Rpb24gdmlzaWJsZSB0byB0aGUgdXNlchAAB1Zpc2libGVwdmlz\nYm9vbBZJcyB0aGUgd2luZG93IHZpc2libGU/ABAAAAFkb2N1AAJpbmR4bmFtZQAIC2Jl\nZ2lucyB3aXRoYmd3dAtCZWdpbnMgd2l0aAhjb250YWlucwBjb250CENvbnRhaW5zAAll\nbmRzIHdpdGhlbmRzCUVuZHMgd2l0aAE9PSAgIAVFcXVhbAE+PiAgIAxHcmVhdGVyIHRo\nYW4AAj49AD49ICAYR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvAAE8PCAgIAlMZXNzIHRo\nYW4CPD0APD0gIBVMZXNzIHRoYW4gb3IgZXF1YWwgdG8ABHNhdm8AAwNZZXN5ZXMgEFNh\ndmUgb2JqZWN0cyBub3cAAk5vAG5vICATRG8gbm90IHNhdmUgb2JqZWN0cwNBc2thc2sg\nHEFzayB0aGUgdXNlciB3aGV0aGVyIHRvIHNhdmUAcG9zaQAFBkJlZm9yZQBiZWZvF0Jl\nZm9yZSBzcGVjaWZpZWQgb2JqZWN0BUFmdGVyYWZ0ZRZBZnRlciBzcGVjaWZpZWQgb2Jq\nZWN0AAlCZWdpbm5pbmdiZ25nK0F0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmll\nZCBjb250YWluZXIDRW5kZW5kICVBdCB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQgY29u\ndGFpbmVyB1JlcGxhY2VycGxjHlJlcGxhY2luZyB0aGUgc3BlY2lmaWVkIG9iamVjdABr\nZnJtAAMFaW5kZXhpbmR4ImtleWZvcm0gZGVzaWduYXRpbmcgaW5kZXhlZCBhY2Nlc3MA\nBW5hbWVkbmFtZSBrZXlmb3JtIGRlc2lnbmF0aW5nIG5hbWVkIGFjY2VzcwACSUQAaWQg\nICRrZXlmb3JtIGRlc2lnbmF0aW5nIGlkZW50aWZlciBhY2Nlc3MAc3R5bAAPBVBsYWlu\ncGxhbgVQbGFpbgRCb2xkAGJvbGQEQm9sZAAGSXRhbGljAGl0YWwGSXRhbGljAAdPdXRs\naW5lb3V0bAdPdXRsaW5lBlNoYWRvdwBzaGFkBlNoYWRvdwAJVW5kZXJsaW5ldW5kbAlV\nbmRlcmxpbmULU3VwZXJzY3JpcHRzcHNjC1N1cGVyc2NyaXB0CVN1YnNjcmlwdHNic2MJ\nU3Vic2NyaXB0DVN0cmlrZXRocm91Z2hzdHJrDVN0cmlrZXRocm91Z2gKU21hbGwgQ2Fw\ncwBzbWNwClNtYWxsIENhcHMACUFsbCBDYXBzIGFsY3AJQWxsIENhcHMgCUxvd2VyY2Fz\nZWxvd2MJTG93ZXJjYXNlCUNvbmRlbnNlZGNvbmQJQ29uZGVuc2VkCEV4cGFuZGVkAHBl\neHAIRXhwYW5kZWQABkhpZGRlbgBoaWRuBkhpZGRlbgAKVGV4dCBTdWl0ZSpBIHNldCBv\nZiBiYXNpYyBjbGFzc2VzIGZvciB0ZXh0IHByb2Nlc3NpbmdURVhUAAEAAQAAAAYJQ2hh\ncmFjdGVyY2hhIAtBIGNoYXJhY3RlcgAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0\nIGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9y\nY29scmNSR0IJVGhlIGNvbG9yEAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZh\ndWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9udGN0eHQUVGhlIG5hbWUgb2YgdGhl\nIGZvbnQAEAAEU2l6ZQBwdHN6Zml4ZBJUaGUgc2l6ZSBpbiBwb2ludHMAEAAMV3JpdGlu\nZyBDb2RlAHBzY3RpbnRsHlRoZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVT\ndHlsZXR4c3R0c3R5DlRoZSB0ZXh0IHN0eWxlABAADlVuaWZvcm0gU3R5bGVzAHVzdGx0\nc3R5DlRoZSB0ZXh0IHN0eWxlAAAAAAVjaGEgAAFpbmR4Y2xpbgABaW5keGNwYXIAAWlu\nZHhjdHh0AAFpbmR4Y3dvcgABaW5keARMaW5lAGNsaW4OQSBsaW5lIG9mIHRleHQAAAoJ\nQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNz\ncGNsc3R5cGUJVGhlIGNsYXNzAAAFQ29sb3Jjb2xyY1JHQiBUaGUgY29sb3Igb2YgdGhl\nIGZpcnN0IGNoYXJhY3RlcgAQAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1\nbHQgZGVzY3JpcHRvciB0eXBlAAAERm9udABmb250Y3R4dCtUaGUgbmFtZSBvZiB0aGUg\nZm9udCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAANSnVzdGlmaWNhdGlvbnBqc3RqdXN0\nGUp1c3RpZmljYXRpb24gb2YgdGhlIHRleHQwAARTaXplAHB0c3pmaXhkKVRoZSBzaXpl\nIGluIHBvaW50cyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAAMV3JpdGluZyBDb2RlAHBz\nY3RpbnRsNVRoZSBzY3JpcHQgc3lzdGVtIGFuZCBsYW5ndWFnZSBvZiB0aGUgZmlyc3Qg\nY2hhcmFjdGVyAAAFU3R5bGV0eHN0dHN0eSVUaGUgdGV4dCBzdHlsZSBvZiB0aGUgZmly\nc3QgY2hhcmFjdGVyEAAOVW5pZm9ybSBTdHlsZXMAdXN0bHRzdHk0VGhlIHRleHQgc3R5\nbGVzIHRoYXQgYXJlIHVuaWZvcm0gdGhyb3VnaG91dCB0aGUgbGluZQAAAAAFY2hhIAAB\naW5keGNsaW4AAWluZHhjcGFyAAFpbmR4Y3R4dAABaW5keGN3b3IAAWluZHgJUGFyYWdy\nYXBoY3BhcgtBIHBhcmFncmFwaAAKCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRl\nc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9yY29s\ncmNSR0IgVGhlIGNvbG9yIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIAEAAMRGVmYXVsdCBU\neXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9u\ndGN0eHQrVGhlIG5hbWUgb2YgdGhlIGZvbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlchAA\nDUp1c3RpZmljYXRpb25wanN0anVzdBlKdXN0aWZpY2F0aW9uIG9mIHRoZSB0ZXh0MAAE\nU2l6ZQBwdHN6Zml4ZClUaGUgc2l6ZSBpbiBwb2ludHMgb2YgdGhlIGZpcnN0IGNoYXJh\nY3RlchAADFdyaXRpbmcgQ29kZQBwc2N0aW50bB5UaGUgc2NyaXB0IHN5c3RlbSBhbmQg\nbGFuZ3VhZ2UAAAAFU3R5bGV0eHN0dHN0eSVUaGUgdGV4dCBzdHlsZSBvZiB0aGUgZmly\nc3QgY2hhcmFjdGVyEAAOVW5pZm9ybSBTdHlsZXMAdXN0bHRzdHk5VGhlIHRleHQgc3R5\nbGVzIHRoYXQgYXJlIHVuaWZvcm0gdGhyb3VnaG91dCB0aGUgcGFyYWdyYXBoAAAABWNo\nYSAAAWluZHhjbGluAAFpbmR4Y3BhcgABaW5keGN0eHQAAWluZHhjd29yAAFpbmR4BFRl\neHQAY3R4dARUZXh0AAAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0\nb3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9yY29scmNSR0Ig\nVGhlIGNvbG9yIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIAEAAMRGVmYXVsdCBUeXBlAGRl\nZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQAZm9udGN0eHQr\nVGhlIG5hbWUgb2YgdGhlIGZvbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlchAABFNpemUA\ncHRzemZpeGQpVGhlIHNpemUgaW4gcG9pbnRzIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIQ\nAAxXcml0aW5nIENvZGUAcHNjdGludGweVGhlIHNjcmlwdCBzeXN0ZW0gYW5kIGxhbmd1\nYWdlAAAABVN0eWxldHhzdHRzdHk8VGhlIHRleHQgc3R5bGUgb2YgdGhlIGZpcnN0IGNo\nYXJhY3RlciBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyABAADlVuaWZvcm0gU3R5bGVzAHVz\ndGx0c3R5NFRoZSB0ZXh0IHN0eWxlcyB0aGF0IGFyZSB1bmlmb3JtIHRocm91Z2hvdXQg\ndGhlIHRleHQAEAAABWNoYSAAAWluZHhjbGluAAFpbmR4Y3BhcgABaW5keGN0eHQAAWlu\nZHhjd29yAAFpbmR4CVRleHQgRmxvd2NmbG8aQSBjb250aWd1b3VzIGJsb2NrIG9mIHRl\neHQAAAsJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAA\nBUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAFQ29sb3Jjb2xyY1JHQiBUaGUgY29sb3Ig\nb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgAQAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhl\nIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAAERm9udABmb250Y3R4dCtUaGUgbmFtZSBv\nZiB0aGUgZm9udCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAANSnVzdGlmaWNhdGlvbnBq\nc3RqdXN0GUp1c3RpZmljYXRpb24gb2YgdGhlIHRleHQwAARTaXplAHB0c3pmaXhkKVRo\nZSBzaXplIGluIHBvaW50cyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyEAAETmFtZQBwbmFt\naXR4dAhUaGUgbmFtZQAQAAxXcml0aW5nIENvZGUAcHNjdGludGweVGhlIHNjcmlwdCBz\neXN0ZW0gYW5kIGxhbmd1YWdlAAAABVN0eWxldHhzdHRzdHklVGhlIHRleHQgc3R5bGUg\nb2YgdGhlIGZpcnN0IGNoYXJhY3RlchAADlVuaWZvcm0gU3R5bGVzAHVzdGx0c3R5NFRo\nZSB0ZXh0IHN0eWxlcyB0aGF0IGFyZSB1bmlmb3JtIHRocm91Z2hvdXQgdGhlIHRleHQA\nAAAABWNoYSAAAWluZHhjbGluAAFpbmR4Y3BhcgABaW5keGN0eHQAAWluZHhjd29yAAFp\nbmR4BFdvcmQAY3dvcgZBIHdvcmQAAAkJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3Qg\nZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAFQ29sb3Jj\nb2xyY1JHQiBUaGUgY29sb3Igb2YgdGhlIGZpcnN0IGNoYXJhY3RlcgAQAAxEZWZhdWx0\nIFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAAERm9udABm\nb250Y3R4dCtUaGUgbmFtZSBvZiB0aGUgZm9udCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVy\nEAAEU2l6ZQBwdHN6Zml4ZClUaGUgc2l6ZSBpbiBwb2ludHMgb2YgdGhlIGZpcnN0IGNo\nYXJhY3RlchAADFdyaXRpbmcgQ29kZQBwc2N0aW50bB5UaGUgc2NyaXB0IHN5c3RlbSBh\nbmQgbGFuZ3VhZ2UAAAAFU3R5bGV0eHN0dHN0eSVUaGUgdGV4dCBzdHlsZSBvZiB0aGUg\nZmlyc3QgY2hhcmFjdGVyEAAOVW5pZm9ybSBTdHlsZXMAdXN0bHRzdHk0VGhlIHRleHQg\nc3R5bGVzIHRoYXQgYXJlIHVuaWZvcm0gdGhyb3VnaG91dCB0aGUgd29yZAAQAAAFY2hh\nIAABaW5keGNsaW4AAWluZHhjcGFyAAFpbmR4Y3R4dAABaW5keGN3b3IAAWluZHgAAgI9\nPQBjc2VxFENhc2Utc2Vuc2l0aXZlIG1hdGNoAAMvPS93d2VxNENoYXJhY3RlcnMgbWF0\nY2ggYW5kIG9wZXJhbmRzIGVuZCBvbiB3b3JkIGJvdW5kYXJpZXMAAAFqdXN0AAQETGVm\ndABsZWZ0FkFsaWduIHdpdGggbGVmdCBtYXJnaW4ABVJpZ2h0cmdodBdBbGlnbiB3aXRo\nIHJpZ2h0IG1hcmdpbgZDZW50ZXIAY2VudBFBbGlnbiB3aXRoIGNlbnRlcgRGdWxsAGZ1\nbGwmQWxpZ24gd2l0aCBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMAGFF1aWNrRHJh\ndyBHcmFwaGljcyBTdWl0ZSNBIHNldCBvZiBiYXNpYyBjbGFzc2VzIGZvciBncmFwaGlj\ncwBxZHJ3AAEAAQAAAA0DQXJjY2FyYwZBbiBhcmMAAA0JQXJjIGFuZ2xlcGFyY2ZpeGQb\nQW5nbGUgb2YgdGhlIGFyYyBpbiBkZWdyZWVzEAAJQmVzdCBUeXBlcGJzdHR5cGUYVGhl\nIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABkJvdW5kcwBwYm5kcWRydDNUaGUgc21hbGxl\nc3QgcmVjdGFuZ2xlIHRoYXQgY29udGFpbnMgdGhlIGVudGlyZSBhcmMQAAVDbGFzc3Bj\nbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVs\ndCBkZXNjcmlwdG9yIHR5cGUAAA9EZWZpbml0aW9uIFJlY3RwZHJ0cWRydEVUaGUgcmVj\ndGFuZ2xlIHRoYXQgY29udGFpbnMgdGhlIGNpcmNsZSBvciBvdmFsIHVzZWQgdG8gZGVm\naW5lIHRoZSBhcmMQAApGaWxsIENvbG9yAGZsY2xjUkdCDlRoZSBmaWxsIGNvbG9yABAA\nDEZpbGwgUGF0dGVybgBmbHB0Y3BpeBBUaGUgZmlsbCBwYXR0ZXJuABAACVBlbiBDb2xv\ncnBwY2xjUkdCDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFjcGl4D1RoZSBw\nZW4gcGF0dGVybhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lkdGgQAAtTdGFy\ndCBhbmdsZXBhbmdmaXhkN1RoZSBhbmdsZSB0aGF0IGRlZmluZXMgdGhlIHN0YXJ0IG9m\nIHRoZSBhcmMsIGluIGRlZ3JlZXMQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRy\nYW5zZmVyIG1vZGUwAAAADERyYXdpbmcgQXJlYQBjZHJ3MUNvbnRhaW5lciBmb3IgZ3Jh\ncGhpY3MgYW5kIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24AFxBCYWNrZ3JvdW5kIENvbG9y\nAHBiY2xjUkdCKlRoZSBjb2xvciB1c2VkIHRvIGZpbGwgaW4gdW5vY2N1cGllZCBhcmVh\ncwAQABJCYWNrZ3JvdW5kIFBhdHRlcm4AcGJwdGNwaXgsVGhlIHBhdHRlcm4gdXNlZCB0\nbyBmaWxsIGluIHVub2NjdXBpZWQgYXJlYXMAEAAJQmVzdCBUeXBlcGJzdHR5cGUYVGhl\nIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABkJvdW5kcwBwYm5kcWRydCxUaGUgcmVjdGFu\nZ2xlIHRoYXQgY29udGFpbnMgdGhlIGRyYXdpbmcgYXJlYQAQAAVDbGFzc3BjbHN0eXBl\nCVRoZSBjbGFzcwAAC0NvbG9yIFRhYmxlY2x0YmNscnQPVGhlIGNvbG9yIHRhYmxlEAAM\nRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAA\nCkZpbGwgQ29sb3IAZmxjbGNSR0IvVGhlIGRlZmF1bHQgZmlsbCBjb2xvciB1c2VkIGZv\nciBncmFwaGljIG9iamVjdHMQAAxGaWxsIFBhdHRlcm4AZmxwdGNwaXgxVGhlIGRlZmF1\nbHQgZmlsbCBwYXR0ZXJuIHVzZWQgZm9yIGdyYXBoaWMgb2JqZWN0cxAACE9yZGVyaW5n\nAGdvYnNvYmogN1RoZSBvcmRlcmVkIGxpc3Qgb2YgZ3JhcGhpYyBvYmplY3RzIGluIHRo\nZSBkcmF3aW5nIGFyZWFQAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lABAAEERlZmF1bHQg\nTG9jYXRpb24AcG5lbFFEcHQvVGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgZWFjaCBuZXcg\nZ3JhcGhpYyBvYmplY3QQAAlQZW4gQ29sb3JwcGNsY1JHQg1UaGUgcGVuIGNvbG9yEAAL\nUGVuIFBhdHRlcm5wcHBhY3BpeA9UaGUgcGVuIHBhdHRlcm4QAAlQZW4gV2lkdGhwcHdk\nc2hvcg1UaGUgcGVuIHdpZHRoEAALUGl4ZWwgRGVwdGhwZHB0c2hvcg5CaXRzIHBlciBw\naXhlbAAQAAxXcml0aW5nIENvZGUAcHNjdGludGxCVGhlIHNjcmlwdCBzeXN0ZW0gYW5k\nIGxhbmd1YWdlIG9mIHRleHQgb2JqZWN0cyBpbiB0aGUgZHJhd2luZyBhcmVhAAAAClRl\neHQgQ29sb3IAcHR4Y2NSR0IiVGhlIGRlZmF1bHQgY29sb3IgZm9yIHRleHQgb2JqZWN0\ncwAQAARGb250AHB0eGZpdHh0LVRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGZvbnQgZm9y\nIHRleHQgb2JqZWN0cxAABFNpemUAcHRwc2ZpeGQnVGhlIGRlZmF1bHQgcG9pbnQgc2l6\nZSBmb3IgdGV4dCBvYmplY3RzEAAFU3R5bGV0eHN0dHN0eSdUaGUgZGVmYXVsdCB0ZXh0\nIHN0eWxlIGZvciB0ZXh0IG9iamVjdHMQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4tVGhl\nIGRlZmF1bHQgdHJhbnNmZXIgbW9kZSBmb3IgZ3JhcGhpYyBvYmplY3RzMAAQVXBkYXRl\nIE9uIENoYW5nZQBwdXBkYm9vbBlSZWRyYXcgYWZ0ZXIgZWFjaCBjaGFuZ2U/EAAACmNh\ncmMAAmluZHhuYW1lZ2xpbgACaW5keG5hbWVjZ3R4AAJpbmR4bmFtZWNwaWMAAmluZHhu\nYW1lY292bAACaW5keG5hbWVjcGl4AAJpbmR4bmFtZWNwZ24AAmluZHhuYW1lY3JlYwAC\naW5keG5hbWVjcnJjAAJpbmR4bmFtZWNnb2IAAmluZHhuYW1lDEdyYXBoaWMgTGluZQBn\nbGluDkEgZ3JhcGhpYyBsaW5lAAAMCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRl\nc2NyaXB0b3IgdHlwZQAAAAZCb3VuZHMAcGJuZHFkcnQ+VGhlIHNtYWxsZXN0IHJlY3Rh\nbmdsZSB0aGF0IGNvbnRhaW5zIHRoZSBlbnRpcmUgZ3JhcGhpYyBvYmplY3QAEAAFQ2xh\nc3NwY2xzdHlwZQlUaGUgY2xhc3MAAApEYXNoIFN0eWxlAHBkc3R0ZGFzDlRoZSBkYXNo\nIHN0eWxlAFAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAlFbmQgUG9pbnRwZW5kUURwdBxUaGUgZW5kaW5nIHBvaW50IG9mIHRo\nZSBsaW5lABAAC0Fycm93IFN0eWxlYXJyb2Fycm8PVGhlIGFycm93IHN0eWxlMAAJUGVu\nIENvbG9ycHBjbGNSR0INVGhlIHBlbiBjb2xvchAAC1BlbiBQYXR0ZXJucHBwYWNwaXgP\nVGhlIHBlbiBwYXR0ZXJuEAAJUGVuIFdpZHRocHB3ZHNob3INVGhlIHBlbiB3aWR0aBAA\nC1N0YXJ0IFBvaW50cHN0cFFEcHQeVGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBsaW5l\nABAADVRyYW5zZmVyIE1vZGVwcHRtdHJhbhFUaGUgdHJhbnNmZXIgbW9kZTAAAAAOR3Jh\ncGhpYyBPYmplY3QAY2dvYhBBIGdyYXBoaWMgb2JqZWN0AAAFCUJlc3QgVHlwZXBic3R0\neXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAZCb3VuZHMAcGJuZHFkcnQ+VGhl\nIHNtYWxsZXN0IHJlY3RhbmdsZSB0aGF0IGNvbnRhaW5zIHRoZSBlbnRpcmUgZ3JhcGhp\nYyBvYmplY3QAEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MAAAxEZWZhdWx0IFR5cGUA\nZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAANVHJhbnNmZXIgTW9k\nZXBwdG10cmFuEVRoZSB0cmFuc2ZlciBtb2RlMAAAAA1HcmFwaGljIFNoYXBlY2dzaA9B\nIGdyYXBoaWMgc2hhcGUACwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlw\ndG9yIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0NVRoZSBzbWFsbGVzdCByZWN0YW5nbGUg\ndGhhdCBjb250YWlucyB0aGUgZW50aXJlIHNoYXBlEAAFQ2xhc3NwY2xzdHlwZQlUaGUg\nY2xhc3MAAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRv\nciB0eXBlAAAPRGVmaW5pdGlvbiBSZWN0cGRydHFkcnQmVGhlIHJlY3RhbmdsZSB1c2Vk\nIHRvIGRlZmluZSB0aGUgc2hhcGUAEAAKRmlsbCBDb2xvcgBmbGNsY1JHQg5UaGUgZmls\nbCBjb2xvcgAQAAxGaWxsIFBhdHRlcm4AZmxwdGNwaXgQVGhlIGZpbGwgcGF0dGVybgAQ\nAAlQZW4gQ29sb3JwcGNsY1JHQg1UaGUgcGVuIGNvbG9yEAALUGVuIFBhdHRlcm5wcHBh\nY3BpeA9UaGUgcGVuIHBhdHRlcm4QAAlQZW4gV2lkdGhwcHdkc2hvcg1UaGUgcGVuIHdp\nZHRoEAANVHJhbnNmZXIgTW9kZXBwdG10cmFuEVRoZSB0cmFuc2ZlciBtb2RlMAAAAAxH\ncmFwaGljIFRleHQAY2d0eCxBIHNlcmllcyBvZiBjaGFyYWN0ZXJzIHdpdGhpbiBhIGRy\nYXdpbmcgYXJlYQAACwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9y\nIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0NFRoZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhh\ndCBjb250YWlucyB0aGUgZW50aXJlIHRleHQAEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xh\nc3MAAAVDb2xvcmNvbHJjUkdCIFRoZSBjb2xvciBvZiB0aGUgZmlyc3QgY2hhcmFjdGVy\nABAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5\ncGUAAARGb250AGZvbnRjdHh0K1RoZSBuYW1lIG9mIHRoZSBmb250IG9mIHRoZSBmaXJz\ndCBjaGFyYWN0ZXIQAARTaXplAHB0c3pmaXhkKVRoZSBzaXplIGluIHBvaW50cyBvZiB0\naGUgZmlyc3QgY2hhcmFjdGVyEAAMV3JpdGluZyBDb2RlAHBzY3RpbnRsHlRoZSBzY3Jp\ncHQgc3lzdGVtIGFuZCBsYW5ndWFnZQAAAAVTdHlsZXR4c3R0c3R5JVRoZSB0ZXh0IHN0\neWxlIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4R\nVGhlIHRyYW5zZmVyIG1vZGUwAA5Vbmlmb3JtIFN0eWxlcwB1c3RsdHN0eTRUaGUgdGV4\ndCBzdHlsZXMgdGhhdCBhcmUgdW5pZm9ybSB0aHJvdWdob3V0IHRoZSB0ZXh0ABAAAAJj\naGEgAAFpbmR4Y3R4dAABaW5keA9Hcm91cGVkIEdyYXBoaWNjcGljEUdyb3VwIG9mIGdy\nYXBoaWNzAAcJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBl\nAAAABkJvdW5kcwBwYm5kcWRydD5UaGUgc21hbGxlc3QgcmVjdGFuZ2xlIHRoYXQgY29u\ndGFpbnMgdGhlIGVudGlyZSBncmFwaGljIG9iamVjdAAQAAVDbGFzc3BjbHN0eXBlCVRo\nZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAhPcmRlcmluZwBnb2Jzb2JqIDdUaGUgb3JkZXJlZCBsaXN0IG9mIGdy\nYXBoaWMgb2JqZWN0cyBpbiB0aGUgZHJhd2luZyBhcmVhUAAETmFtZQBwbmFtaXR4dAhU\naGUgbmFtZQAQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRyYW5zZmVyIG1vZGUw\nAAAKY2FyYwACaW5keG5hbWVnbGluAAJpbmR4bmFtZWNndHgAAmluZHhuYW1lY3BpYwAC\naW5keG5hbWVjb3ZsAAJpbmR4bmFtZWNwaXgAAmluZHhuYW1lY3BnbgACaW5keG5hbWVj\ncmVjAAJpbmR4bmFtZWNycmMAAmluZHhuYW1lY2dvYgACaW5keG5hbWUET3ZhbABjb3Zs\nB0FuIG92YWwACwlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5\ncGUAAAAGQm91bmRzAHBibmRxZHJ0NFRoZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhhdCBj\nb250YWlucyB0aGUgZW50aXJlIG92YWwAEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MA\nAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBl\nAAAPRGVmaW5pdGlvbiBSZWN0cGRydHFkcnQlVGhlIHJlY3RhbmdsZSB1c2VkIHRvIGRl\nZmluZSB0aGUgb3ZhbBAACkZpbGwgQ29sb3IAZmxjbGNSR0IOVGhlIGZpbGwgY29sb3IA\nEAAMRmlsbCBQYXR0ZXJuAGZscHRjcGl4EFRoZSBmaWxsIHBhdHRlcm4AEAAJUGVuIENv\nbG9ycHBjbGNSR0INVGhlIHBlbiBjb2xvchAAC1BlbiBQYXR0ZXJucHBwYWNwaXgPVGhl\nIHBlbiBwYXR0ZXJuEAAJUGVuIFdpZHRocHB3ZHNob3INVGhlIHBlbiB3aWR0aBAADVRy\nYW5zZmVyIE1vZGVwcHRtdHJhbhFUaGUgdHJhbnNmZXIgbW9kZTAAAAAFUGl4ZWxjcHhs\nB0EgcGl4ZWwABAlCZXN0IFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5\ncGUAAAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MAAAVDb2xvcmNvbHJjUkdCCVRoZSBj\nb2xvchAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9y\nIHR5cGUAAAAACVBpeGVsIE1hcGNwaXgLQSBwaXhlbCBtYXAABQlCZXN0IFR5cGVwYnN0\ndHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0MlRo\nZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhhdCBjb250YWlucyB0aGUgcGl4ZWwgbWFwABAA\nBUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1Ro\nZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAADVRyYW5zZmVyIE1vZGVwcHRtdHJhbhFU\naGUgdHJhbnNmZXIgbW9kZTAAAAFjcHhsAAFpbmR4B1BvbHlnb25jcGduCUEgcG9seWdv\nbgALCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAZC\nb3VuZHMAcGJuZHFkcnQ3VGhlIHNtYWxsZXN0IHJlY3RhbmdsZSB0aGF0IGNvbnRhaW5z\nIHRoZSBlbnRpcmUgcG9seWdvbhAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAPRGVm\naW5pdGlvbiBSZWN0cGRydHFkcnQoVGhlIHJlY3RhbmdsZSB1c2VkIHRvIGRlZmluZSB0\naGUgcG9seWdvbgAQAApGaWxsIENvbG9yAGZsY2xjUkdCDlRoZSBmaWxsIGNvbG9yABAA\nDEZpbGwgUGF0dGVybgBmbHB0Y3BpeBBUaGUgZmlsbCBwYXR0ZXJuABAACVBlbiBDb2xv\ncnBwY2xjUkdCDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFjcGl4D1RoZSBw\nZW4gcGF0dGVybhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lkdGgQAApQb2lu\ndCBMaXN0AHB0bHRRRHB0KlRoZSBsaXN0IG9mIHBvaW50cyB0aGF0IGRlZmluZSB0aGUg\ncG9seWdvbgBQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRyYW5zZmVyIG1vZGUw\nAAAACVJlY3RhbmdsZWNyZWMLQSByZWN0YW5nbGUACwlCZXN0IFR5cGVwYnN0dHlwZRhU\naGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAGQm91bmRzAHBibmRxZHJ0DVRoZSByZWN0\nYW5nbGUQAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0\ndHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAA9EZWZpbml0aW9uIFJlY3Rw\nZHJ0cWRydD9UaGUgdXBwZXItbGVmdCBhbmQgbG93ZXItcmlnaHQgcG9pbnRzIHRoYXQg\nZGVmaW5lIHRoZSByZWN0YW5nbGUQAApGaWxsIENvbG9yAGZsY2xjUkdCDlRoZSBmaWxs\nIGNvbG9yABAADEZpbGwgUGF0dGVybgBmbHB0Y3BpeBBUaGUgZmlsbCBwYXR0ZXJuABAA\nCVBlbiBDb2xvcnBwY2xjUkdCDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFj\ncGl4D1RoZSBwZW4gcGF0dGVybhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lk\ndGgQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRyYW5zZmVyIG1vZGUwAAAAEVJv\ndW5kZWQgUmVjdGFuZ2xlY3JyYxNBIHJvdW5kZWQgcmVjdGFuZ2xlAA0JQmVzdCBUeXBl\ncGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABkJvdW5kcwBwYm5kcWRy\ndA1UaGUgcmVjdGFuZ2xlEAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xhc3MAABNDb3JuZXIg\nQ3VydmUgSGVpZ2h0cGNoZHNob3JGVGhlIGhlaWdodCBvZiB0aGUgb3ZhbCB1c2VkIHRv\nIGRlZmluZSB0aGUgc2hhcGUgb2YgdGhlIHJvdW5kZWQgY29ybmVycwAQABJDb3JuZXIg\nQ3VydmUgV2lkdGgAcGN3ZHNob3JFVGhlIHdpZHRoIG9mIHRoZSBvdmFsIHVzZWQgdG8g\nZGVmaW5lIHRoZSBzaGFwZSBvZiB0aGUgcm91bmRlZCBjb3JuZXJzEAAMRGVmYXVsdCBU\neXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAAD0RlZmluaXRp\nb24gUmVjdHBkcnRxZHJ0P1RoZSB1cHBlci1sZWZ0IGFuZCBsb3dlci1yaWdodCBwb2lu\ndHMgdGhhdCBkZWZpbmUgdGhlIHJlY3RhbmdsZRAACkZpbGwgQ29sb3IAZmxjbGNSR0IO\nVGhlIGZpbGwgY29sb3IAEAAMRmlsbCBQYXR0ZXJuAGZscHRjcGl4EFRoZSBmaWxsIHBh\ndHRlcm4AEAAJUGVuIENvbG9ycHBjbGNSR0INVGhlIHBlbiBjb2xvchAAC1BlbiBQYXR0\nZXJucHBwYWNwaXgPVGhlIHBlbiBwYXR0ZXJuEAAJUGVuIFdpZHRocHB3ZHNob3INVGhl\nIHBlbiB3aWR0aBAADVRyYW5zZmVyIE1vZGVwcHRtdHJhbhFUaGUgdHJhbnNmZXIgbW9k\nZTAAAAAAAAACdHJhbgAPBENvcHkAY3B5IAAAB05vdENvcHluY3B5AAACT3IAb3IgIAAA\nBU5vdE9ybnRvcgAAA0JpY2JpYyAAAAZOb3RCaWMAbmJpYwAAA1hvcnhvciAAAAZOb3RY\nb3IAbnhvcgAAB0FkZE92ZXJhZGRvAAAGQWRkUGluAGFkZHAAAAdTdWJPdmVyc3VibwAA\nBlN1YlBpbgBzdWJwAAAFQWRNYXhhZG14AAAFQWRNaW5hZG1uAAAFQmxlbmRibG5kAABh\ncnJvAAQITm8gQXJyb3cAYXJubxBObyBhcnJvdyBvbiBsaW5lAA5BcnJvdyBhdCBTdGFy\ndABhcnN0FkFycm93IGF0IHN0YXJ0IG9mIGxpbmUADEFycm93IGF0IEVuZABhcmVuFEFy\ncm93IGF0IGVuZCBvZiBsaW5lABJBcnJvdyBhdCBCb3RoIEVuZHMAYXJiby9BcnJvdyBh\ndCBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiB0aGUgbGluZSVRdWlja0RyYXcg\nR3JhcGhpY3MgU3VwcGxlbWVudGFsIFN1aXRlKkRlZmluZXMgdHJhbnNmb3JtYXRpb25z\nIG9mIGdyYXBoaWMgb2JqZWN0cwBxZHNwAAEAAQAAAAIMRHJhd2luZyBBcmVhAGNkcncx\nQ29udGFpbmVyIGZvciBncmFwaGljcyBhbmQgc3VwcG9ydGluZyBpbmZvcm1hdGlvbgAa\nEEJhY2tncm91bmQgQ29sb3IAcGJjbGNSR0IqVGhlIGNvbG9yIHVzZWQgdG8gZmlsbCBp\nbiB1bm9jY3VwaWVkIGFyZWFzABAAEkJhY2tncm91bmQgUGF0dGVybgBwYnB0Y3BpeCxU\naGUgcGF0dGVybiB1c2VkIHRvIGZpbGwgaW4gdW5vY2N1cGllZCBhcmVhcwAQAAlCZXN0\nIFR5cGVwYnN0dHlwZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAGQm91bmRzAHBi\nbmRxZHJ0LFRoZSByZWN0YW5nbGUgdGhhdCBjb250YWlucyB0aGUgZHJhd2luZyBhcmVh\nABAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAALQ29sb3IgVGFibGVjbHRiY2xydA9U\naGUgY29sb3IgdGFibGUQAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQg\nZGVzY3JpcHRvciB0eXBlAAAKRmlsbCBDb2xvcgBmbGNsY1JHQi9UaGUgZGVmYXVsdCBm\naWxsIGNvbG9yIHVzZWQgZm9yIGdyYXBoaWMgb2JqZWN0cxAADEZpbGwgUGF0dGVybgBm\nbHB0Y3BpeDFUaGUgZGVmYXVsdCBmaWxsIHBhdHRlcm4gdXNlZCBmb3IgZ3JhcGhpYyBv\nYmplY3RzEAAIT3JkZXJpbmcAZ29ic29iaiA3VGhlIG9yZGVyZWQgbGlzdCBvZiBncmFw\naGljIG9iamVjdHMgaW4gdGhlIGRyYXdpbmcgYXJlYVAABE5hbWUAcG5hbWl0eHQIVGhl\nIG5hbWUAEAAQRGVmYXVsdCBMb2NhdGlvbgBwbmVsUURwdC9UaGUgZGVmYXVsdCBsb2Nh\ndGlvbiBvZiBlYWNoIG5ldyBncmFwaGljIG9iamVjdBAACVBlbiBDb2xvcnBwY2xjUkdC\nDVRoZSBwZW4gY29sb3IQAAtQZW4gUGF0dGVybnBwcGFjcGl4D1RoZSBwZW4gcGF0dGVy\nbhAACVBlbiBXaWR0aHBwd2RzaG9yDVRoZSBwZW4gd2lkdGgQAAtQaXhlbCBEZXB0aHBk\ncHRzaG9yDkJpdHMgcGVyIHBpeGVsABAACFJvdGF0aW9uAHByb3R0cm90NFRoZSBkZWZh\ndWx0IHJvdGF0aW9uIGZvciBvYmplY3RzIGluIHRoZSBkcmF3aW5nIGFyZWEAEAAFU2Nh\nbGVwc2NsZml4ZDNUaGUgZGVmYXVsdCBzY2FsaW5nIGZvciBvYmplY3RzIGluIHRoZSBk\ncmF3aW5nIGFyZWEQAAxXcml0aW5nIENvZGUAcHNjdGludGxCVGhlIHNjcmlwdCBzeXN0\nZW0gYW5kIGxhbmd1YWdlIG9mIHRleHQgb2JqZWN0cyBpbiB0aGUgZHJhd2luZyBhcmVh\nAAAAClRleHQgQ29sb3IAcHR4Y2NSR0IiVGhlIGRlZmF1bHQgY29sb3IgZm9yIHRleHQg\nb2JqZWN0cwAQAARGb250AHB0eGZpdHh0LVRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGZv\nbnQgZm9yIHRleHQgb2JqZWN0cxAABFNpemUAcHRwc2ZpeGQnVGhlIGRlZmF1bHQgcG9p\nbnQgc2l6ZSBmb3IgdGV4dCBvYmplY3RzEAAFU3R5bGV0eHN0dHN0eSdUaGUgZGVmYXVs\ndCB0ZXh0IHN0eWxlIGZvciB0ZXh0IG9iamVjdHMQAA1UcmFuc2ZlciBNb2RlcHB0bXRy\nYW4tVGhlIGRlZmF1bHQgdHJhbnNmZXIgbW9kZSBmb3IgZ3JhcGhpYyBvYmplY3RzMAAL\nVHJhbnNsYXRpb25wdHJzUURwdDlUaGUgZGVmYXVsdCByZXBvc2l0aW9uaW5nIGZvciBv\nYmplY3RzIGluIHRoZSBkcmF3aW5nIGFyZWEQABBVcGRhdGUgT24gQ2hhbmdlAHB1cGRi\nb29sGVJlZHJhdyBhZnRlciBlYWNoIGNoYW5nZT8QAAAKY2FyYwACaW5keG5hbWVnbGlu\nAAJpbmR4bmFtZWNndHgAAmluZHhuYW1lY3BpYwACaW5keG5hbWVjb3ZsAAJpbmR4bmFt\nZWNwaXgAAmluZHhuYW1lY3BnbgACaW5keG5hbWVjcmVjAAJpbmR4bmFtZWNycmMAAmlu\nZHhuYW1lY2dvYgACaW5keG5hbWUPR3JvdXBlZCBHcmFwaGljY3BpYxFHcm91cCBvZiBn\ncmFwaGljcwAKCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlw\nZQAAAAZCb3VuZHMAcGJuZHFkcnQ+VGhlIHNtYWxsZXN0IHJlY3RhbmdsZSB0aGF0IGNv\nbnRhaW5zIHRoZSBlbnRpcmUgZ3JhcGhpYyBvYmplY3QAEAAFQ2xhc3NwY2xzdHlwZQlU\naGUgY2xhc3MAAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3Jp\ncHRvciB0eXBlAAAIT3JkZXJpbmcAZ29ic29iaiA3VGhlIG9yZGVyZWQgbGlzdCBvZiBn\ncmFwaGljIG9iamVjdHMgaW4gdGhlIGRyYXdpbmcgYXJlYVAABE5hbWUAcG5hbWl0eHQI\nVGhlIG5hbWUAEAAIUm90YXRpb24AcHJvdHRyb3QMVGhlIHJvdGF0aW9uABAABVNjYWxl\ncHNjbGZpeGQLVGhlIHNjYWxpbmcQAA1UcmFuc2ZlciBNb2RlcHB0bXRyYW4RVGhlIHRy\nYW5zZmVyIG1vZGUwAAtUcmFuc2xhdGlvbnB0cnNRRHB0D1RoZSB0cmFuc2xhdGlvbhAA\nAApjYXJjAAJpbmR4bmFtZWdsaW4AAmluZHhuYW1lY2d0eAACaW5keG5hbWVjcGljAAJp\nbmR4bmFtZWNvdmwAAmluZHhuYW1lY3BpeAACaW5keG5hbWVjcGduAAJpbmR4bmFtZWNy\nZWMAAmluZHhuYW1lY3JyYwACaW5keG5hbWVjZ29iAAJpbmR4bmFtZQAAAAALVGFibGUg\nU3VpdGUfQ2xhc3NlcyBmb3IgbWFuaXB1bGF0aW5nIHRhYmxlc3RibHMAAQABAAAABARD\nZWxsAGNjZWwGQSBjZWxsAAAFCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRlc2Ny\naXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQgVHlw\nZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAAdGb3JtdWxhcGZv\ncmN0eHQXVGhlIGZvcm11bGEgb2YgdGhlIGNlbGwQAApQcm90ZWN0aW9uAHBwcm9wcnRu\nPUluZGljYXRlcyB3aGV0aGVyIHZhbHVlIG9yIGZvcm11bGEgaW4gdGhlIGNlbGwgY2Fu\nIGJlIGNoYW5nZWQwAAAABkNvbHVtbgBjY29sCEEgY29sdW1uAAAFCUJlc3QgVHlwZXBi\nc3R0eXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRo\nZSBjbGFzcwAADERlZmF1bHQgVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlw\ndG9yIHR5cGUAAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lABAAClByb3RlY3Rpb24AcHBy\nb3BydG5ISW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm11bGFzIG9mIHRoZSBjZWxscyBp\nbiB0aGUgY29sdW1uIGNhbiBiZSBjaGFuZ2VkADAAAAFjY2VsAAJpbmR4bmFtZQNSb3dj\ncm93BUEgcm93AAUJQmVzdCBUeXBlcGJzdHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0\neXBlAAAABUNsYXNzcGNsc3R5cGUJVGhlIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0\neXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABE5hbWUAcG5hbWl0eHQIVGhl\nIG5hbWUAEAAKUHJvdGVjdGlvbgBwcHJvcHJ0bkVJbmRpY2F0ZXMgd2hldGhlciB0aGUg\nZm9ybXVsYXMgb2YgdGhlIGNlbGxzIGluIHRoZSByb3cgY2FuIGJlIGNoYW5nZWQwAAAB\nY2NlbAACaW5keG5hbWUFVGFibGVjdGJsB0EgdGFibGUABQlCZXN0IFR5cGVwYnN0dHlw\nZRhUaGUgYmVzdCBkZXNjcmlwdG9yIHR5cGUAAAAFQ2xhc3NwY2xzdHlwZQlUaGUgY2xh\nc3MAAAxEZWZhdWx0IFR5cGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0\neXBlAAAETmFtZQBwbmFtaXR4dAhUaGUgbmFtZQAQAApQcm90ZWN0aW9uAHBwcm9wcnRu\nR0luZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtdWxhcyBvZiB0aGUgY2VsbHMgaW4gdGhl\nIHRhYmxlIGNhbiBiZSBjaGFuZ2VkMAAAA2NjZWwAAmluZHhuYW1lY2NvbAACaW5keG5h\nbWVjcm93AAJpbmR4bmFtZQAAAAFwcnRuAAMJUmVhZCBPbmx5bm1vZB9DYW4ndCBjaGFu\nZ2UgdmFsdWVzIG9yIGZvcm11bGFzEkZvcm11bGFzIFByb3RlY3RlZABmcHJvI0NhbiBj\naGFuZ2VzIHZhbHVlcyBidXQgbm90IGZvcm11bGFzClJlYWQvV3JpdGUAbW9kZh5DYW4g\nY2hhbmdlIHZhbHVlcyBhbmQgZm9ybXVsYXMAHU1pc2NlbGxhbmVvdXMgU3RhbmRhcmRz\nIFN1aXRlKU1pc2NlbGxhbmVvdXMgc3RhbmRhcmQgZXZlbnRzIGFuZCBjbGFzc2VzbWlz\nYwABAAEADhFCZWdpbiBUcmFuc2FjdGlvbhNCZWdpbiBhIHRyYW5zYWN0aW9ubWlzY2Jl\nZ2lsb25nAAAAAG51bGwAAJAAAAAEQ29weR9Db3B5IGFuIG9iamVjdCB0byB0aGUgY2xp\ncGJvYXJkAG1pc2Njb3B5bnVsbAAAgABudWxsAACQAAAAEENyZWF0ZSBQdWJsaXNoZXIS\nQ3JlYXRlIGEgcHVibGlzaGVybWlzY2NwdWJudWxsAACAAG9iaiART2JqZWN0IHRvIHB1\nYmxpc2iQAAABB0VkaXRpb25lbG9jYWxpcyNBbGlhcyB0byB0aGUgZWRpdGlvbiBjb250\nYWluZXIgZmlsZYAAA0N1dB5DdXQgYW4gb2JqZWN0IHRvIHRoZSBjbGlwYm9hcmQAbWlz\nY2N1dCBudWxsAACAAG51bGwAAJAAAAAJRG8gU2NyaXB0EEV4ZWN1dGUgYSBzY3JpcHQA\nbWlzY2Rvc2MqKioqAACAAFRFWFQVVGhlIHNjcmlwdCB0byBleGVjdXRlEAAAAAxFZGl0\nIEdyYXBoaWMfRWRpdCB0aGUgc3BlY2lmaWVkIGRyYXdpbmcgYXJlYQBtaXNjZWRpdHRk\nYXIAAAAAdGRhch1UaGUgZHJhd2luZyBhcmVhIHRvIGJlIGVkaXRlZBAAAAAPRW5kIFRy\nYW5zYWN0aW9uEUVuZCBhIHRyYW5zYWN0aW9ubWlzY2VuZHRudWxsAACAAG51bGwAAJAA\nAAANSW1hZ2UgR3JhcGhpYyxDb252ZXJ0IGEgZ3JhcGhpYyBmcm9tIG9uZSBmb3JtYXQg\ndG8gYW5vdGhlcgBtaXNjaW1ncioqKioAAAAAKioqKihUaGUgZ3JhcGhpYyB0byBiZSBj\nb252ZXJ0ZWQgb3IgZm9ybWF0dGVkABAAAAoMQW50aWFsaWFzaW5nAGFudGFib29sEFVz\nZSBhbnRpYWxpYXNpbmcAgAAJRGl0aGVyaW5nZ2RpdGJvb2wNVXNlIGRpdGhlcmluZ4AA\nBlJvdGF0ZQBrZHJ0dHJvdBlUaGUgcm90YXRpb24gb2YgdGhlIGltYWdlgAAFU2NhbGVr\nc2NhZml4ZCZUaGUgZmFjdG9yIGJ5IHdoaWNoIHRvIHNjYWxlIHRoZSBpbWFnZQCAAAtU\ncmFuc2xhdGlvbmt0cmFRRHB0KU9mZnNldCBieSB3aGljaCB0aGUgaW1hZ2Ugc2hvdWxk\nIGJlIG1vdmVkgAAPRmxpcCBIb3Jpem9udGFsa2Zob2Jvb2wYRmxpcCBpbWFnZSBob3Jp\nem9udGFsbHk/AIAADUZsaXAgVmVydGljYWxrZnZ0Ym9vbBZGbGlwIGltYWdlIHZlcnRp\nY2FsbHk/AIAAB1F1YWxpdHlncXVhcXVhbBtJbWFnZSBxdWFsaXR5IG9mIHRoZSByZXN1\nbHSgAAZGb3JtYXQAa3JlbnR5cGUvVGhlIGZvcm1hdCBpbnRvIHdoaWNoIHRoZSBkYXRh\nIHNob3VsZCBiZSBpbWFnZWQAABJTdHJ1Y3R1cmVkIEdyYXBoaWMAdG9vZ2Jvb2w0UmV0\ndXJuIGEgc3RydWN0dXJlZCBncmFwaGljLCBpbnN0ZWFkIG9mIGEgcGl4ZWwgbWFwPwCA\nAAdVbmlmb3JtS0lzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IHRo\nZSBzYW1lIGZvciBhbGwgb2JqZWN0cyBpbiB0aGUgc2V0P21pc2Npc3VuYm9vbAAAAABv\nYmogL1RoZSBzZXQgb2Ygb2JqZWN0cyB0byBiZSBjaGVja2VkIGZvciB1bmlmb3JtaXR5\nAAAAAQJJbgBrcHJwdHlwZS5UaGUgcHJvcGVydHkgSUQgZm9yIHRoZSBwcm9wZXJ0eSB0\nbyBiZSBjaGVja2VkAAAABFNob3cZQnJpbmcgYW4gb2JqZWN0IGludG8gdmlldwBtaXNj\nbXZpc251bGwAAIAAb2JqIB1UaGUgb2JqZWN0IHRvIGJlIG1hZGUgdmlzaWJsZRAAAAIC\nSW4Ad25kd29iaiApVGhlIHdpbmRvdyBpbiB3aGljaCB0byBkaXNwbGF5IHRoZSBvYmpl\nY3SAAAJBdABzaG93UURwdChUaGUgcG9pbnQgYXQgd2hpY2ggdG8gZGlzcGxheSB0aGUg\nb2JqZWN0AIAABVBhc3RlIlBhc3RlIGFuIG9iamVjdCBmcm9tIHRoZSBjbGlwYm9hcmQA\nbWlzY3Bhc3RudWxsAACAAG51bGwAAJAAAAAEUmVkbzVSZXZlcnNlIHRoZSBhY3Rpb24g\nb2YgdGhlIGltbWVkaWF0ZWx5IHByZWNlZWRpbmcgdW5kbwBtaXNjcmVkb251bGwAAIAA\nbnVsbAAAkAAAAAZSZXZlcnQqUmVzdG9yZSB0aGUgb2JqZWN0IHRvIGl0cyBsYXN0IHNh\ndmVkIHN0YXRlbWlzY3J2cnRudWxsAACAAG9iaiAUVGhlIG9iamVjdCB0byByZXZlcnQA\nEAAAAARVbmRvOVVuZG8gdGhlIGFjdGlvbiBvZiB0aGUgcHJldmlvdXMgZXZlbnQgb3Ig\ndXNlciBpbnRlcmFjdGlvbgBtaXNjdW5kb251bGwAAIAAbnVsbAAAkAAAAAAEC0FwcGxp\nY2F0aW9uY2FwcBdBIE1hY2ludG9zaCBhcHBsaWNhdGlvbgAKCUJlc3QgVHlwZXBic3R0\neXBlGFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBj\nbGFzcwAACUNsaXBib2FyZHBjbGkqKioqDVRoZSBjbGlwYm9hcmRQAAxEZWZhdWx0IFR5\ncGUAZGVmdHR5cGUbVGhlIGRlZmF1bHQgZGVzY3JpcHRvciB0eXBlAAASSW5zZXJ0aW9u\nIExvY2F0aW9uAHBpbnNpbnNsTVRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY29udGVudHMg\nb2YgdGhlIGNsaXBib2FyZCB3b3VsZCBiZSBpbnNlcnRlZCBieSBhIHBhc3RlAAAJRnJv\nbnRtb3N0cGlzZmJvb2wiSXMgdGhpcyB0aGUgZnJvbnRtb3N0IGFwcGxpY2F0aW9uPwAA\nAAROYW1lAHBuYW1pdHh0CFRoZSBuYW1lAAAAD0l0ZW0gRGVsaW1pdGVyc3R4ZGxpdHh0\nKlRoZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGRlbGltaXQgdGV4dCBpdGVtcwBAAA5Vc2Vy\nIFNlbGVjdGlvbgBwdXNsY3NlbC1UaGUgY3VycmVudCB1c2VyIHNlbGVjdGlvbiBvciBp\nbnNlcnRpb24gcG9pbnQAAAdWZXJzaW9udmVyc2xvbmclVGhlIHZlcnNpb24gbnVtYmVy\nIG9mIHRoZSBhcHBsaWNhdGlvbgAAAAJkb2N1AAJpbmR4bmFtZWN3aW4AAmluZHhuYW1l\nBEl0ZW0AY2l0bQtBIHRleHQgaXRlbQAJCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0\nIGRlc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAABUNvbG9y\nY29scmNSR0IgVGhlIGNvbG9yIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIAEAAMRGVmYXVs\ndCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQAABEZvbnQA\nZm9udGN0eHQrVGhlIG5hbWUgb2YgdGhlIGZvbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3Rl\nchAABFNpemUAcHRzemZpeGQpVGhlIHNpemUgaW4gcG9pbnRzIG9mIHRoZSBmaXJzdCBj\naGFyYWN0ZXIQAAxXcml0aW5nIENvZGUAcHNjdGludGweVGhlIHNjcmlwdCBzeXN0ZW0g\nYW5kIGxhbmd1YWdlAAAABVN0eWxldHhzdHRzdHklVGhlIHRleHQgc3R5bGUgb2YgdGhl\nIGZpcnN0IGNoYXJhY3RlchAADlVuaWZvcm0gU3R5bGVzAHVzdGx0c3R5NFRoZSB0ZXh0\nIHN0eWxlcyB0aGF0IGFyZSB1bmlmb3JtIHRocm91Z2hvdXQgdGhlIGl0ZW0AEAAAAmNo\nYSAAAWluZHhjdHh0AAFpbmR4BE1lbnUAY21udQZBIG1lbnUAAAUJQmVzdCBUeXBlcGJz\ndHR5cGUYVGhlIGJlc3QgZGVzY3JpcHRvciB0eXBlAAAABUNsYXNzcGNsc3R5cGUJVGhl\nIGNsYXNzAAAMRGVmYXVsdCBUeXBlAGRlZnR0eXBlG1RoZSBkZWZhdWx0IGRlc2NyaXB0\nb3IgdHlwZQAAB01lbnUgSURtbmlkc2hvchhUaGUgbWVudSBJRCBmb3IgdGhlIG1lbnUA\nAAAETmFtZQBwbmFtaXR4dAhUaGUgbmFtZQAAAAABY21lbgACaW5keG5hbWUJTWVudSBJ\ndGVtY21lbgtBIG1lbnUgaXRlbQAGCUJlc3QgVHlwZXBic3R0eXBlGFRoZSBiZXN0IGRl\nc2NyaXB0b3IgdHlwZQAAAAVDbGFzc3BjbHN0eXBlCVRoZSBjbGFzcwAADERlZmF1bHQg\nVHlwZQBkZWZ0dHlwZRtUaGUgZGVmYXVsdCBkZXNjcmlwdG9yIHR5cGUAAAdFbmFibGVk\nZW5ibGJvb2wcSXMgdGhlIG1lbnUgaXRlbSBpcyBlbmFibGVkPwAAAAtJdGVtIE51bWJl\ncml0bW5zaG9yFFRoZSBtZW51IGl0ZW0gbnVtYmVyAAAABE5hbWUAcG5hbWl0eHQIVGhl\nIG5hbWUAAAAAAAAAAAFxdWFsAAMFRHJhZnRmYXN0KEltYWdlIHRoZSBncmFwaGljIGFz\nIHF1aWNrbHkgYXMgcG9zc2libGUAB1JlZ3VsYXJyZWdsGkltYWdlIHRoZSBncmFwaGlj\nIG5vcm1hbGx5AARIaWdoAGhpcXUxSW1hZ2UgdGhlIGdyYXBoaWMgYXQgdGhlIGhpZ2hl\nc3QgcXVhbGl0eSBwb3NzaWJsZQAAAQAAALvqAAC66gAAAfkBJMq4EIgAAAAcARYAA2Fl\ndXQAAAAiSUNPTgAGAC5YRkNOAAQAglhDTUQABAC+AAAAwwAAVAYBJLlYGkAAACAAAAAA\nAAAAA/UAFSAAGYwAAAAAA/YAICAAGhAAAAAAI5AAKyAAMDIAAAAAYHYAPSAAMLYAAAAA\nIVoARSAAMToAAAAAPtP//yAAU4IAAAAADP0AUSAAAIQBJMsYDP4AsSAASFoBJMwgDQ0A\n2SAAMb4BJMp4DaoAWyAAAfQBJMwcAhIAvCAATRIBJMp0DP8AZiAADuYAAAAADQMAjiAA\nJoIAAAAADQQAniAAGpQAAAAAD6AAciAAEpgAAAAAD6EAfiAAEGAAAAAAFExvd2VyZWQg\ncmV0dXJuIGFycm93Ck5leHQgQXJyb3cKUHJldiBBcnJvdxFTdGFjayBJbmZvIFJ0IFRy\naQdIQyBIZWxwC0Nsb3NlciBMb29rCU5ld0hhbmRsZQpIUG9wVXBNZW51C0Rpc3Bvc2VE\nZXNjC1Nob3dCYWxsb29uD0hNUmVtb3ZlQmFsbG9vbg9Nb3ZlRGVzY1RvU2NyYXASU2F2\nZURlc2NBc1Jlc291cmNlCkV4dGVuZERlc2MGU2VhcmNoFVN0YW5kYXJkIEV2ZW50IFN1\naXRlcwlNZXJnZUFldGU=\n\n\n--========================_26885646==_D\nContent-Type: application/octet-stream; name=\"Aete_Editor_b1\"\n ; x-mac-type=\"5354414B\"\n ; x-mac-creator=\"57494C44\"\nContent-Disposition: attachment; filename=\"Aete_Editor_b1\"\nContent-Transfer-Encoding: base64\n\nAAA2AFNUQUv/////AAAAAAAAAAoABBvAAAA2AAAAAAAAAAAAAAAABgAADjwAAAAeAAA7\ngwAAOH8AAAAAAAAAAAAAQNkAAAAAAAUAABAAAAAAAAAAAAAAAAAAAAAAAAAAAhCAAAIQ\ngAACEIAAAiCAANrR7fYAAAAAAQgBQAJeA0AAAAAAA2YEgAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7wAADAYBVgIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA\nAAAIAAAAiAAiAIgAIgCIiCIiiIgiIoiqIqqIqiKqzKozqsyqM6ruqruq7qq7qu67u+7u\nu7vu/7v/7v+7/+7/u////7v//4AQAiABCEAE//////////+IIogiiCKIIhEiRIgRIkSI\nxIAMaEMCMCaxMAMb2MAMjaoAqgCqAKoAiCJVIogiVSKIVSJViFUiVXfdd9133XfdgAAA\nAAAAAACqVapVqlWqVQOESDAMAgEBgkQ5RIIBAQGIFCJBiEEiFICAQT4ICBTjIgSMdCIX\nmBC+gIgI6wiIgCXIMolkJEySopxBvirJFOtAoAAABAoAAIBAIAACBAgAqgCAAIgAgAD/\ngICAgICAgAgcIsGAAQIE/4CAgP8ICAj4dCJHjxcicb8Av7+wsLCw/3++XaJBgAD69fr1\noFCgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAb24gc3VzcGVuZFN0YWNrDXJlc2V0IG1lbnVCYXINZW5kIHN1c3BlbmRTdGFj\naw0Nb24gcmVzdW1lU3RhY2sNaWYgdGhlIHVzZXJMZXZlbCBpcyAxIHRoZW4gc2V0IHRo\nZSB1c2VyTGV2ZWwgdG8gMg1BZXRlRWR0aW9yTWVudQ1DaGVja1ByZWZlcmVuY2UNZW5k\nIHJlc3VtZVN0YWNrDQ1vbiBBZXRlRWR0aW9yTWVudQ1pZiB0aGVyZSBpcyBhIG1lbnUg\nIlN0eWxlIiB0aGVuIGRlbGV0ZSBtZW51ICJTdHlsZSINaWYgdGhlcmUgaXMgYSBtZW51\nICJGb250IiB0aGVuIGRlbGV0ZSBtZW51ICJGb250Ig1pZiB0aGVyZSBpcyBhIG1lbnUg\nIk9iamVjdHMiIHRoZW4gZGVsZXRlIG1lbnUgIk9iamVjdHMiDWlmIHRoZXJlIGlzIGEg\nbWVudSAiVG9vbHMiIHRoZW4gZGVsZXRlIG1lbnUgIlRvb2xzIg1jcmVhdGUgbWVudSAi\nQWV0ZUVkaXRvciINcHV0ICJJbnN0cnVjdGlvbnMsUHJlZmVyZW5jZXMsLSxSZXNvdXJj\nZSBUb29scyyuIFN1aXRlcyxFdmVudHMsQ2xhc3NlcyxFbnVtZXJhdGlvbnMsQ29tcGFy\naXNvbnMsLSxOZXcgRWRpdG9yySxFbXB0eSBTdGFja8ksLSxMb2NhbGl6ZSBhZXRlySIg\naW50byBtZW51ICJBZXRlRWRpdG9yIsINd2l0aCBtZW51TXNnICJJbnN0cnVjdGlvbnMs\nUHJlZmVyZW5jZXNDYXJkLCAscmVzb3VyY2VUb29scyxBRVN1aXRlc0JnLGV2ZW50c0Jn\nLGNsYXNzQmcsZW51bUJnLGNvbXBhcmlzb25CZywgLG1ha2VOZXdTdGFjayBmYWxzZSxl\nbXB0eVN0YWNrLCxsb2NhbGl6ZUl0Ig1lbmQgQWV0ZUVkdGlvck1lbnUNDW9uIFJlZ0xp\nc3QNcHV0IGNhcmQgZmllbGQgIm5hbWVsaXN0IiBvZiBjYXJkICJwcmVmZXJlbmNlIiBp\nbnRvIHRoZUxpc3QNcHV0IFNob3dMaXN0KHRoZUxpc3QsICJQaWNrIEEgTmFtZSIsIGZh\nbHNlLCB0cnVlLCAiT0ssQ2FuY2VsIiwgMCkgaW50byBjaG9pY2UNaWYgbGluZSAxIG9m\nIGNob2ljZSA9ICJPSyIgdGhlbg1wdXQgbGluZSAobGluZSAyIG9mIGNob2ljZSkgb2Yg\ndGhlTGlzdCBpbnRvIHgNcHV0IG9mZnNldCgiPSIgJiBxdW90ZSwgeCkgaW50byBuDWlm\nIHN0YXJ0SGVyZSA+IDAgdGhlbg1kZWxldGUgY2hhciAxIHRvIChuKzEpIG9mIHgNaWYg\nbGFzdCBjaGFyIG9mIHggPSBxdW90ZSB0aGVuIGRlbGV0ZSBsYXN0IGNoYXIgb2YgeA10\neXBlIHgNZW5kIGlmDWVuZCBpZg1lbmQgUmVnTGlzdA0Nb24gSW5zdHJ1Y3Rpb25zDWds\nb2JhbCBnV2hlcmVGcm9tDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ1nbyBj\nZCAiSW5zdHJ1Y3Rpb25zIg1lbmQgSW5zdHJ1Y3Rpb25zDQ1vbiBQcmVmZXJlbmNlc0Nh\ncmQNZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9t\nDWdvIGNkICJwcmVmZXJlbmNlIg1lbmQgUHJlZmVyZW5jZXNDYXJkDQ1vbiByZXNvdXJj\nZVRvb2xzDWdsb2JhbCBnV2hlcmVGcm9tDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJl\nRnJvbQ1nbyBjZCAibWFpbk1lbnUiDWVuZCByZXNvdXJjZVRvb2xzDQ1vbiBBRVN1aXRl\nc0JnDWdsb2JhbCBnV2hlcmVGcm9tDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJv\nbQ1pZiB0aGVyZSBpcyBhIGNkIDIgb2YgYmcgInN1aXRlSW5mbyIgdGhlbg1nbyBjZCAy\nIG9mIGJnICJzdWl0ZUluZm8iDWVsc2UNZ28gYmcgInN1aXRlSW5mbyINZW5kIGlmDWVu\nZCBBRVN1aXRlc0JnDQ1vbiBldmVudHNCZw1nbG9iYWwgZ1doZXJlRnJvbQ1wdXNoIGNk\nDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NaWYgdGhlcmUgaXMgYSBjZCAyIG9mIGJnICJl\ndmVudHMiIHRoZW4NZ28gY2QgMiBvZiBiZyAiZXZlbnRzIg1lbHNlDWdvIGJnICJldmVu\ndHMiDWVuZCBpZg1lbmQgZXZlbnRzQmcNDW9uIGNsYXNzQmcNZ2xvYmFsIGdXaGVyZUZy\nb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9tDWlmIHRoZXJlIGlzIGEgY2Qg\nMiBvZiBiZyAiY2xhc3MiIHRoZW4NZ28gY2QgMiBvZiBiZyAiY2xhc3MiDWVsc2UNZ28g\nYmcgImNsYXNzIg1lbmQgaWYNZW5kIGNsYXNzQmcNDW9uIGVudW1CZw1nbG9iYWwgZ1do\nZXJlRnJvbQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NaWYgdGhlcmUgaXMg\nYSBjZCAyIG9mIGJnICJlbnVtZXJhdGlvbiIgdGhlbg1nbyBjZCAyIG9mIGJnICJlbnVt\nZXJhdGlvbiINZWxzZQ1nbyBiZyAiZW51bWVyYXRpb24iDWVuZCBpZg1lbmQgZW51bUJn\nDQ1vbiBjb21wYXJpc29uQmcNZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2Qg\naW50byBnV2hlcmVGcm9tDWlmIHRoZXJlIGlzIGEgY2QgMiBvZiBiZyAiY29tcGFyaXNv\nbiIgdGhlbg1nbyBjZCAyIG9mIGJnICJjb21wYXJpc29uIg1lbHNlDWdvIGJnICJjb21w\nYXJpc29uIg1lbmQgaWYNZW5kIGNvbXBhcmlzb25CZw0Nb24gbWFrZU5ld1N0YWNrIG5l\nd1dpbmRvdw1nZXQgdGhlIHNoaWZ0S2V5IGlzIGRvd24NcHV0IGl0IGludG8gc2hpZnRE\nb3duDWFzayBmaWxlICJTYXZlIGEgbmV3IGVkaXRvciBzdGFjayBhczoiDWlmIHRoZSBy\nZXN1bHQgaXMgIkNhbmNlbCIgdGhlbiBleGl0IG1ha2VOZXdTdGFjaw1pZiBpdCBpcyBl\nbXB0eSB0aGVuDWFuc3dlciAiWW91IGhhdmUgdG8gc3VwcGx5IGEgbmFtZS4iDWFzayBm\naWxlICJDcmVhdGUgYSBuZXcgc3RhY2sgYXMiDWVuZCBpZg1pZiB0aGUgZnJlZXNpemUg\nb2YgdGhpcyBzdGFjayA+IDMyNzY4IHRoZW4gZG9NZW51ICJDb21wYWN0IFN0YWNrIg1z\nYXZlIHRoaXMgc3RhY2sgYXMgaXQNaWYgdGhlIHJlc3VsdCA8PiAiIiB0aGVuDWFuc3dl\nciAiSXQgZmFpbHMsIiAmJiB0aGUgcmVzdWx0DWV4aXQgdG8gSHlwZXJDYXJkDWVuZCBp\nZg1pZiBzaGlmdERvd24gdGhlbg1nbyBzdGFjayBpdCBpbiBhIG5ldyB3aW5kb3cNcHV0\nIHRoZSBsb2Mgb2YgY2Qgd2luZG93IGludG8gd2luZExvYw1zZXQgdGhlIGxvYyBvZiBj\nZCB3aW5kb3cgdG8gaXRlbSAxIG9mIHdpbmRMb2MgKzIwLCBpdGVtIDIgb2Ygd2luZExv\nYyArMjANZWxzZQ1pZiBuZXdXaW5kb3cgPD4gdHJ1ZSB0aGVuDWdvIHN0YWNrIGl0DWVs\nc2UNZ28gc3RhY2sgaXQgaW4gYSBuZXcgd2luZG93DXB1dCB0aGUgbG9jIG9mIGNkIHdp\nbmRvdyBpbnRvIHdpbmRMb2MNc2V0IHRoZSBsb2Mgb2YgY2Qgd2luZG93IHRvIGl0ZW0g\nMSBvZiB3aW5kTG9jICsyMCwgaXRlbSAyIG9mIHdpbmRMb2MgKzIwDWVuZCBpZg1lbmQg\naWYNZW1wdHlTdGFjayB5ZXMNZW5kIG1ha2VOZXdTdGFjaw0Nb24gbG9jYWxpemVJdA1h\nc2sgZmlsZSAiQ3JlYXRlIHRyYW5zbGF0aW9uIHN0YWNrIHdoZXJlPyIgd2l0aCAoKHNo\nb3J0IG5hbWUgb2YgdGhpcyBzdGFjaykgJiYgIkxvY2FsaXplZCIpDWlmIHRoZSByZXN1\nbHQgaXMgIkNhbmNlbCIgdGhlbiBleGl0IGxvY2FsaXplSXQNaWYgaXQgaXMgZW1wdHkg\ndGhlbg1hbnN3ZXIgIllvdSBoYXZlIHRvIHN1cHBseSBhIG5hbWUuIg1hc2sgZmlsZSAi\nQ3JlYXRlIHRyYW5zbGF0aW9uIHN0YWNrIHdoZXJlPyINZW5kIGlmDWlmIHRoZSBmcmVl\nc2l6ZSBvZiB0aGlzIHN0YWNrID4gMzI3NjggdGhlbiBkb01lbnUgIkNvbXBhY3QgU3Rh\nY2siDXNhdmUgdGhpcyBzdGFjayBhcyBpdA1pZiB0aGUgcmVzdWx0IDw+ICIiIHRoZW4N\nYW5zd2VyICJJdCBmYWlscywiICYmIHRoZSByZXN1bHQNZXhpdCB0byBIeXBlckNhcmQN\nZW5kIGlmDWdvIHN0YWNrIGl0IGluIGEgbmV3IHdpbmRvdw1wdXQgdGhlIGxvYyBvZiBj\nZCB3aW5kb3cgaW50byB3aW5kTG9jDXNldCB0aGUgbG9jIG9mIGNkIHdpbmRvdyB0byBp\ndGVtIDEgb2Ygd2luZExvYyArMjAsIGl0ZW0gMiBvZiB3aW5kTG9jICsyMA1Mb2NhbGl6\nYXRpb24gZmFsc2UNZW5kIGxvY2FsaXplSXQNDW9uIG9wZW5zdGFjaw1nbG9iYWwgaW5F\nZGl0LCBnRGVsZXRlU3VpdGUNcHV0IGZhbHNlIGludG8gZ0RlbGV0ZVN1aXRlDXB1dCB0\ncnVlIGludG8gaW5FZGl0DWlmIHRoZSBzY3JlZW5SZWN0IGlzICIwLDAsNTEyLDM0MiIg\ndGhlbiBzZXQgdGhlIGxvYyBvZiBjZCB3aW5kb3cgdG8gIjAsMCINaWYgdGhlIHVzZXJM\nZXZlbCBpcyAxIHRoZW4gc2V0IHRoZSB1c2VyTGV2ZWwgdG8gMg1BZXRlRWR0aW9yTWVu\ndQ1DaGVja1ByZWZlcmVuY2UNZW5kIG9wZW5zdGFjaw0Nb24gY2xvc2VDYXJkDWhtUmVt\nb3ZlQmFsbG9vbg1wYXNzIGNsb3NlQ2FyZA1lbmQgY2xvc2VDYXJkDQ1vbiBjbG9zZVN0\nYWNrDXJlc2V0IG1lbnVCYXINaWYgdGhlIGZyZWVzaXplIG9mIHRoaXMgc3RhY2sgPiAz\nMjc2OCB0aGVuIGRvTWVudSAiQ29tcGFjdCBTdGFjayINZW5kIGNsb3NlU3RhY2sNDWZ1\nbmN0aW9uIFByZWZlckNsaWVudExhbmdCdXR0b25JRA1yZXR1cm4gIjUsNiw3LDEzLDU3\nIg1lbmQgUHJlZmVyQ2xpZW50TGFuZ0J1dHRvbklEDQ1mdW5jdGlvbiBQcmVmZXJTZXJ2\nZXJMYW5nQnV0dG9uSUQNcmV0dXJuICIyLDMsMTAiDWVuZCBQcmVmZXJTZXJ2ZXJMYW5n\nQnV0dG9uSUQNDW9uIENoZWNrUHJlZmVyZW5jZQ1nbG9iYWwgZGVmYXVsdFRpbWVvdXQs\nZGVmYXVsdFRhcmdldCxkZWZhdWx0U2VuZE1vZGUsZGVmYXVsdElkbGVQcm9jLGRlZmF1\nbHRBRUZpbHRlcixkZWZhdWx0VGFyZ2V0RGVzYw1nbG9iYWwgc2VydmVyTGFuZyxjbGll\nbnRMYW5nLGNsaWVudEhhc0dsdWUsdmVyYm9zZQ1wdXQgUHJlZmVyQ2xpZW50TGFuZ0J1\ndHRvbklEKCkgaW50byB0aGVMaXN0DXB1dCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlTGlz\ndCBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1pZiBoaWxpdGUgb2YgY2FyZCBi\ndXR0b24gaWQgKGl0ZW0gaSBvZiB0aGVMaXN0KSBvZiBjYXJkICJwcmVmZXJlbmNlIiB0\naGVuDXB1dCBzaG9ydCBuYW1lIG9mIGNhcmQgYnV0dG9uIGlkIChpdGVtIGkgb2YgdGhl\nTGlzdCkgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byBjbGllbnRMYW5nDWV4aXQgcmVw\nZWF0DWVuZCBpZg1lbmQgcmVwZWF0DXB1dCBQcmVmZXJTZXJ2ZXJMYW5nQnV0dG9uSUQo\nKSBpbnRvIHRoZUxpc3QNcHV0IG51bWJlciBvZiBpdGVtcyBpbiB0aGVMaXN0IGludG8g\nbg1yZXBlYXQgd2l0aCBpID0gMSB0byBuDWlmIGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBp\nZCAoaXRlbSBpIG9mIHRoZUxpc3QpIG9mIGNhcmQgInByZWZlcmVuY2UiIHRoZW4NcHV0\nIHNob3J0IG5hbWUgb2YgY2FyZCBidXR0b24gaWQgKGl0ZW0gaSBvZiB0aGVMaXN0KSBv\nZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIHNlcnZlckxhbmcNZXhpdCByZXBlYXQNZW5k\nIGlmDWVuZCByZXBlYXQNcHV0IGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiAiaGFzIGdsdWUg\nc3Vicm91dGluZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byBjbGllbnRIYXNHbHVl\nDXB1dCBoaWxpdGUgb2YgY2FyZCBidXR0b24gInZlcmJvc2UiIG9mIGNhcmQgInByZWZl\ncmVuY2UiIGludG8gdmVyYm9zZQ1wdXQgY2FyZCBmaWVsZCAidGltZU91dCIgb2YgY2Fy\nZCAicHJlZmVyZW5jZSIgaW50byBkZWZhdWx0VGltZW91dA1wdXQgY2FyZCBmaWVsZCAi\nc2VuZFRhcmdldCIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byBkZWZhdWx0VGFyZ2V0\nDXB1dCBjYXJkIGZpZWxkICJ0YXJnZXREZXNjIiBvZiBjYXJkICJwcmVmZXJlbmNlIiBp\nbnRvIGRlZmF1bHRUYXJnZXREZXNjDXB1dCBjYXJkIGZpZWxkICJzZW5kTW9kZSIgb2Yg\nY2FyZCAicHJlZmVyZW5jZSIgaW50byBkZWZhdWx0U2VuZE1vZGUNcHV0IGNhcmQgZmll\nbGQgImlkbGVQcm9jIiBvZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIGRlZmF1bHRJZGxl\nUHJvYw1wdXQgY2FyZCBmaWVsZCAiYWVGaWx0ZXIiIG9mIGNhcmQgInByZWZlcmVuY2Ui\nIGludG8gZGVmYXVsdEFFRmlsdGVyDWVuZCBDaGVja1ByZWZlcmVuY2UNDWZ1bmN0aW9u\nIFN0cmlwU1AgeCwgbG93ZXJDYXNlDXB1dCBDaGFyVG9OdW0oY2hhciAxIG9mIHgpIGlu\ndG8gbg1pZiBsb3dlckNhc2UgPSB0cnVlIHRoZW4NaWYgKG4gPj0gNjUpIGFuZCAobiA8\nPSA5MCkgdGhlbg1wdXQgTnVtVG9DaGFyKG4rMzIpIGludG8gY2hhciAxIG9mIHgNZW5k\nIGlmDWVsc2UNaWYgKG4gPj0gOTcpIGFuZCAobiA8PSAxMjIpIHRoZW4NcHV0IE51bVRv\nQ2hhcihuLTMyKSBpbnRvIGNoYXIgMSBvZiB4DWVuZCBpZg1lbmQgaWYNcmVwZWF0IHVu\ndGlsIGkgPSAwDXB1dCBvZmZzZXQoc3BhY2UsIHgpIGludG8gaQ1pZiBpID4gMCB0aGVu\nDXB1dCBDaGFyVG9OdW0oY2hhciAoaSsxKSBvZiB4KSBpbnRvIG4NaWYgKG4gPj0gOTcp\nIGFuZCAobiA8PSAxMjIpIHRoZW4NcHV0IE51bVRvQ2hhcihuLTMyKSBpbnRvIGNoYXIg\nKGkrMSkgb2YgeA1lbmQgaWYNZGVsZXRlIGNoYXIgaSBvZiB4DWVuZCBpZg1lbmQgcmVw\nZWF0DXJldHVybiB4DWVuZCBTdHJpcFNQDQ1mdW5jdGlvbiBIVEtleVdvcmQgaW5mbw1w\ndXQgKChpdGVtIDQgb2YgaW5mbykgZGl2IDgxOTIpIG1vZCA0IGludG8gdGVtcA1pZiB0\nZW1wID4gMSB0aGVuDXB1dCAibGlzdCIgaW50byB0aGlzVHlwZQ1lbHNlIGlmIHRlbXAg\nPSAxIHRoZW4NcHV0ICJlbnVtIiBpbnRvIHRoaXNUeXBlDWVsc2UNcHV0IFJlc1R5cGUo\naXRlbSAzIG9mIGluZm8pIGludG8gdGhpc1R5cGUNZW5kIGlmDS0tIGlmIGl0IGlzIGEg\nc3BlY2lhbCB0eXBlLCB3ZSBuZWVkIHRvIGFwcGVuZCB0eXBlIGFmdGVyIGtleXdvcmQN\naWYgKHRoaXNUeXBlID0gIlRFWFQiKSBPUiAodGhpc1R5cGUgPSAib2JqICIpIE9SICh0\naGlzVHlwZSA9ICJsaXN0Iikgb3IgKHRoaXNUeXBlID0gIm51bGwiKSB0aGVuDXJldHVy\nbiBpdGVtIDIgb2YgaW5mbw1lbHNlDXJldHVybiBSZXNUeXBlKGl0ZW0gMiBvZiBpbmZv\nKSAmIFRoaXNUeXBlDWVuZCBpZg1lbmQgSFRLZXlXb3JkDQ1vbiBpZGxlDWdsb2JhbCBp\nbkVkaXQNcHV0IHRydWUgaW50byBpbkVkaXQNZW5kIGlkbGUNDWZ1bmN0aW9uIFJlc1R5\ncGUgeA1yZXR1cm4gY2hhciAxIHRvIDQgb2YgKHggJiAiICAgICIpDWVuZCBSZXNUeXBl\nDQ1mdW5jdGlvbiBqdW1wIHgNZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2Qg\naW50byBnV2hlcmVGcm9tDWdvIGNhcmQgeA1yZXR1cm4gKHRoZSByZXN1bHQgPSAiIikN\nZW5kIGp1bXANDW9uIE5hbWVJdCB4DXB1dCB3b3JkIDEgb2YgeCBpbnRvIHkNZGVsZXRl\nIHdvcmQgMSBvZiB4DWlmIChpdGVtIDIgb2YgeCA8PiAiIikgb3IgKGxhc3QgY2hhciBv\nZiB4ID0gIiwiKSB0aGVuDS0tIDIgaXRlbXMgbWVhbnMgaWQgKyBuYW1lLCBqdXN0IGtl\nZXAgdGhlIGlkDWRlbGV0ZSBpdGVtIDIgb2YgeA1lbmQgaWYNaWYgdGhlcmUgaXMgYSBj\nYXJkIHggdGhlbg1pZiAodGhlIGlkIG9mIHRoaXMgY2FyZCkgPD4gKHRoZSBpZCBvZiBj\nYXJkIHgpIHRoZW4NYW5zd2VyICJUaGUgSUQgb2YgdGhpcyIgJiYgeSAmJiAiYWxyZWFk\neSBleGlzdHMiDWVuZCBpZg1lbmQgaWYNc2V0IG5hbWUgb2YgdGhpcyBjYXJkIHRvIHgN\nZW5kIE5hbWVJdA0Nb24gQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1lLCBsaXN0TmFt\nZQ0tLSBjaGFuZ2Ugb2xkTmFtZSBpbiBmaWVsZCBsaXN0TmFtZSB0byBuZXdOYW1lDXB1\ndCB3b3JkIDEgb2Ygb2xkTmFtZSBpbnRvIHN1aXRlbmFtZQ1kZWxldGUgd29yZCAxIHRv\nIDIgb2Ygb2xkTmFtZQ1pZiAoaXRlbSAyIG9mIG9sZE5hbWUgPSAiIikgYW5kIChsYXN0\nIGNoYXIgb2Ygb2xkTmFtZSA8PiAiLCIpIHRoZW4NLS0gb25seSAxIGl0ZW0sIGl0IGlz\nIHRoZSBJRA1wdXQgMSBpbnRvIGNoZWNrSW5kZXgNcHV0IGl0ZW0gMSBvZiBvbGROYW1l\nIGludG8gY2hlY2tJdGVtDWVsc2UNLS0gbmFtZSBmb2xsb3dlZCBieSBJRCwgdXNlIHRo\nZSBJRA1wdXQgMiBpbnRvIGNoZWNrSW5kZXgNcHV0IGl0ZW0gMSBvZiBvbGROYW1lIGlu\ndG8gY2hlY2tJdGVtDXB1dCBpdGVtIDIgb2Ygb2xkTmFtZSAmICIsIiAmIGNoZWNrSXRl\nbSBpbnRvIG9sZE5hbWUNZW5kIGlmDXB1dCAic3VpdGUiICYmIFJlc1R5cGUoc3VpdGVO\nYW1lKSBpbnRvIHN1aXRlQ2FyZA1pZiB0aGVyZSBpcyBhIGNhcmQgc3VpdGVDYXJkIHRo\nZW4NcHV0IGZpZWxkIGxpc3ROYW1lIG9mIGNhcmQgc3VpdGVDYXJkIGludG8geA1wdXQg\ndGhlIG51bWJlciBvZiBsaW5lcyBpbiB4IGludG8gbg1wdXQgMSBpbnRvIGkNcHV0IGZh\nbHNlIGludG8gZm91bmQNcmVwZWF0IHVudGlsIChpID4gbikgb3IgZm91bmQNaWYgKGl0\nZW0gY2hlY2tJbmRleCBvZiBsaW5lIGkgb2YgeCkgPSBjaGVja0l0ZW0gdGhlbg1kZWxl\ndGUgbGluZSBpIG9mIHgNcHV0IHRydWUgaW50byBmb3VuZA1lbmQgaWYNYWRkIDEgdG8g\naQ1lbmQgcmVwZWF0DXB1dCB4IGludG8gZmllbGQgbGlzdE5hbWUgb2YgY2FyZCBzdWl0\nZUNhcmQNZW5kIGlmDWlmIG5ld05hbWUgPD4gIiIgdGhlbg1wdXQgd29yZCAxIG9mIG5l\nd05hbWUgaW50byBzdWl0ZW5hbWUNZGVsZXRlIHdvcmQgMSB0byAyIG9mIG5ld05hbWUN\naWYgKGl0ZW0gMiBvZiBuZXdOYW1lIDw+ICIiKSBvciAobGFzdCBjaGFyIG9mIG5ld05h\nbWUgPSAiLCIpIHRoZW4NLS0gbmV3TmFtZSBpcyBuYW1lICsgSUQsIGZsaXAgaXQgYXJv\ndW5kDXB1dCBpdGVtIDIgb2YgbmV3TmFtZSAmICIsIiAmIGl0ZW0gMSBvZiBuZXdOYW1l\nIGludG8gbmV3TmFtZQ1lbmQgaWYNcHV0ICJzdWl0ZSIgJiYgc3VpdGVOYW1lIGludG8g\nc3VpdGVDYXJkDWlmIHRoZXJlIGlzIGEgY2FyZCBzdWl0ZUNhcmQgdGhlbg1wdXQgbmV3\nTmFtZSAmIHJldHVybiBhZnRlciBmaWVsZCBsaXN0TmFtZSBvZiBjYXJkIHN1aXRlQ2Fy\nZA1lbmQgaWYNZW5kIGlmDWVuZCBDaGFuZ2VOYW1lDQ1vbiBSZURvU2NyaXB0DWdsb2Jh\nbCBpbkVkaXQNcHV0IGluRWRpdCBpbnRvIGN1ckVkaXQNcHV0IGZhbHNlIGludG8gaW5F\nZGl0DXB1c2ggY2FyZA1wdXQgbnVtYmVyIG9mIGNhcmRzIGluIGJrZ25kICJldmVudHMi\nIGludG8gbg1yZXBlYXQgd2l0aCBpID0gMiB0byBuDWdvIGNhcmQgaSBvZiBia2duZCAi\nZXZlbnRzIg1pZiB0aGUgcmVzdWx0ID0gIiIgdGhlbg1NYWtlU2NyaXB0VGVtcGxhdGUN\nZW5kIGlmDWVuZCByZXBlYXQNcG9wIGNhcmQNcHV0IGN1ckVkaXQgaW50byBpbkVkaXQN\nZW5kIFJlRG9TY3JpcHQNDWZ1bmN0aW9uIEVudW1PcHRpb24gc3VpdGVDb2RlLGVudW1l\ncmF0aW9uLGVudW1lcmF0b3IsaW5kZXgNcHV0ICIiIGludG8gdGhlTGlzdA1wdXQgImVu\ndW1lcmF0aW9uIiAmJiBlbnVtZXJhdGlvbiBpbnRvIHgNaWYgdGhlcmUgaXMgYSBjYXJk\nIHggdGhlbg1wdXQgZmllbGQgImVudW1JbmZvIiBvZiBjYXJkIHggaW50byB4DXB1dCBu\ndW1iZXIgb2YgbGluZXMgaW4geCBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1p\nZiAoZW51bWVyYXRvciA9ICIiKSB0aGVuDXB1dCBpdGVtIGluZGV4IG9mIGxpbmUgaSBv\nZiB4ICYgInwiIGFmdGVyIHRoZUxpc3QNZWxzZSBpZiAoZW51bWVyYXRvciA9IGl0ZW0g\nMSBvZiBsaW5lIGkgb2YgeCkgdGhlbg1wdXQgaXRlbSBpbmRleCBvZiBsaW5lIGkgb2Yg\neCAmICJ8IiBpbnRvIHRoZUxpc3QNZW5kIGlmDWVuZCByZXBlYXQNZW5kIGlmDWlmIHRo\nZUxpc3QgPSAiIiB0aGVuDXB1dCAic29tZUVudW0iIGludG8gdGhlTGlzdA1lbHNlDWRl\nbGV0ZSBsYXN0IGNoYXIgb2YgdGhlTGlzdA1lbmQgaWYNcmV0dXJuIHRoZUxpc3QNZW5k\nIEVudW1PcHRpb24NDWZ1bmN0aW9uIE5hbWVPZkRhdGFUeXBlIGRhdGFUeXBlDWlmIGRh\ndGFUeXBlID0gInNob3IiIHRoZW4NZ2V0ICJJbnRlZ2VyLFB0cixIYW5kbGUsdHlwZVNo\nb3J0SW50ZWdlcixzaG9ydCwyIg1lbHNlIGlmIGRhdGFUeXBlID0gImxvbmciIHRoZW4N\nZ2V0ICJMb25naW50LFB0cixIYW5kbGUsdHlwZUxvbmdJbnRlZ2VyLGxvbmcsNCINZWxz\nZSBpZiAoZGF0YVR5cGUgPSAiYm9vbCIpIG9yIChkYXRhVHlwZSA9ICJ0cnVlIikgdGhl\nbg1nZXQgIkJvb2xlYW4sUHRyLEhhbmRsZSx0eXBlQm9vbGVhbixCb29sZWFuLDEiDWVs\nc2UgaWYgZGF0YVR5cGUgPSAiVEVYVCIgdGhlbg1nZXQgIlN0cjI1NSxDaGFyc1B0cixD\naGFyc0hhbmRsZSx0eXBlQ2hhcixjaGFyLC0xIg1lbHNlIGlmIChkYXRhVHlwZSA9ICJl\nbnVtIikgdGhlbg1nZXQgIlJlc1R5cGUsUmVzVHlwZVB0cixIYW5kbGUsdHlwZUVudW1l\ncmF0ZWQsUmVzVHlwZSw0Ig1lbHNlIGlmIChkYXRhVHlwZSA9ICJ0eXBlIikgdGhlbg1n\nZXQgIlJlc1R5cGUsUmVzVHlwZVB0cixIYW5kbGUsdHlwZVR5cGUsUmVzVHlwZSw0Ig1l\nbHNlIGlmIChkYXRhVHlwZSA9ICJwcm9wIikgdGhlbg1nZXQgIlJlc1R5cGUsUmVzVHlw\nZVB0cixIYW5kbGUsdHlwZVByb3BlcnR5LFJlc1R5cGUsNCINZWxzZSBpZiAoZGF0YVR5\ncGUgPSAia2V5dyIpIHRoZW4NZ2V0ICJSZXNUeXBlLFJlc1R5cGVQdHIsSGFuZGxlLHR5\ncGVLZXl3b3JkLFJlc1R5cGUsNCINZWxzZSBpZiBkYXRhVHlwZSA9ICJsaXN0IiB0aGVu\nDWdldCAiQUVEZXNjTGlzdCxBRURlc2NMaXN0UHRyLCx0eXBlQUVMaXN0LEFFRGVzY0xp\nc3QsLTEiDWVsc2UgaWYgZGF0YVR5cGUgPSAiZXh0ZSIgdGhlbg1nZXQgImV4dGVuZGVk\nLFB0cixIYW5kbGUsdHlwZUV4dGVuZGVkLGV4dGVuZGVkLDEwIg1lbHNlIGlmIGRhdGFU\neXBlID0gInNpbmciIHRoZW4NZ2V0ICJSZWFsLFB0cixIYW5kbGUsdHlwZVNob3J0Rmxv\nYXQsZmxvYXQsNCINZWxzZSBpZiBkYXRhVHlwZSA9ICJkb3ViIiB0aGVuDWdldCAiRG91\nYmxlLFB0cixIYW5kbGUsdHlwZUxvbmdGbG9hdCxkb3VibGUsOCINZWxzZSBpZiBkYXRh\nVHlwZSA9ICJjb21wIiB0aGVuDWdldCAiQ29tcCxQdHIsSGFuZGxlLHR5cGVDb21wLGNv\nbXAsOCINZWxzZSBpZiBkYXRhVHlwZSA9ICJhbGlzIiB0aGVuDWdldCAiQWxpYXNSZWNv\ncmQsQWxpYXNQdHIsQWxpYXNIYW5kbGUsdHlwZUFsaWFzLEFsaWFzUmVjb3JkLC0xIg1l\nbHNlIGlmIGRhdGFUeXBlID0gImZzcyAiIHRoZW4NZ2V0ICJGU1NwZWMsRlNTcGVjUHRy\nLEZTU3BlY0hhbmRsZSx0eXBlRlNTLEZTU3BlYyw3MCINZWxzZQ1nZXQgIkFFRGVzYyxQ\ndHIsSGFuZGxlLHR5cGVVbmtub3duLHZvaWQsLTEiDWVuZCBpZg1yZXR1cm4gaXQNZW5k\nIE5hbWVPZkRhdGFUeXBlDQ0Nb24gZW1wdHlTdGFjayBub0RpYWxvZw1pZiBub0RpYWxv\nZyA8PiJ5ZXMiIHRoZW4NYW5zd2VyICJEZWxldGUgYWxsICdhZXRlJyBkYXRhIGZyb20g\ndGhpcyBzdGFjaz8iIHdpdGggIk9LIiBvciAiQ2FuY2VsIg1pZiBpdCBpcyBub3QgIk9L\nIiB0aGVuIGV4aXQgZW1wdHlTdGFjaw1lbmQgaWYNc2V0IGN1cnNvciB0byB3YXRjaA1n\nbG9iYWwgaW5FZGl0DXB1dCBmYWxzZSBpbnRvIGluRWRpdA1zZXQgbG9ja3NjcmVlbiB0\nbyB0cnVlDXB1c2ggY2FyZA1EZWxldGVBbGwgInN1aXRlSW5mbyINRGVsZXRlQWxsICJl\ndmVudHMiDURlbGV0ZUFsbCAiY2xhc3MiDURlbGV0ZUFsbCAiY29tcGFyaXNvbiINRGVs\nZXRlQWxsICJlbnVtZXJhdGlvbiINZ28gY2QgIm1haW5NZW51Ig1wdXQgIiIgaW50byBj\nYXJkIGZpZWxkICJTdWl0ZUxpc3QiDXB1dCAiIiBpbnRvIGNhcmQgZmllbGQgIlNjcmF0\nY2giDXB1dCAiIiBpbnRvIGNhcmQgZmllbGQgInNlbmRUYXJnZXQiIG9mIGNhcmQgInBy\nZWZlcmVuY2UiDXB1dCAiYWV0ZSIgaW50byBjYXJkIGZpZWxkICJyZXNvdXJjZVR5cGUi\nIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCAwIGludG8gY2FyZCBmaWVsZCAicmVzb3Vy\nY2VJRCIgb2YgY2FyZCAicHJlZmVyZW5jZSINcHV0ICIiIGludG8gY2FyZCBmaWVsZCAi\ncmVzb3VyY2VOYW1lIiBvZiBjYXJkICJwcmVmZXJlbmNlIg1wdXQgMSBpbnRvIGNhcmQg\nZmllbGQgIm1ham9yVmVyc2lvbiIgb2YgY2FyZCAicHJlZmVyZW5jZSINcHV0ICIwMCIg\naW50byBjYXJkIGZpZWxkICJtaW5vclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2Ui\nDXB1dCAwIGludG8gY2FyZCBmaWVsZCAibGFuZ3VhZ2VDb2RlIiBvZiBjYXJkICJwcmVm\nZXJlbmNlIg1wdXQgMCBpbnRvIGNhcmQgZmllbGQgInNjcmlwdENvZGUiIG9mIGNhcmQg\nInByZWZlcmVuY2UiDXB1dCB0cnVlIGludG8gaW5FZGl0DWlmIHRoZSBmcmVlc2l6ZSBv\nZiB0aGlzIHN0YWNrID4gMzI3NjggdGhlbiBkb01lbnUgIkNvbXBhY3QgU3RhY2siDWVu\nZCBlbXB0eVN0YWNrDQ0Nb24gRGVsZXRlQWxsIGJrZ25kTmFtZQ1wdXQgbnVtYmVyIG9m\nIGNhcmRzIGluIGJrZ25kIGJrZ25kTmFtZSBpbnRvIGkNcmVwZWF0IHdoaWxlIGkgPiAx\nDWdvIGNhcmQgaSBvZiBia2duZCBia2duZE5hbWUNZG9NZW51ICJEZWxldGUgQ2FyZCIN\nc3VidHJhY3QgMSBmcm9tIGkNZW5kIHJlcGVhdA1lbmQgRGVsZXRlQWxsDQ0AdGVBbGwN\nDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhwEJLR0QAAA48\nAAAAAAAAAAAAAAAAAAAABAAAE8AAAByvAAAAAQAAAAAAAAAAAAAAb24gTG9jYWxpemF0\naW9uIG91dE9ubHkNZ2xvYmFsIHRyYW5zbGF0aW9uVGFibGUNcHV0ICIiIGludG8gdHJh\nbnNsYXRpb25UYWJsZQ1pZiBub3Qgb3V0T25seSB0aGVuDWFuc3dlciBmaWxlICJEbyB5\nb3Ugd2lzaCB0byB1c2UgYSB0cmFuc2xhdGlvbiB0YWJsZSBmaWxlPyIgb2YgdHlwZSB0\nZXh0DWlmIChpdCA8PiAiIikgYW5kIChpdCA8PiAiQ2FuY2VsIikgdGhlbg1wdXQgaXQg\naW50byB0aGVGaWxlTmFtZQ1vcGVuIGZpbGUgdGhlRmlsZU5hbWUNcmVwZWF0IGZvcmV2\nZXINcmVhZCBmcm9tIGZpbGUgdGhlRmlsZU5hbWUgZm9yIDE2Mzg0DWlmIGl0IGlzIGVt\ncHR5IHRoZW4gZXhpdCByZXBlYXQNcHV0IGl0IGFmdGVyIHRyYW5zbGF0aW9uVGFibGUN\nZW5kIHJlcGVhdA1jbG9zZSBmaWxlIHRoZUZpbGVOYW1lDWVuZCBpZg1pZiB0cmFuc2xh\ndGlvblRhYmxlIDw+ICIiIHRoZW4NYW5zd2VyICJEbyB5b3Ugd2FudCB0byBjb25maXJt\nIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZCBzdHJpbmc/IiB3aXRoICJDYW5jZWwiIG9y\nICJObyIgb3IgIlllcyINaWYgaXQgPSAiQ2FuY2VsIiB0aGVuDXB1dCAiIiBpbnRvIHRy\nYW5zbGF0aW9uVGFibGUNZXhpdCB0byBIeXBlckNhcmQNZWxzZQ1wdXQgaXQgaW50byBv\ndXRPbmx5DWVuZCBpZg1lbmQgaWYNZW5kIGlmDXJlcGVhdCB3aXRoIGkgPSAyIHRvIG51\nbWJlciBvZiBjYXJkcyBpbiBia2duZCAiZXZlbnRzIg1pZiBub3QgaGlsaXRlIG9mIGJr\nZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiBvZiBjYXJkIGkgb2YgYmtnbmQgImV2ZW50cyIg\ndGhlbg1UcmFuc2xhdGVGaWVsZCBvdXRPbmx5LCJldmVudHMiLGksImV2ZW50TmFtZSIN\nVHJhbnNsYXRlRmllbGQgb3V0T25seSwiZXZlbnRzIixpLCJldmVudENvbW1lbnQiDVRy\nYW5zbGF0ZUdyb3VwIG91dE9ubHksNSwiZXZlbnRzIixpLCJwYXJhbUluZm8iDWVuZCBp\nZg1lbmQgcmVwZWF0DXJlcGVhdCB3aXRoIGkgPSAyIHRvIG51bWJlciBvZiBjYXJkcyBp\nbiBia2duZCAiY2xhc3MiDWlmIG5vdCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJmcm9t\nIEFFVVQiIG9mIGNhcmQgaSBvZiBia2duZCAiY2xhc3MiIHRoZW4NVHJhbnNsYXRlRmll\nbGQgb3V0T25seSwiY2xhc3MiLGksImNsYXNzTmFtZSINVHJhbnNsYXRlRmllbGQgb3V0\nT25seSwiY2xhc3MiLGksImNsYXNzQ29tbWVudCINVHJhbnNsYXRlR3JvdXAgb3V0T25s\neSw1LCJjbGFzcyIsaSwicHJvcEluZm8iDWVuZCBpZg1lbmQgcmVwZWF0DXJlcGVhdCB3\naXRoIGkgPSAyIHRvIG51bWJlciBvZiBjYXJkcyBpbiBia2duZCAiY29tcGFyaXNvbiIN\naWYgbm90IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgb2YgY2FyZCBp\nIG9mIGJrZ25kICJjb21wYXJpc29uIiB0aGVuDVRyYW5zbGF0ZUZpZWxkIG91dE9ubHks\nImNvbXBhcmlzb24iLGksImNvbXBhcmVOYW1lIg1UcmFuc2xhdGVGaWVsZCBvdXRPbmx5\nLCJjb21wYXJpc29uIixpLCJjb21wYXJlQ29tbWVudCINZW5kIGlmDWVuZCByZXBlYXQN\ncmVwZWF0IHdpdGggaSA9IDIgdG8gbnVtYmVyIG9mIGNhcmRzIGluIGJrZ25kICJlbnVt\nZXJhdGlvbiINaWYgbm90IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIg\nb2YgY2FyZCBpIG9mIGJrZ25kICJlbnVtZXJhdGlvbiIgdGhlbg1UcmFuc2xhdGVHcm91\ncCBvdXRPbmx5LDMsImVudW1lcmF0aW9uIixpLCJlbnVtSW5mbyINZW5kIGlmDWVuZCBy\nZXBlYXQNZ28gY2QgIm1haW5NZW51Ig1QdXRTY3JhdGNoIHRyYW5zbGF0aW9uVGFibGUs\nICJUcmFuc2xhdGlvbiB0YWJsZSINaWYgb3V0T25seSA8PiAidHJ1ZSIgdGhlbg1Db25z\ndHJ1Y3RMaW5rDWVuZCBpZg1wdXQgIiIgaW50byB0cmFuc2xhdGlvblRhYmxlDWVuZCBM\nb2NhbGl6YXRpb24NDW9uIFRyYW5zbGF0ZUZpZWxkIG91dE9ubHksIGJrZ25kTmFtZSwg\nY2FyZE5vLCBmaWVsZE5hbWUNcHV0ICJmaWVsZCIgJiYgcXVvdGUgJiBmaWVsZE5hbWUg\nJiBxdW90ZSAmJiAib2YgY2FyZCIgJiYgY2FyZE5vIMINJiYgIm9mIGJrZ25kIiAmJiBx\ndW90ZSAmIGJrZ25kTmFtZSAmIHF1b3RlIGludG8gY2h1bmtOYW1lDXB1dCB2YWx1ZSBv\nZiBjaHVua05hbWUgaW50byBjaHVua1ZhbHVlDWlmIGNodW5rVmFsdWUgaXMgbm90IGVt\ncHR5IHRoZW4NaWYgb3V0T25seSA9ICJ0cnVlIiB0aGVuDXNldCBjdXJzb3IgdG8gYnVz\neQ1VcGRhdGVUYWJsZSBjaHVua1ZhbHVlLCBjaHVua1ZhbHVlICYgIidzIHRyYW5zbGF0\naW9uIg1lbHNlDXB1dCBUcmFuc2xhdGVUaGlzKGNodW5rVmFsdWUpIGludG8gaXQNaWYg\nb3V0T25seSA9ICJubyIgdGhlbiAtLSB3ZSBkbyBub3QgbmVlZCB0byBjb25maXJtDWlm\nIGl0IDw+ICJAIyQlIiB0aGVuIC0tIHdlIGhhdmUgYSB0cmFuc2xhdGlvbg1pZiBpdCA8\nPiAiY2h1bmtWYWx1ZSIgdGhlbiAtLSB0aGUgdmFsdWUgaXMgY2hhbmdlZA1kbyAicHV0\nIGl0IGludG8iICYmIGNodW5rTmFtZSAtLSB3cml0ZSBpdCBiYWNrDWVuZCBpZg1leGl0\nIFRyYW5zbGF0ZUZpZWxkIC0tIGRvbmUNZW5kIGlmDWVuZCBpZg1wdXQgaXQgaW50byBv\nbGRUcmFucw1pZiBpdCA9ICJAIyQlIiB0aGVuIC0tIHdlIGRvIG5vdCBoYXZlIGEgdHJh\nbnNsYXRpb24NcHV0IGNodW5rVmFsdWUgaW50byBpdA1lbmQgaWYNYXNrICJUcmFuc2xh\ndGUiICYmIHF1b3RlICYgY2h1bmtWYWx1ZSAmIHF1b3RlICYmICJ0bzoiIHdpdGggaXQN\naWYgdGhlIHJlc3VsdCA9ICJDYW5jZWwiIHRoZW4NQ29uc3RydWN0TGluaw1leGl0IHRv\nIEh5cGVyQ2FyZA1lbHNlDWRvICJwdXQgaXQgaW50byIgJiYgY2h1bmtOYW1lDWlmIChv\nbGRUcmFucyA8PiBpdCkgYW5kIChjaHVua1ZhbHVlIDw+IGl0KSB0aGVuIC0tIHRoaXMg\naXMgYSBuZXcgdHJhbnNsYXRpb24sIHVwZGF0ZSB0YWJsZQ1VcGRhdGVUYWJsZSBjaHVu\na1ZhbHVlLCBpdA1lbmQgaWYNZW5kIGlmDWVuZCBpZg1lbmQgaWYNZW5kIFRyYW5zbGF0\nZUZpZWxkDQ1vbiBUcmFuc2xhdGVHcm91cCBvdXRPbmx5LCBjb21tZW50SXRlbSxia2du\nZE5hbWUsIGNhcmRObywgZmllbGROYW1lDXB1dCAiZmllbGQiICYmIHF1b3RlICYgZmll\nbGROYW1lICYgcXVvdGUgJiYgIm9mIGNhcmQiICYmIGNhcmRObyDCDSYmICJvZiBia2du\nZCIgJiYgcXVvdGUgJiBia2duZE5hbWUgJiBxdW90ZSBpbnRvIGNodW5rTmFtZQ1wdXQg\ndmFsdWUgb2YgY2h1bmtOYW1lIGludG8gcGFyYW1JbmZvDXJlcGVhdCB3aXRoIGkgPSAx\nIHRvIG51bWJlciBvZiBsaW5lcyBpbiBwYXJhbUluZm8NcHV0IGxpbmUgaSBvZiBwYXJh\nbUluZm8gaW50byB0aGlzUGFyYW0NcHV0IGl0ZW0gMSBvZiB0aGlzUGFyYW0gaW50byBp\ndHNOYW1lDXB1dCBpdGVtIDEgdG8gKGNvbW1lbnRJdGVtLTEpIG9mIHRoaXNQYXJhbSBp\nbnRvIG5ld1BhcmFtDWRlbGV0ZSBpdGVtIDEgdG8gKGNvbW1lbnRJdGVtLTEpIG9mIHRo\naXNQYXJhbQ1pZiBpdHNOYW1lIDw+ICIiIHRoZW4NcHV0IFRyYW5zbGF0ZVN0cmluZyhv\ndXRPbmx5LGl0c05hbWUpIGludG8gaXRlbSAxIG9mIG5ld1BhcmFtDWVuZCBpZg1pZiB0\naGlzUGFyYW0gPD4gIiIgdGhlbg1wdXQgIiwiICYgVHJhbnNsYXRlU3RyaW5nKG91dE9u\nbHksdGhpc1BhcmFtKSBhZnRlciBuZXdQYXJhbQ1lbHNlDXB1dCAiLCIgYWZ0ZXIgbmV3\nUGFyYW0NZW5kIGlmDXB1dCBuZXdQYXJhbSBpbnRvIGxpbmUgaSBvZiBwYXJhbUluZm8N\nZW5kIHJlcGVhdA1pZiBvdXRPbmx5IDw+ICJ0cnVlIiB0aGVuDWRvICJwdXQgcGFyYW1J\nbmZvIGludG8iICYmIGNodW5rTmFtZQ1lbmQgaWYNZW5kIFRyYW5zbGF0ZUdyb3VwDQ1m\ndW5jdGlvbiBUcmFuc2xhdGVTdHJpbmcgb3V0T25seSwgc3RyaW5nDWlmIG91dE9ubHkg\nPSAidHJ1ZSIgdGhlbg1zZXQgY3Vyc29yIHRvIGJ1c3kNVXBkYXRlVGFibGUgc3RyaW5n\nLCBzdHJpbmcgJiAiJ3MgdHJhbnNsYXRpb24iDXJldHVybiBzdHJpbmcNZWxzZQ1wdXQg\nVHJhbnNsYXRlVGhpcyhzdHJpbmcpIGludG8gaXQNaWYgb3V0T25seSA9ICJubyIgdGhl\nbiAtLSB3ZSBkbyBub3QgbmVlZCB0byBjb25maXJtDWlmIGl0IDw+ICJAIyQlIiB0aGVu\nIC0tIHdlIGhhdmUgYSB0cmFuc2xhdGlvbg1yZXR1cm4gaXQgLS0gZG9uZQ1lbmQgaWYN\nZW5kIGlmDXB1dCBpdCBpbnRvIG9sZFRyYW5zDWlmIGl0ID0gIkAjJCUiIHRoZW4gLS0g\nd2UgZG8gbm90IGhhdmUgYSB0cmFuc2xhdGlvbg1wdXQgc3RyaW5nIGludG8gaXQNZW5k\nIGlmDWFzayAiVHJhbnNsYXRlIiAmJiBxdW90ZSAmIHN0cmluZyAmIHF1b3RlICYmICJ0\nbzoiIHdpdGggaXQNaWYgdGhlIHJlc3VsdCA9ICJDYW5jZWwiIHRoZW4NQ29uc3RydWN0\nTGluaw1leGl0IHRvIEh5cGVyQ2FyZA1lbHNlDWlmIChvbGRUcmFucyA8PiBpdCkgYW5k\nIChzdHJpbmcgPD4gaXQpIHRoZW4gLS0gdGhpcyBpcyBhIG5ldyB0cmFuc2xhdGlvbiwg\ndXBkYXRlIHRhYmxlDVVwZGF0ZVRhYmxlIHN0cmluZywgaXQNZW5kIGlmDXJldHVybiBp\ndA1lbmQgaWYNZW5kIGlmDWVuZCBUcmFuc2xhdGVTdHJpbmcNDWZ1bmN0aW9uIFRyYW5z\nbGF0ZVRoaXMgc3RyaW5nDWdsb2JhbCB0cmFuc2xhdGlvblRhYmxlDWlmIHRyYW5zbGF0\naW9uVGFibGUgPD4gIiIgdGhlbg1wdXQgU2VhcmNoKHRyYW5zbGF0aW9uVGFibGUsIHN0\ncmluZyAmIHJldHVybiwgdHJ1ZSwgdHJ1ZSkgaW50byBsaW5lTGlzdA1wdXQgbnVtYmVy\nIG9mIGxpbmVzIGluIGxpbmVMaXN0IGludG8gbg1yZXBlYXQgd2l0aCBpID0gMSB0byBu\nDXB1dCBpdGVtIDEgb2YgbGluZSBpIG9mIGxpbmVMaXN0IGludG8gag1pZiAoaiBtb2Qg\nMikgPSAxIHRoZW4NaWYgbGluZSBqIG9mIHRyYW5zbGF0aW9uVGFibGUgPSBzdHJpbmcg\ndGhlbg1yZXR1cm4gbGluZSBqKzEgb2YgdHJhbnNsYXRpb25UYWJsZQ1lbmQgaWYNZW5k\nIGlmDWVuZCByZXBlYXQNZW5kIGlmDXJldHVybiAiQCMkJSINZW5kIFRyYW5zbGF0ZVRo\naXMNDW9uIFVwZGF0ZVRhYmxlIHNvdXJjZSx0cmFuc2xhdGlvbg1nbG9iYWwgdHJhbnNs\nYXRpb25UYWJsZQ1wdXQgU2VhcmNoKHRyYW5zbGF0aW9uVGFibGUsIHNvdXJjZSAmIHJl\ndHVybiwgdHJ1ZSwgdHJ1ZSkgaW50byBsaW5lTGlzdA1wdXQgbnVtYmVyIG9mIGxpbmVz\nIGluIGxpbmVMaXN0IGludG8gbg1yZXBlYXQgd2l0aCBpID0gMSB0byBuDXB1dCBpdGVt\nIDEgb2YgbGluZSBpIG9mIGxpbmVMaXN0IGludG8gag1pZiAoaiBtb2QgMikgPSAxIHRo\nZW4NaWYgbGluZSBqIG9mIHRyYW5zbGF0aW9uVGFibGUgPSBzb3VyY2UgdGhlbg0tLSB0\ncmFuc2xhdGlvbiBjaGFuZ2VkLCB3ZSB1cGRhdGUgaXQNcHV0IHRyYW5zbGF0aW9uIGlu\ndG8gbGluZSBqKzEgb2YgdHJhbnNsYXRpb25UYWJsZQ1leGl0IFVwZGF0ZVRhYmxlDWVu\nZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA0tLSBuZXcgdHJhbnNsYXRpb24sIHdlIGFkZCB0\nbyB0aGUgZW5kIG9mIHRoZSB0YWJsZQ1wdXQgc291cmNlICYgcmV0dXJuICYgdHJhbnNs\nYXRpb24gJiByZXR1cm4gYWZ0ZXIgdHJhbnNsYXRpb25UYWJsZQ1lbmQgVXBkYXRlVGFi\nbGUNDW9uIENvbnN0cnVjdExpbmsNZ2xvYmFsIGluRWRpdA1wdXQgZmFsc2UgaW50byBp\nbkVkaXQNcHV0IGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBpZCA4IG9mIGNhcmQgInByZWZl\ncmVuY2UiIGludG8gc29ydE5hbWUNcHV0IGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBpZCAy\nNiBvZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIGNsZWFuRmxhZw1pZiBzb3J0TmFtZSB0\naGVuDXNldCBjdXJzb3IgdG8gYnVzeQ1zb3J0IGJrZ25kICJldmVudHMiIGJ5IFJlc1R5\ncGUoZmllbGQgIlN1aXRlQ29kZSIpICYgZmllbGQgImV2ZW50TmFtZSINc2V0IGN1cnNv\nciB0byBidXN5DXNvcnQgYmtnbmQgImNsYXNzIiBieSBSZXNUeXBlKGZpZWxkICJTdWl0\nZUNvZGUiKSAmIGZpZWxkICJjbGFzc05hbWUiDXNldCBjdXJzb3IgdG8gYnVzeQ1zb3J0\nIGJrZ25kICJjb21wYXJpc29uIiBieSBSZXNUeXBlKGZpZWxkICJTdWl0ZUNvZGUiKSAm\nIGZpZWxkICJjb21wYXJlTmFtZSINc2V0IGN1cnNvciB0byBidXN5DXNvcnQgYmtnbmQg\nImVudW1lcmF0aW9uIiBieSBSZXNUeXBlKGZpZWxkICJTdWl0ZUNvZGUiKSAmIGZpZWxk\nICJlbnVtZXJhdGlvbiINZWxzZQ1zb3J0IGJrZ25kICJldmVudHMiIGJ5IGZpZWxkICJT\ndWl0ZUNvZGUiDXNvcnQgYmtnbmQgImNsYXNzIiBieSBmaWVsZCAiU3VpdGVDb2RlIg1z\nb3J0IGJrZ25kICJjb21wYXJpc29uIiBieSBmaWVsZCAiU3VpdGVDb2RlIg1zb3J0IGJr\nZ25kICJlbnVtZXJhdGlvbiIgYnkgZmllbGQgIlN1aXRlQ29kZSINZW5kIGlmDXB1dCBu\ndW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBuDXJlcGVhdCB3\naXRoIGkgPSAyIHRvIG4NZ28gY2FyZCBuIG9mIGJrZ25kICJzdWl0ZUluZm8iDS0tIGNs\nZWFyIGV2ZXJ5dGhpbmcNcHV0ICIiIGludG8gZmllbGQgImV2ZW50TGlzdCINcHV0ICIi\nIGludG8gZmllbGQgImNsYXNzTGlzdCINcHV0ICIiIGludG8gZmllbGQgImNvbXBhcmVM\naXN0Ig1wdXQgIiIgaW50byBmaWVsZCAiZW51bUxpc3QiDWVuZCByZXBlYXQNQ2xlYW5U\neXBlIGZhbHNlLCAiY2xhc3MiLCJjbGFzc0xpc3QiLCJjbGFzc05hbWUiLCJjbGFzc0lE\nIg1DbGVhblR5cGUgZmFsc2UsICJjb21wYXJpc29uIiwiY29tcGFyZUxpc3QiLCJjb21w\nYXJlTmFtZSIsImNvbXBhcmVJRCINQ2xlYW5UeXBlIGZhbHNlLCAiZW51bWVyYXRpb24i\nLCJlbnVtTGlzdCIsImVudW1lcmF0aW9uIg1DbGVhblR5cGUgY2xlYW5GbGFnLCAiZXZl\nbnRzIiwiZXZlbnRMaXN0IiwiZXZlbnROYW1lIiwiZXZlbnRDbGFzcyIsImV2ZW50SUQi\nDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBpDXB1\ndCAiIiBpbnRvIHN1aXRlTGlzdA1yZXBlYXQgd2hpbGUgaSA+IDENZ28gY2FyZCBpIG9m\nIGJrZ25kICJzdWl0ZUluZm8iDWlmIGZpZWxkICJzdWl0ZUNvZGUiID0gIiIgdGhlbg1k\nb21lbnUgImRlbGV0ZSBDYXJkIg1lbHNlDXNldCBsb2NrVGV4dCBvZiBmaWVsZCAic3Vp\ndGVDb2RlIiB0byB0cnVlDXNldCBzdHlsZSBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byBv\ncGFxdWUNcHV0IGZpZWxkICJzdWl0ZUNvZGUiICYgcmV0dXJuIGJlZm9yZSBzdWl0ZUxp\nc3QNZW5kIGlmDXN1YnRyYWN0IDEgZnJvbSBpDWVuZCByZXBlYXQNZ28gY2FyZCAibWFp\nbk1lbnUiDXB1dCBzdWl0ZUxpc3QgaW50byBjYXJkIGZpZWxkICJzdWl0ZUxpc3QiDXB1\ndCB0cnVlIGludG8gaW5FZGl0DWVuZCBDb25zdHJ1Y3RMaW5rDQ1vbiBDbGVhblR5cGUg\nY2xlYW5GbGFnLCBia2duZE5hbWUsbGlzdE5hbWUsZmllbGROYW1lLElEMSxJRDINcHV0\nIG51bWJlciBvZiBjYXJkcyBpbiBia2duZCBia2duZE5hbWUgaW50byBuDXB1dCAiIiBp\nbnRvIHRoZUxpc3QNcmVwZWF0IHdpdGggaSA9IDIgdG8gbg1zZXQgY3Vyc29yIHRvIGJ1\nc3kNZ28gY2FyZCBpIG9mIGJrZ25kIGJrZ25kTmFtZQ1pZiBia2duZE5hbWUgPSAiZXZl\nbnRzIiB0aGVuDWlmIGNsZWFuRmxhZyB0aGVuDUd1ZXNzUGFyYW1UeXBlDWVuZCBpZg1N\nYWtlU2NyaXB0VGVtcGxhdGUNZW5kIGlmDXB1dCBmaWVsZCAic3VpdGVDb2RlIiBpbnRv\nIHN1aXRlQ29kZQ1wdXQgZmllbGQgZmllbGROYW1lIGludG8gY3VyTmFtZQ1pZiBJRDEg\nPD4gIiIgdGhlbg1wdXQgIiwiICYgUmVzVHlwZShmaWVsZCBJRDEpIGFmdGVyIGN1ck5h\nbWUNaWYgSUQyIDw+ICIiIHRoZW4NcHV0IFJlc1R5cGUoZmllbGQgSUQyKSBhZnRlciBj\ndXJOYW1lDWVuZCBpZg1lbmQgaWYNaWYgKHN1aXRlQ29kZSA8PiBzdWl0ZVJ1bikgYW5k\nIChzdWl0UnVuIDw+ICIiKSB0aGVuDS0tIHdlIGFyZSBkb25lIHdpdGggYSBzdWl0ZQ1Q\ndXROYW1lTGlzdCBzdWl0ZVJ1bixsaXN0TmFtZSx0aGVMaXN0DXB1dCAiIiBpbnRvIHRo\nZUxpc3QNZW5kIGlmDXB1dCBzdWl0ZUNvZGUgaW50byBzdWl0ZVJ1bg1wdXQgY3VyTmFt\nZSAmIHJldHVybiBhZnRlciB0aGVMaXN0DWVuZCByZXBlYXQNaWYgbiA+IDEgdGhlbg1Q\ndXROYW1lTGlzdCBzdWl0ZVJ1bixsaXN0TmFtZSx0aGVMaXN0DWVuZCBpZg1lbmQgQ2xl\nYW5UeXBlDQ1vbiBQdXROYW1lTGlzdCBzdWl0ZUNvZGUsbGlzdE5hbWUsdGhlTGlzdA1n\nbyBjYXJkICJzdWl0ZSIgJiYgc3VpdGVDb2RlDWlmIHRoZSByZXN1bHQgPD4gIiIgdGhl\nbg0tLSB3ZSBkb24ndCBoYXZlIG9uZSB5ZXQsIHdlIG5lZWQgdG8gY3JlYXRlIGl0DWdv\nIGxhc3QgY2FyZCBvZiBia2duZCAic3VpdGVJbmZvIg1kb01lbnUgIm5ldyBjYXJkIg1l\nbmQgaWYNcHV0IHRoZUxpc3QgaW50byBmaWVsZCBsaXN0TmFtZQ1lbmQgUHV0TmFtZUxp\nc3QNDW9uIFB1dFNjcmF0Y2ggeCwgaXRzTmFtZQ1pZiBsZW5ndGgoeCkgPj0gMzAwMDAg\ndGhlbg0tLSB0b28gbXVjaCB0byBiZSBwdXQgaW50byBhIEh5cGVyQ2FyZCBmaWVsZCwg\ndHJ5IGZpbGUgaW5zdGVhZA1hc2sgZmlsZSAiU2F2ZSB0aGUgZGF0YSB0byBmaWxlIg1p\nZiBpdCA8PiAiIiB0aGVuDXB1dCBpdCBpbnRvIHJlZg1vcGVuIGZpbGUgcmVmDXdyaXRl\nIHggdG8gZmlsZSByZWYNY2xvc2UgZmlsZSByZWYNZWxzZQ1Nb3ZlRGVzY1RvU2NyYXAg\neCAtLSBwdXQgaXQgaW50byBzY3JhcCBhcyBhIGxhc3QgcmVzb3J0DWVuZCBpZg1lbHNl\nDXB1dCB4IGludG8gY2FyZCBmaWVsZCAic2NyYXRjaCINcHV0IGl0c05hbWUgaW50byBj\nYXJkIGZpZWxkICJwYWROYW1lIg1lbmQgaWYNZW5kIFB1dFNjcmF0Y2gNDQAAAAAAAAAA\nAAAAAAAAAAAAAAAYAEJLR0QAABPAAAAAAAAAEt9AAAAAAAAAAwAAFdgAAA48ABYAGwAA\nEHYACAAAAG4AyAACAgQAKQDZADsBhQACAAAAAAAAAAQADAAAABBzdWl0ZU5hbWUAAG9u\nIE1vdXNlV2l0aGluDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0\naGUgbmFtZSBvZiB0aGlzIHN1aXRlIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlz\nIGlzIHRoZSBuYW1lIG9mIHRoaXMgc3VpdGUuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGlu\nDQ0AAADSAAMCBAA8ANkAbgH8AAIAAAAAAAAABAAJAAAADHN1aXRlQ29tbWVudAAAb24g\nTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEg\nY29tbWVudCBmb3IgdGhpcyBzdWl0ZSBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhp\ncyBpcyB0aGUgY29tbWVudCBmb3IgdGhpcyBzdWl0ZS4iDWVuZCBpZg1lbmQgTW91c2VX\naXRoaW4NDQ0AAAEUAAQCIQCDAAQA3AD9QAcAAAAAAAAABAAJAAAADGV2ZW50TGlzdAAA\nb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgdGhlIGxpc3Qgb2YgZXZlbnRz\nIGZvciB0aGlzIHN1aXRlIGdvZXMgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91\nc2V1cA1wdXQgdmFsdWUgb2YgdGhlIGNsaWNrTGluZSBpbnRvIHgNaWYgeCA8PiAiIiB0\naGVuDUhNUmVtb3ZlQmFsbG9vbg1wdXQganVtcCgiZXZlbnQiICYmIGl0ZW0gMiBvZiB4\nKSBpbnRvIHZvaWQNZW5kIGlmDWVuZCBtb3VzZXVwAAAiAAUCDAAZAIQAKADZAAAAAAAA\n//8AFQAMAQAAEAAAAAAAIgAGAgwAKwCZAD0A2QAAAAAAAP//ABUADAEAABAAAAAAACIA\nBwIMADsAjQBNANoAAAAAAAD//wAVAAwBAAAQAAAAAAAiAAgCDQB0AAQAgwA7AAAAAAAA\nAAAAFQAMAQAAEAAAAAAAIgAJAgwAdAEDAIMBSwAAAAAAAAAAABUADAEAABAAAAAAARYA\nCgIhAIMBAwDcAfxABwAAAAAAAAAEAAkAAAAMY2xhc3NMaXN0AABvbiBNb3VzZVdpdGhp\nbg1TaG93QmFsbG9vbiAiVGhpcyB0aGUgbGlzdCBvZiBjbGFzc2VzIGZvciB0aGlzIHN1\naXRlIGdvZXMgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2V1cA1wdXQgdmFs\ndWUgb2YgdGhlIGNsaWNrTGluZSBpbnRvIHgNaWYgeCA8PiAiIiB0aGVuDUhNUmVtb3Zl\nQmFsbG9vbg1wdXQganVtcCgiY2xhc3MiICYmIGl0ZW0gMiBvZiB4KSBpbnRvIHZvaWQN\nZW5kIGlmDWVuZCBtb3VzZXVwAAAAIgALAgwA6QAEAPoAaAAAAAAAAAAAABUADAEAABAA\nAAAAACIADAIMAOkBAwD6AXQAAAAAAAAAAAAVAAwBAAAQAAAAAAEqAA0CIQD5AAQBUQD9\nQAcAAAAAAAAABAAJAAAADGNvbXBhcmVMaXN0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFs\nbG9vbiAiVGhpcyB0aGUgbGlzdCBvZiBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdGhp\ncyBzdWl0ZSBnb2VzIGhlcmUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNldXANcHV0\nIHZhbHVlIG9mIHRoZSBjbGlja0xpbmUgaW50byB4DWlmIHggPD4gIiIgdGhlbg1ITVJl\nbW92ZUJhbGxvb24NcHV0IGp1bXAoImNvbXBhcmlzb24iICYmIGl0ZW0gMiBvZiB4KSBp\nbnRvIHZvaWQNZW5kIGlmDWVuZCBtb3VzZXVwAAABFgAOAiEA+gECAVEB/EAHAAAAAAAA\nAAQACQAAAAxlbnVtTGlzdAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMg\ndGhlIGxpc3Qgb2YgZW51bWVyYXRpb25zIGZvciB0aGlzIHN1aXRlIGdvZXMgaGVyZS4i\nDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2V1cA1wdXQgdmFsdWUgb2YgdGhlIGNsaWNr\nTGluZSBpbnRvIHgNaWYgeCA8PiAiIiB0aGVuDUhNUmVtb3ZlQmFsbG9vbg1wdXQganVt\ncCgiZW51bWVyYXRpb24iICYmIHgpIGludG8gdm9pZA1lbmQgaWYNZW5kIG1vdXNldXAA\nAAEOAA8BAABxAMgAgQD9oAQAAAAAAAEAAAAMAAAAEE5ld8kAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGFkZCBhIG5ldyBldmVudCB0byB0aGlz\nIHN1aXRlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBnV2hlcmVG\ncm9tDWxvY2sgc2NyZWVuDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ1NYWtl\nSXRlbSAiZXZlbnRzIg11bmxvY2sgc2NyZWVuIHdpdGggdmlzdWFsIGRpc3NvbHZlIGZh\nc3QNZW5kIG1vdXNlVXAAAAEMABABAABxAccAgQH8gAQAAAAAAAEAAAAMAAAAEE5ld8kA\nAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGFkZCBhIG5l\ndyBjbGFzcyB0byB0aGlzIHN1aXRlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDWdsb2JhbCBnV2hlcmVGcm9tDWxvY2sgc2NyZWVuDXB1c2ggY2QNcG9wIGNkIGludG8g\nZ1doZXJlRnJvbQ1NYWtlSXRlbSAiY2xhc3MiDXVubG9jayBzY3JlZW4gd2l0aCB2aXN1\nYWwgZGlzc29sdmUgZmFzdA1lbmQgbW91c2VVcAABIAARAQAA5wDIAPcA/aAEAAAAAAAB\nAAAADAAAABBOZXfJAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVy\nZSB0byBhZGQgYSBuZXcgY29tcGFyaXNvbiBvcGVyYXRvciB0byB0aGlzIHN1aXRlLiIN\nZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBnV2hlcmVGcm9tDWxvY2sg\nc2NyZWVuDXB1c2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ1NYWtlSXRlbSAiY29t\ncGFyaXNvbiINdW5sb2NrIHNjcmVlbiB3aXRoIHZpc3VhbCBkaXNzb2x2ZSBmYXN0DWVu\nZCBtb3VzZVVwAAABGAASAQAA6AHIAPgB/aAEAAAAAAABAAAADAAAABBOZXfJAABvbiBN\nb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBhZGQgYSBuZXcgZW51\nbWVyYXRpb24gdG8gdGhpcyBzdWl0ZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VV\ncA1nbG9iYWwgZ1doZXJlRnJvbQ1sb2NrIHNjcmVlbg1wdXNoIGNkDXBvcCBjZCBpbnRv\nIGdXaGVyZUZyb20NTWFrZUl0ZW0gIkVudW1lcmF0aW9uIg11bmxvY2sgc2NyZWVuIHdp\ndGggdmlzdWFsIGRpc3NvbHZlIGZhc3QNZW5kIG1vdXNlVXAAACIAEwINABkAAAAzAHAA\nAAAAAAAAAAAVABgIAAAgAAAAAAFYABQBAABEABYAYwA2IAAAAAOGAAEAAAAMAAAAEAAA\nb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhl\nIG5leHQgc3VpdGUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2V0IHRoZXJl\nIGlzIGEgY2FyZCAyIG9mIHRoaXMgYmtnbmQNaWYgbm90IGl0IHRoZW4gZXhpdCBtb3Vz\nZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBjYXJkIDIgb2YgdGhpcyBia2duZCBpbnRv\nIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkIDw+IHggdGhlbg12aXN1YWwg\nd2lwZSBsZWZ0DWdvIHByZXYgY2FyZCBvZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQgbW91\nc2VVcAAAASAAFQEAAEQAPwBjAF4gAAAAZzkAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhp\nbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0byB0aGUgcHJldmlvdXMgc3Vp\ndGUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1l\nIG9mIGxhc3QgY2FyZCBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFt\nZSBvZiB0aGlzIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIHJpZ2h0DWdvIG5leHQg\nY2FyZCBvZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQgbW91c2VVcAAAALgAFwEAAA8BuQA2\nAgCgAAAAPtMAAQAAAAwAAAAQUmVzb3VyY2UgVG9vbHMAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhlIHJlc291cmNlIHRv\nb2xzIGNhcmQuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ28gY2FyZCAibWFp\nbk1lbnUiDWVuZCBtb3VzZVVwAAHgABgCBQAWANkAKAEKAAEAAAAAAAAABAAOAQAAElN1\naXRlQ29kZQAAb24gTW91c2VXaXRoaW4NaWYgdGhlIGxvY2t0ZXh0IG9mIG1lIHRoZW4N\nU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGlkIG9mIHRoaXMgc3VpdGUuIg1lbHNlDVNo\nb3dCYWxsb29uICJFbnRlciBpcyB0aGUgaWQgb2YgdGhpcyBzdWl0ZSBoZXJlLiINZW5k\nIGlmDWVuZCBNb3VzZVdpdGhpbg0Nb24gZXhpdEZpZWxkDWdldCBtZQ1pZiBpdCBpcyBl\nbXB0eSB0aGVuDXB1dCBlbXB0eSBpbnRvIHRoZUNvZGUNcmVwZWF0IHdoaWxlIHRoZSBu\ndW1iZXIgb2YgY2hhcnMgaW4gdGhlQ29kZSA8IDQNYXNrICJQbGVhc2Ugc3VwcGx5IGEg\nNCBjaGFyYWN0ZXIgc3VpdGUgY29kZToiIHdpdGggdGhlQ29kZQ1wdXQgaXQgaW50byB0\naGVDb2RlDWVuZCByZXBlYXQNcHV0IHRoZUNvZGUgaW50byBmaWVsZCAic3VpdGVDb2Rl\nIg1lbmQgaWYNcGFzcyBleGl0RmllbGQNZW5kIGV4aXRGaWVsZA0NAAAFAAwAU3VpdGUg\nQ29kZToABgAGAE5hbWU6AAcACQBDb21tZW50OgAACAAHAEV2ZW50cwAACQAIAENsYXNz\nZXMACwAMAENvbXBhcmlzb25zAAwADQBFbnVtZXJhdGlvbnMAABMACACuU3VpdGVzc3Vp\ndGVJbmZvAG9uIE1ha2VJdGVtIGl0ZW1UeXBlDXB1dCBmaWVsZCAic3VpdGVDb2RlIiBp\nbnRvIGN1clN1aXRlQ29kZQ1nbyBsYXN0IGNhcmQgb2YgYmtnbmQgaXRlbVR5cGUNZG9N\nZW51ICJOZXcgQ2FyZCINcHV0IGN1clN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0ZUNv\nZGUiDWlmIGl0ZW1UeXBlID0gImV2ZW50cyIgdGhlbg1wdXQgY3VyU3VpdGVDb2RlIGlu\ndG8gZmllbGQgImV2ZW50Q2xhc3MiDWVuZCBpZg1lbmQgTWFrZUl0ZW0NDW9uIE5ld0Nh\ncmQNc2V0IGxvY2tUZXh0IG9mIGZpZWxkICJzdWl0ZUNvZGUiIHRvIGZhbHNlDXNldCBz\ndHlsZSBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byByZWN0YW5nbGUNUGFzcyBOZXdDYXJk\nDWVuZCBOZXdDYXJkDQ1vbiBDbG9zZUNhcmQNZ2xvYmFsIGluRWRpdA1pZiBpbkVkaXQg\ndGhlbg1wdXQgc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQgaW50byB4DWlmIHN0eWxlIG9m\nIGZpZWxkICJzdWl0ZUNvZGUiIGlzIHJlY3RhbmdsZSB0aGVuDS0tIGEgbmV3IHN1aXRl\nLCBhIGJldHRlciBjcml0ZXJpYSBtYXkgYmUgY2FyZCBuYW1lIGlzIGVtcHR5LCBidXQg\nd2UgaGF2ZSBwcm9ibGVtIHdpdGggdGhhdA1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50\nbyBuZXdOYW1lDXNldCBsb2NrVGV4dCBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byB0cnVl\nDXNldCBzdHlsZSBvZiBmaWVsZCAic3VpdGVDb2RlIiB0byBvcGFxdWUNc2V0IHRoZSBu\nYW1lIG9mIHRoaXMgY2FyZCB0byAoInN1aXRlIiAmJiBuZXdOYW1lKQ1wdXQgbmV3TmFt\nZSAmIHJldHVybiBhZnRlciBjYXJkIGZpZWxkICJzdWl0ZUxpc3QiIG9mIGNhcmQgIm1h\naW5NZW51Ig1lbmQgaWYNZW5kIGlmDVBhc3MgQ2xvc2VDYXJkDWVuZCBDbG9zZUNhcmQN\nDW9uIGRvTWVudSBpdGVtLG1lbnUNaWYgKChpdGVtID0gImRlbGV0ZSBjYXJkIikgb3Ig\nKGl0ZW0gPSAiY3V0IGNhcmQiKSkgYW5kIChpZCBvZiB0aGlzIGJrZ25kID0gNTA1Nikg\ndGhlbg1nbG9iYWwgaW5FZGl0DWlmIGluRWRpdCB0aGVuDXB1dCBmYWxzZSBpbnRvIGlu\nRWRpdA1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBzdWl0ZUNvZGUNcHV0IGNhcmQg\nZmllbGQgInN1aXRlTGlzdCIgb2YgY2FyZCAibWFpbk1lbnUiIGludG8geA1wdXQgbnVt\nYmVyIG9mIGxpbmVzIGluIHggaW50byBuDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG4NaWYg\nbGluZSBpIG9mIHggPSBzdWl0ZUNvZGUgdGhlbg1kZWxldGUgbGluZSBpIG9mIHgNcHV0\nIHggaW50byBjYXJkIGZpZWxkICJzdWl0ZUxpc3QiIG9mIGNhcmQgIm1haW5NZW51Ig1l\neGl0IHJlcGVhdA1lbmQgaWYNZW5kIHJlcGVhdA1wdXNoIGNhcmQNRGVsZXRlU3VpdGUg\nImV2ZW50cyIsc3VpdGVDb2RlDURlbGV0ZVN1aXRlICJjbGFzcyIsc3VpdGVDb2RlDURl\nbGV0ZVN1aXRlICJjb21wYXJpc29uIixzdWl0ZUNvZGUNRGVsZXRlU3VpdGUgImVudW1l\ncmF0aW9uIixzdWl0ZUNvZGUNcG9wIGNhcmQNcHV0IHRydWUgaW50byBpbkVkaXQNZW5k\nIGlmDWVuZCBpZg1wYXNzIGRvTWVudQ1lbmQgZG9NZW51DQ1vbiBEZWxldGVTdWl0ZSBi\na2duZE5hbWUsc3VpdGVDb2RlDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgYmtn\nbmROYW1lIGludG8gaQ1yZXBlYXQgd2hpbGUgaSA+IDENZ28gY2FyZCBpIG9mIGJrZ25k\nIGJrZ25kTmFtZQ1pZiBmaWVsZCAic3VpdGVDb2RlIiA9IHN1aXRlQ29kZSB0aGVuDWRv\nTWVudSAiRGVsZXRlIENhcmQiDWVuZCBpZg1zdWJ0cmFjdCAxIGZyb20gaQ1lbmQgcmVw\nZWF0DWVuZCBEZWxldGVTdWl0ZQ0NAAAAAAAAAAAAAAAAAAAA4EJNQVAAABLfAAAAAAAA\nAAAAAQAAAAAAAAFWAgAAAAAAAVYCAAAYAAABUwH+AAAAAAAAAAAAAAAAAAAAnADC////\n/////////////////OOFih8C4x8D47mGiQDCVVVVVVVVVVVVVVVVVVVVVeMAwiqqqqqq\nqqqqqqqqqqqqqqrjv4G/gbKB4R8E4R8I4R8C4R8Ev4a/hrWGjhGA4S0CAeEeBI0RgOEt\nAQHhHgK+gYnhHwThHwjhHwLhHwS/hr+GtYaOEYDhLQIB4R4EjRGA4S0BAeEeAgdwAHcA\nAFoAAFXAQktHRAAAFdgAAAAAAAAWpkAAAAAAAAAQAAAYZAAAE8AAMwA+AAAyvgAIAAAA\nZAB+AAECBAAcAI4AMAC/AAIAAAAAAAEABAAOAQAAElN1aXRlQ29kZQAAb24gTW91c2VX\naXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgZXZlbnQgYmVsb25ncyB0byB0aGlzIHN1aXRl\nIGNvZGUuIg1lbmQgTW91c2VXaXRoaW4AAADGAAICBABAAFkAUwEJAAIAAAAAAAAABAAM\nAAAAEEV2ZW50TmFtZQAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hv\nd0JhbGxvb24gIkVudGVyIHRoZSBuYW1lIG9mIHRoaXMgZXZlbnQgaGVyZS4iDWVsc2UN\nU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIG5hbWUgb2YgdGhpcyBldmVudC4iDWVuZCBp\nZg1lbmQgTW91c2VXaXRoaW4NAAB+AAMCBAAcAP0AMAEuAAIAAAAAAAAABAAOAQAAEkV2\nZW50Q2xhc3MAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBl\ndmVudCBjbGFzcyBvZiB0aGUgZXZlbnQuIg1lbmQgTW91c2VXaXRoaW4AAADAAAQCBABA\nAUoAUwF4AAIAAAAAAAAABAAMAAAAEEV2ZW50SUQAAG9uIE1vdXNlV2l0aGluDWlmICBt\nZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0aGUgSUQgb2YgdGhpcyBldmVu\ndCBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgSUQgb2YgdGhpcyBl\ndmVudC4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NAADUAAUCBABVAFkAhQH7AAcAAAAA\nAAAABAAJAAAADEV2ZW50Q29tbWVudAAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIi\nIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEgY29tbWVudCBhYm91dCB0aGlzIGV2ZW50\nIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIGEgY29tbWVudCBhYm91dCB0\naGlzIGV2ZW50LiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0NDQAAAMoABgIFALMAQgDG\nARkAAgAAAAAAAAADAAwAAAAQRXZQYXJhbU5hbWUAAG9uIE1vdXNlV2l0aGluDWlmICBt\nZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciBhIHRoZSBuYW1lIGZvciB0aGlz\nIGV2ZW50IGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBuYW1lIG9m\nIHRoaXMgZXZlbnQuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluAADKAAcCBQCzAXsAxgGh\nAAIAAAAAAAEABAAMAAAAEAAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4N\nU2hvd0JhbGxvb24gIkVudGVyIGEga2V5d29yZCBpZCBmb3IgdGhlIHBhcmFtZXRlci4i\nDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGtleXdvcmQgaWQgZm9yIHRoZSBw\nYXJhbWV0ZXIuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQABKAAIAgQAswHTAMYB/QAC\nAAAAAAABAAQADAAAABAAAG9uIE1vdXNlV2l0aGluDWlmICBtZSBpcyAiIiB0aGVuDVNo\nb3dCYWxsb29uICJFbnRlciBhIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlci4iDWVs\nc2UNaWYgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiRW51bSIgdGhlbg1TaG93QmFsbG9v\nbiAiVGhlIHBhcmFtZXRlciBpcyBhbiBlbnVtZXJhdG9yLiINZWxzZQ1TaG93QmFsbG9v\nbiAiVGhlIGlzIHRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlci4iDWVuZCBpZg1l\nbmQgaWYNZW5kIE1vdXNlV2l0aGluDQ0AAADOAAkCBAD4AGQBUwH5AAcAAAAAAAAABAAJ\nAAAADAAAb24gTW91c2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24g\nIkVudGVyIGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgcGFyYW1ldGVyLiINZWxzZQ1TaG93\nQmFsbG9vbiAiVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgcGFyYW1ldGVy\nLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbgAAACoACgKEAS8ARwFWAfsABwAAAAAAAAAD\nAAwAAAAQcGFyYW1JbmZvAAAAANYACwEAAB8AYwAxAI+gAAAAAAAAAQAAAAwAAAAQU3Vp\ndGU6AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSBpZiB5b3Ug\nd2FudCB0byBnbyB0aGUgc3VpdGUiICYmIGZpZWxkICJzdWl0ZUNvZGUiDWVuZCBNb3Vz\nZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQganVtcCgic3VpdGUiICYmIGZpZWxkIHN1aXRl\nQ29kZSkgaW50byB2b2lkDWVuZCBtb3VzZVVwAAAiAA8CDQBCAB4AUwBaAAAAAAAA//8A\nFQAMAQAAEAAAAAAAIgARAgwAQgERAFIBSwAAAAAAAP//ABUADAEAABAAAAAAACIAEgIN\nAFQABQBkAFoAAAAAAAD//wAVAAwBAAAQAAAAAAAiABMCDACbAAIArABXAAAAAAAA//8A\nFQAMAQAAEAAAAAAAIgAUAg0AtQAEAMYAQwAAAAAAAP//ABUADAEAABAAAAAAACIAFQIN\nALUBLQDGAXwAAAAAAAD//wAVAAwBAAAQAAAAAAAiABcCDQD3AAsBCQBlAAAAAAAA//8A\nFQAMAQAAEAAAAAABNAAYAQAAtAGtAMUB06AAAAAAAAABABUADAEAABBUeXBlAABvbiBN\nb3VzZVdpdGhpbg1pZiBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJFbnVtIiB0aGVuDVNo\nb3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBlbnVtZXJhdGlvbiIgJiYg\nKGZpZWxkIGlkIDgpICYgIi4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNl\nVXANaWYgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZW51bSIgdGhlbg1ITVJlbW92ZUJh\nbGxvb24NZ28gY2FyZCAiZW51bWVyYXRpb24iICYmIChmaWVsZCBpZCA4KQ1lbmQgaWYN\nZW5kIG1vdXNlVXAAAADWABkBAADdAAYA8ABRgAUAAAAAAAEAAAAMAAAAEE9wdGlvbmFs\nAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiSW5kaWNhdGVzIHdoZXRoZXIgdGhp\ncyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgb3IgcmVxdWlyZWQuIg1lbmQgTW91c2VXaXRo\naW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUg\nb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAA3gAaAQAAygAGANwANYAFAAAAAAABAAAADAAA\nABBMaXN0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiSWYgdGhpcyBpcyBvbiwg\ndGhlbiB0aGUgcGFyYW1ldGVyIGlzIGEgbGlzdCBvZiIgwg0mJiBmaWVsZCBpZCA4ICYg\nIi4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdl\ndCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAA9gAbAQAAygBk\nANwAnoAFAAAAAAABAAAADAAAABBFbnVtAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiSWYgdGhpcyBpcyBvbiwgdGhlbiB0aGUgcGFyYW1ldGVyIGlzIGFuIGVudW1lcmF0\nZWQgd2l0aCBlbnVtZXJhdGlvbiBpZCIgwg0mJiBmaWVsZCBpZCA4ICYgIi4iDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3Qg\nKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAABQAAcAQAA3QBkAPAA0oAFAAAA\nAAABAAAADAAAABBSZXNlcnZlZAAAb24gTW91c2VXaXRoaW4NaWYgdGhlIHNob3J0IG5h\nbWUgb2YgbWUgaXMgIlJlc2VydmVkIiB0aGVuDVNob3dCYWxsb29uICJUaGlzIGlzIHJl\nc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZWxzZQ1TaG93QmFsbG9vbiAiSW5kaWNhdGVz\nIHdoZXRoZXIgdGhpcyBldmVudCBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGUgdGFyZ2V0\nLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9m\nIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAC2AB0B\nAADeAS8A7wFAAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxv\nb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRo\naW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUg\nb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAHgEAAN4BQADvAVEABQAAAAAAAQAAAAwA\nAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBm\nb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGls\naXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVw\nAAAAtgAfAQAA3gFRAO8BYgAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1v\ndXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAo\naGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAC2ACABAADeAWIA7wFzAAUAAAAA\nAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVz\nZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXAN\nc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQg\nbW91c2VVcAAAALYAIQEAAN4BcwDvAYQABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4i\nDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0\nbyBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAiAQAA3gGEAO8B\nlQAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlz\nIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBt\nb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdl\ndCkNZW5kIG1vdXNlVXAAAAC2ACMBAADeAZUA7wGmAAUAAAAAAAEAAAAMAAAAEAAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVy\nZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0\nYXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAJAEA\nAN4BpgDvAbcABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBv\nZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAlAQAA3gG3AO8ByAAFAAAAAAABAAAADAAA\nABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZv\nciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxp\ndGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAA\nAAD6ACYBAADeAcgA7wHZAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hv\nd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQsIGJ1dCBoZXJlIHdlIGFyZSB1c2luZyBp\ndCB0byBkZW5vdGUgdGhlIGRhdGEgdHlwZSBpbiBQYXNjYWwvQy4iDWVuZCBNb3VzZVdp\ndGhpbg0Nb24gbW91c2VEb3duDS0tc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90ICho\naWxpdGUgb2YgdGFyZ2V0KQ1DaG9vc2VQYXJhbVR5cGUNZW5kIG1vdXNlRG93bgAA+gAn\nAQAA3gHZAO8B6gAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxs\nb29uICJUaGlzIGlzIHJlc2VydmVkLCBidXQgaGVyZSB3ZSBhcmUgdXNpbmcgaXQgdG8g\nZGVub3RlIHRoZSBkYXRhIHR5cGUgaW4gUGFzY2FsL0MuIg1lbmQgTW91c2VXaXRoaW4N\nDW9uIG1vdXNlRG93bg0tLXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRl\nIG9mIHRhcmdldCkNQ2hvb3NlUGFyYW1UeXBlDWVuZCBtb3VzZURvd24AAPoAKAEAAN4B\n6gDvAfsABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAi\nVGhpcyBpcyByZXNlcnZlZCwgYnV0IGhlcmUgd2UgYXJlIHVzaW5nIGl0IHRvIGRlbm90\nZSB0aGUgZGF0YSB0eXBlIGluIFBhc2NhbC9DLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBt\nb3VzZURvd24NLS1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0\nYXJnZXQpDUNob29zZVBhcmFtVHlwZQ1lbmQgbW91c2VEb3duAAIOACkBAACYAM4ArAEE\noAIAAAAAAAEAAAAMAAAAEE5leHQgPgAAb24gTW91c2VXaXRoaW4NcHV0IGZpZWxkICJj\ndXJQYXJhbSIgaW50byBjdXJyZW50UGFyYW0NaWYgY3VycmVudFBhcmFtID0gMSB0aGVu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdldCB0aGUgZGlyZWN0IHBhcmFtZXRl\nci4iDWVsc2UgaWYgbGluZSAoY3VycmVudFBhcmFtKzEpIG9mIGJrZ25kIGZpZWxkIGlk\nIDEwIDw+ICIiIHRoZW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ2V0IHRoZSBu\nZXh0IHBhcmFtZXRlci4iDWVsc2UNU2hvd0JhbGxvb24gIlRoZXJlIGlzIG5vIG5leHQg\ncGFyYW1ldGVyLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQg\nZmllbGQgY3VyUGFyYW0gaW50byBjdXJyZW50UGFyYW0NaWYgbGluZSAoY3VycmVudFBh\ncmFtKzEpIG9mIGJrZ25kIGZpZWxkIGlkIDEwIDw+ICIiIHRoZW4NU2F2ZVBhcmFtDVNo\nb3dQYXJhbSBjdXJyZW50UGFyYW0rMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVw\nAAACPAAqAQAAmACVAKwAy6ACAAAAAAABAAAADAAAABA8IFByZXYAAG9uIE1vdXNlV2l0\naGluDXB1dCBmaWVsZCAiY3VyUGFyYW0iIGludG8gY3VycmVudFBhcmFtDWlmIGN1cnJl\nbnRQYXJhbSA9IDEgdGhlbg1TaG93QmFsbG9vbiAiVGhlcmUgaXMgbm8gcHJldmlvdXMg\ncGFyYW1ldGVyLiINZWxzZSBpZiBjdXJyZW50UGFyYW0gPSAyIHRoZW4NU2hvd0JhbGxv\nb24gIkNsaWNrIGhlcmUgdG8gZ2V0IHRoZSByZXN1bHQgcGFyYW1ldGVyLiINZWxzZSBp\nZiBjdXJyZW50UGFyYW0gPSAzIHRoZW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8g\nZ2V0IHRoZSBkaXJlY3QgcGFyYW1ldGVyLiINZWxzZQ1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBnZXQgdGhlIHByZXZpb3VzIHBhcmFtZXRlci4iDWVuZCBpZg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJy\nZW50UGFyYW0NaWYgY3VycmVudFBhcmFtID4gMSB0aGVuDVNhdmVQYXJhbQ1TaG93UGFy\nYW0gY3VycmVudFBhcmFtLTENSE1SZW1vdmVCYWxsb29uDWVsc2UNYmVlcA1lbmQgaWYN\nZW5kIG1vdXNlVXAAAAEyACsBAACYAFcArACNoAQAAAAAAAEAAAAMAAAAEE5ldwAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gYWRkIGEgbmV3IHBh\ncmFtZXRlci4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgZmllbGQgImN1\nclBhcmFtIiBpbnRvIGN1cnJlbnRQYXJhbQ1TYXZlUGFyYW0NcHV0IDEgKyBudW1iZXIg\nb2YgbGluZXMgb2YgYmtnbmQgZmllbGQgaWQgMTAgaW50byBuDXB1dCAiLD8/Pz8sPz8/\nPywwLCIgaW50byBsaW5lIG4gb2YgYmtnbmQgZmllbGQgaWQgMTANU2hvd1BhcmFtIG4N\nZW5kIG1vdXNlVXAAAALAACwBAACYAVoArAGQoAQAAAAAAAEAAAAMAAAAEERlbGV0ZQAA\nb24gTW91c2VXaXRoaW4NcHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJyZW50UGFy\nYW0NaWYgY3VycmVudFBhcmFtIDw9IDIgdGhlbg1TaG93QmFsbG9vbiAiVG8gZGVsZXRl\nIHRoZSBkaXJlY3QvcmVzdWx0IHBhcmFtZXRlciwgY2hhbmdlIGRhdGEgdHlwZSB0byBu\ndWxsIHJhdGhlciB0aGFuIGNsaWNraW5nIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJD\nbGljayBoZXJlIHRvIGRlbGV0ZSB0aGlzIHBhcmFtZXRlci4iDWVuZCBpZg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANYW5zd2VyICJEZWxldGUgdGhpcyBwYXJhbWV0ZXI/\nIiB3aXRoICJPSyIgb3IgIkNhbmNlbCINaWYgaXQgaXMgIkNhbmNlbCIgdGhlbiBleGl0\nIG1vdXNlVXANcHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJyZW50UGFyYW0NaWYg\nY3VycmVudFBhcmFtID4gMiB0aGVuDWRlbGV0ZSBsaW5lIGN1cnJlbnRQYXJhbSBvZiBi\na2duZCBmaWVsZCBpZCAxMA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGJrZ25kIGZpZWxk\nIGlkIDEwIGludG8gbg1pZiBjdXJyZW50UGFyYW0gPiBuIHRoZW4Nc3VidHJhY3QgMSBm\ncm9tIGN1cnJlbnRQYXJhbQ1lbmQgaWYNU2hvd1BhcmFtIGN1cnJlbnRQYXJhbQ1lbHNl\nDXB1dCAibnVsbCIgaW50byBia2duZCBmaWVsZCBpZCA4DWVuZCBpZg1lbmQgbW91c2VV\ncAAAAVIALQEAAJgBHACsAVKgBAAAAAAAAQAAAAwAAAAQSW5zZXJ0AABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiQWRkIGEgbmV3IHBhcmFtZXRlciBhZnRlciB0aGlzIG9u\nZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgZmllbGQgImN1clBhcmFt\nIiBpbnRvIGN1cnJlbnRQYXJhbQ1pZiBjdXJyZW50UGFyYW0gPSAxIHRoZW4NcHV0IDIg\naW50byBjdXJyZW50UGFyYW0NZW5kIGlmDXB1dCByZXR1cm4gJiAiLD8/Pz8sPz8/Pyww\nLCIgYWZ0ZXIgbGluZSBjdXJyZW50UGFyYW0gb2YgYmtnbmQgZmllbGQgaWQgMTANU2hv\nd1BhcmFtIGN1cnJlbnRQYXJhbSsxDWVuZCBtb3VzZVVwAAAB6gAuAQAAcQACAIUAWKAE\nAAAAAAABAAAADAAAABBIaWRlIHNjcmlwdAAAb24gTW91c2VXaXRoaW4NaWYgdGhlIHNo\nb3J0IG5hbWUgb2YgbWUgaXMgIlNob3cgU2NyaXB0IiB0aGVuDVNob3dCYWxsb29uICJT\naG93IHRoZSBzY3JpcHQgZm9yIHRoaXMgZXZlbnQuIg1lbHNlDVNob3dCYWxsb29uICJI\naWRlIHRoZSBzY3JpcHQgZm9yIHRoaXMgZXZlbnQuIg1lbmQgaWYNZW5kIE1vdXNlV2l0\naGluDQ1vbiBtb3VzZVVwDWlmIHRoZSBzaG9ydCBuYW1lIG9mIG1lIGlzICJTaG93IFNj\ncmlwdCIgdGhlbg1TYXZlUGFyYW0NSE1SZW1vdmVCYWxsb29uDXNob3cgZmllbGQgInNj\ncmlwdFRlbXBsYXRlIg1zZXQgdGhlIG5hbWUgb2YgbWUgdG8gIkhpZGUgU2NyaXB0Ig1l\nbHNlDUhNUmVtb3ZlQmFsbG9vbg1TaG93UGFyYW0gMQ1oaWRlIGZpZWxkICJzY3JpcHRU\nZW1wbGF0ZSINc2V0IHRoZSBuYW1lIG9mIG1lIHRvICJTaG93IFNjcmlwdCINZW5kIGlm\nDWVuZCBtb3VzZVVwDQAAAo4AMAIFAIcAAQFTAfsABwAAAAAAAAADAAwAAAAQc2NyaXB0\nVGVtcGxhdGUAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBp\nbnRlcmZhY2UgdG8gdGhlIGV2ZW50IGluIHlvdXIgcHJlZmVyZWQiIMINJiYgImxhbmd1\nYWdlLiBUbyBlZGl0IGEgcGFyYW1ldGVyIGNsaWNrIG9uIHRoZSBwYXJhbWV0ZXIuIg1l\nbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNldXANSE1SZW1vdmVCYWxsb29uDWdsb2JhbCBj\nbGllbnRMYW5nDWlmIG1lID0gIiIgdGhlbg1wdXQgMiBpbnRvIGluZGV4DWVsc2UNcHV0\nIHdvcmQgMiBvZiB0aGUgY2xpY2tMaW5lIGludG8gaW5kZXgNcHV0IGZpZWxkICJwYXJh\nbUluZm8iIGludG8geA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHggaW50byBuDWlmIChp\nbmRleCA+IDEpIGFuZCAoaXRlbSAzIG9mIGxpbmUgMiBvZiB4ID0gIm51bGwiKSB0aGVu\nIGFkZCAxIHRvIGluZGV4DWlmIGluZGV4ID4gbiB0aGVuIHB1dCBuIGludG8gaW5kZXgN\nZW5kIGlmDWlmIHRoZXJlIGlzIGEgYmcgYnRuICJIaWRlIFNjcmlwdCIgdGhlbiBzZXQg\ndGhlIG5hbWUgb2YgYmcgYnRuICJIaWRlIFNjcmlwdCIgdG8gIlNob3cgU2NyaXB0Ig1o\naWRlIGZpZWxkICJzY3JpcHRUZW1wbGF0ZSINU2hvd1BhcmFtIGluZGV4DWVuZCBtb3Vz\nZXVwDQ0AACoAMQKVAUQAAQFVABgAAgAAAAAAAAADAAwAAAAQY3VyUGFyYW0AAAAAACIA\nMgINABkAAAA0AF4AAAAAAAAAAAAVABgIAAAgAAAAAAFqADQBAAA6AbQAUgHSIAAAAAP2\nAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUg\ndG8gZ28gdG8gdGhlIHByZXZpb3VzIGV2ZW50IGluIHRoaXMgc3VpdGUuIg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANZ2V0IHRoZXJlIGlzIGEgY2FyZCAyIG9mIHRoaXMg\nYmtnbmQNaWYgbm90IGl0IHRoZW4gZXhpdCBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFt\nZSBvZiBjYXJkIDIgb2YgdGhpcyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUg\nb2YgdGhpcyBjYXJkIDw+IHggdGhlbg12aXN1YWwgd2lwZSByaWdodA1nbyBwcmV2IGNh\ncmQgb2YgdGhpcyBia2duZA1lbmQgaWYNZW5kIG1vdXNlVXAAASgANQEAADoB1QBSAfMg\nAAAAA/UAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBnbyB0byB0aGUgbmV4dCBldmVudCBpbiB0aGlzIHN1aXRlLiINZW5kIE1v\ndXNlV2l0aGluDQ1vbiBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBsYXN0IGNh\ncmQgb2YgdGhpcyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBj\nYXJkIDw+IHggdGhlbg12aXN1YWwgd2lwZSBsZWZ0DWdvIG5leHQgY2FyZCBvZiB0aGlz\nIGJrZ25kDWVuZCBpZg1lbmQgbW91c2VVcAACtgA3AQAAHQE+ADMBopAFAAAAAAABAAAA\nDAAAABBmcm9tIEFFVVQAAG9uIE1vdXNlV2l0aGluDWlmIGhpbGl0ZSBvZiBtZSB0aGVu\nDVNob3dCYWxsb29uICJUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBldmVudCBjb21l\ncyBmcm9tIHRoZSBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgeW91IG1vZGlmeSB0aGUg\nZXZlbnQsIHlvdSBzaG91bGQgY2xpY2sgaGVyZSBzbyB0aGF0IHRoZSBldmVudCIgwg0m\nJiAiZ29lcyB0byB0aGUgYWV0ZSByZXNvdXJjZS4iDWVsc2UNU2hvd0JhbGxvb24gIlRo\naXMgc2hvd3MgdGhlIGV2ZW50IGNvbWVzIGZyb20gdGhlIGFldGUgcmVzb3VyY2UuIiDC\nDSYmICJUaGVyZSBpcyBubyByZWFzb24gdG8gbWFyayBpdCBhcyBjb21pbmcgZnJvbSB0\naGUgYWV1dCByZXNvdXJjZS4iIMINJiYgIklmIHlvdSBpbnNpc3Qgb24gY2hhbmdpbmcg\naXQsIGNsaWNrIGhlcmUgd2l0aCBvcHRpb24ga2V5IGRvd24uIiDCDSYmICJJdCB3aWxs\nIG5vdCBiZSB3cml0dGVuIHRvIHRoZSBhZXRlIHJlc291cmNlLiINZW5kIGlmDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgaGlsaXRlIG9mIHRhcmdldCBpbnRvIGN1\nclN0YXRlDWlmIGN1clN0YXRlIG9yICh0aGUgb3B0aW9uS2V5IGlzIGRvd24pIHRoZW4N\nc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IGN1clN0YXRlDWVuZCBpZg1lbmQgbW91\nc2VVcA0AACgAOQEAAB8A0gAxAP6AAAAAAAAAAQAAAAwAAAAQQ2xhc3M6AAAAAAD4ADsB\nAAARAcEAOAHooAAAABpAAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhlIGNhcmQgeW91IGxh\nc3QgdmlzaXRlZCLCDSYmInRoaXMgc2Vzc2lvbi4iDWVuZCBNb3VzZVdpdGhpbg0Nb24g\nbW91c2VVcA1nbG9iYWwgZ1doZXJlZnJvbQ1ITVJlbW92ZUJhbGxvb24NdmlzdWFsIGRp\nc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQgbW91c2VVcA0ABcwAPQGAAHEAEQCF\nAEugBAAAAAAAAQAAAAwAAAAQU2VuZCBpdAAAb24gTW91c2VXaXRoaW4NU2hvd1BzdHJC\nYWxsb29uICJUaGlzIHdpbGwgcHJvYmFibHkgYmUgcmVtb3ZlZCBpbiB0aGUgZmluYWwg\ndmVyc2lvbi4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1wdXQgUmVzVHlwZShm\naWVsZCAiZXZlbnRDbGFzcyIpICYgUmVzVHlwZShmaWVsZCAiZXZlbnRJRCIpIGludG8g\nZXZlbnRJRA1wdXQgKGZpZWxkICJldmVudE5hbWUiKSAmICIsIiAmIGV2ZW50SUQgaW50\nbyBldmVudE5hbWUNcHV0IGZpZWxkICJwYXJhbUluZm8iIGludG8gcGFyYW1JbmZvDWRl\nbGV0ZSBsaW5lIDEgb2YgcGFyYW1JbmZvDXB1dCAiLS0tLSIgaW50byBpdGVtIDIgb2Yg\ncGFyYW1JbmZvDXB1dCBldmVudElEIGludG8gaXRlbSAxIG9mIHBhcmFtSW5mbw1zZXQg\nbG9ja3NjcmVlbiB0byB0cnVlIC0tIHNvIHdlIGNhbiBzZWUgdGhlIGZpZWxkIGxhdGVy\nDWdvIGNhcmQgIlNlbmRBRSINaWYgdGhlIHJlc3VsdCA9ICIiIHRoZW4NcHV0IHdvcmQg\nMSBvZiBzaG9ydCBuYW1lIG9mIGNhcmQgYnV0dG9uIGlkIDQxICYgc3BhY2UgYmVmb3Jl\nIGV2ZW50TmFtZQ1zZXQgbmFtZSBvZiBjYXJkIGJ1dHRvbiBpZCA0MSB0byBldmVudE5h\nbWUNcHV0IHBhcmFtSW5mbyBpbnRvIGNhcmQgZmllbGQgInBhcmFtSW5mbyINcHV0IDEg\naW50byBjdXJGaWVsZA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRv\nIHBhcmFtQ291bnQNcmVwZWF0IHdpdGggcGFyYW1JbmRleCA9IDEgdG8gcGFyYW1Db3Vu\ndA1pZiAocGFyYW1JbmRleCA9IDEpIHRoZW4NaWYgKGl0ZW0gMyBvZiBsaW5lIDEgb2Yg\ncGFyYW1JbmZvIDw+ICJudWxsIikgdGhlbg1pZiAoaXRlbSA0IG9mIGxpbmUgMSBvZiBw\nYXJhbUluZm8pID4gMzI2MzcgdGhlbg1wdXQgIltkaXJlY3QgcGFyYW1ldGVyXSIgaW50\nbyBjYXJkIGZpZWxkIGlkIDENZWxzZQ1wdXQgImRpcmVjdCBwYXJhbWV0ZXIiIGludG8g\nY2FyZCBmaWVsZCBpZCAxDWVuZCBpZg1hZGQgMSB0byBjdXJGaWVsZA1lbmQgaWYNZWxz\nZQ1wdXQgbGluZSBwYXJhbUluZGV4IG9mIHBhcmFtSW5mbyBpbnRvIHgNaWYgKGl0ZW0g\nNCBvZiB4KSA+IDMyNjM3IHRoZW4NcHV0ICJbIiAmIChpdGVtIDEgb2YgeCkgJiAiXSIg\naW50byBjYXJkIGZpZWxkIGlkIGN1ckZpZWxkDWVsc2UNcHV0IGl0ZW0gMSBvZiB4IGlu\ndG8gY2FyZCBmaWVsZCBpZCBjdXJGaWVsZA1lbmQgaWYNYWRkIDEgdG8gY3VyRmllbGQN\nZW5kIGlmDWVuZCByZXBlYXQNcmVwZWF0IHdpdGggaSA9IDEgdG8gY3VyRmllbGQNc2hv\ndyBjYXJkIGZpZWxkIGlkIGkNcHV0ICIiIGludG8gY2FyZCBmaWVsZCBpZCAoaSsyMCkN\nc2hvdyBjYXJkIGZpZWxkIGlkIChpKzIwKQ1lbmQgcmVwZWF0DXJlcGVhdCB3aXRoIGkg\nPSBjdXJGaWVsZCB0byAyMA1oaWRlIGNhcmQgZmllbGQgaWQgaQ1oaWRlIGNhcmQgZmll\nbGQgaWQgKGkrMjApDWVuZCByZXBlYXQNZW5kIGlmDWVuZCBtb3VzZVVwAAAA+AA+AYAA\ncQABAIUAV6AEAAAAAAABAAAADAAAABBTaG93IFNjcmlwdAAAb24gTW91c2VXaXRoaW4N\nU2hvd0JhbGxvb24gIkhpZGUgdGhlIHNjcmlwdCBmb3IgdGhpcyBldmVudC4iDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA0tLSBTYXZlUGFyYW0NSE1SZW1vdmVCYWxsb29u\nDVNob3dQYXJhbSAxDWhpZGUgZmllbGQgInNjcmlwdFRlbXBsYXRlIg1zaG93IGJnIGJ0\nbiAiU2hvdyBTY3JpcHQiDWhpZGUgbWUNZW5kIG1vdXNlVXANAAAPAAYARXZlbnQAEQAD\nAElEAAASAAwARGVzY3JpcHRpb24AFwAMAERlc2NyaXB0aW9uABMACwBQYXJhbWV0ZXJz\nAAAUAAUATmFtZQAAFQAIAEtleXdvcmQAMgAHAEV2ZW50cwBldmVudHMAb24gb3BlbmNh\ncmQNZ2xvYmFsIGluRWRpdA1pZiBpbkVkaXQgdGhlbg1nbG9iYWwgY3VycmVudFN1aXRl\nLGN1cnJlbnROYW1lDVB1dCBmaWVsZCAic3VpdGVDb2RlIiBpbnRvIGN1cnJlbnRTdWl0\nZQ1wdXQgZmllbGQgImV2ZW50TmFtZSIgaW50byBjdXJyZW50TmFtZQ1pZiBmaWVsZCAi\nZXZlbnROYW1lIiA9ICIiIHRoZW4gLS0gZXZlbnQgbm90IHlldCBkZWZpbmVkDWhpZGUg\nZmllbGQgInNjcmlwdFRlbXBsYXRlIg1zZXQgdGhlIG5hbWUgb2YgYmcgYnV0dG9uIGlk\nIDQ2IHRvICJTaG93IHNjcmlwdCINU2hvd1BhcmFtIDENZWxzZQ1zaG93IGZpZWxkICJz\nY3JpcHRUZW1wbGF0ZSINc2V0IHRoZSBuYW1lIG9mIGJnIGJ1dHRvbiBpZCA0NiB0byAi\nSGlkZSBzY3JpcHQiDWVuZCBpZg1lbmQgaWYNUGFzcyBvcGVuY2FyZA1lbmQgb3BlbmNh\ncmQNDW9uIGNsb3NlY2FyZA1nbG9iYWwgaW5FZGl0DWlmIGZsZCBFdlBhcmFtTmFtZSBp\ncyBlbXB0eSB0aGVuDXB1dCAibWlzc2luZ05hbWUiJiIoIiZyYW5kb20oNTAwKSYiKSIg\naW50byBmbGQgRXZQYXJhbU5hbWUNZW5kIGlmDWlmIGluRWRpdCB0aGVuDWlmIGZpZWxk\nICJzdWl0ZUNvZGUiIDw+ICIqKioqIiB0aGVuDWdsb2JhbCBjdXJyZW50U3VpdGUsY3Vy\ncmVudE5hbWUNaWYgY3VycmVudFN1aXRlIDw+IGZpZWxkICJzdWl0ZUNvZGUiIHRoZW4N\ncHV0ICJzdWl0ZSIgJiYgZmllbGQgInN1aXRlQ29kZSIgaW50byBzdWl0ZU5hbWUNaWYg\nbm90ICh0aGVyZSBpcyBhIGNhcmQgc3VpdGVOYW1lKSB0aGVuDXB1dCBjdXJyZW50U3Vp\ndGUgaW50byBmaWVsZCAic3VpdGVDb2RlIg1hbnN3ZXIgc3VpdGVOYW1lICYgImRvZXMg\nbm90IGV4aXN0IGFuZCB3aWxsIG5vdCBiZSB1c2VkIg1lbmQgaWYNZW5kIGlmDWlmIG5v\ndCB0aGUgdmlzaWJsZSBvZiBmaWVsZCAic2NyaXB0VGVtcGxhdGUiIHRoZW4NU2F2ZVBh\ncmFtDXNob3cgZmllbGQgInNjcmlwdFRlbXBsYXRlIg1pZiB0aGVyZSBpcyBhIGJnIGJ0\nbiAic2hvdyBzY3JpcHQiIHRoZW4Nc2V0IHRoZSBuYW1lIG9mIGJnIGJ0biAic2hvdyBz\nY3JpcHQiIHRvICJIaWRlIHNjcmlwdCINZW5kIGlmDWVuZCBpZg1wdXQgY3VycmVudFN1\naXRlICYmIChzaG9ydCBuYW1lIG9mIHRoaXMgY2FyZCkgJiAiLCIgJiBjdXJyZW50TmFt\nZSBpbnRvIG9sZE5hbWUNcHV0IGZpZWxkICJzdWl0ZUNvZGUiICYmICJldmVudCIgJiYg\nUmVzVHlwZShmaWVsZCAiZXZlbnRDbGFzcyIpIMINJiBSZXNUeXBlKGZpZWxkICJldmVu\ndElEIikgJiAiLCIgJiBmaWVsZCAiZXZlbnROYW1lIiBpbnRvIG5ld05hbWUNaWYgbmV3\nTmFtZSA8PiBvbGROYW1lIHRoZW4NTmFtZUl0IG5ld05hbWUNQ2hhbmdlTmFtZSBvbGRO\nYW1lLCBuZXdOYW1lLCAiZXZlbnRMaXN0Ig1lbmQgaWYNUHV0IGZpZWxkICJzdWl0ZUNv\nZGUiIGludG8gY3VycmVudFN1aXRlDWVuZCBpZg1QYXNzIGNsb3NlY2FyZA1lbmQgaWYN\nZW5kIGNsb3NlY2FyZA0Nb24gbmV3Y2FyZA1nbG9iYWwgY3VycmVudFN1aXRlDXB1dCBj\ndXJyZW50U3VpdGUgaW50byBmaWVsZCBzdWl0ZUNvZGUNaWYgY3VycmVudFN1aXRlID0g\nImNvcmUiIHRoZW4NcHV0ICJhZXZ0IiBpbnRvIGZpZWxkIGV2ZW50Q2xhc3MNZWxzZQ1w\ndXQgY3VycmVudFN1aXRlIGludG8gZmllbGQgZXZlbnRDbGFzcw1lbmQgaWYNcHV0ICIs\nLG51bGwsMCwiIGludG8gbGluZSAxIG9mIGZpZWxkIGlkIDEwDXB1dCAiLCxudWxsLDAs\nIiBpbnRvIGxpbmUgMiBvZiBmaWVsZCBpZCAxMA1QYXNzIG5ld2NhcmQNZW5kIG5ld2Nh\ncmQNDW9uIGRlbGV0ZWNhcmQNQ2hhbmdlTmFtZSBmaWVsZCAic3VpdGVDb2RlIiAmJiBz\naG9ydCBuYW1lIG9mIHRoaXMgY2FyZCAmICIsIiAgJiBmaWVsZCAiZXZlbnROYW1lIiwg\nwg0iIiwgImV2ZW50TGlzdCINcGFzcyBkZWxldGVjYXJkDWVuZCBkZWxldGVjYXJkDQ1v\nbiBTaG93UGFyYW0gbg1wdXQgbiBpbnRvIGZpZWxkIGN1clBhcmFtDXB1dCBsaW5lIG4g\nb2YgZmllbGQgaWQgMTAgaW50byB4DXB1dCBpdGVtIDMgb2YgeCBpbnRvIGZpZWxkIGlk\nIDgNUmFkaW9BcnJheSBpdGVtIDQgb2YgeA1pZiBuIDwgMyB0aGVuDWlmIG4gPSAyIHRo\nZW4NcHV0ICJkaXJlY3Qgb2JqZWN0IiBpbnRvIGZpZWxkIGlkIDYNcHV0ICItLS0tIiBp\nbnRvIGZpZWxkIGlkIDcNc2V0IG5hbWUgb2YgYmcgYnV0dG9uIGlkIDI4IHRvICJDaGFu\nZ2UgU3RhdGUiDWVsc2UNcHV0ICJyZXBseSIgaW50byBmaWVsZCBpZCA2DXB1dCAicnBs\neSIgaW50byBmaWVsZCBpZCA3DXNldCBuYW1lIG9mIGJnIGJ1dHRvbiBpZCAyOCB0byAi\nUmVzZXJ2ZWQiDWVuZCBpZg1zZXQgbG9ja3RleHQgb2YgZmllbGQgaWQgNiB0byB0cnVl\nDXNldCBsb2NrdGV4dCBvZiBmaWVsZCBpZCA3IHRvIHRydWUNZWxzZQ1zZXQgbmFtZSBv\nZiBiZyBidXR0b24gaWQgMjggdG8gIlJlc2VydmVkIg1wdXQgaXRlbSAxIG9mIHggaW50\nbyBmaWVsZCBpZCA2DXB1dCBpdGVtIDIgb2YgeCBpbnRvIGZpZWxkIGlkIDcNc2V0IGxv\nY2t0ZXh0IG9mIGZpZWxkIGlkIDYgdG8gZmFsc2UNc2V0IGxvY2t0ZXh0IG9mIGZpZWxk\nIGlkIDcgdG8gZmFsc2UNZW5kIGlmDWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4DXB1dCB4\nIGludG8gYmtnbmQgZmllbGQgaWQgOQ1lbmQgU2hvd1BhcmFtDQ1vbiBTYXZlUGFyYW0N\ncHV0IGZpZWxkICJjdXJQYXJhbSIgaW50byBjdXJyZW50UGFyYW0NcHV0IGxpbmUgY3Vy\ncmVudFBhcmFtIG9mIGJrZ25kIGZpZWxkIGlkIDEwIGludG8gb2xkVmFsdWUNaWYgY3Vy\ncmVudFBhcmFtIDwgMyB0aGVuDXB1dCAiIiBpbnRvIGl0ZW0gMSBvZiB4DXB1dCAiIiBp\nbnRvIGl0ZW0gMiBvZiB4DWVsc2UNcHV0IGZpZWxkIGlkIDYgaW50byBpdGVtIDEgb2Yg\neA1wdXQgZmllbGQgaWQgNyBpbnRvIGl0ZW0gMiBvZiB4DWVuZCBpZg1wdXQgZmllbGQg\naWQgOCBpbnRvIGl0ZW0gMyBvZiB4DXB1dCAwIGludG8gbg1yZXBlYXQgd2l0aCBpID0g\nMjUgdG8gNDANbXVsdGlwbHkgbiBieSAyDWlmIGhpbGl0ZSBvZiBia2duZCBidXR0b24g\naWQgaSB0aGVuDWFkZCAxIHRvIG4NZW5kIGlmDWVuZCByZXBlYXQNcHV0IG4gaW50byBp\ndGVtIDQgb2YgeA1wdXQgYmtnbmQgZmllbGQgaWQgOSBpbnRvIHkNLS0gd2UgbXVzdCBy\nZW1vdmUgYWxsIGNhcnJpYWdlIHJldHVybiBmcm9tIHRoZSBjb21tYSBmaWVsZA1yZXBl\nYXQgdW50aWwgaSA9IDANcHV0IG9mZnNldChyZXR1cm4sIHkpIGludG8gaQ1pZiBpID4g\nMCB0aGVuIHB1dCBzcGFjZSBpbnRvIGNoYXIgaSBvZiB5DWVuZCByZXBlYXQNcHV0IHgg\nJiAiLCIgJiB5IGludG8gbmV3VmFsdWUNaWYgKG9sZFZhbHVlIDw+IG5ld1ZhbHVlKSBv\nciAoZmllbGQgInNjcmlwdFRlbXBsYXRlIiA9ICIiKSB0aGVuDXB1dCBuZXdWYWx1ZSBp\nbnRvIGxpbmUgY3VycmVudFBhcmFtIG9mIGJrZ25kIGZpZWxkIGlkIDEwDU1ha2VTY3Jp\ncHRUZW1wbGF0ZQ1lbmQgaWYNZW5kIFNhdmVQYXJhbQ0Nb24gTWFrZVNjcmlwdFRlbXBs\nYXRlDXB1dCBDbGllbnRUZW1wbGF0ZSgibXVsdGlMaW5lIikgaW50byBmaWVsZCAic2Ny\naXB0VGVtcGxhdGUiDWVuZCBNYWtlU2NyaXB0VGVtcGxhdGUNDW9uIFJhZGlvQXJyYXkg\nbg1yZXBlYXQgd2l0aCBpID0gMSB0byAxNg1pZiAobiBtb2QgMikgPSAxIHRoZW4Nc2V0\nIGhpbGl0ZSBvZiBia2duZCBidXR0b24gaWQgKDQxLWkpIHRvIHRydWUNZWxzZQ1zZXQg\naGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiBpZCAoNDEtaSkgdG8gZmFsc2UNZW5kIGlmDXB1\ndCBuIGRpdiAyIGludG8gbg1lbmQgcmVwZWF0DWVuZCBSYWRpb0FycmF5DQ1vbiBHdWVz\nc1BhcmFtVHlwZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3aGljaCBw\nYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgZmllbGQgInBhcmFtSW5mbyIgaW50\nbyBwYXJhbUluZm8NcHV0IG51bWJlciBvZiBsaW5lcyBpbiBwYXJhbUluZm8gaW50byBu\nDXJlcGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXB1dCBsaW5lIGluZGV4IG9mIHBhcmFt\nSW5mbyBpbnRvIHkNcHV0IGl0ZW0gMyBvZiB5IGludG8gZGF0YVR5cGUNaWYgKGRhdGFU\neXBlIDw+ICJudWxsIikgdGhlbg1wdXQgaXRlbSA0IG9mIHkgaW50byB0ZW1wDXB1dCBp\ndGVtIDMgb2YgeSBpbnRvIGRhdGFUeXBlDWlmIHRlbXAgPiAzMjc2NyB0aGVuDXN1YnRy\nYWN0IDMyNzY4IGZyb20gdGVtcA1lbmQgaWYNaWYgdGVtcCA+IDE2MzgzIHRoZW4NcHV0\nICJsaXN0IiBpbnRvIGRhdGFUeXBlDWVsc2UgaWYgdGVtcCA+IDgxOTEgdGhlbg1wdXQg\nImVudW0iIGludG8gZGF0YVR5cGUNZW5kIGlmDXB1dCAwIGludG8gcGFyYW1UeXBlDWlm\nIGRhdGFUeXBlID0gIlRFWFQiIHRoZW4NcHV0IDYgaW50byBwYXJhbVR5cGUNZWxzZSBp\nZiAoZGF0YVR5cGUgPSAiZW51bSIpIG9yIChkYXRhVHlwZSA9ICJib29sIikgb3IgKGRh\ndGFUeXBlID0gInRydWUiKSBvciAoZGF0YVR5cGUgPSAibG9uZyIpIHRoZW4NcHV0IDQg\naW50byBwYXJhbVR5cGUNZW5kIGlmDXB1dCBpdGVtIDQgb2YgeSBpbnRvIHRlbXANcHV0\nIHRlbXAgLSAodGVtcCBtb2QgOCkgKyBwYXJhbVR5cGUgaW50byBpdGVtIDQgb2YgeQ1w\ndXQgeSBpbnRvIGxpbmUgaW5kZXggb2YgcGFyYW1JbmZvDWVuZCBpZg1lbmQgcmVwZWF0\nDXB1dCBwYXJhbUluZm8gaW50byBmaWVsZCAicGFyYW1JbmZvIg1lbmQgR3Vlc3NQYXJh\nbVR5cGUNDWZ1bmN0aW9uIEdsdWVJbmZvIHBhcmFtSW5mbw1wdXQgIi0tLS0iIGludG8g\nZGFzaA1wdXQgInRoZVJlc3VsdCIgaW50byBpdGVtIDEgb2YgcGFyYW1JbmZvDXB1dCBk\nYXNoIGludG8gaXRlbSAyIG9mIHBhcmFtSW5mbw1wdXQgImRpcmVjdFBhcmFtIiBpbnRv\nIGl0ZW0gMSBvZiBsaW5lIDIgb2YgcGFyYW1JbmZvDXB1dCAiLS0tLSIgaW50byBpdGVt\nIDIgb2YgbGluZSAyIG9mIHBhcmFtSW5mbw1wdXQgbnVtYmVyIG9mIGxpbmVzIG9mIHBh\ncmFtSW5mbyBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1zZXQgY3Vyc29yIHRv\nIGJ1c3kNcHV0IGxpbmUgaSBvZiBwYXJhbUluZm8gaW50byB4DXB1dCBpdGVtIDQgb2Yg\neCBpbnRvIHRlbXANcHV0IHRlbXAgbW9kIDggaW50byBwYXJhbVR5cGUNcHV0IGl0ZW0g\nMyBvZiB4IGludG8gZGF0YVR5cGUNaWYgdGVtcCA+IDMyNzY3IHRoZW4NcHV0ICIsbyIg\nYWZ0ZXIgaXRlbSA0IG9mIHgNcHV0IHRydWUgaW50byBpc09wdGlvbmFsDXN1YnRyYWN0\nIDMyNzY4IGZyb20gdGVtcA1lbHNlDXB1dCAiLHIiIGFmdGVyIGl0ZW0gNCBvZiB4DXB1\ndCBmYWxzZSBpbnRvIGlzT3B0aW9uYWwNZW5kIGlmDWlmIHRlbXAgPiAxNjM4MyB0aGVu\nDXB1dCAibGlzdCIgaW50byBkYXRhVHlwZQ1lbHNlIGlmIHRlbXAgPiA4MTkxIHRoZW4N\ncHV0ICJlbnVtIiBpbnRvIGRhdGFUeXBlDWVuZCBpZg1pZiAoZGF0YVR5cGUgPSAib2Jq\nIikgb3IgKGRhdGFUeXBlID0gImxpc3QiKSBvciAoZGF0YVR5cGUgPSAiKioqKiIpIHRo\nZW4NaWYgcGFyYW1UeXBlIDw+IDIgdGhlbg1wdXQgMCBpbnRvIHBhcmFtVHlwZQ1lbmQg\naWYNZW5kIGlmDWlmIChwYXJhbVR5cGUgPSA2KSB0aGVuDWlmIGRhdGFUeXBlIDw+ICJU\nRVhUIiB0aGVuDXB1dCAwIGludG8gcGFyYW1UeXBlDWVuZCBpZg1lbHNlIGlmIChwYXJh\nbVR5cGUgPSA1KSBvciAocGFyYW1UeXBlID0gNykgdGhlbg1pZiBpID0gMSB0aGVuIHB1\ndCAwIGludG8gcGFyYW1UeXBlDWVuZCBpZg1pZiBpdGVtIDIgb2YgeCA9IGRhc2ggdGhl\nbg1wdXQgImtleURpcmVjdE9iamVjdCIgaW50byBpdGVtIDIgb2YgeA1lbHNlDS0tIHB1\ndCAia2V5QUUiICYgU3RyaXBTUChpdGVtIDEgb2YgeCkgaW50byBpdGVtIDIgb2YgeA1w\ndXQgIiciICYgUmVzVHlwZShpdGVtIDIgb2YgeCkgJiAiJyIgaW50byBpdGVtIDIgb2Yg\neA1lbmQgaWYNcHV0IFN0cmlwU1AoaXRlbSAxIG9mIHgsIHRydWUpIGludG8gaXRlbSAx\nIG9mIHgNcHV0ICJwdHJUbyIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBpbnRvIGl0ZW0g\nNiBvZiB4DWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgInNpemVPZiIgJiBTdHJpcFNQ\nKGl0ZW0gMSBvZiB4KSBpbnRvIGl0ZW0gNyBvZiB4DWVuZCBpZg1wdXQgZGF0YVR5cGUg\naW50byBpdGVtIDMgb2YgeA1wdXQgcGFyYW1UeXBlIGludG8gaXRlbSA0IG9mIHgNcHV0\nIHggaW50byBsaW5lIGkgb2YgcnN0DWVuZCByZXBlYXQNcmV0dXJuIHJzdA1lbmQgR2x1\nZUluZm8NDW9uIENob29zZVBhcmFtVHlwZQ1wdXQgIiIgaW50byBub3RGb3JOdWxsDWlm\nIGZpZWxkICJjdXJQYXJhbSIgPSAxIHRoZW4NcHV0ICIoIiBpbnRvIG5vdEZvclJlc3Vs\ndA1lbHNlDXB1dCAiIiBpbnRvIG5vdEZvclJlc3VsdA1lbmQgaWYNaWYgZmllbGQgaWQg\nOCA8PiAiVEVYVCIgdGhlbg1wdXQgIigiIGludG8gdGV4dE9ubHkNaWYgZmllbGQgaWQg\nOCA9ICJudWxsIiB0aGVuDXB1dCAiKCIgaW50byBub3RGb3JOdWxsDXB1dCAiKCIgaW50\nbyBub3RGb3JSZXN1bHQNZW5kIGlmDWVsc2UNcHV0ICIiIGludG8gdGV4dE9ubHkNZW5k\nIGlmDXB1dCBub3RGb3JOdWxsICYgIkRlc2NyaXB0b3IiICYgcmV0dXJuIGludG8gbWVu\ndQ1wdXQgbm90Rm9yTnVsbCAmICJIYW5kbGUiICYgcmV0dXJuIGFmdGVyIG1lbnUNcHV0\nICIoUmVzZXJ2ZWQiICYgcmV0dXJuIGFmdGVyIG1lbnUNcHV0ICIoUmVzZXJ2ZWQiICYg\ncmV0dXJuIGFmdGVyIG1lbnUNcHV0IG5vdEZvck51bGwgJiAiSW1tZWRpYXRlIiAmIHJl\ndHVybiBhZnRlciBtZW51DXB1dCBub3RGb3JSZXN1bHQgJiAiUG9pbnRlciBhbmQgU2l6\nZSIgJiByZXR1cm4gYWZ0ZXIgbWVudQ1wdXQgdGV4dE9ubHkgJiAiUGFzY2FsIFN0cmlu\nZyIgJiByZXR1cm4gYWZ0ZXIgbWVudQ1wdXQgbm90Rm9yUmVzdWx0ICYgdGV4dE9ubHkg\nJiAiQyBTdHJpbmciIGFmdGVyIG1lbnUNDXB1dCAwIGludG8gbg1yZXBlYXQgd2l0aCBp\nID0gMzggdG8gNDANbXVsdGlwbHkgbiBieSAyDWlmIGhpbGl0ZSBvZiBia2duZCBidXR0\nb24gaWQgaSB0aGVuDWFkZCAxIHRvIG4NZW5kIGlmDWVuZCByZXBlYXQNDXNldCBjdXJz\nb3IgdG8gYXJyb3cNcHV0IGl0ZW0gMSBvZiBIUG9wdXBNZW51KG1lbnUsbisxLFRoZSBN\nb3VzZVYtMTAsVGhlIE1vdXNlSC0zKSBpbnRvIHRoZUl0ZW0NaWYgdGhlSXRlbSA8PiAi\nIiB0aGVuDWlmIHRoZUl0ZW0gPSAiRGVzY3JpcHRvciIgdGhlbg1wdXQgMCBpbnRvIG4N\nZWxzZSBpZiB0aGVJdGVtID0gIkhhbmRsZSIgdGhlbg1wdXQgMSBpbnRvIG4NZWxzZSBp\nZiB0aGVJdGVtID0gIkltbWVkaWF0ZSIgdGhlbg1wdXQgNCBpbnRvIG4NZWxzZSBpZiB0\naGVJdGVtID0gIlBvaW50ZXIgYW5kIFNpemUiIHRoZW4NcHV0IDUgaW50byBuDWVsc2Ug\naWYgdGhlSXRlbSA9ICJQYXNjYWwgU3RyaW5nIiB0aGVuDXB1dCA2IGludG8gbg1lbHNl\nIGlmIHRoZUl0ZW0gPSAiQyBTdHJpbmciIHRoZW4NcHV0IDcgaW50byBuDWVuZCBpZg1w\ndXQgNCBpbnRvIG5iaXQNcmVwZWF0IHdpdGggaSA9IDM4IHRvIDQwDWlmIG4gPj0gbkJp\ndCB0aGVuDXN1YnRyYWN0IG5iaXQgZnJvbSBuDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0\ndG9uIGlkIGkgdG8gdHJ1ZQ1lbHNlDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uIGlk\nIGkgdG8gZmFsc2UNZW5kIGlmDXB1dCBuYml0IGRpdiAyIGludG8gbmJpdA1lbmQgcmVw\nZWF0DWVuZCBpZg1lbmQgQ2hvb3NlUGFyYW1UeXBlDQ0tLSBsYW5ndWFnZSBkZXBlbmRl\nbnQgcGFydA0NZnVuY3Rpb24gQ2xpZW50VGVtcGxhdGUgbXVsdGlMaW5lDS0tIGVpdGhl\nciByZXR1cm4gdGhlIHRlbXBsYXRlIG9yIHdoaWNoIHBhcmFtZXRlciBpcyBiZWluZyBj\nbGlja2VkDXB1dCBzcGFjZSAmIE51bVRvQ2hhcigxOTQpICYgcmV0dXJuICYgc3BhY2Ug\naW50byBjb250Q2hhcg1wdXQgZmllbGQgImV2ZW50TmFtZSIgaW50byB0ZW1wbGF0ZQ1w\ndXQgZmllbGQgInBhcmFtSW5mbyIgaW50byB4DXB1dCBudW1iZXIgb2YgbGluZXMgaW4g\neCBpbnRvIG4NcHV0IDAgaW50byBwYXJhbUluZGV4DXJlcGVhdCB3aXRoIGluZGV4ID0g\nMiB0byBuDXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgbGluZSBpbmRleCBvZiB4IGludG8g\neQ1wdXQgaXRlbSA0IG9mIHkgaW50byB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRv\nIGlzT3B0aW9uYWwNcHV0IHRlbXAgZGl2IDgxOTIgaW50byB0ZW1wDXB1dCAodGVtcCBt\nb2QgMiA9IDEpIGludG8gaXNFbnVtDXB1dCAiIiBpbnRvIGVudW1lcmF0ZWQNcHV0IChp\ndGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYgdXNlSXQgdGhlbg1hZGQg\nMSB0byBwYXJhbUluZGV4DS0tIGZvciBwcm90byBzdGF0ZW1lbnQNaWYgaXRlbSAzIG9m\nIHkgPSAidHJ1ZSIgdGhlbg1wdXQgInRydWUiIGludG8gdGhpc1BhcmFtDWVsc2UgaWYg\naW5kZXggPSAxIHRoZW4NcHV0ICJkaXJlY3RQYXJhbSIgaW50byB0aGlzUGFyYW0NZWxz\nZQ1wdXQgInBhcmFtIiBpbnRvIHRoaXNQYXJhbQ1lbmQgaWYNaWYgdXNlSXQgdGhlbg1p\nZiBtdWx0aUxpbmUgPSAibXVsdGlMaW5lIiB0aGVuDXB1dCBjb250Q2hhciBhZnRlciB0\nZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNaWYgaXNP\ncHRpb25hbCB0aGVuDXB1dCAiWyIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGluZGV4\nIDw+IDEgdGhlbg1wdXQgaXRlbSAxIG9mIHkgJiBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1l\nbmQgaWYNaWYgaXNFbnVtIHRoZW4NcHV0IEVudW1PcHRpb24oZmllbGQgInN1aXRlQ29k\nZSIsaXRlbSAzIG9mIHksZW51bWVyYXRlZCwxKSBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1\ndCB0aGlzUGFyYW0gYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGlzT3B0aW9uYWwgdGhl\nbg1wdXQgIl0iIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1lbmQgaWYNZW5kIGlmIC0tIHVz\nZUl0DWVuZCByZXBlYXQNcmV0dXJuIHRlbXBsYXRlDWVuZCBDbGllbnRUZW1wbGF0ZQ0A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoEJNQVAAABamAAAAAAAAAAAAAQAAAAAA\nAAFWAgAAAAAAAVYCAAAYAAAA6gH0AAAAAAAAAAAAAAAAAAABTED/////wf/////////A\n4wSFQP/////B/////////+DjBED/////wf/////////Q4wS5hkBVVVVVwVVVVVVVVVVQ\n4wRAKqqqqsGqqqqqqqqqoOMEv4G/gbqBjhJA4ysQAL+Bv4GjgYnjBME5kCAAAQgDCATj\nBMFEgCAAAQgBCATjBMFAsyQZxw4xOATjBMFAlKgFKQlJSATjBMFAlDAdKQlJSATjFETB\nlKglKQlJScAD4xQ4wZMkHScJMThAA+McQAOjheNqf/////AA42pAAEAAEACiheNqwABA\nAGAA4SwPgBUG4QzhLAzAFQbhDOEcDMHHhw8bZjw+YOEL4RwMwczMmZxmZmZg4QvhDMEP\njM4ZmGZmZuEM4QzBDM/HH5hmfmbhDOEMwQzMA5gYZmBm4QzhHAzBzEmYmGRiZmDhC+Ec\nDMHHhw8YeDw+YOELAAAAAAAAAAAAAAAAAAAAAAD///8AADCgQktHRAAAGGQAAAAAAAAZ\nUEAAAAAAAAADAAAehQAAFdgALgA+AAAj8AAJAAAAjgB+AAECBAAcAKUAMADWAAIAAAAA\nAAAABAAMAQAAEFN1aXRlQ29kZQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRo\naXMgaXMgdGhlIHN1aXRlIGNvZGUgb2YgdGhlIGNsYXNzLiINZW5kIE1vdXNlV2l0aGlu\nDQ0AAADGAAICBABAAFkAUwEJAAIAAAAAAAAABAAMAAAAEGNsYXNzTmFtZQAAb24gTW91\nc2VXaXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBu\nYW1lIG9mIHRoaXMgY2xhc3MgaGVyZS4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMg\ndGhlIG5hbWUgb2YgdGhpcyBjbGFzcy4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NAADA\nAAMCBABAAUoAUwF4AAIAAAAAAAAABAAMAAAAEGNsYXNzSUQAAG9uIE1vdXNlV2l0aGlu\nDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0aGUgSUQgb2YgdGhp\ncyBjbGFzcyBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgSUQgb2Yg\ndGhpcyBjbGFzcy4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4AAADUAAUCBABVAFkAhQH7\nAAcAAAAAAAAABAAJAAAADENsYXNzQ29tbWVudAAAb24gTW91c2VXaXRoaW4NaWYgIG1l\nIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEgY29tbWVudCBhYm91dCB0aGlz\nIGNsYXNzIGhlcmUuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIGEgY29tbWVudCBh\nYm91dCB0aGlzIGNsYXNzLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0NDQAAAMYABgIE\nAK4AZgDBARkAAgAAAAAAAAAEAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMg\nIiIgdGhlbg1TaG93QmFsbG9vbiAiRW50ZXIgYSB0aGUgbmFtZSBmb3IgdGhpcyBwcm9w\nZXJ0eSBoZXJlLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgbmFtZSBvZiB0\naGlzIHByb3BlcnR5LiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbgAAALoABwIEAK4BbwDB\nAZ8AAgAAAAAAAAAEAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMgIiIgdGhl\nbg1TaG93QmFsbG9vbiAiRW50ZXIgYW4gSUQgZm9yIHRoaXMgcHJvcGVydHkuIg1lbHNl\nDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBJRCBmb3IgdGhpcyBwcm9wZXJ0eS4iDWVu\nZCBpZg1lbmQgTW91c2VXaXRoaW4AAOoACAIEAK4BzQDBAfsAAgAAAAAAAAAEAAwBAAAQ\nAABvbiBNb3VzZVdpdGhpbg1pZiBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJFbnVtIiB0\naGVuDVNob3dCYWxsb29uICJUaGUgY2xhc3Mgb2YgdGhlIHByb3BlcnR5IGlzIGFuIGVu\ndW1lcmF0b3IuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIGlzIHRoZSBjbGFzcyBvZiB0\naGUgcHJvcGVydHkiICYmIGZpZWxkIGlkIDYNZW5kIGlmDWVuZCBNb3VzZVdpdGhpbgAA\nANoACQIEAPAAWQEgAfsABwAAAAAAAAAEAAkAAAAMAABvbiBNb3VzZVdpdGhpbg1pZiAg\nbWUgaXMgIiIgdGhlbg1TaG93QmFsbG9vbiAiRW50ZXIgYSBjb21tZW50IGFib3V0IHRo\naXMgcHJvcGVydHkgaGVyZS4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMgYSBjb21t\nZW50IGFib3V0IHRoaXMgcHJvcGVydHkuIiAmJiBmaWVsZCBpZCA2DWVuZCBpZg1lbmQg\nTW91c2VXaXRoaW4NDQABRAAKAoUBLwBWAVYCAAAHAAAAAAAAAAQACQAAAAxwcm9wSW5m\nbwAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGxpc3Qgb2Yg\ndGhlIHByb3BlcnR5IG9mIHRoaXMgY2xhc3MsIiDCDSYmICJDbGljayBvbiB0aGUgb25l\nIHlvdSB3aXNoIHRvIGVkaXQuIg1lbmQgTW91c2VXaXRoaW4NDW9uIE1vdXNlVXANcHV0\nIHdvcmQgMiBvZiB0aGUgY2xpY2tMaW5lIGludG8gaQ1wdXQgdGhlIG51bWJlciBvZiBs\naW5lcyBpbiB0YXJnZXQgaW50byBuDWlmIChpID4gMCkgYW5kIChpIDw9IG4pIHRoZW4N\nU2hvd1BhcmFtIGkNZW5kIGlmDWVuZCBNb3VzZVVwAAAAZAALAQAAHQB8AC8ApKAAAAAA\nAAABABUADAEAABBTdWl0ZQAAb24gbW91c2VVcA1nbyB0byBjYXJkICgic3VpdGUiICYm\nIGZpZWxkIHN1aXRlQ29kZSkNZW5kIG1vdXNlVXAAACoADwINAEIABQBRAFoAAAAAAAD/\n/wAVAAwBAAAQY2xhc3NOYW1lAAAAACIAEAIdAEIBHABUAUsAAAAAAAD//wAVAAwBAAAQ\nAAAAAAAiABICDQBUAAkAZABaAAAAAAAAAAAAFQAMAQAAEAAAAAAAIgATAg0AjgABAKAA\nZwAAAAAAAAAAABUAEAEAABUAAAAAACIAFAINALAAAADBAGcAAAAAAAD//wAVAAwBAAAQ\nAAAAAAAiABUCDQCwASAAwQFwAAAAAAAA//8AFQAMAQAAEAAAAAAAIgAXAg0A7wAJAP8A\nWgAAAAAAAP//ABUADAEAABAAAAAAARYAGAEAAK8BpQDAAcugAAAAAAAAAQAVAAwBAAAQ\nQ2xhc3MAAG9uIE1vdXNlV2l0aGluDWlmIGhpbGl0ZSBvZiBia2duZCBidXR0b24gIkVu\ndW0iIHRoZW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIGVudW1l\ncmF0aW9uIiAmJiAoZmllbGQgaWQgOCkgJiAiLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1ITVJlbW92ZUJhbGxvbg1nbyBjYXJkIChmaWVsZCAic3VpdGVD\nb2RlIikgJiYgImNsYXNzIiAmJiBmaWVsZCBpZCA4DWVuZCBtb3VzZVVwAAAAtgAZAQAA\nzwACAOEAH4AFAAAAAAABAAAADAAAABAwAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBv\nZiB0YXJnZXQpDWVuZCBtb3VzZVVwAADyABoBAADPACAA4QBPgAUAAAAAAAEAAAAMAAAA\nEExpc3QAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJJZiB0aGlzIGJveCBpcyBj\naGVja2VkLCB0aGVuIHRoZSBwYXJhbWV0ZXIgaXMgYSBsaXN0IG9mIiDCDSYmcXVvdGUm\nIGZpZWxkIGlkIDggJnF1b3RlJiAiLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5k\nIG1vdXNlVXAAARQAGwEAAM8ATgDhAIiABQAAAAAAAQAAAAwAAAAQRW51bQAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIklmIHRoaXMgYm94IGlzIGNoZWNrZWQsIHRoZW4g\ndGhpcyBwYXJhbWV0ZXIgaXMgYW4gZW51bWVyYXRlZCBvbmUgd2l0aCB0aGUgZW51bWVy\nYXRpb24gaWQiIMINJiZxdW90ZSYgZmllbGQgaWQgOCAmIHF1b3RlJiIuIg1lbmQgTW91\nc2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90ICho\naWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAANYAHAEAAM8AhwDhAOHABQAAAAAA\nAQAAAAwAAAAQUmVhZFdyaXRlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiSW5k\naWNhdGVzIHdoZXRoZXIgeW91IGNhbiB3cml0ZSB0byB0aGlzIHByb3BlcnR5IG9yIG5v\ndC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdl\ndCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAC2AB0BAADQATEA\n4QFCAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRo\naXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9u\nIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFy\nZ2V0KQ1lbmQgbW91c2VVcAAAALYAHgEAANABQgDhAVMABQAAAAAAAQAAAAwAAAAQAABv\nbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0\ndXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9m\nIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAf\nAQAA0AFTAOEBZAAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxs\nb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0\naGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRl\nIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAC2ACABAADQAWQA4QF1AAUAAAAAAAEAAAAM\nAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQg\nZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhp\nbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VV\ncAAAALYAIQEAANABdQDhAYYABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBN\nb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3Qg\nKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVwAAAAtgAiAQAA0AGGAOEBlwAFAAAA\nAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHJl\nc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5k\nIG1vdXNlVXAAAAC2ACMBAADQAZcA4QGoAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VX\naXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Uu\nIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQg\ndG8gbm90IChoaWxpdGUgb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAJAEAANABqADh\nAbkABQAAAAAAAQAAAAwAAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhp\ncyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24g\nbW91c2VVcA1zZXQgaGlsaXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJn\nZXQpDWVuZCBtb3VzZVVwAAAAtgAlAQAA0AG5AOEBygAFAAAAAAABAAAADAAAABAAAG9u\nIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1\ncmUgdXNlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2Yg\ndGFyZ2V0IHRvIG5vdCAoaGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAC2ACYB\nAADQAcoA4QHbAAUAAAAAAAEAAAAMAAAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxv\nb24gIlRoaXMgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIg1lbmQgTW91c2VXaXRo\naW4NDW9uIG1vdXNlVXANc2V0IGhpbGl0ZSBvZiB0YXJnZXQgdG8gbm90IChoaWxpdGUg\nb2YgdGFyZ2V0KQ1lbmQgbW91c2VVcAAAALYAJwEAANAB2wDhAewABQAAAAAAAQAAAAwA\nAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhpcyBpcyByZXNlcnZlZCBm\nb3IgZnV0dXJlIHVzZS4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1zZXQgaGls\naXRlIG9mIHRhcmdldCB0byBub3QgKGhpbGl0ZSBvZiB0YXJnZXQpDWVuZCBtb3VzZVVw\nAAAAtgAoAQAA0AHsAOEB/QAFAAAAAAABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJUaGlzIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiINZW5kIE1v\ndXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCBoaWxpdGUgb2YgdGFyZ2V0IHRvIG5vdCAo\naGlsaXRlIG9mIHRhcmdldCkNZW5kIG1vdXNlVXAAAAEoACkBAACNANsAoQERoAIAAAAA\nAAEAAAAMAAAAEE5leHQgPgAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNr\nIGhlcmUgdG8gdmlldyB0aGUgbmV4dCBwcm9wZXJ0eSBpbiB0aGUgcHJvcGVydHkgbGlz\ndC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1nbG9iYWwgY3VycmVudFBhcmFt\nDWlmIGxpbmUgKGN1cnJlbnRQYXJhbSsxKSBvZiBia2duZCBmaWVsZCBpZCAxMCA8PiAi\nIiB0aGVuDVNhdmVQYXJhbQ1TaG93UGFyYW0gY3VycmVudFBhcmFtKzENZWxzZQ1iZWVw\nDWVuZCBpZg1lbmQgbW91c2VVcAAAAQoAKgEAAI0AowChANmgAgAAAAAAAQAAAAwAAAAQ\nPCBQcmV2AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byB2\naWV3IGEgcHJldmlvdXMgcHJvcGVydHkgaW4gdGhlIHByb3BlcnR5IGxpc3QuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGN1cnJlbnRQYXJhbQ1pZiBjdXJy\nZW50UGFyYW0gPiAxIHRoZW4NU2F2ZVBhcmFtDVNob3dQYXJhbSBjdXJyZW50UGFyYW0t\nMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVwAAABNAArAQAAjQBmAKEAnKAEAAAA\nAAABAAAADAAAABBOZXcAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBo\nZXJlIHRvIGFkZCBhIG5ldyBwcm9wZXJ0eSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiIN\nZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NU2F2\nZVBhcmFtDXB1dCAxICsgbnVtYmVyIG9mIGxpbmVzIG9mIGJrZ25kIGZpZWxkIGlkIDEw\nIGludG8gbg1wdXQgIiw/Pz8/LD8/Pz8sMCwiIGludG8gbGluZSBuIG9mIGJrZ25kIGZp\nZWxkIGlkIDEwDVNob3dQYXJhbSBuDWVuZCBtb3VzZVVwAAGAACwBAACNAXIAoQGooAQA\nAAAAAAEAAAAMAAAAEERlbGV0ZQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNs\naWNrIGhlcmUgdG8gZGVsZXRlIHRoaXMgcHJvcGVydHkuIg1lbmQgTW91c2VXaXRoaW4N\nDW9uIG1vdXNlVXANZ2xvYmFsIGN1cnJlbnRQYXJhbQ1pZiBjdXJyZW50UGFyYW0gPSAw\nIHRoZW4NYmVlcA1lbHNlDWRlbGV0ZSBsaW5lIGN1cnJlbnRQYXJhbSBvZiBia2duZCBm\naWVsZCBpZCAxMA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGJrZ25kIGZpZWxkIGlkIDEw\nIGludG8gbg1pZiBjdXJyZW50UGFyYW0gPiBuIHRoZW4Nc3VidHJhY3QgMSBmcm9tIGN1\ncnJlbnRQYXJhbQ1lbmQgaWYNU2hvd1BhcmFtIGN1cnJlbnRQYXJhbQ1lbmQgaWYNZW5k\nIG1vdXNlVXAAAAEUAC0BAACNATYAoQFsoAQAAAAAAAEAAAAMAAAAEEluc2VydAAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gYWRkIGEgbmV3IHBy\nb3BlcnR5IGFmdGVyIHRoaXMgb25lLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVw\nDWdsb2JhbCBjdXJyZW50UGFyYW0NcHV0IHJldHVybiAmICIsPz8/Pyw/Pz8/LDAsIiBh\nZnRlciBsaW5lIGN1cnJlbnRQYXJhbSBvZiBia2duZCBmaWVsZCBpZCAxMA1TaG93UGFy\nYW0gY3VycmVudFBhcmFtKzENZW5kIG1vdXNlVXAAAAAiADACDQEhABcBMgBaAAAAAAAA\nAAAAFQAMAQAAEAAAAAABZAAxAgQBIgBZAVIB+wAHAAAAAAAAAAQACQAAAAxlbGVtZW50\ncwAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIGxpc3Qgb2Yg\nZWxlbWVudHMgaW4gdGhlIGNsYXNzLiIgwg0mJiAiRWFjaCBsaW5lIGlzIGFuIGVsZW1l\nbnQsIHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggbGluZSBpcyB0aGUgZWxlbWVudCBjbGFz\ncywiIMINJiYgInRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIHRoZSBrZXkgZm9ybXMuIEN1\ncnJlbnRseSB0aGVyZSBpcyBubyIgwg0mJiAic3BlY2lhbCB1c2VyIGludGVyZmFjZSBi\nZXNpZGVzIHRleHQgZW50cnkgZm9yIGVkaXRpbmcgdGhlc2UgZWxlbWVudHMuIg1lbmQg\nTW91c2VXaXRoaW4NAAFqADMBAAA6AbQAUgHSIAAAAAP2AAEAAAAMAAAAEAAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIHByZXZp\nb3VzIGNsYXNzIGluIHRoaXMgc3VpdGUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNl\nVXANZ2V0IHRoZXJlIGlzIGEgY2FyZCAyIG9mIHRoaXMgYmtnbmQNaWYgbm90IGl0IHRo\nZW4gZXhpdCBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBjYXJkIDIgb2YgdGhp\ncyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkIDw+IHgg\ndGhlbg12aXN1YWwgd2lwZSByaWdodA1nbyBwcmV2IGNhcmQgb2YgdGhpcyBia2duZA1l\nbmQgaWYNZW5kIG1vdXNlVXAAASgANAEAADoB1QBSAfMgAAAAA/UAAQAAAAwAAAAQAABv\nbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0byB0aGUg\nbmV4dCBjbGFzcyBpbiB0aGlzIHN1aXRlLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3Vz\nZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBsYXN0IGNhcmQgb2YgdGhpcyBia2duZCBp\nbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkIDw+IHggdGhlbg12aXN1\nYWwgd2lwZSBsZWZ0DWdvIG5leHQgY2FyZCBvZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQg\nbW91c2VVcAAC2gA2AQAAHQE+ADMBopAFAAAAAAABAAAADAAAABBmcm9tIEFFVVQAAG9u\nIE1vdXNlV2l0aGluDWlmIGhpbGl0ZSBvZiBtZSB0aGVuDVNob3dCYWxsb29uICJUaGlz\nIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgY2xhc3MgY29tZXMgZnJvbSB0aGUgYWV1dCBy\nZXNvdXJjZS4iIMINJiYgIklmIHlvdSBtb2RpZnkgdGhlIGNsYXNzLCB5b3Ugc2hvdWxk\nIGNsaWNrIGhlcmUgc28gdGhhdCB0aGUgY2xhc3MiIMINJiYgImdvZXMgdG8gdGhlIGFl\ndGUgcmVzb3VyY2UuIg1lbHNlDVNob3dCYWxsb29uICJUaGlzIHNob3dzIHRoZSBjbGFz\ncyBjb21lcyBmcm9tIHRoZSBhZXRlIHJlc291cmNlLiIgwg0mJiAiVGhlcmUgaXMgbm8g\ncmVhc29uIHRvIG1hcmsgaXQgYXMgY29taW5nIGZyb20gdGhlIGFldXQgcmVzb3VyY2Uu\nIiDCDSYmICJJZiB5b3UgaW5zaXN0IG9uIGNoYW5naW5nIGl0LCBjbGljayBoZXJlIHdp\ndGggb3B0aW9uIGtleSBkb3duLiIgwg0mJiAiSXQgd2lsbCBub3QgYmUgd3JpdHRlbiB0\nbyB0aGUgYWV0ZSByZXNvdXJjZS4iDWVuZCBpZg1lbmQgTW91c2VXaXRoaW4NDW9uIG1v\ndXNlVXANcHV0IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgaW50byBj\ndXJTdGF0ZQ1pZiBjdXJTdGF0ZSBvciAodGhlIG9wdGlvbktleSBpcyBkb3duKSB0aGVu\nDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIHRvIG5vdCBjdXJT\ndGF0ZQ1lbmQgaWYNZW5kIG1vdXNlVXAAACIAOgINABkAAAA5AHYAAAAAAAAAAAAVABgI\nAAAgAAAAAAD4ADsBAAARAcEAOAHooAAAABpAAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhl\nIGNhcmQgeW91IGxhc3QgdmlzaXRlZCLCDSYmInRoaXMgc2Vzc2lvbi4iDWVuZCBNb3Vz\nZVdpdGhpbg0Nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlZnJvbQ1ITVJlbW92ZUJhbGxv\nb24NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQgbW91c2VVcA0A\nAA8ACwBDbGFzcyBOYW1lAAAQAAMASUQAABIADABEZXNjcmlwdGlvbgAXAAwARGVzY3Jp\ncHRpb24AEwALAFByb3BlcnRpZXMAABQADgBQcm9wZXJ0eSBOYW1lABUADABQcm9wZXJ0\neSBJRAAwAAkARWxlbWVudHMAADoAEYAKAAAABAAHAAZDbGFzc2VzAGNsYXNzAG9uIG9w\nZW5jYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4NZ2xvYmFsIGN1cnJlbnRT\ndWl0ZSxjdXJyZW50TmFtZQ1QdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJyZW50\nU3VpdGUNcHV0IGZpZWxkICJjbGFzc05hbWUiIGludG8gY3VycmVudE5hbWUNU2hvd1Bh\ncmFtIDENZW5kIGlmDVBhc3Mgb3BlbmNhcmQNZW5kIG9wZW5jYXJkDQ1vbiBjbG9zZWNh\ncmQNZ2xvYmFsIGluRWRpdA1pZiBpbkVkaXQgdGhlbg1nbG9iYWwgY3VycmVudFN1aXRl\nLGN1cnJlbnROYW1lDWlmIGZpZWxkICJzdWl0ZUNvZGUiIDw+ICIqKioqIiB0aGVuDWlm\nIGN1cnJlbnRTdWl0ZSA8PiBmaWVsZCAic3VpdGVDb2RlIiB0aGVuDXB1dCAic3VpdGUi\nICYmIGZpZWxkICJzdWl0ZUNvZGUiIGludG8gc3VpdGVOYW1lDWlmIG5vdCAodGhlcmUg\naXMgYSBjYXJkIHN1aXRlTmFtZSkgdGhlbg1wdXQgY3VycmVudFN1aXRlIGludG8gZmll\nbGQgInN1aXRlQ29kZSINYW5zd2VyIHN1aXRlTmFtZSAmICJkb2VzIG5vdCBleGlzdCBh\nbmQgd2lsbCBub3QgYmUgdXNlZCINZW5kIGlmDWVuZCBpZg1TYXZlUGFyYW0NcHV0IGN1\ncnJlbnRTdWl0ZSAmJiAoc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQpICYgIiwiICYgY3Vy\ncmVudE5hbWUgaW50byBvbGROYW1lDXB1dCAoZmllbGQgInN1aXRlQ29kZSIpICYmICJj\nbGFzcyIgJiYgUmVzVHlwZShmaWVsZCAiY2xhc3NJRCIpIMINJiAiLCIgJiBmaWVsZCAi\nY2xhc3NOYW1lIiBpbnRvIG5ld05hbWUNaWYgbmV3TmFtZSA8PiBvbGROYW1lIHRoZW4N\nTmFtZUl0IG5ld05hbWUNQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1lLCAiY2xhc3NM\naXN0Ig1lbmQgaWYNUHV0IGZpZWxkICJzdWl0ZUNvZGUiIGludG8gY3VycmVudFN1aXRl\nDWVuZCBpZg1lbmQgaWYNUGFzcyBjbG9zZWNhcmQNZW5kIGNsb3NlY2FyZA0Nb24gY2xv\nc2VjYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4NZ2xvYmFsIGN1cnJlbnRT\ndWl0ZSxjdXJyZW50TmFtZQ1pZiBub3QgdGhlIHZpc2libGUgb2YgZmllbGQgInNjcmlw\ndFRlbXBsYXRlIiB0aGVuDVNhdmVQYXJhbQ1zaG93IGZpZWxkICJzY3JpcHRUZW1wbGF0\nZSINZW5kIGlmDXB1dCBmaWVsZCAic3VpdGVDb2RlIiAmJiAoc2hvcnQgbmFtZSBvZiB0\naGlzIGNhcmQpICYgIiwiICYgY3VycmVudE5hbWUgaW50byBvbGROYW1lDXB1dCBmaWVs\nZCAic3VpdGVDb2RlIiAmJiAiZXZlbnQiICYmIFJlc1R5cGUoZmllbGQgImV2ZW50Q2xh\nc3MiKSDCDSYgUmVzVHlwZShmaWVsZCAiZXZlbnRJRCIpICYgIiwiICYgZmllbGQgImV2\nZW50TmFtZSIgaW50byBuZXdOYW1lDWlmIG5ld05hbWUgPD4gb2xkTmFtZSB0aGVuDU5h\nbWVJdCBuZXdOYW1lDUNoYW5nZU5hbWUgb2xkTmFtZSwgbmV3TmFtZSwgImV2ZW50TGlz\ndCINZW5kIGlmDVB1dCBmaWVsZCAic3VpdGVDb2RlIiBpbnRvIGN1cnJlbnRTdWl0ZQ1Q\nYXNzIGNsb3NlY2FyZA1lbmQgaWYNZW5kIGNsb3NlY2FyZA0Nb24gbmV3Y2FyZA1nbG9i\nYWwgY3VycmVudFN1aXRlDXB1dCBjdXJyZW50U3VpdGUgaW50byBmaWVsZCBzdWl0ZUNv\nZGUNUGFzcyBuZXdjYXJkDWVuZCBuZXdjYXJkDQ1vbiBkZWxldGVjYXJkDUNoYW5nZU5h\nbWUgZmllbGQgInN1aXRlQ29kZSIgJiYgc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQgJiAi\nLCIgICYgZmllbGQgImNsYXNzTmFtZSIsIMINIiIsICJjbGFzc0xpc3QiDXBhc3MgZGVs\nZXRlY2FyZA1lbmQgZGVsZXRlY2FyZA0Nb24gU2hvd1BhcmFtIG4NZ2xvYmFsIGN1cnJl\nbnRQYXJhbQ1wdXQgbiBpbnRvIGN1cnJlbnRQYXJhbQ1pZiBuIDw+IDAgdGhlbg1wdXQg\nbGluZSBuIG9mIGZpZWxkIGlkIDEwIGludG8geA1lbHNlDXB1dCAiIiBpbnRvIHgNZW5k\nIGlmDWlmIHggPSAiIiB0aGVuDVJhZGlvQXJyYXkgMA1wdXQgdHJ1ZSBpbnRvIGxvY2tp\nbmcNcHV0IDAgaW50byBjdXJyZW50UGFyYW0NZWxzZQ1SYWRpb0FycmF5IGl0ZW0gNCBv\nZiB4DXB1dCBmYWxzZSBpbnRvIGxvY2tpbmcNZW5kIGlmDXB1dCBpdGVtIDMgb2YgeCBp\nbnRvIGZpZWxkIGlkIDgNcHV0IGl0ZW0gMSBvZiB4IGludG8gZmllbGQgaWQgNg1wdXQg\naXRlbSAyIG9mIHggaW50byBmaWVsZCBpZCA3DWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4\nDXB1dCB4IGludG8gYmtnbmQgZmllbGQgaWQgOQ1yZXBlYXQgd2l0aCBpID0gNiB0byA5\nDXNldCBsb2NrdGV4dCBvZiBmaWVsZCBpZCBpIHRvIGxvY2tpbmcNZW5kIHJlcGVhdA1l\nbmQgU2hvd1BhcmFtDQ1vbiBTYXZlUGFyYW0NZ2xvYmFsIGN1cnJlbnRQYXJhbQ1pZiBj\ndXJyZW50UGFyYW0gPD4gMCB0aGVuDWlmIGZpZWxkIGlkIDYgPD4gIiIgdGhlbg1wdXQg\nZmllbGQgaWQgNiBpbnRvIGl0ZW0gMSBvZiB4DXB1dCBmaWVsZCBpZCA3IGludG8gaXRl\nbSAyIG9mIHgNcHV0IGZpZWxkIGlkIDggaW50byBpdGVtIDMgb2YgeA1wdXQgMCBpbnRv\nIG4NcmVwZWF0IHdpdGggaSA9IDI1IHRvIDQwDW11bHRpcGx5IG4gYnkgMg1pZiBoaWxp\ndGUgb2YgYmtnbmQgYnV0dG9uIGlkIGkgdGhlbg1hZGQgMSB0byBuDWVuZCBpZg1lbmQg\ncmVwZWF0DXB1dCBuIGludG8gaXRlbSA0IG9mIHgNcHV0IGJrZ25kIGZpZWxkIGlkIDkg\naW50byB5DS0tIHdlIG11c3QgcmVtb3ZlIGFsbCBjYXJyaWFnZSByZXR1cm4gZnJvbSB0\naGUgY29tbWVudCBmaWVsZA1yZXBlYXQgdW50aWwgaSA9IDANcHV0IG9mZnNldChyZXR1\ncm4sIHkpIGludG8gaQ1pZiBpID4gMCB0aGVuIHB1dCBzcGFjZSBpbnRvIGNoYXIgaSBv\nZiB5DWVuZCByZXBlYXQNcHV0IHggJiAiLCIgJiB5IGludG8gbGluZSBjdXJyZW50UGFy\nYW0gb2YgYmtnbmQgZmllbGQgaWQgMTANZW5kIGlmDWVuZCBpZg1lbmQgU2F2ZVBhcmFt\nDQ1vbiBSYWRpb0FycmF5IG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gMTYNaWYgKG4gbW9k\nIDIpID0gMSB0aGVuDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uIGlkICg0MS1pKSB0\nbyB0cnVlDWVsc2UNc2V0IGhpbGl0ZSBvZiBia2duZCBidXR0b24gaWQgKDQxLWkpIHRv\nIGZhbHNlDWVuZCBpZg1wdXQgbiBkaXYgMiBpbnRvIG4NZW5kIHJlcGVhdA1lbmQgUmFk\naW9BcnJheQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEJNQVAAABlQAAAA\nAAAAAAAAAQAAAAAAAAFWAgAAAAAAAVYCAAAYAAAA3AEvAAAAAAAAAAAAAAAAAAAAsFD/\n/////8H//////////+ELhYodgOEKHcDhCrmGiWBVVVVVVVXBVVVVVVVVVUDhCmAqqqqq\nqqrBqqqqqqqqqoDhCr+Bv4G/gb+Bv4GB4R74FmAC4R7MFmAC4Q7BzHhw8bZjw+YC4Q7B\nzMzJmcZmZmYC4Q7B+MzhmYZmZmAC4Q7BzPxx+YZn5mAC4Q7BzMA5gYZmBmAC4Q7BzMSZ\niYZGJmYC4Q7BzHhw8YeDw+YCAP////8AAAD//wD//wD//////wAAG2BCS0dEAAAehQAA\nAAAAABrtAAAAAAAAAAMAAByvAAAYZAAXADoAABMiAAcAAAB0AIQAAQIEAB8A3gAxAQgA\nAgAAAAAAAAAEAAwBAAAQU3VpdGVDb2RlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9v\nbiAiVGhpcyBpcyB0aGUgc3VpdGUgY29kZSBvZiB0aGlzIGVudW1lcmF0aW9uLiINZW5k\nIE1vdXNlV2l0aGluDQ0AANAAAwIEAB8BIwAyAVoAAgAAAAAAAAAEAAwAAAAQZW51bWVy\nYXRpb24AAG9uIE1vdXNlV2l0aGluDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29u\nICJFbnRlciB0aGUgSUQgb2YgdGhpcyBlbnVtZXJhdGlvbiBoZXJlLiINZWxzZQ1TaG93\nQmFsbG9vbiAiVGhpcyBpcyB0aGUgSUQgb2YgdGhpcyBlbnVtZXJhdGlvbi4iDWVuZCBp\nZg1lbmQgTW91c2VXaXRoaW4NAADgAAYCBABiASkAdAH8AAIAAAAAAAAABAAMAAAAEGVu\ndW1OYW1lAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMgIiIgdGhlbg1TaG93QmFsbG9v\nbiAiRW50ZXIgdGhlIG5hbWUgdGhlIGVudW1lcmF0b3IgYmVpbmcgZWRpdGVkLiINZWxz\nZQ1TaG93QmFsbG9vbiAiVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRvciBi\nZWluZyBlZGl0ZWQuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQAAANwABwIEAGIAbQB0\nAKEAAgAAAAAAAAAEAAwAAAAQZW51bUlEAABvbiBNb3VzZVdpdGhpbg1pZiAgbWUgaXMg\nIiIgdGhlbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhlIElEIG9mIHRoZSBlbnVtZXJhdG9y\nIGJlaW5nIGVkaXRlZC4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMgaXMgdGhlIElEIG9m\nIHRoZSBlbnVtZXJhdG9yIGJlaW5nIGVkaXRlZC4iDWVuZCBpZg1lbmQgTW91c2VXaXRo\naW4NAADsAAkCBAB5AG0A5QH8AAcAAAAAAAAABAAJAAAADAAAb24gTW91c2VXaXRoaW4N\naWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBkZXNjcmlwdGlv\nbiBmb3IgdGhlIGVudW1lcmF0b3IgIGJlaW5nIGVkaXRlZC4iDWVsc2UNU2hvd0JhbGxv\nb24gIlRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgZW51bWVyYXRvciAgYmVp\nbmcgZWRpdGVkLiINZW5kIGlmDWVuZCBNb3VzZVdpdGhpbg0AAV4ACgIFAOwAbQFUAfwA\nBwAAAAAAAAAEAAkAAAAMZW51bUluZm8AAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29u\nICJUaGlzIGlzIGxpc3Qgb2YgYWxsIHRoZSBlbnVtZXJhdG9ycyBpbiB0aGlzIGVudW1l\ncmF0aW9uLCIgwg0mJiAiY2xpY2sgb24gdGhlIGVudW1lcmF0b3IgeW91IHdpc2ggdG8g\nZWRpdC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gTW91c2VVcA1wdXQgd29yZCAyIG9mIHRo\nZSBjbGlja0xpbmUgaW50byBpDXB1dCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRhcmdl\ndCBpbnRvIG4NaWYgKGkgPiAwKSBhbmQgKGkgPD0gbikgdGhlbg1TYXZlUGFyYW0NU2hv\nd1BhcmFtIGkNZW5kIGlmDWVuZCBNb3VzZVVwAAAAZAALAQAAHwCzADEA3qAAAAAAAAAB\nAAAADAAAABBTdWl0ZQAAb24gbW91c2VVcA1nbyB0byBjYXJkICgic3VpdGUiICYmIGZp\nZWxkIHN1aXRlQ29kZSkNZW5kIG1vdXNlVXAAACIAEAIdACEBCgAzASQAAAAAAAD//wAV\nAAwBAAAQAAAAAAAiABMCDQBCAAAAWABoAAAAAAAAAAAAFQASAAAAGAAAAAAAIgAUAg0A\nZACpAHUBKgAAAAAAAP//ABUADAEAABAAAAAAACIAFQINAGQAAQB2AG4AAAAAAAD//wAV\nAAwBAAAQAAAAAAAiABcCDAB4ABIAigBuAAAAAAAA//8AFQAMAQAAEAAAAAABLAApAQAA\nQgDdAFYBE6ACAAAAAAABAAAADAAAABBOZXh0ID4AAG9uIE1vdXNlV2l0aGluDVNob3dC\nYWxsb29uICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBwcmV2aW91cyBlbnVtZXJhdG9y\nIGluIHRoZSBlbnVtZXJhdGlvbiBsaXN0LiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3Vz\nZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NaWYgbGluZSAoY3VycmVudFBhcmFtKzEpIG9m\nIGZpZWxkIGlkIDEwIDw+ICIiIHRoZW4NU2F2ZVBhcmFtDVNob3dQYXJhbSBjdXJyZW50\nUGFyYW0rMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVwAAABDgAqAQAAQgClAFYA\n26ACAAAAAAABAAAADAAAABA8IFByZXYAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29u\nICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBuZXh0IGVudW1lcmF0b3IgaW4gdGhlIGVu\ndW1lcmF0aW9uIGxpc3QuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFs\nIGN1cnJlbnRQYXJhbQ1pZiBjdXJyZW50UGFyYW0gPiAxIHRoZW4NU2F2ZVBhcmFtDVNo\nb3dQYXJhbSBjdXJyZW50UGFyYW0tMQ1lbHNlDWJlZXANZW5kIGlmDWVuZCBtb3VzZVVw\nAAABMAArAQAAQgBpAFYAn6AEAAAAAAABAAAADAAAABBOZXcAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGFkZCBhIG5ldyBlbnVtZXJhdG9yIHRv\nIHRoZSBlbmQgdGhlIGVudW1lcmF0aW9uLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3Vz\nZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NU2F2ZVBhcmFtDXB1dCAxICsgbnVtYmVyIG9m\nIGxpbmVzIG9mIGJrZ25kIGZpZWxkIGlkIDEwIGludG8gbg1wdXQgIiwsIiBpbnRvIGxp\nbmUgbiBvZiBia2duZCBmaWVsZCBpZCAxMA1TaG93UGFyYW0gbg1lbmQgbW91c2VVcAAA\nAYIALAEAAEIBXQBWAZOgBAAAAAAAAQAAAAwAAAAQRGVsZXRlAABvbiBNb3VzZVdpdGhp\nbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBkZWxldGUgdGhpcyBlbnVtZXJhdG9y\nLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0N\naWYgY3VycmVudFBhcmFtIDw+IDAgdGhlbg1kZWxldGUgbGluZSBjdXJyZW50UGFyYW0g\nb2YgYmtnbmQgZmllbGQgaWQgMTANcHV0IG51bWJlciBvZiBsaW5lcyBpbiBia2duZCBm\naWVsZCBpZCAxMCBpbnRvIG4NaWYgY3VycmVudFBhcmFtID4gbiB0aGVuDXN1YnRyYWN0\nIDEgZnJvbSBjdXJyZW50UGFyYW0NZW5kIGlmDVNob3dQYXJhbSBjdXJyZW50UGFyYW0N\nZWxzZQ1iZWVwDWVuZCBpZg1lbmQgbW91c2VVcAABCAAtAQAAQgEhAFYBV6AEAAAAAAAB\nAAAADAAAABBJbnNlcnQAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBo\nZXJlIHRvIGluc2VydCBhIG5ldyBlbnVtZXJhdG9yIGFmdGVyIHRoaXMgb25lLiINZW5k\nIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBjdXJyZW50UGFyYW0NcHV0IHJl\ndHVybiAmICIsLCIgYWZ0ZXIgbGluZSBjdXJyZW50UGFyYW0gb2YgZmllbGQgaWQgMTAN\nU2hvd1BhcmFtIGN1cnJlbnRQYXJhbSsxDWVuZCBtb3VzZVVwAAAAIgAyAg0AGQAAADYA\nswAAAAAAAAAAABUAGAgAACAAAAAAAXAAMwEAADoBtABSAdIgAAAAA/YAAQAAAAwAAAAQ\nAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0byB0\naGUgcHJldmlvdXMgZW51bWVyYXRpb24gaW4gdGhpcyBzdWl0ZS4iDWVuZCBNb3VzZVdp\ndGhpbg0Nb24gbW91c2VVcA1nZXQgdGhlcmUgaXMgYSBjYXJkIDIgb2YgdGhpcyBia2du\nZA1pZiBub3QgaXQgdGhlbiBleGl0IG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1lIG9m\nIGNhcmQgMiBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFtZSBvZiB0\naGlzIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIHJpZ2h0DWdvIHByZXYgY2FyZCBv\nZiB0aGlzIGJrZ25kDWVuZCBpZg1lbmQgbW91c2VVcAABLgA0AQAAOgHVAFIB8yAAAAAD\n9QABAAAADAAAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJl\nIHRvIGdvIHRvIHRoZSBuZXh0IGVudW1lcmF0aW9uIGluIHRoaXMgc3VpdGUuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1lIG9mIGxhc3Qg\nY2FyZCBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFtZSBvZiB0aGlz\nIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIGxlZnQNZ28gbmV4dCBjYXJkIG9mIHRo\naXMgYmtnbmQNZW5kIGlmDWVuZCBtb3VzZVVwAALsADYBAAAeAWEAMwG4kAUAAAAAAAEA\nAAAMAAAAEGZyb20gQUVVVAAAb24gTW91c2VXaXRoaW4NaWYgaGlsaXRlIG9mIG1lIHRo\nZW4NU2hvd0JhbGxvb24gIlRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVudW1lcmF0\naW9uIGNvbWVzIGZyb20gdGhlIGFldXQgcmVzb3VyY2UuIiDCDSYmICJJZiB5b3UgbW9k\naWZ5IHRoZSBlbnVtZXJhdGlvbiwgeW91IHNob3VsZCBjbGljayBoZXJlIHNvIHRoYXQg\ndGhlIGNsYXNzIiDCDSYmICJnb2VzIHRvIHRoZSBhZXRlIHJlc291cmNlLiINZWxzZQ1T\naG93QmFsbG9vbiAiVGhpcyBzaG93cyB0aGUgZW51bWVyYXRpb24gY29tZXMgZnJvbSB0\naGUgYWV0ZSByZXNvdXJjZS4iIMINJiYgIlRoZXJlIGlzIG5vIHJlYXNvbiB0byBtYXJr\nIGl0IGFzIGNvbWluZyBmcm9tIHRoZSBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgeW91\nIGluc2lzdCBvbiBjaGFuZ2luZyBpdCwgY2xpY2sgaGVyZSB3aXRoIG9wdGlvbiBrZXkg\nZG93bi4iIMINJiYgIkl0IHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGFldGUgcmVz\nb3VyY2UuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXB1dCBoaWxp\ndGUgb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIGludG8gY3VyU3RhdGUNaWYgY3Vy\nU3RhdGUgb3IgKHRoZSBvcHRpb25LZXkgaXMgZG93bikgdGhlbg1zZXQgaGlsaXRlIG9m\nIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0byBub3QgY3VyU3RhdGUNZW5kIGlmDWVu\nZCBtb3VzZVVwAAAA+AA3AQAAEQHBADgB6KAAAAAaQAABAAAADAAAABBHbyBCYWNrAABv\nbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyBiYWNrIHRv\nIHRoZSBjYXJkIHlvdSBsYXN0IHZpc2l0ZWQiwg0mJiJ0aGlzIHNlc3Npb24uIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZWZyb20NSE1SZW1vdmVC\nYWxsb29uDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdvIGdXaGVyZUZyb20NZW5kIG1vdXNl\nVXANAAAiADoCDADrAAAA/QBuAAAAAAAA//8AFQAMAQAAEAAAAAAAEAADAElEAAAXAAwA\nRGVzY3JpcHRpb24AEwALAFBhcmFtZXRlcnMAABQAEABFbnVtZXJhdG9yIG5hbWUAFQAO\nAEVudW1lcmF0b3IgSUQAMgANAEVudW1lcmF0aW9ucwAAOgAQAEVudW1lcmF0b3IgTGlz\ndGVudW1lcmF0aW9uAG9uIG9wZW5jYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRo\nZW4NaWYgZmllbGQgInN1aXRlQ29kZSIgPD4gIioqKioiIHRoZW4NZ2xvYmFsIGN1cnJl\nbnRTdWl0ZQ1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJyZW50U3VpdGUNU2hv\nd1BhcmFtIDENZW5kIGlmDWVuZCBpZg1QYXNzIG9wZW5jYXJkDWVuZCBvcGVuY2FyZA0N\nb24gY2xvc2VjYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4NZ2xvYmFsIGN1\ncnJlbnRTdWl0ZQ1pZiBmaWVsZCAic3VpdGVDb2RlIiA8PiAiKioqKiIgdGhlbg1pZiBj\ndXJyZW50U3VpdGUgPD4gZmllbGQgInN1aXRlQ29kZSIgdGhlbg1wdXQgInN1aXRlIiAm\nJiBmaWVsZCAic3VpdGVDb2RlIiBpbnRvIHN1aXRlTmFtZQ1pZiBub3QgKHRoZXJlIGlz\nIGEgY2FyZCBzdWl0ZU5hbWUpIHRoZW4NcHV0IGN1cnJlbnRTdWl0ZSBpbnRvIGZpZWxk\nICJzdWl0ZUNvZGUiDWFuc3dlciBzdWl0ZU5hbWUgJiAiZG9lcyBub3QgZXhpc3QgYW5k\nIHdpbGwgbm90IGJlIHVzZWQiDWVuZCBpZg1lbmQgaWYNU2F2ZVBhcmFtDXB1dCBjdXJy\nZW50U3VpdGUgJiYgc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQgaW50byBvbGROYW1lDXB1\ndCAoZmllbGQgInN1aXRlQ29kZSIpICYmICJlbnVtZXJhdGlvbiIgJiYgUmVzVHlwZShm\naWVsZCAiZW51bWVyYXRpb24iKSBpbnRvIG5ld05hbWUNaWYgbmV3TmFtZSA8PiBvbGRO\nYW1lIHRoZW4NTmFtZUl0IG5ld05hbWUNQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1l\nLCAiZW51bUxpc3QiDWVuZCBpZg1QdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJy\nZW50U3VpdGUNZW5kIGlmDWVuZCBpZg1QYXNzIGNsb3NlY2FyZA1lbmQgY2xvc2VjYXJk\nDQ1vbiBuZXdjYXJkDWdsb2JhbCBjdXJyZW50U3VpdGUNcHV0IGN1cnJlbnRTdWl0ZSBp\nbnRvIGZpZWxkIHN1aXRlQ29kZQ1wdXQgIiwsIiBpbnRvIGxpbmUgMSBvZiBmaWVsZCBp\nZCAxMA1QYXNzIG5ld2NhcmQNZW5kIG5ld2NhcmQNDW9uIGRlbGV0ZWNhcmQNQ2hhbmdl\nTmFtZSBmaWVsZCAic3VpdGVDb2RlIiAmJiBzaG9ydCBuYW1lIG9mIHRoaXMgY2FyZCwg\nwg0iIiwgImVudW1MaXN0Ig1wYXNzIGRlbGV0ZWNhcmQNZW5kIGRlbGV0ZWNhcmQNDW9u\nIFNob3dQYXJhbSBuDWdsb2JhbCBjdXJyZW50UGFyYW0NcHV0IG4gaW50byBjdXJyZW50\nUGFyYW0NcHV0IGxpbmUgbiBvZiBmaWVsZCBpZCAxMCBpbnRvIHgNaWYgeCA9ICIiIHRo\nZW4NcHV0IDAgaW50byBjdXJyZW50UGFyYW0NcHV0IHRydWUgaW50byBsb2NraW5nDWVs\nc2UNcHV0IGl0ZW0gMSBvZiB4IGludG8gZmllbGQgaWQgNg1wdXQgaXRlbSAyIG9mIHgg\naW50byBmaWVsZCBpZCA3DWRlbGV0ZSBpdGVtIDEgdG8gMiBvZiB4DXB1dCB4IGludG8g\nZmllbGQgaWQgOQ1wdXQgZmFsc2UgaW50byBsb2NraW5nDWVuZCBpZg1zZXQgbG9ja3Rl\neHQgb2YgZmllbGQgaWQgNiB0byBsb2NraW5nDXNldCBsb2NrdGV4dCBvZiBmaWVsZCBp\nZCA3IHRvIGxvY2tpbmcNc2V0IGxvY2t0ZXh0IG9mIGZpZWxkIGlkIDkgdG8gbG9ja2lu\nZw1lbmQgU2hvd1BhcmFtDQ1vbiBTYXZlUGFyYW0NZ2xvYmFsIGN1cnJlbnRQYXJhbQ1p\nZiBjdXJyZW50UGFyYW0gPD4gMCB0aGVuDXB1dCBmaWVsZCBpZCA2IGludG8gaXRlbSAx\nIG9mIHgNcHV0IGZpZWxkIGlkIDcgaW50byBpdGVtIDIgb2YgeA1wdXQgZmllbGQgaWQg\nOSBpbnRvIHkNLS0gd2UgbXVzdCByZW1vdmUgYWxsIGNhcnJpYWdlIHJldHVybiBmcm9t\nIHRoZSBjb21tYSBmaWVsZA1yZXBlYXQgdW50aWwgaSA9IDANcHV0IG9mZnNldChyZXR1\ncm4sIHkpIGludG8gaQ1pZiBpID4gMCB0aGVuIHB1dCBzcGFjZSBpbnRvIGNoYXIgaSBv\nZiB5DWVuZCByZXBlYXQNcHV0IHggJiAiLCIgJiB5IGludG8gbGluZSBjdXJyZW50UGFy\nYW0gb2YgZmllbGQgaWQgMTANZW5kIGlmDWVuZCBTYXZlUGFyYW0NAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIBCTUFQAAAa7QAAAAAAAAAAAAEAAAAAAAABVgIAAAAAAAFWAgAAGAAA\nADcAsQAAAAAAAAAAAAAAAAAAACSMEIDhFAEChYrhJoAA4TUBgAC5ho4QgOElgACNEEDh\nJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgEJLR0QAAByvAAAAAAAA\nHxZAAAAAAAAAAQAADjwAAB6FAA0ADgAACqIABAAAADIAZAABAQAAIACjADIA1KAAAAAA\nAAABAAAADAAAABBTdWl0ZQAAb24gbW91c2VVcA1nbyB0byBjYXJkICgic3VpdGUiICYm\nIGZpZWxkIHN1aXRlQ29kZSkNZW5kIG1vdXNlVXAAAIgAAgIEACAAzgAyARYAAgAAAAAA\nAAAEAAwBAAAQU3VpdGVDb2RlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhp\ncyBpcyB0aGUgc3VpdGUgY29kZSBvZiB0aGlzIGNvbXBhcmUgb3BlcmF0b3IuIg1lbmQg\nTW91c2VXaXRoaW4NAAAiAAMCDABKACoAWwBZAAAAAAAA//8AFQAMAQAAEAAAAAAA4AAE\nAgQASABYAFsBCAACAAAAAAAAAAQADAAAABBjb21wYXJlTmFtZQAAb24gTW91c2VXaXRo\naW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBuYW1lIG9m\nIHRoaXMgY29tcGFyaXNvbiBvcGVyYXRvci4iDWVsc2UNU2hvd0JhbGxvb24gIlRoaXMg\naXMgdGhlIG5hbWUgb2YgdGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZW5kIGlmDWVu\nZCBNb3VzZVdpdGhpbg0AAAAiAAUCHABKARMAXAFPAAAAAAAA//8AFQAMAQAAEAAAAAAA\n2gAGAgQASAFOAFoBgAACAAAAAAAAAAQADAAAABBjb21wYXJlSUQAAG9uIE1vdXNlV2l0\naGluDWlmICBtZSBpcyAiIiB0aGVuDVNob3dCYWxsb29uICJFbnRlciB0aGUgSUQgb2Yg\ndGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZWxzZQ1TaG93QmFsbG9vbiAiVGhpcyBp\ncyB0aGUgSUQgb2YgdGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZW5kIGlmDWVuZCBN\nb3VzZVdpdGhpbg0AAAAiAAcCDABsAAAAfABZAAAAAAAA//8AFQAMAQAAEAAAAAAA5gAI\nAgQAbQBYAN0B+wAHAAAAAAAAAAQACQAAAAxjb21wYXJlQ29tbWVudAAAb24gTW91c2VX\naXRoaW4NaWYgIG1lIGlzICIiIHRoZW4NU2hvd0JhbGxvb24gIkVudGVyIGEgY29tbWVu\ndCBmb3IgdGhpcyBjb21wYXJpc29uIG9wZXJhdG9yLiINZWxzZQ1TaG93QmFsbG9vbiAi\nVGhpcyBpcyBjb21tZW50IGFib3V0IHRoaXMgY29tcGFyaXNvbiBvcGVyYXRvci4iDWVu\nZCBpZg1lbmQgTW91c2VXaXRoaW4NAAAiAAkCDQAZAAAAOQCqAAAAAAAAAAAAFQAYCAAA\nIAAAAAABeAAKAQAAOgG0AFIB0iAAAAAD9gABAAAADAAAABAAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIHRvIHRoZSBwcmV2aW91cyBjb21w\nYXJpc29uIG9wZXJhdG9yIGluIHRoaXMgc3VpdGUuIg1lbmQgTW91c2VXaXRoaW4NDW9u\nIG1vdXNlVXANZ2V0IHRoZXJlIGlzIGEgY2FyZCAyIG9mIHRoaXMgYmtnbmQNaWYgbm90\nIGl0IHRoZW4gZXhpdCBtb3VzZVVwDXB1dCB0aGUgc2hvcnQgbmFtZSBvZiBjYXJkIDIg\nb2YgdGhpcyBia2duZCBpbnRvIHgNaWYgdGhlIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJk\nIDw+IHggdGhlbg12aXN1YWwgd2lwZSByaWdodA1nbyBwcmV2IGNhcmQgb2YgdGhpcyBi\na2duZA1lbmQgaWYNZW5kIG1vdXNlVXAAATYACwEAADoB1QBSAfMgAAAAA/UAAQAAAAwA\nAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnbyB0\nbyB0aGUgbmV4dCBjb21wYXJpc29uIG9wZXJhdG9yIGluIHRoaXMgc3VpdGUuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANcHV0IHRoZSBzaG9ydCBuYW1lIG9mIGxhc3Qg\nY2FyZCBvZiB0aGlzIGJrZ25kIGludG8geA1pZiB0aGUgc2hvcnQgbmFtZSBvZiB0aGlz\nIGNhcmQgPD4geCB0aGVuDXZpc3VhbCB3aXBlIGxlZnQNZ28gbmV4dCBjYXJkIG9mIHRo\naXMgYmtnbmQNZW5kIGlmDWVuZCBtb3VzZVVwAALoAA0BAAAfATsAMwGVkAUAAAAAAAEA\nAAAMAAAAEGZyb20gQUVVVAAAb24gTW91c2VXaXRoaW4NaWYgaGlsaXRlIG9mIG1lIHRo\nZW4NU2hvd0JhbGxvb24gIlRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbXBhcmlz\nb24gY29tZXMgZnJvbSB0aGUgYWV1dCByZXNvdXJjZS4iIMINJiYgIklmIHlvdSBtb2Rp\nZnkgdGhlIGNvbXBhcmlzb24sIHlvdSBzaG91bGQgY2xpY2sgaGVyZSBzbyB0aGF0IHRo\nZSBjbGFzcyIgwg0mJiAiZ29lcyB0byB0aGUgYWV0ZSByZXNvdXJjZS4iDWVsc2UNU2hv\nd0JhbGxvb24gIlRoaXMgc2hvd3MgdGhlIGNvbXBhcmlzb24gY29tZXMgZnJvbSB0aGUg\nYWV0ZSByZXNvdXJjZS4iIMINJiYgIlRoZXJlIGlzIG5vIHJlYXNvbiB0byBtYXJrIGl0\nIGFzIGNvbWluZyBmcm9tIHRoZSBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgeW91IGlu\nc2lzdCBvbiBjaGFuZ2luZyBpdCwgY2xpY2sgaGVyZSB3aXRoIG9wdGlvbiBrZXkgZG93\nbi4iIMINJiYgIkl0IHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGFldGUgcmVzb3Vy\nY2UuIg1lbmQgaWYNZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXB1dCBoaWxpdGUg\nb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIGludG8gY3VyU3RhdGUNaWYgY3VyU3Rh\ndGUgb3IgKHRoZSBvcHRpb25LZXkgaXMgZG93bikgdGhlbg1zZXQgaGlsaXRlIG9mIGJr\nZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0byBub3QgY3VyU3RhdGUNZW5kIGlmDWVuZCBt\nb3VzZVVwAAD4AA4BAAARAcEAOAHooAAAABpAAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhl\nIGNhcmQgeW91IGxhc3QgdmlzaXRlZCLCDSYmInRoaXMgc2Vzc2lvbi4iDWVuZCBNb3Vz\nZVdpdGhpbg0Nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlZnJvbQ1ITVJlbW92ZUJhbGxv\nb24NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQgbW91c2VVcA0A\nAAMABQBOYW1lAAAFAAMASUQAAAcADABEZXNjcmlwdGlvbgAJAAwAQ29tcGFyaXNvbnNj\nb21wYXJpc29uAG9uIE9wZW5DYXJkDWdsb2JhbCBpbkVkaXQNaWYgaW5FZGl0IHRoZW4N\nZ2xvYmFsIGN1cnJlbnRTdWl0ZSxjdXJyZW50TmFtZQ1wdXQgZmllbGQgInN1aXRlQ29k\nZSIgaW50byBjdXJyZW50U3VpdGUNcHV0IGZpZWxkICJjb21wYXJlTmFtZSIgaW50byBj\ndXJyZW50TmFtZQ1lbmQgaWYNZW5kIE9wZW5DYXJkDQ1vbiBjbG9zZWNhcmQNZ2xvYmFs\nIGluRWRpdA1pZiBpbkVkaXQgdGhlbg1pZiBmaWVsZCAic3VpdGVDb2RlIiA8PiAiKioq\nKiIgdGhlbg1nbG9iYWwgY3VycmVudFN1aXRlLGN1cnJlbnROYW1lDWlmIGN1cnJlbnRT\ndWl0ZSA8PiBmaWVsZCAic3VpdGVDb2RlIiB0aGVuDXB1dCAic3VpdGUiICYmIGZpZWxk\nICJzdWl0ZUNvZGUiIGludG8gc3VpdGVOYW1lDWlmIG5vdCAodGhlcmUgaXMgYSBjYXJk\nIHN1aXRlTmFtZSkgdGhlbg1wdXQgY3VycmVudFN1aXRlIGludG8gZmllbGQgInN1aXRl\nQ29kZSINYW5zd2VyIHN1aXRlTmFtZSAmICJkb2VzIG5vdCBleGlzdCBhbmQgd2lsbCBu\nb3QgYmUgdXNlZCINZW5kIGlmDWVuZCBpZg1wdXQgY3VycmVudFN1aXRlICYmIChzaG9y\ndCBuYW1lIG9mIHRoaXMgY2FyZCkgJiAiLCIgJiBjdXJyZW50TmFtZSBpbnRvIG9sZE5h\nbWUNcHV0IGZpZWxkICJzdWl0ZUNvZGUiICYmICJjb21wYXJpc29uIiAmJiBSZXNUeXBl\nKGZpZWxkICJjb21wYXJlSUQiKSDCDSYgIiwiICYgZmllbGQgImNvbXBhcmVOYW1lIiBp\nbnRvIG5ld05hbWUNaWYgbmV3TmFtZSA8PiBvbGROYW1lIHRoZW4NTmFtZUl0IG5ld05h\nbWUNQ2hhbmdlTmFtZSBvbGROYW1lLCBuZXdOYW1lLCAiY29tcGFyZUxpc3QiDWVuZCBp\nZg1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBjdXJyZW50U3VpdGUNZW5kIGlmDWVu\nZCBpZg1QYXNzIGNsb3NlY2FyZA1lbmQgY2xvc2VjYXJkDQ1vbiBuZXdjYXJkDWdsb2Jh\nbCBjdXJyZW50U3VpdGUNcHV0IGN1cnJlbnRTdWl0ZSBpbnRvIGZpZWxkICJzdWl0ZUNv\nZGUiDVBhc3MgbmV3Y2FyZA1lbmQgbmV3Y2FyZA0Nb24gZGVsZXRlY2FyZA1DaGFuZ2VO\nYW1lIGZpZWxkICJzdWl0ZUNvZGUiICYmIHNob3J0IG5hbWUgb2YgdGhpcyBjYXJkLCDC\nDSIiLCAiY29tcGFyZUxpc3QiDXBhc3MgZGVsZXRlY2FyZA1lbmQgZGVsZXRlY2FyZA0A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQk1BUAAAHxYAAAAAAAAAAAABAAAAAAAA\nAVYCAAAAAAABVgIAABgAAAA3AKgAAAAAAAAAAAAAAAAAAAAkjBCA4RMCA6KFiuEUAQPh\nFAMDuIaOEIDhEwIDjRBA4RSAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nA8BDQVJEAAA7gwAAAAAAAA8tAAAAAAAAAAAAAAAAAAA68AAADjwABQAKAAAC1AACAAAA\nmgECAAQBAAEoAXwBVgG4oAAAAGB2AAEAFQAMAQAAEEluc3RydWN0aW9ucwAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ2V0IGluc3RydWN0aW9u\ncyBmb3IgdXNpbmcgdGhpcyBzdGFjay4iDWVuZCBNb3VzZVdpdGhpbg0NDW9uIG1vdXNl\nVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9t\nDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdvIGNkICJpbnN0cnVjdGlvbnMiDWVuZCBtb3Vz\nZVVwAAAiAAUCAABqAHwAkAHNAAAAAAAAAAAAFQAMAQAAEAAAAAAAmAAHAQAA+AC9AQQA\nzwAAAAAAAAABAAAADAAAABAAAG9uIG1vdXNlRW50ZXINYmVlcCAyDWVuZCBtb3VzZUVu\ndGVyDQ1vbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiUGxhY2UgdGhlIGN1cnNvciBo\nZXJlIHRvIGJlZXAgdHdpY2UuIg1lbmQgTW91c2VXaXRoaW4NAAAiAAgCBAE7AAMBVgCN\nAAAAAAAAAAAAAwAMAAAAEAAAAAAA9gAKAQABMgHNAUwB8iAAAAA+0wABABUADgEAABJQ\ncm9jZWVkyQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8g\nZ28gdG8gdGhlIFJlc291cmNlIFRvb2xzIGNhcmQuIg1lbmQgTW91c2VXaXRoaW4NDQ0N\nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlRnJvbQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdX\naGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gY2FyZCAiTWFpbk1lbnUiDWVu\nZCBtb3VzZVVwAAD/+wBdAFVzZSBzdGFjayB0aGlzIHRvIGNyZWF0ZSwgbWFpbnRhaW4s\nIGFuZCBleHRlbmQNQXBwbGUgRXZlbnSqIFRlcm1pbm9sb2d5IEV4dGVuc2lvbiByZXNv\ndXJjZXMuAP/4ADSABgAAAAepMTk5MiBBcHBsZSBDb21wdXRlciwgSW5jLg1BbGwgUmln\naHRzIFJlc2VydmVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2BCTUFQAAAP\nLQAAAAAAAAAAAAEAAAAAAAABVgIAAAAAAAFWAgAAIAAaAVMB/gAAAAAAAAAAAAAAAAAA\nCwgbwOMEKg/A4wQqP8DjBCr/wOMEOQP/wOMEOQf/wOMEOQ//gOMEOR//gOMEOT//gOME\nOX//gOMEKX//4wUp///jBSn//uMFOAH//uMFOAH//OMFOAP/+OMFOAP/8OMFhTgD/+Dj\nBTgH/4DjBSgH/+MGKAf+4wZ1A/8AB/gD/+MEBcEf//AHgD//8OMDBcF///8AA////OMD\nFAHB////8B/////jAyQD/8H/////////gOMCJA//wf/////////A4wIkH//B////////\n//DjAiQ//8H/////////+OMCJH//wf/////////84wKFJP//wf/////////+4wIzAf//\nwf/////////44wIzAf//wf/////////w4wIzA///wf/////////g4wKKHSASPnh///AA\nA+Hw4hMEGUASQBR8GnzhD+EQAeIPEwgZgBKAFIAagOEPHAEYBAPBh//wAAQh8AThDx8B\n4xMQGAITEFL+BwcA/iQHwMED5wcA/wB8cOEKHwJyAwGAAAMBgCM4MFMDAMABgOEKHAQi\nBCDBAAwAQAAMAEAzQAgEQgwAIILhC+ERgMEQACgBEAAhCGKAAEAoARATEOEKXwhAACD4\nwg4OIPgAD/+BA8AADg4AeBDhDBMgGAglAQQiAQQkDCBTIYYAAeDhCk8QgABCE0IkAhAU\nQhIC4QvhHggkAQThCx8hAsKD/AIQg/wCH/+EIACAQhCEEgjhC+EQCOIPP0H4QOIOH4By\nB//gAAf/4OIH4S0gECMCEuEMHgElBCAiBCBDAQCEIBMQ4QsvD/giB8AiB8AUQCQEIOEM\nTAgAAhByBBhAAAQYQCMhgCMGGOEN4TKD4ADBOIPgAD//gB5DOIHgQOEMPgQgAMEgAAGA\nCAABgGKEAEAgAAgShOEM4UAEAGACMmACCEICAMIBQkADACDhCxMgSAQACEBiGBwEABgc\nIwGDQgQAMAzhDYkjH//B//////////zjAyMf/8H//////////uMDhSMf/8H/////////\n/+MDMw///8H/////////gOMCMw///8H/////////wOMChTMP///B/////////+DjAjMH\n///B//////////jjAjMH///B//////////zjAjMH///B//////////7jAooTBCkBwOMB\nhRMCGkDjAaKFiST//8H//////////+MChSR//8H//////////uMChSQ//8H/////////\n/OMChSQf/8H/////////+OMCJA//wf/////////w4wKFJAf/wf/////////g4wKFJAP/\nwf/////////A4wIkAf/B/////////4DjAgXB///////////jA4UFwX/////////+4wMF\nwT/////////84wMFwR/////////44wMFwQ/////////w4wMFwQf//+AP///g4wM1Af//\nMv//gOMDJv/4Ih//4wQmH8AiA/jjBLmB4hCA4Q/hLwFA4Q/hLwIg4Q/hLwQQ4Q/hLwgI\n4Q/hLxAE4Q/hLyAC4Q/hL0AD4Q/hP4AEgOEO4U4BAAhA4Q7hTgIAECDhDuFOBAAgEOEO\n4U4IAEAI4Q7hThAAgAThDuFOIAEAAuEO4U5AAgAB4Q7hLoAEEoDhDeE9AQAIEsDhDeFt\nAgAQAAFg4Q3hbQQAIAACsOEN4W0IAEAABVjhDeFtEACAAAqs4Q3hbSAAgAAVVuEN4W1A\nAIAAKqvhDeF9gACDgFVVgOEM4RwBUkRAqqrA4QzhHAJSKCFVVWDhDOEcBFIQEqqqsOEM\n4QzBCAB4IC1VVVjhDOEMwRAAhEBGqqrs4QzhDMEgAQKAg1VVtuEM4QzBQAIBAQGqqxvh\nDOEcgMEEAgIA1VYNgOEL4SsBAMEIBAQAaqwGwOEL4SsCAMEQCAgANVgDYOEL4SsEAMEg\nEBAAWrABsOEL4SsIAMFAICAArWADWOEL4SsQAMGAQEABVsAGrOEL4SsgAcEAgEACq4AN\nXOEL4StAAsEBACAFVQAas+EL4TuABALBABAKqoA1YIDhCuFKAQAIBMEHCBVVQGrAQOEK\n4UoCABAIwQiEKqqg1YAg4QrhSgQAIBDBEEJVVVGrABDhCuFKCABAIMEgIaqqK1YACOEK\n4UoQAIBAwUAQ1VQWrAAE4QrhShABAIDBgAhqqAtYAAThCuFKEAIBAcEABDVQBbAABOEK\n4UoIBAICwQACGqAK4AAE4QrhSgQIBATBAAENQBXAAAThCuFKAhAICGKGgCsgAAThCuFK\nASAQEGJDQFYQAAThCuE7wCAgYiGgrAgADOEK4TtAQEBiENFYBAAY4QrhOyBAgGIIarAC\nADDhCuErEEFjBDVgAgBg4QrhKwgiYwIawAIAwOEK4SsEFGMBDcACAYDhCuErAghEhyAC\nA+EL4SsBBERAEAYG4QvhHIJEIAgMDOEL4RxBwQf////8BBgY4QvhLCD4Qw4EMDDhC+Es\nEcBDHghgYOEL4RwORHwQwMDhC+EcHFT48YGHwOEK4St//2MBz8sDH8AWGOED4UoHgAH8\nUgOH7gfAFzDhA4rhST4/gAHB+8AADIgSeEDhC4nhOAHAwHIBfAAcDhv+JxxgFAMO4SgG\nA2QD4DgMP/g2AmxgFAYOiuEoHgdkA95EcMAYJmfgM8AACQ7hKHgEVT2DgwAgNRgpkEIB\nQIZjDonhOIAAwEUP//+AFTzBPCzAAAPDjMwOiuE3AYABEuATDxKANVpE1DPOS0QOieFn\nAjgDgAMYJMf+FszBexiAAAMYhhgOiuFnBvwAgAcUJOeCRQE8GCFCBScACA6J4WcJhAYA\nCAwkEB9FAYhj4EIGMB4wDorhVxuACgAYJhzgNZgD4EICUYeoDuFXNgAEADATfyIDmDQB\nwGBDAnqqiA6J4VdMDBAAYMEcAAP/wBAADhXgJAYc4eEniAwiwBjBAA//4BADB8DhC4rh\nNgGQFDMgADAzA+Ow4QvhJgMIcgFASADAABAiwGzhC+E2BgAoI9ABQzAAJhvhC+F3CNIi\nIAFgAhIIIwaA4QrhBsEMByZmYEZABCYBQOEK4QbBGBBIiIE4gAgTQBOg4QrhNw+VVcFA\ngwAQAcAAIBNQ4QrhJjAAwSqqgHwAIAYgFSrhConhRmAAZmYTf8HwH/BAAAQADeEKiuFG\noAOZmSOAEBLAVICESICA4QXhBcEDP/3//v///2gLQJVKiKDhBeElB//B/A44////4CAU\nDFMXffEqgeEE4RUMIjjgExAiEYBVB4dm9j3hBOFVB//8KCAVIAfBAYSf/L78AAzhAYzh\nVQYAA1tBNEAgI3IYAAmgABCAFBThAeFlAgABIYmAMhBAQFUBoAACIBSE4QHhRgEBAAEk\nQEAigAgSQBKEQwLJyEQPiuFGAQH//kRAgAABIw+AEsdTBULB4DgO4Vp///8AARQIJTDg\nUgpVqBjgDuEXgALBn//SgCYBAAITECMOHDQoYVgOjOEXIBKAckAAAoAEAAEzFa7AwaBA\nABSqKCqADuEXEHIwNAAgAARACcEPEAALJVBUgA6K4ScQAMED39gAIAAJgHkKGAACQaYF\nD+E3DAAMMxgADgrBf/gAD4fB4WAO4XcDAA/////4Og//gDQHgOAO4Rd/Pr//8CcDgA7h\nJ3pAO1//QOEJieE4C///wf////////nU4Q3hagm/////ruLhPC3/5OIBv4G/geMXHkQB\n8AGA4xcRNUAAgOMXEcExzJWYwEMYnOMXHsFKEpYlIESkoOMXFMF5kpQh4ESkmOMXEsFA\nUpQlAESkhOMXEcEzjHQYwEMYuE66+fAvLgAUHzwAAS8uAAhOuvngLy4AEEJnAAB1AENB\nUkQAABAuAAAAAAAAEW8AAAAAAAAAAAAAAAAAADrwAAAOPAAGAAgAAAMQAAMAAHGkAC4A\nAgIFADEABgExAfsABwAAAAAAAAADAAwAAAAQSW5zdHJ1Y3Rpb25zAAAAAADAAAMBAAE5\nAAYBUwCVoAQAAAAAAAEAFQAMAQAAEFByaW50IEluc3RydWN0aW9ucwAAb24gTW91c2VX\naXRoaW4NU2hvd0JhbGxvb24gIlByaW50IGluc3R1Y3Rpb25zIGZvciB1c2luZyB0aGlz\nIHN0YWNrLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXByaW50IGNhcmQgZmll\nbGQgIkluc3RydWN0aW9ucyINZW5kIG1vdXNlVXAAAADoAAQBAAAGAb8ALgH2oAAAABpA\nAAEAAAAMAAAAEEdvIEJhY2sAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGlj\nayBoZXJlIHRvIGdvIGJhY2sgdG8gdGhlIGxhc3QgY2FyZCB5b3UgdmlzaXRlZCLCDSYi\nIGluIHRoaXMgc3RhY2suIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFs\nIGdXaGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28gZ1doZXJlRnJvbQ1lbmQg\nbW91c2VVcAAA9gAFAQABMgHNAUwB8iAAAAA+0wABABUADgEAABJQcm9jZWVkyQAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIFJl\nc291cmNlIFRvb2xzIGNhcmQuIg1lbmQgTW91c2VXaXRoaW4NDQ0Nb24gbW91c2VVcA1n\nbG9iYWwgZ1doZXJlRnJvbQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20Ndmlz\ndWFsIGRpc3NvbHZlIGZhc3QNZ28gY2FyZCAiTWFpbk1lbnUiDWVuZCBtb3VzZVVwAAAA\nIgAGAgQAFgAGADEBBQAAAAAAAAAAABUAGAAAACAAAAAAACIACAIFABcABQAzAQMAAAAA\nAAAAAAAVABQIAAAaAAAAAP/+cXOB8gAAAAsAKgAMACsADQAwAAwANAANAL8ADADDAA0B\nowAKAckADQapAAsGvwAJBsAADRK/AAwSygANEwAADBMKAA0TdAAME38ADRPHAAwT0gAN\nFTUADBVCAA0WDAALFiYADRa9AAwWyQANFvIADBb9AA0XJQAMFzMADRdeAAwXZgANF5sA\nDBehAA0X9QAMF/wADRhPAAwYWwANGJsADBimAA0Y/wAMGQoADRmQAAwZnAANGfEADBoA\nAA0abwALGowADRuSAAwbnQANG88ADBvZAA0cHgAMHCkADRxbAAwcZAANHu8ADB7wAA0e\n8gAMHv0ADSA5AAwgRAANIcQACSJXAA0l6AAMJfIADSb5AAwnBAANJ8sACSh9AA0oggAM\nKI0ADSppAAkrGgANKx4ACysxAA0sewAMLIgADS1aAAwtaQANLvwADC8LAA0v2AAML+wA\nDTHbAAsx7AANMq4ACzLGAA00lgALNKsADTf6AAw3/gANONEADDjVAA05BAAMOQcADTnI\nAAk6AwANOmEADDpnAA07CAAMOw4ADTwaAAw8JQANPHUADDyAAA09lwALPasADUFKAAtB\nZQANQ0IAC0NkAA1EIAALRCwADUywABBMyAANTMoAC0zTAA1S3AALUu4ADVUXAAtVIwAN\nasQADGrFAA0NQWJvdXQgQWV0ZSBSZXNvdXJjZXMgYW5kIFVzaW5nIHRoaXMgU3RhY2sN\nVGhlICdhZXV0JyAoQXBwbGUgRXZlbnQgVXNlciBUZXJtaW5vbG9neSkgcmVzb3VyY2Ug\nZGVzY3JpYmVzIGNvbW1vbiBBcHBsZSBldmVudHMgYXMgZGVmaW5lZCBpbiB0aGUgbGF0\nZXN0IHZlcnNpb24gb2YgdGhlIEFwcGxlIEV2ZW50IFJlZ2lzdHJ5LiBUaGUgJ2FldGUn\nIChBcHBsZSBFdmVudCBUZXJtaW5vbG9neSBFeHRlbnNpb24pIHJlc291cmNlIGRlc2Ny\naWJlcyBob3cgYW4gYXBwbGljYXRpb24gc3VwcG9ydHMgQXBwbGUgZXZlbnRzLiBPZnRl\nbiBpdCBpcyBhbiBleHRlbnNpb24gZnJvbSB0aGUgY29udGVudCBvZiB0aGUgJ2FldXQn\nLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAnYWV1dCcgYW5kICdhZXRlJyByZXNvdXJj\nZXMsIHNlZSB0aGUgbGF0ZXN0IEFwcGxlIEV2ZW50IFVzZXIgVGVybWlub2xvZ3kgUmVz\nb3VyY2VzIGRldmVsb3BlciBub3RlLiBUaGlzIHN0YWNrIGFsbG93cyB5b3UgdG8gY29u\ndmVydCBhbiAnYWV0ZScgcmVzb3VyY2UgdG8gYW5kIGZyb20gYSBjb3B5IG9mIHRoaXMg\nc3RhY2suIEFmdGVyIGRvaW5nIHNvLCB5b3UgY2FuIHZpZXcgdGhlIGNvbnRlbnQgb2Yg\ndGhpcyByZXNvdXJjZSBhcyB3ZWxsIGFzIGVkaXQgaXQuIFlvdSBjYW4gYWxzbyBnZW5l\ncmF0ZSB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSB0aGlzIHN0YWNrLCBzdWNoIGFzIHNh\nbXBsZSBjb2RlIGZvciB1c2luZyBBcHBsZSBldmVudHMgZnJvbSBsYW5ndWFnZXMgc3Vj\naCBhcyBIeXBlclRhbGssIFBhc2NhbCwgb3IgQy4NDUFuICdhZXRlJyByZXNvdXJjZSBn\ncm91cHMgaW5mb3JtYXRpb24gaW50byBmdW5jdGlvbmFsIGFyZWFzLCBlYWNoIG9mIHdo\naWNoIGlzIGNhbGxlZCBhIHN1aXRlLiBBIHBhcnRpY3VsYXIgcmVzb3VyY2UgbWlnaHQg\nZGVmaW5lIGEgdGV4dCBzdWl0ZSwgZ3JhcGhpYyBzdWl0ZSwgZGF0YWJhc2Ugc3VpdGUs\nIGV0Yy4gV2l0aGluIGVhY2ggc3VpdGUsIHRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIGRh\ndGE6IGV2ZW50IGRlc2NyaXB0aW9ucywgdXNlciBhY2Nlc3NpYmxlIG9iamVjdCBjbGFz\ncyBkZXNjcmlwdGlvbnMsIGNvbXBhcmlzb24gb3BlcmF0b3IgZGVzY3JpcHRpb25zLCBh\nbmQgZW51bWVyYXRvciBkZXNjcmlwdGlvbnMuIFRoaXMgc3RhY2sgcmVmbGVjdHMgdGhl\nIG9yZ2FuaXphdGlvbiBvZiB0aGUgJ2FldGUnIHJlc291cmNlIGFuZCB1c2VzIGNhcmRz\nIG9mIGRpZmZlcmVudCBiYWNrZ3JvdW5kcyB0byBjb250YWluIHRoZSBkaWZmZXJlbnQg\na2luZHMgb2YgaW5mb3JtYXRpb27RdGhlcmUgYXJlIHN1aXRlIGNhcmRzIHRoYXQgYWN0\nIGFzIHRoZSB0YWJsZSBvZiBjb250ZW50cyBvZiB0aGUgZGF0YSBpbiB0aGUgc3VpdGUs\nIGFzIHdlbGwgYXMgZXZlbnQgY2FyZHMsIGNsYXNzIGNhcmRzLCBjb21wYXJpc29uIGNh\ncmRzIGFuZCBlbnVtZXJhdG9yIGNhcmRzLg0NQmFsbG9vbiBoZWxwIGlzIGF2YWlsYWJs\nZSB0aHJvdWdob3V0IHRoZSBzdGFjay4gVXNlIGl0IHRvIHN1cHBsZW1lbnQgdGhlc2Ug\naW5zdHJ1Y3Rpb25zIGFuZCBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBmdW5jdGlvbnMg\nYW5kIGJlaGF2aW9yIG9mIGVhY2ggc3RhY2sgZWxlbWVudC4NDUEgbWVtb3J5IHBhcnRp\ndGlvbiBvZiAxNTAwayBvciBncmVhdGVyIGZvciBIeXBlckNhcmQgaXMgcmVjb21tZW5k\nZWQgZm9yIHVzZSB3aXRoIHRoaXMgc3RhY2suDQ0NQW4gT3ZlcnZpZXcgVGhpcyBTdGFj\naw1Zb3UgY2FuIG5hdmlnYXRlIGZyb20gY2FyZCB0byBjYXJkIGluIHRoaXMgc3RhY2sg\nYnkgY2hvb3NpbmcgaXRlbXMgaW4gdGhlINJBZXRlRWRpdG9y0yBtZW51LCBjbGlja2lu\nZyBvbiBidXR0b25zLCBvciBjbGlja2luZyBvbiB0ZXh0Lg0NVG8gYmVnaW4gdXNpbmcg\ndGhpcyBzdGFjaywgY2xpY2sgb24gdGhlINJSZXNvdXJjZSBUb29sc9MgYnV0dG9uIG9u\nIHRoaXMgY2FyZCBvciBjaG9vc2Ug0lJlc291cmNlIFRvb2xz0yBmcm9tIHRoZSBBZXRl\nRWRpdG9yIG1lbnUuIFlvdSBjYW4gZ28gdG8gYW55IG90aGVyIHNlY3Rpb24gb2YgdGhp\ncyBzdGFjayBmcm9tIGFueSBvdGhlciBjYXJkIGJ5IGNob29zaW5nIGEgc2VjdGlvbtVz\nIG5hbWUgZnJvbSB0aGlzIG1lbnUuIA0NVGhlIFJlc291cmNlIFRvb2xzIGNhcmQgYWN0\ncyBhcyBhIGNvbnRyb2wgY2VudGVyIGZvciBvcGVyYXRpbmcgb24gJ2FldGUnIHJlc291\ncmNlcywgYXMgd2VsbCBhcyBjcmVhdGluZyBuZXcgQXBwbGUgRXZlbnQgc3VpdGVzIGFu\nZCBhY2Nlc3NpbmcgZXhpc3Rpbmcgb25lcy4gV2l0aGluIHRoaXMgY2FyZCwgeW911Wxs\nIG5vdGljZSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgYnV0dG9ucyBmb3IgZXhlY3V0aW5n\nIGNvbW1hbmRzLCBhIHNjcmF0Y2ggYXJlYSBmb3IgaG9sZGluZyBnZW5lcmF0ZWQgaW5m\nb3JtYXRpb24sIGFuZCBhIGxpc3Qgb2YgdGhlIHN1aXRlcyBkZXNjcmliZWQgaW4gdGhl\nIHN0YWNrLg0NQ2xpY2tpbmcgb24gYSBzdWl0ZSBpZCBpbiB0aGUgbWFpbiBtZW51IHRh\na2VzIHlvdSB0byB0aGUgY2FyZCBmb3IgdGhhdCBzdWl0ZS4gRWFjaCBzdWl0ZSBjYXJk\nIGNvbnRhaW5zIGxpc3RzIG9mIGV2ZW50cywgY2xhc3NlcywgY29tcGFyaXNvbnMgYW5k\nIGVudW1lcmF0b3JzLiBZb3UgY2FuIGNsaWNrIG9uIGFuIGl0ZW0gaW4gZWFjaCBvZiB0\naGVzZSBsaXN0cyB0byBhY2Nlc3MgYSBjYXJkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24g\nYWJvdXQgdGhhdCBpdGVtLiBUaGlzIHN0YWNrIGFsc28gY29udGFpbnMgYW4gZXhhbXBs\nZSAnYWV0ZScgcmVzb3VyY2Ugd2hpY2ggeW91IGNhbiB1c2UgdG8gYmVjb21lIGZhbWls\naWFyIHdpdGggdGhlIHN0YWNr1XMgbGF5b3V0LiANDU9mIGNvdXJzZSwgeW911XJlIHBy\nb2JhYmx5IG1vcmUgaW50ZXJlc3RlZCBpbiB3b3JraW5nIHdpdGggYW4gJ2FldGUnIHJl\nc291cmNlIG9mIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBvciBjcmVhdGluZyBhIHdo\nb2xlIG5ldyAnYWV0ZScgcmVzb3VyY2UuIEJlZm9yZSBhdHRlbXB0aW5nIHRvIGRvIGVp\ndGhlciBvZiB0aGVzZSwgdGhlIGZpcnN0IHRoaW5nIHlvdSBzaG91bGQgZG8gaXMgbWFr\nZSBhIGNvcHkgb2YgdGhpcyBzdGFjayB0byB3b3JrIHdpdGguIFRvIGRvIHRoaXMsIGNo\nb29zZSDSTmV3IEVkaXRvcsnTIGZyb20gdGhlIEFldGVFZGl0b3IgbWVudS4gSWYgeW91\nciBhcHBsaWNhdGlvbiBhbHJlYWR5IGhhcyBhbiAnYWV0ZScgcmVzb3VyY2UsIHlvdSBj\nYW4gcmVhZCBpdCBpbnRvIHRoaXMgc3RhY2sgYnkgY2xpY2tpbmcgb24gdGhlICJJbXBv\ncnQgYWV0ZSIgYnV0dG9uLiBBZnRlciBjaG9vc2luZyBhbiBhcHBsaWNhdGlvbiBmcm9t\nIHN0YW5kYXJkIGZpbGUsIHRoZSAnYWV0ZScgcmVzb3VyY2Ugd2lsbCBiZSByZWFkIGlu\nIGFuZCBjb252ZXJ0ZWQgaW50byBkYXRhIHByZXNlbnRlZCBpbiB0aGUgc3RhY2suIA0N\nTm9ybWFsbHksIHRoZSBzdGFjayB3aWxsIGRpc3BsYXkgdGhlIHNhbWUgY29udGVudCBh\ncyB0aGUgJ2FldGUnIHJlc291cmNlLiBJbiBvdGhlciB3b3JkcywgeW911WxsIHNlZSB0\naGUgY29udGVudCBpbiB0aGUgc2FtZSBvcmRlciBhcyBpZiB5b3XVZCBvcGVuZWQgYW4g\nJ2FldGUnIHJlc291cmNlIHVzaW5nIFJlc0VkaXQuIEhvd2V2ZXIsIHRoaXMgbWVhbnMg\ndGhhdCB5b3Ugd2lsbCBub3QgYmUgc2VlaW5nIGFsbCB0aGUgZXZlbnRzIGFuZCBjbGFz\nc2VzIHRoYXQgeW91IGhhZCBpbmhlcml0ZWQgZnJvbSB0aGUgJ2FldXQnIHJlc291cmNl\nLiBPcHRpb25hbGx5LCB5b3UgbWF5IGFsc28gbWVyZ2UgdGhlICdhZXRlJyByZXNvdXJj\nZSB3aXRoIHRoZSAnYWV1dCcgcmVzb3VyY2Ugd2hpY2ggaGFzIGJlZW4gaW5jbHVkZWQg\naW4gdGhpcyBzdGFjay4NDUFmdGVyIHlvddV2ZSByZWFkIGluIGFuICdhZXRlJyByZXNv\ndXJjZSAob3IgYWx0ZXJuYXRpdmVseSwgYmVndW4gd2l0aCBhbiBlbXB0eSBzdGFjayks\nIHlvdSBjYW4gc3RhcnQgZWRpdGluZyB0aGUgY29udGVudHMgb2YgdGhlIHN0YWNrLiBU\naGVyZSBhcmUgYnV0dG9ucyB3aGljaCB5b3UgY2FuIHVzZSB0byBjcmVhdGUgY2FyZHMg\nZm9yIGEgbmV3IHN1aXRlLCBldmVudCwgY2xhc3MsIGNvbXBhcmlzb24sIG9yIGVudW1l\ncmF0b3IuIFlvdSBtYXkgYWxzbywgaWYgeW91IHdpc2gsIHVzZSB0aGUgIk5ldyBDYXJk\nIiBvciDSRGVsZXRlIENhcmTTIG1lbnUgaXRlbXMgZnJvbSBIeXBlckNhcmTVcyBFZGl0\nIG1lbnUuIFlvdSBjYW4gbW9kaWZ5IHRoZSAnYWV0ZScgaW5mb3JtYXRpb24gb24gdGhl\nc2UgY2FyZHMgYnkgY2hhbmdpbmcgdGhlIGRhdGEgaW4gdGhlcmUgZmllbGRzLiBFYWNo\nIGNhcmQgY29udGFpbnMgbGlzdHMgYW5kIGJ1dHRvbnMgZm9yIGFkZGluZywgZGVsZXRp\nbmcgb3IgYWNjZXNzaW5nIGl0ZW1zIGZvciBlZGl0aW5nLg0NQWZ0ZXIgeW91IGZpbmlz\naCBlZGl0aW5nIHRoZSBzdGFjaywgeW91IG1heSBvYnRhaW4gaW5mb3JtYXRpb24gZnJv\nbSBpdC4gVGhpcyBpbmZvcm1hdGlvbiwgaWYgaXQgaXMgaW4gVEVYVCBmb3JtLCB3aWxs\nIGdvIHRvIHRoZSBzY3JhdGNocGFkIGZpZWxkIG9uIHRoZSBSZXNvdXJjZSBUb29scyBj\nYXJkIHdoZXJlIHlvdSBjYW4gdmlldyBpdCBpbiBpdHMgZW50aXJldHkuIFRoaXMgY2Fy\nZCBhbHNvIGhhcyBidXR0b25zIHdoaWNoIGxldCB5b3UgcHJpbnQgdGhlIGluZm9ybWF0\naW9uIGluIHRoZSBzY3JhdGNocGFkLCBzYXZlIGl0IHRvIGEgZmlsZSwgb3Igd3JpdGUg\naXQgdG8gdGhlIGNsaXBib2FyZC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYnV0dG9u\ncyBmb3IgZ2VuZXJhdGluZyBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgaW5m\nb3JtYXRpb246DQ2lIE91dHB1dCBhZXRlIC0gd3JpdGVzIHlvdXIgJ2FldGUnIHJlc291\ncmNlIHRvIHlvdXIgYXBwbGljYXRpb24uDaUgRGVyZXogYWV0ZSAtIGdlbmVyYXRlcyB0\naGUgcmVzb3VyY2UgaW4gZGVyZXogZm9ybWF0LCB3aGljaCB5b3UgY2FuIHRoZW4gY29w\neSB0byBNUFcgYW5kIHRvIHJleiB3aXRoIHlvdXIgcHJvZ3JhbS4NpSBTZXJ2ZXIgY29k\nZSAtIHNhbXBsZSBjb2RlIG9uIGhvdyB5b3UgY2FuIHByb2Nlc3MgdGhlc2UgQXBwbGUg\nRXZlbnRzIGFzIGEgc2VydmVyLg2lIENsaWVudCBjb2RlIC0gc2FtcGxlIGNvZGUgb24g\naG93IHlvdSBjYW4gc2VuZCB0aGVzZSBBcHBsZSBFdmVudHMgYXMgYSBjbGllbnQuDQ1G\naW5hbGx5LCB0aGVyZSBhcmUgYSBsb3Qgb2YgaW50ZXJuYWwgbGlua3MgdGhhdCBuZWVk\nIHRvIGJlIG1haW50YWluZWQgYmV0d2VlbiB0aGUgY2FyZHMgb2YgdGhpcyBzdGFjaywg\nYSBzdWl0ZSBwb2ludHMgdG8gaXRzIGV2ZW50IGFuZCB0aGUgZXZlbnQgcG9pbnRzIHRv\nIGl0cyBjb2RlLCBldGMuIFRoZXNlIGxpbmtzIGFyZSBtYWludGFpbmVkIGF1dG9tYXRp\nY2FsbHkuIElmIGZvciBzb21lIHJlYXNvbiB0aGVzZSBsaW5rcyBhcmUgYnJva2VuLCB0\naGVyZSBpcyBhbiBpbnRlcm5hbCBwcm9jZWR1cmUsIENvbnN0cnVjdExpbmssIHRoYXQg\nbGV0cyB5b3UgcmVjb25zdHJ1Y3QgdGhlIGxpbmtzIGFnYWluLiBUbyB1c2UgdGhpcyBy\nb3V0aW5lIHR5cGUg0kNvbnN0cnVjdExpbmvTIGluIEh5cGVyQ2FyZNVzIG1lc3NhZ2Ug\nYm94IGFuZCBoaXQgdGhlIGVudGVyIGtleSB0byBleGVjdXRlIGl0LiBIb3BlZnVsbHks\nIHlvddVsbCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIGZlYXR1cmUuDQ0NVXNpbmcgdGhl\nIEFldGVFZGl0b3IgTWVudQ1Zb3UgY2FuIHVzZSB0aGlzIG1lbnUgdG8gbmF2aWdhdGUg\nZnJvbSBvbmUgc2VjdGlvbiBvZiB0aGUgc3RhY2sgdG8gYW5vdGhlciBvciBwZXJmb3Jt\nIG90aGVyIHVzZWZ1bCB0YXNrcy4gQmVsb3cgaXMgYSBkZXNjcmlwdGlvbiBvZiBlYWNo\nIG1lbnUgaXRlbToNDaUgSW5zdHJ1Y3Rpb25zIC0gdGFrZXMgeW91IHRvIHRoZSBJbnN0\ncnVjdGlvbnMgY2FyZC4NpSBQcmVmZXJlbmNlcyAtIHRha2VzIHlvdSB0byB0aGUgUHJl\nZmVyZW5jZXMgY2FyZC4NpSBSZXNvdXJjZSBUb29scyAtIHRha2VzIHlvdSB0byB0aGUg\nUmVzb3VyY2UgVG9vbHMgY2FyZC4NpSCuIFN1aXRlcyAtIHRha2VzIHlvdSB0byB0aGUg\nZmlyc3QgQXBwbGUgRXZlbnQgU3VpdGVzIGNhcmQuDaUgRXZlbnRzIC0gdGFrZXMgeW91\nIHRvIHRoZSBmaXJzdCBldmVudCBjYXJkIG9mIHRoZSBmaXJzdCBzdWl0ZSBsaXN0ZWQg\naW4gUmVzb3VyY2UgVG9vbHMuDaUgQ2xhc3Nlcy0gdGFrZXMgeW91IHRvIHRoZSBmaXJz\ndCBjbGFzcyBjYXJkIG9mIHRoZSBmaXJzdCBzdWl0ZSBsaXN0ZWQgaW4gUmVzb3VyY2Ug\nVG9vbHMuDaUgRW51bWVyYXRpb25zLSB0YWtlcyB5b3UgdG8gdGhlIGZpcnN0IGVudW1l\ncmF0aW9uIGNhcmQgb2YgdGhlIGZpcnN0IHN1aXRlLg2lIENvbXBhcmlzb25zIC0gdGFr\nZXMgeW91IHRvIHRoZSBmaXJzdCBjb21wYXJpc29uIGNhcmQgb2YgdGhlIGZpcnN0IHN1\naXRlIGxpc3RlZCBpbiBSZXNvdXJjZSBUb29scy4NpSBOZXcgRWRpdG9yySAtIGNyZWF0\nZXMgYW4gZW1wdHkgY29weSBvZiB0aGUgc3RhY2sgYW5kIHRoZW4gdGFrZXMgeW91IHRv\nIGl0LiBIb2xkaW5nIGRvd24gdGhlIHNoaWZ0IGtleSB0YWtlcyB5b3UgdG8gdGhpcyBz\ndGFjayBpbiBhIG5ldyB3aW5kb3cuDaUgRW1wdHkgU3RhY2vJIC0gY2xlYXJzIHRoZSBz\ndGFjayBvZiBhbnkgc3RvcmVkINRhZXRl1SBpbmZvcm1hdGlvbi4gVGhpcyBhY3Rpb24g\naXMgbm90IHVuZG9hYmxlLg2lIExvY2FsaXplIGFldGXJIC0gY3JlYXRlcyBhIG5ldyBz\ndGFjayBpbiB3aGljaCB5b3UgY2FuIHRyYW5zbGF0ZSBuYW1lcyBpbiB0aGUgYWN0aXZl\nIEFldGVFZGl0b3Igc3RhY2sgaW50byBhbm90aGVyIGxhbmd1YWdlLg0NDVVzaW5nIHRo\nZSBSZXNvdXJjZSBUb29scyBDYXJkDVRoZXJlIGFyZSB0d28gZmllbGRzIG9uIHRoaXMg\nY2FyZC4gVGhlIGxhcmdlciBvZiB0aGUgdHdvIGlzIGEgc2NyYXRjaHBhZCBhcmVhIHdo\naWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgb3V0cHV0IG9mIGNsaWVudCBvciBzZXJ2ZXIg\nc2FtcGxlIGNvZGUsIG9yIHRoZSBvdXRwdXQgb2YgYSBkZXJlemVkICdhZXRlJyByZXNv\ndXJjZS4gVGhlcmUgYXJlIGZvdXIgYnV0dG9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBm\naWVsZCBhcyBkZXNjcmliZWQgYmVsb3c6DQ2lIENsZWFyIEZpZWxkIC0gY2xlYXJzIHRo\nZSBjb250ZW50cyBvZiB0aGUgc2NyYXRjaHBhZCBmaWVsZC4NpSBDb3B5IEZpZWxkIC0g\nY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc2NyYXRjaHBhZCBmaWVsZCBpbnRvIHRo\nZSBjbGlwYm9hcmQuDaUgUHJpbnQgRmllbGQgLSBwcmludHMgdGhlIGNvbnRlbnRzIG9m\nIHRoZSBzY3JhdGNocGFkIGZpZWxkLg2lIFNhdmUgQXPJIC0gc2F2ZXMgdGhlIGNvbnRl\nbnQgb2YgdGhlIHNjcmF0Y2hwYWQgZmllbGQgdG8gYSBURVhUIGZpbGUuDQ1UaGUgb3Ro\nZXIgZmllbGQgaXMgYSBsaXN0IG9mIHRoZSBzdWl0ZXMgaW4gdGhpcyBzdGFjay4gWW91\nIGNhbiBhY2Nlc3Mgc3VpdGUgaW5mb3JtYXRpb24gYnkgY2xpY2tpbmcgb24gb25lIG9m\nIHRoZSBzdWl0ZSBjb2RlcyBpbiB0aGUgbGlzdC4gU2VsZWN0IHRoZSAiTmV3IHN1aXRl\nIiBidXR0b24gbG9jYXRlZCBiZWxvdyB0aGlzIGZpZWxkIHRvIGNyZWF0ZSBhIG5ldyBz\ndWl0ZS4NDUNsaWNraW5nIG9uIHRoZSAiUHJlZmVyZW5jZXPJIiBidXR0b24gd2lsbCB0\nYWtlIHlvdSB0byB0aGUgUHJlZmVyZW5jZXMgY2FyZNFzZWUgdGhlIHNlY3Rpb24gb24g\ndGhlIFByZWZlcmVuY2VzIGNhcmQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2V0\ndGluZyBQcmVmZXJlbmNlcy4NDU9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGlzIGNh\ncmQgeW911WxsIG5vdGljZSB0aGF0IHRoZXJlIGFyZSBhIG51bWJlciBvZiBidXR0b25z\nIHRoYXQgYWxsb3cgeW91IHRvIGltcG9ydCDUYWV0ZdUgZGF0YSBvciBnZW5lcmF0ZSBp\nbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHN0YWNrLiBUaGV5\nIGFyZSBkZXNjcmliZWQgYmVsb3c6DQ2lIE91dHB1dCBhZXRlIC0gd3JpdGVzIHRoZSAn\nYWV0ZScgb3V0IHRvIHlvdXIgYXBwbGljYXRpb24uIEFmdGVyIHRoZSByZXNvdXJjZSBk\nYXRhIGlzIGNyZWF0ZWQsIHlvdSB3aWxsIGJlIGFza2VkIHdoaWNoIGZpbGUgdG8gc2F2\nZSBpdCB0by4gSWYgeW91IGNhbmNlbCBvdXQgb2YgdGhpcyBzdGFuZGFyZCBmaWxlIGRp\nYWxvZywgdGhlIGNvbnRlbnRzIG9mIHRoZSDUYWV0ZdUgd2lsbCBiZSBwdXQgb24gdGhl\nIGNsaXBib2FyZC4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3aXNoIHRvIHBhc3Rl\nIHRoaXMgcmVzb3VyY2UgaW50byBhIGZpbGUgdXNpbmcgUmVzRWRpdC4gDQ2lIEltcG9y\ndCBhZXRlIC0gbGV0cyB5b3UgcmVhZCBpbiBhbiAnYWV0ZScgcmVzb3VyY2UgZnJvbSBh\nIGZpbGUuIElmIHlvdSBnZXQgYSBuZXcgYXBwbGljYXRpb24sIGZvciBpbnN0YW5jZSwg\nYW5kIHdpc2ggdG8gZmluZCBvdXQgd2hpY2ggQXBwbGUgZXZlbnRzIGl0IHN1cHBvcnRz\nIHRvIHVzZSB0aGlzIGZlYXR1cmUsIHRoaXMgaXMgd2hhdCB5b3XVZCBkby4gQ3JlYXRl\nIGEgbmV3IHN0YWNrIGJ5IGNob29zaW5nIHRoZSDSTmV3IEVkaXRvcsnTIG1lbnUgaXRl\nbSBmcm9tIHRoZSBBZXRlRWRpdG9yIG1lbnUuIE5leHQsIGNsaWNrIHRoZSBJbXBvcnQg\nYWV0ZSBidXR0b24gdG8gcmVhZCB0aGUgJ2FldGUnIHJlc291cmNlIGZyb20gdGhlIGZp\nbGUgeW911XZlIGNob3NlbiBpbnRvIHRoZSBzdGFjay4gQWx0ZXJuYXRpdmVseSwgaG9s\nZCBkb3duIHRoZSBvcHRpb24ga2V5IHdoaWxlIGNsaWNraW5nIG9uIHRoZSBJbXBvcnQg\nYWV0ZSBidXR0b24gdG8gbWVyZ2UgdGhlINRhZXRl1SBkYXRhIHdpdGggdGhlIHN0YWNr\n1XMgYnVpbHQtaW4gJ2FldXQnIHJlc291cmNlLiAgKEluIHRoZSBmdXR1cmUsIHdoZW4g\ndGhlICdhZXV0JyByZXNvdXJjZSBnZXRzIHJldmlzZWQsIHlvddVsbCB3YW50IHRvIGNv\ncHkgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgcmVzb3VyY2UgaW50byB0aGUgc3RhY2sg\ndG8ga2VlcCBpdCB1cCB0byBkYXRlKS4gQnkgdXNpbmcgdGhpcyBvcHRpb24sIHRoZSBl\ndmVudHMgYW5kIGNsYXNzZXMgZnJvbSBidWlsdC1pbiAnYWV1dCcgcmVzb3VyY2UgYW5k\nIG5vdCBmcm9tIHRoZSAnYWV0ZScgZGF0YSB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoIGFu\nZCB3aWxsIG5vdCBnZXQgd3JpdHRlbiB3aGVuIHRoZSAnYWV0ZScgcmVzb3VyY2UgaXMg\nd3JpdHRlbiBvdXQuIFBsZWFzZSBub3RlIGhvd2V2ZXIsIHRoYXQgbm8gYXR0ZW1wdCBp\ncyBtYWRlIHRvIHdyaXRlIGl0IG91dCBpbiBpdNVzIG1vc3QgY29tcGFjdCBmb3JtLiBJ\nZiB5b3UgYXJlIGNvbmNlcm5lZCB3aXRoIGtlZXBpbmcgdGhlICdhZXRlJyBpbiBpdHMg\nbW9zdCBjb21wYWN0IGZvcm0sIHlvdSBzaG91bGQgbm90IHVzZSB0aGUgb3B0aW9uIGF0\nIHRoaXMgdGltZS4gDQ1Zb3UgbWF5IHdvbmRlciB3aGF0IG1pZ2h0IGhhcHBlbiBpZiB5\nb3UgZGlkbtV0IGVtcHR5IHRoZSBzdGFjayBiZWZvcmUgeW91IGltcG9ydGVkIGFuICdh\nZXRlJyByZXNvdXJjZS4gVGhlIG9yaWdpbmFsIGNvbnRlbnQgd291bGQgcmVtYWluLCBh\nbmQgdGhlIGV4dGVybmFsICdhZXRlJyB3b3VsZCBlaXRoZXIgYmUgYWRkZWQgdG8gdGhl\nIHN0YWNrIG9yIGl0IHdvdWxkIHJlcGxhY2UgYW4gZXhpc3RpbmcgZXZlbnQgaW4gdGhl\nIHN0YWNrLiBUaGlzIHdvdWxkIGJlIGRvbmUgb24gYSB3aG9sZSBldmVudCBiYXNpcywg\nYW5kIHRoZXJlIHdvdWxkIGJlIG5vIGF0dGVtcHQgdG8gbWVyZ2UgdGhlIGRhdGEgaW50\nbyB0aGUgc2FtZSBldmVudC4gDQ2lIERlcmV6IGFldGUgLSBwcm9kdWNlcyBkYXRhIGlu\nIGRlcmV6IGZvcm1hdCwgd2hpY2ggdGhlbiBjYW4gYmUgY29waWVkIHRvIE1QVyBhbmQg\ncmV6ZWQgd2l0aCB5b3VyIHByb2dyYW0uIFRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5k\nIGlzIHRleHR1YWwgYW5kIGFwcGVhcnMgaW4gdGhlIHNjcmF0Y2hwYWQgYXJlYS4gSW4g\ndGhlIGNhc2UgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBpcyA+IDMySywgaXQgd2ls\nbCBiZSB3cml0dGVuIHRvIGEgVEVYVCBmaWxlIGluc3RlYWQuDQ2lIFNlcnZlciBjb2Rl\nIC0gZ2VuZXJhdGVzIHNhbXBsZSBjb2RlIHdoaWNoIHNob3dzIGhvdyB5b3UgY2FuIHBy\nb2Nlc3MgQXBwbGUgZXZlbnRzIGFzIGEgc2VydmVyLiBUaGUgc2FtcGxlIGNvZGUgZGlz\ncGxheWVkIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBQYXNjYWwgYW5kIEMuIFdpdGggYXNz\nZW1ibGVyLCBvbmx5IG5hbWUgY29uc3RhbnRzIHdpbGwgYmUgZGlzcGxheWVkLiBJZiB5\nb3UgYXJyaXZlIGF0IHRoaXMgY2FyZCBmcm9tIGFuIGV2ZW50IGNhcmQsIHlvdSBjYW4g\naG9sZCBkb3duIHRoZSBvcHRpb24ga2V5IHdoaWxlIGNsaWNraW5nIHRoaXMgYnV0dG9u\nIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2RlIGZyb20gYSBzaW5nbGUgZXZlbnQgaW5zdGVh\nZCBvZiBmcm9tIGFsbCBldmVudHMuDQ2lIENsaWVudCBjb2RlIC0gZ2VuZXJhdGVzIHNh\nbXBsZSBjb2RlIHdoaWNoIHNob3dzIHlvdSBob3cgeW91IGNhbiBzZW5kIEFwcGxlIGV2\nZW50cyBhcyBhIGNsaWVudC4gWW91IGNhbiBjaG9vc2Ugd2hpY2ggbGFuZ3VhZ2UgaW4g\nd2hpY2ggdG8gdmlldyB0aGUgY29kZSBmcm9tIHRoZSBQcmVmZXJlbmNlcyBjYXJkLiBZ\nb3UgY2FuIHRoaW5rIG9mIHRoaXMgYXMgYSBkeW5hbWljIGN1c3RvbSBzYW1wbGUgY29k\nZSBnZW5lcmF0b3Igd2hpY2ggY3JlYXRlcyBjdXN0b20gY29kZSB0YWlsb3JlZCB0byB5\nb3VyIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uIFlvdSBtaWdodCBldmVuIGJlIGFibGUg\ndG8gY29weSB0aGUgY29kZSBhbmQgdHJ5IGl0IGluIGEgcHJvZ3JhbSBhcyBpcywgYnV0\nIHBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoaXMgc2FtcGxlIGNvZGUgaGFzIG5vdCBiZWVu\nIHRlc3RlZCBpbiB0aGlzIHZlcnNpb24gYW5kIG1heSBub3Qgd29yayBjb21wbGV0ZWx5\nLiBJZiB5b3UgYXJyaXZlIGF0IHRoaXMgY2FyZCBmcm9tIGFuIGV2ZW50IGNhcmQsIHlv\ndSBjYW4gaG9sZCBkb3duIHRoZSBvcHRpb24ga2V5IHdoaWxlIGNsaWNraW5nIHRoaXMg\nYnV0dG9uIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2RlIGZyb20gYSBzaW5nbGUgZXZlbnQg\naW5zdGVhZCBvZiBmcm9tIGFsbCBldmVudHMuDQ0NU2V0dGluZyBQcmVmZXJlbmNlcw1Z\nb3UgY2FuIGFjY2VzcyB0aGUgUHJlZmVyZW5jZXMgY2FyZCBieSBjbGlja2luZyBvbiB0\naGUg0lByZWZlcmVuY2XJ0yBidXR0b24gb24gdGhlIFJlc291cmNlIFRvb2xzIGNhcmQg\nb3IgYnkgY2hvb3Npbmcg0lByZWZlcmVuY2Vz0yBmcm9tIHRoZSBBZXRlRWRpdG9yIG1l\nbnUuIEZyb20gdGhpcyBjYXJkIHlvdSBjYW4gc3BlY2lmeSBoZWFkZXIgaW5mb3JtYXRp\nb24gYW5kIGNob29zZSBpdGVtcyBmcm9tIGFuIGFzc29ydG1lbnQgb2Ygb3B0aW9ucy4g\nQmVsb3cgYXJlIHNvbWUgb2YgdGhlIGl0ZW1zIG9uIHRoZSBQcmVmZXJlbmNlcyBjYXJk\nIGFuZCB3aGF0IHRoZXkgZG86DQ2lIFJlc291cmNlIFR5cGUgLSBkZXRlcm1pbmVzIHRo\nZSByZXNvdXJjZSB0eXBlIG9mIHRoZSByZXNvdXJjZS4gSXQgc2hvdWxkIG5vcm1hbGx5\nIGJlICdhZXRlJy4gT24gdGhlIHJhcmUgb2NjYXNpb24gd2hlcmUgeW91IG1pZ2h0IHdh\nbnQgdG8gd3JpdGUgaXQgb3V0IGFzIGFuICdhZXV0JywgeW91IGNhbiBjaGFuZ2UgdGhp\ncyBpdGVtIHRvICdhZXV0JyBiZWZvcmUgeW91IG91dHB1dCBpdC4NpSBDbGllbnQgTGFu\nZ3VhZ2UgLSBsZXRzIHlvdSBjaG9vc2Ugd2hpY2ggY2xpZW50IGxhbmd1YWdlIHlvdSB3\naXNoIHRvIHVzZS4gVGhlIGNob2ljZXMgaW4gdGhpcyB2ZXJzaW9uIGlzIG9mIHRoZSBz\ndGFjayBhcmU6ICdhZXRlJyBuYW1lLCBIeXBlclRhbGssIE1QVyBTaGVsbCwgUGFzY2Fs\nLCBhbmQgQy4gSWYgeW91IGRvbtV0IG5lZWQgdG8gZ2VuZXJhdGUgYW55IHNhbXBsZSBj\nb2RlIHlvdSBzaG91bGQgc2V0IHRoaXMgaXRlbSB0byAnYWV0ZScgbmFtZSwgb3RoZXJ3\naXNlIGl0IHdpbGwgYmUgc2xvd2VyIHRvIGVkaXQgZXZlbnQgcGFyYW1ldGVycy4gRm9y\nIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIGNsaWVudCBsYW5ndWFnZXMsIHJl\nZmVyIHRvIHRoZSBhcHBlbmRpeCBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuDaUg\nU2VydmVyIExhbmd1YWdlIC0gbGV0cyB5b3UgY2hvb3NlIHRoZSBzZXJ2ZXIgbGFuZ3Vh\nZ2UgeW911WxsIGJlIHVzaW5nLiBUaGUgY2hvaWNlcyBpbiB0aGlzIHZlcnNpb24gaXMg\nb2YgdGhlIHN0YWNrIGFyZTogUGFzY2FsLCBDLCBhbmQgQXNzZW1ibGVyLiBJZiBBc3Nl\nbWJsZXIgaGFzIGJlZW4gY2hvc2VuLCB0aGVuIG9ubHkgdGhlIGNvbnN0YW50cyB3aWxs\nIGJlIGdlbmVyYXRlZC4NpSBTb3J0IEV2ZW50cyBieSBOYW1lIC0gd2hlbiBhbiAnYWV0\nZScgcmVzb3VyY2UgaXMgcmVhZCBpbiwgdGhlIG9yZGVyaW5nIG9mIHRoZSBldmVudHMs\nIGNsYXNzZXMsIGV0Yy4gd2lsbCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFy\nZSBpbiB0aGUgcmVzb3VyY2UuIFRoZXJlZm9yZSB3aGVuIHlvdSB3cml0ZSBpdCBvdXQs\nIGl0IHdpbGwgYWxzbyByZXRhaW4gaXRzIG9yZGVyaW5nLiBJZiB5b3UgZG9u1XQgcmVh\nbGx5IGNhcmUgYWJvdXQgcHJlc2VydmluZyB0aGlzIG9yZGVyLCB0aGVuIGNoZWNraW5n\nIHRoaXMgaXRlbSB3aWxsIHNvcnQgdGhlc2UgZWxlbWVudHMgYWxwaGFiZXRpY2FsbHku\nDQ1UaGUgb3RoZXIgb3B0aW9ucyBvbiB0aGUgUHJlZmVyZW5jZXMgY2FyZCBhcmUgZm9y\nIHVzZSB3aXRoIFBhc2NhbCBjbGllbnQgc2FtcGxlIG9ubHkuIFBsZWFzZSByZWZlciB0\nbyB0aGUgc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50IHdoaWNoIGNvdmVycyB0aGF0IGZv\nciBtb3JlIGluZm9ybWF0aW9uLg0NVHJhbnNsYXRpb24gVGFibGUNVGhpcyBidXR0b24g\nY3JlYXRlcyBhIGxpc3Rpbmcgb2YgYWxsIHRoZSBsb2NhbGl6YWJsZSBuYW1lcyBpbiB0\naGUgQWV0ZUVkaXRvciBzdGFjayBhbmQgcGxhY2VzIHRoZW0gd2l0aCB0cmFuc2xhdGlv\nbiBwbGFjZWhvbGRlcnMgaW50byB0aGUg0kNvZGUgU2NyYXRjaHBhZNMgZmllbGQgb2Yg\ndGhlINJSZXNvdXJjZSBUb29sc9MgY2FyZC4NDUVkaXRpbmcgYW4griBTdWl0ZXMgQ2Fy\nZA1FYWNoIK4gU3VpdGUgY2FyZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQg\naXRzIHN1aXRlIGFuZCBhY3RzIGFzIGEgdGFibGUgb2YgY29udGVudHMgZm9yIGFsbCBv\nZiB0aGUgZXZlbnRzLCBjbGFzc2VzLCBjb21wYXJpc29uIG9wZXJhdG9ycywgYW5kIGVu\ndW1lcmF0b3JzIGluIGl0LiBZb3UgY2FuIGNsaWNrIG9uZSBvZiB0aGVzZSBpdGVtcyB0\nbyBnbyB0byBhIGNhcmQgd2hlcmUgeW91IGNhbiBlZGl0IGl0cyBjb250ZW50cy4gQ2xp\nY2sgb24gdGhlINJOZXfTIGJ1dHRvbiBuZXh0IHRvIGVhY2ggc2VjdGlvbiB0byBhZGQg\nYW4gaXRlbSBhbmQgZ28gdG8gYSBuZXcgY2FyZCBmb3IgaXQuIElmIHlvdSBjaG9vc2Ug\ndG8gZGVsZXRlIG9yIHJlbmFtZSBhbiBpdGVtLCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8g\ndGhpcyBmcm9tIHRoZSBpdGVt1XMgY2FyZCByYXRoZXIgdGhhbiBhbiCuIFN1aXRlIGNh\ncmQuDQ0NRWRpdGluZyBhbiBFdmVudCBDYXJkDUVhY2ggRXZlbnQgY2FyZCBjb250YWlu\ncyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGV2ZW50LiBDbGlja2luZyB0aGUg0lNob3cg\nU2NyaXB00yBvciDSSGlkZSBTY3JpcHTTIGJ1dHRvbnMgd2lsbCBkaXNwbGF5IG9yIGhp\nZGUgYSBmaWVsZCB3aGljaCBzdW1tYXJpemVzIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24g\nYWJvdXQgdGhlIGV2ZW50IHBhcmFtZXRlcnMuIFRoaXMgZmllbGQgYWxzbyBhY3RzIGFz\nIGEgZGlyZWN0b3J5IGZvciBldmVudHMuIE9ubHkgb25lIHBhcmFtZXRlciBpbiB0aGlz\nIGZpZWxkIGNhbiBiZSBlZGl0ZWQgYXQgYSB0aW1lLiBDbGlja2luZyBvbiBhIHBhcmFt\nZXRlciB3aWxsIGFsbG93IHlvdSB0byBlZGl0IGl0LiBBZnRlciBkb2luZyB0aGlzLCB0\naGUgcGFyYW1ldGVyIHN1bW1hcnkgZmllbGQgd2lsbCBiZSBoaWRkZW4gYW5kIHRoZSBw\nYXJhbWV0ZXIgeW91IGNsaWNrZWQgb24gd2lsbCBiZSBkaXNwbGF5ZWQgc28gdGhhdCB5\nb3UgY2FuIGVkaXQgaXRzIGNvbnRlbnRzLiBUaGUgcGFyYW1ldGVy1XMgYXR0cmlidXRl\ncyBjYW4gYmUgY2hhbmdlZCBieSBjbGlja2luZyBvbiB0aGUgYXR0cmlidXRlIGJpdCBj\naGVjayBib3hlcy4gV2UgdXNlIHRocmVlIG9mIHRoZXNlIGJpdHMgZm9yIHVzZSB3aXRo\nIHRoZSBQYXNjYWwgcGFyYW1ldGVyIGRhdGEgdHlwZS4gQ2xpY2tpbmcgdGhlIGxvd2Vy\nIDMgYml0cyBvZiB0aGUgY2hlY2sgYm94IHdpbGwgaW52b2tlIGEgcG9wIHVwIG1lbnUu\nIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGJ1dHRvbnMsIGxpc3Rl\nZCBiZWxvdywgZm9yIG5hdmlnYXRpbmcgZnJvbSBvbmUgcGFyYW1ldGVyIHRvIGFub3Ro\nZXIuDQ2lIFByZXYgLSBkaXNwbGF5cyB0aGUgcHJldmlvdXMgZXZlbnQgcGFyYW1ldGVy\nLiBOb3RlIHRoYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgb3JkZXJpbmcsIHRoZSBy\nZXBseSBkaXJlY3QgcGFyYW1ldGVyIGlzIHRyZWF0ZWQgYXMgdGhlIGZpcnN0IHBhcmFt\nZXRlciwgYW5kIHRoZSBkaXJlY3QgcGFyYW1ldGVyIGlzIHRyZWF0ZWQgYXMgdGhlIHNl\nY29uZCBwYXJhbWV0ZXIuDaUgTmV4dCAtIGRpc3BsYXlzIHRoZSBuZXh0IHBhcmFtZXRl\nciBvZiB0aGUgZXZlbnQuDaUgTmV3IC0gYWRkcyBhIG5ldyBwYXJhbWV0ZXIgYXQgdGhl\nIGVuZCBvZiB0aGUgZXZlbnQuIE5vdGUgdGhhdCB0aGUgZGlyZWN0IGFuZCB0aGUgcmVw\nbHkgcGFyYW1ldGVyIGlzIGFsd2F5cyBpbiB0aGUgJ2FldGUnIHJlc291cmNlLiBBYnNl\nbmNlIG9mIHRoZSBkaXJlY3QgcGFyYW1ldGVyIGlzIGluZGljYXRlZCBieSB0aGUgdHlw\nZSAnbnVsbCcuIFRvIGNyZWF0ZSB0aGUgZGlyZWN0IHBhcmFtZXRlciwgZG8gbm90IGNs\naWNrIHRoZSBOZXcgYnV0dG9uLiBJbnN0ZWFkLCBkaXNwbGF5IHRoZSBkaXJlY3QgcGFy\nYW1ldGVyIGFuZCB0aGVuIGNoYW5nZSBpdHMgZGF0YSB0eXBlIHRvIGFueXRoaW5nIGJ1\ndCBudWxsLg2lIERlbGV0ZSAtIGRlbGV0ZXMgdGhlIGRpc3BsYXllZCBwYXJhbWV0ZXIu\nIFRvIGRlbGV0ZSB0aGUgZGlyZWN0IG9yIHJlcGx5IHBhcmFtZXRlciwgZG8gbm90IHVz\nZSB0aGlzIGJ1dHRvbi4gSW5zdGVhZCwgY2hhbmdlIHRoZSBkYXRhIHR5cGUgb2YgdGhl\nIHBhcmFtZXRlciB0byAnbnVsbCcuDaUgSW5zZXJ0IC0gaW5zZXJ0cyBhIG5ldyBwYXJh\nbWV0ZXIgYWZ0ZXIgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgb25lICh1bmxlc3MgdGhp\ncyBwYXJhbWV0ZXIgaXMgdGhlIHJlcGx5IHBhcmFtZXRlciwgdGhlbiB0aGUgbmV3IHBh\ncmFtZXRlciBpcyBjcmVhdGVkIGFmdGVyIHRoZSBkaXJlY3QgcGFyYW1ldGVyKS4gVXNl\nIHRoaXMgYnV0dG9uIGluc3RlYWQgb2YgIk5ldyIgaWYgeW91IHdhbnQgYSBwYXJhbWV0\nZXIgdG8gaW5zZXJ0ZWQgaW4gYSBwYXJ0aWN1bGFyIGxvY2F0aW9uLg2lIEhpZGUgU2Ny\naXB0IC0gaGlkZXMgdGhlIHBhcmFtZXRlciBzdW1tYXJ5IGZpZWxkIHJldmVhbGluZyB0\naGUgcGFyYW1ldGVyIGVkaXRpbmcgYnV0dG9ucy4NpSBTaG93IFNjcmlwdCAtIGRpc3Bs\nYXlzIHRoZSBwYXJhbWV0ZXIgc3VtbWFyeSBmaWVsZCBoaWRpbmcgdGhlIHBhcmFtZXRl\nciBlZGl0aW5nIGJ1dHRvbnMuDQ1BY2NvcmRpbmcgdG8gdGhlICdhZXRlJyBkZWZpbml0\naW9uLCBpZiB0aGUgZW51bSBhdHRyaWJ1dGUgaXMgc2V0LCB0aGUgZGF0YSB0eXBlIGlz\nIGludGVycHJldGVkIGFzIGEgZW51bWVyYXRpb24gSUQuIEluIHRoaXMgY2FzZSwgeW91\nIGNhbiBjbGljayBvbiB0aGUgdHlwZSBidXR0b24gdG8gZ28gdG8gdGhhdCBlbnVtZXJh\ndGlvbiBJRCBjYXJkLg0NDUVkaXRpbmcgYSBDbGFzcyBDYXJkDUEgQ2xhc3MgY2FyZCBj\nb250YWlucyBhIHByb3BlcnR5IGxpc3QgYW5kIGdyb3VwIG9mIGF0dHJpYnV0ZXMgYXNz\nb2NpYXRlZCB3aXRoIGVhY2ggcHJvcGVydHkuIFRoZSBlZGl0aW5nIG9mIHRoZSBwcm9w\nZXJ0aWVzIG9uIGEgQ2xhc3MgY2FyZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gZWRpdGluZyB0\naGUgcGFyYW1ldGVycyBvZiBhbiBFdmVudCBjYXJkLiBDbGljayBvbiAiUHJldiIgb3Ig\nIk5leHQiIGJ1dHRvbnMgdG8gdmlldyB0aGUgcHJldmlvdXMgb3IgbmV4dCBwcm9wZXJ0\neSBpbiBhIGxpc3QuIENsaWNrIG9uIHRoZSAiTmV3IiBidXR0b24gdG8gY3JlYXRlIGEg\nbmV3IHByb3BlcnR5IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuIENsaWNrIG9uIHRoZSAi\nSW5zZXJ0IiBidXR0b24gdG8gYWRkIGEgcHJvcGVydHkganVzdCBhZnRlciB0aGUgY3Vy\ncmVudGx5IGRpc3BsYXllZCBvbmUuIENsaWNrIG9uICJEZWxldGUiIHRvIGRlbGV0ZSBh\nIHByb3BlcnR5Lg0NVGhlIGVsZW1lbnQgbGlzdCBpcyBqdXN0IGEgZmllbGQgb24gdGhl\nIGNhcmQgYXQgdGhpcyB0aW1lLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gdXNlciBpbnRl\ncmZhY2UgdG8gZWRpdCB0aGUgZWxlbWVudCBsaXN0LCBzbyB5b3XVbGwgaGF2ZSB0byBl\nZGl0IHRoZSBsaXN0IGRpcmVjdGx5LiBUaGUgZWxlbWVudCBsaXN0IGlzIHN0cnVjdHVy\nZWQgaW4gYSB3YXkgdGhhdCB0aGUgaW5mb3JtYXRpb24gb2YgZWFjaCBlbGVtZW50IG9j\nY3VwaWVzIG9uZSBsaW5lLiBFYWNoIGxpbmUgaGFzIGEgbnVtYmVyIG9mIGl0ZW1zIHNl\ncGFyYXRlZCBieSBjb21tYSBhbmQgZWFjaCBpdGVtIHNob3VsZCBiZSBmb3VyIGNoYXJh\nY3RlcnMgbG9uZy4gVGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGNsYXNzIElEIG9mIHRoZSBl\nbGVtZW50LiBUaGUgb3RoZXIgaXRlbXMgYXJlIHRoZSBrZXkgZm9ybXMuDQ0NRWRpdGlu\nZyBhbiBFbnVtZXJhdGlvbiBjYXJkDUVhY2ggRW51bWVyYXRpb24gY2FyZCBoYXMgYSBs\naXN0IG9mIGVudW1lcmF0b3JzLiBUaGUgRW51bWVyYXRpb24gTGlzdCBmaWVsZCBhdCB0\naGUgYm90dG9tIG9mIHRoZSBjYXJkIHNlcnZlcyBhcyBhbiBpbmRleC4gQ2xpY2sgb25l\nIG9mIHRoZSBlbnVtZXJhdG9ycyB0byBlZGl0IGl0LiBZb3UgY2FuIGFsc28gY2xpY2sg\nb24gIlByZXYiIG9yICJOZXh0IiBidXR0b25zIHRvIHZpZXcgdGhlIHByZXZpb3VzIG9y\nIG5leHQgZW51bWVyYXRlciBpbiB0aGUgbGlzdC4gQ2xpY2sgb24gdGhlICJOZXciIGJ1\ndHRvbiB0byBjcmVhdGUgYSBuZXcgZW51bWVyYXRlciBhdCB0aGUgZW5kIG9mIHRoZSBs\naXN0LiBDbGljayBvbiB0aGUgIkluc2VydCIgYnV0dG9uIHRvIGFkZCBhbiBlbnVtZXJh\ndGVyIGp1c3QgYWZ0ZXIgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgb25lLiBDbGljayBv\nbiAiRGVsZXRlIiB0byBkZWxldGUgYW4gZW51bWVyYXRpb24uDQ0NRWRpdGluZyBhIENv\nbXBhcmlzb24gT3BlcmF0b3IgQ2FyZA1FYWNoIENvbXBhcmlzb24gT3BlcmF0aW9uIGNh\ncmQgY29udGFpbnMgYSBmaWVsZCBmb3IgdGhlIGN1cnJlbnQgc3VpdGUgY29kZSwgYSBj\nb21wYXJpc29uIG9wZXJhdG9yIG5hbWUsIGFuIElELCBhbmQgYSBjb21tZW50LiBDb21w\nbGV0ZSB0aGVzZSBmaWVsZHMgdG8gYWRkIG9yIGVkaXQgY29tcGFyaXNvbiBvcGVyYXRv\ncnMuDQ0NTG9jYWxpemF0aW9uDUFsdGhvdWdoIGl01XMgcG9zc2libGUgdG8gbG9jYWxp\nemUgeW91ciDUYWV0ZdUgcmVzb3VyY2UgYnkgbWFraW5nIGEgY29weSBvZiB5b3VyIHN0\nYWNrLCBhbmQgdGhlbiBsb2NhdGluZyBhbmQgdHJhbnNsYXRpbmcgZXZlcnkgbmFtZSBp\nbiBpdCwgdGhpcyBpcyBhIHZlcnkgdGVkaW91cyBwcm9jZXNzLCBlc3BlY2lhbGx5IGlm\nIHlvdSBoYXZlIHRvIGRvIGl0IG1hbnkgdGltZXMuIEZvcnR1bmF0ZWx5LCB0aGlzIHN0\nYWNrIHByb3ZpZGVzIGEgbWV0aG9kIHdoaWNoIHNpbXBsaWZpZXMgdGhpcyBvcGVyYXRp\nb24uIA0NV2hlbiB5b3Ugc2VsZWN0IHRoZSDSTG9jYWxpemUgYWV0ZcnTIGNvbW1hbmQg\nZnJvbSB0aGUgQWV0ZUVkaXRvciBtZW51LCB5b3XVbGwgZmlyc3QgYmUgYXNrZWQgd2hl\ncmUgeW911WQgbGlrZSB0byBzdG9yZSB0aGUgdHJhbnNsYXRlZCBjb3B5IG9mIHRoZSBl\nZGl0b3Igc3RhY2sgd2hpY2ggd2FzIGZyb250bW9zdCB3aGVuIHRoZSBjb21tYW5kIHdh\ncyBleGVjdXRlZC4gWW91IHdpbGwgdGhlbiBiZSBhc2tlZCBpZiB5b3Ugd2lzaCB0byB1\nc2UgYSB0cmFuc2xhdGlvbiB0YWJsZSBmaWxlLiBBIHRyYW5zbGF0aW9uIHRhYmxlIGZp\nbGUgaXMgYSB0ZXh0IGZpbGUgd2hlcmUgdGhlIG9kZCBudW1iZXIgbGluZXMgYXJlIG5h\nbWVzIGZyb20gdGhlIGFldGUgc3RhY2sgaW4gdGhlIHNvdXJjZSBsYW5ndWFnZSwgYW5k\nIHRoZSBsaW5lIGZvbGxvd2luZyB0aGF0IGlzIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUg\ndGFyZ2V0IGxhbmd1YWdlLiBJZiB5b3UgZG8gaGF2ZSBvbmUsIHRoZW4geW91IHdpbGwg\nYmUgYXNrZWQgaWYgeW91IG5lZWQgdG8gY29uZmlybSB0aGUgdHJhbnNsYXRpb24uIA0N\nV2hlbiB0aGUgbG9jYWxpemF0aW9uIHRha2VzIHBsYWNlLCBhbGwgdGhlIGxvY2FsaXph\nYmxlIG5hbWVzIGluIHRoZSBzdGFjayB3aWxsIGJlIHByZXNlbnRlZCB0byB5b3Ugdmlh\nIGRpYWxvZ3MgYW5kIHlvdSB3aWxsIGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIGNoYW5n\nZSBlYWNoIG9uZS4gQnkgZGVmYXVsdCwgdGhlIGN1cnJlbnQgbmFtZSBhcHBlYXJzIGlu\nIHRoZSB0ZXh0IGVudHJ5IGJveCBvZiBlYWNoIGRpYWxvZy4gSWYgeW911XZlIGNob3Nl\nbiBhIHRyYW5sYXRpb24gdGFibGUgdG8gd29yayB3aXRoLCB0aGUgdHJhbnNsYXRpb25z\nIHN0b3JlZCBpbiB0aGlzIGZpbGUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRleHQg\nZW50cnkgYm94IG9mIHRoZSBkaWFsb2cuIElmIHlvdSBkZWNpZGUgdGhhdCB5b3UgZG9u\n1XQgbmVlZCBhbnkgZnVydGhlciBjb25maXJtYXRpb24gb2YgdHJhbnNsYXRpb25zIGRp\nc3BsYXllZCBmcm9tIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSwgY2xpY2tpbmcgdGhlINJD\nYW5jZWzTIGJ1dHRvbiB3aWxsIGFib3J0IHRoZSBjb25maXJtYXRpb24gcHJvY2VzcyBh\nbmQgdGhlIHJlbWFpbmluZyB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgdHJhbnNsYXRpb24g\nZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YWNrLiANDUFmdGVyIHRoZSBsb2Nh\nbGl6YXRpb24gdHJhbmxhdGlvbnMgYXJlIGNvbXBsZXRlZCwgdGhlIHN0YWNrIHdpbGwg\nYmUgcmVjb25zdHJ1Y3RlZCB0byBtYWtlIHN1cmUgYWxsIGNoYW5nZXMgaGF2ZSBiZWVu\nIG1hZGUuIFRoZSBzdW0gb2YgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIGFuZCB5b3VyIG93\nbiB0cmFuc2xhdGlvbiB3aWxsIGJlIHB1dCBpbiB0aGUg0kNvZGUgU2NyYXRjaHBhZNMg\nZmllbGQgb2YgdGhlINJSZXNvdXJjZSBUb29sc9MgY2FyZCBzbyB0aGF0IHlvdSBjYW4g\ndXNlIGl0IGFzIGEgdHJhbnNsYXRpb24gdGFibGUgaW4gdGhlIGZ1dHVyZS4gVG8gY3Jl\nYXRlIGEgdHJhbnNsYXRpb24gdGFibGUsIHNlbGVjdCB0aGUg0lRyYW5zbGF0aW9uIFRh\nYmxl0yBidXR0b24gb24gdGhlINJSZXNvdXJjZSBUb29sc9MgY2FyZC4gIFRoaXMgd2ls\nbCBkdW1wIGFsbCB0aGUgbmFtZXMgaW4gdGhlIHN0YWNrIHRvIHRoZSBzY3JhdGNocGFk\nLiBZb3UgY291bGQgdXNlIHRoaXMgdG8gc2VuZCB0aGlzIGxpc3RpbmcgdG8gc29tZW9u\nZSBlbHNlIHRvIGRvIHRoZSB0cmFuc2xhdGlvbnMuIEFmdGVyIGl01XMgdHJhbnNsYXRp\nb25zIGhhdmUgYmVlbiBjb21wbGV0ZWQsIHRoaXMgZmlsZSBjYW4gYmVjb21lIGEgdHJh\nbnNsYXRpb24gdGFibGUgZm9yIHRoZSBsb2NhbGl6YXRpb24gb2YgeW91ciByZXNvdXJj\nZS4NDQ1BcHBlbmRpeDogTGFuZ3VhZ2UgTm90ZXMNDUh5cGVyVGFsaw1TaW5jZSB0aGVy\nZSBpcyBubyBnZW5lcmFsIHB1cnBvc2UgU2VuZCBBcHBsZSBFdmVudCBjb21tYW5kIGlu\nIEh5cGVyVGFsaywgQXBwbGUgRXZlbnRzIGFyZSBzZW50IHRocm91Z2ggYW4gWENNRC4g\nQ2xpZW50IGNvZGUgaW4gSHlwZXJUYWxrIGRlcGVuZHMgb24gdGhlIGZvcm1hdCBvZiB0\naGUgWENNRC4gSGVyZSB3ZSBhcmUgdXNlIGFuIFhDTUQgY2FsbGVkICJBRVNlbmQiIGZy\nb20gdGhlIHN0YWNrICJYQ01EcyBGb3IgQXBwbGUgRXZlbnRzIi4gSW4gdGhpcyBYQ01E\nLCBlYWNoIEFwcGxlIGV2ZW50IHBhcmFtZXRlciBpcyByZXByZXNlbnRlZCBieSBhIGtl\neXdvcmQgKDQgbGV0dGVyIGNvZGUpIGFuZCBkYXRhIHBhaXIsIHRoZXJlZm9yZSwgdHdv\nIEh5cGVyVGFsayBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBlYWNoIEFwcGxlIGV2ZW50\nIHBhcmFtZXRlci4gVGhlIHNhbXBsZSBjb2RlIGlzIGVzc2VudGlhbGx5IGEgbGlzdCBv\nZiBrZXl3b3JkIGFuZCBkYXRhIHBhaXJzIGZvciBhbGwgdGhlIGtleXdvcmRzIGFsbG93\nZWQuIFRoZSBvcHRpb25hbCBvbmVzIGFyZSBlbmNsb3NlZCBieSBzcXVhcmUgYnJhY2tl\ndHMgc28geW91IGNhbiByZW1vdmUgdGhlIG9uZXMgeW91IGRvIG5vdCB3YW50LiANDUFs\nbCB0aGUgbGVnYWwgdmFsdWVzIG9mIHRoZSBlbnVtZXJhdG9ycyBhcmUgYWxzbyBsaXN0\nZWQuIFRoaXMgaXMgdGhlIGZvcm1hdCBpbiB0aGUgc2NyaXB0IHRlbXBsYXRlIGZpZWxk\nIG9mIGVhY2ggZXZlbnQgd2hlbiBIeXBlclRhbGsgaXMgdGhlIGNsaWVudCBsYW5ndWFn\nZSBhbmQgbm8gZ2x1ZSByb3V0aW5lIGlzIHVzZWQuIE9idmlvdXNseSwgdGhpcyBpcyBu\nb3QgdGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMuIEEgYmV0dGVyIHdheSB3b3VsZCBi\nZSB0byBwcm92aWRlIHNvbWUgZ2x1ZSBjb2RlIHNvIHRoYXQgc2VuZGluZyBhbiBBcHBs\nZSBldmVudCBsb29rcyBsaWtlIGp1c3QgYW5vdGhlciBIeXBlclRhbGsgZnVuY3Rpb24u\nIA0NV2l0aCB0aGlzIHN0YWNrIHlvdSBjYW4gZ2VuZXJhdGUgc2FtcGxlIGNsaWVudCBj\nb2RlLiBJbiB0aGlzIHNhbXBsZSBjb2RlLCB3ZSB0YWtlIGFsbCByZXF1aXJlZCBwYXJh\nbWV0ZXJzIGFuZCBtYWtlIHRoZW0gaW50byByZXF1aXJlZCBwYXJhbWV0ZXJzIG9mIEh5\ncGVyVGFsayBmdW5jdGlvbnMuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBieSBw\nb3NpdGlvbiBhbmQgbm90IGJ5IGtleXdvcmQgc28gdGhhdCB5b3UgZG9u1XQgaGF2ZSB0\nbyByZW1lbWJlciB0aGUga2V5d29yZHMuIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFy\nZSBzdGlsbCBieSBrZXl3b3JkIGJ1dCB5b3UgY2FuIHVzZSB0aGUgZnVsbCBuYW1lIGRl\nZmluZWQgaW4gdGhlICdhZXRlJyByZXNvdXJjZSBpbnN0ZWFkIG9mIHRoZSBmb3VyIGxl\ndHRlciBjb2Rlcy4gWW91IGNhbiBhbHNvIHVzZSBmdWxsIG5hbWVzIGluIGVudW1lcmF0\nb3JzLiBXaGVuIGdsdWUgcm91dGluZXMgYXJlIHVzZWQsIHRoZSBzY3JpcHQgdGVtcGxh\ndGUgZmllbGQgd2lsbCBzaG93IGFuIGludGVyZmFjZSB0byB0aGUgZ2x1ZSByb3V0aW5l\nLg0NDU1QVyBTaGVsbCBMYW5ndWFnZQ1MaWtlIEh5cGVyVGFsaywgdGhlcmUgYXJlIG5v\nIGJ1aWx0LWluIGNvbW1hbmRzIG9yIG9mZmljaWFsIE1QVyBjb21tYW5kcyB0byBzZW5k\nIEFwcGxlIGV2ZW50cy4gT3VyIHNhbXBsZSBjb2RlIGlzIGJhc2VkIG9uIGFuIE1QVyBj\nb21tYW5kIGNhbGxlZCAiU2VuZEFFIi4gIEFnYWluLCB0aGUgcGFyYW1ldGVycyBhcmUg\naW4gYSBrZXl3b3JkIGRhdGEgcGFpciBmb3JtYXQuIFdoZW4gdGhlcmUgaXMgbm8gZ2x1\nZSByb3V0aW5lLCB0aGUgdGVtcGxhdGUgZmllbGQgaXMgaW4gdGhlIGZvcm1hdCBvZiBh\nIFNlbmRBRSBNUFcgY29tbWFuZC4gT3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgZW5jbG9z\nZWQgYnkgYnJhY2tldHMgc28gdGhhdCB0aGV5IGNhbiBiZSByZW1vdmVkLg0NQ3VycmVu\ndGx5IHRoZSBnbHVlIHJvdXRpbmUgZm9yIGFuIE1QVyBTaGVsbCBjb21tYW5kIGlzIGp1\nc3QgYW4gYWxpYXMgc28gaXTVcyBub3QgbmVjZXNzYXJ5IHRvIHJlcGVhdCBpbmZvcm1h\ndGlvbiBzdWNoIGFzIGV2ZW50IGNsYXNzZXMgYW5kIElE1XMgb3IgdGhlIHRhcmdldCBh\ncHBsaWNhdGlvbi4NDQ1QYXNjYWwgYW5kIEMNVGhlcmUgaXMgYSB0b29sYm94IGNhbGwg\nQUVTZW5kIGZvciBzZW5kaW5nIEFwcGxlIGV2ZW50cywgYnV0IHRoaXMgY2FsbCBjYW5u\nb3QgYmUgdXNlZCBpbiBQYXNjYWwgd2l0aG91dCBnbHVlIHJvdXRpbmVzLiBJZiB5b3Ug\ndXNlIFBhc2NhbCBvciBDLCB5b3Ugd2lsbCBuZWVkIHNvbWUgZ2x1ZSByb3V0aW5lcy4g\nR2x1ZSByb3V0aW5lcyB0YWtlIGNhcmUgb2Ygc3R1ZmZpbmcgcGFyYW1ldGVycyBpbnRv\nIEFwcGxlIGV2ZW50cywgc2VuZGluZyB0aGVtIG9mZiwgYW5kIGV4dHJhY3RpbmcgcmVz\ndWx0cyBmcm9tIHRoZSByZXBseS4gUGFzY2FsIGRvZXMgbm90IHN1cHBvcnQgYSB2YXJp\nYWJsZSBudW1iZXIgb2YgcGFyYW1ldGVycywgc28geW91IGNhbm5vdCB1c2Uga2V5d29y\nZCBkYXRhIHBhaXJzIGFzIHlvdSB3b3VsZCB3aXRoIEh5cGVyVGFsayBvciBNUFcuIElu\nc3RlYWQsIGFsbCBwYXJhbWV0ZXJzIGFyZSBwb3NpdGlvbmFsLiBXaGVuIGEgcGFyYW1l\ndGVyIGlzIG9wdGlvbmFsLCBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgd2lsbCBiZSB1c2Vk\nIHNvIHRoYXQgTklMIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBhYnNlbmNlIG9m\nIGEgcGFyYW1ldGVyLiBBbm90aGVyIHByb2JsZW0gd2UgZW5jb3VudGVyIGlzIHRoYXQg\ndW5saWtlIEh5cGVyVGFsayBhbmQgTVBXLCB5b3Ugbm93IGNhbiBoYXZlIG11bHRpcGxl\nIHdheXMgb2YgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGtpbmQgb2YgZGF0YS4gRm9yIGV4\nYW1wbGUsIHN1cHBvc2Ugd2UgaGF2ZSBhIHBhcmFtZXRlciB3aG9zZSBkYXRhIHR5cGUg\naXMgVEVYVC4gSW4gUGFzY2FsLCB0aGUgdGV4dCBtYXkgYmUgaW4gdGhlIGZvcm0gb2Yg\nYSBkZXNjcmlwdG9yLCBhIGhhbmRsZSwgYSBwb2ludGVyIHRvIGEgYnVmZmVyIHBsdXMg\ndGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYSBQYXNjYWwgc3RyaW5nIG9yIGV2ZW4gYSB6\nZXJvIHRlcm1pbmF0ZWQgc3RyaW5nLiBUbyBpbmRpY2F0ZSB3aGljaCBmb3JtYXQgaXMg\ndXNlZCBpbiB0aGUgZ2x1ZSByb3V0aW5lLCB5b3UgY2FuIHVzZSB0aGUgdGhyZWUgbG93\nIGJpdHMgb2YgdGhlIHBhcmFtZXRlciBhdHRyaWJ1dGUgaW4gdGhlICdhZXRlJyByZXNv\ndXJjZS4gSGVyZSBpcyB0aGUgZm9ybWF0IHdlIGFsbG93Lg0NMS4gRGVzY3JpcHRvci4N\nMi4gSGFuZGxlLg0zLiBGaXhlZCBzaXplIGRhdGEgc3VjaCBhcyBpbnRlZ2VyIG9yIGZs\nb2F0aW5nIHBvaW50Lg00LiBQb2ludGVyIHRvIGEgYnVmZmVyIGFuZCB0aGUgc2l6ZSBv\nZiB0aGUgYnVmZmVyLg01LiBQYXNjYWwgU3RyaW5nLg02LiBDIFN0cmluZy4NDU9mIGNv\ndXJzZSwgbm90IGFsbCBvZiB0aGVtIGFyZSBhcHByb3ByaWF0ZSBmb3IgYW55IGdpdmVu\nIGRhdGEgdHlwZS4gRm9yIGV4YW1wbGUsIEMgc3RyaW5ncyB3b3VsZCBub3Qgd29yayBm\nb3IgaW50ZWdlciB0eXBlcy4gVGhhdNVzIHdoeSB3aGVuIHlvdSBwaWNrIGEgZm9ybWF0\nIHVzaW5nIHRoZSBwb3AgdXAgbWVudSwgc29tZSB3aWxsIGJlIGRpc2FibGVkLiBDdXJy\nZW50bHksIHdlIGRvIG5vdCBzdXBwb3J0IHRoZSBvcHRpb24gIzQgZm9ybWF0IHdoZW4g\naXQgaXMgdXNlZCBpbiB0aGUgcmVwbHkgcGFyYW1ldGVyLg0NSW4gYSBmZXcgc3BlY2lh\nbCBjYXNlcywgeW91IGRvIG5vdCBuZWVkIHRvIHVzZSBhIHBvaW50ZXIgdG8gYSBwYXJh\nbWV0ZXIgaW4gYW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBXaGVuIHRoZSBkYXRhIHR5cGUg\naXMgJ3RydWUnLCB5b3UgY2FuIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyLiAgVGhlIGJv\nb2xlYW4gcmVzdWx0IG9mIGZhbHNlIHdpbGwgaW5kaWNhdGUgdGhlIGFic2VuY2Ugb2Yg\ndGhlIHBhcmFtZXRlci4gV2hlbiB0aGUgZGF0YSB0eXBlIGlzIGFuICdlbnVtJywgaWYg\neW91IGNhbiBhc3N1bWUgdGhhdCBhIHZhbGlkIHBhcmFtZXRlciBpcyBmb3VyIHByaW50\nYWJsZSBjaGFyYWN0ZXJzLCB0aGVuIHlvdSBjYW4gdXNlIHZhbHVlIDAgdG8gaW5kaWNh\ndGUgYWJzZW5jZSBvZiBhIHBhcmFtZXRlci4gV2hlbiB0aGUgcGFyYW1ldGVyIGlzIGEg\naGFuZGxlLCB1c2UgTklMIHRvIGluZGljYXRlIHRoZSBhYnNlbmNlIG9mIGEgcGFyYW1l\ndGVyLg0NV2hlbiBjb2RlIGlzIGdlbmVyYXRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGtu\nb3cgdGhhdCAnZnNzICcgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25zdGFudCB0eXBl\nRlNTLCB0aGUgUGFzY2FsIHR5cGUgRlNTcGVjIGFuZCB0aGUgQyB0eXBlIEZTU3BlYy4g\nSW5mb3JtYXRpb24gZm9yIHRoZSBjb21tb24gZGF0YSB0eXBlcyB1c2VkIGluIEFwcGxl\nIEV2ZW50cyBpcyBjb250YWluZWQgaW4gdGhlIHN0YWNrLiBIb3dldmVyIGl0IGlzIGEg\nbGFyZ2UgdGFzayB0byBkZWZpbmUgYWxsIHRoZSBkYXRhIHR5cGVzIHVzZWQgaW4gdGhl\nIE1hY2ludG9zaCwgYW5kIGl0IGlzIGltcG9zc2libGUgdG8ga25vdyB0aGUgbmFtZXMg\nb2YgeW91ciBwcml2YXRlIGRhdGEgdHlwZXMuIElmIHlvdSB3YW50IHRoZXNlIGV4dHJh\nIGRhdGEgdHlwZXMsIHlvdSBjYW4gYWRkIHlvdXIgb3duIGJ5IG1vZGlmeWluZyB0aGUg\nTmFtZU9mRGF0YVR5cGUgZnVuY3Rpb24gaW4gdGhlIHNjcmlwdCBvZiB0aGlzIHN0YWNr\nLiBJbiB0aGlzIGZ1bmN0aW9uLCBlYWNoIGZvdXIgY2hhcmFjdGVyIElEIGlzIGFzc29j\naWF0ZWQgd2l0aCBhIGxpc3Qgb2YgbmFtZXMuICBGb3IgZXhhbXBsZSwgJ2ZzcyAnIGlz\nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGxpc3Q6IA0gICAgICAgICAgICAg\nICAgIkZTU3BlYyxGU1NwZWNQdHIsRlNTcGVjSGFuZGxlLHR5cGVGU1MsRlNTcGVjLDcw\nIg1UaGUgZmlyc3QgbmFtZSBpcyB0aGUgUGFzY2FsIHR5cGUgbmFtZSwNc2Vjb25kIG5h\nbWUgaXMgdGhlIFBhc2NhbCBwb2ludGVyIG5hbWUsDXRoaXJkIG5hbWUgaXMgdGhlIFBh\nc2NhbCBIYW5kbGUgbmFtZSwNZm91cnRoIG5hbWUgaXMgdGhlIGNvbnN0YW50IHR5cGUg\nbmFtZSwNZmlmdGggbmFtZSBpcyB0aGUgQyB0eXBlIG5hbWUsDXNpeHRoIG5hbWUgaXMg\ndGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0eXBlLCB3aGVyZSAtMSBkZW5vdGVzIHZhcmlh\nYmxlIGxlbmd0aC4NDVRvIGludHJvZHVjZSBuZXcgZGF0YSB0eXBlLCBqdXN0IGFkZCBp\ndCB0byB0aGUgZnVuY3Rpb24uIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhlIGxlbmd0aCBm\naWVsZCBpcyB0byBkZWNpZGUgd2hldGhlciBhIHBhcmFtZXRlciBzaG91bGQgYmUgcGFz\nc2VkIG9uIHRoZSBzdGFjayBvciBwYXNzZWQgYnkgcmVmZXJlbmNlIGFzIGluIEMsIHNv\nIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgYWNjdXJhdGUuIEl0IHdpbGwgYmUgYXR0ZW1w\ndGVkIHRvIHBhc3Mgb24gdGhlIHN0YWNrIGlmIGl0IGlzIGxlc3MgdGhhbiA1IGJ5dGVz\nIGxvbmcuIElmIHlvdSBoYXZlIGEgZGF0YSB0eXBlIHRoYXQgaXMgbW9yZSB0aGFuIDQg\nYnl0ZXMgbG9uZyBidXQgeW91IHN0aWxsIHdhbnQgdG8gcGFzcyBpdCBvbiB0aGUgc3Rh\nY2sgaW4gQywgeW91IG1heSBmYWtlIGEgbGVuZ3RoIGVxdWFsIHRvIDQgdG8gZm9vbCB0\naGUgY29kZSBnZW5lcmF0b3IuDQ1XaGVuIHRoZSAnYWV0ZScgcmVzb3VyY2UgaXMgbm90\nIGRlc2lnbmVkIGFzIGEgUGFzY2FsIHJvdXRpbmUsIGFsbCB0aGUgcmVzZXJ2ZWQgYml0\ncyBhcmUgY2xlYXIgYW5kIHRoYXQgbWVhbnMgdGhhdCB0aGUgZm9ybWF0IGlzIGEgZGVz\nY3JpcHRvci4gU2luY2UgdGhpcyBpcyB0aGUgbW9zdCBnZW5lcmFsIGZvcm0sIGl0IGNh\nbiBhbHdheXMgYmUgdXNlZC4gSXQgc2hvdWxkIGJlIHBvaW50ZWQgb3V0IHRoZSAnYWV0\nZScgcmVzb3VyY2UgeW91IHJlYWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBpcyBkZWZpbmVk\nIGZvciB0aGUgc2VydmVyIGFwcGxpY2F0aW9uLiBXaGVuIHlvdSBhcmUgdGhlIGNsaWVu\ndCwgeW91IGNhbiBjaGFuZ2UgdGhlIFBhc2NhbCBkYXRhIGZvcm1hdCBmb3IgeW91IG93\nbiB1c2UgYXMgYSBjbGllbnQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHNlcnZlctVzLiBT\nbyB5b3UgY2FuIHBpY2sgd2hhdCBzdWl0cyB5b3UgYXMgYSBjbGllbnQuIFlvdSBtYXkg\nYWxzbyBsZXQgdGhlIHN5c3RlbSBwaWNrIGEgZm9ybWF0IHdoZW4gYW4gJ2FldGUnIGlz\nIHJlYWQgZnJvbSBhbm90aGVyIGZpbGUuIEFzIGEgbWF0dGVyIG9mIGZhY3QsIGlmIGFz\nIGEgY2xpZW50LCB5b3UgYWx3YXlzIHVzZXMgYSBwYXJ0aWN1bGFyIG9wdGlvbmFsIHBh\ncmFtZXRlciwgeW91IG1heSBldmVuIGNoYW5nZSBpdCBmcm9tIG9wdGlvbmFsIHRvIHJl\ncXVpcmVkIGZvciB0aGUgcHVycG9zZSBvZiBnZW5lcmF0aW5nIGNsaWVudCBjb2RlLiBO\nbyBoYXJtIGlzIGRvbmUgYXMgbG9uZyBhcyB5b3UgZG8gbm90IHRyeSB0byB3cml0ZSBi\nYWNrIHRoZSAnYWV0ZScgcmVzb3VyY2UgdG8gdGhlIHNlcnZlciBhcHBsaWNhdGlvbi4N\nDUdsdWUgcm91dGluZXMgdGFrZSBjYXJlIG9mIG1vc3Qgb2YgdGhlIGludGVyZmFjZSB0\nbyB0aGUgQXBwbGUgRXZlbnQgTWFuYWdlciBmb3IgeW91LiAgSWYgeW91IGNhbiB1c2Ug\ndGhlbSBmcm9tIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgd2hlcmUgY29tcGlsaW5n\nIGlzIGZhc3QsIGFuZCB5b3UgY2FuIHNpbmdsZSBzdGVwIHRocm91Z2ggZWFjaCBzdGF0\nZW1lbnQgYW5kIGV4YW1pbmUgdmFyaWFibGVzIGFzIG5lZWRlZCwgdGhlbiB5b3UgY2Fu\nIHVzZSBpdCBhcyBhIHNjcmlwdGluZyBsYW5ndWFnZS4NDVRoZXJlIGFyZSBhIG51bWJl\nciBvZiBwYXJhbWV0ZXJzIHRvIEFFU2VuZC4gV2hlbiB0aGUgY2xpZW50IGNvZGUgaXMg\nZ2VuZXJhdGVkLCB0aGVyZSBpcyBhIGRlZmF1bHQgZm9yIGVhY2ggcGFyYW1ldGVyLiBG\nb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgaWRsZSBwcm9jZWR1cmUgaXMgTklMLiBIb3dl\ndmVyLCB5b3UgbWF5IHB1dCBpbiB5b3VyIG93biBkZWZhdWx0IGluIHRoZSBQcmVmZXJl\nbmNlcyBjYXJkLiBJbiB0aGUgZGVmYXVsdCB0YXJnZXQgZmllbGQgb2YgdGhlIFByZWZl\ncmVuY2UgY2FyZCwgaWYgdGhlcmUgaXMgYSBwcm9jZXNzIG5hbWUgcHJlc2VudCwgdGhp\ncyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQuIElmIHRo\nZXJlIGlzIG5vIG5hbWUsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgYXBwbGljYXRpb24g\nd2lsbCBiZSBzZWxlY3RlZCBieSB0aGUgUFBDIEJyb3dzZXIuIElmIHRoZSBuYW1lIGlz\nICJzZWxmIiwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBldmVudCB3aWxsIGJlIHNlbnQg\ndG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZi4NDU9uIHRoZSBzZXJ2ZXIgc2lkZSwgaXQg\nd291bGQgYmUgbmljZSB0byBoYXZlIGdsdWUgY29kZSB0aGF0IHdvdWxkIHRha2UgYW4g\nQXBwbGUgZXZlbnQgYW5kIHRyYW5zZm9ybSBpdCBpbnRvIGEgbm9ybWFsIHByb2NlZHVy\nZSBjYWxsLiBUaGF01XMgd2h5IHdlIGFsc28gZ2VuZXJhdGUgc2FtcGxlIHNlcnZlciBn\nbHVlIGNvZGUuIEZvciBldmVyeSBldmVudCwgdHdvIHByb2NlZHVyZXMgd2lsbCBiZSBn\nZW5lcmF0ZWQuIE9uZSBpcyB0aGUgc2hlbGwgcHJvY2VkdXJlIHRoYXQgYWN0dWFsbHkg\nZXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi4gKFlvdSBoYXZlIHRvIGZpbGwgaW4gdGhlIGFj\ndHVhbCBjb2RlIHlvdXJzZWxmKS4gVGhlIG90aGVyIHByb2NlZHVyZSBpcyBhbiBldmVu\ndCBoYW5kbGVyIHRoYXQgdHJhbnNsYXRlcyB0aGUgZXZlbnQgaW50byBhIHByb2NlZHVy\nZSBjYWxsLiBGb3IgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLCB5b3UgbXVzdCBmaWxsIGlu\nIHRoZSBkZWZhdWx0IHZhbHVlIChiZWNhdXNlIHRoYXQgaW5mb3JtYXRpb24gaXMgbm90\nIGF2YWlsYWJsZSBpbiB0aGUgJ2FldGUnIHJlc291cmNlKS4gIEFkZGl0aW9uYWxseSwg\neW91IG11c3QgcHJvdmlkZSB5b3VyIG93biBlcnJvciBoYW5kbGluZywgYnV0IHlvdSBk\nbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBleHRyYWN0aW5nIHBhcmFtZXRlcnMgZnJv\nbSB0aGUgQXBwbGUgRXZlbnQuDQ1JdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgaW50\nZXJmYWNlIHRvIHlvdXIgcHJvY2VkdXJlIGluIHRoZSBzZXJ2ZXIgc2FtcGxlIGNvZGUg\naXMgdGhlIHNhbWUgYXMgdGhlIGludGVyZmFjZSB0byB0aGUgc2VuZCBBcHBsZSBFdmVu\ndCBjbGllbnQgc2FtcGxlIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCBpZiBpbiB5b3VyIGNs\naWVudCBjb2RlIHlvdSBzZW5kIHRoZSBldmVudCB0byB5b3Vyc2VsZiwgeW91IGNhbiBj\nYWxsIGVpdGhlciBwcm9jZWR1cmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGUg\nb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgb25lIGdvZXMgdGhyb3VnaCB0aGUgQXBwbGUg\nRXZlbnQgYW5kIHRoZSBvdGhlciBvbmUgZG9lcyBub3QuIFdlIHRhbGsgYSBsb3QgYWJv\ndXQgZmFjdG9yaW5nIGluIEFwcGxlIEV2ZW50cy4gQnkgdGhpcyB3ZSBtZWFuIHRoYXQg\ndXNlciBpbnRlcmZhY2UgYWN0aW9ucyBzaG91bGQgYmUgdHJhbnNsYXRlZCBpbnRvIEFw\ncGxlIEV2ZW50cyBhbmQgc2VudCB0aHJvdWdoIHRoZSBBcHBsZSBFdmVudCBNYW5hZ2Vy\nLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciByZWNvcmRpbmcgQXBwbGUgRXZlbnRz\nIGluIHRoZSBmdXR1cmUuIFRoZSBzYW1wbGUgY29kZSBnZW5lcmF0ZWQgaXMgYWxyZWFk\neSBzZXQgdXAgZm9yIHRoZSBwdXJwb3NlIG9mIGZhY3RvcmluZyBhbmQgcmVjb3JkaW5n\nLg0NDUNvcHlyaWdodCAxOTkyIEFwcGxlIENvbXB1dGVyLCBJbmMuDUFwcGxlIGFuZCBB\ncHBsZaggRXZlbnQgYXJlIHRyYWRlbWFya3Mgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4s\nIHJlZ2lzdGVyZWQgaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4A//oAEgBB\nYm91dCB0aGlzIHN0YWNryf/4ABEAQWJvdXQgdGhpcyBTdGFjawBpbnN0cnVjdGlvbnMA\nAAAAAAAAAAAAAAABAEJNQVAAABFvAAAAAAAAAAAAAQAAAAAAAAFWAgAANQAGATMB/QAV\nAAABUwH+AAAAAAAAAAAAAAAkAAAAnI3jHxS/hb+Fv4W/hb+Fv4W/hb+Fo4UgAiDjLBAQ\nIAIg4w4AAIwQgOIQAuEOhYriEQLhDuIRA+EOtYaOEIDiEALhDo0QQOIRgOENpYGJ4x8Q\n4x8Iv4a/hr+Gv4a/hr+Gv4a/hqKGjhEQ4x0QjREg4x0EuYGJ4xceRAHwAYDjFxE1QACA\n4xcRwTHMlZjAQxic4xcewUoSliUgRKSg4xcUwXmSlCHgRKSY4xcSwUBSlCUARKSE4xcR\nwTOMdBjAQxi4AAAA1yBDQVJEAAA5+gAAAAAAAArKAAAAAAAAAAAAAAAAAAA68AAADjwA\nEwArAADRUAADAAAAQAB2AAMBgAAEARgAGQFygAMAAAAAAAEAAAAMAAAAEFJlYnVpbGQA\nAG9uIG1vdXNlVXANc2V0IGN1cnNvciB0byB3YXRjaA1wdXNoIGNhcmQNQ29uc3RydWN0\nTGluaw1wb3AgY2FyZA1lbmQgbW91c2VVcA0NAAABAgATAQAAFgG8AEoB+KAAAABgdgAB\nAAAADAAAABBJbnN0cnVjdGlvbnMAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJD\nbGljayBoZXJlIHRvIGdldCBpbnN0cnVjdGlvbnMgZm9yIHVzaW5nIHRoaXMgc3RhY2su\nIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVz\naCBjZA1wb3AgY2QgaW50byBnV2hlcmVGcm9tDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdv\nIGNkICJJbnN0cnVjdGlvbnMiDWVuZCBtb3VzZVVwDQAAoAAUAgQATADNAT4B/AAHAAAA\nAAAAAAQACQAAAAxzY3JhdGNoAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiVGhp\ncyBpcyBhIGdlbmVyYWwgcHVycG9zZSBzY3JhdGNoIGFyZWEgdG8gaG9sZCBnZW5lcmF0\nZWQgdGV4dCBpbmZvcm1hdGlvbi4iDWVuZCBNb3VzZVdpdGhpbg0AAcwAFQIVAEwAeQES\nAMoABwAAAAAAAAAEAAoAAAANc3VpdGVMaXN0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFs\nbG9vbiAiVGhpcyBpcyB0aGUgbGlzdCBvZiBzdWl0ZSBjb2RlcyBpbiB0aGlzIHN0YWNr\nLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZXVwDWdsb2JhbCBnRGVsZXRlU3VpdGUs\nZ1doZXJlRnJvbQ1wdXQgdmFsdWUgb2YgdGhlIGNsaWNrTGluZSBpbnRvIHgNDWlmIHgg\nPSAiIiB0aGVuIGV4aXQgbW91c2VVcA1pZiBnRGVsZXRlU3VpdGUgdGhlbg1kZWxldGVT\ndWl0ZSB4DXB1dCBmYWxzZSBpbnRvIGdEZWxldGVTdWl0ZQ1leGl0IG1vdXNlVXANZWxz\nZQ1wdXNoIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZh\nc3QNZ28gY2FyZCAic3VpdGUiICYmIHgNZW5kIGlmDWVuZCBtb3VzZXVwDQ1vbiBkZWxl\ndGVTdWl0ZSB0aGVTdWl0ZQ1iZWVwIDINZW5kIGRlbGV0ZVN1aXRlAADMABcBAAFBAWYB\nVAGzoAIAAAAAAAEAFQAKAQAADVByaW50IEZpZWxkAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBwcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNv\nZGUgc2NyYXRjaHBhZCBmaWVsZC4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1w\ncmludCAoY2FyZCBmaWVsZCAic2NyYXRjaCIpDWVuZCBtb3VzZVVwAAFoABgBAAFBAbUB\nVAH8oAIAAAAAAAEAFQAKAQAADVNhdmUgQXPJAABvbiBNb3VzZVdpdGhpbg1TaG93QmFs\nbG9vbiAiQ2xpY2sgaGVyZSB0byBzYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgY29kZSBz\nY3JhdGNocGFkIGZpZWxkIHRvIGEgVEVYVCBmaWxlLiINZW5kIE1vdXNlV2l0aGluDQ1v\nbiBtb3VzZVVwDWFzayBmaWxlICJTYXZlIHRoZSBzY3JhdGNocGFkIGFzOiINaWYgaXQg\nPD4gIiIgb3IgdGhlIHJlc3VsdCBpcyBub3QgIkNhbmNlbCIgdGhlbg1wdXQgaXQgaW50\nbyByZWYNb3BlbiBmaWxlIHJlZg13cml0ZSBjYXJkIGZpZWxkICJzY3JhdGNoIiB0byBm\naWxlIHJlZg1jbG9zZSBmaWxlIHJlZg1lbmQgaWYNZW5kIG1vdXNlVXAAAAFkABkBAAFB\nAM0BVAEYoAIAAAAAAAEAFQAKAQAADUNsZWFyIEZpZWxkAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBjbGVhciB0aGUgY29kZSBzY3JhdGNocGFk\nIGZpZWxkLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDWFuc3dlciAiQ2xlYXIg\ndGhlIGNvbnRlbnRzIG9mIHRoZSBjb2RlIHNjcmF0Y2ggcGFkIGZpZWxkLiIgd2l0aCAi\nT0siIG9yICJDYW5jZWwiDWlmIGl0IGlzICJDYW5jZWwiIHRoZW4gZXhpdCBtb3VzZVVw\nDXB1dCBlbXB0eSBpbnRvIGNhcmQgZmllbGQgInNjcmF0Y2giDXB1dCAiU2NyYXRjaHBh\nZCIgaW50byBjYXJkIGZpZWxkICJwYWROYW1lIg1lbmQgbW91c2VVcAAAAUYAGgEAARgA\neQEsAMqgBAAAAAAAAQAAAAwAAAAQTmV3IFN1aXRlAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBhZGQgYSBuZXcgc3VpdGUuIg1lbmQgTW91c2VX\naXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NbG9jayBzY3JlZW4NZ28g\nbGFzdCBjYXJkIG9mIGJrZ25kICJzdWl0ZUluZm8iDURvTWVudSAiTmV3IENhcmQiDXB1\nc2ggY2QNcG9wIGNkIGludG8gZ1doZXJlRnJvbQ11bmxvY2sgc2NyZWVuIHdpdGggdmlz\ndWFsIHdpcGUgbGVmdA1jbGljayBhdCB0aGUgbG9jIG9mIGZsZCAic3VpdGVDb2RlIg1l\nbmQgbW91c2VVcAABJAAbAQABGAAKASwAbqAEAAAAAAABAAAADAAAABBQcmVmZXJlbmNl\nc8kAAG9uIG1vdXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50\nbyBnV2hlcmVGcm9tDXZpc3VhbCBkaXNzb2x2ZSBmYXN0DWdvIGNhcmQgInByZWZlcmVu\nY2UiDWVuZCBtb3VzZVVwDQ1vbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBnbyB0byBhIGNhcmQgd2hlcmUgeW91IGNhbiB2aWV3IGFuZCLCDSYiIHNl\ndCBwcmVmZXJlbmNlcyBmb3IgdGhpcyBzdGFjay4iDWVuZCBNb3VzZVdpdGhpbgAAB1oA\nHAEAAOUAEAD5AGegBAAAAAAAAQAAAAwAAAAQQ2xpZW50IENvZGUAAG9uIE1vdXNlV2l0\naGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2Rl\nIHRoYXQgYSBjbGllbnQgY291bGQgdXNlIHRvIHNlbmQgQXBwbGUgRXZlbnQuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANZ2xvYmFsIGluRWRpdCwgY2xpZW50TGFuZw1z\nZXQgbG9ja1NjcmVlbiB0byB0cnVlDXNldCBsb2NrUmVjZW50IHRvIHRydWUNQ2hlY2tQ\ncmVmZXJlbmNlDXB1dCAiZmFsc2UiIGludG8gaW5FZGl0DXB1c2ggY2FyZA1wdXQgQ2xp\nZW50U2FtcGxlKCJpbml0IikgaW50byBzYW1wbGVDb2RlDWlmIHRoZSBvcHRpb25LZXkg\naXMgZG93biB0aGVuDWRvbWVudSAiQmFjayINcHV0IENsaWVudFNhbXBsZSh3b3JkIDEg\nb2Ygc2hvcnQgbmFtZSBvZiB0aGlzIGNhcmQpIGFmdGVyIHNhbXBsZUNvZGUNZWxzZQ0t\nLXB1dCAiIiBpbnRvIGV2ZW50SW52ZW50b3J5DWdvIHRvIGZpcnN0IGNhcmQgb2YgYmtn\nbmQgZXZlbnRzDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIg\naW50byBzdWl0ZUNvdW50DXJlcGVhdCB3aXRoIHN1aXRlSW5kZXggPSAyIHRvIHN1aXRl\nQ291bnQNc2V0IGN1cnNvciB0byBidXN5DWdvIGNhcmQgc3VpdGVJbmRleCBvZiBia2du\nZCAic3VpdGVJbmZvIg1wdXQgZmllbGQgIkV2ZW50TGlzdCIgaW50byBteUV2ZW50TGlz\ndA1wdXQgZmllbGQgInN1aXRlQ29kZSIgaW50byBteVN1aXRlQ29kZQ1wdXQgZmllbGQg\nIkNsYXNzTGlzdCIgaW50byBteUNsYXNzTGlzdA1wdXQgQ2xpZW50U2FtcGxlKCJzdWl0\nZSIpIGFmdGVyIHNhbXBsZUNvZGUgLS0gdGhpcyBpcyBhbiAiaW5pdGlhbGl6YXRpb24i\nDS0tIG5vdyBkbyBpdCBmb3IgZWFjaCBldmVudCBpbiB0aGUgbGlzdA1wdXQgbnVtYmVy\nIG9mIGxpbmVzIGluIG15RXZlbnRMaXN0IGludG8gZXZlbnRDb3VudA1yZXBlYXQgd2l0\naCBldmVudEluZGV4ID0gMSB0byBldmVudGNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1p\nZiBqdW1wKCJldmVudCIgJiYgaXRlbSAyIG9mIGxpbmUgZXZlbnRJbmRleCBvZiBteUV2\nZW50TGlzdCkgdGhlbg1wdXQgQ2xpZW50U2FtcGxlKCJldmVudCIpIGFmdGVyIHNhbXBs\nZUNvZGUNLS1wdXQgZmllbGQgInNjcmlwdFRlbXBsYXRlIiAmIHJldHVybiAmIHJldHVy\nbiBhZnRlciBldmVudEludmVudG9yeQ1lbmQgaWYNZW5kIHJlcGVhdA0tLSBub3cgZG8g\naXQgZm9yIGVhY2ggY2xhc3MgaW4gdGhlIGxpc3QNcHV0IG51bWJlciBvZiBsaW5lcyBp\nbiBteUNsYXNzTGlzdCBpbnRvIGNsYXNzQ291bnQNcmVwZWF0IHdpdGggY2xhc3NJbmRl\neCA9IDEgdG8gY2xhc3NDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiY2xh\nc3MiICYmIGl0ZW0gMiBvZiBsaW5lIGNsYXNzSW5kZXggb2YgbXlDbGFzc0xpc3QpIHRo\nZW4NcHV0IENsaWVudFNhbXBsZSgiY2xhc3MiKSBhZnRlciBzYW1wbGVDb2RlDWVuZCBp\nZg1lbmQgcmVwZWF0DXB1dCBDbGllbnRTYW1wbGUoInN1aXRlRW5kIikgYWZ0ZXIgc2Ft\ncGxlQ29kZSAtLSB0aGlzIGlzIGEgInRlcm1pbmF0aW9uIg1lbmQgcmVwZWF0DS0tIHB1\ndCBldmVudEludmVudG9yeSBhZnRlciBzYW1wbGVDb2RlDWVuZCBpZg1wb3AgY2FyZA1Q\ndXRTY3JhdGNoIHNhbXBsZUNvZGUsICJDbGllbnQgU2FtcGxlIENvZGUiDXB1dCB0cnVl\nIGludG8gaW5FZGl0DWVuZCBtb3VzZVVwDQ0tLSBsYW5ndWFnZSBkZXBlbmRlbnQgcGFy\ndA0NZnVuY3Rpb24gQ2xpZW50U2FtcGxlIGNhcmRUeXBlDWlmIGNhcmRUeXBlID0gImV2\nZW50IiB0aGVuDXJldHVybiBDbGllbnRUZW1wbGF0ZSgpICYgcmV0dXJuICYgcmV0dXJu\nDWVsc2UNcmV0dXJuICIiDWVuZCBpZg1lbmQgQ2xpZW50U2FtcGxlDQ0AAFE6AB0BAADL\nABAA3wBnoAQAAAAAAAEAAAAMAAAAEFNlcnZlciBDb2RlAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBnZW5lcmF0ZSBzYW1wbGUgY29kZSB0aGF0\nIGEgY2xpZW50IGNvdWxkIHVzZSB0byBzZW5kIEFwcGxlIEV2ZW50LiINZW5kIE1vdXNl\nV2l0aGluDQ1vbiBtb3VzZVVwDWdsb2JhbCBpbkVkaXQsc2VydmVyTGFuZw1zZXQgbG9j\na1NjcmVlbiB0byB0cnVlDXNldCBsb2NrUmVjZW50IHRvIHRydWUNcHVzaCBjYXJkDXB1\ndCAiZmFsc2UiIGludG8gaW5FZGl0DXB1dCAiIiBpbnRvIGNvbnN0cw1pZiB0aGUgb3B0\naW9uS2V5IGlzIGRvd24gdGhlbg1kb21lbnUgIkJhY2siDXB1dCBTZXJ2ZXJTYW1wbGUo\nd29yZCAxIG9mIHRoZSBzaG9ydCBuYW1lIG9mIHRoaXMgY2FyZCkgYWZ0ZXIgY29uc3Rz\nDWVsc2UNaWYgc2VydmVyTGFuZyA9ICJQYXNjYWwiIHRoZW4NcHV0ICJDT05TVCIgJiBy\nZXR1cm4gYWZ0ZXIgY29uc3RzDWVuZCBpZg1wdXQgIiIgaW50byBldmVudElESW5mbw1w\ndXQgIiIgaW50byBldmVudEtleUluZm8NcHV0ICIiIGludG8gY2xhc3NDb25zdA1wdXQg\nIiIgaW50byBwcm9wQ29uc3QNcHV0ICIiIGludG8gZW51bUNvbnN0DXB1dCAiIiBpbnRv\nIHNhbXBsZUNvZGUNcHV0ICIiIGludG8gaW5zdGFsbENvZGUNcHV0IFNlcnZlclNhbXBs\nZSgiaW5pdCIpIGFmdGVyIHNhbXBsZUNvZGUgLS0gdGhpcyBpcyBhbiAiaW5pdGlhbGl6\nYXRpb24iDWdvIHRvIGZpcnN0IGNhcmQgb2YgYmtnbmQgZXZlbnRzDXB1dCBudW1iZXIg\nb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBzdWl0ZUNvdW50DXJlcGVh\ndCB3aXRoIHN1aXRlSW5kZXggPSAyIHRvIHN1aXRlQ291bnQNc2V0IGN1cnNvciB0byBi\ndXN5DWdvIGNhcmQgc3VpdGVJbmRleCBvZiBia2duZCAic3VpdGVJbmZvIg1wdXQgZmll\nbGQgIkV2ZW50TGlzdCIgaW50byBteUV2ZW50TGlzdA1wdXQgZmllbGQgInN1aXRlQ29k\nZSIgaW50byBteVN1aXRlQ29kZQ1wdXQgZmllbGQgIkNsYXNzTGlzdCIgaW50byBteUNs\nYXNzTGlzdA1wdXQgZmllbGQgIkVudW1MaXN0IiBpbnRvIG15RW51bUxpc3QNLS0gbm93\nIGRvIGl0IGZvciBlYWNoIGV2ZW50IGluIHRoZSBsaXN0DXB1dCBudW1iZXIgb2YgbGlu\nZXMgaW4gbXlFdmVudExpc3QgaW50byBldmVudENvdW50DXJlcGVhdCB3aXRoIGV2ZW50\nSW5kZXggPSAxIHRvIGV2ZW50Y291bnQNc2V0IGN1cnNvciB0byBidXN5DWlmIGp1bXAo\nImV2ZW50IiAmJiBpdGVtIDIgb2YgbGluZSBldmVudEluZGV4IG9mIG15RXZlbnRMaXN0\nKSB0aGVuDXB1dCBTZXJ2ZXJTYW1wbGUoImV2ZW50IikgYWZ0ZXIgc2FtcGxlQ29kZQ1w\ndXQgU2VydmVyU2FtcGxlKCJpbnN0YWxsIikgYWZ0ZXIgaW5zdGFsbENvZGUgLS0gdGhp\ncyBpcyB0byBpbnN0YWxsIGhhbmRsZXINcHV0ICJrQUUiICYgU3RyaXBTUChmaWVsZCAi\nRXZlbnROYW1lIikgJiAiLCIgJiAiJyIgJiDCDVJlc1R5cGUoZmllbGQgIkV2ZW50SUQi\nKSAmICInIiAmIHJldHVybiBhZnRlciBldmVudElESW5mbw1yZXBlYXQgd2l0aCBpID0g\nMyB0byBudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgInBhcmFtSW5mbyINcHV0IGxpbmUg\naSBvZiBmaWVsZCAicGFyYW1JbmZvIiBpbnRvIHgNcHV0IHF1b3RlICYgImtleUFFIiAm\nIFN0cmlwU1AoaXRlbSAxIG9mIHgpICYgcXVvdGUgaW50byB0aGlzTmFtZQ1wdXQgcXVv\ndGUgJiAiJyIgJiBSZXNUeXBlKGl0ZW0gMiBvZiB4KSAmICInIiAmIHF1b3RlIGludG8g\ndGhpc0tleQ1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHByb3BMaXN0IGludG8gbg1wdXQg\nMSBpbnRvIGoNcmVwZWF0IHVudGlsICh0aGlzTmFtZSA9IGl0ZW0gMSBvZiBsaW5lIGog\nb2YgcHJvcExpc3QpIG9yIChqID4gbikNYWRkIDEgdG8gag1lbmQgcmVwZWF0DWlmIGog\nPiBuIHRoZW4NcHV0IHRoaXNOYW1lICYgIiwiICYgdGhpc0tleSAmIHJldHVybiBhZnRl\nciBldmVudEtleUluZm8NZWxzZQ1pZiB0aGlzS2V5IDw+IGl0ZW0gMiBvZiBsaW5lIGog\nb2YgcHJvcExpc3QgdGhlbg1wdXQgdGhpc05hbWUgJiAiLCIgJiB0aGlzS2V5ICYgIix0\ncnVlIiAmIHJldHVybiBhZnRlciBldmVudEtleUluZm8NZW5kIGlmDWVuZCBpZg1lbmQg\ncmVwZWF0DWVuZCBpZiAtLSBQYXNjYWwgQyBldGMsIGdldCB0aGUgZXZlbnQgYW5kIGtl\neXdvcmQNZW5kIHJlcGVhdA0tLSBub3cgZG8gaXQgZm9yIGVhY2ggY2xhc3MgaW4gdGhl\nIGxpc3QNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBteUNsYXNzTGlzdCBpbnRvIGNsYXNz\nQ291bnQNcmVwZWF0IHdpdGggY2xhc3NJbmRleCA9IDEgdG8gY2xhc3NDb3VudA1zZXQg\nY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiY2xhc3MiICYmIGl0ZW0gMiBvZiBsaW5lIGNs\nYXNzSW5kZXggb2YgbXlDbGFzc0xpc3QpIHRoZW4NcHV0IFNlcnZlclNhbXBsZSgiY2xh\nc3MiKSBhZnRlciBzYW1wbGVDb2RlDXB1dCAiYyIgJiBTdHJpcFNQKGZpZWxkICJjbGFz\nc05hbWUiKSAmICIsIiAmICInIiAmIMINUmVzVHlwZShmaWVsZCAiY2xhc3NJRCIpICYg\nIiciICYgcmV0dXJuIGFmdGVyIGNsYXNzQ29uc3QNcmVwZWF0IHdpdGggaSA9IDEgdG8g\nbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkICJwcm9wSW5mbyINcHV0IGxpbmUgaSBvZiBm\naWVsZCAicHJvcEluZm8iIGludG8geA1wdXQgInAiICYgU3RyaXBTUChpdGVtIDEgb2Yg\neCkgaW50byB0aGlzTmFtZQ1wdXQgIiciICYgUmVzVHlwZShpdGVtIDIgb2YgeCkgJiAi\nJyIgaW50byB0aGlzS2V5DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gcHJvcExpc3QgaW50\nbyBuDXB1dCAxIGludG8gag1yZXBlYXQgdW50aWwgKHRoaXNOYW1lID0gaXRlbSAxIG9m\nIGxpbmUgaiBvZiBwcm9wTGlzdCkgb3IgKGogPiBuKQ1hZGQgMSB0byBqDWVuZCByZXBl\nYXQNaWYgaiA+IG4gdGhlbg1wdXQgdGhpc05hbWUgJiAiLCIgJiB0aGlzS2V5ICYgcmV0\ndXJuIGFmdGVyIHByb3BDb25zdA1lbHNlDWlmIHRoaXNLZXkgPD4gaXRlbSAyIG9mIGxp\nbmUgaiBvZiBwcm9wTGlzdCB0aGVuDXB1dCB0aGlzTmFtZSAmICIsIiAmIHRoaXNLZXkg\nJiAiLHRydWUiICYgcmV0dXJuIGFmdGVyIHByb3BDb25zdA1lbmQgaWYNZW5kIGlmDWVu\nZCByZXBlYXQNZW5kIGlmDWVuZCByZXBlYXQNLS0gbm93IGRvIGl0IGZvciBlYWNoIGNs\nYXNzIGluIHRoZSBsaXN0DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gbXlFbnVtTGlzdCBp\nbnRvIGVudW1Db3VudA1yZXBlYXQgd2l0aCBlbnVtSW5kZXggPSAxIHRvIGVudW1Db3Vu\ndA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiZW51bWVyYXRpb24iICYmIGxpbmUg\nZW51bUluZGV4IG9mIG15RW51bUxpc3QpIHRoZW4NcHV0IFNlcnZlclNhbXBsZSgiZW51\nbSIpIGFmdGVyIHNhbXBsZUNvZGUNcmVwZWF0IHdpdGggaSA9IDEgdG8gbnVtYmVyIG9m\nIGxpbmVzIGluIGZpZWxkICJlbnVtSW5mbyINcHV0IGxpbmUgaSBvZiBmaWVsZCAiZW51\nbUluZm8iIGludG8geA1wdXQgImtBRUVudW0iICYgU3RyaXBTUChpdGVtIDEgb2YgeCkg\naW50byB0aGlzTmFtZQ1wdXQgIiciICYgUmVzVHlwZShpdGVtIDIgb2YgeCkgJiAiJyIg\naW50byB0aGlzS2V5DXB1dCB0aGlzTmFtZSAmICIsIiAmIHRoaXNLZXkgJiByZXR1cm4g\nYWZ0ZXIgZW51bUNvbnN0DWVuZCByZXBlYXQNZW5kIGlmDWVuZCByZXBlYXQNZW5kIHJl\ncGVhdA1wdXQgU2VydmVyU2FtcGxlKCJkb25lIikgYWZ0ZXIgc2FtcGxlQ29kZSAtLSB0\naGlzIGlzIGEgInRlcm1pbmF0aW9uIg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGV2ZW50\nSURJbmZvIGludG8gbg1yZXBlYXQgd2l0aCBpID0gMSB0byBuDXB1dCBTZXJ2ZXJDb25z\ndChsaW5lIGkgb2YgZXZlbnRJREluZm8pICYgcmV0dXJuIGFmdGVyIGNvbnN0cw1lbmQg\ncmVwZWF0DWlmIG4gPiAwIHRoZW4NcHV0IHJldHVybiBhZnRlciBjb25zdHMNZW5kIGlm\nDXB1dCBudW1iZXIgb2YgbGluZXMgaW4gZXZlbnRLZXlJbmZvIGludG8gbg1yZXBlYXQg\nd2l0aCBpID0gMSB0byBuDXB1dCBTZXJ2ZXJDb25zdChsaW5lIGkgb2YgZXZlbnRLZXlJ\nbmZvKSAmIHJldHVybiBhZnRlciBjb25zdHMNZW5kIHJlcGVhdA1pZiBuID4gMCB0aGVu\nDXB1dCByZXR1cm4gYWZ0ZXIgY29uc3RzDWVuZCBpZg1wdXQgbnVtYmVyIG9mIGxpbmVz\nIGluIGNsYXNzQ29uc3QgaW50byBuDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG4NcHV0IFNl\ncnZlckNvbnN0KGxpbmUgaSBvZiBjbGFzc0NvbnN0KSAmIHJldHVybiBhZnRlciBjb25z\ndHMNZW5kIHJlcGVhdA1pZiBuID4gMCB0aGVuDXB1dCByZXR1cm4gYWZ0ZXIgY29uc3Rz\nDWVuZCBpZg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHByb3BDb25zdCBpbnRvIG4NcmVw\nZWF0IHdpdGggaSA9IDEgdG8gbg1wdXQgU2VydmVyQ29uc3QobGluZSBpIG9mIHByb3BD\nb25zdCkgJiByZXR1cm4gYWZ0ZXIgY29uc3RzDWVuZCByZXBlYXQNaWYgbiA+IDAgdGhl\nbg1wdXQgcmV0dXJuIGFmdGVyIGNvbnN0cw1lbmQgaWYNcHV0IG51bWJlciBvZiBsaW5l\ncyBpbiBlbnVtQ29uc3QgaW50byBuDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG4NcHV0IFNl\ncnZlckNvbnN0KGxpbmUgaSBvZiBlbnVtQ29uc3QpICYgcmV0dXJuIGFmdGVyIGNvbnN0\ncw1lbmQgcmVwZWF0DWlmIG4gPiAwIHRoZW4NcHV0IHJldHVybiBhZnRlciBjb25zdHMN\nZW5kIGlmDXB1dCBzYW1wbGVDb2RlIGFmdGVyIGNvbnN0cw1pZiBpbnN0YWxsQ29kZSA8\nPiAiIiB0aGVuDXB1dCBTZXJ2ZXJJbnN0YWxsKGluc3RhbGxDb2RlKSBhZnRlciBjb25z\ndHMNZW5kIGlmDWVuZCBpZg1wb3AgY2FyZA1QdXRTY3JhdGNoIGNvbnN0cywgIlNlcnZl\nciBTYW1wbGUgQ29kZSINcHV0ICJ0cnVlIiBpbnRvIGluRWRpdA1lbmQgbW91c2VVcA0N\nLS0gbGFuZ3VhZ2UgZGVwZW5kZW50IHBhcnQNDWZ1bmN0aW9uIFNlcnZlclNhbXBsZSBj\nYXJkVHlwZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlw\nU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNZ2xvYmFsIHZlcmJvc2UN\naWYgdmVyYm9zZSB0aGVuDXB1dCBmaWVsZCAiZXZlbnRDb21tZW50IiBpbnRvIHRlbXAN\naWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAieyAiICYgdGVtcCAmICIgfSIgJiByZXR1cm4g\nJiByZXR1cm4gaW50byBwcm9jSGVhZGVyDWVuZCBpZg1lbmQgaWYNcHV0IFBhc2NhbENs\naWVudFRlbXBsYXRlKCkgJiByZXR1cm4gaW50byB0ZW1wDXB1dCAiRG8iIGFmdGVyIGNo\nYXIgOSBvZiB0ZW1wDXB1dCB0ZW1wIGFmdGVyIHByb2NIZWFkZXINcHV0IFRhYiAmICJC\nRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgVGFiICYgInsgcHV0IHlv\ndXIgY29kZSBoZXJlIH0iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0IFRhYiAm\nICJEbyIgJiBwcm9jTmFtZSAmICIgOj0gTm9FcnI7IiAmIHJldHVybiBhZnRlciBwcm9j\nSGVhZGVyDXB1dCBUYWIgJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIgcHJv\nY0hlYWRlcg1wdXQgIkZ1bmN0aW9uIEhhbmRsZSIgJiBwcm9jTmFtZSDCDSYgIih0aGVB\ncHBsZUV2ZW50LCB0aGVSZXBseTpBcHBsZUV2ZW50OyB0aGVSZWZDb246TE9OR0lOVCk6\nT1NFcnI7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCBHbHVlSW5mbyhmaWVs\nZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8NcHV0IG51bWJlciBvZiBsaW5lcyBv\nZiBwYXJhbUluZm8gaW50byBjb3VudA1wdXQgKGl0ZW0gMyBvZiBwYXJhbUluZm8gPD4g\nIm51bGwiKSBpbnRvIGlzRnVuYw1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFiDXB1dCBU\nYWIgJiB0d29UYWIgaW50byB0aHJlZVRhYg1wdXQgIiIgaW50byB2YXJEZWNsYXJlDXB1\ndCBmYWxzZSBpbnRvIG5lZWRFcnINcHV0ICIiIGludG8gY2xlYW5VcENvZGUNcHV0ICIi\nIGludG8gcHV0UmVzdWx0Q29kZQ1wdXQgVGFiICYgIkZhaWxFcnIoRG8iICYgcHJvY05h\nbWUgJiAiKCIgaW50byBjYWxsWW91ckNvZGUNcHV0IFRhYiAmICJCRUdJTiIgJiByZXR1\ncm4gaW50byBpbml0Q29kZQ1wdXQgMCBpbnRvIHRvdGFsUGFyYW0NLS0gaWYgYSBmdW5j\ndGlvbiBnZXQgdGhlIHJlc3VsdCBiYWNrDWlmIGlzRnVuYyB0aGVuDWFkZCAxIHRvIHRv\ndGFsUGFyYW0NcHV0IGxpbmUgMSBvZiBwYXJhbUluZm8gaW50byB4DXB1dCBpdGVtIDQg\nb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAzIG9mIHgp\nIGludG8gbmFtZUxpc3QNcHV0IFRhYiAmICJJRiB0aGVSZXBseS5kYXRhSGFuZGxlIDw+\nIE5JTCBUSEVOIiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWlmIHBhcmFtVHlw\nZSA8PSAzIHRoZW4gLS0gcmVzdWx0IGlzIEFFRGVzYyBvciBIYW5kbGUNcHV0ICJ0aGVS\nZXN1bHQ6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAm\nICJ0aGVSZXN1bHQuZGF0YUhhbmRsZSA6PSBOSUw7IiAmIHJldHVybiBhZnRlciBpbml0\nQ29kZQ1pZiAocGFyYW1UeXBlID0gMCkgb3IgKHBhcmFtVHlwZSA9IDIpIHRoZW4NcHV0\nICJ0aGVSZXN1bHQsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZQ1wdXQgVGFiICYgInRo\nZVJlc3VsdC5kZXNjcmlwdG9yVHlwZSA6PSAiICYgaXRlbSA0IG9mIG5hbWVMaXN0IMIN\nJiAiOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNaWYgaXRlbSAzIG9mIG5hbWVMaXN0\nID0gIkhhbmRsZSIgdGhlbg1wdXQgInRoZVJlc3VsdC5kYXRhSGFuZGxlLCIgYWZ0ZXIg\nY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMyBvZiBuYW1lTGlzdCAmICIodGhlUmVz\ndWx0LmRhdGFIYW5kbGUpLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1lbmQgaWYN\ncHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKHRoZVJlc3VsdCkp\nOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNcHV0IHR3b1RhYiAmICJGYWlsRXJy\nKEFFUHV0S2V5RGVzYyh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCB0aGVSZXN1bHQp\nKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxzZSBpZiAocGFyYW1UeXBl\nID0gNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4gLS0gcmVzdWx0IGlzIG9uIHN0YWNr\nDXB1dCAidGhlUmVzdWx0OiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0\ndXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0ICJ0aGVSZXN1bHQsIiBhZnRlciBjYWxsWW91\nckNvZGUNcHV0IHR3b1RhYiAmICJGYWlsRXJyKEFFUHV0S2V5UHRyKHRoZVJlcGx5LCBr\nZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIEB0aGVS\nZXN1bHQiIGFmdGVyIHB1dFJlc3VsdENvZGUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1\ndCAiLCBTaXplT2YoIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICIpKSk7IiAmIHJldHVy\nbiBhZnRlciBwdXRSZXN1bHRDb2RlDWVsc2UNcHV0ICJbMV0sIExlbmd0aCh0aGVSZXN1\nbHQpKSk7IiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWVuZCBpZg1lbmQgaWYN\nZW5kIGlmIC0tIGlzRnVuYw1yZXBlYXQgd2l0aCBwYXJhbUluZGV4ID0gMiB0byBjb3Vu\ndA1wdXQgbGluZSBwYXJhbUluZGV4IG9mIHBhcmFtSW5mbyBpbnRvIHgNaWYgaXRlbSAz\nIG9mIHggPD4gIm51bGwiIHRoZW4NYWRkIDEgdG8gdG90YWxQYXJhbQ1wdXQgaXRlbSA0\nIG9mIHggaW50byBwYXJhbVR5cGUNcHV0IChpdGVtIDUgb2YgeCA9ICJvIikgaW50byBp\nc09wdGlvbmFsDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVtIDMgb2YgeCkgaW50byBuYW1l\nTGlzdA1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IHR3b1RhYiBpbnRvIGluZGVudA1lbHNl\nDXB1dCBUYWIgaW50byBpbmRlbnQNZW5kIGlmDWlmIHBhcmFtVHlwZSA9IDAgdGhlbiAt\nLSBBRURlc2MNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0IHRoaXNOYW1l\nICYmICI6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAm\nIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlIDo9IE5JTDsiICYgcmV0dXJuIGFmdGVyIGlu\naXRDb2RlDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgaXRlbSA2IG9mIHggaW50byBwdHJU\naGlzTmFtZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogQUVEZXNjUHRyOyIgJiByZXR1cm4g\nYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgcHRyVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlv\ndXJDb2RlDXB1dCB0cnVlIGludG8gbmVlZEVycg1wdXQgVGFiICYgImVyciA6PSBBRUdl\ndEtleURlc2ModGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHggwg0mICIsdHlwZVdp\nbGRDYXJkLCIgJiB0aGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IFBhc2NhbE9wdGlvbkhhbmRsaW5nKHRoaXNOYW1lLCBwdHJUaGlzTmFtZSkgYWZ0\nZXIgcHJvY0JvZHkNZWxzZQ1wdXQgdGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJD\nb2RlDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVFdmVudCwi\nICYgaXRlbSAyIG9mIHggwg0mICIsdHlwZVdpbGRDYXJkLCIgJiB0aGlzTmFtZSAmICIp\nKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgdHdvVGFiICYgIkln\nbm9yZU9TRXJyKEFFRGlzcG9zZURlc2MoIiAmIHRoaXNOYW1lICYgIikpOyIgJiByZXR1\ncm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiBwYXJhbVR5cGUgPSAxIHRoZW4gLS0g\naGFuZGxlDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBpbnRvIHRo\naXNOYW1lDXB1dCB0aGlzTmFtZSAmJiAiOiBBRURlc2M7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBUYWIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSA6PSBOSUw7\nIiAmIHJldHVybiBhZnRlciBpbml0Q29kZQ1pZiBpdGVtIDMgb2YgbmFtZUxpc3QgPSAi\nSGFuZGxlIiB0aGVuDXB1dCB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSwiIGFmdGVyIGNh\nbGxZb3VyQ29kZQ1lbHNlDXB1dCBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiKCIgJiB0aGlz\nTmFtZSAmICIuZGF0YUhhbmRsZSksIiBhZnRlciBjYWxsWW91ckNvZGUNZW5kIGlmDWlm\nIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFRhYiAmICJl\ncnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMIN\nJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0aGlzTmFtZSAmICIpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJRiBlcnIgPSBlcnJBRURl\nc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiDCDSYgdHdvVGFiICYgInsgb3IgeW91IG1h\neSBwdXQgaW4geW91ciBkZWZhdWx0IGhlcmUgfSIgJiByZXR1cm4gwg0mIFRhYiAmICJF\nTFNFIEZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0\nIFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5RGVzYyh0aGVBcHBsZUV2ZW50LCIgJiBpdGVt\nIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwiICYgdGhpc05h\nbWUgJiAiKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IHR3b1Rh\nYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFtZSAmICIpKTsi\nICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWVsc2UgaWYgKHBhcmFtVHlwZSA9IDQp\nIG9yIChwYXJhbVR5cGUgPSA2KSB0aGVuDWlmIGl0ZW0gMyBvZiB4ID0gInRydWUiIHRo\nZW4NcHV0IGl0ZW0gMSBvZiB4ICYmICI6IEJvb2xlYW47IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBpdGVtIDEgb2YgeCAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUN\ncHV0IHRydWUgaW50byBuZWVkRXJyDXB1dCBQYXNjYWxUeXBlVHJ1ZUNvZGUoeCkgYWZ0\nZXIgcHJvY0JvZHkNZWxzZSBpZiBpc09wdGlvbmFsIHRoZW4NaWYgaXRlbSAzIG9mIHgg\nPSAiZW51bSIgdGhlbg1wdXQgaXRlbSAxIG9mIHggJiYgIjogUmVzVHlwZTsiICYgcmV0\ndXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IGl0ZW0gMSBvZiB4ICYgIiwiIGFmdGVyIGNh\nbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFBhc2NhbFR5cGVUcnVl\nQ29kZSh4KSBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCBpdGVtIDYgb2YgeCBpbnRvIHB0\nclRoaXNOYW1lDXB1dCBpdGVtIDEgb2YgeCBpbnRvIHRoaXNOYW1lDXB1dCB0aGlzTmFt\nZSAmJiAiOiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVy\nIHZhckRlY2xhcmUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCBwdHJUaGlzTmFtZSAm\nJiAiOiAiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVyIHZh\nckRlY2xhcmUNZWxzZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogU3RyaW5nUHRyOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQgaWYNcHV0IHB0clRoaXNOYW1lICYgIiwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFRhYiAm\nICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHgg\nwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsdHlwZUNvZGUsQCIgJiB0aGlz\nTmFtZSBhZnRlciBwcm9jQm9keQ1pZiBwYXJhbVR5cGUgPSA0IHRoZW4NcHV0ICIsU2l6\nZU9mKCIgJiB0aGlzTmFtZSAmICIpLGFjdHVhbFNpemUpOyIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0JvZHkNZWxzZSAtLSBzdHIyNTUNcHV0ICJbMV0sU2l6ZU9mKCIgJiB0aGlzTmFt\nZSAmICIpLTEsYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgdGhpc05hbWUgJiAiWzBdIDo9IGNocihhY3R1YWxTaXplKTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgUGFzY2FsT3B0aW9uSGFuZGxpbmcodGhp\nc05hbWUsIHB0clRoaXNOYW1lKSBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxzZSAtLSBy\nZXF1aXJlZA1wdXQgaXRlbSAxIG9mIHggaW50byB0aGlzTmFtZQ1wdXQgdGhpc05hbWUg\nJiYgIjogIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICI7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCB0aGlzTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNcHV0\nIFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRyKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0g\nMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLHR5cGVDb2RlLEAi\nICYgdGhpc05hbWUgYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1\ndCAiLFNpemVPZigiICYgdGhpc05hbWUgJiAiKSxhY3R1YWxTaXplKSk7IiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCAiWzFdLFNpemVPZigiICYgdGhpc05hbWUg\nJiAiKS0xLGFjdHVhbFNpemUpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBU\nYWIgJiB0aGlzTmFtZSAmICJbMF0gOj0gY2hyKGFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVuZCBpZg1lbHNlIGlmIChwYXJhbVR5cGUgPSA1\nKSBvciAocGFyYW1UeXBlID0gNykgdGhlbg1wdXQgImRlc2NGb3IiICYgU3RyaXBTUChp\ndGVtIDEgb2YgeCkgaW50byB0aGlzTmFtZQ1wdXQgdGhpc05hbWUgJiYgIjogQUVEZXNj\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgdGhpc05hbWUgJiAi\nLmRhdGFIYW5kbGUgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNcHV0IHR3\nb1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFtZSAmICIp\nKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWlmIGlzT3B0aW9uYWwgdGhlbg1w\ndXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IGl0ZW0gNiBvZiB4IGludG8gcHRyVGhpc05h\nbWUNcHV0IHB0clRoaXNOYW1lICYgIiA6IiAmIGl0ZW0gMiBvZiBuYW1lTGlzdCAmICI7\nIiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1w\ndXQgaXRlbSA3IG9mIHggaW50byBzaXplVGhpc05hbWUNcHV0IHNpemVUaGlzTmFtZSAm\nICIgOiBMT05HSU5UOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQgaWYNcHV0\nIFRhYiAmICJlcnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0g\nMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0aGlzTmFt\nZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJRiBlcnIg\nPSBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdv\nVGFiICYgcHRyVGhpc05hbWUgJiAiIDo9IE5JTDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgdHdvVGFiICYgc2l6ZVRoaXNOYW1l\nICYgIiA6PSAwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCB0d29U\nYWIgJiAieyBvciB5b3UgbWF5IHB1dCBpbiB5b3VyIGRlZmF1bHQgaGVyZSB9IiAmIHJl\ndHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORCIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJFTFNFIiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\ndHdvVGFiICYgIkZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlm\nIHBhcmFtVHlwZSA9IDcgdGhlbiAtLSBwdXQgaW4gemVybyB0ZXJtaW5hdG9yDXB1dCB0\nd29UYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIgJiB0aGlzTmFtZSDCDSYg\nIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYN\ncHV0IHR3b1RhYiAmICJXSVRIIiAmJiB0aGlzTmFtZSAmJiAiRE8iICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DXB1dCB0aHJlZVRhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNSB0aGVuDXB1dCB0aHJlZVRhYiAmIHNpemVU\naGlzTmFtZSAmICIgOj0gR2V0SGFuZGxlU2l6ZShkYXRhSGFuZGxlKTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1pZiBpdGVtIDIgb2YgbmFtZUxpc3QgPSAiUHRy\nIiB0aGVuDXB1dCB0aHJlZVRhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBkYXRhSGFuZGxl\nXjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IHRocmVlVGFiICYgcHRy\nVGhpc05hbWUgJiAiIDo9ICIgJiBpdGVtIDIgb2YgbmFtZUxpc3Qgwg0mICIoZGF0YUhh\nbmRsZV4pOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCB0aHJlZVRh\nYiAmICJITG9jayhkYXRhSGFuZGxlKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCB0aHJlZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdv\nVGFiICYgIkVORDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBwdHJUaGlzTmFt\nZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNaWYgcGFyYW1UeXBlID0gNSB0aGVuDXB1\ndCBzaXplVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1lbHNl\nDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVFdmVudCwiICYg\naXRlbSAyIG9mIHggwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIiAmIHRo\naXNOYW1lICYgIikpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBl\nID0gNyB0aGVuIC0tIHB1dCBpbiB6ZXJvIHRlcm1pbmF0b3INcHV0IHRydWUgaW50byBu\nZWVkRXJyDXB1dCBUYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIgJiB0aGlz\nTmFtZSDCDSYgIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1lbmQgaWYNcHV0IFRhYiAmICJITG9jaygiICYgdGhpc05hbWUgJiAiLmRhdGFIYW5k\nbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXRlbSAyIG9mIG5hbWVMaXN0\nID0gIlB0ciIgdGhlbg1wdXQgdGhpc05hbWUgJiAiLmRhdGFIYW5kbGVeLCIgYWZ0ZXIg\nY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMiBvZiBuYW1lTGlzdCAmICIoIiAmIHRo\naXNOYW1lICYgIi5kYXRhSGFuZGxlXiksIiBhZnRlciBjYWxsWW91ckNvZGUNZW5kIGlm\nDWlmIHBhcmFtVHlwZSA9IDUgdGhlbiAtLSB3ZSBuZWVkIHRoZSBzaXplIHRvbw1wdXQg\nIkdldEhhbmRsZVNpemUoIiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlKSwiIGFmdGVy\nIGNhbGxZb3VyQ29kZQ1lbmQgaWYNZW5kIGlmDWVuZCBpZg1lbmQgaWYgLS0gbm90IG51\nbGwNZW5kIHJlcGVhdA1pZiB2ZXJib3NlIHRoZW4NcHV0IFRhYiAmICJ7IFdlIGNoZWNr\nIHRvIHNlZSBpZiB3ZSBtaXNzZWQgYW55IHBhcmFtZXRlciBmcm9tIHRoZSBjbGllbnQg\nfSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiSUYgQUVT\naXplT2ZBdHRyaWJ1dGUodGhlQXBwbGVFdmVudCwga2V5TWlzc2VkS2V5d29yZEF0dHIs\nICIgwg0mICJ0eXBlQ29kZSwgYWN0dWFsU2l6ZSkgPD4gZXJyQUVEZXNjTm90Rm91bmQg\nVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJGYWlsRXJy\nKGVyckFFUGFyYW1NaXNzZWQpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgdG90\nYWxQYXJhbSA+IDAgdGhlbg1wdXQgIikiIGludG8gbGFzdCBjaGFyIG9mIGNhbGxZb3Vy\nQ29kZQ1lbHNlDWRlbGV0ZSBsYXN0IGNoYXIgb2YgY2FsbFlvdXJDb2RlDWVuZCBpZg1w\ndXQgY2FsbFlvdXJDb2RlICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\ncHV0UmVzdWx0Q29kZSBhZnRlciBwcm9jQm9keQ1pZiBjbGVhblVwQ29kZSA8PiAiIiB0\naGVuDXB1dCB0YWIgJiAiQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVu\nZCBpZg1wdXQgdGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAmICIgOj0gTm9FcnI7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdGFiICYgIkVORDsiICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DWlmIG5lZWRFcnIgdGhlbiBwdXQgImVyciA6IE9TRXJyOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgInR5cGVDb2RlIDogRGVzY1R5cGU7IiAm\nIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiYWN0dWFsU2l6ZSA6IExPTkdJTlQ7\nIiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHZhckRlY2xhcmUgPD4gIiIgdGhl\nbg1wdXQgdGFiICYgIlZBUiIgJiByZXR1cm4gaW50byB4DXJlcGVhdCB3aXRoIGkgPSAx\nIHRvIG51bWJlciBvZiBsaW5lcyBpbiB2YXJEZWNsYXJlDXB1dCB0d29UYWIgJiBsaW5l\nIGkgb2YgdmFyRGVjbGFyZSAmIHJldHVybiBhZnRlciB4DWVuZCByZXBlYXQNcHV0IHgg\nYWZ0ZXIgcHJvY0hlYWRlcg1lbmQgaWYNcHV0IEZhaWxFcnJTb3VyY2UocHJvY05hbWUs\nIGNsZWFuVXBDb2RlKSBhZnRlciBwcm9jSGVhZGVyDXJldHVybiBwcm9jSGVhZGVyICYg\naW5pdENvZGUgJiByZXR1cm4gJiBwcm9jQm9keSAmIHJldHVybg1lbHNlIGlmIGNhcmRU\neXBlID0gImluaXQiIHRoZW4NcmV0dXJuICJQUk9DRURVUkUgSWdub3JlT1NFcnIoZXJy\nOk9TRXJyKTsgSU5MSU5FICQ1NDhGOyB7IGFkZHEgIzIsc3AgfSAiICYgcmV0dXJuICYg\ncmV0dXJuDWVsc2UgaWYgY2FyZFR5cGUgPSAiaW5zdGFsbCIgdGhlbg1wdXQgIkFFIiAm\nIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNcmV0dXJuIFRh\nYiAmICJJZ25vcmVPU0VycihBRUluc3RhbGxFdmVudEhhbmRsZXIoJyIgJiBSZXNUeXBl\nKGZpZWxkICJldmVudENsYXNzIikgwg0mICInLCAnIiAmIFJlc1R5cGUoZmllbGQgImV2\nZW50SUQiKSAmICInLCBASGFuZGxlIiAmIHByb2NOYW1lIMINJiAiLCAwLCBGQUxTRSkp\nOyIgJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVuZCBTZXJ2ZXJTYW1wbGUN\nDWZ1bmN0aW9uIEZhaWxFcnJTb3VyY2UgcHJvY05hbWUsIGNsZWFudXBDb2RlDS0tIHdl\nIHB1dCB0aGlzIHNlcGFyYXRlIHNvIHRoZSBQYXNjYWxTZXJ2ZXJTYW1wbGUgd291bGQg\nbm90IGJlIHRvbyBsb25nDXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IFRhYiAm\nIHR3b1RhYiBpbnRvIHRocmVlVGFiDXB1dCAiIiBpbnRvIHByb2NIZWFkZXINLS0gdGhl\nIGNsZWFudXAgcm91dGluZQ1pZiBjbGVhblVwQ29kZSA8PiAiIiB0aGVuDXB1dCBUYWIg\nJiAiUFJPQ0VEVVJFIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1\ndCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0IGNs\nZWFuVXBDb2RlIGFmdGVyIHByb2NIZWFkZXINcHV0IHR3b1RhYiAmICJFTkQ7IiAmIHJl\ndHVybiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDWVuZCBpZg1wdXQgVGFiICYgIlBS\nT0NFRFVSRSBGYWlsRXJyKGVycjpPU0Vycik7IiAmIHJldHVybiBhZnRlciBwcm9jSGVh\nZGVyDXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXIN\ncHV0IHR3b1RhYiAmICJJRiBlcnIgPD4gTk9FcnIgVEhFTiIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0hlYWRlcg1wdXQgdGhyZWVUYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHBy\nb2NIZWFkZXINcHV0IHRocmVlVGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAmICIgOj0g\nZXJyOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1pZiBjbGVhblVwQ29kZSA8PiAi\nIiB0aGVuDXB1dCB0aHJlZVRhYiAmICJDbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0hlYWRlcg1lbmQgaWYNcHV0IHRocmVlVGFiICYgIkV4aXQoSGFuZGxlIiAmIHByb2NO\nYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0aHJlZVRhYiAm\nICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0d29UYWIgJiAiRU5E\nOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXR1cm4gcHJvY0hl\nYWRlcg1lbmQgRmFpbEVyclNvdXJjZQ0NZnVuY3Rpb24gUGFzY2FsVHlwZVRydWVDb2Rl\nIHgNcHV0IFRhYiAmICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVudCwiICYg\naXRlbSAyIG9mIHggJiAiLCAiIGludG8gcHJvY0JvZHkNaWYgaXRlbSAzIG9mIHggPSAi\ndHJ1ZSIgdGhlbg1wdXQgInR5cGVCb29sZWFuLCB0eXBlQ29kZSwgQCIgJiBpdGVtIDEg\nb2YgeCAmICIsU2l6ZU9mKEJvb2xlYW4pLCBhY3R1YWxTaXplKTsiICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DWVsc2UNcHV0ICJ0eXBlRW51bWVyYXRlZCwgdHlwZUNvZGUsIEAi\nICYgaXRlbSAxIG9mIHggJiAiLFNpemVPZihSZXNUeXBlKSwgYWN0dWFsU2l6ZSk7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJJRiBlcnIgPSBl\ncnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgVGFiICYgaXRlbSAxIG9mIHggJiAiIDo9ICIgYWZ0ZXIgcHJvY0JvZHkNaWYg\naXRlbSAzIG9mIHggPSAidHJ1ZSIgdGhlbg1wdXQgIkZBTFNFIiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbHNlDXB1dCAiUmVzVHlwZSgwKSIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiRUxTRSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IFRhYiAmIFRhYiAmICJGYWlsRXJyKGVycik7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkNZW5kIFBhc2NhbFR5cGVUcnVlQ29kZQ0NZnVu\nY3Rpb24gUGFzY2FsT3B0aW9uSGFuZGxpbmcgdGhpc05hbWUsIHB0clRoaXNOYW1lDXB1\ndCBUYWIgJiAiaWYgZXJyID0gZXJyQUVEZXNjTm90Rm91bmQgVEhFTiIgJiByZXR1cm4g\naW50byBwcm9jQm9keQ1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFiDXB1dCB0d29UYWIg\nJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiBwdHJU\naGlzTmFtZSAmICIgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3\nb1RhYiAmICJ7IG9yIHlvdSBtYXkgcHV0IGluIHlvdXIgZGVmYXVsdCBoZXJlIH0iICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EIiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgIkVMU0UiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCB0d29UYWIgJiAiRmFpbEVycihlcnIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBAIiAmIHRoaXNOYW1lICYgIjsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EOyIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcmV0dXJuIHByb2NCb2R5DWVuZCBQYXNjYWxPcHRpb25I\nYW5kbGluZw0NZnVuY3Rpb24gU2VydmVyQ29uc3QgY29uc3RJbmZvLGNvbW1lbnRPdXQN\ncHV0IGl0ZW0gMSBvZiBjb25zdEluZm8gJiAiID0gIiAmIGl0ZW0gMiBvZiBjb25zdElu\nZm8gJiAiOyIgaW50byB4DWlmIGNvbW1lbnRPdXQgPSAidHJ1ZSIgdGhlbg1wdXQgInsg\nIiAmIHggJiAiIH0iIGludG8geA1lbmQgaWYNcmV0dXJuIFRhYiAmIHgNZW5kIFNlcnZl\nckNvbnN0DQ1mdW5jdGlvbiBTZXJ2ZXJJbnN0YWxsIGluc3RhbGxDb2RlDXJldHVybiBy\nZXR1cm4gJiAiUHJvY2VkdXJlIEluc3RhbGxIYW5kbGVyczsiICYgcmV0dXJuIMINJiBU\nYWIgJiAiQkVHSU4iICYgcmV0dXJuICYgaW5zdGFsbENvZGUgJiBUYWIgJiAiRU5EOyIg\nJiByZXR1cm4NZW5kIFNlcnZlckluc3RhbGwNDWZ1bmN0aW9uIFBhc2NhbENsaWVudFRl\nbXBsYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3\naGljaCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgR2x1ZUluZm8oZmllbGQg\nInBhcmFtSW5mbyIpIGludG8gcGFyYW1JbmZvDXB1dCAiRnVuY3Rpb24gQUUiICYgU3Ry\naXBTUChmaWVsZCAiZXZlbnROYW1lIikgJiAiKCIgaW50byB0ZW1wbGF0ZQ1wdXQgbnVt\nYmVyIG9mIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRvIG4NcHV0IDAgaW50byBwYXJhbUlu\nZGV4DXJlcGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXNldCBjdXJzb3IgdG8gYnVzeQ1w\ndXQgbGluZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB5DXB1dCBpdGVtIDQgb2YgeSBp\nbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB5ID0gIm8iKSBpbnRvIGlzT3B0aW9u\nYWwNcHV0IChpdGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYgdXNlSXQg\ndGhlbg1hZGQgMSB0byBwYXJhbUluZGV4DWlmIHVzZUl0IHRoZW4NaWYgaW5kZXggPSAx\nIHRoZW4NcHV0ICJWQVIgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgZmFsc2UgaW50byBpc09w\ndGlvbmFsDWVsc2UNaWYgbXVsdGlMaW5lID0gIm11bHRpTGluZSIgdGhlbg1wdXQgcmV0\ndXJuICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgc3BhY2UgYWZ0ZXIgdGVt\ncGxhdGUNZW5kIGlmDWVuZCBpZg1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAzIG9mIHkp\nIGludG8gbmFtZUxpc3QNaWYgcGFyYW1UeXBlID0gMSB0aGVuIC0tIGhhbmRsZQ1wdXQg\naXRlbSAxIG9mIHkgJiAiOiIgJiBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiOyAiIGFmdGVy\nIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNSB0aGVuIC0tIHB0ciArIHNpemUN\ncHV0IGl0ZW0gNiBvZiB5ICYgIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiDC\nDSYgaXRlbSA3IG9mIHkgJiAiOiBMT05HSU5UOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2Ug\naWYgcGFyYW1UeXBlID0gNyB0aGVuIC0tIGNTdHJpbmcNcHV0IGl0ZW0gNiBvZiB5ICYg\nIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbHNl\nIGlmIGlzT3B0aW9uYWwgdGhlbiAtLSB1c2UgcG9pbnRlciB0byBkYXRhDWlmIHBhcmFt\nVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgNcHV0IGl0ZW0gMyBvZiB5IGludG8g\nZGF0YVR5cGUNaWYgZGF0YVR5cGUgPSAiZW51bSIgdGhlbiAtLSBzcGVjaWFsIGZvciBl\nbnVtDXB1dCBpdGVtIDEgb2YgeSAmICI6UmVzVHlwZTsgIiBhZnRlciB0ZW1wbGF0ZQ1l\nbHNlIGlmIGRhdGFUeXBlID0gInRydWUiIHRoZW4gLS0gYWxzbyBzcGVjaWFsIGZvciB0\ncnVlDXB1dCBpdGVtIDEgb2YgeSAmICI6Qm9vbGVhbjsgIiBhZnRlciB0ZW1wbGF0ZQ1l\nbHNlDXB1dCBpdGVtIDYgb2YgeSAmICI6IiAmIGl0ZW0gMiBvZiBuYW1lTGlzdCAmICI7\nICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVsc2UNcHV0IGl0ZW0gNiBvZiB5ICYgIjoi\nIGFmdGVyIHRlbXBsYXRlDWlmIChwYXJhbVR5cGUgPSAwKSB0aGVuDXB1dCAiQUVEZXNj\nUHRyOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgLS0gNiwgUFN0cmluZw1wdXQgIlN0cmlu\nZ1B0cjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmDWVsc2UgLS0gcmVxdWly\nZWQNcHV0IGl0ZW0gMSBvZiB5ICYgIjoiIGFmdGVyIHRlbXBsYXRlDWlmIChwYXJhbVR5\ncGUgPSAwKSB0aGVuIC0tIEFFRGVzYw1wdXQgIkFFRGVzYzsgIiBhZnRlciB0ZW1wbGF0\nZQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgNcHV0IGl0\nZW0gMSBvZiBuYW1lTGlzdCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSAtLSBzdHIy\nNTUNcHV0ICJTdHIyNTU7ICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZg1lbmQg\naWYgLS0gdXNlSXQNZW5kIGlmIC0tIHVzZUl0DWVuZCByZXBlYXQNRGVsZXRlIGxhc3Qg\nY2hhciBvZiB0ZW1wbGF0ZSAtLSBzcGFjZSBvciAoDWlmIHBhcmFtSW5kZXggPiAwIHRo\nZW4NcHV0ICIpIiBpbnRvIGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSAtLSByZXBsYWNlIDsN\nZW5kIGlmDXB1dCAiOk9TRXJyOyIgYWZ0ZXIgdGVtcGxhdGUNcmV0dXJuIHRlbXBsYXRl\nDWVuZCBQYXNjYWxDbGllbnRUZW1wbGF0ZQ0NAAApGgAeAQAApgAQALsAZ6AEAAAAAAAB\nAAAADAAAABBEZXJleiBhZXRlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xp\nY2sgaGVyZSB0byBnZW5lcmF0ZSBhIGRlcmV6ZWQgYWV0ZSByZXNvdXJjZSBmb3IgdXNl\nIGluIE1QVy4iDWVuZCBNb3VzZVdpdGhpbg0Nb24gbW91c2VVcA1pZiBvcHRpb25LZXkg\naXMgZG93biB0aGVuDWFzayBmaWxlICJPdXRwdXQgZGVyZXplZCBhZXRlIHRvIg1pZiBp\ndCA8PiAiIiB0aGVuDXB1dCBpdCBpbnRvIHJlZg1vcGVuIGZpbGUgcmVmDXdyaXRlIGRl\ncmV6KCkgdG8gZmlsZSByZWYNY2xvc2UgZmlsZSByZWYNZW5kIGlmDWVsc2UNUHV0U2Ny\nYXRjaCBkZXJleigpDWVuZCBpZg1lbmQgbW91c2VVcA0NZnVuY3Rpb24gZGVyZXoNZ2xv\nYmFsIGluRWRpdA1zZXQgbG9ja1NjcmVlbiB0byB0cnVlDXNldCBsb2NrUmVjZW50IHRv\nIHRydWUNc2V0IGN1cnNvciB0byB3YXRjaA1wdXNoIGNhcmQNcHV0IGNhcmQgZmllbGQg\nInJlc291cmNlVHlwZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byByZXNvdXJjZVR5\ncGUNcHV0IGZhbHNlIGludG8gaW5FZGl0DWdvIHRvIGZpcnN0IGNhcmQgb2YgYmtnbmQg\nZXZlbnRzDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50\nbyBzdWl0ZUNvdW50DXB1dCB0YWIgJiB0YWIgaW50byB0YWIyDXB1dCB0YWIgJiB0YWIy\nIGludG8gdGFiMw1wdXQgdGFiICYgdGFiMyBpbnRvIHRhYjQNcHV0IHRhYiAmIHRhYjQg\naW50byB0YWI1DXB1dCB0YWIzICYgcXVvdGUgaW50byB0YWIzcXVvdGUNcHV0IHRhYjMg\nJiAiJyIgaW50byB0YWIzc3ENcHV0IHRhYjQgJiBxdW90ZSBpbnRvIHRhYjRxdW90ZQ1w\ndXQgdGFiNCAmICInIiBpbnRvIHRhYjRzcQ1wdXQgcXVvdGUgJiAiLCIgJiByZXR1cm4g\naW50byBxY3INcHV0ICInLCIgJiByZXR1cm4gaW50byBzcWNyDXB1dCBjYXJkIGZpZWxk\nICJyZXNvdXJjZUlEIiBvZiBjYXJkICJwcmVmZXJlbmNlIiBpbnRvIHRlbXANcHV0ICJS\nZXNvdXJjZSAnIiAmIHJlc291cmNlVHlwZSAmICInICgiICYgdGVtcCDCDSYgIiwgIiAm\nIHF1b3RlICYgKGNhcmQgZmllbGQgInJlc291cmNlTmFtZSIgb2YgY2FyZCAicHJlZmVy\nZW5jZSIpICYgcXVvdGUgJiAiKSB7IiAmIHJldHVybiBpbnRvIGR6DXB1dCBjYXJkIGZp\nZWxkICJtYWpvclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2UiIGludG8gdGVtcA1w\ndXQgdGFiICYgKCh0ZW1wIGRpdiAxMCkgKiAxNiArICh0ZW1wIG1vZCAxMCkpICYgIiwi\nICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBjYXJkIGZpZWxkICJtaW5vclZlcnNpb24iIG9m\nIGNhcmQgInByZWZlcmVuY2UiIGludG8gdGVtcA1pZiBsZW5ndGgodGVtcCkgPSAxIHRo\nZW4gbXVsdGlwbHkgdGVtcCBieSAxMA1wdXQgdGFiICYgKCh0ZW1wIGRpdiAxMCkgKiAx\nNiArICh0ZW1wIG1vZCAxMCkpICYgIiwiICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBjYXJk\nIGZpZWxkICJsYW5ndWFnZUNvZGUiIG9mIGNhcmQgInByZWZlcmVuY2UiIGludG8geA1p\nZiB4ID0gMCB0aGVuIHB1dCAiZW5nbGlzaCIgaW50byB4DXB1dCB0YWIgJiB4ICYgIiwi\nICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBjYXJkIGZpZWxkICJzY3JpcHRDb2RlIiBvZiBj\nYXJkICJwcmVmZXJlbmNlIiBpbnRvIHgNaWYgeCA9IDAgdGhlbiBwdXQgInJvbWFuIiBp\nbnRvIHgNcHV0IHRhYiAmIHggJiAiLCIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0IHRhYiAm\nICJ7IiAmIHJldHVybiBhZnRlciBkeg1yZXBlYXQgd2l0aCBzdWl0ZUluZGV4ID0gMiB0\nbyBzdWl0ZUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1nbyBjYXJkIHN1aXRlSW5kZXgg\nb2YgYmtnbmQgInN1aXRlSW5mbyINcHV0IGZpZWxkICJzdWl0ZUNvZGUiIGludG8gbXlT\ndWl0ZUNvZGUNcHV0IHRhYjIgJiBxdW90ZSAmIGZpZWxkICJTdWl0ZU5hbWUiICYgcWNy\nIGFmdGVyIGR6DXB1dCB0YWIyICYgcXVvdGUgJiBSZW1vdmVDUihmaWVsZCAic3VpdGVD\nb21tZW50IikgJiBxY3IgYWZ0ZXIgZHoNcHV0IHRhYjIgJiAiJyIgJiBSZXNUeXBlKG15\nU3VpdGVDb2RlKSAmIHNxY3IgYWZ0ZXIgZHoNcHV0IHRhYjIgJiAiMSwiICYgcmV0dXJu\nIGFmdGVyIGR6DXB1dCB0YWIyICYgIjEsIiAmIHJldHVybiBhZnRlciBkeg1wdXQgdGFi\nMiAmICJ7IiAmIHJldHVybiBhZnRlciBkeg1wdXQgZmllbGQgRXZlbnRMaXN0IGludG8g\nbXlFdmVudExpc3QNcHV0IGZpZWxkIENsYXNzTGlzdCBpbnRvIG15Q2xhc3NMaXN0DXB1\ndCBmaWVsZCBDb21wYXJlTGlzdCBpbnRvIG15Q29tcGFyZUxpc3QNcHV0IGZpZWxkIEVu\ndW1MaXN0IGludG8gbXlFbnVtTGlzdA0tLSBub3cgZG8gaXQgZm9yIGVhY2ggZXZlbnQg\naW4gdGhlIGxpc3QNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBteUV2ZW50TGlzdCBpbnRv\nIGV2ZW50Q291bnQNcmVwZWF0IHdpdGggZXZlbnRJbmRleCA9IDEgdG8gZXZlbnRjb3Vu\ndA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiZXZlbnQiICYmIGl0ZW0gMiBvZiBs\naW5lIGV2ZW50SW5kZXggb2YgbXlFdmVudExpc3QpIHRoZW4NaWYgbm90IGhpbGl0ZSBv\nZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1wdXQgdGFiM3F1b3RlICYgZmll\nbGQgZXZlbnROYW1lICYgcWNyIGFmdGVyIGR6DXB1dCB0YWIzcXVvdGUgJiBSZW1vdmVD\nUihmaWVsZCBldmVudENvbW1lbnQpICYgcWNyIGFmdGVyIGR6DXB1dCB0YWIzc3EgJiBS\nZXNUeXBlKGZpZWxkIGV2ZW50Q2xhc3MpICYgc3FjciBhZnRlciBkeg1wdXQgdGFiM3Nx\nICYgUmVzVHlwZShmaWVsZCBldmVudElEKSAmIHNxY3IgYWZ0ZXIgZHoNcHV0IGxpbmUg\nMSBvZiBmaWVsZCBwYXJhbUluZm8gaW50byB4IC0tIHJlcGx5DXB1dCBSZXNUeXBlKGl0\nZW0gMyBvZiB4KSBpbnRvIHRlbXANaWYgdGVtcCA9ICJudWxsIiB0aGVuDXB1dCB0YWIz\nICYgIm5vUmVwbHksIiAmIHJldHVybiBhZnRlciBkeg1lbHNlDXB1dCB0YWIzc3EgJiB0\nZW1wICYgc3FjciBhZnRlciBkeg1lbmQgaWYNcHV0IGl0ZW0gNCBvZiB4IGludG8gdGVt\ncA1kZWxldGUgaXRlbSAxIHRvIDQgb2YgeA1wdXQgdGFiM3F1b3RlICYgUmVtb3ZlQ1Io\neCkgJiBxY3IgYWZ0ZXIgZHogLS0gcmVwbHkgY29tbWVudA1wdXQgQml0RmllbGQodGVt\ncCwgInJwbHkiKSBhZnRlciBkeiAtLSByZXBseSBhdHRyaWJ1dGUNcHV0IGxpbmUgMiBv\nZiBmaWVsZCBwYXJhbUluZm8gaW50byB4IC0tIGRpcmVjdCBvYmplY3QNcHV0IFJlc1R5\ncGUoaXRlbSAzIG9mIHgpIGludG8gdGVtcA1pZiB0ZW1wID0gIm51bGwiIHRoZW4NcHV0\nIHRhYjMgJiAibm9QYXJhbXMsIiAmIHJldHVybiBhZnRlciBkeg1lbHNlDXB1dCB0YWIz\nc3EgJiB0ZW1wICYgc3FjciBhZnRlciBkeg1lbmQgaWYNcHV0IGl0ZW0gNCBvZiB4IGlu\ndG8gdGVtcA1kZWxldGUgaXRlbSAxIHRvIDQgb2YgeA1wdXQgdGFiM3F1b3RlICYgUmVt\nb3ZlQ1IoeCkgJiBxY3IgYWZ0ZXIgZHogLS0gZGlyZWN0IG9iamVjdCBjb21tZW50DXB1\ndCBCaXRGaWVsZCh0ZW1wLCAiLS0tLSIpIGFmdGVyIGR6IC0tIGRpcmVjdCBhdHRyaWJ1\ndGUNcHV0IHRhYjMgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcmVwZWF0IHdpdGggaSA9\nIDMgdG8gbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkIHBhcmFtSW5mbw1zZXQgY3Vyc29y\nIHRvIGJ1c3kNcHV0IGxpbmUgaSBvZiBmaWVsZCBwYXJhbUluZm8gaW50byB4DXB1dCB0\nYWI0cXVvdGUgJiBpdGVtIDEgb2YgeCAmIHFjciBhZnRlciBkeiAtLSBwYXJhbSBuYW1l\nDXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMiBvZiB4KSAmIHNxY3IgYWZ0ZXIgZHog\nLS0gcGFyYW0ga2V5DXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMyBvZiB4KSAmIHNx\nY3IgYWZ0ZXIgZHogLS0gZGF0YSB0eXBlDXB1dCBpdGVtIDQgb2YgeCBpbnRvIHRlbXAN\nZGVsZXRlIGl0ZW0gMSB0byA0IG9mIHgNcHV0IHRhYjRxdW90ZSAmIFJlbW92ZUNSKHgp\nICYgcWNyIGFmdGVyIGR6IC0tIGNvbW1lbnQNcHV0IEJpdEZpZWxkKHRlbXAsICI/Pz8/\nIikgaW50byB0ZW1wIC0tIGF0dHJpYnV0ZQ0tLSBsYXN0IG9uZSBkbyBub3QgaGF2ZSBh\nIGNvbW1hIGF0IHRoZSBlbmQNaWYgaSA9IG51bWJlciBvZiBsaW5lcyBpbiBmaWVsZCBw\nYXJhbUluZm8gdGhlbg1kZWxldGUgbGFzdCBjaGFyIG9mIHRlbXANcHV0IHJldHVybiBp\nbnRvIGxhc3QgY2hhciBvZiB0ZW1wDWVuZCBpZg1wdXQgdGVtcCBhZnRlciBkeg1lbmQg\ncmVwZWF0DWlmIGV2ZW50SW5kZXggPD4gZXZlbnRDb3VudCB0aGVuDXB1dCB0YWIzICYg\nIn0sIiAmIHJldHVybiBhZnRlciBkeg1lbHNlIC0tIG5lZWQgY29tbWVudCBpZiBub3Qg\ndGhlIGxhc3Qgb25lIGluIHN1aXRlDXB1dCB0YWIzICYgIn0iICYgcmV0dXJuIGFmdGVy\nIGR6DWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGV2\nZW50IGluIHN1aXRlDXB1dCB0YWIyICYgIn0sIiAmIHJldHVybiBhZnRlciBkeg0tLSBu\nb3cgZG8gaXQgZm9yIGVhY2hjbGFzcyBpbiB0aGUgbGlzdA1wdXQgdGFiMiAmICJ7IiAm\nIHJldHVybiBhZnRlciBkeg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIG15Q2xhc3NMaXN0\nIGludG8gY2xhc3NDb3VudA1yZXBlYXQgd2l0aCBjbGFzc0luZGV4ID0gMSB0byBjbGFz\nc0NvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1wKCJjbGFzcyIgJiYgaXRlbSAy\nIG9mIGxpbmUgY2xhc3NJbmRleCBvZiBteUNsYXNzTGlzdCkgdGhlbg1pZiBub3QgaGls\naXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVuDXB1dCB0YWIzcXVvdGUg\nJiBmaWVsZCAiY2xhc3NOYW1lIiAmIHFjciBhZnRlciBkeg1wdXQgdGFiM3NxICYgUmVz\nVHlwZShmaWVsZCAiY2xhc3NJRCIpICYgc3FjciBhZnRlciBkeg1wdXQgdGFiM3F1b3Rl\nICYgUmVtb3ZlQ1IoZmllbGQgImNsYXNzQ29tbWVudCIpICYgcWNyIGFmdGVyIGR6DXB1\ndCB0YWIzICYgInsiICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBudW1iZXIgb2YgbGluZXMg\naW4gZmllbGQgInByb3BJbmZvIiBpbnRvIHByb3BDb3VudA1yZXBlYXQgd2l0aCBwcm9w\nSW5kZXggPSAxIHRvIHByb3BDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kNcHV0IGxpbmUg\ncHJvcEluZGV4IG9mIGZpZWxkICJwcm9wSW5mbyIgaW50byB4DXB1dCB0YWI0cXVvdGUg\nJiBpdGVtIDEgb2YgeCAmIHFjciBhZnRlciBkeiAtLSBwcm9wIG5hbWUNcHV0IHRhYjRz\ncSAmIFJlc1R5cGUoaXRlbSAyIG9mIHgpICYgc3FjciBhZnRlciBkeiAtLSBwcm9wIElE\nDXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMyBvZiB4KSAmIHNxY3IgYWZ0ZXIgZHog\nLS0gcHJvcCBjbGFzcw1wdXQgaXRlbSA0IG9mIHggaW50byB0ZW1wDWRlbGV0ZSBpdGVt\nIDEgdG8gNCBvZiB4DXB1dCB0YWI0cXVvdGUgJiBSZW1vdmVDUih4KSAmIHFjciBhZnRl\nciBkeiAtLSBjb21tZW50DXB1dCBCaXRGaWVsZCh0ZW1wLCAicHJvcCIpIGludG8gdGVt\ncCAtLSBhdHRyaWJ1dGUNLS0gbGFzdCBvbmUgZG8gbm90IGhhdmUgYSBjb21tYSBhdCB0\naGUgZW5kDWlmIHByb3BJbmRleCA9IHByb3BDb3VudCB0aGVuDWRlbGV0ZSBsYXN0IGNo\nYXIgb2YgdGVtcA1wdXQgcmV0dXJuIGludG8gbGFzdCBjaGFyIG9mIHRlbXANZW5kIGlm\nDXB1dCB0ZW1wIGFmdGVyIGR6DWVuZCByZXBlYXQNcHV0IHRhYjMgJiAifSwiICYgcmV0\ndXJuIGFmdGVyIGR6DXB1dCB0YWIzICYgInsiICYgcmV0dXJuIGFmdGVyIGR6DXB1dCBu\ndW1iZXIgb2YgbGluZXMgaW4gZmllbGQgImVsZW1lbnRzIiBpbnRvIGVsZW1Db3VudA1y\nZXBlYXQgd2l0aCBlbGVtSW5kZXggPSAxIHRvIGVsZW1Db3VudA1zZXQgY3Vyc29yIHRv\nIGJ1c3kNcHV0IGxpbmUgZWxlbUluZGV4IG9mIGZpZWxkICJlbGVtZW50cyIgaW50byB4\nDXB1dCB0YWI0c3EgJiBSZXNUeXBlKGl0ZW0gMSBvZiB4KSAmIHNxY3IgYWZ0ZXIgZHoN\ncHV0IHRhYjQgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0IG51bWJlciBvZiBpdGVt\ncyBvZiB4IGludG8ga2V5Rm9ybUNvdW50DXJlcGVhdCB3aXRoIGtleUZvcm1JbmRleCA9\nIDIgdG8ga2V5Rm9ybUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgUmVzVHlwZShp\ndGVtIGtleUZvcm1JbmRleCBvZiB4KSBpbnRvIHRlbXANaWYgdGVtcCA9ICJpbmR4IiB0\naGVuDXB1dCAiZm9ybUFic29sdXRlUG9zaXRpb24iIGludG8gdGVtcA1lbHNlIGlmIHRl\nbXAgPSAibmFtZSIgdGhlbg1wdXQgImZvcm1OYW1lIiBpbnRvIHRlbXANZWxzZQ1wdXQg\nIiciICYgdGVtcCAmICInIiBpbnRvIHRlbXANZW5kIGlmDWlmIGtleUZvcm1JbmRleCA8\nPiBrZXlGb3JtQ291bnQgdGhlbg1wdXQgIiwiIGFmdGVyIHRlbXANZW5kIGlmDXB1dCB0\nYWI1ICYgdGVtcCAmIHJldHVybiBhZnRlciBkeg1lbmQgcmVwZWF0DS0tIGxhc3Qgb25l\nIGRvIG5vdCBoYXZlIGEgY29tbWEgYXQgdGhlIGVuZA1pZiBlbGVtSW5kZXggPD4gZWxl\nbUNvdW50IHRoZW4NcHV0IHRhYjQgJiAifSwiICYgcmV0dXJuIGFmdGVyIGR6DWVsc2UN\ncHV0IHRhYjQgJiAifSIgJiByZXR1cm4gYWZ0ZXIgZHoNZW5kIGlmDWVuZCByZXBlYXQN\nLS0gbGFzdCBvbmUgZG8gbm90IGhhdmUgYSBjb21tYSBhdCB0aGUgZW5kDWlmIGNsYXNz\nSW5kZXggPD4gY2xhc3NDb3VudCB0aGVuDXB1dCB0YWIzICYgIn0sIiAmIHJldHVybiBh\nZnRlciBkeg1lbHNlDXB1dCB0YWIzICYgIn0iICYgcmV0dXJuIGFmdGVyIGR6DWVuZCBp\nZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQNcHV0IHRhYjIgJiAifSwiICYgcmV0dXJu\nIGFmdGVyIGR6DS0tIG5vdyBkbyBjb21wYXJpc29uDXB1dCB0YWIyICYgInsiICYgcmV0\ndXJuIGFmdGVyIGR6DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gbXlDb21wYXJlTGlzdCBp\nbnRvIGNvbXBhcmVDb3VudA1yZXBlYXQgd2l0aCBjb21wYXJlSW5kZXggPSAxIHRvIGNv\nbXBhcmVDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiY29tcGFyaXNvbiIg\nJiYgaXRlbSAyIG9mIGxpbmUgY29tcGFyZUluZGV4IG9mIG15Q29tcGFyZUxpc3QpIHRo\nZW4NaWYgbm90IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1w\ndXQgdGFiM3F1b3RlICYgZmllbGQgImNvbXBhcmVOYW1lIiAmIHFjciBhZnRlciBkeg1w\ndXQgdGFiM3NxICYgUmVzVHlwZShmaWVsZCAiY29tcGFyZUlEIikgJiBzcWNyIGFmdGVy\nIGR6DWlmIGNvbXBhcmVJbmRleCA8PiBjb21wYXJlQ291bnQgdGhlbg1wdXQgdGFiM3F1\nb3RlICYgUmVtb3ZlQ1IoZmllbGQgImNvbXBhcmVDb21tZW50IikgJiBxY3IgYWZ0ZXIg\nZHoNZWxzZQ1wdXQgdGFiM3F1b3RlICYgUmVtb3ZlQ1IoZmllbGQgImNvbXBhcmVDb21t\nZW50IikgJiBxdW90ZSAmIHJldHVybiBhZnRlciBkeg1lbmQgaWYNZW5kIGlmDWVuZCBp\nZg1lbmQgcmVwZWF0DXB1dCB0YWIyICYgIn0sIiAmIHJldHVybiBhZnRlciBkeg0tLSBk\nbyBlbnVtZXJhdGlvbnMNcHV0IHRhYjIgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0\nIG51bWJlciBvZiBsaW5lcyBpbiBteUVudW1MaXN0IGludG8gZW51bUNvdW50DXJlcGVh\ndCB3aXRoIGVudW1JbmRleCA9IDEgdG8gZW51bUNvdW50DXNldCBjdXJzb3IgdG8gYnVz\neQ1pZiBqdW1wKCJlbnVtZXJhdGlvbiIgJiYgbGluZSBlbnVtSW5kZXggb2YgbXlFbnVt\nTGlzdCkgdGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVU\nIiB0aGVuDXB1dCB0YWIzc3EgJiBmaWVsZCAiZW51bWVyYXRpb24iICYgc3FjciBhZnRl\nciBkeg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkICJlbnVtSW5mbyIgaW50byBl\nbnVtZXJhdG9yQ291bnQNcHV0IHRhYjMgJiAieyIgJiByZXR1cm4gYWZ0ZXIgZHoNcmVw\nZWF0IHdpdGggZW51bWVyYXRvckluZGV4ID0gMSB0byBlbnVtZXJhdG9yQ291bnQNc2V0\nIGN1cnNvciB0byBidXN5DXB1dCBsaW5lIGVudW1lcmF0b3JJbmRleCBvZiBmaWVsZCAi\nZW51bUluZm8iIGludG8geA1wdXQgdGFiNHF1b3RlICYgaXRlbSAxIG9mIHggJiBxY3Ig\nYWZ0ZXIgZHoNcHV0IHRhYjRzcSAmIFJlc1R5cGUoaXRlbSAyIG9mIHgpICYgc3FjciBh\nZnRlciBkeg1kZWxldGUgaXRlbSAxIHRvIDIgb2YgeA1pZiBlbnVtZXJhdG9ySW5kZXgg\nPD5lbnVtZXJhdG9yQ291bnQgdGhlbg1wdXQgdGFiNHF1b3RlICYgeCAmIHFjciBhZnRl\nciBkeg1lbHNlDXB1dCB0YWI0cXVvdGUgJiB4ICYgcXVvdGUgJiByZXR1cm4gYWZ0ZXIg\nZHoNZW5kIGlmDWVuZCByZXBlYXQNaWYgZW51bUluZGV4IDw+IGVudW1Db3VudCB0aGVu\nDXB1dCB0YWIzICYgIn0sIiAmIHJldHVybiBhZnRlciBkeg1lbHNlDXB1dCB0YWIzICYg\nIn0iICYgcmV0dXJuIGFmdGVyIGR6DWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBl\nYXQNaWYgc3VpdGVJbmRleCA8PiBzdWl0ZUNvdW50IHRoZW4NcHV0IHRhYjIgJiAifSwi\nICYgcmV0dXJuIGFmdGVyIGR6DWVsc2UNcHV0IHRhYjIgJiAifSIgJiByZXR1cm4gYWZ0\nZXIgZHoNZW5kIGlmDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IHN1aXRlDXB1dCB0YWIg\nJiAifSIgJiByZXR1cm4gYWZ0ZXIgZHoNcHV0ICJ9OyIgJiByZXR1cm4gYWZ0ZXIgZHoN\ncG9wIGNhcmQNcHV0IHRydWUgaW50byBpbkVkaXQNcmV0dXJuIGR6DWVuZCBkZXJleg0N\nZnVuY3Rpb24gQml0RmllbGQgeCwgdHlwZQ1wdXQgIiIgaW50byByDXB1dCB0YWIgJiB0\nYWIgJiB0YWIgaW50byB0YWJzDXB1dCAiLS0tLSIgaW50byBkYXNoDWlmICh0eXBlIDw+\nIGRhc2gpIGFuZCAodHlwZSA8PiAicnBseSIpIHRoZW4NcHV0IHRhYiBiZWZvcmUgdGFi\ncw1lbmQgaWYNcmVwZWF0IHdpdGggaSA9IDEgdG8gMTYNc2V0IGN1cnNvciB0byBidXN5\nDWlmIHggbW9kIDIgPSAxIHRoZW4NcHV0ICJ0cnVlIiBpbnRvIGZsYWcNZWxzZQ1wdXQg\nInJlc2VydmVkIiBpbnRvIGZsYWcNZW5kIGlmDWlmIChpID0gMTYpIGFuZCAodHlwZSA8\nPiAicHJvcCIpIHRoZW4NaWYgZmxhZyA9IHRydWUgdGhlbg1wdXQgIm9wdGlvbmFsIiBp\nbnRvIGZsYWcNZWxzZQ1wdXQgInJlcXVpcmVkIiBpbnRvIGZsYWcNZW5kIGlmDWlmIHR5\ncGUgPSBkYXNoIHRoZW4NcHV0ICJkaXJlY3RQYXJhbSIgYmVmb3JlIGZsYWcNZWxzZSBp\nZiB0eXBlID0gInJwbHkiIHRoZW4NcHV0IHJlcGx5IGJlZm9yZSBmbGFnDWVuZCBpZg1l\nbHNlIGlmIGkgPSAxNSB0aGVuDWlmIGZsYWcgPSB0cnVlIHRoZW4NcHV0ICJsaXN0T2ZJ\ndGVtcyIgaW50byBmbGFnDWVsc2UNcHV0ICJzaW5nbGVJdGVtIiBpbnRvIGZsYWcNZW5k\nIGlmDWVsc2UgaWYgaSA9IDE0IHRoZW4NaWYgZmxhZyA9IHRydWUgdGhlbg1wdXQgImVu\ndW1lcmF0ZWQiIGludG8gZmxhZw1lbHNlDXB1dCAibm90RW51bWVyYXRlZCIgaW50byBm\nbGFnDWVuZCBpZg1lbHNlIGlmIChpID0gMTMpIHRoZW4NaWYgdHlwZSA9IGRhc2ggdGhl\nbg1pZiBmbGFnID0gdHJ1ZSB0aGVuDXB1dCAiY2hhbmdlc1N0YXRlIiBpbnRvIGZsYWcN\nZWxzZQ1wdXQgImRvZXNudENoYW5nZVN0YXRlIiBpbnRvIGZsYWcNZW5kIGlmDWVsc2Ug\naWYgdHlwZSA9ICJwcm9wIiB0aGVuDWlmIGZsYWcgPSB0cnVlIHRoZW4NcHV0ICJyZWFk\nV3JpdGUiIGludG8gZmxhZw1lbHNlDXB1dCAicmVhZE9ubHkiIGludG8gZmxhZw1lbmQg\naWYNZW5kIGlmDWVuZCBpZg1wdXQgdGFicyAmIGZsYWcgJiAiLCIgJiByZXR1cm4gYmVm\nb3JlIHINcHV0IHggZGl2IDIgaW50byB4DWVuZCByZXBlYXQNcmV0dXJuIHINZW5kIEJp\ndEZpZWxkDQ1mdW5jdGlvbiBSZW1vdmVDciB4DWlmICJcIiBpcyBpbiB4IHRoZW4NcHV0\nICIiIGludG8geQ1yZXBlYXQgdW50aWwgeCA9ICIiDXB1dCBPZmZzZXQoIlwiLCB4KSBp\nbnRvIG4NaWYgbiA+IDAgdGhlbg1wdXQgY2hhciAxIHRvIG4tMSBvZiB4ICYgIlxcIiBh\nZnRlciB5DWRlbGV0ZSBjaGFyIDEgdG8gbiBvZiB4DWVsc2UNcHV0IHggYWZ0ZXIgeQ1w\ndXQgIiIgaW50byB4DWVuZCBpZg1lbmQgcmVwZWF0DXB1dCB5IGludG8geA1lbmQgaWYN\ncHV0IDEgaW50byBuDXJlcGVhdCB1bnRpbCBuID0gMA1wdXQgT2Zmc2V0KHJldHVybiwg\neCkgaW50byBuDWlmIG4gPiAwIHRoZW4gcHV0ICJcciIgaW50byBjaGFyIG4gb2YgeA1l\nbmQgcmVwZWF0DXB1dCAxIGludG8gbg1yZXBlYXQgdW50aWwgbiA9IDANcHV0IE9mZnNl\ndChUYWIsIHgpIGludG8gbg1pZiBuID4gMCB0aGVuIHB1dCAiXHQiIGludG8gY2hhciBu\nIG9mIHgNZW5kIHJlcGVhdA1pZiBxdW90ZSBpcyBpbiB4IHRoZW4NcHV0ICIiIGludG8g\neQ1yZXBlYXQgdW50aWwgeCA9ICIiDXB1dCBPZmZzZXQocXVvdGUsIHgpIGludG8gbg1p\nZiBuID4gMCB0aGVuDXB1dCBjaGFyIDEgdG8gbi0xIG9mIHggJiAiXCIgJiBxdW90ZSBh\nZnRlciB5DWRlbGV0ZSBjaGFyIDEgdG8gbiBvZiB4DWVsc2UNcHV0IHggYWZ0ZXIgeQ1w\ndXQgIiIgaW50byB4DWVuZCBpZg1lbmQgcmVwZWF0DXB1dCB5IGludG8geA1lbmQgaWYN\naWYgIiciIGlzIGluIHggdGhlbg1wdXQgIiIgaW50byB5DXJlcGVhdCB1bnRpbCB4ID0g\nIiINcHV0IE9mZnNldCgiJyIsIHgpIGludG8gbg1pZiBuID4gMCB0aGVuDXB1dCBjaGFy\nIDEgdG8gbi0xIG9mIHggJiAiXCciIGFmdGVyIHkNZGVsZXRlIGNoYXIgMSB0byBuIG9m\nIHgNZWxzZQ1wdXQgeCBhZnRlciB5DXB1dCAiIiBpbnRvIHgNZW5kIGlmDWVuZCByZXBl\nYXQNcHV0IHkgaW50byB4DWVuZCBpZg1yZXR1cm4geA1lbmQgUmVtb3ZlQ3IAHNIAIAEA\nAIYAEACcAGegBAAAAAAAAQAAAAwAAAAQSW1wb3J0IGFldGUAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIHJlYWQgYW4gYWV0ZSByZXNvdXJjZSBm\ncm9tIGFuIGZpbGUuIiDCDSYmICJIb2xkIGRvd24gb3B0aW9uIGtleSB0byBtZXJnZSB3\naXRoIHRoZSBidWlsdC1pbiBhZXV0IHJlc291cmNlLiIgwg0mJiAiSWYgc3RhY2sgaXMg\nbm90IGVtcHR5LCB0aGUgZGF0YSB3aWxsIGJlIG1lcmdlZC4iDWVuZCBNb3VzZVdpdGhp\nbg0Nb24gbW91c2VVcA1nbG9iYWwgaW5FZGl0DWlmIHRoZSBvcHRpb25LZXkgaXMgZG93\nbiB0aGVuDXB1dCBNZXJnZUFldGUoKSBpbnRvIGFldGUNZWxzZQ1wdXQgTWVyZ2VBZXRl\nKGZhbHNlKSBpbnRvIGFldGUNZW5kIGlmDWlmIGFldGUgPSAiIiB0aGVuDWFuc3dlciAi\nVW5hYmxlIHRvIHJlYWQgdGhlIGFldGUiIHdpdGggIkNhbmNlbCINZXhpdCBtb3VzZVVw\nDWVuZCBpZg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGFldGUgaW50byBuDXB1dCBsaW5l\nIDUgb2YgYWV0ZSBpbnRvIHZlcnNpb24NaWYgKHZlcnNpb24gPCAxNDQpIG9yICh2ZXJz\naW9uID49IDUxMikgdGhlbg1leGl0IG1vdXNlVXANZW5kIGlmDXB1c2ggY2FyZA1wdXQg\nbGluZSAxIG9mIGFldGUgaW50byBjYXJkIGZpZWxkICJzZW5kVGFyZ2V0IiBvZiBjYXJk\nICJwcmVmZXJlbmNlIg1wdXQgbGluZSAyIG9mIGFldGUgaW50byBjYXJkIGZpZWxkICJy\nZXNvdXJjZVR5cGUiIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCBsaW5lIDMgb2YgYWV0\nZSBpbnRvIGNhcmQgZmllbGQgInJlc291cmNlSUQiIG9mIGNhcmQgInByZWZlcmVuY2Ui\nDXB1dCBsaW5lIDQgb2YgYWV0ZSBpbnRvIGNhcmQgZmllbGQgInJlc291cmNlTmFtZSIg\nb2YgY2FyZCAicHJlZmVyZW5jZSINcHV0IHZlcnNpb24gZGl2IDI1NiBpbnRvIHgNcHV0\nICh4IGRpdiAxNikgKiAxMCArICh4IG1vZCAxNikgaW50byBjYXJkIGZpZWxkICJtYWpv\nclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCB2ZXJzaW9uIG1vZCAyNTYg\naW50byB4DXB1dCAoeCBkaXYgMTYpICogMTAgKyAoeCBtb2QgMTYpIGludG8gY2FyZCBm\naWVsZCAibWlub3JWZXJzaW9uIiBvZiBjYXJkICJwcmVmZXJlbmNlIg1wdXQgbGluZSA2\nIG9mIGFldGUgaW50byBjYXJkIGZpZWxkICJsYW5ndWFnZUNvZGUiIG9mIGNhcmQgInBy\nZWZlcmVuY2UiDXB1dCBsaW5lIDcgb2YgYWV0ZSBpbnRvIGNhcmQgZmllbGQgInNjcmlw\ndENvZGUiIG9mIGNhcmQgInByZWZlcmVuY2UiDXB1dCBmYWxzZSBpbnRvIGluRWRpdA1w\ndXQgbGluZSA4IG9mIGFldGUgaW50byBzdWl0ZUNvdW50DWRlbGV0ZSBsaW5lIDEgdG8g\nOCBvZiBhZXRlDXJlcGVhdCBzdWl0ZUNvdW50IHRpbWVzDWdvIHRvIHRoaXMgY2QNc2V0\nIGxvY2tTY3JlZW4gdG8gdHJ1ZQ1zZXQgbG9ja1JlY2VudCB0byB0cnVlDXNldCBjdXJz\nb3IgdG8gYnVzeQ1wdXQgbGluZSAzIG9mIGFldGUgaW50byBzdWl0ZUNvZGUNaWYgbm90\nIGp1bXAoInN1aXRlIiAmJiBzdWl0ZUNvZGUpIHRoZW4NZ28gbGFzdCBjYXJkIGluIEJr\nZ25kICJzdWl0ZUluZm8iDWRvTWVudSAiTmV3IENhcmQiDXNldCBuYW1lIG9mIHRoaXMg\nY2FyZCB0byAic3VpdGUiICYmIHN1aXRlQ29kZQ1lbmQgaWYNcHV0IGxpbmUgMSBvZiBh\nZXRlIGludG8gZmllbGQgInN1aXRlTmFtZSINcHV0IGxpbmUgMiBvZiBhZXRlIGludG8g\nZmllbGQgInN1aXRlQ29tbWVudCINcHV0IHN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0\nZUNvZGUiDXB1dCBsaW5lIDYgb2YgYWV0ZSBpbnRvIGV2ZW50Q291bnQNZGVsZXRlIGxp\nbmUgMSB0byA2IG9mIGFldGUNcHVzaCBjYXJkDXJlcGVhdCBldmVudENvdW50IHRpbWVz\nDXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgbGluZSAxIG9mIGFldGUgaW50byBldmVudE5h\nbWUNaWYgY2hhciAxIHRvIDIgb2YgZXZlbnROYW1lID0gIiMqIiB0aGVuIC0tIGZyb20g\nQUVVVA1kZWxldGUgY2hhciAxIHRvIDIgb2YgZXZlbnROYW1lDXB1dCB0cnVlIGludG8g\nZnJvbUFldXQNZWxzZQ1pZiBjaGFyIDEgdG8gMiBvZiBldmVudE5hbWUgPSAiIyYiIHRo\nZW4gLS0gZnJvbSBib3RoLCB0cmVhdCBhcyBuZXcNZGVsZXRlIGNoYXIgMSB0byAyIG9m\nIGV2ZW50TmFtZQ1lbmQgaWYNcHV0IGZhbHNlIGludG8gZnJvbUFldXQNZW5kIGlmDXB1\ndCBsaW5lIDIgb2YgYWV0ZSBpbnRvIGV2ZW50Q29tbWVudA1wdXQgbGluZSAzIG9mIGFl\ndGUgaW50byBldmVudENsYXNzDXB1dCBsaW5lIDQgb2YgYWV0ZSBpbnRvIGV2ZW50SUQN\naWYgbm90IGp1bXAoImV2ZW50IiAmJiBSZXNUeXBlKGV2ZW50Q2xhc3MpICYgUmVzVHlw\nZShldmVudElEKSkgdGhlbg1nbyBsYXN0IGNhcmQgaW4gQmtnbmQgImV2ZW50cyINZG9N\nZW51ICJOZXcgQ2FyZCINcHV0IHN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0ZUNvZGUi\nDU5hbWVJdCBzdWl0ZUNvZGUgJiYgImV2ZW50IiAmJiBSZXNUeXBlKGV2ZW50Q2xhc3Mp\nICYgUmVzVHlwZShldmVudElEKQ1lbmQgaWYNc2V0IGhpbGl0ZSBvZiBia2duZCBidXR0\nb24gImZyb20gQUVVVCIgdG8gZnJvbUFldXQNcHV0IGV2ZW50TmFtZSBpbnRvIGZpZWxk\nICJldmVudE5hbWUiDXB1dCBldmVudENvbW1lbnQgaW50byBmaWVsZCAiZXZlbnRDb21t\nZW50Ig1wdXQgZXZlbnRDbGFzcyBpbnRvIGZpZWxkICJldmVudENsYXNzIg1wdXQgZXZl\nbnRJRCBpbnRvIGZpZWxkICJldmVudElEIg1wdXQgIiwsIiBpbnRvIHggLS0gcHV0IGlu\nIHRoZSByZXBseQ1wdXQgbGluZSA1IG9mIGFldGUgaW50byBpdGVtIDMgb2YgeA1wdXQg\nbGluZSA3IG9mIGFldGUgaW50byBpdGVtIDQgb2YgeA1wdXQgbGluZSA2IG9mIGFldGUg\naW50byBpdGVtIDUgb2YgeA1wdXQgeCBpbnRvIGxpbmUgMSBvZiBmaWVsZCBpZCAxMA1w\ndXQgIiwsIiBpbnRvIHggLS0gcHV0IGluIHRoZSBkaXJlY3QgcGFyYW1ldGVycw1wdXQg\nbGluZSA4IG9mIGFldGUgaW50byBpdGVtIDMgb2YgeA1wdXQgbGluZSAxMCBvZiBhZXRl\nIGludG8gaXRlbSA0IG9mIHgNcHV0IGxpbmUgOSBvZiBhZXRlIGludG8gaXRlbSA1IG9m\nIHgNcHV0IHggaW50byBsaW5lIDIgb2YgZmllbGQgaWQgMTANcHV0IGxpbmUgMTEgb2Yg\nYWV0ZSBpbnRvIHBhcmFtQ291bnQNcHV0IDExIGludG8gbGFzdFByb2MNcmVwZWF0IHdp\ndGggcGFyYW1JbmRleCA9IDEgdG8gcGFyYW1Db3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kN\ncHV0ICIiIGludG8geA1wdXQgbGluZSAobGFzdFByb2MrMSkgb2YgYWV0ZSBpbnRvIGl0\nZW0gMSBvZiB4DXB1dCBsaW5lIChsYXN0UHJvYysyKSBvZiBhZXRlIGludG8gaXRlbSAy\nIG9mIHgNcHV0IGxpbmUgKGxhc3RQcm9jKzMpIG9mIGFldGUgaW50byBpdGVtIDMgb2Yg\neA1wdXQgbGluZSAobGFzdFByb2MrNSkgb2YgYWV0ZSBpbnRvIGl0ZW0gNCBvZiB4DXB1\ndCBsaW5lIChsYXN0UHJvYys0KSBvZiBhZXRlIGludG8gaXRlbSA1IG9mIHgNYWRkIDUg\ndG8gbGFzdFByb2MNcHV0IHggaW50byBsaW5lIChwYXJhbUluZGV4KzIpIG9mIGZpZWxk\nIGlkIDEwDWVuZCByZXBlYXQNZGVsZXRlIGxpbmUgMSB0byBsYXN0UHJvYyBvZiBhZXRl\nDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGV2ZW50DXB1dCBsaW5lIDEgb2YgYWV0ZSBp\nbnRvIGNsYXNzQ291bnQNZGVsZXRlIGxpbmUgMSBvZiBhZXRlDXJlcGVhdCB3aXRoIGNs\nYXNzSW5kZXggPSAxIHRvIGNsYXNzQ291bnQNc2V0IGN1cnNvciB0byBidXN5DXB1dCBs\naW5lIDEgb2YgYWV0ZSBpbnRvIGNsYXNzTmFtZQ1pZiBjaGFyIDEgdG8gMiBvZiBjbGFz\nc05hbWUgPSAiIyoiIHRoZW4gLS0gZnJvbSBBRVVUDWRlbGV0ZSBjaGFyIDEgdG8gMiBv\nZiBjbGFzc05hbWUNcHV0IHRydWUgaW50byBmcm9tQWV1dA1lbHNlDWlmIGNoYXIgMSB0\nbyAyIG9mIGNsYXNzTmFtZSA9ICIjJiIgdGhlbiAtLSBmcm9tIGJvdGgsIHRyZWF0IGFz\nIG5ldw1kZWxldGUgY2hhciAxIHRvIDIgb2YgY2xhc3NOYW1lDWVuZCBpZg1wdXQgZmFs\nc2UgaW50byBmcm9tQWV1dA1lbmQgaWYNcHV0IGxpbmUgMiBvZiBhZXRlIGludG8gY2xh\nc3NJRA1pZiBub3QganVtcCgiY2xhc3MiICYmIGNsYXNzSUQpIHRoZW4NZ28gbGFzdCBj\nYXJkIGluIEJrZ25kICJjbGFzcyINZG9NZW51ICJOZXcgQ2FyZCINcHV0IHN1aXRlQ29k\nZSBpbnRvIGZpZWxkICJzdWl0ZUNvZGUiDU5hbWVJdCBzdWl0ZUNvZGUgJiYgImNsYXNz\nIiAmJiBSZXNUeXBlKGNsYXNzSUQpDWVuZCBpZg1wdXQgY2xhc3NOYW1lIGludG8gZmll\nbGQgImNsYXNzTmFtZSINc2V0IGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVV\nVCIgdG8gZnJvbUFldXQNcHV0IGNsYXNzSUQgaW50byBmaWVsZCAiY2xhc3NJRCINcHV0\nIGxpbmUgMyBvZiBhZXRlIGludG8gZmllbGQgY2xhc3NDb21tZW50DXB1dCBsaW5lIDQg\nb2YgYWV0ZSBpbnRvIHByb3BDb3VudA1wdXQgNCBpbnRvIGxhc3RQcm9jDXJlcGVhdCB3\naXRoIHByb3BJbmRleCA9IDEgdG8gcHJvcENvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1w\ndXQgIiIgaW50byB4DXB1dCBsaW5lIChsYXN0UHJvYysxKSBvZiBhZXRlIGludG8gaXRl\nbSAxIG9mIHgNcHV0IGxpbmUgKGxhc3RQcm9jKzIpIG9mIGFldGUgaW50byBpdGVtIDIg\nb2YgeA1wdXQgbGluZSAobGFzdFByb2MrMykgb2YgYWV0ZSBpbnRvIGl0ZW0gMyBvZiB4\nDXB1dCBsaW5lIChsYXN0UHJvYys1KSBvZiBhZXRlIGludG8gaXRlbSA0IG9mIHgNcHV0\nIGxpbmUgKGxhc3RQcm9jKzQpIG9mIGFldGUgaW50byBpdGVtIDUgb2YgeA1hZGQgNSB0\nbyBsYXN0UHJvYw1wdXQgeCBpbnRvIGxpbmUgcHJvcEluZGV4IG9mIGZpZWxkIGlkIDEw\nDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IHByb3Blcml0eQ1hZGQgMSB0byBsYXN0UHJv\nYw1wdXQgbGluZSBsYXN0UHJvYyBvZiBhZXRlIGludG8gZWxlbUNvdW50DXJlcGVhdCB3\naXRoIGVsZW1JbmRleCA9IDEgdG8gZWxlbUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1w\ndXQgbGluZSAobGFzdFByb2MrMSkgb2YgYWV0ZSBpbnRvIHgNcHV0IGxpbmUgKGxhc3RQ\ncm9jKzIpIG9mIGFldGUgaW50byBrZXlGb3JtQ291bnQNYWRkIDIgdG8gbGFzdFByb2MN\ncmVwZWF0IGtleUZvcm1Db3VudCB0aW1lcw1zZXQgY3Vyc29yIHRvIGJ1c3kNYWRkIDEg\ndG8gbGFzdFByb2MNcHV0ICIsIiAmIGxpbmUgbGFzdFByb2Mgb2YgYWV0ZSBhZnRlciB4\nDWVuZCByZXBlYXQNcHV0IHggaW50byBsaW5lIGVsZW1JbmRleCBvZiBmaWVsZCAiZWxl\nbWVudHMiDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGVsZW1lbnQNZGVsZXRlIGxpbmUg\nMSB0byBsYXN0UHJvYyBvZiBhZXRlDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGNsYXNz\nDXB1dCBsaW5lIDEgb2YgYWV0ZSBpbnRvIGNvbXBhcmVDb3VudA1kZWxldGUgbGluZSAx\nIG9mIGFldGUNcmVwZWF0IGNvbXBhcmVDb3VudCB0aW1lcw1zZXQgY3Vyc29yIHRvIGJ1\nc3kNcHV0IGxpbmUgMSBvZiBhZXRlIGludG8gY29tcGFyZU5hbWUNaWYgY2hhciAxIHRv\nIDIgb2YgY29tcGFyZU5hbWUgPSAiIyoiIHRoZW4gLS0gZnJvbSBBRVVUDWRlbGV0ZSBj\naGFyIDEgdG8gMiBvZiBjb21wYXJlTmFtZQ1wdXQgdHJ1ZSBpbnRvIGZyb21BZXV0DWVs\nc2UNaWYgY2hhciAxIHRvIDIgb2YgY29tcGFyZU5hbWUgPSAiIyYiIHRoZW4gLS0gZnJv\nbSBib3RoLCB0cmVhdCBhcyBuZXcNZGVsZXRlIGNoYXIgMSB0byAyIG9mIGNvbXBhcmVO\nYW1lDWVuZCBpZg1wdXQgZmFsc2UgaW50byBmcm9tQWV1dA1lbmQgaWYNcHV0IGxpbmUg\nMiBvZiBhZXRlIGludG8gY29tcGFyZUlEDWlmIG5vdCBqdW1wKCJjb21wYXJpc29uIiAm\nJiBjb21wYXJlSUQpIHRoZW4NZ28gbGFzdCBjYXJkIGluIEJrZ25kICJjb21wYXJpc29u\nIg1kb01lbnUgIk5ldyBDYXJkIg1wdXQgc3VpdGVDb2RlIGludG8gZmllbGQgInN1aXRl\nQ29kZSINTmFtZUl0IHN1aXRlQ29kZSAmJiAiY29tcGFyaXNvbiIgJiYgUmVzVHlwZShj\nb21wYXJlSUQpDWVuZCBpZg1wdXQgY29tcGFyZU5hbWUgaW50byBmaWVsZCAiY29tcGFy\nZU5hbWUiDXNldCBoaWxpdGUgb2YgYmtnbmQgYnV0dG9uICJmcm9tIEFFVVQiIHRvIGZy\nb21BZXV0DXB1dCBjb21wYXJlSUQgaW50byBmaWVsZCAiY29tcGFyZUlEIg1wdXQgbGlu\nZSAzIG9mIGFldGUgaW50byBmaWVsZCAiY29tcGFyZUNvbW1lbnQiDWRlbGV0ZSBsaW5l\nIDEgdG8gMyBvZiBhZXRlDWVuZCByZXBlYXQgLS0gZm9yIGV2ZXJ5IGNvbXBhcmlzb24N\ncHV0IGxpbmUgMSBvZiBhZXRlIGludG8gZW51bWVyYXRpb25Db3VudA1kZWxldGUgbGlu\nZSAxIG9mIGFldGUNcmVwZWF0IGVudW1lcmF0aW9uQ291bnQgdGltZXMNc2V0IGN1cnNv\nciB0byBidXN5DXB1dCBsaW5lIDEgb2YgYWV0ZSBpbnRvIGVudW1lcmF0aW9uDWlmIGNo\nYXIgMSB0byAyIG9mIGVudW1lcmF0aW9uID0gIiMqIiB0aGVuIC0tIGZyb20gQUVVVA1k\nZWxldGUgY2hhciAxIHRvIDIgb2YgZW51bWVyYXRpb24NcHV0IHRydWUgaW50byBmcm9t\nQWV1dA1lbHNlDWlmIGNoYXIgMSB0byAyIG9mIGVudW1lcmF0aW9uID0gIiMmIiB0aGVu\nIC0tIGZyb20gYm90aCwgdHJlYXQgYXMgbmV3DWRlbGV0ZSBjaGFyIDEgdG8gMiBvZiBl\nbnVtZXJhdGlvbg1lbmQgaWYNcHV0IGZhbHNlIGludG8gZnJvbUFldXQNZW5kIGlmDWlm\nIG5vdCBqdW1wKCJlbnVtZXJhdGlvbiIgJiYgZW51bWVyYXRpb24pIHRoZW4NZ28gbGFz\ndCBjYXJkIGluIEJrZ25kICJlbnVtZXJhdGlvbiINZG9NZW51ICJOZXcgQ2FyZCINcHV0\nIHN1aXRlQ29kZSBpbnRvIGZpZWxkICJzdWl0ZUNvZGUiDU5hbWVJdCBzdWl0ZUNvZGUg\nJiYgImVudW1lcmF0aW9uIiAmJiBSZXNUeXBlKGVudW1lcmF0aW9uKQ1lbmQgaWYNc2V0\nIGhpbGl0ZSBvZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdG8gZnJvbUFldXQNcHV0\nIGVudW1lcmF0aW9uIGludG8gZmllbGQgImVudW1lcmF0aW9uIg1wdXQgbGluZSAyIG9m\nIGFldGUgaW50byBlbnVtZXJhdG9yQ291bnQNcHV0IDIgaW50byBsYXN0UHJvYw1yZXBl\nYXQgd2l0aCBlbnVtZXJhdG9ySW5kZXggPSAxIHRvIGVudW1lcmF0b3JDb3VudA1zZXQg\nY3Vyc29yIHRvIGJ1c3kNcHV0ICIiIGludG8geA1wdXQgbGluZSAobGFzdFByb2MrMSkg\nb2YgYWV0ZSBpbnRvIHgNcHV0IGxpbmUgKGxhc3RQcm9jKzIpIG9mIGFldGUgaW50byBp\ndGVtIDIgb2YgeA1wdXQgbGluZSAobGFzdFByb2MrMykgb2YgYWV0ZSBpbnRvIGl0ZW0g\nMyBvZiB4DWFkZCAzIHRvIGxhc3RQcm9jDXB1dCB4IGludG8gbGluZSBlbnVtZXJhdG9y\nSW5kZXggb2YgZmllbGQgImVudW1JbmZvIg1lbmQgcmVwZWF0IC0tIGZvciBldmVyeSBl\nbnVtZXJhdG9ycw1kZWxldGUgbGluZSAxIHRvIGxhc3RQcm9jIG9mIGFldGUNZW5kIHJl\ncGVhdA1lbmQgcmVwZWF0DXB1dCB0cnVlIGludG8gaW5FZGl0DUNvbnN0cnVjdExpbmsN\naWYgdGhlIGZyZWVzaXplIG9mIHRoaXMgc3RhY2sgPiAzMjc2OCB0aGVuIGRvTWVudSAi\nQ29tcGFjdCBTdGFjayINZW5kIG1vdXNlVXAAACQgACEBAABmABAAfABnoAQAAAAAAAEA\nAAAMAAAAEE91dHB1dCBhZXRlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xp\nY2sgaGVyZSB3cml0ZSBhbiBhZXRlIHJlc291cmNlIG91dCB0byBhIGZpbGUuIg1lbmQg\nTW91c2VXaXRoaW4NDW9uIG1vdXNlVXANLS1pZiB0aGUgb3B0aW9uS2V5IGlzIGRvd24g\ndGhlbg0tLSBwdXQgdHJ1ZSBpbnRvIHVzZUFFDS0tZWxzZQ0tLSAgcHV0IGZhbHNlIGlu\ndG8gdXNlQUUNLS1lbmQgaWYNc2V0IGN1cnNvciB0byB3YXRjaA1wdXQgTWFrZUFldGUo\nKSBpbnRvIGFldGVSZXNvdXJjZQ1zZXQgbG9ja1NjcmVlbiB0byB0cnVlDXNldCBsb2Nr\nUmVjZW50IHRvIHRydWUNc2V0IGN1cnNvciB0byBhcnJvdw1pZiBhZXRlUmVzb3VyY2Ug\nPD4gMCB0aGVuDS0taWYgdXNlQUUgdGhlbg0tLSBzZW5kIGl0IG91dCBhcyAnTUlTQycg\nJ1dSU0MnDS0tYW5zd2VyIHByb2dyYW0gIndyaXRlIHRvIHdoaWNoIHByb2dyYW0iDS0t\naWYgaXQgPD4gIiIgdGhlbg0tLVNlbmRBRSAiTUlTQyxXUlNDLCIgJiBpdCAmICIsMSwx\nMjAwLC0tLS0sKioqKixSU0lELHNob3IiLCK+YWV0Zb4iICYgYWV0ZVJlc291cmNlLDAN\nLS1wdXQgMCBpbnRvIGFldGVSZXNvdXJjZSAtLSB3ZSBzYXZlIGl0IGFscmVhZHkNLS1l\nbmQgaWYNLS1lbHNlDS0tIHdyaXRlIGl0IG91dA1hbnN3ZXIgZmlsZSAiU2F2ZSB0aGUg\nJ2FldGUnIHJlc291cmNlIHRvIGZpbGU6Ig1pZiBpdCA8PiAiIiB0aGVuDVNhdmVEZXNj\nQXNSZXNvdXJjZSBhZXRlUmVzb3VyY2UsIGl0LCAwDWlmIHRoZSByZXN1bHQgPD4gIiIg\ndGhlbg1hbnN3ZXIgIlRoZSBvcGVyYXRpb24gZmFpbGVkIHdpdGggZXJyb3IgIiAmIHRo\nZSByZXN1bHQNZW5kIGlmDXB1dCAwIGludG8gYWV0ZVJlc291cmNlIC0tIHdlIHNhdmUg\naXQgYWxyZWFkeQ1lbmQgaWYNLS1lbmQgaWYNZW5kIGlmDWlmIGFldGVSZXNvdXJjZSA8\nPiAwIHRoZW4NTW92ZURlc2NUb1NjcmFwIGFldGVSZXNvdXJjZQ1lbmQgaWYNZW5kIG1v\ndXNlVXANDWZ1bmN0aW9uIE1ha2VBZXRlDWdsb2JhbCBpbkVkaXQNcHV0IGNhcmQgZmll\nbGQgIm1ham9yVmVyc2lvbiIgb2YgY2FyZCAicHJlZmVyZW5jZSIgaW50byB4DXB1dCBj\nYXJkIGZpZWxkICJtaW5vclZlcnNpb24iIG9mIGNhcmQgInByZWZlcmVuY2UiIGludG8g\neQ1pZiBsZW5ndGgoeSkgPSAxIHRoZW4gbXVsdGlwbHkgeSBieSAxMA1wdXQgKHggZGl2\nIDEwKSAqIDQwOTYgKyAoeCBtb2QgMTApICogMjU2ICsgKHkgZGl2IDEwKSAqIDE2ICsg\nKHkgbW9kIDEwKSBpbnRvIHZlcnNpb24NcHV0IGZhbHNlIGludG8gaW5FZGl0DXB1c2gg\nY2FyZA1nbyB0byBmaXJzdCBjYXJkIG9mIGJrZ25kIGV2ZW50cw1wdXQgIr4iICYgUmVz\nVHlwZShjYXJkIGZpZWxkICJyZXNvdXJjZVR5cGUiIG9mIGNhcmQgInByZWZlcmVuY2Ui\nKSAmICK+IiAmIE5ld0hhbmRsZSgpIGludG8gaGFuZA1wdXQgMCBpbnRvIGVyckNvdW50\nDXB1dCBudW1iZXIgb2YgY2FyZHMgaW4gYmtnbmQgInN1aXRlSW5mbyIgaW50byBzdWl0\nZUNvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInNob3IiLCB2ZXJzaW9uKSA8PiAwIHRo\nZW4gYWRkIDEgdG8gZXJyQ291bnQNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hvciIsIGNh\ncmQgZmllbGQgImxhbmd1YWdlQ29kZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIpIDw+IDAg\ndGhlbiBhZGQgMSB0byBlcnJDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwg\nY2FyZCBmaWVsZCAic2NyaXB0Q29kZSIgb2YgY2FyZCAicHJlZmVyZW5jZSIpIDw+IDAg\ndGhlbiBhZGQgMSB0byBlcnJDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwg\nc3VpdGVDb3VudC0xKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0IHdp\ndGggc3VpdGVJbmRleCA9IDIgdG8gc3VpdGVDb3VudA1zZXQgY3Vyc29yIHRvIGJ1c3kN\nZ28gY2FyZCBzdWl0ZUluZGV4IG9mIGJrZ25kICJzdWl0ZUluZm8iDXB1dCBmaWVsZCAi\nc3VpdGVDb2RlIiBpbnRvIG15U3VpdGVDb2RlDWlmIEV4dGVuZERlc2MoaGFuZCwgInMy\nNTUiLCBmaWVsZCAic3VpdGVOYW1lIikgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50\nDWlmIEV4dGVuZERlc2MoaGFuZCwgInMyNTUiLCBmaWVsZCAiU3VpdGVDb21tZW50Iiwg\ndHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50DWlmIEV4dGVuZERlc2MoaGFu\nZCwgInRuYW0iLCBteVN1aXRlQ29kZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50\nDWlmIEV4dGVuZERlc2MoaGFuZCwgInNob3IiLCAxKSA8PiAwIHRoZW4gYWRkIDEgdG8g\nZXJyQ291bnQgLS0gc3VpdGUgbGV2ZWwNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hvciIs\nIDEpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBzdWl0ZSB2ZXJzaW9uDXB1\ndCBmaWVsZCBFdmVudExpc3QgaW50byBteUV2ZW50TGlzdA1wdXQgZmllbGQgQ2xhc3NM\naXN0IGludG8gbXlDbGFzc0xpc3QNcHV0IGZpZWxkIENvbXBhcmVMaXN0IGludG8gbXlD\nb21wYXJlTGlzdA1wdXQgZmllbGQgRW51bUxpc3QgaW50byBteUVudW1MaXN0DS0tIG5v\ndyBkbyBpdCBmb3IgZWFjaCBldmVudCBpbiB0aGUgbGlzdA1wdXQgbnVtYmVyIG9mIGxp\nbmVzIGluIG15RXZlbnRMaXN0IGludG8gZXZlbnRDb3VudA0tLSBjaGVjayBhY3R1YWwg\nZXZlbnQgY291bnQNcHV0IDAgaW50byBhY3R1YWxDb3VudA1yZXBlYXQgd2l0aCBldmVu\ndEluZGV4ID0gMSB0byBldmVudGNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1w\nKCJldmVudCIgJiYgaXRlbSAyIG9mIGxpbmUgZXZlbnRJbmRleCBvZiBteUV2ZW50TGlz\ndCkgdGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0\naGVuDWFkZCAxIHRvIGFjdHVhbENvdW50DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA1p\nZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgYWN0dWFsQ291bnQpIDw+IDAgdGhlbiBh\nZGQgMSB0byBlcnJDb3VudA1yZXBlYXQgd2l0aCBldmVudEluZGV4ID0gMSB0byBldmVu\ndGNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1wKCJldmVudCIgJiYgaXRlbSAy\nIG9mIGxpbmUgZXZlbnRJbmRleCBvZiBteUV2ZW50TGlzdCkgdGhlbg1pZiBub3QgaGls\naXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVuDWlmIEV4dGVuZERlc2Mo\naGFuZCwgInMyNTUiLCBmaWVsZCAiZXZlbnROYW1lIikgPD4gMCB0aGVuIGFkZCAxIHRv\nIGVyckNvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInMyNTUiLCBmaWVsZCAiZXZlbnRD\nb21tZW50IiwgdHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikpIDw+\nIDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFt\nIiwgUmVzVHlwZShmaWVsZCAiZXZlbnRJRCIpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQNcHV0IGxpbmUgMSBvZiBmaWVsZCBwYXJhbUluZm8gaW50byB4IC0tIHJlcGx5\nDWlmIEV4dGVuZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0gMyBvZiB4KSkg\nPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50DXB1dCBpdGVtIDQgb2YgeCBpbnRvIHRl\nbXANZGVsZXRlIGl0ZW0gMSB0byA0IG9mIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1\nNSIsIHgsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSByZXBseSBj\nb21tZW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInNob3IiLCB0ZW1wKSA8PiAwIHRoZW4g\nYWRkIDEgdG8gZXJyQ291bnQgLS0gcmVwbHkgYXR0cmlidXRlDXB1dCBsaW5lIDIgb2Yg\nZmllbGQgcGFyYW1JbmZvIGludG8geCAtLSBkaXJlY3Qgb2JqZWN0DWlmIEV4dGVuZERl\nc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0gMyBvZiB4KSkgPD4gMCB0aGVuIGFk\nZCAxIHRvIGVyckNvdW50DXB1dCBpdGVtIDQgb2YgeCBpbnRvIHRlbXANZGVsZXRlIGl0\nZW0gMSB0byA0IG9mIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1NSIsIHgsIHRydWUp\nIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBkaXJlY3QgY29tbWVudA1pZiBF\neHRlbmREZXNjKGhhbmQsICJzaG9yIiwgdGVtcCkgPD4gMCB0aGVuIGFkZCAxIHRvIGVy\nckNvdW50IC0tIGRpcmVjdCBhdHRyaWJ1dGUNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hv\nciIsIChudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgcGFyYW1JbmZvLTIpKSA8PiAwIHRo\nZW4gYWRkIDEgdG8gZXJyQ291bnQgLS0gZXh0cmEgcGFyYW0gY291bnQNcmVwZWF0IHdp\ndGggaSA9IDMgdG8gbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkIHBhcmFtSW5mbw1wdXQg\nbGluZSBpIG9mIGZpZWxkIHBhcmFtSW5mbyBpbnRvIHgNaWYgRXh0ZW5kRGVzYyhoYW5k\nLCAiczI1NSIsIGl0ZW0gMSBvZiB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQgLS0gcGFyYW0gbmFtZQ1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFtIiwgaXRl\nbSAyIG9mIHgsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBwYXJh\nbSBrZXkNaWYgRXh0ZW5kRGVzYyhoYW5kLCAidG5hbSIsIGl0ZW0gMyBvZiB4LCB0cnVl\nKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQgLS0gcGFyYW0gdHlwZQ1wdXQgaXRl\nbSA0IG9mIHggaW50byB0ZW1wDWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInMyNTUiLCB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQgLS0gcGFyYW0gY29tbWVudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwg\ndGVtcCkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50IC0tIHBhcmFtIGF0dHJpYnV0\nZQ1lbmQgcmVwZWF0DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdCAtLSBmb3IgZXZlcnkg\nZXZlbnQgaW4gc3VpdGUNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBteUNsYXNzTGlzdCBp\nbnRvIGNsYXNzQ291bnQNcHV0IDAgaW50byBhY3R1YWxDb3VudA1yZXBlYXQgd2l0aCBj\nbGFzc0luZGV4ID0gMSB0byBjbGFzc0NvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBq\ndW1wKCJjbGFzcyIgJiYgaXRlbSAyIG9mIGxpbmUgY2xhc3NJbmRleCBvZiBteUNsYXNz\nTGlzdCkgdGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVU\nIiB0aGVuDWFkZCAxIHRvIGFjdHVhbENvdW50DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVh\ndA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgYWN0dWFsQ291bnQpIDw+IDAgdGhl\nbiBhZGQgMSB0byBlcnJDb3VudA1yZXBlYXQgd2l0aCBjbGFzc0luZGV4ID0gMSB0byBj\nbGFzc0NvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBqdW1wKCJjbGFzcyIgJiYgaXRl\nbSAyIG9mIGxpbmUgY2xhc3NJbmRleCBvZiBteUNsYXNzTGlzdCkgdGhlbg1pZiBub3Qg\naGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVuDWlmIEV4dGVuZERl\nc2MoaGFuZCwgInMyNTUiLCBmaWVsZCAiY2xhc3NOYW1lIiwgdHJ1ZSkgPD4gMCB0aGVu\nIGFkZCAxIHRvIGVyckNvdW50IC0tIGNsYXNzIG5hbWUNaWYgRXh0ZW5kRGVzYyhoYW5k\nLCAidG5hbSIsIFJlc1R5cGUoZmllbGQgImNsYXNzSUQiKSkgPD4gMCB0aGVuIGFkZCAx\nIHRvIGVyckNvdW50IC0tIGNsYXNzIElEDWlmIEV4dGVuZERlc2MoaGFuZCwgInMyNTUi\nLCBmaWVsZCAiY2xhc3NDb21tZW50IiwgdHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVy\nckNvdW50IC0tIGNsYXNzIGNvbW1lbnQNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBmaWVs\nZCAicHJvcEluZm8iIGludG8gcHJvcENvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInNo\nb3IiLCBwcm9wQ291bnQpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudA1yZXBlYXQg\nd2l0aCBwcm9wSW5kZXggPSAxIHRvIHByb3BDb3VudA1wdXQgbGluZSBwcm9wSW5kZXgg\nb2YgZmllbGQgInByb3BJbmZvIiBpbnRvIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1\nNSIsIGl0ZW0gMSBvZiB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQg\nLS0gY2xhc3MgbmFtZQ1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFtIiwgUmVzVHlwZShp\ndGVtIDIgb2YgeCkpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBjbGFzcyBJ\nRA1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFtIiwgUmVzVHlwZShpdGVtIDMgb2YgeCkp\nIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBjbGFzcyBJRA1wdXQgaXRlbSA0\nIG9mIHggaW50byB0ZW1wDWRlbGV0ZSBpdGVtIDEgdG8gNCBvZiB4DWlmIEV4dGVuZERl\nc2MoaGFuZCwgInMyNTUiLCB4LCB0cnVlKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291\nbnQgLS0gY2xhc3MgY29tbWVudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgdGVt\ncCkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50IC0tIGF0dHJpYnV0ZQ1lbmQgcmVw\nZWF0DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgImVsZW1lbnRzIiBpbnRvIGVs\nZW1Db3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgZWxlbUNvdW50KSA8PiAw\nIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0IHdpdGggZWxlbUluZGV4ID0gMSB0\nbyBlbGVtQ291bnQNcHV0IGxpbmUgZWxlbUluZGV4IG9mIGZpZWxkICJlbGVtZW50cyIg\naW50byB4DWlmIEV4dGVuZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0gMSBv\nZiB4KSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVyckNvdW50IC0tIGVsZW1lbnQgY2xhc3MN\ncHV0IG51bWJlciBvZiBpdGVtcyBvZiB4IGludG8ga2V5Rm9ybUNvdW50DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInNob3IiLCBrZXlGb3JtQ291bnQtMSkgPD4gMCB0aGVuIGFkZCAx\nIHRvIGVyckNvdW50DXJlcGVhdCB3aXRoIGtleUZvcm1JbmRleCA9IDIgdG8ga2V5Rm9y\nbUNvdW50DWlmIEV4dGVuZERlc2MoaGFuZCwgInRuYW0iLCBSZXNUeXBlKGl0ZW0ga2V5\nRm9ybUluZGV4IG9mIHgpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQgLS0ga2V5\nIGZvcm0NZW5kIHJlcGVhdA1lbmQgcmVwZWF0DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVh\ndA0tLSBub3cgZG8gY29tcGFyaXNvbg1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIG15Q29t\ncGFyZUxpc3QgaW50byBjb21wYXJlQ291bnQNcHV0IDAgaW50byBhY3R1YWxDb3VudA1y\nZXBlYXQgd2l0aCBjb21wYXJlSW5kZXggPSAxIHRvIGNvbXBhcmVDb3VudA1zZXQgY3Vy\nc29yIHRvIGJ1c3kNaWYganVtcCgiY29tcGFyaXNvbiIgJiYgaXRlbSAyIG9mIGxpbmUg\nY29tcGFyZUluZGV4IG9mIG15Q29tcGFyZUxpc3QpIHRoZW4NaWYgbm90IGhpbGl0ZSBv\nZiBia2duZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1hZGQgMSB0byBhY3R1YWxDb3Vu\ndA1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQNaWYgRXh0ZW5kRGVzYyhoYW5kLCAic2hv\nciIsIGFjdHVhbENvdW50KSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0\nIHdpdGggY29tcGFyZUluZGV4ID0gMSB0byBjb21wYXJlQ291bnQNc2V0IGN1cnNvciB0\nbyBidXN5DWlmIGp1bXAoImNvbXBhcmlzb24iICYmIGl0ZW0gMiBvZiBsaW5lIGNvbXBh\ncmVJbmRleCBvZiBteUNvbXBhcmVMaXN0KSB0aGVuDWlmIG5vdCBoaWxpdGUgb2YgYmtn\nbmQgYnV0dG9uICJmcm9tIEFFVVQiIHRoZW4NaWYgRXh0ZW5kRGVzYyhoYW5kLCAiczI1\nNSIsIGZpZWxkICJjb21wYXJlTmFtZSIsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBl\ncnJDb3VudCAtLSBjb21wYXJlIG5hbWUNaWYgRXh0ZW5kRGVzYyhoYW5kLCAidG5hbSIs\nIFJlc1R5cGUoZmllbGQgImNvbXBhcmVJRCIpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJy\nQ291bnQgLS0gZWxlbWVudCBjbGFzcw1pZiBFeHRlbmREZXNjKGhhbmQsICJzMjU1Iiwg\nZmllbGQgImNvbXBhcmVDb21tZW50IiwgdHJ1ZSkgPD4gMCB0aGVuIGFkZCAxIHRvIGVy\nckNvdW50IC0tIGNvbXBhcmUgY29tbWVudA1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQN\nLS0gZG8gZW51bWVyYXRpb25zDXB1dCBudW1iZXIgb2YgbGluZXMgaW4gbXlFbnVtTGlz\ndCBpbnRvIGVudW1Db3VudA1wdXQgMCBpbnRvIGFjdHVhbENvdW50DXJlcGVhdCB3aXRo\nIGVudW1JbmRleCA9IDEgdG8gZW51bUNvdW50DXNldCBjdXJzb3IgdG8gYnVzeQ1pZiBq\ndW1wKCJlbnVtZXJhdGlvbiIgJiYgbGluZSBlbnVtSW5kZXggb2YgbXlFbnVtTGlzdCkg\ndGhlbg1pZiBub3QgaGlsaXRlIG9mIGJrZ25kIGJ1dHRvbiAiZnJvbSBBRVVUIiB0aGVu\nDWFkZCAxIHRvIGFjdHVhbENvdW50DWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA1pZiBF\neHRlbmREZXNjKGhhbmQsICJzaG9yIiwgYWN0dWFsQ291bnQpIDw+IDAgdGhlbiBhZGQg\nMSB0byBlcnJDb3VudA1yZXBlYXQgd2l0aCBlbnVtSW5kZXggPSAxIHRvIGVudW1Db3Vu\ndA1zZXQgY3Vyc29yIHRvIGJ1c3kNaWYganVtcCgiZW51bWVyYXRpb24iICYmIGxpbmUg\nZW51bUluZGV4IG9mIG15RW51bUxpc3QpIHRoZW4NaWYgbm90IGhpbGl0ZSBvZiBia2du\nZCBidXR0b24gImZyb20gQUVVVCIgdGhlbg1pZiBFeHRlbmREZXNjKGhhbmQsICJ0bmFt\nIiwgUmVzVHlwZShmaWVsZCAiZW51bWVyYXRpb24iKSkgPD4gMCB0aGVuIGFkZCAxIHRv\nIGVyckNvdW50DXB1dCBudW1iZXIgb2YgbGluZXMgaW4gZmllbGQgImVudW1JbmZvIiBp\nbnRvIGVudW1lcmF0b3JDb3VudA1pZiBFeHRlbmREZXNjKGhhbmQsICJzaG9yIiwgZW51\nbWVyYXRvckNvdW50KSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQNcmVwZWF0IHdp\ndGggZW51bWVyYXRvckluZGV4ID0gMSB0byBlbnVtZXJhdG9yQ291bnQNcHV0IGxpbmUg\nZW51bWVyYXRvckluZGV4IG9mIGZpZWxkICJlbnVtSW5mbyIgaW50byB4DWlmIEV4dGVu\nZERlc2MoaGFuZCwgInMyNTUiLCBpdGVtIDEgb2YgeCwgdHJ1ZSkgPD4gMCB0aGVuIGFk\nZCAxIHRvIGVyckNvdW50IC0tIG5hbWUNaWYgRXh0ZW5kRGVzYyhoYW5kLCAidG5hbSIs\nIFJlc1R5cGUoaXRlbSAyIG9mIHgpKSA8PiAwIHRoZW4gYWRkIDEgdG8gZXJyQ291bnQg\nLS0gaWQNZGVsZXRlIGl0ZW0gMSB0byAyIG9mIHgNaWYgRXh0ZW5kRGVzYyhoYW5kLCAi\nczI1NSIsIHgsIHRydWUpIDw+IDAgdGhlbiBhZGQgMSB0byBlcnJDb3VudCAtLSBjb21t\nZW50DWVuZCByZXBlYXQNZW5kIGlmDWVuZCBpZg1lbmQgcmVwZWF0DWVuZCByZXBlYXQg\nLS0gZm9yIGV2ZXJ5IHN1aXRlDXBvcCBjYXJkDXB1dCB0cnVlIGludG8gaW5FZGl0DWlm\nIGVyckNvdW50IDw+IDAgdGhlbg1EaXNwb3NlRGVzYyhoYW5kKQ1wdXQgIr5udWxsvjAi\nIGludG8gaGFuZA1lbmQgaWYNcmV0dXJuIGhhbmQNZW5kIE1ha2VBZXRlDQ0AAg4AJQGA\nATAAeQFEAMqgBAAAAAAAAQAAAAwAAAAQRGVsZXRlyQAAb24gbW91c2VVcA1nbG9iYWwg\nZ0RlbGV0ZVN1aXRlDWFuc3dlciAiQ2xpY2sgb24gYSBzdWl0ZSBpbiB0aGUgbGlzdCB0\nbyBkZWxldGUgaXQuIiB3aXRoICJPSyIgb3IgIkNhbmNlbCINaWYgaXQgaXMgIkNhbmNl\nbCIgdGhlbg1wdXQgZmFsc2UgaW50byBnRGVsZXRlU3VpdGUNcGFzcyBtb3VzZVVwDWVs\nc2UNcHV0IHRydWUgaW50byBnRGVsZXRlU3VpdGUNZW5kIGlmDXBhc3MgbW91c2VVcA0N\nDS0tIGdsb2JhbCBnV2hlcmVGcm9tDS0tIGxvY2sgc2NyZWVuDS0tIGdvIGxhc3QgY2Fy\nZCBvZiBia2duZCAic3VpdGVJbmZvIg0tLSBEb01lbnUgIk5ldyBDYXJkIg0tLSBzZXQg\ndGhlIGhpbGl0ZSBvZiBiZyBidG4gImFldGUiIHRvIHRydWUNLS0gcHV0ICJhZXRlIiBp\nbnRvIGJnIGZsZCAiU3VpdGVDb2RlIg0tLSBwdXNoIGNkDS0tIHBvcCBjZCBpbnRvIGdX\naGVyZUZyb20NLS0gdW5sb2NrIHNjcmVlbiB3aXRoIHZpc3VhbCB3aXBlIGxlZnQNZW5k\nIG1vdXNlVXANAAAiACgCBQAgAAAANQEKAAAAAAAAAAEAFQASCQAAGAAAAAABggApAQAB\nQQEaAVQBZKACAAAAAAABABUACgEAAA1Db3B5IEZpZWxkAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUg\nY29kZSBzY3JhdGNocGFkIGZpZWxkIHRvIHRoZSBjbGlwYm9hcmQuIg1lbmQgTW91c2VX\naXRoaW4NDW9uIG1vdXNlVXANY2xpY2sgYXQgbG9jIG9mIGNhcmQgZmllbGQgInNjcmF0\nY2giDXR5cGUgImEiIHdpdGggY29tbWFuZEtleSAtLSBzZWxlY3QgYWxsDWRvTWVudSAi\nQ29weSBUZXh0Ig1nZXQgcmVjdCBvZiBjYXJkIGZpZWxkICJzY3JhdGNoIg1wdXQgaXRl\nbSAxIG9mIGl0IGludG8geA1wdXQgKGl0ZW0gMiBvZiBpdCkgLSAyIGludG8geQ1jbGlj\nayBhdCB4LCB5DWVuZCBtb3VzZVVwAADwACoBAAEzAAoBRwCNoAQAAAAAAAEAAAAMAAAA\nEFRyYW5zbGF0aW9uIFRhYmxlAABvbiBtb3VzZVVwDWxvY2FsaXphdGlvbiB0cnVlDWVu\nZCBtb3VzZVVwDQ1vbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0\nbyBjcmVhdGUgYSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgbG9jYWxpemluZyB5b3VyICdh\nZXRlJy4gSXQgd2lsbCBhcHBlYXIgaW4gdGhlIHNjcmF0Y2hwYWQuIg1lbmQgTW91c2VX\naXRoaW4AAAAoACsCBQA8AM0ATAFiAAEAAAAAAAAAAwAMAQAAEHBhZE5hbWUAAAD/2AAb\nAFIgZSBzIG8gdSByIGMgZSAgVCBvIG8gbCBzAP/VAAsAU2NyYXRjaHBhZAD/6wALAHJl\ncWQNc21wbA0AbWFpbk1lbnUAZnVuY3Rpb24gVGNsQ2xpZW50U2FtcGxlIGNhcmRUeXBl\nDWlmIGNhcmRUeXBlID0gImV2ZW50IiB0aGVuDXB1dCBmaWVsZCAicGFyYW1JbmZvIiBp\nbnRvIHBhcmFtSW5mbw1wdXQgIkFFIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIp\nIGludG8gRXZlbnROYW1lDXB1dCBpdGVtIDMgb2YgZmllbGQgInBhcmFtSW5mbyIgPD4g\nIm51bGwiIGludG8gcmV0dXJuVHlwZQ1wdXQgImFlcmVnaXN0ZXIiICYmIEV2ZW50TmFt\nZSAmJiBmaWVsZCAiRXZlbnRDbGFzcyIgwg0mJiBmaWVsZCAiRXZlbnRJRCIgJiYgaXRl\nbSAzIG9mIHBhcmFtSW5mbyBpbnRvIHJzdA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHBh\ncmFtSW5mbyBpbnRvIGNvdW50DXB1dCAiIiBpbnRvIG9wdGlvbkxpc3QNcHV0ICIiIGlu\ndG8gcmVxdWlyZWRMaXN0DXJlcGVhdCB3aXRoIGluZGV4ID0gMiB0byBjb3VudA1wdXQg\nbGluZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB4DWlmIGluZGV4ID0gMiB0aGVuDXB1\ndCBkaXJlY3RQYXJhbSBpbnRvIGl0ZW0gMSBvZiB4DXB1dCAiLS0tLSIgaW50byBpdGVt\nIDIgb2YgeA1lbmQgaWYNcHV0IGl0ZW0gNCBvZiB4IGludG8gdGVtcA1wdXQgKHRlbXAg\nPiAzMjc2NykgaW50byBpc09wdGlvbmFsDXB1dCB0ZW1wIGRpdiA4MTkyIGludG8gdGVt\ncA1pZiAodGVtcCBtb2QgMikgPSAxIHRoZW4NcHV0ICJlbnVtIiBpbnRvIGl0ZW0gMyBv\nZiB4DWVuZCBpZg1pZiBpdGVtIDMgb2YgeCA8PiAibnVsbCIgdGhlbg1wdXQgc3BhY2Ug\naW50byB0ZW1wDWlmIGl0ZW0gMyBvZiB4ID0gIlRFWFQiIHRoZW4NcHV0IHF1b3RlICYg\naXRlbSAyIG9mIHggJiBxdW90ZSBhZnRlciB0ZW1wDWVsc2UNcHV0IHF1b3RlICYgUmVz\nVHlwZShpdGVtIDIgb2YgeCkgJiBSZXNUeXBlKGl0ZW0gMyBvZiB4KSAmIHF1b3RlIGFm\ndGVyIHRlbXANZW5kIGlmDWlmIHNwYWNlIGlzIGluIGl0ZW0gMSBvZiB4IHRoZW4NcHV0\nIHNwYWNlICYgcXVvdGUgJiBpdGVtIDEgb2YgeCAmIHF1b3RlIGFmdGVyIHRlbXANZWxz\nZQ1wdXQgc3BhY2UgJiBpdGVtIDEgb2YgeCBhZnRlciB0ZW1wDWVuZCBpZg1pZiBpc09w\ndGlvbmFsIHRoZW4NcHV0IHRlbXAgYWZ0ZXIgb3B0aW9uTGlzdA1lbHNlDXB1dCB0ZW1w\nIGFmdGVyIHJlcXVpcmVkTGlzdA1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQgLS0gMiB0\nbyBuDXB1dCByZXF1aXJlZExpc3QgYWZ0ZXIgcnN0DWlmIG9wdGlvbkxpc3QgPD4gIiIg\ndGhlbg1wdXQgIiBvcHRpb25hbGx5IiAmIG9wdGlvbkxpc3QgYWZ0ZXIgcnN0DWVuZCBp\nZg1yZXR1cm4gcnN0ICYgcmV0dXJuICYgcmV0dXJuDWVsc2UNcmV0dXJuICIiDWVuZCBp\nZg1lbmQgVGNsQ2xpZW50U2FtcGxlDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAGAQk1BUAAACsoAAAAAAAAAAAABAAAAAAAAAVYCAAAAAAABVgIAABsAAAEFARAA\nAAAAAAAAAAAAAEwAAADkv4K5go3iNSAAAuEI4hEBEyDhCuEaIBYBFQPhCOE4AgAg4gWu\nheEcIBYQEwXhCOEYAhMgJhAQEhThCL+Cv4K/gr+Cv4K/gr+Cv4KygowQgOIQAgKihYri\nEQEC4hEDAraGjhCA4hACAo0QQOIhgACogYlPDgAxgOEBTxkAAYDhAW8YMzPHhxgPbxwz\nMYzMmA9fDjMxjM7hXwczMY/H4W8DMzGMA4APbxMzMYxJmA9vDh8wx4cYD6+BjBABHUDh\nBYkgAYArAYDhBSABQCsDgOEFjCABoCsBwOEFiSABICsFgOEFIAEgKwaA4QW/hr+Gv4an\nhopCCqqqqsGqqqqqqqqgA+EGhokgASArBYDhBb+GvYaMIAGgKwHA4QWOEWgrBoDhBY0R\ngBsC4QaMEAEdQOEFZSBzZWxlY3Rpb24gdmlzaWIAAWmAQ0FSRAAALR0AAAAAAAALiwAA\nAAAAAAAAAAAAAAAAOvAAAA48AC8AOQABPiwAGQAAIBoApAATAgYANwCFAEoB+QACAAAA\nAAAAAAQADAAAABBzZW5kVGFyZ2V0AABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAi\nVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB0byBiZSB1c2VkIGluIFBB\nU0NBTCBjbGllbnQgc2FtcGxlIGNvZGUuIg1lbmQgTW91c2VXaXRoaW4NAACcAAwCBgBm\nASQAeQFdAAIAAAAAAAAABAAMAAAAEHRpbWVPdXQAAG9uIE1vdXNlV2l0aGluDVNob3dC\nYWxsb29uICJFbnRlciB0aGUgdGltZW91dCB2YWx1ZSB0byBiZSB1c2VkIGluIFBBU0NB\nTCBjbGllbnQgc2FtcGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAADCABgC\nBgB6ASQAjQH5AAIAAAAAAAAABAAMAAAAEHNlbmRNb2RlAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiRW50ZXIgdGhlIHNlbmQgbW9kZSAob3RoZXIgdGhhbiB3YWl0UmVw\nbHkvbm9SZXBseS9xdWV1ZVJlcGx5KSB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQg\nc2FtcGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAKAAFwIGAI4BJAChAfkA\nAgAAAAAAAAAEAAwAAAAQaWRsZVByb2MAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29u\nICJFbnRlciB0aGUgbmFtZSBvZiBpZGxlIHByb2MgdG8gYmUgdXNlZCBpbiBQQVNDQUwg\nY2xpZW50IHNhbXBsZSBjb2RlIGhlcmUuIg1lbmQgTW91c2VXaXRoaW4NAACwABkCBgCi\nASQAtQH5AAIAAAAAAAAAAwAMAAAAEGFlRmlsdGVyAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGZpbHRlciBmdW5jdGlv\nbiB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQgc2FtcGxlIGNvZGUgaGVyZS4iDWVu\nZCBNb3VzZVdpdGhpbg0AAKwAHAIGALYBJADJAfkAAgAAAAAAAAADAAwAAAAQdGFyZ2V0\nRGVzYwAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVydCB0aGUgbmFtZSBv\nZiB0YXJnZXQgZGVzY3JpcHRvciB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQgc2Ft\ncGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAAAiAAECBQDfAJ8A8QEYAAAA\nAAAAAAAAFQAMBQAAEAAAAAA/BgACAQAA8gCfAQUA+sAGAAAAAAABAAAADAAAABBQYXNj\nYWwAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGluZGlj\nYXRlIHRoYXQgdGhlIHNlcnZlciBjb2RlIHRvIGhhbmRsZSBBcHBsZSBFdmVudHMgd2ls\nbCBiZSBpbiBQQVNDQUwuIg1lbmQgTW91c2VXaXRoaW4NDWZ1bmN0aW9uIFNlcnZlclNh\nbXBsZSBjYXJkVHlwZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAm\nIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNZ2xvYmFsIHZl\ncmJvc2UNaWYgdmVyYm9zZSB0aGVuDXB1dCBmaWVsZCAiZXZlbnRDb21tZW50IiBpbnRv\nIHRlbXANaWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAieyAiICYgdGVtcCAmICIgfSIgJiBy\nZXR1cm4gJiByZXR1cm4gaW50byBwcm9jSGVhZGVyDWVuZCBpZg1lbmQgaWYNcHV0IFBh\nc2NhbENsaWVudFRlbXBsYXRlKCkgJiByZXR1cm4gaW50byB0ZW1wDXB1dCAiRG8iIGFm\ndGVyIGNoYXIgOSBvZiB0ZW1wDXB1dCB0ZW1wIGFmdGVyIHByb2NIZWFkZXINcHV0IFRh\nYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgVGFiICYgInsg\ncHV0IHlvdXIgY29kZSBoZXJlIH0iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0\nIFRhYiAmICJEbyIgJiBwcm9jTmFtZSAmICIgOj0gTm9FcnI7IiAmIHJldHVybiBhZnRl\nciBwcm9jSGVhZGVyDXB1dCBUYWIgJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0\nZXIgcHJvY0hlYWRlcg1wdXQgIkZ1bmN0aW9uIEhhbmRsZSIgJiBwcm9jTmFtZSDCDSYg\nIih0aGVBcHBsZUV2ZW50LCB0aGVSZXBseTpBcHBsZUV2ZW50OyB0aGVSZWZDb246TE9O\nR0lOVCk6T1NFcnI7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCBHbHVlSW5m\nbyhmaWVsZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8NcHV0IG51bWJlciBvZiBs\naW5lcyBvZiBwYXJhbUluZm8gaW50byBjb3VudA1wdXQgKGl0ZW0gMyBvZiBwYXJhbUlu\nZm8gPD4gIm51bGwiKSBpbnRvIGlzRnVuYw1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFi\nDXB1dCBUYWIgJiB0d29UYWIgaW50byB0aHJlZVRhYg1wdXQgIiIgaW50byB2YXJEZWNs\nYXJlDXB1dCBmYWxzZSBpbnRvIG5lZWRFcnINcHV0ICIiIGludG8gY2xlYW5VcENvZGUN\ncHV0ICIiIGludG8gcHV0UmVzdWx0Q29kZQ1wdXQgVGFiICYgIkZhaWxFcnIoRG8iICYg\ncHJvY05hbWUgJiAiKCIgaW50byBjYWxsWW91ckNvZGUNcHV0IFRhYiAmICJCRUdJTiIg\nJiByZXR1cm4gaW50byBpbml0Q29kZQ1wdXQgMCBpbnRvIHRvdGFsUGFyYW0NLS0gaWYg\nYSBmdW5jdGlvbiBnZXQgdGhlIHJlc3VsdCBiYWNrDWlmIGlzRnVuYyB0aGVuDWFkZCAx\nIHRvIHRvdGFsUGFyYW0NcHV0IGxpbmUgMSBvZiBwYXJhbUluZm8gaW50byB4DXB1dCBp\ndGVtIDQgb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAz\nIG9mIHgpIGludG8gbmFtZUxpc3QNcHV0IFRhYiAmICJJRiB0aGVSZXBseS5kYXRhSGFu\nZGxlIDw+IE5JTCBUSEVOIiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWlmIHBh\ncmFtVHlwZSA8PSAzIHRoZW4gLS0gcmVzdWx0IGlzIEFFRGVzYyBvciBIYW5kbGUNcHV0\nICJ0aGVSZXN1bHQ6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIFRhYiAmICJ0aGVSZXN1bHQuZGF0YUhhbmRsZSA6PSBOSUw7IiAmIHJldHVybiBhZnRl\nciBpbml0Q29kZQ1pZiAocGFyYW1UeXBlID0gMCkgb3IgKHBhcmFtVHlwZSA9IDIpIHRo\nZW4NcHV0ICJ0aGVSZXN1bHQsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZQ1wdXQgVGFi\nICYgInRoZVJlc3VsdC5kZXNjcmlwdG9yVHlwZSA6PSAiICYgaXRlbSA0IG9mIG5hbWVM\naXN0IMINJiAiOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNaWYgaXRlbSAzIG9mIG5h\nbWVMaXN0ID0gIkhhbmRsZSIgdGhlbg1wdXQgInRoZVJlc3VsdC5kYXRhSGFuZGxlLCIg\nYWZ0ZXIgY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMyBvZiBuYW1lTGlzdCAmICIo\ndGhlUmVzdWx0LmRhdGFIYW5kbGUpLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1l\nbmQgaWYNcHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKHRoZVJl\nc3VsdCkpOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNcHV0IHR3b1RhYiAmICJG\nYWlsRXJyKEFFUHV0S2V5RGVzYyh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCB0aGVS\nZXN1bHQpKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxzZSBpZiAocGFy\nYW1UeXBlID0gNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4gLS0gcmVzdWx0IGlzIG9u\nIHN0YWNrDXB1dCAidGhlUmVzdWx0OiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsi\nICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0ICJ0aGVSZXN1bHQsIiBhZnRlciBj\nYWxsWW91ckNvZGUNcHV0IHR3b1RhYiAmICJGYWlsRXJyKEFFUHV0S2V5UHRyKHRoZVJl\ncGx5LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIs\nIEB0aGVSZXN1bHQiIGFmdGVyIHB1dFJlc3VsdENvZGUNaWYgcGFyYW1UeXBlID0gNCB0\naGVuDXB1dCAiLCBTaXplT2YoIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICIpKSk7IiAm\nIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWVsc2UNcHV0ICJbMV0sIExlbmd0aCh0\naGVSZXN1bHQpKSk7IiAmIHJldHVybiBhZnRlciBwdXRSZXN1bHRDb2RlDWVuZCBpZg1l\nbmQgaWYNZW5kIGlmIC0tIGlzRnVuYw1yZXBlYXQgd2l0aCBwYXJhbUluZGV4ID0gMiB0\nbyBjb3VudA1wdXQgbGluZSBwYXJhbUluZGV4IG9mIHBhcmFtSW5mbyBpbnRvIHgNaWYg\naXRlbSAzIG9mIHggPD4gIm51bGwiIHRoZW4NYWRkIDEgdG8gdG90YWxQYXJhbQ1wdXQg\naXRlbSA0IG9mIHggaW50byBwYXJhbVR5cGUNcHV0IChpdGVtIDUgb2YgeCA9ICJvIikg\naW50byBpc09wdGlvbmFsDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVtIDMgb2YgeCkgaW50\nbyBuYW1lTGlzdA1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IHR3b1RhYiBpbnRvIGluZGVu\ndA1lbHNlDXB1dCBUYWIgaW50byBpbmRlbnQNZW5kIGlmDWlmIHBhcmFtVHlwZSA9IDAg\ndGhlbiAtLSBBRURlc2MNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0IHRo\naXNOYW1lICYmICI6IEFFRGVzYzsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIFRhYiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlIDo9IE5JTDsiICYgcmV0dXJuIGFm\ndGVyIGluaXRDb2RlDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgaXRlbSA2IG9mIHggaW50\nbyBwdHJUaGlzTmFtZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogQUVEZXNjUHRyOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgcHRyVGhpc05hbWUgJiAiLCIgYWZ0ZXIg\nY2FsbFlvdXJDb2RlDXB1dCB0cnVlIGludG8gbmVlZEVycg1wdXQgVGFiICYgImVyciA6\nPSBBRUdldEtleURlc2ModGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHggwg0mICIs\ndHlwZVdpbGRDYXJkLCIgJiB0aGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNcHV0IFBhc2NhbE9wdGlvbkhhbmRsaW5nKHRoaXNOYW1lLCBwdHJUaGlzTmFt\nZSkgYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1wdXQgdGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2Fs\nbFlvdXJDb2RlDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVF\ndmVudCwiICYgaXRlbSAyIG9mIHggwg0mICIsdHlwZVdpbGRDYXJkLCIgJiB0aGlzTmFt\nZSAmICIpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgdHdvVGFi\nICYgIklnbm9yZU9TRXJyKEFFRGlzcG9zZURlc2MoIiAmIHRoaXNOYW1lICYgIikpOyIg\nJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiBwYXJhbVR5cGUgPSAxIHRo\nZW4gLS0gaGFuZGxlDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBp\nbnRvIHRoaXNOYW1lDXB1dCB0aGlzTmFtZSAmJiAiOiBBRURlc2M7IiAmIHJldHVybiBh\nZnRlciB2YXJEZWNsYXJlDXB1dCBUYWIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSA6\nPSBOSUw7IiAmIHJldHVybiBhZnRlciBpbml0Q29kZQ1pZiBpdGVtIDMgb2YgbmFtZUxp\nc3QgPSAiSGFuZGxlIiB0aGVuDXB1dCB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSwiIGFm\ndGVyIGNhbGxZb3VyQ29kZQ1lbHNlDXB1dCBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiKCIg\nJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSksIiBhZnRlciBjYWxsWW91ckNvZGUNZW5k\nIGlmDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFRh\nYiAmICJlcnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBv\nZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0aGlzTmFtZSAm\nICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJRiBlcnIgPSBl\ncnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiDCDSYgdHdvVGFiICYgInsgb3Ig\neW91IG1heSBwdXQgaW4geW91ciBkZWZhdWx0IGhlcmUgfSIgJiByZXR1cm4gwg0mIFRh\nYiAmICJFTFNFIEZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVs\nc2UNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5RGVzYyh0aGVBcHBsZUV2ZW50LCIg\nJiBpdGVtIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwiICYg\ndGhpc05hbWUgJiAiKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0\nIHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFtZSAm\nICIpKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWVsc2UgaWYgKHBhcmFtVHlw\nZSA9IDQpIG9yIChwYXJhbVR5cGUgPSA2KSB0aGVuDWlmIGl0ZW0gMyBvZiB4ID0gInRy\ndWUiIHRoZW4NcHV0IGl0ZW0gMSBvZiB4ICYmICI6IEJvb2xlYW47IiAmIHJldHVybiBh\nZnRlciB2YXJEZWNsYXJlDXB1dCBpdGVtIDEgb2YgeCAmICIsIiBhZnRlciBjYWxsWW91\nckNvZGUNcHV0IHRydWUgaW50byBuZWVkRXJyDXB1dCBQYXNjYWxUeXBlVHJ1ZUNvZGUo\neCkgYWZ0ZXIgcHJvY0JvZHkNZWxzZSBpZiBpc09wdGlvbmFsIHRoZW4NaWYgaXRlbSAz\nIG9mIHggPSAiZW51bSIgdGhlbg1wdXQgaXRlbSAxIG9mIHggJiYgIjogUmVzVHlwZTsi\nICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IGl0ZW0gMSBvZiB4ICYgIiwiIGFm\ndGVyIGNhbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IFBhc2NhbFR5\ncGVUcnVlQ29kZSh4KSBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCBpdGVtIDYgb2YgeCBp\nbnRvIHB0clRoaXNOYW1lDXB1dCBpdGVtIDEgb2YgeCBpbnRvIHRoaXNOYW1lDXB1dCB0\naGlzTmFtZSAmJiAiOiAiICYgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJu\nIGFmdGVyIHZhckRlY2xhcmUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCBwdHJUaGlz\nTmFtZSAmJiAiOiAiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFm\ndGVyIHZhckRlY2xhcmUNZWxzZQ1wdXQgcHRyVGhpc05hbWUgJiYgIjogU3RyaW5nUHRy\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQgaWYNcHV0IHB0clRoaXNOYW1l\nICYgIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0\nIFRhYiAmICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVudCwiICYgaXRlbSAy\nIG9mIHggwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsdHlwZUNvZGUsQCIg\nJiB0aGlzTmFtZSBhZnRlciBwcm9jQm9keQ1pZiBwYXJhbVR5cGUgPSA0IHRoZW4NcHV0\nICIsU2l6ZU9mKCIgJiB0aGlzTmFtZSAmICIpLGFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNZWxzZSAtLSBzdHIyNTUNcHV0ICJbMV0sU2l6ZU9mKCIgJiB0\naGlzTmFtZSAmICIpLTEsYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgVGFiICYgdGhpc05hbWUgJiAiWzBdIDo9IGNocihhY3R1YWxTaXplKTsiICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgUGFzY2FsT3B0aW9uSGFuZGxp\nbmcodGhpc05hbWUsIHB0clRoaXNOYW1lKSBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxz\nZSAtLSByZXF1aXJlZA1wdXQgaXRlbSAxIG9mIHggaW50byB0aGlzTmFtZQ1wdXQgdGhp\nc05hbWUgJiYgIjogIiAmIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICI7IiAmIHJldHVybiBh\nZnRlciB2YXJEZWNsYXJlDXB1dCB0aGlzTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNv\nZGUNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRyKHRoZUFwcGxlRXZlbnQsIiAm\nIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLHR5cGVD\nb2RlLEAiICYgdGhpc05hbWUgYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNCB0\naGVuDXB1dCAiLFNpemVPZigiICYgdGhpc05hbWUgJiAiKSxhY3R1YWxTaXplKSk7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCAiWzFdLFNpemVPZigiICYgdGhp\nc05hbWUgJiAiKS0xLGFjdHVhbFNpemUpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5\nDXB1dCBUYWIgJiB0aGlzTmFtZSAmICJbMF0gOj0gY2hyKGFjdHVhbFNpemUpOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVuZCBpZg1lbHNlIGlmIChwYXJhbVR5\ncGUgPSA1KSBvciAocGFyYW1UeXBlID0gNykgdGhlbg1wdXQgImRlc2NGb3IiICYgU3Ry\naXBTUChpdGVtIDEgb2YgeCkgaW50byB0aGlzTmFtZQ1wdXQgdGhpc05hbWUgJiYgIjog\nQUVEZXNjOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgdGhpc05h\nbWUgJiAiLmRhdGFIYW5kbGUgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUN\ncHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKCIgJiB0aGlzTmFt\nZSAmICIpKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWlmIGlzT3B0aW9uYWwg\ndGhlbg1wdXQgdHJ1ZSBpbnRvIG5lZWRFcnINcHV0IGl0ZW0gNiBvZiB4IGludG8gcHRy\nVGhpc05hbWUNcHV0IHB0clRoaXNOYW1lICYgIiA6IiAmIGl0ZW0gMiBvZiBuYW1lTGlz\ndCAmICI7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHBhcmFtVHlwZSA9IDUg\ndGhlbg1wdXQgaXRlbSA3IG9mIHggaW50byBzaXplVGhpc05hbWUNcHV0IHNpemVUaGlz\nTmFtZSAmICIgOiBMT05HSU5UOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1lbmQg\naWYNcHV0IFRhYiAmICJlcnIgOj0gQUVHZXRLZXlEZXNjKHRoZUFwcGxlRXZlbnQsIiAm\nIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCIgJiB0\naGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJJ\nRiBlcnIgPSBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9j\nQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdHdvVGFiICYgcHRyVGhpc05hbWUgJiAiIDo9IE5JTDsiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgdHdvVGFiICYgc2l6ZVRo\naXNOYW1lICYgIiA6PSAwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1\ndCB0d29UYWIgJiAieyBvciB5b3UgbWF5IHB1dCBpbiB5b3VyIGRlZmF1bHQgaGVyZSB9\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORCIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJFTFNFIiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgdHdvVGFiICYgIkZhaWxFcnIoZXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWlmIHBhcmFtVHlwZSA9IDcgdGhlbiAtLSBwdXQgaW4gemVybyB0ZXJtaW5hdG9y\nDXB1dCB0d29UYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIgJiB0aGlzTmFt\nZSDCDSYgIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1l\nbmQgaWYNcHV0IHR3b1RhYiAmICJXSVRIIiAmJiB0aGlzTmFtZSAmJiAiRE8iICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0aHJlZVRhYiAmICJCRUdJTiIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNSB0aGVuDXB1dCB0aHJlZVRhYiAm\nIHNpemVUaGlzTmFtZSAmICIgOj0gR2V0SGFuZGxlU2l6ZShkYXRhSGFuZGxlKTsiICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1pZiBpdGVtIDIgb2YgbmFtZUxpc3Qg\nPSAiUHRyIiB0aGVuDXB1dCB0aHJlZVRhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBkYXRh\nSGFuZGxlXjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IHRocmVlVGFi\nICYgcHRyVGhpc05hbWUgJiAiIDo9ICIgJiBpdGVtIDIgb2YgbmFtZUxpc3Qgwg0mICIo\nZGF0YUhhbmRsZV4pOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCB0\naHJlZVRhYiAmICJITG9jayhkYXRhSGFuZGxlKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0aHJlZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdHdvVGFiICYgIkVORDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBwdHJU\naGlzTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNaWYgcGFyYW1UeXBlID0gNSB0\naGVuDXB1dCBzaXplVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBp\nZg1lbHNlDXB1dCBUYWIgJiAiRmFpbEVycihBRUdldEtleURlc2ModGhlQXBwbGVFdmVu\ndCwiICYgaXRlbSAyIG9mIHggwg0mICIsIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIs\nIiAmIHRoaXNOYW1lICYgIikpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFy\nYW1UeXBlID0gNyB0aGVuIC0tIHB1dCBpbiB6ZXJvIHRlcm1pbmF0b3INcHV0IHRydWUg\naW50byBuZWVkRXJyDXB1dCBUYWIgJiAiRmFpbEVycihQdHJBbmRIYW5kKEBlcnIsICIg\nJiB0aGlzTmFtZSDCDSYgIi5kYXRhSGFuZGxlLCAxKSk7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJITG9jaygiICYgdGhpc05hbWUgJiAiLmRh\ndGFIYW5kbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXRlbSAyIG9mIG5h\nbWVMaXN0ID0gIlB0ciIgdGhlbg1wdXQgdGhpc05hbWUgJiAiLmRhdGFIYW5kbGVeLCIg\nYWZ0ZXIgY2FsbFlvdXJDb2RlDWVsc2UNcHV0IGl0ZW0gMiBvZiBuYW1lTGlzdCAmICIo\nIiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlXiksIiBhZnRlciBjYWxsWW91ckNvZGUN\nZW5kIGlmDWlmIHBhcmFtVHlwZSA9IDUgdGhlbiAtLSB3ZSBuZWVkIHRoZSBzaXplIHRv\nbw1wdXQgIkdldEhhbmRsZVNpemUoIiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlKSwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1lbmQgaWYNZW5kIGlmDWVuZCBpZg1lbmQgaWYgLS0g\nbm90IG51bGwNZW5kIHJlcGVhdA1pZiB2ZXJib3NlIHRoZW4NcHV0IFRhYiAmICJ7IFdl\nIGNoZWNrIHRvIHNlZSBpZiB3ZSBtaXNzZWQgYW55IHBhcmFtZXRlciBmcm9tIHRoZSBj\nbGllbnQgfSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAi\nSUYgQUVTaXplT2ZBdHRyaWJ1dGUodGhlQXBwbGVFdmVudCwga2V5TWlzc2VkS2V5d29y\nZEF0dHIsICIgwg0mICJ0eXBlQ29kZSwgYWN0dWFsU2l6ZSkgPD4gZXJyQUVEZXNjTm90\nRm91bmQgVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJG\nYWlsRXJyKGVyckFFUGFyYW1NaXNzZWQpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\naWYgdG90YWxQYXJhbSA+IDAgdGhlbg1wdXQgIikiIGludG8gbGFzdCBjaGFyIG9mIGNh\nbGxZb3VyQ29kZQ1lbHNlDWRlbGV0ZSBsYXN0IGNoYXIgb2YgY2FsbFlvdXJDb2RlDWVu\nZCBpZg1wdXQgY2FsbFlvdXJDb2RlICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgcHV0UmVzdWx0Q29kZSBhZnRlciBwcm9jQm9keQ1pZiBjbGVhblVwQ29kZSA8\nPiAiIiB0aGVuDXB1dCB0YWIgJiAiQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVuZCBpZg1wdXQgdGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAmICIgOj0gTm9F\ncnI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdGFiICYgIkVORDsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DWlmIG5lZWRFcnIgdGhlbiBwdXQgImVyciA6IE9TRXJy\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgInR5cGVDb2RlIDogRGVzY1R5\ncGU7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiYWN0dWFsU2l6ZSA6IExP\nTkdJTlQ7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWlmIHZhckRlY2xhcmUgPD4g\nIiIgdGhlbg1wdXQgdGFiICYgIlZBUiIgJiByZXR1cm4gaW50byB4DXJlcGVhdCB3aXRo\nIGkgPSAxIHRvIG51bWJlciBvZiBsaW5lcyBpbiB2YXJEZWNsYXJlDXB1dCB0d29UYWIg\nJiBsaW5lIGkgb2YgdmFyRGVjbGFyZSAmIHJldHVybiBhZnRlciB4DWVuZCByZXBlYXQN\ncHV0IHggYWZ0ZXIgcHJvY0hlYWRlcg1lbmQgaWYNcHV0IEZhaWxFcnJTb3VyY2UocHJv\nY05hbWUsIGNsZWFuVXBDb2RlKSBhZnRlciBwcm9jSGVhZGVyDXJldHVybiBwcm9jSGVh\nZGVyICYgaW5pdENvZGUgJiByZXR1cm4gJiBwcm9jQm9keSAmIHJldHVybg1lbHNlIGlm\nIGNhcmRUeXBlID0gImluaXQiIHRoZW4NcmV0dXJuICJQUk9DRURVUkUgSWdub3JlT1NF\ncnIoZXJyOk9TRXJyKTsgSU5MSU5FICQ1NDhGOyB7IGFkZHEgIzIsc3AgfSAiICYgcmV0\ndXJuICYgcmV0dXJuDWVsc2UgaWYgY2FyZFR5cGUgPSAiaW5zdGFsbCIgdGhlbg1wdXQg\nIkFFIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNcmV0\ndXJuIFRhYiAmICJJZ25vcmVPU0VycihBRUluc3RhbGxFdmVudEhhbmRsZXIoJyIgJiBS\nZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikgwg0mICInLCAnIiAmIFJlc1R5cGUoZmll\nbGQgImV2ZW50SUQiKSAmICInLCBASGFuZGxlIiAmIHByb2NOYW1lIMINJiAiLCAwLCBG\nQUxTRSkpOyIgJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVuZCBTZXJ2ZXJT\nYW1wbGUNDWZ1bmN0aW9uIEZhaWxFcnJTb3VyY2UgcHJvY05hbWUsIGNsZWFudXBDb2Rl\nDS0tIHdlIHB1dCB0aGlzIHNlcGFyYXRlIHNvIHRoZSBQYXNjYWxTZXJ2ZXJTYW1wbGUg\nd291bGQgbm90IGJlIHRvbyBsb25nDXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0\nIFRhYiAmIHR3b1RhYiBpbnRvIHRocmVlVGFiDXB1dCAiIiBpbnRvIHByb2NIZWFkZXIN\nLS0gdGhlIGNsZWFudXAgcm91dGluZQ1pZiBjbGVhblVwQ29kZSA8PiAiIiB0aGVuDXB1\ndCBUYWIgJiAiUFJPQ0VEVVJFIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jSGVh\nZGVyDXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXIN\ncHV0IGNsZWFuVXBDb2RlIGFmdGVyIHByb2NIZWFkZXINcHV0IHR3b1RhYiAmICJFTkQ7\nIiAmIHJldHVybiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDWVuZCBpZg1wdXQgVGFi\nICYgIlBST0NFRFVSRSBGYWlsRXJyKGVycjpPU0Vycik7IiAmIHJldHVybiBhZnRlciBw\ncm9jSGVhZGVyDXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NI\nZWFkZXINcHV0IHR3b1RhYiAmICJJRiBlcnIgPD4gTk9FcnIgVEhFTiIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgdGhyZWVUYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFm\ndGVyIHByb2NIZWFkZXINcHV0IHRocmVlVGFiICYgIkhhbmRsZSIgJiBwcm9jTmFtZSAm\nICIgOj0gZXJyOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1pZiBjbGVhblVwQ29k\nZSA8PiAiIiB0aGVuDXB1dCB0aHJlZVRhYiAmICJDbGVhblVwOyIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0hlYWRlcg1lbmQgaWYNcHV0IHRocmVlVGFiICYgIkV4aXQoSGFuZGxlIiAm\nIHByb2NOYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0aHJl\nZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCB0d29UYWIg\nJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXR1cm4g\ncHJvY0hlYWRlcg1lbmQgRmFpbEVyclNvdXJjZQ0NZnVuY3Rpb24gUGFzY2FsVHlwZVRy\ndWVDb2RlIHgNcHV0IFRhYiAmICJlcnIgOj0gQUVHZXRLZXlQdHIodGhlQXBwbGVFdmVu\ndCwiICYgaXRlbSAyIG9mIHggJiAiLCAiIGludG8gcHJvY0JvZHkNaWYgaXRlbSAzIG9m\nIHggPSAidHJ1ZSIgdGhlbg1wdXQgInR5cGVCb29sZWFuLCB0eXBlQ29kZSwgQCIgJiBp\ndGVtIDEgb2YgeCAmICIsU2l6ZU9mKEJvb2xlYW4pLCBhY3R1YWxTaXplKTsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0ICJ0eXBlRW51bWVyYXRlZCwgdHlwZUNv\nZGUsIEAiICYgaXRlbSAxIG9mIHggJiAiLFNpemVPZihSZXNUeXBlKSwgYWN0dWFsU2l6\nZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJJRiBl\ncnIgPSBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgVGFiICYgVGFiICYgaXRlbSAxIG9mIHggJiAiIDo9ICIgYWZ0ZXIgcHJvY0Jv\nZHkNaWYgaXRlbSAzIG9mIHggPSAidHJ1ZSIgdGhlbg1wdXQgIkZBTFNFIiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1lbHNlDXB1dCAiUmVzVHlwZSgwKSIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiRUxTRSIgJiByZXR1cm4gYWZ0ZXIg\ncHJvY0JvZHkNcHV0IFRhYiAmIFRhYiAmICJGYWlsRXJyKGVycik7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkNZW5kIFBhc2NhbFR5cGVUcnVlQ29k\nZQ0NZnVuY3Rpb24gUGFzY2FsT3B0aW9uSGFuZGxpbmcgdGhpc05hbWUsIHB0clRoaXNO\nYW1lDXB1dCBUYWIgJiAiaWYgZXJyID0gZXJyQUVEZXNjTm90Rm91bmQgVEhFTiIgJiBy\nZXR1cm4gaW50byBwcm9jQm9keQ1wdXQgVGFiICYgVGFiIGludG8gdHdvVGFiDXB1dCB0\nd29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIg\nJiBwdHJUaGlzTmFtZSAmICIgOj0gTklMOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IHR3b1RhYiAmICJ7IG9yIHlvdSBtYXkgcHV0IGluIHlvdXIgZGVmYXVsdCBoZXJl\nIH0iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EIiAmIHJl\ndHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgIkVMU0UiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0d29UYWIgJiAiRmFpbEVycihlcnIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNcHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA6PSBAIiAmIHRoaXNOYW1l\nICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRU5EOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcmV0dXJuIHByb2NCb2R5DWVuZCBQYXNjYWxP\ncHRpb25IYW5kbGluZw0NZnVuY3Rpb24gU2VydmVyQ29uc3QgY29uc3RJbmZvLGNvbW1l\nbnRPdXQNcHV0IGl0ZW0gMSBvZiBjb25zdEluZm8gJiAiID0gIiAmIGl0ZW0gMiBvZiBj\nb25zdEluZm8gJiAiOyIgaW50byB4DWlmIGNvbW1lbnRPdXQgPSAidHJ1ZSIgdGhlbg1w\ndXQgInsgIiAmIHggJiAiIH0iIGludG8geA1lbmQgaWYNcmV0dXJuIFRhYiAmIHgNZW5k\nIFNlcnZlckNvbnN0DQ1mdW5jdGlvbiBTZXJ2ZXJJbnN0YWxsIGluc3RhbGxDb2RlDXJl\ndHVybiByZXR1cm4gJiAiUHJvY2VkdXJlIEluc3RhbGxIYW5kbGVyczsiICYgcmV0dXJu\nIMINJiBUYWIgJiAiQkVHSU4iICYgcmV0dXJuICYgaW5zdGFsbENvZGUgJiBUYWIgJiAi\nRU5EOyIgJiByZXR1cm4NZW5kIFNlcnZlckluc3RhbGwNDWZ1bmN0aW9uIFBhc2NhbENs\naWVudFRlbXBsYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0\nZSBvciB3aGljaCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgR2x1ZUluZm8o\nZmllbGQgInBhcmFtSW5mbyIpIGludG8gcGFyYW1JbmZvDXB1dCAiRnVuY3Rpb24gQUUi\nICYgU3RyaXBTUChmaWVsZCAiZXZlbnROYW1lIikgJiAiKCIgaW50byB0ZW1wbGF0ZQ1w\ndXQgbnVtYmVyIG9mIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRvIG4NcHV0IDAgaW50byBw\nYXJhbUluZGV4DXJlcGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXNldCBjdXJzb3IgdG8g\nYnVzeQ1wdXQgbGluZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB5DXB1dCBpdGVtIDQg\nb2YgeSBpbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB5ID0gIm8iKSBpbnRvIGlz\nT3B0aW9uYWwNcHV0IChpdGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYg\ndXNlSXQgdGhlbg1hZGQgMSB0byBwYXJhbUluZGV4DWlmIHVzZUl0IHRoZW4NaWYgaW5k\nZXggPSAxIHRoZW4NcHV0ICJWQVIgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgZmFsc2UgaW50\nbyBpc09wdGlvbmFsDWVsc2UNaWYgbXVsdGlMaW5lID0gIm11bHRpTGluZSIgdGhlbg1w\ndXQgcmV0dXJuICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgc3BhY2UgYWZ0\nZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZg1wdXQgTmFtZU9mRGF0YVR5cGUoaXRlbSAz\nIG9mIHkpIGludG8gbmFtZUxpc3QNaWYgcGFyYW1UeXBlID0gMSB0aGVuIC0tIGhhbmRs\nZQ1wdXQgaXRlbSAxIG9mIHkgJiAiOiIgJiBpdGVtIDMgb2YgbmFtZUxpc3QgJiAiOyAi\nIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNSB0aGVuIC0tIHB0ciAr\nIHNpemUNcHV0IGl0ZW0gNiBvZiB5ICYgIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYg\nIjsgIiDCDSYgaXRlbSA3IG9mIHkgJiAiOiBMT05HSU5UOyAiIGFmdGVyIHRlbXBsYXRl\nDWVsc2UgaWYgcGFyYW1UeXBlID0gNyB0aGVuIC0tIGNTdHJpbmcNcHV0IGl0ZW0gNiBv\nZiB5ICYgIjoiICYgaXRlbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0ZW1wbGF0\nZQ1lbHNlIGlmIGlzT3B0aW9uYWwgdGhlbiAtLSB1c2UgcG9pbnRlciB0byBkYXRhDWlm\nIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgNcHV0IGl0ZW0gMyBvZiB5\nIGludG8gZGF0YVR5cGUNaWYgZGF0YVR5cGUgPSAiZW51bSIgdGhlbiAtLSBzcGVjaWFs\nIGZvciBlbnVtDXB1dCBpdGVtIDEgb2YgeSAmICI6UmVzVHlwZTsgIiBhZnRlciB0ZW1w\nbGF0ZQ1lbHNlIGlmIGRhdGFUeXBlID0gInRydWUiIHRoZW4gLS0gYWxzbyBzcGVjaWFs\nIGZvciB0cnVlDXB1dCBpdGVtIDEgb2YgeSAmICI6Qm9vbGVhbjsgIiBhZnRlciB0ZW1w\nbGF0ZQ1lbHNlDXB1dCBpdGVtIDYgb2YgeSAmICI6IiAmIGl0ZW0gMiBvZiBuYW1lTGlz\ndCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVsc2UNcHV0IGl0ZW0gNiBvZiB5\nICYgIjoiIGFmdGVyIHRlbXBsYXRlDWlmIChwYXJhbVR5cGUgPSAwKSB0aGVuDXB1dCAi\nQUVEZXNjUHRyOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgLS0gNiwgUFN0cmluZw1wdXQg\nIlN0cmluZ1B0cjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmDWVsc2UgLS0g\ncmVxdWlyZWQNcHV0IGl0ZW0gMSBvZiB5ICYgIjoiIGFmdGVyIHRlbXBsYXRlDWlmIChw\nYXJhbVR5cGUgPSAwKSB0aGVuIC0tIEFFRGVzYw1wdXQgIkFFRGVzYzsgIiBhZnRlciB0\nZW1wbGF0ZQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSBmaXhlZCBsZW5ndGgN\ncHV0IGl0ZW0gMSBvZiBuYW1lTGlzdCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSAt\nLSBzdHIyNTUNcHV0ICJTdHIyNTU7ICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBp\nZg1lbmQgaWYgLS0gdXNlSXQNZW5kIGlmIC0tIHVzZUl0DWVuZCByZXBlYXQNRGVsZXRl\nIGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSAtLSBzcGFjZSBvciAoDWlmIHBhcmFtSW5kZXgg\nPiAwIHRoZW4NcHV0ICIpIiBpbnRvIGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSAtLSByZXBs\nYWNlIDsNZW5kIGlmDXB1dCAiOk9TRXJyOyIgYWZ0ZXIgdGVtcGxhdGUNcmV0dXJuIHRl\nbXBsYXRlDWVuZCBQYXNjYWxDbGllbnRUZW1wbGF0ZQ0NAAA7NAADAQABBgCfARkA+oAG\nAAAAAAABAAAADAAAABBDAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjb25zdGFudCBuYW1lcyB3aWxsIGJlIGlu\nIEMuIg1lbmQgTW91c2VXaXRoaW4NDWZ1bmN0aW9uIFNlcnZlclNhbXBsZSBjYXJkVHlw\nZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1AoZmll\nbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNZ2xvYmFsIGNsaWVudExhbmcsdmVy\nYm9zZQ1pZiB2ZXJib3NlIHRoZW4NcHV0IGZpZWxkICJldmVudENvbW1lbnQiIGludG8g\ndGVtcA1pZiB0ZW1wIDw+ICIiIHRoZW4NcHV0ICIvKiAiICYgdGVtcCAmICIgKi8iICYg\ncmV0dXJuICYgcmV0dXJuIGludG8gcHJvY0hlYWRlcg1lbmQgaWYNZW5kIGlmDXB1dCBD\nVGVtcGxhdGUoKSAmIHJldHVybiBhZnRlciB0ZW1wDXB1dCAiRG8iIGFmdGVyIGNoYXIg\nNiBvZiB0ZW1wDXB1dCB0ZW1wIGFmdGVyIHByb2NIZWFkZXINcHV0ICJ7IiAmIHJldHVy\nbiBhZnRlciBwcm9jSGVhZGVyDXB1dCBUYWIgJiAiLyogcHV0IHlvdXIgY29kZSBoZXJl\nICovIiAmIHJldHVybiBhZnRlciBwcm9jSGVhZGVyDXB1dCBUYWIgJiAicmV0dXJuIG5v\nRXJyOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1wdXQgIn0iICYgcmV0dXJuICYg\ncmV0dXJuIGFmdGVyIHByb2NIZWFkZXINcHV0ICJwYXNjYWwgT1NFcnIgSGFuZGxlIiAm\nIHByb2NOYW1lIMINJiAiKGNvbnN0IEFwcGxlRXZlbnQgKnRoZUFwcGxlRXZlbnQsIGNv\nbnN0IEFwcGxlRXZlbnQgKnRoZVJlcGx5LCBsb25nIHRoZVJlZkNvbikiICYgcmV0dXJu\nIGFmdGVyIHByb2NIZWFkZXINcHV0IEdsdWVJbmZvKGZpZWxkICJwYXJhbUluZm8iKSBp\nbnRvIHBhcmFtSW5mbw1wdXQgbnVtYmVyIG9mIGxpbmVzIG9mIHBhcmFtSW5mbyBpbnRv\nIGNvdW50DXB1dCAoaXRlbSAzIG9mIHBhcmFtSW5mbyA8PiAibnVsbCIpIGludG8gaXNG\ndW5jDXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IFRhYiAmIHR3b1RhYiBpbnRv\nIHRocmVlVGFiDXB1dCAiIiBpbnRvIGNsZWFuVXBDb2RlDXB1dCAiIiBpbnRvIHB1dFJl\nc3VsdENvZGUNcHV0ICIiIGludG8gaW5pdENvZGUNcHV0ICJPU0VyciBlcnI7IiAmIHJl\ndHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiRGVzY1R5cGUgdHlwZUNvZGU7IiAmIHJl\ndHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAibG9uZyBhY3R1YWxTaXplOyIgJiByZXR1\ncm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgImVyciA9IERvIiAmIHByb2NOYW1l\nICYgIigiIGludG8gY2FsbFlvdXJDb2RlDXB1dCAwIGludG8gdG90YWxQYXJhbQ0tLSBp\nZiBhIGZ1bmN0aW9uIGdldCB0aGUgcmVzdWx0IGJhY2sNaWYgaXNGdW5jIHRoZW4NYWRk\nIDEgdG8gdG90YWxQYXJhbQ1wdXQgbGluZSAxIG9mIHBhcmFtSW5mbyBpbnRvIHgNcHV0\nIGl0ZW0gNCBvZiB4IGludG8gcGFyYW1UeXBlDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVt\nIDMgb2YgeCkgaW50byBuYW1lTGlzdA1wdXQgVGFiICYgImlmICgoKnRoZVJlcGx5KS5k\nYXRhSGFuZGxlKSIgJiByZXR1cm4gYWZ0ZXIgcHV0UmVzdWx0Q29kZQ1pZiBwYXJhbVR5\ncGUgPD0gMSB0aGVuIC0tIHJlc3VsdCBpcyBBRURlc2Mgb3IgSGFuZGxlDXB1dCAiQUVE\nZXNjIHRoZVJlc3VsdDsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAm\nICJ0aGVSZXN1bHQuZGF0YUhhbmRsZSA9IG5pbDsiICYgcmV0dXJuIGFmdGVyIGluaXRD\nb2RlDWlmIChwYXJhbVR5cGUgPSAwKSB0aGVuDXB1dCAiJnRoZVJlc3VsdCwiIGFmdGVy\nIGNhbGxZb3VyQ29kZQ1lbHNlDXB1dCBUYWIgJiAidGhlUmVzdWx0LmRlc2NyaXB0b3JU\neXBlID0gIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCDCDSYgIjsiICYgcmV0dXJuIGFmdGVy\nIGluaXRDb2RlDXB1dCAiJnRoZVJlc3VsdC5kYXRhSGFuZGxlLCIgYWZ0ZXIgY2FsbFlv\ndXJDb2RlDWVuZCBpZg1wdXQgVGFiICYgIkFFRGlzcG9zZURlc2MoJnRoZVJlc3VsdCk7\nIiAmIHJldHVybiBhZnRlciBjbGVhblVwQ29kZQ1wdXQgdHdvVGFiICYgImVyciA9IEFF\nUHV0S2V5RGVzYyh0aGVSZXBseSwga2V5RGlyZWN0T2JqZWN0LCAmdGhlUmVzdWx0KTsi\nICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxzZSBpZiAocGFyYW1UeXBlID0g\nNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4gLS0gcmVzdWx0IGlzIG9uIHN0YWNrDWlm\nIHBhcmFtVHlwZSA9IDQgdGhlbg1wdXQgaXRlbSA1IG9mIG5hbWVMaXN0ICYgIiB0aGVS\nZXN1bHQ7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCAiJnRoZVJlc3VsdCwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1lbHNlDXB1dCAiU3RyMjU1IHRoZVJlc3VsdDsiICYg\ncmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0ICIoU3RyaW5nUHRyKSAmdGhlUmVzdWx0\nLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBpZg1wdXQgdHdvVGFiICYgImVyciA9IEFF\nUHV0S2V5UHRyKHRoZVJlcGx5LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBv\nZiBuYW1lTGlzdCAmICIsIChQdHIpICZ0aGVSZXN1bHQiIGFmdGVyIHB1dFJlc3VsdENv\nZGUNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCAiLCBzaXplb2YoIiAmIGl0ZW0gNSBv\nZiBuYW1lTGlzdCAmICIpKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3VsdENvZGUNZWxz\nZQ1wdXQgIlsxXSwgdGhlUmVzdWx0WzBdKTsiICYgcmV0dXJuIGFmdGVyIHB1dFJlc3Vs\ndENvZGUNZW5kIGlmDWVuZCBpZg1lbmQgaWYgLS0gaXNGdW5jDXJlcGVhdCB3aXRoIHBh\ncmFtSW5kZXggPSAyIHRvIGNvdW50DXB1dCBsaW5lIHBhcmFtSW5kZXggb2YgcGFyYW1J\nbmZvIGludG8geA1pZiBpdGVtIDMgb2YgeCA8PiAibnVsbCIgdGhlbg1hZGQgMSB0byB0\nb3RhbFBhcmFtDXB1dCBpdGVtIDQgb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0g\nNSBvZiB4ID0gIm8iKSBpbnRvIGlzT3B0aW9uYWwNcHV0IE5hbWVPZkRhdGFUeXBlKGl0\nZW0gMyBvZiB4KSBpbnRvIG5hbWVMaXN0DWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHdv\nVGFiIGludG8gaW5kZW50DWVsc2UNcHV0IFRhYiBpbnRvIGluZGVudA1lbmQgaWYNaWYg\ncGFyYW1UeXBlID0gMCB0aGVuIC0tIEFFRGVzYyBvciBoYW5kbGUNcHV0IGl0ZW0gMSBv\nZiB4IGludG8gdGhpc05hbWUNcHV0IFRhYiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxl\nID0gbmlsOyIgJiByZXR1cm4gYWZ0ZXIgaW5pdENvZGUNcHV0IFRhYiAmICJlcnIgPSBB\nRUdldFBhcmFtRGVzYyh0aGVBcHBsZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCDCDSYgIix0\neXBlV2lsZENhcmQsJiIgJiB0aGlzTmFtZSAmICIpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBpdGVtIDYgb2YgeCBpbnRvIHB0clRo\naXNOYW1lDXB1dCAiQUVEZXNjIiAmJiB0aGlzTmFtZSAmICIsIiAmJiAiKiIgJiBwdHJU\naGlzTmFtZSAmICI7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCBwdHJUaGlz\nTmFtZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNcHV0IENPcHRpb25IYW5kbGluZygi\nJiIgJiB0aGlzTmFtZSwgcHRyVGhpc05hbWUpIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0\nICJBRURlc2MiICYmIHRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xh\ncmUNcHV0ICImIiAmIHRoaXNOYW1lICYgIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQg\nVGFiICYgImlmIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVuZCBpZg1wdXQgVGFiICYgIkFFRGlzcG9zZURlc2MoJiIgJiB0aGlzTmFtZSAm\nICIpOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiBwYXJhbVR5cGUg\nPSAxIHRoZW4gLS0gaGFuZGxlDXB1dCBpdGVtIDEgb2YgeCBpbnRvIHB0clRoaXNOYW1l\nDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNQKGl0ZW0gMSBvZiB4KSBpbnRvIHRoaXNOYW1l\nDXB1dCAiQUVEZXNjIiAmJiB0aGlzTmFtZSAmICI7IiAmIHJldHVybiBhZnRlciB2YXJE\nZWNsYXJlDXB1dCBUYWIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSA9IG5pbDsiICYg\ncmV0dXJuIGFmdGVyIGluaXRDb2RlDXB1dCB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSwi\nIGFmdGVyIGNhbGxZb3VyQ29kZQ1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRhYiAmICJl\ncnIgPSBBRUdldFBhcmFtRGVzYyh0aGVBcHBsZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCDC\nDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwmIiAmIHRoaXNOYW1lICYgIik7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgImlmIChlcnIgPT0gZXJy\nQUVEZXNjTm90Rm91bmQpIiAmIHJldHVybiDCDSYgdHdvVGFiICYgIi8qIG9yIHlvdSBt\nYXkgcHV0IGluIHlvdXIgZGVmYXVsdCBoZXJlICovOyIgJiByZXR1cm4gwg0mIHRhYiAm\nICJlbHNlIGlmIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVsc2UNcHV0IFRhYiAmICJlcnIgPSBBRUdldFBhcmFtRGVzYyh0aGVBcHBsZUV2\nZW50LCIgJiBpdGVtIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYg\nIiwmIiAmIHRoaXNOYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgImlmIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVuZCBpZg1wdXQgVGFiICYgIkFFRGlzcG9zZURlc2MoJiIgJiB0aGlzTmFtZSAm\nICIpOyIgJiByZXR1cm4gYWZ0ZXIgY2xlYW5VcENvZGUNZWxzZSBpZiAocGFyYW1UeXBl\nID0gNCkgb3IgKHBhcmFtVHlwZSA9IDYpIHRoZW4NaWYgaXRlbSAzIG9mIHggPSAidHJ1\nZSIgdGhlbg1wdXQgIkJvb2xlYW4iICYmIGl0ZW0gMSBvZiB4ICYgIjsiICYgcmV0dXJu\nIGFmdGVyIHZhckRlY2xhcmUNcHV0IGl0ZW0gMSBvZiB4ICYgIiwiIGFmdGVyIGNhbGxZ\nb3VyQ29kZQ1wdXQgQ1R5cGVUcnVlQ29kZSh4KSBhZnRlciBwcm9jQm9keQ1lbHNlIGlm\nIGlzT3B0aW9uYWwgdGhlbg1pZiBpdGVtIDMgb2YgeCA9ICJlbnVtIiB0aGVuDXB1dCAi\nUmVzVHlwZSIgJiYgaXRlbSAxIG9mIHggJiAiOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVj\nbGFyZQ1wdXQgaXRlbSAxIG9mIHggJiAiLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDXB1dCBD\nVHlwZVRydWVDb2RlKHgpIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IGl0ZW0gNiBvZiB4\nIGludG8gcHRyVGhpc05hbWUNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNaWYg\ncGFyYW1UeXBlID0gNCB0aGVuDXB1dCBpdGVtIDUgb2YgbmFtZUxpc3QgJiYgdGhpc05h\nbWUgJiAiOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgaXRlbSA1IG9mIG5h\nbWVMaXN0ICYgIiAqIiAmIHB0clRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZh\nckRlY2xhcmUNZWxzZQ1wdXQgIlN0cjI1NSAiICYgdGhpc05hbWUgJiAiLCAqIiAmIHB0\nclRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNZW5kIGlmDXB1\ndCBUYWIgJiAiZXJyID0gQUVHZXRQYXJhbVB0cih0aGVBcHBsZUV2ZW50LCIgJiBpdGVt\nIDIgb2YgeCDCDSYgIiwiICYgaXRlbSA0IG9mIG5hbWVMaXN0ICYgIiwmdHlwZUNvZGUs\nKFB0cikmIiAmIHRoaXNOYW1lIGFmdGVyIHByb2NCb2R5DWlmIHBhcmFtVHlwZSA9IDQg\ndGhlbg1wdXQgIixzaXplb2YoIiAmIHRoaXNOYW1lICYgIiksJmFjdHVhbFNpemUpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IENPcHRpb25IYW5kbGluZygiJiIgJiB0\naGlzTmFtZSwgcHRyVGhpc05hbWUpIGFmdGVyIHByb2NCb2R5DXB1dCBwdHJUaGlzTmFt\nZSAmICIsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZSAtLSBzdHIyNTUNcHV0ICJbMV0s\nc2l6ZW9mKCIgJiB0aGlzTmFtZSAmICIpLTEsJmFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJpZiAoIWVycikiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DXB1dCB0d29UYWIgJiB0aGlzTmFtZSAmICJbMF0gPSAoY2hhcikgYWN0\ndWFsU2l6ZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCAiKFN0cmluZ1B0cikg\nIiAmIHB0clRoaXNOYW1lICYgIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgQ09wdGlv\nbkhhbmRsaW5nKCIoU3RyMjU1ICopICYiICYgdGhpc05hbWUsIHB0clRoaXNOYW1lKSBh\nZnRlciBwcm9jQm9keQ1lbmQgaWYNZW5kIGlmDWVsc2UgLS0gcmVxdWlyZWQNcHV0IGl0\nZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0IFRhYiAmICJlcnIgPSBBRUdldFBhcmFt\nUHRyKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQg\nb2YgbmFtZUxpc3QgJiAiLCZ0eXBlQ29kZSwoUHRyKSYiICYgdGhpc05hbWUgYWZ0ZXIg\ncHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNCB0aGVuDXB1dCBpdGVtIDUgb2YgbmFtZUxp\nc3QgJiYgdGhpc05hbWUgJiAiOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQg\nIixzaXplb2YoIiAmIHRoaXNOYW1lICYgIiksJmFjdHVhbFNpemUpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNcHV0IGl0ZW0gNiBvZiBuYW1lTGlzdCBpbnRvIGRhdGFTaXpl\nDWlmIChkYXRhU2l6ZSA8IDApIG9yIChkYXRhU2l6ZSA+IDQpIHRoZW4NcHV0ICImIiBh\nZnRlciBjYWxsWW91ckNvZGUNZW5kIGlmDXB1dCB0aGlzTmFtZSAmICIsIiBhZnRlciBj\nYWxsWW91ckNvZGUNZWxzZQ1wdXQgIihTdHJpbmdQdHIpICYgIiAmIHRoaXNOYW1lICYg\nIiwiIGFmdGVyIGNhbGxZb3VyQ29kZQ1wdXQgIlN0cjI1NSIgJiYgdGhpc05hbWUgJiAi\nOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgIlsxXSxzaXplb2YoIiAmIHRo\naXNOYW1lICYgIiktMSwmYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgVGFiICYgdGhpc05hbWUgJiAiWzBdID0gKGNoYXIpIGFjdHVhbFNpemU7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJpZiAoZXJyKSBn\nb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxzZSBp\nZiAocGFyYW1UeXBlID0gNSkgb3IgKHBhcmFtVHlwZSA9IDcpIHRoZW4NcHV0ICJkZXNj\nRm9yIiAmIFN0cmlwU1AoaXRlbSAxIG9mIHgpIGludG8gdGhpc05hbWUNcHV0ICJBRURl\nc2MiICYmIHRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIFRhYiAmIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlID0gbmlsOyIgJiByZXR1cm4gYWZ0\nZXIgaW5pdENvZGUNcHV0IFRhYiAmICJBRURpc3Bvc2VEZXNjKCYiICYgdGhpc05hbWUg\nJiAiKTsiICYgcmV0dXJuIGFmdGVyIGNsZWFuVXBDb2RlDWlmIGlzT3B0aW9uYWwgdGhl\nbg1wdXQgInB0clRvIiAmIFN0cmlwU1AoaXRlbSAxIG9mIHgpIGludG8gcHRyVGhpc05h\nbWUNcHV0IGl0ZW0gMSBvZiB4ICYgIlNpemUiIGludG8gc2l6ZVRoaXNOYW1lDWlmIHBh\ncmFtVHlwZSA9IDUgdGhlbg1wdXQgIlB0ciIgJiYgcHRyVGhpc05hbWUgJiAiOyIgJiBy\nZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQgImxvbmciICYmIHNpemVUaGlzTmFtZSAm\nICI7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDWVsc2UNcHV0IGl0ZW0gNSBvZiBu\nYW1lTGlzdCAmJiAiKiIgJiBwdHJUaGlzTmFtZSAmICI7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDWVuZCBpZg1wdXQgVGFiICYgImVyciA9IEFFR2V0UGFyYW1EZXNjKHRo\nZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBpdGVtIDQgb2YgbmFt\nZUxpc3QgJiAiLCYiICYgdGhpc05hbWUgJiAiKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCBUYWIgJiAiaWYgKGVyciA9PSBlcnJBRURlc2NOb3RGb3VuZCkgeyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA9\nIG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIHBhcmFtVHlwZSA9IDUgdGhl\nbg1wdXQgdHdvVGFiICYgc2l6ZVRoaXNOYW1lICYgIiA9IDA7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbmQgaWYNcHV0IHR3b1RhYiAmICIvKiBvciB5b3UgbWF5IHB1dCBp\nbiB5b3VyIGRlZmF1bHQgaGVyZSAqLyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIFRhYiAmICJ9IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgImVsc2Ug\neyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJpZiAoZXJyKSBn\nb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1pZiBwYXJhbVR5cGUg\nPSA3IHRoZW4gLS0gcHV0IGluIHplcm8gdGVybWluYXRvcg1wdXQgdHdvVGFiICYgImVy\nciA9IFB0ckFuZEhhbmQoKFB0cikmZXJyLCAiICYgdGhpc05hbWUgwg0mICIuZGF0YUhh\nbmRsZSwgMSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgImlm\nIChlcnIpIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBp\nZg1pZiBwYXJhbVR5cGUgPSA1IHRoZW4NcHV0IHR3b1RhYiAmIHNpemVUaGlzTmFtZSAm\nICIgPSBHZXRIYW5kbGVTaXplKCIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSk7IiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNaWYgaXRlbSAyIG9mIG5hbWVMaXN0\nID0gIlB0ciIgdGhlbg1wdXQgdHdvVGFiICYgcHRyVGhpc05hbWUgJiAiID0gKiIgJiB0\naGlzTmFtZSAmICIuZGF0YUhhbmRsZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVs\nc2UNcHV0IHR3b1RhYiAmIHB0clRoaXNOYW1lICYgIiA9IChQdHIpICoiICYgdGhpc05h\nbWUgwg0mICIuZGF0YUhhbmRsZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBp\nZg1wdXQgdHdvVGFiICYgIkhMb2NrKCIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSk7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgIn07IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgcHRyVGhpc05hbWUgJiAiLCIgYWZ0ZXIgY2FsbFlvdXJD\nb2RlDWlmIHBhcmFtVHlwZSA9IDUgdGhlbg1wdXQgc2l6ZVRoaXNOYW1lICYgIiwiIGFm\ndGVyIGNhbGxZb3VyQ29kZQ1lbmQgaWYNZWxzZQ1wdXQgVGFiICYgImVyciA9IEFFR2V0\nUGFyYW1EZXNjKHRoZUFwcGxlRXZlbnQsIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCIgJiBp\ndGVtIDQgb2YgbmFtZUxpc3QgJiAiLCYiICYgdGhpc05hbWUgJiAiKTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAiaWYgKGVycikgZ290byBDbGVhblVwOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNyB0aGVuIC0tIHB1\ndCBpbiB6ZXJvIHRlcm1pbmF0b3INcHV0IFRhYiAmICJlcnIgPSBQdHJBbmRIYW5kKChQ\ndHIpJmVyciwgIiAmIHRoaXNOYW1lIMINJiAiLmRhdGFIYW5kbGUsIDEpOyIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJpZiAoZXJyKSBnb3RvIENsZWFuVXA7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJITG9jaygi\nICYgdGhpc05hbWUgJiAiLmRhdGFIYW5kbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNaWYgaXRlbSAyIG9mIG5hbWVMaXN0ID0gIlB0ciIgdGhlbg1wdXQgIioiICYgdGhp\nc05hbWUgJiAiLmRhdGFIYW5kbGUsIiBhZnRlciBjYWxsWW91ckNvZGUNZWxzZSBpZiBw\nYXJhbVR5cGUgPSA3IHRoZW4NcHV0ICIoY2hhciAqKSAqIiAmIHRoaXNOYW1lICYgIi5k\nYXRhSGFuZGxlLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVsc2UNcHV0ICIoUHRyKSAqIiAm\nIHRoaXNOYW1lICYgIi5kYXRhSGFuZGxlLCIgYWZ0ZXIgY2FsbFlvdXJDb2RlDWVuZCBp\nZg1pZiBwYXJhbVR5cGUgPSA1IHRoZW4gLS0gd2UgbmVlZCB0aGUgc2l6ZSB0b28NcHV0\nICJHZXRIYW5kbGVTaXplKCIgJiB0aGlzTmFtZSAmICIuZGF0YUhhbmRsZSksIiBhZnRl\nciBjYWxsWW91ckNvZGUNZW5kIGlmDWVuZCBpZg1lbmQgaWYNZW5kIGlmIC0tIG5vdCBu\ndWxsDWVuZCByZXBlYXQNaWYgdmVyYm9zZSB0aGVuDXB1dCBUYWIgJiAiLyogV2UgY2hl\nY2sgdG8gc2VlIGlmIHdlIG1pc3NlZCBhbnkgcGFyYW1ldGVyIGZyb20gdGhlIGNsaWVu\ndCAqLyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1dCBUYWIgJiAiaWYg\nKEFFU2l6ZU9mQXR0cmlidXRlKHRoZUFwcGxlRXZlbnQsIGtleU1pc3NlZEtleXdvcmRB\ndHRyLCAiIMINJiAiJnR5cGVDb2RlLCAmYWN0dWFsU2l6ZSkgIT0gZXJyQUVEZXNjTm90\nRm91bmQpIHsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiZXJy\nID09IGVyckFFUGFyYW1NaXNzZWQ7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\ndHdvVGFiICYgImdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCBUYWIgJiAifTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIHRvdGFsUGFyYW0g\nPiAwIHRoZW4NcHV0ICIpIiBpbnRvIGxhc3QgY2hhciBvZiBjYWxsWW91ckNvZGUNZWxz\nZQ1wdXQgIikiIGFmdGVyIGNhbGxZb3VyQ29kZQ1lbmQgaWYNcHV0IGNhbGxZb3VyQ29k\nZSAmICI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYgImlmIChlcnIp\nIGdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBwdXRSZXN1\nbHRDb2RlIGFmdGVyIHByb2NCb2R5DXB1dCAiQ2xlYW5VcDoiICYgcmV0dXJuIGFmdGVy\nIHByb2NCb2R5DXB1dCBDbGVhblVwQ29kZSAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgdGFiICYgInJldHVybiBlcnI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nIn0iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCAieyIgJiByZXR1cm4gaW50byB4\nDXJlcGVhdCB3aXRoIGkgPSAxIHRvIG51bWJlciBvZiBsaW5lcyBpbiB2YXJEZWNsYXJl\nDXB1dCBUYWIgJiBsaW5lIGkgb2YgdmFyRGVjbGFyZSAmIHJldHVybiBhZnRlciB4DWVu\nZCByZXBlYXQNcHV0IHggJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXR1cm4gcHJv\nY0hlYWRlciAmIGluaXRDb2RlICYgcmV0dXJuICYgcHJvY0JvZHkgJiByZXR1cm4NZWxz\nZSBpZiBjYXJkVHlwZSA9ICJpbml0IiB0aGVuDWVsc2UgaWYgY2FyZFR5cGUgPSAiaW5z\ndGFsbCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGlu\ndG8gcHJvY05hbWUNcmV0dXJuIFRhYiAmICJBRUluc3RhbGxFdmVudEhhbmRsZXIoJyIg\nJiBSZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikgwg0mICInLCAnIiAmIFJlc1R5cGUo\nZmllbGQgImV2ZW50SUQiKSAmICInLCAoUHJvY1B0cikgJkhhbmRsZSIgJiBwcm9jTmFt\nZSDCDSYgIiwgMCwgZmFsc2UpOyIgJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlm\nDWVuZCBTZXJ2ZXJTYW1wbGUNDWZ1bmN0aW9uIENUeXBlVHJ1ZUNvZGUgeA1wdXQgVGFi\nICYgImVyciA9IEFFR2V0UGFyYW1QdHIodGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9m\nIHggJiAiLCAiIGludG8gcHJvY0JvZHkNaWYgaXRlbSAzIG9mIHggPSAidHJ1ZSIgdGhl\nbg1wdXQgInR5cGVCb29sZWFuLCAmdHlwZUNvZGUsIChQdHIpJiIgJiBpdGVtIDEgb2Yg\neCAmICIsMSwgJmFjdHVhbFNpemUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZWxz\nZQ1wdXQgInR5cGVFbnVtZXJhdGVkLCAmdHlwZUNvZGUsIChQdHIpJiIgJiBpdGVtIDEg\nb2YgeCAmICIsc2l6ZW9mKFJlc1R5cGUpLCAmYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IFRhYiAmICJpZiAoZXJyID09IGVyckFFRGVz\nY05vdEZvdW5kKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmIFRhYiAm\nIGl0ZW0gMSBvZiB4ICYgIiA9ICIgYWZ0ZXIgcHJvY0JvZHkNaWYgaXRlbSAzIG9mIHgg\nPSAidHJ1ZSIgdGhlbg1wdXQgImZhbHNlOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\nZWxzZQ1wdXQgIihSZXNUeXBlKSAwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5k\nIGlmDXB1dCBUYWIgJiAiZWxzZSBpZiAoZXJyKSBnb3RvIENsZWFuVXA7IiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkNZW5kIENUeXBlVHJ1ZUNvZGUN\nDWZ1bmN0aW9uIENPcHRpb25IYW5kbGluZyB0aGlzTmFtZSwgcHRyVGhpc05hbWUNcHV0\nIFRhYiAmICJpZiAoZXJyID09IGVyckFFRGVzY05vdEZvdW5kKSB7IiAmIHJldHVybiBp\nbnRvIHByb2NCb2R5DXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IHR3b1RhYiAm\nIHB0clRoaXNOYW1lICYgIiA9IG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCB0d29UYWIgJiAiLyogb3IgeW91IG1heSBwdXQgaW4geW91ciBkZWZhdWx0IGhlcmUg\nKi8iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAifSIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJlbHNlIHsiICYgcmV0dXJuIGFmdGVyIHBy\nb2NCb2R5DXB1dCB0d29UYWIgJiAiaWYgKGVycikgZ290byBDbGVhblVwOyIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNaWYgcGFyYW1UeXBlID0gNiB0aGVuDXB1dCB0d29UYWIg\nJiBwdHJUaGlzTmFtZSAmICIgPSAiICYgdGhpc05hbWUgJiAiOyIgJiByZXR1cm4gYWZ0\nZXIgcHJvY0JvZHkNZWxzZQ1wdXQgdHdvVGFiICYgcHRyVGhpc05hbWUgJiAiID0gIiAm\nIHRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQg\nVGFiICYgIn07IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1yZXR1cm4gcHJvY0JvZHkN\nZW5kIENPcHRpb25IYW5kbGluZw0NZnVuY3Rpb24gU2VydmVyQ29uc3QgbmFtZSxjb25z\ndCxjb21tZW50T3V0DXB1dCAiI2RlZmluZSAiICYgbmFtZSAmJiBjb25zdCBpbnRvIHgN\naWYgY29tbWVudE91dCA9ICJ0cnVlIiB0aGVuDXB1dCAiLyogIiAmIHggJiAiICovIiBp\nbnRvIHgNZW5kIGlmDXJldHVybiB4DWVuZCBTZXJ2ZXJDb25zdA0NZnVuY3Rpb24gU2Vy\ndmVySW5zdGFsbCBpbnN0YWxsQ29kZQ1yZXR1cm4gcmV0dXJuICYgInZvaWQgSW5zdGFs\nbEhhbmRsZXJzKCkiICYgcmV0dXJuIMINJiAieyIgJiByZXR1cm4gJiBpbnN0YWxsQ29k\nZSAmICJ9IiAmIHJldHVybg1lbmQgU2VydmVySW5zdGFsbA0NZnVuY3Rpb24gQ1RlbXBs\nYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3aGlj\naCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgR2x1ZUluZm8oZmllbGQgInBh\ncmFtSW5mbyIpIGludG8gcGFyYW1JbmZvDXB1dCAiT1NFcnIgQUUiICYgU3RyaXBTUChm\naWVsZCAiZXZlbnROYW1lIikgJiAiKCIgaW50byB0ZW1wbGF0ZQ1wdXQgbnVtYmVyIG9m\nIGxpbmVzIGluIHBhcmFtSW5mbyBpbnRvIG4NcHV0IDAgaW50byBwYXJhbUluZGV4DXJl\ncGVhdCB3aXRoIGluZGV4ID0gMSB0byBuDXNldCBjdXJzb3IgdG8gYnVzeQ1wdXQgbGlu\nZSBpbmRleCBvZiBwYXJhbUluZm8gaW50byB5DXB1dCBpdGVtIDQgb2YgeSBpbnRvIHBh\ncmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB5ID0gIm8iKSBpbnRvIGlzT3B0aW9uYWwNcHV0\nIChpdGVtIDMgb2YgeSA8PiAibnVsbCIpIGludG8gdXNlSXQNaWYgdXNlSXQgdGhlbg1h\nZGQgMSB0byBwYXJhbUluZGV4DWlmIHVzZUl0IHRoZW4NaWYgaW5kZXggPSAxIHRoZW4N\ncHV0IGZhbHNlIGludG8gaXNPcHRpb25hbA1lbHNlDWlmIG11bHRpTGluZSA9ICJtdWx0\naUxpbmUiIHRoZW4NcHV0IHJldHVybiAmIHNwYWNlIGFmdGVyIHRlbXBsYXRlDWVsc2UN\ncHV0IHNwYWNlIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1lbmQgaWYNcHV0IE5hbWVPZkRh\ndGFUeXBlKGl0ZW0gMyBvZiB5KSBpbnRvIG5hbWVMaXN0DXB1dCBpdGVtIDUgb2YgbmFt\nZUxpc3QgaW50byB0eXBlTmFtZQ1pZiBwYXJhbVR5cGUgPSAwIHRoZW4NaWYgaW5kZXgg\nPD4gMSB0aGVuIHB1dCAiY29uc3QgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgIkFFRGVzYyAq\nIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDEgdGhlbiAtLSBoYW5k\nbGUNcHV0ICJIYW5kbGUgIiBhZnRlciB0ZW1wbGF0ZQ1pZiBpbmRleCA9IDEgdGhlbg1w\ndXQgIioiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1lbHNlIGlmIHBhcmFtVHlwZSA9IDQg\ndGhlbiAtLSBpbW1lZGlhdGUNcHV0IGl0ZW0gMyBvZiB5IGludG8gZGF0YVR5cGUNcHV0\nIGl0ZW0gNiBvZiBuYW1lTGlzdCBpbnRvIGRhdGFTaXplDWlmIGRhdGFUeXBlID0gImVu\ndW0iIHRoZW4NcHV0ICJSZXNUeXBlICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBkYXRh\nVHlwZSA9ICJ0cnVlIiB0aGVuDXB1dCAiQm9vbGVhbiAiIGFmdGVyIHRlbXBsYXRlDWVs\nc2UgaWYgKGlzT3B0aW9uYWwgb3IgKGRhdGFTaXplIDwgMCkgb3IgKGRhdGFTaXplID4g\nNCkpIGFuZCAoaW5kZXggPD4gMSkgdGhlbiAtLSBmaXhlZCBsZW5ndGggb3B0aW9uYWwN\ncHV0ICJjb25zdCAiICYgdHlwZU5hbWUgJiAiICoiIGFmdGVyIHRlbXBsYXRlDWVsc2UN\ncHV0IHR5cGVOYW1lICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGluZGV4\nID0gMSB0aGVuDXB1dCAiKiIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVsc2UgaWYgcGFy\nYW1UeXBlID0gNyB0aGVuDWlmIGluZGV4IDw+IDEgdGhlbiBwdXQgImNvbnN0ICIgYWZ0\nZXIgdGVtcGxhdGUNcHV0IHR5cGVOYW1lICYgIiAqIiBhZnRlciB0ZW1wbGF0ZQ1lbmQg\naWYNaWYgKGxhc3QgY2hhciBvZiB0ZW1wbGF0ZSA9ICIqIikgdGhlbg1wdXQgaXRlbSA2\nIG9mIHkgJiAiLCAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgKHBhcmFtVHlwZSA9IDUp\nIHRoZW4gLS0gcHRyICsgc2l6ZQ1wdXQgdHlwZU5hbWUgJiAiICoiICYgaXRlbSA2IG9m\nIHkgJiAiLCBsb25nICIgJiBpdGVtIDcgb2YgeSAmICIsICIgYWZ0ZXIgdGVtcGxhdGUN\nZWxzZSBpZiBwYXJhbVR5cGUgPSA2IHRoZW4NaWYgaW5kZXggPD4gMSB0aGVuIHB1dCAi\nY29uc3QgIiBhZnRlciB0ZW1wbGF0ZQ1wdXQgIlN0cmluZ1B0ciAiICYgaXRlbSA2IG9m\nIHkgJiAiLCAiIGFmdGVyIHRlbXBsYXRlDWVsc2UNcHV0IGl0ZW0gMSBvZiB5ICYgIiwg\nIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmIC0tIHVzZUl0DWVuZCBpZiAtLSB1\nc2VJdA1lbmQgcmVwZWF0DWlmIHBhcmFtSW5kZXggPiAwIHRoZW4NRGVsZXRlIGxhc3Qg\nY2hhciBvZiB0ZW1wbGF0ZSAtLSBzcGFjZSBvciAoDXB1dCAiKSIgaW50byBsYXN0IGNo\nYXIgb2YgdGVtcGxhdGUgLS0gcmVwbGFjZSAsDWVsc2UNcHV0ICIpIiBhZnRlciB0ZW1w\nbGF0ZQ1lbmQgaWYNcmV0dXJuIHRlbXBsYXRlDWVuZCBDVGVtcGxhdGUNDQAAIgAEAgUA\n3wADAPEAdgAAAAAAAAAAABUADAUAABAAAAAABewABQEAAQIAAgESAF3ABgAAAAAAAQAA\nAAwAAAAQYWV0ZSBOYW1lAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sg\naGVyZSB0byBzaG93IHRoZSBldmVudCBieSB1c2luZyB0aGUgZXZlbnQgbmFtZSBhbmQg\ncGFyYW1ldGVyIG5hbWUuIg1lbmQgTW91c2VXaXRoaW4NDWZ1bmN0aW9uIENsaWVudFRl\nbXBsYXRlIG11bHRpTGluZQ0tLSBlaXRoZXIgcmV0dXJuIHRoZSB0ZW1wbGF0ZSBvciB3\naGljaCBwYXJhbWV0ZXIgaXMgYmVpbmcgY2xpY2tlZA1wdXQgc3BhY2UgJiBOdW1Ub0No\nYXIoMTk0KSAmIHJldHVybiAmIHNwYWNlIGludG8gY29udENoYXINcHV0IGZpZWxkICJl\ndmVudE5hbWUiIGludG8gdGVtcGxhdGUNcHV0IGZpZWxkICJwYXJhbUluZm8iIGludG8g\neA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIHggaW50byBuDXB1dCAwIGludG8gcGFyYW1J\nbmRleA1yZXBlYXQgd2l0aCBpbmRleCA9IDIgdG8gbg1zZXQgY3Vyc29yIHRvIGJ1c3kN\ncHV0IGxpbmUgaW5kZXggb2YgeCBpbnRvIHkNcHV0IGl0ZW0gNCBvZiB5IGludG8gdGVt\ncA1wdXQgKHRlbXAgPiAzMjc2NykgaW50byBpc09wdGlvbmFsDXB1dCB0ZW1wIGRpdiA4\nMTkyIGludG8gdGVtcA1wdXQgKHRlbXAgbW9kIDIgPSAxKSBpbnRvIGlzRW51bQ1wdXQg\nIiIgaW50byBlbnVtZXJhdGVkDXB1dCAoaXRlbSAzIG9mIHkgPD4gIm51bGwiKSBpbnRv\nIHVzZUl0DWlmIHVzZUl0IHRoZW4NYWRkIDEgdG8gcGFyYW1JbmRleA0tLSBmb3IgcHJv\ndG8gc3RhdGVtZW50DWlmIGl0ZW0gMyBvZiB5ID0gInRydWUiIHRoZW4NcHV0ICJ0cnVl\nIiBpbnRvIHRoaXNQYXJhbQ1lbHNlIGlmIGluZGV4ID0gMSB0aGVuDXB1dCAiZGlyZWN0\nUGFyYW0iIGludG8gdGhpc1BhcmFtDWVsc2UNcHV0ICJwYXJhbSIgaW50byB0aGlzUGFy\nYW0NZW5kIGlmDWlmIHVzZUl0IHRoZW4NaWYgbXVsdGlMaW5lID0gIm11bHRpTGluZSIg\ndGhlbg1wdXQgY29udENoYXIgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgc3BhY2UgYWZ0\nZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgIlsiIGFmdGVy\nIHRlbXBsYXRlDWVuZCBpZg1pZiBpbmRleCA8PiAxIHRoZW4NcHV0IGl0ZW0gMSBvZiB5\nICYgc3BhY2UgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIGlzRW51bSB0aGVuDXB1dCBF\nbnVtT3B0aW9uKGZpZWxkICJzdWl0ZUNvZGUiLGl0ZW0gMyBvZiB5LGVudW1lcmF0ZWQs\nMSkgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1wdXQgdGhpc1BhcmFtIGFmdGVyIHRlbXBsYXRl\nDWVuZCBpZg1pZiBpc09wdGlvbmFsIHRoZW4NcHV0ICJdIiBhZnRlciB0ZW1wbGF0ZQ1l\nbmQgaWYNZW5kIGlmDWVuZCBpZiAtLSB1c2VJdA1lbmQgcmVwZWF0DXJldHVybiB0ZW1w\nbGF0ZQ1lbmQgQ2xpZW50VGVtcGxhdGUNDWZ1bmN0aW9uIENsaWVudFNhbXBsZSBjYXJk\nVHlwZQ1pZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1yZXR1cm4gQ2xpZW50VGVtcGxh\ndGUoKSAmIHJldHVybiAmIHJldHVybg1lbHNlDXJldHVybiAiIg1lbmQgaWYNZW5kIENs\naWVudFNhbXBsZQ0NADHAAAYBAAESAAIBIwBXgAYAAAAAAAEAAAAMAAAAEEh5cGVyVGFs\nawAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gc2hvdyB0\naGUgZXZlbnQgYXMgaXQgaXMgY2FsbGVkIGZyb20gSHlwZXJUYWxrLiINZW5kIE1vdXNl\nV2l0aGluDQ1mdW5jdGlvbiBDbGllbnRUZW1wbGF0ZSBtdWx0aUxpbmUNZ2xvYmFsIGNs\naWVudEhhc0dsdWUNcHV0IHNwYWNlICYgTnVtVG9DaGFyKDE5NCkgJiByZXR1cm4gJiBz\ncGFjZSBpbnRvIGNvbnRDaGFyDXB1dCBmaWVsZCAicGFyYW1JbmZvIiBpbnRvIHgNcHV0\nIHF1b3RlICYgIi0tLS0iICYgcXVvdGUgaW50byBkYXNoDXB1dCAoaXRlbSAzIG9mIGxp\nbmUgMSBvZiB4IDw+ICJudWxsIikgaW50byBpc0Z1bmMNcHV0IDAgaW50byBwYXJhbUlu\nZGV4DXB1dCBudW1iZXIgb2YgbGluZXMgaW4geCBpbnRvIG4NaWYgY2xpZW50SGFzR2x1\nZSB0aGVuDS0tIGVpdGhlciByZXR1cm4gdGhlIHRlbXBsYXRlIG9yIHdoaWNoIHBhcmFt\nZXRlciBpcyBiZWluZyBjbGlja2VkDXB1dCAiQUUiICYgU3RyaXBTUChmaWVsZCAiZXZl\nbnROYW1lIikgaW50byB0ZW1wbGF0ZQ1pZiBpc0Z1bmMgdGhlbg1wdXQgIiAoIiBhZnRl\nciB0ZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNcHV0\nIHRydWUgaW50byBmaXJzdFRpbWUgLS0gbm8gY29tbWEgYmVmb3JlIGZpcnN0IHBhcmFt\nDXB1dCAxIGludG8gb3B0aW9uRW5kIC0tIHdlIGxvb3AgdHdpY2UsIG9uY2UgZm9yIHJl\ncXVpcmVkIG9uY2UgZm9yIG9wdGlvbmFsDXB1dCAxIGludG8gZW51bU9wdGlvbkluZGV4\nIC0tIHdlIHdhbnQgZnVsbCBuYW1lDWVsc2UgLS0gbm8gZ2x1ZQ1wdXQgIkFFU2VuZCIg\nJiYgcXVvdGUgJiBSZXNUeXBlKGZpZWxkICJldmVudENsYXNzIikgwg0mIFJlc1R5cGUo\nZmllbGQgImV2ZW50SUQiKSAmIHF1b3RlICYgwg0iLCB0YXJnZXRQcm9ncmFtLCBzZW5k\nTW9kZSwgdGltZU91dFZhbHVlIiBpbnRvIHRlbXBsYXRlDXB1dCBmYWxzZSBpbnRvIGZp\ncnN0VGltZSAtLSBjb21tYSBiZWZvciBmaXJzdCBwYXJhbQ1wdXQgMCBpbnRvIG9wdGlv\nbkVuZCAgLS0gd2UganVzdCBsb29wIG9uY2UNcHV0IDIgaW50byBlbnVtT3B0aW9uSW5k\nZXggLS0gd2Ugd2FudCA0IGxldHRlciBjb2RlDWVuZCBpZg0tLSB3ZSBsb29wIHRocm91\nZ2ggaXQgdHdpY2UsIG9uIHRpbWUgZm9yIHJlcXVpcmVkLCBvbmUgZm9yIG9wdA1yZXBl\nYXQgd2l0aCBvcHRpb24gPSAwIHRvIG9wdGlvbkVuZA1wdXQgKG9wdGlvbiA9IDEpIGlu\ndG8gd2FudE9wdGlvbmFsDXJlcGVhdCB3aXRoIGluZGV4ID0gMiB0byBuDXNldCBjdXJz\nb3IgdG8gYnVzeQ1wdXQgbGluZSBpbmRleCBvZiB4IGludG8geQ1wdXQgaXRlbSA0IG9m\nIHkgaW50byB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRvIGlzT3B0aW9uYWwNaWYg\nKGlzT3B0aW9uYWwgPSB3YW50T3B0aW9uYWwpIG9yIChub3QgY2xpZW50SGFzR2x1ZSkg\ndGhlbg1wdXQgdGVtcCBkaXYgODE5MiBpbnRvIHRlbXANcHV0ICh0ZW1wIG1vZCAyID0g\nMSkgaW50byBpc0VudW0NcHV0ICIiIGludG8gZW51bWVyYXRlZA1wdXQgdHJ1ZSBpbnRv\nIHVzZUl0DWlmIGluZGV4ID0gMiB0aGVuDWlmIGl0ZW0gMyBvZiB5ID0gIm51bGwiIHRo\nZW4gcHV0IGZhbHNlIGludG8gdXNlSXQNcHV0ICJkaXJlY3RQYXJhbSIgaW50byBpdGVt\nIDEgb2YgeQ1wdXQgIi0tLS0iIGludG8gaXRlbSAyIG9mIHkNZW5kIGlmDWlmIHVzZUl0\nIHRoZW4NYWRkIDEgdG8gcGFyYW1JbmRleA1pZiB1c2VJdCB0aGVuDWlmIG11bHRpTGlu\nZSA9ICJtdWx0aUxpbmUiIHRoZW4NcHV0IGNvbnRDaGFyIGFmdGVyIHRlbXBsYXRlDWVs\nc2UNcHV0IHNwYWNlIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1pZiBpc09wdGlvbmFsIHRo\nZW4NcHV0ICJbIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNaWYgKGluZGV4IDw+IDIpIGFu\nZCAod2FudE9wdGlvbmFsIG9yIChOb3QgQ2xpZW50SGFzR2x1ZSkpIHRoZW4NaWYgZmly\nc3RUaW1lIHRoZW4NcHV0IGZhbHNlIGludG8gZmlyc3RUaW1lDWVsc2UNcHV0ICIsIiBh\nZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNaWYgY2xpZW50SGFzR2x1ZSB0aGVuDXB1dCBpdGVt\nIDEgb2YgeSBpbnRvIHRoaXNLZXkNZWxzZQ1wdXQgSFRLZXlXb3JkKHkpIGludG8gdGhp\nc0tleQ1lbmQgaWYNcHV0IHF1b3RlICYgdGhpc0tleSAmIHF1b3RlIGFmdGVyIHRlbXBs\nYXRlDWVuZCBpZg1pZiBmaXJzdFRpbWUgdGhlbg1wdXQgZmFsc2UgaW50byBmaXJzdFRp\nbWUNZWxzZQ1wdXQgIiwiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1pZiB3YW50T3B0aW9u\nYWwgb3IgKE5vdCBDbGllbnRIYXNHbHVlKSB0aGVuDWlmIGl0ZW0gMyBvZiB5ID0gInRy\ndWUiIHRoZW4NcHV0ICJ0cnVlIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlIGlmIGlzRW51bSB0\naGVuDXB1dCBFbnVtT3B0aW9uKGZpZWxkICJTdWl0ZUNvZGUiLGl0ZW0gMyBvZiB5LGVu\ndW1lcmF0ZWQsZW51bU9wdGlvbkluZGV4KSBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCAi\nc29tZSIgJiBpdGVtIDMgb2YgeSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZWxzZQ1pZiBp\nc0VudW0gdGhlbg1wdXQgRW51bU9wdGlvbihmaWVsZCAiU3VpdGVDb2RlIixpdGVtIDMg\nb2YgeSxlbnVtZXJhdGVkLGVudW1PcHRpb25JbmRleCkgYWZ0ZXIgdGVtcGxhdGUNZWxz\nZQ1wdXQgaXRlbSAxIG9mIHkgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZg1pZiBp\nc09wdGlvbmFsIHRoZW4NcHV0ICJdIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlm\nDWVuZCBpZiAtLSB1c2VpdA1lbmQgaWYgLS0gdGhlIHJpZ2h0IGtpbmQgb2Ygb3B0aW9u\nDWVuZCByZXBlYXQNZW5kIHJlcGVhdA1pZiBpc0Z1bmMgYW5kIGNsaWVudEhhc0dsdWUg\ndGhlbg1wdXQgIiApIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNcmV0dXJuIHRlbXBsYXRl\nDWVuZCBDbGllbnRUZW1wbGF0ZQ0NZnVuY3Rpb24gQ2xpZW50U2FtcGxlIGNhcmRUeXBl\nDWdsb2JhbCBjbGllbnRIYXNHbHVlLCBkZWZhdWx0VGFyZ2V0LCBkZWZhdWx0VGltZU91\ndA1pZiBjbGllbnRIYXNHbHVlIHRoZW4NZ2xvYmFsIG5hbWluZ0Zvcm1MaXN0LGVsZW1l\nbnRMaXN0LGNsYXNzTmFtZUxpc3QNcHV0ICIiIGludG8gcnN0DWlmIGNhcmRUeXBlID0g\nInN1aXRlIiB0aGVuDXB1dCAiIiBpbnRvIG5hbWluZ0Zvcm1MaXN0DXB1dCAiIiBpbnRv\nIGVsZW1lbnRMaXN0DXB1dCAiIiBpbnRvIGNsYXNzTmFtZUxpc3QNcHV0ICJlbnVtZXJh\ndGlvbiBmb3JtIiBpbnRvIHgNaWYgdGhlcmUgaXMgYSBjYXJkIHggdGhlbg1wdXQgZmll\nbGQgImVudW1JbmZvIiBvZiBjYXJkIHggaW50byBuYW1pbmdGb3JtTGlzdA1lbmQgaWYN\nZWxzZSBpZiBjYXJkVHlwZSA9ICJldmVudCIgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1Ao\nZmllbGQgIkV2ZW50TmFtZSIpIGludG8gRXZlbnROYW1lDXB1dCAoaXRlbSAzIG9mIGZp\nZWxkICJwYXJhbUluZm8iIDw+ICJudWxsIikgaW50byBpc0Z1bmMNaWYgaXNGdW5jIHRo\nZW4NcHV0ICJGdW5jdGlvbiIgaW50byBoZWFkZXINZWxzZQ1wdXQgIk9uIiBpbnRvIGhl\nYWRlcg1lbmQgaWYNcHV0IHNwYWNlICYgRXZlbnROYW1lIGFmdGVyIGhlYWRlcg1wdXQg\nc3BhY2UgJiBOdW1Ub0NoYXIoMTk0KSAmIHJldHVybiBpbnRvIGNvbnQNcHV0ICIgIHB1\ndCAiICYgcXVvdGUgJiAiQUVTZW5kICIgJiBxdW90ZSAmICIgJiBxdW90ZSAmICIgJiBx\ndW90ZSAmIFJlc1R5cGUoZmllbGQgImV2ZW50Q2xhc3MiKSAmIFJlc1R5cGUoZmllbGQg\nImV2ZW50SUQiKSAmIHF1b3RlICYgIiAmIHF1b3RlICYgIiAmIHF1b3RlICYgIiwiICYg\ncXVvdGUgJiBjb250IGFmdGVyIHNlbmRIZWFkZXINcHV0ICIgICYgcXVvdGUgJiAiICYg\ncXVvdGUgJiBkZWZhdWx0VGFyZ2V0ICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiICYgcXVv\ndGUgJiAiLCIgJiBxdW90ZSAmIGNvbnQgYWZ0ZXIgc2VuZEhlYWRlcg1wdXQgIiAgJiAi\nICYgcXVvdGUgYWZ0ZXIgc2VuZEhlYWRlcg1wdXQgIiAgQUVTZW5kICIgJiBxdW90ZSAm\nIFJlc1R5cGUoZmllbGQgImV2ZW50Q2xhc3MiKSAmIFJlc1R5cGUoZmllbGQgImV2ZW50\nSUQiKSAmIHF1b3RlICYgIiwiIMINJiBxdW90ZSAmIGRlZmF1bHRUYXJnZXQgJiBxdW90\nZSAmICIsIiBpbnRvIHNob3J0SGVhZGVyDWlmIGlzRnVuYyB0aGVuDXB1dCAiMywiIGFm\ndGVyIHNlbmRIZWFkZXINcHV0ICIzLCIgYWZ0ZXIgc2hvcnRIZWFkZXINZWxzZQ1wdXQg\nIjEsIiBhZnRlciBzZW5kSGVhZGVyDXB1dCAiMSwiIGFmdGVyIHNob3J0SGVhZGVyDWVu\nZCBpZg1wdXQgZGVmYXVsdFRpbWVPdXQgJiBxdW90ZSBhZnRlciBzZW5kSGVhZGVyDXB1\ndCBkZWZhdWx0VGltZU91dCBhZnRlciBzaG9ydEhlYWRlcg1wdXQgbGluZSAyIG9mIGZp\nZWxkICJwYXJhbUluZm8iIGludG8geA1wdXQgKGl0ZW0gMyBvZiB4IDw+ICJudWxsIikg\naW50byBoYXNEaXJlY3QNcHV0IChpdGVtIDQgb2YgeCA+IDMyNzY3KSBpbnRvIGRpcmVj\ndE9wdGlvbmFsDXB1dCAxIGludG8gcGFyYW1JbmRleA1wdXQgZmFsc2UgaW50byBoYXNP\ncHRpb25hbA1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGZpZWxkICJwYXJhbUluZm8iIGlu\ndG8gY291bnQNcmVwZWF0IHdpdGggaW5kZXggPSAyIHRvIGNvdW50DXB1dCBsaW5lIGlu\nZGV4IG9mIGZpZWxkICJwYXJhbUluZm8iIGludG8geA1wdXQgaXRlbSA0IG9mIHggaW50\nbyB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRvIGlzT3B0aW9uYWwNaWYgaXRlbSAz\nIG9mIHggPD4gIm51bGwiIHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDWlmIGluZGV4IDw+\nIDIgdGhlbg1wdXQgdHJ1ZSBpbnRvIGhhc09wdGlvbmFsDWVuZCBpZg1lbHNlDXB1dCB0\nZW1wIGRpdiA4MTkyIGludG8gdGVtcA1wdXQgKHRlbXAgbW9kIDIpID0gMSBpbnRvIGlz\nRW51bQ1pZiBpbmRleCA9IDIgdGhlbg0tLSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGRp\ncmVjdCBwYXJhbWV0ZXINaWYgcGFyYW1JbmRleCA9IDEgdGhlbg1wdXQgIiAiIGFmdGVy\nIGhlYWRlcg1lbHNlDXB1dCAiLCIgYWZ0ZXIgaGVhZGVyDWVuZCBpZg1wdXQgImRpcmVj\ndFBhcmFtIiBhZnRlciBoZWFkZXINcHV0ICItLS0tIiBpbnRvIGl0ZW0gMiBvZiB4DXB1\ndCBIVEtleVdvcmQoeCkgaW50byB0aGlzVHlwZQ1pZiBsZW5ndGgodGhpc1R5cGUpID4g\nNCB0aGVuDS0tIHdlIG5lZWQgYSBrZXl3b3JkIGZvciBkaXJlY3RQYXJhbSBiZWNhdXNl\nIHRoZXJlIGlzIGEgdHlwZQ1wdXQgIiAmICIgJiBxdW90ZSAmICIsIiAmIHF1b3RlICYg\nIiAmIHF1b3RlICYgIiAmIHF1b3RlICYgdGhpc1R5cGUgJiBxdW90ZSAmICIgJiBxdW90\nZSAiIGFmdGVyIHNlbmRIZWFkZXINcHV0ICIsIiAmIHF1b3RlICYgdGhpc1R5cGUgJiBx\ndW90ZSBhZnRlciBzaG9ydEhlYWRlcg1pZiBjaGFyIDUgdG8gOCBvZiB0aGlzVHlwZSA9\nICJlbnVtIiB0aGVuDXB1dCBFbnVtTGluZXMoMSxpdGVtIDMgb2YgeCwgImRpcmVjdFBh\ncmFtIiwgdHJ1ZSkgYWZ0ZXIgcnN0DWVuZCBpZg1lbmQgaWYNcHV0ICIgJiAiICYgcXVv\ndGUgJiAiLGRpcmVjdFBhcmFtIiAmIHF1b3RlIGFmdGVyIHNlbmRIZWFkZXINcHV0ICIs\nZGlyZWN0UGFyYW0iIGFmdGVyIHNob3J0SGVhZGVyDWFkZCAxIHRvIHBhcmFtSW5kZXgN\nZWxzZQ1wdXQgU3RyaXBTUChpdGVtIDEgb2YgeCkgaW50byB0ZW1wDWlmIHBhcmFtSW5k\nZXggPSAxIHRoZW4NcHV0ICIgIiBhZnRlciBoZWFkZXINZWxzZQ1wdXQgIiwiIGFmdGVy\nIGhlYWRlcg1lbmQgaWYNcHV0IHRlbXAgYWZ0ZXIgaGVhZGVyDS0tIHB1dCBpbiB0aGUg\na2V5d29yZA1wdXQgSFRLZXlXb3JkKHgpIGludG8gdGhpc1R5cGUNcHV0ICIgJiAiICYg\ncXVvdGUgJiAiLCIgJiBxdW90ZSAmICIgJiBxdW90ZSAmICIgJiBxdW90ZSAmIHRoaXNU\neXBlICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiLCIgJiB0ZW1wICYg\ncXVvdGUgYWZ0ZXIgc2VuZEhlYWRlcg1wdXQgIiwiICYgcXVvdGUgJiB0aGlzVHlwZSAm\nIHF1b3RlICYgIiwiICYgdGVtcCBhZnRlciBzaG9ydEhlYWRlcg1pZiBjaGFyIDUgdG8g\nOCBvZiB0aGlzVHlwZSA9ICJlbnVtIiB0aGVuDXB1dCBFbnVtTGluZXMoMSxpdGVtIDMg\nb2YgeCwgdGVtcCwgdHJ1ZSkgYWZ0ZXIgcnN0DWVuZCBpZg1hZGQgMSB0byBwYXJhbUlu\nZGV4DWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQgLS0gMiB0byBuDWlmICho\nYXNPcHRpb25hbCkgb3IgKGhhc0RpcmVjdCBhbmQgZGlyZWN0T3B0aW9uYWwpIHRoZW4g\nLS0gbm90IGFsbCBwYXJhbSBhcmUgcmVxdWlyZWQNcHV0IGhlYWRlciAmIHJldHVybiAm\nIHNlbmRIZWFkZXIgJiAiIGFmdGVyIHN0bXQiICYgcmV0dXJuIGJlZm9yZSByc3QNaWYg\naGFzRGlyZWN0IGFuZCBkaXJlY3RPcHRpb25hbCB0aGVuDXB1dCAiICBwdXQgIiAmIHBh\ncmFtSW5kZXggJiAiIGludG8gaSIgJiByZXR1cm4gYWZ0ZXIgcnN0DS0tIHdlIGhhdmUg\nYSBvcHRpb25hbCBkaXJlY3QgcGFyYW1ldGVyDXB1dCAiICBpZiAodGhlIFBhcmFtQ291\nbnQiIGFmdGVyIHJzdA1pZiBwYXJhbUluZGV4ID4gMSB0aGVuIHB1dCBzcGFjZSAmICIt\nICIgJiBwYXJhbUluZGV4LTEgYWZ0ZXIgcnN0DXB1dCAiKSBtb2QgMiA9IDEgdGhlbiIg\nJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBsaW5lIDIgb2YgZmllbGQgInBhcmFtSW5mbyIg\naW50byB4DXB1dCAiLS0tLSIgaW50byBpdGVtIDIgb2YgeA1wdXQgSFRLZXlXb3JkKHgp\nIGludG8gdGhpc1R5cGUNcHV0IGZhbHNlIGludG8gcGFyYW1Jc1VwIC0tIHdlIGhhdmUg\nbm90IHB1dCBQYXJhbSB1cCB5ZXQNaWYgKHBhcmFtSW5kZXggPiAxKSBvciAobGVuZ3Ro\nKHRoaXNUeXBlKSA+IDQpIHRoZW4NLS0gd2UgaGF2ZSB0byBmYWtlIGEga2V5d29yZA1w\ndXQgIiAgICBwdXQgIiAmIHF1b3RlICYgIiwiICYgcXVvdGUgJiAiICYgcXVvdGUgJiAi\nICYgcXVvdGUgJiB0aGlzVHlwZSAmIHF1b3RlICYgIiAmIHF1b3RlIGFmdGVyIHN0bXQi\nICYgcmV0dXJuIGFmdGVyIHJzdA1pZiBjaGFyIDUgdG8gOCBvZiB0aGlzVHlwZSA9ICJl\nbnVtIiB0aGVuDXB1dCBFbnVtTGluZXMoMiwgaXRlbSAzIG9mIHgsICJQYXJhbShpKSIs\nIGZhbHNlKSBpbnRvIHRlbXANaWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAiICAgIHB1dCAi\nICYgcXVvdGUgJiAiLCIgJiBxdW90ZSAmICIgYWZ0ZXIgc3RtdCIgJiByZXR1cm4gYWZ0\nZXIgcnN0DXB1dCAiICAgIGVsc2UiIGludG8gbGFzdCBsaW5lIG9mIHRlbXANcHV0ICIg\nICAgICBwdXQgIiAmIHF1b3RlICYgIlBhcmFtKCIgJiBxdW90ZSAmICIgJiBpICYgIiAm\nIHF1b3RlICYgIikiICYgcXVvdGUgJiAiIGFmdGVyIHN0bXQiICYgcmV0dXJuIGFmdGVy\nIHRlbXANcHV0ICIgICAgZW5kIGlmIiAmIHJldHVybiBhZnRlciB0ZW1wDXB1dCB0ZW1w\nIGFmdGVyIHJzdA1wdXQgdHJ1ZSBpbnRvIHBhcmFtSXNVcCAtLSBub3cgd2UgaGF2ZSBw\ndXQgUGFyYW0gdXANZW5kIGlmDWVuZCBpZg1lbmQgaWYNaWYgbm90IHBhcmFtSXNVcCB0\naGVuDXB1dCAiICAgIHB1dCAiICYgcXVvdGUgJiAiLFBhcmFtKCIgJiBxdW90ZSAmICIg\nJiBpICYgIiAmIHF1b3RlICYgIikiICYgcXVvdGUgJiAiIGFmdGVyIHN0bXQiICYgcmV0\ndXJuIGFmdGVyIHJzdA1lbmQgaWYNaWYgaGFzT3B0aW9uYWwgdGhlbg0tLSBpbmNyZW1l\nbnQgaSBpZiB3ZSBuZWVkIGl0IGxhdGVyDXB1dCAiICAgIGFkZCAxIHRvIGkiICYgcmV0\ndXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0ICIgIGVuZCBpZiIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DWVsc2UgaWYgaGFzT3B0aW9uYWwgdGhlbg1wdXQgIiAgcHV0ICIgJiBwYXJhbUlu\nZGV4ICYgIiBpbnRvIGkiICYgcmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0IHRydWUg\naW50byBmaXJzdE9wdGlvbmFsDWlmIGhhc09wdGlvbmFsIHRoZW4NcHV0ICIgIHJlcGVh\ndCB1bnRpbCBpID4gdGhlIFBhcmFtQ291bnQiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQg\nIiAgICBwdXQgcGFyYW0oaSkgaW50byB4IiAmIHJldHVybiBhZnRlciByc3QNcHV0ICIg\nICAgcHV0ICIgJiBxdW90ZSAmICIsIiAmIHF1b3RlICYgIiBhZnRlciBzdG10IiAmIHJl\ndHVybiBhZnRlciByc3QNcHV0IGZhbHNlIGludG8gaGFzRW51bQ1yZXBlYXQgd2l0aCBp\nID0gMyB0byBjb3VudA1wdXQgbGluZSBpIG9mIGZpZWxkICJwYXJhbUluZm8iIGludG8g\neA1wdXQgaXRlbSA0IG9mIHggaW50byB0ZW1wDXB1dCAodGVtcCA+IDMyNzY3KSBpbnRv\nIGlzT3B0aW9uYWwNaWYgaXNPcHRpb25hbCB0aGVuDWlmIGZpcnN0T3B0aW9uYWwgdGhl\nbg1wdXQgIiAgICAiIGFmdGVyIHJzdA1wdXQgZmFsc2UgaW50byBmaXJzdE9wdGlvbmFs\nDWVsc2UNcHV0ICIgICAgZWxzZSAiIGFmdGVyIHJzdA1lbmQgaWYNcHV0IEhUS2V5V29y\nZCh4KSBpbnRvIHRoaXNLZXkNcHV0IGl0ZW0gMSBvZiB4IGludG8gdGhpc05hbWUNcHV0\nIFN0cmlwU1AodGhpc05hbWUpIGludG8gbm9TcE5hbWUNcHV0IChjaGFyIDUgdG8gOCBv\nZiB0aGlzS2V5ID0gImVudW0iKSBpbnRvIGlzRW51bQ1wdXQgImlmIHggPSAiICYgcXVv\ndGUgJiB0aGlzTmFtZSAmIHF1b3RlIGFmdGVyIHJzdA1pZiB0aGlzTmFtZSA8PiBub1Nw\nTmFtZSB0aGVuDXB1dCAiIG9yIHggPSAiICYgcXVvdGUgJiBub1NwTmFtZSAmIHF1b3Rl\nIGFmdGVyIHJzdA1lbmQgaWYNaWYgaXNFbnVtIGFuZCAoaXRlbSAyIG9mIHggPD4gbm9T\ncE5hbWUpIHRoZW4NcHV0ICIgb3IgeCA9ICIgJiBxdW90ZSAmIGl0ZW0gMiBvZiB4ICYg\ncXVvdGUgYWZ0ZXIgcnN0DWVuZCBpZg1wdXQgIiB0aGVuIiAmIHJldHVybiBhZnRlciBy\nc3QNcHV0ICIgICAgICBwdXQgcXVvdGUgJiAiICYgcXVvdGUgJiB0aGlzS2V5ICYgcXVv\ndGUgJiAiICYgcXVvdGUgJiAiICYgcXVvdGUgJiAiLCIgJiBxdW90ZSAmICIgYWZ0ZXIg\nc3RtdCIgJiByZXR1cm4gYWZ0ZXIgcnN0DWlmIGlzRW51bSB0aGVuDXB1dCB0cnVlIGlu\ndG8gaGFzRW51bQ1wdXQgRW51bUxpbmVzKDMsIGl0ZW0gMyBvZiB4LCAieCIsIGZhbHNl\nKSBpbnRvIHRlbXANaWYgdGVtcCA8PiAiIiB0aGVuDXB1dCAiICAgICAgcHV0IHBhcmFt\nKGkrMSkgaW50byB4IiAmIHJldHVybiBhZnRlciByc3QNcHV0IHRlbXAgYWZ0ZXIgcnN0\nDWVuZCBpZg1lbmQgaWYNZW5kIGlmDWVuZCByZXBlYXQNcHV0ICIgICAgZWxzZSIgJiBy\nZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICAgICAgcHV0ICIgJiBxdW90ZSAmICJQYXJhbSgi\nICYgcXVvdGUgJiAiICYgaSAmICIgJiBxdW90ZSAmICIpLCIgJiBxdW90ZSAmICIgYWZ0\nZXIgc3RtdCIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICAgIGVuZCBpZiIgJiByZXR1\ncm4gYWZ0ZXIgcnN0DWlmIGhhc0VudW0gdGhlbg1wdXQgIiAgICBpZiBsYXN0IGNoYXIg\nb2Ygc3RtdCA9ICIgJiBxdW90ZSAmICIsIiAmIHF1b3RlICYgIiB0aGVuIiAmIHJldHVy\nbiBhZnRlciByc3QNcHV0ICIgICAgICBwdXQgIiAmIHF1b3RlICYgIlBhcmFtKCIgJiBx\ndW90ZSAmICIgJiBpKzEgJiAiICYgcXVvdGUgJiAiKSIgJiBxdW90ZSAmICIgYWZ0ZXIg\nc3RtdCIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICAgIGVuZCBpZiIgJiByZXR1cm4g\nYWZ0ZXIgcnN0DWVsc2UNcHV0ICIgICAgcHV0ICIgJiBxdW90ZSAmICJQYXJhbSgiICYg\ncXVvdGUgJiAiICYgaSsxICYgIiAmIHF1b3RlICYgIikiICYgcXVvdGUgJiAiIGFmdGVy\nIHN0bXQiICYgcmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0ICIgICAgYWRkIDIgdG8g\naSIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCAiICBlbmQgcmVwZWF0IiAmIHJldHVybiBh\nZnRlciByc3QNZW5kIGlmDXB1dCAiICBkbyBzdG10IiAmIHJldHVybiBhZnRlciByc3QN\nZWxzZSAtLSBhbGwgYXJlIHJlcXVpcmVkDXB1dCBoZWFkZXIgJiByZXR1cm4gYmVmb3Jl\nIHJzdA1wdXQgc2hvcnRIZWFkZXIgJiByZXR1cm4gYWZ0ZXIgcnN0DWVuZCBpZg1pZiBp\nc0Z1bmMgdGhlbg1wdXQgIiAgcmV0dXJuIGl0IiAmIHJldHVybiBhZnRlciByc3QNZW5k\nIGlmDXB1dCAiRW5kICIgJiBFdmVudE5hbWUgJiByZXR1cm4gJiByZXR1cm4gYWZ0ZXIg\ncnN0DXJldHVybiByc3QNZWxzZSBpZiBjYXJkVHlwZSA9ICJjbGFzcyIgdGhlbg1wdXQg\nZmllbGQgY2xhc3NJRCAmICIsIiAmIGZpZWxkICJjbGFzc05hbWUiICYgcmV0dXJuIGFm\ndGVyIGNsYXNzTmFtZUxpc3QNcHV0IGZpZWxkICJlbGVtZW50cyIgaW50byB4DXB1dCBu\ndW1iZXIgb2YgbGluZXMgaW4geCBpbnRvIGVsZW1lbnRDb3VudA0tLSB3ZSB3YW50IGEg\ndW5pcXVlIGxpc3Qgb2YgY2xhc3MgLSBpbmRleCBmb3JtIHBhaXINcmVwZWF0IHdpdGgg\nZWxlbWVudEluZGV4ID0gMSB0byBlbGVtZW50Q291bnQNcHV0IGxpbmUgZWxlbWVudElu\nZGV4IG9mIHggaW50byB0aGlzTGluZQ1wdXQgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXNM\naW5lIGludG8gaUNvdW50DXJlcGVhdCB3aXRoIGkgPSAyIHRvIGlDb3VudA1wdXQgaXRl\nbSAxIG9mIHRoaXNMaW5lICYgIiwiICYgaXRlbSBpIG9mIHRoaXNMaW5lIGludG8gdGhp\nc0Zvcm0NcHV0IG51bWJlciBvZiBsaW5lcyBpbiBlbGVtZW50TGlzdCBpbnRvIGpDb3Vu\ndA1yZXBlYXQgd2l0aCBqID0gMSB0byBqQ291bnQNaWYgdGhpc0Zvcm0gPSBsaW5lIGog\nb2YgZWxlbWVudExpc3QgdGhlbg1kZWxldGUgbGluZSBqIG9mIGVsZW1lbnRMaXN0DWVu\nZCBpZg1lbmQgcmVwZWF0DXB1dCB0aGlzRm9ybSAmIHJldHVybiBhZnRlciBlbGVtZW50\nTGlzdA1lbmQgcmVwZWF0DWVuZCByZXBlYXQNcmV0dXJuICIiDWVsc2UgaWYgY2FyZFR5\ncGUgPSAic3VpdGVFbmQiIHRoZW4NLS0gd2UgY3JlYXRlIHRoZSBnbHVlIHJvdXRpbmUg\nZm9yIHRoZSBvYmplY3Qgc3BlY2lmaWVycw1wdXQgbnVtYmVyIG9mIGxpbmVzIGluIGVs\nZW1lbnRMaXN0IGludG8gZWxlbWVudENvdW50DXB1dCBudW1iZXIgb2YgbGluZXMgaW4g\nbmFtaW5nRm9ybUxpc3QgaW50byBuYW1lQ291bnQNcHV0IG51bWJlciBvZiBsaW5lcyBp\nbiBjbGFzc05hbWVMaXN0IGludG8gY2xhc3NDb3VudA1yZXBlYXQgd2l0aCBpID0gMSB0\nbyBlbGVtZW50Q291bnQNcHV0IGxpbmUgaSBvZiBlbGVtZW50TGlzdCBpbnRvIHgNcHV0\nIGl0ZW0gMSBvZiB4IGludG8gY2xhc3NJRA1wdXQgaXRlbSAyIG9mIHggaW50byBuYW1l\nRm9ybQ0tLSB3ZSBsb29rIGZvciB0aGUgbmFtaW5nIGZvcm0gbmFtZQ1yZXBlYXQgd2l0\naCBqID0gMSB0byBuYW1lQ291bnQNaWYgbmFtZUZvcm0gPSBpdGVtIDIgb2YgbGluZSBq\nIG9mIG5hbWluZ0Zvcm1MaXN0IHRoZW4NLS0gd2UgbG9vayBmb3IgdGhlIGNsYXNzIG5h\nbWUNcmVwZWF0IHdpdGggayA9IDEgdG8gY2xhc3NDb3VudA1pZiBjbGFzc0lEID0gaXRl\nbSAxIG9mIGxpbmUgayBvZiBjbGFzc05hbWVMaXN0IHRoZW4NcHV0IGl0ZW0gMiBvZiBs\naW5lIGsgb2YgY2xhc3NOYW1lTGlzdCAmIGl0ZW0gMSBvZiBsaW5lIGogb2YgbmFtaW5n\nRm9ybUxpc3QgaW50byB0aGlzTmFtZQ1wdXQgImZ1bmN0aW9uICIgJiB0aGlzTmFtZSAm\nICIsZGF0YSxjb250YWluZXIiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgIiAgcmV0dXJu\nIE9ialNwZWMgKCIgJiBxdW90ZSAmIFJlc1R5cGUoaXRlbSAxIG9mIHgpICYgcXVvdGUg\nJiAiLCAiIGFmdGVyIHJzdA1wdXQgcXVvdGUgJiBSZXNUeXBlKGl0ZW0gMiBvZiBsaW5l\nIGogb2YgbmFtaW5nRm9ybUxpc3QpICYgcXVvdGUgJiAiLCBkYXRhLCBjb250YWluZXIp\nIiAmIHJldHVybiBhZnRlciByc3QNcHV0ICJlbmQgIiAmIHRoaXNOYW1lICYgcmV0dXJu\nICYgcmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNZW5kIHJlcGVhdA1lbmQgaWYNZW5kIHJl\ncGVhdA1lbmQgcmVwZWF0DXJldHVybiByc3QNZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVs\nc2UNaWYgY2FyZFR5cGUgPSAiZXZlbnQiIHRoZW4NcmV0dXJuIENsaWVudFRlbXBsYXRl\nKCkgJiByZXR1cm4gJiByZXR1cm4NZWxzZQ1yZXR1cm4gIiINZW5kIGlmDWVuZCBpZg1l\nbmQgQ2xpZW50U2FtcGxlDQ1mdW5jdGlvbiBFbnVtTGluZXMgaW5kZW50LCBlbnVtQ29k\nZSwgdmFyTmFtZSwgd3JpdGVUb1Zhcg1yZXBlYXQgaW5kZW50IHRpbWVzDXB1dCAiICAi\nIGFmdGVyIGluZGVudFNwYWNlDWVuZCByZXBlYXQNcHV0ICIiIGludG8gcnN0DXB1dCAi\nZW51bWVyYXRpb24iICYmIGVudW1Db2RlIGludG8geA1pZiB0aGVyZSBpcyBhIGNhcmQg\neCB0aGVuDXB1dCBmaWVsZCAiZW51bUluZm8iIG9mIGNhcmQgeCBpbnRvIHgNcHV0IG51\nbWJlciBvZiBsaW5lcyBpbiB4IGludG8gbg1pZiBuID4gMCB0aGVuDS0tIG5vdyB3ZSBn\nbyB0aHJvdWdoIHRoZSBlbnVtIGxpc3QgYW5kIGNoZWNrIGVhY2ggb25lDXJlcGVhdCB3\naXRoIGkgPSAxIHRvIG4NaWYgaSA9IDEgdGhlbg1wdXQgaW5kZW50U3BhY2UgJiAiaWYi\nIGFmdGVyIHJzdA1lbHNlDXB1dCBpbmRlbnRTcGFjZSAmICJlbHNlIGlmIiBhZnRlciBy\nc3QNZW5kIGlmDXB1dCBzcGFjZSAmIHZhck5hbWUgJiAiID0gIiAmIHF1b3RlICYgaXRl\nbSAxIG9mIGxpbmUgaSBvZiB4ICYgcXVvdGUgJiAiIHRoZW4iICYgcmV0dXJuIGFmdGVy\nIHJzdA1pZiB3cml0ZVRvVmFyIHRoZW4NcHV0IGluZGVudFNwYWNlICYgIiAgcHV0ICIg\nJiBxdW90ZSAmIFJlc1R5cGUoaXRlbSAyIG9mIGxpbmUgaSBvZiB4KSAmIHF1b3RlICYg\nIiBpbnRvICIgJiB2YXJOYW1lICYgcmV0dXJuIGFmdGVyIHJzdA1lbHNlDXB1dCBpbmRl\nbnRTcGFjZSAmICIgIHB1dCBxdW90ZSAmICIgJiBxdW90ZSAmIFJlc1R5cGUoaXRlbSAy\nIG9mIGxpbmUgaSBvZiB4KSAmIHF1b3RlICYgIiAmIHF1b3RlIGFmdGVyIHN0bXQiICYg\ncmV0dXJuIGFmdGVyIHJzdA1lbmQgaWYNZW5kIHJlcGVhdA1wdXQgaW5kZW50U3BhY2Ug\nJiAiZW5kIGlmIiAmIHJldHVybiBhZnRlciByc3QNZW5kIGlmIC0tIGlmIG4gPiAwDWVu\nZCBpZiAtLSBpZiBjYXJkIGV4aXN0cw1yZXR1cm4gcnN0DWVuZCBFbnVtTGluZXMNDQAL\n8AAHAQABIwACATMAWoAGAAAAAAABAAAADAAAABBNUFcgU2hlbGwAAG9uIE1vdXNlV2l0\naGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIHNob3cgdGhlIGV2ZW50IGFzIGl0\nIGlzIGNhbGxlZCBmcm9tIHRoZSBNUFcgU2hlbGwgTGFuZ3VhZ2UgdXNpbmcgdGhlIFNl\nbmRBRSBjb21tYW5kLiINZW5kIE1vdXNlV2l0aGluDQ1mdW5jdGlvbiBDbGllbnRUZW1w\nbGF0ZSBtdWx0aUxpbmUNZ2xvYmFsIGNsaWVudEhhc0dsdWUNcHV0IHNwYWNlICYgTnVt\nVG9DaGFyKDE5NCkgJiByZXR1cm4gJiBzcGFjZSBpbnRvIGNvbnRDaGFyDWlmIGNsaWVu\ndEhhc0dsdWUgdGhlbg1wdXQgIkFFIiAmIFN0cmlwU1AoZmllbGQgImV2ZW50TmFtZSIp\nIGludG8gdGVtcGxhdGUNZWxzZQ1wdXQgInNlbmRBRSAtZSAnIiAmIFJlc1R5cGUoZmll\nbGQgImV2ZW50Q2xhc3MiKSAmIFJlc1R5cGUoZmllbGQgImV2ZW50SUQiKSAmICInIiBp\nbnRvIHRlbXBsYXRlDWVuZCBpZg1wdXQgZmllbGQgInBhcmFtSW5mbyIgaW50byB4DS0t\nIGlmIGlzIGZ1bmN0aW9uIHRoZW4gV2FpdFJlcGx5IGVsc2Ugbm9SZXBseQ1pZiBpdGVt\nIDMgb2YgbGluZSAxIG9mIHggPSAibnVsbCIgdGhlbg1wdXQgIiAtbSAxIiBhZnRlciB0\nZW1wbGF0ZQ1lbHNlDXB1dCAiIC1tIDMiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1wdXQg\nbnVtYmVyIG9mIGxpbmVzIGluIHggaW50byBuDXB1dCAwIGludG8gcGFyYW1JbmRleA1y\nZXBlYXQgd2l0aCBpbmRleCA9IDIgdG8gbg1zZXQgY3Vyc29yIHRvIGJ1c3kNcHV0IGxp\nbmUgaW5kZXggb2YgeCBpbnRvIHkNcHV0IGl0ZW0gNCBvZiB5IGludG8gdGVtcA1wdXQg\nKHRlbXAgPiAzMjc2NykgaW50byBpc09wdGlvbmFsDXB1dCB0ZW1wIGRpdiA4MTkyIGlu\ndG8gdGVtcA1wdXQgKHRlbXAgbW9kIDIgPSAxKSBpbnRvIGlzRW51bQ1wdXQgIiIgaW50\nbyBlbnVtZXJhdGVkDXB1dCB0cnVlIGludG8gdXNlSXQNaWYgaW5kZXggPSAyIHRoZW4N\naWYgaXRlbSAzIG9mIHkgPSAibnVsbCIgdGhlbiBwdXQgZmFsc2UgaW50byB1c2VJdA1w\ndXQgZGlyZWN0UGFyYW0gaW50byBpdGVtIDEgb2YgeQ1pZiAobm90IGNsaWVudEhhc0ds\ndWUgb3IgaXNPcHRpb25hbCkgdGhlbg1wdXQgIi0tLS0iIGludG8gaXRlbSAyIG9mIHkN\nZW5kIGlmDWVuZCBpZg1pZiB1c2VJdCB0aGVuDWFkZCAxIHRvIHBhcmFtSW5kZXgNaWYg\ndXNlSXQgdGhlbg1pZiBtdWx0aUxpbmUgPSAibXVsdGlMaW5lIiB0aGVuDXB1dCBjb250\nQ2hhciBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1l\nbmQgaWYNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCAiWyIgYWZ0ZXIgdGVtcGxhdGUNZW5k\nIGlmDWlmIGlzRW51bSB0aGVuDXB1dCBNUFdLZXkoaXRlbSAyIG9mIHksImVudW0iKSBh\nZnRlciB0ZW1wbGF0ZQ1wdXQgc3BhY2UgJiBFbnVtT3B0aW9uKGZpZWxkICJTdWl0ZUNv\nZGUiLGl0ZW0gMyBvZiB5LGVudW1lcmF0ZWQsMikgYWZ0ZXIgdGVtcGxhdGUNZWxzZQ1w\ndXQgTVBXS2V5KGl0ZW0gMiBvZiB5LGl0ZW0gMyBvZiB5KSBhZnRlciB0ZW1wbGF0ZQ1w\ndXQgc3BhY2UgJiBTdHJpcFNQKGl0ZW0gMSBvZiB5KSBhZnRlciB0ZW1wbGF0ZQ1lbmQg\naWYNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCAiXSIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlm\nDWVuZCBpZg1lbmQgaWYNZW5kIHJlcGVhdA1yZXR1cm4gdGVtcGxhdGUNZW5kIENsaWVu\ndFRlbXBsYXRlDQ1mdW5jdGlvbiBNUFdLZXkga2V5LGRhdGFUeXBlDWlmIGtleSA9ICIi\nIHRoZW4NcmV0dXJuICIiDWVsc2UNcHV0IFJlc1R5cGUoa2V5KSBpbnRvIHgNaWYgKGRh\ndGFUeXBlIDw+ICJsaXN0IikgYW5kIChkYXRhVHlwZSA8PiAib2JqIikgdGhlbg1wdXQg\nUmVzVHlwZShkYXRhVHlwZSkgYWZ0ZXIgeA1lbmQgaWYNaWYgb2Zmc2V0KHNwYWNlLCB4\nKSA+IDAgdGhlbg1wdXQgIiciICYgeCAmICInIiBpbnRvIHgNZW5kIGlmDXJldHVybiAi\nLSIgJiB4DWVuZCBpZg1lbmQgTVBXS2V5DQ1mdW5jdGlvbiBDbGllbnRTYW1wbGUgY2Fy\nZFR5cGUNZ2xvYmFsIGNsaWVudEhhc0dsdWUNaWYgY2xpZW50SGFzR2x1ZSBhbmQgKGNh\ncmRUeXBlID0gImV2ZW50IikgdGhlbg1wdXQgImFsaWFzIEFFIiAmIFN0cmlwU1AoZmll\nbGQgImV2ZW50TmFtZSIpIMINJiYgIlNlbmRBRSAtZSAnIiAmIFJlc1R5cGUoZmllbGQg\nImV2ZW50Q2xhc3MiKSDCDSYgUmVzVHlwZSAoZmllbGQgImV2ZW50SUQiKSAmICInIiBp\nbnRvIHJzdA1nZXQgY2FyZCBmaWVsZCAic2VuZFRhcmdldCIgb2YgY2FyZCAiUHJlZmVy\nZW5jZSINaWYgaXQgPD4gIiIgdGhlbg1wdXQgIiAtdCAnIiAmIGl0ICYgIiciIGFmdGVy\nIHJzdA1lbmQgaWYNaWYgKGl0ZW0gMyBvZiBmaWVsZCAicGFyYW1JbmZvIiA8PiAibnVs\nbCIpIHRoZW4NcHV0ICIgLW0gMyIgYWZ0ZXIgcnN0DWVsc2UNcHV0ICIgLW0gMSIgYWZ0\nZXIgcnN0DWVuZCBpZg1wdXQgbGluZSAyIG9mIGZpZWxkICJwYXJhbUluZm8iIGludG8g\neQ1wdXQgaXRlbSA0IG9mIHkgaW50byB0ZW1wDWlmICh0ZW1wIDw9IDMyNzY3KSBhbmQg\nKGl0ZW0gMyBvZiB5IDw+ICJudWxsIikgdGhlbg0tLSB3ZSBoYXZlIGEgcmVxdWlyZWQg\nZGlyZWN0IHBhcmFtZXRlcg1wdXQgdGVtcCBkaXYgODE5MiBpbnRvIHRlbXANaWYgKHRl\nbXAgbW9kIDIgPSAxKSB0aGVuDXB1dCAiZW51bSIgaW50byB0aGlzVHlwZQ1lbHNlDXB1\ndCBSZXNUeXBlKGl0ZW0gMyBvZiB5KSBpbnRvIHRoaXNUeXBlDWVuZCBpZg1pZiAodGhp\nc1R5cGUgPSAib2JqICIpIG9yICh0aGlzVHlwZSA9ICJsaXN0IikgdGhlbg1wdXQgIiAt\nLS0tLSIgYWZ0ZXIgcnN0DWVsc2UgaWYgY2hhciA0IG9mIHRoaXNUeXBlID0gc3BhY2Ug\ndGhlbg1wdXQgIiAtLS0tLSciICYgdGhpc1R5cGUgJiAiJyIgYWZ0ZXIgcnN0DWVsc2UN\ncHV0ICIgLS0tLS0iICYgdGhpc1R5cGUgYWZ0ZXIgcnN0DWVuZCBpZg1lbmQgaWYNcmV0\ndXJuIHJzdCAmIHJldHVybiAmIHJldHVybg1lbHNlDWlmIGNhcmRUeXBlID0gZXZlbnQg\ndGhlbg1yZXR1cm4gQ2xpZW50VGVtcGxhdGUoKSAmIHJldHVybiAmIHJldHVybg1lbHNl\nDXJldHVybiAiIg1lbmQgaWYNZW5kIGlmDWVuZCBDbGllbnRTYW1wbGUNDQ0AAADSAAgB\nAADyAR8BBQHhoAUAAAAAAAEAAAAMAAAAEFNvcnQgRXZlbnRzIGJ5IE5hbWUAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGlja2luZyBoZXJlIGluZGljYXRlcyB3aGV0\naGVyIGV2ZW50cyBiZSBpbiB0aGUgYWN0dWFsIG9yZGVyIG9yIGluIGFscGhhYmV0aWNh\nbCBvcmRlciB3aGVuIGltcG9ydGluZyBhbiAnYWV0ZScuIg1lbmQgTW91c2VXaXRoaW4N\nAAI0AAkBgAE6AAMBTQBzoAUAAAAAAAEAAAAMAAAAEFNjcmlwdCBXcml0aW5nAABvbiBt\nb3VzZVVwDWlmIGhpbGl0ZSBvZiBjYXJkIGJ1dHRvbiBpZCA5IHRoZW4NcHV0ICJTY3Jp\ncHQiIGludG8gdGhpc1ZlcmINZWxzZQ1wdXQgIlNlbmQiIGludG8gdGhpc1ZlcmINZW5k\nIGlmDWdldCBzaG9ydCBuYW1lIG9mIGNhcmQgYnV0dG9uIGlkIDQxIG9mIGNhcmQgIlNl\nbmRBRSINcHV0IHRoaXNWZXJiIGludG8gZmlyc3Qgd29yZCBvZiBpdA1zZXQgbmFtZSBv\nZiBjYXJkIGJ1dHRvbiBpZCA0MSBvZiBjYXJkICJTZW5kQUUiIHRvIGl0DWdldCBzaG9y\ndCBuYW1lIG9mIGJrZ25kIGJ1dHRvbiBpZCA0NyBvZiBjYXJkIDEgb2YgYmtnbmQgIkV2\nZW50cyINcHV0IHRoaXNWZXJiIGludG8gZmlyc3Qgd29yZCBvZiBpdA1zZXQgbmFtZSBv\nZiBia2duZCBidXR0b24gaWQgNDcgb2YgY2FyZCAxIG9mIGJrZ25kICJFdmVudHMiIHRv\nIGl0DS0tcHV0IHRoaXNWZXJiIGludG8gd29yZCAxIG9mIHRoZSBuYW1lIG9mIGJrZ25k\nIGJ1dHRvbiBpZCA0NyBvZiBjYXJkIDEgb2YgYmtnbmQgIkV2ZW50cyINZW5kIG1vdXNl\nVXAAAAF0AAoBAAEaAJ8BLQD6gAYAAAAAAAEAAAAMAAAAEEFzc2VtYmxlcgAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gaW5kaWNhdGUgdGhhdCB0\naGUgY29uc3RhbnQgbmFtZXMgd2lsbCBiZSBpbiBhc3NlbWJsZXIuIg1lbmQgTW91c2VX\naXRoaW4NDWZ1bmN0aW9uIFNlcnZlclNhbXBsZSBjYXJkVHlwZQ1yZXR1cm4gIiINZW5k\nIFNlcnZlclNhbXBsZQ0NZnVuY3Rpb24gU2VydmVyQ29uc3QgbmFtZSxjb25zdCxjb21t\nZW50T3V0DXB1dCBuYW1lICYgIiBFUVUgIiAmIGNvbnN0IGludG8geA1pZiBjb21tZW50\nT3V0ID0gInRydWUiIHRoZW4NcHV0ICI7ICIgYmVmb3JlIHgNZW5kIGlmDXJldHVybiB4\nDWVuZCBTZXJ2ZXJDb25zdA0NAACUAAsCBQBoALYAeQElAAAAAAAA//8AFQAMAQAAEAAA\nb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSB0aW1lb3V0IHZhbHVl\nIHRvIGJlIHVzZWQgaW4gUEFTQ0FMIGNsaWVudCBzYW1wbGUgY29kZSBoZXJlLiINZW5k\nIE1vdXNlV2l0aGluDQA17AANAQABMwACAUMAQoAGAAAAAAABAAAADAAAABBQYXNjYWwA\nAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIHNob3cgdGhl\nIGV2ZW50IGFzIGl0IGlzIGNhbGxlZCBmcm9tIFBBU0NBTC4iDWVuZCBNb3VzZVdpdGhp\nbg0NZnVuY3Rpb24gQ2xpZW50VGVtcGxhdGUgbXVsdGlMaW5lDS0tIGVpdGhlciByZXR1\ncm4gdGhlIHRlbXBsYXRlIG9yIHdoaWNoIHBhcmFtZXRlciBpcyBiZWluZyBjbGlja2Vk\nDXB1dCBHbHVlSW5mbyhmaWVsZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8NcHV0\nICJGdW5jdGlvbiBBRSIgJiBTdHJpcFNQKGZpZWxkICJldmVudE5hbWUiKSAmICIoIiBp\nbnRvIHRlbXBsYXRlDXB1dCBudW1iZXIgb2YgbGluZXMgaW4gcGFyYW1JbmZvIGludG8g\nbg1wdXQgMCBpbnRvIHBhcmFtSW5kZXgNcmVwZWF0IHdpdGggaW5kZXggPSAxIHRvIG4N\nc2V0IGN1cnNvciB0byBidXN5DXB1dCBsaW5lIGluZGV4IG9mIHBhcmFtSW5mbyBpbnRv\nIHkNcHV0IGl0ZW0gNCBvZiB5IGludG8gcGFyYW1UeXBlDXB1dCAoaXRlbSA1IG9mIHkg\nPSAibyIpIGludG8gaXNPcHRpb25hbA1wdXQgKGl0ZW0gMyBvZiB5IDw+ICJudWxsIikg\naW50byB1c2VJdA1pZiB1c2VJdCB0aGVuDWFkZCAxIHRvIHBhcmFtSW5kZXgNaWYgdXNl\nSXQgdGhlbg1pZiBpbmRleCA9IDEgdGhlbg1wdXQgIlZBUiAiIGFmdGVyIHRlbXBsYXRl\nDXB1dCBmYWxzZSBpbnRvIGlzT3B0aW9uYWwNZWxzZQ1pZiBtdWx0aUxpbmUgPSAibXVs\ndGlMaW5lIiB0aGVuDXB1dCByZXR1cm4gJiBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbHNl\nDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZW5kIGlmDXB1dCBOYW1lT2ZE\nYXRhVHlwZShpdGVtIDMgb2YgeSkgaW50byBuYW1lTGlzdA1pZiBwYXJhbVR5cGUgPSAx\nIHRoZW4gLS0gaGFuZGxlDXB1dCBpdGVtIDEgb2YgeSAmICI6IiAmIGl0ZW0gMyBvZiBu\nYW1lTGlzdCAmICI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBwYXJhbVR5cGUgPSA1\nIHRoZW4gLS0gcHRyICsgc2l6ZQ1wdXQgaXRlbSA2IG9mIHkgJiAiOiIgJiBpdGVtIDIg\nb2YgbmFtZUxpc3QgJiAiOyAiIMINJiBpdGVtIDcgb2YgeSAmICI6IExPTkdJTlQ7ICIg\nYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBwYXJhbVR5cGUgPSA3IHRoZW4gLS0gY1N0cmlu\nZw1wdXQgaXRlbSA2IG9mIHkgJiAiOiIgJiBpdGVtIDIgb2YgbmFtZUxpc3QgJiAiOyAi\nIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgaXNPcHRpb25hbCB0aGVuIC0tIHVzZSBwb2lu\ndGVyIHRvIGRhdGENaWYgcGFyYW1UeXBlID0gNCB0aGVuIC0tIGZpeGVkIGxlbmd0aA1w\ndXQgaXRlbSAzIG9mIHkgaW50byBkYXRhVHlwZQ1pZiBkYXRhVHlwZSA9ICJlbnVtIiB0\naGVuIC0tIHNwZWNpYWwgZm9yIGVudW0NcHV0IGl0ZW0gMSBvZiB5ICYgIjpSZXNUeXBl\nOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgZGF0YVR5cGUgPSAidHJ1ZSIgdGhlbiAt\nLSBhbHNvIHNwZWNpYWwgZm9yIHRydWUNcHV0IGl0ZW0gMSBvZiB5ICYgIjpCb29sZWFu\nOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UNcHV0IGl0ZW0gNiBvZiB5ICYgIjoiICYgaXRl\nbSAyIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZWxzZQ1w\ndXQgaXRlbSA2IG9mIHkgJiAiOiIgYWZ0ZXIgdGVtcGxhdGUNaWYgKHBhcmFtVHlwZSA9\nIDApIHRoZW4NcHV0ICJBRURlc2NQdHI7ICIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSAtLSA2\nLCBQU3RyaW5nDXB1dCAiU3RyaW5nUHRyOyAiIGFmdGVyIHRlbXBsYXRlDWVuZCBpZg1l\nbmQgaWYNZWxzZSAtLSByZXF1aXJlZA1wdXQgaXRlbSAxIG9mIHkgJiAiOiIgYWZ0ZXIg\ndGVtcGxhdGUNaWYgKHBhcmFtVHlwZSA9IDApIHRoZW4gLS0gQUVEZXNjDXB1dCAiQUVE\nZXNjOyAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNCB0aGVuIC0t\nIGZpeGVkIGxlbmd0aA1wdXQgaXRlbSAxIG9mIG5hbWVMaXN0ICYgIjsgIiBhZnRlciB0\nZW1wbGF0ZQ1lbHNlIC0tIHN0cjI1NQ1wdXQgIlN0cjI1NTsgIiBhZnRlciB0ZW1wbGF0\nZQ1lbmQgaWYNZW5kIGlmDWVuZCBpZiAtLSB1c2VJdA1lbmQgaWYgLS0gdXNlSXQNZW5k\nIHJlcGVhdA1EZWxldGUgbGFzdCBjaGFyIG9mIHRlbXBsYXRlIC0tIHNwYWNlIG9yICgN\naWYgcGFyYW1JbmRleCA+IDAgdGhlbg1wdXQgIikiIGludG8gbGFzdCBjaGFyIG9mIHRl\nbXBsYXRlIC0tIHJlcGxhY2UgOw1lbmQgaWYNcHV0ICI6T1NFcnI7IiBhZnRlciB0ZW1w\nbGF0ZQ1yZXR1cm4gdGVtcGxhdGUNZW5kIENsaWVudFRlbXBsYXRlDQ1mdW5jdGlvbiBD\nbGllbnRTYW1wbGUgY2FyZFR5cGUNZ2xvYmFsIGRlZmF1bHRUYXJnZXREZXNjLCBkZWZh\ndWx0VGltZU91dCwgZGVmYXVsdElkbGVQcm9jLCBkZWZhdWx0QUVGaWx0ZXIsIGRlZmF1\nbHRTZW5kTW9kZSwgZGVmYXVsdFRhcmdldA1pZiBjYXJkVHlwZSA9ICJpbml0IiB0aGVu\nDXB1dCAiUFJPQ0VEVVJFIElnbm9yZU9TRXJyKGVycjpPU0Vycik7IElOTElORSAkNTQ4\nRjsgeyBhZGRxICMyLHNwIH0gIiAmIHJldHVybiAmIHJldHVybiBpbnRvIHJzdA1pZiBk\nZWZhdWx0VGFyZ2V0RGVzYyBpcyBlbXB0eSBvciBkZWZhdWx0VGFyZ2V0RGVzYyA9ICJz\nZWxmIiB0aGVuDWlmIGRlZmF1bHRUYXJnZXREZXNjIGlzIGVtcHR5IHRoZW4NcHV0ICJ0\nYXJnZXREZXNjIiBpbnRvIGRlZmF1bHRUYXJnZXREZXNjDWVuZCBpZg1wdXQgIlBST0NF\nRFVSRSBUYXJnZXRJbml0OyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBUYWIgJiBUYWIg\naW50byB0d29UYWINcHV0IFRhYiAmIHR3b1RhYiBpbnRvIHRocmVlVGFiDXB1dCBUYWIg\nJiB0aHJlZVRhYiBpbnRvIGZvdXJUYWINaWYgZGVmYXVsdFRhcmdldCA9ICJzZWxmIiB0\naGVuDS0tIHNlbmQgdG8gc2VsZg1wdXQgVGFiICYgIlZBUiBteVBTTjogUHJvY2Vzc1Nl\ncmlhbE51bWJlcjsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgVGFiICYgIkJFR0lOIiAm\nIHJldHVybiBhZnRlciByc3QNcHV0IFRhYiAmICJXSVRIIG15UFNOIERPIiAmIHJldHVy\nbiBhZnRlciByc3QNcHV0IHR3b1RhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcnN0\nDXB1dCB0d29UYWIgJiAiaGlnaExvbmdPZlBTTiA6PSAwOyIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DXB1dCB0d29UYWIgJiAibG93TG9uZ09mUFNOIDo9IGtDdXJyZW50UHJvY2Vzczsi\nICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgdHdvVGFiICYgIkVORDsiICYgcmV0dXJuIGFm\ndGVyIHJzdA1wdXQgVGFiICYgIklnbm9yZU9TRXJyKEFFQ3JlYXRlRGVzYyhUeXBlUHJv\nY2Vzc1NlcmlhbE51bWJlciwgQG15UFNOLCBTaXplT2YoUHJvY2Vzc1NlcmlhbE51bWJl\nciksIHRhcmdldERlc2MpKTsiICYgcmV0dXJuIGFmdGVyIHJzdA1lbHNlIGlmIGRlZmF1\nbHRUYXJnZXQgPD4gIiIgdGhlbg0tLSBzZW5kIHRvIHRhcmdldCBuYW1lDXB1dCBUYWIg\nJiAiVkFSIHRhcmdldE5hbWU6IFN0cjI1NTsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQg\nVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciByc3QNcHV0IFRhYiAmICJ0YXJnZXRO\nYW1lIDo9ICciICYgZGVmYXVsdFRhcmdldCAmICInOyIgJiByZXR1cm4gYWZ0ZXIgcnN0\nDXB1dCBUYWIgJiAiSWdub3JlT1NFcnIoQUVDb2VyY2VQdHIoVHlwZUNoYXIsIEB0YXJn\nZXROYW1lWzFdLCAiICYgTGVuZ3RoKGRlZmF1bHRUYXJnZXQpICYgIiwgdHlwZVRhcmdl\ndElELCB0YXJnZXREZXNjKSk7IiAmIHJldHVybiBhZnRlciByc3QNZWxzZQ0tLSB1c2Ug\nUFBDIEJyb3dzZXINcHV0IFRhYiAmICJWQVIiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQg\ndHdvVGFiICYgInRoZUxvY2F0aW9uOiBMb2NhdGlvbk5hbWVSZWM7IiAmIHJldHVybiBh\nZnRlciByc3QNcHV0IHR3b1RhYiAmICJ0aGVQb3J0SW5mbzogUG9ydEluZm9SZWM7IiAm\nIHJldHVybiBhZnRlciByc3QNcHV0IHR3b1RhYiAmICJhVGFyZ2V0SUQ6IFRhcmdldElE\nOyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBUYWIgJiAiQkVHSU4iICYgcmV0dXJuIGFm\ndGVyIHJzdA1wdXQgVGFiICYgIklGIFBQQ0Jyb3dzZXIoJycsICcnLCBGQUxTRSwgdGhl\nTG9jYXRpb24sIHRoZVBvcnRJbmZvLCBOSUwsICcnKSA9IE5vRXJyIFRIRU4iICYgcmV0\ndXJuIGFmdGVyIHJzdA1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBy\nc3QNcHV0IHR3b1RhYiAmICJXSVRIIGFUYXJnZXRJRCBETyIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DXB1dCB0aHJlZVRhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCB0\naHJlZVRhYiAmICJsb2NhdGlvbiA6PSB0aGVMb2NhdGlvbjsiICYgcmV0dXJuIGFmdGVy\nIHJzdA1wdXQgdGhyZWVUYWIgJiAibmFtZSA6PSB0aGVQb3J0SW5mby5uYW1lOyIgJiBy\nZXR1cm4gYWZ0ZXIgcnN0DXB1dCB0aHJlZVRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRl\nciByc3QNcHV0IHR3b1RhYiAmICJJZ25vcmVPU0VycihBRUNyZWF0ZURlc2ModHlwZVRh\ncmdldElELCBAYVRhcmdldElELCBTaXplT2YodGFyZ2V0SUQpLCB0YXJnZXREZXNjKSk7\nIiAmIHJldHVybiBhZnRlciByc3QNcHV0IHR3b1RhYiAmICJFTkQ7IiAmIHJldHVybiBh\nZnRlciByc3QNZW5kIGlmDXB1dCBUYWIgJiAiRU5EOyIgJiByZXR1cm4gJiByZXR1cm4g\nYWZ0ZXIgcnN0DWVuZCBpZg1pZiBkZWZhdWx0SWRsZVByb2MgaXMgZW1wdHkgdGhlbg1w\ndXQgIk5JTCIgaW50byBkZWZhdWx0SWRsZVByb2MNZWxzZQ1wdXQgIkAiIGJlZm9yZSBk\nZWZhdWx0SWRsZVByb2MNZW5kIGlmDWlmIGRlZmF1bHRBRUZpbHRlciBpcyBlbXB0eSB0\naGVuDXB1dCAiTklMIiBpbnRvIGRlZmF1bHRBRUZpbHRlcg1lbHNlDXB1dCAiQCIgYmVm\nb3JlIGRlZmF1bHRBRUZpbHRlcg1lbmQgaWYNaWYgZGVmYXVsdFRpbWVPdXQgaXMgZW1w\ndHkgdGhlbg1wdXQgImtBRURlZmF1bHRUaW1lT3V0IiBpbnRvIGRlZmF1bHRUaW1lT3V0\nDWVuZCBpZg1yZXR1cm4gcnN0DWVsc2UgaWYgY2FyZFR5cGUgPSAiZXZlbnQiIHRoZW4N\ncHV0IENsaWVudFRlbXBsYXRlKCkgJiByZXR1cm4gJiByZXR1cm4gaW50byBwcm9jSGVh\nZGVyDXB1dCBHbHVlSW5mbyhmaWVsZCAicGFyYW1JbmZvIikgaW50byBwYXJhbUluZm8N\ncHV0IG51bWJlciBvZiBsaW5lcyBvZiBwYXJhbUluZm8gaW50byBjb3VudA1wdXQgIkFF\nIiAmIFN0cmlwU1AoZmllbGQgIkV2ZW50TmFtZSIpIGludG8gcHJvY05hbWUNcHV0IChp\ndGVtIDMgb2YgcGFyYW1JbmZvIDw+ICJudWxsIikgaW50byBpc0Z1bmMNcHV0IHRhYiAm\nIHRhYiBpbnRvIHR3b1RhYg1wdXQgdGFiICYgdHdvVGFiIGludG8gdGhyZWVUYWINcHV0\nICJ0aGVBcHBsZUV2ZW50IDogQXBwbGVFdmVudDsiICYgcmV0dXJuIGFmdGVyIHZhckRl\nY2xhcmUNcHV0ICJ0aGVSZXBseSA6IEFwcGxlRXZlbnQ7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBUYWIgJiAiUFJPQ0VEVVJFIENsZWFuVXA7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgdHdvVGFiICYgIklnbm9yZU9TRXJyKEFFRGlzcG9zZURlc2ModGhl\nQXBwbGVFdmVudCkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAm\nICJJZ25vcmVPU0VycihBRURpc3Bvc2VEZXNjKHRoZVJlcGx5KSk7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORDsiICYgcmV0dXJuICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAiUFJPQ0VEVVJFIEZhaWxFcnIoZXJyOk9T\nRXJyKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiQkVHSU4i\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiSUYgZXJyIDw+IE5P\nRXJyIFRIRU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0aHJlZVRhYiAmICJC\nRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHRocmVlVGFiICYgcHJvY05h\nbWUgJiAiIDo9IGVycjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0aHJlZVRh\nYiAmICJDbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHRocmVlVGFi\nICYgIkV4aXQoIiAmIHByb2NOYW1lICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1wdXQgdGhyZWVUYWIgJiAiRU5EOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIHR3b1RhYiAmICJFTkQ7IiAmIHJldHVybiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1w\ndXQgVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYg\nInRoZUFwcGxlRXZlbnQuZGF0YUhhbmRsZSA6PSBOSUw7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgVGFiICYgInRoZVJlcGx5LmRhdGFIYW5kbGUgOj0gTklMOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJGYWlsRXJyKEFFQ3JlYXRlQXBw\nbGVFdmVudCgnIiAmIFJlc1R5cGUoZmllbGQgIkV2ZW50Q2xhc3MiKSDCDSYgIicsICci\nICYgUmVzVHlwZShmaWVsZCAiRXZlbnRJRCIpICYgIicsICIgJiBkZWZhdWx0VGFyZ2V0\nRGVzYyDCDSYgIiwga0F1dG9HZW5lcmF0ZVJldHVybklELCBrQW55VHJhbnNhY3Rpb25J\nRCwgdGhlQXBwbGVFdmVudCkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcmVwZWF0\nIHdpdGggcGFyYW1JbmRleCA9IDIgdG8gY291bnQNcHV0IGxpbmUgcGFyYW1JbmRleCBv\nZiBwYXJhbUluZm8gaW50byB4DWlmIGl0ZW0gMyBvZiB4IDw+ICJudWxsIiB0aGVuDXB1\ndCBpdGVtIDQgb2YgeCBpbnRvIHBhcmFtVHlwZQ1wdXQgKGl0ZW0gNSBvZiB4ID0gIm8i\nKSBpbnRvIGlzT3B0aW9uYWwNcHV0IE5hbWVPZkRhdGFUeXBlKGl0ZW0gMyBvZiB4KSBp\nbnRvIG5hbWVMaXN0DWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgdHdvVGFiIGludG8gaW5k\nZW50DWVsc2UNcHV0IFRhYiBpbnRvIGluZGVudA1lbmQgaWYNcHV0IFN0cmlwU3AoaXRl\nbSAxIG9mIHgpIGludG8gdGhpc05hbWUNaWYgKHBhcmFtVHlwZSA9IDApIG9yIChwYXJh\nbVR5cGUgPSAyKSB0aGVuIC0tIEFFRGVzYw1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRh\nYiAmICJJRiAiICYgaXRlbSA2IG9mIHggJiAiIDw+IE5JTCBUSEVOIiAmIHJldHVybiBp\nbnRvIHRlbXANcHV0IHRlbXAgYWZ0ZXIgcHJvY0JvZHkNLS1JRiBwYXJhbVR5cGUgPSAy\nIHRoZW4NLS0gIHB1dCBUYWIgJiB0ZW1wIGJlZm9yZSBsaW5lIDUgb2YgcHJvY0JvZHkN\nLS1lbmQgaWYNcHV0IGluZGVudCAmICJGYWlsRXJyKEFFUHV0S2V5RGVzYyh0aGVBcHBs\nZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCAmICIsIiAmIGl0ZW0gNiBvZiB4ICYgIl4pKTsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0taWYgcGFyYW1UeXBlID0gMiB0aGVuDS0t\nICBwdXQgdGhyZWVUYWIgJiAiSWdub3JlT1NFcnIoQUVEaXNwb3NlRGVzYygiICYgaXRl\nbSA2IG9mIHggJiAiXikpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNiBvZiBwcm9jQm9k\neQ0tLWVuZCBpZg1lbHNlDXB1dCBpbmRlbnQgJiAiRmFpbEVycihBRVB1dEtleURlc2Mo\ndGhlQXBwbGVFdmVudCwiICYgaXRlbSAyIG9mIHggJiAiLCIgJiBpdGVtIDEgb2YgeCAm\nICIpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0taWYgcGFyYW1UeXBlID0gMiB0\naGVuDS0tICBwdXQgVHdvVGFiICYgIklnbm9yZU9TRXJyKEFFRGlzcG9zZURlc2MoIiAm\nIGl0ZW0gMSBvZiB4ICYgIikpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNSBvZiBwcm9j\nQm9keQ0tLWVuZCBpZg1lbmQgaWYNZWxzZSBpZiAocGFyYW1UeXBlID0gMSkgb3IgKHBh\ncmFtVHlwZSA9IDMpIHRoZW4gLS0gaGFuZGxlDXB1dCAiZGVzY0ZvciIgJiBTdHJpcFNw\nKGl0ZW0gMSBvZiB4KSBpbnRvIGRlc2NGb3JUaGlzTmFtZQ1pZiBpc09wdGlvbmFsIHRo\nZW4NcHV0IFRhYiAmICJJRiAiICYgaXRlbSAxIG9mIHggJiAiIDw+IE5JTCBUSEVOIiAm\nIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgaW5kZW50ICYgIkJFR0lOIiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNcHV0IGRlc2NGb3JUaGlzTmFtZSAmICIgOiBB\nRURlc2M7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1dCBpbmRlbnQgJiAiV0lU\nSCIgJiYgZGVzY0ZvclRoaXNOYW1lICYmICJETyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IGluZGVudCAmIHRhYiAmICJCRUdJTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IGluZGVudCAmIHRhYiAmICJkZXNjcmlwdG9yVHlwZSA6PSAiICYgaXRlbSA0\nIG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIGl0ZW0g\nMyBvZiBuYW1lTGlzdCA9ICJIYW5kbGUiIHRoZW4NcHV0IGluZGVudCAmIHRhYiAmICJk\nYXRhSGFuZGxlIDo9ICIgJiBpdGVtIDEgb2YgeCAmICI7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1lbHNlDXB1dCBpbmRlbnQgJiB0YWIgJiAiZGF0YUhhbmRsZSA6PSBIYW5k\nbGUoIiAmIGl0ZW0gMSBvZiB4ICYgIik7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1l\nbmQgaWYNcHV0IGluZGVudCAmIHRhYiAmICJFTkQ7IiAmIHJldHVybiBhZnRlciBwcm9j\nQm9keQ1wdXQgaW5kZW50ICYgIkZhaWxFcnIoQUVQdXRLZXlEZXNjKHRoZUFwcGxlRXZl\nbnQsIiAmIGl0ZW0gMiBvZiB4ICYgIiwiICYgZGVzY0ZvclRoaXNOYW1lICYgIikpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBpbmRl\nbnQgJiAiRU5EOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDS0taWYgcGFy\nYW1UeXBlID0gMyB0aGVuDS0tICBpZiBpdGVtIDMgb2YgbmFtZUxpc3QgPSAiSGFuZGxl\nIiB0aGVuDS0tICAgIHB1dCB0d29UYWIgJiAiRGlzcG9zSGFuZGxlKCIgJiBpdGVtIDEg\nb2YgeCAmICIpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNSBvZiBwcm9jQm9keQ0tLSAg\nZWxzZQ0tLSAgICBwdXQgdHdvVGFiICYgIkRpc3Bvc0hhbmRsZShIYW5kbGUoIiAmIGl0\nZW0gMSBvZiB4ICYgIikpOyIgJiByZXR1cm4gYmVmb3JlIGxpbmUgNSBvZiBwcm9jQm9k\neQ0tLSAgZW5kIGlmDS0tICBpZiBpc09wdGlvbmFsIHRoZW4NLS0gICAgcHV0IHR3b1Rh\nYiAmICJJRiAiICYgaXRlbSA2IG9mIHggJiAiIDw+IE5JTCBUSEVOIiAmIHJldHVybiAm\nIHRhYiBiZWZvcmUgbGluZSA1IG9mIHByb2NCb2R5DS0tICBlbmQgaWYNLS1lbmQgaWYN\nZWxzZSBpZiBwYXJhbVR5cGUgPSA0IHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDWlmIGl0\nZW0gMyBvZiB4ID0gImVudW0iIHRoZW4NcHV0IFRhYiAmICJJRiBMT05HSU5UKCIgJiBp\ndGVtIDEgb2YgeCAmICIpIDw+IDAgVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IHR3b1RhYiAmICJGYWlsRXJyKEFFUHV0S2V5UHRyKHRoZUFwcGxlRXZlbnQsICIg\nJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIEAi\nICYgaXRlbSAxIG9mIHggJiAiLCBTaXplT2YoIiDCDSYgaXRlbSAxIG9mIG5hbWVMaXN0\nICYgIikpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgaXRlbSAzIG9m\nIHggPSAidHJ1ZSIgdGhlbg1wdXQgVGFiICYgIklGICIgJiBpdGVtIDEgb2YgeCAmICIg\nVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAmICJGYWlsRXJy\nKEFFUHV0S2V5UHRyKHRoZUFwcGxlRXZlbnQsICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwg\ndHlwZVRydWUsIE5JTCwgMCkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1w\ndXQgVGFiICYgIklGICIgJiBpdGVtIDYgb2YgeCAmICIgPD4gTklMIFRIRU4iICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiRmFpbEVycihBRVB1dEtleVB0\ncih0aGVBcHBsZUV2ZW50LCAiICYgaXRlbSAyIG9mIHggwg0mICIsICIgJiBpdGVtIDQg\nb2YgbmFtZUxpc3QgJiAiLCBQdHIoIiAmIGl0ZW0gNiBvZiB4ICYgIiksIFNpemVPZigi\nIMINJiBpdGVtIDEgb2YgbmFtZUxpc3QgJiAiKSkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJv\nY0JvZHkNZW5kIGlmDWVsc2UgIC0tIHJlcXVpcmVkDXB1dCBUYWIgJiAiRmFpbEVycihB\nRVB1dEtleVB0cih0aGVBcHBsZUV2ZW50LCAiICYgaXRlbSAyIG9mIHggwg0mICIsICIg\nJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCBAIiAmIGl0ZW0gMSBvZiB4ICYgIiwgU2l6\nZU9mKCIgwg0mIGl0ZW0gMSBvZiBuYW1lTGlzdCAmICIpKSk7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbmQgaWYNZWxzZSBpZiAocGFyYW1UeXBlID0gNSkgb3IgKHBhcmFt\nVHlwZSA9IDcpIHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBUYWIgJiAiSUYgIiAm\nIGl0ZW0gNiBvZiB4ICYgIiA8PiBOSUwgVEhFTiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNZW5kIGlmDXB1dCBpbmRlbnQgJiAiRmFpbEVycihBRVB1dEtleVB0cih0aGVBcHBs\nZUV2ZW50LCAiICYgaXRlbSAyIG9mIHggwg0mICIsICIgJiBpdGVtIDQgb2YgbmFtZUxp\nc3QgJiAiLCBQdHIoIiAmIGl0ZW0gNiBvZiB4ICYgIiksICIgYWZ0ZXIgcHJvY0JvZHkN\naWYgKHBhcmFtVHlwZSA9IDUpIHRoZW4gLS0gc2l6ZSBpcyB0aGUgcGFyYW1ldGVyDXB1\ndCBpdGVtIDcgb2YgeCAmICIpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UN\ncHV0ICJzdHJsZW4oUHRyKCIgJiBpdGVtIDYgb2YgeCAmICIpKSkpOyIgJiByZXR1cm4g\nYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVsc2UgaWYgcGFyYW1UeXBlID0gNiB0aGVuDWlm\nIGlzT3B0aW9uYWwgdGhlbg1wdXQgVGFiICYgIklGICIgJiBpdGVtIDYgb2YgeCAmICIg\nPD4gTklMIFRIRU4iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCAiUHRyKG9yZCgi\nICYgaXRlbSA2IG9mIHggJiAiKSsxKSIgaW50byBkYXRhQWRkcg1wdXQgaXRlbSA2IG9m\nIHggJiAiXiIgaW50byBkYXRhSXRlbQ1lbHNlICAtLSByZXF1aXJlZA1wdXQgIkAiICYg\naXRlbSAxIG9mIHggJiAiWzFdIiBpbnRvIGRhdGFBZGRyDXB1dCBpdGVtIDEgb2YgeCBp\nbnRvIGRhdGFJdGVtDWVuZCBpZg1wdXQgaW5kZW50ICYgIkZhaWxFcnIoQUVQdXRLZXlQ\ndHIodGhlQXBwbGVFdmVudCwgIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCAiICYgaXRlbSA0\nIG9mIG5hbWVMaXN0ICYgIiwgIiAmIGRhdGFBZGRyICYgIiwgTGVuZ3RoKCIgwg0mIGRh\ndGFJdGVtICYgIikpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1lbmQg\naWYgLS0gbm90IG51bGwNZW5kIHJlcGVhdA1wdXQgdGFiICYgIkZhaWxFcnIoQUVTZW5k\nKHRoZUFwcGxlRXZlbnQsIHRoZVJlcGx5LCAiIGFmdGVyIHByb2NCb2R5DWlmIGlzRnVu\nYyB0aGVuDXB1dCBrQUVXYWl0UmVwbHkgYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1wdXQga0FF\nTm9SZXBseSBhZnRlciBwcm9jQm9keQ1lbmQgaWYNaWYgZGVmYXVsdFNlbmRNb2RlIGlz\nIG5vdCBlbXB0eSB0aGVuIHB1dCAiKyIgJiBkZWZhdWx0U2VuZE1vZGUgYWZ0ZXIgcHJv\nY0JvZHkNcHV0ICIsIGtBRU5vcm1hbFByaW9yaXR5LCAiICYgZGVmYXVsdFRpbWVPdXQg\nJiAiLCIgJiYgZGVmYXVsdElkbGVQcm9jICYmICIsIiDCDSYgZGVmYXVsdEFFRmlsdGVy\nICYgIikpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNaWYgaXNGdW5jIHRoZW4NcHV0\nICJ0aGVFcnJuIDogTE9OR0lOVDsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nICJ0eXBlQ29kZSA6IERlc2NUeXBlOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1w\ndXQgImFjdHVhbFNpemUgOiBMT05HSU5UOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFy\nZQ1wdXQgdGFiICYgIklGIEFFR2V0S2V5UHRyKHRoZVJlcGx5LCAnZXJybicsIHR5cGVM\nb25nSW50ZWdlciwgdHlwZUNvZGUsIiDCDSYmICJAdGhlRXJybiwgU2l6ZU9mKHRoZUVy\ncm4pLCBhY3R1YWxTSXplKSA8PiBlcnJBRURlc2NOb3RGb3VuZCBUSEVOIiAmIHJldHVy\nbiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkJFR0lOIiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgInsgeW91ciBlcnJvciBoYW5kbGluZyBjb2Rl\nIGhlcmV9IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgIkVORDsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0tIGdldCB0aGUgcmVzdWx0DXB1dCBpdGVt\nIDQgb2YgcGFyYW1JbmZvIGludG8gcGFyYW1UeXBlDXB1dCBOYW1lT2ZEYXRhVHlwZShp\ndGVtIDMgb2YgcGFyYW1JbmZvKSBpbnRvIG5hbWVMaXN0DWlmIHBhcmFtVHlwZSA9IDAg\ndGhlbiAtLSByZXN1bHQgaXMgQUVEZXNjDXB1dCB0YWIgJiAiRmFpbEVycihBRUdldEtl\neURlc2ModGhlQXBwbGVFdmVudCwga2V5RGlyZWN0T2JqZWN0LCAiIMINJiBpdGVtIDQg\nb2YgbmFtZUxpc3QgJiAiLCB0aGVSZXN1bHQpKTsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DWVsc2UgaWYgKHBhcmFtVHlwZSA9IDEpIG9yIChwYXJhbVR5cGUgPSA1KSB0aGVu\nIC0tIHJlc3VsdCBpcyBIYW5kbGUNcHV0ICJhRGVzYyA6IEFFRGVzYzsiICYgcmV0dXJu\nIGFmdGVyIHZhckRlY2xhcmUNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5RGVzYyh0\naGVBcHBsZUV2ZW50LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1l\nTGlzdCAmICIsIGFEZXNjKSk7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1pZiBpdGVt\nIDMgb2YgbmFtZUxpc3QgPSAiSGFuZGxlIiB0aGVuDXB1dCBUYWIgJiAidGhlUmVzdWx0\nIDo9IGFEZXNjLmRhdGFIYW5kbGU7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbHNl\nDXB1dCBUYWIgJiAidGhlUmVzdWx0IDo9ICIgJiBpdGVtIDMgb2YgbmFtZUxpc3QgJiAi\nKGFEZXNjLmRhdGFIYW5kbGUpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlm\nDWVsc2UgaWYgcGFyYW1UeXBlID0gNCB0aGVuIC0tIHJlc3VsdCBpcyBmaXhlZCBsZW5n\ndGgNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRyKHRoZVJlcGx5LCBrZXlEaXJl\nY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIHR5cGVDb2RlLCBA\ndGhlUmVzdWx0LCBTaXplT2YodGhlUmVzdWx0KSIgwg0mICIsIGFjdHVhbFNpemUpKTsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgcGFyYW1UeXBlID0gNiB0aGVu\nIC0tIHJlc3VsdCBpcyBzdHIyNTUNcHV0IFRhYiAmICJGYWlsRXJyKEFFR2V0S2V5UHRy\nKHRoZVJlcGx5LCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlz\ndCAmICIsIHR5cGVDb2RlLCBAdGhlUmVzdWx0WzFdLCBTaXplT2YodGhlUmVzdWx0KS0x\nIiDCDSYgIiwgYWN0dWFsU2l6ZSkpOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIFRhYiAmICJJRiBhY3R1YWxTaXplID49IFNpemVPZih0aGVSZXN1bHQpIFRIRU4iICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiYWN0dWFsU2l6ZSA6PSBT\naXplT2YodGhlUmVzdWx0KSAtIDE7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\nVGFiICYgInRoZVJlc3VsdFswXSA6PSBjaHIoYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBh\nZnRlciBwcm9jQm9keQ1lbmQgaWYNZW5kIGlmDXB1dCB0YWIgJiAiQ2xlYW5VcDsiICYg\ncmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0YWIgJiBwcm9jTmFtZSAmICIgOj0gTm9F\ncnI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdGFiICYgIkVORDsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DWlmIHZhckRlY2xhcmUgPD4gIiIgdGhlbg1wdXQgdGFi\nICYgIlZBUiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1yZXBlYXQgd2l0aCBpID0g\nMSB0byBudW1iZXIgb2YgbGluZXMgaW4gdmFyRGVjbGFyZQ1wdXQgdHdvVGFiICYgbGlu\nZSBpIG9mIHZhckRlY2xhcmUgJiByZXR1cm4gYWZ0ZXIgcHJvY0hlYWRlcg1lbmQgcmVw\nZWF0DWVuZCBpZg1yZXR1cm4gcHJvY0hlYWRlciAmIHJldHVybiAmIHByb2NCb2R5ICYg\ncmV0dXJuDWVsc2UNcmV0dXJuICIiDWVuZCBpZg1FbmQgQ2xpZW50U2FtcGxlDQ0AARAA\nDwEAAPIAAgECAJngBQAAAAAAAQAAAAwAAAAQSGFzIEdsdWUgU3Vicm91dGluZQAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNlcnRhaW4gbGFuZ3VhZ2VzIGhhdmUgYSBw\ncmltaXRpdmUgdG8gc2VuZCBBcHBsZSBFdmVudHMsIiDCDSYmICJidXQgdGhlcmUgbWF5\nIGFsc28gYmUgYSBnbHVlIHJvdXRpbmUgb24gdG9wIG9mIHRoZSBwcmltaXRpdmUuIiDC\nDSYmICJDbGljayB0aGlzIGJveCB0byB1c2UgdGhlIGdsdWUgcm91dGluZS4iDWVuZCBN\nb3VzZVdpdGhpbg0NAAAAtAAQAgUAVAC7AGUBJQAAAAAAAP//ABUADAEAABAAAG9uIE1v\ndXNlV2l0aGluDVNob3dCYWxsb29uICJDbGljayB0byBzZXQgdGhlIHJlc291cmNlIHR5\ncGUgdG8gYmUgd3JpdHRlbiBvdXQgYXMgJ2FldGUnIG9yICdhZXV0Jy4gTm9ybWFsbHkg\naXQgc2hvdWxkIGJlICdhZXRlJy4iDWVuZCBNb3VzZVdpdGhpbg0NAAADCgASAQAANgAK\nAEsAgYAAAAAAAAABABUADAEAABBUYXJnZXQgQXBwbGljYXRpb24AAC0tIG9uIE1vdXNl\nV2l0aGluDS0tIFNob3dCYWxsb29uICJDbGljayBoZXJlIHRvIGNob29zZSB0aGUgbmFt\nZSBvZiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHRvIGJlIHVzZWQgaW4gUEFTQ0FMIGNs\naWVudCBzYW1wbGUgY29kZS4iDS0tIGVuZCBNb3VzZVdpdGhpbg0NLS0gb24gbW91c2VV\ncA0tLSBpZiB0aGUgc3lzdGVtVmVyc2lvbiA8IDcgdGhlbg0tLSBhbnN3ZXIgIlRoaXMg\nZmVhdHVyZSByZXF1aXJlcyBTeXN0ZW0gNy4wIG9yIGxhdGVyLiINLS0gZXhpdCBtb3Vz\nZVVwDS0tIGVuZCBpZg0tLSBpZiB0aGUgdmVyc2lvbiA8IDIuMSB0aGVuDS0tIGFuc3dl\nciAiVGhpcyBmZWF0dXJlIHJlcXVpcmVzIEh5cGVyQ2FyZCAyLjEgb3IgbGF0ZXIuIg0t\nLSBlbmQgaWYNLS0gYW5zd2VyIHByb2dyYW0gIkNob29zZSBhbiBvcGVuIHByb2dyYW0g\ndG8gc2VuZCB0bzoiDS0tIGlmIGl0IDw+ICIiIHRoZW4NLS0gU2V0IHRoZSBpdGVtRGVs\naW1pdGVyIHRvICI6Ig0tLSBwdXQgaXQgaW50byB4DS0tIGRlbGV0ZSBsYXN0IGl0ZW0g\nb2YgeA0tLSBwdXQgdGhlIGFkZHJlc3MgaW50byB5DS0tIGRlbGV0ZSBsYXN0IGl0ZW0g\nb2YgeQ0tLSBpZiB4ID0geSB0aGVuDS0tIGRlbGV0ZSBpdGVtIDEgdG8gMiBvZiBpdA0t\nLSBlbmQgaWYNLS0gU2V0IHRoZSBpdGVtRGVsaW1pdGVyIHRvICIsIg0tLSBwdXQgaXQg\naW50byBjYXJkIGZpZWxkICJzZW5kVGFyZ2V0Ig0tLSBlbmQgaWYNLS0gZW5kIG1vdXNl\nVXAAALoAFAIFAHwAyQCNASUAAAAAAAD//wAVAAwBAAAQAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiRW50ZXIgdGhlIHNlbmQgbW9kZSAob3RoZXIgdGhhbiB3YWl0UmVw\nbHkvbm9SZXBseS9xdWV1ZVJlcGx5KSB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQg\nc2FtcGxlIGNvZGUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0AAJgAFQIFAJAA3gChASUA\nAAAAAAD//wAVAAwBAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiRW50ZXIg\ndGhlIG5hbWUgb2YgaWRsZSBwcm9jIHRvIGJlIHVzZWQgaW4gUEFTQ0FMIGNsaWVudCBz\nYW1wbGUgY29kZSBoZXJlLiINZW5kIE1vdXNlV2l0aGluDQAAqAAWAgUApADeALUBJQAA\nAAAAAP//ABUADAEAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJFbnRlciB0\naGUgbmFtZSBvZiB0aGUgZXZlbnQgZmlsdGVyIGZ1bmN0aW9uIHRvIGJlIHVzZWQgaW4g\nUEFTQ0FMIGNsaWVudCBzYW1wbGUgY29kZSBoZXJlLiINZW5kIE1vdXNlV2l0aGluDQAA\n1AAaAQABBgEfARkB/aAFAAAAAAABAAAADAAAABBBdXRvIEdlbmVyYXRlIFBhcmFtZXRl\nciBUeXBlAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2tpbmcgaGVyZSBp\nbmRpY2F0ZXMgd2hldGhlciBkYXRhIHR5cGVzIGZvciB1c2UgaW4gUEFTQ0FMIHBhcmFt\nZXRlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCBnZW5lcmF0ZWQuIg1lbmQgTW91c2VX\naXRoaW4NAACiABsCBQC4AKoAyQElAAAAAAAA//8AFQAMAQAAEAAAb24gTW91c2VXaXRo\naW4NU2hvd0JhbGxvb24gIkVudGVydCB0aGUgbmFtZSBvZiB0YXJnZXQgZGVzY3JpcHRv\nciB0byBiZSB1c2VkIGluIFBBU0NBTCBjbGllbnQgc2FtcGxlIGNvZGUgaGVyZS4iDWVu\nZCBNb3VzZVdpdGhpbg0AAAAoAB0BgAEhAAMBNABP4AUAAAAAAAEAAAAMAAAAEFZlcmJv\nc2UAAAABMAAhAQAAVAEkAGMBWuAGAAAAAAABAAAADAAAABBhZXRlAABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBzZXQgdGhlIHJlc291cmNlIHR5\ncGUgdG8gYmUgd3JpdHRlbiBvdXQgYXMgJ2FldGUnLiBUaGlzIGlzIHdoYXQgaXMgbm9y\nbWFsbHkgdGhpcyBzaG91bGQgYmUuIg1lbmQgTW91c2VXaXRoaW4NDW9uIG1vdXNlVXAN\nc2V0IHRoZSBoaWxpdGUgb2YgY2QgYnRuICJhZXV0IiB0byBmYWxzZQ1wdXQgdGhlIHNo\nb3J0IG5hbWUgb2YgbWUgaW50byBjZCBmbGQgInJlc291cmNlVHlwZSINZW5kIG1vdXNl\nVXAAASgAIgEAAFQBYABjAZagBgAAAAAAAQAAAAwAAAAQYWV1dAAAb24gTW91c2VXaXRo\naW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gc2V0IHRoZSByZXNvdXJjZSB0eXBl\nIHRvIGJlIHdyaXR0ZW4gb3V0IGFzICdhZXRlJy4gTm9ybWFsbHkgdGhpcyBzaG91bGQg\nYmUgJ2FldGUnLiINZW5kIE1vdXNlV2l0aGluDQ1vbiBtb3VzZVVwDXNldCB0aGUgaGls\naXRlIG9mIGNkIGJ0biAiYWV0ZSIgdG8gZmFsc2UNcHV0IHRoZSBzaG9ydCBuYW1lIG9m\nIG1lIGludG8gY2QgZmxkICJyZXNvdXJjZVR5cGUiDWVuZCBtb3VzZVVwAAAApAAjAoQA\nUgF9AGQBogACAAAAAAAAAAMADAAAABByZXNvdXJjZVR5cGUAAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJUaGUgcmVzb3VyY2UgdHlwZSB0byBiZSB3cml0dGVuIG91dCwg\nbm9ybWFsbHkgdGhpcyBzaG91bGQgc3RheSBhcyBhZXRlLiINZW5kIE1vdXNlV2l0aGlu\nDQ0AAAAiACQCBQAeALgAMAFNAAAAAAAAAAAAFQASSQAAGAAAAAAAbAAoAgUAXAAhAG0A\ndwABAAAAAAAAABUADAEAABAAAG9uIE1vdXNlV2l0aGluDVNob3dCYWxsb29uICJFbnRl\nciB0aGUgcmVzb3VyY2UgSUQgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbg0NAAAAdgApAgQA\nWgB2AG0ApAACAAAAAAAAAAQADAAAABByZXNvdXJjZUlEAABvbiBNb3VzZVdpdGhpbg1T\naG93QmFsbG9vbiAiRW50ZXIgdGhlIHJlc291cmNlIElEIGhlcmUuIg1lbmQgTW91c2VX\naXRoaW4NDQAAAGwAKgIFAJwABACsADEAAQAAAAAAAAAVAAwBAAAQAABvbiBNb3VzZVdp\ndGhpbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhlIHJlc291cmNlIG5hbWUgaGVyZS4iDWVu\nZCBNb3VzZVdpdGhpbgAAAHgAKwIEAJwAMACtAM8AAgAAAAAAAAAEAAwAAAAQcmVzb3Vy\nY2VOYW1lAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhlIHJlc291\ncmNlIG5hbWUgaGVyZS4iDWVuZCBNb3VzZVdpdGhpbgAAAG4ALAIFALEABADCAD0AAQAA\nAAAAAAAVAAwBAAAQAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiRW50ZXIgdGhl\nIHJlc291cmNlIHZlcnNpb24gaGVyZS4iDWVuZCBNb3VzZVdpdGhpbgAAegAtAgQAsAA8\nAMEAXAACAAAAAP//AAQADAAAABBtYWpvclZlcnNpb24AAG9uIE1vdXNlV2l0aGluDVNo\nb3dCYWxsb29uICJFbnRlciB0aGUgcmVzb3VyY2UgdmVyc2lvbiBoZXJlLiINZW5kIE1v\ndXNlV2l0aGluAAAiAC4CBQCwAFwAwQBoAAEAAAAAAAAABAAMAAAAEAAAAAAAegAvAgQA\nsABoAMEAhQACAAAAAAAAAAQADAAAABBtaW5vclZlcnNpb24AAG9uIE1vdXNlV2l0aGlu\nDVNob3dCYWxsb29uICJFbnRlciB0aGUgcmVzb3VyY2UgdmVyc2lvbiBoZXJlLiINZW5k\nIE1vdXNlV2l0aGluAABsADACBQBwAAkAgQB3AAEAAAAA//8AFQAMAQAAEAAAb24gTW91\nc2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBsYW5ndWFnZSBjb2RlIGhlcmUu\nIg1lbmQgTW91c2VXaXRoaW4AAAB4ADECBABuAHYAfwCkAAIAAAAAAAAABAAMAAAAEGxh\nbmd1YWdlQ29kZQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVyIHRoZSBs\nYW5ndWFnZSBjb2RlIGhlcmUuIg1lbmQgTW91c2VXaXRoaW4AAABqADICBQCCABUAkgB3\nAAEAAAAAAAAAFQAMAQAAEAAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkVudGVy\nIHRoZSBzY3JpcHQgY29kZSBoZXJlLiINZW5kIE1vdXNlV2l0aGluAAAAdAAzAgQAgAB2\nAJEApAACAAAAAAAAAAQADAAAABBzY3JpcHRDb2RlAABvbiBNb3VzZVdpdGhpbg1TaG93\nQmFsbG9vbiAiRW50ZXIgdGhlIHNjcmlwdCBjb2RlIGhlcmUuIg1lbmQgTW91c2VXaXRo\naW4AAADuADYBAAEoAXwBVgG4oAAAAGB2AAEAFQAMAQAAEEluc3RydWN0aW9ucwAAb24g\nTW91c2VXaXRoaW4NU2hvd0JhbGxvb24gIkNsaWNrIGhlcmUgdG8gZ2V0IGluc3RydWN0\naW9ucyBmb3IgdXNpbmcgdGhpcyBzdGFjay4iDWVuZCBNb3VzZVdpdGhpbg0NDW9uIG1v\ndXNlVXANZ2xvYmFsIGdXaGVyZUZyb20NcHVzaCBjZA1wb3AgY2QgaW50byBnV2hlcmVG\ncm9tDWdvIGNkICJpbnN0cnVjdGlvbnMiDWVuZCBtb3VzZVVwAAAA9gA3AQABMgHNAUwB\n8iAAAAA+0wABABUADgEAABJQcm9jZWVkyQAAb24gTW91c2VXaXRoaW4NU2hvd0JhbGxv\nb24gIkNsaWNrIGhlcmUgdG8gZ28gdG8gdGhlIFJlc291cmNlIFRvb2xzIGNhcmQuIg1l\nbmQgTW91c2VXaXRoaW4NDQ0Nb24gbW91c2VVcA1nbG9iYWwgZ1doZXJlRnJvbQ1wdXNo\nIGNkDXBvcCBjZCBpbnRvIGdXaGVyZUZyb20NdmlzdWFsIGRpc3NvbHZlIGZhc3QNZ28g\nY2FyZCAiTWFpbk1lbnUiDWVuZCBtb3VzZVVwAAAAKgA4AoUBIwEhAVYCAAAHAAAAAAAA\nAAMACQAAAAxuYW1lTGlzdAAAAAAufAA5AQABQwACAVIAIIAGAAAAAAABAAAADAAAABBD\nAABvbiBNb3VzZVdpdGhpbg1TaG93QmFsbG9vbiAiQ2xpY2sgaGVyZSB0byBzaG93IHRo\nZSBldmVudCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBDLiINZW5kIE1vdXNlV2l0aGluDQ1m\ndW5jdGlvbiBDbGllbnRUZW1wbGF0ZSBtdWx0aUxpbmUNLS0gZWl0aGVyIHJldHVybiB0\naGUgdGVtcGxhdGUgb3Igd2hpY2ggcGFyYW1ldGVyIGlzIGJlaW5nIGNsaWNrZWQNcHV0\nIEdsdWVJbmZvKGZpZWxkICJwYXJhbUluZm8iKSBpbnRvIHBhcmFtSW5mbw1wdXQgIk9T\nRXJyIEFFIiAmIFN0cmlwU1AoZmllbGQgImV2ZW50TmFtZSIpICYgIigiIGludG8gdGVt\ncGxhdGUNcHV0IG51bWJlciBvZiBsaW5lcyBpbiBwYXJhbUluZm8gaW50byBuDXB1dCAw\nIGludG8gcGFyYW1JbmRleA1yZXBlYXQgd2l0aCBpbmRleCA9IDEgdG8gbg1zZXQgY3Vy\nc29yIHRvIGJ1c3kNcHV0IGxpbmUgaW5kZXggb2YgcGFyYW1JbmZvIGludG8geQ1wdXQg\naXRlbSA0IG9mIHkgaW50byBwYXJhbVR5cGUNcHV0IChpdGVtIDUgb2YgeSA9ICJvIikg\naW50byBpc09wdGlvbmFsDXB1dCAoaXRlbSAzIG9mIHkgPD4gIm51bGwiKSBpbnRvIHVz\nZUl0DWlmIHVzZUl0IHRoZW4NYWRkIDEgdG8gcGFyYW1JbmRleA1pZiB1c2VJdCB0aGVu\nDWlmIGluZGV4ID0gMSB0aGVuDXB1dCBmYWxzZSBpbnRvIGlzT3B0aW9uYWwNZWxzZQ1p\nZiBtdWx0aUxpbmUgPSAibXVsdGlMaW5lIiB0aGVuDXB1dCByZXR1cm4gJiBzcGFjZSBh\nZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCBzcGFjZSBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYN\nZW5kIGlmDXB1dCBOYW1lT2ZEYXRhVHlwZShpdGVtIDMgb2YgeSkgaW50byBuYW1lTGlz\ndA1wdXQgaXRlbSA1IG9mIG5hbWVMaXN0IGludG8gdHlwZU5hbWUNaWYgcGFyYW1UeXBl\nID0gMCB0aGVuDWlmIGluZGV4IDw+IDEgdGhlbiBwdXQgImNvbnN0ICIgYWZ0ZXIgdGVt\ncGxhdGUNcHV0ICJBRURlc2MgKiIgYWZ0ZXIgdGVtcGxhdGUNZWxzZSBpZiBwYXJhbVR5\ncGUgPSAxIHRoZW4gLS0gaGFuZGxlDXB1dCAiSGFuZGxlICIgYWZ0ZXIgdGVtcGxhdGUN\naWYgaW5kZXggPSAxIHRoZW4NcHV0ICIqIiBhZnRlciB0ZW1wbGF0ZQ1lbmQgaWYNZWxz\nZSBpZiBwYXJhbVR5cGUgPSA0IHRoZW4gLS0gaW1tZWRpYXRlDXB1dCBpdGVtIDMgb2Yg\neSBpbnRvIGRhdGFUeXBlDXB1dCBpdGVtIDYgb2YgbmFtZUxpc3QgaW50byBkYXRhU2l6\nZQ1pZiBkYXRhVHlwZSA9ICJlbnVtIiB0aGVuDXB1dCAiUmVzVHlwZSAiIGFmdGVyIHRl\nbXBsYXRlDWVsc2UgaWYgZGF0YVR5cGUgPSAidHJ1ZSIgdGhlbg1wdXQgIkJvb2xlYW4g\nIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlIGlmIChpc09wdGlvbmFsIG9yIChkYXRhU2l6ZSA8\nIDApIG9yIChkYXRhU2l6ZSA+IDQpKSBhbmQgKGluZGV4IDw+IDEpIHRoZW4gLS0gZml4\nZWQgbGVuZ3RoIG9wdGlvbmFsDXB1dCAiY29uc3QgIiAmIHR5cGVOYW1lICYgIiAqIiBh\nZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1dCB0eXBlTmFtZSAmIHNwYWNlIGFmdGVyIHRlbXBs\nYXRlDWVuZCBpZg1pZiBpbmRleCA9IDEgdGhlbg1wdXQgIioiIGFmdGVyIHRlbXBsYXRl\nDWVuZCBpZg1lbHNlIGlmIHBhcmFtVHlwZSA9IDcgdGhlbg1pZiBpbmRleCA8PiAxIHRo\nZW4gcHV0ICJjb25zdCAiIGFmdGVyIHRlbXBsYXRlDXB1dCB0eXBlTmFtZSAmICIgKiIg\nYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWlmIChsYXN0IGNoYXIgb2YgdGVtcGxhdGUgPSAi\nKiIpIHRoZW4NcHV0IGl0ZW0gNiBvZiB5ICYgIiwgIiBhZnRlciB0ZW1wbGF0ZQ1lbHNl\nIGlmIChwYXJhbVR5cGUgPSA1KSB0aGVuIC0tIHB0ciArIHNpemUNcHV0IHR5cGVOYW1l\nICYgIiAqIiAmIGl0ZW0gNiBvZiB5ICYgIiwgbG9uZyAiICYgaXRlbSA3IG9mIHkgJiAi\nLCAiIGFmdGVyIHRlbXBsYXRlDWVsc2UgaWYgcGFyYW1UeXBlID0gNiB0aGVuDWlmIGlu\nZGV4IDw+IDEgdGhlbiBwdXQgImNvbnN0ICIgYWZ0ZXIgdGVtcGxhdGUNcHV0ICJTdHJp\nbmdQdHIgIiAmIGl0ZW0gNiBvZiB5ICYgIiwgIiBhZnRlciB0ZW1wbGF0ZQ1lbHNlDXB1\ndCBpdGVtIDEgb2YgeSAmICIsICIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDWVuZCBpZiAt\nLSB1c2VJdA1lbmQgaWYgLS0gdXNlSXQNZW5kIHJlcGVhdA1pZiBwYXJhbUluZGV4ID4g\nMCB0aGVuDURlbGV0ZSBsYXN0IGNoYXIgb2YgdGVtcGxhdGUgLS0gc3BhY2Ugb3IgKA1w\ndXQgIikiIGludG8gbGFzdCBjaGFyIG9mIHRlbXBsYXRlIC0tIHJlcGxhY2UgLA1lbHNl\nDXB1dCAiKSIgYWZ0ZXIgdGVtcGxhdGUNZW5kIGlmDXJldHVybiB0ZW1wbGF0ZQ1lbmQg\nQ2xpZW50VGVtcGxhdGUNDWZ1bmN0aW9uIENsaWVudFNhbXBsZSBjYXJkVHlwZQ1nbG9i\nYWwgZGVmYXVsdFRhcmdldERlc2MsIGRlZmF1bHRUaW1lT3V0LCBkZWZhdWx0SWRsZVBy\nb2MsIGRlZmF1bHRBRUZpbHRlciwgZGVmYXVsdFNlbmRNb2RlLCBkZWZhdWx0VGFyZ2V0\nDWlmIGNhcmRUeXBlID0gImluaXQiIHRoZW4NaWYgZGVmYXVsdFRhcmdldERlc2MgaXMg\nZW1wdHkgdGhlbg1wdXQgInRhcmdldERlc2MiIGludG8gZGVmYXVsdFRhcmdldERlc2MN\ncHV0ICJ2b2lkIFRhcmdldEluaXQoKSIgJiByZXR1cm4gJiAieyIgJiByZXR1cm4gYWZ0\nZXIgcnN0DXB1dCBUYWIgJiBUYWIgaW50byB0d29UYWINcHV0IFRhYiAmIHR3b1RhYiBp\nbnRvIHRocmVlVGFiDXB1dCBUYWIgJiB0aHJlZVRhYiBpbnRvIGZvdXJUYWINaWYgZGVm\nYXVsdFRhcmdldCA9ICJzZWxmIiB0aGVuDS0tIHNlbmQgdG8gc2VsZg1wdXQgVGFiICYg\nIlByb2Nlc3NTZXJpYWxOdW1iZXIgbXlQU04gPSB7MCwga0N1cnJlbnRQcm9jZXNzfTsi\nICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgVGFiICYgIkFFQ3JlYXRlRGVzYyh0eXBlUHJv\nY2Vzc1NlcmlhbE51bWJlciwgKFB0cikgJm15UFNOLCBzaXplb2YoUHJvY2Vzc1Nlcmlh\nbE51bWJlciksICZ0YXJnZXREZXNjKTsiICYgcmV0dXJuIGFmdGVyIHJzdA1lbHNlIGlm\nIGRlZmF1bHRUYXJnZXQgPD4gIiIgdGhlbg0tLSBzZW5kIHRvIHRhcmdldCBuYW1lDXB1\ndCBUYWIgJiAiY2hhciAqdGFyZ2V0TmFtZSA9IiAmIHF1b3RlICYgZGVmYXVsdFRhcmdl\ndCAmIHF1b3RlICYgIjsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgVGFiICYgIkFFQ29l\ncmNlUHRyKHR5cGVDaGFyLCAoUHRyKSB0YXJnZXROYW1lLCAiICYgTGVuZ3RoKGRlZmF1\nbHRUYXJnZXQpICYgIiwgdHlwZVRhcmdldElELCAmdGFyZ2V0RGVzYyk7IiAmIHJldHVy\nbiBhZnRlciByc3QNZWxzZQ0tLSB1c2UgUFBDIEJyb3dzZXINcHV0IHR3b1RhYiAmICJM\nb2NhdGlvbk5hbWVSZWMgdGhlTG9jYXRpb247IiAmIHJldHVybiBhZnRlciByc3QNcHV0\nIHR3b1RhYiAmICJQb3J0SW5mb1JlYyB0aGVQb3J0SW5mbzsiICYgcmV0dXJuIGFmdGVy\nIHJzdA1wdXQgdHdvVGFiICYgIlRhcmdldElEIGFUYXJnZXRJRDsiICYgcmV0dXJuIGFm\ndGVyIHJzdA1wdXQgVGFiICYgImlmICghUFBDQnJvd3NlcigiICYgcXVvdGUgJiAiXHAi\nICYgcXVvdGUgJiAiLCAiIMINJiBxdW90ZSAmICJccCIgJiBxdW90ZSAmIiwgZmFsc2Us\nICZ0aGVMb2NhdGlvbiwgJnRoZVBvcnRJbmZvLCBuaWwsICIgwg0mIHF1b3RlICYgIlxw\nIiAmIHF1b3RlICYgIikpIHsiICYgcmV0dXJuIGFmdGVyIHJzdA1wdXQgdHdvVGFiICYg\nImFUYXJnZXRJRC5sb2NhdGlvbiA9IHRoZUxvY2F0aW9uOyIgJiByZXR1cm4gYWZ0ZXIg\ncnN0DXB1dCB0d29UYWIgJiAiYVRhcmdldElELm5hbWUgPSB0aGVQb3J0SW5mby5uYW1l\nOyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCB0d29UYWIgJiAiQUVDcmVhdGVEZXNjKHR5\ncGVUYXJnZXRJRCwgKFB0cikgJmFUYXJnZXRJRCwgc2l6ZW9mKFRhcmdldElEKSwgJnRh\ncmdldERlc2MpOyIgJiByZXR1cm4gYWZ0ZXIgcnN0DXB1dCBUYWIgJiAifTsiICYgcmV0\ndXJuIGFmdGVyIHJzdA1lbmQgaWYNcHV0IFRhYiAmICJ9IiAmIHJldHVybiAmIHJldHVy\nbiBhZnRlciByc3QNZW5kIGlmDWlmIGRlZmF1bHRJZGxlUHJvYyBpcyBlbXB0eSB0aGVu\nDXB1dCAibmlsIiBpbnRvIGRlZmF1bHRJZGxlUHJvYw1lbHNlDXB1dCAiJiIgYmVmb3Jl\nIGRlZmF1bHRJZGxlUHJvYw1lbmQgaWYNaWYgZGVmYXVsdEFFRmlsdGVyIGlzIGVtcHR5\nIHRoZW4NcHV0ICJuaWwiIGludG8gZGVmYXVsdEFFRmlsdGVyDWVsc2UNcHV0ICImIiBi\nZWZvcmUgZGVmYXVsdEFFRmlsdGVyDWVuZCBpZg1pZiBkZWZhdWx0VGltZU91dCBpcyBl\nbXB0eSB0aGVuDXB1dCAia0FFRGVmYXVsdFRpbWVPdXQiIGludG8gZGVmYXVsdFRpbWVP\ndXQNZW5kIGlmDXJldHVybiByc3QNZWxzZSBpZiBjYXJkVHlwZSA9ICJldmVudCIgdGhl\nbg1wdXQgQ2xpZW50VGVtcGxhdGUoKSAmIHJldHVybiAmICJ7IiAmIHJldHVybiBpbnRv\nIHByb2NIZWFkZXINcHV0IEdsdWVJbmZvKGZpZWxkICJwYXJhbUluZm8iKSBpbnRvIHBh\ncmFtSW5mbw1wdXQgbnVtYmVyIG9mIGxpbmVzIG9mIHBhcmFtSW5mbyBpbnRvIGNvdW50\nDXB1dCAiQUUiICYgU3RyaXBTUChmaWVsZCAiRXZlbnROYW1lIikgaW50byBwcm9jTmFt\nZQ1wdXQgKGl0ZW0gMyBvZiBwYXJhbUluZm8gPD4gIm51bGwiKSBpbnRvIGlzRnVuYw1w\ndXQgdGFiICYgdGFiIGludG8gdHdvVGFiDXB1dCB0YWIgJiB0d29UYWIgaW50byB0aHJl\nZVRhYg1wdXQgIk9TRXJyIGVycjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nICJBcHBsZUV2ZW50IHRoZUFwcGxlRXZlbnQsIHRoZVJlcGx5OyIgJiByZXR1cm4gYWZ0\nZXIgdmFyRGVjbGFyZQ1wdXQgVGFiICYgInRoZUFwcGxlRXZlbnQuZGF0YUhhbmRsZSA9\nIG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIgJiAidGhlUmVwbHku\nZGF0YUhhbmRsZSA9IG5pbDsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBUYWIg\nJiAiaWYgKGVyciA9IEFFQ3JlYXRlQXBwbGVFdmVudCgnIiAmIFJlc1R5cGUoZmllbGQg\nIkV2ZW50Q2xhc3MiKSDCDSYgIicsICciICYgUmVzVHlwZShmaWVsZCAiRXZlbnRJRCIp\nICYgIicsICYiICYgZGVmYXVsdFRhcmdldERlc2Mgwg0mICIsIGtBdXRvR2VuZXJhdGVS\nZXR1cm5JRCwga0FueVRyYW5zYWN0aW9uSUQsICZ0aGVBcHBsZUV2ZW50KSkiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiZ290byBDbGVhblVwOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcmVwZWF0IHdpdGggcGFyYW1JbmRleCA9IDIgdG8g\nY291bnQNcHV0IGxpbmUgcGFyYW1JbmRleCBvZiBwYXJhbUluZm8gaW50byB4DWlmIGl0\nZW0gMyBvZiB4IDw+ICJudWxsIiB0aGVuDXB1dCBpdGVtIDQgb2YgeCBpbnRvIHBhcmFt\nVHlwZQ1wdXQgKGl0ZW0gNSBvZiB4ID0gIm8iKSBpbnRvIGlzT3B0aW9uYWwNcHV0IE5h\nbWVPZkRhdGFUeXBlKGl0ZW0gMyBvZiB4KSBpbnRvIG5hbWVMaXN0DWlmIGlzT3B0aW9u\nYWwgdGhlbg1wdXQgdHdvVGFiIGludG8gaW5kZW50DWVsc2UNcHV0IFRhYiBpbnRvIGlu\nZGVudA1lbmQgaWYNcHV0IFN0cmlwU3AoaXRlbSAxIG9mIHgpIGludG8gdGhpc05hbWUN\naWYgKHBhcmFtVHlwZSA9IDApIG9yIChwYXJhbVR5cGUgPSAyKSB0aGVuIC0tIEFFRGVz\nYw1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRhYiAmICJpZiAoIiAmIGl0ZW0gNiBvZiB4\nICYgIikgeyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IGluZGVudCAmICJpZiAo\nZXJyID0gQUVQdXRLZXlEZXNjKCZ0aGVBcHBsZUV2ZW50LCIgJiBpdGVtIDIgb2YgeCAm\nICIsICIgJiBpdGVtIDYgb2YgeCAmICIpKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkN\ncHV0IGluZGVudCAmIHRhYiAmICJnb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBw\ncm9jQm9keQ1wdXQgVGFiICYgIn07IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbHNl\nDXB1dCBpbmRlbnQgJiAiaWYgKGVyciA9IEFFUHV0S2V5RGVzYygmdGhlQXBwbGVFdmVu\ndCwiICYgaXRlbSAyIG9mIHggJiAiLCAiICYgaXRlbSA2IG9mIHggJiAiKSkiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCBpbmRlbnQgJiBUYWIgJiAiZ290byBDbGVhblVw\nOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVsc2UgaWYgKHBhcmFtVHlw\nZSA9IDEpIG9yIChwYXJhbVR5cGUgPSAzKSB0aGVuIC0tIGhhbmRsZQ1wdXQgImRlc2NG\nb3IiICYgU3RyaXBTcChpdGVtIDEgb2YgeCkgaW50byBkZXNjRm9yVGhpc05hbWUNaWYg\naXNPcHRpb25hbCB0aGVuDXB1dCBUYWIgJiAiaWYgKCIgJiBpdGVtIDEgb2YgeCAmICIp\nIHsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgIkFFRGVzYyAiICYg\nZGVzY0ZvclRoaXNOYW1lICYgIjsiICYgcmV0dXJuIGFmdGVyIHZhckRlY2xhcmUNcHV0\nIGluZGVudCAmIGRlc2NGb3JUaGlzTmFtZSAmICIuZGVzY3JpcHRvclR5cGUgPSAiICYg\naXRlbSA0IG9mIG5hbWVMaXN0ICYgIjsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1\ndCBpbmRlbnQgJiBkZXNjRm9yVGhpc05hbWUgJiAiLmRhdGFIYW5kbGUgPSAoSGFuZGxl\nKSIgJiBpdGVtIDEgb2YgeCAmICI7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQg\naW5kZW50ICYgImlmIChlcnIgPSBBRVB1dEtleURlc2MoJnRoZUFwcGxlRXZlbnQsIiAm\nIGl0ZW0gMiBvZiB4ICYgIiwmIiAmIGRlc2NGb3JUaGlzTmFtZSAmICIpKSIgJiByZXR1\ncm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IGluZGVudCAmIFRhYiAmICJnb3RvIENsZWFuVXA7\nIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IGlu\nZGVudCAmICJ9OyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDWVsc2UgaWYg\ncGFyYW1UeXBlID0gNCB0aGVuDWlmIGlzT3B0aW9uYWwgdGhlbg1pZiBpdGVtIDMgb2Yg\neCA9ICJlbnVtIiB0aGVuDXB1dCBUYWIgJiAiaWYgKChsb25nKSIgJiBpdGVtIDEgb2Yg\neCAmICIpIHsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiaWYg\nKGVyciA9IEFFUHV0S2V5UHRyKCZ0aGVBcHBsZUV2ZW50LCAiICYgaXRlbSAyIG9mIHgg\nwg0mICIsICIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCAoUHRyKSAmIiAmIGl0ZW0g\nMSBvZiB4ICYgIiwgc2l6ZW9mKCIgwg0mIGl0ZW0gNSBvZiBuYW1lTGlzdCAmICIpKSki\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgaXRlbSAzIG9mIHggPSAidHJ1\nZSIgdGhlbg1wdXQgVGFiICYgImlmICgiICYgaXRlbSAxIG9mIHggJiAiKSB7IiAmIHJl\ndHVybiBhZnRlciBwcm9jQm9keQ1wdXQgdHdvVGFiICYgImlmIChlcnIgPSBBRVB1dEtl\neVB0cigmdGhlQXBwbGVFdmVudCwgIiAmIGl0ZW0gMiBvZiB4IMINJiAiLCB0eXBlVHJ1\nZSwgbmlsLCAwKSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IFRhYiAm\nICJpZiAoIiAmIGl0ZW0gNiBvZiB4ICYgIikgeyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IHR3b1RhYiAmICJpZiAoZXJyID0gQUVQdXRLZXlQdHIoJnRoZUFwcGxlRXZl\nbnQsICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAm\nICIsIChQdHIpICIgJiBpdGVtIDYgb2YgeCAmICIsIHNpemVvZigiIMINJiBpdGVtIDUg\nb2YgbmFtZUxpc3QgJiAiKSkpIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYN\ncHV0IHRocmVlVGFiICYgImdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHByb2NC\nb2R5DXB1dCB0d29UYWIgJiAifSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZWxzZSAg\nLS0gcmVxdWlyZWQNcHV0IFRhYiAmICJpZiAoZXJyID0gQUVQdXRLZXlQdHIoJnRoZUFw\ncGxlRXZlbnQsICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1l\nTGlzdCAmICIsIChQdHIpICIgYWZ0ZXIgcHJvY0JvZHkNcHV0IGl0ZW0gNiBvZiBuYW1l\nTGlzdCBpbnRvIGRhdGFTaXplDWlmIChkYXRhU2l6ZSA8IDApIG9yIChkYXRhU2l6ZSA+\nIDQpIHRoZW4NcHV0IGl0ZW0gNiBvZiB4IGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0ICIm\nIiAmIGl0ZW0gMSBvZiB4IGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgIiwgc2l6ZW9m\nKCIgJiBpdGVtIDUgb2YgbmFtZUxpc3QgJiAiKSkpIiAmIHJldHVybiBhZnRlciBwcm9j\nQm9keQ1wdXQgdHdvVGFiICYgImdvdG8gQ2xlYW5VcDsiICYgcmV0dXJuIGFmdGVyIHBy\nb2NCb2R5DWVuZCBpZg1lbHNlIGlmIChwYXJhbVR5cGUgPSA1KSBvciAocGFyYW1UeXBl\nID0gNykgdGhlbg1pZiBpc09wdGlvbmFsIHRoZW4NcHV0IFRhYiAmICJpZiAoIiAmIGl0\nZW0gNiBvZiB4ICYgIikgeyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNZW5kIGlmDXB1\ndCBpbmRlbnQgJiAiaWYgKGVyciA9IEFFUHV0S2V5UHRyKCZ0aGVBcHBsZUV2ZW50LCAi\nICYgaXRlbSAyIG9mIHggwg0mICIsICIgJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCAo\nUHRyKSAiIGFmdGVyIHByb2NCb2R5DWlmIChwYXJhbVR5cGUgPSA1KSB0aGVuIC0tIHNp\nemUgaXMgdGhlIHBhcmFtZXRlcg1wdXQgaXRlbSA2IG9mIHggJiAiLCAiICYgaXRlbSA3\nIG9mIHggJiAiKSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVsc2UNcHV0IGl0ZW0g\nNiBvZiB4ICYgIiwgc3RybGVuKCIgJiBpdGVtIDYgb2YgeCAmICIpKSkiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1wdXQgdHdvVGFiICYgImdvdG8gQ2xlYW5VcDsi\nICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWlmIGlzT3B0aW9uYWwgdGhlbg1wdXQgVGFi\nICYgIn07IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNZWxzZSBpZiBwYXJh\nbVR5cGUgPSA2IHRoZW4NaWYgaXNPcHRpb25hbCB0aGVuDXB1dCBUYWIgJiAiaWYgKCIg\nJiBpdGVtIDYgb2YgeCAmICIpIiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1lbmQgaWYN\ncHV0IGluZGVudCAmICJpZiAoZXJyID0gQUVQdXRLZXlQdHIoJnRoZUFwcGxlRXZlbnQs\nICIgJiBpdGVtIDIgb2YgeCDCDSYgIiwgIiAmIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIs\nIChQdHIpIChjaGFyICopIiAmIGl0ZW0gNiBvZiB4IMINJiAiKzEsICoodW5zaWduZWQg\nY2hhciAqKSIgJiBpdGVtIDYgb2YgeCAmICIpKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0IGluZGVudCAmIHRhYiAmICJnb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbmQgaWYNZW5kIGlmIC0tIG5vdCBudWxsDWVuZCByZXBlYXQNaWYg\naXNGdW5jIHRoZW4NcHV0IHRhYiAmICJpZiAoZXJyID0gQUVTZW5kKCZ0aGVBcHBsZUV2\nZW50LCAmdGhlUmVwbHksIGtBRVdhaXRSZXBseSIgYWZ0ZXIgcHJvY0JvZHkNZWxzZQ1w\ndXQgdGFiICYgImVyciA9IEFFU2VuZCgmdGhlQXBwbGVFdmVudCwgJnRoZVJlcGx5LCBr\nQUVOb1JlcGx5IiBhZnRlciBwcm9jQm9keQ1lbmQgaWYNaWYgZGVmYXVsdFNlbmRNb2Rl\nIGlzIG5vdCBlbXB0eSB0aGVuIHB1dCAifCIgJiBkZWZhdWx0U2VuZE1vZGUgYWZ0ZXIg\ncHJvY0JvZHkNcHV0ICIsIGtBRU5vcm1hbFByaW9yaXR5LCAiICYgZGVmYXVsdFRpbWVP\ndXQgJiAiLCIgJiYgZGVmYXVsdElkbGVQcm9jICYmICIsIiDCDSYgZGVmYXVsdEFFRmls\ndGVyICYgIikiIGFmdGVyIHByb2NCb2R5DWlmIGlzRnVuYyB0aGVuDXB1dCAiKSIgJiBy\nZXR1cm4gJiBUYWIgJiAiZ290byBDbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0Jv\nZHkNcHV0ICJsb25nIHRoZUVycm47IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1\ndCAiRGVzY1R5cGUgdHlwZUNvZGU7IiAmIHJldHVybiBhZnRlciB2YXJEZWNsYXJlDXB1\ndCAibG9uZyBhY3R1YWxTaXplOyIgJiByZXR1cm4gYWZ0ZXIgdmFyRGVjbGFyZQ1wdXQg\ndGFiICYgImlmIChBRUdldEtleVB0cigmdGhlUmVwbHksICdlcnJuJywgdHlwZUxvbmdJ\nbnRlZ2VyLCAmdHlwZUNvZGUsIiDCDSYmICIoUHRyKSAmdGhlRXJybiwgc2l6ZW9mKHRo\nZUVycm4pLCAmYWN0dWFsU2l6ZSkgIT0gZXJyQUVEZXNjTm90Rm91bmQpIHsiICYgcmV0\ndXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiLyogeW91ciBlcnJvciBoYW5k\nbGluZyBjb2RlIGhlcmUgKi8iICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29U\nYWIgJiAifTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DS0tIGdldCB0aGUgcmVzdWx0\nDXB1dCBpdGVtIDQgb2YgcGFyYW1JbmZvIGludG8gcGFyYW1UeXBlDXB1dCBOYW1lT2ZE\nYXRhVHlwZShpdGVtIDMgb2YgcGFyYW1JbmZvKSBpbnRvIG5hbWVMaXN0DWlmIHBhcmFt\nVHlwZSA9IDAgdGhlbiAtLSByZXN1bHQgaXMgQUVEZXNjDXB1dCB0YWIgJiAiZXJyID0g\nQUVHZXRLZXlEZXNjKCZ0aGVBcHBsZUV2ZW50LCBrZXlEaXJlY3RPYmplY3QsICIgwg0m\nIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsIHB0clRvVGhlUmVzdWx0KTsiICYgcmV0dXJu\nIGFmdGVyIHByb2NCb2R5DWVsc2UgaWYgKHBhcmFtVHlwZSA9IDEpIHRoZW4gLS0gcmVz\ndWx0IGlzIEhhbmRsZQ1wdXQgIkFFRGVzYyAgYURlc2M7IiAmIHJldHVybiBhZnRlciB2\nYXJEZWNsYXJlDXB1dCBUYWIgJiAiaWYgKGVyciA9IEFFR2V0S2V5RGVzYygmdGhlQXBw\nbGVFdmVudCwga2V5RGlyZWN0T2JqZWN0LCAiIMINJiBpdGVtIDQgb2YgbmFtZUxpc3Qg\nJiAiLCAmYURlc2MpKSIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHR3b1RhYiAm\nICJnb3RvIENsZWFuVXA7IiAmIHJldHVybiBhZnRlciBwcm9jQm9keQ1wdXQgVGFiICYg\nIipwdHJUb1RoZVJlc3VsdCA9IGFEZXNjLmRhdGFIYW5kbGU7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDQgdGhlbiAtLSByZXN1bHQgaXMg\nZml4ZWQgbGVuZ3RoDXB1dCBUYWIgJiAiZXJyID0gQUVHZXRLZXlQdHIoJnRoZVJlcGx5\nLCBrZXlEaXJlY3RPYmplY3QsICIgwg0mIGl0ZW0gNCBvZiBuYW1lTGlzdCAmICIsICZ0\neXBlQ29kZSwgKFB0cikgcHRyVG9UaGVSZXN1bHQsIHNpemVvZigiICYgaXRlbSA1IG9m\nIG5hbWVMaXN0ICYgIikiIMINJiAiLCAmYWN0dWFsU2l6ZSk7IiAmIHJldHVybiBhZnRl\nciBwcm9jQm9keQ1lbHNlIGlmIHBhcmFtVHlwZSA9IDYgdGhlbiAtLSByZXN1bHQgaXMg\nc3RyMjU1DXB1dCBUYWIgJiAiaWYgKGVyciA9IEFFR2V0S2V5UHRyKCZ0aGVSZXBseSwg\na2V5RGlyZWN0T2JqZWN0LCAiIMINJiBpdGVtIDQgb2YgbmFtZUxpc3QgJiAiLCAmdHlw\nZUNvZGUsIChQdHIpIHB0clRvVGhlUmVzdWx0KzEsIDI1NSIgwg0mICIsICZhY3R1YWxT\naXplKSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIgJiAiZ290byBD\nbGVhblVwOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IFRhYiAmICJpZiAoYWN0\ndWFsU2l6ZSA+IDI1NSkiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCB0d29UYWIg\nJiAiYWN0dWFsU2l6ZSA9IDI1NTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DXB1dCBU\nYWIgJiAiKih1bnNpZ25lZCBjaGFyICopcHRyVG9UaGVSZXN1bHQgPSAodW5zaWduZWQg\nY2hhcikgYWN0dWFsU2l6ZTsiICYgcmV0dXJuIGFmdGVyIHByb2NCb2R5DWVuZCBpZg1l\nbHNlDXB1dCAiOyIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkgLS0gZW5kIG9mIEFFU2Vu\nZA1lbmQgaWYNcHV0ICJDbGVhblVwOiIgJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0\nIFRhYiAmICJBRURpc3Bvc2VEZXNjKCZ0aGVBcHBsZUV2ZW50KTsiICYgcmV0dXJuIGFm\ndGVyIHByb2NCb2R5DXB1dCBUYWIgJiAiQUVEaXNwb3NlRGVzYygmdGhlUmVwbHkpOyIg\nJiByZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0IHRhYiAmICJyZXR1cm4gZXJyOyIgJiBy\nZXR1cm4gYWZ0ZXIgcHJvY0JvZHkNcHV0ICJ9IiAmIHJldHVybiBhZnRlciBwcm9jQm9k\neQ1pZiB2YXJEZWNsYXJlIDw+ICIiIHRoZW4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbnVt\nYmVyIG9mIGxpbmVzIGluIHZhckRlY2xhcmUNcHV0IFRhYiAmIGxpbmUgaSBvZiB2YXJE\nZWNsYXJlICYgcmV0dXJuIGFmdGVyIHByb2NIZWFkZXINZW5kIHJlcGVhdA1lbmQgaWYN\ncmV0dXJuIHByb2NIZWFkZXIgJiByZXR1cm4gJiBwcm9jQm9keSAmIHJldHVybg1lbHNl\nDXJldHVybiAiIg1lbmQgaWYNRW5kIENsaWVudFNhbXBsZQ0AAP//ABAAU2VydmVyIExh\nbmd1YWdl//wAEABDbGllbnQgTGFuZ3VhZ2X/9QAOAFRpbWVvdXQgVmFsdWX/9AAFADEy\nMDAA//AADgBSZXNvdXJjZSBUeXBl/+wACgBTZW5kIE1vZGX/6wAKAElkbGUgUHJvY//q\nAAkAriBGaWx0ZXIA/+UAEgBUYXJnZXQgRGVzY3JpcHRvcv/dAAUAYWV0ZQD/3AAMAFBy\nZWZlcmVuY2Vz/9gADABSZXNvdXJjZSBJRP/WAAUATmFtZQD/1AAIAFZlcnNpb27/0gAC\nAC7/0AAOAExhbmd1YWdlIENvZGX/zgAMAFNjcmlwdCBDb2Rl/9MAAgAx/9EAAgAw/88A\nAgAw/80AAgAw/9cAAgAw/8ge04AKAAAABB7JABFjQUVMaXN0PSJsaXN0Ig1jQXBwbGlj\nYXRpb249ImNhcHAiDWNBcmM9ImNhcmMiDWNCb29sZWFuPSJib29sIg1jQ2VsbD0iY2Nl\nbCINY0NoYXI9ImNoYSAiDWNDb2xvclRhYmxlPSJjbHJ0Ig1jQ29sdW1uPSJjY29sIg1j\nRG9jdW1lbnQ9ImRvY3UiDWNEcmF3aW5nQXJlYT0iY2RydyINY0VudW1lcmF0aW9uPSJl\nbnVtIg1jRmlsZT0iZmlsZSINY0ZpeGVkPSJmaXhkIg1jR3JhcGhpY0xpbmU9ImdsaW4i\nDWNHcmFwaGljT2JqZWN0PSJjZ29iIg1jR3JhcGhpY1NoYXBlPSJjZ3NoIg1jR3JhcGhp\nY1RleHQ9ImNndHgiDWNHcm91cGVkR3JhcGhpYz0iY3BpYyINY0luc2VydGlvbkxvYz0i\naW5zbCINY0ludGxUZXh0PSJpdHh0Ig1jSW50bFdyaXRpbmdDb2RlPSJpbnRsIg1jSXRl\nbT0iY2l0bSINY0xpbmU9ImNsaW4iDWNMb25nSW50ZWdlcj0ibG9uZyINY01lbnU9ImNt\nbnUiDWNNZW51SXRlbT0iY21lbiINY09iamVjdD0iY29iaiINY09iamVjdFNwZWNpZmll\ncj0ib2JqICINY09wZW5hYmxlT2JqZWN0PSJjb29iIg1jT3ZhbD0iY292bCINY1BhcmFn\ncmFwaD0iY3BhciINY1BpeGVsPSJjcHhsIg1jUGl4ZWxNYXA9ImNwaXgiDWNQb2x5Z29u\nPSJjcGduIg1jUURQb2ludD0iUURwdCINY1FEUmVjdGFuZ2xlPSJxZHJ0Ig1jUmVjdGFu\nZ2xlPSJjcmVjIg1jUkdCQ29sb3I9ImNSR0IiDWNSb3RhdGlvbj0idHJvdCINY1JvdW5k\nZWRSZWN0YW5nbGU9ImNycmMiDWNSb3c9ImNyb3ciDWNTZWxlY3Rpb249ImNzZWwiDWNT\naG9ydEludGVnZXI9InNob3IiDWNUYWJsZT0iY3RibCINY1RleHQ9ImN0eHQiDWNUZXh0\nRmxvdz0iY2ZsbyINY1RleHRTdHlsZXM9InRzdHkiDWNUeXBlPSJ0eXBlIg1jV2luZG93\nPSJjd2luIg1jV29yZD0iY3dvciINa0FFQWJvdXQ9ImFib3UiDWtBRUFmdGVyPSJhZnRl\nIg1rQUVBbGlhc1NlbGVjdGlvbj0ic2FsaSINa0FFQWxsQ2Fwcz0iYWxjcCINa0FFQXJy\nb3dBdEVuZD0iYXJlbiINa0FFQXJyb3dBdFN0YXJ0PSJhcnN0Ig1rQUVBcnJvd0JvdGhF\nbmRzPSJhcmJvIg1rQUVBc2s9ImFzayAiDWtBRUJlZm9yZT0iYmVmbyINa0FFQmVnaW5u\naW5nPSJiZ25nIg1rQUVCZWdpbnNXaXRoPSJiZ3d0Ig1rQUVCZWdpblRyYW5zYWN0aW9u\nPSJiZWdpIg1rQUVCb2xkPSJib2xkIg1rQUVDYXNlU2Vuc0VxdWFscz0iY3NlcSINa0FF\nQ2VudGVyZWQ9ImNlbnQiDWtBRUNoYW5nZVZpZXc9InZpZXciDWtBRUNsb25lPSJjbG9u\nIg1rQUVDbG9zZT0iY2xvcyINa0FFQ29uZGVuc2VkPSJjb25kIg1rQUVDb250YWlucz0i\nY29udCINa0FFQ29weT0iY29weSINa0FFQ29yZVN1aXRlPSJjb3JlIg1rQUVDb3VudEVs\nZW1lbnRzPSJjbnRlIg1rQUVDcmVhdGVFbGVtZW50PSJjcmVsIg1rQUVDcmVhdGVQdWJs\naXNoZXI9ImNwdWIiDWtBRUN1dD0iY3V0ICINa0FFRGVsZXRlPSJkZWxvIg1rQUVEb09i\namVjdHNFeGlzdD0iZG9leCINa0FFRG9TY3JpcHQ9ImRvc2MiDWtBRURyYWc9ImRyYWci\nDWtBRUR1cGxpY2F0ZVNlbGVjdGlvbj0ic2R1cCINa0FFRWRpdEdyYXBoaWM9ImVkaXQi\nDWtBRUVtcHR5VHJhc2g9ImVtcHQiDWtBRUVuZD0iZW5kICINa0FFRW5kc1dpdGg9ImVu\nZHMiDWtBRUVuZFRyYW5zYWN0aW9uPSJlbmR0Ig1rQUVFcXVhbHM9Ij0gICAiDWtBRUV4\ncGFuZGVkPSJwZXhwIg1rQUVGYXN0PSJmYXN0Ig1rQUVGaW5kZXJFdmVudHM9IkZORFIi\nDWtBRUZvcm11bGFQcm90ZWN0PSJmcHJvIg1rQUVGdWxseUp1c3RpZmllZD0iZnVsbCIN\na0FFR2V0Q2xhc3NJbmZvPSJxb2JqIg1rQUVHZXREYXRhPSJnZXRkIg1rQUVHZXREYXRh\nU2l6ZT0iZHNpeiINa0FFR2V0RXZlbnRJbmZvPSJndGVpIg1rQUVHZXRJbmZvU2VsZWN0\naW9uPSJzaW5mIg1rQUVHZXRQcml2aWxlZ2VTZWxlY3Rpb249InNwcnYiDWtBRUdyZWF0\nZXJUaGFuPSI+ICAgIg1rQUVHcmVhdGVyVGhhbkVxdWFscz0iPj0gICINa0FFR3Jvdz0i\nZ3JvdyINa0FFSGlkZGVuPSJoaWRuIg1rQUVIaVF1YWxpdHk9ImhpcXUiDWtBRUltYWdl\nR3JhcGhpYz0iaW1nciINIiJrQUVJbmZvPTExDWtBRUlzVW5pZm9ybT0iaXN1biINa0FF\nSXRhbGljPSJpdGFsIg1rQUVMZWZ0SnVzdGlmaWVkPSJsZWZ0Ig1rQUVMZXNzVGhhbj0i\nPCAgICINa0FFTGVzc1RoYW5FcXVhbHM9Ijw9ICAiDWtBRUxvd2VyY2FzZT0ibG93YyIN\nIiJrQUVNYWluPTANa0FFTWFrZU9iamVjdHNWaXNpYmxlPSJtdmlzIg1rQUVNaXNjU3Rh\nbmRhcmRzPSJtaXNjIg1rQUVNb2RpZmlhYmxlPSJtb2RmIg1rQUVNb3ZlPSJtb3ZlIg1r\nQUVObz0ibm8gICINa0FFTm9BcnJvdz0iYXJubyINa0FFTm9ubW9kaWZpYWJsZT0ibm1v\nZCINa0FFT3Blbj0ib2RvYyINa0FFT3BlblNlbGVjdGlvbj0ic29wZSINa0FFT3V0bGlu\nZT0ib3V0bCINa0FFUGFnZVNldHVwPSJwZ3N1Ig1rQUVQYXN0ZT0icGFzdCINa0FFUGxh\naW49InBsYW4iDWtBRVByaW50PSJwZG9jIg1rQUVQcmludFNlbGVjdGlvbj0ic3ByaSIN\na0FFUHJpbnRXaW5kb3c9InB3aW4iDWtBRVB1dEF3YXlTZWxlY3Rpb249InNwdXQiDWtB\nRVFEQWRkT3Zlcj0iYWRkbyINa0FFUURBZGRQaW49ImFkZHAiDWtBRVFEQWRNYXg9ImFk\nbXgiDWtBRVFEQWRNaW49ImFkbW4iDWtBRVFEQmljPSJiaWMgIg1rQUVRREJsZW5kPSJi\nbG5kIg1rQUVRRENvcHk9ImNweSAiDWtBRVFETm90QmljPSJuYmljIg1rQUVRRE5vdENv\ncHk9Im5jcHkiDWtBRVFETm90T3I9Im50b3IiDWtBRVFETm90WG9yPSJueG9yIg1rQUVR\nRE9yPSJvciAgIg1rQUVRRFN1Yk92ZXI9InN1Ym8iDWtBRVFEU3ViUGluPSJzdWJwIg1r\nQUVRRFhvcj0ieG9yICINa0FFUmVkbz0icmVkbyINa0FFUmVndWxhcj0icmVnbCINa0FF\nUmVwbGFjZT0icnBsYyINa0FFUmV2ZWFsU2VsZWN0aW9uPSJzcmV2Ig1rQUVSZXZlcnQ9\nInJ2cnQiDWtBRVJpZ2h0SnVzdGlmaWVkPSJyZ2h0Ig1rQUVTYXZlPSJzYXZlIg1rQUVT\nZXREYXRhPSJzZXRkIg1rQUVTZXRQb3NpdGlvbj0icG9zbiINa0FFU2hhZG93PSJzaGFk\nIg0iImtBRVNoYXJpbmc9MTMNa0FFU2hvd0NsaXBib2FyZD0ic2hjbCINa0FFU2xlZXA9\nInNsZXAiDWtBRVNtYWxsQ2Fwcz0ic21jcCINa0FFU3RyaWtldGhyb3VnaD0ic3RyayIN\na0FFU3Vic2NyaXB0PSJzYnNjIg1rQUVTdXBlcnNjcmlwdD0ic3BzYyINa0FFVHJhbnNh\nY3Rpb25UZXJtaW5hdGVkPSJ0dHJtIg1rQUVVbmRlcmxpbmU9InVuZGwiDWtBRVVuZG89\nInVuZG8iDWtBRVdob2xlV29yZEVxdWFscz0id3dlcSINa0FFWWVzPSJ5ZXMgIg1rQUVa\nb29tPSJ6b29tIg0iImtCeUNvbW1lbnRWaWV3PTYNIiJrQnlEYXRlVmlldz0zDSIia0J5\nSWNvblZpZXc9MQ0iImtCeUtpbmRWaWV3PTUNIiJrQnlMYWJlbFZpZXc9Nw0iImtCeU5h\nbWVWaWV3PTINIiJrQnlTaXplVmlldz00DSIia0J5U21hbGxJY29uPTANIiJrQnlWZXJz\naW9uVmlldz04DWtleUFFQW5nbGU9ImthbmciDWtleUFFQXJjQW5nbGU9ImtlbmQiDWtl\neUFFQmFzZUFkZHI9ImJhZGQiDWtleUFFQmduZENvbG9yPSJrYmNsIg1rZXlBRUJnbmRQ\nYXR0ZXJuPSJrYnB0Ig1rZXlBRUJvdW5kcz0ia2JuZCINa2V5QUVDZWxsTGlzdD0ia2Ns\ndCINa2V5QUVDbGFzc0lEPSJjbElEIg1rZXlBRUNvbG9yPSJrY2xyIg1rZXlBRUNvbG9y\nVGFibGU9ImtjbHMiDWtleUFFQ3VydmVIZWlnaHQ9ImtjaGQiDWtleUFFQ3VydmVXaWR0\naD0ia2N3ZCINa2V5QUVEYXNoU3R5bGU9ImRzdHkiDWtleUFFRGF0YT0iZGF0YSINa2V5\nQUVEZWZpbml0aW9uUmVjdD0ia2RlZiINa2V5QUVEZXNjVHlwZT0iZHN0cCINa2V5QUVE\nZXN0aW5hdGlvbj0iZGVzdCINa2V5QUVEb0FudGlBbGlhcz0iYW50YSINa2V5QUVEb0Rp\ndGhlcmVkPSJnZGl0Ig1rZXlBRURvUm90YXRlPSJrZHJ0Ig1rZXlBRURvU2NhbGU9Imtz\nY2EiDWtleUFFRG9UcmFuc2xhdGU9Imt0cmEiDWtleUFFRWRpdGlvbkZpbGVMb2M9ImVs\nb2MiDWtleUFFRWxlbWVudHM9ImVsbXMiDWtleUFFRW5kUG9pbnQ9ImtlZHAiDWtleUFF\nRXZlbnRDbGFzcz0iZXZjbCINa2V5QUVFdmVudElEPSJldnRpIg1rZXlBRUZpbGU9Imtm\naWwiDWtleUFFRmlsZVR5cGU9ImZsdHAiDWtleUFFRmlsbENvbG9yPSJrZmNsIg1rZXlB\nRUZpbGxQYXR0ZXJuPSJrZnB0Ig1rZXlBRUZsaXBIb3Jpem9udGFsPSJrZmhvIg1rZXlB\nRUZsaXBWZXJ0aWNhbD0ia2Z2dCINa2V5QUVGb250PSJrZm50Ig1rZXlBRUZvcm11bGE9\nImtmbGEiDWtleUFFR3JhcGhpY09iamVjdHM9ImtncnMiDWtleUFFSW1hZ2VRdWFsaXR5\nPSJncXVhIg1rZXlBRUluc2VydEhlcmU9Imluc2giDWtleUFFS2V5Rm9ybXM9ImtleWYi\nDWtleUFFS2V5d29yZD0ia3l3ZCINa2V5QUVMaW5lQXJyb3c9ImxuYXIiDWtleUFFTmFt\nZT0ia25hbSINa2V5QUVOZXdFbGVtZW50TG9jPSJrbmVsIg1rZXlBRU9iamVjdD0ia29i\naiINa2V5QUVPYmplY3RDbGFzcz0ia29jbCINa2V5QUVPZmZTdHlsZXM9Im9mc3QiDWtl\neUFFT25TdHlsZXM9Im9uc3QiDWtleUFFUGFyYW1ldGVycz0icHJtcyINa2V5QUVQYXJh\nbUZsYWdzPSJwbWZnIg1rZXlBRVBlbkNvbG9yPSJrcGNsIg1rZXlBRVBlblBhdHRlcm49\nImtwYXQiDWtleUFFUGVuV2lkdGg9Imtwd2QiDWtleUFFUGl4ZWxEZXB0aD0ia3BkcCIN\na2V5QUVQaXhNYXBNaW51cz0ia3BtbSINa2V5QUVQTVRhYmxlPSJrcG10Ig1rZXlBRVBv\naW50TGlzdD0ia3B0cyINa2V5QUVQb2ludFNpemU9ImtwdHoiDWtleUFFUG9zaXRpb249\nImtwb3MiDWtleUFFUHJvcERhdGE9InByZHQiDWtleUFFUHJvcGVydGllcz0icXBybyIN\na2V5QUVQcm9wZXJ0eT0ia3BycCINa2V5QUVQcm9wRmxhZ3M9InByZmciDWtleUFFUHJv\ncElEPSJwcm9wIg1rZXlBRVByb3RlY3Rpb249ImtwdGMiDWtleUFFUmVuZGVyQXM9Imty\nZW4iDWtleUFFUmVxdWVzdGVkVHlwZT0icnR5cCINa2V5QUVSZXN1bHQ9Ii0tLS0iDWtl\neUFFUmVzdWx0SW5mbz0icnNpbiINa2V5QUVSb3RhdGlvbj0ia3JvdCINa2V5QUVSb3RQ\nb2ludD0ia3J0cCINa2V5QUVSb3dMaXN0PSJrcmxzIg1rZXlBRVNhdmVPcHRpb25zPSJz\nYXZvIg1rZXlBRVNjYWxlPSJrc2NsIg1rZXlBRVNjcmlwdFRhZz0ia1N0ZyINa2V5QUVT\naG93V2hlcmU9InNob3ciDWtleUFFU3RhcnRBbmdsZT0ia3N0YSINa2V5QUVTdGFydFBv\naW50PSJrc3RyIg1rZXlBRVN0eWxlcz0ia3N0eSINa2V5QUVUZXh0PSJrdHh0Ig1rZXlB\nRVRleHRDb2xvcj0ia3R4YyINa2V5QUVUZXh0Rm9udD0ia3R4ZiINa2V5QUVUZXh0UG9p\nbnRTaXplPSJrdHBzIg1rZXlBRVRleHRTdHlsZXM9InR4dHMiDWtleUFFVGhlVGV4dD0i\ndGh0eCINa2V5QUVUcmFuc2Zlck1vZGU9Imt0cm4iDWtleUFFVHJhbnNsYXRpb249Imt0\ncmwiDWtleUFFVHJ5QXNTdHJ1Y3RHcmFmPSJ0b29nIg1rZXlBRVVuaWZvcm1TdHlsZXM9\nInVuaXMiDWtleUFFVXBkYXRlT249Imt1cGQiDWtleUFFVXNlclRlcm09InV0cm0iDWtl\neUFFV2luZG93PSJ3bmR3Ig1rZXlBRVdyaXRpbmdDb2RlPSJ3cmNkIg1rZXlNaXNjZWxs\nYW5lb3VzPSJmbXNjIg1rZXlTZWxlY3Rpb249ImZzZWwiDWtleVdpbmRvdz0ia3duZCIN\ncEFyY0FuZ2xlPSJwYXJjIg1wQmFja2dyb3VuZENvbG9yPSJwYmNsIg1wQmFja2dyb3Vu\nZFBhdHRlcm49InBicHQiDXBCZXN0VHlwZT0icGJzdCINcEJvdW5kcz0icGJuZCINcENs\nYXNzPSJwY2xzIg1wQ2xpcGJvYXJkPSJwY2xpIg1wQ29sb3I9ImNvbHIiDXBDb2xvclRh\nYmxlPSJjbHRiIg1wQ29ybmVyQ3VydmVIZWlnaHQ9InBjaGQiDXBDb3JuZXJDdXJ2ZVdp\nZHRoPSJwY3dkIg1wRGFzaFN0eWxlPSJwZHN0Ig1wRGVmYXVsdFR5cGU9ImRlZnQiDXBE\nZWZpbml0aW9uUmVjdD0icGRydCINcEVuYWJsZWQ9ImVuYmwiDXBFbmRQb2ludD0icGVu\nZCINcEZpbGxDb2xvcj0iZmxjbCINcEZpbGxQYXR0ZXJuPSJmbHB0Ig1wRm9udD0iZm9u\ndCINcEZvcm11bGE9InBmb3IiDXBHcmFwaGljT2JqZWN0cz0iZ29icyINcEhhc0Nsb3Nl\nQm94PSJoY2xiIg1wSGFzVGl0bGVCYXI9InB0aXQiDXBJbmRleD0icGlkeCINcEluc2Vy\ndGlvbkxvYz0icGlucyINcElzRmxvYXRpbmc9ImlzZmwiDXBJc0Zyb250UHJvY2Vzcz0i\ncGlzZiINcElzTW9kYWw9InBtb2QiDXBJc01vZGlmaWVkPSJpbW9kIg1wSXNSZXNpemFi\nbGU9InByc3oiDXBJc1N0YXRpb25lcnlQYWQ9InBzcGQiDXBJc1pvb21hYmxlPSJpc3pt\nIg1wSXNab29tZWQ9InB6dW0iDXBJdGVtTnVtYmVyPSJpdG1uIg1wSnVzdGlmaWNhdGlv\nbj0icGpzdCINcExpbmVBcnJvdz0iYXJybyINcE1lbnVJRD0ibW5pZCINcE5hbWU9InBu\nYW0iDXBOZXdFbGVtZW50TG9jPSJwbmVsIg1wUGVuQ29sb3I9InBwY2wiDXBQZW5QYXR0\nZXJuPSJwcHBhIg1wUGVuV2lkdGg9InBwd2QiDXBQaXhlbERlcHRoPSJwZHB0Ig1wUG9p\nbnRMaXN0PSJwdGx0Ig1wUG9pbnRTaXplPSJwdHN6Ig1wUHJvdGVjdGlvbj0icHBybyIN\ncFJvdGF0aW9uPSJwcm90Ig1wU2NhbGU9InBzY2wiDXBTY3JpcHRUYWc9InBzY3QiDXBT\nZWxlY3Rpb249InNlbGUiDXBTdGFydEFuZ2xlPSJwYW5nIg1wU3RhcnRQb2ludD0icHN0\ncCINcFRleHRDb2xvcj0icHR4YyINcFRleHRGb250PSJwdHhmIg1wVGV4dEl0ZW1EZWxp\nbWl0ZXJzPSJ0eGRsIg1wVGV4dFBvaW50U2l6ZT0icHRwcyINcFRleHRTdHlsZXM9InR4\nc3QiDXBUcmFuc2Zlck1vZGU9InBwdG0iDXBUcmFuc2xhdGlvbj0icHRycyINcFVuaWZv\ncm1TdHlsZXM9InVzdGwiDXBVcGRhdGVPbj0icHVwZCINcFVzZXJTZWxlY3Rpb249InB1\nc2wiDXBWZXJzaW9uPSJ2ZXJzIg1wVmlzaWJsZT0icHZpcyINdHlwZUFFVGV4dD0idFRY\nVCINdHlwZUFwcGxlRXZlbnQ9IkFFVlQiDXR5cGVBcmM9InRhcmMiDXR5cGVCZXN0PSJi\nZXN0Ig10eXBlQ2VsbD0iY2VsbCINdHlwZUNsYXNzSW5mbz0iY2xpbiINdHlwZUNvbG9y\nVGFibGU9ImNscnQiDXR5cGVDb2x1bW49ImNvbG0iDXR5cGVEYXNoU3R5bGU9InRkYXMi\nDXR5cGVEYXRhPSJ0ZHRhIg10eXBlRHJhd2luZ0FyZWE9InRkYXIiDXR5cGVFbGVtSW5m\nbz0iZWxpbiINdHlwZUVQUz0iRVBTICINdHlwZUV2ZW50SW5mbz0iZXZpbiINdHlwZUZp\nbmRlcldpbmRvdz0iZndpbiINdHlwZUZpeGVkPSJmaXhkIg10eXBlR3JhcGhpY0xpbmU9\nInRnbG4iDXR5cGVHcmFwaGljVGV4dD0iZ3R4dCINdHlwZUdyb3VwZWRHcmFwaGljPSJ0\nZ3J1Ig10eXBlSW5zZXJ0aW9uTG9jPSJpbnNsIg10eXBlSW50bFRleHQ9Iml0eHQiDXR5\ncGVJbnRsV3JpdGluZ0NvZGU9ImludGwiDXR5cGVPdmFsPSJ0b3ZsIg10eXBlUGFyYW1J\nbmZvPSJwbWluIg10eXBlUGljdD0iUElDVCINdHlwZVBpeGVsTWFwPSJ0cGl4Ig10eXBl\nUGl4TWFwTWludXM9InRwbW0iDXR5cGVQb2x5Z29uPSJ0cG9sIg10eXBlUHJvcEluZm89\nInBpbmYiDXR5cGVRRFBvaW50PSJRRHB0Ig10eXBlUURSZWN0YW5nbGU9InFkcnQiDXR5\ncGVSZWN0YW5nbGU9InJjdGUiDXR5cGVSR0IxNj0idHIxNiINdHlwZVJHQjk2PSJ0cjk2\nIg10eXBlUkdCQ29sb3I9IlJHQiAiDXR5cGVSb3RhdGlvbj0idHJvdCINdHlwZVJvdW5k\nZWRSZWN0YW5nbGU9InRyZHIiDXR5cGVSb3c9InJvdyAiDXR5cGVTY3JhcFN0eWxlcz0i\nc3R5bCINdHlwZVN0eWxlZFRleHQ9IlNUWFQiDXR5cGVUYWJsZT0idGFibCINdHlwZVRl\neHRTdHlsZXM9InRzdHkiDXR5cGVUSUZGPSJUSUZGIg0iInpvb21Jbj03DSIiem9vbU91\ndD04DWVudW1TYXZlT3B0aW9ucz0ic2F2byINZW51bVBvc2l0aW9uPSJwb3NpIg1lbnVt\nS2V5Rm9ybT0ia2ZybSINZW51bVN0eWxlPSJzdHlsIg1lbnVtSnVzdGlmaWNhdGlvbj0i\nanVzdCINZW51bVByb3RlY3Rpb249InBydG4iDWVudW1UcmFuc2Zlck1vZGU9InRyYW4i\nDWVudW1BcnJvd3M9ImFycm8iDWVudW1RdWFsaXR5PSJxdWFsIg1rQUVJbmRleD0iaW5k\neCINa0FFTmFtZT0ibmFtZSINa0FFSWRlbnRpZmllcj0iaWQgICINa0FFUmVxdWlyZWRT\ndWl0ZT0icmVxZCINa0FFVGV4dFN1aXRlPSJURVhUIg1rQUVRdWlja0RyYXdTdWl0ZT0i\ncWRydyINa0FFUURTdXBwbGVtZW50YWxTdWl0ZT0icWRzcCINa0FFVGFibGVTdWl0ZT0i\ndGJscyIA/+0ACwBDb3JlU2FtcGxlAP/VABEAQ29yZVNhbXBsZSBTdWl0ZQBwcmVmZXJl\nbmNlAG9uIG1vdXNlVXANaWYgd29yZCAxIHRvIDIgb2YgbG9uZyBuYW1lIG9mIHRhcmdl\ndCA9ICJjYXJkIGJ1dHRvbiIgdGhlbg1wdXQgaWQgb2YgdGFyZ2V0IGludG8gaQ1wdXQg\nUHJlZmVyQ2xpZW50TGFuZ0J1dHRvbklEKCkgaW50byBjbGllbnRMaXN0DXB1dCBQcmVm\nZXJTZXJ2ZXJMYW5nQnV0dG9uSUQoKSBpbnRvIHNlcnZlckxpc3QNaWYgQ2hlY2tHcm91\ncChpLFByZWZlclNlcnZlckxhbmdCdXR0b25JRCgpKSB0aGVuDWVsc2UgaWYgQ2hlY2tH\ncm91cChpLFByZWZlckNsaWVudExhbmdCdXR0b25JRCgpKSB0aGVuDWVsc2UNcGFzcyBt\nb3VzZVVwDWVuZCBpZg1zZXQgaGlsaXRlIG9mIGNhcmQgYnV0dG9uIGlkIGkgdG8gdHJ1\nZQ1lbmQgaWYNZW5kIG1vdXNlVXANDWZ1bmN0aW9uIENoZWNrR3JvdXAgdGhlTnVtLHRo\nZUxpc3QNcHV0IG51bWJlciBvZiBpdGVtcyBpbiB0aGVMaXN0IGludG8gbg1yZXBlYXQg\nd2l0aCBpID0gMSB0byBuDWlmIGl0ZW0gaSBvZiB0aGVMaXN0ID0gdGhlTnVtIHRoZW4N\ncmVwZWF0IHdpdGggaiA9IDEgdG8gbg1zZXQgaGlsaXRlIG9mIGNhcmQgYnV0dG9uIGlk\nIChpdGVtIGogb2YgdGhlTGlzdCkgdG8gZmFsc2UNZW5kIHJlcGVhdA1yZXR1cm4gdHJ1\nZQ1lbmQgaWYNZW5kIHJlcGVhdA1yZXR1cm4gZmFsc2UNZW5kIENoZWNrR3JvdXANDWZ1\nbmN0aW9uIFdoaWNoSW5Hcm91cCB0aGVMaXN0DXB1dCBudW1iZXIgb2YgaXRlbXMgaW4g\ndGhlTGlzdCBpbnRvIG4NcmVwZWF0IHdpdGggaSA9IDEgdG8gbg1pZiBoaWxpdGUgb2Yg\nY2FyZCBidXR0b24gaWQgKGl0ZW0gaSBvZiB0aGVMaXN0KSB0aGVuDXJldHVybiBpdGVt\nIGkgb2YgdGhlTGlzdA1lbmQgaWYNZW5kIHJlcGVhdA1lbmQgV2hpY2hJbkdyb3VwDQ1v\nbiBjbG9zZUNhcmQNZ2xvYmFsIGNsaWVudExhbmcsY2xpZW50SGFzR2x1ZSxzZXJ2ZXJM\nYW5nDXB1dCBjbGllbnRMYW5nIGludG8gY3VyU2NyaXB0DXB1dCBzZXJ2ZXJMYW5nIGlu\ndG8gY3VyU2VydmVyDXB1dCBjbGllbnRIYXNHbHVlIGludG8gY3VyR2x1ZQ1DaGVja1By\nZWZlcmVuY2UNaWYgKGN1clNjcmlwdCA8PiBjbGllbnRMYW5nKSB0aGVuDXB1dCB0aGUg\nc2NyaXB0IG9mIGNhcmQgYnV0dG9uIGlkIFdoaWNoSW5Hcm91cChQcmVmZXJDbGllbnRM\nYW5nQnV0dG9uSUQoKSkgaW50byBidG5TY3JpcHQNcHV0IFNlYXJjaChidG5TY3JpcHQs\nICJmdW5jdGlvbiBDbGllbnRUZW1wbGF0ZSIsIHRydWUsIGZhbHNlKSBpbnRvIGxpbmVM\naXN0DXB1dCBpdGVtIDEgb2YgbGluZUxpc3QgaW50byBjbG50VG1wbFN0YXJ0DXB1dCBT\nZWFyY2goYnRuU2NyaXB0LCAiZnVuY3Rpb24gQ2xpZW50U2FtcGxlIiwgdHJ1ZSwgZmFs\nc2UpIGludG8gbGluZUxpc3QNcHV0IGl0ZW0gMSBvZiBsaW5lTGlzdCBpbnRvIGNsbnRT\nbXBsU3RhcnQNcHV0IHRoZSBzY3JpcHQgb2YgYmtnbmQgImV2ZW50cyIgaW50byBvcmdT\nY3JpcHQNcHV0IFNlYXJjaChvcmdTY3JpcHQsICItLSBsYW5ndWFnZSIsIHRydWUsIGZh\nbHNlKSBpbnRvIGxpbmVMaXN0DXB1dCBpdGVtIDEgb2YgbGluZUxpc3QgaW50byB4DWlm\nIHggPiAwIHRoZW4NcHV0IHJldHVybiAmIChsaW5lIGNsbnRUbXBsU3RhcnQgdG8gY2xu\ndFNtcGxTdGFydC0xIG9mIGJ0blNjcmlwdCkgwg1pbnRvIGxpbmUgeCsxIHRvIDMwMDAw\nIG9mIG9yZ1NjcmlwdA1zZXQgdGhlIHNjcmlwdCBvZiBia2duZCAiZXZlbnRzIiB0byBv\ncmdTY3JpcHQNZW5kIGlmDWRlbGV0ZSBsaW5lIDEgdG8gKGNsbnRTbXBsU3RhcnQtMSkg\nb2YgYnRuU2NyaXB0DXB1dCB0aGUgc2NyaXB0IG9mIGNhcmQgYnV0dG9uICJjbGllbnQg\nY29kZSIgb2YgY2FyZCAiTWFpbk1lbnUiIGludG8gb3JnU2NyaXB0DXB1dCBTZWFyY2go\nb3JnU2NyaXB0LCAiLS0gbGFuZ3VhZ2UiLCB0cnVlLCBmYWxzZSkgaW50byBsaW5lTGlz\ndA1wdXQgaXRlbSAxIG9mIGxpbmVMaXN0IGludG8geA1pZiB4ID4gMCB0aGVuDXB1dCBy\nZXR1cm4gJiBidG5TY3JpcHQgaW50byBsaW5lIHgrMSB0byAzMDAwMCBvZiBvcmdTY3Jp\ncHQNc2V0IHRoZSBzY3JpcHQgb2YgY2FyZCBidXR0b24gImNsaWVudCBjb2RlIiBvZiBj\nYXJkICJNYWluTWVudSIgdG8gb3JnU2NyaXB0DWVuZCBpZg1lbmQgaWYNaWYgKGN1clNl\ncnZlciA8PiBzZXJ2ZXJMYW5nKSB0aGVuDXB1dCB0aGUgc2NyaXB0IG9mIGNhcmQgYnV0\ndG9uIGlkIFdoaWNoSW5Hcm91cChQcmVmZXJTZXJ2ZXJMYW5nQnV0dG9uSUQoKSkgaW50\nbyBidG5TY3JpcHQNcHV0IFNlYXJjaChidG5TY3JpcHQsICJmdW5jdGlvbiBTZXJ2ZXJT\nYW1wbGUiLCB0cnVlLCBmYWxzZSkgaW50byBsaW5lTGlzdA1wdXQgaXRlbSAxIG9mIGxp\nbmVMaXN0IGludG8geA1kZWxldGUgbGluZSAxIHRvIHgtMSBvZiBidG5TY3JpcHQNcHV0\nIHRoZSBzY3JpcHQgb2YgY2FyZCBidXR0b24gInNlcnZlciBjb2RlIiBvZiBjYXJkICJN\nYWluTWVudSIgaW50byBvcmdTY3JpcHQNcHV0IFNlYXJjaChvcmdTY3JpcHQsICItLSBs\nYW5ndWFnZSIsIHRydWUsIGZhbHNlKSBpbnRvIGxpbmVMaXN0DXB1dCBpdGVtIDEgb2Yg\nbGluZUxpc3QgaW50byB4DWlmIHggPiAwIHRoZW4NcHV0IHJldHVybiAmIGJ0blNjcmlw\ndCBpbnRvIGxpbmUgeCsxIHRvIDMwMDAwIG9mIG9yZ1NjcmlwdA1zZXQgdGhlIHNjcmlw\ndCBvZiBjYXJkIGJ1dHRvbiAic2VydmVyIGNvZGUiIG9mIGNhcmQgIk1haW5NZW51IiB0\nbyBvcmdTY3JpcHQNZW5kIGlmDWVuZCBpZg1pZiAoY3VyU2NyaXB0IDw+IGNsaWVudExh\nbmcpIG9yIChjbGllbnRIYXNHbHVlIDw+IGN1ckdsdWUpIHRoZW4NUmVEb1NjcmlwdA1l\nbmQgaWYNcGFzcyBjbG9zZUNhcmQNZW5kIGNsb3NlQ2FyZA1mdW5jdGlvbiBDbGllbnRU\nZW1wbGF0ZQAAAAEgQk1BUAAAC4sAAAAAAAAAAAABAAAAAAAAAVYCAAAAAAAAAAAAABcA\nuAFTAf4AAAAAAAAAAAAAAAAAAADcjBOA4REg4QaFiuEVEOEG4RUw4Qa4ho4TgOERIOEG\njRNA4REI4Qa/gb+Bv4G/gb+Bv4GkgYkfIOEMgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGG\ngYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaBhoGGgYaB\nhoGGgYaBhoGGpIHiEx5EAfABgOITETVAAICK4gTBMcyVmMADGByJ4hMewUoSliUgRKSg\n4hMUwXmSlCHgRKSY4hMSwUBSlCUARKSE4hMRwTOMdBjAQxi4geITHkQAAABgQ0FSRAAA\nIwkAAAAAAAAAAEAAAAAAAAAAAAAAAAAAOvAAABPAAAAAAgAAAAAAAAAAAABzdWl0ZSBP\nSFBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgQ0FSRAAAIaAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAOvAAABPAAAAAAAAAAAAABAAAAIAAAgAPAFJlcXVpcmVk\nIFN1aXRlAAADAC0ARXZlbnRzIHRoYXQgZXZlcnkgYXBwbGljYXRpb24gc2hvdWxkIHN1\ncHBvcnQAABgABQByZXFkAAAEACwAT3BlbixhZXZ0b2RvYw1QcmludCxhZXZ0cGRvYw1R\ndWl0LGFldnRxdWl0DXN1aXRlIHJlcWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAaBDQVJEAAAmtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAE8AAAAAAAAAA\nAAAGAAABSgACAA4ATXkgQ29yZSBTdWl0ZQADACcAU3VpdGUgdGhhdCBhcHBsaWVzIHRv\nIGFsbCBhcHBsaWNhdGlvbnMAABgABQBzbXBsAAAKAB4AQXBwbGljYXRpb24sY2FwcA1X\naW5kb3csY3dpbg0ADgALAHBvc2kNa2ZybQ0AAAQAywBDbG9uZSxjb3JlY2xvbg1DbG9z\nZSxjb3JlY2xvcw1Db3VudCxjb3JlY250ZQ1DcmVhdGUsY29yZWNyZWwNRGVsZXRlLGNv\ncmVkZWxvDUV4aXN0cyxjb3JlZG9leA1DbGFzcyBJbmZvLGNvcmVxb2JqDUdldCBEYXRh\nLGNvcmVnZXRkDURhdGEgU2l6ZSxjb3JlZHNpeg1FdmVudCBJbmZvLGNvcmVndGVpDU1v\ndmUsY29yZW1vdmUNU2V0IERhdGEsY29yZXNldGQNAHN1aXRlIHNtcGwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABQENBUkQAABSxAAAAAAAAIElAAAAAAAAAAAAAAAAAADrwAAAV\n2AAAAAgAAAAAAAkAAADwAAEABQAqKioqAAAKACIALCxudWxsLDAsDSwsLDAsDSwsLDAs\nDSwsLDAsDSwsLDAsADEAAgAxAAMABQAqKioqAAAwAEoARnVuY3Rpb24gQUUoDSBkaXJl\nY3RQYXJhbTpBRURlc2M7IA0gOkFFRGVzYzsgDSA6QUVEZXNjOyANIDpBRURlc2MpOk9T\nRXJyOwAFAD+ABgAAAA9UaGlzIGlzIGEgdGVtcGxhdGUgY2FyZCBmb3IgdGhpcyBiYWNr\nZ3JvdW5k0WRvbid0IHVzZSBpdCEAAAYABgByZXBseQAIAAUAbnVsbAAABwAFAHJwbHkA\nZXZlbnQgICAgICAgICAsAAAAAAAAAAAAAAAAAABgQk1BUAAAIEkAAAAAAAAAAAABAAAA\nAAAAAVYCAADOAd0A1gHnAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAjSMBIAMjAUADFPAD\nFDADFCgDIwGwAyMD0gMjB48D//8AAAEAQ0FSRAAAIm8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAOvAAABXYAAAAAAAAAAAACQAAALoAAQAFAHJlcWQAAAMABQBhZXZ0AAAKADUALCxu\ndWxsLDMyNzY4LA0sLGFsaXMsMjA0ODAsTGlzdCBvZiBkb2N1bWVudHMgdG8gb3BlbgAA\nNwACADEAAgAFAE9wZW4AAAUAJQBPcGVuIHRoZSBzcGVjaWZpZWQgbGlzdCBvZiBkb2N1\nbWVudHMAAAQABQBvZG9jAAAGAA8AbWlzc2luZ05hbWUoOCkAADAADwBPcGVuIMINICBw\nYXJhbQBldmVudCBhZXZ0b2RvYwAAAAABIENBUkQAACRiAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAADrwAAAV2AAAAAAAAAAAAAkAAAC8AAEABQByZXFkAAADAAUAYWV2dAAACgA2ACws\nbnVsbCwzMjc2OCwNLCxhbGlzLDE2Mzg0LExpc3Qgb2YgZG9jdW1lbnRzIHRvIHByaW50\nADcAAgAxAAIABgBQcmludAAFACYAUHJpbnQgdGhlIHNwZWNpZmllZCBsaXN0IG9mIGRv\nY3VtZW50cwAEAAUAcGRvYwAABgARAG1pc3NpbmdOYW1lKDIxNCkAADAAEABQcmludCDC\nDSAgcGFyYW1ldmVudCBhZXZ0cGRvYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAABAENBUkQAACVvAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAAAAAA\nAAkAAACgAAEABQByZXFkAAADAAUAYWV2dAAACgA4ACwsbnVsbCwzMjc2OCwNLCxudWxs\nLDM2ODY0LE5vIGRpcmVjdCBwYXJhbWV0ZXIgcmVxdWlyZWQANwACADEAAgAFAFF1aXQA\nAAUAEQBRdWl0IGFwcGxpY2F0aW9uAAAEAAUAcXVpdAAABgARAG1pc3NpbmdOYW1lKDM5\nMikAADAABQBRdWl0AGV2ZW50IGFldnRxdWl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAASBDQVJEAAAn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAFdgAAAAAAAAA\nAAAIAAAA1gABAAUAc21wbAAAAwAFAGNvcmUAAAoAXQAsLG9iaiAsMCwNLCxvYmogLDQw\nOTYsVGhlIG9iamVjdCB0byBjbG9uZQ1UbyxpbnNoLGluc2wsMzI3NjgsVGhlIG5ldyBs\nb2NhdGlvbiBmb3IgdGhlIG9iamVjdAAAAgAGAENsb25lAAUAEABDbG9uZSBhbiBvYmpl\nY3QABAAFAGNsb24AAAYAEQBtaXNzaW5nTmFtZSgzODMpAAAwAB4AQ2xvbmUgwg0gIHBh\ncmFtIMINIFtUbyBwYXJhbV1ldmVudCBjb3JlY2xvbgAAAAAAAAAAAOBDQVJEAAAoTgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAFdgAAAAAAAAAAAAIAAAAmAABAAUAc21wbAAA\nAwAFAGNvcmUAAAoALgAsLG51bGwsMzI3NjgsDSwsb2JqICw0MDk2LFRoZSBvYmplY3Qg\ndG8gY2xvc2UAAgAGAENsb3NlAAUAEABDbG9zZSBhbiBvYmplY3QABAAFAGNsb3MAAAYA\nEQBtaXNzaW5nTmFtZSgxMzUpAAAwABAAQ2xvc2Ugwg0gIHBhcmFtZXZlbnQgY29yZWNs\nb3MAAAAAAAABgENBUkQAACljAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAA\nAAAAAAgAAAEqAAEABQBzbXBsAAADAAUAY29yZQAACgB5ACwsbG9uZywwLA0sLG9iaiAs\nMCxUaGUgb2JqZWN0IHdob3NlIGVsZW1lbnRzIGFyZSB0byBiZSBjb3VudGVkDUNsYXNz\nLGtvY2wsdHlwZSwwLFRoZSBjbGFzcyBvZiB0aGUgZWxlbWVudHMgdG8gYmUgY291bnRl\nZAAAAgAGAENvdW50AAUARQBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBh\nIHBhcnRpY3VsYXIgY2xhc3Mgd2l0aGluIGFuIG9iamVjdAAABAAFAGNudGUAAAYAEQBt\naXNzaW5nTmFtZSgxNTYpAAAwAB8AQ291bnQgwg0gIHBhcmFtIMINIENsYXNzIHBhcmFt\nAGV2ZW50IGNvcmVjbnRlAAAAAAAAAAAAAAAAAAAAAAAAAAACIENBUkQAACoTAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAAAAAAAAgAAAHGAAEABQBzbXBsAAADAAUA\nY29yZQAACgESACwsb2JqICwwLA0sLG51bGwsMzY4NjQsDU5ldyxrb2NsLHR5cGUsMCxU\naGUgY2xhc3Mgb2YgdGhlIG5ldyBlbGVtZW50DUF0LGluc2gsaW5zbCwzMjc2OCxUaGUg\nbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50DVdpdGggRGF0YSxk\nYXRhLCoqKiosMzI3NjgsVGhlIGluaXRpYWwgZGF0YSBmb3IgdGhlIGVsZW1lbnQNV2l0\naCBQcm9wZXJ0aWVzLHByZHQscmVjbywzMjc2OCxUaGUgaW5pdGlhbCBkYXRhIGZvciB0\naGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAACAAcAQ3JlYXRlAAAFABUAQ3JlYXRl\nIGEgbmV3IGVsZW1lbnQAAAQABQBjcmVsAAAGABEAbWlzc2luZ05hbWUoNDkxKQAAMABS\nAENyZWF0ZSDCDSBOZXcgcGFyYW0gwg0gW0F0IHBhcmFtXSDCDSBbV2l0aCBEYXRhIHBh\ncmFtXSDCDSBbV2l0aCBQcm9wZXJ0aWVzIHBhcmFtXWV2ZW50IGNvcmVjcmVsAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAQBDQVJEAAArnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6\n8AAAFdgAAAAAAAAAAAAIAAAAsAABAAUAc21wbAAAAwAFAGNvcmUAAAoAMAAsLG51bGws\nMzI3NjgsDSwsb2JqICw0MDk2LFRoZSBlbGVtZW50IHRvIGRlbGV0ZQACAAcARGVsZXRl\nAAAFACEARGVsZXRlIGFuIGVsZW1lbnQgZnJvbSBhbiBvYmplY3QAAAQABQBkZWxvAAAG\nABEAbWlzc2luZ05hbWUoNDU2KQAAMAARAERlbGV0ZSDCDSAgcGFyYW0AZXZlbnQgY29y\nZWRlbG8AAAAAAAAAAAAAAAAAAAEAQ0FSRAAALLMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nOvAAABXYAAAAAAAAAAAACAAAAKAAAQAFAHNtcGwAAAMABQBjb3JlAAAKACoALCxib29s\nLDAsDSwsb2JqICwwLFRoZSBvYmplY3QgaW4gcXVlc3Rpb24AAgAHAEV4aXN0cwAABQAZ\nAFRlbGwgaWYgYW4gb2JqZWN0IGV4aXN0cwAABAAFAGRvZXgAAAYAEABtaXNzaW5nTmFt\nZSg2MikAMAARAEV4aXN0cyDCDSAgcGFyYW0AZXZlbnQgY29yZWRvZXgAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAABoENBUkQAAC4mAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADrwAAAV2AAAAAAAAAAAAAgAAAFAAAEABQBzbXBsAAADAAUAY29yZQAACgCkACwsY2xp\nbiwwLA0sLHR5cGUsMzI3NjgsVGhlIG9iamVjdCBjbGFzcyBhYm91dCB3aGljaCBpbmZv\ncm1hdGlvbiBpcyByZXF1ZXN0ZWQNSW4sd3JjZCxpbnRsLDMyNzY4LFRoZSBodW1hbiBs\nYW5ndWFnZSBhbmQgc2NyaXB0IHN5c3RlbSBpbiB3aGljaCB0byByZXR1cm4gaW5mb3Jt\nYXRpb24AAgALAENsYXNzIEluZm8AAAUAJgBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYW4g\nb2JqZWN0IGNsYXNzAAQABQBxb2JqAAAGABEAbWlzc2luZ05hbWUoMjUxKQAAMAAlAENs\nYXNzIEluZm8gwg0gWyBwYXJhbV0gwg0gW0luIHBhcmFtXQBldmVudCBjb3JlcW9iagAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgQ0FSRAAAL7oAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAOvAAABXYAAAAAAAAAAAACAAAARIAAQAFAHNtcGwAAAMABQBjb3JlAAAK\nAIUALCwqKioqLDAsDSwsb2JqICwwLFRoZSBvYmplY3Qgd2hvc2UgZGF0YSBpcyB0byBi\nZSByZXR1cm5lZA1BcyxydHlwLHR5cGUsNDkxNTIsVGhlIGRlc2lyZWQgdHlwZXMgZm9y\nIHRoZSBkYXRhLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlAAACAAkAR2V0IERhdGEAAAUA\nGwBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAAABAAFAGdldGQAAAYAEQBtaXNzaW5n\nTmFtZSgyNTIpAAAwACEAR2V0IERhdGEgwg0gIHBhcmFtIMINIFtBcyBwYXJhbV0AZXZl\nbnQgY29yZWdldGQAAAAAAAAAAAAAAAABYENBUkQAADAsAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAADrwAAAV2AAAAAAAAAAAAAgAAAEYAAEABQBzbXBsAAADAAUAY29yZQAACgCCACws\nbG9uZywwLA0sLG9iaiAsMCxUaGUgb2JqZWN0IHdob3NlIGRhdGEgc2l6ZSBpcyB0byBi\nZSByZXR1cm5lZA1BcyxydHlwLHR5cGUsMzI3NjgsVGhlIGRhdGEgdHlwZSBmb3Igd2hp\nY2ggdGhlIHNpemUgaXMgY2FsY3VsYXRlZAACAAoARGF0YSBTaXplAAUAJgBSZXR1cm4g\ndGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gb2JqZWN0AAQABQBkc2l6AAAGABEAbWlzc2lu\nZ05hbWUoMzk0KQAAMAAiAERhdGEgU2l6ZSDCDSAgcGFyYW0gwg0gW0FzIHBhcmFtXWV2\nZW50IGNvcmVkc2l6AAAAAAAAAaBDQVJEAAAxbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6\n8AAAFdgAAAAAAAAAAAAIAAABWAABAAUAc21wbAAAAwAFAGNvcmUAAAoAsgAsLGV2aW4s\nMTYzODQsDSwsdHlwZSwwLFRoZSBldmVudCBjbGFzcyBvZiB0aGUgQXBwbGUgZXZlbnRz\nIGZvciB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24NSW4sd3JjZCxpbnRsLDMyNzY4\nLFRoZSBodW1hbiBsYW5ndWFnZSBhbmQgc2NyaXB0IHN5c3RlbSBpbiB3aGljaCB0byBy\nZXR1cm4gaW5mb3JtYXRpb24AAgALAEV2ZW50IEluZm8AAAUAMgBHZXQgaW5mb3JtYXRp\nb24gYWJvdXQgdGhlIEFwcGxlIGV2ZW50cyBpbiBhIHN1aXRlAAQABQBndGVpAAAGABEA\nbWlzc2luZ05hbWUoMzA3KQAAMAAjAEV2ZW50IEluZm8gwg0gIHBhcmFtIMINIFtJbiBw\nYXJhbV0AZXZlbnQgY29yZWd0ZWkAAAAAAAABIENBUkQAADLpAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADrwAAAV2AAAAAAAAAAAAAgAAADSAAEABQBzbXBsAAADAAUAY29yZQAACgBc\nACwsb2JqICwwLA0sLG9iaiAsNDA5NixUaGUgb2JqZWN0IHRvIG1vdmUNVG8saW5zaCxp\nbnNsLDMyNzY4LFRoZSBuZXcgbG9jYXRpb24gZm9yIHRoZSBvYmplY3QAAgAFAE1vdmUA\nAAUADwBNb3ZlIGFuIG9iamVjdAAABAAFAG1vdmUAAAYADwBtaXNzaW5nTmFtZSg3KQAA\nMAAdAE1vdmUgwg0gIHBhcmFtIMINIFtUbyBwYXJhbV0AZXZlbnQgY29yZW1vdmUAAAAA\nAAAAAAAAAAABIENBUkQAADPfAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAV2AAAAAAA\nAAAAAAgAAADOAAEABQBzbXBsAAADAAUAY29yZQAACgBMACwsbnVsbCwzMjc2OCwNLCxv\nYmogLDQwOTYsVGhlIG9iamVjdCB0byBjaGFuZ2UNVG8sZGF0YSwqKioqLDAsVGhlIG5l\ndyB2YWx1ZQACAAkAU2V0IERhdGEAAAUAFQBTZXQgYW4gb2JqZWN0J3MgZGF0YQAABAAF\nAHNldGQAAAYAEABtaXNzaW5nTmFtZSg3OCkAMAAfAFNldCBEYXRhIMINICBwYXJhbSDC\nDSBUbyBwYXJhbQBldmVudCBjb3Jlc2V0ZAAAAAAAAAAAAAAAAAAAAAAAwENBUkQAABfY\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAYZAAAAAcAAAAAAAQAAABoAAEABQAqKioq\nAAAFAD+ABgAAAA9UaGlzIGlzIGEgdGVtcGxhdGUgY2FyZCBmb3IgdGhpcyBiYWNrZ3Jv\ndW5k0WRvbid0IHVzZSBpdCEAADEAAgANAAoADwANLD8/Pz8sPz8/PywwLAAqKioqIGNs\nYXNzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgENBUkQAADSKAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAADrwAAAYZAAAAAAAAAAAAAYAAAEsAAEABQBzbXBsAAACAAwAQXBwbGlj\nYXRpb24AAwAFAGNhcHAAAAUAGABBIE1hY2ludG9zaCBhcHBsaWNhdGlvbgAKANMAQmVz\ndCBUeXBlLHBic3QsdHlwZSwwLFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlwZQ1DbGFzcyxw\nY2xzLHR5cGUsMCxUaGUgY2xhc3MNRGVmYXVsdCBUeXBlLGRlZnQsdHlwZSwwLFRoZSBk\nZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQ1Gcm9udG1vc3QscGlzZixib29sLDAsSXMgdGhp\ncyB0aGUgZnJvbnRtb3N0IGFwcGxpY2F0aW9uPw1OYW1lLHBuYW0saXR4dCwwLFRoZSBu\nYW1lAAAxAA8AY3dpbixpbmR4LG5hbWUAY2xhc3MgY2FwcAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADQENBUkQAADXUAAAAAAAAAAAAAAAAAAAAAAAAAAAAADrwAAAYZAAAAAAAAAAA\nAAUAAAL8AAEABQBzbXBsAAACAAcAV2luZG93AAADAAUAY3dpbgAABQAJAEEgd2luZG93\nAAAKAsoAQmVzdCBUeXBlLHBic3QsdHlwZSwwLFRoZSBiZXN0IGRlc2NyaXB0b3IgdHlw\nZQ1Cb3VuZHMscGJuZCxxZHJ0LDQwOTYsVGhlIGJvdW5kYXJ5IHJlY3RhbmdsZSBmb3Ig\ndGhlIHdpbmRvdw1DbGFzcyxwY2xzLHR5cGUsMCxUaGUgY2xhc3MNRGVmYXVsdCBUeXBl\nLGRlZnQsdHlwZSwwLFRoZSBkZWZhdWx0IGRlc2NyaXB0b3IgdHlwZQ1IYXMgQ2xvc2Ug\nQm94LGhjbGIsYm9vbCwwLERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgY2xvc2UgYm94Pw1I\nYXMgVGl0bGUgQmFyLHB0aXQsYm9vbCwwLERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgdGl0\nbGUgYmFyPw1JbmRleCxwaWR4LGxvbmcsNDA5NixUaGUgbnVtYmVyIG9mIHRoZSB3aW5k\nb3cNRmxvYXRpbmcsaXNmbCxib29sLDAsRG9lcyB0aGUgd2luZG93IGZsb2F0Pw1Nb2Rh\nbCxwbW9kLGJvb2wsMCxJcyB0aGUgd2luZG93IG1vZGFsPw1Qb3NpdGlvbixwcG9zLFFE\ncHQsNDA5NixUaGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdw1SZXNpemFibGUscHJzeixi\nb29sLDAsSXMgdGhlIHdpbmRvdyByZXNpemFibGU/DVpvb21hYmxlLGlzem0sYm9vbCww\nLElzIHRoZSB3aW5kb3cgem9vbWFibGU/DVpvb21lZCxwenVtLGJvb2wsNDA5NixJcyB0\naGUgd2luZG93IHpvb21lZD8NTmFtZSxwbmFtLGl0eHQsNDA5NixUaGUgdGl0bGUgb2Yg\ndGhlIHdpbmRvdw1WaXNpYmxlLHB2aXMsYm9vbCw0MDk2LElzIHRoZSB3aW5kb3cgdmlz\naWJsZT9jbGFzcyBjd2luAAAAAAAAAKBDQVJEAAAd8gAAAAAAAAAAQAAAAAAAAAAAAAAA\nAAA68AAAHoUAAAAIAAAAAAADAAAAVgABAAUAKioqKgAACgADACwsAAAJAD+ABgAAAA9U\naGlzIGlzIGEgdGVtcGxhdGUgY2FyZCBmb3IgdGhpcyBiYWNrZ3JvdW5k0WRvbid0IHVz\nZSBpdCEAKioqKiBlbnVtZXJhdGlvbiAAAAAAAAFAQ0FSRAAANk4AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAOvAAAB6FAAAAAAAAAAAAAwAAAPQAAQAFAHNtcGwAAAoA3ABCZWZvcmUs\nYmVmbyxCZWZvcmUgc3BlY2lmaWVkIG9iamVjdA1BZnRlcixhZnRlLEFmdGVyIHNwZWNp\nZmllZCBvYmplY3QNQmVnaW5uaW5nLGJnbmcsQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg\nc3BlY2lmaWVkIGNvbnRhaW5lcg1FbmQsZW5kICxBdCB0aGUgZW5kIG9mIHRoZSBzcGVj\naWZpZWQgY29udGFpbmVyDVJlcGxhY2UscnBsYyxSZXBsYWNpbmcgdGhlIHNwZWNpZmll\nZCBvYmplY3QAAwAFAHBvc2kAZW51bWVyYXRpb24gcG9zaQAAAAAAAAAAAQBDQVJEAAA3\ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA68AAAHoUAAAAAAAAAAAADAAAAngABAAUAc21w\nbAAACgCGAGluZGV4LGluZHgsa2V5Zm9ybSBkZXNpZ25hdGluZyBpbmRleGVkIGFjY2Vz\ncw1uYW1lZCxuYW1lLGtleWZvcm0gZGVzaWduYXRpbmcgbmFtZWQgYWNjZXNzDUlELGlk\nICxrZXlmb3JtIGRlc2lnbmF0aW5nIGlkZW50aWZlciBhY2Nlc3MAAwAFAGtmcm0AZW51\nbWVyYXRpb24ga2ZybQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgQ0FSRAAA\nGxYAAAAAAAAAAEAAAAAAAAAAAAAAAAAAOvAAAByvAAAABgAAAAAAAgAAAE4AAgAFACoq\nKioAAAgAP4AGAAAAD1RoaXMgaXMgYSB0ZW1wbGF0ZSBjYXJkIGZvciB0aGlzIGJhY2tn\ncm91bmTRZG9uJ3QgdXNlIGl0IQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB\nIFNUQkwAAAwGAAAAAAAAAAsAAAASAAAABAAAAAEAAAAA////////AAAAAAAAAAAABgAA\nAAEAAAAAAAMAAAAMAAAAAAAAAAAABwAAAAEAAAAA/////wAJAAAAAAAAAAAACQAAAAEA\nAAAAABUEAP//AAAAAAAAAAAACgAAAAEAAAAAABUCAP//AAAAAAAAAAAACwAAAAEAAAAA\nABUBAAAOAAAAAAAAAAAADAAAAAEAAAAAABUBAP//AAAAAAAAAAAADQAAAAEAAAAAABX/\n////AAAAAAAAAAAADwAAAAEAAAAA/////wASAAAAAAAAAAAAEAAAAAEAAAAAABUBAAAS\nAAAAAAAAAAAAEQAAAAEAAAAAAAT//wAMAAAAAAAAAAAAYEZUQkwAAA3vAAAAAAAAAAQA\nAAAAABVIZWx2ZXRpY2EAAANHZW5ldmEACgAAQ2hpY2FnbwAABE1vbmFjbwAAAAAAAABA\nAQoO6AAKAAAAAACBAEQCEn//f/8AAAAAAAABQFBSTlQAAEDZAAAAAAALAgoANAAwACAA\nIAAIAAgAAAAAAVYCAABIAQEAugAAAAAEAwkJBK7/+GcSQmcvLv/4LzxQUkZUTq0Oqh4f\nLy3Rmi8u//xCp3AkLwBCp06tIRIgbdGaKFBTbAEiQmc/LAEgPywBIk6tIJI5XwEgSG3R\nrk6tILpM3xCATl5OdU5W/+4vDEhu/+5OrQf6QqcvPAAAASROrSDSK1/RmmYCYEpIbv/u\nIG3RmiBQLwhwDi8ATq0mGiBt0ZooUEHsAA5D7cYaINkg2Tl8AEgAFjl8AQEAGEIsABpw\nAClAABxCLAAgQqwBIBt8AAHReihfTl5OdU5W//ZI5wMYQi3RekqtqhZmCE66/3pgAACS\nQqcvLaoWLzxQUk5UTq0PEiZfIAtmEnAAAAAAACBMb2dpY2FsIHMAAAAgVEFJTP////8A\nAAAAD051IIpyIGRldCBzbHV0yQ==\n\n\n--========================_26885646==_D--\n\n\n--========================_26885646==_--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.18.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!hookup!paladin.american.edu!auvm!GAROPA.NPT.NUWC.NAVY.MIL!gary\nComments: Gated by NETNEWS@AUVM.AMERICAN.EDU\nNewsgroups: rec.arts.bonsai\nX-Hpvue$Revision: 1.8 $\nMime-Version: 1.0\nContent-Type: Message/rfc822\nX-Vue-Mime-Level: 4\nMailer: Elm [revision: 70.85]\nMessage-ID: <BONSAI%95042607552288@CMS.CC.WAYNE.EDU>\nDate: Wed, 26 Apr 1995 07:50:09 EDT\nSender: Internet Bonsai Club <BONSAI@CMS.CC.WAYNE.EDU>\nFrom: Gary Bolstridge <gary@GAROPA.NPT.NUWC.NAVY.MIL>\nSubject: Re: Newsletters & Shows\nLines: 16\n\ncontent-type:text/plain;charset=us-ascii\nmime-version:1.0\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948401430.21002.4@Jeffreys-MacBook-Air.local>\n\nI have been reading the archived discussions and saw a lot of activity\naround Dec 1994 about starting a newsletter, posting area and club shows,\neven a judged show of trees!\n\nHas there been any progress on any of these subjects?\n\nWith all the current traffic of people traveling and requesting information\nfor certain dates, there is an obvious need for posting club shows. The FAQs\nmight need updating to list area vendors.\n\nAlso, has there been any progress on the listings of clubs?\n\nGary Bolstridge\nNewport (RI) Bonsai Club"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.19.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!agate!newsxfer.itd.umich.edu!news.itd.umich.edu!urkabox\nFrom: Peter Urka <pcu@umich.edu>\nNewsgroups: comp.sys.next.advocacy\nSubject: Re: The Once and Future OS\nDate: Sun, 7 May 95 16:21:03 GMT\nOrganization: Squirrel Bin\nLines: 32\nSender: preston@urkabox.chem.lsa.umich.edu\nDistribution: world\nMessage-ID: <07May1621030321@urkabox.chem.lsa.umich.edu>\nReferences: <3ohapq$h3b@gandalf.rutgers.edu> <3notqh$b52@ns2.ny.ubs.com> <3npoh0$2oo@news.blkbox.com> <3nqp09$r7t@ns2.ny.ubs.com>\nReply-To: pcu@umich.edu\nNNTP-Posting-Host: urkabox.chem.lsa.umich.edu\nMime-Version: 1.0\nContent-Type: multipart/mixed;\n\tboundary=\"NutNews,-a-nntpmtsonsguinrcfas,-boundary\"\nX-Newsreader: NutNews\n\n\n--NutNews,-a-nntpmtsonsguinrcfas,-boundary\nContent-Type: text/plain\n\n> NeXTSTEP, NeXTSTEP, NeXTSTEP...\n\nDon't you mean: \"NeXTstep, NeXTSTEP, NEXTSTEP...\"?\n\n--NutNews,-a-nntpmtsonsguinrcfas,-boundary\nContent-Type: application/postscript\nContent-Transfer-Encoding: base64\n\n\n--NutNews,-a-nntpmtsonsguinrcfas,-boundary--\nPeter Urka <pcu@umich.edu>\nDept. of Chemistry, Univ. of Michigan\nNewt-thought is right-thought.  Go Newt!\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.2.msg",
    "content": "Date: Thu,  6 Feb 1992 11:51:37 -0500 (EST)\nFrom: Nathaniel Borenstein <nsb>\nReply-To: Nathaniel Borenstein <nsb@thumper.bellcore.com>  (=?iso-8859-8?q?=ED=E5=EC=F9 =EF=E1 =E9=EC=E8=F4=F0?=)\nTo: Nathaniel Borenstein <nsb>\nSubject: test of =?iso-8859-8?q?=FA=E9=F8=E1=F2?= in mail headers\nContent-type:  text/plain; charset=iso-8859-8\nContent-Transfer-Encoding: quoted-printable\nMessage-Id: <635263359947544690.21002.0@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\nThis is an ordinary text message in which my name (=ED=E5=EC=F9 =EF=E1 =E9=EC=E8=F4=F0) \nis in Hebrew (=FA=E9=F8=E1=F2).  \n\nThere is Hebrew in the Subject and Reply-to headers, if viewed with metamail."
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.20.msg",
    "content": "Path: flop.mcom.com!news-mail-gateway\nFrom: MAILER-DAEMON@netscape.com (Mail Delivery Subsystem)\nNewsgroups: mcom.incoming.client\nSubject: Returned mail: Host unknown (Name server: maine.link.net: host not found)\nDate: 26 Apr 1995 17:08:35 -0700\nOrganization: Local Mail/News Gateway\nLines: 109\nSender: daemon@flop.mcom.com\nApproved: usenet@netscape.com\nMessage-ID: <199504270008.RAA17252@neon.netscape.com>\nNNTP-Posting-Host: flop.mcom.com\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"RAA17252.798941312/neon.netscape.com\"\n\nThis is a MIME-encapsulated message\n\n--RAA17252.798941312/neon.netscape.com\n\nThe original message was received at Wed, 26 Apr 1995 17:08:30 -0700\nfrom cronos.mcom.com [198.93.94.116]\n\n   ----- The following addresses had delivery problems -----\n<drwebb@maine.link.net>  (unrecoverable error)\n\n   ----- Transcript of session follows -----\n550 <drwebb@maine.link.net>... Host unknown (Name server: maine.link.net: host not found)\n\n   ----- Original message follows -----\n\n--RAA17252.798941312/neon.netscape.com\nContent-Type: message/rfc822\n\nReturn-Path: client@netscape.com\nReceived: from cronos.mcom.com (cronos.mcom.com [198.93.94.116]) by neon.netscape.com (950215.SGI.8.6.10/8.6.9) with SMTP id RAA17240 for <drwebb@maine.link.net>; Wed, 26 Apr 1995 17:08:30 -0700\nMessage-Id: <199504270008.RAA17240@neon.netscape.com>\nDate: Thu, 27 Apr 95 01:14:08 0800\nFrom: Christopher Lamey <client@netscape.com>\nOrganization: Netscape Communications\nX-Mailer: Mozilla 1.1N (Macintosh; I; 68K)\nMIME-Version: 1.0\nNewsgroups: mcom.incoming.client\nTo: drwebb@maine.link.net\nSubject: Re: 90 Day product Support\nReferences: <199504251257.IAA09959@maine.mainelink.net> <server-2504951544190001@ub.mcom.com>\nX-URL: news:server-2504951544190001@ub.mcom.com\nContent-Transfer-Encoding: quoted-printable\nContent-Type: text/plain; charset=us-ascii\n\n>drwebb@mainelink.net (dennis r. webb) wrote:\n>> 1) VIEWING EXTERNAL IMAGES\n>>         I have LView 3.1 and have told Netscape in the Setup that I do. I have\n>>         not yet been able to get my Image Radio Button to Light up, it remains\n>>         grayed out at all times.\nThe Image button on the main interface, between Reload and Open, is for reloading images \non the page you're viewing.  Sometimes Netscape Navigator incorrectly loads a file's \nimages.  The Image button is for rectifying this problem.  Netscape Navigator has built in \ncapabilities for viewing jpeg and gif files.  You don't need to configure a viewer for this.  \n\n>> \n>> 2) HELPER APPLICATIONS\n>>         MPEG : Downloaded MPEGWIN.ZIP, MPEGXING.ZIP. Was not sure if I should\n>>                download MPEGW32g.ZIP. I have a Pentium 90 Hz system with 16\n>>                Megs of RAM, 4 Meg Video Vram PCI CARD and run windows in\n>32 Bit\n>>                Disk access and 32 Bit File access. My conventional memory is\n>>                617 K .\n>>                Noted that you have \"Netscape Navigator Sound Installation \n>>                Tutorial for Windows\". This explains how to Install \"WHAM 1.31\n>>                Audio Player\". Which MPEG should I install and how to I\n>associate\n>>                it with NETSCAPE ?\nThere are hundreds of mpeg players on the Internet.   Which one you want is a matter of preference.  We have WHAM 1.31 on our page b=\necause it's a widely used and accepted player.   For more players and info go to this URL:\n\nhttp://www2.netscape.com/assist/helper_apps/index.html\n\nNo matter what player you choose, configuring them in Netscape Navigator is the same.  In the Options:Preferences:Helper Apps menu, =\nyou can tell Netscape Navigator what to do with certain files it downloads.   To play MGPEGs, set it like this:\nMIME Type: video/mpeg\nApplication: Wham 1.31 (You can browse to make sure the path is right)\nAction: Launch\nExtension: mpeg, mpg, mpe\n\n>>         TELNET : Downloaded WINTELB3.ZIP and TRMPTEL.ZIP. Which should I\n>use and\n>>                  also How do I associate it with NETSCAPE ?\n>>                  \nOnce again, which one you use is a matter of personal preference.  Both are well known and used applications on the Internet.  To ha=\nve Netscape Navigator use one of them, go to the Options:Preferences:Applications and Directories menu.  There you can set Netscape =\nNavigator to use a Telnet application.  Simply use the browse option to specify the one you want to use.\n\n>> 3) QUICKTIME\n>>                 Noted that when I was in NEWSGROUPS that I need QUICKTIME for\n>>                 some Videos. Was planning on downloading it from\n>gatekeeper.dec.\n>>                 com?pub/msdos/win3/desktop. There is a note in the File Index\n>>                 that says \"(REMOVED by wayneb@apple.com). Do you know of\n>another\n>>                 location to find QUICKTIME (qtw111.zip) and also how do\n>I assoc-\n>>                 iate it with NETSCAPE ?\nTry\n\nftp://ftp.cica.indiana.edu \n\nIf it's not there, do a search for the word Quicktime.  The configuration the same as for  a MPEG player.  \n\nMIME Type: video/quicktime\nApplication: MoviePlayer (You can browse to make sure the path is right)\nAction: Launch\nExtension: qt\n\nThank you for using Netscape!\n--\nChris P. Lamey\nNetscape Customer Support\nclient@netscape.com\n\n\n\n\n--RAA17252.798941312/neon.netscape.com--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.21.msg",
    "content": "Return-Path: <>\nReceived: from navstar1.mcom.com ([205.217.251.46]) by hedgehog.mcom.com\n          (Netscape Mail Server v1.1) with ESMTP id AAA29011\n          for <atzet@netscape.com> Sun, 21 Jul 1996 16:59:17 -0700\nTo: atzet@netscape.com\nFrom: mailusr1@navstar1.mcom.com\nReply-To: mailusr1@navstar1.mcom.com\nSubject: Re: mailusr1@navstar1 3.0b6gold #1\nDate: Sun, 21 Jul 1996 17:02:55 -0800\nMessage-ID: <19960722000255.AAA26598@navstar1.mcom.com>\nMIME-Version: 1.0\nContent-Type: multipart/mixed;;\n                Boundary=\"===========================_ _= 1212158(26598)\"\nContent-Transfer-Encoding: 7bit\nX-Mozilla-Status: 0011\nContent-Length: 1213\n\n--===========================_ _= 1212158(26598)\nContent-Type: text/plain\n\ndefault echo 1\ndefault echo 2\ndefault echo 3\ndefault echo 4\ndefault echo 5\n--===========================_ _= 1212158(26598)\nContent-Type: message/rfc822\nContent-Disposition: attachment\n\nReceived: from hedgehog.mcom.com ([205.217.251.17]) by navstar1.mcom.com\n          (Netscape Mail Server v2.0) with ESMTP id AAA3678\n          for <mailusr1@navstar1.mcom.com> Sun, 21 Jul 1996 17:02:54 -0800\nReceived: from cabrillo.mcom.com ([207.1.136.82]) by hedgehog.mcom.com\n          (Netscape Mail Server v1.1) with SMTP id AAA29001\n          for <mailusr1@navstar1> Sun, 21 Jul 1996 16:59:09 -0700\nSender: atzet@netscape.com (Michael Atzet)\nMessage-ID: <31F2C3F2.D47@netscape.com>\nDate: Sun, 21 Jul 1996 16:57:38 -0700\nFrom: \"Michael A. Atzet\" <atzet@netscape.com>\nX-Mailer: Mozilla 3.0b6Gold (X11; U; SunOS 5.5 sun4u)\nMIME-Version: 1.0\nTo: mailusr1@navstar1\nSubject: mailusr1@navstar1 3.0b6gold #1\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nmailusr1@navstar1 3.0b6gold #1\n--\nMichael A. Atzet                 atzet@netscape.com\nNetscape Communications                415.919.3274\n--===========================_ _= 1212158(26598)--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.22.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!hookup!news.moneng.mei.com!howland.reston.ans.net!news.sprintlink.net!news.ip.net!news.iclc.net!usenet\nFrom: ross@iclc.net (Charles Halle)\nNewsgroups: misc.entrepreneurs\nSubject: I  DID  IT - I'm a New Entrepreneur  -\nDate: 25 Apr 1995 20:51:43 GMT\nOrganization: HALLE ASSOCIATES\nLines: 46\nMessage-ID: <3njncv$1kh@castle.iclc.net>\nNNTP-Posting-Host: shade.iclc.net\nMime-Version: 1.0\nContent-Type: Application/octet-stream\nX-Newsreader: WinVN 0.92.6+\n\nFROM:\nHalle Associates\nCharles F. Halle\n\nHere is some new information you may find interesting...\n\nI am now a New Entrepreneur..\n\nI recently became an Entrepreneur and thought you would like to \nhear my story.\n\nBeing retired, age 72, I was bored , and I wanted to contribute \nsomething to life.  I am a Ham Radio operator, but that wasn't\nenough to keep me busy.  In addition, I needed more money.   I\nhave a Computer/Modem and was fascinated by its possibilities.\nThen I heard about the Internet, the Information Superhighway.\n\nI heard about a program that gives advice on how to become \nan entrepreneur using the Internet.  I bought that program and \nstarted to use the Internet to market the same program I was\nusing. \n\nIt proved to be quite successful.  I did not get rich, (yet) but\nmy time was very well utilized and I did make about $300 per week\nafter using the program for about a month.  More products are\nbeing produced, and I fully  expect to be able to market these\nproducts successfully.\n\nIt proves that one is never too old to become a successful\nentrepreneur. I am very happy with my progress and will continue\nto grow in this venture.\n\nIf  you want more information about this program, please contact\nme at:\n\n                             ross@iclc.net                        \n    \n                                  or   \n\n                       Compuserve... 71420,1642\n\nYou  will be glad you did !\n\n\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.23.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!gatech!howland.reston.ans.net!news.sprintlink.net!gryphon.phoenix.net!news\nFrom: skyojedi@phoenix.net (Skywalker of the Jedi)\nNewsgroups: rec.games.video.3do\nSubject: M2 Screenshots from GO! - 4 Attachments [1/5]\nDate: 5 May 1995 04:11:15 GMT\nOrganization: Your Organization\nLines: 954\nMessage-ID: <3oc8h3$edc@gryphon.phoenix.net>\nNNTP-Posting-Host: dial47.phoenix.net\nMime-Version: 1.0\nContent-Type: message/partial;\n     id=\"799653575@Skywalker of the Jedi\";\n     number=1; total=5\nX-Newsreader: WinVN 0.93.10\n\nContent-Type: multipart/mixed;\n     Boundary=\"*-*-*- Next Section -*-*-*\"\n\n--*-*-*- Next Section -*-*-*\nContent-Type: Image/JPEG\nContent-Transfer-Encoding: x-uue\n\nbegin 755 3dom22.jpg\nM``HS1$]-,C(N:G!G````````````````````````````````````````````\nM``````````````````````````!*4$5'.$))304``*0!R````````(H?```?\nMK:O.]9ZKSO6C``````````````````````````````\"!@4MM``#_V/_@`!!*\nM1DE&``$\"`0!(`$@``/_M`;A0:&]T;W-H;W`@,RXP`#A\"24T#Z0``````>``#\nM````2`!(``````+:`BC_X?_A`OD\"10-'!2@#_``\"````2`!(``````+8`B@`\nM`0```&0````!``,#`P````$G#P`!``$```````````````!@\"``9`9``````\nM`````````````````````````````````````#A\"24T#[0``````$`!(````\nM`0`!`$@````!``$X0DE-`_,```````@``````````#A\"24TG$```````\"@`!\nM``````````(X0DE-`_4``````$@`+V9F``$`;&9F``8```````$`+V9F``$`\nMH9F:``8```````$`,@````$`6@````8```````$`-0````$`+0````8`````\nM``$X0DE-`_@``````'```/____________________________¥#Z`````#_\nM____________________________`^@`````________________________\nM_____P/H`````/____________________________¥#Z```.$))300&````\nM```\"``;_[@`.061O8F4`9``````!_]L`A``\"`@(\"`@(\"`@(\"`P(\"`@,$`P(\"\nM`P0%!`0$!`0%!@4%!04%!08&!P<(!P<&\"0D*\"@D)#`P,#`P,#`P,#`P,#`P,\nM`0,#`P4$!0D&!@D-\"@D*#0¥.#@X.#P¥,#`P,#`¥/#`P,#`P,#PP,#`P,#`P,\nM#`P,#`P,#`P,#`P,#`P,#`P,#`S_P``1\"`#*`3H#`1$``A$!`Q$!_¥0!H@``\nM``<!`0$!`0``````````!`4#`@8!``<(\"0H+`0`\"`@,!`0$!`0`````````!\nM``(#!`4&!P@)\"@L0``(!`P,\"!`(&!P,$`@8\"<P$\"`Q$$``4A$C%!408382)Q\nM@10RD:$'%;%\"(¥%2T>$S%F+P)'*\"¥25#-%.2HK)C<¥(U1\">3H[,V%U1D=,/2\nMX@@F@PD*&!F$E$5&I+16TU4H&O+C¥¥34Y/1E=865I;7%U>7U9G:&EJ:VQM;F\nM]C='5V=WAY>GM¥?7Y_<X2%AH>(B8J+C(V.CX*3E)66EYB9FIN<G9Z?DJ.DI:\nM:GJ*FJJZRMKJ^A$``@(!`@,%!00%!@0(`P-M`0`\"$0,$(1(Q0051$V$B!G&!\nMD3*AL?`4P='A(T(54F)R¥3,D-$.\"%I)3):)CLL('<](UXD2#%U23\"`D*&!DF\nM-D4:)V1T53?RH[/#*\"G3X_.$E*2TQ-3D]&5UA96EM<75Y?5&5F9VAI:FML;6\nMYO9'5V=WAY>GM¥?7Y_<X2%AH>(B8J+C(V.CX.4E9:7F)F:FYR=GI^2HZ2EIJ\nM>HJ:JKK*VNKZ_]T`!``H_]H`#`,!``(1`Q$`/P#R;822<I5DD87-O59V&RJK\nM']FGVJ]]¥U4LTH_Q%V1'N3B\"7B[*\"P6)/A?N?8?/(^*#U^:!BM%5E?ZJ26,E\nMNRO\"`Q)`KOQKTP@R[@RGIHJY*FYF]6,EXR6CXDE64_LJWC].&?¥`5#0-/$,`\nM¥U^?K#R[/'9:;$FH:H595@5_W,2$5=)G%26/@/OR,5GC`Y4¥&U[S#?¥`F&4W\nM.JL\"(YBUE9(O[BV/3E$&/WFM<E7FX$Q+I23M+'P*%$FE;X\"2H-?¥KIU¥,R(2\nM`YD_)%$=0E¥J1#]T¥:FH)Y#C¥0[M7IR'A3\">&70LQD'>B*QE8YTMQ¥(I$U!4\nME1T;OO[Y=CP1[FW8MBRYL&]-\"2:L&50\"IZU(K]`RO(`.@8<`[DWCLXS+&EI:\nMF69$HL85:DGI114;=CE8@)<U.,E.=.6/0/,&BRM(D=]IMVEP1`0S0R5!4U'0\nMCOAEA@.]C&$AW,X¥UZMYKN;G7+2:]*Z5YNE(U2\"!V^K3%*%D5N/PL0?B-3EV\nM+!C(WOY)F9=[S;S/KTVM3Q!;*RM]/M8H+00VT,<<<IMQQ!9%`!8?S4J>N1E#\nMA.PMKJ7>D:+];C51!&W%2&JM>(K]D\"G2F$`RYQ#,/5?(>JZ_^7LMS=:;Z-F_\nMFVS&E6_UBG!H93R$@564*4;H6(IX'`<9¥@CPR>3Z3OOS0¥^V5Y?ZQYJLCYD¥\nMQ>4?+]IHLLCQ6BFVLY35;F;T+=XH^?0O'PFI^V.N3¥\"!Y_<S&$]:8G?ZIYQ¥\nMV65[YLUO3(+71=$C6?39+>W]#2H)Y!Q0V?J%Y)G/>9G<^+#*O\"B#U\"/#B&%2\nM02PK!(P475U6:^BV6A;[)JOVBWT9FXB!U/R3P@<D_P!!TWR^]S8Q:C9ZEYAU\nMG49));#0;::VLM,C2`<F-_=7*R_\"!N55%)_9<'(Y8$]ZC'D/(LEU;6-7¥SZ?\nM<>2]$L;0:'S\"ZEY?T%A;Z1'Z'Q>M?WUP)I+SCO¥`!)(J+^P1L,PY\"N8;.#($\nM,-6T'3M2@TO3?*&G-:2I`+ZYT_4+A+C4+K[/K&ZCG]`1Q#=49\"OBV1,;Y&D4\nM>H^U/_,FEP^9M)M'AAD?ZE+-RN9V#SR30$,\"JJPCJ@Z,E`?;+80(ZVP/N8;;\nMSZ;<0V&I7-A;>;Y;25ENY#<M#=2K^T%F:)BDL:]`P9#TYTR9D.I/P43`YL\"U\nM\"U¥NZ%YN?S!Y8ON7E#SAR^J0B+ZO>6¥RT$T%U'5E-.TB-P?KMB.$¥I%B3?(L\nMKT^V$(FN(=3$?H2\"70IH^+F.(D&42H_&I8U`XDGO3,>>8#H2F/Q>J7.I66HO\nM'.B21_60#=0>H']*9!]DMO7;>M=O;,?)FB1]/VN?BQ1G_.2&>_¥`J¥3JXXQL\nM2.0;X#S/3K4YA>/1Y!SQH`?X;26]DEN!\"LS>NMNK¥VD-6.U%0?Y.7?G3719:\nM\"/¥`-I)54K<6_(DLY'I)M^[9=P5'8^!RD:S)?)J.EQQ5S'.XO>4A$<S<WCJ:\nMF7LW7K[C,B.N(&X91QXQR4%6K.T[¥&8+(YK7X_LD@#K¥^N42U$IGJQE''UM=\nM,0J^FT@D$Z!7I0UH=BP'4CWZ9D8IY!T#5+#`]\"EQD6WC62>8QPVK,SRR$`4I\nMN:[\"M-S2E<L¥:1Z1^;4<<(=\"¥M¥Q^;)M4`M=-XPVEC*MSIFJL>4Z2#9I(U(`\nM6H[_`(99'(>M?-Q9Y!W!\"3>91JFA7NF:E,)M5F-9=7N&KZRK3AS)-`5[;83(\nM'J6F[2H\"W\"B%X54O&%E7J)`M#S<'N#TR0N/*RV<([RHS%9#*KPI.ZMSE>4!G\nM-.C#;=O#`-3/J&/#'S6RO!</<2O!ZDL[(LX85DE1:$&0]21MM3$R,N8\"F)1_\nM)_¥`*_O>74_YU]¥G0[@PJ7<__]#R%!<HX21P0949.%>(0KM0D=3FCR6.I=J1\nM?()O;OQ@+¥EG8#@*FAKW^D94*ES*..<>0**9X(WB=&*,'H?BZ+0=_GVR<1#¥\nM%EXAK8/`O-7GW5]0U/5=#$C:-:Z=.$:\"UDXRSH>I=QOQ;P%![YDPPP[RX&7+\nM9WIYN$1GFB25RLB.T<*G92=S0+6I(ZY;&$;V<$H<2%X4B#40_NECI3B5]^^9\nM/IB%!*V`I%(CLS,B$J%(I4C8[CWW¥<'B8Y=2SX:ZKXT]6:(MQ8PN2W+84ZCI\nM@¥+N^]E$D?V)K;Q)(7$7.5JLPCINQ)H*#>ORR.3-&`W%?%RX8^+H]X_+'¥E]\nM;_,>_&FVT15[ADCMFB^$EVV')J'B%/VB%8CPS63[1@#S<J.G$>81/YM?E5Y^\nM_*77(?)_F73;+RYR@7ZO?V%Q'-]?A/Q*¥]T/W]3_`\".%'¥HIF7BU¥#_$'&RF\nM(Y`L.¥B#3M%U*:_73+#6-4L1ZB7^JP_6=/L5_;=[1F6\"5C^SZ_J+7?@<M,Y3\nMY2<24B?I2'SGYOC¥UWUS=-IUEI]E:?`(].MX+&\"YD'69X;98XE9CO1$5?`9*\nM.\"9ZN++C[V%6=O¥`I*22T^MK`L*?6+R^V_=0K]MMZ\"M-A3+(PG#GO¥5C\"^9+\nM*EU'2[:.&RT2R2&,U:.¥FY/--4;R5DJ1R¥-E]LD9RZ4W$1ARW^**C>QL-.OO\nMTK/>3^8KF,MY?5$JMDQ8,);@NR'B?V`BM¥QD.*9ZA8YQU#T7R;J,[/>6EMIL\nM6OZ+9O!K?F6+5HIY++U(0/W]^]M68QAMPA)4FGPTVR=P/.0#?]7(AZ1)YFU'\nMS7J]A)>/>>9T-19WLT*6UM#^T%TS2K.5;:V2FW-V)8;M$#DH&'25I&/S##V]\nM(3WOKR&.9KZ2K\"C1[?L*U34#H:#;,_'CXNJ3A/0J[76DZ?%<WM[I::_**?4;\nM*5Y(K43,?A]:.*2-I%_R>7'Q!P98URDSN<>J.M8_-7GB2YMDB6_/E_2Y=0N/\nM+MB(K73=-MXOB#`?!&64=.(,GB<U.6,I=1¥VHY)'^+[F0^4_*[V/E6^¥RZ[Y\nM8FU&PN+;],Z%%]=CM4NHX]J7$>¥[0UW*(T4IZAQD(0AUICP#J?M9#8:I:W5K\nMING6^D7.A?6`;AHIKKZS\"%E'(^A(Z\"41^\"3&1@/]V')R.,¥C3+@B.1M@>HM;\nM>7+V6T@T4FWNXI7@OHYB3RE:LGJQ$L!45IZ94TRD\"0Y3:Y`,1¥WZ9:>8?,L4\nMEM`FCLVC11V=AR*H]/VD3;T^5*[C+)>)/O:Y4.2!¥I7<'I7EM,6>Y¥NW!,'$\nM*¥Q9/M1KN`R^%2,A^7E'H?FF,O,LLTK4],M=+N;E+I[;2?-=P[VUO*I$WUI3\nM3@`.1K7;C6GOWRC+B,AW?%V.'(8¥I)Y/!-62\":)N:J#<,Y`X@`?:WI7P%<UD\nMHF!W(^3LXY)$<_M2VYB4%':22)HN)#ML>';;P^>#Q3+N^3*QW_:KO%3TD5^\"\nMW49F#DTH`:5&^U>_X8/$S1ZCY,)WWH.58XV-9.'UD¥$[(66E6'C7*YY)EI%C\nM^(+;J#C$TBH2P!4@T%2=C0]SX9\",LH;`?-\"RI\"DD8#^A';Q<KH2$$>-2U=@,\nMS<,ISZ-67)+H7A_F[S';^8K^2VAN5?0K)O¥`1BCD&YD[N\"IXF/L*=<V6/2WS\nM=9ER$_VL0EEMB).+EI)*I]K<``4IX`9<<<8_V.&<1*P2JDEM<.:K(H4Q!MW5\nM.U!TR4<U<FR&.NH36X,%Q*]Z[/¥`Z0B¥F'VB3TZ=*>V)G+NMRHV>H6J9%C].\nM21?31@B$&A8UK0;[Y6./^:B6W5.I?+&I6VEZIYCNZV,=BOK16LI\"32(*;R*6\nM4QCPJ*GPP<$S_\"X¥I2Z('](K_P`M(_WD^N?8;^[^_K[]<GX<OYK#BF__T?#¥\nM=P/3F1R_&%N8>H,G%3LH`&V_7;.?R:<G>OM=J8D_VHMKIDE=48QL51UCK4TJ\nM\"=O`Y7PPY2!1X15?KTRH¥**K!PU4V!HQW`-<ECB+V/V->3%/HFWEK5M._)WR\nMM??FWIN@Z5JOY@^>=66S¥D^9K^UAO(_+HL_AEGC@O(IXVFDZ#DFPZ9NL$3(<\nM[^#AY,9CSI'V?YQ)^?WF'5M$_/K7O+UWYDU'3&M_(GYL7]I;:++I]ZGV(+^Z\nMTJVC22V?H!<1L%/0C,V&*`Y@GY.++(0¥/¥¥_E?YP_+6[BM/-&B&\"#6`TOEWS\nM!:_Z1H^JA=Q+I=¥@,<R,/B8*:@[%5RC*8=U,`3+H6!O:2RR73R1QO*(U:.\",\nM<0A6G*@¥>^8OB1Z!D!P]\"RGR#Y$U;¥PO.F@>1M*N8M.G¥P*YFU20?NK6UB'.\nM:8C]I@H-`.I[Y.,N+F\"VB5OI2]_-K6/*D-MY/_)N]NO(_D?2>6GIJ>@22:5K\nM/F*[M?AEU#4=2M72¥E/(42,R¥`/V,JRX8D<C¥G(Q3)Y$/L_¥H/¥`G+.>3ROJ\nM.B^>O,$NN_FWHVE32^2M4:$?6RBK5K26=$5)FXBI$Q))WJ3G-:S2$G8%V.,U\nMS(+X:_-S¥Q]=_,/6TUWS6I197DG_`$5')6Y=D8H[2OQXQTIV'L,AI-#G!YM&\nM?)?1XNVIP7Y6**40VEN28BM%C]6O4*!UIU8[YU&FP@#>OFZZ42A/,^H>3+:&\nM*QL/4U/4V4/<W,!$<`EJ\"?4#K(9#VH`I]¥S98X])!?4.@2ZU3RH]EI$E[JMS\nM;7>IWZQZ[#%:*]G8VB])/6]4R2OW\">D![Y5'!?U209R[@G$TWE+0+M-6T'4;\nMS7+K3I9?T+%?VD4#>NG]U*¥:SSJ16A6K?,9\"6F`ZDM?&3S`5&;2M9M]&G¥Q>\nM9KQ_.GFW41)YLN(K6-+&QLRX\">I*C*X95_9BA(/9JX8:>)[UV/¥`\"_0K4/¥`\nMG*X^0+?2_*7_`#C9YET^U¥J?E_9VFG7OEV?1K>&WUF20+Z^HR/=(EP:$FBJR\nM._?)'#$?4?N0!,=*3[¥]M?L=)¥WVWDSRC9GRA!YL¥JVNN^:[?R[''IC7]W<T\nMD=KFYD$UQ#\"]3^ZA67E^VAZX/¥''*S¥7*A.NI^Q¥KZF$@:RLK?ZOZ=G;-S6.\nM,>E$SFO`?9+TZD¥4_P!1>F60A$G;[VWQ04D;2XK[38+^¥#Q:;#=\".ZO80\"¥<\nMM=@$Y5W[$[9+)BH=6N9AU>DZ1K_^&?R/_-_S#Y0¥M/#/K-[8^7;'4+ADO-0N\nM)$</<7+JL:+&JK]E0&8?STS\"$)WRMHE+%+]CZWU#S5_SD'Y.¥N?EAY3_`.<9\nMK\"[¥S>6I=!&MZUYPTS3;?5+?5-5N.+3VMU>2136]OPZ$<D<D=<OE#&!N&)..\nM/>Q/¥_[::V_,V,6<'E^UUS5/+MGJ_GK13(%E&N2*!*!>.C+:<#UC:XC1NO%L\nMQ1+&SAEQR^FQ¥GSSYHMD&FV]TNFV^HW)65VEY!:/&#SB]2+XF6NXXFC==¥D)\nMXAT93B0¥QT_5+&1].U]O+::W+I-L3)I-W,5D<BO)UEC]/DJ_LQFM?VJ]<RH9\nM`&N,B>8><^97T6Q¥SV6O>5)[W1+;S$KWNJV$I(N+2]&T@0QA.,;CX:*2/$]L\nM&7+(¥C]C:(Q/1DLM])?WRSSP:=::=;QK-I<:+'!#'+QVCCBA`XLY^TT49->K\nM#KFMRRR2Y_<VX@.H91'KR7=K#=30I:ZB$$&I6*+(!#-XA9'=F'^4S$^)S!R:\nM(3YDN:)XPQ1]9N=0N;:*%EMYK=S'>VS$2,Z!A¥>W0=]JXP[,$?XE&2,N19/)\nM$([^.#XN`D*>E4;UZ4-:=.A.2G\",.0+E1A$]2Z5'AEN#L0!P@!(9T!()(KL\"\nM<Q?#XN9#`QB4(¥C3/>T)CF5`T:-¥1*B@``_'+XZ7&?X@PG\"(>#>=O,T]Y=:C\nMH-NTD-A&M=39:%I213TSO0`G,C%IS$[%U^2,1U8,2?3C$<AX)%PC6GV0.PZG\nM;-MCC.N;BF/F@`9UD!9RR%&!8T'+OV_C@E/)U`40'4K)IBCP\",&+@U96/MV)\nM]¥AXLNH9''$¥BFL5U>2!E2)IFXT6-1S=FIT`!ZTR(XCR\"+B.KW7RMY1D¥OV2\nM:I?QPW.MZG9+<VT#O1=/C)V!44Y.?<[8B,AS_2URE`]4¥O;;](Z?J%HT:2MJ\nMMJZ$-)7DY'VB.Q]AF9$9._[$1.-¥H_5?,O¥`RT2=?T']@_¥`(OIU]^N7<$OY\nMS/C@_P#_TO!`9?0%2P+L5)+5:G7E7OFDGF!ZEV¥(CO1-M+3U'2JR$\",R`FK(\nMNX&YS%D>[=NN(ZJ,PJ[-,S<37H?'W]LOPR/¥0<;*1W_:ROS-8+KW_.-]Q<V$\nM8M]5_+SS='+,LAI]>BOQQ3TE+@LRGL$8YL<<NX5¥\"ZS*9]-_>7S=/:?4+^X@\nMGBDAU&\"2.X(V#Q$T8;\"O?MEXR3/¥7V-$>+K3UC¥O_P`X=;¥AVNIZ/J^GV_GG\nM¥NO-DQ;S'Y\"U.OI/*HH;RRD`9K6Y4?9D4?,'*983+G9^#98[V>Q_E'Y7_,&W\nM;7OR3¥W0BU8R277Y>>=]0T[1_,<-?VH+JYG@T^^@6O¥`>F:%_&,Y?#T¥[^34\nM8RZ,@MUT+¥F?)&K6MCYJT+S'^<GG)EL=0O¥`0+A+^T¥N:72DMJFH1AK>2XE!\nMH_U9W`Z<CF1^9(Y4S%CF'AC:K^B8'F6&*\"&`L+<L5=X5I^P=^+$FI(ZY1+).\nM7<VB9Z;?%[1_SCQY\"OII]4_-_P`PR#1/*WE>WNOJGF\"[GAMXI[R9\"(HQZK<[\nMB1B:!8E9A[#,6>\"^;3+)E'5X5YVUMM7U&>.TD-I;7%Y>3ZA<$4>9I9#P#.?B\nMHW6AW]LA'\"!R0,TCS+SI3=B*&\"S<^E92F3@FW&G>NU!XYE#&`&/',L?,HCYN\nM)6?U97<S+L&9C¥1^61,AYCX!B3D#/-$C_05M8:[JVC#6H;AY!H>F7+*+.:?C\nM3G-R5_4XC?C0?/!X@'6V4<LQS4+?3F>%6G!@BE=IIIW8<49M^\"@[¥!V!/TY,\nM2!Y!N$KZIK%]61K>'3;9]3UFYK;V4<8#&61OACX(!2I.PH,D:'1(G*/5]L^6\nM4¥@?¥XX:%Y6_3GD>U_,7_G)W756[AT2_0OI_E8,.4,D]LA87=T0>2JU64T^P\nM-C5*8ESOY-E¥74)IY1_-BRUK¥UO,_P\"8WG70)//5Q%Y>N;C4[_S%#%);BZMQ\nMQCA-C&.(@5Z`A&KVVRCBA#^P)CCOE3U/3CH'YK^9/RN¥Z^</R[@¥L2:[I6IR\nM><?*.CBXM+/4[72(S);W-E;BXEEBMU-%=;=U/B<R]/K,?<SD)#D'G?G/S[HO\nMYB?DW>>8+'¥N=#¥EW]QKUMI<=QY9MU@L-3C24QQK%:\"6:6&X50!(SFK>(Z9E\nM_F)2Y!QI2GU5/.%MHGEWR3^4/Y:-%*E]K%Z?,7F#R-:$+<3¥B`D]U(.2HG'H\nMK`@_M`Y5+/,?PW¥6KBB'T5^9?G;¥XORZ¥U>4?R[_`.<=[B/R'Y)?RQ!KTUH-\nM.L)Y9)78+*6EU&&19.;;<;<U'9,$IB?,5¥&`R<71B7_.2EIJ>G^?ORN¥P^K+\nMY>_,3S=HWUOS=H&ARM:3QWT\"_#?AUBMI(Y&IOR4,3T7*SI¥9_B<G'B,N@#Y[\nMM-1U?4X=2M]1OVOKA6:=+¥J(WHS4E1P@7E*QW:1AR.8<Q&)VW9R$HO,-7FBT\nMK7;BQ32#'816W+2Y;:5E!>0¥I#<QR,X<UZ>DJ>_+!#(`>18DD,-¥TVWZ9UKR\nMZ?62`0:=.L;DA.<I-1&B&CD^VXS,$N+HP¥20Z,.¥MRC48)--U1EC.FW#N+J/\nM]Z;9T(V4[;^U13,>>*DQG(LXTZ_U6[DM;_3]235()A-;:C9RN#':.2%6:I8%\nMI67]DCVWP7P]%XDB&F3^7M6DO9&^M&RNZ1¥V\"22G8A64;(1X'H.N`S!YAR<.\nM0`¥J>JW2R/%!)PVU;_2W@)'*(**BK*:%1[9@9Y1'1V^/+$CE:%X.R,Y0_O5+\nM12;!21MOXYA\"<9<K#81W!BFLZ[I>AP3RW6IVYU86Y#6+,GK-(WV2$'Q4'B13\nM,B$:YFW&S9I!¥WQ27,L5Q+<L/7GGDEN)>2BI8_\"=MZ#YYL,7`>[YNASDR45Y\nM`NS;M#*`&4_\"13VZ9D\"`Z%IB*YH*9G3FX^)MV!!VH>XZ[Y91ZDMXA%N!BX:M\nM.1^+DQK0^`!^_(DCO*GA#T/¥I41O.%NUU`&DM[:4VDG+_=IV#`-M7VZYE88Q\nM/5'-]!Q*QMWY1R;,ZR,6W7?XJDG¥3ELN&/5G&,4IT&SN?,EY-9Z'\"]U)I4JF\nM^U12!;VJ$[,TA^$GV!)KF%DU48]0Y^#0>)R#Z\"_Y4KY!_P\"+/]Y/K/¥`?7'_\nM`!T/^6W^¥^U[?8_R<J_-Q[W8?R1Y/__3¥!1S!/7AF#-)\"%;B*$D'_/MFBD+=\nMH,D!SM%`0F0122I&;P*MNA<*`[$#B2:;[],@,3+BC+DR\"_¥`*/F2(2I+H.HF\nM6)O3JL$C(M!4&J@J00>H-#EHC(<K:I\"N@>@?DW<V]U)YT_*76&^K77G;36?R\nM[;W`].,ZK;`O&I9C6-VI¥.Q![D9*,<DN3A90#R\"=_E!/H5GY3¥V#RIYL¥D>6\nM_P`[KN=M.¥YW7YBK&ED]E;L0^EV+:G:SZ/,¥S*%?U)4)KL>^9F,9!U<9FNO_\nM`)?Z/^<MQY3T#7/+NF_E5^>VD:=(NF>3-.*VOE_S;I:FJR:)=(D^GP/)]I5A\nMD:(D_\"!EWB</U2IR<<0>9?*6O:3K6EKJVAW^F+Y'T;2+QK#4].NXVBN8[H'=\nM;M=II7H-JT0C[)IDQOR-J>%CU_8VCSW#Z?*]Q;1)$EG<.H4SD#XWXC[(&X¥<\nMD,<I?V-9(>C_`)<?DY9>?=\"UCSEYXUC_``I^6&CRO;M>H8EU#6[R$<FLM*CF\nM<$D='E6.15&1.*4>I^QE#AES5/S;_-*¥¥QZ9HEGIVD+Y6¥M:-:+IWE#R1:N3\nM9V4,?PB=Q1%FN'IR:7@#7+HQOF49,(Z6^9[RZEB4AI/5FJ7YFAY,?MDU[]LI\nMEB/232,8[BWI>OW.C75Q/97\"Q1W<!CN+-@I#1GK56!`R<,0/,I.,>;?E:QL-\nM5U@VMV472%]2Y5JCD.'Q^FO05)Z5-!X95+3CO1P6F]C=ZQK%QK;Q:6^I2Z4[\nMR\"'T_5_1MJ3Q#5`!7G7=NF52P>83X00UYY;¥UZ>EA^D=%O[%-0=FL6NX)(HY\nME-*NA=0\"`#N0:#&,\".J`:Z,¥TVUD¥JOI5SY0U.?4?-^F3B_¥VW5K9>K;Z984\nM#!`TB2*Q8_:=?A[&AR¥X[_B*=CT?2MI_SF?_`,YC6O[H?F\"^G:?<P@Z%'<Z!\nMI\"Q1VL0HCQNVG%I3Q'4EA^O(>%,%,8@,HM/SI_YR!¥^:E=^;;C4=.¥MG6M,7\nMR_/^8NIVEM9WVH6X^)H/JHBX7\"EOL&SM#(O3EDI8]MP&PP@>5M:N/S-_+C2?\nMRSN-2¥RZE9WWE^:[&@&[^JVFM/;WIK*L6G@2WC6DI/Q_7J!A_NO*ORHD;%,`\nM8^?S276_S&¥W^=)/)WDSS1:^7O+WE#RKJT6HW^C^6=+LK*UMI4E]:2XMK>WB\nMA5IY:`,2_&N],OCA(V9@03?5/S9¥OZO^:WFCSU/HMU=_H;2+?0O+=A$T-K-+\nM:*H0M<7#QWB)(Q%:>E(M-A3*YXI#O+9Q0`W#UW0_^<N?SFT4V,?E?RMY8U+0\nM?+]E)&FGS0W-TVC>MUDFUBZNQ'!*]:'U).!Z\"-1L*S'AY@_-I]%¥GFL?G7¥W\nMO,WGJ?SSJAM_,GG#4+5X9]'LK)VADM`.2I=L%XRA!N!;QB(C_=C#&OYM!O@`\nM>5L2OO//FF2\"XU6^L='.DW<LT=]K<6BVFG*9B>!AANK*W@J$[K(Q%>U=¥EQR\nM//A8SC)#ZU=:K9K:M8\"*2.R,=XWKVT%Y!=Q<=F>WN4EMY5-?]V1L,>.OYK68\nM$¥_O>=G5H;O4+/6M5¥O:;='2YYKB/2;13I¥<E35>'I¥HH&7J!!&B'IQ&$YCW\nM!1C`ZL*¥YW6AC6T¥P^5I;BWM?-L0O/T;/;BWFANH3QD<,/W<P/=TJ/IS&.21\nM.R3YE$0G0Y+1;'ZK):Z;KB,[7`*-!/=\"@:..!562-J[EV9E/91F5#<>IB(I/\nMJ0N(K:2\"]BD]\"YF$\"V¥T¥;N9HQ¥,E-I!'Q[E1_K9C9)&/0.3\"8'0L¥T/6(KG\nMRU!%N]U:2/%?7+$<5#&B(F^Z^^:[,.+F'88I\"2V6¥E,=O\"P<QVT@8%&XAEZA\nM:KU'MF/'$+Y!MG$]'SWYGTN\"+7KH22K)>ZG(T¥]PQKQ3HD2+6@/CFUQ8HTZ;\nM4B=¥PQ_ZLR22)-1%<'DM.1^'M[US-QU#D`XL8GJ0@T595`C^#F2&HP8<J=\":\nM]¥NEJI#D`Y'\".X*-3$J¥UYP*1$P05))Z$CJ*9C'+(]`P)5H[=52111I5DYHY\nM/V4_9`¥#ED81/0-1`+(/)NL0:-YFTF[NRWHQ,YD$1HS,^R`D]%KUPG*8,H#=\nM[+IGZ?¥`/VI1Z19QN(C<,]W]75Q#;*6V>9UWH1_,:'PS7ZK6$.YT6C.4[U^+\nM?4&A^6]+¥O:$^E:1\"(;=YU;4;F;^]GF78DD`44?L[;^V<SD[0R2/)[S1=G1C\nM&R/QN]-^KV7¥UQ_QS?2^R>G_``?V?;+OS)¥T^''¥!__4^6TGG*\"-K:+3:7I+\nMNKS,U(HWZ[]WK[;9K[$F_C*_19S?ZQ8W&JW#WD1OH#,E>%`7&R!=E'<TW]¥M\nMX`.]F)2???GW¥PI--N;V1=$U\"W¥O:7IT!U'6=.MQ<PQD\"B*;MN4<%3U+(Y/M\nME!D!WLO$/>7C'Y2:[?¥`F+¥V]*FNOJUGI>EV6H:[<6NGM*INOJT)>%[RZ:3U\nM)BIZ!F$?;@,OA*/1QLA!>!W%W+J,][JMV(Y/TQ>WE['&Q\"*QE=N19=E!/W9,\nM2/</DU#AZ_>]MUF#S9)^1_Y1QZM:7<NH?XDO7¥ARR1/QATX\"KBV4KQ<¥AL2&\nM`['+?#/7[F1Q0E_:]+N=5T_¥¥K+R[H7G\">UG_/3RRT=I9PM?0Z?!YBT]!^[L\nMKBYE1;6.Y0?9_?!O\"F\"0D?I^YJ$9176WY(R:+:W_`)¥_/3RY-^7?E+2I3!H/\nMY9I)]2UOS%<Q-1HH8;AWN/0&PDN2&YC[&V^6Z>A];9'U<S7P8-YO_,#7O,,E\nM]J'[G2M+LEATCRIY9TXA=+T\"QN\"%,=E`H56DI_>2E>9/VCF7/)BZ`I&,1ZEX\nM-YT\"17UJJJ8K6T4VNFQLP?F%ZN2.I;KF-+@/4(,V!VMHNHZK#8RWB:=!<-26\nM_E^)(UK¥55!%33H.F8YB0=MV/'YM><(=%M]:U&Q¥M2RC2;\"%(TO)23<3SM3E\nM(:4`7KLM,E(BMPQX_-*-*NOT8S&*8$`$`'85I4D;4^_,3YMHGYLCTU;^9K^>\nMWOY+3]+1BWU`JQ7UD;[*.!3DH¥-¥M`!Z%KE,(W69M=T&YTG0]2U9G:QL_P#<\nM1:_6#*8(&_9*U/IU[`X!\"3$2!;T6_P#,-DNJW&BZQ?V%WJT0M-4U&TFDA?ZN\nMY%8&DC92%;P/RRRZYLGO'Y6_F?¥`FEY3G¥NZ1Y)UNXLK/R%]<UJ'3H&!B]69\nM\"LEQ=)(>,U:]'#$=L,,I)^ILC(]],P?¥T?S,T\"WM],C,.E:WK5K)K5UYS@@B\nMDUF¥M;R0F007-2MM`#M2(1D=SF43&0WW4Q/4E&:-Y4¥ZZO>/KL<<VH7/`7R,\nM2;JXNHR*RSH¥OQR¥?VY8E=1^U(,<<!'DV0X>I8](7N#-(D;*><IE<@5;B14`\nMC8G,D[¥FWPP>2@L7UI(+?BL<<S*&9P2#¥6_,5J1_GOF!DG.#(0#TH>:_*MNB\nMVUE87WF'4M+8?58)?3LM&L946AEMH8F/PGH[*UNU?VCF+//.?<TSB@)-5¥X^\nM<[>?0T>[U#3[QTDNO*FCQL+.5F8&.5X46EQ(IW65UD<?[¥[Y68RZE./B/<GG\nMFC5?S*TNXT+1;KS;>6UWIT:2#3+6_P#W%DL8&UZEK*Y-S38>H.1&VV0(KH3¥\nM&<HD<Z0=GJTVH6>H_79#-J:3^M`0OIB2,G<¥%;9@=]CB,LNY'XY,&UN[¥Q-<\nM?OM#M=<T>SK,UZMJT9MC+0%KR[M!%.[#JOKRLOM3;(3E*7(-4XEYUYDMI-5U\nM6PN/33ZKI=C+#HTK$1¥WEW/I[@%F.P5*D]ACBL?5][#<)1H6I:Q:P:AI=J9+\nM\"^A3E=V;)P(X,*I.C@52N_&0<?$9G`XV$I%D&KIYD9K2UNIVTG]-RI+J>F3E\nM;&RO(B/@FD+F&`(O9FHH[$91.,>E-F.9/-`^5[A+9[JQ+04$DML7A=;@WA!^\nM$PLC-&T:]FC-#XY@9B3R`+M,,J9%Q*?\"`Q=)`%7IQKXCY9CPN]PY,LD@/V/#\nM/.'U:Z¥VZX5D'HP0Q16W$BBR,1S)/<YL(¥-<BZ;4SE(_L8^]*<V+2<B\"VX(J\nMO2G??YY=#9P]D#(H\"%TX¥OB9TI3<]Z[?CF3&1/<QD!W(1[I(%-7+R<?AWIRW\nMJ?H&)¥P$\"8'>E<EP)!`T/)+=)29&W)-1O4'KO]`P2KI21,'HF_EO1M0¥R>8-\nM.TW2;>6>>YN5$2*I?TVY5J?`>^:S49^'GN7;:'2',>7XW?H_Y;¥N6?DW2Y[.\nMR2.6YU%@^M:C;NY+3IU\"[`D=CL,X_7=HSO8?:/)]\"[+[(,=^'¥;LG6.-G2*8\nMF\")@LC0*?N<;>/7KF!I=3DE+>OF]28&$*X63^G'_`,MA_P!Y?4^TO7_@OMYT\nM'%+R^;I>'^B__]7Y%:9IZV]MI:RLJ&;B]U:CXIN+BJ.P4<54]N1K[9KI0/=;\nM$RKJ67Z18\"VDBE%P/6291`BOPC@8MO)<2/¥`\"`!T]^^6Q$NYE$^][SYEL=`N\nM?+/F.RTS2G>^2&*:.YFU()(70`R.L4MPOJ@G>GIFO89*4<A[E%H#¥K>&@?EK\nM^>7FZZBDN!-H5IH6FR0N5G-U=/4E.#!E4#K4?1E7B&/.F8X>H>A>7GUW¥C_R\nMX_+#6?*>@:1>^9_.DL]]_P`K=N;\"WUF6S:,<8M-TQ[Q)H+\"9=^3\"-93U!RX9\nMXRZM/#&7(AYOYN¥T^=?-#7&H^9/,4VOZYK-]Q¥P6,LL]Q?!*U4&5QPX^R.0/\nMY1C+)_6<B(`Z_8P&6UBTMWCOW,L_J<8M*L)$]8#K^^N\"'2,>X5R>E!UP1E*]\nMK8'(>AM&2W$M^T-¥FGQ:7;*I@M[*$2#FJC^¥9I'8R-XM6GL.F98QS(V8$$JA\nM;ZO<:9\"6:1&@FGDB0UX,!11Q[UR@F8ZM<H'N8OK$/JZ,[3U6XC)EADJ2!2M%\nM!Z[UIF1CG+K(?),17,,`M9\"625D(ZB2E&XUR&3)?7Y,UTOU:-U9^A!4!B\":G\nM8<B=FRH\"^]!C:5&.6ACX$.A(8D%OI![_`$8EB(#N*>0RZB]@CVZRR0Z:YN(7\nMMPU(C3^¥=QU^39(#W?-EX0¥UNG>A-JEO>7D0U!9>4]T6-6E>FS¥FKT¥,@9=R\nM?#IE1N+R]*BRCG<HK21A5(144]9*;¥4'<#!4^]@8R98MSI&G'3(-!U74)8[R\nMU>+SIJ'%HH+[F.21P1&DC1JVW[T#?<#(G*40XQSI[+Y2¥[Z=Y?LM0G¥P:3?^\nM:?,ETD\":%J-U=TAL881^Y9)O3DDX+T]&)XC3_=@Q$I'K]KD¥1/5E\":W^:7YJ\nMQSZ3ID%_?Z=?R++<^4_+¥/U'39_3I266UBVG\"TKZDPD<?[]S+C+O*C!*?7[$\nM!>P7EMJ^H:1)%Z¥^DQ)%>RVQ]6-GI5_2*¥@/3Z$U/T8:CWMPQ<'5!0QN¥-P¥\nM\"$-`.,4;G[8;<FGA[Y5(#H$B/<SORDWE;2'LI-6¥MZGYGU>Z_?0QG48M)TVV\nM1?M&>>6%N<1Z-PF@]GRGBAU/V*8S¥F3:EYYUW63_`(1L#Z6F!V73_)?Y;P'3\nM[5V-&-O+>R1RRW7+[3&5;M?Y77KE<¥D?X26H8¥O>H23IY575IKG0O*UM<0`2\nM:/Y9>XN+R1;I0#2ZN(IW!E6M3'*Z*>T?[.4\"1/,ED3(<S]C$['S'<RW¥@N]$\nMT:ZU7S(H2;S#:VHT][4`5<0QVOU>U([$O`[>XZXD2OE]K`<:*U6*ZM(X;[19\nMGL]1L)5EM=2MY&B9G&S.'C^)21T*_1F1&7\".3;?>&)W%O+)K=EKNORPZE=O<\nM?6([^.]M[Z]D2(5;U5@ED9&4]YN+9'Q>+J&B42P/SM=^6D¥Y0>9/*]K/IT/F\nM>W:ZU&TD1$].Z@-.1XLPK)WH:?3ET8#^<&!M`PP:7)IFK7MS<*NFZJYN&¥OR\nM0S3))<=#-]9C640D=E=5![/CPXN¥L8¥0ZH6T@L-'U&VTK2+2ZM(8(?K;7MS/\nM&1.ZCD3&OIJ85'3BSR$]:]LQLV&!^FRYN//7-D=AJ6EZQJ$T=GRG8TEO[E$9\nM8?6&W$F0*2WO2AS`.GF>]LEGL<WSG<+!-?:[>0[)-J,@*2FK5C-'9JUV¥*9D\nMXL-<RZZ<92/-:+.6EW?0VUQ)IVF*9+RY5:J%[5(V`/N:G,P0'0L8XY#GND=]\nM,YY)'%P,T\"SJVQ;BPKR4FM-NQPC*8¥C]BY)'HE+1>BD=P93(IVBC)!Y*_78=\nMAC+,)<R7''$?XDPTS2-1UZ¥M=\"TJ%IKN¥D],#E01^H=@:]O>A]AFMU.HA#=V\nM>ETDLG+=^@/Y9?EQIOY;:5+:/]4U'S1*?2U/4HP[1+R%0L)?B^PV.PWSS_M;\nMM><Y>F&W]CWO9/9$X¥P?Q;U,VR+#:+'&82LCHT2D%@&W)/C7VSC¥N3/,¥GML\nM6*>.-`*AMRZH$JSQ.$D4T#?:Z\"FW3KMF;H(YS+>OQ;#+CRD<OM9=Z&@_S+]B\nMO5OZ_AG8>'/O#I_#F__6^3^FVUNLD¥DDQF>.<PS(I)]((/@5WHO-AWX@KD3(\nM2Z+*8#*[\"YFN(WT2&W#R7¥X::X%>02HV4U!7[]O'*28#O9Q(+T3S=JEA9W2:\nM:UC;PK;::(5E2*V'J-QH69K>\")?^#+O_`)9P^)?*T^&$VN+B¥T[¥C+7R]J5D\nM-(OM=¥P)J%KI3`Q>O:VZ[32J0'(KN/4H/#(B$SS\")8R.B:?E?YAUZQG¥[^4U\nMG:__`\"Z¥RZ:UY^8,3H6A@])\"+>YB1?L2¥Z*K`;^'?#&!¥D1B!_\"&-RZ'<VFC\nM2W=O?6]II]PWI1QW+&)WLWD(CD>9AQE<+NR0EY`/M*,9T.9#=N.B4Q7/E_3#\nM)-9V(¥QZM'R6&^U#E'81U-.<5JC++*Q'>9U'_%>`\"(_BI@9`]P4;K6+Z]@M?\nMTA?O>\"V9I[:U;C'%`7'$F&!`L41(Z¥%%1U.2XH#D2PY=6,QZF8]<GNY90T:6\nMIAM6798@14GB`37Q._T8@R/FUDD=6.ZIJ)OHI!4BPE`-L6HRO0T$C`[[GH#E\nMO'(<HW¥&'$DRL/2-52J=&`%:^]-J>V1N9Z!(I`M&UT¥0BCYUKQG(`7EU)KT`\nM&6@R[UL]%PA5))A;R),(W!AF`/)W-*J(Z;\"NVYRF<#+F6-R5(I[RTE>VEMVA\nMFN$(O[925KS^P7(Z?(Y481'4I]7>G^B1^7H;/5;/5X;Z.Z@ME.CRVCQF&24M\nMN)E<?`@'3A4GN<@80[TBAU9%IWF2;1M.N+?1G?3;?55CL/,6LLJRR/83L%E@\nM0¥3)P6M2(0#7J3@.>$>0M!RQ'5G5KY<_+V&+S,T/GB¥M;/R_'$NASR:6QCU%\nM2!2*+T[A[A*,=RT!7WRGC,^¥?!NQSKH]9M$MO*7U236+/0/-UAI.G6Y¥L7CL\nM]K::;J-[0_Z5$#%-=L@WH#(!^&7PP^=M_'?0++[S/JUQ/)!JMV^O%IT;5M\"@\nMK:Z242GISF\"V599%)I4B.W;_`(L;,H81U*B63O¥`N670O-&CF6_LX]+BNKFM\nMA$.*(8WI4)^¥E+@$[$N3XG!*,1U3ZCS+23?5Y^<@*<H^\"**'X2:DGN:_.F5T\nM#T*!&NJ/MM7TNSN)[W6-'_3-N(#%:Z4)76(N#56=D925'=2?E3KD)XH]`67&\nM0A+WSQK>J6PL1-8^6-)1\"L>BZ\"AMH2A^VES-R:6=2-R)YI0/V1E`A(<F,9%(\nMM.;5]6B%GI>D\"[NY\"JVB<#,IC5_AF5G51&/'BH`¥</#/K23Q/0YO-'DJ%FM6\nMT'5M0U6V*V.HZM;:C%9QQS5'J1PP&UGJ1WEDD;V09BRP`¥Y-1E(=44VIZ=J*\nM^AHNE7VFVFFIPN$U2[AO+F=GZL9HK>UCX#L/3K[XB.*/>68'?)YU#HT&GZNB\nM+6*.4NUG-]:AB8,3_=F,N)%4^,@\"GQRZ,('D\"I@.])-;TYM9F]?4\"(HM'M)Q\nM%#$%CX'MP1:BI/¥`*#7QRP'(.0:91##]'U.2;2/JHBBN&LH'E:\":)9(TF)X@\nM!3U(]MQDB<A8@UR#5]/JESHMJ^FPI+K$C?5M2M7MH+QI(&W\"0^HDAB8G]J,A\nMNU<J,)GJV\"1+6A:CYVUK5+/RUIWEV1&T9`FI0>F89420T'JR.55/8M2OCE$¥\nMGA_7)R<>+)+D]\"T/¥B[#3+.[U3SOJT4>GV,LT¥EK8N440GX^#W.S'P*H@8GH\nM^8,^UM+$U<BY@[*R$62`¥9_,_P`¥6'FAM,T?RSI¥&D>3=/%8M-LX_0CN76@Y\nM.O6NU23N>]<S,.IQRE5&W5ZK#'%_$¥FE<$SM*Q?U*J&));B/LA=R=O¥`;S94\nM*L!U)G90UM_I,T<`F2VN)/A>[F)`@4=2ZH&8T'90<Q,F60')V&DCCOU!]5?E\nMIYC_`\";¥DZ1\"UQYBCU'S-,A%QJ@L[HB.I_W2Y@#;'Q`]LYWM`9YCT@_9Y/>=\nMERT¥1OM^\"]DL/S;_`\"[NY6>/S-!&J*3%-<+/;GUEV()EC4$GPZGMG%ZOLS5D\nM[Q/PW^XO98.T=+#^-F-CYT¥GZBT21>9=,,UI\"9)H3<(KHK[B0J2&'T@#-8>S\nM<HW,95[BWCM'`3_>?:KMYR¥LB2U2VUK3;RX60>E;B[AY$5`,C`-T`¥!FX[/T\nMI$MXW¥#YKEUF\"O[P?-Z-^F?+_P#U>],_N*_WD7W=?QSLO!C_`#`Z'¥WA_G/_\nMU_E=93:8;?T;:T5$::22YNG8&60$[*G$*L:>\"T8@=#E<@!U9_ESWL@CN+F>.\nMYLK4)!97,20WFH`T=(E(/$2G=21M2N_?,>4H^;=#`'JTOFOS%J6E:987*1WV\nMEZ?\"UII=I=NK-P44^(NQ8$?0/#*_%/¥`\"&¥&./FP*U¥X/%8VNEZA:?I--%N'\nMCBM;C?T^1J¥+`_&$ITH5-/LD9(#//D64]7C/(,]@_.4Z)HWF#1O)WY=^5?)R\nM>:;<6FO7]D=8O+BZM4Z*XU;5+^!3_E1Q(?`C)#399<Y.&>(¥@&,?ID:XFFZ&\nM)XKFY6`1V%_?S_5K6Q:M2AJ&:0GH*';H%.2.FD.MMD<9/-3>¥¥IZ;*SQ0/YF\nM`8@O.)+*QDF'PTXHZW,H1NOQ15'3;`,=<VN>&E/4->U+66BCU.;EIVE.5TZR\nMBB6*TLN5/@MXDHJ$_P`QJY_:8YD0E$=&H@=S#=0<1WLDS!$6.+8UXGF3U;8?\nMAEED¥@Q,0QU27E\"1QCTXN4UVS*.G;8`5^9PD3'>D4B++0KC4XHY[*TN-0>]E\nM9(8($+CF#LJL-B3X5VRDPF>931/)DLWE_1-&6%M?¥PQM=<0QT#1U$TB+T*37\nM+<8HG5OM*%E([C$1$>=I¥'(>K\"YH!#>S-Z3V]*3I;EE:6-0:J6=0/BZ&H`^6\nM`S@&!T¥^]/¥`3-&U7SEK$/U,R7.OZJ$C!IQ00J:!F`ZD_P`QVRKQ8%@<0ZIC\nM>P&TAU;R_'HR136=R8=7O;EF?4(KJ`CD$:-Q$D3#8`*21^UDHPXN07PXJ5KI\nM¥D_H¥HEA0H5`B)9$5MB2M:U[[]^V'AD%&,=R<Z=96@N(HO3].V1N,MV]3*L5\nM?WDSD;#B.RKE<O$;HB7<]9T6XTR>5]*34M5N?)5E.EU;\"VM(9)Y?2^)KJ0M+\nMRB0'[*QNM>],GBA/J6P0EW,SLO/>@:'!;WWE3RO##.SS,OF+7G%Q<R!FJDT5\nMM$(H^0ZJ)EG'^7F1+$VQAWE!:GYIUGS3<+J?F.¥O]>CM)C$FHWKJL$8<;\"*S\nM1>-O[A\"%/¥N8_%\"/,)¥$'J@VN($81JWIQQT5'1JE5)'(@=#¥LE$B?(($!%;Z\nMX9Z%PR^HRJ:=0.FP¥>]<!A(-@!*ZUG¥G:5;6<¥EE?:QK$;22W%IS%O;V[D_N\nM^2JCEUKOLR4]¥KE&1YV&!@5T^N:YJ]I,L133-\"MY'>9[)?0MY9S3U8;F^=E5\nM@0:@22/[+@&`=9,\")H?3=1TG2B/J^E1>9K^XN2SWS\">>(HH_=VP:(PLW'K6+\nM@?$D93.,!S8G'?1Z#;OKK6KE/RQAADU=#<+YGC&H>O#:AJ-'$#=?5G5>O%HW\nM<>.\",HCDL<+$O-&EV]W;6L:QO<-')6*=05+/4``O4<:^!RZI'D`SG`#DQ.%6\nMMKE+.[BE33!*MU/=@@RHL)!982&(5C2G6A¥<H,L@:-^Y(?S(U31+_P`[1:[I\nM%M^C=+¥PZ>3/%<($E2Y@%/¥`2$5F0R,!NRD@X;F!N6['B.0T`]3_`\"]¥I-YX\nMM+'S7K.O:A:Z1!9M;:3IT17U\"RGB1'Z@D54%#L%^[.>U_:,L9V/XV>FT/8,¥\nM@O¥`'5[EIEIHV@VBV6A:=#812LOKL'9I;R1?M23R.6:1O`'9?V5&<IJ.U,LY\nM/38NQ88(V7S/^=_YDW$PO?)7ENXBBA)235+^+C5R3O!$U3Q(_:VS9]G:<2(G\nM(7?1Y_M34QAL!^-GR9+)%'<)%'1848Q%^7PUIW%>M?$YV>DPPAZCS>&SR.0¥\nMDKG,)*GK()!Q2N[,/$TVS9^.\"*#5'&`4(2D$ZRJ%]1:A%ZAM_P`3E8QF?4-@\nMD4*ZI)-(6;XI\"7=.@#$T(H-A]&$:8=4@Y.¥J[<(H^7(D*W)0YV+**4^0PG28\nM.K9'Q.LDQ¥OZDUIJ$5XQ,R*'B<`D`J1¥07<\"IZ;U'ME!TN`[4V>+(?Q,@3S!\nM->:E::9\"ZZ<MVY#DCE)&K?9`D/0GQ`'RPPTN`?P6F6JE_.3?ZC??]7\"^_O.'\nM]ZWV_P\"?_6]^N9/#A_F-7YB7>__0^4<4ELJQK%:?5]-5N5E)5C).#_-(Y(J>\nMIXY@B6,_PN3*,>I9+8V5Q=P1R2>E%ID,I_2XNI!$@>OP*D9/*0T_D5J9+@[@\nMVXQ$=7IK>=-9M?+L>@0^8-5T[3II/]+T:.]<67!MHRMK'1%##[7+D3WR8XPS\nMR3CW/+I%,:3\"-`(UD,H\"&I=C^V?GD^.;CD%0DEFM4@NHN!-ZO`H0&*QGN!TZ\nMY/Q*YL1'S3\"QDDDL9-'CMX.=S<AI]0<(LZ!^Z3.*1J!U'3('*'*Q0¥T]D7RQ\nMI$UI`XE¥S7,L<BR@,UM80,NREGC99YB#O¥)C![5R$M2(]+3D&,)A<:KK>HZ/\nM+!?K%I>A1D3R^7+)([.TD<4\"S?5HPIN\":?;D#L#^UACJ./¥`A<>XI'(Z7-(V\nMA]2I]-R^_P\"[/O¥`KS((ET8R(Z!N\"UNKIX;\"QM?K-].X@T^W&_*1R%%*;Y49\nMY.]JXR.C[4_-_P#*K7/(OY7?DM^7.DQV^BW/G6S/F?¥`-&:6:WT^TB=`/2-S\nM=R<%!H10.SR']D97++(<RV>,9='S/)I'Y>^7;J=-6OKCSMJ/IAIK+1V-G8¥A\nMN(Y[V>.2:X0]1Z21BG1QE<,QD=V!D>]C26FDZE<W_F74)]/¥LP0$+IVAZ;'/\nM=S<$IQ-M#/*R,W8F>YKX4S($8=0PXB>99-JNL:/J/EFZ¥I:)I<-Y>ZG,FJ7_\nM`)LFBALKR:&&C/;Q0Q¥DM2M/BXRN&RLQCT#($=6'K8:AJ?HZG9:1=W%MJZ&;\nMZS9V[RK,L8X<OA!J12F_7QQ.H,>09QG'N0VGV-S-=7-I;VSI+*.#L[^FL(!W\nM,Y<@1CN>6_SR@ZC))L¥6(_A9)8:G<:(=:T_R]J,-U875I]1U/58(&5[Z.39X\nM29E$G%\"?M*%!¥3DN?.3$9CTV623\"RMK*`7;V=M&BVUR;<U'I=$5O%1W&\"$O-\nMD9'J]8L;#¥OM#MXAYAUV2¥U7ZK&+K1]+1KFX17/[MC<3\".WA0CJ`9V_XKS/C\nMFA$<BTF9Z%?=>?$FKI_EW0;30+>:-K61P6U*Y-M2C%I;E2D3$[¥K:&`CH<I.\nMJ!.T2WQE#J6,37=I%'96\"1NWU97EFFJ2[<SMZA-3UZ9\">IGTC3/Q(]`VUPL7\nMHR1MZ+Q/20$¥J5':E1OW¥,KC+++JGQ#W-65O!<ZH7-S96D3(TE[=:@\"¥'IFG\nM(*G%^;=Q¥+4[##DB2-V)SGJFTMSY)L9C)^D=2¥ZW45N;>SCN5:*TJQK&`KAY\nMYHUZ!3';D=5S&C@!YL3D5AYG¥R7LJQZ#%!Y6L;188-1BT4M;.TU*RJU]669&\nM=>B33$=@,O..(^E1,(*[¥[LDEQ:_X:T¥)9/6:\"¥ADENYG.YN+DL[/(Q/2047\nMPS&F)=S+QH#HNA¥V6TVCQW%_-'%K$4SM=0¥>,<L;&D*PQH`2J#N%-3UR49Y!\nMT8'4WT>/76J)97D¥RR4LHKMIKF:>4T\"?:/PQ@U!¥%!/MA/B'FQC,R.S)/*WD\nMS4_S4U-1JCM!Y;TF7ZQ=ZDG\")%A8U6*U+*:L1U5EY'-%VAJYXAM^.3T79FFG\nM,W7XW?:DLUE;6]G96`CM[33TB2SA\"D(L\"#B2JD[,WOG\":K6YY'=]#T>&4(¥F\nM(^;D¥S7FA7MMY.BBGUVZ9OJ_UEU18XSU*LU$Y'_*(&6]GW.8X^7]KA=IY,O#\nML/QL^)=:_*K¥P[%WU&ZT\"Z>%CRN$M)[>[D=V/QL(8)))2*[U5:#/0-'IA,;D\nM?BWS/7XM1*6X/XI@>K^5_-VD6GUS4_+>IZ=IT+KROKNSFB@4R?8K(Z*M6[;U\nMS>PQ1'+=U!Q91T8J;>1!)P642%!P)J2`3N5KUKA$\".?Z$&1ZA!+&¥[(4/(&J\nM1$=P#4[TI]&6F)/5J,RKI$0Q#D*BL59&W%2.I84R`PGK)F#(]5BP1SQ)1_3D\nM$A1]SN!WI3H>V3X1W(X)=2C5A@3DJC:.G$[@FNY;Y^&61Q^2[#FTP6*7E$Q9\nM8IXYD!)!J.H).^2XI=S57<'O'^XG_?L7^¥GUGJ?]Z/Y?E[Y.I=R^KN?_T?D¥\nMMQ-(()+JX6^N9I?44.:M;$BA`X_`H`_938?/,8&74.0>'N3V&!K^\"\"Y-_;:?\nMI4+LUUJ-T[<4F'PHR1(KSO4].$1I^T0,D9GO;!(#D]!@N],A¥N6]M(^CI<Q.\nM[V]E+!*VIW(#4Y^NMNZ(#V628$_RY5XD>]!IYY<2&.:1ZD2/,24(H5#=%¥*#\nM+H2B>K22>]0-U-'Z_I,P)!$A`V*BFQ'=</#%(QA&)JTTZM;D>G!<((;EO356\nM:/¥`:\"-3J>VV$F(;!#N*96(D]2TM/+]E*WU=#''-P]>X(!V(^UP([D`#,:4R\nM>0IL$2F4UK-;)=?IK4D748*Q'3[<BYFDY-U:2-O00'_7KX@9=B$CS82X@IQ&\nM4H@*¥>O)@013H0:5W^69-US:>(OK7_G#;¥OH_/?YN>7[[5-#;6='TF[29><A\nMBC'IL\"#0,/4&W4=,K,HGF&GB-O7?^<_(=9UO¥Z]#¥OZ/J%QK,6E:,L>F^6K>\nM+C':_\"*J\"O¥`>4^U0[^V5F<`F.,RZOD/0ORUU._O7M[Z26#4K&W]0:/I2C5-\nM2DXGX^26Q-O;`?M-<RH5_ERJ6<#D&WPH1YEO4_+'Y?Z)J5U>:KKUQ'864:1V\nM'EW3Y[?4M1>X=JO+/=0UL0@%:HLPD'¥N0CF'4)B,?1C.O6_DZZL[M=(T#4],\nMO6=_T9?2Z@DZ$'O)!]7C8HP[!MOYFR7Y@=&9'<&-Z<E_)=Z1<07$@_P?!]8L\nM+II?2AL58U9U=B!&\"?$X./&5)(21KW4-0N]2U2]U&>:34;J:2WU!ASDE/1F1\nMR2'7P(PB<.C697U3G3]7OK33M`TN\"VM?1T:YEN+Y_JZ2R7ZRG=9FE#%*#NI%\nM.U,@>'N9Q$>K.U¥]:/!;^;WL_+.GIJ>HO%)Y8UI5:8V)50LMJT$C&W97[2A.\nM:GN<C$_T4F(*%T*Y¥K1VUW>:K#>ZCK^H2(6T2UHCSD#99;CC(T@_EH@(¥,R@\nM),>&/<SJR/G+ZA->:?H]GY'TBZN%@@U*Y,.GNK`U6..YN':[D9NC+&[*3^PO\nM3(<4HE`E70)!K*7NDZA]5NYI)=1U\"+ZS+J'HR0\"8OL-ITC=J@?:`*GK7)PRB\nM?-GQ`]*2\"2]E2:DK)'R?T7/(!0Y&R@^)]NN,S$)L#J@Y[B2:&:(%Y)9>2P)0\nM4`&W04I¥¥JN/<6LD'JRB#4_)^EVUK]:EGU*Y$:QM9V00A6=:/'=/,&MRA/1A\nM#))7HPR,L@#&.*4N3,H5_,+6(;;]&>7T¥EV5E`_U75K¥R17,%H`#07%R9+I!\nMW4P+'&>FV5?FH.3^4EW/*_-&J:/'=+:IYSO]5U2=';7_`#4(Y'G'I4_=6QE<\nM>L013DSL*>'3+8Y^+Z2XTX<+S¥Z[IWKW#PQW5Y>W=([:^F<<7?8%S'0%:#_+\nM(R!VW,EC\"1+/?)WY<:AYQU&VO+CA#Y9L;H1:G?RL$,_(\"JQ1DAG-?VU!`[G-\nM5J^T80VXG>Z#0RD;/XYOKR\"WLM,BM-/TRPBLM/TFGU.TC55CD*#CS=5V)]¥X\nMW6]HXY=+_`?0^S]-BQC<_C=R+,ZCU$8NLA:4/3<'N2:\"@¥!3.>GKP?IB7=QG\nMBJ@45SC#`1,I#D`,K;$K^R.^3Q:G(?X4RACGS#$]=¥]>6_+¥DD>J:W:VLB.#\nM)9LX>>(R&@YQ)5Q7L2*>^;3#/53%PNG69Y:7'SIY#YE_/W1[)+F'0+!M39'D\nMB%]=GA\"K4^$QQ(2¥BD>)C^6=)V?CUG69_%O+Z_M'2`>F(_%/FSS+^9&L^=9+\nM)M<NTN([\"C6T85(@@8UXJ(@!09U&\"&0_7)X;5YAE/I%,'N-<2/UU0F-RW/CQ\nM!)[5!&VV;#'`1¥W6T4G.IU5XP=F8NC!AN3N2??VWKETA?1D`Y-36)4E\"49UD\nM4`;E`:?<3VR-$<F?+H6HM0621@'95\";*>A/COW^G*C'(>3`DHF>Y($KL\"J_\"\nMKUW)%16HZY9\",QU14CR37],S?[Z7_>7T^O¥`NC_FK+^&?>BI/__2^0MK$E@T\nMMM#=\"[2)2CO%4(H(K5&8*2?$TS'E'R^UMR\"3(;\"#ZRKW:VTVH'3@/69*B\"'D\nM-GN&%`*]JL,KX)=P1\"$CWLVBU,Z9:3Z>EOZMS9NEVU¥R,$*2K7A5N+$+6HJ*\nM>#'(2D!T#;*%,.GDXWKLT4LX0^JEVAK&`VY\"@=%!Z@[X(CBY,*`ZAJ8¥E6X=\nM\"]K'0S<3P9N1_8J.OT'Y9:``QX3WH_1)KB\"YEFL+&2[!+((W7GQ1P!¥;'91X\nMDT&1,1+JSC&7¥Y4N]2NKM(]*B41:>S>I#I]D!Q>93]D¥?BEW%14GVQ$1'O¥`\nMFV&95K:RFC>>74+A-/G]+U+:\"4/)-<2@[Q\".(-QX]29\"HPQH^31.5]$R19[Z\nM>TT^T)6XU$+Z4D?Q,IVY`^`7OF0(1_G-4I%^V/¥`SB%Y7LOR_P#*^K^9FADA\nM:RTH?HWZR#'#/(PK(Y)!(J>Z[4[X^'&75C&^]¥@_GGYLUCS!^9FM3+Y<?S,E\nMS\"TFN/;W$J:=#&Y_=M?26SPO&BTV9YU6OVERC(1$;;N=B$>CPC7]4L38K:>;\nM_.4%U:1I]9;R%Y45&CJ6`B5IT1+$N-B95:9Z?S',\"Y3.X;Y4¥QN+C3/-,T.E\nM);V7D^P@#W-_K%S<7-P9%7_EHG1)&D)_9$5NON.^9``#BFGHOE30?)OG=;_R\nMWI6K:J^L:;8E;+4H-&C^J&,`L¥LT[WK3!!_.8E([KE1E`=&&XY6¥GUU_*TI¥\nML1:*KQ1Z(M[::S=SLTIO[A#Q^M14/'@.@IQ^G+H@'N2)'N+&P;?DBQ(¥JB0¥\nM@1QC/(?#M^R1VR=@=0GP[6CUKN5VAC>2<L`;.,,R!!LTC*E3MU)&V'QA[UX`\nM.H9O)IL>G)J'EG54M)[.(0:JFKV<ZRR-&]&9;:YB=HB-J.\"I(]CE8R7_``LA\nM`'D0G/E7SSI>AW=[JT6GOHEP0¥.FQ:3$L=[<>H120W=X;AH&51]N./¥`V.7X\nMYCH\"DE%77YJWJ7%[/Y?L;?0;C4WK-K5TOUW4YP%X$O=WK32JQ[O$(Z_L@99*\nM,)<T4\"Q\"7S%J&HW+W.K7<^I:@$XI<7,A=S&-Z?O&+¥?<Y'B`Y4@XX>:&;5(V\nM5N<@C#*24EVV[`$FG3IWRF<R.9#*&\",N3./)'E2?S;$^I-=7&G^7;8CT-1>&\nMCW;¥N,D4`?<T_FHP¥1F!J>UXX0[S2]B2S/HGROY.¥L>4&-[IMM`E]'$_J:S>\nME9YHE'Q!UE<<8F/0^F$^6<CJ>W99)/0X^PHX!9>$?F5^:<&K+=>7K'7#IV@L\nMGK>O:(¥NH7¥T9WBB*E4CBK]HNZD]JYL=&)Y.9=/K¥L,?*OQ3P\";4-(6&:6U@\nMD^LR``W-RQ\"H6/Q/P78/¥RP^>=%I¥4(¥R¥QFF)FTONKK1('A'*¥U)(^\"R,*0\nM<`:<V<T8M4[;$>U.F9,Q&7*G'C(1Y6KMJ*WL5Q-:R/:16CI;V]L[-(8H6->6\nMYJ0Q^7OF+_)L)¥XN5CUV2'(L>8R1S.R:BMF+=F902QEI7<P@!JU'4%AC/LN!\nMZ?8S/:N8?Q)_I_YC^:M\"@,.BZQ/;V*?%#I['E\"GB?2>L:D^-*G-=D]G<64W(\nM.7A[>S8^11Q_-SS;J<D$.N>8)_T:(98GM[<+;¥N8Z2K\"J\"0>`:N2Q^SV#%T_\nM'O.[9+M_4Y>I>62:C.OKA9'FA6?E;QRTV0UZ@=#FUQZ3''E&W%E/+EYR/S0,\nMEU.PDC:5F,3%HBK%@E=ZGQS*,JZ!IEISU0,1F7U)$D9>JL0:=>M#3\")>Y1IR\nMJ!*F%IF81R,0S@\"H`()(7^.7>(0W#2WS3R#1TFCDE0LT(=\"LG0N/Y:=C¥¥B<\nMLCT;/RT0R&T¥E/J4;M;NRRD!EE-26+F@C(_ID1(]S3+!Y%*M?¥F:UY6%O^E[\nM/T[=Y\"6OH_B6I^RI_LRP2:):<>;&OK=T920Y+2,#0;FE>E<'C3[@XLQPI_P_\nMY?+?^¥]_¥_X99XF3N#&P_P#_T_C];B\")'-E*TZQ%F;U/AH.VQ)-/#,<3,>C.\nM4QU939ZG=:9;K:6'&+ZT4E>?<^I+7<D5^$KV(H??(F4Y?PK#(.CT+0Y[FX@U\nM'3GTA-8MS2]U6QOC=R.9\"0JSJ;66(H#XR%@>^1,N¥-DJDQ#5[M+;4[F>'3?T\nM8D,?)M/7U``:TJBNS,!7?<D97P@][\"@._P\"24&Z:\"02^F)*CU#'(HF1BVX(5\nMJ@$>/49(QX?[6R,;[T=;37ER5M[&H?4)`DT$(HTH)!,?#<=/#?,<RGT`9^':\nM?BUU'46OK'1-->PLC($NH8?@6*2,;QSW#D\"A'[+M3V.$3E71CX0'>U%8:;9+\nM'//J#:E(4=)K:T4&-'7[\"-++3X2>Z(PR>,WS%I-1YO;/R1¥F?I'7;+6;UREO\nM;L(?JZKR`DF-:`$;J!M7N>PS,C7<XF28+]2[[S`-$_+F?299GU9$*PP'F(Y`\nM@%1&#L-NU=AED>)K$1W/RQ_,O4+S6O..IQ3W¥6C:-IH]18KIY'224[*M(5DJ\nM]?VF`7WR&3&3T+D0,NYY,VH:7;QJ_P!5FU.?DP#S.((HF':6.)F=QX,LJ_ZN\nM8?!75F9$]$!-?:GYIO-.TV,016MM(!9:?9A8;56?OQ/\",-W:1S7Q;*YY2.B*\nM¥V=)Y>LULO¥`\"UWYWT**¥<FYU*$M?7=NJQU**EQ9VD¥,DE>RR$#OXY2,A/,)\nMX@&'+!I\"V]¥VH6EQ8/!&L6F6ULZ7'JRH_P`=S)S].B%=U4&H/4Y;Q1Z`L?%M\nM=J4.B6L>GWMCK1O+35Y/2B,¥1@N([B)1ZBRP¥G4`?LD.5;Q!PP$I,Q/R/R3B\nMVT33_-8_PGH-K)?:Q:N-<%_,T44IAMA65%B9^*BG[)D<GLN1RB0Y%-^7V(PP\nMW%W'-?1P%;&+A!*R*'BCY=(W/1#W\"-3_`%:9#'XC.&2(_L2Z6]A¥TM#H>G:=\nMIV@65E(BIK%U.T5Q-1PK+)<._I*&ZA46-0.G(YFQ.3HP,QT9[9>1M+KKDBZQ\nM:ZW8:121[VUC>'39T@ISMVNKP1$O4T!2*8^U,999CF`6Z,2>CSKS#YTTN73[\nMS2O+_EBRT^Q=WC?6KN=KW4`P(!2\"9%MH?17?BH@!'=LQLV<=8L)`C;]::_E?\nMY!F¥_>8H[R]N>&B>7T@FO[@AA)+\"A^PA`5033XOB!¥-LY_7:[@Y;.Z[/TTY]\nM?L][[,5+>VCDM[\"W6ULK:L6FHS<W2)M^*D]Z?/YYY[VEKIREM?XI[K1Z.<1:\nM4>9_+%EYIT6WT2_O);:\"*832WEF_IOMNJCDK+OT-5/RS&[-UAQ3$I;^_XKK=\nM)FRBJ>6S?¥X_>3B9\"-5U8LBL_,SP?\"A')B*04`7K7?.TTG;@'<¥AJ>P,A.Y^\nMUYCK?Y??EK8.L=MYRNKJ>6-A!I]NL6H/)+$]&*W*/!\"M!U5R#X5SI=-KQEY@\nM.IU'9LL(Z/\"=7BMIK^_CLI&6RM9VAT^-P4X..I>+D0&/8<BN;:&.9Y4Z.5WR\nM2R=1'\"BVS¥)7`-T`>))!^(`\"O(]^F9L,<NMLQ5;H\"5P]RS,JB6!\"70'X>)'V\nMC2O;+*`ZEJ..^04/0K#;'DIF#GDE1O&VX/7>GAUPB<>]R¥6FM`W!5DC8*K-$\nMS!=_B(K0\"G:F86:3G8](>]\"-+*Q*@!'=RI:HJ\"O;<4`S&&:4>KDQQ&/4+1$5\nMB$BLL9<GE¥0^$]M_#+1G,N:>(]0%¥,*S/)Z00\")5+5.V_60#M7)BSU8&9'((\nMJ-O3)*LSAMR.0JP.U=O#KE4X9/+YM/BGS9=HTL0]+U?WBDA(@3QYD&M\">P¥<\nM$8S¥D>-[WT+Y+FT$PK++>!$MY3ZJ%1^]9O¥`=:[FJCQ.94,<O+YH&6_[4R_-\nM'SCY4?2QHX@MKR::&CF0`B%^BTI^UX&NV7¥1CS60O^U¥3S1QQ7+@4,2MR0QD\nMU\"UI13V/CD?$!/,N!(2'<G/U^W_WPO¥`=_RG_.N7¥4>]A;__U/DDMS',;>9;\nM6&V5%='MH@P5@?LNQ=F;F/&M/891CC7>G@,NB::?)J*R'ZE`$5P$FOC¥#¥:]\nM5G(^$\"M2!U';#DD3RM(QUT9EI>JW.G:=J.C0^@Z072S7>OAIE>5C0TCHRJWR\nMD6GRRN$)GJ6¥`E)/,-O?6FN6MQJ-C+9R7,0GMK:1&#7,7:23E2H8=*5'A7(9\nM(3[T<,PD2$2+(6(7U)&=-MHUI]G_`\"OIS%.202)$,AT*2]M9S<V4%O<M'\">,\nMUWM%#7J_`$%MOF,(R1/,%D,JI$^M^:)ECB$U^[¥S;VP+!`D>WJ!&/&-:]#L,\nM)G$?PEF<L$ZT3RZ)M1MM.O-4CCDE%)8+%5O9&8-NCMS2)1XE7)'¥N&&0^8<:\nM>0G^Q]Y_E;I(T&V5I+I(0Q#:=`H#@QC:@;BM&¥=OOS88]^I<>4K9Y^9NJB'1\nM;J-80R/Z:P7)/%X@XW/`;4/CAEA/>B$9%^;_`)BCGU+S!J2(IMT25HKN2=T2\nM%5I¥+^HY\"J&/>O78;Y\"Q'F?O<F$2/[6*ZG#8:;:32W]^DD`C*&UM!RY2#]DN\nMU`E.YH0<IE+')3D$>?WL-&IW4LI$):S;9U@7XOW5*,&.U2>YVP>&)<D'-'H&\nM2>2[]WU*>PFN'^K3V<JZ?'$15IAN$@8]&RF6*0Y(CZF0RV,IAO+J[BG@M+.9\nM8+Z[,9>:-FH`&!\"CF3T+D#WR8A(N28*TFE6<5^9XHGDT^2T2%8;PBIG:A]9E\nM2H0@=%4D>^43XX?PM?!+S67%K9)--Z¥J1?5)`+B9_AY(P%&Z[$Y6<A/,-@`'\nM13TW7-2M+_0=-¥KSSRW-CJ7K:3;12&.U]=MS,0\"0S>_'EV!RC)E(Y.1AT_B'\nM8/J?ROY0¥N^5;674M::&ZU^2]?5-7O9S&EI;7,AKQM3*!(\"U?B!8U¥!F#^;S\nM$]7H</9``LQ>\"?FG^94?F[4X+*%7M-$M[L)'8@<GNYHC_>.C54*!V((S+Q8¥\nM^3J77:R(Q]\"¥TN-8MO¥`3HHM*BEDF)'UFX)]=:#B%C5\"JA1V'$_/-C#2'^(N\nMCEDJ6Y+(-#_-GSOH6F0Z=!J2QV>G+4VPM[<>JU:¥I#Z?(^!J?NS4:WL3QN[Y\nMNVTG;,L!V%^]GZ?¥Y(Z[8!/TUH=A.MR.206I:$E._)F::E3[9H,OL9QFXFOE\nM^QWF/VQR1&¥05EK^>GG#S%:ZC%I&DV,<P(DMYXE+306R&LCTF=HY.`W/[NO^\nM3DL?L;\"$H]W7¥;?>T9O;+(1M%YSYPNO.=[K<-MKKSZG?I;_I'1G]3UTELIUJ\nMLUOQ)$:-^TJA:=U7.CT?8F/%MR]W5Y_4=LY=1WL*M[_4(KZSNF'I<I!&THK2\nM+BU&`I6A_7WS=8=#CQ?33@REDESLH6](?5M2MH(']5KGEP(K57%0Z]A7QKF8\nM(@<J8\"-]ZV>WFB\"<Z*(6/JGI13V!ZFN5RD1T'S<B&$E`3$2N/JL8C],<EF;H\nM^^X([GPS&R9_(.:-*$LDY¥D)C#Q(6903]EFV-#WS&¥3(>7W,ABC'FHM\"CD'X\nM0S\"A`[;]<(¥27,_8V7$<D-/#QD`:I:0@SE&K112A_P!K#&,QU#$Y/-N92¥;3\nMLZ.4;DSC:G@\",R!3`S/>HNK13EED#*0.A(#[;JPKV¥,F('R:S.2R!Y&41JBL\nMG(&,U(IOOO7H,L$@.Y'&3T36VN91=+$5%&0QM(34?%0U`[8¥7N8&8'1G5AJW\nMU2T>X'[A8BSF%#]KB*$GH!7\"2>E!K,AT#S>74[J2]DO2?66.0RQ(Y+(.1^$$\nM'KD3*7¥X-4D'-*[W#.RA'=J¥`\"`\"=]A3IAV/4-9`[U7_`*J>IT[X=_)>$=[_\nM`/_5^2:EY9)X\"L0O'D$,]O&#Q^*E%`.X`]^OCF,<@Z[MO#+ILG4>GZQ>Q_6(\nMK=_T/9HT'UZYD$=KSJ`RQS.5C9J]50EQE1R]ULH@CF67:5>7-M:W.D\"[:&\"_\nMA]%H;:Z>WM9Q&>16:)./JD>+$'PQ,@>;*61)+T^C=?4K:2.XM$\">BT)E,3D_\nMR>H$?;O51E0$1RMK¥8=0E)X327T7,I`D9^NQPL!MX(W>O<\"IR8J7>Q¥8'D$0\nMH@-M`¥K21VNGA5,*CXV5CL\"!0G[L91X.I;823%[K4=20VEO)(UG$T;6FF0U,\nM\"$;JWH(>)D_RJ5P1SGJ&9B.CVO¥`+?RDT0TV_P!;NX+!;IY)C`U7ND\"&M98X\nMT8#EVYL#¥LS,>2)YAK(¥GV3Y7K=QI>D)912LS6;W(5\"JQC^1\"Y4$;4WJ<G,Q\nMZ6XTH^3!OS*U#EIDJ/>OQH;A(1NR-(*4WZKX',?UGDL8D='PWK;2K<:U<QW3\nM.T:JD:5JKU-:,:&I6O7(G!Q<R6=^]Y[?3I1$6X:94CY.S`E22?B&XJ2,K.$0\nMZL33'F=))&>K$M\"'4UZJ.BTZEF¥-¥L$A^\"U[CHS'R?)%HFMZ/K&HJ9[&V+LT\nM$-7DCY``J&/$*X]CE1F1T9PS&/0LZUSSQ`UOK&G6+W-OY:U_4+29M%GD8(TD\nM!Y<I8T<CF3T-<EXEC84Y4=2\"E-EYMT)=9NFUE-1>PMXB;>\"P*1¥V*T$#RO6B\nM;;D*2!WS'XIGK]B3E\"!¥U>?](¥PFQ_1?EH>7M,LHB+K2$N#<K<,IHI>62-'8\nM#_*KAGCD1L6'BBTU_+_¥TM*¥E:B+^X¥K_IN^>&2.\">:94%N7W+*#$X)IU.QS\nM49M-F/*3N-%VA#&=Q^-WK=C_`,Y':>S(TWE0QCD)VD%X*@<J,H!@_>$^!*_/\nMOF`>S]7O4B]##V@P`4;0VO?GG^7FK-/J!¥G7VM:G#6\"V&JPV@2%'/Q+%*6N&\nM0=Z!.O?OFPTD-?\"A.B/BZS6=IZ?*-@7@6M:[HVHZH;RWTB/2(J,7M(7D<.K'\nM8DR.U\".E%XK3]D9O,4)'ZR'E=082/I2%]0M:W*<6?GL4Z-Q&Y`/8>.9<8`?Q\nM.*``4JFA2=PTDWH<QS3;D0*[`4IT¥3DR1T;(UT9IY1¥PVOE/5)+VR+A[BSFM\nM)+G_`'9%',*2(M*`AQL>AS!RYLHY5¥G,QS`9':>;+&6XBA]66-PL=O!,PY?5\nMXQNB<R\"`!F)XV4]0V;,A?7K\"+3=9<,FJR7#\"#T/15FF%:L?6:G`=Z@9=#+D'\nM<SX8GH/F¥XFNX;.)C$KF2=>4C(O-BI/P@DG?CXUR4M6>I'R3'#$)5-=,DK\"6\nM0RKPJ`P)9VH&)&_3WS'_`#([W)CPQZL?DF^M56+DAG9FW(XD#H1OT]LR!D$D\nM^,!R*@KEO2MV7CZYY+&>O)>C&M>O@<02.2?$XNK4T53/)Q`+D13*2!7C2E:=\nM`,NXY=P:9&NJE;F1C<(XW1\"$/CO]GEWRN[Z!'%?52]-HYF<A?L^HH)ZEA0D^\nM/ME¥2!T#$^]3G_>+'&'1^\"D!7;8=_AITKE@E+H`UGWMH]4<J4#AN$?'J/PR!\nMXNYC?FB;:1G<0,¥:R<B)I:'@J#>C;5J?$9,9)!.W4*^HW!:T^K-+Z;P/ZD*Q\nMDT$3=01W/OE9G*33.7<D\"/*06(9T:I`I4TK45]@>F^$1'6FOBON54#RRF3U\"\nM2/[PA>I:@K7)CA'(,A$>2I]9;^>/KQZ=OYNF2XCW,N$/_];Y/QV]RKO=R(]P\nMSQ¥);@NH><#8,QJ30'>A%<Q1$ENE\"03.TL=6O)OJ7$I%!`DKM(ZI%Z;'JH)^\nM(^R@M[9'¥OD/*33=<TTM].E4F.0*M6,EE.WV2M?B90?B7PW`.2E@D.OV)$D/\nM?2B2ZMRH,42JXEGWY`KMP5:TH>M3]V4<,@RV*6(R\"**5`/3EF*R.!]EOYO[<\nMO&_,4QX566D5PJW9],+&>H%62NS[]?G@(`YTR%LGT)KZ46]M%((-/MY&E\"JR\nMH)@PZUZO7VK3*Y>$.Y2#W/ISR5:V$44\"R3.MQ-,KS,H)'[O?ER-:CMTPPX>A\nM'R:2+>¥6]R(()^/Q)<-RA6,@*E>]/V@?'IF7P7R+7?O>`?F;YQTS3JQWTP:6\nM0O;+$A#,[]8ZJ/V>YZ#PP#'(=6V.2NKY4NM?O4EU!;:4\":[+JZ+&\"\"I&RQT'\nMQ;'QVQJ7>RED8*+A+9WB3F#:JHD!JYJU:@^_RR)QD]0U?-#-+,H0Q24+L98G\nMI6O`[@>)'@.F5&,0Q$5-KZ9/K09G]&X5GND7N1_-X_+$9`.5M@BA#>^J''(I\nMSBY,!OR0@4/8@_+$SODURC(--J!B6%35B%4BH^TOS]AU&2AQ!,#YH9+GDLAA\nM<N\">&]%,E37:OADR1UI)M9]9YQ@$¥N!9E<4!%#O¥LB##R\"!(AM[B6.)9$E8Q\nMN6X@4^GOVS*AP=\"&7$?)6-U)(LGJ\"C%E,U*?:`^&A-.V,I2']B.)I[LI&D@_\nM?,!LM03¥1WH2#7*I6?[&NSY.ENY+=5$:JTC[JY%05[T`[C¥<E\"$N[[&3(+/2\nM;V[BAN6;TQ*%DMH!0NP[;M2AKXY?+3$]$\"2?V?EIKJ^2VFNA+!/`TCW]LU8X\nMI\"/[L,5*¥@>HH?GE$M(1SIE9+#)K6Y4.KRF*,3_5IVY5$3UX¥SXCO49BYL$8\nM¥J;(Q+T.X`T^WCL!$DYM;>)A<HY=)ZCESKM7Y4'S.8,KCU<_%\"1[F,W;.)5<\nMAB'Y$.-TD8C[*GM3PR)D3U9¥$N]`F¥H$+<S+\"!Z*@@CBW4$@GZ1DA`,]T(¥;\nM,.</%1(23%Q`H5¥-Z#VIEL2&/\"?)1>9&^*3:-2O)Z=\"-JY<)>3,#W.8>FYE`\nM4P4(9:BKJW[5*8..++Y*/,L54_\"JU*¥!]H>!QB2UF_)#L\"7>-7!D<FCDB@H*\nMT!I0\"G<8)3(Y%AZE!&AFBC4JI5Q4QEJ'FOM_')0S28[^2Q9H^4K0Q!!*\"AI4\nML>E?AKT]¥$Y$_P!K'U=_V*UIS6=5XJ44FBDGXMMB=]Z?/#`US23/R4KIVG+>\nMDW'B]!¥5\"7.W$CI]V63G$][C2F?)'65GJ,B?5EM)9&')SS'$¥?VN(8CD,H,A\nMYH$@B[;1IV5T>3TC.¥3VP(/QJS¥#P-:'Y],NA,GJ7(Q0!Y/IS_H7ZT_ZO8_X\nMX_U__=?V_P\"3[/VO¥Z9D[N5X)?_7^7PMX8[AH>'UB*`AX;H&B.3U6G4$?YG\"\nM`>¥IX_@F<?[X0?5W_>EQ&U6J(ZFAJ!4T/MOF1BB/-/#?,JSQW*3E9)P(XW83\nMK&Q8?\"?VB=Z-V&73P[;!?`DOG%HP9C;KS4%)%K7B.HK6I^@Y@3Q[[@)$)#HQ\nMCS!.+6VMY[<)\"MK(K-]DB7B02*MW(V%>F84J'0?-E&'DY-8LM7)Y6D%O=2!2\nML!V\"Q$#EOO4GO^&/'#JY4-/&71=::U>:=J-G<6)\"?4G;T2X#`1KN11JT!^64\nMSE#I]S/¥B>A9AH_YC>=IKYY]-;U2DXF&E16L<Q:('[(549_3'<@@^^1CJ1'E\nM]S`]G]SUUO-'YFZJ?2N/J7E6VOT,<ILXFFEC5A4LJF5D56[4;D#U¥,G^;'0!\nM@-(1WL`G¥M62P7!NG-SJ`+>E>S.7**!N`!04:M3R!/@<C+M`QZ#YLOR=]&(6\nMGE-J^G/?E4:5YQ<B@+(17TP2#Q7PVRH=I1/0,1H/)+QH.F*R)Z[M,\"4].H/$\nMD[`TVWZYDC7P(Z,9Z8#HDUUH]O&SS¥FN*,R$)4\".O5EXT/TC(_F8SZN)X8\"\"\nM/EN2Z2-[6RF:-XY!;QQ5/K2+U9@=_A[YF8]QM3,D)7_@S7(X&EDMRDO$\">XE\nM-*`D<0![9\"0¥FLY/>T_E5_2F-W>_5HY%(M#&IE9Y@`>+`LI4'QW^6+`R8L4=\nM8K8.$1R_H_\"*49#OR¥2<,87W*)$=\"L0<(I8`?6C):1%%`2>A!(['PR¥1B.@4\nMV>CA9R`0¥V\"R;_6(VILO:A!I3VR¥3(Y(B/)%10``I*S2,RMR44)-.Y^C(RS3\nM/5G?<B+BQDMM..IP([V_(1O*X^!>6Q%.AWRCB(YE(DH6\"17&J:=#>@FW)5&9\nM:=C^V>E/EF;@E&75A+=ZC>26,5S<B.=Y>$BD2#CQ;:@I¥NV9'!_2#5P4BGU&\nM!-(U6.Q$8EOX0B:2XW60$?OE(H/B]J4R$H@_Q!D(Q8AKVI6,>GI;)#QUF6-8\nMKBX9OAD4BAJJ[+Q¥>IS\"R8QWLX@!)++S\"MM916-Q$)?J¥G&VF4[E'V93XT.X\nM)S#RP#FXM0!R)1DQ6W6%%K,`YHP)(J^^P[`US\",2'+AE)_L45Y'U!Q!62C5W\nMV930J#ET03W(E.71:[)'&ZD!0[!6N#N5(_E]SA(IE\"_);)¥0CY$$¥/B*¥?B`\nMZ=</B)E&^H0[@HQ^(@,A\"TH10?L_,=O#('B_`8<`'51EX?5XHFE:1I?WA8$#\nMBZG92PW-1X=,E'Q.]&_10F^.9Y`/267?T`2?2[4J:DU^>6##(]S\"1EU031O5\nMEX¥78;R,2&]POME@QUSIHD;6.K)*RJJI4+(D2,:$+3XMR=SX97<4<)/,_:BI\nM/WO#B>#7H_=J7^U78JQIL*BM.^$2#&=#N3RUN+:.)88T;]WQ:1]OMC8BM!M7\nMMD2)'D7&E,(^.]DCAKZB*X8J'<=.?¥I[CQRR((Y[H!¥VHW=M0O.\";KQ1)5H\"\nM%458GMMVIA¥.^CFX=5*!YO8_^5F7G_+`O_'`_1/4_P!W_OS_`%_;)¥#G?R@>\nM]__0^5%M<?5S$S-$*HTD<JMR)Y=>1/3Z-¥G&-<R45Y)A)JJ?;MT1A(JJ23QH\nM>H8CVR_BB&0I='K#N)$=U!B($YZ]:%6W[>^43R5_:[#!A!Z%JZGE9(Y(G(*R\nMD3)6E1_2OWYAY,D3T^US1I!W%C'F\"XNIS'\"P]1DI(X(V4\"E\"HZ#[LQ>/OIA/\nM!7¥*1FVF,JRPNW(*)!)2E6(%5KML,A+AEU:HXICD`]6¥F0:!!(EUYH!N[.5Z\nM1VT*\"25F/7[944^9RL<(ZERXDO<;C¥U?+NGVL&F^7M`BM;:&%84:X8-1D;8K\nM&/A2O<\"N1G+#WEJ)WYE@>I?F!J>H2W4¥PEECEE]&6-%XJP/0C_)'W9@SX>B¥\nM8[REED^MZE/=0Z?;EKB.CE2/AX>Y:FP[GMD#CX^YIGD(Y)W:^4/-EXTAX-$A\nMW9BP-'&YX#H`>E0.FV68M`+:99\">;((ORZ3C%-=¥29`9&B#&@;_8¥:4¥.^9_\nM@\"/4_)Q9Y0%2?3O*NDF\"%XQ*\"S,KJ`Q+]V)``(¥!VR_%C!ZGY-,IB7>P+5_,\nM5G`Y%G;MRMB5F*4\"NC].'?EXCIF9&'<T¥N]Y?JGFF^(N%G):WCD`78CBI(H3\nMOU/?)^KJ$V.XL2O-0NI&N'7D=EDMDKL6;]JM?#(2QR/*@M7WI3:N]W<PP7\"@\nM)(QH2.1Y4V`!VW/MDX¥4>H7A3VQT7AIGJS,_UQY9$GMB!6(+T)¥\"Q^BF6<4B\nMQ,@%(6D44<@NY$M!$I$@8U8.W^?4]¥NAA)YED<EJMMJ.E:?\"D5CHS7NH1*73\nM5;QZ-5MROH(Q0`=JEB?;IEF3'\"/(L0\"4'JNM:QK$`74[A_J<8I::?$>,417H\nM!&***]>1%<U¥XV61*0/,Y\"/OZQ/)F78CATV¥<F/2-FCB3F+S+J*1/SC2>6X8\nM^I<2&O+:@J/YAXG[LL&I(ZL^$I>^M:F¥:MZY0QU3G'12>76M*5R.3-?7[$¥D\nM$L[)&`%`(;F3V8$4W&8WBR'4M@KO0]6)Y#^;:G09&6:1[V<:'5Z%*XNX81Q<\nMH¥*([`@CDNY/+J:^(ROU'F`Y^.N¥KV(A:&9\"20&'I=ARVY4_CDQAON9F([U!\nMC2$M*>?&0#TA]H#YJ<L``ZA(`KF$'(DOJ4#@Q5++'UHOOWR0B)=6->8:<!E5\nMMU\"`B-O&NYIX8^%'O2+[T%<(](F`<,H%$!^RE?C/S/MD3A[K7BKJ5\"YD<%C$\nM3PC`W8;TK¥)IVR!C+N:,F_>A#+,9>8I7C0C^;EM4940?)I$2LF,RR1Q24?TV\nM)0[@FG4=3^K)BVPXQWA7M;4SW=O&O[;^J>1-!3>GOET20TR`\"=N7:>2L8C+N\nM/L[**=LF>)J,K1!B!*RH'#`E:G?K^UOURDSD.2¥8'7[%T9$5Q+S+B4?\"S'>O\nM(==MSMF5C/>&(F\"N^KP?[_¥`]U<O[QO[O_?G7KEM>09¥3__1^-,%Z7E9!*7]\nM3XUD.U21W/8YB'),=6SC¥TRMV:<RFX9UF+5](G9%%*;_`$823+F2VQ$3U3<W\nMS\":*.)56%HF9FV)5NQ'¥P.8¥X3'(V[+\"1%$+=L¥>TS<2.\"L?V2>K'L2>PS&(\nMR'HYT=1$-S7#S%#S3C&0J`4^(+U)/7*N#,6N>H!Z(<WPC=HE3U`7`HHH5K^R\nMI:OTUR/A2ZFF@Y@GL%E?70$<2.R-)RMUB0CE(O3EWH>V^^&&('^)IEG/D]8T\nM+¥KM8U#ZF]XAL#>QLS-<(R>BX[R¥EIQ[;;^V7C1B7+=QY3)ZO5M(_*W2M/$3\nMW=TCS/'Z=Y;.X/$#?E1J4!ZT('MD?RLQ_\"T^(R<Q^6M%DA0*DES#\"Z-.S@*W\nM2@J#L*?LTRR&F/6*/$/FQS6//EM8%(;'T9D]+FW$``$F@44/;V.9.*!CR`\"B\nM9/0O)];¥YW4LETMQ=E90/40KTJ/V?A[#,KQ#TIIG(/,]2¥PW-Y-,IF`66)52\nM=*D?%NW$UIMD8QD>K\"_<Q&:]:1`KRM3TW4R5JI/85Z_/^&6¥-=4'B[TC:1C$\nMCRN9(E)%T$-\"U!7X2U13Z,A9[FLRD>J3/*:=6$;.6C0]0K&@K3P¥<0?)%^:(\nMT]5AOH[B;C-#&0¥D+;5(/3Y5[Y.$2.B¥0/-.9=1NKEKRZ:1>=XQD\"Q@*!&#3\nMB!T4#N>N9$9GN82QWRI*VBEFN*F1>+KLC\"I'O0=?;)&Y)$I!>?[DJ5*,&VJH\nM#-Q.]-O'I3*C`A/',M2JZPR<'5Y5`D9&ZK%W<'I]XRDWW,XB^92R01$55@KO\nMQ=>/CU-1_F,C*,CT:Y8SWH?FCJXCJ'()W[D,*_+;*_4.80.+N4@D1\"A@0S@^\nMFPV!]CX_AEG&>YL'P6!!058`GXE8]Z_:^>1¥62D'I3<7P\"0BI)5A&>-02VW3\nMMMD2;8;AZ-#&YLK)8U1X5@4@5()],[@U-0:]1ME7%70NQPY+YK&)=ID8T<(\"\nMI%0&5COCXA/¥);I1B5&0DB@XA7-`H'0[`5/7IB.(¥PU¥4AT46(#6TT-8YD+#\nMU!U--B5J.^6¥-(]74(.8F-`1^]EEDXJJ?:J>YZ4RKCD%$YA35>)D@Y-&(U#>\nM[JI^P#UKOXXG+(]\"CQ3U2^7CZTJQR<K9TI\"6W^`;[D5%?<9#CEUB69S)K<:%\nM<Q>6K+S29(A;75TUE8Q!B74Q_:Y`+3_AJ^V`D'^%@9`]\"DKQN]PD?($1AD\",\nM:_%U(VZGZ,ECS5_\"LB!_\"C+6!XR]RP9?JS42E:$'L=LRAE$N0#BSE?1&H[HD\nMHD8/QJY5:DA1T[Y$R'>PNUZ_$[J)\"B.BO(&¥\"-J#^N5T.¥H(I6BDED>.1$Y¥\nMDXD4WZ=6¥3X5[9D8OB4\"01/I1?RKUX?:;[?W],RZ/<SX@__2^,TD,<5LS0¥H\nMVF%96K6DE:@+MT&4W&75/%'N7\"\"=K22]Y%EA(^L#<_$/LB@(^¥],J.W5LCE@\nM.BC#<S-'&W$AHJO+(K;LI:M!E4L1EU;H:@=-E<RS\"Z94!4*O-[8'8&0[4[DT\nMP1TP[RF6H+TCRO¥`EUK&O,J2L;2%^,T9!^+@?V\"230^V^9`T_FQ&3WOH/RS^\nM4>A:<;>XO[B)I6+\"6/;F(R-QZ@.Q;V&#¥K?<IRGN+TJVOO)^@*'@MK6$VH>)\nM1&%#*3T\"#J\"3U(ZX?R@¥F%^18U<?F()!=6HD2-K>013PK0A58¥AQ;W%,E$\"'\nM5D'F^J^>;NZFU'_2/2$CTY!J,```*D?A3(Y-2\".929QBP>36[F5\"%F9Q'RX%\nMR*A\"-V]@?OS&'%+O:9:@,;GO)Y22LK*Q5@)0?AJ>BCVP2E71(F#WH#]Z02^Q\nMB4AQR^TS=&/?*Q,GH&N12U(.*E$'I%7HZFO[7VB?`#+XF0[F-Q[DODLIY`T0\nM',!_W5*GDBFI8;],G$Y#W)$@@F@_<70A`,DIYH2?M%33B#T^>6CB'0H.0=ZU\nM=.8_50K*&FVE9EY(K@;A?ZY.,Y>;\"P4+<1\",6W+X4!99A2E%'3E3WR9E[T2`\nM[T)'*L2/)RYK'LK%10LQJ*&O0#OD8Y3T8CWJ4MZYKZ\"¥9E;F*?%5:?++A*1Z\nM,3'S0,LT¥BBDKL'-2E?A/+K¥¥-R[V48EL*)FC`!A#(RNS-ML/ET]LHR3(ZMP\nM%]5R*.*22MS*)1$Z\"G0?3¥LQO&D@[=5K6UP8UD]`K&-U`(K¥7CWW¥,L$^+H6\nM-@]4P?3)FMX7>135#)Z8-65?Y2>@->U/IRX2(Y!IEPJR:;#&T0<<RO&1HW^R\nM0#7?]6V3,I>2!$(R2W3U)BB!;20^K$HV9&H*D'K0'ID#*7DY$0R6V;U88HP@\nMC(@X=@.7=B2>OB<J.IKFYL*62*P:,`<Z,(W8[#B?#'¥UY),B>J7SOZA-8Z\"V\nME^'H-QL!T[C(>,#SB6N_-3I+&J,!4¥AP-\"1UZ@9/¥U&(Y4VXR3WO8/)WY)^9\nM_,[Z7JVK`>6O+&MWT5I#KDJI<.3+L2ML)(S0^,C(![],U^?M>$.YSL6DED.P\nM3G¥TOR<T[¥N_.6I^6H;RZN+.RM(C%=73H[R.PJQ'!$4U_9XU`¥3US$';D\"=G\nM?:?V?ED&]/-KGRGIDOZ/BM8W4N5C!]1B2&Z@U¥3UXY:>U0>A99O9P0ZLO¥^^\nM4(=(M?*_EBUN(X(-.M9M8GLRQ9&D<#BM035CT%22,ECU?'T+I¥_8^6/(O$I-\nM.D@G]*]A:UGN(UN8HFI]ANP(&Y]LV4,@ZQ=3FP9L?.T0D$T,3DMS2=BJQ[GA\nM0?:K7<GY9?')'I%P#+O\"PUA=/64JT_[IF45(';OL!A)¥@Q]P5SZD+%`>2J%Y\nMN0:M7PWZ>.1W/)A*<AW+()N#.G)8N$IXLFQ;MR`'@-M¥0#'O1&9*-]&;Q;^_\nMI^S]C[^OOEG'+O+=;__3^+]I*&MY(IG_`'3[5/Q$$'<D?TRCACU\"#:.L9&C6\nMXD20;¥H[J(MU!%%9?$GODHCN`8¥)[E&V4(3#*M1%7][T#*=P?:F7<$O)F?<W\nMJHD6¥MIX'`;TQ)&4`-\"O1F[5]LQS\"0[D`T].T+¥R[J#3K:TD9;>1(_M=FH:;\nM*!¥->O7+89*YL^((D?F%?W#22F>3TT)4R%MAVY4'8>^YR.3)$IXSWE`7OFJ5\nMV6K!6B`]9B>(82=\"HV.QW)Q'!T\"`?>E=QK&J-S0TYHJNB=!*G¥P^CQV]¥Q<U\nM]*;@%<2LX1!-QB$PE,Y/[-`>/B!VS'&6(YTLH<7<CXG#W#J**-Y%_EWW5%KU\nM^9Q,P>4ECCKN1<A1G4D45U#2$`4#C;H*$>V52`ESW^+9PGO\"!X%)2PVG>CNM\nM25XUVH:=<$<<>@^UHE$A32+D'+J:K,XJK4)+=#3O¥^V9N*`ZL3Q=S4=K+',I\nMC(\"JA+$$GKUW¥?EF4(#I0:SQ=RJNF(P`E(@252_(;E\".@8^^6¥1',L\"#Y(86\nM$B*9%;X`S$1G<+3]H^(.4FSU8^(1W,+¥PR*UTBA^+$KR04Y$']IO`4Z`9/<,\nM)3M)A;./53@TL$0Y<CM6O2A_AD03_-:]U9+.6D;NP7J0%VX]:TS(QYX]8HX/\nM-$QVL5N&MY:J>/JQ/U)![,.V_?#(WR`^;9`<*¥BW'HI(&0,#R!(H#V('@??*\nM^$GG3*[Y*KQE9)KBC*[1<9$VJ1T'';(&,1U\":EY-Q3¥>2R`5C'(@=':G:OMD\nM\"0>0*DTM#2<HUC/*@/*3J\"M*T&VU/'!$'K;$&07))%*50!@¥*ARQ;JE>@KU-\nM<F9@=\"5,E]*<IHW:57(9H:5`KL/G@$I'D`&S'.NB?V!C:+C,*3<F!45)XK_'\nM*LF$GJ'90G8^E#RNZRB@YE\"2$'11]/7*!CD.K`U?13?T6BECDG$/J-S:H^)C\nM2@4^)/85P9,XCS)+9&-¥R'V/^2'Y0VWE@Z/YO_,SRN+VSUHK;Z5;7JS!M+N+\nM@TM[F6)&0ORVX¥EXCKOG,Z_73OT\"7XIV>FQQ#UK¥Q_//EC¥L=)¥R_EWJR3ZW\nM-JTL-_Y=33I(C<VLRL'XW8)`2$BA0*K'-+#3Y]1+U57F[`Z^&'D^1OS\"_./S\nM)Y]U:PUO7;+3X)[1#:&&TC98N\"J%C9_4DD9FIU-0*]%SH=+V*!R'S_8XLO:?\nM)#Z0P[R?/J>K>9=\"LK>>:Y$%T);KD.<:QHU68+]E5'@M!F?D[/D1MLQ'M+DF\nM=TZ¥V^<;35/.'F%9+@&PTQTMK.¥1@8Y8DW:,T'2NYITZ9+3]FY!S)=OI^W¥9\nM'JIY]YCU./6+JTAAD+1P@.DE:!F)H%.U0JC89MORYCSD7`[1U^/(-OQR2J5D\nM=UD!X+01%\":#X.N_3(Q@1WO&9IV=E)I!20MS7T:JH&P(ZU%>WSS*$9%J!D>B\nMR20P1QRIR9$H.&Y/(G<T¥!E?#75D(%JBROZ@?CPB8AVKN._W^&3L=[+A'1-^\nM\"?Y?]SR[_9_EZ?CAX?-E1?_4^*MNR/*EJ29$:3ERZ4(V)'<#QR`C?0,3?0HY\nM5CCN)/2*E(J-0C@\"#U*]:C`(`=$\"9'>B%X/.M/C]4%EDILP'1:Y(SI'B6NF5\nM#;Q%'Y-;RT@8[?NY-RC>]<K))9QF$K@=(Y&!@^`<Z4¥3T--J@XG'$]&5CS32\nMVO)%A,4D8\"K4)`HK0G?8`X!B$>8\"0;[T55)'</&.4AXECU8$4#==R.E,KR2`\nMZ),?-,5F:-4@N'I);Q¥5D.Q/¥JM_E=_;*P.¥)!]Z:0_Z0U`3ZC$*U*&C=:?3\nMD9<'4!GX0¥T¥M.?\"X5UH6((X^QI0D]/;*C\"'<&<8D)BT8(`:,LJJ3(G3Y;_P\nMRKP!)'#)&VMM(¥:ET\"E_B:3^9>W;:F3&$1YKZN¥(Z'3B(UECA+[$(Y&S*30J\nM<R¥<8GI?Q:3$J¥5A)'Z;-M&X<*K4`7^90/#+P*Y1#7MUM#7%LC6Y94X2.R>F\nM!_(#O44!`[[Y;Q<7.@@WT2>]98K>Y]1JQ(A]1:!2=P`P]LA*AW,+(YO+IUCN\nMKNYNGC!DB.Y7]H;*I%*UVRB1,F-A4WHB%5:-P&:-:5Y#W_A@&.0002IKQ*`J\nMGIR!3Z984!)WI[>^94)7S#$8K6[T,KN6C\"M4DT(!Z&M>Q[Y=7=3=``(9DX.K\nM@`OP`E9S1@>JM[FF4R!ES;-O)$&1V5V=\"7<`5JU6.U*9\"$1%@9`=S:D+*#'¥\nM12JR¥MP0#OL*;YD¥,)]6OCKDN:)(TEF2+>1VJA;<,.S#P/@,HGB$>J3EOHAV\nM0))%.BDQ<`!(=PK]S7]60X_)2X&2.=:[(8VDDBW+!2?M\"F2OW)A(A.S?)!';\nM*8>5RR$S1J0O)&^R].U!URJ>[EQ('1`PW;[,R^I``PA'2M-B*GMD0\".H:Y9)\nM=`];_)CRS/YE¥Y1:E-I$FJ:'Y:]*[U¥Q0BX$,9:BEH!61_¥`GFK>X&:[5<,N\nM9+G:;#(FS3[&_-OS_IWD#R9J6G>6-5AUW0/-,<MKHFG>O',]O,W]Y)!=@R55\nM:T,,@?CT!0Y@X¥&,][GY<G\".Y^?DLADDANIF9[HH!<2¥NC,=N--@H!W_``S<\nM:?0XWGM5DC(]4OO+AEBDC?BRKLK*:¥BQ%0ORS8'&,8]-.-48¥K>L_DY\"(M3U\nM_P`Q4:#1?+VDW(U2Y^T'8H?3C*F@K78D#,&4_P\"DTW(]`¥/M)HY%EN)4\"K=3\nM2M;(#0(KMRXBE-¥NQZCAZN3CR2CW(N=*36LT548QDR!>BO¥`L@;?$*=:Y9(B\nM?(MYS\"7<HO.%<K-¥%*4\"U`J=S0'N?;#CA75QS$'JK3/Q,;,CR\",#U5W.YI1Q\nM0TJ/`Y;.9Z-D(#O4$1WD>-6]5V8GBQI4-T/S]AF/XTX]S(¥*HD8D85_=>BA]\nM25Q05!J:@_=49=CR1ES(8¥NYOZU_R[7/3U>W3Q_LRW;O9<8¥G__5^*EK#<$)\nMQ41JK,7>M\"*=:^`'ODORP&]I,:1,L<OH%5<2<&)X@_8#?MG&<J[F!ON5)+DP\nMR1J\"2RT8*`2/Y>5:[;=LQB(_S@Q^\"(,G[NYYT8R3!(#2HHP/Q?/Y8#$=))$I\nM)1&SA@E?3E)XHYZ'VIT^_;(<)'4M@)*-229)$YN#3[;4%0P_77MEP(K<%'#)\nM-+2&6><0LQ2)@?35`I8-U4[[['L,A4&<8DLN73[2&YCF9PTQA'UB0M12Q&Q%\nM!U]LA+R;O!¥TZTV*W7TSQ8M&**]*4?L6]¥J&/OIL&W5D<<,7[LRS>FO)NO0D\nM=5Z;;=,,I0\"C?JG$,'-;1%4)##(9#R!-(VZ,#M7Z:C*?%KHD\"D^32O4MI9\".\nM*48(NX)WJ&]Q[9;&$)¥[8R$BC((G$D+S+!#(L.¥<*,(@X'VP'9S6F]\"<OC@C\nM$[-1!`2F:26?^]<1>D#Z!\"UJ2=V-?'PS)..-?M<<VEDX`%PQ-./&2%>@)&S*\nMW?Y92-EX9O-O.-^;:7A%,$DFCI(@3F%`^(*\"*U)/6NWAF0.&0W1PD]6'6PFC\nMM)FH8S=DR592-F_EWK0]Z',>>*$>]C*![W`'D¥@8*B*`BJ*!>QJ>_M_')1E#\nMN+57>2K`H5^$B11$0.0ZD=?D<S(\"'<Q,O>H1@M¥:A@SIQ56.SH*$5`(_IDY<\nM`ZK'%?>GWEGROK7G'4AIVB6OUB=/B>1_ACC0[%F<U`5>I¥!F/*0'5S(:8]'K\nM'YG?EK^6_D?RYH:Z#^;-GYU¥]W0,WF33-&4W&FZ>W[0M[RG&<=FH0P-=LQS(\nM'D@X2.9#QV*Q!B5C*BQDT)!H&-.B>/R/7&KYQ+60.]!RVWHN@B8.2[<R2:%#\nMO4=LEX,>XAK$/,H8,8T7<J5)-Q$E:U)¥?[,C<(]\"VQQ`=ZT2^C<%HR#ZBA%)\nMKR1'ZJ3T(/?*I3!9FAWK4DD:6<QH6>I5F(-`H'[-\"*G#\",;YAB#?57=9/31=\nMF/I?N_8=S0TPY<T8M^*'$_0;_G%;1+[1_(6H>=/+UC9W¥^M,;.^TF_¥`5A>Y\nM,+@(¥=¥OJ\"%`*U06DA/¥PS1Y]11Z/08,=1Y/EK¥Z];OM:_,[S/%>3P3V]E(8\nMK6WM!RBB=J$Q@[<J':I`KX##BJ7,.GUTSR/XY/-QZA2-49G**5D!H\"&[\"@[9\nMML,X1#IQ&^B!N%XW$B`D)&H)9`&(;H#Q%-J]?UX<^<$<@B5=7MGH'0_R$:^M\nM8EL-0¥RZA]4NII\"6-X@-\"¥/*BCP-!].8¥#NPL/$&14'IP+1(%$8!)J2NQ%/8\nM]:YF@;<OL;X1!=QE0([PB5)HW8,S,M.P:HIT[&N4<1')LX3WA`;H8PP]1%6K\nMN=R\">@_RLN!¥F(\"K`/W2R.&+\"1D9?#P8#)W`CDSV[G)'(790WQ@<@PV*@':G\nMS^_,<W?3[6.PZ*L9);@ZT+DI3HM>H-=OIS)QSKN^3+B'<K_5F_Y:5^SPZ'KX\nM?+VR_P`4_@,?D__6^,42EU)2,QQ`_O*;¥344![;_`#KEDX&/6TF)[U3TY6]=\nMEB^VPXJ37D#[]_HRN6,RZ(%H_P#1JAX:U1_3!8,.)&_4`_QS&.`=[9&,ST3#\nMZB)&X(H].1#4=!4>_P##!Z8]4D2\"1W]NL%Q'#QX¥E9GYB@(7J!7O¥LB\"#WJ\"\nM(]ZM:6T1N$*`¥BHX@BI/+[(IXU[Y,Q'FI(+*K*QF=P5B*@.3ZA_99!TH-_HR\nML[=6>/$2RV'2PT8]9\"P8AT4D5!/<?/#$CO¥`L9SC,<BGVGZ7<,K(B%DD1H@I\nM(!ZU+;]#[]¥M$8GJB..?DRNVT=!##)<<HV2JHH(*¥%%\"\"*=:]37Z,A/'#O9'\nM&4¥L=*E<)*$\"Q*3PD8@L5[;>%>],QQBCW,!8[T]:/TH?17B¥0)4)4]6/Q;TJ\nM:Y/Z>5)G-C>I745JLZB(^I.3P+$FI78$4K0#)\"9[VJR>J6L>,%G),G-Y0WH0\nM*214TJ30T7Z3D^.^37(^;$]7U>&W@GC'%YWDX0H_0C:K$=Z9$B7<Q$B¥SNA#\nMJ-[ZYC'IPO2¥4`TYJ**B!MJ>-<`EY-4I]ZFZ^LJ1M20H>-FK?LL>@'<CVRSC\nM\"B0*'N(D(2M5<-1G'CV''YY;`VI'FM])4>97C'$Q47>E*>)S(QC?=CP2[U(J\nMK¥E(XE0?CVI3L#M0_1EN24!T+DXXCJ5:+ZR5E)N'2.:)8'4/0/&IJ`P_EKN!\nMFND9=`WG*8¥D/*T:*DM2C3)16VJPZ5^GO7'B/FXN2?$K('!*.Q`*DA`VPX4J\nM17]62C$'F6H$JK(+D0<5I'Q:2,#[4A'>G8Y.>,=$¥`*DL4;^D[*5+*Z2&O+G\nM0<JL!T]CD8XB>Y(@HHOJ21+Z?)&D\"ACL4¥?P¥<L/#'F+^\"G&3U:2-A,7*`@,\nMZ_`2\"WTY7X¥>YE&(B$1)&_IQRB.DG/BR;E68;@!:U`¥:]<P-5/\"7)P1OD_3+\nM¥GM'T72OR@T'S3YAFUF]EMO5D:/2[S5Y+=8G!X126&F2_5E`[DQ$#]HG-)<+\nMY.]&,\"/-^>6K&QN=7¥Q7]FW\"WOM1FN;:WKR8U<@'P%!].;;!.%/.ZW8¥_P`;\nM)>%*¥3R?UF+%@2`&6E>G]<SH`'N<(6A_2>0BWBY%KAU4A3UY_9J?#QR&:`[F\nMG(\">0>O_`)JZEI5_I_Y?:#I.IVUW_A^!9;W4K2830;\"C(FY4$-MXYB0QF)VI\nM$!+N>3O'#*TL8:@D5B*[<2IK0'M_',¥9!6Y<N)/<A9;=G+M*!O`W1JF@/;N*\nM95P'N;08H=[5T]\"9;?@ZA5*MW%-B?&HR^(+7L>2Y8E/J5(HZT\"`D;;;@U_#)\nMQ@1R9V$-%Q,M\"H=)\"T8!)J\"O@21N??(RR2C_``H-'HC[:)87?@JR\"<^F$<U4\nM.=S7Z,GAG9WBS!`Y14N2?S/]OQ/3_@>F9_%%E?D__]?XVQ(]&CD5II8W+W%-\nM@%<=!T!(.8X@>A329)=16T'H^F\"SL)@TG[%!0&AVRT@CFR\"O'.)'!<F4%?B=\nMMMAN\"#VWVR@FV=M?7/7KM^[`8¥=P6KWH/#VP5Q<@P)]Z#U1EECLKF1OC0F!N\nM9%.E:K_MYCRXNI\"+(Y+[0Q#@59F:,#@U1R;?XD'A¥¥,>#K][+C/5Z5I¥48D+\nM.!('=46,GX:R+¥)IM5AT.2H#DRV#.=/M96O(S*OQQQN&:1044G8U!_\"N71'>\nM&(XCR9?IUNEDHNE0K,B49B*?:-`R]*U¥<)G$<Q;8(S#(.!A*&``K&Q>%-MBR\nM@-1>^W?(<6/N(3QS\".5>0>C!PT7%>E:&C$-M4BO095Q1:I9#U*!GN&BCD)XQ\nMLH8GEO¥`%V&_0GWR<1$]Z¥5O.;M_4OC$¥LMPULYD92QY*6^T`37;V&PR0(:R\nM(I)J>K^BD=LMP%6&I@D4@¥@>I/?KMUIE<¥XCR+6=NKS.^FN)Y4I4^DS.TW[*\nMAC2B'Q/>F/BD¥UHGJ[CZ9**\"D9\"L\"*$$'KO^NN^)D*L\"V)-(=/WEU;^K*4Y3\nM%H9M@@9>FW;&&8]8L#DB%T[W`)MXCS221CSVV!-2Q;J/HS-A*$NBB8/1\"^FO\nM[TAFD^)6#<A0A>P^9[]¥N$+Y%CL>JLU)7=CRC0[&.@Y;]T[;9,QD&8XAR*YK\nM=U@,52(S503U85Y;D[GQZYB2RS!JD&4EQC$P2-:;@J'?8$**_:%2/;;*SG,>\nM;`RD$\"8Q$¥QHKS1E28RP^)2!0@]&IW/3$3)4Y\"JQT9I0[&)43D&KLSGH`-MC\nMWITQ,)2Y*)`]58A'YQLE9HT!\"KN6)(K5JBM/HR/@S'-GQ#O6LE'D8T9844R*\nM?BY2-L$`WY9,0(18[UK(D$4:NP$R,%*FAXC[3%GKN:[;_0:9/<#<6VQB.]$S\nMP/-$D*¥8ECC_`'K`<2)6KL:_%0#OFJU<AT%.3CR\"',/TH_YQY¥RZIYF_)S3=\nM,¥N>6;:P;RQ-<6GF/6KNY>WM3(1^[EM($67ZPZ@_$A:`'^>N::<=^;L8]H1(\nM^E¥6?F!Y:G¥I>>_,.A75[%J3SR_79KI(Q!19C4J(:MP;Q`9O];-GI<<CRHNH\nMU1C,¥F#P6[NE_-:P1SM;2Q^H7]-3Z3&A4>H0H_$YM8X<D>C@C%C#()=/TL>=\nM8`EJ?T8GU)UTIA(JBN[A@\"'=3U/8]CEHG(<P&¥1'1-_,.HV.I>4O-%N^BZ9;\nM7VEZK%#IVKZ=86EI)P=]X)1;1(%Y#>LAY>.4SA,¥J9B(++_*%HUUH/ENTT&S\nM¥JM)%=W$'F<:S'I\"WM[:N*F>V.K?OYS&-@+133M3&&W.ODL8/'M;L+6QUKS%\nM;Z=2334NB-.D:-0P0T^`)VI[FN9^.,3SV8R,AR\"7BUFEE410`#TF9D6K&JBK\nM-Q¥0.^\"4L<>191B#S\"7UM7F1X4!B9?MDUJY'4^QRN6;N(3Q1\"C+`JBS<1CTY\nM:A5ZAB31G![@'K3*C+)WJ9%:45.4(0,%-6!-?B4[';MX9;$2ZAC4^]$T_P`D\nM?S]/]V?S?ZW^=,LL?S5]7>7_T/D+#_>#[/¥`O2_S_P!G[Y&;`*$__'0TGK_O\nM</[S[?T^_AF)D^+8/BA+K_>^X_OO[]O[W_6_W9[>.8T>?52MMO¥`>>3['^]3\nM=.O7_/AF1#E^I0IW_P!B/['VS]O[/7]GWQR<D_-.=,_WK?[/VHOM?:Z#_-<Q\nMCS9?)ZE9?WD/V.W]YU^V.G^5F9#DU!Z7#TB_N/[EOE]L?WG_`!9AQ¥V</BR3\nM_=K=?[Z3[?3HO_\"Y/4_#X,Y?YR?Z?_O'>_9_N5_N_P#>G^¥_W3[?S>V0Q<NB\nMQ0¥?VK[^]_O!]K^]^GWR.7DI^\"0:]_QY_:_N1_=_W7VO]W_¥6_PS!/Q82>:W\nM/]¥?[W^¥?K]K_9^WAECK¥O-YQ=_8D_WJ_;^U_>=^O¥<,?@QZ)4_^¥EC_`,8V\nM^W_<]?V?¥K-B?IZ,¥7Q45^S+T^V?]3MT_P`^N0Q?!O5++_>->O¥`?/¥`:^QU\nM_P`ZX,CB2^\");_>BZ_U4^QT^CV¥<<;$J:_[RW?¥`QE3K¥_V?¥CQS98D8E:T_\nMO$^W_>_[K^U_SS_AEA<Z/)4U'[4W][_O--T_O/M?M?¥`&WMFOS<TH.?_`'AE\nMZ=8?L?;_`-G_`)/CF#DY_K:<BE=_[W_M?8@_6/M?Y/A[9*3C'X*]]_O2_P#=\nM]3_=?8_V'MEV)EC4XO[N3[7]¥O¥`=]>@Z_PRSKU;)(FP_P!ZI^O^¥D_3^¥[?\nMCX^V9<>73XM12]_[K3?L?WK_`/&/[0_X?*Y?0RP<NJ:#[:_W?VC_`'GV_P#G\nMI_E>&:K-]+FX>;[O_(+_`-9[_P\"FE_XZ<_¥`RC'_`!T_]Z!_<>W¥_P#D5SE]\nM5];L8OF/¥W/_`\":.M?¥`'(_O4_Y1?_>#H.O_`!=_OW_*S>=G_C[76ZEY_P#¥\nM>TOVO][1TZ?:'V_¥K-UDY=77P9[#_P\"3%U#[?]POV?¥`F&_W5[>'OF''FYHY\nM,6C_`.4\"M_L_¥=E?M_W/VF^W_E>&;3']+**/¥O¥`_*7>6/[W_>23[?7[9_NO\nM;,`_4W18R?M2]?¥`CI7?3[?]X?Q¥?;*Y?%@4,W74/^,)^S]'V_;^;#C^#`J.\nMI?[O_O?[F+[7V>WVO¥G^&9^+G_\"P^2X?[UW'VO¥`>).O][]'_%?AFTCR_A;A\nM¥$+!_>3_`.M#TZ]>^8>1LQ)M_P`B>F5-S__9````````````````````````\nM````````````````````````````````````````````````````````````\nM`````````````````````````````````````````````````0```!¥K```>\nM*P```((D(R<A'\"@G'2(O)R,I)\",G(B0G)24F*2HI'B`I(AT?)A%024-4(#<M\nM,30Q,C4P,#`S-P(```!*4$5'.$))300```!*4$5'.$))300`````````````\nM`````````````````*O.]9X``(H?```?K0<&`!M8A(5P<6X^\"PL7'!T>&AT<\nM'!<A(R8F)28I)24K)RD@$R`>%R(:%!L=%QPB(B$>'A¥B(B0E)\"$E)2$G+\"4F\nM*2PD(R8G)RLJ*2,J+2<E)B8?(B,B*R89(RL?'Q¥?'Q¥?(!¥Q,\"DL(2`G*BPK\nM*\"DH(!XG(1¥@(\"`I)AL7'AP:%18````5%$%D;V)E(%!H;W1O<VAO<*H@,RXP\nM```8]!CT``````!(`'``$0+_#`#__@```$@```!(`````````$@`<```````\nM`0`*``````!(`'\"\"````%JH````!`````````````````````0``````````\nM````````0`````````````````````!```````!(`'````,``````````%9J\nM<&5G`````````````0`!87!P;`````````,``'``2`!(````2``````6#P`!\nM#%!H;W1O(\"T@2E!%1P``````````````````````````&/___]C_X``02D9)\nM1@`!`0$`2`!(``#__@`,07!P;&5-87)K#?_;`(0``P(\"`@(\"`P(\"`@,#`P,$\nM!@0$!`0$!P4&!08)\"`D)\"`@(\"`D*#0L)\"@T*\"`@,$`P-#@X/#P¥)\"Q`1$`X1\nM#0X/#@$#`P,$`P0'!`0'#@H(\"@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.\nM#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X._¥0!H@```04!`0$!`0$`````````\nM``$\"`P0%!@<(\"0H+`0`#`0$!`0$!`0$!`````````0(#!`4&!P@)\"@L0``(!\nM`P,\"!`,%!00$```!?0$\"`P`$$042(3%!!A-180<B<10R@9&A\"\"-\"L<$54M'P\nM)#-B<H()\"A87&!D:)28G*\"DJ-#4V-S@Y.D-$149'2$E*4U155E=865IC9&5F\nM9VAI:G-T=79W>'EZ@X2%AH>(B8J2DY25EI>8F9JBHZ2EIJ>HJ:JRL[2UMK>X\nMN;K\"P¥3%QL?(R<K2T]35UM?8V=KAXN/DY>;GZ.GJ¥?+S]/7V]_CY^A$``@$\"\nM!`0#!`<%!`0``0)W``$\"`Q$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!\"2,S4O`5\nM8G+1\"A8D-.$E¥1<8&1HF)R@I*C4V-S@Y.D-$149'2$E*4U155E=865IC9&5F\nM9VAI:G-T=79W>'EZ@H.$A8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:W\nMN+FZPL/$Q<;'R,G*TM/4U=;7V-G:XN/DY>;GZ.GJ¥O/T]?;W^/GZ_¥``$0@`\nM2`!P`P$A``(1`0,1`?_:``P#`0`\"$0,1`#¥`¥)L=4MQ&$:?9N7:`V3G//)[]\nMAV[Y[US?C'5/'UUIUQ>:/IZ6.E6T4U[+]FOH'U&:PCE¥EKUH5?[1':;@1YFP\nM`#YBQ3YJ¥JCS5Y-'7B)*,=$K]SS33]-U/6M0L]&TVPDN[R¥F6&T@MXQ(¥K'D\nM*@'!]2>BA220`2/2[;X$ZO;?#*[^+=_KWA7[!%J::196,6K0W5QJ4^5,JP?9\nM_,'[E'21P2F8V!5SG!TQ&(IX6*E--INWFO4PHP52+N]OZ_K4YK5O[2CTG3=*\nMT¥ZEY$L$EO+,9!Y+Y9I)4BB0X\")O;+#<QWL`Q&<[WPQT[Q59^*$L?!T-[#J-\nMTDL=¥9;U=.\"6D4,DT[7TF]4MH5BBD?#EMRAN'RBOTI62O'¥'_EN<_-K>6WJ=\nMWXNT+5K'5%7Q!^]O]D+W-Q+JD&KM=%XTECG>:-C$ZRQ.DBJAV^48#@!@6V?\"\nMOA;Q/XE?2=6MI[*RB9EL]*M;O4;.VNKF9KD16UG;13E(HFGE-R5A3#RM;RO¥\nMXCW\"ZJ2A%+?M;]/^\";VY5_E?¥CG/$^A2N_V?3(;:WDO+F.¥TXW,=N$MR)/WB\nM,[D.FW?+O(94(F97!Q@1Z#KKWFGQ6D8:`I&719%\"-;D<21ON.X.'WC:1SY4S\nM=,$¥6*Y_9.5[?G^I>&:]JE)70QGBN'>X$PD8,02,G=C:>N>>HYS61X@UO3_#\nMMFUQ>RARV1!`A^>>3'\"@¥X`.,MT4`GT!¥VG5KRFD[_.^E_*VGH>E5=.,6^56\nM]/¥`@'F%UXLOK^YE:¥OBR3[8)HPFV/8&!554DX\"D9!Z¥MR=QS<L=/U#4=.NM\nM7BCC^R6D<DDDK+A9_+7<R1+CYF]Q¥JG@D'BO52?PIZ^O_#_B>/=M-R6OH=MH\nM5K<^(-6B¥/Z,5N-1N())E@$BHWEQ(7D<LQ\"JH52<L5!Q@<UL6_A+P]J/B'PO\nM>7OC?4_\".O0PCP].^F!3</?17/D,89S+'&G^@WEJK*TBB8GRMRG=NSPZJ0FV\nMUO¥`(Z¥7)5(JVQ#=Z3KME>)!I'A33-2¥2:_8-:VFL^'TD2WU>&<S>?=6%JF(\nM+:=XH;JWF/[HQHMT)+>V=96'/>.KS3?#6AGP;87L6L:GJ-Q%>ZMJ]G(S6[;$\nM>*\"QL1A=T*^;)OFP#-)N*!8PAD[G2YX7MHMO7[MSC2LFH2//+5;>ZOVN9KJ0\nMO;>5;M'<L@\"S,Q4[M^%¥J-AN*-C.0#T8UV7P[_X1:P¥16=QXMT:SUZRMV9AI\nM=OJ=GFZD,1:&1Y;@_9Y(4E6-V@R#)Y.UR$!W+WE*UT2E*.[N?0B>.M/MKA-9\nMUVP34IIM1?4+>+4#X>O=5:1HF62406T/V9D6*\"&)$E/DIM5HHD*@5M_\"/XF:\nM?X&>.XTG2O$5Y=V5M8/<)H9L;)7AB%S<WUO<75ZLF+2ZOKZ97>)$D$-LC!RS\nM/E¥M2G\"SM;Y?/^DRY04UY+R.$U*\"#5K);.-C/)9HLUN([JUO_+0!4FMX09\"S\nM0CY@/,*L8U`SD,U>=SVD>DZG;I'>3H-01[O:4`¥B0.Q;RV5RCI(#$V[I^[E4\nM)C&>=*+T2W>GE^K')-/1V+NA7]M;VMW8A74V=UE%242@1R+EE¥SG/S¥X.3AA\nMZ#/F_CC4[_4M;GM[I8HTTUGMXHXRS%>58NV>2Y&W)&%^7&..>6G#FQ#<M$=F\nM(F_JT8K9Z7.7E4G<SR;1@JISG+=!M..#_A[FO?¥`X8Z6_C32=(O?LSV^@6$,\nM4#.X*_;90BB6*%1]V/?N,CX.2S*N&8D=&+QD<%2=1K7I??[[AE>`>8XJ%!+1\nM[^AYS¥-+4VVKVUQ!!<W$C03>;&/,E,Z>2Y=6\"$,[,%Y4$DJ2>0K9]!¥*1FQT\nMVQM]'T.:XUC3-&@O8]3N+&.ZCM;J;4Y)9LO+NCMKF2*:PCCNMLCJ85CVQF1I\nM8M>7EU3V[G*HRDKK5'/66M:S8Z/J6FV/B'4!IER2EW!;*QC*NZ>;&¥@PL2R>\nM5#NBC#\"0Q1%V.P\"N)U[4C<7=E>P74L4¥`64R`E2K_*X\"XY#*Q8AASD¥>VT)-\nMQ[_D9SW,&VBDCF^T1EU2-=S&/#%4+;-W)ZY('U(Z=NFT6'SYU;4M2MHKZZ=9\nMS-<+(D9FD)8M/+MRH3`90BLK_*#A2<YR]S1?¥'^OF9WC>W4]I¥/1ZC>Z8-'L\nMQ!=WE_%]IN/[*TZ-WO?E#K)=W9R#$NT!4C$0(BCWD/N\"/TJ^T>TGCU.]M;>¥\nMLU<SM#=P22P.F,AG@0@2GL$?*9.6`&:IRDX)/7YG;&UK7?¥`7D:J^(([X6YD\nMT](T61HK>XNM/'GW2L2?+MHH`?(0\"25¥(#&#@,7`\"OS'BK2[8/=VEIIUD)YX\nMXY].¥^/R3'()5EW\",!2\",MN+[R4E8$?-D<<6U/:_Y_U¥R9ZW7YV.>@E=[F&Y\nMM-)U*ZEE`L7M8K5YIO,!&]5AWKM9)&VE0`070OP&-<EX]¥*ZGX2E>;Q-/%!K\nM6I3O>1:4CFX>&U>23$UQ(#L3[@5$4LQ.2VQ5`.3J4H8A1O[TMEO?STO^(2A.\nM>'Y[>[#?_+S.:¥(:3X2UK6P/&GBR'1M'B(>YE<R>=<¥@^3;[$;82,9<C\"KG!\nM+$\"OJC0_'WPFCL[2#1O%V@VUE9+';16]O(¥:6Z9^5`&&5``)))Y.XDY)-?+¥\nM3+,,57I4J$)<B=VTNM_T]#Z_A%X#!T9UZ]>,:DM+.R:7S1¥[^%)$FU\"VWB*?\nMYU$8N9,Q8(X,C,V[!^7A<DG).T*<5I[B-)FWSL@CG9L%GV(Q8EL8.5SGC`!&\nM3T.*^VC;FN[-^?¥`P?¥`(^5;NDOZ_P`C9^V-<1M+(DTVQ24EG=SM;@%8QE4C\nM!Y&Q0¥A'!/#8[3P!¥);/6_`/CWXIZA83S:=X4&F:9:10Q-<37&I7UY#'^ZB=\nME27R;47+[6)`=XBR,JLITC)N+>G]>IG5LI:(PK[PO%IUTFJZWHL4=Q$G[JVU\nM+5Q+)DAW4R1`;BZAT)CVQPJN%<9=A6+`U@MP+F?:QN@9I$$.4#%¥X;:V60X?\nMY4P2`J_*#E<743V:;ZW_`$7_``\"5'JTOT_#0[72-0LI(VLI[L:PC%+P6:7MS\nM'`AW,&:6%(S-<2<$_NR-D0^9^<\"QJ%[=Z;=/;WR3P7\"A'V,CQ,NY0ZMM8DID\nM%2H))`VYYS5*;E%+3;^M-$:QGRZ.W]?UW)M/N(]6:4VT<U[<R+YMT[32WURV\nMW[YE6,JD,;;6P;F3:%);(^9AB:MXUN-=D71-*TW2Y=0,X:VATV2,PLN>=F6*\nM@;AN,A887#=.3S59QBFY26F]^WIH.*E4:C&'Q:(]=^'WAL>&;.^DCU*WU;6=\nM5NFN=6OK2?SH][$D0Q,#N¥O(9B6(:5V9C_\"%¥*^)O@FTM=1OM>UGXU:'?7EU\nM,9)5-G(;EFQC&RW:1455\"JNX@8XXQS¥9E694JV:59RC*4GHN5/1>=[+[C[?.\nMLFE3RJE\"-6$(PU=_M/RM>[/(YC#\"^9;]#)_<!/R]@\"?7GWZ5+9W-M%,)8IVD\nM\"7$<TGS9#8;/(QCID>GYU^AQNDM_Z]+?F?G%G;_@?TSH?#;+#=0JXBVF2/YU\nM9D¥M`>2IC&%Z]<<8&T9J;42B7US##\"_E+*V%>4E]A`P<E5SP?[HSD¥=SR3?+\nM[VQU+WMU9&I:V$^I7ZQ64;W=Z[\")&1'9`^!N'F28*XR<(`6^7[V3S].?$35X\nMOA3^SOX7^$ND,Q:XU<ZO?R(KL]S<LA7<0CJ2<[@!N\"C)W*X!#71;G%_IT%/W\nM9JVY¥]Z7XZDM/%-K)J%VT$UJ4A6/[!;WP9G8`1-$^R&&,ALN!¥S]&/S;AGN7\nMN7,]Z;R5IGW2OF)-XPHW<!2#G:`I7YE'!&*Y6Y4]]%_7];EW<G?<Z7P];W6H\nMQ:C)IOB#^S--TFWDBU+41+]D2W38#Y7E$G+384G8Y:,9&UM_S8VC:GX-U+Q%\nM;V^I^*)M.¥/)OFEN97>>ZO¥`GY%Q$CBV9¥KNY8J-Q#%L\"L:V*JJA-4(N4TOQ\nMZ;[G;1HI2INNU&$GN^W5Z'H/C;QE¥--4¥+IH6E?$\"[LM'MI56XL_#ND+=I*W\nM'EB5I54!5P.&;+MUR17AVK7UI)<L-'O]0N[)XS*!>1Q[Y,LP/FHG'!4<9..Q\nM]/-X<I8^5&4¥=2Y9-MMO5O7MT.S/JF$JUTL)54TK)**:BEZ]7WT.<D58\"P@S\nM\"Q9L\"#Y`1DYY7`;MU]*SYHO,,CRIR7)957&6)W$^V3[=Z]]RCS6I+??I_P`.\nM<%'#*$;UM?)]\"]HSZ7%=A;F-I(G;:1C!)Z]¥X.!6U¥0+GP(]U90>$-(NK*YL\nMP%U\"223Y+J0G((09`*C`+#KG&.,UO%27Q._WDUI1<>6R^1L:;:75JZW*NL$M\nMNXF2;S)=Z.I[*/XAP=S<Y0C^(YEO89UN_-DV1AY,1EY`%+$9&\"2=O*¥`^H[X\nMQ$J,U:<MCDYFWRK_`(<[#X6WOAG3O$-MJ'B76[&PG@?R;;[7<JGEL1GY5<B-\nM!C/S<X)SU-=+¥<?'5EXFFL[+0[2YO+>`-&EQ%#(L);RSPC$;FQN4Y`VGD`D]\nM%%IQY9O1=Q34^;6+^X¥(E@O[.XCO)=/E$D9651(N,$'(('?GG'(]01UL3?$#\nMQ9<R7-^+R<->(899?L¥>%C?&5!9\"(P0-HV;<*=HP\"!2<%M?3R9FI3I^1-H7Q\nM:^(7AJTAT[0O$UU;V<18I:\"\"\"2(;^'RC1D-G'(;.<#TK-N-=UO7M2+7<IN;Z\nM]E`8^7'&7;&\"<*H`4*I^Z!TP*,-EU*A/GI)¥TM[R;7W:J_GN;XC'8C%4HTJL\nMKQCMMI_F:L!UWPYI8N-.U2WBM_,¥^6-8OE(0`-(5ZL1N4>IR`/NTS6=6FO+M\nMW%QO#[<,K+¥VT`+R,`C&!CW.?2HQ5&=*?Q/7S?X)EX6;DM;:&\"¥1R68YW=23\nMG/3&0!P<<<>M59%$85U+`#.#G)P<'^M).UNYU3D[78RW8HZ^7O*H<8!()STZ\nM>^/¥YJW9Z%-=W,0NKN&`3W0C=RY<)N8#>5'89R<'FM;N^QQN2E*,>YJV?B>=\nM`JB3R`H)Y^^1Z'/KUY]:DO;^#5D%KYTLA9P3#&\"Y<@8P%`)[U.)KSDE\"*_$Z\nML+&BH/VGR/2_`7A7X@:;9>9I^CV.BQS@,=4UFVB^TE.NU&DW.JCY3¥J]<$GF\nMM:¥MO\".E*¥WB3Q[=ZO=%@62Q;R4STP68<XX.>/UKSWA'6M*HDH_U¥RZF(;TC\nM>QQ6M>--&M5,'A[0;>U49_?R#SI,_P\"RS?3MZ_A7GNL:OJVJ.1/>SNS`,0S?\nM*HQT/'/'L/3WKU*481CRP/)G=ZL9(]DJ1FU@18ER&:9L@¥YSMZ$^Q..@P:J7\nME_/<20S?VB[R0H%BV``1J#D!```H&2>!SDYY)KIG9)-;^IEK+0KRW>H7SJK7\nM4LQ+$H@'&>@PJC&?¥:V-'MF73$¥Q\"-LL@&<9&=I)]QG-85.>IJ[O[CHPSM.P\nMZY:.(-+*X4(/FR<#H!D^_;¥142:1J5W>0:?%:7,4US.D!¥R&1`C-@#?E>!C)\nM/'`!/2LY)Q6L?Q_X)VMN2:2=O+4HVJ-),+AB651NPQQG`_Q(./2M.+\"[4\"GT\nMR6QT]1]\":N%TH[G!4:OH9T4OF0@.58L%.3R=R=\"1[C.\".WUK;T'Q?KG@V_GN\nM-#N([9[M%_>+$K218X^1R,C)SQWJK¥MK;CCH:UWX[¥3:W,9+_6KF7)');<3G\nMKD'D9&>1Z?2K=K!<W$1,D;LW##*ECCCD?G^E<E=SF_¥`AS:*4MU>Q;3PM<3+\nMYC`[!C+;.@7UR><5D:[I$&EV,NS`ED`BC!&-S'`Z=01D?E6U&RIF%1<KT.4_\nMLR/_`):2/(5&.1C'^<]_>E,%K')Y#)'&S',:XZ^O!.3_`/J]JZ+<T$I+3^OO\nM,8Z7O(GQ(`%4C:.-@7IR\">![G.*M03+':E6WAY'!^[G:OJ3T(X)]3BLIQ37+\nMOZ&M\"2BVSUKP=8>&?AEX&T[XI>)_#UOK'B+Q'(Y¥-:5?AD@AMHR1]N=<?.KM\nM&RD@,&5F0&&0AZYZX¥?^*_$^O^(_'NN:FDVI6^FR7#3\"V6-9;N14L[=2!P6.\nM_(.2S%&)_B:O&6`6(JSKUI>[M%+IY^KW_(]A9O7RI*GATDW¥6EV[]#BKVZ-U\nM=R7#QI$)=@&P':<#JV>2V>23UXS54#+`!0%0@^A'?¥.,_P\"37M0C&\"26W];G\nME8FK]:K2K)**>MEL5H;&-D59G$2@$!0I!/!!P>V,¥D^M/N[*UV1/\"^=K>626\nMX\"D'IGK¥V:56>M]?30:4=V=AX8¥-M<P$1%E$NTD*O^SQD_ACW_\"O1],¥(Q(J\nM-+<,_<_*<9'8>X/?¥0*QE:47S?G_`,`VC)1CO^!%KEUI]G.¥;&..-5$DC=.0\nM,(!SUSW[8KS37;]-8G69H\"L5J6,*$GYF('S8^G3Z]¥5:K25K/;YG-4G=O8RW\nMLU5BJYQCGK@'^O/?IS5V#4=;L=%O?#]E?R0:?J,D<][;1I&GVHQMF+S&\"[W5\nM3¥RH6V!CNQGFNF<G[)7>GS9E&I&*=NI2:+[25D;E_4?+GOP1_3CCUJ&2Q`@E\nM¥M%+M\"^U<')(&1C)X!R!_GC&<O=;L]M_¥K?Y#IS3:5_R/8_COI5NEQ¥/[C3F\nM=[%_`^G?9)9`J>:S!6GVKY:$+NDB`+`[ASN<Y-<;'HSP:%>:5+<6,4VHZS9+\nM*[RNH¥J)7\"L<1D\"-9+H.Q)#8CP%(#5PX1.5!/S];ZZEXV3JXB3B]-/R[:&'J\nMOAT6-]/9&:*80.0)(¥['7:&#<@$?*>A&0<@C@U26TQ()&C!5CN4CG)Z8/X_R\nMKT(PM;K^/Y;$I]S_V0``F``*```````L`$4``````\"P`10``````2`!P```(\nM_?¥\"``#^_@`+!X!___¥`!__`_P`+!X!___¥`'__P_P`+!X!___¥`?__¥_P`+\nM!X!___¥`___^_P`*!(!_P/¥!_O__``L)B'¥`/P/_`?^```L)B'X`'P/¥`'^`\nM``L)B'P`#P?X`#_```L)@'@<!P?P`!_```L)@'@<!P_@``_@``L)@'`<`P_`\nM``?@``L)@'`<`Q_```?P``L)@'`<`Q^```/P``L)@'`<`Q^```/P``L)@'`<\nM`Q^`/_SP``L)@'`<`Q^`)_SP``L)@'`(`Q^`/_SP``L)@'```Q^```/P``L)\nM@'```Q^```/P``L)A_`<`Q_```?P``L)@?`<`P_```?@``L)@?`<!P_@``_@\nM``L)@?``!P?P`!_```L)@?``#P?X`#_```L)@>``'P/¥`'^```L)CX``?P/_\nM`?_```L`@?[_``'^_P'@``L`@?[_``#^_P'P``L`@?[_!0!____P``L`@?[_\nM!0`?___P``G]_P4`!__/¥``(_``$`?¥#¥``\"]P`+\"3@`#'P``#W/^``+\"40\"\nM!%2``!*1J``+\"8(`!!```!*@(``+\"8.V=9&WV!R@(``+\"8*2E1\":9!\"@(``+\nM\"8*2AQ\"2?!\"@(``+\"422A1\"28!\"1(``+\"3C_?[G[?#G/<``$`!CX``0`#O@`\nM`/¥````.J¥[UH@``4$E#5\"-Q``````0`````````````````````````````\nM````````````````````````````````````````````````````````````\nM````````````````````````````````````````````````````````````\nM````````````````````````````````````````````````````````````\nM`````/____________________________________________O[@8*L_?W_\nM_?NL_OJ!K('¥@:S¥^H+¥^XC[^ZS]K/__B(+¥K/[JK#.\"K/VLK/K¥_/KZ@JR\"\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.24.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!gatech!howland.reston.ans.net!news.sprintlink.net!gryphon.phoenix.net!news\nFrom: skyojedi@phoenix.net (Skywalker of the Jedi)\nNewsgroups: rec.games.video.3do\nSubject: M2 Screenshots from GO! - 3dom21.jpg [1/2]\nDate: 5 May 1995 03:57:42 GMT\nOrganization: Your Organization\nLines: 960\nMessage-ID: <3oc7nm$edc@gryphon.phoenix.net>\nNNTP-Posting-Host: dial47.phoenix.net\nMime-Version: 1.0\nContent-Type: message/partial;\n     id=\"799652823@Skywalker of the Jedi\";\n     number=1; total=2\nX-Newsreader: WinVN 0.93.10\n\nContent-Type: multipart/mixed;\n     Boundary=\"*-*-*- Next Section -*-*-*\"\n\n--*-*-*- Next Section -*-*-*\n\nHey:\n\n\tFor those who wanted the M2 screenshots from the GURU Online, here \nthey are.\n\nSkywalker of the Jedi\nhttp://www.phoenix.net/‾skyojedi/guru.html\n--*-*-*- Next Section -*-*-*\nContent-Type: Image/JPEG\nContent-Transfer-Encoding: x-uue\n\nbegin 755 3dom21.jpg\nM``HS1$]M,C$N:G!G````````````````````````````````````````````\nM``````````````````````````!*4$5'.$))304``'`!R````````)1@```A\nM2ZO.]8>KSO6,``````````````````````````````\"!@::M``#_V/_@`!!*\nM1DE&``$\"`0!(`$@``/_M`;A0:&]T;W-H;W`@,RXP`#A\"24T#Z0``````>``#\nM````2`!(``````+:`BC_X?_A`OD\"10-'!2@#_``\"````2`!(``````+8`B@`\nM`0```&0````!``,#`P````$G#P`!``$```````````````!@\"``9`9``````\nM`````````````````````````````````````#A\"24T#[0``````$`!(````\nM`0`!`$@````!``$X0DE-`_,```````@``````````#A\"24TG$```````\"@`!\nM``````````(X0DE-`_4``````$@`+V9F``$`;&9F``8```````$`+V9F``$`\nMH9F:``8```````$`,@````$`6@````8```````$`-0````$`+0````8`````\nM``$X0DE-`_@``````'```/____________________________¥#Z`````#_\nM____________________________`^@`````________________________\nM_____P/H`````/____________________________¥#Z```.$))300&````\nM```\"``;_[@`.061O8F4`9``````!_]L`A``\"`@(\"`@(\"`@(\"`P(\"`@,$`P(\"\nM`P0%!`0$!`0%!@4%!04%!08&!P<(!P<&\"0D*\"@D)#`P,#`P,#`P,#`P,#`P,\nM`0,#`P4$!0D&!@D-\"@D*#0¥.#@X.#P¥,#`P,#`¥/#`P,#`P,#PP,#`P,#`P,\nM#`P,#`P,#`P,#`P,#`P,#`P,#`S_P``1\"`#)`3H#`1$``A$!`Q$!_¥0!H@``\nM``<!`0$!`0``````````!`4#`@8!``<(\"0H+`0`\"`@,!`0$!`0`````````!\nM``(#!`4&!P@)\"@L0``(!`P,\"!`(&!P,$`@8\"<P$\"`Q$$``4A$C%!408382)Q\nM@10RD:$'%;%\"(¥%2T>$S%F+P)'*\"¥25#-%.2HK)C<¥(U1\">3H[,V%U1D=,/2\nMX@@F@PD*&!F$E$5&I+16TU4H&O+C¥¥34Y/1E=865I;7%U>7U9G:&EJ:VQM;F\nM]C='5V=WAY>GM¥?7Y_<X2%AH>(B8J+C(V.CX*3E)66EYB9FIN<G9Z?DJ.DI:\nM:GJ*FJJZRMKJ^A$``@(!`@,%!00%!@0(`P-M`0`\"$0,$(1(Q0051$V$B!G&!\nMD3*AL?`4P='A(T(54F)R¥3,D-$.\"%I)3):)CLL('<](UXD2#%U23\"`D*&!DF\nM-D4:)V1T53?RH[/#*\"G3X_.$E*2TQ-3D]&5UA96EM<75Y?5&5F9VAI:FML;6\nMYO9'5V=WAY>GM¥?7Y_<X2%AH>(B8J+C(V.CX.4E9:7F)F:FYR=GI^2HZ2EIJ\nM>HJ:JKK*VNKZ_]T`!``H_]H`#`,!``(1`Q$`/P#Y\"KJ8O8([R41O(&JJ%0/C\nM4`>I3^;;8]LPY8_>P/$M$@NIY^`]269`Z%@*B0=>1/6ORR`$0QE(CH45#.8&\nME3@AC<CE&Z_:E`H\"=MR.VV6C@/0(XCW*JO%)QE>)&2-PC(R\"BU[TZ_CD)1'2\nMD>H]&4^6O-^M>5TO+;RWK5]HHU&[B>[?39Y;-IDC/Q1.L+*)%<;$-7PRKPC^\nM`HXPG9¥¥>:]4¥YVE_H=O;:7KUG+Z?EPZ'IMKIU¥7D4+)3ZA#\"¥T[$DF1N4A_\nMFRP0CU#;XL@F2_XB¥Q^:;7RWKHT_RSY@@:9YM4URQ@L)%N2*_P\"Y.Y:#U[AG\nM[+<%R>@RV,<9ZU¥$'4R/0(FY¥K1QQ:W=7NL^7-9L-'DCCN-0TZ>.TE$¥RD'T\nM=*U**SO)PNX(B@5/\"2F^$0Q_S[:ZE)`ZFGF`^7-,N)]=M]2LO+-J¥=CI4ET?\nM6TZWG8@+;VLY5J'JRVOJ!?VCDQIH2ZI)GUI?')`UGY7@;5[N2ZL?5@TS2(HX\nMI+2WMIQR=H9UG7BS[U3T:>+'!+38QYKQ'R2N9%%^ME`P-J4EEMP56L;(WQ!B\nM#0%CX=¥Q^\"\"^+2Z2YMM,YW-U*8Q<[+#'N92XHP``8M4=:;Y9&,?P&'YCR9?%\nM9W9T6WUF¥^I1FTMQ'Y8¥OSN7O)(R:^HJP!TBB3OR=2<A*<&Z.H!')Z=^4'Y2\nM3?F3=:]J/E-M(M;GR?:G6/-7FC4V$-O!!4!A91U*>JHK0LZ#_BWME8X?/[&F\nM<@3S`33¥YORZ¥O*VH/Y%¥RZCYV_*'0H;6]UCS&UDXAM=9F3]['=N(4C`8_89\nM2X_RSF3Z)=?N:ADKJ¥)MYKF[ADT_0--CTG3;V!8'U`)'ZC¥?]V^H=B#V9@QI\nMT&2AIHGJLLTNC6H:79^3]9@DURVFN]<O[-95TV^A(,L8%(YF6<4D3P+#?LN9\nM7Y:-;D%GC,B=Z93I4&M><]+O/+]YY=:.¥UMXAI>HV¥3BYA2V-9+-;,'E*)%[\nM.O$=AF/+#&^1<TB`'[%6'5))=-N)6B^KZ9H=X=(EJ.,H5/A$7&@$00[%:\"GA\nMF1##C/4M7&3_`&(,6,EA=S)':I`B5)*45`I&[,\".I']F&6.`ZELB`>=L=N_,\nMUIIS3+:JMX¥+\"0W&Z0Q.#507H*M7J!M[Y1?N^*RQQ[F/Z_YGU?S9>(NIW$C6\nMTRK'<V:A?0D'53*O[1!W![>.1,(]?L:#$#DF^CRV<>H:19:_.]YY;\"2+<((J\nMP!U`XQRD5`C(V.U/8C*K`Y`E(G[F?2ZS#=SZK);2NEMIUC]3¥N0HX6*TCFW8\nM0N!Q`0=`HPB7>\"P)_%(JU¥S?F!YXAT;3M&FEL-'TJ%+07D!DMHY5A/%S<W-:\nMR,14¥$I7KZ>7#'`]3¥PVP%¥T6OD'RYI!OM1¥TZN([03>H$M(W`EGV+O)^Z:5\nMHST9@J'_`\"LJR0B.4OM;3&+()/S*M--MHM/¥F:;!H^ER6[¥B`P,A`^VD:L3O\nMU#.9&/>F1C+^D\"D8HGR9)Y5¥D>;?,T=AYN¥Z\"6/1]/9YM\"N=3\".3<L/A>->1\nM8+]`'N,L%'F0P-#J'N?Y?^0M/U3S#,OE/RO<?F9Y¥UL1KYHU-8X;I+$'X8G-\nMRX2VM8@=B&;G[G+:B.4@4@8SSIZOJVOZ7HVB^=?RA¥Y6:Z=^9<-W;_5M6+^M\nM8&U!!:WCN&I(`5V*JG`^/;+8BTRCB'>P_P`]QWMW^5.H0^1K#T_)_E^W6+S#\nMJCD0JDSD\"2&TM`L;.K&IY¥>(/<Y=X7O#ASE_-!^3'_*NMZ7I?DKR[?Z+Y;M]\nM8E2%EM;F188[U)4V)EN\"G-^-=UVKV.8>7`!RF0B,B.9+T#¥S/RU_,K2/RY¥K\nMZSK>MV.OZCYYN_JTWE73U,426DP#(WUJX])G*U!(?:O<Y\")D>I+E8S'K)XB_\nMY:V?ES1G¥R^=_,+:=#I9:,Z9:D-,?3_NSZA#*7/<*I`'[62X\".8+9,P'50¥I\nM:_Y9T.XO?-OF2[L_*GEB2.LUA#&9K[4;=M@+¥¥9FF#_R<J#N@&7@`][@SRGO\nM8]^;GY¥:6AL_+WDCR3IWE?R6UG]:T?4&#K-*[J?4=8P(TA4D¥N(7(SP^;$3F\nM>C&/^<9Q?^7OS!TGSKJUC)::'IUE=7NFWUR##;7%TWQ1L[G@[QAMRT;`^!RC\nMCD.9;HQM]$?FC_SE%J>N.UEK.J2:Y!<S`IH>GJ(-,M\"17C04$BEB2KL)7`.[\nMY\"<[;X\"(ZOE[5/S9¥YZ^T&FZ4K6])#!)I-C&)I+CO1>0>2H3H%(^64>+('D\"\nMY0A\"26?H\"_¥`^K3J?V?KG4?W7¥G7^¥_R?M>V9/&?YJ^`.]__T/C+:(?3D60^\nMI!92/&4IP/6H<GP¥:YK..^9#292'4H^*5V6,JJJS/]L\"@*C:A%/QR^.(^21(\nMGJK0WLC+,`:%%+(OCQ.]*],M95:(6>9XZ1E7NF930\"JT&Y''W'7?$RD.0MD!\nM2>6%Y;O.I_0L=_¥`I6YC@3XI?K,$E:!+.**1`68G]I'W[93*4C_:@Y&036¥>\nMG7FK0V46K^6=7TM%^MG4QZMP6EIQ5C'!;M\"\".G(,3[]<C$R¥OFQD;[V=R^</\nMS=U7R]<^29M;N_,&G^<;9;OZC</;ZY):V^GTJZES<RZ>(P-_3])J=LN&'BYU\nM¥W'EB[BP:YM?,,6BPWD]I/-HFJW(DT[4GC9+:_N;?X?5$T@59BGC4T¥,)QR'\nM)B#*'5Z\"/+7E2WA-[>?FCH&HW5LUM>/H;6&NF#48=FFLTNET^%XI/V6+>E&?\nMV9CE)@3UICXL[YJ/F[SGY'U&YN&¥G>0/¥'6<Q46;1ZO<WUS;A5IZ,1F\"IZ+G\nM=D=9'¥)1DHXI1¥VX9),0LY]/NKE2T#JJ0,97B8*%D(ZMS#44G<URSP^+^%'/\nMO9E9?EUJVF>6XO/_`)ATO4X_+$K&/1-=EM':#4YW.R:6'X0SD#9G9RJ]0,@?\nM1T;1B!06J/<S¥I.<GES3YT`&C^J'>9$'Q)=,0OJG_(XA1V7OD.(2[FJ0(Y?>\nMH0:_J!T5_*VA1-#HTTZZK?!WXQM<PCC&9`?M4'V1N1VVR^$1TKY,-V9:=^8E\nM]H'D/SGY\"F:WUJP¥]W5K<ZO9NH$S21[*J2@BB@]`Q.6R%]S.,1WAC¥.EZ]K=\nMO8:-*D]E81J(K70-.C:2[XL>*AW52W'>M\"&'RS&(R#D%E8Y/:+?¥KO.NL>8+\nMV[GF¥IV=_I%M9Z/J/F#5=>TI]/T9`!Z0O%MKFYG@)'[+1\"I[5S(@92[Q¥41,\nMT]¥Y>3/RNT7R[K>CZ)?ZM^;^LV>E7%YKGG>VAN=,MO+]¥C#_`$FVM/3EYVXW\nM'*8#GU61>@M$\".99R$N[[7S9!YITO3-+]\"UTXBTOH4-KZAXQ2W``+SD#[0>E\nM:5)R1RQCSKY)AQ=0&,ZA^E]4O[6XEDGN8[¥*>9V0EJ#X$0#X0/`9491ET;>*\nMN=,R¥M_E_>Z[<:Q9:19&_&@V#ZGY@D+1*D%K%]IH%E*DN#U0%C[8#CA_-+$6\nM>15K&R@M23#92WL:6R7DURD?(K`YH'-1^['8[\"G8Y&4+^D%D`>J\"N9=4M4ND\nM6U@33KF.01/=J)(X*_$C/','$O+P=6!RKBE$;!E&'<Q%;+4H-(M;R5I(M/U4\nMLVG¥T].V+@TD])!0,/!5V'896)&[.[9QF+U>P¥X>9]?T[R]IGE?0$ADM+5HM\nM7ELH8^\"=428[+#\"&[EPN_P\"T#F14#R:N*^J9Z=Y%U*:&XU3SGYD33VA>MS$*\nMW-R]NIY-%ZSD(&INBH)E_5D#C(Z()`YA]!?EYY5¥F7T^D:'Y0ELKKS1YO])O\nM*T.H<IKB6,,%]2[N%B_T7C6I0!6/:+OE($1T:N,/L'¥P?R=TGRS+^7UAJ7G>\nM#S7K&EZQ:_XRT:(1_HZSLG`:02Z?^]+<@?A:8GD/V5RW'\"1Z%D8@;OHZS¥¥Z\nMQ>Z?JNC_`)6^5]-¥H^3]`:2-+RS2\"UABC!J9B66&W@#*:E%!;N&!PG31MQC\"\nM7¥)?%_Y_Z'?WNB'STNJ6>O:397JPIYXMKP7@U2]``-I&U%FX1`@<GV[*6S9Z\nM?'&`W;AQ5N+>4W7YE>9+?¥M(?(]¥+8:!K$Z7$]G¥'KB38J$CJ)`H[LR!6_F.\nM9$I8FN<*Z_:¥FAUO5-/35;2SGELX[V9'(@<QA&3<$1QT7B.RL\"!U%,Q9¥/2O\nMDL91'1D>L_FE^8FN#RUI^GWMY>:W:I]6FE/^E7NIE2/21F:LE$[`'IV.5@1)\nM_8S!'1@GGF/SMIFJ?4?.1G_2%RS7/JW8=`I(#>D5G5&3V5E'MXY9*4(<[9$]\nM[$+'R/YY¥[J)M,T#4I[F_9#8&5)0@AY`>K;PJCRS(.[11O3QS$.8=Q8&(/)]\nM`^9_^<<_-_D/¥I!^:OFGRVFN:SY?EAL+#3=:2:VMG@NV6DD-G'REG;?9YS\"H\nM&YC.)G$]_P`;;(XZYC[4D_,O¥M;J]¥VZ.WEC4;KS7I(T&WN+J¥=6@M+2_E11\nM-9::Y\"K-''7XS\"\"!WS&F>Z5?!OA7<QH?EWIVA164_F/7HY620M;K:,T<3,F[\nM(K2*)9?`¥%1A^.&,P.9OX.5\"O)`7OGC1/+L4]KY6T&)82SO?7$5('*]>/K,L\nMLMS4[`2D$>.1EPWL&1-¥F._¥KBUC_JVVW^¥_J]&_N?¥`?7^M[Y=?D6OAGW/_\nMT?CAJ]LEK/;-8AXXM0A:2:,L>/J@_$U/X9AC&&F4`@DN9@S%B72,GC*!3B=L\nMRH2(ZICC1R_5S%'.)'?U5<ST&X(.Q!¥/'*LV(2¥V-D=7T9^5U]9?EMY0U7¥V\nM%TC2O,_G.¥N!I7D*XOX(KZWT.6,AGO¥`ZE<1O#-/V19!0==^F41A*/TQ^U'C\nMCJ+>@1?GC=?G[YAFT/¥`/R¥T/4[K6-,>W¥M?FGJ.FVNC7FCZA&H6*2ZN]'M8\nM7DMC^TDR2JO7X>N6<$S_``@>](J7*!^;S/SAY\"¥^?E+<6:7:RMI&O1R1V_GG\nM3'^L:'KEL*-'^C[R,+'*M-RC&H/5%Q&/AY¥/VLS7¥TH_R]^3_GCSG8:+K'EZ\nM[T37+_S,Y]/RU^EK.RUFV(/IQRW%C=R02^F>SQ!X_P\"9AEE`]S0:']B:6'Y4\nM^<6_,'RG^3^FZ9KGEC¥V;FZGM_.`U`\"TBL;102]U:$*KA!'7]YS*M^S7)1@\"\nMDQOK]CV?SQ^<B^1=)TGR+^0^NZGY3T_RE>&W¥^7VB6-KHFI:_)\"0)+J77K\"<\nMW4Y<]C#\"`/M>IDXX(GI]K`PX4U¥OZWY]_P\"<@]&URS_,O0M<¥Y:7I,#W_P\"4\nM?YF2:>)9+>XM06_1M[J¥5LD=^#W6XYL37CQR=RAT#=&I<P^:/,¥.L274-[K6\nMGQZ&UPD¥`2WT]-.C869]*2EO%'&O(TJ67D2?#*N*1Z!IECIZ1Y)_,2;S!'Y\"\nM_+CSEK^H-^3WER29CI*(?J¥;R_$ID6$+(Q+?ML68=J\"N#AOF`PXD]_/O¥W_)\nM'YDR>1+72?+!T4^2D?2X;6!HS]>]*JK,¥$,2)\"W$`¥N18]6IB<9'(!00D%OY\nMC¥GZ/Y'ET\"^¥GP7?F'5HIXO,/F2^N56.UMY36W>R2(,.<?¥`.DB5[@Y3Q9`V\nMG(\".3?E[¥G_,LOE[6/-L>A-Y<T?RMHPOH?-/FKU-,BU5J¥8H]-66$BZF;J.(\nM`]¥O$2>;$2[@$@E¥[>9=/¥JZ7Y9O=2CT#1]>26XO+7385%]>,S?$NI7907#`\nM#[$0D,-#]G!X0'=¥VV))Z,-M-=OYX+G1?*6GQZ1IK`))J,RF18@AJOJ1L1RY\nM-L*$¥>PP5Y!'AR[GVA^55Q^1=O¥`EO¥`G78>6W¥SZM^9Z^3S+YNEUU[62R>)\nM_P\"]&FQ6@]0QH1_NY>8^62$I=`VC\"9='QW<Z?>Q6_P\"75UJ<-O¥`X:GCCN-/\nMU:W:)SS7X0CT=N#`=R%¥.N7<,QS('P0,=?PLIO=,N=+59+K2KJS2^M[BYL1P\nM9#=VRFOJ12,H#*O?CMD!*7¥X-T>`O0/(¥>I^4_RA_,?¥T[66SGCU*R'E^PM8\nM3Z@MFNI.,DMV0`ZN%^S2J^)QE'O^]1C/,%]:OK/YY?EG^6WY1^1_^<1M$U&7\nM1;G21K?FOS9I^CQZV]SJ$U&DMM0F:TNXXJGI0(].C#)QQQZ_>B9)V(>>_P#.\nM68¥N:)^87E&Y¥QZ#8?XN¥T>4([S¥P].L(Y/037)%4¥O0F%$:G4*:@]<$Q7(!\nM8P/¥U¥U:I:2R7NDZKJ42P:AK,\"PZ7H,@9EM;045)7)I68]>-!0=\"<Q)9)^09\nMF!_FI/-YQET8ZEY3¥O:-'+>V>H\"&SN>#'U(G6KK'\"HJ6!WW)`_EQ$LAZA%¥/\nM1-+/RAYM¥R0KJ6MZI#;I%*(DBN21-$&%>21(@B0#INRM_DY(POF42S6]G_*[\nM_!/E/S+))<ZG(!Y:B6_E¥R!9)6L5'VW,<`)D_P!@CMVJ.N68]!&_VN,81[WJ\nMFH_F%Y+U&PO-$_+ZQU?S+KFMW#WMUKU¥J6(D//F;BVLX_481N.OK3*_^2.F;\nM&,(0Z_:RCC,F8^8/,7G'SO+I>H^<_-SQ>7[2&.+2-$3@D,,:``JB!8XQ,:;2\nM,KM3N<HR:J'1E+!*'<A?,WF33;WR\"?R_¥J/>OI%YJ/UX0SN662X<A6K&5C$S\nM5&]5`[C&&?BYRIQY&7</FR#¥K/¥`G'$_F1J4*>8)I-.2S@423NP6X55-#Z8$\nM<BL/¥BJT¥<C.(/*3223U\"'_-G_G&/4?RY;U='N6O[&=B4U@1EI2M=A-$:HM3\nM¥(XMOUH,IXZ_B8$%B'D+R[#Y,T@^8Y+$WOFW7&EM[B\"XXQ\"QMD.¥T;&)BK;4\nM/<^.#USY%RL)D]X¥@R^2KOR6OF_S5K.JV]W:WLD5QY+¥OPI)>NH8\"-I;AZ^F\nMC@U+_NO9LQLL,A_B<SA)Z!DUU^8H¥H:=>P^1O+&C?EG:7(H]Q&?K^J3K*:R-\nM/=2(%5@#R%&EH>K91'`1SE]K1X9[@¥&¥X_FQIR>4;^_U/7M1¥XZZFN0?4=1O\nM;B2X:*,#[*BL<(`)^$QQU'CF;\"8B-I.1'#?=¥WS%K/YB:OJL<=YI;'1;1M1E\nMBFM@?6N6)_:Y%01R.]5H<Q¥LCW_8V1A3&H?*>N:U-/=S@P+<,INKF¥+B=V0U\nMJD?$N30]7X@_S90-1P_Q?8W`^Y=?^5_*NC,4UK5GU&69)')`]))$'V2L*%W5\nMAT-7()Q&4$¥RV¥4N¥+_^5B^5_P#JS:C_`,<W]&?[S6G]UX?WW3¥<O¥0=Y8¥4\nMN]__TOC]KD^E/9Z0;*Z66^ANI$G@#5Y(6^%B5)7M3K3,+Q)Q9F7DDBO$9Y1$\nMW-G8JJ&E&/3IW/A3)>)*7¥5-1,^B]1))Q-``#PJ-R/;#9/¥`':>*1ZO>/+5D\nMFJ_¥X^^;&@\"Q:EY-¥QVVI7225JUO,.`$@8T!!WV&5^%+S^;#PB>KSI98/2DE\nMD5Z\"JB,*>2J2&]0$GH?¥QEV.)\"T8¥@][¥C?¥Y$:AY#LY?*[^2?*7F_R)JUO%\nM%YB¥MZA:W)AU\"-MC*PCGB$=W'U65$!KU)RV9(_`0;+([O¥OOR[¥[:3-YV_)+\nMSM;Z#:7$SV5S^7'Y@:G9Z%?07-:M#9:K>RP:=>14->+7\"RCN#F/XYZR^QH(D\nM>@37RW:^6_R=T?7\"OYA>5=<_-[S@RV$.O:+?G4=/¥KZ=(.,WJW]M%+')*]>+\nM?53*!W;#&5]6()'.5//[H6_D2>STV;_#7G\"XBU!=2T;7+>^_25K(C\"K6¥L4,\nMR)Z4A/QK-$LO@RY?#+72VVQ+J]9_*J_O-;¥X7WY@>5+\"#¥H?R^¥M1RO^8,UA\nMKEU9Z/?:@4)AL[<7=S+/,9&Z0JTO'Q7)#)W0:##?F¥?¥RWFC^8+;S%Y@DU>%\nMI)]?NYD¥JSM=/?,7:@F@D](0^DPW^*;U*?LTRV$R?X:3$=X)6:G'H9TCR;:Z\nM3)<V][?6LT?FMWEC:(AC^Y6!E56!¥`:_/*<F:4?+X-G#W!(-$;2=*U&!8]*N\nMM;CMQ)%<0Q2-!*C]\"K3%&,?N2N_CE7YJ_P\"+[$>H)CJOF*>2YTN[NFM/+4GE\nMX_[@QH:-:SP(/BI)<*S74K,-F:65J]%HNV4GU<F/B5S*=>:OS1_,/¥R&M)M:\nMU:ZO4L(N&FG4)'GBLXV`4)9QR$I$&X@N(P.7[1P`USMLB;Y%`^<?,/EK6M4¥\nMM7R:=?ZMY@L-#32-4LS.]U]:ND/[MK4+&5ME4;>DG,M['+HF!YLN$C^)NQTW\nMS)>6]ZMU:26MA]0,BV=L/5:V!V!N'BY<*']AV5E_ERTXA7I9@%[)_P`XMZ7I\nML$WYOVN@M(=6N?R[U!)_,UTZ1VL,@J2)9)BD:I(-@VP_RL,<>0=0/@P¥20>L\nM^4Q^5UY_SCCY;¥AV'EGR5>:^=+NK_P`V^5O,^H/8>;9[OXFCNO*^IE.$L88<\nMC$\"X(V7#DU!&UAM&3O8?^9WYG_XJ¥A?D%;77D/R[:!=+N(;F6TLQ'J3FS;@C\nM+.SN0K¥:2\"E2?#IF%/T[U;*.2'FQ;¥P+^]T7¥E/)WE\"7ZOIES^8^NW.MZ_Y8\nMMZB[>QA(CM2ROR\"*`*AN1KW49&&>,FSQ1T)?7_GKS-^<WY.^7/RVT#¥BM8T[\nM¥N/*=WY0M]9UWS'J5K87EYJ5¥X4!'-W;7$EVPK1$MH]NAS*$<9Y\"35XO])+?\nM^<L_*OE:^¥P_D)K?F#4[?1?S-¥UZ29_,OFZW$.G11RQQ*¥=U=Z=-#\"RL[$J6\nM>1?`+VP`1¥TC(3_$7PL_G)!YB?4=22*?5_*¥¥L=C-;M2QO)R:)<(2OQ!NO$@\nMJ>XRB1`<B!1]AY_DT^TUJU6QM[SS/YMNHGO&C4(BA#54C2,;U/9:;],89!'D\nM5GAM&66E^??,D_I:LSZ3IEI.7%K=J;?F0*A!$J&4T[,XH?YLF=1$¥RXI!AU>\nMCZ5Y=¥O6?E[S;=ZMJ[3:C/9F,\"$¥(T5\"#]7=%#,6:GVBX!_ERZ,¥?2TU?,IE\nM!YT>6TL!HVEV7EGTK:-$*1QJ#*H`!5`G&K@4-%K[X-C_``L!PC^(L¥MM*U</\nMI-UYIL]1L[>¥`XWEW&T9A#[@QHZK1:^VXRT8;Y1I$C?)ZW^4'E&W¥T:A=W>H\nM2.LNC:@(X[\"V9.1B)_=RVPD\"¥7;J2S$>V3&(#FT2Q<3]-/R^¥J:5H6G+=6]G\nM-%?S`I/-=.'F*U!'+B`H-/#[¥HS9#'Z6O¥O71/¥`S+Y;M/,=K'!=()C\"2UO'\nM(S\"-9*BDC*H^(KU`)H<P^,GG3;#9X#KWY9>5+?4[B>_M[C6=7C?G.85D:)(.\nM-?6GMH`Q4*W¥U5(Z#+_$(Y!L$H]2^5?-/F:;3Y+C2/+5W;WVCZ?RY:J(S%#&\nM7J6]\"%T2B#OR05/C@_,$<XMPR8^¥O$M6T7SEK#R/<?76,O\">VDO\"T</I.*\":\nM)6\"GTS_D+3)G-&?0-AE%CWF'R7!IN@:39Z]J,$+7NH&ZG2)RB3QQ\"OVF\"N37\nMLOQ'*#$=WR1XE=`Q%_.GEO3TAC¥HZ=%*$#K</'`;3TP^S>NTD:225]_OQXI%\nML`$GGK>8/,6J7LMEI¥URI`+_`%2S1R¥?$U)5E',1G]KD:>],QY¥0Z!LC$1YA\nM#Q^2[ZX6=Y7CT¥F7U7B4&1F=C¥31(@(*^(J/;#')?0-G'`)E_@G1O^KW']JG\nMVXO[[^7['VO¥CKF14NX(¥2+_`/_3^*::7<26]S,E\"]F:RQ=^!/VAUZ9A3#23\nM75\"FWD1/5J.((HX/6IZ@=<-7T7C\"_C<0`,&8*S<N2'NM3TZ]¥NCIY_PHX^X/\nMH?¥`YQQO=/N_-VN^1]>NR+'¥PM\"O-*B220BW^O,G.V>5*J&8,*+4[5¥,C/!D\nMZEB>.3UK¥@#H>EZ;YKTG3?-_DCR;^>23S:;;Z[^8JQIH¥>F6C<9;.T^M6UQI\nMC33TI_I84$;!L1\"$?J)/P9PC,_Q/:[CR#Y3_`#,U71O+/F?R!Y8_+;¥¥--M9\nMKK1=.CX6?DS¥Q+:,;2VMUHK6T$,K_:0VC¥'.U<LABA/D#¥VSPQUD^:O*WEFT\nML?S9F¥O^<];N?R+ALGGDUG5(;*^N[K1W(XJD=JLJW3H_3GS8E37XLD<$!T+C\nM3`\"#F¥E^4=)7S5J,?GORIYVT]+F01:2;?7;*[GA)^\"^3_0;=8V;_`'W]8K7[\nM2'(^!?)KXH=7J/Y'_EYY?L7M?SH¥[:YY9F_*;2XKG3+^TUFSO+R34;D+3ZC9\nM64L%MZDQ!VFB=A%U.^60Q</,J+'TVG/G;6+W¥S=+TBVT3R%J?Y<_DEY<M;A?\nMRZ¥M^7[.ZU6T^O!R6GN;V0VXF=OM._-BG0*<JRX9=/O;+EWO'+_6%NH]%TS6\nM=?@OHM!MYCH=_8:?ZKPSUH]K=R2K:S!?&OJJ#T'?*1'AYDM4I2EU2_R?YQ/D\nM#7M+¥XVT]HNOZ)*]YIT,]I%=K;7(!\".B7\".A\"UK2@'ME@A\"718XY=[U;0_,'\nMEFXNYOS\"¥^ZA<O?^>4N=2OVL[2VGN)KQ:IZ[PE8;*WC/<,K/X)WQECX>@33R\nM/0])T:¥O3%9RO=2P&XO+W50&DM;6*1JJTI(!4$>-!7I@J9^E&W<WJ%GI[S2<\nM=0EAT-8@;9GBX2RR5^,*@+44C<$Y`8¥QYE?$EW,@¥E6OE32;V*ZUS0O,-[Y3\nMU%)B¥ND<(+C4GB-1##<W4,T`4-]ME1B!T%<L&GR=Z\")R>J:S^>$]AH¥_ECRI\nM8:;^5V@ZU\"?TQHF@M<7.IZC;&A$.IZM>^M<R$<:GZOZ\";D!*9/'$Q-F2:R][\nMM!_YR3¥RZ'IVOZ=Y3T'3IM#¥PZ/^B=2¥OW^FP6?EXF3X3(^E:=Z$,UP!N+F9\nMGD)^TF6RG'G;.!KZBFGEO¥¥O/7E_R78MK7ECR9YPG_*^UF70M?UVTL&¥P:38\nM7%0JZ;;S2122PI6BN+:11W;*>.$NCD\",>EO/+3¥R)KSR#Y0¥I:UI.EG25¥SR\nMZW/YA%FIUVTM+I_5>&UNZ¥D20G=\".!Z5`P#%P[T6Z(AULO0O.WYWZ#YH¥PZ<\nMGE;R38:%;^2=)@T_1?-=W:*=594(+2H/K$¥$;LV_)4'(?:&1G*^467\"!R!^;\nM*M-_YS#_`#CT6¥A,D&A?F+#%<K/8Z3YLL)-3BM)HP!'=Z:!*DMNZ¥15%D6,?\nMLJ,KX<GDT2A/N>8_F5^9GYC?FWYFL?,OGO4[+4=;#>E:Z6!\"AM8*$<3'`HC5\nM:;C<GNQKE1F!_$$P$V\"#]'65C;Q2:?¥`I35M9,K6?EI590ZPMM(77XE4=:@C\nMY93PB75RA$@<UOEGS%_AB'5KNZTMKGS!JHX:4C?N+=;8-20)*58_\">IXFOMF\nM1CC$=\"U_5S+-+2^¥XZ[)`LNG3:?IC,IF9*HC6[TY'U)!S<>Z#Z,GP@¥HL3\"(\nM¥V=Q:1IVB:/K]RSO)/J-D]MIVDQJ664@U`9V/Q?#X_$,R,1D.8#7*5<FO*OF\nMS0O+GZ`U1+\";S)KMC$DMCI<SF.PA9>UQ(A$LA6FZDJ#TY9FQQ¥75Q9YI='J.\nMK_F=^8WYM:M;V,]S#>3SR+!IFBZ;;0V=G;R,!NO%4\"H.E978#QP'@'5K!R%]\nMR_DM^7%MY>M;#4/,=V&NW9+:^M+5C(6N:@@1K&C.S?¥`&-6S&,1([$M¥1(/M\nM^SNM/M+.\"7A+803R)#\"UV&21V;X%!#_&M:;!@,3#AYI!/5-V\"E3RV'4M4@T^\nM8(_7E1EY!D#$<PDNI:A':P7%O!;^IQAE,GPUC3X:U*]&`/VAE<CE/*F!G?(/\nMSYU_6_*?E<7EGI=I#J^LWY^M_7$B3U8F1ZD1S2H6C4>\"[9#P<A^ILA&^CRJ_\nMUO5/,^MPVH_W'V31RW5]/;1&1X8(5Y.[]65CXJ,/@@=[:(6¥@UC2;[S?JE_Y\nMAC7C86L(T_1I9^7J7,$+<6?B%))[_'3VQ](YMT81##[SRMY3T.0_I\"^<ZA?P\nML[!I\"G,=2$B45H1XUW[Y`ZB(YLMN])+SS#I¥(:/3;9;6WEC0PPA5A')``SF-\nM`!S([UZ=<@=5CZQ+=`7R*00Z?K_FZYEM;5I)(E7TII`I6UA5MP9:`\"H[5-3F\nM-+71ODY^'1&71Z3_`,JG¥O?]3%>_¥<SC]J/_`'L_WY_<_8_R?M?Y67?G7)_(\nM>3__U/DYI+1SW&@6:Q?6)98YX+NWHJ+)0$<WXD+¥/O2OOF)+,#T9SB(O-987\nMCEGMR](8+AHB:5(H3]XVR(GY.,9!MR>*L*OZ9^%AU/2OT?1EL3)/N>J?DKHW\nM^(OS3¥IP2,$M;.X.HWO$+R$5JAE8J&H&X¥>@R7ARES8T0];_`#G¥N:'-Y8¥E\nM?F+I?Y>WGE?R_P\":M0OTU'S7)=\"[M-6F$I*M&AGE-L]!¥4?&.GOB85U35=ZE\nMK!UV;¥CO+=IYP2^;4(M?+_E%+=EDN(](5:W\"P5^,1¥A5>JUW7(C5RARW8¥89\nMIY;¥W6OYXZ!!Y'¥RW4?_`\"N30K9;7¥OO.M_.L)UK3E.VF:C),P1I$_8=B#_E\nMC)?G0?X2V`P4]`_YQT¥Q>5;6?S'^?-G>?EOY!LC-(=&N9(%UOS'<1-O9:=;/\nM*)_2?:MTJ-%QW5C@¥:4OIB@F`YAB'YE?F5?^?M3TPQV$7EGRSH5HEEY2¥CV3\nM@Z9I%A'T^KT1%-PW5Y\"O)CU)R/#FZ`!99`/I#SVY¥V^9I=/U'1Y/,&H#2KT*\nM9]*2YD%G)Z>T;O;AO39AV)6N2O)_$?L:2<DNYC27S0+8W4W[U[39PQXAD!W$\nMC1T8\"G<$'WP¥$#S*¥,AS(3C3&L+_`%=89;QK6\"4/,L¥RF2.%:55>/Q,RCL?M\nM=ZY$¥$.5IJ/4KW#31F35;UX8EDD6/3XC¥31*=F%*@AAOOODO&_HLA*`>J^2=\nM4¥EZ7::7?:GY?OO-VH7T5Q;#1;>^;3-.L(T%([F6X2*66>;N(D*K_,3D1GR]\nM$G)!EECY^_*[RU;6¥>E?E_HUQJ%A*;K1?-6HBZUG55N#_>2212RQZ;*P.T:R\nM6R!>NYWPG)E*/'[@RGRQ^:?ESS)=^;&_-'3-4U_3QH,_Z`UBXN;CZ];7TG]T\nMD,<$T,4<1_WT28T_9(&V2B)EK,Y2Y/G,2>7M,LX?6>36=1:021¥?BBV/PJTG\nMMT(H03XY`CO8<<QS9#?WIETO1+K3[O¥`PZUUZ¥FMR_!%)!/&?W/I,`'C/^I0\nM_1E?'7TEE$@¥V/Q:II%O.L%I(^K:SJMZD=],Y'\"9I2JR%N?P$,#N37?<YD0S\nM2ES;/$$>3)[N+1M.¥T^:K/3)IKG0[5HK/R^)0LDRSQH'FAXJ%!5231J`>`QE\nM')+D:91RR*2W%T]O&)8D:-IY\"&E=0Q%30`BFWS/3*.&<>C8,A\"M9:WJ5K9W.\nMFQ32V2W4@:[N[:3A++Z1^!6=\".2CPR?\"9<PD:@]4/'J.K66G2W%A+)->Q78E\nM@*AC\"'D^%F<\"H#$;$;¥LHR:>'4,_$,NKTVPATO3-'3S!HM^^L:O>¥X1J@!*O\nM/*.'U=`P^'@Q^R%6OCF&3CAR`087U*>S7FA^2M6T1=02&_O[;1*Z;=(%EGMK\nMTMRE(]3:W)J15#R/OET-0U2C$+X?.7F#S\"U[#HUL]J)P#)?!1/R8'=9'=\"B<\nMA^U0'WS(¥4]RC)`/0-.TNYFTZ-KN^331)>P2_6Y@;B6\"*`?O*Q@QAA)TY\"2O\nML<NC+(.BV)<@R+0/RB¥KZ+J,TWFCS3]7¥M:].U_Y3AM*BZND+<Y(0(_K%%4[\nM_O6A!_9<9&6>9:3A+WGR!K^E:5::M;^3O+UK:W>G7D:Z.;N!9%DA-0]Q+;@N\nM))E[>J¥J#WRWP^/ZBR&S[&_*75+O]+V&K:]K)EMXS+#;:0`D:K<.M&N(84\"P\nMP*P)#*E`?Y<K_*@<C]K&64#J^E=3UR&RT74M6UNVC72K$^J_J1LP=58%#Q?;\nM8T^+I7PRZ&(Q¥W'EF[F0VEU#?V,%]&:VM[\"L¥1.Q].5`VY!(Z&N\"<ST\".,EC\nM&H^=O+&BQL/K0N2@5O2M`)*J^W-6JJ,!WHQ.5$S[RCBF^'?,&D:'^E_KVI7,\nM<NIW-[<FTLDXJCI.3Z2Q1;,20>F]3XX!AG+JY6/4&/-E\"?E7YG&GOY?T+2OT\nM?=ZQ$)=;U.[9+=4@6A6-!0,TA!W%*C+H:60YDL,NM)ZIW:_D'Y3T#3H+K¥P/\nM-\":99R`+;01W2V):@YR\".4,¥MPY'[.WLIP3Q#NMQXZB1>!?¥Y`:'^2^MZ1Y4\nMTSR+:SV$WE:?UUU:&W6&.X26@>.5I:3¥R/M<T'MF#GJ'-VFEQ2F=W@FE>0_+\nM@34+^ZM!<\"XG9M/6Y!:5;;C1N*+2,U_F*DCM3.?U.JCWE[;LWLL2'+¥;IU)9\nM6Z7-G9:5&1#Z$:6=I%0!*G<U(ZGOVS\"CFB3U>J_*8¥467?X;@_ZGCRS]CTO^\nM.E#_`'G_`\"Q=/[S¥,S.,.M¥;&__5^1.E2P/!J:M(KW$3PWMK'RXFJG]Y&K&E\nM5IU`%<C/(!_#3:8`L8¥P+$=2NKFVC]*#4*R0Q*20IJ.0#'[0.^^4&1/(AAPQ\nM'1)AQ4QIR(#U^)??QK^.$$][`[]0^A?R*]+1$_,[SB6*S>6/+,T6GWG)@$FO\nMCZ)(<,*/0GIE¥)QZDL..(YD/H_¥`+.77/+'_`#B^OFORUY;N_./G\"QUE[K2?\nM-KV4/F+1/+$<9YDW>FWYNK>\":0[I-]3JIZ2#K@ED@>8+690/4OEOSG^8'G'¥\nMR;S_`!9YS¥SWGFCS#\"?0.K794&,+UBB5%5%B'[\"*`J]@,..4.@++TQY`O.KB\nM_N)Z,_P-)T=.JT/0$UKXTRV0XNM,!E'<5LUS-/(¥H99))6I<,#0$4^TAZ@_/\nMOF/*-?Q,Q(GD%,@D*-PU*J684(¥6WZX1/S:92DNX,ENTTMP2R-^XWJ&8CX58\nM'M7IDQC!;(%1B.HW$C1K*6N56DL-`U4;J`H&X`R&0\"*?#B>93[2/KB6Z&W=(\nM8M.<S>NA`/4<DY4K0]Z4/N,H¥4=S\"4,<>]]`>5;_`/+_`,^:MHWEO4=\"¥M?E\nMS;ZK.!>>9]-CU749I+I%_<^N=1U.80Q2'[1@9!XI3)BY%H,P>3.?SET+¥H]&\nMT;¥OM$_+3S`U]K>D_6%_-'5I6N(XIKIF/&*!W$<+*%^R88J4ZR,<R>\"AS4&7\nM<P_R?Y$¥JWOE:Y¥UZAYPT[0+8WLUIH.GRVUQ>:C=74(Y>G+\"OI+!;2#;U?5J\nM#T6N8T¥60¥I!G&^YC$D@<N=1N(_+VFSRR1WVCV$LC>O\"GPJ>4CR&9'IR\"R<^\nM/8#&`,?JDR!D'JWD+RU^2P¥OQ^9_-WF34H=8U(SV_E_R!H5D;BYN.`XI<27¥\nMLL<,,8_:C9HW/[+83(=]M9F#U7?F%>?ESY¥BT[3K'RK9^2[S1;%+:Q2&_1;/\nM463^]O+P7,:-SX@@(')!Z.^6QG'H+^#*)B¥B0>4=.G@M?+MB=<O3&4M+Z2,P\nM6H8&A5PPCGEKXMZ-/V>>-93R\"#.N44LL4:SU./6KZ:'U+R1V;1W;XH0!PJ.Y\nMIV._SRX8¥@',-L9R[D?>PR0HR6D9N9)Y#)`&:N¥IJ`\"*[BO0D',7(?YQ;;)1\nM/Z%4Z+!J5W+%/(96@N;*U;F(I(SN9:?9KX,/D3E8C\"7)>&^JVWNDTW62ZPI<\nMP6L]O<-I$PJLCTHI)¥`>V5SQ^3*,!YLFNH-=U7S7J4¥$T=IJ]PGUJ¥L(2WU6\nM:95^`RE6V?CLIJU#X9CF'DV@Q'0HCR]<^7KK5Q=ZK;(T>AP.EUI^IJ)G-U*-\nMV:&AC=1V(((]¥$<4F!RCH&1#SO-'%<6OE_3U(,O&``%Z@=`ENB@@`]!4YE0Q\nMY!R(2,LNX,OM8+Z[DMI;@SRIZ\"R2\":3<S$?&@`5`J_Y/$'*YRR=2D&WJGEJV\nM¥O'3K72?,NHJJP78ET6?XS]3D8UH/3^,*>A!8@XXS7>U9!/H7JNBZU)9>9&¥\nMMMIMMI$R<WFOXE3ZO(A7]V¥7`*GQ=:#XO;+2)'J2XYQR/-[S^6.N2Z?YCT36\nM=7!;2;*]]*^/V3$]#Q;TJAB/PRS'BGT:3A`YOI7S;^:=EJ%KJFDB&!=)O()D\nMN'N&)GEMF!^.-5X<:>%&R9E..RP@!R#S._¥`S0CN-#L-.M!]9TNUMHDLF#!(\nMUC@V1E0`<V'<$#YY+BR!RXWW/)Y/-?F#S,39Z=&TPNW9;41*(U\"`[N¥C;(H[\nMES3*B92^J3:!,_PA+)OT<OEK4M,^MQ:EYDBUJROXM10!X(/JL@,D22,\"2YIL\nMX)7VQC(QY%C/#(¥Z#T/SG^?GFF¥G:>/S';>5=$XBVBLH6CCO#)]H/<NJO<(I\nM/21`D>3&HF/-QORD2^4?./YT012:G*9+KS-K5V@EBOIYPL44T;4K<']¥UU&1\nM]DK)$1E<M;./.#F:?10+S;0+KS%^8=U+)KNH2Z9Y/BE:2Z330MN¥YD%'MXY7\nM#O-&#OQE:0#-)KNU)UM$?BGK>S.RH$_3?X+TN¥U`1J+:\"#TK#3X$M;5T(!]%\nM?LE?Y6¥1G*:C6YY'D`]WI]*,$=A3Q'¥R_-XTOZKH4=Z?7U2)FOUB`9H8J[<R\nMM2I;I0FA¥,CIXSR'U%T?:FOR`;5^*>2_IFY_WY/U]'[/^Z_'_6S=?E1WO*_F\nM¥OD__];XY^7IH8[V&*>&.:*ZC*S)(*_%UY`FG&G@.N8AG?-99`B_,MIP@T^Y\nMG=(KUR%MK2)2L;PL=F7;8[;URP4PMB#*6],K&K<69CR%%:IZ4%/#*9RETW0*\nM+W/RM/=I^0_YG))$6THZMI¥=O-;!5D%P6Y$3D$NT5.@;;#<@/I9#'`LW_P\"<\nM;/-¥GE37/-D.NWFH_P#*O-?T=[+SQH&EI$¥VI!E/I(@F7X>)-00R_P`,AQR[\nMF<,$>CQ?S\"VC3:OKL&A1:A;>78-4GD¥NV5¥$%_%&Y)$=QQ)7;;QS)ADD&<H,\nM8CHT@Y2*S1DF=0M%9>A\"[C<^V5SE;109IIGF[5=)LK#38;32+W2K5IC';WVC\nMZ;=RE9OM#U[FVEE)'[))V¥,C\"NH:Y&NK*$_-5N,D5Q^7_DN¥CXVZ0DZ%9Q,O\nMH;58P+&S-(/MFH4]E&71Q`]&,-O-!1>=O+TGU?ZW^5WEJ¥\"NSR?O-6A:A;EP\nM58=1CC2G39>F6F$AR;^$%D?ER[¥NZEJ&N0Z7Y=BTBTU&RG;4=.MY99I(8F6B\nMK%+*S2-1MQS9B/'(C')KX>YBQT>&ST?2#<3V[6LMM.&2UD9V3TF)5+GX559R\nM/V5.^'PI>2)1MD@L+'3/*?EO4--N;:ZU#S/ZS7>CE75=,@79+F6X!%9#_($V\nM¥<QSAR'^)H)ETH*.@:':ZKK5GI¥VI6PGU%5@GU&]D,=JD2?$¥TNQ/,#[*K0M\nMTIEL,$CS*\"9'F7L^J>7?RB31]+;1O/'F,W.DW0773-HL=O'>P,]'_1D;W'.&\nM@J2]P%¥0K9;X40@$=[S_`%70/)&G7FJZC;ZS<W.@S2+-H5JX2]OG@4#UFD]$\nM);^H#T1W2OCWR8P@J>$H_6_*UUIT>CS:7J5@VGZWI¥FHV[1.HN+6`_86¥B7D\nMMM(PWX*[?/*I0G'D0CPNX,2L=!TZ>]M;\".[_`$M=ZF[&90`L9`6KNW)A]GV)\nM)[+E,I'O#(>GN3\"W@NI$A:RLA]257CM=0DD6-91\"W$JL2U=:>+4^62C.7>V`\nM]Q3RR¥E'7=+U[SA:RQ7%SY`LOK'F0H5CENHY3^Z6%(E/(1]69BOTY*7'YMH)\nM0GZ)]6RM;N[V75+6.Y5(P`K!_P\"Z.W=1LQ&8WAWU9@6I:A,;33;;2);TQ6SO\nMZTL8X@$=^0&[^Q-<D(2CR*:2NVU:UGU\"QLX(2OK3*JW¥M%C0)2KT^(KX5%,/\nMB'J6P3KH]%L92)=5MM'M_K]WJ]QZ$VJ3.T>G6J!1¥$¥@0F8GJ$4,<IGNR),D\nM+%Y?TB#6_K>L:PUYI]A,MK?Z@¥3(MS*5Y)#%&\"S<4/6M?D,A$QZECPIQ+YET\nM;2XYH],T¥H(IJV¥@`CB`!_O`P^)C]&7[=[$[,IL%UG59+-Y(Y(Y;F,SR6^Z1\nM+%V8U[GK7KE1MG&=/0=.T@V¥#3W$P5D8?5X!¥1J?M.:@G?VR&_=]J)Y_)ZWY\nM2¥V1Z?>ZCIUC:)J#26JAH;A>L(W(65SR(#;T&XRZ`(Y5]K7\"7%_\"'HFGZ[IN\nMI111+)>:-<3R!KLVZ^O!;HNU%61O4;D>[R[9=XQ'.3.0'<'H5EIFB.(3+KLS\nMP&.K-]5`EE#&AXTF94H.AWR`B)_Q,+]R70W'D33+2.WCCNM>FTNXD-MZ[TAD\nM<FO!A`$H`.H#U.2.#S8¥<?YS%]4¥VW%[\"8[.S33+6=GKIL(\"P@=`%\"]R>Y)]\nM¥B#&'1NA(>;P_P`V>?;RRM-9T/1C<R:B52._,3>A;¥FZ)*P!,B_(4PG-W!AD\nM`/(%Y'?ZOKNJ1V*ZU?B3A$(;F.$$+L/A`Y4Y?3E4I$<B`QQXYD[!$^7?*DOF\nM>1Y\"S0Z/I<JB]E''U90&J5A!H*BN]=J9J=5K##F;>B[/TDR;(_&[W\"6UMHY3\nM:V:^A:V<3+%:1N2DBMT>+84;^;.1U?:G?$E]([,PB(W_`!S0D05(>7&16;K6\nMI#%=@`/'Y9KOY4K_`\"1^;N,D(S%46(:CY*¥NZI.+R¥T^.7TRPFE!:*5RVY$K\nMH59J=B37PS/TW;(O^[IT>K[%$^B3?¥JC¥O?R7/¥`<_6_[S_=?¥G3[/OU_P`K\nM-[_*O]%TG¥B1[G__U_C98S1Q/;W#T8K*ACC_`-V``BOS4]ZYC3A'O8;/2/.T\nM9U\"UU6_F11<1+`^GW!IR9#0¥4_E`¥%R/A^;/9YE';U:)I5,@:.K,#3D3_*/I\nMWQ$*ZL#$][U3R7Y[M_*OE;S+Y8O](36[7S\"]$BD?THPPW5)?@=G'8A61@/LL\nM,SH98@;M7`1U9CY5_-?R]%JV@:%+^7_E7¥M_+^IW$5OYLU[18=5U6]CC1P%E\nMC_3VH:L$(ZTA12>F4S,9.1'4RCW,9_-6R¥N0?F3YF?RYKK>8M(G@BN;'5Y[\"\nM72[B8¥``K6TB1T)'[055/4921'S1+*9¥WF*M;K*.40MIC\"6,3;T5OU'#&==[\nM`$(B0Q>I$43<`!ZD`GQ[4!RSAC-)KJO@C$MP012XX¥.)%>6^W$#OA$0.J!PH\nMHQD¥+=FXN'?XUZ>_TCIODN)$J9_Y3¥QW]C+Y>TJ)Q;:7I-X]S%+Z:¥(II1Q,\nMSBE';_6J?#*_%¥OM:N.TT¥V0Z1_BAK+0M/G@2TM&O/-J2%VCN;IC5+N,%GIM\nMU6B+X#)\"<CT005+3;;3+W1+ZWU!KN'S/<7J_HN.!HTLH[``%Y+A9%+.P&Z¥6\nM4#P)QW!L@HLO4/*/Y20>8K\"+7+#S)HFC>5G]9+?SUK,TUK9WLT(K+#\"DD*7#\nMRK2@2.W:OXX99K[V)'O><_HC4]1D6*6=KB>621;&TMDD:29$)$<@@`]5>2BO\nM%E4@=1D``.K&.Z;KHCZ.NFQRZ7=0:CJK2BQLI$$;2-'M)5C7A3K0C+#OR;/#\nM!ZIGY>¥JWWF?S)I7EI.4FL>9+R/3]&T2V=$#2D_!RFF953WKMX9`P/5D(1[W\nMV2W_`#C%^7OY9:LUO^:?YEZ3'KEQ82JGE;RU/]=U#3M3\"`VR7DH@F:&.6N[/\nM#&G_`!8<(`_`1*$.KYQTS¥I==¥Q7.H6NG:B-:M-\"N&EU/4+6EOIEI&QW-Q?W\nMB6¥$0'>23C&?V2<@<W!R\"`8#D[SIY%TCRIHZV>D^<-)¥U:@M]`VLV>D/)<64\nM!<UBE2]:-(;D[T)AY*#^UALY.C.[ZO,)=-¥PZA=3:;9<Y6M9/6>*V8>J4<`U\nM4\"NW<A?I&0¥\"N7WMD*[UEIY1TYM0CFUG5$^H!W%T¥-27DX[*K$;$GKMMDS&8\nMZ!)QCO1,6FVGZ.BAMX?1-Q)PM;A@)`ZJU\"O-11B1X$[]<Q)D]RQB+9U?:A^@\nMM./EV_CB$NGH9?+DT2A(IN2@¥+M`*I(IZ4%#F*1E<R)BU>BTG_PAI5[ZEOHU\nMK-#<7FL2CA)+//NZ<.-`%K0,&;;PP0V/)!$2F[7GEK1)]3%K:B^%O+2'C5N(\nM;<2^J]:^ZC,ZK')HE&NCU_¥`+:*PUG7O+DFL[>7K^8IJT8^$11]3*¥A[`=E(\nM/AE9VY4PL]SU'¥RK+R&_G[ZS^7EVTODF'2HULS-'=(;J[4_O.8NU69:'8&@!\nM[8@D]+9\"$BDVFKY=L]3M9IYC)JTRE;5$#,\"KBC*5'P[81P^?R;AC-<PRRSU-\nM(&ECAMU@I&;<,PYMMN`11:J>X/XY9QUR:)1HIW;7,D¥9659)2%\"N@HJ*3T(`\nMZ`#*SJC%OPX)9.GV++6P>WM'MKN9[N[,QF#0I1?3)HB@@G=1X[G,++K_`.E]\nMSL¥?8QD+(3%/+>J:Y;BTT8?4C,61M8>(SI5SQH(RT8'L>77*8:B67JC/IH81\nMS?/WYB>5M7¥HZZ=)].5TAM/4O]:F0OS?_??(+P6G6A8D>)S8PT¥JMTLI`G]K\nMS;1+6VNVC?S-<7$*>O(+HQBLDR=4$?*@4'QIF+GS3CR#M]$<43O]_O>O1^;_\nM`\"K%%#8VZR:78V<8BM5*[#:FY!)+-U)Z9SNK.:?3['MNS];I(#>OG[U:U¥V^\nM6[VZDT^*]1+M041@'0+Q%20[J%>O<J2,YW-XHY@O5X>U=,?X@C(=8T2Z=K>U\nMU*UN+B.G.WCE25TH=R45B0?8C,&1R3Z%RQK]-_/^YB.K?FAY(TV9HI?,EK+,\nMS/6.S#73EHOM1L¥0,:/V_>.H]¥V^@[/R2.X/XMP]3VKIHC:3S/¥`Z&B¥J?¥`\nM4K:S_>?5O^/?^Y¥?[W[?^1]G_*SJ_P\"39=SS_P#+6'O?_]#X]00-;,'55$D+\nMF02;%:D4*.K`_\"/?(G;N8DO0C+'K.AV&A32\"XM@P/)D4-%-U],N0'*GL*T&4\nM3U,0RC$=[RZ&&X6YN[9^1EA=HI8B/CA5#]HCPIW&\"&3B10[PCXK<4`>K3)¥2\nMN%J\"*]AEDIR'(A!C%<W)0TK+RNK>ZBELMJK*%8$F137;*P<OX+`\"(Z/H3¥XK\nMS4_,VE_E1YJU7¥P;/S(]MI`TR/0;6TAMY-#CC``C9E8O*I¥6`IVR8,^[[69(\nM/1X&(8B)%:3@/4*JI53]HUYK0TH>V6¥(ZT6J@.J*2T/.)6I+,J^HB@#C0=P:\nM[UZGMDX2@.@;!&UJ-R26[]4>K4JC$CF6&P93T-.F,^#KNQ,0$;;6WKI';EZW\nM#L54OQ`>)A¥8-:5).4BCRMB:*?¥`ENYN]+GN+#2[1YY]=BET6RM5C]24/(U6\nM6-5%22=Q08F!Z,.(O0_,5BD>L6<M]JK:)=RZ<^G,TMH[QO-`@!MIZE6BEKU+\nM`T¥,1X@ZCYK(DL6T;1FO]6L+.&Y-UJ4B!_1FH`?2'1W'44Z8R&0¥R&@RD$XB\nM^M:E91RV4CV\"VLLMM,DY!()?<QJJ@<0>U37('$>¥-D93Z!](?E7^2FF^8+&Y\nM_,*[_,C2O)NFZ5:S?4-4N9:W,VJQ\"D=AP<01*TW[/[QCX`X?\"F.5)N7DQK6?\nM(>K)+8EM>TW6/-7F.¥*7'E[39'O]0\"2,1!(SP1F-W<;^C&[2*/V<L'B!G&$C\nMW,WT3_G'OSKIFMPZ7:76FC¥P#SEM_(!U\"W&M0PK$7:YFM58_5T*_LSLDA_DP\nM[)¥.GF;6&M¥5:`6UH@6:*YC2H>*6.0K(\"\"!0UKMT]¥'#W4DBWJOY7_E7J_YA\nM^E:'SMIOE_R[Y5YH^H:]=RV^GV@E^*;@(XY5AJ\"3¥94,?VLE'S!:1*N093YP\nM¥I?DGY7¥N^9]%¥N>:=2¥_>:S:K#HOFJ&%+'1!)SJ3]4D_?.H4'A(D¥J$_LKE\nMLI1K8GY-H)D^<]/T-=,U:R^O374J:QIK,953F99HSTMN(%5¥3VS\",I]_V)XB\nMA+[3HHEM;J)1,X+*[`@?'7X6'8@=#A.67>6P&^B776E6TD;S-<K!!\"@,K%@K\nMK,37E$E#6GMOF-+)(-^.5='HMAY7MO,_F2*>^$?U73M(2;4;4U8Z@Q%(MP0R\nM,!N>M?#*#FXNI<KQ!W,>O+%+2]A¥FOJ45UI&ISJ^FZM(RM=V,-:FVF0#B03]\nMDMOXY3>[C3RLP?1_*OEM9+1435&7CZ4LQ$¥B2@`¥Z$46O^30YEQX2&!D\"RW3\nM-0AN4]9\"HMKH¥9G#LOI.!¥/,KN*G*I`QY!EP#HRM[F>_@M9)TMXO2A]&..WC\nM2)&XG=RL8'(^+=3WR6.=¥R67#YE5AM+.SOK'4K^YAA@LSM&7XK(IW/N3X`9;\nM*([RHE+H2JOYYM.:0Z7;¥UGF#?I6¥#CT8RX`8PTJ:>+?2N8N3A']KEZ?!DR%\nMZQ\"ITRXD2*[DODU6T@DDUBY:(Q*T@Y4@1%4(#_-Q^9SFM;EB#SK¥!ZO0=FRB\nM-Q^-THUOS*GE6SEO);>2]DD*K%8HS(H!V+/(*D?1U'<=<U^FK)+FWZV9QQV'\nMXV8WJ?YM^;M0YZ?'JXT+29(HOJEGI%;,120BJE)X^5R_+NKR,M>PSM-#\"$!^\nMSWO!ZN1G+DPQ6UWS%Y;UO4XIOK5GHTGUC4(G<UD9V^)E4FA->N]3FSEJ\"10+\nMC¥$8[L,T?0]>U;6;[1-5A3RW=V,2W/K:[)]0AAMW'+G,UQQ*@C[(`)/84S$(\nM,U&HB.2$U+4/RNT*01:SYVF¥T2AI8KG3_*5N)X8I$^R/TC>F&(U/9(GIV.7Q\nMTW%S`;!FGWL%U'¥Y-,T:,R>3_P`O='TB7T>$VIZP6UV[5HVJEQ`+D);QR#N5\nM@-.V$Z#&.<0R_,Y!R+P[S;YFU/S?JLOF#S'?'5-8N57U+EU1.=1UI&%0;>\"_\nM1D?R6'N'R3^<R_SBPIGC@O':.91(Z¥/4%6#U%*;BI/S&9&/2XX¥@U3U,Y_Q%\nM9Z4/^^CT]+^Z'W?:ZYD<(:;/¥XO_T?CO:M)$5MY2)A&/WNY(8$;4(ZYCDD=&\nM0$#S9UH+W\"Z?><R46VFCDLZ`!I7<TH6(/(*/\"F&CW(,8CDQ_5;<:?KVL0NXN\nM&Y\"9KD-W<59`=P0/`'(F5_PM9)0MM&%90TGIVLU64[!EKXFFX^[(\"-?PM9B#\nMS#<4<5U')&P9)N9C,H-%VZ%6H#DSD'6-,HP#/#Y[U\";¥NV_+)-*T[]!:7?+?\nM7E¥D)CNGN&.W.7D!)_P)/ODH`'H6SPPP^^FMC$96C6\"5%4.BBA))H`.M/EB;\nMZ$L:BTTG\"&U;@A<J0IJ.G==NY[Y&,\">=J2`AR$GCMXO1X22R,0PI1=^AH-CX\nM#+/\"¥FF64'O17JS*LLGIL[0O¥78T'6@/?$1,>GVLHR'<C[&¥E$L6H1Q-%=6H\nM=H@QHR@B@+4Z5[?CB97W)KR^UFE_SU/¥OK>_N`B7&@2,XN>1XJS'[#`;<CD#\nM&NJ)5W++*ZU*>YMY&B:\"^6&W^NW35'\".0?#44Y`¥>@[Y#C(/)IN)Z/9/+?Y3\nMZSYTU*-/(<W^(+.X5TTJTU*;3]&O+N>,<KA;>TN;^LH0]'C9O<9D#A`MD0/-\nMDGFG¥N-9¥GZ%HNH76J:'<WE_<F\"Z¥MZ?J4-S?:;QV:74(T)$!K]FI->V1¥8]\nM!3*.,28AHT.LVFL*;._F-Y<%K.TEB+%F$_PE#Q!8K0[T'3#ZNZF1QT^BS^6?\nMY8^6='U_3M?_`#0LM1¥VVN@B^¥J0>6%%]ICW[,\"]G<7RAE=EZ,I](@[5-*9`\nMW/F?L4\"WG_DO¥FOS!_,:WLG¥K>6]3UC3YXY)KO4X8_3TZ*:W'*9)=1E].U3B\nM-PCR`_/)1Q¥/(GY,9<(9I^8GY*^9ORT¥H>4_,.IK:RS^:I9%@¥O6LIDGMH`2\nM/6G<A1Q)Z<21X-EPG+O86)/&GT;7-2N)K*TM;BY5`@FMX8VDEX<@#Q5`32GC\nML.O3!++,-T0!_\"C//NMW'Z;¥MR&S2TG¥H:;'H]GI]M)'(C+**OZIBJ@D).]\"\nM\"#LPR$M09<P&8-_PL8ND^IF.VFC8\".K`@A5',U(X^(KOF/*%¥F?%71\"P\"*:]\nM^K1NL1H6$S[(*;D5H34^PS'(E'HV1J^3)/+%OKGF*TYP71L-*>¥>&X:-S'<7\nM+Q[49P*@#L?PQXP.;EB(/1$7&B:6L5Y)8Q_[C-(4QWE]4L¥E]*WP1=N9¥0N1\nM.2)Z_8U2P$]$7#I&EV(M)[R0^NEOZEW\"7V\"R'_?8%10>-?GEL0.DFLP`Z,JT\nM^[TMK*¥*JD%E'<(;5A1(W8?:HI&[>X&5Y)`<RW8L4LG)Z9I6AW*\"TGNG-O%,\nM5N(;4D))Z,G7U*TX[;].F8O&.A#L1V7DJZ>?>;M1¥L>9)[=M+U\"[<Z+J(>*&\nM*W1+%4C($C+<2/ZDAZAN4\"@?LL<)S2E_$X673&!Y?:]A¥CVTM]'KT[^4+6PT\nMB^B1]/AAL)&F)C-1<I>71FG6,]^,P3_BO-7JYF._$[;LS&\"=Q^-V0F[2>W6=\nM%5C:,T<97>,</AXM3J1[YQVMSF1Y$_@/?Z+#'AW/XW6RW$%M&WZ06*\"V@MFN\nM+J>9@$CCI7D[&@H/'¥<HT^7+`^D4G4Z;\"1ZGE?F'¥TORW22!KV]M=9N;6W6:\nMU2QC6[;TNE(Y01`\"#U7U0WB,Z+3:S6_S!¥WF=;I=\"!O^.3PK4OSKB>>.+ROH\nMXT9(KQ[BVO9IWDG6HJLT<8\"QPR!NH/J\"G<'?.GTD¥¥_K%?@O$:Z6`&H?CD¥¥\nML?.^M:]J.H2:IJMWJEYK)>34+^XG=YC(#QJ9')VIV-0.V;W'[Z^#JHQ!>8OJ\nM(2XUZ-:3Q:5=F.(C[4A?XB?AH*@]^^6&,>A+?QF/4(22Z%P&AD9>)BIZ[DBH\nM.X`^G$B^J1:0&XE9HP(2&$3-,23N1M0$5V(R!@>¥))/<L>10+>395N8V<T/Q\nM`UH.5.YR(R2[T#=?]9@_WV_7A]'W_CURRRFB_P#_TOD!:%HEMII&5I05;XFI\nM4'H\":>&8DH_BV-EF^@$S27MJL@]74+:3ZF'IQCEC-4`/:OWG(57]J1D¥D)YE\nMMX6ET34N(%S?Q\"TU';@@9!LW$;5KW_#+(SM:`Z!)TC$#$`@B12KJW0J=JBO7\nMQVR4I`(XCY+I4A#+'7U$^T\"30LJ]S3I3,.1XF8E712X+;7$JK,CM*$>,CXD9\nM6I7C3K0?3EL>*(Y?:Q.3W(IOJKCX;CTR[$K05(I38CWR0RWT^U;#<%N6CY.\"\nML9!XNI%>0[`'+8L+[UUM912P--'(4X/18C0?$?V@*=/?)R)ER6@.2,M?W#-Z\nMP+K,M70_M'H&^?>N1&,H)!YA66T5AR6=D=GJ&&Q`K]BH¥.V6#':!7<S>TUZ\"\nM>WO=+U\"RC:TU>#@T:K'\"B&&G&8@)Q>0T[`'N3E4N(,3PJU_>:-J.I2W&E6)T\nM;3I-.AMKBS>XEGY7<(H9BTI+4;KQK0=LK¥.^@^;'AKZ7L/Y7Z?Y-?3_-&I>>\nM/,>H>5%L-,=?+T-O;2S7.K73BBQAUJ(X0?M'@P/<C+N$Q9\"1'-C&A:+?>8KC\nM2_+^FCU]6U$F.#308X@[K5@$>5DCV'V:L/;PRLXYGD$^)$<@]U¥Q?D'^9'Y?\nM>2]`U&73Q-8^;]0$,VMV,G.;2Y#0&+4]151#:Q&M.+S</')B>2/-%¥71YDGE\nMO6)]6;RK:Q)<ZA;7+VUC8Z>5NBUR1N+<VY=9E8;UB++X8?%D67@V]\"¥K_FE^\nM8_Y?>5=6¥@>7O,5_H6BW]R[:C:VY]\"Y$RDB2(3@++\"M?M*C+7]JN3¥>0ZL#C\nM#`GOIKV¥GO[Z!9FE#-*E3$7EJ*%^%-B>OCWP>-W4VX¥8BFTO^-/-T$=O/')J\nM6GZ8A1HDCBM;6V1=RT5M&(XU*CJR)R/[1.52S5S9RE#K'[6+><?+.IZ1:VZF\nMW:66]TU[W19(_BBN1&>)XL:?$I[5!&5<<3R+*(!Y!+4MA+8Z;<W3M-<26(EG\nM=2.*W(^%D7P([G\"9R'5)B0E,EFD9DXSN-Q]7*[R1O2IKQIO7OMMXYC9)'O90\nMA+OIG4¥¥^FV?ESS'HR?5I'B>'7(T(>WOYB>*UBIQY@^(J.QS&EDF.H<J%CGN\nMOFLK>+RQ<1EVNK¥W#W-U8EN$MO<O0`&)NQKLPVIWQB1U(;N\"9Y!E%Q^7D7EG\nMRC'YT¥TWQE22P2>VTRS8&3U9#_=RR-R6E/Y?OR<]5&/7[$'3RZA(_P`N/+]K\nMYEUX1S:G%%!;QB_9N0+*P-4MXBWVSV.QS2ZO6$]3¥G;:+$!^/>^D]2TV/6;>\nMYM)Y&@AOD%O)(#1PHW`/(&A`Z4W!S`QZ¥#G;O<FFG*.WW,?_`#%T;RK:>2H=\nM-¥K^5(;&<K\"UUYGDN5MY;6>%@#+(91202?ZX_P!4YT6DU,)C8O'=I:+-`V?N\nM]S#?-/¥`SD5=<ET^TU\"73['3+\".RGTRP18V]6-12>28@2TD/;FR^V;+)\",AN\nM+=-#4SQ'F7@%_P#F_K;R37.E)^A[J]BEBNKE9><C`G]VZD*J@GKNIW[YKY=C\nMX9FR'98>V]3`;2+!/,_F[6?,&B27.MZA=ZI=V4¥4FGW$K5^K!:\"3@*_`&ZD+\nM2IWIEF/LG%`_L1D[;U,QN;8?]<4)+Z;&))CZ@(-2'8;-4=!FPQZ6,.5?)PY9\nMY3YDI:DZHZ6[$TFV:NPY#J:^^6F<H]&DQBF-E<_4KRUE5^/J$Q24IM4=6)IM\nMED,H/,L2$'JR\"+69RI1EO85=POV6=30$`?M4[Y*67B[T`A*90OI*.0D4,0A'\nM3Y?1VR(,1T9`GO092(,DCUX%PM%V-#T^7O7!+40\"3YE5FLKF.#ZPUO,;)IQ;\nMBZ],^EZQZ)ZGV>5-Z5WR0S`¥B$1`Z(O]$7W^^OV^'3O_`$RSQ/-G1?_3^/D1\nMC3]R55F6DK*#NQ`^SQ[$>)R@@#HPH]R-BU\"XG1&L(C:F(L&)^)U8]'%/LT¥<\nMC*,3T8$A%W^E:T=.O+^]AE:UT0P_6'>4N]9B.,@W->5>M<@(@<@D!+8K>]F5\nM:QD)38\"IXHV_,'W^[&4O)GP%%G2;J.11(A#*:QR$'EQ;L\">GW4.1C,7R3&(\"\nMK'IYY,'+*2W%&('4FI!^>7'W(E$%,1I<#+)Z88LZD@=5!^CI]&5D0[BU\"%.,\nM:_Z&51F4P<'H:!'4]1X^P.$1/2T[(YK65/0>W`=$I10:DK3<D_3DP3YI$:1E\nMO:F0>E/&4>`,W)B*,OMML?EE@LL@`5>WME)D:-O4$Z,4IL4IVIXX.$]Z¥(5(\nM_3E8W,T15$1;?D_V8G4]*]*GY`Y$V&J0'<RO5?*7F'RO<Z9<>9/+.JZ):ZE!\nM'>6!O[26V:5)/LRH)44.C]B!0X./R:Q%DVGZ)JVKOZ6FVTM]JL?]QH,,<DUR\nM82/BNHTC1E**/M48,/#`<I¥VP8X]6<^3/(GG[5O,5NGE/R_J>K>8=\"47SKIT\nM3.T\"Q[^H2H_=TZA2>65G*>]/ACS0^N7?F?5-<U;4?,<E]=:S#=_5+V;4B[W(\nMDAZ12>H2PX]!7H.V2XP>92(>]-K2V¥W:QI3Z;:VEV^D¥S/J^G6<9BA9QUEGA\nMCV8@='9=AD>$-@H!./-&G>:](U;0]`UU&9-,T=9/+=M1OJB0W&[21(RJK24.\nM[T)]¥!-<Y-5!,/*7Y9>>O..H6UMY8¥L:EYA,C<%>UA)@D:,<V#7+`1**`_:;\nM)1WY%D)\"*K>^;_.OIZII5O=#08;6>2VU.VTP>B[7$3<6(N2SW\"TIQ8+)P/89\nM(QKFD¥,D+Y0OM%TK4;Z_¥V:=)K=G>V=V;RX4+/>+/)%QAD2&9DCE96[NP/@:\nMY29D<F<8UR#S+2^'U\"2TE1HW@DI>S.*5$AK&S#J.0I4#H>E<IE.1YFFR))Z,\nMB¥I:)-YDU^33M(2+GZ4GUS4@O*.!56BEV^SOVJ<P<FJ$.KFXL$I='I6I:=Y4\nM_+_0=)/F$+J5UI_-K33>=$FN&W]:6/J/;<@YA9=7Q<BY?@<.Y>3Z+YCTU/.T\nM?F3S)\"]W9+,DMW!`/3MVMV(HI15)/`]EI7Y;9A3EDZ6VX¥L!S/V/H+SVOD#S\nMUY7BNKCS/!I:2S*WEREU#;1`H/[J2WE'*0@=$0@GYY9BS91SB7(E+%,<WR]8\nMZOY?TO4;RVTG51?K)SAMM2,,D\"L¥)!(:.9$>,_01X',[%IYY=J+JIYY83<;2\nMN?¥`.?SL([FSAUB:U\"RO#<%ECGGD2E`7EG1W6G[)0IF='L+'/ZBY&/M[,!5O\nM/;_S9K%Y>V>HZGJ%UJT]FIC22[E>601L:E?4<EJ>U<S¥/8V+%])<'4]IY,G.\nM22W¥UQ::E,Q/*&]M_KR4^T¥;'C0==QF68&'<Z><P4,A616=!0¥.<;D@GQI0@\nMUPQD>_[$\"=)EITOUR*¥T6562#5CQ%Q7X4<C]ICTK[Y94CU9\"5I/'8W(L[9S:\nMM&%]:W1`P8¥HVH2W<`]0S#?*CQ!M$SU1+V01WMIIX)>48+RQDE!S&Y')`>2_\nM=7OD#*19<0[U]G80QS@-<O-969(%Q3A-**5`4'U`*=#L?8X¥F$XCO^U6:6QO\nM&@EGTPM);&1;(.[*>0Z,>''E7_*V]LLCDAU#08Q[T&HA33Y[5;>.-;L¥GNBH\nM9HVKR**S#X=]OAIE_%'^'[F7`.]JXN4FM8H\"B163W'J+\"OP+S4;F@Z[943$¥\nMTB`/5!2ZLLD1YW=4CD!91T--J!:=0,'AX^D6W@KJN_2/_+PO]WZ/7]C^?#P#\nM^:/FRX2__]3Y!6>D-$T@+!I-XYHEJ\"7!VKWW'89B'B/>V\"5¥RRVSMX(UN)(8\nM?AGA6\"7B*T9=]^RGVP<)+$B+*I1)J>G.)RUE!)9O'?6RDLER(_L@H\"OQ#MX>\nM&8¥LACT4<+\"[2!9(K0&)U(7C&0#Q5!LJ,OM^'AAA+CY@?-E+;HK%:OQ7DO':\nMK#D0W=37I7VRZN'D6@9+[E<0J3N2!(/3:,@UKXBO08F1EU9[HU(\"G)'J;=8N\nM$K4Y$DM4$4[#Q.3ABE^\"CCME%GY;ANO+U]JL=]!-JT5Q2'0/5BB;ZF@^.XY2\nM%58CLB$L?`Y9*,NGWJ,9/1%GRYI=MY?M]4?S?IGZ3E8>GY4C%¥;Y(9\"`)6D^\nMJ?4Z=RHN>?¥`DYC¥4X¥Z9571Z5IWF+¥O](TZ)&_+6VUSS+I¥¥4FG>8;B_N%L\nM+C@*NESI:KZ;H?:1\"<L!)[FF42>C6K7MIYOU\"Z_,6#RGY;¥K:?I?HV=]Y0L>\nM=E97]Q&`6CL[+U7NW+#=V1Q3^<8)98QYDJ-D-%HS^;-4¥Q7FB>7-\"¥MV<:17\nML]A)J*V6EVM*;I=:S>,68=U,SM[8!DA+J6>W5$ZCY@U?4]3MSYOUK4O-NG:&\nMALK6\"'4G<\"%U^$64ERLRQQIU^&.A[>.,L@\"2`E\"S,+2S>.\"98;61_J]Q4,K!\nM6^!4`%>8KN>G@!E?B`LHPMG&O1:[Y=-AY)U._N+[3\"?TU=:>)R]C9W$ZAD=U\nM4M&9V!I6BFG4G`#$=0D8O+[64^2_RN¥^?F-).ODORU?ZM;>C)/+?GTK>!?JX\nMY2\".:X>*.1P!_=QDO[9;&5¥B&/#73[6/V6I^;=,T[6=/BOKNPB-VRZK%\"6AG\nMEX#@%E9\"KLG8J:@]¥$KZ28GU<TU¥O:A%Y>U73;^XT^'48-.:&673+BW2XMV'\nM(,$,;@H`>Y`-#VP\"-¥]VLXHA]5^</^<O?S\"UG5=('DW0M-_+^S¥OQD:\";80W\nMURZS($D222XA:`1FFRI\"&'¥V$R$>K+PP7S'?:OH)UB'3;G4KW5=9UN.6¥OK6\nM\"RC!_2<TE3:O<-,JI&X/PRA20?¥`=&8F34=[?#22/1[&=/¥`+7D;2-8U+]`:\nMZM_J>E0?6+&UN6N;^TKO-'%<VL-G6!^LA9%H/VCF*-;$<G,&AG7)¥7Z]J=MK\nM&OW]W8VWZ-TVXC5(]-MP!&D=:>H!T)/C^.6^)DR¥@&H5C.X>X^5OSD¥G>5--\nM;RY!Y:N-)TVWCC3T[<I/+<R_M32K)Z7#EUV=¥UNHT^I!L.^T7:6$#U`?BU_F\nM#¥^?+%S#80CRDVNZ:[M+=0:H(A`)$'PH;<K/'-7N\"5IE>GP:LG?[FW6=IZ8C\nM8!X9K?G6;S/#$MQIFGZ79Q2/+:6>E6Z6J6YK¥**ZCU67_)=RH[`9T>##_/¥`\nMT/(Y]3&1]+'M8U>*9K,/;TC>U\".BA54R(=GV%\"U.Y'WYEQTT3T^UCX¥JV8FL\nMEQ')%6(RM/)SMRZT!`.Q!:@/N:Y8-.(]*0<DI=/M4+ZTEEO9]1B*TEB4>AR:\nMKMW*BG[./#75COW!06SA%Q%%).9`I%0%',U'2A)KB,I[_L4D=_W+M4%K2R:2\nM+T+B`-%;7*%J[_:C9=^H_L.\"0,NK#CKD5MO=Q\")5CLV#K¥*2QQ`...Y9F&]?\nM`X8QD$\"0*J?56W,K1,DUTYEF6H/'ELI!`I4]¥L¥/))L`0LS7QEFB6V*TB`92\nM=Y!X@TIMX'(G',=:9'=9);WR!%1HFF!!5E^*E.H8%>]<KKODQ-!$6JO%:L9J\nMM(SU)Z;=1UWR(('528JAMOK!9@7C10:R(?C6H[#^W\"23R+&XI(FF*`Q:XEE$\nM0+,*U)'=V``Z=¥`X@S!48],M9`JEYG,)+0(K`¥U;<F/Y_?EA@*W19'1QT[3)\nM2`C/)L3\"`0:J=N#^]>FPR/$.]C9DC?T18?¥`+%_Q[>EV^S_GVP¥4>]>#S+__\nMU?E(¥L,/``B22*3DQ3J['[)J0!MVS&RRKDDV.J<0&.WNY[<GU;>*,3B[2OQR\nM/NR5Z5'<]/#*`<AY(]19KY:L;'4]/OXI[R.VMM//U[3-F:1YF-/34`[4ZAFV\nM&5SXNHMF(E@ADD^O7D#1-'.9F,ID(+`G]IF&U3[?=AQP)Y`+(E7@5995#L9(\nMY5](JP^`L#O[??EA!'.F(A9V\"8)(8^85T-2(90.K`'X60TI¥/>OXY$3B&X1D\nM.Y?)(DLT<\"RK%);L)!-Q^$D[^F?$G\"9<350/5DOE6UL;S5;Q=1M;JYT];.YN\nMKB.QB6>XMUC']YP:B^G7[1)%!XXT8]\"DRX>19WY4_*OSMYPOK6R¥O^0]<UFY\nMUJT%WI\"V]C,T;Q,:).LG`((CW>H0'JV`2XOX6GBM-->¥C^8?)_F2P¥J?F'Y=\nMO/*/Z-A-OY@FA@6ZN\"'W62%/5CAF8'8<9PO;E7,G&.¥,AC*4C3+6YCUZVTG4\nM;F>/2IX!HE[?11VP6'F!+)=VL<LQ5P/LB*5CXY&8B>J.'S#U[5+7_G'B/0+C\nM3M`C_,77O,¥NG$NC#33IWZ4''C-;1Q'UY(ZUJK*33*S*(¥U,+Y$,+TW2_-.F\nMQZX-(T'6(KJ?31)YHCAMI`BVVW$W,:H7CB([G8]LHE985()%H¥=F]O<I)&T&\nMGVK_`%EH[=MD:5?@6(L&+`D5Z$T[Y$&0Z,^$E,K8P2PAQ#()9(V:64JU.0^(\nML2>NW7;+0;_A2(6]H¥K><OS*¥C>5=,?RR]QY;¥O:_=2O#KD4%%N)^!C*P7KI\nMRB<=?]'=6¥<A+(<?3[&7Y>4N2EI-I8ZY::A)_A[4]6N&:.;S#YODU%%E]0MR\nM+6ZM\"%!;?U&E:=J?RY3/6WS/V+^4S#DGVEZ]J=E?:K#Y6_+[R])Y>J!JNH:Y\nM9R7>E6¥;CBHLIKLO,)CUY\"7C7H.V8<]<!R+D8¥&7K7R3/S+ID>F^5+)M!@TO\nM2[JPMI%U#S5?L(BOK$DND_IR$-3X:L0/`C)XM7XIY).B-78?.^@^?;/R6EYK\nM*>6K/5M>:6(6,ESZ4G$#:3]XT<N[]0RCE[YEG13R<F$-1X)HLBU7_G('64TB\nMREL=$T^QU6[NI&,K!IVBB8?$/M)5J]\"PI[9CGL?*.;ECM:(%\"+RO5//OF#S#\nM>Z.^L3#4/T3/]8M8GC0J@E^UR1%52#7OF?I])/&ZW/F&4WPL4)NY[V]2-$>)\nM;J5X+F5OA_>&I%:5\"CY=.F99H¥RX@C2I<V[_`%`(Q26WGN%3G$&*D*:DK0;T\nM_9VW[C!''W6LM^Y5CM-/:-YX;6X$/K¥;>6X<*S$C[#T`!¥?L_+,B.(=;8C',\nM¥B$LU6Y]*^M;U8X[8Z>C121K¥*`-LQ913G4=S^&6CPX]\"6P7'F;6V>G7U]!;\nM165K/>)?W/'2H((&<32$[)!Q!YL?!:_+*YY*[V<2$NUG2M2T_5+FQU/1[JSU\nM;2(0MYID¥;V¥L2%J_'\"_$[^)&#QSW-E#N>I?EE^0WYB?F]]8@¥D>3)-7:\"-I\nM]2O/6MX(X4I45DNI(5KM3KD?&B>J#AB.0#\"O-WE'S'Y7UM-%¥R:2FG:A\"GI2\nMK(¥<G!XSQ\"!XV=\"?<&N3$@>I:3(CH$Y_+S¥L_-?G_5'TG0[:)+SZS'!.TLL<\nM7%)#O(.;*Q4#<¥0Q/9<HG(#J6,22^L/-?_.!_P\":7EW1;;5[GS!Y62R<E((U\nMN;V2:2)5Y>HZBP`&W;KXC(QU%=\"V4>]¥57WE.YL=2U33!K-M-+8/R:5'>DC`\nMTI&7B1B/F!EHR`_PH$@R?R!^47F3SWYAL/+FB>E>W5¥'NIV:YB@BCAC-'=I9\nMC&`0>RU8_LJ<!R`?V),+Z/N\"W_YP`_,K4;9]6&O^48;%8./UBYN;]%XI0`.A\nML\"_(UJ25H<QY:J`YE,85T#RG¥P_^<,?,GDC3$U#S#YY¥KVMFS&2S-I+J<GUD\nM?M*OIZ:>('0>H%!_FIOD!K8=\"6X@A¥BZOY&>RN5@BU&*[]&20V]S#*2%4=BL\nMBHU?HXY;CR0GU+$2CWL=7R;+#'?1$<1>R^J9?4%7(_:)!K3V%,MD2.2;B64^\nM6ORJ¥QZW^]T?0=2UVWNIA%%)8V¥LT37:#9.<2L\"PZ¥!OXY3P$¥R5$;Y!Z[_T\nM+G^??_EI_./V*?¥`'`O_`+?¥W]SURS¥OYEEP'N?_UOE1I¥)B\"R3Q¥S(&BCXD\nM]#N6;Q(Z4'TYA3OILS,3W(Y&#O;6Z$(JH5D/0!EZ5(¥<J]7¥Y%CN91Y81[K4\nM([&:3T9KL,¥4RN!5E.R`FH.W6F/$.I37F4AUX/'YFUF7ZN;)W2*\"5%^-)?2Z\nMOR¥3DAP^:#0ZE05V9)DC3[=9?5Z4I_&F)TYDQ.3R7P25CBF]0F)Y`LT;`!JK\nMW]J^/3\",!CW)CD11>0RJYC%&+AROVS_*/HRX2'4LZOHFFFS,+FSA'PI).L4@\nM9O3#\"0CDKD;@-^K(DQ/,EB8OH/7?SI_.M]4M8)/.FJ:#_A'3OT+H=CHDWU%+\nM>Q<;Q&2U$3S`C>LI8CKE=PZ&UX4C¥H6VB:YJ!L?.OGJ7RAITP+SZS):3ZF'E\nM.[$P6Y5W9NE2PWW)Q,ZZ#YMFX3NZA_*S3-!¥QVD&KZ[YD¥S1W;QZ#K:00V>D\nM/:BG!YH7]:XYD?L_\"1XY$B4NGVM5#N*K)H.KZ'#I-[K6LP:)JSQV[6%G()GO\nMC:RD`7%OZ4;6QI7:-K@2?Y.$89#^U=AT4#=^=_(!¥V:,GFO6_*$LLLAU+2HY\nM;K3X;N&<?\"][;B@*R@U*NI&3J03O+HGNG:1Y>¥Q76E:=Y*@O_1T33(IO,LE¥\nM%B5M5!]02VK`LB0@BH458^V5'-'J6S'BG)[/%YF¥[^6;_P`R>:H?.-W+YCU.\nMS$VO.%6*WN8DA,4<$UKR'USB-T!*`>V&$8]*9Y-*8/GC5/S(NO,=KIFI>;;[\nMS%YMN=.^M>K8W^K-'!;@RUBBMHC#/]3C7NG)U/2HP9A(¥OO1BRB'5Z)'_P`Y\nM%V.GV&C\"U¥MR026;*UII4,R1001`49HWCA(I7>G\"A]LUDM'ED[,:_\"!U>,>>\nM_P`T?,/FN>YCEE-I9ZA=>K2TDE6.YC`^%)`69&8'K0`^V9&'LZ?4AU&IU/$?\nM22PN\"_U%OK\"E'CCNHGAJ[D`BE\")1NR[^(WS:1T5<^%Q!DR]Z1V¥R1FST_E(7\nM0>C(A`5$DK4?$Q\"¥?`CZ,N`,.1#9PD¥TXNH;F&&!C#ZY@D:8S,GJI¥(H.2D4\nMX^YRP2)YEB`&=?EYY0U;SK<P06VJZ1Y>M--!COM3¥P:E9Z3IMH9S¥#/<W+JS\nM,Y^RJL1V\"X)S@.]-,1¥UZ'-H.OSZ-/J^D:G):7GIGS%IEP+JR])6'.6&5%',\nM*-R.-:]LQCE_HM!#UCS>_P\"4%AY3M]/T#4_-^K><[>Y5Y=6DAT^STMHW`)>.\nM**:6X->@8L#XQC)PS9!](`2`6$^2?-/EGR=K&H7NJ>6(_-<%R@EBT>>2.\"$3\nMK_=NY,,WK+_,GP`^-<M,¥LN9KY),9*7YD_F?:>>M1TR[M?(/ESRC<6</HRP>\nM7[(V-K*BB@,L?*3G)3[35%3V'3'AG_/2(E0_*S¥^_P`Q?RBENKO¥N-5'EJ6Z\nM1[>_,=G9W//DWP_[U0S`T.XI3*90EWLP/-@GFKSMYU¥X:PU_KI%UJ=S([ZE>\nM)!#\"¥I)JK,(8XPHKX\"GCD?@2R^+(_+/YD_F=Y+1D¥N>9=8¥LQR,?K*:/>S6:\nMSMXR&VD4-7L3MC0Z!!-,6¥Q>9O/_`)@OS=:UJ&K:O>7\"EEN;^6:Z8$G]DRLQ\nM/WY9'B'1C=]$7HOF#SQHFI66IV)U?3;F$HESJMHDT<J¥?L*)(PK(\">P-<$H3\nMEW,1Q#ELS/4/SS_/*[MEM+O¥Q/.;QB=PMO)JVHE(F8[4C:8A21[5.0&\"0ZMM\nMR/,O(9]6UN:X5[R¥OY;ER_*]E>1IN3&IK(_(_P`1DI0(:CC(Y%FGDG¥Q_,7D\nM_4)=1TG4&M-:@8/%>.J.%C0[<`P9>1[DC?*3\"VZ,Y!]2#_G.#¥]S;W<%IYS$\nM%K?*1,QTS3).05>)JS6A((&8¥]*3T9;%C/F/_G+K¥S_,GEVR¥L:_<Z=K5M&T\nMDD&IW5HD=V0=O3!M_1A\"CWBY>^2QZ<CH`CQ\".CY9O/-EU<7)N9[)%0NX]./[\nM(-?<&GCF=&`'1J-GHAO¥137JI#(J6¥$3,Z!=R7VH*D4`]¥QLTI=\"VPB7WI_S\nMC'^?_DSR;`EMYC>>U>.9FFU**!9/0B(X$)0B1B._P'VKFJF,O0.?C(#[T_Z&\nMD_(?_P`NL?¥`CG>E_O-JO7_?G^¥GV¥GQ9NXMWB!__]?Y6VDI+HLI8%5,S,34\nM,`>M/?¥`'-?-R1(HT2Q^NY6$,LGQ1SL2:D]J4H,C&^YKE,A-+5EAEADC4HZL\nM(V*]4:H/('H/';)<1'0*)DIEY@M%B,L4EQ'<S0RBZN>+&O$BG,L*!A[5P¥96\nM0[TDBC4\"&8,7$3AVC*@$@]!6GAXY.$A+O:UX1VDD]2)0I):/G0<E;>B@>'?!\nMDB.YF#2Z&W^(NAYI<?',>]5Z?=E<8UT8DDIM`J.)I'VD-&1R-_¥`)>G?!DF/\nMYJBWJVB?4[RU76=7D%_=Q216?F%]3NV^J)$VT,D,=J5NB8P=PK24_EIME8G&\nM^=,Q:=I;6#Z3^@=),>NWFAZD7A@TW25G2Y@?_=YU5T2]=:FABEC\"#)2G`<RD\nM&4N:H^B_4FE?6=2TOR]]8FA+6CCZS<2Q'<O]6LUEIP¥)\"GT9C'4XQWMD<$I=\nM7MEGY4¥P1:!J-KYA¥[WNL>5KUTU>WTJ\"_GATFY@C7X);BV+`*T?8B@7L<'¥H\nM1C_\"/FY4=`2¥D¥XSZ;H]YY9UGRQK&F7.HV%M*+4+(ER/5DWCG1!'(DA0?M3S\nM-_DKF9\"<<ODTSQ^$DF@?G#YTTVZ,^K&VUA=2+6TL+QQ_'<MLTA])(RS'YT¥!\nME6321+/%KQ#HQSS!Y[¥YZE8WD=[KTPD¥OZBT+0PJEHGIRT*1$Q)&9\"E=U?EM\nMU.2PZ(=#7P1F[2E/D`QU!<?H[5S=2*HU\"W:X%XJ<8^!IR=)#Q4M78@5^>9PP\nM\"'/?X.KGD,N;'XI8W>U6L:1RLJ0-=50QT`VE)*H`QWJ6^>$'&>]B-V6>9=#@\nMTO3K,W'F'0)EO*SMHEAJ4%]/;R4%)7:Q=XD!(Z>L'¥4RPB`[U,47Y/¥`,OD7\nM1YK6_P#,WE&^¥W>FK0W-A%JJZ3\"[.\"(RTJ6=Q-(.5\"5#*Q[.,`X.EHJ08#=Z\nME$MU)!<::D=Q;Z@¥UQ:2$L8X2W-+:5):¥HP-OC%6_:K@,JZ!D\">YZ!K_`.;?\nMG_4O+>G^7I_,5]:^4[@<+#RA8D6>D¥8>@CL+81VS-WY^F6¥3E?C^Y)XNYYU%\nMJCM''¥9$87A`%Z!0?¥_EU&`Y@6)R'N0E[>I)Z,RN$JW%D!)Y;UV7N3XG$`2[\nMUXPIW.K5D?C0JS,D@<5],`\"G+EXY(1B.=IX@A3=RT0.M\"=IJML$[,&P[=-V9\nMX?-:EY1C$$<)&:K)TY*>E?&IP&^X-4IP'0JD2KZA2.(@%A(]\"31A¥Z=,G`)$\nM@>B:6MT]W*P='HQ:,2#D2?8K2N_<#`8UU6[Y,BTX12H6W<02I'*E*,4;8<\":\nMCX?\"E,1`GJ5,SW/0--C6.5/K;!HE/I\"6G0-0BAIO7&6G+3*?O>F^7H(P¥SPQ\nM?6$'PABO':HJ&(W%>U,8X9#JU¥9[B]NT2¥LJF0PR+%/Q*Q#95$?[/$4VKT[Y\nM(SG'JUG,.XO3-(N=)99E?2+2[2^'[QKA%D`<'X1'R#!6]U'+Q.1$I2YE(R;*\nMU]Y$_+O76_W+>2M'NB94%RXMHXWVZ!GB56^>^71@.]K&;?FPK6?^<?/R?N[N\nM66/0Q9Q,7].\"PFDC2IV4@*QXA?'J>^3,0'(CDKJ¥=US_`)Q;¥FDW9LM7N[*2\nM*&26&VD9)D5:U``X1L*^)+9CRQD¥BR&</%]7_P\"<;[N,K/;ZN&A=!,J!&Y4`\nM_N^/6M>AKT[9`8I][/Q!YO.M5_)WS)IZM#Z2R-<,.,J5/!SN#0CZ#M].\"40.\nM;*.3WL:/E3S!I(>5+?B]#`_\"I)5B`VU-Z_[657W%O¥5\">AJG_5I7[/U;O]G^\nM;KTPW/O1XQ?_T/EM=QVL5Q<%8F@:)_3CBKLHZ?%MFHR4.GVML<91WU<@QJ5)\nM.WP`UWZU!]¥89QW-G#$IE#9Q<Y7`?X?WBQK6A¥2/&F)F&48Q#*=0LH[[3KN&\nMULA<3W=E&¥-YR\",2E\"2!0;KV'3`,H9F,\"PN&WED2)D<LP'%W8;MQVW%-F^[\"\nM)2[VNHA&N(Y(X0T1$B¥EF9]]ATHM,NC/O1PQDG6B>7]9UF]_1>BZ=+JETD7J\nMI:0?;0=V<FBJM.Y(&0,HCD/M9#&/--=8¥O-Y::.&¥N[*35GCK=:1'(7,`K]F\nM=N(0'_4+5¥<`N70,.\"([T7H6L>1DTC3=+¥PV5Y%>6>IF>ZU\"Q`>:_MVZ6TG.\nM:-(@O0,B¥O%LHSX<@^D.=@¥#^)[-+^:_DFTL[>VT7RO>BW^*.?3P_P!5\"H=@\nM'GCDD<O3PZ]VS#C^9/,.9,:0#8/(_,6J:-J<%W+I>A_4;A[I9+6^^LW,LMNK\nM-¥0)DE9#7H?A'CF;@TF27U.DS9Q$^C9C$HB6!H'F:/B¥LGH!VK;SM0-4G93(\nM-R0:'OF8-#$<X@L!K,AZLANO+>OVVF:5YLN?+5^OE^YY6,6NO;R0Z=-,0.*?\nM6.*QNPZT1N1.9V+38X¥@'&G(2YVA/+!¥NUNAYIU:ZTX6@;T[;3+2.^N)B?LN\nM%FN+-0H[TEYTZ`Y,QCW!8B/FQ35[O3&OIFTIKR*\";CQ,LM/79>K.(U0&O¥K¥\nMB/YCE$C$<F0,1T3_`$O¥R?,6F:'J>@6-S:6>F:D/2O##I]DD_IT^*/ZXL/UE\nM5;N%E4'ODAEET8R(+SI[^<7/K*`L+BDT3KORZ<@.VV5F$@P`\"Z6ZCFD4SQU7\nM@1*0HY.HZ`?3]WA@XN¥)-J;M>\"W0R(¥<=R?W<AKQ8KL&5B`\"1T]LR(P`8\"0O\nM=<JRLR?5XGFEC<+.P!+'CV(I6M/PPS¥@&[P_Q:YIG7]XS,(;=G<*\"?W3$T)_\nMR0>_CE(Q]X#`R/FAGN)&99%D,,.SEC¥/TU¥/PR8QQ30¥W0FZU-;GT(5]2U/U\nMF9/45*)7=X@2`Q]EJWMC4AR+`R*%8>G*UM<<?59N:?$>$BG[+<N]/<5'?(V3\nMS!+7OYM00.7/)'4¥BQ#$TVVIRW%*=,IE8_A2)!'1)))^[+A@>14,/L`'90Q!\nMI]/X8QLLZ!1L,1$S),2`4JZ[A@S;*U#4¥3['+[KHQ!\"<+;AT0H14MZ<[*-PI\nM_:`]O;?#XOFVF/<GEI;>FX2-VB=Q0Q5(,JKT:G0MX'IAX>XM7&7H>G%:P+*?\nM5$@4H`Q6@¥#45!]SD_2>K7($][,=,G166$EHDEE)657JPX_L';>OCC8')J-^\nM;T_3M4:4J$`@HW[V1FW!¥`W]<?JZ(.,]ST31M5B62!TIS^/U[=>(`IL&0&JL\nM:>&^)(',L!8Z!G%K?W$+H*&0RK7XDH\">Q(¥?&N&$KY'[$F*)FOI':((O\"5\"5\nM9P#05WXFAI6G2N_ADB!WM=R234IW:6$N%XBK)(6/-1VYGJ5/W>V1L+&)+!M4\nMOI2Y0QA/2<O/4EO3)V4H5V'+Q[Y'C'<&^-L+U.¥D1)R¥8)96+AR:#:@._7*9\nM`'G3;&!>97¥¥<;1¥E#P3GB_,GXP1U[5ID*$>K:)D(+ZKI7_%73T^G;^;ID^+\nMS9<?N?_1^:GHF¥DAOUBJ;A1(¥-`16@^R>XS`D`>@<B%>:*=*W0B5VN(E+?5I\nMRI4¥F4%@5_`$=<JJNYOV\"*M(9II8[1$+RM5H46OA5A7IL/'*I9\">H^2\"1W!E\nM&C7<5RGU>&:+U5AE5_C5(X:?[N,C$1Q@'J78`>.8XS5WH&_*G2P?EWH=BOUW\nMS:VN:M)\"9FT_28B¥2.QZ&[(>&7?<E&J1T¥<R(S,NB3\"GFLWF!(M32Z3B+9*A\nM+5\"1'(G=34¥PQ&Q-=CT.2..1:S/A97??F3YHTVS30?+EVN@:`UL)HM+L@L4D\nM$DC5J)E'KLS=^4A(R>/2Q/13G>?2:MJ.JZI=W^IWLVI7U[&+:2^N)6EG(6E%\nM,LI)._O7,Z&`0_A#0<MJ>GW%S%>6LB`.]M=QH;<C=R3U'6@]SF5Q@]P:R:Z/\nM0KRZ&G7E_$SQQO(1*'1EG<UWI4<@??BX]¥`X>I0<DCR9!!YJ¥L6>@74$WE^[\nMUG76BYVNJ2:C]4LH^1`*RV26S2NR_LL+I5¥4.\"4HCD2Q-GJP5==N(Y;.ZB<Q\nM7%K-ZMO-\"`EP`G¥TP`;8[TKF/+,1T)42(ZK-3¥S7FJ27EYJNJ7FHRM$IN+R[\nMGDGFJ#4)5B691V`Z9..:9Y!92M)?TJT5)?3:6,!7-00S*=A6GQ*,'C$<XAC8\nM46DE,AMQZD¥IB-Q;,A'!4K4<GI0CPWKEHRWW*:4H;I[AYBI,L'`K.-P?6&W&\nMNP8?+)>(>E,;\"XR.@CB5OW3MR*@46J_9!.Q(]L$I$]R)(<3E7])_BD:3:5#L\nMA)W7B>Q_V¥J^\"Q)¥T4¥RLT+I*SQEC&K`¥E%-S0D=`>XRR$3W)E#R00NYHI;J\nM'U*0L_)I%-.07<^'(?3URT@#H&49%6G_`'B1>@Y7UG'(4-\"AZ`CQKVROB/2F\nM1M!?6OC<,Y*QN4=VV(IVX]?E3*)9B.=,;13*_$R^J;>A!!.U-@1MX8>,2Y%!\nMKO5BHN%YR(R,0#(1^S[@GL>N\"(GT8[>;DGG2U2YGF\"*TGHO&@+@;T4B@KWWH\nM-LO,)GF`IC2;1`17/U7?X$\"O)2B4<<@2??WWRKPI=*6QW*T<:S5!<DJ0XY;(\nM>)VY=C¥CAX9=ZF`'1D-G*)HVFD)')J2)2G!A]FB[?\">U,CPUS+*Y=$]AC2XD\nM8D&(1J&61R*AE_EIV/AB#C(YEB8R¥F3Z?>B1TC=0QDKZT*45B0*!NA%!D.\"N\nM1*\"?-E=E>\"+A(@5)TY1)(HVD7N\"HVZ=Q2N61QRDTRMFFDZB&132.2('DS``E\nM0!4K3P(¥<EX<H]5LLSM[¥1&&:UD$<L:¥[;G0J\">@J0?H¥.V,LA[PP.W<RZSU\nMQXY\"#(T;P()7J2:LQH5!W[^^4C,1R)8¥=]`G#W¥ZVE$4HIE,DJ./@D+='&U6\nMKTJ,NCDD>_Y-@CYI?/J4C)64*&YA4`-?44\"I4UI2G;OC*?XIEP_%B>H714D<\nM#)'4T%>CD]#M2OAD1`GHQX0Q.¥ODDCG2A^$¥5*@&E/$TP¥`'<VQ!8=J#PLRB\nMX4)P;U'DXU\"GLU/X9'P8GN8DTA>4G_+-!]GZS^S]CQ_XR>WXX/!AWKQA_]+Y\nM?Z=JMK9Z))ILDC&]LI1`\"#Q<*M\"49A4,O<$5!¥<P<F&NC9QR*;6GFS0[*X$U\nMUI4^LJZ.Z(9S9QQM2B¥U17>4'K1'B(_F.51Q2/(MD25'4OS+U_4-!N=)@M[7\nM0].NVB76+?28I+=+KT#6$S¥Y96D*@]68UQ&(1Y[_`\"095T8KJ`,5V(D9A:RP\nMI+;,@H&5_M,@Z;'MED*Z;?!QSE0IDDE,]G&J+)(R%`JT8<:;AMB*=2.^9'\".\nM]'BR/5>T:¥9\"?[U@L8:100[C;D]!U]QDAAOJO&>]'\"WN+J6UBX>I-&_I1D,`\nM%`&XW/2GA]&2.W1B3:J-+-N([R5OA#>I;2(0*.&H#R(WW[=<!!DD13>WL7G6\nM1K9UABO)O5N7($C¥XZ%D5=OM?/*^,0YAB8GN>R_E-Y&_QIJGF*RGT2+7K?3-\nM$N=1L-/N=0.FR+(E3Z]M*M6FD4`_!PD7^9<G'4QZTQHCH¥CN4#2WD;6LB+!=\nM3VK0RR!Y(0C<2DSJJAZ>*J/<##+)\"75AXI_`2MX'5`TH#O\"S+',I^PH/0#P8\nM88XAWLH2M\"_52YE##E^WR'4)V`IX=¥$K')GX=]5)H`/15F+MQ*,Z@@FI``'@\nM-^_3`(¥71'#$=Z-O].O-.N)[>ZBB06T:DO#*DZ\"-@*,CQ,ZL37>A-.^5¥(CS\nM*U?1+UB:&-9#$3$*NTE010G9B`/Q'3)BD5$<T(9;N?DJ@(Z;!J=.6X/N,GSZ\nMKQ=RI([\"\":5(_2EG7B5'604HQ7Z>W7!P>]%E1MO4MOJT9!$7K#TQQXA'/4`B\nMG7WQC$=1?Q6B>I5)(V8M$J>C-5O08J*)O4¥@13[¥OJ(Z,@*YJC?Z7/'.7])+\nM5%AE\"?\"'=1O(5`I]V5SD.E)X2>2P6¥S07A0A;@N%#T^VH->3#O3L,Q^&?>&L\nMQD%TC22LBAQP1.%#¥0D!W+\"O3?J,LQR$>OV,HB^=,ZM=1¥HV/E¥V;>7+_6->\nM9F6369M2$%BHD_:BT^.U64.IZ<KME/¥`)EDI7U;-@Q2V1XE'!W]6\"4GU`.-&\nM^[9LI.<CH@I@CN5DC\"T]6OUJ<[R3`FO&1J?&!VKTRV.0'F/M1PHJ'D57CRA:\nM)BT,=.E/$;¥AX@X\"0>1:Y0D4WM(EMH4$6[2HTMR/YI'/Q%:=`1MQI3($EKJ4\nM4QA=GX3(%XQR!WCVIZ:]%J>F,9^YD+DR6.1(Y%F6*BRHY>$J!Z:/3<\"G[7;&\nM6HKH&8Q2/5[9Y2_+34[PZ!J&J2GR[I&NW,4%I]:A=YF#FH<Q$(H5NQ+BN8&3\nM7¥/(.PTO8^7,6'_FC9:U^7OG[6=&TTSZ=H]E\")+!)TCFDG<;LYD\"\"GLGAXX8\nM:Z4N@>GTWL=&8]7WL('G7S4EYILGZ018;R)\"D0BB\"¥1OR8E>:U.Q[#¥<N.HB\nM.[YMV;V,$1L]AU+SZWE2]T6SU2QE1+[3Q=SW\"$#TG;[:B.GV3[G?)8L¥#U^U\nMYS5>SV7$=@SW2-=CURULKVQN?K5FQ*^F&I3:H5EIR0C[LS?&!_B=+DT63'S%\nM)B;I>)DB(80NRB)Z$,6V+%6%\"!].(B#U+C$R'5C]RS1<%MTI%\":I&6#$+7?=\nMJU)R,J'0EE$SEU8I<R20R.`S.D:R>I&-V,C&JT/6H¥,H$I#E$,S88?=R3N'2\nM9F96B4R2N*&H;8'^W+8Y+Z!A¥$PX)_OR;['+['[7¥G3^S)U+R3P>3__3^3$,\nM?)(WC^-&5GCY?`0Q``)'6OL=LH¥-!XG10RS1^DT?[V@5&-1¥1Z`T['$0D.5,\nM;DCG55F0,@/!%:50*J6^S0K[^.$PEWCY,A::7,7UK1M(FBB`GLIY+2[<*2¥@\nMD/)*@UH1TJ#T[8./A8T0W!I$DB6LSTAY.1<%E!)44Z(\"\":>!(^>0&4'G;'B`\nM3\";2]/B%+F:L$$JM$2`E>5-T0%C[&M?GEXF.EHX@4¥2Q$LTUVMM]4D2X46XD\nM4(U`M>86NWN<KL=0/FD\"E0Z6T4=Q>Q6CSW4DR4GD^+T@3]I5_$L!AXNXL^.G\nMH_Y<Z3Y*3S;83?F%?SQ:/8.UUK+:>#)ZRQ4=8D6,%SS&W[L<O%E&^1N_J%LA\nM15_S6¥T^4/-GGG5->¥@:!/Y0¥L7EL;+0=$YAY(XA]IV1!¥+/2IJ[M_E9(F/0\nM'Y+(!X^WU.WCD*,_[I=G)/+G_,I->I¥<QK:#:$F-7IQ,B>FIFJ2\"W(?%R!&W\nMOF3`PZ_>Q`D>]!*B0\"1WV!85`)W!¥1]KZ1D92@>0^]L`(YK7CJTKM5\"!R!ZF\nM@&VX_#$&71'$I/$HC216*LE\"&I4$5H0V2/$>?W,QMT\"`,,K2/%Z?!\"#*K;T-\nM>E?`97Q203Y-Q(8P$>$$LI,@ZAE'7\"#3`VLC21IK:8('BF#&*.E/AKM04J-¥\nM!R#S:[¥U4VA1F`C)'J^LJD5K3IN/]O`)$¥@D</FJ\"\":82L%XK6L3M0U/@1[>\nM!RT^(>@;`>YOT522)#Q+NZ¥BHH.0'A3:OOAAB[PG==Q+F1HBWP,%FJ-B\"=]Q\nMT^>1G,C84BPN*CD(XX40`B,!2=Q6M0=SU]¥8`GZ@Q,P.2)(9YF7H4&P(XAJ[\nM;TZ^V6<!/()$R58I&@,3J2R4,=:UY-M7PIE,H`=%/#WJT:/;7<D;\"L2(&DVH\nM06%2%¥/?L<CPGH`BH>:N*1E1'M*(V*(P)._0CN,OB3'F&5CI28VT1N$620!5\nM(42%J@M[;=LIRR)Y%&_>$YAE)E^JLIF=BIC50.3$GB%4=R:[>.8D¥QQ<V>/`\nM9OLK¥IORT7RTND:YYYTJ.>Q¥U¥K:UO7YK+I3C9$F63C&`W=F7X3T;-+JNTA+\nMD[S2=G@<RSSS=YDT;RAI^K^1-<276+F-AJ7DK4;.1&**&#QQSRC[*$BBLJGP\nM(IFM_*9<YL$?-VWYZ&E&WX_%O\"_.&N2?F9YATWS-YJM8%NDA6*>*#E&ICC6@\nM5_C;F0>IK0^';-QI>PYC<R_'S<2?M?GB=J2_3?*OE_4-<T=5TN![@7`!B*5B\nM9/!X@.+@#<&FWMF;D[+X1S/R8?Z,,¥N=,9¥^^4[KS-K^KZQ%<B8Z==16T%J_\nM62&V->\"L#Q-:4((W'7*,6G,#R^QV&'VEQS'KIE7Y>Z0=.%]YBO(EM=9O@Z6\"\nMOR5K>VG^%X%3[*@>(!/^53-I#&'6]H]I8<H]/XY,U9%2K./32)2$XM5FJ:AP\nM.M:]JY;&%=7CLQ,CM2%N)5<)^[*F3E'_`+(?M'O_``R[8)@\"&,W<+U]9G`9F\nMY%:'<@4-1W`]L%]S-B=_'Z3TAC]2C5A;J\"3L32HK3'BG'I]C(2[@U]1_[6/_\nM`![T_;^[[/3+/'*¥>3N?_]3Y6QIRMK<&+_>H!@!LHI3D#UH!XYA3@1SOX,3P\nM]Z/@L;F^GNEMH!RAC-*N`K!:592Q'(^\"K4^V''CF>5M9KO32'1BT_'^_,B;C\nM;B^U6H6IM7Y'+)\"00$[BM;>WM0B1*+%#¥45>:B3H0#N2:^.^1L]0V!UU9R\"`\nM&V)4I1OAW>H]ST^GKANU'N4K:U]26W-H?K.H,P!;B2>;TJ:[].Y`P$=Q3L7L\nM/Y6^2K7SGYKL=,UO6H=,C1Y9;I@`X6%*5DXD@44?:Y,/X9CRE7,VD5WOL;6?\nMS*_(3¥H_*6I>6ORN¥NQ^>?-&N03V&O¥`YKW+!K81LM'MK&XX!V`Z,L8A7_+?\nM(QR2_A9&+¥^P^GK1K)!`MJ[R0(:@!7.Z¥NM1VK^.9F..27,AQI&71+;V2WBN\nMD0.85AB=VY\"KN2-@M-LO¥*DQED[PD/`\"W26&)C:EWD]4G=?B^+D#N37VRHX&\nM)XDRTKR]K.O0ZC)I>G7%_INETN=8U\"-:6]LC#X1/,U$4M^S5A7MA&G'DH,F.\nM>E.ZR%K1XCZCJL;$¥A0[5%-MNGCVP^&.A2,DNY#M&¥DEQ-<!Q-)Q55W`(\"['\nM;;89(<8ZLN.^BFR-)#&HA(Y(:-0[T/<]JT[G(')+JP]1Y+C%S0&8?&Z^F'IO\nMQ`Z\"GADH@=4<)ZEN5&DDMDBC'*-\"K$T]1JB@W_7EGI¥DT/-#NE\")FJ¥D:<!'\nML*\"O0#8;9`QOD0PXAW(RWBD81JJ!92.*OR\"G<U'*O2F,=,3R*@$M<7BY¥B25\nM)VJOQ$G>FU#EXPF/,%EX1[VJMPDF`I]7IZGB\">A/ZJ_KRC*)CDSX)HBV@:&-\nM_4)<,QEXJ0`4/ZS[Y\"''^`P¥*1Y[MPVKAK=U\"B9W,JQFHJ#L!_E9=<NE)!X>\nMBI.&7XV!DN5<%0!0C>AZTZ>&1J9Y_>DY;Z-HTRW,+A6<0DM)(V]\"VW0[XF`Z\nM@L!DOHB_3>=)`C.¥G(R/Q7<*?\"E3_#+!PCO9U;3¥I8H-1C5JQ@QQ.BDERIHP\nM]R.XP&44\"!/1'Z>CJWJRJ0LE`D?1:@]O¥QE$S3,8R>CZ`_(GRS;:UYSMO,/F\nM#2KBZ¥H:%*QNKR&T-Y!'(!NMQ'&LC*O?DT94=:C-5JO5L0[/28MWT1^9?G*3\nMR!H¥OEBPNSYEL?.,,MQY>N6D67]&P5/Q6SJ&,ZM_*6/'M3IFJCH(R/*G/S9^\nM`/F#3F=;1YS&+DW$4C3W+BID8M0LGA3NI^G-SI=#P¥@¥SJ]3*?1.%D95XDEN\nM?#H-JK3IMN3FT(G`5LZZB>CT/R0PME¥R:_.E8M&LVBA\"D+ZIE[,Q&U/89@G+\nM,G<,=ST8_8H+7UKLT:.<?6\":GX7=JF@.]/&N9>,CK;=&)9&UVUUQ7TU1BH53\nMT4L>PIT'X8)3AT!<B@>:PRJR\"TFB/J02!FE4D¥0M#4'OOMC$@¥PQ,(I:¥[M&\nM2¥9!:1PRD¥C6NWT'VS(¥,]`F.%*A<K()8T<%O4#A'W`([`Y$0GUH*<,F/W[&\nM,^M)¥$0/J!VJ2M>Q`&PRT2KN1'#(*G!?^6:;^[KT_P\"2F'Q/<W<,G__5^;D6\nMGQ65G$7MXQ(&(FN'W7X=NG0U[TZ9BT;W8&'DN>]431?4;5KM@5D!XD*P7JK#\nM9J'QS(LQ\"1C\"9K9RM.HOIJ1@¥S%&!Q*ON4+*``PKM3?*O%!Z%LX0&6Z)I*ZQ\nM/#IVGQ<;:%RT<@449@:EY32K$=*]<A+-C'.V!C;ZX_*[_G$'¥Q/S\"@M[S4;,\nM^2O+OU@?[G]3MGY7`<55K>WJDDP/2IXIWY]LH&7'+JY$,(>-?G;^6@_*[SA>\nM^5]+O_KD%JJQZC=`1K(TP/¥`>4B+\")2#LI9O<YD0&+O:YQ$7D,\"26RUB*GF[\nMEI*A0Y'45[>^7G3XY<MVBXH\"^NVN$>V)].(!A)#3]VTE:AB\"*'YY081CT4P!\nM2QI&2.$HH'-R6CK4,Z\"@^BG;)PE%D<=)2¥BS*I:3FSJZMR'Q`UW`J.W;+>.)\nM1=*)D(A8;EF%(U_9H/>G7Q&#@!_M4R\"G'+*DC$`21_8%6(KWX^U3X96<<6-!\nMN(O$&:H,DP87\"2\"HI^R/H¥<$8¥/(+,()92¥HE534%@U*U![U]LO¥:7¥W[&GX\nM.$LEO%(G(%HZ¥E(W\"'=:=_GDHF/5NX)*,:^LZM$QBCX¥N)Z$U!8J?'*Y98=S\nM#<+WF$9]1N,D98BW*@\"0*W6OCD0(GHRXPNC@]/AR`(52[=*_S\"H(R0PQ8\"81\nMT!$D,G[OXO[Q*@<BIZ¥OEET(</*D¥45-'0L2%]0(*`;,%'¥WA0^V\">60Z6V1\nMD>A:90Q6*'XHY$9Y$2@K^&X7VZ96,I[BB4Y(A&2L42?%&Z`/6GQ,.X(&WMXX\nMG(6(D40S_#'Q8TC;FA#5+GM7^&\"S_.;5!V+,9)%Y*CA>&_/DW4T¥!W[Y\"0)Z\nMJ,8+<;4CDHS,`]&DW8_#O113H/#!&1'-C+&`K1,SCUPX>*16\"RK4$¥=OO'AF\nM1XX[BU¥'FBBH:(+SXCB3R84)[4/2A&'Q0=Z;02%:\"<B.1YSQB%(X[@4^%ATY\nMU['QKF'J,¥`V8YS[GZ%?D-H'FC0/RWL]>TJ+2+FRU.YFEU3RO?\">UN9'[3_I\nM\"-951\"O1!:/7_?@S19/6=I_:[..25?2^;?S%NX-<¥_>8M2TI%M]+D>-;:\",`\nM)&P%).(%*UZ=!]&9.FA('ZK^+K=3D)*0VDCJ)XW4.D:`1¥30@¥J¥O\"HS;XS(\nM.N,;ZIC:7=&ANBRQI,)1)'(*B,C8%Q38GL1E.;42\"3&GI>IL^D_E/IMJD?I:\nMIK=^#Z@0%S!RJ&;Q6GV3OF'XI)<<Q¥TJCN4*)&@4+$5'U@_$Q#4%23U'ZLSL\nM1)'-R<>,HEI_05R/WA',&12*DJ.JFG3PRTXPB<`'6]T98DG'`-(/B`H!R4]/\nM8TWQC!I%=ZB)\"K1NZET+'@0:AUZGZ1F5&Z9;CD4K!+1F5>+1<FX^(6M:,1US\nM%R'OW2#/^<DMU(OJQ=68`EHC¥)92:@4'4#QR>.1'0I$R.91E9O¥`EHC_`+NO\nM3MX=/QZY9QR[F?C!_];YR)IT<*_6-1NPR*0[1%QQ5U%\"OA0GPRB1ON3*-<T1\nMILEQ<P.NEV0E9+E82T@,8?U#]H,:%E'C]U<AQ2¥D`Q[V>^5O*46H^9HM%FO(\nM[V]9I&>P5R$$HW^!MC11O0;URC/EE$?J;!+BZOT>_*_S)_SCG^1WDFY¥QZ[8\nM67G+ST+B+ZEHUG#;7EQ$¥3`@&)@L%FY;JTA$U-US42U'$>19B`ZEYI^</_.7\nM_GC¥PQ=:?IUY_A7RY(0T.@6,GQR+2G\"¥N1Q,W6I4<5Z?\"V9V$Q/-KR2(^E¥:\nMZCK¥VJS3RS3I(9)`+MV!**R;¥:T`&9T(X^]A<CS8A<:NI>YB=8XUA\"L(2```\nM3L1MX9=\"8CRIJ¥**!FF]%7=B2+EN:J:$A1VZ;#ODS9¥V^)$>J42S2R!?3:C¥\nM6D0B@9`.IITWRB42TRD3U4)9HCZI!\"U7@U=C%45)¥03XY*.*)7U!\"1.><?.7\nMG$B?!&?VJ=V^7<Y+TCDU¥?DU)(0JJC#E*K2PJ0>)`ZDTZ^V,9'H6R)4$IZ7(\nMO))&REAQKR]0FFVWV5Z4RP$][$R!1/I¥&A<$R$LZ(E\"I8E=F[[`^.7QRD+'W\nMI/\"3=.TZN'\"1%UD85#LAXL.^WL<KGJ(RZ,Q+O*(XD*SQL)9(ZEHZ<=SN1N1T\nMRD`'O8F060P4BC9Y.:\"H#D5()[$^V1D:ZM8I,)&,*JI4$¥3Z@H\"W@I'MD(F1\nMZE.WXI;696B5WI-$>`\"]Z[U!Z?1F7`$-?A@]49\"J>B¥TC@.ZCT@#LM/M+QH=\nM_IV]¥NJ_X;;8CA0QE'\">>X8J(`$AD0?$O,T`IOU]A¥¥IGDKF\"CQ)]0CI&^K.\nM>;J:JH>12#Q/N14$#O3*[C+H68F#S\"F%!E93Q5@\"2W2@ZBOB3D)3B.08D@]Z\nMV4\"CT;C6A5AOUV->^1]9Y4R$1YK(%92$9Z1R,.)!-`K=33WP`DLC13`>G$¥\"\nMH2ICE;T10_$5'5AW^>9$;'>PH]\"N+-]7#LY]4&E-Z,7;:E?#O7)RS\"JX6`$G\nM2+PMI`@J9=H8>ID(_:)¥`<UFK$9#Z2YF\"WZ;>2-/¥OV'Y4>2M?N+CS)>7EQI\nM[M;KH4^M7$9GA4^H/T?9/);5/?G#0]JYRLH0X]@[F)B!U?#R7RZE!<79+&>2\nM_N7:9592:-LKJP'`CH1L:YU&@T@(O¥=70:PP)ZH1)&C$S2,>$Q6((VX9B:TH\nM/#L<VYQ\"/*W!C\"/0HSUZ\"X%Q.T;<D6)2O(49@'K[>/MF/.)/0M>4RCR>J_F/\nM?PSZYY:TRQN([BPT3389FG@<M#5E`])#N\"/$5J,HCBH[Q:HF1Z%*HKI6B<JZ\nM_65G)D@->*J1]E6I]-,SX4!R<T93%5CFYI/(7\"Q?\"G&OVC_D^'N>F5&7<&)F\nM3T+;W:QJE9`K2.#¥0^)*;`$`4-1].9$(L>&^80_UJ82)#&0)99:,G4(K=Z]_\nMEE4[Z-@Q0¥U.:YC]&>\"-PLD*5E/'O6A*COD`\".B2`$@FYM=6¥4)$/K0%X:_%\nM1(]W`:G?LN1.20Y!8XB4U]>R_DC_`+CU_L'[/CT^U[8?$/<6SP#^`__7^?$_\nMEN)-42#6HI[26>`K;P2@@15:H94-\"P/0UJ/;*I<1[_DSE$#JGC/:V%D¥J1/;\nMQ1.OUIHSZCLB[$`-^SWVR$8@][$0@4CM;XVMXEU92S6¥JF0B96/JJS?98/4F\nMG'ME<¥=<@I$(¥@JMKCK(L3.S1$AC<5^W(#OO_,>^&&(=0`P)M)VN[QIU$TS,\nM)9*JK*%5B/LAAV/;\">`=S`$=ZH+DO!<*Q,<CN2¥5*`,#1@3[CH<G`1[OL;.*\nM^12=Y1#+Z-P#/=%2RW#&E#VK2E0!MMD^&/<CXK)IBT2D!HB4`]2O4CJWN,(O\nMS3Z>J#:9B5Y,R`E?3Z!74]Q4$BF2X;[V),?-5$T+1VZF8EEF<7$C?[L7I1E/\nM3Y@;XG&1T4QB>]!RRF)W4*¥33,WU0]>:IN:#J!E9BU^&/-<@%S`H+D5J:[U4\nM>`VZ9.*1*(4/K@6C,S$MM$5H`RKU8,H`.1D.¥)XX^34LC3NJ0RM(WU<O,@J*\nMHK?\"R>->A[C#'?D/M9`C¥!3+1P1¥PQ5@O+A0A9'/534T^9/7(^$>YA+@'0JB\nMR-PDY*2PX-$G0U>G2NQI[G+(PD.GVM8E'S;^\"WCB]2=JB0B96V8%N@^1]^F,\nMJ¥OBD3!71SI,A5D=&W]/B:T`ZT¥3D!`]/L1*`/4*Z2-+=+\"'+JJD/2B[`;D\"\nMFQR8'?98@UU<TQ2D-N[\"20<FC!!Y$;=^AI]^7@R'('YMPF/-9]<\"+'&TN[/1\nMP*<AO^T?;*#D(YI.4=Q1\"2QEF`D8AE;C7>AKUKW]¥99Z[F49WR#TW¥O?R>_,\nMS¥U-0M+3R7Y;GO%O&=%O9OW5L&05)$C;L0.R@YBG/CO<AOCIIRWV3C¥R_P`A\nMOS-_*R5(_-V@/:0/`99I8Y\"_!5Z%Z`4+]0.M.N9$=1`<B$2PF/0/*;6TN(U)\nM]-BL_%T)K^¥/R%.)¥?'!*0OD7%E-?(KJJ%JCC(PF7KP¥!TV!RP&?39&Z]0¥?\nM$R%J!6J`-^752.U,@1D[PSC/;DVP#(I6K-R$OI;JP¥5!-=O?,#4QRGD7+T¥P\nM_3/_`)Q_¥U7/F+¥M?+N@>6X+)-+TFXDA¥S:IJ,¥OUFSNY.T-E'$1.6'C=0@=\nMLT/@R)]4@';C-(C9¥9>8].O/+?FKS=HFL!GU&+5+B21D'&&2*1JHZ(O]W4=0\nM237]INN;W1B0&T@Z'5QR$[@)0%E6WN'A59(XW7F78'TD8BIJY^/VI]V9_B2'\nM1Q<8DF>L?HX>8M06)&M;6$6CQ6R¥TC](J\"7!%#5VZAJ;>V53XI=X;Y`'FR:Y\nMUV74/*+17UG8+KEEJ)19K*RLK1X;.7[/)K2*-):@?:<%A[Y`8LD6N.*,N0/S\nM>@Z*WH:)Y>CT;]!26E_#>#7)M5&G1WDL_&BK:R7M+N0CMZ!X@]<M&3-T3+%7\nM1@-F]L;5P8WA,#M%P<¥G4U^Q*#N&¥*X8QRG^,!82(_A4KEV5'@I1/5BF2Z`!\nM((ZQ].E.V7DSB-Y6V&9¥@IK=J]P¥@^!I68BM2H¥#2NWM3(>(.¥N,9R[UD;<7\nMX3$^FJDB<4J2>_T^!R8H]#¥T7(I/+,¥CLCN¥;++L12C`#:A[,.XZ$8F,^@9P\nM/O¥`@G7U^S_WS_NFOV6^U_-UZX>'+_-#D;^;_]#R[^='_*?ZE_QAB_XEDBY.\nM9Y+>?W:?[/#B<-(I/MO_`,8I?^(Y'-T9H;_CP3YV^8D.C&2M>?WY_P\"8A?UC\nM,G'R:NB`[7'_`!E/ZL6S&EES_O8__&-?^(X\"D+[S_>'R]_QANO¥`B6$(4[KH\nMGT9(,$)<?[TS_P#&-/¥`B69<>3:$1=?WC_¥`,,WZAF'D;BW/_<1?+*HNMSI)\nM-]K_`(+_`(CF;/DTXN:IIW]XW_,')_#,1V$5^I?[SG_C(N,6R:NO^]%K_P`8\nM%_AF9C:2HZA_?)_QE_AF'D:Y.M?[Z'_5;]>96F<7(C8/M2?¥8W_7CD;L2U/M\nMR_ZO_&N4R<I+E_WJ3_5&8);DXM>G_1Q'E>5OQ/WQ_P\"<&_¥`E%T_YAY/^)KF\nMAES<V#P#_G/K_CIR?/¥`IFSP¥FO5_2_,JT_WF?¥`USFWP<G322NY_O#_`*Q_\nM7EW5$FV_NKC_`(Q?QRO(PQH6'^¥?_C$?U9@Y78Z=^B?_`#BE_P\"2LU'_`)C)\nM?^(YR>M^K¥>3NX/EGS[_`,I9=?¥`&6;_`(CF][)Y?CS=3K?Q]C&7_P\".38?¥\nM9C_R<&=/-H@R#7O^4G¥P_P\"K#_R9&5Q:<B#TW_E%Y?¥`MLV__$<P<WU-D&=M\nM_O;Y/_XQ-_R<RR7TLI,?L?¥`I=?]MNZ_XF<I')Q¥B-?]C_9YD8.;AY6.I_=2\nM?Z__`!MDCS8Q3:;[5O¥`-?U9D0Y.5!*8OL?¥]V_XED7(\"/¥`ZY)L?__9````\nM``````````````````````````````````````````$````@R0``'¥D```\"\"\nM.#DZ.C`O/CLM+S@X,#$T.2XQ,C(Q*BXY.S<O(!H?&@X14$E#5\"`X+3$T,3(U\nM,#`P-C(\"````2E!%1SA\"24T$````2E!%1SA\"24T$````````````````````\nM``````````\"KSO6'``\"48```(4LT-30S.#TW,SDW*R¥V.3HW-CDT,3TZ.3PV\nM,S0Y.204%!<1$1$1$1$1$1$1$1$1$1$1$25QH&U4;4<=+#XG+\"48'S8U,R,@\nM,3LS,#4Q+C`W-#$S-BXU>HHU-8Z02S`^/#P[.CHZ-\"H[FM:?=3TM-3HW-C0[\nM/#H]/T!'-S$X-SL¥-3,Z````%11!9&]B92!0:&]T;W-H;W\"J(#,N,```&I(:\nMD@``````2`!P`!$\"_PP`__X```!(````2`````````!(`'````````$`\"@``\nM````2`!P@@```!A(`````0````````````````````$`````````````````\nM`$``````````````````````0```````2`!P```#``````````!6:G!E9P``\nM``````````$``6%P<&P````````#``!P`$@`2````$@`````%ZX``0Q0:&]T\nM;R`M($I014<``````````````````````````!C____8_^``$$I&248``0$!\nM`$@`2```__X`#$%P<&QE36%R:PW_VP\"$``,\"`@(\"`@,\"`@(#`P,#!`8$!`0$\nM!`<%!@4&\"0@)\"0@(\"`@)\"@T+\"0H-\"@@(#!`,#0X.#P¥/\"0L0$1`.$0T.#PX!\nM`P,#!`,$!P0$!PX*\"`H.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.\nM#@X.#@X.#@X.#@X.#@X.#@X.#O_$`:(```$%`0$!`0$!```````````!`@,$\nM!08'\"`D*\"P$``P$!`0$!`0$!`0````````$\"`P0%!@<(\"0H+$``\"`0,#`@0#\nM!04$!````7T!`@,`!!$%$B$Q008346$'(G$4,H&1H0@C0K'!%5+1¥\"0S8G*\"\nM\"0H6%Q@9&B4F)R@I*C0U-C<X.3I#1$5&1TA)2E-455976%E:8V1E9F=H:6IS\nM='5V=WAY>H.$A8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$\nMQ<;'R,G*TM/4U=;7V-G:X>+CY.7FY^CIZO'R¥_3U]O?X^?H1``(!`@0$`P0'\nM!00$``$\"=P`!`@,1!`4A,08205$'87$3(C*!\"!1\"D:&QP0DC,U+P%6)RT0H6\nM)#3A)?$7&!D:)B<H*2HU-C<X.3I#1$5&1TA)2E-455976%E:8V1E9F=H:6IS\nM='5V=WAY>H*#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#\nMQ,7&Q¥C)RM+3U-76U]C9VN+CY.7FY^CIZO+S]/7V]_CY^O_``!$(`$@`<`,!\nM(0`\"$0$#$0'_V@`,`P$``A$#$0`_`/S[CO;CS/+NF9YXSM<9PP;/S'IR>,G_\nM`/579Z'HGB^VTAO%-E)<6%I<V-Q<-)97UN+V6R5VA><6@<326PF0Q[RHCW*6\nM)\"H6''RKENUYF:LWU-6QGF¥03:?H^DZ,=3U*[>VMX9I+Z[OYYY#+'!!]FVQJ\nMOEEI!A29\"K#Y)5\"!*N:_HUSI-E'<(YU\"U2ZFAFOK2[M;V%KH2-(UO$8YGER4\nM='\"R'>59V7<N7.G*VMEZV_I&7/*[OKY_¥`Z2/P'XE¥.W/AR6XT'1O%5CJMW=\nMS:>¥.I*;#55LP/M\"Q2\"5)(;56V_Z01'+(8I/+.$#+0U&ZTWQIJU[XDEL=$T&\nMUU6**>YML^1:BX:,@SPVJJ6CM589C20M'\"D?E¥¥&B\"L[M)^7_#\"DV^IH^,=$\nMNO\"=KH(_T_4X?%6B+J5A=7]N+#[7$)9@9520B5K53%-Y;O'&60^8JJCQJL'A\nM[X9>/_'D-M):3021W=¥EK'8G4;>PAEOO,6*V@W7#J)II9I#'$JEG=HIV`58F\nM(Z&DURQ2^XW3<EJD5[)?%&GW#6NJVXM[&\"W=94.JKI¥2QJ4;R[V5/F*L4=V1\nM`)'=@6P7;/JGPF¥\"V'C:PU#[5K(M=-TJVDNQI]II<]II$]P$S$)&R)+E<@EI\nM)6C0+$>3¥J-A%.348[_?^*&_<7],]L¥0S>%O!=GHEW¥.5N-3T%-4-K?6ID1+\nMB^N#%<NL]G)':JL$X!E1VM_-427\",SRR!)$¥WTD>*KS3C¥-;GX>BZN])-H[Q\nM:I?SZ3'`D/F+'#+`JC]Y/(¥(VX¥R5H¥!D521V24%%*;L_0Q]K[ZVOV_S)[SX\nM/_&BZ¥,:EIGCB[T3P-H;-!?WVDV<]NNJ75O+<Q02QR*A=;:W2&42\"%WC+&!!\nMM>3]XO$ZQXL¥7:UI^F:!J/B_4]5MM%L(M*L]'¥--(EK';1((Q&]U,,*I\"@OM\nM&UMISRS$<=2K&23B[)G1AX-MR?¥`P#X[NY[Z*Z62XLH(FE59%56(XQU&<_W3\nMGW/;I7K?PVM;#6G¥(:ZOB>[¥+7NGQ/H$%_!:\"X9]529FMD,DTD-LBO:7:!DE\nME19!#(@ZE214MV]O/]#-OF>J_K[CL[K7_%=C<6.DVJZ+JFKZS]ICTJWT\"YU.\nMSL]7BN4*37NF:=;*MM97,OG75I-Y?DO!_I`EM(9!*:J^);W0-)¥+IX9@¥4Z)\nMK\"WLJK=OIHBMK87¥43)BWM;9¥S0QFXD3^T)0INF2#8AMXV9]/?I:-HQDFD[_\nM`.1SMO'HVL)CP](O]LZV(]/FTU].:9F+22&06K+O:.V2/[*D9)21G$Y!`4$]\nM+-I_B+5KK_A*?B=-K¥FD64¥<LE['I0:]=2¥<:Q0Q2A$M8V`01$Q;%=BBY8E*\nMA¥]^9O¥`&WX;B7-'6WZ?B=3X2^)/P^¥'Z);:;#X>U6ZN++[/=&?4]%T_4)(Y\nM1JD]Z[HDTI¥E?+NB'>53YR)(,(C83>^#GQP¥*?\"J_P!.OKRX¥97,NE:=ID3+\nMIUKIMD$2\"XGO=2LY%NV(^S75S=\")Y83%*JP_)Y@=U=U)/1IZ=CIIN4HZ/7^O\nM0¥VL+R]GO;:VTW2(8[)I6CM]-T^SCOELU_>>7%`UPQ!8//)AV)¥KS-TA&U`.\nMPM;V\"QA@-¥RO?W-]'`)+IO[:O2PC?@*,PK(7=2@C`*E¥`J,YSH3E-WO9/^NO\nM^0ZDE:_8^O¥`]F;P%;:[XSF¥7ZGI%^FGVT8ETRWU^=9-4>)2\")[B*,A8PQ9`\nM![(%SN)/O7Q>¥&Z!JN@ZMXRGTR/^V+&S^TI?26KSM\"RX\"2,@(8O&.5`RP8=!\nMSG2=O^7;T7]:W.=.SYGN_.Y¥6^+/!VH:_<K8:)H.IZY>ZC*!;6^K1LRO&C*[\nM,EC;¥[3*(EV=\"!(!]VO*KW1M8UJXGTJ>/4;YEF,=U`;=])T^UF!VN)1M#9!'\nM*D!B1C!/)XJ]2,%SU']RNCU,)3GB*BI0UEV1¥AZHLUQI6F7ZIL4>;;C@Y+`[\nMF&3UP2\"<=-P_#U7P5JDOACX9-!!8-`TVA)XJM-3O-*&H6D&HV^JW*E5#JR)-\nM);H(HY2&567YD0-Y¥/7&25^5:?E^IQM<[M$XW1/&'B2PTS5O\"L'C'4='T76'\nM9[Z.WM5NS.[%`X8DK(HE5$¥W8X$WE()%?`VP0:,-8O%LM*¥3S71D1V7=ITT,\nMCJ%XPI#*HSM&=Y/S#&>!5QL[¥D;?UOZ?,QY==3J]`O=,TK19(-:¥.Z;J=W(E\nMU8:;<1ZO/9W%G.Z1C[3,J,8IHXQ*_DH0$9@YD,B1LM;TVC:-INIP6D-QI.JQ\nM+`AU?[%XEN=VH2(OF2@W#0QM&CL#L4¥+M`+/(T9)&FUTL_EK_7J8/1_U_P`$\nMR[^33]6NA<:=HMGHL>TV(6ROKB2WA_=\"(;!*[+&Y5L.Y,IRS$`;2*+VRMK0R\nMR:M)!'/M$<0BN$E7SEDVN0R$F1,\"3:5)SP>0PJ6TDDE^7X=?Q-*:36IN:3!=\nM2Z9:9>,Z>_EBXM[AY+6W90^YW.WYP1-M:1$XR.0K.M>B^`;_`%.T\"&T6X%I&\nMK1N+>-])MO*(5<;E_>X)VXDR&+`8.<9Y$E'F:U?]?UN=32ZGT[¥%/B\"WA5_M\nM.ER6$PDCDB¥FZA>W@C(D.UF+`^9(@54R3@DN0JC:!K>*?C'J[Z=;1:EXGC.G\nMZ9\"D8MM.>1X@J':`]PR@MG;@[0TC=B\"01U.H^6[>GG8PC0CS>]K?N>87G[1W\nMQ,U^Q3P3X`N)]#M4MH[>YNI8XXY%A0;!),T($LC$!3B21C(Q(*X)`YW6Y_%4\nMFC?8_#FI%-25E9+N[<[VD+JTDS%$(¥P¥[0!A/E`X45¥MQ!F24Z=&;:5]U&_X\nMH^[X2RF?U>MBJ4;3::C>_P#PQ¥.P0+/X>N;4!¥V<J7:%^H.\"CJW8#&XG'.0/\nM?.IX-U&+1?%&DWVIW¥R:;&¥MG?%I9`B:?<*¥%X-J-GRS%/*S*O+$D_,20?J>\nM=IOI]Y¥3)7LC)6U%N#%+=>;Y8^¥\"=KX)4,1@%<D9Q@=>V\"*T-*N8+'4+.^E4\nMG[-.DH4QLP94(.¥[2\"S+PX`(W$`>U7HU;4SE_+<[G0$U:#Q)<Z7X?DN;R_%V\nM3%;-!'=FXFD#%9?*D4B>8I*K`$$GYB>5)/H%A¥.-(OM1L/`(L_$.G:C':-<:\nMDLL&FVQ68QB8JMQ)<1Q111JXQ-*R&-$<[3(P5$G?6_RL9Q6O^1W`D¥47:/XT\nM¥7Z;XEN?\"FERMI>@W6G>']-T^-G:4[(;,E9(H4D$!:66W2X(92\"S,YD?RN[T\nMO2],NKC[!`UH6*7$65420Q3)E;>20J&+(@92W¥1+'H:<OAO;7S_JQI#5O4O:\nM;\"OV%=1M)M266VGBBEDA$4:)AA.TJ9^]<A/)88!4\")0^1T[WP1>7]L-0T?2W\nMN,ZE^YNXS>+<RR1HR2*LI^Z%62.-]H^52JGN,^<KQ3:L=ZI2J2C\",;WVZG9>\nM$]:GU>YF:VNQ>Z?I[NC7_P!H,HD<_P\"J2(JOEA\"Y\"CY]^T,0%^4FQXM¥=KX3\nMMIHKZY¥)6-G+'Y6-4^>Z\"L#YGEVY!\"MM<@,JEOFSN4Y->+B,SA',*=&;;CO:\nMU[]ME>Q[V'RJ<LLJ8F%E)NS;:5DM[7ZGAU_¥5_#?AN\"2+P]?:O?6LE].`EL_\nM]DVY154J7!$KF0^80<``*O!!;`X#Q%¥<?'^JN;:W¥3WNG6X\"+Y5G*1D#*[C*\nM^Z4L003AP,@'`.:]B>2X/$5(UZT+RWT;_+J>7A,_S+!T?8X>LXQ[;G%Z`M_<\nM*;.UC@BCN8S`SW08@`@CY47YMW4CKG.,9J&&TO6B5)9($.2I0)N.<8Y/KG]:\nMZWR_\">6DUNS1MM'O+E28(Y;CRXRTFR,9C3<JEC@=,LH!/<CUKI=/¥!:Y<6RW\nM0;2HMURT/V5]1MX[@,C!9)#;%O-BCBSO>5E\")&&?<51RND6HVO¥`B39]6;NB\nMV.M:->:3KUUJEBUQ;G[1$E];_:E@57S#*¥<T1BNX7&¥JJ^:I$9WC&T'J[72[\nM\"PT:R¥.)HVBS&SN#<ZI>_P!GZBES:MO¥F**[8C$:1[QC8F=¥Q!9I*ER2T2)C\nM3ENSHM/¥,V^I:?/K[^-_#RVVB`V&G:5+J5W#?7A¥D3O%96BH¥EM`6>0M(WE0\nMJSD;AN-8GBC0[?38M*U.:QL;)M?,D-E#;ZA$T;08C,$A221GC0DR[IYFVG(R\nM5*L#C6K<L?>>IK2BY:):?@6=>TKPWX4LM)BO-;TW6%D0QWR:;JUMYGV9F+20\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.25.msg",
    "content": "Return-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA24448> for nsb; Sat, 18 Jan 92 01:20:08 EST\nReceived: from joyce.cs.su.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA17087> for nsb@greenbush; Sat, 18 Jan 92 01:20:04 EST\nMessage-Id: <9201180620.AA17087@thumper.bellcore.com>\nDate: 18 Jan 1992 17:19 (Saturday)\nFrom: bob@cs.su.oz.au (Bob Kummerfeld)\nTo: nsb@thumper.bellcore.com\nSubject: another Hebrew test\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"partsep28042\"\n\n\n--partsep28042\nContent-type:  text/plain\n\nThe next part of the message is the last few verses of Bereshit.\n\nBob\n\n\n--partsep28042\nContent-type:  text/plain; charset=iso-8859-8\nContent-Transfer-Encoding: base64\n\n4fjg5SDt6fD5IPLh+SDl6ennIOnw+SDh9/LpIOnu6SDp5OnlIOTw+SDk+PnyIPLh+SDt6fj2\n7iD1+ODhIOH38ukg6efp5SAyOCA0NyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOuTw+SD64O7lIO3p8gog6unw\n6fLhIO/nIOn64PbuIODwIO3gIOXsIPju4OnlIPPx5ensIOXw4ewg4Pj36eUg+uXu7CDs4Pj5\n6SDp7ukg5eH49+nlIDI5IDQ3IDEKICAgICAgICAgICAgICAgICAgOu3p+Pbu4SDp8Pjh9/og\n4PAg7OAg+u7g5SDj8ecg6ePu8iD66fny5SDp6/jpIPrn+iDq4+kg4PAg7en5CiAgIDrq+OHj\n6yDk+fLgIOnr8OAg+O7g6eUg7fr44ffhIOnw+vjh9+Ug7en49u7uIOnw+uD58OUg6frh4CDt\n8iDp+uHr+eUgMzAgNDcgMQogICAgICAgICAgICAgICAgICAgUCA65Oju5CD54Pgg7PIg7OD4\n+ekg5ef6+enlIOXsIPLh+enlIOnsIOTy4fnkIPju4OnlIDMxIDQ3IDEK\n\n--partsep28042--\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.26.msg",
    "content": "Return-Path: <dag%gorgon.UUCP@cs.wisc.edu>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA17171> for nsb; Sun, 7 Jun 92 16:17:25 EDT\nReceived: from spool.cs.wisc.edu by thumper.bellcore.com (4.1/4.7)\n\tid <AA11873> for nsb@greenbush; Sun, 7 Jun 92 16:17:09 EDT\nReceived: from gorgon.UUCP by spool.cs.wisc.edu; Sun, 7 Jun 92 15:16:14 -0500\nReceived: by gorgon.uucp (/¥=-/¥ Smail3.1.18.1 #18.1)\n\tid <m0luSVj-0000UWC@gorgon.uucp>; Sun, 7 Jun 92 14:02 CDT\nMessage-Id: <m0luSVj-0000UWC@gorgon.uucp>\nDate: Sun, 7 Jun 92 14:02 CDT\nFrom: dag%gorgon.UUCP@cs.wisc.edu (Daniel A. Glasser)\nTo: nsb@thumper.bellcore.com\nSubject:  makeitso.gif\nCc: \nMime-Version: 1.0\nContent-Type:  image/gif\nContent-Transfer-Encoding:  base64\n\n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\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.27.msg",
    "content": "Return-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA21993> for nsb; Mon, 8 Jun 92 14:45:42 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA21726> for nsb@greenbush; Mon, 8 Jun 92 14:45:35 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA20284; Tue, 9 Jun 92 03:45:40 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA02052; Tue, 9 Jun 92 03:45:27 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA11392; Tue, 9 Jun 92 03:45:24 JST\nDate: Tue, 9 Jun 92 03:45:24 JST\nReturn-Path: <ysato@etl.go.jp>\nTo: nsb@thumper.bellcore.com\nCc: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?= )\nSubject: Re: How to see Japanese characters (Re: malformed message)\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nOrganization: Electrotechnical Laboratory, Tsukuba Science City\nMessage-Id: <gCvvx.ysato@etl.go.jp>\nContent-Type: multipart/mixed; boundary=\"==\"\nReferences: \n\t<geADt3q0M2Yt4hhNRb@thumper.bellcore.com> \n\t<gCG7l.ysato@etl.go.jp> \n\t<keAshCG0M2Yt5A32xi@thumper.bellcore.com>\nMIME-Version: 1.0\n\n--==\n\nIn message <keAshCG0M2Yt5A32xi@thumper.bellcore.com> on 06/09/92(01:31:10)\nyou Nathaniel Borenstein <nsb@thumper.bellcore.com> wrote:\n |This is using vanilla metamail, with MM_CHARSET set to iso-2022-jp.  Any\n |idea what's wrong?  I'd love to actually see your name properly...  --\n |Nathaniel\n\nISO-2022-JP does not correspond to any single character set in X,\nbut is a sum of US-ASCII and Japanese JIS.\nSo you must specify two font sets for kterm, like this;\n\n   kterm -fn iso8859/1-font-name -fk kanji-font-name\n\nI our site, following kanji-font is available:\n\n% xlsfonts | grep jis\n-jis-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0\n-jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0\n-jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0\n-jis-fixed-medium-r-normal--24-170-100-100-c-240-jisx0208.1983-0\n-jis-fixed-medium-r-normal--24-230-75-75-c-240-jisx0208.1983-0\n-misc-fixed-medium-r-normal--0-0-75-75-c-0-jisx0201.1976-0\n-misc-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0\n-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0\n-misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0\n-sony-fixed-medium-r-normal--0-0-100-100-c-0-jisx0201.1976-0\n-sony-fixed-medium-r-normal--16-120-100-100-c-80-jisx0201.1976-0\n-sony-fixed-medium-r-normal--16-150-75-75-c-80-jisx0201.1976-0\n-sony-fixed-medium-r-normal--24-170-100-100-c-120-jisx0201.1976-0\n-sony-fixed-medium-r-normal--24-230-75-75-c-120-jisx0201.1976-0\n\nIn our site, we can use kterm like this: \n\n   kterm -fk -misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0\n\nOf cource, kanji font names are usually aliased to shorter names.\nUnfortunately, I don't know which fonts are public and available for you.\nI enclosed the picture shows how README.jp looks like using kterm.\n\n--\nYutaka Sato <ysato@etl.go.jp>\nInformation Base Section\nELECTROTECHNICAL LABORATORY\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan\n\n--==\nContent-type: image/gif\nContent-transfer-encoding: base64\nContent-description: README.jp shown in kterm\n\n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\nW2cnfaoGUAAAOw==\n\n--==--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.28.msg",
    "content": "Return-Path: <oester@vnet.ibm.com>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA22720> for nsb; Mon, 8 Jun 92 15:59:26 EDT\nReceived: from vnet.ibm.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA02268> for nsb@greenbush; Mon, 8 Jun 92 15:58:59 EDT\nReceived: from RCHLAND by vnet.ibm.com (IBM VM SMTP V2R2) with BSMTP id 2847;\n   Mon, 08 Jun 92 15:58:30 EDT\nReply-To: \"Bob Oesterlin\" <oester@vnet.ibm.com>\nReceived: by po1.rchland.ibm.com (5.51/4.7) id <AA02602> for nsb@thumper.bellcore.com; Mon, 8 Jun 92 14:51:36 CDT\nReceived: via switchmail; Mon,  8 Jun 1992 14:51:35 -0500 (CDT)\nReceived: from terminator.rchland.ibm.com via qmail\n          ID </afs/rchland.ibm.com/service/mailqs/q001/QF.4eAvcfc91JbyQegH1e>;\n          Mon,  8 Jun 1992 14:51:08 -0500 (CDT)\nReceived: from terminator.rchland.ibm.com via qmail\n          ID </afs/rchland.ibm.com/usr1/oester/.Outgoing/QF.ceAvcbY91Jby0wDlR6>;\n          Mon,  8 Jun 1992 14:51:03 -0500 (CDT)\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.terminator.rchland.ibm.com.rs.aix32\n          via MS.5.6.terminator.rchland.ibm.com.rs_aix32;\n          Mon,  8 Jun 1992 14:51:02 -0500 (CDT)\nMessage-Id: <seAvcao91JbyQwDlE=@rchland.ibm.com>\nDate: Mon,  8 Jun 1992 14:51:02 -0500 (CDT)\nFrom: Bob Oesterlin <oester+@rchland.ibm.com>\nX-Andrew-Message-Size: 388+1\nContent-Type: X-BE2; 12\nIf-Type-Unsupported: send\nTo: nsb@thumper.bellcore.com\nSubject: /usr/sbin/sfplay\nMIME-Version: 1.0\n\n¥begindata{text,538724776}\n¥textdsversion{12}\n¥template{messages}\nI notice this in the new showaudio... what system type does it run on? I'm\nlooking for something that runs a little better on the  RS/6000 than my local\nhack....\n\n\nHere is some audio:\n\n\n¥begindata{mailobj,539461880}\nContent-type: audio/basic\nContent-Description: Bundle of Kicks\nContent-Transfer-Encoding: base64\n\nLnNuZAAAABgAATJAAAAAAQAAH0AAAAAB////////fXx8fX18fH18fX18fH19fH19fX19\nfXZvcHR2c3R5eXl2cXZ5cHB2dHN5eXN6bFtXV1RWW1ZZc3RdXmhfXltQW/1eUeZRN21p\nN01ULTFMMC0+PjtATe1gPj9TTTg0OT1FPDQ/eUo/X0g7SU1ARVNNT3BJSFs+M0lcPUVL\nP/1aMEXGPDbRSDZdQjZxXjNR2T5DTUBFPDZLZT9F2d7cZTdK2T40QkNG0W9I4/xLTT43\nPj80PGxlWWVmbtt2SG/G5Uzf0E9ieklXeUM9dlc7Vt5QV97KVjFC90M7Pj9zv1E/ztlI\nU006QkU4SlxKc9faw8XGxuj90VFFTj5Ibz1IvvFNvszlwzMuvuAuer7uymVJvk8s0Mkq\nM0UxTVAmQ6tbUaqwu63aX8Y0K0k0K0BCQ767RturudqxsL6/0XraPis0NyQjQ+gvKuK2\n3s+ura6/6LxdKj/dNzM5NrzMHjOqQjGttrajs62g2zu2PiE3KBotPy1Fwr6usL+wsGn0\ns8k+fck2ICvPQCdUscrQtKinxs+s4CczOSkqJDqguTCnoz/6aDRfMyy0xSpIs+hmt8/Z\nuNTPt3Nsu143QDEjJzk3QruorNq/qMM468ZfOCg20TEzq69LvKquSCBaqykkt8VA3sW0\nvTb9rV40+U0+u8wxSMVZX8XGvbO2r6/PVvw3IR8mLy8x4LfIvbe+r6razrkpH0w8JDy2\npKSxqKDARs88IBwdKi0qVK2vrKS4w66tsTgjRjsfMNY2P6+ppKGnoas0TdMbGS0mJzk7\nTci/tpuVUDufbhokLyovPLOgqaeapObCzSopJCAnJ0XsLTippN7Koa0+063rLT3PPSc6\nts9Ivq3NQ9zTPE7IPDjLTR1DnzEqmp9Fram00yRAtBocqkgktrG9uWK+Sym2pCEZr7sd\nQqZ8N76eoVu8ntwhWc4hHTziKi+7TUidwCagnCk7p0snML6wOVagrkbAp7cnNL0tIzw0\nPKneJsU6TZdGI5ezIJ+xKMgkK78ZPp0pRZ3lSUpLpDMdp0gdoLkdoaYsoaTepjcsqicd\nwC8dOOndPK+aOj+YSh2fpzleJrGdGy6bJiOov8zGV6RxGtTMMSggs60eTZdeQJvCxpwx\nLKohG74+MbFKz7EqPp22GDuhKhq7oDE0mq4o37GnPh2qoR5UoSwpMybIwCe7o8VPzp6q\nJ76bKjivIci2FcWdHfyeMT47H622GFCnKyatmr47nZwvv7Yf174muS8noSwcqjMdoa0o\nvq3eQkmu1j6tQk2oKSue6y2hbi2mSBvLNx6vuS+uuzanpj22m0ohrb8cMahGQqhTKl0v\nV9cd655F46gtKrfGL/SszVO0yki51zaxriQ4ux4x2x1Wpi2wnC87qXnPuTFUrUgqrZ5N\nPaStKjvgJDHvN9dALqnJK7p8OKapPki2ujRItF5Twj7tvSorrs0stMYtvF4hz04gt6NM\nz7pNrrwt1Kc9INOuKyqwuFawxT/TPkO+LTi2SUauPy3GtHdMvrBTY79Tz8A9vKdFMbFN\nLcs+M7PXNKq/J0W+UWM/McXJL0amrjbJo88v91Yw9HZbvD/mrz88yDdDtFkwTchmO2XD\nTuvIQs7MLkqtV0Oq1km0RjPAMSyxvDl0bT+/czS+tjsxvrgxQKzD/7zNS2NF788/3L1K\n6MwwS7jLSOC+yENeb0PRW0y0vTxbvjQ/w1RXu0XXsDQ4vddf1E7mt1o3u65DQrDKMFpe\nNk/JU9bbULdZM+lOPsDPQkbL1klZyN9p10h8yDw8wt07yetF1007xWg2t7ZT3d1axVs7\nzb0/N8jAQk60zGjI4kxsTE7eSXzFaNnGQFTI11Ppytled+VczeJGyMhDSs88RtdF7b5K\nz7NAQ8b99N9DWcpNP8u2Y0i+zzlNUDxW2V7W2VvGZUrlSUjF7VNezdRO88XtXtxNVtY+\nQM78S8XaTdNpStFiQsLFTvHoV9vvSN3FU07KxlFRwuNgz95Pet/u017WyF3zyElR09Fr\nbNb0TU5eVnFxTdTNTkzaS0boS1fKU1e+UT7X3m3QWWLGaUPxyl1Gd9NMRVxQVuPR38/i\nzc9i7fZI285RXePbXl7e4lFXVFDbaErey1vmz1f56E7rylvWvNpz5l7240tizPRLWs96\nSOLN8dbX9+7jZehpWu1jVtp0RXzjbVZp41dKZWNb81Nrzt5T1s1RfOtZ2+5Q2ddKXN5m\nbGBLb9tXYs3Kb1/T3kJWYlHp1tnR4u3TXFlwVFPZ3F321nNdZehtXulZ7NFl893jX+z5\nWe9pT9/9UdHRYNvtad9oTm/oV0923mlR1N1m3Gtbbmxjb1xXa1dWeVFZ6Nb26dFzZV9b\nYuj0aMvW9N/eYk1lcFnf7WXQ5Vrb2Wzgd3Ha81vm3uNba95iTuhgYM9w/dle8WlpW+hX\netn/eu3xcOVv/HPdaGDO23Tm1l5R41NNa05r7/npzuBwZW9fc1Ni6+hXY/HwXlT67Xbt\nTd/WSeLfdF5X6WnwU1nf82VffN7vTW/Gd0rWylBmWetpRuN0z/95w9RNeuXrT0ne6VtO\n3dBsTOjKVE7c3lHX3WDNTezX+fzi3+Xb19dda/DoUVnpy0hbv+VK195ZY05jUVZCbdFN\nZtHZaE9at2wsVrdJPsW+xmXZs8o50cpFS0L8VDpO4ltaz9Tb2szTZU2zwiZKqzY0s8Ze\nxcqzxTy7wDtGXj00NDtDPk5ZXrCzSMW0VlHWu0Am17gsXrD0wLy+tNZGxVkvVEovPD87\nbzs5pqszs6RFRcVKTXZQPk3JRVuxz1u0ufnbfcrGLTmwOSrAXzE7S6u7K7GpME+8RkNg\nw7AvN6FKJKq3LL27W7gtLqc2KapaL7ZCMFxAwEw4r9kxtsYzxrzDtDHfnysnoFAfu7E4\nLUinzyytpzFDsTwmKlu8JjOgVCqmsTu5uqqeKD6cKB2nPB60uzZOwLTPQrawNFC3MCc2\nPloqM6Z6LaSnMduhqfc0w60mI6x8HcOjOyyzpls2rKwrObE9JCQ2uzgopK0rrqM8a6Ss\nXD7KuSoqtkAkt60/SrisZi20sSM5qC8dTf1DRkCstiyxpC08n60qRqPeIcKpKi+suF88\naao+KKrrH7q7IDDWPmY+fK09PqheLq2kaTCupCstod8du6M3QMj2yC46qi0mqd8gRrn6\nLzqq8CazqjA+rKpeO6aqJ9mhKyqn5SzsSev6L7i7J8OrLjPaylsmaKoqLJ/IJq2hwtnC\npr4muKofMadCLlvZuzAzp0kjsbcuQErGUR/Nsx9ToDQ2oLDAvtqk6CSouRrjqyo2Ws67\nK1egLyaj1CD8cUY9JLu0H8OcLz6drbzbY6FOHai0GkupNjdwtLQt0aMqK6NKIfBOTDYm\nts8fsKEq65+xxca/uD07sEgmxrk+ONetVDSotifPrTQxPkrZKy2xPyeurjvKp6zZyqPp\nJqy4HUyzMEhGVq0xN55JJqa6J1B8OzQ0aDwp3r07cb6xsU2sozu9qi9Tyi7XRiDCviS+\nrDPKrd7MUUzIKS2vKB2wTyTDwNGz3ayhQrydXTbCzE0tNtcwMbTiOLS0wLdRv7QsTb8j\nRb0kPtYqwrQxr6ZFqqFdvrNfwjYnvi0drksfrLczrcVXqz9GrissvTAuSDNdcz6/y1qr\ntPSttsC3WcbKNswzI7tGJ7ddL7DgQqdpPqjOOtE4NtYrM7sqOqo+RarJ0LHOur9IusYz\nVl5RQiZDzS1LuEDQrm23s0+0wEXDN0qtJy2vLzaxPtatN7akONOtaMnrL8pGJMrMKVvM\nSNP0ZrvWybflurTxwtk7v2sqWUYrd0wvzl9AwO39vm2+0DC7vi3bzDDx3jG3yy+zsUW7\nvtesylupdje3Tzd5MzNNLjNDMFl3NtvAVr3sQLfRP7vpQ7rLTbnbabzgy8zgrbs3trc0\nz9cx60Aqw00pWUw0Szs5wzs7sWBIu+jXuOjGtMi7v/S7vWLJzEDPbzvdUT7AU0y73kbb\nZlDlPXw/LMrWLczFN9rRTLPNUK+5ab7I68ZNSMU5NNs/OE0+QGg7SPRiv9HzvslUzVlJ\nyE5pvlBbvFnp3kjgyknccM+xTUW2UELPV0ZlOk7UN0XNTWNcTMDFSbi2abq728LTWspu\nU104VNRFTM1MQtBFacpK18JA5tc/W00+b09ZzUXFsUrmu13010/J00LTyFP2c1fPTz/F\nbT/MY0PeSUjvRUr2Sc3USOPGZdvJbNDMaNFtRelmSV5ITd9r6c/PsNBKu89J7VRKXT9C\n2khK42PUyGnPvXHGu/3WyEho3UVXYENZQ1nD1k/d1ubXduzeWfR8TFdQP15rTXZp/ddA\n0L5GXM9PT1FKzcpN0b95Xlpe+mtDW1dL6XRP3uz94+3byHnGzXzZ8WDs/VHx7WvN6FvN\n0GbgdtfbZmntXshjQOL3SFlcW9dXTczfXPTm7uNUV+bscdHv3s3eXm1c81xJY19Ma1NX\n+lFNc3D/61f0zXdNaHN8U1Te0N7XYmu+bVbP3+DTXt/FWVrgb2NURmbgU0/5W97bVmbg\naVtKS+trUdff0c7p1sXa7d3ezdNRZs3rWVP33GVWb9/P10hd201OWVTe9lDj3GNwXnTW\nZVDl2ezP+WPU4lZZU2B2SEZoTUtW/9fdc9nP3F1KTWxbSUtl1/9b0cjT1HxbzW1Fa2VT\n62X3xtPgy978bE1X6Vxc42/f0WZa8fTmembNxdPKzMztUF7sWlto5cjPZunN3lxTaPNP\nSlRZaPdNX9tZYvxTeXRNYu9X8O5u199Red5c8HlQ9+tRV1tX8GVP8P1lY2D0dlNb9u9w\nW1vc2mNb6NPfY9bK1+JoT3pmRmXiedHT3snPa+liVGBWU9va/dbb5tHoW3Z6ZWVUZdrw\n7d7a5lZWc2BXV2vZ12tt6fZXSU1oUE126NvK3+3L62PlaG3eXlvgZWj0c+bR6ffT4v/v\nV1p9XlZmbOPiXmj8XltZbvBrbOPe6WJd//FgVmLm3mNt2+t972Bj3l9XfV5f9F9s2/xt\n5f3w6Ghz1t954/Dt6F9Xa3F09PfZz+Dg5vFpU1RjYl9s49blXV1oXU5KVGZWWf307d5p\nZt5rYPNfY/RZX+hz7+7839twbd7o6eN66Nz6fOPj2+Bt9vFrZWjw6Pzi0drTdGbwaFZN\nXWXvaPnZ6Xl5XF98VF3tbu7d9+bgaF9bW19cWvze/Xfu8ePwZm19aGlmaevt/fr6+WVi\nd31dZXx03lRKXmtUYmhj8WZx2eXZvlk+yuBA69Bwa1xu71lb4+/p1OPgzNT27VdLaWlW\nY+LT5XPT0V5e3Gtb13RNzctI7cpXSmn56c/Xys5UX3o+PtNxPs++Xt/D0NfsX1tpXj5W\n/DFbuEJMw/dPTFbpVF3KvMI3S7BZO7i+S+vRQj9FPld98crF383XQ07vTl7G7VfLYDxT\nUT5Xzc27uFdcu8w/2bg7NNFWOEBr4ElPwspTSL+sPjSw0Tm/vV7O3V7NPjFWrsgg655O\nRae2RT9T7C8qxs8x27BlPls/SM5GPrnGRbOxRmXGUz844qcrHKGqIcudrk7OtkMfLmAv\nM8OwurneL7OnIyuvOS+7vdnWzblPRbQmG6rIJ6Od3bSoXDQsJCovOL22wK6tMTuc6xfG\npyEprLdOu6enxhompyYdpKSutlOrwxow9h0rsMZwuKi9LrudJx2sNx2+vVOmnZ8zIKpD\nGb2mXrecvxs+uh0d1LRG3qavMTRGqrga154nJMaqsb2mLR2pPx6rqcint9C+GhW2MBqo\np1+hqDgsHUikISuZ6SSqs0OZqBW2oBU6oEi+qLiq3iodHj4qMKabp3fQPhlZqxo4nDst\nrqeaShmenxXumR0snUY9utmzIRikzx2knD/DvRUmmioamqoexp6hORqmnSBXm742WS8s\nRTu+uhsvmkw0na88RhwopiEZmrcZqZWjLSGetxmwlyg3mmMcMDstvtckrptU46fQLBsd\npLEXRaEjKJWeH7GULCenoaooN6geF8U0Ka3etpTRLpzWGhwdq7EbrKEZ9pE3HZegHaie\nKqe9GEwtGuk7Rpq7PJyhKsKkIRE7qSAmn9QcsZwnPJW2O52uOLY5FyY0IzvOp5fQSZpa\n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\nfSehyR+f0x2k1h2t0R67wCexvDS2w95g0bw2XrNAULvF9muxQ0K0NzHGOjfrQF7lykhO\ntDNKrSn9sDBvrc05pr0qpHMnqEIosV4qu80qv08ztDBjvS6x3z6t7km6uUVgqj5LpzNG\nrDM6uzM9fDg3Xcsw468ot64msLQtxao+XaA5XZ4xXqYtPa8uLbYuOMIvWdxGdlnFTEqz\nS163esbTwNZbtEtKuUBewjrb0z1iQElKNMk+PLRWSK3NNKrZLalWLa1RMa/AM7OxMLjF\nMdFZMUBuODbPYDbMyjzNytrzfbY8bK4x1LM8vrtm0b7IRsrNMd7iLWjUND6zOjSoNDmk\nNEOoPDapXy2o3zOw1z/Quj1GrzszrUgtsU8vw1Q5YNdGQr5NSrs/+bhDa75TTL7UPrm9\nQr66VEq6US22QiewQC2v6S+2wC27xjTA0U3TutY9rr4urbgttLw02705PrdCNrZDMbQ7\nLbtNLcXGLciwL8mvP+WxyDq/tCzWrSpZqy83qj4tqkwws30+yMI8Sq83LKs4J6pOKq+8\nM7qqOdGsMNG5Lc3DL1q7OD6sSjioZjGw3izeyCxGxS8+vkVLtsBdtLFguLboV0u/Oi+z\nPSqt2yewsyrIqzRCrzcuvDY00S1NzS/esEjwpM1CoL0wqLEqMa82HbfdIMypPU6jxUqt\nyELUVDY8SjssQ0styMtCrq7Cr6q/yrhlTszmLCBCZSEzqEotn6BGrJ3bT6w4KUYsJyEs\nOCpGvMW+np20p6j9S147LTYuL9cmHarXIKukOrCbtq2kSGC2Jhk0NyAfQ8Us5Zur2Z2g\nPr24JjdtIytPRSxDpEUdtqQtNp2qv5qkv6a3JjNuFxy+IRyqyiinndevo1y+tis6tkMe\nMbczIcC4LrShJiadrSu8q9mhnzw9uL0hFUWwIx+98UOquE+qqEnIuyw0sC0fpLYkyMog\nNqdXy6OtuTYhMK+uRcahnaazcCAqtyoRGi1AaE3loJWdbFOjZRQqVho+pCw2o+1Xo7bf\noLMkz8MdI8pcvpigYK6oayoXH8pLHRc0q7y8q7itmqoZJqs+OL5XuaQ7HTeuySfjma0r\n1K9COjQo16Ceo7s3RaveGSlAGyZCJi2mpLOcnaS2IxtArOkqSrtXQzogJ6GdNzbbLzOw\npLvRSzDRnJdGHc20T0kmGyEuO17Urp2fvrugWxgnMDGpnXotPSQkO2OspNssQ7djxpqf\nOUBKJE2ens5Uwz8oJiEeJlQ5M52PpDjIu9e4RR4mZa22NCMsPzaslatebioj6aSalbgj\nHiFgo5qpO97GHxw+JhdUsCQ+mJ1J0anA3rwzHk6hQhgz1y5UtOtjs8I6ME2olZWzKBgX\nT6Sgn65GKx0XL2koPrlFQqCVsEWtrTE+zRwbrKYpKNk8NK6uPM6qUS2ump+dpycVGjaw\noJyrPyofFy2040hFOTfUnZ6+tKFWGyoqHc2bux0vtysrpLsks50xKqeen5vGGxUnt6Sd\nnWYaJzAb9Kc0J0ZoQK6bo6ymrSoUGDHFqaBuHCc9I1GfyVShripLn52epC8UF0qtqpyk\nKSFWKR/R1iYqyGBIoJijraZdFRU5yLimxR4dNj0+rqCkts87I0Kkm5mrIBEeu6qjnV8a\nNrkhHeBFIUOrQk2fm56griMRIba6vrMsGjbPL1ahn67RNyY7qJ2aoTAVFzupp6qrRS1P\nKhckt7tITzExqpqYnbAwGi2q1x8zxT83MCEuoJSjPysqPqacrayqJxIZeaauqKw3MToh\nI+yx9DsrJvmfmp2nr/ctLCwdJ7bZJCQqTZ6RnykqrbDvXEPFn6EuEhflmp52Iymtrx8h\nrapALCEfTp+XnaqvuUgmJzzwTyQcITnApJ+vvKGgOiu6qam2LRcVO6GtOy3en6QmFD6a\nozgdFSefnUlOpp+3Ky/NsLctGxws+dfJppuhtmXRp6CuVjEkJiceHs6dtC1Nu8i4pKo0\nGxosvVknUJ2Uuh45tKSjNBgeW1QrNLSco/NDw6Sdo8pCQjQjHSEwytstKVSroaGvva+3\nIxUusds3TV42Ta2mp+YpSrs9ICC+na48KkOjlZ3Pxae9KBsnW9xGJx0nW7u7uK2pq7o+\nQ7OzRScfJDs/M1Sknt0tUMZb7rPWLTBAvae3xqudnzkdL7On8B8XI9NdLUimnrReVu2w\nqsA/LCktLCsuQrjDNzq8pqavxei5vSkhxanK18hFN2WxpLE7PVBNQiQjt6G9OCw+ppqw\nRtt8XjQaJr5GNzsmM7+7tqyzuKizNki8zu0uHzNmQm3DrqCtLT6zNj6qQi1FL8WoVPq3\nsaxUISa0rEo2Hx60yizWr6ak0Eq6yLauMCtAKDHQLzunwDnW/Oufqiq+ty9JNCe6qzrb\nsS8/p7vDxSo31EomJ7TAsKYnN56qra8uN8o2Gy65Q0a9QCutpzmxpzTfpywquT5tXSMq\nwrFDwKfJt8UrTT4xwt7oTTi5rb666OymRiHUOz2nUB07127J1F+3oNYqtsg6sbsmL7wn\nLqguN507Pq0vvqNDLrDCKHnjMKzuM6otM6Mxw6MhPKoxP0Y3urDAPvFTw6FULdw8RUok\nVKs8WqozPaveSbTMPs7INlS0U81AKt7IUEXDvOm2PyynOCqcPSamMy2evia7rU055T4x\nsLtANzP6tDtesVqqyCmsyjatfChKxS02qzA5njRDpzO9pEUvs88hysMjraofrqYav6Ah\nuq8fQ6pAH7CqKau8JsOr+XDFKU2rJy+zzji9tySssymjxSuq4y3TzDhQsS40t3leV7TT\nSK02KahQKafRJ83IPM7FWUXIrSo7rSpIoScppjtAp885r7MrV7Y0xt0tulEwuL4vwKYq\n+aQmTaA5I6qzGrGrGqygHvedJjihKlOzIdOvJL6tLaynI7uxIafDHbO4IbexIaqvJ61o\nMKxjO6/fL7TeKbDPLsC4KjyjQyajzCSgQyCgViSpySa45S+r2ySqvSStSiOkTDesLS+k\nvCGmqh2nqxeuqR5Xqis5pi/ZsS+sPjSnODqo0x+rqxqksBWfphWpoRetoBWtnRW/mhs+\nmh55lxrWpxq0nx0vnCQzny44plkryLo4Y602P63rM0KxTy25wC7iozEzmys0mx00micp\nnUYmrL0turAmb6YqRqkj168u7bEvQp4oZaQnRbEwM6tILKveKafFNM/Jti1buzxMvr4t\nzakjyaAavp0ZUZsgOZ4pZacoc7A991vWbL9fObAvxr862fpuz+07sXQ2sTk6pzo7qjcx\nsbkjd6YkYqQuLKb5Jqe4HKeuFaajFbyfHcCmIMCoI8W0L8a4KcipKrzDNtO2Pc7ZNrE/\nObZNTrBGRrNNWbw+N6wzLqZFKqu7J7avH82hG82dGU+aHzuhKkaqK0iqM+a7P/mxPVfD\nQLtNRspeOrBGPas36LRA/bFWTsJFSLxGLKxmKa29Lb6zLWmrKzmhKzOcNyijQCevRSiv\naSiq4CO5tim5sFO5wrCtTU+5Kjv2Jzs7Mz2zwx5UpEAzraO2Y6aaWTen9x1CyB0t1yHO\nbiybvhqknh02m0g7p7equjfUvxorwCEs7j90rJ/UJKimIUOgXzPZo50nJqZlEimjKhun\noTOxlzEjn+sayrc7tjhNlUgXqqwXK6otOdbjpJpNKqS3HS2p3yfISWCYNBymYhdIoz4o\nZaaYqB/QmiEXprYYS64gs5oeLJ8qIK6+t7Aks49rFaqdGhugrB82v7upSBzIsRwrncPe\nozGolB8dm7ESJ5zMGzq7r6scJp89Gq+aPrqjLaiaGh6c5hIqq7Q+HzuXnhwnm70ZPpq5\nNsC+nqEYJpteETSvVL4hKpSkGTCZzhlQmro4XrucuBQxnSwVRX3NpiQskqEaMJq7HCer\nnMwjxZnNFUKdLRhgxlbOJOKSwBm2mi4qbq+cPSCqnCsSvaEgHFTGvjMmnpQtKJ2tKT4z\nvJ0nHaieLxfoqDcdKqyvJC6Zmic5mqwtYHy2qiEqnrAdPq4+LR0sp+4eSZSmIMWXqzY3\nyqR0GlCgNCDa2UI7GDCdShs9m6YuTKSf7SqumzcXwp0pHMLGOUIj+aAuHaujNmivpp9D\nLaaeJhiwqh8eY75uLTSgqChQoLRIy9mrpCcnqakoHPy6MCEzsOkgQ5qtIc2buT/A07a0\nIzaj1x5AvDgrIDyrPx3blbYjsJu6P0zIrToew6osJ83jVD0hzaA6I82esznLqapPNq2n\nJxy0rh4kw1tJTTOtpykvo7Y0zreprTE8pq4cH61sHSvQwuI4zJ+9Lr6n10zb1Ke7JF+h\nyCAut1QrL9OxPCyrnT8sqalARvz9tzsptq4qLMtIMSsxtroqN56jLUimtz44Sr7bKECt\nWSpO2kZNLT6kvyp5oapDXLa3Sy7PrTghyqozKtfNTnE+zKdUMa6qUf29tro2MLSwJiC5\nvicwzcDJTVeqsDlmr9FAUVPCxik2rb8rLc3ZOjn9ttY3w6G+Lr+qXjpUWs1KK9auPzHN\n3j84OsC3ODSqpENDrbdKPEPU3y45uuY0T9N2XzhGrsYwXquzSFm+xkg377s+KtSzPjbR\nzmlvRcywSje2s010w8DWNzu7zSkxtNA0W8DAzkvxs9o43LrtU//ZvlowebhNL0bGeUVb\nxsNKQ7m2Oz26wkVNZnrjODjG1zRFyulPSNa22jjgrMk327bZSktrz0w2b8VORt3Kyu5L\nw7NWO9S52z9dyddGQs/OODbMzztD3NPZcVq/vkNGws1MW9nI7j5PwOgzPsPjQlzNwMhl\n473eQmbQ+VlW7cBzOWXFWzlA3ttXV82+7k3NvE89289ZT1fzylpDzcNOSt7g9llew8VQ\nV7zASU7R4FZITN7rQFDPaEti7NnXVvS80UVmxdRPU+XRZkZv0Eg5bdxGTPbdzc5uzb5j\nTdPXVlxp4NpNS8/UP0XT9E1f7tHL/W3G0FNv1+1pXV/U3kVTzOJKTuXdcV7szd5T+sxg\nRmnoX19gbNTzTfbUVkxjYm1rX9TMY1PRzlZX297r7XDe0WBT4+ZZXXfr311bz9tNVtvl\nVlNm8W5RXeBtTWnacF/55tfXcOPN+Vfz5mlub+3ebWPZ2lRU6/ZcZffe2XRj33xOVFpW\nV09U7m1NY9ttT1rr4v9p4tHpa93TfXbZ3d/Z9unP5XrU2n3r5uvd/HnW3l9913BTXmJc\nXlZX/XBXa+9rYF1caV1OY+1ZU2/ocV5r7eb8dODbd+/R2eDa297ZfFzpelZo5fDx7fzp\nfVZbblZKWm1cX3D94u5aYP1XUFxfYGBbaOxeWe/oaWD54Ob9fd7ebW3d4mZ66e3p8XDr\n3m7/2t7t5d/b3Xz64O9cY+j9aPfl5u39fOv5Xm3s7e705dvpYG35WlBXa2hdX3PzbF9p\nb15ZaG5oa2tw+XNcbXxcXnB58+90fX1mYGZoW2jo5uLf5ePlbmB9c2J26+Lf6fDtdF5j\na15bbejd297Z1+h38etteejm3d3l5eVxZW9tZWVufP92cXRmWVlfW1ZbZWhmXltbV09T\nWltfbPTr8Xb98G1eZf3w8enb1tvg3t/o9OPb3tvb3Nnd7enoeXZxbndxZWttX2VpaGlt\na2x2cGhoa2NbWlpaW1507e/r3+Lt7Ovs7/fr397l6On8bWhoZWl0bvrl6/bt+W1ta21z\naWBlY1tdXFdebWlrfXxp+nxRXvn562t00crR1vFlZV5UVF9gb/Hw5dva3t3e4uz6+XNt\na2JeW1dXWVtfaWx2fW1maWl3283Oyu88Ozg3ba2jp6y8SS8qKSoxNzo8Vryqo6SqvVM0\nLC0xOU3Gt7Oxvt1TSlbgvrTXLyomJlCmnZ2hrEsgGhshN8LGaNC/xriqrcBQMCo43MW8\nt7i+2TonJCtaq56do699LCEhLGatn6Y+JiAbKa6dnZymQB4YFRs9raGktMz0T95oLyEf\nISzMo5mXn8MuJiczU8Cpo6GjsTkgHR8ww6qkqLRaOy0mJCu/oJqap08kFxQjw6Ocn7Qw\nHh4u3dbKfTdWrqGfnqk/IRobKb6kn6CovDQhGxom0KOanKpAIxwdNKeqwrRRKS9MQOmk\npLaxvysdHx0mWbSjnaCsrcI6LigmKUPCq52cobTrMy03PEJD/cq3q7hZMSYmLUB8vbaw\nvjAuJx0wsJ+dnaNWJBoSGkmsoJqmYjEuL0zKSkA/Q76mnaGmty0eHiM7rqOgo6xiJx0c\nIVmnnZ2maycdHSR9oKOwvi4eITe+pJ2fqsAtGRcdJ8+np6qstrmwxjoqISAobaealZmq\nPiEbIz67qqeqts0+JyMnM+WxrrbXPDAkPrNKTuYwLc2qsKijwzAoIB0208mst05GTUXM\nrbCzvk8zN/zLt6qzVD4vL9awq629QCwqMDvsu7u7vWI4LC0vJmmepLdzKRwj3qSdnJ6t\nOxwSFyb0o5qgrb83M19RRltAMEC7q6Odob03HxkfPrCgnaO6NyAaHi7TqqGktzksIBoj\n3qOYm74mHBcdyJ2cm5y2JxkVGz6pnZ2rZj1Wxbu8SygjJjO+n5qan8gkGhkhY6adnaO6\nLx4aHCrIp6amp3wmHRkdeqGYmbsnIBobXaOenJqtLh0YHD6upKnPRk+/rKSsViofHSRX\np52anb4qHRohSqyfnaGxOx8ZHSpjqJ2coWYgGhUczaCYlaoqIBwXL6aenZqnNhwXGz+o\noKtrMV6xqqOoTSEdGh1app2ZnLkuHhodM7ahm5uo5iocGR06q5+bm70mHRgaW6OemJxg\nIR8cGjymn56dqj8hHSQ8Xk89ONCpoaCeqjofGxcdaKadmp23Lh4aHC67pJ2bn7wrHBca\nPqafm5rKIx8aGlSjn5qbyCYgIR0jWaednqaqsGApHRwfICjToJqbmqF0Ix0aHC+vnZub\npNcnGxgdMLCempqmPR8YFymtn5yYpjQhHRcf0aSempy7LCAfJyonO6ibnaSnqXogGhwa\nHUOnnZ+go74qHR0dI9mjnZudsTEeGh03rZ6bnbMuHxocRaaenZyuLR0cGiBRp52dn6O5\nKRobISYk4p2anqGjwCQbHSEgLq+dnaOhqzMdHRog46Sdmp/DLR4cJE+uo52dsTcgGhw5\nq6Cfn6psJh0fHyRMppyenp7FJB0dGh3WoZ+jp6e2LR0dIx8pr52enZ3DJyEeH0CxpJ+j\nrMM7IxsdO6ygm6BfKCEfIz2uoKGgo8IpHR8gHjOrnZqasC4fGiA8QMqjoKenqUIdGxwb\nK6+enp2fuSwfHRwpvqOcmp67MB8ZHlapn5ygvy4jHx8p4qefoKCmayMdHyEgNK2dm6Cr\nw0AxKCAdHz+qn5ud2SQjJi3Ku8yzpqS/LSEcKbShoaev2ywhHRwts5+doau+PCQeHiE3\nsJ6hraSk8CYaGzG2naY9Ta+qYiAcGR7InZqhqbpPSi4fHCS6nZmZsyknNi8tXa2hobYz\nIB8nN1e3p5+dtiggJiowKjCsnJuerVEnKzQjGx0uu6GXlbQjITdFvqrjPbihqjEcGiTA\nnp6rs67DLRwbLcWqpqu7zj8nISQzwKuwubisrEYgGyFCtKGqV8Wnq00nIR8hW5+aoai3\nPUbFSyYk3qOdpk0gHi08Nj+6pJ+uPCckKDdCUbamp74zKjM5Oi4uxqOdpMM5JyvRYCgs\nyaqmoKHIKSMsOV23t3TMp6DCKCEr26qqxV3faTEgHy3Mray2xs30NCgqPrSrvM/GuLRW\nKCEq7LOorVdgraxrLS0pJ9mko6qzxkI/Yk4tKXGqp7BOKCc2Pz5Nw6yryDgrKzRISVS7\nrbT3MC1CXk08SLako61iNC08zk4xPrytraSpUy4vO0nPuMhz0LG0OygrPbytt/RbWz4u\nJyxZuLG0yX39SC4rNn22tszZzL7POi0uS72xr8NOzbjQOzM3MT63qq25ymU+S+BeOjvA\nrbTJOywzS1RQ/8W2um86NDdFXmzWuLO+ZTg3TW1fTlPAsLHGSDs3Rc7xQ168sbaxtFYz\nMDpIa8zWVl3Dt+k4O0rLtr9eRkpIPjQ2TsW4ucPbeVk+Nj5jw77Zae/TzlQ9PFHDurrF\nVmjGzVA+RkJDyra5yv9RP0VpaUZC07a5yU84O09gV1/awsLpQzs7Q1Rt38K6wOBGQFr9\nX1BUzLi3wltDQEve/Epbybu+vr5bOztDUGLX1mv8yr/pQENR2sDJdlRWUEhARvfGwMjc\nZmBZRUBO5sXF5ml37fFKPUJlyL6+ymZ513ZJQk1NU8q+w9ZpTUNKX15MT9HAzXBFPENa\nbWzr0cjOZUZCSVnz39rKydlrTE529nBx3sa/w9dgVlnu12VW5sjGzMjZTUVIT1n83PZp\n3MjMXElPadbXaVBTW1lQUG3WztpxVlBZWlNg6M/K229z6+xdTU1d283N2l1Z6+ldT1ZZ\nV9nGzNr8XU5NWVxRT/fN1PxTSVBv+nrw3tHT5l5TVl3/TVDFxuZx2cpCRcLOTV/FzldT\nd2VU9M3tUePFzt7aVEJDVvzw5ejc3tzRbkxLTdDGP+u+TWnRTkr87fz0c2nozVtIW3zP\nXlS//TxeyXFDY8rZaN3afFBo1mVDUObT0dfP605T7ttrcfR80dfcfT5fwElQxcpbPkzP\nzVtDTtdp1s1KXWb/bTxMys9gQ+O/YFvZXU/99mJ623pW2txpc9va2dBdUHTZ5WBZ71pQ\nvdBJw9lOfO/JzUo+W8nDfGh0WdTiV0pUw91KXuPT00ZN5ltrY05s21lb3u1IW9k+VL/8\nSLm2Xlp8RUBGPkM8Te1K18LMyN/Wu7nK4sPLLSu9uDc3s6rLxbbD1E0uOF80Jy1Fa15O\n07e70L+zwNnWSj/6ST63zic7p7g4y6anrq3ZPF46HyAsJyMxz8qtnKo/zav5JznZPz15\n1LOktCYgvqsxJteno6vPU8jILx0n1mI0673Ip6NGIzzbMyhFv7eqq6+koDcZN7ctICs3\nrZqtN8ijvSgnNks+JyZJp5uxJjqnyicu1K+nsWbApMkbGjQ0LT4+tJeXr9yxrVEjHCEt\nKycns5KfLFefqr4vHnydvh06ocAkHSi+qmYnQ6OYpDdGrK03HBsnPTsmO5qRrUOvt7TF\nGhfUoWIp2qexWy09s6tQHTGgnUYqSLuoVhkayLErJr6bm8AqPq2jRRojsKNcKV2nr0gr\nMb+vLho7o6zT6UusndQbJsL/KiY+raxQNOydnD8j1qevViQurbQoH1ur4ygq3KCjXizT\no6ozHzbA7SwrYrrARjetl6Y3Q8LDtzAaOKvbLTTTscU2M8astyskw6nPMTA/v8YuKsqu\nejfbp6OzPjPcrcIrLOm7yEk8wLHZRVHGt0ojLru35VM+zam7LjPQ30U7S76zzUNAuqbe\nK0jK28o/M8OxSC5ut+UwLD68sOAxPrSv8TtN685NN1fFw2lDvaGoUz7fU2BCIy27uz5I\nw8LuPzdpu8A7KVutwj9KSn28SzDir8g77qqns0ozcbr8LSk7v79aQMq3W0JIbbv0JyzF\nttvlW/2xtzYx1r/XV8q0s8lCO8ipYyQ81kLU0DFwrU4tX7jPPTQ7zLHeNFmxt9s+Pmu/\n3j7NuMDPSuysrWwxNj5CNCk4xsXgYum5wl/5z8bARihbp804ekI8wnwzzKrAUcizsLhN\nNEr3NikrMe/CZk3Dt+39zsy0wjM02cPG1kBMvf0vOuvRvs7xubTRWVBeu8gnKvRAO3pD\nSLfFO2Owt+xu67+00zxRxdZdPjQ/1HA+07fDymxfs67rPj04QkYtMN/NWWvgwLbK7sC7\nxdY8Pba2RU1sPUpLLjjM9ztKzL/A90l3zFk6PkvUv8xpzbz8VtPNvsVGSMi+wr/b5bvI\nPj9bS0s/OUxbPjtASN7bNjvFzd/Cz9C3wFHpvMJuVFrRwNNjzrrAymtDUOJXPVRuQz42\nNmLvQDs/Q153Q1q8vs3Dxr++5mPW0NnmT2i3u1tw7FR0Xj9TyuhKWdvZ60o9S11GPEhX\n3cXN99TC4/fLyr7GVGPGwsnOYF7QVjc9RkJGP0BeaExNVGXO3T9Oydnf02b9yetO3sXN\n7XPx0MriadrGytF3T1d5VD5KUENFPkPb1FZNV1ve02Pjvb7KytDOyvRd5uL9c09NzcZW\nV+9ddPZKTdvtTVD03+xeSlD3b05a48y+vsvWxc5i697dz2lMd9Pe91tKX/FGPktMTEw/\nRVlOSFFo3MngT9zK5d7ib9bMfWXWz/pUUV3r8F5i18rX7V9UWWJNRVZXSU5OZsrK5eja\n29DXY+bGy9bR1tHUY1FgaV9eVl3NymBcaFRZW0xR3t9gad7W3m1TWuvvWWDg0crP7Wnj\nelFj8+nbY1Bw3vZoW05edE1GVl9lemJ61N15+vDg13BP8NT07etp8eBdV+vfc15dYG5m\nU1Fu5vpsW1Zea1pW/ens3d3Nwszl8H184/Ro28vW4N7x8WxOTVtcVldWZdrtUFNUU2Bd\nU23Z5mn019ne9F730dl53N3Pydb0YmxmaWBt7fRzbN7XfFZQVGllSkxfY3l8X1Rp/F7u\nWW3C2VPRzejKX1TNSF3IQkO98TfJu0hZyc1fTsnGPDTIujkx27tTO9e520VWysZaOdGv\nVDTFsUIz08NCNmLF/DNIs3o06cpJY9DL0T/NtEo7vcMz8LNTULvD5c70vb87Rba+OUjC\n2j5Ga97uPELFvjdFtt47V8D0N0rD1khCurE2PbPLP1ztfVdOwPM9wr48TrlRNs3UNlO+\nQD99S/fK9z7PtmhG3NBpRj7KvzhGq8Izxq5UO9nOZkVO7NNCO7PFMW28/F19xstI0MBC\nSMBtOci+QFy28DzF0UZKWUJGyFc61LhNQ8rN0VFNu743aa18Os++Sj9NTEk8OkppLS7K\nYDjWvM2/vsrIu77WvbbG07y88VfX3jo+TT02P0UtO9BKQL6swjrAp9o7rKZF9KS5QuPN\nV0A9Qz8xLjY5LSwxPEp9vfFcqK0+vaDXPaimU+OwxT47T0AsKz4wKTszKEPObzM+oLAt\ns5tXNp+pOL+t3NlWP+g/KkJdKi1MPDzNuTsxpKEu45i4LaeeSGatxehaTOw9Kj1QKjQ/\nLVOt6yRMobQkzpr8LKSjQs24YtljNl5oLTZKMC07MDy3RiRtqa89QKCkNEqdrC/Lqko/\n7jszPC8tNi0uNs+2NCrKpq04MZ6cKzyariuzsTbOdCdO3yg9bSs24GV2SC3tn600OKOd\nMDOdqy3TrVFG5T5CRTQ+Oy04Y+jFRiq5nbstPqegOCqnpzNerUA5wzowVjQuTTkuVsrR\nSzHRpLgxTaegzzSnozZIp2Aq19k7TTczUDgtQFdrUC/Go1AqwKrAQ0iqrTBlpFsrw2Uz\n3jwt20wuZWI/bkD8r0MurqdWTcutqztDpsMnxrssRtowTlYuS200X+1KtlMtqqM7N7Gw\nzVZurrY08a86NMw5N9Y2M88+NsjKWv1Qv6jMOLenwEbIr888XbpRMFzbPUhMOkJIN0Nb\nYvZFwq8/PLGt3EDTqrNA363ZPspdNE5CM09AL0hQOkJlysNQOsKqxUjWr75Fw7NiQMO/\nTUA/P0o+OTs7PUhCSbvmO7O2NEy0ud1N762vTcqvW2W+OjFTMzfUNzDw+kVDerOt/TnI\nsbz3yrduWbGvYFfCzd5iNDQ9Oz5FOUNPONq/PdmowjlbwrS5SG2xz/m07TzCzkbXPCpR\nXzM6Qz4+MzS8r9rFtMJs5r67YEPDvHzUyu7Mw21OSjY8RUVeMy1xPylesMjjwrez0Eje\nzFv2007jusi9t+Ptym07N0BgVCsnQk0+W73C2sa3rbhGVsZfbcZLSbq8vbbKad2+zUA7\nUEUnJz07NjtdvsnlwMLUu7TUSkZ0yMvZUNuzwF9ZyrPFUFQ/Ki0/NDA3OvO+4+LC4r6v\nys7Dzbq34kXpxelUU762W07UVEI9MzY+NDRCPk3Gu8J839fOzUBJwsPiW+PDwMW3tmVL\n3nBJNyszSj1IZU3IuLqzu9zKtNozO0k/ODBIxu3et7e/u8PgzN1UUDsuOFlKVP1OwLPd\n4r63u9FzdEg3T+BIRmnTuLfT0Mpz2m48Pjs7VF07PsbF9uDOvMNNXuJFPks/PVFTXM7K\nvrCxyNHaTWhKMD5dSD4+Svzo3sDMUebI1/lKP3fcXuJ9ZcPCxsDU+cnRS0JwUDtXP1O+\nUd+6+cbGSNP5QulKOEJNXXrbbuK503272da2ZUrlQEDW1DlZtLvI3M/KSFDeSEg+Q+La\nVEnRw/BL1spU5UY+1j8/bz7T00K9yl63xdTWTUZXYDc7zEY6xkpKvebOw0xMzMxPPmDD\n03nTymDez8/GcV/Z1lxNXE06V9ZOz77mvbtcxtY+4EgzTTctPk9U6MbXt63bw63e3rxA\nTWk3Tck/Pb3Jzc3p0N7FXyE0vi1Cxj6+q9xKt74+OzQtNjEnNMJe1Kuzp52uq6TDdEUu\nNDYrK17XQsm4yLO8yrrNRUXxPC9XRh0rrTstrKC7qaout7MdIz0jHz4uTJ+zxp6h8Lfb\nIz44HjZWN7amq52cr7GsQDBCJCc+Jy1IN2C3xsOtscpRs7sZHr0oHsa7tpejS6iqLCc7\nHR03IS6nt8+amqSaqEW3yScoKiMvPje9rcm5rszCw0B5yllNQDY7QDc7bb82JqSbKDGk\nwj4nF0KdNiemoKmkVya7wxcaOyozwzq0lKdAtq3WST1FuLPTwq6twzYxNyomJirXrK2s\nqLPjNEDNHRm5yihRTraVzRi+oyooRSqznEyzmC8do7MhvrQ0qqEuKLzdIyZO68u0yNGh\nnk05rbdKX0A8yukzTLO3KSOssSRXrsqsPBVeoCggtrbJrTAd2zQauJstLKnQUbA/Lqmd\nyTO3rTsmMbe+Ix3Kmq03w7GoqS0abKQ5IEagnUApyu47KhvWlLskraNCOyga76EzRp9X\nLKatLdvIJzfPKCHAptRQtLjTPSq3mbsZKqpDKz1FqpetJFCqQBwguaq8q5+e0Roct74o\n3KOfnK4eI8ojF8ahPsCkXsaoLRzOpzMmxbDK0DQvyywVLp2mSbCuU1MnFCOsvzusmaBP\nMS8nKyAzl5kmKqDTJjcu2ZWaNMCdKhpeOC2otDernT8gs6MkGcadue2xqqG/FQ8vUCAv\nrZ2VoykmZioVH7Ogo6aqpk0VHc5GNLmzqaBPHDa8LT+jrdmptzTr6CYouq47MaaYzRwj\n9jkkNrOYlKkxPmkmGhs3pp6wtJ6mMRwcJMhQHsuXoEpt6D/CMRw/prs9TztlsVQnPrjP\n6MrDxr6rYBkqnaMxPqao5iMYJru4N+2gnK02LTxLKR43qqeusda+qj8bJ8i+wq6sqKpW\nJyQ4zug7z6mtv1czOHBGMTmtnToZRaa+LTHsoZtIGza4MB0hUaSmbTetn1YdKtlAWVEw\nvJuuLVa7QjM4PsituPlc3snrRVrK1NvaVkxowr4mJ52eJh+7qLvmIy+jpyohuKS7MzFb\nr7sgI7GmSTutpGYdJL6rxlbTq6BpGiDQSC3btrCs6CtAvT4u+a+3Rr6mKxy7qkI+11ut\npDMfSrk0KDfDqKntPa6qNiA3yfw7MaqXvx4us73uPjummsAkPs07PD5Rs6jZL2PGNDSv\nPRU7lKYh7qTCuy0PIJ+zH16eprwvHCmsUR1NnJ3KWW+44BoerZq2PfS8uzYcIL6t3caq\nprQ7JjHMbTvWp9ktn6MaGq2sMMO7yJmgIBu+wyQtzaqdoy4trWwkLSEdsJ2zpJ39Kzof\nGC908K2frtpLKiAqP1O+qqq0yD8mRcodI52V2zesyzs2Fxupm2bNnaR2Khwd0bE6w52s\n26PAGx4zPrefsbeesCkjMS0t/K6mpqbFLztTJBcqpJ231KGdPRQaOEI3RbeamN4cL1sj\nHjSum5q+N71fHiAuJumboa2vTyEnKx8xraSpp63ZMyQjKki0qsC2mqQkFzuvKyqjlJyz\nSDE+NBscv5ypuqanzykaIM9cJMuaocOnzB0hIyD8prjDp7E0JicmMHC+samnvDkvQzAc\nLaOau0KnqiQZJDvJtsawm583Hy80Jy16p5qkPFapQxojSDuwm6SkpkAgLS4mPrCnpqe3\nZTcuKipGtLTbr6H3HSBiSyRGn56uYzY4QycbM6qovbevuz4hHj66OzOnnLbQwyokLSg9\nqqa3r6rINi0sNlvMu7StsFcwPE8sLLaeqV/IrEIfIzR8uLnCqaHIKSo5MTNJv6ekyzfG\nviceOkpPqqi0r8ssKj0xMduzsbO9X+VIJyc6W7+5w6umQiE21zYtvqaqvFQ6RUUqKs+r\nsby3vds7Ki7Pu0b2pKbR3lQpLDc336utu7O7SDMwMDzg5dSsqug7Ozg6LzO2o7ZNwLcz\nJC5XvrfKyquvOys4PTc+V76ttFZDydQuKkhl27C0vrvmNjRFO0DWxbewzE3pZTMxV8i/\nvr+0tEApN95GNMaqtNdJPE1RMTHNscDNvcbjSDE31stCX7Cz7VdFMTlDSs2ztMDAylpF\nPzpjwl5ptrpeSklQTjdGtLB6TMDLNjBAfcnWYM671zs2QkJCWtm7s8ZQ7887LT5Zab63\nvsDRTkZTRk/NzNO8xUpw2Ts6XuXLzeO9uz8vReBUQ8uzvulNSGxdOT7TwNf91NPfVD9T\nxtFM6LjDbV5IQElNXcq9wtDW7UlGQjzrxWjLtspRSEBOSzhltr5jYsrtPTtJ6c3eXtPF\ncEZFV+5tfMnDzfdNbnY9O17e4MLC0ddpRT5NWlDp2eXM2U5e4EpU3lrAxj67yTpbPvy+\nS8Ctwz04wN42+sBIuLEs16w2UF5Lxk05y7fZOON2PC9KrW7X0EbAS1RmNs3aT83AvjZA\nwEVM/NDGyL1pUNPoYj5JyN/d7tDFT0ZXT0JPxszNvkpI5UpQSEXPzWvb+VB6XEZGSn3L\n1OjO9jnLyEZJRb/XV8/N4z53zUrKvlpg1sVLP9DeZldoxtbP4m3jO03CU1TCwNDCyFtR\nSjc/v3dGxrzLVlR8TU/Xz+zIv+XpbE1LVDxGtrvp5kpKQy9W1ki7yixcvjj3N1OkeifJ\n5T7NzcMmMKc0LaOtvrHFbFsmKsxPPLi812lewnZQRjy+qs3DyzrKwzTUtmnpvUPDtC7I\nQi2zPECqN8KpMyTo7UjQWqA+ErCjHkik09evLTifKR2k1izQSDtQ4NbrcU/8wsrJbbqt\nPUCtrzlKwk9r0V9tdG3FSTlaV0tMvc8cHp6kIFyXnyEhwDshLsOgsy/ZujQmN8jFvszN\nqvwvSk/Cz3qgqjR2wz4oNLqtW02kujy+LhUwnck2n5/ILTSuPBQcp+8co5fs4sY2PCgh\nuLs5qqPRZk85dMo5t7TC2Sdptirumr4XLZinIc6b7ixDMyEkwpvIF1CwGzShV0izobYh\nUKE+Ghw8tOK4n57PJMOtME3GISGdnSzCl6vz1ignPicg8J2jIxq9/yNrsaebq7z9FyCj\nSiSspzs8vD4p07s9IU+RnECkmrsxISc0JB3GpDS8mDwVQD8aP6Onnp1cLsMqEh6nmmb5\no8AtJxwatKHIoJqkqjgaLNkjL5ytLMKftx0SLEgjTJ6XoL6/zCcbSD0kr5mhrTcUK68h\nJJ2Yq6mftx8UH8XDQruooZtlFB0+HySuoJ+oXsjPHSC7Qyeonyu/lGAkpN4sszkntvod\nt5oqHbTgZpSjGD6fIBy7NCytoKarTSpMLRwaJp6ntpqfqUkdHC8tHc2cuO+jnTAdrugU\nJ6c+OKu4qZ87LqO/HhgjqawjKp6SwDScrCo8KysoIO+dqsq6qZ60FByvJhU+q6GdrKCs\nGhXIzhktnKnCpJ7aLTQaI7o6M62s3u++rqYsFLuZKBm0vzifrhchn6ApUKfCqL0dFTah\nt0Ohnbc2ICouISqfjzYcmaEbJ623UTcb25I8G6+gyO67VD0dEeiaLB+nnUVAtyYknpw3\nHeuzI1uaq0qrnT8bLDwvvq2tpsk5zSYP1pooJJqeKlFeLqOmGiSfwzu9JyScmt2cnB7u\noBoVeicgoJwsKq+kUCZNbSgfNMM+K66VoSkbrZ8nPKOqn6MbGq8wEjSfsMLRID+dPyOp\nbSifpCMhOSwkv6yvmZqqoaoaGMBDGSOvp7O7vqe8JE6tKhcppp1bJywqNM1NzpiVraec\nSBocGjOe0CCnoS29vhcnn6tDqp5ZJB0cOFApwJmVo7umryAUHD5zWb6tt0nerfcaGcCu\n6Z2eKh4zKSBFwq2Xmq6qZRQesCcvn0VCmKocH+MoH8WklJFWH3pIHh1Gp56dpqS2HR0t\nK0q6VDvNza62Hyf3HSSXmCdInK7DMRU7nbrDm7odei0do2UX6J2xO6qtLigXF6SfIzCX\nl3MwP7+jXSeutDZROzutqD8uMTOwzUKgqRwfwDQgJzemkac0p6MnNMInTb4dNpqxGims\nNyu5s52VLB2qRRocPaq7yLSrmqovMS064CgfW6yzwjQ0wy0jo5lAXpymPx4VKqnfNqGb\nuq2+IEy4HRuzo0K/qi05KBRdnclCn5WnJiBZbc4oJp2gwJ9eJ6+xKicnObPe8ac+GC/t\nLileppeeLSuu3iBUtjemnSrtmjAay0YqSju5nrseI633GB6qnMJoQ62pLkwuI62nQEWq\np8m0PCRJJDGh3CfWprgtHiyqpjZspsm3tic3pNontKTLYLvNQicaLabMI7aZtCcoQ7+6\nMSi7p6+0TTe7rds0M1Ozu2W5yiEmw24kNq6qqV4mu7MrP0IstJ9JOKGpNivU1yddt7im\nOh2+uBwZ36rCVD6usdpGKi5JtsI926qprOYvQD4q3adPL6+2Mz8tNrpbSLGwurDXJj6x\nwy09nao+s60kLC03oMAqtqO8LB1LvUAzLLiep7wjN6rUOz/cvMO+u7k2Ht6tLylUuKjG\nKy1cSCo447+0zE/2sMgvRWU+v769p7ovQLM0Gy+rrdwvMM+2PjBQfbSxTUu3t9BoPVnA\nYtStuj7dr3QzLTHGv0U/yHNK3T5Js9ZLVLy3XspDQ1oz4qqxXsKnwzQwM1ldMTjCxebR\nSj6wtjAxS97FW1DQTjnMs1tDwq+z0Tw55l83P0VRyeM4bbfgUG9FT8rUu7ZGLGaxMzPP\nsbC9xU68/y47WWW6XzRju1w7VEhe3krUuEM/trpJNkPWvr3507S/7Uk7abheQl1j9Hpb\nPlZIPr67QFGvxTg4X1NJ2lbNtMXsXUb8vvQ5XcxX7tc+a/0+uFstwrbxvPMtPdk7ZcDG\n39G+N922Oz07wK7vW6qwKTC+Lz000KEwaadLv1Y/OnqqQDRWwq4wRbE+NkKtuFPKSsu5\nLeA5Hr7QSbTQTVTIxtAuNrbRSLY+QLZGQ7/Tr7dgMS7Fu7pPLuu/vD049lO2rzFDSDvA\nQz/d0U15yENFvtlovr3IwEo0NjA+v6yvsa7jTUIsO9vcvLTjTkg0N0XIwlpu3rizPjDm\nvsbeMSdQt7v8Ok7Jv8PZzsjK40AxMEjjYmNeyLG97zc2T1dGbdHIt8XtTEA4OMu9wLe8\nTjAxPry2SuOxwk02MEi2sHFDS97DXz00QODAvllbyMbJ601WzdNGNz/XuchW/Mj0QkNt\nxbi7z81mOjw5P9O3scJXMTrg+l/Du7jFRi8wUdFtUXbtzMPbXjw+195JNjvMtLTDbdrI\nZjkzPtHJUV7pV1R8TU3TyMjG3NfP4jw4Zr2020pWels4N9uvrcVIN1q8v8ZjNz7fyFk4\nabvAu0IrPFPJyeLayrd9LkbF6GDp8GDJXzNJXk/xXmjCvbxZLU66tLTO4lpNQzE3N/Su\nXTEtM7astNFAz818QjTGrbbJPj981+g9b7TG1NZUaObWUSkqSqqcpF0hJnA5LaqtSjw2\nMyvPrKmduzY3MUK/wsbWLipLusXov8XISC00Pciz16m+HCbXrJ6jUBgj/DG7p0pJTSks\nSrGnpqRRIyMq0KimszsnJC3Io6CwTzA70batrDwttK7NHRS+oKCXShcvIymXsCu/OdZx\nxq0ewqEmwzohqJ6xQiwdHKmdqrAtKzxPvaagtzskIUmgpyYYIfmal60qFECdvDYUF7Cc\nl6MzFyCmnbYhKizGmT4cTVu7mZ8nG9C0tJrAHycmQKyhrVE5Ixwqu5qXoC0VSZ6rMBce\nvJiVTBght5edNhcZ86Gaqh0b16Sgtyoj06O2+SgbPqakuTEhIbiatyojJ7mapkr8vlku\nGhoxpJSvISROpJlKFB27mqM7GiSumpq/IBs7naQ/KR1Zra25JjHGrKG3OB0bRqycnTcj\nPb7IMB0c3aS7vrm8p6YtFTOus7M5H1GcmMMhJmadnTwdHT6qn6wkJM+tqL4/NC42M0vF\nybO+yLY9IRwbU5+drUZNxqvAKjE0MEpISKeXrTQ8OMik7x0e0KOo3B8nsKGh0SsqN/oz\nJzu2naFNM0NJNConMK6ju8bAtKpaIyEucLvIQ8Kwv7Guu7vRIR/ItsbFMSu2naYzKffi\nQCgeNKqapjwqLWi/OB0ht5ukSic2uKatLSE51sJjO9aqpq/MZWXNTz5bPzpCRcyhoEVR\nxh4dSGbFnZ0+KS0pv60uITe0qq1WJkaupq0uGiexo7BKJy6zp7G+bda7SiwtOVzAvlzC\nobcfHUummp4rGj03ZakrHL6jWsiuKzO3U2ituyQk2bamrDAfLa+dpj8uYLityicr4NdL\nWbBpHSe5n5mdOx4mJrqzHBrfoZudOB04V76k3S4/OzetpGk7MSvQnalWSD7pra5NKCpK\ntq1GHBzdnJefQC3RLSo8ISRTzcOhq8a3JCann8kkGCSrm6s7JjGtrL2+vkk0S2W8reYk\nMLDDIxowpJidwjQ8NjjlRScdJ+Wqp7CmVibDqdZJPiT9sDvbwys8sKSaoTQgLtyjpzQz\nQt7DJxk3m5npNrertice4LcsGh5IoJqhPh08qa5WMS7W1yNCqsxNTvyzo7o84FbXrNYx\nKyraTSBAnao6wK+qqCwhwGkcGzqvp63XV11cRVfFvc03JCmwm7YnKtaxrmDQoMgzaNvK\n9zA3Ph0kpKM746eknVMdTUocHTDXrbfeu7HM375iNDs2NFC9q75GRVlo17Sko0MjSqit\nSjA+uzQVLZ6nOEmvoKE3Pq0vGCBI4j00w6CkurtOMToqLFvWvr5JO9Cwxcuzu3E3O9G+\n0dzxaEAdH6yhMyPCnp58M6atHhImuE0jL6eft7SnvzgpLOxNLztR8LewvK+x1O96bMnP\nQDpRXNdGI1am/SlOqqiwxbSqKBQqsT4dKKakPrqcndAgK7TbJjDL3ki+rKu7Sr6uv+BD\nN0g/M9vFKDGuXyv3p6u86Feq3BkhyF0gIWW3Zs2dmsYnRajJHiq4ViQss5+vO8Khrmtp\nzUgwLU2+KiPMu0xms6at7Du5syYjSkYmIDS7u0avm6lDPbG0MyxWViQqraTKN7OdtE67\nqLsqIz63PCEzvsNT5rStwFG2rjEqSkIqITDAuz5upKrP3rexUyo3zzEmWa22RVesqr6+\npq8wKkrMLyRbzjYsUaqpwlO9qbQ+MT8+LSpD3TM5ra3w7Lav6zAx2u4tN9HITka8p6/j\nrqbXLjTbVCsuU0stO7e2aEW4quxFva95JydDaTgvRb6+zta/tN5Gvr43NuDbOzP6s6/J\nyKqtyHnb0z4tNPY9LFuxse1WvbfM27a4PDBFcTwqQspWOUu2rb1U6LrFRTY+SkM4QMbK\nU7+ruN7KutQ4M0jdPTNT4F1CV8K8XU25yDkxQ9FPN0ZpQDbcs8hZ3rO6SFnDyEAtNGPl\nQkXJs7G3vbu67WK/3zY+5V48QNS+z1bFttRQT2tKMzBIbj5LvLbFbdS8yl7cvvY6RePw\nOzrZ2U9ZwLG52v3Fu9NKS1teT0p95U1WxcZcT+bdPjM8V0U0PFz3UU3Tv9ZQ4spTPkrT\nzVNJb+5Tb7y4y9u+uNBr1sXcQj5Z1+xXccPAzc3U2XdQcOg/N0hZTEJgyMleW8PQTUpW\naUw7QON3VMq7vnlTzMN9V83OVk1i6F5N+tljTezCyvRQ5sjmRj5KUElKetv6a8/Ga1l2\n6V9CQPDeRU/Wz+Zj4MjNTfm730tPbs3/SmnWW2bGxdl9yrvdW/nwZUM7UNroXnnL0N7g\n3+JXUGlvUE9p6N5OaL/NTU/P1FdQV1ZPSk3d7Urmw9ZUS17cWUPezlFT/+BbVNfm/W/T\nxs18SnrgW0pTb3T9+s7K/VvQ13bjX3FPQl30WU1w095m4s3O205b1mtNWdTUYmPXxuPa\nxc3l79bsQk/tX05RdNvb+mB012VRVF3gTU1xaVNLW2ZsdO7P6VHj22xXVuNlUF7byuJi\n1tPxd1/U2WZz62tUfetvX+zZ91/u0c92UVptbU1MWWDpY2POcXPeXWleUGhpS1fOynT8\n0+Dt5dPXzdtg/HZo5u35eWLm1Plj7m9v/GVpW3Hc7FtZaevjbU1R5XBmXU7oYlzKXFDc\nWXD/VNnWZllg3WJTbXZob21l3tTX82hx7/H5/WjXytFt/3Fx3uZbV2/b13xbUE1WdFxR\nYGnT22LUXlHgTU3lTV7wS3nDytPr69t5ZutXbdNvV9vT6ePoX3f65u5Tffdi3WNIW9DU\nZVlo9NDsUF93625ueVZfXEXm5k16W0/X7uvLZk/e7PNvbNveY2hpW+vXa1/m49vN5mtj\nesvgTHlrXtB8RVTg0+BbTVdpcF5WcPPMz2/U5U3uW07Q5WDN6VnK10r/5lvzevTP093W\nX1Hg+l7uVk3m2dpxUWjW5mVoT2nPW1FdUf3uX1ZW/GBz5Uh880vQZkbjVkrwZnHU4lvp\n11tRaOvo7mzrz+XM01rrbV7N11dv39vW7FZX7X1zYFDozGtacFxw7eN06e5ey+NO1FlU\nzFNwylD60Uplxm1fz9/e2u3o0+Be4vFx3FdUaUlK6+ZjVl5reXdNTlZp3kxIZm39X1Z8\nZdnZZtZRWXdN7mtN3Ppext5oyuVK7W1M49Ti3dZ338v64ula1NZZ2ehMWnBiY/BZZsrt\n7O1Wzcp3d+ji4utrTN7TZdBgdNBTWexc4/BR0elMa29Jc+JPadHra85fTelNWnlMVN72\nbNvpZndbUOteSnBu5eVOV+3lXlB2XVTZTUjrY+L9fdlw4OBe4NlX4tZi499Qb9/ocOng\nXt3gVHBta9/e3tvl69/rW/D/TeDUZtplZsjXcWX812b/2l3XzOv3etnm99Zo9sZ3Xc5v\nUc/8WdbwaF5oSkzjS0ZaTVdlV1lOXtz0X199XlTZXklmbeJiUE9KXmVZ62390ezi4+nR\nb2zp7ubgY3Pb3evQ29/ZW+vW2Whtdk7/30xT5mjg1/pgY2vw7FBj3Vnl0dn6S+bWdn1R\nVHRU8+hZ3tb85vBf7ddfdt9g/9dja2xUSM/FeXZe3e9P02hL0+tR3+tfYmhuTmvcaeDW\n61zWyvPTa0ll7U5QW2n5Y/3zafbU7WjX+mni9+3iXFHZ3k3530BZ09ncd+J3cdboUejb\nW21zSEpZW0NDX+Dv3MvpfHzd2+VdVN7ZYnncbd5xXdl6XuPZ9vPW3mja32JfYlBbyOhK\nSl7b/GD5X/DeU1vR7VvZ4lvf2VNd62Bfa+Bt22lT8fff2vPUxdfQ12jtfVtlcGnt/+bt\n8VxTfehU+uM/W83uXk1U7GZUUfzcaUta099e5u1Q389UTVdwbGBGbsvuW2Ds1u5f7XB3\n5m9fWVf29FTbzW1b29NfSFdwWs/WVFHtzcrLxsW+ylBJVkw+WfMnK7rUL9OtybOtzrGk\na0a2WzZINixGWTYoO9FaUbuzuqyurau7TtDcLjY5Kiw/NNs+IM2vMEKescOfqr6uQy2q\nLhdZ9xot1zZRRVSurV6joMiqpNY/RjjaJB1ANCA/31n8ObGkaG2asUWhqjvFXCaxNxlD\n4h0q6Dw4UK2pyvGao86pqfDOSyfXNBokSCYnztYvs5zbWZ2dvaqoxcrIKjDXHRg4Lhw+\nuTQ+na1MoKfDoKZrtLg0LlQ7HBo0QhwusDM/m8hNlLFMlZ5FrbcmNL0qGCs7Ix5W2S6x\noTaqlzuslMDtpj8kzsocHTMoISRFPUOquT6ZnTudl97JpjcjyMoXJm4bHjstLLOtN7SU\nxsyUpHyqsCw2tCsXXTAYLjQmPa3QPZybO6GVu8aozShWyR0g1hwdRigh5rA6xZStP5Wb\n3aioSj3OLh06MRcqMSQ3/MXjsJ+2t5qjuquxX0XgMSQ0JBstKCZMSnmzt7Sjqaeepri0\nwj1CNC4nHSYuIyviPVakvk+YoEqcnE6writDyyMhMCEfKSY50zS7oTyqlMmtmdfIpy83\nuB0h3hodXiEorU43nadGoJizr6a7xUhQ2xskvxcZuSEko/k7pqqzqqSfsMiqwzBCuykc\n+SwVMUUk1rtGo61TlZ40nKQmrq8cQ6wfINwpHS9MRUO+p9O4mL9Nmrcpp9sduz4jwych\nViAtui1LoLw5o5zWxqOzMVfCKis/KjkuI8o/J6/AK6GhKqeZS62dMECqICbTISovNrkq\nP5w8O5dWM57K3KPCvbM+Q1MoI0gwHzrIPD6qsdeoq8W2yruxSsq3MTi3KxxzOhw6WSe8\npDutm2nDnLYvwKs3KrZOIPFPJE43IUJePNy7uLSss6ynsb+9vjEtWSohTUwzPENRRvTo\nPO+zxsOuraqxs7FCTs0qLE4kH8L5INShNDaj60KhUSykqjx5tMw2RmVFVjQ0yOsn/a8z\nTLBN/bfduLnGrNY0xT4nSDQqaNtIzayturG2z8zALSa63iBrpjtFrTk3qugfNP8xRb/t\nwq69qqbF1LS8ODdJKig/OC8+WUhI3MzCtrC2v7a+SMy5OzRRPlnXQ0basdEt1LYkLLc2\nO61CNKOmTbqzN1DKKjM9IUW3MUWt07Shvb2vYL67Nv3sLD88JDlGMODCVvq7sbe+v8q/\nvVM0TrbQN7evNNm2L1GwKya9Pim71DSzzUanvy66tDHa0SpIxk7C2Tu/1jN2VjC9ujrG\nwju9rWJR4kbr3TMzSFBOMypAVjfIsfOuoLatn7b2tlQrPi0jOi4mZeIusapKpqDGp6tZ\nttEzaT4jLy0dMEMqxrQ7saG3p6bPtrBNOzcuPzMoUTsm3c47u8I26au+xqm5wqe7375I\nMdo7HSstITxINMW4t6mwuaqsu7bMO21IJz47IzhLM8a866ykrqjAVrQwOawzNrguRqdN\nM+86Ntw+KUhCOL7PNMiovbGuXMa4SVs/LE5TMEBDOMu30baqt7euy2jXPDhCJykrJuW9\nN76tQrGjPsqtKju+LT66PkO8Xu+2SDa82jNwSkCxtNazs7GnvFnFzVfzOy0/NygzOTFd\n2lazqlllr7er3iq+ulTNLS2/NihIRjxDQkDDtNnDtrzDxfFixd/XuddZwL/TUDM6TDcw\nO03CsLm3q7nUyEg2QC4nNEowISbAtjuxpqyaplatbSExIxw3NzS2rqycp8KqujQ3LSM0\nPz68s7ihobO3yVloMyctMC40Pk5a28rOtrDaYL+nryo+ORr5ZhrAnlaqoOmvwx4zPRsq\nSyvIqb6jnbSqpzk6RiQtOylUusarrcOts1ReV0BFP0NGPj43O+VzMSnUqT+7nTROoDEw\nzxw4pCRCl7jlnb5dtCQhQhwfxi43n62tmrC0oT4w6ygu5i9GsdvAr9rIwEVQ90M+N0Oz\nwyhUySBNsSZppze3nSwsrSYfwEo4Q8OcqcWepFG9tyckKh4oMCrFucijpsOnrj5cUzBF\nRTrZ1lnFyNC7VC3utjforDNGrTAvvickqNcto6k0tsZMux8fvyghqcU2mqM/mqgjqLQX\nTcMaPsIkyq82trEvubEvw6tA1rPgsbEx7sokW70odq03vKMrMKwpJLRDRcI9p6MuvKMo\nLbkhH74qJKl0L56m3KGnvmk41y8gzusmyK02fa9gWdc2Sr9Jxa9IwqpGba4xMKjNMaqw\nNM3rSOUjK7cpKKrLPKOrNq6xI1DWGilDITZTZqpU6Z5WMaHGKayxN1E+yMopbbMkSaAx\nM5/tLaG7Ici6KFOz6brJuZ2+P6PCI9ddHUW7I12kOcqf4PSuSko8JGY6Hs3KIOKtLE2x\nS7rsLqu/KqeuJLCnKMq+I829Lri0OLC5K62xHdymITufPj6dyi2nwia97SNj6DHX99as\nP1CmPi2rVie63ClpNzS3Ly6uLympRier4Cukyyenxiepti2nuy+hxSiq1iO+YCazuSqv\nqjGvpzS5sDDI4ie/0Se3sCy/qjBxrkbRejS7XS2z5Se7xifIcyO5vye4uynGzCnCWiax\nvSqopzSppCu/pCc6qigorD4tr8hOttBovGZOwl88y9k+RlnIWTy9yTe5szbRsznPsC1D\nuSs6ujRDtDdQqzM0qzMntzYmt14otrY2vKpt07DZX3R57VT332vazdHD1GC+wjfusDpF\nrUY2r+A2s+8urbszr7cxwNEry94mw7goyq0xz60zQLQ0Lss8LWhXOHDW5fRpy3BMzHxK\n0etQwO06tL4zsa0zv6wtS7EtQ7AsOrAzQ6tDXqpD66k6Tak4NrA4M7BJM7PXO7zDPu3a\nP0VDTU5AeWlD5eZM7WM/1tc23r03aLY+a63s2612a63rT7NpO8pAMdM+Nrh5Pa64Wa20\nRby4Ol7DPkDOUEL5XExFSVQ/RnNISWxNSnlGPsh9Or7CO8a/N05xM1DIPtuzVtex18qz\n3/C8ST7KQDbuRTjTzlG9sL63rrnDvsv2XGNmRk1bQEhZQkJKPjxRPTZ6UTfd3DzQwFDF\nyTh32zTju0L0vUBfvkndt1D0uVBbvk1Fzk1C1+9vw7/Cu76+vczCwt7LzlNoYENLSzpF\nXzs/3EU+4EU4Vj4/wlc+u2M4u8VIur9KvcZCvsk70eA2bNs688hJ4MVl2cXezcvdw8rW\nv8zpyulRaE1DZk08a2I+ee1C+tlJ7/E6TWU3Tdk9TdBIX8Jl3bnx7bxrVMxMQNdRQNbo\nYMbGzb/FysDT08bXz81z8fpLUVY/TvNIUNdQTtxKQmNFSchcQsJsO8LLSMPGSdPQQ9vb\nPWBrO1fwQHPKW+LI69nI2tDIzsXKzsLO3szoWWlPSFxKQ3BOP2ZXP19zTeLmS9PQRs3G\nQv3KSunDWde+W9y/XvTNRkjuQ0BtTErmc2vT19DIz8nI2dDRdv36VlZXSlRoTlz6SU92\nSEhbRkrjVE3KcUXP7ELc3krNxWbGv3bLw3zTyl1901ZZ6FdPa19f6d7W0M3K0drZ/2Nj\nW1pfVk1cWkpjd0pc6E1T5VNc0F9jyHBUz21R0ehZztZoztFm2dF32s3g3dPrfPFfU1ZU\nU1Zoa2Lr4m/9+V5eZllZcV1QWlFDTFFGSlZTXfdb/NFjZs59XtHodMzZ8MvXd87XbtbX\nc9/Z+u3d6e/l6e96fPF58+b59PNtbW9obfZved3m9NbsXu/8XvPuYuL5UHZlQ1BeRVT9\nU2bZa3bU/HndfXze6+/j6fF8c3x3YHbxaXN8bnd2cHlvcHpoa+1zWV5jUVt3XnPZ3tbL\n2tfM9mXgX090XlH9/Vv5fFFdW09eW1rm73Dj9mxpXFtcW15jaeni997c7+vl+uxZd91F\n0ehGzWBbz3Hp1OXX1Ovez+jrzN7py93p0N593f9g61NczUJWvj5rxjtZYj1lUEjbVlna\nXlZ2ZlteaXPoW97fTdT0Xtxr6eXo1Gzm2159aVTg7VTO01nP5mvOT2PJWnDJ4Nvs3utN\n3l1G+kpC1kZGzz/t30jfYlneYmX0X95bUNZRVNlR4NlQwstCz81O2cn668jRaNnDUVPI\nXO1Od8NF6btaWsZlaWDt20xi0NBI385Ca3BT/F1P3V5X11lX5XxoZdBjTbxGO69LMLxm\nQOL8xXlCvso/aM5lPem/SlnQ2WZG2d07SsBAOcDgQubdbGVCY+JDY+ls1v/Qy23K2Vr8\n1OlTVly+bzG9vzvexm3TU/y7V0rvwN4+s006rUtFudBJT7rjN8i8Q0rF9EZzT1bZSlvI\nVOy95mvI00zx001fXkX0wzw5s+wwv7YzKba5KjyuzzDLtms/7rE9MNlILzNRSDbTxdy2\ntLuttNO3vT5N2jY2TTk8/19WxcLgwL/KwspM46wpGq29Gi2dqh/emMoqvq06KkU+KjRI\nOcm3cLmordS/rV4632k4SPFFybbiu63Iz7nfP08+LT5FPl8jKqO+I1aVnifOm8MaL6sj\nGkU2Ley8yauftM+uvSsoMCwqM867rZ+hpKa3UF4+JCkzKjBDPla3saesJjee1COwpCg3\npC0SbbEYHqCqIHOYuzuruTQzMyMsxVs+rJydoKOquEssHh8nJi67rbmrprOvqq65IRdI\nzR0dpJ4wvq8pXq4jG6efIzebriNZqiQd+kMo7aanoZ2jr67eIRwfHiE+raSfnKOuvD0t\nPDwjGR1dxixUl5W3t6QoGuUkFbmkMemc7iDASxcjsdkqq5ejrqanViYeGiA0Os+dl52k\nqrk2IyMjLUg3JzyoqrGgmp22zl4bESQnGkiZpMmeqi0wLxgds803ppijwK23IR0nIyfp\npqCen6vAUCkdICowWqq3MMWdprOqprNQKhwVGCkzQKSVmquqrSkaJBwb/ayxoZeqab4w\nGB87NE+gmqavsNsmHyMmPc2xn7Mzv6OzUFmvp1YfHR4dKlO0npmaq8rTJhcaHR43oJyk\nmpq+LScdGi9b6KGXocnGeSAcKjlKvJ2nLEOwymY+PaeeNxsqMyAp16qdnJ+wYy4cGRoh\nNMadlZqenbQfGSMcHeymn5qcyUNmIxgqw9O4mrEkQMlQQDy3nKgxKjcrIStjq6Sno602\nISAcHC3ZqpuZnKGtQx0VHCEovpqao5+pNCMhGiC7t76eriktcEktSqijuz5NPyQpScWw\nsbOntyggJyYkPK6empqdqGwnHBcaKUC7nZedpqw4GxwkIS+toaShrSgjVjAsqqpC1q1O\nJys2va2/sKpxKikqKywztp2doJ6pSigfGxwqX66gm5qjwEgnGhwoK06jnauusUYoIyQp\nzKfFV67rLcmxO0KttuZDKC07LTuwqq6mpKu/LiEoKCdXq6mkoKz0NiceHSZRva2fnq3N\nXCgbJDEvbq2uq63rKjDXQEW30zvrtz8tSNqwr7qtrWUwMTEtLki3oaStqro2LCkhKWu6\nq6Ofp8g7LCMfKjZPuKSqtrfMQDEvLT63tk/UyjpCxmU5xqy+30A0TDs65bO8u7q9cTYq\nKjc3V7OtqqavazMtJiQsXr2zqqSz6Ns7JjA+O9y0tLC35jYtRUA5xsJKbbHUN0jfy7vU\n1shQMzM8OEXxt6uotLnCOjE0Ki1OvrOup63ASDstKTBC5sCsrL6+1z00MC5Cw7PCz759\nQ/TlO0jAxn1WO0hPQPPAxcvCw8hGODY+PkbCu7mxvVNFNjAtMVO+trGrttNUPi0tRkZc\nwra6t8pGN0VpS+DC6E/OzT9CfN7CydG7zUxASj9GTc+4trvIz0I2NjQzU8/At6+zz0U6\nNC4+Ue3Ft7DQ3GtANzw+VMW2wNnD3kle5UVF5crmZVdP3Vn8xb3O1s70STs3O05Nz72+\nu7vcSEA9OThK0L68t8J6WUI7M0JMWf3IyMrKWT9N2XHXwMv538xXSlfozsXbys1uT01j\nTV7TwsC/zt9ePUNCQFnPyr/AyN9CODo3NE180cO9vt/tS0M9Q0hWzb3W4tljUVR8SUzX\n12NmVm3ZXt7IwtTm6FtLSEpT2d3CvcPCzlZGSUM/SeXGxczD015USEZDZfrd0c3O2+tW\nSGPcZtvabU1efFBR49fNy9/eY1NCRlRMadPRz8/28FpJTU1Z6dHZ1NDUWkVFSkpNeePM\nyMXO4vRlW1BTUV/a11T/6WLz2dpz695zVlxRdHdc4uLdcGPu+WxvaezT39befe1pV1Bd\nZWNo2srP3NfgbmxWV09gbWt8d+357/NdVON3bX1fVmDe72jr2eXT6P99Xl5a/3N63tnf\n4G1eYE5TU1R319fd087cXlBTUU1aY/DZz9Hj3vdrWlxcZenR6ebefX18d1tcc/dod3p8\n9mNsYmNXVGZjXl9la+136+l86XpeW2BfXWDr19rt4+toXFRaU2Z5/ezc1Nfb3vnT1k1K\nW9xtV2lfV/nX6d7tdmNra1dt5dbT09TZ8eLeWVNi7ube19TX1t5jV1lXTFPX1t7N1uje\ncVdTWldb+vBbbfxzc15XWmhoW1nxXlvd6WJmaV70+Wvl219ra2DLQ1rGW+PZX1xlV33b\n7nDm0+JZXE725VxtYmj6c19bU2VxZW1ga/3u3mlNzPlixtNN3sxK/Mpx2ctj787z3nFe\nyVRX3tO+eWvmSV5eTl9vVtba0MpTXV9lbV5ZevH0Zn3xWk9lWVRda9R6Wc5UTtvZRfze\nTePTSWvbXNvp4vFfytlizUntzVPexVtI6dzNZVdNXuBQQ1feTHZlV9vQ4FbgZVdMTkvz\nW97MSG/N23bR2+3T3mvW4NvrSHZp491M0M/UzetdyGtWWmXIV0ZN3tN6UWL60+xJ4kzF\nX01X7uVD3Ozb7txt7dll+n1PXVfmXWjN2fTp0ENt+VdpWdnT39dO6HFFdtxeU1Nvyuzj\nSF5fTm5pUPF301dvyV5bXtdZWl1UfOvQbfTNeeXi6Ff53k5s3OhmzN5l9ndwVnT3/8pt\n4s1cUWjU0eZU5evUbVprX1Ht7uBty99G+XdlRm/c39Po4nnf709tXFlb5u9gzddpbuJW\nXmZcZlx3Y2vvTXbzUfHj7V1ZYNHm7Vpr819fdFZdZeVcZsh2XlngYE5fXOXg2elv2Wll\nbP9ibNZo/Nzfad7d8OL53+nc617ia1N9VExQdOzeW2b61tlr7+9x9HZiYPTWT3He2/zr\n0OPb6fRveeJebWtbY3HvbdHT5enfYlZiW2NbbfTz229m9lZt7eN29/TU3vdeUFZMTVZT\nVGJpaFPebVRW+nZWZVlu9/ptXuj/7dbb4u7T4+3e4nnr42tta/lt9+Lu1Nd93W1bXHf8\n9F9w6+XgaXBuaWvt/+3vzfFm7+x5Xe56d2tdXlliW1d9dujb1Nba0eN693pZbnFw8f/l\n5ex2VFxXT1tXU01PVGtZV09aa2BlbG9wfOnoc9bsd/rm5nPp7t/W19nt3tfe2d7i5tff\na2leVlNZU1lgeubb09fb13z3/1lXXnf09mz5/OxraHNoXF5eaWb9bVl99HpZXG5292tp\nafnrcOnf4ODc1NvT23d8fGJmdvri5tvd8XFXVldNUFNXWmNt7fRrZWh9bWVgX11paVxO\nY2xmaXntfeXj3dve5nD69mJbVlleb21u39fZ1tPZ19vU1tvb4ubmcfZ2Xl5t8+nx7N7f\n4mtz7e3v93d8YGhZU1laXmPp3+h2Y15XWVROU1lieezv9ujv7ejpbm1mYmNZV1RXW1lo\neW3e1NbX1tnU2+P8cXZrdHn54t7b2+zZ2d7saV1mfW9uXlteVlldXWZuffnrcVtUUU5N\nTU1WV2Jxd3xwd+3l19rg4N7j/WVfX2X/febb3dnT1t7x72hibWVmbvDj19TR0Nna3OLm\n7d/a3ff33uJzV01LU1NZXWj25t7f6/xjYm1pWlFPU1ROTk1UW2J2/G1zaVxTVllXXXDo\n3tTR09PT09rl8Pz8cW1lX2JlcPl6d/D28/bv4NbN0ePp49vmWlBZa/Pr697Xz83Q2ebs\n5u1jU1NUVF5p6d7a1tfeaVFLS0tISE1cbWtiYG9mV1RbXmZrfO/w3tfa3+vi29vifW1p\nZmVfV1du2dxdTln8fVNLT1//dPDe1s/IyNDg7uLtXVFa7dvb2dHP2etzXFBQW3z/bfPc\n2e9maXp6XlRcY2BiXllbaPF2XlleZmVdWVlo9t3W2t3b0cjJ71BUZmVOSE9j7dvT19vW\nztlcSlBtYFRZ68vGy87OzdHa7mZj/ODma2nw4OhfVFdcWVBNTFd6cW1wcPR8XVFPU1tZ\nVltt/2lgXlpUTk5c4Nb2XPfX2n1bYvne1t3l08jI2m193uhiVm3d1NPd6NvX8VZLTFZp\n/Xl33c/WdlpjdGheY/fm3dzj/GlfV09NUVldYnB6ffd8aG36c2Jm4svMfVz381pNRkpe\n1srO29bXZUpMYt7d+fze1Nfodt7Kytn2/HliVE5RaNnQ29bL2WBWWVZKSlpeU1bpz9Te\nd1NIRUVNWejF20I5QuC/uLe7001IPjc2OVe+ucxNRenI09fN2lZJTlxXUHzJwsbIz+9l\nbet3XWXi1trazcjK3nHb0VA3ND7bt62uzzovMz1Xwra4w9fuTTYzSMO5y1lFRVRrWUA6\nPU3t3ldDa7++ys3UVEVNW1RO+c3aev/v+XleYM6+yEYxOmzFtq63fDwxLy83T+PJt7S/\naGDJvsPQ6F5NVu7tW01Z0bu+UUP22WZz1+tJSGhdTfzNzNDZYEpIQDpGxre90+tWQ1fW\nxb7DzeVdTz84OD9r2ndUVvHb5uXf5uPNwstjTVbdy31GPzw/TF5sT2/I9j9IW2Xu1MW/\nvsZjQlHZ29fCy21fWl1bb8/DvLa0wF5FQkA/PT1JWWBra3Piyru0ucPRzcPDyu5KOzQ3\nPTc8Vl5dVENDSU1R4Lmxvko4Pz088bu3vMjU+lZFODg9Rk1LTmDszcDAw8nDure5vMbR\nz9doSkBASHnX1Nbr1NNWTvz5WUY8RVZ6fVz6v7z0U11AMzE3Ozw+SPPAu7q7wsjKxsDA\ny9njZUY7PEVW18C+v726trPDPi0tLztL47mwvPZNXO5TOzExNDAqLmDAva+oqa2zvsjZ\nPyomKC06Wc27trGuqaatxVY+OT5GRlHf/DwvLTbXtLrpPzQwLS9Gu6inra6vt8VoQD9G\nMScsMzdC+sCvqa23sKurrbTG9043KiQjISMqMz5KTEprvauhnp+kq8stIyQqLzhN81Q7\nNEPAuMDIwrOnpKenp7DiQzs2MCceHSAjJy4+1q6gnZ2eprbTUzkvLS0vOzktJyguOkXW\nqZqXmqGx4z4zNDtALx8dJzvowMDDvcpKV76zsbO4u7S2w91KMCkrNFO+s7GwtMpbfM92\nPi8qLUW+q6SmrMstHRofK027raiptkYrLTlD/cC8tq2ttLe5zU0uHxweJC1GwrOrqq2z\nt7/X3c7AsLBGHxwqxaajt0UuJB4n16mhp8JMSkY8PUVDSs28xcx8PD7At2I6Ly3Wo52h\np622y004LyQdHSZNu7O0trjXPUqtoK08KS5FQzb5o5qarSkgPM3oOScgICY2zLe+zcCt\np7s4N8OqqnYjHiYoKVuhmqOwqaSkqk8dFBcjPci3w1v2ua2tvl7LuzQdHiMgNJ+Upka/\no6OgqTcZFSPLuzghLaqZpC0aLqqenZ27JBgSH6SfNB5DoJeVpDMeIzjZ1D0u36aqPh4h\nv6GhnaM9HBEcpJw/HSqtmZejaSAZOKaxJhxZnZrGIB8kJkOhkpo0FSegm7krHiu3oKFW\nGB24sTQ7vrCwtr49IRsdMLOZmugkLMOdlbEkNrHNOy4jICZZnp0vHGukq8DDvjQaGjS7\nzTst352Xmp+rMR0tNx4aLaadsVtKPVmwpqexTyYZFzmkyiYurZqSms0sNGs+JChAzqOa\nvB4pQCQnu5iXaRQknKc4MSM+nKBP3tkxKihGt8q4rVbttioXHT2kmt4kua4nxp7X27Mq\nHs+sLhceqpqwLyFUmKEhNqfILBsVs5L2HVOjmpStHCyraBsVaZu8TONZpK4dMKCgvC0U\nF6ekHjupyp+aUMibvxUVxptTGjGnnKwbGbe0Nto3MJumFyOcnbtGHDCaoCEVPZquHC2p\nqLc3LLOzKigkHaiO0Rm0nreqPiStvBcVwJp2GjianzAhOKee60M3GDqkJyCckkImtqSb\nqxcSzaBXGy2dpjc9Sb+r+T0rK6akJBjAkbwqqbm+rSYhqqMrGUybuB4rs6asWR0dTszm\n4j2mlzEnnZ5GJhgcp5ssG8Kcth8wsL+vwBwvsS03dCiujq4dqZ07ayobt7kaI6ee+h8/\nn52+HSGnv0OkQxfGnC8pnZ0uI2Cup8YfG1ufvB0rnZ8kL7AoRpjeI7GhsDEaS5tWJL/O\n/LAtI6qnJCOqqC45PiemlS4grEUunK8cu50jHqapOCoeJ6usNDZLt6EzGqmXNGWgJCaf\nuR4sqp9OJ8u3S0AsKb+xOy7bobQeXptXw6gdNpi+MbwtKqfDIc2fPB05vLO8Qyw0rLMs\nQK2mvilUsEbDqjgk1qpKGi6j0yzK3E6uyDdc1sg5I7CfJjSmP7aZMCGtRi6pOR2xuR5F\no846PCzOp/b55jG0qiQnn6orsbEh96FGKP+uqkUny74tOUIt8b/Wz0mppyHZmjtKqiE2\nm/AurEUqqcIjv6onJ+tczcMtMb7KvMYzuKE2Jr79L7e3N1utrFEqea1DLls+Rcg2M846\n/b4qrZ0jPao3ya0pK7POTa3IPqy0LMumYC07Nka7Ri5T7LbOJ7uhOEmuODuvvjE7rK5F\nSNPO2l8+Q7/bTL88bqwhLaAzMLcjRqBKQ7NCSq3TOLe2Lzzm2bN3MGLf+rZUKrqtJi+0\nPUitcE3AxrdIKcm3MD7TPsqxP/awSr65LLCsHUazK7u2I06wPMuuOEqvRS+4uUNZPDi2\nvkB5V0qv2Se5qjPxsTRTtE1FSVa0by3swEbb0zjItkLWzTu6WSitszG64zOvtDp86TFe\nyjA+uEUxzc3NtF07ytdW0zs8r1wqw8U6u7g/38LT2ThCuPc70+tRueA4y2U6zTtArT0x\nsVlWrkA0vOVGveA+vsI71rNtV3Q+27pWT9tTxrw4cKxiRbtNO8prQkxWv8o+aMZd79NC\ndL9GV9NAxukvubc4xt40xckzRWU2TshFW7dtQsjQ7MVNPd7xY91ASrtWN8jPRcnQQvTW\n4uVCaLz5Xcn5/L9gQs10Tc1GX7c9Prpe7LtDQMhiSspxRcjLSM28aGl2RuDDYlzmX8zN\nO2i7SUnLRkPOXklcXszPTd7FfN/TSl/KU2DQV8/bPsW/Qt32Ps3OPlPvQ2nKU3G+b07N\n6GzXSED5a1vtTF7AUz/N/UjO90nb3fFzTPPTU2DeU27WSE3bTFv5TcjRQ83OWcxvQt7P\nW9fIfNvGZmjI9k9dT2XRZlnf7NTLTWi/Y0jlUEjeaVbm1sbLfNfNc3nvUffRVl7iXNpp\nQ8zQTdtoTNDlRl7sVHnUXmnQVkNeWlvjVk7Z1+vZaGbJZj/w5k3o/Un923n5Xn3P717t\naW3Tb1bX5XrbXeDLSk/bT2beSFDaYlvbdlvceU76+U5XU0zf1Gjo1OPP5Urizk5e2mLf\nyun0397T9Ffr4mnxaFHf11zl3PTRX1PM9FHeW1PZ9E5l8Wjg2Wnp0XFp4n3l2lpe2/N0\n/Flw11dR3m1c3mhX3u5jaFRc81tTbHTr2XBp325pblTj3E1p3l7xfU5f6WZr/V1t3GJR\n/HlbbmBe2+BbYnd35V5X1ule1+Je5uNfdOvm32tb8ejt3O3uz9f37mVgek5W3Gxr3F9e\n2m1PYGJm2+Ve8dpzdOb03tb57u1w2t1cZt5238p2XtPjbd90W2NbXv9lXWxjfN5gV2lX\nV15OXPdXa93/6OBeY+lrXndmXfftYmh6YGt9aPDe+ubxWfPfZfDlWffO5vzlX17uemVg\nW2n0bXn6YGh6W1xjW25lXt/mfeD/bN/pZnbzcO/f8O3b4/br7O3e4Obb4NvN2/He7nnZ\n6F3x4vDe7V1cWVdpYlv88W33a1RZWlFbXV/l+WvraFxrV1RzbFpv/V9pemJl8XNmfGtl\nemZt6Glz2dze2flj4952931m9u9zb11b9ujs3N7373BZXl1ZZWZ33OXu6G9o9nRm8+Pt\n3tvr6OV2a3pzef9jaPpoduhpaO18+t7vZm1paXliWl5baetwYHxwYGhcU15pY21x+uDo\n69/l4+L/bfbt+e/r6Nzb5ejf6H1xcevd5ube9P/2YGBsW172d272bmNxcHrtcGnp7XBp\nW158Zlxodu3za3RvXF9iW2j6+v99d3b6b19ja2NcW1tobmBs7/z68WZdYllWYF9iffHt\n4+l8eXF919DW3Ovv9GZld2hlefDc1t3e5XR8/2JfdOjZ09rd2t7p7vFzdG1g8dzvfPRp\naPl6Y2NbXPn/aPTl6eXtcGliW2BpZmtpbuz6ZmtjXF9dXnnv7fliX2tocPb3+ube5e3w\na1xgbffm7nb8dGNlWlBUWlpiZlxcW1liZltWWWNpaW9xaGh3bGvl3ubc197e2d/m4uDj\n6ebd1M7N0NDQ1Nvd3+Db3nPt3Xp603c79sY+W8ZFT8hQReVZPmBmQl/oUXTdb3Dg6Gz6\n+nre3nF93W5Z6exXadZWSPDrXnN6be1bY9tQSMviRtbdRVbDTTPJyj7TvWbovtlW4uVN\nYN75XmbPel7N2VPlxXBlyNpR189b+dlib+np2fpRWuhXS3HeQzm+wzRpyj9K60o+a833\nPjrNvubKxenv3XBf61lCys0+0L5IVLhzPrvDQM27S0zFbD5o10hN1t5x7+vj4mj3xu49\n0clJZvpOUelrSG7KucNKRkVs4E1z4lbm399vSdHbPl2+WUW5uk0/xbk7SrZjN8a/PFzD\nRTtuTDhFVkhD3LvWzbvKxs1rY1FOTTsxPubm9+LX1MvCyd3cUEhWNjvZUzvNvlPpwLy8\nUdu7SszRIGajLTedqE6vqko/QC0nJik5W9++p6Oop63AzdY3KywtPE1du7e9rbT0VEY/\nNC88XkpI2/FCOD35Rj7CXzOqsx5Tpysrp1sbsJpLyp2ov7dDKCccGixAPbegoKCgqsg3\nLCoqOu/Irqept+lbPSonOenGsKiqzTpDLSNDUCbCoTAuq+Ymt502HU9AITuttjf/nZim\nvrOxPh4ZHCctQKiamqGzzT4nIShWr6qno6bJMCcjJC/FqaqoqjYnUSQdsaZgw7AjF9qn\nSM2htzAqOFEnGi22dEWmmJWaLhRTpycaO6imtkUt67FKLULJ0OXNxbGnrUY7yUYsZc07\nsacxN7B3LbOnJx5NOSy9rsBfSq2dtjNtcyEZGSCqlcwjtpqqNz/QwMU/SCkaNp+aprRf\nLiomITSumpuz1+UnI1lO36OfPiezuS5lvm7DvM5TIxgsyGu+oZ2griQPJqe7KS0+OE7T\n7bG336zOHRk4rqemqru/aCYZH7GkKCijmJ23Ix2voyQdw6Omrj4nNsWmo7y7uDYdGR48\noJe2Pr+0dEJgUUU/MEtAIDajncIqJjM/Ni5Up5qgNyC/pzEaH8adnEIksKFMIyRAraSp\nuzYbHeuknpugveYnEhvIp6q4PCM5y1fAtK6hwx0XK7anrb23tFcjGCC7nbop0aGnRh8h\nwqY5IFaoo64+Li875aaZrSgdHSRZsK2cmsMkIS3UpqZKN81UHBU0n5KZRRkpvjQeQKaZ\nm00XHa+rLyzZqqdDHTifoG0vLT/Cvs7FbSQqt6mtrbpUTzQkLtC6uLfRO0bRaUPRnZ42\nFxc6n5ixNMOxMx0aLqGVsSAxsb1AaNErLFu9pKDWLEjRLSZCrZypLRofN83Fu6mnziok\nL82pretGUG0mGlCblKQrFyC7wjvAoZ2rKhcjqqDCNzhPOmumtDAjKc6jp0BQr9QpIDem\nmp/DNDk3KjfDraCoIxU4n5mmKiyp2xoVMKSVnS0cNP1CNluqn7ggHkOxqrvPMB07qqGp\nYCcqcT0q46ahuCcdJ9Gz1LejrTchIS+nlbQeGi+prD7pn5vCIBkmraTAWWjF3jYw3qat\nv1AaG9eclKMkEiOtp9RGvKTKHRcrp5ieTSQ4NyEttqCdrx4UP56dviczvkUdH8qemaos\nJjdd4z5TrqfcIypUxp6ePBoZPp2Uni4eOt5AMV2gmaspGSDbpqy7sbc8JDTWTr63c83A\nOyEqsZ2jTR4fRcNKQ8KwsNEtITmrqsLQLB1Mo5ywJxomr6TGQ26+xi4hN62fp2MtNjct\nQ6+mrkAz2dA7MT+6n6Q0HCq7pKPUNOLaNy8zd6qhuysuPkinoUUuJBpInZqnTB8cOb7g\nt63ZPS0jLcqtoKDWIR43s7Tu07a0eSkeO6CZqTcgJFfGU82trLpFKCnbprD9SSowtrHT\nrcMfHC3CoJuwNjc7NnO6vLO4STAmJmCnobc3NlZLOzxpr5+wHBIsppebNxUmv0ssOMWj\nnkYbJNOknLMjIzs02Z+erVchHC+3q6mwSTAzMEO7q6OsPiQqzq7D3L631y8jK66Uni4Y\nHdSbnl8v175KLydCo6DWKh0qraCwwEYjITfPqqGovCMUJq2bm78dHUxILVSwpKY2HCRN\ntq25zMVUHB62m5quIRgqu7G+vbu2vi0kTa6goz8eJzZip52tQCYfLmW/m5s/Gxw2pJmt\nN2bNNy0tT6ejvzgsME3i16ie4x4bKrCdn7MfFC+nnac+IzHQMR84q5+jYx4ZKbGenrM4\nPi4dPaGboFsdGj2ut7uxucA+Ji/Iqae3UT40JC2tnKHbIR4wRauatiQgMLegqT4+sMgt\nJypToJqxLB4kS7C9sKDZHhwrtJ2etiEUJK2epOsmKuA7IzHFrKGtLRoh1qOdrlNTIx3F\nnp6xLB0qub5ctKmstjceJ7yenrMzKi4kN6ecpE0dHTTGoJraHyA4sJ6sPGC2/zYtKGaf\nnsonHyfbvr6jrS0gKeanprrZKhcnraOrwD4+QyMbMKygpLcqGiTRp56n2jcdHcadnLAt\nHS2900XNsaqsQB4jyqOgsTs3NCEvrJ2mSiEgPuC4mqQrIS1UrarGu6zvJyYrT6GbrzEj\nIzfLsJ+nMx4mTq2ms7k0FSaqqMrxacnfIxcqraGktjEgJj65pKCuXScZL6Odrdw3Mz4x\nMMCfoK5WJCA8sKenukktISzIqKGvOSYqMGCdnzAmQk18w8uwobMoHiMxsJ6nXSojJDjM\npJixIB0u0bC2yKa7FxjasbepsOk3HhcqrZ6csy0pLC3gpJ6hyRsdt6jT07q7zS4gOKeg\np7Y+Ki1OuKqsxk0tIUKwrK3AOC47LSynl78rNi83vrezo6o0HRsssKOntE4pICM7oJrN\nJzNIQEhTvKCkIxEqs7axsMVTKBgey6Sdrjs3NikzuKikozwcQLZZxq7FVjwqMbqppq1b\nNzlGy6+tuHokINOqu8O/3Es2JyevlKomJztNxrqxpKozHB09r6+0sdAxKCYxpp3xN1cz\nLkPitqSvHRdirsK7r7ZFIBkmuaCuU9C/Py03zrGqrDAjxqq+03FASk87Y62kqWUvOUhW\nwrCurs8jIFnWdK+u30YzKC2xmrEpN/NJQ9uupK0tGyzD20/DsbxJLSgxrqZPNk1L68pd\nc7u2JxU0pLPbubRXKh8jeaqzzbC3My1fv7+5sUYn6aexzO9RQDQtQ6ecrWLW0TkuPcav\nrL4vNs1FSL5pQsbNPDe6n9seLsDaTcOuq7cqHj7XNE2ts1s6NjdGs6tKLT1r4NzRvqpQ\nFyivXkqxrL1MKCQrLdCstLa0zs/LOzzGvzMptJ2zS+jQPS8wSq2kuMOuyTE6buPZyNE8\nPr2321NFPkJFNladoSovxT4tQ8Osp7tTNy40O1bL6Ga+yzY0vKg7Hz+61mjIrLQgJsgv\nLcazs8BZNjsqJNCzQEmwsLzGxc7tTyEnqqvPtK2+SjQsM1q7rK6wtNZ56T0xUMxNL12o\nqdA+XVowJ02gvTGxrjsuVsnIwsm2byg9wDwtTs3ebWjgqKosKls7M1rLr6owQLEkIc3o\nQNTb9sM3LMi4NzjOz7e0xr6zPiFewzfer6221FFURTfGrtp5s7HD7F5jbj4nNre7xb67\nxkUuLMbGL7ynbkXGy0tMS9e+Oi7At0VDRTpAPjm+pvw+vmIwNj5mtDcxoWwcyq0uM8pK\nTkg2267fO8ZbRbvCybCq7zq+WitFy8nUxraz0UbGtE0xbcDIv8LAvlctOFdKUXy3vFtC\nRbRAJLCtLUuqu1DK1H1gKirKWT64zkbjUzBUtFZltMpKQkJZ2igtodYhwqlGPs45NDsx\nT7fZz69eZcJCSre3N9GjQCy5xTM7083L08WqrUlN0Tk+1ubZub4/Wd07QFvl0W9Nyqs4\nKqrAJlGxfM+wv8DcLjlNLULNSNe/TT+xzSu9rzk+yV1K2ic4piohprAwt605O0MrM1k+\n0bPUt7PszLFrLbOsKj6scDRbY03m5ruqtMWxy0BdSDlP2UVKvPNIz9NrUFNNbrtCO63M\nLOa9PFS0xs29U0VXMzZLO0jXVFOuvi/Frzc00FZfdCjWrx8tqTosqr42wNMtRWUqUMBD\nwrTLs67gP7O2KEqrRji90z1oz9O5trett8nGVD9TRSxDu0VDsbTjz9dUtkwqrbgm3rAu\nP69sYK/0U7c9MXkzLkY3Mb+wNtmgbS6+wzQnX7kqL7tDKtu7OVO7Vj5c10gvVsJNRbuu\nv7jGyK5DL7t5K/m9PlC6692xxr6sv8q84FvcPihIwy04rcVQvrq3VjO5wi7prUA7sd89\nxsZDQ8vbP0Bj7jszSFrfQ0uuwFS6P0C7LzO0SyfCuylLuzc/0z9IysZNXrjRT9vAu3FN\nrLgzyLgxOb5GOMbO8L62uMLDur5UStRtQDc/0Twxxds8rr4vtLcs460zPqxiQrjPVsNo\nNl3XND3MTEvfVsnNOba8J7ysJ0WqLSytQynObjFOQjd3OjbZX3S+xrevvrvLT75pMNnT\nLEa3Nzy33k28vc2xsNHDt1tG+lBKRUXJZjS0sSrNpjNAplwzq7c9xr5U2VdAzVA5U2ZC\nSm5UT8q4Qy26wiRaqzM2quIwym4wPzcpRT0s38ZAwrbltrZet7svyK8oP60uLa5XLb3A\nRsO+2rbNfbbGaMPIVnH0SDtM0+A4cLM9Q63MPrOxY8C888jcOu9WLk3iPu/MW7/O3sI2\nSLc2L7PQML+2RkJgSjguNFE2NtRiScbI39DOvL5IU7DeMLe+LFe7NzvNUV7QW82328Cu\nz/m97UZrRkprN8q0Lt2qOTes1za6ueXDwszARkDKPjPeXDrt20/t3j/NyTTKwDfcvTdI\nvjc3zzoz2zw43EBDw2JQt8j5u8PC1zy4xS3rsTc2tuA+0dZT2XrRu3TZs89PwtxFbV4+\nT2lAYu3ovtPXt8JZvbxNXM5bVmVP6GVDVvNFSP/r3kBfrkg7tOsz08wxT9Q8Q+xCS0w3\na/M3XrtKVrnZV8LT4rfeV8NUSPM8PclLPcLGc7/A0cDe1r70VsXbUFtLa/8zUco8Zrhv\n+a2+Yru8TWveZndDSs1NNGL9OUneT9fFVsW9X1duWVdCO+V0PUzoUUpIUHlFQPbtWeVo\n69FR0cBJ0bhRULtZPcxtPnbQbt3t1LzQ/LvAZsnFXu3WS+nWRVva8/lRVsLNWsa7xcPI\nyshlTfFNPldXQ1ZNTNlCScZIRcDdP8LKQPzTQENZS15DN0tGMUBjP1HF3t2+b/zNS0pO\nXdv8Tc29ZV3X8e1vV8bD3r24yL67zM/oW8xfRs7uQNbRP+vMTGzJ7e3XbNDbVs/PSFTP\nV1HxUFffSU35eWtbWdDPYObgW2lQS11IQ2lUQFNmTllaV95XVs5TTsrjTM3NUN/USVBr\nW2b9a8jKWdHDefzI5d7Nfe3N43dietloUN3Nd/ba6d5sWeBpU+PXcODN7+58Vt5eU+NO\nPmBxP1nebfbK4ujdaGhmRlnfS0t8YlBoV1HmYlv24+D/aNTQXu3OZmJvV/NlXtrU7+jP\n427tbXxpVN75Ys7Ibs/GfXrWfFRsbGBlXPnRXX3I4N7IeV3XW095W2b//Pf2WVbiVkxo\nY2BjT+bpUW1mW0xcV0hUTFFrU+XdX+3MUU5vVElda2jr6dnP7uDI9lbb7F7e8HPN3vnF\n6Ela29PW/GLFu9Rt2sLMUFNiU2xTSmXW2/HW1MXNY+jO/FfoVFfxYE1gY2xuVlTrWUb9\nc1vvZlDebUpsXktl4O9XTlfb4EpJc9/bT0rKvmkzNM6+eU13z7/DOj3KYj1cWUjI0UjZ\nt83izM/PzGVZ5ltWY2nUxtvQwNHe31lMWtTX3uPi09leSk13bVFMW720UDRettYtLEm3\ntuVju7C+TjM2Pz0zNELmy83Fu76/wv1XYko+SExT3s3Fv8blQjs9Ozo9UN7O1m1r5d9U\nN0a+vlw9XK2max8nwLzw1tGrnKo+StBQPi0kN77PZr+zrq/Ab9HJWzo7TnTa0ci2umlF\nTkw+ODlGfVA6PE/WeTg3X8ZoMTnKyj9F7tfCwuXau8VNP0Y9QllfzbS6v7S3w9FlSm7N\n3N+/tri+xenrz3FNWVtLTUxFUfx5dE9AU+1NMzbexddIJibKtExQwLGprE4tRXEuJCg3\n6LnC6LSotFtGRk5mRTvcrbHMv7TCY0ZDWW5GPuzC4ElO0b3aPj/cxkAtPtuzpD4aOajJ\nPE7jq528JzS+6DQtNNStwD3erbZaPk7At89Ic7O0SjrZv+5NV9nGaTQ82vY+O2zAxU82\nRsJZNj0mQpqxGiqotMbZNLucsyEnUz43LifNoLNCy7G77S8q+rPUSM6rp7dFQHpaNzNT\nubdjSMq8YjY3YL7aMzvMdL2wJiCjmUgdJkqutCoxoZmtQzxI01EdG96vSD/NsKOtLy29\nvDstPbuquk/evmM0M06+yUhZvLxiNjTlvkxCSDS6oTsbQKOjtywfyKFLI0aqoKffN76t\nPSEqPUpCMz6wprrovrbGRjQ8cV9K17e73Ulaxtw6OmjIzUA0W9rgvjskzaHOJCY3vadt\nJmamvDYwN9mv0zbKqrlgW13czTsqPdZRQF7Ju77i2b7OSkvavr75U8a63UA+67vMTk0+\nfKzZIzCvq8I7KECtvi02u662aDFDvN03QODNwttfva67ellNPTEsLz5CP/S6tr7f3729\nW0XtxsDbRmLG08V6LEKtzSopO82w2y5Tr8I8NDhsuMo9W7zFVkVT3tdOQF7GwsnFu77d\nTUxZSzk3RfDbb+W/usLW5cq9yuvsT962aS5LtrjxOC5NvlAvQ8W+y045T8ZePlnb23FR\nXsy/zW9v12JCTvP8Yltb3tZWQ0pRSD5I4sC+zcy+wMPAUz7CtFk3QuW8uk43b8ZNNzhN\nyr73StPGa0pN89RiQjxG29Rrw7TDzcXe69tLP1tlQ0ZXW2hXP0Lj1PrW3m27tFtGwLS6\n0EI93stDN07WznxFQ/3WUEVUd2JIRWbZzdFRSuZIMU3QT+K+18q23UjJy0VIWU3020ND\n4mhd01FOtLDdfcm/tLZzTsnJUUZKaMrKXlvicExFRlddRkVKVNncXM+/Y0veZkhUTUZ5\n31Be1NTZ7l7m12BXXkVFfUo2RtnU2f9U1rm+3s2+vcPjUGbT3lZNbnpsTEre1tZpSFx5\nPz7xdEzf2e3DzVHxxUg0Q0lfvshU073Ivsg8PtxONz5AQtfKZte/0/fIydPK1mjOv8ru\ndHTXylBFWfTZ713d1FFNYlNOV0NG5W1I7L7R9MZKJyg+zq2pvN+6vlk4JB4xxcXO22i9\nqcYwM0jGrrlGSLu702M5XrOwvtTUUz07O0jcytvo2XBMRkZDPkhrXVe0qbgxGxw7ppum\nYkyurD0cFSOtna42NLiovCofO6merjw3zK28Ni1ItrDD6PfW00g3RdbXYldUa9bwSUVu\n4zYsN9Okn7ssGRUuoJytyM+sqi0UFzejmrYqNLOwPiEmwpyd1yw5uq3UMTfOs7n/Tc65\nykU7RWjvTz5P0NtDU7m51y4dKc+omqE+JyQaIcCno5uhzzcmGR7ttK2juz5IMycx16+n\nre43Q3390dbrxb7T4NnTzddURlFmW+LDUDM3SrGnwjggGjemqaqfuy0qGxUuqJuYoUAr\nQCoaKL2mmqEtIzE6X9fDrqm7My5W0cDNTs64y1lQ883USDBDu7vNOyo64rChsTAtLSA0\nrLOtmqcxHRIbt5qdvsmxbicXF0+dmKQ3Jz9ZNCzto5+vRi1FyEg4ebiwykJIu6zbMDFN\ntLNoOyswwLS/qqo8KzMfHtajl5lFFRhbprc/RbGdtBsSIL+bozM0t7suHS22oKNKM8XT\nOzdKtKrKLS67qrk+KzrRs63iO1EzKPywu6mg1iwdGL6SvR9OqaapShoqnaA0JiM6qrM2\nNrOsRS8zSK+xTErT1Eg6TcKsuTMnNsKvvFwvLe+0vbOvQy08KSTeqpyaWhobMcy72c6m\nmaQoFSB6qr4tT6aqPCAqzbC8Nj+qqto8PM3DUDpirbBXMC1A1Lau0EU9LTTAtMqzrE0q\nHh6rlVodYqq/zskx15yvKykjJEq7vr2qreU/LSg6wL3Fu7u7z0lN6M5KN3S3t/Y7NjnT\nucW3tz4sNjQtXbSmoNwfFyqktCdLpJ2fNhkxtM8qJu6stFE+vrbeTT5CUG/MtLO+vcZX\nQ1fFw082TcK+yFpFVEI717rR1sBTNiorrbw9qlcgyKTZOEq2o7weGD68NzDQo57KN1fe\nSDM708Nty7G838vCSjQ/z8NQO0BlyMrNvu84O0g3Ocuzqr8bJK1FO6u4zaezRkMmJLSu\nJinFrro8TaanYDRQ9E0+W6++bbuz7z7Xwl0vM2zTYlR93lBC08BfSO1pOyots65CW/o/\nybS/9NuwrvwuIypePy5frq22xua6sVc4T2tmRWbCv9rNu9Zg5sX2NzA8bU9Wv7tOPVdP\nQEzRuMIvKlHsZe3g1LerwlfpUNmzPyQ4YEY4Nsyqs86/s7vPXtbTPD1QT07Zv7vPVs3L\nXj4zNjo3VL/NbNbpQjcxV66+fEM56GBDSlC5rb66xUDMuz40Q1DrTTFNt8j3vbCuvMi2\nvPZdUTw4P3bXTUvzzeVTb95MO01rS0lX8eI0L0hLt7xDzcxbWjQ40eK8sOPbsb5bWk32\nykA4fWNIUVPZ2VbbwMjLvL3KW07pbEU+RU1JSOnM+mbiY0Y/QM7TT143VL5o6c3mu8ZC\n61pCurhQ273Gv95FyLxRVttmZUpDY1ZDUP9g5sW5u8vTy8vvXmhcRkBKSD9GVl5NNz9L\nUMBeQONw7ew8VslW1MNP27fRbOJazcJJUcZ5T2hbbGNMX95j+c3X7/Tp3ddoZtv9es7J\n3Hfz81Q+PmbXUWVIQsz2TWtX18NUY99NzbrsbcPFyc9U7b7pUOnza1dFTldFRltUVt7F\nv8rRzcjXZXPpW0hPVEpMVl5pSD9iXtvPS1nwXlxCPvpcZb7PXsK/3Nf8Y8jfP1nsTVpm\nXdvuV+bU5dDO299zd+PuXGj2a3bj1tn09HRQSEhWfU9ZVErZbUlfUGDKXl/KXmW+0GLI\ny/TWV0nN4EVefU9bV1vNzvrKyvHOyczL1vbZ4lReZU5MTVBbVFFt4GlFSmJveVvuztPZ\ndk5w8F/Ky1p02mBPTkr51k1bztbRzdTKzOLeztfWzeNgVE9QVFRWZmNdYF1KRUlAP09R\nU9nUb25bYGBJSVZXdnBc91lX0dDr1snN0eJ9xsLZzcbMztvo1tlr8dt26dtoWmNKRmle\nV+ZuTvbaUFFgRktZP0n2a2ZjZd3O1NPNyMbNw8Xi89zmdHH80cbZ3sXPW192UVFoV1t6\nUEpeWUxcTkNPQjhCTUhicEv06UvfztTDyNx3cXBLSk1N98LTReLAzcbG17qx4F/bTvpj\nLTf9OC9CTXbNfM2wvd3I19TF8+m9ylxWRkbpw1sqL9/WV/y+p56xUMbOOC4nJkJbNlm9\nw8roRkJQSWXFzr+tsMrK20Zcy9YwHi+3w/S3qp+jSC5dPycmKT7MSNGhqj09QC4vIySx\nq++6rLCucCzIvCEcSLGwp6qmmq0rLS4kKCYnraHNwKmepCoaMT8pJzerna18t6m6LBUb\nSC8tsKGbl61a2SwdISAwrK+0pLhoqq4kHSstO0A2rpudnakgHfc7K77D9rmttG1ANj5G\nLixrtM9FPkC3nbQ2xtMqLCcwnqkgJ62fobQmPqOzMR4aKqmvRbmmoK0tHyckJLejxr6+\nOrOZsx0aSqyovSpZo6wzKS82wEgePrNdwqzKwMYgK6GnLh0upqYuIN2flZS7I0/CKBsV\nHrScoaSqOTbcKyZPLyB6mp1pPzcmNFZtqZmetrvbW1shFSFev7bIaa6xKiFgrrs4L6qh\nNiEgHDmgnqahoZ6oLhoXFySwn6SmrdO7rzMVFTO7sJ2kNyEeHTCjob2+tKOg0R8VHd6n\nt/m7scg7M0hAJzCqmJWoJxcjvLczJ9GgmpurLhUaP7m67isttJ2qKx0gKcars76+0c2t\nsd4wJD6ro7QvHzOtq0IpNsatud29cC0mHyuxo62ooaGfxh8XHCbepLfGrbG+u18fFye3\nqq2oVyMmJyfPo7C4qq6nry0aHTexqNc9w7DNOzQ7PDjCq66sdyEqt7lGMSvKnZurTCMa\nQq3bQzwuSKeevikvOSQ0vsOrnapjv980Nyko6bPLc/fiuM0tKV62u8W0vzEnJii+mp25\nu7axrjYYFR87p527acxNWb9DHya3qkg7aDNIrbtmtLPltLDc4jghLMWzttYxPbu7TUDW\n2S0nS8itnrQzXr5IQz40vqe8790uML19NElCOL+gpjwgKiorsJ6op6k7LV4wKTEqN62p\nw8jwRu1AKje5p7M+SE4pLVTDp5qmTXf0T2wtGyRL36qhyk/sOz3LUDM71rc+MO7iwKmm\nu73FLTFeTlRpNDG7sb7KPzduxkZCzr1eLDZDW6ymr62kuzEoIS+7s9PXTzHXtN5jTTM7\nv620Uzg9KilAyKqdnam3XiMdIClTrbZe3s2+tuYtKjtFQsakrT0tJiA2r6Sem6GvSh0V\nHjBOr7HXuK22tsYrHR8uxq+ko9AuJyMjTqadmp2qXycaHC1P08PAsaemtE0xKR8fV6qg\nmqQ/JCEeIEinmpeaql8mGiE0N0vLxbGkpK1XKiQeI2KroJ2kZiMdHR8xs52Zm6e+RS0m\nIR8jN8CwrKSjwDcoHibNqaagqUokHRsfMemrnZ6hpKzPOyMZGSA/s6SdpMoxJiY3u6qm\nqLo+Jh4dKvezp6mur66zy1NFNiYnTMCup70zKCYmTqefnZ2sOyMdHSs+abOko6Sktjom\nIyYxvKajpLBDJB0dITbIp5+gqbx3NCcjICQtaLCmnZ2myjAhHipQvqmnukotJiv6uq6s\nvltDOzE2OzpNzbe3xchaPUNfy7etq63AOSYfHyExuqGcnaGqt0skHBsdIzuxn5mapHkn\nHRsn2aednKbCOCQhKi45Y9bGt62srq+xvdlTMyQfHyErOdSonpydoLA4IxwdJjTtsaSk\nqrTITjAsKCYuP8atpKOruEYqKSotN1nawq2ts75QNCwtMTRGzbOqpqewvkstKicrNkPj\nvrCvt77Nv7GwtsxILSMgJjbGpJ+ktkAnISY5wqimqq2/RjAqJiYuQMCqpqass849LSQk\nJixDtJ+dnqOz3zAjHSAtPcrNW13Rs6yop629OyQbHCY+saCdo7FZLCorLT/NsaifpLxG\nJyAjNr6up63XSzs9PW5sNz42N/++sLOz1DY3N+Cvq7BPLycjK02wpJ2gtlMuJiY09rGk\ntPxGMTvzu89PZTs7RUxKN1ZUaLOwscNXMSYzRbqkpKpxLiYmT7iqrdo9M1fDt6yuwzwo\nICE3sKm95jYt87Ckn7A4Ix0eQKymo6/ZVkpKMyckIy7FoZyeqj8mISQ5xq2nqbBRMSov\n17evvkg0Ki0/saCu9y8mQ6ieo7gqGRgjxqafoK1DKSohJzQ5v6adnaOuNiYfJjnFpKam\nr1QxJyov3rCwrt83LzZe2rCn2SkfH1SgmqBPHRcjxqGdo740KiopJzfbsZ+dpLY8Ixwj\nKkutpJ+nuEInKS1Qv7CqtrdjLy0sPNq8vLrTJxwnt5qVoS4XG+6gnawqGRw0vq+9RsWr\nqq1cJx8mO7+no6evuUwtJio9v6aqtNBIQjtAOUjDubPLU81DIB/wnZekLRUhr5ujMxUV\nM6OXn0seIXSxaSssRq2dnbBCLSQpNjNJs6Sgp8MvJC1C0MXCyMm7czctQ7BFHSunmqs4\nHy2rnLAgFSGvmJnWGhUmrpykPi67p6rgJBwpyaqmq7e9s8ozJCY3w6eoumU7OjtFQDhW\ntKRvGiCtnbtIO0CsqCwXIcCcmt8aFzefl6QzGyiqpFQmJ1mknKo7LjhAb0AtP7iqqbZW\nLi09V8rA0VNWvbQzGCGjl7QzLzC5ozcaOKOhyiMZOZ2ZwB4YKqeVoCwg26akxSQeQK6t\nucvZyLbPOjQ2P9u3s7/pPjQ71LgzGyigkrcfLb2npDcVJ6OnLyAqtJqtHxc2oZejLRgr\nqaRKJjG+oaHQLzE8QE9ZT863ubzKTzQuN0jOrb8hHsOXnCcY25qhOxoduZrCGyarob4n\nHD+dmsAfHTqomq0sLb6psVQnK8mxvdbZ0MbGTDc8Pj9lyL6zOxsnwKGcxRohn5o3GijN\np59CGjaqtjcqMLSaqSoeN6acqjQgM66mvDc35rSu4jg5TvxjU0NNzMDZ084mHU7Gtp6r\nLCBAr6FfFCGmo2AqIC2jnzQmxaq34ywnvp6oRikr06OjXSs6wK7KPDNNv7/LaGnpaMN3\nISa+9D+fnc4+IyHApPEkKD2koS4eN8awp0sfWaGuNy9bsKbRKDDAp6a0NiQ+s7F0N0a+\nscBMPl3eKSu9SS69nqdUVj4kKTu/p80jI8mkvS0jVqqxXD44RamjQyjXqbhJLz2rps46\nMTN2q7E/MEW/vNs3I02zPz3FqbM7cbEzHUzAW7e+RkYnHs2gxSw7uKGwLDHDvruvcypN\nrLY9MW6vr1AvULu3vtM3LlNKYMIxMb2uquUxxboqI9m8P/2tu0M3Ki1GScanrz0/r6a8\nMS7Cq8w/SkJGtrM+NMquuUwxS7O7Ri8sQMC20FHD6EPF9C4qSbfQQ82svjc5QikkP+6/\nrrvCw0hDs6n5LkO2rmYtPNbd1MhIO8W09zc+3sjzNjbRt7G3UDFG3j1Rxkv8t7PKNjtu\nOScz6+Xusae512tJ4MbDs7BUMG22zTcvVLnDW2NdUcW9QjRM2dBKPW2+vH08OUbivtk+\nem069/EzMEjJz03UrrpT+dFDNmbCubTA0elCO86x9DNAy8BdOkLa1G3cTjvOvlxKUOW9\nykhP18rGYDg3RnNRX85bdrq20Ex6zV8+fLzFyra33VdAPk9NVtl3NzTjyk08Pdy903zi\n9nTN8z1N19HXVE3t0F8/OThK08xt88jbz77eT27AvMvOu7trSFdGN0jt6czfVm5NPGXA\neUBey8DKTUZtXVniXkr2zW5MSVHl/0lFXs7Dye9UdMjO1r/Jzry6yk5IWUg5RdveedHL\nWkI+PkxXVu3KXj/aw1lMTlfIxmv3d0108UBGef3xUUZr2d75XWPPv73CzcLI3snWTUhc\n3vdW+tFdRk9aSk3s19Ti/XFlXFrRxlFNzs3XfUpR5mVr5VZg1G1UVk7t02Nd3tDIyNrl\n3tDO6NncWXDbcElDSkxCQ2zjXlvzWkhGRU1aZvzZ401dzXlISk3rytvezd3m31BKZWh9\n4mX0zM3b6/3ezMrP29DN6NzXYE5d3tz54s/mU1RZTE1ga3luYGVeVlF021ZK6dHX12xj\n1Nng0N/oy9Zpc2Bm4nBaa+3a2nBfZv/c6+jT72/e4mNRVGVfVGbjfVdXTUJAQEVOVl5z\n71dMfOVZV2D60NPs3d3x29xu4NDX09t3693ocF5p19bs9nN5evrd5vPc0M3P3d7bbFZX\nV09QVllcV1piYl5d6eVTT296dmtXbdvc297s3tn9Znr23tre3eDb0d1eXG9tYGJvaV5u\n63NZV15lW1dsbWJr/W1eXF9la/1v+etXV29eVk9Z5dDU8MzNXdRwSOXx89li3dRv3eNR\nbcri6c3U4MvZdtBbS9RbVNNTcetGVFtUa3bg4950XtlOTe1PU1tozO1u2U7v7El0Vlpr\nW1tcYNzpcN1reeb3T13mXMj338Vb1PZp5UjtdFfTadfKW1/ZTV7eT97bafDrYFbN9N3T\nS7zaWcNKYm5GY3xj3ctr2l/W40rQT1flYN1N21Nj10PITUjDS99CRb5GRl7pZVTp3s9X\n5c1x3U/e1j5rdEjT/UbZ2U/LzWLOvlvevF7RwO9T3lFAzkg811NO22VF1vc8zs48cdpf\nyEgsw7YvQrDPPL/DfblUUbTrNs/FO0pL9s1X6d6+z+23w77Cw7zKd1zMRT5ZPEVTTVZm\na1TQUE3zS0ZI40lDvi84rzYxu80/wrxTs8A6ycI3OelANO5LN8BtSK+027etwL+328bO\nQ0J6PDFcST1uaOjK4k7PdjtTTUJb3iYpqMsm/are7cBrsLsrS7A6JkVwPkVI4K2zTaue\nytSxt9ReXcrFN0K7zz5gvuVvYu/AUTlUzUBC38k4Hsa9NqpQLaGnJD6oMCdFLUDmJC2k\nvijApsC+wEqwuyZMq0o4u7bAvlzQsz0qadExP9do3k9Nv7nrXicntz9ar0DXvMrFST1g\n7Csvxl82OMusvj1eqLA7Rr63vlzgp6xCW7daKyw8/1A9u6a2WcbCVFtQxesdIMJRN6fI\nVKTCUOy0PCRJMChG2TNIs7u0vjnWo74pUKi0dNvOuv8jKsxaL96pp7Te3sM6JDfT0D4f\nJL3KPKef66+qIyfiLys7MSa4oD9Kqr9Ktvos2b7euLpbt6C/KjxlNjE+vqOtXr6vQyMn\nPsvA6DAqWrnN26ypwrjJGhneLSmxUECnqGj9rTwn01At1q/WsZ2pubtRP1YuIDysr72v\nrrlOJyvzST6zxS893Gzr08K2vkUrHSFKQD6qp1e3ticwYi8sTdlZqZ63saO2PlA6JC9J\nTcmzu6+mzC07TDg+cbOqTCdC6S1DtM5X11AxMzk/17GnvEh8Nh4sQydeqrernqa2rbwp\nLkgqLcu+v6iqxtpQNzc7LTexrcjCu9Q+JyrKzS9cwzNAtsPbtrHJ20UpIStTTtekpLin\nrTpGXDEzTlRNsKa9vrHMOz43LDRPXM/Dyb2zzjA0SD47Svy5zTA3w0s5vcU9RlA2M0ZP\n17CnrtrdXistTTc5s7a+qqu8ysNCLTtMN0m5u7uttszpWT5CPjRAvrnTzsbwUzc24Mo+\nUb4+QsXNXs3A+VpWNCo03M7UrarAubc7NkszMEBbRcOtv9m7xUtNUTlIa+nNws3NvcBG\nOkpXTUpxwr5PN2jXQtzATUhpTTtDVl7KsbTaW+Y5LEVCOcq41Lm2zfDWUTNDa0JWvrzC\nuL7Pa0g+RUw/TMK8xc3W61k9PtnFYl7Dd03N0WPf0GlTUT4xPebKzrev2dHLPDRJPjxa\n5mbLscLdxdFJRVA8QF701s/e1sLQQ0NeW1FUa8/NTD9p2k3by1Za3mxNcdfRxbfAb1RZ\nPjZXU0jGvM7Au8vZ1GU7P1lGSPDN28nI9GhTRkhORUPs0fx0/WlQRUJezttZz81b5dlv\nbtvwWmJlSknaxcrIvMvbyO5O+nlPeeP/+cXC7NvWaE9bV1D2fenc92Nx6UxCS1RcbPzR\nyd9ZXeBeXtNsTFZWRkZTa/rMvuZb72tCSmtMY8zb5cjWXWJcSkNXbV7Wys3c0etOTEVI\nT0xN68nO2dPZ93BXbc7R4vfWXU16eXP51N3g2eBvd8vN283KZWLsTUhjYlbm0+jizNtg\nd3NUXmleW3fwd+9mY+XrWVlu83zwffrgW01WZVZd6GNPXmZlcd7b1MvKfFFbTkBMYFTr\nys7UytR0b3NNSmBoX93Z29nX7F9gVlZdV1vg097p631iWUtUfXBbce9r6NPj6N/pa3B0\nXVb/2ujj09tp6fFZXv1iZv9vYPDb8WjsfHP/9/bp2+Lr82V09GBTVltdXWhm9PFmbeXg\n7t7beXn6aGX/7PTp2d1tc/xeV3xrZuXm+uvvX1RbU01Xa2n23tfb3vBeXVxbaWh25dPQ\n2d7a3uDzc+Pb7Hb0ZllmY1dicW9x9PljXPZ9YGVoVldiVlNgXVp393Nt4OD04u556evs\n7fZ3X2ltZn3u6eju7evl6PPpeWv56Pbw4/F86fZ57+bven39WU9RUU1c6+vW0N7b0e5U\nTlRWW25jcNbX4/prXGJ2Y11r+dvX4OXoellUUU1WY2395uno3eJ3evZtbfn29+7Z1tnU\n0N3m3OLo3vpda+jta3Bpbd78V1debmNbVFFdcXFlWV9mX1tTWmlub2hmfe1wYmNeX2li\nXXrg3ujl3N/l8GlecHNu9vZr/+t9W1RcafnpfO3U1N39aWh58H1ibO3FxUhJ8MXD7D47\nY8nJ+klM2crX72lDU8i+wug+SsxiYl1KZsj9U31m383Za/Fo+tnmUU9v611PX/fc7V5e\nYGzW1EpW1l5Q4NbQ9E5GSVvX3VNWXs7F/VBl27+/Rj1JVNbtRlPQzsbQdldwevdvTU/o\n1vNmbuhoYmZ81tHZ01tD0d1IV+ZPV17uzcO+UDEvT8PF1M/Fwr3CRTE7P0VGTOjP3Mm+\nzdPZfE5e6d7NztfXzsv/TVZz39vraV1P49NGT+BZSObx88ZgLycxuKyxwvNgStTbQzE3\nPz3/xsPP91ffycjI9GB9zMW7vuBNTV/908rF32VPSk9cY1tWQFl6RkJKRkj8vr9ISEg6\nNsiqqrfPv1xFXj0kJDdQ2b6xw9nXvcDQyGBFUMzFxch8TXrGwNZgUEZPYvN2a2Xe/FDv\n901PXva+WS4qLdSoo63mPkhNUGU0KTRTz7u7zT4+6cDAy91DRsC0trzvQkvGu8LXUUVK\n/NxpXFdm719xY0I+S1D8tnwoK0i2r7vNPj7Qt7jsLicwQ8K74jw52rCtuX0+Pc6wtNZC\nN0u8rrpoSE3pxcZcPkJlz85bRjs7Ud3b27tGIy1guba8vkLtr6/mJx8nW7etzS80zaio\nxTcsP7Omr0UvPMasr3AwN820ttk7NkrNyWA+OEBNbdfzfNE/JCi7pqu+PDf8raxAICNZ\nrKxeKSQ/qqO+MSxiqJ+tOyg0uqixVC43ybC0UzY4V8PD9Ds3P1fid3lj1EsnKlahnWsj\nJ8ymp8ggHuOnrDkeIdGhoLwqJ+2jpMoxK1Crqb9FNknCs75NNzrUub7jOjE/39N5TldJ\nKTDfyqahzSYkxaiuPiEuTbOsNyArwKemvTEtXq6oujgtV7asrNc0Qsa7vOg6O+K8t8g+\nNDtK3t5PNCct6Mq7prlWSigtyq3ALio3vrZPOCozt6e3QDlesKSqzTo80a2tfTk3Qr+x\nyUpFTde+1j4zNErP1E06LzBKz73KRUk2NL6+uKvdLSxTw8w+KjvivrF6ND+4p6e3TUrK\nr6q0WT1wv7vDUzY97c3OdkZK27+/UTY3Nz7o0GBTQzvNvMiuxTM0KCdPud88RmO0rdRP\nQk28sdE5PFe+rbDNW1niu8JMPj5A48ZfSFNQXs7/OzY7U9rgX01DRd6/vstKQzAtZvzN\nsdQ5PdC7vnk7aMC6scxId7avtspIRuvDwt4+NkNg9uNXRWvR083bXVvx19RWP0tZbsvJ\nX0M+P/HZ3sNQO0Y4Rb6xvdbOxra45U09RtzXRjc+X8W+1kk+QmLN7khFSlvT21ZUUUtX\nbVBAQlfXztHmUEha3NDWSjxAO2i+wLa01EnKu8LAXkbavs1621HXu7/CTTxF69HW9zE3\nxtFmzWVauMVKxcNATm1DUUUuOeNzfMv9ZszczrG0a1RfPEpa5cpCOlbGydleSMDCa9Ra\nTk/ms1spP/EwT698XLr9yq1DKs1QJjY+LlNROrSn6+Kvw8y+aV3eNC/NzVm2ttfNd9S8\n0EZXb1bAY17ALD6qXirPu7+syG23NCfITyY7STTU2T/AvFa/tlzIvjhRsHxDy2vwvNzJ\nrW8230YwRl5TTtRMM762MT+nzTCnqic8rkAsLCdASS2+qD9Cp7FDYOxiTTtQy1r2s7a8\nqrNN5cxDOz04PTo7xbe5vlO7uDBOrUpIujo7tDQsuTQqqrcr06/T0W4+TjovesU/Rbav\ntravrrjP3W89MzAtM0ZGSO3Fvry9trdZTU0xXEwqSso0OMC6zc23rc1lrdMoRtotLTAw\nW/xTr6rLvqexa2NWQjk0PlBQ7sLCv7nWUd3/RkpGQEtDRdDT3sJZY79XQ8jGTz5N4kkz\n9+Au/K1bSLS6v71XS18xL2lZNEvAvr68t7fF08zeUU1IPlfjU1vW0M3GycPIVk1KPnBT\nO3fWQ0vQxuNQ48BORrxOLVfbOUBQUcnFzrS2Xmu+8zs/RkVCSGnZ3sy+wsO9z2Dtc05O\nTk5eV2LIy9TMTk/fRT/i5klCU+9KO/PrONmwz/G5vsbJTUNRNzRm+j9awL/Cvr6+xd7s\n9kxDRT9IaWho3dPTzdTX11RLVEZt90jryltbzcPQfOnKZUDfWzFC3UxKb3zLwNPGvOZU\n0NRKSFdRSU1ZY/ne1tzbzuhUXGBXWVteZl5e29vu111Z0PBZ19tXT1t9WUV610jluNRu\nvsPW0V5LVEM+WWhLY8vKz8zIz+ZzaFtQVFRMY976893e29fe2d5XU1dOY1NIdvpQbNPT\n6Wvi2k5Zz04/6eBQX2hz0OBxys1abtB8Vmltbm1lbe39fN7g3tHefOjpa19dWVZPVnFo\nbW5Tfdxc+c3deunj6F9Q+WBK2slr7cnU3uhUWmZKTd/rW9/M3e3i91xZUF5UO87NN8+7\nRVbGV0jlbElca1dX+sbO8My+ekLIw0pe3FFO6OVcdH3gzmNoytxm09NsfPrv5uBfTmVe\nWfz0ZVvTyUDZvjtTxkZF+VNNXV7t/HPWZUrR10hoxmY+VH1TYtl3UdfF29Di6c1l/U00\nechU3sbO2s/A7Ff8VE1WWXFu8VxXwOM+1s1T799Tb+hWUVdtzN1U18JgSM7WW+/pW1ne\n21pWeeXQa2zKZtm7TTzR6U1e2ulGTtb6RmDK62PUy8NjQtnoNkNZPVDWWenG091tTF7p\nUFDNz27X3vbw83RM09QqRq4+LbetOzyusTtUvT8tPUo4O1frzL27s660w8O53kDxXDlO\nXDtK1mBry8PCxdHa11ZATltLW7s5H8CpJDCasCaunTMmtt0dJmszMc23vbm3ubr/QF1R\nOTzsyGPRr7bXu79PaN5JRnxlT0tISk5MVs7Z380qIOKkVCGwmjwmpqogKapvHT6wRjjN\nv8jU7dC+22i7tM/Gs7TK2c0/Lzk7OWbGxbSzwt1uVFFWTVZJSEsjIbCfUSvInKofQ54z\nFE6tIB6zsDjjra23Wly5wjk7xds+6brUPk7U3M64ubi78U9NNi9CXWl6U0Y/ecgqI6uX\nQx66maseKaC/FCSgVxpznsVAtq637zPssEUqca/Gbbyxw2LGtMpIPj8/MS9RyN7FtMJU\nPjpAS87KHSSbthdPla4kUaauJB2/0xwrqslAqanQtr9I1lAtTbjj27S2urvI1lA4PEpZ\n4NnOxdRbWUs/S2VWT0lK6S4tuz9Gnb8hsJ03H8qzLB0xsdor2aGu5bi74mw5NPzrO9Sq\nr7GsuOXiYz08Pjc3RUxrzdPQvcBbQDw6OzxP2zArs80h2Z3CM7qozSo7uTsdKrjbL9an\nqK20vLG5PTFTUTtK2b6vrbS+v/k+Pk1GSUtDS0o5OFba4PRt91o0V7cwMK1IIMqoPDGx\nqVc2vKfZKUi0Vi8+/b+93sitr9TPwuhQQjc7d9brwrfJZm9KQk0/Q938QEZNSk1MWs46\nN7RtLbasMDC3zC02t7c6Nran1D68r7/lUHbIdjtJ03BObtfAt77X1tdKPEZNSE9TYNx6\nUOPF0O1vUUo+OdPeMda2NDivvDtrs8U8QMC+OzHrw0w+W9fIzf/WvMNpaPFlWUhAV87R\n3MjC60VPSEBRTW2/1lnR82PbcG/OSFS4/T69tjg9v3kxPb7NPkq9tnlIxbvmW1dZXk09\nReNoaM3JvsLT61pNQj5IaVlR2trx7VttymjxvkY0V//JzT/ittBaxtE6WrhxL0y0zT5T\nxsL3SFzKylxjycbeYGhfUU0+RWZiXP3zfGBIS11PTXDRvs0wLUj5vLDNScaquzY3RkJC\nQjk6erStwGu0pro8P9vfVkJIyLjG5cvF5mtWTvB0S0pRUEg/RVpeW2v9ZlFDSbezMSAp\nQsmruT62na07NDQrPk8qJummqbbCt6SmUy1C6Eo7QuW3s8rxz8paPENQX3ZMRl9aPj5K\nUFt69ndbNC+7pkYdK922o7wq0Z6sMSosLcKwMSm2nafJQkC6rVAnO7S3ysrGuq/IOUrN\nVDs+RU1tT0Z5yt1ZWk0/O0XeeiwmuJ1eHSNQqJqsKlSjqUgjGx/aq0Aqy52ap08uRbrN\nKyZKsa62vcO2uUYzPltTSlB51tZzW+vQ1vNbQi8sVLRKIDmdnkYcHEKgmsYoYKehtiYX\nH8itRiY3p5qfyjM+wrtIKzDit7a3t7vKaT86P0hJY9fW5fpZRkVM48NfKyu+rTEdQp2d\n3x4aNKOauyMrs5+kPhwdU6zGLCj6p6Grylbev9o+OkNDTcizr7O92WtWQzs9SFrm131G\nNzrUtF4qTaSqLhstp529Ixotp5utLiu+oaPOJydgu2ItKj7Dt77UzLezvMvRXD45O0Vz\n1M/Ny9F0TUA+QFnMz0IwTLG/LS24oa8tHSqzo7kqIDasobsxLeKrrV4wQL+2xkg7Rm5j\nPztN5dfGure7xu5NRkJAQkp50cvK11tZxbC/OTu7sz4hKr+msTMkNrCkszcqT7Ct2zEv\nY7zPPztZwLe8ysm9v3lFQj47Oz5I8c7MycjM211GQkhe1tFOPPm0xTk9u6vKLCQ+r6nI\nLy7zrrNILDH6u8ZKQOu+xVs+QE1cT0ZW1MvOysLAws1uU05IRU1e69HO2mZOW8rAWz3e\ns8A6Md+trHwtMdOsrdQ4P8a2yD8xO/rM90xU18jUaVlg/GhMSFFQSENGVt7R1NPU42BP\nSk1e4s3RWUrcv/M7RcO47Tc2dLa3fTs95rq89kpczL/J/F3u1+VdTU1OS0hLW+zc29TT\n2e5WRkBCRkpRY+bX2ehlV2Dl6VNO3sjeS1HJt7roRlfFu8hRP1bKwtZaVuPL0W9ZadvX\n4/Hr4O9ZTVFWVlZWW/rpbV5dXltWUU9WbePtVEVT1/FGS8291khCdr272UlGd8XF71N0\nxr3D3Xrp3vZZTVBjdHPw2dHZ7m9oX1dPSktPUVRZbejf431USlTp+UhFbtdbPkbXwtdG\nPlHNwtZRSnDNznlPVt/P2vn339TT2d3Uzs/W29re8WNbX3bo5eLe4On9ZmBs8eLiZlBe\n3fZMS+7N5UtDXc3MbUZGZs/Obk9W69PbY1dr7XRcUE9ZX2No8Nvb393d5n1lV1pldO7m\n3t3meltOTVRx3npZ9MzPYE5t1NFsSEhm1ttmUFbezdZxV1/o5Whbaevc3ebp6/dtYF5b\nVFNbYGb66Ojg3Nzj7fF8cXn/bV5i38zQ7uLKyN5UT3TT03dTWuzW3mlXW/zg+VdQXWxl\nX19o/ezs7u90XlRUVFRUWWBp/e3s6On6b2ZdW11fduj5aPHW13pacdPN3mNm2sjG1Hxr\n7OL6WU1QY/xpXmh59PN9d3ZzbWJgXlNPVFteX2Vtbm1mXFpZV1toefTv8ebc7F5d99//\nWl7gysrT4t7NxsrZ83rt4OxpZfri5ezv6ejo5uvz9HxxeXRmXl5iX19iX15dXFxaV1ZX\nW2n5bmJu/WJOSlZ0/WJXY9vNz9vo4NPP1+10fOvod2lt/+vt8+zwem1rbGtoaW/58ff9\n/21fWlNPTk1QV1teYF9rc19UVl5iVE5X89HN1N7b1Nbb6P3p2tfe4t7W0Nbd5eXe3uPe\n3Nve4t/e2tbZ3ej5dmheVE9PUVZaXml0cWhbXGVdVlNZY2ZbUVNedG5bT09ZaHz39OPW\n0dTb3dvc3+bm4+Lj5uXi4vBuaGVt+vRxX1pXVldbY21zbWNZVFtQSk9PV11d6dDNy9Pp\nbX3e7XNoaHfgz7u030k+NDfZtLawvFw/TWtZ30gtJyw4VravtsPDzHTlRjo8ZdnDucjX\nUcqvfTAtKCu/nZqboMgmICgtPkYzLkytoZ+m3igdHSdRtq2uvlBAQ96opEMgHBoup5mX\nnsokIDvXRTorLsWjnbE6Ky1Rs8oxKCo2xaajpKCtKxwaHluhnK3eP2O2q9YhGx/Wnpqs\nLxsZOaGanbYnGRottJqUqigXGlGdl6gqHSzNpLckIU2qnZ7IJBsfOlS5oKSw7TMjNqGd\n0ycaH76bl6QwFxvFnZ2wJBcmzbanprxdNBsYPaGdqi4ZMKan3z5Os5ydwycXFy+up6St\nt603Gx43wKatJxorqpmdbCQdHEKgl5W2HRxApqHTIxsk5aensafGIyQvS6SkLSjcvUYt\nISDDnZeVoy8gLy8rJ1Shmp5pHyDKo64oFRxeppuawyQaFy6jl6RFJjyqo8omJC/K0VG4\nqqu4NB4/ulY+v6muxSoeHSbWo5uhqrFbKRwdLrOmp30mLrCfrUUjHiY9rZqarTEcIL6j\npr8mIFaut8zoNDlNPFG3tkozSr1KIx4tqpiUpjQsJ0M+ICysmpqoKh1Gr6/oHhkzqpmf\nQB4fJ1O0qp6frkAjIWCquzgpLVeop7v6OypLqd4jH0KdkqAvFxVxna9jOrufpysUGz+k\nn3chKr6cozQdGSqmmqa5bVffLR0qwKeh4CEtvq+zzycourZCNy4stJmavh4aOqCZnj4f\nOn3MMR4tq5qkYC86VEo3My3fo52dtiYcISdTr6yjoLM3ISFJs9FKUTEqU7y5ra2/ubY4\nGxk7oJirIRkqq6dpNjSxnbApGh1Tn6C+zbmvqT4aGiS+nJ2prukrJBwdWaOfuikfQ6qt\nram+ymUmHy4/2amfn8YeGTGppK03Jy4990k/1KOaoMUnHSY0TmlPr5+fqjEbHzRLztfQ\nrKjAMypap6HIJx8jMMO3t6mks/ctHBspsZ2mSiY0w6quu77GvmYvHR03saOjqrn6QD0m\nHR8quJ2gqrP5Xm0xKjfWttEzNr6oqa2+OS8zKSYuP7+jnqZRJyreqK3uMTFFXcnUzbyt\nqL42IyAqNkbbZragoapoJyc0QNm+wLSttPc0Nt/QPioqLjNwvL6vp7HFVi0pL9aqrOIu\nN923u95ROT0+OC0pRbaqp67C20peQywtPbump7G7ZkA8LSs3fbvfNkDLr6qwu3E9RTcw\nSuW3qKqxSi032b3wNy07P1PF5c+3rq7RNC0tNk7bvr6xqq6+OSQoND3s0V/Ku+xMQ1a2\nwEZAOT1iyLS0sbHLbTsqKjbbuMU7M03ow9Hpz/nZyF4+Sduzr7O51FlFPjAqLT6/sMDZ\nVztIcHPow7O300hNwLu+v/ZFOzgxMEVXzra80UYzQL+7zWJN5u3ays7Qxra+VjMtMTtT\n3svMvrvCYjEtOlbUvri+u7rWT0Z0w9FIOz1CV9/Nz9DNTkhANED6va+23U/zzcjT3NR6\nc25LOjtM3cbP3l9CQkw9PEZOv6+3vsXjW/f2WW3U0XZCPVD67vBZTEA+Rj5Uys63tMXP\nT0PrydDjU1NjTmb5Yl7r1HZOPjpAUPm/wMW3v83ePD1TZsrAyNbj5lFCQkpgW0ZGVFTp\nz9HKzMjWbHlMVNDIvcBdSlNd7ltPW09PW1ZKUHPRxsrR3+xe7v1O/+XNucDT21ZJSk5O\nTmBoU0VDWdzb7+L8Xl1ZTU3jzsW8yvNcSFHra15UVHRcVmBfXvfeaFNMTl7j3NHN48/W\na/9JRfDb08jO3u98VklNad3gXE5ZY3na09fWzt/3+VZt0crCylpXVkLGyEDJv0P/zT1F\nz19rxXFUzWNT+UpQ2cvGyNNodmxNX29P7eVRWmld2dtLVFFASVBGU+Pjy8bcd1lTfN5m\n+d9DVMpMUcBPRspZPvdWQNTUcMvQ5tDUXVd0cNTF09PQZWJlQkleUWN3V2nb5d7ec/nX\n2tvjeebXyMvtXWNXWcPiP/noO1N9PkbPyt7Z91f6yNnr0U3eutfL6DxbWUjlXE7iaVxe\nV19d0M1ISj87ys/Lt2bNu9m87ztROkbKOkjNRmPDa0NUzdpDTTs9wsq+u27LvcK7005K\nTVxlXk9CWWVQ/E1Nxc9ORj5ev7m513zbyri+4ks5P0pNVz5p0Uje0ThWu1tDPzvavbe7\nXPbc0bbMZV43SmVAa0s9fFtR/UzivdlTOjnQxru7S+nDxa26eVQxO1BDa0o/01BbwFPj\nsMs+Ozv3xr7CYtm/vrS+V0Y3OEpGT1pGW/RUV1PmucZKP0DpytHI6Nu7vr3CWUw/O0I9\nQE1J69xaz3Bct8g5SExD7ujLwsW7w8nC72lMNzw7PlxU789o+u7eu89DXktN2fG9vNC+\n4N680c9wNzYzOVNPcfFZy93ts8JD00otU2nIsc7G0226yt/oNjg7O2hZb9FTdN1Wyr1x\n1/wwP1d0tsnFvO25vt3LPjc3M0lKVNNu0cplyMLiz+UxNlQ+07/NtL2/uujaVDg6MDRA\nQ/3i783e+szFxc1UPktGRt7UwL7KwtDLxnpUOTE2OU59/9bi2czZvr9cVlk9PXfLu7e/\nxc3KwtZ9Rjc7O0huedHT48/Xz77T79lAO0pPz8bUv8vIuMzUbTo7NDRAPk72dszW8MDQ\nWdlIMEpNTcXUw7fFusLs1kpAPzQ7PUBdW/TQ99nD0NflPkVZQ+DPz7nFw7/ZyNRcUTs3\nOTtNYObNz8bAwsLWS0NIO0vNyru7w8LNztRtVj87Oz1JUWPr8+DQysPN63FPQENU4sbC\nvr7Gws35ekI4NzE6QEju287Cz8jC/2ZtPDtRTty+vrS3v8DlZlk/Pjg0PD5N9+vLyt7N\nzN7UbUJNS0rbzb+3v8LN6NxeTUI3Nzo/XenNydDU4tzXbU9KQDxO17+3ub7K19ttYkw8\nOzg9TV3bztPN09bIzdTNTTtCSNy8vbm+z8rX3OlGOzQ2SP3Kv8bK4Ftd987ZVjs0O0nJ\nr6+3wPdb8G1OPi0qMUW/sba840hFQEbGvkpCNitA07OmrrvAXNvKTDgrJCo/xayrsb5v\nRkM9Os2+TUUzLFDJsaOvu7be1MY6Ly0mM1PXrq+2tPBCQjEwv7s/Qy0mRt+zoa+0sNDU\n9C8qKic3+casqrC3XjdANy+7sE1vNinbw7ekusau09TJLiovKkPNza6uu7xGMEs+K8mv\nPVk+J967wqa01K242c8tJDEvQMjmtqq2t08oOGAv2qpISEUkSr3XqbPjq7HNwjMkLSwz\nXnS2qq6xUyc4bS5jrEg7QidAuL+qrduxr8rIOSMqLTFi7b6qrK3NKTHZOk6qzz1NKS3I\nxbCpxbiquMVZKicvLzdO5bCmprMxKEpDN72vV0U3JjfNvquuxq+rt75KKCkuLjdD4q+j\npMwtN0w6YK+0TjgqJ0u7s6u3wqqtvdYtIS4xLjs94Kefrz4tLjM62au0QjEkJvy2s6/C\nv6msuNorIzAvLTc2xp2esNYzKC86xai0PyskLcWsr7q7tKemtFYuJiwvJyY8qp6jrdcz\nKjB6sKm2MSQkL8Otu7ywraapykk2Ki4nHCm9qaOmvFsvJi3Lq6euOCMqMD7I8eCrp6qq\nvkXdVCcdGyfPraektD8vKS22pq+7Oyc7TzlDOz6xqK+wws+suyshISdevLOrtjwsLTe7\npq/D3DtM4zo3Rj52u9zar6ipuDstMC4+w7q2tzkqN0q7qbbPwtPM1jMsOT/l0TZOraen\nrNk+Myov47y9wjsoMUZevspaw77Uy142SFExKi5Ks6iqq7dUOS0t5bfI1kAwSt5UW0tP\nu7TJy2Net9stKyw2xrGqpq1wPDpFva6+110+ZfA9PkY/5cj6yrOwuVMwLzQ7aMC6ts0z\nMUBft7PMzcbPzE8vMDc+WkI9w7C2u+s5NDE397e3v1kvMEVTxb7avrbGxvA4O0g3Mz70\ntK2ztMVNPTc5zrbF3kw2QPxi+ujWuLC6xeJQ13M2NDxA17y7tLn/QEhRzbjIXFY+QG1N\nSvll277P8MjAzGA+Oz9CU9/bzctKPFb0zb7gS05LT007OUpg3NdQaL+8wstZQj8+P/PC\nxtBeRVbb3czfVuLbWXpZRf3pSklW2r6+wsbtS0U+SMi/zdNjTfnvXWZl1r+/ytDd18h6\nPjo+SNq+uri9cT9CTenM4GZeTWbeWVrvYnnZbfzGyNxROzo8P1vNyMXNTUhl69DNa1RR\nS1BKQEt65dDdYNG/xtRfPjs+SHbDvcboSkBMX+nU8X3Z6G39XFNrXEhKX9PDyNDoUEpb\n/NC9wtplS0lbce/l4s3DxcrP7X1wSDw/S2LOxsrQ7kxKXvHX32ZsY13j8VlpaFNrfWbX\nyM/gYk9TU1t88215W05u183Iz/p3b11bT0hNaN7Q4/zQy9biW0ZIU1z0zM3f71xNVFtv\n911p7e7a2XR0c1FKTVRs29PT1uZz6N3W03xUTUZKXnri08/Q1O9cTUZFRUhMZWvPucXI\n5nBCRVRc49nL1NzQ2V1xZUpK3/p3zcva6+liT0tl9/bf4n3XxsrM1m1ZU01WY2jgzc3R\n0+B5Wk1ITFNDUWXf0NDQVlBMVl1p72hwzt5aXldGSV5UXfPTy8jIz3dKSU1NV15Z+tnZ\nzc3Rztt0ZllNTU9Z/dfJyM3W7M3mV05CTVrRzMXI1t9fT0tCQ1peYt7Q8NTTb1dQTk1R\nYtzNzdPlcHluYl9WU1xgdNnT1Nb9ZWZPTE9QcNPL1+vQ4uV2XExKU1HbzMXCxc3aXEtL\nSkJM+XTdxsLL091rTkhGSlvp2tvZ293e/1xRTVBcXF7z5uPX33FpYFRRdl5RX2D2bO1s\nbu1aUU5Waffz5d3c3tdoTlNQSkpZZuzNwsPJ0/1bV1RQW23p0czLyc3X3XBWXmVi5tfW\nzcbQduhlXmNmWVf28dTLz976a1xTUVRfY+vL0d3a5llQTkpGTV7829Pb7ulrSnQ3QrMx\nRbA3PrdjXMVmTUXgPTi7Qzu8TEzDXmXCyUbZaSq7uzC0yFa9J2KqLXa2Lcm0NMq7Pr++\nOMrwPr7jfcW9W0ytVkCwZjfNPEPF0cLKt/pDulY5v0NAvkJIxtlpt8Yx69xAw2O/tCxR\nuTbTvzHRwC/f2TDFzTfAYzvA1jm/uS3Kuy1gvzdNvjo52W02vr03071F/btG3rxNS9k0\nPbhIdsU/xVs/q8U+u1Q9u19AuOBNt1A+vE1KxUhKvFQ/tFQ/sd8+w2tAzMtKZsM7SMJD\nUcJaYMlOZclo77lNQ8NG68tJt08vylZCvmNCwt9CvtY/w/Y/2lNI1vdOu9w/vFk2zWs7\n3uhFX8NWTbZbRsVNSspXVMxJRtlFO8L8Tr9Q680+u71Dyt5FxtBG08xF29lA3dNzzNr9\nzdBNz81A1MNGaMpMa7/cSsjwNtHtOejsQ9bbTdDQV8rNPWhtQtZNT8s2QNs9XtBG5sJl\n1r5o1MNb5dxT2tRF5tM03MA23LNgyrZcT9RGNlk/M05KRtfX2bzJ17/ZTr/MYMZedLtD\nMMXOLXqva9GtveLc3TstPzYqPUo95rbJtq3Pu7ZNXt48StNMfLYrKqo5JqS3LaukXM65\nYDsrLjYhLdM0S6OnWbOhRTG2Qip61kjuszQkrmkjq6otuaNX0LRiQj4+NCowOzowt5rA\nb5q0JrfCIz6+UV62VjC2vyzCqkNit7y4a9uwOy7KLR87OyNDoatWpJ09SKgzJsVWNtPW\nJy+wOy2nuE+7XrmwPretLUPAIx85KyTppr5znaM0vqo5LU7DSjPfKSe0NjCmsOjIt6jU\nSKfUI810GiY7Iy2tpv+0mrY8sbBpM1u5MC6uKhyoYB6opjHgoKdbyKFQI9FUHSE8MSmm\nnTGvlU0xoawtN65GHuWtKR3IsyM/nT4onKYxq6FTMEVlIxo6Px2/mi9NlcIunp4sN6NJ\nGmatJyqrOR67wh1cm0tLmqRIzK9MHy9eHB3rSjhWtqTGqpfWTKFDIExcNi1jrUZCtyAk\nqDMqna1FqKG6UMW0KyE8LR0/qjM+lKoonJ0ja6Y8KFq+Niq3vCs5wL0oJqs8HaOqJKia\nSk+tzSgn8zAfqKsbyp0gM5rZJ62kOzituzFwrTEevW4XSqErI6OhJ+yVwCafnyNOoE8t\nV8a+Iy2sJiCuPSGuocOun6nN0L4dG8whGbveJLyevMabtCaw0R3XrDlcpqZbSL5mLyEt\nPhwmsTQqo6lNsKqt2SqzzRnKqB04nzwmtLQzWaaza52ZMC+fPRe0rRcwnDQnmsAdpqoV\nLbAcGrbMKMihoa2tnawzubgcJE0jKkVcqsDDmq89pK4qYrQ3NNkqKUwpIEhWY6S6z53I\nMKHJHbNIFcW8HL2cOd2Zwim90y0qLGY6Jq+qOKybzcWq21A3LFAnI79AKrGzPdStxkaw\nrTrGoz8tzU0tPr7aLvGvLD2nLCevNyC+vyq/nbu0nqSqvMy2MyRCKB07SDfWuKqswqev\nNObFJytrOClG7zRDvz00uLfGyci2TDS3ZibCyCS+pza+ndZGqNEjNzwnKS9UbTuvo8at\nnbbTtNk/My0+KyfmTDC9sfDArbfFtLj91LpDMTYzPC84vkI0rtQzqr4rubcpVq80N6y8\nTbi6yNdK1GksPlcrNtFUb722rbu/rNk+xVYtRew8POhXPXfbOle8xsDLyb5GSrs+M7hJ\nL7HFNLawN/qxNy/XQjdMWc3X5q+z27a2Tln3Qjk0QkwzXL5L7bDFb76/VP/NQjzbRjFF\nSFZ2W73GQ7+/Ns69L02+NDy2ZT6xsem+uMjeTF5PLjpNMT3O6ezCvbzTzr5OQNtINlZ9\nQk/MbFTCzkzDu9TO1s3tQtrWN+7FNt6zTeCu90C+/C9IYDtAXtnUdL+77c27+VPXekxF\nS1w8P9dRRcnKaNDF4m7W7U191khFUE1USWjQTVu/VlS6XUK+6T3KwEjou/Zfz972V1Px\nSD/xVj/cynHZxsbUfc3rQlv9Qk7Za1na4lFv4kpTz+LZ0OLNeU/WYEPQdkDJyknPw0JR\ny0I+4F1Kfd3Z39rF0e7M3FBdYE5JSWNWRt7QWdnD4vzL11f55kxU21RLbfrlfPDMfVnM\nbEvI40vL00rXxlRrxutg3eLxXVroVkZ6bEvlzfDezdHgZu10SFFpSU32Y1NrfVdl4l1b\n2ePo5mXoZkpxbkjx21HXyGvdyldP6U9CZXdZ7dzUzdrW2m3o5lFRaV5WV2l2U2vTemjQ\n0e3a0+/x2v9l3uZecW1mbl3w31vx0WPpy2Jmz2hU2vZR69pjc+Pp9mNpb09Z9FBXz9b3\n2tTbelttX05edlde63NbaF5NVm1UVuDe3eJ64HpTcWZKbfdN/NpbedtbXeNbVt7vb9fb\n4Nfo7u9ga21WWXb5+fne2Xzv2vB04PFs5utdXvb0dvDi3dv29+tgZWVNZdtb6c30z9BM\nVMrXSErl0+NaVNfNa05d09NiZtPR+mNx4N5WTmvm7dnpOkDKyO1RS+nQX0tWaevfUUZT\ndN5sS23R7eZ3WdTPTEJe5u9gVunK01tb5t5gT+/aW1br3PBUVPH6T1Hmze90yu9GTmPj\n3l1i4N3j9nNx2cniSlzIzXRxb9/MWkX0yOVRX9rN1GVe3tZwUFne6FnozNHb8PbQ7FF3\n0OBRbs9jcNpjUE1DSl9o/HNs/OljTE7g001GXWN2Wz9T12NLVtbL1txo081rUW56U1nm\ndl534tD0Ymzd3lxUbNvbZu1zVHFvW+De7Xds2c3U5fPg3lFFadP25eluzc5UV9HRb1Z0\n49ndW15rbEto12VjzM15YGj86GZNXubfXV7ZdmjWdmvbdFtoX/xpT1tu92lOXc53Smjo\nYnZeSlzwW0hW3tP/fePI1GBc7fpTYNv9Y+nm1/9mZXHxc3Dw0d7t1O1OZWlW6O362XDl\n199obetpWVFj6/dtd3fR22Xo4Nf5Xl50415IV/RfTm3ZdOzP2d7vZm99X1BbYnr3bevz\neuPeYmZ8VHx0aeBrXGtwWU5b4P9ccPbm3uJl5tbaeV3b1OtrY93wXmht7W7r3ujz7PPa\ndFpe3O9l4Obg73Hob1Fo7Vl8fGnbevnx6GhOXl5NUGnl7e3s49nsW2xdbF1NZWhvW1B5\n42tc6+Js/fBgbl5PYG1rUWh83eLj12x32nRdWWtt/P/w3Obxc97cbO3a3fxt3uPmeV7m\n7WtzaN7aee/gz+VeZm1xY3nt49vvdtliZXx57dng7ehgZelXSl7/c/ZeZehscXn9a15e\nWlZ39+nwYHHjY1NfYl7pVk/i8GZZb97j5uVl+dP8Wu3vUel3TWDraH3gc9baVGnlYmVg\nXunO4HRlTUhe82nWwsnNzvFeWUhFWmJX7vTcy9rp1sjL19fZ73r2Tk3o9FvfXt6+OSQ3\nwruxuErlrcYxLSspP2AzOLutrbDNSF1aQkrdysC6vtHX6FBM6+LszeBUUVBLU/fTzdTL\n1El57yQeOc+tmqY5PNE/LCQbKqyksbC0u7N8Ix0qSsa2r6aeqFM0Pk1bW1navtY3OGDK\nu7zG0PA/LzE8TrtLHSe7nJemMR0mysYrIV+knZ/tHypFLCcrUKSVmK3I+S4nHx9snpyp\nyz4vNzk+t6m3Sy0qNEn3yLvC22DIujEkLy8zvKeqpKPiKCMkJzA7SLOnra+2yuhTOy0u\nPkbQqqSps9F5QzMtPr6wul4vOdzNu7a+3D4sKjtbT01mrbMnJt2to6svJGazSycqSKqd\ntDAmIy5LQtqpnZym3iceIzjQs6ukpr4tIzHPra/0QEg3Mz7btrDDSF3FxUYjTaDIHxgk\nsJeUsyY6wEAgGCavmpWnNigwQjAgLbCcmaNLIylMXD1fr6e4Piw2vrT9QE7W10I0PN/J\nQi83vKZUIzyjnb0nGRhFn5eeVEOzyScYFSisl5ezMUV5SjQmM66do8orKTxo0Lext8ow\nKjvryNdXb25aT1HFt8Y4J0+swiggPqmXmtwkGxgxrKOepKqqViAaGCmwnpyoSzc0LDFQ\nv6ejq780Hh0rzqShtlQ3PEI+V9TTfDcvSbapzi9Frq5iKx0jvqGbm8MoHxocN62al56z\nOSEeGyHvp5uatCodHC3KuaqfoK07Gxckz6ajrb5MNjA5w7C7QC5TvksrOL+knKouHhom\ntKijmqRIJxsYLa2bl6C8RiwjGx09qpqXpzwkHR4u/ayenql8Jx8fLM+sp63uOz953j07\nw7DQNiMfPqignaovJCEcMLinmJi3Kx4YGzqsnZqdrD4jGhcjWq2cmaHMKBobK86poaGm\nwDgmIDBru7S+s63xLS1Gt6SwMSQjMLSrqqGzQy0cGjytn5efSCQfHRwvrJyYmKc8JhoV\nIDy7nZmguzQfGyNLs6ekultbQjcvLFGtqbNNLkC+sbB6LzYzMc+3rZ2mQCofGi20o5+d\noGYgHRwaLa2empeh+icaFyReva2gpr5RLSQzUezMvrfFPjA727CqwkA5NlC+wrewdjct\nIS29rKafrT4mIB4gVqaenJ2tMB0cGh07qJyZmq1DLSEcJkLct6+94+PpRkXKtr7lSDZI\nvbu8wlBISztTvbOpq1ArJyEqzamhoaOzMCAdHCTQpJ+dn7cwHRscJG+so5+kt1YzLCwv\nPUrju8VLStzCt75LOj9K07/KwsZWRjYuXbGtqqzwLicoKjS5pqOgptMnHx0eLcaknZ2k\nxS8kHyEuV7uvr7S/0OtDPFneYk0+O2PFw8LTVltQSuXKwrbFQjYvM+C0qKatr3wpJCQk\nP62ko6Cr+isfHiM6vKynqbHcPjMwNjtATt3K3k5N1MzNy0ZAVEje1O3MXklGOD/Mtra4\nxUM5PD1CaLOqrau4MyQnJy1xrqOgo7BPNCsoLz/ZurO6yNP9T0JDT11bSEVo38nJ/F5C\nPj8+fNvNvmw/PTxN4Ly40c3CWT9NQjvGqq6ur1suJyYrPLutq6atvuZCNzc+Rk3fyNl5\nZW3OzOtQQEVKUW9PXOlMTkk+ds3Lw/1JPzxgc0jKuGP8u1k7ytBKva2zt7hfLCouLz7A\nsbGsrb3M00s3QFlRYl5LXtDI2vxpQkNIP0xQWeZRSUxDVtzb3VdQeUo8a9Bg3mA7T8C3\nub3Nbcy+0Nv9RTg3PT9ew8C8t7fA0dHv/M/oWlFPUFTe2dvL7V1bSFRaUF9PSk1JXlpD\nU+hLQt5f1K1pKS44aK2hrV7O7DhKZk08UOk/Zr3Oz726zdbGZVrU3Hff0Gxe6Vtr1M/Q\nZVFKPD9GQkhIV9vsXe7tRlNILmunuTw0Kinbo6e4scZAQFA8Lj5GPdCzuMC6ucvIyU1A\nTlZez8XNzc7pU1H8ZmnZc1lt931TTVlcVG3tUM++PCpXtMXUaC4q8bTDvbfUTWvtOzY9\nNjNOxcLAu8XWw7/XdltGQlbe19nO11xlZlFo3uZrZfR5XFFPSUVmTz7Mscg8PmLewrpW\nMD3jysW+xldo0Nvg3GhDPlPs1s7Z+fnUyMXDxtNlW1tNWWZca3lv6d3T3XTp619UX1BM\n3Fs2Psy7zOZUQla9vllAP0JMzsPb9GBRX9HG3VdOTVNla1pKSllt4s7LztFuW2Jbae39\n/e3d1N/0+mhbeWBFcL7URUNWbdTL+kNUzsXGz+1KTXfi1NHoTUhW/dzX433s2czN4GNT\nSEpQUGl3fd7e6ODa2el0fXRsfOP85cpxQ1/K0XdaRkVry95bVmvdzsPN815MTWLg4GJP\nTVFbcO39XVtm7+Ld6W5oUVNZV1xeXF9p7+hraHd3et7tWdnD21BRaX3b119Kbs3FyMva\nXm3zc/ZzVk1Xdt7X425eX3fj3ullV1RTUVNjaHfr+Xrw4+b5aGZpZWtzZXrR5Vrwzc7X\n3W1r3czWbVtj8N7M0O59bFtu3vFeV1NWcOv6aFtZYPbe3u16ZVRUU05TWVtbW2h3bHnx\ndm759GLoyt1WV2Jg6NxuVmvaz9v27F9e8e7r2u1daPTp5e5sX2Z8/P1jWVdXYnNw5t7z\n/XFmZmhmXlNWYGj33+Pp2dxgZdvU6flwYO3Ozdn2ae3m897rdvd0aOPX5vD9aWNraGBd\nXmh29O3zbm10ZWNmX15dWVlWXXR59u56cfp6ZnTrdlto3t7j4+1seejp/F5iZVtmdvTb\n22VUXm38721eduDe+nR5ffdvXllgb2ZrbW/zdl5cXGZ6c3Dr293e4G1l8+htZenc19DR\n3vFoZWJaZWtt8N7c08nM3mhQS1BZXVpo29PW3Olt//lPSE9OW9/6XubZ/XB2aencbVz3\n2druXWDe5V5m9Hnx6fzv6PdrfPdtZWZmW1RZ/9nd9HN28O1eUFRZU1lXUF7x9vTpbWbj\n6F1ebWZtbF1x19Z3Zfz36PRj8NTf6d3m/HRiW3fo/eDW3NfN09z5T01bWmDp69zJy9zi\nb1FTTENNZWnf0el35e9tX1Ze9vpiY+DN1npmaO3sW1z0bmnw9Hb3aF7x8W7p42xpev3f\n32xmbFtjcV1g93pv9Gti+W1bcG9f5tbzbnZeX2BUVGPt+WJeZdbPXlvibGBgS2jeVuPC\nz9DFz9PWaP/6SEteWfnX3tbW6dvwVFpeWmZibtzm7tv/XVtUW/9rYubjevZ68e9USExl\n+mzbzdHDy1Hp0zs+20xJ1Ovm01Nv0ExIdFBU4v3l1/3f0fde+dnldt7U3tnX7+D8S1pw\nRVDuac3NX8a6YOPoNE3rOk3M1snNyb9aQmNGO0xibO/cysLN1tRzYGJadlxP5tpWSGD0\nUO2/Pzu730i8xWjDcEVaNDR5ODe/2detyWC3ZjRTSjtO6c/IzcrNbVZdTkNQu88vxatM\n2q7T185FW003Tlo+Vnm+ukj3vj5A0FfXv9C+zkjQWzRWPDCxyiHDpjbepr/NzE/bNypb\nSDDQu+1Pya1DKXRgM13IwrfKyLhvQtZ6QDomO7dD46OsubHKUzcsNjQ2X8i0uUa9pi4m\nwjEm3dDNt8Cxt0bTv0UsKNdILaugvq2ry2YrKkAqLMXKYLyxvazIKkhIJjnXXrqwu7O3\ny3EmIEY2PcW8np/AqrAqLzEhLjM+t9vNq7Ot0zpXKiA4PkC5rKSf2yjCSh1NukK/xrSj\n/UqvPic7Lyw7SsO9vqOecD7WQCchPM5FsK87r7Azv7s6v8tDTipDyDTPr1te+UA+LS7Q\nq+86r7svbLO7vEUmfdMo1KvAra+7tEAwMB0t6D1NuaiqycLLLXPKITrCMMmut6NNyJ05\nL7o0PPBNsb9NrLkmLL8+Kde9Uzxcxbu0RUDMMy/cxkMxsaS3p6e9zT44Kh0qNzfFTUuh\ntj+wzy02JDdgID+rdrGpOuy2S8q/1qOnO829KCg0QkY2PEO7uOatrVtQ5bpFIDBCODE6\nrqmuoJ6jr0jCyB0mPyMzXVGtyWujt0PIPS7X2TM4UVA2JjSss9mhmqS+aONeOyMjPC0r\n6Lm3Xsikt+3a3ro5IzEvJy07t7booJy3rLc0PykrXiQutlfTrWA7zdRNQE+qqjMuUTMr\nMEm5t7Stp6G2xrdlMSs0OyMnPkVUQ8CmrrOqrr43KjknIz89dKispqbDqqlJX1ArOk4v\nLz5OTCgmv63NsaOs3DEwMTM2Ns2207mtra+/tLDXVkNGOyQmKyMmMPSwtqiftLzGLS82\nMMpvPrGvt6q3dsrLUUA+xbE6JjEtISlLuLq6sLazxVDG2zk7SuBPSsm/v+Pit7/Qwspp\nMygwKiY7PlG0u7Suz7SuZmVfPVfdWV3ezdc4NMa33tO4wkgvMDc6Oz3Wu8m5ra2wvru5\n8FRKTEozNDwzMT7Rs763qs3cyC8xSjb93j7As7+xt+LPzVBGQ2PCQCgwOi8vSsW9u7/G\nt8BU4HA+SFHrcErRxdbt6cXLYGnzZT0tNDQsRVtItKu0r8XFsNNO8UlX0GJPa9vXPC1Z\nsdZAzMVXOjdF69ZW876+wMK9u8vN115MQ0I9MT7UOC7ez8zI162xTdPORk9DV79QPsjD\n0NtCV8s9S+Y8yMgqOcJK2rfDq6ppc9NISjgzSkM9aUZKysZWPMvAQ0jKrrZdzbxNNDw+\nSt3uzb3IzfxXfFYrK8JrLNGz8Mi8wLC04NdXOFBDLt+xU03O4MIzNK40LaxTML2uwEjJ\nrVAqTXA/cNa7tMjfzkksRU8rXb9CyK6ruU2wuytbay3rPS+9zUa0uzHRtyMttDw6wL2q\nys6oTTu3RSs/290/Za2zMD6/LSZNNzm0vq+nwLS7QGlGMy5FtEVFqrQ0Wbg3Ntc5M81z\n6LTFtrFMStbwMS6zYi6ssSRtpiottz0x8E2+rNnCqM1F10UwM3xaOLSzLb2qL0rNNkXw\nPNerTT+q3jauzjDlyTkzv8YsxcAws3Qwtv8xrrMq0KY2MavKMH3uP0jdTTGzwzCmwCqq\nxiewtiFNqjQ2quA6tFRGttk4Pso8MK5cM6S/KqytKW26N0W7WkjXX9DZYElK1C04qEIx\npMIxqL4pu2YtvtM6yNs/v8U+O3b3LUqvOzmuYD6jyDCqaTG2SDe3Sje+vlQ339EpWa4q\nOqZFQKHKV6xAPrc3NM08Tczdwjo/ty02rTQvqd09pMVIrEg5r0I2yTdFzFG/TTquOi2p\nViq0yzuqv1CxS1uxOErAOEpoVrxpLbTNKrbKKs3CO7O/S7ZXSK5LO7s6Sds9070tQrAw\nPrA9NLdjXcLrv15Ats44vkY8zUhZ0Eg3ztE0d64xOLBwSMK+5d66tE3jyjtJXU0+WeU2\n1q4v4qorPqd5OrS3V22wuzbduzA3uUMrwtckuLEjwrAs2al2QLOuNmumUyuzvibltiot\ns1Ejt7ckZqo7Oqa3KqqoLcCnNC208yjtuSwus+Mg3KwjOqNAL56/K6G0MLO+L028PC27\nZSdUtkUty7cxXqdKN6TFLaesK7epJz2mKy2wMS3AUz3MVjvxysxIQKu2LbChMe2hLDyk\nKS+vLjOxRS+6tjBAtFA708562r67UfyxTju2PiazyiO/rSRprSpati87zUhNuLlPab2x\ndzexxSvFsTDbqixKrTA+uzE4uG42y7ZcXLrFWszAdEvCwEDRvTpcrzgvtEonutoows4u\nxbhL1MJDQMLCW0bOtkNcrVQ4tEors04pv1swvco34rhUPtDXQ1PWaWjWxmJOwGtAwN40\nwrQ48K09RbA/PrtDOtZdVMC+bVzbxtM+17s6U7FXSq1OOq9iO75XOM3XOkrMVj5g4ktP\n5vpKdL5aVrptQrbTL8u+L1y2Nk23Qle68FvMYj5W0V1CRdDiPM++P129Okq2PUO6UFe2\n1kvFw0hI6U5AUFxZZeLQVl/KVlTCdka4vUi/tEPduEJUyEBC6VNR09NRVODUY0bR0T/j\nvk/vuEhPu09IyFBAzdxAXMpXSeLrVubZ+m/Zy2N6yl1PxXY8y8053cU5Y8g+XsVXY81c\nTN3bXFZc0fFNydBF5dw769Q6Y9FG/chUV8jeTejWYGjl9v322+ZQ7uZIYtpDVsBZTLzr\nQ8LsQ83rSN/Wc9TK6F/64u1OacxXXsPoU8NtP899SNnoTO3WUE/f/VF32fbt1+N2ZvBp\nT2tlTG/aTVrJaVDD4kzN5U7a3lnx41Rb3fFmXXTXXF7M/VHUfEjT9kXm41Tb0GD6zv1R\nefZZX+t3+t/gaFn3W03s/1DQxl3jxlZZzlda02Ne2vxj3u1TW21zcVnw3lv002bszVRi\n01tZ+lZU82lUdOlibu16fPZ092t56F5r32Jg215W12lK9GhK9P9X2tTx3NluYPZtW152\n3vz60Nn961RL6WJN5t501Nt52eJl8eVmXfnpXmXo+VdZ3uBe7uN62dTt08xbbcz69NdZ\nadRjX91vW1lIV/ROVu1fa+Zb4uZKW+1w/eh9fNn6Yu1WUfHb6F9ea+twXXFRUODe22tT\nztxNfd5TU2bt1uDr6HBrWV3U909ed9fWZXzUZlli/F5o0fb91tbu89bf69v/UExw3nfo\n913s3utiV3D5y8tdYGhLadBpZVZJ08jr6V5RYlts09pbX+brXv3e9FdJY09L6+1bZu5t\nWl9ZXPTg9lFTeV5daVti4tDuXEtpwttZ1/BKX9/Rw9lX/fz64HDo2ezp19n9aeDmW1l3\n21td3nZ91NRoYtzZ5W9aVmbZ0N7j4Oji81tCPEDmubu+u9FRWUg6NzE3T1ld/1tu4ujU\nxsLCvr/ZV19oW1Fa5fDTvMI/Kigvzammrb/XYz83NjQxLSw22bOzu9td5W9pyMjt1MbD\nxls/Slv8z823rukrICPwn5ih0Uzj3D4uLSojHiyvnaNcJzC9q7tmW2br1+1dRTMsMUXe\ntKqmptkmHSTDnJqwTt68vuY4Jx0YH8KZmc8dHW6dnfYsSL67w87NSCYdI2anoKrFtrg8\nJh4ns5qbrbu0s7hLIxoVGUWdmL4eHeOcmLMpJzd0uK28LxoaSp2ZsyovsKOzQCojHie2\nmpSdzTk7Q04uHR0uu6a7KSFMqaGpzVnX3N5TKh0eRaCasSQeX6GftzcrKiQnzp2ZqnrQ\nrbQ2Ji4uJzHDrXQjHTOnmpymvehbNigkJ02onqxMMDdwzVtCODe8n6o0HSS2mpWmNCQt\n9rfRMSAcHSfKoaCutqemw0AvIR0gTaCXoT4kJzNMSlS9t76/zTkkIDinmpykrnEwNDcg\nGCrC0TMnSJ6Xn63JLyQrSbu01F5TSOt3MCtD1LmqqK5OJCZeu8/OsKaho7Y0ISdATU9L\nLyMfLbejpqutu8izyiQbLq2fvicpPkP8ubbbMSpCyMasnq43Lj3Qr6uzSSk/rLMvISEf\nHyQ6rJ2amqdRNjEtN+DUQzxdwNQ9OTQ0yKaqYCs0r5ubsSwcHT2pnZ2tTjosJCssJCAh\nL7GclJW6KkvAQDRGPy0nMV/2yrCzwMPfPDvZuL/ds52mPicfI9GjnZ/tIR4hQro9JyYj\nQKGXl523QjArNk4sHB0qxp2VoEMtPD40Ua6pub2wra5QIx0hQ6yjpq5gIxoqwNEzLSgg\nPaCXl57FKiEwv7Y3HBokTaebo9FDOUOzoKG2NCEqvaCqMCMmJjutnqd0MS5QsdknIR4f\nPqebl5y7PDs8zbY2HBkbLLGalJ/eLC++o6fXMSstWq2ktDAeHCTDnpmjRSYuzLlXLSQd\nIVqjmp2xTkh3u7suGxwdIVCgmJ2uPTDFpJ+vMR4bKMakn74nHSA0t6CftjovXKyo2SQa\nGB1doJuhsMXpyrPmIxsdIDavoaSvu66ko6OsORsZJmutqMgtHyZNu6egrU053K+ruTgg\nGhwqy6aqzde3sKmmxSYbHCQ35sC9tqednqGodCcfJz99PCckKTS+oKO+bGXuu6uosz4m\nIB8nO/ZZMzbFpp6dnq84JCMvRUI6LS7FnZiaoK/iOTE0KyEfICnIpqSqy0bDqKSnsEoh\nHSk6QEI0Kic6s6SgoKrMPUXdTS8nJicwyaadobHCxsCzwywdHB8u1rawtsK2qKSntzck\nJCo6RjMrLTrXrKGnvczU0bemnZyUjIqNjIiHiIuMi4yOkp9OHRQSEhESFBktuKakrd8t\nHxwaGhoVFxon78bRVykfHxsYEgsHBwsPFBscHB0jOl9XQiofHBofJCAdHyEpZqyjoaew\nsKyqsVErJyxMsaCbnaGnpqOjqt0uKy8/291KPkjiu6utz0A3NDxMUDEgGxwgKT6/sbaz\nqaemo6ewu76wo5uamp2dl5KRlJ2tzm3NurS85UxavrO4yk0zLzMzKyQeGhsjLTM0MCkm\nLT9RTkg3LCYnLzg3Njk/YL6uqqy0vr27uL5QMC029K6jo6itu7+5u943KywxQnR9U1Ht\nxrivtNRRSEZT3NNRNzQ3PV6/sa+2ube3u8PmPzEuM0Vt9nZaY8Kxr7bzNioqMT5UWU1Q\n77uvsbnG4N/Kw8rmUT8/bsbCu7jN8MO9tLC2vM/izbu+vsBrTFM/QF4+MTY0NlbMaUlN\nV8ivqqyzu83r5dluSkNATdnDwL++urSxr7HA8F5QTmjrd1lUY9nCu7Sxu8XFxs3Zb0w/\nPkJU7et3Y2XTvba61Eo8OT5NY3leWfrLvb7K3VtQWV1RRj87PE7i0M3aYlBa2sXDyNdc\nRT5DTFBUWnTZysPD0V9IRUpUXU0/Oz9jyb6/zHZTUF32419GRU1b49TtXlxt7dTL3k9I\nRUNOcG5TRkJDTmvj1t9eVFpbVlFNRkJDSVBQSkNCTvHTz3NDOzs8Q1ZmVE9g8NnO21pJ\nRklKUVtOSUpOWv/idldaY2Lu095eV1ZISF79a+/U0dPP0+1iU0lIUVxTTlFc38O+xs7X\nb1d05llPX1pX28jXaPr0YOjGyN59bVRNY+tmaObl9NnLztTP13pgaWhaVldWU1ZdXV1w\n+t3DzkZG8FQ/+chKQsO74sy51Ez230hFV0U+V/xZ48XJvrO4ysPD5dnG3FBNSkBFVGjm\n0MnGyuVlecW8RikwzchJ07lIObiq1Dvw0ElO6EkwNOa+21fQvb22sb/u3cW+2UNIfWB6\nw9s+Wr2/ysLMW1Nc4+IwIDCxvjtNvrCordtDMC3d0yAaMVlIubFowKOhrus3OE5FNC8v\nRru3vby+t627aFlLPUpFLjd0Mx4up65IwLCtoKgwITQ+LR8aJ327o6tItpugWTY0KC85\nKygxtp6kraekrbfKNicsMS0rLzvNsHwqYJ6n18a8raHcGR43KyYbGs+fqaqqsKSgWiAe\nHys2JCbWo5uZnqiqrcI3HRojLSwzYMCtnZnQHVecySZCa7ag9Bcf20UjGiufm6mprqyf\nvRsYJiguLSq3mJWZobGrqD4cGxwhOD0/vaiemp2nLhdLqCgaL8CbmyMXvrAuHh3NmJ2z\nubGkuxsUHyQtLi2wlZSbpq2rtikXFR02SS9loZudnaaw0BsVOzQaKL2fj6AdNp7GIBck\noZq30LSkrCgVGikvKi+ul5WdpKqtzSAVGSY4ODa5nZuep8DKzykYFyYuJEunmZKtL7bD\nIxUVVpqqWrujo0AZGSk3KSyumZWds7SrUBwUHDBKQEqqmp2qwM2/TSAbHiQhM7SuoJia\np667JhcXGjS+sKOem6cmHCYkISNmn5mcpqyuSh4XFyZp18immpqwSELR2ycaHS3ccSlK\nnJeeo6GrPB4YFSE0L66bm5qsPiofHRohtJufpqGh1CAaGiMxT62dmZqxNzBFOh4eRsXQ\n0LGtTc2ep1awpzQcHBwbLbijnJqes3QmGh0cJ7aenJ2bozcdHB4gKrqdmpihykAxIxka\nPK2syN+omq4cG7SoLzSvXictJCHFnp2goKRfIBoaHChop5qanKHKJx0cHSHXnpqcn6fL\nKRoVHTu2qqqknKdtLRcaydEqzpqa4h4pOjywpq+npEIbGhsaJL+gm5mbs0spGxodMK6d\nnJ6fqjcaFx4oOLujmpmmVjMnHRokxrCtnpyxNCsnHy20qa2ouyYfKCAkuJ6enJ23LB8d\nGyPZqqCcnaPGJxsdJCc9qJiaprdiKh0YHOarraqhmqkjGSchJsCqpJukOiAjJiZGpJ2k\npK8tHR8cIMihnpybqUYqHhoeLMagm56mrUMcFB9Q1rann5egJxkqMSAg45uXqLPALiQg\nGiqrnqq2rmghICcvyaOgpqGtLyAjHx9PqKOdmacoHCovMEVmrJiXvCYtMTQkGTubma/X\nr604GBcza22xqaegri0hMD464Kmkrr1oLSQqJy6nm1A7oaFtMyYgMcOxyFB9wL/NLBo4\no6vOa86jriAZLnQ7Lmufl6jz4Ek3MCcrv6atvbfAQzcjGzaooamqqbwoIzcpHjTDr52f\nRizX/zYzKzannM4nMUNdSCQ9nZuuwrewWR0ZLXP9rqDDM8O2PztDQraqTEKouyQcIC1t\nwK2jrK2n6SoxJhw9q75cy8axqkMdNqiqyEtaqqc4JCAdN8nLp5ykrsMrHiZCazMxu6ex\nxUBFujchz56muc08My0tNDRLr6qupqg+MNrPyeUeHamcPy3tr6Q/Gj6mw7y4NDYzHSe/\nz7uhpMNIRVdXLyo7vLZc3qi3KyQzXb6soa0uSa1ZLTk3Y6zFOVlQLOmjdh0ru7HLLTug\noTcqLze+xUuto9lASjQvQ9Db3cCqszY7zb7NT9qko9xFSCodH1q2Ni29p6y7Pv2qvjrT\nXB0zp787SEO0syQnr62wqU0oQDss8LOvoaPNTO02KSMg3LAzLL6zay0sv63Ct6GqMyzj\nzT4qKluzzDhUw9toyms2SL+wrLnJrqtNKicmM+W/3mJRSDg2N/yqr8i4rbBLKTy0vjM7\ns6nbLztWOSc/q7ZmzLCnrWg+ycVDQEwvNOJMOD00P8VNN8Kts6y3RTQ2QGBd+r271zQ2\n8+4+Nu2tt0NGtrFDLvaxwtnCsMAuLUhDLyoz3shUV8PIya67V82+y8V2QsjINi45NkPM\ntrS+0b/CZmXGs8ZbbdnNRi071FwvN8a+SDdIZUs+y6uwxr+2tMo/PltLOUVMN0jUYk9T\nVMC67tO0tr29dj43MTdIQj9u20M0RuZtYOi+rbRlervDODFZcUtQ28N6OT5oYkxG4La6\nysW/1/bG/UhXTEhXPDRKTTY3Q0rUuLCusbi9zltM5stQQFfrXj43V8PXSP20t9nZxsPj\nTOK9xk1KZlY7LTM/PD9TVkjfv8rAvsq5vWt30+le8Ug4Oz5KbfrWycNuS9C+v8/Uu7je\nPlDrQjE0RUNCRlPRW0Jfys7507uzvtDM/UlabkNGaFNj5k7bu8p23dnZv7y9vs7tVD89\nPlNIOz5CTU0+RtHKUE3JvM/2zM7fYE3z1ldDWdTpS0rez+bUytHPw8veytb3zls/SlZG\nRVNFP0lLa/f23N/aU1TT2tfo68nNXUr56ElCTuzg2c3Au8rdycDG33fJwHFKUUk8PUI7\nQFFTaPBf7Nd0Xl9WYNfR0MbZZXNNQ0Zfdlfp1szF5XnCu9TbvLzFzeNz3kYzVEYxRkY5\nXtk8Wb1gbr/RXs3ZUG1UXGxASu9QSddmSOlwTdDC1sO6wtfNw8/Nz/zp4k07UFc6Q0ZU\n1Ehv0fFXRchpSsLPYsa7Q07PQkVoaEl819/lU8rJW+LIbfa3yOC7xld03klN3F5GW11M\nWVZOZs3WQ83CP81RPs0+SFdbU0PRVl7R/FfZyEzg2VZo/e9e6Gba6U3e5l7tzVlfymZs\n0NTp1s1u8NH/Y/FuXGJtPz7OQzfTVFTUWc/N3tPPxdnJ0VnQzU5C7E4+93lUbs7c/Ojb\nzenZyt7cv8XoxcZjdH1MRllTQ0pXSUxbS15taPNAztNCykje2z/NWWJWaPdI3WNPac1e\nV81eaX3i6P/W09/23+nt6NRuYM1zaNTgeeD6T1deW1NUZVRZW05XSd5aQMZf39lXvWNm\nyM/X377U4svoS0tmSEhWWW5r7M3g2sXU0NDNzdnC09zTaF1ZTkhRSkVZSU9lTltl9Fz3\n6TfA3THCSVr3Pb9ZTc3R/GK/7lPU2lpM5fBObe/pX17UXVl83tZtv8LfvcLNzc3bcXpW\nVE5JU0pCTk9ASGNA4tYwt8w0s17wxk3DdlzWyF1au2lN2vNPSPRsTWvr11nowuXTzr/G\n37TDbb/UTldgQkNMRUZDSVBFSlNUSmLaQ9n9Rr0+Xb4228hJ78nv7cZd0MhN5dtNT3ZU\nSf9eXtpxzM3XwsLF2cK+YtTIUE7lTj9UTUJGRUNFRkVMV0a5SjGjSTaoa2NXvb48xb/U\nRc++OEjgUT1G0VdK6MbgTb3C6ca7vfm7uVzK0VFXXEZGTT5FSD5MTkhDYmVr0C3ppiw8\np+YuTqdKKa+zNj2w2TB53E07QNb2Rly3xU27tsnRu7TLxcPKykZa2zs4aE82TXlKTVRU\nV1/GRi3RrFcjrqMjPqa4Jz6hTSq+uDcx3Ek+OzfI4DvZr8BOrq3QvrS55c3cW/E6RUo0\nO0Y/P3xmT9fo1LtFMMbFV307XqpKKK6sLS2rriM+qFMpWrxAPf3gy9fXvbi7wLS3yL6/\n1FDp/T5GQ0w+PWxNS2ZdXHTGzTQ80Epf2UY7XbPaK8ukNyi3sDEmv7kuN9fdWVdxwrzj\nvq6+vq654sK9TUZQTUY+QkhbSErcUFTcyMw6Rs1KTsB0N3fQTGK7Tjit1iPPqS8gw6ou\nLbO+YL/G0K+01Le027q3SE3FUzZIST5KTVBgcFbW1Nz0PVRmRdvDO0LNPkPX3UPpxTZi\nxi0/sy8hva0xKa2pSsKtvbetyNe53mDJRjjibTRD80NP7Vpg2s3CYz1oZVHD3jf6bUPQ\n3kpov2w/Y0Y+00043EA4s7Y0O6SmRsOnvsWz5krQVz7xRTflXjx51D9QzG/PyEhOekrP\nv0NCSj7w0VFNXXrwX0A6Tf1OVz4+12PTtms+s6G9QLaq2evCTT5oSjtaSj/e9EvQzUri\nwNRgVkhIyn1uSi1Db93Q/T5U1+bdSUhN3lZASEBfyNnmvXrGqbZG66q7QOPIS1PiQ0Vr\nVFTL8GnF11vQ10JafVDd20JAWkXMxj9AQ1fbxutfY+nOZk1CXvzp3E9v1unRvFZDwLN2\nO8a9WVnPX1PM7Vnmek3r80ZZZkBJ405IVEpP09Zi6z9G2dzWfVRT29HO71vez8rza15b\n09xe7W1Dz71ZPtSx3U3Jw+PRymbtzev3z2JP71NDWVc+TWZZ691PTW5W0ddLT0xe2c35\nevrfzOVeT/zr6d9XX+ti/8pNQs2/XkLMwuvpz+z/ze9d9mVMaWNFUWBKT+lgWXZbWdvt\nU1A+SG786XBgedTR0O1t5dfXYGleZdvo89rzacLDYFu/vGJuydHv1+BXaXdUVFxLTl5Q\nUXxxYOPd2dTwVFlaVuVdTE5T+tnec3NdaHZdT1D37d3d9+Xi7NvaT1vNz1dZys527+Br\nbelbUWNZT2ZeV/bxaObX+Xd6Xm3gbWZpTGvX1tbmfHfo6e1eWWnp5mj08OLR2+3gdlzW\n31BZ0dFWXOVuWmlfVnDza3ntZnH0XltrXldtbGn3eV5pd/3P3mhuafrueVtcV173emJs\n19rX0d7g4PPs6VFPfe5UUN3XdnDreWvtbV5ubV9tZVdiaFZcd2Jg/W1r4N/o6V5019re\n5nFib2Vpa2V63tHc29vj3eV5bmNX+uJlYN/Ub1/x5nprZlpdZl5ea2Z94/p38fxla2xg\nbHFcXnBl5uBlbPnp5eL5bWJfenlvcOnf39xzXmJeW2VbVPrZ427r23pfZmJecH1reuLp\n5dng6OX5bXFlW15fX3rl6N7p9Nvb4vprY2tz/PBtcPnr/G1rYmtrX1xgXnfg+XDp23db\nX1tTV11aaOjl5tzd6e1vX19eWmBtaG79aWn28Nvc7Ont5eLm8Pr89Ojtem38/Hd9a2v8\n7+Xd7Pfp7WlcaGVbWV1eYHNvdOng6/R6ZmNeWWBzbPDc3N7Z3vZ2W1xoZWVfYF9rc3p5\nduvg4PN5bWVpZWJreXzm6W5r8Oxra+/o7uPjffHsd2tza2BpaG7w9v3g2t3a2u15+nZw\nXldbXWl6+nx9+vfs/Wtw7e30/2ZgZmlobWlv7uz/bHp8aGBob3Tt6//07mleX1tcX15m\n9/f87fN69/dtW11zQtzWOr63Ll6xP1S9TVDJU07UYFvG31/T0dlRcMnv5sxJUMNKTcpL\nY8ZQYs1TZtBeY9b0ce/uaHF3V1/9aF/T6Uq+6Di2tzRsyDtP00ZU0WNly1tezmNUWeJp\nPl5oRsrMQ8zMSc7jRdT2Rd7oSt/fYNTb8+L5a15ga1dX11douVbwsT87s2I/xXNG1uNX\n4t5p/M12bs3UX1zN/VDTXkDG6ULNa0XNYEjO8E/X207pYkprWVdpZltbcXpT49pKztZA\nyb49Tc1aTsvacMvac9f9VPz0TV3N61PQ11HK0D7U2T3gcD7iekPo6VDp02Pb12P9bVtb\nZWVXaOhO19BNw9A7zcZQ6+ViZvB9duX0duLda23N7U3Rzkt23z1c0z/0yk/OxV/Nxe/P\nyN/l1mlpd1pbX1tbeejWzjgvttAnyKk3SK7TPlt6QjQ3Pjo2Rvz91r6zs7u3uePzyj44\n6z873GVfw83RwM/czVbQvSMtqjghrqo23afOQLFcJjwwHzQ/Ns2zr6enrK637UY9Lyov\nPD9Gw7S3raq2tLT0Ym43OcYwHMiwIziguzfKq6stJrs+Fyi/LSits8agprGpxT5RLyMs\nLy9Qxr6spKerq7PPbEw0LCs+Nx04qDwznp9XvqmqPh4+Qhgc0GUhUJih1KSd1C7QPhwh\nKic4Yrmjo6Gep7e45jMtKCcxICG0xi2nl6+xnbczsUYVJzYaJ7zGWbadnbi8qMofJ2sn\nGDO7NjehnLGroLHOyV4zLS4dHdRFI7Sct66dp1n0rjAXJjAcIdrMvqGtsJy3MLbKHCFN\nPCcxtLdPvJ+kdsifti2+RRcvzR4wocNIo6nNym2t0xgvsCEdr7cxr6BKbaPQLuJmLT1C\nLr6xKm+gTTakrFnIMSe+Vye2qjG7oywptycjo08bqqMnw5rNRrG6Nx85sC0kqqox26hX\nQqnKLcW9Q8YvHa+mJHaUrTSnqiQgLiAjRjEtvLbbpKbOqqY+XsUaIa0tHqq2JtCny/mv\noLZIcywozldIpqCtu7y+PCEmJiPMxh/rnTEnn7cosKTp2bswPLE+J+NDI3TQLfSz2rRu\nLK2kVq+apru7djYdFCkwH6ydOMCdWSjU+i49wL69sdY3va0pKqnLJ72tLTA7HjOnQzma\nl6qeoFtNPhoeKxp9nTExnL4fQuA2fLSmocjDuSAk0Csvqq/ZsbotHCZGLUaepKiXqjrD\nNhUmTSnLmt4to74bKjsj9qvIpJzItMYYLqwtOJ6ku7woGigtJtuhmpejqrMqGR8mITyf\nmK29rTggIxwsrb2zmaM7Pi4VJ7Y22Zebqs8dIDkeH6ukq5WdTF40FRokJsCamqepsTAZ\nGis2d6Sboa/QOR0VJlZmpJeewDQvLSEhVqagpJ2jNyctGxcnTaOYsbegPxwvISaqo6yd\nn2I7KhcXLeK7n5+zrLAuJzc22ba/qp1eIDcnGi3Oo53Dy6o7HCg4LHSdoK+qr2w0GhvM\nvCcsr6Ooz1+3xistvddWuK5bLz4xN7ZtJve0RnrN0a9oK7SrM9moWzk2TVsgKKan4Kec\nrTc0PSogI0imq1a7oapIHxszSDS6nZ+vvUomIS1Aa6qmLyarrS5prLC3XdCxLR40Lyjt\nqqOut6PAGhouJCawnJ6hp7G9LRgtySsaKaucpKqgofAdIzMkKriryru018qxwC8hKj00\nPLetw8Kwu9m+wj0dFzlXJ7SXm56fty4dGBwqM/OjmaTFuaO7GhIpMyd6ppqfvr+3VCcZ\nGUy+LU2kmpqwdLFGGh9XST3Qt7PORqaaQCnALBspKjeqoaSZmjEbPi0aMbCw0NCjnNMo\nNjMoKDa/rLvdwKOeLx63uCMcKM24r53AJk68OkXUt6DLFSatKCCtpqiqYzhCJBgpn6E+\ntp7ONtbUvmkaHba2Tq6uqZ3eLMMxFCNvQM2sppukQ0YjGrarJD6rZVu+TqydQ06hQBor\nPkW7u7eeniwXP1seLLCtuc9Iy6S+ICQ2PrY8IK+bt6SdSuuwJh0kHjbARaSfKTuj8UKz\nXD4+Iy3MLCmjl7otU7e2TyM2mpk8Nrw0JzovTLBFLLemt7DRLrStJyYxIDOvTtednqOh\n1zQzHCe9NCi9yEm7s7Cr5kK02x0aP7BrLz60obYfKqe2V62uXs1OK+29LSpTOs6oPkCh\nq76kwyr8Qh0jJyfWubadrze3rTtKzzw4My1b1jFpoJ/KONCzxjYmOqSuKjrIOzvKWdqx\nUz6wrdvDVCzQyicvTS1xqsu9o663szcvLx00uzszuLxsvr7Ct2M+v+snJlC32T5Lvq2+\nKi6utvq6uF1tVDBNwDkvWV/XsWs/rq/es74xQlQqKjcx2624pqhM0LNDNFZFNzs6UcVJ\nVK6qyzdPxsVFLDiurTs7aUJKytDNtuY+zb9LTkwzbL84N+Y6RbPJ3qyqxs9ILjsuNMj9\nWba03u3jzcVPOOnNNC0/y+1AQ+musTo6rrtIz8pO3M04TrP5O+JrS7/eONG8Ws3FMzds\nNCxF6MCzu6ywO0m+WUjGZkLUY1e+6TfLsMlDPG/IzjkqX7NlMGu/TNGxRTPWaUizr0b5\nr8LF6C4vSjw6V2jGq6zbQDtANCZFvlO6sy0pxbfFrtQxr5/ZMUVCO1Y0JlC07L6mwkW+\nwisvxeW7vCQdV6q5udBFqpqpSDMuNEgrGyPAo6iwrds7fDEfRqOoSSMdNqetTU27o52k\nXCw5RTkzJB5lnaG7ub5ATDAfY52hQB4gRqqwOytUppyk4jluvkshGh0vrZ2swK3DLSo2\nxqOnNhoePcbK2krro5ukwDcwcE0fGiE2t52jtKxKHSZPtqSqOh8kWbHlPsq7sKSpyM/L\nPjAmHCEx6KOan7A0HSfCqq/FTT4tKVvROd6orbSsrLC5UywjHiMrLcWbmqlUJyRTsLHe\nLkO6OCE+vFq9pMo+t6apyD0uIRwjL+uknal8NjhUTeyrwC1zszAdLbzO/Kqms62jqdNF\nJxUXJnepo7dlzbuuySc4p7QtNnY2LTpCQmarnqSppqy9Px0UGjTAuMO9ykO8pMItTq6+\nNDBFSD43KyY3r6OdmJ23QiskLS8mKC/dpLA0UKqsu75oO0plQy4tRVQxKTawmpWasDMq\nNjtPxTQcK7nPNlSzr7e0t8C3s0MgISYgM7Sut7azqJ+ktzcgLMbPOjMtKDNzzMa8rqq2\nyLSu7CYaGSBbpJ2kvjYrxZ2g5kP9Pi43SEZCNyckRa6rqKG0OjZLTDgoICdWp52p32Jg\nWr6srr32QjYqLVPiOzbpq6CgtzMnLUPetrgwHyzdybuopKq7TDNAv7ZQLCwoJju7r62t\nr6yvbCsdGy3Gv8bFSjNA1rquq6mqttPpRSsgHSQ+t6entM9LWrCkszgrJyEkMV+8sL4+\nNteuqqamuko6NC0oIyY9t6Ogsf3l5vzDucP2QDErKSo2QEzDqZ+frWAzMUD3yLr/KCZI\nwsi+tLvfSDg+xq63STQxLjzPvsLNz7yxvkguJy/OtLm3vlA/V9vFura+VDY2OjcwMEW+\nrauz0VFAOWi3zTQtNDpCdsm+trteP3m8u7u78zs7Q0Y7Li1Gu6mkr95ZT0JP0c3iVj40\nLzNI/ePItququVM7PU7s39bpOS9OvLnD200+P0lgyra20UpFPkDjyN5ZTWXDvmA5LzBP\nwL2+vdRNUG3WwLu4vvBNSz4wKys5y6+srra+22XAtMxCOTYzNjk6QFprXP2/sK+xueBA\nPUBAOzAvQNm6sb5OPUBJ2rOttL7WSjg3Q2N2aHHc4EUxMDpjv7m2tM1DSu/rc2ZRTVRR\nRk3bv8LsTkhZvq6us7a7vtNJODAuNENMRj43OGW4rKqqrrhsODMwLS00W8C8yPRa+c3C\nvMVrUG7NurCzwGU+Ojo3Nz5DQDcsLD7Ds7G2urvAzuVLNzQ/Ys/G4kpDSFvOtq25VDg/\nz7Gsrrz2PTQ3OjMrKzAzN1e7r66vs7jG3utcPTc8U8a7zUg7Rsy0s7m+wuU7Kyo72rSn\npK7NS0A2JiErNjAzb7qzrKmsuN5KRkY7P9vK/0o7ND7ZurS3y1RJRVm90S0hMbakn56r\nPCgtMzxMOCcfJtaqqqaq11C3rM0uLErvUFdFMDe+qqu4Vz1QV1m+r6ikzR8dNM2rna0x\nLjYwZb43Hh42uKujocU77fw4T8jWbT8xMzrOrcY0Pc2+xtTNwrqvrbdNIRcgzqecmrwk\nJigxrrAnHS1KuJ6k5lZwQki8sNo+QjAjLdS2ur3FRka3ra2utshFNO2r3hwYLMihlaYs\nKDlOsLomFx4vzZyZts3OKSu+yEjWWyotRUjIrcM+QMCqrK2qvU5aX0ZvruYcGi3Nnpmz\nMygmXaGzIx8zTqSXtjMxJC6urXffSiMmQDjMob5FvLu6qavKZWU7Pr+3uU4dGCBCnZWu\nPUk/O6yoJyE2KGioxb67Kii8rci+Qxwk/c6oqDcwyr6toKjGwtwsO8t60SwYHUmklZzC\nMzNNSvRtPkItJDrNvammPh07sbqt3SEpSMqmpE03wsPGqbZCSTcut57IIRwdSZqd3Mjo\nN+wqHb6fzDMjHcybnrNIHiHCwL6zNzHLPi+0ob5fTCY2qq60zDbIvi0hNreordNWvrNK\nHRc9n5yuJhpGqqeoRS3WUS1NxsKqsywmM2akmsU0MSzGqbCotiQcO6qfocMnKD5MPiQd\n6J2jPyEpwKCuMC27oK4mFx+4mqgzJCfKrddovsxlvdAqM8WvoKkzQr/LtDcYGiA0nZfF\nJCAnsJy26MrCpKQoFSTApLAuJlutti4fVJqYviEc35uXpEMxyr8uHx0kdqazNyoqy56z\nNzM+rZ2jrkgZG9Gpq7cqIU3bWk4mI76fpK7LvqOmyTotUMoqFxk/oJ1OHR04qaS/+beq\nr9EvHibKqqe+Kja3sMsqHCE2tJeVti82S62k8zQ6PruqOB0hLU3JQ0m2razCSL2mrTMc\nH86hobs2N3xUMCowXq+msVc7Qremvjo0SLGnuzsfFR7MrLHNMTm+v99PLD2ooavCQD5Z\nPi4vSLu8Py/ppJ2wLCM2t6q+Ud6+v3cxJCdKvbO/O0W0r7dIJi3sr6ChxSwtOFTISjp6\nwK2ndCoxPk1iPkXNu79POuW2wzMjKr2mq982Pt/vOjRF67esxUI8Psq2VjY7VK+pxUUp\nIDG/s75iO1a+v9BXN3asq7jPYNbRTD40PstzOTzIqKC0Ni49yLnmSFTby20+MC1Dxb7F\nUEDKusVdMTTbua+qvTMvPELR0FHoycO21jE3TFPgV0be1t9mNjzPzUYxLmiqqrdpPFRo\nSVFLYr64vMtTRVvKzllMaL6wu3M5LC08yr/sXUpa0d5mSkDWtr/X903icz5GRlbF3krd\nt6+wbzZCac/PS0rmdmxtRUNr2c/RWkjxzcvePztWzby7xk8zO13ixs933dPNyE83RVBN\n6F1Uz9d8aUlZ0XZCQ1TAsLxrRUJZTz5FSmjAu8bP7F3Xxu1WWWLFvNRcPDZCer++fFZX\nes3PZk1K9sDG29xe9+BIQktMcXlKZb65vOs+RuXb5k9J39HU1FRCWuPb0GZDX9nb5kU/\na9bAvttOQEjrz9HsaP3Xy9NQPkVQXtPb7MzP6XFOUej3S0lO68jaT0ZIV1dITVpizsPZ\n92xX9s/vX2hozcLtWkpAWdnLyvlWW/fb2/1XWdvGzOn5WWPpT0lUadPM+XrFvbzFXVD2\n3txzU/noa/FbQ01tcdzcVl7Z2dPuSVT0/NTgTUNFWdvU5WBl8drO31lZbWl6eUxTa01K\nSUNW61dKU13Tw9tfbHbW215lcHPWzfBjbV/l0XZi/fnLxd7/X1Bm4t90UEpNY3xmXFdg\n08jN1t9u795cW/Pp0M7s7czM0+BPTfzm4u9l6+h5+WBNTlZf7ltGTV5l8GZQd9PMxtFr\nVFfv19beee7f5u1bSU1ic9vX/9veW1ZJQ1FXSUpTXeDiW09Wa+Li3tfR1tDZ9O1eXtfc\n/Nzj2s3mZVdJVOjj3tlxW2L8eXNiTHTp8O5pa3bb62vp4NDL097OxcrU61lm5XNjV05t\nfWVwVk9gWV5iTU5saWNpTU1m9OzvXVdud/DX23FbXF7zdF7letfD1nrtemtPRUtTYG5l\nYm7Z1Oj9XWXo4ulg99vm2en07Vv85ltr3OvWz/du/W1s3t/06G1fXnxpVk1NXlbp1mPg\nzd7md17o8V7u49rga15NZf9r7Xbi3tvX+vBiX/xiXmlZcNt8aentfd/Xc3ZmVmb63uPl\nXlNbb19R3ungytPt729pX1NPaGtUXvx94sn2TfpgaP1eXll85eZ3evNcceZeT2NgXVxi\nYGbi39bI2m9dZXFeVk9NYt3szuDjytdt9G1Z5nZi6OLZ61RdSlrzSlBZaOzeztve2eJ8\nXul6V/fjbfN0ae3bzdvP2WnW19TWXm1vYNt2adle4+hKU1dRVGBx3uNgX21X+dp9UU3u\nX2vx7u/w19lpXn32T13dV1B06FtUc11NV1ts7ltuaF7b33NvXuVjX9NZadNaVnrb1N7Z\n0drTem5bSE/M4FHO1+3Q0NDiV3frTVDZ5m/TyOD25fZlduP/Xldp3vBg7fFp+vltU3Rs\nVOtUW9dseltJaeNbXltTTnneQ0jX19TlzdNj+ltmW1b5WVZiVuBsX89rStbW+dbb2+jt\naF1zX/T/VHbiT+vNfcrKb9Hc5c/xYl1ocV13T0PZ30jo8c/jX85taF5bV07u+dzKW/D3\nRvbPUFNwYtfcfdfRb2LWYF3OXlbTaU5KPlziWeDMdvfUye1RY2/o2kZzylPlVnzTT11b\nVGh93mBr5W3N21ziZUBi91vtVk/X3Vfp1F/r0VDlzVFm3ffUaEv9ee7c1NdKZetZU0pX\nw8t9xs3MdF59VOtdSFTzfGjM3lHf2l/oxX1dYlva4F9sZVNeWUhR115R09Zpa+bL0d7T\n9OXpW9lWSlRj20Y+2etsyN7N0/nfVGDZZll9/E1ea01RW1NFbMzR3t3ffXre4mzr3GVI\neflLXvb9XU5j6XHW0NvjaeV5ZVlF3shMYNRr93b97eXmZll61unaynZz2X1TbN5tV1bf\n5lTx7FNu1mv8w8pl3dlWXm1eXmBrc1lw3t50XPBs7M9QXtBl2t5m7FRGSmbpaGNeUUVI\nd9nIw83s7ejla0tUTT5GTU1TXvFf78rUzsXX6e3l3tvL20M6Pt69u7/U6dBiUNtlTUY2\nNk1wV2DNvry7vcj5STs7SOPbefDTu7npPjZA1Lu2vMXK4u7ma1tDMystPUtP1sC/wr69\nvr/bQklmSk1TSmzO1004NDlUv7a+w727u73DbEM3LSwxPEnwzuXtxrmwsMB8XmNWSEhN\nVnRePjArMWKxq7G9vrexuc5zOismJy9CUeLDvbi0s7Cxzz00O0BQXmLWvbnZNyoqQLer\nscjOt66ttNc9LSYnNE5PUci2tri9u7jDTzc9TUNFXObFv2kwJic3xq6z0/a4qqityDop\nJictMzM54raxucLCt7C+XkM7OEBexrq+/TgqJi76s7Ta+bSmoKS3UTQqKCotLDD/sKu0\n0/2+rbRRLyswT72xs73RUTAmKUO9t9BZxaqkp7H9OS8pKC0vNtqsp7RaQ8utsVQsJzN2\nvbS60O9sOScmMG64uNbPr6ajp7dQLSQkKiwqPbmtul1Ru6iq1zQtM0rWyMbjYtlPKiEn\nSrOwb0y4pJ6grl8vJik0MCg0uaq3XkXGqqrKOy8zUL60t9ZL1N8qHSNNrq7/SbOhn6Ct\nVi0kKDo5KTaxpLNGL0+vrcw9LS5NwrS24j1evkgjHizQr71K3qujoKGzOyYkMU0vJ2Kq\nsF4zO7uqunNIOUPMvbrJPjlxbS8hITu3tNbZsaSgoafCLyMqODYpMLqt0zs3VLu+ZldJ\nRcqwrbPbPllTLCgtL1DNTuitqKemq7DKNDNFNC5FzLxuLStC4s7ZT1fGuK2qsNNCSmwx\nICvoczw+Rcuqpqetyt/NZXlNKjPKYjg0Ki5OQD5cUM2vsKunt/HXVi4jITTR4zczWb6t\noaS2z9e/s7tpSmbjNyYwUDcvMTFA0bGnp6mosLa7NyYsLzhGMzzIWVS999evy82rtL+w\ntLfiKiMpOEwwJy0tPLSprK+3sau3Y0ZUQCkmNkVP28PdPk7rTb6vyLOot8bNQEBQLSY0\nNy9GQDfPxt+xsc3Qxq+ntFYuLUhrZuU7KzvRzMDAfLSks762w/dINzk5L0DNSU7bMzd0\nNj65vbSqvrurwFRsNjBCMzNWSkXDsLtZPjvjqq3DzUU9zrq+bDo7PTw2Ki1CPD3bvrOt\nray24NFvQHlXNEVPNDk+N0z6TWW8vsixsbqtu1rWVjM0UNdcQCogM01atr9O172vqq2x\nure38ExUNyopKC48RsKzuaqqyLi+Rc271L3LP0hFNjg3MTMxMTtW18vDuLfoc728sK1e\nPz8rNms+ODY0SODL0Mq3uLqtrba3bUNNMDRJLzRpPk+33kjZQ0PIaG+90d7GyL+3vOJe\nSTk3PuvbTEg5Pr63s6q848DDxsDWQz0/LSw3NzxGTPHDw8CzvM+85j1lQzTt1HbDej5c\nTT5OSkJGSE/Ut7Ctqq245m3b38jbNzEtKjY7Njc2RfC8q66rp73RwuDi1EU6NikrNi07\n2U3Rs97dvNq/scjFu8/FuLy+wl07NzAwNz95fU1QQ2a2uLe0X1TL17q9Ylc3NDozSVk9\nPTs7TWjZvbvAusV0ys1mvrrRyus/S0U5RkZATFNjzru7vb7K7UY/VF7z4j0xNjE8a0pN\n9mW+ra2sr7bGUFFNRUg6NDQuM0lZzbGxsa251srgbcp6RlZISOXbz8jfVklCQEJNfd5j\nUUxK27/Ixc1NXt5p6WhMSkhQTE7T4mLjXnfN39rOV01WPUBxYNe2u8C92XfK3vnWWklM\nQ0rszsbG0etWRk1mfN5rPjo5NkNXRktRXc3FysnP4+9r19bby+784lFd133zzlpN+kxD\nXltpxsrQwMbFuLu+vtxTRj07P0he6GZlaV/XyNPW4kpJVEpNTkBASU1RZuLtd9TU38XF\n0MXQ/elRTmhed83Q9GxLQEhDQ1NTT1ZQcM/Gvry9vsjUzs3b22NAPz48TF1PX3p0187d\n+fRjTU5eU1RrVk9aT1RzZdnK1MbKd9bL0b64yM7MZVfdc+/bSj49NztKXNvKzc7KxsC+\nw8nWa2Z2YllPSkhKTU1e/1185mLx419paU5TTUNPTk3e2V99XEVZ5vPRxtrj0eztysrU\nytFeSkpNSnz/UVxRSFF2dOPO0c3I1t3R6Hns4OLm2+tz8F5UW01U+WV05k9IXFRb0+Be\nb15OXndcYFdKQ0VPV+jKwsjFxtHFwsrDyWlTXkhGXVlPZXFW5svWyMLW18zb39B5WlpG\nSl5d3MroYlpFSGNtbt70Xv1xX2v6X1FPRkBFVFFZY0hKV1Boy8jNxsbX09Tl5dni/9nm\n787R4mU7PVRfxb7QzMXKy8liTXpWUE06O17Z3dZoTeXWc2JWXNvQ61xf79PWX01FRVNP\nP0JOV2D3aXzDyNDAzdzJ3tTCY0xNP1vJ09rQ7tPDaU/3YN/Gb01jbt/AQzu/4+DD7+XA\n00NUPzA6OzpeaEPew+PW3UrzzUNF4FP0yFZtzFluyM3LzktF7VxLXFfiw8rQzMrJy9H6\neUrRvkBGTUVjeUVct8bFudTp6EA+c0U+8XfrvuD/r80uxb8628Bz0Mo3Rds4Puk7NF5I\nQ3dGRrzAStbKTXHcSkbNz8ixy+PD00Y9PjhQbPm7tsjKvuBZUzxA/D0x27lXXMLXXFfz\n3L3IesPJW97IS0rb62/IzOm9zFPiXELdyiwrvlw2u7dNvrxeaDctMS0nOmNI2bG0sa3F\nua85MMhGNF3Zbc7vTMLRQ+7NOV23UWjAV1DFTzdIRjtCXk/ltKyxuLi7yk1AQjs8S+LJ\n+ci361zKZjpDw8pG1rHFRXPlPTNAQ/pTPra+SLuuWui+Q0BTMS9FNzfzUFO7vtnedL3D\n/M7KYlbcZjtCSDNAZVnIuL6xq7rFvt1GODM7PTdK4PfKWdatSlat2zi/vj3lzjtIdC03\naDRLu9rGq62us83o9jYvNzAxWm3vub7WuLo60bstP8M0MW1COzs3Q1ZA/LewvLqnsevF\nvD4zSzoxV2xdt7bMrqriu7BJPj0xNC8uQDtDzMDNuLC8vbfNWclfMElKMzluVEXZvcbb\ntLbbv1tG6DAsQC4qQ05Gv7u/ray8tLRxcNw4NEM7PDk0U18728Ljs7C7uLlpRUowIS0z\nJkC+5rekpqanrrO+UUY/PDAwSko6aLrtTLat+ryx//NXOz0tKjktLUU+W7C3tKanrbG2\n0Eg6MCsoKTE+Qve9tqywrbPFw1NGPigqMyYoSFFAv62ur6amsLTZSkwrJDAoJEjlP8Wj\nqK+ksci/Pjo2Ji02KDnTS9Cqs7ekp7OusdlIQjQqKCosNkBLu6e2sKGtyr/KNCcsJiEt\nLDTw/LuqramjqbC420VGLSMsJyQ3P+22s62oq7O0s2gzQC4gKi8oNvTtuaeprKipxe2/\nPic2NCAp3k1Kr7e8r7+2uErKxi87YC472Thar8a2pLC2rbvR40g3LC0xLDxNUM/FwrrI\n181LUGM/TUg6UFM927tmwKrO0LHd71o3cDcrbDopa9074MNf2sJt07z278pKRmtIRVtt\nQvmz28u0yuDG1EtOSjc6PjY0SlFG2b7Fwq6qt7Cpus3IZUA3Pkg5Q9bI1sKxvMrJS0VA\nKzE2KzdJPXzFzLy0ra+7sbs/WdQqMfMqMLpGTaq+X7rLQDtDNys7RjNMxs/Iu7C0wK+z\nWt7MODlbLC6/NDOuzTuztErdyD42SDsvTfpL0be9v62twreuzOW5VjHPXi180TZM10NG\nZWtFPGhNNvPPQ9O20Ne2wE/OxjY+wjEzrWIzrLc4yLs4PVYwLkNDPWnQ3r6xu7itt8C4\n0UtZSTg3UUo71Mbm49e/RjjWOShuSizUv0DFsO6/qr7WscA+69kvOb5DN7TFUbe32dPc\nS0I5NDc3Oj5W29+/sba3s7fG095LOT1KNyxoUC3QvD3GtEzUvkNI4DkzUUs55rfNwK22\n0bu7TVnZQz5dQ0JQQFDzSF7bSOvWQvHZPN+9RtGxzM60vVN6uDszuT4ttO00sb8+usU5\n0cM+UcpLPt7ZS+2929691+vQbGVwTXZsPlNlRVvfSmB6PE5zPknXXk7vzNnit8VXuslD\nyGs06Uo32lQ/1NZc28rQXWjgS0VNQkA5O2VJ47O+uam0w7PFQltMLTZfMzrAZVm5v9nI\nwsrt1N9D1nAw28Y+va/bvrbZ3+xAQD82QkhFX1zdzlbU0FduTn1aPGNXNFDTUNO0v8Ow\nvuC/Yj9fOy9OUTdZ0fPXw8rmz+hGXl43Q144TOhbvch8t8BouMhK0PQ9TVdCSdBKQ7fu\nPrbINtDFP3fIVu690dm3wPrFyV/p201GW009WVFG13BI18xWXdtNTW4+Zt49ZspNaM7Z\n4NbWXsjUP8vdO93mPmXpQ1nfP1PMUUvO4F3l2/D8cF9Rcfw97b09Y7dWbrfZ67jtZrto\nQttIQF9DU9tb28LMw8DGzb/QTdviOnfUP/noWdPL/97C3VbbXkNFRjg9T1Fl9sXCcMLD\nSnzePkNrOjtlPE3gU8nQzbfN1LvTSeZMQk5LSUPWd0q8ylDI9Er8XkVQ1kg61kUx1Fc7\nu8hRsLfQuMLO7WDXTUP6dkjN0Fa9wnG+yWzK7F7WbFzoXVBMS0hafU731k33zGve13zg\n3etg7MpLRdlCO/FPPc7pQtPRRUrQTj7obUP33kvty1Raymxe0N/dyG/t0VPuZVTlVE3/\nbUb60ED9xUPTvU7Xvmj5yN1mfd5xWd7eWenL9uLLzfTjv9xswulZyOxG6WY+cFZCXVZF\nWWxTY/Nl7t5cad9PV9tIRdZIQNlgStPPWc67+W++90rQ40LazUJs3Vtr2+1OY+VZXNZg\nVOj3TWVcRVd6UOnLWfDTYMzGVla+4kK/ykXJyU72elTZxlTOyUPZw1RCRsLRT7TGTsLZ\nT2lTSVdNRUNZTUPfW0nU4k3pzE1PyPBlytBKX8pTXs5PXs5OV8PocNtTV+ZaSlntV2zj\nT0rc1+vN3ebCyFZbeU/c5VBQaNPoUczwV85NU8VUQ2xmXsVa4tbAUUixN+BzS2n9y0zX\n0HbZY/3GWdPP6bzuWVdPbWPv10ZCU1RdVF/oSPDGb+Xg68rbXUlJT05WXkLlyz5N0FZP\nzUxJwldLv3pFwtlivulm6dTjz9lu9tfK2dzxZdnQV/PrSWL6RWjzbV1040poxV5ZxltO\nw3dKy9tN3NNN6co+VM1FWspe4r/Uds/bV+NZUGhfZk5MVE9UVk1UU0pz033oZlHsaVf2\n1/pM9NZZXOZbXs1NWb/NW8a/8Mh5SMtwQ+P3Q2bfVO3dfdTr69njduL0be757XpLZeBj\nXm351/Rtztlb6Nf0ysroycxW18pN0GtFZUDx1D/dylFIQ2Xd21vFPlawNGa3PVstN7NA\nMbaxPC6/zOA6Q6xFUL400L7KSjy471BJT7E4KbfjMTTAtGjKTE2vPlqtJlGtMdnKPe7P\n07u7Q96+SNG+TNTKzMM+aLfUxTlAtzrRtDBOu2vFwE3p2dHg9jxMwmNbXjRNz9NIP8ve\nYMbbUPngvtc9Rl7N2U1FO9HzO/FPRtTvTdF8Sl9gS01TTlbi1GxWZehra01eU2bA9HnF\n1NbF12/M00953lPX7F/Gd0Dmw8/K1FvXzFzb3FT8ZVlZaF58bV5tz2BG0WnZXNnCfNl9\nV/zX3U3/3Ejd101m1GB31k1M1Nxt02lGU0tQw00+2VvWQ0VMU9dOYnRR5l3zyuDR81fP\n1m5mUXbcc8ve0c1RW/3W7EBN3mBW02ltxmBIeuBFTexQ49NMXNPe4MjPadzXfNZua9dl\n3tZl4tnW1/DXY1ve+vPv8+nt29f6XE5XTDvb7T7GTUPvTNRASrdaQ3nfT1Diyno2vKo7\nOcJoStnI2e/Z+ndTaFnDyz69aEXxOk7pV0/uyOJJXuBIV9PmSFPGUNG300Y+xb0+Ta+7\nO0xwzrQv6axX+sZfQF7KadfQTFzOyjhPyE/uODq9vlYrebs+zt9oYjjFv0U8Q8vfVOVg\n97/0aNFj8GJZ6NtRcM/N4Gvb41noY0xwemNzWU1ba+PeXlTl9lreW1bXaFv/XO3RaeDb\n9trj7eNsYPz3//zl1NHic+vN1jhIqnBD6D6+1FDgPrvCV0ZDcEWz2TttPLbZJsi7OGy4\n80rIQ9S7Q75aOuUz5ro+V95TXM399G3CYD3NzDh9uytIqz7IzS3RXEtx/bfjQjnpxmXC\nTsI84qswObFbOcq3SEisPDusRU+zbFFfw8lDUeLN3mbA3z7ZWz5e1EJGz2jWz+LJUVvM\nXkhT18/3+uxdbszPb9zTSkLWyk9W6HlKdsXzVFdWSEhL4uLuVF30YG1cdGVRYl5KVlpc\n6Gtb29r01NvW5Vt2+mhf+dnezcrTzf3XyO5i92/p11T80OL3TlnT2VNKSUxWdOb/W1Ze\nz9NmZVBQWWLwY/zTbGnoadTI6N/mdu1g/ONreujmXv3Xd2JQVuleUGZv+dPmWl5TV2Nj\nYF5gW2vrWVbrfejO7OjDVkrI0Onf3N501t5ia3beX3fR229taNviXllWaPb5Yl5fTktd\nbG9faO3l1+1m8Whe4Hbx3mblzX1mdk9efFde615NVmBXW+nbbW3vV27mY1ZNU2lf79Te\n3tna3dvX39TL4Gjo2/pl6dTrXmBPU9f8Q1fp+tvx9M7WUEpiU01KSO3K3NnZ0cjN7dDI\n4PPe72NWWWJp7VRWws5LYNr6WkpD3t09SVpLVFFI/c/o2cvLzM/Tztf9dFxMRkNIV1k9\nRr7O8MLO2tNlSvFRN01MQFZFXr7leb69wLvJ18DOXllQSElOV047UcB5cMXLw8BZZcVL\nPlNAQ0Y3VsDXzbi7t7rJvsLxWUY9ODtDTD9AwsjtvcPa0X1N7UU2SD45Q0BNy9feu7nA\nvL3L2ltOTT47Q0U/PkbLyl7Ctr/Fzl/L9DE8QDM7Pk/O2cqzsLO2tr3L61Q+ODo5OT49\nTb7F1rexu8PK5dw/NkA3MDk/VNPayLGvtrS3wNBrRj4+NjY3PzRCrVG/treuxrlQVzs4\nNys0MTRba8a6t6yus7bGSkZKODQ0MTMwOcq727yxsbbCXtddKjk+LzEzPu29sa2xtqy3\nw77a30UuPj4tNDFAysjQuq+ztLfN4mMxMTgtLjY7Y97DsbCtqrC7ynZtOy80MDQ3NE7T\nu7e7r625yc1xSTMwLyovOEPayLuur7SztLrF7VQ7NDQvMzs7SGvKvL6xq7PG22tGMC0w\nLi45QF3Xv66qra6vt9NUUDctMzEzOz/lxc+zs7uttNHJ4kA2LS8xLTNIWc2+t6yxrrPC\ntP0+WzcxNDYxN/fa28qtu7enW7u6K1k3KlQrK1dTPtuqra2/qqdJu1ks2SsjPjc7xU1R\nrcM5rapcfNTRRTY3Kj46LNROVqnFzqSr3rG8cdAxMDsvSzw7xt7Gu0+4rEPAt0jGPzNF\nNC5JYkDLyde0s6+9WbbMRtw5NFdDRUBKz9dmzNHDXc67SEhiTVdLP0hW30rw1unNyMXI\n0ObP405MTkpm82lpcNHR2shcU9lWU2JMTE1NWtbeY83Gvsn2015aSEzdU+hdU9nTbmvD\n+fDFYmjT/01GVGVuU2lo9MzgaHz/48XbVmZrTFtKSFlTb21gadbU+s++1kxbQ11wPD/p\n/Vfpxr7e1sjdVllNSODoTVDp7XPrTePcW97r3uVZbm36W0tP0MpzTXzC1F3g5XDs0d3P\n3k1QTOjXVu7fee92etHLV0Xl00n9XUXPyfrT5mvIa1vMZUNIZmld42lr1tTe3uBtc032\nw0tNRjfTU17LQL3JP9nXYm1b3sU6TrRNP9pZU1FlzHfPxfxpzV5U00DLzzvmYEDfwlzg\nvc7a3npiTuPWQz75SuXGTdpJVrA/Sq7LTu1NU80t6L4trrAnzcZMuV/X1EPevjlKvnfN\nQDfO2s87TsL95srIWTdzyP07NOjZTexKV7fjU8LlZtnpaV5GQuZgXFdO1uDW02LXzeb0\nb1RFV9Rta/9r82hp62jl193l7dbQ5uLxVk7maElt/3DiaejNd97bZXPRV1lPUb/xzzk2\nqsguuMrXt08/0VQ4zUnK1Cyxvie3tCzJsTNtwi/Isz1oV2i7NlTIN9HaO7m/Ospa7b5D\nXfFIZsVGO7N8YrwwzsUzvm/TsTY227s+22bIxS2uySzIzDFgvdlAv9Y4vtQ3xshMRVHN\nXkhayb9T+spfb1BdVn3ZSN7madxr5VdKbWBXU3Pb21bjyWBPzc1a3s5fT17gcEJf6Uja\nw8rUevBzTPfLUU1p1GhAZsDORk3DfFfGzl594lvp/VTaUM3dRcXtUVz8y9nT31lWd9n9\nTU/o6OPtTU7cfVbd1m3p6OLbTT9tcGL86OPX11pU7WJPZu/ocfPt6V9f5mNs+ktGZt7Z\nWkLNfEnGTMxKU+1r1FP3ScW9S07K32ZKv94+ZWDUUFBiQM6+2sbKdk1QbONxaVRw2nDW\nV+nXaOncTFfbY8zObs9eY9HIzffLeUr9aWJdfOXf3nNaV2Bv3+1xX0tO7d7T+k9W6F1c\nWllQTVZTXVP0zNZrbHpPTdPbT3D/c8rNfM/Kd3TtV0peaGjmTVNWaGxN/NTc419p9Gvv\neW9l7+t59OhdWdn8Vndgd9bp39DU39bOXlnt6OvtbHHj2c784M35aehca3bt22xt92Vd\nXmlZV1Fm7XBw7N7u7HZbXE1LWlpOTWJrWnrZ7W3c3mtlW2BsZnzp9uDj3t/l4t10WVxo\nYmh5XmPm6W5u93n2Zl7lV23KZtHeQM3wPcvtTr7cQGnKXnxz2kpbtDxZtEBXT0XF+UW+\nu14zycLrSz6wSEOzMOuwPkNpuVrOY0OpTimwxjc807NFSO02u9suuT47qj42rbc4VNpI\nvVBIuENNyTzxzFbTWVqz/Uq8QkPDP1nAP0O7T17IPVrQTdxKQ7bQYmhO18r3aUj00Etb\n11pa68rRbl5g0NNlT0hjXEnT3kl24FTp6N7I8UBKVltvd97M4mvM2fHwTj5ZznRaaGNx\n3mtN3/xJyNM/1MNg+b5Z3stQ0+tcQEzNV0pWW/HRzcvWXevUbWVjbfb52cPabMnK/crb\nYNBobVxTYG9cS1ZNQl5RPlZQd9dFV8bU3c7G2UJGaVNgZWVt7Nbe0NPRytTZ6ejKblPX\n1mtWSVtoU0hIcG5NT2tUX9RQWcp8VFtscE901Ghf4/Z219nXyu3s19nfXnpxVkxPXkhN\n7eJ2Vlbzy9Zg4tlt0dbv1OVfa2haXn1W4sVfw9NFu87bwFC3yT3c81NPUFvWNECzVzhN\n3/dUc93v0N9oXk9I+c4+uus2vEs5vsI8yrppfVxeeU5j104+V1neT0reMUqvP0mtvkNP\nXMu+L7nFJKuxILTCLa/TSs5Kb7lG1r5svjZIt0teRjpeXU/a7mhCXMLMSki8yEn5TU++\nfVfi7dTa+uzG3lfFy33Z+c3Na9f2Y/FuVmNFO1Z2W23mYGjoc+hZ+uNbbVlgzu5W4/Nw\n1/px1H18bmjU6GDc5mbe6UtsW0PUytcsMavuJrhlSq08O8hCSL70xTsvrNktuLc7xrZF\n3to3wrpRzT3CvTDb0DpQSUjTbEpecMPrPcnGS8/NNmOwS8ZgPK9NRrt8ubw+PsvfSLw8\ny103q0Uqu8g3Y7vbOM5ePbtcPL7UQzz/u973X8zGXL/ePMXCUU3KxUJRa/n9TeDibdz6\nVEJC5utDT+JLPvZ2VO3RyV9e01tX6Hpb2s3dzdPv095teWhiW1H93lFp7Upg0Fxf2m33\nb1RabHN2Y1Zx6GB65Xbl4u/e2dTJ0Nbe29HZZmNTdmgzUEXN4lvGSs3OfGhobOlc/Wvr\nfFZp+cpcPVdWS9bIv8rbydbZzN7tSz5TPkJWU+3eS9nKQ9RON7fsTL47WrlObr3fVD5W\nYsn5O7633tDTu7nXRUXePDjTQ0NuTczKUFnpzk1DRlDIfFTFeXbFTVTzSHnQU1fGw87N\nv8jb+VBPS0ZFU3br63ZudmZQXltP/GVd1u/rzmti2WVDSmDs3tvdyMbKw83p9uZeSlBe\nXvbb09lcXWBTSz5AWeDW49TIyNNiUE1DRV5WV9zKvru/wsvmc05NUFRdY9fJ0+1rW0Y9\nPj9CTejQycLAxd9RQkI+OD9RXuDDu8DK09l8WVpUTlF3183Iz/HtTz8+RUZCW9fNxsXD\nw99USkNDQEZ22dDJwr7Fzc76WWZiVFvj2dDN4+ZrSj8+TFdRVs/K1MPNydlDXjs/0DdF\nrm19s8pdcdZt21Pi5ne8TshwP7YtJrg9Kbi8VD6/uMZAO6w6Pcopv9lAtkJWscY3xaxC\nMbG9WVnKs+NUSDjlMzm7KDymMVmg/0K4PGmwKzu+LVq7NFG4wvFmRt+720L8vum3t03X\n4zs/9z4xNmK7zlnL1OnMzclFQ9tIPuLNVlO+21vd0MLNS1bFzdHLc8rD829FRkY0POjx\nVuDO4NRuXO1NXFtPVEZK399WXszD6ejD08vt3cZoZXfN4GPwQjs6Q1dCXL7Uc8va8OlP\nVF9NSltvXOvU5uPW2t3TzcnO0VBdt1BeuztpSDbGPk22ykBCw1vUbWjdPL/vLcjIMMi3\nSLhZ9MM7utvvq2g/T8DPT0I/wCp9ryM7qj88tLZD6L4zfLc798lGQkq+v05N0cLb0cZT\ndtFWW/n9THFlPlBsTVDry+9OWXfoYExbfFZ80+hXY+Vm4MrPc9fA0enZ1PxuXkpdU0rO\nT07GQE3tUNlO18ZJXOBfXFNiwlkzw7RARcbbWcnIer7FTlri20b0S17bPNRZMM3GP+LC\nc2bzSlHO12L6YunURtm80TtDsNk9u7ZxQFtWfTtu3DO3win5yg==\n¥enddata{mailobj,539461880}\n¥view{mailobjv,539461880,30,0,0}\n\nBob\n\n¥typewriter{¥smaller{\n---\n\nBob Oesterlin  IBM Application Business Systems, Dept 53Z, Rochester MN 55901\n\nIBM IPNET: oester@rchland.ibm.com                Internet:oester@vnet.ibm.com\n\nPhone: (507)-253-4528 (tie) 553-4528\n\n}}¥enddata{text,538724776}\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.29.msg",
    "content": "Path: flop.mcom.com!usenet\nFrom: Jamie Zawinski <jwz@netscape.com>\nNewsgroups: mcom.test\nSubject: Re: attach this, spanky\nDate: 26 Apr 1995 08:50:20 GMT\nOrganization: Netscape Communications Corporation, Mozilla Division\nLines: 103\nMessage-ID: <3nl1gc$lkb@flop.mcom.com>\nReferences: <3na39m$3lf@flop.mcom.com>  <3nkvv6$kmf@flop.mcom.com>  <3nl02e$kmf@flop.mcom.com>  <3nl0gd$l55@flop.mcom.com>\nNNTP-Posting-Host: lr1-port2.mcom.com\nMime-Version: 1.0\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nX-Mailer: Mozilla 1.1 (X11; U; Linux 1.1.47 i586)\nX-URL: news:3nl0gd$l55@flop.mcom.com\n\nPath: flop.mcom.com!usenet\nFrom: Jamie Zawinski <jwz@netscape.com>\nNewsgroups: mcom.test\nSubject: Re: attach this, spanky\nDate: 26 Apr 1995 08:33:17 GMT\nOrganization: Netscape Communications Corporation, Mozilla Division\nLines: 86\nMessage-ID: <3nl0gd$l55@flop.mcom.com>\nReferences: <3na39m$3lf@flop.mcom.com>  <3nkvv6$kmf@flop.mcom.com>  <3nl02e$kmf@flop.mcom.com>\nNNTP-Posting-Host: lr1-port2.mcom.com\nMime-Version: 1.0\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nX-Mailer: Mozilla 1.1 (X11; U; Linux 1.1.47 i586)\nX-URL: news:3nl02e$kmf@flop.mcom.com\n\nPath: flop.mcom.com!usenet\nFrom: Jamie Zawinski <jwz@netscape.com>\nNewsgroups: mcom.test\nSubject: Re: attach this, spanky\nDate: 26 Apr 1995 08:25:50 GMT\nOrganization: Netscape Communications Corporation, Mozilla Division\nLines: 69\nMessage-ID: <3nl02e$kmf@flop.mcom.com>\nReferences: <3na39m$3lf@flop.mcom.com>  <3nkvv6$kmf@flop.mcom.com>\nNNTP-Posting-Host: lr1-port2.mcom.com\nMime-Version: 1.0\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nX-Mailer: Mozilla 1.1 (X11; U; Linux 1.1.47 i586)\nX-URL: news:3nkvv6$kmf@flop.mcom.com\n\nPath: flop.mcom.com!usenet\nFrom: Jamie Zawinski <jwz@netscape.com>\nNewsgroups: mcom.test\nSubject: attach this, spanky\nDate: 26 Apr 1995 08:24:06 GMT\nOrganization: Netscape Communications Corporation, Mozilla Division\nLines: 52\nMessage-ID: <3nkvv6$kmf@flop.mcom.com>\nReferences: <3na39m$3lf@flop.mcom.com>\nNNTP-Posting-Host: lr1-port2.mcom.com\nMime-Version: 1.0\nContent-Type: multipart/mixed;\n\tboundary=\"---------------------------2082357617733318156662372089\"\nX-Mailer: Mozilla 1.1 (X11; U; Linux 1.1.47 i586)\nX-URL: news:3na39m$3lf@flop.mcom.com\n\nThis is a multi-part message in MIME format.\n\n-----------------------------2082357617733318156662372089\nContent-Transfer-Encoding: 7bit\nContent-Type: text/plain; charset=us-ascii\n\nHere comes an attachment of type message/rfc822:\n\n-----------------------------2082357617733318156662372089\nContent-Transfer-Encoding: 7bit\nContent-Type: message/rfc822\n\nPath: flop.mcom.com!usenet\nFrom: Sharon Iimura <sharoni>\nNewsgroups: mcom.test\nSubject: Test for Bug 4498\nDate: 22 Apr 1995 05:13:26 GMT\nOrganization: Netscape Communications Corporations\nLines: 22\nMessage-ID: <3na39m$3lf@flop.mcom.com>\nNNTP-Posting-Host: diva.mcom.com\nMime-Version: 1.0\nContent-Type: multipart/mixed;\n\tboundary=\"-------------------------------12402385823900\"\nX-Mailer: Mozilla 1.1 (X11; U; SunOS 5.4 sun4m)\nTo: sharoni\nX-URL: http://home.netscape.com/eng/mozilla/1.1/unix-1.1.html\n\nThis is a multi-part message in MIME format.\n\n---------------------------------12402385823900\nContent-Transfer-Encoding: 7bit\nContent-Type: text/plain; charset=us-ascii\n\nhttp://islay.mcom.com:8008/regression/test1.1b3/bug4498/\n\n-- \n     Sharon Iimura\n     Netscape Communications Corporation\n\n---------------------------------12402385823900\nContent-Transfer-Encoding: quoted-printable\nContent-Type: text/html\n\n<BASE HREF=3D\"http://home.netscape.com/eng/mozilla/1.1/unix-1.1.html\">\n\n<TITLE>Not Found</TITLE><H1>Not Found</H1> The requested object does not ex=\nist on this server. The link you followed is either outdated, inaccurate, o=\nr the server has been instructed not to let you have it. \n---------------------------------12402385823900--\n\n-----------------------------2082357617733318156662372089--\n\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.3.msg",
    "content": "X-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Fri, 12 Jun 1992 13:29:05 -0400 (EDT)\nMessage-ID: <UeCBvVq0M2Yt4oUA83@thumper.bellcore.com>\nDate: Fri, 12 Jun 1992 13:29:05 -0400 (EDT)\nFrom: Nathaniel Borenstein <nsb>\nX-Andrew-Message-Size: 152+1\nMIME-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart.Boundary.IeCBvV20M2YtEoUA0A\"\nTo: Ned Freed <ned@innosoft.com>,\n    ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?= )\nSubject: MIME & int'l mail\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Please read the first section, which is plain text, and ignore the rest.\n\n--Interpart.Boundary.IeCBvV20M2YtEoUA0A\nContent-type: text/plain; charset=US-ASCII\n\nIn honor of the Communications Week error about MIME's ability to handle\ninternational character sets. a screen dump:\n\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\nJust for fun....  -- Nathaniel\n\n--Interpart.Boundary.IeCBvV20M2YtEoUA0A\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative.Boundary.IeCBvV20M2Yt4oU=wd\"\n\n--Alternative.Boundary.IeCBvV20M2Yt4oU=wd\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\nIn honor of the <italic>Communications Week</italic> error about MIME's abilit=\ny to handle international character sets. a screen dump:<nl>\n<nl>\n\n--Alternative.Boundary.IeCBvV20M2Yt4oU=wd\nContent-type: image/gif\nContent-Description: Some international characters\nContent-Transfer-Encoding: base64\n\nR0lGODdhEgLiAKEAAAAAAP///wAA////4CwAAAAAEgLiAAAC/oSPqcvtD6OctNqLs968\n+w+G4kiW5omm6sq27gvHX0DX9o3n+s73/g8MCofEovGITCqXzKbzCY1CEdKq9YrNarfc\nrvcLllLDQUDAjD6r0+y1uw1/y+P0ub2Ov+vz/L2/D/gnGEg4aFiIeKiYyLiodjR25kDW\nWOloiXmpmcm56dkJ+ikaSqqn81ATaXbKmlX6OhoLOytbS3trm4sbmLP6uOqrKmmT1ovj\n27Sru6zczPzsHA09ndj6SxN8kIoNjG29PUUtLk0+bl6Ofq7eZux9zW0APtzdDqwN7x0/\nz5Pev/7vLyDAgQKL9RpDT5K+RwzdHWuILNgwOzsKErxoMSPG/o0aqz28kVDYGokHQRKj\ngkwOq44cW7J86TJmuW/usi2kpy/ltojETPY0aAymUJlEhxotquigAofCIgLtybCbxJTs\ngiI9ivWq1qwwaUJVSLLdx6g2HTLltzUtV7Vs184cO1bVpDBu29qti/euqFNzwZIpozev\n4MCEB8eBdO+v4sWMGzt+DDmy5IqJJ1u+jDmz5s2ct8j4DDq06NGkS5s+jTq16tWsW7t+\nDfvCgNm0a9u+jTu37t28e/v+DTy48OHEixs/jjy58uXMmzt/Dv05gujUq1u/jj279u3c\nu3v/Hn06+PHky5s/jz69+vXSD7B/Dz++/Pn068cXbz+//v38/vv7r4/ffwIOSGCBBh7Y\nW4AILshggw4+CJ6CEE5IYYUWXphbgAJsuCF0AtD2YW8hNtdhbhyOaB+Kuqk4AIcmcsfi\nbSXONmN5MeJ2I305brfjcj0up6F1Jd6I4o848rZjiEYS9+OStS2p4ohKPgmjb1Gm1+R/\nTla3pXFdEhdkcjkO+SKIHu425ZnOOXkljW6ayaOVtn0pJJJamkfncHkGF6aZM7rY4odS\n1kiloDQOCaigg075Z5E1JvlmooGCSGajSgIa6KB+jlnoooeSOemJboLaYqifeloqoZRa\nSmWrn646Kqo4smqqqzLKd6KmmXZoKJSXqjrrqYaGKiqlwe35/puGiTLqZ6pwHjksnI6+\nuSm1Uj6bJKmKjlqts5G6eu2h1No6qbfm9lpquuKe62y07pYb47Xhqmtts7FyOy626qLb\n5q24jssiv8D1a+ec7X5LbsHU9ZmvvOaiuW6xRUrr4ryL/gkxu1GKGu6jTxa777MG61tu\n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\nk0mZlWmZl4mZqVEAADs=\n\n--Alternative.Boundary.IeCBvV20M2Yt4oU=wd\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\nJust for fun....  -- Nathaniel<nl>\n\n--Alternative.Boundary.IeCBvV20M2Yt4oU=wd--\n\n--Interpart.Boundary.IeCBvV20M2YtEoUA0A--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.30.msg",
    "content": "Return-Path: <sau@sleepy.bellcore.com>\nReceived: from thumper.bellcore.com (thumper.ARPA) by greenbush.bellcore.com (4.12/4.7)\n\tid <AA05576> for nsb; Wed, 15 May 91 15:24:32 edt\nReceived: from sleepy.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA12267> for nsb@greenbush; Wed, 15 May 91 15:20:34 EDT\nReceived: by sleepy.bellcore.com (4.1/1.34)\n\tid AA01548; Wed, 15 May 91 15:20:25 EDT\nDate: Wed, 15 May 91 15:20:25 EDT\nFrom: sau@sleepy.bellcore.com (Stephen A Uhler)\nMessage-Id: <9105151920.AA01548@sleepy.bellcore.com>\nTo: nsb@sleepy.bellcore.com\nSubject: A Multi-media test\nCc: sau@sleepy.bellcore.com\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"mail.sleepy.sau.135.1476\"\n\n--mail.sleepy.sau.135.1476\n\n\nHere are some icons, aren't they pretty?\n--mail.sleepy.sau.135.1476\nContent-type: image/pbm\nContent-Transfer-encoding: base64\nSubject: Image wrapped by /usr/sau/bin/fetch_image\nDate: Wed May 15 15:17:30 EDT 1991\n\nUDQKOTYwIDQ4MAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAYAAAAHAAAAADgA4AAAAAcAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAA\nAAwAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAkAAAAIwAAAAMQBGAAAABiAAABwAAAD/AAAAA+AAAAD//4AAAAAAAAAAAwAAAB//gAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAABCAAAAQIAAAAQICBAAAACBAAfCPAAAEAgAAAHBAAAAP/4AAAAAAADgAAAwAAAH//4AAAAAAAD////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAACBAAAAgEAAAAgEEAgHjwEAgAg+AgAP///wAAICAgAAf+AAAAAAAAEQAH//+AAP4H8AAAAAAACAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAA\nAAAAAAAAAEAgAAAgCAAABAEEAQIUIIAgA+B8gAQAAAIAAQENQAA/4AAAAAAAAIQAIAABAAfAA+AAAAAAACAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDgAAAAAAAAAAAIAQAABACAAABACIAQTJkIAQ\n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\nAAB5AAAAAAAAAA8gAAAAAAAAAeQAAAAAAAAAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAYAAAAAAAAAAMAAAAAA\nAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAP//////////////////////////////////wAAAAH/4AAAAADwB4AAAPAHgAAA8AeAAAAAAAAAAAAAAAAA\nAAAAAAAB/wAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA4AHAAAAAP8H+AAA/wc4AADnB/gAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAH/+AAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAn//////////////////////////////////sAAAHATg4AAAAf+P/AABvY88AAHnjewAAAi97zj3vAAAARe95x73gABGQAEXvece94AAAf//gAAHwAAAAB+AAAAD8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD///AAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAYA0wGAAAA//f/gADGN/+AAP/2MYAAA2hCEUUIAAAAbQhCKKEAABGQAG0IQiihAAAA/gfwAAIIAAAACBAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///AAt3d3d3d3d3d3d3d3d3\nd3d3d3d3d3d3d3d3d8AABgBwwBgAAA//f/gADvd/+AAP/3e4AAAqhCEUEIAAAAVQhCKCEAABAQAFUIQighAAAB8AD4AAQEAAAAEAgAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///AAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AACAAxgAQAAA//\nf/gAD/9PyAAJ+X/4AAAi57303PAAAARc976bngABAQAEXPe+m54AADwAA8AAQCAAAAEAgAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////AAvd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cAANCAzABMAAA//f/gAD/9PyAAJ+X/4AAAigIUUUBAAAARQ\nEKKKAgABAQAEUBCiigIAAHgAB+AAQPwAAAMAwAAAcDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+AAu///////////////u///////////u/////u0AATGB2QDCAAA//f/gADvd/+AAP/3e4AAAigIUUUBAAAARQEKKKAgACAgAEUBCiigIAAPAAD/AAQQoA\nAAUAoAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///8AAt4AAAAAAAAAAAAADdAAAAAAAAAABdgAAAA98AAnOD7wHBAAI//f/gAjGN/+ACP/2MYAAAi970TnvAAAARe96Jz3gAD/gAEXveic94AAOAAH3AAQ/4AAAoAUAAB/P4AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAP///4AArz/////////////56f/////////97P///+b0ABDGH8ADAgAIf+P/AAhvY88ACHnjewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAPngAQjoAAAoAUAABNLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///wAAvUAAAAAAAAAAAAAH2g\nAAAAAAAAAC3QAAAB3cACDGH8ADAQAMP8H+AAw/wc4ADDnB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAfDgAQjkAAAwAMAABNLIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8Au0AAAAAAAAAAAAAFugAAAAAAAfgDvQAAABe0AEDHH8ADAIAPjw\nB4AA+PAHgAD48AeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdxn+bgAQRCAAAQAIAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAB////4Dwt0AAAAAAAAAAAAAHegAAAAAABp4C9QAAAB98AIHvj4AHgEAP///+AA////4AD////gAH/////////+D///\n///////AAA//////////w9KR+nwAQOBAAAgAEAABcDoAAAAAAAAAAAAAAAAAAAAAAAAAAAD////4EIr0AAAAAAAAAAAAAF6gAAAAAAH5eD7QAAABb0AQAf38AAACAP6qqrAA/qqqsAD+qqqwAH/////////+D//////////AAA//////////w5KT6hwAQAAg\n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\nAAAAAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAru7u7u7u7u7u7u7u6gAAAAAAAAAD7QFAUBb0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf/////////////92gAAAAAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu4AAAAAAAAAAAAADugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz/////////////5ef/////////+9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAr0AAAAAAAAAAAAAH7VVVVVVVVVVV7QFAUBb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF3/\n//////////3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu0AAAAAAAAOAAAAHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAAARgAAAFd3d3d3d3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0AAAAAAAAgQAAAH7u7u7u7u7u7u7QFAUBb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAABBQAAAF3d3d3d3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAu0AAAAAAACCgAAAHu///////////vQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAACEAAAAFdA\nAAAAAAAAABdQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0AAAAAAAMEAAAAH6f/////////97QFAUBb0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAeAwIAAAAF2gAAAAAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu0AAAAAhjAEAAAAHugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAABAUACAAAAFegAAAA+AAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\n3d3d3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu0FTAABtUAgAAeiHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0F/AABq0AgAAOiFd3d3d3d3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0FXAABtUAgBAPCH7//////////+7QFAUBb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAAB60AgBAHCF3AAAAAAAAAAB3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAu0FXAAB1UAgghHkHuf/////////9vQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0FrAABq0AQghDkFeg\nAAAAAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0FXAAB1UAQggh0H6vgAAAAAAAD77QFAUBb0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAABq0AQgQg0F2v8AAA+AAAf63QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0H/////8D8AA+AFev/gCkESgD/69QAAAB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0B8AAAHwAAAAAAH6v8AD///gAf77QAAABb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF2vgAAAAAAAD63QAAAB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAu0AAAAAAAAAAAAAHugAAAAAAAAADvQAAABe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz/////////////9ef\n/////////+9P////98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqqqqqqqqqqqqqqq7VVVVVVVVVVV7lVVVV70AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf/////////////93///////////3f////3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvd3d3d3d3d3d3d3d3d\n3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn//////////////////////////////////0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAADwB8AAAAAAAB4AAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAA\nBEAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAOrq6urq6u\nrqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAKqqqqqqqqqqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVwNVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqq\nqqqqq5+qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1dXV81XUAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqqqu6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVX1VUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqqqr6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAccAAAAAAAAADzwAAP///wAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAIIAAAAAAAAAMMMAAwAAAMAAAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAAfwAAAQACA\nBAAAACAAAB//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoLAAADgOAAAg/BACAAAABAAAD///AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEQwAAMABgABAAAgCIr6PBAAAP///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgIAAQAAQABAzAgCIqCIhAAAf///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBAEAAgAAIACJMkQCFKCIhAAB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAgAACABAAAEACVAqQBCLiIiAAD///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAKoBACAAFSAClMpQ\nBCKCIiAAH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAVUBACAAKqACk/JQAiKCIkAAP///4AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAqqAgE44VVACkAJQASL7vIAAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBX1AQEQQr7AClAJQAQAAAIAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECvagQEQRXtAClfJQAIAAAQAB////4DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAIhftCIEQQv3AClgJQAEAAAgAD////4EIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCv6hIEQRX9AClAJQ\nAEAAAgAH/w//8AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBf9BIEQQv/ACUAKQACAABAAP8A//8PAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiv6iQEIhX9AEMAMIABAACAAPAA//+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRX1EgEFAr7AIKAUEABAACAAcAA///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQqqEgCCAVWAIJMkEAAgAEAAwAA//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABIVUJACAAKqAERSiIAAQAIAAgAAf/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEKoQgBAAFUADhShw\nAAQAIAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAQgAgAAIAABSgAAAIAQAAAAAf/gAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAQgAQAAQAABSgAAAEAgAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAPAAMABgAACSQAAAEAgAAAAB/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDhwAACAOAAAChQAAACBAAAAAD/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAkSAAABDwAAAChQAAABCAAAAAH/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAkgAAAChQA\nAAA8AAAAAP++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAkgAAAChQAAAAAAAAAAf88AAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAn2AAA8hPAAAAAAAAAA/48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABChAAAAoNgADChQwAAAAAAAAB/w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAgAABACQAMASAMAAAAAAAAD/gHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAB+/AAAD/+wAP/z/8AAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAwGCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4OHDMAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8eHDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA++NjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA32NjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzmfzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAxGfzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwG4bP4AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGwbP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAA=\n--mail.sleepy.sau.135.1476\n\n\n\nHere is a snippett of audio:\n\n--mail.sleepy.sau.135.1476\nContent-type: audio/basic\nContent-Transfer-encoding: base64\nSubject: Image wrapped by /usr/sau/bin/fetch_audio\nDate: Wed May 15 15:18:08 EDT 1991\n\n+v9yfv99e3h9fft7YV1ob+nefGZzdv96eff38/j+f/n18/17+Pn7+f96ff74/XV6/v5+eHF5/356bnZ+fv94c3h/f35zeP99/np4dXn+/nl0fv/9/Xdz/3/+dXP//vz+fXZ8fn95dHx6/Xx7d3v6/P94/vrm2+j3a2zvc//n+Pz6fXR1+fxzbnF3bPR7efT+\n+X1zfPru+n53evb79/n/8/n3/Hf+/fL6/fbt+Hb9+/36+Pj+evv37+78dfv59H7+8vnzb2dlZHFzdnP7+vX1/vn58und3+Xk7e32ePvz+nhtdXn++m9v/W9eYHbw8Pry/vj4+vn5d3z1+/l7e3z47fD+/vz6/Hp2eH/69fj6efnueHR++vb4+fd8c/j2f337\n+PV/dnV69/389Hn/8/lzfmpfa2hwdv/6fn758/Py+v308/P6fPf28vl9en77+3938/12fnN2c3l+fXR2fnz9e3J2fX9+cnn9f/x9dnj//f91dXt5+314en37/nx2/fz7/nd0fvz/dXf8//t9dXN7/v54cX1+/396eX/8+fx4fvj0+Xl2ff78e3X+/v3+eHR3\nf/x9dH3+/ft8eX38/Pt7efn9/X90ev7+/nV6+/v6fnh6/fn8eHz7//p+enl8/ft9d/z8/Pt4d378/HZz+fv5+vd8efh9fHJ///7/enl9+vr9ePz6+fh8d3z6+n51/fv7/Hl2ef79fXR6/v79fXt++fj6e3359/f/enz8+/51ffz9+nx2eH78/Hd9+n76/nt7\n+Pv9/nb++/v+d3j+/ft6ePv7+Px7ef/6+X15/fz5/Xx6e31/+nh/+/v5fHd8/fl9dv38+vp9eH37+/51e/3+/Xx6fPz5+3t++fj3/Xl6+/n4dXz7//p6dnd+/P13d/7/+/58ffz5+H96+vj3+3t6/fr9enx//fp9eHd9/Pp9d/39+vt9fH/6+Pt5ffz8+3p2\nfv/7fnX++/n6fHV59fn7evn8//l8e3l++vx4e/v8+v93evz9/Hh8+/r4/nh8+vn7d3j9/vt/e3v++vn+e/v6+Pp6eH/5+nZ5+fv6/3d0fP38fHR+/vz7fHz++ff3en73593m6vD0fHZ+//l++29ucXhycPx68nlhYmZsdXv5ev/09PT3+Pbv7/D89vHx8Pf9\n/vf19318+/r5/np4e/78e3Z//fv8eXV+/v16d/z8+fn6eX37/3tyfn3+/3p5fPv6/Xj9+vn5fXZ8+vt9ev76+/15dHr/+v5xev7+/X16fvr5+nt8+Pn5/Xp8/Pz+dX37/fp9eHh+/Px4eHz/9v9+fvD4fv5y/v77/nd4f/38enb8+/n8enh/+fl/ef79+vx9\neXv9+v15fvr7+312e/z8f3jo3ufo8Pn18X9+cXr7eHtxdm95+vhudu7z7vV9/fjydmp4f/rx8fv69vH0fn/59Pb5/f58Yl9nZnh7+/j++vLu7/r27O7s8Pn7+PLy+335+vf5f3x8/fp+dnn//v94c3p+fXpze//9/nl3ev37/nX3/Hr8d3d1e/7/eHf///x+\ndXf//v52evz7+H13ev77/Hh2fv/+fnp6/f37fXb7/Pr8eXd++/15eP39+353dXv++3tyff/9/Xt7fn33+Hr9+O73d3d5/P99df/9/P15dXn++/51fP39+f97e/v5+nt6+/36/3Z6/v39d3v8+/l/eHn6+fl6dvv8+/97env7+X14/v37+3l2/v38fHf8/Pn9\nf3z//ft8c37//f98en37+fx5//n5+P94ffv7fnf9/fz7eXB8+f38dXr+/Px+fXz7+Ph8e/r69vx4e/z8/nh7/P77fXZ3fvr6eXr7/Pn8fXv5+fr/df79+/14eP/9/Hp3/Pz5/Hx6f/n4fnb9/Pn8fHx7/Pr+eHz7+/l/eXv9/H92//r6+Xx6ffn7/Xh8/P77\nfXx8/fj6fH35+vz6e3n9+ufi6e/06vt2b/72fXVqcPx+/29s+n167H3zcWNtZ252//l7//Tz8PL7+/fy7/L69fP09/55fPn7+3l8+Pj1/Xr++/p9dHz//f56dnr++v136t7l5u92bfj2+Xx3eXd6dGV4+H7zYF1paXRzdXn69vX7fvnw7/L2+PTw7/f89PPz\n9f57/fr7fHj8/ft/d3V6//56cnp///57en37+vt5fPnu+Xh3dvz9e3V+/f38eXV4fvr+dnz9/fl/enn7+vl+eP3++v52evz8/Xd6+vv3/nd8f/r8eHr7/fv9eXl8+/p+d//8+/p5dn78fnd7/Pr4+vR8efp+fXF9/v/+ent8+/n8eX/5+fh+eXv9+v93/vz7\n/Hl2ev38/nV4//78fHp++/j4fXv7+ff8e3r8+/56fPv8+X53en37+3p4/fz6/Xp8+vr6fnV++/j+eXj//ft8d/z7+fx6ef/5+X53/fz7+3x7dn3z/Hx++vn4/3Z9/fv+d3/7+/p+eX37+/11efz9/H17e/z5+nt6+fr4/Hl6/vnveXT7fvp8dnd//Px4df3+\n/P58fP35+P15/ff4+Ht5/vz7e3n7/fr9eHh6/vp8dv76+/t8eH77+ft4fPv8/H52fvv7/nV++/v7eHb9/Pf9e/r8f/x6enl8+vt8efv7+v53eP78/Hl7+/z6/nl6/fr7enb+f/v/fHz/+vr+efv5+Pl8d376+3t3/f37/nd2ff37fXR8/fz+fH1/+fj5enz3\n9fh8eHv8+352+/r8+Xl4eH76/Xd8/Pz6fnx8/fj9fnn76d3h7Ozv8/T5f/b+/nlyc3Z+enBzfHx+fXl5fPr5f3N5fGlfZWh0ffv8/fDv7Ozr8vLs7/L+9fTy9fr8/Pb2+Xz/+vn4fnV5fvx8dHz//v95dHd++310d31//3x6e/76+X14/fz7f3Z5f/7+dXr7\n/vt8d3d8/f14cv/6+v15fPT4fX5yff79/HZ3/v78enb+/Pr+enp9/fp+dn/9/P55env++/t4e/r++X11ff78fnb+/v37e3h9/Pv+dnn9/v5+fHv9+vt7e/r69/13eH756uLo5/B/eP57/vz6dW11eGx9/nf0amBoZHB5f/x7fvnz9/f48O/v8Pv7+PXy+n35\n+fj7/n3/+/v8eHv9+/t5dH79/n90ffz7+3x5e/38/Xj4+nn9eHh3ff38enn7/Pr9d3n9/Pt5e/78+n54ef38/Hl2//78fXx8f/n5fnn8+fj5fHd8+/l7df3++v94d338/H12fv3+/Hx7efn2/Xx+9+33dXl3/P5+dX78/Pp5eHt++vx4e/v9/H18e/z5+n55\n+/36/nd8/Pv7eHv7+vj/enz++/t8eP3++/97e3z7+/55/vr6+np4/vz7fHf8/vn6fXt8+/x+dH79/Px8fX/3+Px8f/n5+H53ff37/3V+/Pv9dHp8//n8eHr7/fv/fH35+Ph8evr69/15fP37/Hd8+vv6fnl6fvr6fHr8+/v+fnr7+f3/dn38+/x6df37/H52\n/Pr6+Xt6//v5/Xj/+/v8fHt7/fr7e337+vf/eHv9/P54e/r6+n15ffj8/Xd4/P77fX19/Pf5fXv7f/X5eHr+9+vzbP55/nt0d3z8/Ht1/fz7/Xx8+/j4/Hr8+fj5fHh/+/t9efv6+f16eHz9+f93/vz7/X17fPr6/Ht6/Pz6fnh++/v9eXz6+vv/enr9+Pp5\n/v1++3t6eH76+/96+/v3+nh9f/36enr++/r+fHr//Pt3cPv9+/19fX73+Px6+/j4+Hp4/vv7/Xf7+fb6e318+fv+dnz9//16e3z7+f54evr2+Ht3e/38/3Z++/v4e3h7//n8eX36/fj7fn/++Pn/ef36+ft4evz8/Xp5/fz6f3l4fP76e3b+f/z+f3t5+vv9\ne/75+vh9eP////14//v5+e7n7Od5ZmhqdXR4dnZ4/vr7fH739/T+eH36+v13fvr7+n93ev76+nZ4/f36f358+/j5/3r7/Pr+eHh+/fx3efv8+n54eH39+Xt3+/37/Xx6697i6Plx+/L3fnd8fXd3aXDw/vBuXGJpb3Ftef77+Pr//u/u7vX37vDw83/99vj4\nfHz6+vp+d3n++v12d/3+/H58ev75+n56+/v4/3h3ffzxeHD9evt7dnZ7/v17dfnv5ODr6u/r9fr8+fn5/3VwdXp8dG56fP58dnZ6/fn+fnx6enVhX2ltfX9+f/Lu7PD48O7t7vf17vDx+Pf++fH3fvH1dP12d3Z4/v97dn7+/f51d3///XZ1/f79fXd1fP7+\neHN8//5/fXh++/v8ef75+vh7dHv//Xp0ff/9fnl1ef79fnR6/v77fnp++/n6e3r79/p8d3h//n93fP38/Ht4eHv6/Hl6/Pz7fnp5f/v8fXZ6/vf8e3r++vp8ePz69/x7eH35+np2fv/6/3p6eP36fnl9+/v6e3d//Pr+dXz7/Pn+dnr8/H5zfPz++318e/r6\n+n18+Pj3fnh4/vz+d3z9/fx9eHd//fx4d/3+/P7/fv74+v94//r5+3l4//v8eXj6+fr+enh8+/h4dfv++f59ef39/v11ev379O7y7+z0/nB46uHq5+3x735sYmFgYmJfY2RrdHp4d/779ff69e3q6+7s6Orr7vL39PP3+v94/ft7eHN4fX12c3///H54dHv+\n7OXm4u3v+nll+N/m3eLd3OTtemxqaGdgXV5hZGllZGJhZmhiaWptb254/vPr6eri4eDf5ebm5ubo7/Pw8vP5en7++ft2d3x5eHRtbHB1eHN9/3v8en11eHt8enR++/v+eXh+/ft2bnd2fXdubnZ8enlxe379/H96//j393z+9vb3+np8+fh+dn78/f16dnj8\n+v16e/79+313f/f69n9+9+/2e3l3/fz9d375+vn+env++fp4en3++f57eXz7+P53fP75+Xp6+/z6/X34/Pn5fnt9+Pn+eH79/P98fHr5+/t8fPn6+Xx3e/n8fnn/+Pn56+Lo6O3+bX33+/p+dXR3+3Bz9P7vdF9hZW13e3Z1+Pb69Pn68O7u9fzz8fH2+/34\n8/X6fPz4+Pl6dnz9/Hd3/P78/Hx4fPz3/nn8/vv7e3z4+nt/cnh+/vp4eP79+H11/fn393t7//v0+nr+/v73fnZ3ef79e3j++/n9eHn/+vt1ev35+n55ePr6/Hx6/v34+/9+/Pbzf3d++vj5fHV9+ufh6+Tu9fl3cnr8fXpyeH159vx6fH58/XN5+/P4fHl8\n+f58cX77/fbx+f31+n74++3z7e/8+3b47/5v8Orv8n5xYmlva3B++Pb3/f307+/57vF+9f79e3z6+/56fPv6+np3/vv8e3n+/Pr+eXV++f54dv79/ft8eXz9/Px6ffv8+312eHt+fG96fn7+eXV39+ru+fPv7u/2+3z6+Pn/dP74/n91cnh2d21udXB1b25t\nc33+enj7+PX3/v/69vb7fP749vb9/ffy8fp+9vT1+Xx5e/z+enJ8fv79enp4/vr9eHj+fvx5cnd7/Hx2fv/8+/Pt5ebp6n5+9Pf7+ndv//56f29venR5dHr/6+/0+e9+9fd4ffz3+H97+/f49/76+fHz+Hz6//L2/P718vD6/fTy/G9sb3P36e/+9e/t7vn7\nefHs+Ph99PLz+XlyXl5lYm94/fn8+/nv7e739u/w7/r+9P319P96//37/3R0e359c3F7e314cXF5fHx0cXp7fnt4dnv9+/54//z9/Xl0eH7q7mh5c3l6cnFyfH16cHh9ff57e376+f55e/38/Ht1ev/8fnN9/f79eXV2fPv+dnd/fvt+enl++vx9dX/9/v90\neP7+/Xh4+f77+X98f/n5ffv8evp7e3Z5fn9+dXz+/vt5dv77/X53/vn7+3p3ffv6f3J8/vz6/319+fj5fX76+vh9dXn+/X51evv+/nl1eH78fnR3fn/8f3x6+/f6/nv45t3j6/H4eX98ePn+/HFxbnZwffp18XJhZWZqc3z+/nd+8PTu+P3z8e/2/PPv7/L7\nfvv5+P52fX/+/Xp4eH75+Xt8+/34f3h7f/37eHr9/fr2enT7fv11dv//+357ev76+X55+vr1+3p4fvn+eHj//ft8dnV6+/p8d/77+fp9e/z4+f15fPv4+X14ffv5fnj7+/v8enh7/vz+fP76+PR9fvP6fvxzdn3//nx2ev79/Xd++fr5/X19+/j7eXz7//v/\nfHp9+fj9efz5+Pp5ef/9/Hp3/vv6/Xp3/fr7e3T9/fv7fnz9+fj6ev74+Ph9d3v99n1zfn/7/3l0efv5/XZ9/fr6/nt99vj5enn7+Pl+eHX+9/96//n2+H56ef75+nl9+/z5/3p3fv38fnd/+/n8enr7+fl8evr7+Pt7ev34+H5/+v78fXp7eP77/np/+vz3\nfnl+/Pj/eH78+ft7eXz7+/51ev38+v99fPj3+H7/+Pf1fnp7//x/dnz8/Pt8d3j/+/14eP78+3t8/fn19vt79/H6/nl4//38eHn9+/n/eXh9+fh7ePz8+ft8eH38/Pt3efv9+n54/Pz5/nf8+vj4fnh9+/j8dXz8+/t9enn++vl9evr79vx4ff76+nl7/Pv5\n+3h3/f38dnj+/vv/fHv7+Pf9evv59/p8eX37/Xp6/nz4/Xh5fPn7fHf8/vz6fHv8+Pf5eX37+/l+eX78+X53/P34+nt5evr6/3l8/Pv7fnv//Pr4eXn8/Pn+dnv8+/t3fvr5+f17ev75+nd5/P36fnx7fvj7/3n9+vj6e3l++fp8ef37+fx7eP76+Xx1/v39\n/X17f/j4/Hb89Pb1fnt7+fJ8d/98+X97dnj8+352fP38+35+//j49318+vr5/nt8+/v8eH77/Pl9eHl++/t5fP3++v57e/76+P54//j5/Hp8593j6O7v8uzq+v5+/X51aGVtbm5rZnL++vf//ff28Xd57PHo6fDt7O/w+Pz+9fv1enx6cnx9bl1mbXR0dfT3\n7/X59vHt7/j17u7u9fz++PX3fXv8/Pv+ent//fx8c37y/Xl4cn1/fnZ1/n7+fXd2ev78fXZ9f/3+e3h7/fv8eHz8/ft6d3z9+311f/n9/H13ev38fnR6/378fHl3fvr7fHj7+vj/cnb5+fx5e/v9+vF7b/5/+nJ2fn/8fn17/fn3/nf8+Pn7eXh9+/t5ePv9\n+/93dXz7+351ff36/H18//n6+3l9+Pn5fnl+/Pt+eP76+vp6eHz8+f55fPv8/n16fv39/Xp4/vv7/nd7+/n6d3z8+fb9e3j9+ft4ePz9f3v9e375+fx5/fr493x4fvf7end9/Pv8e3d++/p8c379/v1+e3759vt6/fj59312ev72fnR+fvr9fHZ5/vr9dnv9\n/ft9fX769vh9efr59/x5evz5/Xd8+vv4fnl3fPr6enr+/fv+e3n++fv9d3/5+/t6eP75+X54fn7z+n15fvr5fn3+ffv+fnp++/v5eX34+fd+dXv7+/12fP37+f54e/r6+3d6/v77/n59+vf4fXz5+vj9eXj++f14e/v8+X94eH/6+nt4/v37/H57/vn4/nf+\n9fr9fHb/+vl7ePr79/t8en77+v14//38+316e/z5fnh9/Pj4fXd++/v8eP/7+Pf+e33++f11fP39+n57e3/5+X97/Pr4+3h4/Pr8eXn8/Pr3eHf9+/p4dv/++/5+ev/49/x8+vn4+nt4fP38enf8/Pr9e3h9+fh/dn79+/t+en76+fh6e/r5+P95evz4/3f/\n+vv6fnh4evv3eH79+/n/fP7+/Pd+ef/5+vp9eP76/Xp6+/v3/Hl3//v6enf+/vn+enl9+ff7eP759/p6e3/7+Xx4//77/Xx4fvr5fnR+/Pr7fXt9+vj7e376+fh+dnr96eHq5+33d35/evf8fG9veW1693r5ZmFqZ2x1fvz8d/3w8e/59e/v7vP5+/n08/59\n+fn5+X14f/v6/Xd8/fr6eXh+/fx6dX78+vt6dnv9+33+/3n7fXx3ef/5+np8+/r5fnV7/fz9dnz+/fl8d3r9+v12evz9/P96fPz5+n17+/v5/Xd3ffv+dnn+/Pr/eHb/+/t7d3//fP3+evv5+f13/u33fH1yfv38enb+/fn6d3d5/Pp+eH3+/vx9eXr7+/p7\nevn9+/94ffr6/Xh8+/j4fnh5/fr8d3v9/vt9fXl++fh+efv7+P53ev/7/Hh3/fz5+Hl2/Pv4e3b//vn7fXv9+Pj+e/35+ft7eHz8+3x2e/n3/Xt2fPv5/3h9/vz6fnt9+ebd6Ojp7vDy+v/6/XpweHx8e3NzcHv8fXV4/P39/nVve35mX2dtff/5/vru7uz1\n9ezs7O/2+fLw7/t+9vj3+n56fPv6/Xh++/v9eXV5//55dH5+/f15dX37/H50fP78+358ff38/nx9/Pr6fHV3/u3+bn55/f56dHZ//Px3efr+/v15fP37+Xx3/Pz5+3p5/vn7env4+vj9eXl9+fp7dv/+/P56eH36+P14fPr6+nx5/fj5f3f++vr7e3V8/fr/\nen3//P9+eXn8+fl9ffn59395e/37/Xd7/Pv5fnh4fvf5d3v7+/r8fnz6+Pn+evr5+ft4d378/Ht7+//6/3h4fvv5fHj+f/r8fnr/+fj+eP70+Px+d336+nx4/Pz2+Xx4efv4f3d9/vz8fXt7+/r5enn6+/j+eH75+fx3fvr6+X54d/35/Hh5/fv7/356//j4\n/3n4+fh+dHz+/P14ef/9+PZ5dPz8+Ht3/fz7/f18/fj3+H79+fj7end7/fp6d/39+/55dnr9+/54/v78/Xt5efz593x8+Pj3/Ht8+vf7ev76+Pb8e377+v52d338+v9+7d/k6vZud/L19Hx7d3t9b2j78/LwYlxland0dvj49/P9/vbt6u359O/w9X51fvX6\nfXV/+/n+cXP/fvv8b33z/Xz9+frv7/j8+nt1/nJz+/nq7nV+eXp1eHJtcXZ2d/79//v49/z/enl8fPP08/d7e399+37+9+/u8/Zvbv3/cXp8d+/zdW1xcX70dHJ99O7u+v97eHZ0+vDv8n52e3z+fv5zevT+/XZsePT1+fz9++/+bnp9f/N+c/z1fPj2b/7v\nfHz5fn33+f35+Pz09H70+Xdsampy+PP8/X97fnl1ePv49vl89vP3+v59/PX1/X318e/0fnd9f356dHz89vt6d3V7f3Ztb3F3+/1+/f96+vp8+Pv7+3707/X4e/z07vH1+vnv6ev6+fTw7vHx+/nu8/b++39+eWpraGhmYF9gYWBfXFxfYWZjZGxwffv69u7o\n4N7e2tnZ2NnX087LysjHyMrN0dbX2dztaVVIPzo2MzEzNztEU33c1dXb3eLveWzv49jMy8nHxsfIzNDS09fY1dXW1NXY1tLQ0NDV0s3Kx8O/xV02KiAfIikyQ+rMvbW0tr7YSTw6PE7dw7y5uLq7wM9oSkJCT/PPx8bL1Nzb2trf7Xp67N7V0c7MyMS/vLm0\ntOAxJxwaHyQxSMu+va2xr7PKTzExLjhn0Lu4tLm8u8vRaU5GTHLexcXIztTZ3NLb3e5tZG/e0MW+u7eyrq66TSseGBcbIjJew7ewrKysr8FWNSwqMUbcurGwtLi8w8ndV0ZAQk/mzcPAxs7V29zX2+r58O3Yyb+5s6+sq67EPScbFRYZHy5Mxbesq6morbTS\nSjIrLjFH1Ly0srG4ur/L12dTSklOX9jMxcfHzs7R2Nfb3Obe1ce8ta6rqq2/PigbFhYXHig64L+uramoqqu4x0IzLiw2Pv3IvLa4trq6vcTN+2tQV11y3dTMz83T0c/QysnHxcG9urOurrhlMCEYFhYZHytH4ri0sKmqp6uvvV1CLy8wOE7ywsC5ubm4vL3I\nzvlbVlJq/dfW0dDSzs3JxsC+vry7ta+vuV8yIRgWFBgeKkLlt7Kuqammqau220wwLi0zP1fLxbq5ubm7usPH32ZVUFtm3d3Qzs/MzcbEvry8uriyr6+6XzMgGBUUFx0pP+22sqyoqKWoqbTOTjAtLDQ+TtDIvLq5ubm5v8LbalZPVFvq4tLOzszKw7+7ubi1\nsq6tsMhBKhsWExQZIC9Gx7SwqaikpaeswPc4LSwtOEHozcK7vLm5trq+yPNcTlBVdt/XzMzJxb+7t7Oyr62srLdjMh8XFBIVGyY3XLq2q6ekoqWnt9ZALiwsNT5mz8m+vbq5tri8w99aTU5RdN7UzMnHxb+7trGvraupqrVbLx0VExEWGyc2Wrq3qaWhoKWp\nxVo0KysuPEbZzcq/vbi1sbi9y2RMRk1U49XQysXBvbi3s6+tq6inq843IRQRERMaJDZBv7WtoqCfp63mNC0nLDVU88q8wrq2srS1v3pPQD9Ibe3RxsfBvLi2sK+uramnpaW5NiIVDhASGSAxP3Svq6CdnqnETykoKi4+ZsbNtrCuq6233lk7OUJKW+XS2MW9\nu7e2u8C+vLOppKKfpNIsHhEPExQaIC85vaSim56myEkyJC4tMz5yxbmlpqesvVQ8PzVDT09f1cW/sbS4uru8tayqpKGgoLEzHxUNEBIXHitJ3qSfnZ2pwTMwJCcvL0Jvs62jnqev1EgvNTk5Tlfrz7e2tbO9vr24t6+rp6KfnaVPIxgNDhIVHSU9T6qcnZqm\nvDQsKCIvLzpYuaqknKSuy0AwMDw3R1Rvy7ixtrO8w7y4s66opaKenac/IBYMDhIVHidEX6acnZuqyi4qJyI0MD7utKijnKe04jwxNEE7T2rlxrezuLS9xLy4sa2npKKena0wHhILEBMYHyxO2Z+dnZ2ueisqIyQzMUTcr6ihnqq6XjwzOkhCXnzWxbaxt7W8\nv7iwrKiiop+eqjsfFwwOExUeKE73qZyfnanGMCkpIi82PnW2qaefp7fYRjk2SUhP/N3NvbK3t7i+urKsqKOgn56oPyAXDQ4SFRwlRfisnJ6dpr03KisjKzM6Ub2qp6Glsc5cPzpHTUpX5dO/tLW4uLm4sKqmop+fn64yHhUNDxIWHSlP06WcnZ2pxTMsKiUr\nMDhOuaumo6i3z+9GSU9LR0/p4763ubm5t7Osp6Shn56hxCccEA0RExkeLlO/npydoK5mMC8qKCsvNmSxqaWkq77M5UtOSEM/YdTHuLi7vrm2sKuppqOfnqLVJBsPDhIUGBwrQ7uem5yjrvY5PS0pJyowUbGrqKiuurzC3VdKPDta5Mi/vL66rqyopqSjoZ6g\nuCkcEw4SFBcZIjnaopydoqy6TVc6KSUmLTy+rq+srrGztL9hS0A8Tm7f3Mi/u6+tq6qnpKKenqdEIRsSEhUUFRkqP7Ofn6CoqbbH2S8nIykwRcbJvrKurK2wx+n0VFdTUE1oy8O4sq6sqKOhnp6gui0iGRMVFBMVHS5Lq6Sko6Okr7XvLyspLS88SkbOt6+r\nrK+7u73P4F1LT23b08e8tq6opqShoqjiLCYbGBsYFxwjMV22r7StrLO1umg/Pj1AT15PWs/BvLW2vr68wcbJ1+fc1NPMxsTAvbu4uLi7ZDUyLigpKyYlLDM4Sufh2sK7vbq4v8rKzdPS22tZW2T13t/f2M/LyMrO0tjb3N/l5t/d2M7IxcTI8khDQTs5OTUy\nNjs/Slxgb9zQysPCyc7P0c/R42xiXF1senL139zUz8/R09jd29rf3t3f1s7KxL/Cz1xHRUA9PDo2NDk+SVtlYfXY0cnDx87S1djY2uZyYlpccO/o4OHb0s7Nz9bf4N7g3tja2tbSzcW/wdJWRkhDPjw7NjY7PktWXGbt3+TNwsjM0+fj3tjg/mRcYXvq597b\n39/PzNvVzeD62Nbm3dTY1cnCwMPOW0VGQjw8Ozg2OT5MXmZrfObdzcXIzdHW3t3Y3ep8Ylpn7ebj3+Li1s/P1d3p7+rr+3759eTY0MrEv8HUWExLRD48Ozg3Oj9MWl1r6eLaysPGzc/V3NbW5v1pWl5vfvTq3uPg1M/U19vo6uLk6ero39bOzMfBwc1qS0hD\nPj06NjY4PEdWWWDv29rMwsXKzNDc19Lb63VdW2/ufv7m5eHW0tna2+Ps5+n28fX+5dfSzcjDurTLRkxCND0+Li0xMTlh3nrUxsS+t7nH2vJeWnxtT0tLTFve1eLYzMvIw83k5e5xfftpbOnb1crAvry4tbGtrLdLKiglIiknIigxPuu6u8K/urm9vtpGQkxb\n79Hb9drIwMDE13vdztThbldadOjo59/XzcfFxcC9u7m1sK6tsNwsIyMeISciJS0+/L+2vczCusDM3Ek8R/PSzcbIzcS7vsrR4n3c0OFvcHZu8d7m7drT1c/O0M7FwL66tbCtqqzJLCAfHR4kISArRNG6tLjHxLa70l9IO0LlyszPyse/t7rL/urc1M/aaVzo\n19XU3evfz83U3dXPy8bFxb62r6upq8oqHx4cHB4hHypTxLa0tcLDtrzUSEI/R9TFyubLvbm1ucTi0srP5m5lYd/V3nV65N/Y19ve0MvMzMrGxL65s66qqLkvHx0aGhweHiRJv7CurbfBtbrRRD09P/vX2PvIt7Szu8LRysnZaFdme9nZ4uTUy8vLz83Lx8rO\nzszJytlWVtrXamfgSzMvKycoLC0tOEZU68fKz8TAytDP3vrq4Xz81M3Jw8LGxcTL0NLU2NHP19fOzc/Nzc7Mys3T1NTa4eXt+fb3/Hl3/njv4/xHNy4rKSgpKSwyO0Za2cnBv7/Jzs7V1NPSz8nCvbu4uLi4ur3CxMjKyszNz9TX2d3j7vJ1XlZPSkhFRURD\nREREREZISkxOUVRYYWJaUEtKSUZGR0pSXGJ06NrZ1tPRzMrMzsnGxsXCxcPBwsTEyMvOzs/Z3Hdqa2ZdUk9KR0hJRklLSU5TVFhfZGRdXmJncmpscfn38fP17ejm6unq5uHm9e/r7u35+f/07u7x7t7n7OTm49zb293d3N3d4+rr6Orr+nZ7eXRsZ2drbm9r\nZ2hubmlqamxyb3B2/fr47O7v6uXj5+vo6Ojp6enw6+fs7e7x9/L7/Pn+enRsc29wdWpqbG92dG1we3l9fnl2eHt+e3Z+9/d//Xp+9fR/9+/27/l9fP76/XZye3z//nl7+vr5/HX59PX1/f787+/7/fn7/HxwbXBvcGpkbWxrbm1vefn49vH59Ovz/Ht7enJ1\nbWpvdnVvcXN6+395fvfy8fj6+vr08Pl++vrz+n7++/T1/H379/T8dXR8+/l8eHt1fXxxcf35+vp3/vv5fnBvcfb2bXJ2fvz+e3j79fr+fn379fZ8/Pfy7+z5++/4/H1xc/95enZ2e3p2cW5xen5+eHf78vX8+n738/t8dv55enlvb3d9d3B2dnr5+3l78vLv\n7vj36+/v7H/58PT2d3j7e3Vva3F1b29ueHR9fXZzevj4/3V5+vT/dnB4/Pr6f3v+9/P9eX31+3n8/vXx9Pv4+fT6fP92e/h9eHl88/f983z58n58eHF0enhqb3hufXZ0eXX683t0+vP57u988+7y7n797/j7cXV6bXN6cnF2+vl9cX7w/nR4ff/6/Pt6/PX6\n9nx8/vnv8Pn98e/t/Xf39PN4bXr793hsbnF5dW1vcHF3eHj98PDx7+np6Ovq6Ph7/f1zaWhpYWRlXmFlZ2ptamv8fnv/ffXu6Obs6ePoe1tkfnd3e/r2dGVlYWFfX2BkbnN97+rp7ujn4N7n6OXj6/p9/nt+e2hlbXJoZGRpbWRjZ2NgZm9vcGtpdXZsb/n6\ncn19//zu7v5y8unt/n7y6n7q3Orm7vH2ePpzcWpoZ2h1fXt3evr1cG5q9+nw4u595PDk9vL28vd8cnBxb2traG50c3R3/vPw6Ong4NzY09LNyMXEwcTCwL++v8C/v8DNXUE2LysoJygsMzxHXc/AvsTO1uJeUVFb/tzOxr66ubq6u77CyM3O09PPyMK+u7i2\ns7Cvr62t2y0oJx4YGBsfLDpA2K2nrK+zvtRZNy4zQEFJ1Lu1sbK4uLrNX1xeVVFVatbHyMzFwMfT6Hdybl5c6MzGv7mzr6upqb4uKCseFhYaHik7RsqnoKiurbXTSjIsMkJDScGsqautsrzHXTc1Pj89Se3LwL/Gxb/JcVlmXVFRVnDTy8e8tbOxraqoq20l\nKCwaFBceJDFRYLSfoK+3r8BGNi0tPFxP766kqK2uuM1VNi0zPTtB3768vL3AwMhtTVliUU1a+tnPzsm9ubq4sq6srL4tJC4jFxgfKC9NbcqppbbUv8NIOjk7WsfGy7GnrLi+xftJPDM6TldP5cLByc7W3Nj7Wmjl+G/x4d7d2NbLwsG/ubOvrKu+LSUuIhca\nIy44dc/AqajAXdfZPTY7QuC+vsKvqLC/w8pgRT07RVhRU9HAy9bOztfmZFp65HJn6Nng4t7b0s7MxLy3tK6qrG0kJi8eGB4rOlHIz7mosV5I22M5PEdwwbvDwa2tv87JzV9MQEBYaE1Yy8XU3tjc6HJWWevgcO/W1+Xw8OLb39vKv7y4sq6rsTsfKi8cGiU4\nS+HC3birxj5LyV89T27Qvb7Rxa6zztDEzVpLQ0Vo7U5TyMbuauXscmNTXdvZaPnT3WpofN/T1tTDurq6sq2stUAjJjQhHCY5Vl/ad8ywxkJIzNRGS17jxMTUy7GvwMzKy+NRQ0Vv5FVezsznamFp9nxdbdjW92zz73pr/trP0M3Evbm3s62twTAgKzEeHys+\nYmzeVMKz3kJPyu5IT0/cwMPPw66xws/Z3mNOQ03azvVd4NHmXFdn4t5xZujW71xm7+Xt7d7QzMzIvri3s62uxDMgKTIgISs9dHbZTc+200hH0N5RWE7uwr3HyLKxvdD08mlhT03rzN1b/Nvnbl9f9dTpXGrf7V5eafjr7v3g0M3Lxby4t7Wwr8U2IyY0JyMr\nOff63k9kusdZRHXRZmhRX8m7vcu8s7rLbmJdYFxOXdbL6Wvu4/hhX2je1u9kfeD3Z2R74dnc4tHFv727uLKusdMuHygzJCMsP+bp1Ex9uchRQPvVY2ZSase4usm7tLrOXVlWdvhYZdLM+llefv5pX2fe0uxcbuLodGl65Nne7trFv7+8ubWvrr05ICQ5KSEp\nNvPl1U9Hur1pP1TMbv9XTtO6tcnEtLfDb1hTYtpbTvbLz+/66N7je1/80ttfWn7rfmFeft3c+u7PxcG/vbmzr7PMNSElMyYjKzvwfdlZX7rBc0Zsy21vVmDMu7jJvrW5ymJbU2fzU1ncydxq+ujl/Wlf7tX+WGHyfmJgZ/jd4fDWxL6/vbm1r6+/QygkMCoh\nKDJYaXrxWL299UpTzG1SVFbPwbzFwbO3xm1ncVxaTV/WzuBs39jiYmD33NtyYvfieFtf9OPk49vNxMG/u7eyr7XgLiMuLh8jLUFWVdtbv7XRWlPI/EZQTt/Lw8nEsLTF3NfSYlVKWdzeamPT0eZue+De5Wps5edkW279eXTu2MzIx8K9uLe2tLxbLCcyKB8m\nLj5DWvfotrvf9s7HT0xVWdXOy8q4sL3Lz83iVUtQ8P5haNzS5/zs29vuderd/V5fdnZfXm/f09fQxb+9vLq2tb7+Nis0Kx8nLTY6P3r4ubvXyL+/YVb4We1ua9vBusrIvcHN5OTr3+5gduLlZnri4ef05tnb+3H07mpdYWn18PTr3Njc2tXT0dTtUz8+PjUy\nNjU7P0VNWNbPzsbDwcTDxsrJzdTZ2drm5eTm3+Dm4tzb4evxf355Z19kZWJgXV5jaGRhYmhrcXV79Ozm4N3b19XX2+5oX1JMSkVISUhKTlpgb+3i3dnT0c/O0dXX297p6/v573l2/Ovn5uvt6uns9fN/dXRtZmRqaWhpZ2t3fvXx6uPf3Nva19TU1+pvYFNO\nSEZHRUZKTlNaafvq4N3X0c7O0tPV2Nvk7vLx+Xdz+e3t6uzt6+rr7vj/fHRyZ2RkbGplZ2t2fvHu7eff3dzd2tbU1dzyaVxRTEdGR0ZHSk5UXW/06uDZ08/Oz9LT1djf6urw9ntye/Pt6unu6+nr6/L/f3t1a2NnaWpoZmdte/fm2tnZ2tvb2tnW1dnmemVV\nTUhDRkVFSEtTWGX88ure2NDNzs7P0NjZ3+Ln7e36///y5urw6OLk5fJ+Y2VoZGJfZ2ZqaGlye/Lv7Obf3tva3NTR0sTNYdVuQUVAPj48PkdKUlzsz9TQycbGzM3O1Nh8Z2dhVlJkY2H63NnZ1dbU1+T97vppZmRgY2ZkaWxrb/Lr7+rf2tjY087LxsjN2GpO\nUTwxOjc0ODtFR1zd38XCxr6+v8zKyN/m/mVdWGtWWeZv7NPW29HP293ifm15YVpiYV5re2hy8f337f7u393c2NDNx8K/wcrYT0pLLS06LS4zPUdC09HIuMC7ub3H2cXiVWhfX09f+F/j1tXOzc3PzdXv8X5eW15bXGZue/Dz8Obm9nru6+fg19TOxsG9u7y/\nzU88Qi4kLS0pLDROSenAxLO0u7y+vvV13lZOUmNf+Nn5ycDNzMXE1drabmtgU1heXWXd1eDe2eDi6mpjb/R37c/Oyb27t7O3w2M4OTEfIyknLC1DW+O3wLeutr3axdVMXU9W/uTY2b6+zcPAyNLZ3nDzak9cbWddbOfj2dvr5+H7X1haXnvk3c7Evrq1s7Gz\nwE4tKywfHyUkLz3j09SutLe3ystp8VI8WmD6zcO7v7q3wszdfVdNWE1RaGfv5N/o59Xd39zv73JlXFpiZ+fPyL+8ubaxrq+13S4jJiAeJiQqO9+4xba3ybnH40w/VEVvz+XGvLOyt7nN6ORVSEBFT13R1d7W3dzf4uts7eTu/nNlXWxy6NTLw726uLSwr6+9\nPyMeHh0nKy07RsC4sq/W5lZO7U9oTEzVzLWzt7W/vsXS30lDPj9d8s7N3Nfn3d17/V1k8+za63pqWmhz5NDNxsS/ubaxrq+7QCQeHB0oMUVbWcrIu7PB0Ug9Q0HfzcrE1MXBu7G2u81bT0VLU09gY+/V1MzV7G5WXW7p1dvg92Ruanfs5tTOyMK/urWvrLDe\nLiAbGyAtTcrGwtbcysvD02VLO0BP3L26uL7My8rAvb/Jb0c/Pkdc387T3Hpham/z7vHm7Ofm7+58a2x538/HwcC/vbixrrpMLSAbHSMz5ruyvc/sTF3o0s/7ZUlDVefAuLW5xM3d6djR0+RcST8/TGvUycvX/l1XXH3bz8/Z9mJdYX3f08nEwsC+u7SwwE4y\nIR4fIzRuurG4vHVKUE3p19DZWldITtzHura3vs/hYlxqZ2xeUkxLWX3YzM/X6WlfYn7f08/Z8Wlia+fRyMG9vLq3t8hXNyYhISQvSca5trfNflBKWnHV3O92T1Ng3sa8trm+zW9TS0xPVWZv+Oz05N3c3eXr9u3l4d/e3unx+Pff0cnCvry5u81UNiomJSkx\nR9O/ur3L5GFeYffh4OVpV1Rb7c2/u7u+y+9TSERJVW3k2NPW2+T2+erf2tja2dvf6e7t5tnOysa/vb7OWzotKScqMEF8yr7By9z9bHTo3dbc/lxRVGTbx7+8vcXZX0tFSlFp4NTO1Nzybm7339fV1tfe7X1vd+jZz8nFv7u6w+0/LyomJyw6W869vsTS9Gdi\n/d/T0uJnU09UfM/Evb3E1l5KRkta6dDJyc7cdV9gdOPW0c/Q2OD0eP3i0snEv72+zlg6LSopKzJDeM/IzN9uX2fs183KzdxuVlFb7c7Dv7/I22NOS1Bl4tTPz9bldmZldOLX09HT2OP7aWNr+ePb29rd6O93Z1tQSEI/P0JITldeaXN6dW1y+vHq5uXj4OHh\n5enj4N7e4eHe3dzd29fY19nd3t7e3+bp6Ojr7vV8eXVxa2ZsbnFuaWRlZWReWVdSUE1LTE9YX2dse/r4+X378ufc1+Dl7Ozo6N3Z1NLR19fW2tzd2t7k3uTk5u3o7vZ/eX94e2dmZGRhX15gZ2trZWZoaGdpZ2tqcW5lY2hpbW1sbPx3bnZoc/Px8Ovj29na\n293a2tjX2tra4/nz+O7s7Ort7vHx8v5ubW9vbmtnaGpoZV9iZ2hpaGZqcXBtZ2hrand0cXv9+P10bnh6ff98/Ojq/P939vfv7/Pw6ufp7O/s6+rr7u/u7O/5eHl9d3lvbXJzcmtobGxubm1scXp9dG5vc3Fwbmxvc3p6bnN7fv5+d3/5+35xev778/f79u7s\n8P778+/u7/Ly9O/yfnr7/fz+d3p//3xubHp7/n1yc379/nd0fHz+fnt5/vv5fHJ5ff5+e3V9/vx4c3/8+fl+eX/7+351ffr39Pt++/j3+X379ff0/Ht7/f96cnr7+/x8dXV8/31xdHx9+v18fvv593x0fv36/Hp5/f1+dXN+//r+enz59PV+fP5/+f1+fP34\n+fR5fvj9/Xd0ef9+enN++/P3dXh7+/18c3r+//x9enz59/h7ffn39/16fPj4+nn++Pn6fnd5+vr6enr7+/j7fv/28/P7e/f4+Ph5ev37/Hh5/f39fXd2ffv3fXn7+vn5+n7+9fT3eX76+Ph8eP76+/54fvr5+XxzevT2/Hj+9/r4/3x++fX4en36+vh+eHz7\n+vt5fPr59fx3fvn3/HZ6/f76fnl7/vn3fXr6+Pb8fXzr53V3dH77/v53dn77+3x1/v36+n18+fb1+Hv69/f2/nn9+Pp9eP77+vx6d3v7+P93fvz6+v18ffj19Ht5+/p/ent6+vv9dnz6+vb/d3n7+PN6df3//H56eHz7+nlyff79fnd3/Pn4fnv39vD2///2\n8fX+evr6+Pp7en/6+f91e/38/nl0ev37enT//fz+eHN6/ft/c3v+/fp+eX759/Z9/fj69P17fvf5/Xv/+fj4/nl7/PX5dnp8/vf+fnv89vb+ev36+vt5efz8/Xl3+/r4+3h3/vj3fHf9+/j6fXp7+/X7d377+fp8eH77+P52/vjz9Xh3f/j4/nZ8/vz5fnt9\n+vf4e3v6+vr9enz7+fh3/vj6+P94evv5+3h4/f75/Xt9/Pr5fXj7+vn5eXf6+Px1ePX79v54dn38+314/fv6+vd9fvP293r++fz+eXd9/Pt+dn79/P54c3v69vt3fPz9+/1+fvr09H17+/z7/3d5/f78dnz5+vh+d3n+/Xxyc3z++f59f/jv8fl8+/f5/nZ2\n/fv8fHn5+/p+dW96+vt5cnx/+/h+ffp/+Pd1/vv39Pt++PL1fnX9+vr+dnF0fvx9cXr8+ff/eXZ++vh+evn39/x4e/38+3h6+vjy+H1++PX17uXo6er5/fz39vd8c3z/fX1ycnh7/nh69vPz8Xp5eXF4Z1tnam94dHz57uzt9e/q6ujr7uvq6u348e/y9H1x\neH5+e21tcXB0b2tudHV3b378c/t6enz08PL69+7v7/P59+/u7vv++vz9fXZyfP79d21yd3h6cnF8fn11c/79+fx2cXj9/nl0/vv7+n17ffv4/3Z++vn5fHv9+PX5ePz49fp4eXz5+391ev379vx+f/n6+nh5+/1/+3p0//7/dnp//v18dnj7+fl9efv9+Pl8\nfP79/H52//z8+3l3//v8dnV+fvz+eXj/+PP+efv7+Pb2fnz4+Ph5fvf5+X13ff39eHF8+/j5e3R5/fr+c3d8/Pn9fHp/9/d6efv5/H54ev38/Hd7+Pf0+3h8+PX3e3d89/L4fHn9+Pf/eP79+/16e/X5enRteXp//np2/vj6/3Z9/fn7fn399fT2e339/fl9\nfPz3+H93/vr7+f17fP37/nZ++/35fnh2fv37enf8+vj+d3v6+vp5evn69Px2ePz39Ht1+v78/3h6f/j1/Hn++fv9dXN8/v12ev368/j/e/z2+f96/fv6/P9+/Pf0+Xz79fj5f3h7/Px9c3x9fX53cHZ8/3xyePv7+P19/vn2933/+Pv1/Ht8+Pj9eHv6+vp+\neXn/+Ph9ef39/P59e/v49f51fvz4+X16/Pr5f3f7+vT5d3V8+Ph+eH/7+/58dXR+8/p4//X3/X52fP39fnJ+/fT5enl5+vz7d336+vb+e3z58/V9fPr6+fx7evz5+Hp8/vz6/Xl4/vz7eXX7+vb5fHv9+Pf7ef339vd6dXz8/Xt3/Pv8/Xdze/n4f3Z++/r6\n/Ht9+Pf5c3r6/vl/eP/7/P91/fX08nx2+/j1+nj99/z5fnl4//f4/3n7/v7+dHd//fl6e/n79/x4d/38/Hh0fX75+319/fXz/3j++fb3/Xz4+Pp+d/z8+vx7dn739vt4ffr5+X56ffv5/HZ4+/37fXV9+vp+dv76+/l9eHz9+Pp4fP36+vx6evr49n54/X/7\n+Hh8+/v5e/76+fb+eHj9+PZ5dP1//f96d3r79311//r7/Xp1/vz6fXT9+/n7fXj++Pl/dv79+fl+en76+fl3fvf5+X53efz4/3R9/f38e3V4/vv8d3r+/Pn+fHz6+PV9fvr89/56ePz5+nl8+fn2/Xh4f/n5fHF++v39eXd++vf5eHv5/vx5dv77+nx2+/n3\n+Hx5/PX1/nj++/v7/3t8+fX2e/72+vj+ef/6+f53ffz29nt3d/z8fnZ3/vz3/nt7/fj2fXr4+fj7enn9+fl5fPr++n92d/z5+Xx2/v36+n18+vb2+3f/9vb1/3r9/H57fefd4eLv8+/w7vp2enx8em5teHr6fHR2///8fXX//3p3bV9kb3J4dv3z7/D28+3t\n7e/09fDt7fX78/Py+Xx9/fj6eHr8/fz+dXb//f14c3x+/f95eP76+f92/vr5+nx47eL9bW1yent7dHF5/f59c3v+/ft9eXn38fl9evn4+P52fPv4fHN9fv78fHV5/fv5eHv7+/n+fHz89/Z9d/38+ft2efz7/Hh5/Pv3/Xh4/vj4e3T+ff5+eXh7+/j/dn/6\n/Px8dn75+n53//v6+Hx3//r7fnV8+/77fXp++fb4eH73+ff+eXv/+f52ff38/Xd2e/76/Hd3/Pz6/nt/9/b4fn74/Pj+eXj9+vt4evv7+f15eH769314/Pr6+nt5/fr0/Xd++vv5fXf9+vp+ef359/h9dn35+n51ffz9+n55ev33+np9+Pn3/3h9+vn8dn35\n9/d9dnn6+/13d/79+n57fPr19v57+/71+Xl3f/n6enb+//t8dXf//vt8df79+ft9ffv08/l5//j493x4fvv9enV+/vz9eXV4/Pp9c339+/v/enj7+ft3eP7++n11ffr7/Xp99/j3/nd8+vf8eHr9/fz+eXl++fh9ePr7+/16ef76+np5/P32/Hh4//r8d3D9\n+/v7e3v++fX7ev75+Pz/evv1fXtyfv/+/HZ3evv5f3Z8+/v3f3t+9/b5eXv6+/d/dnn8+352ffv69355ev34+Xh8+/n4f3p6/fj3fXb//fz+dnj+/vx4efv69f16evv39H51/f79/3p3fPn2/Hj++fv5fnb//n/6efv5+vh6d377+310fP77+v98fPf2+Hp7\n9/n3/Hh4/Pn+dXv+/v16c3Z/+/x5ePv8+Px8f/ny8vx9+fr3+nl3/Pv9eHf+/fv9eHd9/Pl4c33+/P3/eHz8/H1zev39+X14/Pj4/nr59O/x/H369Pb4fvn19vX4/33x8fP+/vX3+Xx0dHl6eGxvcnZ4bGdpb29vamtvcHZ0dXn88/T4+e3t6+ru7unk4+jp\n5eTg39/d29rb3uPf3uDp+nBoXVBIRERGTVJVVlhZWVtcYW386uLd29rZ29zX0tHQ0tfa2NjW1tXT0tHU1NDNzMvNzthsTD42Ly80O0h25+9vVUxLVF552s/JxcfO2+To3dLOzczR2+xpXF1p/u3j5vpvZmBme/Dm4+vs7/l0bm/97+jl5+Po7vl0amhoZmFd\nXl1dWlVQTk5OT1FXYmp3fHz06eLe3dfU09LT1NLPzs7Q0tPW19fY2djZ297s+nZ1aV1dXFdUTUdAOzo7PkdVY3N1aXJ98/Lx+fXh0szLys3Pz8/OzMzP09XW1dXX3Nza2dnc4N3b19HQz8/OzeBBLiQiKTRywcDKY0tLT2RbXvbVvrm8xupWWODDvL3G51FJ\nSE5q2c3JytVvVk1U8tHKzNTta2tzeezh2dHPz8/X4vV9e+jq8V0+MzExOlHy1dl2WFRfZnTu8d3QzcvP4mJPTFRv28nGy9Lf7+TVz83O09nd6P7t49jS0dfY1tXPzMa/urW13i4gGx0qRsG6yWE+RE9ZcFNV68W4ucL/SlTYvLK1wOtRT1r1d19cWXzf7WNP\nSlbnzcrQ62Rfcffv7PPu3tPR0c/Qz9HS0dPX18/OUTAsKCk/ZNvLaU1HWe1o23Zc2MzExMzmX+PPx8HSW0tIUeLKycrO3untb2d78eTX193ucWVs9O3p6uvi08vGwcC/u7e/NyEfHCbmxbe7WD89Zn571UlQz8S5vM5STNXDtbPJVD06QmvKyMnP7XprX1pn\n/tvLy9TvX1df7+Pf5Ovk2tPPysbDvry4t1wmHx0fScG7tW0/OUvZb8xfROHQv7vG+knyyruvvOhDOD1XzsfK0vhwbmtnanLs1c7P23ZbWGzl2trqe/7fz8rJyMXCvbe27igfHh4/wb209T44Rs/nyPZBbt3Cu8TcSnjMvq+52Uc4O03Pw8fTcV5gent59vDa\n0tTc+GJbZfzl3+f4+9/Ty8fJyMS/ubTDMSEfHS3NwrTGRTk74+HNzURR6sy7v8xUV9PGs7THWTs5QPLHxsnfZWVxdm5//d/Q0NjtaVtj/evc3u/78N7PycjIxL64s7w3IB8cKc2/tL1IOjds3dfFSErq0ru9yFhL18i1scRiOzk/Y8PBxtRfVl92bvPv7dXQ\n1uxrXFv55ODf7H3239LKx8fFwbu2t1AkHx0hXb65tlk9NkrV6MJuRHzlv7zE6Uf1zbuvu99COD1PzcHEz3NZWfnqee7/39TT3XhfWGns4t/m7vDh1M7KycnFv7m1yi4hHx00xr60zUM4PODry81HW/bNu7/KUlbXx7O0yVA6OkDqwsPG21xTXHR64OTp2NTY\n5m5ZXvXk3d/yc/fe1MzKysjDvbe2WScgHSBRv7i1YT02SdPqwvpEcuzBvMDZSXDTvrC62UE4O0nMwcPK9VpXZGl75Ove1dLc8GpZZ+rh3OP49d7Py8jHxL24tLo8IR8cJd6/srlPPDVc3eHDTUrw1ru+w21I38+4sL7sPDg9VcbCxtNvXF53YG/t69TP0+Vs\nXVht6N7d6nt539DLx8nHwLq0tOEoHx0eO8K6s9pANkDZ7sriQmHdwLrA1Uhb08CxtstKOjo+5MTGxtpoWmlgXe3l18vM2/5qVmDv6t3b4u/n1s/KxsS9t7C0TSQeHB9Kwba18UE3S+Z8y1pFbde8ur/tRWzTu6+50EU6O0XYxcTJ1+lsfmVhdu3RycrVflpQ\nW/nt5OPu793VzsjFv7u1r7g9IB0aIU7BtLbwRDtc4/HNT0d3z7q5ve5Jati6sLjSRTs7SNnLyMzd+21sWlphcdnLyNDnXE9bbe3g3+Dd0c3Lx8O9t7GvxC8fHRsoYsezvWlCQ+Zp4vA+SmfKurm9bF/f1Lezu9hHPDpP3s7J1u90fWtdWVto3c/LzuxdVFZc\ne+fj4NbNysXEwr23sq++NSUeGyY+abu+11dT0PXW6D1AR3nDu7nO3d/twbu8yl5GPUpk9NXS1c/N1PhiWFFk8N3O09vldGJWXGJt49bMxcG+vLm0tNI1KR8eKS499fHa3cO9v7jPWUo+SVnX0NrL1cq9vLvD1F1JSkZMVldh79XMyc3Z5Oj9935vcG1uam98\n/Orf3trRzMrHxcPD1V1GOTc3NTg4Nzo+Sln209LNzc7Jx8XIzNDZ1dXV1d3j5ebn6OPl7/dxbG92fHhsam50dvl6bH13e3Btenv7+3p/9PP29/Lo4uLua2Fpa2NeW1dSU1ZbX2VqbW1t79/b2tze3tvY2dvb4ufr9fz08nxvaGtye355en/27u/7+fT6+3tu\nd3VqcGpz//rz9Ozl3tze8Xb9/HBlX1hSU1VXWV1cXmFhdOri3uHh3djV1dfb3+Di6e/u+3duZ2ZscXJzbnn7+PL9/fby9P50fH7//Hl1fffx8/nr5uLi7XhvfndpXllVU1ZXWl1eX2VkdOri3+Ll4tvY2Nvd3+Ph5ezv8/p/cm99/f7+e3j68vR8eX12fXVr\naWtwdG9vffrv6+rn4d7d5v56fG5kXFVSU1VXWF1dYGhrfOrg3t3f29jV1tne5OPj6PX/fXN0cG1zeXl9dn3x7+/6enr9/nVramxtcm9uc37x6+zs5ODf5ft2/3FnXVlXV1lYWVtdYWhrc+3m4+Dg3trX2Nri4eLl5/D6fH7/eXP+/v78e3b99/p+cHJ3dXJt\namxxdnpzdvn07e7x6+fj5e98enlsYVxaWFlbWVxiYml0c/3q5OHi497c3N3j5+jo6vX58fbw9X/+9fLy+X349vj+dm9udHBrZmhsbXBtbnn79PP37Onm5ery/X10cGJfYF1dXF1fZmptbnfy6+fn5+Lf39/o5uXo6O31+O/v8fv89fbz9/1/+/f5dWxxcG9t\naGhtcXRvcP/69PX5+/Tu7fX8+Pr/eG1oaWppZ2Fkamxwbm99+PLw9Ozp5+ft7+3q6O767+7t7O/y8uzr7PT78vf4e25teXVvaWpvb3Nua213eXxxcH18+395ef35+3p0/n7+fnV0ev78eHb+/Pb6fH368O/5/fbx7+7z9fDu7fD2+fXy9v53fv39e3F7fH18\nc/Pk6efyeHn5+f12bnR4enZub3h8/nx3fff29v778vT3/m9gaHBxc3P7/Pf7+Pr17u70+vHu7/L6+/Ty8vr+9Orsfv12+/j6f3T9/fv9enp8+vr+dHn9fH53cHh9fXdveX19f3Zydv/7fnR5/fz4f3x9+fb3fHj8+vn9eHv9+/t1fPv79354ev3593l3//37\n+nt1fvv4fHZ9/Pv8eXb9/Px8d33+8v57eH74+nxzf/79/Xp7e/j3+3d8+fv6fHZ8+/x9dHz++vp6dnr7+/92e/v7+P99/fn49np7+/v4/Xj17nR+bnB6eP54dXZ//ft6evr7+P1+fPv2+f54/vj3+nl5/vv5e3f7/Pf7fHh8+Pd+dP/+/v16eXz8+Xx1/vz5\n+n13fvv7f3b/+fb4e3V8+vH+b3l8fv59eHj99vd9evb5+Px6f/v5+3h7+vn3f3l4ffp9d3V//fn9e3379fX9efv5+/l6eH77+3h1fv7+/3d2ffz5fnj/+/f2/X758vHy+Pr29/h+dHl+fnlveH19fXd0dnn6+XV/+Pf19/z78Ozr7/Lt7e7yf/77fnxub3l3\neG5ram91cGtpcXV6eXd5f/Py+f/48u/v9Pvx7+/0/O7l3OHl/mx+dXdvf/v7+Xl9/fn2+nt++vf3/P/+9O3x9u7t7e72fP/7/nhtcHl7/3t3eX15cWlnbW5vbmhsfP74fP719vP6fn738fH7/e/u7uzyf/Lv7/Z8+vX19n9++fT0/H739vb6eHV3d3tzbG9v\nef91b3R9+39wdH55d29tc3d7e3J8+fr7enV9/Pr8cXh9//V/d3v79Pd+/vL7+X9xd3b+5Ov17/Xr93Vxff38cm5+/fr4+nj8fHdwanJ7d3p0c/5/+3t7+vj4/Ht9/Pjw+nv48vP1/H7+8/L1fHz7+vb8dnz6+v10fPr3/HZyd/v1fG58/f39/n1++vj2/nj8\n+vr9eHl+/f9ydnp+/nlzdXx+/3Z0ff35/Xx9+/Pz/Xj9+vj6enZ7/fx6c3v79Pt8efz29fp7f/v4+f19ff76/H18e/37fXZ8/H99cn77/392dn3y8/x2fPv+/ndydP309nt3+vn6/3d4//39dnr69+/6fH349fd6ePz7+3t4dn73+P52/vn9+3l4/P78fXj5\n9vl9eHR9/Px+dnp++/f9fv729vl+fvj29f15ev37fXN4f/79eXN6f/v7eHj//vd/en739vd9dv779Pp6fvn09nt++Pr5fHd5/fX5fHv2/Pn3e3h++vv7eX38/vx5eP/9/nlz/v34+3l6/vj4/nb/+/r8enh4/ff7eX34+fj+eH36+ft4e/37+X13ef30+Xl9\n9vTw9Pz+9/P1fXn9+/r/dPrj6Ozv+PP08fx4eH78/3Ry/Xp7/nZ4/vzqc2h1d+/59+vx6fT39/Pv8PH4/vnz8fl7/Pr3+f3+fvP78fj/7vHw+nz78/X7bWx6+vvx8/Tx9PT39/L08/f6/ftrXWJjb3h+/Xf48u7u9/jw7/H3/3/4+vp8evX09Pt9fvj09nx0\nfv79/3dydHp8cW12eHp7dnJ1e316c3p8fv95dXv++vjx4uPk6/V8aGBjZmNtb3Z9d3h8/vj5eXz7+vX+fH77+fh8d3779/x4ef39/Hp4+/v7fXh2fH7/eHf+ev75fHp5/vn+ef38/fp9eHv9+n53fu/vdHlvd35+e3F8/vj4fHl8+fX5eHn8/Pt9dHj9+35y\nev78+3x4fPn09Xd6+Pv4f3p6+vj7fHT++/r+dXZ9/n5wc359/X94ev3x8Pt9+fz49H56//z6e3R6/fv5enh//v55b3z2+/x6dn76+X92/vn5+X9+fvr3+Hx7+fr6/Xd8/f7+c3n+//16dnr++/11efz59P58//jz8Pt8+ff1+nr9/f35cXZ//vx9d3Z7/vt6\ndXz/+vx8e/z5+v11e/z9+3x2fPr3fnj59PDz/3p+9fH8dn/8+/p9eHb+/vz/dvr89/l4/fj5+3j/+fn7fXV3/vj9bnN8fP17eHd+9PX9e/n39ff+fvv693t3f378f3d3/vr5fHj9/fn/eXv89/n8ePz1+Pl9d3v9+3ly//v6+Xp1ffr6/3R5/vv6/Ht8+fn2\n79/g5ursfXb/e3txdn3//nlsbXB++W9+8P70evx6+/5iYmRten76fPzy7u74+O3t7e/8+/fy8v59+fr7fnt8//Xz+nd++n39eHZ9/fx9dHzv9Hh4b3l8/n5weH39/nh3ef739319+/n6/3p5/vj/cnZ+//x6c3r8/H1xcn/48/h9ffnz9X12/Pr7fHN3fP7+\ne3f7/vt/dHl++fR6eP7/+/X/cH1++3pyefz6+np0fv36/nb8+PT3fXZ8//z+dXz+/Pj8fnz69vp8ef5//P5+fH76/Xh8+/r5fHV4/397cXP9+fP3/v348vP/d/37+vp5+O13+XR1fXd+d3NyfP7+e3b8/PXx/X779/f7eH37+/l9ef/5/Htz//j3+314fvf4\nf3R7//v4end7+vj6eHf59/j+eHn9+P12fPv6+H53ePv1+nN2///9/X12/vf3/nf+/vj4fXv++fb9fPr4+Px3d/7++3t0ff77/Xp5/vj2/HR5+/r4fnV8+fl+cX35+/d8eH38+fp5fvn5+3x8fvj2+Px8/vn6fXV3/fj7dXr8+/j/enp/+Pt3efz9+395e/v3\n9352/Pj4+nl3/Pz6fXn7+fT2enr9/Pt2cXt7fn59fX/z493q5+bx7u7y9fT7d25xcnx7bW5xen15b3b7+/p+c3j8amJnaX/99Pj79e/r7fTv7e3t8vv68+/x/H359/X5fn769vZ9dXx9+/13dnv+/nl3//78fnZ1e/z6fHf+/fz0fnB8/fn9dHX+/fx5cnv8\n/f11fvr79396f/n3+Xh++/z6enZ1ffv9d3d+fvj5fnz5+Pt7fPv6+3xxcfv9/3ZyfX79fXp6+/P0/Xj++vz8ev38fPh5efn7+P53dnv9/Xx1ff35+X17/vj2+3h5/f38e3f/9vb9efn39vZ8eHv8+H51fPr6/H15evz6/Xhz///+fXV5/v3+dXj9/Pf+eXz5\n8/l1eH/8+fv+/ffx8vx4+/j8/355fvr7fHb8+/n9d3V+/n53b3Z9+/57eXr8+f53fvb393xzevz4fnb9+fb3/3v/+vn9dXd+fv19evv19v15dH349/9yd/v193t7/H77fXh3fvz7enr6fv1+en38+ft8c337+ft5ef35+Xl0fv35+np4/vr6fnf+ffn/eXl6\n/P38fPr1+/x7eH749/92//L3/Xtyev37/nd6/v39fHv+9vP2fHv39/f7env8+39ydX59/XpydHz6+H17+vf3+35/9/Pz/nl8/vt/d3X/+/16e/X28/p7e/73+Xlye379+npyePz4/HZ6+v35fnj79/X9d/b38/L+fP75+nxxeP36+H55dv74+Xt3/X7+enF4\n+/b7dnn59fL8d3r8+vl4c3t9/f7/ff339ft9+Pj29338+3z/dXP+/Pp+dXJ7/vv9eH739vZ+e/z49/t5e/v8+Xx3ff37/3d//f36fHl9+fn9d3r9/Pr/enz++PN8efz69/13e/z7/Hl8+//7/37++PP6dnz8/Pt+fXt8/nt2dPv5/n11ePf093p2+/by93p3\nf/z7/3d+//z7fnt++/X3en74+fh+en/49f5x//z+/nVydv/7f3R3/vn5fnx5/fj2+3t+/fn4e3z8+vx4fvr5+H5yevn5+nh2/fv6/nt8/fX3/nd9+/n6eXf++/p8dXz+9v16d376+Xx1//z5+317evv4+3x++f76f3p+/Pt+dXz2+P17dX349/t3efr59/98\nffr0+nd2/P35/nh4ffz+dXr7+/n/d3f++/p7efz69/19fvr29v14/vr//X53/fv6e3j7/Pn7e3Z8/Ph/dn7+/Pd+dXz++ft5efv6+X12fvn4+3n++fj5fHZ8/fv+dnv9/ft+e3v99vh8efr7+fx5efz6+nl5+/v3f3d4+vr9fHb9/Pn9e3399fX9ePz5+vl7\ne31+/Hd0fv34+nt5//v3/nR4+/X7/Hz++Pj7eHz8+/l8dnz8+/92/vv6+H15ffr39+vf4uPr8PH49PP6d3F5eHt3bnR5fH10eP769Xx4cHb7bF1ibHH//v378+zr7vXu7O3s8/Xw7+/3//b08vl9ef78+31ze/78/Xx5fPn4/HZ9+vv7fHd4//12c37/+vp7\ndnn+/X51ePv7+317fvv4+vh9ePv+fnR2/vz8d3n7+/f/eXl9+vl7d/3++396eX73+P54fvv7+3p2/vz8fHb9+/n5enh/+/l9dH39/P19/3v69f15evr9+n52ffn7/XV6+Pn8fHV7/fz+dXj8/Pr+fnz+8vN9e/f5+Pt5ef75+3l5/Pz6/nh4fv39d3J8//z+\nfHz89vl+dX/6+Ph6eP/4+H14/fv4+nt6fvr3/Xn8+/v2/3h++vf7eHj8+/t9dX39/P11fPz39/53ePr6/Xd6/Pv4fn1+/vX4f3j7+/v8eHj++vx4eP35939zffv593p4/fr5/X16/vf2/nb7+/r6efXtdn51cH59+v54dnz8+v51ffv6+318ffr2/Hp6+/j4\n/nh++vn8eH76+vl9eXr/+Pl2e/7++355efz4+X13//z3+3Z7/fr7eXr7+fb9d3j+9fl3dn39/Px9eH739v14/fx+9nx4/vv6fHV++vj7e3d9+vl9dn78+ft+fH759fl5fPr7+H52ef36/3Z9/Pv5fXh6+/n7enn+/fv9e3v7+Pn9d336+vt4ef78+3p5+vz4\n/3h4ffv7fXb+/fj9fHt/9vj7dn38+/p7eP76+n13/vr1+3t2fPz6fm94+vv8fnx8+fX5fHv4+/j9d3n8+v92efb4/n10fP36/HV4/fr6/3x9+/X4fXv6+vn8eXl++vx4eP78+X52ef77+Xx2/vr6/317/ff4/Hd++vn5e3f++vt8d/34+f18eHz9+P51fv39\n+H53fPv4+3l4/fv5f3d9/H9/e3z59/b+eHr8+ft2ev78+v97ev/39354+/v5/Hh5/fr6eXf++/f8enf9+/l6dv/89/1/e/329f13/vr6+Xx7fP76eXV+/vn8e3Z8+fn8dnz6+/t+fH759/l5e/n99vXv7XF4dm56fPv8fXd6/vn4eXv7/Pn+e3X+8vj9d/z5\n+ft7e/z5+nt3+/f1/Hl4/vX3d3Z+f/39fHp9+Pb7ef/5+fl8d376+351fvn5+Xt1fvv6/nZ8/fr4/nz/+fT6enz6+/n+d3n++f51e/z7+X13efv4+nt7/vv6/nx7+vf5/Hr++vr6eHn++/t6efr59n16/3709X95/Pv6+316fPn4/nd6/fv7enZ//Px+d377\n9vl8d337+f10ffv9+318e/r1+Xt9+Pv4/nd8+vr9d3r29/t/dXv9+vx3ePz8+vx8fPv293x5/fv5/nl3fvv6fHno3ePk8Pjt7/H+dXl9fHdvdXZz/3luff7semtvde377uzw6fDt//T49fD3ffr693d5/Pny8PP6f/b48/5+9vT39/n98e/we2xqfH338/Lz\n8u3w9Pn07fD1fmpcZGdnbXj8+31+8fDt7/f58e/v+H739fP5/n399/j7dHt/fv53/X5xfnBudnp8fHVwdnz/e253/X3+end5/vl+dnR+/v18dHd+/n11ef/++3t2d3r7/nV1fX3+e3d2ffn9fHV7/fv+d3b+/P57dP77+f93dXv4/HVzen3+fXp3e/j7/HV8\n+/z7eXZ8/fx8cnr+/Pt6dHz7+X10ev36/H57ffn2/Hp7/P37f3V2fXv9eHj9/fh8d3j/+vx4d/39+/x6e/z7+vt5evv7/Hd3/vv7eXf8/Pb+e3l8+/l9dv9+/P57eXv5+ft2e/n8+Ht3fvz5/XR99/j5fHV7+/t+dHr9/fp9e3v89Pp8evr6+P52fPr8/nV4\n+fr7fXZ4/fv7eXf8+/n+e3b48/j9efv8+ft4d3z7/Hl2/fv5/nh3ffn7fnh++/z7fnn++fv9d3r8+fl9eH77+v91/vr5+n15efv3/XZ8/v/4/3Z6/Pj7e3f/+/n9eH36/Pp4evr39394ef77+3h3/v37/nt8/fn3f3n++/n7enl/+/17dP/7/Hx7eH/4+350\n//r6+357/fT1+3l++vv5fHt8fPp7c33//Pt7dnv7+Pt3e/z7+P58e/r4+3p2/fv5/nd5/fv8d3z6+vd/ent++Pl4eP3++/55eP74+X92fvz6+nl5/vv6fXj9+fX9e3h89/l4c33+/v57eXv49/t5ev/293x5fPv5f3R9+/r6fHl6/Pv9dXn9+/p+fP/59vl+\nefv7+H53eX36/XZ6/f35fXh5/vn6e3j9/Pn8e3v9+Pn9eHv7+f15eH76+3t3/Pv2+3x5fPn3fnZ9f/3+enl9+fn8eXr7+Pj8d3z4+/13ffn3+3x3ev37fXF//vz3fXx7+/b3fnv6+vn9enn9+/53dvf5/v51eP77+nh3/Pz5+359/Pb3/nj8+/r7eXd6+f17\ndf/7+vx6dnz6+P51fv37+H17fvj5/Hh7/Pr3fHd8+vn+d3/59/l+eXr+9vt1en7/9f5zeH/5/Hx2//v5/Hh7fv72eXv29fX9eXj/+fp2dn7++358eH/39/t4/fn5+3p5fvr7fHL/+/v8eHZ9+/x+dHz6+vp/fP/2+Pp8ffn8+X316H5zdmx4e/7+eXV4/Pr7\neHv7/Pf8fH359/l8eP379/54ev35/Hl7+/f1fXp4fvb6e3d+/vt/dnT69/j9d378+fl8eP38+n51/ff2+3t3fvb3eHN6//78fHl8+vf5eX345t3p6uzx7+9/ffP2+3ZydX18em5xe3t6c3V6/fh8cnVwX2hra3R89PP89+3t6u7y8+/s7fX78/Pv9fv/+PT3\n9Xp1+n3+dXN6//x3dH7+f/59d3v89351fX//f3p2ePv7/HZ2/vv8fXd7/Pr+dHv6+Pl8dHn+/P5zeX5//Xt5ef74+Xx4/Pz4/3V5//r9d3X6+v5+dXh+/Pt5dn78+/18e/349v54/fv6+3p2e/77e3R+/fr9eHV7/Pl+dv78/ft9e376+Pt2cvz3+X53fPz5\nf3Z++vn5f3l6/ff9d3n9/vP7cXl8+Pt5dn39+v15e/z6+Xl5+fb2/Xh5f/v6eHX9fv38e3l9+Pj9eP/6+vt8eX/8+3x0f/v6/Xt0ffr5fXR9/fr6/nx+9ff5fHz7+vl9/X55+3p2e378/Ht1ef76fHl8/vr4/Hp9+vb5fHj++fn9e3n++/x5efz6+P56eH73\n+nt2//77/nl4fvn5/nV8+/r8fHh9+vp+d/r5+Pp7d372+nt1ef79/X14e/n3+nt7+fv4fnl7/Pr/dXn7+/p8dnr9+v52ef76+v18fPn19v14/vz6/nd1d/n6eHn++fz/eXb/+fh7dvz8+vt7evz4+fh5ePz8+nd2fPz7e3b9+vj5fHh8+fb/dn39/ft8d3v5\n+/t5dvz8+X54fPv5/Hd99/b4fnl6/Pn+dnn+/vt+e3n+9/h+ePv6+P56ev35/Xl3+fj9/Hd1/vz4e3P/+/v+eH/59vX7ev75+fl8eHz7+nx0fv37+3p2evv6/nd7/Pn5fnt++vf7eHv7+vh+d3v8+/92ffv49356ePz3+nh4/P72/Xh5//j6fXb+/Pn9eHv7\n+vp5efn49/15d/76+np1fn/8f3x5f/b3+3n9+vn7eXl++fp7dX79//l8dX78+v90fPz5+/58//f393p9+fv5fv59e/p6dXn+/Px7dnn9+Pt5ef78+P57fPv3+n55/vr5/Hh3/Pv7enn7+fn8end++Ph8dv5/+/x6eHz4+v12evv7+Xx5f/v6fnX++Pb6e3h+\n9/d7dXv//v58eX34+fl4dfb8+f14fPv6/3V7+vn5fHd5/Pr9d3j8+vn/fH359/h+efv7+f56d376/Hh3/fv6f3l4f/j6fXd+/Pr8fHv9+Pr4eHn6+/t6d337+nt3/Pn4+315fPv2/nd9/vz7fHl7+vn7eXj8/fd+eH37+P53fvj3+H94ff7/fnl5/v38f3t7\n+/f4fnn7+/j+eHr++/x4dfj3/v52d/78/Xl2f/v5/n19/Pf4+3r9+Pr6eXZ8+/l6df/9+/16d3v7+f92ff37+318fvn5+nl5/fn6fHZ6/fv+dn36+vd9d3v7+Pp4ev7+9+ji5+Tr6u399/j5eHNzev97b2t6fHt6cXZ7/PtvbXhqXmZobnf58vT58Ozs7PLz\n7+3u8/308e/0/n3++fn9dn37/Pp8en36+v14eP7//Xl9e3X9d3B2fn/+eHN2fP3/dXV8/v16d3Z8/312cHp//3hsaGpoaWlw8ufe3d7e397g5uvp6u77dGxmZWJfXV5hYV9cW1xeX19faXB4end3/ern6ePd19TR0dLS0tHS1djZ3eP0c2ljX1tWVVRST0tJ\nR0ZGRkZITVRea/vo3tnW1dPPzs3NzczJxcTDwcC/vr69uri3usPpSDYsKCUlJyksLjI4RGfJuK+sq6ywucLXblJFPjs6Oz5Lbs2/urm7vsPHx8TAv76+v766tLGzveNBLiYiICIkJykqLjRG17isqKaorLG5vcbWXjwwKykqMEB1x726uri1s7K1vMnndPnW\nv7ewrqyrrK+8ejkoHxwbGxweISYvP9W2qaOioqWprra/7kU0KyclKS88W9S/ubKurq2wt8HU92B/1se8tq+rp6Sjp7ZgMiMcGhkZGBkbHyxMu6yloKGhoaOnsMFOMSsoKCcqLTJE2rmvrKqtr7K2vMfWYE5Y5sS5sKuopKCgqMFDLB8bGRgVFBcbIjbWtK2m\nn56dnaCrv+dENS4pJCAkLDpkw7i0r6qoqay0wdnd2N/s5tfGtqumpKKltP4/LyQcGRYTFRsfJi9UvK2inZyen6GnscJfNSkmJSMkKjE+d7ywrqupqqyus73KzczS2c3AuK+qp6iw0lpBLiQcGhgXGx0fJTByvK6nop+enp+nsr/jPi4pJiQmLDI6Tsu3sK2q\nqqysrrK6vsHGyMW9ubWvrbhaSFQ4Jx4dHhwcHiAlLUnkzbupoaOlpKOnr7vVTTw2LysqLzg7QXPFuraxrq6urrC2u7y+xs/Mx8nP5Eg6RD4uJykuLCcnLTo5OEJvzMzGvbeztba3t7i8wMnKzNXj5+bp9HZ0cm5pZ2psZ2Rnb3NpanH17fPy7m5ZYGBRTk5V\nVkxLTlhaTk9bbW1jbe7b3ePd1M/U1dPR0dXb0NLm197c3PXq7+7weHF2enZ0b23//HVoY21lXltVVVVTU1FSVFVYWl5fY2/97fPr3NvY2dnV09TW19bX19nd4ebm6u99b3BvbGhlZmprbGhqd3h7dnVxbGxrYWBjX19dXFxeYmRjZGpyfvn78ufl4eHk39ze\n3tvm39rq3u7n5u/qfHd5e3pvaW1vb3BtbnV99/p2dv3/dG9nZ2plYF5fYmNlYWBnbnFzcXr27urp5+bg3t/i4N/f3+Xq6+js7n5++f1+d29tc3V1bWtzeHl5fH76+PT7cXd4b2tmYmRmZWJhZ2ltbm314eHg5+nk4+Hj5ero5OTrd/jx9fX7eHpz/fp4/fj3\n/nhwem/87/749enr9vny7+/48XFmbGhvZ2h8dH5rbnT8+v98f/jw6+/z6ern6Onq5+Tn7e7x5+3t9Pn39vh8c29nb2xlaHb87vn++/3s6+7yefntd373eft7c2lu+v54bXR+/Ht1dHr2fHp4d3xkc3V79/Dr7e7y7Ozr7/j69fL3fXv7+vp+dXNvavJ0aO1u\n7PNs+3f4fHhubXdubmllbW5wa2pzdnx8c3b9+Pb4fPXy7/D49/fx7vT++/f0+fp8d/Z4Xl93ZPL1b+128un8+vP28fH7fP/8eXpwZm5samttaGZvamlsc3b9fHh/9O3s+PDs9ubv9ev17Of99Pb77vV7cvl+d/5ud/14/nZwdPv4eXd7e3t6d3RrendqbGlp\ndnJscG/9f2/0d/zm+PTu+unp7fv76fnt8fnoc+frZ+RydOtr/Gl9+WbwYnvvav36cnHn/3jucn7vcXZxaHZ3ZGpwZnd2aHl9avDsZ+3lcN7rbtzz7undae3WW+PYVO3VVfvdV/bcU+b7Zej+c2ngbn7hWvvnU+B5TuRpWHRqXWDkYmbeX/Peaerl99lu1vV7\nyVPU6l3JTdvVTdv7YN1f5utPzV5Xyk76zk7y01Xq51n9YXBiTuxXUOJYVH5m+nBr3GLh5W/X7+Xo6td579Nk1fFZzGzz6nLOTNHYSM/iX9jzdtvyc878Wd5oXV5RXElZWUJ1UkjpV2JmbtX34dXsz9vl1uPW+unUce/259xe491p3tZe3M9b09tey/HaztvJ\nfu/NWlNWT0w/QEQ+P0BBTUpMeXTs2tvEydXDydDM2NXd59t59+Re7d5q3eHV3PfE0+zFyuLKwczMweVTxVk1UEwzLzY/Li4+OjtCS3Lvz8fAt7u+uLbCz7/HX/voWlJUZV9ZfHndzNTQxMbMxL7Ewra6wdvZvEYyTT0uJy02JSc0MTU1TO/3vr+4rbGwsa+z\nxsPJ/ldES0g9QEVNWVzszsXBv7m3tbOwrayxz8OvRiw9OikdJC0eHyktMjFW8syutrCppqm3rKzH3u/1QDY+OTs+PUle0dTLtbS2r62srKmmr9u/sjgoLy0iGh8jHCIlKjRGyvW2pampp6Cmsay30f5LPjE2Ny44QUZM57++uK+vrKqpqaejreLHtzYmJycf\nGR0dGyQmKTFztsyxo6OjpqKprqzHVUxFOSsxNTE9Q1L0wre6sKusq6mnpqWoyXa6SCgjISEaHB0ZIiosL0eytq6kpaGjoaq5sMNNOzU0LDAzL0BY9Ni/srGtq6ypqKanp6vX68w2KCIfHRoeHBslLDU74LS2p6KlpKWjrrq8XUI4NC8sNjQ4TWfRxbeysKus\nrKqqqKinsmLeZTAqIx8cHSIdHygtPEy+ubWlpaanqKu7u85CPDQwLjE4NURg4sW8tbSvra+urq6sqqm68t1GNjIqJB8jJiQsLzNBbsDGubK4s7a4xuXxRT9AOz0/T1vkwb+7ubq7u7i7u7i4tK+tssfcTzk4MCwoJygnLTY4Q01718i7vby8wsfS22tWVElL\nUmvb0snJxb+/v8HDwsPCxMTDwb2+zF5EPTs4NDU0MzQ4PD5KU1xseuTVzMnLycrOz9XZ3d7g6u3q4tvZ2drZ1dPPzs/NzczMy8rJ1GpVVEtDQ0E7ODk8PUFHS1FaXX/b0MzJyM7Pz9LU2uLr7O3069vT1dPZ5tjU0M/RzszKx8jWYFtdTENEQjs5Ojs+RUpN\nU1le59PQzMnJzs7Q19Xb5+/3fvzk5eng3dnU0NDPzc3LysnGxtZcWVxLRUZAOTk6PD9ER0xXWV7j1tHLyczOzdDV1OLt5+v09evu5tzd2tTR0M7Oz8zJyMbH2lpbX0xFRUE6OTo7QEVHTVRWX9/W1s3Ly8zN0dbT3efp9/Ps5+7q4uLX09XSz8/Oy8vKxsXU\nXFZfT0hHQzs5Ojs/QkRNVVhc69nVzczNzMzO0dPf7Obp7fLt7+zf4drV0s/O0NHMycjGxdVdWmNPSEhFPDk6OkBEREtQVVzp2djPzMvMzdDS0dvm6fHv6+rx9OPf2NTV0s/PzszLyMTE1VxZYVFKSkQ7Ojo7P0FES1NUWOza1c3Nzc3MztDT3uTl7O/w7+7q\n4eLc1NLPz9HOy8jHxcXZWmBeTklKRDs5ODs/QkVLUFNd5tvXzczMzM3Qz8/b5Onr7evt+fHn4dnX1tHPz83LycfCxeJXX11OTEtBOzo5Oz9BR01SUVzp29LMzs3Lzc7O0dzg4ez08/Ly6uvm29bSz9DPzMnHxMLLb1tnVExNSz87OTg9P0JITU9Vb+Dc0M3N\ny83Pzs3R2uHs8+zu/Pvv693Z2NPPzs3LysfCwdNfXV5STk1HPjs5Oj4+QktPT1d74NbNzs3Mzc3Mztba4evu9H/38Pju4NnRz8/PzcnGwsDJ+l9lVk5OTUM9OTc8Pj9GTE9PYuzf0s7Ny83Pzs3O09zn6+zx9vr889/b1dHQzcvJx8XAwtpeXVhPTk9GPjo3\nOjw8QUpNVGDq2c3Jy8vN0c/R2+dvZWt47fvr3t/a2M/HxcO/vrm0s7t5SUI6OTM2ODM3NTg/QU1k9NTLv7u8u8DJznNXTUJAPT1CS3DUxry9u7m8uru8ubeyrqytvlwxJiMeICcoMj1Mz8rBu727wcbMW1NEPENBS+/nz8/Pxsi/vsXC09/ccdXGvrSxrqup\npam7TSccGxgdKjJoy8rDzc/Nx8LY5VE4ODQ7bc68t7vE3G5Zac3GwL/P2NrTv7iwrauqqaes2jggGBoaIDxNycPf5GfgzcO97U07LjU+Z765uL3NelNi786+wMXM4tzOwrmzr6+vrqyos0wtGxccHTLnz8L3TUdZyL63xEE1LS5H1bmzuctbUk10x8S/w9be\n3NPHvbi3tba3sKynq/AvHhccIC/VzdhOPkFfvLW4xzstLjJXwra3x/xIVeLNv8XY7vnbyr++v77Avri1r6uoqs0yIxkdJSxb41xDPk7mubbD7DsvNED1w77I7Xhm2cLI029TXtS/vL3H2tXIvLOvr7CvrbhGLh8bIyg64+1SQU5eyLjB2Us1Mz5az8LF4fnq\n38fH22dXWuLCvb/I3uDLvraxsra0rqzGOSgbHigwYtpeP0FX2rm6zlM5MTpb0cfK+Fzo1MXE3VhNXti/ub/M5vTMu7OxtLq6r6u9PSkcHikzYtxaOz1X1be40Uo3Mj36zMzVaFjbxsPI70pIZ869uMLZeu/Ht7G0ub66r6m5OykcHSw4bt1PNjpkyLS45z41\nNUXTydxtVV3KvL7NWD9BeMG2tsd1XeC/tLG4vr+5rKa0OiYbHS4/6vJEMTfkvbG6Wjc1PFbKy19KT/C/t73gRjxGz7i2v+VWWM+6s7O6wryvqKbDLiEbIztVe0k4LkjAtrXRPjE5U9/MeUNF/cW3uNRGPkN6vrnB3Flez7q0trzDv7Sqpaw/Jh4dL01eSDkx\nN8q1tspHNTlX5dxhQD5mwbi3zEg9Q27CusPeZXPPvrm7vcS/tq6pqL8tIx8kPEtFOTc3Vrm3xlc+O07efE9EPk7Ft7rKWEBF8crDx9r03cnCvr/Dv7q1r6ypsDsmIiAwSEQ6ODtEwrjGXEY/SuP9SkFCTcy5u8xfR0dvzcjL097Vx8TEwcC9uLSxrqqtRiYj\nIC1KRjk1PkTJtsZRREZN4OlFO0Jbx7a721VMTu/O1ePd0svDxc7Kv7q2srOxq6rdJyQgKUdNOjE9R9a3wE8+S1bu40Y2PnrIu7veTVl4+Nzd99nEw8nLz8q8tbW2s6+qqGcjISEsTU01LT9fyLjKPzpe3ONePTNDyry+yW5M+c/qXmPqzby+0uLPv7eytrm0\nrKarNh4hJDlWPi0tVsy8wFc3QsvIXD00N/a5u9puaPPKzlFDZce9vMt/6L+1tri6t66no7kkHSUsREAwKDnBvcdmPzvlut44MjpXw7vdTerHxtZPPk7DuL/S5ta/tLa9vLOtqKSuLBwnLjc3Lyszv7niRUhO7b7VNS9E3tHQ21d8vb5tQkZcyrq/3uLBu7u6\nu7qxq6inqzscJC8xLiwvNcu300BJ2c7R+joxR8/ZT1Xhxr/HaUFL3MrO08vFv72/v7ixr6yppqdPHSIvMCwpLjfMuN49RdDF4Uw7OE/U40RNzL/Cz3RLWtDM3NXFv76/vbm0r66tqaWpNBsoMywkJi4/v8FOOXW8x1I8PUv47Ek+Ybu62Wr+6eHd7XrJur3J\nxrizs7Ovq6eksyQdMzMmHik6ab5fPEy8u1M6PlZ6Tz89XcW/3FjSwtNUU9vGv8fOxLawt7qxq6inp9IfKD4oHh8xPv/zP1LBt+4+RmJzSDo+VdnU527Mvc5kadLMzcvMwLq3uLexrauqp6k8Hzw3HhwmOzhZQ0fAttI/X9FfQTg/X/FKTc/FxNj+0sTMbdnA\nvsPCuLOwsK+rp6SuKiXeKRodLTYzRznZsr9IXLziQDs9U1w/O9vD2ejSwsTJ4tW+w87FtbO3tK6qqaenbiNePBkcKC8pOzlPtcFS47bYQklCSEs8N+vMSeS+xc3Dx8m7ytK8tLi5sq6rqqmmuidBdRwbJCwlMTU+ucVZ07LUS2JLSUg8NWvWPmG9wc/FwMG7\nycy8uLu5sq+trKmlrDEzvSEaIykjKjExv8tRy6/HVtdXUE08OFJTP1TczMrHvru7wr+8vby6t7Kur6unpt8vvjYbISckIywqfs5G16+75cXmamM9N0pLNUvhb9DGw7i4wb23wb25vLixsa2pp689dcohHyYlISclNdxFTrm1zL/E2dNOOkVMNzdPVGXUzLy2\nurq0ubm1t7mys7Otq637P780ISYnJCcmKEtJPOC4xsO/zMTOSUxnQDdGRElxfM67vLy0tbm0tbm1tbm0sq+v7UXIOSgpKSUqKCc6QjtSyMvEv8zBvdpi4WtMTEJGW1lhz8XAurm6t7i7u7u/wL+/vL19UelFNjMuLTMwLTU+P0hWZNjK1dTGyM7Q1t3c/l5s\n7+3m2tXMycrJyMjJyc3Pz9DS0NPd7/heUEpCP0A/PD0+QEdMTVRlfO3h4djOzdHV2tze7XZ96+nj3t3Vzs7NzM7NzdLV1NXT1OL1bVxUSkVDQ0A/P0JGTE9UXWr+6eLb09DQ0tbZ3uP0+/Tu7Onh2tLP0NDQ0NHX2tra2trc5Pd+ZFhPSkVHRkJCREdMUVJa\nav7k3d3Y0s/Q1Nrf3+b4eXzu4+Dl3NjU0dPX19jY2uDl4t/b3PBxaWBaTklHR0dFREVITlZcZHXs2tXW1dLQz9Xd5uzw8/l2/uje3dvb2dXV2dze3t/k6ufo497j+25gXVhNSUdHRkdHSEtQWmn27uDa1tHR1NXW2tzi8/z4/vLq7OXf3dnb3d3d3d3k6u7q\n5ujn6+rtf2tdV1RQTElHR0lMTlBUXXbq4t/d2dLR09nb1NDX3Or47uTl6evn4d7f4eTj4+jo8PDv7+3v7ufqe2ZcUk5OS0lISUxOUFJYY/3m393Y1NLP0tLU2Nrd4+br9vx98+zt6+7v6uTl6e3s5+Dj8uzu5uDf4Ox7Y1tWUU1KR0ZGSU1RV1tk/ODY1dbX\n0tDP0dfd5uzy/GxoZmdtbnJ6cl9i9e/239nd2M3NzsrJyMbI1OxjVExHQTs5OTs9QklJVWvn1s3JycnLzc/V4P5hXF5fZWlv+ufc1tfX0tHQ0dPV1dHPzcnDx9PhYFFNSUE8OTg6PUFGTFhq4NDLx8bIysvO0t13WU5NTE9SVV1s7d3X1M7NzcvLy8vKysjF\nwb7AzNxeTUhCPTk3NTY6PkRNWWfm18vDwMDDx83Q2vJfT0pJS01UXWz14tzTy8nJyczLycjIx8bBvsLO3lhJQz86NjUyMzY6QExYcN3Sxb68u73AxsrT5mdTS0hHSU9ZZ/rr39bNysjKzMvLy8rJxsG/ydf1TEVAOzg2MzA0NjtFT1/i1Mu+u7m4u7/Cytfo\nYU9JRUNITlhq9+3azsvHx8nKysvLy8vHw8LN3mpJRD86NzYzMjU2PEdSZN7Wyb27ubm8v8LL1+xdTklDQkZMVmn459XNysfHyMnKysvNy8nFv8DO2mFFQjs3NjQvMDI0PUdTbtvPwru6t7i7vsLO1+taTEY/QUdNWmz73dDLx8bIyMnKy83LycnGwMPR2VhC\nPzk3NTIuMDI2QEtY8NHMvrq5t7i8v8bR2HxTSkI/Q0ZLVF732M/LxcfHxsjKycrKyMfDvb7Oy/46PTkyMS4pKy80SmnpzL++s6+0tb3S3+dRTUI3Oj5CXe7wzcjGvr/HxszUycvLxMbEvLiwrb5mSS4tLigkJSUpPkjsw8C8r6+0s8f8bVNHUkY8SU5ozMnP\nx8rKwszq+F9e4uTp0cvFu7m5tbOvrLZLPS0jKiUhIykrSMnMtrW4tK/Bz3o8PklHR2VP78C/vb3N2s3qdWlMTG915NHZzL68u7i6ubOwra9MMS8hJyggICw0TrK9ubKzuLTPOz82OUhVROLAvbC1wczPX2JOPUNTYdnO3MvAv7y7v725ubWwrrk5MiwhKiUf\nJDZAzbHEt7OzwcRDMz87QExjXbmytrS/1troQkA+Plzb5tfHysC+ycrBv726vLeuqsAxNSkjLCIfJ0VOurPJtK+11eYyNEU+P0/nz6yut7vG935VMzc+R+rM48y8wcDF28++wMC8urKqqfQtOCclKh4eLfVdtbrDrqy+T00uOkg7OWTFuqmxvbu+cE89LTlK\nTWfP0b62w83M0cu/ysq6tq+pqkstRScjJx4fN9dLt7m6rK3WQFgwOz81N8+6uquyuba3UT8+LzxKRVjCwr65ytTHydjJyMa3s6+orjM1RSEkJB8hSVpMsbm0ra9PTlgxOjs5Pry9uqywubi+P0M+MzpFRmq+x8G7xMvCzeLFxsO4sq+oui0/PSIkIyEpZkJa\nr7C1s7ZP5E0vMj0+Q8TLuaytvb/ISUs8MTdMTW3Iyr66v83DyM/HxcC4sK2sWS5dMSMiIiU0WTfTsa61tsR+y0AxMkNAUNvStK6yw7zLb0w6OD9MRmHZx76+x8e+xcnJw762sq6wPjVnLSMjJSc7SDfKsLC6tMfWykAzOEk7T/PSurG5xLnI71FCPEZKQljZ\nzcfAxsG8v8fAvby2sK/PMklEJiMkKCxDOkK7r7m7tMXK3j81QUU5SuLOv7e9vrrFf1tPRUVJR1jb1M/Ev7+9vb+9ubi1r7k7NmIuIiUnKTU+N3+wtL+2tsDH6zs8UD44S+viyL3Ev7jD7OD0TU1OSFjn9eLGv8G8uru2srOxt0M3Wy8kJSgoLjszTbu1v7iw\nurrFWkRdSjk9Sk5cz+LVvL7LyMba2t5dX+fudNXNzsXAw765urzdR19KNjEvLy42NDU/VGh9zczDvL3Dw8DIzNPnaHRpT01VVFVjZm7e0dPQzc3Mys3Uz87SzszKyuRc+1pHQDw6OT46OT5GS1V0dNnHx8nEwsTCxc7Y0eBjXlZPT1BLTl9ufuXa08zKzs3I\nytDM0c/Hw89dbfhLRj44OD48NjxCSFBxa+vGw8jEv8PBwc3WztdqWE5PT0tIS1ttd+/ezsnLz87JyszPzsnEv8R4UNhcPjw4Nzk9MjRETE1b6uHCvcbIvbzFxM7f2dtTSU9MSUpLT3Htft7Ny8zMzcvFzNLKx8XBvrzOUtxyOTc0MS81Li5CTElVysi+t76+\nt7jOzs7rXlNHP05HP01qZfLU1crCy8/Ew8zLyMjCvr+7tL9I5dE0Li8uKS0sKj9NQU67ur6ztre1t93ayVo+Q0s9QkJBX9p73L7AysLDx8PF1se+x8S4tbbHTsrcLywwLyYpKi07PT9ttr3AsK60u7nIy+ZFPkhEMztMTlTt0se+w8K7vsvGv8jKxL+8uLa6\nfPTBOywzMyckLSsvNzxOyr/Osq20u7O2zs9uTkVAOTpEPUNu2d7Lvb+9vb+/vcTFvb/Cu7S311G/XywxOSwiLC4rLzdIbczWuq23urGvx8vD5Ug/Rzw6PEBMVWzVxMbDu7q+vbu+vby/vbm4v1zoyDMtPTIkKDUrLDhESm7Mx7e6vbS0xNG+2U1PU0Q+SExT\nXPbOx8rHvsHGv8LJwr/Fv7u7v/HexjcvQjYmKzwtLUFRRmbFyMLCwr7D09zMZEpcXUFEaF5V3cvOyb+/xMK/wMfBvcDEvbu9xnvS1zI0Qy8mMjoqL01KPvXE1cq/wMnKyMzZbG9pT0xUVlh+09TNxMHCwb7Bw8W/w8fFvr+/zGrNZzI9Qy0qPDcrNk4+P9nL\n+s29xM7FwtLd5l5NTFFXUVnw2tvKw8XGv77ExMLCyMXBwsjBzWrWXTc9QjEsOjktNk1APfzOYuXCx9nHwNjh0+VdXGFbWW3369vPy8rJyMbJycjJy8rJyMnHzOrdd0A9QzsxNzs0NEBIQEzo7n7Wy8/Nx8vX19v7dXBjXm78+uPY08/KyszLyMrMy8jMzMvJ\nyNPp+1xJPz06OTk4ODxARUtVZ3jj19PQzMvN0Nrh6O9xaWt3+OXa2NHNzMzLy8zLyszP0NDR0dHb9GFSTEI/Pz48Oz0/QkhOUlhr/Ojb08/NzM7V2tvg6ez8evTm4t/a1tXT0tTSzs7Oz9DQz87N0eNrXVNHQEA/PDw9PkFHTVBWY3Pr2tTRzszP19vd5Ovt\nfHz059/b2tnV0tDRz87Nzc7Q0M7NzNTuY1pORUA/Pjs8Pj9BSU5TWGD+49bQz83N0NXa3uPp7vn+9Oje2tna1dLR0c7Ozs3Nz9LPzczU9F9XTUVAPz47PD4/QUhOUllh/OLWz87NzdDV2N7o6+7w9vTm3trY2dbRz87Ozs7Ozs/Rz83N2P5eVUxDQT89Ozw/\nQUNIT1RcaPrf1M7Nzc/R1tje7e3v9Pjw59/a19bY1M/Pzc7Pzs7P0NHOztfuX1VNRkJBPTw8Pj9BR01TW2h86dfQzs3P0tXX2ufs6/P08evg29jX2NbRz87Nzs7Ozs/R0M7R42tYT0lDQT88Oz0/QERKT1Zfbfbd087NzM7R1Nbd5+zv9PXz7OHc2tra1dLP\nzs7Pz87P0NPPztPkaFlRSURDPjw7PT9AREtRVl9s7tzTzs7NztHU1t3p6/L6/vbq4Nza2dnV0s/Ozs/Ozs/S0s/O0uJoWFJLREE/PTs9P0BES1FWXmvw3dTOzs7Oz9PW2+Dq7/l+/e3k3dvc2NXT0c/Ozs7Pz9PTz8/R3XNcVk5FQT8+PDw+P0JJT1RYZfXh\n1s/Ozc3O0dba3ubt9H3+6uHe3tzY1dLS0M/Ozs7R1NPR0NHZ9GJYUUhBQD88PD0/QUdNUlZh/+Xa08/NzM3Q19ja4+31fX3u5N/f3djX1NPTz87OztLS0dLQ0dXgdF1US0RCQD47PD5AREpPU1ts7t7X0c3MzM/U09fc6fZ7ef7v7Onk393c19HOzczKycjF\nxMK/wNN96lM9OTk1MDMzMjlDRUjz0dzNv7/Hv73J1tLoV1pWSElVVFfr2tfLw8fHvr/DwL/Fx8TGx8XBymve4zk3PzcrLzguLjtCPEzf5tzJwL+9vMTFyNfv61tMW1dSYe7m2cjIyMTAwcC/xcPEx8rLy8rD42bQQzVBPCwtOi8tOEA7RPLl4M/DwMLBwMHO\n1Nb2WFRgVU9k+e/cycnKw8DBwr/EwsPGxsfJx8HQWtBfM0BBLSs5MCs0PDo+Wnjm3Mq/w8e/vc7TyelTYm5PTWx7aN/MzM/EwcPGv8HFwsLJysTIx8TvbMw+N0s2KzM5LC86PDtKX37n2MPCysO8xtbI0mJkfFpOV3RrftfM0MvBxMjDv8bEwcjMx8bJxsxn\n1e42QUUvLjoxLDU8Oz5RYOnpzcLJyL6+z8zK62f4ZlFWZG1s5NTOz8bDyMe/w8fCxcvJxMrJxd//zEE5TDgtNDgtMDo8O0ha+erbxcbKwrzGzsrWam12U1Vca2d+3M/PzMTHx8O/x8XDx8nGx8vF0m3QVjdGQC8vOzAuOD46QVZu6OXLxcfIvsDQzszfYWpp\nWVBq+WXsz8vUyMTFyMDDyMXFyczKzMfNeeviPDxJOC42Oy8yPT89TWjt7tjKxcbJwsXP1c/lZGz9Zl735dzVy8vLzMrLzM7Sz9PX3Nvc2tfeampcR0dFPz0/Pj5AREhNWF5ja+7h2tbTzs3O0dXZ297k8vn18+zk4+Xd29va2NbT0dLU19bW1dTX2+Z1YlZL\nSUZEPz4/QUVITE9XXmr75NrUzs3O0tPV2dzm8/Py8e3p4eDc3N3c19TT09bV1NbV1dXU2edzX1RMSEdDPz5AQ0VITVNaYGv44NjTzs/R0NTX2+Ho7/L19/bp4t7d393Z1tXU1dPU1NbZ2NbS2OptYVlNSEZDPz9BQ0RJTVJbXmP33tnU0c7P0NPZ3eDl7fZ6\n+urn49/e3tvY1tbV1NTU1tra19bV2ul9Z1tOSEdFQD8/QUZJTFFZXWn14NvWz87Pz9Ta297k8nn58Ovo6eTf3drb3NfT1NTW2NjY19bX1933bV5QSklGQj8/QkVJS05WXWV67t7W0M/Pz9DU19vj7vH3+fL27uTi3+De2tjW1tjX1tfY3NzY1dbf/GpfVEtI\nRkNAQENFSExPWFxffOfc1dPQ0M/Q1tvc4ent+X706+ni5ePc29rb2dfW1tnd2tnb2NfY3vNvYVNLSEdEQEBCRkpNTlRdZnnr4drQz8/S09PX2uPs8/b79/f05+Pi397c2tfV19nY2NjZ3NvW1drubGZZTUhGREFAQkRHS09VXGFv7d/Z0s/Pz8/T19vg5+31\ne/z38ero6urf3Nvc2tjY2Nrc29rZ19fY3O51ZFZLSEhFQEBDRUpNT1RcZ37q4trTzs7R09TW2N/u8/T7+Pt+8ubi5uXe3NjW29vX19nY2trOwst42N9MVUg6P0Y8OkBFRVpmVOzK2tbEzc/H0HLi5k5OX0lLaVJcztPbxMLMxcPPysHP08TJy769vrW2ZkDZ\nPikvKicyLik1cF5VxL+9r7fPv7rrVl9LTWRMP2vWauzS0cbA1NfDy+fk5+PLzNTFurq6t7WyrrFkM0s3ICMgICwuKzLSv865t7ixundk1VY/RUdN3txgz77DxsjNysTaXe7qcXJq+8q+wb+3tLOytLSvsU8pNi4eIh4fLTo3Ob+4vbC+yL3BUT5PQkhnUmDD\nu8K9vcbAx/hdcl9ZYVNc3Njbzca/urq9ure4t7W0tFsqMSwgJiAhLkNIQMbDvLHE2evNW0hOPVXbz9LFu7+4wN3f7mxRWE1V4/Tv3dHMxMHAu7q7uLm4tbOxuEMpLSYiJiAjL09cb8PPu7fD6k9lSlxVRVjdvr+5u8G+xc9YT0lIZFxn99bOzMjTz87Mx8bE\nxL+9ura0r6/sLCwnISkjIytB+d671Mi9vsdYXj9R915yY8nGtrXEyNzVdmpNQFJf2tba3tvJzczW5dbLxMXEw763s6+utT0qKyAmKSMoL17bvLrjx8/B2V5OOmBo1dbdycmzuLvRVmhPbE9HTFXPzcjU3tfVydHX2tjKxr/Avrq0rquzOSgnHigrJisvZdKy\n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\nJzZvva+sqqmrqqutrrfHZT4yLCssMj5az7+7ubu+xMzR19znc2FXVFZbfNTGvLezsa+urq+1veU8LCEcGRgaHiUxUsCyq6enpqeqrK+2v9VSPDQuLC0vNkRdz7+7t7e5vcPO2ultZF9eb+jZzsa+urazsK6wtb9mOyshHRsaHB8oM1DJtayqqKepqquusrnC\n21Y/NS8tLC4xOUhxzb66t7e5vMHM2uR5bnFv7NrQyMO+urazs7S8zWI6LCUfHR0fIyo2Tsy4sKyqqqusr7G1u8HM7FVEOjQwLy8yNz9U38e8uLa3ub3Ez9zrdXj959TLxMC+u7q5u7/N9Ek4LigjISEjJiw1SNq+tK6sq6utr7S4vcTN2/dbTEM8OTc2Nzk+\nTW/Qwr26urzAydXf7PTv5tvRzcrJxsPBw8bN32tKPTQtKykoKSsuNkNuyruzr62ur7K3vMHL1d3pfGpbUExIQ0A+P0VLWf/c0czLy8zMzM7O0trb29vc3tvX08/Q0dTb6mJMQjs2MS8uLjA1PEhkzb64tLO0tbi8v8bL0Nrk8HBpYl1UTk1LSklKTlRfdu7m\n29PQzs/T09bZ3efp6+70+vvw7uvs+31yYllQS0ZDQD8+PkJHT2Lq0MjCwMDBwMLEyM3R193nfWxqYl5bWFZWVldYWF5mbn778ubg3+Lk4eTm7Pp6eXd1bmpwdnz+//727/d9bmhqZ19cWVpbXF5gbvvr4+De3NrY2NvZ29zd4+js7fT7cGlrZ2ViXl5iZGZk\na+/i5uTt8erk5/Hv7u/x9vv//ff3+3r49Pb1f338fnRqZ21cWFxaXmNpbm9z++/q5uXj393c3N/e3d/f6O3x8/l3a2xsamlkY2VqbWxrdn749fL07+vr6/L27vDx9X7+9/b7fn3+f3t0bGpqa2liYGtsYmdnanT+9PLw6eXi3+Tk4eLj6e3r7fH8cmtsbGpk\nX2RlZ2lqa257+vf89ezr6evt6+rr7vby8PP2/3V5fn16bnN5eHlzb29ydHNsanFxfHprb3T8+Hz27uzq7O/u6+rr8/jy9vP7enl8f/56bnp9fv53d3z9/Hp4+fr3+Hx6/vn3/Xf+/fz9e3Z4e3p4bW1zb3RvbHJ7fv1+9O3r6ezs6+rp6/X08PX2fnh0dnl2\nbWtzc3h2cXX/+/l9/fP08PZ/fvf193x4/Pz6/nR9+/v3fHR//n5/dXF2e3xzcHl8f354eP308fh+9fHv8PX49O3v+Hx9+Pv5fXZ6/v98dX38/ft8eHr/+/x3e/v7+H59ffz5+npxfH18eW9veHh5cnR+/vn9fP/28fD4+e/v7u/z9vfw8fl5/fr9/nZzeXt9\neXV6fXj7e3P//Pl9dv37+fj+fvz2+Pp4e/v+/HlzdH59dm51fXx+dXR4/fn7fH719PH1+Pbw7+/5/PTy8/d8e/7+/XR3/33+e3N2ev39d3b6+/39fnz9+vp+df78/Pt6eHz+fndyenx9enRweP/7fXT7+fXy9/f38O/w/33x9fb9en39/n10e/7+/Ht1efz4\n+nj/9/fx9/n18PLy/Hz5+/f/bW9wc3BrbHNwdHRucXz8+X598fDv7/Pz7u3t8fr39PT4fXh8fn51b318fHxzcnR9fXhze/77+fr/+e/v7vf5+Pfze3V3d3Vxa29vcnZubnV6fH19fu/v7+/x8u/s6/D77/H09Hx6/359cHR6dndxbW5wdXJqa3X/+vX17Ojk\n4uPr6+vu93ZubGppZF9nZmdpaGxv/vv5+O/n6OTn6enn5+75+vL4/nhudnt6enN+9/Py9PTy8e7w/vTr7e3y8PDq6fH7dG5oZl5aWltdXFxfZ2t3f/rx6ODf4d/a2dra297i4+z9cW1ua2pfWVhWVVlecuHY1NbX2Nvg5ubc1s7Kx8bHy9d8UkU+Ojk5Oz5G\nTVZaXl9dXmjnzsC5tra4vMTO3ftoX1pUTEdDPz4/QUhXf9vQzMnIxsXFw8PDxMfJxsPAwcTL8E49My0sLC0vMjY8QktZ7Mm9t7GvsLK1ur/Iztz9Wkk+OTY1OD1HXOPSzs3My8jEwsDAxczT2dbLv7q1sLC4w+1ANS4rKScnJiYpLTNB9ci7s6+urKqqrK62\nw9dhSkE9OTMxMTU8TGrizcjEv728vb2/ys3My8a/vr24sq+1w95BMy4qKCQjIiIoLjlO2r+7r6inpqirsrm+11xEOzEuLzA0O0BLaM3CvLm6vb29vsLGzM3JwL67tbCussXsTzoxKyYfHiAgJSwyP2a7sKynp6epqq27ymtIPjo2Li80O0RW6t7Hu7m6vb7F\nxMTP4N7NyL+6t7Cts83sXTwvKSQfHyQkJiw7WNG1sK2ppqetsLjJ608/MjI0MjU6RVHix8O+ure7vr/Iys3P1dPFvbezr7jX091ALikoJCMlJSgwRVP/u6+trKqssbO60VdNRzg1Njc6P05a38fBvr26vcHDx8rOzc3Kvri0tcLey+Y5LS4uJiUoKi43Rk/W\nuLS0sKyvuLrB2FdOQzs9Ozs/TldY2cfFxL6+xMTGy9DPz9LKwr25uM5/w3Y2MTkzJyovLzA5SlHNvr+6sa+8u7nD52BvSkFCPj5KUEVaz9Hay77FyMPGycrL0MvJzcm/wXJgz1I6OkA2LjQ3NzpASl3S086+ur7CvL/N19n6WVdOSEpSSUhifGd50c/Sy8vK\nx8XHxcHDwLy+0unQYz48PDYvMTM1ODtCWOvlzr68vr27vsPJ0N77XFJUUUxNV1xfbHbn3Nza19bb29vg6+bm4+Tp6uDf5e7t6vV+ZFxfWlFSUk5OUVNVV1pean/99+be3dzd3tzd3d/n5+bo6ezv7+rp7u/z6+vp6/Lu6+rt/nv7/m9mZGNgYWBcXmBgZWZo\naXF+f3999O/s6+/w6urq7e3q6ufr8vHt7u/4fvX3+fz/fnj+/Httb3RydmtpcG9zc3B0ePz3/3358fD2//Tx8PT4+fz29fl6fPr8+P16e/r4/Xh++v35fXl7f/79dnJ8c//+bX59//h5ffv18PL2+vHw7n1+6njr+3n6dvR9fXD+fnh8dHh3/v58cXV/ff94\ndHz8/H95+vb19Pt9+/X0+Hv69vb1+vv89vT4d376/fd9dnh+/31yeH99/Hxzef38/Ht5/fr6/n7/+vf3/Xn59e/wdnv/9vd4e/r6+vt4ef77+nx1fv79/3t6ff37fXR8/fv4fXn/+Pd/evj49/Z+fH/89vt3f/z8+f9/fvn3+Ht2+v36/nZ7/v7+eH35+ff+\nfnx6/vl4evr8+v78fv349v13/Pr7/Hl5/f39eXj7+/j7e3j8+Pl8eP39+fx+ff73+f15fPn5+X96fvn5f3f7+vr6fHh6+/r+d3v7/Pp/fP/39f55ePv7+f16fPz6/nJkdOBn9Pt17vry/f789vX7f//89vV9c/n7/f5zcf1//nl8/v71/Xt1+/n7/nP8+ff8\n/npk9etw7/v47u369vbyfVxrb1x+dnP/8e7j8Pji9O3u5Nzq3fXp8Xz283h7dmn9eHht+nN0/XFze3D/+HlldPtnXWtle+968+7x9+Du7+d/3/Hv73bfeev5cup59PRn5nn9+3TpZ+Z0fPtl5nV58nR3+elp6nzz8+74d/Hq/u33Z+R8b/p4bXL+d2J7bWv4\neWPub3n7bPZm5nT9927q7G/pbnxaaf9q7erk6OP42+7r6vJsb95U2lzz7GfbXNln+d5n6GfoYt1tX9lk4nPtfuV1/N9b5XXxef/3YN1tZXz9YXv4VOhoXf7tX2rkZvX4/W3p5V3eaXLsbPtv9/j37Hzo32rbZ+7kZuZs7Xt9Z+PyXd906Hjv+vzo6f3j+e3g\nZ+xQZ+lW9W/leXB+5m5peW9g+VVo/fNce+Ju7uv/7vHz92nzX3TvW/d8X+du7PFy1fbw2nTh6XnkaO18XtpZce5gbm5vVn3ycGnr7fDYYNvo7Pfo5u1y9+v7e13qbPtiZu78ZXXeWPT9Xe1ual/uXX7/Wt//eelv6tp24Pff5G/Z/vL3fOHmWXzTfmV12PB7\nbO7ZXF/r415jdmB9ZlFw9m1X7P5d82t6YOhg4/Zv4u3jeNvt6efl3+vuat35bGJjflhie2Zuavndbu/50eZn2t7fdN7p93LhbG/fTd7uWf1r3ll15F7jc2ro+HRl5Xlub13kYFX2+mBa6u1jdXH12XZs09j65tzW2u3l2fdjf3dobmlWd3NaaPpjbd94aNvd\nec7ha9v6bOfcXHrXcFbe6VnwY2Vf+lhY1FppdvfaWXd+5Gtl333c6ebc1udky/Va7vJgcmxg7eNbV8lcVNRx+Gh+aPnVRuXPUmHu323kbHbUanD6zWRq02beZfnqZdpY8dlgYurYaGDi+v3vVnvfXFnw+lJoaVV1XVJ97Fpe9/1v8vlr2t5k1tfy3OLb5+vc\n6+3pbuV+bd5x83lp/e93Zvfd/Wz15X/s8VziflX+c2Vh/ulo7/hd4/JZ/X3rbWrYfO70+uBybXb5+WZm/f7xbHXj/fZrbftzaW/o7Pvv3uDc8uvp//Vlffxrf3F5eGh5dXBnaXj8bmH79HN98fP67+/t6OTs5Nnm8ePm7fX7e2/4cVtt/2FiaGhjYnNxZ3Nt\nbOr6bXzs8W7+fXN8b3j1/f3/4t3t39jX2tjg5t3h93R/c2BcW1hVVVVSUVJPT1RRTlFYXF5jeevd2NbQzMrJx8XExMXEw8fJyMjKzM7OzcvO1VlBTEEwLS4uLS0vNDxNV3zIu7m6uLe7wcrbdFhPS01YWmjp0MnGw7++vr/ExsbKz9HS0M3Lx8hbQGBNMC0u\nLy0rLzA2SlJb1by2ubiztbq/y+BfVkg+QUlLTmHay8rIw8K+vsPHyMfJz9LOy8jGw72/YUz9RjIuLi8sLC8vN0lVX9q+tbi4tLa5vcjeW1VOPTo/Rk5Ze9nMw7/CwL6/wcfLzMzNz9HOyMPAvsdWTWdENC4uLy0uMC82Rlpw58e6ubi3uru9wM5uW1dLRUNH\nTlp+5tvNxsXGyMfIy8zS2dfU1tnW0c3Kxcf8S1JOPTYxMS8wNTU0PU1r69jEvry4uLu9vr/J331eU05MTE1Xe+be2dLNzc/R19TQ2eLn3t3j5uXf2NTPzdxaUlZIPjo4NjU4Ozs9R1n03MvDwL27u73AwsbP2u1hWVRXV1Vfb3fs4t/d39rZ3dze4uPp6u71\n7e7z6ube2dPhWlNVTEdAPTs6PkFARE5o4dTKxcTAvr/Dx8jL093sbmFeX1tYYWRpdXr79u7o5url5efn7/jv6u/39e/q497a1+RiXFpPSkZDQD1ARUdMU2vk1srIycfFxMfKzM/W3OX+a2RoY2BhZGtueHZz+/P38/jv5/Ts7O/x8Orv9+7o6uHc3fdeXVtQ\nTEpHQ0JIS05VYP3f0s3NzMvKyszOz9fb4Oj7b2xpZGdoYWVtenlzfe3w8u397unq7Pfz8O7x7e/y6uLd3e5hXV1WT0tKR0dMTk9WYvjo3dPR0c/OztDR0tne4ent/nVyb29vbWp1eP98fXT57/f5/u/v7vP19ffq7fP17enj3+R4YWBcVk9NTEpLT09VXW35\n69zX19TS09TR0tjf39/o8/36dHN5dm1rd3v9fnj+/O7v/v7v7uvyde/r8/X69+3q5+Tub2FgXVVPT05NT1NVW2Z1+uvd29rW2NjV19jb5N/i5+76/fn1/nxucvn6/Ht/9/PveX3w9PT4+X3++vL3efrv8+zs8HdiY2FYVFJSUFFVWFxkbX/v497c29vY19na\n3+Dh5eLr7/rz7vr/eHz99X59/Hzv9nh7+/r2931yePr0+3n1++/u8e18aWZlWldVVVNSWFleZG119ujg4N/d2trc3N/i4OLl6u/v7u3u+H307fD3e3z3+/t1evh9fHVuc3N9/XB/9vnx7uzu6nhmaWBeWllYVFhdXWBkb/nx5+jl4N7a3N7k4d/f5err6urt\n8nn79/f+e3Z5937+c//4+fH7/vvs7317fPr0+X76+PLyb15iZF5cWVZWW19eXmdw+u3s7OXe3dvh4N/g3uHl7ebm7e1/+fDx8n17/Pf1eXZ7fvZ+dnt6+/L9fvz98/H+dfr69u5yZ2hsZl1ZWFlbXlxdZG5+//7y6OPf4uDf4N/f4+bo6OPs8e737e79/vL3\n9Px//fzw/3Z1//Z9eHf9fH13dm91/X5+fPP0bmprZGFhXlpbYmBhZmpv+/Py6+ni39/f4uTf4eXm6efp6uz0/vXk3eDq8Ojr931zdHh1b2xtcXlwbHB6d3V8c3Pu9PPm+Gdsbm9pZHhtc2xpaHT+/v757Ovp4eXl6eXf4evn5+To7fnn6ejs9u3p7e78cWt9\nfnf+7vf8+XtpW15lZ2ZufPDf+Xry8fR2dnZzbWxpZWdra2trbnh79vPz7unq6uvr5ubl6+/u6+7x8vPv8/B+fnh9/Xh1cXZtdG5vcnR8d395e3n593Zzef5+eHV8bm5tZWJgYWRiXWZoaW9ven777uvv7+rm5Ojr6OTm5+jo5+no9fPx/vH5cnJ1dHx0c3h9\n+P98eP38fXxxcHl+eHFye3f7em5sbnJuZGRnZ2lmZWhxenV3d/nu6+zv7Onn5e3q4+fp5+zy7uvt8f768fH4+Ht69H9+d3V7eX1+bnb//3Rtd3d3eHNydnx8dm5xb29xbWtoa29wa210df3+//v17urw8+vt5+jt7+zo5/L27erq8fDw7/b493d1fHl1d3R2\ndvp5bnV5eXxxbnZ8/X1zen18d25ub3RvbWttcHF3bmx3/fr3+fDs6Ons6+3r6Ov39e3t8fPt+e3s9fT1+PTz/Xd1dnh7bG95fH56dXT8fnp8d3x+/X5zb21wcGpna21ubmtsb3d+en308u/s7u7n4uDh5Obi3+Xs7Ozv9H1uc3Zycmtra21wbmlsbW9zdHN6\n9e3s9fHr5+ju8vnz9v5ybG9ubWpnaG1ta2pzffn6//789vX2dnj8/fDu6uni4N/i7evt9v55dH72+Ht5/n96dW9pZ2ppaGlxeHz9+/769O/u//nu8/X6eHR3dG9rcHZ1eHJscXz8fnR8+/Pw9fXw7uzt9PPt7err6+3s5+r29/D3+3dtbW5tbGdkaGtvbm92\ne/bv9fft7ezs8vX29f5zb3NzdXNtbXF4fXh1//7+/P39+vHu7vbw6uro7PHu7O/3fv78/Pj9fvv07/X/+/36/Xp5c3l8fW9tdHJybmpqb3N6eHj19e/z/Pv28/h6d/98/X56ff749v159/Ly8vb48+7t9Pfv7u/2fHv+/vx4cXh4fHp3fv338/h8fvv9f3Ju\ncXR3c255/vv3+vv59fH1ffv2e/96eHZ4ent1b3l7fHl0dv/6+vz37uvo6+/t6+vr8/Xw+Pb7fHp8eXpza3N1eHVvb3N5eXRyfv79/Hhxffr5/nr59fXz+fr6+fj6dXp/+t/j7O307/p0cHb8/H53fv78fnt1f+ru6u3tfGh0bXT9+vn+e3v9/X91dX59/nlz\ndnv9/Hp4/v35+/3++vT2+X738/Pz/P/39PtlX29scfvu29vh5eXm4efp9Xvyfn1ybG9rcfh7dF9bZmZrZ214en54d3349/d9ffL18vL59nz94t7n3+Ll6evr7On0+vn2fHh0aGltbW1obHB0dWxsaXJ9aGBncvv18fPw6ujp6u7r6Ors8vj59/h7efj6+PT6\nfnt+fntxcHN2eG9sbnZ4d291e//8fXz99+/zfvn49/j+/Xz6+Pl9d/19+355e/36+vj89PTy9X17fn3+c2xxdHFubG92/fv/eP328/T+///7+Hp39vn4+X13e319enN6//75fnr79O3t+O/q7e/1/f76+31ye3t3dnJvcvzy93/59377/Xx+f3z/em55fX9+\neHz9+X9zdX57//93ffr39fz8+fbw9Pb9++7w+Hj89Pb3+vz37+/w+PTu7u59ZF/3c19y/nd+e/Xr8/7x6ntz/fV9bGlna25nYmtvbHZ4dH349Pf9/vv38vb27Ojn4+d4e97p9t/h6OTp6+Tq++ruamp2fHFuamtsaWFhYl1cXl5ZW19hZWVkbnz8e/zs6+jl\n6eXj393d397c2tvb3N7d3t/l6ujr6/T78+/s6u/yfvxxWlZRTEpIRENFRkhMT1Zm++Pc1M3LyMjJyMnMztTc3+f1dm9laG1saWx3d/Px8+7h4t3a3dnU1tXS083LyuJ913JHSkk8ODg5NzY3O0NESGff3c/Bv7+9vLu8wcTG0Ob2Z1VSUk5OUVhn/v3i0tHP\nysnLycnJyszHwsK/wdDYz2c/Qj4xLy8tLC0uMjc3QGZ/2sG6ubWxsbK0t7e8y9jpWkhBPz48PkRIS1zj2M/GwL++vb2+v7++v769v83jz145QTwuLS0sLCstMjc2SuJ+zLq2tLGurq+ztLXD0NNpQz49NzU3OTo9Rlps7MzAv7u5ubm4uLq7u7q7vs7ozUs2\nRDUrLCwqKiotNDU4XPh+v7e0sq6sra+xr7fHxtVPRD87ODM1OTc8Sk9Y28rFv7u5uLm3uLu6t7q8wN/U1zk8QSwsLSoqKSswNDND81zMuri0sK2srrCvsr/Bx2dORD46MzQ6NThDR0t51MzFvrm4ube2urq3uLy8w+DOfDdDOysvKyorKS0xMTVNXV/Fvbiy\nsK2tr6+vtr++0GJWQj06NDc5NTpERVD13c3Evrq7u7e4urm5uru8wd3R4jpEPi0vLCssKS0xMTVJWVXKv7m1tK2ur66vtr68ym5fRz88Njc4NTpBQUtq68/GwLy7ube4uri4ubm7wuDN6TlFOy0vKywsKC4xMDZJVFzIv7m2s6yurq2utb69zWxWS0E4Nzk2\nNTs+P0tn6djLv769ubi6uri5urq7vtTXyz49Sy8vLisuKSwyLzJAV07bwry3tq6usq6us7y8v99pWEY7OTo4NDk+PkRYb+rPw7++u7i6uri6urq6u8njx1g5TzYtMCsuKyo0MzI7U05sxL+5uLCtsq+usrq7vNN2X01AOTo5NDc9PT9PZfHWx7/AvLi5u7i4\nuri5u7/XzM47RkktMi4rLSkuMS4zSE9Ny8C8t7Str7Gtr7W6usPiel1FOjw7NTY7PDxHV2T5zcTDvrm6u7i3u7y6u7zF18VeOlQ0LDErLSsqMS8wO05IZcPBurevrbKurbG5ubvO8GxNPzs7ODQ4PTw+TFll3MrHxL26u7u5ury5uby/z9PHQD9SLjAwKy0p\nLTIuMj9MR9nEwrq2rq+yra6zurjC2fpeTTs7PDU1Ozo7Q1JebtXHxcC6u7y5uLq6uLq8v9XL2DpOQy0yLSwsKS4vLzZKSU3JxL23s66xr62vt7m6y9p8TUU7Ozk0Njs6PkpPY+HNxcS+uru7ubq7urm6vMLZx+I5Uz4tNC0sKykvLy82TElTxcS9uLGusa+u\nsLi5utPddEpEOzk5NTc8Oz5MVmzczcS/vbq7u7m5u7q5u7zG3MRVOVw2LTEsLCorLy8vOlJGdsDBubWvrrCurrK6ub7Y5VlLPTk8NjM5PDtET1t808fDwbu5vLq5vL26ury9yt3EVTlfNS00LCwqKzAyMDlRRXbAxLu1r66xrq+yuri95O13Rzs+OjU3Ojs7\nQ1JeddDIx7+6vLy5uru7u7q8vMbhyWA5UjktMSwsKysuMDE5VUpiwL+6ta+ur6+vsLq7vdn1XUk9Ozs2NTk8PENPXHvTx8TBvLu8u7q8vby6vL7C28vbOkpCLTEvLCsrLjAxNUxPUcW/vbevrrCvr6+4vLvQ+WlOPzo7ODU4PDw/Tl5x3MnEwby7vLy6u72+\nu7y9vtDeyUU8VTEtMS0rKy0vMjM+XUrivb25sq6vr6+vs727wexiWEU6Ozo0Njs9PkhabeTMxMS/u7u9vb2/v7++vr/A0NzKRTxVNC0xLisrLi8zND1jUe2+u7qzrrCvr7Czvb7D6FtXQjk8ODU4OjxES1jr2s3Av7+7u728vcDAwL++wMPU5ctHOEw1LC8u\nKyouLzQ2O2h65r62uLStrrCvsrS8xszZUURLOjQ6OjY7P0RPYuLNysW8vL68vMDAv8XIw8HBwc59zfU4Q0ItLTEtKi0vMjk4St7pz7izubCsrq+ws7i/0e9jQz4/OTU3Ojs+RE9s8tPEw8O9vL6/wMTGyMnJycfCv89vz+s6PkMwLS8vLC0vMzw7Rd3Qz7ux\ntbOur7C0ubq+0PTrTT1DPDc6OjpCSEpw293JwMXCvsLFxM7OzNXWz9DNxcTWdNHjPj9ENS8wMS8vMDVAP0Toy8u/tbW0sbKytLy/v81mXldEPj48Ozw/R09SbdbPzsnFxcTIy8vS29fV3+Ha087My9nrzd5HR0g8Njc1NDc1OENHSGvNy8W7ube2ubq5vcnL\n0W9WTUlEQT9CSEhNXnzu2tHNzNDLy83W09Ha3eHg3uTf2eDa1s7RfGjeXERIQzw6OTg6PDk+TlJY5s3Iwb/AvLzAw8LI09jhb2NWTlVUTVNfX2v4/eDX4NrV2t3Y2dzf7Obf63b38/z5/Hn18fbi9ltYYVBGRkZDRENDSk9PW/ju6dnSzszPz8vLz9HV2Nrg\n7/TteX72/Pl+8+rm8e/k4uTn5+nm7fz09Xf0fHpqaWdmaF9eZGRiZWRmcm5ual9kZvt5aGpgZGdiYXT++u/q4t/e3uHf3uDf3eHl4N7f6err6uLn6+/z8evn7+jt4+7vdm/vfWZsc29nYWZTVFpeX15ha3VxcHR5enX/cnhv+n33//367fp89vDu5+vk8uXj\n7N3z5OLp5fL99Pv1cm3xbvt1b31we3j9dH7+8vz7cHL2anBpbn1w+XN9c3f4cHZ0eW9wamVpbmxta2f8efl/8e/q6+7r7+7q5+v16/Hq8PF9+fl+dmtqcmxoZ2pybXd9+3v+7PXwd+/s7vB69fny+P30+vR/8nZ9fPN9fHV0/3J7c2xy//12cf128nX09Xvz\n7+xv6/Xv7/l39/1+eHB3d/9+dfpt9XP8b23+bP5sd3Bt8Pnx8+rp7O768fPp/fL//fP+9Xd2fXv9a3B1//9y8Hf28fTwf+746/x++HH27nh2eP3ydnl8+X56/H93fP7y+Xn68fPycPn58/17+3zyd/Vr83Xye/V4+Pzs8m30b+tsfnNt+GLta3lv/v92dmnu\n/Pd76fHn7ufo7e7q629v/nJ+bHdnbnlne2r2/fl59W9x9n35Zf/4de5r9Ph99PX7eef75+388Ovr5vbw7v7uZHZpZm9hb3Fsam93Ymhp+f1rfvvo8uvt4erg5+3o7fP5fXV2dP1qcWh6avFsfGpw8mxpbnN4cPl6e/X06ez05+nn33bo++ftfvd39W9v+Gb6\nb/3/ae9n6HH382zha+Bh5GjndPvyX99d2l7ne/PoZuhi2mHsYHptbHJhflz1W/xtY+xj4nN4ffvmd3B7+3z2/u/sfOTz6X/s7XV+917rZnb4ZeR83ejn23jb4efq8Nrp4OLx5+33eHJqa2tkZF5kYWFkXWFiZWVjYmNpbW1rcnj+9vX28Ovp6O3q5ePj5Ofo\n4+Pl6+vo6eru9/j38vV+evz6+vx9ff35+3t2fP5+fHFudHd1b252eXx5dnF2d3x+dP59/f9+e373+Pp5fPv5+n14ffj7+nv89vT0/H7+9/f3ev77/Pj9f3n/+vt5dv7++/13efv7+n17+Pf0+Xx8+/j5fHn8+/n7/3z8+Pn7eP7y4t3m7Ozu8vf8+vn7fHNw\ndXt6dnF6ev7+fHv98fb7dnN+cGNjZG3+/vt/8+7s7O/x8ezr7vjz7/Dv9fj79vP2fnn9/Pt+dXZ+/v94evz9+vX3b3t/fnZ2/378fn14fPv5e3R+//z9enZ9/fx9d//8+ft6eH78/H1zfv78+/58fvj5/Hd8+/v4f3h6/Pp+dn79+/t7d3n9+/54efz7/33+\n//X6+np4/fv3/Xd4/vz/d3r8+/n/fHt++Pp7ePz8+vr/fP72+n52fPz8+3d3/vz7fnn8+fj4fXr++/p+d/7++/z+e3v7+Px3e/37+n54fv34+Hd9/Pf5fnx5+/v+eHr9/Pr+fn35+Pp7e/v59vt5evz5+3h5fPn5fHp2/vr7e3j+/Pr8f3379vn9e/75+fl7\nd377/Ht3/vv5+3x6fPz4fnz6fvr+/Xx9+fn7d3v++/p9dnv9/f14f/n39/17ffv3+3h7/Pz6/Hx7//n7enj+/fn+eXj8+fl8fPv59f54eP/6+3t2fv37/H97/fj5enr39vL7fnp++vx6dv78+/15dnv8+392fP37+v59/vf3+3x9+vn3f3h8/ft+dX/6+fl+\nenr9+Px4fPv9+fl+fPz5+Xx3/vz5/nd6/vz7fHr6+Pb4fnj++ft6eH/9+/z/en36+P52fvz6+Xx4//r5/Xj7+Pf5end7fvn9eP5++vv/e335+ft5ffr49/16fPv6/nZ++/v6fHd5/Pv9eHj9/Pn9ffz0+vp9ef769/55ef38/nl7/Pv5/Xp5fvn5e3n9+vr7\n/nv++/n9dnr9+/l5dH/8+395/Pn19357fPf3/nd+/v36/Xt7/Pn7dnr++/l8c3769/R6e/v5+X93efz7/Xh5+/36/Hx7+vn5fXn7+PX7fXr++fp4efz79/56dn76+3x1//z6+357+/f5/Xp++fj5fXf+/Pt8dv38+Pp9eXz6+P97/H36+v18fPr6+nh5/Pv6\nfnZ8+/z7eX769/X9enr99/t4ev5+fvd+fP359Hp1/fz6/Xx4/fr6fXj7+ff7eXh/+vl8df79+/v/ev/5+f13/vDj/WxvbXpzcG5xcXZybmtsdHdya3B4ef37/PXz9Oz7/Pb793t3c375dWtxenBranN1/u/w/O/5b356bG1udXJsbW52c3L4aW38fm5w9XJv\ncm1iamdmZWNzbWZyfnZra/pvbXFy+nJubXh6bnd+fHZ6/W1qam7p9WdvdW9v7vzq5HJlZmxsYGJwY13/4O7t49rd3NbRzt3bz9Xo39Lf29793N/u8+d4Zf5bV15fVFtnS1BXUVJUV1ZhVV7vaWfu12pr1d3c1tHMy8/ExNHKx8/X3t/oYGTnal7e4V1u7Gpo\na/Ph7uno7vH+dWpdX1xcWXh2beLf3eni6+fp397l42/f8XPx9Gtea1tpfH582ejq2u7l6Njp3M/a2ubu7/Z8du/m+33sXlvyZmzreujbdPDgaFr/X1r95tbU193e1trS0tPRzs/P0tHd6OFtXGZfVlhOUE9IS0dGTEtPVVNPbFxh/mDu8X7g2PDb0uTe4+je\n19jMzMnExcfIyNPN0+nn7G12allkXltVUU1KRkJFP0FDRUdKR1FTT3xi/tTa3MjQ1sfL0NHa3N9odupkfdzr6u7pfWRnZ2VeaVxiWFdfVVNWUVNmWGj7ZfDr93l/c3D+d37x5tnW1s3IzcjI0s/K1NjS7uLxZmxaT1tXTFpPTVRUUFRTUltRV1pVY/5jZO7t\n+vfv9/Xx7eL56tnf1M/YzM7MzdPSztLVz9vd5OR2a2RcV1NNS0xJTVRQVmlp/vn44ePh29rb2dDY6ulmW1xLTU1HSEtKT1Ra6tzgz8zKycnIyMrGyc3Mz9DY2fJuYVpPTUtGRkdERkVHTk5SYmhy2dje09PX0tbZ0NvVy9LTztXb4HtvYV1cUU5PTk9VT1da\nXHRtZfD77+Hz793d3tLX1tPX1t7+63pcXVVSWVpiX2Jy/Xn16X748Ovv8+jo6Orq9Ovj4Ofl3OXp63xsZGFjWldeVFhcV1poa//j6OHa29vY6eHf7fL5enf7bWxkXmVjY2NscPzj4uLW1drS2N3c3eTs/HVubmRiX1ZbWVFRT05PTk1PUFJcW2F2d+vb29nP\nzszMzcvLy8nMz87Q1tbc6OTr8vVqamxjZGJeZGdwfm5eXmVOSUlBPz8+PT4/QklLTWnu4M3HxsC+vb2+vr7BwsTKy8rO1dbY2trb3d/e2dvg3d7d2l9JbEAzPjMsLi4sLi4zOjtO6ePHubi0sLGys7a5wMnN3H7+Ylpmbnvs3tTOy8jIycjKztHZ3eHl4+zf\n2U9H2jkvSi8rMS0tLi43Ozlc3u3CuLizr6+vs7W3wczOdVVZS0ZKS05ZZPPc0sjFxMHAwcLFyMvNzM7Pzs1dSc48Lk8wKjAsKywtNDc0TeVlyLi5tK+ur7Kys73IyuZTT0w/PkRGRk1fbujOyMfCvb6/v8DFxsbJzcvIylpRyjcwVy0qMSwsLC01NzZW41/G\nt7i0r66vsbGyvsfIaVJPPz0+PT9BRldk787Kx768vLy8vr/Bw8bKyMfIbEvLPS5WLygwLCssLDM3NEviW8u3uLWvra6wsLG7xcffTkxEOzs9PD1DTFlu2cvHv7u8vLu7vr/AxMjGxcXTS9nlLEJAJy4uKisrLzY0Ofpudbu2ubKtra+xsbTDy8daRE4/OD09\nO0BKV2P3zcXGvbq9vLm8wMC+wMLBw8VkVME5LlkuKC8sKSssMjczR9tjzbW3t66tr7K1trzL1eBLQ0c9OT4/QEpYcd7Pw76+u7i8u7q/w8DFycjKyexJ1EotQjkoLS8qKy4wNzk/69rbu7O4sa2wsrO3vcndf09DRD87P0VGTmfu08rEv769u73AwMfNztTe\n3dzc21RM7j41RDcsMjQtMDU2PUFM4NbQu7e6tbO4ubvCytd7aFdJS05MU2Rn7tbPysfHxMXJys7e4t97dfZ37N/X32Jt90hARjw2OTg1Nzk8Q0VP9N7Uw7/Cvr2/wsbN0Nvr9W9lbn5v9ODf1tLP0dLOztXZ09/b5N/g7u/s5Hzy+XBfXk5KSUM/Pjw6PT0+\nQkZMVmBw8eDV1NLOzs/MyszOy8vJzM7JysvLzM7V2Nje6nX96fFk+HlbXmBRUVJTXVpUWllRWl1WW1pYW09PWFJMVVBPWF5oaXrt29rXz87Mx8jLzM/Oys3P0c/X5v715W/893NtcGlpYE1SVlZZVlZiXl9peF9uY1tpW2JlZH/6Ytrf9/Lj7u3z3+ppbePn\n9+7i2+Ht+N9tcvPk9Pn32eFs7dfi7fDgbm5o+/Ra/vXu9GHl3vl17vlkZlv6XVdsa/ZjZ2fs/2l77v3ydO7deHvf331o++lsXGjuZGVv4Hdo5+HrbXvg43/06/X58PHjeuX86vDv5eng2Orl2N/W7fXte2xvamFtVlpdV1RZXWNlY2vqbvt0+vLx/e3eauHk\n7/Tt7P3u/Pxv7/fudO3f7OTm8PL2/Xv8dnVu93tvZXXwX3Zs6WXpcv7rfufdcubw+3vvbP/3Zudu+G3p7/Vrb+53am3rafv16vp9fvR9bWz9e3hxXnVibGx0dXbo6erl6PPy4Oht7eXtb+z3e3r0eXpp6v/2aO97cP187WZ3ed/1bHbtcnZk6u15e35uYPhs\n6XB2bnfv/fpt6e7rcu907vb78//kc+D08vFp6/Js+G3rd2tvX/tadl11XGhxc+ds3/X0/GXse+z6bObr6ebg2+3j7t7553zme3pqY3Vub2JrdG5r+HT2bnf9cmxp6Wx+bH76+3v9cXj3cuvr6eb63u/x8m/mbWtrfWx9cPH8+u53+2J9b//3dOrt3v3p7P16\nZ+1lamHubndfaXVia3pw7e356Ovx5ubde+7+4nx8d/B/8fh38vDv6Oh39WTqdvt7fex4fWFha2ljdHdr8295anFpaXVkcG746Xj28+vr6OHr5N3l5Ojv6W/v/m5hb2n5YGH8bP529Pbuc3t2bWzz9+Tu2+bd6+hsfXr3+11uYmFpYWvqfXnr7Xts8+/tdHTf\n5ON45Ob06WXudWPvaPtscGdv7VxrX/t6Xv715Hbs6n3r7Nrb9OVs3v3tennj9e1s8vj3eHP3+Pxx7fD6eG97cVpcXmNqYXFt53DwfOHh5t/k3PHg9ebu+eno4OP93frjf/Jn7OZ2fW/s/m9m/fhidHJla2Bl/nptePPv4edr7Oj6+vHz4Pd97O9u+XFvamhh\nbfphZWtvcvR37O7o3d3q9d7i8fhxde1+b3j9dHdsaPtvbHL+bHT99+Dw7f307vZtaXhtdm9k/e77d3p5e3J8+vdvc2xvfG1v/OXs6/Lu4uj9/vjycG5penx2c3d0bGdnY15aXl1rbW1t9Ozo8Hz16e58++zo7+vi5urm5ODf6Onm6u1+cene4eXb3Njb4+bl\n7nFqWllXT05RTUxNT1FRT1JYWFdZWl9uev3o3NbQz87MysrFw8XDwcK/wcPCwMTHyszL1lBDQzcvLSoqKyorMTk+TunHubW1sK+0usLN32BLRklMTl3z0cjCvbm4uLm6u73EysfHyMXBwXtLWT0uLCglJiMhKC4vOUvkvbOzrqmqrK2yuL/7RUM7MzQ2O0pT\nYsm8u7i2tbK1vLy8wMbJysO+vrq+WWFuNS0qJCMkHx8oKiw7SuK6srGqpqmqq6+yuuFORjs0MDA2PkJO3si+uri2srW5uLu/v8XGwMHCu7a2207jQC4qJCEjHx0iKioyP2K9srKspaWoqa2vs8lYTkA2Mi4wOjw+W9TJvru4s7S6uLi8wcTHwsHGwLq2s75Q\n+HcwKiYhISAcHicpKzpOzbSvr6aip6ipra+57k9POzAvLzI6OkDszsu9ureyuLy3ucDEx8jBxsy/urizt+1h1DorKSIgIR4cIykoM0Z6u6+vqaKlp6errrLHX1hCMTAvLjU5OVLY08K6urS0urm4v8PFzcvJ0cu/vry2s79i7VIwLCYgIR8dHiYoLDpMzLSv\nraaipaaorK632lpOOzIvLzE4OT9r1szAu7ezuLy5u8HHztLMztrPx8S/u7e6bWXrOi0qIyIjHx0kKSs0QXi7sK+qo6SmpqqtsMB8XEU2MS8vNjg6TOPQw726tLS6u7u/xs3Z2Nn579fQzMS+ubjfVt1ELywmIyUhHiMqKjE+Vsa0sa2lpKamqaytuNX7VT02\nMi81OTlBYN7MwL25trq8vL/Hz+b77Xhdet3Wz8rHvbjCXHLxPDEsJygnIiEoLC03QnO+trWsp6eoqaytr77b71E+OjU1PD0+T+vTxsG/u7zBwsfW2+RiaX5gV/d33tbZy8K/wMhVaHQ9MS8sLCsnJy0xMzxM7sG5t6+rq6ysr7C2xNvsWkY/PT9JSk1z2dLP\nz8vHy9LX1OnnbG1saWNh6e/s6d7d0tbXzcrcWl1TQjs3MTEwLi4zNztDUufGvru0r6+vsbS4vMja6G9ZUlFTYF9edO3q3ujZ2d7i6d7sa2txdPlkbHdhZmN2b97i4t3Y19PaW2FbSEA/Ozo6ODg/REZR89PHwsC8ubu+v8HGytjc3flpem/r7vZree9w4+zj\n8Op+/u97a2j9cHdpaGdoZ2NkY2NxbW18c+zo3+d1aHteU05KSUhIRUlNT1lq/uLW0c7Ozs7Oz9HS29nY2t3i3+TW5t3g2+3e+/h7fG5ubl9jY2VeXllmY2RdZWFoZW5gcmd5c/t8+vFqbmpfW1xdWVdWV11gX2fv6+Dc3dvY1drX2tzb3d3f4uLb4Nr13+Xq\n5nH1e/1mbl1qX3Ngdl5yX21mXGRmZnxpb/Zz6m7vc+zr/Oj27/z4/25iZmFlXVZdYGFnX3V++fXr6eTs297d5dzb2tvi3d/c4eTm3+vp9XR+aPZi/1/0cmNlX2NhaWRpZ2f9a/xva/px/Wr6b/fy6/Xt7vrteGppbGphZWJicWn8dPz+6+rr6OXe39vj3tvb\n3tzq5Pfk8fR493T7ZGVtYm1pdV95Y29qal9rd2Rvdf/09fT4/u785/b47eju6/J693t3amZmZWdgZF9nZ217Znzy9ef+5PHh6OLn4d/e2uXe5d7r3fDv6+h4+Gx9Zv9lYnxcc2PxWW5/ZPJc8mj0ZXnyYO174njzfPXtaH5jel9qX2RnXnVpb2Dx8ffu7uTd\n59zb3unc1P7g4OPv4ef36/fn/G5v5W1j6WB5a+pk+HRh3V58Z+9e+P1m8G3s+O5i9nBfXWFTVllVWlRfXP9vdOPn3djb29Tc2NrY8drd7t746+/ldOnsX9xy+e1t7nrwZe/5X+b+aev2btx07O3eftvaYe3udU1iT0pNSEdGSUVSU09h5+3Zzs7Lx8fKx8zP\n0dTt9f1qbGZjXX9raOxj7/X53Xfecdjy69t12+7f7N7e29Lb1NvTbOF+TFBMRTw/Ozs8PD5BR0tk/efPxsK/vLy8vb2+xc/O3HZgVVRMTU1OTk9ka3X239zX09nU1Nrc0+Xy1uDj2trd0Mzk/drqR1JdPj49Ojg2Nzk9PUNbX3LOw8K9ube1tri4usjQ0Ppb\nVE9HQUNERUdLVVtn5dbW1cvKz8rL0czO0tbQ2dLIzsnPftTVQUVXOjQ3NjAvNTQ4Oj9bY2TUv72+tLK2s7KyuL/BxNlWZFU5O0A6OD5FRE1de9zVy8TDx8K+xcnHyc7PzMvNycTRcNHtPUZKNS8zMy0tMjA0OTxPW3vOvbm7sq6vr6+wuLu8y+RjTkY9Ozk6\nOjtBRUpa7tnQyMTCv7/BwsbIx8rOy8bFwsPc5MpaPERBLywxLikrLy8xOD9RfdPEt7O0rqutr66utr7C03FOPj09NjQ7Ozc9T1dj1cnHwLy7vL2+v7/GzMfHycS/wdp/z2s3Nj0vKSsuKSgtLzI4Q1zaw763ra2urKqssa+0vszaYUQ/NzI2MzE1PT9CZd/a\nyL28vLq6vLy+xMfFyszFw8K+x+3a2UA2PDcqJywrJiouLzQ+UWzJvLmxrKytrKqvtLa6yetoTDw4NzMzNTc6QkxT+87IxL27vLu8vcHEx8rKy8zJw76/1/LNdjs5OzIqKS0pKCwuMjlGT+q+ubixq6uurKywtbi+0nxbRDw5NzQ0ODo9RE9m4s3Iw768vL2+\nwMPGys7Rz83Jx8PB0OnU+EE7OzYtKy0rKy0vMjlIUWrIvLq2r62vrq6wtLi/zdt6TD89PDk3Ojw+Rk9b9NXMx8C+v7+/wcbKztPU1Nnc1M3Kze9r41xBPDw4MTAxLzAzNjpAT1r9y7+9u7Wys7Kztri7wM3Y7lpLRkM+Pj9CRUpSXvPY083Ix8fJzNDV2eJ9\nbm5paWVka3f+8n1jYWdaT0tKSEVFRURIS05SW2/u3tDMysfEw8TExsjKzdDb5+v5bF5bWVhaWVZbYmdoa251+vp+ff78fH93bm5xdHFubXh9/Px5//Pv7vP07Ozv+3ZwcG1qYl9jYmZmZWhuef37++nc5Ojn6+Pi4Obp5ebn6u/4+vf5fG5zcnFxbGpscHFv\na212eHt2b3f+/n53/vf18/19fvr1/Xh+/v77/np5/vv7fHf7+fX3fXv57/H8/PLx7vR6e/v6+3d1fHz/fHZ0d///eHF7/vz8fHn++Pb7e/fz8ff9ffv29/12/fv8/X94ef9+enF2fX/7fnZ6/Pr9evz19PP6fvz19fd8fPr7/H98e3x9fHVvfX7+fXR4/fv5\nfP329/H3/3z69vh+efz7+H94fX/6/H5ye/3+/Xh1f/36fXj7+fX5fnr99vf+eP37+Pf/fHz6+P9zefx//nlzeffj5u/wa25zb3Bzfv37eHz49vL6ff759vp6d/38+/12d379+3d7+vn2+358+vX0/3r6+Pf6fnv8+fn+d337/Pt7dX38/Xp4/Pr69v58/vr4\n+vx8/vz1/Hz9+vbt9HhraP1xXlldaWxq9uLnY2/d3uTp3Nzf7/Dk5Pt0fPP6ZFZfeHlmYXLx+HJx+u76e3v3+31/9PR+d1lVevJ6b+3d3e7t4t/o/Hf29f9xbn7+/Hx2ef9/fnZ6/XZ5/v1ybnh+/mxu+vPydnP99fppT01eXVJIWNrU4tzLxMza1tHV5+ff\n2+1tcf78a2Zmb25nV1JiXlVVX2x2bnN0aGlmcl1KVfvwb2Fa39Lf5tjLz9bc19Pb7Orc6m996urs/GBQVGtrUldkcXJcZHnhfWn4fflod37u5+rc1+N87OHo7H7s8+t7Xlpp9/pqYers+nR19WtodPn9bGn+7Pf9/N7b6vne0uLo5+79dXpdX2lZVXnwX2l4\n6/5cZOna9Wt72ntUa/n1YW7m3eti+d3pXV746v1YYebna2L76P5yc/58fu965uTx6+7d3fHn1Nhu/eZqZFtdWVlZV3JnXFZdZl9kVmHz8G1j49/Z7n3W2ed+39n0bPje52ds+Oh4Wl/7e2Fp+uXv8+ze3ePd5O326+dpcnNxbmtpXWBsbmFhZWhqX2l+eOzi\n2tzp3Nfe8OPb5Pb57P9qaW9samNjefn0dO/p7uf4/evc4vLk2+1kef1iWV1qbmthduLn8nZy6+bsfuvb3N/n5utuZGVsaWBaYnlmXWdobe7v/Ojd3+Xf3Obn3eTl2tfc39jY3Nza3eno7OxwaGZfXVhUU1VbWlpdYWhpfXBjbHJlX1lSU1RUUE9TVVlfYGh9\n7eDa1c/LyMfGxcPCwcLEw8PDxMjHxcjLzc/O0dvn735rZ1tTQDQzMCwpKCorLTE0PVB93MzCv8bNycXP08zIw8C/v7u2uLm3tri6vL/EyM3V19fX1dTPzs3KydHW0NhbNCstKCAfHyMmKi4zR9vOxbiysrO1uLu/yuHu63tu7tjLxMC/vry8wMbHy9Td6O/p\n4eTi2tLQ0M3Nzc3Nz9HW2dlVNS82LSUmKiksMDI5U+njz764uru6ury+w83U0M/f6dXKycnIxsTFys/V2N3tdmpnYl5aWFdZWFpbW11gaXj28ezj3+ZdSUpUSj49REdEREZLWmls+N7Uz8zMzMnIzNDS2tzd5/Hs4+rv6uLf5Ojr4+Ht9/Xy83ZoaW1taWNl\nb/3y9e7e2tnY2uByX2NbSkVHR0ZCQURNV1dZa+vc1dXUzcnKztTV1Nbd7e7m5e/09+vh6e3r6OXn7PL59HxtbmxpZWhrdXh/8ejf29va1tLX+F5iXk5GREVHRUNDSlVZYf3o29DR0dXVz9TW2NnY3eXs7u/t7vHs6evs6ebm6urv8/Z4a2prbGtlZ27+8+/t\n5t7Z19nX0tTjaF5bT0lGRERFRUVJTldcZG7029PSz83MzM/S1Nbb3+ft8ff39vT0+PTs7Onq8fr6+Xxva2tpaGlsbHr47urr4N3a19fW09Tga15dUUpHRUNERkZITFNcZ3H23tXRzs3Nzs3P09bb3t/l9/728/Dx9vry7Ozs+H75/nluaGZnaGdlaHT97+vp\n5N7a2NfW0tDS4WpeXFJLRkNDREZGSExTXmty/N/V0M7Ozs7Oz9LW2N7j6fF9fPf38/3/9fDt8/j8/v93amdraGhlYmp3/fXw5d7b2dnX1NPS1N14X1tYTkhEQ0RGRkdLT2Hu7ujd1tDOzczMztDV2Njc4+/+/H78+359+fby+/30/vf2/m5scP1pXWZne/X3\n59va1djX1s/Qz9HT3HxbVlBMSEZDREVISk5TW2bu59vW0s/My8vP1NrZ29/h+mJpbHB2+fHu6+/u6urq8vz4fv7p8Hz5cnVub/ft5eLe3NnW1tba19be/VtWUUtHQj9BQ0ZJTU9baXvy39bPzsvLzM3T09Xc5t/h6/t8bGJvcXL+8O/v8fn6+/56a2loaGho\na3Ju/u/t6uDb2dfY1tPU1Nnkc1xZUElEQkFCREVITVNdav/p29TR0M3LzM7S2Nrd4+x+enh+/H1++O/t7vrz7/H0e29sbGllX19laW90evbm393d2tXT0dPW1959XlZQS0ZDQUFDRUhMUFho++bc2dPOy8rMzs/S1dvk7e/8eXFvfPn28/Hz7+zr7vp+fXRu\nZV9hYmRlZG/87+nm4t3Z1NHR09LU2/lfWlVMR0JAQkRFRklPWWj97d/V0c3Ly8vMzc/V29/m7f5ta3F7/nx87+3u7/T39fb8cGlqZ2hmYGFocf719OXe3NfV09DPz9Pd9mddWUxFQUBCQ0NFSU9YY3Tt3dbRz8vIysvNz9HW3ubuf3dvdXhyefXs7fr77uzs\n93hxcm1pYmJlZGludv3v493b29XQzs3P1N5wXltVTURAQEFCQkNITlhq+eXb1s/MyMjKy8vMz9fi6ujueWxnbX7+/ft99+3r7v5+/v52aGFhY2NiYGVz/e3m493Y09DPzcvLz+lbVVhPRT4+QUNBQEVNVV9v7t/Vz8zIycrJyMrP19zf5PFqYmhudG5sffDs\n7O7v7uvt8XRsa2lmXltfZm1yde3g29jX1dHPzsvK1H9fX09BPT4/Pjw8Q01PUF3o1tLPy8XDxcTDxszP1NrrbWRfXlpaX2Zz8ujo4+Pf3ut+e35uYFxeYF9fY2397eLc2tTQzcvKx8bN6nxxUD46PDw3NDg/RkJIatfV1su/vb/Avr3CycrM2nlrbl1OTVlb\nVltx7enk2NXb3t7d8mVgZGBZWF5nan/l3dzXz8zLy8fCxNJ28PpFOTs8NS8zOjs5PVTp+ebGvb29u7m5vcDAxtHffmpcTkhNV09NXvvz7uHV0dfZ09z4e3BjXFhYYmps/ODb1s3MzMbCw8LO7eluRTk6OTEuMTU0Nj1NXW7Ww727uri2t7q9v8TP4vltVUhK\nUU1HTmJub+3X0dXSztTf6+59ZFhaYmBibO3d3tTKysnBvb7H2tfeSTs7OS8tLzAvMThETFjfxr27ubWztbi4u8HL0dxhT09LRUdLSk9bbPrl2tbRz9PZ2d3r+W9iY2x4dPPc08/Lx8O+u7vM2s9ePjw8NS0uLy0tMjtBSWHSw767tLK0tbS2vcTHzedfVEtH\nSD4+TkRH//tj583R2M3M19bS3+n4/Onk6uTTz87GwsG+vMfWy38/Pz0yLC0vLC0xNjtBVd3Mxby1tLa0srW7vL/J2v5pV0lDR0lCQ09WUGTj6u3Wztbc1NLc4uPo8u7f2trUzMbDv7zAz8nNT0JFOy8uLy0sLjM3OUFc5dfKu7i4tbKzt7i4vcfP2HxbUEdH\nRkFGSUhNW2tt8NnX1dHR1dfV193l3tva1c/MyMO+vs3OxnhGS0I0MDMwLS4yNjc6SV5u2cG9vbmzs7a3tbm/w8bZb2hZRkNEQUBDRklOWm/16tvSz87Oz9DQ0NPW1dDOzcjGwcDL0sn8Rk1HNjI1Mi4vMjU2OkdYWefFv766tLS2tbS4vr/B0O56WElGQz8+\nP0RGSU9ebPDZ1dLNysrMzM3Oz87Oz8vGxMHC1M/IWEVSPjQ1NDAtLzU1NjtMVlnTxMK/uLO3t7S1ur6+xNTteVtIQEREOj5GQkVWZl3y08/Py8fJy8jIzs/KyszIxMLBytbK5ERTTDU0NTIuLjIzNDhEU03vx8TAu7S2t7O0uL68v9Ti8FtJRkU+PD5DREVQ\nXmbr1NHQycbIycnJzMzLzMzIwsC/y9fG4EJSSDQ0NDEtLTIyNDdDUE3fxcO/uLG1tbKzt7y8wtfo8VtBQkU7O0BAPkhXXGnh0c/MxcTJx8TJzczMzsvGxcK/zdTAYj9pQTM0MzAsLjIxMzdMTE7TxsK+tLK3s7Gyub27xdzx9Uw+R0A5O0BAP01aXm3Vy87K\nwb/IxsTNzcrKzsrEwb7G28XTP1RSMjI0MSwsMTAyNUNPR+HDwb+3sLW0sLK3vLrA3P51Uj1BRDc6QEE+Sl5f/tPJzci/wcbGxMrNycvPysPAvcnjwdM9WU4wMjQxKywxLzI0RU9I2MG/v7WutbOwsbe9ucTnb2xOPD4/ODhAQj5Lamzvz8jJxL6/xcTBx8rI\nyMnFv77F3cvHQkJaNC8yLywpLzAvMz1XS/e/vr23rrC0r6+1vLu/52djTTs7Pzc3PkA+SWVu6M/HxsO9vsLBv8TIxsXFwr2+zOHE3DlOSC4vMC4pKjAvMTVIV0zLvb27sK2zsa+xuL67zWNeVkE3PTs1OkE/QVh8/NfHxMS+vL/Dv8DHx8TFxb68w+fLwz5A\nXzEuMC8rKC8vLzI+XUnhvby8taywsq6vtb68xXtdT0c6OTw3OD1DQk375tjJwsK/vb7CwsHGycjGxcG8v+3Ovj1A9jAuMC8rKC8uMDE9XkXmvry8tqyxsq6vtL67w2xfV0A7PDg3OTxBRE1s5NrJwsO/vb3AwcHFxsXFw767xe7CyTtWXS4vMi8pKS8tMDJG\nVUbOvby7sKyzr66wuL68z1tPRzs4Ozg3Oz9ES13u2c3CvsC9u76/v8LFxMLBwLu/38fBPEFuMC0vLyooLy4vMT5fSN29u7uzq7Kxra+2v73KbVZMQTc6Ozc4PkVGWejb08a+wb+9vsLBwMjJw8C/vL/ryL46Q/8uLjEvKSgwLS8yP19G1Ly7u7KrsrGusLe/\nvc5hT0tANjk5Nzk/Rkdb39HOxL2/vru9wb++wcK/vLu+282/PDz5LysvLiknLy0vMz90Sta5uLmyqrCyrbC4xL7LU0hIPzE5PTM3RUtGbtXTy7+8v767vMHAv8TDvry7v+LJvTk89y4rLy4nJi8tLzE/+EzPuba5samvsq6vuMbF11VAQEIxND07N0VbTm7M\nxsrBu72/vr3FyMLDyMO8ur7iyrs5O+UuKS4vJyUvLS8yP+RS0biwtrKorrGvr7jNy9xRPDs/MjI8PThFe2P3ysDDvrq8v8C+wsvIw8XDu7jE977DMUJXKyktLSQnLi0zMUrV9ce0rbWup62xsrG81eBcSzk2PTUvO0c9SOTZ2MS8vr69u77IxsTNz8bDxLy3\nwn68yTBGTCooLCwkKCwtNzVNzs/Fs6qxr6issLW1v9tvTEM5NTM4NzVETU50ysrGvby7vb/Aw8vNy9DPxb+9uLzsxbs3N1cuJyotJSUsLDc5P9TAwLuqq7Gqq6+3ub7SekJBQjQxOjs1QFlWa9LGwb/BvLzEx8XO4dnU2tfLw724udPPuEszTTcpKCwpJSsr\nND88X8C5vq+prq2srbO6wdPTTz1AOjU3Nzo/RU/s2NjFvb/Bvr7FyMzS197e0tDPx767v+LYxUY3QDYsKiwrKy4tOUpIV8i5vbavr6+xs7a5wdjR5E5DRUM9PT5BS0xV79zbzsfFyMnKysza4dzk9+rg6NzTzsjI2mzV50I/Qjw1NDQzOTg4Q1NYZM7DxL27\nure4vb68ws3Q1+1qW05MSkZFSUtKUV9z6+Pd1M7S19TX3d7l7/Tt+O3k7eTWz8zM4OnR80tJSUE8Ozk5Pjw9RlRXY9TLx8G/vbq6v8C+xMzU3e9uWklMTUJCSUpIT1lm6ejn08zS1NDS2dvf7ejzdubh6t/TzcjAv8nnzM5EP0I7NC8wLzY4NEFcdvbFubu1\ntbSytbzDvsttXlVNRUQ+PkpEQlJfWm3b2NTP1M7J0t3U1+vs63vx6uvb0tHMwr27t7bK/MVcLjIyKiYnKSo0NDfnxMO7rKuuq66wtL7fbfNDOD0+Oz1IS1jd4NbExc/JxNXn53FnZFJTbmhe7tze1MzKx8LCvri2t7jHZm5MLSgrJyIjJysyP0rUtLGwq6er\nr6+2wNRQQUE/NzhFUFhr0cHCyMfCy3lpbVdJRUpSVlFd5Nva0sjFycnIxsbIw7q3trjC6FlRMiYqJyIiJiwvQFfbta6urKipsLW8zW5IPTo/PDpJe9rWxLu9vcDN1OpOQ0dDPD9LUl372cvExsvHyNLd3ePn3NHIvri1srbFZ1NDKiUmIiAhKC03WO27raqq\nqqartL3PcUg9NTY9PUJaz8e/uLi6vsjX7VZAPD8+PUJOXu7Uy8bCxcrJzuJ6+PPv3NDFu7WxsbfBZkk+KSIkISAhKC476c24q6ipq6muusXxUT87ODlHTFfawLu9vLu/zvRUSEA8Oz9ESVbpzsnGxMHDy9jl72pgZf7dzcO8t7GvtLzdQTsvIiEjIiMoMz/t\nv7quqauvs7TH9k9CPz5AQlzPysC5tLi8vcncXUU+PT06PEhTZt/QysXGy87U7mVeWFFXYvPTycK8t7OysrfEaj40LiQjJigrLj1bzru8ta+0u8jL6FVMRElPXHnQvr27urq8xdV6W09DPj9DRktWbt3Sz83Nz9rp/GJVUlRbYWzhzsa/vbq4tra5weFKNzMt\nJicqLTE3SnvIvb+5uLzF0dhpWlJNW2/p2ci9vb/AwMPN7WBiUUZGRkpPVV353NrZ0tXg629lYVlSVmJ28eHRyMK/vry6urzC2l4/NDMsKSwtMjc/Vu/GwMG8vb/J0N5vbl1Zaeze08fDxcTHycnY/W1eVk5KS1FZXGT04t3b3N7h6W9qZ15bX3Lv5dnNyMLB\nv76+vsfnVUA4Ni4sLi81OkFQ/8zGw769wMbL0+Lpc2Zv8Off0c3MzMrKztLY73JsWlVVU1deaG996ubk4e34+XxvaWJibHv78eXf2dXW09XU0dr+YE9FRD87PD0/RElOW/Pb1tDMy8rJy87OztLW2t3e3t/m7+3u8fF+dHZ6eG5qcXJwa2lmZWpqZ19laGpu\nbnB1/Pjv9fHn4+Dg4t/c29vh5+9zZVpSTk1OTUxOU1lgaW/86uDc2dnW1NTW293d4ef0/fn8+/59ffnz7vT57/Dy+Xpzb21raGFkZ2hta25+8+/t6+Te3dzd3dva2t/zemhcV09MS0xNTk5TWmR4/u/m3dnW19bV1dfb3+Pm6u96dX17/Pv9+/Xv7vL59Pf6\nem1rbGppZGNpa29vcHj77efn6+He3Nvd3dza3eZ5aV5YUk1KS0xNTlFYYW/57+nf2dbU1tXW19nd4Oru8fp4dXx8+Pf79/Du8fj39Pt6b2lnaGhlXmNrbXV3e/vr6eTk4tvd2trc3Nzc4f5oX1lUTktKS01PUVVcavzq5d/c2NTT1tbY2tzg6e30+n55+v37\ncl9edPh4bnfp5/J4cnFsa2r+8vzo5eDf3trX0c/U0czN0dDS0tp0T0ZBPjs6OTk9Qk1ZcOXRysTDxMfJzc/Y4+79cWdlbmz45t/d1tXV2N3x+3ptaGtpZ2lsbm9z/ff4/fLt7ejn5d3Z1dbi2dDNycjL32BJPjo3Nzc4OT1EUv7YzsfDwsDDx8zT3e1vaWxq\nbG5vfuXb1tTW1tnd5vpxamRfXV1kam5vbW11e/16efLt5N/c2dHOy8rJx8bK2WJIPTg0NDM1ODs/SVrmzsfDw8PDxcnO2OT2cWxqbfzx6eLc19DP0dfc4u79aV9eXV5fXmJsdXt5dXJ8+fHv7eDb1tHQzcrIxsbK1G5KPTczMzQ2ODo/SlzizsbAv8DDyMvO\n1uD6aWZobnj75dvY1NHT0tTa4P5wZ2FfXVxdZGtxcnr3+Ph9dHr36uHd18/MycfFw8LH2FlCOjQyMjM2OT1FT2/Ux7++v8LGy9Db6PVtZF9hbPjf2NfU0dDP09vi7XdmXlpaX2RqbnP+8u/3ev58enl3/und1s/Mx8K/vb7I6U08NC8vMDQ3Oj9KZtjGvry8\nv8XN2eL0b19WVl1y4dXOzczN0Nfc4e5yX1dTVVlhanXt5N7d3t/j6vttZm1+697Xz8nBvbq4vt1OOi8uLi8zNTk9S/HOv7q6vcLL2ODncllRTU1e5c/IxMLHy8/b5O9mU0pJSU1ZY3Dv49zX1NDS1t/3b2167uDb2M7Iwr25ucpdQjEuLy8zNDc7QHbNwru7\nv8nN0d3wdVVJS1Fz2MnFx8TBxMnR5V5OSkdHTFBTWWP23dHNz9TX2tzc4enl4tzVz8vIx8nTb1NHPjo5ODk7P0ZPcdzTz87O0dXZ7WdjYGFr/+fc08zKycfL0+B5XFNUU09QWWJz7OLe3Nna297e3+Li4uDZ0c/OzcvLzeJURT07Ozs7PUBKXPTZ0tDS1Nfd\n5n1lW1pieuzi3dfQzs7T3u99ZlhUV1tifOrl3dXS09LPyszNy8zIwr69xN5RPjk2MTAvMjlDV+rUzMbGw8fP5mZaWFlYXF97287JyMjGx8rN2vBsZF9aVVddZn7x6ufi3+HucWleWVZSUlRRT1Rfam/27efi4+js8O3l5+fk3tvY1NPS08/R1Nfd4ubq92VS\nTU5MSEZGSU1UWVtlfunl6uvr6+73bm95fvby7ubd2djY1dPU09PW1NLS1djY2Nrc3+TwcFZNTUpFQ0VGR0pPU1hfcvbt4+Hg3tvb29zc2tva293e3d3e4ejo6evv/Xh7enZuaW1ubm1oZmhrbGhmbG1zdnNzd/37+Xz98/Lv+P/57/T4e372+vh+dXr8+/11\nev79+n55ef79+3dw+fj5+np5/fn5eHn5+/j9eXf++vf87d7j4+n08+vt8fludX16dW5tdHd7d3F6/Pl8eHt3cn1yXmBscX17/vju7ezz8ezt6/D28+7u8vz38vLx+3d7/Pv/c3d+/vt+eXh//P16df39+/50d/79/HZ1/f/8fXV1ff59end9/Pn9e3t++vp+\nePj9+vx4d3v9+Xlx/v37fnh0ef37fnN7/f35fnl+/Pr7d3r6+vl9dnz8+/92fvr6+H54en/8/HR4/vz7fnl5/fz5fXX9/Pv9dnv8+fl7e/r28392dn7+/Hhz/f74/Xx6ffv6/nV++/n5enV59/d+eP75+ft7d336+n51fvz7+n57f/b5/Ht7+Pn3fnd5/vv/\ndXz+/vt7dnf++vx4ePz7+/j6ef76+nt1/n5kZ99ya+L3evby9O9uXPzucu79fvH69PD+ff339395d/76+3ZxdP/t/3X18fP3fnV9+/t5cv57+39ven39evd1eP/9+Xf/d/b7fHv6fPjudH96fPp4bG51bmxufXn65uTv6uPu4+B99vT16HN27Xb56mZt63ho\nfG9oc3J0aWb2b236fW386X118/P+futq9edy+Pr6/Gvo7GnrbOvpauJreuj6d3Fx7uZpaup0d+Jhf+Zu++5ybXr+6GNg4f1se2vxdnXtZPffaHzl9HJw6O1k++ty7Pnt/W7p+Pb4eGv733BkdO1wY/5/Wu/6XW949/ZxaOX4bePtcG3h6nr59nv76/Fq+Oh5\n7vpp//n8bnP2bXLn83R66ul0cXx86vFoZ2rg7V38fm7yfmhh++/wcmjr5v7//Hf8+fD8/u3z/PPl7np78/xvbW5xa25rdWRm6v1ka/j0dm13+u3u9vLk5ebpefnp6/dzb/95fX5gYGx+d2hmaXL68Gxu7eP7dn/+7Xl5amj3eGlx+Hx79fxxZmFrenJ3b3bk\n3+137u3e3+7q7uPzbmVlfPD3/PJ+b+7f5vj++fh5dHVoYGFgZW/+cGNpeHzt53hy9+/z7+zw+vn+duvf6/Z3/uDS1eN7++/s8W5vbvP7dW9r9O7+6PL7aWB0aW12cv37b2prcHRyefPu7Or7/+fl5efv7ezl5+zy/vx6d/zy8Xd59/Tr4ur9eu7m6en2b2xt\ndfppZWRhYmRsampscvv39e/u9P13e3V3cHbv7Oz4/nd3+vz++u/r7///9uri5/xueP7w7Ph6eX57dn7v9HZva2577+9+e39+//v9+PH8dW5venb9eG1sbX7z9f/2/Xz7+v757/P3/3vy7fZ/dnF4cXFsbHZ69/Z9ef737/zx7fLv8/r7+fn6cXB6/vp6dXF6\n/fPw+vPw7+/09ezm6ers7OrsfG9udnlzbmtzcm5ubGZnaGhlX2Roam1oZGdscXZz+OPb3+Pr7Obi5O3p6ufh4N7c2trZ2tjU1NXb4ufl5u38+2lbX11haHN7aFdLRD89Pj9CSU9YX2nu3tXQ0NTY29/m5NvY19bY19PPzs7Pz9DT1dfX1tXU1djW0tHPzs7L\nycrfSzswLCstMDlASUxRYu7Sx8TGzdr3ZGFt7dzU09PV19bW1tTV2d3rfHX+9/j69evl39zZ2NTS09XU0M7MysfFwsDPTTkuKisuMz5HTU9UZunOw8LK2mtWT1Vm69bPzs3LycXJzdjo63t3dG1kZ3BgXG7r39jX2dvd3d3e2NDMyMXEv7y7wl06LykqLTE9\nRkpLTWjcyr2+yd5cT01UbOjY0tTPy8fFyM7e/XNscvz+fW1pZWnr2tXS1dzf4+bl4dXW083Mx8G8ubfFSTIqJikuNkRIRkVO28i9usTfWkxNVXHj6+Pg2ca8ur3L+1ZPXvrp53JaVFhz28/M0dvf39rX2+Lj3tbNx8G+u7q4vWg3LSgoLS43PTw+S9vBvrzE\n5l9WWmBrbV1i5c6+t7i+zN7+du39YllRT1Zj9+Xd3N3Y1NPX4Hpr+uHVzMnIw767uLW1xj8tKCYrMDI2ODtI3727wMjjX2ducFxPS0/kxLu4usLM0dLa62RPTFFaafTxf/ff1M7N1eX99+PZ09TUzcfBvbu5t7nHSC4pKCkuLy82O0rewrzEzNPo6uhjTkdK\nXs29u7u9v8LAyu9XTUpQWVhbWV123tLQ0dPc39vg6/X14tDIw8G/vLm1s7j5NCooKCwuLC41Q/nEvcfRzs3O219FP0pm18jGxL65uL3H2W5jZVRPUE9Xa+rj3tnW1dXa7XhpZG/u5drPysO9u7i1srPIPiwpKiosKSoyQXnLw8nLwb7H4VNGRk9daejSxbu3\nuL7Izdfqa09JTFBXXGJs6tXMzdHX3d7i6/r05dLLx8K+u7aysr9NMy0tKiknKC48TmjczMS7ucLadF5aVU9OW97JwL28vL2/yNP6W1VPTEtMT1t759zTz8/Q09vk6/Dn3NXPysS/u7e1tb5eOTEvKyknKC43QEx5z8K7u8DM0d3/XU5NWfnbzsfBv76+xMvT\n4fdoV09PUlhdbPrj29jV1dnc3OLj3tvY0MvGwL25uL3ZSDo3MCwqKS0yODxJZtLDvsDDwcPJ1fRobXv7++fXzcvMy8vLzdLb6PlvZWFeXml3+Ozn29bV1NbX19bY2t7c19TR2PlUR0I+Ojc3OTs+P0ZPXfzk29TPzMrKy8vLzc/U1NXW2N3f3+Dj6Ovt8ff8\neXV4eXtuaW1ucHBubnf78/Lv6OPe2tjW1dnncGJZTkpJRkRFR0lMT1ZeZ27549vVz87S0NDS1NbY3N3h5+z39vbn4e/r6uzt8Pv0+HJubmdseWxrbX3t4+Pc1tPPztDg6f5pVkxJSUdGRkdKT1NaXGNx5dzZ187NzM7Q0tHS1NnjfvHv9/t49/P4+n707O3u\n/HN7/P7+d37z7unq7ujx/uTk29XX3/FzXlRPTElISElLTU9TWl9ocfPg29TQ0NDQ0NHT2Nrb3uHs+fr/eW9qbnP4cm1vbnl3cmpudH19e/v/7enn6OPe3NnZ297p+W1ZUE5MSkdGSEpNT1FXXml88end1tDPz9DPz8/T2Nzd4en6cXx5cm5pa3B5f3x5+Pb3\n/Xt0dnd2cG50//fx8/Pq5ePi49/l7f1qXFdVUU5MTE5PUlNWXGRtffjr3djT0tLPzs7P1NXW2t3n8ft+fHJoaWlbZW1idnL9fG9qcnBubGhteHn9ffnr6ubo7Onm4OHt+/V4bGFaVlVST1BPVFldZGx68ebf3t3Y19bW19ra2dre4+bo6+5/d3Z1dm5oZ2pr\na2lmaG1xamtucHZ8bm9wfP72enfu+Orx7vTr6uns7+zv8/p1a2xnZV5dX19iYmBla3n6ffbt5eLk4uXf4eDm6+np7e37f/7//XpydP18fnRucfz5enV4+X9+fHN2fHp6ef51e/t3dHZ89X59/vXw8/j8fvv3/nJsdm1vamhnbW5xb23//fX38fjp6+nq7+fr\n5ezy8vDr7v34/fL0ffpyf319/XB4eP50eWx+efdvdPt69vlu93Dve/l2du157/13fv59+m12cHx3ZXRtb3ZxcG97/P189m/q8+70/eXr7uX76+l/3nvt9e7v8fhs9PNwfHhp7HH8a/Z3ad5i62jjcv3Z/tn25HXvWmRrZmZkbGZzYm1ib25sbWlsd/p3dvXv\n7ub45e/q4ejs7ubz3/b96vvmfO72eeF++fv8df3oYvN8cu5q7mp+51/ga2rgdXr+7nLu7278fPlnfmhWal5aWlxcXGVmZG/8eubi7t/d293d39/d39715uvv9339avN+cXlvfWz0dm/9eu57fPn/8Xbmbf7m/ufy5u3e3+nh5+/76V1aXlBSTUxKS09NUFVc\nZX7k5trSz83Pzs3Mz9LV4d3n73Bna11tXWJiYXFlfGhv73Xr+vfs7ePu8ejx4ebv6ebb49ra29LY5P3oYk1ST0JCQj8/QENFTlRa+9vVzcXDxMLAwcPHzM/T5W1rXE9PUU1LT1VYXmFu7eTg29bX1tHX2t3e3+Pl7+rd4N3Z1dHPzuPu3VpJTEY7OTs6Nzk8\nPkZLUnPZz8i+vL27uLm8vr/EytPmcV9OR0xDPUZHRUZRXV74493U0M7MzNHSztHc3t7i6ePj6dzZ18/OzNFy49RFQU5AODM7ODM7Oj9HTGTnxcXDuLe5u7i3vr/CytTi/mBPSURCRz8+R05MT2f7fd7T0c/MzMzN1t3U1+Dj3t/i29zc1NDPycbN9ffOTz5H\nQToxNzoyNztASEx06cnAxLy4tbq8uLzEx8nVe2ZUS0lDQ0NHSURMXFxf89vd2c7Nz9DR0tTX5eTe5e7s5OTj2dXV1NDNzMvSb2nfTTw+PzowNTo1OD1GS1jf2se+vr26trm/vb7H0tnjYlhVT0xIRUdMTklOZmpqfODc3NfY19ja2tva4+be3N/j29fZ1dDR\nz87MyszrWetiPjs8PTMwOTY4O0JOUOXWzL68u724t73AwcTP5OdrV1RQT01OTEtZW09Yd+5w/eHk4d7f4t/d5uDd4ujf2d7i39za2dnb19TV2NfU2HVYblQ/Pj8/NzU8PD0/SVZf3tLLxL69vry8v8PDx9Tr7n5dUE5OS0xMTVBTW19+9+7h2tba2tnW2Nzg\n4t7n6urt6uTf3tza19TRzs7P3GzrbkZAQEI5NDo7OztBTE9f49LNx7++vbu9v8DAxdHZ2+5kXFpRTU5QTk1RV1xfZnrz5N/g39za2tve3d7e4OTp6+rr6vL58/Pz+nZud3FtaGdoXVpcVE5OUVJMTlZYWl5u//Lg2dfX0s/P0NLT09bY3OLi5Ojw/nd3dnNt\nZmlqa2hkZGRlaWpkaW5xdW9vcnz7/3v78+/v+vr68e70/3/29vX7fn759vl9e/v79/53d35+e3B0fHx9dm9vdn78b3J6//r7/3j59vL3fvj08fP+fvf09v58+vf3+Xt2fPz6fHN++/v7f3t6fvv/dXf//v17dXr6+v53fvf39350/PP29Xt89/f3/Xx6/fn7\nfH58/vp8eHZ+/f16evn59v55e/74+Xt2/fv5/Xx6f/j6fnb/+/r4e3j/+/p9ePr49fl4eHv9+X50fP36/H58fPz4+np8/Pz4fnZ/+Pr8eH728vl9dXr9+v11e/z5+Pt9ev74+3l3/f5+/Hl3+/n5eXv5+/f9eXv79/h8d/v5+fl8e/77+X53//r5+nt3e/v6\nfHb7+vn9end8+fl+d378+vj5eHz5+fl4fPn2+nx5fPv7fnR8+/j5fXl5/vn6eHz49/b9fX769vd+d/79+v93eH///nh6+fv4/nl5fvv7eHV98/L5/Hx/+vh/d338+fl7efn8+Xt3/fv4+3t4fvj5fnf/+vn6fXp8/fv+eHr7+/l/eX379/x4//n2+nx5evv4\n/Xd5+Pz7/nh++/j5fHr7+Pb8e339/Px5evz7+Ht4fnn483Z1/Pr6+357/Pf4/XVaSujpTO7P+nTO4XTb13v64vxw6vNn++9ze/dxb354cm5vb3R3bW1v/Hl8ffzu5ulrSVHLZl3S22/Wz1xl2WJd4vZd59z56d307N3o/uvtcP14Z1pRSup6TtrgY+PYcenc\n6P/u9HXsfFhN52lR3HlX09tM1d5X39la49lf6Gxg6fd42tx/497y9d5vc+h8c3j/bul8aHtsZWdPeHtO8Oxm+9536ON3a/3qYvNxXmPqa1/84HXs1HXm2+Ho2t1m9+lYWW9obNzf5Nrbftneb9nn7HzsbmB2WVlfZF1ofFNfZFZVTlliWl37a2ff5O3c1+fU\n2N7a3tna2N/a4N3b5u3p8e7q92x5emh0Yl5tYVxxXlheUVdgV1zrcGvecfzh8e304Ork4O7o6ur65PZ47XpobGlhZ11dX11lbGtjaP5zb+95furs5+Xc5trV3NPY1NfW4+nfefjub2bt/2fn7frf4e9rXlJKRz89PTw8Pj8/RktQWnbq2szJx8O/wL+/wsPF\nxMjNzNXW0+Dl6/R4d19cXFZaWFFQU1NPUlRUWVlYWVdUXF5bXGNoaWhmcGlrffH89NvY2tXO0M7Mz9Da29fhefH1a3pxaWptZ256Z2bx82555Pdm+PN6bPPpd/33d37pf33g6eTY3OPX1t7a3O/r6GpudVxbY1xTWWVfaG939nrzfnl7bHB3amNrcfp+bvPo\n+ObY3N3Uz9He4Nvj+/j0Zmb7Z1dZW1RSU1BOVl9dYvn4fuLg7ufa4N/a5efj3OHk4trX3tXX4NrY5e39/m9tb19mZGthampaYW9mUl1rWFtvaGB4dWtzbmZ3639p9Ox+b/T+benm5+Td5OTZ4+3m2+Ht5uTw/Ov1em9/9nNqa/9tbXRubGxvbm1mendtf/f9\n897l7NvZ7OXefWv79Gp0+2157nxhanxydHZ1+H5udnpeX3NpZW718fnr8nx7/Pj7//zl4+3s7fD15OT25tjm8drebfrZ8WLu4H57729se3FhZG9bWnJjVV1vXmBuY2RoZV5hbGNnfv556t7f39nY29bU2tzY1tXT0tPQz9LV1tnf2dXl6t/g7PTn53BPPz87\nMzM3OTg9R01Va+rf0M7P0+Dh3fD43djXzMjKysfHysrLzs3N1t3a3OTd2t/e1tfc3Nna2tfX19bU7zszPTEpLTc0MT9PUlzn1M3IzdDLzdrcz9PWzsjJzdjVzuLs3tjh49rqfX739vTz9eTe4+fh4Obi3d7c2dTPzszFwL++zjg0Uy4jLTszLkdgWPHQycnE\n1ezV3VtT597m0MbHyMPJ08/V4+Xb6W/z6/5zf/Hr4eTp6Ony+fF//+rd2djPzMzGv8C/u79ELUY7Iic5Oy455nLu08rJxstfbN5hTFzX3NjFvsLPzcDUX97T+Gfe5G7v6vPo3u/w2N9teOb6bvTr7NzNycnCv768urrHOS1NMx8oPDstO9f73czIysfNWGvm\nV0heztLWwLzBys/J0nXm3eP3+97m4e/r3tni8ODe+Hz5/HJ56t/c1s3Iw8C+u7m4yjEuXiweKz85LEjM6NTKxcjE10te5FpFXc/c1cS8v8TGzt3obl5+421j5tvr8d7b3uDi7fp5Zml9cXzl2NHOysW/vby6t7tDKj9AHyE1RzAx4dDXz83PzshXQl/rT0bd\nw8rHvbi8ws5eZNhPQGfQeFTaz+jt3drf2/Vq7vNdWurd/OnPycnHwb27ube5SCc8SSEfL082MO7PzMzM0NnEYD5P411Bdb+/x7+4vMXO6Hb1Y09X7vJcctnf/ufZ3en0fP/4bV1n5uDn2s3IxcC8u7m0ssorKV0uHSVBWTA/z8rF0dfuys0/PF7UUEbOu7zB\nvbq9wtJlSlzcR0Hs0GxT2M7k4t7c2ttmWO/hYVbnz9fVysTAvbu5tLC7NCNBPR8fMu08NnnOvsjcX+LAWDhC291Lb7+5u769v8LOX1Jx61NMb9vzXnvc2dzy++Ddclhi9Hdlft7Z19LKxMG+urazsLo0Ijw+IR8v6Uc8X+W/wNlNW8NxOz36017txLu4ur/K\nx8lwT1rq8Vtcdez1bmT/2dn3bu/qcl5ide7q6d/VzcnFv7y5trOwujkjMT0mIStSWkdZXcm+zVBK0uJDPlLc49THv7m3vM3UytxUS2HlbV1m7dzgcmze0951cfH6amJlfuDd3NPKxcK/u7i2s7PNLSQ0MyUlMVRYW19eyb/VSk7abUZEWePTxcPAure909/a\n7GFXXvjo9mFdduXzbP7f2uN9Z23x7/3s2M7Oy8fEvry5trSzxDUkKzUqJixCbGppUOrByFpEXvNWSkxl1sC9w764ucbi593a3l1FWs3vTk9t3+PwXm7R1GtZfOLr7ujZzcXFxL66uLazsLs0ISw1KiYrPlvg6kdswsNlRFdbVlZOT+2+usHBu7rD1fhcb+Z7\nZG/l5O/0ev/o4ftu8/dnXV9pb/nu6NnOy8nDvbq4tbKvvjAiLTQqKCw+X9DhR3jDxl9IVE9ZZlFP6b26wb+9vsXRblN33m5ed+zt6/xieNze+X/q8G9qYmb35u7q1czHw7+8t7Kvr74yIy0yKCgsPF3Q4kfwvsdfS1NNWGVKSeK8vMG+vb7Bz2hY+99+X3fu\n7up1Xmni4H3+6vB3al9feOrr7dzPycO+vLizr623NyMuMykoKjdWzNhC777FfE1PRl77R0T5vr2/vb++vstkWOnrc3Br++fmZ1p16efx9urt821fbHx7/u7e08zJxb64s6+utzokNTQoKys5TcvWPtG+yHFRXURvcUFG9r/Gw73Cu7rIamzXfWtwbe3d41pX\n/O15aXD44t9jXvbl4+vo3s/Izc7Fvbq4t+8uND8uLi02RXLMSHPDxNNZfExg6EpHUszMy8PJwL7D5mjd7WlgaWJ03PZhc/B7c/N2cej0ZWvz+Pvh2tPMycjFwL/DxtdENzw5NTY6P0z9Zl3f0ttvbltZYVlPU+fX1M3LyMbH1OjudmdfXVZf8PH+8OTe3eLr\n5tvc5d/Wz8zJxr+4tLviRT05NC4tMTxLT1Nn0MnM3H7x73RQS1Bl6N/a0cXAxMzU1dbd8m936OLzffvs5OXu8u7q8mldWVhTUE1JTFRcannq4d3f7vP48/n77efi3dnW0M7Q0NHT19zm9fb+bVhNTE1LSkhKT1hbV15s/fx8bmh6+WpgbPzv6OTi3NXU1dXS\nzszJyMjGw8LDxMPIekhHPzs4Nzk8S0tPW+vd3Nfz9PrvYltdYW/55enYz8zNzc7R0tfd6u37dnJua214e3t6/X79cW1pZWNeXmBiYWBobG5zd3r47uvs8Ovq6uvu8vLu7vL9fPf29/11dnz+em90e33/eHJzfPv/dnj++vZ5dX3+9/t9dX76+vx4e/jz8/77\n7evt7/P07Ors8vfu7e/y+v96eHZtZ2dnZGRiX2RqbG5ue/749vt++/P1+Xz68u7t7u3r5d/f4d/c3Nze4uTm7PxsaGNeXFlXVllbXF1fa29//3328Orq7fDs6+vu+Pjw7e308Orq6Oft7ezr7PV++/p/dG1qamxqaWNnbG1vbW12fv3+fPXv7ezz9e/r6Ort\n6OTg4OLk6u3w/mtjY2BfXFtdX2JmZmx2ffX3+PTs6uvx9u7v7vH19vDt7O7v6ujo6e7y7+zvfnv+fHhtaGVoa2ppZWpvc3Z1dX759PZ8+Ozv7vX9+PLz+X749PL1f3p9+fN+dnz7+v1+eHh9/n5zcHl9fntzePr7+nr+8/Ty+f7/+fX3fXr3+vn/eXVzc3Fs\nZ25wd317//Hq6Ors5+fm6vH28fDz/nV8fnt6c3FyeXt3c293c3JtaWxuc25qc3h+/nl7++/v7e3u6Obk5urq6Ojr7/j09Pj+dHN3enJqb29wb2pnZWhpaWNla21wc3Z4+e7s7O7p5OLh5eXh4OHm6eTl6e73fvz7/nJscG9ubGdlZWZnZF9gY2RlY2Job3J1\ncX747+3u7+ni4eHk4N7f3+Pl5uXl6O727vL4fm9tcnZtaWlsbG1oZmdsbm1raHBwdHVtb3Z9fXd0/vjz9Pr58ezs7+7q6ejr7/Hw7O3x9/Hv8vL5/vz5+X1yc3l5eXBscnh2cWx0e3x5c290e398dXr7+fv+fn359vb9ffb19vn++vby8vv99vP1+3p7/Pf7\neeze4+Pz7+/z6/h7bXJ3dnRsbnJ6eXJxf/35+393d/x9Y19scv//+/ny7e3t9/Ls7u71/Pjz9Px7+vb1+X16e/frfXR5f/19fHp8/vn9eXR8fn96cXX//nx1evn29v93d/37/Xlzfv7+fnx5evv2/3T/+/n9e3z59ff9efv+8vh6eH78fnlveHx9e3Z1d//7\n/H17+ff3/Xp9+vp9cnt+f/92cnf//f90d/39+357fvj29/18+Pbz+n19+vn9d3n6+vl+enl++fl8efv39vl9fPv49/15/vr7/Ht3/fr7e3f79vt+eHN4/f12cXz+/P56d3Z7fXdtdn19/Ht3fvXz9v7x7ezr8Pbz7vH2fX36+/59end++/t7ePr19/x/fPr3\n/Xp6/37+d29vdnl3b2xzd3t7bm52fP19evry7u/1+vHt7fP27e3r7vb7+PT2/Xh9/v57dG9ud3l1bm93eHp0b3R9eHNwdf77+Px7+fTz7fnz7Ozs8PT6+vP4eHV8fX15cnd5fXlucXp6fnl2ePv29Pr98e/v8vj5+PP2/nd8/nx8c25yeXhyb3p9/P53d//z\n9Pd+9/Pz8vr9//v7+3l8+/3+fHN4//7+efv18/X+fX759H5zdv77+f5+/ff38/96+/z6/nFw+v//dXb9/Pf+dnb++fl8evn08/b4/Pz19vx5/fn+fnVvdXx6dnN7/vv6e3v48/H0//Xw8fP4/f73+PfueHZ9dHpvc33+e3J8/v37fXh7+fb3fn/2+Pb7//35\n9PT/ffb19fp8fPv4+X3/9vTx+v7+/fX3fXZ++3t4fHF2e3h1bXJ1dnZvb3h8eXdy//b6+X1++fHv9v3y7u7v9PX38u/y+/7z9vf+dnv8/npwdHt5enNuc37//3Z5+ffz9vv89vHz+/71+Pn9d3V3fXhvb3p8fXhwdP/7+315+/bx8v79+vPx+H389PX3/nt+\n+f18eH7+9f54dXd+fXpveH5/fnp4evn18fn37u7t7/fz7vL4fP/6+v50bnF5enZtb3p7e3l2dHn9/Xl2/fz5+H76+vj6e3739/T5f3739fV9ePr5+354dXr/fXdweX7+/Hh2fvf2/H739O/z+X7+9fb5d/75+/n+eH35/Xdyen76+n15ffj3/Hv89/T1/v9+\n+/h5b3T7+fx9dnd+/f52b3v9+Ph+fvn6+3x99vX1+397+/f5fHf69/j+fHp8+/p9cnz8/vt5dn/5/X15/Pj39n59+vP3+3x/9/j7fnl6/P38enX9/fl+dXh+/Xxzev379Xt3fH3493h8+vr5/H19+fT2/Xv39PP1/v728/Z+ffn4+f92dHd8fHFue39/fnp5\nfvb2+nv+9vf4fXr59vn+evbh3OLm8vHs8PNxcv1wc3Rscn7zcWRqc/R+8+716fLuevHz7+/6fv308/l+fff29vp++/r3+fn89Ozv9X5+8fX7Z216/urq8vzx7Ovy/vfz8f/5+/ny9XdbW2docm1wevn4+n/z7u7u9fj27ezv/PXv7/D3f//39/l6d35+/npx\ndn59eXB1e3t9d29xen57cXX+/Pp/e3l9+/p8dn79+v5+/nr+/3Z1/v3+fHR0fv7/d3H+f3j+fHh9/ft9dHr7+vx7dnn7+n15/vr4+314ffr7fnJ5/v7/enV6/Pz+dnb9+/n/dnn7+/54f/n59/57e/jtfnd6/Pr9/3l4fvv+enJ7ffx9cnN9f354c/z8/P52\ndnz8/Xd0/fn29vr8//n3/Hr89/j5/np/9/n9en749vl9dX37/X9zefv5+X14fPj3+PZyfPv9/Hd4fvx+c3n+/v15dHn+/f15ePr5+fx/ffn2+f54+vT1+H56+/n7e3n7+vn9eHd9+/18df36+/x8en35+fx4ffr6+X56/PX4/Xn59fr4e3Z7+vl/c3z4+fp9\nenh++35/eP/8/P53ev38/nZ6/Pv7fXd4+/v7env5+fj7/3369fh+fPb09Pd+e/z3+H16+/n4/Xh2fvz6fHJ7/vv6dXd6/Px+eHz6+vl9eH74+X95+vb19358fvr5+3d++fr4/nt7+vj6enf+/Pt/d3z5/P15fPv7+X13dHv4+3h2+vr5/Hx7fvj4/nn8+Pf5\n/ube4+Xv+ff7dXF1dH7+/nZtenx1cvh6+PH2bV1lbHJ7d3V98/L1+/Lv7e7z+fXu7/P++vL09vt/f/n5+3h3/f37f3V3/f5+dnz6+fl+eHr54d/v//j28fF+dWz7+Xtwan14b/x++G9hZ2d0fPz9e3768fH3/PLu7/H2+fny8fZ+/PX49353f/n9fHR9/f38\neXR6/Pz/d3z6+/x+e3v8+vjydHv9e3txdnv8fnR5/fv7fnl4/vv6enj8+/t+e3r9+/18dv/6+f15ePz5+3t5+fn2+3t6fPr3fnh///73fXt/9vr+eXr7/f16dv75/X53/ff7/HhyeP/9fHJ7/Pv7f3x6/vj6fHn5+vn9d335+fx6evv4+f54e/r4/Hp4+vn6\n/n18/Pb6fHj9+fj8end9+/t6ePv59vp7evz3+P15/Pj49Xx4fvv8fnV5+/37e3Z9/P18cv/1+Ph/fP79+fx1fPv7+317fPv4+n15/Pr5/Hl9+Pf5fH739vf/eHn/+/52d/z8+398eX36+nx2/vv6/Hn//P38enf9/Pn8enj9+Pp+ePv3+Pv/fv34+ft4fvj6\n+3x2evz8fXb++/v6e3d8+vn7eHz4+/j+e375/v1/dvn55t7p5+vv8/Pw8+/7/25vcXV5b3L/fP98e3v+9fj+c3Z+dl9gaHH9/Pz97+3r7fP07+zt8/rw7u/z+Pv+9vT6fH74+fp+dnz7/X10fP/+/nl0e/3+f3N7+vv7fnx++vn36Ptv/nZ7cXJ8/35zd/79\n/Hx1c/73/Hx4+/36/X55/vn7fXb/+vr9eHZ/+/x6evz5+f97d3r7+3t1fvz8/Xx5fPr8/nd5/vz6e3f++fv+ePvx/P95cnn+/H11fPr7+359e/73+3x5+/n6fnh6+/v+d3j8/Pp+dnj7+/x5ePn5+Px+fv75+f94/fn7fHp6ffj9enf9+vn7enR/+/r+dv/7\n+Pd7eXz5+/53e/n7+Xx3ffv6/3n89/X4fXh9+/n+dnz8+/x+e3r7+fx9d/z7+v14fff6+nh9+Pn4f3h3/fr7eHj6+/n8fXx++fj+ef35/Pz96+Po62llb256dHFwe/39fHf+//T0/Pz99fX4ff329fZ8eHz8+n52fvv5+3t5fPn4+3l6+fv5/nt7+vn8fHf8\n+/r+eHr7+/x5fff39/55evvx/XZ2f/39/3p4fvn6f3Z++/r6enr5+Pl8evn49vt7eH76+310/fr7+358e/v4+3l++fv7/nh9+ft9cP76+/l6d3z6+vx3e/b2+/1+fPv3+P14+vv6/Hd3f/v+eHr7+/n/eXr8+Pl8eP75+fx9e/35+352fvr6+3l1fvv8fXj6\n9/b6enp9+/h9dv76+/19enz6+vt5efz6+Hx4/fj6/nj99Pn6fHZ4/vx+dHr7/Pr/fHt9/vd/efn79/x5e/r6/Hh4+f38f3V4/vr7enj7+fn8f33/+Pn+eX/4+vt5dnlpX2tte/fx7/T48u7u8H769fbze3h7f/98c3N+//17c3n8+/94/vj19X57fvz1+H3/\n9/f2+3x7/Pr9fHR7/395cHN9en1zc3x+/nhxb377+X159vPz9fn9/vXz+fz39/H+/Pv88Ph9efd8/fd2cH78+nt2+3369v96fvf4+nR4/n7+dHF1dn59df389vP9fPr58/Z5evr4/P53fPv+/3pxev7+/Ht9+/x3X2X5+P3s5uvk4ent6vJwfvZ1c//8+fp4\nevv3+fxrXWhvZGN3fvz1e2xq7vZzdXt9+vVvanTr6+/q4tza297h397l7vj3+f99cm51eHJtaGhqaGRjYF9lZ2p4bGlycf9++O3m4+Xi3t7c3N3f3tzc3t/c2NLOzs7MzM3Oz9LbflRBNS4tLCssMDpIeMzCvLm4vcjT9lpMSkpS99LKw728vb/FzNHW3+ru\n3tnc2NfVzsrHxcXAvr26t7rlOCghIB4cHSMwTcu7tK2rr730S0Q/Pz9N07mvra2ur7XFRjM1NjQ3SN/Du77GyMfdT01Z/uvf2s7EwcfLwbu8vLq2r6ysySgdIyAZGR4rSrqut6+nqss7NTU2P0lRwqmiqK6vtsdXOS4uMzlDVs28ub7J1XRXSUhPddTMx8LA\nxsvNy8bGxMC7s62rqbE1HB0iGRYbKEa+qq21q6vLMCovMjxW1bemnqKutr59Oy4tMEPr4ty/tL3mWFdSTk5OaMzE0OLPytPq5dDGwsXFvbeyraiouywZHSIZGR81zLSquMm2vz0oKj1Q1r23rKWks/5671Q/P1vOusVHSOPdST9d0crbYVTx1WtY5sTF1N/a\nz8zOzb+1sq+rpqi+KBYcJhsbJEm2sa7VSsffNigw2ca9ur+1rq/NStK/yvpd5NjP6kxP4MrlXWvtb1JPV+/S0djWz99cVGfZysW/urWzsq2pq70tFxstHx0nSre9uXo429E/LjjAvsnH1MG4tchdwLXA+1fz/fxsUHTLx/hSavddT1znzszb6uPdbk9d1sfD\nwr64tbGtqau4MhcbLyAcJ0e5x7/uOc/KRS85vcTt3OG/uLXA57mxxFZL/fDvaFjhxcNuT2vsZ09Z8tPR6nD2421VYtvKx8S/vLezrquprm4eFyosGyAyxr/TyjxYvGo2MdS8aGh5y7q2uda/r7piQmvhYXx/3MfEckdb8FpLZdTQztbq4drxVFnYyszLwbq2\nsa6rqrBAGRozJRskPrvSztk9zMBMMTm9zExc5L27uL3NtLDGSkfR7FNY8szHymRX4+JWSnjV33xv9O38Xlf51dTSyL69vbawrKutvC8aHzUfHCpcwFrV/0y91D41V7tYQWvKu8C8wL6vt9xObs5tVWDYy9p2Wmr7XE5Y39x8au/e/V1de9zb3c7BvLy6ta6r\nq67PJBouLxseM8niRsxX0LxQOTrDyjlH3L7Eyru+srDHfvbGfERhzsfZ5P5ZX1ZJSu/TcF/m229aXW3t3uLfzcTEwLm1sa6rrLY3GyVAHhsqa8s95OD8uX49Otq+OTvlwsf7vrq1sMLX1r/VP0/UyH1Z2drqU0xScOxYXt7Vb1Zu92hf/tzSz87Fvbq5tq+s\nrbVGHyVKIRooUNg3VcXdvOxER9zDODnRxdlXwLW4tsTGwsHkQGzL2ltdz9ldTVV0a1xa69b8WF/salBZ693q7dnKxcTBu7a0sq+xyTIjNjYcIDZeQzXNzM3HUWH9ylg2aMzlUui2u729vrrBz1xi0HBNXNbgWl5nd2RdYvvgcV5z815RYPD0deTRzcvHwby5\nuLOvs8U/KTY4HiA0RjsvzcHazG3P2N1WO+/bUU3cucXJubW2w8rQ19pWVl/rfFFhbmVRXPJramvqdl1aWmJhXmXi09nVzsjJxL26t7Wxt9Y2MU8qHi48OS5Iv2/Y0snD4OlKadpJSWXGzeu/u73Bw77JzuHs2VpJbm1LUvFmVn7ebmLu9mFlYlpcZ2Z45dva\nz8rKzMbAvry4uL/rQkNIKSc5NjAwWthM3c3CydzQ7dxmTGvuflR6yM7Nxb+/y8nO2d9oZV1TTVJdWFpo6+/15eX0aW5uYVpfdPrx59rT0M7Lyca/vLzHYlbnOSs5OzAuPl8+TNjKzuLKytTrZej2W1v23Pzoy8fKzsXDzNPg2u5WV11SSFFkWlRp5fp76OX+\ndvz8cmr16+vr5d7b2dXT0s3Kzmb62T49T0U5OFVNPU3v32Lny9Tl38/R7O7c2u5u5tvj6tnQ29/V0Nrv6OV0YmNnW1lcXVpaX2NoZ2lv//n5/vXt6+zt6unk397e3dnZ2NzqeWhhWlBOT1BPT1RaX2Z3/Hr47OXo7eri4+zq6+rp5N/j5d7a3eHj4er4fG5k\nYGRiXlpeZWVnam5zfvXu9fHn5eXm5t/c29jY09LY5HdiW1FNTUxLTFFcXF5t8vP97+fm6+Pe6vzt6O3/8+Li4+Dc3d3b2t/r6enxdmxpYVxbXFZXWl9kYGZ1+ff38uvq6Ors6uff4ePm4+Hh4eXp6enu+m1mZV9dWldZWlxcXGFnbHFwcHn27O3w7Ono6+7y\n8+7s6uvt5uPh4ebl4+bq8vXu+ft7b21yeHRucX7++fj5+vjv8nlnZGBcWVdWWVteYmVy+uzp6+vj4eLl6ebm6ent8u/p5+fr6efl5Ovx+fX6d2ttbWxqZGBhZGZmY2ZtdHt2dX339O/3++/t6+3w7unq7fDw7Ozu9P97fv57cW90dHRzbmxxd3dybXJ4eHt1\ndf/6+vt/9PLw7/n++PHw9f7z8PLz9/x+9/f7eHh/fn56dnV+fXtzeP3+/X11e/z6/HN79fn2/X57+/j6fnf5+fj8end/+vx5efz5+X13eP/8/Hp1/v78/nt7+/v7/nf/9/f4fnn++Pt9efz5+ft6dn33/nxzfPz9+3x7fPr5+Xt4/Pn5fXZ++vv9d3z7+fl/\ndnr7+vt4ffn7+P18e335+nt2/f/8/nZ6f335fHj4+vf8e3r8+Pj/ePn6+ft8env7+/tzffr7+nt4fvn6f3f7+vn8e3x++/n/dXr8/v19eXz5+vp5e/r69/16ffv6+3j++fr7enV4/vv+d334+vn+fXz7+fn9eP79+vx4ef3+/Xl69/37/Xd3fvv6e3n6+vf7\nfHf99/j5dv/8/P17eH76+/92/vr7+np3fvn5f3b/+fr5fnp7+/z8eHr5+/j8eXf+/nx1ffb5+n96ffr7/3V0f/v3e3h5fv90W09Zc+3v/fXg08/a3tvc2uD7ePbr9m5lb3Jvb2ZkZWhscvrm43tgXWhaTlRWW2Jte+je3t7c2Nnc4+7+7+jq7uzj3+nu6uzp\n8fZvaGBeWltdXWtgZ3ny+33s5+v17O358+vweOfo/ffo4Pv96fL8dW74enZlbGdrc2x3am72eWpt+fF/b2539XNjd/T9/3n+9OfqfHvr5Hlv6+Xp7vLj5+zu8O54fPP9bWb+7ndjavJ+bGRp7+5kZ3l09Htsbu/qcmx96Hho+/F+c3x58/h19/J+7/Xz+vTo\n+vLs/X/k7PL4efnj/F1ofPvrcmD/cHlmYu94e3xv8/b7dmzz+3Ly9Xn173D163hve/v1em367/Dy+/v+7ut57/189HxqcO/v9//9ePb3bm99b//+aXt7bXj7dHntevh1++9r+Xn6f//7//fx5W9/4/j7dm7s8m5ueP5/d3H9fHv2bW/z8fv5cnd8+/tqf3j4\n+/bz8u7o8XX/fn72+m/+9X13eXD7+nZ9/X17/H5ybnR79Hx5fG/v+e55fOl9/Hl8dffpcHz87fb1eXV49vxwev31fO98bX98/fp0efbx/XJ17/l++3r8/H79enxzdvh1cn317vP09v7y/H7/cXr8bvn+c/f89Hn/dO76dX525W7w+3X0/v587Xp++PN1a/1u\neGx1aHb6fvN17f328v/+ffPv9Pr16Pv3fn59+v/8cP3ufe1zcmr5d3B5bv5/+2ly/Xf5cXx+7vLx7v727fJ++nr8e/t8bvr+/fB77PH+7v/3dvj2fvV0931+eWxsa3Bwb2t6f3r7ePb38/f/+fju/Pj8/vD0fu1/+Pt+7vT/c+/u9Ht4fXP+dG1ud/VtdXNy\ndvx4bfv/eu77fuz27fR/8X3v+f369f35dWx3e/n6eXZ77/9+c3L9+vhwbfb2+fb2/vTuf/9udPv89m35ePt+b/P76/p5fHL4+Pbz9fH4cftwc/129Pz++X3+93h6fv7++2l783n383b3/Pb9cu70/vZ+/nr6eH38cXZ89/36/Hd86G18+H76+Xlv8P769nz3\n9+/0fHbv/PHxafZ1/n1pfXX6+Xh0+Pp87m17fvzxe353ff1+cn129/R9d/rvf+/7cfj2+3t1/PL/7Xv8+fPu+nxx+3t7dXz8/u52/vf4d/NxdX9reGv8dHnzdO10fXZ67nj99er+7O547PLx9256eHX+d2t683x2/n/27XX1b3j1fXV4e/z0efr7+v30+257\nevt5/W919n72eX3t8fP4dfjxffp89v7693p+e375e3ptenZ8d3v8bfL9cPx27fX7+Xr+8v99c/zwfvZ7/vv7+vh3fPtzenZxfXn5f/7+/vn1fnn6+PP4fPz1+f58d3R//uLj6eDu4u188Hvvfmn3b3Xybnh7fnx+d3f0eO92bG9nX19jZ3F/7Pv3fPfd9uft\n9OPq9vr98+ru+vl97f57d3Fv8/pve3r28Hr9c+z19nh57XrqcnV+e/X+fGf0eX51cXH/9nZ9ff5073b+e2r0f3xzbvh1+Ptu+/z27W7w/nzpfvd9fPD1/W5573x9emz/+Xpu+3X37Hd+b3Fx/G9t/P3n+f5ubO34+3N/63/s+mzu9PP7b3jx/Pt4avx9f310\ncvj0df5p9v31621t7Pt3/GH+6374fn717v3+dH3zdntreX33+3v4+f74+nP//ft6dfl1/vj5fPr7/fL2eXb/731x/m97+Xl/bu347/r7dPfybPZub33+/219/O77/Hp+/vL9c/h97vXye33u8vxucW76e3J0d/t7/3d59e/5+H148m/3fHP77/T38/73+e58\na/z39XX1f3v6/3psff75eGx9fXn5d27yee/3evj38frzev578ft1fX75efl1dnz4e357c/3/9XN+ff70+Xhw8fLrdHnu+u/5fHj48fd5+3338nx5b337+nN2/f5+fHN2fXV+cXN8+/14fHx+fvZ5+vn37vP7d/347/t+9Pr5/np6eXr+/nf9+n77/nr68f17\nfvT3+/x4fXz4/n18/vV+/P58dn79+3V2fXj+eX16/ff8/X/+8/L5eP/8/fZ3//b17/j79/Dz9Pr58/Lz9nt+8Pf5/fzz+vf8dW95eXVtbXZ6fHN1dXj+fH50/fX+8/V6+vL6+3r3/vr4eXh7ffr9cn5+fv96eXZ8/vt5ef1+/H18/PX2+n379ff1/HR7+/j5\nc3X++/p9d3N2eX96cHh9fXt2cv/8e3h5/Pn8d3V6/Pj8e3P6+vr6eHd5/vt+b3z++fp7ePz29vt99PL19vt89fLy+Hl++Pv/f/9++fz5dnT7/fp/dnv6+n54//b09fp+/fP3+H5/+fr6e3l1fPz/enP/+vv7dXv8+vp5d/359vp4d/77+Xp4+ff4+fx8f/n1\n/Hv8+fn2fn759PV+dnz9/npyb3h8/310ffr7+v1//PXw4+tx/Ht+eG9yd3t2bnN1fPp4dnt++fh9fvj18/j8+vTy9Pv/9vb2+Xd4/P99cnF7fH14c3F4fv55d/n69/j9f/j08/R99/Hy8fj68/Hx+P3t8/j3e3l9+/16b3l8eXhzcW93eXlxc/9++/58/Pb0\n9n399fT3/H389/f6fH75+ft+eHZ8f3xvcv7++n95efv5+n1+9vfy+H1++PX2/Hv79/T9fHp+/P1+c3v8f35zb3h7eXVve317fHRzd338fnT++Pj2/H3/9vj3/376+/t9d377/f15//f39n15ffz4/Hro3OLh7PDx9Pf6fHZxdHpuand3b/D6anFxffh09O7w\n7Pt++e749//9/fX2/Hz48/Hv9/ry8O/2evHs7u/3/Pny8fp/d29wd3l77O7y8/r47/T0+n769vb8a1xfaWxycPzq8vfy9+vr6+3x8O7u7/l6/f3+fW9yeXh3b296e3t3cHN4fn1zdP5//n54dnd//n1zev5//Xhx/fn8/nf9/P37d3Z6f/96b3l/fH53eHV9\n+fR0c/19/Hx2d379fnR6/v7+enV3//7+dnf9/ft/e3z7+fp9dP78/f50dv7++3d2/P39fHd2e/78e3b7+vj5/3779vn6eHz6/Px5d/7//X14+vz6/nl2evz+fnX//H17f3t4/vv7eXn6/fl+eH77+Pp6ffn7+/93fPv7+nh8+fv7/3x7/fv8e3f8/Pr+d3Z9\n/f52dP5+/H53eH/5+X55/Pbz/X58/fX0/Xn+9/j6fXd+/Pt9df36+fx7eXr++/x2fvr9/n18e/z9/Hd1/v77fXZ++/r9enn88/b8e3v6+vx6e/v9/P96eHz8/Hx3f/z8/H14/vr8fXn8+fb+env9+/l7d/v7+f1/e/75+fx4/vf39395fvr8fXR+/P79eXZ9\n+/x/dXn7/fz/en75+ft7fvv6+X13ef77fnd9+Pr6fnd8+vz8enr3+/z9e3r9+/54eX37+/56evr7+317+vj3+nx6/Pv6f3n7/Pz9fHh6/fv+dH39/vt7eH78+f54/vv5+nt3fP37fnV8+vr5/3t8+vXxeHr5+/X/eHv7/fx3evr9+312eP78/Hp4+/v5/Ht9\n+vX3fnn6+Pf5enj/+/x7evr5+ft7eHh+9n15+/n6/H55fvv7/nV3//78e3V9/Pz/evr6+Pl+ev/9+f13/fr5+/57eP76/Hl3/P36/3h8+/n5fHn5+fj9d3z9+/55efz8/f99fX76+nx4/fr4+Xl3fvv6eXf++/v+eXd+/Pp9df/59/18e/34+/14ffr5+Xd0\n/v75f3f9+vn5fHh8/Pr7ef/6+/v/fX38+ft5dX/9/n50e/38/Hl9+fj2/Hl6+/j6env5+/v+fHh8+/t9dn78+vn+ef76/P54/fr6+nx3fv3+e3R//vz+fHp9+fr7ePz4+Pd9e3z7+v52//v7/Hh2fP77+3Z7+n38+Xv++ff6fHr7+fr+d3r9/v93fPr6+n95\nevn6+nt7+fv4/H95/fj7/nV7/P79eXj++/19efv59/t7d336+X14+/r6+v56evz6/Xh+/vr2f3j/+/r8d376+vp8d338+v11e/r7+/98e/v49Xx3+fv4/Xt5/P37eHP7+Pp/d3n9+vp9ePz6+Pt8ffz59/54/fv6+np2f/z9fHj65t3l5+/27enwf/n+/P14\ncnR6entubHZ3fHZ1+/t5c3hwYmhubnJ79fLw+PDs6+vv8PXv7u/3+/L18vV9fvf4+Xx4+/v7fXV6ff79eHX+/v1/end9+3x+ev/4+/t7d37+/nh1//78fnh2ef36fXR++Pf9fHd++/36eH37/Pp+dnv9/v50fvj7+Xx3eP75/Xl8/fz6fnt8/P37fHX//fz+\neHv8+/t6e/f19/15ePz5+Xp6+/v7/n53fPz7fnR9/Pz6fXb+/P18eP77+/x6c3f89313f/r7+357fvn5+3n/9vn5/nl8/Pt/dnz8/ft7dXz9/Px2efv++f57fv36+H14+/v6/nZ5//3/d3r7/Pp/eXn2/v16dvz9+f19ef77+f13//3++3h5/vz7f3f7+PX5\nenl++fj+d/z7/Pr/e3v9+vt3e/3+/Xh8/vv4/Xp++Pj6fnh9+/r7eHz6+/r+e3v89ef7bvl5+f94eH78/nh3+/z5fnh5fvn6fHb8+vn6fn38+ff8ef/4+/t7d//8/H15+vn6/Xx4fPv5/nj8+/n7fXp7+/r9eHn9/ft+d378/P57+vz4+Ht2fP36/XZ8/nz5\n/Xx8fvn7fHf9/vz8eXv7+/x7efv8+f53ev78+3x4+/z8/Ht6//v5/3n9+vr4fHd+/ft6dX/7+/16eH39+n51ffn1+3x6fPb6+Xl6+f36f3V8+/v7e3z6+fp9eHr++vp4e/n7+v97ev36+3x3//36/nZ7/fv7eHb29/X7e3v++fp9ePr7+v19env7+v92fv38\n+f12/vr9/nd++vr7fHh++/r9d/77/Pl+e3z6+fp7fPn59v15ef38/nZ8+/z5fnd7/fr6eHn7/Pn8fnz79/Z+d/z7+P14eP/7/Hl6+/r4/Xp4+/v6fHb6/fn8fXh+/f74dXz6/Pp7eX/8+v95+/j2+Xt5fPr5f3f++/v6/3x4/fr7eHn8/fn/eX77+ft7fPn6\n+X53fPz4/Hh7+vr6/Xx5/PfzfHj8/vf9enh9+/x5ePz7+f56eP74+Ht2f/z7+Xx5/fn5/Xh++fn5fXn//Pt9efr59/t9dHf2+P12/vr9+X15e/z6+nt3/vz6f3h9+/v7fPz6+fr/eHj+/Pt2e/r9+v18eX/5+X12/fz6/Xt7/Pv6fnf7+/v+eHl++/t6d/v7\n/Pt9eP37+Pt4f/n4+X14fvr9fHZ//fv9eHh9/Pr+dn369vp9eX35+vl6evr5/X57e/r7+3n/9/r5f3l6/vr8enz7/fv+eXn++vt9dn38+/17e/z6+356+fj6+nt5f/v6fHj7+/v7/3p8+vn7d378+vf7eHr8/P11fvr9+313evj7/nh++fr6/nz++/v6eXr8\n+eXe6uft6+z9+vn8/3VxdHp4e29veXr7ent8+/j/dW57ZmBqZ297+Pb79+3s6+zw8Oru7/T98fLz9fv//fn4/Hd5/P78e3V8/vx8dX79/ft5dHp+/X10fP7+/X15ef/9/Hl5/P76fnh7/vz9eHn9/Pt8eXt+/P53ePz9/P57ef737Hpv/Xv5fHh2ev7/cnX6\n/vn/eXh/+vn/dv77+/18e/75+fx5fPv7+nt3ffz8fnb8+fn6e3h8/vv+eH38/Pz/eHr8+vx5d//9/H14fv37+3z5+f75fnh5/fv+eXr7/Pr+fHp+/Pl/d/79/Pp7dv39+3x2/Pv7/Xh4//v7fXf7/Pn6f3p+//j5dfz5+Pp8eHr7/f91fvv8/Ht4fPv6/Xh8\n+ff9fHp8+vv6eXf8/Pn/d3r8/Px4fvj69/96e//8+np6+v37/3t5//r6f3V+/Pz7env8+/p+efv59/t5en37+3t4/fz6+H15fPz5/nh++/v3+3h8+/z8dX36+/p5cn/5+vt3/vn7+v56ffr5+Xl8+fr3/3d6//v8eHr7+vl+enr++fp8efv7+v59ffv5+f53\n/vr5+3p5/vv5fnj5+fj7en7n3uPo+fH5/3RveHn9//1tc3p7b3b6fe70fmRga295cXR7+vP3/fTv7+7x9ffy7/D6/PT3+fd+fvj6+Xl5/fz7fXd4/vv7eHn7/fv/e3r/9eLi7vP59PP3eHxufH1ye257emv4+vx3XmRqcHd8e3v79fP0/fnw8e/3/vfz9PZ9\n+PT39fx7fP/5/XZ8/v77fHh5/vz7e3T9/X5/dXr+/Pt++P3++3x2dH7+/nd2fPv5/v94ffr6/nf++/r6eHr9/fx7dX/+/P52d378+n52/fv6+358//n6+3p++vv6fHd6//1+dX77/Pt8eHz8+f15fPbv/Xp4eP3+/Hl2/fz6/nh5/fv7en74+ff7enp++vl5\nevl//P56en76+f11fvz7+3p7/Pz9e337+Pf8end9/Pt8eP77+v1+enr9+vt4e/n7+vt4ff39/nR8/P37e3d8//v9eH36+/n9e3v4+Pt8e/r6+f54eP/9/Xh5+/37fnd6/vr6e3n5/Pr8fHz9+vr+d3/7+fp5d//8+3x7+Pr3/X58/v37fnT+/f38fHl5/vf8\neXr8+/p9eP37+Pt4/Pn5+X12ev37/nf/+/v7/Xx7/fr5e3r7+/f+eXz9+vx5ePv8+v54ev36+np5+vv5+n18+/bo92z9eft+d3V6/fx7df37+vx6en75+P15f/v7+Xx6fvv6+Xp3+f36fHZ8/Pr+eP339/d6dv36+Px5fvz9+/95evz8+312//v7/nl9+/r5\nfP75+vn/d3d+/Px5evv++/vq4Oji6fL67/D3+Hp1eXZ1eWtvfHt8fnjwc25zbvH77ebx7frs7+/7+O/19P17/vv0/nr79fn0fnx49PLufPv1/vLwfPJ+d29xcv/t6u78+fLx8Pz58PDx9n5pXWRpaW56fvn2/fr07+7y/Pbx8fL5+/f29f55+fr7/XdyeH19\neHF6fH19eXR0ff5+dXd/ffvp6vHn8v1oX2lobmxsbnd8enR6/Pz5/H58+vf3f3r6+/r+eXd9+v50d/7+/X13d379+3pxfPz9/Hl5//37fHV7/f3+eXV8/fx8d/v6+vt5ePv//ntyfH5+fnp3ev78/nd2/v78fXh9/Pv+d376+vl8dXj//H93e/z8+/56eX77\n+Xt4/P77/nl6f/37eHX+/vx/d3j//Pp6ePr8+/x8e/z4+P92f/37/nd2en97enh/+vv7fHd++vn8d378/Pt9eX78/P13ePz8+3x3fP37/nj/+Pn4fnh8/vr8eHz9/vx9eHn++/x8dP79/P55fPv7+//9+vv5/3Z3fv38eXj8/fv8fnp8+/n9eP/7+/p8ef77\n+350fvv7/Hl4//76/3X++/v6fnl4+vT8fH36+/h9d3n/+391ffv8+n53e/z5+Xl4+vj8/3l8/fz7fHb++/v9eXn9/Px6fPf6+Px7en76+Xt3/f39/Xt4//z7/HV7+/v8fXn9+vt/efz4+fl7dnz8+3x2f/37+n56e/36+nt8+/33+Xx5/vz+dXn9/P12eXz9\n+Pt6fPn7+Px9ff349313/Pv5/Hl4ff38eHj7/fr+eHr/+fl7d/v7+/18ev/7+/52ffv6+Xt3fvv7fnr79/j6fHv7/v1+dX/+/ft9eHz9+v16d//8+355fvv7+np++fr5fnd5/vr9eXv6/Pv7fHd++vl9ef979fl6fP/6+nx3/fz7/nl5fvz7fHj8+/r6fXr9\n9ebta3l5fv93dXd//Xx0//z7+3x5fff4/Xn/+vv4fnp++vr5eXj7+/l+d3r9+/14fvf6+X96ef/6/Hd8/f37/np6/fv6fXR//Pv8e3z9+/h+/vv89/x2dX39+3lz+/r7+355fPv4+3d9+vv6fXl8/ft/dn78+/p5d3z8+v14f/r7+P54ffr5+np7+/r4fnl5\n/vv+dnv7/Pl9d3v8+fp6efn1/X56d/v8+312/v36/Xl4//r6fHv3+Pf8e3p++/l8dv7+/Px8eHz7/Px2evr6+3x7fv3/+Xn99/r6fHd7+/p+d379/Pl/enr++fh7ev37+Pl3evz+/Hd5+/v7fnd5/vr7eXv6+vf8enz9+fl9d/z7+/p6eXz7+3l3/Pz6/Xl5\n/vr6fXf+/fv8e3r++/n7dnz6/Pl8d377+n93+fn593196N7l5fH08O7xfnZ0fn17cm55ent4c3h+/fx4fPj3+3RvdmZhamhx//z09Pf18Ozq7/ju7e7v9/n18/P9ffj6+Pp6d378/Hl2f/78/Xh3e/rp/Wt7eP9+eHN4fv57dH59+vx5eHv9/P12e/3+/X15\ne/37+3h3/vz7/3Z5/vz8eP/3//56enh++/x5ev5/+357eH/8+350fP37/Hp4/vz7fnz+/Pn+enV+/fx+dv39+v19e3v8+ft1fPv9+nx4fvv8f3R9+vz6end8/Pv+eHz7+v1/e338/Pt4evv7+X55ef/7/Xh7+/v4f3h6/fr8e3n7+f19e3r++/t+enl/9vt5\neP75+3x8+fz3/Hp3fP37fHf+/vv7fXl9+/v8dnr7/Pl+eX36+f54//n5+nt3e/37/nh+/Pz6fnl7f/n5eHr8/fn5d3j9//x3d/z8+v53ev36+np6+/r5/nx7/Pr4/3j++/n8end++/x6d/z9+v16eH79+nx1/P77+3x5fvv6/Hh8+vr6fHd9/Pz/eP36+fl8\nfOje5Ob59PtlYmVlanB2eXNwfv35+3v+9fX1//zz9PT6e3z6+Pd8fvv69/59eX77+X52/f77/Xp4fvz8fHX9/fr7eXj++vt+d/z7+/t+e3/45fBqe3f9fnl0dnv6+3H9/fr7fXl9+/v6eHz7/Pt+e337+fp7d/z6+P14ev37/Hl8+Pn3/nh5fPv9eXn9/fv/\nfHv++fr/c339/Pp5eP75+v/+//z5/np1//z8fXr+/fr8fXp8+/r9d3z7/Pt8eX38+v52fvv9+nx3fPz6/Xl9+fv8fnV+9/j5eHz7+/n+enn/+/t1e/r9+X54eX/5+3t3/fj9fnl6/fv5fnf9+Pr7enj++vt9evv5+Pp5d3z9+nx3/v36/nx6fvn6+3h6+vz5\nenj+/fr+dv76+vl7dnz9+v15//z7+v98e/76+nl5+/75+3Z6/v38eHr7/H/+eXz4+/x7evn++fp8fP/7+X52/Pv5+nl6fvz5e3b7/Pv9eXl8+vp/dn/7/vx7ev77+fp5fPr6+X55fPv7/nf++vn4e3r9ff7+eHz+/Pt+enz8+vl7d/77+n55ffz8/Hl7+vv5\nfnl7/vn8env6+/r9fnp+/Pn9dHr7+/57ev39+3p2/fz7/Hp5/vr7f3n7+v37fXp++/b+dXz9+/p8eHz++/93/vr7+n54evv6/nd5/v38fXl9/fn5fHf8+vn8d3z8+vt6fPn6+f94eX37/Hp5/fz7/nt7/vv6/nV++/z9e3v++/r/6d7j5fD+fH7//294+/75\neHZwb3x6fnP8+/75fHB4/n729vry9H97+vTu8fD9+Pl18vZ3eOzu7/v+bWJua21zfebd6OTl6urt7vny9fh8dn1zfX93en39/X51/fr5/Hp0c356XV9rbXx5env68+/z+O/u7u/z9/bw8PP//vn3+Xx6eHz6fnV7/fz9e3J2e359dHt+/v59enh6//x3dX1+\n/fhzcn58fnR1fn/9fHZ4fvz8enf+//1+eXl9/vx9dn7+/f54dnz9/Xp1/vz6/XZ3ff38fXZ6//7+e3h7/fv+dnz7/fp9d337+311/vv8+3t2fnz+/XV7/v79enT//vr6fXf9+/v8d3o=\n--mail.sleepy.sau.135.1476\n\n\n\nHere is a new type, I don't expect you will be able to read it at the\nmoment, but it shouldn't mess up anything else.  I'm working on the\nX viewer for it Now.\n--mail.sleepy.sau.135.1476\nContent-Type:application/x-annotate\nSubject: Wrapped by /usr/sau/mgr/demo/misc/annotate\n\neXovICdAISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA\nAAAAAAYAAAAHAAAAADgA4AAAAAcAAAAAAAAAAAAAAAAAAAAAP-AAAAAAAAAAAAwA\nAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAkAAAAIwAAAAMQBGAAAABiAAABw\nAAAD-AAAAA+AAAAD--4AAAAAAAAAAAwAAAB--gAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP-AAAAAAA\nAAAAABCAAAAQIAAAAQICBAAAACBAAfCPAAAEAgAAAHBAAAAP-4AAAAAAADgAAAwA\nAAH--4AAAAAAAD----wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAf-gAAAAAAAAAAACBAAAAgEAAAAgEEAgHjwEAgAg+A\ngAP---wAAICAgAAf+AAAAAAAAEQAH--+AAP4H8AAAAAAACAAAAQAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP-gAAAAAA\nAAAAAEAgAAAgCAAABAEEAQIUIIAgA+B8gAQAAAIAAQENQAA-4AAAAAAAAIQAIAAB\nAAfAA+AAAAAAACAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAGDgAAAAAAAAAAAIAQAABACAAABACIAQTJkIAQAB8D\n4AQAAAIAAQISQAB-4AAAAAAAAIQAIAABAA8AAPAAAAAAACfvvwQAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAChgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDgAAAAAA\nAAAAAQAIAABABB48CACIAIWrUQAQH--4HAf---4AAgIIgAD-wAAAAAAAAQgAIwwx\nAB4AAfgAAAAAACAAAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACgQAAAAAAAAAAA\nAAAAAAAAAAAAAAP4AAAAfwAADg-gAAAAAAAAAgAEAABAAiFCEACIAEXr0gAQEAAH\nwgIAAAQAAokEYAH-wAAAAAAAARAAJJJJADwAA-wAAAAAAC---8QAAABAAAAAAAAA\nAAAAAAAAAAAAAAAAAAChgAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAgIAADhAQAAAA\nAMAAA8A+AABAAkyZEACIAFzJkgAQEkkkvAJJJJQBBFEEEAH-wAAAAAAAARAAJJJJ\nADgAB9wAAAAAACgAAGQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAAAAAAAAA\nAAAAAAAAAAAAAAgCAAABAEAADiAIAA3-3+AAAcA-AABAAVq1IACIAGIULAAQEkkk\noAJJJJQCpNkE4AH-wAAAAB---ggAJJJJAHgAD54AAAAAACgAAHQA---8AAAAAAAA\nAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAD----wH----gP7sAHAP2q\n3-AAAMA-AABAB969IACIAIHjwgAQEkkkoAJJJJQCVAEJAAH-wAAAACAAAQgAJI5J\nAHAAHw4P----wCn8AFwAQAEIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA\nAAAAAAAAAAAEAAAAIIUAAUQQDgAAgfv-v-AAAEA4AABAGEyZ4ACIAwAAAQAQEkkk\noAJJJJQBFAESAAH-4AAAACAAAAfAJJFJAHAAPg4IAAAAQOgAAEwAP--wAAAAAAAA\nAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAEAAAAIIiAAiQQAAAAgH1V\nf+AAAEA4AAAg4CFCH4EEHAAAAPAgEkkkoAJJJJQDInDiABP-8AAAAB---AAAJJFJ\ngPAAfA8KwAAFQKn2AEYAEAQgAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA\nAAAAAAAAAAAEAAAAIIUAAUQ----4gH---+AAAEA4AAAhAB48AGEEIB--+AwgEkkk\noAJJJJQEEjCCAD--+AAAAAAgAgAAJKJKQOAA+AcIAAAPwagAAEMACBxAAAAAAAAA\nAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAEAAAAIIKgCoRAAAAEgH--\n-gAAAEA4AAAmEAAACBEE0P---xIgEkkkoAJJJJQDiQAEAH---AAAAAAgAwAAJKJM\nQOAB8AcLQAAHQ6gAAH8ABDqAAAAAP-----gAAAAH-----wAAAAD-----4AAAAB--\n---8AAAAAAAEAAAAIIBQFARAAAAEgP--8AADgH-4DAAoIAAABAkFH-----EgEkkk\noAJJJJQARoAEAP-D8gAAAAAf-MAAcyI4QOAD4AcIAAAPwqnvvwEAAj8AAAAAQAAA\nAAwAAAAIAAAAAYAAAAGAAAAAMAAAACAAAAAGAAAAAAAEcAAAIICIIgRAAAAEgP9E\nAAAFgD-4CgAocAAACgkFH-4IP-EgEkkkoAJJJJQAIEAIAH+B4QAAAAAIBAAAiEIQ\ngOAHwAcIAW0FQqgAAAEAAT4AAAAAvAAAAAQAAAATgAAAAIAAAANwAAAAEAAAAE4A\nAAACAAAAAAAEiAAAIIBQFARAAAAEgNdEAAAJgB-4CQAoT-AAMgkFD-wAH+EgEkkk\noAJJJJQAEAAIAD+AwIAAAAAIBAAAiEQhAOAPgAcIAAAAQqn79-EAAJwAAAAA1gAA\nAAIAAAAWwAAAAEAAAAL4AAAACAAAAFEAAAABAAAAAAAEiAAAIIAoKARAAAAEgask\nAAAR-gAH+IAYAA--wAoDB-8Af8FAEkkkoAJJJJQADgAIAB-AQEAAAAAH+AAAiERC\nAOAfAAcIAdcAQqgAAAEAAEgAAAA4qjjgAAIAAAAdRxwAAEAAAAf444AACAAAAGCc\ncAABAAAAAAAFj---oIAHwARAAAAEgdcIAAAgAwAEAEAXAAAAADIC4D--+AZAEkkk\noAJJJJQAAQAIAA+AICAAAAAEEA-BEISFgPA+AA8IAAAAQqm-feEAADAAAAAk1RjB\nAAMAAAAaoxggAGAAA--8YwQADAAAAECMYIABgAAAAAAEiAAfIIAGwAQgAAACgavw\nAABAA4AEACAQ-AAAAMICH4AAABhAEkkkoAJJJJQAAQAEEAcAEBAAAAAEEDABEIUJ\nQHB8AA4IABoAQqgAAAEAADAAAAAiqxVCjkEAAAAdYqhRyCAAAgAEVQo5BAAAAECK\noUcggAAAAAAEiAANIIAEQAQgAAACg1YAAACAA4AEABAIA4AAAwQBAHAAAGCAEkkk\noAJJJJQAAIAECAIACAgAAAAD4cABEQYSQHD4AA4IAAAAQqn79-EAADAAAAAj1RJE\nREEAAAAaokiIiCAAAmQcSRERBAAAAHiJIiIggAAAAAAEcAANIIAEQAQgAAACg64A\nAAEAA4AEAAgEAGAAPAgAgAwAB4EAEkkkoAJJJJQAAIADCAAABAQAAAAAHgABEQAk\nQHnwAB4IAAAAQrgAAAEAADAAAAARqxJEREEAAAAdYkiIiCAAAgq0SRERBAAAAHiJ\nIiIggAAAAAAEAAAdoIAP4AQgAAACg1YAAAEAA4AEAAwCBB--wBAAQIP-+AIAEkkk\noAJJJJQAAEAA2AAAAgIAAAAAAAABDgBIgDvgABwIAAAAQonf-eEAADAAAAAQ1RBH\nxEEAAAAaogj4iCAAAQHMQR8RBAAAAciII+IggAAAAAAEAAAAIIAP4AQgAAAChqwA\nAACAA4AEABwBBAAAGCAAIIAAAwQAEkkkoAJJJJQAAEAAKAAAAQEAAAAAAAAAgAAx\nAD-AADwP----wogAAAEAADAAAAAOaxBEREkAAAAdYgiIiSAAAT4MQRERJAAAAciI\nIiIkgAAAAAAEAAAAIIAP4AQgAAACh1wAAABAA4AEADwB4gQIEeAAPECBAjwAEkkk\noAJJJJQAACAACAAAAICAAAAAAAAAgAADAB+AAHgAAAAAAom-f3EAADAAAAAfVRBE\nRHEAAAAaogiIjiAAB8AUQRERxAAAAEiIIiI4gAAAAAAEAAAAIIAO4AQQAAABh-wA\nAAAgA4AEAHgGHgQIHhgAw8CBA8MAEkkkoAJJJJQAABAAEAAAAEBAAAAAAAAAgAAF\nAA8AAPAAAAAAAogAAAEAADAAAAAVSxBETgEAAAAdYgiJwCAABgAkQRE4BAAAAEiI\nIicAgAAAAAAEAAAAIIAO4AQQAAABg-gAAAAR-4AH+PAYAwQIEAYDAGCBAgDAEkkk\noAJJJJQAAAwAIAAAACAgAAAAAAAAQAAJAAfAA+AAAAAAAogAAAEAADAAAAAUNRBE\n4AcAAAAaogicAOAAB--EQROAHAAAAEiIInADgAAAAAAEAAAAIIAMYAQQAAABgAAA\nAAAJ-4AD+eAlIoQIESkEpFCBAiUgEkkkoAJJJJQAAAMAQAAAABAQAAAAAAAAQAAR\nAAP4H8AAAAAAAo----8AADAAAAASKxBOADwAAAAdYgnAB4AABAAEQTgA8AAAAEiI\nJwAeAAAAAAAEAAAAIIAP4AQQAAABgAAAAAAF-4AB+8BJJIf4OSSJJJD-BySQHDDD\nIAOGGGQAAADhgAAAAAgIAAAAAAAAIAAlAAH--4AAAAAAAoAAABAAAMwAAAAKNRDg\nAcAAAAAaohwAOAAABgAEQ4AHAAAAAGCIcADgAAAAAAAEAAAAIIAAAAQQAAABgAAA\nAAADwH-gD4A22EEgRtsG2wgkCNtgEAAAIAIAAAQAAAAeAAAAAAQEAAAAAAAAIABA\nAAB--gAAAAAAAoAAABAAAwMAAAAJGzgAHgAAAAANZwADwAAAAgA84AB4AAAAADCc\nAA8AAAAAAAAH----4P----wf----gAAAAAABwEAwDwAAAIkkQAAAABEkiAAAD---\nwAH---gAAAAAAAAAAAICAAAAAAAAEACAAAAP8AAAAAAAAoAAABAAD--AAAABFQAB\n4AAAAAAmoAA8AAAAAgDkAAeAAAAAABiAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAwEA4DgAAASYZIAAAACTDJAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAA\nAAAAAAAAAAAAAv----AAAAAAAAAAkwA-AAAAAABzYAfgAAAAAg9kAPwAAAAAAAyA\nH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA4DAAAANgGwAAAABsA2AAAAAAA\nAAAAAAAAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAAAAAAAAzQHh\nAAAAAABZoDwgAAAAAng0B4QAAAAAAAaA8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAEA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAA\nAAAAAAAAAAAAA----8AAAAAAAAAAawcRAAAAAADM4OIgAAAAA4AcHEQAAAAAAAOD\niIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA4AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPRiR\nAAAAAACGQxIgAAAAAAAMYkQAAAAAAAEMSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAEA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+CRAAAAAAGDPBIgAAAAAAAHgkQAAAAAAADw\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8A-gAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACR\nAAAAAAEBgBIgAAAAAAAAAkQAAAAAAAAASIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAgAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAAAAMAwBIgAAAAAAAAAkQAAAAAAAAA\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAPAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACR\nAAAAAAIAwBIgAAAAAAAAAkQAAAAAAAAASIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAIAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAAAAYAwBIgAAAAAAAAAkQAAAAAAAAA\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA8AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACR\nAAAAAAQAgBIgAAAAAAAAAkQAAAAAAAAASIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAACB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAAAAQBgBIgAAAAAAAAAkQAAAAAAAAA\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDwAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaR\nAAAAAAYBFNIgAAAAAAACmkQAAAAAAABTSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSRAAAAAAIDDJIgAAAAAAABkkQAAAAAAAAy\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALSR\nAAAAAAMGFpIgAAAAAAAC0kQAAAAAAABaSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdyRAAAAAAGcO5IgAAAAAAAHckQAAAAAAADu\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADyR\nDAAAAADwB5IhgAAAAAAA8kQwAAAAAAAeSIYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaReAAAAAAAAtIvAAAAAAAAWkXgAAAAAAAL\nSLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPuR\nswAAAAAAH3I2YAAAAAAD7kbMAAAAAAB9yNmAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGTwQAAAAAAHDJ4IAAAAAADhk8EAAAAAABw\nyeCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGT\nQAAAAAAAEDJoAAAAAAACBk0AAAAAAABAyaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXgAAAAAAAABLwAAAAAAAAAl4AAAAAAAAA\nS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACW\nAAAAAAAAABLAAAAAAAAAAlgAAAAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVAAAAAAAAABqgAAAAAAAAA1QAAAAAAAAA\naoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5\nAAAAAAAAAA8gAAAAAAAAAeQAAAAAAAAAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAYAAAAAAAAAAMAAAAAAAAAA\nGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB-gAAP---------------------\n-------------wAAAAH-4AAAAADwB4AAAPAHgAAA8AeAAAAAAAAAAAAAAAAAAAAA\nAAAB-wAAAAAAAAAAAAA-wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAf-8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA4AHAAAAAP8H+AA\nA-wc4AADnB-gAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAH-+AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB--+AAn---------------------\n-------------sAAAHATg4AAAAf+P-AABvY88AAHnjewAAAi97zj3vAAAARe95x7\n3gABGQAEXvece94AAAf--gAAHwAAAAB+AAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAD---AAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAYA0wGAAAA--f-gA\nDGN-+AAP-2MYAAA2hCEUUIAAAAbQhCKKEAABGQAG0IQiihAAAA-gfwAAIIAAAACB\nAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP---AAt3d3d3d3d3d3d3d3d3d3d3\nd3d3d3d3d3d3d8AABgBwwBgAAA--f-gADvd-+AAP-3e4AAAqhCEUEIAAAAVQhCKC\nEAABAQAFUIQighAAAB8AD4AAQEAAAAEAgAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAf---AAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AACAAxgAQAAA--f-gA\nD-9PyAAJ+X-4AAAi57303PAAAARc976bngABAQAEXPe+m54AADwAA8AAQCAAAAEA\ngAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB----AAvd3d3d3d3d3d3d3d3d3d3d\n3d3d3d3d3d3d3cAANCAzABMAAA--f-gAD-9PyAAJ+X-4AAAigIUUUBAAAARQEKKK\nAgABAQAEUBCiigIAAHgAB+AAQPwAAAMAwAAAcDgAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAD---+AAu---------------u-----------u-----u0AATGB2QDCAAA--f-gA\nDvd-+AAP-3e4AAAigIUUUBAAAARQEKKKAgACAgAEUBCiigIAAPAAD-AAQQoAAAUA\noAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAH---8AAt4AAAAAAAAAAAAADdAAAAA\nAAAAABdgAAAA98AAnOD7wHBAAI--f-gAjGN-+ACP-2MYAAAi970TnvAAAARe96Jz\n3gAD-gAEXveic94AAOAAH3AAQ-4AAAoAUAAB-P4AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP---4AArz-------------56f---------97P---+b0ABDGH8ADAgAIf+P-AA\nhvY88ACHnjewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAPngAQjoAAAoA\nUAABNLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAf---wAAvUAAAAAAAAAAAAAH2gAAAA\nAAAAAC3QAAAB3cACDGH8ADAQAMP8H+AAw-wc4ADDnB-gAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAcAAfDgAQjkAAAwAMAABNLIAAAAAAAAAAAAAAAAAAAAAAAAA\nAAA-----8Au0AAAAAAAAAAAAAFugAAAAAAAfgDvQAAABe0AEDHH8ADAIAPjwB4AA\n+PAHgAD48AeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdxn+bgAQRCAAAQA\nIAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAB----4Dwt0AAAAAAAAAAAAAHegAAAA\nAABp4C9QAAAB98AIHvj4AHgEAP---+AA----4AD----gAH---------+D-------\n---AAA----------w9KR+nwAQOBAAAgAEAABcDoAAAAAAAAAAAAAAAAAAAAAAAAA\nAAD----4EIr0AAAAAAAAAAAAAF6gAAAAAAH5eD7QAAABb0AQAf38AAACAP6qqrAA\n-qqqsAD+qqqwAH---------+D----------AAA----------w5KT6hwAQAAgAAgA\nEAABAAIAAAAAAAH-----wAAAAD-----4AAH-w--8AwvUAAAAAAAAAAAAAH2gAAAA\nAAKprC3QAAQB3cAQAf--AAACAMVVVVAYxVVVUBjFVVVQGGAAAAAAAAAGDAAAAAAA\nAADAAAwAAAAAAAAAw5KXyRwATAAQABAACAACAAEAAAAAAAMAAAAAYAAAAEAAAAAM\nAAP8A--8PAu0AAAAAAAAAAAAAFugAAAAD-3Z3jvQAAIBe0AgAf--gAABAIaqqrA4\nhqqqsDiGqqqwOGAAAAAAAAAGDAAABAAAAADAAAwAAABAAAAAw5yfyJwAUAAQABAA\nCAACgAUAAAAAAAbgAAAAIAAAAJwAAAAEAAPAA--+wAt0AAAAAAAAAAAAAHegAAD-\n8A6pqi9QABEB98BI4P+EgAA4gIVVVV-4hVfVX-iFV9Vf+GAAAAAAAAAGDAPOBAAA\nAADAAAwAAABA4AAAw5KfSFwAIAAIACAABAAEAACAAAAAAAXwAAAAEAAAALYAAAAC\nAAcAA---AAr0AAAAAAAAAAAAAF6gAf8AAA95dz7QAQkBb0BZMHczQABMgAaqqr-4\nBvq+v-gG+r6-+GAAAAAAAAAGDAwzggAAAADAAAwAAACDh4AAw5K+SFwAIAAIACAA\nBAAFAAKAAAAAAA-xxwAAEAAAAOo44AACAAwAA--+AAvUAAAAAAAAAAAAAH2gVQAA\nAA6pqy3QAySB3cC5MA9MwAAMQAVVVV-4BVdVX-gFV1Vf+GAAAAAAAAAGDBAMwAAA\nAADAAAwAAAAGGf8Aw5L8SlwAQAAIAEAAAgAIAABAAAAAB--4xggAGAAAANUYwQAD\nAAAAAf-4AAu0AAAAAAAAAAAAAFug-wAAAA3Z3bvQHRSBe0CZMA9dwAAYQAaqqr-4\nBuq+v-gG6r6-+GAAAAAAAAAGDAACIwAAAADAAAwAAAGIYSEAw9z-MbwAQAAIAEAA\nAgAIAABAAAAABAAIqhRyCAAAAOsVQo5BAAAAAP-wAAt0AAAAAAAAAAAAAHevVQAA\nAA6pqq9QFVSB98EZMA9d4AAwIAVVVVA4BVfVUDgFV9VQOGAAAAAAAAAGDAADEQAA\nAADAAAwAAAEQgRkAwcHwADgAQAAIAIAAAQASAAEgAAAABMg4kiIiCAAAANUSRERB\nAAAAAf-gAAr0AAAAAAAAAAAAAF6vVQAAAA95d77QFVSBb0EZMA8zOABkIAaqqrAY\nBvq6sBgG+rqwGGAAAAAAAAAGDAAAiQAAAADAAAwAAAEhgRkAwcPgADgAQAAQAIAA\nAQAQAAAgAAAABBVokiIiCAAAAOsSRERBAAAAA--AAAvUAAAAAAAAAAAAAH2vVQAA\nAA6pqq3QFVSB3cE84AaIOAB8IAVVVVAABVVXUAAFVVdQAGAAAAAAAAAGDAAASQAA\nAADAAAwAAAEiAQEAwefAAHgAQAAQAIAAAQARAAAgAAAAAgOYgj4iCAAAANUQR8RB\nAAAAB-+AAAu0AAAAAAAAAAAAAFuvVQAAAA3Z3bvQHRSBe0IAAAYQOAAAEAaqqrAA\nBqqqsAAGqqqwAGAAAAAAAAAGDAAAaQAAAADAAAwAP+EkAQEAwO+AAHAAI4AgAIAA\nAQAQgAQgAAAAAnwYgiIiSAAAAOsQRERJAAAAD-+AAAt0AAAAAAAAAAAAAHeg-wAA\nAA6pqq9QAySB98IAAAIoEAAAEAf---AAB---8AAH---wAGAAAAAAAAAGDAAAKQAA\nAADAAAwAICEoAQEAwP8AAPAAHuDAAH88-gAPYBvAAAAAD4AogiIjiAAAANUQRERx\nAAAAH-+AAAr0AAAAAAAAAAAAAF6gVQAAAA95dz7QAQkBb0IAAAEOYAAAEAABwAAA\nAAHAAAAAAcAAAGAAAAAAAAAGDAAAP+AAAADAAAwAIz-oAgIAwH4AAeAABJ8AAAJC\nQAAAX+gAAAAADABIgiJwCAAAAOsQRE4BAAAAP++AAAvUAAAAAAAAAAAAAH2gAf8A\nAA6pqy3QABEB3cQACADPgAAACAAD4AAAAAPgAAAAA+AAAGAAAAAAAAAGDAAA8DgA\nAADAAAwAI-I4A-4AwDwAA8AABJAAAAJCQAAASEgAAAAAD-+IgicAOAAAANUQROAH\nAAAAf88AAAu0AAAAAAAAAAAAAFugAAD-8A3Z3jvQAAIBe0QABAB-AAAACAAGMAAA\nAAYwAAAABjAAAGAAAAAAAAAGDAABAAwAAADAAAwAIwBMAAAAwB8AD4AABJAAAAJC\nQAAASEgAAAAACAAIgnAB4AAAAOsQTgA8AAAA-48AAAt0AAAAAAAAAAAAAHegAAAA\nD-6pqi9QAAQB98QABADqgAAACAAMGAAAAAwYAAAADBgAAGAAAAAAAAAGDAAGAAIA\nAADAAAwAJgACAAAAwA-gfwAABH2AAB5CeAADyE8AAAAADAAIhwAOAAAAANUQ4AHA\nAAAB-w0AAAr0eDwAAAGAAAecAF6gAAAAAAN5dD7QAAABb0TgCAH-wAAByAAYDAAA\nABgMAAAAGAwAAGAAAAAAAAAGDAAIAAEAAADAAAwAKAABAAAAwAf--gAACINgAGQk\nJgAMJJDAAAAABAB5wADwAAAAAGs4AB4AAAAD-gHwAAvUODgAAAOAAAOcAH2gAAAA\nAAGpuC3QAAAB3cUwEAH-wAACaAAwBgAAADAGAAAAMAYAAGAAAAAAAAAGDAAQAeCA\nAADAAAwAUAAAgAAAwAH-+AAAEACQAIAYAQAQAwAgAAAABAHIAA8AAAAAATUAAeAA\nAAAAAAP4AAu0OHgAAAOAAAMAAFugAAAAAAB54DvQB-wBe0UwEAP-4AAAaABgAwAA\nAGADAAAAYAMAAGAAAAAAAAAGDDgxgjDAAADAAAw4cAACwAAAwAA-wAAAH--wAP--\n-wAf---gAAAABB7IAfgAAAAAA5sAPwAAAAAAAAAIAAt0fPH32AXDnB94PHegAAAA\nAAAfgC9QCAIB98TwIAP-4AAByADAAYAAAMABgAAAwAGAAGAAAAAAAAAGDEQjwhhD\n8ADAAAxEIAAAw-AAwAAAAAAAAAAAAAAAAAAAAAAAAAAABPBoDwgAAAAAAs0B4QAA\nAAAAAAAAAAr0XXO5+AnHnGc47l6gAAAAAAAAAD7QE-kBb0QwIAP-4AAAaAGAAMAA\nAYAAwAABgADAAGAAAAAAAAAGDIZiYsgkCADAAAyGYAAAJAgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAABwA4OIgAAAAABmcHEQAAAAA-----4AvUXnM5wAnDnOY5zn2f----\n-----+3QFAcB3cUwIAP-4AACaAMAAGAAAwAAYAADAABgAGAAAAAAAAAGDQJkIsgk\nBADAAA0CcAAAJAQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYxIgAAAAABDIYkQAA\nAAA-----4Au0XmMxgB-jGc4xzlvVVVVVVVVVVVvQFAUBe0TgMAX-0AAByAYAADAA\nBgAAMAAGAAAwAGAAAAAAAAAGDQFE4QgUBgDAAA0BQAAAFAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAPBIgAAAAADBngkQAAAAA-----4At0jOHjgCDnOc5xznd-----\n------dQFAcB98QAHBw8EAAACAwAABgADAAAGAAMAAAYAGAAAAAAAAAGDQHE0QgY\nAgDAAA0AwAAAGAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAACAwAkQAA\nAAAAAAAAAAr0iOGDgGDned993F7u7u7u7u7u7u7QFAUBb0QAD-wAkAAACBgAAAwA\nGAAADAAYAAAMAGAAAAAAAAAGDQHCFNAIAgDAAA0AwAAACAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABIgAAAAAGAYAkQAAAAAwGCDMAAvVyfHDgPPzvOZw8H3d3d3d\n3d3d3d3QFAcB3cIAA-QJUAAAEHAAAAcAcAAABwBwAAAHAGAAAAAAAAAGDQCDNHAJ\nggDAAA0AgAAAKAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAAEAYAkQAA\nABA4OHDMAgu0AAbgAAAAAAAAAFu7u7u7u7u7u7vQFAUBe0IAAAQVUAAAEGAAAAMA\nYAAAAwBgAAADAGAAAAAAAAAGDR6B5gAFQgDAAA0AgAAAFAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABIgAAAAAMAYAkQAAABA8eHDMAgt0AAxwAAAAAAAAAHd3d3d3\nd3d3d3dQFAcB98IAAAJUoAAAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDTMAAgAC\nYgDAAA0AgAAADAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAAIAQAkQAA\nAHw++NjMD4r0AA5wAAAAAAAAAF7----------+7QFAUBb0EHAALoIAAEIAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDTGEAgABIgDAAA0AgAAADAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABIgAAAAAIAwAkQAAADg32NjMBwvUAAfgAAAAAAAAAH3AAAAA\nAAAAAB3QFAcB3cEMgAHgwAAMIAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDQ2CAQED\nIgDAAA0AgAAABAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNIgAAAAAMAimkQAA\nACgzmfzMBQu0AAAAAAAAAAAAAFuf---------9vQFAUBe0EOgAD-wAAcIAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDYPCAYMBYgDAAA2AwAAABAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAADJIgAAAAAEBhkkQAAAEQxGfzMCIt0AAAAAAAAAAAAAHegAAAA\nAAAAAC9QFAcB98CHAADhwAAsQAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDIBBAIIA\nggDAAAyAQAAABAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpIgAAAAAGDC0kQAA\nAAAwG4bP4Ar0AAAAAAAAAAAAAF6gAAAAAAAAAD7QFAUBb0CLgADhwABMQAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDIBBgIICAgDAAAyAQAAAAgIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAO5IgAAAAADOHckQAAAAAwGwbP4AvUAAAAAAAAAAAAAH2gAAAA\nAAAAAC3QFAcB3cBJgADhwAB+gAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDIDAhwYC\nBgDAAAyAwAAABgIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5IhgAAAAB4A8kQwA\nAAAAAAAAAAu0AAAAAAAAAAAAAFugAAAAAAAAADvQFAUBe0BHAADhwAAMgAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDECgwAQCBADAAAxAoAAABgQAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAtIvAAAAAAAAWkXgAAAAAAAAAAAt0AAAAAAAAAAAAAHegAAAA\nAAAAAC9QFAcB98AgAADh-AABAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDEGgYAwF\nDADAAAxBoAAABQQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3I2YAAAAAAD7kbMA\nAAA-----4Ar0AAAAAAAAAAAAAF6gAAAAAAAAAD7QFAUBb0AQAAH90gACAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDGIQMBgE+ADAAAxiEAAABPgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAHDJ4IAAAAAADhk8EAAAA-----4AvUAAAAAAAAAAAAAH2gOqv4\nAAAAAC3QFAcB3cAQD4LqoXwCAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDDwYHHAI\nAADAAAw8GAAACAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDJoAAAAAAACBk0AA\nAAA-----4Au0AAAAAAAAAAAAAFugRVQIAAAAADvQFAUBe0AIDYJRAWAEAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAMB8AQAADAAAwADAAAF-gAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABLwAAAAAAAAAl4AAAAAAAAAAAAt0AAAAAAAAAAAAAHeghVQP\n---wwC9QFAcB98AEAYIBAXgIAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAGAAAg\nAADAAAwABgAAKAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAAAAAAAAlgAA\nAAAAAAAAAAr0AAAAAAAAAAAAAF6ghVQIAADLID7QFAUBb0ACAwEBggwQAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAABgADAAADAAAwAAYAAyMgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABqgAAAAAAAAA1QAAAAAAAAAAAAvUAAAAAAAAAAAAAH2hBVQI\nAADEEC3QFAcB3cABBgCCfAwgAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAYAMA\nAADAAAwAAGADCMgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8gAAAAAAAAAeQAA\nAAAAAAAAAAu0AAAAAAAAAAAAAFuhjVUYAADACDvQFAUBe0AAhgB+AExAAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAAGBwAAADAAAwAABgcCAgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAYAAAAAAAAAAMAAAAAAAAAAAAAt0AAAAAAAAAAAAAHehBVQI\nAADeKC9QFAcB98AARgAZADiAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAF+wA\nAADAAAwAABfsCAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAAAAAAAF6hVVav---k0D7QFAUBb0AAMAAYAAMAAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAAEAQAAADAAAwAABAECAgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAH2ghVQI\nAADLIC3QFAcB3cAACAAeAAQAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAEAQA\nAADAAAwAABAEEBAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAuz-------------9ugrVVf---wwDvQFAUBe0AABgAbABgAAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAAIAIAAADAAAwAACACH-AAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt6qqqqqqqqqqqqqregVVao\nAAAAAC9QFAcB98AAAYAbAGAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAIAMA\nAADAAAwAACADAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAArv-------------+6gOqv4AAAAAD7QFAUBb0AAAHAOA4AAAAAAAAAA\nAAAAAAAAAAAAAH---------+D----------AAA----------wAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvd3d3d3d3d3d3d3d2gAAAA\nAAAAAC3QFAcB3cAAAA4AHAAAAAAAAAAAAAAAAAAAAAAAAH---------+D-------\n---AAA----------wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu7u7u7u7u7u7u7u7ugAAAAAAAAADvQFAUBe0AAAAH-4AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3d3d3d3d3d3d3d3egAAAA\nAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAru7u7u7u7u7u7u7u6gAAAAAAAAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf-------------92gAAAA\nAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu4AAAAAAAAAAAAADugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz-------------5ef----\n-----+9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAAAAAAAH7VVVVVVVVVVV7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF3-----\n------3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAAAOAAAAHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAAARgAAAFd3d3d3\nd3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAAgQAAAH7u7u7u7u7u7u7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAABBQAAAF3d3d3d\n3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAACCgAAAHu-----------vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAACEAAAAFdAAAAA\nAAAAABdQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAMEAAAAH6f---------97QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAeAwIAAAAF2gAAAA\nAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAhjAEAAAAHugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAABAUACAAAAFegAAAA\n+AAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAABAcBhAAAAH6gAAAD-gAAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAACcABhAAAAF2gAAAP\n-4AAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAACiAAAgAAAHuv---------7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAADBgAAQAAAFetSAgA\nQACAla9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAQwAQAAAH6qoiIQAQIiKr7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAQwAIAAAF2v----\n-----63QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAIAAIAAAHuhwAAAAAAADDvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAIAGEAAAFegMP4H\n-wP4cC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAIAPEAADH6gDn+P-4-zgD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAEAPEAAEl2gAY-P\n-5+MAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAACAHIAAEnugAHPH-x5wADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAABgAyAAElegAAxj\n-jGAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAeAhgAEn6gAAOB-A4AAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAABxAQAIl2gAABp\nJLAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAAAOAIAInugAAD---gAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0D-----4CAAEAJFegAACk\ngSgAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0EAAAAAECAACAJH6gAADQAFgAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUF-----0CAADARF2gAACk\nESgAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FVVVVVUBAABgRHugAAD---gAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0F--v-60BAABgRFegAAAA\nAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FQBUANUBAABwRH6gAAAAAAAAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFwBsAK0BAABwRF2f----\n-----+3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FQBUANUBAAAwRHvVVVVVVVVVVVvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0Fz---q0BAAA4SFd-----\n------dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FT---tUBAAA8iH7u7u7u7u7u7u7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFzAABq0AgAAciF3d3d3d\n3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FTAABtUAgAAeiHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0F-AABq0AgAAOiFd3d3d3\nd3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FXAABtUAgBAPCH7----------+7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAAB60AgBAHCF3AAAAA\nAAAAAB3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FXAAB1UAgghHkHuf---------9vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0FrAABq0AQghDkFegAAAA\nAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FXAAB1UAQggh0H6vgAAAAAAAD77QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAABq0AQgQg0F2v8AAA\n+AAAf63QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FXAAB1UAQgQgUHuv-gAD-gAD-7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0FrAABq0AQwQgIFev-8AP\n-4Af-69QE-sB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FXAAB1UAQwQQIH6j--j---j--j7QCVYBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFr---q0AQoIQIF2sf-8A\nQAf-8a3QB-wB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FX---1UARIIQIHuqj--gAD--irvQAAABe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0Fqqqqq0AREIQEFev8f-8\ncf-8f69QAAAB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0F-----0ARCEQEH6hwD--j--gDD7QAAABb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUEAAAAAEARCEIEF2gMMf-\n--8YcC3QAAAB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0D-----4ARBEIEHugDnj---jzgDvQAQgBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0ACAAAIAARBEIEFegAYj-\n--iMAC9QAyQB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0ABAAAQAARCCIEH6gAEf---8QAD7QHRQBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUH-----8AhEGEEF2gAD--\nj--gAC3QFVQB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0EAAAAAEAhIKEIHugAf-8cf-8ADvQFVQBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0EgggggkBBQRCwFegD--h\nJD--gC9QFVQB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0EAAAAAECCVRBAH6gf-8f-8f-8D7QHRQBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUEEEEEEEECPhBAF2j--ik\ngSj--i3QAyQB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0EAAAAAEFKABVAHuv-8DQAFgf-7vQAQgBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0H-----8D8AA+AFev-gCk\nESgD-69QAAAB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0B8AAAHwAAAAAAH6v8AD---gAf77QAAABb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF2vgAAA\nAAAAD63QAAAB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAAAAAAAAHugAAAAAAAAADvQAAABe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz-------------9ef----\n-----+9P----98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAArqqqqqqqqqqqqqqq7VVVVVVVVVVV7lVVVV70AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf-------------93-----\n------3f----3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3d3d3d3d3d3d3d3d3d3d3\nd3d3d3d3d3d3d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvd3d3d3d3d3d3d3d3d3d3d\n3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAn----------------------------------0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAP----------------------------------wAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAHAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH---wK6urq6urq6uA8\nAHgA8AHgD-gAAGAAAADAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAgOcBAB+APiABA\nAAAAAAAAAAAAD--AAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAMAABQVVVVVVVVVVUD-Af4D-Ac4EAQAAZgAAAC+AAAA-8AAAAA-\n8AAAB9AAP---------+gRiBAD-AQVAGwAAAAAAAAAAAAP--wAAPgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABwKqqqqqqqqqqH5\ngnkGfg88IAIABgYAAAEB8AAAgD-wAP-AEAAA+AgAQAAAAAAAAABAhhDgH-gTJ-4M\nAAAAAAAAAAAAfwP4AAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAB----AA8AABQVVVVVVVVVVUJ5xnmOeR-+IiIAGAGAAAIAD4AAgAAwAMAA\nEAAfAAQAQAAAAAAAAABj+f1QP-wQBAAEAAAAAAAAAAAA+AB8AAMwAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB----ABUAABwOrr+urq6urqJ-\nx-+P+R-+JVIAYABgAAQAAGAAgAAwAMAAEABgAAIAQAAAAAAAAABAhhJIf-4TJ-4M\nAAAAAAAAAAAB4EAeAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAABgAADAD8AABQVVWDVVVVVVUP-x-+P-xPyJVIBgAAYAAQAAGABAAAwAMAA\nCABgAAEAQAAAAAAAAABgRiJI0bMYdgGwAAAAAAAAAAADwKA-AAIwAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEI3YABoRuzADgAABwKqsBuqqqqqqP-\nx-+P-xPyJVIGAAAGAAgAAOABAABQAOAACABQAAEAQAAAAAAAAABAOcJIu1UP7ABA\nAAAAAAAAAAAHgBB-gAIwAAYAAAAAAAAAAAAAAAAAAAAAAAAB-4AAAAAAAAA-8AAA\nAAEVEUABoqIrACuqlJQVVUAxVVVVVUP+R-+J-x-+JVIYAAABgBAAAaABAABQAKAA\nCAB4AACAQAAAAAAAAABgAAGwu1UAAAAAAAAAAAAAAAAHAED7g---------------\n-----AAAAAAAAAAeqvgAAAAAAAPVXwAAAAEcmYABo5MzADkq1RwK+oAg6urq6uOe\nRnmJ5x-+JVIeAAAGgCAAAyABAABwAOAACAB0AABAQHVX8AAAAABAAAGw21MAAAAA\nAAAAAAAAAAAPAhHzwAJwAAXAAAAAAYAAAAAAbAAAAAAAAABwEBYAAAAAAA4CAsAA\nAAEUUUABooorACk6thQVZ4AA1VVVVUGfgnkH5g88JVIbgAAdgEAAAqACAABQAOAA\nBAB+AAAgQIqoEAAAAABgAAJI21cAAAAAAAAAAAAAAAAOCSPhwAPgAAQ4AAAEAYAA\nAAAAbAAAAAAAAAGqqquAAAAAADVVVXAAAAHVnUABurOrADkqlRwKgYAA6qqqqqD-\nAf4D-Ac4JVIf4ABqgMAABGACAACQAPAABAB+AAAwQQqoH---4YBAAAJIu7cAAAAA\nAAAAAAAAAAAOEgfBwAPgAAQHAAAEAYAAAAAAbAAAAAAAAAZERERgAAAAAMiIiIwA\nAAAAAAABgAADACkqlJQVAQAAFVVVVUA8AHgA8AHgIRIe+AHVgL4ACqACAADQALAA\nBABtAAfQQQqoEAABlkBgAAJIf-4AAAAAAAAAAAAAAAAeKA+B4APAAAQA4AAEAYAA\nAAAAbAAAAAAAAAqqqqqwAAAAAVVVVVYAAAAAAAAB----ADgAABwPAQAADqqurqAA\nAAAAAAAAIAYf-gaqgN3wESAH-gCwANAH-gB-gPuwQgqoEAABiCBAAAFQP-wAAAAA\nAAAAAAAAAAAcAB8A4AfAAAQAIAAEAYAAAAAAbAAAAAAAABAQEBAYAAAAAgICAgMA\nAAAAAAAAAAAAACgLuBQWAAAABVVVVUAAAAAAAAAAGAwbu51VgKqvqqAG7-+QAP-7\nqgB-31VwQxqqMAABgBBgAADgH-gAAAAAAAAAAAAAAAAcV--44---------------\n-----AAAAAAAACqqqqqsAAAABVVVVVWAAB---+AD---8ADgKEBwKAAAABr6r6qAA\nAAAAAAAACBgf-+qqgP--ZGAFVVWQAPVVVgBberqwQgqoEAABvFBAAABAD-AAAAAA\nAAAAAAAAAAAcLHwI4D8AAAQAIAAEAYAAAAAAbAAAAAAAAERERERGAAAACIiIiIjA\nABAAACACAAAEACgLEBQWAAABBcNcHUAAAAAAAAAABDAe7tVVgKqqqqAHu7vQAL7u\n7gB-1VVQQqqtX---yaBgAABAB+AAAAAAAAAAAAAAAAAcVPgI4H8AAAQAIAAEAYAA\nAAAAbAAAAAAAAKqqqqqrAAAAFVVVVVVgABAAACACAAAEADgqEBwMAAABCwCwBuAA\nAAAAAAAABDAf-+qqgN3d8SAFVVWwANVVVgB-66uwQQqoEAABlkBAAAAAAAAAAAAA\nAAAAAAAAAAAcLfAI4PkAAAQAIAAEAYAAAAAAbAAAAAAAARAQEBAQgAAAIgICAgIQ\nABAAACACAAEkACgTkBQUAAAD9gBgA0AAAAAAAAAABDAbu9VVgKqqqqAG7u6QAPq6\nugB21VVwQVqqv---4YBgAAAAAAAAAAAAAAAAAAAAAAAcV--44eEAAAQAIAAEAYAA\nAAAAbAAAAAAAAaqqqqqqgAAANVVVVVVQABAABiACAADEADgAABwMCBACqgAgAqAA\nAAAAAAAACBgf-+qqgP--5GAFVVWgAHVVVgB-+rqwQKqtUAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAeB8AB4cHAAAQAIAAEAYAAAAAAbAAAAAAAAkREREREQAAASIiIiIiI\nABfwBiDC-gDEGCgAABQWMBAFVBBAAUAAAAAAAAAAGAwe7tVVgKqqqqAHu7vgAH7u\n7gB-1VVQQHVX8AAAAABgAAAAAAAAAAAAAAAAAAAAAAAOD4ABw---------------\n-----AAAAAAAAqqqqqqqwAAAVVVVVVVYABAAACOCAAEkcP----8L0BgLqBAAAaAA\nAAAAAAAAD-gf-+qqgN3d8SAFVVWgAFVVVgBt66uwQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAOHwABw4-4AHwAIAAEAYAAAAAAbAAAAAAABBAQEBAQIAAAggICAgIE\nABfwAC4C-gAFwKAAAAUVUBR1+BAAAUAAAAAAAAAAAiAbu9VVgKqqqsAG7u6gAHur\nqgA-1VVwQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAPPgADwx-4APwAIAAEAYAA\nAAAAbAAAAAAABqqqqqqqoAAA1VVVVVVUADAAADgGAAAHAK3uwAUKqCurCCgAAKAA\nAAAAAAAAAiAf-+qqgP--5IAFVVWgAHVVVgAberqwQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAHfAADgxycAfwAIAAEAYAAAAAAbAAAAAAADEREREREUAABiIiIiIiK\nADfwACAG-gAEAKHgAAUVVFVUCCgAAMAAAAAAAAAAAiAe7tVVgKqqqwAHu7vAAD7u\n7gAP1VVQQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAH+AAHgxiMAfgAIAB8AYAA\nAAAAbAAAAAAACqqqqqqqsAABVVVVVVVWABAAACACAAAEAKAAAAUOq66oBEQAAOAA\nAAAAAAAAAiAH-+quAN3d8gAFVVXAADVVVgAH66uwQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAD8AAPAxiMAPAAIADMAYAAAAAAbAAAAAAACBAQEBAQGAABAgICAgIC\nAB---+AD---8AKAAAAUVVVVYAEQAAMAAAAAAAAAAAiABu9VYAOqqqgAG7u7AADq6\nugAG1VVwQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAB4AAeA---------------\n-----AAAAAAACqqqqqqqqfABVVVVVVVWAAQAAIAAgAAQAL----0Kqq-4AIIAAKAA\nAAAAAAAAAiAAf+rgAD--5AAFVVXAADVVVgAD+r-AP----------AAAAAAAAAAAAA\nAAAAAAAAAAAA+AB8AxiMAAAD4AGYAYAAAAAAbAAAAAAAFERERERETgACiIiIiIiJ\nAAQAAIAAgAAQAIAAAAEVVVgIAIoAAMAAAAAAAAAAAiAAHtWAAAH6qAAH-7uAAB7v\n-gAB1fgAKqqqqqqqqqqgAAAAAAAAAAAAAAAAAAAAAAAAfwP4AYyMAAAH4ADwAYAA\nAAAAbAAAAAAAGqqqqqqqqAADVVVVVVVVAAf--4AA---wAIAAAAEK6vAEAIoABqAA\nAAAAAAAAAiAAB+4AAAAP8AAAAf+AAB-4AAAA-wAAf----------gAAAAAAAAAAAA\nAAAAAAAAAAAAP--wAYSYAAAP4AAAAYAAAAAAbAAAAAAAEBAQEBA8EAACAgICAgID\nAAAAAAAAAAAAAH----4VVWACAJIAAUAAAAAAAAAAAiAAAdgAAAAAYAAAAAAAAAAA\nAAAAYAAAd3d3d3d3d3dgAAAAAAAAAAAAAAAAAAAAAAAAD--AAMCYAAAPwAAAAYAA\nAAAAbAAAAAAAGqqqqqrDoAADVVVVVVVVAAAAAAAAAAAAADAAAAwKqsAAAEQCAKAA\nAAAAAAAAAiAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAbu7u7u7u7u7gAAAAAAAAAAAA\nAAAAAAAAAAAAAf4AAHDwAAAHgAAAAYAAAAAAbAAAAAAAFERERESAoAACiIiIiIiJ\nAAAAAAAAAAAAAAAAAAAVVUAAADgCAMAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAXd3d3d3d3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------------\n-----AAAAAAAGqqqqvkAQAADVVVVVVVVAAAAAAAAAAAAAAAAAAAO-sAAAAACAGAA\nAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO7u7u7u7u7ugAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAD+BAQEQcAIAB-AgICAgID\nAAAAAAAAAAAAAAAAAAAVgeAQAAAFAEAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAf----------gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAEDqqqqgIAIACB1VVVVVVVAAAAAAAAAAAAAAAAAAAOABgQAAAFAGAA\nAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADhAAAAAAAAAAAAH8AAAAAAAAAAIAkRERgQAIAEASIiIiIiJ\nAAAAAAAAAAAAAAAAAAAUAAAQAAAJAEAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAP---------+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxAAAAAAAAAAAAM\neAAAAAAAAAAAASqqrAgAAAAAJVVVVVVWAAAAAAAAAAAAAAAAAAAMAAAoAAAIgGAA\nAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAHxAAAAAAAAAAAAcPAAAAAAAAAAAALwQFAgAAAAAF4ICAgIC\nAAAAAAAAAAAAAAAAAAAYAAAoAAAIgEAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxAAAAAAAAAAAB-\n-wAAAAAAAAAAAMOqrAgAAAAAGHVVVVVWAAAAAAAAAAAAAAAAAAAIAABIAAAUQGAA\nAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAfAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADiAAAAAAAAAAAAeHAAAAAAAAAAAAIDERAgAAAAAEBiIiIiK\nAAAAAAAAAAAAAAAAAAAYAACIAEAUQEAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAAB-wAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAP\n+AAAAAAAAAAAAAA6rAAAAAAAAAdVVVVWAAAAAAAAAAAAAAAAAAAQAACIAEASQGAA\nAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAH-8AAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEgAAAAAAAAECAgIE\nAAAAAAAAAAAAAAAAAAAQAAEEAEAIgEAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAX---------9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAGqgAAAAAAAADVVVVUAAAAAAAAAAAAAAAAAAAQAAFEAKAHAGAA\nAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWpAQAIABAStAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQQAAAAAAAABIiIiI\nAAAAAAAAAAAAAAAAAAAQAAJCAKAAAEAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAVUREIAIERFVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAACqoAAAAAAAABVVVVYAAAAAAAAAAAAAAAAAAAIAAKCASAAEKAA\nAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX---------9AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAiAgIQ\nAAAAAAAAAAAAAAAAAAAYAAKCARAAEMAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQ4AAAAAAABhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABrAAAAAAAAAA1VVVQAAAAAAAAAAAAAAAAAAAMgAJiARAAEaAA\nAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGH8D-4H8OBAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAQAAAAAoiIig\nAAAAAAAAAAAAAAAAAAAXAAEEAigAC0AAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQBz-H-8f5wBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAD6AAAAIAAAAB9VVVAAAAAAAAAAAAAAAAAAAALAAD4AigADuAA\nAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAMfn-8-GABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGAAAAIAAAACDAgKA\nAAAAAAAAAAAAAAAAAAAVAAAAAkgADUAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQADnj-484ABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAACAAAAIAAAAAB1VUAAAAAAAAAAAAAAAAAAAALAAgAARAACqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAYx-xjAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIAAAAAAyIoA\nAAAAAAAAAAAAAAAAAAAVgAgAAOBADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAHA-gcAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAgAAAIAAAAAAVVwAAAAAAAAAAAAAAAAAAAAOgAgAAABADqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA0klgAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAIjAA\nAAAAAAAAAAAAAAAAAAAVQAgAIAGADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAB---wAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAIAAAQAAAAAAFcAAAAAAAAAAAAAAAAAAAAAKsDwAcAaAGqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABSQJQAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAgAAAAAADwAA\nAAAAAAAAAAAAAAAAAAAVXFQB3j1gFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAABoACwAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAACAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAK7+sC6+rwKuAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABSCJQAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACCAAAAAAABAAA\nAAAAAAAAAAAAAAAAAAAVVVX9VVVf1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAB---wAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADwB8AAAAAAAB4AAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAABEAA\nAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAEEAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAOrq6urq6urqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP----------AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAA\nAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAKqqqqqqqqqqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAA\nAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD58AAAAAAAAAAAAAA\nAAAAAAAAAA---1VV---8AB-+AAV1dXV1dXV1cAADAAAAAAAAAAAAAAHwAAAAA-wA\nAAf-----+AAAAACAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAfAAGPGAAAAAAAAAAAAAAAAAAAAAAAA---+7u---8ACABAAqqqqqq\nqqqqoAADAAAAAAAAAAAAAAP4AAAAHAOAAAgAAAAABAAAAACAAAAAAACgAAAAAAAA\nAAAAAAAAAAAAAAAAA-wAAAAAAhgAAAAAAAAAAAAD4AABgwAMGDA---4AB---wAD-\n--gAH---AA--3VVVX--8AF-+gAVVVVVVVVVVUAADAAAAAAAAAAAAAAI8AAAAYABg\nAAv-----9AAAAA-4AAAAAAFQAAAAAAAAAB-AAAAAAAAAAAAAHAOAAAAABSRAAAAA\nAAAfAAAMGAACAIAYmRhAAAEACAAAIAEAAAQAIAAAgA----qqv--8AL--QAqqqqqq\nqqqqoAADAAAAAAAAAAAAAAUcAAAAgAAQABf-----+gAAAH--AAAAAAKoAAAAAAAA\nAOA4AAAAAAAAAAAAZDBgAAAABUmAAAD4AABgwAAQBAAEAEAZAhhAAAEACAAAIAEA\nAAQAIAAAgA--VVVVVX-8AX--oAdXX9dXV1dXUAADAAAAAAAAAAAAAAQcAAABAAAI\nABf-----+gAAAf--wAAAAAVUAAAAAAAAAwAGAAAAAAAAAAABikiYAAAAFIoAAAMG\nAACAIAAgAgAIVCAZgxhOHDkACcOHIAE4cOQAJw4cgA--7qiIrv-8Av--0AqqsGqq\nqqqqoAf--4AAAAAAAAAAAAIOAAACAAAEABYAAAAAGgAAA---4AAAAA-+AAAAAAAA\nBAABAAAAAAAAAAACCpMEAAAACoDgAAQBAAEAEABCoQA4qjgYABhRIkUAC+RIoAFE\n+RQAKJE+gA-9VVVVVV-8Bf--6AVVYDdVVVVVUAgAAEAAAAAAAAAAAAEFgAAEAAAC\nABYAAAAAGgAAB---8AAAAAAAAAAAAAAACAAAgAAAAAAAAAAEKRQCAAAANQCAAAgA\ngAIVCABFUQBBcQQYABhRIkUAC+RIoAFE+RQAKJE+gA--6qAAAr-8C---9AqqoBiq\nqqqqoAgAAEAAAAAH-gAAAAPgQAAEAAACABZE7gAAGgAAD---+AAAAAP-AAAAAAAA\nEAAAQAAAAAAAAAAIFQHBAAAAGv-AABCoQAIqiAGLiMBc8mQMgjBRIkUAC+RIoAFE\n+RQAKJE+gA-1VVVVVVf8F---+gV9QBB1dXV1cAjDDEAAAAB6q+AAAASgIAAI+GPh\nAC5tKQAAHQAAD---+AAVUD1V8AAAAAAAIBVAIAAAAAAAAAAQagEAgAAAH--AABFU\nQARcRAIHkCBJfSQMRDBRIkUAC+RIoAFE+RQAKJE+gA-+6IAAAK-8L----QqzwABq\nqqqqoAkkkkAAAAHAQFgAAASikAAIzGMxACxtKUAADQAAH----AAaoOAgLDVAAAAA\nICqgIAAAAAAAAAAgNf+AQAAAMszAACLiIAg8ggIL6CBI-iQGOGBRIkUAC+RIoAFE\n+RQAKJE+gA-VVVVERVX8XGDGHoVAwAB1VVVVUAkkkkAAAAaqqq4AAAJSSAAIzGMx\nACxVDwAADQAAH----AAVQ1VVVxqAAAAAQFVQEAAAAAAAAABAP-+AIAAAEP-AACHk\nIBBfQQLH8aBxfRwDAMBRIkUAC+RIoAFE+RQAKJE+gA--qgAAACv8W7u67oqAgAAK\nqqqqoAkkkkAAABkRERGAAAExDAAQ+GPggCxVbgAADQAAGOHDjAAajIiIiM1AAAAH\ngK+oCAAAAAAAAABAZZmAIAAAEvnAAEL6EBI-iQLL6aCIqiIBgYBRIkUAC+RIoAFE\n+RQAKJE+gA91VVUQFVV8W-u67oeAgAAHVVdXUAkkkkAAACqqqqrAAACXigAQzGMA\ngCxFKkAADQAAEECBBAAVFVVVVWaAAAAIAV7UCAAAAAAAAACAIf+AEAAADAEAAFH8\nUBZfTQLFUaCIVCIAwwBRIkUAC+RIoAFE+RQAKJE+gA-+qAAAAAr8W-u67osAAAAC\nqqqqoAkkkkAAAEBAQEBgAAD8CQAQzGMAgFxFKwAADoAAAACAAAAaICAgIDNAA4B4\nAL9oRAAAAAAAAACAJfOAEAAAAgaAAJL6SBYqjQRCoRB0AFwARgBRIkUAC+RIoAFE\n+RQAKJE+gA-VVUREBFV8Xfu67oUAAAADX1X1UAkkkkAAAKqqqqqwAAEAEQAQzWsQ\ngFhF6QAABoAAAACAAAAUVVVVVVmAA4B44V-UJAAAAAAAAAEAGAIACAAAAkCAAJFU\nSBYVDQRgAxACAIAAZABRIkUAC+RIoAFE+RQAKJE+gA-7oAAAAAL8Xvu6HosAAACC\n4a4OoAkkkkAAAREREREYAAEf4QAQAAAAgFgAAAAABoAAAACAAAAYiIiIiIzAA4B0\ngL-oJAAAAAAAAAEABA0ACAAADz0AALCoaCMAGIOQBOABOQAALABRIkUAC+RIoAFE\n+RQAKJE+gA9VVVAAAFVcX3u6-oYAAACFgFgDcAkkkkAAAqqqqqqsAADgAQAQAAAA\ngFgAAAAABoAAAACAAAARVVVVVVZAA4B0gV-USAAAAAAAAAEB-IEACAAAEf4AQKgA\nqCKAKIAJyAByRJwAOABRIkUAC+RIoAFE+RQAKJE+gA-uiAAAAAD8X7u6-ooAAAH7\nADABoAjDDEAABEBAQEBCAACAAgAQP--AgFgAAAAABoAAAACAAAACICAgICEAAcDi\nQK+okAAAAAAAAAICJnoYBAAAMwF+gRQBRBxkxwASJAAsgmgAMABRIkUAC+RIoAFE\n+RQAKJE+gA-VVUQAAEVcX7u6-oYECAFVABABUAgAAEAABqqqqqqqAAEAHYAQAAAA\ngFgAAAAABoAAAACAAAADVVVVVVUAAcDiQFVQkAAAAAAAAAICC-w4BAAANIL-4RMm\nRAAqgAAKKAARARAAIABOHDkACcOHIAE4cOQAJw4cgA-+oAAAAAC8X7u6-osYCAKq\nACAAoAgAAEAACRERERERAAEM6uAQP--AgFgAAAAABoAAAACAAAAEiIiIiIiAAcDk\nICqhIAAAAAAAAAIElgJwBAAAMn7+gOFUOAAqgAAZTAAKAKAAAABAAAEACAAAIAEA\nAAQAIAAAgA9VVVAAABVcW7u6-oXoDAXUAAAA0A1rWsAACqqqqqqrAACDVVAQAAAA\ngFgAAAAABoAAAACAAAAFVVVVVVWAAOHEIBVCEAAAAAAAAAIEGQXgBAAAPQAUQAZT\nAADKYABggwAGAMAAAABAAAEACAAAIAEAAAQAIAAAgA-+iAAAAACsXHvG-oqoCjr8\nAAAAoAgAAEAAEEBAQEBAgABBqrgQP--AgFgAAAAABoAAAACAAAAIICAgICBAAOHE\nMAACEAAAAAAAAAIGNP3QBAAAPvhkABggwAMEGAD-f4AAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA-VVEQAAEVcL----QVUFdWEAAAAUAgAAEAAGqqqqqqqgADxVVgQAAAA\ngFgAAAAABoAAAACAAAANVVVVVVVAAOHDyAACEAAAAAAD8AIEEgA4BAAAAgRYAD-f\n4Af7-AAAAAAAAAAAAABAAAEACAAAIAEAAAQAIAAAgA-6oAAAAAA8F---+gqqKqoE\nAAAAYAgAAEAAMRERERERQAGoqqwQAAAAgFgAAAAABoAAAACAAAAYiIiIiIigAHOA\nBgAB4AAAAAABDwIEl-DcBAAAAgPAAAAAAAAAAAAAAAAAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA9VVVAAACqsC---9AdV11QCAAAAcAgAAEAAKqqqqqqqwANUVVQQAAAA\ngFgAAAAABoAAAACAAAAVVVVVVVVgAHOAAYcOAAAAAAAAgP-------AAAAh-AAAAA\nAAAAAAAAAAAAAAAAAABAAAEACAAAIAEAAAQAIAAAgA-uiAAAAAFcBf--6AqqqqwA\nAAAAYAgAAEAAIEBAQEBAQAKrCqwQAAAAgFwAAAAADoAAAACAAAAQICAgICAgAHOA\nAEiQAAAAAAAAh8AAAAAAA+AAA-MAAAAAAAAAAAAAAAAAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA-VVUQAAIqsAv--0AVVV-wAAAAAUAgjVkAAKqqqqqqqwANVhVYQAAAA\ngCwAAAAADQAAAAHAAAAVVVVVVVVmAD8AAEf4AAAAAAAAuAAQfEAAABwAAh8AAAAA\nAAAAAAAAAAAAAAAAAABADVkACAGrIAEANWQAIAasgA-+oAAAAABcAX--oAqqrAQA\nAAAAYAhWVUAAURERERERIAKrOqoQAAAAgCwAAAAADQAAAAHIAACoiIiIiIiVAD8A\nACAIAAAAAAAAwAAGxoAQAAMAAgEAAAAAAAAAAAAAAAAAAAAAAABACVUACAEqoAEA\nJVQAIASqgA9VVVQAACqsAL--QAV1eAIAAAgDUAgjVUAAaqqqqqqqoANWVVYQAAAA\ngCwAAAAADQAAAAHcAAE1VVVVVVVWgD8AACAIAAAAAAADAAAAfAAAAADAAQIAAAAA\nAAAAAAAAAAAAAAAAAABAGNUACAMaoAEAY1QAIAxqgA-+qAAAAAFcAF-+gAqqsAEA\nAAgAoAgGNUAAQEBAQEBAYAKrqqwQAAAAgC4AAAAADQAAAAH8AAKgICAgICA1QB4A\nAB+MAAAAAAAH-----------gARIAAAAAAAAAAAAAAAAAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA-VVVRAAIqsACABAAVVYAAAABgAUAgAAEAAaqqqqqqqoANVVXgQAAAA\ngC4AAAAAHQeAAAH8AAU1VVVVVVVWoB4AAAJKAAAAAAAA1VVVVVVVVVcAAhIAAAAA\nAAAAAAAAAAAAAAAAAAA---4AB---wAD---gAH---AA--qoAAAABcAB-+AAqqoAAA\nADAAYAf--4AAURERERERIAH--8Af----gBYAAAAAGhjAAAD4ABqoiIiIiIiVYB4A\nAAH0AAAAAAAAPqqqqqqqqvwADCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-1VVUAACqsAAAAAAd-YAAAIDAAMAAAAAAAaqqqqqqqoAAAAAAAAAAA\nABYAAAAAGmBAAAAAAA01VVVVVVVWwAAAAAAAAAAAAAAAAf9VVVVVf4AAEkgAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-+6IAAAAFcAAAAAArA8AAA\nGPACIAAAAAAAQEBAQEBAYAAAAAAAAAAAABYAAAAAGoBAAAAAAAagICAgICA1gAAA\nAAAAAAAAAAAAAAH-----gAAAEbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-dVVRIiKqsAAAAAAcADAAAFzACMAAAAAAAaqqqqqqqoAAAAAAAAAAA\nABf-----+oBAAAAAAAM1VVVVVVVXAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEgAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--oAAAAAF8AAAAAAoAAAEA\nIBgCIAAAAAAAURERERERIAAAAAAAAAAAABf-----+wBAAAAAAAGoiIiIiIiWAAAA\nAAAAAAAAAAAAAAAAAAAAAAAADCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-1VVUUAqqsAAAAAAYAAADDwBgEMAAAAAAAaqqqqqqqwAAAAAAAAAAA\nAAv-----9ABAAAAAAAC1VVVVVVVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--7IgAABH8AAAAAAwAAAA+\nABgIIAAAAAAAYEBAQEBAQAAAAAAAAAAAAAgAAAAABACAAAAAAAAwICAgICAgAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-9VVVUSqq8AAAAAAQAAAADAAwwMAAAAAAAKqqqqqqqwAAAAAAAAAAA\nAA-------ACAAAAAAAAVVVVVVVVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--+qIAAAVcAAAAAAwAAAAB\ngA3AIAAAAAAAMRERERERQAAAAAAAAAAAAAHAAAAA4AEAAAAAAAAYiIiIiIigAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--VVVVSqq8AAAAAAgAAAAAwAwAMAAAAAAAKqqqqqqqwAAAAAAAAAAA\nAAHAAAAA4AEAAAAAAAAVVVVVVVVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--7uiICJJ8AAAAAAgAAAAA\n4AYAIAAAAAAAMEBAQEBAgAAAAAAAAAAAAA-------AEAAAAAAAAYICAgICBAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-91VVVVVVcAAAAAAgAAAHDMAYAMAAAAAAAGqqqqqqqgAAAAAAAAAAA\nABAAAAAAAgEAAAAAAAANVVVVVVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---6ogiK-8AAAAAAgAAAA8\nGAYAIAAAAAAAGRERERERAAAAAAAAAAAAABAAAAAH8gIAAAAAAAAMiIiIiIiAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--dVVVVVV8AAAAAAQAAAAADAMAUAAAAAAACqqqqqqrAAAAAAAAAAAA\nACTMzMzFUQIAAAAAAAAFVVVVVVWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---u6oiK78AAAAAAwAAAAA\nBgMAYAAAAAAADEBAQEBCAAAAAAAAAAAAACAAAAASqQQAAAAAAAAGICAgICEAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--3VVVVVX8AAAAAAZAAAAAAwMA0AAAAAAABqqqqqqqAAAAAAAAAAAA\nAEmZmZmyqPgAAAAAAAADVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA----qqqr-8AAAAAAuAAAAA\nAYGBoAAAAAAAAxEREREUAAAAAAAAAAAAAEAAAAABVIAAAAAAAAARiIiIiIoAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--9VVVVVX8AAAAAAWAAAAAf8GBcAAAAAAAAaqqqqqoAAAAAAAAAAAA\nAJnMzMzB-EAAAAAAAAAo1VVVVVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA----7u7v-8AAAAAAqAAAAA\nMAGeoAAAAAAAAMBAQEBQAAAAAAAAAAAAAIAAAAAAAEAAAAAAAAA0YCAgICiAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA---dVVVV38AAAAAAWABAAAGADNUAAAAAAAAGqqqqqgAAAAAAAAAAAA\nAP-------8AAAAAAAAAqNVVVVVEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAArABAAA\nDADaoAAAAAAAADERERFAAAAAAAAAAAAAAQAAAAAAACAAAAAAAAA1GIiIiKKAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA---3VVVX-8AAAAAAdABAAABh-1UAAAAAAAABqqqquAAAAAAAAAAAAA\nAQAAAAAAACAAAAAAAAAqjVVVVcUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAAqgBAAQ\nAwyqoAAAAAAAAA5AQEYAAAAAAAAAAAAAAP-------8AAAAAAAAA1RyAgIwqAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA----3d3f-8AAAAAAVYHgA4MY1VUAAAAAAAAAOqqrgAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAqodVVXBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAAquKgDs\naMaqoAAAAAAAAAD5EeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1UHyI8GqAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-----3---8AAAAAAV39YF33+Z1cAAAAAAAAAA--gAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAA-4B--AP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAAqqqv6q\nvgOqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVwNVUAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqq\nq5+qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaoAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1dXV81XUAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqq\nqu6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVX1VUAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqq\nqr6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAccAAAAAAAAADzwAAP--\n-wAAAAB-gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIIAAAAAAAAAMMMAAwAAAMAAAAf-8AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAAfwAAAQACABAAA\nACAAAB--+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAABoLAAADgOAAAg-BACAAAABAAAD---AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEQwAAMABgABAAAgCIr6\nPBAAAP---AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAICgIAAQAAQABAzAgCIqCIhAAAf---AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBAEAAgAAIACJMkQCFKC\nIhAAB----AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAgAACABAAAEACVAqQBCLiIiAAD---+AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAKoBACAAFSAClMpQBCKC\nIiAAH---8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAVUBACAAKqACk-JQAiKCIkAAP---4AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAqqAgE44VVACkAJQASL7\nvIAAf---wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAEBX1AQEQQr7AClAJQAQAAAIAA-----8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECvagQEQRXtAClfJQAIAA\nAQAB----4DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAIhftCIEQQv3AClgJQAEAAAgAD----4EIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCv6hIEQRX9AClAJQAEAA\nAgAH-w--8AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAJBf9BIEQQv-ACUAKQACAABAAP8A--8PAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiv6iQEIhX9AEMAMIABAA\nCAAPAA--+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAACRX1EgEFAr7AIKAUEABAACAAcAA---AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQqqEgCCAVWAIJMkEAAgA\nEAAwAA--+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABIVUJACAAKqAERSiIAAQAIAAgAAf-4AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEKoQgBAAFUADhShwAAQA\nIAAAAAP-wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAACEAAQgAgAAIAABSgAAAIAQAAAAAf-gAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAQgAQAAQAABSgAAAEA\ngAAAAA--AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAB4AAPAAMABgAACSQAAAEAgAAAAB-+AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDhwAACAOAAAChQAAACB\nAAAAAD-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAkSAAABDwAAAChQAAABCAAAAAH-+AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAkgAAAChQAAAA8\nAAAAAP++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAkSAAAAkgAAAChQAAAAAAAAAAf88AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAn2AAA8hPAAAAA\nAAAAA-48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAABChAAAAoNgADChQwAAAAAAAAB-w0AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAgAABACQAMASAMAAAA\nAAAAD-gHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAB+-AAAD-+wAP-z-8AAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA-----4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-----4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA-----4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAwGCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4OHDMAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA8eHDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA++NjMAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA32NjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzmfzMAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAxGfzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwG4bP4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAwGwbP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-----4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA-----4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-----4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAA.\n_>:LCpA1BCnA3CCxA9BC5BDBC-BLBDLBTCDRBZBDZBhBDpBnBD\ntBtCD-B3BEJB7BERCBBEPCHCEbCLBEpCXBEzCdBE5CjCFHClBFLCrBFdCzBFpC5C\nFxC9BFxDBBGBDJBGPDNCGVDTBGZDVBGZDXBGZDXCGZDXBGZDX<BGZDHBGJDR>XCr\nDLBCvDLCC3DHBDHCzCDRCnBDfCXBDtCNCD7CDBEBB7BELBzBEdBjCEpBdBE5BZBF\nJBVBFRBRCFhBNBFhBNBFtBJBFxBHCF5BFBF-BDBGBBDBGHBD<CGZBDBGpBR.>:MA\nvDBBAvDBBA1C-CA9C9BBFC7BBHC7CBHC7BBHC7BBHC9BBHC9CBHDBBBHDBBBHDBB\nBHDBCBHDBBBRDBBBlDBBBxDBCB-DBBCHDFBCHDJBCPDPCCTDVBCXDbBCfDlCCnDz\nBCrD5BCvD9BCtEFCCtEJBChERBCbEVCCPEZBCNEdBBvEfBBnEhCBnEhBBnEfBBnE\ndBBPEZCBHEVBBDERBA1ENCAtEHBAlEDBAhEBBAbD7CAVD3BALDtBAHDnCAHDhBAH\nDbBAHDRBAHDPCAHDNBANDLBAPDHBAVDBCAVC9BAfC5CArC3BA3C1BA3C1BA3C1CA\n3Cz<BA7C1BA7DL>1FvG3BFvG3CFvG1BFzGzBF7GxCGRGnBGbGhBGfGdBGpGXCG3G\nRBHJGBBHPF7CHPF1BHNFxBHRFnBHTFhCHTFbBHVFZBHTFVBHRFTCHPFRBHNFRBHH\nFRBHHFRCHHFRBHHFVBHDFhBHBFnCHBFtBHBFzBG-F7BG-GLCG-GRBG-GZBG9GhCG\n9GtBG7GzBG5G7BG7HBCG5HBBG5HBBG5HBBG7G7CG9GxBG-GlBG-GhBHBGdCHBGZB\nHDGVBHHGRCHLGNBHPGLBHbGJCHhGJBHlGNBHnGPCHlGTBHnGXBHnGdBHnGhCHlGl\nBHlGpBHlGvCHlG3BHnG5BHrG5BHvG5CHvG5BHzG3BH3GzBH-GrCIDGnBIHGhBIJG\ndCINGZBIPGPBIRGPBIRGPCIRGPBIRGP<BIVGPBIVGP>ZIXFtBIXFtBIRFpCINFpB\nIPFrBIPFtBINFxCINF1BILF5BINF7BIPF9CITF9BIXF7BIbF5BIdF3CIdF3BIdFx\nBIbFvCIbFvBIbFvBIbFv<BIdFtCIfFp>kIrGRCIvGPBJBF9BJJF3BJLFxCJNFtBJ\nRFnBJTFhCJTFhBJTFhBJRFlBJLFrCJBF5BI-F-BI7GDBI5GJCIzGVBIxGbBItGhC\nIrGpBIpGxBIrG1CItG5BIrG7BIxG7CJFGzBJPGtBJRGpBJbGjCJtGTBJ3GJBJ9GB\nCKDF5BKJFnBKJFfBKJFbCKHFZBKHFZBKFFZBKBFfCJ9FlBJ3F1BJ1F9CJzGFBJxG\nLBJrGTBJnGhCJlGnBJjGrBJhGxCJhG1BJhG5BJfG5BJfG5CJhGzBJjGtBJlGlBJn\nGhCJtGXBJxGTBJ3GNCJ7GLBKFGLBKJGNBKLGPCKLGRBKLGVBKJGZBKDGnCKDGtBK\nDGzBKBG9CKDG-BKBHBBKDG-BKHG7CKPG1BKZGpBKhGjCKlGdBKpGZBKtGNBKrGJC\nKnGJBKjGJBKfGJBKbGNCKTGVBKTGZBKTGfCKTGlBKTGtBKZGxBKdGzCKjG3BKjG5\nBKtG1BK7GtCK-GnBLJGhCLLGVBLRGPBLTGJBLTGFCLTGFBLTGFBLTGFBLRGJCLNG\nRBLNGVBLNGZBLNGZCLNGZBLNGZBLRGbBLTGdCLbGdBLjGdBLrGdCLpGfBLrGfBLr\nGfCLrGfBLpGhBLlGjBLjGnCLjGpBLhGrBLdGxBLfG1CLhG3BLjG5BLjG5CL1G5BL\n-G3BMDGzCMLGxBMTGtBMbGnBMbGjCMZGfBMZGZBMVGXBMPGVCMLGZBMHGdBMDGhC\nMBGnBL-GxBMBG5BMFG9CMLG-BMLHBBMPHBCMjG5BMxGzBM7GpBM9GhCNJGNBNJGL\nBNJGLBNJGLCNJGLBNHGD<BNHGBBNFGB>hIrFpBItFrBIzFtBI7FxCI7FzBJBF1BJ\nHF3CJNF5BJLF7BJJF9CJLF9BJNF9BJRF-BJTF-CJXGBBJZGBBJbGBCJbGBBJbGBB\nJbGBBJbGBCJbGBBJbGBBJbGBBJbGBCJbGB<BJhF9BJhF9\n--mail.sleepy.sau.135.1476\n\n\n\nThats all for now.\n--mail.sleepy.sau.135.1476--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.31.msg",
    "content": "X-Andrew-WideReply: netnews.comp.sys.next.misc\nX-Andrew-Authenticated-as: 0;thumper.bellcore.com;Network-Mail\nReceived: via nntppoll with nntp; Sun,  3 May 1992 20:23:55 -0400 (EDT)\nNewsgroups: comp.sys.next.misc\nPath: thumper.bellcore.com!walter!att!linac!uwm.edu!rpi!usenet.coe.montana.edu!news.u.washington.edu!news\nFrom: Mark Crispin <mrc@Tomobiki-Cho.CAC.Washington.EDU>\nSubject: what's the use\nContent-Type: TEXT/PLAIN; charset=ISO-2022-JP\nMessage-ID: <MS-C.704934477.377401575.mrc@Tomobiki-Cho.CAC.Washington.EDU>\nSender: news@u.washington.edu (USENET News System)\nOrganization: University of Washington\nMime-Version: 1.0\nDate: Sun, 3 May 1992 23:07:57 GMT\n\nOnce again, Scott Turner drops another clueless and mendacious tirade.  It's\nobvious he hasn't made more than a cursory glimpse of the MIME document.  It's\nequally obvious he knows nothing about the specifications of Internet mail as\ndescribed in RFC-821 and RFC-822 [those *are* standards, even NeXT uses them].\nHowever, it doesn't stop him from making any number of absurd, false, and\ndownright foolish statements.\n\nHe's just as clueless about the meaning of the Japanese word `gaijin', yet\nthat too doesn't stop him from making a racist assumption of its meaning and\nproceeding on that.  この糞っ垂れ\n\nWhen challenged to put his code where his big mouth is, all he does is go on\nabout how he is `too busy making $$$' and `does not have enough time' to do\nso.  In other words, the standard retreat of the nasty little net.geek who\nprobably is in Programming I.\n\nIt's not worth it.  If anyone believes what Turner has to say, then PT Barnum\nwas right about what was born every minute.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.32.msg",
    "content": "X-Andrew-Authenticated-As: 0;bambam.galaxy;The Root of All Evil\nReturn-Path: <hammer>\nReceived: from greenbush.bellcore.com by bambam.bellcore.com (4.1/4.7)\n\tid <AA09071> for andrew; Wed, 3 Jun 92 13:20:09 EDT\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA01104> for andrew@bambam; Wed, 3 Jun 92 13:20:07 EDT\nReceived: from savage.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA29426> for andrew@greenbush; Wed, 3 Jun 92 13:19:59 EDT\nReceived: by savage.bellcore.com (4.1/4.7)\n\tid <AA00616> for localmsgs@thumper; Wed, 3 Jun 92 13:20:02 EDT\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.savage.galaxy.sun4.41\n          via MS.5.6.savage.galaxy.sun4_41;\n          Wed,  3 Jun 1992 13:20:01 -0400 (EDT)\nMessage-Id: <8e=Dx1S0M26IE17rlY@thumper.bellcore.com>\nDate: Wed,  3 Jun 1992 13:20:01 -0400 (EDT)\nFrom: Tom Brinck <hammer>\nX-Andrew-Message-Size: 323+1\nMime-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart.Boundary.ge=Dx0m0M26IQ17rd0\"\nTo: msgs\nSubject: misdirected chinese mail\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Please read the first section, which is plain text, and ignore the rest.\n\n--Interpart.Boundary.ge=Dx0m0M26IQ17rd0\nContent-type: text/plain; charset=US-ASCII\n\nI received a magazine in Chinese in the mail (I think from Taiwan).\n\nHere is a picture of the characters that I believe represent the name of\nthe recipient.  If this is your name, come and get it in room 2A219.\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n-- Tom\n\n----------------------------------------------\nTom Brinck\nBellcore\n(201) 829-5238\nhammer@bellcore.com\n\n--Interpart.Boundary.ge=Dx0m0M26IQ17rd0\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative.Boundary.ge=Dx0m0M26II17rZy\"\n\n--Alternative.Boundary.ge=Dx0m0M26II17rZy\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\nI received a magazine in Chinese in the mail (I think from Taiwan).<nl>\n<nl>\nHere is a picture of the characters that I believe represent the name of the r=\necipient.  If this is your name, come and get it in room 2A219.<nl>\n\n--Alternative.Boundary.ge=Dx0m0M26II17rZy\nContent-type: image/x-xbm\nContent-Description: Push here to see your name\nContent-Transfer-Encoding: quoted-printable\n\n#define chinese-name_width 80\n#define chinese-name_height 20\nstatic char chinese-name_bits[] =3D {\n   0x00, 0x10, 0xa0, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xdf, 0x1f=\n,\n   0xac, 0xb8, 0x00, 0x08, 0x08, 0x20, 0x00, 0x00, 0x50, 0x00, 0xf8, 0x70=\n,\n   0x00, 0x08, 0x48, 0x20, 0x00, 0x00, 0x50, 0x08, 0xe0, 0x78, 0x00, 0x48=\n,\n   0x7f, 0x20, 0x20, 0x00, 0xd1, 0x0f, 0x18, 0x8b, 0x00, 0x7f, 0x14, 0xfe=\n,\n   0x3f, 0x00, 0x5f, 0x00, 0xf8, 0xff, 0x01, 0x08, 0x72, 0x10, 0x00, 0x00=\n,\n   0x41, 0x08, 0x04, 0x82, 0x00, 0x08, 0x41, 0x10, 0x00, 0x00, 0xc1, 0x0f=\n,\n   0x00, 0x02, 0x00, 0x1c, 0x60, 0xf0, 0x0f, 0x00, 0x51, 0x20, 0xfc, 0xff=\n,\n   0x01, 0x1c, 0x62, 0x28, 0x08, 0x00, 0xdf, 0x3f, 0x00, 0x07, 0x00, 0x2a=\n,\n   0x22, 0x48, 0x08, 0x00, 0x51, 0x00, 0x00, 0x07, 0x00, 0x2a, 0x32, 0x48=\n,\n   0x04, 0x00, 0x50, 0x11, 0x80, 0x0b, 0x00, 0x0b, 0x14, 0xc8, 0x02, 0x00=\n,\n   0x50, 0x1a, 0xc0, 0x0a, 0x00, 0x09, 0x0c, 0x84, 0x01, 0x00, 0x50, 0x0e=\n,\n   0x40, 0x12, 0x00, 0x09, 0x1c, 0x84, 0x01, 0x00, 0x50, 0x06, 0x20, 0x32=\n,\n   0x00, 0x08, 0x36, 0x46, 0x02, 0x00, 0x58, 0x19, 0x18, 0xc2, 0x00, 0x08=\n,\n   0x73, 0x73, 0x0c, 0x00, 0xce, 0x18, 0x00, 0x02, 0x00, 0x88, 0x00, 0x00=\n,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00=\n,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00=\n,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\n\n\n--Alternative.Boundary.ge=Dx0m0M26II17rZy\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n-- Tom<nl>\n<nl>\n----------------------------------------------<nl>\nTom Brinck<nl>\nBellcore<nl>\n(201) 829-5238<nl>\nhammer@bellcore.com<nl>\n\n--Alternative.Boundary.ge=Dx0m0M26II17rZy--\n\n--Interpart.Boundary.ge=Dx0m0M26IQ17rd0--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.33.msg",
    "content": "Return-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA01437> for nsb; Thu, 4 Feb 93 17:27:17 EST\nReceived: from joyce.cs.su.OZ.AU by thumper.bellcore.com (4.1/4.7)\n\tid <AA17392> for nsb@greenbush; Thu, 4 Feb 93 17:27:12 EST\nDate: Thu, 4 Feb 93 17:27:10 EST\nFrom: bob@sarad.cs.su.oz.au\nMessage-Id: <9302042227.AA17392@thumper.bellcore.com>\nReceived: from sarad.cs.su.oz.au (for thumper.bellcore.com) with MHSnet;\n\tFri, 05 Feb 1993 09:27:08 +1100\nTo: ggm@cc.uq.oz.au, nsb@thumper.bellcore.com\nCc: bob\nSubject:  sending files via email\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"qwertyuiop123\"\n\n--qwertyuiop123\nContent-type:  text/plain\n\n\nThis sums up my feeling about using (non-MIME) email to carry files!\n\nBob.\n\n\n\n--qwertyuiop123\nContent-type:  image/gif\nContent-Transfer-Encoding: base64\n\n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\ndlIIb0zUJir4dkJIaomnbA2Ye16YdGvoVC43hpM3XiwoeqOHedUEhr7AU1ZIhmkYhzOYU5hG\nhftmiPKne4WYeFzYhWWIOIwIb1rHfFKHhJaIhX44hUF4eqckXCn/+IlvSGmSOImNyIebmIUR\nWIqQeIqtt4N7GFZheIU8x4bQh4momIpwuIp/qFi1yIpFyGGyOIuYaIZ0eGfDSIxMZozHuFd5\nqEbM2IyLxYv9RouuqHM5CHfAeIskdo1fp4qZOI6cSI2AB47PCE6vmIyal4VuOIivE47YiIxK\nOEftGIpbNlbzSI/RyIEIJmzqiIbVmH/+NWjmCI9Qhojk2G3bo3jvh2MLaWQ50FXCaITimH0T\n2T92Y5GLp5DOh49WJTa35nXBJZEdCVcj2URx6H8n+ZAN2TlnFgwQaVhlh5I6YD8ySYp3iF0g\nqYcQlJPfRIJ+xVg+kD1EUzTdaIs9WVkF/1QdkqSRGVlRbfCSHjkikCaCGlht2uiOvRGSCVlb\n2vdxF1kjXAmWWimGuRWFBJWVaMmIX+mNbDmUbll673KW/9SWdCkjcNl2n8GPeumInUVhcziX\ngHmTgKWM9SSQhmmW0ZSN1PGXjAmFlCh0MCiZCPmYR0h1nciYw8eZ95Q7NGmY1nSPeXaIrueT\nGTSZgwmaDOmLfumSRbWarJlNp3kl9XhE77iU6xiaNwiZuIlSs/mI66iFn6krmRmcurmbqGmZ\nAKSIuamc+SiKckmWeHGOLiec13lX1GmVihmX8padz4mS3CmarKINOmOKtHmT5OmbDIKcG5ee\nw1mVqZlI3UmYsf/JLrAon4dpkyHWnOyJnvH5nSlonXkJGvgJNj+ZmA+TUIV5nKPoUgpKmb+I\noP5ZnZvyVDUloexoQBPloPMBbXwVmK8onShzoTEohyu5oVwljQexmO4JnOAyonbZlSZqn+zW\nl01DkGF0hvV3o4mYokA4o9nVoxh4oigqRBmZmpj3n0XZpOghgxX6k425nD5anppZPRJEn03F\nn0XagT+KoxQipWlpoPr4oUi6oHxVbM5Zpr8pni4lCg71pJuSpgtnlAc6p3Q6oW1YLxwKYVdq\nfO8ZnRLzd3J6pNInqPMJlInKf3lqIXs6qM8piN/VoGd6m+WoqH6Kf/aIqWbqqDD6mgvK2KkF\nWKVO+qn3GaQ/9ouACKgAeagyFaqiCjXj0aivGqY5mp0U2gOzZauXOqbmuJMwaaq9WnGuCnAX\n5EeWqoEW90H1Caad2XdbOqQ1eplUaoDTqKwQ6JSJZaHE+nPECUI4KUVt2pOTGlnB+qLh2aLN\ngaqQWpeXJJbeqoD7qZ8UuYzySoD3dkUB54DPSpcuklK62qzc2KqjmWoCK3J4eKpfpaXkE1js\n2Z7VKrGYSYgTa7F8WaoXK0PRurBsyrEfC7IhK7IjS7IlSwgFAAA7\n\n--qwertyuiop123--\n\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.34.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!agate!howland.reston.ans.net!news.sprintlink.net!wn.aksi.net!news\nFrom: ohm@aksi.net (Ohm)\nNewsgroups: alt.sex.fetish.feet\nSubject: nylon feet by request - ind_111.jpg [1/1]\nDate: 25 Apr 1995 23:25:47 GMT\nOrganization: Ohm LTD.\nLines: 186\nMessage-ID: <3nk0dr$adp@wn.aksi.net>\nNNTP-Posting-Host: d137.aksi.net\nMime-Version: 1.0\nContent-Type: Image/JPEG\nContent-Transfer-Encoding: x-uue\nX-Newsreader: WinVN 0.93.14\n\nbegin 755 ind_111.jpg\nM_]C_X``02D9)1@`!`0$`2`!(``#__@\"45E0M0V]M<')E<W,@*'1M*2!8:6YG\nM(%1E8VAN;VQO9WD@0V]R<\"X`````````````````````````````````````\nM````````````````````````````````````````````````````````````\nM``````````````````````````````````````````````#_VP\"$``P(\"0H)\nM!PP*\"0H-#`P.$AX3$A`0$B0:&Q4>*R8M+2HF*BDP-D4Z,#-!,RDJ/%$¥04=)\nM34Y-+CE46E1+6D5+34H!#`T-$@¥2(Q,3(THQ*C%*2DI*2DI*2DI*2DI*2DI*\nM2DI*2DI*2DI*2DI*2DI*2DI*2DI*2DI*2DI*2DI*2DI*2O_``!$(`4,`D@,!\nM(0`\"$0$#$0'_Q`&B```!!0$!`0$!`0```````````0(#!`4&!P@)\"@L0``(!\nM`P,\"!`,%!00$```!?0$\"`P`$$042(3%!!A-180<B<10R@9&A\"\"-\"L<$54M'P\nM)#-B<H()\"A87&!D:)28G*\"DJ-#4V-S@Y.D-$149'2$E*4U155E=865IC9&5F\nM9VAI:G-T=79W>'EZ@X2%AH>(B8J2DY25EI>8F9JBHZ2EIJ>HJ:JRL[2UMK>X\nMN;K\"P¥3%QL?(R<K2T]35UM?8V=KAXN/DY>;GZ.GJ¥?+S]/7V]_CY^@$``P$!\nM`0$!`0$!`0````````$\"`P0%!@<(\"0H+$0`\"`0($!`,$!P4$!``!`G<``0(#\nM$00%(3$&$D%1!V%Q$R(R@0@40I&AL<$)(S-2¥!5B<M$*%B0TX27Q%Q@9&B8G\nM*\"DJ-38W.#DZ0T1%1D=(24I35%565UA96F-D969G:&EJ<W1U=G=X>7J\"@X2%\nMAH>(B8J2DY25EI>8F9JBHZ2EIJ>HJ:JRL[2UMK>XN;K\"P¥3%QL?(R<K2T]35\nMUM?8V=KBX^3EYN?HZ>KR¥_3U]O?X^?K_W0`$``#_V@`,`P$``A$#$0`_`.:(\nMY'%(RJ0<@4SF14D0QN-H^4_I2D`^O/&,4AHQY+<K(P!'6H2NTD'GVH-UJ.4A\nM>0.:4(?+¥P]SBAFB5Q`=K9!Y'I3QME8;OD8_Q8./QJ=BXZJPIADSM12X]5!P\nM:E2RN&QA0/K0V+DU)TTN5¥!I$3W;./T%6$¥-W+¥QS0L#T()_PJ>8KD&2^'+]\nM,¥1L/]DG_\"J<NF7D76(GZ4U(EP-'PK;DZVF¥8**20:]4TY<*.*PJ?$;TU:)Y\nM=¥1B#XPN`\",A$!'I¥HKF:Z8[(Y);L[%L`=?QQ2=`.?PJD<HQUW*5QU]JA094\nM4@1GW2[9C[¥U0<C><CO2-X$D%O+,V(HRQ]?2M>+19YH8U/[L`9;OS4.1U0CH\nMR[;^'(P,N\"_UZ5H0:-$GW8U'T&*S<C2,+$ITW:.%_2H6L!C*C!I<Q?+J0&W*\nMG!4#ZU-;-);2!XSCU&.#2N%CH+*2*¥C^Z`XZKG/XU%>Z8A4N%_\"BY-BIIMHL\nM=_O`YVX!Q76V(XQ4MZE)61Y7¥1RI¥87`!!(1`<'I¥HKF*ZX[(X9;L[$GY<#-\nM(1¥N*9RB`$$<5$!M<XH\")5FMI;B<+\"A8YZBM+3_\"ZDA[C+D_P]!64I'=2AH=\nM#:Z/'$H`C50.@`Q5M+!5Z#]*P;.I*Q*+/'8T¥6W3B@8OV;CI4,EEDY`Z]J.@\nMT5YM.9U^[@U!_9S#@BA;`.@MY()0Z9!'0UN0.MQ#G&&Z$4$M%\"\"$)J$J@<#&\nM/QKH+-<+_A4CZ'DGQ'(/C\"X`.2$0'V.T5S-=L=D<#W9V../2D'&/6F<C#/MQ\nM26¥+W%QY:=212D[(TIQYI6.KTK14C5<#)[GUK8%CY7`%<;=SU8QLAZP``Y']\nM*<(@!P!2*8H0>E)LY/¥`2F(7:,=*8V.PQ2`KRRF/Z&JTER1Z8^E4AD1N%//¥\nM51Q7OD3JX^[T(]J!,T;95>^D=3D%5P:V8EQ'D#%2#/(/B*P;Q?<8()\"(#[?+\nM7,UV1V1P2W9V!X/'-(#D?XUH<@AXK4¥.*'NFR.<CM[5C4T1TX97D=W9Q(B@@\nM\"K$OS+D\"N1'ID8\"D<C%,P,^E\"$-ZG&*\"`#3$-;K4;#YO_K4,\"O.H9\".AK.?!\nM4J>*!E!B58J>U1,QX[^]6@.A¥.9EC)/;BM^4!8_Z5!+/&?B`ZOXKG*D$A%!Q\nMVXKG*[8[(X7NSKR,_P#ZJ,8%4<@UN36GH)V7!8>M8U=CMPGQ,[_3F$B*3T(X\nMJ¥8P0:Y3O*LJ;\"350OAL9H)%60$XIQ.3_6@H1ADY%1MP/¥*9)&X&W//-9MT@\nMCDSV-`T4+I>/,'7H:IALD#/%4@.M¥-0[+16ZEB35[49UCB8],>M20SQKQC)Y\nMNOR-G)V+^'I^F*Q*[8[(XGNSL\"!0?UJD<HP_C6EHHS*PYZUC5.O\";L[C1Y>0\nMI-;.>3QQ7,>@R*;!7-9-UP210B49JWF+H+U/>KJ2G(+=:DHE$H(XYIID!..E\nM,3(V('%5+S!B/L:8+<RY3P1T!]:I0`F;9U.<\"F@Z'?:=`(;1`!C:H%8GBF_%\nMM#M\"L[R,%5$&2Q]`/IFBVIFSR_Q,TAU7]¥%$@C7<JG.WJ0/R(K)KLCLCC>[.\nMP[#B@GY:KH<HPY]#^%:&A_Z^3KU'¥A6-78ZL)¥3.RTWY)@>]=`\"&7H:YCT&1\nMR#CI67=)@GBA\",\"9DM[_`,R3`&#CZU(FHQD;G<*!ZFDT6A3JEOG`D4GV-\"WZ\nM.0%(/TH$R7[2`N2>?K56YGW*!GD_RIB1G2398(@))Z`#)-6=#T^¥FU7?<6TD\nM$2#($@Y8^M-`SN3MBM_I7)W¥RO>2S$¥#Y%/MWIK<RD><>)YTN-7:2-@PV@<=\nML$UDUUK8Y'N=AC@=O2D8¥`8_2J1RB8S¥M:6@)B>0_P\"T/Y\"L:NQTX7XSK;8X\nM=<5NVIR!7*>BR9D]JSKM.#Q30C`OK2*>9!(N12)IMJ@SY*_D*;*0R;3[5UP8\nME_[Y%8U_ICVZF2R<H1_`3¥I_PI(&1Z9%K5XA=+)MH_B=P@/TSUK7L_#^HW#;\nMKV2*&/LL;;F/XXP*JQ)T.F:5:6*DH%W'JS=36AY]M$3EAT_AYS18F^IE:OJL\nM<-L¥C,$C4<L:¥[U+4;B¥S'%F&,G));YF_#TK2$3GJ3L<[J859HT5@VV/!_,F\nMJ==!@MCL#T'TIIYIG.)GD=ZU-\"($LGU'7Z5E4V.C\"_&=3;D;Q6]8G(%<O4]$\nMO,HK.OD.TG&*!(Q+D@.I/K0&R,]!0RT-<9'3BJDRY!&*2!E9M<_L>U)>WEF5\nM?NA\"HQ]2:;HVK:IK4K,D<=K!_\"#DD_4¥?I6J6A'4WRODK^]E+M[¥\"LS5M<M-\nM,3#YEG(^6%/O'W/H*:5S&<K'%ZA=WNIW`ENFR%)*1K]U/¥3[U\"L#G&1^-;I6\nM//G*YE:T`+M%#`[8P#CMR:H51K'8[`@;:;WZ?G3.<%'/6M+1`//D.,9(K.>Q\nMTX7XSJ;;@CI6]8=!P:Y'N>B:17(!QBL^^4X-.VA,3G[SJ..])#\"TS@=JEFJ-\nM..R7R¥50U&W,0W`<4T+J8=_9BY418^^0/UK83[-I-E@D1@+TX``'OZ5I'56,\nMY-(YO4=>EF8II[%!_%<-U/¥`NC^M8P1`2S,6+'+,3DDUM&)YU6=V.+(O3%'F\nM@`8`]ZT,$86MN'O%(()\"`'V.36?0=$=CL3G;3,<=*#G%`YQ6EHH_?-QW'¥JS\nMGL=.&^,Z>VX9:WK'G':N9[GHFJ!¥HJA?#*'_``ILB)SUX/WJCMFIK/[WRC`/\nMI6;-T;,$>(¥]JS=78-\"15(1ASMY,2S!<F/Y@/I7*:KJ4FI7AGN,8!^2(?=0?\nMR)]36U):''B)6T*3R@]¥5'YGO6¥3SF-WY)[TX.3D8Q1U&9FK,#<1X(R(QD`]\nM.35*F;QV.P'*CG%)_#UH,`QCOVK2T09E/U]*SJ;'1AOC.IC&,5LZ=CC_``KF\nM>YZ)M`#RQ5\"]`P?TILSAN<_/&9+I5'KDUHVMNJ@+CDUGU.A;%[`2(\"LG4,$&\nMJL(Q+X;;=QZ*:X4V¥C')?'T%=%+8¥[%;H46H]6-/6UC'45J<;)5@0`84`U*L\nM2XQ@4!<P->Q]O\"@YVH`?;DUG4SHC¥*.P`^7N:3&/7VH,`(S]*U-\"4><W'?¥`\nMI6=38WPOQG5HH`4UJ:>-N#S7*STC<0@Q\"J5VHVDXJF9PW,2-0;UB1T%:,)!?\nMI4=3H6P^9L*:SYUW@DTQ,Y_7&$5G,W0!\":Y/J!QQ732V/,Q7Q(\"O3C/UI<8X\nMS6C.0=MYXS3@.#G^5`6.=UX@Z@`\"#A`#STZUG4SIA¥*.P`^7IUHQQP#08\"X`\nM%:NA8,[?7^E9U-C?\"_&=7C$8(Y^M7['D#UKE>YZ:-N$9AZ5!=#]V:IF2W.?'\nM_'^0!VS6O;H%4''-0;]!)D#>HJC.NT$4\".2¥5RE+/RQUE<)_C7.CGGI7727N\nMGF8GXQWH,4H'<X-6SE'CI_2E)XQ189SFO,#?@`@X0`^W)K.IG1'9'7)]P4N1\nMCGK3,'N+D8'I6CH4@&H;/52?RQ_C6538WPWQG9''D#^=7+`'([5RO<],WH`/\nM)JK>'\"&J>QE'XC`MP3?2'Z\"M=5(&*@W8K+U)JC=X\"Y'^%%B3B/%#[[JWC]\"S\nM_EQ_6L<CVZ5V0^%'EUW>;`8QTIPQ3.=CQC&*0_7O5`<[KQ!U#`(X0`CTK.H.\nMF.QU2ME1QQ3L@#IQ08]1._XU:TMS'JL)`^5LKG¥/_K5$UH:T/C1W<)W0XK0T\nMX8QV%<K/31OP_P\"HJC?<(>.:;V,H?$S&TM-UQ(V.K5M,HXQ4&TMR)@-N,5G7\nMF=IXH$<#KS[]8()!\"1@#/N2?¥*H$¥>M=L5H>55UFQ1GL.:,@]1^%-(Q8X'D#\nML*<`\"O/¥Z8T<WKI']H8!!P@!P>E9]!T1V1U2BEP\".G%!B,)QT&![4Z.0QR)(\nM<_(ZG¥,C-*:T+I:31Z#8G=$.>W:MBP7I7&SU3=@`¥HU1OP/+--[&4/B9FZ*A\nMP6]6)_6M4U!J]R*7&*RK[[K?2FMP.!U<?¥328¥<X_E5,#(QV]*[5L>3/XV/&\nM`HP!4>,-Z\"@S$![>OI4J_=QBF\"W.=U¥@ZC@$<(,X[5FT'1'9'5(I\"XZ\"ESQB\nM@Q&A1G^E(Z@JR¥8(Q2>PXZ-';^&Y_M.FP2=25&<>O?¥`6NGL5.0*XV>LC;@'\nM[HU1U+B%B>PJGL94_C*6BKB!>.2.:O/ZUF:O<A<Y!&*S;L94¥4(9P6OC9J)P\nM>J@_K6>AXKM6QY-3XF2%@H[<\"F;@S`#BJ,QDI\"G'>GQ¥X.\"!]:3!&!KQ!U'Y\nM2.$&?:LZF=$=D=8!F,9HQ@=*1BQ`,¥B@)C¥:8D=!X/G*QRP'_ED_`]CR/ZUW\nM>F_,0:Y);GK1=XIFY&,0UEZR^RSD(Z[<`4F32^(;I:!8U'H*LR*2>*DM_$1.\nMO!X_&LV[&`?¥*2*.!¥3C&HKCIL_J:RL<Y]J[5L>547OL5FP.3FE!`QVQ3,VB\nM&0EFP/7TJ2%F!`ICL8FN,#?¥$'\"#/ZUGT&¥=CK-I1BIZ@X-+BD8,;P!B@$9&\nM:8D:&@S&'6-A^[*GZC_ZU>F:*-T8.*YIK4].E_#1N'A!6%KSCRDC_ON!_7^E\nM9R'16I;TY?D'TJPP&:13^(BD%9MV,@D4BNAY_P\")H;N;5`+6`2`(,DN!SDUG\nM+I>J-]Y+>,>IDS^@%=BV//G'WF3#1+]O]9<VZXZ81C_.I%T\"<X#7CD_[,0'¥\nMZ:%R:$W_``CJ$!GFN&/?#`?R'%3Q^&[0``Q.Y_VI\":5RE$Y#Q9;Q6NLF&$*J\nMK&ORJ?ND¥_¥`U_QK&JT!VVJQ20:A*/)E8.=P*1,0?R%9C7L(8JQ=6!Y!0C%+\nMH9N(V.[6>=(HHW=W.`.!DFMB/0[Y@&DFA@_V<&0C¥<@4\"4`&FSV-W:W)N/.4\nM2A2!\"$P#QZFO4]`0?95)'O6$_B.ZG_#->3A:YS6&)O[=>V2:QD50-2PZ?A4K\nM#K04_B(I?NFLVZ/RD4%(Y[RDENI6(R00#_G¥:D%J@)PF,<]JZH[')):L?Y2G\nM!``'O3A$,```$^E`AWEX!X(QTIRQ''')ZF@#S;X@LI¥1*JL\"5@4,,_=.2<'T\nMX(/XUS56B6>R&$@DABJGT/6LB^¥,Z?>3F:1'21N69&QG¥.E-%6)=,¥.:?8R^\nM9%$[2C@22')_#TK5$&,<_A2%8CN;421XX&\"\"./>NQT=!'9(/:L)_$:Q^`NR'\nMH*Y[6AMO(&]R*R9K1-33¥;>/Y5.PY-'0)?$5Y0-OK67?,`I-26C&L2K+-)R0\nM9&Z'TX_I5@A-P+<YZ9%=>QQDBH#G`SGUI0I/&,<¥4D`C`9&!DYYI^Q1C@TP/\nM,OB*R'Q&BHP)2W4,!_\"<L<'TX(/XUR]6MB6>W,`2>\":;LR`%`..2<4EL6&\"1\nM@C@>AJ0)@C&#2$P8#:,@;LC^==59#;\"JXQ6,_B-5¥))(3G(KGM>?,D([AJS9\nMK21IZ8<J*MOU-\"V\"7Q%>7D5BZHVV)CZ5*6H]D9^G1[+*/*¥L-V,^O/¥`6K07\nMY^,>U=9R#D7(/)]Z>H(PN<CVI`PVY!^7WXI-IP#_`\"H`¥R^)#JWB2-58%DMU\nM#`'E3N8X/IP0?QKE:T6Q+/<2\"7`R<^@QBG!64?,/E]C4FCW&[UW;5.?8&G*=\nMO)&/>@GH`4&9!MY+`YKI;9@L0)/)K\"?Q&¥5[HDTNU23VKG]88,Z'W%9LV@K&\nMGIK<#%:##/K03/1D$@P#7/ZX287`ZD$\"G'X@?PLDAC\"QJG]T`5(!CGJ#V%=)\nMR\"$$G\"C'J*18SN)!:@&/VX]!_*FJH+9Z#WI`>8?$MT;Q,BJZL4MU5@#DJ=S'\nM!_`@_B*Y2M$2]SW-F;)'('IBA0&)P/KQ4F@T@@D!#@>E'S#\"C/'3/:@D0MLF\nMC.22<XKH;0,4&X]JYI?$=,/A'W*EUVUR^JEEN1DY!Z>W-2:0-G2V!5?I6OCB\nMA$SW()!P:P-54M)&H&<N!^M..XI?\"2E#L`X'UI1@@@9';BNDY12O/S?ABA<!\nMB,X-`,5@%7.2<]¥4X1@¥#D4`>6?$UU;Q.BJREDMU5P#RIW,<'T.\"#^(KDJM;\nM$L]Z,9W$!<C^51E2I/IWQS4F@@);K@`C[H_G2$?/A1^=(1%(\";J$$>O]*Z>R\nMB(ARW6L&O>.C:`]T`P:YS6(<2G`[¥5)4\"SI39C4UNC[@J4%3<K2¥`UAWWS7L\nM*J.=W'Y&KAN*?PED+@X*GUS2L&R<]3[5T'*\"@[0`,*>E+@#\"],?G2`0IDY)/\nMTS3EP>0>1[T`>5?$YT;Q/&JNK,ELH<*<[3N8X/H<$'¥17(UHMB6>^'E0,`+^\nM=`4LAQG/LM2:$;`<`'=GT%,5`,@XR><TA$6%%XK`[L5U=KS\"#6#^(W^PA7'7\nMO69J-N'0D#@BH94\"AI!QA<]#BNBCP4Q20ZA5NAM0FL)¥RZI&H.-BEN?RK2GN\nM1/X2ZBXY8@@^U+C'<#CO6Y@D+MS¥Q7IWQ2J0[8'6D(`@(VTH\"KSQQ18#R?XH\nM.C>*(U5E+);*&\"G.T[F.#[X(/XBN1K1;$O<]]<8Q¥H--;&3E<9[#I4%C63Y@\nM1P2>@H=BK;2VW/M0(K,O^EQK_DUUD)P@&*P>YT/X4#$9Z8J\"50R$&H'$P;4F\nM+5)HN@W;ABNBMVR`,YH1=0BOE_=GM7/V2[[Z>3'*@*/¥_E5T]S*?PFBH920Y\nM&![8%`P0&V¥5N8H>`\",`#'IC%(J[0,84]L4A#L#&&/7D4I11C.!3&>2_%-T;\nMQ3&J.K%+9%8*<[3N8X/H<$'¥:X^K6Q#W/H!D`QU&3^-(V`<#&?6H-$'RJ\"S+\nMCCBHMIZX&.^31U)*L`:35-K'H173,Y3`Z5S/<ZTM$*9!SWJ\"691C!X)Q4C2,\nM:0J-9`'0KGI6U;,!CF@<D37`#(0:Q[:(123;1RS9/'`K6&YA/X46#&K#+_,!\nMUIZH%`P,8%:F0NPA=W/';-#K@#IUI,0%3D<D@\"D(SU')JD!Y-¥571_%<:HP+\nM):HK@$$J=S'!].\"#^(KCJM;$L^AF`'RA5R/04QT4-@!2!W%9FA&_S'`Z#]:C\nMV9!R<CW%,1!8*/[5E).`\",>_%7;Z[\"748/\"CG.:Y7N=L5H2BY#AR.,#C!YJ&\nMWNXVB<R*25/(.*20)%*:¥CDU%2%V;5.?>M*QD+N/¥:!R-\"4X4COBLBU#.9-V\nM,;SQ6M/<YZB]TM@[5V^O)).<4JN6'`YZ>M:F(O!SE^G0=J>F%`+'D_CBD(5B\nMFWCEO4=Z<H51DL#[4T!Y#¥6)(W¥61K&ZL4M45@ISM.YC@^AP0?Q%<96BV)9]\nM%R9VD(I`^I%0E5`'4BH-\".12`%5OPVC--\"%DR6POI2$C)NKAX[X^3'N=L#CM\nM0PN)+A6E\"9`_B/`^@%<[6IVT]D6EF¥ISD[MP_P`¥5D7^M6NG2LDGF323']W!\nM$<LWX548A)V(K7[2)B+K`FE^;:.1&.R_ABNITQ<8.>:AZ,2=XE^23L1GBJ=J\nM!YDJJ2#NS@>__P\"JM*>YE4^$LA`6)QC]:\"AQM)&.X`K4YP;@Y0D>WK2¥GAL?\nM44\"`HQ(`S@>AYI=IR5;@BA#/)?BRZ-XKA1'5FCM$5P#DJ=S'!]#@@_B*XNM%\nML2SZ1:,\"(9W$CN2`:@D5¥;0&/<8']:@L@;[Q9L$]!QTI2I&05*Y]>,TD!@ZU\nM:ZBLZW.FQ13/C:¥+N%R/4'_/6L5]<,<PCNM/U\".X''E!2V?ITK-QU.B$[(L1\nMP:[K#`;/[(MCQNDYF;Z+V_'%:VG:%8Z42UK\"3,W+W,IWNQ^O;¥*M(SG*['SC\nMS-20'!¥M<<>]:VFH=FXUA+<WAL3SKWY'X54LV7[>ZGC*9XX[_P#UZJGN15^$\nMT450CD'GKC%(6.S[I8CL!6QS=1_/`QD_3%#H!¥RX-(+\"H%!X'UIWE[FZ?G3`\nM¥@^+CQOXNC6-U8I:H'`;.T[F.\".W!!Q[Y[UQ-:+8EGTNVUQ@D;A_GI4$B*'X\nMW'CO699`(LG;D''K37C*D*,`DYRHXH0#)8/DP05#<9IHB=%VQLZC''./SI6$\nMF-6,HV%Y/<GFD1`278G([4PW,RTD%S>/,BX5B2![=JW+&,@@=!7/+<ZUHBQ=\nM*\"G`Z5F68#:A)P>%`X![_P#ZJJ&Y-3X34)V`!%X'IWI1SW'KCI6QS#V[,<[C\nM0RECQT'?M2`1D(.X$_4\"GL,!-F,]S3$>/?%MT;Q7`B2*[16B*P4@[3N<X/H<\nM$'¥17$UHMA,^E7\"K)@1EV/7V%*$W_*JX8#YO:LRR\"6$9VYX'))-.BBZD@8/.\nM30`,JGA<9';C¥Z9)Y?.S/'M03U*S[QD=^V#TJCJK^39E5X>7Y!SU]:EZ%P5V\nM,TVV¥N)>/O5N0(%0>IK!G4-G.W(-4].&VZN&P0\"%[?6K@15^$T<`¥@@8/84J\nM`;B>_IWK8YB159EW8P>O-!&%Y.?44@$(&<DG!IP0%V&<D>M,#QWXO/&WBZ%(\nMY%=H[1%<*<[3N<X/H<$'Z$5Q%:+8EGT]MV#.02>O'7VH4%254@^HS698TX96\nM`(/J<=*B,7R¥]/3-,!&4!`QY)]!^5,\"EHR`B[>QQS2%U*LJ*'RPP!VQ6*76_\nMNS,B8C7Y8QCKZFLY&M):FQ%\"$=$'¥(J['P.E9=3=E:]+;<H,FHM+;,TQY'0?\nMCS5P)JKW305!UQSWIRB)L@<]ZV1RBE><9R/6FQ¥L<D¥>E)`.R2>.@I^-KX5@\nM0:8'C?Q@D1_%T*HZEH[1%=002AW.<'T.\"#]\"*X>M%L2SZ>=2QP#DX[4S&^,C\nM&/J>?TK,H?L`0X(S[4T*`N-V>/3BF!$Q&YF`RH'<?XTURQ4;2<]AC%(&9M^X\nME0P¥;I!@XXP.Y_*H+2-/-V0?<CXR!U-92W.FFM\"Q\"Y+N_;.,XJ[\"Z[#D_G69\nMI8CF((85'IA*F<1C`+#GWJX$5?A+V=AQNR:<RL2-I7&<G%;'**WR@`¥%O;)H\nM;*C#+CUXI\"$\"Y&00.>E//R$#`7CMWI@>.?&&1'¥7PJCJ6CLT5U!R4.YS@^AP\nM0?H17#5HMA,^HCCR¥%L9ZD@5\"PS@#^$<5F6*-R`9;-#`XR./QH0B-).JD$9[\nMXS3)`VT@(>>]`&/J-M(L0EMQEP>F>M4(M0¥JQ>W9\"K,,9Z5E):G52>EBVE_%\nM)''%%&5QU.:>UU^_50IPO)]ZS-4B&YNI\"3M8K[5KZ3&8;',HR¥C;C[5I!:&-\nM;L6RP*GY1GH*(3A2\"I'IWK0YA<#/.\"*>6/`Z<=:!,4(,E^2!ZTJ@-R@!QZT`\nM>-?&.2-_&$*1R*[1V:*X5L[3N<X/IP0?H17\"UJMB3Z?=MQ'R=#U)I[J6(V],\nM<XK,T&,`0%**X7ID=Z.1E2,@]<=*$(:5([`Y[TUE!8Y;G'`6BP#71=FU@/J>\nM:P-;TQG`GMS¥P'3UJ&M#2#LS&MY-O+$JW<5:A,[$NI7'J.]96.Q,FA_TBYBC\nMV¥EN:ZJ-49N%_,9K6\"LCFK/WA!M8E2#@=:$8!=K8'?@59@.\"[BV1M]#BG<;>\nM[-ZT@&C)4DD¥#&!4D0V],C-\"$>-?&22-_&,*)(K-%9HKA3DJ=SG!]#@@_0BN\nM$K5;\"9]0N=Q(7(.<4X¥`¥$8K,LB09YW#O@8P:%+ECD<#VH1(-E3GAN.@IJL!\nM'N=0I^M#&(X+L#U4=JA:)6&\",+S@=:0&5>Z+%.3(&V,3T[&J¥&@3QY5KZ),]\nM`BECC¥34..IT*=C4L-+AM9#¥[R.5Y=B.?H*O%C&GRCIZ¥U:T,9.['J3AMR@^\nME1XW,68M@?P]0*9(]9,MGG/;L3^%(<JI;)5B>XZ_A2$.5&7/>E*L1D'!QP.E\nM'4#QKXPRQR>+;=4D5WCLT60*1E6WN<'T.\"#]\"*X:M5L)GT¥78,<''(%.!R,$\nM]>OYUF6-3MR>?>G,2(¥CKZT(3(>H;/:COCMZ4`*_&,<9J/`&<\"@!-H¥]AC@#\nMBFQ_._S¥_(#^-(8]/NGD¥5&K,P.X]S38NI(Q*+E202/Z5):.V,9ZTF!.0-@X\nM[U',`$0CC).:`',,!<=Z9-V';;_C0(¥9^+LL<GBNW2.16:*S5'\"D$J=[G!]#\n+@@_0BN(K5;\"9_]D\n`\nend\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.35.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!agate!tcsi.tcs.com!uunet!vixen.cso.uiuc.edu!gateway\nFrom: Internet-Drafts@CNRI.Reston.VA.US\nNewsgroups: info.ietf\nSubject: I-D ACTION:draft-smith-ipatm-bcast-00.txt\nDate: 25 Apr 95 15:09:13 GMT\nOrganization: University of Illinois at Urbana\nLines: 96\nApproved: Usenet@ux1.cso.uiuc.edu\nMessage-ID: <9504251109.aa04587@IETF.CNRI.Reston.VA.US>\nReply-To: Internet-Drafts@CNRI.Reston.VA.US\nNNTP-Posting-Host: ux1.cso.uiuc.edu\nMime-Version: 1.0\nContent-Type: Multipart/Mixed; Boundary=\"NextPart\"\nOriginator: daemon@ux1.cso.uiuc.edu\n\n--NextPart\n\nhere are a couple of external bodies:\n\n--NextPart\nContent-Type: Multipart/MIXED; Boundary=\"OtherAccess\"\n\n--OtherAccess\nContent-Type:  Message/External-body;\n        access-type=\"mail-server\";\n        server=\"mailserv@ds.internic.net\"\n\nContent-Type: text/plain\nContent-ID: <19950424144009.I-D@CNRI.Reston.VA.US>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948541830.21002.5@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\nENCODING mime\nFILE /internet-drafts/draft-smith-ipatm-bcast-00.txt\n\n--OtherAccess\nContent-Type:   Message/External-body;\n        name=\"draft-smith-ipatm-bcast-00.txt\";\n        site=\"ds.internic.net\";\n        access-type=\"anon-ftp\";\n        directory=\"internet-drafts\"\n\nContent-Type: text/plain\nContent-ID: <19950424144009.I-D@CNRI.Reston.VA.US>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948543400.21002.6@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--OtherAccess\nContent-Type: message/external-body;\n        access-type=\"URL\";\n        url=\"http://home.netscape.com/\n\t\tpeople/\n\t\tjwz/\n\t\tindex.html\"\n\nContent-Type: TEXT/HTML\nContent-ID: <spankulate@hubba.hubba.hubba>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948549480.21002.7@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--OtherAccess\nContent-Type: message/external-body;\n        access-type=\"local-file\";\n        name=\"/some/directory/loser.gif\"\n\nContent-Type: image/gif\nContent-ID: <spankulate3@hubba.hubba.hubba>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948550940.21002.8@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--OtherAccess\nContent-Type: message/external-body;\n        access-type=\"afs\";\n        name=\"/afs/directory/loser.gif\"\n\nContent-Type: image/gif\nContent-ID: <spankulate4@hubba.hubba.hubba>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948552090.21002.9@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--OtherAccess--\n\n--NextPart--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.36.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!agate!tcsi.tcs.com!uunet!vixen.cso.uiuc.edu!gateway\nFrom: Internet-Drafts@CNRI.Reston.VA.US\nNewsgroups: info.ietf\nSubject: I-D ACTION:draft-smith-ipatm-bcast-00.txt\nDate: 25 Apr 95 15:09:13 GMT\nOrganization: University of Illinois at Urbana\nLines: 96\nApproved: Usenet@ux1.cso.uiuc.edu\nMessage-ID: <9504251109.aa04587@IETF.CNRI.Reston.VA.US>\nReply-To: Internet-Drafts@CNRI.Reston.VA.US\nNNTP-Posting-Host: ux1.cso.uiuc.edu\nMime-Version: 1.0\nContent-Type: Multipart/Mixed; Boundary=\"NextPart\"\nOriginator: daemon@ux1.cso.uiuc.edu\n\n--NextPart\n\nA New Internet-Draft is available from the on-line Internet-Drafts \ndirectories.                                                               \n\n       Title     : IP Broadcast over ATM Networks.                         \n       Author(s) : T. Smith, G. Armitage\n       Filename  : draft-smith-ipatm-bcast-00.txt\n       Pages     : 7\n       Date      : 04/24/1995\n\nThis memo describes how the IP multicast service being developed by the IP \nover ATM working group may be used to support IP broadcast transmission. \nThe solution revolves around treating the broadcast problem as a special \ncase of multicast, where every host in the subnet or cluster is a member of\nthe group.                                                              \n\nAn understanding of the services provided by draft-ietf-ipatm-ipmc-04.txt \nis assumed.                                                                   \n\nInternet-Drafts are available by anonymous FTP.  Login with the username\n\"anonymous\" and a password of your e-mail address.  After logging in,\ntype \"cd internet-drafts\" and then\n     \"get draft-smith-ipatm-bcast-00.txt\".\nA URL for the Internet-Draft is:\nftp://ds.internic.net/internet-drafts/draft-smith-ipatm-bcast-00.txt\n \nInternet-Drafts directories are located at:\t\n\t                                                \n     o  Africa                                   \n        Address:  ftp.is.co.za (196.4.160.2)\t\n\t                                                \n     o  Europe                                   \n        Address:  nic.nordu.net (192.36.148.17)\t\n        Address:  ftp.nis.garr.it (192.12.192.10)\n\t                   cd mirrors/internet-drafts   \n\t                                                \n     o  Pacific Rim                              \n        Address:  munnari.oz.au (128.250.1.21)\t\n\t                                                \n     o  US East Coast                            \n        Address:  ds.internic.net (198.49.45.10)\t\n\t                                                \n     o  US West Coast                            \n        Address:  ftp.isi.edu (128.9.0.32)  \t\n\t                                                \nInternet-Drafts are also available by mail.\t\n\t                                                \nSend a message to:  mailserv@ds.internic.net. In the body type: \n     \"FILE /internet-drafts/draft-smith-ipatm-bcast-00.txt\".\n\t\t\t\t\t\t\t\nNOTE: The mail server at ds.internic.net can return the document in\n      MIME-encoded form by using the \"mpack\" utility.  To use this\n      feature, insert the command \"ENCODING mime\" before the \"FILE\"\n      command.  To decode the response(s), you will need \"munpack\" or\n      a MIME-compliant mail reader.  Different MIME-compliant mail readers\n      exhibit different behavior, especially when dealing with\n      \"multipart\" MIME messages (i.e., documents which have been split\n      up into multiple messages), so check your local documentation on\n      how to manipulate these messages.\n\t\t\t\t\t\t\t\nFor questions, please mail to Internet-Drafts@cnri.reston.va.us.\n\t\t\t\t\t\t\t\n\nBelow is the data which will enable a MIME compliant mail reader \nimplementation to automatically retrieve the ASCII version\nof the Internet-Draft.\n\n--NextPart\nContent-Type: Multipart/Alternative; Boundary=\"OtherAccess\"\n\n--OtherAccess\nContent-Type:  Message/External-body;\n        access-type=\"mail-server\";\n        server=\"mailserv@ds.internic.net\"\n\nContent-Type: text/plain\nContent-ID: <19950424144009.I-D@CNRI.Reston.VA.US>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948568940.21002.10@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\nENCODING mime\nFILE /internet-drafts/draft-smith-ipatm-bcast-00.txt\n\n--OtherAccess\nContent-Type:   Message/External-body;\n        name=\"draft-smith-ipatm-bcast-00.txt\";\n        site=\"ds.internic.net\";\n        access-type=\"anon-ftp\";\n        directory=\"internet-drafts\"\n\nContent-Type: text/plain\nContent-ID: <19950424144009.I-D@CNRI.Reston.VA.US>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948570390.21002.11@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--OtherAccess--\n\n--NextPart--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.37.msg",
    "content": "Message-ID: <31C105ED.41C62@netscape.com>\nDate: Thu, 13 Jun 1996 23:25:49 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: attached image cache test (test 2: inline disposition)\nContent-Type: multipart/mixed; boundary=\"------------167E2781446B\"\nX-Mozilla-Status: 0001\nContent-Length: 3748\n\nThis is a multi-part message in MIME format.\n\n--------------167E2781446B\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: inline\nContent-Description: a message with a text/plain body\n\nMessage-ID: <31C10324.41C62@netscape.com>\nDate: Thu, 13 Jun 1996 23:13:56 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: test message one (a message with a text/plain body)\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nThis is the first attached message.\n\n\n--------------167E2781446B\nContent-Type: image/gif; name=\"one.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: inline; filename=\"one.gif\"\n\nR0lGODdhpAAoAPAAAP///wAAACwAAAAApAAoAAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3nuhP0frCT/HpBkK8I+RmUyM2xyXgipFALtbq8AphYirb63RK73nF2zOUe\nhgt2W52Ar6VMuTgsux7ZQ7P4HEfkdgf4BtRAtTdIyHijRwd52Bg5J/lXqIDXeCeZ2OlX82jp\n+VlaeYq5iRrlR7qqOiM61do6a4rpmgkaOEp7m0oj+/o1SHnWZ/mq28tciYwjnJo73Rxhx2mb\nDawTvWmsugiLuAucKw4Naj5ppm6bPL4LZ35t0z2P9m3YyRPfX328Joc9X876HFv07EEdYgQL\nkouR0I3ENOxKJXQ2waC+M0Ph6JFxguzdx5EVHpE8eaEfypUZkz1kCZOXx5g0a9q8iTOnzp08\ne/r8CTSo0KFEix4oAAA7\n--------------167E2781446B\nContent-Type: image/gif; name=\"two.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: inline; filename=\"two.gif\"\n\nR0lGODdhmgAwAPAAAP///wAAACwAAAAAmgAwAAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3n+s73/g8MCoeBojFAPCqVQ4axCXgapNEiVEEVWg/Z7ZXr1Say0S+CDESe\nw2XzNHx8e+Njeh0tZzfwy+rTnqfWQvYXtyRYJXfnN7eFh6WXByYIVxhpQkhlp9lI2bk2GfHo\nF/q25omYkonY9an4Sgob6zDKSXm6uLKKWzrFO2v7u3cJ7MjKNjqy2zt76lp8mLqQLGV4nJos\nsizbqtZtyjxBbYX0lxt+st0cLMuITUwLz8R43p6OXHnd+z2d3S99x5u6ZijU8Yu1SZ4mUfCg\n/UN3752+fdEEHnLmzx4kRlCQyGX0cNFdoJGwOoWcBDDgvH4c/zV0gxEQTJiZZtpMVOfmTHw6\nbZ7sCTSo0KFEixo9ijSp0qVMmzp9CjWq1KlUq1qNUAAAOw==\n--------------167E2781446B\nContent-Type: image/gif; name=\"three.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: inline; filename=\"three.gif\"\n\nR0lGODdhqAAzAPAAAP///wAAACwAAAAAqAAzAAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3n+s73/g8MCofEovGIrASWzMCwCY0CoEkHs3g1ZKfLw7aq+Aa7XrLWeUaD\nw2ahOp1Qi9dw4pt7l7fp9TS6WbaHJzh4F0i4MBfohwAI2PgIqUgidkUV9UZW2UVVNxmHWNjJ\niOdplvUZsnm61cqqBwu5CPEZ+YWKO8ule7Iq+dvnGttX+lDbdstKbIkcCuLLewtcTJ1syHa9\n3HxtTe1dAq3Nbft6KGUc2s1rfonp/BHurT6f+c5wXJ+fiJhqEq9ebc8oYhPwTftGcN2Kf9t0\nAQRlD1uDh4oiScrWS2BDZoeahFlpFcFgNH4gSU1RwVCfn3Pu8ln8iJEiyYGYUtQstDJnMFg3\nD9FyB7Ejrpc+sWFc05KP0okalzoFxeap1F2ypkrtaTWr1q1cu3r9Cjas2LFky5o9izat2rVs\n27p9Czeu3K4FAAA7\n--------------167E2781446B\nContent-Type: image/gif; name=\"four.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: inline; filename=\"four.gif\"\n\nR0lGODdhmgA5APAAAP///wAAACwAAAAAmgA5AAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3n+s73/g8MCofEovGITAIDzGZg6IxGlYbm0ZrAKrVE7oFJBXiF42q4vAQj\nnuKzuop1fsdTRd0ub3jZ+L02L2YFOOL3NCXFFwiXGGgIGPfWt8bY6BjJhQlJ+VHI9/j2Byqa\nOKpXmnW6OEmqNhhSuBqrOts453kZuSqFyhjK+jtnAmsra0ZM61vMe8yMjAusMkxb25fqi8iQ\nuVycCZ0iTT2tKfs8sbfN3K18Aq7u3OuKtnC+ntwsL9Je/r5uuzmfSxK3fdPY5XLHr1Kzal9M\n/RvobRC+VwcJhkOkaZc/UXwTFUo8ZM9gnZF57oTaeGfRQ4wPUvp719EIxodhoFSsSSVgQJxd\n4PHMqfGn0KFEixo9ijSp0qVMmzp9CjWq1KlUq1q9ijWr1q1cu3r9CtZpAQA7\n--------------167E2781446B\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: inline\nContent-Description: a message with a text/plain body\n\nMessage-ID: <31C10333.167E2@netscape.com>\nDate: Thu, 13 Jun 1996 23:14:11 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: test message two (a message with a text/plain body)\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nThis is the second attached message.\n\n--------------167E2781446B\nContent-Type: message/rfc822\nContent-Disposition: inline\nContent-Description: a message which contains a message\n\t(which contains a message, which has a text/plain body)\n\nMessage-ID: <31C106F6.59E22@netscape.com>\nDate: Thu, 13 Jun 1996 23:30:14 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: a message which contains a message\n\t(which contains a message, which has a text/plain body)\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: inline\nContent-Description: a message which contains a message\n\t(which has a text/plain body)\n\nMessage-ID: <31C106E3.15FB2@netscape.com>\nDate: Thu, 13 Jun 1996 23:29:55 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: a message which contains a message\n\t(which has a text/plain body)\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: inline\nContent-Description: a message with a text/plain body\n\nMessage-ID: <31C106D2.794B2@netscape.com>\nDate: Thu, 13 Jun 1996 23:29:38 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: a message with a text/plain body\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nFoo!\n\n--------------167E2781446B\nContent-Type: text/html\nContent-Disposition: inline\n\nAnd this is some <B><FONT COLOR=red>HTML</FONT></B>\n\n--------------167E2781446B--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.38.msg",
    "content": "Message-ID: <31C105ED.41C6@netscape.com>\nDate: Thu, 13 Jun 1996 23:25:49 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: attached image cache test (test 1: attachment disposition)\nContent-Type: multipart/mixed; boundary=\"------------167E2781446B\"\nX-Mozilla-Status: 0001\nContent-Length: 3748\n\nThis is a multi-part message in MIME format.\n\n--------------167E2781446B\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: attachment\nContent-Description: a message with a text/plain body\n\nMessage-ID: <31C10324.41C6@netscape.com>\nDate: Thu, 13 Jun 1996 23:13:56 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: test message one (a message with a text/plain body)\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nThis is the first attached message.\n\n\n--------------167E2781446B\nContent-Type: image/gif; name=\"one.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"one.gif\"\n\nR0lGODdhpAAoAPAAAP///wAAACwAAAAApAAoAAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3nuhP0frCT/HpBkK8I+RmUyM2xyXgipFALtbq8AphYirb63RK73nF2zOUe\nhgt2W52Ar6VMuTgsux7ZQ7P4HEfkdgf4BtRAtTdIyHijRwd52Bg5J/lXqIDXeCeZ2OlX82jp\n+VlaeYq5iRrlR7qqOiM61do6a4rpmgkaOEp7m0oj+/o1SHnWZ/mq28tciYwjnJo73Rxhx2mb\nDawTvWmsugiLuAucKw4Naj5ppm6bPL4LZ35t0z2P9m3YyRPfX328Joc9X876HFv07EEdYgQL\nkouR0I3ENOxKJXQ2waC+M0Ph6JFxguzdx5EVHpE8eaEfypUZkz1kCZOXx5g0a9q8iTOnzp08\ne/r8CTSo0KFEix4oAAA7\n--------------167E2781446B\nContent-Type: image/gif; name=\"two.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"two.gif\"\n\nR0lGODdhmgAwAPAAAP///wAAACwAAAAAmgAwAAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3n+s73/g8MCoeBojFAPCqVQ4axCXgapNEiVEEVWg/Z7ZXr1Say0S+CDESe\nw2XzNHx8e+Njeh0tZzfwy+rTnqfWQvYXtyRYJXfnN7eFh6WXByYIVxhpQkhlp9lI2bk2GfHo\nF/q25omYkonY9an4Sgob6zDKSXm6uLKKWzrFO2v7u3cJ7MjKNjqy2zt76lp8mLqQLGV4nJos\nsizbqtZtyjxBbYX0lxt+st0cLMuITUwLz8R43p6OXHnd+z2d3S99x5u6ZijU8Yu1SZ4mUfCg\n/UN3752+fdEEHnLmzx4kRlCQyGX0cNFdoJGwOoWcBDDgvH4c/zV0gxEQTJiZZtpMVOfmTHw6\nbZ7sCTSo0KFEixo9ijSp0qVMmzp9CjWq1KlUq1qNUAAAOw==\n--------------167E2781446B\nContent-Type: image/gif; name=\"three.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"three.gif\"\n\nR0lGODdhqAAzAPAAAP///wAAACwAAAAAqAAzAAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3n+s73/g8MCofEovGIrASWzMCwCY0CoEkHs3g1ZKfLw7aq+Aa7XrLWeUaD\nw2ahOp1Qi9dw4pt7l7fp9TS6WbaHJzh4F0i4MBfohwAI2PgIqUgidkUV9UZW2UVVNxmHWNjJ\niOdplvUZsnm61cqqBwu5CPEZ+YWKO8ule7Iq+dvnGttX+lDbdstKbIkcCuLLewtcTJ1syHa9\n3HxtTe1dAq3Nbft6KGUc2s1rfonp/BHurT6f+c5wXJ+fiJhqEq9ebc8oYhPwTftGcN2Kf9t0\nAQRlD1uDh4oiScrWS2BDZoeahFlpFcFgNH4gSU1RwVCfn3Pu8ln8iJEiyYGYUtQstDJnMFg3\nD9FyB7Ejrpc+sWFc05KP0okalzoFxeap1F2ypkrtaTWr1q1cu3r9Cjas2LFky5o9izat2rVs\n27p9Czeu3K4FAAA7\n--------------167E2781446B\nContent-Type: image/gif; name=\"four.gif\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment; filename=\"four.gif\"\n\nR0lGODdhmgA5APAAAP///wAAACwAAAAAmgA5AAAC/oSPqcvtD6OctNqLs968+w+G4kiW5omm\n6sq27gvH8kzX9o3n+s73/g8MCofEovGITAIDzGZg6IxGlYbm0ZrAKrVE7oFJBXiF42q4vAQj\nnuKzuop1fsdTRd0ub3jZ+L02L2YFOOL3NCXFFwiXGGgIGPfWt8bY6BjJhQlJ+VHI9/j2Byqa\nOKpXmnW6OEmqNhhSuBqrOts453kZuSqFyhjK+jtnAmsra0ZM61vMe8yMjAusMkxb25fqi8iQ\nuVycCZ0iTT2tKfs8sbfN3K18Aq7u3OuKtnC+ntwsL9Je/r5uuzmfSxK3fdPY5XLHr1Kzal9M\n/RvobRC+VwcJhkOkaZc/UXwTFUo8ZM9gnZF57oTaeGfRQ4wPUvp719EIxodhoFSsSSVgQJxd\n4PHMqfGn0KFEixo9ijSp0qVMmzp9CjWq1KlUq1q9ijWr1q1cu3r9CtZpAQA7\n--------------167E2781446B\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: attachment\nContent-Description: a message with a text/plain body\n\nMessage-ID: <31C10333.167E@netscape.com>\nDate: Thu, 13 Jun 1996 23:14:11 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: test message two (a message with a text/plain body)\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nThis is the second attached message.\n\n--------------167E2781446B\nContent-Type: message/rfc822\nContent-Disposition: attachment\nContent-Description: a message which contains a message\n\t(which contains a message, which has a text/plain body)\n\nMessage-ID: <31C106F6.59E2@netscape.com>\nDate: Thu, 13 Jun 1996 23:30:14 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: a message which contains a message\n\t(which contains a message, which has a text/plain body)\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: attachment\nContent-Description: a message which contains a message\n\t(which has a text/plain body)\n\nMessage-ID: <31C106E3.15FB@netscape.com>\nDate: Thu, 13 Jun 1996 23:29:55 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: a message which contains a message\n\t(which has a text/plain body)\nContent-Type: message/rfc822\nContent-Transfer-Encoding: 7bit\nContent-Disposition: attachment\nContent-Description: a message with a text/plain body\n\nMessage-ID: <31C106D2.794B@netscape.com>\nDate: Thu, 13 Jun 1996 23:29:38 -0700\nFrom: Jamie Zawinski <jwz@netscape.com>\nOrganization: Netscape Communications Corporation, Mozilla Division\nX-Mailer: Mozilla 3.0b5 (X11; U; IRIX 5.3 IP22)\nMIME-Version: 1.0\nTo: Jamie Zawinski <jwz@netscape.com>\nSubject: a message with a text/plain body\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\nFoo!\n\n--------------167E2781446B\nContent-Type: text/html\nContent-Disposition: attachment\n\nAnd this is some <B><FONT COLOR=red>HTML</FONT></B>\n\n--------------167E2781446B--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.39.msg",
    "content": "From: \"Jamie Zawinski, with suffix & ampersand\" <jwz@netscape.com>\nNewsgroups: netscape.general\nSubject: posting HTML (was Re: Public News Server)\nDate: 5 Apr 1995 06:31:22 GMT\nOrganization: \nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=ONE\nMessage-ID: <3ltdfq$j50@secnews.netscape.com>\nReferences: <3lmtu0$dv1@secnews.netscape.com> <3lpjth$g97@secnews.netscape.com> <3lrbuf$gvp@secnews.netscape.com> <3lst13$iur@secnews.netscape.com>\nX-URL: http://home.netscape.com\nStupid-Commentary: this is a test.\n\tthis is only a test.\n\tthis is a test of the emergency URL locator system.\n\t<http://home.netscape.com>\n\tthis is only a test.\nRandom-header: >beginning with a greater-than\n\nIf you can read this, you're too close.\n\n--ONE\nContent-Type: text/richtext\n\n<bigger><bigger>\n      This is <bold><italic>richtext.</italic></bold>\n      <smaller>as defined in RFC 1341</smaller>\n      <nl><nl>Isn't it\n      <bigger><bigger>cool?</bigger></bigger>\n\t(it's obsolete!)\n\n<nl>unknown tag: <foo> bar\n<nl>greater-thans: >>\n<nl>ampersand: & foo (&lt;&gt;)\n\nThis is a less-than: <lt><nl>\nThis is <bold>NOT</bold> a less-than: <<\n\n<nl><nl>\nthese\nwords\nshould\n\nall\n\nbe\n\non\n\none\n\n\n\nline.\n\n--ONE\nContent-Type: text/enriched\nContent-Transfer-Encoding: quoted-printable\n\nHello.\n<bigger><bigger>\n      This is <bold><italic>enriched text.</italic></bold>\n      <smaller>as defined in RFC 1523</smaller>\n      \n      Isn't it\n      <bigger><bigger>cool?</bigger></bigger>\n\t(it supercedes text/richtext.)\n\n\nunknown tag: <foo> bar\n\ngreater-thans: >> (and equal-sign: =3d)\n\nampersand: & foo (&lt;&gt;)\n\nThis is <bold>NOT</bold> a less-than: <lt>\n\nThis is a less-than: <<\nAnd so are these (3): <<<<<< (3 I say)\n\n\nthese\nwords\nshould\nall\nbe<nl><nl><nl><nl>\non\none\nline.\n\nBut these words\nshould be\non the next line.\n\n\nand these words\nshould be in the next paragraph.\n\n\n\nand this should be two blank lines away.\n\n--ONE\n\nThis is plain text\n--ONE\n\nSo is this.\n--ONE\nContent-Type: message/rfc822\n\nFrom: Jamie Zawinski <jwz>\nSubject: it's not my damn planet, monkey-boy\nDate: Sun Apr 23 02:25:07 1995\nOrganization: blargh\nContent-Type: multipart/mixed; boundary=TWO\nMessage-ID: <spankulate@secnews.netscape.com>\nMIME-Version: 1.0\n\n--TWO\nContent-Type: text/html\n\nHere's some <B>HTML</B>\n--TWO\nContent-Type: image/unknown\nContent-Name: not really an image (1)\nContent-Description: this isn't an image at all, but\n\tit is marked as such so that xv will be invoked on it\n\nhello, this isn't really an image (1)\n\n--TWO--\n\n--ONE\nContent-Type: image/x-xbitmap\nContent-Description: this is an xbm of a shark\n\n#define sharky_width 171\n#define sharky_height 68\nstatic char sharky_bits[] = {\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x80, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0xe0, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,\n   0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0xd0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x54, 0xfd, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x49, 0x92, 0x54, 0x55, 0x45, 0xeb,\n   0x07, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x10, 0x41, 0x55, 0x84, 0x44, 0x85, 0xa2, 0x50, 0x94, 0x0f, 0x00,\n   0x00, 0x06, 0x00, 0xfc, 0x17, 0x00, 0x40, 0x12, 0x12, 0x42, 0x00, 0x01,\n   0x04, 0x04, 0x51, 0x75, 0x75, 0xd5, 0xae, 0x55, 0x10, 0x00, 0x80, 0x0f,\n   0x00, 0xfe, 0x1f, 0x00, 0x5c, 0x54, 0x45, 0x89, 0x04, 0x10, 0x00, 0x80,\n   0x08, 0x55, 0xd5, 0x5e, 0x55, 0xa5, 0x25, 0x15, 0xa0, 0x1f, 0x00, 0xfe,\n   0x1f, 0x00, 0xde, 0x55, 0xb5, 0x76, 0x65, 0x25, 0x52, 0x22, 0xd0, 0x56,\n   0x7b, 0xd5, 0xff, 0x5d, 0xb5, 0xa2, 0xd7, 0x1f, 0x00, 0xff, 0x0d, 0x00,\n   0x17, 0x41, 0x40, 0x00, 0x7a, 0x95, 0x00, 0x91, 0x0a, 0xd9, 0xed, 0x7f,\n   0xd5, 0x73, 0x5b, 0x55, 0x54, 0x7f, 0x80, 0xde, 0x07, 0x00, 0xab, 0x54,\n   0x14, 0x49, 0xa8, 0x6e, 0x55, 0x0c, 0x64, 0x75, 0xff, 0xff, 0xbf, 0xde,\n   0x57, 0xd5, 0x95, 0xfa, 0x43, 0x7f, 0x07, 0x00, 0x17, 0x00, 0x09, 0x00,\n   0x74, 0xd1, 0x5b, 0xb5, 0xa9, 0xdd, 0xd5, 0xf7, 0xfd, 0x5f, 0x5e, 0x55,\n   0x52, 0x95, 0xdd, 0xfd, 0x05, 0x00, 0x76, 0x55, 0x52, 0x25, 0xf9, 0x15,\n   0x76, 0x6f, 0xb6, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xd7, 0xf7, 0xaa, 0x75,\n   0xf7, 0xf7, 0x03, 0x00, 0xd8, 0x15, 0x50, 0x00, 0xf8, 0x60, 0xe8, 0xdd,\n   0x5d, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xfd, 0x5e, 0x5b, 0xff, 0xbf, 0xad,\n   0x03, 0x00, 0x70, 0x27, 0x05, 0x49, 0xf9, 0x0a, 0x12, 0xb6, 0xf5, 0xfd,\n   0x7f, 0xdf, 0xfd, 0xff, 0xff, 0xdf, 0xff, 0xbd, 0x6d, 0xd6, 0x07, 0x00,\n   0xe0, 0x5b, 0x75, 0x04, 0x7c, 0x01, 0x40, 0xa8, 0xee, 0xff, 0xff, 0xff,\n   0xdf, 0xff, 0xbf, 0xff, 0xeb, 0xd7, 0xd5, 0xbd, 0x05, 0x00, 0x80, 0x7f,\n   0x05, 0x51, 0xb1, 0x44, 0x95, 0x46, 0x75, 0xe7, 0xff, 0xff, 0xff, 0xde,\n   0xfb, 0xfb, 0x7e, 0x7d, 0x75, 0xef, 0x07, 0x00, 0x00, 0x7e, 0x5b, 0x12,\n   0x00, 0x10, 0x00, 0x18, 0x4a, 0x9d, 0xfd, 0xdf, 0xf6, 0xfb, 0xff, 0xdf,\n   0xd7, 0xa5, 0x4d, 0xd5, 0x06, 0x00, 0x00, 0xf8, 0xd7, 0xad, 0x0a, 0x02,\n   0x44, 0x82, 0x52, 0x77, 0xef, 0xfd, 0xbf, 0xdf, 0xd6, 0xf6, 0x7e, 0x5f,\n   0x03, 0xf7, 0x0f, 0x00, 0x00, 0xe0, 0x5f, 0xb6, 0x44, 0x08, 0x11, 0x51,\n   0x54, 0x4a, 0xbb, 0xf7, 0xed, 0x7a, 0xdf, 0xdd, 0xd5, 0x75, 0x00, 0x5e,\n   0x1d, 0x00, 0x00, 0x00, 0x3f, 0x93, 0x5d, 0x43, 0x44, 0x08, 0x11, 0x69,\n   0xd5, 0x5e, 0x7f, 0xdf, 0x7b, 0x77, 0x75, 0x3b, 0x00, 0xf0, 0x2b, 0x00,\n   0x00, 0x00, 0xfc, 0x5d, 0x67, 0x11, 0x00, 0x21, 0x44, 0x55, 0x7b, 0x75,\n   0xd5, 0x6b, 0xd5, 0x6d, 0x5f, 0x07, 0x00, 0x50, 0x37, 0x00, 0x00, 0x00,\n   0xf0, 0xff, 0x9d, 0x84, 0x48, 0x48, 0x89, 0x50, 0xb6, 0xd6, 0xbd, 0x5a,\n   0x77, 0xdb, 0xd6, 0x3d, 0x00, 0xc0, 0x76, 0x00, 0x00, 0x00, 0x80, 0xff,\n   0xff, 0x57, 0x40, 0x02, 0x45, 0x44, 0xd7, 0x55, 0x55, 0xd5, 0x54, 0x55,\n   0x35, 0x33, 0x00, 0x80, 0xdf, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x3f,\n   0x15, 0x50, 0x50, 0xd1, 0x7f, 0x54, 0xb5, 0x56, 0xdd, 0xf6, 0x1d, 0x5c,\n   0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x40, 0x45, 0x09,\n   0x41, 0xe4, 0x5f, 0x95, 0x52, 0x55, 0x25, 0x55, 0x07, 0x74, 0x00, 0x00,\n   0xbc, 0x01, 0x00, 0x00, 0x00, 0x80, 0x54, 0x12, 0x32, 0x11, 0x15, 0xf1,\n   0xff, 0x52, 0x15, 0x53, 0xa9, 0xdd, 0x1f, 0x10, 0x00, 0x00, 0xe8, 0x02,\n   0x00, 0x00, 0x00, 0x40, 0x05, 0xc9, 0x44, 0x49, 0x55, 0xf4, 0xf7, 0x12,\n   0x45, 0x11, 0x55, 0xd5, 0x1f, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00,\n   0x00, 0xc0, 0xff, 0x56, 0x5b, 0xb5, 0xa4, 0xea, 0x5f, 0x4f, 0x51, 0xcc,\n   0xd6, 0x3f, 0x74, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,\n   0xff, 0xff, 0xf5, 0x56, 0x5b, 0xf5, 0xff, 0x50, 0x55, 0xdb, 0xff, 0x1f,\n   0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,\n   0xbf, 0xff, 0x55, 0xff, 0xff, 0xaf, 0xd6, 0xff, 0xc1, 0x17, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xef,\n   0xfe, 0xf7, 0xff, 0xdf, 0xff, 0x05, 0xe0, 0x0b, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xff, 0xff, 0xdf, 0xff,\n   0xff, 0xff, 0x1e, 0x00, 0x40, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xaf,\n   0x1f, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x02, 0x00, 0x3c, 0x00,\n   0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0x00, 0x80, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0xfe, 0xff, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,\n   0xff, 0x03, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03,\n   0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x00,\n   0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc0,\n   0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,\n   0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec,\n   0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x0f, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0xda, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0xf4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,\n   0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x03, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\n--ONE\nContent-Type: image/unknown\nContent-Name: not really an image (2)\nContent-Description: this isn't an image at all, but\n\tit is marked as such so that xv will be invoked on it\n\nhello, this isn't really an image (2)\n\n--ONE\nContent-Type: image/x-xbitmap\nContent-Transfer-Encoding: quoted-printable\nContent-Description: this is the same shark xbm, but in quoted-printable\n\n#define=20sharky_width=20171\n#define=20sharky_height=2068\nstatic=20char=20sharky_bits[]=3D{\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x80,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x7f,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xdf,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xfd,0x00,0x00,0x00,0x00,=\n0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0xe0,0xef,0x00,0x00,0x00,0x00,0x00,0xc0,=\n0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0xd0,0xff,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x54,0xfd,0x03,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x10,0x00,0x49,0x92,0x54,0x55,0x45,0xeb,=\n0x07,0x00,0x00,0x00,0x00,0xf8,0x3f,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x10,0x41,0x55,0x84,0x44,0x85,0xa2,0x50,0x94,0x0f,0x00,=\n0x00,0x06,0x00,0xfc,0x17,0x00,0x40,0x12,0x12,0x42,0x00,0x01,=\n0x04,0x04,0x51,0x75,0x75,0xd5,0xae,0x55,0x10,0x00,0x80,0x0f,=\n0x00,0xfe,0x1f,0x00,0x5c,0x54,0x45,0x89,0x04,0x10,0x00,0x80,=\n0x08,0x55,0xd5,0x5e,0x55,0xa5,0x25,0x15,0xa0,0x1f,0x00,0xfe,=\n0x1f,0x00,0xde,0x55,0xb5,0x76,0x65,0x25,0x52,0x22,0xd0,0x56,=\n0x7b,0xd5,0xff,0x5d,0xb5,0xa2,0xd7,0x1f,0x00,0xff,0x0d,0x00,=\n0x17,0x41,0x40,0x00,0x7a,0x95,0x00,0x91,0x0a,0xd9,0xed,0x7f,=\n0xd5,0x73,0x5b,0x55,0x54,0x7f,0x80,0xde,0x07,0x00,0xab,0x54,=\n0x14,0x49,0xa8,0x6e,0x55,0x0c,0x64,0x75,0xff,0xff,0xbf,0xde,=\n0x57,0xd5,0x95,0xfa,0x43,0x7f,0x07,0x00,0x17,0x00,0x09,0x00,=\n0x74,0xd1,0x5b,0xb5,0xa9,0xdd,0xd5,0xf7,0xfd,0x5f,0x5e,0x55,=\n0x52,0x95,0xdd,0xfd,0x05,0x00,0x76,0x55,0x52,0x25,0xf9,0x15,=\n0x76,0x6f,0xb6,0xf7,0xff,0xff,0xff,0xfb,0xd7,0xf7,0xaa,0x75,=\n0xf7,0xf7,0x03,0x00,0xd8,0x15,0x50,0x00,0xf8,0x60,0xe8,0xdd,=\n0x5d,0x7f,0xff,0xff,0xef,0xff,0xfd,0x5e,0x5b,0xff,0xbf,0xad,=\n0x03,0x00,0x70,0x27,0x05,0x49,0xf9,0x0a,0x12,0xb6,0xf5,0xfd,=\n0x7f,0xdf,0xfd,0xff,0xff,0xdf,0xff,0xbd,0x6d,0xd6,0x07,0x00,=\n0xe0,0x5b,0x75,0x04,0x7c,0x01,0x40,0xa8,0xee,0xff,0xff,0xff,=\n0xdf,0xff,0xbf,0xff,0xeb,0xd7,0xd5,0xbd,0x05,0x00,0x80,0x7f,=\n0x05,0x51,0xb1,0x44,0x95,0x46,0x75,0xe7,0xff,0xff,0xff,0xde,=\n0xfb,0xfb,0x7e,0x7d,0x75,0xef,0x07,0x00,0x00,0x7e,0x5b,0x12,=\n0x00,0x10,0x00,0x18,0x4a,0x9d,0xfd,0xdf,0xf6,0xfb,0xff,0xdf,=\n0xd7,0xa5,0x4d,0xd5,0x06,0x00,0x00,0xf8,0xd7,0xad,0x0a,0x02,=\n0x44,0x82,0x52,0x77,0xef,0xfd,0xbf,0xdf,0xd6,0xf6,0x7e,0x5f,=\n0x03,0xf7,0x0f,0x00,0x00,0xe0,0x5f,0xb6,0x44,0x08,0x11,0x51,=\n0x54,0x4a,0xbb,0xf7,0xed,0x7a,0xdf,0xdd,0xd5,0x75,0x00,0x5e,=\n0x1d,0x00,0x00,0x00,0x3f,0x93,0x5d,0x43,0x44,0x08,0x11,0x69,=\n0xd5,0x5e,0x7f,0xdf,0x7b,0x77,0x75,0x3b,0x00,0xf0,0x2b,0x00,=\n0x00,0x00,0xfc,0x5d,0x67,0x11,0x00,0x21,0x44,0x55,0x7b,0x75,=\n0xd5,0x6b,0xd5,0x6d,0x5f,0x07,0x00,0x50,0x37,0x00,0x00,0x00,=\n0xf0,0xff,0x9d,0x84,0x48,0x48,0x89,0x50,0xb6,0xd6,0xbd,0x5a,=\n0x77,0xdb,0xd6,0x3d,0x00,0xc0,0x76,0x00,0x00,0x00,0x80,0xff,=\n0xff,0x57,0x40,0x02,0x45,0x44,0xd7,0x55,0x55,0xd5,0x54,0x55,=\n0x35,0x33,0x00,0x80,0xdf,0x00,0x00,0x00,0x00,0xfc,0xff,0x3f,=\n0x15,0x50,0x50,0xd1,0x7f,0x54,0xb5,0x56,0xdd,0xf6,0x1d,0x5c,=\n0x00,0x00,0xf5,0x00,0x00,0x00,0x00,0xe0,0x03,0x40,0x45,0x09,=\n0x41,0xe4,0x5f,0x95,0x52,0x55,0x25,0x55,0x07,0x74,0x00,0x00,=\n0xbc,0x01,0x00,0x00,0x00,0x80,0x54,0x12,0x32,0x11,0x15,0xf1,=\n0xff,0x52,0x15,0x53,0xa9,0xdd,0x1f,0x10,0x00,0x00,0xe8,0x02,=\n0x00,0x00,0x00,0x40,0x05,0xc9,0x44,0x49,0x55,0xf4,0xf7,0x12,=\n0x45,0x11,0x55,0xd5,0x1f,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,=\n0x00,0xc0,0xff,0x56,0x5b,0xb5,0xa4,0xea,0x5f,0x4f,0x51,0xcc,=\n0xd6,0x3f,0x74,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,=\n0xff,0xff,0xf5,0x56,0x5b,0xf5,0xff,0x50,0x55,0xdb,0xff,0x1f,=\n0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,=\n0xbf,0xff,0x55,0xff,0xff,0xaf,0xd6,0xff,0xc1,0x17,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xef,=\n0xfe,0xf7,0xff,0xdf,0xff,0x05,0xe0,0x0b,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0xff,0xff,0xdf,0xff,=\n0xff,0xff,0x1e,0x00,0x40,0x05,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xaf,=\n0x1f,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x02,0x00,0x3c,0x00,=\n0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0xe0,0x00,0x80,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0xfe,0xff,0x07,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,=\n0xff,0x03,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x03,=\n0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,0x00,=\n0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x00,0x00,0x00,0x00,0xc0,=\n0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,=\n0x7f,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,=\n0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x70,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xec,=\n0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x1f,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd6,0x0f,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0xda,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0xf4,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,=\n0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd8,0x03,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,=\n0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};\n--ONE\nContent-type: multipart/digest; boundary=\"DIG IT!\"\n\n--DIG IT!\n\nFrom: jwz\nSubject: msg 1\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948611520.21002.12@Jeffreys-MacBook-Air.local>\n\nmsg 1\n--DIG IT!\n\nFrom: jwz\nSubject: msg 2\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948613620.21002.13@Jeffreys-MacBook-Air.local>\n\nmsg 2\n--DIG IT!\n\nFrom: jwz\nSubject: msg 3\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948615610.21002.14@Jeffreys-MacBook-Air.local>\n\nmsg 3\n--DIG IT!\nContent-Type: text/html\n\nWe now interrupt this digest to say <B>BITE ME</B>.<BR>\nThank you, and good night.\n--DIG IT!\n\nFrom: jwz\nSubject: msg 5\nContent-Type: text/richtext\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948617610.21002.15@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\nmsg 5 <bigger><bigger><bigger><bigger>in richtext\n--DIG IT!\n\nFrom: jwz\nSubject: msg 6\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948619600.21002.16@Jeffreys-MacBook-Air.local>\n\nmsg 6\n--DIG IT!--\n\n--ONE--\n\nIf you can read this, you're too close."
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.4.msg",
    "content": "Return-Path: <beatty@COSMOS.VLSI.CS.CMU.EDU>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA15292> for nsb; Fri, 28 Aug 92 15:13:14 EDT\nReceived: from flash.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA15320> for nsb@greenbush; Fri, 28 Aug 92 15:13:12 EDT\nReceived: from COSMOS.VLSI.CS.CMU.EDU by flash.bellcore.com (5.65/1.34)\n\tid AA24840; Fri, 28 Aug 92 15:13:07 -0400\nMessage-Id: <9208281913.AA24840@flash.bellcore.com>\nMime-Version: 1.0\nTo: nsb@flash.bellcore.com\nSubject: mew-law encoding?\nContent-Type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\"\nDate: Fri, 28 Aug 92 15:12:35 EDT\nFrom: beatty@COSMOS.VLSI.CS.CMU.EDU\nSender: beatty@COSMOS.VLSI.CS.CMU.EDU\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nI recently got hold of a filter that davecb@nexus.yorku.ca wrote, and whi=\nle\nit's not perfect, at least I've been able to take the \"No NeXTmail!\" slog=\nan\nout of my .signature.  And now that I just thought of such a terrible pun=\n,\nas is in the Subject: above, I couldn't resist inflicting it on someone,\nand you seem to be the most appropriate victim.  Anyhow, I guess this is =\na\n\"fan letter:\" thanks for MIME.\n<nl><nl>\n\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\nContent-type: message/rfc822\n\nReceived: from po3.andrew.cmu.edu by COSMOS.VLSI.CS.CMU.EDU id aa13358;\n          26 Aug 92 22:14:26 EDT\nReceived: from sqhilton.pc.cs.cmu.edu by po3.andrew.cmu.edu (5.54/3.15) id <AA21478> for beatty@cosmos.vlsi.cs.cmu.edu; Wed, 26 Aug 92 22:14:07 EDT\nReceived: by sqhilton.pc.cs.cmu.edu (NeXT-1.0 (From Sendmail 5.52)/NeXT-2.0)\n\tid AA21178; Wed, 26 Aug 92 22:13:24 EDT\nDate: Wed, 26 Aug 92 22:13:24 EDT\nFrom: beatty@sqhilton.pc.cs.cmu.edu (Derek Beatty)\nMessage-Id: <9208270213.AA21178@sqhilton.pc.cs.cmu.edu>\nReceived: by NeXT Mailer (1.63)\nTo: dragel@sqhilton.pc.cs.cmu.edu, beatty@sqhilton.pc.cs.cmu.edu\nSubject: mail from Wacky\nX-Next-Attachment: .tar.192.mail_from_Wacky.attach, 23976, 1/1, 33000, 0\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=n2m-MIME-boundary----------\n\nThe following is NeXT mail translated to\nMIME format with n2m. This always starts\nwith a file called index.rtf, which is\nthe actual mail message in Microsoft's\nproprietary rtf, containing references\nof the form \"\\attachment<number> <name>\"\nreferring to the other components.\n\n--n2m-MIME-boundary----------\nContent-Type: text/plain; type=microsoft-rtf; name=index.rtf\nContent-Transfer-Encoding: 7bit\n\n{\\rtf0\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\n\\margl120\n\\margr120\n{{\\attachment0 VoiceMail_beatty0.vox\n}\n}\n\n--n2m-MIME-boundary----------\nContent-Type: audio/basic; name=VoiceMail_beatty0.vox\nContent-Transfer-Encoding: base64\n\nLnNuZAAAAJgAADsAAAAAAQAAH0wAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+cW9ze/Lg09XT\n09/d7W/56e30+HH29/vybf/x5eP6dm11b2FeW1dXV1xjZXR5b23+dmBaXmRoa2psb/9wcXLy\n6OTZ3ev+WFNYW3zk3dPNzs7N2uj0aWxqXmNjWlxfcOrk2tjW0djqfWFUTkpKSktOV2NgW198\n/Pfp4Nfb3+Hz+2piYFpt/Pbr9f1uZ3P23tTY09HT2PF0bGJmbXLv4Nza3+j8b2pfW1po+vDk\n82plY15ZXFxeXFpoaGRsXVVXXGFibO7f1NTc7Gx4fGrw39rX3dnd83dtcv/m3t7h9vrn72ln\nYWFdXW57cmhpY2VkaftybW9lbnBoYldYYWf67f9nX19lfHJ89fD6cG59++Xe4d7b2tvc5OPi\n3+Ht5OPo7Pzx9PnzeG5xa2FhW1haXV9YWllYXV9tfXJraGllZWFt9+XZ19bb2d/veGRfWltl\nc+ji6/b9b2hoaP3c19fY4Pj15+Pd09HU0tjlbF9ZS0lJS1VhZmZhY2RdX2ReZV9ibG3+d2df\nXWVte/r983z7eWZmX2d+7tvV087O0c/P0trj/3ZtaXNx6+z68Pv6d3b28e/m7HphU05LTE5R\nXGd0697W1+Hn7/ZsXFZST0xOUVZcc+3k29fX2Njd4up8bv3s4t/d3tnZ3Nvg4vn8+WpxfmJc\nVlVYWWlv69zb2+NsXF1eX1RRWltfWVhdVlFTWGrs3tbW3N7i5u18/Hb/7Oze2d3j4O94eHR6\n++vv8erv5+ni5e/s7//w3uXv/2deWVhYWVVYYWRiZWNr+nFxY15jVVlfW11kX1/939na39rT\n0NLX2+TpfmNud/vxd/Tq2s/S1tnjemlgV1FQU1pjbHJ18vDq6v50ZFxVVVdQUFBNU1lXYXXk\n2NjZ2t77YF1iaW9w+ODe2dTR0dzh7fx79urm3d/r5fL09m/0/XdybGxqYl1nbfTp5t3c3eV5\nXVdNS0xLUldcb3j5/+7n7HlkaWddX2xyem53/3NzduPW0M7P2+t3fv1tfvzs39rZ2d3v7vdv\nZ11ganL4+3JlW1tfX1tebG5sZ1xQSk1QV2br3NrZ1tTj7u9oX19j++rh4fv07Ore2tva2tve\naVlZVVdcavnp2tLO1eh7YlhVVVZaXF5eYm/89Hx1en7s4t7n6PNpYl5XVFxu/PXi3ur1/Xxv\nZGVmXV1lbu3a1trY0dHV2dnf9vbu83FlYVtlfHL07uvnfXNkVVBMTU9SYWlxbWZqZl1XUFBb\nZ+ve9Oze3dXZ4eXj3NPW3uh9/2x37u3h4ufp6+z2dWxgbHhpb373+fHve3FpZWxscfbvfW9f\nUk1NUVNbbmtpfHh+7eng63vv8Xt7a2Ztbe/h4N3e2t3f3N7o6vbq6vz07e3yeP3qdm/57/T3\n/n309nZtZlhWWFdYXGRjW1ZbXlhSUFRdeefh2tTU197d2uXufW9tZF1YXmd99nfw8ebf7e/s\n6ejr8vH9+urp5N3W1+Dt83dsXVlfXl5hXFZVTk9QU2VvbnJy/ezr6Ojl5ffv7/Dq+OXl3tri\n6O7x7+rm3dLT5X5lX15cbXZ3/v7s7HJfWFZVX37r5vrv3ud5aGFjX15dWFdWU1NRVlpbYWFs\n/e7l7vdybXBqaf3n29LS0c3O1t/Z1dbZ2NjY229mZmBpZGNdX2tiYmNbW1xgaGVqZGFgX2Jt\nfWttaGl0eW1pZ2jq39nceGRZVVhbY3zx5N7b2Nzi7eXe2dLP0tfe4/X79XH6/Ovi5OLl43dc\nV1lYTUpLT1FPUlBTXWVqbnbt5O14cWtmX1NUXvjb0s/OzdDW5/94ZGBlcvZ2dHl57OTf3+je\n5Ozs9fZ89H1tal9lZ3Dx/25nbHt4evxybGtqbmNfXVlZXF5fY1tTXHrr6Orf3uXn6ur3aXN7\n/d7d1s/RzdLV1+Dk5uHl9v/9bmVfW1ZTV1VTVVJQWFRPWGJ95t/h4eXu+v31/v96cG5jXl5o\nZ2p19ev8cmplZmhsdfTr5Nvc2dbU0dve4+no8/j2+Ozk3N/vbmdlW2JfVlZWVFRUUlZcY299\nbHrudW5iXGNeX2NvbXrk29HR0tbb5ubk693Z19Xj6OL4e2tfWFZbXWZ5bGZjXV9ocfTr4dbe\n49/5a19j+ent7n3s/V5ZTUtMSk5UXmJhdO7g4ejf6ezg5t3Z4ud8/+3n4u/p593c6eLm4Oh4\ndl9rfHrweXBsY19scmxtXFhZVVVOTVFTX23y4d3e7fTr4t/f5/jy7vZrWl1u9NnV0dDZ3fho\nXmV6d3RjdOl7dGtkX1xnfuzWz9HV3+XzamJcW2FXVVtcZmlmaGBibfHp9HhiXV5ZVFNZZ23h\n1NPP0Nj0Z11kePTq3tna3u93bXN77Onq5efubWFiaWxpamdvemtlXF1eYGBhYlxoaWRsa3j9\nfW937Ojm7+7l5+v07+7/ff979vju7H5vanv9dfLi3+X77+De4fbt4er/efr/fPjk4eDe3up5\nYFFLR0ZISkxPVmP96+jn3dzd5u36cP78fPvud29+9vHt4+ne19rlbFpQVVlbaXfq7unV0tzh\n9XTx+vdyXl9XWGBeWl9zdPbm5OpybnppbGlnY2d3fOrj5ezz+HtlX2Zpam997+zl3NbV3OXv\neG5tb+/s6dva19fV3PL/eG5iU01LSEhIT1pqevjc1NfW1dvqeGJsaF5gXFpcX2FgXV1p69fS\nz9fn9Wty/P3u7N7X3ePq8HhpbmlhZ25++HFhV09NT1VaX2d0ePvq3+Dk6ufo6ubf3+95cWZZ\nVFVXWlxYW2Fo89vV2NTPztXg7vbl5O/q39ve5Obp63z97f95//11bmJaVlBYYmZ78fHm4fNj\nWVhcX19eW1tbV1RUV1haZWv04eDm+/jq5ePj29jQzMvN0d7u6ndfW1xic/1uZ3F2aGpva/Pt\n5N3l7mNbVFNeXWRsfd/j82NXVFBOUVVZWlx1ePvw/ejo29DMzM7R2d7vcl9bZvfh3OD1dGl0\nZV5jYn7z7eXt5+Pr4uf7+XhtY19kYGFbXWtwdPj9fvrx82NSTExLTVpefeLh3tzZ3NbP2t/e\n625nb3d6fvv16+Hf4ux1aGZjZ2pzc3Pq7Pf7dnD9+XxwZGNhVVRUUFVaX2Rrb25rbW5oZWV5\n7N/Y2dzl5efc19zi7OTs+nj68fDv6OLn7u/1fu37bGJUXmds7u/l5np+8fp5/P7792tcX11W\nT05UWFtncnVxbG13/3vq5+/s7+zxdG58/Hv/9e3r4d7Y2dvX3+rtfmtsbHXt3t3f3+Df7Hpn\nX2FbWVVPV09OVVNUWl1jXVNXV11oX2Vlb93U0M/OzdDNz9PX3eZ5dm9kXFtZXWhraGVy+uzf\n3+Xk6OTu9nx0/Wxufu33ePT073t093txZ19dWVlYXmBZXWBrfv/+/Xr+831++nX+7PD7fOvf\n2dPY3ub16tzb3eLn5nppaGBlW1xdVVhUT1JPUVlbYmh9/m95a2xrfOvg2tvj5+n9/3Jo+319\n+Pzu/Xj/efj+aHHu6ert3t3f3dzb3uTs7OXi3+ri3+fr/mdfXVtdXWFeXFxdX2BeXFZRUFRX\nUVZdYWhv8ebh397d1dDY2Nbe5/dtaW3t4t/d4+Dg8/T15+vf2flkXltYWVxfX2dob+7p421Y\nV1FTUlRbYG1v//T+bGVoZWht8+Pr9v9pXmRofOjf1NLb3N7zev57fPHu6eTp5ezp397l4ebq\n5OLi4Nzna15YVVxaWF5lY1hYWVBRV1lcbPLp5uLf6PHv5enq93ZgV1ZVWF5gft7b1tfc4N/l\n8+jo4dXV1dTU2On2+2dfXFpXV1dPTlFbX1laYHB0c3dtZ1tdZGJk9e/46eLj7HpqZmZibe/k\n297t9XR99/7p4dnRz9Lf6+13ZGR373FfYV9eanF97u/b0tTb7+7+X1hTU1peY37/9GpdXVdX\nWFtkdX53ZGFcWFxhanH139nU1dvW1tzY0s/U1tLT19zo/3tdUltaXWJkdX11ZFpaWltdW11l\nYV5aWV9aW19p+nj/7/t0eO75anRvefFoZnVmaGdr+fLp5+TWz87P09TT1ePr93lmXWRdXmx3\n79/d3+fz8356fmddXWNdWFlXXmFdXVpZWVpjc/Xo8fLw9+Pe19DQ0dvsbV1gYV5cXW/t7Ovg\n3epzdfvm3+vs7v59fWRfZXb/9/NvdP13bGNcWFZYYGhsa2dhX19ZVllbXlxpenH97+fd2dTU\n3e3/5Nzt9vj44tjV1tna3uXtaWjz83doZ19ZVlNXZXNoaHbr3ehybG1u/ejyfHhqXFdcW1tq\ncujd5uzv7/X8a2NjX2VrZG91b+3j2M/Nzs/P3ev1amJz+//u9HR5dWxrZltYVltibfVyYmNe\nVlRUW3VsX2JZU1hUU1dbeeng3eLc297h4tnY0s7R1Nvne19fXVtq//Pt7OPj5uPv7+n9//dz\ne3dvbWVgZGV47OXf6u52X2BhXlxbWlxfZFxaWFleZ3p5/unu/HhlYmp149rW2N3Uz9XZ3Xxv\nfe7h4enzdfnp7+7r393l7HZWU01JSkdKTk5RW2N1/f3u7u7n5Ofq6PNvbGpjaXD74t7d2NDS\n2ufue2ZwaV9eXGRuYmb66Orn393e2tzg5ern821iXWNnaGNqbXP9bntzX1tVVVhXXW567eLb\n2ujzamVvZHHz/vfs5t/g93VsbOrn7/VoYmz23dvb2dzb3Nvb2NvtcmRcVU9NTExPWmdrYFdV\nU1xeW2Vrcmxq9XRlY2P88+vZzsvKy87Q1OF3ZFtVVFNYYm70397p6PN98fTv5une2+Hp7/j4\n9GxdaGNhblhRUk9OT1ZfaGv67uro7uzh5O7x9+/t6u5+fv729n3p5ufr6u58ZVxXU2Pu593Q\nysbIz9Tf5exrc2hlXlNRT1ZcYV5XV1xfW11fXV9aWGJjau34bPt7b3doX1hYXGfx7uTY19vn\n9uzm8/rt69na2drk3dva1tznfWlfYVhWW1xgWV1zamt17eHi4+n89vRuYmN3Z19nZWxfXGhg\nW11ibnl7dnf1+fbi2tDQzczSz87S2Oh5al9eXWRtcHBpamNfXGJfXG3+/29kZV1aWFRUWWBp\nbXN0eHz+em1dV1lYXGp2b/T+/Ofk3djUzs/U2d/5//NveGpibnvy7eLX1tfa6vd7/f1vemNc\nYlhYWFpcXWBkbmNlZFlgaXJqWl1XVldVXHjl18zGxMXH0e59altWVFVcaHL15dza2dfX1tLa\n3dzv/2NcXV5z6t7q6u96clxXVllXU1dVU1RRT05PUl1cXHL87n59eX3x/vXr39rY3Obt/nty\nbnrk2tfc3Nnt6tzd3tvb2tvkdF1VT1RXVl1cWltbZG1lZW1+6eHb19ra2uHmb1lST1NWVlJV\nWXHm5dzX1dTX1tnf5X1yZ19gW1tv7NvV0M/T2Nnfffx+aGReV1RPWGBaW1xneHd6eGxsZ2Nm\nXVpaXWNubGRaVVZYavHe1tLR1t3e3O365t7c4fHs6uzw7/J2dGtufGxtcW1xdHNpX11gYnLn\n5PRvZV9cWFhm/+Ti5fFweW9sZWlkX2JqdW747vDd3d3T2+vs4NjX3uXub3Vlb/N88O94cv9y\nbPj8+Hhsc37p/19bW1pgXFpZVVpYX29m++ji3eLj4fRtXVZRU11ZX296fvrn6N/c3Nne6u3p\n6PHx6N7c3eLo5+7i2+Lj83Ryb2Nea2RhXF1eVE5PVFhga3JsbGVrbV5pb2lubG729Px78d7e\n6Onf3tjT0Nvo5e7t+ntvaPr05eDs7u7i4+31fPtxYmhcXF1ZWVteaXn+/Xz8bWFbU1BSWVxg\naXjv+21rdnF0c//+5trf29na3eba2Nne7/R2/WVeY1xcY3rs5+Hc3uv6dmZgX19pbmRteG9o\nZ2djbHhwYV1cWVlTV1team156dzi39/i2+Dv7urh39XX3d7e3Nzh7vL092xobnv/eurl4t3h\n5uxxa2NaWFZaWFhZV1pfXlxXWWVw7urreGRrffv88+v8/WZkamRkYG748ere3d/p5PdldVxk\na151eXT97t3W1dDS09DY5WtlZGVqZF9hamhobG1pXFdcV1NZXmZiYmJfWl1qb3n94NvV1tnY\n393z8eLs4d3b3/Hf6O/1ZGZ3bfzu9uLk/GhcX15p7Ovl73NtYV1gZGJufHF89X399fPlbV9p\ncndfZFZQVVBba354YV5gYWn86d7Sy8rLztze6nZlZXdsdff4fX11bfbn5/D7dmRZVE5MTktM\nV2f593pkZG17/nTu3NPO22xdbO7o7N3Pzc7X1dTa7Whu/+19aW1cWmdeWFNRYmlk/fTf1t3m\n6+Pe5Hrm3uTkam5nWllQTE1NTmdrYmlu5etzaGFjZ2Nq7m/x52/s9ffc0srL1d7f/HV2bvJ7\n9ebe3+Lrb/5hXFlaaFJOWVlaW01XcltmX2DseG/t5ej7Z/fb5d/v7t5xeenn5+j95t996295\nc1Zlef3/+OvT1eHeam/vaHTv5eHpdOPvYnJd+/Jd9e/5bF9cWFVQaXDq3XnscGNnXltjWk9h\nXmplTllYX3lv6M7MzMbP0tTm1dfa09vse2tbXk9PVk1bY2zs93T193Xva2piWWpwYV1eW2xl\nYO324d/s2+ns61xOVU9PWlj24+/Ry8rKzc/N2vR8XWdmWmZqZmds+eJ+/e3t5HdmYmJeXVxf\nb1xx6+jg5dnX321na2x+WV9tamhRUFlbWVtd/OJ05vJ2dV9kcuHV0trR1e7Z3dbc+frv3vP7\nbX1eVFtYal9cafXd7uv++F5TW1RcVE9cbn1lZmpyV1t0b9zf29HQ2vTm93leaPz82+Lc6HBp\nVltq/mbr3O3Z3tjT2N3u3+znbnV5aHVTXW9sYllsYWJcZm5o6WRk+m9yanZcU1BUW1v8+ezm\n49zt2Oj06vvb6t3gdP1x7ufb2tnb39vs6XJXV1lgZHFpbfh0+11mYVZkZf1pffxtZlNVT15l\nXX545vLvfHJ5ZeP14Odl697Y6un3ce5z8Xju39/b29Ti3t/p6fbg9u5vWl1ZXU5SW2dvXfr2\nfHJfW2BgWG7v6W5q7WFnYllt9+D/7edxW1p9+uTm4dPKyNna5fxta3JfbGR14NTP5+f2enhv\n7Ork4fdyYllNTExMS1d7YXduWldRTElf83n34dff4eTt/nh+bdra/HZod15jbF9ndN7ZzcbO\n0tTT6O7b7uTf3+975l5OU1pZYuH1fvH7YFFeUFlmaW9k7GFXV1RYUmdcYOfs91xuYFp1b31r\n29TWzNDU5djZ3tHa2OzZ319uaPV27OHy2el9X2BuW19dWlpZYFVST05SXm9fa3n7aV9pZnJh\nXm357OnudfDvb3Tw4dzd393m4O5gdW136dfLztTf2djV1e78Zl9TTFlZV1lZbunf6X5vam9u\n9n5bYWFfaWVmVVJVWFtd+m9ka2l8/+Xd2tXa2eTm3eLl6N/2/uPe2ebq/nXe4PNsZn1u893h\neWzyZmR5ZVlbW1ZUXlZNTlFYUVxpW2dqZ3bq2vDz3dvd6t7xbXhncejY3+ni9+bs6Ofs3/b+\n6eHj49/m6ubr9O3feF5jaWRmbG5eXl5UYHF6Zl1eXGV3c19fZldfbH5+eftsavbm93n5c2v6\n4dnc5nV66+v493pr6t/b1tXY4vTs397Uz915bnBdW19VU1VUW1tnXlFWVl5obW9eZGZdXFlg\nWVJYYurj4+Hj1dXTzs/L1+Dd4N/r7uxuaG7u59/f825kYF1kbGhaUVJYW2dnYGx+6/7v2ufs\n9XJ+ZHBfVVdXXVvr1+jk39zxdup1aGNzZGff5v3w3N3o29Hd9PVqa/3sfmVvem923djee3dz\ndvVqV09XXVpodmhbWWVqaXBoVFReXlxbbnxfYP3te/n7W2fu6+/XyMrOz8zQ1c/c6Ozs8nPb\n23NdXGVXU2FfTk9UUlpjZllRX2ll79nZ4N7d3/jt/Vdd8+lwZnZrYWViXF/5cmBj/uV49OZu\naf/t9uPP1uLi0MzXz8vV7Pd0XX3id15h/2FYanNdVFlaWGRtXFFNV1JQanx0Yl9vY/n6W1dd\n5e1y3uFwfN/Z3tbT2+rr3+vp39vm/u/0fN/Z6nt+9l5Zef9dWWVlbOnyfX11b2dq+PNdWGZm\nXm/+Zl1cYFtm/WVVV3NgauHc3+7f2dzb2dv7at/e49nk+Pnx9e3l2tfscndcW3Roa2Vo5tfe\n4+RvXGlrY/NqXV9MSElLVVROTFhfYevv+unt3dXf3tve7+bZ3NLX7G9h8eHm4t/ucf5pWm1u\nZXho++J49+94bP35dt/h7HpaX2VicmheXGZqX+zm+HFXXGZfZ21dWmpnZ+ff4/9p9eze3uL4\n59bf6dvX5vjx5Nba2tnm397vYmhvXV5UWF9ZVlxZV2psaeLsd/9cXW5kXWFSTVJPTV9taHl2\n6dzd5djW6dnU39TW5v9faur+au7s9+jh9N3fdvZmY/DufOzj6e/yYnjuX2xWVW9qanJra2Vi\nW334XV5WVGNmWltdY27r8d3Z79/rcefe9+ff293b3dnX9OfwX/bq7OPs8WX+9nF6XP7tVnzc\nbGpobV9dZW75X2ZfSk1RSU9aZ2v42dXW693fW2zfbnHx6f128P31aWn8XXzT4Ord2+Xm09LO\n29nO6PzlWU1OUE5KVV/3eHHoWVnrY1pud29eY19eXFdkWF3Ny9nR0eJ0+n3v/2n0a1/Y21tk\nbGNccOHb2tTL3Xva4F//3Oxpeuf5/29yV0ZSZVRab3ds6Nfe6vjyWEdXZE5RX1RPWmV5++/Y\n1uPVyt7p1uVra/n/e/Pq6WBj1uX70dji5t3e7vxwYU5W9V9UbnhqePPq3+jo4mtZcFNET05O\nUllfZH3s5WBb5uZm4Nnm493V0NXRz+T22NZu+21dYGZya/n68G1d5etZ5+B0+3Zvd+Pe331W\nae5bdvBgXVxbVltVWlhQcfJo3dPu9vX99uzu7GpX+uVp+upmXF1h7dfc3Opq39R689746NjT\n1NTf4nZXZWtOUlxPUVlSTVVRUlFNb+5n7tPa4t3j8+3z4uB63tlxd9t+ZvL/b+7w6vxYZvdZ\nYdvd2tDP2Nvf4vldat92etTd7Ox3XWNfZmRQUlxTUmtaU11jZPvo5eVoXnFfVuvqcPbxbn3/\nZV5XY+PffNPY8fP55t7Y2Nro9tbUeuTpZGJaW2BoX1xVUV12W3fsXm348/9samthXXjfaWjn\nb3b2dfbt9nddV27hXlb0/e3j4eDf2tvpbnPf6fPT5vXd4OXf4drl/O7t/GTpemNr/3N4d11X\nTVBcU09naGNmc3r17GZmWVRfbmD37m1seG1o7G/959zQz9ve3+t5evt33+Lj6X3/cVZWYGd3\n/PTv3P5eVk5NUVlh5NzS1d777OxfWE9QXHH02d7b2Ptj8+Zzcv1wbv1teWdrdmZq39LU1NTa\n8/xt/2peZVlY/9jmevX3bPDq5ubu5fJreN7vX15ZUVZYTU5XZGhYZ9rd/H1rVlZpbGNy5t7v\n69jb6t3X4PXZ0+7q2uJqW/niamNrZFdu8l9eeXZPU2f8emvo8Wbj1Hd43u9XTFn0aVljcWNs\n3Hxe99/scOvZ3ujm9WFm4WxZ7tjrdOXW1+fg6FtPbu1l79rnc+jb1+Px625n5uVbWV9XTFBd\nZmRicVxSXX5jaOfoamtreOn09Whn7tba4dTY6fz8fevvZVxYV2JmZu3q/nrh1dDP1N7/Y2Zq\nWFdXVlp29t7b7WtXUU1TW2z2fnt4X1/x9XNpfO7j2NjS3Ph3b3Lk3vlveOji6O53ZWFeXWTl\nz9fua19XW2Fo7t7d3+fUzd9dT1BQX3zv3uPvb1FPY1pMTmFvb9vd3tvs+l9c/fldWGlfV2n0\n6ufXysrNxb/M3uHxW11nXFpfZ11XdedgVVVZT01cVFJaXlNLVvPq6+DU1drW3+Z7YmBRXNva\ne19mYVltb2L83dXU0snH2fr+bFpkcGv8/O1tX3ni72ru43ru2uLq6/ViWXbc52tZUVNPXWtm\ncW5hVlZw83BiYHp0c3loaX78aWjj0d3q593T0MzN09TY5mxo5vBeU1VZTE1SVl1s6/z32Nbe\nZGZlT01NTE5QWV5h6N7e5ObU2t7W19/o7GlVUmJcTk1bZ17z0tPX1Njd3trQ1ejl3t/s4995\nev3u39vT1O9kX1NQW15RT11cV1pbW09LUVNPXuXf3tfY4Xt09nBYXWtlceXh6t7a2dTS1dHV\n2dLW7OrZ7fDqcGFZVVlVUFVYWFxvZlZTU1FefeTlZFpWU1Rn+vXk3trd4t7Y521fXFhp/Ftd\nYWN0c//o4eTb0Nba0+rv7/na1tHLyszS2+1eZ15XWFBaX15faGJYU1hXYuDh72hvXk1LTk1M\nTFRdadrb1dva09TR1dLS2uLn7drc4fNj8ufv+e7n5m5tZ11pXlxVU1pgbW7/9WlfYWby7nRq\nbu/e33F3bV1OTE9RY1xaX11ucmRrbvX9Z+zc09Dh39vOytLY3dTN49zT3Nh7WVdPXGBaan7k\nblpxa/36dfhiZ3dgXVpdUk1YX219Z15fddvZ7mx+/FtbZmro5fvf2tTP2d3b2Od4aF5eXVZe\n7NzN0ePd1tjkfndqbGBPUFBf+2dne3j7bWh4ZnxiTU5LTVVTXnPs53Fvbnf6YWTy4t7ydvbk\n2NbUzszN1tXP1NHW6O1sWVRRV1575nr67vtrWV5gZWxpaml1/WVaZlxUV1FVXnj/Xmvm29ns\n7npzeWddWV9gXF12593a3dXW083b59jS3XV2/HF3YWbj3dfX7+vk5vtlevr/aVFSTk1TTUpN\nVVVLTVlr5eHc4/Xm7mdv8uxdT2Fw6t/+/3P63d/n3dDP4uLc4NnsZWxu8OP3/e3j73Ll4dnS\n73Z3YWVQS1RYXVxea2/r5Pp5aWZkWVZZXmJi/erc1d/n5eXk9W1ye3L5d2R36+tya/5v7eXW\nysrM0tfe3vNqYWB4cW5la19YVUxMS0xIR0tXaW57evV5fXJfWVlaZOno2+d9e+jY3NPO1dHV\n9Pr1bv5jbOTg3eTP0+Te3/BrZXxnWnv4fW5kZ1xdZF9hc3D0al979+hmWF1ZWFpSW+7h33f6\n3+fobmZrfu33bXPvfmFXbN3PztLPzs3L1ODi7PlZTllYZ3Fr8Xls//r363xkVE9YYWBZX1tc\nZFtkbWFcVFFid/D6YWhoZFleanL9/drd1tDRzM7R29/zbXrs7Pbv/+TtbnZqeunvev/+6ejo\n9OrcfXBcXVtOUlhtb25gWllZX2RlZ3ZqaWVvbnL2bPbo5urt/XHu5fLo2trS0s7P5NjW3e9w\n7nBdY2Zz+mZiYVpnXlVMSFhiZ/Pn4+94bGRcXmVuZWR5bmRoaV7+cHz7fd3f3G905Pf0/GJf\n9m5lXmbe29LV1dHSzNba2Nng/llSXFpcVF5la+rv7Ozj+2pWUltaV05WWWNsdHHr2up7XGP1\nallQW3Vpde3r2NDOzM/My9Pna2deV1NNTvXUztHY0tXV8G5sZmpdWV72c1xSWPbm71xlb2FX\nT0xIUUxITljy7ODq3c3R2vNl99vs+3X64utwX/3f2s/OzM3T/ldMTlhgZHPcz8/X5Pve3Gxd\nUlhcWE9IT1NYXWJv39ffenrc1tnxXWjzeV9SVODX6vls3+T4bE9WbGlkY/PKyNDS2crJ1elZ\nb/V0W0tMXf1ZU1/j0M/W6d3fZU0+P01RS05a69bY5mjy83dfXPvl8F5RWPTZ1ujqy8jR53Lu\n5/1WUFv02tfZ3NLT9Wtabtr8XVhdbmZeU05q9mZfZPDfelpNT2p5/W5w2NTdcltv5edZVGXs\n23xZW/71bW51zsPGyc/Oy9f+Wk1cd1xcW2bk3OPu2tLf9VVRb2tdVU9QXGNkaW7b2uX2WWtp\nVVBGR1RobWlf8t96Z1nu23ttXmTt1M/T1czHz99v5dLT3F9VbHjvaV5fYnpvYH3V2HhbWXfo\na1xPWmxnZmZs+mlUTEtf69nkeeTV1OxjXejxb2lPcdPO2fve2tnsZGXq71ZRT2nU0dt4dODY\n5Xxr5djn/Vln4udwVVhga2tsb+fcYUxERlNoY1FWZeff+m753nRhWl3fzs/zXG/j5OXu3M/X\n2e372M/SbVpk69HY9evedVdLR1N832RQVmzpZFdQYXZbUlH5zcvbZ2H37PxlXe3kdlhMV+vf\nZ1Nc38zL1dvNydVuU1rj1ulPSllu/mRt69bXfmFf0sjTfVntzthvXWvZ5k5DQ1d5YU1HVfrl\nbV9lfPtNQkRZ3dvsa+bMzNLe2c7L41hZd87N3Wxz6vZmVVlp6vVXVF7bztxtW+rZ3fBtZmdc\nRkBEWd3jd2Bq4NHY2NHUz+1cYmXp6mBXT1/oe3Hr3tniZl1aY+ttXF1cZWNr6NzR0N3m4M7J\nzdfk/Ojkfm9iX2BYTUpOUlNTTk9PWWVo8dra5Xpz+eHS1tzta3tuY3FiW2VqX2Vn+dfX1dvp\n3eTo3ubr9GpkV1hxe3RoWGX9593saFxiWlJPWPz6a1lUZ+3h3eXx3u39bm/k3e1gWGrb1+R4\nXGv8Z2Vq7dXRz9vkzszO32VrdGJbWGHb2eHrZWx7cV9WW3L6/15QXmNVTUlP6dHW6Hd9aFpN\nUmLv2+1zaXH3aFdXYvXa5fTk2tHc5/bq29bf7+/h1eH2fW5vY1xmev10ZVxWXWzw9WRtbGpm\nWl5aVFRUVmB37+Hx5+f79nBuef766uXV0d3e73XtcPXd3NLb6fNdbuvz63v+fWhdWV1eZ3Lz\n19LMys/V6GxbTEtOTU5NSk1TV19oa3B0+ur4+Pfx72hcXGh+29bb1tbb6Off19HT3PD58N7g\n+GtpY1ZNTFVUWVtVVVRde+v47NvY2uTm5ejk/1lcXGnu8Orr7N/tbmpbXmZbW19i8+Tk4t3m\n8Wxr6trO2GhaWlple2Z05NrQ1tXQ0tt+WFNabvb+693b6l5PS01UU01JT118/FxXWWJmVlr9\n2NDW6/zs7Ozr8trMycze6tza4WRXXmzs29jj4/NeUUxPXXZtXFxn7ODkem/m3+J7av7792JW\nV1dnc3X7/nljXlhVX292X1ZWZfHu5d7Xz9DY5+ff1tr9bHDs7ndsdujf3vP629LR4GNdXWFm\nZmRtd35xV1FYWllNS05TYGBdcOLV1uZ67t3c5vZsYfjf3N3o3dPY5X15dPP4W1RVYGhteW74\n6ud89+bl4vhoa3X4//vuePxrYmNbX21zYV9mZfzvenfv5P1dUk5YeGxsenJ+eHFtcH7u29nk\n4tvW2eDa29ze39/i5/N9ZFxbZvfm3OHi33JcUkpKTFFVV1dbYFpZWmD05dvZ1NHc6W1fXF1f\nau/c08/b5eT48eTh19ne6/v2b2ZfXWNp/+Xf6X1vYFhYWW3x8Ojg5fhyYGFfWlZQVlRUXV1j\nbGxqbGpu/nVrYmFlZGZgZ+vc087PztHW09rj7unr6+76evvu9f9u+Ojm7nd2fXvt5+316u/x\neV1dW1pWTUpISVBWX2VrfW1sc/De3dne4u3t5//0fP/17vR649vQ0dzf7fLu6un87v5tbGhj\nYGT5eV5eX2luYldWWFtgXl5namJXTk5Xc+nj2tnf4OTc0dXZ4u5vXFxZWWBkaWt46tnPzszQ\n3ODn/vDi+W5gW2FiY3zj5OV4aWdf+nT9emj9Y1dXWmt4bGZrb3V2Zl9eYWFiYmVw7+t2aVxZ\nX+/h4dXN0M7NzM3S1ON2aWd18XpsamhkXVVSX3Rsb21kYV5eYl1dY15bXm703+Dtbl1fWl1s\nYl5ibfVzdfJ6fHl27uve3eLj4t7r8vD16eHo7Pz47Ovf4efl4NvRz8/P0Nn1W09JSEtPUFFY\nW1tbWlxrdG1dW15haHJ98ez9fe7u6NTS1+5qZFxu/e/e2tfY2dbc29nsbFpYY2BmX11sa37i\n3NbZ2upqXFhYVFRRTUxNUltu/vXl9nJrdd7d6uz7fnpdXGj14NnZ4ujydejh7dve7/h6fnNq\ndm535ujf2NXc3+v9aVpbV1pfaG5sbXBnbnzzfnnn7nBlXVtWTUtMV2ppa//t6nRhdPj07fLv\n6t3Szs/Oz9fe4dzf6Oj4+X1jXV9ibfz/93Zud2lkX2dvZl1gbW7x+W17b15WUFFVWF9oV1RZ\nWV5fd+Te293j3tnf397Wzs7P1NnucW1gXllcZXjr3d/k7Wpqanvn6eTZ3+328nBgXVZWV1pW\nW1tbaWVhV1Nda29tZ15YVldq6uff3NfS2NjY3t/qffro2drh5vF8YmhsbuTd2N7e3+7sbG1r\nbu7p7G9cWV9dWVFLTFBQUldZWVdbYmX73tLS1tzl3eHc2t/o6uvz6vRvaVtVVVxtfuTn7OF8\na2pfbOXW09ba6PP07u50bmlma3ZnU09OTU5VY3zj2M/O2t/vcnP+5+t+bnL+cWdnbXdnZmth\nZ11eaGJx9uTa19TV09XX2u54bHjs6/h3bmRkZF1jYl5hXVdWW1ldXV1eWmV97+fh4/dmVlNP\nV3r74t7f3ePi5t7e3tra0dTa3ObifGxsaOvo393v9V5VU01NTVFUWWlvbXj69vprb2hq+eXT\n0NnffXnu7vPz/2tnXlxcXF5aYWpu7O/o4d3Y1trf3+jq7+/u+H1rcvt67drZ3OHx+W5582ld\nZGJbXlxbYGFrb15ZUU5XWlZXWE5NUFv23NXNyc7X3uz18uv9aV1TUGDn3NTS09bk5t/f3d/v\nZ11daXBz6+Xh2t7q731udGJZVk5NUF1rc3dyeG1mZmxtfO7tb19fbXZx9/91Z11kcPzv9Pn1\n9unn6eTe18/Nz9PV1tnmfGlfZWx74uDv4eh5ZlhWT01NSkpMUllgZVxfbv7n6OXme25oZFpb\naXjv29XS09bb5+/zbl9kePPn39/u+vD/8eT18u3r7nX5+W9kXV9od/Ts6/jt9XprWldUU19m\nY2dxdmdoXl9iZWtmeOzs3drg4/Z7d3Xo4t/rdG9obWp95OTb1NPW4eHX2dvpeWlZW1hYXlZn\n+X3t8PV1dmVZVk1JSUtSXGhx/+745ut7fGRreWn/8vHm7+Ln7OTv3dPTz8zN0NLe+2pdYmVh\n+/n77v7yZV5hWVZPU1dYU1NaXP3s5dvb2dTd6vpnWlNRWGNieHdy8nr15uPc3+Z6ZXNkX2Nm\nffbm1c3P19/k3+To3d7g7XL373f9c25wWltVT1dfb2xmXlhbZnj+4fNsbVZYUUtUWGhvYnRo\nb3313tfQ19TO2uJ8Y25v8OLk2tPS2N3ubGVaXmdmZltdbX19bO/rdndoZG9lYn7i4N/hbWVf\nW1pWWVNOSkxZXG/l7u3o39rm39nd09Xa2d/l/3N5cnN479/d1s/P1NrY2u99/mxmYFtVT1ZZ\nXndsbXx3cnpkWVROTkpKSklRXWnz4evc19zZ5eLj9+Ph3tnc0tPY2Off5+/9Z2ldW19jbvnz\nfHp1bmRfcur7d3tmYFVRWGD79OTc3eL7ZlxeWVBVW11jYWZna3Xt2Nvm7ujc5vDy++jm4N3m\n3dnc2+Hi4/T+cGt1e3rzfO7f5d/b4vtnWVlZXFlbZWvybF1dU01MTE5PUlVWV1xreO3f39fQ\ny8nP2OL7dXzu5+715NzS0NTX1tz9bmFaUU1PT1RTT1NbcuLZ19rg9Hl5ZWRjYF9ibWhdW19b\nW2NebHhvfe3g3eZ8/fzr4uXk4tnY3uTy+uvi1M7Pz8/S1+dvbWZWVFZka19fWl9lZmz98fxl\nVU9UU0xQVmBobfl+bXX4+O/n4X15+Ph4ae3v69TQzM/g43BaTUZJSE5j+9DP1dbn5+Le3t/f\n3t7e4nxlX1xjbG5nZF9dX1xZTk5NS1ZgdPji2Nna2dXT1dnq5PtjXE5LSE1hcurU0M3JyMvU\n2vlud2dvdXB0Xmjc2d7l29joe/ZsUlBSS0xMTlVNWGD89O/c6Xd25ebq8/ns9PxqdGxjcm18\n/Pvj8+x9Yfp96d3j3u/s//7f6PNsaG1+7/R2d2RgbWFYXWFgXnjb4elzamhZXlZVYWz/ZGz9\nbnl5durd1NPT1Nvl+v/+/vL99+Xl7uvxdHhmW2N0amnp3Nzd1tfd3t7deGRhU05OSkhHSk9X\nW3jm4+Xs6+5mZ2dfbX3k3NvW2NXX3+H+bGNcZmVmW1lqZGjz+O/2/N/X0NPd2tfY2vRvaFxY\nYGppcH70b11ZU0xHSE1XX1lYZ/zs39/q8era1tfe2dno/XJjXV9dbt/Z2eT86NfN0NXd8ubs\n9fVydv72fm1lXVJQUU9YW2JjXGpjZGdx73f59Pbp6d3pfXJmcnBkYF5q9ufg631cV1tcZ2/x\n3dTR09PY2uHk3tvd6vJnYlxUWFNZW2F8ampiXl9ZY2Rr/mx2+X1uZ2tqdPB4fuv4e2NaV1Vf\neuvo6ens6ejx6+ns2NXSz9XZ3+Pb2Nzg5u/7+fJ+b2FVTUpMTE5ZZHTu6ubd3+Xc2+l3aWNm\nXlhRTE1TX3Tl19vd4/VzZWRsc3X0/216em9z39fSztHY5/R1amFgXV9mYGh+/u349+3n4/dz\naV9lX1diZWJueX5xbV9XVlVVWVtndfvf4d3a9HZ2+PJ54dnY197h6mpqaf/p4N7e3+bpenvv\n5Nzb29/9YlxcXV1eaGtsfOvqc213ZFxXUlZcXm3z7un8cG1candpYmnv7vj/Z2JeaHlw5t3a\n09PV2eTvffl99+Td2Nvn9/9iWltWW3P5c2ZbWllQWFpUWF5laHN0Y21yamdhZ21+4t7b2uLv\n+Pn0597Z2t3e4Nze4ebn3t3Z2uV7aVxeX15dXWNqbGdkZF5cWl5x8fl+9+/t7u/v83z86vxq\nYmBeWlVSUE5adera1t3a29/c5ejk393mfm1qbXr+5uPb29fT3epsXFJOTlFUWFlaXV5kdXp+\n6uTh6P3zalRMS09WVlxo9+Tl3dnd2dfc2Nzxfmlsc3f2eGxvePrl29bV1dPS0dLb7np3b2lj\nWlRYWFhWV1xoen3n6OnrcXBfWlZZXl5nYmBsdmRfZWr86ePf7Ovl6uXo7nJreHb49n11eevs\n6Ob06unl3ejk3Nfb7N/k8vZpX1lVVVRWWVpcWVNXXmJaWFxca2Znc2767+Pe4eHh3d/p8/p7\nb29qZ29xcufd1s7Q2uf7/Ht79Hf7e2dyc2tyc3fr5+vn7Pb59ff/Z19gXV1cYl9gamZeXGBk\nb/v/b2pnaWdy+vny9+rh4dra3Nvb2Nvd8H54ffJ4bmNs+vN9/urs9v94bWxhWVxbVVJPTU1P\nUlpbYPnp5ebw4t/t8ezo7P1uYF9z6uTg3dnc3u/6c2FjYXD6+O3j4+/u7OPj6ejp4tzb3u18\neGpuZGny+vn9aVxUTUpKUF1z7OPj8u/ybm9laf1t+vhoalhSVFZldt3Py8rLys/g9f57aXXt\n+uh+aWteaO/c1+De2t3feWRaVlJMS0xPV11ibmZfXV1cZvjo5+vwd2ZaWFlj/uzr9vPn5+zq\n3dva2t3f4+nr5evj3Nnb5e53Yl1fXVldX2/yYFxt/fHv9Ozq7+/9amZdWFNPVV1jfOnt9fn7\nbnzo5uXj5uPf3+To93JxbWxr8urf19/r+nRmY2R23t3c3+zu/nhqZm5yaGBeVE1MTExOVlte\nZ2xtcWtvcWJoZWl19un+897l+f91++Pe1s/S0dXZ297lbmt2aH56bf3v49/h3N7m6O3p4uD0\naF1XXF5mcWxwbl9TTk1OTVFXXWtmXVdaX11gZ/7d19XQ09bb4eLs4tva1tXV1t3pbWhjYGFl\n+vH4fXFsfOjs8e94fPR4bmNZV05NT1ZeW2n75Nje7XxmXFdXWVJPVVpcX2j36+zq4t7d3NvZ\n1NbZ1trd3+rx//97d+rf6vp9dnx4/Ph77+no9nFiW1tTTk5TVlZi7d/h42xfZ3h8+PP+6uPx\na2VcXvnu7dzS0Nnh7G9paVli+//p6fHu7en9Z238//rq7eTc5+fi6XRleOzp/mVfXFFOTktH\nSExPVF1iYGFhbO/l5d3V1tbT2eDo8e3t39ze2eLp6Px7cG1fXmNp9fbg3NnV2dne3+9ybF5Z\nUE1QTlFYV2x98N/f4e1vYFtnePnp7f1mX2RdXF1da/ng3d7m7OP1ZXv++uTu7Ovn3+7x49PN\nzMrP09Tie2BWUExNTktNUlZbWl9hXGJ76tzh6+v7dmVYUFBSXXF2/u3n6ez2+Pd989/X2N/u\n7t3a3Ovv5eHd6nFkXltbYv/l29vr5t/me1tXXFxbWFlgXWL98/x19O77dGRhYGFdW15fZf3h\n4Off39/c3ud3Z2hga2dw7+7j5tzZ0c/T1tba9P5mXF9cZmFZXWdYU1lXZ2dgdm1naVxYVFll\ncvXu72lcXVteee7i2NzY2dvX4Ont6flvbmpvdPLt6dvf4uXo5/ZzZmtzbnH56vT5cmRpaGJt\ncWZcXmNaYHRsaWxsYV5jfe3r4ux+9nlqZWpwbG92/fHo7e7s7+/69vXq3uTj4+nl4u3r3eHb\n1t3ieWZeU01NU1tt9d/X2d/v/m5ZWVdYXWNlX1xbV1FUXGh38u7q9l9VUFJcaHbj1s7Oz9Pb\n2t/f2dvk9/rr5e7i5Pj39fT7+/tuY2JiX1lZXVpkbXPv+nFrZWVcUlNUUFZea/rj2NbW2Njc\n7mhdV1li/+Pd2Njb1dHPz9bd8fv4dmdiXVZQT1pmb+vi3N3v+fh+8fh9eGptaGBdXFxaW19f\nZmRfaGRrbGltcv3x8X3/9u/f1dvg8n74dm1sa2RdX2p98Ozp39ze4u34eXby6vh07O9+/2lk\naGFZVVRST05PUldXZnzk1c7O1dTZ3t7m4+bc3t7a5+jm82Zhal5aXGZtb25q/ebb197k6Orf\n4t7a4+f2ZWBcV1RQVFheZGdfXVtYX2lnXlpgX2FqZW5zae3s8Ot6bm3x7/ry8+vp5tjX2Nfa\n3d/q593d5ezycnn0/nlta29dVllaWVRTVVZbX2JeXWptbG1cWl5s4tbX087S2Nzf3ufu9X1v\nYl9dWVlice3i29LU2t7f4vd2d3RpX2htem9y7d7W1dje6flxYFZPS0VESExPWGn9++ne4O9y\nX19qaV9j/uHl3dzs7Pft7O/g4t7c2tjj73x0dvjv3trk6W9hYlxmb2pv++//d3RzXlRNSE5W\nXGNp6uf1/mxw8OXf3dXS3OL4aGNaWVRTYHvv7W9kbW5t8N7V0tXW1dfY193c19nd3NzoeGBV\nUlRWWVdTWGJeWV9rdnJsbV9hZl5aW19jd+3m5Ofs7/Xu8W9fYWRdWV5rcevh4OPg6N3Y2tze\n2tfhfPnvfWplcPjq5/l7Yl1dW2lhW11aW2lsbG9sbGx1bmReXWBueXd8fXP+8u3q8+vf2dPU\n1tru/HZ28HlybnBzYV9jdP7+3Nfc4Ojo+mpkZXP89/pzfuvp3+l5bmlrZGdfVlFTVFhfcfbx\n6+x8bWdeWFhbYnz36uvr297Z09jZ7HF5Z3J5bnl8dvt4bGtud/La1dzl6/9mV1JYXF5pc3fx\n/nJeVFRPU19hcu7g2t/ecmN9fvHa0dHR09rrZ1xbWV/45t7V3O30fXRjZ37v3NbX2OdqW1hX\nTlJSaGhobWloYlpZW19t++fc5flzZ2x0ZHN3e+7d397f5+5qYl9dYl1j/OXc19vj5Onb29jR\n1d/zYWNgWltYYV9dYGVdW19dZWR68XRwbWdkYmRpeOni3e79dGJXU1Zn++Prfu/u6Ol4fO35\n6+Hd1dPY3N7c2+Tw6u7s6+nkd2NYT09RWWd489/d5PpvX1hdXmF393luZ1xRWVtTWl1kXmV5\n6+bu+P/z5+jg3trT2t3la2VfYmpo79/c19fSz9bueG1iYl5bWVlo7OHj9mhkbW98eHNiWFta\nT0pFRUpOXmx+49bPz9LX7ff++uvl2Nre3+Df/2549OTf3eT0cF9l/+Lc2tTR19zral1YWFZO\nT1FXZm1raW92bGZnXVJUXHv2cG974tvc2tzk8P7ydGBbXnD67uf//O357O32+PH+++rb2tnP\n2Njb7vxnX1pSUU9RUU9QWWJq5dzY2PVoW1BOTk9UV2Jy9N3d3t/p29rX1t/d3+/6Z1tjePDk\n5+Xj4Of6cWhtX2x4/HX2/2966edybmRyefvf5trZ3uF+aV9VXGVrXVdbVl5hXWJcWV9pc3rq\n3uXd3tja73b3493d29zh3N/i82x17evz9GtfW2FfYGprYF1fXFxeXmRfW1xcW1ZVXl9q9nvj\n4e7i6vPq5+12am1xeHvp5+zy7Nzb3dfY393zZg==\n\n--n2m-MIME-boundary----------\n\n\n--n2m-MIME-boundary------------\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<signature>Derek_Beatty@cmu.edu   ABD   Comp Sci, CMU, 5000 Forbes, Pgh, =\nPA 15213 USA\n</signature>=\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.40.msg",
    "content": "Return-Path: <sau@sleepy.bellcore.com>\nReceived: from thumper.bellcore.com (thumper.ARPA) by greenbush.bellcore.com (4.12/4.7)\n\tid <AA00228> for nsb; Fri, 7 Jun 91 09:13:07 edt\nReceived: from sleepy.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA21187> for nsb@greenbush; Fri, 7 Jun 91 09:09:08 EDT\nReceived: by sleepy.bellcore.com (4.1/1.34)\n\tid AA00574; Fri, 7 Jun 91 09:09:05 EDT\nDate: Fri, 7 Jun 91 09:09:05 EDT\nFrom: sau@sleepy.bellcore.com (Stephen A Uhler)\nMessage-Id: <9106071309.AA00574@sleepy.bellcore.com>\nTo: nsb@sleepy.bellcore.com\nSubject: meta-mail\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"mail.sleepy.sau.158.532\"\n\n--mail.sleepy.sau.158.532\n\n2 Questions:\n\n1) MM_QUIET doesn't seem to work in the 212 version of metamail.\n\n2) I've been pondering how I am going to send you this 40mb mail message.\n   I was going to split it up using the \"parts\" mechanism, but then it occurred to me.\n   My software has no business worrying about message size.  Its up to the mail\n   delivery agent to do that form me.  I should be able to compose a very\n   long message, and pass it off to sendmail (well, a pre-processor to sendmail).\n   if the message is too long, based upon the src/dst etc, then sendmail should\n   break it into multiple parts for me, and send it as multiple messages.  As the\n   user (sender) I should be unaware this is happening.\n\n   Similarly, on the receiving end, the separate parts should be assembled as they\n   arrive; I shouldn't have do deal with them at all as multiple messages.\n\n   I guess what I am proposing are two utility programs:\n\n       msplit <max_lines> <max_bytes>\n\n   that takes 1 mail message and splits it into N messages and\n\n       mcombine <parts...>\n       mcombine <partially_assembled_thingy> <parts...>\n\n   that any mail system can call to achieve a uniform mechanism of splitting\n   and recombining messages,  Kind of like:\n--mail.sleepy.sau.158.532\nContent-type: image/pbm\nContent-Transfer-encoding: base64\nSubject: Image wrapped by /usr/sau/bin/fetch_image\nDate: Fri Jun  7 09:08:57 EDT 1991\n\nUDQKNzk4IDUzMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAB////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAP///////////AAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////wAAAD////gAAAAAAAAAAAAAAAAAAAAAAAAAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///gAAAAAAH///gAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wAAAAAAAAA///AAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAf//AAAAAAAAAAA\nAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAA\nAAAAf/4AAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAP/gAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAfAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABwAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAeAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAHgC4AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAABcAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAA/4\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAXATgHgdB0DwDwB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAF4E4GMIwjBGB\nHxjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAABOCODBmEYQwwwwwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAA\nAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAATwjggZgGAMMMMIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAEcQ4f+eB4ADDDH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAABHkOGAD4PgHwwxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAQ6DhgAPA8HMGIYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAEPg4YAA4DjDA8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABBwOHAUGQZgwQBwEAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAQcDg4JBkGYMMAOCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAECA4P8YRhHPz/j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAHwg/g8F4Xg+Yf8PAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAA/wAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAABgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+\nAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAQEAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAfwAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAwBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAHQRwME/v4HgJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAACM9/DPDAwGMe8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAABhDgwwwwMDBhyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAYAwOMMMDAgYYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAHgMBjDDAwf+GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAA+DAYwwwMGABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAADwwGMMMDBgAYAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAOMBjDDAwYAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAPwAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAABBjAwwwwMHARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAQYwMMMMDA4IY\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAGEOGDDDIyP8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAABeDeD/8cHA8H4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAD8AAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAIkAAAAAAAAA////////////4AAAAAD////////////gAAAAAB////////////wAAAAAAAAAAAAAAB+\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAjAAAAAAAAAf////////////AAAAAB////////////8AAAAAA////////////+AAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAEAA\nAAAAAAAH////////////wAAAAAf////////////AAAAAAP////////////gAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAEUAAAAAAAAB////////////8AAAAAH////////////wAAAAAD////////////4\nAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAPwAAAAAAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAA\nAADwAAAAAAAAAAB4AAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAB8AAAAAAAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAH\ngAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAAA+AAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAARQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAIkAAAAAAAAB4AA\nAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAA\nAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAA\nAAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAA\nAAAAeAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAfgAAAAABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAA\nA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAQAAAAAAAAAeAAAAAAAAAAAPA\nAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAARQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAA+AAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAIkAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAjAAAAAAA\nAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAA\nAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAHwAAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAA\nAAAAAAAAAHgAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAB8AAAABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAA\nAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAARQAAAAAAAAHgAAAAAAA\nAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAIkAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAfAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAEAA\nAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4\nAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAA8AAAAIwAAAAAAAAHgAAAAAAAAAADwADwAAeAAAAAAAAAAAPAAB4AAPAAAAAAAAAAAHgAAAAAAeAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAABAAAAAAAAAB4AAAAAAAAAAA8AB/AAHgAAAAAAAAAADwAA/\ngADwAAAAAAAAAAB4AAAAAAP4AAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAABFAAAAAAAAAeAAAAAAAAAAAPAAf+AB4AAAAAAAAAAA8AAP/AA8AAAAAAAAAAAeAAAAAAD/wAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAfAAAAiQAAAAAAAAHgAAAAAAAAAADwAH/4AeAAAAAAAAAAAPAAD/8APAAAAAAAAAAAHgAAAAAA//AAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAACMAAAAAAAAB4AAAAAAAAAAA8AA//wH\ngAAAAAAAAAADwAAf/4DwAAAAAAAAAAB4AAAAAAH/+AHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAQAAAAAAAAAeAAAAAAAAAAAPAAD//B4AAAAAAAAAAA8AAB//g8AAAAAAAAAAAeAAAAAAAf/4B4AAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAARQAAAAAAAAHgAAAAAAAAAADwAAP/+eAAAAAAAAAAAPAAAH//PAAAAAAAAAAAHgAAAAAAB//w+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAIkAAAAAAAAB4AA\nAAAAAAAAA8AAAf//gAAAAAAAAAADwAAAP//wAAAAAAAAAAB4AAAAAAAD//PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAjAAAAAAAAAeAAAAAAAAAAAP//////4AAAAAAAAAAA///////8AAAAAAAAAAAf///////////\nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAEAAAAAAAAAHgAAAAAAAAAAD//////+AAAAAAAAAAAP///////AAAAAAAAAAAH///////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeA\nAAEUAAAAAAAAB4AAAAAAAAAAA///////gAAAAAAAAAAD///////wAAAAAAAAAAB///////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAACJAAAAAAAAAeAAAAAAAAAAAP//////4AAAAAAAAAAA///////8AAAAAAA\nAAAAf///////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAIwAAAAAAAAHgAAAAAAAAAADwAAA//+AAAAAAAAAAAPAAAAf//AAAAAAAAAAAHgAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAPAAABAAAAAAAAAB4AAAAAAAAAAA8AAB///gAAAAAAAAAADwAAA///wAAAAAAAAAAB4AAAAAAAP//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AABFAAAAAAAAAeAAAAAAAAAAAPAAD//x4AAAAAAAAAA\nA8AAB//48AAAAAAAAAAAeAAAAAAAf/+eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAiQAAAAAAAAHgAAAAAAAAAADwAD//geAAAAAAAAAAAPAAB//wPAAAAAAAAAAAHgAAAAAAf/8HgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAACMAAAAAAAAB4AAAAAAAAAAA8AB//gHgAAAAAAAAAADwAA//wDwAAAAAAAAAAB4AAAAAAP/8D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAQAAAAAAAAAeAAAAAAAAAAAPA\nAf/AB4AAAAAAAAAAA8AAP/gA8AAAAAAAAAAAeAAAAAAD/4A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAARQAAAAAAAAHgAAAAAAAAAADwAH+AAeAAAAAAAAAAAPAAD/AAPAAAAAAAAAAAHgAAAAAA/wAPAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAIkAAAAAAAAB4AAAAAAAAAAA8AA8AAHgAAAAAAAAAADwAAeAADwAAAAAAAAAAB4AAAAAAHgAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAjAAAAAAA\nAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAA\nAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAPAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAA\nAAAAAAAAAHgAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAHgABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAA\nAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AARQAAAAAAAAHgAAAAAAA\nAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAIkAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAB8AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAEAA\nAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4\nAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8ACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAPAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAA\nAADwAAAAAAAAAAB4AAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAHgAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4ACMAAAAAAAAB4AAAAAAAAAAA8AAAAAH\ngAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAD4AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwARQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AIkAAAAAAAAB4AA\nAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAADwA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n+AEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgCJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAA\nAAAAeAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAeABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgBFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAA\nA8AAAAAA8AAAAAAAAAAAeAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAQAAAAAAAAAeAAAAAAAAAAAPA\nAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ARQAAAAAAAAH////////////wAAAAAf////////////AAAAAAP////////////gAAAAAAAHwAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgIkAAAAAAAAB////////////8AAAAAH////////////wAAAAAD////////////4AAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AjAAAAAAA\nAAf////////////AAAAAB////////////8AAAAAA////////////+AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAEAAAAAAAAAD////////////gAAAAAP///////////+AAAAAAH////////////AAAAAA\nAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAB4CJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA8BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4IkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAwQAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEAA\nAAA/gfAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPkAAAAADwAAAAAM8AAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4EUAAAADgBAAAAAAAACAAAAAAAAQAAAAAAAAAAAAAAAAAAAAOHAAAAAAMAAAAAA\nDAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCJAAAAA4AQAAAAAAABwAAAAAAAEAAAAAAAAAAAAAAAAAAAADAwAAAAADAAAAAAAwAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAHgIwAAAAOAEAAAAAAAAcAAAAAAADAAAAAAAAAAAAAAAAAAAABwEAAAAAAwAAAAAAMAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4BAAAAADgBAAAAAAAALgAAAAAABwAAAAAAAAAAAAAAAAAAA\nAcBAAAAAAMAAAAAADAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeBFAAAAA4AQOgPATAAC4APAHgTw/gAAAAAAAAAAAAAAAAAAAHgAHgTwB7BOHAPAQwAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAHwiQAAAAOAEEYMY94ABHAEfGM9+DAAAAAAAAAAAAAAAAAAAAA+AGM9+Bhz334EY8MAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8CMAAAADgBDCGDDkAARwDDDBjhwwAAA\nAAAAAAAAAAAAAAAAAH4DBjhwwMOPHDDDDAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAQAAAAA4AQwBAwwAAIOAwwgYwMMAAAAAAAAAAAAAAAAAAAAAfggYwMMDDBgwwwwwAAAAADwAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwRQAAAAOAEPA/8MAACDgMMf+MDDAAAAAAAAAAAAAAAAAAAAAB8f+MDGAwwYMAMMMAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8IkAAAADgBB8MAD\nAAB/8DDGADAwwAAAAAAAAAAAAAAAAAAAAAHmADAxgMMGDAfDDAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAjAAAAA4AQHjAAwAAQHAYhgAwMMAAAAAAAAAAAAAAAAAAAAAA5gAwMYDDBgwcwwwAAAAADwAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwEAAAAAOAMAcwAMAAIA4DwYAMDDAAAAAAAAAAAAAAAAAAAABAOYAMDGAwwYMMMMMAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nA8EUAAAABwCCDOAjAACAOBAHATAwwAAAAAAAAAAAAAAAAAAAAYDnATAxwMMGDGDDDAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCJAAAAAcBggxwQwABABwwA4IwMMAAAAAAAAAAAAAAAAAAAAGAw4IwMMHD\nBgxgwwwAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIwAAAADxwMIf4MAAQAcP+P8MDDIAAAAAAAAAAAAAAAAAAAA4cP8MDD+8wYMc/MMAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAA8BAAAAAAPwC8B4PwAfAfx/w8Pz4cAAAAAAAAAAAAAAAAAAAAL8A8Pz4PI/fvj5v/wAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhFAAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4iQAAAAAAAAAAAAAAAAAYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCMAAAAAAAAAAAAAAAAAGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgQAAAAAAAAAAAAAAAAABwwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4RQAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAHiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAHhFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAB/gA/wAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAeCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAH4ADwAA\nAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAHgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAA/AAYAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAB4RQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAH4AGAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAeIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAA\nAAAAAAAAAB/ABgAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAHgjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAfwAYAAAAQAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAB4EAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAG+AGAAAAEAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAeEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAeAAAAAAAAAAAAAAAAABnwBgAAADAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAHiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAY+AYAAABwAAAAAAAAAADgAAAAAAAAAAAA\nAAAAAAAAAAAB4IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAGHwGAD4A8AAAAAB+ABjg4AAAAAAAAAAAAAAAAAAAAAAAAeBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAABh8BgDjg/9+P4fhx4H58OH8AAAAAAAAAAAAAAAAAAAAAAHhFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAYPgYBgcBwPB4Bw4HA\nOnDgcAAAAAAAAAAAAAAAAAAAAAAB4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAGB8GAYDAcBwOAYcB4Dxg4MAAAAAAAAAAAAAAAAAAAAAAAeCMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAABgPhgMA4HAeDwEHAOA8AOGAAAAAAAAAAAAAAAAAAAAAAAHgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAY\nB8YDAOBwDgcDDgDwOADjAAAAAAAAAAAAAAAAAAAAAAAB4RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAGAfGB//gcA4HAg4AcDgA5gAAAAAAAAAAAAAAAAAAAAAAAeIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAABgD5gcAAHAPD4YOAHA4AOwAAAAAAAAAAAAAAAAAAAAAAAHgjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAA\nAAAAAAAAAAAAAAAYAfYHAABwBwuEDgBwOAD8AAAAAAAAAAAAAAAAAAAAAAAD4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAGAD+BwAAcAcbjA4AcDgA/gAAAAAAAAAAAAAAAAAAAAAA\nA8EUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAABgAfgcAAHAHk8gOAHA4AO8AAAAAAAAAAAAAAAAAAAAAAAPCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAYAH4HAABwA7HYDgBwOADngAAAAAAAAAAAAAAAAAAAAAADwIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAGAA+B4AgcAOh0A8AcDgA48AAAAAA\nAAAAAAAAAAAAAAAAA8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAABgAHgOAIHAD4fAHAOA4AOHgAAAAAAAAAAAAAAAAAAAAAAPBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAYAA4DwEBwgcDgB4DgOADg8AAAAAAAAAAAAAAAAAAAAAADwiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAGAAGAfHAeIHA\n4AOBwDgA4HgAAAAAAAAAAAAAAAAAAAAAA8CMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAADwABgD/gD8BgMAB44B8AfA8AAAAAAAAAAAAAAAAAAAAAAPAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAD/AAIAPgAeAIBAAH4B/wf8/wAAAAAAAAAAAAAAAAAAAAADwRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8IkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4EUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAeCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAeBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4CMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAeAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAeAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgCMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\neAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAA+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA8ACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAB4ABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADwAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAPgAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAeAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAIkAAAAAAAAA//////////////////8AAAAAAAAAP//////////////////AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAjAAAAAAA\nAAf//////////////////gAAAAAAAAH//////////////////4AAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAEAAAAAAAAAH//////////////////4AAAAAAAAB//////////////////+AAAAAAAAA\nAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAEUAAAAAAAAB//////////////////+AAAAAAAAAf//////////////////gAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAADwAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAA\nAAAAAAeAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAHgAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAA\nAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAARQAAAAAAAAHgAAAAAAA\nAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAH4AAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAEAA\nAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAA\nAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAB8AAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAA\nAAAAAAAAAAAHgAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAD4AAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAe\nAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAB8AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAIkAAAAAAAAB4AA\nAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAA\nAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAA\nAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAA\nB4AAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAB+AAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHg\nAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAQAAAAAAAAAeAAAAAAAAAAAAA\nAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAH4AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAjAAAAAAA\nAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAA\nAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/\nAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAA\nAAAAAAeAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAHgAAAAAeAAAAAAAAAAAAAAAAAHgAADwAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAD8AAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAH8AAAAAHgAAAAAAAAAAAAAAAAB4AAD+AAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AP/AA\nAAAB4AAAAAAAAAAAAAAAAAeAAH/gAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAP/wAAAAAeAAAAAAAAAAAAAAAAAHgAH/4AAAAAAAAAAAAAAfAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgf/4AAAAAHgAAAAAAAAAAAAAAAAB4AP/8AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAARQAAAAAAAAHgAAAAAAA\nAAAAAAAAAB4f/4AAAAAB4AAAAAAAAAAAAAAAAAeAP/8AAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAe//4AAAAAAeAAAAAAAAAAAAAAAAAHgf/8AAAAAAAAAAAAAAAH\n4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAH//wAAAAAAHgAAAAAAAAAAAAAAAAB4f/4AAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAEAA\nAAAAAAAHgAAAAAAAAAAAAAAAAB//////////4AAAAAAAAAAAAAAAAAf////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAf/////////+AAAAAAAAAAAAAAAAAH////\n////////////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAH//////////gAAAAAAAAAAAAAAAAB/////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAD8AAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB//////////4AAAAAAAAAAAAAAAAAf///////////////////9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAf/8AAAAAAAeAAAAAA\nAAAAAAAAAAAHn/+AAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAH//wAAAAAAHgAAAAAAAAAAAAAAAAB4f/4AAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAfgAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB7//gAAAAAB4AAAAAAAAAAAAAAAAAeB//wAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAe\nH/+AAAAAAeAAAAAAAAAAAAAAAAAHgD//AAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgf/4AAAAAHgAAAAAAAAAAAAAAAAB4AP/8AAAAAAAAAAAAAAAAPwAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4A//AAAAAB4AAAAAAAAAAAAAAAAAeAAf/gAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAIkAAAAAAAAB4AA\nAAAAAAAAAAAAAAAeAD/wAAAAAeAAAAAAAAAAAAAAAAAHgAB/4AAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAH8AAAAAHgAAAAAAAAAAAAAAAAB4AAD+AAAAAAAAAA\nAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAeAAAAAB4AAAAAAAAAAAAAAAAAeAAAPAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAA\nAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAA\nB4AAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAB+AAAAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHg\nAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAA\nAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAB+A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAjAAAAAAA\nAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAA\nAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAA\nAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAA\nAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AAAAAAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAA\nAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAARQAAAAAAAAHgAAAAAAA\nAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAA\nAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAEAA\nAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAA\nAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAA\nAAAAAAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAA\nAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAA\nAAAAAAAAAAD/gAAAAAAAAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAe\nAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAD/g\nAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAARQAAAAAAAAH//////////////////4AAAAAAAAB//////////////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAIkAAAAAAAAB///\n///////////////+AAAAAAAAAf//////////////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAjAAAAAAAAAf//////////////////gAAAAAAAAH//////////////////4AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAEAAAAAAAAAD//////////////////wAAAAAAAAA//////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAB/4A\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAA\nAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAH/4AAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAB//8AAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///gAAAAAAH///gAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH////AAAAP///+AA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4APAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////wAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAPADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/////////+AAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwBcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAALgJwDwOg6B4B4A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAD+B8AAAAAAAAgAAAAAAAAAAAAAAAAAAAC8CcDGEYRgjAj4xgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAOAEAAAAAAAAIAAAAAAABAAAAAAAAAAAAnBHBgzCMIYYYYYMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAA\nAAAAAADgBAAAAAAAAHAAAAAAAAQAAAAAAAAAAAJ4RwQMwDAGGGGEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAA4AQAAAAAAABwAAAAAAAMAAAAAAAAAAACOIcP/PA8ABhhj/wAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAOAEAAAAAAAAuAAAAAAAHAAAAAAAAAAAAjyHDAB8HwD4YYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIwAAAAAAADgBA6A8BMAALgA8AeBPD+AAAAAAAAAAAIdBwwAHgeDmDEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA4AQRgxj3gAEcAR8Yz34MAAAAAAAAAAACHwcM\nAAcBxhgeDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAOAEMIYMOQABHAMMMGOHDAAAAAAAAAAAAg4HDgKDIMwYIA4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAADgBDAEDDAAAg4DDCBjAwwAAAAAAAAAAAIOBwcEgyDMGGAHBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAA4AQ8D/wwAAIOAwx/4wMM\nAAAAAAAAAAACBAcH+MIwjn5/x/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAOAEHwwAMAAH/wMMYAMDDAAAAAAAAAAAD4QfweC8LwfMP+HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAADgBAeMADAABAcBiGADAwwAAAAAAAAAAAAAAAAAAAAAAGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAA4AwB\nzAAwAAgDgPBgAwMMAAAAAAAAAAAAAAAAAAAAAADAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAHAIIM4CMAAIA4EAcBMDDAAAAAAAAAAAAAAAAAAAAAAAwEAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABwGCDHBDAAEAHDADgjAwwAAAAAAAAAAAAAAAAAAAAAAOGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAPHAwh/gwABABw/4/wwMMgAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAA/ALwHg/AB8B/H/Dw/PhwAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAYCAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAHDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAfwPgAAAAAAADwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAgAAAAAAAAMAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIAAAAAAAADABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHACAAAAAAAAAwAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAgAAAAAAAAMAcHAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIE8AAB0EcDBP7+B4CYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHACPfgAAjPfwzwwMBjHvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAg4cAAYQ4MM\nMMDAwYcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIMDAAGAMDjDDAwIGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHACDAwAB4DAYwwwMH/hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAABwAgwMf+PgwGMMMDBgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIMDH/g8MBjDDAwYAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAGDAwAADjAYwwwMGABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAA4BAwMAAQYwMMMMDBwEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAwMDAAEGMDDDDAwOCGAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB44DAwABhDhgwwyMj/BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4D8+AAXg3g//HBwPB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM\n--mail.sleepy.sau.158.532\n\n\n--mail.sleepy.sau.158.532--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.41.msg",
    "content": "Return-Path: <raman@cs.cornell.edu>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA24680> for nsb; Wed, 28 Oct 92 11:48:41 EST\nReceived: from thialfi.cs.cornell.edu by thumper.bellcore.com (4.1/4.7)\n\tid <AA28329> for nsb@greenbush; Wed, 28 Oct 92 11:47:46 EST\nReceived: from CLOYD.CS.CORNELL.EDU by thialfi.cs.cornell.edu (5.67/I-1.99C)\n\tid AA28892; Wed, 28 Oct 92 11:47:35 -0500\nReceived: from FREYR.CS.CORNELL.EDU by cloyd.cs.cornell.edu (5.67/I-1.99D)\n\tid AA24797; Wed, 28 Oct 92 11:47:08 -0500\nFrom: raman@cs.cornell.edu (T. V. Raman)\nDate: Wed, 28 Oct 92 11:46:54 -0500\nMessage-Id: <9210281646.AA23424@freyr.cs.cornell.edu>\nReceived: by freyr.cs.cornell.edu (5.67/N-0.13)\n\tid AA23424; Wed, 28 Oct 92 11:46:54 -0500\nTo: nsb@thumper.bellcore.com\nCc: raman@cs.cornell.edu\nSubject:  Thanks! (part 1 of several)\nMime-Version: 1.0\nContent-Type: message/partial; id=703.23422.720290813.freyr; number=1\n\nMIME-Version: 1.0\nTo: nsb@thumper.bellcore.com\nSubject: Thanks!\nCc: raman\nContent-type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.703.23396.freyr.720290812.1\"\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.703.23396.freyr.720290812.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nHi!\n<nl><nl>\n\nThanks for helping me get metamail working. =\n\n<nl><nl>\n\nHere is my first attempt at multimedia email:\n\n--PART.BOUNDARY.703.23396.freyr.720290812.1\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\n\nWWx++GPlcmTt4N16+P7o7trV2vXezdrqXlxiWk9Mc97sdfv+5ejh29/kZGZfW1JLaOvs9Ot7\nbunY09jW3d3f4Nvnb11LWF9mYVv6XFlWUVhdYvBrYW7qzs/T0c/N19HOzMni6F1Ya1XvXUtJ\nSUtLTEpOS11YWOLEztjG09/PyM3pfFxy6f59b3J6XFxdcOPqfNz+6Onx0c/uWF1P0lpJ+1JU\nS9l497/O1n1r5v/g2NZtU11UWlV48eh9Y25ZXlJQWktGU97Z4v3MvL7B4Mm/y+9yXUBCRllM\nTVxR9ebP3ePWy2Jc9d/T3trr2Mhc/e/g2VJOTEJEPUhKVGRd18zU29PX1NPPzt34bmteZmxh\n9V5OYvlhYHnjXVpjV+THwsnT6s7Ree/ZW0hGSFpd7uZsZ1lTVu3fTlnffNz62enVy+Le39Hb\nXWxbT0haWVFIWl9c28u+xs3Dy3df2PHzztn36PhaUVJMP0FUbF9U/tJoVuna7l/23ena7+fK\nwcbg3uViSlhsVFLh3Gdd/Plh2W1YTGzydNx25+3pXF9vZHnnV014YVzP5frm2ebMz1/Wv95p\n22px31pNZ1lbbE1demjay81+5eRNUGRZWddtVeHN9tzaT1c+SV5nVnjLzMO7wczI2Hnde1RB\nWl5JSF5ZT2xuatleWdrP4+rV7WrL5Oze2vVbyMXi783OTG1WTEvtVUbwbD9591lGX2VX1mF+\n48z6d+NefczC6NTD0dfS3HZvbFhdTGtrZGNN60xDRFJFcVpCUtHbbsTnTtrAX8LI3Ma7zFjn\nz8zU6UFBvN5dxNZIXX1OTedNOdZtPHTbUUzNTkLV9DzP30bRy2vnxlDby9nGur9kvsrJyd5c\n6mpMPTIqT1YyXsdH+L7tab+6wrnAXNi15zzPRTVm0L/MVtvL6VXsSXRPc9dJSsS8TsZvMVCw\nvEw0QfJJX+c6TLvKQ9W3bFfCvjd4ym/LxNlXzs7lYvo9OLxeMEddVkZdzWnOxLrAfM/ExtTY\ne/49VfVFPENfYEs/Qu/Mv8Jh0MdPdcBLN8G/SFdfalfHtULStEtc1T45285BU/X7/MrGQFzS\nW/1U51lK3sbPP83Rc8BjPT1STV/cUEbTTUfiflHPyXXBzdzNwsnqz/7P0VnTRkdIST1E0k5O\n6/RIXL7rZLzDWlNXYE/s0mBz00xSyGtmzc9MZ9hfUExJScvV79P3UUxz3/XwzsdO7dHozNzq\nfElezMx4V9fqXev4Sm5gTkRx71Bm09nl7W9n0NzQ3M/LbGvS2+ZLc/A/SPtrSObrWf7a3f7Y\n3drL48zH9/jbcPrmX0pP7U1AXmNo63jv63Lq1OV/3MnN2dXhztfl5vpo+NnYW0tJS1JMRlp+\nZu547974eNzH2vjVyM7R3X9sWVZYTkRHTl5cXNzcz8rS2W7k2tjPy9frZmblfk9OUFFQQ0hP\nU1BVW2jn39LN7dnN0dDVz9LX2t79alpdeFhTT1paT1Jg+PDU0tR6eHppZ09SXWvn5dvU7H1s\nUVVYaX7t3ubY793Z0s3X3d1sXk5DVmdqWkxRUU5TZW7l3MvK3tnOztfPz9PmZPFkW1pd925T\nRUdMT11YVWFr1s3RycvJ2Of+adXT0dXzam5gY2x0WVFOTlNbbvrx5NXP2dPY9O5wfmxVXk9K\nV2L36tnN1NfK1N/q7dna6Nh3eOxi7V1Sbl9aXVZPU09TUlBVXt7g1c/Oz9THydTS2ez7XXJ6\nWmRfTU5ZWm1VaOXtdtnNy8vOyuLgfHd1XHtdVE9NVFBHSUxUb3z8cmJ+ysXLycnM09XbZ1tf\nXGpXU2FRVlFYbWndzuV77dbMzvdja2Hr7V1RT19YVltp8VNOZVpt58zHztLTzuHl7e58XGxu\nXlVOaGtw+nXgeWdfX2lncmjz59zh6eV63dvq5tn+ZlxccmZaaF1Se/3e4Wn859XY6Nze5dt6\n72Bf72VYTldQV1dPWV9yZmX32dLY2nljav3T2eTa29bn9NLg3dTb1M3k52xTSkpQVFxTTk9W\n+enh2Nbb5+D47+7a2u7h5XNiWVv/ZVVlfOLnYvH6XWBiYGF75mV1bWro08nQ19bUzdHe793p\n5udte1tcYWJMTVxvbU9NRlht/XFk3Nja1tXLyMnGzN79ZHPc4+XjXVNXSk9dXWZWT1Jc6d7o\n39XP0N3W/X595d9eWV9kVGvw3tPr3dXldWVh9n7u5WxbZ+vxaubsV1ZPUEpPcmPv9enO0tjf\nz97r39/vfeLsb+TW3O7f/VlOUVlbVF9paF996+fi6vptdvbjYF9tXFlRVm9la+zj9mz43G1l\n+3pnaeLb93vv7F1OUFxRU09WW/TKxMzLyMrN59fW4OPsYVROTE9bWFBWVFNXXFdef+zdX2js\n4ebY1+nVzNXc6e/r7l5SWlJSTFRkd+7e2ePv6ODd7NjQ5vPa19/revNub2RXWmV26ORm5XHu\n1OXr6Ofk7XLs2+liUVJYV19kTk5RXdnQ4m7o7tbM1eZle+re19rX/Fp253BdYW1dV/nP397X\n2eLZ6tzgXGJTTl5ORk1RUFpm+/P1/n757+nfy9LvaF7o2e3N09bP1Njf3Obk2ONnVFR7ZlBN\nY2JO+GJpT2Th5/pezs/Pz+5oSk1NPUZFXWnXz9LP18zdfvtr7c5c9/hFUNbOX2fo2u9patXK\n48/N4+zUXU5ga87z8nT2Zf7ZfXt461VLW2JZSFZQZnBvYXHlUlH7zufc6mlgY+P33NLT19zN\n6H7f9eHYzdHQZlDfbVVs31xcYFJHUVZp1WBVY11ma1lUTVto0NF+bsjLacC4w8K4v9HQ21lI\nVkVAR0k9Q0g8S1pRS174Umbh5Ovuy8nYzcXWzMHG2Xjf29rV+Hb58Nzt1u1fWmVJQmBwXlRY\nWklLSVlNP0pdaUlc08jByMPGxcW/wNnNz93j1dxhZ/tLP0RHS09KRD5W+fPd4N1jXHZhXmBT\nUWRhYtvOz8nKxsnMy8nT0NHt397kZ0xPVEtBR09HSU5QS23/TNbTcs26vbu/vsvQzNXvZWtP\nUVtARFJWSkdVQkhnQEl5f2jx2OLq4NDP0PLNwMjPz9TZ2ePo9uDvWkdNR0zgWV3s2lhk1mru\n29fP1m5yztVP6+B4b9h3WGRLTUdDUVBY5W9jWuzc2eFj287UeHfcfVxT7m/f1eluXNrSztPX\nxN9c1OZOWvb9UltSS+pZS1fwTWXSWVvW4kfrzVpmxtRkysbn0M/c81dXVkxMU1c+SebWYsW+\nT27F21dg8Pvh3kM8VlxF1c/e0M7J/e3c4OLSyOFdz8bOYkhaWVdNVlVLUk5hbGdp8d3ZbHzo\n13lvztLLdu/VYuXOWkj9/t1cZnlUTVnYXPjX3911fN/qRkrV40pTzkRVxMjr3b/L2efTXdzd\nWOXdWkpvSzlCaGDkzdZjXNpkTN/NX+e/2+jF0kvVy2JZzddZX1ZcVFfseklRXmlOWcp4YszI\n3mbRaXlWTuH11OTLyHtRXd9GTGrta2fE32LLwN1q3NzJ3tfW8mdVYlv7VV9LQ0VMYExv7Wpp\n7/Np5tXY6tfXfmHm2N1eZ/JX7uJq0NPY2+TL1X79dFBaXFBpZ1ZZXmtPR/p+a+hlV/Dj3tLY\n5v3g09xo73nr0OpTXGBNZ3xmYPXsVGfq+e/X5HX15+nb5ubOc3hcXl9v3+VrWXlaY2NaXW3p\n9exWWd/cY3/c2t/w3mNZaE9JXlZP3eza6NrN3cfBzM/P3ubX0XdUQk9UTFhKXGZa43lT9Onm\n2P5XVtzKbFB63+rgWVNZVnBZWsnS+s7ScWTe08q/yWHs5c91cmVAUE1GWFda3s7Q5snI1MjO\nwMx8195NU1RFP0RxS0/bTkTv1vDfxcLS4trPxsju0dhN5Oli0ddmXtxtRkVFQFVaU0xMYWfK\n2uPHx8rn7+vt32FSRkFRZt7byczPvb3B5tXN2ntMZ2fT5X1TTlpNTj09O0JBPUxaWNzExMDA\n2MvCyd9reM+8xfvP0VFLVk9ZZk1Z6/RSU9fP51xi0tnZ8XxRSk1PW05y5vRNVHN86efT4XFq\n5M3T7Wb43NPO9uPu+vbc3mTl3Pbx91/9zMtORGf3S0l2ZFdSYN9hR0tTXlpuZNDO7N3W3lnd\nxNLOzsvPde9v819PTlxlXE1q1vRr4/RfU3vHztTMysrVy/F+6U9LRk5QTk5IS2Xob2lcU3t5\nX3Lh2+jV293se+hnXftpa+Xu7ufMyMHf5tTu1N39UfbrZ+lcTk5d/XTp4PdmYn5pXWVQW19R\nUVFYUVJQcnPwysnezcLEy8/obGRZ7/VRT2BnXE1YU13R3OfY2+XZ3O3j3OXp2+5iXfBmTEtO\nU1ROX9l8dtDM91p62c7W0dpyfHHm7mJh6F1KSVVfUFRv7N3V587J2tvud/d27W5OU2lpYmvY\nzt3p2+H8dXpYVk5LTlJ07Hbr2fBfY3Xqde/b3NXPzM3T0tHe93ZVTlFQW2RWU2X+WEhZ4OH8\n3tjb3u/329ng19jW3nR25+fqXVVaWWZ6YVdRWPBuWE1PS0lTeebf0MjN183Mz9HNzdfl2dPf\nbVZQVFhWVEpGTFlaTWbe497Py9bRzdd9YX3scl5hX3Po8/92eOTedm776+Pn29xsZ/b3X1dN\nTE1MXGju6PPp3uHr29XT2+hcWN3Y7e3a/1VaZlVb9uLa2OPm89bO3+/61uH4a2ldVmFhUUxS\nXXZoWPPoc+zfbVRf5uHo59/U2NrKzOJofGxQS1dgW/tsXE5TdnJZbdnk6dLO1/Lc2d7a39TP\ny+dyV09TXVtKUW1nVFpmbm3j1t/7XnHt9l/u8Wt76uH6Xe/V2tXP0dnb5uxvbHpcTkdGS1hQ\nWFp06d/n187dztHa13Vh+NTqdGP6+FdPVGVdaGJiXl912Nl+beDW4Hz32+Tc0tTh8X9iX19R\nVlpmalxeVWlv3Nrd39Xb0/nu2N/q5XtiWF/d3XVQXG1WVVJYX25wfHpZbdT2cNTe6+/s2NHe\n++9+WW3Z7+/a2OlqbmnvW01SXmtldl5t39jY3uhmY15tcfnfztjjdONZW25WT05yYvl+/X7m\nytLk2th2YO/n8G136WNeWOx6+PHl31v1bN14X/b2d1tPWujn4OPrZnFu3eVibNrwau5lU2z6\nUlX+6u/9dnXo4mBo3N/vau7p7O3g1s3Mys/P2+rrX1RbUUxVaVpLW1BXV29ZWnptZFlY7mHm\n1NXoz8XP2dTSxsbN3d3qYF1PVlNcVUpARElOTmpad+fn3Obs2M7O0tbL09XM0+nj7tvo82lO\nTU9UTVdRTVlaVGFod+vl8OfP6OfxcuTr/ezU1uDg2fn8cm5cUFNaWU9cVFBd/u1xbfDa3d7U\n1+Dl9udtXv/va2JiXW7p5ePT1uLrb1RRZH9ifdjn92rrbeTU1+r+a1xvZGhWXFleV1bt4vvk\n0NTY5+V0cGZXce51Y2JlZFnuburj2+NocHjo6HdkZG91VF7q2NDX0NXHze7a7VdZbNreZmdt\n+f1PSlV8VEpJQUhJTlVqeuvked3Ixr69xMfS3NjU2F5VWlFaWWVhUFZb8XFs5dzgZXbtdPzP\n1fRUYO1iWFlrY+vj6nzv4W136HFp8/fuf3b079/cViungwoApICeACmfjzDL0bw5wrWhMCCo\nK62cIBnEn8AlLT20qGgjN6+qQS5K1bS6OjXNttNARlR+2VZDU8bB39vR4MrH3vrY32VdWlNT\nTllqZO9rbuHR5fHZ19zc7XRabGtMTVRRVfne6vza1M7O2s7R0Nnhb19jWGRqVEpQZF5PWV5S\nWP9/befZ2dz32O/WycnQ3NPn2+L2TkhPUlpnbNbo9MPWWvXO5fT/VlTj7eFxXFZnX1ZQXGZd\n8F9eXu/b8Vhe8n3s2v5w+OPd1eDXz8rK1tJpbHJ8VlBaXVxhUl705vF06O72bvF3a/XczNXX\n2d19Xu9WW3ZeW19eW01XWlP4993b6enfZUVTb93g0u1l3Mvd4c7n3M9rUmX3z9tfX1lq6+JW\nWVpeUWJtWvnR3mhu59fo8uhpcnnjXv/zW1hxU1RN3Mzf3fdu18ja19PrY/hiXXrpXk9tTltg\n7eht7EpWYe3j+tvoa3vT3dXl2N/gfU9nW2zuW2Hw3NvY0eTY1dhiWFRgY1hOTkhVXtt8WVxc\nzejX5trK2npub97P0dtfXPVt7WNoeev3+GfvXlbvW1te6nL6a/J5+N/Xy9Z63lxT0+ZURllJ\nUHjv2m7N2eLNzs3b+2NPT1lWc1hNSnhra8/V28/Q3WxSzdPd9PtRXWd2YVvcZ3Zi7Fvj/dZi\nWO7t1c3Na+lt5GRfXlROUklFRFPVe1nfyNTadV+PuAYyoo3PFBSdqcmtMjXKpPNtNXYzzKo1\nIUnBvv0xLdSrwjY547G2Tz9Xu7BXOWS/2NJkRFrZ/EY8W+nu69nZ3NrLyc7a3f5LVEzp3dfE\ncOht+NxsVEheTDxHS1r9091by87abmZeT1xlX/vm1s7kcmbddtXPzMXO0NRWTlrvfWfpzeBq\n6+/wY3n290xET0tJeOf+V/73ZF1ed9DKzmrz09vgatTfz+bhT0Vyx1Zl2W7Z8VldZejdfFpL\n3+Xna2fwamZQxNzo21tg39PmfORQXlnfcmbe/drje3Fw7u3R+uVoU1/l1GNkalpPak7T21zk\nV1pmc2Xp59TT28vN1lZoZElLS0hTXV1U38Xbxs3Iw9Pv48xuWGnlYU9eU1hzZUtVakflZU3j\n72vf0N/r5OXVzNrZ0+f+ZE1QXEpRUFRoWfxaU13rzM/V+tDK09/tXG/9+lpNSUFDSUJIXGfk\nzc3VzL7GyMjJztzU0M3czsXN0NrsfntVTFhNSEZGSUZDR0tFT1VtdGBaZ/fb69zk3t7e0MrV\n0dZc4fhv4mzm4HXva1hn5/Dv3tnMzNzY3ePea1ZgS1VMUXVtXml57P13bvl+39np6mfldfPw\n5OHz7/jxc2ZhV1JaT2zo4fpfYml0ZV1OU1dqdOrezsXKztnj3djleGpc/ffxeOPeY2BmX1NN\nTlpNR0lNVvzm1dfc3NjNzNLT09XZ32/64dbV92fPW8mm2R0RpIwcDb+mwKo1J+miV1m/b0O0\ntFZBUF7ozXE4RMPAU1Bc3b3AWERo0OlbTVRp72lJTtvP5G703s7XX1773/ZbYl964O9sWfLd\n5vJiZXdvaf7q4/budV9WWXrtfGri6NPJzdrYztnwYFRPUUtNSVh+2NHPzM7Dy9psWVJMVFRL\nUWhsYOlfXnBjbPfm4vl+3Wzi0+zq3t3h3tja6c/fdOVqbWNbTUlmWlNVWmtge2Re6+DWzc7J\nzMfFzM/W3/xvXU9HRk5FREZHT1NYUWXv39PN1ezS1dDVztrb1uR0/uFjbWNfWlheWGT5WV7q\n3ex/Zu3d4t/b187ScXbq+Xln71lbWltZW/pXYFBRWFZbW+vOzdPm7et4499ZZWVaXH/h7s7M\nzsrLy9DR2WBVWFlRS0dCTVdhY1NfU2br19XSz9HX19lvcl9s7VtqXFxf7udy3+jf6Ot1dPJs\n935v8NjY5c/b19PZYldbU1FNTkhGTFdTVVb20t3X0MrHy9jOz9TU0OVXYlpeY1tXU1JQVVdT\nUV9/a2hnZd7QzczR0dTpbVVXXlJTVWFkZvTb2s7Ny8rSzOT6a2p6c2lTTlphYG9pXuv3aWXr\n8fni6O/7+Ofs9V1PTldXVVZd89jV3Ofi0czQ3PJxdH5yYXHf2Ot+c2R14dze9Whral9XUFJh\nanlpfNve3efo7Pfh5f5ZSU5YXPXf8O70emrz7+zu5OLl19rY2dzj6e7T3XrubeV/7/ZnZVxV\nUk1JSlRZTk1OWmt5YXvs2tLOy8vHxMbM0uN0Z2ViWltp7eP5WV9xeXNnWFZfXVFPV1xlcv1/\nfu7e3t7c1NLPyMnO2Ov78WJYTkxOTU5LTU5WZv766dvd08nIxcnP1n1cWl9cWllQVGFrcP1w\ndN/a2OJ2/fLxaVlaY2l66O5t/d7k9Pnm4O55YmFhbPl/+Orc3fNvaV9icurefXj08d/vbmRf\nZ2Zvb3V5/d7a5npvYFVVWFts59ja7mhe+N/h3OPd09frc+7h3udqXmVt/XhcV1hZVVBOTVhv\n7OPe2dfU1Nvg497S1fF89Obe4ebtaVtWVlNTWGVsW05PWFlbYmzu1cvHxsfO2+Hj3uXz/HRo\nW1dSXej0ZF5band7dXDi293s8O92Z1tRUlZp597m/fnl2Nrj8O31/W9hbu7v83NdaXD782ps\nfu7g7fxfW2l18evn5eDY3d7e2tPT2/5cVlhdXGF4Y1RUWVZXX2hiZ2py7eLU0NPY1tHPztfc\n3/5mYlhTVlhWTktX8NfP2+jo29HY4fDufWZnYl1jYVZNSEpWX3B97t7SzMzN0tzY2+3+d2pv\n7+h+e3x1a3JkUlJTWF1aXWPw7frx5dPP0NPa5fLs7vxoW1picHVuX11cXV9qannf29rr6Nvb\n42lfY3h/YVZXa+3te3Pn7Ph9cW5u7uPo+Xjl4+1+ZF5qd3xnY3Ps39jb7N/Z09fm9mRfWlVV\nVllnaV9bXWlpa3fw+XDq3ed+c3Pu3tXW2trV1NpxZWVob2tqZ2vv7GlaX2t2Z1pZWnzo6uh1\nb3v9+2RbY/faz9nUzszO3uzl39nnZkxGSUhISEtbf+fc3NjOzMvR2PNaT09VW3Tt493o6/v3\n6Oj3ZmH43tra6eHn/Ph4amJUVlpYcPbs++7j9fns3uZzZl9lXVFcbF5l5dLkUnHO0nrtztT2\nZWN4W1Ds0uNnc+rzZmB3bGpyeG7+6NfN1OPg29Xb6WdhWFBQWGFaUFRaUk9Z8NvmbHD56tnR\n19zW0M7Q2ejo28/ZYl9zZ1hMSlRMTuHpT01272ln3MnP29LTalvb1Xtdbt7pXGr5XWfn3u9t\n6tbga3N2ZHLo/1VIRk1PXO3f2tnOz93f3Nn3bffl5era0+9daW9fX2xZTFj8YVpg9dbr387a\n69zmXF5hXFNRV1dSWeXa/ejV0tDedXFhYXz17d/j7tvpXn7a3vPp4uHrdutsWWhiZm5VU117\n7/v37ftmaHNoduDa2eLk29/r/uDlaWhqZldOVmJdX3RsXWrd33nk2NLOyM3o69rmYF5sf3di\na/9iV2NeT05Xcend2+Pp5+5oX2dfb/9zc/LXzcvM2Or4c/xeUFVUWGVeWVhfYVdUWvjRy8zT\n3dHM09nb7v99aV1ZVlpdWlhYX2ReYWRdYPPb1dLS2ufp7O369dnQ7V9YU2FubXdkYv5sYmBe\nWV/y7HN19ODa3f1o4s7M1+vtempxbnt2eW5aUEtQYnvq9/bf4t3b2u5tfe3q3974bGtpZ2F1\neXV5/fbr9m5mY2doXVZTWuPU0dPS2uzs7HBfWl/9cG5lW3Dr5X5mfPLh3ul6+9bQ4XddW1pc\nYFhVXGz28u7f187O2dvq/GpWTEtPWGV3fm1tbebZ3+Xqd2NbWmzi08rGyNns4Obj5HdXSEdN\nVFlSUlJcbWdifubo0c3OztXg39vb0tLd49rc2+VaTkpLV2hlWlFOVFxaZ25w7et2anfc3N7n\n5d3c2eX7+NrQ0tnc4e7p7WpaUUtOXGzl7G5cVVll5tbW71pt3t3uY1hj3c3Kz+BoV1x6cWZo\nd/b3Z1RVXGJ9/G9sfPdrWlx1euXb2tbT3XpiZune2dvqffXh3+Z4WFllYl5daXBbTktU6s/J\nz+xwW2Tp3Nj+bmtt8+/6aWFx2s3O2uno+WpqVlZn/ufuaU5HTFh05OXt9P7p1M3O0N9/bW5w\nWEtPX/Lb1NHT1NbY61pUXFtcWVZcZ+zl8l1a8d3a4ejmemhz6exvdur4dvLzZ1leZnX16+Hg\n1M7M0vxpXWR8bmRXWGrf2uliVF1n9t/u/m3q09X6X2R9bFNMSU9bbOPt69vNzub69PVxZWt5\n3t5mW+/a5HP729vq7+PzYlrzz9N7Ulhn8HlbUlZp7nhbU05QXefVz83P0tzmdl9cXl5ZYfXq\n3NXPyczV3+77Wk9RVVdfbW/o3+xeUVv7bE1MUl5aV1ZY6czDwsjU597Tz918aGrf3elmXPLp\ncFdKS1pdWlNY59XV2dzd3t3nal1eXmJ/dm3v3M/T5vNsaG1tXlFPWGdhXWjf2NzZ0NTi39HQ\n3/D9/3JdU1ZTXv3v+WptdfdqWVtl5NzqaVlq9Ov/d/Xq3uhoVktOZ3X169vQ1upp7s3Jx8vZ\nb1loblxdd+z7XVdf79/ta1lNTWLqfXP55uxuX15dXl9havL6ftbP2Nve3dj7fd5vWHrd2djb\n5GxTTFJm+9/k/vNyXFtTTE9Va+3n1c3JyMnO2tz2YmJcVlRX9upicnRpYF1eX273bV9o7Nre\n7uPY2eLc3HNdbWtYTlNw/+rq5Nrf3dvm8+x6X2htYlVSXGVrbHhgUltiZXvd0s3O09X0a+/j\n4Obx5tP2Xml09GdZUk5NXvtpaGvv2dTY4+ri5Pb2amD95OVuaHFrWFBNSFDs4dTP08rIzc7b\n7drfZ1pPSURJVmVfWG/8dHLy7uLUzszU2c3Q29vd5upuXVxYW370blhLTVVTT0tMV3blz83V\n1Nzi3+Pd3dra3NrneG1wZ1dibV9qbWdtbuHcf/vzb3J6ZVNTWmVka+Xf5+bY4O/sd3hu9eTb\n7V5UVnF+8eDtZ2r04urw4Ob35uFvV1Vofnl3/N/X3e5lWVxfYmdldOHT0+H889/Y9lhVX2hk\nX1RPXXHo6e7s5tjac158295rU09ab9/Y297l29PU2ODc4u/q6+ppXWJSS0dDSU5YW1pl69XS\nzsnHycrO2ez4629cVE1RXnZ3Xlhcd+78ZnvY0t9uctXHyc7abVhWW1BFQ0lXYFFSbd/g7dvO\n1szDwsrp+ejjd1teW1tZXWRnam3m9FlPXf1qW1py3tjY0OBkbW98bmp1/t3b3/Nz7uLe6eLh\n8n3f0eZgW3P/SUFf4FxGUu7+WV7ieVRgzMHN08/N02lffmRYae/taWfo0dtqa+neY1FUWlpO\nVG91W17z4enm3NLMy8zU3N34cn5hUE9XWlhWbt7ZfFFs2+Vya9/mS0f23FBH88fL7d/Jy/lm\n5+FYVeHN2l9d8HdVT1x1WVZbaGZm4OhoUk951tfj4tLLzNfZ3PVtZ2RaT05TU1FXZOjX1+bl\n3u/m2MzR+Fln2VxGS2XT8mXa0ltM385fS1Tg0V1N89hqU2Lc297Wys5sZ/7lWUNIS0ZHZ83F\nzMS/xsrhdeLQ11NW9GdZWU9KS0lJX3pTTUlEPU3aytBxx7iwq6+7r7rYWUJHNTQ8PDU7QT8/\nR1xPWWlo48vAwb+9vsLEytHd2NfceXj5XV1OR01TUUhJTEdOcez2zbu+x726yn3a0Hnpcu5Z\nWVtASj47Nzw6OVRbWuTLz9HDwMnJ29Xa4MTV1sTKz/Hf1szW7NZ6XtvmV0xFQUpTXnJYXHdY\nQUBGXFxm39XUz9Xc4N7Y3eRo6drW2tlqW/75+F9bT05g2theaOXU2NLVfvfp0+5XW+PnYFtL\nU3vf3NrW5tvQ22dXWVlZW1xZc93P3WlrXmJuX1FPX/z+6tjU09t8YFZd7uPc4Ozp1MzN1t3f\n6HhuXlZed/5bXFZTX+rbbWtufVlLVltcXm/8ZO3V1t/q5u393t3t7erwdPbu5uDe2ud6aGFl\nXmZ4YVZXen5dY1hZ+9TY08/PztXvX270aVNQX3Tc4nZ75uXf4F9NT2R1aGVXWF9gbWZe7tTP\n1NDR1NjkcllcaF5WU15jceHX71NU79DeY1ri3Wdv6tfW7d3Q7PrTzNh2XGTxaFpr6/hfX2dW\nT1NpcF5obGdkafXc3ej6ZW58dt/R3O/i3eH0bWRhXlhaWV5YTlZs283NysbM6PjW32Jk49ph\nSVrT70RJ4edPSWLabFDjydT37t3fXl7k1+Zoaed4W2zt7lhPYfFiVHna3uDVy8TD0ePe+ldM\nUVxNRklTWGH9727w2NDQ3N7Vz87cYVbi705KWt5jSl7uZFvgwc9ZVdvJ/lDfytZvZ25VS0/s\n6VVV7tTcbv7h0tnm42JTWGFjW1pq08fYcenc5OxsWFdWTlNZ9dza1Nrld3FoaWFl+eXfbX/O\n2l1d4M58S1zab01rxsbsWn/fT0Jb2/tbXW7tXlz/8+934t7qafrOyd992s/b9u7pZGFnZWBd\nVU5QTk1OWX7r7evu3NDMzNv7XlRa6+Jw283R3N/i6+jkbVVNSkxWV05ece3q497Z29/Y2+l9\n8OX3Z2/l2tXge2tqXGReUVt47/lsb+jm5eluXFRqc2Fh793mcV/67eTc2utjXe/U7mNx4tXY\n7fpydn18cG9ueer+XFpcav9t+fNxZXDl3Od95tr2X1hqe3nf3ObyZmp5W05KVOzq9Ovl3+nh\n3uLe39/d82z63Nbkd1xWaXJqbmxw5ux7cl9nbXZdUVZu+evl+mhz5NfpauxuU01RbuXa0s3J\nz97b3OF+aWpv/2xsbv/4cWpuXV5pXFdZb3F95fHs79jT3Xde7eXg62VYUltmcXJp7Nnd7njk\n3dvb5Hly595qVlVVXlxbXlxdY19vefzZzsvMx8jQ2OVlT0lISkxKTlt25OV9/t/Z2dvW09TR\nz83S19LV4flxZ15XU05JR0hNTk5ISk9aXVpt3szFw8LCwsTI1mtXT1tjaG1tfuvsblpXWl59\nd2l34t7n9vr9a11XXGNsc3Pv/Wv6/vbp4Njc6O/09njg3OHieWh//nliY2RiXlZWYmVj89rX\n+Gln/fTt2M7P197qYVhQWWdcT1JdZ2xiY/PrdHn569jOy8vQ1tDO3F9WU1NTS0dNXnnx7X7/\n39bN0tzU0NHf5Obp625aUEtNWHBpVUtLUVdedufg29Xa7/Th19TW09zc19vi925leu10Zl5c\nWltdY/3obVpgbHj74dznbFtr8G9fXfbf29DZ4Nra1dTZ4PZ2aFNIRUlNUVROTldm9dzS0NDP\nzdbm4t7m6972avng5WRe9ut+b3ZqZW7v1tb4X2JaTk5MSlNXXl9XWO3T2djSy8rLz9vr58/N\n42lmaHB5ZFlbYmVXTU5fe/fm7Ovb1tn3Y2Vv915WV1zr2Nba293Wz9rv9uTd4XpfW1lZWlxZ\nW1VLTlNbXmzx/eTUz9PPx8TS7t7dbU9PXX7m29ba1M7Y919OSUlLT1BOT1/86t3Z2dPa63P3\n3tzha2Foc/X07ePp287Q2m5dV1daW1dZZmRaV2l66d/X2uTj3Nrv9tnV4e34dV1Sa+BfRkJV\nb2JcauTTzcvN0tPZ3dzqdWL+6WNOSU1YW1dXXHjf29vk8e3ue19hauzQzNxw9+XodF1dXmrv\n8Gx43Nfn9+z1+en4X1VQVvd+V1lr4Otw5tjZ3tnZblpv1tV7ZHXz9PF1aftlVVtUSkVPau77\n/NzUz9HV1N3dz8/gbmtxdWZbXWBq+mRQWfbv9u91X15uaWRcYf/s3+LqaWBsZmp4d/nczdfm\n39TT6ubZ7V1ZXV1abN/U32Vq7nxhaXRaUlx27mtVUGvt+ffz/urZ1d7k2NnzZllXbuTe/XPc\n2e5iZHnt3t7ofHl9c11VUE9XX2xkbuTa1t7o3tzd5XVmc+TW22xWVFlcUU5RauXe3N/c19HS\n2+Xz6uTf6GZbanxtXVlbYGxsZl5y4Nzm6+rq6O//b2txcn16XVlSWnTr9/3p39nc3ubq2M7X\n73Vx9n9iW2zp0tf8W1VbXV5aUlRdZmhkdODOy83U3+nk/WRZXF1gX15pX2rx9npdX+zd4tzc\n6djNx8nT3OxxYlZOS0xTTkhIT2Hm293ncuvX1dx4aOvY1tzi3drX4WRbX1pRTU5SW+ri8eXd\n0tPk7+Xa2uLucmFt+GxeX2FcXm5eU1hrdvVoa/D/ee7p39TT1Nz2bW/3dm1v/P9qd2345v51\n+uv77t3c2d/l6/ju43tZSkxPS09XWV5z5NLP2NfY3t/f5fz66u53XlxbWFlZZO/g53Zq2cvM\n0d/k5fX692lmWVJRUl5v5eHudnJzdG5gZH1qdubb1dvh8m5taFxcYGdmY2x0+ujh4+Xn3dnZ\n29ra1tzzemRTTUlGRkpW+fprYGP95NXPzszJy9H9aXri2dXZ2N7tcVJKR0tMSkhFUm/p2c/I\nxMLG1W9bU1FWW2FSVG/s283Izdl5WVFOUV5gW23mz9HV1trd3Njeb1lRU15pZ2/v4dzoaWZj\nX15mZF5bau7f3uXa2t7raWBqcmlcW2rcz8/d/25w7nxXUl1o6evn09fd82JUT1NadXzr3dvd\n3tjj5d97bWJaW195ZldQVmfm3d7q7t3X3X1p7djTz9bZ2+VsVElER0xRT09b7tPO2ODc4+X5\nWk5Se93a5uPSxsLL6HX9eGNWS0lTbGpifeLOzN1sVVFUVlRQUV7m2djPy8zS3PZtXVheav7u\n6N3b2N3za19cWldRU1/26d/m7eDc3WxNSlNp/O3f3dff39XV0tPdbFJLSk5UXml47vf939PM\ny9DiW05SXn738uLa2eZvYFxTWFlSVmfn4On+e+Xd3+Dub2lwferc2tDP1NjrbWBbYWhjU09T\nXWhdX2fm1NrX2eftZE9GSVvn2trSzMjI0ehmWlpfW05MV/HW3OPb2NLXbFhbYW9tWlBZ6NPP\n2N/m39zqbVhdaGhjaPPb1NThbV5XV11WUU9SYWNheezUycXH2e/7/H1dUlhj8OLv7m5ua11a\nW19icfTy+u/ZzszO1dnb5nJXVVZXVlJWVmXu7nNyb/Hh4t3e29LMy9DfdmtkWE1KSkdGTFNb\n7NXX4uvf1czEw8fN2d71Y1lOSkdGRUVKWmXx4+Xb29LO0tDOzMnHxcjXZ1FMREFDR05PSktc\n/ePb3dvRyMnW6eXf3dfee2hrYF9cXXL38fliXP/d5H5mVVBu0Mzdf3hkVVJr4fRgX15WVmvi\n7nT95uff2dXU1d3rZFlm+Ojl/l1ZXXftbV1dXmJxZ1pe++DYzcvKz9rb62daX2haUFNdaPt9\nZmNx/OX5ee/g2e776tzb7W9jZ/3rem1pZWBfanBycurY2OXz8drW7GxsbWRy9G9dU1dr/WVV\nVV506Nng3dDMy9fl2tvg6ndrX1tTTlZga3F4a1lWXPnra1xRW/nk4fvi0M/Pzc7OzcrP6ltR\nT1NaVlVg7+bq62FWWFdUUVNc79zkfHzu3930ZWLz3NfW1tXhdGBWUF1raWp72s/LytXef2V8\n8mleW1lVWV9vYF728GNUWF952tHV3+jo4N7k5N3V1drnfXltW09PVWL172dXXW1pX2b55+Db\n3+Lh3dLS6mNeWlVTW2d6fd/Wz8/U4OPldmlcWlVTVVdv+m9ufHR55NPV4PV0bWlobG9x/Pn7\ndX7p7Px4bG16fV5KT/be52/z29/j0tp1Z2/m8mJr3tftX11mY2N+73Bz7NTN3G775GZXY1ZJ\nUXxoaO7rzMTUUkla8vvy5PXq7tzV4dzb3dzlaWL+6G9pYU9NU15WWGFr4szK2/97aFNSYvHt\nzcHH2+7V1epWT1FaVWRkVFxt0MrU19bdcGNeUE5QXm5ZU1tiZ3Dv3djU197r59HX2Nvl5+js\na25iXVlOTk1KTFJaXmZ65uD0+fPv3s7Hyc3MztjmZ2BYTVRuVEJJXWZVVGr16eXR0uPcz8nT\n9W3valBOUVdc+dva7uPV1vFSVVRQUFBddezXz9Xd4t/Z5Hvs2+j74tjX29HR6GlaWlVPTUxN\nTlJSUk5NdtTU1tbO0djMwM5UVuv0WE9eeF9f4tXo+OLc4/7nzs51bHBVTl13ZFhc3tvt49bY\n4n1gUlFYaWNdb/Hd4v9kaF5fbnBfXv3Y09Xc7trNz9Ld5+bl3931W1pdU0pISklJU3X97d3Z\n329dauvk2M/R1tHLzdPkfO5qU09OVV5wZlZUW/nt5Ppn6dna5Oze2t/fcVdZdNTbe2hofWxo\nW09UX2VeX33o1tHc3vZsZWl+cfHZysrP29nd82piWFNhX15ZWVteW1xbVF177fb47+rk7uHa\n2c7Iydno5uHzYlZQS0tPUFJTVF/x2M/MyczP0tnl8+3wZFtVXGp09m5YVF5rc25y3tnd7XVk\nW1hbWk1OYOHXzcrLztff7O30enx+ZF5q/+jscF5VV1ZWVlVdXFxc7dLMxsnQz8/Nzc7V/V1T\nT1VRSk1WXF9iX1teXm18dN3Q1d3w8d3c/mxdZPfk3N7e6uLc5WtWWlxocGNm7dvb+WNu6+zr\nfFpd/+TobV9WY35qY2Z479jR4OPk5Odxbfrw/P/7XltbX11XXWFs6uLh3NjNzNHjbGpyb2Zc\nVltaWFdVW2l9eW/5f37v4Nva1dTRzdXpbWtuYV1cXF9lbmJaYmxpY1tdZnTr4NnZ4t/a1tXc\n79zS1uB6b2ZhWFBLTFBQVVJXe9/i3Nri4tfPztLa3uXm425bXGZvaWJbW2P0f3RcWnX3bGBu\n+Of3Z3rx8PR+anvi29HU1tjd3O1oXmZv9Ptwb37f3W5davdvXVdbZXZqZ3NpbvP27O3u8fDq\n6G9aWXBvWk5UZ+TR0dLVztLU6l5gZV9mYF5fc9/a62x95eN4WVBZbn73++nY2dnT4G5z5uT/\nX1tdaWdqdmRgduns8O7l3PJdW3Xg6PfpcV9dWldfZF9ZZ/z4/fzf0tHW2dPS2tnfb1leZFVL\nTVNde+Xj4djR2X1gZGFee+3q39bP19ve4+XneVJISU1RTUtKUHrUzdTU0M7KzeVvb+fj7nr7\n9e3h7npubmtOS0xLTVdgbnbo2dXW0tfj5tzV2d7n9nlkVVBVWGdgWF1l5tnV2tXS3tnW43z0\n7V9PTU9bZ2Nfc+zZ09zxYPrz+/F8a+zb5XNfX2BfXl5r+N/c7eve2dfd63lu+t/Y4+xuZGz3\nfWdaWlhXWGJ4bGdkYF1k/enl/Wz48+rg2tHZ5ODb3+Do8er3fGZn9+NuU01Va3bx+X3m2M/O\n2e18aVtPSklXZVtYUk9bbu7t4tfUys1c6cLJyfbcz+FkXvFxTEtVbWJST2JrXVhf8nJfW3Td\n29HIxMnX39HT6nlZT0xLTFRn8OTf7HJjZ25aUVBd/vfw69za3NfR2+/f193q9efb4OnpZ2Hw\n3f9bWV1fWFBKTFdx7F5PUlt793r76NDMyMTGxMfN1nljWV9XUlRHSUhMU1do+9fW3uLs3d3Z\n3dbidOvl7mRaZGjy7+tvXF585ndqa+bqenpm+uPn715WZ/P76HBe4+jtW1NYWm/k2ebXz83T\n5HxnXmFkWVNWb9fa6NjTzthvbFdLUlpdVU1bbWxtf9rV3drZ3e/08/ZrWX3i5+3e1dr9cd/l\n7eLS2mNVWV1XTk9JSVhjcGBv3fPo6Orb0M/R833i3954YGRVX3B7d1pt5Pp3+OHid2FoXWl3\n1M7a3ePY2u/n7H1uVWZPTVhPW1RXXlv+3c7R2dTSys3aeFlicHxqWFx9cN3qcuHi2eZjXlVi\nZV/4X23p8djrYuZ3/GJNWVR0e1z09dnKy8fP5dzu4mRSb196dVhaXVhjWVx/dd3c4tfl19La\n1O1672r/XlpdUmzp5OL09tp9YVhPbVtWV1FcVWzp7eXfzcnQ3uz04v3s8lVeduTZ6N7c4Xhg\nZl9zbVleTU5pavP77NvXz9Xa2n3y9FtYV1ldUE5WatjR1ej8cnXf3N7b1dneeWhqXGRlWFxe\nbvnd3dHW09Hc6mlbXlpea1RbW/p2bmZVfnJlXFRcWmplbWf50MfJ1/3m3d/f6/Ps2c7eam9m\n//VkVl16d/L25+zy3d3oaGltZlRUW2B1WVNPVl9te1lcX2zs2s3Lz8vHy9j54t3e6HfrZVxf\nVUxEQ1RWYPP31dvTysvL2OVqTEpHSWZ+b/lr4s3M0t3e5O38XVBQV21cT1J03+vf6OTb5N/j\n91ZayWZZ7trD3fnWfVZP89h5W9/mXFFeWExNYXBTWd3P2ubT0tTe2dZeWO/U1Nfe1+Vz/ndX\nTk9QTEhRU0xZdHzsdtzKztPPztbV2N3hd/XnX15bW2VdW1tbbPfn19/04uXsZlZYWfDa6Pnt\n19Xh7Ofo5u9vX1BZVltSSE5bbv3r/unV1tza5ej0bvDrbvrp/utubX5u5t/6aFpZbP5pb/t+\n8Xjv39zV0uN3cP786OlpWVlgWlVaX2FlYW9928vP3utuXVxrZFpdWmv789bMyMjKztXW3Obs\naVhVVFlcUk1NUVBOS0tXXFthft7Py8nM1OXs4Nvp+una1Nne3/P9eWhSS0tNaP1sXGH33tnd\n6uze393sbnX+b21lat/Y2+L0enJybVpaV09PVV7x1NDV2eN8Ymnr9Wdi9tzk9GdbYF9kdmVj\n6+Xf4Nva3efv5OlwcPV+YWBhbvtvaW/639bge21kbu37alVUYvjh4Onc0dng6nZtWl9dWFpd\n+uPd4+DXztpqYV9ieW1dX1985v5iX27t2d/cztn+bGJk493k/11TSEdGSlJm4tXS1Nna29vQ\nzc/a4d/wZmv67/vt6m1aT1NYXFxkZmJ+eGRr89jY4ujw8eDsX1pf793kW0pRa+3r4ufs2M7T\n4uXe3dzzXV9sX1ZQXv3h3Onz+Pp3amZXT09UXGhz5NPMy8rJys7X61tJRkZFTE9XY2b54djY\n4+vi5mxeb+bQydDd4dnT1+RrZV9hYVlYXnvvcVtbZ1tZWFNTYP9wbW913NrV09PKxsXK1eF4\nYV1STlBZXVxofvDk4urzX1VaZ2Z77Ovt3+FxbW9/3+FyZ3BrZ37g6u/YzMrY9vvh8WFTS09U\nVVNNT15+8/rp1c/Mzdfrdex/ZV9ZVVhpYFZTYubQz9Ta6eXi4W5p+uNxaXt+3efod2RgYXV7\naGRvZ2Jk8GJd/ut7bGJZaPxjZHx87ujVzNLZ3uB2XldfZmNodejh0tHV3mRr+OpnX3Flbflo\naefWz9/9/GZkZV5VTlplZV1QVWvv7HVncHru4N7v6M7Jys7N0djL2mpt63RYXVZVWVRRTU5Q\nV2FdV2lfZvLt39fR1dXR09Xb2OVva2JYWl9WTlFdZO7Z5erOycrbemJgfG9TTmNt5Nja3eDe\neVVdYlhUXGdbXnDm3Nff4NrV2v31eeXrdGpeVFVjY2t5YHDe2tnvbmzu2vRhW19r5+vsfezW\n42lr5eDf3mpbXHlwY15XZ37e6vN8aubhfmJ25tXR2+ls3uRfX2V27nhaZ3D65d3iaVJZVlRZ\nVlde4tnpcH7l693Y2uHW1NvwfN7f3+TwZV9x+/5iW2R1X1FMSk5remdja+Tn/9rS0t/p1uLn\n39bb629ubV12dndbavnu7ef9XFxUTk907uPnc27e4urc4O9YWGtsa2Pq4fT1fHbm5vVr7+bv\n4f1dUFhr//Pu7Xj8+tzR2+Db1Nbh6dzT3fhnVExZZ1tNSUhQaWtbXH/ZycrQ3dvPx838V05O\nVFdcXFhrd/V2c93a3+Pf0c/N2OX5Zvr0aFxfZWdqZ2VcW1tZT1Fee+ja09rc2ubf4dvOzttn\nXGr1/W9lWF94emhoXFFYZXdkX27n3+b67uXq3+F3WFxr9fF79//l3+Xe6/rq329XX2ri1912\nauDT225jWVJRW2tUTVzt8mRkdune3uDt4t7Z6+Ld3OPh8VpVWnfwa2Z83M7Hy+Rs5dfh+lpU\nTEdLS01LTmru6GRu8vPc6N3cztXd43Tv5eHez9v1/fN8+m9VYXBkV1Re6OBvduXf321r7uzq\n+2JTX+bxXXPg7V1j09FxW13o7mxe8uTzbPL+Y1pccnloZ93mYuro19B88una8H3w+8TRY17a\n01pHWG5USk9+3tnhZF9Z5ehq7FhZT1Rf1c7O5fHI0PBvyr/QZU5l21hPbtpsTVZp0V1ITVls\nRUh+ychu0crYaFXh1llS2OpRUGPOzP1V6s9iYmTW1/h8+9LL0XxyfVJmYU5qalNNXEQ+2m9I\nZdzE2uts3tdjwr/U0cfGZkpNbmY9Tk5c5lTv397W5PXg/WNT0tdfWOvW4nXq4txYYtnG70hr\n7m5QX9za90x74jxO7Mvq4/Pf2VlR3v7/z09Md8fJ9MbL4s5q1N/n+U5dQuVQMjlCckY+c762\nzd/Iycxgwr3QdFzTz+LwcOZWSU9VW09JVlVOTVjr7nlM1sTQ+VZnZnh8eOR03dDMy9vf08fG\n7kjt00tAU9BUQVbMyU5Vw8RIOXbH2j8+ys4/PVa/70BI7b9XOEnIwM/CsbW+2OXHy8jHwca/\nv879W0I9V15FOz05LCQnLy0tOl3rRztIWN7rxrWxr7arpZ+bmpqdpbXgPjlAXe/LxflCKx8b\nGhoZGh4jIx8kLi8xOU3PvbO0r6m2qIuAgImcqc0fCwwcOseumZCb1B4XFhAVHC7MVUIsHxgS\nFBYcLjz5zdmqpLDOuo6AgISWnJwlBwUP0q2ok4+Tqx0SEBMQFSxJPy8lKCIXERIXHSI2zbOk\npaapnIOAgIidoa4YAwQT0K+mk42RrxoPEg8NESnI3zkzRDMYDxIYGhstuq2ppqOnm4GAgIuY\nnqUVAwQTRVS5lIuNpBwTFA8LDR9b2nvQrcYiFRESEBQgRL6vopqgupeAgICOkpieFwMEDiIp\nVZqKiJNXIRwPCAYNGy1UvKeoPRsTEA8PFSi8o5yXkY+GgICLlJiXrygXFRsaHBoePcu+zm7R\ny3EwIR4dHiIhJCksLy8vPG54duNq20osNc6cjY6Mi4OBiZO6tzYZDAUIDQ8VFi2rnJeampWX\nqEchHRcOCwoNEhcfM8uvsa61ya2YjImKi4SBh4yxsjkaDwQHDA0UFR+5pJycopuZorw2KSQZ\nEg8PFBUUHCZyvMW9v77CoZKJiIuIg4OJl8jnJRcKBAgMEhgZLLSelpqal5qlwzIpIBUQDA0P\nDhATHj7jyMWtqJ2PiYSHiYSCh423xz0dFQYHDQ8WFBg8wKmlqJuXl5+7TzMhEQsICQwNEhwz\ns62opqKfmo2KhoqJiIWJkq9PPh0VCAYKDRAQFCy5n56fm5eXoLlENCkYEAsLDQ4SGSfrua2k\nqp+YjoiHioeJg4uUsDcvFQ4GBgsOFRcaPMCoqa2fm5ecrLjQ3RoODgsPDQ0aJzvIt6ylo5CH\ng4WOjIqDjqchFx4PCAEGEik9ON6XjIuVn6aqaRkNDRETEBEcKC4rJCYpIB8aHCycgICAgICD\nipwBAAAABgUXl4CAhYeaxB4CAAAOP7Ohi4OInRYIBwAABAscnpqcm5++J5mAgICAi5WKHAAA\nABE2K8OKgYSOLgYNCQUBE5iEhY2UmskNAAAFDQ4ZfZuQoi4cExcf3YCAgICAhI8OAAAAAcWP\njYCFiJAXAAAABAk1iICAhIjPEggAAAMbvqqhnZ+/GQoNFBowgoCAgICFmRIAAAAAMoCCgIOM\njSoAAAAAGbmMgICDiLYGBAQBBRWskpWt6TMcDAkQFh6ngICAgICWFQkAAAAFmYCAgoWNlwsA\nAAACsYiEgISIjxkAAAEMEimskpOoKxsPDQ4QHCKTgICAgIJCCwoAAAALjYCAgYaUPw0AAAAG\nl4KAhIiLrw8AAAERLMrMqau9JxMODg8VHSidgICAgICnCRcDAgADvYCAgoWmIRQJAAAALouA\ngIyXsDkQAgAIG7itfjYoLyQXDw0PFx80i4CAgICAVQoMAgUAC2+AgICElBkJCAAABB2bg4CE\niaMcDQUDBAsfwqKm2jUoHxkPDBMbKY2AgICAgKQKAgAAAAUjhYCAgIeqBgMAAQcRu4qAgIaL\nrQoCAAAEDi6klJmuLBgVEA0PGCGWgICAgICRCQAAAAMHGZmAgICEjg8AAAELE0eYhoCEipcO\nAAAABhEynY6NlsYaDgwLDREgn4KAgICAhC8AAAAGCRMwj4CAgIaRDQAAARErrZ6PiIaOug4A\nAAEPKK+cmZmfvyUXERIPEyWhiYCAgICCoAkAAAAGESmdh4CAhYm8AgAABhYusZeMh4mYKQoC\nAgoXQayclpeasTMZDAcKE8CLgICAgIGUDQAAAAIOO5ODgICEiawGAAABES2plYyKjp8oDgYF\nCxhdqJ2anKLVJBMKBw0Xp4eAgICAgp8IAAAABhW8joKAgIaMNwEAAAEQMKKQioiNnDUSCgkM\nGTivn5ydrTgaDggIDhqbgoCAgICEwQUAAAAMJZ+LgoCEipIZAAAAAhFOmI2JiY6fKw4GBQoY\nPqOWkpWlQRwOCAoQLY+CgICAgIgwAQAAAg0jp42EgIOKmw8AAAAHG7aWjYuNl70aCgUHDiO1\nmpKSm7srGA4KCxqwjICAgICBjhgCAAADDjSaioSCho89CwAAAAsjrZOMjJOnMhYNCg0ZR6GV\nkpel0CsYDQsPIaaLgICAgIfTCgAAAw0mrpKKhoaOtBYHAAEIGM6Zj5CYqz8dEQ0OFiu2npiX\nnq5uKhkTEx3DkYSAgICJvhEFAQQLHEmdj4uKkKQoDgYECRhxnZOSmKbYJxYPDRIdPaydmZqe\np9YmFxIXNpyJgICAiq8ZCAQGCxgvqZaNio2XTxQIBQoWPKeamJypzS8cEg0OFyvBopmVlJmp\nRicmLlusmo6JiY6eUBsSEBMbJlG8qqSlrfctHRkbIjJN9tfNyMpfNiEZFxwtbqqdmZmdp8Q+\nKCIrqouEhpO6Kx8rLT4nGxodR7aforXNNzYpJR4aHB4sR7+zxUwuKCgrNfeun5ycnaCrzzYl\nICuukYqLlqtKNTUvKh4bHjK4pZ6ovT8qIxwaFxgbJkrHvOg/My80PFXErqWfnJ6jqbRnKx8u\nqpKMjpm0Pi8wPDUsJCY0Xrq+00Y2LykmHx4dHyUrNkDSvbe5xM/bw7muqaSgoKKqyDMkIic9\nv6WdnqOqrLnSRzEsKjE+XtzPzexTOC8qKyolIyAnNcquq7DMYVhaS0vvvK2npKu7ejw6O1a9\nsaysq6uyvnZBNS4rKThbvcHQ0vBaOj5BSEM9QEJHTvDHv85WOTQ4Sc+9trW+v8fsVj84OFTI\ns6ysrLPHbDkvMTlv4srGurK7zzgvKyosMkT0u7q6vtDS4mpLT+fQwbm0ssRMPjQ6My04RcWw\nqaeuzzcvL0I+QEFKvLCmrsFELCssSmzJz1howK2tt1lCODE+Usq6ucHB5lc/Nj01P0fcua6o\nsb9JOTMzQkPc1cK2uLbAbTowKS8+6ry/vlvXf8/PSkI1SOK9trOzu8tbRzk+P0JO2LOxt8HO\nSTgrKzxDyM28vsi9WE85Mz1B4L+2usvM3NJfPj1H2b/Dz72zuMk+MS8yQkhjybuxt7/TW0cy\nLi0xUsu1utJp28raSjI7a7m0vMbPy9PnSjo1PN67sLrL0urtW0g9PTxGaNG9vL7Hye5bPTQ3\nQmbn13fU/m1daXBmWVFdTdfIxs76Uk9MY8/EvsDFw7u4u89JODlBUf9bVFfdwMPLV0g/Q0Q8\nOTxdzNZNTP2/xN9QSWXm2+fuas7Lzv5Ybcu4tbTCuLW74T8+PkA3Okb21+9VRkdDP0U9QUZM\nX2rEvb7L0c/HyNB4afdkeGd+aWFNSk/Wwru4u73KY0dBSU1BRl+7vbvF9Us1PkBVRTk5S3Fr\n8t/NyeZOXs65w0w/aL+9117sw8bddd26vcN0TFZW913qYUtCP0FJYHPoXlrf1d1VPj1CU1dd\nc9fL1+PKvMFWR0rmx9vo17/BytPOv77LX09NUfbcWkdDSlRHRF/J0l9b/uBePTtCT1xl99XD\nzPZaXtXEyNXcxb7HZVvs3+VmXlhWTk7m1fpYXO33YExM/dnOxb+/z9fX4VxBSFtySj9UbH1J\nP07u1VxMVm7P2dfPz8bP1uDMwNdZ5cjJV0dm6WtHR933XdLSyN9YUlpcP0ZVZm1LXNDNenXc\n0t5RV+Pcdltb8OFaTvHKyNFz8snMcO73bGdcY0xISGnl6t3Z187Kz/pndnxjQjEhHyw6V82u\npqalqq+uuLjHyeNOO3LfNDA2+ldGO13tZUM5SV5VSj/t1M7f1dbMz0/j0s/fRlNhyM1baWpi\n7N7T1vXT1+RNP1pcWWz3xL/Cw8fHa05v0NN4duJrXVpRT0tOT0dDXMnF2f7lzsbXV1RoY1dP\nec/WW0pUST04PFtcTFJj2ORe+djEwtfiwrCsr66vtMZEOTxCSU7Xu7a4w+JNOzAoJSYnKCgr\nMzk8R1RcU8ixv87GrqOel5WZps5TPDUvN+mxrbe7sc8xIR4pLioqLjo2LCosMy8uPuvCxlhB\n5cvdY8y5tLS3p5iRlJedqbxVLyoyWFtLx7S0QiYhICQiKzjLu7hHNTMoISVDNzw/NkNXOE/K\nvTtSr6iuNDd9qpqNipiYqrMiFxwszE+5pJ2nTSQpJiIdML+/PjhBPyohJzAsIi08TUtL4b7c\nx7KstL6uvU45n4uJlaKdqS4QEx89NlWjmahCKi0kGxsvzsj6zbPNMR4dHRocKU9bbr2xuElA\nxLLE1aiqy2eOgIWnvZqfEQgRrFkbvJSPtyEtQiQNFGC4ZC/OrToVER0cGRo4qK9mu6a8My++\nocI3e6aYgICMlJyaKQsHHj8ZSJmPm75DOCYNDB0qOTrdvXkhFxsYFhknV8CrqaisrrS9fdq3\n1k/BiYCDm5aPrgwCDT8RGqSNkpyp/kESCxIXHivf17pZJiEZFRMZHznCrqqrnZ+8V7OxLSym\n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\nSEhHPUdjzLSwq6Wfnp6jsa+10O/J4lJHQ0xtY088NCsuLS45Ojw1OjQ4ODY3NTY3W+C4qquv\ntq6yvrK7r6+srrSvsrjB0u5aTkhGQTo7OzkyLSknJSIjJS49SFXMwMezuc7OysLFuK+vqKWk\np6iqr7e96FhPQkM8QDs4OTEzLi0sMDQ3QEVwYuhUQEU+PUA/QEnfycC0sK2qq62srrKxtbi1\ntbG2v+1SOjc1ODcxMiwyMzoyMjMuMTc2OURHXfjq0sm/wL/EvrSwr6+tqqmoq66wuLq+wdxO\nRTk2Ly0qKy8vLi8uMy84ODg+OTw7RlXXvbe5r6yqqqiprKuxrquksM9HzsZKLzI+Lyw0Py0u\nU85OMC5Ot8EvJB4cHBkjJ3K4qqWYlJaVl5SdpKO5y3c7Qzg2MDM9LS81NTRDPjw0LighHRwb\nGx0eJCw5T62elIyLi4yNjpah4DUhGxYVFxwqO9u+ta6tsuo/LycgHRoaHh8gISsyNzRNr56W\njIqKiYqLk6A1IhQPCwsOFi3rqZ6YlJef0y8eFhEODxIYHCEtQ+vvVdWomo6FhYWGh4qVthwT\nCwkGCAwc6KealpCQmK4vHA8MCgsPGSo6TnK/r78yJ0+nlYWCg4GCgoueHBIKBQEBBxNLq5mR\njoyPoi0ZDwsJCAsTJj7Qu6+ntj4nKVCfjICAgICBg42oEAsEAQAABhq8nZGOi4uSryQSDAoI\nCA4bL9iyr6ijr0UrKS0yso2AgICDhISPzQ4HAwQBAgodrZaNjIuMlLgeDwkHBwcKFSpgt62h\nnKO6T0lRXWauioCAgoiIiZEwDAUEBgUGDCyjkI2PkJOfMRMJBgcIChAm2qiempiZoa/CUT9O\nUjxukoSEh46Qj5hbGQ0LDg4PFyy5npugp65nJRUNDREVGR0vvqekqKipseFNRUJPRzrBjIOC\nhYuMjJXpHA0JCgoKDx49qZ2enqLCLRoSEhUTFiA6vainpqKnrLjI+ejEvLe+zMSvnZSTl5eU\nlqDEMCMeGhYWGR4oMD1gx8bUVzQpIR4dHyYxQuvFuLCxr6+usLSysrW3sK+qqKOenqKst8Hj\nOiomJiwwN0Jk2M7Jp44SAA4TnDqPrfGfkJmdr9KtqaWu30qvraq23/26vTguJC4+QjlLvK2u\ntsjI03w4MTU9S+/Rx7K0r6yurrO3u8PKvb67y9PN0d/oy+LOxsiwrK+urq24v8nWzc1gUlTh\nu8XNwr++zOZeUfNt7OPmvtPq4tHC0U1IPz5WT8y4ub68vL7Jek89N0JN3svDvLmyr662vMdC\nPD9W1PzLxb680c9dSWE/OkE7b95+z8jXwszt7UFGPT88366vtc5cx62v3WpE+EcsP0hN3ce+\ntq61v8P01WE0Njg+0E86RVLeUV/P4NxDS0pFcMvGx8i0r7G4vsN5VUtEQzw3QlPZaVHBw8jX\nP2tWOj46PFTOxr+6vb64vc94S0o6Nj5b5WnLur+83s7iOlA1MkE8y9/qzMmut8zhb15GODRA\nRVPT1cq5xcTI1s5lSEZEPD9JXnfWvbm63lze1FpLQkz8c1xLRl3O1+lu29HV3rarrq2zrq20\nsrS819plW9xmVGJI7vdJVT08RUM+ODxBT0pETk9ERz0yLCwnICYhHyEfLz06872opKKfnpub\nmpiamZmanqSps7vbSUVFOzo6NzIyMSwqJSUiHh8gIygpLjdManvLxL61sK6qraytrrK0sre2\nu7i8xrq3vs34Vk85MCwmJR4cHR8kJCQsMkdlyLqvrauppqamp6+trKyzxczMxs72z83cb0dO\nVE1WUW//Xd3S1WdIQj05ND05Nj5CSlBGXv1gW1jzaPNfSN/Kx8za1/tIUE9nWlt8YWfbzPJQ\nS1bS5mlv0728z+3N0HVVTl3zc/HUw7m+ytrO22ZgSkhBQj5JT/hpTlFPTFLp2GVJXc/Fvrq4\nuLy+v+XqZFlSTVnNxsTDyMzY+eBPP0pFPTs7QEpGRUdHSVNw3uXj7NrL3fZv387T1Nf4ffJe\nXGrt4Nvr2uHT1M+/zNvV6tjY7FxNVl1QQElo5WN93drZ2dd2TlNf7fdUV13nzNF9S0RFQUdN\nX93MxMTLycfI3f1kbOvR1ftr5vNoX+TYYXhaYVtcYmBUTlJOVFRr09zxb/pwZU5o3tj0Xd/T\nz9zc2/RaRUde3Nbm5s3FvsXNz3FTPzU0PFHh3dnUxsDF1mhaXWlrZk9q287f+G7mbl5JQkJD\nTU5bX/fQwb68wMPDw832Z/DxbFROXfjZa2dVU1BNS0dLTl1+7mXl1s3P3PJsWlFdT1ZqcuPY\n1t7z3tvd7Wzt2tbR0dTSy7++ydfu4NpuUUM9PURKSUha5NPV1ODwX1RLSUI+REZAPUxgbO3Y\nyszXzcvNzsK7trKvrKqqq621vt1QPTQwLC0wNDk6OTczMTExLiwuNT9FQ2HtzMTExL24uLy8\nsqWdmZaXmJqfq/0tHhoZGhwgLEu9s7bD2EwzJx8eHyIoLDNAX9nJxL/AubKwsLq8wMG1pZqU\nlJaZnJ+vTiIZFBUYGx8qVK6hoam20j4rHhoaHSUuNDlK1b/B1uvGvbu8vMHFzuhZxKOXj5SV\nmpqdrzkaFBEVGB0kNcOjnJyeqbs/JxoWFRgfKztg08jCy91cTklYcG7h38fDz/tcqpWLjJGW\nmpil7x0RDhAXGh4p26WampykuzsiGRQUFx4sP9++uLzTWEE+R0xYY9q+vLvGYkvKnI6KjpOa\nm6DFJxEODhcdJzfIoZiUmKCzWSgZEQ8SGSQuPVDTxuk9NTM3UM/KzGG+rq6/Q0y8koiFi5KX\nl5x7GQsLDRYcJDHEnpeZp8o+LR8XEhMbJz7txbqxsss8LSsxQmTKy8jNv77PUzIvtYyCg4yV\nmZulLQ0GBw8cKTb6o5SPlqw+KR8ZExATGy7YvLq5tL9JLiYnL0bLs72+y8O/zkMpNZuDgISP\nl5ifuxMGAgkXKEZ+q5aOkqM1HhkWEw8THDiypqmutsBFKB0cIzFruayqsbfCxcs3Kj2PgICG\nlZufrDELAgIMIk++spyPj5tlGhISFRUWH0WmnJ6qu94/JhkVGChTt6mlpK68xk0qGyKriYCA\niZOam+MYBQAHFT/Fqp6RjpO5HRAOEBIXHl+imJikv0MuHxcSFh9ZrqiloZyh0yUeIiQmu42A\ngIONqLAyEgYABhO3nJaUkY+XyhYLCQ4TIDurlpKVqEggGhUQEBcpwKSfn6Cjvi8cGh0mPKSH\ngICAi6ZPIwsEAAkcppSRkZOXryILBgcPHTK2mYuNmcErHBQUFBgkxKKdq7WwuEslHBwoS8zu\nt4+AgIGaPikuGAsEDC2bj5edoZ2wIwwHCxoy2q2blJeuLRwaGxweJTu7rK6/Ys3FdiceMPux\n4UFvj4CAh6VP9OgfDAYQOp6eq66hnLIgDw0XJiw0z52WnlwfGyAhHBkjaKyqwUpQvq/MMSdb\nq7FMJ+KJgICNwjy1PhcDAxW6lZ6rsZyb6xMJCxgtLDW9mJCb5iIlKiQdHCy7qbE/M0ja3jIj\nK9OjrdI7L5WAgIiybrK7IgcDD+uXnbGznZa7FgkKFicrJ1CajpXKHx4sJh0aLbKjrUQ9yq6/\nLyIvtaa4WjM9SpqDgImgsK3ZGQoGFkKepK+hmppoFQoLFiEiLciXj5WzKSMkIx0dLL+rrsHP\nycxoMiwtTrmtrcDuRqWLgIefuXysHQ4FDS6vnrqjmZStHQsLEh8kKb6bjZKmNCUnIBcUHT6x\nrq+1tMxhPTg6Oka+nJu0W8SViIKVtjy17RILBx5JpsDOn5mfKxAMEhwnKNubj4+fRSMjJxsW\nHlijn6a4w8dCKiMpND7Ap5yhtl/KnYuKorvFnc0aDg0oPMQuX6GaqCkXFx8iHyTDnpup/Dc0\nLyMbH0utpK6vqqW1Pi8+0tHe66+fqjsxtpiPma69pqsfDgsWHyorOKOTl683KikiHBkrtZ6g\nrrK8zS0dHStY2cq9qaGnv087PkZCMkOvrb1KsqCZlqK1u7RGGxUWHCQqPsefnKS640oxJiEn\nYLa/y8W9VjQoJCw9V0vSsKips8jSyHEzPty/vc7QrZ6coaqpqsM0HxobHB0hPM6rpZ+jrtQ3\nLCstLCw83MfO+/FTTE49Ojw7V8G3uLi2s6681Dg4O0m/rp+cnJ6hsestJBgVEx0sQcyvnpye\nrL9LMiwiIio6RFBpysfmTU1SQzY81d/atK7FxLPNLi49YdzKr6ScmZumpKzONx8jHx0ubci3\npKKpr70uLCEdHBskLD08X7W01c4/MVM4NS/FsLW5qqWqr6+ysaytyLenrcG4utQ+JiIgGyMo\nLe5wvaSpuK2yfkE8KCtBNyUzRf3vv7zEqMDkPF49Sd/9b7+xuq+1tcC+Y+W/287QxNJ8QC4r\nKiwrNUNP7r7Eur/H6F5NQElMREBPec7Mz8e+v8TYWVJgZFxi17+0sbW5vsXdVUpFPj1AQUlb\nU0I9PURPX2fqzsjLzt9veuXT0eNqXVpaWHD3aXDYzMrXbF3271dPbca7ur/L0c/cWUtLS0xM\nRkhUW01ITlBTXHvs6ODe3u3t4Ojh08bFzNTT1tzb6mv+zMXVXk1ZW0Y/RVDmz85dRk1VSjs6\nQ0hNXtzKxby7yt/VwcLO38/M72Xi5WBTWv7f3OFtUEVJVVROTlllaHRdW2xYX+jPzcrBvcDJ\n3VhJQj8+QlPgz9HX0sbL415NUHjX125iY2vtfO3SytRpT0tVe930YGz77fVeWlNZcGNb7s2/\nv8rd63hNREJDTGLc3e3c09jsW11k5dfZ2NbJx8nP187N61VIQUBBQkhSXu7Y0dJ8WEpKT1zp\nzsXDvr6/ws9fSEFCSUxu3NLHytn7aXhgTkhCT319cXBv7NvuW01XfeluV13tz8bCxMzV2u5j\nV2Dx3Nje5efn3WREOjpBUWfq6/bv4NXUzs3Jy8vI1OHv6uR4UUxJSU5GQj4+R1Jlc9jNzM3a\n2tXO0d/o08jAwsrLzOVWS0ZISkxRXlpZX/Dpfm50avzd5GFQXW/h43dvcl93a1543t3b2+nv\n6Ofk2H5iXn3f18vM2OTs+WRbT0xPS05cWVldavZ75djU1XJWX3Xq83rayc/fcWteX1xNVWfh\n1NPWz8vO4V5YUExWXWzf287PzeBXV1xy+mhVTmbi3tro4tDP2mtURUVFSUhQ/dnQ1t3q393a\n4/ni09Td3dff8njxbWvhzcxtVfbR3m72cVRPYW5RTlReWGRaTlBbXV9JU2zW3NDGwsTEyM3J\n2mFp5dZq59LS3XNQQT48Pz9JXurQytbZzNHra1hcXNzL49/n4+d2X/HZydBILiw/yLjIZU1p\nvLO62VNYeuJnT0tQZuNmaOPl8fDh5dvY1+DcYlBNTkxRXlZi6NfP099uXU9IRk1bX1p5187Q\n1c3DxsfM2OTd1fpYVFvW0fpSSk5Zam5QSE5k7X3vUkpXdfDh9Hrk083N2NnS0Nnd2u1taHfb\n5mVkU0lJSkZWXGvhelxZbvpo7O3Ux8bK3vj00sjGz3Fc2MvmPDA0T8fMUUjuvbrL6O79cU9G\nOTI+ZPLW4tjEvrnNdmz47EhNUeHNzMzc1drX5m1NTlHvXmNQSePE8kFFX8zWUfLM2tDLZtDK\nTFZKVXbf/GFg43hYbuRvX1ZUbUlp5D/oy77B3Fq5ws/QTsfBajxPxuBWQltWSUZNfj9MzMDF\n1tfDT/1qP0xVYdPUT+7c2b/QSWHnzMw1Scfc1Ejiv77Y68ffylReVj91Q0BiRFNWW05I08fY\nycbGvz/Tv+FNOjXFvEniXd7Ga0pU7V+9Ujjccse/3EjcxcNXPmy6uF44TdVKPTzdzs1WTvPP\nyl9S0llkXUdv9Gl5y9jf5MW7wENHevjXTEJEzbtbUNrBzkZBSnFMT9LWXGjBdV7oSO3dS9dZ\n1m7BuuvK7FDI0UtbyvVXXUNYXFFKSWtSOVF731vUwLjQcMnM2W9bXF5eZ27mxMxlT3r7WjzR\ny+hXOcRySFh9wdlmw8Pa1lj2U/VgO0M91chhx7zn7N1P1thI5c5P2fjN0k1oWt49QG1V7crU\nPnftztD361lbSdzqeOfJ3MvLy095WVdhYuDX7FfVuOPgbfNpSUtEVFbPTmHKz1xjwWrYS0z9\nUUJk2VlkdM/LyGb2wfZhPGfbUefWz2Tdc83OTT/P+VNXd8rhzsBrzVlqVkU0Xs9XZepX4srP\nzt7MV+pY12pS+cPRR014t+I3LGC3sttLyO3HSEfiTPhWdsTS52NoYFxGPlHVW85n5E41aNZA\n1cT0wVtIecHG2tXD0LzY11vP4FN208vG3TQ69U5ia2vKy9xM1s/W6zUuOT0+Qdrg48vow8df\n4L/AXFTZyO3S+1rv0dZSyL65y09LznU5SjlLUFZi51f9y1JE5cZ082dpx+rlVu7CvvxBSH6/\n7kQ9385c0lrT2nS3dNnFU17dRkdSU0g9Q9m8xsXVc8rKXdxUUt7Ty+89QVdeREXryL/2YFnk\nydxMQEPf0VlLX7/EzuNZvn1k9Vjhx9LY79pjU97t8kZH/0pCY2BrSt/MQ1ZNw8tOWGC8zNrh\n47/DwN3UVu7T+j85TUxuSlJNVNJ86ujc3tJY+sPR31Fs8djSU37f38jZUlfnRExwTmVqbFZN\nU2XDz25k077NznzV2ODI4Fhh0ONVW1bz+l5JTN1XUkpCSkddTV5qath/2cHCzM3Bzd3i3sfO\nyN9Z4uxqTE5PTVI/Tl7tUEttb2lYWt/HzcrJzdvs1vbe6GrhS2bw3XNdW2BSTV1YY2tvTVzc\n2c7z3NDbe3b939t4cnbm3fVLU+TfUk9b0831/snF+WHMyc5eXutXR1JUVERIaNJrUuTZ12px\ny9R/9NbeXVHmzNBfTn3RY0pldWdXT3zU7+3WzvNRW+nS3uXo/WJs02PtcGxv4lxaXlzR0Nrq\n1MfcV+3r8ltE529RSlpPRz5L9fb28M/N0dO/yMnF0tPbXlxhaVZaWF5jVVBeX3tmZ+3v82p3\n4/Hq4dry6uZzWVFm+9rmZHLTz8zp929v5NRXR0ZWYlpeVNTR3FZh1d/4dE9qZFfh1uTl0dPd\nztLu3uxl91pgUVdiWV9ZT1tu9lxf3s7U1vrTzOXsVFdPX1p+YWPp0c3a7PHQ9fxjXvX9YH/w\n2PxvcGRYU2L1bdteTVtPeOzq0N7Sy7AlBoqAHQgcmLCnKyxIvdHdtjw7Urndv0EswK/MOkDZ\nzclJMz/Y1E49WMbHyt7Wu7zdVnZ7UkdJVGHq3F9Z49ve4m3l0crtX19Z8vjlW23dbenp5XNd\nVVJYTVxUXuLr7+7p4dLd9HrO1W93/tfTzdXpYVZra1lXWlFTbmhYVFN90dxtXe3YycnP4d/U\n1+teTVJhTEhFSFbh0Nbs2NTQz9XW6u9cVFZVWlxye3Dw29vd815actXZ1t/oef1nX1BbZWJn\nU1hv3dXc5vLt1eB6ZG3w79zeZlf73NzZ2ezh13hQQz5BQ0pPW3bYysnBw8LEy9LqcV9lXVNU\nVVZSVVhYTVhxbnxq39bb0s3LyMvS09jX7V5RWXprXFhcY2j892RTUUxMSkhc/3h33M7IztDM\n2+Th19nS0dfacWJw/vx1Zl9adndLR0lSUFBNU+vVycrR2dza5fv9ZV5+5d/OzsnIy9hdTVFR\nQkhKT09YWmf47PtedHNn39rkzcC/v7/G1OdZSUhYbXX17+NqV09EP0A+SVVi6MnCw8rpW2J7\nXE5S4MvBvsfXz8fYWENGSWJXWm3Y3uHa82RNR0pVXGne1c3OyM/c9t56T09RWGb47mv+5VgZ\nLoyfGx+4qLbXPFtF6nzMPUZbY93M6UBiv9JncN9bbf1JT9/UX1le3t99WFrax8/v/+Lf9llK\nUu/k49969+be1udz4uZ0WldReuHe6Ozf3uVuXl5ZXWNgX1lwdWB+7fvj3tvtbV1ZYWl18/To\n1svO1NXe6vtdWV/selxhYmRhXWxeXWh2/mls+N/X1Nzm9eDc2OHg9Gn44+ZuXGN4bVpSTFFa\nVlJbaOnTz9Xb2d9t79/b0NLW1OfrdmhdVlpSVFpkemlZWWB66+n44Nfb2Nnf3N3vamBeV19n\nX/TYz83W8XNeWFVaU01VaXVlZWtt4NDO2NvZ1NXtYmDp6WteUk9dYVlSXfHPzdnv+Pd57mho\nbW75dFxTa97U0dPY4t3f/lhOTlRQV2jj1ubs6/Dt6dra5mx+aWH77Nvg/nlrX1pYXWVuc/D7\n735vdW12fund3ed8a2x6eGvg1tPU7nvr2tTX4HtmYG9cT1z86Nz4ZFhPUE5NTVJj69bS2t7V\n09n0dt/e63r3bW317NrV7O/lemZmcHnh1OFoW15hfnVaU2l87WRYaO3a3vVnY+/sZ1pfYW/z\n8Wr75O1ncm9x8ujyY17r39fR3ezj1dXn+uLd3dzjb1thX15cVE5QXlxZYOfX1NzwZnHk5vz5\na3niJx+dkT0efLfGTlpENzpfzVZLz97OycVwaMLF8tXP1d/UWEti6FBHSU5LTkxKV9nQ5eTQ\nztnb4eXf0NXm8e9rXW3l4Oz37V9NvEoySb+8OTVSst1U2ctfXby/4DU/2MNBNUbTw3xRZcrH\nzNDbee3YytxRT/nM21dKaOJ0S075t7lcNipQwLlSNk7FsnI8PtS73zs8W9DI5WniyMbWSjxl\ny85eLTCkm3ou0rztU+vOXD82Oz9H50pR1bi+Szs/zbbBSTzSsLS+V0ZO5u1JQD7VwNo9Pm6+\nvlhLVMm+20M7SX3S2fLH09jFxslNSkreaEdPdsDA01xv5NFdPUBPev1icuPh3G5eWFt9XF1Y\n3tHKxcrL3t/oX11e4cHIz0VERkdLP1ZJT1FMcsu9y0RB1q2uaUN9rqvHQThwvrxhOT3mvts4\nM0vAv2IzMkX75TszPF96W+3GwFs9Rsa1w1ZE3rGzTDqsnqy5uc7+zMjcTUlZ0cxMNy0xNzIr\nKS42OTU1O2bE2U5awK+vv3Livqytt8POsKyqu9K1pZ6tRSstQlk1KCtOtb1JLiw8QS8gHig/\nTTkvMEFOSURQybi7xuTTuaaZkI2LlKc8JiwgJh0u2q2mwEMtJh8gHSY4vKqzxVVCOysoKTXP\nvr5kPUZHTj8yPvLDwN/EvqaakIuPndEqMSsnICBOu6Wu+DouKiYfIi5WrqyqtNpXMikkJDVY\n2GIzLC89V0E3PmfAuclSR7idjoaKlckqWDQzGxs5rpqjyy8qJygbHCRapqizTzUyJx4cHTHl\nucBBOTtSWT9LuaurucHJ2dKtm4+JjZnkKTIpKhwdLsKjrWIuKiYmHR4oSq6tq6/K1zgtHSHA\nuDorMzM7RVs3LT3js7PF6jdBqZWEgYqdIzZINykQHTqgm7AwJyUwJRcYHMOho69qT1kuJBwf\nQMu7XTEwO/zmOz1cuqqrrrdcP8OejIaJl8c5VTorGBYl8KWyUispKScbFhkrsqemtLy1vcwv\nJio6zGczKy9P10cvK0Kzq6u6TTNDrYyDiZQwRM/mzhUbHrydpN4rJDA+HxkRIHGoobbHv71t\nLR0kNsDBOy4sTcTZPC5DuKmsv+NuV0LSopKIiZKsMzsvLh0XHzetpK5eMygmHRgVGCy+m5OY\npmk3OS4pHyQ/079WNTpDS0MyMj7Eqqy3WD3voYqCip0sL+PLPxYUHcednrgzKjU9IBUOFi6z\nnZmZn68+JhoYHCpYe2JGYszHUDQrMO61qaq6+Uyzm4+JjZi3Rco/MBoWHjerpa71PS8uIBcS\nFCJIqJuXm6jbNywhIB4nMkbVzr69zkQ5NTZNybW/ytncrJeIho6qKzhJaSoXFx3NoZ6uRy8w\nMSAXEBUj0aGbmJ2mvTwnGhcaJkDv1MO0rbDfNCcrQtK5v+zHq5aLiI6gTzni1kUeGRssuq2s\ny089Oy4hGRUZID+0pKGoqbDJOCEaGiE1UmTUuayrsc5CRdW7uMlIaq+ajouPnLW5uFcvGBMS\nGjXduL/MVlFALiMcGh0uxK2mqaurrr89KiQmKy0zQcCurq2vt7rL60s2MjnEoZSRl52mpKu7\nOR8bFhwoNFZb4lnMzN9UMygfJy09VeTPx7ayvtE8Nzc0P0NW4Lqwrq60r7rEcj85PeOvpKCl\nrK+lqLNHLScmKyo4SkA9UcC8w0EtJSMnLjk2PUXZu7GytrampQ0blSeyU1W4raiopVzVRVyv\n3M+xqb2pr8WnzVdKJC1LwCt0KS81Nz4oIx4fIywyMjA/4LStr6uvtaypqK+3r620srbe4XpB\nMy01OFq/zN1V0rKoq7fecU9zw7zPRD49QDo3NCwrKTA7Pzk5P0xszsbL3/jVvL67xM3BwMLv\nZE9GOzw9Q9rEr66zwcWzq6msr7a9uLnE10c4Mzc6NjsxLCouMTc/QT9HX/BtXE9O6crBv7u6\nuMHI30dHPj06OUZoy721uszVvauopquyt7qyucVdRzs3Pz43NzEtLC8xMjo3NzU+TExCVk/v\nvbe2urrPzNfaZEVLWVVl/2hgdcK/xMK4qKiprK6vurnH3mlAPzc3NDIxLy8yMzFAQjkvMzo9\nUHllYmbJt6+3urm9vtFdQEVHUkE7P0jhvbS+uraooqesrbO/usHJ3mtLPDM0MzArKSsrMDM8\nNDE4QExS9eXMyb23vczNys7V329mXeVROz9kXN61s7e3raWlqa28y8fP1uJlSz88Nzw9OS8u\nLiw5ODs4MjxP9tzR1NzIvbzN3ehZU1RYSERJTk08PU7SvLCyt7atpaKmrLe0u7vDzl9JPTY3\nPz45My8tKy4sLCoxNzpZTlVZ18K3s7/O2dDIvLvLx8HG3E9HTVhW28TNyMy9sK+utLW7wsbF\nzvVkTkdGSUY9Mi0yMDE1My4tMzdDYfrm9NzNyL+3ubq5vMPIy9vlWEpFRUtcz8vLy8a0qqmr\nsrfI3Njc0G1LRT9KREQ/NTEuLzQ4OzgyMjo/TUxXcNHBuLW5vLm4uLrAy+/p4V9DODY7VsXG\n2e/KsKyprrjDzcrF0OxNSURISk1HOzk0NDY3NDAuMjlCVG/e2sq7tLO3usK+wL7LY0xEPzs5\nMjE1QOq/v7u3r6qloqWqs7vIzOJfPzk6Ojs6Ni4sKisvMjIxMjhR8sG8u8HBtLKxt7/GyMLQ\n6UNCQT87NTcsLTZRx7y8uK6jnp+jqbG7vsLM3HhDOTg5NjAtKicnKi0xNT0+Q1rJv7u9vraw\ntLu5x8rF2eI9Pzs0OT04My4zTr+vta6xp5+hoqqxusDKzsxXSD8wMDg5NCwpJystLzEyMz5M\n0cDHwb24tK6uu8S6vsppV0Q6NTs7NTMvN0jFsbK3xq+ln56jprOzvszNZEA2LjItLSwpKioq\nLjM0OTdEWNjSvL3KvLm2t7rOzNTY3vJcRERJQT89OkFZta+1uLOqpqGmqa6650pIST41Ni8t\nMTcyMC4vLy81PjpIfNjKxL69xsm/v8HU5vDodkxGVldSUEZDPUhvxLevrKqppqGjpK7EWkQ7\nOkI5Mi4uListLSsuMDc5P1xf9M/CvMrCvLa9wMfDwuDsXXdKPzo+PTtES0E7T9GtpKm1t6qf\nnaSxyfRSU0Q/ODEvLCsrLS8uLCkuP0dEY8fDurKzucPIxby8z/Fq0uVtUUU+Pjk4R1lURV7Z\nzcGuqKqvr6unpqu631ZKPTMuLCwsLS8vMTI5QEVMRVBlZtvP0crFv8G9u7vAxsrmZmbqY0w9\nQUxPTFNc+NPJuruyrK2vs7O6v8dmTTo2MS4vMjo5PD0+Pj9OYmrW2N3c1NLa2OHo49vb+WB5\n49x9Zk1Pd93e3tTOz8rBwcTBu7u+v8TP7HRfS0lIPz49Qj49SE1SX23o19nV6t/Uz+VmWGFl\nT09NSEJAQ09dU0tNYezY0c7Fw76+uri2tbm5u7y7w9JjUEtFPzgzMjAyMTQ8SXR68NfHwsXB\nv8PFxMjN1tTY5mVPRkBDPz9ARktHSVF52czIwb68ubazs7vG2eDmXUk+Ojc5PT9BRElLVnLz\n697WysbIyszJyc3T2N3s6WxUT1FRSEVESEVKV2X75dfKvLq8wcjGzcnO7VRHREhMUVFHRj9D\nS1ZbX2JefdjP0c/Sz8rFytLP0dPZ3Nze8lNMSUpKSEpUXmbt3tfPysvNys3d9efm6PdbXE5K\nR0RFRUtLVmFs5dfc1tzsz9La4ebi3dvQ1vFt6OTc31xb3s/U+lFQbmJw7N/T0dXQ0NjWZ1pP\nRElDQkZKTl9seNrZ2uTu/XFdXWns3NXOz9ba1c/R2t94bHp8+FxNTVZXc/rjztp2bFtZ/ubf\n3NTLwr7Ezt7gYU1CPTs5Oz5DQkVP9NHN29bMxcnPzNzYzdbX1N/R0N/c33FmaFxUR0BOXlxc\nXV5w7dzi0MnOy87Ox87e3+1nUUlCQkNCSEhUXmpm+9zLy9vZ2NDIzMvV7uP1b2BNR0pFR0lN\nV3h+7+rZx8jMx8nDvr3Bzs/c8WpcR0BFQ0BAREhRUFlkX2JebPvq2NPPyc3W3OHg5+704318\n5drb3XNaZFpRTVV0dOvl/Ojd2N3u6Nne6GdkXXrdeGZkenHmc21xZnzlfmdmaGFoc2BZW1lO\nSkhhZHB6+vXo0tDSzc7Wzc7MzNPT1+1t8fTobFpSS0dJTVpnUlFXXeXp7OXu8dzX2c3Mys7e\nfF/y4u5rXlVWbl1NSUpcX1JPT1n61df2/tzRytLv39/f197d1dzRztDa08/X4G1STkhFREZE\nRkxi6efd29vc4t/X09DQ9ftoWFpKRUVNVWbq2dLW2dTMzNTXzcrP1O3+e3N0X0tBRktLS09p\n3eFtXW3d18/N097g1Nbf7unv9XVqbF5oXV9VU2dfT0xPWHri3Obh4tjPz9zazcfGzNbleGpp\nW01MTEpMTU9OT1dlZvnf2Nfd2eDm293g3t3z7t7V2N71+nV99mRZXl9o/WVy+v/vbVldbe/+\nXlpfcXJbWGXw49/6Xmvm2tfa2NbLxMzfdGTt9G5aVVlVTlNeaW9rbXx2dX7t7Xr+4NfW09vs\nevHm/l9PSU1RUlVcZn70dezW0MrLy8/7fn1oXkxOXerj9G7/6t3X73B859ri9OvZz87Y+GBZ\nXFhSTk5fdXdjavXq53RbUlVk82hccP7h3Ofqfmx0avvZ1NjX0NDTz8zN1N7t+2dYXFhNS01O\nS0lHS1Z5+fLU3d/QysPby8nA1epbVVVYYE1GRktMTk5ZWvbe3tvZ18/Ky8vJys/n+Hn//+Tw\nXFNXWlFOTE1RWGJvfPPc3ePn3+Ph2uLo3dPW3OX3YVZRT05NS0pNWWRx9+HZzcjFw8LFys7b\n+GVrb15NRkhKSUdHSU9k6+/r387ExMnO0dvl9ldQTlNVWmNbbfL09u3r2NTe43vm0dbtaGtq\n//1kVlFYV1VaWVVTXura3NnMy9Xf6uvf0szP2utxaGRgV1RXX2NfXl9h9d/7XVp/9HvycGd5\n9fllVE9cenxtbfnc2dvb08vNz9zxe/Pi6ez29ez5aVxRVGVyZGluZWBn9e3b0dzzbFtXWmT6\ncG/u6X1hX3z06OPl72VTV15249XV09Hc5H397+fe3d7t/vDn9nFsbWRaVlZs89zZ2NXe3epc\nT0dIVl9cWVp19HZx/NzS1dr3ZWh2ef9sZfHby8bHy8vK0flWS0dDQD9BSVh839rPzdHQ2eTm\n5Ona1d3l6t3k9GReYV1XTkpJTlBbXFts7tnb2s3Jyc7e7nBken5ocmRaYXl/YVxeYGZvaOrO\nys7V1tvX2+L/UFJdWVhXW1JLTFJh5dvY1NDV393Xz9rw9vXnemJZUVt37u/w7O3o7XxsV09U\nWmJfYnHt39PMyszO3WVRUmJmXE5LVWri2OL879nT2drY3NnW29va2uVxX1lUV1hPR0RKT1Nd\nZV9x9+rj5tzVzszN1dvW2d/qe2JUVVpaXFlndnV97tvT1eHu6fxpZGdlXl5heOnl5d/b3+tr\nYXnv8P5fWWdtYVlYa+3r5+d1ZW19amp0f3n4e2Js69jZ2tnXz8nI0e1qXllZVE1LUltWVG/Y\n1Nfc293n5PtmVE9VX3r6fnfl2djT1eV2aV5VUE9SXGx75dDLzM7Q09XW1t1sVE1UXl9WSkpP\nY2xZXmtvfOPU1dHO0NPp/evc2+xmW1pbX1tcZHjtemJcZfLo7PHd19PR3XliaHBmWFdXXmh6\n7f7x9fDd0dn06+TrZGnv9u/1Z2JfX2ViZl5naG/1Y1dWXPjl2dLX1tLV5fjv7/leTk5UX2Re\nXnLn5uXy7NzTzc7Lzdja2+9XTlJYWk9OWGx6bF9aXFpZXV18183Lzc7T08nIztPm82xhaWFU\nSk1PTExMT1BXXGzz39XW2Nzo28/MzM/Z3N7qZFFPUFhfW19q/eXl6/3r3d/fbVleaXpjX2r2\n393q793U1NLZ5fFtXlRKSE1TVk5NU2Lz59zZz87OzdDX3dvl6fDq9/bqemhgXWpnX2FVU1ZZ\nYVpm5tPQ2+LuZV984+Pp6vD0amZmZP7h7Wlla21aUlhfe9TO1tnVz8vMz9TZ5PV3YVhST1NX\nUlRTTU1WXmjz393ybXno4+HW2dzW193p8OHe3/leW1xWaOfY0M/O1+ZvaV5bWE9KQ0RTb/Bu\nZPXe2t7h4OTl3eXu/X3+cGhgZ3br6f5yZGP98uPY2NPV32xh7tfX5XZkX2Zr9nFy3tvnd15V\nTk1KSlBe/OLf5urv7Xx64vPt2c/O19TY1eB2X1dXVV1eUEdKWXry6Ojr39fVzsbDw8nW/HNw\nWkxMUldjbWpbVVVaYGBs+Ovh811Zat/a2Nzu8+Le2cvIzNPiXmFzcFxUXVpaWWB7XlZcZHfq\n725cbfDv7ebc19fT0Nfb2+TsaV9eXmdcV1RNV11mcWp58eTr+W5x3dHU19jWztTd/WdhXF9S\nTE1Ze3JjZP3q3/hpZl5ufPrk4eTs83lmb/zp2t9dVWl4/2Jrbl9fb+19cvbq7HZz6NPN2uzs\n4+xvf3VmZn9tbPzm3ut0WlNUdt9rT0xKUmDw3d3Y3/B94+LYzc7Z+nn56PxnXVxgcu3p/m15\n++v1dXn19G5dV2jp3Nno5OV4XF9iY2JkaF9bXmNt7uTb2dzQ0NXY4et9XlNPT1Zi8fN+4tfT\n2up0cWhqZ1pjdfrl6PVzbPLqfnBiYl5cXFhn9+fQzuR05N3rb2166utpVU9UYW98/efUz9Tj\nd2Ro4Nba4uzp6nVbWmlgWl1VUVJdaGP96drZ2dzg5+7k6uHtaVtfaHXf2dbX2N7tdmJt+P1v\naWVcXlhPVF396+rZ2trS2exmWFJQU1lffN7b4t/YzcnL1e1cb/5iV1hob3FvaWjk09ni5+7/\na2NhWlZZWF5ze2ht/ev2d2ldW2bn3+Pc1MKvxkJJTM/8RFd+++3vb+/a5/LqeFpdYWlxwrFr\nRjpI6EpLWPh+XfzNxMt2X2B89lRXv6qu0EA8TUE6PkdlV+bR2r7CybOrxkMvKS0nJz1m4b6v\nqqertr7OWzw2OD9NaefQx8LE2VtPS0VOe1hhePpmRzw9Q0VHUOPJ3/7Nwr/HxLu2uL/Fv8HO\nXEZGTEhDTu/Y1eppcmlLPjk3MCwqKzM0Mz1NZGVgctq/tayimo+Mj5mmuUgiFxIXIS5NtJ+Y\nnrBLKh4UDw8SGR4lOMmxu3ZCNi8sNKeNgICDiI6SuBMHBAsVHDmhjYeLmbMvGg0HCA4cLUa7\nr7dFIBcWGRsaI1yon5CAgICKnKOsIAcBCyuvqaaUio2xGxEVGBMSH76jrFoxKB0TDQ8YIjfu\ns6anru5NlYCAhJmclJsZBQYc09U0s4+JmScWHB4WDhdwo6nbRD8nFg0OFx0kO66enai8WylL\ni4CAjpqYkTkGAQ1ByznPlImRLRMaHxsQGL+an8lDPCESDQ8eJiQ9rJ+rXzktIy2RgICJl52S\nWgMADciq2LCOiJAhDRYcFQwUqJGaw2HOIw0JDh4jH0OimaXJVjseF66AgIWepI2cBgAMq6Ex\nNZaJkh0KGS0fDRSejJllRq8tDAgSLywfO6ifvC8mHBgXpYCAgJqVkp8EAA+upDHMjoaXIQ4j\nLxgMGJ2Oo0/NrSQJCRYkGhY6qatHLjsqGhyTgICJn4+OpwAHJJq+ILKMjNcSEkEfDgwyk5jL\nyKeuFAgQIB4SHq2lyS45OxoSP4SAgKCQjI0LABm3nhnTjoekHxZbKw8NH5qe6s2orhMIDxsY\nDhq7pu4tV7I9HquIgIOfjZKSEwslRMobt5ORyTc1tisVGDetNCI/tDkQDyIiEQ0c4UkgLL9+\ntomAgJeTi5YpAzgy1xbGjYyrROHaHgwWH9woM9rFOx8eJBcQEiQrHyQ40V6lioSAjJONqL0L\nOyRILdGPmKu9rEUdECIZJR0+xjcuISAdGhsWHCItOC4/dpeIgoCTi5CmIA/LHTgdnJSbpqCr\nMhwjJBYWHDQhHyszJhcYFhQZHx8dOqWKhYCAiYadqBInHRwqSpGgnJ+cZiMbIBARFCwuKUFW\nMBoXGRQTFxocJ6aKiYCAhIedphkpFB0lSZ2klpqbzDwxHRIUGiEdJjtAKB0eGRQTFBESJp+R\nioCAgYqPriUoGSQaraOcm5eeXz0mFhARGBgfL0hBKB8cFhYWFRMhsJyPgYWChYqmR84jHRet\nra6ikpi5xksbEA4QDRIeLDMuNycdGhsYEBrtpZGGhIGDh5uqxzQcGjw+vZ+Um6WkvScYEA0L\nDhMZHiYqKiolIR8iJz6ulI2MhoWLmZmndio5NitNqaKmnpusPigbDwsMDg8VHB4gJyglJyo0\n0qGQjouJiI6WmKhOLT8uLGmop6yin7U+LSAVERMSERYaGhsfIR4hKTRTqJiRjYuKj5GYoL/m\n5kI40KWnqaCer0MpGg8NDQ0OFBkcHykrJygzXr+il5GOjI2RlJqkvLzHUDlmsa6uqqWu4C8d\nEw8NCwwQFhsgLD1EOjRTuqWdlY6LjpOVm6e9v8pXRtS0raqkpa/UOx8WEQ4NDA4SFxwgKDZB\nPE+5pJ2YkIyNk5SUmaWvvF86NkjswLOurr1YLR8ZEg4OEBQXHCcxO0JDPzhMuKGcmZCMjpSV\nlp20y8K+ydK+trnORzMnHRYTEhISExccIyw64sXTeE85PrSfnJiOioqOkpWcuDQsLjg7Q8Wu\nuzsnHxoTDg4SFxgbJUDV0c7Mz3pa+nzNr6GblI+Mi42RmaKzWC8pKSspJyoxNiogHBoXFBMV\nHCQtP929tLKzt7q5tK2inJqZl5eanqWuu9lKPTg0NTg2NDEuKygmIyAhJCcoKi0xPEdm0sO5\nsaqoqqeloZ+fpaqrrbreSD89R1VdWlRKPzgrIiAlLS4rKS0+TkBI1sLAvbyxqaajpaq8fMeq\npbk/Pcy2vEoxMDRK9U88MC83NDQuIiEtSV46N9q6tb7Graagn6qspqmpu/LKbltES309RD46\nNSsrKy8zMi8pND45OTxKxb+3urWrr7KxsbWztrO6xr+utPdY389XPjc8Pz06KywtKS8yLDE3\nTcrfvb7Wy7evt7m4rqyvwbWvyMpqWMfnV1hHTVM5N0JJMS00Ozk+ND1kQUxd2rrBycO7usK3\nvriytru8wtXQ/2XlXO/fR0r3PjYvKzk7OjE0WPxsRFK6uvRUw62rtsC/v73L587L+1zf2UpB\nSsPWOU1kXUU1Pj07MzlQRlfl+s/s2srMvr+5sK+uuba2vt1MdmxLNzY/T11f9Ec5NjI3MTQ2\nRlJhY827wMvDw7q3uLzIxcC/vbu+vNbaakk/QEZHTFHuTU5JPzc2Mzc4Pz9K4r/O2sbMw8fK\nwcjBvbS8y8G8u8DSceze22RLXV9ENz4/OTE4Nj44Nj1P2e7ewL3Mycq9wW/Nxb67vcC8ubrQ\n18veXEtj3HtFTkA7MDc2NDIvPmVOXMnTx8zb29XHub3ezL++uLe5u7vI0E9OTk9ESDg6TvRq\nSUNJSU0vNklcUj5Pyr6+xb7O5+Xc1s+9tbi81NPXZOZbaNDjX1FMU09EQDxKTkU/Q1v6VWZp\n1Mp95crFxNtMbHnjxMnGuMbczs36Xk1MV2lRUllP7mhMUWFMTkpHW1BfU2XTcde9vd5ZXrq/\n/VBhydZea2Pf1N5STuL4ycTR09Rs5UY6P0pAREpJUlRp3MTEe0z0zMfL1NW/vcHS3tjcVEVF\nTExNSkRaZODudOLiaVNP/elZWV5d69dfV9/f2+/5zMLJycO+vMzd3nxPPjg8S2nV09Rva25l\nSDo8Pz8+RFz72HLPxMjj6Me2t8DOx8PBwMa+xM71UEhSXkxDT0tQRTowLC0tLjA1Okb91su6\nuLe4sK6ppqKgpa23ubu8v7/BxOtBLiUgHhsaGRkcIyopJysvLykoN+ujjIGAgIiYq78mGQ4W\nKbafnJyhtDwbEA0NDxASFh0rNzkqHyAgHxweu4CAgICSl5S3EQAADqmRjoyKjJRFBwEGDA8N\nDxs4SCUZHiUfFQ4VID6fgICAgIuYnioKAAEWm4+MiIeOlTQCAQcLDQ4aMGgyGxMXGxoTEBci\nPFiUgICAgJuZniwFAAdOjI6Oi4iRmxQABg0ODA8nv8IfDw4ZHRUOECLPv/TEiICAgIqtjKAa\nAAEam5KckYmNmCwBBw0MCQwdRz0cEhUbHRkaGiRAvkhR25SAgICAl46iGAAAEDyloI2IjJVD\nCAoIBQYOIzwvICMmHxoUGR0fKTvU86+tkYCAgICakrkQAAIWXJyajImOmiEHCQMGDBsuOjE1\nRR4QEBgdGRUdw6m7raSfgICAgKmTlikFABrumKeol4uUVQwJCgwPDRMfMi8mGRcfHhMSHTW/\nq6uil52tgICAgqePkcgHABAYOSFCmIiPzyEaDQoHCxUeGybGzi4fGR0rJR41q6Soq6uuhICA\ngJiYkjQGAA0SLjPHkIiPrj4iCwkHCxYaHD+nwysoJSsjFho9t7ann6aqo4CAgIWslpcfAQAO\nFC4xwJCKjqQ4Gg4NCAoUHkC5rK+5cyAXFRspLTq4m5eepq6NgICLzrWUPgkADSbeZimni43K\nFxofIBEOJWbYysPG5S0ZGh8dKD/KraKdqbwmJJSAgJDHnYnMBgAPJzwkJZuFip1EQj4iDwsa\nMTU0R6+vSSUgIh0aHS/o4sW+xs0z2oWAhJzEj5skBQkiOj8zro2Jkrg71ykSDA8dJjZssall\nKBsaGhQUHDbvw62wvz4quIOAiJmWhZFHDhMlJB8bPZiOla3FvEkfExQeJCIhJSolHRkZHR0e\nKU7FwLu2rq23xZSBgoqQiomUuxoWEhAODx3boJueoqe1RR4SDg8SEhUcNMzCxsfSzvM5L0u5\nxb+32dWijYiIjoyIjZsvFhERDwsMFzG5s7SunpmmzkYwIhQNDREYHy1Ot6Siqa2uuFI5MS8z\nL6SMioiMh4aNniQXEA4LBwoSKrSupJyVj5q2PCwkGBAOFB4mKjR8q6asrrjEXjwvIiAj24+K\niYuOh4uU+SAXERALCRAeWq2pn5eQkqHANygcDw0OGSIlLkezpqy3vMjVRTYvKi0uXZeNi46R\niouPtyceHBsSDREdNFt2uKWYmKGwweEtGg8OERYYHS7frq62ta6ptWo+PVBFWKKWkZCVj4+O\nmr42Ih8ZEA8UHjVAXLadmJ2x0081JBYQExgaGSA13by4raSen6u2ytxMOMCclpWblo+Ql7RF\nKSQfGBMUGB8kKTfBoqCjqq6w1SwdGxwcHB8oQGdp4sG0ra6trq219VmynZ+prZuVl56+eTw+\nJRgVGic1PDZIx6quxmFexFZEMy4vLCkfHiIsOUz+v6uqqKurq62pr66utsb5xLi7v9rCu8fV\n/HR9c1JEPzw1Mi8tMDk9PUVKQzo3NDIzNT1N18vVyr2ys7u8uLGyuMbLw726ur6/u7u7vL/C\nvcnm9lxANi8rKisuMjg4ODo8ODIwNTs+RE5d1723sKqlpKWprrC71Pr02M3Bxdbc1szlSjk3\nPDwzLC40Ojs5O0h/5l5cXufV701ESVrPxcG4ramqrK61v9tMPz0+Pj9EQ0I/QE776Hn83M3I\n1mpUYm9VV+XX4lVIPzo7PlPNw8fEvbu6u7+8vddNSlJRQzs8Q0pBRld/7v3Sv7i2usPM1etX\nTlBPS0tVT01OTklKTEte19jY0dHKw8LHxcXP7FVDPUFISVht6s3Fxs/rZvbX2l5ZbPf+XVFR\nW1pYU09LSVFbetbNxLy5usDN0M3N4k89P0tPSUNLZOTjdO7e1Nrm3t3Y0dluVExHQz9ESEZD\nSVZ31cW/vru6u7/FysrWel1UT0M7O0RTVm7Pv7zB0vhwZVJMS05TYGr97nR0eFx55npRQkVL\nTEdDTdu8sa6yuLrA2lhIT+7a4PLt3OtPPz5CRURERT8+Rl7ZzMvIxcPAws58YV1PT1JXftrM\nxMXIw8j2TU1dVVRORUdOTVJs7Xz/3tLO1eDe19v7X1hp5OLrcOvW2PpWT2Le2e/x3NLP3llH\nRU1VWVtcWVddWFJWZ3Hw6t7Ow8bV2NnWy8TDyNHhcWhZUFFYaH9tYe7a41lLSUZHR0VLU1tZ\nUl1y+3Hx7N7X2dnQycvLy8O/v8TNz9/9d2pdUVBZdN3X3fbq3eN4UUhAQTs4NTg/Td7X1M++\nw9XTZF9TWVNNe+bHxL68vbq5xM7N32RNUlNJRUdPX2ZW987KzNV6V05AOz0/PkFTW2ZfWnHq\n+E5KSUZPXN/Jwbi4sru2rq21wsG8tsRnRExbRzg8R3/ecdjH1jwuKykjHh0jKi0yP9PMzLqv\nxVjJvKynnJGNkZaZn7suHx8lHig9sKuqrcpQJRsWFRQTFxsjLDRBTtvzPk9J+s63nZGKiIyK\nj5W+MSgcHhUzYbCvo6Gsxi4hHRMRExgcIi00TDkzLzIvLSkuTsK5vpqLiI6PiZGfMWYuIhci\nzMS1rZ6juUg2KRkQFRYYGikyOzo0MS4sKSwwPtvnrq6bjYyPj4mXounFLh4cKUA3u6ikra69\nTS0dFxcUFxshKDs8ODowKissKzNaf7eupJOLkY6JkZ+ptjQnHSUqLGWvsLCjsORhLR4aFxUZ\nGyAtMzk5Ny8yMywyPEI8XsSdj5KNh4yVlp/PPjQlIiA0PULersVZyUooIh8bGh8hJikyMzMx\nNDU0RU0/UF949a+cmpWLjZORmaq8yjYpIyosLDTd9/rFdTg0KiAhIh8iKS4uMTk3NTs6ODs/\nPklhbrmknZSOkpWUmqWyvHs+MzEsLjxQTu7Gaz4+OzArKickJCQjJCcpLzo4OURAOjw8ODtv\nr5yVkY+Oj5Sboam9VDYtKi87SEpZd1tVRjQsKSQhHh0dHiInKy8wMTdBRD48PTw+yaGVj46N\njY+WnKKuzz4uJyoxOD5ITktFPTUsKCUiHx4eICUoKywuMDY+SE1bY2RdT8WhlpGPjo+Sl52k\nrcJMNSooKy0zNzg1NDozMC8sJiEgISMlKi8xMzc8QFBuYVpYSkHjp5iUkY+PkZadpqzAPi0n\nJSk3Pj8/P0JCOjMvLCclIiAiKCwxNTE1PUZKTD88Pj44OsSelZGPjpCUmqCquV03LiktOUNL\nXVRBPzszLiokIiIhIicqLjMyLzI3PEVJTElBQEVwq5iSkZCQlZmfrLbFTjkwLDRMXF94TT88\nNy0oJyUjIyEjKS4wMzEwMzc8P0E8PkpMV9epmJGQj5CUmJ2lqrR2OzArLTQ6OTo1MTU2Mi0r\nKCUjIiUqLS8uLjI3Oj9IT05dUU1a+LOck5KSkJKWm6GkrMNKNisrMTU0NTIuMTMuKysoJycj\nIiYqLC0rKzA8SlhVTFXvXGvYvqSWk5OSkJOWm5+otu85KiYoLS8yNjMyNzczMC4qJSAeHyIl\nKCwuLzY7Q19l6MzL0czIu6GWk5KRj5OXnKKtzTwsJScsMzg9OzIvMzcwLiskHx4eIScpLC4z\nODxKc+bRz9nt48zKvqWZlZOSkJSZnaauwk03LCsrLzEyOTg1ODYuLSwqJiMgHyUoLC8uMTU8\nRVjn7dTM32pW3quZk5KSkJKXmp2lrshNLigpKy8yMS0tMTUxLCglIiAfHyIlJycnKzA7VH7+\n2MS+v7++vaaXko+Pj5CVmZ6mrdo4KSAiIyksLC0rLS8uKygmJiIfISUpLS4vLzM9TPTVyMfR\n0svJvJ+UkI6Pj5Kam6Sz1y0oJiMnJzIzNTw9STkwLicmHx4hIyorLS8sLi83NDRCRGNdVb/G\nn4yUj4SMj5KWpUw8LSkbGD8mJ8XBRe29LjAlHB0ZGiAfHzE7LEM3LDwyL0IzPtRcu7CbjpSH\nhI+LkpumQDQsGBgnHR9OPlTP61QxKSsfGCIbHCgrNDo+UzsySjcuc0RSy1fGtJ6RmIqGkIyU\nm6g9OCoXGyMcKk5L7dfSWzAxLB4bHxsdKC01O01gOTpNMTRDNEdL8MHKnJOXi4ePjJScozk4\nLBgcIxsoPkbiysXcNTctIB4eHR4nLjQ+Z1BDPTo2MjY/PE1X27+pl5mRiY+PkJ2ev0Y/Hxwj\nHSQ6PVzYdedGNDEoJSYhHyQoLjtFREA/PDYyNzw+XtnNvq6ampSOj5KRmJ+wRDwnHiAfHy44\nQOnW29JfXTwsKyYkJycqLTNEPjk4NjEzNjA/PUnm46mgnI+Pjo+QmJ2txUcoJCEfJSwxO05e\n299IQjMtKSckIyQnKy81OTw5PD0/UFp9bH7cvKmlm5STkJKVm6KvxD0sJSAgJy02P1vn09pY\nSDcuLCYhIiMpMTU3Ozs9RUFDT01F7V9Oy7qvnZeWkZKTmZ6quPs/LiUjJSguPE9mz8voUjsz\nLiopJyUnKSsvNjY0Nz4/RU1ITFjv38KwqJ2amJaXmZqfqLDEZUMyLC0wNj0/P0dLUEg9NjAu\nLConJiUmJiUmKi4yO0ZV6czFw7u4s6mgnJiWlpeZnJ+lrb7vRTgyLy0tLi4uLi0tLzAuLSsp\nJyYlIyQmJysxOlPNurW1sK2trK2tpqGenZycnZ6gpqyzwmg/NC0sKysrKissLS8uLy8xNDEq\nJyUjJigqLztP0r+2r62sq6yus7KuqaWhn5+enqCkqq+8zlI5Ly0qKSkmJyotMzIvLi4sKSUj\nIiMpLTM/Zcq9tK6tqqioq6+1urizr6qmop+foKKmq7O+30M0KyYjICAiJSgsLi0uLS4xNDQ0\nNDg7Qlbz1sS8t7a3sbCys7i7vLq6ubavq6qopqWlp6qyxl08LysnIiMkJScnKSwuMDM2Njo9\nSVlZb+Xf0snFvbm3t7e4uba2uLi5vb25urq4ubWxtLm/xdZZRDsyLispKCgpLC83PEBOYOvV\nztXm29vuZ1xfbu3c0c3Cu7m8vr+/vry+xMjL0drX2eDVycrfelpLTEk9OTo9P0BJTFBbWFRU\nTUxQU1VOT1Rjc3v15u7f5PbbzMnGwLy7u7u6v8vSz9b6aV1YWmR15eTk7mNMQ0A+PD4/QUJK\n8e66qXnORyxKJyhPRS2zRMijWqer2LG/WLXnR7xK3cDn1unHr7zOwmfnTDo6Oi81OzVGPUZt\nXeXIv8HD+/xLODY+MzFJOebrVMDTTb7J1LG+r6StoJ6koqq9yEAtKyIiKScnN0DWvL60t8e+\n4zw4LiknJCMlJzRAWuS/t7uwvLvOuaqrnKWclJ2an7C4PyUnGBcZHB0uN8mxqaSiqqqy5UMs\nIh4dHSEiKC88SO+8xsO9aM1ePWm/tpqWmoyPkZafvXIaGRYODhYaI2u5n5ual5mrtuQpHxoY\nGBseLzg80r2+w8TNZzw2Ny0sNFWlnI+UiouNlpy2MxkPEAsNEiMtuaCWkpSVmqo/Lh0UERIX\nHCU6xcO9srbpQUhMMy4xQUw78ayYl46PioyTnq8+GxUNDw0THT/HpJeVk5mfsz0gGxUQExki\nMVa6qKy1ss04LC4vLCw2TeFex7Sal4+Pj4yWnbfNHBoOExMXHz+1q5uZmJ6rzTUeFhYTFhwp\nQtW2qam5zNQ6Kyw5OCw5wbnX1c6klpSWlY6Unb+9OhoQFxkWHTGzp6KclZutvUoiGBQVFxkf\nOf7LtK+2xvlHNS0uNDM0P8rI4dWtlo+SlYyNlaq86ikSDxcWFhw4uquto5uftvg+LB4YGBwe\nIC5jxMO7s66ywdDJym5OTu3qVum+u720q6mutLGusLa6vsbU4NpjPzU1OjYxMjg7Oz1DR0pb\n6ehbVmVTSD47Ojg3Njc3PEpx0sG5r6ysrbK5vsPBv725s6+ur7K3vtN6U0E4NDc6Ojo5PT9A\nPz46OT0+PDY2Ojk4Nzk+TGrQwLy7tbOwtLi6u7y7u7i3t7O1uLy+wcrcXUc8Ojk7PD1BRklI\nQz4+PDo6OTo8P0RCQUdSZujazcfEw8C/w8bFwsC+vbu4tbO3ury8wc7gYVBMS0tHRExKQzs3\nNjQyNDI0OUFNVlpj3czEv8DEwb2+w9rh2drmb19z3c7CwL69vb6+wMjS3uVWSUE/Pz49PT8/\nQUdOVE9VW11cZ3Fs8tzS0tnRyM7jcldPTktPUG/Sx7+8vbu4ub3Fz+HzXVJJSUtOWFxcXFlZ\nWE9RUEtJRUBCRFT55NnLvrm5vcXbYEpCQT09R17bxb+vmswquS51JTOnZSw3qb08eK+55Tji\nr0s2YbtPMkFzbT89vbBd2a+9V0pNVUEtPOJCRcjM3tztyM9OTftTU9zP2Htzxcdmz73O6fns\n0EdE/nxKV+e9v8m3r7zTx9BSOD9fUj5Vy99PRj40KSYpJCAoMDZE3721trKqqKzMubbufrab\nmKKWj5istL8vFxceGRQhRT1ZtKvAPzcuHBggIR0mRuR6xq+uy8KxzmnLuba7v6+qnJSTl4+T\nn6rIOh4XFxsVHzVP97e4yGo+LyAbHR4bIzI+7Ly0uM3a5UJjxti7tKuqra6svKebo56Tmp+j\ntNwtICYfGSMrJzjkTk5nSjgsJSIfICsvOVzOyby/3WtZZuf8xMjCsrK6r7Oon56dl5mfnay/\nWDQpKSAkKCkwQDc9Uz02NSskIyMnKy48R1Hj3nnmanHJx8G0tK+rrrS1t7Cnp6CcoKGdqbW/\nTDEsJSUlJS05OD1MSEhBNSwqJyYoKSouOD9b2s7Iwbq3vLu9w7zCysHIybmupZ6dnJufp626\n2F0/NC8tLi8uLTAzMjEtKispJicnJiguNzxJY9zMwbeysrKysbi+wcPGv66kn52cnJ6kq7G/\ndz4zLisrLC0uMjo8ODIuLSwpJiQlKS0vNTs+RFZt0cG6sKytsbK1uL66rKGenJqbnJ+nrr9P\nNi0oKCosLS0yNzc2MCsoJiUmJykuNjk9QkRVbt/Gvbi1tbm7v8TEyL+topyZmJmanqewxEYy\nKykrLzI1Oj4/PDMtKCQjIB8hJCkvNj1IUl/jzcvDvLi7wMC8urmysrClnJmXmJqcoay21D4x\nKyYmJycqLCwsLS4tLSspKSosLzI1OD1KX+nTysS8trfAy87Lv72+wbmonZuZmZqbn6u20Ug7\nLigpKiotLi0vLS0uLCkoKCgpKi01PUpefX3h0NHLxMXFyMO9vru6u7irn5yampyeoay1xF9D\nNSsqLC0xMzM0ODUvLCgmJSQlJykuOEBPXu7Jv8PEyMzR3dHU08W+trawop2amJmbnKWttvM7\nMismJygrLzE1PTs1MCwpJyYlJyw0QU56z8rFx9btZ1dWUlVe8sK5trS2raGdm5qcnp+nr7xb\nPTYsKisrLjg8P0I+PDYvKicmKCstMDg/SVJZVFBWWVJXW/TQyLy5u7q6vrOknp2ampqcoaiv\ny004LCkqKiswMDM6ODIsJyUlJScqLTQ+TWBnb+3yb2NZUVhocnrOx8G7u7uqnpqYl5iZm6Co\nsdlEOCwoJyYoKywuMTMxMS0sLSsqKSgrLS83PEFITWTfzb+7u72+vby7vsK+qpyZmJeYmZui\nqrPjQTcsJycjJCcnKi80NjUuKigmJCYoKzE6RE1RUmfZyL/Gys3NyMfIzM3Buaeal5aVmJqd\noqmwxkY3KiQmJSYtMDM3NzAtKiYkIyAhIyUqLzY+TWfSv7++ur7CwMHExcPBvLejl5WWmJqb\nnZ6iqbdLNSceHyEjJykpKisqKyooJycmJykrLjU9TGvcy767u73J2dXJwb+/vby6qJqXl5iZ\nm52fpKm1TjEoHyEkJikpKSouMTIwLispJyYmJiksLi41RfnEu7q2tLe6vLu7u7zBxrCdmJiZ\nm5qbnJ6irvEzKiEhJiUmJiUkJiwuLy0pJycnKCgpKi01RGPTwbu3tbW5vr67ubvAx8u9o5mY\nmpybmpqcn6S2RiohHiAhISEgICMrLzAwLCopKywvMC8uMzhD3ci/v7+4tbW4urm+wcnX3Lyh\nmZmcnpubmZqep8o5KCIgJCYlJSMkJSovMC4pJSUoKy4uLCstNUV/z8G/vbm2ubu1sre6ubm5\nq5mUl5uempuanaKtWC8jHh0fIR8eHR4iKC8vLywqKywyNzs3Nzo+XtfCu7+/ubS0uMPGytXn\naO6umZOVm5yZmZebna43IRgZHSs8Mi0oKjM/SS4dExAWHzdGPz5H2M7sOCorPb6spqaqqqas\nvT83noCAgJUeKi2pNhQNC76ZjZwmGRUhHxUNDya2qMsmGydQzjQfHzqvqsRB5K+iq9c4Lrmk\nn8A1OeyQgICFaBHHwqEZCxMij5uxHhYrMCMOChTCoK4oHSk5eiohKdiqtUMvT66lyT0yxKy9\nu+O75E5InYCAgtURvMOnEwwc6IycWR0iPi0SCQwfp6nmJSdKLiEaJMKruDww6K+txjA5v6uu\nNU+uqKsvKNKCgIChDGqfpx0GHcCMlzIeMbVGEwgOJqrCLR8sYywcFiy8p1slLV6sv046xKms\nvkLFqqOxMixMh4CAkhQ2lrUiAxS2lpshH0+uNw8HDyXFXiZOrqQqEhMwrrk8KGO8s2lMyt28\nvbqwz7qv2GUkLK6AgIeoEZ2bLBAGvKGVziO+n7QXCQwnNkEgI93NOxYTJlm6SicyXbS5dM7F\nsq/CurytqMBdO/LUjoCAjShKljYbBx6xsL8g4qW6GgwMHCIiKD2hosUfGys8LiouS+JDdMWu\nuFvRtq7GV7autj811YyAg5UlqI0cEgXzoVo0G6KbXxENFy8aFyTQod8vJyo8IyNIv7E2NcKq\nqGg96Lm2VDqwrbY3Lr6MgIiZ4ZiPGA4Nq7ofJz+UoSUVHCseDRU6rs8t4uJWHhsqVtg0MUqz\nr7nNyc/P60rCtrdXZM68joCLlq6TlBcWFKIsGy3eldQlIjAoEw8cNU4lKN/pOB0lWchbN1ff\nfGTAqLJKQs+xumRTtb8/v4eAj5ueibASEz6uEh02m6slL2lPEg0WJCYcNq3CUC9TSCorQsYv\nLkG0qcDfyq3nLcm6tkQ4rI2AkZSSjZgZHilaDhzjrbIqsa/2GRgfGhYZN/gnLe3ANiIqRF4p\nMjpvw7OkrrG8tr7NvWr1SJaFj5SPjpo1JTksDh9EdUldrbw+Iy8fFhQZIiYtOV7MzUkvMDw7\nLCc/b7exq6e1s9m5tXJf05SLlJGLj5/HXn0bFCgtIynCsfEwS1YkHBsaGBwtNSs+yV8/PEIw\nLDZWSOCxpqi5rLVrw8lhqZWSlI6Nkqi6rzsZHiomHy/OzztEZTAsKh8bGR8oJSzX1kH+Y0Mt\nLTc6L1fMsLC2qrKyub+tl5iWj4+Tpauw1iElJCUlNUNDPlNmLy4zKCEgISIeJC47RuTmWk5K\nODs3TFHfub+4v7Cv1ruZmpyRkZCgp6m/KzUyKyk9bUQ9ZPsvLC8rICkoJCAjJyYrPUc6QmZG\nMjNFPkm/y86zr6u0vJqZnI+Sjpador4vNS4hIyk4OzxOZDg1NyskLSgoJicsKyw8OzlXSUA9\nPUA+OFfnSsu4uLa3ppuek5GSk5iYob49OConJigsMThPSTwvLywrJiwqKS4sLzQyNT85PD88\nPEJERl1IWs3rt7GunZqYk5CSmJieqNM6NCofIicrL0NJVU1AOC8qJScjJyssLTdKS0A/PD9D\nQEBFPz1JZ+3cvK2im5mWlJSVmp6krLltOi0oJSEmKzE2P1hGNzErKCYnJykuNDtHV1VGRVdr\nZl925OZobnHxz72vqKWgnZ2cnZ6hpquxwGw+OC4sKywyPD8+OjQvLi0rKCcpLS4sLC80OT1I\nWe7Tzs7d1srIxL+3q6Sdm5qZmpueo6m0wf5AMisoJygsLzAzMzUyMDAuLCsvLy0tMDQ0Njs8\nQU9m4u7c1ci+ube0qaGdnJuamJmbnqWtt/c5LCckIyEjJiktLi8xMTU1MC8wMzM0Njk7PT5E\nUmn93c3Kw8K/vr+9tKukn56cmpqdoqeqs8xDMisrKysoKi4yMjExMTY4MC4sKywtLi8vMTdB\nUmfexr64ubm2tre9yL6yrKahnJqbnJ6kqrTOQjArKikoKCswNDMyMzUzMC4uLSwsLC0tLzhC\nS1Zyy7u3uru5uLzCxMnJtaqloZ6Zl5mepauxzUAxKikqKissLjA1My0rLC0sKykoKSoqKy0y\nPE7jwruzr66ura+yt76+v722r6qkoJ+en6GlrbbKTTsxLSkqKCgvNDIwNDMyMSsoJyYoJykr\nLDxSSODLv7Wur66qrbCvraytrq2jn6Kfn6GlqK+vt+47LywnJiAfJCUkJSkqLDAtLC4zNTM2\nNDlKSmXo3L62ubKtqKupqaqrrKqtrrGzsrm5urq5xMpmRj81MjEvLS0uLzQ2NTo8OTEzNjg8\nOz1CWXXe3dfMys/JysjBvbq4uLm1trm6v8HGxsvAzels9U9TRklQTUtKSUpPTEtAQkU/QT9D\nSD5BR01RTX3xfXlr7tHLx8HK38vPvcjOxr+6vry8tLW9wtrl40/nX3lJSUNYT0ZGPT86NTQ0\nNzs+RUlB6s7Edc/10uzbxci8xrzBvsi+z8G/zcnUxMC8ydtdTOnrWUJUWktDPF9cRkBBRzg9\nN0FXR0U+V9R84VrPvc7L1sK+vsvVy7/IeeTT59fd2MTP49zd0993T+PXVNDH21VCUmZNOURN\nPTM5OVNFPk1TWHvt39Pr49HK2dvRzce/xMm9vsDCycG+zMe/z9x4V2nmaFVSRkhuXEQ+Nzw/\nNzI3SEE+O0fuZ2tdz7/Exs3Iu7u7ubnAx9TPwszHzs3+Zd/i6XBfXkRCTk5WU1RtW1thUFRO\nPUJEPD4+TGJPZvX919fJv8PL1M/Iw8XI1tLO/Vb73ePX09rr2drOz87Ez+7d1GlZUG1fSjk6\nPTc0Nzc7Q0FVX01f9cvK3uTBvb24ury9wL2/tsBlbkZ+XULWwdbP2M3F3FNJSD03Nzc7RDdF\nQ0ZPS/hPbW1t7fXj3sTM2sS7u8C/vb2908/X6/V63HBeWFH7+2HzXmnga1tZeO5kU0xOVVxa\nTlpPRk5PTllMRVNJVEVFXfW/zczDwbfDxsPGyc7Pz8/a3M7my8zr2WVnfFlHYO59Wz7vyV9M\nR0JKQD1CQkk+UUNPVUTny/vjYNPFz7+7wMzUv7rN8tO9t9xZ39TN7VJVTV9+39hFVfJbcltB\nRUQ+PUVPS+pGUNpR2Mfo11lPZF7X6dXe6tvNzsm3z87wV8rJ1P3Xx83bzNXE2FJOV149TlRH\nVj48PUA7Pk9JU05GavZ65d3Bxu7O58C5wLazvtHEyGl8S0RYzmxI4G/Pc0rp51tW7UlMTk5b\nSz1AQltnTVVo2N7nb+rh03Reae7K0ezNwL++x8XAy996VnxjXu9bec/qXlP73nhuUUREO0lP\nQlpnSmpqSltMZN9eVnHQv73LzczLzdZve9tsz9/T1nDIysliTHRhW2tJcW7s32Vna1dKPj1H\nUm7g2tPb+VZM/1tGRU3i3eXYysHO6d3UfXhe/trTyry2vc/l0snNY0lNS01JUVROQkBKT0E/\nRE1jXVVr9+Xd79DMz8/GxsrNzsrfVkld4d3r7dLJ0t3PyM3X8uPqYFNXf1tJQD9OT0lJWl1U\nXFh08m9XVGtz6t3dy7690+D11thuW/TPzNnt4+HR6npuV27q+v7p7/vrfGZbXWtfT1NOWV5l\na1jr5d9eT1v309552dnlaGVl/2tO5N1STVby7udPV/Zd39rd3O3Vxr7HyLq1sMDp7916PDo8\nQ0I4StTAwsG7wtBLODEvLSgnLDU/SGLavr7WfePBxc/kzsXL4N2tnpucm5eZqU0sJx8bGiAy\n5b6wrK69PywhHRsaHiUrM0zCuc9Y6vlQTVi7sbO7ta/IpY2Hi5SWl6wiDw8SEBMdWaObmpqf\nvikbFRASFiJB0sS2rrtILCUnJSpDr6Sinp6lvjstOJ+MjZCSjpK5HRASDgsPHcifnZiTl7Er\nHRcUERYnVO7rvLPeMCIhJiQoSa+fnZ2dn69HLCbWjYmRlJCMpiIPERQLDRprnZqXlpiwJyIb\nEhEUJlPCv7Oq8C0kHR4eITmwop6bmqGoyyseHM+KiZGQi4mrHA4QEggMH7GYl5GPlrggGhoS\nDRIj2M7PsanIIhscHBocPKWcnJqWlqpFIx8cMoyFjYuMhpsfDQwOBAYVTpmSko6PpSoXFxEQ\nER+/rK6qpLUvHBYYGRkjxqShm5qYn9UvIB8tkoiPjYqGkT4ZERMIBg8lrp6clJGZwCslGxgV\nFicxSvi8stVJLSYnHx8s6riuo6SiqLxMMEyckZqflo6UrzsrLR8aGyVCXGVe2tdaRTszLjE2\nOzg7S2taSj5DSkVMZszAv8XHx2k+PkxZXvHGtK2usrnBy87LxLqyrqusr7jLX0c8My4vNDs9\nOTk6OTc1MjM6RFFWZdTN6lhXSDgyOEb1w7OqpquwusXN5Vp+wbGsqKWprr9wQTEsLTI3OkJW\nd/lPQjozLi80PEd2zcn0TktEPDg3QVPWua6qrLC4x91kWX3Tw7mzsK+wucnwTT49PkVV+d7T\n21VBOzQxMjQ3P1nn9VVDR0Y6Nzk/Uf7PurCxtLSzuL/Nzr+2tba3ur7QX0o+Ojk8RU1aXVZN\nRj48PD9LUlFSa9va5VpPU0tHSGPXxby5t77R8m1sXlT0yby2t7vE115JQEBFUGrr1s7S3XZN\nPjs5Pk551svCwMTdT0M/PDw/UdG/uLe92VVLPzg2PE7hx7y3tba82F9cXWjgysfAvMHPb0Y4\nMzU+TnrYyL/E2lZCOzs6OT9azru1uLrC21JCPTk5QFvNwsK+vcDTZEtCRU5s3cjAxczZ3nJQ\nUWPj0MjAvcHWUEE9PkA+P0lY9N3Z2v5aS0NBP0ZV6s3Gv8G+vcjhZmd5/H3dxK+nLUVOUJ1s\nPzAtVuDaTdZDPUZg5O3f0s/E1+DX+9rVr7sqLCosOildvb/Jva6wvtxUV/FQUmB52NrPxsm5\nurm3vrrG6ks8QDo4NTRBUl9ncOh2W1BDREdMUE0/PExMRD48YNjRzca4trm9v8LGwKufmZ2l\npKquPCQaGx4cHy7QpZuYnrJYKxkPDQ0QFh4tw6qnpqesxTkjP6WGg46KjoSYSQ8KEw4ODyaf\njY+Snp7UJhILDA8THCzJp52drOQvIh0bGyNLs6WcmZqiYk+vm4+cnZuXllQjEhgcGRsnx5yc\noK+9wDQjHBgeJTbfvay0yD0kHxkXHSU5vaijq6Kkyi8lrY2CjpWZkpgiDgUSGh8k5puLj53v\nLicaEg4WOryqoKCdrkEcFxcVFh4vvKiinqGwRD4/KSElqI+Cg46PoKMfDAYJHSy5o5WNjJ9B\nFxMQDxAYQaGZlpyozScYDxIXHzq9p52cnq3FNh8hJiwwQp+KgIGPn23BFAkBCyy2nJyUjY+0\nHQ0PEBkbLK2Wkpen4jMhGRMYIT2+uLKttL1LMikkKU26utS0nIuCi5/cXL4iEwoWWquktaue\nntMfEhUaKCsuy6iamaK/OjUsJSUlPsi6zVlXU0QuJis5Q8Kxxew2ZKOIhZOcv5/BJg0LID6r\nu7WjlZ7rGRIQFx4bMb2el5efuOI1HxsaHzFuzL+ztLbHOy0sOztNu7/ASNmqj4WPncLErykY\nChcxrqGsoJqYsyIPDhIeIi3Ko5eXoNsqJh4bGh0zvqinqa686jolICY/v6aen6S9/rORipev\nRMG2NBoMFym1ttu8qp+xLhUSFyIpMUavnZudrMo8OiwoJzNrtq65yOnoSDEnK0/YWOnGsMIv\nO6yJiJKi2Z/FSw4KEyWpu6yynpusKhIPEx0eJjWpmZecrslCOiYfIS/Iq6mtr7K5fTQkJjll\n083Ltso2McmPi5Cex6zaXxgNDhRCe66upJmbpDYcFhgbHR8usJeQlJ2x3zgoGxYcLcmupqSh\noq5LJB4eICIqSsbFxaiRiY6d1VHXWC8WExcwuK6psqqlpbYuHRYZHiQpL3CuoZ2hrbi9xU82\nLjBE37/Ly8i+vNJbNCwqKisrKy5LqZeSlZuen6a3MBwVGSEsOUTqtqinr9BBNC4rKCcrM0+7\nrKirtbq+wcvhaWDv22pJPDw/QT87PUNb3uF9W1bfxLKrq6qtrbC2vslpOjE5P0Y/NC8wNTc8\nPkJOf8/Bury+vr/G41dNWt7PyMfS+VtENCwqKy86RHXTTpSJEAyrj6MtUkK9r6OuvMS6tr9u\nOyofPtAtKTxLXr7KPV3DX0NPZk1azru6tbhoSFA9LiwuLztWU1bkxMLEwb69vLzBw728wL65\nu8DFyeZbSTw9Q0tQX11MRkdMV1xOS1V429h7UEdBP0pNRkJHTU9SXnbi3c/Du7SzsLCztrzH\nzcvN5V1QTVZWSjw3O0NMSD8/SFpbUkxMU97L0N3jy8TG0m1ZY+Dmemdt6XVmefDr18C5trfA\n193h7VRHQk5w/P588HpcSj45ODk7PT5Ia9bLxMHHytHY3N3PysLDw8HFzOJrZ1ZPSUhJT0xL\nTlhx3tDJxcXJ1ud86vJ+7/zm4ONlTUZEQz07PUJJV1tcc9rNzdXd3NTNzcjCvr/DydXc3t3k\nX1VeYlhJSExTa97MysvT2d9fSD8+PT9ERkld2svN1uh2Z19YWWzZysrQ0MvJycvO0Nzb5XJh\nU0hHTU9ZYuzj2txtVlpsd2tfXVd208zY3tnW0tfd39/c9FRISE5cYFNHS1lvaVZXX2Xu4OXd\n1s3KxcXJyc7Q2XddU1dXUE9WWlz76fTn39Td5uZ++fvt3NrX19PjWElCQENIS0xZ7NvZ3+Dr\n7uTe39/Xy8PFz938Z1xOREVMUVxfWW3Qwcfd+W3o7ufd0szMzdfb3XZnXV5RR0NCREVFRU1b\n/urY0NLVz9LW0c/LyMzk+d/V1n5NSEZKTElKTVht+PhfX+rTzNHZ29LOzs7OzcrN0OlfVU5G\nQEJKVF1rbuXPztfa08vFzd5tTk1KRkI/QEdXY/fe29DS1dtxbOHMzdDV5OvefP/v6dfLzNTe\nemtfYFxXVWB+6ntebdzT23NgW2rf32xWTk5XU0hHS1diYFtZdOPl6efZyMPH0dPM1tf0ZHHj\nzsrP3/H6fmVYTExOTVdVV2Px6O90bXPv525jX3Pvffff6ePc3+b8eHxLR0tOcV342NjaeHr+\n3dTc3tLIwMDEydh4X01DQUlKS0tIWfPW1NXW7vTc4eTf28jMwMhZX0pYTD5BPl9aWFZR3Pbc\n9V3u7tPX29bPx9R63+Pg38PE5WtOS1tLPj8/S0FBRG3L2uLQs62/vbavuL+9zbS7zExGbUIs\nJzI9Oi8yPExOQz9lbmjlxcTM1c/Y/fxf1cPO2epqz8nNyMDJzMnR6l9OP01tZ+1uY8O/wNdV\nQz5FRjs/TmTWXnnQurvZy8jZTT5W4/hMX9DH7lU+PUE+RE7VwczY7llTaMPAxsfM1FxiVtbM\nytHa2NfUZFZZTEpPTEdHSEL928zDyuBbX1VeXmpg19Le73hPP0lQaOjq2cfHyL/E12Jje9TO\nyMTFv8rLyPtOQkg6PUI8P0RCXtfs2+TS9WlXce7H3WzTzN7c7W/OzU9O2c/N2un521dYVEhW\nT0JDVN3d4NW+x3Rk99LM9lDXz3xOTvPO9k362OtWffRTW0NMaV5cSftjW1Paw8TKV8m5uurI\nv8vTSU/tUDg2RWVWPknh3lRk8eT7ce3L0c7MxN78WN2+1kVKXt7xTd3n31pYVFzq+9ps4fv7\nbOP4aVxXb2FqYl1RY/rb5cnJzs3V1VFPdcntRkzyam1VUPh9Q03hztLKyM3lf21mVEdj7FBc\nzt3eTUxU005O2+r1XtzKynfNvMreXWRc3VBa2ctoR0JNZkJC7c35fsjJ1GxH91VCSlL8zefS\ntr7XzsPRz9vI0HxSY3VPSD9RS0ZGTVxlUktdcEhAWGJR/dy8xePNu8vrbXPs51PNz+XTzsO+\nyNzAwuhSVlRjXt29tby/ydZDLyssLionKTE5RV7ueu7daNjE0NzKv8LLw66kn5udp6i/XCsp\nJCwpNH6+t72zvlozLCwnJiYyO0Tr0MTp61VvPjxnzcrGtLa8zL/E91JJPk1MyK2lo5ycp7Jb\nPSkfHiw6Xbyzqam1z1EsIh8gJi00Wsq9vsr3QzQsLTA9X76trK6trMdfV0EvLv+fl5mYlZev\nPiQhGRUZLWC7raGdpr46MSYdGx8qPGm6q67CaUk0KCImNk5du6qorq6ttkk0Pjw3Kfedkpea\nlJWoNCUmGxQXLezGtaObo8A2MiIYFh4xPF6wn6W+VEQzIBwhLTlXtKKfqa2psE4tNDIqJ16a\nkZSXj4+kOyMnGRAPIT1fuJ+YnKxpRSUTEBcjLVGsnJuoss03HxwcHiQyvqWfn6KeqMXuOSIc\nISjIl46Qj4yQpDAfGhALDh0sX6uZlZmozkIgFhQaIjHTq56dobHkKhwYFxofNs+qnpyanJ+2\nPzUnHRgrm42Vl4qIk/crKhcKBxAfKDWnkZGdr7VVHQ8QJDkfOaSWpL+3sUEXFRokHSB0n52i\nm5SbtVZKKxsfqpKZpJOKjqw3PSkWCgwWJCQtsZqap66wyicYGDBFJi+0nrPVyrFnJh4fLSwr\nN7qqpqWfo7TUPisnx5ibqaKQjZmyZk8uHA8OFyQpJj6vpKazvcrXRy8yMysoLjs3QE9wPjxO\nWvpV3Ma9t7m6ra3fOz1Vr52ao6WYk5muzD80JBkSERokKSxJuauqr7zExd7C2TErOdNAJiUx\nSj8xMl+8u+j3w7a7x8W+x1g5L8yZlaWsm4+Sosc/RzwiEg8ZJyQfJkO3q6zH0bm2r8cyLT/i\nMR8lMjkwMEfHs7G/u7CyuLy5u8pPOTU8yKGdp6aakZeoxF9FMB0UEhgfHyEtTLyvr7rDuK2q\ns0Q1Rko3KSgtNERGOkjVuLe+t66ur7zgeEkwJCa+m6G3pZSOlaW5cEE0Gw8SHSonJDXMsKy7\nVXW/t7rlODZMZz4pKTQ3Njo6ULqur7Gvqqq5y+1NNCspKkOkmaWrmY+TosfiUC4fFhIZKCkk\nLH62vtndzb2xsd5J2sdZLycrMDM3SU/Sr6y0sq64vVJBOy4vLS5L0bqjnqSlnJedrb+6yDsp\nJiUjJignKTI/PDU+6r+7vMLe3+tDMTFCSUE+cLrEs7e4qsfMTEZGMzs6NjU+Qua0qqaoop2c\nnqSqsMpMNi0qJSAfJCksLS4+ctfJy83deVNJR0BFaVlCYq/C0bDFT/+9US1f5z8zNlg8S6um\nta+dmZ2goqWruUktKSsnHR0mLi0vOkne0ltkz85MOkhNTUs+z9kzv9k7uUVOsUi2xTa4zzVH\nND6uq62uopeXnailqL03Ix8iHhscICs0O0/Asa+1ta605T41MisjJCkyOz1K3LPEvq+3q9Hq\nekBKKzipm5+om5KSmq63r1UgGBkcGhgcKE9nY76on6m7t7XaLyUoKB4bHio0OVS6q6ywrau4\nxtJEMy8rvZOWp5iNjJetd784FQsPGBcXHEuroqygl5uuz09DLRkVHSQfHyxF/k9LwK+6z7ux\nutJq2Fc0S5uMlZyRi4+nRD4/GAoKExkaHUyel5ydlZetRCwkHBMPGCMkJ0i6tr/bvr1ALj7g\nSEjAqKnAz56Ji5yZjo+lNiIuHAwJEhwcHzanmp6pnZquPSkqJh4YHjY9Nviyt9BQY3M3KC0+\nPDlRvrG+/aeOjZmZj46ZyTRCLhUOERocHSXfpaWsqJ6lzTYrKiMbGiQuNULDsbO+yLy+Vzs9\nRj04PEpIP1+nl5abl5CQmqy+yEEeFhYbHBsdLdW4uraqpazOQzguJR4eJS0uPeW8tbKura+8\n0ubvW1FZYOr3bb2srbS2q6inq6+0vNBNPDIuLS4vNTQ0P0s/PD8+P0I/RlZe38rGx8rFwsx2\nTEhLRUVd39LOx8fCzG/g2t506Mm6srOysbS6vcLMYkM+P0JBQURGR0E7Nzk6O0A/PkRTbfDp\n4tvS7Wfjz9Pa0s3DxN3XwcPX39fMydLbzsXHz9fn9XZXV2Jec9HM4+zyXlJENzU2Ly4xOT5J\natzMxMO+ub3IztPOxsbNxr3Ay8/X1M/d6959VFlcVExDPDw/QUZTduDNyMTBzO3tYEg9Oz1I\nWFJPY3fx2dTe39vdfGx50r24t7m7u7u/0OZ9WE9LSkZFQz4+QUBCSE9cWVZne/vk19XP0uHz\n5eTe2ODk5+tgTlNaW2JidN3QzMjCwsnO19jY39nW1NLV3O1yUkxNRT06OTg5PktRW/TXzczK\nwby9v8ba72lPRkVKSkxNW/Z+W3DNxsbHwry7vsLIzdXZ52FbWFNUS0VCPDs4Nzc3PUlY+M7D\nvbSysrW6vsnkT0M+PT9Rwy1UZyrKMefNTsLCvLu1tri7vsvSz9tiR0VJSVdVRj06PUdE+L4/\nQL+hrU9IOTkjIj9UPkS9qqixvra38EBIZ0tHQXW8yc/Bt7jBy8rIfUU+S1BMRVJeTjw8S0Q+\nPkpMQ1fj4tzPz8vL0b/G19jDvc3Z2svG3Pr52+VrW2RrW1ptaV9wXVlKQ0lJTUpVXFVY9+Jj\nVk9W6nhPU01c7GBR9tTKzNfi2N72w7azr6upqrC8v9NeRkNFT2f52txUOi0oJB8dHSAmLDZM\n7eDIuLO+ysu50UNtxKaTk5ePj5aobzMsGRMbKCk0xqeeqrm4biUbGBgZGiE0R0zYws9NOTlD\nQErWt6qmqKyrrZ2RmqSanKdiND81GhotNSw9u6uvY9S+PyUqKiYiJj1nP07FWDIyOTMqLErO\n6c2srbSxvMvQppyfn5SWobfBxC0eIS4mJznDwfXhvt4xLTcuJS09UVDyv81BPD0tJScuMjZW\nubi4rK2+Xzz0pqKqmZCYnaSovC8mPSwgL31YT+bKbS8vNiceJiwsMk7bcFrLzzovNzQwPWbM\nu7avrbLIX0NNs6WpnpOan6CqxDkvOywgMlY/RMzZWktOPComKigkLDg4RdrbTD9AOTM5Rkz2\nv7/BtLC9xNG4qqujmZienp+txFFCNSssNC8zT1Q/SE08LiwsKCUoKysxQEpZ4+JcU+1dRmDM\nzd3OxcfOxsvGraajmpicn5+ruNRNOC8tLi0wQ0tBU1k+NzUuKyoqKy4zNjhEXVRQa1ZHSF1f\n7Oxuz9fCvcbBtqmlnpuanZ6gqrfPUT83Ly0vMTc5Ozw8PDw6MC0rKiksLzU9SU5RVU5SX1tb\nWfnb8M7GwLm1tK+tq6KfoKGgoqessL9iPjMtKSorLS4zOjo9QjgyLissLS0vOUJKWmnjzdLd\n1M7NzNff2dzcy8rTx7mtpqKhn56fpKivwF5BNi4tLzM1NTY2Nzo6NjQyMC4tKiouMzc7PkJN\naNrJwr6+v8PHx8fJxsK5raOem5qbnaGmrLbaPy8rKCYoKCktMDEzNTM2Oz04NC8tLi8xOD9L\nbdnVxru3usHJ0M3Mx8TFwL+5q6Shn52en6OorrrSSDMrJyUlJyouNDY4NjIwMjAtLCsrLTM7\nSe/RzMK+wMPDwMTJzMzHv7u7vsPHuaumo5+dnqGkrLnLcD4uKikoKCotLzAxMjAuLC0tLi8v\nLjE5PklXaODO09LKwsG8uLm6u7ewsrm6tqyinZ2cnJ+lrbvQTzYsJiEhIiIlKCwwNTc2MzQ0\nMDAzNDU4PkdUavDRwby6t7m8wMTCwcG9urSztLKuqKKgn5+ipKixzEg1KyUgHh0fIiYsMjpB\nSEdBPDs8Ozg0NDhBUvLPw767u7/ExcXHysfBvriysbO0t7Wuqaelo6Snq7PAcTwuJyIfHh8i\nJiouNzxBSkhEPzk1MS8xNz9Q68/Bt6+traytra+wsrm9vsLJzszLz8/Gvri0r66xuMDXX0Mz\nKygnJicqLTY/S09OTEhHRD01MjM1PfK9vuZW0rCprLnJy7uxsrnCxb29yOZ07dS+tbKwsLCy\nt7/vPi8qKCcnKCsvOUJPXEw/Pj03MC4vNTxGYt/Muq6rrK6urayssbe7vb7G221ZUE1HSU9l\nzr66ur3AxdlWPjMtKyoqLC83R/fU1tzfZ0o+Oj0/SFZ+6d/HwcG/vbizra+0t7y9xszqTkVA\nQUJFRkxq3c3IyMXDwMPK2mpVRD07Nzk7Ozo9RU9qX135Y2T3cnXgedjGw8LDvsDE3HPr2M/s\nY1NSUm3sW09TaGZk69fSzsfCv769v8jSWUhHR0Y9O0FKUldWTmD4ZGf63eHTy8znWmffdFhb\nZu7O4GpiWVlRQT5FZGn5X03eyr2+x8i/u7u+xsnJzM7a5/NZT1FSTVJIQkdASkZKS0lFV+l7\n9XzVzdxh+9zaZ2RfT1Bf9ld2+N7L19LMzMXAzsnOz+T24Vfbz9rT1dxx0uxVRktTT0xAOz48\nTmpSX2Phy8pa2M3i0Otby8bP20xOWVVddGBTYtfEzuBxy7zP0c/Lwdfr01xXZGfdWUVXREdN\nRWJhR09TPlZNT25Z3dLUzcnD1OxcZefe1vzYx8vt4dfZ/H7W23FWVsXF1HDqxdRgT1pLZ01S\nUEXlTFtCWk1ITT9hTEx8zt7ZxstscFDNxWxn1sLJv93NvL/F6U5Z5s/qYWdm3dtxTUNI+VJI\nR0xPVW/gUVjm2u5IP05+3mBCQ+jGzVRo0r/CztbJvb3F315o1cbP+FlWdlpPT13q8nXmZGto\nZGpgUkZLVvHseN/9+HpZT0hMU1tTTURLedhlWO/Eu8bLysC4ub/Iw8fK2n1XW0tESUpCQ05Y\nVU1NTkxTZ996Yd7Oy9fl59zU3OlSVVVRTEA7P1zk2NbTysjJx8PJyMfLztnO6vn38mlfTF5z\neWdNR0ZOTU5HTFNfalp61M7b4e7y4GlZWGFZUU9ZfdXQ29DUw7u+v8C/v8THydLhXE9QRj49\nQ0xJRUBBSFJdTURHS0NCQkpcVU5g4tLDvr+7vb7Cv77EytDRzLyzraywt73B2ks5MjAzNDY3\nNztAQz04MzQ0MS8uLzlIWGRryr28vru4tK+wuL26rqKem5qeoKau2DQjHRoZHB8oM2C8r66v\nutdKMyomIyQnLDI9S19v7M/Tz8O/v8PCvba4ur7R18ernpmYm52fn6vmKx0ZGRwdHyU03rav\nsra8ykctJCAhJSgtNUj6zMfKxMW/wb/ExcjBt8D9SEFMvp+Xl5mbmpuftzIfGRkaGxsfL9yu\nqKqtrrXaMSEcHiAlKC07VNHR417jz83K3dfJvLm8xtttVL2flJCTlpqborgtGhQUGBodIzi8\npqCmrrzFXy8eFxccJi45Tsi5tshPR1hhWFRX28S1r7C2wv9zqpKMjpednZ2oLxUNDhUbHh8v\nuJ2an7lMOzcwJh8eJTrVvsPCyc5FKyMlLDI8ZLuxrqywtr/+Sl+fjIiMlZydod0ZCwoOGiYu\nPLSblJmvNR8eHRseIS5mt62xtn1ILSIcHCIrRMGnnp6lprDN8jcqJ6CFg4iWnJ2lSgwFAw4f\nMFXcm4+OnD0aExcZFhknxaCepLe64DIeFRYcL0zMrJuWnLJ9Qjo7KiM0kICAhZWhqLoaBgAF\nEza+rZ+TjpjaGQ4NDxMcvZqTlp+sai8YEhAXJDFp3a6inJ+wOCQrO0cuLlyNgICAl1O0TRcA\nAAUgopyen5CNmygMBwoVHCA+mY2RoUEpJiAYFBko3bi4t6+nprY6HyZDv8BmQ66FgICMvc20\nSA8AAQ5uoam7pZKVwhUJCxQfICyjjoyY3CgkIRgTFR9Hxr6/r6KepUsqKThiNjxosJmCgICR\ntLnsHgcABhfKqayklI+cNxMNDxUbIEKil5mtPC0tJBsZHCU0SsCqoqCfp94wLDtJYNTHxpWA\ngIWkZb09EQIACy+usa2YjZCvGw0NDxMYKrCXlZ67RjQlGxgZHCU6y6qenJ2irstDNjYzNULD\nkoCAh52ppjgOAAIMHzI6r5SLkq8lGBUQDhIlvZycoqyx0CwcGBscHydLqpyanJ+uzj81Nysr\nL8OOgICMmZeaLwoABQ8bGh+uj4yZtj0xHw8NEh9OtaqmoKK4NSIhIB0bHz2uoqGcmqC/Pj9F\nLR8m44yAg4+Ti5IsCQYMDg0LGa2Sl6Cfn6wpExEXGhskRqmeoKiyxzsjHBweJTfIo52dpKmr\ns+o0Ky/amYiLk5GKkMIcFhUPCgkQJ1vjuJ+cpcNXST8lGh8tNS8/0cFRODdITjctPb+sra+s\npaessK2283a4pJqfpJ6ZnsE+OjQhGBccHh0eJzhLXsu5uMHIyfw9NTYvKCQrR9PZ57+ro6Wo\nq7C80PfoaU9XxLKztrSvr7zuQjs8Ozs+SO/HxfFIPTs2LisuO05m68e5tcFROjk+OzMyN07K\nu7Wxs7zDwcbTdOS9r66wsK6yvvU5KykrLTI+W8u8vctlRDo2NTU5QGHHtq+vuc5mTkY9Oz5F\nXc28trO0u8bZUT9AT/fQxr25t7zUUj4yKyotNUFb0r22uMhnRD8/Pj9Wy7u2s6+xv+5LPzw2\nMzU+YsW9vb+9vMPbZVhRaNXIv7y5vMh7RTYuLC83Oz5SzrzE701EREQ9O03Tvbmyr7K6ymRN\nR0RJWnPtxry/xMbO03RLPz5DSmTTv7zDy9thPzMyNz5ARl7Rwr/NeExHRkVLXdnFurSzu8LZ\nTDw4Oz4/SH7Atre5ury/zF1EQD9ATXLTxr68uLzdSjs3NDAzO0piaXdfUE5PTEpV3cm/uri4\nt7nJ/GVp9N5US1/UxMPHxc5tVUxBPD5DS0hO98rAwcXbWVNPQz9Fdd996fZnZ/7PrU4uazZu\nejzMuX/Ft862tsPTXubnXEhMVF/YxMMxR8s6Rz80c9JEvcdQyVlH5X9Y2+xf2Vvvz0944OLN\nyrfH1svW/lJIXsbef9FH6PxNaUtHQFNUUWhaycjPzurQ2s7ZWU9jellpW1pQU15HRUdYX1Zq\n08K9tL28v8nKcFhKXlxaZlbW0fj832Bk5E5HSkdSVv7P1+3EzV1nRD5FVVppWXJ6X9lcTVnx\nZe/Iw7+/x77YZXlYS1VcRkpFT+PPw7e5t7S9ubfO1cfRWkVFOz44NDU4OzdESFxhcGvaRGPl\nOfvvVtPVxcLFzMbJyczZ6uXe2fLQ3/fZ+NLLz+rQ1MHeUcPP9V9HP05OOjo9Z0k/UUhDRVxF\nPkVO3M27wsbIubzIvM3XvL7NwsLP2sDI4nNo9FE/Rk1LT0c8Tkg1Ly4xLS02OTlI9dFxyrbM\n0sjFucTLu7eopqSenZ6fp7nMSDc1LCsvNztANUguJCkgHx8hHicwOD9Vx76+xr6908i5vLSn\noJqXkZKam56u5TorKCUnLDE/SVhnPS8tJx0aGx0gJS49QFnk3s/HydO+xb+1uLm8s7Son6GX\nl5+dobC/QzEuKCcvLTNaW9rPXUo9LiYjHyEkKC4yOVhRPVNSSFtKZujLvb6+u6uhnpiUl5ue\nn6zNQjgvLC0qLT4cno8VERuU5RM1IxzIux8luzYl0sgmMe9vQbm/SM2vr8ennJuXlZufnqXJ\nXUo4KywuKTRITDxETDgvMC0qKiwuMDxBQ0BJRjo6O0lObsbCwbqws7+7rKWgn5yfoaivtsfz\nRDYuMUUwKDJX0Us5MS8tMi0pLDE1OEdPVGLo+UZJX1lFT9/ZzcC5uLKooJ+fn5+lq62zvNdg\nRjcsLzU2PT0/Pzw0LzAsKikiJCgtND5HTsu3tr/H2763y1XqycrHs6afnZydoaKpsLz/RzUr\nKi81ODA0OTo1NDgyMjozLTE0LjxHPz5XXO7nyu1vz+nV2OLuycC5rp+enZydnqGrtc5YRzos\nJjA4OzY5P0E7Ni8sLygoKystNj5GSU1Z3M/pZ8q3uLi3vLy7w2nUtq2no52doqSqr8hbSTUr\nKCUsMz01P1de3j00Li0oJyYlLD9BZcjJ0c7Fv7+zv9nIv7/i4c26t7Gro6KjoJ+msbva5Dou\nKykoLTM8PTxLQEE4MSYpKyYsKjE+WGDZ1MjHv8TLwrK6y766vLi1uMC+rKuprqWoqKmwv9NL\nMDwrJCUtNi8uNTQ/PjIuKzArKiw0Lzrn58q7tbWqq6uyuK66xbmxsb21tbu8vbi5vW5kyutf\nXUg/NCktLy4tKDZTVUp01F3x8Do3S1o+S29eyM3oYsWywtmyw72wxsK1s8fG399iU9G81MLf\n/bvOP07bSTgvNT1UTD07y7nTPktMPtZiPOnJPFxOSlbO0s7T18+5wdjA1l7S4UpWSXVCUdRu\nxba2tbfsT133aUA6QUhcSkL0u7HHzcvA0MpATNvGbj9USEA/LC42OD8+PFLXxuLMu7+9zc3J\nubnKvb24vdbJXURMP2DfXHzr0Nj3/N7OWklNPTM9PkNgW+jN2ltUY9bSUl9srM8fxLqhNFFa\nx8Xa8/O//0Vw0OZQe8fhzNa+0+v8QWNWSTk/+E5GP0NHQkFBTNpoWVi+ve64ubvDzdXLz9fP\n/l+/3FJlfOJxXOzt3tjm7dzrSO5NOlVPSUZWOTlXWG9TzmnK0eXHYt1uUd/jTFnNWWHG13je\nzdX32dnZ1sa/zcS4vtfJzetJSUdJPT89PVtGO0JASvxUU+fX5Wrqycfm79XbXvfe48bo2sDd\nzMjAxsjSz9b1U03i11/V19vtRUxNVD88OVFfRGpi4XNO49BbZtlwc1xOTE1dWkxPX1RN1MfK\nyr60tb27trTMzdPMwcn6T2F6Z0VDOjw1OkZBPU9HTPf5T0lfVOdfT0xK+tfWzs7R0MjOyczT\n2Mi+xNHN2cnO3NXN0cjP91pt3lpaRUM/NkM9MzpBT1M+U0dKylRNcMG2vr7JvbjJv+J33nzl\nddhP5M/MzNrRaVBOb/9rzVpLSn/4VnNVT0Z5Yll6T05LQlRWTFZL173O23LuzsHKdkrTx+ps\nXGTWydTyasy7zl7tzdTcSUXd1Mjd885aW+NqQkA5PTtFREQ/TM3Q2czDw73Fw0RUW+LqXWfa\ny8q93EnY3/d4V0lWatTI/VH0zL/OTVlc6upeSUtvXeBMQExIXedSRU5R3cJw1cnFvb65yf7O\nvu1OPU1CQXtXy8xZZOvBv9NRYdPwSDw+XmFMO0hk61hH8WDP6evm5szjyNrzxcvCysi/y2Bz\nXGbYPjw9XsvXWUnd7+ddXeLuxs1vT2Pj/0fo605qUu9j3N/UPU/pWdpETGpU1kJx39rH1L/L\n4N/UzWnhxlloTdixvLe5urtMKSQrKC1BP9ytvLm8x7zH01xuy/j5SkBk51c8UmPrX01jYchv\n0tPCwctdWeff1eJVeON230f00mnO0Xf/TkxKaGpNTmDoYF1Oc1zk7OvsXmHJ0tTGx9BNedTP\n7D7uWfPNZMzV+t7ox99s7E9oeWtU18PXZUfqxNtHRE5vRj8/Qj1PTU1XRuu+yMfY58rJ0snG\nyL7FvcHhW0/o1eTN0nNoTkxZTUdPS0hZS0U9S01dbWHj2uLl9djNY9Z92vtRzuzT5VBPVs/C\nwc/IvsHLZOHi0M9idUtc4WBEOkJNVVJPSkk/X3RsZE7Zxs/TaNnZxrfBts/T1e9tSe1q29Ra\n6MzbXz84PURqS0AzNjg8PEHsxMTdYkhL5t7cY82uqayzr6ifnJ+uzFVKQjIpL1HEw0cuKCYj\nIR4eJC4yLzEyNz9PXOjMyL21uLm3rZyIgIOUOyovOCAVFSCunZ/IPUtLMxoRFCVx3TYnKjQ2\nJhweLd/E1OHSt6mhq750UmrOmoGAhJ8fJC89HREWLZuZoVEuLCklGxUaMb2+OysmNSwlHyE0\nT8tQccavqLT+bMi3uM7Dn4GAg6wRHzTUHg4WNpKUpSwfLi8nFhYsrqC5KR8jMi0eHCRY0Uow\nNcGrr9BV06+prmpB2ZGAgI0mGD2/ShMQIKeSn1wnNkQnFQ4azp6kQSYpPjohHCNfvNAwLGm3\nvTwnOrSkrWpNRNTMlICAjT0n78U/FhcrpJan4DI8OR4RDhr4ra7Uxs83JxwhJjpKRD825szR\nWj1s2lV31Ke3ZytNi4CAlyIks7gsDRVHmJS8RjDXNhYMDSK9qq+orvEkGRkfPzzkSVXZ68FO\nOzBAtqy82sqvsz0jM4yAgJkXJKu7IQkYv5GXSTI8tjESDRRMqK5V2bbXKxYdKrCzVDMoYE9b\nNjbova3NP+jFskYoLqqHgIOjIy6vTBkOHqaYnz491c4qFRQeUby/ur/LNyciIi4xQzk5RV/Z\nWk47PEdfzlt/uaulvD4s0YeAhLQWW561GgopqZetJTe/ricODRc44TNYtpugLRsWXL3LNiVd\nTMc+Mjk8e9zcxritrelHNDW9hYCIsBupolcQCjazm0Eow6ewGw0SIko0JWuhlKsgHCurzCod\nKddKOy/gvHFaUtO628HNwsxCLiWlgICLOx+fqy0KD8mooSlBpZ5bEA0UJSseKKmXmaQ9KScq\nNh4uLsPDQ8rcuUMvQFrMP0TKs7F4Qju1g4CM5B2XnzwMDaysox4voJ/yDw8ZKSUcJ6+anU0s\nOsRZIyI4vt4zK1K01Tg2zbrIPla7ur3Byjs9rIaAjrMxnLAcDA+308YjxJufbhcYGyEbGjiq\nnZquQSsuQisvJjMxMl3PrGtAQfnbOTlJvq+sprF9Sq6FgJdAPZOrHgwfqUUtGq2cryMXJiIa\nEx7CoqCyXNNpTyslLTU/LknHusFYTPvlNjE4xqmvsa2zSj6lgYelzZ+OTBQM4j8dGCyWodsd\nNzgcDg8uzXhEopStLx9tTyEcOq99NzmkqE4tdLDSQkawr8m5tMVNxIiDnruqklwSDlvRGhkv\nl6tFKL1yGQ8XTjssQ6mj7S8+xzghJ0RjLzLGoa9ou6SmSjdpq7HGusLQ9j2nhpDDqJyeIhMs\nwhcSIKyoPEOppSUYGSkjGiLLn65QvKi6JSNCTCQl36at37CepUFCy7q/dsKswVn97pyJn6+e\npb4dHDYhDh4/vkFKrZ9CHiw3JRskSrtmpZ6xrb1iMyEjNSw176+trrC0v+5ORjVBW0lCUfu2\njoynoJeebyAvQxgZQsFMPbCfwig5Oh4XHiwxJT6qqbu6uM06MTg1LUm5ubesoqrKdN07Jilf\n5j5EttWwlZygmp+mzT1WLx8sPzQzWrezytBIJh0jJiEjNszKT8+vwU5ISjsyOm/KurGuv8G9\n+ld/e2ds4zk1SquYo5yRm6m210goIiooJ0PAwcPF0jsrJyUgISlDUDvBs8DP6NFQNzMyOT9f\ndOm1r7fDwbZPS+MuN1PZoJqdlJGaoKe8RykjIx8eJTA6XNbYaEI7NCkoLSwxPkvxx8G5v91e\nPzg3LzhZwr7BsLi2sb7d4ls+WtSlnKWXlqChpblGLywlHR4oKzFN9VhPSj86LCkqKTE+PU/L\nt7O/0dNZXXNHP2fOxMLhy7vU7mjkPzPRwaumn5eanp2outROMCwqKicpMTw/Rkk6NzksJSgp\nLC8778i/uL2/v9Ja8VhO6mDt0eTJvbjExr9GPlbNqcGemKWdnqu24+8/KCYqIi1EP01c/Uw+\nOS4kJyomLDtMysPJxMLCb0psTkr22srHw7Ozr7O2x+7pQGS7vaynqKSlp6u4zkstKiglKi83\nQEZYUEhNPi0uLCgtLztX2bO5y8fO0dNt99/8dmPWx8a3ur3M1Gxo8cOvvqajpqGnp6/E4z0s\nKigoLSwzNDo9NzQ1Myw2Ly9DQP3h0rvAtLC8vb7Ev3pp2Flp1dLJyu5MSTw5SWu9tamioqCi\npqu401c6Mi4pKS44Oj1BRUA6MSsvKis1NkVr1L+9t6+zvb/L3O5qfWVp0Mrh18zV2NNgVs7D\nvq+qqaqpp628y109NC4uMDE0NDk9NjI4Ni4wLzM9RFZ5yrm6vLW0ur3EzGtO3dhp2+zLy+XR\nSkJCPkjcx7CqrKKnrq+5wWpAODk0NTs5OTk6PUM7NzEyOzY2QFRVbsm/ubm5uL7K19727v76\n5tbR1dtfTUlJSERN88/AurWxsLOyuL7CztThaFJLRkZKQT05OTw6OT1DREZPUFRqcf1pWFxc\nXPbh4+TtalhXU1ZRTVBPXfPLvLKuraqnpqeorK+0u+JIPjo3NTMwMDAxMS8wMC8vNDg9TF3z\n1cnJysjEv8XP1tXZ3nZWUk9RXv7w3tHHxL+7t7CsrK6urq+yvNVbRjw8OzY0NTc0MTIxMTAv\nMjg+T/3c0dvYzMbJzMjEx9Hf3u5jWlVSSktXWWRr/Na/s62ppaOkp62yusnnUkE3MS8uLi4t\nLSssLjI1Oj9LXfjm2szDvsHL1MvIzcvXe2pj9+xUTF779PLv3My/urWwsK+trq+zur/L5lJF\nPzs0LywrKysrLS82Pktv0MvLysnO19/dzs/Q1NLOzNHkZVhUXE9KUWXv6M/Ev7u3sbG1tba2\nt7q+yN9hTz85MzEvLi8yNzxESkdMW3z4/e5qXF1VTlRjal5fYGz039zUz83Kw8K/u7u6vLu2\ntbS1urq7xtLl7mtLPDQwLy4tLzU6PEBMV15bWXn5Xk9LUFplb/PdzsrGx8zMx8XM2u/r5tfW\n2c7KxsC8ubi4uLq9wc/Z31hBOTY0MzI1Nzk9Pz4+P0NKT09MV2ZvbO3SysjLxsjLx8nKzNfY\nzszIwcHExcPExcTFxcXHyMzLy+BlT0I7NjExMzMxMTU4PEVQbOrq4drl49fOysfGw729vsDF\nwMLRZVNSWm1hXnHez83W39DKztfX09PY393jYk5MRj88Nzc4OTo+S13/2tjV1tDKx8fEwMPH\nxs7d7O3saV1bWl9oYFhVW2FsfW5y79/Uz9Lb2tbU0Nt88dbV5HRWTUhEPz5ARk1ZXFxdc9rU\n1tfU0Nnj/eHOycrP1tzo5Nzf/VxcXl5WU1teXFz43M3Nzs3Z6eDnenJgc21OSUtTTUpKUF9e\na3zg1dnX2d3c5dXa7e526uJ9ZGXt6OJ5cGRdZnt2dePW1dna3uTaztDUzs3L0/RdUUY/Pzw9\nQU5eVk9dfvlvaXrp3tvYzMfMy8nM2fr57N/1XVVUUVJf+u3q3dbT1+jj3Nnj+OnP0Nvd7HNh\nVlVPR0dJQz89P0tRW3zd0svIwsLJz8/Pysvd3dnb519RVV5bXFpYanJpaW1sbfl4evXt5uTa\n0trg297f/m5tbG1cV1tdX1hNTU5QTVJq3tTX0s/Kzd7n1uBz6trbcVlbWWNqaXLn7HXt6fR8\ndG5249bZ6+ve3tvtenlnXFBNS0hMWmRhX/ve3djX29rf6uzx9OTh8fd5Y/Pv8XlzbmllX1xc\nZmh55urr5NrT3t/d3tzg8n1iWllgY1106O32a2Fx7NzS6mVqa2zy621jaXn+bnNzfvPo7Gpb\naHRYTUxPUlVUWmRq3c3MzcrBvLq7vbu8vsPM7m1gTUU/PTw7Ojo8P0VKTFJdbe/Yys3T4nf+\n/HZnXFtfbOfh3M/MxcLGyMnJzs/Y3NbOys7daFxUS0hDQEhRVlhWW3JuYFVZdu97dnF57eff\n+Hr+8Pzu7P7r5+9sXFldXm1oaWJk9Ofh4NbJxcTRWmG7qc4+4LxmPT5jQTg5Y2BCS2ZQTW9a\nSl3M2urT3PnPvsfJxs3e4ONsWXbj8HZmWlx65eT35OD2aGhaTlZWVVdZWlVfblxe993P0918\n/9/X1uHf39XO1dz1bGNXT1VeX3Xv6fFz7tnc6Orl3+/4XlJVWV1eWltt7Of1/fT73tzwb2Jo\nYlhgYVhj8dzT2drU1Nja2tXPzM3efHz992pYUE1TV01IS1Zm9ef28uLf4+Hm3tva3GpeV1pf\nZHz+59XS2/f75vbwdF5iZ352beza1NHPzdTe71xPS0lQXVtQUHDNa0FV1OZj6MvJ293Mxs7e\n3HFUXl9PSldfbuDtamVyaVhWXV//5vdsfenq3NPUz8vM0eTvcVxYXV9sdGZjZnFsanh8ZVdP\nU3bd2N7i73/x5uR1Xl956ufo7trU3Otra1tldWBdWFxkYmR269/g9PTo5NfOzdPX2djqaVdT\nYnFuZWvz7e5vVU1NWXx7bmBeZVxbV1v04+58fuPY1dPW2NbO0tvd4OXl3NfV4XltbmZZUEtO\nV1peW1pXV1dOUvje29rY2+Li3uTx4uvu5eLd29bhZlpcXWFeXV1dX/bd3Nzc2+VtbWZZXV5d\nX2R1697Xz83Q3d70Z15WV1lbXGLw3Nra3N/v3tPc+FpPTk9OT13728zIzdLW3Od3XlBOVF1Y\nV2bj1tbZ5/b7XlhTTk9Xb/d87uTYzdDY29PS09Hf6fZraltRVGbg2t/0bGRdVFZdVlRWWFhX\naujf3OXh2tbffmJe/efh3uzo8Xb39fnd2tji6/5rY2FnX1pYZXteWFxy7fB4Z23o2NDW6PP2\ncl9WUVhcW2N849bOzc7O2+r7bWJZYGn9e1xaW2F27/Pt19XY2+9pY3XwfW90enxmbPLy/25r\nZXRsWVFSaHzw3NPY43p2/e7c0M/V3v3s5+n47eH5ZE5LTE9YW1dbbdzQ0M/Y19nZ3Pbs7+1s\nUVNZY25fV1FacuPa7npu9d37YXbc1tXQ1NbRzM/nZWZmXVlWU1dqdmtaVldVRjHcpdg2b7fM\nYG3gZk1RXG1WT2rm7c/J/WzR0d7U1N3Wy93u52pPR0lNTk9ZX1xlW1Fi6NrSz+V55OLucXXb\n33ZuY2by0s3S3OTl+GVdVlFUW37t7+zo53xydP/i3N/b6uztfXdpV0xLSktPUVti8NTPzczK\nzdrodXHx3+1gVVdjb/Lj3+DdzsvP3u70aFpVUVpubWtRS1Z66vD67+Xn8GxmaOjY4ubp6+jk\n4O1ybGFaVlhZVltjaWBx6d3V3Obq2M7Oz9LX4fDp7G5rcV1UUU5NSlNdVFNdc+HPysrNzdnu\n/nn37vVpYlxi8ftxY1tmbmFfZ3H++vN5Znbz7Ovu9+3p6Otqa+7f6m/u2dnY3fRrXmFdZnBw\n/ejh8X7ueXP76ujp5+5iWE9VWmZ5eHdpe+fg3Nrd6evqdWlaWWPx7XJ57e78ZWB8+ebh4eHh\n29vsc37o8fp7XVtm7O9nU1Vaae36/urf3uFsYP/n2tvk3dba4vVnXV1bY1lPV1xfZfLs6Nbb\n6PdaUVZeZWtqbP7b087S1M7Q5Xd7evn5dmpibvt6ZmRcYW38elVUYm5vd3Pp1crK09vj5uj8\nZVhUU1xaUVjx29Ta6X1lYWNrZGd56N7Y1Nvi3O5sYFxtbWFldGtpe+Li3tzj2dXc3eXr7WhZ\nUVlbWmVVWHDu4etmXWluee1+/uPj39fX3+Ti4XReaOXd5ujs5dze6nhv+vDu8nF4/XJmUEU/\nQ0pMTU5h7d7a0M/TzszP1tTUz8/c/l5k/t99Zm1lbXzucWhpXlxUWGRfX/19bXLjzcza+Gpd\nZHl5cWluZ1NQU1f63N5uX/Td2Nrr5dbZ2+x+d2lhX3By3dPV2en0/evk/VpPUVphY2v34+v7\ncHZkZf1mWVNfdHn3/35mYvvk2dTS0dPd7fjf2NXS2eR+cmlbTUtMUGX7fWZt9HJtYl12ce3s\n+Hv84uHqbGdtb2tv+O3c3eXg3tzTzNTnZFldbuzu+mlu6fhbU1FPUVhTWWpuefDw39TS3eX+\nbenl3+hpXmnt4t/s5tnP1+9rXnRoXFhWY/7c3Nvc4uL5/F9STU1NTlJk2M3KzdrmbXloW1hl\na3Zua9/TzM3Q2f1xbnNqY253al9iY/3h3ejn5nxqXl5UU1BXaGtvXWd67tzZ0NTi3OR6dWN4\n39Xc6tze4e3n7vl3YmBSUFdYXGJ4+ufP0OJrZ/ne2+Tt7HtwYFBKTV5p//797eHb3u7/29Xa\n6HNw/+Xs8X1bZH1+ZU5VcOfpb2Be9+nd3ere2tnh+ltYX15ma/ff3dzb7G546uPsfV5n7eff\n7Oji2d/2XVFaXV9bVlZOTk9QWGb89Ovq19DOy87O0dLMz9fo7ubX1/J5WU9PS0tKVl5vck9O\nWl9ofezg3dTPzMvNzNHWbVNPTU9TXHz/efr/fXX28ODZ3+Hp3tzc5HZpZHF6Y15fY2xsYml4\nb2ZdYGRk/NfT2dvc3ujt5ubi4eXzZmz6dWZUTlZx39bS3eXm5/1hZV5ZVU5OS01befLu6fLe\n239ufPLVy8nM09bU0t3k5eLuYFFMS05OT1RWX29+4+Df1c7Ly9jy7ulzYV5dW2V4WUtKUl1a\nVlpj5dPR2djPx8fL0+Lxe3xvYVhVVltYYvvw9mRiX3ji2+Rrbfbz5u929+vv/n5lYV9dZ3bp\n29zleF9neP3t3tLX7HNrbXhtbG9pa2hbW2B26ez0dvLf2txyXGL46nxx8urg6vZxZGZxcF5a\nXWz273r56Orf3+Ll2NDW33p0ePH7WE5LTU5NVWV46Nrb2NXO0tXe39vi3djY7mJfXVxaVFte\nV1BOTlZgc+54Z3nl2M/MzM7R19va5Xf6/WxdYGR4fltVV1U3O9jo0Ezfwbu8znNf6M/oYlVa\n5+XN3VZQX2pdT1Rt7eF8amFl8v1+Zl916efs8uvb1Nnq9Xp44+zy6nd/+HFjW2l5fm1safvm\nemRYa+jg9V5gb+/1c+3Zz87d7fXp6m9bVl1o+XxmXV/p7X9u/NPO0uhmWVtoal5dXWL19Xvz\n4tfY6XJkW1ttb2Bh7NvX0NHS1uDoaltkX11dY3bn2N/e7F9TWWl+c2ddW3F5dGny29zj5+vq\n4ud9W2L98Oh+6e9x7N7b2+PucmFeWF5w49vkYFpncWRga375ZmVu+9zW1NLY2+5mXWprWVFT\nXW5iXmR739nT1N7j3+//7fr+fHbl5Xh6enlsWlRVYGlr6tvk+2phc+3d+l1i/N7f+X7z9Org\n8WdYVmXi3vjw493jeF1ecvXe5e7j5OT47+RvYFhOTUxTbeDY393b2NvyX3Dg19Pi9Onj8XBg\ne/tjW1hcUlzo3d359eP6YldaXFhjYmz6+t7S0NHb5dzV2vdp6eTb51xVVXhwXmbt9nFhWmJP\nVO/Z7Ftf5uLl+tnQ9HLsd2BOWfP85+XQyNvi+vfhX2plbVlGTVheXVxt4Pz5z83ZYGjd5WBP\nd9HO2eXUyN1fZ+9qVFh+8WBVWH3yb1/n1etZS1ZaVl1ja+vc0+7o09zV1dfeX+rUfnL9fmVb\n5OhxX3fN1HNZWG1fS1JbYlpk/3L67snE0vp0+ttcTF7t22l0ztn+a9zPXUtX7uF48NriZlxw\n2F9Tcdv+S03jy9dcXtTgc2Xdzeh19uv3Xlje3HlaV2NeTVdjdPxW3M7m29HEx1tS79rcXl7u\n7FtZ3czOXFd4/k49SN/7X3rdzOJfZmtbT2bj8+ly3Nzl2tnMzeTZ1NTvSlDxb1RU7u7wWVnr\n+33+YFFRWWt0bfna1td1+dfQ1+Xf2e9KWdbcXkxj3GhNTlHf4/7N4+Xa08n9TlZa7N5v8u/m\n9Fh7VFBfXdR5/9rw1vXW2HZlaVljZu/S3M7+Zc/d01xMWk1jV1F4XNvnT9zr8eZry9NXXtDL\n+Uh22ORQSuzzVmTb23FZ0cvafHdv4HFnd1ricU5Xft1iTvje+FlV1thjXN7CzuXg5W1LR25g\nVlNX6vHOycvI3eLZ4elZ6dFiQkBXZExN5XFW9Gfbc3zK0eri1MraX97T2F5H+H1QSURr11JW\nUL7EZtj5ydNa1OZqXlfM0VV16d1UR1pUT09s6ndf4fNeaubNzWXEv9bg5MXWSlt440k7VVJE\nQV/LyXpZ2c/Qa1XLydD0bWV829peVOLaelJG4nZT6E92TkrTa9t0Tb3SfnLhxfdK38PMQUbN\n31hGzcdnYV9rX1Jx6+z8Z31n3u/r1s7O0d/rX2p1Vmb7XF1i30tObVdeSVLSaOvqzMxX39Dd\naE12ztngUGXG2Vrx5+NZW8T8Rlv112JQzMvTfXZpRltPXdhb69vV19zU+uzmdE3q1GxrW+zg\nSkdV/HBeZOBi7s3Y927ZzlNga3fwdM7s78LY3U7s2UtMYsxhT271W19X6V/xxOlf2uDR2PPP\n3fP7+khJXWvdWGNXU/dlXNnPytZkztJ2dODZ3k3yY0JOVGVeXMzPaG3U3UdC9GdyRczF5svL\nu/FczNp+Q1fMTUTa2mVGcsdYSfvJyFHe1uNQRNHsXVNPZ2DoU2Nk1tNeWtDlaOxnyNtpz2Tb\n63XeWuTY60r419xvUtJ4VNfm7Fhj1vP16HptT09eeV1OTevQR23f2dJa0slRau3J61bW9uHc\nz9pIZM1ZU1nW1mbOzdxY4s9rWEtSTFJj5XVa3d7rT1HV7FZxTFB7eb/z+L7Nu+Vlz1HOUT1M\nQ+LgP2pY2ctp48/q3nDe4E5mW37YXVvPXG/O9dR76dFe2fR46HP6U1VeTV5+zdxP391T58hU\nSmLY8EhWwWVRW99cVNXN91fAzt997MrtXk3wdVZhUt1qSu5zx81U3u/I/1HW5dFVVOLxT01/\n3ndV/cZ8Z1zK80JUVNLQ7lVu3dfXVczUd9lP51Xu73nsTe9PXfFv9HH73vjWy8nLU8zqWl9F\nfElI/u5YStvsYvLaz+fpv29dWeReS9Da21jTwGNnduJqTPfsUU7da1ZRatRPT9hZYVjg1lbN\nzd7r7MlXatXa1kPO2E77W+BPY9Xf91hV9M3ba97aXkta3lxFWsnRVW3R0lBX7F1eZ9Hj4t3Y\n0e3HymBV6WRHSU5LVWlbzufNzXXCy1n+1dtEQ25dWFTIvfnPwcvlRPZ7TPRMTEtTxGN6/1/C\nTM7KO2Zt7lY+zm1k99DCROjdatLmxtfTvL/qVtreOz5HfFxLydhZYk9lZVVjSVlQXedO2GzM\nw9zZz73JVtvJ8tfV2FxB1Fk9T2TgVkvRdUhh5NtbTM1QTmpOzubUze7laGJ73cjNY8vM+N5f\nWmJ1235NeO9qUk7gT2Da6N14atJp3tPwWXPZc1/0a9fYV9ZVbs9d4FJHZ9v332VnfF1w9FBc\n0Hhyas7TTOXY4nVpztLjyuH0ft/mWVx+WVVR8FBJ0NhUa93Q7/jE32XY6t5+bWxfS2lSTldN\n31VaYUzz0+/acc/I2cnQ4M7Z0fdKWVpcbW5qX1H3ZHVeW9FbdOnq23TZxuzSfEhXcFVYS25o\nSfvlVG/V2M3eyuRf1nthX3jP1dPb3dBf33hoeEhWVEJRUWLi52ppz875bd1sX9nLcV3f4Vdu\nymBbzNRyTfd2SUbP0krexdDtY9fpZe7YXVdUXm1R2N5r5t7sU1t61mlX8nVfXWB403Lq7tzm\nTVPU1Gns2edg09bY1c/B53bNdllKXng/RVT4UE/+XFh80+1PTfHtZmHifMvN1tlkz9vf3WXl\n5ePZWVhmW/zu2u5u3ezjcWBgV1BOU13w6N9U/OXj7GDnbGvd7OHPeOTe1+Bd3djYa9nUYF3f\n3mRhX19SUedZRVBsbUZs0eDs7cTXXdvZzexg5lvl3X7oUt/jTWFnWmlWzND1zM7D1VnjX0tX\nWGtPS93sZ1xv7WZl7PRbaO137/TZ0M/Iz+pZW19WT3zvanp+zNl43O73X1FkWFjl6PX3cODm\nX2xpdeVe7nZe2tHx7FZo/lPqaFzk4exsWeLO0djh7+zk3lVMUl1qZ2RvU1PrfWZndM/L2ddr\n38rg3HVvdVXtfVVf/9/rX/jl59vL32X+3d9dZWFNR09iUU5YbFxy2dfpzs7S3PnY4e7c6mRT\nVehXUXlm/Vbk2Vlf5s3bbePPy8fGzNpqaPVRSU1WV0tJV2Pg3eTuWFFcW2378ed02tHee2jc\n1uLc3uHt6+JvW/TncGhw6X963ep1XGR3ZW1lXm/f2uX6b2z8fV1YYPPa29nT2ODtbl5s49t4\nXVpdX3PvXU1NZnhRT2t76Ovk52jhxsDS1dHU1tnO6VheXU1HSFFQS1FdWGTk1NTh0cfLy8zS\n325oWldcWVheWmZxX29qZmhWVlhZf9zY1dTNzdTb6NjW4HhaWl9fX1xcXl5o9m1kfOLfdm7u\n4dzc5+rw4dvtY1hbY/Hc2PNafezsYFzo72v3+mRVV2prXFlk+O/y5+N66NTa3tzQzdrf497Y\n2tTqVExOVFBJSlRn6+H7c2pvcXVlZXzdzs7Pz83Mz9v+WVNaV0xOVltiYlZOTVtxb25v7tjP\nzdDSzc3O2u3z6vLz7vHs5u5sWFBPUFFSWlpbZHF5eXNv8eDh5Ork3djU1+Th3N/oaVhaW1dY\nU1Nl8eDk63Vw2Nbh4uTr593e9W1wful6X1xYW2n19+jX0d/3e37zaVtVUFtv//R3/vDo6PLp\n5OTxb2Zhamxw9/Hr4+T8a3P/f+ry7PZ87enY1dTZ4OxpWE9NTk9UWVFTXurb7frv4dfT19zZ\n2drgemZm9O50XFlp6uz+eXVu9eRvW15r+XtoWVFaaHhwdvDf4evu4eH+fHNv+eDZ3trY187N\n0ud9Z15ZUk9PWGd99GpaXWB2eG1tbvL06+r77NzV0dba4e92YVlabPr3Z11UUF/w6eXd0M/a\n5PD1cvrucFtbYWVpZP3h1M3a/Hh3fW5xbGFnYV5cW15r8vP16uTez8nO33FfWVZVWV9u8u7o\nc2x4aWpzcHbr3d7s8vf15d/t7ODr5nhfXFt1+mBTVVVg++ng3NHV3e1y7eLq7ujs69va7VtS\nWFZPSk1RWGv86drW1s7X4+ru3NfW5fF8a3X5f2FpfPLe3NrS0truW1RZYV1RTUpMT1pgbn52\n6vrc1NTKx8nP2N3d3etuZ1tWWl1eWFRVU1RWZ//c0dLU29rX0tl8V1JVXGppbHf7bWpoZvTv\neP7t5+La1Nrm597a3OdyYFtVUU9MTldl8PV/6u3/dHH339zi4uPe0tXd39/c9WRbUEdLWWRl\nWWjd19vZ1t35+ePr/t3Qz9l1WU9UXl9fW1pXX/jm3dXW2+bu8PVnXltOTFni0Nnl5NvW3ufv\n53hlWFJdYvDb7vB2bPTq2OFuevltWU5UbPne0c3O39/f3OJuX2FjWlhaY3RsdeHjfO/9Z2NZ\nYm15ZV1lXmXd2/rs0cPK3d3g91haYVtfaHBmWVxoam7p/2977ep5fuvg2tzkX1/9dWNgc2tt\nZ+/c3vf15/Zlae7vX15nauPV0NLoYV9sfXj4aWR49n1fW231W1ZfeHNl9tvb5NjN1O127+Zo\nXVtlanrya2Vqa+jO2fVs0snZXVhsblhTXexwWGXd2/no3eRkaXfe5+ZwXWBgTUdUWmVl+9nT\n5fzQxs/a3tXT1NTK2mpOS1lPTE5ZaHZdfdnPy9tgYl5RVk9PXF955NXMz9jPy9ZyaXd9XFRR\nXFZPTFT55nbs5Pvz687S5OTT4OTxYfD8X+rbde7n3txc5crpTPXc9VNKX2hVVVBBSExJTENC\nQEf3xL/FvLy+0NjGv767s7O/wb3RTz1VytJ00b/aOyooJR4aHiotLk29v/DcubDAbMqqo56b\nko+fvlNeLSIfS8C9xri42jYsMCgkIigtOz81Mz1BNjA4VltN8tVJSsKutMfosaejmJOQlaCw\nXikbHSQzONe1qLpMMC4pICYuTlps38BRNzIwNjcyMz4/PzQ86NVAN7qsyUSrmJebjoqYsjxL\nHxgXPt++vKenuzckLiUhJEdbTUhPUTUuKCwsOTAvMTxQTkRKvbrZ06qitlymlpOMi5ifwzQX\nEhAjKjm5nZ2qvT5AHhcbMjQ43a6sYTItLx8fJywuLj9owLGuYETPQt2vqa6Zj4iCkqWtWxYO\nDhk1L7mdk6e0OC0ZFRYfLjHOrKd2RTMuJB0fKS8tSs6usdNG89rFPTXGqpiOgICNmZ+0EgcH\nFx0f7pSMmaTeQRQMCxYdJ9mem67SPjEcFRYfKio/rJucqr++1DEzRWdenYmBgIyPmMINBgYM\nERfelYuVl6bMGAwKERgcZZqRnKi5Th4SEBYaGyu6oJ2ana9NJCUsKCe6jYOAgImLmiQJBgUJ\nCx6ujo6OjpfjFQwJCwsVQZ6Yl5edwiIVEA8OEyVyrJqSkpzPLSwsGhcnm4eBgIKCi6IbDQcF\nBAoby5uVjIySsDAYDggHDBzvt5+WlJ66OCcaDw8XIza7oZOTnrm8zjEbGrKNh4mKgYOPOhwU\nDQIBCRosTaKPipCdtGQdDAkMFRog35yWm6CkrTgbFRgYGSa8oKaom5WjRiY8m46WpI6GiZ/T\n+zwVBwYOFxcezZeSmaGgqDUVEBYcGRgstaq0sKWpWyYmLyoiKNWrsL2sn64zJjegjpKdjoSG\nlrPgTx0KBAoTFRgprpuapqqmtzAfICkqHR44v94/TMzJQS48zctly62msvxszVItLDnNnZGV\nmI+Mj5+8RzUgEg4TGx4hLtGsrLu/t71ELy82MCkpMj86MjVMakg+eMK9xb61usXewb9iODRD\nvKGbnJqSjpGcrcRLJBYRFBoeIi5Zxb/K0/RFNDhwyftO5dBYNSooKSgnLkrjy7Gnp6277vdY\nPTcwN8yfl5WZlJCTnrlkSjQfGRkeIyMjLURoaGXBs7bMfk4yJh8eHh4gJzNauqypp6aots5k\nTlN5UFdsw6CUkpmalpactko+OSIXExcbHB0mQcS7uq6mp7PcQjEnHx0fIigtO0/hxby2tLfB\nxcrd2MjUXe+qlI2SmZOOlK8zKCgbDwwQGyEoQ62dnqmsrMMuHx4gHRseLEFBQ+2/wvtNUVxs\nam/ew7Gyv8+0l4mKk5GMjJ8vHBoUCwcLGS9fvKCVlaLGWjgfExAXHyQrWaukq8HeSSwfHyg5\nTNa+rqKeq9ytkYqMlZCLjaknGxwVCwkPJj9Vx6GZn9stKiQWDhIgOkvLo5mdsNlNLR0YHSs9\nZ7alo6OouEqymY2Ol5KOj6kwHx8ZDw4XNdK8uamktjAfHx0UERgrV8+5pqGs4jw4KyEgLXW8\nvbuwqrD2M22dkIiOj42Ony4cFRkREhtrqKShoqbZIxUUFhISGzLJsq6opL0xJScmIyg9taOj\no6m0uGUgHM6Yi4iNiomRRBcPEA8MFD2bmZiZm68nEg4QDw4WLr6uq6KerTMiIiIfJUS0pp6d\noLBXOiYaKaqOgoiLiYynGAwLEA0QJZ2PkpacpTQUDA4QDxQstaqyr6izLx0cICMlPq2dnJ6j\nqzojISQ1r5OEgYmLkZ8eDQgOExgtpo+QlKOyNhcNDRMWHC+4pqy5vtcnGRgfKjLsqp2ep6y+\nLx0iJjKqj4KCiYyQohwNChEXHDudjo+XqMEqEwwOFhgeOa+nud1YPyEYGB8sOs+rn56mruEs\nHyAky5mIgIWIjZNJEQsMFBAfx5GPk5yq+BoNCxAXHCjDoKSvv8Y8HRcaIigyZ62gorHkOjEo\nIB61j4OAiYiNmB8ODA8SDyiqj5OWnaY/Fg8PFhcbN6ugr7a71ikYGB8mJDW+p6Stt2M2KSQd\nJK+QhYCIhouWKBENDhAOLa2QlpSdpUMXDw8WExkutaeyr6+3LBwcHyEfLHuuqqqvvj0mJB4d\na5WGgIiFiY5TFxAQFgweUpWamZ6htx0TDxYSFR9Lq7OysKphJB4iJx8kNrmpq7e6ajUsJyFI\nmYmDjIqLjasdGRIdDxskqZ2kpbmrPikZGhsaHiI9VdbM0NFGOTEwNDVDdcG6vcxCOkVRPDev\nlo2OlpOUlq80IiQ2LS4pScK59zMyPU9CLiw1RDsqJSQqKistOfXFu7i4u8DiQS8oKCw5Trad\nk5Kam52dqshNSb63uMnOyM1PLyYmKzM0NzxMXEIvJSAgISIoNVTPvrvD1008NC4uMTpqqpqV\nlpiVlpiksMC3rrLHYWVzRC4iHR4gJSouNkv+SjUrKCgrKi05S9jAvL/NVkA3Li4yQeWun5qa\nm5iXmaCps7Gsrr9uT1NJOCghJCcpLS0vN0A4LSclJiksMj5Z1726wM5dQzgzMTk/WLeim52e\nm5mZnqasq6mtv1FAPjkvKSYnKSwxNTpAVEo4KyQkJigsMTtIbtPqYE5LSkU/RlnbtaCanJ6c\nmpmep62sqq6/Tjw6Ny0nIyQoLDQ3Oj9EQjsxKysuMjU8SV3YzmxLQEE6NzY5SF/TsaOfoqGd\nmpqgpqqnqK/HVUNJPjAsLC0uMjg0MC8vNDErKS46QUpJUVxeTDo0ODw8OTdHberCqZ2cpKGd\nmpqjqKyorLlWOzw/PDUyMC8vMTk4Mi4vLy4vLC45Tl9r5+V/SDw5PT83MDA4VEQ8vp6VmZ6a\nl5aftOXrz3M5LjJLw8faad/UfT8sJigqKCIkLDlFPTs/PjQrKC03R0hGPkrPfkqykouOmZOP\nj6E/KzA1HhofTq+w0NC5vDYfHSMfGh0oSW7ewLKz0TsvKyUhIz3Gwu1zwrFYLTiajo2XlYqQ\nnyg5NCUTFDPOv0K0pKs1ISs2JxkcPdNEOcCqvTQwPy4eHS5i9t+8tmk0VT4nIKmNiZKUho6d\nHjUsHw0T1L2vR5ubqiciNSUaESVZTj3Npq9eLDo0IRsfODxCy6iryC04OikesJCLiZaDjpcj\nLx8XDw+7PKdplJyrKyQ7GxsSKTlGQb2mwd01RCwdHCM5L1C4prTFPXUyICGskIyLkYOQnCY6\nHxcNFNc3uMyUn7MqNS8ZGRgtNUF8rqe4xzxHKh8dIy8xV8SvvGtHPisgMJ6NjI6MhJKmJT4Z\nEgsfOkXLqJSnyypKIhsYHSwuQsaqsLbDekIjISMnKkTCsL6+1e4yHh7CmYyTkYWNmC12Jh0K\nGS5ETL+Vm6cwyyweFBgeJCc/r7a1wL3eMiQlJiEsba+xusO62ioh7JqUj5mIjZbI1DocDw4p\nIDw4nZ+h89PvKx8aICApK9i4t7i8wEEuJyspKjzPu8Ppu783LMGdl5ebjJCXv7w9KRUWJSc0\nO6Wko8/AUjAfHR8iJCU667/Qz8XUQi8wNjM0/bq8zbevyDfQo52fpJSUmK+wyUYfGyElJiFB\nzLHMztXZOiopLTIwOE3ZWUtV29tMRFXa5ubVvsXcXks5NTxMyLaqoZ2cnqCmrsZRPDkyMThI\nT04/PT06ODc7PUNLYFFBNS8vMS4uN0to5c3Gw9ZvSU1P672soZyZmZibn6q8WzYuKCkuPUpO\nQjs3Ly0tMDMxMjg7Ojc5PDo7Nz1GdM2+t7S4xdlpeeTEsqScmZiam6CpvWw5LiglJSowNjo8\nOjEtLC0sLC42PklKTl3h3mddcdvJwb65u8ngYEVJaMGxpZ6bmpudpKzHVTgtKCcpLTI2OTs8\nNS4tLCwtMz5OU1RLS0Y+OjxIWd7Euba5vL3J6t6+s6qfnJudnqCms9JTOi0nJicsLjE2Ojcw\nLzAyMDE0QU1MREZCPDY0O0de2by2srW0uMPk2ryuqJ+bm5udn6eyz0w5KSQlJyktMTc/PDc0\nNTIvLS4zNDMvLy8vMjZG3MKzrKqqrKussLe9u7GsqKGdnp6jrLpsOjYvKSYmKSosKy80MC0v\nMjM0OEZLQzk6Pz5BSWzPvrqyra2vsLW6vcO9t7e3rqqqqqmstcPY3/hKOzw2Ly4uMDEvLi8y\nLy0uMTMxLzE0NztFXcq5sq6sqqmpqq62trKzt7m5uby+v8PSYl54VkE/PTs2Ly4yNjY5Pj8/\nRU5XT0lNXVtLVmve0tPEvrzBwL++xsvLyMTKxsbTybyzPDxDR7472ltYxlzHTU9iQU0+Pj9A\nTUxYVlnf183Kz8nP4Nvp3m50zc9mYH7RzevNztViYWpUU1RNXFRNVG5nTElWYe5eW9lfbO9m\nzdS4naEu3zYwwSK8bzKxbbjB0bRP3XFD5jdCTz1jTEPbQV/iTnb7WczaR8xC5FxGyD282Eer\nU/CpcaO5Lqg05rUkrDUspSKvUCukJ93gObk1yj1GOWruQ70wtV5Wvl3IQLna7E++1jOsP7p1\n86hqs74oOa80rTfyykfTzVc/tTCvMk23KbAsYrEl3kFxYztGv9M3sS7HvTzDRrTeTM+vyMW0\nQKU5v8TJrjO1NsxFQtdEdinHzCa6SiycG7jZGJUTo94fmxmeWTavLbbRL6lP37IvmynJqS2a\nMT+cGps+OJkur04aWj8fqSO9wCKfN7FOPrgeriPNvi25NsPT20mzSHG8K6baP57Jp90ktFyw\nQy6nTjuzO8a6KLY2wiXR0TKgHacwRsElriHETMRLRKgmnCHKtj+5LLNLujy8P6RGUqEmny/s\nxTKjIqXXPKwrqy7ZQDizKcIvz8omtDNYxianP+StKqAwzb8mqyvuuy62OG7CdNHFWq1meKw0\noju2wlasJr1DQ9A30Err9ltHU0NBNUJLVVnu8d+/TdfSb9o8wVpqvz653ry/VrBTxcdnvEO8\nT8zGPshUxzhSVEHOLW5KWUg1ulFX6lDKxWLe42TtP9FQSck9w1hO0F+zSsbP0rLuucLBuF+9\nw0rVNUphONw8TdhDVjs+PkhDTFJJYEbOU1rV1LtlyNXRwNm5wLq/2cPq0tpr0P7Uz8zJ0sHK\nXlxJPDQuLCwxMDM1PktD+ujY437U0MrOtra0rK2prauss7TAyczHz+dbUU46MSorKSkrKSoo\nKi0tMzA4OEFEStzPqqKjnZyalZmeoqmuzEs4Ly8xMDxr2sreT0MuJhsZHB0hISYyPk/hy9jR\n2eTZ1ciun56ZlZaXnKGsuMVsRzYxMTc2P1BPalVJOC8nHiEjIyQlKCsuLzU8P0hST118xqee\nnJqal5ianaKkqbfJ/kVCNjEzNzozNTU2MywmJSkoJiMjIyYnKi43RlDg3eDDtqCbnJ6blpeY\nn6CkqrXoQzs2NC0uMTw/Ojc0MywnKCgnJyUlKCosLjU+TnF+fenStqSipJ6cmJebnp+mqbfL\nbkA9PDM3Nz5CPjgyLysrKyknJCgnKSgpKy42PkNCTW3Mvq2lpJ6cmJaWmZufpK3A/D0zMCko\nKzM9QD89Ozc1LywqKSkoJiYrLjE1OT8+QURQab+sqaKfm5aWlpqeo6ewvV1FPDQvLi83Nzk3\nODk1Ly0rLSooJSYqLC8tMDs/S0lMXd20qaehn5mUlJacoaeqtNRANzQwLy8zQkFANTAuKign\nJykqLSstMDM1NztDT11NTlfnuqWioZ6clpiZoaesr7j0PjQ2ODMzOf/S6U5EPy8pHxweIScq\nKiwuNTY5PkRISUVBRmmmlI+Oko6PkaV2PSw5HiAeN9fFv8yztMNAKyYgHBkaHiYxN0VORDgu\nLjc9MjI70L6xpY+IhoyPjpejIBwSHBQWHD6mo6KtqK9rJhsZGBgaITfZu7GvtFQsIyEfIyo2\n0720r6ufjoiKlpWWnFIbFRogGR8trJ+gra+s0y0eGxwbHCA63cvFwcdDJBwdHx8pQcyyr6+s\nraKPiIuVlJSaUBoWHSAWHC+ooaKuqanLLR8cHBkbHzI/TdfC2DUhHB0eICtJw6+orKmmoJGI\niJKWlZm4HhYbJBsdKralpbW+vlAoHhobGxwfN9zUzs/hOyYcHiEnLmS6sKinpqutmouIj5mV\nmKgkGBkhGhgha6emrrOquTcgISEfHSAydnXlv8dJKR4cHx4fL+jEyK2ppK+vlouKlJeTlqgk\nHh0qGhojzKWqs7arvTokISIbGRwpNjlGz75bLyIiJiIiL+zGua+moaqllYuLkpiUmKcoHhsj\nGBkdQbivsbGsvlIvKSUfHR0mLzxezLvAbS8lIiAhJzVm3LWrq66vopOOj5mVlpi2NCMnJRwc\nI0fSvse1rbLKQy4lHhoZHSUvP/fHydw+MzEvND5Xb9O+tri1uq+dmZedm5mbosvjPUMuJyYn\nMDRCQ01sZ29COTAyNTQ1OklOQDg3OTczNDtFWmFm7ODr+Ozky7yzrKiinpuanJ+hpau45U1A\nNS4sLCwrKikrMTU1NjQwLSsoJygsMDg7P1TOwL28urW1vcS5rqmmop2ampyeoaewv1g8Lyso\nJiYnKSwyNTU6OjYyLzAvLiwtMjo+QklVcOXazcC/v77CwLasqqiinpubnqKnq7LFVjwzMC4s\nLC4vMC8uLzExLy8uLS0tLzU5Oz5DS2jUzcTAv72/xtHgy7mvqaGdmpucoKSqscNpPjMuLCwt\nLjA0NDIxMC8tLSwtLi8xNTpCRUhMWuzRy8fL0M3qUVnJsKiinpuZmp2gpKu210s6NC4uMDI1\nNzYzLy0qKissLC4wMjQ3Oz49Qk1Y+tza2dTQzd3nyLSqpaGdm5qcnqSprbbhPzY0MzQyMjAw\nLy4sLjI1NTU3ODYyLS0uLjE0N0Ba0srU1ca9ws/Dsqmln5yZl5qeo6asuOk/NDEtKyorLC4u\nLi8wNDo5NjEuLCwuLzE1OD9MX+PLxsnHxcjV6Mq0qqWfmpiYmp2jqK/CSDEqKikqLDA1Ozs6\nOTg1MzEtLCooKCsuMzQ5P01q0sC6urzBwcC/uKykop+dmpian6mzxOFGMispKSotMjIyMTU1\nMy8tLjAwLy4vMTU5QlFt2dDKwb29v8DD0OHFrqakp6KdnJ2hrLjG02g/Ly0tLi4vLy8wNDU3\nNDExMjIyMTEyNjxFXtHAvL28usDN5XRhYuzCr6mlpqKfnZ6mrrrOZ0Y1Ly4uLi8zMjAxMjQ2\nODc0MjQ2OTw/R17WxMPGy8vFw9RXSk9LSE3PsaimpqGfnqGptL/K4VA8NjM0MzU3NTQvLzAz\nODUyNDpKTk5PVefNyc7f7dbL11o+Oj4+Qk7Rsqqqqqein6Klrba8yuhKOzU1OTw/Ozc1Njg5\nNC8xOEFBPz9DTV139mRVWWnoZUM8Oj9FVM6zqKSnqaWgnqKnsr7NY0s9NDA0OT1GRUY/Ozc1\nNTY7PT0/TPvka1pTTEpBOjc5OzYyLCwzO9emmJCUmZufn7RuLCkvOuxhzr+wrLXfMykkJykr\nLC82Q93X7EY/OzQsJyotOjxXyb/aRkxNTj+ylYqJlJqgnK8lFhIoN+s+WqmgokUjHiUpIyUz\nyK21dFZd4TorJCk5P0c8VF/O/kc4JyozXD7blomDjpykqq0aFhE2vr+2v5qfqygcHiEhHCrC\nqrRWNlVDLyImM0dbPE7yz046UllGKy9APkw8npCHip2btJ0sGxcjq12qc52gsi4bIB8eGinL\nsd5QSNM2KCY1VUQ/P87qSDlE3upxODJLysUyVZiJhpmno6G4ExccsPU7WKqXsT0gMzIiGSFt\nqrpkTc7XLCYmRks6NU3LQDAuQ+k7LCxK0N8/V5WNiJGdlqOoGh8iWtotuLSbxjgmKyocGiA6\nw73Tynz9NC4sMTY4R1p8UD1BS2lMNTpLvdVHQLqSjIuenZui0BUkI8soO8ano0lAMkglGxwu\nTuXUtrvJSTdAMzQtPEU/NDdqT0dO9FcuOWZaNC2ljYmWpZaYnxwdJ9o1Is2ml7jqVrw6HBgj\nNy4sTb/ZOjlnQi4oMTs+Lzfk+0xLwL86Lj/IOiZAlomLnJiQmHwVJixgGzGxmp3QtsDDHhcZ\nJCUfMr22bkHdzTslJy45Ly1FydhLyL7LNipC6zkiyo+HjZ6TkZgrGic7OBxOrJiu1Mq4TBkV\nGysnJC3DtNNA/MpCKSY0Oi8uRcnxUfzD3iwzflcrKaOMiZOcjpGeICEuOCMaZKycubqvr0Ib\nGx8mHx8t285BOHrVPiknNjMsKkbF1HLWrrkzM9zQOjCvj4mPm5KQlzgeJDUtGSjkordle7u6\nKRsaIyYgHy7Uw+T8w8VqMi0vMy0sOmTGv7vC1Mu5dTEuxZmQk52ZkZSmOi4xOykfIDLewtHU\nvrzKOCciHx4dICc4W9LIxL3XUjs5P05r4cjCu73F0ndTQ0fOr6OipqKhnp+otMXG4UEuKy9C\nZ3tq/nlHNSwoKCgpLTI5PUlQSEZJR0A8PkxVVld56uprYmB2zbapo6Gem5eYm6GorblmMSkp\nLTA4QUU+NC8rJyQnLDEvLzM9Pjw8P0xTSU1339Tazs3VdGV1UHC9q6ajnZqWmJyjqa24eDQt\nLTE1Ojw9PDMvLCYkJScpKy81PD5BRUtUUk1KTVheZOzTzNTNw8bJuqukpaSfm5mcn6ettchO\nODE0Oj09OTUvLi0oJiUoKiorLTU5ODY3Oj5JUF1r5s7Fvbu9vbu8xLqtp6anoZ2Zm56kqa69\nXzkwLS4vLy4tLSsrKSkoKSkrLTQ5Nzg+SVJqY19qbOf36NXKxs3HxMS/sKmkpKSfnJqcn6mv\ntcJeNy8vMjMxLConJSYlJCIjJSowNzo7SPjOx8XGx8jM1tnbzcjL0tPLxca9saysqZ+cm52g\np621yU84Ly0tLS0tLCsrKysqKSgpLC4uMTpJbc7DwcnQ2Nvd5t/e0tHV0c/Z0Lmrp6mknpua\nnKCqrrO9ZzcsKSoqKCUlJykqKiknKSsvMDEzO1vHvL2+v7/Dys/Z2tzq+G7c1tjMva6oqKSh\nnZyfoqqstL9eNy0qKSgqKicmJissKykqLC81O0RX0r+/xMzV2t7X1+D26NHX1dbX4Ni3q6es\nqqGdnaGlrK6xvl80LCoqKignJikrLSwrKy4vMThCUGrZx729v8rT3WhgT1Fm/G5q5tjm5ruq\no6Woo52bnaGrsbfHUTMqJyktLy4rKSoqKSclJCYrMz1IUNS6s7S7vr++v8voZPrbz+heUF5x\n1rapqKynn5ydn6avucR6NiklJScqLSwrKyssLCsrLDE+UHnu3MS5t7zH0c/Q7Uo8ODc6ODs/\nP06nkoyPmpiYl7YvGx4wLSsjTqyhrDgrKCkbEhQeNUpEa66osEU5ODosJC1Avruwq6m37X5c\nSSY5lYaHlZSPkb8TEhkrGBouo5mtXjpPIRAMFCozJ0CooL47Xr9nJydLyFxGvKWouMnOXDYu\nMTg3o4yFipmSnqcUExUmKh7brJSrwjk+IxMPFidLOPCuq24qLi8vIShFvsPNuqurttbzSDUx\nVFA0XJCDh5ialJ0kDRYoPx04qZKdzT1ULxUMEic3Kiq7rvIlKz45JynbtMtMvaWvZvm16y83\n2t4qPpOEhpqckpkzDBYhSRsuq5KawHXLSxgOEyg7KiTKr9wgJzM3IiJNut4+16is2Ga2u1A+\nUf40c5CEhpaXkp4sDBYcLhkvrJSbt9nOOxgOFCUuJibJsNMpMExDJyM/xmQ80K62z8iy0TUv\nzsctYI+ChpeWkZomDRUfKxYos5WdvGnFQhsQFik2Jiu/qdwqLlE5Hhss7z4uR7Kz0MKwuWRA\n4s5L45KEg4+TkJk7DxMaJRcf6Zqcrt/QRB0PER0rKyZJsbJXO+ZPMR4kLTEuQbqzsKyuvdrZ\nVDwzRZOGhZCPjZZLFBQaHRMbU52dp7KtwSgTEhsiHRwytK5gZsjQKh0eJCclM7+noqSlqKrA\n7EQzLrKLh46UjYykJhMaGxUPG8Kioq6sqMMmGR0iHRcbNuNNNHHITiggJiwoJ0Wto6GioaOl\nrss+N0KcipSdmYuUwyUfMB4WESXfuNbfr6m9MyktJBwYHiYsLTt17j4yMTUuKzTft62sq6mh\npKu4ydJfSrOQjZKZkpGe7yAeHRcPEyE6SknTranCOjErIBkXHCYsL0y4r7jMXE9OSVTgwq+p\npKGgn6Osucfa82nZwrStra+vr79NNzMsJB8lMEZb2sXF1FM9MyslJCYtNEJHVWP5Y1dpXm/L\nurSwr6mlpqyyr7C8xb+3ucvNwsh9TEhJPTEtKi41OT9IU1tXSEI8OTpDTnbez9XY2fReb1hY\n7s/Gyrq8vcTAtbnI3c3n2ejbzdDJ3s/UdExESUZJTVze41hZUkM7MzA2M0Zf2t7O2d/X2c3d\n6eLdxMzHxLy4t8LU32ZidPxT28e+v8XJeUxBNDo9QUhs+dfod/hjRDs8PD4+Rm3Pz9Xazcvr\n6elr6OXPycW+ubq+y8rael5Yd2HV19HNzeJLPTw/P0ZKXlvd2d7ZUF5UUU9NTkto/vBTTVNY\n/lFq6NPZ48jMw8PIytHJ13fg1MzDy7+9yM7tXVpRTlRPTExFQDs6QT9BQlJLUHFx+Pjm08zM\nx8jEzcTHzd5zzd3b70lddFFWXXTk3M7e4tTLyczS1PFz/uHpWUhIW09GSF5YSk1SWE9VVFBN\nSWJp6dji2u/n3NfY0svBvb6+xsLCz9JvUEpIS0xfYu3e09V4ZEpJQ0VCPkRQW2P7cfhvcuXe\n1svN0ePfvsjjZW1ZP0ZW3fxt1cXF19Tq52Jl3+jmztDGycO92HdRQj85Nz5GQVBNSHtpUkZS\n6GdPZezEwb+/ysTR/eVvZM9o38O/vMbGwctoUnRdUWtWT1J17nZNTlVIPzxAREtGUF1PYE5f\nT0zd09POv7m7v8DQfGDnzt3b0+HL28vL3s/iZWjOwsxQR+Xfbj5G6ks6NTNBRDlLYdv02eZf\nfepTed3jfs/Avce+xL7cyrzC6Epjw3FT+OfW2Wnews1tc0FJPzdASVBKO0NRVHno4tzZx89x\nXlLS+EdW+93oztHSZOvMwsfew8HHylZOXeZ6bWHxbfx25vFWS1bfW1xq3flNVPP1YfjR9F7s\n2NfvWF7YydHtZfTc51hn2czNxs7FvcbP0cTG4/5dbnhLQUBLSUpNTU9WUElMS0BGS0lS5tTM\nyczp1crEv76+vb3Fx8nCvL/MzcHH6G7j505FUntzWlxefV5ITkY+Oz1APjw6PUlcVlFlfPph\nZ3NtalZQSUQ6PT8/P0Z63se+tK2rq6yqqrG9xLq5vcvLvcDhREE+OS8pJyYmJSUmJyoxNTU3\nP01pX1NZ7szDuLa0r66urq2utb7Yyr+9z9nU9kMvKiooIyIkKDA5P1LbxsXOalNXTM2sm5SU\nlpeWn8otIB4ZFhkq27Sspp+hrkMqHxoUFRkfKDRpubCzvcLOTjw9bcxoQMmflY+RlJOWn2ws\nHx4ZFhoqx6yjoJ2eqM86KB8ZGBwoNE/Arq673FhFOiwuP+m+rK/Jxq2bmpegnZyivysnHSAY\nGyFAy72spqiu1UY1LCAcIC1Q58GvqK/MVz4uKiozRO/KsqairLW/01y/nZeiop2Xp0soJSsZ\nFRYrRdvJq5+erdRSPScdHig4O0y9r7d5RDkwKSIpNkJcvqqnqrC83DwsW5yVop6Uj5rNNS8v\nFhEVLD9L5qqbnbPq7UMiGBojLS9Ksqm23lhJLiIiLTM0Psiuq6yrqrpaPSwqt5ScpZePj6xZ\nLUUeDw8bLSw7yZ6ap8vN2SwYFx4qKTK9oqOwuLfcLyAiKi0rPbqqp6ypprU7LCgeLaWXo5qQ\njJa4PC4uEw8SJjVSuaCWmqzA1jUcFRchLSpOp5ygqq63Qx8YHSMiKVqrp6WhoqasbCUmJSMv\nnZWcmI+Ml7k3LSIPDREfLUO7oJidrbzGPSEbHCMpJzqzoaissbDSMScoKigtQsTAwLOprrm/\nX083KCi8mqOpmY+Qpr9SaSEREhomISxLqaGqr6yvbywmJSonIzPBrbSuqqzBPDAvLScqMz5E\nXr64srGy13M+LzqqnKqil4+VpLC/xiMZFx4fHyMvxrzS1Le27DsxLi0rLjzuy762r7G+W0M/\nPDk6P0zcwby8u7q5wWlRSEP+v6+3rqOhn6uvy9BELispLSswMj5EPTg2OTg2OT9RdM3Gw8PF\nydHb0Mq/vLu5u77CzPlMQjw6ODg7QEpYcN7VzszPzsm+uLKxr7Gztr/PaE5EOzQwLzE0Njk5\nOTo/Slli38y/u77Ev73Dys3Kx8/e2tj8WU1PTklCPkFAPEBU28zKycK+v8bEwsXMy87Jx9jo\n291dTExFPTw9QUBBTXja0NDe0c7fXE9camphat/la2jvaEpDRElMTVnt0c3Jy9DNz+RlZPjY\nxLu7vLy8vcLYa2tcTU5b8d7mefZoSj04NTIyNTtLe9bS1dvna1dRUVr70MrHvrq5ur/K7VdM\nQD09Pktm49LKwcDIztfu3NDKwry5ubq7wdXtX09EOjQxMTQ2NDM2PT49Pz9FS1Nh28W8trS0\ns7K0t7e3usDHyM7d725cTkZFP0FDRUtQT09adOjuZ1poeF5aX1tRSUdLSUdKUVNQU1Vg3NPV\nzcS9u7u8urm8wMbN2NLU5OxtWFdfZFlOSUZAQD9AR0xMSkhOVFx3b2VXWmXy6Ovo39nT2dnP\nyc/Yzc7KxsnLztPZ29fh+Oj9befg7efo7nZXS0pNVllMR0ZKSUtNQ0FGSklGSlzYz83LxL+/\nwMG/wcG/wcbHy93r/2BZZXt1/Hht20sz3UBKaTPHO1NoPdpG42x20O3X7drcd+zh715aV/ng\naXX+7+Zye9zZ0srBwcXDwcHK22tfW1ROTVJRVVRRUkxMVFFORUlPTVdMTlRY7urk3dTNx8rN\nzMvBwMvL1NbQ1eZdVFROVEtHTUdSWF1pYvvs1uq+rEk81ku3TP68ZNjlztxPT0xES0JOSVtp\nTfHxaFd8/dLK5dLZ3NXk39DRz8fP7V9VZ318vGpfySnlLTXXPL/tzb66yry/z8/a7dlSaEhB\nPUE9V0piz0W+YMrL8tRnUVT0W8VN1cxNz+FzZ9lWwz2+VWC9QcDXPa842borrDXKvS2zMt/Q\nQdDINrrfPKsntkNHtjG7Pr/cfMRL0Mk7vmU2tTbJvC21P2TFPNbNScBRwG9ari2lHqtBKqUd\noihLpB6eKrixKqdIyW/HyOXKMLE8zslEzFLbbkTTT0FGN7UryzrKvyqlJ7TBIZsfq8wpnyip\nVU28QrtQRK1Ay8Y2rzXCzzy/Oj63PvjrOqwvrDk+piWlKK0+TbYqpy3AT05G1ki+TvO/K64u\nuFRqxiqtIbZBU71Drei60K1FsnG/bz21KbxHQrU18bsuvjk3rimzM8faXLsvpi3N0D62QEtq\nW03DPLt0KqImrUgzpCGoLqxfWrFGoi23zcnOPNDOLbwku7cgpx6vyiitKqlJyjm8sh+cHKJw\nKJ8fpS2vLrq2IqMorOAqrTW+YiyoPc97OqUlqEdjt0i6K7w5zls4qDW9yDuvQP097jdZ4u1l\nwimxyjWhI6oxvVtb3/S3Mqksqkm7XV7OO7c1xE5PwjK/SEDaNr9sPslAvTrPPGysMrI4rPc9\nxVGxL68519RAtzOnMa4/9LAvrTbkYS7BPj79T+TeRb1LyULkzFa9Lq44vk4vrDS7fUyvMKM5\nydhSuTnmXMRb5jPVPMNDVNFBuzGtOLBb7so0rCuvO7Ne+lNJ7z/EUN9JxEDU7U3LR7xFyTGv\nOsncRq0urym5Nb0+zktdyk22Ys/ou1K2P7pVT79ByUvLRtM/TVQ3yku/QGjXR75FyFXR197d\nW9NKzk7OWt/X2c1P3U70TlFOTnBW827X0cbMus681Oe/Ud9KPVpGTFc78UZ87FbWW+FV3ODy\n41vVa9xm2tvW5NjY7dxZ6U/a3ePOYcZM1VjsZ3L6WOJZX0tlTVtXXlpPZGNa4+vf0szOw8jF\nw8jNd+plWUlJR0pLVmxXXlpdZWzs4PDu2dfM1M3OzMvW3e3l3l9MTk1QTUdJR0hUa11ffO7S\ny7/GwL6/xNndXXdlUE1HTkZNS1V6Z9ff+mNuefDm4u/o4d7t9vT86W1cdGFSUlFKVXHn0c7J\nzM3Rz87Q1fb5aPntbHXoc1tPSEVHWldXSlBte9nY09vf4+zyaXLu6ufZ39jR1dLq9mv7bVpo\ncu5na1ZhdXPscmVren5x+n58b25n6eTm6vji6ORm9+Pd4fzuaPbt/mJd8uzW4m1cZPRvX1ZN\nVFhp+G7k6uvo8+n9zNXX6W3e18v1aVdZYl9eU2rn29rZe+Df5e5UWlNjW2ZfWeHd1dbW3Nzt\n/2JYeXb4X1pcT1FdVlBUXF/83NnU0crIyMXR3PXy5WX+bGP1eV9iZW1+Znh8bul+63v76vz5\nWFBKT2Fr62dha17u/Gzx/dzk7uj+8O35a2vq3tnn6trc0s7Ozt3p2dvqb1pbVU5JSEpIUFNK\nUlx1+Ozb2NXQzcvMztLd7XtoWlpjdWxcYHnh5PljVl136mxv693nePN49+Hv+GFibOXc8PNo\nWltgYVxq4dXZ7mtv4tvRzuX2dHjyYXRral1PUlN08fhpYv7ez87a2vLh421iYG/+7Oni4t/j\nbldVTktOTlRbX2rrz8zJxsbIz93v7fz2fmpmW1xZXWdhXFhYXFhaW1ZfY29tcdnR1O/r187H\nzNXo5+Tk919eZ19eYl1qZHZ8YWZaWmRpb2Vnfuri3ujY0dDOva3NxTItOTZDPENsu63F705U\nTTo4S+zJvs29s7K21FhWZ1tMPz9NbuJOTFfMz+FUUvdn/G3v8drP3lhd72FXUFdf9dfPzNjU\nxcLM4l9oTEpKTl5tV17abfJo6O7UcldcYVxhaV/s3+z39uTw68/b2dzMzdrhWnjf591lXmde\n62ll63tpW1BRWF1pefXx7O91XW3p/GZcYuPne2tmX3fu1NfSyc3b8e3l3c/Pfur33mdgTFln\nY2RUXmBoWE9KTE5WYP3o7GTs835cb9rS5PDezMK9wc/d3dLWytDy/2JdW1BNTVRn3dzb2tna\n61Y/NzY2Ly4yO0dc5czAu7u+v8rZ5ePUzb6toqCnr7W0v00uJCQqLzU7Tc22srjOUD02LScl\nKC83Q1XVxLy7wM/pYn3X09PNubCrqKOfoaWuuNVNOCwnJCYoLzhDWPLa1sfL5VBCPzs6ODk/\nTmf46NPFwMC/vb3Bx8vfaF1WTEZGSEdKccy+u7iwra2vtLvJ7lRCODQzNDc8Q0xX9OtyX1de\nZl5UTUlLVFlSTlBVavrqfWdiZ+jf5+vn2dXb0cW8tbK2urq4t7i9zetpXE5BPj9CQT8+Pz9B\nQD0+P0ZMTlFk7ufg2tbT1+Ptc2x+emhbX/zf1tPU2trRxsTIx8G8urm7vb/Cx9HgYFBLR0I9\nOzs9QERITE5UVU9JQUJFSUtIR0lNWn7r62x62M3Gwby6ubq7vr69v8LJzMzOz83P2N9+a1dN\nSEVDQUNFQkNJRkNFQkJEQ0dKTE9OTk1QW3ja2dLPy8jCv7+8vr+/w8PDv76+xNXh6PZ+ZGBf\nWVpRTktGRkZCPz0+QUZOVV5laW1samVnbW1yb/Ld0czQ08/S1c7Oy8bGxc3X2d7lfmVaXu3g\n5XhrbmlcT09PVlhYWFxpfO79b2VaVVBYWE1NUGHo6eDUz83Lzs/Q087P0s7Qzc3O0uj19F9V\nTERBPz9DR01dderZ2tzb1NLk/GtnbnD24uzu8ffy/m14cFxUTlJg+N7X0s7OzsnLycrU4vH5\n+WpqemNSS0lJSUhKTE1d8+jbzs3R2OHq+ePb3/VpXV1hZWFRT1hp7+fx6dnf625j2MfGzuLf\n39fW5+np+P53aV1jZWBWT05PU15nafDl29zrdGr9/mNWT1JcdW5ob/vd3d/Z3uPc1s/Mzdnl\n6ePe497b5mBQWF1jYlpVU19p8HRebP348up++vrq5vRpaPX+cl9ZWVxubWhlb+5tbevay8TC\nyM7O19zg/mZSVWJbVVFaa2FcV1ZTT09aXWjn4N3W197l/e3q39nl49fU2+ng1s7V/l1ia2ta\nUFJXXmVlZVtfZGFnYnR069/m7f3k1+X+c2h2+/dwaePPytjq//X4b1tVW3b+a2Rh++Lf5uPm\n19Pa4WthZvjkdFlLS09UWlxieH1wXV3g19DI4fvr7dN2Z+5ocXrv5ub5b/t41ba1STI7XcxR\nQOBz48/Gvbu13k5PWlJMWnxFMjtIU23g3FFZ2cfJ2dVzXOfeZWl+03ZZ7NLP19xl9se/xdla\naM/V5k5FU2JXREVY7/BeX0pwyddhTN7HxMDPzuvXv0ssLUble+5cP1/AtcrLqcYjPMNPP1i8\n1VrFrb3fpJ7MLCglIyQoLTy9r7C+t6W2WfpIPXxKQUDRvMrAy7u+e8JpO9/XR1lIVFpLXVs9\nSHJaY21oT/Fb/8lNd3Zew9rjzs3Kw9zbyd7Jy9bO085wWEpa400/UetdS0FGUUtq/lp1ZFph\nQz1SPkRJPU/excrfxbOusLS5t6unrLK7yszRTTMqLTUyMjc6YcPE2Uc1LSomIyQmMkZMS0fH\nr6+3vMfEu7mmm5aRkZSbpLZLJRoVExcdJzq+pZ2dp70+KB0XExMXHis8WcyzrrnSSkVSad7K\nvL2wmYiAgoyetMk0FggEBxAsr6GclY6OmfwcFBEPDg8ZL76qq71UPDQnHBgdOa+hm5qcnqOX\nhoKKn1A+Qi8WCgoQLaeanKijnag6FQ4PGik8es62qKnkIhgXGx0gKtWinJqdoKjLOyEfsIaA\ng5Owu18qDAIDDDyajI6YmJulKAwHCx5QrJ+kpau/KBINDRgmMD+7nJaYptg4LzItK/KLgICC\nnioYFQ8GBQszkoWDjqlDKRkMBggZrJCLjZnFJxcNCgsTKcCrp6GenqtJHxwrXcRLS5KAgICP\nGw8UEg8JDSqUhISPTRoVFA8KDBi6k4yNjJVuEAMGCyRNtaeunquxOSMmLUe/vl9KPqyLgICF\nuw8VEBgOCw9HjISGnSkTERUTDxAlooyLj57YJxgVDxMeea22zUZJQ0Y9LSczvKOlsU8qL5KA\ngITWEBAUKh8WEjeQh4meIA4OGR0WFB+9lY+RoXYlHB0bHB8+vLnnNTQ+585ZP0e8pq9NIxzK\nhYCAhjYMFBIgEQwOv4qEiKMcDRAdGxQTHsSTi5ClPy0jKB8ZGynDxu85Ki5Avsxu17Cjpbku\nGx+VgICBmw8ODyEdDwsYnYuFj0oRDx0hHRYZK5+LiY6oNx0aGhQRFy/DuLxtQErHvj4qLmm1\n0i0faoqAgICSDw0NFxsODhubiYOKrBsPEhMRDhAdr46IipWzJhkXERATIk2xpKi21G85KSMm\nOWHK1VSxjYCAgZsfEg4WGhAOE+CWiomVuSchHRcRDhAbxJmOjI6ayigWDw0PFRor5KifnqO4\nWENELR8bHUCUgICAi5urSzEdDQUEDh/BnJiYm5qfuDYcEQ4RHTHIqJ6iqrbPOSQeHB8sQ8q7\ntLe+v8XWPy4uQ7CbkpKYnaClrsVKMS8zPEFDUU5EMygiIictMzpOz7mus+Y0KzFF/un8W/rE\nuLnbPTE0PU1RREBhva6qq7C6y87GvrWqop6eo6y64ko6LysrLjU5ODczLy0qJiAfIi1EdOh0\nYNe4r7XPU01f2snGyLmrpKSorLK4wNHy372uq7HA3F1oYUc2Li80Oz87NTE2RVZKNy4uNTw8\nNjA0Q9C5u8p3XnPZzcvQy7quq6mqrLG2uLzAvrq3t7e8v8nZWzwwKykqLC4wNkX531k8MS4v\nMjMzNj9cxrm7w93rcGVo7s2/ta+urq6xuL3BwMjFv7myr66wuMPzQzMsKisuNjw/REhHOzEs\nKiosLzU9R1Xfx77AyM96c9zEubSvrKmoqq+6v8TNa1Z31r+4tLW6vs1ONS0sLTE4PkhUYlhF\nOS8tLS4uMDc/S2ve7evb3WVMTfzEt66rqqimpaissrq/w8HCw762srjHWjkrIx8eHyMqM0T6\nz9LdZUU6ODxEUVlZZtjAvcbuT01f+vZv8c7Evbauqqmoqa2wsrSysbK3vcbXTDMoIh8hJisu\nMzo/RkpEPTg7RU1VTDw5Pkvuz8fJyb+3srO5vr+4rqmnpaSmqK21wc3T31xIPzkwKygmJiov\nMzMyNz0/SEc9Oj1MXF5ORUNHZdfb6fXVx726u7izrailop+enqCmrbfK8VtJPjYvKicnJiQi\nIycsLzI2NztGSkZAPkRJVmNNS2jMurKxtrq1rqmoqKiloJ6foaWprrrdRDYyMC0oJSQlKCop\nJycqLzQ3Nzc5OTo6Ozw9QEz7zsTCvbmzraehnp2cmpmXl5yntr/EUiodHSQlHx4hLz45LSw1\nPjouKisxNjMvLTA7RktU6MrDvru4tamclZecmpOSmae2tcHhOCgfICksKScrOT46LSsuNTMn\nHx8nLS4tLzlM7eXf18i8vb3CvKqcmJybmJOTmaKzt8DZNCQfIysrLCkrOEJINS8xOTkuKScs\nLysmJSs2Q0pLXc69tbe8uqqenJ2em5eVmqCsrK61RyojJi0uLSorNk1nOi4tMDAqJCIkJysr\nLDI6QDw6PVrMvrm4rp+ZmJuamJOXm6evr8HHNiwmLTMxLSgrLzYuKCgsSrdDISgeLyMdJSM2\nOExRbd3Qw9i2nY+MjpCSj5OfZycnJy0fHh88v7K9cOnPvz0iGxsfIB4fKkTu5T80Mzo5List\nPnfSzLSejoeIjpOUkpzNHhgaHx8aHCfFq6i8zcS/biccGyEqJyQnOu7aPy4uMjMqJik1S/bD\ns6aZjIeKjpKRk59THhsaHxwbHTDIsrfb9l9YLh4bHCEkJCc31rzNQjg4OzYvLC47aMi7sqSU\ni4mNkpWTmKk8IiAgIBkYHC5ZyehtyLq/QyoiJCUhHx8mLzY2NTtKVUxCPU3jxb+7s6majouN\nkpWUl6DVLSQkIx0bHCY3WlxY/c7YRi0jISEhHx8lLjg9Ojo/SUpHS13Sy8fDv7Kej4yOkZCN\njpmzRi8uJhwUFR0oNzk/Xr+/7zImIB8cGBgcIysvOU/RvbrBysO+xdXLvramlI2OkJCNjZWq\naDYvKh0VExsmMzAxPOfK7zYoJCQfGxocIiosLjdVzb7Axb6zr7e/xruunY+OkZKPjpGcvj8x\nLiIaFRgfLDMxOFq8v08sJCUlHxsbHSQsLSwwP/3JzMu+sq+1tbe3r5+Sj5KUkI6Qma7YST0p\nHRYYHyksKi092t1BLCgmIx4aGh0lKCgqMU3Kur3Gvq+tsLa0r66tnpSSk5OQkZOcrctPNikd\nFxkcISQoLTtDPjcvKSclHx0cHSInKzJK1ruzs7Gura6vr7Czt7aimJeYmJORkpyrvuhCLx8Z\nGR0iJSgrM0FNPC0mIyEeHBscISguNUvPubWwr62rra6vr7a5uaucl5aXlJOSl6Gx0UUvJBsa\nGh0fIiYsOUE8LSYhIB4bGhwiLTY6S926raurqqakpaqusLG7wK+fmZiZmJaVm6a6cjsrIBkX\nGR0iJictPUs9LSYjIyIfHyQrMzs/Wcy0q6iqrKmoq7C+w77C1cGnnZqamJaUlp6szUcwJhwZ\nGBseIiQoLC8yLykmJScoKCkuNz1J/tO7sK2srKyrqq20u7y4u8K6pZ2bm5uamZ2ovFs+LyUb\nGBgaHiEkKDA9RDovLCstKysqLTlO6tXEuK2rra6vra6yuLm3trWwtrSooaGkpaOgo63KRTIq\nJB0aGx4jKi0uNTo8OTAsLTIzNjY8TfjQw767s7GutLi6sK+zsrOytLa7ureuq6qsra+vs73p\nQzUrJiEgISUrLjE1ODo7OTQxNDY7SlZRT2nKwr2+v7u4tbGwr66urbK5v8vMzs7Lxbu2srG3\nur/cSTovKykoKCktMDY6OkRNTktY0d1PNzk6TlVLXPjNx72ysLKxt7vGxb69w8jMzMbEvbmw\nr7G6v896UUE5MS0sKy41OEtZSkFGS0I5P0ZBSkZVVl1SUU1p+9DLys3Vvrawubu3tLS6wMPA\nu7q1ube+yM/naldQR0hMP0A5ODcvLi8wMjEyNDc/RVR5YF5FSnbW613tw73Kybuxr66vsbOy\nr6+2wb25vMDDxsXF2WtMQTw3MC4tKy0wNTAvMj1AOTg/VlRpTl1fxsDCzt7CxsfRzL+6tLe6\nt7OutL64sbS4wsLI2t7mXUM/Rj88NTQ0MjEyMC8xMDZARk5NbHza1dlnUm51bF1hz8y8trq3\nsquts7OvrrO8vMLHx9BqS0NTSEU8PDw7Ozg3Njo5NDEyP0dOS1Zc6/RPTVvU3VhV1MDO2tu9\nurq1vbq2sbCws7u7vL7J8UdFUUlIR1BWS0Y+PTg4NDU3Ojw/UE9f+tp47/dudk5OWk1MSVH/\nxsfFy8O7ubm4uLi4vMHJzMjKxcXEura4w9RXTEU+OC8tLC8xMzY3OD1ISD8+TmNaR0FPfdvf\n3M7CuLi4ur23tre+xc3Cwb29vq+qp6uwvcrbSDMoJSUmJyctMz9NS01ES0dSST85PE5LU0VJ\nWNnEyMm9sq2utri3u7y/uq2joJ+gpKm31jkpHx0eHyEnLT/aytHq815MOy0qLjE2Oz5EUlVV\n6NrZyby3srWura6yusjgYdCmmpianqGkqcktHRgZGx4eICtGvrG23FlSXEs0LCovODk3Nz5e\n3dl5a9K9tLC4vbu3s7fOW2qulpCSmZ6eoaw3GhERGBscHilNtaanssLgSS8nHyAmLTQ6QU7b\n0d5aSlXdvsjMx7y1uLzK08urkIuMj5mbnaY4FwwLDhUaGyU+s6SfqbfC8DEjGxofKjM7SOG+\nu8l3T1HbzMDKvbK0rri+1me4l4qLj5ugoadPFwsIDRUfJS/0p5uYnrN3RTQgGRQZJThXevLO\nvsJYNzM4R1rmzL+4sq2susvNmoeFiZWgoaO8GgsFChMlLS5KrpqXn+YsJikjGRMWJW60ts/n\nx7tkKyElNO23t7e3rqSkrv5EoIWChpOoq6m1HAkDBxMtRTpgrJmUnUEfHiIgGhIVKbynrMJq\ny8g8IR4nSb+6u7WuqaauzlBDsouBhIybpKq0IQsDBhAncna+ppeVoTgaGBseHBgbN62gqs9D\nSEwtHBceO7uvsK2lo6iwv0w3QJSAgIWWpKatLAkBAA4ptsO9oZSQnyoPDhMaGxog/p6Zo802\nODooGhUcSaulqaqopqq7OyknNqOBgIKLoJ+3NwsAAQwss6SqmJCQpCMMCQ0QEh7Xm5CbqmI9\nJRwVEhciVq6jop2fp8k9ODw7OLaFgICHnrn9Lg0AAAkroZqdmZKRoiILBwwYHR8rr5WTpEAm\nJSYeFRQfcKijqamip8czJTbiYE+kgICAirFnPCcLAAAOzpeWnpyWl78WBwcOGh4vpJOMlN4h\nGx0ZFhMbO7Goq6ylp8MsHCtzwMvGj4CAgJdBRTMbBQAGKJmPl6Ccl6ElCwQKHDcxM7+bkp0v\nGBkiKB4XGjuqoKu3vLK3Pic30bvAr4yAgIWfSEMxGgUBCjebk5ulnZmsHgsGDSE7Ly/AnJam\nLBsfLCseGB79o6K1xLuuvC8kMc2+zaiGgICKqVA/MBIFAw/clpKcop2cuBsKCA8nOzU1yqCd\nuCUbHisqHRgh26Oitcmvqbg6JzHdtryghYCAi6dROysRBgUQ3pmVnqegn78cCwkPHS1Gq56e\nn+ApGxkaHR8iK024qqSlrM4+LTta+9fLpISAgIutTkQtEgMCDl6Yk5yjnZiuIAwHDB00MTfO\npZ2sMRwbISUmISVIqaCnrrjA0U4zOE/jwcicgICAj71LNywRBQYRV5yYoqyhnLAoDgkMGiIj\nPZ6Okq4kGBwfHRgWIs6ioa6ysKy2UzQ0T8q/vJaAgIKQtVAyKxEGBg4upZqcop2cpkwXDA0Y\nHiMkKl+wrsc3KSgrKyMjMdGtn56nq6upsL/vQjo4YZ+HgIWNnKe+Sx0MBwkPH0a0qqCcoLIw\nGxMTGBwfJzTRrqe1TzIuNDk5N0q5pZ2epauqqrnXRT5Lvq2rpqKYkpWeu0YtKCUeGx4mND0/\nNjExLTA2PDg3PURiW0I3LzU9OTY94L6urK2traqsr8rqx7itraupp6Wv30BDTlFiW07yy8pi\nNSslIyQlJy01Qf/KvcB5PDk9TVtPbm7ewLq5wsK6u72/2Me6vLu8t7W+vepVPj07RuPbv+3N\n18xALjAvPzFERkPM0rvFVGNK9l1GPzdGXbvDub/Mt87hVktQ2ca/vbm0rrvT2VH5RUQ/QO9W\nYUc+RDgzNDRMSVROfsfHzWu9zfJfRmfp2NHMzcrCt8VmbsfpystG7c+4ttPOyb/Kbl9IP0JG\nZVI1MjdAREs+T0tdbE3bY8/Lydxd2d/eTEfv5MrPcL/BxLrF0+rRxNLYzsLBv9PSvMDmOjg1\nNjovPTc7TErf2/Ze81tORUJf4c7Rvrq2ynlRfMlZPz3Hw7e4ydX9vHlGRzrOW1jPv6uvv8rg\ne1w4LjIxNTtBVPf0aGxGRUM/S0rawrKtsbXC021HP0NEZ37m39S6vLlrSEZautZe/k68wsTF\nTby2VC8qPUxART1ZTlRVTFQ+TT1D1tvIv7a2vdS/ub7G+E/g7N94QkR69M3mYlVtvtpdVP3F\n28fG1k5BXTstKjtMT0t1z9vD1dRWS+r3zcvIuMi8ucddSunVXVd2Zk17xcVdzLtpSOjBXzI1\nx+dESMS3O1k2yUEuZk/KPWHJalVn79VOPNfOvcnCtsPIu+1sYb/NS8XOYcfHvEI6/9hMOU1U\nt2JySzRp6MY+MEDW1lpGOcNezs1B8FDdWHXFu8tRz7qwUThMwb5FVc7DV8p50cdSvb+9vkVL\n2MBOPD1RbzxJSj5DRuZMQD7qyk9PSsxZ6clrWui5vOPMv9Hayr7fTfFax8Byy1nJxlFfw+05\nTDxORzteycn300HI+0bYOGs9OVxB1l0+0cC+YEy+v8jP3sW+1Fjq5r5SPtS/701uzth0X7/P\nXcg4amk2STzevz5BybppT1XtTD7KVUVAy85P2HrFU83C883NXsrP0dzIu+BkTM49P11V3krN\nzfE8TL9cYENp1t1oxt/90T3Cvzc9zt1IMs3FOE3Avi05v7TFRrC3w9P6tk9J9r+3Lzq52dBE\nbVk0VuA+NUHL2ExaSM68VdFibnlKw3M0cbvAU13HyVfevj5Yxf7ERNy+UL10ScvMxUZJS3nN\n+bxWWsW9RytcTTk8OOhJSrxsUs7ezOTpzVTavtLOxMxS5M5tcdfEVW61xkvMwlJB38c3NWPe\nWUnK60DJwFpWXE5GSlVLPe201V/ffFdc6U87Pm3Gx9DDzu/Kzldb68DB27/E3czJzs7+TEVN\nTEFOaWJdXlJOSUx3UD9ATOXVee/Zy9J+Wu3Vz8/c3tXO1eR+bVv81crM2tfk3c9zSkxYe1ZJ\nXWVST2d1W2lOSFVX2c3S2dLP4e5QTV3azlVJe9/W3UhE+c/HzXjW29W7wP5r48/OamZqT2/l\ncGZTTmFdTktMZ2heb15fYEtHTkpGTE5NS3O+t7jF5+tl1NVf3se9ta6ur7PB1V5QQT5KSkti\n39HN0001LCspKSonKjdJST9C5cO6s8DGu7WvsbbF833DsqWWjY+fdSgkJSMeHi3Eop6n6C8q\nIh0YGR8vWl1ENzI0NDExOlHcvbKsq6iiqsZLRr+YioiPocQ9NCQaFhszvKantc9ONigfGxwl\nM1T3bk5BPDErJiYrNlJbwrSyt821ra2/dsbKopKKiZSrNicoHx8cKu2tnqm7OyooJisoKDBC\nTz8vKSsuNDAtLDVrxcLZ2PHCtLOutrLC++fOmoyHjqlJIzQuKyAeOr+hp747KCspLCouNFjG\n2j8qKSctListMEdb3eDX1Me1sq29yc3Nwlvvy5uJhYyuKR0pOS8jITytnqf6JR0gJiwuPNfG\nzUQxKSQpKzI0OVJc097g5FddzL63srm82tvT3ca6lomGjrgpHSo1LyYiO7eiq2gmHSAoLywu\nP8m01jciHyxH0ks5MjxeZF5CRH67sbO5xLu+urtdP0qki4SImzEeJDc7Jx8hTKmirjkhHyUr\nLCkrP7mqvjQeHitF4EE0MD7ZzuQ9MUS3p6q9z8a3r7XbMjueh4CHpB8YIEpIKRwdQ6icqy8b\nGR8qLSgnM7ajq10hIC5yyTkqKDrJu7tPOk63pqrYOj3OsbPXOjyniICEmx8VGkjLPyMbNa6b\nozkaExonOTw5RNa3uloqICQ0dWxANDdeyr/XTEX+trbXTfGupJ+pxzg6oIuEi6keFiNKvjYg\nHCu3oqg8HRYbJzk/OD/GrLFaJiEqX73lOSkzWLq10EE6z66pvFFHzbG11DU/rI6EhpQ2GBoq\n0VwtICT+qKC2LBkUGSQuMThXsp6YpToXEx81vVE+MEqvqqtBKzBis7TE2/m1q6+9Y6aRiYmZ\neB0dK0V5MyUhLsessUQfFxceNfDF4tbFwNY6Ly02PkRHPj5BcsjIZUpvxby9vK6rrbjQzr+g\nj4mKlt4hGx8nJiIdITDEp6rPKBkWGidGzdRU1qykrEcfHSA+ysfpPHm+q63MW0nix7u4v8vP\nw8S7opGKjJlzIRsfKzY3KykvabKtwC8cFxonSMrWSkpqyt9JNi0vNEttbfXUt7Cyvr+/ysnO\nvcS9vc3ZbaWQiouZdh8ZHigwLSMfJk2upqxPJBoZHzNY72Fj1MG9yW9FNzQ0NjpIxrCsr7S7\nzvNOX3zTyuz05KiWjoyTo0IkHx8oJiQgJTfEqaaudisdHCEtQEdLXc+7uLvMUzkuLCwwPmTK\nvbaxr7S+yM/WU0VJUcGomI+Ok6DDPC0oJyIfHR8rTrasrsRBLCMhJCcrNmOxqKitvMtHOiwm\nJig4WsG0raqprLjLTDgvLTJCtZ2UkZefr77MYz8tIx4eJzvbvcDYVERBRkE4Ly0tMD1ayLzA\n3UY5OT5MetnNyr+6u8hWQ01cWEtEbbWjnZ6msLu8ube3yVY4MjZF+ufsVUQ9Oz07NTIwMC8z\nOEVfX1NGPT9JZtzPz9TLxsXRbVNXXVdt8M28r6yrrrGwramnqKy2z09FS1lpXUI0Ly0tLCop\nKSw1Ojg4PUdOTkpDRlDz0cTCys/OwsLJ1u779NjNvK+srbK1tq6npKOpr770SUJEPzovKygn\nJygpKi0yOUdYSkRHX9zNys/Kz9Hffmxu7ujd61lITv7g5c25r62wtbOtpKGipq260VlJSElH\nPjYvLSsoJicoKy4zPkpPUVtlbn7219TUzcrIxsfO6F5bUk5NUW3ly7qvqqqtra2opqaqsb7f\nT0BAPjo1MCwqKi0vMjQ1NTlASERAP0VPbNjS0NbU0snHz+1caHrVys7rbOzWvravr7Szsaqn\nqayvtshxUFJSST81LisrLCwtLi8wMDM6Pjw9QU532czLzszGwsTN2ObUy87U2Nfk6dLFtq+s\nr6+xsK6urK63zFhGRklGPzcvLi8vLzAxMTAuLjI2OT5JV+zU0MzKw76/xMnMzcfI0vJfZ+Xb\n6dvFubKztrWvqKWkqrC93FpJQzw3MzEuLCopKCksLi4vO0lLRE7sxbm3u8TP0crCw8jT8W1c\nT0xKTFBcbsy4rauxtbKsp6eqrrjJb0lFR0lKQzswLCsrLC0tLC0vNj0+Qk/y0cjHx8rMzM3O\nzMrGyMzT0tjrZFpjZ9S8srC4t7OqpqSnrrnSW0I8PT47NTAuLCorLS8zNTQ2PERHT3fOx8bI\nx8TFx8fL09706WpWU1hdVVdzyrqzsbi6uq+qqKessb/cWlZeXE0/OTUyLy4sKywsKyotND5H\nVXbUxsG/vb6+vr7I2XBcYVxVRkNIVF12y7uxr7Cvrqmopqess8HpTUVCPjo4NTIxMC8tLS8v\nLS0vO0lSX2Trz8XDxMK+vL7G3GVxf/tbSkhNWFRe58Czrq6vsKympKarsr3bWElDPzs6ODUy\nLywrKywtLS0uNkFMYfjczMnKxsC6tbe8xdLc1tpyS0NIRUQ/T8+8tLe3sKqko6WorLXC8lxW\nT0c7MCspKSkpKi0tLS0uND5VaWpf883Au7e1tbW2usHM1+ZgTUdDPj4+SN7BtLOzsK2oqKer\nr7rJ/lZVU0tCOTMvLi0tLC0tLS0tMDpNcfl73Me+vLu5ubm7xONYXF9ZUUdITk5SWNq8sa+0\ns6+qpqWpr7i/1G5RRz85NzYxLSsqKystLSwtLzhGU3/XzMW8uLa1t7e7xdDb4vVcT0xKTE5M\nUn7Ivbq8uLWtqaiprLC4xuBeS0Q9OjUwLi4vLy4sKyssLjM8RExb6NXIvrexsLe8vr/H1t5x\nW1BKTVDbwLm5vLizrauqrK+1wdb9UUU8ODQyMC4uLzEyLy0uMDM3Oj9HVffOv7q1srK0tbm+\nv8HUWUM8P0BDSWjQwsDCvLGsqaipra+2vs9sTkc9OTUzMjMyLy4uLS4vLzA0OkBHT/7VysO8\nuLOzt7m6ur7EzmBSTk5NUOXIwMC8trCrqqqutbzPY0s/Pz47OTY3Nzg6ODIvLi8wMDM6PUNL\nXPrYxL69vLi0s7O3u8bYZUlBRUtQXNTAvLu3rqqpqqqss8F/Sz87NzU3NzU2ODg1NDY2NjMz\nNDc7PkVGT3PVxsK/vLe0uL6+vsDCyuhfV0tHRmXMw8C/v7qvq6imqq+6ytxxV0o9ODEuLCsq\nKioqKy0wNTk7P0/pysG/v726uLW3u8HFw830T0xMSkhGTGfGt7K0trGtqKWlqa+5zGFBPDs3\nMS4sKissLi4tLS8zOT0+P0pk2MjDw8C/v8HFyce+v8rdeXN3/XpuYvLMua+trK2ura2ur7XC\n4Eo+Ojc1NDIvLi0uLy4vMDE0OUFKTVVl5tjOw8LExsG/xsvLx8nX3eLoeHDc3O5858S2r62y\ntrOura2vucxvSjw0MjQzMS4sKywuLi4xOz9GTE5ZfuDTzs7PzMG+wcTCv8PK0s7KyczmY1Zu\n3M/Kwby5trOvra2utL3H70w9NjUyMS8tKysrLC4zPlFOTlFu1MnJz9/i2tDJy8zNzMrHzdXZ\n5XxcTlP/183HvLSvsLSyrquqq7C/6kw/ODQvLCoqKikqLC80NTg8QUVOYHfhzsW9vcG+urq6\nvsHJ0dLT+FtRTVVi89bBt66sra6vrq+yusTdU0A5NjMxLy4tKysrLjAxMjU4PElWXWji0szF\nwLu2tbW2urq6vL7EztbX5eLm0MG6ubu5uLWys7jG8Uw9ODUxMDIxLy4uLi4uLzA0OTxET2nc\n0szIx8XBvbWxsra6uLa3u8XP1t3e0Me/v8DBwL+8urzD21RCPj48OTUwLy4uLi4uMTQ0NDU6\nRU1YaunOyL+6ube0s7Gxs7W5vLy9vsfNzMTDx83RzMnHy87Y/l5PREFBRUlEPjo4OTo4ODc1\nMy4tLS4zOT9KVHLPv7izr62tra2us7S1tbi9u7e2usDBwb28w9RkRjo1MjI0OT5DQTw5Ojs5\nODc3OTYxMjQ6QktOTE1X6ci/u7Swrq2tra2usLKxr6+yt7u/xsLFzOJNPDQvLi4vLzI2ODw9\nPD9PXlVNRDw6Ojo8Pj9DR1Rt38zBu7m5u7q3tra3uby7t7Kys7W0tLS2usLXWj84MzI0MzEy\nNTc4Ojk6PEBFSUVAP0JHRD8+QkpNUl/p1snDvLi1tbSws7W0r6yur7O0tLKytrrD2FQ5MCwq\nKSkqKy40ODo5Oj9Lbel5YF5w4OJ4W1FSTktKU3bbyMTGwb28v8C8uK6srq+yr6+tr7W+3GJA\nNTAuLi4tLSwuMjU5PUBJUWro4Oru6X96dV5YVFj+9mxXWP9vX3vc0cfCvLevq6mqr6+uqqmr\ntMf8RjowLCwsLSwrKy0zOj49PEBMXG9qX15leuve3NbR3u/t2crN1N/l29fMxbqura6zs6+u\nq6yuttNWQTs2NDQyMTE0NTY1NDQ0NDY7Qk5kZV1x6dvV3+Ln8/bl3NfV08/LzMvHwrqvq6ut\nsbOzr7Cwt8l7SDw5OTo2MS4uLi4vMTU5PUZOZ+v1Y1NKSFBRVV1jeWdg99bQ0MvBvsHCxcK4\nrKmttLizr6ytrrTC30o7NjQzMC4sLC40ODYzMzY6P0pab2V3aWjz4NHZ4+rUy8/P0c3KycbP\n52te/tG4tbi9ua6ppaanrbvSTD89PjsxLSspKi0uLi0uND9RZO73ZGRbaX5sZ2Pu183Ky8jC\nxcjLzNTp2dfMua6vuMC7sqypqqu1ynFKRD4+Ni4rKiosMDQ1ODs+P0NIVmxvWU9LVP3f3Wzp\nzsrR2MrJ3WltbFhNXb+qoJ+kqaiop6ist2k2KiYpLjc8PDk9T8vCbDMhHh8oMDtWaM/Hyu9E\nNi41WM3FvbKurrTE0VI9NzW0j4OCjbwfFx4uLCMYHTymlZq6IBQVHjPpzu9sb9DlPi0nLkPe\n2Ug8R925t9s8NEnRx9hf0bOrwF9NqomBhZ4ZFBzRuyobFDGjmaIrFRUiODgpLtipobNIJyYv\nTtVKMzA/V1g9OU/vy8nS2FHOraquQio2noCAhdcLFimoSxQUG5+Umz4XGi7xKhoZSJ2XqCsg\nLnNBKCMtaMFOKicw07f+PFqto7DQXbytvT0ymYCAiCoKGTquHg4UQZOVtR0ZLHsyFhEkoJKb\nRBwnUsgtHinUq88qHyrouV0sNLifrFEx5auwPSmygoCAnAkT4cIsCBFYj4/IHRgxSSMPDyak\nl6hhQPLMLyAlSKu6QycqRkA5MTj4vbbUO/auobcxJMuHgIChDx6wWhwIGaySmDoqM8o2Fg4X\nPq2xVFWrpUAXFC22vTwu1rfaMChLvb5UOEm6r7zCP004youAgJkcKK03FwgdqJaeLjvPvigP\nEB5Cyne/tKvPKiEjOz44Ok7YQzMvOcm/53bexHzYt7PVMDethoCEpyWvpRkLCWyep0czqK0w\nEw8bKiUnyZ2cszYqNCojIzDs1VMyP1BgX167wG01R62irk82SqOEgI2x7ZnXDggUrbjzNaeb\n0B4WHiIZFyuorObSuL8rHSQ+PysvXLvsNULFs77SUEM/0KimsTnVkICHoK+Xnh4MEzYuIS6k\nndUjKTMhFBUsu8w6u56pLyI5/SogLsjlMy5A4D9Gwrs+ME6wprTLXJ2Igo+blZNLFRUnHhUh\ntKHUOt7FIhMWJzUuKNGkrVNMvmsnICszLzNJS05Vwq6+Pz1XTs++qrPMkIKKmpWPqB0YMyAP\nGMOl+zytqigUGB0dHCDZveHEra/GSzosIiYvNzU8Xse8usDGzsHbSlm0rZ2HiJGPj503IDEd\nDhcuWjpoqawuIC0eFRYeLjVXs6+8tbbCNSgoKCIrUNnXsqzQvLG2z/5b0M2cjI6QjI2dwE9F\nGBAdJBskz6rIOWplJBsaFxofO+n8wa24zWNGNSknMztIz7Sqsc67rLPmUtqzmJWUjYyUnqit\nLxQbHxkXJUHYdcfDQCopHhcXHCg5fMaxtLm2wz0rKzAqK1q3uMasp62zwLu+qJWelo2PmaWl\nrSkcJyAZHyoqKznGXDc2LB8cHB4gLEPdx7qxuN5JQzYyLSxAd7u1rKeoq6mtn5ifmJSWm6Kk\nsjktLR4cIyspKCw3Mzo9MykoIyEfJi0zQsmztba/1k1KOzQvPWZLvq2kprqpn5memJWXmp+f\nsD8uNyciISsrKyoyLC0vLykrLSciJzM3PU/sZ72wwVJERTgvPkZAX7ivrKuoopaYlpSUl6Kg\nps0rLSwkHSMpKyYyOSwpLSsmKS8vKCo2OjdX3XTUyN9NT2ZbREb008i3ra2yqJmYnpmWmKCo\npqxFMDctIiMvLiknODwxLjQtJiUpLisrLjg+RktV08vR62jv18zI0tC8trKvramgm52eoZ+k\nrrS4vedNPjUvLCcpKiorKy8yLy4uNjY5ODxETEI5QU/l2tvPxr3I62xZS1FX78m8urCnp6Sh\nn5+foKWnp626/kI5LyspJigoKCclIyUsMy8tLzg6MS0uND9MUmnKvbu7vLy+vLm3sq6qpKGf\nnZydnqGmrLPGez8xLCcmJyclISMkJicnKzE3PD8/P0ZAQk1NUVhu79PBwsTHxru4vbyyrqqr\nq6Odmpyfo6itu9VFODIrKSwrKSYmKCopJygsMjU4PTw5Nzs9O0JOX+rby8G3srW2uLq9wL+z\nqaSin5+dnqGjp6/HWj40LCoqKiopKCYoKikpKCovNDxGRD8+S0pJRkvh3N7czcXJxr66xMrH\nw6+mo6OgnJqcn6OmqrPePS8qKCsrKCgpJyMiICUpKiwxODw+RE9ccO94d+7b0cbGw77Ix7y3\nuby+uaynpKCfnJyfo6mtudhHLigoKCcmKCcnJCQlJSgsMDxBR0xNVGfj8PXn5+XazcjEwcG/\nu7m9xMi7rauqpZ6bm56mq666zUs1LS0uLCkmIyEiIyEhJSs2Nzc9T3tqVlXmy8vY39vKwb/D\nzca/usHLxreqpKKgnZucn6Wut8d6Pi4oJygnJSIhISMmKCYpLS42Rldicca+u73JwsnHxdL5\n6M/P6Fpa0M7oxa+noaKinpydpa/DxctcPSwnLDA0LyonKCw3NygjJjM/MjM5TmtKOjM9VVxK\nQ9+zr85fv6mpwrmUhoaRpKCZnjwVDxs6SikgMbapUxwRFR4gGxsoxKamtMu3rb0zIyczQ0VP\ny62jpLc0KDXW1js2p4mAhZitrqHJHA0PJ7Sq6D1Sr7grEQwQHTI3N0q0pKa/NSwzSDwuKzjK\nr7DDwrW4TzU2UcncxKCLhIaWsU3R/SwZFCTQn6nPLi43KxoODxg2t7DBfdrIzDsoJzfVxtZh\nasy9vm1HTktASd26ub2vkoaEj7YvM29LKhoeSaOcqzceHiMiGhMUH9iorWUrJTLmwlw9VLms\ns+Q5M0TYwM5KMDq/qarZYp2JgoulJiJEztceHSK0m5y/HxkbJiUbFRgss6StPyQjN87CXkNK\nzbe66Dw8TbqusmI7ULmqt+Krj4WHmFwcJC/uLh8fNqWeozocFhsmKSAdKN2qp7UvICE6w73Q\nOT5kwdk7MjfasK7MQ9W7snFBpoyAhZM+HCIxySseGzGnm6E2GRMaJSohHSbapJ+0Lx4fNMK5\nyUI1V9jKSjM9U7OzvVpZ0u1cQp+IgISXSBwhNU4tHh8+p5ymNRkTGSUsJR4o86imuyobHS7B\ntbpzSG/Pxlo7O3uzrrve78DZU8abiYSLoS0dJy46HyIttp2ftSUYGB4pKSUoSK6mskkiHCQ+\nube1v9LiSz0uLDFXvL7yeO95RzWrjoKElMweLjzQMSAtv5qYpi8YFx4lIhscL7OjuS0dGiAw\nT9vOta2x7i4qMuO5s7vMt66txTlJmoaAj98aHj1ONhkeaJyTpDsaGiYsJx0eM6yfrjMfHiAq\nLTZbs6avUyooN823vtFYxq2tyzDIkIGBmDcZMFlBIBQtqZKa2SMcKSwgGBo2rZ+n5y0mIhsZ\nHj2uoqziQTk8OC0x9quoucDM8NmijYaKnsY75jYeGh6+oJuwRj46LxkQEyTOtbfAyX83IxgZ\nKMWtssrY12M8LCtAvK2yvsLT3cecjoiLosU42iUYGB+2pZyvzrW6RBsUGChXYtK9s8I2IRob\nIzhNS2LMxGs+ODpBbsjDua2vzdGfjYqNnq2xsDoZFRpEybzOwKmjsyobHSMmIykxScnGPiYn\nNTotKzvUxc3Mtqmlp663vbu8z0M2Qriqq6+wq6mpt9tMSEY6MC0yPUtfftjLw8hcOS8rLDA3\nOj5NVE5FPzg0ODxEU9vFv7u8wMrO1+zVvbCvsq2loKGkqrO4uLrMTj88Ozc2NDAvLCkoKSos\nM0BPa21MPTMxNDg7PkZkwLGtrrCxsra9wMS/vbqzr6+xr6+urbC3u7/VUzwzMTI0Mi0sLCwr\nKiwyQGjpUkM9P0dCOz1L2L+6vsa9uLa5wMW+uLO0vcfT3eHYzMS6tba4v8XFyMjGydxZQjgv\nKyosLzQ3ODg1NDQzMS4uOVDXzM7Mwrq5uLexrqysrbC3urm8vb28u8XbXU1LUVlYVl1eTD4w\nKykrMDc8PkVRWFhKRElTeN/VyLy2t73Gx8a/xs7Jwr/I71hvyLu4vcvqWEhFR0tNVvTZ6k88\nNDEyOEJKWuLPzdjvXllWWFn/18i+vsHDxcfO1Nzn3NLhW0lP3cm/wsGstzFBMrmwKzI9RUoq\nOU5D2q3OVULStbSq6S0rKUZJ0Ly90863srr8PzVVREI/TV15zb2usLzQ2l7lcFf1xcXSytZn\nQDw6OTw9PUBXa2NL2NBtTl3FbW/Yw7rG2+LdbeFjTepie+bgR+POwsbofca92NjUzs5pRl1F\nQEg+PUpGT01RVUlPSuZSSmDV1ubevK6yWHq/vVNA7bO66sq+TTA89MdXSr3A+Tw9XMnvTEp4\nbkk+18DU+E7e21Q7QGva6Un73m5Ix8DIb+fAyVbmy9pF4sS8U0jPyE5Az13XWHLLzk5P5s3b\nR0hPYT8+1dbAXlxITUBc3P3dSFVJ4ObG3Odpvb3Ovru7xVRIVV9M19vAzM5V+upMT0tKRFRA\nZU9HR1lLTlZL7XPzz3k9yLnJx8nByWFDxcRt0sy/zT9AtbxNQuvlaDZIzGhLTtzEzT5b8E5P\n/M2+6UNS+U1KSFp3V+G+2U1hzcjL/92+zj1P3eDwVHi6vHF6TUxSQ0nl2mbu5fnoYM7CyNjX\n2v1NZ0dFTFPZXWdoZ2BQ4N5YP07Yz9BaX9t4ZvDNvMPHzN7PT0RFfvJPeEteTjk+ZcbfxcHG\n1lple0hR7cS+wri1sc5tPz5FS0VT2dS7ubKvwD0tLCkoJSk5Rz49SU5bZGbiy8LIvL2+ucLa\n1822pZqVl52rukMrIh4lKjE9x7m7xFY/PTkkIyYrLi86STopKy86SEnYybqvr6m2t9XS1LuO\ng4qXpZ3CGwwPJB0kOKOZoMRCRCwbGB82PTfntbw7JSMjIB0n1L2+rqijtNnArsU5Vfi9rYyE\njJuuokoXDBElJixaoJqo1j44JRcWIUR2vKimsEUqJyIdHCY5y7uzp6Op3UhURT4wV+3HrYqE\nj5yonTcVDBkuIy3AlpShxVk4HBEUHi835Kyir0QtKicdGSE52s2zo6GhsLW7Oi432D02Q6CE\nhpaempkoEg0hKBgk0ZmhuNzIXB4TFyAvK02onqjM4lg1HhofJi48b6+mpamrtr5GOz1LQD/G\nmISLlJyUniwVDyEZFhc8qKu1wKyuOx4bHx4aLbuorMWxsdEoHiQlJidGuqyrpZ6ouL3CUDQt\nLT2gjI+YmZOZyCYbIhkUFCFWxq+vpKKtRCYiHxsiMT1nybOvrvM5LyYiHyYuVsG5qqSipqy4\nfEwzLkyajpiZlo+auiwjJBoTEx864du+rKe1QCglIiMsLDFOu7jEzl1DMCsqLzpF37qtp6uy\ns66/Ojo8TLebmJuamJmm3C4sKR8aHCg5THTIs6/DTTw2LC4vLDE6PkhZX1JJOjU4PD9BWMi3\ntbq4tL5nSX7c/K+Zl5ucmJiizTMvLB8aHCUzOUnPs7LTRUhFLycmKjQ3Mzth5VVQSDo1N07Z\nzcm8uLe1u8fc03R2zqeWmJuZlZqyTzk0KBwaHy00MkfOvM5EOTkxKjQ9ODg6RkVFQj5APDpE\nWuvXwcbIvb+8urrJyrq5s52Um6GenaXOP0ZDLh8fKSsnJjrs11xN09k5LTI4KiMmLz05N0vb\nbU7szdvs58C4vcmyrLC1tK61p5mepp+cob7L2EMqHyAkIR8nQkZKd8i+XUE9NisqLS4qLz5L\nRT9H99Xz+MjK6cW/vba2tbO1ubmomZ2kmZefs7a0PCIhJiMcIC40LzbXz049OzksLDAuLzdJ\nRjhI9mZHWNN20cnMv+LRwby9x66stKOXm56Vl6KusOYsKCkjHx8oKiwzQ04+Sj8zLy8vLjI0\nLzI7PkBASU9e9Mi/wb62sruvtbe6s7C+o5+fmZicpKq4bjctKSMhJCMmLTQ7RFRFPDcxMC4t\nMDM1ODc7QT0/W3Rlyb27s7K5srG2t7y0sK2op52cnZ+kqbrcRTYqJyMlJicoLTE0NDM3Ni0s\nMTM1Oz9BS1Zl4MvK0Me+vbi4ubm9wsG9vcTJubGro5+en6Kor71dNy8pJCEjJiovOD5AOzY5\nOzM1Okc3Ojk1Tr82PbVNzz66zrnUqcO3sbaxv7KtqqWinZ6io6u69EIxKB8fIiMmKy41P0hJ\nRTw8PDo4NjpFQ0lYZ01MTWBd9tHEvL+/v7m3tLy/tqukoZ6dnZ+iqbPWQS8lHx0dHyQoLC83\nP0RBQj49PDo9RUhLW/Lhe27t9c7azcvNwL+8ubi3uby2rKimop+fpKmuvd9HNCojICAhJysu\nNT5FREA9QENBPT5BQ0ROUU1Tavh67uHUyMLCvry6t7a5vLevqKWioKChpaqzyE02LCUhHyAl\nKCsvNjo9Q0I8Pj0+Qj89OzxASVZh7c7Cvr69vLq2tbW6vLm4urmyq6ikoqOmqK651EIyKyck\nIR8hJiouLzM6PkREQT0+P0JFQD9IX9fKxLm1trm6vLy6ur3AwMC8u7u3sa2rqaiprLK960M3\nLiglJSUnKS0yO0BDSExVTEVDPzw7Ojw/SVLuzcfFvrazsbKzub/DwL7Cw767uLSwrq2usLnE\nz/tNPjUuKissKywwOT5DR0ZGQjs2MjAxMTU9SV72zb62sbCurKytr66trKyytbe8vsHG0dTa\n9WtYQjw5Mi0qKikrLjA1OkBOZ9/b7XFoalhPUV/z3t/Nxbq3tri+vry5uL2/vsDFzcvKycrO\n31xUT05HPz49PDo3MzM3OkNMT1df4tPS29vd3Nnz6HB/3NzNy8zLy8fHxMfNy83Nx8PExMvO\n1nhZUk9KPzs7Ozw9P0RKSElPTExOVPfc0cvFwL7DyszR1tjg+OLS2uvl79vLys/X19PZ5enp\n2NV+XlNMQz89Pj9ES0xMSUZISlVucnJ+3M/KysfCwL6/x9ri2M/P2NnOztXd7O/1ZGBaS0ZI\nU2JncPdwbmdeTUpNWFpPUE9SX2tv6dbP0dje5dvRztXg3M/S4fZcV1lWWFVbb3Lw39bT087R\n1tbb2tLIy9r9ZltNRkRDQkNITU1OT09cb37k5erq5dzTzcXByc/W43j+dFlYatnMzNLZ3OT8\nW1NVWltpaGP6ffdxWk5PXmRbVVdh7urscmXw3t59Zm9/39DKz9bZ5ebr5ujx9vr0Ylppdnz6\nePx79H9+dm776ef/Y1hdWlJRVWH58HJu+OXZ1c/Z3ejqdVRPW//l5Hp+4s3Cr64qYEkvtDBv\ncj7GvE2+u0u36k+3v0dyQypKODg6Qy/0QnOouae81r1PTy9FLt9UUcU+uL2our63VsRUTz5P\nN/s1c+s+veO/aO3Q0dNx619QXelPSUx5eElbWD9XVXrZO8353NfhzcDM08NR09352GL/ZM/v\nwsXax17lW15qVVpKSUteZeXZc2FPXVpdYFNsdmf65dpe6ObU7nT7+ult73Fobc/Y7fBg2Ojf\nydjM0dHNZ9nh0d/t6UG8WzU+ZdI1PlvWzTVdxnZePdnHTUFYZ3VKT8jHadrDw8zgxrK97dXJ\nzt5p4cxNUf5c+U1PX0xGTF9MTlx9elxYX0xZX0pKQ0V9SkPY+N/cf76+y7WwtLOzsbC1wsHO\nTFpJOTg1MjQzOT31TExFOEcwMSw0MjU5QtC8ubKwsqutsamkn52gpp+ozEw4LSUeHiQpLUXv\nzby+0FU2KiQcGh0gJi5BxrWvqqKor7C0rJ6bmpial5qny0MoHRcUFxwjN8+ypqCgqLtKNCke\nGRoeIygvRNnO3tTQy9BPXcW5usK/o5OPl5eWlZ/SLCkcFhIUGiY4vqqln52itUsvKR4XFx4n\nLS9Dv7zL0ubN4T4+Uee9v8S0pZCNkZuamZ5GHhwbGBIUHTrHtayfm52r9z0tIxwaHSYsLzZI\n28XbX2Bfcu3fysC4ta+3u7ypnJuhq6ago747LC8vJiAiLkBPRU7avsHbTT9DPTYvLjM2Njk+\nSFBpyG1VvtG4u+bD3XLNTEZkv6qkqaefnpuis8ffTDspHyAoLS4vNmHFv8za6+FkPC0mJScp\nJicvRd3KxLSsqamwtLvBxuJquamgoaahnZynxj88MysgHB0hJiouNV28sbS8x8XNRjErLi8u\nKiowQFv728CxrKy1wcHCx2xOzK2io6mnn5yfq8tXPzsqIBwfJy4uMDrkv7/K2tnOYzsuKyws\nKSgpMUFR7M66r62vtLG4uu9N4K2jnqWgn5qbordqSj0uHxwbIScrKSw/z7/J1tHI1UUxKSss\nLCkqLz5q0srCs66us7q5vbzLxrKln5+kn56dpbN5SDYzJyEdHiMmKCoyTdrOzcfDwvJGNS8u\nLi0qKS44QF3PuK2qqayus7XHzb2soqOmpaKdoKjEaD05KR8aHB8nKi04TszEydfZzulEMS0r\nKyooKi89VtrEtq2qqKyvsLW8xb+xqaWopaWeoqi+Xzw3LicgHyMoLC4yPEpbYFtf6dvXXEQ8\nOTgzLi0sLTI7Us64rauqqqqsrrCsqKapqqmkpq2+clROQzEoJSgqKigpMD9RVEpL+s3Ne09N\nST0yKykrLzU7S9q6rqytr6+vtL7Bu7Otr66rp6Wnsb3NzedENSwrLC0rKiswODk3OkZk+VdH\nRERBPTg3PEBGTGDWwLWps927ucBvYMnGuK+uq6Ken6Oss7zFWjgrKCcnJSUmLDc/QD5HZt/n\nWUdEQz45NTY6Q1lsa8+/urm7urm5u7u+v765uLq1r6uqq66yusTRZkA0Ly4tLi8wMzc5NjM3\nQEtLRUVJRkBAQUNJXN/RztHKy8nFxsS+vMXPzcC6uLezr62rq6yusLbB3089NTEuLSwtLy8y\nMjI0Nzw+PkJJTUhIS09h+9zQzMrIyMvEwMHBxsXExcG+vLu7uLOvrq6wtLi/zPFPRD88NjEx\nMTIzMS8wN9SyOSglLT8yND9LYvn7zse/wr+9wb69uLW3urSuq6mrra2srK21vtVoTTwvKCgo\nKCgoLDE9SElFTFphUEJERUxOTU9WU+6vrdlVOUNANUppyrevsbGvqJ6bnaOioKCqyzotKCEc\nGRsfKTA4QGa8r6682vNhQC4nKS0yNTU2O05p8tbRvLO1uLq7ubq+zNaznZaTl5iZmaLFKRwX\nFBEPEhoqS8W1q6emqL9PMiokIB8kLjtV5Mi9u8LecV/r71xX3ru4tbu/q5SMjJKZmpmnNhkQ\nDxIREBYl2Kuoqqqpr84xIB4fIiQoN8mvrrO9z1s3KiUqOFzZ07+wq62vvbGXjIuPlpmXn0wa\nEA8SExAVIuaopaqtrLJ8KxwbHyYoKjfIrKy7bUtANCgjJjvCu7m0rKenrL28mo2LkJqdmZ7d\nHRERFhkVFiLMpKKrubzFTCcYFhskKy02xqimsuZEPDYtKCg01bSurqqlpKi9aK2Ri46XnZuY\nqCwVEBMZFxMYLrajqLzEvcg8HxgaIywtLDy8qa7WQz09OTAsNc+sqrCxraamrNROrpOMj5qe\nnJelOxgQERUVDxMf3qilrrivrb82HhoeKConLluyrr7o5tPsTjo5UL62vLy0rq2xwl1XrZiU\nlpucmZeh6SIXFRUTERMbLdu7vbqyrLPTNSkrLzAvOEjay8rX3+t9VlnryLy3sri2ur/K4FNF\nXqyZl5menpyfsDQfGRcZGBcZIzvJv8fJtKquwz81O0g7LCs3WO5lRz9M0snR4sa4tba7x9LM\nvulPTOisnZqcoKKhoa9VLSMfHh4bHCQyRFh6/sG2u8Z3TkpCPTczNjlBQT1KY9jPxr+/ubrK\n7NrFxcfM2t3b07qloKClpaKjqcBRNComIh0cHiMrMzpJ376xsbnHa1k8My8uND1LU2fs48u+\nvLe5vs3O6lbd3c7kTj860KmgnqKlop+hrco+NC0mHx0fKDA8P0L4urXORDY1OTYsLDM/Uk9V\n6MXBw7+/u7i5w8q8vb3Kak9GYU9D1qyioaOloqCouVI3LislICIoMDlFR0NSd1Y7Njg8Pz8+\nQU7x6H1tXPnNycrLyL23ury9xNrd1lA6Oj1Mt6SjpKShnqGuz04/Ny4mISYuMC4vNEJfZkE4\nOD1ORjs6Su3jY1XmyMO6ur++trfC0l9XSktGRD04Nz7Hpp+eoKCenqOwxPBOOSwjISUpLCos\nN0hOQDk2O0ZEPT5PcGZWRmLQvbW5uru3sbrPUUZJTlM+PT5ITdSto6Kgnpybn6m42EkvJh0e\nIyYmJis4bNhXP0NLUEQ2MTpUZGT8zL28wb7E2uHH0mlhYvtp6XpPV1VWz6mhn56cmZuiss5O\nOCkeGhofKS42ROW/vNhEOTg0KiYpMDlEV9rFvry/vL++vsLCz9rPz83k82Rldc6on5ycm5ud\nqMlLNCsdGRcbJC47ULyqpqu9ZTwsIRwdISktOErfv8LFwLa6xMjFusb7ysO5wsbpzq6cmJuc\nm5eetDcqIRwXFRghMkPOrqKgprDBTSwdFxUYGx8rRMy7s7m9vcfncXXGwr/JubKvr7O2uZuP\nlp2dmpuuKyAkGxQQGCVCSsOknp6qwlM7IBgYGRwcITJuztq9xNNINjM4PlHHr6mknp6fqK+2\nnYyVnp6YmLQkHSkWEA0ZKEEw7aOkqMDW4TUbGB4eIB8qzLXY373NSS0pNj41SbyvoKCdnqWr\ntbKVjp2cmJGbyCAsIRMOEB0oLC27qKu7WlpVLhwfJScnJTq8uGPMxNM8JSk8PztpzrKpqqOi\nqbe7rI6QnZuVjpzTKuonGQ8THCAfIE/UxU9E+lssHygqLSgqTMG6urSyrsHKvbq9wMLNzG3r\n709JSUpd49jDuK+ooJ+hpKmprcD9QzUyLi4wMTIzLiwuMTY7PUBCPDY5OTEtLS4zOD9T/8i6\nsK+uq620t7a4s6unpJ+foaGlq6+73U86LiopKCosLComJCUoKiwzRE9OS2Z5UkU+REY/P1Pc\nwbi0tK6wub/Bu73Etqyqpp+fpKivsbnNX0c4ODgyLy4sKCkmJiQnLTQ/TGRTWWBHOzc8SEM+\nRnHMubO0sK+0tre8v87Eta+uqaSlpayzr7S9wvZJPzcwLy0pJycoJyUjKjE4PEROUU5GQ0JB\nQEhP+dK+sK6usbGyt7zEys22q6uppKOnqq6vtMn9U0I8NS4rLCwsKigqKygrMTY9Q0ZJTEI9\nQ0BEUEtP582/t7S1srC3uLi3sq2qp6amo6OorLC5zVxAOS8sJycqKywtLzIwKyktNz5IS01f\nWk9CPj5ARU/Xxb65ury9vby8vL+/tqyppaCenp+mrrjNUEA3LCsqKS4wLSsrLi4tKy89REpN\nUVxeU0U9PDs9P1dvcNLEt7S3t7Kvr66vraqjn6Cip6yyuMlWPjAqKSYoLC4vMzEuLjEzNDY9\nSlzs815QQz5BP0E/R13yzcG7s7CurrO3ure0squloaCiqa20wfdHOzIuKigmJicoKistLzA1\nPE5e/O3t3PBTSEde4/J249XWyr25u8vLyMLCvrayq6emp6utr7a9zHhORz82LiwsLi8uLS4v\nLS4vOkFJV2PgalZgXvnu8+vVw8jIv72+v8PJx8jGv7+8tK6tra+zt7e1vMv6YEg2LywsKysq\nKywuMDc/SV1428/QaVJWTE9q6tvPxcLAxL++vr/DwcO/vr2/wsTBwsDCycK/v8LOdk1DPjo4\nNzc2MjIxND1BR0pUdutmV1FWVl378Ozl1s3Oy8nKxcTDwcbFwb67u7u6vsTMy8zT5F9VTEE6\nOkFHRERCQ0dOW9Cn8B/eIM03I70qzT3DnqE6PS/8zyTXPbdBycGrqq+ps6Srqry5tb3ITzw2\nMzMqKis4Wk9e7MPMb1DcTi0kHiAcGyErMD3mta66uKyqu8aYjYeNkI2NkncjExoODAkRK3a1\nsp6Ym6VKKRwXEhEVHC9Lv6ymp8VJNy8qIiQvz8CqoKCWiYSFj5Wdnk4VDQwUExgbYZ6Wl52e\npMQtGBEPEBYaKD69rKy0aDQiHhwcKEm9vauclpiemIyGipqhraQ5FwsOFxoeIdCckJSeqrHN\nNBgQERcaHSY8ta7EOy0lHhgVGi3LsKuemZOam42GhI6cpqGoIw8IDxYeGyO7mJGZqr3bSSYT\nDxEdJCs1u6CkuTclHhwXFh89xbappZmWm5WKhIqVpLClTRsLDBAdJCNAo5GSnLj5TD8cEA4W\nIi48R7Ckp9MsHh0cGRghRLiupp+bnaaVioWNm6CmnV4eDRAXHyEfPKiUlp++ck9GHhEOFiEr\nLze6paW9Nx8eHx8dIjrctKymoZ+bj4mIkJifoaszGQ0QEhobIT+plZSYoaqrsjEZEhYdIyIh\nM8+48TAlKC0qJyw/1Lqwr62ppJKNjJSYmp2eyDMZGBgZGhggN7OqqKqtp6e4NiUhJCMeHB4t\nQVNGSPi+tr7Lyru+wtHV20o94LenpaWen5aanavJfTEsHhscHigtNkDKrquvvt5DOi4mIiMs\nLzlEWM29u7m4ur/GyephRzgzLz3VtaupoZ+cnKGmtrvNcU42MC4zOz86Njg6OjIsKy81MTVA\nZ9XgXUNJT1NOUlry/mFQS1t74ui3pp+fpqakn6GpsLu7ydlWPz49OjIsKignJyorLTE9as/I\n6l1GP0A7Ojo+TVBQRUFETFnizb+vqKKgoKCfoKCkqbK3ubzBfkI0MTItJyIiJSstMDZAVnBR\nPTk7PDcxMDA3Ozw9Rmxt7sy8tbOupp+en56dnJyhrLGytsRONCsrKygmJSgrLzQ5Pj47OUFI\nRDs4ODc2NjExNj9JUVBZ18fAwbqupqKlpqCcmpyfpaits79uOSwqKiosKyoqKy4vLjAzNTxA\nSURAPTo7ODQyMzY+V+3pybu1tLe1raimqKainpyepautrLPMRTIvMTEuKigoKCcnKCwyQUpK\nVO/eZllAPTs5Njc9PUZWaNfZ3WFuuKyqr66hmpaZnqWmqa27YT01OTY3NC0pJykqKyosNj1D\nQD07Ojk4MzM1OUBNft/e2OHi3XxOQVeypqitppqWlZmgp6iqtmg3LTI6OjkxLCkqKysqKCcu\nPDYuLzY+RUI8P0FMZtnedvl2d1tNSEhaxaifpKmkmpaXnqqsrq207TwvNDw9Oy8sLS0sKygk\nJS45PDczPUVPRj8+OT48PT09SVRYST1DSlG3mI2OlZ2blpmjXi4sM0o9NS5AwrW+Si4qLC4u\nJh4fJzpMPDY6WWU8KiAkLDY/QV/NurXQycC50zjalIKEjJ+ckpu5ExIYMc0tNUOknrEpGBUZ\nGhobHz3LtLrWz+1PLiEhJC06S7+xqavAXjxJ2OdPNzqtioCEjaqblrsfCRkky0Yoy6mdvh8T\nFhkbGCI0zrzl0EBFOC4sJy0tNk/es7a+utDkODjYv69sUceOgICLsaeUuyEIGDHPSR/Ln55P\nFxIZGRUSKMiy+jJXzEApIzBCOjI4yL/F2+Wur8g7ObGrqkw8vaOGgIiTt5qgLBQNMDE9KC+k\nosYgFxsbExAc8cJeNkaz5C8oL146Ly1awN7Nz7GruF48xK6u1kHJupGAg4usrZpAHAkdO0c/\nKqacrCgVGBsTDRI5sr0/YqmoQCcqWU8sKj61v93Msqy5bDxHccrJ7V5xr4qAhpO+naAvEg41\nREkrUZ6gVRwYHBgPDRzGs8rPqZ/bJB4uPSklLr+zvb68tL3ZPCg83qivxMGuioCEk7ifmioR\nCzNBLSIsn6JKGxcfGxAOHqujtES0or8jHTfNOiEo2rdfTsqtvUhB99xfvbWwa2yVgICNqKiR\naBUIHlIqHh2nnMMfGSMfEQwTVK+0zKmZpi8fKUUtHiRrsb6/sKOq6zQvPVdc2L+wzZ2CgIih\nt5m5GAkVSjcpHq+bsyIWHiIVDBFGrqzYyJ+qRiAtWE8pIkPG21/Dp6fHOTXgysnrzK6vooiA\nhpSvna0fDA4qKygdUKKyLRocHxkPDy6vqr/Qn524KSpNVywcKdbFXnqon6paNWT7yUbvuLOa\nh4GJl6SevBsLEh8nISDGoq8wHyAgGA4SKMGpu7Gfm6w9LjdNKx8pTNFSXLCgq+0sOGFlPjXH\nuZ6KgoeSnpupKg8RHCElHkappcsrJichFRAbLGRVVaydn8s+Okk2ICErR2hosKOdqthb67PX\nTT7yq5aLjZGamZ/MIBcYGh0bHy9U11A6Mi8tJCAhLDtNya6mqa6xr7DBWEQ+PTs/XPBZQDk3\nOTtDXNG+uLaqn56ip6eop6+6tK+4ykkxLSooJCQmKy4uMjM6T29XPTQ5SlZKUWzZ3NvLxMXd\n6eXf2+HVxri3xM25p6OuurGsrbfBtbCxxloxLC4tKiosNTw7NjlCW045MjU/TEtDSm/f0srJ\nwsvW6vN88N7Wxrq8w83PysbNWGu+q6emqqalqr1SMi4tLSsuOElPQ0FLUj0wLS81NTI1QnjR\nx8nO411XbmhcVejFvcTJv7u9zk1K3MfBtKijoKOpqay6/jwvNDg6Oz9AR0Q2KygpKy4uMj5K\nWfLYy8bQ3XhaUFhJTXfLwMPLz8XGc0o8Pd27uLCmnp2epqmqr8NUOjY8QTk5PUI9LyckJigq\nLTE6SmVtcu/qeE1DS3XfzsO9ubm7vMDM6U9APTtD2bWwrKWioqatsLC2yNtYW2tdQj88NS4q\nJicqLCssNDxDRUZAREdUW1Va4Ma+vr23sbO93WJfVUZLdcOvrrSvqKSnrbayr7TI2unm4Es0\nMDIvKyYlKCsrKjVJRzw3RWrYU01o52ZIV9m/tKyzvM1kTToyPUTdoZaYnJuXm6lDPTosIB0l\nM09E8LivuUAtLComHiItTVx2u66sxWU/OSkfJC5DR1u9r6qztra720xDN9+aj5SYlY+YtSsu\nKhsTFSQ4TFW1pq3VNTAsIhwcJS04RsCtscdeSy8kIio4OUy+q6uxqqOjuNH5fq+dl5iWlJWd\nxTsrHxQRFR4qLky0qa7AfUEvJiYpKSw68r22sbC5XTYrJSMjKDFJ3bqtqqywsbbVSEi1mZOY\nlpGPm7c9PSoXEhcfJSg4vKy1xetRMyckKCwrMkrFusjVzWs2KycmJSg12bq5tKikqK6yudDB\np5qbnJmUl6XJYkAkGBYbISElNdfK72rhcT0yMjgwLzZR+vjwz8NnQjs8OjY3SOzez8+8t7q4\nuLnHvqmen6KdmJqltLzUMSAeHx8fIi9LW0xV5HFJPT0/OTg4Pj4/RlJYS0pOWFFNb8i8vLm7\nvcPM0NP9WGrFrainop2cn6mwuNM6LSonJCUoLjU4PEdLQ0dSalU9Ojs5NjxGTEBDYs/GxL65\ntrvG0dHmX19EQT4+RFG+sKyoop6en6SnrbzpSDo0LyopKiorLS8zODo5Oz5CUV9sYVtNWu/h\n3vzqz8/V2c/GytPrYGls/FhQTlffxbqvqKGgoKOnrLTKeko8NC4tLCwrKywsLy8xOD5GU97Q\ny9TnbF1hXXzbw7q5vb++x9JnS0I+Pj09P0RR0L23r6ynpKKlpqerssDiRTgtKCcmJSUoKzA3\nPlVlalNQS1VdXfvh1MnGv7u7uMnM32RcSk5IS0hLT1RYX2nQyr+wqqalo6Smrbe/8Es4Lykn\nKSktLzg/Qz89P0NKT05UdO3Pw7/GxMbM2GdZQlJE1ktu1kzBUtVeStVAzOC+tLWnqKOnqKqw\nu+tTOzIuLS0uLzI4PUA6Nj0+SklJ837P3tDN6+n0Xd77ZXBI209M3knT/uvI3cvFz7fDta+z\nq7CtsLW2x9d3TEM7MzAvMC8sLjQ/Qz9QVl3a2svJy+DR2XhtWUJVWT9eO9VTSb06yHL4xma5\n3bu4wbK7srK0rbatuLe56Fs9Oy4sLy0zLjFDT1ZJV0pCVkFLXkPaaWzfUMxSy7dBv0p+wDmw\nNcbAQrI/vsTtteuyr7Kkrqiqs67KZ0ItLSYkJiYvLjE2QFp01s/GwsvqwuplalFXTuRIT9xf\n0eJNx3FdTEzPP0TYe8LOyb+3qK+qo6Ofqqm0vd4vMicfHhwfJSgtN3u8t6+vsrfH7UxEQTc/\nQ0RPPF9aXdxBXN85ZGlAxk23vVyvca2yy52kn5yfm6asvDs3IhsZFxobHyQuWci4rKanrbjK\n2EoyLzU4NzdAS3Bh5cbRytfd8k1uWVVyTlPpzszEq5yamZeYmJ+vfDEkGhUUFBkdIzJvuK+t\nqquuvlU/OTQvLzdIbudmXGdhZ1xZWHBySVjh2cnOxsHX6OKxm5aYnJqYna1HLiYcFREVHCUt\nPsuuqq+9zcfIPCorMD08RWq9sr/O2dFqPTg2ODxGUuXP19XMvMhcSNyklJOampWUnr8vJCEa\nEg8WIy0+XrupqLZjQkZIMSgrOe3cx7mtqblqPT07Li0uMkV10MvKvre/bEhJXM2ilpaYl5aY\no8cvIh4ZFBQbKkHmzbusrcBGLScqNi8sOM2urrG1srPYPC4uLCstM0vPxczTvbC2Xk5aYs2s\nl5GUlZeYnrkxHBoXFBMXIz7Gu7qytMY8KCMoLiwyTbqpo6GmqrPoOComJSgqL0Xavry7v7av\nTjM1SN94oY+Pj5SXmKPPHxUUFBQUGSZZsK+xtbjWOCghJisuNVawqaOhpqy+Wy8oKSorLDlO\nx7W6uK6rvT07O0fYpJWYl5aXmqlzIxkYFBQUHCpgtbKvrrLDQysjKjE1R8elnqCjqrDMNyQf\nISQnLDjev77AysvhenY7NDlbp5SPlZaUlZqyMh0aGhcVGSRDw7i/vrvMQigfIiouOVm/p56f\npau6/ToqIyIoMj1Mzbqys8Xs0cV5OC9E0LKgmJeXlpier0MlGxcWFhkeLEjDtbSytsVaOC4w\nODpI06+hoqywttA+KiEgJysvOEXjw73B297Lx9xGPWy4pZmXmpuYm6O5NyYiHhwZGh8rOUll\n3MW/2kw6NTtGTFDNrqKeoKu6x08sIiImLz08PFbVx81XQkx8zG1Nz7Snnp2fn5+iqbtLMSon\nJCEgJCsyPEtr0L+6u7++vcDF2VlJSkM8Ozs8QUZBQEdMT0lBRlhPUeTYwrW2xryurqyioKSl\npKivuvE3LCciICAhJCo1RVncxr28vr2+y+Vv79biTDxAUU9HPz1HXlhJRERFRlJZW+XEu7nA\nxL61p6Olpaanqaq3YzsyLCcjISInLjc+Su7Ivbm7vcjeZ0Y/SU4+OD5FSU5NS1b17vd5bdzU\nz8K/yci5uM7s28u4rrCyrayrrLhfPDYtJyUiJCw5TX/Pw7u2ucLUZEpAOzhBxqyyYU7fWTky\nKys9W0lCVsu0sL/FvMbNe0E7Tbyrp6eloqOosfo1LSklIiIlL0vRvre1tLbFZUdDPjkzMDtU\naHD5aF9XQTk6PUpy3tDBu7/BwcvSx8xkYHV5xKmipKWmqay6PikjICQnJys517WurrW5v+JF\nOTQvMDM7XsXBxMHZTDwtKSwuMkvQwLavrq2ts73ITz9GRMOhnaCgo6mtxi0eGhodIic1zqui\no6muv1s1JSMpLjtT+bioqrfLQzEtJiImLkTWvreyrauzzM7HY0U1L02olpOYnqWntDccFBUb\nJC8+v6WdoLRJLSchHBskSrKio6Sfn61NKSAiJSQrP8exrbLHW0E2LzRRv77Lu7utmI+VoLHB\nzEIiGBkjPdDAu6+lq2soHBsfIyQuxaSbnbDUz8o6JiInSPdiWdezssFHLy88REfZurKttF1E\nw5qOl6a/u69FIRUZLua2y7+sqa80HBgbIycrQK+hn6nJUkdgPS8wP8G9y3v3wMxILSgvQUtD\n1a+qtOpFPKmRj5esrrC8NRgWHT2/vr66qa5SIRcZHyouObyhnKHAMiswP0lLWMSzu2M+RnXL\nYzcvNWNbX8m1rtBHMTynkI6Uo620dyoWFR5BtrS0say4OB0WGCExPFavnZ2qTicnMUxLT821\nrr5JPERsZDguL1zN/ne7qq/5LyxYmo6Rma6rxEAeExomwbS0sLGuYicZFx0rO0y9o5uiwTAl\nLDpfX2zKubxfOTU+WVc+O1rKzdS9rLRaMzE/r5OOkJ2vvEUsGRceO62sr8DF5S8eFhggOPfN\nuaSfq98oKTXSv82/v6/AVjcvRu5eOC4+4NFkVOPaZEE505uNjZSqut1HJRgbKbmnqrnxdTcj\nGBQaLH3Buaujp7I7KSg9vbu7zb69bjgqL0XoXjw3TcrS7tC4vNo+NNmej5GZsb3JPyoZHy22\npK29Sk0xIxkXHjTJurKroqnCLyIpP7S0s72+wkEuJSw9Tk44RN/IXUjBr7hZND+sko2Snre7\n8TcfGB88rKi02FNFLR4XGCNJvLWxqqesvTQmJ0q2srjQxc1RLyYqO2dRPjxJXU5Z3rqvvj02\n2JaKi5S7yEpXKhcbJbOmqsc6OS8mGRYbLsOvrq6stME/KSc8tqqtx2lWTD4zLzVK5/tNZu3s\n6Mq9xVA1MdmYjYyavlRBTSgcHC6snqK9PzEtJRoXGy+9qqqrrrvSOikkNcOrp6++XT8xKigo\nNEFbWFVec8SzrbDKR0DCl4uMlrZdNTAjGBkhy6emuzotKiYdGhwr2aufnqW0zDsrJTDlsau4\nykI5ODIzMT9OS0hOfNm9vLXAUTg2xJuMjJWr5EI3KBoaIFmro6jSPC0nHhobIj63op6msdc9\nLSkyPNnEwcdaUz5ESEVLQzw7Xcq2trrAz8dbVe6lkI2PnsE5KiQbGBghRbGmrcg6LCQgHyIu\n36ifnaGstWA4KCYrLDtJ/dXhaEpPRDo4OUnqva6moqezzmRoz72sm5SXo9YtISAhHx4iLl+7\nuM5HOjo+QkVO5r+6vdZORkNGPjs6PVjOwszr39bf8/FbXsu5uby+xsvLzsjIvbe0sri2u8v9\nTD86NDU3Nzg1OkJX4NrgY1lVYlA+Pj0+PDs7QXvMvr7Bw8nGy+Hbzbqytrm9vr7M3nDfysHD\ny87pYkc5MS4yO0dOT09GRT4+RUlk0sjDvbvAxsna5uj7YWdXTfviycjfXEZEPj9M58a/ubW+\n0fP66OjY1O/99e9IOjo+S0pRZNzW2OVVT1Rk69vfysLEx9d5dOTG6FtGRldW62F2711RTVRO\nb8rCyszKv8TL8/DydW5f6lNLQEBCQT8/T07sb3hYV+THvtLTy7a4v8VzdcrJbVxqWlpLRm/m\n795QRUA8SVXZx8HKxcnU3NnPcXTh3t1XSFRKP0NER1BARHVk29jMx8rM38jHx8HWxs9Z6U5k\nWkpQUt15aOz6zHxdSD7r78q8wbnd3OpX4UVWV0lORV5MVVVCUExFU09d4uvKwLvAwM/aY/h0\n5+tL39fK5FPhfWxTSvlhVeBv3utvwc3IzFrZXlvS0GdeW1hvTU8+R1pQRURV9F/i3cvN2N5p\nxtTcymXNzXJ9avbcX1dtZVrccPW7z8tfWsxhTTtM2XzP1u/NU/PuP0vmVW/bT11ORMroU8Zd\nyXXn8V3Sz8rVUtjqbMpiU/Ja8OZAUlA+U9Jf7cvkVkjDRXHxxbVSwby/2te7zU1DX3JRXkk8\nRkllWz5M+Fbj3lpIarXNYmTmyd1fX9VY3t3a1WDxZ2tXVMvY+WD4zdL3ecXGzOho7NpyTlbq\n2lxObmtPUFJJTFFa4tzZ3n7j3m9v1c7N4G367t3i22tMSk5RSUdNZuTc4trWzcrKzNTJxMnR\n4eltXVVNSkpebF1YV15i4ftYVVlzavbf2NXh6/Hl1d1uWVVYZd/W3OF3VVZeZWr169rY4OZv\nY19kc+zc2+H0fnFdXWPx49vd6Of07ndu7Nfbe1xVZenp7d//6vldW1NRTlVeX2/3/Hv6altk\n99vc3dTLx83U19na6Pv882pfeGdo/mBZT0lGT2JbcN7a09rc3ehuX/jTzM7b2N5oWFZbXFtc\nXmReUk9j3tTd4tTKzexcbPvq4H5uW15hVFFSYvLi2NnT2N3P3XBv+uTv+W1kafPc8/Hc2eRp\nT0RCR1Fha1593+z73Njb2/nr29vefm/z4uTm4OnxY1poZ1tgaWttcmts7+Tc2Nbc5/NWV/HZ\n1N3Z2eT7X2hlXFZYW2z+Z2VjWl5+7/doaX7j3+7rz8rN33FpYl1bZmJgb+bf5vRcX/Pc3t/N\nwrisWB1BqrrQOyVFvmJeT3zMWciwNSt2Tz1L899jw7jIt7KytkEvPfxtPje9wS7FwWi/SFdG\nWsoz57kzu7Q+unq+vklbr1hSvzXKN05ILsA14H40vUvvv1bIxfXhuslSXrw9a7cut2E2tDjJ\n0kXF0U5ByTJexDTHw0a/YUiwNMC8K65bUK44wLhA1so5y282v0FKtke/vj+6dznMTE3RSvHw\nOtFRQM0/R80/3LxOxdVfuEt6uT7Kx1fDZ+zLbdvvSHZNT2E8SGb21ePVWtPKfsxOzMrau0zj\n1UrbPkJQRH1Pc8LyUudm2t5H39fFy0zt7uHdWl5OSmvf+Vdp1MTK31xV7uXXZ1TUzsnNc/Ty\ne/RNSU9Tf0pKZlvgatrI2sbhds/e3Ffm71VXT1Z52/Xl59/01M1fTlNwa2FpZftoXV3s81PT\nycrS2cvUzOdOUlDd70k6Pf/aWERI9dLqXEzv7fbVfszIvry8t7u5wt9hSUU/P0VnvrGvr7XK\nSTMpIB4eISktO2Ppx726u8zGy8bFzrzFxLqup6CYlp2qveU/JhwWGiMpOE7FrKSkttVXNCgf\nHSEuR+rBuL3G30cyLS46edDawaefprG5vtFKN0itlZaepKqjxi0ZERobICY1sKCbpbe42T4n\nHh8lMDpE+r+vs9c9NDIvLCo3zLGusaynqLhYST4wLkCsl42Smp+lrjEdEhIZHCcuv6Kdnq7H\nTjUoHBoeLl/BtaqkqLY7JyEhIR8qPrqnpaetqKWtxzIoKjA85aGRi4+YoK/PIBQNDhggOtKm\nmpieuz8qIB4bGx85sqWfoaCkvDkfGxocJCtHu6KdpK2+ydtYRCoqNlm5r5qOjJCfrss6HxMP\nEh010q2hnZ6q/iseGhofISlLuKKdnqazzTcmHRofKku+tKylo6vEPT1XZEkyO0zKsaOVkJKc\nq75FKRoUFR0tTbyro6OqxTQjHBkbJjdOuKmgm5um0TsqIx4dHyznsq2urauvyjsvPk1IMDFa\nuaCXlJWcoa3ONR8aGh4mMW22qKWtyzspHxwbHS3YtauqrKuoqsJALi4xMTU9yK+utcfX9Es1\nLzZJW0NE9sGvoJuYm6Ssxk4sHx0eKDZgx7ywsLtXMCgkJSYzab2rrK+vsK+7VjMuMTg/R3TO\nys1lYE1HRDY2QNzFw9PpvK+onpebqK7Bei4fGxwmLjlPv66ts2Y7NC8sKS1FvK2rrK+vsLPS\nOi0qMDc7Ss67ushKPT4/NywtSMS9xce4rayrraOdq8RPQkg6LSUsQN7oUOLUvsxBMy82ODlB\n8Li1ucPO08bCYD05Ql1dU1zfz/JQSjw4QklAVM3FurvCvr6+uqufqcDFz9tUNSYoMz1APFHO\nuLLNWFZdT0A4OWHQxb/Cwb/DeT45ODs8Pj5EYN3V1dxiW29eS1Fta+7Nz866sauhnaq8xeNP\nNyohJzVIW+W+tq+030c/OzY0NkTx1Mi/vsDJ8D8xLSwuMTpK1rmxr7nJ0NBuQj9O6sjAcly8\ntLOroqi1vPxMPTImJS01T9bEvLavvuRQPTUwLzE+TWHOx8e/x1ZFRT8+QE7fwbi0tLrTVlFB\nNj5IWcvJ+XHIvLm4sqmtt77iUj8yKi0vPPzgy763tL3fSzowMTY4REddysbEwMxcTENCTlf7\n2si9v87Z4exnQzpL3W1BQVTu09zbt6KhrrK1u8FQKyYqMD5GSuS5r7bMXEk+PDgwNkNm1+jr\nvrK501RNX1pJQ0dc1NlXTGbcbkVHYntrXkhEUV/pvaygn6asrrPBSy0oKy42ODxWxbe2wNPf\nYFJANDE0OUBsyb69wtDtUD86Oj9HS13Xy8HA1fnc1OdjTEpTUFFh1rWmn6GqsLG5z0gtJiku\nMjQ4Rc+7ur7O3PhoRTQtL0HbxsK/uri+5kI7PT45NjtEYOXf4+HPxtZx5dfP0lVLWVratKah\npaipq7C/SC4qKSkqKi5B383Jyu5r7Vk9NTjprbDpXc3GzEssLEdnUEc9R9HF0NPY9tDB1WJn\n59bV4GFsz8bFvbqzq6uzv8/lfVY/NDE2PEBJR0hq293l7+nKykk1NjY5Qj8+UXtmYWV31czO\nycvHxsS6vcG8ws3L3FlVY2XfyMjKxcPKeUhBPz0+Pz9EU+HU3tHHx8ttRD9CQ0hWXHLf9Wxm\nUkv86unF7Vxh9+Fn1szKxcnSx8PZ19Jfdc5wUU9KS2rjY11abNDR91JVZmftY1/n39PMxtJX\ncOBQSk1HTV/wX2jpVNDOaG1qakts22HdzPj51OJu13Bg0mVLaXZncevpzb7H3XDn5F7lf0/S\nyHd061145lxLSElOe9/f3OTdz+NgdW5k+1ZRfm97ztxbXnTv9HthTlf8aF3n3WHY7mfY5dTT\n5fJsVUxZV/bQ4Ojh6frn1uvXztzvU0zq5t3JdlTe2udzW0pY2F5FUmpdWVBPYNrV69TXYeHb\nWElUflhkzc3Zz8nM09Pq7+1fYGp3/G7d5nTze3ZlTklfYF/02XxqycTL0HRm+3ZfSkJFVWJm\nWFLey9nT4FRYaX57T0pl0s/ZzsjJzs7OeVrV0G9OR0to7F1PV21xfeZeXdbOyszi3sjD1Nrg\nUFdYQ0c/PUZNU0pKbdjNyc3RzMfLy+Vdbu7t3vRQU3jk72JbUlZzZVBg+OHO3fLkz8vM1XBj\n2s/d29hp3c1kSEVg7mFhU1JpaVFXfWZ4b2B25dvpb2x6dGzh6lZVXXbvX1Vn4NfXzMza0cXD\nxdXW3XjqX0hMVFvq5uDa6vP0ZE9NSU5eTk9gYe7P2vhrU2Db52p3YGF29Gv96N/M2//8eOPd\n1txvYn/r3d3a0MzO611ZXvNhSEpb8mxYdNjOz+ZeXmJhZ2dge2xSafdoXFtv6fxy4NHYcWze\n1s3X8PRvfNfa/mVjXmlgUFLs19ptT1bd0Ohu7Ojw3+n37+tkfONpWV9x4vhrW1jmclBW+NvW\nzczKzellZ11ZW05OY+54UkxPYHnm1M7O6/nt7dDHytJ8W+ziZ2p4fmRNSFN9ce7jZ+Td/Wno\nzcrpU1f51Nv3W3bV3F1BOkJMTFpr1sfLz9T4btHO4Glla87Hz99ecPJZX2p3YUxN+NzU0NZz\nT2ro4/xaWVL46uf07NZ/af3Z7Ec/S9/SbEFG1bzC4nfYvbzRY+vYXExGe8bcUUxP79NeU0lW\nb2JLSHlw8uts5dXMzMjYfGFeaFhNVPnK5FZZU+DX3enX7GZlW9XH5mXn08TOVVBe2c13U1ff\n0fxKR1Jh509RVe/je1FNVnvX4MzMxMrla/nOx99YYtP6cG5cXEpPXF9JR/TWbVFHWObv333j\n0cbI2XFz0M7f3s3K03JLUN/pXk9YZWrZ4d9OR/fde1Fu6N7sbuHKytva5lhKWFrc3k5EQ1Zd\n7Gfw9OTgaN/m19vVz9B6R0znyc5XUGXdyeNx1cp8fmB6ytZdSlRlXPHWzMbYXEBFTF9KR+rX\n20hN8NFKR27Pxe5f1r7h/lLu485aT/PbzFh7ac33TW3Y0HhlY9fd3e/qZ05aZ9nke+jMz+rd\n31pKS2b5W2Tm03dMS/XS205W3szMVFvc1FU/S3vMU0jYvbrbVPrVbUJDYMXJTUJP2cxyZOPN\n7GXdy8Z059/YaFzu8OBj5/rmfnBZT1Rc4nxMTk1efkZES+rQ1tz70e1abNS8v95c48rfYmnV\n1v181s3i31he1951T2JaVExFTk7ua1hRTt3aXE7d3trf7tfCxFhV5cnLbEhn3uNPVODPzE5J\nYcnMYl/fx+pa6s7V329j3M/dWlx7Xl9GTFpKREBFRklFQlr3X2jEvsHt+c3GyMu7w8nIvri9\ny9DGvtdKQk7nblRL8fRbVmJjT0Q6ODQvLC4xMzhATmF098rFz9nLvbWvtL7Lt6umpKOfnqls\nMC81LysqOmbP9lNNTz0rKzM4O0FYZ0Y4NTo6NzU9b8bLyravvL+5t8T3b2m8rp+amZyqxD4u\nKiUqMFzEvsDhTjctJygvP1jYy81TOC8uMDY9Pk1ZX+Xf0dXV1uXVvbOzusS9uK+pn5ubpr1O\nPC0lKTH60MTEy+NCMycnMTtHTk3v3kkvKzE2NzQ3TN3xUG3Du8HPybS4ym3qubmtn5eWnae3\n9DUiICc5b9fJxslmOC0qKi43XszP2fdLMikuODw8QWdoSEjax2RIUty/tK64wb/AwcuvmpSU\noLHERy0cHCM3TlrCsrLEPCwpJygqO9m9sbr7QTk7MC4tMT9IT/y6tuF2z+J177m6wcLCxVy7\nnY+Rn7G7vy4cGSE2PUHQq6SwTCwpKSMlLlLLv7i920Q8MConKjQ7Req5tbi+u7phRsmxuVpa\nvq+xsZ2SkZ660f8uHBYZJjA8YbKmq9A6LyokJC9JybKst8zbUjIjICcvOD39uK2wvLzA+UZP\nzLvC1uO8s6yel5Seq7jJPyIcGyUsMUq7qam4UjIoJB8jKjrUurjDuLXSNSorLCwtPMmurbSz\nrK7UOz7Mvko6TLiuppyYl56ntdY9Ix4cHyYuT8OvrK7DSzQsJSIiKDZJ9MGtrLldQDwvLCkw\nRtC/urCtr7nDxcLHakJT3cy6o5mXmqCnrr8zHxkZHB0gKUy3qqqyucN6Oy0pKCouN1HJvLq+\n0kg6NTU8W82+tK+urrG6ym9PRTk4PU6/o5uboqWhpbw1KCMkIB4gLFrGvb68ucFaMy0qKiw0\nXL62u7/E0005NThDUln5yb29xMHBw8pzTD9KRke5n5qdoJ6epbw6KiYlHhseLVHfz8G2t89B\nMCwrKikvVrWxu7mwtXc+OkE/OTpNzr69wL7AyVVCRlREOEq3oZ6foJycorpIOC4mHRwfKzlB\na7yvtNJORDguLDFMy9vVvbO+Y0hKRDYuLjpFQU/Hube5ub9fSUhKUrafm5ycmpukvE00KB0Z\nGyApME+/sLTA23xGLCMnLzXutrStq6y+8Ek0LCkmJy88Zcm+v7Ktv0hUTjhFpJminZKPm6yv\nuDweGRwfGhwuzNzdtKzAQDg4KyYmKj1Nc76wu8fB0z01NzYzPVzRuKyoq7u2t1w5Psyrsa2c\nm6OvqKzZMC4sHxwhLTM827S6zNbeOSgqLjQsOsbbSfrEWD5GUT47SWxLWb+7vLi1usjiwsnD\npKKknpueqKmxxzcsKCIeIysrL0nXZVddUjgyMy4sMT9DRGTh9f3KxtVz7WthX+zOw8HIv8fR\nz8psxKOrppudoaSot887PDAlIiopKTdCQEFKQjowNDQtPV48fuBVXttWWlxOUEtY9df0y8/G\nurzNwcf6ybWxqZ+gn6Gmqa+7wvc6MS0qKzAvLjA1MywpKi0vLzg7Rk5TX2VjcfXx1djOx7y8\nu7m4ur/DxNBbWe7St7iqp6mnqK2yuM73SDw1MjI5NzU9Qz03My0rLC4yNDc6O0BKTFJ61cq/\nubWysLK2vsbL3HtbWU1GUs6+tqynpqioq62zvdBdQDk2NTc4NzQ0Mi4sKystMjtCSU5PXmdS\nUlVS6s3Hwb67vLu8v8TFzfdORkZeyruyramlpqmsrrG5yl9JRD47OTYyMi4rKScnKi00Oz9I\nTl/t3eby9ev5eN7Hvbu7urq/ytrf5vRratvHt66rqKenqqywu85ePzcwLi4uLy8xMTIxMDM1\nNDpEWPbPwsDL6HVrYGFv6tnNzM/Q0dflY1NRVVzv07+1rqupqKmqq6yyvdBMPTo1MC8vMTEv\nLSwuLjE5QE1bf+LwdmVmau/n5+XczsS6trrDyc3bZVhQS0tNeMS4r6upqqqrrbG71FhFPTk3\nNTY4ODg1Ly4vMDI2O0JHSE1RVVthbWd/1dDPyL++vry8vcPFytPd/mxke8/AubOwsK6trrC0\nvdFfRTw5NzY1Nzc3NDMzNTc5Ojs6NzQ1OD1GTVb1z8O8uLOzs7KztrvBzdzuY1Nb58zEu7ax\nrq6vsre9zF5BNzQ2NzUzNTc3NzY2Nzk9P0FERElQUlBaetfLxMC9vLq5urzA13pmUk1MVVtt\n28m9tK+sqqutr7C1wtxYQjc3Mi0sLS4tLzA0OD5KSkNCREpHQkdVW1T2y8O7s7CzuLq9xs/c\n7/Pe52JZ3sPBu66pq62rrLO+zGhHOzIuLSspKy8wMDQ5PUjAvzw3Uu5CMjx6XEZyvLzIu6+1\n3H3M3ExMZ2laadXNx7erqKaioKGkqa+750AxKiUiIiQlJiktMjpGVGVeZ2xiXVho8Obgz8nJ\nxcC8uru7v8PHztfzVUpHR0hJT1po8c3BvLawr7Cys7W9xdHyTj44My8uLzAwMTY4Oj9HTlFr\n3dXNycS+vL3G0dnrXU5KTFRia19e/+Hj5fx95t7d1c3Gvrezr62tr7C0ucl2STwwLCoqKiwu\nMTY7RFFv3tnPyMK/v8LHy9bt8fpfUE1NSUlKTFNeYW3vz8nIyMXBwr23tLSzs7O1u8LR6mBL\nPTczLy8vMTM3Oz9ESlBl39HJxsK/ws3nbFxWVU9JRT8+QENOcejUycPExL68vcHCv729vby7\nvb+/wcfV71lHPjw3NTU4Oz07Oz9DSVdv7e/r8ejs+uxsXVBPWVpZUllcYebUxMC/vb6+vby9\nv727wMnEwMPK2nRaUUxEPTo2NDQ2PUpr1tHLv8K+vLmqvTLxSjYiHCoqIR4rV01IvqmuwLmr\nrcLDqZ+lp5yYnaOhorZJOC8iGhgaGRgcJisvTb63s6mlqK2xuu0+OTUrJCcsLC4+/d3QuKyy\nwriyzebL2s+poauimZygnZ6sw1w0JBsXGBYWGyMlKknKuqyop6eorbjSSzcsJiQkJyovO0zL\nubmtqK+5tb3+XMSyua6fm5ybmJylrLw/KSEcFxQVGBoeKTM6d7Stramnqq+40Eg0LiokJCkt\nMkPNu7Oqqa+ssMnIZT3NxsyqpJ6bmZqcoa24Uy0mHhkYGBgcHyMrNEbHt7Ctq7C5vM9LPTIr\nKiosLzhNzbizrKisrbDA2FNgw73Cq6eknp2dn6Oqt1k0KyEcHBsaHR8jKS49ctC8trOvsbm+\nz007MS4tKysxO0zKurGsr7CwuMDT4ri5u6iqpJ+en6CnrbhbNysgHh4cGx4gKC0yQF5uwri/\ntrjP31g3LywqLCwvQlzJrq6ppKirqrDLzMbA2b60s6mqoqarrbZnPjMmIiEhISQnLDA5VNTJ\nw7q5wMPPUkc5Ly0qKissND5KzLKtq6irrKu3v7++xbystKimp6CmrbDJRjsqIiEeHiEjJS0z\nQezNw7y3uLq+zd1dPjEsKCYnKjM/acO3rqqnpqqrrr3Pvr/Is7mrra6oq7a7y0Q3LickICAk\nJio4Plq+vLuutby3xVU+MSsoIiAjJS09TcWvqqWfoKSoqrTJ8GrOctu+tLKup6mttL53PC8p\nIh8gJCctPVvXvrCvtbK1ymZGMSkkICAfISgtOHu+sqiin5+go6exw85XSte+1bSoraqlpqu1\nzVYyJSMhHR0jJSo++dm7rq2vs7jFSDYvJh4fIh8jLz5yva+opKCdnqSnqLTOzfg7Nz9APFXB\nubOsqamsra/AVEAzKSYnJiYqLjI2QlFMSk1KOzU1NTEwNDk+S9y6rqmjnp6kpKKnsbW8Zzw6\nOzc0OUtfU+bAw8q8vc35VE9FNS0vLSsvOT49P2/O1snJ3933Z1FNTGbkU9e8uru4sq611bmy\nzvDYW0c7NTxGSEHsek3T2Mm/xt/Qxmjv5Hp+UEZbdUhMX09DR0lLRkj5yl5S98nOcNPAvs/Z\nxdPx6dltSkr92VxS3OBTVvDRz1RQ30hLfW3Y4e5ed81M2ltYxP1Y2svq3W/NxslYfcteQUh0\nWVFP7Mt0P1twXWV22cjWaGZ32Ghx3W10Uf7h335a3d5iTVX42eDQysxeUN7E1lZO1upGReTB\n/mXX39j6dNDfVlT42NVjbORZVUFZXmJfeM/vXlfn3k9T3Mza3NXL0enOyr/S69piW09ITEBI\nPjxHRGTRz8vM4c3X3NTRydnl5F1WZNvKz+To0uFXXu5uSEVQWWRMRF/T+WRv7cTGXOa/3WNW\naNLuT0hN909Vb1/SU0p/2cvb4+F5zNnf5+PJ1MrQ4NRfZltYb1FVUdlaQUE+XupeXvzNz+/e\nzcjWe+LI7G/V3cjbTXDfTD1GTkxXVkpmXX5lafjiws/Mx8vCwLrFytJvfXdhUEo+P0RHTHBj\nT2b76PXcxcju3eNSX1dodVxg3tTa28/O6dFPSmNJSlFaYlpSYt/S4nHZys7K397N5XZiYPFs\nZXZxes7Z2sjc4t7d72VbUkxLUU9nWVVaaE5SWFdp1fFkXm/zZ2h12+Xn0NXO3tzP2NHVduPR\n7nZufGtPfWhR017mx+/r1OjQ2dXb2d9fV05AQEpKUE1EU0xOUk3+z9fr3e7e093Iy9bEw8LE\nysPeblRQSklXSlZrdtnP0OfX8P3hXmVrT29oc/NjYW9vau1URVZYR1BdTm/Y0+DV3s3U1unU\nz37Q2erz299jX1tPW2Jf3dBcbdPS2W9k7/r/T0JcZ/jvWWXV11f01d7obnHr3OlkVe/PTExa\nXuBJRmrO3HjTx8HF3Xbt6P5sZnDj4HNg4tt8YllLU2JTU1dkYfj08s3N39zU0M7lXFfv9GRq\nYnzqYFNe72BeaOXLx+pi59HnXUpNX2ZYXeLP1tvV0NPmW1ZjY1FPXvLnWk1d09Ju+9vP2WxY\neOh0eN/W5Vhc3MfK1erk7mtoX2f4aVVJSE9faVFNSEFASHXXd2zawsDDzcm/vcHO08e8wcvO\nz9lfT0dCQz47PUFM5svCv8fXZks/NzAsKy02Qk1T7MS5t7q2srjOffve07+sn56lqaiquT8n\nICAfHiArTrWpqKemqr1BKyIeHRsdJCs3S9q3ra62tbO6201KZ820nZeXmZqcn64/Jh4bGBcZ\nHzXqvK+oo6KrxUY3LiglJiw3QEVQ69fcX0M9QD86PlTVubC0tK+ur6ugnZ6jrK+zyToqJiQi\nIyQsPvzOxLu4ucNuRTs1MTIzOT5GTFRcVEhAQkto6W/wz763vMS+wczNuqigoqalo6evz0g4\nLycgHyIoLjhNz7u0tLzM81tGNy8tLi8wNTxJVujOxsrNxb+/xsO8uL3D1d/Oxr64sa6ura2v\nuMbgTzwwKyoqLTI2O0JLTldhZXHm4ef0Y1NXWl1kV1BSWF5jburWzczW1s/PztPd4eDa2tPK\nw726ube0s7W7x9f0WEQ8OTQxMzg6PT5DSk5NTldkY1tTVVZPWVpZbtzMy8rM1uby2tff5uze\nzs7O0M/GwcbKxL67ubq9xs3X7mhPRkRAPj09PD09PDo3Nzk8Q0hReNfLycrKycrP1dba297b\n2NPY29vh4O9wY19peN3Nwby6uLe2t7vDy+JURkJAPj0+PT09PTs6Oz4/PT1ASVd/2Mm+ubq7\nvsfN23peUlFSW3v95tzWycjO09POztXT0MrBvbu9wMTM22pOQjw7ODMyNjo+QEZMVWTp2dve\n29bX1M7IxMTGy9PpZlZMRUVGRk1Ybnnm2tXY7+bQycG7uLWztLe7xdD/TkI9Ozs6OTc2Nzk9\nQEdRW2/e0MjAu7e1u8PO335cTUVFRURCQkRISUVJV3jaysG/wMLDw7++vb7GzdHNysrR4W9i\nYFhNSEVDRURERUdLU1ZWTU1VYVtZaezne2dfZfztaVVk4trd5+vn3dLOzs3LyMnKycjCv7/D\nxsbJz9fnWUhFQj89PDs8PUFFR0ZMVV767dXEvru7wMrQ2HRQRDw6Ojg5PEFMZt/UycXAvr/D\nxcTGw8TIxcG/v7/GycjHytRtTkU9OTc2NjY6PkJLUV5qbXxm/N3U2fPy5Nfedv3l6HZeWVNa\naePPzM3JycvIycrKyszPzMnHyNHefFlLSUpLTE1RWWtmW1BPWltdWE5OT1pUT01LSUZJTlr8\n3d3p4tTJwL/BxsjIy8W/wL6/wsfN1dfP1PhYTElCPDs7Ozw8PUFLV2r+9ubd2NTV53t0X11c\nW2lta3h38NzTzc/OzNHT2NHLy8zOztfY0s7P4H5rU0pIS1FMR0lMUVZWT01OT1ddY2JlbXXw\n8OXSzs/S0M3N1trc4eLf09Ld4d/e3efvfW/9bl5fYGZnb3dlWVJUVE9OSkNCRktRX/bb0c/R\nz8zFxczS2dra09TY6OXpc/F2cG9+8nRfbf7i3W1jaXnz+3pxcvX2YlZST1RUTk94q64yOStI\n7z1MTFZvyby7vb/Fwb+9ucPX72HsyrxONSswOjE5St/b0s/DusC/zup/auDhT+HMraxHKyY0\nR7tk0rRidzo0Y9VHRU5W1sLD0c/PxcZiSG7T0NXayb++yvh+5t1oTEZMZ1pqbWfy625tfmpP\nRj1AS0k/QUhNWG/lzr/CwMXM1czXb23p6mpaWM66s7e6vr27vdBZTWvBvMz2WlZCLiUhIyMj\nIygzTdfMzL64usHKxr+9yu7nuaGXlZicnqCqZiUaFxkbHB8t9q+oqa2vs8s6KSIkJyksPcmy\nr7rVc09AOTI4RmTXy8K1qqast8ZeTlbOu62mo6WprbjJSi8pJSQlJygtPFfh1M/U1s3V71lN\nWGFiZ3L37/xjWGPi2tTV2d3d6W5bTk5MTFBVZ9/SysW+vL2/wcHBv8DBwcDBx8zYfVdGQUE9\nOTc0Mzg9Q0pLT1lpefx5XF/e19jc3tnb3/hufunY4flvXnbb09rs2szJxMPEx8jIyMjHxsbO\n5V5STkhDPTs8PD8+P0dd/Xrm28/X335SSUpUYGr85N7f4tbPzszHwsTKzdLRzcvQ5OPX3PhZ\nS0hGRUhJTVhdYmR6/m5v+3NoXFpeXl5bWWfp3uTo2s/P1dfTzcvP1tnf1c/PzM3P099wZWNf\nW1JIQD09P0hNSUpSaH5p//fz5d3Wz8zJys3V19rY2d7Z29vr49bc6mtUS0lITFFWYnnv7uLX\nzsjM1et6fG9iYWBbXWh3bl1YUk5KS1VXUE9PUl/q187Lwr28vsPKz83I0l5WYPvj53doXU5J\nRkRHRkpRWV1oet3Rz8/X2+DpfmllW1127eDP0NLZ72heaGdrYFleX2p3b3358Xd1cO7c1tnc\n2tjUysbN1elwV0lDPj9GV+3d2MzHyM7b3dzrfGVaW1dORD9CSU1OTlNfY9/Py8nCvry+w8rQ\n19XW297yaGRaUUpHR0dJSUtIS05TWWrk2M3Ev8LGycjJzNPd3e5iTktNSklKRUVKVl9r6Ojs\nfffr6N/h4eXr29PXz8/R1PZu7t/ndHRrcPtqb3tz7N3i4Ojy9mdPSEhJTUxLVvbXz87Jx8rN\n1eJnXWn62dbe3tjY3XpZS0M+QUVIS1JYYXffy8C9wMjKzNTf7nbxbmBdWWJveu19amhr+O7+\nX2BfXHbp3+Xs8GxYTkxZcW1fXV5kb3vn19LPzdPb72loanh4dHlvcW168eTg2dXW2+jweWhp\nXmnv+npfXl5gef1nYmfu5vphWlxeXlxZWGZ2/fx8eWzr4eHcz8rP297b3d7e4d7sbvd5X1RR\nV15bZvft7efW3OLh4fZhWlVQUFlaVVJYZW7v4tvV2NXU2+Dv8ev08+3z7/VrZl1f9+Dj8PTi\n1djt69vb3uh2bmVhX1VRUF1fWFFPT1Vo6+Dj2dHNy87V2NPR1uDe4P9yYVpUVmBaV1NLTExN\nVFlh5M/Fw8bL1Nfa3dHP3+N+eNrXTVJHR0tAbF1FS1HDvepi7cvIz97J1b6/VUUtLjZEW3b/\nctbHws158uXSyd3k1sO6vcfUzM1ZQT1JTUQ/O0pU+eff2t7O3ltOTU9NT0hEV/fIxthv9MzA\nvOg+P8+3t8HVy723u8tkRkZZ09RrUE7TuK+35zkqJyMfHyIpOVFYYFnrzcnfYNK/rq22rpyO\niY2dRx4dHh8aGyXNnZiduEMuKiYeHB4pZLOxzkg/ST8tIh8mRbisrK6vr66+YDoxP8ufko2N\nlqdMKBwWFhkpz6Kbn61OLCAbGyZ2r6WpuVk4Mi0nICApOVzrZFHmvcR9Pj/Ps8JKOsaThISO\ntSAfKiwdGB7Mlo+aXx8bHiAZFyOslZSkNCEkLy4nHiM/zMdDMDvOsrj8Q2WyrLRXLTuri4OI\nmiwcHickGiFBmo+XuB8ZGR8fHCH0mZGbYx4bJDMvKy1ftsM5Jy3tsLdNMTreraa3Rywts46B\nhZU0FRsfKR0iW5yNl7kcExkkLicrYZ+Tm8AeFx46z0k3L0pYOCYhMNyzx0VBz62jqts5Lz2w\njoOGkzsZHCUzJS5PopajRRYSGSg0Ki08rp6ozS0oO7+vw+1U0N4tHhws0bh8Li1DuqiqxUg6\nPlKmjIWKnCkZHiw4Lz/InZyqMxkaJD89LSg2r6i4OCIusp6wLRkcP8xJJyQ8r6rYMC/bpZ+4\nLSYuSaiNgoeTMRgdITgtTNufmqxBFxcdLDYqKjK1oarmLCvcpao0HBkvub07JS7VrdkvKjW5\no6XDPUtqxKiPhIqZJRQdLNM5SE2mnLQzFBUfPE8uKjO2qbVCJirPkYuxFQYPxJqnKiYrq7Yr\nICPApKHVMTTfrK6biYePuxUYJvHfUEnNnKOyKhshMkknHR01rqWxOigvvKrFLCEtyb08JShm\ns7w5KTS+qrLbXMSuwDsxs4mAibYQEC+zzSIhPpaSqx8PGjjKKhodY5qavh8YI++kkps3FA8j\nvqjNYl3TuTwpJjq5pKO0vGA9OzS1jYaPrB4fRtgzHyVMmpyxLR4pPEEgHSm9n6w8Hx8y2bWb\nmL0kERk7rrG/bkm+SjMuQ7eqrsbQT1g/LC63i4KLqhoZK0stHii/kpSsJhgeKy8cHCm8oKw8\nK026smI6QsCvxDotP/rG301PWEo3O3a4sL/IbEE4KSg8pYuFjakjHCUvKSc9rZiarjEhIigm\nHR4s17C9+GvdyVE1Lz3Uu73bxbm8cjo5Ss3TTDtHvbblQEBdXzklMKmMiJK/HyZAWyskN6qY\nnsYpJi4xIhgaLbeotPVxxbtaKSY8r6Kkrra/bDcpKDb97UY7RtTIZ0U8OT89Nz63mIuMmsst\nLS4pIy/Cn5ypVC0rKiIbHChstbfFvK6tyTMoOLyop7LNak82KCUvTN9ONzM7SFNMRFnT0u9H\nXrGZjIyYxC8uNSwjKVOqnqTINikjHhobJ++uq6ysq67KOy0xPmbe4czAxWo1JiIlKC89fbyv\ntsXV3dXW+c+3raKblZObuDkqKzIwLjZTxMJkNS4uLywnJi/graSntczyTDMqKzlwzuNaSVVk\nSzoyOEV9x7Wvsra7ydPW0M75WO+3n5eZqMloV0UsHx0mRsjG/1jv8EItKDN1w8xcVeLGz085\nNT5OT0hIUXj6fOHLx8HGzMTAw8fJw7u0sbK2vc7wTj08SvPT3GRkalpGNzI3S9vU32JWXFxJ\nPj1KdvNlT1zYxsfSd1NNS0pHTV/Xw7u4vc7b3M3Jw7y2srW4y1hDP0NGSUxKRT49ODY4Oj5J\nYNPMy8fHw7/BytbX2ndYXPTZ2uRcS0xOVlJadd7Mwb3E0N/q6ufc3NPUz87dVkE8PEJHSEpE\nQEVHTWD+7+Lb0cjExMbFwsLEzNrteGxocW7n8F9PRERMdsq+ubzH4l5hWmJq+uX8Y01HQ0NB\nPDk6PUZSX2hneNnMxsjKxb+9vb2+v8LGyttqWV3+cWxfVk0/Ozo8SGXg3trZysTGzNbY19Xi\naFZdZ2lPQj5ASE9SVFt20Mza4+nt6N3Y5Ojb0MnFwL6/x9tmWE1HRk9aWVpXX15WW2H45Nvc\n8/jYzc/Y3XRaV1VaVFRo+GBVTVBo6+Lf6Hji0c7S2NXLxsznamhobGNeXFZZWFBQSkdLTl35\n1MjFxsrOz9HU19bRz9nn7nhlUkpITFpYUE5TUFVYT1ps3tDY19bPy8vLzdZhTUlIT1pYUFVs\n19Xd7/ft79rX1tPKx8rR3eTq6d7qb2FYUk9MUF1ZS0dHREVPad/Mw72+z3z59Gxqf/D98Or+\nX1FQUlNOTFZ63tXW3d7a09XSzcvKy8zV4ubr9HteVlFOT1RbUktFSE9QUlh55dnPz9bUzszV\neFlWVVlZUVNk5tbXzcrIyt1vW2jt1uJ9a2l58e7/cO/se2pea2xZUU9SWuvV1uDj5unf29ja\n7HVrV1tfZXr072ZZUFZeZ/r97OPU0+Z8c/Li3eDi7+vr8nL+3djge11VXHBpZmh55+NxXVVd\n697c3dTPzc7Z8mJdWllNSUxVV01KT1ty49/a2tTMz9nY0s/MztvtdnVlWlZbYV9eXWNeW2n9\n4+LvbGFeXGjo2Nrg6P9mbOTc2t7xeP3f2NxuWFVVVlJXXFpdZ/n458/KzNLe3Nvo2tHcwq5l\nNzM3b0s/TlFNWdzOz9HMycvOz9DhcWzz2+lfT0xSWEtJV2rtdm/n3tp899rb3dzZ5ePU1ur+\n7ufb+Nvs6Xdb7VVQS05aXul0YVd+XWZ/3tTV79xdV+zg5V5a5Mi6ts3eT0RIVuXScUM+REtW\nbdLNzvVbW09NVG7i3Nvd2NrWzMbM22BcYmJhXvzZztfZ4PJnY2ZMR0pVVl5oeOvaz8vM0t3o\nbWdXYvLr1tjp9urqcldOUU9RV2JebvHl9Wjq2NzZ2ubm6eXa2OLZz9LT4XptYFZaZV9cXFdw\n8nv+au/U1N/sbWv88HRiWl1yX1JNVF1v933q2OFtY3DayMjKytp8cfDe92dzeO58Z2FcUFJT\nU2rr19Ta4+jX2t/i+nxsV09RTVttemtXT13g7nZzeefi5enq6/7u39/o2M7S43xz7t7e8mVX\nW15dUlZhcuXd19jd5X5rYVtYU1Vu9/Lm3d3c8OvX1NLW5V5VYH19aF5XUlxiWVBWZPrz79zQ\n09bf3NbRzMzvWFdhZF5fXFljfXpkZX7z7+vj5eff4Ot0b/zf5PXzemxr/W9cVFBUV2b87eX3\n+fj26fLo535fW1995+7s7ePU09/wePzk3+Xp5OzzfV5XXnFyYVdXXlxob23q39ztaWpj89jQ\n1Nl4YWptamRsdmZdWVtnfOrl8eLUz9Ld6PPt4tryY19q+Hlu6+Ds4+Z0XFBba2dhZ2t95vtn\nZXd8ZV9qfebc2dvc293W1ur/7uvo+f5qXF1XVVFXY2ZlWlJYZO3e3+ru3uLm4drT19na2d3o\n3Nrf4u/zb2BaU1JOUFlddX9oVVpu5Ofw5dvd2dbf5+jyX1NPU19kamls4tnd3+bl3tvj5d7b\n1tnmdmZ55OlrVlNdYVlaXXLe5/ty/N7f62tdWmF/6vDo19PR2u5lZmNhX1595fp7b19pamb3\n6XljaPfq8O/f2NXX5un37+Xo6fN7+vl9bWVtZmVra25mW+FnX1FUaXXt4OPd3uPg3dfc1+bs\n7NvU0dDYcVpWUEpMUlVXWFdecO3X0t7m6d7a2d3p4t/taV787nJoa3Ftbfb373f7e2hwcWpq\nefbp3+L9bfXp6fL0//Lc2ul09d/Z4m5cXmheXVtWVVdaYmv74dzo7urg2tbkZFVZdev6aube\n1tbe7Hzs7HxfU2L23dvp69/g6eHj7ujrd2JdYGRiYWVhZV9r6uxpXVhSVlhaV11s9NnUz8rJ\nytDc3+H1d3ViYmNveunqb2FeWl5eXGVxfvX38NLM0Nvq4OHj/VtbX1lWV1JZW15lYmJtbWNb\netjb2+jf2OH359nV3O39/O99cWBva3Tm6fFzaXNsWWBoandeXGNbXnR3+Gv93N3b4tzLyc7g\n8PXo6f9qbHPu4N/2WllVUE1LUllaYVxWYOXV3N7i29fc3d3x7OTe2+r5ZWBnYu7h183N1/Nu\ncG5pVE1MTV9ubWN63tjd29bW2et5b1xdam7z7l9PXOvedVVl6vZ+b2Fec+bpbmvn0NHv9tzc\n6VVZfevm/fDucGL61Mva921jal9q+npuUk5fYuPlemNOVXP//V5j7OP6ZfDMw83U19HY9mhV\nVmNsYUxOWHro7OTY411iYPvd79bMz9z54+lmb232eUxITlV1Zd3a6+R05eVr49bR2OrQ1vNe\nTE9dfexhWWR93u9zffrk1fPp7OTX9urn8mtOSk9R9+xw71p33+3b2srTZV5Z39ht+uLe32Za\nZ97W/WxQedd962hY8/fp4Vz97lp28ung/mt2U1v538bJ0Mrd6XxX81hXVE5OTGRcZmBg93vu\n4Hbc735xdOrg3mrt6fxsWd7G5+/fy7zoeGhd5EZGUll3Uk9g3+x+dt3M1Gje33ZhS2vpfux1\n1c7ndGJp+3hZclt08194bnvb3dnY/ulo2NHi2+XS0WlXU2z+SkdSc1dMU1zu19TK1Vzsb+Du\naNbJ3vdi2dZiUuzO9E9L0d7ZVk7d6OpMT9bJ21BP6dxr8eXYY03k2eRkWedgTVVaytdlZlrN\ny8zS32JdXVleTFhxX3fPztpeSWxtXlxb3eL9X82/x97ZytZfRmDje1ZPUO3efE1RT/3dWtHv\n08rg6U5VfW1kUm3XTOPc3NLnxNp2Ruvcb/dLXnf20cZq2Fnq5Ub2SXllP2VeTU9az8jcy8i7\n2dzfxsXtXmFj7VhG33F8S0Rf6dPoU+tt3t5lWUVaXV7pR1LDxN5N1L7J0ePqaWtcU0ll5OBK\nT8zeVPHWwNg/SOHQ3V9V2Mx8UvHP3M5N0tlezeHV+z9eXmRROmR0V29l12FI7dTG7lbN3M19\n9brVznduzk/M2lrcO0ZMO+1KRuhP2d7cyMvVZt/B4djL2MTu38g+PD5GUDtO5dRSUMi8y87c\n6ftHVMvVevvjzNB8519220NLUVS+/fR1VMjP3XpHUdrb7EZ66czcSv3fT3xyVM9Y4dTNwnZz\nXc98f0ti309ZP0bLzsn7eGxNa+JpZu7gztzEvPrGclhFN0j4bFjQ3sj+7MbvSk9F2987atPE\nvlTFtMpiPlBoP1dN61FOv+jcaczDbkJI/k82SkLe1mO8yNy+yrrCZchH1exYxj9DTjdaQEy7\nRz036L909te/xV7Ot7rE78m9505Q6dw3PVNMST5f2c3e/NLpRNhd7dtE6lrMw9rz32NuR9Xt\nQkpSwdh1zcrO2kruzWFbcWfXYvvF21Be3s/jQVNNcFpa2tlgdde9y2hl99tLQ1VmzGVZx8N1\nQnDZTD/nv3g8U7zAPT++vno2WL92UFp+1fLT2P9WVcfmvm3Ov9rHSGbYaE45Ot5eXnxS3kdR\n3GXZVUPRyk1WYbe8fcTExnXzw1ptWEthP+3oUnNXzsldzuHsdkxDQeJTUklPx8VDSsu+vz9V\nvcpaeMO1Q1zI0XhEZXFMQ77TUEBTuFA4RFtPS0zwwc7Ow768xszQ9U7CYl1BQMjZYEhIXXU/\nS01e20VV0dZT6t/Kfc67yszSvtpKcbtYVULbyDBObGP3PdLtR1paxGY4yLu5yErT3lxwUlxU\nW3tt18LacGrZSD9hxss7OMDJyNRZr+bSYFPPTXZCTHVWV0RLVM/zz1r3tFVISeu79TlqwMJP\nXcTB6FRiTklOQl3k48vhw8DSTF7h9kxMwrt9St+7t1hOVfdLMUBLSUlE4b1E0c1+xE3Iv3P0\nVb7KTtHPvEo439N8N0FVeU5ft7r3WOC/zTxd/FxIPtjDeljPvmY+VtNsQkTf11fEvr/C3M77\n7VZTQ0dDTMfgTtXP1uo7xNc+T2153uljwMvow+TH10FNTFtYMU/w0ulOzLnYdePQzT/R2fPh\nPMLFVc13aNM9f1c12dDK4D7Ky1d0ZM9fXcHMTF1NzGo9T9lxfllI1s9+eNLBwN9IycXny2z9\n623oTGZMS1NG30JsTUXfQsvpY9/GvrrBwMnV7jvOSkc/P8P1PmrCsVg013feNjRoSsrM09m7\nrL5o/bzJSUZKS1tvUuNOUupR0154U3TNe9pDUWPwzlHR4/HH1M3mYtJnTM3NwkhOxGBTRMbw\nSlNATUZW4mB9vPTL1dLG3lW+3l1dT8nlYEhLXPhdXkR72mLIb9/qeNrOT1RIbMRYVNazvUr5\nzsRKNWbZRkZO2r1K5+pB2kRleEm/01fb2rvMN9284m1M4s9CTOjey8fN935O2mRF3kNjUj9V\nUNLT2tJjy9hn6EfvXVq9xs/JzMjLVH5pQ/FIcj5LUOpoa7/S6VbRz1Jc0cvcPEHaRd9xWsNP\nb8rz1N9XzlpGUnG/b9B8ysji19vYTtFeT0hcbVBQTsthQnNc5dD25t94yd/t9FzbztTkbNTM\nXuZ2TFVDVk5CREnY2GTa1s/A9f25bU9oSr5ZUMTr0NVOzWZC8UdRdG/Cb0jjz9lNTOf2W+Rh\nz2Rdy3PFYt7IVV1Q721HUFjo7XbDyfnJ2NPuW9XYTUdCQ2Je3etO1s9eSdnVyn5QftLdfM3B\n621348xXQ8/nVE1IXetqU1dDSnXW1Mzdvs/21Ne/1lTfzOhHP1Hn+jxmx/tRSl/8REbRzez+\n07/g4s3R51z30FY6c9TYUlLF3FheYddkQn7sfuxtzc/cyMn82NhyVEFHW0FI7PTjam3R+U/+\n3s7/WU3R18/YXMnM6nBd39FOb3Zt61TYzHVtaufZV1R6/HFkW3hnVPjb6nxWXe17WlZU++ls\n3c/c3OXczeHlz/LiZWrjVlV96ltFTtjjV3ngzNTrz31Y7N7S2m/hfWF7f/lXVV5MSUxi7GF1\n19zZzdbZ9/7T18/259Haz9bwX1tjU0NISVFv8W9ZVm/hftfV6mtg4dDa5O3f2Oz10M/mVltf\nSUNd33ZWWczK3urPxtt68ftZSFvt3HtdaPnr+VxSVVd8ZVBq3MvQbuHN0eFfYG5eYV7j2O18\nfOXn62tr3WxXW1Bs6d/V4vDk2ezw7eLtWVxvXVZVX2laUmLt49fW0tXd29TU2/Xmc25hUlZ9\n92FQSVddXmzt8u7mzMrZ29bN1O10ZGNs/GVefHZpXFBPTVNo/+366fPs7d/T09PQysfR2dTZ\n/FhOU1FJRUJMXPr0bWBv4fv9dWt89+bZ3dbTzdDU1d7V2uduWlto6tvf/nh963JVS0lNUU5L\nTVt549XX5evUy9Pidmx1593n19PO1G1dWVhiXFBMTU9TXHnYzMzM0NTW2Nfr+vt47OZ2bGNa\nU05OTUxUXGpod9/Y2tTO19/zbG9sXWzv4d3Z2/T84+Df8PXqb2pnbF9bY1tTUWFo79zi5PH3\n5/NdXG3v49/l/Pvm3uhqYGvt4uR8cGlrau7f8eHc2N/X2c7O5WNVV1BJTVpORkpf39v5/O7d\n3Op05Njc5uzl2uro1M/X7/vi2eHt4tjdXEtLWWBfV0tT/t7qaltgbvp0UE5h3cnGxMjdeHRe\nVE9c7PNtdvFUTElGSk5v1M7Mx76/wMLGy9DT9XdtVk5IS01KSklUTFdh79XQ3lpcTUdDUPTZ\nycO/wMHK1uLd23dgeu3v4urraVxhWl9m+u/e22loX09JREJBRkxYa+PMzs3J0s3Jy9lnWVBX\nZOTb/Pj44tfT22/h3tPbY2dz3flbb9zV7WFbTlBZZuftZl5ub+Th6HNjaWxlSlR4cvnZ3M7I\nzM/V19XjbFJNT1FcVk9MT3n0+Pfi2NbLy9HUcPvg/Ghed/VWTEhP7czL0vlsYlRiVFBj7+DR\nysrdc2jq5t3aY93c7t16clFYaGhfW2hPTlVd8Xrf6v55bNtgVFZb59jez8/Z0dbP23vg2Fxe\nY/fYftvmcWFcZu7eXVxZYlVOWuHpYXXt7uNg5NHSbWPnbl5TZ3Ps7nPXz9lmVX5dTuLP0N1n\neN7c3NXP2f7k6WROR15mT0ZdVll8Y9fn3MrKzNfKzsvOWk9LTU5KZl5aYW3R9mJh4dRSUlt6\nxNPe+HXqek1KVn7Yz9LOzNx+5OFh8Pnd/eXTbFlMTlplZl7Z4n3oTfrUTU9XYc585MDq3sbN\n3/pP9lVBRFx4aFNZxcjfWE/vUEJT0M25v+dvUl9Q08XMUkzXyWRJ6tBXWu7Q2M3CUkZE3HxM\nSP1uQE12ztZs+9hyWmVV9dvP7GNizs58eePO215VYFhGWunI3ejdzcHYdk9S0OFbXurfUFJ5\nXshyRFNa9u1GR+r0auBu7dh1XdPi0MLqacjC01xKXG1VS2Ta4eLS70lGUF1WT23i32X6z+bi\n7W/q3mzz3Vv83/nnTktsz/1YatLK3Vl2z9ru82RlX2RbYGN42ula7fRzdGvm4N3s3tzT62N2\n51hYTUdWWk5MT3j8eX7lZF752Of4387DwcnLyb7E1dvQy9hw8MzSdlNUZE4/Ni4rJSQoKigq\nNO+/vb61rbC7uKujn5uYko+UnKa5/TglHh0cHBscHh8cGBUXGBcUEhgeIyl1qI6AgICAhYqN\nUg4CBg0RHjiVhYKJk6pfGQcAAggMDhcuzvI1Li8gFREWI1iqioCAgICAhY03BQAACAwXQ42E\niY6ToB8HAAAABgwQHnywv1A0IBUXIixlh4CAgICAhI8PAAMDAwYoiYCGjI+Yni0BAAQBBAot\nsLZUTksjDwYKERgk9YCAgICAgYa2AAAGAgUKm4CAgoeLkzoAAAAAAAMcpaG6yq5LFw4VHSQy\nT4KAgICAg4a6AAANAAADl4CChYyPmEQAAAcAAAU1lrBGu6kkCgcNFBsmPYCAgICAgoW5AAAc\n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\ngICHqdC6HwUFHBkPKZiTmaSWmU4aJRsPDhciKyzHoKzT/zodFhIXFxQaNkNGnYaAhISAgIql\nrUsOAAMLCwodqJeblIuMnuxKJQ8ICw8QFCi0qrOsp8UxKSoqIihFz7+nk42KjIyNk6HoNCgj\nGhokNjI6Ybm/SjlnUy0jKzYwLDZURzo5ODIuMjpL+8m9tK+2u769vMjOv7u4r6mlpaiqrLPF\n1OxPRU9fST04PjgtKy4tKiw1Ni8zPUI8QEpIPENa8vK+raqqqq23v8b1QD5O3cC3rqqoqams\nuc3wUzsvLi4xNz9HU2FVTkQ5LywsKykrMz5U3si+vri5vsC+02Jryr69s6ikqKuqrLvadEw6\nN0VQRlfVzlxCSUI0LC4xMTA7UEpH6PZEQUlFPjtE6dPEsKqpqaipssrPzlpMaOzh0cK4u8fL\nymE6MDExLi46PkBb0NLoW0dAOjtGRkRd1MrEtK+ys6+vutXd90tETUc9R05OVN/N2Pvk5kxB\nR0k+Qf+/ureztb/K5k07Nzo/Pj1HdszJvrm+x8rRTjo5Ozo6QFTszcG8wc/SzOBYUWrr3MG3\nuLm3tbzbS0I8ODMzPVDCSzVDQtVXc8bsVnjY8Hhf8djd29TLzMnVyMO8rEQtVkhSOuu13U29\nrtFJU1NBOFSmqk04LzYrJTo2KTLYvrizp6CqtLW2urbJ7DErLCwyPmPJyre1vMLObE9IODc3\nNj1KTVZYV2FYTPjS2se1sLWur6y72+5VOz5YXkdIT01MQ0ZYTEBJT1P208a7wsm9vdZaTURA\nNTc/PDQ5QUlf7M/Jvru6uLaurKusq66zus5oS0JCREI/RE5MOzAvKSUjJCMjKTU4LTFMR0B5\nu6ecm4+Lj4+RmaTaKCMaFxogK3y9r6mrvGg1JB0YFhYYGyEqM0rm6FlpUz4+t5mbjomJhoyP\nm8MfHxANDxgeScmkmp+prOYpHhcWFRYcJys/62dadGE7Lio1NNuZl46JioeMk525Hh0SDg8W\nH03Jp5eeqKzaJhwUFBQVHzQzVra5ycraQi0nLCs6nZySiouIjZKcth4eFA8QGB9A6aeZnaSj\nui4hGBUSFB4pLG23ub63ukozNiwfJ66kn42MiI2PlaMyKRwPEBQZJkivmpybnKpSMR0VEhMY\nHSU5UGbNxWw8OSkoJiLGn56Mi4aHi4+Wxy0lExAUGh81bKelpaWtQC8fFhMUFxwiLD1U5eZs\n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\nBggRKcGuopyVk5vKHRANDxMZHzLIrKm4SisiHx8kME7DrKWmrKiRg4CEjqGx1DYWCQUJFzqt\nopybmJmmNhQNDRQcJS5krKCkzygcGhocIC5cuaiiqK+fiYCAh5atvlUkDAQEDy+ro6Kdl5Wh\nRRYNDRMaHy3rqJ+l1ycaFxkaGyNFrqOgpa+qkICAgI2hsOwqDgQCCyPGpqqfmJOeOBQMDhYe\nICvfo5mg1icfHhsUEhtJqKChpKemloSAgIyhvdgmEAMCCSPKp6ObkZGcLxQNERkdITC1oZ6s\nfSseGhQREx1Krqelo6Kon4mAgIaXtb0sFQQABRnLqqGdkZCbORUOEBkdJDmsnqG2PyogGxMP\nEx9StauknZ+yuY+AgIWVra1TGQYABRRJv6ecjo2W2BsVFRkYHC2yoqzNPDUnGxEOFSNBvq6o\nnqCtxqCHgICLm6WoKAwAAAgdLu6lkYqOnjglHBgTFB5Pqau50uFDIxgTFhwoPcWtpp+oxk2e\ng4CEkp2Zqh0HAAYQICXNmomJj6dWLhoQDRIgb8TNzsC8SiUXFBccIS/psKWmqLS1joCAkJuT\nkU0PBAkPGRUfp42Kk56tvCYQDBEdKC0157e8RislIB0aGyZUvLWspazAxI2AgZGXjJA7DQcN\nDw8MH6OOkpSUmKsoGBYbGBgdME5PRUpoNB4ZGR8mKjLbrq3GQtCHgISWjYCLJg0TGAwFBimn\norCRi5G9MTMtFQsPHSQdJO2uwi0nLy8hITXLwcuyqazNZ4+Aip2Qg4w3GywrDQgNIjM84ZiR\nnLu9xy8WDxETExcjNT85ZLnEOUO/s7e/r6eiqKqioLS3mpCfsJ6YqUFEeTojICktJiAuaE0y\nNT0wJiEiIR4eKDQ4OEq9rKeop6ajp7Csp6uvraWuy/na40Y8Ss7P2+DG0l9GQ0pMOi0sOjw1\nO0E/ODk2MS49atDEvb7Bwr3B4tC7uby0sLfOz8pQOD/Sym7nv77M92D3WkU9O1T8YlpfYE47\nPTo8S9i7wcrE29/eU09ITU5evba2yca97EY/TmZJV9nO2nbqzeRIMy9TZPFoxbzKfFZkSs70\nxMrcx2bO0W1HPXBa4c7X9tPZ/2zyzNG/yN7ebm4/WFo/PjdAQU/gz37S8UFNS3jPyby9uLS1\nwsK4skEwx0FDWTVEPCtRUUq7vm/Ivd3dWUdWQzVNTVvFy73B3UPg5UV9P8vCwbqwt7e1bdNe\nQ1c/VlJNPT9OPVZLSG5V5t5Z799b8+g4QltSYtzm09tgteNPy/jSuvDXycy5x/O4w1/MYVhn\nSD5KPFzYT+bTWM/iSE5KTk9AMEBAPlc/UX/LwLi6vK+3r7TS7tnqTld4eO36S08/WFU+TkpE\nVtzuycK/ye/Fy37ZUD5MOTtCOktLSPX+1sXBt7m8yMzP7NN239LeyNjZ41dPTD46OThGSezL\nz8bCxMTFTEE9Q1FCWV3iy7rAz73H5fHY8mVr6Pdd21BP8N1hT1VTTEdUS0FV/mXez+3SvsbC\n0/RrTnNMTlZf3dLMzr+/v9B0XEJDT0w+XeNnZ8/RXuvQ0tnVSElUWf/vysHEzsndTkxDPUZG\nNzpETmPpwsK8sr7Pv85dzt9OXXHkd3j56Ezcy1BPYkU7Rjw6V9jRz8e9wcm/71JvWk5e233v\nxb7JzMzN2+TUT09sRT9ORj0+Pjs5OklFTNpv9tfUzMO+x3zQxrm6uK+xrrW6vMTT7ultalVa\nZFRDPTYxLykmKCUoLCs0O0FTT09TSmW0q6qclpaWlpierbfNPTk5N0BUW0Y8PCwiHx0cHR0e\nISUnLTxHR2ll9cnLurOim5qOjpKOlJ+o2D4xKS0uLUBHNT9CKiUhHBwbGRwgKC4zOkld2MPF\nzMbGwrKypJ2djpGUj5qfpr0+NSgrLCcyNjVHQC4sJx8dHBwfIycuNT0+PUVOX23n0b+3r6uh\nnZyPkpSRm5+ovE9HLS4tKi4wMT1BMSsnIyAeHR4hJyorMjk+Unz/3cTCvra4tK2hn5iRl5OX\nnKKt5EQ3LS0qKy85O0I+MC0qIiAfHyIoLS82OkRb9WVYWFz82tPLwbqrp5yUlpSWmZ6nt8lV\nOTEqKCwvMzs8NTYyKiclICAlJygsMjpGU1Vi4c7N0Ol+zcbCsKecl5WUlpmcoa2+WTktKCks\nLzY9QD05MSkmJSIhIyYoLDA5QUNETVRiaF5/9/v93bihmJKQkJCUmqGswkgzKSMlKjA7SU9F\nPDEpJCAdHBweIikuN0NOV3bcy8XJztXi3NvAqJuTj4+PkpefqrxMMScgHyMnKzA8RUM8Lygl\nIR4eHyIpMTtCTVlx2NHTzc3Kv72/wrqmmZOQkZSWnKexzD4uKCEfIiYtNz1CPzYvKSMfHR0f\nJSguOk7hysfBvLy9vsHIy8a+u6+dlpOQk5aZo669Ry0nHx0fIyYtNDg6NjAtKicmJygrMDtP\nbX7VzMvGx9Xv63l+z8G4ubakm5qXlpian6u0zEAyKyIhJCcuNzk7OzUwLCcoKCYmKS04SVzl\nzczMxsjW2tHNyszLw8bAqJ2bl5aYmJymr8FFMSskIiUmKS41PkU/OzMrJyUjIyUoLjhEac/N\nzMvLzcrIxL6+xcXKzrOgm5eUlZaXn6u1eTMqIBwdIiYuNjY7PjgxKyUjJCUmKi86Tm7p08a+\nu7i6vLu/wsjLzNPVxa2inZmYmZqdqLLGRzUtJyUmKCswNjY3MzAwLSkpKCcmKSw0Qk1tzsW/\nvL7Cv767t7vDv7/Kx7GlnpqYmZqcoau20EMuJiEfHyInLDI3ODUxLyonJSQiJSkuOk/Tvrm2\ns7Cvr6+1ubi6u7i6wL2vqqSfnZ6foKi3zk82LCkoJiUqMzs8PTw3MCw7MhcUHisfHDa2zVms\noKu5qaa1yrersr+2rbO4ppyio5mXnqiosT8pJyMbGRwjJSc0XVw+Pz0uJCAgHx4kM03PtKqn\nqausr7S5ubu9urvAvbq7x+TTtaapqJ2anaqvuEwpIB8cGBccJzE8Vr63vM1WOiwlISMoLj30\nvbe1s7O5wMXN39fOwrq5uri1uc5fvJ+dop+al52s0josHxoWFhoeKTRJ1r68z1lCNSwnJCUq\nMUBlzr6zsLGvr6yurKuvsLW4wt9pTUQ9OTxcwLauq6ilpKi2+TwxLCcjICQsN0FPX2V8+mVQ\nRD09QEdEQ1xrZvFe69rmwsjCv8bCzsrP0s7wXFLqua2pqKSfnp+lse1DOS0kHx4fJy4vNUJd\n5VZDQURIPz9OTEr3X0d8X9128MnNvb7Av8PBvsjJd1Lo4rmsrKuln56gpa6/bDUlHh0cHSIn\nKzrqv7u/y8vbSzYvMjAuLzQ+UWTXzL+2tLK4tre4ydrYYP9KSsyonqOgm5eZoLLcSC8eFxca\nGx4lM26+tLKzvVY5LyomJCguODMw6s3Jw9m2trqtsKuvs7O8vmVFTa+bnKKckZCbrtBWKhYO\nDhMVFBkvva+vqZ+frz4tKyAXFRwpMDbpraitr7Gzuv9fzsnVx7Wtt76nioWamoyInCYoLhsI\nBAkSExAatpmgqp+WoEwhJCQWDhUrOjNKqZ+purKtyEZCTEtu3bCrs7uqiICTnYeHjygZSREA\nAAgTDA4pm5WlnJGRvSgmJxMMDxwsJ1ShmKGtpKXOLy5AOScr3q+8UM6YgIC8iYOHsBfaNgAA\nCBYOCCeYjbWei4zaHC8qDwYPHSYeRZyVn6qfpV0qKCgtLCw2w6mt7biqloCLpYeFiykvsBcA\nBREQBxK7n6a5kI6gK0VDFgoPIhsaPZ+dqJ6Ynu1F2DIdIjowKk+vxFzMwpmAjayIg44huKgY\nAAwWDQgdsLO0pY2Wt0qvNhAPGxoTHears6qZma9VzeIlGyU5KiJLoK4+vKm7kYGbm4eEqTOp\n6g8FFBMNCy25s7aakaO/x+MbFBobFRw93LionKCzysE9Hx8qJyY52q+yrqCoVcaMhamehYi/\nQpvsDAcdFAcLQeQsxpSUt7SjyBwdKR4VIPxSXK2fpre5xzIhKCggLFttzbSlp7rF252PmJ2O\niJmmqKceEBIWCgoaLy1HnJihqqO/KyEjHBccL0dCsZ+pvK22LiYuKiMz9lZYu6mxvb/MnI6V\nn46Im7CppxgOExcJCx85L8qYmKCrob8lHigbFCI8PDuunKexqrIuIigmHSA8VzvEq6y/uKmT\nkpaUio6hoqfmExYVEQoVJiwyqpqhpqCnNyYjHxUXKDAzdaifrbKt0CkoKiAgMEtWyq2mrbK+\nrZiUm5uLkaCooVEYGRwUDBotMjGon6u0rL4oHB4dFhoxQ0K0nZykrLDfLygjICQuPfq9sain\nsMXSpZycn4+OnqGjrh4dGxoOFicyL7uerLessy8iJR8XGipJSLmgoKmrtU4pJCQhIC1Sdbep\nrKust9S4n5qcnI6RnaKi0B4cGBMMFyArLLWmr7WsyywoKCEdKkLz4qmfp66rvTsmJSMgIzNh\nXrutqLXEt8a/n5iaoo2Rna2j5xsYGRYNGSQ1MqyiqLKsvy4iIyMeJDfNyrKmpaqzzzovKyIj\nMDlA3a+zv8G2ujLmpZuZnoyOmqahvRoXFxgNGSZIO6mdpba7wikeHSEbHzHQv7Ofn6qy0jos\nKCIjKTJR0rCorK6uqso6rZ+gnZyOnKGurSkZGRYSDyEqSnKgpKuwrNEsKiomICw/xrWxq6q2\n3kYuKCUkJy87VsCwsrKsuNJvv6SklJuRkZqlxtwbGQ8YERkjdsu5oKOpy7tPKh4kJB8pR7y7\nr6qstNVQOi8pKTE8Sc61sLC0srR3RLGsqZ2ol5yisrtCHh4YHRcoMLvKqaSmrr3FOiweIiAl\nJzdY1cu+tsT+5F03MzpKSPm3sbeyqrDPVamhtqGfnqGuq3c+HyYbHBsjLT/Bu6iurLrCQDgt\nJiUpLzBE9MC5vMDF1V1PSDg9St/Tx8PGwMnVtq6unJqqnZ+qTU08IRsYJR4nLbm4sa2lrNJR\nSz0mIicvLjZSzM3Rvb3fbN5rPjk/Q1Bl1sLE0byqqaWYmqKapKo+TScfGBsfHiYvyte4u6qv\nt/1uWTgtKzc1NTrdx8/Qv7nE1fHmWkRAYk5CTNbGwrq1qKKmrqmpssjdcz4vLC4sKywyPU1h\nYHLJxM/q2/1cWllMPT1DSEdNb9be3s/W2+XX2X9h99fJwr67uri6vMLK1djW0+lkWktRaVdH\nSVZQTEZOS1FaXl1VWElCOzcyMzo+P0lf2ci/u7u/wr++vru5ta6tsLa1ucLbWkxFPTk5ODo+\nSUlKSklDRkA/Q0ZOXfliXFROQ0BDSlRaedTAvbu4uLu/v769vbq1sbCxtLe93E5GOzMtLS0u\nLzY5Oj9JTUxNTEhPYebmz8K6u7y/xsXEzu1u8+De2NXf2c7a4O/bzMjDydbV0OZmWlE/PT47\nNzc7PEpX59vXz8/a+PLg2s3KysnDxcbIzdV0WE5OSkpSVltRXGB95ujv69rLxsTGzuVjWUg9\nPEBASU1Xd9nKxsnR1dTW7+1t+fnt4dnXzsfFz2lbUU1GR0dGTFFbY/bk1+XYy8XHycbJys3V\n7WRPSUdHQ0VIT1trX1tpcGlfbuPb73Jy3dfJxcnLzM3rWlZbW2nj7O9vcndrYmVrc23q42Nl\n39HY93f0ZFRZ/Wp+5/dwdH7y5+nu7Xx9cVhgX2Rmc2ldUVlm/W9kcN7Q0dza2dbY0tjp29TO\nz9ba3dnecFhORz8+SE5TVWnf/vHo2tXd8mdlcVtQVlli69fS3+ff2t7o9N/Z19Tg8fvu6+xo\nZfna2uLvb1xYV1FPUlVm9Glkct3k4dTO2PD+3vx4cWFbV1xaX3Ry8Ofa19bP0dt2W25t69rr\nY1Nc++nr7d/ief74cGNubV5XUk9UT1dr7d7U2N3X2dzl5O1qYubW2+jk4e92XlNPV3h+Y23m\n4ODh6mRf59fd2s/W4+jk625fVlBFPUNHS1ViXl/szcjHy83KzM7X293Z3t7nbWNiX1VMSVNU\nVmZeZG/cztHTzsrLzNTf/WRgWktHSU9RT1JXaPb/cWH23NfZ3t7z5Nff5+re19XL0d7nf2de\nXWBnbe7o4NTNxbJgIcjJLss/S75AULhOPs5CQdREQuBQbMbTyr/QxL7SydFp3HVv/mnf1WNd\nVUNUXlFz9U9zxFHOvkK+zFDDSWvOUV39T0J2UExiRVlVTWHa49O/1d3R2eziettS5cpY18je\nw9lJzc1J3fFhtUsrVT9TxUjAyEfBWk7BRE/YP2BSOblsSmNdwmzBWca+SL7eObNhMqsz2LMq\nqsIvqThavjHPSkbcTMpaa6wzra46rSMySBvRTTe8Ts2kOcmsOLNIPrVOy95M1bvcxjdPfT+4\nMlO5SsNfa7s9yGlNvX5Mw+zPwzbLzk63LVa/LO08S70txV1QuEZputm7uzSv8kOtQ9nOOthM\nP1zDL7bMOKwstbsyuS/A4DG9O73ANa4yvb86uTjSzEB6yjjYQjiyQ9DOR7NEwsBkwjvNVFNl\nZls/0drJT8fOZbxFxtI4uS7HSz22LLc+7rdDrkj35X1yZ0pKxUu8O83KV8M+u9ne2lbURFo+\n2tpCTknE2z3YVtjJS8jR0chNx9RT2T3i6ErTW+dPVV1JZeHLv+Dtzj/XXsq6TcnTx+xJUlPU\nSkBI2MtH/FnSwWfnbWNsTvZX8tPz3mns3VZZTmzod+Zc7UzOx0/YXdvOSO7Wwtpb3051UkRf\n8drP1NLaZ8xO+MrQzkxUTldLZOD4XEzs7Mj439XYyk9GT+pWXWp3fP/8R3nT48jgblzqxd12\nXe/M815cTk/uv9RJXdXB2k1Txr5aUXDTz0FAa+Z0QEdT9GBM4s3J7lFy//Tyx8bj4uvfe1jh\n197rUklk59XaXfPbWjk92sjZS9e9ytxX3s3nR01d79LKznpVUllq5Vo/S9rZ40r2y8vhS8TC\n3VA98tD3TEz40WBG1rnGTkz9xr3fSXrc20I7W21STmNlWFvoxOlR28fMV0P4vsL2Usy5wFtJ\nWv9IPFvJwM5tZ+LIXUFFX+dt7VZeWU9OQkZN28bS8lfxzsfS3svAydbl1HFLS3rT2HV349xr\nTklm1VRVVuhpT0xa23laXtHO6FNM79XH4FLYyNJYWGxtcFlq2OBz2n5USmPCwddhW+HdcmNb\nWvHqX0xf7tp+Tmnr0djS1Nn74+P+amhw1tXf3lZLVV1QS0ZMfN3w2tvy/mJe7tLY0se+xeRz\nbOldPkBRWFtl/NV5WVnX3GNp4ce/zd7Dxs7jXE5cWkpBPUzg4k5LT3F4ZmHizMa+yNz5aXZf\nXuHd2eZbXfxWTVBmXefPycXT29fS4XRaTFlrSj5GTlhX58q8ympi883fbF52fWVfYOnbeWB8\n0MXOaVnk6GNRTFZvdVxVVtvT71Vc1snM2N7YzNHnWVdr7exYS01ZXU9Z5NTg4+r4dWF48+nk\n725z935wVWFlXl93zr67wc3b5W9RSEhKT2Bv8d3vdl1XV1lUXtrO1WljbOfkZGTgy83ebmx9\ncGrt0tX9f9/acP7u6nJbYmJtV1lcXVJTWOPc5drf1MrO/Ftp7fJsWE9SWGJtX27l1M3Y4d7g\n5+XZ19jU1+xZUVFUU05PU09PWFxf5dDP0NPS0dTW3dja4Ptp8e59a11PTkxNX1lZdM7XXVD9\n0+Bhbc3CxuleXWNYT1V07vv1Zltb6tbU1NfW3Nnb1dXb7fxpXVlPUVZZWEtMXWpoUVH819To\n2cPE1W5u5+F43c3N19HL8E5CRUZGSmrR0eZe/d3V2/Rq9+djTUVPW15bVXLXzdf679DDwc/o\n49XrOUyxtMZOwbrOLiw7T0s0PXu17z084spbO0PBtrnFvLS58kpe4OleSlnb1l1JZu5eQ0Zq\n3lpKTlROTW3n0s7c/N/Iw8jP0tHM19XQ18vWTkZIR1JLSE1XWVVd+u1sauHQ2X9cZ9fO6mji\nz83tX9vHythzYNnJbmBHTFNMW03y7M75TGvQx3RJTHTWy9l87d5tTW3DwtVdXfb6VFRk9OBj\nXU9RX2puZVPpxcxYSVva9FrTzM5ue2xi5tHG1svHyPlXUFNPTmnhzNdtQz9CREhBTFjfxdNn\nS/u8vNBK78K9Xj5hvrjr9NC91EpBV+NIPT332lw/SNfHfEL0wcBvQk/kwcNaQ+6/zGpH4L/C\n90LuvbvQV0xESj09PFLoeMjBv1VZX8hcPELTvOBOY8XqWFzDw9BMzNleVH7Hflg84+/Pdl7x\n1MJKQDvky047Q8jB3U9D38i/c2/DsNg7R8S511BIyWRrR2NGTllpxuTz8v5SWWhaUVL7vdRN\nPezFzDs5xMRNOs2yslY+1LTEST1Fx85TP9W+x0xLyNXiTHRgamFUVEf1+2FCStvRVT71xXM9\nRMLBU0jJtb/33beuu+z5z8j2TWfb1G9IQV3lfUUzMTg2LCouOT5BRVXYWP/IyrO/sp+Zmaas\nnqLrISRCUUErzLemujQ2MUYnIiY9zEhJPUs8Jx8eKS89TMy1tbO3qK1ILl+fjoyMlaizNDMV\nHSDnubypvak/KR8eHx8vTPdoPFg/MS4tPzQ3PEZFOl7Pt7/Ms7XCv7XM3qqRioqkv9BbMxEZ\nI6e3v729pjUjGh4kJjhF19pb60E+OTM7OU5ANi484WreQNvZx8O/qvFnvo+Fh5xiv7tCERMf\nqrLM0refXiYYHicuRUm+usFrLysqKikqMT87KSo6zrbP/Lyqtr3CtLZKsZSEg5rSN7c8ERIb\nn62vVcylPiMQGSY5QjDNs7FOJiYnKyswVOlILzXiv8Q8O7qrumnAqKjBtZSFgpZDLc3AFRMX\nqqm6OjCuPiEPFzDk8DTrra9MIyYvOC8sRWdPLStOvrf8O0S4qb2+T8yrrpKGgJHmKFDDFxEY\nqqOmREOt2yUPFCbeRio8uK5hIyAqNTErOFRoODLwuLbOMUG5qLU9u66jrpeEg48wKUK8HBEa\nr5usVzC3dyMPESjtzi47t61sHx4oODArPF3NTDhA0bpJNEqws1a/qJun4ZqIgI8zJTyjHhUY\nt5evWyW7ySUQDibVyjMswrHIJR0oOEItL0nXRS40+brdKyy7o6xNxaWWlaeTiYeaJiFFqikc\nIsWhvScfMDEfExgsx9s6S9OyWConNXw/NjhlTC8tO8fHWzlD2q+tqrPHvJ6JhYmp81zKPBYd\nKai+ej1JszMeExsvYGc6Zr2+ZS8qLS8uKzA9PTMsMmbDv1k+SeqhoKTT4biZiImKqrXgyDEW\nHyKu7+5N3a8zHhMaKT5ENkzBtss8LTAvLikqOkU9LjVfva/rTnlSw7Kip8jCnoaFjcEwybo7\nExgrqqzYVsOvORwPFyru5UFsvazLNygpLi4sLTtRQTIvRtLM5UH4waaquMtavKWMg4eaQe+2\nWxcOGsuktUjYr8YkEBIdSNtJSsqkqc0lHiYtMyIqOU1BOEhhYkQ/zbi0p6qv3724mYaDjLg3\ntK02ERMrqp9cNUbBcBwREydoYjsyvKq/KhsjOD4oJC9GYj8+b73CR1LCr6uxr6+rrJ6Mhoqi\nQfi8WRsVHuOowDcwQn4uGhQdUMHQN0u2vEghIi9OPCgrMkM/OE1q6GBR1na5q6Wt39+0i4CG\nmSrrn6wnDBo+nKspMD6naRwPFDHvTiQlxKO0KhkjRkwmGyQ+vOVC+buvW1j2tZ+lqOe8t5uI\nhYqmSsCszhoPFzSv4jE2661bIBQWJjlHLjuyqK05JCgyNyMeHjDn7d9mvrxSX166q66qs62o\nkYaIja61rbdPGBkcT8ZUWDbfazYdExMaKTk4Q8e2rns2LCwwJygnOeLDvtnGw93cyMPAUvK1\np52SiYeLmbC9wzkeFRckSbm+xd5jRScaEhMaJjdDY8e2sLxWLiMiJSwuLzzar6istMbDuLm6\n7t28qZqPiYuSn6mrxS4aFRggLTtERkhIPSwgGxseJiwuOFq4q6y+TTg4OzUuLTfbsKiqr7W0\nr7LA7VTCrZ+Zl5ecnaKotGQyJCEjJickIyUoLC4uKyotLzEzOD9c4tfQ0cnAv81kXefHvL/E\n0NXh39907drAsKikpKaloqCjqa22vMxeRDMrJiUkIyMhICElKi81Njk/TnPr6vJcTFns1tjX\nxr29y9LJvbm3tq6mn5+go6SjpKmvu8rsSzsuKCQiIiQnJycoKSwyOD5LU2NgXltNQDs7Pkhm\n0cO/wMbGura2t7StqaOgoKKmpKOlrLO/zu1INCsoJyYjIiMkJiQkKS42PENV3MvO1/BdTUpY\n+tPOzsrL0ObdzcfBv7mxqKKfoaaioJ6lrbfJbT8zKygnJiUlJycmJicrMjg+SWXU2vpbVU9T\nWWnc3dXUzc/h6dnOzsO8s7Cup6KhpquppqWrt83+RzkwLSspJyYmJignJykwRF5lZeXPythp\nXVV/3uV2Zvvl2+3y7dXNysHCu7axrKilqKilpKSrt8l6Qjo1LionJycnJygqKy02QUxWWWfr\n3Odqc2zr3evy69fNzM7Mzdbe0MS+vby3r6ekqa+uq6qwxv5vX00+NC4rKikpKissLS8zO0RN\nV2/39Gd+4tnO2dfU0NHMysW/wc7m28vHy9nWvrCtrrSzr62vusTS9Es/Ni8tLC0vNDg2MzZD\nXmlSSEZMWVZbZ3XteHd6/uHW1NTY4tvc2tXSzsu+tq6qq66vsK+yt7zMa0pCOjQvLS8zMy8w\nND5Ubl1MRkhMSEpKR0lMXmdx5NzOzd7y/dLHxsjKycO6sK2rra6tq6qvtsDaW0s+NS4sLS0u\nLS81Oj5ES01MS1VPSklIRUJARFFpaV7iy8fFys/KvsG+uLaxrKiprK6trK2yv9ByUkI3Liso\nKCosLjI5Qk9QTU9KREJBQ0VDREZPU1Ve+tHJxL2/wL24tLK1uLSwr6+ytLKvr7O1vuBMOi8t\nLCsqKi82PD47PUBFRUFCQ0JHSUJARENJV1RdfNTIu7e4tbCura6wrq2usbOzs7a/ycvR60w9\nODUyMCwrLC4vMzlBR0xPWFtQS0xZWE9PT1RdYGRub/bczMa/vbm0sq+vr7W5ubi4uLm6v8/g\n7E88NDAwMC8xMjc6Oz5JXF5hb+7u5/lxcnl6bFxOTllj/tzf8OnUxsDBxb23t7u9vL67u77B\nzNXT31pKQT9HQjo7Ozo5OT1FSkhOWVFb/uvm6Wdg5Nbt/fp85OBydtrRy8PAy8vCxMvEw8i/\nvr/DzdPP+VBKSEBART48PD5GSk1LWlt9evd0YVpmYVhzWE5YW1Jb7ePOxsLAvsDFw8G/v8DI\n0trc3NroZFRPT01LQkZHR01HSEBBREdKTVBq0c3R2d7Yy9Hj7Wz409Xm7NrOxcXNztHR0crM\n1NXT1N78aldPVFBFQkREQEFDSU5NUFlUWPfd08zM0dPU1MjGydXf4N5gV1ZaYvHs8tXMzc7Q\n28/ecm5XT1NsbGZWU15oY0tSWl3q4ft07dzd6WNlbXZoYlZObd/f3unsdm9mZvjY1trNyNXP\nzszO1Nbq8OpnXVVXVE9OUVRRVVRWUllfdOv05t3f1NLubWlaY3lr6t3c0t9qZmVfb9z/b27v\n09naz8zZ19bj7eXuZ3RhbtzeX1BUVE9QU1BPTlZs/v7Zzc7nbGZq+tjX33RufPH8dW9t8mxe\nX2jt9+Xy5tbS0s/N3d/X1NfY3ntaX1tNTEtNZFxNSUpQYfvu5e5sZGFtcf/q3tjb3NHKyczU\nysjMyttnVlxt7XJvbGRZWFZNVfXgfVhRUVRWY1xOS05edHri2dbW1tDNz8/N1dTrfH7l3vD9\ncvnzcGx773xz+vdzf93U5fd8Z2JYTUdGSklLUmvu5tje7t7a3OTs8OjUy83Oz9Xe4+x2YltZ\nXlFKS1py8nBu5tzW19/f1NLZ4N/f5XFjZmJfWU5NS0hKTVhldu7h4u/p4N7a3eDk3NLQ0c/Y\n1djr7nb77unn/2BeZGhcWGl5e1xSau3l/V9VYHn7eWVxaWltXl1m7PZubnvb0czUf2VkYF1d\naP7h0dHc4tnX0dLf7fjv59/g3Obm7W5iWFNNSk1QT09VUEtOUVNacdvWz8/OzMzS3NrU0tj4\n9XBufG7x6urf2Nz0d3968unr9nRjVlNSaPBwYltaXW5rXE9OUFljXmrt1tHV19XM09rc9f9w\nYmB43dfP1uHb3dvY3+VwV09ZW19lXldXc+PpcXtyZ1xbWFRbZnh2aXL67+Pm39POztjY59rP\n0NLe3NvuZFlNSEtXXlhUYOjYztHVz9PccFZPUVtUTk1UXmJlXWr58Ozh39vX2djSz8zMzsnO\n3djr+m9gWU1JTFRaWmr0bV9bWVhc/N3c7mt+39jS1+Hk625PSUlTYm/u9n7z5drU3dfOzM/Y\n2+jz7+Xuem9oaVtWWF1ufmJeWl5ranJ08+rl29zl5+Te7HRkZmZbWlZSYV9iaF1ecePQzcjF\nysrMztzn6u92X1BNUVxfU1VXW11jYlvtz8nIztjk8H5eV1VUUVBaWVds3+Duf/Pv5t/n3+Pb\n2NfnePzr5+378OPj6GZZVlxnY2Rkfezd0dHW5ndqYV1PTk9Ycvp4bmR56uvp8O3s7nxs7d/V\nz9np8ezf42dacH30Z1tWV2by3uHs49jb5H5wfm9dT09ZX2ZiWFNo4NPV2NXl7tvNzM7T22BO\nT09QV2Xy4d7a2Nve8vn2bWdkam1+9/d5bG9tZmxwYVpcZGhueXdwX11oYWzf2NjW0tLO0N79\nbXDp5vLm3uHub1tXYHnrdnP08uTd4XJbV1NRT01PT1ddYnvt2tDR2d/b1tfb5/r06NrW1t3v\n8enc4u36bG9uY11aVlpXT05OT1hsf/1zc3507NzSzMnO09be5O1qU05afeHj6Pf87eHg4OHq\n+2ReWF95b3VwaGFseXJwc/Tf2dzpfe/n3extbWZuc2RiaWddXmzw/2Vtd3bt7Ojk6/j/4tLP\nz9HZ73VrXVtbX19maV1abuLa2d7e4uzq9XR8b2ZsaVxVXGFfVFNl5NjY2d/f1NDX4n5xcl1S\nT1lve/58eH/r29XZ3dzi4Ox+e3118+59f/V7aVlVYXTv8mRbU1dkeXlqcnBwYV5pdu7v7vPe\n1NPR1drd2NTS2/tqX19saFldavXoaFxba+/i6mVYX3T9dHLq5/ZeVlx34tzc29rY19XV3OZ3\nbXRoYlxbXmJaW2BubV9bU11e/eno6N7V3NbS0c7Q1dre92hZT09RU1hdYm5lXlhf693e3NrX\n2+pqa3b99HFzcePX1Nne1dXS1epuYFhUT1RYWFxlaVhUW2nk4vTx5On+b2hp7uHi8PXYz9Ta\n3NXQz9x5X1BRW2VoYmFdXVlVWFhk6+duXWjg1dXb2M/R1NTZ3ent63BaVFJPVVVWWmzi3tne\n+/7s5O/8/Ovc2N7f4N3d5uLk5/D3aFRNS05LSk5OV3Pa2Nvf5tvc4PJrZ11mbmprbO3f29je\n3Nrb39zW1NLT2u18f/hyb3NoZ19dVVRWVFlfW11ZWltUXGVdY2Z37uLPycnJzM/KydHZbF1i\nVlhaX/rr+HtlbOXV2fteW1ZRT1ZWWl1m7uTc19ba3eLw7OjwY1hcXWhnYF5pbn3w7NzU1Nfb\n2tPU19frbmV3b19hYF1aW11iXFZWa+PkcGFnamltaGfy3NHN097z9/d+/vrg3+Pvbm993fRW\nUVNcZG9yaml74tjU09nZ1tfc3/xiXlpPSkxTXFpcaXPe2dbU0M3P0t/reXjy7uhqWE9LUFhY\nV1NZaXPn2NPY4+7j09DN0/Dz3dPfffVtamFaVlhdZV9aWFddWVRa8+HV0c3M2tbN0955XmVp\nYlFKVuTZ7v529/tfYWXw6/RlXeHZ7l9dc9/2X1xo6Nvc4tvRzNT9bOrd4u3k3O5zeHZOPTlC\nV05FRGbOyc7Vvr7O4NS9vNxKVtvZW0NR7X9OPkNb7k5DRuXE3E9O0sTK09DAxdnZzM35Vlb3\n7VA/PkJx32tyYd/Z2nNk28/L287PaF1U22w6MkPI1nhTzLG/XTxdyL5aNlbJwE49XsjXPzZF\nzr9pV8iutFtNwrRcNDfKtNg+RMHBRTVE3vpKStbC6E5aXtd2TUXfx+rS7r7I2F5LYU3gTFnQ\n3utivM5YVlbd91dFT9HP12TkxXJbVPDTWld2zc1VSm/DbztL0cBSSMvF1E3o0MxvUdTcTkFf\nx89SSvbiUEhCV19XYPnb6s7P3tfGvsjV3cfD7UtczM9AMULoRzExSdxtREHLtrjFxLizt8jT\nwLvA9UxtzddFNj9yUzYtNEY/MjI+W+1UQk/Sy3Lk37m9wcG9rrq1vbGuuL/iuLGzzFLr1GM8\nPFVqTjYuLCkoJSAfIiswOUNARlDZdNjS3u9UqpWJho+WmpijKxwVIyQrOT6urafANiUdHRkX\nGB0qOTo4PEQ/NCkinq0936yYoaysrK2bjo+epqCjqbk8HCAsJyMhIil8ve89ODItLCUhISw2\nOkt9VFrq3H5a+fLSyMXHzMG/saSgpKafnJudoKmzu8VbNyspKS0wLzAuLi8vLysoJyYnJyYn\nKCouNT1MeOLBt66tsKadmJmZlpOUmJuhqbfMSzEpJSEgIiUmJSYoLC4sJiMlJiYlJSUoLzpB\nUWntxbSur7KomZOUlpWQkZWaoq271UQsIyEgIiMlJSMmKiwtLS4uLSwpIyEgISQnLjc+Vsq1\nrKurp5qRkZSVkY+SlpuksMpDLSAeHhweHyMjIiYqLjEuLSoqLCgmJSQoLDI9Q1PXwri1ta6g\nlZKTlJKPkJWaoay35zwpHyEgICEiJCMkKCopKCUnJycmIiEhJSowPElpx7Ssq6mknpiSk5OU\nkpGWnaWvv9s/KyQeHyEgISQhJCUoLC0sLiwqKCYjIyMnLS81QV7MvbK2r5+WkpCPjo2Ok5ic\nqbxcLiYjIB4eHiAlIiAjJyouKycoKSUjIiAgIycxP0/Pu7OvrquemJaQjY2Oj5KVmaO64jAh\nHRwbHh8dHSAfISQoLjcuKigrKSUjJSkrKy8+T+fIwbenm5iUjoyNjY+TlZynt+kzJiAfHyEe\nHR8jIiMjJSsqJSEfHx8eHiAkKS89bM29tq6km5aSjYqJi42PlJqmvGgyJR4cGhwcGx0jIiAg\nIyYpJyMjIR8eHR8kLDZbvbOsqqmknJiVj42MjY6Slpumt+o4KB8cGx0eHBweISIjJSgrKSYm\nJycgHR4kLjtWyrm2tbWpnZeUkY6Ojo+RlZulu/I8LCMeHB0fHyAjJSYlJicoJyQfHx8fICIp\nMjtL1riurKynnZiWk4+Ojo+VmZ2lt1IyKycgHB0iJCAfISosJSInLCcfHiImJCQpN1Ve0LOq\nq66on52dmpOPkZSVmJyjsM9HMSkkHh4fIB8gJSgoJycnKSglIyQlKCstOExt0b6wq6qnpqKf\nnpuXlZaWmJuepbHUPS4pIh0cHiAhIiYoLS8tLC0sKi0uLzY7O0BS6cu+tK+tr7Gvq6imo56c\nnJ2fpKeru/VDNy8sKCgrLS4uLy8uLSooKikoKiwwNTU4Pl3cyb27sbGwr6+tqaWlpKOgoaOm\nq663zGVMPjc1MTEzMi8tLCwqKCcnJyosLC0vND5JVu3Pwbm0sK6tr66sq6ypqKakpqqtsLfF\n7lRKQD48OjY4ODUvKysrLSwrLS0vLzM2Nz1FT3zSw7myr6+urrKxs7a4srCwrKyvsLG0u8DM\n3dpfUT84MC8rJSYnJykrLC4yNTc9R07s39LHvrm5tbKyub28u727t7WzsK2vr6+zu8HM3e5f\nRz47NC4sLC0uLCwsLS0vNjo/QElU7tvKvLu2s7a2r66vsbGvrKyfmbCflybPSSyeFhxIEBoW\nGE0gKVdSuElBbE9IHxwdHCYlK12ZiYCAg4CAhI7GGRIKAwACDRwvxJeMi4+ewigQBgAAAQQJ\nDxxasaOemomAgICBgICFjysFDgYAAAAVt5+ah4aJj5S1FwoAAAAAAQcQIs62sK6nn4mAgICA\n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\nJCctO7ypoqCgo6Wlq7jPb8izubavsa2z3Ug0JygjIiUqMUM7RE9QPzEvPUFcxLOjn56gpaWr\ntMtJOT1LVPpozsDMTTouLSkmKywuOjg/9N/VTkVN6s69ra+sqKWpsbS4w8rX7N9V5tHTurvx\nPC8yMCQeICgqLS8ySlhJ3tjGtrGno6imp6qmq6669VhdSz5EQlxzTEtEMC8wKishIy00P0Fa\n1L66tLyztriysKqvrKyrqK+00EA5LycrLjlOPExf3cbfQzIqLSwrKzhw9L+8r6yztLa+r6qr\nqq2urrbG3EQ0KSAiLDI3Ru7RvsXhSTs4MzU2O1BB67+ypbvIw965wL+vvL26r7TeN0RLNDcw\nO+ta2bKxs8tUOjgtKyYkJzBQyb+1ra+xvubDz7a94N3Gta+3ur1cSzQvOS5LRezMv7//TFJA\nNy8wPTVDyMbAu8W9zWbdybzFvsG1ssHfUkk+RUQ5Ol3PvrrLutPW13U8PDMuQDNN0mvJwMvL\nvuvEzOZ2auz+yNy8vFxM9W1LODh2usfRy7+/7EQ6QDM1Wj8/We7MwE/y0r21y09QeVl3Q01W\nTWF9yLq8xbmxvtpBPj47TNHOYVVc4dzVfsniaFk5PWF4VlJqz73OYcO8yr/U3m5D3tfaSuXy\n411LQuHQzMnayrrExreytMNwYt1NPjY/aFA/PD84NSkrKSEjLS8qKypWbX/Bt7CzwrmtuLK6\nuLO1tK2oraqsqq21uLC10tvTYD0vKisqJCAjJicoLC9LQ0RHPUQ/TEtIPU3tys/GubGuvbCs\nqqurra6ytrjoSjxKPTY4OkQ5RzU3Ly4vLzEuPjVCLzk/bs9cxci2w7e0rKeurLe2vL/N699k\n2NLZavZw8tXr7cfM1My/w8nJ7M/g3t3tTkhPSWVJa05MQT1JPl9IPjtHTvZGR15NXD9bTFVY\nWsvUzt3Hxr68ybu8v8XYwsK8zs250MPL6t9NTVxK4ln6yXHLT0tWOkM9O0RMRktOcc/bzsTR\n3Nf6WczKwbPOub2/sd1TTE1JY0NXX1a9SlHr0lg7vjo++NvxWN3h1dKs31XSy7I1ULzn0UG9\nUy6+2zlEwbwySrZ1OGKvTi692T8717ZKSmOv3F6/VbXGfa/YwcK/t01bRd9LNt1ORj5gy0VN\nyMtHXsrkNVCzUD5ay8o5wcs5Tk/KWj/MaPlZzbk9S8DVPUXOYkpZvc41urRGUc7gNDfISytA\ntGs1xL9aQb+uQFiywElquMBKTsVmP1LPVy1+1EFMSN1NOVZKMT9LRNm/yX68ts+9ranYSLG5\naknUvT47w9QzMu1ULz/Tbj9Vs8szY7ZPMPrXUDpatOJPv7G+27+6xVRN/kA9P9rgP2HLz1fz\nyOBZWNf3TEva2XF9+WtFSM/RRD3Nu2jqwcpjz7d8P+/JWlXB1VHTx+tOZWU9Q2ZEPFffTktt\n39to289g6+lTzMTKuMLPzPhOWu5tZGR0c1FTfk1bz+z532NPXHj9ZU9RVVVTTURM49HIy/vU\nvr/FyM7GxsnJ3HLl6m5wV0xQVfFYP0pkVU5FNzo2Lzg7Oj5FTE9bbsu2ramnop+XnDXFpa5O\nT7vLfrO4PCkuJBoaHBgYIComKSghIiouLzqvjICAgJHJLCk5YzQoL8eZjI2aPxYPDxAUFhoh\nKiskHRkcIiYkHx8iMEmphICAgJEjJBvOxywmILmUiIiZPgwJCw0ZGx4pLi4fGRIUHCU1LiUk\nL86vrpaAgICA3iEVLLHqOxtMso2JmboPCgsOGyEoKS43Jx4VExsfLTw0MjrjycFbUY2AgICJ\nLBQS9G9cKBrRq4uOoTMMDBEbKiQfIyg4NSIcFxseJjUtN0TYr7rDUkyMgICAiy4TF8tFvx8W\nK0mQlJ0+Dw0NFyk6MS8rPOE/LBsZGh4rNWe6r6ervmAtJGOJgICAnkcaHz0jLRAXJL+PkZG0\nHRQOFh4iICEt4bO0dygfHR8kJS012a+rpaiy+C0/k4SBhp2s4r2lUzcVDhYetKalrjQtKCo2\nJh4dHSgzPU1NVe3Pvsz1523iRjQ2ODoxLlCajIuRqKuppaLGXSokMDTOvsDGST87Rl5CPDUv\nMC4sLDAvLSspKicoLTY/SUpEU/nAtbSompmepaabmJSXnqS460QxOS8tLCcrL0BiPi8mJCco\nKiciIiYrLCwsLzlL89DAtqyno6avqZ6jqKmhmJaWm6KpvOo+KicfICUmLDE1Ozg2LSsnIyYl\nJyosLjM6R1RffdvAtrGvs73DwK+cl5yho56YmZ+sx3NbcT8wJx4dHyEnKiktM0JWWEJETk9F\nOi4qKjBL/d/o07y3vMlVSUNFzamlqqWfmZaaoay7wsfKY2U/Ojw5MzArKCszOjIsJywwNDEq\nJiUoMDtBOzk9Sdm9trKxu7uon6anoZqUk5ifqa+xsNRGMCYlJigqKSgsLzk6Oi0qKCYlIiEk\nKzY+QUVJXN2/vr23sa6tqKClqKCalJKYn6ersLttLyojJCgpKSYlJys2OzkwLCwtLCspKS4y\nPT9FWte8tLjGyb21sK2oqa+sn5mWmJ6mrrjC6zktKioxNzAtKikpLjAzODlFTUQ1LCgoKy4y\nPEFNeNTExMbHx8zRvKympKGem5manqSpqq23ZzgrJistLCsoKSosLCsqKi43PkRHQjkzMDA4\nPlLmx7/EwsPBvsrJurKvqp+ZlZabo6qtsrp+Ny0pKi0tLCooKCkqKy0tLzI3Nzo9Pj4+Pj5E\nUe7KwL2+v8HI3WLevK+rpp+bmJibn6atuMxMODEvLyskHx4fJikqKy86TGBhSj07Oz5DQ0hO\nX/LW1NHMzcOst3Rux6uqsKWem5qfpquzvNRCMC4tLCwpJyorLS4vMTg9Q0pWZV1WTUI8PUNC\nSlVc5N/Z1NTQzdLPxL20rqminp2fpqipq7bOTDw8OjEqJioxOjoyMTAzXnYoKydLLCAgJTQ5\nTv/Jua6zwcPb8dOrmpSVlJKPkpu3OikjHxgUFiE7z8m9r6itzjUlHh0aGRokOmns1cS9wNpT\nS1VOQTtRzc/HnomGipGYkpjJFA4NFxsWGjeimJistK26NhgRFiIiHidPq6WsymY3JR8dJTFK\n8rmwqqauu6SIhIyYoJWYSA8MEBweEx68lpaexsauTR4SEhsmICP+qqCv3X3eKhkYHDJW3ruo\noaCls2VboIeJlZuXjp4fCw8UGBAPL5+Wn6KroLEkFRUbHR0cOaystruxzy0bGiElLtyso6Gm\npKTDLDebhYuZmY+LqxYKKy8AACufp7SnnaKarxsTGx4WFh7OtN+on6/GNh0mKh4jzaapo6We\npMsuK5qCjp2YjoqxEQ0aEA0GD3CdrK6ZlpV9HR0nFw8TI8HdRLacnro/MV01ICxesKqvpqKv\nx0AqOouHopOejJYiDRkVDAwIJ6yk2JmTkJs/PG4nDxIZJSoiPqSft7/DylAqLG7bPEfFvsE7\nMjgr4YGHnYyViJQcEywUDgkLKbVkyJOUkpzSXEEUDA8RFhcbPqiqrqeho7VI0MA9UNPHxvD0\nu8RZQESShJmnlpWS5RYtMRcPDhs+NCLInqKv6eGxPhcWHB0bHjC5sLmqnp6ow8rFXjk4WMO+\nuayrqa3SU89iMzrgsKyto52est9jOSkbFx4oLDvrt6+81dhLKyMkLTU0PNazwcbGvLdFOj7O\nt+7GrqansL65vWk4RdzHyFy1r9TF8kxUMy9PSjtKW05qSkNe4Uzez/63y+/KzFdcajE3PS1O\naUTKwOztWl/M/jw+xs9fvcm3uGRjyMRq03zLutZf+czE+1dXvUU8qZcaC6CWPRlpcD5Vsjw4\nu2NksGA1zz1HtnIlsLcvqlk+uFM9tUpAuXzNuT5VqE5QbG6su9XPXsnoMEQ+TTpCP9+8Pq3Q\nP+ZwTTU8Nl94LtGxUL7MzbpN07vmVc+7stHWys2vLzC+RL44wNPPtCOt1iPFO0JD09hDqtxo\nozIuzyjdLiLLOqxJNZ06xcIlqOdLyr+nzLfbvqM027ZA0j9Oujg+Yji9MSG+Rie4O9WvP9q9\nvzjeZkxONPcvqrclqWhFoSgznx7HpSeezUifPLmvOD6yzFdVRk7RWS5L2T8qujLqth6nrCr3\nvb1H7D8tuD8y9jyqbianaja8yda6wjfDqT/2t8jft/1NqcY3uPgyzjxmwT1dtzpesy1FTiTU\n6itDLc6/MvTXe9zP+2qu1ea6LqqhI6euMK+1LtWrMXatO2+/PL9SJ75T3jkytUtSQco6sFIj\npTkxwS5IrCpepC69uzPIvzYxq0vCsVGkZOa18La/Ndq4Vjj1uztdPFe0MVzVNM3sLWO3QnMy\nOb49MMjCKtCuLkKtW0bETs7B2Ks/qavupl3PskfozzxCqDInoCHgzTGwHzSuVyNfsCw+4dNO\nK7SqLy+o+j3EvD233UalMbqoKrynOrqtKsSqLW+xMr63HrDPIKw1O64oYLkr41jZey2nOi+g\nNjnFyGs2Xcm8MEemOiun2TGrwyutqz6vVM/G6v7uxUTHNbtYO7hL6DqwVSzHzzUt0eUpVqs7\nMbDOTkK/vySztS02otspo65UXbi2L8CwPEE/uz4kqWkvsmVBQa6vIt2saTPXsUpN3r4u6KxC\nL9m1Kky+RzRKv68rX58n2sRseDam8ivHyEbnzcQ23asvrqZEtnVEYc3bMkC/7zAzq2Qor05p\ntSeuPTC4KDuxJ8m5Nqk+WaZMVKti5dW6N1GrKMCzKqzOKp/pMqY+vbgiv7wgQq8qPbgvs0ku\nqTQ5qiRDrFAqe7IorEQ9nVFftbu3vDxNqj1SvTCwyzm2Sk63Ryq4+ySuYDTALLXZV8Yzv8I8\nPlm+SEbK6Uq5Ly6jK1OxZrgwrt9NsEzF1KwuNZ89NKk4yrwsws7MOj3M2j0uszuyLi2gLb8v\nP6YsUu5nwkNtPL3KN8TIscZEv6tvPsxouj9P0z2+VUbT0LY6d7ZC9VVRdllFXFM0x2Y9sz7L\nUUPEKehOPr84ssttrNe/u9XNRc9qOLpN07RF0l1MwT5VzDXce0K/UNxVMtNNSsHSyGi5vfny\n37RYR2420Ek3vVHYW0a3X0LrRe3KRmPSwL9qXMdyVkBl9k1KSM/H0td8yL5P99VE5fdIaktd\n/UZ56//resjhWsDYccpST09X70pzx9XGwcfeeFNo3E5IcGplZknkyupr2L3oW+VaVUtX2+LZ\n21LVy95XUHg/QD4+Szw5OUFLTElY49vsx7u+trOrqaikp6akqbvM1UIvLCssNDk8Pj41Kicj\nHhwcHiMpLj13ybuys7fAzZSChI2Oi4ugHxQXEgwMF0yloJyXmKsuHBYOCwsPGiUvZ66osts+\nKiopKzxIvpyAgICWkIC2FAAAFgADFFePjoaNiI24GAsaDgMOPrK4tqCiviAYHRcODiG9tsWb\ngICAjJqNoA8AARgODBiciIuRmo6bIQoLFQ8NFciZn7myrS0UDhMaFh3om5ibnJuDgIWgoZea\nFQMHOBkPGK+Nk6a9mqscDQ8fGxUerZu8Sca5JxAPGR4bJc6em6Cmrq2KgIqgno6VGwoNOxUO\nFreOmquokqceEBQgFw8erJ/4V6+3Hw4QHB0XJK+fpKGdp8mTgIGcn4+MLgsLLRwNEk6Qmba8\nmqkeFBUlHxclq6DOSb3HKBUVGxkcL7a2rqaksysuioCHm5CIjxkHDSMLBhWjjpmhlY61GBYc\nHhMVT5+vRMCqahcOGBgOEDSvvcWlnbYjP4CAhpuMgo8RAw0mCQUclYubo5KPOQ0RGBgOF8aj\nwkKnpTkSEBoUDRTKorCzn5e4IiqHgISejIKLEgEMJwcBHZeJmZ2OjDsJEB0QDBG0nLw6o5sp\nEw8aFAsRyZivtJaTqyAdmoCAn46FhjsEBx8PAA+ujZSfk4ukDQ0bGxEMNZ6lNbmdvx0PGxoQ\nDi6do7nCnqcmFyeAgIeVioKOCgAOHgAEJY6Im5iIiB4KFxYbDxiolK1ym6dOFg8XDwkParK9\nPa2RsBoZj4CAnpWFhx8ABTYNABqYhZCfkIa7CA8bGQwM45OqNZ2W6xUNGBoKCjafpLiulJk0\nFh2SgICljYaEJwAHQAoAGaeHk6SXiNoLEhYXDQw1l6o3mpi2GxMbGgsJLK26T7WXmDsbK5qA\ngJWOwoOJBQAbLwAek5ygj5aPlhoKDTkUCyqgu/eZrU8vExIeDgohsKGvv5ua+iUsXoCAj5mL\nhJAKABwtAAgcmo+nsoqJHxUXJyEND7GaNk+so9IZFiMXCRIu28JmrpeePz+7iYCFqIyHih0D\nD84FARa6lafCk4ZvFx0sLxAKIqIzJrygoTMcJCsPDRw2Sy5vnZmpuKuUgICXl42KrgsLNBcE\nDiGhn8evjZ4pJStWHQ0Rx0geMKuXrCcn1CEPERsxKyPEl563t6CIgIujjoyPJxAcTg4KFjCs\nvl6nj6hsRNlOHA4UMiIaJ62evDdMziISEyMrISuymZulpZmOjJGdmpWTq1g6TiscFhklKygl\nXbOr1t3QxE4lJS01LC890GgyLjAuJCIpc8NIZrq8t87YnpSRmJiPjY+jq8dOIBkUGhkYHSQ1\nPGpgurS5wsbL0207OSwjHRwaGiIzO0y8t7O1uqymqJuVj46SkJGVptIrJBoUDRAVHyYoV7Oi\noqOkpK+zciwrHRYUExUXGSU6U7uopqeqvLS2uqSaj5CPjo6OnLExKRoUDQ8SHyIpTq2dnp+o\np7HoKR8cGBQSFxwhJjy+rKmrp6u2U1rZ0tOpl42Oj46Nj6pVKSMWDgkPFR4iN7edmZuanqG7\nOiMcFRESFBogLkS9qqKmrrWxyj8zOUVIu5+PjY+Oj42bvCgkGBMLDBMhLUyun5aZm5+oxTEe\nFRMPDxIbJEe0pp6foKi260cqJSIkMdaklIuMiouNkKFEHBcODQoPGjvir5+Yk5mcqb4tGhMO\nDg4UHDXcrKGcm6Cr1T4rJiAfJS5Mu56VjIuMio6UqFoeGRIRDxEbL8KwoZ2Xmqe+RSsZEQ8P\nExkgO7qpn56fp71MMSoqJyYqO13JppiOi46Nj5adujYfGBQVFRwlRL+qpaKepbw8KiEaExIU\nGiEtXbKlo6apq7tbMSwsJigqO+K6rZ2TjYyOjpSXqVwnHBYUExYdKF6/r66mp7ddLCcfGRYZ\nHygvS7mmnqCmqrPZOyonKC4sMDzouKqelo6NjpCXnLI0HxkWFhYZIC7Tt66tqq/GRiogHBoZ\nGh8vWL2tpp+gp6y3ykgtKCstLy0/0bSjm5SPkJKVnKjZKiEZFBQYHCc2fLqqp6uxyUkuJCEf\nHyIqO1XGsqejpKqvvW43KSYoKyw5Vby0rKGclZaXm6Cnsz0nHh4fHx4pPM+/w768v205LSsl\nJCUoNEvFtKmnpamvvNpIOy4rKi83OT9I08W0rJ+cmpqdn6O4SS8lIx4eHyo39sOzrauyxGE+\nOi8tKSwwPUtg2s68u7zG41A/PjAyMDk8O0Q/98qwop2ampabnK7IPisoICIfLDFnzLu4t7PD\n0U9BNCwoJywxR1rN08fHy+FUSzozKistLzY1VknPuKabmZaYlpucqrx+NDAkIiAqN0xxxbe3\nvvpOPjkvJiQlKy01PFvqycbKzXtWRDgwMjg/REtq58u2rp6WlpqYmZquNjgqNSQkLnWxrrK2\nt9ozIx4fHyElLzZBVWpiWUI6RTpDRVzk3mpcysHGy8FQN+ufkI6TmpebtS8dIiguJnywoqnE\nWz0rGRcbIjQ9T82+QDMxMTIvOtmwu7u6v2w1JihNWV7HqqOtv6OSlJqfn52tNyouNS8vOLi9\ndD06LiYcGiQqLT/Yv8ZOND9FPz087bu98sbObkM4RNS7xbirqck0QaWdn5+Xl5q7SkIvIxwl\nMtg5Ts7BPSUeJSsiJ0XCwPVa2tk+MTxewsjJtq20yfE/ODg9TXzNtb/ea6yclJWcn5+vOiEe\nJiYjLNbDvmRSUDMgHSEuOD/Ktq7ITUdINzNC57rN0LqvyEA7O0dCW7e7tKqx0dOuopqpoaGi\nwzgrKC4dJS1XTmvpytwqIyMqLy1Wu6y4vsXEZTVCRl9Pbdi5vehzQz46OENH6rq2zVGvnZui\nn5ydp0VMMi8hICZEXkHFw8A/LicqKCkvR8zbx8/I7kUwOUpSbVnIt7rAvMhsaFHy9FDNvcHS\nuqehn6CfpKnURy0kJiIlLkNJzc/XZ0EvLy8vNT1S2dRe3dX0U0pc1XROyLi93vfW00c1WdrZ\nwb641ea4o5+mpqiftVwtLy4iHx84Q95tvre9XDc5ODIsLTdTT3nKt8PRcu5bOzhI43TOvLS0\nt7O4vcvpRTc/2ri2sKqnpa/BZkc5LCgoLi85QX7OyMrOzflQQj8+Ozc2O0BNWG3d1MfAwsi/\nuru9zdzyYlVJRD9BRFpkddjGvbq2sK+vrq+3xdr05ubweuxvV0E8OjYxLSsrLC0uNT9HRUdP\ndt7WzcG9v7+6ury9v81mSlDnzb22tK2pq66zurnB12FQTVJMPzk6ODEvLS0uLi8zOj9LU131\n7mRk8crDxsfDvb7Bw7/BxdZtV1FacvLOycG5t7m+v7+6vMbMz+HvX0lFRj03NTM0NzU5PkFA\nPj9GTU5KTmLj0MvKxL6+xM/e5uzj7FtMU9/RyMC6sa6uraytrLG7x29HPjs5ODo5NTEvMDMz\nNTxMTkpLTldUREZJWHLg0Me/wsXFyNZ8W1xVSlvRw7y3s6yqrKyrrq+zvMvpTz85NTU4NDAw\nMDE1NTY/UWBaRUNJSkRBQE1Wau/q2+Pfz9Tb2tnKytjTy8W6tK+sqKamqKuutcZ3Tj87OTY5\nOzcwMS8uLy8vMjg6Oz9GTlROTE5ZcNzRxcHCyMnJy9LY2+l+4svHwLmvqaSkpaaprbbJX0tD\nOjQxNDc0MCwrKysrKy01PkdJS1ltbPTj2M3M0tbSycTCytDb6u7n4dLCuLSyraikpaeqq6+5\nz049NzEuLC0vLy0sLC4xMTA0PENJTlBk2M7Jxr/Cx8zR2Nvq3+fk6+zi2dfMwbq5taylo6ap\nra+4ylo9NjQyLy4vNDcyLy4zNDMyN0dNVr+puN5KOlYrKi0uNTfzvq23z8i/yMWml4+WmZmX\nneIpHCUdHBgiVbqxzcbqSCkaGhsqNzveq52kssbDzC8lJTJAPkjTrK283elCR+c6NShNlYiK\nlJqboTgODxYpJi/OnJWsXS4sHRMRHFyuqaihorksHyUrKSlatK7H9MjMPys63V89XKGmTSZK\njoaMqqOZoygMFy93Iy25nKEwICssGxMaPq2qta6szy8hKDNSUtGvtMs4PEc9LT+6uspruKqw\nNSdCmoiKmp+bpy8PESJAKDu4np9XJiUmGRUcOLivtq6nuyoiK089NuuqsT00Q/E7L06xsD1H\nq6K9LCjCj4eMoaCirRoNFi5XK8apmKsuIiMeFBMfTrXLqJylaCYxNT4tRbazukxiXl4xLuTn\nVD+znbsuJjnLkomLm6GttRoPGipaNresmKoyJyMeFBUg9a26rZ6bsiQeLzsmIuGlrDszx78z\nJDvDzzp2paa6MSmqi4aYr6GdyQ8PJOsuJb6fm04kLTMdERkxvMfJo5uqLyQuQjAqR6upczhL\n1T0sNr67Sj5ssKzEKSVhjYWNpZ+WtBwLHjIyHkmfnLUnLzgeEBUuyt1Prpqbti0pNjMhJUup\ntlxev94tKi9NOy14qaGt00K0jomPpqqctCAPIjEzIz2kn7UuREAiFBYpU0perJ2jUSksNSof\nLvix00z2wuIvMV/NREjIqKKqs0A4noaLorafmTMPFEEwGh/cnq0sMMREFxMeSlwtS6eiqqTT\nRzQpKCE2+qw/d7bWcjEvP8JeX7ipujgzjYCRz8uVnxgLHqYpGSmiks8lNq8nDhEouj83rJih\nOC5D1ikdKsa2REbKsU8qNtf8NDK7q63JR9idioqXqJye1xgXKi4fGkyuqEs63FMhFBsqNy9D\nqJydoL7XTiwiHSg49jRBzOXoPklBOD/8yMzTsZeIhpOfnJ/jFBUjLx0cSa6iRDRFUCQVGSdH\nRtKonaK33uE+KiQoNTM3PODTX1VcQDc0SMbF1c6smIuJkp6aocMdGSIvJhwvzqvTP0ZUMRwY\nHCUxPd6qnp+zwM9qMCAkLTIrOc25u8vf6Ek9Pv9dSNqai4qRnJWarCMaHiYjGyM+t8X2XtPg\nMiEbHiYvMD3EqKSxwcTASCskJyouOvO3r7C4v8XoWtfP/LackpWfoJ2esDkpKS0tJR4iLkBG\nP0Nf304yKy46Pzo8Wd/S1drc2vTs3W/uzsjJ4mFPUU1KU9jFzr+uqau0urGtrrW2sq+vvF5A\nNjUzLi8vLzAvMDM2OTg3PEpdS05t1+VXVvzIvcTeVE5dVD47Q9XCx7uupqiwrqqkp62urrC2\nzUY2LS8tLC4uNDo7Ozo9PTw5NDc6PURHS1tr3szBwt/q9W128V9c2724u7Osqay1trCtrre5\ntbq+3j84MC8vLzE2PDw8PUFKST89PD9LSUdER0hLVF1o6+bm/k5ITGTnzby4tq+srKyxrKmp\nq7O1sLG3zUA0LispKi81Ozs2Nj5IQDY1NjY4OTg5PD9O7drm0MO8xs/Mxb++vLq4s6yqqq+u\nqqussrq2uL/rOzIsKCUlJyswOTg6RE1ZSj9FRz9ARlZaTUlR8OPr8d/x//lu1sW+u7qxraqn\np6Wmqauutri+0mY/Ny8qKCkqLC4vMTZBTElCPz0/Pz8/SlxdUlBZ99rs69bMytHmzcbJwbWs\np6GfoKCmqq24v9VZRTUuLiopKikqKy4wMzdCQU1YUlFTUkxWTF9aWv9u6t3Tybq9zt/Ry9Xm\nzr2uqKWlpaeorba/0v5IOzQvLi8uLSwoLTs7OD1CT11eWVlc/vBz+OxdWmDf4Vf73tXV/U9R\nVffSvq6oo5+hoqSorbfF6Eo6NDEuLzAtLC0vMC4wLzZEPT1HUWLm7eLfev7OvtLwztPe5uvz\nV1hvw7y7rqihoKCjqamttsv6STk5MS4rLS8rJygqKi4vNzk7Pj1HRUtb2s3Iw8fBxtjfzdLe\n09Dazbi1tK2opKOjpKSor7a+/kMzLCwpKionKyksLC4uLjY6Ojk7PEJVUdjKw8K+yMzCwMXC\nyczD0MC+vbCup6SjpqWoq665u89KPi8pKikqKSwoKSsqLS8vNDk8PktNVlrh8d3Vyc3Eu7q9\nzMXAvMfMzdO3sKyrpaimpaqsrLPEzkw0KSwvJyYmIiYnKykuMzNDU1lm3F7Fuc7BurrCx83M\nWdFWTPVqbmG/t7WmpqaqoqStorW3z1FJKygeGxkbHB4gKDYpMrStn5KOjJSUmayin6+hySo5\nJiUWExUPDxEYGi4ququclZeZm5mXkqnAR+rEM0Yx1KcCDxkfMx7DJjldt1vnRGhT8q63r6Sj\no6Kuu7e3xd1LUubWcPhY1sO5t7q2tba/z8fEbUM3LiopJyMgHyAhHhop7TMqN251Xvzi4M/K\n0Mu/vLm2sq+vvLuzt7q6ubW0r6+trauvs7W+1V9IODMxLy8tKystLS4vLzE1OTs9PkVU7MzD\nurm4tbm5tLK1tbi8v8C9vsXAvLm2tLK0tbW7xt1cT0pEOzU1ODk5ODUzNTk5NjU3OkA+PD5I\nVm/n3tnPxLy2treyr7G3u7e1ubm3tbOztrjD2+1vTkM7NjMvMC8wMzQ0MjIzOT9GTVVefPvg\n18/S4t3W197o187JxMfCvr+8urq7t7a3ur2+w8fLztluW1FFPDk2NTY0LiwtLS8yNjk+R09R\nVmna0ce9u7u5trOys7a4ubm5ub3DxsfIz9bZ7mlaS0pNTUpCOzUzNDg2Njk8Q0VFRk5d+dXL\nycO6usDAxMnHxMbO3d7Y4nVo687GxsjIzc/M0fdpXWloXFZPXVpOQjw+SEk/Pj5CQUBDR1Zi\n7tjMxcO9u7q8vr/GwMLU53duZWNqYF1gbG9lX15ra3To92/y4Hl1a2lgYEhPy+g9O1VZSk5P\nTkxPXmvq6/fl2M/KxcHAw8TGys/f5PNpem595N/b3eDnam10YmplTUpSSklWX19XYGZVXVNN\nSkpSX2Ji8+Xz39XU1M7R287L0tp/9dvR4tTJ3ufY4Wz+3trl41xSY+/rYFVNQz80Li84OjxF\nUmLUzM1q9NbMz8a+vbS1s7mxtby6vsDY225LWE1ATzw+XjtHS0FLamdsZXBTVExMS05kXW1R\nTk1ITk5QXfnc1s7KxMG+vcG+vb7AyMrOz8nJ0+J7amRYVVddeHx4Z2NeV1RNSENDR0pOT1Jc\naXp4b37o3dTS0dHSzs3V6Obj3dbX1d/f19PTz9DecVxWTktRV1paXWh/4N7l+GRUU1FMSktN\nU15cV13y7Gtq9eXj18zO0s/IwsLIztDV3mpWW+Hgcl1TVlhjX1pdW15eU09Vav50Xlp829HW\n6erwa2dfWFRdavr1c2J74+Lc29bY2NTZ2Nrb4eXp4+Xj3evwemxjXl9aU1FWY2FUXH7p829e\nYltOUFVYVll3+W/02s3JxcTLycvP0t7p825lW01JTmJ9c2pt/tnecWBvbHX15tnf7f18WU1O\nWm1+Z19fYPXd3OLxcGrp3OHs8P1jW1/02cvI0ung3N7V7F5eanRkXFFd6dzf3+Hk4npkTUhP\nWVVPTlNf+flrcvfdzs/d8PLj2Nvb2dTPzdXb5/V0//9kZm/r8/Tj2NPO2l5UVmBoVUxHQUJD\nSU5WZ3/9duPQy8TFy8/W0MzN1dnu4+h3b11r9u3+YGJtfvP4bmZw59/nfHD7ZV1STE9bXFte\nVFBfbO/u5dPR2+/r5ObZ1tnu6uLZ0+Dw++veee7rbvlsf+Xf3trVztx56uj+aVdPTEE/PTs8\nQUpZ+mtm/fDdz8LCwcDEv8jRz9DOztppWlRSTUxNT1h973zk29Tb7/jx4H9fT05TW21laH1z\n7n1eVlh5eH3v7t7X09TY4fXf2sTJXvt4XWVFRE1LVfP09+jf49np6tTU3dvm69vT0Odk72dU\nU0xMTE9fZV5kZXTc2eje1s/U1eTm6+nf5eZ6eF5rcnnm3e7f52T15NryXlRTZk5KWVZQTFV6\nX1VUcGln29HNzs/MzMvW+tHP2+Ha1tzM0Orj7/hxbFlXWU5JSkxNW2VnVmrT3dXfVXJh/vZq\nYltuYllbX15x1tfZ0+jO1N3ua+ny2N372tbL1ejhZnLrWGLh/n59XuZecvxkTEldTk5jXmx8\n+Fhgc19tfmh4alFdaWfo8t7LzsrHyMjHzs/U3dbd0ejtbmvra19aTElPSkpGSE5YXUtVUkxi\nVmV+Y97S0NrW1NLPzNR5ZOTq1OP7287Iys/n2MvmbFtnaldRR1JeWFlaVVxcTl1uc/TX2uXQ\n6HHza/tt5HFdU1JnW1thc//k5dTPxcXGzPRyVGDiaFpRTl95ZujbzM/oZn3f187a2Odp0thi\nWUpFTVFQTl9/ddvf287Ex83uevhdW1lZ6fDffHpr/NXiZ01WU1dbU9RMQkJF5OXuXkk9QmdP\nUeDN4NHEv760x73Dw8bRusrFvsTA2cbV6mk1MS8xNTM7Oklp7fBQ2sdo2F5GUeZxUN3t7dbI\nzd3d1d7HZVZeYs/TyMnSucXPw8/28O9KUtnNR0pOP1pVTj06PjxF02TPv9PJetrFzN1X8k9P\n3fZs18rJzeXGvMO3vMbMzd1OalZTWftHP0hLXt9WbmpEPzs8QD1BWU1r4OrpysvBw93Kx8Jp\nTM3l6tZn1cXS79BxWcHnaWpiXvdRTl9NXfn58/Pg4fvw1eLNz09izGtsU27hytBWW3tPUUhD\nOURMSF9ecGV+0t/Mzs3Dv73PuLxoye1MQ0Y+OExQQlj/22/f297BxdXx39Hk8HlSYmthVl/i\n2eze7/1PWFZWZ+Ro9drh283Y8tfP19DbYeba/lRZREtUTUj66/PM0nhm+XVmTVJsalFPUl/T\n2chewEm7+mm9NrY/b9texF3C69Pg387+115RUlZVYnlFXf/qXldha//u+1NrXW1i+O7u0Ozc\n3Oh2+Ptv+21z7+nf1M/c19b66PP5+t5y73n5ZVhRT1taUFBbZlvq28y6vdfIY9tPPDxLQ0RN\nSGXW3s3MyMrO3u3ubPPkaVld999u7nVa6+7k03bPzdvP4vbLzM9vUUdJPDxKY0HrYvHNy7m8\n32tPTkNKUGHJ2sC1vLja9FRVykfPRkM/NE5LS0FUWO7zXd2/4NPF5fbw0HrV4/7MzeHGxNDC\nyt5mWUlfPVJCQj8/RERgV9fMy8q/zsrk0H5eVVvZfk5pWd1YX9Xd/vDX+M3O4trKd3v1ZGN5\nUk1TT0xW7FtRa/nMzd5cz+/fytPN19LT5/dreVFiZHxRW+ry4/Xf8ltSQjs9OTYzLzREPE39\nztjBtbizr6aloZ6dp6isrslCKykrISctOEBPSj4/KSEfHBoaGRwkLDVLsqCZlYyFgoyNk5W6\nJxMVFg0SFkKuo6Sdl5/TMB0XDw0OFSAvz7Kop7VTLiwiHh4gNbqekIqEgIGIkKHJGg0FCgsO\nHDeclJCWlp7zIRQNDQ8TGze3p5yfsFwoHBgVGh0mSa2akomFgICMksqxFw4FBxQPMkSckI6X\nprc/HBQNDxkgNsWjnaStPiweEhIVHynKt7amnZWMjYeGkpG+thYUDAocFkTZm5WPmKxFPRwY\nFBMjL0zFq6q94S4eGBQVFyJFwKqqraetmY6HgJKNnKLBExABExIYK7SZjpOdxn7pIB0THjRY\nx/q7uUQqGRcUFBkfPrqtpa2suNadiIKCkY+fmjcMCQYUFCcwqY6LlJ/nKiIYFRQiOkOxtLxs\nMikaFhYZHy7YrrGroaSzQbCGgIOPpJmZPg0BCA8kNT6ejouTqU0iHBQNDxgoOkTgU1s7KSIf\nHyIxzqadmpSYnq/FPyWtjomPo6CYnFQYEhAWGxokyaSfoKrPUUQvIhwYGyIkJSw7R0FNREJa\n2LOsra2qo6arrsbgs5mRk5ylo6POJBoYHB4eJUW2tb/VYEYxJR8fHh8kKzVZyMK8vLjA1s/S\nv7Sqop+fpK26zL/Byd2+sLG40E43LSknJyUsR8G0uL7L010xJyMjKS41QFXJurfMycbEu8/E\nvbW5vbi8tLW5u8TFx83vXW1RRD88Qj1AV9vI7kIyNz09NjhZvra+yM3K8DsuMTo9SF/YvLe8\nsq+3vsLH1PxPUORk7My/2E5ffdzv1fFYRDtESDs9Xu7U0szDwPVLQ0RFQDtJ/cHTfvflcOne\n0sDVycjtyM7NVGTtysrUxbu3TEM/QUNCPWTo4eq/z+FLUD5JVi9aUc9nzXfD3mt0zdpwxcG+\nv81M904/OjhW5cTEyrfNxs/VQ0FFR/Prvdrcb8x8W1JPV0g/Sj9c3Ti/Ss/KPLrVtbVZuTu+\nQHtMSFU7vEGvQ7FOtVhZ3j/jOcg0vTi+V7xFv1JdYUVUXFU+XGnUvU/Kv+S72OZv50vyWkdI\nWjnGPk+/Ranksc25zN3JSXlTQEzbR0f4NNo6Qz4vSj3EWLzFt7O9re3LV3N4OuIyuk/ovjuv\nT0y4NLFlZbREtj7ZXzLDLUpYN75KW9Q+1UpE4E3TxMu5uby54s9ZXUNOTD3gVufOXtm8WF++\nPfjBTLzg4blb4ltJ1jRDPzdaO3I+Q8Bmv8FRs77UveXlz2hmTkNHU1Z44ebHvbfM2dVL6WhD\nUHNZ7+dx085PaH88RUg8Pj1Gbn3NxLm61dPQ0H1UaPNtU2ndS1Pjx85o0sbCytHca+1UR15d\nZNxc3s1odkdKTktMPEZ4xsZ768rN1FlGP01ZTkxd0MHVy727vLzBxMbVztpXRkdHRUVJSUBF\nSERLbG19TEzKxeLf3sjJxcXY1N/bSURbc2ZeZW1ke/x3Zn7h4NvNv8HN08/X7OBdWNhMSzw6\nYWNROUZsafJc7sjU3eFebunYzs/Q3W1mUVlsVEtbYmh3Xsy+xcbDu7vJz8/j+UxXWVpXTUpW\nWU9XSVE+QlZIQ0dbycty4Mm7utNjVHje9UVHYte+yuzQvr3LXE/nz9LMz39y7cHN7Us4bE87\nMy8+SD06U37MwsrIx8PM0vZY2+3Kz2vh18bV+OHP0NzZ2n7J7FrZ5VxbTlbUWEFEamhUQEZw\nRUZXXNS9uttFMT9PS0lY6m3Zvra2u8C6x87W3m528GtccfBdXtx3SHlMauxdUGBJV1o/Wkt+\n/drcSd3obHBNXuRr2HnPw8S+x8vMxeNe0uHgbUvc5UpHQDpHTE9lX2756d3y38nXxsXWyOXu\n3lJWVkZMUlhJTfnc1mf959rVzMXTzMy/xtDHydNWTUxAPD9IS0BDZthucnbWxdbh1OXf4mj+\nZUtPXmPz4s7Excng3uZbaHLjXk9e2s1bUGLn3P9bU2NnUktBQ01d79HV7dfPz8nFxMjO3tXt\nUkpl1GdtW2F04eJbVF5xek1JVFBxVGr7dtHY299p1djU3trP6dvp3uNl2+V7XktMTVV7cv56\n8N7z62Rje2JTR0phfPxt/dzYz8W+wszO1tjNzMzT5HpbZGtlW1FGPjxBRDk0MjpATfJia3Xb\n09bb3NzezMCzqaOfnp6gqLXPQSwlIyUpLjg/T29kQzMrKCcmJycnLDI8R07pz8/f06qWi4eK\nkJyorsk/JBgVGCNPuK+ws7W9Yy8fFxUXHCEnLjtzx9ZVPDo8PEf60cvAvLiijYKAiJezSTEr\nIRYPER1in5ibrk4uJyclIBwaITBb5FpBNDAtKSUiKD24p6qtra2v1kWih4CDlUgjHyszHxUR\nIayVj5peHxkcHh0bHkWkmaROHxofJiwmHyY7sqWosOFOPzs5LSxJjoCAgJ8ODxYsORsVHaiL\niI9PDgsPGx8eHzWejoyaJQ4LEykwNSw4xrCq1S4sLkM/PE/t1MGMgICDTgkOHMG8Jx4snYqM\nnxsJChQnMignO6mWjo9iDQYLJ8254zdR57e9MiooM0szLzRQeKiDgICOHAwc3apwHyHPkouU\nVA8KER4oIR8tsZiUoyYODRgtRDw6RMu+0VhHPj5S6O9Is6k1S1mQgICENQQPPqy7HxknmIiP\nuxEHDiA9MiAlTqKbn6NJHBMPIWG2tGZNPU/YNy42OUJDP2boPzGhgICAqAsNSaOnKRQjoYuN\nqRsLEScwJRkd5p2Zuh4SGTuxuDssRLu8QysrN1/aRi0mKEvLVzErmoCAgKoKGLGh0xYQKpeJ\nktMXDyJBJRMNF0mlpda8qrkuEQ8d+6q1VC81zMjvOCUqM0K2q7dDxomAgI8ZDzGfrCEPGLeQ\nj6kmFhsuKhYPFUCdm68tIS7z2zIfJ86oui4kM8C03jIqLz9ZxGwrI06KgICRJhuumb4VCA/v\nkI+lOSMxuTgUCw0c8KqoqqamuDYdGh8sNSopPLuoqr1GMjIuLzo5Ly6jgICBnio8n6YiDAsa\nqpCXr19Ht7UnDwsPH0TYw725rq7cKhwdJiojJDq4oqGsuMlWQEVAMCYk0YuAhpezrJieNRMO\nFC6utE1Lba2huiocGh8xeioXJ62mykA9MjZANi4yUMW8wdlpQkLV9y4jK7KPjJmtrJyWnLJF\nMka/v0MqJi3OrblTNi4vLygdHiwzNjU96MDkPz1BQkY0LjY9Ql7m3lQ8OVmmmZ2opZmQkZqn\nsbOvtEonHyEw3stLMzI1MysfGh4mLDdGXuLcbFFBMi4zN0zoWVTtyMliOTi/oZ+nqp+Uj5KZ\noaaqscovHx0oRV1JOTY4OjIjGxsgL0JJOjM/X/RPNCwrMD9aTT1Ab8S6xOTEqZ+foZ+YkZCV\nnKGhpLVFJh4eJCkoJCQoLS8pIB4lM0ZZTkVJ7cXYSzg0PVbsWj44PVrgX0RQu6egoqOelpKU\nm6GlparAOScjJy0uKykrMTk6LSUlLDg6LyoqLjY4NjIzOklkY15QS/XFu7y7r6Oen5+bmJeY\nnaCjoqa0TC4oJyYlISAkKy8tKCMlLDIxLSosMzg2NjtKaeLIwL/D0el94s69rainpZ+alZaa\nn6Slp63KPS8sLColICAmKy4uLC0wNzo4MS4uLiomKC46TufLvrm5vcna8efLt62ppJyXlJWZ\nnqOnrLXPSDo3NTItKiorLCklIiIkJSYmJygqKyoqLzhDUnfLu7Ctq6yusa+sp6akn5uZmp2h\nqKuz00o3MjAwLywqKiwtLi8vMDEuKygnKCoqKSkqLjhHbOLUw7qxrKuurailoqCfnZqZm5+l\nrbXE/D0wLSwpJiUlJystLjE1Ojk4MiwpJyouNjo6Pkz508vOyr+1r7C1tq2npaWlop+en6Sq\nr7a7x000KikpKisqLC81OTY2ODY0NC0nJiouMzg6Q13cyMTEw7myra2usq+rqaqqq6ijo6is\nr7nF70s5MC8vMDEwMTIyMDAwMDQ4OjguLCwsMDQ6PUrgxry6ubaxr6+xsa+urq2qqKenqa6x\nuMT0TEM+Ozk5NjMzNTg5NjEvMTY7Ozo1NDU3PkZV2b0/JkjKzs1lt6mvraSnqqSpqqSpr6+3\ny3xIPDs3MzU0NTY7Ozg7P0E+Pjs7RFQ8PkRDSVVrR0U8OykoNUzW6K+enJqZmpqaoLLMT0ZK\nOzAwMTU4NTI1SFFBQTUxPjUwNTcsKi8vNjU779zLxb/D28qtnZaUmpqZmp63LR4cHB8jKzZL\nxby6wNpSQTw1MjUyLzVASVlHPT89cs8xNEVLwlBDxMWsmZaYmpydnKlLKx4dHx4fK127r7K2\nsrLJPy8pKS0tLTA4RkplXy4xQkVoPD+4rcLQxbCak5ecn6CepWsnHRwfHxwcLta1s7y7rq3J\nQjEvLy4sKzNHS1pBPENKX/nh38e2u+b0vqaampucnJuctDcgGhsbGBkgO8K2ubGqqLV3OTIz\nKyYpMkJqTTk4OktgTUFQ07+9xL2/rpqTkpeamJefwyobGBgVERQdOb69u6yfnq5HLCkpJR4f\nLU7ZW0dTZ2BZQ1XAzdnb6L6vnpCNkJWTlJqyKxoXFRAPEBowvq+vqaCfrT4nJiMeGRkkQs/l\nX9/H9D85RcvMbdO5sq2ekIqKjo+PlaguFhIPDQsMFS2/raujm5moPyMhIhoUFyVIwc9TzLxs\nNS8zPDstOb2vrJ2NgoSMjo2PoSUREA8MCw0bbLCtpJyXneYiHh0YDw4ZLD5BYrav4TExOjMq\nK0O5rbOqjoCAi46HiJofDhMUCQQLIsG6vp6PlKj4OSgYDQsSHB0jbKmrzUtTOiQdICgrNsKp\nqJuGgIGMiYWPaxYWGgwFDSjU2LOYjZe9yr0lDwwQFBMVJ765QUHFWh8XHCkgHDSon6yliYCA\nj4mAi2QdLigKAxI9KB+tkJavv6CrGw0aHA0NIk4zMMep2CUkLyEYHikqMMmrqpyIgIiMgoWd\n6c5BEgkSKR0aw5mmtJ+e0CIdIhkPFigmIlCy8jRIRSMbHyUdHDXLR1ilj4iLi4OElZ6dwxoV\nHBwVG2yvza+dq+DBQhwbHBgWHSo5T9O6zzYwLiAeJSMfLUE/Z62Uj46LhoqWk5rEKS0nHRwm\nND/2srK/u70vJC0hGBwoJSk6Rzo+Sj0sKy8pIio/MTPFr6SXkI+Mi5CTm6zTWS8jHyMoKy5G\nz2tb1FI0NCsiJSslJjE8PlBHOjk4NzEyMzU2PWBduZ+bl5GOkpWYn6zFSi8qJCIjKzhGTOW/\nyVddQS4qKicmKCcoNTs2PEE9Ojs8Oz9GTGLJt6igmJOQk5SVnKa3zTspIB4fHyUzQE/1x8rn\nTD06MiolKS4tLj5ORTo4PD03ODs8RnjYzrKkm5eUkpSXnKCru2M4KyYmKi4zOE3c6kxJRjMr\nKSckJCkuNTw8PkA8NzM1PUZPV2XPvLGmnZeVk5OVm6GrueQ/LSckJScuO0NBR09ANC8vLiwr\nLTI1NDU4NzY1NTk7PERr1tTEu7qypZyYlpaXmJugqrTTPzIqIyUsLi82Nzk7NzMvLSwvMzAu\nMTQ0NDAwMjQ7SVdizrq4ta6srKSdm5uampuepayzykc1LCgnKy8xMjY7PDUvNjYwLisqKisr\nLTM3Nzo/SFTbyce+t7Gvrq2ro52cm5qbnaGpr7xyOy8pJykrLzY3NTo9PDkzLiwrKCYkIyUp\nLjY+RmfOycG2s7KvsLe5t6+lnpybmpucn6WtvHA+MSsoKiorLC0vMzMwLy0qKSgmJSUmKi89\nWtnMvrWztre5vMLLfWLSt6eempeWlZicoaq6ejopIR8gIyUmKS0wMi4tLCkpKScpLDE8SnvO\nv7i3tri9wsjP4ej56sy9raGbmJeXmp2irb9TOzAqJygqKysuMDQxLSglIyImKSkrN03kz8rG\nzNHBub3aPjc+WG/wzrqil5CPkJOWnanFRy8pJSMkJy40OD5BPDQtJR8fHyQoKy46TGPt2M7O\n0t/t1tHPy8K+v7+/urGglJKUlZWVnataLiYgIB4gIyYuN0hAOzo1LCUiHyAkKjRL+tS/t7a6\nxsze89nOzt7339rW2MWpl5CTlpiWm6tzKyEfICAfJC0/6dpqPT07MCcfHB0kKjE8Vse4tLrF\nyc3Kzd3cw8LYz8vS0uu+n5KQl5qcnKXXKx0cHyUiICtMvrfKWD9NSC8iHB4mLCwyWcCwsr/K\nzcbTWUxS5szSXnHb4GJNtpeOk5qcm5yxMR0cHiIfHirdsauyytrcUisfGx0hJigv366qrrW4\nu81ALi04UE9LSt28vd1LRa2UjpadmZeb3yYdIyMfHCZNt7O+v77ERSshHx8fIy1BybCsrK61\ncTEpJiUpLT/Yw8u5rrTOUUewlo+VnZWUmNkoHiQfGRkky6+wvqutvDQnJiUfHCE3d9XEsq2w\n0zotLCgiJSxCz8rqy6+59D47vZSLkpiQjZPJIR4qGRETKb+sv7uen7wtKismGhUePllBzqqp\nsFw0LzEhHCMyRlzXxrCvxFlhSjytkYuPk5COmFkeHSEXFRYvvaiuo5yftjkrIxsTEhsmLTXO\ns624UjYuJx4fJjZdyraqn6OwvrjV956Oj5aXkpCfOyQqHhcRFyrLx8apn6W9QCwoHhUUGyAl\nNG67rbHJXkgwJyUlLUJSbrWmpqyvtbuhkY6Ul5OPlrI3LiodFRAYJzg69rGnqr9IOSwdFxca\nHiQuSMS0try+yWE9MS83RExgyLeurrG/s52UlZqZlJGZqtPxPCUYFRoiJykvSMXAb0I9Nysj\nHh4jKi81Pk3exLu3tbm/vrm4vLq5uby+1FtQ4L62sK2jnZyfpKu0y0k1LS4tLS0uLS41ODUx\nLy8zNDI3Oz45ODg9S1FSTmbYxry2s7Cvs7S4uru/v7mvq6inpKKjqK+9zmRAMSooKCsqKSkr\nLCwrKy4zO0RMUlz6fujuXFBQZ3vmyry1sLCztbvAw8fX39C9sK2urailqK+1u73YQC8rKicm\nIyQnKisuNj9PWFFb7eBnTkxJRklMZM+/u7e3tLC2vL7CwcbMysvHycW/u7u3r6usr7jFz186\nLSokIiIhJCo0QWTJwcTNz83uPi8uNTtBTXXNvri4ubS5vLq+wMvGvr7UY9i6sq+xrqikp6+6\n01w0Jh0bGxsdICs97cO2rKipsL9uSDMqJyo0Qlf30MHH0djYzs/U2s7NzsHDy76spJ+dnZyc\nnqq9PyweGBMTFRgeJzzIraejnp6ku0s1MCgfISg1Q13OurrI70xCPTc0O0BB1rSypJSPi46R\nlJapNx4UEQ0MDBgmSLuonJiap7jyMyEXFhkhJTDoq6OlqbS7TisjIikvO+7FuKadnp6TjouP\nmp2ftCMXDhEODg4dNsauqp+dpMk8OC0mGhsjSW3WtaWhrL9NPi0fHSM9U13Pr6ioq7irlI+O\nk5eWmK0pHhUXDg4OHzjbt6qen6pKMS4kHRccJUxbyqygoK28YUctIR8oNkfAxcGuqKu+qpeO\ni5GUlZatKxgSFQ0NDyRDtrGqnZ+vOiogHhsUGils1q2inJ2pv2NBJh4dJjtYxsCppaSru7CY\nkY6Wl5eXrCsaFBgODg8hOMu+q56gsjksKCQeFh0r3sixppuaprdaPisfHB8vPPHKtqenqrit\nm5KMl5mal6kzGhUaDw4OHjK/vbCfn6lOLiUkIxoeLNHCr6edmqW3ZkYpHxscJjNszLS6sKiq\nr6GakY+YmpudxywXFhQRDxUkPL2xo56erWE3KSYfGx0uWM2xqJ6fqsNmOiYfHiItSdi9vL6t\np7ixnpaPlZmal6ZTHxcXEg4OGijmuKufm562YzIpJR0aHzh2va+jm56rzl01Jh0aHis7R2Ta\nt6qzvqealI+XlpaXrGIgHBkTDxIeLdm9qJ6cpLpTLikhGhgfLkDHt6ifn6q33TgpHxweJjJE\nUWy4rK+yopmQj5eXl5eoaCEfHBYQEhsrTtSxop6hrucxKyUcFxsiMkzfsKGfp6y01zsoHyIp\nLDY+TryxucSmnZWTl5aTk5yrPyogGBAPFRomLU20paWrr8HZQy4hICYpLjBDy7KxsrnF12xG\nOT9LSlBOUmhxS1PGrqSdm5eTlJidqsZGKBwYGBgbHiU0T35w+W577VA8PENEVk5Pzr7H3N/s\n1NLJw72/wb7D0GBMR1NSTVnfv7e1trWztbW3vcLN2WpPR0E9Ojg6PD1BQURFSlJPV1tXRjw5\nPEFEQ0pa687HxcfHx8rJyczBvLe0tLW7w87qUUlFRktUZtbGx8rV335iUUQ+QUtba3j63Ota\nRTs5ODg6PEBDS1Fc497c0MjEwry5tbGvtbi8wsvZX0hAPkJNZX719t7W3m1VU1VUWVteb/71\nalFLQz89Ojg4PkVQburPx7+9ure0s7GxtLrCyM32TUhEPjk0Njs/SExUcNrdel5dceDNxcPC\nyMvV5mtMQT8+P0FDR1Ru3szJxcLAv8S/v769vb3AydR0Sjw1MjE0Njc5PkxjfeXXzMrHw8HE\nwL6+wszc8/ZbTERAREdKTlJaYGhu/tjJwb+/wr+7urzBx8/qT0RBPjw5ODk5ODk8QkhOW/fX\nx727t7Gys7e/zfhdT0o/PT0+RU5cX/jUy8bK09vb3tnd29Tg/ltNSU1bdfh8/2r9cU9IR0dM\nUlFe/dDGxsfIwMLK03tOS0hJT1j+1c3Ix8jFytPY+11dXlxNSUdFSU5RSk9SV1xaXW7o6+bj\n4dbKxcPFyMjHysbH0N3vdldIPT4/QkVFTVvpzcjK1enf3N9u79LR0+VkcXVgWlVPS1RbX2Vq\n49bV0NPW6Gx+c1dTU1r55eLm5OTg6OTWzszOz9XdelZNSkhHSlVZXn7t59/V1/JgWmv4e2Nc\neebh3s+yvzPdR87WO9JrUVNnf+rcXVZyYnnc18/Jya6tOj49c8k2Pl1X89nW29LpX/xYT1RY\nXU9DUmr73t332s3TxsvLyNXQ1/lbTEpUWFxaZ15q6u3UzNHWfXTa0cjL0+br52lp82JJQUBC\nRT5AS1Vg627ZztfO0c3M0tDZeWrnemhYTWvf1dbT6NHExsnSeHxcWlhKSVNTTlBf1tvQ3t/N\n12ZJUU9KUEzQsK/ZWDI6NSYpO+K1sK2hoarLIByvnasuIzvjPEjBy0dcPPm+x7Kx3Uo1Pzw4\nMTjez9U+97ewvlfVxb/Nbk9SzWjA11dCTXRN3ODJcuTRy+R1101OP11LSTdW4MnPy926x9rP\nX/loafG/zlxIN0JKVVLwW01N69vR58a4xMde5OVc1evY6ODcVW1Jz2haQ15PS2U/YV/jcs/H\n7X5PbcLKzN3PatvWeWTsbOjlZubV6FXPVlvdTXVfTlVLU1zl0uPNze3MZGBQTVpFWDtNS9vb\n28b6wObQz9rF7Xlk29V3f13C5mbnXsX5YFb45lzlQEbu4WVXY8zN+npo5W9ZXlVdaGlr9WzY\n7tduWtJQ9mNU80/24s7I09Hk4OBf//VXWVp73Nl8bevm1dbqX1lcU09bcd7b7HL19WdhWmBk\naXfn4fFrZ/Lbz9r4curuZWXv6+rvZ37dztJxWGD6d1lNT1tlWVJZbOjp6OLb2Nrh3tfc3ufq\ndmNhZFxYaXtqYGf46u5mYnvc0tDU3Nvd4PNz6uz27XxdWF579HxueWxfa25WX+3u3dn9cf16\n/1lgbd7mallVb9vU0Nfu8mtcXmzt3uTp3NXP0c/eXVpbZW9icVtOU2tvbmh8ePt5Zmp66/jx\nW1Zq9t3Z53FgYXvf4t3OzdDa5Off1N30XU1bYFxYT15o7+t32c/LzN5jV2BdW05ISVFc/nvb\n09ri8HRp6OLe4uBsa3Nlb3Xn39rZ6HRr3dHe5nhw9WRWUFx0ePDf3+f0/25XXO3Y3vT3e3/v\n5d/pdV5TUllu+nzy7dvZ2918bGpvX1VT+utzd9/O1fhbXWt45N/8avrp6WVVVlv86uN+cXzh\n19HPy8zO2nhsXF5YUlFOT1VnaVtbWm7x5OZ05NfNy9Lc6O7d41ZWWVNeT1JeX+Tb19fWztTj\n3uxz++Hf+mlneuf1WE9WYW/9d/bpb97beGl05dzzXl1ebGhOTk9o6+LZ1dTNz95sX2no2d95\nau3m39DKztHfd2RdTU5YW8PjT1RI1k1KTEpZ98/V81Pu7951fdLk6/Hw2M/Jx87b4NvMzOTS\nfFBKQU5bbUREQfbLVE5d1chTSV1jWG3awr3mT3DLw8PieWZmcvj9SURO8M3Ozc3b4+vvZE1K\nTU9OSk5b6eLs2+n6+uzq6tzieFpXVVl7bV1PREpszs3S1uzx2MjAuLS2usnsXV9yXlBOWNq8\nsa2xykEoHhwcHyQpLTpnxLi5xFpHXczG0Nu8nY2Ih46mKhMQERsnNV/srqKcmqfoHxUTFyIt\nP0xZfMq4ud03KSMnL2Cxp6GmrLTLTi0t2JyMiouXxh8TFRcfKDJTzKaem6DFKRcUFyRE08Zu\nTkrtydlMLyYkLUy8qqWlscdyRjgyX6ySiYqOqCwSDRAVKju+rqebnaDCJxYPFiLEnpmdruE4\nLispJyUpNmvGxOFUSU5tV0pNZHfMrp6RioyTriYWDxkgT7itoq2msNAyGxQPGTSumZmfwy4i\nHiQoLj5vt6ypr+Y6LjdPbU05NDhksp6RioyTqycYERohQr2ypqunsn0rGBIRHDevm5mcqvUu\nICAlME3OuravsrtnMygmLz1KRT9PwLGrn5GNj5n7HxMWIjiysam1ubhxTiYdGBsrY6uin6m8\nSisoKDNQu7K5zFVIR0k/OzQyNjo9OD7ouLGtnZCOj5xLHxMbH1S0r6q8q7i9TyIaFBwp7q2p\npKy4XS0nIitIt6Wnsk0wLzhQXl9PRj9CSkY9Ojz3t5mNjI2oPRgUGyHS5qqroZyotScYDxEd\nNq2hnZ2otEMkGhceNLKgn6tdOzc9RUJBPEJFR0A/cb+0r62dkY6PoDsaEBcdRdyzra2lrb8s\nGxMWI3mnnp6fqrhFJBoWHjernZqdsGIrIyAkKTBPv6+yzUszMTlLyq6WjYqOpj4ZGBkfKC3v\nuZ6cnLgtGBMYIkeyp6Oiqbg7JR0fKT3Cr6yuu9tAMCkrNFjP2c/Ltra/70M65KKUj5WfaS8l\nKCUiJCrerZ2frE8rIiIkJy1Fwamhpr42JygvODYxNUjGubzcUEVO8sm/v766t8BaNy81QLGU\njY2WrEIqIR0dHCI1wKmjqbzjPCslHx8pPFLNwb7J4j8tJiMoNdKxpqGhoaeuyktGWvvcz8a8\nu7/KUT4/SVdrZ+XJw8LFytfeXkE/QEVOVUdCQURRTj41MTQ7Pzc1P2TGurq4t7SzsbC1vsnG\nxL7F0WxLPUVVXuViV+vOWz87NT5Z4u7mesu8w9xSQDg+RklLPEJH59HBv8G8vMbN1tzIwb+/\n09NJTVdNWGpodFI9REJDSE1OatvJw8e5v9hLPj9GUUlPc/bO0cu9y9P/3c/Fv7zGwq65tLXa\nVUZPODxHPUtHTUA+Ni8wLS48VWrLyb3FvMDM0MrJyMLL1MbL/eXi7NLc+1hNSWVtYtPIv8bK\n72zNx37w+efN32JMWk9HSD06OT5FQTtCUm/v3szEv8nKyLy8vMPabmFjaWdNQ0xdTVJWXmbY\nzb3D7Nl1YUlFSk/8aWlefeHyVU5WX8/RzsnV719UUE5RbOTQyce/33ZZTEhR7tjR0s3a4tXH\nzfBnWnXv9d9jV0pHRUc+Smnm1NDT/OtkZO3Lv7zC09B4X00+Q0tOWWni8fbZ29ble87S0dp5\n+Nnd3eb9XVdOPU5MTfrsys1u6dXV9FJJUXJxaOpm8NT34u3yd/lt2dLMzdZ4Xfbe2ezY+eNt\nWtXY6Otr53RZTUtIR0xU7XjeyMzbXUxc6mxtYFtLXOfGxtnUzPhrW1NTVfPM1s/Z8WZVUl1p\n4+3bZll93NTX1NPLytlocV/ZfFZPTUpVWv9TWE5ZXFdOWVl8ydHP2szM0G5d9nbf7upv+vdP\nTE5XYOZva+PQx8bJxcXKz9TX3c/66mhRRT0+QkVBREROTV9b9c++ydDV7ejU2NbR0Pjbc1ZV\nVvdeV0xY5t3gxr/H0dXTy87mb2RwZmtlc2JYS0NHP0NF+uXN6mpw3tXuW1Fq28/LzdHP0Opc\nUU1Y+OFs1dnZe2Nm6ujr4u/f2/9rZ/Xk2OBdT0tWZWFub2NUU2razc3X193c4vdWUFRMTFZp\n+erT1Nvcbuz5/Xh268rAwMnV3H3zWVlUZeTpYlRkWU1EPz9GP0FJSklKadO/xM7RysTGyc/a\n08rCv767uLe8w91cT05UddvP0/BgRjkvLjAxLy4vMTE2PEVMR01c2cW/w8a7r6efnZydn6Op\ns85GOTQuKyotNj9NUEk+OTc1Mi4tLjI2NTtCSGNfYnDtx7q0trzDxruyq6inqKmpqqmttshY\nPjkxLSstLzI1Oj5DRkdGQ0NCPz4+PDw8PT09QUdNWevNw727urizrKusrq+urausrrO7yN1b\nTUM+NzIxMzMyMzQ1Nzw+Ozk8RUpHQT9ESEtPVF1w2M3KyMO8tbCura6urKqpq6+2v8fN0t9k\nTD02MTEwMTAvLzAzNjg6PD1AQz88Oz0/QUNOZ9S9s7G2uLexraytrq2ppqaorbO6xNlOQjw3\nMi0rLC0tLSwtLjI5PT9FT1dZTkdFSlBZXm3x3MvCv8DAvbavrq2sqqempqertMLZbFNFPDcz\nMTAuLSwrKy4zOTw+P0dSZHFTSERFTVhYXHbcyb+9vLy+vbq3tbSxrquqq6yus7vJ1O9bRjs2\nNDQzLywqKSwxOkBESU5ZWVldVkxHQ0ZMTU5W9dTOx8TFycW+ubOwsLCrpqOjqK22vcPK7Es3\nLiwsLi4tLCwsLjA1OT5FS1ppampZT01a8OxwWl7h0tbb1MzKv7u4uLexrKilpKaqr7a7v8no\nSjkxLi8uLCkmJiktMDM3P1Fu39nafV1cXmRnXnTp3dfV09XPzsvQ0MS6tLKyrqmlpaessbm+\nxdlbQzoyLiwqKSkqKy0wNTg+Qk7x09XvXu1dQ1Ja1Eg6PUVrWlf919HMuqedm52hpKakpqy/\nSzYyMi4rJiUnLDY/SkzfsqenuE42MDAqIR0eJS44O0BWyrzBxc76Zk9KRjx+nIqHjJOYlpmm\nNxQMDRQdISUyvZ6Xm6xXN0A/KBkUGitOYEhhvbC8QywpLzAvM0bCtLGxvNZcRL+ShYaQn5+a\noj8WDAwYKjEwSKuZl6JPIx0hJR0YGy6+r79f+cbQNCEfKT5HPkjEqqeuaDg8PzMrsYuAhY+X\nlZSoJA0JDhwoJy/BnJWdxCogHhsWFx4tRM65sbS4wlIuJyYqMDU/2rWsrbW4wOpaRTTLlIiK\nl5+alJ9IHBQYHh8bHS7Bqq7EUk5MOy0jICQrMD1GWM7Dw83Y3+hhU0k+ScjGS1nH0+PDWUBf\nt6Sdnp+Zl5SYoLvvRC0lHBobISMlJycwQvP8eGfhvb3OUkc/PjgsKCguOk7vyb26tK+zwtLz\n/Hbft6ObnZyamJadqcd1Oi4iHBseIiAhHyg3SFVbyritt9ROSk06LSUkJiotO1jMurWvr62w\nuL29vM3HrZ+eoKOem5ujsMveRzYkHhwdHhwcHigzQ0/qw7u2xdl4ZF5ENy0tMDhBTWLWvrav\nra+0s7Kyuc/uxKyoqriupZydqrrkzU03IB0cHx8eHh8rNkZO78e8tre0usHmUUE4Ojg3ND1T\n28jCvbu3u7y+wby8v7yvrK6zrKmjqK+6xMtJNyYkIiQhHx8jKy87QmbWwr28u77B2OdtX1tN\nSUNJTFZu4szAuLKurbCzu8zI0vLJ+967tq2utsvMWD0vKSgnKSkvOEx86tXa0exqYmdqXVlc\n59l+UEk/QUdFVdrFuq+ttrKwvLXOT21KX/ddz8C+vsLH0NXfUkdCQExPTklHTEM9Ozg5Ojs6\nODxCN1qtzMm7vb3exsPHzsvJysS+u76+yfZvVUNFSklLV2lvysXNzMrP4v5mZW1pYFtiXF9v\nWE9EP0U8PD89PUlET25KX2J81M67sK6rqrW6usrD0FBda1nd6lHvdElFPDc+PTxJX3nXy9fL\n2k1NUda/NUPjN78oKfrJtymswyyny9yswKuo0ces1kO39zXMTzBJPjlXTUZeVlhWXf5zX1pa\nS2vX589rY+9OUUIzUa+6M8+uMEm/Rr/gQqy4RqusTr7CSMpsOe58Qn5QPk1ERU08P0lATFjf\n3GXZxcXby8VTqKMotbYvqz0nsTQorS4jodEsvNXiukVKq988q7c/wN9H2T8zTT876EQ6alpR\n0dTwvsPGvdbJzV3NyV9u71Vs831m0+VO3VJVbzxOyz88w0E1pqw3s9pKu0RHxWg5z98w5to8\n0948281Efcvx3srL3ube2dXa3u/cyNTZwM1SzNlF1kc4ZUs+TkdC9XZQ3V5Iatxb4sLS0c33\nX9bV0szk4tTw9nlUdtxp6PBO39xf197+5e7O8WPT1d5VSmBNO0xtSkFm1ff/79rT7kpU1HNJ\nUnbS3k7Ju83awLx9Yd/k4/tvcOrsXktT9GVWXGrs7dnH4FZzbGhmQkjjST9daHlzeM/QZurI\n3PLkbHXc3+vKzmPez/f6ZVra2V3vWE/nX2DuU0pg1G1U32p60OHgz9/Wz01X0G/91GdeWUpW\n5VlDW11Vbl5b18jS09jax8/21M7Yclzx6HL86VlJSD9EWE5M/uvfysW/wcXEy9XfZXZ1XE9K\nX9ZINE3TUz5AX8j5TOrY187S3MfF6M3G49XFzNTdXE1TTEA/Qj9CSll24N3NwMbZ1sTAxczO\nzs/Z1uxRTUxHRkVER1NdYWRm3M+8qzwqxDIzqK8toKsbrkYhnicdny8kn0Y4nkpGoUlKpznX\nrCKqTiygMUSnJG2uHqvMJaQtPK8k8c04vuffx9rVtq0/sVwruCJA3im8W1W93r260MXMVtVd\nWcd2wcjdxVPl7ELtR0BZSE1UVVtkTFhPTlpNaEVF7GTncVzXw7fMyLu8r7G4vL/B3fN+SlJV\nQ0dObMK8yddQOi4pJSEgJCwzNz9fu7C0s7q+wc7Nxa6fmJabn6auvEEkHBoeJzJSv6ympKq6\nTCkfHBsbHCI48Lq5z+1MRUI7P0BewLWqp6qtqqOblJafpre6zzEfGRkeKjtX1LSqp67QOSoq\nJR8eICtM7tS7uLq/bjQrKys1TOm+u66nqa/RZrSckJObqLGrxDUbExYfNWlv0reooq7hLiYp\nKiYgJC9VxLq8wsLbPisjIyg1Vsi3raqoq7tLOzq2l46Ql5+kqLkvGBARHTLOyLyxpJ+r5ycd\nHR8fHiMvWr6wrrrN4044LSwtPM+4r660ubS+SjErTKGOjY+bqKmz7R8UDhYndrS3sq+lqr8t\nHBgaISYrMlbArKarv040LConJy9Sv62rrK6rqrlQLixKno2Lj5uqrrs/HBAMEB5Du7Otq6Wn\nui8cGRshKS49+L6ooKOxZjQrKSoqLTvptK2utr+8x+g4Iyq2kIiKkaSwvcouGA4NGDarpqar\nrKevUh4SERklND1Lza6horFIKyUqLiwsMvOuoqKqvsa2w04tISi6komIj56vwegxGQ4MEie6\npKOoq6q1XiQVERUfMFjJu6+mpq3ULyUkKC89QuOzqaOotdRSWdpVNDBgn46JjJeu7TwtHxQO\nDxo6qZ2eqLXA7zskGBQbLc6ooaKkpau+OCEZGR4qNjpVyrCprr5NPUly019HYKWPiIiPocND\nOiwdFRAWKMGinqe43UQ2KB0WFRwqXbKppKasufM5Jx8hLEXJt7Suq6yxwmFGQkxTZWTmrZqQ\nkJSgwUEtKyEdGRkeNLinoq7IT0VBMyYdHB8u3q+mpaarttg7LCckKTM/csq7sayuucz3WE9A\nMysyuZmOjZCdrMtNNycbFRUaMbukoKaxxvk7Kx4YFRYeNcGqoqOmq7PJRS8pKjFOwbKtq6mn\nq7jaOy4nJSYyuJyTkpaeqsBPLyIbFhceM8OooqSwzmE/NCceGx0nRbeppKastsVfPDErLDFB\n0L2yrq6xvtxOOzMvLSw3upuSj5WertJaQjQkHBkcJ0m0qay9Xjo2LysoIiMoOd22rqysra2u\ntb7YTD86O0hZeGxvcnzc7Fs8My0tRbqgmZiboaqxu9g8KB4bHilAzLm1vc5eSzouKiYmKTFM\nuqmgnqGnr7/hRjAoIyQqN1fMu77UUjw4OTkzL0KznpWSk5ieqrtUMiYeHR4iLlK7ra68ez0w\nLCwtLi4yO2C8raqrsLvLa01DOjc5P1BeX1JIQDo9RURCRVHJraGcmZian6rDSjozLispKzVF\n599iRzo0MjEvNjpGXlZh4ce/wcXV5eDb71dXTT8+Pz9FUFVaY2fhycLDv7qwqKGfn6Kpr8Du\nUEQ4MSwpJyktNj1LT0xJQUA+P0xcWVBPWfXLubS6wtPR1NnqT0k/PDxETlJhaePbzMK8uLq+\nv7qwqqiorLXA11E+NjEtKigoKy89Ue7T09zv4tnedFJFPj9P3czBv8THxsXI1l9FPD0+R09l\n1c/MycnIxcfEwb+7trS0uMDLbElAODYzMzY1OD1S0cO/yNPZe3P9WktGRkxdd+bf4XhQQ0dL\nTVphYnrXzMfHx8nQ1tLNysbBvLq5tLS6yO1bRT8+OjYzNj1IYnxrZ3Te0NPeeltNTU1LT1ps\ncmtrXFVUUVFPXm733tHLycLBv7+/vb+/vbm5ur3K7U5FPTkyLzE0PU5pd+TMwL68wcnbXUxE\nQT08P0dMT1tpcHRcTlZm4+Lb0MrEvb6/vb68u7q4ubu+yuBrST06NTEvMzk+UeXUzs7X8m1g\nS0FDRkhPZuXZz9Pf625raFtPTFfgysW/uba2tri5uLm5vcXV6/lVSz86NzMzNDY6QUlQVE5M\nR0A/Pj4/SF/lz8K3sbCvsLS6wsfP2d5qUk1PUFBVXnlvcu7YzMXFy8/U2upZSUdIR0I+PD9J\nXfrodWNx7m5ZWFlXV11u7d/b9l9TTlx03dLKwry8vLu2trvE4XZze+rtXE5OUlRUVElGQD48\nOTw/Pj9ESV3Xxr/ByMbFxMDCzuRsW2Fqblpr6OXg73Nzeezh7XJle+Htcnnj09Do+19f4NTM\nzc3V2/lXUEdCQUA/Q0hOT1rw3NTOztrj7HFs/ePl2c3P0M/P3t7m8X96dGljYF9bZXBx6ex5\n8+fc0svJzM7O2eprVVNLRj89P0RLSkVKUHDe19LW0c3Nz8zHw8HEz+Pe5fNoUkpISUtLTU5W\nX3ncz8rIxsTGxcbFx871V0pCQD4+Pj4/Q0hMVmz24dPU08nJyMTGxcTHzdfvZ1dRVE9PTk9W\nXHbw29DR0dnz/n3u5v5nW1tfV0tIUGfr4fp15tPR19fQ1N/tYk9MT1pz+/H659fX3dzW2t3Z\n4npeW1xTWGDq0tzsbV5eXWRZT05QU1Vj8u7t3dTU2tvRy87V2uL+fuDnZFdh9u1waO3e0M3T\n1tvtc2RVTUdIT1FUW25ybXh54NvreGFdXl1tXlVm7dnMzNbd1szJysvLy87O0uzi3m9US0dH\nSkhJSEdMUVddYVhdY2X15eDc09DU1t3Wy8rKzNjff3x8fe98/H5sal9cV2Z8ffHt7W9lZ2D1\n2tbl+eDW2v1ZUVBOU1pSVldWXnbw6uDc7GR67/vd3OpsaH12efXqzsbEwsfMycjN1eNdTUlH\nRUlKTlZYWlVPT1JUVFpide3e1NDNysvP6m195NzX2/Lq18vQfGNlbWlhX19s+PDwXVJXYFxS\nV2X7ZWbv5dXN0N5rYGh28O3j3tnk/21sY2b5+XVsXFplbvL57drW1OB6bGFYU118+/3t29XV\n1NHSztl8XFRVWlVPU1JPWVxhbvbc1Njn5dPQ33VmeXhrZmZeYfzn7Xv6+u/t/eDPx8nM1+5g\nUlVUU0xGR0lQU19v9t7f19DOzNLc5d7Xz9rtfGX43tri6HRcTk1TTVX+8GtZXlpeX21++Onf\nzsvLzM3S19vv4+15/2FPT1psbWhaTktLUVpcbHd492ru2dLW3NjSzs7Q3nz99Nzg7/Pt7WZb\nU1x87+/6cf548ebm8W5zaVdPTk9ee2VeXWvo8e7p4+XZ0c/W6mxv+PHh3Nva6F9SV2Ht2OLy\nX1ZdWVxfaH18fOvk3dnX1OF8aO/f6HlTU1Bc8+53a3b+7uXV1NnX6/5ZTVZab25rdHLm4t36\nb+zy3uPqdWH3+OHW29TV6/RXTlNYdfT372hcW1dZZWzreV5r/+Dh5+TY19jS2uvo39vc6fL7\n5N3ocGh0eXpOQktaa11OUFtifmtZZvba0M7Lzc7Lyc/Z3u3kfmNdWV1UU1lbXFFeW0xRV/Tc\n0sjKzNDP0dfNz+PoZVhPSUpLRUdITE9TZd3OzsO/wsjO3N95Y3Jde+buY1hj6uHmemX4b2pn\n/PD5fvZjVmFkblpOVGPr5/p4cuPu4N7w2/vl4evievDa5l9jXPn0W2lt+nzu6e7v/uve5erx\n49TOytXn+3fvYE1HRFNVT01NbeDc2Nvq82p25G5q//Lg6fPb2Nv4X2d03N/sZmLz3uTo4+Xi\n2Nnd3d7pfGljVFJORUZGSFpa9NfWzNHU1+Dc7Hh+/M7O2fZm929rZFZnV1plXXZ0y8DHz+fh\n62BcWmxfU1FHTVRXYV5j7nvk5O/a92j4z8nN3tzNzM7c1M/hZlZPUkxDTFVmXlV0+eHs1c/M\n19vscm/409jfXl5v+V5PUV7uX1BUbtbPb2NdWGf079r6btrjz9jy4tjT3WJ239jP1vNbWuXZ\naFFQY21lTU5YZV5bTlV0aGlebtvS6d7MyMbT2c/V5m9dflVSUFJZVF7r3s7SbXVV3u74dFPo\n3tHMzfFpTVn5VlpfYHxyXuHjbORx6uxSV+jW4GhY5+bf5dPj42Rdc2Xj+l9qdd7UaHBmX+9e\n6N1mXPDSzeZleebmbOZmY33n4G1g7NDYVkNNWltPTnZnXVvqztbeeG3Tzs3Y69nP4+xiaN7j\nZGBYV3Vc3M/P2ltqae1SPkdc3O9OZdLJz1ja5et3SF9ebtnd29LUzM7d++n83e9da2h4Y+lk\nT0lEWlJLUvT7cvnSw8nY3NLS/XT61/dTavfc/u9sUE1OZmhd72F78d7Nzc/I0MzS3thcXlt3\naVFT9F9WP0d4V0xKUNTm+MXBxM/CxcXeWdtmblFJXURIR0ZkW3BmUGzexMXW0e3N2FTb8n3y\nYujs3HhXedr1b1Nv0Fpj7NjPaVJfVGJbYNN+W1ZU0M355Vfl21rU09rZV+nNXvt7Wm1WWu5d\n5+XN0VLX7snPTubybWJBZW1n/ljd/W9LedfY/kpaydHeY1bW7/BSQvfe19FQ0cHT1lhkynRg\nSVbXYU9ZddNiTFvhy+5j0MfE1v706l7pZlJMUXJpaknu2tveUljvUuhy4d5qfe/X3Nrb625v\n6eRXcPPMyVzL1MjIRmNXVlxDTVNITkNcbW3qY2r8ftDOysfOyNH57uzn3WN2Y9tnXWda5F1T\nbf7OztrpSUxWe95u+3ZwXElS3t5YU+TQ6trEuNxUaN3SbUtvWVNbTH9EUNTOdU1PysBy787K\nw+Xu1GJYVk98Z1pcUHpcXPBl3OVtVkN34uxOT9rW1WJbzc7aynTTyGfqWmbg7NPabt1ldFpK\nc+hh9t/ixGfx5khtT1zuSVpN6utP29LP00xlbkdgUvh3UMnZW9N8zcVK4dj52nPkxdrT0uLP\ne97aZtZfVW1Tb08+UEJJT0tlYmHj7FhaatDQ08rSwd3dx769zHtPdlA+TUpSYWF57vX5d8zy\n+E1VxPHdXtq+Z97SW9RSU05LXEtNcs1qVlVw/kNNXtXSaubAv83hyMLJ6GjKfl9CRObo8UVI\nZOPpVU5v1dpY8Vx+3Ezu4eTH4+nF7FhFcc9bXk3k2mjpysfD2uje+ONTV1VLYUpWYFDdac7n\nVmblYU5XbsTdee53yNBPW1l4ckl758/o38nOzfBl5ttlflfe9G1YWN5iblbd635uXGtTT133\n+e732FdXW+/ZVti/vczy59bRWWJGUOJKT3dm0fvpxGRiZl3QX1HPXM/u6tPf3lX8al9kXt3j\nVv1ZWFhgc1VLTE/W/uG70sfteNV4Xt/uUVTbcljTz7/cXt3U2UxdzPNUSEJT1kdX5PLMXVXR\n6VDvzMZaS2zV1UhLW978VsrUwdTtxdDge2RnXT8+UF1mbF7q4Oa+0s1u88FLSmNh6lNd9P9n\na3Fr/c5gW1F/1fBK88DL53DSytv+315dW2DmWF56ct5RSdnde1Jw+G9ZT8px3ej2z9jTZlzP\n3M10WM9PR35O51lJ2elYQ2HZ1G1czNHf1OHBztz4Zmjr/U5TVF1JTO57dFJZ1t7V2vbv4efq\nR03r7NRd0uli19LC7WPF8U5NYMjMTV/ncNtHYVtJdVLQzuPc2vVR8+Jv60bdzF1uVXrua9PZ\n235O6dlUV11azVRgzuba12tYbE3u+NpvV+rM1dH63dJ96ebPWGxe4WJPSmPpYOB5cNpOXNXZ\n2UZsyfRJV/dlRnHN0lv4x85kVM3K3mx86mNBT+PN21P++Wtfa95fZFda3OjLz+bV4P5dU2RN\nVOHby2rex9/QfUZaQ/36Tnjj7PtP+uJj92nvYlXYvt5q4NHYUVvcVUfyzdJR/dnGV1DoTV9y\ndNXUyr7Va/TWXl9vbUtCSHt1Tu5sbWBfz8vlXevL3vls1+dZV17rXVrl2tdjedbWzF956ebY\n6V5ef+T6e0tP5FBWTmzcTvrdZGdS0MZZ29zLyOzV51drb1ZbUtbQcWn0XVJOT1p3UnHq0r/I\nxcfX6N57ZllEVdpZV1dd1fToy9/nWldlTvrU3XdZ+utlVFdbWlNdc1/s4uDNyM7p6nDP1Upe\n2czP7dzMyX5RTlVOSkpUTVlQ7Mzu28rL2Wju6e/rUdTbX9hxZexceelrbmjua1pQV/no2ere\nzNvxVk9uW01YZ01L88rZbefHzvL73cLHysjQ1Hxc7llLUE9MS0hTTUxn4v5pbv7f7mTT2c/J\n3s/V5F5X+956bPdrT0tv52NZe+50WVrwf2V928rFxs3a3ebv5On4XvtrW11naPT+WEhCS1JU\nUUxs29PM3s/M3n3dz/5539TaT1n5VFzq19pYVnpXeOrWytjd3dvY2Ojs/l9iWGj1YkpETG9U\nVFFceFdecNXKycjL0drV2NdoYV9lbFtvc+L5c35ad+pw431b7tfM2WNz4mpbTEhVWFp26tvU\n3dHJ3fB4ZnVPVmFp3+D36m5o6O1nYWLg2+7g2dTh6d/x6WJPTU9oWF5oYl9YZfB57ujufHHi\n2eXq7Pvb0tfU3uPd5dnfdXr44d/2dO9rZV1bWE5OT1FPVl/r5GZZZNvQ4OjZ3tzX1N7ueuTb\ndmf449jq735YW2Btf2NaXF5s6np659zX29bS0NTT3PlqXWZcSkFARk5OWHH24Nva2NrQysfH\n0+nxd2VbVlZabuz9ZXvX0t3m7P51cm5fW1tfe/Rwb35qWVxv+NXY2Oln4tje5HdibHx083D3\n6Oj5a1xcdHhzZGZ+fOzazc7a3dv0Vk5cXFhXVVZYWmr5dmJf5NPO1+fn4NXOzc/QzdLgemRm\nbm5dUlJWT1ZTTkxSdPD17N/ZzszP2+Pd3vhgWVpnbHz3+/H3bWdoa2teWllTV1/61dTV0s7O\nzs/X5Wtibvp6YF1cYVxYX3l2aFtTVF555ub27/Hqe3Xd19HP2ejz5dXZb1laZm93Z1ZTVlpm\nbnT47OLmcWF33tfc6+na29/a3unu9WtZYGhr7uT2amNbXl1cbffv6d7a7nZ57O9uZV9haGVd\nZ2547Nvb5fP37Ozq5+Hsf/N6YVtidWVcaOTj7vTn2tbKytLg5Nrcbk9UX/x+VElJUF9uXVhY\nX/3p/3Ti08nM0tPU4eje3/Bpa3dqWlNYYnF+a25zamBbWVlicXNvfHN18eba29HOzc7U2+Di\n6uVvUEhISEpLTlz40tHa3uDa1tLa49va2eLsdnHz53tmZ3NpW1dYXF5fXVVXb+Le5m9sfu/d\n3N3m4dTW2NLT3uTreG1dWFBNUU9OT1vx5e3o3NfUz9Ha4O3373Zu+uDfelZUWFFUVlZjcfnf\n4e7m1dHL0Ot569vy59zb0eh2aVdoXFRRTl9vcfFqZuX+6+xZV2Fu4vly3+7s8m/z2NDO0djp\nfFhOVldXWmHx6GVbbefT0uVrX2X/f33dz8fKzdDkd1pNSk1JSVRXanzx3dzX42hx2t7i32Vl\naHbf9l/i39jO3+Lp7vFZVFro7vl8bODeem12fGdTVFpeYuTf3+Ds/ub0e2Vgfdrb0MzM13/z\nblRKR09NRkhNU2zm79rU0c3NxMDHzsvOemRLTVFJXFtQVmdv8nVn6O/t+OpuaN3c09zi3tbe\nblNPWe50W1VY4+hsXlze8GPl3d/86eHT1dv3/eZtbFpbcufU32/q/GxeVmN95F9dUkxi++nd\n5WXiz9TW62To2+PzX/fj4Oxt2+fv4G1VXFNeaFBefXhvWFtmaPrV0c7V5tLO4eBoad9mb35g\n/WZfb2LncuNyU/RXbvHb0OVXXuVXX3jt1mBo2ehfcuvq4nPv3+p+YXVr5u5n82/z6G1mV3fq\n59Zt+H5n2+Rj5WdmfmjzW27429xvXWBo69twZP7P0ubh0tfdX19vWlNPVV9WS1j/29fn9djq\n8uvt3N3v5ed8ePx3c1951uNq1Nfm02VXYFNycFFfVFJlWmvs3/BiX9zHzt790MbNcVLkfFr+\nWmhdX9X+YG5kZFJQXU9o7urc4NHM5M3P4+946fvkX3Da8urwet/uYE9dZNzZTk5PXWBMUmNn\n/tLQ0tTZ0sbLwMpvX+zqV0VJTVRIUO9fbnVsfNvsz/jty3Jc1GVk607bz8/Gz8xb5VlX01pW\n52VRTklY7ef68NjOxMZqbVJOW+/NxVFASWLy/d3a00xJ4ebY5l/TWeLC2+JWbN9ST9vT2+hQ\neUtH1NvQ5ljafEtrzcTfV1Np0OZVW0xy5W74X1jZz+njWezLy9NL7WBTU0nE5UhVZM/O087W\nx071Ze7AWVVj6FFBcV7NyGNfR0lcSD/XzN1pV8y/3lhc027L10f+V2LI8urKXklRYN64wM/K\nU9DtSDxa2E1PTNHUS0vQwMjWW0xdUW1tRdPUceZR5sFdTlhd38vdzOFgR1tLev5W0MK+12Vt\n6N/fV0lbVtReTb7eUV8+XUo3TenP+9vS4tFa0tVpZW5fW2Hk2OxeW01SXk9PTNbBz+DRwcnz\nXl5/SjxH7s9fPlDLw8Xu1L7VV1jh2X3wy7reOTtt71I4SsXKc1TLt7nIwrS1vsjMv77Z08nM\n8j8vLiwkHhwbGxscJSktOFPAtrq4rKisu7ilnp2Vi4aHj5eZozwYEBUaHSd8qqOrw0EnGQ8N\nDA0OEhkkPFdMPD02JyYtPdSwkoCAgIGFhZATAAoLCQsWtIaKmJaUnykIBA8OCQ0nrafiWK5h\nGg4QGiEbLKObmpicl4CAgY6aj5EfAg8hGBUasYuOPEy7aB4LCRwjFRxArLQqJmEtFRIXISwn\nQqCeqa+utbyHgICMkYeJLwAOJQ4NFKuKjymvnzoQChVMHw42oqslGT3IGgwZJyYZIbOj/TG3\nsGAjyICAiY2JgI0JADMfCQs2jIamKJSuEwUHGzcUHpuarygp5ioNDyQkHhxcn7Q0t7I6Hxzk\nh4CAh4OFhSAADCkDCRyYipDLkZEeDAgPHBUSppWgrlG95xEMGRUTGCKwpT7lnq0sGB1rioCD\niYSEhCkFHVwCDSWXkJ5sjJQWDQ0ZFwwVnaRmw7yvHwwVJA8OGz+tz0SfnNI3JjE+j4CAiYOD\ngTMFJNMACBmfl7lDjJIVDg4hFggRmZ/fvaWYNg8eORMPFS3NOe2epz9gPi0fIYyAg5GAgIMt\nB0k9AAQhm502uImSEhMcHw0HHpvHQ56WnSgXLCAKDBgoNUCnmaf1uzgaFUyAgJeGgICMERqj\nCgARQ6gtVo6EXhYtMxUFC1e6IraZlbcmPlUSCREZHhw7qKc/a887JSGRgISVgoCC9RLBtgQE\nJK+0Ka2JkBsdMCoNBha0QCaul5o3HS8rDQoVJSgicp+pXb6zuWs7mYCJloeHhKgfT6cPDBQ3\n2iomo5g9LCk/JxgRKTMuLC/UZyokMSsrL0S+tL67rrWyuMPe07ejp66fnJyeoqKercPvQS8u\nKCpCU0o5NEF6Oi40PjcrJCUoJCAjLTAvND5HXGRK2rzO1ayhnJyYk5OVmJiYoK/GSjYuJik2\nPzMsKCwuKigrLi4mISMjHx0fKjM0Nklt3+V/1bu2qZ+cmZORkZaYmZieq7v9MyolJicmKSsp\nJyksMDMvLS8qIyEjIyAkKzQ/U9HG3GXcys28p5yXlZOSlpudnqOrtMVXOC0qKyooJyYlJys2\nP0BHTDYpIyEfHyIqLzI9ddXbRzE1RuK0oZiQjo6Pk5mdo7XPVUk6NC05QjQrKyknISIvPTk7\nQjswJyIkHx8kKS05Re/VWExK37SnnZSOjIyOkZieqsFKNykkIiQqMC0pKCooJCcwQEhVT0I5\nLywqIh4jKC03PE7Y3E9cv6uempKOjY6QlZeerug+KyIfHyQqLCwtLi0qKS4yNzlDTTw0MC0q\nKCIjJygsNTxETu62qJ+alI+Njo6PlJujsdU2Ix4eHyIlKTA3MCsrLjQvKyssLzI0MC8uKyUj\nKCgqMDpVybKknJWQjo6Pj5OYnaKtv04tIB4cHR4fJS0vMz9CRj80LSwqKi0rKiwsKysrLS4s\nLjdftqOalI+NjI6RlpmfqbjQSzMqIyEgHx8jKCwuMj1DQDw4MiwoKiwnJSosLS0uMzo5PX+1\nppyWj42Nj5GXnaOsvdRJMysoJiYlIyMmKSsvMj1VSz08OC4pIyMmIyIlKjE5OUXZv62hmpWQ\njo6PlJmeprHDYTsvLSspJyUmJyotLzI5REZEQToxLSkkIiMlJSQmKzU8RNq3qJ6YlI+PkJCT\nmJ2lsshDMSsmJCcnJicpLTI1Nj1KRT07OzguKSglIB4gKCopMEjZv6+hmZaUkpGRlpqdoKq4\n3EI1LiopJiMkJywuLzU6Ojs7OjczMzQuKistLCwsMzk8Sdi3raWem5iXl5eZnaClrLz9RDYv\nLCoqKywtLzEyNzo5NTIzNTEtLjI1NDI2Ozc1PEtne8CtpqOhnJmanJ6foqessL1nQT49Mioq\nLzAsKSosKysqKiorLjM3OUFNU0dASFJk3cG0q6WfnZ2dnJ2fpZuZysYnLy4ZHyQvL0tN88Bh\nMC8oHx8bGh0bFhofHB9jno+FgICAhZacJwsAAgYRLLuRhYKMltAbEAgDCBQf356XkZa5JRoO\nCQcMGTW7o46DgICAgJHOGBAIBwEiP5qWj5SWrRcPDQ4WL8+mlZmfqTgdGxkVHB0cHyosOjYl\nL6iMgoCAgInbLQoDAAUkvZOTio+PIQoFCA4f+ZaLh5KfPxwODQ8WKjMzOTcrKiQVDyCZg4CA\ngICNPg8CAAAXN5GNh4yPuAwDAAQR25qIgomeRBUKCg0WMrayxF0nHRoXEQ4cmoCAgICAkiIN\nAAAAFrmJhoSLmjwJAAACDrONgYCGnSgPBwcLGWagnrFDHxUUDgoOFkeBgICAgIcyDgAAAAAl\niICAgZKqFAIAAAMpjoGAgYu8FwgCBw8qtqew/i4aFBAPDQ8cnICAgICAkRUJAAAACquDgICE\nmywMAAAACbWIgICGli4TBQIGEzuupb09JRkYFhMOEyaPgICAgICeDgkAAAAMq4GAgYSaHQoA\nAAAItYiAgIecLBMHBQcUNqukxy8hHx4YFA4QI5KAgICAgJsQCQIBAApKhYCAg5clDQQAAAUt\njoCAiJ09Gw0ICBEosqTEKx0fKCYaEBIhm4CAgICAjxcLAwAAByWPgICCj1oTCQAAAxaehoGH\nk7EqEggFCxc1vtw/NEzW2ywVEBRLiICAgICG4BYKBAAACjqHgoCNmkoZCgABCTOViYmOl6s4\nFQsKDxsoJyEhNsKwOhsVFSmRgICAgICYJxEKAAADEpmJgIiNnTcUBAICEUuckpKUna4rFA0N\nEBcaGh8+tKOr1i8mKqOEgICAgIy9Jw8DAAAELJyLio2Nok8OCAMKGjG2pZaTlKQ5HhYTEhEP\nEh/foZymv11Kp4qAgICGlK3vEwoAAAMespKMjYuXqBoMBgkTH0K4mpKPmtojFxQRDg0OGjqt\noqOrt82ujoaAgIWOoqofEQEBBRXjoZCQi5OdKg8JCBAUIDSqmJKXsj8jHBUOCwsVKrSioqGh\npZyNiYCAiY+ltyETBwUKFDexmJWOkp1THBANDw8WH0urmpukt1Y0GhELCxUfSMyuoZ2SioSE\ngYaPmbkyFw4KDBEeN7qnm5ecqzofGBcWExYePa+ioaWqtUIgFQ4PFRsgMr2nm4uCgICDjpeh\n8ykVDQ4TFyYuRrupqK2+QzIqIh0bHiU1Tkxhz72po6nYRW5CMjA0P9ywp6WmrcFl4NjNw7y6\ntauqrr7sOzAvMTZIy7q4wP5BNzEwMzE4SebbaD8vKiUjIiUrQ7inn5+jqa6yvs7e0MG0qqmr\nr7jWTT8/TVnizMxySTszMDEzNTlFXGtPPjMtKicnKCw7zK+op6qwtra6vMbFvrStr6+ytrzD\n50xOVOrf608/Ozk2MzAvNj5Nc9vqUkc+Ni4sLTdpvbGwsbGvr7W+zeRmX+bZwLy8xdJ8VGJ/\nzc7XXlJMR0RBPT9NeMzDwM1eSD82LywrMlDJuba5urm3vcxsUE9Tcmt96NXP1Olca9fEw9NZ\nTlhdc11Z5ci6trrIdktBPTUuLS85Vcq9u7u7v8TJz9fmW0dHP0VPU0pGRkld7NXRzdPZ1MzG\nwr29vLq1ub/VXFRMPzcxLjE7TmpdVV/XxMHG0XRWUlRLTl/ueWx1+tLGxszSzMnMz9ju8eLZ\nyMTK0WtHPj5APz09Q05c3s7OysC4rK3XMy03ODI1P0lEWs6+u7u8urm9xtLf3ON07tjJycTL\nZUI8QUlHOzY2Pktc391w38rCwcvOys7ceGxWTlZPUFny293c7t7b0MzR2uHt2cnKwczndUdE\nREA9NzY4Q2Tt9uHZy77AvczcYFh9a2Vf2NDLyc7V3PH93t/m6PJsbF9c6NnLz/ZcWV1SSD49\nPEJNTFBg4szHxsXI4mhTU09GSFfdz8HCx8/Xz9bMxsPGydLk5NXIydHlbFVGPDc2NTU2OUFM\nYWv76NLAv8HO2W1paVVadtrOxcTCwsLBy8/a19DQ1nBdX/7qb0w/Ozw9PT0/REpe4d7g293k\n58/N0+X6aFxTTl7xzsfAv7y4ub/U+3bn4elaS1FdZF9YUU5JSklEQUNISktOWW57Zmzbx8TI\n0NDO0txfUk1a68/Jy8e9vb7GzcW/xdpqeNzV8lBAOjk4NzQ1OkVPXH3d2ehubW7s3tPKw8HD\nzuxgTUpRXvXSxb25ur3GzdHjYFdoee/7c2JWTkpCPkVPVVt6eG5XRTw4Oj1FSlLiwLy/zNnh\n387Nx762r66wucDHxsvlZH/h2epSQTgxLSopJyksLzI1O0BMWldVV9q5rKWgn6GmqKenqKyx\nvc7Z2udnVkAxKystMjU2NC4rKCYjIiIkJyouOUrty8m/sqacmZqamZaWlpmeqspCLScpKy8v\nKygoKywsLCwuND9NUEY9PDo4NTU6RU5c2MjG1e/+fsq3qZ+foKGin6ChqLDIQjYxNDs8OzQu\nLC0zOT09PkFESUI8NjMzNjk5Oz1ESEpMUWj36+zlwK2jnZ+lqq2mpKGlq7LRckVBSD09MSws\nLzxBQzwzLy4vLy4tLC0vNz5IVGZ8+Hlr6Nzc6Fda0q6cj4uNkqG/Si4vJiQfHzXJop2isjYn\nHh0dGx0hNN61rLK/WDsvLC0yQmXLvrm7zt9WRzguMDRYrJmLhomSySUcHDEwWT/+qqSbsDca\nDxQZKj7szF9PNjArKis38rutr7bYVEk/Pz93vLS7095mXKyYjYqSoTIgIiI+K0lDv6OtsSoe\nGx0rLkVXxbvJPSgiJzZGzL6trbPBSDYuNj1Oa1tIUc7UPytGnYuEi54xGyst+SwvWK6Xo7wf\nGh8pPC0uRrav2CgeHy1HRFfor6y3QSQjKktZQU/Er7e+zlU7Tp6PiouarTo5KiYmJG+3oazY\nMikrKyckKkm2wz4iISozOS4+yKmq0zgsPk5FOTNssKa2QzhXye24l4uGjaE9Hy8mKBwm0aeb\nrlArLDQmHh0sxbTMLyszQjUnKUe1sc47NENXRTQzcru7zMu9wMtIdKeRi4uWpLvePSAbGCzp\nrbG8vL7KNB8bHictLSw558RhNi01Q0A4N1S/trnLW1f5ZEE5T8K2vL+1n5SPkZqepqbFOR8c\nHyQrKjdKvrW/XjkxKSIeHiIsNz9RzLm5yVRMVVpJOjc8ar21ur63ra68WtapmpWan56dnbBE\nIB8fJCIiKz+8tr3ZZlo5KB4dICYpKjdpvbjC3eLfZT4vLzZH18W6t62qrbWxn5eUmZubm562\nPyUjHx4cHik8WV5TTFFHMicjJikqKi06XdLZd27e0vBMPjxK8dnSv7Kur6+uqp2amZyenJ6j\nvUotKyYiISg1QElETUtFOC4qJykoKSotNz9KT17159v0Wk5XbWhuyrO5tbq8qqeenZ2enJuf\npbvMTzsoIyYrNDQxND07OzYuLCswPCcoNCg5OTJ+YlrExNu+z0/b0d7Av7uwrrCrpKGenZ2b\nnJ+ouH4/MSoqKCkpKy0tLzI1OTozLisoJSUlKC9BQ0rOx77Gw7vCyruyr66urrGtrq2rq6el\nop+ip620v/0/LyglIiIhIiYqLjAwLSoqKiopKi04RF7ev7S3sq6zsK+uqKurp6ytsbG0vbq4\nsrKytLfEzt9MOTEuKygnJycmKSsvMTEzNzg1Nz5P1cnAv7q0srS7t7O2tbWztba3ubi6ubzD\nzNXV2+J8U0dCRUdJR0M/ODMvLSwwOkVKUU9SUElLT1nq0MrHwL+9vLq4u72+wcbP3tnPzcjH\nztLP09rie29lX2FOS01MRT04NTExNDtHTmt3aXFu+/zl39bQxb69vL29wMLEysrM0uFrUExT\nZX303+Hp5ODa+FtaX3NqcOzxZE5EPTo6PkhNUVRUWVxjXmDnyr67vL/Fwr/Ezt/0YltRS0ZK\n+dPP1dvSzMvO3fXh0tB+UElRXFRMREhQWlhNTmLp3uR6X2989/jv8O3e6nRjYWNpefXez8vO\n1d7h7eHc5+v45t/m1s/OycXFyNHe53twaFNIQUFFQTw7PD9APz49RVR+2sSyb7Chzz46RKvj\nNJnPLckvo0QrvLTaOLi4wNdLzb5EP1XIO0JGRWU1LTxBMzJiXVtS7rvH0NzHyF3vvbi/ubLF\nu8bQyF7bbsxW3rhX/uR1SVM/PlQ+RVo/PEpTUEtDRf5aTOf8XcfBzuBXXMjO38Lp59faT21R\nXtLS5tnNzr69ydfI1szLWVPe/lpqc1tNS09RPzhHWENBTVtqcllsWUpLTFJU8MvKxcC7wM/M\nxs9XSGbO5N7X3OHIz8bKZ+XPzeDX+NDP5c/aXFJOTEVESFdnbF1SWU0/NzExMDAuMzs8T9PI\nvcC8tbnMzszM1/DMrqWel5mWl5+ovjgoHhkbHB0pOT7ux9ncTTMtJR4cHB0iLT7ZuK6opqyu\nr7m6wM7RzMChlJmWjo+WnanKKxkXGxQSHC02TruxssVNPSgaGBsbGyMvPHm7ra+0rqqzy7+5\nwWvZtr2umJablo+TpLew4h8YHiEbHSpE3MvEv7vNNiklHxsZHCQtNEHbvr7H0N/X086/vL26\ntLCzrp+am56enaCorsJbPDc0LiwrLDA0OTs7OzYzMjAvLy4sLCwsLS80Okpq1L+8ube0tLi4\nu7y5rqagnp6dnp6gpay++D4xLy0qKSoqKisuLi4tLSomJyoqKSotLzlDWtHAta+ur7Cws7vC\nwLOqop+dm5qcnZ+ms85IMSomJSYlJygpKiwsLzEuLCstLCssLTA2PljXxb23tLW3tbe6ucG+\nr6ignp2cnJ2fp67AYkAvKykpKiosLi8xNDU3MzAvLiwqKisvODxCSk/oyLy2tbW6vb7GzNrN\ntqmhnp+dnZ6fpKq11EgyKygoKSksLS4wNDc2ODkzMC4sLCsvNTk/RUtj08G9u7u9v8bP4mTZ\nsaOdnZybmpueoqm54z0sJyYpKy0vLzAyMC8sKioqKicnKCwzPkVd08C5trm5trvI0dfV29O7\nq6GdnJucnqOmqrLFUjUsKywuLi4uLCsrKiorLS8vLzE0Nz1ETFr82cnHxce+ubzF1eXa7Hzf\nu6qjn5+en6Kkpaq1z0s3LywsLTE3NTEuLS0uLi4uLy8vLzM3OD5JUWHg08/Lys7S0tjb09fW\nuaeem5qZmp2gpamzzUkxKicmJykyPT87My8uLi8vJyMlJi0yPEZKSVnTxL2+xc3Rz9LW1OHd\nr52YmpqVk5ihsMbdPywgHyUrLi43TtjQUj02LyghIiQmJys2Rl9ueNfP42N44fZXetPK2OjK\nvKmcn52SkZmfm5/rO0AvHB0wKyo51+Zn2l02KCkmHh4kKSgxQUlZzczg7k9Re09SfvfjzLzY\nfrymnKeWjpuVlpypwlcvLBsjKx4rWUM1vtc3SDQmIyQeICQmLzVF79zWxclf6tRnTdzgeb7I\nxb/HqZmkmI2bkZifoEU4NiAYJCEcMDE/TsO5zURAMCEnIR4fIysxP1rLybq50vjuWUxXSElT\nbdnGyqOWpY6Omo2fl59B0ywdHB8dHiM0PDe+2G5ETTAnJiIhHyUnLj31zb21vcDS01xHOj5J\nP2JZ9saomKiQjpiLn5OgRLYyJB0eHx4jPDpAucrTRUMqJCIfHR0iJi06YnTIub/P6dtWTEJL\nQU3v2te4m5yfi5KOjpuPtMvNJh4aHR0bJTcrS9HWZUJHKSUmIB4fIikuQFlhyL6/zs3WXF9B\nSj9E7F3MrpyflYySjJKSla6z+ykfHR0aGSUnKT9LXEhTPisrKCEgHh8jJzRCV8m/vLa5v8r4\nYlNPWVjYzqmbpZGQko2XkJmyrXYtIxwdGBklISc6SF9XbEAtLikgHx0dHiQtMULVurWxrbC2\nubvB6dHd6NOxoqqYkZWPlpKXqKq/MSghHBkYHR4fLDM2Oz09Mi8xKiYmJicoLDE4Wr+4sqmp\nra6wucXIw9Br1a+trZuZmZaXlZuoq7s0KiYdGhsdHR4jKysuNjEuMjUwLi0vMTJATubCtq6t\nq6uur7CxuLy6vczRztTcybewrqulpairsbvD3Eo8NC4tLCwqKSgoJyYqLS40Ojk5O0FLUmbz\n2svFvr28u7WxsbK1s7S2ubq7urGsrKuqqqyttMV9TD81LiwqKispKSgqLS4wMzU4PD0+QUNN\nWF5eYOPWzcK9u7eysbCur6+urq+vr7G0tra4urq+ydbmWkQ6MC4tKikpKy0uMC8xNjs9PD5D\nT1dUV1pu8OnVzcO5tbWysrOxr7G1tbS3urvBx765vMPHytLvX0w/Ojc1Ly4vMDIzNTAwNTY3\nOTs/REdPU1/d0c7Iw7++ure3s7Kzs7KwsrKys7S4uLu+vMDXWktCPjw3Ly4uLi4tLy8xODs6\nPENIVFdQU2Dh6+jd0MW/vcDBvLa0tLa3p6q7p9u+wF3C3EfNwFz21FJDQjA0LigtLCcsNS83\nPUro376+wMK9u8S6wcjPXspCS1Y1QTkz3U5iuM7EsrespKqgnKCeoKusvUw9Jh4eGRsdHCMm\nKz1BSM/J0Mjg+2pKTUQ8Pj4/Rkruy76xsq2tr6ixrqKgpJ+Xlpqcn6dOLSgbEhEUExQaJC81\n47e9uq+2yVxAOi0sNy8xQVLfycW4tbivtLi4xb++0aqcn5mQlZKcoKFFJCMXEBARFxccN07t\nt6utt8DZOSYjIx8fKjc/37ivsLCrrb7Cyl1WXk1Bq5Sal4uMjZeemj8XGxULDA8XHB5fqbao\nn6m6STMqGBgeGx0tRMa7raGrta616Uc8Ojw/TmHLmY2UjIeMjp6lqhwOFQ8KDhcoMjqnnK2r\nqWsrHRoaERYoKjS4qqepraq7P0ZCNTs8Xbq6urGoloyVkomSlarcyx4NGBoQGClVueK1odYz\nQygYFRMbGhk4veesnqOvzMC+NSpu1UnTrqyztq62o5CYl4+RlKw5uzURFiIaGiNFtvRHq7gs\nKyodGRcdKCIwsq60qKezbDpLPSgv6s5ryLCssm7EopWZmI+MkqK1r0oYFyIfGSRDwHJTvbst\nIicfGBccJicuwau4t62y2jo6TTk03rXIza+qss7HvqCTlZaPkJepUt0rExQjHh8uW7i7UdDO\nKR8fGxobHS1Hb7Knra6wxk4wLD07NW68zMOur7d51a+clZiWkZOcuUJRJxgaKScqOuK6zDhE\nYCodHR0hJClLv7y0q6+9/z83KyctNT9JzcO9t7W303e5mZOWmJGQnLP5xzMcGygxLCtGvMcy\nL0QyHhoeJiclNsa4xMW6vk0wLS8uLjvrvLvAtKurs7+9t52WmJqalJqsTT08KR4fJzMzMj1r\nfjo1MC0nHx4iKS4xRNfFvr7H22dy39bb38W8vsnMvcPY2mZeuKOdnqCcm56ou3ZAODErKScr\nMjg/R0Y7ODUvLSwqLC4yOD1ES/3f597se+N0VVVfbnvv0srHxb2tpJ+enZqYmJqfqbXQTjMq\nJSIiJywuKyknJSYnKSgnKSwyNTxMYdzHvLu6vr68vL/My8PAvr/Bvq2hnZ6fnZyepKy+Xj81\nLSglKCwvNDIvLCsqKiknJicsNDk/TGzMv729wcfFyM7LxcnMysbFxczLuKumpaOenJ2epK/B\nf0kzKykoKSwtLi0tLCopKisqKy0yPERa6eDWy8jK03Bm4M7Gx8K9vr++xdDKs6afn5+cm5yh\nrb5mPjEqJyYpKi4zMzMwLiwqKysrLC81PkdYce7c3t3QysfIyMXDyc3O4OzPz+TLrKCdnpya\nmpyhqrxiOy4qJSIkJysuLy4rKCgpKissMDU9SFvg2M/NzsvIw8LGyczFvsjk9NHBvLqzqaGe\nnp+foaWsuNFKOi8sKigmJyosLi4rKSkqLzY5OTg9Q0lWZGnp3MvAu7q8vb/L43zayb+7wL+w\npqCfn52dnaCps89GMiokICAhIyQkJisrKiktNTw/Pz5EVtTGyMjIwb2+xM/Z1c7KzMzIxL2/\nxbiso5+hn5+fn6WuykMyKCUjIiMiJSgqLS8vLi80Njk+Q0tOZdfVz8XFyMvLxsfHy8vMzdLU\nz8vFva+nn52dnJ2gpay8Vy8mIR8gIiQmKC0wNjc2Njg6PUNKTlBUVFl25dLS3NzOy8nFys7N\nz9HQysjMuKignZ2dnZ+lqrbXPzApIiEjJCcpKioqLzQ2Njg/SVBmfvPu1s7aaWX172ZSS05a\ndN7ez8G4sra0qqKenZ2dn6Glrb9PMSQeHiAlJyktNEtfQTMsLjIwLiotSc3G19LEwuM+PEpX\ncVr8w7qytbe6tZyTlpqZkpmv3F1EIhodICQhKEJmPis1RisgIicqKTVoxb63q6q0v9ZhPzk3\nOD1Rzt/LycO52te/spudm5OTlqSirD8qHyEcGSQoMDFb1UNCNS4qIiUoJytD3ty6r6+yu9RO\nPDg9Sj9pz9PDw7DA2Liumpyej5GYn6CzPCggIBgVIykoM+dBPGo6KigiJiomM1tkvqutr7G6\n0WJCOz06YMVY1bu0xs+32s6hn5yZlpSfo6/HJh4kGxgiKi0vbW9dUUY9LSQoKiIyVVW/sK+r\nrrjORDM2Myw63UpfubvLzsDNuZ2gmJGSkp6jrWkjISIXGScoLTh/WFlQOi0kICQlJTxu87Wr\nra2zx+1FNTY5OEbiT9m3v76/wl69np6blJOWnKSvZyIlIxgaKSotSdZjU0Q9LiUgISAkOEnt\ntKysqrC+4EE5OjY0PUxWx8jHucXT3b2dnpySkpWboa/aKSQfGBsnIytQ21VWTEAtJSUmJCg5\nSdaxrbGvttpFLy8tKjE+R8/Fuqq6tblVvJyXpJORl5SrrL4lHyMYGSslKV3R4D5ETS4eHiMe\nIS87Wr6uqKyss9NFPTctMzxRZMuuuruwydDqppmjmZGTmZ6quzIiIBoXISYiM93fXWl7Pykj\nJSIeKDlBz66ys7K40TgwMjIvOerNxbSttba60LqZlZ+UkpOVr7TBJhoeGBYhISZNT/ZhYGdD\nJh0lIyMtP/q7rqmorrvNRTMvLSw0S15ws7W4r8axppqampaUlJ+4vEskHB0dHyIkNVZPTmxJ\nOy8nIyckJS9I3L63tK2vxt9eQj1DRFraXMe1uMDTzsiroqOenZeYna65wT0nHyEfHh4mOEI+\nS87NSDAvOjEqLD1NT2PFtbe/zM/zRT1CVU9IW9vAxsS/v7uupqSkop2cnquxu806KicpKCMm\nMjo0MDtJQjUvNTw6MzM8REhX7N50T05z3eXkzcXAxc3KxcfFysGrop6enZmZnKuwvVwoHh4j\nIh8hKzQ1MTM3PD43OktWQz9FSD8+QU5mYfHOvbq4tre4tri9xs7Lxsm/pp+jpaSfo6/7S0Ev\nIh4hKCsnJzJOSz4/THX6TEhXZEw9PEZKSvxtTlNJRUFG4Li7TOe8ura/vL6+qpeXm5aXmJyt\nPy0mGhIPFBoeJDvLta6vv8XLPigpKyQlKzBA59rMurrExMO7tL7Curm4ube6vMi3mpScnJ2Z\nma41JyYcFRERGR4hL2e/t665xcRgMywtKiouMz/6zc2/vLy5ubu5uL/Avb64vMPGyry4rZya\nn6GknqV2MikkHRgYGR8nKjNhyMLHy9xeSTk0LywxNzQ4StjIzsO2ra2ur66sr66ytLG8urm9\nv868vs3M19VtTlpGNS40MismKj06MjlS7VBM1tlZUk1YUDxCQDw+WdTowbWzsbGsqrO5s7nA\nwbvC2cW+zU5A99ZMOT1NRzs9Pj86P1I/MzZP7kY3WMrI2vvFzdPGU1b758987cjPxsbJxMDP\n0ry+0Na5u8Zv7883OlBOPS00U2lHN1jOUVxRTvdf7WRI17XB6OPI0ub50s9NYc+8aduxxeBn\n+LtJO/3Hxl9b3dpRTUhDPDgzPDtJbVLh9sDJzsrl0sS+V9zBz8pFP9BpV0BkyFn81su7zdPL\n0sZnWFFQ1HbR4dDI709NTFJXW04zLD1CLkDUyc/YwcG7yurDTdDKytZI2cq43GfBasH5RcjQ\na2tIVtdDQ0NEUfvTRee5zr/RUuzSzEE7SPtMSVpAVVfdS0LOzc3DvcVht83jcUy1Wk7LS25f\n48xSQzy/yT3nSki2V8nQNru/aU1Q1N3w8j5GZE3KPU7Sc1HV4UHRU2K6TWS3fMnMR1jO7kXo\n3O7ZZMTSPN6+12Ff8sbQzH1+00TJTDTRWEfVLz/MMEe/Oji/2bnYarHTs7rPek23wEo80L1K\n78hCT+083Gcsvlw1usxC1rfmO9xXz8Y8u248UcDHOVpD2EM/v03rfLWtO17NvlVGdUP0Zl1N\nbf25tV3ZvczCu+9QblTtYC47wlM5V95bcmfK/jhJ9UQ4eHbu2nTN7966x0X8vLfJUr630tZX\nVFBHx08/z2pJX/1c5m1g3FdPy21Sv+dg3GBMU01KfmRS4m5F3+xj2ldhXWnaxMbj0MjPyb/b\ndtH4Zn1WSVn9V0BK6Mx4Umpc1cXOd//azMvNdlpSa+pSS0g9RVJPZVZV6u37ztph68nGzXLu\nvL3hXnnRzW9LV+Z3XklCUGNUQkdkz9RqVWnDus78zszCusNxUF1v4ftRTmPf22pl1OFWUkdF\nXmJGPDg1NDc8RlBsx7y8yWzmw7/O297TwLizsK+qoqOnrr/iTzgqJis1RlBKSEY3LCMfICQn\nKzZKaNPK0efZxcb6edHR06qOhIiWoaq0QBkPEx1FsK2lnaGxPh4YFhcbHSM64dl7PTQ3LCUp\nL02vpaSjo6Wr2S8owYyFkqWtpp7lFw8UJMbRWbKkoK4vGxodIR4fLE69vFY9PzovKiYvSdGx\nqaalqbLPNyk9mIiNnKqqnrAhExQfacP9w6yfos8mHB0jIRwfLN+1zEhHT0YwJiMrTcvIu6mg\no7VUO09UzZuNjpmen6G8KxsVGik5T8mxp6OuSichHxwbHSM05sLCxMtlOiwmKDA/Xceuop+j\nqrxdOSxCpZeXm5uamqPILR0cHyUrNFS+sLHBTDkvKCAeHyYxPk7x1c3aSzk4Qlvez8W2ra24\n2nzvTTo9u56Zm5+joKCovjspKC84NjExN0hfSDo2O0E+OTU0NTU2OUBKVlxp1s3R509NYXZx\nXWLRwsXP2bqnoaatrKWipKevwNN9VTwwKygsNDw9Q0M8OTYzLiwsMT1IRz8/PkVd4c3MzcvL\nztDa9ubMwMXe1rClqK2vpp+en6m5z95+RS8qKywvMC8tLjEyNjo1LzA1Oj5MYuPSz9Pbek0/\nP0df08C6vL27u8teS9KtqaurpJuanKGvx1g/NSkjJSgwOj48NDEuLCwqKi8/XuxeUF/e21hG\nSF3Zxb7CwLy5v+J+e/J7W+i5pKGqr6yfn6ayy21cVT0tKi80OTo3ODIyMzY8PDg1Nz1EREVK\nXu92bFtbZ/Hk6Gdc7NHLzc3R3d/QuKKbo6uuoJyhq75aRDwyLSguOkVSQzwzLy4pKCgmKS9F\n5u/b1cG8zNhzXl9i3c3OzMfGz2hNREZjc09ypJWbpKuknKfEPjY/Sj80LD3YzWo0MTExLiUh\nJSw5QXnO1cLGyepERkhAOjtmysHHz7ivu21GVVY5LS2+k5CcnpqQl8QqKDApHxsjba+8y87B\n1C8eGR4kJiUsXbOyyc3E0T8tKzA3O03Ar6mrrq62v9tbNi4zto+Ol5iWj501HSckFxQXMr7H\nTLqqtj8gHiIiHh8tbLzDv7OyzzsyNDYtMEbNubexqqm1u7ayvU48SaSPl5ydlpOwJB4rGxUR\nHj3TRtOnqboxKCooHh0mPGNc2a+ruV5PSDoqKT11w7qtpqi0wbq72zUsNUmrl5mYmJSWqi8q\nLh0YFSA34E/Dra6/PS0oIx4dISw7Q+e7r7XHblVJOz9KbMi0q6eqsLe1ustEODxCvaOipqSc\nnKlaOjYpHxwfKTxCXca2usxjRzkuKiksMDQ7StjFw87m1c3Hy8vDu7i7yNDP13lrTENBQl/J\nv8i9rKaor7m1sL/kX0lRXEdARD4/Pzo2NjMzNjY3OzxBTVRPUVZ1z8/d3+Xi9Wxxed/3ZXLn\n3eZn6721uq+no5+jqqmqs8RWOz8/MCstMz08LywxNjMyLzY8PUBHVf3n19PZ29fTycnP39zM\n1GdRWE9IQjxF2L2+tKegnqCmpqSru9ViW1k+LzM3MCwpKCssKiwuNT1DSElQUU9y0cTGy8e/\nvL7Fzc3Q+1FMTEVKT0dM17+5rKSgn6Snpaq2vtdNQTw4ODYwMTArKCosLS0uMzk7Oj9MbNTI\nwsO9ubi5u73Ez974Z1hTTU5TRzxD4cTBtauloqKmp6mvtcLrWEQ2Li8vLSwsLS8uLTA4ODUy\nMTpIX+rPxLu4uLi4u8bQ5HFfXmlq9fFmT0hHUerYxK+noZ+ho6Knsb/mST04ListLi8sLSwu\nLCorKy85RUv9ycHCv7+9ucLRzcrJxcrS1Nh3TkhGPz87Nz1wv7WrpJ+dnp+gpq+90VI/NzAs\nLConJiQiIyUlKCw1RnvVxbi0srK1uru9vb3EzM3W3+9wX09FQT49PUNJTF/Ov7mspKCho6Wn\nq7XC4E0/Ny0pKCcnKSkoKzA0ODs8Rl59dePJvru7vLy7uru9w83V2dbuWVdiX09DQEdPYHvh\n08C1r62rqaiprLK+1Fk/NzAsKSkoKSoqKy42RWPayr67u8DK1+3+em1rbu7W0c/ncunt7uzr\n087NxcG9ure2tLa6vcPM2uhsU0pDPDcyLy4tLzQ5PUde49HHv7u8wcnO087KzNno5HtcUk1G\nQ0NNVlZce9rIwr++ura2usDM2uJtWE1KTU5GPTc3OTk5OkBNaNHIy87MxLy9v662T76zwkEx\nQc5FNkdhUUtRSVVgTk9o7NTHwL6+wL++wtF75vlQRkFISz89Pj48QUhITFHhysrMxMS+vbu+\nw8DCwcvee11dWlVSTEZGRklLRUFERlJd3s7LxsS9v8O/w8PK5O5fV1VHPzY0ODs9PkBOd+Da\nz8LAvbq7vb29wMTKys/e9F9cTUVGQD49PEJPXVl628/P0MfHwsPFxsbpWU9KRUk/PEBDTUlI\nS1rs/9ra3tXU09HMzMK/wL/L1cbGye9bXV1YTlVMXU9PW1lOT2Za6XRd09rZ123h0rvI7lQ5\nOzo/QkBOXm3848vGwNfl2P/a3dvKx8XQ2dna1v7VtLxGMy5GZUBBaOLczce+xdbOsa7PPTcw\nPTczREdIV8/Gxc9RP0pJPenKxtXTu7jMcb+120zTzbit7kVGSEMtLTrvTUzMysjWzsnJxMrV\n8O/NyMHrTk9LRz5CQGRDQUdIWVntb+fX4uXTyMG5t7tr4uTUwWxrSz5DSEl33k5HTUxOfsnI\n39rGwcHOz8rXzMHc02bf0mE8NkNEOz0/Vk1KQUDT7sC9btPFz7/GvcLM1FFcTVX0WkZGVn5r\nzN9Mf1Diaf/qzNDFu7m3vcpLOUJIQTo6brrVT0dOw9RBQVBcV1HHvb7Mxb3F9URRTD0+Qkrt\n/1XJxMXvTl351fnov87Wz8XM3thvaGg/SfpLT+HazV5Q7cVzPkFRXm/0b8vT+9PT3HBfdF5P\nRE5o+/jW1NnL0WpbZV9d/ti+u9XWxcXZUEJDUWFQR0RHXWVZU1db3crS18vGvMHYbuHf8lJM\nXXLl5XhgTkZKSk1LS1l6cWP35t7c2c/V1c/J09vf39PHzW1PS1BgTk1Vafjd2ennzc/q7d7w\naVBq0MLF1NbY+FVLSEQ+P0RHRD8+R0lGTFdUXtvMycfHvr/K7s/J6HTfxr7HvaykoKOnrrfI\nOigmLDU9Q0RKOi0oJiQkJCYtND5J5cW+vcrX4tXj9u5cecqznIuGiZKcqMElEQ8RGiQ1VKyc\nm6G4OCQdGBQWHChJzsvCu+E8LSopLTnYrqWgoaWv2EEuJ/GMg4qUnpijMwsKDRMcIz+mkZWf\ntjkmIBkVGzBps663ubw6Ih8fHycsTq2jpKOlsbxoRi8oKDXqmYGCi5miqDEPBA0SHzO9nY+O\no9IsGhMQEhxNtqmdn67POR4cGxslQsuxpKShpL9NQj0vMTI6Uj/+i4CHla6fqiIHBR4ZJyqv\nl4yW18Y0Gw8PFSnO7recnq5mOSgpHhcfLz7vsq2rrM9gXk5YUMXEvjxYj4CDmKScmiEIAxsY\nFB3Ako6Wx67lGQsLEiM+yJuQmKzIQCMZFRkfLTfHo56lsK7MOCgqNjp5477Jp4SAjJyemLAR\nBAsoDRQxmpGTpa2cLQ0MExkkN8GYk6i9vzgdGBYcKCc1raKnpaSy2S4nPDw26rjOqoqAiJeY\nlqIVCAwkDg4pn5Wep6aaNQ8OFhUWJM6dnKajn7guHhsbHB0qzaqlpKGjvjcvMz48OOzOwqOI\ngJKXk5TLEQsaGgUOTKGrn5ePmiYbJRcKDyVDuqmfk5i/TzkcGBkXHzbqrpufoajPPy8mJDcu\nNdOgh4OQjYmRwBkVHg0DEEE2QJyRj57lvVYRChMaFRvtmpaknpisKyEhGhIYM9bRrJqcqrC1\n1DMrJykj1YyKkoqFi5wuKSUKAg4ZER+mlJKZmZWyGhcaDw0SIjzxrZyapau5NR4cHh8iO62h\npJ+eoLe+TCgiKJ6RnpOJjJWp32QZCQ4VDBE6tqmfmZWfVEE3GREYHRso266npJ6i5C0xKBwg\nLDNtuKqlqqinskItOqeTppuLjpWfr7glDhUaCw4qNj2zn5uiyb3GIBsjHxsdM2lPu6Wnt8rW\nVDMqNjk6Ycq7tqutrrpcRa+XoaOOj5ifr7I5EhQcDgweKyvVpJygs6+rPyUnIx4eJjM8+rGu\ntrTA/U43NUU/VtL1xbnFzc1NTfmck6aQjJSaq77YHA8cFwsWLCg+r6GeqbWpzCcpKx8fJiw9\nSM20w8mzy0hfT0ViXXH4bsXPT2rUOz65m5ufkY6Unaeu7h0YHRUOGCYmM9GuqK+vp7k6PUAr\nIys/TknvusJd3MxONjpORTxS4lVYVlLeXlljabmanaOWkZihqqm8KCEtHxYdKScnNN+/fm+9\n1jU9Xj46Suz0X2bzUj0+RkdOyLKur7CwtMbS3kw9NTk4NzdAcNHLxbasqqqrq62wtbrDysju\nS0I6LyspKScmKSwwOlTm48/FyM3GvsXLwLy/w8TM115LRz88REpBP01sW1Xhys/Nwbezsq2p\nqqutr7Cwu+lIPjgxLisrKystLCstMzg8RljfxLq2tLK1tbS91HhaS0pGPT5NWVRTU2NtXl3u\nak/pwbmzraijpa2ytb7P71I+ODUyMjExMi4uMjQ1Okdi0r23t7m5vcvrUEVDQD09QkVIWO7a\n3t7OyuTwxbq4t7i4ub/Hx9djZHNq6dvYzsbL32ZRW1VIR0hDQUtPR0RISkRAREhLT1daZnNT\nT19qVEdOev5q18vJv7m2sbfExMPVXU9c6NLSz8jIw8HCxcjO3+1wVEpXWUlBQD47Ozk7Pj1E\nVl5OTVZweE1BR1NPX93QyMS/vL3GzcnK0+PXxMXV2MzUY1dt4trRwby+wsfFxdL5Yk0/Pj4/\nP0RITFBLQz8/RkI8PUZNVfPhfHfo1NTr8PX22MjCwr+/wsHCyMzJxsfDwb25vMTT3HNLQUI8\nOEXVTS81Q1ZKQFf5VPbXZVxZWUzxb0FJU05HSEPu2krFvdLCz8O5ys3Hv7i7trCvr7W1srvn\nS0c9LiopKSsuMDU+Sl/gzsnP0snK3m1bWFhXTExSXm756XzozsXEztbVycPP18/a3s3Gx87H\nvrq7v729yuBcST46OTk4ODc7P0VKSlP7a1ZUWFtUUV91ZF9d/3Nm4NHc3c3Lyb/K0svLyMXH\nysjGzcvGvru8vMHL8VRMRD89Ojc1OkBKT0xSbFxVWlBYVlNNS0tITVNqbV126djTz8zXxsHE\nxcS8v8THzNLOyM7Qv7q/yMXBz1hGQzs3NTdBV2VlcO1sXl1KPjk4PT07P0tSVGNq7+DTy8vS\n1srBvsC/wL69yNpxbmNo1dDYx7KssLi6vMh3TkA6NjIzMzc8QEtNR0FERUhMTFNf/ODh2dfr\n5eHs5uhvcHbj1+vu6ejZ3NvQ087Ozr+5uLSvrbK3t7rIZ0tDPTgyMTI1Nzg5PT9BRkhQXmj9\n6Ox8YGNkX1pQTFl0aGjf1s3NzsfMzMbI0dje28O4uruyrq2vrq+3x2tLQTkxLi8xMC8wMTM2\nOj0/SEtWZmL049LK0NPRzsvN1+1u7+Xg297e5uPMy9XPy8m9vMG3raiqrq6xt89JPjYyLCsr\nKiwvMTU5RFBfaGVobX5zaF5ZXFxqf3V95dPl/uLdz8zHu7m/v8TR3nTRydG9r6emqairs8tP\nPjArJyUnKCwxOj8/Tl5ZVlVbY2RWSkhPWFtfaGJq6NzYzMfMxb++w8rF5G1ZXcO9vbGpoaSh\noKaux+xALCciIh8gJSgtND1RW/LrztTk2HNhSURKR0hHT1BQ89DN0b67uLjMxMtqSVy7ycCm\nop6fm5qhqLbQOyglHRsZGyAgKjZDW9LH0sfO1sd+Qzg1MjM8OT9LXdXGuLq2tru7w87b10/O\nsMminp+YnJmfoa7XWyYmHhoaGhwcJSoxPFHZ78LFyM7c8UM+NjMzOD9Je9W4sbKut8Oy0/7a\nSEhBvNWoo6KTnpaaoKW53i8sHh4bGh8dJSgzMkNUTM5a229gXT87NDUvMTdK88i8ubCvrriv\ntse+aTtsxNSqqaSXn5WaoKO02jcpHhwZHR4cJCYvOEtzadDPyt9tTT46MC8sLDA3QmHNtq6s\nqLGsr82xU0/AzbWqo5+an5aepabPaiwlHxsaHh0dJyYxNU3f+73HycljTz0yLywsLy84R3zB\nsLatqr2twcy8XNnAsryfoZuXnZaioq7uPiYhHRsZHBsgKS8+R9DJv7zBzeVJPzYuLSsrKSoy\nPW29ua+qsKqvs7XNw86tt6ieoZifmZ6lq85OLCQdGhgcHB8lKzo/1ce7tbi8wn0+Ny4sKSgp\nKy87TNS9u7Gvua/BwbZeyLCzqZyelJqYl6KhvnwyIx8ZFxkaHCMnNjNK+HrAxc3afUhAOjg2\nMDIwMzpK4sO6uLW6vsTG0s/StKmvmpyWlJmUoqOy7jciHRgXFxoZICQuNjzvZcC6vr/OY1dH\nOjgyNTY4QkhP4MzKvbrJw8z1zFfCqq6empeVlpWcn63GPyogGxkYGxsfISozO1RPXHNbWm5K\nSUtAPzo5PkdMbnLjx9q6xO68Ymu+UsCprZ6Xl5CWlJifqOE4IxoYFhYZGx8qLj4/U/d62nhO\nVldGTEA7PUNTSkRUUV3Y/F7iaMj0075Vvaurn5qWkJaRmJ+pzkslHRoWFxocICoxTU1tT0A/\nPDc5PDY7PkZJWXxteOXTVs7N3M5e2VH1yevDt6OjmJKTk5WXnqbOPCUdGhcYGR4hLDI8P0ZI\nPT82OTY7QD9aUu7M083n4NFs1vNO0z9u5DzQ8+GvoaSXkpOQlZafrOA1IxsZFxkaISUuQVD0\naVlDOTY0LzE4O0lVZ3Tv3lZJUj4/XUh8dmXB1bu6vaqfnZWSj5STmKKvRzAeGRcWFhsjKDlC\nV0hMPjEyLzI1OExh8rzA0sdtWk49PDhGP01238PcuLPSnqCfkZiPlZiZp79JLB0bFxkZHScl\nNURLQD86Li4vLTQ+Wb+9s7C+vclKOjUvMUY2QmvSw7m2wrGunJ6XlJKUmZisvjosHxkbGh0h\nLy87R0U8MS4nJSYoMEP2uq6vrbrHyD84My0tND9YwcW1srKut7+ln6WTmJGWm5us2DMlGhkZ\nGhweLS03Qkg3Ly0pJScuRdS6raqopq29/jkuKyksNj1dzcy3uby7wearoJ+UlI+UmJ6rYyoi\nGxcXHB8lO0hNP0Q1Jh8fHyEv3ryvnZ+jpbK+SjEuIiMtLkpdv73Mq8PNyTe7nqaWkZKPmaCj\n3SUkHBYXHCYsN+rYSFBIKSAfIiAoOdG7rqChq668WDYuKSosL83GzLG8sLzGulM2qpyilZSP\nlqassyUYHRoUGic6QduuuUY/OyYeIy0rNM2ssLGmpcBQSDQlISowLUyusK+wsrLJ1s86QKGU\nm5iPlJy7yModER0eFx4+vsbYtbwtJywiGyIuPle/pKWyrKvmOTEvKiUv6lvPrq2y097AVThs\nZuGfl5WSlZWdwzY8GhIXISQuTbOsyr/JOSEhHx8eLNzRu6enudLO7zUjLDQtN7+2saysru5s\ntnYyVljCnJmYkpeZojssMxkSHiUqPtatqdHo3C4fHx8oLy7ju727s8faQjA4LisxXti1sqml\nt87Dvew8RW56rZqVlJyXn7UnKSQYFhoyL2ncpa7OUkg0Hh8gLC9Ys7atsrjeWTcxMCk6Pk/b\ntq+uusDYTURMXjc9u5SSl5uUmLIvJDQaExk9R0bgqaLPNjo8IRwfMVE4562rzWzA3D8pOT8z\nL0vFzby0r8FVXsVNQUhQcK2Xl5adl526KSgwGxweTV7e3qml3zo0NSAcHzhbNfKur3lL2d1I\nKzhCNjZevb3B1r7KRk5UxsxOPsuZlJabmJarPyI+JRoZLOJDReGhr0EwQDUfHiVHRze/p7Jx\nXcbQNyc4PS00TsfK8v22tF5Fwq/ONja7mZacm5eWqU0qPCoZGitMOUPKpqpZNDovIB0hLkBE\nULGktOHOwVcvKC89Ly9UubvUx7a3XkjGzTw2TKuVl5yblZqvOC9DJxsdL05cZcetskYpJygf\nGh0pO03Oraersba+ZTkvLzU6RfHDvbu4ucDSyt1BOTU5xp+boaWemqHHOzg3MSkmLU/P1erW\nydg+KyUlJiYpLz/1v72/wsXIzOhZd8e7wcrEyNjselJFRD87OzxEc72xsrGqoqCnrq6vtsPd\nTT89P0E+Ny8vLysnJysuLzQ8SenO1N3Nura5u7+/vch9SkpSTEU/P0NMUE9HVb6xtLaso6Gn\nq66vr7fKT0BITT00Mzc3NDAuLCwtLi0tMVDc8+TArq63u7zBydpTPDtMT0VCSVZRSklDSOm6\nsbKuqaGgpKapqq652Us7Ojo3MS8wMC8tKSYmJykqLkfWxsC3q6itsbi/0GpLP0JISENBRkpJ\nSEU+P0PruraxqJ+bnaGlp6q03UU2MTI0Ly0tMDEsKSYnKissLz7NwL+1ramrtr7G0OVTTFZV\nemlMQkBCOzc6OztD1bevraSenJ+mp6uyvtxOQ0JEPDAtLiwlIB8kKS82PFDXv7q4tri7vcTJ\nycXGyNPwUUdFPzs5Ojo9QUhLYbytrKyqo56gqaqttb3OUz87NTIvKSgrLS4tLC0vNT1FTfnU\nzcG8vLu5t7rG09nmdnRlUUZBQD8+QUBBRk5yx7y2rqiloqSlpKavvszeVjwxMDEuLC0sKSos\nLCwuNDxM9M3Dvbq4ucDHzd9oeflgTlJdWk5ITF5lYFdP672xq6Wfn5+ipaqxwfM/My4tKiks\nKiknKSosLzE3P1zWzMS6t7m8wb/Cx83O2Plla3FfTUVERUdLR0ZN7s/KvLKrpaKipKeqrrG7\n40k6MS0pJSUnJyYoLDA5QlX+2NbSyszIxcrMyMnLycjL1PJbVVNi8HhYTlh72NfPw724s6+s\nqaeoq6+6xeNJNCsoJycmJykrLjQ6P0pQatnEvby4tLW5wMvVak9ISUpKSEpRWe7TzMvS0s/L\nysfDvbmzsLCusLW6wc5yTT0zLi0tLCwvNDk8PT5IXOHQy8S/v8PJy9bmZUo/P0taafbn3dDK\nyMvN0tnU0c3Lwby7ubq5uLu+xc97UUg8NjMxMzI1OTxCTVphbubX1tfV3vBeVVxcWlxr7NfX\n0dTc3+Dh/HP42c3Dw8C9u7m7vcDDxcnXfFtPSkI6NDEwMDExMjZATmjZz8a9uru9vLm7vsXK\n0NfY3PRwU0xMPzk+PEBjbN1xYtHDvr29vby7xMzV0850Rzk6QEE4MzU7QENLXNzOzM3MxL/D\nyMXDw8jOzMrR9GBVVk9JR0RLTFJhWm3dzcXFys7Lx8jN09/9VUhEQj89Pz4+P0NJT1tg9tTN\nyMnHxMK/vbu9wcXM1m5RS0tMTE1NTE9YbPNqX15fa/HVzsrGx8rM1uL5aE5CPj9GREJGU2j4\n5t/b2tbSz9Lf4t/d6G1y5trc4+r5evPl5Ozn29Pd4tXb4HtiVUtLTVZt7ubd1tPY3t/rblVL\nS0xLTlFUW1pYW29nYfrczcjJy8zLx8nR4fDp6P9qWlROUFJVVVNZX2lr7dLJx8nKy9PW1dvw\namVXTkxJRUNJSklLTU9PV2ffysTCx8nOz9HT1+f2bV9fX3Xo4t3V3m9US05UUExW6s7FxMjL\n0NLV5W5zd25mYlxgYmRgU0xJSEhJTlZc9NDQ29/RyMva6+3w9fHvcWJoe29dW3Hq+XZz7tjO\ny87Z29fZ1+dwX2BpZ2JgZmdnXFRRUVljZ2h38u/l1c7OwKnFWpsSOUsUkx+r3TnFLJ0hrcIp\n+kttVLTzra2pnzZZIz3AG9o1PtAyp76uuzu82lc/3TbWfj3g/8hbwsP4vuZqvszefllQOzlA\nRVY+Z0hyWPvN0dXSwU7N8sDL3cNavN1ay0PIT0r3NOY+W1RAy02/6MzF58b31+FPTWvo6WF3\n6NDHdmpQVlJIRlHp5lhVTnTi2HLrvs/F0M7D08Vu4dN52VBkXWNPP1xUY09KUF7s09p352P4\n4m3d2e7pU1lIRmRbe2b63mVW711lTVvGyb3EtrKyrrm7y+5bRj06PT5ATX7t6Pfu3Fc7NC4u\nLCcrM0h+07+4r7G1tMB0XONpYXHMrJyXnqKlpq86HxkbHB4hLGKsoJ6fpa/PNCEbGBgbHyk4\n4bixrq+vtcV+Qk3fyMxW3bidj5GYnJ2drjwbFRUWFhYeOq+hoKGioqzgLCIiJCYmLlC6sLjE\nzm48LSYlKjVK78C0ramoqrbgeOG1n5qdoqWgpcctHRwdHRwfLuOuqayws7TCQS4sLDA2Nz71\nwMxoQjs4Mi4sMUB7wbm8u7GvtsPdSUJWr5eUmp6fm6G+JxoYGh0bHS3Bp6SptrzMRi0jHyEs\nPmjHs6ustcpFMywnJyoySdq9tK+usK65bEQwOdepmJWXm52dqmIiGBYYGx0jO7qmoaexw2s4\nJyIiJC9Qvq6sqq+85DgrJicpLTplvLSvsbS0u8VhPzc7R3qumZKVnKSlrmYoGRUYICoyTb6p\npKm6SDAqJSQiJTDurqioq6+57TktKS00Okbtwrq3ucXZW01RRzw+S96znJGSmaWqr9I0HRcY\nIDBAZsWzq6vFLh4bHCIsMT7IpZubobLKaUMyKCYtP37Jw8bFw9tBNDA2PUJPYOrApZSPlJ6u\ntsB8LhwYHC7dt7a9vbi8SSYbGBsnO09uv6een6vURD9GPzIvNU3Atr3ZYFxSTEQ/Qklq2tDS\n0rCblZeguc1860AnHRwq/LGuvmZLUU4zJR0dKla9uby3rqutv0w6Okr+6GNLc8nG10o7NDg/\nQ0hGT+PJzNrWrpqVl6G30/vlQy0iHylIvLC79TwyMC0qJSYuUbirqKuyub3IbT0yMjlMaGZa\nT1RRTU5KQUBJZtvPyMPHxr2tnZeYoLhnQj05LygjJzRfvLbITjUvLy8xNj/6vrCtsre+zHtE\nOzo5ODo9SFRXTUVDQkNFSlzZwru4t7W5ubGpnpmcpr9JOzs9MyolJS0/7M/7Sz89QVnZ3PVo\nUk9d6tnyTz87QVr7XkhAQEhOV2ZiY/rMvby5t7S1ur7M597Brqajpq684Uk7MS4sKyssM0vU\nxMfN32NaTj80MTE1PUthbHbh2eZdU1RSXv/56tW/tLCxtru9w8TEwry6t7zJ51BHQ0hKSU1M\nSUpOU1tpdnRsZVVOTEdFSUZFRUlNRkQ/OzxGbtLN0+Xg1sm9v724s7O5vLy5ub2/yNHefGhS\nSkY9Ozk3NzY6P0RGRUpX+MrExcrOz8vEwczlXE9Udtzib1RKRkZMUlJcaN/LwL/Dxs3Pzs7P\n3fF64c3Jy9hfSUE9P0A/PkBLW//1X1FT6s3MzsrIyMPCx87qX09RTU5UTlFh5dLU1NPTzMbJ\nztXqX1ZhW09NS1Ff4tlkT01QS0JAREdQadzMy8/W0M/Y0crGyc7S2N/e2u9aUVhr7PZt8dPL\n1fVZVWbs62dbW3ja2/BhXVpUUUxMT1ZRRT9ET+zTz8/NxcPGyc/Ozs/U8W/x8mdaVFlmc2hk\ncW9bX3ZzXVhf8N7b1dHSz8jEyM/faFxTT09MS0tHQ0RKUV9vfn7m09TZ3tvTzs/X1dDY5mhd\nZ3vl529bVmH9+O3v/Xrz6fdx9t7TztHNy8vM1Nh8VUY8ODc6QUtTWGTi2NHKxMPO0tjobXfn\n1dLd4v98bWlhWVRQWPDu6/F+5uXi7erhz8zael9v3NHU3vNyYVVJRUxMUFBbanHz4drub/3o\n29/+ZGT77/nt3tjT235n/ubX0dzx+21hbHF4+vNoWVdle+fb4eDq5tfgY1ZZZXnv5npsaHL1\n/fzi1Nze/ldSUV5iWFVVWF1gXWtub/Lq4d7W1tXd3dvg6vLq/nfw493e2c/My9dzXmNzbFxM\nTlpcXlZXVlFYZfrc0M3T5fPn4+PjcFhTVVZVWFpQTFBZYGr54NLIxcrT0czJz9nZ29XT1+Zh\nWVtnbllMT1hu8fPo5ef/YE9JTl9rbnJhX2JsYV1tbXRr5dzo6O/x/fXWzMvP1dvb1dDMz9fo\naF1PS0xQVFdVT05Xa3vo3uDc4+50bnNlZnHv18nHwsbO3PFwal5SSkZHSUlIS05PVWj//dTH\nw8bIxMLEzNrtbG5rW1lZXF5eYGJveW9kY1lWV179+uLW09Dk+vLk3O9oWVhjb/n6+u/h3O7o\n8+zmbGxw8+79b2lrWV1p/vBiW2P66NvV1NXY0dHa82RaVlRUVWnh3drh8eXf29nuWk9PVlZP\nT1Vr6+9hXunQztHU1dXb6vP2cWVkbWFd893jemZbWV54/l9gaW7969jNy8zQ3Ox56trjbGRd\nXmJcWU1LUmB77PJ/793Z7ezt6tbefVlUYG7d1Nrw+u95X1RWUk9QUl/84NrX2dPGvsDJ1eF6\nZ1taZGthW1FNWGxqZGN4+vTj3uPez83c+nrucFhQUFhXY3tsX1VSTktOXn/65+Po6dXMysvM\ny8za283Kzd/7/et6X1VOTlBXVUtMUFxubmRaVWTg1tvh3NbV2un49/xtXFpfZ2lhW1553NTY\n4OHa2tze7vlzfu3q39jP3G9ZUU9MT01LUF3p1dDPz9be2t16XVhlal5caefRysrT19LT3W1T\nTk9LSEVDSVVkZ2Nr4NTT1NXU09DS3OXn4dHP7m13ZFlNTl5w39LT0M3Lys3ed2ZsX05GP0BA\nQEFHUWTk1s/Pz8zLx8PJ1/N4+2Njev1ycGFaVk9VYWJia/fq3tzl/XBx4M/NzcrHxs3b5Pp7\ncVhKQkBHTlZdbvzs+GlicW1eY2JmcHV27tvn4dPOztjd29fb6vhy+u3j/mNkeG1eX15ZWmZ3\nfHt1/O3s53R93tDMz9roYVxZUFRZd+F4XmVz9N/f7Xr65+Tf7mdv7fdoZGFqaGZkcubf3+Rk\nUlJdX1paduHYzc3Nz9TW1s3M0tPc9mFRTUtISUlLVFdTVl/829bT2d7b3eHm3+lqbu/h3tre\n6fNz+X1hXmBkW1BUX3L+b3Hv49bY1M7U2dnd4OHi3/hfT05WWF1PTUtNV1xgaXbj09LPysnL\nz9LV4/xtZGNkV1VSVFNUW1tfYm7p3dfPxsXL3Ojk4ux3YlxSSk5RUVZk+N7f3d7g4HBiZ+3X\n0N3v/fXtemdna2xrXldVYebY4Hplb3xsYldg7er4du3i3dne5uLd29PT1tvn3Nvh92xdUE1P\nVFFRU1heYWR+3Nfc3ufj1svN4nlqXWVpY2JcXWZnYmR1497i5vJucP1yZmRo9OLn+enc5+/q\n49fNytPk5uf4a3p9ZllYV1JQUFVOTlJbanza3OTaz9La1tPa4/pqbl5dau7o7OdsV1pgaWVk\nfePVz9rp7OPd5O75bm1lW1NY6dXb5/xp9unteFtaZWxdUk9Y/NzS3t/Vy8fab19XU05RU1pr\n6ujo3dbT2OPzc+7e3eNvd+jV2OLxYllVVE9NW2NjYWl6+ODW1tjd2trb4tza/m1fXl5VX2Jf\nX1FPVFln49zb28/N09ne/nvu+v9vdP95YVlq+3NdXlpdcufX3O3v497e63t3++Lf9PXp8nJt\naV5VUE5SX3P17ODc4t7X2Nrn/e3r39zgdVpdWlteZfp5eXl1c2hvdH509/Hk2tra5eLc09jx\nXlxqXVZYW2f4fl9TVVxtY1hfaN7N0dzd2NLP2+Hf4fJxVUxY+eX2aGD31tHV43toamddV1de\ndfj8cW51ZV9qfOHf4N/e6efq8ePy6OxvXltdVE9QX/HxeHJldt3Y2NPNys7f+vp1ceDsb3b2\n8mJVUVpbV1hWXn3m5fjf4uXd+m1neOXWzs/V3ufuZVhNSUxWYWl+7ODZ19XT1N/rZ1hbYF9i\n8u/se+/ne2Zo/Orf2djh39/t/O92aWBbW1xmbffofWdiX1tbbG795Ot8XmL73dre3tfT1NHW\n3OPf3PJ2X1daXFtia3BwXlhYUGHl9WpufO7p3tfY0MvP2Ojz6uVuWFVYUU9UV1tZX3Rx/uvq\n5uPs6OLq39zRy8/f59/icV5cU1VYV2du59LP0uH3/2pyaVFNU19wbmBhePrv+vjc7OPwde/h\n0uJ7bG/33OTy5/hrbW9vX2n9fPXvcnft5eVvafbrfPtfWlhZaW7v7+3g5ODe4/ft5fNsa2hz\n69/b4un49nleZmx2bFpRXHDm7efj49zY529kXGx/bmj33tTS3XlnZmNeXVJYbGFjbG5+69nV\n3+Td4efl5Nze3Nfrb21ibnL33ud8/nlcUlNYa2xlXFxgfeTsZlZUX3167unq59DKyMTEyNb7\nXVJXW19RSkVKWWJ87N7h5OLu597XzdHc63x7cl9VV2d17e5xae/g7/zs3dfX1u12W1peVlRP\nTk1MT1Zs/urh3+Hl3tbV4Ozr5tvOzdvw/uzm5d7m7PT1dmNrauvn9fJ2fvHvbl9qbP/XbklO\nSkpBPTw9Q0pTWHfXy8fFwb6/wb6+vb6/v8fX4dra3/JjUU5QU1NQTlBOS0xRWFZTVF1aXWx3\ndHJqaHDr739vbGdsa11k+97Z6P7p1s7MxcTGy83R3OLt4+bo9l5fYl1fVlVSS0lKTFFbYfjl\n6N/UzM/d6Onj2NXh+GBZXnb85ftoc/f0Zmxycv3vel5aV2hmXF1kZmRYUlRh8dnZ19rX09zp\n7+Da2uh8Y2RwaX5nZu3m2dvh3d3f62hZWFthXVJKTmH03+V+dOrsdmlfcfD2d/jj5OTo5+Lj\n6+fk4ev5/3Jv//Hq4d3k/15dZWtubF1XXHXe6nz7fXby6eDn7ex9bGVrbm91bGNdZ3x98Xx7\n3+/6+PHl731+8+Pa2dvqbm1mY3f07fL07OTj3+nxdFlTUlFXXHPt29HOzdPh92xcWmJrb2xl\n93Zmafjf5evo/W1qZGNf++nr9XH7durZ3OHn29fd63FiZ3b1alVNVGVhZGL639nV2Nvc2+70\ne2776t/4ZVxkZ2VqYGnw2trnfHD26+Xlb3r6+3VmZ2dfYHtrZ/t3YWJo+N3Tz9jg3uDX09fa\n335wb1VNSUVFSExPV2zf1dLPysnL1Nzc4uDs+vn17e56XlxXWVteaWJiZ3n8Zl1faf3s3tHM\nys7U6GtiXVVPTlZaX3fm3N3V0dLW6Ojwb2VjXVtaWFtUXFxk7tXR3dzc19bZ2uz66uFvT0pM\nVFtmbfXl2tvd3uHd2t13Wk9a+ujq6+fh2OT3enx1bXNiXGn1emZqd+Xf729nZ+7vaVdaW2Fg\nWWB46N/T0Nrq8t7V3NvS3PJpaXju4dzZ7vn2bWpsbWJXUk9PT1JVU09YXGd7493d2tLHyMfI\nys3b7O1tW1lZWVNTU1ZkfndtYF9sZnLn7Xx67d/k3dzf7fd89uLi2dzs7OZ9amNjbXRvdWhl\nZmhiXFZdb273/eXxX21vbGtmbHTq4ufs6OPb183Mzc3W2+fw/Op9Wk9KSlBVUU5RWF5ocufb\n1tfe7+bUz9LuYlxdbPn77/nv3t75ZXrg3utubnXt3uZ5XFpXW2JjYFxaXmj34NjLydr8b/Lb\n3dzf9/d+9+f3bfXj7mdUV1hWV1JRV1z85nJgZfrvfn/q3NXR0tzdzsnJzNPd/G9mXVlSWFlO\nS09TVFZZZ31+d3fr39/h2tfS0M/Q1dXY4n5fV09OT09e9eLZ6HN0bObifl5UWV9uaGFs79/f\n4d/a2dPW0tXSz9nuX1NOT1NOS1FTV15559XLxMjQ1d3pemVefWtZUk1NUVppa2N58/vv5NzZ\n3drU19zl3dbmd3ZlX3Buenl5fXb+cW57a21mXmRree/q4N/v6OXnbF1e/d3fZVNaZnnd3eff\n5ufpbmVtemVcX2T34H5ZVFrg2dbO1NXY5XNkb3Xo5nBdWWNjW15qbGdw/ung09Lf3N7g5eru\ndGZXUVRdZmFfWlNWaHZfa+3e1dHPzcjHx8vP2XlibW5VS0xLS0xOU2T4cPnv4c7IydDb6+5o\nXFdZW19sWk9SW2b08ejYz9PTz8/Nz9n0YV1eX19YUlxcWVxh9nhwdPzo7d3OxsbO3vd0bG5g\nWF5fXVlOS05WYVxdaHbg1tHQ2NTMys7W7nnz9HtkaWh0/2hfYXfy5utoaF1aV1VSWWny3NrY\n297ra1tWWmZaT1n83c/MycjQ1dDV421va1xYWVpfYmlpVVVfbvjxf3Z2Z3J4dGp63NXW5HJn\n7NbQ093u/2x0dFdXam5xbF1o7t/d5ePa1tnh5/h59GRPS0xPXV5SXW/e0NnX1tnU2ePt+354\neP55aGhmamBYVFhnZ2Rn+v354NrY2dXQ1uDe49zY3+xta1pOS0xUa+fm53v9cl9gX2t3/tnR\n1trg7unxbWz76uvr6e3l3+peTlRXVVdPWHbi2+Dp597f7Gpw4tPKz+t8Znn9XllZV1FRUm70\n49vb5m586ODn3ePsa2FoYV5WW2N62tbUz8vO3uv53dPU1N3i5fF2aWleV1dZV1FaZndqWVNU\nZ/5uZWVhXFpjZGRjZmhpXl9y69nRysjJy87OztPY2uLh5+5zX2NfWFJaaWdZVFhZW2hla252\n5NbT2drm5Ozq92t0bHhwYVxz7XhZUVv1729cYe7q39/m73H029zj39nX2u3+fvvmbFNSXHZn\nXltef/J4fHf99Pl4eXvm1dfl+/tvX2fv4OP+feXa7mZp5dr1ZW9iZFxZaG/g3Oj36ODo6+jo\nelVNTlliX2Vncund7271383IycjKztjifGJeVk9NTkxTZm1eWWnu+lxQV+3SytDS1d7Y5HZj\nVmBnWmh43dtqb+3zem9t9mpq5dzc4OXo6v737/p7XG18fX5ZWmdlXVdZ9+fj2drUz9vfdm75\n7t7nZVdZcHxfXGB55n1eXV9p9/Lm4drW19XSz9PP19xnTU5PTk1RV2VZamZc8/nd3ub07eDW\n3dfabXx88NxsbX5xe2V4dXFnXFpmddvT09Lv6e7i6vxvamZv13tVUlRyWVlm/NbP3XxrZW5Y\nXd3Oy9vd2eft3+zt4nNaTVFbYV9p6drabVxq8P5sWl5lYuvx+29fePRrXm363dbb39zMydfT\n1Nrme/VeSkVDTFVTV1Nm0czR4HPa09TV5+DVz9jiY1pfWlNLT09cWlJsaGBZZ97d39bNys5+\n79LIzOXm2uJjTVJTXFdNT1tsTlj50dbu09LcbG7c3mjp5uT0dNra1/dtWkxXW1Zrdt/W39Xt\n3t3hek5YY+5sTFpv3eZVWFb58VNbYevf5NDM08jO1MjWzdLv2+tkU154W0xKV1VMSElJXGjr\n7WXT9N3fdsvf2OXc0eZeXGBjelbz6GxdVmTxf9rPz8rI1dz328f34Gnc40xERU1LT0pcVtbe\nXGhg6vDfzc3d1NjTaF5bfvVWUkhoZHFvb8vOwt/z4e/IW/vc++dWWWdObGJOY/3U01fe737q\nTt7g8ttT3cnTdehncEFFUk51Rvftzr7Ixc3VztVpaFXa6mFfY9PyTUdJXFtOV11rXFrcal/j\n08ty3MLU0+Dd1F96y35bTGjYYlpnz85Tb9339j5TU1BYW+rcZtvUz8r3w9FbYm/pX2Lh61VX\nb/NZU2TnX0pzXNfl2MbPyuFu2fNWXEn3d1TyWntdbeDpWufg19VS4Mntb0bOyXlwWN9PQfzT\nY0lL0Mju/m/M2FFPWM7lbNrEzVR+4OJXRljeXVfd5uJT/M5SeGxkZkdp2mHq3svLY8vd8+NF\nWvXy2Gl33N3uWe3S2nvu3NVOV1BeXlZa+FVc2dfbZ1LQ3VxVa8TzXVnbvsrp6ODOW2DVStXv\nZWNTVkpHPUhGaVNJ1MnLy9C5x9XpxMjf0ti7z19b10JCOmlIOE9Yx0dR5l7nb+fdXVXaytth\n2MPZ0lng4Fju71vNW81688np7M7rv9lqw1nKY0FXa9BMOz12VD46WMblYU3v1N915MTZSMva\nWVXY1dRLfMxe1m/UT9/I21dby73L2cvNvOfvX+/NQD9MPEVJSXhIUdlTV8tm7krO3NzLT1vR\nT3PoUdBcUM9zSLzJT2Fbz/Y16LDMwV69r03W3tFaP13bTkNOTP1FS/U/dNo+YelvzGROynXI\neFHD4unYvs3BP+q4aMo5dsdRSFTpTDpBQj3/28/L3rqx+9m+y+M92rlwL0K2xDlIR8NPONU6\nz19m12nOx1J5x1vqR82+YlPHyL5K3sZbT2Zj7D4/101WS+6/TEm9zs1dacDZ1+pY2WdPZlNk\nbkBc08pQ7ebLTFtlxuJVaF23Xfzc4dJEX8Xd5+Pq0+DkU0hw3tTPP2hQSEBGxzvq7FX1QPvZ\nPNe+2OvLucDcfr7M1XzadF9CSr0/Q9y+vUhnyMlSPuC52kdG1Oo4PFRuPzddakRbsmf4ys+9\n3G685FvD5+RmYVTXSf5JRUBR39PRScXC0XbttsjkX9Lbaz5RdD1GREfTaEvZacTNTXe/s1Pu\naOXcRWjRTeJNas9kWGfVYUdBz1pDbsbL1vTAv0VfzNzXPNnJUFY+ybrYPlfc0G47Vs3aSV26\nu/ZHzvteQVzBQT/fTufTUcZEws5XUVXpXDzobV7dZ7fB4r3FwL5I1cpIzmdxblVtXmw3VdhM\nOV1YwU9KyMlVTd/cyUrgeenXZdVRdstfb+ha5z5Tz1HNZmbF2enIT0m6SGt3Uss+W8j3Y+i6\nyNvXveJe21zlRlPcWDlqN11oaWY+YdvFSdzN1dx05Mlt5t5XxtTIeG7j12Rc/V1SRNzUZf/q\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.42.msg",
    "content": "Return-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA09081> for nsb; Fri, 5 Jun 92 17:21:58 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA09528> for nsb@greenbush; Fri, 5 Jun 92 17:21:39 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA11685; Sat, 6 Jun 92 06:21:42 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA13505; Sat, 6 Jun 92 06:21:25 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA02633; Sat, 6 Jun 92 06:21:22 JST\nDate: Sat, 6 Jun 92 06:21:22 JST\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nReturn-Path: <ysato@etl.go.jp>\nMessage-Id: <9206052121.AA02633@etlibs.etl.go.jp>\nMime-Version: 1.0\nTo: nsb@thumper.bellcore.com\nSubject: MIME example in VIN\nContent-Type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.8715.2229.etlibs.707775096.1\"\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nI will show you how the <bold>Metamail</bold> and <bold>MMS</bold> is\nused in my news&mail reader (<bold>VIN</bold>)  First, this is\nan example of default display image of vin for MIME.\nCurrently I call this view as the <underline>expanded view</underline>\nwhere text type parts are processed and merged into a text window,\nwhile non-text type parts are embedded into the text as a hyper-text\nlike <bold>link</bold> label as <italic>[<lt>section>]</italic>.\n<nl>\n\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nYou can view the section by selecting a <bold>[<lt>section>]</bold>\nlabel.  Selection can be done using either keyborad cursor or mouse\npointer. <nl>\n\nThere is another view called the <underline>holophrastic view</underline>\nwhere sections are listed in one line per section.  You can switch these\nviews by selecting the links labeled <bold>[<lt>shrink>]</bold> and\n<bold>[<lt>expand>]</bold>.\nThe following is an exaple of holophrastic view.\n<nl>\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nOther labels <bold>[<lt>metamail>]</bold> and [<lt>mms-view>] are shown\nin the above image. You can escape to metamail, or raw message viewer\nby selecting these labels.<nl>\nIn the display of vin, a content of non-text parts can be shown by\nselecting a <bold>[<lt>viewpart>]</bold> label, like this:\n<nl>\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\nR0lGODdhQwJ/AfAAAAAAAP///ywAAAAAQwJ/AQAC/kRiiavN7yKcstJrM9668++F4ChKx4mm\n6sq27gvH8kzX9o3n+r43QPJDBIWkYsmIPCqTzKWzCX1Ko9SptYq9arPcSPAHBB625K65jD6r\n0+y1uw1/y+NeYdi+4On3/L7/DxgoOEhYaHiImFgDdgeGpwgZKTlJWWl5iZmpeeLTOMQIGio6\nSlpqeoqaqrrK2ur6ChsrO0tba3uLm6u7ywvKiecYHNZLXLw6ZpyL7Lqc7PwMHS09Te3L4Ik9\nupziyGmAgtvsvA1u/e19bop+bhfKzd6uncf9Xh+vup5KXrvP0r1CSpy+e9UKGjwYsBmwLwxF\neetHBJ3AWBOJPXzEaAzE/m8JOXqcSG5fR4/s/mEkiS8PK5Gzfol0mW/kSoIIa9qkphHbSYcX\nTfr8BBRWRV7lWHIMuTPjI5bIkHYr1TQiyXIfacocyvMpLZhaYWJVyszqzbFke/0S5knsRqxR\nK6oY4vXrLZBJf6LUWtJdTHFD6X6KilIuWLj24s67aFjeu6oA1RVuq3Fx2cmUw11bmC3rP8J8\n2/WFbFKqMYEKPbvEOxjeutKdod5jrTSeYLyPuy4lHDpobKqQ/bmmLVF05eHEZa1Gi1nz0Xm6\nZ09VCTwZadM8kTaGp1teauXRAZc+5jtvVeBOswd9uVRs6o3mirt/n7IT5q+AcZ9X357xfemy\n/qlXr3ufUdqZl59tdgno2IHB7cfZWwkyWN4p1rW1HXwWXrjZfMKoJRxvwqGW33cI7vLdeumB\nGOBO9Y334GARjnhVcOiR15+EKnYY04B3mYhhjxjmpBNaA74I3W46etjTaHWVuNyOT0VmG5R/\n4Zfdih4S+Jt94nkn44ktzqhlgkieJKWPZlZ2XEPJ7RYZYm1eeeRhclLZEgx3LZZjbLnROCeH\nIRYFZ3xavmlakYQ6+adqE+YJF2eObnZmpJPlpCGWkvJ3pnM6Xsppp54qA2SQw3xajKaT0skd\nqaquyupvRCAXzCayzkprrbbeimuul2QEa4O6/gpssMIOS2yxgciH/lyfxi5bbKOKUvisDL6O\nKdm0f1gLKCG+6plOtIdgO2ZozIJTqRjjnmussy2omwO4EfnW27HeukmDu/SKBm0l9va2ryT9\n0qMmrOgOLGyUDt57rbdAGfKvDf8+6h/CifQLsa0Np6kTwRrr2pUv7ujlsTW3GanwRyFX+Jps\nIHO7owvOovyxkLyGnON0J4trM8mFFTjqneFVKfK7MyCrprIbH43JzOy+DJuL9SGGLc2tQYpa\nklB3i97BC1JtHr5G5ZlUPvGGnS+gL3db9dhngy2xy+UKjXTcmTSEtn5YT/fuwmXDWyjLdT/U\nILt5293YzuZCO/PefifetODZckuv3lev/q02dnWz+fCrAX8hd+dJT7Xh4IDTfTVdcNvjd7WQ\ne1nz02MLvbTkMSvONePq2Xn56lY/vmfQkedun8O93uF58ZRU6frglIt++usr/p3t3sw37zX1\n0we/ttPKA3845vNuz/fuk1uOu+F6Wb/uNRl/b3z7Ca9GZur9MS941IGxhjj0+Ooue8n5i625\ng8kvIGkrFOqaI73qya90yVucwer1tou5b4Ltwtr5Qqe5C/asRr7LGQbFpq6ggcgtzmtKCJVW\nO4mccGUpk5pkWlihDfLsdCJDmcpMxj6AZFBDFOyhD39YKwm2TRNC3IPSytWqJCpxiUxsIqh0\nKKrlAHGKVKyi/hXRFUX0XXGLXOyiFyEhhuEZ7YtkLKMZzyi8zREPjWxsoxvfSDTi5fCNdKyj\nHYuXxSLecY987OOvwqjGMfpxkIQspMXEiDNDKnKRjJxEHDHSyEhKcpKFyOMcKYnJTGoSYHnc\npCc/CUqqZDGUpCylJB/5JFOqcpWDtCQrXwlLOgIySKqMRixvuawjJsuUtszVJb34S1zeAJWW\nepYE9TgsijnEdqFSgOrmlcge5FCK5YNgHxQVzPQtQpjaiuDdqHfMbKZrjkPyjIHw47LD8cFe\n6bDm0PyAzXUOk5vH2qHApkfJch5RKuhclzhjwE7DuM2dRpzVP+n5Al0WbXtM60x4/gB4nWnV\n0IYzfE0HA4UzbRxFl5SyUfhuiMLLpcwf5OIaPeAnR0ialEnBg58O3xSmNmEHofBU33ygszXx\n2S+BPLWo/hboIsdp7YE0UYk5OfcARv2MIQDU6N3clZezkIsrJW1no/J2GGfK9KVZJemhvKLV\nmdL0mt5k4PWm+c2EZtSFTI3eXgJYwv45KGakE5L6EhK+5SkmYgmdKqXACtiSdFWwC+KqX9nX\nzsOWNKkCHSsOZsnDs7opmpO1nzr3ohwk2TWDbDrgvZxa17r2M6/682D1tAnTrlJVqqz9K+oi\nx9Vpzil3E/CrY3mg0DXWL60lpKExeUsaa0FshYypplCL/orC5Nx1r1oDnyjbelqvppawW20t\nY6+bWtvGk1DpU01iFyvW2/bApskiXNmOazbg4kh1zu0bbVqKPrk+cxhHpW/Pzle4/z3XXB3j\n7XevS13BXlXAbwGcYlWLYMOutqMJFq8OXEk7n0aTrsK9qN4qyrNU+VODc70Z3OzbYcqG6bIX\nnmhp/3s/Dv4lla7lTYrz92IFF8i6gnQwQO0ZsC+id53Q2ETgrkXBg9oYYzfVcWfh2WNf1tR9\nQh4yBAJZYydLecq7KiuVr4zaiU0Zsr1q7Lioq6/HVrCvXm5Wu8BoW2mS2cm5BUaZc5lmR4p5\nnmME87n+2eRtxvnBdmIzeYt2/tWj2VnOdHbYjd+czD+etKBrtjGEtUqdPTduo5b96YTBMjLh\nZlqK0TIxNUeVTtyo9UkrLZx4LK1XpB65NeCFr26ROlSFPdelsXIzWHOTRkrnmY1cznFYF9tY\nAp/lv9odrKRhalVJDxjYggQzpIld4GFTNqvJDnZShd3iZzMnu9IdLIqhtm2+RS3a0z1NXL6N\n6EVfhruNbHOGAqvsDTc4zdiuc7EHzW03Q9qwhP10o6HNb2YrywGq9e5DE4tvwFo3wMzudHHJ\nrXDXcnrRztZztjFJzCbdO95DnTfvQirrwF60TyvGLsQ5fGxuI/beIyc4yisrcbwFfOEHjvmG\noXny/oZXlysitLjJMW7lBGtbwcZGNDXZ3e16Z7nc+855tBMe8ZXDu8/ODPlU+x3oQ8t06Ds3\nVKhxrm6sb4niS+8zjYEeyFpXXL1FfxXHLw51o9bbmOTmXNNPqm2GD7zmA817vKsucL9zKeIv\nBR1WF2xUgErd3P2GON+JDS6lZ9LdWW+c0VgG4JvTetr8PM2EryN3xaNUuyUTtegL/vmtp5pp\n8sHfR6WaQgJPO6Dm03WomuoTx0cU6af8c0qxbLy4m73FBN31JedO0HSvEsLADz7ncTelYT7/\nnUMrtdZTDsteN6L53O/+xBBZ6V0nbPreL/8eM857ZPI4ncmnt7TEH/ay/p8e+9Qn2OLrb35F\nMD+/j2FYIjPXbVGmRWfmZeJkcHoAf3NzfdKSf2iWdrDWXEMkL80DgAsYCcJXaECmMffXgEEE\nfv4TPWylYSujPRLISVHlUA+leTa1VLdXWVC1M5t2c6U1V0VSev72aivGepZHd8gmSl2neDqY\ngK+EfpeHgvqlYiLlH/51fOimfJo2bGV2hHrHe9z1TVw3c0iHcG+XecsWhRIneOB0blMngNMF\ncFi2f81VMQEEXWeTaiF4fMVGf86DfFlWcco3W2Rob4R3YAnXeImHbGHYhW8XXrJXhm13iLel\nfbbGf7BDgvmyWe71O8XnfvOXc3F3h4fCgeHW/kzjxoer5YcTpXAlR3Mfc2xNR1sEx4BnV36U\nB4JmNTrtBVQPN4By+FWWGH+YaIskN3yId3dJd4qV14N4V26lKHD5BjB1V2C/CIxDeEtF6HCx\ntnlp42nbsC1xyIdHF4G5mHIbZYvCd4CIGHJYqG4eJ45YZUENF4aeSHawxxxgR3zml4b99zzd\nkyqQUlSN2Is+E1erFmlvFn02GGPVwhdi9z3Ls4wI2WFMt4NiZ4MqNFC454VGx2L5t4i1po/S\nV0nO6EkY6HN31oEV9IA3iGccOT9bRn7492UhKWajZJIsCZPixXz+yDEpGZM36UMXqWryxJMm\nuIcy9n71VIAaWY4E/shoCFiUKumR9SJ+g4KGH2htHzle7Uh0p5iUGXmUlzdnc2iBfJaViViJ\nVUiUCEg+VwaN7JZNL2mOVteL/sKV7deTt9KUbxmUgqB+rDSTJ/dsI1Qi1AZfY6h7VTWFNJke\nC8mCEWV7L3iQMWh9BOl6j3dqQKiG/ohiSrhGIQZCM+RpaEOPo5aYoKSTgOd+otl1huhviaF7\nr2hnaGWHh5d0TgiOdVdtVZiJVFmanLh08BhePqiFIkg7s5NAFbhuYFlIrviJLsd3ELlvuZeU\nu+l0t1hNAaeLhLeUeViMtLmLyfltqpibfbWc8Rdsvulbe6U7vcWNeKhIZyknM1V1NfRa/qoY\nkOGImq0JmNF5id24i2XZaLeJX8+pleFoisxYnyT1nfm5VPcFGnSzHkIlnAK6SXnJjdqYbyZQ\nm9CJn9lYl9J5oRNalUW5nfgHdaiImg66nt5ZogaKmJf1m+L5YdgYj6CJY9vHiwyGYN5oQtc2\nWf65oQ0moW61cVJ4cb64n7hJjsQ4nbZpAhEJJQR6ooynbOJJOlaxXmsYecdISsaphTvnPcrJ\nc+05Qp2mpPwYX5RZkdB0mjM2gwV5dZynkI6Hpj83a0O0lz+BjLsjQlhSjzKkJ9DXox3pe5BE\nnBaDk4aklr0Hfi5FLIQ5qG5UqJEUmoG6qJHqYFhqQMlkk5KK/qmC9qep1Kht6ZUBGJZqJZTp\nN5boqaS4FZeQuph2mZapipdBN4wMI5VAGoCsCQghupWmKn9Giap0eZW+amjBipSx9KgS2qmf\n+qtleKz0SVajKpeDoJat+pV4CZVWWBTpiKhIGplE2qEuCGOj9nXeipmH6Ygw+Dgy2IKP6Yvb\neobjQ4NquCQiQmoKaabI83tl4jOy16aeKa5UpJ7OiZykuXfQiW3OWWdOKJZtI2DtSm1Rh30A\nOps/uZb1WbBtWaGyKaRfOJxYyJaVaYwZCyQ0t4ohm7BMBqtxFrC4KV2FCF7WSavIaKsa+rJC\n95YAGnhhSohIWlunarCoRYXn6Gym/id/a2elHFqH11ekP1SsFlpb3FmlEMsr2CWf/tmzWHmd\nEluhtPd4I5WF/ymbUUuiBqu1P2uK4Bmf9jlvkme0IUZORWtFlCqfKTu1yWibNIqWODug7NeM\nO3qxNWazrAiMQ/m3LbufsbqyW+uhN/uE2YmIBjq3Iwun/rqpU7JdTYujMyuk8AmqKGpueiuz\n2Jl5IAuqH0qrSStQHxq2RvqwDjuI5wk7eBt6FMd1Nup2ZguPkSu5h5ql4fZdhGk5BfRrmzuK\nOpOmP1Onr+V5BYSYapq8B/mu5fimDnqn2UqQQTt6tuulFVYx2KRqe8KlhpmwmAZMMWpryyqr\nmaqIxVmt/pWKWyN3TZeKvqFkvp2jnvFrv1Q2j/erv+k7kpCaLt2Ji90Ku49lpp3ZlRnYocfU\nrD62jcs6v3JDqSZbqxm6q//mlbdbsgIMl1YprMPKwFcHrMjKR/XbPm0bZrrKlY+rZacawg98\nwsdTnEFnsnSagqDnuZfpmDmIwZijl9E3hZk2cANUmNu6vOpamuwqhfOKakdohUSckNAjR4qK\nRks7QcKYrD6KsaBLIWspvnVKuk06kbe7sKyrxRNLsDrXjBHLsRB1m/yXd72rvv0bZNkZsz7L\nt4obuF4MbwXadhhsjd94x1EJxi3LlkALwHWbx4yosuc3uX0aN1lLwYc7swtL/pO1ObgXsLUM\nu560W6PuS7NMKrtg22zb6TGHnJyBS4qBeUf56zmQHMDKOMlu27WDhrqDnLz7iMeLzKxei8jc\nqU2SB6Z7pslX+4surKn9a8wwjKGjPHzTKYgdy7i1zLKda3Zh1T2I61Wme7dMp5Ua+8yhKrrn\niq1PF8JVFMElvKY0nK7LC45nOnsvNDXA65cQ2Ho3bHebNpCTWaVxuqf1+pmz+G4SCaZUE7lO\nyaiNnMH768H+O8eyMoTJDGe6q9DfAr9ABNHC66fIPNEbPVbnzNEfnX0IzdAgTdKLxMoljdIZ\n3UkpzdLyu74tDdOTJ9IXHdM1HXwybNM5nZ7ki5E6/u3ThOTRPy3UdkTCQ23UsoTTR63UU8zT\nELjUT11GQQ3VU31FRU3VV23OSY3VW52TTU2iB8ogzEQQLfgf/Gw7raBUnszVDSjVTHmtLLKG\n/kS9+mxpwflUV7jWg2rVi3CF/OW9omrEH2eZ5pVT15PXeq3VfF06CGSC+9p/bthAvxvZhx2p\nVDxmkCjW7uuGFVZ7bQXZR5WgNE3ZHQmVFLZTIMHY5unYbpU9UTJcRPV/N3OXo/2gM61mmO16\nUPW8jw3F8pUktJjQtI2/ie3WuF2puj3XtYdSvm0lhi3cHWjZBLzYMYbcgT0+m2fXOjXMz22W\nLy3dMCYzeFW9iAUzd61U/slzktztfXut3u2dqMTt3vHNMV490vJt3xe4vlJ8SBKlkrxWxXDG\nff/Kq5UEuUZXs/rSs8ZXwR8GrRqsZ6atp9uR0NLafBCqyuWcq8FMf47yyvrXnNMavlc8lSJe\nf3Nr4rJ84UMqZVRcuQrIhWLJx91lCVUL4n5L4gOugS47nz96wJ6KknKs4x57vXJHOVHMnNBb\n4FHmjLCWidPrrZjGl7fG4Q4F5UK43Orcu+8s0Pl6ZK1HyatH45Nq200KhF+sH96GeDuewSp8\n49sksKsZW2rsmpXrymbozTUaW9SMtTd7tK6N53pYnTRl4S47zQx2mn+c5nkrWyS+5JcLs3ku\n/uV/7qEAAOeALnSUfrqguKOJy+l8js2A2OYIxeKJC7WUTqFr+qIzCs5lt4lI+earzq38ZLib\n/OiY5XSYrssFa+q4jtEnTup4fGq8zusoLEy7/jbWaqXQhpwfm5pAaYGtjqqvnrf86bZxS8co\ne5+J3scg6unM3rquKbH1vXxj3uKqbppbPM7EOLBzGOYY7jakOexiFWCziek9eHRpJe+N28db\nOKCxScyGfOeMyMmzG+An27VJ2Fo5WNB9yuZUzqcJmOXZO5imfpgUz4zCXoNiKuwUH+SI/q2a\nOOyvufEjv8T9ypvuFe8VTt+OvGTdlOIO/r81jkduSew1X+wWX+85/r/bC3yrHP/y7q5kMj/z\n+B3yHYyGY37fSa9kOJ8W1u1LPt/mok1oyjzf7T3quUrgXXmDeAjtC73BB9vjFvuD7vrVwW3z\nR23sTH8bGH32PqfhsVyyRb+NPL/Bq6riC4jxnYuD/Z3klC3gP49mL77nIY5zJmmAbG/2bs+t\nFausWE/bg65ycIjrW+jzxs6Cu45v7Q6edx/q1Vf5HP/lLAv18yzOci/Mlg7CoC+YJJ+tUi+p\nV0+xOotwcp73qj7tprzgbb/LBJ/Fkt7JmKula4zuny78z532Or/2O17omBy0vO+mUc/oYT/i\nBXe8COtdKX+8mf69kS+ynzzrh/33I/q1/hbv6DgFp+VO5izc9UAfppgPW5t/6dxfxtbW5MC+\nX5+l3pBfopdMo8g36+VOAMgx0TS41YNrVtukpC5pvo8M/MLR66BHFMF1UdFKO6/avvFc3/ne\n/4E3A2BIdBiJwxImkjJxlEeKKsr80Dy00VZmjQWdUBTrunw9zcbWd5JdL2dnOHJTFb/Bef2e\n3/f/hZKOigi5zEhCkhgUp6bUBu9SFruaZBRhLi5fqAT9HhkRMzAdOdUEFxnJ2jpAO+W+Cr2k\nEj9dEQFxc3V3efOUTpFMD3O19k6Kw3qQe3PcmNkAVXmWn6utr7F3CoGLNqmBvpVtoS3Cs/mc\nr819QNnP3+Hj/uW7uSHX5fHz9ff5+/3/46UKFmvQvXztKtkwCHDeu4UNGUaU2AzKQEhllDH7\ndqycq3DIEFZ7NIxkxlXlfixD1arTJULjJgmZNpFmzVX1gBm6lWyXNHLFyFAbKeshmDiyUp5E\n6W7pThcJQ8VUaNJm1Yn0LJ4qWfTPUaQ72YzqApScRqh9sBDLxOUprDEllergapWuRpwWSQZl\nxUoYnIsFS7REyLEsJbhnm/qqoqqUKFLeApsKSeXWpxjttBouyFET1CixVmD2CLNu6X6/svb1\nmiZhW1SNHOH5iVjSas2Jfd1hTJty4DGjCIvx2jbSUM/QpIa6nAg26ye7TUc/aC81/hq3131/\nDktHNnLamoXKRKc7LG/r9rC7taMco2+dh20fYpHcjtj5caXnx4Z1G/f460lwSTj5mIvEvLPM\n8Ymn23LT7jyw7CsQwLzesq2WVAqDrzC9/GouQL5G+0q/Ee1KjaB03EsvOwKJmw0pkMqrQaWu\nyHswOOImdKrC49p7kEfnCGxBE9civG0uEpGUq6L+Ygpuq+d0g4GytHp0MS6xcGPPkxpnGYa+\nVxbLsckm1ouQyLWCXE3B1+ZYLEUDsUxSTlyYpE4naTrD7MPRfrFEw+8ge88bTmgZJwjg/Bus\nsSU3MTACLBHNrE1CYQxUQMDKmsTQqALF9LA5QTVKirsc/uzJVBGzpKi0Iz8VSZ0MxQtVVrRI\n/SukLaPZFCz8ZgVUm+msuVXJXokVtc6Wik1W2WWZbdaJWi9kdT9dP3J2qqqkPdXabacyEb1d\nr+VlowWVqrYj41AVdSZefaXy11gnA9FSHAzKlts5BaoTrhl7UZBCGf19NDGg7IU1VXAFdXdY\nGa2zzMMcyY313okr9LbKVoP9DsWbDHb0RyYKFvRgrhRWleE0P3wYYV8PppjbY4NhK72RWqnD\nVmQFs8XJld/k2edWQ+4M09BIi8yxeXOOlkVhM/TXDdB+47MUll1elj/qSvVyCzPrkPK37v4V\nucrwwmVQj904bK1I5RzWEk6x/ne1kGbJVA7yzYCrbjZfrH2EFMqsRanvTgRPji/iwztmCmW3\nZUu74Ri/PPlFXgV3/D7E87aa0XrGBtkLAftkT5iSwwZ667LNTvdQEGtBLOA4LRd6KLJdp5zt\nmWXfOHNrYe6mdI9h5/Jt0ncGSWif+ZUcrUzt9hFsy8PAW+bP31K5N8YJ3/3lUb1N7nTqG/nM\na+ao9H565cf92Mrlh7/Oey24fqNy99HcF8rY2kx5frC11xvattWXJ4/s6UIekwP8VBejcxVw\nM4QqVMi6VDMT+A0DLOmLfKbmNnSpzYKSURqjiJJBT/2sf6FCjb7MFw1tJY6F7ErgPiD4jBgq\nkCol/uQd33JSKF3MkGnmotgMzbJDXdHLhtvr3kBckkQlLpGJTXTiE49XRClOkYrs+J/vHghF\nLW6Ri4p6IdxcxsOrVJGMZMKhBxuoxTR2UY1Q7BJ88kTEBc6RRmpZV1O8+DlkSUyOZSxj77i3\nxjXmi41dBMwS30gWzL2CJwqDIBAfUinReelLPlyYH6d4tSsSspCdROSQkpjIkTFMkfYDoz4i\nWT8cwaZFLasfJjN5Re4REmsrcUxOHEg+Rh4SdHF6VNFeGUwXgmNK8qLFFYDpmkaVskN6qeRF\niPbBEZIQlkY840o2k01umOiEs9AKhq7JSSxKEnuLhFsMvfbMDtlNmQFi/maBJtmemN3tPII7\nZTWNeMRZvoSbTOoTf15CCn9yMoImQx4fh7m6FfFFfzQcE+BwMyabuTN09GxeCqmJT2dp8ojb\npEMvn1YRXupSiWlsYEH7eFDlpS43C/Wm/mRXwfA1jyjVSxFnbJqyLO4yoxr1X0f3icQTkuqb\n+1zSUMVpUgA2MnHJc6W6BiS6pX5PUz1i5ipBl9MwOe97PtVeNznnUaEqFYkDQiPUShqztOLN\ncVlyWgsVF7reqElrM5XKBhu3zokis2tuah//vFo1QKo1lATdyzK/ZaujCnCQoqQjxnJnSwZe\nyhjgpKhwpElXOHEHPDq7kWU2dTRPDSaw/eNo/u886cbUqtZwTxWmOc/x1hWq8J6wLS3vZDm3\n1TJxkLs9bAuBKBGm9VRxdBoiQm8bxs3hJbjJde5zoTvY5kJ3Jv8063Wtm13sble73eXud70b\nXvCOV7zlJe95qdutwaYXH+Z173nfG1/4zle+9aXvfeXLXoXIUr8Q6S++/juWa2IswHYsMJKm\nW0TpnhSkYmUwKJPaYKHyk8IPjjCEHSzhCmvYwh4l7oEjkmDTzhKHIH6ViUck4hLujXModlUF\npTaDwKErlFmccYxvbK+SdioTvRTYhPG6Qxdnx2KFxfCEO4xkDi/5yBtucpKdfGEpZ/jJMiXf\nXEMETzDR7ZhabhQ0/tFIq192uSNWPsPcYjvkx9xFzTI08zwTeT3joDnOPK3zndEh49/66c1s\n8nLGhnzaxLbZwHzec+v+TGc6v/HLY5YLFsvM0yAz+szXo7Sb28xivBB6to5udAQtDU/BMHKD\ntxquTI9L6iwYzxKivTSmXQxW5nJayJHec5xDS9ka2/iXq540qPd761cPSreHVvEX9btgWtda\nEmbesqSxkMtf51qyXPYmZfF8wEuVepyuPnGsSYyTZdPJ0HZGNKW5/dtfv3rS57Y1ulndZy2v\nm9yZ5u+4aSswfcs70dFW9zGOtug2hHrg+x62ubEs7BeDG5AfDvF4IO7adxn8z8+WkJ8N/u7u\nZRYw1VcWioyx2WNnB9LOQcRgZlNN740OmLPnqy2gz8Y+iU+c2BR2de4qzmgPigYmp/7xx2uz\nER/vReAnBuD+/nTsmgi6qLWjWppfjuyIx3x3Kt9WVVmk1St99d660x2MM8jZlteMT5dtBs4+\niAmC4FqyWZdaQnGbybyukqmZkzXUfqcj8NxOOxAFLakvOc7bzeFxecXf257uPymmTexbrbvd\nWf6fryDwOHJ1lKQQX9zBryhyQPoY0iGEb2xNUHyljxtck8V0sU9edSiyblRfSveUxI/zFx3c\n/Vj3ddEDRLbro6Fgu856lrk+qpa33u9VhVXhtbWeekeJfaGP/l/pR5/607d+9bF/fe1nn/vX\nR6HzXb51F/RdnkhnoMRA//qjF36rxDdj9+G/ffnHn/7zt3/98X//+cMM/HkfeNr3ilKkyp7O\n7oKQ6e+MZlB06N8qypikbksgxiZ2C5GCxYlyD9uSjeWiC1j6RcJsq70mcMdkqIkuEAMzsFY2\nkAPVwsNcaulCUARLhAJtLIpO8Pt2b+rOBrR465Ng8CBesAd7ggRrjgaTjf9uUOZiTqyya7iU\nTht+cNc6kLeG0Oeca706rYYuqbKKLg32CHVozihYCwj9pglb7QmJ0LhkcAapsAo10OngilVS\nCQkl6oBy6rWykJieCLN6boAwDx7M/hAKhUgK1bDj2LDI+u8Qma1fBkZL/C6l7uhQnjCbGisg\nLHCBhFBcLrG3rM64Do5E9CnvdG/f0MoA+emxQK2DGIoSOq8Ru3CxOqWHFMO3ALGb5iETASYN\nAzENK1Ed8M7hhGvAfA8R9ejwCJCc1sT2RG5x7krwoKduUO//OkkT24gQu8IWb9EEe+wMyxAG\nd1EkLJAaR4/N3DD8kkH5AGtDwIfAJupyBFD2oIOcfsXmVEsavymrwDHPBFG9sBHs8nEbZ7Ef\noREgr9HI9lEcCBEIq0tfgjEUZ2bzdOrd6mqn0G/zcMoZc6zkSIYeNazJ2IgXBdISfc6QQBLb\nupEf3Yhe/tZqx+BHBgHRJBHy7EqMHBmyId3RETULc7BqSLROzmCFdCiiI+XRtzwSF7PxJTWy\nJUtQUT4ytQaykAJy25DyKNfwWSzmEGeSJscHpRzp94ICr9jRCtQuLP0q/R7QJf8QKCvwI4Mu\nKlfLH0nSGidwJDtyLbfILE8yHqvDKpFNJ8OH4xTuFZNqmoxnC80OhDxDhGDRHdCyHneujSoj\nCC8R5PLQLrnoKd+yH1/QLeeSMm2xLZWkKv1QsJ6RpZryLD2pnPDRNOnyNDmz17gxM1eTNZOy\nG+Py0WIyNIFvE1cKJc9SKvNQNx/NNAEuBDkzxy4TNmfTKV1TjaZQJIkIBY/Q/hgSUjjNkBhU\n0zJVsiRpMxOrczk9szkj8wd/Mi+jUzo/kzrFSTlz5Q81kwg7kzvDUzsnEzyLcjKUkzkHUeUE\nLU2U8KT2S4C8EhbMxD2zSqC4LcZ0qLCipjG3MjjRkz3Xsztjs+NY8j0FsSTBU7eiki698yTn\n0zJhUtwccm0e0WnYZA4x6vEMqKYMT4Mc0kgK8EEhtBqvMzkHc9e280IxNENnM0aNEy6t8Sll\nAgUR0PMobxHv5DWewpe2zkP2rkXRpg6bNBBktDdpVDg79NTiUxe31CilsUd5UzKDND//UxtB\nJi+L9CGjzRjR8aN25JSiFH1UpPlaaUESpEpnlFYi/rM9PQtCP7QSd9QgN7Q2ipNgAOBQETVR\nh0NRFXVIFZL8GgdRXwg6znR4JBN9GjVRkdTzHIptJPVJqZRRRXVUSbVUTfVUSfVKR9VHGTVD\nUTVVv9RG81NaYJU3C1UuX9VUUTImq6oZa6j3FqsBLalO+bE1ptQVD+pQ1TFXmbVZnbVW9RRa\ny7RVfdNZZ9VGq41awXBVIUtZsRVXn1Vb10JSydVbi6lFSxQdj+8hX4lYAYVJ45RJySQCsTVc\n7fVeU3QaTlVfqRVf9zVWr5VMczBcDZNHwdVfn1NZy5ULGbFp5PT26EntUspdHZadykNiAaZn\nJtRfOfZZV1RQudVBG7Va/ps1YAP2Xwe2VVc1ZA2WTxFWvfgm69A1FUH19NZVY2uWXv+kYXHv\nYw/LWw+2Y4XWWlOWZae1X4d2ZFFVVgE2FjV1BgUpSz/VZfF1V8sVokboIsXmUsVvJ0f2WCss\nYpR2aivjU6MJaLOHapN2bUs1NY22PkXVZGdPWv8VZZ1WYbVJYcW1ZbGTYxNWIcsTqvqWbQlX\nV4s2bkMVVu3WiqAVZRdXatEWsd4Db4dTWjd2uowwcFtqcAu3czWVVj13bNsWDxvXcJu2OAkV\nbzGLdS5XJUZ3BQFXc8EBbkO3dr+WdEOXbwdSd01XE9U2IIHNNVu3NJ9WiG5TdmdXbW13bX02\n/kxzV3cNdmn59nHpsdXAxVzJdXhpt3gNSh9jFnmTgnOXt3a3lXxdFWhfVW6bNn3PN2PjJlO1\nN2jF9zz7A3wVqlDH93MRFnTNt16ZdXp7l2Sp19Ew7vAg92hrlX0d9XvtFwv99171MH/L13Nb\nt2QB+HXP93/H9X3JFnURuGpt82p9sYHXlHC7BfYE+HYZl4LFV4PllnqH9mjfl4Mtt4Vd+G8Z\nuIHvMIOJ9nA9FndNOGgVWGChd1aHuD6jYm+L2IaP2FHrV4cd2Ih7WAshGIiZl3hz1YPVF3Kl\nN3ERZiUxGIst+DxzGIodkYfTF5IIdm6D2HmzWItPF3/flnjBjnOd/tBeZ+94zfiMUxhxo/CG\nQfZl2XiA1zeAmbiDWTWMkzOQm3g8Y3ePd1OKGxkN3xjBlLgWCTlxFXmJ3XiOp9NOILl7JVlX\nlQ6QQ5mL3ylCI3d19HbtTtkOY9gbJ/mVr+5YaNkLhTa2uviW76XheJldcjkbZvmXNUeEV5mY\n2aJjddmQkZlZ9nMBBdMBi1USkRZ9ETmRodkkB7CGR3NaK3iYIZObm9lqbHlEwURdI7ampKds\ngBUZwShoXGd/l1llx7mXgZHu/MqU0rnyurlTxTYi1bGOtkKZhVmc61lZMnd9LoepWukqj+mq\n0Hk5vMN9s7mOESqYpyVuyfCgp6OV/8L3/vRs76Lp1o5ZQDeVhinuMcMFWA21ckE4o+mZo+PO\nmIUPDcAYe8223K7tcxcUfS8WfpstbdvVVnFZngvaj2Vab4BRJrnKGeTV/1DTnQ/EQviopOkw\nkjF6KIE6qZ35jIJRTW1Hr2RWn78Y+Z5Epd8ZcdrZpX94nlWYq1Mv3NBW90g0eJzUnMsRoiG2\n+ViIRE1aRR94k2Nwq+E69cpZZUUXpwOndMK2eLkXxspampdzm5/6gSp6zG6ahkuWdlTVqt32\nmgs7Y4zZs5PXIURTjtsWjEdYLq1TsEPbLEYbVDb6H3yNYMtEm1Z7NVvbbN/6tRXRo0Ebmdl6\ns2tpl60YDcvQ/rd5UY/rubbb2mgymV8fWwspLriVm0ZG+06tm5KO9VctG5VgLbBXto+Riqev\nFqnxMfeEDb3Bkq1hiLYRzKtNBh5tNqBz9jQWTry1tZITGI+rcQo/zZMvzizB2wlzzopn277H\n4pEl5x58MnlbCzcV8Zvz96XFDMBV7S+7xtm2O8Qqm5FJ+wr1lblViRFdT3ULamqz9yQWNYkF\ncJr49QA1xZpDfGRsW39f2r89wdvm+uYWhfBolgtVvL9DtitVPMhv5phBm64XO+qIyViAu8aN\niVLxYK7PubJXOZ3GuvPuCMVFyqK+UL8pN5ZTOFdIWk0QV6ML2KrVPLVJ2ZrJqrEV/rian/at\nezxsJTHP6RyaLxmHF3a+XdRYC++mklE9ynYs+9mcZS/MA/vQX1bHd3y9RTHNsenPSw7YeFtJ\ncdqkIs93LN2jd/riMhXUh/Ch9VbUwczTz3vVpbxSRXhhCND5KLWdWNxYHW8se3tiFT3XIxmN\nr9lvq/i/ySzD5y2NQ9pO6xx7U10iPx3PU1exaXzIL3ll23zSrQzOr+zSM5amAZ3KjbQhPzp6\nbN2qyIxWd1JKoxiNF/y5y1zYf33TvczNIY3d7hzeQZ23bwbTexuxq411Rb2DqZ3fMz2xT73i\n1vkmonwdstLKBd2x4umktdydANon0uFc91nBE4a4f47d/j22w0e8erNtv584wL+2mj2uy+69\n4IPqx0ms5bO92CO33tmcvX06eP9NMaPcRyWX4B/assePzS+Dp4VcD3mMbI2exmWcP1sdJ3Hc\nk326vGJ+iiOdfWV+4GO7Q3kt008ezLJ+SoIyu1UdNFg+6olu0+Hc6rXt2bAdL8uY9xJ9It2q\nLPOtb5WKUwYqgsUUnCf4zfPe0/hKmxVwwLce29W80gKf0h17bLXtse88zqWd1VX+wbRd5Lj9\nKjy+fFPsGqFbTIADQhAZ8gU8ByE7pW/oAaX88v0+3D9aaS06qsc14Tmdl28U8lEYuGEvoFCZ\n1/PsP6/bzWI7wiG5paU9Sc/J/vPDS8SmG8l7H3ZjFvjNePZV17xdnHKxS8lBfrCFd/ntosSc\n//lH8v0E7EnodcXvGhNdW/shEPa7X4ehP9pRGLezGySRNS37HP3J7fcTj4RLc6ae77tucbsI\nID6mLvcBcHLSai/OevPuawQFUCiOSfSpK9u6XCqRs0GHzzLrdM3sf+wlHBKLxiNyJSKNlidE\nMCmdUjfR3K93AwEt2du1Kh6Ty2ZPKd3c4s7uNzGMAupOYLtih6Hz4P4/YOCLGpMTlCBioowM\nHR6bkY2j4iRlJWDJWuZTm2WnnxwUX+HmIwVojSiT5ypr6yChU9SpK23cROPd7G3fISGObm2w\ncCus/u/hMLIQ8JroZodvM+pyMnX1Z2ZhGq81t8ayquT0BZgJXm83evobZra4+jvKnvRoDCiw\nNn0kODx/f1yxM38Cc1iR9GrUuVIDFzKU105TQ4buHnxhUUeLHT0RN3J0ALBcR38TMSpsUDIP\nwXrmQrLkyG4JyJbvRuL6NefiHphqZPKU+LEnvIm5Vnpktm9RmJFAlxLDppMpOqHNVPpIFQ8f\nRaVQt1b6qJWrInF16JFCSiqVoYBg1wZ7uZMtMrFoY8XME3MuObh6az1FuLetl7H6yn4YG+8v\n4k5evyY+Mw2vvro58x1tbDmQ18tNd+nBOlTrnYSaR/9xC5F0V1OQI88i/jcVJ+rYZfqmlR2W\nc2ejsYiazEjWte3gYhYLT6Rr9RfJdtEaLe48SebnmD1axTd4XDjfjKVz7017e3cXpyDrbgQi\nO+zw6gv/XO9Gzuryu8Ezc28fhtO394djQR7/mUb7CXhLfk0MOEYQ/rHWBWOGnXTgfaZVBuER\nCSp4oTfkUSjgd2ptWEQKFzLIh4e45TIYfR+yRZyKFconYnz3wJhii1tFVyOIM8JY4k06+UgZ\njzTiKJGBDw1pi45Jfqdkekda1qGQTmbFJJUz+sablIixmKVFL1b5ZZJcJnajmCqAeeaZZeol\noXJqZmAdmnHu6OZaUNLJnpdyxpnnhHfytKWflW/yqSeh0QTKFJmHjlMok/nNqWhPbEaZJZyM\nWkoipEDZmemil3pqFacyARpqUSZ8RhIqUkxKqqYFtsmqaKfKih6ts9paK6636porr7v62iuw\nvwobLLHDGlsssh3CataxzSb7rLPRQjuttNVSe6212ULb3rLdeosflK9+Oy65Pbq6arnpUnql\nkeq66y5x6L4774eSrlEAADs=\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nI feel the holophrastic view is yet useful for a message which does not\ninclude any non-text part, that is, large text message can be\nread efficiently by representing it as a multipart MIME message, then\nread it randomly selecting sections in the holophrastic view.\n<nl><nl>\nI should say that VIN's view image could be easily defined or customized\nby end users. Verbose explanation like  <bold>This is a message in\n<italic>MIME</italic> format</bold> will be cut first when a user\nbecome familier to MIME.\n<nl>\n--<nl>\nysato@etl.go.jp (Yutaka Sato)<nl>\nInformation Base Section<nl>\nELECTROTECHNICAL LABORATORY<nl>\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan<nl>\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.43.msg",
    "content": "Path: flop.mcom.com!news.Stanford.EDU!bloom-beacon.mit.edu!hookup!news.umbc.edu!haven.umd.edu!purdue!lerc.nasa.gov!magnus.acs.ohio-state.edu!math.ohio-state.edu!howland.reston.ans.net!news.cac.psu.edu!news.tc.cornell.edu!travelers.mail.cornell.edu!newsstand.cit.cornell.edu!usenet\nFrom: bst1@cornell.edu (B Sudesh Tiwari)\nNewsgroups: rec.autos.marketplace,cornell.marketplace,ny.forsale\nSubject: Car for Sale, 1994 626 LX (NY) - 626lx.jpg [1/1]\nDate: Tue, 25 Apr 95 15:09:57 est\nOrganization: Cornell University\nLines: 789\nSender: bst1@cornell.edu (Verified)\nMessage-ID: <3njhl5$f8e@newsstand.cit.cornell.edu>\nNNTP-Posting-Host: 132\nMime-Version: 1.0\nContent-Type: multipart/mixed;\n     Boundary=\"*-*-*- Next Section -*-*-*\"\nX-Newsreader: WinVN 0.93.02\nXref: flop.mcom.com rec.autos.marketplace:13933 ny.forsale:13859\n\n--*-*-*- Next Section -*-*-*\n\n1994 Mazda 626 LX \n5-speed with overdrive\nColor-Ruby mica with beige interior\n23000 mls\nFull Warranty up 50000 miles\nFully loaded - a/c, cruise, dual airbags, power W&L, tilt steering, great \nstereo with coded alarm\nLuxury pkg includes power moonroof with map reading lights, performance \nalloy wheels with locks, anti-theft alarm, heated outside mirrors, floor \nmats, rear color mudguard, etc.\nAdded bonuses - 4 original alloy wheels with snow tires, Bridgestone \nBlizzak, 3 Mazda oil filter, 1 Mazda air filter, a fitted hood protector.\n\nPrice $15000 (Neg)\n\nContact Sudesh at (607) 255-8844, (607) 732-0343 after 6.30 pm, E-mail \nbst1@cornell.edu\n\n\n--*-*-*- Next Section -*-*-*\nContent-Type: Image/JPEG\nContent-Transfer-Encoding: Base64\n\n/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL\nDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/\n2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy\nMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEGAhYDASIAAhEBAxEB/8QA\nHAAAAAcBAQAAAAAAAAAAAAAAAQIDBAUGBwAI/8QATxAAAQIEBAMFBgUBAwgJ\nAwUBAQIRAAMEIQUSMUFRYfAGE3GBkSIyobHB0QcUQuHxIxVSchYkMzRTVGKS\nCENzgpOissLSF2PiJTU3g7PD/8QAGgEAAwEBAQEAAAAAAAAAAAAAAAECAwQF\nBv/EADMRAAICAQQABAMIAgMAAwAAAAABAhEDBBIhMQUTQVEiYfAUMkJxgZGh\nsdHhI8HxFTND/9oADAMBAAIRAxEAPwC2Yv2twXD8RVST66RImS3KkqJub6+n\nTw/wrF6bHMKl1EiYlcuZnIKS4ZJZ+fG+8Y32x7LYpivaWoqZVHNmImKUpLJI\nDevQjTOwOG/2b2ek0tTIlyZkoETEg219HNuWsOSqqMU0yg9qcb7Zye01VS0F\nVUIpZChLCaYswPIbuYX7E4j2xrcZTMrqivXQGWoKM4lsxsGJ3dtIsPa6UcEm\nzu0WGy5K6lKkzZiZjHUC7bsW8Gheh/Er+0qegkVEim7ypUEqTKTlKSxdxtfT\nwjlzZJKMlR3YMblJNMy/F5/biXXGQmtrppL5UpnFWg8baiHtBgfafEKOXNqK\n+umS1ozpQmapRBD68NI0ntL2swn8jMApUqqZKgglJDi9hydozSn7V4zS4mEU\nYqF0qsp7ouQpNiRo37RM8stvDFLHKMqkHxXDJ8ySJaZKUplSwLEEnmXu/wBT\nFdKAhxWFSFLSMvs2axDeF/IxJ472qM3PKluh3zWykPs3LSIBHaFZKEqSkoQg\nJRZ7D9vnGcIZNop7VLslZ8iWmgIORaFEpzpUpTjZ+DkcLwTBcSqKSgShIUoI\nLEJvxHpz3hCUioqZJnomhMkLzd3mLseWrWe8KYeaMU1NJVPnU1ZNnEklylSS\nxTYa6lzd4NtquylW1snpWM1FDlnTJfeUi5QKkgszuAx83bhFVxDHRWVylJQM\n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\n+8RlF/8AtsvwT8jCkUscWjojdH//2Q==\n--*-*-*- Next Section -*-*-*--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.44.msg",
    "content": "X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]\n\t[nil nil nil nil nil nil nil nil nil nil nil nil \"^Date:\" nil nil nil nil nil nil nil]\n\tnil)\nReceived: from gunwale.mcom.com (gunwale.mcom.com [198.95.250.11]) by abattoir.netscape.com (8.6.10/8.6.9) with ESMTP id DAA18866 for <jwz@abattoir.netscape.com>; Sun, 30 Apr 1995 03:04:30 -0700\nReceived: (from jwz@localhost) by gunwale.mcom.com (8.6.9/8.6.9) id DAA08377 for jwz; Sun, 30 Apr 1995 03:00:19 -0700\nMessage-Id: <199504301000.DAA08377@gunwale.mcom.com>\nMime-Version: 1.0\nContent-Type: multipart/mixed;\n\tboundary=\"bODY.pART.bOUNDARY.2\"\nApparently-To: jwz@gunwale.mcom.com\nDate: Sun, 30 Apr 1995 03:00:19 -0700\nFrom: support@halsoft.com (Hal Software Systems)\nSubject: Welcome to Ishmail\n\n*************************************************************************\n* This message has been encoded using the Multipurpose Internet Mail\n* Extensions (MIME) format.  The mail reader you are using does not\n* support MIME.  To display the non-text portions of this message you\n* will need a MIME-capable mail reader such as Ishmail (support@halsoft.com).\n*************************************************************************\n\n--bODY.pART.bOUNDARY.2\nContent-Type: text/enriched\nContent-Transfer-Encoding: quoted-printable\n\nThank you for using <Italic>Ishmail</Italic> from <Bold><Bigger>H=\n</Bigger></Bold>A<Bold><Bigger>L</Bigger></Bold> <Bold><Bigger>S=\n</Bigger></Bold>oftware <Bold><Bigger>S</Bigger></Bold>ystems.\n\n\n<Bigger><Bigger><Bold>Getting Started</Bold></Bigger></Bigger>\n\n\nThis message contains a few quick tips for getting started with =\n<Italic>Ishmail</Italic>.  If at any time you have questions, =\nfeedback (positive or negative) or bugs to report, please use the =\n<Bold>Comment</Bold> function in the <Bold>File</Bold> =\nmenu to communicate with <Bold><Bigger>H</Bigger></Bold>A<Bold>=\n<Bigger>L</Bigger></Bold>.\n\n\nIf you wish to be added to the <Bold>ishmail-talk</Bold> =\nmailing list for discussions and announcements about the product, =\nsend a message to <Fixed><Underline>majordomo@hal.com</Underline>=\n</Fixed> with the following message body:\n\n\n<Indent><Fixed>subscribe ishmail-talk</Fixed></Indent>\n\n\n<Bigger><Bold>Mail Folders</Bold></Bigger>\n\n\nMail folders will show up as icons along the top of the main window.  The=\n messages in the active folder will show up in a list below that.\n\n\nThe <Bold>Folder</Bold> menu contains commands that allow =\nyou to create and open folders and to switch between (activate) them.  Mo=\nst of the commands expect you to first select one or more folder icons.  =\nAn icon can be selected with a single click.  Several icons can be select=\ned by dragging the pointer or by holding down the Shift or Control keys w=\nhile clicking.  You can also activate a folder by double-clicking on its =\nicon, or by holding down the right mouse button and using the popup menu.\n\n\n<Bigger><Bold>Reading Messages</Bold></Bigger>\n\n\nThe <Bold>Message</Bold> menu contains commands that allow=\n you to compose, read, save, print and reply to messages.  Like the =\n<Bold>Folder</Bold> menu, most of the commands expect you to fi=\nrst select one or more messages.  For example, to read a message you can:\n\n\n<Indent>Double-click on the summary line for that message. <Italic=\n>-or-</Italic>\n\nSingle-click <Indent>on the summary line for that message to select it, t=\nhen use the <Bold>Read</Bold> command in the <Bold>=\nMessage</Bold> menu. <Italic>-or-</Italic></Indent>\n\nHold <Indent>down the right mouse button over the message summary line to=\n display a popup menu for that message.  Use the <Bold>Read</Bold>=\n command in the popup menu.</Indent>\n</Indent>\n\n\n<Bigger><Bold>Composing Messages</Bold></Bigger>\n\n\nWhen you are <Bold>composing</Bold> a new message, you are=\n typing into a <Italic>Motif</Italic> text widget.  The ed=\niting commands used by this widget can be found in the <Underline>=\n<Bold><Italic>Ishmail</Italic> User's Guide</Bold></Underline>. If=\n you wish to use your own editor, check out the <Bold>Editor</Bold=\n> function under the <Bold>Message</Bold> menu in =\nthe composition window.\n\n\n<Bigger><Bold>Customization</Bold></Bigger>\n\n\n<Italic>Ishmail</Italic> is highly customizable to your ow=\nn tastes and habits. The <Bold>Options</Bold> menu in the =\nmain window contains commands that let you specify custom beeps and icons=\n, pick the fonts for your display, add buttons to your interface, and con=\ntrol the appearance of your message list among other things.\n\n\n<Bigger><Bigger><Bold>Multimedia Capabilities</Bold></Bigger></Big=\nger>\n\n\nThis section describes and demonstrates <Italic>Ishmail</Italic>'s =\n<Bold><Underline>MIME</Underline></Bold> (Multipur=\npose Internet Mail Extensions) capabilities.\n\n\n<Bigger><Bold>Enriched Text</Bold></Bigger>\n\n\nThis entire message demonstrates <Italic>Ishmail</Italic>'=\ns ability to display and send <Bold>MIME enriched text</Bold>=\n.  Text can be:\n\n\n<Indent><Bold>Bold</Bold>\n\n<Italic>Italic</Italic>\n\n<Underline>Underlined</Underline>\n\n<Italic><Bold>Bold-Italic</Bold></Italic>\n\n<Underline><Bold>Bold-Underlined</Bold></Underline>\n\n<Underline><Italic>Italic-Underlined</Italic></Underline>\n\n<Underline><Italic><Bold>Bold-Italic-Underlined</Bold></Italic>=\n</Underline>\n\n<Bigger>Bigger <Bigger>and <Bigger>Bigger</Bigger></Bigger></Bigger>\n\n<Smaller>Smaller <Smaller>and <Smaller>Smaller</Smaller></Smaller></Small=\ner>\n\n<FlushRight>Right Justified</FlushRight>\n\n<Center>Centered</Center>\n</Indent>\n\nIn addition, text can be <Bold>indented</Bold> as in the a=\nbove list.\n\n\nTo add enriched text markup to your outgoing mail messages, use the =\n<Bold>Edit</Bold> menu in the <Italic>Ishmail</Italic>=\n composition window.\n\n\n<Bigger><Bold>Pictures and Sounds</Bold></Bigger>\n\n\nThis section shows how <Italic>graphics</Italic> and =\n<Italic>sounds</Italic> can be included in a message.  The disp=\nlay of these components is through external commands that you choose.  Is=\nhmail comes with a <Bold>mailcap</Bold> file containing li=\nnes of the form:\n\n\n<Indent><Fixed>image/gif;        xv -perfect %s</Fixed></Indent>\n\n\nThis line tells <Italic>Ishmail</Italic> to use the =\n<Bold>xv</Bold> command to display GIF components.  If you do no=\nt have the <Bold>xv</Bold> command, or you wish to use a d=\nifferent command, create a file in your <Bold>$HOME</Bold>=\n directory called <Bold>.mailcap</Bold>.  Add a line like =\nthe above one for <Italic>image/gif</Italic> and change th=\ne command to one of your choosing.  Add the <Bold>%s</Bold>=\n token where the name of the file would normally go.\n\n\nHere is a sample GIF image:=\n\n--bODY.pART.bOUNDARY.2\nContent-Type: image/gif\nContent-Transfer-Encoding: base64\nContent-Description: Our company logo\n\n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\nr3znS9/62ve++GVFAgAAOw==\n\n--bODY.pART.bOUNDARY.2\nContent-Type: text/enriched\nContent-Transfer-Encoding: quoted-printable\n\nTo view this image, click once on the icon using the left mouse button or=\n use the popup menu available with the right mouse button.  To hide it, e=\nxit from the viewer application, shift-click the icon with the left mouse=\n button or again use the popup menu.\n\n\nMessages can also include sound-bites in the <Bold>U-LAW</Bold>=\n (Sun .au) format.  If your system supports this sound format, they =\ncan be played using the <Bold>showaudio</Bold> command pro=\nvided with <Italic>Ishmail</Italic>.  Here is an example:=\n\n--bODY.pART.bOUNDARY.2\nContent-Type: audio/basic\nContent-Transfer-Encoding: base64\nContent-Description: A famous personality speaks out\n\nLnNuZAAAACgAAEJ5AAAAAQAAH0AAAAABbXVjaGJldHRlci5hdQAAAH5ueW/+fGrva/Fr+Pp4\n6md7dGTu+Xbj6ejw6+f89ft+/n71dXRtd/5x/m919HD1bvJ3+fP1eW7raulv9fl7fvv89nn2\n7271fGzye/719n3s7nXsb//xbPBsbXxg9m1w8Px65Xn3evJz+vZ+7nLu//vqZux0fHt2d3L0\nePhu+/91+fV09fV47Wrtd3zqavh+dXtu/m1x/Hr0+eb77e367nz89nX//W9s9XD3de96+/dt\n7nf+cPVxfHp4dv3xdHpw/nR0937yeOhu73r07XDhauN89/Dv+P9v8X1weHZ5fGn5bnJ+dvn6\n9nvv+X797353+3jw/Pr98Xf6eXj7bvpxfHhufXp0d/r3ae5o9Ptx73jxfXfseX7y/n7zd+36\n8/P54HLne37vaPRudHxr/nJu9nF492bucXnrZ+Zsd/v9+Hn6/Xxzfv/59v/u8+z85vd78m34\nfn3vee538nl8bfhn+25peWl+cm3xb/B28H5/+Xrr//r98n3te/T5+e/+/u9t6XTvb+98+P1r\n+HB4fXV2dHp2cnl6bf55b/j78G/xcvzs/u3y6+3v7P7tc/v9fWv8cHh9cX5u+W79fm9zeHr/\neP16fn37/3rza+Rs7+x15Xv06v7w7+r4+HLtbPJt8e5+8WjqX/11bH9rbvdo+H37/Xz183Ps\nafb0a/to83h89XX8+mztdH/uee3u/Ox27G/ubvr7evL6bfl6eu9y73L47XPscvp9b+pu7fJ3\n7vZz9/pp93R9bXr1Ze5refdl+GbuXu14efH28Xnlbu18/fN55n326HTq/P/+9Hnye/Jwfepy\n5nr6+3z7fGt7aG5vbf5w+3zwefR2+/R27Hb9f3R7evp563D1b/p9ev34d3H+dvR8bv9zfnl2\n73ftfv74+Pjr8uz48e96+/7+fflxdnr38/V/cO1ha2xudvhp+XN0+PjmcHlrc/32++728+v1\n7nz3/+7teu989fB66/x19GP4aXp2bHlv9HDvfv12+210em96/f/5+/N97P7wdPV49fNs7f/6\n63nrfnLtdvn8c+/7fXhu8G7tbXb5//xs+mxz7f317XX2/nx8bvRn9ndp73n7+f72cX52d/z2\naex39+x5527s+/vu+/b1+nr7bH1ycGV2bnR8+fN56Hvs8/7w+/N37fz4+PZ+8/bs6v7yeHhw\nYHlib11yY25lbHf0/e/98fH+6O717/Hleux27fR253nxffT3d/zvfXptbn1p+2X4cmT/Z+9r\n+X/8ff949Hj7+PXz/fvw9vB/73j3e3L0cXr79u/45vzlf/R8bnpj8GxnfGt3+219fWnqb+Zn\n/vtu5nPpfvHqfuRy7+x77n76+3t6/mn5YvhtZfBn9HX6ff5/cvZy/X358/bt8/vj8+vr/+p7\n8Xn893B3enNucXtkfHB0emv+aHV9dXn1aO9n+/Nq33vr/e7x6vTr4vvp7ffqee3493fzaelw\n/P5kcWRnZGVmaW5wamlteXPz+Pjr7+jl6Obm5N/x4Orv4vHq7vn8fPpsZ2deZGVgYWJbXGtu\naPb9eu328eXy5uze4t7q6On36/fu/W/zdGFvX294Z/96eXhzemV093j07/H88Pj99/bu3fHh\nevDyavdqc3lfaGhfbGRrdXB/efHy6+Xp3e3l5+Tk9O36ePfte3pmX2hhY2NxaX1/+fT07f7v\n7+7m6e/5dHdv+v/veHN5anFt+Xrtdnx6+PPo8O7pffJzbm9jfXx3/XF6b2/+fW3q+Ojs9u74\n5nnx+XjxYvxndG5oeXN0b35nemt77e3t9nNz7ufh3/jm8v7jbPBz8Hxxd/xra/hseHB4dH1k\nZGVifHb87f7w8+9v5u/r3/Xm++/0eel39HZrav5r93D+/2/la3lvYHBpevX6bm34+ub05evs\n7n1q727t5/rsfHFza3xge2r6/n1rWmtt8+Ht6Pnv7ujf7un2/+/6b2xebGb7fWt4b3Ts+u33\n+d/3325ic2p9dnLx9+1vePtsamlqcm5vZ19y9PbrfuTh2dzh5ujs5uvy6n77+X/5ZmtqZWVm\nbmdwXmRgZW7u7+d57ehy8Pd/4PTt/Hnx9f3odvv6a/Nx7296ZXF+c/14dW5z7ejr7Hdse37j\n9+7t8+35bWBeX/bl6eRrYltkcPLu8ubw5ezc4fHi7uPq43n0/1taUlldd2ReW2Jqe21p+uve\n2dbe7ujt4d3v4N7d2/D3ZGtpdXxyYFhrXGNta3Nf/fTmfOhremdg/Gri7fpxfHj53uP3dfXp\n1drW8/Pzf991bV5pX2FZXWd173lsY2hz6/DzcWn0/P3ravrg4O7rdfT69PPq6uTo4OHta3Rk\nal5aaXL3dlxaWFr2fN/e6OPs62R3497P2dz5aH334+Noclpf7GpmV1hfaXVtb3z6cOXY1dLi\n9fj0euh+Z29Zfm3r92lodfdx9HhhamX57nBtbP3d3Oh3YWvr//xjaODg5uhu7d7b1+hraHD6\n5nXvX29xc3R5XGRram9gYF1hZ2736vh3+vXk2Pzz3frm7u717tTc2vl6cPZv/fdvcXRVU2Vn\nZXv97PVvbl1j8frqdXPo69bs7GF13tvW6O/tb2JhXfnv5txiW2x16GJfYe/je2NXV19r7t/q\n4WNy++Tc3uXqa/R46Ofw0uHa8V1qZPr9bVpcb3VraGtaYXzi5+x1YHpk7N/g19zc7Xhpavbp\n+P9fdlj1aGvpd/1t8OT3/n9zdmxdcmtsXVtoVfdu1tLR3PLT1tDY6uHsc3VbXWZfXmVqfGJj\nZGhqeHR0am16/XBm9eXZ8vDt4dvX5OXu+OVpZHBhe2dbXGns7mJpdv74X2lneGbm8PnsYOfd\n1+fk2drjY15v7edubfbv+m5manPw5OrvcXR6dF9ectrkZF1PW2jv7nx6ceHd2+dnYm7r+P74\n6+nudmzw/+Xx6OV74PHl8XFqbHx7bmpyXVZn/W9gYObg6/Vq/t7n6evm3+nk8230e9/1Y2Bk\nZWtgWvhd/Hr6fmr4bm/g9efZ3uZnYeje1vJrYFpmYvN1Zm3z3uf23efl/W9pZ2dfe+LreW9r\n4WJhYXVpYnVU/+Xe1+rd+NjLztTj+/r4Y11PZHh9bFZfVmliXV9j9X7ocHPu+f/d2tbuXflw\n5u/vfPxn8Orc33D65Or5el/pYO9+aP5oaHLwZnp+3O37Wk9XceLi3uN76mZ549bO1dr/WVRl\ndl9bX21eZlJe/tjV1dDye17o6OX3df/zbmhkcWh0e/p+ZllUWvp859vd0eVsbeDV1e/rf2tl\nZWx3YHdy8O917N3oaFtS8uHp827d+O1tX/3+6nhhT1Ro52prWH3j/+x23t/h1+nd39rd7G9z\nbu9uXVJYbWr1Y1pnX+He19je1fVwc1doXmXc5OxnXuZ83e9j+OHV4PdOS1Zl4vxrYll5ZHBy\n9+Xf5d/f3Nnf8OnX2tvc8u5r72Vk71ddWmBfW2xcYfBTb11jbVvsfGZ9Xtra1tPe7eTXxs7P\neGb2bHheWE9TXE9bZG7t8+Nr+eLa18vk7v/6cP7wem1eWF9jX09dXmnu8OR2bnvm2MvW6t/o\ncnRy7Oj0/X9tbltvWP55ZmlW/d/d7f5lY37waW94bfHy4fHt7+fd3tvx6+rjbmFSVmHw6Xhf\ncv/xZ/Lp49zc7OzvbGluZXzs8G5wV1lYYmDlz+PsZEpO2LzQaUNMycvWX0lqZltgV8e+v81G\nR0ha5uzX6tnG1GNMQ0lOamLoxcXNemdTW1hL2r7CaUFQ28njQ0duzs7ldVxaV1Ps3u9gUtbE\n2kk/Vs3CyeNueeD0X15Z3MrL6EtCSd7Ldllo49XdXFnh2G5s8fZeT2zn8v3w3dzkWFheZl/8\nyMt1REp4b8jNWGVN38fiZklQ39TGzN3SVkdPXlB6wLq+TzM4UsvcUnHOxcpvRz5Qdc/O0XHy\nbvZMTFHuyMLJ3thdX2J+339rbPjY6lRLbNXWan1n2c3bWz9IYNvE1nj7XVBV2vVcST/BrrpE\nJyxYxbtebrWutlg0NETVydHc4MnM809CS37Jvb3E0PNfST9ARlFMTVFXWlZa8tzo58zExNLr\nfffX1/Te0tDvTEZRadPO3+1bTEdGTk9OWWzazM9sVOrZzdHPyMnJ2eHfb1dOW977al9Wd1RO\nZnnr63VlUlJTXeJaO82tuEsnLsmuuD00yKuu3zUySs7MelrgxcPNaElNXtTKy83c3ehdTkhb\nT0FESG3X9l5S8+dmWWDb09XraNvS3XVi3c3Re1/y0s/rY2dsYk9MZPLb7lpe495oVfrIyu86\nPruvulIvNFHSyunKuLbBXDgyPUxT+NnMzfJcSkVNatfDvb7H3GVRSkRHT1thfN/Z9FxY8dfX\n4drGwM92XP/W2Ozq295tT0xaeOtvW2ZfWU9TWFhRVPPY4VtOa8vE8VLexMlQPtC1tcU9NDhD\n58e4t7zJfj8xMztX0sjMztL1Sj5GV9/AurrC0mVQQz9ASXHp9fza3XdYVeHTz8/Hv8l+TlvX\n1vxr6NTqTUNKbfNbUVp1WUhJVWBPVdPD3UVJzru/Z1nFv1ZFxbG03Dw4QUhM87itttBSPDU1\nNz74v77PaWFMPz1G/r+4vMXM4VVBQEtPW2J74NTf/e/t4NnazsjJzuX+7v9navbd3W9VTUtL\nV3d9bV5ZU0xNUl7u3e313tHrbODRx8jUSkHDsL1aRmTeTDw/xbK73traSzc3PEv+6trW0HtJ\nSVNY5s7CwszT5GBKRk9ZWmR83dfq9XPt2trVy87d/e7t8Pn23NzoY1dWWVdWWW9rX1xaV1dP\nUVzp4XXmzdRn6snI2/jaX97Cydz231pDP0dsysnWzb3OSj5CQz1EW+HV097s7XpZYtvNztHP\n2HZaUU9OS0xY7uDo7tnL1tfR09Hh3d3t92zo2vxybGljT09UUmJdUFVablxRVmF96Hfm0dj6\ndsvMzuTeaHXCxNBg9uZuSURQ1+Ts4cfMcVBOT0BDRk5a6tza6+To29na0c/P32tYVU5QSkt3\ndXB+6NjT2dzOxs/b39vZeftvePfx9nVhZldUVVFaX1dVT1xcWVtv8W7p4OLr3dLLztrP2mnI\nxtRy+tPhZD4/bOZqYdjE4fxcWE9GSkhRZWFiXWx96tLMxsfH0NjkYFFQTEpGT15dfPXWz8zM\ny8fJ1dnm52lq/WpnZW51aWJiXFlZVE5NUE9UWV1k7vXn3P7jz83VzNDY2Hjrxc/249jmb1xO\nVV1bbd/q9ez9XVRUVFdSU2FeXWprefjo1tTMy8nU63lfWVRQV1NUXWJndOPQzsrKztja39/l\ne11icHVmYeltbHZqXldZWVlVWlBOXmxbafHd1Nvc1c/O0NjV0Ndt6nb10n5XVlpnbFxd697t\ndG1ZZlxiZlzo9HRtWFhgYl/l3u/g4ujb3Xzn2eBmaX1vc/thbvTe3u3o4t3e3XXx5uLsdmVe\nYWNjWFVcZH5pcnRgYXN8dezf6u5z/eT68vV15+jp2ur/bv3s+HHzders39/l6P39cGN0eGpp\nYWxkXWNrc1lWa/1kaGZ98uPh59/p5+3wd+763+Pp5HFn8+Hh+2/08/Xm73pr+eDk5V5bbF9Y\nXm79bGNfZW7t49rk7u3e4frx//78d/Prb1dcX2tnbe7g3+fh8enx+/J6WmRlZHfz+nlvb2Va\ncHV9aPDi5XRp5uva7u3j29h/d3tnYW70+WteYmT5+eL/cvH13Nv+8Gr+5N73+Ot5b2pqa2Nj\nWmNyaF9e/uT2au/z2+TY1OTna2P19d7p5n5aXHV1X2Bkel5dYGdwYn1y4Nnf8errX/Hi29rv\n7O3f6P1tZGBg++72dFls52t3+XZ2bHfx+O314+vn+Xfn3uRza2Zv9u/s7GdVYmxudmZpWmtw\nd+x26/T+9W/f2d3vaO7k29r4bXd96uZvXVJfXFzuePXe7mBf8vji3uDuXP3b1NpgW19lZXlm\nZmtx+dvV4Pp23N3bfmb1bW5id9zobV9y4/1WblhXX1fs3tzvcXxve/Dc5fF5V1zzcG/9bnTg\n8N/b2+t3bd7V3O7n4XlcU1JbfX1kUl/e6vD7a+3t39ja51pfdOnsb3P6aW5nX+1qZnB0bOjm\n7W/ycN3V6f9t3+Rz8+Pi5GZOVF5pYGVkevB/dPDo4eff2Nzk7Xjv7V9w7nj3YGn5fV9fYG/f\n2uPxYWhs9+t3bPjr8mJabGlmV11k++jo4dp9cuzd1Nfz6Or872p78GZd+ezh3vTtZv3uY27i\ncH5XYnVjZ1dh39/ob1dcbO3o6PX+4Xt/49v/Z9zU6G1YXXtzePvq6Xrm4OxqUm3e5HtkVlH5\n7Olqb+rh3d7s3t/6+9/kcF9qXVpbWGT3fH5hWV743dz189/f3fh87/F553vv+OBqYGti4Pnq\n7nJg/PJpX2D+2tt1fmpy6uv14t5rW1NZVV5ha3Lc3Ovb3+PT6d7lde3d7+B4X19TV2lmbVtv\n7vzve+fqeWT6/Orm5u7/ZmRheu57bXDr3+pfamjk9ufR2tDwcWdu42VfXnRmc2peVllg59P7\n92Fi7vd76t/w3+Lb3uHY/Gly9XBcW2dvbGFb+W/5Zm7tfXB47mlYXtfXaNXL49xx78zmVGPr\nZnNcZuVtVO/gflti2fplcl1eXlz1XvBnXNzZ69nv49ze4mh72NzV7mLvXXJgft90SXHVUltc\ndPdjadHhaWXj29Vxcdxy3tvZamtsWFZqYFVNZNvt69pQeOVdxspxfE1rWkzI4FTm9M/SUvPb\nZe7T1uVnYmzaT2D0V9TMT2fjVF/MZ2HrUFtuYl9WXfTm3dLRZ1/x4t/b9e7k6uvwaWrNfF3Z\n2V1f415XVlf/4nJjdfJbXk9Y7f7Uylhx1+fr3ezn2HTl101O29j53dZz1ndWbl5IZ3lPae1N\nTuH6z+ta2t75zdJ04Gxha2VydeXT7NXX5+XtXldZXfpaXlpaW1z4Y+bsx8tU7NhgaNzga19c\n4c5YX2Re2dT92u5L+NVWW29W+95cZ+1cc8t7Tt7u59nue9FWVcfOcvvz785oWeZhX+9KatdN\nWGxWWHLM5WjK41vtalh77Gr/a/jXXXbTZWPa11lZcVr7dvfWet7Q62bKzG7Y31v9WVBWSEtZ\nZV/c40370ffIw/hvzONe/tpYV05MTmTt397bztjNztRdcHdXTU9GPkJNTlTq0NjBtb29t77I\nyd1YTEU8OTc3OTg/TVVe2MzHu7e6ubm+vMLK7FVZRUNDPztCSz1F+UXcyU9vy1Tyz+nNx9TE\nwMy/xtPe72B+YlNFPkE9QldXW93MxcLHwM3n2XFJTD83Oj47P0RKZdvJv7y4s7e3tbm9xM/S\n5l1MQEJFPT9APz9GU0JJ2Et4xlJnzUx50OLMwcvDwMq/y/TY3l5wVEBDPz5FQUtZaNrFw8fB\nvMbHy/FeVk09PTw4O0NJWfDSysO6vbi2uLq7ws7R7WJPRkdBPkI9PUtAOEhlQuHaROvMTdrP\n7M3IxsO/zMHL09DvWGRUT09IR0NITmvZzsS/v76/xtXb9VBKRTo4OTg4PEZNa9fKwr67t7W0\ntbrCw8zw32BMST8/RT08Pj48RPs+cNQ/Z8pKaMvf4cHF0b6/vsTJzuBb41lLSkY/Q05SXPvO\nzsK+vcTIyd1vVkM7Pzo3OjxDSl911Mm/ubq3t7q6u8TN2GBbWUpHR0A/RT9BUEs9TvdG1W1K\n3dhN7dvdyL3LwL3JxcvT4uxbW0lFREQ/R0pU59jGwLy9u7/IzuxVRz85NDY2NztDU/PPxr+6\ns7SztLe8xcnibFRHPj8/PURFQ0ZWTVT2VEHi39vlVG7kZWzz48jAw8i8wcnK0X9pVk5CQEFD\nQUNPVH/OwL65ubu/xdD5WEc9ODIxNDg8QVTrx7+6tbSys7e4vsnVXU9HQ0I/Pz9FTlBaX11f\nal5fSUT33s5QTWvic/nnzb+9v7q6wsvd8GFORz86Oz5FRkte383Duba4ur3Dzn5NQTs0MTEy\nOD1KZtrKv7eztLO0t77L2vBcSEBBQUNFSlpga3zn7mxeXk5MTkJBXOPKb1XtzsvO38K4usbJ\nw8fkTUZLRT88PURLUVj+1MfBvLu5vMHN42RMPTk2NDQ3OkNTfdDBura0tba6v8jZ8ldLRkVH\nRUxQZfHl3ubp9WRPSEhHSEhHQlvZv77Z7dXFwtL60r6/y3ljdWlPRkJETkxJUGrn19fOxb68\nv8TK1fJUQj06ODY1OUFPY9rFu7e3uLq7v8ffYlRVTklISFNcbfvy4uboZ1hOS0hISUpIUGf7\na9vGtbLDYlH9ys5dTmbJvsV2T1FfYE5BP0hVamdXaN/LwsC+vrzCzfVNQjw4NDQ3PUle3cnA\nvLi5ur3Bydl5V1JNTEpMVXXs3+Lt8XJmVE9MSUlDR0xUb3bXztjJw7u2v+1ERFDk0t7m2cvC\nzedPQUJGTkxIQk1f28vOzMq/ubi/1WVTS0A5MjM2Pk1f4NbKwbu5u77GzNHkcVtTUVZfbfrt\nc3N4+vxcTklIS01MR0pVc9bT1tvx1sO9uMJfRD1Ge9HNzM3LwsTPdUk+QEVLUUtKUmnXycjH\nw8O+wM14Sz86Ojs6PUNKX+LPxcLAvr29wMjd/2NgX2ViYW15/O/3cWRWVFFNTktJSUlPXW7v\n4uLX2XXMxsW802BZS1XbzsbCyszM1e5cSj9BRERNT1BXWHPXxsC/v8LIz/1XSD09PTxBQUpa\n+tXLxMG/vsHFy9bjc2tnZGRvaGRlXmNdV1haWlBOS0hOVFpfc+3Rz+bWyMS9v+JiT0lm2s3I\nydnW3fFrW0tGQ0NHUlhebG/fzMe+vcLG0+5cTUU/PDs8QUhPbefVysS+vb/Ey8/Z7HpkX2Jm\ndGxtdHRzYFxcV1ZSSElITVxlYW751dXbysjEv87wYExPbdjPxszY2ndtZFRKR0hNUFtaX2v4\n0M3Ev8HAyNRxU0lER0E+Pj5EUWjsz8vEwMDExc3U4/n2d3ZsbHFueHt5eGVcVlBNSUxKTE1M\nVmn+19LXzsfEv8LU6V1SXPjazc3a5XxqXlhVTU5LTVZaZ27y3NbMxsDAw8/nXE9IREVCQ0FC\nRVBi59DMxsLEyMrNz9Xg7v52du/4eF1bW2RnWVlQUVFNTE9PWV1s8d/Wz9PLx8bFy91sXExT\naevX0Nrk/mplY3RoZltYW1lZX2t14tzPysfN1u9jVVFHRFVVS0U/SGrqy8bNxsfPys3c29bf\n1t37ZVpeXGR0X2VhWFFNTUhNTlFfZWvr3dXNzc3Rz83P0NjffF5WV2fz3N3f3+Hs6+9pal1b\nUE9NTlVcanbr5tnV1NTT29nj9XJeXVZUT1BPWF5m8Prf4dzc39bV1Nfb693e3OHndmhfWFNV\nVFRSU05OWltfZ2r0597Z5NXRy8vM1dfb2NjZ0tvkemdjX1lYWWBcUkxKSk9XYX1++uvY0s7O\nz9TY2/Xxc11US0tLTlFVWV5p9+fYzsnGxcjJzs7P0dx4YlZWTk1MSk5NS09NWmJicn1z+3zg\n2tLP1NPc3uHWzMrJzNrpdXFra2piWVBIRENHUVp183rv5NTQz87Q0tjd9GxYTktJSUpOUVZi\nfubUz8zEw8PFysvO09Xf8GJVT01PT1dNTUhHSEtUWF1aW1Jl7NnOys3TzszJwr+/wsrZ7vh7\na2VcTUZCPj5DSk5o+X/n7NzMyMjLztXl/WpaW09HRkdNU11s/uTh0c7Kx8jJx8zP2dvd4eR6\nXlhOUlJSTUxIR0pGSExPWGBf8dvNysrO1M/LxsDAwM3V5nbxe+zoeFVHQT9BSE9Ya2T69Xze\n1cfK0tfg5vZtW05PSUZHS09db+3i1M7MxsXCw8jIzdLU2+j1ZF1WUk5LSEREQkFCREhNU11l\nZ/7Wxr+/wszOy8vCvr/E0OJvX2VjaGpWTUI/PkBJTltjYvfr2dLMyM3O0Nra6WtjU01GRUtO\nUVZec+LVz8rHxcPExsnOz9Te9mVaVk9LTEpHRUNHRUZKS1RaWGxy7s3Ew8HEzMzLxsC9v8rd\nfl5XXF1jaVdMQkBARU5XZW7+bevfz8zNy8/W2ef8alhPRkhHSElPT1r23NHKysTDwsDDwsbN\n1Ob2Z1tPS0pMSkhEQEJDSklPTkpSUVzey8XCwcnIycO+u7vCy+ZyYXR2b2dUSkI+PURIT1hb\ncGnq3s/KysnSz9fe5WRbT0VHRUZHRkxWbuPWysnFxMG9v73Fy83m6PxhW05NS0dIQD9AQEVF\nS0ZLVVhl3czGwMHIxsTGwL29v8rZfnJ3a2tdVk1CPz0/QkpOWHD87NvMycTHx8zR3O95WE9G\nQEI/Q0ZKV2bo0s7EwcC9vry/w8fW3fByXlJPSUhHQ0E/P0VGS0lJT0xNfs/KxsbMzMfGwLy7\nvcTO2Ozw6np/Zk5FQT1AQ0xSXVxr+OHUzsvKzNDd6HNeWk1JRERFR0hMUmzm18rEwMG/wL+/\nxsvX0tjd8GNTTUpFQj4+Pj9EQ0lGP0Xzyr29yv5QVWvEs6uqrbXNUz02ODtHVGZuZlRPTU9c\n68a+ubzG6UU8OTtASFfv2991VkpNW+TGv7/C0OV5/tvYz8fFyNxxWWFtXFhYVkk+OTxGZm9V\nPVjLubPISzU2QNCuqKu21m1HRkA7RVTTwsXbTzs/R3jVysC9usHrSDk5QEhcZu53YldSX3vu\n4uTOxMjM6P7p5dnb1NTb8G/9a2xnbnZbRz1AU3jZaDs/fMCwv0oxL0HHrq23xd7P3lJBNz1n\nxLvEbEc/SFV54dDFvrzE9Uc7PEtYWFRQZunmaU5MVtzHyMvb59vb2Nbf4+3f2Nfjb2Vu5/5P\nTEpUY2VPN0TqwLPZPC4yXrqttcfN2cf1QDs4T8m6us9UREZeX2Zq2Lu3vNJJPj9IVlZPTWXY\n1fNJQlDuzMzW2dbQ1+X96dPU2uzu3+B9ZfjkbVJJTWzrRzlP3rnASC8tQciztcnHxcbRQzo5\nSc28vc7vWk5MSElo0b65u8htSUNJUk9OT/bU4FZGSl/h6e/ez8zS/W7e1NXf9drRz/lZXe7W\n+1hPYf4/SPbPwGc3LjpoyLzFxrvAz0o5PErizcTGy81rSUJEWuDKwLy9z2VJREpHR1Lw3fRY\nT1VnXmjt0cvX397R1fb44M3N9mn+5uBwXGT14V0/U83K4EU2Ok5bcdK+trvOVkJBSE9T4sTD\nyuhnVk5NTPDEvL/M3fJrUkBAS2r4XVJWcW1ZWHDYzs/Y3Nfg7dvTzc/k5dbmX19o/uVzVlPZ\nyW5NQT5IR0RQ1r2+yM7aeE1FS1je0dfR1eRfTVRg7NPPx8vX52RcUUtLUVtXWFhWYWxpb9/Y\n2N/q39na2tbRy9rZ1+Ln+PTf+mpeYHx+V0pRV1hQTFT94un/4tPabV147Obre+TX5nNeau/w\nen3f3e5kXW3veV1ZXWdhZXH28nZz/Onq7Ofg4N/q8Ozr7ufj3dzf5Orr9/Vvc2p+eXRsbGth\nXVxcXmZx9P34dmxvbW9y9vTz+O/4fHpuZm17/vX+c2ZqcnP5/P7s6ubm7+7u7Oz37f3t6+Hn\n7Pludfrw5ez49X3w8HZ1aXR89ez57n56bGtobXl7dvxvbWdmYV9gYGJsbXdya29x9/Dt+vf8\n8fp3+fTo3+Po6ufk5Obr8uzm4d3teW52fezqe/1ue3n292lpY2RpcGpramhxbnNrbGNrcXF/\ncHr+9/53+PDs5eXt7Pj07np+bHP67+95cV9lbvvu7ezv7OPk/Xd0/+/v6vby+v/6ePz9/PHz\nfW5vb/x2dGhoffT8+G5reW/6/nZ+efx5cP538Hl9cXZy+fDs6/d6cX/77Pp4fHTvd35uc/13\n/PLu8/bu9vd/e/f06uXp7P98+W3+bXJxc/huc2ljaWJue/Pp7e///nL/9/Ts7uzw/PP5+P5v\nfPtz9m9sZmhrbGxvbnN99/rt7ezj8ert8ur18ebq6XZxa2Vxcf/h6vF3eGVpaGZud/Dj4HNz\nbHP5/Ort5+tybHRqVWJz+Nrobmd07O7tfPLu7/B9bXNtd373+nLt8379dGpud/z2+/X/9/X2\n6/R3/O7r3uPn9n1ubGdoZ2xf9ml2bGV5/Pvl9PrvdHl8emzkfnXcaPXv/ep96O/f//TrYm9d\nY29n72Ll3mXgeOznbe135nf+bnb++W7odPflbGrwbn51ZONb7GL9bXboX+d17+lj5P5v4HV+\nb/VvXd/+bd956+1d++N4cNpz6OVw4Gn973Bd62v74udibf14+1/mWl/nb13eaGlt119hzGhm\nzWNe3Fxd4Vf/7lXP9VvQXlfOemTQ/FrU6Vfc20jN0k3NY/zPSeflVd5vZ3DiVFvVbW3s7Hbi\nbm7qVtlpVd5uaNVfS9R3XH7pYdtw4vBz1F3U5VXe60/IV07EV1DGWkq/ZEfD+UXJZk7CU0/D\nVFjNSPzGP+DFRd/RRM/0SthsfOvuZerZTtzMScrqVdda3G9Lz1hezWraZ1Lc1k3743vdXuhe\n/dNOXs1T6NxFztk8w9E7vexDyNhF1M1I1spGz9pEztpG389H68lMTsteTspjT8hkS8VfT8lP\ndMhOY8hQcdRO1uVK3M9N+clC9cFUT9zh5+BQWc/XTmjfS8VrS8ha7NVM5OJbbfdd4dlJ09xP\nzvZPzntb0m9m3Gn4bWTRVGTb8eV+WODMVWzgTuzKRVHN2lR7Y+bs+/ZLz85Bz9M/zNJOX81g\nYNle7/f0+3Xb9V7g4mdlcu56X3Pg8W5X3NtH1cxHa9DicFpl2+ZfXm/P1VZf0dxR9uBoYt/Z\nTFvU21Vc9O7l8E59xFhK6dbOV0TSx15JfNJ5cG95/dvfYOzcWnTPX1Tc5HZkYNncZF1y4+55\nXFTcy1pO9PXlclDmxvdL4MnrTFLQyWRBWsPMT0Rzx9BRSOPJ3llL9c3qVU7jyntIU9HNZlFZ\n2M16XWfa3fxv+Prs+vDw+Otpfmf/bGn4bH/7dHR7Z2t5bfT+/Pl6//1++Xr38f3offTt8Oz2\n7vLu9vV4fHd6cHl7evl2b3xpc3N7eW73bvp5dfL+b+t9+u1v7vv75vL07vl99Pp37nj5c/xq\nd2lpc3V78v14+vl0fPl2/nF+/3x//vl/7e/4/vbz/vJ06v/47nbwenH9+mV8/Pl9cupx8G95\n/mr9aXz7bfV1/v15/fJ7/vrz+3/tdOhkfvts8vr/7e106/X47vn7efD97/Rs8nN3cvdva3hn\n+2z6fHLz83xy83dtd31u7nxy9f7/eO1v+X57fPf+/Pn8+ez6/Xx+83z7+/z993L0dG/+bvJx\n+O7/8vP4f/f0/vV2/PR79/Zt7HVwfWT4ZW7+Y3htfnVufm94//l89ezyf+z96/h/5vH16fTs\n9Pl+cPN8fPv/9v7wfnH6dnxwb2pmbmt6fG/3cn7v9fj3633783nt7vn29O16fnl29Gf+9Gr/\ne3B9a+1ma39r/nB36Hfu+vrxdPFt8v186vzue/Tt8vru7fT67vby9nLvd3Z4cHlybP5tfW12\ndWr4Yvhv9nzw8/R6fn5v83T0+/5+7el77Hx+52fp/37s9ex3fu7+7W9o/nF4/XX6b331dOht\n8W32+W3paf/taPNsd/Bq7nZ29W5x8m/vavD77u136ft35nHiefftcfl5dXlu/v91+G129m72\nc/v4eu907Hr09XT2aHlxbXhsdP/98n589Xf38/rv8/rtefFwfXpweXnx/fbt6e748O357/nw\n8v56fGlsaGdiZF5zbXB+afF17vr28ezl5e/q7e/nfOXt6u/77ml3ZmtucG5seGh9Zm5ubnb7\n7XTt+vnvdutz5X/57vf6eu9x+P5+7u9+c3b97/Ts833vePz9fXprb298a3ZnbHlm93Pv6vfx\n8utvfnnseOxpbvhv6Xfv8fnlfe79/vp2cWx2b375e29+dPXt8+v26O3v9Wz0bH/3b+t5a3ti\nZ2xrcPzubfZu8Hr4de/v4P73+nn8e3v4+O3y3+9yemP9cXp0YXhyb/piaWRufv3s7GdhxNBP\nTlvLw3BTZ83I/ltdbff89WRYWGzo8W5pY3vrauh0a+1rZF5fbm/iffDs6OT139bf6HNp6vB+\n9u7nfWls/GxfYVr3eOfrd+/m53xhZf34XG1kXGf+2ubxY/3j23tvZXbf7Ol76tbT22dZ+PZt\nYlZXfmtdZXXtfGTy3OXsedvR2uJn5+dvUVFXcXNbVWPx7vns7Ord3/Hk2/DqcPXs5vppfPfq\nX1/f1epfZfHc5FBMZ3Z2VUrzy8ffYDs5vK29WT9IXkY1OtCussK+usdSNC41QUM/S826v87E\nvbm8xsrP30hAPjo3OEJTXl154tLe7NHCvsnMzszWZVZa5uddTO3IzVU9RF5cT1BDOlW6qcQw\nKjrT2UVvqp+qyl7lezQpLk3K117Mt7fPU2XR0m5aeORjSEVIST89P0xZX2nZxb/Ax8zKz+xm\nYeve4vbd0NHoaW7je1FNXWRWTk9YbFxQaFBI27yvxT04Tdl8SumxqrbsTF1NMSw1XcvV78i5\nvvpGVtfTf+7MydtZTkxHPT1IUVhk28XDzM/Mztpq+ODpbXHYzdDj5uPpY1VVXFpWWWFYU1r1\nWD5Xx7S/QTE97N1S/raqr85MTlE8LzVRxsDOy7/E50lFYtfV2MzEy+9NRURAPkJOaerf0szM\n1d/k3eLg6+3s497f3Nvd8XRuXk9TXGttXVpcYGZFP3nBts49N0rU1V3Ys6u2e0NHSjozPP++\nvc3PytFaQUV7z8vNycbPXEU+Q0dDR1Xeztjs6Nna6nHp0tDc59zT0dzk4uP4YFxXXGNcXmln\nWWNHR+PMw9pBOURd6evLt6+21kpAQj06Q37CvsfO1+JaSEtm1cnHxcfSYEdBQUJBR1n93up7\n593b4eLWz9Ll5d3Y1t/aztDfcl9iWlZQWW5hZ1tDTdrT5FY/P01OVta8tba+z25KPz9FVeLP\nyszO2mtVUVn/3s3KzNx6XVVKR0RKVFlsduzf3tvZ19fP0dvb6ep9b/HZ1eVyde7/WE1SY2lm\naFpZ2uDq/UpHWU9TatzDvcbS61tOSUdMcOHZ2NDQ1+5o6M/P2dzOzu5bT1ZRRT5HU1pPT2zW\n0t3d2NHX6vHVz9Tc29jW6Whm6eFuXVxuZGFUVFpe595eV11bZVtSZNPM2uze099+W1lu5vNq\nbfjt/F9h59rj4NjYzeBxZV1dVFBQYGJYX29sc93a2uPl1uvc5Ofa2elr7uB2ZWFl6mrxZFti\naXN7euvr8Ht6cnJkYmJjcWdnZ3Zv8PDw4t/d5u36fmtoZGZ8cP7u6+zw5efn7PtzdPx3d3f8\n6uV3+fTr6u7r9vR6bm1rb3r49f78dG5483xsd/nt5fBo+mRpaF5o/ODo9n939nttZ2BfZ2Fk\nYm7u+uf29evp6fBu9X70+/bq5uHf2d7e63/reWz07+je5/l2bGheY2ZebG5kbHr77Pr18Ozm\n9f5mYVpiXV5nYWphZ3Pu7eLv6Of19O3k5Ofz6uLw3+B17HhnbnVue+j28m91/OLyd35+/Xtr\ne/BsanPqe3L0/evxa/78c2BsZmVkdvPt6OxmcvDvefJvW2DUyENHSG+97drP2cxQW1/591TO\n1MroXM1dTk57319ZSdjMZWX929lkTnhrVW3t3tH24dncaVX46Wtdbm/v1W9d0m1k+Vdse130\n1+Ze32191Fpd3f/g8X/973FZ4W5VZ/vvfuv50dVkWubc8etHZdvrcmFtz9XuWnfuXl5LXW9d\nVfzf5v3X38/NW/DN323dztpqU1n9805LfXpRSPLSYlBxzsxcRuzD0llY58jdW13q/Vpv2Nte\ndc7S+lxW3uRQSmToV09X3tHnadrCzFxa3t7iTE3jznlLV+njX1Zv2thlW+DsYl9o7vV/4tfN\nblvw3/pd/PrZ0nhf8tnd7eJ6XV9LSVFaZmBg5t3qa/re2eF66tfN7V/+7fduYV/u4uZ55tzb\n9mNUVWBeZl1p/vtoYnXm5drc2/FcZvZ89vTZzs7pXerYf1ZQ7Nr5VE9p6GlPXN3fX1do3fxY\nYevX3u3n19BvV+vd/VRo39neYvDPzuZY+c/uT0hPYV5MSmrb71xY7t3ubmDJwcPyVP/z/vJo\nb9vR12Zm/3x1T0pZ6WZUYf3Ye2Vc9M3U28zJytpZTl1iSkVJTlJUWvzSztXKys3g+np73m5Y\naH1oZVxq19NzT9nO2mtOaXPnTUhg1NdbZNLF1GtYaftbSU12+1tT58nGwb/AwMx3T1xdRj89\nQkI9QEdeaXTez8fJzc3IzNfTz8/Z7Hno295oaWheX3xZXdniW0xIR09VWFjZyM3Q0MjLzeNk\naXRSREVMU0la4drcycPDz9HP1PhIQD9HQj1CWmVTZ9bIxc7X08jHztbNys/Y5+vi3OVydlZX\nZ+9aSElDWtPcU1FcX05ESVjV0NzRwL7OXd/fcVdTWlpiUE1Q+O/gx7y/xtDed1JHQEJFQkFL\nVHV8b9jIw8jMyc3M0OTaz9rZ1+bnYmloWlpOVllvX0pJVF5VVNnM32Rr19xNQk3Xyd7myr7O\nWE9dbltITlz+Wk5d5M3NzMzDxsbT7WpMSEI/Q0xOW2js8+Td2MvMzc/JzNHY7d7+dXnU2N9k\nWFFOT0pdZGdPUVdWTExe2V5Nz8LHclRq3v9VUc29w87Kw9hdS0lOTEZGSVdeW2zp0cS/vry7\nwdH3Tk5HPjs/UFhOTFl23ebc0sbI09jaztbfedra2GT30druTlho91NOSlVPTEtJVVZb/tzf\n8+lnyb7IaFTzbU9GVd3Dx9vMw8p5Vmr7WU9TXF9nWGLu19LNwsTKzd32VkpPRUJAQEpaVV95\n595v29fMyNHd2s/M39x19d793vjm/HhcSldbXF1PTVpJQklRdG1q9s/L1tLL3sO8yM3T1u5f\nTEZv1e9Y6NPZW0lUS01FTmPh29/i53Fl48vAytTc2NprSkdITk5UX19gdPlzZV/dz9Ti4c/R\n2vJ+2dDNzs/uZGlgVU5LT0pGTktOSUlZcH186M/IzNDWzdDIyda9vc/oa1ZPTUZP6Nri9N3b\nY1NSSkxNTVRTXWt9cP3Z0c7LztLP1d7wXVVLTkVFTk5fZHTt3NjdzsfFxb2/xtltX3RuVllj\ncWNPT0pLTUZOU05RVlpXV23bztHXzs3Ixs3IzNDPZWDNxst3VVFmTkFJZs/vVVRYWUhPX+Xd\nU05daHVr487G0vDcy8nM1cnbeU1AR0VJRklLWGHs283LzMrPzsvIyc3Y4u3wdWVxblJOTk9K\nUVhRVlldWlpjX2hrcOPi4tXm1NTh0tXO19Xe39zT4OreaGhnY1n532ZfV2psVW1tWVpNSkZK\nTllzeODV5d3X18rHyMnP3O1mW1laV1xbXFRNXXXz3s/Pz87Sz9DT29vwbVZdV1ZbVm1ualpP\nT0VJTU1YWF9lX+nc1MrMxL7Bw8vMzc7Y8vPm311XW0tLSURNU1RSW214ZWZ0YXbj69ny+/hq\nfWvyc+PT08zn3t7R1OX+Yl9XXVVQSUpNXu7q2tfW0M7OzczSz8/U2u/yblVPV239Zl5LRUBC\nVVRXVExOTFNW7dPJxsrHzcrHyL/Exs3S1N3ic3RZVUdESU5PUk9mXVtOWF1nW1tYYVpXbG3e\n5tnNxMLBxs/X7N/zbfpbUVFRTlpvdN/c2dzW2+7i7dnNytLsZVBMT0xMUV9PTVFNXnP57O5l\nXllUWF3+3NHJyczLzMrGysfT2P5iXFBt19fr4GBKSEpSZmdWUlJTTlRUYWNbVlZed3rr7uTW\n09PLvru8v7/J2v5pYVdJQkRFPz8/S2rk2s/R1tHYz87c29/f2/z0ZmdwZmlXVU5PT1JZYGFj\nZ2x29O7f5OPf0tbe3dnP0tLP1c7S9Vxe/19dWFlZUk9VZX9YT1L97WNdYGJgbGR26Ozc5OTc\neebiy8C/vsbK0WVhWllTSEY8PT5DVG/T0M3Lz83T0szRz9bo32pfYFxiVWhZWFhNT0tMTEpW\nVlxcavnbzcfLx8vJxMbFytjb7Nvy7mF83mZXT09OR0BGRn1uV1BTb1xXXfXN2/5qY97Z1tvR\nx83R1M/Fys3h5PlPUGpYSkFFXWVHRFPc0GB8y7/IfFvQxNBqbNTN/U5Y3dZsTk5eU0c/Q05Q\nTVFlYH38fs/Pw7/NxMjN4djEu8lu7+3TyN9PREdFRTw5Q9rMaFFpdFM/Pl7OyuTl2NRbTU31\nyMK8vbzF2mxcWUpLYf3tfFBj2O1HSuTGyF1S38nZS0rZxs5eUnTlZ1BZ+X1TSklcWkhKUlxq\nZePRzczUzs3Q08fEyOh5xsbuW19efcPVUDs9Q0lAPFC/tNBSbsdlOjND1MN9TWzL3EdHbMK9\nwMG7t8D8Sk1dTklSWv33WVVBQE1q1NnTy8DIaGBq0s/dc+PKyvBJSlJTRkJIYXJQSkZSW2Ln\n1M3e3uLOyczSysHX3cbTXmLfxb/sOzjJu/A8NktvVDI22bm6Ykdq0N5HP1bLv9hceeTeX1Zf\n2cG/wMbPd1NOSUZOZOnb52dr1eVWSlvLv8VhV9rM9kRCYsvMZ1Z7z91ORk3+aExJXN/uUUhT\n6dLW5trMytPu7tTJydRu5MPM5EI8VszDYjg8xrbHPDBC18hFP865u3VARF1pSUJlyMDXWFlu\n7e3228W7vsjZdl9TT1Bh7WhhVk9U/OdXU1zTxcv1T+rS3l1PctPab1Rd7u5wVVllZXZ2W1NV\nZW1ea2fcz9jf69jLzM7P09DXeujffl9LWeHdZEhASd/D1Es6Q2frU0Fnv7e/8lhbbV5UXXzX\n2N/obVFITuTIwcTPzc3bd1tfX1dYZW1cT0hc1m5ZSmfKyMxwctXr91ls2NnjZ2nn81RGSl9z\na1hRY/tuVVb73M/QzsvP1+bcz9fg7d/W/V9aUfFzW2du6ktN083PTTk/atpnWdTDv9tNR0tY\nUU1Y4c3M2+dpavbp0MjDw8jO82FbV11VWF5qXltaVmhaU2jezNbwX/fZ3WBSZdrN8FlTddrl\nXVln4OBqXlpnXlFVW/rc2Nfe4PPr4d3Xzc7b19ff/1tWbHFfZ2pZTP7Jz+lDQ1BZWk3bwcTc\nV1VcXEJCT9O+z+tXaOr67XnVwr6+xs3oWVROT09LT1hoZFhPWWJo29vV2+XV1df+Wmjl5+p+\nZ/P46fFfX1ZYaXr4Y1NVXnBdVmDYydZ0XufNzdLf4MzFyWlWYPPSc1FSWV3hyN5TOj5MYOtN\nYtLJvtB+Sz9DTGnXysrmc/Zpa2dz18W9vsLNfVdPTVBOUl9v/1tcU1RlZ+LsfdvPyc5vXFNf\ncX7x+mxr7d7fXUxS7s7QeElMYevhdmRb/tXN0ndUVOXNzdh82c7T3F1W3tvO5lJPQ36/3ms5\nNlBP6U9RxcbB2ldcSkxNWuHO0tbi6GtVc9/EwMbFycnVaE1LUVhbWV1TblRP5F1bTVTLyMxw\nTt3bc1VJct3Zak9h7tfuaXV82Nff+F9jd2/k6vV/a/P54etucXvazdDabWTx62dr6m5rUV7Y\ncU1mec3XSEE9VHJjzsO/xXtNSVBVXXPcztjZ7mVfVnfkzcLCwMzefFZPTlJVXF1pVlBOSmfo\n8XVf2sbH209Le87P3VdZfeDffGp3bmlzZ/hhUE1U9uLyXWHr1dPf4vLZ1t7d4t3e7mnz/eXW\n/GZUWWvjZVfm6878Q0I7RmftwMbM22BeVE9UXunOzNZuVFRheOPVysG+ydd7XXplZFlWYF1a\nTlBTZXF232lvfXz4YFxo787O6XJcednV1vB/9fDsZFlcYGliXGj54d9wYl76183P42ZaaN3T\n4VpY9dXU5FNMX+bk18vv5k5GS0FYUnnJzMrWa1pLSUxc3srIz9fyZlhUetnIwsbP4fhtYFNO\nUV//X3RbUlVJUHnax+x/ZmLi7+7669fb3uDl2vdhXX7a43BVXHhuTUBEYtnP4V1ebt/XzszQ\n2NjZ29LfatzkX/zs5XpQS0pP69rZ6Ec+Pk19bWpv2si+wPdNRUxu187d5OLg4XNdWPjPxMDI\nz+xuaHVpUkxMWFlcTkZOVeve3tvv5+vl2Nvl6N/V2vRmXP56Y19d8entbVFTVl5t/fHp7eDf\n4PZ4+/3a2trr2tDZ2nhWYNrP1XxRS21z3NtcTz5JYGFjP0X/xbnC/0xLYm7s6Wj47djO2nVO\nV+PIvsLP4fDl3ltORUxn4N50S0hOa+h5ev/o1dzoel9natvS2uReWm9+6mtrd37sYVNbW19l\nXvPi1dru9Hvf29vQ0tPcfPPv0N3u6W53YVxcUFhaUFl3/v1cTEhFT2bXxsPM23Ntb27x5vpv\n6d3X23pTUmfazc3T19rW721aV2hzY15PSk1UamVeX3zc0tz7Xl/z3trf1djU3PxqaO3r3Ot+\nXVlUUVVYWVVWZO/Y2ehydvDa0s/O09rm6n7999za3eNwdVdOTk5l+t3tWEpGUVtWVF7Vx8HP\n62JbXm197d7Z2d7sZV1eZuHPzcvX1+vt62dgVllpZ2tZUU9LXmnh3G1rXW/g7N5yeOfq3eZ6\n6u/l3uPoentkZWlZXmFubVxYWfPPztPvXmzr1M/T2XVsY3fd2+JseG13d2ZpXVhgX2haVGxo\ndF1PT1Lt2s7M2eb6++Pa3OFx6/PX1OtlU1Ru49bS2t7o9XH5cWdVTlRi/XRZVlZu3+DwYVlc\n/uLX1973b/9+8el/3tvX2O5jV1pgZ2dvX15sbux6cnP95dDM09nza2V+49vg7H3v2uj/UUpN\nVuze2/9RSE1l4NnnaFldc/fe2tHS2vdcVV5/4tve6PF6aWhwf97Z19Pb2e50eGRwcmpqYWpj\nV09LUVxu73v7+n758dzb1NLk3+rv9HB9Znl4fOrud2ZaXWZz6/jvcWBjaHvi8vtdcvva0NTZ\n7G5kbOja1uXo8er8XVJRUGf5+HBbVFVr7OnzeW1+7tzc53hfY2j59fvd3tnrbnJ+1tDU3PX8\nb3t4YV9fZXNodWBdYl/v+HxzcPvm39z29WRjbf31+XVhXnB+duf66eb07Ovf8vp3YGlrde7n\n73Jv/fzo7/jz7vjm497g/GpZX2Tx19zsZ1JXZnnr/npydWtpYlxhanPt7/Lu7efr6fZp6+LY\n0N7xZF9id+f+7WlyYWBmY2/0393f6fxseHfp6uz4bGd0ZHxibmn8cXd9a/Ry7PPr6u55/29s\ncWltc+/j3996cWln+vDe2dzgfntcYW3t29xvfWJkZWFfWmRmZWhy+fj/cm7n7evq7dzl8urs\n4ufocnF69+fn8H53c276fWpmXl5mdfr8b2pncXX9++zn+en06eP06Ply+nJ7e2xybHlycm5x\nbWz8bHzu7OH273zr6d/u6vHy4eTk7nddbWDrfvzzX2VmXl1dYXfu7el/8m5oevj96nr54ufi\nc2dhbObk3ez9bGlpaf5tdujo39/u73X7+vHs9Xh3cnj5ampnaWr1bOtyeXlx+nx49fv06nh8\nbml3dnV9cnzvdu3s+drw5ODn6u/k+OJybGliemt6ZFhgXXp+eWhtauvr6OXs5Prrd3bu8eLt\n5u5vcGB39fn0eXL+cv11b29reX32fHB2bX74/vz2/vfteP16fHr0cPhz8e7u9W9++3V082x1\ncmv6fPF1c3R57+3sdHXs6uTn6/D86nv8dnL4/m5kZmBm/vV+8nNt8Xzm8Ob49+9v+nNo93d1\n+XX5+nbq/Pn08+bv8n17/nNzc/hvdvhqcGxndW1pcW53cPLz7vHx+Ofs7ez5/Pj+/O/68v7x\neHpvcXPt/vR++2pwZGzx9u3sc3Rpcn396e7z8/7n9/V2bn1s7Hz78mVwZ2NtcfP88fp7+fd8\n5Pzv7+/p/el07XdubP1/dPV593BubG56Z31sd3x+8Pt9cPlx8/7p8f7lferu5+Xp6fTq73ty\nbGdua3F5a2pcaGFjeG5t+XPz+/P+8en14O/u+uXvcvZqb/n87+j562pt+nPpfOvt//dzfm91\n+Pr4fG//dXx9e+xx9ftq9mRxbW9yfnt5enx9/fL96/3x9u74/e/t7+33c3lz/G1xZmh2fH3y\ndvv2/Xx+9uzw8+vv5/zsdXv5e+37+nx3bGtua2tuc29/dnt48n/y8e3t7u7v/O/+/fdw+29u\ncWx1a3L8b/D3d/Nz9H327evx6+r67/px9HJ/dntydml4bW38afJyb3h1dfr18+r99fF/63Pq\nc/N8c/Xt+u/u9/Z89H37fHp3f3L8d/pv93l/+nx1/m//bX9vf/x6+Prv/fzxfu968nF9dXV0\nb/5x62vueff7/PT07P738/n9evZz+21yem17bnj8ae9uffR69/Z8fu9o5Wvsd/b3dfFt7nB+\n8f7s+Pv6/vz79O/w++5r+ndy93rtdvj9cfRt/HX8fP7tfPf8f3H6Z3BpbGprfXf6fvt373j1\n6evw6v3ufO397vl9+Ht8cmxseXR1dnD0cv7+be1s7f1373bye/J6+XP1dnj0bO537fPw7vHp\n+PPq+uv38/hwem17b3FpfmZsf2H8a259aPRq/vj77+zu+Oz+5vXx7/bu7+vs8v199Wz3Z/hx\nd319d292bnFuc216dWn8bHv7evR77Xju8X937XXv6Pry8//59fT6/vf2be9ze/Rw+Xh2dnxt\na3f8//H2dvRp+HZy72rs9WfoZfvzbuZw7nx7+3ts8HD99Gzpb+t2+O509Hv5/nfwcP75ae97\nd+9v83Jw9XN79HHq++739O948PF383n3fvx8c/ludW5vbHZtdW9/dP75/u3w7ur05vPt7Xrz\n+XX1b/V6dnxofXBx+nv9d3tzbX9ofnJrfml7bHjwd+/v+en/8fTy7Pzs63T4bu4=\n\n--bODY.pART.bOUNDARY.2\nContent-Type: text/enriched\nContent-Transfer-Encoding: quoted-printable\n\nListen to this sound the same way you viewed the GIF image: by clicking o=\nn it or using the popup menu.\n\n\n<Bigger><Bold>Including vs. Attaching</Bold></Bigger>\n\n\nThe above files are actually <Bold>included</Bold> as part=\n of this message.  You can also send pointers to files rather than the fi=\nles themselves by using <Bold>attachments</Bold>.  This wi=\nll greatly reduce the size of your messages, but be aware that the recipi=\nent must have access to the original file in order to read it.  Here is a=\nn attachment of the <Bold>/etc/passwd</Bold> file on your =\nmachine:=\n\n--bODY.pART.bOUNDARY.2\nContent-Type: message/external-body;\n\taccess-type=\"local-file\";\n\tname=\"/etc/passwd\"\n\nContent-Type: text/plain\nContent-ID: <770050009.26123.3@halsoft.com>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948676130.21002.17@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--bODY.pART.bOUNDARY.2\nContent-Type: text/enriched\nContent-Transfer-Encoding: quoted-printable\n\nFiles can also be attached as <Italic>ftp</Italic> files o=\nr <Italic>mail server</Italic> files.  In other words, the=\ny don't have to be directly accessible to the recipient, but can be made =\navailable through ftp or a mail server.  Here is a file attached through =\nftp:=\n\n--bODY.pART.bOUNDARY.2\nContent-Type: message/external-body;\n\taccess-type=\"anon-ftp\";\n\tname=\"README.ftp\";\n\tsite=\"199.35.253.5\";\n\tdirectory=\"halsoft/info\";\n\tmode=\"ascii\"\n\nContent-Type: text/plain\nContent-ID: <770050009.26123.4@halsoft.com>\nDate: Sun, 26 Jan 2014 12:26:34 -0500\nMessage-Id: <635263359948677500.21002.18@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\n\n--bODY.pART.bOUNDARY.2\nContent-Type: text/enriched\nContent-Transfer-Encoding: quoted-printable\n\nIf you have ftp (or anonymous ftp) access to the internet from your machi=\nne, click on this icon and ishmail will retrieve an informative message a=\nbout using the <Bold><Bigger>H</Bigger></Bold>A<Bold><Bigger>L</Bigger></=\nBold> ftp site.\n\n\nIf you wish to modify the commands used to retrieve attachments, look in =\nthe file: <Bold>getmextern</Bold> in the <Italic>Is=\nhmail</Italic> <Bold>bin</Bold> directory.\n\n\n<Bigger><Bold>Other Types</Bold></Bigger>\n\n\nOther types of files can be included or attached, like PostScript, JPEG i=\nmages and MPEG videos.  Look at the <Bold>Include</Bold> a=\nnd <Bold>Attach</Bold> functions under the <Bold>Me=\nssage</Bold> menu in the composition window to see what other typ=\nes are supported.\n\n\nOnce again, thanks for trying <Italic>Ishmail</Italic>, an=\nd don't hesitate to send us your comments or questions.\n\n\n<Center><Bigger><Bigger>__ =\n<Bold><Bigger>H</Bigger></Bold>A=\n<Bold><Bigger>L</Bigger></Bold>  =\n<Bold><Bigger>S</Bigger></Bold>=\noftware  =\n<Bold><Bigger>S</Bigger></Bold>=\nystems __=\n</Bigger></Bigger></Center>=\n\n\n--bODY.pART.bOUNDARY.2--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.45.msg",
    "content": "Date: Fri, 29 Nov 91 07:13:36 EST\nMIME-Version: 1.0\nFrom: nsb\nSubject: A multipart with quoted-printable test\nContent-type: Multipart/mixed; boundary=horsespit\nMessage-Id: <635263359948682730.21002.19@Jeffreys-MacBook-Air.local>\n\n--horsespit\nContent-type: image/gif\nContent-Transfer-Encoding: quoted-printable\n\nGIF87a@=01=C8=00=D7=00=00=00=00=00=00=00=AA=00=AA=00=00=AA=AA=AA=00=00=AA=\n=00=AA=AAU=00=AA=AA=AAUUUUU=FFU=FFUU=FF=FF=FFUU=FFU=FF=FF=FFU=FF=FF=FF=00=\n=00=00=14=14=14   ,,,888EEEQQQaaaqqq=82=82=82=92=92=92=A2=A2=A2=B6=B6=B6=CB=\n=CB=CB=E3=E3=E3=FF=FF=FF=00=00=FFA=00=FF}=00=FF=BE=00=FF=FF=00=FF=FF=00=BE=\n=FF=00}=FF=00A=FF=00=00=FFA=00=FF}=00=FF=BE=00=FF=FF=00=BE=FF=00}=FF=00A=FF=\n=00=00=FF=00=00=FFA=00=FF}=00=FF=BE=00=FF=FF=00=BE=FF=00}=FF=00A=FF}}=FF=9E=\n}=FF=BE}=FF=DF}=FF=FF}=FF=FF}=DF=FF}=BE=FF}=9E=FF}}=FF=9E}=FF=BE}=FF=DF}=FF=\n=FF}=DF=FF}=BE=FF}=9E=FF}}=FF}}=FF=9E}=FF=BE}=FF=DF}=FF=FF}=DF=FF}=BE=FF}=\n=9E=FF=B6=B6=FF=C7=B6=FF=DB=B6=FF=EB=B6=FF=FF=B6=FF=FF=B6=EB=FF=B6=DB=FF=B6=\n=C7=FF=B6=B6=FF=C7=B6=FF=DB=B6=FF=EB=B6=FF=FF=B6=EB=FF=B6=DB=FF=B6=C7=FF=B6=\n=B6=FF=B6=B6=FF=C7=B6=FF=DB=B6=FF=EB=B6=FF=FF=B6=EB=FF=B6=DB=FF=B6=C7=FF=00=\n=00q=1C=00q8=00qU=00qq=00qq=00Uq=008q=00=1Cq=00=00q=1C=00q8=00qU=00qq=00U=\nq=008q=00=1Cq=00=00q=00=00q=1C=00q8=00qU=00qq=00Uq=008q=00=1Cq88qE8qU8qa8=\nqq8qq8aq8Uq8Eq88qE8qU8qa8qq8aq8Uq8Eq88q88qE8qU8qa8qq8aq8Uq8EqQQqYQqaQqiQq=\nqQqqQiqQaqQYqQQqYQqaQqiQqqQiqQaqQYqQQqQQqYQqaQqiQqqQiqQaqQYq=00=00A=10=00=\nA =00A0=00AA=00AA=000A=00 A=00=10A=00=00A=10=00A =00A0=00AA=000A=00 A=00=10=\nA=00=00A=00=00A=10=00A =00A0=00AA=000A=00 A=00=10A  A( A0 A8 AA AA 8A 0A =\n(A  A( A0 A8 AA 8A 0A (A  A  A( A0 A8 AA 8A 0A (A,,A0,A4,A<,AA,AA,<A,4A,0=\nA,,A0,A4,A<,AA,<A,4A,0A,,A,,A0,A4,A<,AA,<A,4A,0A=00M=B2=00Q=AE=00Q=AA=00U=\n=AA=00Y=A6=00Y=A2=00]=A2=00a=9E,=00=00=00=00@=01=C8=00=00=08=FC=00G=08=1C=\nH=B0=A0=C1=83=04I(¥H=C2=04C=12%J<ThB=E2D=85=11O=B4HR#=A2=C7=8F C=864A=F2D=\n=8C(0`=14=A1=81dE=0B=175h=E0=B0Q=03=07=8D+/r=C2=88=C1=02=85=CF=14'=82=06=F5=\n=89\"=86=0D=1D2V=10=95=11#E\n=1C.l=C8=98A=A3=06=16!7=92=DCh=A2$=06=8C=9C-h=C8=B8=E1S=A8Y=14f=85=A2H!=83=\n=A8=D3=15U=8D=DC=F0=DA=94h=DA=B4h=EF=E2=D5=CB=B7/=D1=BFle=EC=F4=A1dG=8E=AF=\n9_=CC=F8=91CG=8D=C74hP=B5=01c=07=90=15*T8MQ=E3F=8B=150G=94=10A:D=08=11+L=AB=\n=0E=01=02=A1=EB=D7\t/Z¥X=02=C6=C4=12C*^=84=18=11=85=90=13$E\n=1FN=D2=04=8C((=98=F2=C0=0C#f=D5=1A6=A2=DF=98=81=18=86=0C\"0¥=E4=C5K=E3=85=\n=8B=9C=FB2R=AC=AD=D1=85=C5=0C=AF=93u=F0H=E2=C3=07=12\"7=82x=B5.C=F3=DF=BB=E2=\n=EF=A2P=E1\"=85=8D=14,=BC=10C=0FC =91=03S5=ECPW_3=F4=95=16P=0EFx=C2_?=F9=97=\nX=0B3=9C=87XN9=C4=F0=82J6=00aD=0D04=D1=02=0B2=FC=C0=02f=99=B1=15C=17/=8D@=\n=9A=08=AB=D5h=1A=08=AD=C1=A6cA=139=84=D1l=10=B5=00dDC=A4=E0=11C=1F=99=F0=02=\n=0B=DFU4¥=92=C4=157=D4O+=1C8=83=13K=001=C5=0D¥=E2=F0=D8W.=CC=F0BYS=0E=95B=\n=0B-=D8PE=0C+=BC=D0F=0C8=A5$C=15=86=ED D=11G=14=01D=0E8=F0=C0=E7N2=B0 =9E=\n]g=C1=B0=9DZ(=90(C=0B=87=C9=80=C3=0FG=EC0=C6=0B=F6=11z=16=0D=87:=98=9F=84=\n‾Q=A8B=0D1=00=A1C=0C4|=CA=14=0E2=B8=F0=9Dw=FBD=FC=E0=02=0F6=A0=19=D3\n=B4f=A6=C2\n2Dq=82=88A=B8`B=0D=A5=D9=B8=1A=8E;=16;=82l=16=95 =A4G'=E40=D2w=C4=95=A0=A4=\n=10K=00=17=91=93O=A2 RqRN=D8=C3\n=F2=C90=C5=0E<=B4=E7=83=0E8=DC =D8N4=B40(Z>=05=E1Sf/(=B1=C6=126=A0H=C3=86=\n;=F1=A9C=12KH=C1=85=12A=E8=90=03=0FL=A5TDJ/=BC=FB=17=0C?=909=E5Z+=FC=80CN=\n3=04=11=DD=BE=9Ai=E6=F0_cr:=14=0F=99=8A=8C=A8[*=EC=D4=E2‾.=B5=FB=9D=AA=AA=\n=C2=80=E6=87,=D4¥=EB=AD+\nZB=CD=99=AD #=8D=C2=AAF=AC=B1=B0=3D=E4=91=92=D7=DA`=82=14%=8CY=C3\t=1E=E1P=\n=02\n/I-=DC\t=3D=B4 F=CA=13B=0D=E5H-=04w-I)=94tB\n<=A4@]=0C=06=F30=C4=13FlQ=05=9FY=FB=14=E1UKN=01=16=83=0F-=F4=10C=0C7=0CqC=\n=0Di=D6=94=93=11E=08a=C3=0D9=FC=F0D=12Z=0CQ=84=C1b=8C=1A=C3=0C+=CC=90=B7O=\nc=12EC=12=1F=13=A5=02=19^%=06=C3=0C8=C8=DA=82\n7|=EC=12=0C=9Br=8AB=11=12=9B|r\n*=E0=00=03=0E=95=8A=0E=AB=0D=17=A2yb=CD+=D2\nZ\n.=D0=C0=C2=0D=0E=B5=B9B\t3=A8=F0s=D07=E6H=F4A=0B=C5=D0PD2/=D9=C2\t.=A0=C9=BC=\n=AA-=BC=B0=03I=8A=B9=80=14\n=15=C9pto0=E4=FB=92=11:`=1B=D1=B2=CF=02=C7-I(=D8=B0=14=18)=B1=98=0E=82=90=\n=848x=81`9=08=82XJ=17=9EA=8D)=05+=E8=C1=0E¥=90=12>-=0Cf=14=D4I=10=D2=85=83=\n%=FC=00\nJ=F0=C1=0Et=B0=83=190=E5=07=A5=DA=DCO|B=83=14=A0K=05=14=FA=C9=0C=14=C40=8C=\n=A9=8A\t=FB< U=0D=9Cb=AB=16@G)=B6[K[J&2\n=A5@,=1F{B=11R4=84=94=CC=80Q=AF\nP=0BR=C7$&=99=E47$=18=08DF=E0=B3=D5=91=00h=C2=1A=DA=F5x=A4=10=17=94=00x=FD=\nYL=9BzP=03=D0=D0=E0=06*=A8=D9K¥=10=83f=A9=EF=06R=01=9F=D7L=80=03=FE=A5@\t3=\n=B8=C2w=F4w4=AF=8D=E4=04,=08JIJ=82<6=F1=E0C9=E8L=E3=CC@=06'=0C=C1\t=06=A3=82=\n=1Bb =03=1Exl-;=C8=CC=0C=80=A0=AE=0Fy=05+7=80=99N8=A9=B8=C0\t=A1=07<=E0=C1=\n=0E=A0=D0=03=13=C6*U=1E=E3=E1=A0¥=08=86=17=C8 =08=83=8AA=85L=A8=83&x=07=83=\n=95I=C9=DFT =98=1E=BC=003=B5=93=90Oz0(=DB=9D=E5'*=08Q=EDP=90=03=EF=E4=E0'=\n=3D=C0=81=13¥=A0=02#=B8`\nl=11=82O=94=B5=02=16d=FCqF2=FA=99=08‾=06=83=11=D8H=8Cc<=16EV=D7=03=FEP=ED=\n=08.@=91=10=02=AA=02=1E=F4@y,h=CE=0D=0C%=83|=C9Q]=DCb=0B\nrr=83%=04=E1=06U=D0_qre=BF=A3=99`Q.=08J=0E=D4\"=03=1F=C4`U=BB=BB=01=0E=8E0=\n=05,X=81\t#,!S\n=A4=92=CD=A8=E0=05I=D8I=0D=3D=94=18U=FA=12=07D=00=C2=E2l=B0=84=AC=CC=84=07=\nb=91A=1B[dS=17H=C1cLJ=89=A0=9C=92J=9BV=C5=A7=AB=FA=10=0C=94=E0=18=01Ie=88=\nD=EC=D4=104=17M=93=FDE0=99RJ\n=CE=90=17=14=A8=8A$< gD=DA=B8=83=1F=B1=A0=05=F2=9C=11=18=A9=C7=1A=10=CCs=8C=\n=181J=0EX =91=88=F0=A6=04f4N=0B=8A=D0=02\"=9C=88=99MXB=11=DA=D8=CE=18=B4=C0=\n3=DE=01=0E=13f =85=F05=87=075=F0A[M=90=1C=16=FB=88-I=FC=F3=C1A=81=90=D0=B3=\n93'=DF=81A=0Ev`=03=1C=E0=A0=07=B0=8Ce=12vP=83=A9<=92=05=1E=C3=8C=B8=E6=93=\n=18=D8b=D0=94r=E1=13=1E=A1=D3=19)H=86*=C9=E3=9B=AD|=90=99=1B,=C7%=A8=C3J=A9=\n0=13=03O‾=06gs=FC[q_=80=84=1B=FC@=08B=80A=16=1C=16D=14=80&be-=E2O=80=00!=A1=\n=00=A5=7F}$=ADF*2!\"`=E4{<Z=81^=F7=CA=D7=BE=92=86he4=E3n.B=D8=DA=14=A5=05=06=\n=A5-=0F=94@=AB=16=E8=00\t:=F8=8AuN=D0=A6=F0=BD$=077=00=AE=85u=C0=B9=1A=A8=80=\n[=85,I=AA^\"=A0=15=A4=A0t=AA=BA=C1=12g=B28=1F=E4=80\n=EC=A9=81\t=C7=F2][1AT=7F=9B=0Fb0=A8=AA=17=E4=E0\t)iN$i=E2=1C=1A=F4=800=C5=B3=\n=15=AEj=00=04=1A=04=C1|=80c=82=11b=05=FB=17=198=81=084=E0A=0B‾=DC=83:=D8 =\n=06=1DTfN=8Cr=B9@=C1=EE>f]=0B=10`=F8.k\"=EA=C5}1-=B7=B4=F5=11=86=BC` =03=9E=\nQ=81k=E4=D7=03=EB=88=045P=88k=16=9C=ACD=CE=C0=04=1A=19s=CEXP=95\"T=14=06=F2=\n=E2=81=11z=85=A6@=DDU\t=DEy=C1=10p;=04=B4=ECOJ)\t=B1=0D=1Ac=E2!=E4=80=C8=98=\n=06-s=7F=E0=9C=0C%=90*R^Aoe=C0=84=83=1D=C6=B8=C7=3D=E6*=CBU=DB=1EH!\tSp=C1=\n=12Nd<=E5=D1=C0\n1x=02=0F=B0=13m=DB=E6=C0=87k=A2=F6=DF=A6R=15&D=C7=07@=C0A=E9`=80=84=180=95=\nBq=A6=1A=0D=EA=02g;=9B)-=A7=EE(C=0C=12=E8`=0Dz5z=CD=E7kvS=02=A8=F17=C4'=8A=\n=1E=AE|`=85\"tHspy=C1=F0=88w=D7=98=9D=CBP=1A=8D=F7=84=FB83K=1E=CC=A0f=1E.=F2=\n=EE=0C\n=99=C8H&\t4=D8=C1gjUY$d=88=07QHW=0C=9C=00=84c=C2=CC=06=C7=DD]=11=C2=A9=03#=\n=13A=E16k'=0Bt=80=14=A6=FC-%=A02=02O=17=9AdN\"a=D5=B1=D4=13=97n=B0=EE$=CB@=\n=06)=8CaX=F12=AF=C3=98=18=86=E8v=F7]=E2-=EF=85=D0=BB=DE=F7=AE=D1=80=F5=BD=\no=1FQ=846=C6=81O=0Bb=00*=19=E4=C0\t=3D=90=8A'W=80=03=86=13Ox-=08=83=0B=80=08=\n=1CE=9A=0D=D2=13=97m=13=1E=E5a4=C1=ECQ=82=B3=81=0F=AA=12=97=1DL=81p=C63=9E=\n=0B=8C@=95=1B=E8=C0=06=04=8BA=10¥Ed=0C=02np=DD=0C5hi@=84=BB=EBX2=0Bt=BA2=C3=\n`:=1C=90p=869=B0=83=0F=8A=B0=F9#X=FB=06;PfRT=98=F5N=B9E=C7X=8F=A1=D6=E1=BD=\n?=19=14=E7=06G=9B=FC=F7=0C=04Ro=02=DF{=ECd_4=BF?*=CC=1D=00%=05/=F0Bt=A82r=\nZ=DDu=82=C2+|=9Av=B2=96=17D¥=98=13*=CA=87=FC=B4=04_=86=DF=05@=E8=C1=0F^0=AA=\n=92j=DA=06IxA=0Dr=D0.=E3=BDd=07G=00=06=91=01=1D=81=E3r=9D=A7*q=F5!z0=03=E4=\n=F3=12=0B=F7P[=10rC`=04M@=1DI=B6!Z=C5.=1B=94=03K=F06N=90=04\"=92.‾=93=12:0=\n=04=E5=F3I=C2=C7=17=14b=03¥=B0(.&uSg;=DC=B2=02%=E1+=FD&H=18aF=05q`z=15v=AA=\n=11h=D1'}=B7=E1=02N=00=05=D2=02in=C5'=00h=03X=D0}=C4=E3=02=05=F3=12d=80L=91=\na‾=1A=15=14=CE=C4&:=F0=1D=C0=D3Y=85=A7*=DDTd=C9=D3=03cp=03/=D0.}=93s=15vR=\nA0=03C`=034=00=06=87q=80=07=B88=FCP=81w=0B=D7=02VP0=8F=E1=03A=10I=C45^N'=03=\nH=80=03C=A0=03Z=F2=04U=90=04hP'>G8=BDu=03=FD=14:=96=92‾1tD^=D1=03=82=02=83=\n=C3=A7=17!u6L=10R(=A0=03=CCc=02=89=94E=C7r,=D2=13hAco?=08}A=88=3D=0F=D1Q=19=\n=01=03O`x=C3c<5=A3p-0=169Q=03=00=B5=85/=00=05=F5=91)(=A0<=F8=A2J0=83=87=EA=\n=93q.=80G7=E0=03=1E=C6p=BA(GQ=81=04=DD=11K=D9=B1=8C=EFGd=D0=E1=1Dxh=8DG=B0=\n¥vX=88=A5S¥r=C2=03=81=83=05*=15=04@=00)D =04<=A0=03>@=8C=DB=06¥=FF=C1{0=08=\n=836=C0]K`r=94=18_Z=87=02K =1EH0=07=82=04=13w=F5=02b $$=10=16=FA=97W=CDG=1A=\n*=E0|=A7=01=8B=B1h=10Hr=1BG=98=13=FCrtq=C6=03=04N =19L=86=15<PA=DEaP=B1#=14=\nb\"=03-Gdx8Gx=07=13@0=03X=10>v=97=93=E5C[0=93=12=0D=18=93=9DW=13=A9=F4=93=E1=\n=F7=02?=F0=86=E1=D6!=E7h:=08C*=06=A3R=15e.=B2=14=7F&t9?=80=19=9B=B1=8F=FC=\n=882'iY=B7=12=901=18!+=A0=16* T> =03=E0=88=93ibn.`|=99=81=8A3R=91z=B50=7F=\nf=91=17=99o=19=89=3D@b4=D22!=ED=B4p=91=C7=02(=E4q=8F=B18L0=7F=18=93 =DB=D1=\n=86o=F4!=06(‾=E1=87w[=E8=026=01s=0F=C8p}=B3=04<=95qw=18=933y=80=9E=F9=12F=\n=C1=03=AE=E77=E3=A5=13=D5![=1Ch=877=80=04;p.:=F6t=ED\"=03Y=E0b=FA=B8B=FB=A8=\n=1Dkq&=14t:N=80=03)=F0=03=A13|04%=FC2PT5=D0=80v=D7N=86=A8\"xE=10' =1070=02=\na=90^=AE(v=18=99=97=B1=C1o=FD=96&9=14‾+=12G!G=155=00+9=10=1D=A2=C201=B0=05=\n5P=16B=F4=04=0BU¥'=05=99=A193Q=D1+K@=999yW=9EI=9F=A1=C9=8D=A1) 0=A0=05:aR=\n5p=9A=82=C8I=9Da=03=1A=E3%U=96!h=F0j,=B2=19=FA=F8=041=D4=13n=91=03=99=C1F=\n=E1D*Q=C7=89=EE=E6^g=A5L_1=9F9=A7/=93=A3=3D$=80=02#=A0=02$p=03\n=9194=F0N|=05=84=DA=A9=91=DC=C9=145=D3=99/=10=04=F5q+&=94=03=E7bP?=A0=06¥=\n=F2=03=B9=07=03P=D0=1F=BE=B1=16B4=1F=0B=E3L=00Z=9F=0E=88&O=A0=7F=97iwU=DA=\n=022C=A5^\n=941SdH=80=81=08\n=034=90@F=90.L=D6dqwW=FC=D1=93K=14=AAK14=03=80=01=1Ag=06=05A`=05=BFt=9B=BD=\n=17g1=F0=03J=F0)H=E0=98=97c=03r=B1$=B4=82=03=99=C3=1C=BA=D3=02=10Q<=C0=E3=\n=A2=D3C=3D6z=A3=DB=89$%=A0=02=A3=C2a0`=12=8B=F3!>=80;m9=03M@BG`=04F=F0=03=\na=80=0390=04t!=16=18Z=14=10=E3=157=C0r?=D0*D`=03=82=F3=A5=91=99=A5:=C9=AB=\n=C0\n=A6=AA=E4!=9D=87=8E;a[=B8g=13<=C0=048=B0=03P=11=04=94e+=BAD=A1?@M=97h=1Fo=\nqf=FD=F2]|=DAnq=F6bM=E4=06Z=A0;;=E1=04;@=03M=D0=8F=91Gr=15F=12=FFQ=04=A1=18=\n=14=82F=A9xi=A9=97zX=F6=F3=02=D2=82=02=94=06:>!=03=A32=039=D0=04B=D0=04X=90=\n=04H =87@=B5.1=11=1E=BB=C9L=7FccW=B08zB=9F=FCZ=1A=93=FB=99=B1=C1=BA=B1=DD=\n=F8*t=98U:A=04QP=05kv.=DF=A1=03=CCFr=99Ai<=C4=1F=CB=C1{N=F1=03L=A5=024@=19=\n=1C=F2t=B8=03=96=02=E9{g=C2=13O7=1F=9C=D4P¥=C2\"=B6=823,P=04=E4=05=B0) 3yU=\n=A3=F5j=AF=02=B1`?=E2=114=F8QC=D1e|=B2=07=04d=05W =04=92`=18=E7=C1IC=00=A7=\n*=D0=02=D5:=159=A0=04=85=D9=03=E2=97=B1n=FB=B6r=C4=B1=1B=FB=B1=C5=8A=9A=9F=\nc:3=90=9ChB<=B42=1D=EDD=03D=AB=AC=B6=B9KN=01=B0+=C2&/A{=CA$=16q=84;=BD=D3=\n=A7=11rVX=F9t=F1=B3m6=C9=7FD=DB3=ED=A4@P=90=03nx+=B91`=AD=F8=B4P+=B5=B4=01=\n=12R=E2=1B=E6=03=9F>=F0AF@=04H=A0=05:@=04;=C0=14Sp=94H=E01=AC=13&TA=15=FC=\n4=E0=06M=F0K=D3=08=B7=C4=FB=ABr=0B=ACt[=B7=1FR=93=8F9=8D'=C2=04_1=04H=B5=12=\n=C6s=18=A1d=9BU=90=B3=00\"8=EBF=88<=B0=04=B6=F5=15=06=F5-:=BB=B3=D7dD=9A=A1=\nk\n=14=039=E0X=99=9B=19J=C0=02=D2=EB=92B`=04=E1=84+=C4#=BA=F86O=A4k=AF=A6{=BA=\n=1E=95=A68=F1!=D01@=B8=15K;@k;VR;=80=95R=F6=A71=11=1D=AF=19\"=AF=E6=AB=C5=FB=\n=B6=C7=8B=BC=C9=AB=BC=8Ag=80=C2cY=BE=94 T=D1P=87aB4=F0=03=A3=02¥q=8A9=91=B1=\n0=9C=F4/K`01=B0=04=E7=A6=95=DE=AA=1F0=88;=08c=A8_A=B9E[=B4=A0A*=E79=1D*=10=\n=9D=12=D9|_dh=AFQ=02=D1=F7=BF=00<6=13=82=18=D5=1A=1DH=00)=3D=A0=03=07e=03=\n;=96=B7=99=DB25=10=04'9=054ax=EDr=C1=FCf=CC=9F=19=EC=A5=1BL=87=E88=9F=BC=D8=\n=02C=E0=02=B1=1B=19=0B|=1EP=B7=03K`q=C0%=AD=10=14=16=F3=F1=05=CE=AA=03G=80=\n=04=A9bb=DDj=C3=E7=BB=8Fj=B3c.A+?=FA=C3=B7=A2=03E`=81/=C0=03=BA=C1|=13y`3=\n=A0=C4E#=11=80=E5=C4S+=03G`qR=F0=14=3DI=045@k=B4V=03B =19OW=04?0<=AB=A3=B9=\n=A9=C4=021Q=C1w%3g|=C1=FD)=AC=9DW=9Fk=1C=CC=9D=D7=1CG@=13I=90=03R=E0s1=90=\n=04=02;=13=01=B7=A8=3D=A3c=3Dp=18=B2=95=C0=9EQ+Yi=C3=DA=AC=95=B8=93=04<a=C8=\n=B8C]qj+^=00¥=C2=C9>=16=01h=A2Qo$A=04=7FU,=DB=83=8A;\"=1B=DCYH10\"=86=F7=02=\nYA=13U=E1¥=CFE=15:=80=05=86=11=9E=B9=D6N.=90=05_=81=99=BB=0C=B7T=FA=8C=FC=\n=DB(=CC=10=1D=D1=B0=06=8D=B7J=04M=B9m=E2=B6=13U@=88>=903.=B1=03s=A1=13=C7=\n=94/)t=C8N=BA=CD1dn4=B0=04=C0=17=A7=C8=E3=D2-=DBB=83=02=03=A3b=1B=02Q=02G=\n=90W?3=02=0D=03X%0=A3^=87=10R;5Or=84=0C=F4=12=AF=85{=1E=F7=CF5[d=98C=B4=81=\ni=04Yj=C1=0B=8D=BC=80( =12=0D3=F3=99=D5=18d=86=BE=E4=AC*5[=CA=1Cd=FB=C2If=\n=DD=04b=96=06=0D=07=B20=00=04=16=D7=CA=83=9B=C3=DC=AC=CD-=0B=D3v=3D=ADo=A1=\nT,=90=039`=02p=F1N=07=E63=C7b=02.=90O=10Q=04{\t=CA=B4=01>=15=81-0P=1C=E4=02=\n=8E3id=B2=B6=05P78N=90=8B=EB=EA}=0BM=BCi=FC=1200=04=8Fa¥=CD=9B=BC=C0=C6=D5=\n=1F=E2z2a=03B@=04=82,d=17=B8=13A=F6t=19=82=8D=FB=BE=F4=02M=A0a=072 =94=F2=\n=D2.=DD06¥=BEFt=D7=C4=CDC=EA=BA<=8F=03=04=F2,=10=F5=C1=13=94=A6o=10A=83.=A0=\n=D8=1C=B9w$=C6?=DD=11=14'=B9e3i=03=3D`=06=BA=DA=15=97=14+j=E8}=9B]=8D=9D=FD=\n=D9=9Fi>=8B=E3![=ED=027=B9=C6=8A=D1SY=9D=13R=90=12P0=17A=16=DB=CA=F47=9E;=\nCUAcW=CC=05=17=18=03G=C0=14=C6=A3=02=00=91B=C5@=18-P=1CD=98P=E1B=86\nS<=84=18Qb=C4=81=03W=D0=D8=D1\"=C5=08=8E#=9C=8C =F1=02=87=8A=157:=9ED=99=92=\n#\t=12=3D¥=98@=C1r=05K=9A4]=D4=C4Y=A2=C4\t=1B-t=ACp=D1=C2E=91=87Bd=B4`=D1Bi=\n=0B=186t=B8x:=03=C7=0E)6¥=B0X=91U=EBV=AEYY|=05=1BV=EC=D7=A5e=CD=9EE[=D6=85=\n=8B=170=8E=FC=D0=F0=11=E3=C5=DA=19k=ED=DE=C5=BB=F6E=0F=B9/=FC=FA=CD=1BX/=0C=\n=BF0f=EC=D0=01=03F=0C=C5=8Dc<=9E!c=06=93%:v=F0=E8=11%\n=8E=1B7b=C8P=1C=83=87=0E=1E/b$=81=E1=E3G=0C#)=1A.t=FDZ=B6=8A=89=B5!V=B4H=BB=\n=C5=0B=12%:=D6=CDZQ=E5p=944=93=E4hQ=C2D\t=9C4=997g=A9=13=C5\t=185n=F8=B4=91=\n#=86W=B0J](=B9=BE=D4=C5=10=1A=87_=88=9D=D1U=FDX=F6I=CB=BEHk=96F|=EFk=89=DC=\n=A8=91C=86_=1Fs=EF=FA=17=AC-=1B=14=FB=EB/=C1=F0*=10=06+=1AcP=B1=19=BC=C0A=\n=88=1CvX\"=87=1CtHb=08.=98=F8!=07=1C=8C(B=06=D0b=B8=81=88!vXL=86=AC=1E=92=CD=\n=A1=16e=B3M =DCp=CB=017=16=82=92=AB7=96=90=C2=8A6=E2‾=04)=BA=CEZ=B8=E1=B9=\n=16=FBrz=AE9=9D=94;!(=16j0B=88=1A=E6=13K)=1A=9Ct=8F=06=CE=80=A8!=06$Z=F0=01=\n)=F5=BAj/=AC=A0=C4=13=CA;=B5=CC:3>=BB=FC=CA=A1=08=A9t=E8=01=C0=B5x8=90-=91=\nt=E8=AB@;=03K=901=C2=1Ad0=86=19h =02=07=1Cr=10=A2=89/=E8=F8\"=08\n=8D=90=E1=B1=C7^=F8=E1P=1DhP=81=06=16_DH=05P=1B=92=88$=8CjXa=C6=8Az=E0j=AD=\n=E5X2=01=BE f`a=A3=94p =01H=96b0=A1=85=8B`=D0=C9=84=1BrB!=C9=9A=82]b=06=14=\n=B6H!=06:=8D=A8a=A9=EEZ=E8)=AC=B2=A2h=A1=07!x=1Cs=BD=B1=BC#=EC=87=1Enp!=07=\n=17=CCX+=CC=FA=D8l=13=AD7y=B0=C1=86=1A=E2=A5=C1=C0=B6f=F8=F3?=D3:=D3=C1O=03=\n=01=F5=D7_B=17=D3=C1=C3=0B=83=00\"=0B'=9A=10b=07F=E9=FB=84=8C=86=1ES=8Dh=D4=\n=83h=B3=D8=A1=DAHbA.*V=98x=89=1B=B0=FAj=05=A5jxA=A7!¥=80a=88=87=86c=EE=C7=\n=9AL=80=01=89=14=ECz5=BA=12=A0=D0\t=C9%M0=E1=84=FDfH\";=ABx$+#k=BB=BB1=ACn=C9=\nlOM=17=84=C0a=88=19=06=E4=01=887=DB=1Do=AE=B4=FEs=EB=07 |=C0=01=B4=BFb=A0=\n=81=B0=03=0B=D3=81=0C=19=86=D8/`=00=E5=96=BB=C1=CFd =1B=07=1D=94=F8=C1=0B=\n$=8C@=C2=B2=F2*=95=81=08=C3=06z=A8=D6OG]<=E3=83b$=E9=86'=82=D0=01+=A0=8A=A0=\n=E1=86=1F=90=96=E1=04^=83=A6=01=05=D7=86#=81=85)rM=89&#x*=F9+=1D=96[=B2=04=\n=17d=80=3Dv=DB=95k=01=08=BF=E2ms=AC=1C=CA=14=EBi=A8=81=17=EF=05=CD=7F=98=97=\n=B0=18j=80=E1=AE=1F`=C0a=AD=B3=F2j+J-=94=D0=FBa=86=C4b=A0=FA=87|=F5=F2=8B=\n=87 l=B8=A1=07=C2=E8F=BFn=C7p=E0=A2=08=1Ft=B8A=D1#=C4=E5=E1=B2=1B=E8=AC=94=\n=87!|=A5M\"=C71v=1CB =A7=02=16=88=88=07=F3y=02¥=AA=E3=83=82=84=C7=05(`=C1\t=\n$=88=10=E2=94=00=064YIsZ`=02'=A1=CC=05G=88=DD=CAnP;=DB=AD=00hA;=C1=13=C2=C4=\n=16i=01=0Fx=C2=E3=8A=0B=AD=05.=1B=00A\n5=10=83=0D=F0e=847=ED=E0=07yb=8B=9EH=14=04=1F=F4@\n=16=CA=81=0F=F0S =04=FD=05=06oc=82=A0^P=AF=F4U=B10=8D=91=C1=0D=84=E0=03=0F=\n=91=EF=06>=B0=81=0Fj =87=C8Hf>C=88=01=AB&=92=B1=14=AC=80(=01=14=DD=00\tx=03=\n=91=A5Q2=92=99=C1=BC=92=E0=9F=17(=EB=06\t!N=E9.=08=1D=E7(G=068=E8=81UN=80=C2=\n=E9$e.?=8B=1D\np=FC=D0=17=89=9DE=86=EC=81=E1=F0.Y=1F=17=EC=00=076=A0=01=10=C8=B7;=E3=D5=00=\n=07m=D1=0B=A0n`=033=90/^6=08=C2=0D=86=E0=84=1C=9C=0F}-=B3=C1'=91=80=19*Z=B1=\n=8AX=C4=01=E6NS=B4x=D5`J=E5=99=01=10.=E3+_I=EC=05;=A8=18=E3R =03=00:.\"=3D=\n=A0=88\n=80=90=14=EDU=EA33=00=E7=94=8Ci=03C=B1=ACR=AE=19C\nX=92=BA=12=80=CC=04::V=B1Jp=04=C2@=81<=9DK=C1=14g=B7=03=B9=D4=8E=84@+H=0F=\n=92=B0L=B3=B80=93=C2=BB=E4=0C=BD=F3!=F2=FD=E0=078=80A=0F‾p=03 P=ED{`=83=DE=\n*=C7=F9Jq=F5I`N=CC=81=17k`=B6=04=05=CC=96=B7TL=18k=A9=98=1C$=E1=06<=10=82=\n=0D=B2@=CE\"L=B1=06,=C0=8Dm=A4=19=83=FE=05p\"-=98=D1\nx =A2=C7=88H{6=D8B=11=FB=13=E9=99=F3=015=05.=1B=C1L=8AC=02=13=F8=00.=CC=E9=\nYoJ=B0=9B=1E=08=85=06=E5Q=81d=822=87=1A=A0(=05'¥d=EC=18=F9=98/H=AF=A0=98<=\n=E8=D3=98=B6I=EF=DC=C042 =03=11*S=B8U>=81=07}=8A=81=F3=DE=D4=83.t(=074=B0=\n=01=0F:=D3=19=FD4=A1N=01=BB=81bd=C0=83& =E1=0B:HL=82NZ=A0 XQ=B2=91-=8C=10=\n=BCW=1D=96=C5@(=96[A=0D=10=17=A3=17=3DD=050=E8=A95K=85=03Z=1D=E1\nK=A8=81=0E=08=07=06=1E=94=954=98=F1=81=17=E2=B7=D2=18=14=01=06+=D8=C8N=A0=\n=B3=B3=F9=E8$=ADKR=01=B9X0=9F\"=A4j=05G=01=13kT=F0=82=1C=9C=E0=05J8ax=83=A6=\n=B6=BB=E0=80).@=C2M=9D=16=D71%=94=3DlzA=13=A2@6=1A=18=D3=BEtj=A9=9D6=DB=16=\nC}=B1=07K8=FB=82=16^:=D4=93=DA=12=06Y=F8P=0E=80p=04=DD\n=CA1t=93b=FA=14=03=D1=04=DD=85[=C1=C9i=8Cb=C3=906>=04_=FD=DB0=A86=C6=82=B8=\n=1C=EAJ=A1=F9=0C¥&$=04\"8a=08=1D=9A\n=10=9Ex?O=81=E4F2=E9=0D=D0:=B9=83=F34!=06KJ=81y=91&&=90=89=85=BB.8=8D=0BL=\n=18=DE?=1A=8A1z!Q.=F1=14<=F6j=D2=BD=D3R=0B=A6=EC=FB=D5y=BD=F2=08B(=0D=1F=EF=\nC =EDX=86NE=D8=02=10`=9C=83=19=10=A80}Z=8C=85=16u=03=8C=EC=A0R=05=AB%=DD`=\n=F0=BC=FD=9ATw=80=B1K=0B=B5=82=1B=E4j=18\"=02=94=08=0E=BE\nb6F=E4=06+=A0=15=1AyP=04=DA=A2=B8=BE=16=12=82=11=94=F0=05%H*=89=DE=A4=01=C5=\nX=B2=17=17=94=80=06:i=1E=91d=00=96=1B4=01h=F0=F3K=C9=B62=D7=85=A6G=82=FB=8B=\n=04=DA\tP=F0D$=D8=F5=05Cxe=13=94=B6=DE*s=87xH{o=0Bd=A0=97=1B=84=A1*=C7T=AC=\n=1A8=D3=19\n=17h=B1=FCL=02=10=16U=84%P=01=0EH=A0=1Cg=B4=C3=A0x=15J=07=BD=8EW=FC=18:=15=\n7=9B4.=8D=F1%=A0=ED=12=A6m=06E+:=C8=B0\nf`=E8l=AE=C0P =0Eq=8BJU=03!=18=024S=D1=C1=BBc=E0=03# X=07=08=B3=AD=15=84P=\n=B0#=F03=8B1=C0)\tZP=83)=A4@#/=11=C3=0E,=97=14=3DeA=82=95=CA=E3=AC=BB=13-=B3=\n=0Ch./=C0=B5=04k=90O=BFpa=08Q=D0=03=97=D7=A2^=D4=B2=D7=BD=D1=8A=1A=BBZF=D1=\n)!=B2=07>(Cg(=DD=97=C6=D0@\n;=C8O=FC=80=00=04&t=E1=0DH=18=02=0F=E2=F4=18=18l=0F=07G=80=A8=A5d0=CE=C5=12=\n=01=EB=93l=B7=9F$K=03=07=F7=FC=B9=8A¥t=82=0D=88=80=14p=A6j X\t=\n\n=BF)Rq%=02<=E0=AF=89=C8=F2=A6=B0=9D¥^=B7R=A1Y=CC=0F=82=80=035=1F=E1=08A =82=\n=0E=B8=10=19=C6=1C=11=075h=A7=AF@=C6=96=1C=A0=80U =93=CA=0C=9E=00=85=17=D8=\n@t=AB=DEJ=10=8A=A0=B5=93=99=CB=055x=13\"wp=EB=13=E0=BBe#=BA=9F=A2i=D0=83=1D=\nh=C9=06=B2=F6y=D4=BE=85=DD!=7F=AD=B4qI=C2=A4=8F=10=85=1FxR=B7=8DQ=D4=0E|`=\n=C3t=DF`=F5`xB=8BG=B3=83=19X=8A=FBA=E0A=14=EC<=A5=D1=AF=A1\n=0C=D6=01g|pxx=0B=EC=89Gh=BB=DB=03=D6=84=A9_^=9C3=F8=01=134=AF=E4 =18=01=A7=\n=1A=061N1=99=1B=C8=08=BF=93&=D7z=81,=A8=08=81=A0=81=A1=12=82=D0=A0=81,P,-=\nb=82=1E=E8=01'=E8=01=B8=10=11=9ES=81=16=E0>S=01=02=FD=FC=E0)=92=88=81=1C=08=\n=82=1F0=82=B2=81-=19=B1=08=AF=A0=81=C4=90=81\"H=0C=18=B0=AB@=13=15=14=88=81=\n[C=01=15@=11K=A9=01p=9A=81=1Cx=82=1F=A0=81=FD=E9=B9L=02=9E=AB=10=0B=17x=82=\nv=A1=8F7=81=81* =02!=98=822@=82L=CB=81=F8a=8C=18=98=82 `=02=CE=E0=0C=F2=C1=\n=01$@=02=1F(\"=1F=D8=81=0C=DC=C0=0Bd=82=1C=90=02Q=E2=02=0F=B1=8C)(=02+=00=82=\n!P=14=13=8C?=CD=92=AC(h3=06=F1=AC=B6P=14=F2=E9=BD=19=B8=01$X=1E=1E=98.=C8=\nS=82=D5=BA=8Dlr=AD#(=1C;c3*=008=11=83=88=1E=D8=02=80=BB=BBy)=0C4=A2=81=1F=\nH=B7=C4=B2=AF=C8=B8<=0C=F3=01=C3!=C1=1C=A0=82=06=AC=91=AC=B8=0C=0D=99=BE=18=\n=90=02=92=A8=08=AD=F8=A1=1E=C0=9B=AF\"=1F=11=A1=82=F3y\"=18=10=82=E9@=88=15=\n=18=02+=B8=1B=13=FC=03=02=A4=E9=AA=E0=AB=92i=99!=F2\t=8A =98=1E=041=9F=1D =\n@ @=02+X=82-=D2=01#=80=BF=CF=D0=B6i{=A59=CB=01=1Ep(.@=02P=CA#=CA=F1=10E=19=\n=02j#=82\"=08=02,=A0=02(X=02(H=BF=1B=A0=9C=F8#=94=12=BC=01#=D8=C3[=DA=01<=EC=\n=01E=013=1D=12=11=C9=A8=81=81=92=81Ps=C4=87=A0=18=D7=DA=01=92=F8=95=82=98=\nH=FF=C1=C4=14=08=B5=0D=83=88es3=C2=90=81&=C0=0Fc=FA*=13S=90=A3=B0;:=F3=15=\n @=01=E3=C1=811H=15Oi=01=D6@C=1A=18=BB=1B=B9E=16 =1A=1D:=94*=B0=AF¥b=02`=B4=\n=81JI=886=92=82e=E3>=19p=82 =B8\n=CD=F3=B7=B8z/#=14\n=96[=8A=EA=D0=01mC=13=F18%=BD=90=01# =9F\"=F8=81'=D8=02\" =82=D1X?=19=F8=02=\n$=B0=10=F8Y=A5x=F9=A4¥=FCz<=1Cp=02'8=A6\"=D8=01=19=F4=90=C5=8A=1F!P=82=05{=\n=02&x=02=19=84=1F=F6s=10=BB=E1=9E=D5=E3=0BBA)=19=E8=01+X=94=0B=E1=812=9A=81=\n=89#=02#=08%=BB=9B=11N=C1=8D=97\n=A7IR=11=BF;4L=F4=14=87P=81=85=03=02=C68=1B=BF=88%=13=AC=813=C8:=8C=FB\n=D5R=81=9E=00=99=0D=C2=01Y+=A0i=E2=AE)=B9=1A=8C=B3;=93i=8B=A1:=14\n=89=82N=FB=A4,=FCE=E3y=02=DA=B8=C18\n+!=BB=81C=81JgD=8A=DDh=9E=1D=08\n=B6pJ=F1`=99=F1=F1=1A=B7=F2=0E=1D=88G=C3=C9B=1B=10=82=A33C=1F=A8=9F=C5=8B=\n=8C=1A8=91=F9)=82'x=A5W=D2\"=8D:=A6$8=82=FF=D2=C7i=CBF=F1\t=02%(=02\"=106=1D=\nH,=9C=F4G=06=D1=9E'(=03=C3=04=C4=BA=D9=C2=C9b=B1YYH=C9=801=E0T=95=87=FC=E4=\n=1F=02\"=02=11a=C5=E7C=1B=D1=FC;=C0k=1C=14=88=02r:=0F(=88=018=F8=8F0x=81+=80=\n=BD=8D=EB=01=AC=D8P=15=E8=0D=83=88=89=9D=08,=A4p=01]=DB=1C=AFz4=0C=AB=08=17=\n=88=8C=80=AC=1F=F5<H=FCH=1B=C9r=01 =C0=18=D7=AA=0B =D0\n=1BH=82'=A92=B0X6=E6A=AC=DE=EB=92=CBC=AC&=1C=8A=1E=00=02-8%=EF=11=02=AF=11=\n\n=E3!=1Feb=82W=CA=01C`O=CC=08=83 @=A6d\n=03=89\n=A9=FAtS0=B2=AFq2=02=1F=F8B=BE=A46=E93=C3=1E=E0=01%=A8=81=A1=B2=94=C7=98=C1=\n\t=BB=1B%Z=94.q=D0>=B3=9B =98=95=1F=F4&=19=D0=AD=FD=88=16=AFh=C1=15@=0C=16=\n=E0=81=AC=C8=A5=C5H=82=E8=B1E=9D=CA=18eY=88=1B=90=01=19Q6=FFH=93=16=C0=81=\n =00=0B=DB=BCE=90X=01cA=81+9=81!=08=16=89=FC=B1UY#=B4=BFz=C8=1D=D8=01=B3,=\n=02=D1B\"Sb=8C=1A=08=13=BF=1B=88 =B0=08E,=B6=A4=D8=A2=19=88=8B=A2=14#=1A(=03=\n=DD=A2=81)8=02=1Bx=81*=90=17c=9A=01sU=A6=E6=01=1B7=EC=81=A0<=D5!=88=13=A8=\n=CB@p=AA/=1B=88Gx9=D7=8Dz=A5>u=A8=89=8A%A=E5G$h=82 @=82(=08=82)Y=C8'0=14D=\n=E1=BA=18=B8=82!=18=02=1DX=BD$=E2=93=81=C1X=C7=10=02=CA[=D4=A2*=AA=C9=84V=\n=D4=D2=0FC%N=1AH=82=EE=83=1Ej=15=D1=D1=CC=18=19=10=A0=838=02=01B=0C=D3=F8=\nA=A5 =B6A=D37=8Ex=A7=0CZ=01=1D`=0E=1B=DD*=1D 2=AFP=B2=FEI=CD=18=C8=0E)=10=\n=82%=C0=02p=E3=A21<<r=E9=1FN=BC=C5&=C8=01=9F=EB=A4=D7K=13=16@=8E=AB=A1=C1=\n=C9=9C=90\"@=02=ED=E9=AD=AF=BA=D7=D5 /=A8=FC=18=02%=9A=A8s=8D=9Fx=E9=82=1E=\n=C8=81c2=DBP=E2=92y=E9=D3=BC=D5[7}K/=8A=9FD=A1(y1[=1D=98=02!=F8*0=13;=1A=A0=\n4  =82*=80:=AE=CB=D8=8C=ED=D8=C9-*=A3z=CA=15=88=02#=E0=D8=C9=EA=01#=10A=11=\n=C9=C8=DA=80#=84=D0=C1=E98=81=14H=D4=83=90=01=AB=F8=3D\"=E0Zd{U=19=D8=01=8E=\n0=89=8E(=9Dw*=A4=9D=C8\n=F5j=01&H=0F=D1=E9>=98=E2=01&=10=02/h=02=A5=95=D7#=E8P=C2Q=11=90=A1Z=15=F8=\n=01=CD=BC=C5=A7=E1=02=B0(=B2=A4=00=0B=F8`=8A;=E0=8B=1D8=82/=B4W0=92=97t=93=\n=D7=97=A3=13%*=A6=BD=3D=02%=00%=BA=AD/=BD=85_=F8=D5=D3=FA=EC=8C=B6-=C9=1A=\n=10=17=C4=08A!x=82&8=14=11YVE=C1=0F]=84¥=C4=8B=DC=7F=9C=DC\n=A5=CC)=DB8=EE{=0C.:=02(=FCp=E0s=0BM=D6=1A]=DA=C3=E0=14X=A4=E6=19=88=13@,=\n=A1H=81=19=E8=AA=16=98=81X=F1=01=95=D0=91=0C=8A=8E=17=D8=9Bji=01#=80=81=CE=\nC=01=87=81=81\"=B8=81$R=3D0=D3=DF=F5{=8C=CB=A0=AD=DF=9BZU=11=E2k=15=8B=D2=88=\n=9E=1BX_&(=8F=AF=D2=1C=0BY=A5(PM=C6=C0=C3U=BA=DF=BC]=A5w=AD[=B3=8D=DF-=E6=\n=D7=F9],=1C=E0S=1B=E8=01(=F0=01.p=18=D2=D0=81=89{=02;=E0=C5=C5=BA=90=B4¥=D4=\n=03=C6=D8E-\"p2=AA=1E0D=1A=A0=83=A00=8D-=DC=01 =D0=A8=87=C4=DE$=82=02=11=1D=\n]=D3=C5`=B4=02=9A=1C=D41=1A=08=1A=17=C8=A5C=D1\t=16=D0=01=95=90=81=94=D0=89=\n=93=99\n=16 =02=BB=D0=01\tJ=01=E5=C9=8E44Td5¥=A2z=8CO=E2=01=1FP=01=1E=10=E2W=FET=A9=\n=04=8B=11=DE=8D=84=9D=17{=9D/=E0=FC=12=82=CE=C0=02-=90,<=9C:=FC=0CJcR=D2,=\n=E62.=96=DF=F9Uf=FAU=0Dw¥=94<=B4=8C4=F4=01=F9=CAC=92=DC=01I=81=A8=81A=91=03=\n=EEX=19=F8=01=D2=D8=81=A21Wcj=82=B6P=D0Tc=81G=CB0U=85#=0C=C6=B5=13\n=96=12P=01=13=E8=81=E5=B8=8A=15=18=A4=DEx=81=D4Aa=12=18UN=16=9DS=CA=A7¥=13=\n=02=B6=88G=1B=98=A83=F0=81=CA=A8=01=F0=13=910=E8\t=CD=83=E5=89=B6Hg=EC=8Er=\n=81=BA=1A=D0E'x=16( =82=1F8=02=0BY=D2\t1A=1F=18=D7-3=E6=94‾=DF=F8M=DF=A0¥=E6=\n=97=BE=81+P=B0=82Q=14h=DE=81=88e=82#=A8(O=C2=81o=96=92=04U=8CF=95=DCE=95=8C=\n5=00=82=ED=03.=CE@#=94U=0C=AB=EA=91=054=B4C=16 =DA=03=9A=DB=91g=96=00=96=E4=\n@=9D=9D=05=92=958=81=B0=9A=01=9D=FC=08=82=87(=01!P=0E=13H=01'`=0B(=B0e=F2=\n=F0=CD2b=C8$=10=D2=DC=A0=E8=E9=BD=D2=B0=88a-=99=97Ir=8A=A5=A5=03p=EB=10%=C8=\nT=19d=CF\"=C8=02=93T=E9=94v=E9=97VfQb=EC=EA=BB=E1=9A=8E>&=F8=E8 H=02-=90=02=\n)8=91=1Cp=82n*`B=99T=04=AE=D0=1E=C0=AC=0Bi=82!(=02=9D=06=BB!=90=82 =80=8C=\n=03z=EA=95=D5H=8B=F1=C8=19&F=D1=81=E7=ACR=92}=D6=D9=11=10=01=11=D0=95=12=C0=\n=01=DD=0E\t=B5R=01j=DC=0D#=00?=B3=05=C2=C8=98=81\"=E8-=CB!4=E9=ADk\"=9E=CD=FA=\n =D7=B6=C0,=CB=AE=82nL=02=CCj0=C9X=82?=1E`=F7M=ECc=B6bK=1D=9F=C7=8E=1F=BE=\nT=E6=CE=D06j=AB=E9\tA=18-=10=D7! =ED=96=FA=01o=02ja=EC=EF=C5=10;m=81O=0Ba=82=\n =90=82{=CC=DC=1C=FB=00=88=1DOb=C8=88Ap=06=10=16*=16=A6h=E8=F0=E1C=14=12'=\nR=AC=98=02=C7=C4=14Bf=C0@=91=E2=85=0C=140T=98(Q=82=04=CA=94#V=92X=E9R=04L=\n=972Y=DA8I=02F=CA=9C&K=98=A0=E1=A2=05=D0=19In=D8=082=83=C6=0C\":b=0C)=92=83=\n=8A=8B=15,VP=AD=B1b!=D6=ACZUP=ED=EA=F5=EBW=16b=C7=B2h=F1=D3=85=0B=1AHr=F8=\n8Rd=88=93 :v=CC=90a=F7=0B=8D=1A;j=D0=E8=EB=F7/=E0=1A=82=07=13=AEa=E3=87=12=\n(D=89=DA`l=E3=F1=0D=1CAp=DC=A8=EC=B8=B1=E5=CC=91s=00=89=C2=E4=07=10$h=80=F0=\n=F8Q=C4G=8D=1FB\n=C2h=ED=BAu=8C=A51^=D36=18=E3(=0E!HvHn\"D=8A=13&Cx=E8=08B$HA=BB3=8A(d=08=F1=\ny=C3=8A=D2)=AA=80=F1P=85=0D%;z|q=01=FB=D2=85=89=F0&U=CE=94\t3fy=13-e=E6Li=D2=\n=C4\t=144=C4=B6=88a=C3=05=16=18:=A0=E4=D5=F1=02=C7=112=1C=D5=C2X=3DL=B5=15=\n=82=0B=81=B5 Xd=8D=05=94Y/=00=D1=D8=12>,=D1=83=19;=E8=80=84=0Eu\tx=94=0D=80=\n=89=98W=0D=A8=15v=A2=0DBtA=C5=10@0f=C4c1V=E6C=0EQhv=A3f8pf=DA=0E?=F4`=C4=12=\nE=D0`=84]=B6=19D=1B=0C=06=E1=00=C5=91H&i=D0=0C8=00=01=84=0E9=E0=90=9BjE=1C=\nA=C5=0E;lT=90A9HQ=03=0E:¥=A5=02t=D0M']CR=A5pU=10=A8=B5=F6=82=0BD=0D=89=82=\nY6=ADW=DEy}=96=F7'K:=B5=90C=0E=DA=D1g=03P.=D8=E0=D4=0D?=045=C3=0CL=C9=F0D=\n_S=9D=99=A0V=0Cj*=95=83=F4=01=F5=02=0F=A8=FD=80=04=12<=F0=B0=03=0F=3D=F0=FB=\n=05)=AB=90=8E=F8=D7=89=83=D9=80=A2=0D>=F8=00=04=13=95=E9xYe9 qe=0E7R&l=99=\n=94=05=DBD=89H=D9=05=A6=91=CD=DA0=84=0F=B29=F9=A4=0CJ=D8&E=10=BA\n=E1=A3=A9<=D8p=AA]=FE=D9@=04=0E1x=DB=C2=0E[=B9=90f\nkz=E4=90\n>$)=04=0EI=BEp/Z=9F=1E=E1=C2\t'=D9=C4g=9F=E7=01=FA=A7N%=9C=90=C4\n6LA`Yb=B9=80C=94=0C=97=05=04=0E-=D00=ABU4P=85i=A6`=B5=B0i=A7=9E=BE=D0=02=0C=\n=3D`|=D8=11>=E0 E=88=AD=BA|=94=88=82=3DV=C3=0D2=CB=8C=F1=CD=8D=F9@=05=11-=\nF=91m=8EB=DC=BA=05=8E7=E8P=F4=95=95=CD=BC=EAQ=CB=E6=D0lAu=D9=A0=03=B3=D3=1A=\nD=03l2=0Ca=04Q8=D4:=E1=0F=CA\nH=C3=11-=D4=D5=97=0C=A8=B5=80=83B=ECBd=11D*=D4=9C=FB=DD=0F=B3=C5p=83O?=91=\n=FC=83=0C,=F0=84BI9=AD=14=B0=9F=03=CF=D4=9EI'@(=D6=0F=0F=FA=F0=82=83=F3I=F5=\n=F1W=1Cg=C5 =0Bl[JU=C8=13=F3=F0B=0CV=CE=10=B6`R=F8pC=13<(=11=06_H=BD=0Cs_=\n=B2=FA=D0=C3=85=95=FD=00=99=101=CA=A8D=CA=3D=F8=F0C=10=C1f=F6=AB=10_=08a%=\n=0EJ=E4he=D1=991a=04=1C=3D8=C1j=0F=CC=DA=16=AE=0E54ku=0E=AE=C5=00D=92=13=12=\n=D6=EA=B8@X=B5BB+=C8=90=95=DBn=A3=197W@ =05e=0E60=01=D4=83$=CF=E0B=0D=EA=CD=\nD=B8=C0=0C=E7=92=F6=90=80'=AD=C9=97=83Z =04!=88=A5+=94=93J=E5,=A7 M=B1=80=\nFd=91X=02=B9 =BF[=11=C1/58=02_\n=D3=97=D7=C1=0EV=82=01^=A8‾p=03!=E8=C0=07=BA=93Q=9C|`=85=1F=FC=80\t=C3=FC=A2=\n=0C=0Ev=00=04,=F8@.T=18=96ep=10=05=1D$=EDF=C1*=CD=11=BA4=17 =E4=A0.=06)=92=\n=0C=A6=A0=83=B7=10=A1=07F=9A=16=92=A2=F0=02(t=AF=087=98=81^z@=03=A2=08!*W=\n=91\n=FB=DA=A7=C6=E7p=A5=06< =88=0Cn =A4=D91=AC=055SB=0DX=E0?=80=11N=80=03D=89=\n=DFJ@=03=03=C2=00=8C^=A1=0F=E46=D5=15\tN=10d1=A8A=0B =97=C7=90=01=85=06=C7=\nsB=0F‾=D0=BA=D6=89=88=84%4a=0D=8C =04?=8C=C1V=AA=B9=81=12 =A3=AB!=04a\tNHB=\n=10‾=90=03=DEL=A6LD=F8=DD=0F=8E@D ^)\nC=B8=12=10=83=B8=851=00A=08C=98=0B=11=92=C0=03=0F=C9=80l=90=EA=01eh`=BD=D9=\n`qN=F7=A2=13=9D=EES=03=B4=DC=C0=05e=A1=01=10.=95=C65=92=B3!\n=FA=C1=12=945:D]P=9A=FB/=A8=C1=BFX=F2=92>=FAQ'4CA|<=C2=95=B0=B0=00=06/P=A4=\n89=06PN=F5=05\n=F8+=8B=C4 =E4=9D=18q=F2U=9E|U=EC=04=03-=1F=A4=CAVJ=18V=9C=8A=F3=83+@=A1\nK=08=C2=10r=F0=03=1D<A=07K0&=15=8E=10=04!=F0=E0=97=C0=BC=12,=91=17=CC=C8=E8=\nh=08=A8=CA=C1¥D*4H=11=81=85<XB=95|0=CDjZ=13_z[¥=0B=94=E0=95 =04=B4=9Cj|_\n=14D=83L=DA@=06< =93`,=D5@=15=C4=E0=05%=10BJz =CF=11=D0=93`=883=89B=FF`=AE=\n=A8l=AE+=0D=D3=14#=1By=C8=06=B1=C0=05=A7*=1B=84n=00=A1D=B9=00=06$j=A8_<=C9=\n*=0F=8EH0M=B8U=0Fx=D0=84=B7=00=EF=06=3D=F0=15=12‾=87=04'=18=81=08R=98K=10=\n=80 =05=E0]a\ttP=C2=D6d=9AC=1C=10=FC=01=08S=10m=10=AF=C4B=9C=12=8AP:=D0=C1=\n=14`=9A=06=CE=EC=86=079=A8A=12vP5=A2=CE=E9>t=92X=047=E6=1C=A7=B6o=05}AM=0C=\n=AA=17=03o=C2=01=06=0E[P=0B=90=E0=82=9D,=17%#hIY=0F=D7=93=18=AC =05=F6i=81=\n=0C=08=04*,=04=A1=06=CE-=0B=E6=C0=12W=B9‾=85=A9n=A5O=0Ex=00=04:=3D=AC=06#=\n=D3[_q=F0=03=13\t&=B0=82=FD$=89@i=18=1C=14=A1=86g=80=A5=14r=F3=04=1A=B6=E5=\n=07=888=82=13LE=04%=00=81=86S`=C2=11=B0P=04=B9=B8=D6J98=0E=14=E4=F2=D2=11=\n=BF=D4=B5=1Aj=A1=10z=10=84=04_iU=D3l=92=93=A0=D0=1A)=E6=C0=8B=DD=1CY[=03=8A=\n=15=E2=D2=E0=A9¥=01=EF\n=B8=BB=83=BA=86mAb=99=0F=BF=14G=A0=12=8C=E5=04=01=13`J=AE=CA=82G=FET.W=E0=\n=01=B9=9A=D9@E=FB=AE=17+=9A=AA=D3=05=81b=83#=80=01=065=EB=C1=10=D0=D2=85=B3=\n=F45F*L=82=7FI=08=D1=AB=12=C6D=8D=D1=01=10=9E`=85=93F=AB=08Lx=82=ADl=15=D9=\n=C4=1Ea\tJ=A0!=0D=95=80=04+`=E1T=A7=FA=01=114=94=D9=1Fh=E8J=14#10[=AB=83#=B8=\nA=08L(=C2=166K=A8& =85=06=CD=B2=8D=93=08R=83=19=98=9415=08^=0B=8E=D0=C0=E6=\n =88=B8Pm_VZ=A0=A0 =E4x=05-=E8=01=1C=B6=D0W=7F=A2=80+3=C8AWHP8(=A3=E4=06%=\n=80A=1Eg=C0=02=19=04!D=3D=F8=C9=96=E1=DA=E5}b=EE^=07=85=C2=10=F2=82=14=BE=\nL=E1b.=EA=ABwlz=83[=FAN=08#=943`H=9D=17=A3=DD=16c7=B0a=9C0¥=04\"=18=A1KE(=82=\n=16=800=BB@=F7=A0=E0=816e=85=07=DE=D3 p=81\tQ=D8=EF=940I=FB%L=8F8=07=C7=EC=\n=E1=10=96@=06=D0Fz=96=CB|1=AA_c=9B!h!x*\"=C3`=BE=F8=CFE=D6=BA=9Cm#'=82vp=A9=\n=B0|=11\n*=8B=0D=9A=ECX=82=EB=06=D0=8F=D7=B5I\t=BA=AB=82=13x=07=066=90=02Y6=B5m=F6=FA=\n=9A,.h=02=0Cp=F0=93=9A=BD=FB=AF=82=E9=9E?_=00=031=E4=B0\t;=18=0E=0F¥=F7:=13=\nzM070=82=C9@h=98=1FD=D8wK=08MbQU=05=DF=15=BC=EEv?8=DEsy=84)=ADt\t]P=C2=8A=89=\n#Z=1DU=DCW@=A0p=10=90=D0=04=DFhH=08;$=0E=A4=84z=EA=C97=B3J<(p=08=87=93m=1D=\n=0F=B7};=E8=B1S=B52=03=04q=CE=05A=A0=81=0E=94=E0=83=19|=AC=05=F1D=8F=CF=03=\n=C5=93=9D=80=CA,@=E1=81=0B=9C=D0k=AF,=DD=C8=AC=DFA=0BV%=98#=BC =07=AE#=91=\n=C9=FB=9A=F0=18)=C0 =07Z=8F=81=13p=9AX=B1=8F=DD=92^=F8=96c=A1)=B4=9DI=C1d=\n6=B0=D2‾=E9Nr=1F=B0=D4Tv?=BF=EF=F0‾=F0=D2N\t=08AH=82=12=A4 =9C#=84T=B4=AC=AD=\nxH=F1=FC=03#@=81\tX=E8R=D8=AD=9A4=81=DC=E4AI=8A=E9=00=0F=94=1B=AB=D0L=0B =8A=\n=13=0C=01H=E8=D8S=CD@w=D9=9A=E5pN=D3=C8=C0=84=DC@Y=E4=80\t=C4=DE=C0=9C=95\t=\n=88=04=06%=1D=A7=F0=DE=B6=1D=12=13=94=C5=AA=D9@=0C=D0=05=0D=84\ne=C0=D1Q=E4=12=DD=11Ae=B8E=D6 `=B4=00=C1CQ=D4=EC@=D3n¥=81=10¥Y=DD=8DJe=08=\n¥=10=DA]=B7=A4=CA=DD=A9=1F=A2=EDW=A0E=A1=FBM=81=11=FC[=A8=B4=96=16j=07=A1=\n=8CX=12=94\t=10=F4=08E=A1\nH=9D=0D=01R=1E=0D=EC@=0E|=C1=0C=F4@=87=B8=CA=BC=11=C4=10H=1B=E7=FCu=1E=FC=\n=04=DF=AD=95=93=04=AD=C0=F9=F4=C0=0Dt=95=148=1B=17=90=C0=15=EC\t=A0=18=E2=E1=\n=14=0C|=BCI\t>=C8=CA=B1¥=97Q=C5=C7=B0@=88H=81=0Ch=C1=10=0CA=F5,G=16=D8=94=87=\n=D0=80=0FlG=0FL=01=0D=D9P=13=19=01=94P=81=80=10=C1=0C=1C=C1=EB=84=DD_=CC\n=B4=A0Pi=18=C1=11=98=86=A5=99=C1=15=14¥=136a=DD=F9=80=14 =81=12=1E=DC=A8=DC=\nb=14R!=83=99=8A=86=A8=A1=A6QI=17=92=98e<=86=15=08=C6Q=F0=C0=B2=14 6*=C7=87=\n=90=0F=0F0=C1=F4=E4=91pq=0C=BC=A8=80BL=D9U=10=979=ED=E19=E2SI=C4=93=1F=9D=\n=84Y=B9=07O=F4=95=0E=E4=85=C44=0Ex5NW=D8@=1Db=8AW=CC=CA=12=A4M=0DT=C9=17=99=\n=97=1C=85]@=DA=05E-=01=114=C1=11=08A=10=F0F=0DX=CF=87,=CB=7F=1D=D7=BC=A1Y=\n=0F=14A=13=FC@=01=140=D1=87=0D=C1=134Z/:=E1=DD=B1=DD=10=FC@=15L!=15=14=D8=\n1=BEd=10=18=C1=10=94=C1=15p=C1k=11=07=11pHka=DA=12=DC=00=120=CD=00^#=E5a#=\n=1C-=8Br=F0@f=D9@=13tS8.D=0D=A8=8BVh=01Q=D8!=CC=AD=D7\n=C8=0B=0C=04=0E\"=86=E0\n=90=07=01=95=80=0B=A8=80=0C =DBm=1D=D5=0B=FC!H=CC=87X=9CO?=92=9ET=B0Z=0CT=\n\n$=95=85=90=B8=C0=E7=BD[A=9C=D6=FB=85=C1=18=9CT=95l=8D5=16=A5Q*=C7C=F5=C5\n=F1@=1E=D4=88=14=94=01=13=08=C12=96FI=A2=9F=C1=F9=80=128=A4=11 Zh4=01=10,=\n=01=A2\tc=85!Zg=0D=8119A=18\n=01=11l=01=12=10=81m=0D=9E=1A.=C1=0C=FD=A4=0D@=CC`=16=E0=1Ff=E3`\nH=16=C8=80?e[V=D0=1AW,=04=13dE=CD=C8=C0=99=FC=A0cT=E9=1A#=F9=80=3Db=84W=B2=\n=C7=E1DE=01=11=90<=8E=E0\t=E4=C0Q=A1=05=0C=84=9DP=DD@=13=11=08$^=E0[J=DBTL=\n\"=E7=C8Z]=B9@=E8=D0=80,%\t=0E=A0=C1=11@A=11,=10A=F2=00=0E=DC=E6`^dD=D9@=85=\n=15=01h%=01=14t\t=00v=8B=EF=80F=A09=C1=C1A=01=11x=C1=DE=B5=9F=A2%=C1=94=80=\n=C6=188=E8gN\tD=AE=941=19=C1=83V=89=16=96=D8=02%=C6=E5=AD=DA`\t=A5=914=13Q\n=E6`=1AA=0Dd=01=B6}=05r*=88=8B=AA@^=80=CE=A5=A0=E3V=AC@\"}=E7\n4=8EX=E8=80=10=98=80=D4=1D=0E=0D=EC\t\t=B4=00\n=AC=C0=0C=B4=87z=14=0CO=9C@=D9=9C=05b0M=A3=B4a=91=B4=E5=E5T\n=E7t=05=05=9E=A0T=D8=C0=AF=E4=85=0C=D8UQ=F8=CE=138=C1=89=89=91=870=D3}=16=\n=A6=07=DD=80=13=FC8=01=18=18A=13=94=CA=A9=00h/fRN=1EA=15=D8=DC=0Fd=01=13@=\n=01=17=00=1E=A8!=81=16h=01=E0MI=130=C1=14=B4=9F=A2=BA=9F=10,=C1=14hA=12=98=\n=A6=1B=EA=80=15h=A1=A6M=01=1B=CC=E9c=91=1A=9A=DEf}=12=A5Q=D2=05=A4|=08=0D=\nP=8A=A5P=A0=0B8=CA=99$=CCU=B0@=A4L$=DE<=E5=8E=85=1E=E9%=C1=E6=1D=92=1C=3D=\n%X=FDQ=10$iN=C4=80=0F=F4=8B=11=A4=84V=16=D0N=98=C0=0B=0C=81=0D=D0Wc=00=0F=\nR=C8=D7$QE=15P)W=F0=C0=03=01T=E6=D0@=84=FC=04=11=94H=14(c=E3)g=AB=D8=E76V=\n_=0C=EAg=11=18=81I=F6=80j=02(=AA=F8=A2=98=06#=15=FC=80=14X=81=11T=81=13=10=\n=81=16D=C1=11 =C1=98=0E=01=11P=81i=1EA=12=B4=C8=A2=16=13=12$=01=194AO=F5=94=\n=86Z=AAk-=81=12=ED=80=12=FC¥fP^=81E\n=88=0E=F4=D4=19=DEg=11=1C=C5`y=D3Z=D6=95=1BJ=A2=AB:=CCQD=01R4=95=1E&=88T=F4=\n=CD=C7@=C1W=B8=C0=15,=17x=EDI\n=B8=C0=11=A0@t=FA=0B=05=8AE=E0=18L;=EE=04O=F8=C4G=A0=C5=BD=D0=80&.=8B=0DX=\n=8A=97Q=E9=CA=B9,X(A=1D=D1G=B5=91\t=0EX=C1p=00=01=DA9=E6=E7u=AAE=0EVC=A9l_=\n<=CB=130=81=F9u=8B=BB=BE=AB=80=0E=A8=14=84=01=E0%=C1=13=18=81=11 A=BA=D2=AD=\n=11=8C=81=11$A0&=C1=16=FC]fMI=A1=BA=1F=10=0CA=14=18=C1=13=F0=C0e=3D,=C4=E2=\n=D4k=3D=AE&=B1=CA=1C\n=C8=D8=10=81=0DxH=01=DEf=1B=EE=C5T=F5=C5=E7=B0=00=DE=94J=F7=94=0B=0Bpn=0D=\nt=81A=BC=C0=1B=80=8EV=B4=AC=CB=B2@=0D8=DF=96I=0EU=E0@=BF=B4=C7>=A1=8B=BF=F4=\n=CB=D3=FC=E8=00x=BC=C7=0B=A0=00=D1=1E=EB=08=A2=00=12d=DD=93=10=04=DE=1C=C8=\nzY=85:R=C5#>=08=0CX=C8=C5¥=8C=AA=F0E=D8]=EE=A8j=AE=CB=C4 =0E=10=96=CC=F0\"=\n=B8=BAk=13.=E1=C3!=01=134A=C1=FE=1B=FB=FE=1B=DE=D2=ED=11=F4=AB=18P=01C=06=\n=81=FD=06=81J)*=0D=C5=DD=E3j=A1=16@=ECk=B9k:=E5=C5=F7=82H=EC=1E=01=DA=10`=\n=D8=CE=00*-=01=0E=F0@=12`L=19=D9=C7=00B=CA=10=AC=8D=80=14=81=15=10=81=0C=F4=\n=00=E7U=E5=E5¥=0E=0B=BC=00=A4=9C=17=EC2=CCO=00=C1\t=A4=00J=A8=87\n=D8=91Y=10=01O=B0=CD;-E|=04o=C5=B4c=BF=BC=07|=E4=91?A=CD=17=82c¥=8D=1E#Q=10=\n}=A8=CA_¥=95=AB=8C+=F7=82=EC`%=D6=DA=0D=06=83=CD=CE=9C=D2=A9=F9=15=DC-=DA=\nJ=14=CC-=FF=11=01=11=B0=EF=FB=F6k=FC=8Eq=FC=FC6=81k\nA=11¥=81=14@d=FBqA=12=E4=E4=E5=3D=EE=E3=AE=A6=16=060i$=D6c=CCi=1EP=C9=B7=E6=\n=80QR=1Ea\n=01=1E=9D=CA¥=98=CA=ED=E0=80=D6=A9=A2=0C|=8B=11=D0=88=A9=C9=C0Or=04q=B6=1C=\n=AE=D5h=8E=F5=D3=13=00A=F0=99M=0C<=08G=8C=07>=A1=80=0C=EC=C5=0B=A4=00=D1=11=\n=08=C9=E8=DA=FED=D7=0E=C4=C0\t=C0=07x=84Gx=9C@>=BD=D6lPM=0D=F0=C1=0Cl=81or=\n=0C=0FD=A2=91=D1G=9D=18=05=CCh/=137q\t=D5=00c=A6=18R.=06=F0=04,=99=92=EF=15=\nN=D8=14|=F1=16=E4=92=13=EC=9B=17=7F=F1=BFM=D6=11=D8=E2=12$=01=12=1CA=17=8C=\ns=BFV=81=12P=C1=15D=EA=FD=DAo=CF=00=AC=17=BC=C1¥=BCV|=BEV=1D=EB@=0F=EC=C0=\n=14¥=E8=0F=E8=C8=14=ED3=AAlo=91=9CZ=B8=E0@=F4=B1A=A5=EA=80=16=F4=80=10=FC=\nlA[=C8=A6m=90=89=12=10=E1j=C8=00s`=A9=04V2V4=C7\n=18=1F=E7¥=89f‾A=BD\t=01$=E5=00=81=98W;=9A=80=15x=8B=11,EC=10=84X=B0=CD=E4=\n=D4=15=0BP=81=BD=BC=C0+=C7=80,=D3r\n =85\n=B0=1A=1Aq=15=10=14q\n=D2=15=E8=12E=13=B9=0C=16=B0\n=B9=96k5\nF=AAtI=DD=F5$wV=B3=16l=07=80j\"=15=D4=E2=100A=18=A8A=104=81=13l07=A7=AB=96=\n=A4=01=14 =C1=14L=01=18=90=CA=14=90\n¥'=C6=14(A=85=B6=F3=02=19S=10=F0@=A6=FE=C6=89=D51=F9uA=E21=01=1E =01=17=B2=\n=C5=E5EA=A7=022=10(=87=86|X'N=81=13 Af=D5'=98=C8=00=BD=04=81=EFP=1B=1D=F6=\n=A3=8Fy=D9$=9A=9A=81=B8j_8A=DA=80=AC=C9,A=BE=A8=CC,=FF=C4#=ED=00=0C4=C1=9B=\n=185}=18=C1=0B=FB=D0=C0=D0=9D=00=13=D0=B2ngD=05M=819=B9=EAo=C2=CF=D2=3D-=E7=\n|S=F6=C8@=0D=C4=E7=A9P=9F@=DB=E7`i=D2=A9=A0]!=9B&=86=92A=F0=DC=E4=DAZ1=0D=\ne=D8=12=08=07=C0zq=11`A=12T=C1=11X=01=14PA=16<=C1=184=81=14D=C1=19,A=C2=8A=\n=F38=BF=C5=02=19=C7=FD.=10=9C=DE=A2=10=C0=ED=A42=EE=E3=16=01=10¥A=14D=81=C0=\n=BE=96=12=D4=A3=EBL=01@=C8=10(#FA=83=05w=10=14=C8CI=0E=1D@=844\t=E3D=88=90=\n=1CMf=10=8C=01=E3=85=8E*3j=D8=E8!c=85\n=93'M=AEH=B1=92eK=96'Y=ACX1=83=C6=19=198p=D4pq=A3=C8@=194=80=02=E5=91=03=87=\n=8B=19(=90=98H=F1=82E=0B=187p=A0=94=C9=82*U=1C-=B0f=CD=F1b=05=0C=18'R=9C=10=\n=8B=02E\n=1C)T=B0=F4a=D2e=FBK=94o=E1=C2=959w=05=D5=17.h=F0=E8=D1=03\t=D0=19=7F=01=FB=\n=14,=E3/=93);=9C8=D1=F1d=C8=0E=1DC=AE=F0=81r$=08=0F=1D=0Eud=D6=B1=833g=1E=\n=9F}=14ILeHi\"=A7=8D0=F1=A3=C4J=13=D7=89=9D<=81=E2=C4=8A=923J=92 I=B2d=CB=10=\n/C=AC=08\t=12D=C8=14%Q=BE$=112=87=B3=E6=1C=CF=A1=E7P2=86\n=12=D1=3D=1C=F3=B8Q#=E3=E0=83=075=C6=A82d\t=8E=1CQ=80=141B=04=8C=E3 =03i=E8=\n=E8=D1=E2n=0B=165d=FC=88=CB=B6m[=15%g=EAa=86=1F=82=88!=87)=8A(h =1Bh*c=BB=\n=EDj=D8=08=AF=B1R=A8K&=1AJJ=A9=AE#=B2r!=08=17Z=E8=C1=85=11a=18=8E,=1AP=18=\n=8B=AC=B2=DC=EA=CF=A5=FD`<=89=AE=B9=A8=CAJ=86=1Ap=F4k=06=1D=FE=1Al=A0=BFj=\n=08=03=08=1El=FB8=02=87=1Fx=D8=01=88*=84p=C2=8C(=84=E8A=B3);=F3=8C=07=1F=96=\n=98=E2=B4=D2=868=ED=88\"=9Eh=C2\t*=98h=02=8B=C4=B2x=02=0D(=D8=CC=E2=0B=DC=92=\nHB\t1=95 M=B8=E1=82`=E2=88'=A8=10=02\n=1F=A6=8C=EE9=9Ct=98=C2=87=1E=AEh=0E=8A=1C=82=E8=CE=A7=EF -=08=88%=82=C8=E1=\n=06=F9|=F8=C3=07=CEn=D8=81\n=81h=AA!=A6=19W=A0a?=17_4i=060th=A1T=1E^=C0LA=C2p=B8!I=1F‾8b=87=1B`=D8=08=\n=87=15G=CDP=C3=BAZ=08=E9=85=1B=82=E0=C8=86=BBFt=81=A4=18dXQZ=16_@=D5=BF=18=\n=E3=92i=0BR=ABj=C1=A8=1A=82\n)0=1F\t+=02=07=A0=B83=02=A8&xxb\t=1F=D6+-=3D*=A6=DC=8C=B3!>=DB=EB=CB\"=B8$=E2=\n=08&=ACp=E2=88+=98(316=B6=F8=A2=0C1=C4=88=FB=02=8A(=A8Pb\t=DC=B2=80=A2=0D%=\n=88=A8=08=CF ‾=F8=C1=87C=B1+=C2=B1=CB=A0=BBl=87ZE=1A=A2=87#z=A0=E1=87=1C=8E=\n=A0=C1=D1=81\"5=C8+=19`=90=01=8A=1Bn=00b=07(=88=C0=C1=0B=99A=FD=8B=08 =82=C5=\n=D6Z=B7=FE=BBA=08=19=EB=CAO=A3=FCj=B0l=07#&=0B=CD=E9=8Dd=E0a%=AC=84=FD=8F=\n*=1BZ=10.>=A0=80Pb=06$nx=C1m=18x=D0B=86=14=C8=A2{=C5=A5=FB=C3=F6=AD=19]=A5=\n=B1=A9bk=88=C2=06=1C{=F0!=08=1An =DA=C7!d=06=0C=B0=C4=D1-=BC=87!=89x=97=CA=\n=CEx=B8=A2=08$pM=A2\t.=BB,B=8A.=C0X=A2=E0&=C8=18=A3\n+=AEh=1D=0B;=A2=808=8D=88=E3L=A2=08\"=86=A8H=F7)=8E@2=C9=91=EB=CD=8C=87\"=84=\n=00\"=87=C1=C1=BD=C1=07=C7=C7=A5=B9=E6=8D=BC=8A^=86#l=18=1C=FB=F2=C6\t=DB!\nQ=E7=D2=1B=EF=97f(i=A5=94h=CA(=86=1F=08=1B=C2!=DC=A1@=E2=0B$p=C8=CC+%=D2=B2=\n=81=86$`Z=A1=05=C7.=FD=8B=06=1Cqd=83Nq=84#/hAZ=C6g7=16}=8Fi=FB!=D5=8ChP=15=\n=17t=0B=069=A9=C1=C7x@=842=F0=A0y=03=11=90`=98=17=AA=1E|=C6\n=9D=B9=DC=0E=AE=E4=83'=CC\t\tJ=08B=C6@G=04=CF1a\tM=88=82=13=AA@=85*=A4=E1=0B=\n`=E0=C2=18=B2 =06)D=C1\n=13=93X=13=1E=96;=DD\t=A1K=FE=FA]=F04=B3=03!=18=C1c=DB=D1Q=07=05=13=A9=F0=F8=\n=A0=80/=08B=13vP=BD+=DE=C0@H=10B=11Z=90=83=B0=C1=88=81h=C9=01=02=C7=F7=1F=\n=17=E0=00g=D0=9AA=A5t=10=04%p!=0DK=B0=C8H=A0=A5=03=93xe=06)I\t=0Bh=90=03=C2=\n=CC`Wd=18=02=10p=FC`=83=E7=08=81=80M=B8A]=B8=D2F=17=C1h&=11=8CIL=800=97=FD=\nU=A5[.=B0A=18=91=E5=98=1D=8C=84¥=E4b=1E=0D=CCS%=CB¥=AE=07Lb=82=10=94=90=05=\n)La=89C(=02=13=8Ap=84*,=C1tV=D8=C2=14=A8=E0=85.=B0=E1=0Cc=08=83=16=DA0=05=\n)=A0!=0DRP=C2=11=F9=D5=04#=E8=8EKQxb=14=A7=E4=03=86=1C=AA\t=E0b^+=9D=07-=19=\n=F4D=06#=E1\"=B3¥=F0=83=9D=F8=C0=068=D8=C1=05q=00=85=1D=00fTJ=D3$=0B^=B4=82=\n=1E=D4=E0=05=1B=89=01=18‾=D0=83=1C(=A9\t|=F2=A5=0E=B6#=03#=0C!=06(BK=1C=A7=\n=82=1FFzs=95M=00=14=CAp=E6=95=18=CC=E03=82=D4d=DEb=14=B5=1C=B8=CC=93,0J=0C=\n=B0B=B6=0E=89=87P9=90=C2=0E|=80N=1F=91=B4J^@=92\t=A9=94=84$=F1=E0=07D=80=D7=\n=14=FB=C2T=91=D2=14a\tZ=88=82=9CL=E7=04/=E8p=0BhhC=00\n1=86-xA=9AQ=D8=82=11=A1p=87%d=01wJ=1D=C2=97=86=F4=03=CCM=A1^=98=E3=0B=CF=1A=\n=D7#=9D\nF1GP=1F=12tP=14=10=81=E8=05=D3=D3=01=0F=82P#!=10=94=06=3D=E0=CA=1A=DFrR=97=\n=F4`=05J=A0=C1=15r`=D0=18=DC=A0=07=B6=02=02=AE=82=80=9D{\nD\n.x=C2Q=02=1A=03)=18!=06=DC=D9L=97=9E=10=04 ¥=E6HP0(H|=B0=02=17=BC=E8=A4=D8=\n=9A=CA=0Bh=B2=03=F8=0D=14‾/=10g=B3F=F4=02=B8=C9`\n?)Bw=D4=A9=D3W=D6 =A1=0C=B9R=F0Ti%.=E9=CE=08J=18B=99\"=A6=04)=88=01=0D]=98=\n=82=1D=B4=F0=861=D0=81=0Dj=F0B=16=90i=05=1A.au=C1=E4=97=EE=9C0=85=B1=1E=81=\n=89B =02_=80'=BC*=0D!=92=E7=9C=FB=ABO=F6r=99 =DC=C0=06:X=16V=9A\"A=FB=C8=04=\niU=01=CA=11=10{=12=C5=B6=A5=A03iB=0C=84+=04-X\n=07S=C0=D7=0D=920=03=1B=08Df%AB\nh=F0=12=93=E8@!\n=15=C2=12=D2P=9B =08=D8|9=BBJ=86¥=F2=C66=EA=ED?=FA#=9EB'=DB=B8=FFUo=07^t=9B=\np}PZhi=D1=95=CBU=DE=0F=B6y=04(f=863@8=C2=96t=E7=C7!D=01\tM0=E2=12=AC=10=85=\n=EDfa=0C`=00=C3=17=D2=80=05=1D=E2=D0=CB=05K=02=EE=A6+=1C% =A16O=F0=01=1F‾=\n=97=DF=CE=8CP/=F6=0B!=08Y=E9=13=C7=95=81=08<8=82=0Fp=B4=11=FBPe=82T=C1=D0=\n=03=BB=A7=82#=9C=EA=A4e)=8B\nl0>=C3\n=B7=060=D8=15=F2B=12=D7K=ED=C0U=8C=15=DFEU=A0=04=AFd=06=07=EEC=02=14=BAt=99=\n!d=E4=07=FBv,1=7F=FES=C8=1D=DB6=A3Q=D8=E7\"=83=B2=9D=EA=1D!=A4=D1=EB=D5=F3=\n@=18B=1F$.=809=80H=11f\tE+=E5=8A=97=BD$B=11jW=A7=D9=C5=CE=0EXh=DD=15=ACP=85=\n1=90=A1\t=05[=02=18=BA =85=DB=81=AE\tI=F0=98u=AE=90=E7=FCb=A9=D0@=90=1C=B8=80=\nr=83=10=D2d=08=AED=1C=0D=82p=A8=00n=AF=06=08=0E=96=FEf=C4c\tW=FAnu=93=81=16=\nx=D0=C5=1B a=06J=00=02Pt=00p!=B4=C0=06TYA=A7=F8=C3=12=1E=D4Q=08<=F1=C1=11=\n=A0`=84=EC0wj=E8=EB=A7IJ=8E=E3=EF=F1=BA.@ =C2=B8h=E2=05=1C=10A=9F@=E0=19=14=\np=16=D2=E7%=F7G48B=0E‾PX=96=A9L=80=F6tHt=A8,=B2=BD|=ACc=1B=AB=08=11=94=D0=\n=06(d=01=AAurX=14=18V=86/l=81=0D=89)7=13=AEp=04=DA=E8=FC\t=CE=BE=0C=E6^>=D3=\n=98=E6L=89\nE=00=82i=8C=80=A5'=F0=A0\t@1=02H=80=82=83=E3=B6=120=83=0B=D7=0C@T=15Rm+=C2=\n=FE=FC^=B5=148-=82=AC@=06=C0}=C1=B2J=D4=B6=C1-X&*`=C1=C2=15=88=83^=3De=07=\n=BD=DB=94vp=80=DC=18df+<=C0P=0Bt=00=86B=86=DCZ=FBy=F4=8C=EE=A38*=EC=8A3=99=\n:=14D=19=B5=04 =0C=DD =83=B9c=0E=A0`=AF+=14=8E=AD8=11=14f2=E3=03(=08=81\nO=F8=97=D5=87=101'4=01Nr=FAB=C5=D8=84=86'd!1X(7=15=B6=FF=84`n=C94D=90=AF8=\n=E5=9D_=CD=F4@=08Q0=03E=AA=E03=A2=E2=80z<=00B=18=B8cf=92=8DGh=E2=7FpD=06=B2=\n=C2=E3HE=E1=E0=02o=E0h%=A4e,P=04=05=86=03=06=9Ae><=04D=B0=E2=08^=AE=D0=C2=\n=86n=FC=C4=82=06¥=A0Wp=E4A=CA@fFL =\n\n=A2=08=A6 =B28f=06=04=04@=1E=10U`=04}D=C5[=0CHJh` fl=07=C0=80=08=8C=C0=EE=\n=A2=80(=96`=08=AA=A0=F8jf=A7j=C0V6=A3=07=9C`s=A8`=0C=1A=E2=F9=A2h=07=E6@=08=\n=92=E0=0B=A2@\txi8=84=C0\n|c=08=BE*7=E4=E46=02=06\n=9E=006¥=A3\tj=C3=0F=98`=3D=D8/=FB=12=A3=08=E0/=FE=EA=C5!=00=0B=E5=F8=E0\n=86=E0=B4=9E@=07=12c=07=A6=80\t=E4=AA=C9=1C=07(=90=00=EED=90)=0E=AE=F3=180=\n=B16I=05|=E0%=CC=C2n=C4=02,N=C0+V V=B2\"+p=80=94^NXV =A7=AA=C5=04=90=00=05=\n=10=CF<¥/(vp =8A=E0=06¥=A0=06pB=06=CE=A0=C4=EA=02=F4=AC=A5=F1(=AF=07=06g=06=\n=AA@=07=84KAf=A0\tr=A0\"=9C =0C=FC=9A=A0x.C\tFN!v \t=07b\n=FC'>=94 3=A8/v=AE =3D=9C=A3d2=A3=07=94 =0C=84 W=B4Ic=86=83=08=88=83=89=82=\n\t\tt#7=96=E0=0C=C4=AC\t=C6`=FC=A8=00\n=AC@=98=92=00=0Bn=87=FDh=08=0Bz=C7w=AAD=96X/=08=C8=00=08=D6C=08=92D>T=8E=07=\n=98+=AE=D0)=84h=00=85=CE=08?j =E3=16=8D.=1E1.=02J=05f=E0=F3V=C2P=00jE.Q,=98=\n@,T=80=06^=C0=08=16M=F1=16=F0?<=8F=E3¥=E0=04L=C0=04p=C0=07=BC=C5=05=96@$=CA=\n'=A7=9C=C0/=A8=A2=07**&¥=05=12k=CF=81=EA=E2=8Ed=E0P=82=00=07=84`jn=02=08=82=\n=00\t=E2k=08=C8=CA!‾M=06=80@=05!=05=84=A2=00=DA|=E09v`=CE=F0=80\t=90 =08=BA=\n@=08=00=05=EA6C\n=0C=92=0D=00K=89=EE=C4=EA=FC=B8=10\n=E6L=1D=D5q\n=D4=11=0C=A6=C0.=A1 =0D=BE$=08=8B =1F=03=A6\t=82@=0D=C2=80\t=86=80=8Ax=80\nz@=EEVi=07=B4=C0=FD,=E5=06=96`/4k=84p=C4=F5=FCk=A7=FE=02=0BB=E8xxF%=13=EE=\n=11=1B=EF-=86=CF$b=82G42=C5=C4\"&M =06L=E0=04=DCf#=A8=C0=A5=12=AC.>=91=05=08=\n=A2BL=8D*=AC=C0=04J=A0=04L=00=06n0=07=8AE=08=06'=07=BE=00=08=9A=00'F%=912=\n=E4=F3P=C2=01=F7&|=A6=82=9D*=E2\n=94 '=8Ao=06=F8=CF=07=B6 J=B4=E02=AC=80=0Dr=C0\t=E2=07+=BFC=D0x=AA8=8A=80=B5=\n=A0,w=0ECJH=E69=AC=B1=3D7C=07=DE=C0=0B=E0=CC=1C=AD.\t=AE b=AA=00\t=8E=E0=08=\n=90=A0=0B=08t7=8E=C0=08=D4=CE:=FE=F24NC4zg=0Bn=C78=AE=CD=08=E2oL=FC=CC=F1=\n=07=08=0CY=F4B=08=98=A0=0C=F0=ED=8A=04=F0G=98=C7‾=1Ag=C0=12O=01WR=E1x@=E1=\nX`=0Bf=80=0F=F0C=07z%3=C8b5Y=D3=04^=F25c@=B7=BC=A5=90=9C=C2>p0=076r=13[=E0=\n=04P=80=04‾=13=06f %G=AAXZ=00=08=9E=00=06=1A1&0R:=F7=06g@=02\t=08\"=91=E0=85=\nH=04=82\n8\"=92=FCq3=14R\t=84=A0=10=99L r=80=07=A2=E0!=F2=C03=AAG/=FCod=9E/=DA4=03=DA=\n=90@=86=B8=00=08=FC=948=A4@s=BE=B0=86=06=B4P=07T@=8D Q=FD2=1FS=CE=08=9E =\n\n=A8=8Ee=E0=EE3=FEQ/=A8=EE=07=00=E8=07=06G/=E2=AA|\nQ=3D=FD=07HV1rR=12=D2F=F3-fOo=EAB=16=93 <\nB=B8=EE=03&}=F37O=E07M=A0=05‾=E5=05Rd=F5=08=8A=05p@G=FCu=C0(=86=E0=06N=80=\n=04L=80=04H ,=80=C0[jDT=A8=82Ig=80)=C2=06=B1=18([F=82=08=AC`=F0=AEb=D6=BA=\n=83=06l =06¥`=B0BB=A8p`b=F4MM=99=EC=C1r =D4h\"'=80b\t=AA=84=F5=04e=C3=B8=D1=\nL{=A0c=FC=F4O)=03O*=87\n=C4@@=13TQ=17=F5/=FFr=08f=08\t‾ =\n\n(=B3=0E=E3=0F=85=F2=85=17s$Dq=0033=13T=ED=C7=F5=08=C7‾=EC=E7]`=A0Te=E2=B0=\n=1C1=A5j@4=11=E9=06=C2=A3=80`=E0=14Q &=7F=B3e=7F=13=05^`V=81=D5@J=A0VK=C2=\n7=954=06=90ugk=16=07h=E4=D1=ECb]=AD=94=8D=AA=15%0=EC=0D\n*=06=BA=00¥j`=07X =06D=AFM=FB=E2=06X=E0=05V=B1e=9A=F6=83=B2=88=C9D=8C=08=88=\n&#f=80[A=E2=07=82=E7=F9=D0R\n=FC=DA=C5=08=A2=E0=91T=CB)-=EEO=95=A0=0B=B6 7=A4 \t=8C`=0C=04vs=12=F5\t=92@=\n=8F=C2@\n<fR?#=FE=06=97=CF=98=801L=94=06=A2=80=15=CD\t=8B=8A=8E3=A2=C4=08=86=048p\"$=\n=82`=D10W\t=1E=88(_=80=D7=A0=86=05R=B0=9D=18=C7m=82+=05=F0bV]=F65K@IM=C0=E3=\nf`uK=C0=0CJ=82=04F=80=04z`=04p=97=04=10=D0=05b=E0\n¥`F=A0@=7Fpsh=AF=B4he=84&=16=17=F1=A8b#=FBF>&=C8Y]*=AEdf=F0=1E%\t=ED=8BG=08=\nc =AE=00>=A0L\t=A2k\t=E6=93\n=ED=CB=BEP'7=8A'_=F3=D5`=AF=8C=FAp'6=044\n=1E=13=87=8C=C0\n=00=B7:=A4=C0=CE=04=97R1=E7=BE(=93=07=82=10=08l`T=F7=CDq=8B=C6=7F|@=08=EC=\n=E53 =B5=06=88=00=07A=04=96=FC=1A=D1T=F5=87=07N5%=AA`*=EEcHh=82c=08,=B8l`=\n=08b=D6ey=F6X=91=D5=08j6=C9vv=05h=17wk=97=85I=E0ij=E0=15#=18=83=93=A0=F1j=\n=EB$=92=E7FF=EA=F3V=C0=062D=7F=E4i&=A6=82=06=9E=00{=00#!=D2I=8B=E8=88=F0h=\n=80=185=8B=07=D8=80=AD=CC=D6\n=BA1c=92@=0B=E4K8=D0=17}=07=B1\t=E0V=0B=B4=00\t$T=8F=B8=00\n=98 =0B<=06\n=AA=80@=89=A0=B9=06W=DE>=A3=CB=8C=00=0C=12=C3=8AXq=80?U=D0@=A5=B0=A8,6=90=\n2=80=9D=05¥Z=AD=E30X&=A8=D3B=EA=02(*XF=D4I@4=D4=7Fj@\t=E4=C9[Z=E0=08`=B2ew=\n=16YIxg=C3=07=05Z=80v=91=95=85Ey=04=E6=C8=04=10=B8*‾`Zi=84+=1A=F0=86=FF=03=\n=C3=C0=C5=90X=F2$=FA=86F=BC%=0B=FCj=C0=08Z=89=F8v0+I=CCqb=98=07=E4=B2\"=88=\n=02'=CC=03=EA‾=C0O'=8A=1C=CF=17_=81 \t=C6=00=08=92=F9=99[=08}=8F@?=FF=E4c|=\n=C0\t=B4Y=9A=0F=E5=8D=AB=04\n=92`=08=94=A0=08=92=19y=82=02=8F=F3x0&=F6=06=1C=A2\"=8A`2=D0=00=076=02=E9=12=\n\t¥=1B=8D=03=A7=02=E1=96=B7H=17yX=9Ab=06,=E5(=F3=C2=025=D0[r=00Ig5=93=19zu=\nek=85G=B9=04r7w=91=15=05=AE=02¥=D6=82=C7=0Eh=C2R=E2Fn=00%=98@=96MS*0X=B8d=\n =0BF=D4U!=85=8C=D6=14T\"=A9=06=10=B6=88=16=CA=98=9D=AFM=89@=8C3FI=9C w=C8=\n=E3\n:=C6=99=11=B6c=84=AF\t=90@=9A;FA=B9=EFc(s=A9=F9=EC=8D=7Fj3<=B4=0C=86(=07=F2=\n=80=07J.=9D=F1x=97=BBf=A2=DEy\t=9C=A9o=FC=0F=C4=8E\n=F0!=F1=02=8D=9ABT=80b=F5=FCY4e=02zw=B0=A0=DA=A6Cj@=8D=14I=05¥`u=19=9A=A2=\nI@=85qW=04=FC=FA=AFG=B9vY=D7+b=EB=119=1A=D3n@=0B=DE=C2=05=E0bdIz'=9A=C0=06=\n=9C=92=83|d=E8T=BA=F8|B=C8`Z2i=DA=98KfO=FF*3=B8=E0\n=CA=E009=E6=A7Q=1B=B5=8B=80\n<=E6c=AA=E0=07=86=C0\t=02=97=A9=DFxp=B1=801=88=E09=80=80M=9A=A0=08=16=B3=B2=\n0ZD=F7=8DD]=F5F=EC=898=8E=A0\t*=E7J=06b\t=F2=E2=15=85s=06=DCY=07.H=06=96 $,=\nR4}x*=D0=C7>‾=A0[=C0=85F]`=A139=B0kW=A2G=E0=AF=D5{=94=91=D5V=91=14-B6F8z=05=\nb=E0=F3=A0S=C5RjUg=C0\t=98=80H=FEL=F5=88=0F<=16Bfp=C4\n=AA=87g=FB=A0=02=07=00=02=87@=819r=E8=00=A2=A3`=C1=1D:v=F0=E0=E1=E3=C7=0F=\n =12+Z<=82=E4=87=8F=8D=1C=81 =91=E2=A3=87=C8=87$I=8A=BCb=06=88=C0\"?=8E=18=\n=F9=F10=88=C6!5l=D0=B8y=93=C7=8C=9D<g=1C=99Ad=86=0C*3b=C402#=07=0E&=12=A7=\n=88=DC=E1=83=86=0C=193v=0C=C9RDh=8F!C=B4=C8=90B=C3=06=8B=15-V=ACP=816=AD=DA=\n=B5i=CD=BA}=D1=82=85=DC=B9r=CB=A68a=A2D\t=12|=F9=8E=F8=0B=180=89=BF\"\n=1B=16=F1=97=C4=15=12¥J=DC=90=F2\"=C6=8D=1Efk=9Ce=BB6=85=E6=CD=9C;sVQ=A3=05=\nZ=CF=9B1=A3]=C1b=C6=10=19=92k=DC=E4=A9=A3=C7=8C/9vH5=8A;=B7=EE=182=A4=AA=0E=\n=C2=C3a=C4=1D=08q$=19H=B0=B6=12=85=CC}=F0(R=C4=C8=94 =14+r=8Ch=FD=FAF=91=FB=\n=DCKr=E7=BE=11=C8=8D=1B=19=BB_=11re=07=12=1C\"=9DG=ED\t=1F=A1s=1D=ACa=C0(rd=\n<=91=1E!=8F=FC=A0!=14k7=E0=E0=1C=80;=C4`=C3=0C=A1=B1=C0=C4Xn=99=06=A1\nn=A1=E6 ]t=B5=00=03\ny=ED=D5=D7`=81}H=D8a=85=05fB=0Eq=DD`=03=10S=01=E8`=84=A3=91=06=A3f+=CC=A0=\nB=8C=A5=AD=B5=82=0C/=0C=E1D=0B6=B4pC=0D<=D10=05=0F=B1\tQ=D4nJ=1A=B5=A2=824=\n=04=B7=03=16L@=F1=12B9=0C=A1=14r=06e=99=DC=10G=0C=C1=84=14J$A=1D=10f=12=A1=\n=9Dv=DF=AD=D9=03IB=F8=A0=C5=10=FC=F1=F7=03=0E9=D8`C=0FRP=B1=91=10=EC=F5p=03=\n=0F6x!=C4k=F0=F5=F4d=0F\t9=11=03=0C/=E4=00=83=14x6=91g=0D=AE=EDDC=0E/=1Ca=E9=\n=0C4=84=B6C=0B388=E1e.=E2X=FC=EA=84,8=E1=02=0F-=B4=E0B=0B<=BC=A0W\ty=F9=05=\n=E2=87\"=8E8=02_%=94%=AA=0FJ=E8@C=10.=B4=C8=16=8Dj=D9H=1A=0D;0{#[=AA=B2=C0=\n=03M=9F=FEP=04=0F=06=DD=B6dn2=F8=B0=93=0E<`=01=84=10=0D\t=D1D=13HP=A7=84G=05=\n!g'=BC=06=F1 E=10Jt=B1=84=10e=1E=E1_=9A=1C=B1\t^=0FU=04=C7C=0FH=00=B1DH<8=F1=\n=83=0D=96=1E=91=A7=11A=D6=84=83=A58=01x(=A6=0F=0D=B1C=13;=E0 =86=A3/=D8=97=\n=83=A5&c|S=0D7=C0=8A=03=0CM=1C;WY=A5=9E=8AY=AA=D3=CA%=A9=A3.=9CP=E3\n=1C=EE=95k`=BB=F6:=82c-=A4=A0=82=0E1=10=08=C5=0C7=90jV[;`=06mi,T=1D-=AAf=BD=\n=E0=B4=C9dt!D=0EA=C4=89=9B}fwKUp=B5=111=84=12d,1D=10=FB>=E8=80%=BCv=E3pP=0F=\nN=98=19Q=14Lp=11=84=10h=D2I=91=9A=EDm=E7=03=10Z@=B7=C3=0EF=10=81=1F=13>=04=\n=B1=D4=C4=0E=1B=14=E4MM¥lh=C67=BD=C9=1F=117X=F5=82=0B0=B8p=03=106M=F1=A9=A7=\n=AE=0D=01E]-=BC=F0=02=D4=A9=D2=AC=B5=CD=14=C2=DACXA=C8=90=1A=0B5=C0=E0X_A=\n=87hXbn=E50=C3Y(=8C|=FA=16p=F4 =B3=AAA¥&ZZX=D7=88=B5f=10=8E%=D7=11-=88]=93=\n=0D7,=A1=83=82=F5=99}=B6=92=00=D2=D0DA?H=B1E=11L=08=E1=C6=11\t=BD{=B7@*=E1=\n=BD=83=89=04=A1!D=F8=81C=1C=82=05+ A\t=16Q=C2=12=8EP0=1F =E1:O`B=11t=E0=03=\n!,=C1\nO@=08=8A,=E5=03=93Y=8A=07=9C=BBX=C6=86t=93$=DC=A0ax:]=AC¥=D0=05=17=B8@N*=83=\n=FB=01=18 =F6=AA=B8=CC=E5=06.=D0=9D=A9p'!=1F=9AE.R=C1=01=11xp=05=1D=04a\t<=\n=A8A=0C=84=C7=03=E3=05=ED0=7F=B1=C1\t=E6R=02=16=BC=EA=04'8=16=0D=E4b3=1A=FC=\n=E0X;XA=0CrT=96=17=D9=88=06=DD=F3^=CDT5;=D4=DD=A0=08=06=99=82}=A0=C0=BE<*=\n=89*=9F=1AH=BDz=F0&=1D4d=7F=FD=83=97=12=A1=10=04\"(eK=06\tB=11=B0p=04&LA\"@P=\n=C2=11=17v=04D=B4=04;O=F0S=BD=92p=06=A6=14=01=07=0E;=19N,=C6=B9=13\"*e&=8B=\nH=CBb=05=AB=D9=D5=00=072|=01=10=B4=A5C=A8]Ow@=0C=A2=AAt=A7C=18=D4 =08X=98=\n=95=16e=E0=A3=18=A4=C0=8C40=81=87t%=02=12=A8 =8A' =1A_¥=10=83Z=B9=00\t=D5=9B=\n=10=CC`=00=07=16`S=06=3D=88A=0D=A2B=83=15=B4=B1j=FBm=B9L=A9b=E6=82=D2=D9=00=\nzy=AC'=0Cp#=83=1D$=A1=069=08=CE=C1r=90=86=E3=E0`\n=82dNBt=E0'=81=8Cg@=03=C9=C1=14=80@=04=1C|=AC=A1Fh=1B=1D=96p=05=99H=01=08=\nA`=88=14=88`=04'dD=82H=C8=01=A0d2=84\"4=A1`@=F0A=13P=C99=D7tN=95%=FC=94=C5=\n¥=98=C3W=AD,=87Gp=08=CCRe=BB=A8=E1=CE=87Z=0C=EAXZ=15=83?=C0=B2=05=B5=EA=10=\n=AE@4=B4=C4=FC=A5=07}=11B\t\"#!0=A2=C6R=15=E3=81=0Cl=F0=83=DE]=A64=EB=B4=11=\n=8Evi=16%=C4%=A7=B0=8A'=ED=E8iO=FB=E8=E6[=06a\"B=832=83=0C=FE=A06\t\tN=DDp=B0=\n=D0=F144=08=02E=CE=10x=A0=AF#Pa=08=1A=D4=C1=13t=B0=D7=B8-=A1\nP=B8=C2=0F=0689=C1*a;=10=F1=01M`ZS=9A=D6=FC=F4=94x=9A=E7Rc=A6=C3WA=E1&Z=15=\n=E2=0F#=E4=DA=15=8C=AC=B5=0FJ=01\nPp=02=14=04=89CO=3D=DE=AExE=B4=C4=90=A0=045xAor=A9E=B0\n=C5SK=F8=C1X=CB\n=AD=9A=01=81=06qA=9D=0Ck=E0=02=1B=C4=D3=AD=B4=8B+=FB=E6J=83=01=C9=C6'R=99=\n=CA=0Cx=90=04\"0=84=B1@=18=C3=16=00=1BX=86=E2`=08QP=A8`=F1=E6=1F=8D=10A=07=\n=02=A1=DC=0Erp=D9$8a\tA=18=02|Qd=03%=DC@=08=1A=F1=C1=18=FC =04#=98=B2=84=A2=\n-=A1Lk=10V'=E4=A0P=AF=B2=D0¥j=C0=02=B881=A8=B7=A3YlQ=03=17=DA\n=C9>y=A1=81^X =C5=E3!/=AA=1F\"=81\t=84=A7=04=95=A5=96?4(=C2=0D=A6=12=83&=9E=\n=05=BA=CCR=CBX=82=E8=02!=98=8F=06=3D=D8=81=90=E6=08=83=1C@=E1=05Q=F0=AE=1E=\nq=D3=03=B6=FB]p\n=AC=012o=92=02=04=864=CE?<=B8A=0E=E2{_=1D=D47=BE8=A0=82=12}@=AE=8F=0DH=B0=\nL=F9=81=156=12=04=04=97=16Os=13=C2\n=9D#=93\t=9B=D0s6=3DY=0D8=85=13\"=B4=94=06@=E0=02r/D=97=1C=F8=80=C4=0F2=F1/=\n=CDR=3D=B9=08A=08=8Fn+=8By=1Bc=19=FF6y=81=B11vg=00=83=0E=CB=8E\t6`=9EQ<=05=\n=84=E7‾=86=C8j=91=01jb=BD=82=1A@4A<=11a=8A=1A=05=84F=91L=D8=F5=D4M=0D=04=E9=\neo=8Dw=06N=E8=01=1C=8C=C0=044=A39^=F1U=02A=84=F0=05?!!=BEb=D3=08=7F=8E=A0=\n=E0=3D=E3=C9=CFx=FA=C1xz=B0=04=FE=94R=A63]e=0D=C2=A0=04=1E4=E1=06>=90=82=C5=\n‾0=03;=C5=E0=05<=00=C2=A3=E72-=1CPz=A8=A5=8A=0Bj=BEH=97=17=F8 =97?=90]=0B=\nN=A0=FB=17=A7=CAXh=A3FL=AF=FAb+=0DeQ=06?Hu[=C3=DB=A8=18=FC@\t=0E=BB=01=F78=\ns=DB=94o=8F=058h=C19{=E3=9B=16=1C=01@=E6=15c=8A|`=03R=DE=A0=A2=EB=A3=81Q=E2=\n=8AO=1D=D8=80*=BC=D1M=0E=A6=D2=1BLY\nO=F7=95=F6=0Dt=E0=F4-=B4=D4Oh=0EB=14=800=04\"=F0I=CF=BE.e)=83=84'=D0=E2D=95=\n=9E=B2=81=14=08=E4=1F=AF=F7 =D5p=F97mS=D5=CDJ=9F=CA,=E9¥:uq=E0=EF=98=E1 =DF=\n0K=ED=14l=B0=82$@=1C=D4=13=9F1=8D=053=DC=E1v=F1=08m=AF%=ED=1A=85=03!4=CA=07=\n'=B7m=CA/=8F=82=18=B9=80-=A1=B2=01=0F=96F=84y=D2'=9F=822=C9=0F=A8‾=83 H=01=\n7J`=0D=B1=AF=8C=C1!=D8=A0[L=AAy=08=E7}f=BC=D9=97=CDh=CERI=C7=B3g3=C3=97\t-=\n=C5=F9=BA=FBMv|=11=B2{=B4=9E=ABA=9B=1C=C2=03$d=E4=9C=B3=CA=A1=87=DF‾b =0E=\n=F1&O=90=C1=10b=C0=93W=99;=07E=D0=EE=AB‾$=97=1D,=C7D=A0‾=A6=A8G=1D4=8C=C7=\n\n=05F=08=0B=0F=A1w=CE H(=05c=D1=0C=E6=FF=7F[=DB#!=FCU=03R=90=03=F84=03B=D0=\n8Tp=04E=C0`\te=10f=B2wecOF=01=058=F0sW=86O2P=7FE=B0=04F=D0=03=06=C4=12@=A0=\n=14N=E7tQ i=C0=B7gF=C0tXG=05`=93|=CA=07BbWS6=B1=13=E6=A5=03H=D0=10f=80n>=B0=\n=04(=02=04=A5c}=1Evb%fb,=D0=031CsG=80=03/=A0=03=AE=01=05:=00=03X=90]1=A0C=\n4=80[=1B=E2T=BD=D5+&@q\"\"c=18g+&`=02.=A0#.=F0=05MFr=95=07=03*=00=80o(=80*=C0=\n=02=FCY=01d2=90H=03T-L=E0=04R=80.=FE=85=04‾=02 =14X=811=A04@'=03=0CvN,=D1=\nohp0?=C0=04WW=82N=17|=0B=85=03=94=A3gL=87=897=00=05=0C=14=83=CA7Z5U=03NF=03=\n_=80tU=A1DN=90RG=E0=039=80=044 C=B1t}E83Ce=19C=B4=02.@=05=E4=F7}:=10=14=00=\n=12=04=E6=93=043=90C.=D0LM=B5=850=E0+6=E0‾#=80=18^=18=7F=88=D7!za=02*=90!=\n:b[0=90=80=96=87=028=A0=8Doxyq=C8=02@ =14L=12=03O=F0_F=10=05P@=05=F5=C2=04=\n=05A=13B=D0=03=AE=97=81@'=04=DE=85O?=90=04=06=B1=15G0=05Z=C0Q=FF=85=1C=82=\n%=1E=97XZ=81=05X=E2=86=906=10=04=0B91=9E=F8=891=D5=03*=13fK0=8E2 H:=90=04=\n=1AT=05=FCd\"H\"=A3]=B0=04b=00'=8BBEpj1D5=F0=1C=CB=85BO=12=04F=D0v=FA=B7!z=F1=\n=02=D1X=028=004=D04=024=F0L=CE8=02=B4=B2=85=BE\"=8Ddhy=B9=B5=03=99=A7r=DE=08=\n=87=D1u=1A,=F0$I=A2z=06v=04@=D0=80C=D0=04=07=15=1BH=E7zVvO2`=8F=BC=91>=1A=\nf=15R =05Z@&?@=04L0Q=0D=B5P\t=89=90=AA=C3=96o)h=0F=C9JX=01=11:P=04=AE'=03=CB=\nqYHpQ=E62{=A44K=99=02=03=162=92r7w=A8=B2O=01B=15=AEC=03=9F=15=04S=E6=02N=90=\n=02dX=02V=A5=19A=A0=17B=A1=02'=B0=8C!R4¥=E9=026=96=18=BFR=02=C8(M=B5=82=9A=\nd=C8E¥=D4=8DH=89=94J=B9=944=E0=03gS=14C0 =\n\n=C3=10=FD=B6=06=E3=98=1BZ\t=03R=08t5`.=FCu\"QB =95L0=04=E9=91=10Zr=109p=05=04=\n=F9=96{=A6|a'=83q=F9=90=C8=A7=8AAP=1B=90=02=03=99=92=03=FEA=04T=A2(N@N=96=\n=F2_=B1B=84=85=D9K&I=16>=12=06S=C1=03Apl\ts=06+d>CP:B=80=17&=F0=02)=F0=02=DC=\n=88=02D0=16Q=D4=99=CC=18M%0=04\"=C3[0=80=1A.`+=3D0=8D=B6=12=94dh=02=AB=B9=9A=\n=AE=F9=9A1b=92O=03+=D8=98G/=F0R5Q=056=90=04=0E=01Y=F28=8F=DE=B5=03q%Q=1Du=\n=03=F1#=10Q=D0=04!=D18=CB=19/=8D=A4=11=D0=19=9D=D4Y=9D=3D=BA|=17=A32K7=9D=\n=A9=A3=12=ABa=1FZ=80=05=E3=01:=10=11=05=18SJA=D0v-=90=84\"9=92=EB=C9=03*=E0=\n=1C9=B7=814=A0=80=0E=F1=14w=B2o0p=17'=A0=032=E4=02=02=FA1=A1=C1T=FC%=00\"2=\n=C0+%`=16:=C0=02z=01 =A4=B43&=E0=8A=AA=19=03=AAI=A1=16z=A1=18=9A=94=9D=A1=\n=02P=B0=8AE%=155=91:=07rO=FB=06+t=10^3 =1B=E6=05=A9>=D0=9B=BEYl=1B87g=06|=\n7a=07=8Fe.FR=1B¥=E0=03P=D0=03=0Ec=03>p`p=E9=A3>\n=8A=A5=DA=90=CA=87\"=03=92=A0a=1A=03Q`>=F2s=03=AFA=03L=A0=04=F9=E1=02M=C8=03=\n=E9Y=A54=E3=3D,=90 8=10=1CL=928=0D=81XE 7gV=04QV=94(=00)F=B0V\t=A6=03>)E=89=\nWj(=00=11/`=02=C2(=A53=90=02=B1b=13<=A3=02=A6S=A1c=EA=A7¥=04=A8=81=EA=19=12=\n\"=03:=08‾;=00=05G i=AF=E6d=D5=A5=13=E6=85=95Jb=A9=DF=F5]=BC=11=91=0C%=04w=\n=99tM=D0I9=80=10;=10=82&=13=AB=E6=A6=A3=FC<=BA=AA=3D\n=A4a=D1=AB=9D=C8t!=91=AD=F1t%=08V>=EF=91oL=D0S1=D0=03w=E0q=B5S=17=007=17¥=\n=E0Z=D2=F2=03=DAc5fQ=872@=04=F8=CAXR=D0=04=84=C2=04=88=F5y=E4=8A=023=C2=04=\n:T=8B=83=07j7=E6=17}aN; =03)=00<1=93=03, =A0=DA5t=B7=D5Dcz[=7F=FA=AE=FFgV=\n9=D2e9=00=82^=C5$3=80=8Ed!N=8AI{=82=18=B0r=B5=B4U=A0h8P=04=DC=12d=85=C2=A5=\n=04EZ=E2aD=A9=CAtwB=B1=15[Jfba&=D5=05x=02XK=B7B=F46=04eZK=F7=D40=EC=86=92=\n=E9=83=04E=F0_=E7u=030=90 =E3=A3E=B1=82];p,#=99=03M=F0C=B3=864=A8=B3=95=EB=\n!iA=80=04X=90/=068{1=00=04=DEs=8BP=A3E:=C0T=D24¥:=B0=02$PM=FC$=D0=02B=B0=02=\n:q=1A=EF=84Z\n=B2o=0D=A1=8DG=10=80)'=03[=ABr=1A=AA=02=94sO3=90=044=F7=10=F1=98=03n=C1=02=\n!t^x=B9G\t=F8z=01K=88=AB=08=04=17=C4=15W=10r1@=04=81=D8}+2LQ=B0.=EA=92gU=B7=\nB=12=D1u=A5=D5ue&{=97=E2)=11=B9=03td`I=B0nz=02)=A5c=A6=A6C=1C6P=05\n=B2tU=F0=026=C0=8FR=A1=03e=F0)>=F0U1=00.=19dp=85I-=97=A1=7F=95=874-=10B=F7=\nT1\nqzE@=04=EAe=1B=AC=C1=03?4Dr=11=04L=B9!C=D0EXH=02=B9[=93eq=3Dm=E1#sA9=AF=F2=\nB=F1=84L=A3!=037=00=803=C0=BC=99G=1A=12=92=AE=C6=01y=80=F7=BB,=D0=10=95=E6=\n .g¥=16=89=97\n2=03=0B=F9=BDo=C5=C5z=C4=1A=FC=04X=14=CC=1A=FC-c6J=E3-M=14o=FC=B1=11r=C6f=\n=92=C3=82=D3=B9=8Al\t`=3D=10=06=E2=88)A=10=06m=02=11=86=C0=B76=80=96=E2a>B=\n=08+/ =04/=F0=03=FF=E9=8F=3DP=042=F4=0461K=E6=E4,6!LfH=A5E=08b=00=EC=16@=E0=\n=024=E2=7FH=A3=C9¥i=1F=9F\"^=DB=E1=10=12C=15=9B=C7=9E+=90=AB=B0=F4=03=B8u,=\n=B0=12=03W=A4=02%=C0=1BGv=1Ae=81=84=A1=E1=025p=05/=10=06=04,Cp=10=03=B1=13=\n=196=10=05=98=B7=19[=9B=C4>=07=03=16=99=8BS!=A0=B7,=15=D2=C2=02K=03`=8AI=15=\n=89$=04b{O\"=C3=C5oU=812P=06=8F=85j=F6=D8=1B=82=D2=10M=009J=B0=90=FD=B6=03=\n=94=A8=03P=90nG0=BD6e>=E4&nO=C0=12=3DE=13TQ=89=C2=F1/Jff0 :=89=BBTm5=C8\n=89S=FC>=0C=A5/=C4=B9=8E=B2V=95,=8B-=00 ;=85=032=C0=3D)W#*=F0=04702T`f9g/=\nQ=B0=04=B6!=14<=00=D1=EET=CD\t=F2)=9A=D2=B4=C0=D3=C2=96{=02>g*!Y=CD=D5r=06=\n=C3tfP=1A=19=E0=EC=BA=94Z#=C8=CCF=AD=E9=8D0\"=AFK#$=94=BB=164 ]4=F08=08=15=\n =E7EHV=10=8F=F6=F1=CD=DF¥l=3D0=BE=92=F7=BD=E5,WC,HEPAO=10=95J=80z=82e=10=\n=92=1B=B7=9F=E2=04NP=89LH=B8=05=F9t=05=81=04=A4=F8-=E2r=C2[=F0=04=D8=82\"F=\np=86=F1DK9=B5Tx=F7=84=1E=97C=D8=B5VC=E0v=B2xF=98&NA@=9EUa=86R=A0N=97=C7=1B=\n6 20=C0=04=80i)U=E0=A4=C1h=CB=E9*<=BD=01=15F`=85)=C0=D4+0=06=80=85=81=B6=85=\n4:,=03V=D0=9D=FB=EFSh/=AA#=99}:M=EB=7F=01=B8=02CM=D4=F0Z=1Ad=11=CAQ35=C1-=\n=A8=12\"=15=FA$$=A5=E8y\t=D5=03=F3=B5=A2W=8D=D5=DF%1=07=A8=95=84=98gx#=CF=EA=\n=88=05=8E=14Q=E3a`=04=A1DB=12=16H=C0=05=12=A1-=C2'=D7=FE=E3z.=81A=1A=A4@a=\n6:0=D0=03=C0l=A6l=D5=02A=00+(=A2j=B2=133=B18=D1S=AAE=D3Es=ACa=05C=B0=02(=00=\n=10(P=9C@!=04=86=0C=18/^=C0=A0\"C=C6=0D=1B4h=F8=90=D1=C3=C5=8F=15=19Ul¥=A1=\nBJ=0C >=B8=0C=E1=B1Cc=0E=1E4=1A=CEP=91=C2e\n=8E+j=E0=901=A3=C6M=1E6 =DA=F8A#=C6=90=84/l=D4`=B1=F1%=CC-=3D=8E\nd=DA=B4=E9Q=15Tf=E4=90=B1=83=88=8C#-aju=C9=B5=AB\n%D=82=D0`=C1=A3F=0C$7f=FB=D0=D8=01=11=07=8E=84A=15=CE=A5=AB=10=C6=DD=BB3=A2=\n =C4K=17=EF=DD=18Ar=BC=1D=02=C4J=91);t=E0=C8=C1=C5=06=10)9=988=E9Q=C3!=8D=\n=1E;|=F4=F0=E1=03\t=12=1C=10o=84=C6=C1$=C8=94=180b=84=CEaD=08=922S=84=10=A9=\n=92=D0=C5=ED=16=B9u=EF=DE=ED=E2=89=0B=16=C1=85=03=17^<xF=E4=C9=95#g=D1b=08=\n=8D=1FOr=CC=A0‾6F=EA=1D*=06=9E8=11C=A0=8A=16=B7]=BC=B8qWG=11=84:=C8\"=DFhT=\n=C5A=1CF‾=08=8E=D1QE=0C=199=A6=CB=E0=AAB=B8e=19|=C0=8C=B2=1E=98=10=E2=86=1B=\nx=C8=C2=A7=BB=84=90!=A5=96=DA=CB=E2=05=AF=9C=B2=90=A9=A3`j=A1=AD=16:=A2=E1=\n%=AF2=84=89=05#=82X=C1=85=8CZ`=E2=07=9Bh=B8\t=07 =80h=A2.=1A=FD=FA+=86#=F8=\n=AA=F1=C6=00G=D3A=87#=AAX=FB=03=8A'¥=AC*\n=1E=82=98a=87=EBbXR=07=1E=9C =E2\t0=80(=02A=1Bl=90\"=A4=1D=DE=C2K=86=C5v=F8=\n!=8A#=8A=E0!=89=18|H=0D7=DEt=13N7=19Z0=AE=B99=85[=EEN=E5=82=B3=01=07=B6z=90=\n=08=07=1DnHM=06=A0T=D0=81;=EEv=E8=01=87=17=C4=AB=E1=B6=1Cj=C8=CD=05+MdN=86=\n=14P=B0=E1=05\"g=C0a=06=162=EA=01=85=1C^=B0=0F=C4=99r=90B=B5=9A=B8=D0A=AC#=\n=8E=F8=01=08=1C=82=F8!=B5=D4X=95a=05=1ClX!=86)=CEZ=EAB=0B3T=E1=06=1Fv=C8J=\nDf_\no=85=A28=A2=AE9\"lp\"=07=1Fj=D4=D6F=C0h=D0qG=D5p=18=02\t\"=10=84=E8&=19=9A=84=\n=01=87#pHM=07=D5b(=02=A5q=DF=E8=82=89=18Y=ABa=07)h=E8=EB=85=D5=AE=BC=A1=8C=\n=CD=16u=11=88=1B=80bs=FC=B7:=9B#=AA=E19=F1=948=A3=FFn=ABA\"=3D=A2=18=82=8B=\n=B9R=A8=81;=13L8=A1=D1=85lhS=D2=E2=92=ABa=06=FC=B8=9B=B0Q9)=DEA=0C=13¥0\nD=FFb=B8!]es=D0A=08+=AE8=02=88 =16=CB=C2=085U=F3A=87.=0F2D=88=1AB$=F6B=A8=\nX>=B5Y=11Y=FAj#=1D=90=0B=8F=05 Z=F0A=BC=DB=B6=05Wi=B9h=BC=ABK=1B=8Cxk=A7=1B=\n=90=D0!=D7=BB=B2=BC1=07=1F=83@=02=0E*=96=98=17F4=DBB=B0=AEu=CD=C5A=8D=04%=\n=AAA=CB0nh=D4=858=E5=8487=88=ED=9Cxb=E36l\"K=1B=86P(n=84=06\nYd=EEV=F0=D4=05=CA=E9<.=B9=E0>=D7!=E4&n=10=EE=A1=F0`(=A1=84=9B=BB=82i=05=9F=\n=F0=F3!=87=1D=82P=E2=0B%¥=D3=EF=E2=EB=F2=C2=C1=CC=9FX=98a=85=1B2=9C=9A=EA=\n=AE=FB=FE=14=11C=AC=8F=B2/&h=9B=9BT=BC=B9=80H{=DB=BB‾=18=DF/=FD=E6=AEj=07=\n=1An=18L=BF=D4=E6=8A=DF.=18=A6bl=D6-=8A=E8=81=E9=B9K=BD=EB=06\"<N!<=10=C2=11=\n87=14=C5=DD=E4=070=E3M=E5=1C=18=AA=CB]=CE8.=E0A=AF=04=F58=D5=B0=0C=057=18=\n]=C8N=84&=17=94*b=D0=92=9C=F7p=90=82=DB=95 =06M`=C1=0Bv=B0=03=17=84=AC=04=\n$p=81e2D=83@!=04=08]=CA=C1=0F=86 %!=EC=00[=DEJ=1E=0C¥ =11=96=F9=A0(=CC=9A=\n^=B1=BA=F2=82=19=B8d=05=99\"V=F6=B6=D2=1E=E64=87li[=D7]=CCF=BF=18l=8Bn=80=01=\n=D3=D0Z=83=83,=C8=85=8B=0F=E2=C1=0D=B4p=84%pF-=F3=F3=0B=D9^=90=84=1C=EC=EF=\n&{=A4=01=0E|=10=85=19=A1=8Ea=0FlX=04#h=9C=1A =C1=050h=01=0E=C86=FB=1E=18=9C=\n=A0=83=1DT=C2=0BNP*=15=18!M=B9=D9=95\nVP=84=16=90=C5=057PA\nK =B2=DB=85=12\n3$=01\t=A8b=83L=BDd=050(B=AE=06s=03/l=86=07<`Z=0Dx=00=86t=81=A9=06K=10=9A=F3=\np=10\"*6=D1)]=81=81V=94=99=BD=8D=D4=809=A8[S=0D=12=F2=03=83=D8eg^=FC=E2=0B=\n=82=A0-n=DA=E5G_@B=13x=C0=17=C7=D5=A8=07M=C8=8F=B9=12=14=11=FD=FC=A0=0B=3D=\nx=DCE=C8=16F=85=C4=80=07O=D0=C9Ut=B0=04\"=90!]=E4=11d\t=1DXBC=1E=B2Nm=BA=CD=\n=17=AE=B3=1D=13=98Rd=A3K=01=0CvP=839=84g=06=FCY=0B=0DPG=CF=16=DC=AE=95\"-=81=\n=80|`=82V=8E=00\tS=C4=DE=104d=17=9D=D9=A0=07=9C=D9=82=0Dt=B0=D1t=E1=E7A=DB=\n=DBH=0B=AE=A7=CCe=C2$=06.=01*\n=FB=9A=D5=1E=FF¥=EC=05=B5=B4A=16l =846=E2=11/=D8=B2=C1=BF=BEx=BE=85=10N=06=\n5=C0R=0E=D4(=C6=1E=FC=E0=807=D1\t¥l=F3=C8G=BE=00=07B@=D8=0Fz=B0=AE=1F=FC=00=\n\"n+=A8A\t=99P=CCU=AEM%IB=0FZ=00=03=19=A60=A2=B73=01=C0v =83#=BE =05'=90=01=\n=0D=86=00=85=85=1C=E1v(`e+I0C=13=84j=86#=E0=CE2=C7`T=FC=18=91eC=B9=D8=CA=A8=\n=93S0=CD@N@=C8]\n=94=F2=92=A2.S=05=98J=E63_=B2=83=17=B0=80=06+=E8P=0BJ=02=04=EA$=90sI@=13=0D=\n=8A@=13=ABv=B3=9B=98=E1=01=12=F6=D49=AC=12.=07N=18=C2=0D=82=C09=88=98A'=F5=\n=B4=E3m=12=82=03=AE\n=E5s=8F=A1=C1=9E`=C8&BZ=0E=AF=DDK=EF=9B=1AH=83|=E2=80=B2=82M=E1x=E4D=10=90=\n=9D=C0=052=A5=FB=C9`-=FB=DF=FF=C2=80=05$=18=C1=08d =90=DA2=E5=06(=98=81=00=\n=930=94=D3n=B4=07:[=82=EC=DA=93=BD=D8>=A5=08,=8D=AD=88V0=E1!=84=12=A73=90=\nC=0D|`=03=1F`=891>8=10_=C2=A9¥=B3=C1=170L=18=02B=E8=92=D6=B9p=F5w=FA=91=02=\ng=82pA=92=A1=F5=91?=C0=ADx=8C=00E=1B=88=A1=06[=AAjA=DB=BB=DE=F6=CEI70=F3=C1=\n=13@=E6ASJ=F4=06.=18=82)=8F0=1E=A2=84=C7=04-=00pJG`Y=DB=15=F8=06B=D0]S=10=\n=C5=02=14=08=F2=06=7F=F5=815=05=F4=84P=9ES=06=D1=C2Z=86e=EBg=11y=D29<=C0=CF=\n=FE=12=B4=03=1E=84=B5]=A1=D1=81=0F=8A=C0=05w=FD=05=C60=86A=0F =12=04=1E=CC=\nE=C8=E3=F9=C1Z=DF5=03=1D(A=0BB0=C2Y=C9=C6P=17=C0=E5=07[<K=C9j=10W=C79=D9=81=\n=FBP&d=0E=A4<=A9,)$l=83=CDr=96M=80X_=EB=E08z:=81=11,[`d=17=98=04S=18=F0=08=\n=BC=95=AE=96 =18=054=90=A4\tb=C0=D87=C9=D5=B8(=82=96=0E=82=F0=84=1Bt=A4=CF=\n‾=C6^=86_=C2=82=AF=CC=00=06W=C1=CFZ=14=83=04# =C1=0B?P=C2b=FC=E8=901FW[=E0=\n=D3=16=A1d@=06x)d=D3=90=F4=C9¥=E0=E3=03 =FC=E0=08=A6=AEko^0=84=BA=8EG<@=E0=\n=01=0Cl0=83!=AC=15u=82=84=18^=8B=03=9C=12=1AtC\"=DFo=0El=90=84=06=CB=A0=DA=\nY=06=F0=EDVY=D9S=8A'=05H=00=EC=7F=93}=F33=97`=04DH=CD=14=8F=A2=B0.=97=E0=05=\n=92=EA=D0=B0o=B0=84=8E@k=05T=00X=A8=90ITr=1BU;=1D=06Q=D2u=CB=B2=18=ECO=08=\n=C0=13B=13=9C=90=05=A2=E9=E0}s=FBKr=B7=B5im=05=FB\n=C8=03=87=A2m=E6R=DE=A1d)=D3=E2iSo=1A=BE=B0=B1=B9=C0=0C!=1CeX=17=C2=F1=11=\n=1A28-=10=82_=A30=C8=C1=9B,=E4=B9=A9=81=11=F67=D4-0x\t=FE-s\t(=0B`=0E=DE=0E=\n=06=BBm=81=B5=CD=8Csd=93=A0W5=B9=9A=F3=82=D0=82=17=A0=F4=B25=E36rz=80T=A4=\n=CA=84}=E2=1EV=D4=A7^T=97=D0@=058=A4=C1=0C=16=D8$=FC=18a\t=C1=FB=02=1D=BE=D0=\n=84=AD=BF=85=08=BD=CF=B7=A4=01=93=B6=81=97=8DF1X=8C=C0=07=CE=83=B4=EE=EFS=\n=F3=B2‾=C3=19=CA=9B=88O*<=BDy=A0=E0=C5=D6=02$=C4=A0=06=08=E3S=EA=C2C=83=D4=\n=BD=C9E=A4=0E=B3=0B$=99=C22=8F=B4=B2=AD$=F3e=E7=8C=A0=CA=02=3D=9C=DB=A8=DC=\n=E8=8F=EE=E9=BF=19=02=98=AFA=AA=1C=80=3D=A4=1A=B7=A8K=B0=E9=91=A2=15H=17=8B=\n=1A=82r=19=14=19(=02=B7=E9=FB!&=18=89$=10=BB=1C=18=BE=1C=10=02=1C=F0=02u+=\n;=BC=B0=02=E8=8B>=E9=B3=91=AA=E2.=B4=92=C1=17=C8=96=17=C8=0F=AE\"=02=BA=AB=\n;=DD=80?=1E=DC=8D=17h=A0=BB=8A P)=0E=17Z=0B=88=DB=8D=1BP=02=C0[=9D=1809=1D=\nh=81=1B=B0&=82=10=A9=FC=BB=AC+<=A5=12h=81=1CH=82c=13=C0d=03=02=14=D1=8A=D8=\n;=91=19@=B6=04=F4)O=82=3D+2=96=A83*=DC=D3=A4=1F=F0=01=18@=93=17=E0%B=BB=8B=\ntA=10=1C=88=82(=E8=81=92=F8'&=D8(=AC=CB=B7¥a=1Au=B3=0B=19=8C=BE=E9=A3'=17=\n|=A4=19(=9B4=A1=81=85{=9C=1F=BC=C4K=8C2=08=F2=B8=FD=92=82.=89D=1Dp=01=1D=A8=\n*=86i=01=19`=B3=14(=82=8D[=81(=B4=81=13=B0=C2=FCs=81+¥=81VB=81=9A=E9=81=CF=\n=03=C3=11=D0=08=F7=087=15`=14=02s=82dK=81=0D=FC=D9=AD=07l=C3=9Fz=C3&=FA=AB=\n=0B=F3=A4=8C=C0=8F#=18#W=E9=81,=01/=B6=A0=8E=1CP=17=15=04=BE=1B=80=82=BB=90=\n=82=EE{D=1C=83=A2E=DC4,=B8'=80=81=88\"=F3>L=FCAML=19<=D9D=8Ai=0Ek=19=82=18=\nP=82!=B0=013=A0=C6=BAj=1B=18=E0=01=EEx=01=1A=B0E=13@=81=AEq=01X=BCB=85=A4=\n!=13X=81=CD=D2E5c=AC=15x=01=14=88=01=B2`=81=18=98=AD=9B#=01 H=02p=83 =1Bx=\n:d=84:=DCk=A2=14P,=11q=01=98x=81\t=CB=8F=B8=98=11=19=10H$8=AD=9C*=A2m<=82W=\n=11=82=3D=C1!=B8(Gq=E4=B7=9F=04=1F=E9=BB\t=85i=C7L|=C7=F2=BB=93=C1s=02=AE=F2=\n=96-=C0=89R=B9=BB;=DC=81=D1=B1=1D=C2=8A=B9W¥H=AD=BC=AC\"xH=88t=A1=81P=01=1B=\n=88!=02=DB=C5=11=10=01=B4<=B3=DD2=01=FD=FC`=01=CB=F09=DD=19=C9=AF =C9=A9=91=\n=C0=A7=A8\")=A2=01!=98=01=1E=10=9F=1BC=1D=16H=03=DFj=02=FC(=CC=CD=03=BE=EB=\n=A8=8A[=C2=81=C3=FA=9C=A0=8C=BE=18x=CCG\n#=F5=CB=01v=AC;=A4¥()3=02y=C4\"=D3y=9C=88=A0=8E=8E=92=88=B6P=08=8B0=C5=85=88=\n=81=C0=EA=B5=14=BA<=85=04=C3=FF=A2=01=AF=14@=11(=CB=11(=8B=93<K=11=D0=CD=B4=\n=94,eS=0DxA=B0=14=D0=3D=91TIc=B1=89%=D0=3D=EF=88=C0\t=AC=1E=16=18KH=CA=A7=1B=\n=D8=81=A2=83=16=CF=90=81*=C0=15=9Ah=92=07!=02\"=90+=9D0\"=C9=1CO=F2=84=81-;=\n=CA=CC=942#=84=81,=00=0E=F6=C0\"=16=00=1E,P=0F=D1=94=08)(=AD=93=8B5=C6=D3=A4=\n=FB3=A5,=CC?=88L=B6=D5=B3M=D0C=CB=B4=14=82=17 =82=901P=06=D5=B9=DDT=B6=D5=\n3=AA=1F=F0=0F/=FC=B80=A8=F0=012$=8A=18H=82hSF=DB=DA=1D=DE=BA=01\"=F3*=18=C8=\n#=9B=B0=0F=D31=1Dzd=8C=19@=93=C4=8C=8C$X=9C#=B0&=F2=FC=C9=1F=1C=B8=EFk=93=\n=F4=9C=1CF=D2=A2=1Cp=11=16=18%^=04=8F=C1=FB=01=F4=A8\t=BDT=A0W=AB=01\"=10=CF=\nTK=01)=E0=CB=1C=C1=BF=AD=FC=C2=00=15=D0=D9=BC9=06E=CB=168=C3-=FD=D2=07]=BD=\nL=CB=8B\"=E8=1A=07=DC=88]=E1=AD\n=AC=89(R&D!=08r=EB=8AG=91=01$=C0I=C6=FC=82n=E9=90=AD=F1=0F=BE=1C>\"=C2)$=A5=\n=01-P=A4=10=CB=8D=C7=A1#=9F|D=A3¥T=1D=DD=D1=85=F2(=C6=B3=81)=F8=C7 =B8=98=\n=0E=89=BD=95q=88=19=88=88=FD=E9=01Yq.=99Z=A0=85=10=1D^KH=AD=BCR0=D4=B9=02=\n=0D=81=100=D03=03=D3/-=B0=13P=81=19=80=88=1F=8DL=9EB=AA=83=88I=18=FC0=02=1B=\nx=90=0E=BD=907=1DV8=05=AA=AFX=82'=FC=A7=10=B4=C0\"=90=08=D31=16=8C=D4=81=9E=\n=A8=89=12=FD=D5=DE=BB=A8=98l=81=18=D0=0D;:1M=93LF=0D=D7=F8s=D4=E2=08=8F=1C=\n=00=02=14=DB=81,q=91[=D9=9E=DD=D1=0C=87=A8=89WC=B4D=EB=81=A2=19=8A=A0=B8=82=\n=F8XMS}MT=FD=D7=02cU=81}P=B4=14XV=DD=D2=D9=E1=95=1Ep=0D x=90!`=01%p@=DE\"=82=\nl=A4=81J=9D=A2`u3b%=D6g=FA0@¥=88=B7X=82=E6J=97=F6yX=DD=A9=02)R=81=1D(Q=E4=\n0.=1A=E0=01=CF=81=01&=A0=93=EF=B1=A3=19=F0=CBpTTq=0DWr=BD5=17=08=02=19h=02=\n7@=A2=DE=8BDR=EA\n$=18=82=1F@=8D=AA =02=1D=18T\"0=02(=98=C3=1Bx=02=DC=12=02R-=D5‾=05P=80=FDW=\n=83mU=17=10=81=AF=1DX=06=FC5=81!=E8=88!=98\n(=B0X=08=82=3D=DE=C9=01,=D8=A8=EB=A8*=87=D8=9D=03c=8A=8D=CD=DB*2=8A=A2h=AC=\n¥\t=02U=EC=90=FA`=01=1D=A0-*=92=A5=948&=8EX=8FZ=9DG=EF=A9=A1DT=88$=F0=17=B9=\n=08=CA=9D=E5=D9=9Eu=AFI=A1=C6=9BP=82=FD=08=AB=16=F0\n=15=A8=B1=EB=98=8A=1D=90=04!=B8=02+H=82 =D8=03=C6h=AC=15=D8=0E=19=C02=FF¥=\n=C8=AE=05=D8=B1%=81=B15X=06=1D=81=BFJ=81=C2E=82=A5:=0E=89=C5=12|#=A3=3D=DB=\n=D6d=CA[=E65=C9=96p=88R)=19=DD=FB=8A=1F=A0K)=C2=BE=9B!=0B=8EpF=12=D2=81Fi=\n4|=AA=82(h=D2=BA=B8=BES=BB=DCEm/=CC,W=F0=B3=12=88=B8=02lILgJ=81=C6=B2=A6=83=\n =02=C6=00=03$H=02,@=BE&=98=0E=EA=BB=DB=14=98¥8=8B=A8=17=90(*=B5=D2=DB=0D=\n=D0=B1=FC=DD=81=DD%[=11=E0=0E=17`=82\"H=01=1B=08=99=0E=D1=88;=B1=81&`=0B'=C8=\n=15=1C=D0=027=80=01{=A4\"=E6m=DE=E6=14=B4lT=0D_!*=98=90@=D7=AA^=A8=D8=9A=8C=\n=A8=81 H=B5.a=82=C4m=8B=B7=C8=95=BF=B4=A30z$=F4M=DF=83=1A=BFEM=18=1B=F8=CE=\n=EF=04=02'(=8F=180=9F=E5D=01=16=F0[=D5=18=82=C1=08=83=1F0=02#8=02=C5h=82=8D=\n=B2=99=14=A0C=F2=B0=81k=83=81=15=E8=0E=1D(=A5=FDS=E0=05=D6=C5=B1=15=DB=07=\nn=D5=DD$=01=15=10\n=8A=99=A1=BF=82=0BOz=1E=1C=A0=18=F2=F0U=96=C9*$=88=1A%=B8=15=818a=BDmN=A0=\n=B5=82 =80=82=18=18K=0E=13=88=19(=16=91=DC\n=D5zN?I=A0=C5=19=8D=12=F9Q}=B3=0B=E1=F5=AE=1D=1Cb=DE`$=F1=D3=AB=1Ax=01<=13=\n=BFv=04=9F=B7*=022=8A=A5=820*=17=FC=F0F=8B=92=AB=1BP=03=B7=E2=A5=DF!=3D4=FD=\n=A6I=C1=81=E0=C0=8F=AD=CD=C56=06=C38‾=E09=EE=3DZ$=81=1B=A0=E3=11@=81V=A2=BE=\nf=DD=B3y=BC=8D0R=0D=3Dl=8A=D8Ed=14=A6=9A=DD=F3\t=1C=A8=8C=D7S=81=1C=A8-8s=8A=\n'=08*=9C9=91=1C@=83=E0=02=82=99=B0=81=EB=9AB=0B=FC=A2=B3=10=E3=17=D0=02=D5=\n=08=C2=1B]=18L=BC=CC:q=A4%=F8=D9=B1=F4g=A3=C4f=BF=A8ZL=19=08=81=A8=81-=C8=\nf=18=D0=01t=B5=01=933=8Bk=D5^h)(}2=99W¥c=00;f=06N=E6=AFEK=18=10=820=18=81=\n=1B=90=D5=9B=93=13=1F=12f=F6=1A=BC=F0=A8=A1=A3=BB=DB=CER=01o=FEf=0C=A9^=1C=\np=82=14D=1D=A8s=81\t=A4=9E=14X=81,=88=93g=B3=89F=DB=81=B4=08=0D=1BX=02=FD=E0=\n=A6=17=93=1F=ED=CB=89=C8=E4=C1M=0BhG=9A=94|=FC=8A#=BBz=93=FD=EA=A3=DB=88B=\nn=AD=BB=B4J=88=1B=E8=BD @=14=14=B8=A8=06S=88=1F`=82s=B9=18=89=80=0Ey|=93P=\n=11=9Db=C6B=91vc=92=1E=D8=11X=88\"=D8R=15p=D53=DB=88_=B3=99G=96=93=F1=1B=8F=\n=00y=0C=ED@=943=CE=E9=8D=AD=CB=8E=D0=D6=7F=0CV=1B=00=B4=AEX=01=16i=B7=1E=D8=\n!=1E=E8=0C=1F=A80=D6P=0F=FC=A88=C2=B9=8E=C1@W=A5e =BB=1B%=F0B+=AC^$'=B5=01=\n=DC=FA=EA=CCq=81=B8=95=E7=88=F3=BE=B4jX(=E2X=D7=C2=BE=17 =D16=82=9A=C5Y=0B=\n'=00=02=E6=B8=E4=16J=3D=CA=FB=AF=FD=EBkd=FE=EBV-lX=DD=D2=11He=F8=BB=AC=16=\n=10=83 t=CB=DB=B8=829@=02=A3Z=82=ED=A0lD=AE=CB=19@=02d=F5=A4=CD=8E@=97=08=\n=C9)NL(X=1A=02\"=02Y!=9A=D0=C0=82=EA:=A7=A9=0E=17=D0=FB8=17=9D=F82=C9i=01=80=\nh!=B0=85=8B=176j=B8H=A8=D0=C5@=82\na=F0=E0=F1=82=06=12=1B=0CY`¥=A1=11#F=81.|=DC=B0q#=A1G=1D=0C=1B*|=A1=D0=C6=\n=12=164P=9C=88=19=13=85\n=19PT=9A<R=E3=C5=8B=1B2=04=BE=C8=B8=91=05A=81O`=9C(=A1ti\t=13$=9EB=1D!u*=D5=\n=AAV=AFN=0D=A1u+=D7=AD\"Dt=F5=FAu=EC=08=15$F=9CE{=82=85\t=137t=C0t=C1$EL=17=\n2=EF=E2=CD=ABW&=8A=BE‾=FB=A6`=D1=03F=0C=1A)=FE=FE=BD=8B=F8o\n=15=3D|=D6hQ#F=0C=19;r=EC@=93=A4=CA=93)@t=0C=C1=81D=86=0C=18=A6y=A2‾a:F=8D=\n=1CA|=D4=A8=A1#=88=95=16=1C=1B=12=C4=11r!o=DE0r=80=A1ac=C8=8C .b=B4=D08=B4=\n=87@=1A=3D=C7=F4=A0Q0=E1=8B=1C$=3D=FB=BA=90b=10=E7=8A=18/z=C4lk\"=E6D=1A0=16=\n=92a8=DB=05G=E5-=B0=D88=B2=03=87u=98mK@q=E2=A2=04=D4=FEi=B1=02=18=E0=08 =10=\n=18=96=81=07=8E%=C2=08_UU=C2‾O=B9pER&=D8=D5=D6\n=E2=8D=B7=97=86z-=06=D8\n-=C8=C0=85=0D=88i=D8a\n=8D=BD=D0=C2=10:=AC=F6=18=0EF=00=91=84=13O=0C=B1D=0E8=04AC=0C=A6=C1=90=1A=\n=8F=A6=CD=D0=84=11C=EC@=C3=167=D8=C6=11Q'%4=83=1E=3D=BA=C0Co=BC=BD0DH5=D0=\n@=03=18=F21=E4=1E=0D9=EC=94=84=0DF=F0=E0=83=0C1=E8=F0=C2=0F=3D=00q=1D=88/=\n=D8=C8C=8F1=F4u=02\n1`x=C2=0B=87=EDh=03J=03=B9=B0=83m=CA}H=C3=0C6=D8=E0=C5=9E'=A4=B0=C3=9D2=98=\n=C0=9F=7FQ\tXiU=04bz=A0=A6b%=C8=E0=083=A0=05U=A4J=DD=FB =1E=A4=18f=B8=A1=AA=\n3u=A8=C2=0C5=1C=96=D8=86=1D=A2p=E2\ng=9A=B6=C3=0D7=E2p=C4=0FA=14=E1=83=1D=98=CD=B0=83=0E8=F4=C8S=18;=C2P=DAj2=\n=18jhd=1C=11AC=0D=12=15T]=0D7=DC=10=C3=94\n=FD=1AC=10J=D8=A0=C3=0D=86=1A=E1=02=A1=1AI6=C5=0EF`=89=A5=0F\"=0D=F1=03=0E=\n\n=A1do=139=C0pXx=E1=B5=F5=AF=9D+=B8=10FCJr=84=C3\n*=F0 =83=0D=3D8=91=C3=99=93=B5p=03=110D*j=7FNY=DA=F1=80=98=16=B8)=82=9DzJ=\nU=7FL5=85j=C0=AB=B2=BC=98\n*=D4=F0=9B\n‾=B5=BCXc4=90=C6ca=DC=DE=00D=11=11=E5`=C3h=CC=9Av=03O1=18=C1=DAj=94=91=A6=\n=83=0EBu=F4=02=119=BCpl=0FE =AB=D2JT=02=E1D=0C7=E0=10=05=0F3=CC=80D=0C,,=EC=\n^=91I=CC=90=FCe=96=B1=F5=C0C=D6=D7=B1=C7=C2=0C<@=B1=03=AC=F6=A9,=9E=9D0=E8=\n=E0=C3y=17!=DC=C2D+=A40C=0C9=14a=85=99=0B=CF@=14=0B7LXBR=93>=E5=B1=80 g*r=\nX$=97<=D5=C9L=F5=8D=97=BF,=EF=85X\n=85=B5@3=EA=AA7=A6B=0CH=F4H=18=0E@=CCk=03=13X=CEp&e0=10=11C=15=91=F1=FA=C4=\n=8ED=F0`=BC=154=B8=A4=1CQK=B80E=12R=F4=80=83=0D>=F0=B0#O=D4i=BD=10O=BF=F1=\n=90=03=13=A4=D5=A0=D1=CB*=18=1AD=0Ed=BF=FDC=0D=07]=1B=C4=E0\n=E50=04=CC:=04=3D=B9i'=F4=3D=1E\nC=F4=A0=07CP=C9=0B=94=90=A4=9F=10$=08dB=81=FC=96p=83\"`)#,`=82@=F87=83=B5H=\nJR=98=03=D0Sj=F0=1F=ABp=AEs=9E=D3\n=E8=14$=95=17=8Cn)(@=15=0B4=14=83X=A1./=FB‾9=8C\n=80=00=C3=182=06=06,=90=81=E2l=E0=9D=170k\t8=88=81=0D=EA=C0&\n=F2=80=06Dp=02=B4>4&&tk=07/=C8=11=10j =83=85=BDl#J=F0At=DE=F6=BE=D6=C4=CC=\n4O=A0Zo=BE=B744=01=81\t=E7S=C1=87|=C2=C3=1A=F8 \tT=C8=01H=10=85=03=19=14a$=05=\n!L\n=BA=A3=12=82=C8=80=7F=E3=19U=CA=DA=02=B3=17=F4=C5i-P=C1=E4=AC=E3=91=17=AC=\n=E0=04=A5Q=8D=0E=90=A0=83=E4=AC@\t<=B0=C1=0E=E2=D6=02:=C1@),=C0=1C)=1D=E4=82=\n=CC=05(=84\"=F4¥=A7V=F0=C1=11=9C=A0=05=92\"=02L=9A=D2=02;=B5=C5z0=A1=CB]R`C=\n=D7=C5=90/}=F9=81=BA=EA=84=C3=19f=01=06B=10=C2=0Fn=80=84=D4=00=D1[=17I=DB=\n\"=B3=C7F=F4=DD@=088=98=01&yp=83=97=F9=E0|-=F0=81t=0C=D56)=DC=FC=E0=8B\"=A1=\n=CF=0D=92=06%=EF=F9=880S=90=01=1BO=C4=C8=17=8CM=065=D8A=12\"=C2=83=00=E2=C0=\nz=97=81=12jz@=17=1D=02=81=06=3D=F0=C1\n=EF=83=B2=B6=ECp=850=B1=13lx=103=82Ha=06L=18OA*=F6I=B4=AD=A0=06EXB=13=E8I=\n=14\"=B4=A0=08-=C0=98=83=96B=02=A5=BC=94=05A=8B=81=A4,=A5=CA=90=89=0Ct#=B0=\n=0DLI=B0=83=90*E=05QjKB&=8A=823=1C&=92=8Ai=96=AC=82=C9=AA=C4=0D=C1=98=AF=EB=\n=0Bi|=F8=02=D9(=E14=DB=DB^B=B0=A4=82=13=A5=C0=057=00+=0BL=C3=1E{J=C1=05_=05=\nk=16=AD=08=ADM=E2 \t7X=82Hl=00=04\"=DC=91=AB=D9:=9A=19w=94=84=17=AC5=05E=80=\n=01=12=86P=99b=E9`=07L=B0=02=16=A6p=04=DDdM%10=D3DO=90=83=BA=80=C8=A1=0F=8D=\n=C2=A9=FCV=85=1B=FB=04=C1=81<A=81=0CR=80!=19 =89#6=90=01\n`=90N=1D=BA$n=8Ct=81=10d=C0=02=17=1C=A1uj=ED=81\nZ=E0=14T=DA=F4=A6a=19=01=0C=18D=16=05=91=85=04h=93e_j=9B=82)=B8=C0=08Bu=02=\n=0E=0C=DA=17=EBT=A7=B2vB=01=10l=F0U`:=150=3D=90j=CD=D8=F8=9Df=C9=8EY;=98=1F=\nu=9A=A0=03=1E=9E=A8/t=AAU=10d=F0=020=E8 V=8D=01kc¥=F0=93=D5=CE=A0=07y=8BH=\n=0F=84`%=1B=D4V{=DD=E3=96=10=08=D3#=D4=02a=06/=DB=C1a=EC=D9=B0=18=B8a=8E:=\np=C2=10=9C@=063=FC =07=E9=E4=17>=BB=E3=02=BA=04le-$$=CA=F8=B7=94=80=A9=E4=\n\n3P=C2ar9=AA=13=D8=C5aoq=C1e=A5=99$=15=9CK]5=E8=01$=7F0=83=B0=1A=C4A=94=F2=\n=D8MA=A0)=11=90=A0=B7#X=C1=08=F8#=FB=BA=13=08!=068=BE-Qp`8=16H)=07-=98=81=\ni=EA=85=C7'=A8=0EZ=B1=02o0=A9z=BA=D7=AD=E0 =8B|=D9=89=B0=14=03=1E0=A1I=A8=\nY=CD=0E=8E=DC*=1C=E4=F7%=B5b=CC=CD‾pXc=ED=C0=07J=80=C2=0F=84=086=F9}o!0=C0=\n=1A=BF=CE=D3I=C4=A1=00=91=B5J=81}\t=03-=F5=8D=CB=0BqHB=10=8E=F5=03=D3=80=81=\n=B5}=19Q=E9¥=C0b=A6=C8=92t:H=97ml=00=03=14(=85=902h\niM2=83=17=B4E=8A=0Eq=8BGb=C9=82=14=85=B2)$=88=C1=92=99,=DC'+=C8U%X=01$I=E0=\n=16=97=9CX]=CE=BB=CD@P=83(=1E=CC=8C1*@=16=0E=BEK=DE=F0=A2=A0=08=DAUU=AD`=90=\n=1C=D5}S2=02=D9f=B2T=13=032=84=DBfI=10t_4=BD=E9=19=AC@qh=12C=0EtP=84!h!\tO=\n=08qH=FB=84P=04#=F0=04=07=EF=93=CC=0D=ACD=19=E6=F8=E0=85=84^=01=EDbP=84,=D0=\n=A7\n[0=02=8D=C2=A7=83=1D=1D=99=07=BCl=8Bi5=DB=16=DF=A2,=D7-=86\t=0CT =86=16=80=\n'=E6K=B9W=EBJ=80=83=A5=9C=A0=06=99.=81=14L`=83Q=01=DB=A5=FD=D1=1CU=9A=9CS=\n=05a=11#%=08=CC\n=D0=96=C5=AAc=A4G=02a=EF=1Fi=90=9C=99=C5nG=E6fsxy=B0=EEY=F9=1Bv_U=01=0C=84=\nc=83 =FC=FA=058=F8=01=A6=C9;=CC[=DBL5=93‾=96=C9=C7=C5=05),!\t=C7=CA=81=82U=\n=833=16=B0d=0DJ=00l=B8=83P=A7=19=B6@G=A6A-=A0}`y=1E=EC`=9E=E2Z=C1x=01=86!=\n=9D=E3Z=E7=A4=CB=F5\t=96 =84=A4=BF=9A)*I=FDea=9DA=0D.=9D=E9Sq=FA=A6=BER=03=\n\n)=10=08'=E0,=16=D9=A8=11k\t=C4=06R=FA=FB=01=11=B2=95=10=19=0CQ=9F=E8C#k=F2=\nM=F66=F3rU(x=89=0Cg=A8=82=17=8Ca=07=BE=BA=E3o@=04=03=A1=9F=BD=B5=EBf=CC=0E=\nwD=1F=B9=E5=C0gG(=82=10.=B3=83*8=EB=05W=88A=1B )<?=B5=E0tR=ED=F7=0C=F6=18=\n=1B=DDp=8Bg,=81=13=F4N=0E=D4=DDD}=9E=E8=A5=9E=02=AA=C4=B1=B1X\n=A5=C0=10=F4=D4S=94=80,=8D=8E=C6=F8=87=EC5=DD=B3A=9B=820D=17TF=EC=B0=11=0B=\n=FC=80m=B5@=13|=1F=8C=D8=C0`=01=11=D5=ECY=0C=90=8D=E1=F0=84=0D=C4=17=898=95=\n=E9=A0=CE=05=A5=CE=EA=E8Me=E4@a=F5=80w=B0@\n=D0=A0Z=85_=F4\t=13`=D4=84=B3=88=8B=C5 =81=E5=F5=93=0E=D8=80=A1=10F=E4t=C1=\n=DEp=DAVQ=9F=0C=B9=00=F0L=92j=CC@H Jl=BCM=CD=AD@=F6=B0V=14`=8Cf=89^=1B=92=\n=CEx=FC=08A=E8=C1=DE=C9=98=80=04NJ(=F9=C7=1C6=9B=06‾=8C*u=05\tpE=82=A0=C5\n=10=16=9D=C5N=9C\t=8E=0B=D4@=DB=BCMB=F5=C0=B1H=D1=9EY=92=A1=19=C4=D85=D5=0D=\n=CA=04=0D=B0=0C=12=E2=C5=0CM=86=0DT=17=C4=D8Vi=F9=05=0D=EA=85=96U=1F=AC0=D2=\n=0F=A8F=0D=84=81=11pK=15=F0@=12,=D4=85=01=C1=B9=C8=CE=9E=F8E=CC=B8=00J=DD=\nZ^=F4=CB=89h=D5=0B=CC=C0=14=D0=11=19=D2=003=A1=8D=0E=90=19a=BC=80 =B1=A1=1B=\nJ=A3\t=B4=80=0E$=85=1EBE=05=EA=A1=B2=91R=06=F2=E1=EC=F9aX=A4=00=C9=8C=80=BD=\n¥S`=9DOH=BD=17=FB=C4=06=A2=88D=F6=D4=8Ej=C0\"=10XI=B3=1C=E0%b=E2=EB=CC=CA=A6=\n=01=01=BF=F0=00=12,=C1\"=AD=19L=90V=F8q=08=3D=FD=86=0D|=0F=0D=E8=00=13=CC=CB=\nc=D4=C0=12=14=CB=B4DT\n=18=81Q=FC=1D=C6=ABpb'=A6=80=18`=CB=0BH=C1=8E=0C=C1-=CA=00Je=84\"RM=9F=ED=D2=\nxH#S=E4a=8B=ED=C0=A8t=A36b=CE)u=E3=1E=F2a8=86=00XxE\nH=05r=0D\"=16=B1U=9C5=07i=B4=8D=13=18=C1=0E4=93=88=E4=00=98=DC@=BD=B9=80=A1=\nTU=AA=0D=E4=B9=E5=E3U=CEDc=C0=80=13=00=81j=A8D=0E=10=813q=A2\n=B4=CC=B8]=0C=0D<ej=C4=80=12=CC=1D=0F=08A=12=B8=80=0D,Lc=18=93&=DA=89=9D=00=\n=99RA=A3b=F0=90u$=C4=E0=D8KB=08=CD=19t=84C=9C=9C=A1=DD=9AxH=E3M=BE=18Kac6=\n>=E6M=02=D77J=85N=86=C0=0C=90=90=08=E0=0C\t=D4=DCY(W=11=B0=C0Z-!=C9=DD=11i=\n=CC=C7=0E=FC=93=E5=1D=CB=0D=C8A=C4$=8BiX=DD=0B=81U=87`em=DA\t=0B8=C1d=94U=0C=\n=DC=CB=F7T=C6=D9=FCI=DF=0CX=1F=8F=F0=84=9CP=0D=0Ct=A5=BB=B5=07]j=08=0D=1C=\n=81=E7=AD=CC\t¥_=99H=11oD=C6@(=89G=D8=00=18=10=93=0C4=81=0B=DC=CD=0C,=A0df=\nc=0B=95\nyF=E6MR=E6=A5pNW=88=80\n|=05\t=04Fc,=0C=0BL=1Ba=F1=17}=F6Nex=C1[=F8=00=11<=1C=10=84=D8=DCM=06=8FP=01=\n=15=FC=94=3DU%>=DA=A6S=05#`=B0=C0=D9=18A=1E=F4=88=94=94=01pjH=0D(=06\n=84=E1=0C=E0=80=D6lO=8F=E0_=0B=88=C4=9D=BD=99=E7=C5=C4=8A=A9=0C=8E=EDH=84=\n&=CBI8=84@p[Q$=07=0DDR4=A2=0Cy=8E=8E\n=A4=E7S=A0=90=8E=C6=DEz=82=E3*=B9=C0W=B0=00=10=B4=80O=F5=91=89=DD=92\t=A0=00=\n=F8=B1=95\n=AC =D3lXaM=81=19 =01=10=04=01}d=C1=0F=AC=17a=A0\t=0Cj=1C=ADXe=83J=9Fv=FC=F9=\n=85O=10=01=10=C4=C0=0F=FC=05=0E=E4=E3=0CU=DD=B70=C9=0DL=81=17\"!=AA=E8\t4=E6=\n=C9=99=C4=CA=A9=0D=01=8Cb'F=E4=C8HH=13=0C=1C=1D=8E=BA$=90f=A3\t=EC=1A=A3=EA=\n=A8=90=82=10N=ED=A4=08x=D7=0B1=8C=A6Q=86=0E@=81=9C8=01=A1=A9=00=DC=E9]=0C=\n=E0=95=C1=0D=01=144=C1=12=1C=81=10=E4@=12=FD=0E=0C=F6=00=C0=CD&=99b=A8=99=\n=EE=C5=14pH\n=04=01o=96=CF=89=E6=C5=8Ar=08\n=AC=A3B=91=91=9B`=07j=B0=96L=94=0E=9F=8A=07*=C6=C4=0B]=D1=87=FCQ5=DA=00GH=\n=E1j=9DG=0D¥=A4=A2*=1D=A4>ELz=ABzJ*{z=05Y=EE=CF=91=9D=00=13=08A=AC=C0=C0=0F=\n=0CA=15=D4¥=0D\n=A3=C3=10=1E=98=B2=A5=E5=0DA=13H=81=B1=DC@=12=F8N=D1=08=C1N=C8=E6=82=DA=A0=\nm=EAix=A5=C8=F60=01=DE=E9E=FFD=E7\t=FCtK=F8,=81=B8LAZ=16=90=BB9=C4=82mS=0C=\n(U=FF0k=86=F8=8D=9D=CC=80=10=B4=CDw=AA=C4=F7q=EC=14nK=88=C1=C0=05)=A6=E8=85=\nk=7F=F0@=CCN=CA=B8^=85=93=F1@=FE=A1=00=0B=A0=C5T=F4=00\t=AC=80=0E=A8=80=AE=\n=84=E1=99=04=E1=10B=E8=DA=ADc=B3=08=01=B7=B4=E5=0E=84=81D=F6=80=EFT=01=9C=\n=F0=00=10=C0=00=13=94=DB=AC:=1F=83=C6=90=C3>=EC=ACl^=ED=88=19=C7=E6)=D8=86=\n-\n=B0=A2=C4=F1=00=0B&${D=9EW2=04=0DH=C9{}l[=F8=00=DA=92=C7q=04=81=BD=80=A8=B8=\n=04F=B1=A0=816=F5KL=F4=C0=CB=E6(=CD>=C5=0C(=EE+=D9lV=A4@\t=BC'f=BA=E7N=12=8C=\n=0C=8C=80=BA=CC=80=D0=D6`_=B0=80=12=1E=9B=D4=C0=80=12=A4=13=1C=D5@=B5=E0L=\na=F0=D0=D8$=16=0D=18=C1o=F8=00=D6R=18=AD=DAL=BB=01'=DA=FC=E6=C9=86=0Cd\n@A=16=E8=C0\n=AC=1B=EE=86=ECL=B8=00=91=D1=80\n<=81=0D=F0=8B=F0=84=D4A=08=CD=D1=C4=97w=C0=A9=F0=AE=E8=F4=C5=A5=F0yG=C5=98=\n=C6=89=B8=C0=0F¥=C1=12D=C7=0E=C8N‾1=C1\tP=DB=AB5=EES$=A9=B7>n=80=F0=A4=C8=FC=\n=E4W=90=CD=DAu.c=C8=00=13=90=98=BDi=929=91M=18=DE=80=1E¥=D1=CB=14=C1=F9=0C=\n,=C1=0EZ=87=AC=80=A3=EC=05=F5=E6=AE=0C)F\n=FC=06=10=05/=F5=F2EaxS=B8YT\n=FC@c=C8=C0=9A4=D3=8E =81v=8D=87\n0p=C0=C0D=F6JF\n=C4=E1=0D=D4I\n=AC=14=81N=CB=0E=B8=00=0E=84S=0E=E8¥=FA>=05\nHfM=B5=EF=E6p \ty=05Z=B4=16=7FuH=84=A6@=12=18=0EI=14=DF=BC=DC=C0=0FPA=84=CE=\n=C0=11=88f‾=1A=B0=CB=F4=C5=F5=F9=EA]=94=F0=F0=96=C8e=00=11$=FCU=D6=16=EBI=\n\n=E0=CCK =05=A3=CC=D0=0Cx=81=0E(=81=8D=E0=911=E1nC9lL=C4Y=8FL=94]=C6=84=0C=\n(=E2N0=02=DC\n=84=96=8D'=0E=BF=94=B8=F6p=A54=19=A5z=C5=F5=F0=00=16=3D=A5=EBP=15=D8E=10=E1=\ndD=0E=84=A6F¥=11X=1DY=FD=D2=CA=9A=B9=F0H=9CA=99=DE-=05o=08=D85=8Apjq\t=DB\t=\n=8B=94i=ADP=C6[T=CB=DE(+=DA=C6=DC=8A=B6=C0=15=10=01=1A R=8A=B5=05w=FD=91=97=\n=B1=80=0E=90=C1N=D0=92C=3D=A0 =FF=967=16rp=1D=B2{F=EE=85=A4M=11x=07=9A=1A=\n=13=C6 =05=C6=AE=CB=1A=A9@‾i2=99=A6=C0=11=CCPYy=17(o1=B0=96=C8=F5=15U,3=F0=\nZt=81=0D4=E7S=9A=C6=EDT=AB=E2=9C1=D8=BA!=AA=D4=C0m=F1=A9 =D9%=0B=1C=01CP=B2=\n=DD@=91=86=06A,=BD@=E2\nr=CD=C5&s=C7=1C=F2*U=AA=82pS=97=D5=EA=CB=CA=D2=0B=EC@=0C=AC=11=15W=B1=CD=A8=\n=0B[=1D=07=0E=0C=A45=A2=F38sq=F5ip=EB  *=C3q=C8NT=E2L=C7I=A8=86=D1$=AB=CA=\n=B4d!9*=8D=81=ED\t=AC=88B=02=11=0BpA=13`=9EET=04!=C9=E4A=E3dB=A7=D2B;=99{N=\n=C5=84=08=12YrH[@=85=13=BC=14r=AE=00=10=04=96=82=D2=AE=87=C8=C0\"=B3=D1=11=\n=80=C6=0D=FC=1AM8=DE)=8B=F4=C1=A6=8E=0D=FC@=0BA=A7=F0=E2=18=0Ex=AC=9D=F8=84=\n=D6=10=04=19=F5@=10=DC(=AA=CCt=AE=05L=13=F0=CD=1B=EEmRM=1F=0C=80=C4=D9=08=\nf=02N=A0 =1B=B5=E6=04=04=00;=FF=\n\n--horsespit\n\nAnd this is the trailing text!\n--horsespit--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.46.msg",
    "content": "X-Andrew-Authenticated-As: 0;bambam.sins;The Root of All Evil\nReturn-Path: <owner-ietf-822@dimacs.rutgers.edu>\nReceived: from dimacs.rutgers.edu by thumper.bellcore.com (4.1/4.7)\n\tid <AA09047> for andrew; Sat, 26 Oct 91 03:16:34 EDT\nReceived: by dimacs.rutgers.edu (5.59/SMI4.0/RU1.4/3.08) \n\tid AA04574; Sat, 26 Oct 91 00:44:07 EDT\nReceived: from akbar.cac.washington.edu by dimacs.rutgers.edu (5.59/SMI4.0/RU1.4/3.08) \n\tid AA04551; Sat, 26 Oct 91 00:43:54 EDT\nReceived: from Ikkoku-Kan.Panda.COM by akbar.cac.washington.edu\n\t(5.65/UW-NDC Revision: 2.23 ) id AA11903; Fri, 25 Oct 91 21:41:39 -0700\nReceived: from localhost by Ikkoku-Kan.Panda.COM\n\t(NeXT-1.0 (From Sendmail 5.52)/UW-NDC Revision: 2.22 ) id AA02327; Fri, 25 Oct 91 21:41:28 PDT\nDate: Fri, 25 Oct 1991 21:39:38 -0700 (PDT)\nFrom: Mark Crispin <MRC@panda.com>\nSender: Mark Crispin <mrc@ikkoku-kan.panda.com>\nSubject: re: more content-charset stuff\nTo: Keld J|rn Simonsen <keld@dkuug.dk>\nCc: Neil.Katin@eng.sun.com, ietf-822@dimacs.rutgers.edu\nIn-Reply-To: <9110251926.AA11580@dkuug.dk>\nMessage-Id: <MailManager.688451978.2321.mrc@Ikkoku-Kan.Panda.COM>\nMIME-Version: 1.0\nContent-Type: MULTIPART/MIXED;boundary=\"16816888-2078917053-688452093:#2321\"\n\n--16816888-2078917053-688452093:#2321\nContent-Type: TEXT/plain; charset=US-ASCII\n\nOn Fri, 25 Oct 91 20:26:56 +0100, Keld J|rn Simonsen wrote:\n> One advantage of having a separate content-charset: header is that\n> you are not restricted in the characters to use in the charset\n> name. There are no meta character restrictions.\n\nI don't understand this.  Parameters can use quoted strings.  I would like to\nsee the quoting apply to the value of an attribute/value pair rather than to\nthe entire parameter, but that's syntactical sugar.\n\n--16816888-2078917053-688452093:#2321\nContent-Type: AUDIO/basic\nContent-Transfer-Encoding: BASE64\nContent-Description: voice mail\n\nLnNuZAAAABwAAXAAAAAAAQAAH0wAAAABAAAAAPv/cnN3dG9vdG5zdnl5+fb2\n/Hx6/fV+d3n/+O72/fP8/nVvbmZsbHRyb313eXlwd3BubXb2+vHs6evu8/f/\ncHtzbG1re3l1c3p7cf37/v59+/1+/fz49vt7dHtucvpsaG96e3Vzb3n48e7m\n6O7093Vue3pzbWxyam95ef56eXNubG18fnd0d3pzdnn/fH398u/7+vj58Xl4\nfHd5cm9wdG5sfHh5/Hx8cf/z+PX+/v3++fn2eXT/dWx2e3Z8+f99b2tvbHF2\ndXz8//rv9v/+/Pb8en58fP78eXtxcHttbX3y7+/t9Pn5/XVsamVpam9udf97\n/fx6c3Rua21qbXJ49/X56ev7/Pry8/p8/P18/u3r8fr9e2xpZmBmbG51fH73\n7fZ99n7+e3Z9dXh++fz6+3Nsc2tkaWdqbXZ2cv9+e3z//vr28vjv7Pj8//X8\n+/h4evz5+3l6+nZ1e31+cnv2cX7+cnJ0cnJ9e3J2fn52dW5tcXn+e/99e3Ry\nbGpvbnD8+/b47e309v389vL0dnh2Z2ptbWtz+Hn57evyffb/cnl5/vn28Ovm\n7fT9dGxnZmRmaWpta3Fvdn3/+Xp5+f1zcnZufe/y9/fz+nV6fHRvbm1sb21t\nePX6+Ozy/3z6+nz+fn12en17+P9vdnpvbX18d3d++3J7/Xz29/fz7/d+/fn/\ndXF4cXB1dm1tdXZ9enx9ev97cW14e37z8/b49Px1dnpqa3N8d3n5fv99dnNw\ncnJweHVv/ff38unj5unxend4a21uZWVpbHBvcnz/d/fzfHv8eXN2cXh5eHd8\n9O/s7/p9bmttamVmbXD36ubi5+rr7vpxaWtpaWtrbW54/XZxfv338O/3/Phv\nb/t2c3l9fXF89fp99vD693x+fnJtanNtam5x/nn97/H2/f36cHL5/P/3/3Z3\nev/+eW9pbG1qa3V4/evzeXZsamdpaW727evs6+r7en1uam56+Pr5+v99a2ls\nbW91++/28/B6dHl4/H399vzveXNwbWtnef37/PPq8fXv+n5ubHV9/nb07378\n9fhyZ2xpYmZtdn7/9vN9bGxubnF1/O3h6Ofs/f52c2toanJtbnNtc21ucn35\n++/p9HV7+Hhsam9ueH737Pbt5/R9bmRkZ2JkbWxuePPu7OXn4uz57/j8cnX3\neW1wen758/T9b3N0ZmFnZm51evt++/n5eXVxe3dwenn47e3r9v92aG1vam53\nfe7s9Pj09fj4c3J6dW5uc359fXdrb3Nramx4ef759e74+3pyeHp++/Hs6ebr\n8P94eGtkZWhramltbXF3/vT3/X56fHxzc2xx/3377+vv+Xx4amp2a2Zqefz4\n93f78fPx+fD8+PHz8f37+fnw8/97bmtnZmdqbnT9+Pz5/H53d3p7eHltbHd3\nc3J5fvbu6+30e29sa2djX2Zvdf30/Pf67uz27O3v9fn1+Xtycm9xcXV0c3Z5\n+nNxaG57dHJ1+fHx7u3z9P13bnF4fHhua2lubmx4cnN0cHv4+e/n5ub0fXlv\nb3V3/vv7+X59c3p1dHBseG5z/Pz0fn58bm5vc3Z1ffbv6+78+nNmbnJxbm93\nb3J1cnNscn326ezu7v9vcHRqZ299+vn28f38d215cXN6//7+9/n2+/7w8e/p\n/Pj6dHh1cmxuanF7b3v//n51a2prb3Z1fnv+/P39/fR3bXFtcm1weG1v8u/v\n7vr+/Hn6/X56bnR0dH77fP737en6eHp1bW1vbHNsbXn4+vnzenVtbmpobv/2\n9eXk6O5+fWtnY2Nod/n67PX+7+/+b255+PL2/nJ7fHd87/p7/H11bWxua2dq\nbHNycH3v/X37/fL4fPn7b29zcHjv7vL2+Pft+25sbW9vdnVta25tbnP+8/72\n7/L4e3RtcWxtbWltevr38fz47vn58/l+fP95eH337+nm9vn8bmtraWVqdHlu\nb3t3c3h0anV6c3b+/Xzy7+zt7+17ev9zbm1pbnNwc3jv6/b58vr8+Ptyb3N1\nfX54fvP9/XhycHh3bmhmaWp8fXd+/fT38vR0e3Ntfm589fvzfvb2bXV7b25v\ndm5ub374+Pb99+nq+X1+dXj6e//9fXh9+XxsaGJja2tsbHP//Pz09Ozl8/b2\n8PxveHh5fvxxbnl7c2xrb3h1cH7x/P15/+7u9375/u/3dvd4+HlvbmpyZmtx\nanb//vZ/ef39+3ZzfG968vxvfPt6fXRv/nNucnT+e3xxd/v++3tud+/4/f18\n9v34+3j8fXB2dXRtbvv/+f99//n9bmxzeHH/8uvj7fzy9+90ZGdob2VjcnJ8\ndWpqdf79/nF4fP/z+/nu9fjp4+74+vr6cWtrbnRyanV5cnx8eXb++v5sc31u\ncnNudHp+9fl9bnv0e3RubG94eG9zc+7u++3v+Pnt8ftvdXRqdvL18O3tfHF2\nZmRnbHFobnFv9+977er5eHb/dm9tcX7+eXn26u52+vt5/3lraHp9ff/2e3d9\nevpvd3N0/m1+dft6dvj/9nF6a2x6cnRwfHP35u379nl9+2xncXRvem/6+fr5\n9+fyeHt4fn199/r6c2z67fBuc3lnc3t8/nhxa2ttZm53b/r8dHl79un9fOz2\n+vx0eXn/ffvz/35qa2pnZF5ld/f16t7j7v11dv/weWtv/vH99Pd7aWNkZWxt\ncPzu/nfu9X1+d3p2bnH4+eXvffx28/37b217bXRs/3xrbm18+/r89u3q/G1y\ndXNvcnV6fHp46+1zem9ub21wffZ8dG158v1z8u17eXb+7+9+cHpzcnFxb2t4\nev5ucHRt83p0fP3i3+Xx+Xr/e2dpbn19c3J3cWJsbmt3ZfjyeX5udnZ1ff7v\n7/J7+/f++3t59fFuefx6+XT98XFrdP5tZ2ZwfHL+dfHpfuvx9epz9ex8/25i\ncvlxbHJ6/vl1bnf+7/xzfvdzbW959nJofH519/T88u/8a2tvcm968O7s93D0\n7HRnbW9sampz/vn26vp2bmd+/mdeYHR9+nh87Ozs9Pl5/fh4end5fP/0/Pxn\naH1u/HRob3Lz7P76+/3t+Pff7G7/6vVzc338a2hsdnVqc310bW569ftrcGl2\n/m5xbPHp+Pr37OLr+Ht89GRecn10aGByfmpmc+/ueHHy6ft2bX7l7XJscXds\nZnVwbnz/3+j77+7q+m1rcHZ8fXr++/t7bnBubWdnb3dpaPvveHFyc31v8e/2\n5+/u6uPl+Xx3e2pcYW1zbWz67u3t9PpucHRufHZtbvzs7n10dvTpenH19n5m\naflvZ2NzbmZtbv1van7r4/Tq3+3vd3v7dXhqZnx4bmtr//z8/nt7enFy9/P8\nann0e/5te+vs7fl6bnNvamZuc2xse/f3enbx9fzx/G9uefpva3Zz/O/9Zm3r\nd296+/f/eXV+b3Rsfuv7+fn0/P/69ezp+Xt+dHRwdX31/HVra3BpaGp59m92\nd3H6c29ze+l2anz3/WdteGxtcvb8e+/o7PPs6fn393VydPfvdW5663ptfWpk\nZmpoY2Vtef76/vbv5eTu9Gtp8vtveXh49/Pz7f9v/3lva2Jpdm5nc+z+dPXx\n+H1ydfz4eH3n9Hn/ePT9bmNhcXl0bm3+/nL47vH1+Pbr83FtdP9vc235fm12\nbXt6b21z+vpxe+b4fv9yfGxldnP06v/07+zy9/9naWpiZHR4evrq5erv9vDs\n92hqfvpzcfz59v58dGtrZ2Rjc2dhe/x+c3Pue3V+d/Dz8/f37vX9/fHrdWxt\nc/9zaWh+/WdrcGtuePvy9PX88Ovzc3nx9Pj//nnt7m5rbnV1aWpobnv6+Hl9\nev78a3F2+O31/HN17/5wb3v4dW5wfm9s7ezy8v376/RsbXN+fnb38Xp2+Xpu\ndmZpbWJnamt6bW/06+zw7vf5/W9wcXR9efPv9e34eW50a11rbGn5fHLv6PL+\n8+/wfXt9dG5tdHh7c/rq7PV9efX4bG1raGloavn5fvPy5uvt7nv2dnBtZmtr\naXJzdWxq+/l8/3Jy+nN2dW977efp6eTp4e11dWhvbGNjXmhveP38fO7s+vbt\n/nV6b/j8bHl8/fJ2b29taGNoaGlgX3v17/Dt4+1++ntxe3r8dnl+9ufp5+/7\nfGtta2t2d/z3cXFxbm9qcHN5/fbt6+j6+/J3d3Zpa2ttbnL98vh38/1ueW16\nc2/z/nn75+v8c29vcmpp/n14fvn2fP338//8/nR2dHxvbX3v7/fxbmRqam1v\n/HZv+vr2ev3p9/h7bnJzcG9ya2Vue3Nuc3L97Ozq83Z+/XVnYmptcnR97+jn\n5OP4e3xv+fNtfPT8+f1ye/ZyeP5ubW90aWRtef7v7O3t9/p5aWdtcWpqePT0\n9fH+8P1xb2xpYGlucv727ejj5urwc3N1c21kbXVr//1yev52cn73eHL//W1u\nd3d4ev/t7v/08f94fPduav97cWxpaGRzd3N7/+7y9f/9+XJveXx99un1+O7/\n7fZxb21tbXxye/l7/Pv2/G12ff77cG99dXzx+Hb+9n1zbm9saWx5/25sb/30\nevft8ff2/XZ2d/z8cm91fX18/P14fH5vdnhseHJmaHF0+vX88/L09fTz7/50\n9nlmbnxvbXVqbHhvcXF27unh7fnx/v/9+u/u+Prwc2ltbXFtbW9ramZsb2Zu\ncHj7eHv+/Xj87f38fvjv7ezz7fF2d2xpbm9vcm1yfXFv7+Xo7PV4b3Rrbnhr\ncXX3+Xn8+3tweW5rcnr/ev76dHn/dvbm6vLy9P98a3FtZ3Vvb3d4/nBsfnp9\n9f94/3xvem1qdP/v7Obp6u10cm5maWdobWtx/e/y9/j582xu+37+e/r46OXv\n8HhsZmNgW11lbHr48+/t5uXt/X17cXp2eP3v+nz3fvl9/nFpbWpqdXRubHH9\ndv759/Ls6nx5/nN2dG5tbHZ6fvt9/Xv1em50d3R69f388O/u+/z1fX17dHJ3\n//9+dntze3RnZGxuc254b2l5bW56+Pb14+Lr7O/+eXtqZGRmbXp6+vTt8fj3\n+Hx4/XZqa277+Pry+fHt7/RvZFxdZ2x4fO/zdv92dWl2+XL07unu9PP++3l9\ndW1vcHf9fHB3/Pl6/fd3eX14dP35cW98enL29XT37fPz7v91dWtnZ2Zrbmx3\ncXJu//jz5ebp7/L8fH17cnB6c3BsaWRrbnj+/3htb290ePv1+vv5/3V7eHN7\n+3r37e9+cHV4b290dXp+/fTy8/L07ezv9vHv/f53ZGBoZGt6+/L29nltamln\nbfx0bfR6dH3/ffz49fb89fjv7Pxwbm5pa25sbGlw9e3s5+Xq8vxveHJoeHN0\n9/3udGpsaW1lbXFqa3B9+fn88uvu8P9yb2luc3F8+O7u8e/7dXBrZWdtb25v\n+PT17u7r9fjv9+/yeXR5eP92fnhybWptb3Bydfn9fv3/eGtzdG3/+nz57PP2\n7312en1yaGlrb3F2/+/s9fb5/3lsam1rb3v4+/Di7fT7/nRqbWp29fb/df56\ncXRoZm14/3zv8ff8dff8/Hl0dmtnX2hob358+Pz7fn37fvju7/L47u3v7Pz6\n9X79+/9ycW9pbmhmb292cXh+ePxzd/598Xhsb25tbHJ1c293/fX2//r7/f1+\n+e/t5uzw7Ofl93t2fvv79fXu7u709vp2bmpfW1tVU1RRUlFVVVhdWl9jdP3z\n6urf29jY1tLP0dDPz87Pz87P0s/Oz8/V2NzkdVpPR0A7ODUzMjI1ODxCTFn5\n1czKxsPBv8HCxMTDxMTFxMPCwcHExcPGycrM0tnra1NJRT04My8sKysrLC80\nOkVa8M/AvLq6ubu7ur2/v8LExcbGx8rJx8fExsXExMPGyc7Y9lFKRDo0Lywp\nKSknKi4yOUVX6ce8u7q4ubq5u77BwcbKycjIx8XDwsC+vr28vb6+wMfTa1VM\nPDMuKicmJiUnKy0xPEhZ0r+9u7i5ure3uru6vL6+vb69vb29vby8vb6/w8jO\n5VNGSDswLiomJCYjIyktMD1VX9a5tbeztLi2sbe8uLq8u7y+vbq8vb+/v8TE\nxMzR0mxGRkQ0LiwnIyQkISUrLjRK7tW7sbKzsbW4tbW9wLy9vLu7vbq3uby+\nvL7AwMXM1mFEREEzLSsmIiIiICQrLzVO4c+5sbW2s7e9ure8v76+u7e3urm1\ntbi6ubm5vL7H3k5NTDYtKSUjHx0bIC8rLWXdwau1vq6wvMLUx7rDacyyt7iv\nsq+orrerrLOuvj4oPNkbGjEZHUUZGk7Ewuaxq6ydtzTIzSslKzBC6krMoKKl\nnZ6bm6esqbPA2i0TEOgfBx4cGaZAJKKWlKewnsW+yxMYSCAaLH66paS1mZWn\no6uvo67DtrTGQxIITOAHFhwalagmppiQn12vMTazEA8sKDxDsJ6VlKiena6u\nRUOoqbe0vicLE6kTCykQOpHHVKCVlLWxQBLF1AsdNCdurqidjZiun6qyyC36\npKWuux8HH54PEx8OpJTWXD6SkLWnGxelRBAVHjvBpamokJSauDOpvtGnq6i0\nYwwFzE4TMg4ZlJWfJzmPmJ4yCy+eVBoRGzWfn8ScnZaXRKyp9p6luN0PAx/q\nESccF5ucn8A7mJ2brBMvsza1LhIsxLmtp8Cila+vqqefrrUjAwktESI+Dk2Y\njpc03F6bjSAQHzGWjy4VMaSQlTgdt5+coLyiq7UdAQ0WFaQXDD+0jJa/JSeO\nlC4ZFUGTljwfJqGLlMZPXLSTpbusKhYZIhAZJgse+7yX0SYksI66KRkel5Cv\nRiFJi4/NvEY+kJOnozAME8EgMisGF7yfpVYhELOaNUgYGqSfnMcezI+KkqIt\nSpGdozUFDyxElVIQEyKalrgXCR06rZwxJNW/mZwfLsSdiJCuq5qdoiQFDBfH\nkkMyLC2boVwYCg4ZxEglu1mijq3Cr7SVkJuhpKpKFhUYF7DMJKrPrZi0dh0N\nDBsiH8s9PZ2em5upo5qSnKavHQ4eKyKoriPIQVOUn7A7GBMaNiQtRBtFVM2M\nj5OToaKtMwkIFxqbkyxAvruSl90kFRc/nJ2uRRkVHzSpn5qQmZuuGQYLFh61\n3SmdlZSMnb4mDxMpvqaWm7GmLifES6iiuLksDQgUFT68GS1ArYiMlKgaFCJf\nqZ+rtpeTmZ6ur/tBJQsHDxUwrtM3MCRIpqSgstTNWL7hbj7HnJuPkJmcrTwM\nBAsPMbPaqLDpoKU4JhwZPMvfr6msmJijnZubobMlCggKFE1CSLo5qZCcpmQY\nIzkuMjk0rpGSjpCZmaw5EAYIECAiPqm3lY+vvzMdLj0rLTwrxpmWjI+ZmrEv\nGQsHFRgYLjOujI6bnjUmdEUhHBkfe6mOjJKSnLosEwoQIhkZJzCcjZWZtkmu\nrkEZDxMtspeNkpafViYNChQWHCxEpYyNl5r3Pc1EPzAZHStDnZKWnsIzJh4i\nGA0SGi+hk5KRmJucsi4ZDxIt3KGVl5utSBkNFh0bHiYwrJWZkpmjmaewPR8g\nLU3DrqOiu08nFBQYERMbI9OpnJCPj5CZpfYbDxghwpiana5dKRYaGBUaGyvE\nrKKanJmPlpymSjkrHjBru67lTTEgHRcODhYcN9+znJaNi5GYqk89QDs5N+qr\nr62/MygXDxATFh0pSa2ckIuNkpmudSsbHh8uvLKnn6qw2ygXEg8TGiBOspeM\nj5ScrLhaMCQcHCAqPrGko6GxyugvKB8ZGyEzvJ+am6CqvUtGMy4wKC1prqKh\nrtDdT0c+KigrMGfGta65tsDizVA0KCAhL+irnaGors/xUT04Mjc+R37b3r64\nyvg5KCsrLT5Svqijpaq3xMzpUkZL3sPB0z01OjRBV0Q5LygoPcyyq6mssbS5\n5UI5MDvov7KqsbveODYoKC0pMDhiu7eurLCtr8pVPTY7Tk5jyL+0utN3Q0JB\nNS4yOEfRwLWztLLJbzgrLi875r21rKu6z0o0ODo7Xsy4sb/mSUzWwcdhPzo5\nLy42P82vrquuvMw/MDhJaM7L2sO2utZWOjI8Qj44OTdC0r+vqq+6/To8Qk/Z\n0szCt7K1vXs/LywqLDU0OEVvu7GtrLfBzdvdd1FDYtTEsrjB5EhBNTIuJyk1\nTcnAxcPBub3IyM3Iw8TQ/G7fc3fX0ch6PDEsLjxT3tdh+9K/ucjdVkdPeczK\nyc/ZwsXI105NR0VIPURTX+ts78/M029aTV3X1tZrWGBy2N/i2fZmXF1WWGZY\nXX3OvL7VW0xLSlvU0sW7xs5WOzk7Qk/81c/kXllLTFzu5s/GzMvdd2JT+MK2\ntsFYOjQ1Okfv1szMd1tYUltlXltx5efi+dnDvLm9xehHQj46QFDuzM1zTkpJ\nXdPPztLpZVRQT2XbzL/C2P5WS09MTFln3szM6lpOTm16YWRo1MjLzt3fzcbP\n7k49NjE1P1Xj1tPLxb/E0dt6YnDb1dLEytXiXldZXFJGPjw+SE5VcNHExMra\nbVZMYt/Sxr+8vsjfXk9IRD8+RUtQVUdL+c7CyN96XXLe5fppXezKzMjHz9bn\nXk5KRUpMUm/w1tDa5t/h725ZWFhofnh5ZmL06X3zX1htdXt+cO/Vzc7d+2lY\nWnfj5vZiUlxi9PFtXlNbd+/r4OTh3/RsZ27l3N7va+7f4uFuYlpaaWBfWFVe\nYf7fz83a4WBTVFFebXj08fppWlf93tzU3Ot+aO7e3+NyZ/Tk3vFhUU5fd3tq\nX2ls/+Xn8/5sXFlo59vT0+Tg3+rg62hUUllgbV1YXF983tzk9vfl4Oj1cmlo\nZGBdaOnRydb5X01OUVprdePa19bg8mVbXF9dc9v+XV1TXu7dzNFjV1tHTl3t\n08vOy87R1v9cSklPT93jePVeXmr9e+rwZX5qfGJTbd7k79fEzMzQ3l5QSEdJ\nRk9j39HW0d/x/GRrYFVX49zi2drV2dtfSmdcWGtZSXnu5t3l4N/b121lVlpx\n63BTVdzO2u/lXlhUV93R1dzuW1pcU1lZZuzg2dPkdlxPU2bu2tvo9v9kVFRW\nX+rb09vTy87ZdFlWV11lef5zXV1eWFVOVWdy6uTf39fV1uLc2Oju++rc29zl\n19LS2eDucGpZQTo4NzUvLjZATFzkv7Wzt7y6tLGurq+ur7K0vEEmLiopJxkc\nKjE+SD2wpKaou8W4aUlBPFFYVb+0r6mrpaSsrbW7TSQqJiEhFRQhKC5DN66b\nm5qiqqa6QSkiKCwsNlPFq6uinJydoKaruyweJhwfGQ4WISY9PnKZlJWZpqKh\nxjQeGh8gHixBwaesn5qZmJ2jp7PkIhggHBsTDRgnKUJXtpOQlJifn6ZdJx0Z\nGxsdMUy5qKeblZeZnaOqu907GhMZExYSDx4pNsa/pI+OkZafnqtHJxsZGRke\nMt2tqKKXlpuiqq27bTcvHxEVFRchGB0vQLWmrJiPkZKcoafEOyEYFxkZJTNc\nrKqdmZ6gqrO4bzw8PDMbGCUnLB8ZKEdVusmplZSWm6Slr2ouHRYXGR4uQcKr\nn5udoqipsL9+RVbnPyEjKCksHBslL0J7dqqalpadoqi5WSgdGRkdJTFhuK2g\nnaClqrCwyE1IWcdnKiwxLzYfGSAqOGxStJ6cm5+oqb5NLSEhIiIrPVe6r6yl\np6izzNr/anzcwK+0TzxKPDUjGx8tLjg926urqayvrbtjSj48Oi4+2M/E08my\nu2lGSczBc8+2rqeuyWpaQjImIictLjE8S8zBxMjJwcLFydHd287O2P3y4exb\nQ0hUXN/Pv7OvsrW4v1Y1NjpEPTZA68zYU0NKPjQuMUhUWXzbv7zDxca/w2JP\nW2lvWVrJure1uLu9ytXZ8+fk3s3f4t5XPzEsLC8vLzM+a97Z182/yvZMQURG\nSGLUv7i2sq+yucDExN3h18/Q5fv1/2VMPT5BPTc2PVBvX1Vn4/NSSERBPzw+\nSVdk58i7uLm+v77Bx8m/u7e+x8XN1GhHPjk1NDk+QUBKb+v9Y/vV2GZMUfPn\n/GHow8HZaVhf+U9OXtO/wsG8vL7NbmxZRUJBS0s+QExZYUtH/dLa8Vzgy9bi\nddrHzeR2bXVnXWxqeezXyMLI0tLd71JFS1VTSkFIVVRPSU526N/s7NLP23zy\n7+vxfOPg2uNwb3f34t7Z09bV1/RrYVlcdu/+73VvX1NUTU1SU1lZVF1t/+De\n3tDLysnR3OBtXE5IVFlOTk5i7H7q0MS/v8HDzN5vVkxGPj0+Q0hMU2jv0snL\nx87Q0t/dblRXZX1sT05aZmxdbdvNzMrMzcrQ2OByW0xGREE/Rk1Ua37s3ePp\n633u4eji3N7f83jv/m/s3tjX4N/b2dzy/fhva1xPTk1MTUtPXV3+6u/1bmr0\n7H7z4NTR3eTd2dfh6dza3f1q/XNtZ1tcbGhcXV1fWlRZZPnqeO/i9GhVUVlb\nV1ll69nV1dHMy8/Z39/sal1caGpfWlxtaF9gYnZ9dXB64N3Z2N7j7fl1WVNR\nU2BjZG777vLz7+zv9u7u+m9pXl9nZWlhaXh+9+ja0NHX09XU2e1nWlRRUFBX\nWl9u//1oaG/q5u3u6ur8c3BvaF9ZXWBcXV/629fT0s3M2Onv731gVE9aYlhV\nXXzudG3r2dnh7u3m6f93/PJ4XlVUWFhXX2/u7/fe1dTZ497f7G1cWVRQTFFg\nbv1pcOnh3Ojfz9HS197b52pbWl1aUlFaaXRtY/Hc2+H59+10W1teXmRhYnT0\n7vTu4+Hj5NvX3OX7fP57YFleXl1dWl9rc3N57O/u7O3o9fp0a29vcnzx9Ovh\n6Obo8X1tb2xlYmVsbWdjdu/x7vbx6P9uYGFrZWls9+rt9nNz+3d28+Ti4ujs\n9X70e3RxZGRpbWVcX15iaGdod/Du9/nq3t7e5OPf6X5oYmZfXl9kevbt5efo\n8e56/ntlaWdjaVtbZWNoamzv6OTh4Nzb4O/8+vN+aGBdXV9dX2/76+Ln4ePo\n5u/19nZ0Zl9cWmd+eXT7+PDvfmlr+erufv95/u76dHNuY2Z3c3d8//rz+//x\n/HNvbWteX2Ds5HHv7ezj6vT4aH7V7XpqXnl8ZmdfXmlraGBhdfrzWGPO49zh\n7eTl49zj/2tLXeFkb2RldlZizuf73mT+7l9tT1zbZOp8eNzX3ttbT87fbWdY\nX2xQT2bbXezI2u/q4cvU6e5UYVNCPVPafPn249vl0NDl8Fxc81FiZGB7+vn+\ncfve+llla3z37t/Z4fF8bm1zZWRnXmZeXfTg697e3+v08uXw+Pxv+Ovx7O7v\n+GlbW1lZV1tybllkfG1vYmVkY2Bjeubd3M7FxMbCvr69xP9YVk9BNjAvNDQw\nNj5KYmJezry5t7m3sbW8trOyr7G2xl5CQD8rJyQhKSgnMkrWu7q4q6y4uMJv\nUTs5Y05Xyr2qpaWgpLL32nEyKxoXIB0aICdLr7SrnJycnq+1xS0mKCAtKyzA\nsKSbmpeetLe6Qi8aDhgaEBkfL62trZaUl5iqrq81ISAcJCUgW7mompmUmqqu\ntGE3HQ4UGA8XHCu2sayWkJOXqKuqOiAeHCcjH1KxoJWXmqGqrd09JRcWFBAW\nHCRPvKybmZiZpq20RywnIi0zNcivn5WYobCtsEgtGhcfFhAbITXC06uZnp+s\nvKleJicsPEs4t5+dlZmgrbi8PisZExkVFh4qP7Wso5yip7/OyzUlISo8Tdum\nmpaTmqSwtdEwHxEUGRIZJzu3paabmq2trvg2JBsnKidJu56UlZaerKm+NisW\nERoRFicqyKanl5iqn6i72iMcJiEmOGqgmJmbrrKo6jwlExsdEBwrNa2ur5id\nn5ytqsIqKyomOTrkoKSq5jeq5CsnFiIrFx87Qqmrupqfo5unpKw6NTwySUPP\nqLd9JjG4KCIaFywfHTblt6eunZefoKGhpMNGR9rMTVHFvEseJjkkIxITKx8g\nLz+onquclpiZoKKhslR31ry9P27GLiAlHCAoEBkeHTQrQqutnpmelZicm6it\nv9a70eHmekQmJiYbHxoXHRodKy0/ybKfnJqYmJWbn6WxrbrO6VZKKiAjHx4d\nGRwhHSApMGHMtKWfm5uampyepKiqtLnGZT0oJCMeGxgYHBwdIytDybSmn56f\nn5+goqmuqqytrrvA2jswKSIfFxQXFxkfKT/KsqCam5udnp+otb3Nw7u9uru9\n2UU4LCYhGhcXFxsfKkLSsaiemZmbnJ2gr8TK2M3VXedcUD8zLyklIR4eISIm\nLT1x0LOmnp2cnJ6kqq+6w3FdRDY2LiwvKiksKykrLTg+Nz/+xLWvqZ+jpaWo\np67D3PNPQjMrLi0qJyouNTI2StPV4Na7trm6s6yyuLWvrrvC0NNeNzIvLSoo\nJiouMjhP2b65vrausrG1uLa7vrq8vMbW329DNy8qKywrLS43PEzbx7W1tLC3\nv7u8vcPHxLu/u8rkeVBMOS4sKCkvLzA2R9m+vrawrq62wbrG0dzi3dLEzMrI\n4fhPQTcuKi0rLy8yUt7KwLaxr6+xtbnE0eNiWWJp1+do1+xQTjw9PTw7MTA7\nQFxr58K7tba3uLy9x+DoXllcT09WTkxfT1Za//xmUEFEVVZsUG3T09zLw73F\nx8zM1fdjaXFJQD1HUFtQWW3iz9/Z3t74Sl5ZQ01Pz8PIysfMxcrU21VNTj9L\nQD9QYnbY1s/N2c3PZ09HUVFbWtzd4NDNys3KxdpnXFdJRUFMTlNVXO3W4m7f\n7fRjZfdo2+Pr2t7r2+Xj5m7e7m30aVloaGZcZV1xYk1PXWxcYnjczdnMzNXs\nbGt7a1Vgc97YbXLY0txzafhoT0lFSUpHWNXSyszOxtTj9Ftd+VNQa2xuaG/Q\n1NfW1ORyUkZWT05LTnPc2uLVy9Tz+NTrcFZQZl9SWV7o1NHS52vu/1tfX2N1\na2NfW9/p6+bj79L4b+dmdV5VXFhg915kdF3o6uHZ7d/W53jkbvdqXuvm+l9t\nYvbrePRnb+9mVFpdX15Xefbl1/3UzeLf4ure42f/YOpeXGL6amdhYWtWXllY\ncVZX99713+Dq1W3c29ja3Obp3Wjtc+vdYlxXX1hVT1NfVGBm9vLW5tvr3uzv\nbPxmX1Ve/H3a3djU1PbjbuxXWldLT05qbOT9c9zb/vt3Z2VUU2JcfOrc0NPO\n0M3Nztjt4G9dT0tVWVpWbGZu/2vb8H7wYvfxXl5lXF9qY3vsfurf5dbb39PY\n4uj5YWZYU1ZRXGBaZXt76vfw+//z7v9tX25lau3m3tfU3Nzn/np3YFxWVFNR\nWWBja/713uHe4ujv+GlocPfr5t7e3+jZ3e79a2taSEJOaP516evbyMnJ3kZN\nZetUX0xhzNPL4tfTysvn/1ZgVUlBPj9GT1RUWFzr2tPX28/N0Nbk5Ojl3tzn\nfe7l3eV3cnrydHLl4upsWE5JTE5NTklPbOvr3tLNx8jKz9LZ+11LREFFTExQ\neN3a1cvGyMvT3+blflVcW1FVZf3+4evs7fVbTlNVU1VTT1xt9+faz9PVztjm\n1ubvdH1u83ViUk/x3/FqZ2f15WBLREFESltedtXDurvHxr27wNF2aG5cTUdD\nP0NNUU9Y+9/vfltX+et6ZGRbV19kffPq2tbU1dnS19xkXFhOUVBXVlhfbvTW\nz8/S1t3q+PR07/l3/Ore3ub2enBza2trbGdqZmRjcvPu6f11bG12YFtbYnF+\nb2327+/68+Z5aXNlWlFQVVFUVVljfebe0s3Ly83KzNDV2NrU09HLycXM5fV+\nU0Y9ODYyMC8vMjk+RE56yr+9vLy5u7y8u7i1tLW1tLe9xcbQZ0k8NjEtKicn\nKSwvNTxO3cjAxMHAw8TMz9XOzM3HvrevrKirsa2stctLPzYsKB0aHSQnKCwx\nc7mvuL6vsa+72vXfwGdNYd+7saysp6CmrauvxF86LyckHxcXHCEjLDM/uqmm\nr62qsKu7c03mzkFKTGS8sq6yqKCjqrS1vOs8KichHxwXFx0pL0FG062inqyr\nrK+qv+Y/YMNZTzxMzrm6276wq6u/ZMO8XDIlJiQmJhocLUZrzsu7pZ2gs6+v\nuLDOPzJJ8jg6MDZS2ehD3bmvqa7OxKq17jgvMSw2JBwpQVZqxXe4pqevzbLN\nz71ANi9TPC44LTtR1PZusKumoKa2raW47Dg1LisyHx0rPT1w10K8rau/17tH\nxsM7NTNTMzg7LT1hxfPCrayinp+rs6euvlgzLysyKh4fKzg+XjtLwbOux7xE\nScgyNx8hPTrL572tnpmjm5qbnLoZF7QkISMLQ6++6DOxpZbJI07HxPElFc28\nPNwwXGyvMS+qLqyvcJyosqacpae3FQ1JLxQ/FTqOur+6sqOfQBRBzDNEHR6g\nqTC23rqpPyE0rDG2vT2UrcGcqJ+oLgsXqhYpNRSPmX6sV8KjvBEf4Ta2Lhmr\nl0G3zy+gSiEvNzt7tEacnMyZo6adwS0MGNoXLykmj6W+qke9qkYaML5Ccykd\nqa8r6S19riguPEe3t760m5+nnKqfoL4pCxvUGGAqKI+r1tsvV6w2GUzJ5tMl\nJaa+LGwxvLAvPjnwt7+8sZmnq56sm6S+Jwkf2BhAIDWQtldPM9mpNBzDu01b\nHimqQi3a16nJI11U17ZEtJ6drK6on5qqsDwKE78VNUgYlZ40dDFqo/IbXq81\nZiIeqsYrxsOtoicsTkbCNNmfmaq1pp+Xpa2vHAgbOBi/JCaPtTA8RaypNx+/\nuD0qHUGj0ivGs57FHS03wzoxrJuYrrWhl5+5q7chCBA8J7YjIJKpLTU7uqFe\nHt+uLiokPp/PJr2fn1caIzdHMkKklpirr56arc6trTEKC79OTCwTmpsqJSe2\nnrwZK6RDKSgunqMovJ2pvB0gOywsPaSWlJ+pnaK9TsuntCIGE6MsJhsck6gc\nL8GfnzEc3rorJim+mqg4v6ayMRspPM1N4pmSlqO/t6pLLLGlsiQGFqseKR8b\nlqAsXsutpDsYMew5UEaumawsSLpINSku13bOoZiWnrLqvtcrT6ejrSkID7kj\nJDMbnJY337nQrM4XIbZDyKtmrK0fMMI3xv8ry6y6pqKknK83VXRJuLKpp1oV\nBx07K8seMpKfzb87XKcvFzlawag9La0+LK9Qt6pIVq2xxaSzsJ89QbdJ3K2r\nrcAZCBkuKMcjJ5eZsK8zNKtFGiAqUqW9LrusuK1WOrqzQP20uKervqqwUfZc\nw6ivucweCQ8iHH03NJqWpaxGOrnPIBghTK+yO9qmq73QX9avTUO1rKqztq6z\nSTtHXry4tLG/JwkOOEm3JSKbl6t0H1qjNRkZLKOkQ9eoqLtJRKmy9+Rxpa1U\n6casuzE6t668yrmuQCAVEvzPLDhYrqhDKi4uQCwfM9Ovq7qsrMnKub+85d6m\norBh6bnFPS1Ir6y7wLavvjsuLR8gJCRgOzROLS85IyxeX7mvt6yuvsLEtMPz\nuqWho63HxVYtKi5fusS/sKy1aDg4Pi40Piw/Oy9UNB8fJCw4Mj+2paiusraw\nsbDM0qysrbG9uctdPTZA6HfPvLm3yjkuMi0vOzle1k8+MSwsJygzO0neu6+s\nqrK5ra+9yMa0t9VLwrqzyz5J19dOPE+8wkM1Mj46ODhNyPZqQ0NLMjE3NjtO\na8G1uLq8rq/OWuG/u2Q3Sb61yVrWvc5SRUu/ve1CS2xBO0VjztDY90tKNzI2\nO0dZz8DFytTLyNb2T2zP+lM+YnNdwcvFx33Fx9W/xF9PS1JLTkbdusTWa0te\nRjUvO13m2FTqvtHt51jN201Oc8XlVf7FydlSYt7LY0XQuctOOD7322JaxsXL\nUThJUWtMPWTHzcTG2cnN68bIc91Xar9oPj9Y7H5ANj94VEldd87fQj9TzsHE\nxcG/yn5f8dZWS+rYdlR6y8btS1vIwepDRtTHTkVLX81UPUVXSUA9TtfbTlTP\nv8jgzr2713Fwyr7cTmfN3U9CXcrLZFPi12VGSdhzSj9JX2tiVWjm9UhMfO7q\nWUvdzk5Uzs3G3m/XyrvMZNzHz1ZCTczPWVhv2dJVTPvl+E1KXf9cT1Nf7u1g\nUVBRSERITVr22ce/wsXLzcPI3tnK02xNTXTpbk1s2eTsSUrk9lJNUWdXS0pb\nYFxrZWLkT1Bq5s/Mzc3Awc7ZbV5ofmPq3Oly8tTwT1NdW1lZX/PcemHe3edX\nTW94T1NYW3RfUVhb5+p518PFydXR1HhYTVzd2/NWTvXTY1hTW+VaXnjh3N5f\n883ebm5VVFBQXHd9bmdU/Ghc58/N02H129TlSVLW2Pvub+HpdVry7XX2cf3T\na1JcddfU+HLf2FtCSnvaXUlb2ttpZu3a51lh+3T66mnWznFXVObS9U/v29pm\nXGvf3WVMYdjM3N/Z0HNFSHbg/l1dcGRZblzo3mtebe7XaVns1+9RUv7f61x1\n/t3/V/Dq2WJUaOLR2PTfxf1ZYFdo4G5c/W9l5mvi3Nxc9fljaEpX59VRV2xv\nXmRQ2c5cU3rqwdF0bvHT0O5Za/teVGd+dF9r7mtUY+fPzeRq+O1wY13venZf\nVmdeWG5rbdvWY17/z9zlbnxwY1pm1upgam7fdOtkX2tPXOHu5dto7Glae3hx\n1ORvVnHd2tX2X23YbF5aWmpw9Wv+79l36uzhV11bbGPu/Gpj79vt/fj83mv7\ncWTibGVlVfF2cdLjZV/t0OZP8eT7XF7f7mhfe9/vWVtm/+90ffht8l9xae56\ncn7W7udp7Wlv5Fxqfd7kZGTc3eZgT+lka+V3/HhM73Zo9eJpanbb4u/bW1xd\nb2PY6uhXVefOcEpnXl9e6tbgY2bZ4f91z+7j4/bk5k7c7FN7/XTpWFnvb2Fc\nVehhV97p1uhcz+JeZlXq41Fz52FvdlvXT37s/fXb3cxre2zsYm9U7FLrZ/36\n723ZWu147FTfZNlp63nYV9Xe4WTsbGNGXVlvdOb92WHw2f9kalzoXVx4WePc\nbd7p4eV49Ntd6m3q6XRx4FJxW2tobmXr9HrhfuHs38ni3/z2XG5PXVh3aXJX\nUEhIQjs5P0FHW17Vzce6urq3uLe8wL/ExcLGxMXJxsfMydwwKjknJSAdJykh\nOldytbOmnqqoqLKx7U5LNTA3MkFGS8S+vLO3r6+9ur3IzNzMuszHxjckOCsf\nIxoiLCAtxWqtpqWbpq6ou9pHLzArJzRERsLAs6u4srLGvtZczFxhv72vqq6t\nsTwh5iwaJBMfLxkstD2on6iYqLGlxT4wJyUmIixjRbywrqSurK27yPxFb0xG\nyL2yrKynqLK5PSJCJxIeExckGCyuWq6an5agr6K2PjUtJSkqNcNwvqetpa/B\ntWk0PCkqNitPwMutpqagpqinu80wGjEqDxwYHTweOKK7qpegl6C1pLw6Licf\nJSMq+ku/qK+hr8Su1zQ0LzI8K2qxurKvqaOvtKiyxttIMBolLhMdGxs5IzGm\nrK2Wm5mcsqi1OCkoHB0jH0lX6aKko5+nsrfyODotLjQxTN/ivLKxqaqspq64\nxP87HSQ2EhcaFDMfKKippZWVmJisp7EwIx8aGB4eQd19np+bmaOfqclHOiYm\nJB01NjvLxbSoqaegp6uuv887HSI3EREbEy0oKJ+gpZWUmpywtbonHB4bGCIt\nRbO1nZaamp2gr887LCIYGRsgKy1jtKignJubnaepttVSKxgeJgwVGxRNJzuc\no6OUmaCdvLW/KCInHxsqKEm9T6OfoJygo6q7PTssHiAeKjUwcrWro6Ggm6Gq\nqrnHRi8eHCoTESIUKS0grr3MnJuem6SkodxKcC4dICEkNCrBqLeenZucq62z\nUygmJB8hIS5DSbunn56en6SsusxQMxwjMA8bIBI3HR+uPd2ep52ZppycuLW7\nPSwyJi02JFttWa+7qai4ra7G0tlMTTUxPy82TFHtzLqtsrCtubxOMc4vGz8e\nGjcSIWgaVLVDoKewlqKtnrDGu/hLyERLtm7Gu/G84j7cQSw/NC4+LjhlOmq5\nx6+wtKy7urjk1mZEYzA4XCw0LypNLCtNMjxWPOPOR8C42ri0uauvuamutq2/\nu7lM2906Tz86TjMyRDo7P0ZubXvSzc7Jy8e828jHXsRWPnU8OToyNjcyNjoy\nOkxHcc/Qu7a9sLC4ra+ztsG9xWhqZ1P6ZUtdT0NMTktNVGv19OTp0s3PwcXP\nxcvrfUM8OCwsKygrLSszOUDh48a3ubSwr62usa+ttLe0ur/Ncd1WPk9DO0E2\nPEo4P1dNWVdbzdDcwL6/vsnK0F5OPzk3MzYxMzk5PDtBT05YYn3P0Mi7urWv\nra2vr6+5vcfO0V5p9FVbT0hpUEFPSkJAPkVKRktse+/8eHpTRkVEOzs+P0RG\nS1pcXt/e2MrYxr/Kv769ucPIwM/e0NrR0tTDxMrEyM7N6mRUREM+Oz0+QklP\nTV57VFZPS0c+Pz47Pj1DSU9bauDdzsrKwr++vb+8u7+/wcTAzcvIz8zMzdDj\n4OddVUpKTEFHSElNVWJdaVZVUEE/PDs4Nz0+PkZQXW7t3dPO1cvExsG/vr29\nv72/x8XKzdbe29jc4djZ2uzo2mtdYFZSTUpISkhHS0ZFRUNEPzxCPz1BQUdL\nTFNd/e3az8vGyLm2v7m7tbrBvdHMzd/Z533f3u7Z3t7p89trXU9YTz9HQUBA\nPkhAQUNCRj8+RUdCSE5cZ2XY0MnJy7/HysTEwcTFysTEz8fKzMbNzczl09pm\n39la3n5bdEtSSD8/PD8+PT1FST9NS0lNREdXR0ltWujacsDK2MHKx8rSycHK\nyr/Ovs/LvuHDys/M19zc31TbfU5rW0VNQjtJPDxEPz5ES0VTVkrnWVVuZGN8\nXPLo6Nzkx2fJ1/HN2eXYwW27y9Kw4bjGx7lStkfN2kPTSkl9R0VXOk88QEw0\n4D492Dj1Yj7PTFv+71d6ykjG6lTDWOrE9ubD88vG3dbFxFy238vAa7n50djl\nfVnXQf9XPN87SUFOPEZfNc09T81A0OVXz1rMT9H7T8tK79hHzO7gyenMx9Fn\nulz+y1PffdtJyOBOtknGyPnKYNxsSV9GSztMTjjYOXtRTuNrXPbAO75pQrA3\n08A8xf3NQbzdPq8+yb05vdI/ylla10/OWcdR08FNyPhv0W9Q20xN8kpG80ZD\nyzxb3khp7nHcX8xt00/CekW1PNS8L7bBL69TV8RP/mjNPtPQMrhfQ7JC2rdC\nWLxDX8tKS9k/RsQ58c9B2PheYtpXTMg+WLswvM5Jv9nm17xAvs1AvWNFz34+\nvDtMuDC6Rt/Y7Oh8wkDCUFXQSFn4RFLZPctL3d1KtUdOtTW/aD++OMZNXsc8\nuE7vu07b1uJNw3U9tjffvjvcz1f4xDi6S2LJO8VTSN/PMrM4Xb82w/9fRL1J\n3PlJtji+XuF6ScJCzE/a00q2M689WrEstv1CwVp7zFVKuDXqui27+j/GYD29\nYz26TlrKez/L0TC52Sqz3TW80i+rPEetPlO2RFO0Mc+7MLZrPrc+681JX8la\n38o9v1RNyFlM3U9EzWk8tTjwuTC7ZES/SPXXSN3NTNDcRchf017nVP/ERM+9\nMbf5Pqwt07kvzr8uutQrq0Y9rjHJ2DmxQ1bJP9nBPdu0KcPMOMdKT83BLrfO\nMq5ZeOLiTMxzQcNPU+XNRuzbzvndffLqa0rBS03JRXdb3WrdPtrRRtPVTE67\nSenJVtxT229PUV75TMtJv0/XwEHF0j3avElrxjzPUUKzPUjB60fS+k26StPd\nStl8Wk3ORF7PRvH8+nji9k/AUV3HbFfa2TzDSlfORMbjV9PJWnjFSPXNTmbS\nT+TVRs1Na91b51LV31fuTupxaflm2PdN6fJD59NJ2mZ+z3nb3NFF4eZGymtY\ne1xSXG7by+TJ1OreWexYVlZrZknK4VnO1ttXTtF+T2tcR01Z4OVnyt564VdX\nYF1m0Vf5yUnYvFJutUpQzE1fc8/nSXLLW0vKX0zGeErea0Pm7mnX/vdk0F/8\ny15WU+9ZZlP61t58XNxV/8dH29ZF7slGYr4/9N5D/G7GZW780EpYvVXgXmbZ\nWN1vVc/lSM9QWMzjz35mzEZmWFPOV8neQmHmSOPCW1/ueNzsUFxzRMrCXexs\nXszPYGBIa9thzFtY6kbG2VtwT0xL63lX1M5Tx+ZwyFzQXU3qQ1fSXNDIVcTb\nOMtcPNFmV8NqQct0bNTO0VBcYmxN4cZIeN5vwktcylJO1cn3TdfKPOvNTPTy\nWUxkS+jdSrvcSdVf0Mre2z8640thv8bjSsZlUt1JXex59EhK9+XE2V7GTf+8\nTVpWTc/BX97NRNfQSO52R2PbT0nt28pOW9BWUs5fRcFeS/xPZG260n7oQl1T\nV73nUcdeW1nIxE7FzERPSE7Nz83S91ldXU7Yz1rcPjrMVknF33XGVDtN6/q9\nyVLdU07eX9jIzOxhdVBCdLrcR8XHP0zl4eRf8UA7w+TKtznvRje5y2JO29NN\nPUvH29K/cUJQTHy+XW3J6+TTYT7e4EfJzXNMSt3092LO3Uf3ymFKyUM+v29c\nzcvP9V9fdlhOXXPIykZTy09A2sjjV05RUThdtPT7s885Uc1FWb3zWM73ccXb\n/MHQQEvNQD+9z0Q7Q82/zU5Z6llZP0u+zFHhwkxC19zOvWg/1k5S4U7a3e77\nX1tP3uBIP9fBy9VJU8vQ5tXcT1JSSXXU3NvNykk0Tq/CLVWvPizPu9x+29DP\nTjvpx+vTyVhCcu9Zw71ORthQPmxqWPXv0MdWOm64vWZEOUzJ1L+6TD/MykQ+\n2b/VX+NjPkzl3uPEXTpQXHre4+fobUtc2df86c1lQ9bLQ1/Janjqaf1nX+HH\n3j9P2F9Pzb3aX+H6TlRZ1cFkUMzdPUbMz9fF3kM7RWXk2eTr4ltW5njtx9xN\nVGJZT+jJ4VxcWl1b5bzDQDRA0svOt8Q8OFvJxO71vMU8OOd25ba7VkBGPkXl\nx9Ti5kM878jN51r9/1ZfVlTsysX4SVvcz+te3M9yR0Vi3Od7793aZ0M+5rm2\nyDw741tG1L/Ozd49NkbRwcve60U0Psa98mLV2U9S1c9aUNnnSU3fyMjJz25Z\nV2/Nwsd1T+vbSz9dv8dRW2RIPz87QVdUUmjaVk/Zxcvb0txXSG7Q0sTDysfC\nxMbG0eD9ZVZXzLvRTFpPTWguHihZWEda+drL1vrGwOHy3XpTTFhVfby4t7O8\nbEZQbenSyMDYVdPC19zEyN7sTSgXHum/2My8us9JP3rIy9HrSz05Ss/EwtTW\nubbqQlx1TlDrycC9u7O560xnwbCxPhIOPKbMRr6utk8wNXC+v7/cPzk8PWi7\nutLStrpJNENi8Me7sbTCztLOxsbhwq2uTA8KO5y2QsG5xkcsJS69qrLfNSw5\nXdW7tcq5pbgvKz5lza2lqrngRz7usLlO3K+tvR0GEp+bUz3vx7FMHBlenKHF\nPi4+6D44tae2q6s4JCw+16aeqbW+RSsywa20vLevsTwMBz6Upjc7Sa+4HxMj\nn5e1PTM4Wkg4u5+vXrG6KSY63aqdp8nRZi8rVK+rtLizsK5YDQUrkqAtNEmx\nqyEPHqKTqjcrPLraJzaipcq2ujouN1mtn65Z3s9IQE7Mr6ixxrq1ZxYGGJqY\nQTJTvq4sERmyk55LNUPfTikuraKrq7o9LTFKu6y41cq8v085+bCqs8a4s9Eg\nCQ6nlcgwPdawMRUa25aaWDNNUUY9M8egoa6+TykoTru6vcjRurR4OfS3s7XC\n/Mexwh4JFZuZOSY7uKtFGxnwlJ5BN0i/tzMixp2ow75XKS5JSti5wruork06\nWrquyz/Qqqu4KwoNpZo1LU9JrLAcE0iWm71PMVOvPx08oKOvt0wuOj8vO9K0\npqWzyWA9SdrXxayora7KFAYcnadNPim3nykRGq6SnWYmMKnDHCSmmaS2z0I3\nLiQpyqGiqqy1XywsbcjMqqKqr7gvCQhHm6vdODihthkPI5mSqT8hRqs/Hi2l\nmKW7zzopJCY/qZuer8DNPCk35L+moKyvscMtCgYvl59OKzip0h0SIJeRrzUg\nRatdHiaflKKxYismJihBoZquv6ivNSMy1LCkrLGpuNVTFAQWmppXLCFFob4W\nEqePo0YeI6ynKRqykJy2yDUqKCgvxJ6gq6WrSh8i2q6vrKWltntCIQkLu5is\n+yYnqLIcEDiTmLcqHHSqOBxNk5ensjAjJygkQZmTpbC8RycgNsirn5+jtUQ7\n4SEGD56ZuTQaL6XHHRa0kp+9IRdKrUkqrJWfqsYmICIkPZ+VpLnAzlMiH/6i\nnKKtuVhI0sQzDAnKmbhCHBqxnWQXJpiZtiQRLZucRTugoq++IRw+yFTQpKW6\nuccxKjf5raGlrbjN98+8zhsHF56nPiEa0pmpIRW3mscvHDCbmLErOrGuqHIn\nbc0vNbuz3LixTT5h3unEqai1vL+5r7VNFAYWpaHOLCmuoWAcEjKpn6VfT7q4\nRSc7sqScp1QqKC8uNWyxn6W/1EUvOcyoo6KmuM3GzUcXBRacnt0qGT6dtBcP\nZpaXqSsc4aLHKUWnnJi4HR04RzRIxq+dovdIPCs5sKKfn65ASLrK1jcLCrWh\nUkIeI6GfKA8nn5qcRxg8nak4Oa+lnq0kIEz/LSc1vJ2ducftLzXhuaqip7O0\ntvdRUhYGHKO3vlAeXKBPExXAm5epIiCwosI226ihpEImN0AwJCi5nJ6xbk87\nMDToo5qhra+5V0HHLAgNuLG0rx0fpa8dEy2plpc5G26isG4/3KibtyYvSzk3\nNzLNp6uxrm4jLNywq6WfpK3YL0i2HAUWrqikPBQ2n/gaG/2dlKUiJrOptUU5\ntp+iSC1EQjosHzConqi2wT01ODDboZmdq73yXckxCgrPqbW3Gx+itCIaLa+a\nmDgey660vT3Fn6DbKkdaPjAdJbeeqMKvvDYwKT+mmpyjrcc9TLsuCwxEz7C2\nGSWiplghIGabmzQo5bGgsTXEqrpJP1pMyTgZJsO1t7GnsfYyKEqqnJ6kqtBD\nw8sYBxU/+p9dGridzSwfI7eWqy7qvrGnTzuvs8lwVFxrRx8fODq/paWmwTo5\nQ8+vpp+eq/RH22QaCBVlvaUvHLGfyy0gM6Wawi07RrGl17SlwML+MywyNiMr\nWdyrqq2oczVjxby0rqWhsE1E0UkZCxk/ya4gHqmjuVAsS5+hNSIs15+kz6yo\nwso2JCpDOyg6V8OrtrG8Qsaxt7a+tqemulVjzi8ODiw6yj4a3JyuYzdDqaFX\nIjD5rqS/u6OvwVsqLTw0KSw2VbGwtKrLTrm4vbzHtaKlue/c1ikNDisxzjke\nr5y/UDk8rKVIKz3yrafsvaCvvG0tOTsqJScqTLGwpKLNv6/mTnTHrKGpvcW8\n7h0LFjMuTCIonp/QXj7LobIqLEL3rrf6pqC2tWk6Si8hHiIrS7esnqO/sLlu\nz9XJq6a0xcG5+xwOHionKxgznKa4udOpn3MnLjj/uVHSn6myr//NdiwlHhwj\nO8esnqSspa7GbWvAsrfW5bmy2iISICofIBc0oKu8vcahnMNET0rZ4iw4sMK+\nq7KnsVEvHRscJDTNqKajnqKosru5u84/OHe92ikWJC0jJRkptdNe3c6jm6mx\nr7e49CsrPy89zL+ipbPEOCkgISg36dGzpaGgpaenqbdIMkJtSSsVGzcrMSIk\nvL5EQT7Lo6WtqKanrVQtMSspN0m3r7a7XV8/NDpEZExQwa6rqqinoqnD9elp\nQCwWFSYgKigmybp+z9nHp6i0rbG0rcs2OjoxOz92xsnPREdsXPb2btzLx7a3\nt66tqKu/xLnEajgdFyMfICIdMH1I6Lmwn52qp6mxr+otLzUrLjpZub9eT1Bn\n/HHgzMzAurm2t7u5srC6v7q82UopHCgpISAZHS0tNO66oZmenZygpbw9NDEm\nJCkuSkw8SFzNvbqwr6+vtrq7yNbMxL/M1MzY/005Ki07LSoeGyIiJDE9yKmn\nnpmam6CsscRFMCooKSMfJCo5acmwq6mipKalqrG4xdNcPzc1OTw7LytKRjUv\nIio0LCwtLlHexqmjnp2ho6WvwNZuRC0iISIlKCo3T8euqaKdnaGkqa627D44\nMy0qKyslLzoxTzczYj84PC1Czv+5ur+uq62sra+tstBeOTAuJyYqLDlR7Lyx\nq6WlpKaorb/xVD00MS80NSkpNzlHTDlRazs/PjzgW0bh0ri0u7GqrLa6v8Tj\nPjs4NjMwOEr6yr2zra6urra1vNdmRz07MjI4MS47PUVVPEP6U1NLP05VTFdX\n3r27t7Wzs7u/z9rSUT9ERkNLY+DIy8i+v729u7jA3epdTEk/PTwzMDQ/RURC\nS19UTD5AX1FQUG/Hw8e+t7e5x8e+12dXWdrfd+zq3udicujPzMLEwcrM2ddu\nT0k9Pj07QENDR0JAPzw7QkRJS1/WzM3Fvbi5wsrL1uXu89PNycbKy9btXFRW\nV2Nq6uHMzMTL0+J4+XxnWUdAQj87NTU7QT8+P0xdbGxz0sLHyMPHx87p6MvF\nw8W/vcTV6HheWk9JS1lv6OfS1czJytLN1tZwUlBIOjs/Q0c+P0ZLSUE/TGJU\nX3Vo0t/11cvFvsC+v8LEzc3T2/ViUnNl+llcXc/R1dbFwb7O5XNcSUVAQUBH\nTF9cXU9SY2xOTUhJTj06P01obfTSy8jI1cfGxcfSz8DIzXtv79bm+NfHwcDJ\nzc/edFhNSkJHQEVOSk5Tbt/hY/NlZUlAQ0dIRk5OVE9WXGzs2Mrf1dXM0OTo\n0s3P2dfKwL7Bw7++zM/hcVVNRkpGT09TW2f6+WZraGFQSEpLRkdITGBQUFVW\nXWJoftvgfmFc3dTU4erPxcTGvr2+xtHY2N54aGZWV1Ve+9zQ72l0Zl5ZTVhY\nTUlHQ0k+Q0tVWV1d897XZGRy3t/0X2p60NfbzMXEwMrNzNvrfFxsW3Rx5evV\n19jc3+njee3ea1lNTUs+PkNCS0FDUGF86Wbj0tXu+m/b2eL11crHz93TztTs\ncWVqWllXW33y3dzZ3Of03dfY2N3Z2m1OSkhFR0hMR0xMV1NqevJ8Yn3f3O/l\n5dLQz87MzMjW3HNbW1ZUbvjn+uzo73hccH7k19rY2etvXFNeYFZWTVBSTldh\nY3VaVV1jdfF+39vl19bSzNfbbu1tbmJq7uvh5+Hs4m9deePv89zT2ObsVl9Y\nX1xVVVRZbVtSVmNYaF3ubGx+e3zu5/jX0drl7G32WmT+4url6NjZ7PlecdnV\n3eXm3+ZZZGVaWWdUaVZ4cellcF3vdGZfVlVmZ351/und7OP/aGrjfHpo+t7g\n8vtv925j5/Tc2NnUz+nhb2ReYVlaWVphdn36aX7v9mtaUmJrduho89/e7npm\nXndkWV1s+ujj1d/ub3Zwanru+tjZ7uXf4uXtZf1UXVxTVndieWtt6Orz+P5v\naVj/4e/s5vh0Z2dmXvjzYH1o59l+7fJY+m9t5mjg2OXj3ejZ8PLtVFhQWV5h\nXed78d7j7OxmYWJeZGZn4vL+4Xd0fXn0d2dwaG1fbl1obn7y2dzb1M3a29vv\n8nVZX09QT05WdWh75Nj4+25vb/Fq/HT6d3lm4uLf3tHTydHW4uxkS0ZBPz49\nP0VLad/WxL6+vL/EytjjX05JSUhOT09j993Q0cjJz9tzXVVOSUhMVmj72si9\ntLC9bulOTkErLC8zPjo60760r721r7e/a0NMPjY3NUPu/9THvbO4xcXT3mA9\nOzs9SktO5MzEwtHMyN9jSEJOSEVGS+XN087Px8TW/WBaalRLUWDj1u774+Ru\nT0hMSk5PVO3Jv7y8u7i8x3xTTkE1Ly85T0xb3MS2uMbN3NzuPzw8RF5j7ci9\nuLvJzdxwTDo2Oj5ITmDLwb7CztbT62xTUm3p4N7m39b2W05JS0dJVGvh09PK\nxszV7mZXTU5SV3zUzMjM0+FfT0g/QUJHU1/t1cvJy9PZ6WVfWF1scOvb18/T\n3uZsXmBZXmZn7vH76/pzZ1xbV1ZdaHXn9ujc3ePtd2xiYmZfY//x49/c19rg\n7WljX1xfY11dYm5wdXz66ujl6O/i3N7d5O3pc2hrV01QWl/f+f7d3dncW1Ne\nXfRnTlRl387Ve/Pk2uRXTU9ZbGdea9/NyNDh7PfneltWWGL18Xbz7d/icFtR\nVmZta2z64Nfd/mxx5udvbGvj2+xqYGdmYE9OUFhsbnLn2M3O3Obs63NfWF1o\nde/r3dzd5Xx6bGJeXV1na2to89/e4Obp5u53aWJkdHNoZm34825iZ2tyamVx\n++vh6Ont8fJvYmlq/fPy6urr9XxuaWJdYF5iZmhvc/Pl4+Pj5u74c2pmamVk\na3nq4eHl5+jxcmBcYGFcXWZy8+7kbk9z3MjC235veN/xTUlMZdHR5WVebORv\nTkhLYtbZ+2Rv08vXfVpd5uV2W1Fg59rhY1r42tXV6XZ4+ndgT01Vb97Y4erp\n73btVlt5XeVxYO97dOdq7dv00NPTzexgRjpDR1rpX/TY0snRbHJeZvpUVVtq\n1c3R2e953OB7aU5f9ubZ/P3o+G1fVFVhcu5ZSXVf2c1n3XXlyd9v8lDu1WPe\nW1bn5M/WbGjp6tXgSEQ6RGx01m9q+Njc6VlTcuzN2Ojt4dXQ6lNOUfjf6m1T\nXezd63T/697uaVZSWG7+evH+29HMzt3qZP/f5uplW2789FI7Oj5I0uPg1nzA\nwtN4Rj5SXfDVaNTMyMj+TkxRbNz6bv7nys/+V0xW6t3c52Pj0tDWa1n7zMS9\nwMxDKy0nOFxE01rLrq+1wUE+TD1fRj/rxrSywOVtTl1bPDw8Rs/Ixb7W0MXo\n219FT1Jw1+rwzsayrrC1/C0gHyE3Pj/5UbWnqq/MPT9DPUo2O+q/rq66xtDs\n6k4zMTA+xr+1ucm8wsjdQjk+P1h3Xci9sKqrrsA+Jh0dIy86PWLKrKOnrtJD\nPTg3NzM85rmqq6+5zupJOC0qMD3MuK2sra+7z0c2LjQ8YMW8sK2qrLrvLx4Z\nGyAuTWTAt62kqa/IQDg2Mjg7QNW6raittsVfPS8qKCw81LCopqirtMJQMy4u\nPeS9r6ilqbNMHxMPFyg2Utq+oZqcpso0KS4/Oz02R7Cpoqm+11g+OCshJS5W\ns6qqp6amp7pQNSgrMDbrsaKepa7aIhUUER4sJcu7pJOZnqlGLi8nKjAtRLas\npaCus8M6MSUfJSs/w7CooqGfoay9RSgkIypUuKajqK/PJhgXDx0lHXVsp5GW\nmp/MSz0jIiIjMbasqJ+1rKzX2C4fIic7xbaspJ+cnqnDOSUgIStOvqiqr9An\nHhsWJSEcOTmtlZqan7jBXS4qJR8tQ1q4sLCmo6iq6zo2KTlDVLyyp56epa3Y\nOyskJCgySc7dNDQwJTEmHCoqPqipo5ynp6tePTIfLDcxzMfFrrGxqK+4smpV\nWDtc1Mispqilrb3dOC0mHhgPFScxq6nZr9bIq+g8PS09w8y3us22rrjH0z1S\n+knPP0XMu6akqbO90cC90cfd39X16FE8Lx0UFhUdLypHw7SbmJ+iuk5fODEw\nKS7staeirra7xcDmOjI1RMW8tq+3raywtstVOzo4NT0/Oi8nKCUlKh8iKDPA\nqaKgn6Omq7RQMi4rSnBg5f3AsKu0vtNnyt3yUjtIzLOtrrm/zHpFLikpLT9Q\nWk0+OjIyKyUnJi9Mxa2koaGjqK23yWlGPTlCQkxrVdDEt7K5wXZ1V/PhWXpx\nysDLXz8vKy8vOEVVyru4u8ZcPzswLy0uOU3GtbS4vcC7tre82lNEP09e6tHN\nwMC9wcnVedX7z9Tuz/JvSz00MjY1P0RK7ca5sLPA2lFJT1ROSD9EUV/q4+nd\n6+htTj87O0t8ZHrvx7CutdBOSdi8t8NXTF3Mws5OPTg9VVzsYVVt/dXEv77E\n+Ec/P0tPQDw8RdPO0eVFTENDSUBGVNW8sra+yvzo4f54VFDryL67w9DL1dTS\nZU9KR0xPUmnj18rTemNMVGJSTUNASVvhzdVuSz9CRUpWZHXp2NredGhmbv1t\n5/XSwr63ur7AwsHG019HQUhh8elsZWlq72xRRj47PUNLVVpq+NvP0+dhUkpW\ndHzsW0xQWHng6uvq3M7Gx87T1szGxc3n9vnc0976YW7x1dPeZ0tLSkdEQz9C\nS1vh39/c8HRvWFBUTlFVVF505tbLyMbEyMvO3Ol9cP/q1c3O0ulwZGdeVFNU\nZ/Hd3X5dS0lMTE5OTFpv6Nbc82JaUlBUU1xfXvfb08vMy8vT1tzm+Ovp4Nba\n1tve4HhpY1xkbFxaWGPg4eH2VE5JSE1OUl1kc+Ll3dv9dGlaXGZp9+zp3Nra\n2NnW09zd3+3qemprXVtfXm56funq4+rx/252bXJlXFdSU1BXXGltbvR7b19c\nYW3+/uHd2tbb3eDe2tbX1931ZlpWVF5peHJuffjV1NLXfmhaWGdud/hyaG9k\nXV9VVFdSXF9da3H/7ebo3t/p3tnX19jZ3+Tr/2leWVphYG1uZf/q2M7P2+li\nWWBeZ15cbW75/WlhYV5ib2dkX1xdXmNtdvPz7eHc2NHN1Nzi/nJoamZeWFdf\nb+7w6uHn39zZ4PlrYWRhX1xcXF5ka3lsffP47ndkXVlZXF9qbe/n3tna0tTf\neWVtcPr9bmVjav3s7/D5+Px6/P346+De7mhjX15hYl5bZHD66On5ampmX2Je\nXmN09unb2Nvg5/FrX1xbYnZ1cmxZTFHewLi8yOxQS05d7tzbYT83O03NvLm/\n109JR01v3NPhY09MUWva0NTZ7WdVTEU+P1rEtLK70kw+PU7Yv7q5xG49LzZS\nvrO6dz82Okxu4ejtc/Zu++fd19x7Zv3c2NVjS0dOaeTU43lbUVdebenk/mZV\nT17jyMC+vr/JfkIzLS02TM6+uby8vLm3trrGaT81MTEzOEBW1L64trvNVz03\nNzpETkxHRElzx7eurbC5x99uX1tTTEZCQ0ld2snL2HdXV2j36elyWktJWPx9\neVdTdvT/3dLX41hKUu3NxcrnWk1MU2RiXVZe68zIycrX9VtYWFn93OFlSz9F\nUerHvr29xNZoTkdGRUlb993hZE9SXP7e421s/eXY7P3k2N5fSklmz8nUalZk\netbHzen++V9VTEhNXXv3Z2F808zJyOtRQDtESEpUe9XFv8C/xcfL4GVVSkBE\nR0tUZt/a2HNrZvPabGZcWVdST1/q1sjHxMzT3+jn6+J0a2heVE5XW1ZQXmvo\n0NfmaVRY9eTU1mtbZn1qWk1YfvDW3e/t7PJlXGrh2dPfXkxJUmzc3dTS3Oxo\nXVlYV1NRV19nfePa4fFpa9vY1uRkUlBc/d3i3/Fk+uPY2tXe/GhWYX7a2Nz4\nX3z51udiX1lZYeTazc/e71xQS1Fa+NPb/k9LT11r59rW3G5dVldgXVxbbd7Y\n325bVlFXY+/WztDga1ZPVV927tnU3/th7tPOzNtsWVdeaWzu/3nl9+no4OHv\nbVpZXG1tZGNhX2NsaHR89W9WXvfWzMjM4lZISlRm6dnV0N7m2N/e4/x6d3x0\nY1dQUVtv59jT0NjnalJISE5ZefR1b2d54N7f6nloX2jq6OxoWWX//fZzYmh5\n6d3Y2t73YVpi8N3V5WZeXWJ1b2v58+ja3NznZ11WWF5u6N7f8WhiYWT5+nPy\n6Ofp7G9kW1phXGNtc3tocHL65eHW2uTrbmdjYmp4Y2FdVWt+5+N8bXv36drm\n39vxeWxkaXFz8m5o+vHk2t7v+GtnX1lWVFNcbPPW2t7a7Pdxa3huZ2xhXGp2\neezk4d3r//t373VrdXRydXRqaGJdW11tfu3f3urvbGFsfejm6+54XFpaXXL7\n6+l3ZWNbWmJ+29bZ3+13b2/36efUysXAvr/Axs3Y7WdXSDkvKSIhIyg1UMi0\nrq2us7S2vL7G2uXp5c7Cu7Wyr66vsbW90T4sHRMREBUfK22tpJ6cnp6krLDO\nRDEnJCYsPc21qKWoqbHBzWRu2NK/uru9ezcpGBESEhwnPK2fmpWYm5yptXYs\nIR0bHig2v6mhm52ip73fRjQ9SGO8trnPOCgYEhQVIC1gppyYlJicn669PSMa\nFRcbKT+vm5iVmqKr5DkuJSgxPr2qp6vISiAXFRIbIzOyn5iRlJmdqrw/IhoU\nFBkgMcyknZmbo6rXQDErLztrtaWgn6i9eiMYFRAYISy0npqUmJ6iuVUtGhMU\nFx0tUq2amZaapa1cMCwoLUjPrJ+fnqW3eysWDxARHizsnpqZmJ+mrWM+Khwa\nGRsjNc6nmpiZn7BtLCQlLEC8qqCcn6Gos/ovHQ8PERcrPayanJyerK205d80\nIBsWGB8v05+YmJmryDwmLzj5tK2tra63qqmrtFsyFg4ODx0sy56cnJ2ipqSt\nuO0nGBARGCheoJOVmKK/VS0uOUJPXUdIwrSfm56fsX8qDwoNER9Er5iWm5uf\npaSyzzUZDg4THTyolo+WnKv4NSYqKS44ON67pZyanKCntWElFgwLExk0tJ+X\nmJyhoayzyC0dEg8VHzGsl5aVnq/ONTYwPTs+VEHAuquhpaKoq7C/RSQYDQ0U\nGje4oZqboairurnMOywfGhwjLeKtpJydoKOrtMZKLSghJC48u6qhnJ6gp6/U\nLRsQDRIaKcmtpqWstKmpo6G16iYXFBkiPK2elpedorHIQS8lHh4dKDXNp56a\nm52iqbTWLhwSDhQZJ+e3p6OnqKKmparMRCMaGh0pTq+knZ2jprnRPSYgHB0n\nOcCjnZyco6epsLTMMyIVDRMZI9THvbjayaiempmjrkofGRkfL8uwp6Svr77R\ny19DNjEsOUftuLmsp6Ofo6m0WyobDg4VGSs8RcGwp5aQk5afsEccExQZIz7P\ntainoZ6gprRTKB4bHipCuK2ln5+eoqq0XiYaDw0YHSvK7tesq56Sl5ugyDge\nExcfKU7BwrWrqJ+dp7VTKCIoLli9w728u6ifoKWw5SkZExMcLzE8OiU4vKiT\nkZqevC8mICM1OCwrLT21nZiZoMU1Ly5GucpiPCgv5qydnKWvyjEjJCAhLiIa\nIB4qtaWclZymrMtYXD0rIx8gLcSrop+tys7hxbG74DsqKS/8s6ihpKqrs9o8\nLCIdHiAbHSIiObSlmpaboqzERzArJiAqNULHuL/Gtq6rpKi+cz0uNUnoxbOs\nqqmssc41KSonIiMZEhYeOK6emZufn6Wut14sIyEjKzI9UN+5q6KhqK+8zW1Z\nQzg5Urquq6uutLjIOikpKB8ZFxofK+KtrK2on6CtvMpNPEhQUlVU9snBwcTL\n4lNIPDMxNkHZu728tbKvrrW/vr/EzVI4MTxHSU9MSkk5KyUkJS05P0vrwrmw\nr7a2rq2tr7zySkZGTl5TTEtR4by0sq+xtbnFb0c5Ly40Oz9NTkA9P0E/OzQ0\nOTs/SUxazLetqaeqsrzI4NbRclA7MTE7W8C0tri8v7/FzmJLRkBETlFXe9zR\n800+NzUzOD08Ojo8QG3Bt7S0usPGxcbVTj87O0fewby6urvAvr3N4XZaTktN\nX9zJvLm9y/NPPjc0MC4sKScpLz7+wrq4ubm0s7a9z2NPV3DXwrS1y9bN0tvd\n708/OTo3PFJ6yLe4yca+1+PQ80M7NiwsNz08SWvfwbe5v7/HdEZCRU3e1mzc\nz+LNvcK/wGo/OTxC+si/vLq3v87Axcq72zwwMDYsLC8rQfo7U8b/vrla0ry/\nt7nDur/uUD5MXUhJPkd1R0jNv769xsG7uru/v7/P0cjJx0YkLUgnKywfQFMo\nOVNXsrbJr6mor7i2vL/nTehPMTQzMT0yNPzLvba2r6uts6+sr7nXVWg8HiJR\nKSQ2HjDLJSzjQci1wq2mprS1q7u/3EXrWS0rNC0wOzrPsLu5rrKsq7StqLHB\nxM58OB4seR4gIhs9Lhsze8WxtaminqG4qazN6DVCXi4jJjk9Okdet7HGuq2q\nrLS0rq+738u/2TMdP+McJSAeRiIbOvbex7WkoZ6oraCuvO5Izj4qJi04KjdH\nUrzKvK+xrrG3trCwwMG+zsM/H0TGHCgqHDAhGjHfRHOso6Sgp6qeq7zOVtM9\nKSowOyguUmHl5762r7a8sLW3sLq4tcTDxU0mQusaKCkYLCMbOH00aKmnq56j\npJyvvbPOVDo2Ky48IS5fOnTex7Oyu7usrbuxtbe6zcG92ikpvSIcMBooLBor\nWDxJvqipqJ+knqKzr8zuUTM2KzMsJDY1PkhPt7e9r62rs6+rsa+8xrnVNyRM\nWhktLBw5Hxo4Oy9Lu6Oupp6snaO1rLrGWz05LjAnJS40LzPRxdC2r7Cqq62t\nq6/Avsd/YS8nZUAeLi8fLCgeLzs4XtSzrK6joaihpr6zr/1CRj01MS4sMj86\nNT5h4cjIwrKusLy+r67N+8bTSDs5PkI4Nz9dTz5BSklHOz7pVU9v68HEddfE\n1OlRW9hcaNzfytPOwcHCvbm9u8LMxsvd/E1JRT89PD47SUg4QVFFT3hPa9Ve\nWM7SaGbeY2FuSVzu6eLUytDNxMnIxdfZ3eTa1tLcy8bU0sx7WV9TPzhGSj9N\nXmbe1/fe0WpbZUZBQz0+R15ZUH1z8OB21s7W7O3O1MrO7MK/y8rFu7zDz9TL\n3U1JTVBMPkJSblZQ39JsT1JUSEI9QVBDQUxi+GL6z8vIy9rJzdjc7NTe3OPj\nytffz9d6a1tOX1xLVXNbUXzR0sjEx77M5MrSdV5QU0lDRD5DQD1FSkVGTFNQ\nT2hxZuHLzMa+wcO+yNrN0mto/1laa09g3eTU0M/Rz9fp0dLifWJlXFdRU3li\nSVBWS0pESElFREZVXl/r3d7R0tPJzNXa4+9uaF1039/Z39jRzs7TzdPW1Hxf\naWhxb3Z79OF9XWFaT0hJSUZNTFxkW/5oY+/4aXPoemf5bP3kX/77aHpf+tna\n3drM1dfL0M7Oz9rj2m1f7mNYX1laWVtXU25dW2VZYXz+anB7YVx3dm/val5a\nV1NNVmrs5nz/++rvdObWzdTPytLP1N/b3+d3YntxZ1xf+ntoanHt8GVbZnde\nWVZbXllYUFlcW2Nhd+toXm5sa3ft6eba2dHL1NjT0+Nt5/dlZ2nwdW3q5tre\n/uLb6mdsfmlZTU1UV1JRXWZZW2djaGdbY/f1eeLa2dnd2c3a9t7e7P52e+57\nXWfra2N3ffDv7Ovd3f7o321p+HJsaF9UWVdNWF1YUVFfXl1fcuPf3+Xb0tbe\n3tHS3dzh6u5pW15vX1Vh+XNq9ujg2uPs3eL0cGtzYllZWVdYW1hVXWtkYWll\nZmpla+nd29vX0dLX397l7nFnZF9jXFxhZGr76+rd397a2dfc5ev2/mdfYFpW\nVVdcX1hWW1pYXWxzee7o5ePm5t/h5N/i4ud+cHBkXmFfZGxneOjd1tja1trk\n8Xl3X1laWF1fXWxuYmVkYl5jZWxza/3y6en06t7i6fHz93Jpc/hqbPx4/f7+\n/f5vXFpuaFpQVv7b0dTQycXFy9l2amVbTEdJR1Jr8Ort1MvI0ebn/PBvUE5Q\nWFVMT2Tm/GVv5dTS7GrYzmlOdN9bPz1c5PtnX/7s7L2/S0Vf2NRlSUhLecPH\nXVnbxr/QVUdY0chfPELXwNx8WE3mzcrrSVXb2Xp6/Fhu2u5pcWdrUUvj2PZa\nf3XfydZnW+zqbmP09nJs5epMZ9zpe2NNTfR42WpGV9fK1/9dYF3Rv+NNRGnE\ny+tEPWTK8k1WXfLe8flkV+fI6Vv22tPuUVbY1mnmVE7Tx99OVG3qdmP5e/Js\nX2zZ1NrlW2be2NRqR0RazthOP0zXx9JuWvDQze1OS2V7ZF1ad93V2mdsV1vc\nZVrvXmvW8mH70dTc52Px3NpjTU5v2M7XXl5l5WRd83RSWV5a1NJQUurb1upZ\nX1xy0VtBVeTSy9xQ59Dm2u1bWmJk4v9Zb2H1y9lWUHHKxWRFSlvT231YSmrL\ny3ZS7dvl32RJUfzf9FhOYOr+8eDecFrh2GP7/lz05ODd7Wxf/dvdblJW7+3x\naFbm7m9t+/V16+9nceDebGzd9VRaZFX7cVT9dVb55njb2ubs7tvuUl/U3m1o\nWGXe1dVkTFnRyntFQl7PzVlFS2vEwWpMXNrFyftQVuvR3k1DS2fZ315WXd7J\n0WpRa9ra5mJl9OXlX1No2u1hV1r23df5aWfbxs3+WHzV3G9bTlRqelhKU15Z\nTEtZamNbbG5h6dbZ3dvb1NbSzeX40s3mZeTk4t7udFdkeVtISVFr4vhmav3a\nz35MUv/Z6V5bY3n3+2hlberm3t1rWV7q1vJeYPvl6uX0dlph2974+3lv+uDe\n8WhZaXBhbHdoXFtke2liZ2/o3ev15vZ08uXZ5mVm/XVtZFxbX2Ru/2xp6dze\n6u96+N7Y1+Ti29jc4/xkaWpfWVZZV09OV1xaXnPucVxj/35z79rq7t7W2eXu\n593k4e50ZF9tdVxWX3j7X11p9/3l62NkcHj679/m7PJ7/d/d525gX1hfa/Hs\nal534upzZm/54fRlWV5+/nFx5eDq497d2drj7ubZ2eH1Znje529bUEA5OT1I\nU1RNSlbj0tXtde/j3NzZ1NDNy8nFxcPDxsbHxsnOz8/Lys7X4N1tPCgfHytC\nTjsuMmO4s7zV59TR3PHez8zT6+XNwby7u8DKzczFxs3X+vlvWFJa9dzc4urc\n2E0tIiIwb/Q6Ky1Oua+41V9n7d/UzMvcbFpyz8K+w8nQ3M3Gv8DJy8/Nztzo\n2sjAwcjT1dVULh8fK1XlOyknPMGwuOJEPUVh083WXktO6r20sLbAxca+uru/\nzc3Iy9H6XV/iycfM29bNWy0eHCZFVDMlKEywqK7HU0pY1sG/zWRY8Mm7ubq/\ny9bt28vFx+NraH7ifGdo48i/v8bKx889JB0iOuZJLSk6u6qtv00/RnXEwc1d\nR1bUv8DO1tbM0tvMyMTM4OLYzNDp8OrPwb6+xcjDzj0kHSA2/0IsKDm4qq7J\nQjxM2r/F5ExI5r61u9haXdTCwMfY4tzUys/eel5049XLxsTJzcO/4i8eHSrx\n1DYnKuerq75KPFTZxcbdcVziv7i821JQ7L+9yHtOas++vdZYTGjJwsLGyMbI\nx8G+3S4dGynv1DQmKmiurr9kTnPh1c7bb1rgvrzOWl3KvcR8S1Buz7+7v+1M\nYMG1ut1a3L290NzJxzseGB9HwT4nJkGuqbPLTU1+zLzC6VZ+vrrTWW+/usxW\nRFrYxrzB1lBLzre31EVbvrXDUU/JuMouGxkn8cs0Jit1q6m37z9Lybi57j5C\n2ra6cEhpvrv0Pz77vLrDbk9vyrm71mHku7TFUkPatLV0JBcbN7zRKSMzuqSr\nzz4506+07DI0zayt1jpAzLG6XTw75rm3yUJA2rWvwVVOzrK17jo5zq+3RhwU\nHmCvcSMkTamhsE81PbysvjcqQa6lsj4uU6+s5S8uTrWuxEA2+K+qt1E/2bCs\nv0M1S7euvDoaFSbFtDseKbqio8YvLl2sqVMnLMejp90vL8ypsjkmMbqpuj8y\nV62msFs6abCpt0cuMdmvscc2GhUpv740HjCvp6rqLD2+p6swIzyvnq1FLS2+\npr0xJD2urtU5PLuoqcU7RbyqrmA0MES7sbnLPB0WKL/DNiAzrauvdSpDsqaz\nKSPkp6G9MSo2sKfwJybdqbJmO1a0qaxrOdqwrr9ORERYyL69v2MgER69vDsf\nLK6rrtcoO62kuiMgv6CjyC4rTainPB8ttqnCPTvcrqm4P0C4rbfQXVJBP/S9\nsrC+KA8ZuLQ1ICmtpbHDKC6noc8fHrWdqPssLtaprTMgN7Wy+jxExq+tvEpe\ntbG/0d1cPjlOu62stD0UD0CsQSgl6KCtwDclsZ7TJB7OnKhlLzLSrbM4Jz+z\ntklC5b+ytrnI8by4zdnW8z80QbyrrrS/Kg8UvLYxLS23o7nNKi6gqTMkLqqi\nyEIyQMC7VSwyvavSNUbMuLa6u9bPsbpu3cDdNS9+ra23uncbDSamcjAzPams\nzzwhx53VKSvKn6xMMDXPv1Q9RNS0uz06xLm9urTBU8WvyGS/xT0uO7+vsbXM\nHwwdpMotMTitqM83IN2cuSwoZ5+jYyw2xcNKPkv3vblIN864zcyxuk7esrrW\nw8lJOz57tq6zvSoOFq60Li47sqjGNCJynrAvJ0Ojn9spMbu7S0hLTMi3XDRg\nuLzFuLt40rS5y8vK9kI5R7ipssMpDRimvCkqN6ulzS4fxZy9Lyc8op7cJjWx\nunJtPTjKslI4ZsO4trzTXcmzvdzWztJNOD65pLJMGQ09ozgxJzmcqU8mJKOf\nTTEnVZ+iRiVEtr/JSThCyrtdWV/utrK79UXLsbfL3cnNXT08uqe5JA0dn24l\nLCmrncMwI8SdvzQuOa+ltT461N3GxTkvU8XTzPNH17Ox0UnitbG80ce+2Ug3\nVrCvPA8Spq0oKyPXna84JVmhrkQwNLmpw1LTw1/WxFw7ND9avrXbX9a3uj9I\ns7DAvr/BvOU8Wbm+JwwbmrYnIx2ynMQoJ7Geuy4qV6arPji3qs1LTtbfSzYs\nzau5z1m+tkA8urPIu7PGx9U7fbRkFwxTm0I1Ih6onkwkL6qguzIn3KOwQTbJ\nsLXBPvzCeT8uUravwk/EukRLtbrUvLi+v1EyerIuDRalqfEtGTugrDYoUauq\nyCotq6XHRkbGyL6+42tRTENmd+O8xce/W0e7sL7Kx7y4vkM01EsPD66tSV4i\nLKurPCvFqrhgOza9qbtpc8DsUM+9vchKL1vC2dzmxbrfOGuztra5zcGzzjxL\nOA4QqK8zQyU6qrU1Kcqiq10qLbCmz2fCxOC+10n8zbfoR0xFvbp71Os816/H\n0rq3u7jJSU8xDxCrrjVBIjiotDEn16WpwTIovaTBTsK50LrYOlzoxMvgzVb+\nx8y/zjxBvrS5v8W+ubngQCcOFaa7KTUmbKO6LiXIpbLNOS29psBE1LTMzNU4\nSby43HjN+dDJ58C5YkF0z7iywcu8u9l7NA8OsK4qOSEvoak2HkukrbZFJcee\ntzxat7m65i9Xwc1hW7zEx/1LvbTRTd3NvrfQzLS2V0VAEg6zqyhCIyepqUof\nP6Ktukkjd56sSUy+tbnNMz7HxVU7y7u+1lHAwvHe0sC6uMLJvLvYTjMPD6qq\nMjkdK6iqRBw2n6SzNh5wnaZeP2a8qLIzK2mtvz5FYrKvU03q38XE18m1trm9\n0N1ZIw0ZqcBJNx1Fp601Gkiiqq43H1WhpeFZTfaipzYnQri4yj00tqfJR0Po\nurvO67ixt7vP3TMSD1+yXmYhKbiosCQd2quptjAr06KsUWY52p+rPStFwLS2\nPDW/rLVeN0m7rrjXyLewut0vERHyxkVFHy+1p6svJS9Tpq82PFmvpbphMUqr\nqLRQOD7PrbxPQ+q5vc9DM/CsrMNd5ri1RRkWMEtqRyMrSrGlveQ/Kk20zOFP\nS8C2tdbStb6+wOpQVc95V+BzRkHfv+9XxsDHzm3nu7RdOnDTfUMyLS0vLy8v\nMCste7ixu861rK243tzd23dDd8jCvedW1MrIxb++ybi0zc7RdtrCaigmO1lM\nNCsrNUQ6Li0wNkjftrLFuLCwrrPE/NPUcMS/y9XMzlhv3Me4v/1oysrSx2NH\nxr1JMjQ8OC8uKCk5PzI0Oj9jzLOutr7EubK1yU1SWF7Du8DefsvLwtFWxLS8\ny+nizMDJRj1n2eJMPDc0MCwqLTQwLC4+bdbCu7C0xcS+trfKSzldvre2vMbI\ntq+53nXOycfXU23Ixl41M1vnRi4nKy8wLiwxPDw8U864ub2/xri2ubu8t8pH\nR+jDub3a7b+usc9sYd6/wX5T3c1aNjJGXUkyKigrNjguLTU8Vda9tbavtsXA\nvb3DzdLd/Xr+5MG8wsfHvLa4yV1VyLrObe7qSDdCSDo1Ly0pKC83NDo+P2HP\nvsC+t7y7u8LFxsTOzs79a9rHxb22uL6/ur7Rde3OzdjwTzk1R045LCstLSwt\nLzVJTlFa27a5vby/vb/Fx9DYycK/yfVy8cq6tLe7vMPIyszuWGH15F46M0NO\nPy4pLC4xNC8xPkt2cXS/ubq6uru+wsrzat3Gvbu/1u7Tvbe5v7290dDG0+jp\n32M6Ky47PjgqJiowU91BRuvZxMrvb09yd1De9XHMvrq9vbu0qqq74dTDwMDF\n7GjEvc7j2NZIJh4tNi0rHyhWyLdhOcy5vNE0MFS9tkU37LamruPiu6y3183D\nvL7bS0/CvWFwwL7G3vnT1zkdIUgwJiQjPsm/1US7qLzeTkLb1E0yPL6/ycfM\nt6645t2wr8hoYtbBxuBkwq21z9DKyGkoGSl+Jx8jKc+9W0V6qKtFPk/cu00v\nM8muzd++va6x4FTEsL7lwrzJ09rkz726w8e/xc3fNB0jWicZHyY73ktMyaqp\nal68ystnOEjCv05Zr6/NxL7Mu7xaYL28bUjUxNvOw8G4us7cyGIlJOcsGioo\nKV49PL20st5brrdv4UNDwN0wRra8fdu0tr22222xt1JcycZmR8m81MjH68vK\nWDguQU4nJjs0LT45O1I/P+bVv73VvbG5wcbP08zvSWDQb1/Yz8vMyrq908fB\nyb++ytLaaFFXUkA/RDtBTDo6S0Y4Li0xMjo+NEHUzcS5s7Gxtbm5uLrJ3N3g\n0tfby83t1MLLxbu+yc7eTUVNPjQ1NTQ4OTxCRT0+TlJTXVRPW1xSZsu/v8vN\nurG0vcjHycnQfuvO11tJU+7W3VZdz8pvXdnOXkhMQD9KQTo3OkNIS+7X0sfL\n2NfIw+BPUGb8+WVbbd/S3fXVxMra4fHv9fRkUXrcaWLUx8ra7+bd5VlERk1D\nPDo/S1VXZN7S0MjDzdLM0dnV33V25uNqc9rgcmdcV1tXS0RV/U9Mad/f+m11\n39d2V2Tr8VtZ/eTk2MzKyc7NyNPzZ3P9ZF5cWmx+V1n7ZVZOSlJSTUtJWOLz\nX2ve0t3o2dnW0/pbaOXrXlzc0+zZyc3Vz8/kcm1pXlxkaHnt/l9a/utsWE1P\nYWBMSVTq22ZY/dfece/e3Nx5Ulf6fFFLatj+XvfkbsfCTcvDU870WMFoXsBY\nTMHUWMNVQsRQTNo9V9o/VFNKakZX8HzPTHzTTdP+RtTY4vH60uvW1ljR5uvU\nT3rXXfrPV83MX8pfX9dS6/RBT/VhQVfNUnjXT85vVchEWNA9405Pz1vcS+HH\nUsN3b8Ne12pGymxN6HB929DK2dHRzNVbz+NQfkdN5U5LW3tTWtxPYuVJ9NtC\n7tlIbN5UU+tZW9fu7szj8cn029F8zdX04t5s8dJJWNtVT9FlXsl5aedgVFxT\nUU5dTHjtU+rW89TvX83fUW7p31xa81Xo6urZatne3t7vWdDLOvfMSFThUFjL\nVNvlV9TgVNDfWvnrW3fsTGC/Tz+/eTnF0UjYbk76Wkz9emLLYtnHScy9TGDI\nbktkyERHv/5K2MZOWs5aVl/haWn8aO1U4ftMyu5F7sz5SczLSNvQP2jKQkzK\nWFXR21/J1mXM5VDp6f9BadZiVVrJW1fCXFLJ10fezzv0yUtLzeFG7t17ZVPW\n+WJe0+JX1Gll0lD/x0l9wEtMzPlX3mFy4d5mXtF+cfjt1Hhd22xO7P5eZ2Hd\n4E9JZuxGVO/980rnz1txzczi6tRvWOLvWm7scGxt3fVoz+pqXeJ4SuNs7WRh\nzufsXM/YUH3n+U9PXndHSttiVv/d0NvrzltawmlB/NFYTtf9ZeT3++zd6nXk\naWreVkXJ1Ufp1X1e19VOWc3YTlzcbOjjX2ToaE114VdHb9f/ZPPL3lvi2d1t\nZM/bVFvV3VBf3XJh4+Fh6X5VZWtmXGzz7flNd8VySWXO5EZK2cxSVdTlY+/V\nYezTWV9m711N+NjuXd/Yamni3m5u4OlWUNffUVbt3Pldcc/lT2bYck9f1Xlf\n5Orqc9/V/W906nVZVVX7fV5p+fDoz9tpbd97VlxSaHZm397y99fPYmLa6Fpc\n7l1QUm3tUV3a2HVj29T1btvuU1z16F1U6+F66OfsaWHv/Gxt6/VbdepjWn3i\n8f9/5uj0/Whr9t7/aWzv5V1S9893T3PS1V5RaebkW05r3udjZN/X6Fpd7txq\nU3vnfGh8+vbT52Pt2+BeYende1pffPJRTGNvbGr74urp3N/d5HxvcWlgXWPn\n5Pn1593pevt9ZnL/T0pdaVlPXfF0a2P84Xt1fu97ferr8Ovh5ujg7d7P19fO\nyszLzNXd/PD1/uLe6u3U2Vw4LDE4NCwpM1DdY2G/sbO+vrq/zeL6bV5eWWDW\nzMzP08nGz3tm39x+XnLRy9b83cnN6+XLxNw5KCs8PSkfKlbUUEHNraqyvsHD\ny95OQ0tZXF7axMDBy9LNyczf58/Jytns08jEzNXW5G5e5srHVSceLVNHIhoq\nv7RELeSkn7JaWMC1ykE6Q2PV1tLLwLi7x+5zz9F9WuXFyt3dx7u/2U5FYehb\nVda6xTAdI2DILhgdcqy+MkGonKLES32+wEwzMTpdz8rX3L+1uNZETM2/zmj6\nxLe6y9jPye5CPUn2zsbAv7zBQiIeL1k0GhcusafERryfnrE9LkTG3jUpLvmv\nrLjXzbqzulM5RcSyvVtLy7K8SzhG2fhCPVq+tbS2ubjJOB4bK0cwGhg1p56y\nTsGin7c1JS1b0kszM1+uoqjGWMaur200QMO0yEVF7tBnQkBLWlVZ0bu0s7O1\nu8TQdDMcFyJTTyEZL6OcsDs/rKO4MiIrd7S7UTtPsKKmxDtHuau1Tjtgu7nt\nOjE5V9PdUkv9vrG1xczAusNrTlrlQCAYH0/OMR4qs6S2PTi6qbNRMThhwbzR\nRTj8raez/9yxqLBuQ1bW2lE9NjtZxb3WR0nTvMP2Zda+v9VtatjnOR8aJ1dn\nKh0ruqevYlm4q6/rNi470bvGRj++op6s8f21rb5ENDlQ0ctuPz9qw85BMTdZ\n1t3exre1vMfOzNdPLh0bKVZTKB4ysKW0VFy3rLTrNS9DwbTGTE+4pKSwzdjB\nvcRyRkNN0cJvNS05aPZCNT19v7a0uL6+vcTrUlBMLx0cLmlJJiFKravCT9+3\ntL1sOjdYubPJVfqypqm30dfGubxmOTRVvso5Jy5jxXc4NlHEubq7vr27vs1v\nYuhhLRsdONI/Hx9cqKjLPFu0q7ZILTLKqq9oOW+on6vsQs6vsfMyMW22ukcr\nK0PN4zsyPeG/v7+9ta+0v9t92NtAIRkiR24tHi25qrVPRsKvscw8MUm1rMM9\nPb2nqMBO5bavvks2Psm0yzMpN9HMQjM84sC/wL20rrC941lv8zofGSVTXikf\nNLGqvkdLvK+3dDc647e53kpfuaqsv2nPsa7DPTn2u8FHMjhd1lg5OFnHx+9t\nv62rtc7Zy84+HxgmXkYhGzSsqs09V7Cqt0suN8avwzo5yaysv+fOtKuw1j9V\nu7fzODzZy0o0N07uak5W0r2xr7W9wL3QLRkaOt4qGB3Aoq9KO72jqNcsKmav\nujcrWa2ns9DTuayuzUFSu7fUREjSylM2OXDWSjQ+wK+3yr+wsb9iLRsfQzwe\nFSOupslA9amjsU0sNMW3TCkyuqm27smuqbLdSfK0sN8/V8C/Zj47TdfmPzVI\nwrvGybi0vcjnLRogZDwdFiqsrtj1xK2stm4yPMPBPS5OvMLWvq6xvr26usLK\nzdS9vGI9T9FTPE/XYz9M0sXEvbi/zMh9Jhgp7ioZG1WtZk+3qqvB/VZYyOk1\nNdKyfDXfrKzJ2raxtLq+w8u9yU1J/V82O8zIRT7OuMxex7G41WI9IR5GNBkZ\nLLb7LcGmqrrdzmRV2UQ4T76/QW+usdzvrq7bv6ysvdi8x1hNQTk55cs9ONqz\nu27iu7zP5HouGibaJBYfTcwuRqasuru4vVxeTThM29xKSbWvzNCvrNfQq6u5\n1biw8kZNSTUy1cs9Pc60wunAu8nuYDoeIuYnFSE/TCo2parDuLSvx0haXPpE\nOez41LzQ3LytusytrLm9srBeSMPfMitNxz435bvC2b26yuZ9TSMfUCkXJzAu\nLTiur8OutbCxTlzI/EA7z1U4vblXe7u3v7Gsra2vsr7N1ko6OTw/OD3izOTk\nt7LH29tTKSZeJBcuKSI1L1ivua+wr6nF2rdcPd9oOD7Jx1RVycC6sbatp66r\nrcnNZTs/Oi4vN0n4TUTPt8Px3M9oREdGPzUoLTctKS1CX0dP6MW6v728trnP\n08TF31Nf5e3SwLGtsq+tsba+4mBLRkc8P1dPTFhf8fpmfFhDRkpINyksLykq\nLC85OE3m0723tLOwr7a/urjI/tDO/+HGu7i5urSyu9LPx1RAXFI/RUtJRkxM\nWH5pUk9RTEg9NDAvKCotLS8zTnZwxrWzs7KytLm5vMTXzdH16s28ucHBs7G5\nv7q5z1p7akhDPT09Oj1LTE1STEpOSzw3MS0rLCwrMDpIZtu+sK+1tbCxur2/\nwcbKzuDt5M3Byci5t7y/vLnJ6t14VEA8Pzw6QkZJX25YVltNRT03Li0tKSgu\nNjpN8MO4s7W0srS7v7zCzNHI0OzXxMPLxLWzuLm4tb7S2vFNQjo5OjY3PUpa\na2VZX2VKPjkyLi0sKi00Nj5yzsG6trW1s7a9u7u+w8XL39PHytbIu7u8vLy6\nu8nY5V9MPzo8Ozs7QlphamBf9lE+PTkvLCsqLC8yN0r6zr62tbWwsri7ur7A\nxc3c18vO08q+vbu6vLy7yM7LfktLRT48OjxBUFpccXlhW1JEOTYxLiwrLC8z\nO0lnzL65tbKxtbm6vL/HzdHVycjLzs+4vsG2u7vN3b7STFVMTT86QUxHbHJh\nPjngNytNLiw4KDg+L1DKWvu5t8C7v7a6S9u6TVTN4Nzrzb28v7SuvLKwvcTO\nydA/RE8+QEBLbVjiyc7oTDZLOR4wLR4sJy5NNtOtvbiorLC0ur7OTFr0OUXa\nduHdu7K/tK+zs7i3yVTmaT45PDw2PE1V38u9tr/H1T1LOCAtKR0nKCxBP8qt\ns7GlqLOyutB7Pjo/MzxlUXq/s7Swq66tr7m80FNSRjk3Njw7PWLgxry4s73H\nWkVHKCYtHR0oJC87Sra0tKWjq6ysucVgQEIzMUdKQnC9srWxq62zsbnOX0pF\nOzA0ODg8SdTEvbKvsbnd7WMvLC4hHSMkKC88zrm8qqWrrKy2xOFBQTkvPEZH\nXcK0sK6sqauxt73oSEI5MS4wOTc7YtHOvK6vuMPL3Ts3LyckISUmKTlOzr2x\nqqiqrK64xmhKPTQ0Nz8+Tsm8sq6qqqutt7rbS0Q3MC8vMjY9Yu3Ms7KytL6/\nbUM/LSokIigmLTlR176xr6usrrC3xe9WPzs3OT0+X9fBuLCrrKyusbvXXkQ6\nMC8wLjE5Q1TMu7mwsbu5y1RdNywuJygqKzM9S925uK+rr6+xvMvbUUA9ODs9\nQlrSwrivsK6tsre/1GxIOzgyLi8wNT9EWc7Hvri0s8G9xkBeRS85MC0vLzZE\nQGK7ybuutLSyusrOVUxEO0hATOncy725uLS3u8LOynxKRD84Njo1Oz9ATVN1\n797Lys/Ozt3YdFNfSE1ORFZZYdfKycG+xcLE7u7oS0tNQkRKSVtWc9HozcrL\nw8nW5+ZZSkxKRUNPWFXt09DOyMrOy83Z++ZsUE9LR0NHSUtPUVtt6OTg3NbP\n3drZ4dnV19jW0s/R09bc3OD+XFJOSUlGREhITFBQa+nd2NPM0dbU1Nvv7flj\nY2BdaXxycevr/HJyZlZWVVZWXm5z++Pt4dbn2dbb0t3s5XZg6F1b81Zge1Ff\naFdmWWFnYe5y7ebo3fj26/z55/bp3uTY3ODo7+Z7fXhs/PD08ezj7Hf4bVha\nXE9LTk5OUVRZXWru6OnY0Nrc093h3fTx/3Z1afzvfv/k3+ne3uTh53RkYFdW\nVlJSUVlbXnfo3tzX29rb5+1oX2JTV2RaZm/06Ond4eLu735dYWJcXWZtanD9\n6vLe2eXZ2OHe3ur5bWpfWFtaW2FpefXv397h4ODvZ2BdWVpXV1xea3V37N/d\n397e4u397m9eamleaW1xe//j5u7f4uff4OZ7YWdkXFtbWl1lbGzv3ubp3d3z\nenJpXVlcVllfXmdx8uPe4+Xf4ePn7H5ubW9tYWJnbX7n4NzY293e6v1va2Va\nVFlbWGJrb/bv8/Hu6ep99u1qa21pamVqbXrx+ere29rj7e53a2NmYFtcXWJp\nePbv5N/h5uHo+fx5bmhiX19kYWVuc/358ezo6Ozr8e95ZmtfWl1jamj45e3i\n2uHt7/xwa3duZV5hYF1pbf3u5+bq2+bo6W32dG1xaWxiaWtp++vf2NHTztHX\nz+ztbE9ORURBQkVDTFBY++zh1NHR09XY3tzd5ejj3OLq5+vm5ent8vP+eWtk\nZFtdY1xla2BrbGptYmhpZXNt9PPz6u7e3dnYztLWy+bd6VZeTUpCPkI9QEVG\nVF/v1c/Kx8TEysrM19Td7+n9fnNrZFlhXFlfW2Vkae/y6uTZz8/Nzs7M2c/X\nXulRRkc6OjU1NzU+QUjx28vAvru7uru/wMbNzuxvaFZVT1JOS1ZSWmFf9e/o\n1s7NysK/xsHCyMnT4WROQTk2Ly0sLC0vNDxGbdTEure0sbG0trm7v8TL235p\nVU1VSEtTS2ZqeNjVysrFw8fDysnP6+BdS0o6NzUuLi0sLi82O0Vl3MO6uLSw\nsLGytbq+xs7dZWJRRE1ERFlMYdjdxr29ubi5vb7D2+FtQ0M6LzErKSonKisu\nNz1P3sa5s7Cura2vsbS7v8zd6k1NSj5GQ0hXYdnKv7m2sbKzuLrE6epFODcs\nKSckIyMnKi03P1nLvbaxra2tq62ur7i6wNncWENHPj5GRExs2s6/t7iwsryx\nv2fERTNAKyUpJSAkKScsPD1Xx7y0sKupramrsa60wMjPdFJWSEFMSEn14d2/\nvLu3w7+5T9zPLT4+IyktICAtKiZATTy/t7yuraytq6uyr7O8vsjQ4/juWVVd\nWGDx2NLMwN11u045wTMoVisfLCwfJT4sLMZrda6yr66rqLGtq7S8trZuyrpM\n7MRaXs3hXsrJ38paVcgzN9QlJ0IiHSkqHydJLzu6xbesq6Wuq6SxuKyy+L+w\nS3W0T1W93ffEwM7Bus9cbswvL+4jITYhGx8nHyBHNTqyu6+lqKGmqqattrq1\nzmC6bEvAXmLJ0M7EvcS4uW9xxk0rTDweKisdHh4iJCU4PNzEvKGqqZ2pqaSs\nubWvUs+4P2rGWFfRv97Htbq7X324MC3cKx8qJx0bIyQhNzZCrcK3naWpoqWs\nsbDIvcA9ycI87cDY3r64v7W7vdJGvzoqTScgJR0eHB4lJVBAQKWrrp+enqmn\no7a7/crLMFb4P21cwL7OsLOzuV3ZxDkqOy4dHx8bHh0gLz9G5aWmqpqeoZyn\nq6u46mr6NzxHMVvXRr+vuK+vx2i7VCg9LR0hGhoeHCImQldSp6ihmaKcmqen\nqrTrY9otOU8pSd1Bw7evr73Uu7ovNkogIiIXHB8gIyzPTsGirJ2bpp6iqK67\nulXaRi1ePDp5WMTAsaxU1Kv1OkMvKScdGR8nHyVM39WuqKSdn6Sorqy5eGLd\nTTZHRT7b4Ou7srhiUbLMNzspKS4dGiItLSpYuK2jqJ+ZoKesu8LVQSsyPSsw\nNUa33M6qrLxNtLQ5aS8fMyAYHSAtKz2+vZ2bn5SYm560rr1IMycrIiYtIUXT\nS7bDU8Gu9DrONig2Hh0qJCo3+8qznaCakZuZm6usvVc0LykdKS0jOEZN6DRI\nu0I2OywtLCAeKTExRMC5qJ2dlpKYl52nqbhwNzAoISkoKTg+Ti8twz8rRSoi\nLB8aISorN9PDrJ2emI+Sk5WenqbCXEswIiknIjcvLDUrVUYqOSopKhsbHiIn\nK1DGtaWfl5GSkJSamqSzxPk8Jy4tJjYvLCktaCcnOB8sKBUeJR8mMGTLrqei\nk5KWj5WYmaetueE7MzkpLC0hIi8xHygvHSkpFiEoHyw8VcarqaGUmJiQmZmY\nrK6t6DznRShENR0tTCMjMh8gLBgXJB0fLi9dtLmomZmYkpOYlZyoqLXV2k81\nNS4eJTwgIC0cIiwYHCgcIzgtRrK/rJyhmpOcmpadn6Oyr7TzTkorJDgnHS4g\nHCsbGCQdGSsuKMzGy56kp5OZn5OaoZqmq6O30NY2JTstGSokGSkdGCYgGygx\nJEzNXaiprZudp5qboJugop2nr7xPP0wmHykdIB8VHyIbHy0pLERFu628qJ6p\npp6moJ6loKGlqr77vEgrOyEiLxobKB8bJyIlTSpesF+yprOtobCknq2eoKSl\nubyy1zc9LCwsGx8sIR4qJy48Ks64Y7Syuq22yquutKqyp6vOr6zPzt41Vzsg\nLTQiKyskPi4tvttbuL6/rtG9rMqvvr6u+lauvlG1T0e/MDJRNCpLKzLRKWLB\nR8fL2b3ETrjBxL9ltsI9X7n00dQ8teA1YN07RjktwTw4w2ni419XyUfcwOiy\ny8G03UjCx0zFPVfCOjFZSjZOLnPCRMa7ur/jTeBJPvtQ39Tpw7po8LTzz8hR\nystCSF03PTEub0VPy8K9xNfUwlzwcNjnWHvLyFNf0NXS2tzMw2xZWjs6Oy9A\nPTxrbd/W39vEz8rCycG+zMTA1nllz/jnXOvNW2JOOz09Mkw/QlJLdFNXXN7l\n1MbRvsHNu76/wtrBxMTb0dbyTzk+Nzg0NjxFOj5RVF937MzIwMnDw7/Nw8DF\nys3Au8DIzs7VS0NEOzozNz02NzlCPk1Pb9La18DDwcPHvcLBvrq7u7vIw958\nYE5AQDk2ODQ0Ojo7PkNhZXvux9G+1MW9yL7Avry6v7q+x8fU6vlTREI3NzUw\nMjU1PURNWt1yy9HUxsXLwsDDvMPAwb/RxsnM2HP0bUtBOTg5NzQ6QEJFSGfq\n7HrLzM7Ew7y7vL+9ycfMytbcb/NUU0hCPz89P0JCSEpKTldKXWrv4tDYvsO+\nwLq6wcLKy9z8WmBlR0NJQkRGUUtUSkpRTFBWZvh9btTezMPMw8PGysbHzNFv\n7WNiS09MS0lMRkZLS0hHTFJeduThzdPPzsvLy8rKztHX1nnqXWFYV1pgY2NX\nW1BRSklVT1Je/2D06dzOx8vLysrNy9HX52tyW1hOUU9VT0lNTE1IT1JgaGvo\n5dze2c3JzMXIx8zPytHf7uD6Yl5OU0pHRz8/Pjs/QUNQW2PR08rCwby9usC9\nw8zT1eDd4vfa909USkdHPDs6PDs5OkJJTFdj3snGv7u7urzAv8rQ5Nfl1c3K\nzcfKx9RVWF5JPTgvNC8sLTE2RUzsvLmzr7GxtL7F1VxQRUBIP0ld38O9ubW1\ntLa8xmtCQT0vLSkqLSorND5TzsqwrKyqrKyvv+xnRTs0LzM4OkNX0L+8s66v\nr7S3u81LPT43LS0pLjIuMjxN28bCr62sra+vssLmUDs3LywtLTA3Pm7Ow7Ov\nrKirrKyytcxJTEo2MCwqNCwrLzlAW0/LtLmytbWvuNDYaFA/LC03LzIzO9vJ\nwrGtqaesqaqwtL3E+D42OjUtKiQsLCgqMDpYZnu1sKyqrauquMjcU0s4LSws\nMjQ3RvXDu7evq6utra2utbvB4UU4OTMuKyctLioqLjdJTU7Nu7KytK+ts73H\nzc9fQkNDQkE9SGVladzHvLy9uba0ub27u77LT0BLPjIuKistJiUrLTM7Q9S6\ntq6qp6Omq62vuMhXRj40LSgqLy8xOEnewr+2raqqq6utsLi+xWM9OTgyLigm\nKysnKCsxQkt7vbOrp6mmpauvucrYTjYyLy8uKC04PUtczLOwsKyqp6qzs7XA\nz1xUTzcsLzE2MSotOzUvLi9DYEdnxLWsrq+opqy0v8DDXDw4OToxLC01Oz0+\nTc28urWuqquws7G1vczY2mhNPTU9Pzo1MC4yLyssLTM6QFPLua+srKuqrrS8\nxdRmRjs5Ojk0MD1TdejRuaysrq6vr7jO415FOi4vMjQ6P0VozsnHy9fia0k8\nOjM1NjY6QUxszce9t7W1tri6vcnX6GtUSEpYderczczY9Oh8825YVlpcX33o\n0MzLyMfNzNLdVUY7Ozs2Ly8yNjg0OUbuz8rCubOzuLm5vMne5+rvbWne187P\n1MvL1O1qamJLSkhJT09La/Tn2dze2udwalpcXFJRTEhGQT9BQ0JGS1bt7NrW\nycvK0c7IyczX1s7LzczJw8bKzczP2m9VWFRNSU1VW1JRUlhbUE9XYGJdXmtr\nXFRcX15fWl12c3VaW2FiXWJiae3028vKycXAvb/FxcXL1O53ZlROS05KTkpM\nVE9NSk9VXVZg+9/b5Njb19zf+P36Yl9ZWVNMTE5QT1dWY/fo3tXQzMnHxsPG\nxcnKyczW3+Pub11TUkxIPz8/REZJTFNfe+/i2dXa1N3f4Pt5Z2lzbFtfXm54\ncm/o5N/k3NjU2Ofd6uh3+XTu7Xb1dtrt5e3ofmtuavhPUlZjU1BQWmNVVlvq\nb+568eTz7fjo3+Hv9N3pdnNmbHz7bnzr9O1w6ODb3+zW09Ho5uj0aGRZX2BP\nTkxTVlFKXG5z+WPa6tjg1c3X4PnZ6O1dfHFeXE9pW2te8Ovo4/XZ3uXu5Nx5\n7n31ePNn7P9feF9jaF5ZWFZnflZoeu5tZvXn9H7v3vpr7//Z7F103F5ofG17\n8vrr7Ozk9vzX9l7f2Whe8NXjXWDm5VVN/9dYQknVYkhJ5cpnTNnA6fhoxr5T\nTtLLYUla1F5IXG1kSvHa9VrX1c7z3NXcdW7YX1FeclVPXvx2VN/bel7g221p\n7vJZWHnvYl5s4O5z69nob/v3b1hi8Wtied/q7dnX4Ovf2+d7bHNtXFVVY2Ja\nXGz8Y1hl6uxubN7d4PPf1+T17+pyXl1qXl9hYmtueP3+fnv78evu8ujm5uLi\n39zrdHNtaV9YZWVbWF1hW15kee7p4d3Y3t/k5fBwaV1cX11aXGVpdHjq5ufy\n6OHm5/b16+/u9frv+fp0anZwZmBva2Z78vl48+zyanr0cmdqdm5hXWZpX2Jq\n/HB07/Dv7+ru7eLc4Org6Xd3c2xhXFhaYGb86+3i39rf9O3rbWJmYl5dZW9r\nZ3J7cP/8/v369fHr8fb0+Px7df9yb3t2dfZza3T4e2l08fD7bnr1fXN39enz\n8+7t9m91/XRpZ2psbWhnb312bfnue374+3F4++zt9Ozo/nl+bW5nanJ3amZq\nbWtnaGhre318+Oji497b3Ob18nxmXWJpamZmcG9tcXV+eHH37ff38ffz7+7o\n5+70fnhvaHNoX1xiZmdoZW1y9O/07ufj6u3s6ux6bX56al9hbmpmaXr5e3r4\n9/ju7/Pq6fj8+HxuZFhZ0VJux0HP51LS3VPPa2DZVOxxbfPyeVTiXd/cYv13\n9exmcexP6V1X61l5afZU1HBoznXe1WnidFJgUF3XWO5pUtR5+Mvo1vTmX95T\n3Ftm3VrncGX86FndfF7bXmjZWOduTmRdZXtn621e3unu49hn3+JL4etV2fRU\nzFLj1Wbbdfx3bmxpX+Zm9ehc9+xY/G1W9Whb7uJdbdT34d5k/e9Pa3pWW9Zb\n6N1fyWZcvlhm0Eps3kdhblff/+Xs23Ht3E/73FBj61z6de9ue9Fu4eBf2vJZ\n2llV6X1M/Nlc1uf8ZnjqXPpsfl1UaHdpbs1n3ctq5edd7Vtcd21r/mJ8dfJZ\n4txK0dpQ1W900k/fyVbdyk9Z2UxM3ElO12Pr5PjiVHDkXGlu32ta1WFa5fne\n5N/cVvXdW27pfGHc4U1a6m5s3txt/tn8UeThV+3c7mJh5GdR29hO5d1K59ZO\n6exU5//23Pbd2mlVX3pfZ19bZXj99ut+5tjcc+/8VuVkS+50VM7G5e7TcmP5\nVkxvXlHYdVfd32X7flNrZ01a52l21P9+0dPm9+Tg3mzy1uzy2NBsbt12XWRV\neVc/UulXTn1nP07lSEnZ6XRxW37Ya+/H1PDPwMTTzr/AxcTAv8K/usHV3+FB\nGBAsMBwt27OtvsSzukResctMzL7Gzr6vu7+tq7vzz248ROe/u7W9KwoTniQP\nzLusqEKvp+4uMrtILr2rvWK0qlrPqKm8+3YxL1DSqKaur94dCiGkFhW6zp2q\nKqGe118sY0AixqvNTNC0w7qopqvLOywuNDW4nqm3vj0YDx87JyBsn6asqbKv\nt0A0Q87kRtdBLsi5Vaiaq795Ly8+Ly7MrrS8tswkFhknQzYr25+hr7muqLNP\nc7S7OiY3TzI8u6ahp75PTy4eIzJA0rqup6ivyyoaGylwPS24naKmrruruTE0\nOy8tLEN+Tr+zsamvUzAxMSUs98K7r6ylo6zEMBoSIMZCKbGXnafAUL7JMysu\nQUQtL1a/tb+2p61eKik7MS5WtKuusKujqsM0GBQeRb5MRaSap7TbQF9bLCMs\nQj0+creprbu5r8spJTxCO+K5uLKssK6mr20mFxYg08Ez2pudr7hfNTMtIyg8\n8sa6trWwtM/HtlgrK0V8VGXEs621xK2kuksoFhUcOa2yt52euN0wJiowLz/X\nvq2yPj6usvdOvsNHLzRl0rzIu6ywxsivu1Y4HBUeOreovrykrmUwJCw9O0+y\ns7m2zkc6PtC7wcW9zENDRUnd29S1r7/BtMhYXiobIDC9qdtGtLVINCUsyLCv\nsdV5fiskOM6yrK6yvO01LTdaxbe0uLa949i/vL9RKR8cJcHGOsWqtLs/Kj/B\nub1SOT4uLUDPsqeqr7DbLSYvV72vtLm4yem/ra+3xCwZFxtErcr9r62x0yss\nSL25RyovPT5Y1ryhnqvF9D0tLjZltLG9u7OysK2xvOUtGRUWI62qy7Krt8Yw\nIChYrq9GLT5+ST/JpJ6ovtlhLyYsU7qurLG0sbC3uspYOikeGRYpp6fe2L66\nwiwjM9erqmkxNywuva+qpKKtv1ApIi7cuK+xsK+4ubvF4z8uJx8ZHP2mvFW/\nvb3GOS5AuKrTJyQ0Tkt0rZycqL1RKx8iMNmpn6WxvL/E7Ffxze41IBoZKrG7\nP+e6q61DLz7St1kkJ0Tmybmrnp+t2TspJSxCwKumqrS8uri9ytTxOx8WFRz9\nqsXXsqup1isrNs20PiUrUsDFuKObortHLikoLE2snqOvuri7z1xU6Hs4HhUV\nI7es9c+zq6tWKSg8trYzJzTDtbyxpaOtzD8zLzM6XrKnqrW8ubnF7VxqWzIb\nEhUtqavrxbGrtDUnLFauuDgtO8G90bqnpK3JXD4uLDBer6art7i3us5VTXZb\nLxsUGC+qrPzNt6u0OCw0c6y1NigyfWHiraGjrrzUNiUmMuivpqivtba4yG5k\n3kokFRMezabIRsarpNIsLTy+sEEnKka/w7mln6e6dT0tKy08v6ekq7S1sbvo\nT2XwNRwSFSuurkxftaSqRSwsQrG2NCYwxbvUtqSjr8DTQi4rLUC7p6asr66t\nw0VAVEYkFBEewKjdPsWloM4tKDS4rUooLXW62M+roai2v/02KioxWq+lqK6x\nrbFqP0lPLBgQGU6pwELbqJyzLyUrxKvfLStVuPlGvaShrLfWPC4pKzbFpaSp\nrKqowEhGPiUUEB7Prv1Gv6KeuTQjKcCvRygry69pOtOknqew1DwuKCgteKif\no6moqr5XQzMdEBMqvb8/YaydoMM4Jy3UyDQjMLGsaTvHoqCprslELykoKkqs\nn5+jo6q9+DgfEQ8gzc4xOqqZn7lOMTQ+Oy0mMrmswV/KrKitrrHDPysnKC9W\nsaKen6avvmcpFA4YOtc4M7CYmq9cOkZZOSggKb+ouj1Kq6GtwL6vuz8pIic4\nzayjnZ6ms/UrFxEbLC0mPKCVnbLY08hJKiEfLcyxyD1ZrKGqvcK5vNk8LCUp\nTrWopKKiq8IxGhghKR8bLaGTnbzWr6pfIx0nNEX62e5hvqmnssi+tb5fPTIr\nLVO0qqahpK9VJR4lKx8XHdmamrJSvqCrNR0gS8ZSLi9qsq/BzLKnqrvX7WI8\nLCxBw66mpKizUCgjKywfGR7joaLIPreepkciKr61OyAn0q2/QUuun6bEYsS5\n6y8oNOC2rqysrrdTKCApOi8eH1mosDctvZ+pQS3yqbI1Jju8xTszyKSisvjT\nt8A4IyhMubO6ubGvuV4wKDBNSy4lL+LDTTE9vq23WEXJr7lLNkB26XnLtK+1\nvstdOjI3T8u4srC0v/NIPj05NDhCTE9HRUhFQ0rgyu1T3b3HTT1Pz87m2buv\nr71mQkFKT1rovq+ut9JOQT89OjlAX9zce2FWSUJCTFJQUlNQS0lPVV3Xvri3\nubvD/kVEV23oyraur7vaU0Y+NzM5VdPU+2x0XktHR0hMW/hlSkZp0dtodMa6\nvtpNSk1QWllq1MC2s7a/1GpUSz03OlbR3Vtb59tcR0t14GJKRlHw3XBZ7MC4\nvt5eWllMQk1y2NHRxLy7yWVTXWBFNzlM3+VaV+7O0vhu9+xgRkRRa9vT3t/F\nt7vqR0leak9DTOXN0NfMxMLPdV1dVUQ+RmT7WlFd3tLnXVZaWFZUVm7d0NDY\nz8TD4ktIWvdeSkhb0cXN29C/vtdVT1xbRj1DYvZkYuXN0m5VVlxpZFtp2MrN\n2NrS0epWS0tXc2tRT3vTz9rez8rR9V1aWFRRTU1g0srdXVxoYE5IU+PW7f/X\nyc73XuzP4VVMY9ziYlRm5ud9bPrj19HeXU5WcWlSV9rH0VVES15hT07xysjb\ncuvX3mpaauv2Zmb33trlaFlh9e94+d7V3WpXWWFfaOXV1n1RSEdNWV1o487M\n0+x+39XgaFxu4nlUWeTN1WZYauLsYWT26HtbVFZfcObWztHhaVVRU1ddZGzs\n4OPu6dzY4WJfePthU1zv2+Jubere5Pz16e36ZFNOWXHo3Nzd3exdTUpPXWtu\n/eXb19zk5Ov4bGFmZWBland4+uXq5uDc4/90a15ZVlx+39rc39rZ7lhNUm3u\nal/51tDjYmJ8cFlSWG58Yl1s5NvZ2tzi6Oh8aF5aXWZyd/Hh3d7t9nVeUlBa\nc/9u/NvS1uhoY3F5amly+nFdWmL+6OLr7/Dr72peXWn/enzu6ujc3X5iXmBf\nWlpm7d/f4eDneV1ccOXf63lqbWhhbfLe5/jz7PRqYWFy8fT8efXp8mhbW2d1\nYFhf893d3dzj+GddXnjs6OZ7dW5lXmP/9+/u9fl5e3xtb/76/nvv4eHnenrr\n+mVTU2Frc3P+7Ot3Y23z5uTq/mlnaHN7c3f76er+cnT9cmJbXXLp5O3t39rh\nbF5cXVxbZXnq5eTj4eLs+Pj4dV9XXXz7aGX55uLn6+Tj+2dcWmJv7eHk5eDg\n721mXVlYW2NkZmv05Ol7bXh4bWNeYvXe3+rm3ODo5+foe1xXWFxkbvDo6N/b\n5XBsemtaV2Xy7nx25tvf9nV1Z2RgXmZ1+v9qc/h7fu/k5PZnXmZ87+54dO7l\n4fVnevNyXV1reXBoc+7s7vR+cWxobPz7+O7s7PpwbG7z7HhlYmRpeXhrav7p\n5ufp6ufremZocm1paG345OLqe21oYmRjYmns3uju7+jxeXprb2xncfrxcWh8\n7ujq5uXueWddV1VWWktOwWNQvFBkwUTuw3Ptxslabt1U7WlFfU5lXjzl1UTP\n127N28/JzetlavVMRuZbSs9Zb/Xn3E3D9U7NaWHPU1vnTGNSV+pO5tj95VrV\n2lLSel/h935TeOJL6uhVz3Pq0v/mbXhdYe7td/rmddnsUtjrVW3tTX3QbGH/\n7OlsbvJ23t1ffeZ4a17UYVHKTW/cSexTWv5NyGVazOzifF7bal77Y9FWb81T\n3HBg32HcWFnTVG3cVPPoV91xXGHn1mr4V9zuT+3cenHg2ut1bfzz+vB5X2p0\nWOVaYdpO5O1r+/zaam9y3mlV2fF3b/nnfW9ya35T+tn0Y/XY/2/nee576epo\nV2rYUUjv/FZy4W//2f5l2nlN6+JM+850XtjdVuvyX97wX1rf2U9i1W9Y595f\nZu9qZeZRY83uaN3O9VvmYmRoX2xx7GVl2/Fn93Hkb1PxeWFtbdvfX2rV3Oj0\n6OhiYFhgdVPr33hx7uZr/vFn9upeYOxwY/n1XW3xWmrmb1993F1o3fV9899x\n49R8++3uYl/u7eDl+OnZ7m/Y2end3uDvZ+zoYlZdWjk1Qz0yN0JHQlTV1sq8\nube3u8TGxeli/GVdZubp1snKw8DAx8e9w8bF2zQjMjwjHiMzMStHybivq6Sl\nqq65vd5ANistMTI8Q+K9vbWysLW8usftVE1NQE/k5dTCtrK32DVJyTckIC40\nIiY5X9zTtaurq66wtcDlPDY8OzMvPVtbZc+2tLu5tbXD3MvN4fDSydXQycG9\n4js8VjYoKCksKio1OVLGwLStrK2ztrrF5kg/PTw9Pkxp2sbEwsS+vNXuzMpv\nT+HKzdbRw8DBxtVKNj05KSYnLS4rOlbnu6+rqKmoq7jCylUxLDExKy08S1nf\nv7y8u7y6v8jP2MrHy8zPzL++w8TE5Dw5Oi8oIiYtLC45WMG3sKupqauwt8Dm\nRjgyMC8uM0BX4cm+vb27usTay8rV29DIz9zPxb6/wMpVQDwzLCcnKisrMUXh\nwrSrqaurq7S+zl89MTEvLjM7R1rZxb+8u7q8v8HIzMrHx8vUzcXFyM/7RDg4\nMisnJysuLzpOz7euq6qrrK+6xuBNOzIvLy4zPElf18S9urm4uL2/wszNy8rP\n7fnUx8rbYkg+Ny8sKisrLjY8UdC5raysq6yvucbfTDsyLi8xNjxFW9jJv7u6\nt7q9v8jOz8rM2d7dz8fJ1ldBPDgwKygqLTEzPGvBtLCsqaqtsbe/7Ug7My8v\nLzI3Pl7c2MW6t7q8t7vExMDBzM/N2tjKx+NCOTs4LyclKS0vMTvpu6+tqaao\nrLC2wmpCNy8sLS4vM0Nu7867tbW1s7W8wcTDx9Tk4ODZzc/vSTs7OC4oJCcs\nLi857rqwraikpqqtsr58RTguLCwsLDFFaX3OurK0uLSzvMbEwMXT3Nbb18zM\n8kc7OjkwJyMpLiwsNu+7tq6npKWprK+82k04LiwsKikvQldX0bexs7Ourri/\nvr/M3/BvZ/DSzetGOjs8MyghKTItKjB+u7yzqKSlqaqst8dsPDIvLCkmLDg/\nQ3i7sbGwrKuxury9yN5lT1lueXj1dT42P0I0Jic2MikqO83Ixq6op6enqK+5\nv2o4Ly8sJSUuOTlBz7ezr6upq66xtbzF4E5DSVJPUGFJNTVERSwiLDsuJixl\nxNG8q6empqWqsrbESTMyMikiKTQ2NkjFtbGvq6mqrbG2u8hcQUBLRUFf11Ey\nN/RWLSQuQC0jK0nT6Meup6SjpaqusMFFMzUyJiAoMDI1UL+2tK2mp6ytrbG/\n2lg+PEA/PlLK1Tc03cs4IihGMB8jOfJPUbSnpKKipKeqtF06OzQmHiQuLS4/\nyLa0sKmkpq2xsbPNQz1FRDg3YMPHVTlmv00uJi4/JR4oNlVEXa2mo6Kkoaau\nwU5EOisiICgrLDNOwbi2rKSjqKysrb5pTklANjZI99TSUT/ew0QrKDc3Hx4t\nOUA+0aqopKKkoqivyU1GNykiJCorLTlmwr20qqanqaqrsrzKZUk/PD9GVPJp\nODvFai4qLkkrHiw4PElMuKyrpKimpa2681RILygmKSwrMD19yMGwqainqKir\nr7fMXlNFPD5ETVdFLz7JPS0uM0ImIzcyQk1Nsq2rqKqkqLK62O9DLisqLSwr\nMzpYzMGwq6inqaeorrjG1mRCOzs9Pz8xK1vgLjMzPj8kLzw4WT3Urbmvramm\nr6++6NM+Ly0tMCcsOD7a0cGtqqippaOqrLLD40s/NzI2NS0lN/EtNT049y4v\nTztqQWazx7i0sqe0urncyEo1Pjg4MDVBPl/cybm1rayrqayssL/Zfk05NTg0\nLCg0PC47LzfEOjPqYWp6+Me+v7+3tLq/w8rYX0BLRjtERT9P7eDNwLy1r7Cx\nr7C1v+17TjM2OS4vLCk4bzs9zXPG2kzN01RaWk1RTkp40e/Iv9TFv8zM3eHe\naFhY2/1u2NS/ury8s7a/w+Z4Tz44NzguLTQ6PENIW9Pf7OLT2W1gXmpZVnDo\n0czJz8rBzczS2s7laF9892xve9jIysvAvr/O6uH+S0BARjw4OT9JSExl2tnZ\n3tLoXmROSExHP0VcYujc28jCx8nDwsvR2dnSfmpf4tjc0tTJxNHy0ulZTE1G\nQkA/SVBYX+va2NHW/nVpXUY+QD87OkRJWu7fysLGwb++w8jLz8rf5uLz3uTu\ndtra9ffq5WloXlhWSUxZXGhl7N3b1dzx7e9YU0lBRT89QEhIUlxs7ODR0MjI\n1s7OzdTf3uPe5fje3ebe29rW3ebm8/BiZWpqem166uxtcHZsW15aU0pKSUFD\nR0ZLUFz87uvgzs3T0NPR1ujv625fa+7p4tXRzszS1dDf4+HzeG7+aHh6aGpu\n/35eYm1fUU1NS0hJTU1OVFhs/Hne4N3c5N7f8+r5d3DycfPb2NTW2dLV2Nvb\n2ux0fPzvff7o6vTx7Plrc2pXUU1OSkZJS1BVU19qcfDt3u3q4+Dg52z59HDt\n5t/Y29nV1tvb2t7q73r6dm7/8+9tbXz7emv8/GNdWVZaVllbXFlcZ2ZkXWVs\nZmJv+PHufPr56Orh3dfZ3Nfa4uLh4/h8/n3zfnHt83B6+/TsdGdkX15fWmBe\nXGdiZG9jXmJiWGZsY2r+4+Xv9+3o9+zh4Njb4dvZ7Pvu73hta3pva/TyePZu\ndO92aWZnZV9lY11ianVuZm14Z1xfZWhzbXHy7e324eP16enn3/ry5uf9++rp\nfnnv8G55eP3peXX3def5YmtpbGFaYmJkdW9z9XRvdW5qb3FnaHVwbnX64t/k\n5ePd5uTq/ft6ZnB7b3nv7fV1+e/8+2Jlb2ZqZmdnXmBvZWn9fPvv5vJqamtp\nal9pev7v5eXe4Obf8/t6bf9paGdr9ev7d/Dc5vn7/PJ0Y19kc2lo+Pzt+3n6\nYHj5X2j2a2xjYPhpXXVranl+4d3o3tne7/v28nxraWJk92999O3d9vDu7fdf\nZ31eYVte/3Nw7+fr6uzrem/+bFpWW1tdYG53duXd3eDc6OXtbW9pX2JhY3H6\n5+To49Te7OHzbV9YXF1ZWWVx6ODi2trf3etydmBdV1lgW1pfanFv6+713N/z\n5Xz+82x7fGdy9u7u6u/h4ebi5H16bF1gXVZcVlpvbfTr2tfl7N/leGx5a1li\nXVX7+Xxybuzg9ufd6+Z0ZvNiV2Zu+nx96Onx5HRz8/5oXV1tX1dganN1eeLc\n3uXp6u73cndxYWlhZX78evv25u35++7v/nJ2dW5cXWxdZvvp2NjW0Njb3vdt\nXVVTTU1PWF5h6+Lb1dzZ3e1zZWJeXl9idmz29f7l4+rn6fLyeW5rZWlrXlxf\nXWhtbG9rZ2569uzo39/i5+Dc2NPV1tTW09HPztDb7GpMQzcwNjEvMjE9VW7K\nvbSvr6+0trzPbEtBPjc4PktfeNrHvb3ExMTL3G1caXNy787Ev7u6ucc/MDEs\nKB8dJC44QvKwpKCjqKiru105NTEqKS9H1sa+tK2tt8fO3k47Oj9KTlzPura4\nuri3vsvY19NJKiQsKSMiHyxNS/C9q6Kmq6+zuWY6NDQ4MzdiwLi7ubS0vOJj\n+1lMTlbOwcbCvL/N8k9OVUlI8czCyD8uOzElIh4lNzlMwaufn6OnrbTcOS4r\nKysvRcy2srGwt77OVk5QT37Sx7y6vL3D7VFBPUFFTtS9trLDOjA1JR8cGic4\nR8Swn5ueo6+81DQmISYuM0y8q6OmrLPCXz40NDxR3cC1r6+3v89ZPTIzPUrj\nvLCsrLZMKikkGhkXHjtut6admJuirdVOLR4dIC0+7K+inZ6oscdNMSgqNUh4\nwrGrrbrO3Uw0LTA8Yci4qqWpr71AIx4dFRYaH0W5p52bmJymuD8tJx4cJDPe\ntaienZ6owH46KScoMUzdvbGrq7zL20s8NzhC0L67rayyt8s7IRwfGhkcH0Gz\nqqCdnJ2ouE40LiYgJjJWxbOpo6Gpuc3eWz01PE/q3OTEv+dffv9sZl15xb3L\nwb3Fw9tGLyEmKh4fIiNfy82ur6SgravA0r44MTItPDhB3cCsr6+mrKyvyc9u\nQzkzNjE3Xd/Guru+vspaQT44MjU7P05KUtdzT0w9Pko8ODo9ac3Pyby3tbvI\nys7nZW/aysG7t7Wxs73DzlU/Ny4vOj9JX97S1NHoXFhQR05he9fUzszcc0pD\nSEE/Qj5CTVllXmNwZGdWTlhafNvLvry1sLOys7m/zO9gT0ZDS1pv+WVlZVNJ\nQD9AQUpV9szJy8nN5mFUTEpMSkpJS1RTTU5RTk1PT01ee+/OxcC8u7m8vb7G\nxcnS0+N37nVobl9VT0pHRkRARExTeGdgvsDvy9lm1Htk3k5LWUQ/Pzs+PjtD\nTEZR6+XVycS6trm3try6u8rQ2f1cXlRMWlNOX09CSVdKQFBh5Njjw8DLw8nP\nyulxdmZdSzcxRz0uNjI4XDg7Zl2+vsmvsq6svbe3ze5IREY7PUBIbenMvbq4\nvcrQ7U9CPkVMS1V53MrGyMK/w87a1Xw1KC82JignJkdCN9nDqqSwpqatqcRV\n8T8zKys4O0R0ybeurK6trbvdYkk8MzE2PENJT9jCw8K5uL3By9fRUy0lLzMg\nHycpPkI/v7Kjn6yio66xbT9FMComLUhJVL+uqqqrrq+11Ek/OzAsMTc7Sljg\nu7S1sa+vtr/D4T4qIyomGx0fKjs33rStnZ6ooKSrukdEOyknKC5BTfG8raip\nrKyuvNlPPTgxLC46QT9Oxbq4sbGxr7e/x/w9JyUtIBscHi42Ms64qp2hoZ+l\nqL1LTDsqJCcyPkFhuayoqKqpqrXIW0E5LSstMDg6SMu/urWvrK+3ucDfOiYp\nLh8aGx8yMDLPuqeepaGfo6jGWGs8KyQmMDs8UrurqKmopqmxwnZJOCwqKy8x\nNEPfv7m1rquts7m/2zgoLCsfGxojMCo23r+noqSfoKClvtPfPiwkJzEzNEfC\nr6yrpqWprrrTUTkuKSkuLzE+a8K6uK6qrbC3v+U2LTQpHRscJikjNmPFqqei\nnp+dorC4yE4vJyouLCw828G5r6elqq2yv+FCMy8vLy0vO0zuzb+wra6vs7rP\nQTY1LCEcHCImIis/27Ksp56dnZ+orbTPQC8uLy0pMEti4b+vq6+yr7fJZEVE\nPjQyNTlGTVbQvLa1t7W0wWZAPD4vIyEmKyghKkBo2MOupKOmpqarsb7WamdU\nQT5Q4/1a3sPN/uvcekg8QEo/PD9MXlNX38vCwsTBv8bS2+NeSkhIRT88PDo4\nOz49PUZYZ2Fv2M7OzcW9vL26tra0tLS5v8TOfVZMQz8+PD0+Q0ZKWGp03tHW\n2dzX2u75fWpua1hNSUM8OTY1Njg6PkdTb93Jvrq5trOytLa2t7q+ytTaelZM\nRkhMR0VKTldUWu7t+uzd1N986uj0+mljal5PSEE9ODMwMDE0NzxHWOnLvri1\nsq+vrq+ytLe6vsnU4XtaTEZLT0pISlFQSktPTk1OUVdTVV9kcPLt3+Lg6lpS\nTkM+Ozo9PUBLUVt24dDLx8G/vLi6vLu7u7/HycnT7Hb6+WNicWxoZVtVTUlJ\nR0VHQ0ZLTVFTWWdqZVtUVFRKQkRKTElLX3x45NTLxcjHv7y8v8C+vcDHzdHT\n3ntrbG1nZXl9fGteY15STEpNSkNDSEtKSlBeYWxtXVxZT0lHS0xISE9n9O3d\nysPFxb+7u77Avr3By87N1eloX2ljX11i/fxtZmluZ1VNTk1HQ0NISUZJVWBd\nW2BjYl5TUVBPT01PYPv36tPKysvIwr/DxcO/wMbLy8rU4u9+eGleXm1xcGlh\na11QTUpIREBESktNU2F1dHrv+HxoXFlRUExITVBVVlt939jSysPAw8K/v8TJ\nx8jP19ra3Onr6Ofr+3J1aVhPS0dGRkJDSEpLTFJha2tu597l9X39aFdRT1RT\nUldfdnbs2NDLy83KycvO0tTNztTT0M7U3dfV3vZvbV9UTElLS0pJSEtNTk5U\nX2tud/nt6+/u8P1qXlxaWFRRWmZ07+HY1tXX19TY3d/Y0tbc19DQ09LP0Nni\n6O5vXVRPTU1LSkxNTk5PVWBzdW755ubv7eXn925paF9aXWFqcHL48err//Pr\n6OTk3dbT09LR09bW2drc6Pfv721dXltRTElKS0tMT1deZGl27+nt7+fl7PT2\n/v7t+/ns9ntsaWtrb2x74dze29bW3dzd4ufv8/14d25w+XVrb2diYV9bWVla\nW1xlaXFyen7893fv6/H+fPTy+f758O3s7fp9e3V8eHRvfH169/Ls7Ovua0zd\nVWFHNr0/zsjrxcrTt+L+wtRra0ZQ+UFV7FJW02Pa2E3XeU72WkhfXEJmR0lP\nQUpPSUpdXmjZysq8vru3vb22w76/yrvMx7nAvLtsJSzEGxgsFy0jGK3EMqaa\nnZ2ln5trMrY7Gh0nLCwmvqPJtJ2ap6+qqM4w18U+W7vAIRGyOgtNHCavDrSX\nLLyZlqKrubKpGBnDGRg/Ka+oQZeUuamjsc09J9xpH8uirKW3HiKgEQ64D00/\nEJWdWaGVmre+W1Q6DhdAGifArpujo5qg0DLEPiYvLrmsvKCWn7EeFZ8WBjET\n0L8VkY2fnp2cSyUcFSMWEnZMW56bkJiqrLxeGCM9KNlJrJSdoZynQAwRogoK\nJRqQuiCLjp2srqsfFA4WOiIonJyblKOcrTMkISQYMU2+m5+Xlp6msSwHFLUI\nESYmjZ+wkZqlPT8uFhoTH81qoaGrkp59xUs3HCM0LLrIopCbm5ypux8GFlkK\nGSg+ipqvl5y1IB4fFiokJp+hqp+ppLFOLC8/HS9EPayknZ6WmquvJwkOTRAR\nNjKQj6iaoLA6HRcTKzA4n6WjmL5hoTkaLjQqJzHuppuemZiep7ogBRG7FxUp\nU42Pr7mspTcYEBc+rDAxlZKcr86ptR8RJTEiLGmelpWbnqCuJwQKaSUcKzOP\ni5/rN5zOHxUNL7LvILOOlZ64u591FxQdHzHww5KOmJ2oyQ8EEx8mIyuaiY+f\nraeq8R4MEB4lKjXblo6dmZqtPh0UEyAjTZmOkpuhIggPKR0bJDqai5pjpZOe\nqCQPM6oiDR01x6WgnZWYwCYYGikvUZuSnNkPDHrEICMnrpGnJR5IrJ+mxJyV\np1kjHBomPEuhmZ6n1jNIs7e/vWIYBg0tKztgOJuOoS4ZHjqftimslJKasDJI\n0duvw+Q/KiZcn6GgrE8oCgQXGxrTsJuOmLwnHyb4uTfAl5qqsviupWyzprlS\nTSwfuri1pswzCgklGRsbHaGPms57LKaOUBw6rJ2hS0iWnLeps7G2v0ZNZTNY\nLAkEH02xrhUbnZkvFBk8ko9NML6bkbYnrpmfnrBJvrVQSra+zCwMCRYfNigU\nNpqcwC8nv5GZR2vHuqw6Mq2Vj5mhqsI8IxoZGhgZM6Oity8dKjIjGSFVo6Hm\nu6SYkpuop6GybzYhL803ICQrLELfN0BhNFXNQj3SWTNNPmyrqqqmpLXlOz63\nvXhMQUc7Lzu8rfU8QTp7yEVUr6/KeiskMi8tPMyun5+rtzwmJSQ8sq6nqbZx\nPnhGSToxycnz2MCzxW8sJDI+OjZcybmx2FVIQVrNr62vv7+uwkosMsm91jpC\nycFtQkQ8KyEjL9i7tamu30NqaktNR7CkrKutsMNaMjb1a29XQDAyPS0vNDrN\n10A2RUk+e8qzqKans7qzsrnQcebXRTU0PmZHQD06PC8lJi464Lu0srK7WGDD\ns7O9wbavxGXYytNWOTxjOiw2NT92RklSTF3f5m/dzLy70d/QxbO4zNTAuLp1\nMC4zOTE0UMa3zjswOk87N9Kxq67Szr7WX/G/vbm/4mFDOzU89r694EYyLjUw\nNVbNwMDOSkzmfc+/v66os9tVVE9OPjl6tbPIRDI+UDcuOde7z2byxMlNOjlI\n2t3PxsO6uL3QakBHzslSPmbAwutBQdz0QETvfERAPFnG0WFU+en7WVTe0su8\nuLa+z8zLcnlYQ01JTElDT29xWEdFQj46P05gz8G7u77Ezs7X/d/Gv91reOHG\nxvNJaM/mTz01PT4yN0JQ7FZNa97O09rexbnAxLy7vMR2etXOxcfabmk/Mzs7\nPkRFR0pANDpactjk7c3lbN/h1r+wrbG7zM3WW1fgw7vC8k9FOjQ1MzM4Oj4+\nS1nu+HXr29DfbXzOv7Gsqq66zOFMPkZM38nGz+tHNjA4QTk8PzxBRjg5XdPE\nurzDvMbYxbq0r7G/z19JQD9HbsrGzvxNPjcvMDM5V2BN9d3aZEpW18zRw7q3\ntrzDv8HS63dyYko/R1lXad/gbEs/Ozs1O0Vf7+fSycja2NbTys/Jw7/D0ePv\n1dXY82dVUks9P0ZUYUlCSv9rTklKa9Dna8XFysru28vGzMnJ2d/pWE1iamFk\nWlBRT0VLWVZbXk9VVFXz4s7Oz9zl5HTP0NrJytjb4Gbi73rcbVlXU0xJQz5S\nYVVv7u/a5l9fVmfe7+fOyMzM3/TV7F5ZaN7Z5mf+33dTTmhrV01OanxZV3nZ\n2nZYT//S19Lb2tjgc2h+Yn7r4nlfXlBRS1JUUmxz+nxqYXXZ0c7KycLCysbC\nv7y9zN9dMi0vLCwyMTzxalb45MzD1GFd0MjBury7uLu4s7q8urq3usw+KCw9\nKyYsKjjbOjReUmvG0ODLxdhnddz3atPHxb65v722try8t7q6vM7T20c8RD4x\nLy0pKyopLTA4Q0xiz8S7t7m6ucDDv8HDv7u3sq+xtrq6usTS6FhHSkI0Liwq\nKygkJSoxOT9JzsO7tLO0r7O9v77FwL/Gv7u5vL2/wMvJy9LOzWJSTzsvLSgk\nJyUkKi84VurLua+rrK+ysLi/3E9SVUhITmPWztfRwr27uri2t7zObOdiQzky\nLjIxKSovNz9GQ2jMwry9wb6+zuJYXndWSlVf3NPPxLy5tLS4s7K0t7zO2Mvc\nRzozLy4sJSguMDQ3OUndxr7Aw7/D2ONQTVBNSlZc7se+urKvrqytrayusrO6\nyGdRTz80LSkpKiYjJyotMzM3UNPCvsPBurvDz+rRz9XSy8S7u7y4tLOvs7az\ntri9xs3SY0A8PDUuKykoKigmKi41OzxAb8m7vMDBubi8w8/Hv8HJycO7vMLE\nvrm4vsTDwcTR7eHT2m1GPkdANC0sLTAtJyovOTo5Pum9tLW+vrq5vcTMv7u9\ny9zZyszZ3NXEvsXO0NDL0NrOxsG/xU496z4xNiQuRikrLylRWi9MWOuuu3y1\nt7uz0V+6yu7NT867bNG+zrm/67690sLb1ra9v71jMik/MiUxHSzNJzX/NK2x\nPbXD2bRIOcfPV3jc1a7GT73Zy8Q+zb7+y2nnut/9xL65u8O7sbrbKR7ZLh4z\nGD+vI2q5WKC3PLDHSWg0L93uL9u/16x+46vz8ulSuch7zL22vNXnvLniyMW/\nr8F1Kh/oKB80Glm8JNXSRKvcOsFVPVk9P8jJU7yxtqi9v6/t02g/zup70u/D\nwOHaxMHDwtDDurzBTR0e3x8kLhixwSi37M+j8kG4a1O/RFWs0Uq2zri0O8zM\nSOE8R9xnQ03JwbzPxquvvtJZu7buwrrBQxce2R8uIxmlzCrITLGeSD+ywLzW\nL3WuWDzZ3K6+NsnCyuMz8rrJfkfStsZe6L7LUDs/z8jJvLKruXonG1ItHDUb\nXKcpvLHVn7tTrdJUzzs12U0x/NbMr1FktEPb0jy8wM28zdxm9k9GXD5Q723E\n18extq+vvrpBHSg3JTojJLHNy7vmr6jVTVA8azwqR17nzlvItMPH1Gu8vdm6\nt7W5UFF9PC8rLzs8P0nEsa+vrKu3vczWvfJALCE3OS88Mti69M9158trQDo7\nRF5LRFhl6dTj38C6ubm/t7S+zmfo7ktBRmrZydRmy81hUDo54WVN70/Ev19t\nT+rLys/Nwk84LCxCPTc/S8S73ej35shePEHcxMXKetXG1NljT9a+vLrNxrS/\n0lZD2thJPUreyWw5Rl5dWjpH0PROP0F8Wj5DSmnfTUpv9P5WbMnGz8i6uslj\nfsTBzX1v3M3L2MvAwb2/3FpBODo3Ly4vOe7y7sfEusLR1XXh71VJSEtDQURL\ncl9g28rE0NfZ1szm/3vtz97e82D47NrGxcrBxb/A7GlOREU2NUFHTkpMbu/l\nUFNxWllQ3cTL0m/f0e9zUWjK21xq29HgXGTS1+nn181+TU9z+FpY7s/caGLk\ny+VUUFz6UEZS9dHeXmvtak9IUv1lWFRf2dXvevjY2One19Dc8mZad/t859zf\nfG7q4OL4at3rb/lXcOtd9efj2FVNZltlW01l4/JdUVFv/VBU5tPX/Xzf2d9f\nW/vf6Ftf++rc7fba0tjp+eLd6PR19nVbXmBdXFBUbmZk9Obl4+5p9XxYZl5k\n9Fxy7/Pjbmbx4utoW/ff/fnq39Lb6+l4dm9bW1VWY3Lv9n7Z09/d6G3+aFFY\nXWVuU1hnaP5eWerZ1tXo3dDqbGVn/WxaXHbu7vv84ub/cm/472dp+/zt597e\n2t73eWRcXVxaV1BPV2Zpa+3c1Nfc4PLq/ff8XGpta29ZYGlia2z+4eZx8d7l\n3ePt2ettcl1iZlpbYmh67Ovp6Orm9mRsY2Xve3J+7PN9fXPs+2lsZmBqb2hy\ncWxz/fp3enfk3uDf4OHe6fvucXZ3Zf7ueGtta29iWGZ0bGleZnxraGZ45OV9\nZGrz925q6dzc5XLo5W9hV2v9aGtq99/ta27y6fZ2/vjg7Gtsb+7+aGl6/mhf\nVFFUVGFy49LOycrLyc3P0dbvWk5EREA9P0FMVFvq2c/KycvM1eV8X1pSTlRY\nWGf15NnVz83Pz87S1d/2Z1dPTk1MTVNhanjq39fa2tPX3/thWlNNTExQWlxk\n/efWz9HRzs3T5WxnWU5KRkhLS1Fg6dnZzsrIx8rPz8/W2tvb19vtZFFNSEFA\nQUJGSk1SW23q39PQztLb4mxcUUtOUlx55tHNzMrIxMrHxsrL1+Z8ZVpMSkdI\nSERJTVRaW2Z7fXF1eflya3R66uPj2svFw8C/vb3Bydh5UEQ8NzQzMjQ5PkhY\nbdPEvr6+vcDL4l9RSEVESll52czEvry8vr/Fzd1pVk1IQj9BP0BDRUpRYPzf\n0svKzc3R1dbb3drOxcLGzNfoX01AOzk4ODo7PUJNXurMxb6+vsPN221jX1tc\nbODU0M/LycjKy87W2e5kUkpDPj08PT9FT3TdzMjEvr6+v8LGzONaSkI9ODc5\nOj9IV2bezsTCvr2/xNLtVEY9Ojs+RE1l18i+ube3uLq+yd9eTEU/P0NGT1pv\n7OLW09HQz8zJysvUZko8NTEvLi4yOUVX58m/uLWysrO1vMPcXUpCPj0/SFFl\n3c7IxcPEzNHhdVpPSkVEREtUX+fSw726uLe2ur/VV0A2LywpKCkuOERa8c3A\nu7SxsLS6y1o+NzY+TezNx8bFvru3tbe92U4+Oz5IT05JRUZez7u0s7e+xMbC\nw9dELSIeHycxPEVJTOC6q6WmrL9QOjk9SEhBPkJ6va2pq7K/0+Hc3mlLPj0/\nSFBPTkpOZ9vHv7y5trO0uL/VUDYrJiMmKCsuNk/HtrCwtLm+zO5JOjY4RWrL\nv7q3s6+vs73QeVxTUU9LS0pLTUxRXF9re+XMvbe0trzG0nhLNSkmJSsvMDlA\n7b22uLzCv7/UVzw4PD9KVHXKtq6tr7a4u7/NXkc+REdLSUhe6dvlZG7Vyb/A\nxMO/vb/L6k86KyYlKCspKzRJzru6s66vs8ddU01JPjpF7cS6trKtrbK4xthq\nQDs+P1JOTGVp+F9IUP/mztLHurm2ub/E8T8sKCooKSQpNEP/yrivrba9ytno\nTDw4PEd9x7iur6+usbS7zWM/P0lCT09Va0tMWU9rfGrZ3sq8uri+xcnrTC8q\nLiYmJyg4O0LKubWus7S61+z1Sz5GRUxv3bmytK6vsrfF0eZZSUFDRkVFSU5M\nS3bd1s/Lvb2/vr/Ez3tNNysvLCMoKCs1N2W+xLmus7W7xMXhTFVWRFrOxb6+\nta62trbD2NZfW1dBSkE5Qz07VU1p2uK/vLy1ubu+z/A+LjMuISopJS4xPtlt\nvK24s626vsLa5FlKV+1Vz8LDtrm3uLy6w9PK7llKPDk4Nz5ARFxf5ca7t7W3\nvMLWUTY4MyArKR4rLjBdT8OwvK6psLavv+DSV05eS2f+b8K+vre1tby7vt7c\nZUE7ODcyNz4+U+vKvLixsrW4wnc+Qy8gMSccLScoQDvRubysqbCtqrvAvU9H\nZUBMXlnP0sK6t7G1rrjGvPxSTDo4MTM2ND1X8s27uLazuL10UWEpKzsdIy4e\nLDg14sK6rKuuqKy4r8VP4Eo9Xk1W7NfHw7G3t6u/vLju3F5EPTI3NjI/S0vZ\nwr+5tLi/93lXKTUzHCopHi4wM2fLu66urKmurq/H0sxMSmpLZd/fzb+3w7Kv\nyLS8ctRcRz04OjI1QDpI0dXGuLi6wt3TPy9KKB83ISA5KTPmW76ysausrKuz\nvsHdVPVTRt/v6sy/us2xstuwv13BXkdOQDs2QUI7WPhhzL3Fvsn+0Tg3WSAq\nORouMyFMSU24ua+sq6musbi/2+7eQV7gS8rJzre/trjLt8lzy1Q/Sj84P0c9\nSGxVcsTMxrnZ4s47PFAlLTQdLysjRjdNvsiwra2pra+1vsXW8Fd+fFjHz9C5\nxru4yLvI38xbRk5AOUE+O01SUd7M0cHA4s7fOVQ/JDsqHzolKkUw38jHrrOt\nq7GwuL3EzNZm135wxdvGvMa7vMLEyd55bkRHRDhDPj1QTF7czcnCvtHY1T1E\nSyYxLh8vJyc8Mm7O0a6zr6mwsLS8v8zP49Pe78HTzLvDwrq/1L/cVtdESEk5\nRjo+T0R56N/MycXU2tk/R08oNTIgMSgnOTBY39CwuLCpsrGyvb/Eyt7T0e7E\nz8q8zbvDz7344NBOV05BREA/R0pOWGrgz8rNy+LjWzxtLyw/IisvJDgyPdxa\nuLm4qLCwrry6wcnJ1MvbycfOvMu+v96/6+jNS19MPkc9QkZFT1Ri6dzT1c7c\n9+JCTksrOy8kNSgrOzFkbdOzv62suK26u7jMv9HOydvBzMPAzb7Tysx40FpU\nWUJKQkNIQFNPV+jt1tDI1nbZSD9lLi89JC8vJjwxP+pVt722qrevs762w7/F\nzcDTwsXNv9LAyNzG9N7rUl1JR0ZDREVOS1hqctbSzM7cees9R08oPS8iPCYt\nPi3hTt2wy62tuK27uLrIvdTHytS/zL/Cxb3Vxdn2005dVUROR0NISUZRY1V8\n3tzX0fb9YjxsOSxLJys4JDYzNd9GvbnDqbW0rby1vL+91L/KzsDPxMjFx9jI\n4OzfVF9PTFFETUxHWVJVZ3D6/tjoWd5JPvsvMT8lMC4mOi9B/Uy4xLuqu6+v\nvLK+u7/Lus7FvtbGxszRz9H61+9lbVNUSEtKQExJSlhWavru2+1g3UhBfC40\nQSYxMCc4MUFdUrnIuaq4rq+4sr24wsS837/I4r7R0Mra2eHc7WJuXkxNS0JF\nSEZITlRZ++jX3/reS0dgNDQ9KS0xKDM3OlhZwsC6rLWvrrezuLu+vr/LwcnY\nytPV09zU5NviX+dgTFVLREdHQkNMS1h38Nrp4utOV1M1ODcpLy8pNDY8VWHA\nwLestK6ut7O4vL2/w8/FztnF18/L2M3cztNp2llJU0JAPT0+PUpIUft40+Xy\n10tTXjM7OigyLyg3Mz1eW73Atqu0ra23sLe8v8PG0sPT18HbysjTxtTL1G3i\nS0lLOj88OT0+RkdQZ23a6vt8TlVROjw5LDQwLDozPGVUwL64rLWtrrevvL68\nycTOxMnWwMvJwczFys7cY3JHP0I5Ozk5PjxGSlNvbN/4dvdJWU01PjYtNS4v\nOTdMXd+8vrCtsqywtbS7vcLCzM3G1sjIzMDLxsPLyN1vXEVCOzg5NDg7PUlL\nWG914XD0YEdgPzc/LzE1LTg3PGtYw7y7rbKurbWwt7m7x77MysHZw8fMwMvG\ny9rVZVNMPjw4NjY1ODo9Rk1YbuTteetSUFI8PzowOjQ1PztV9+a9vravs661\ntLa/usXIwNTEy8/Byr2/yb/O2N5VTUI7OTc3NTc6PEJKU1dn62x7c0xSSjs+\nODQ6NTk+Qlz9x768srOxsLa0t727wMbFyc3KxsfFwMXKx9HycU1DQTo4Nzc3\nOD09P0xIUWhdaWdiVU9PRUVAPD08PUFKXPXQxr64t7W1t7i6vL6/v8HCwMPD\nwsbHytDT7WZaSUQ/PDo5OTg4Ozs+Q0RKUFdaYmplbV5UU01MUVRTXW/34NnQ\nzcrFxb++wL2+vr/BwMXExcrGzNPX7PNlW1dKSEVCREBBQUFDQkZJSEtKTE9Q\nVFddX2Rmam9sb/n4+uXg4dTQzcnJyMnHx8bEyMnMz83V2trg4uz0fWFcVE5N\nSUlJSUxKTlJOUVFVWVpfYl5da3BrfG1qfX57+29la3D139vVz87NzMrMz83R\n0tDc397t7+/6cW9mYmRaVFJOTk1MTk1OT09WWmJu//h+7Ont6+/x9fvn6//u\n7uvm6+Xe4+jp6Or05uLm3OTk4u7p9XP7fHZ3e3Jsd2ZhYmBiXF5dVlZXXV9f\naG76+/T1e3hvcn13cXr37Ofk5uzo5OLo7fnu7/vm7OLf7ej7dHRmamdfX15f\nXFtfaHF0fH72eX7y+v97fO//dPx7/Xt7+fr1//nt9f/18XFscHFze37y8eru\n5+p87ff59HZ5cWhpbG9mZWxobGlndm1sc259dvvq/fP4dXloaXH77fry7e3q\n7O968v9qbmRgZm5vbvjs+Orm8/Ht+nr9bmRwbGtram9sa3F+9nb87vT18fFu\nen1seWhp/3vp7HTt7n3m9nvra+7fYHj4ZG5mfH1i7/xv6v5t/W5jb/JnWPlr\nW/Tvb3Lk73Dh6Pfn+O5mZOdrYG/uenPw/Gb+6ftp+v52+XV2befjYmfpaVx4\n+l9k2+Vdet5gYNvrVVrtald42GpX0txa2d1Z9N1mW+fxVvTocXfe5Hdg7e1w\n7Ob0cP/gb17hbF3velx47PZvdfpqY/VZXHb0elt7cF/xcej8Z9zgd+jmfG3v\n7mL73ehaftBbW9hfVufTaEzx1kvzzE5ZzelPd9ZyUtTRVXnPXk526k1Nzm1B\n49VXYs7eTNLEUVTP41Dq0VVe2s5rUNDYWu7fYWnw71VY5FJd2Wdd8mzmYGjV\nZ2fR/2n6bOdRZOVa5vls3Gh57Hb9V9nf59lP1s1L/dZQYW/nUFnMeFdb6dNc\nWulsXe/XWFjeYe7VTvPL6fpm5WtS6u5WW97pTNbPW1zo1FtV0nlV3thhe+z7\nanvZXl3TZ1Bo2FtZ1+pZeN99UGbRdUzm5E7j4FVp3+DzXufYbWv861fv1E/5\n1nlp7t/e4OJv/Obj62H8aEnt6U5SY9hXTcvaWe3c6kji2Elo0Gxm691dWvlh\nXHHbfF7S2Fjj4GRq33VcXO58Xe3X9XjZ3F9q1VxW5HFO8tpZa85tUurrXGrb\n6WZk6OpSW9NcWtxTY85ceNXq3ubf81Tk6UhT+mxU+cteXsjaaPzP7E/f1VhZ\n7/Zdad5XTc/fSuv3Xnds2FdP32Vn+WR1Wm3cV37a7dbS2+Jw1N9Sa/9aUH7f\nTWDS8Gfk1llVxt9H2M5NZsz1U2Pkbl5c/XpN/t1efN3uevr7WXRiT+v0Zfh9\n5/hu1uZm4PdobX7uUlrgamvi9+de7c9k6eH62Fh921Jn6Xdafvhhfmti6Wxr\n793pUd3hUOptWd1aWtdn92rm11jS2f3eZ+p4S31nZV5P0+Fbfvfq31998/lp\n+dtTaeN3aGTf4Wl7XOv+Wd1zX2voaHFi7vZh0vhb7Nnndd/jeW3572Nt8WRq\nbWpdV/H1UuH3XM71bH740FZP3v1bcNBvT9/VVXfsZF9o+Fvw5V5p7OVYb8tm\nXubZ6V/o2G/53P5ndGX8VWd2dehsXvPj5fT0bmLVald8XmdqdORZYNxp9nZn\nbePcXl/sbWnh5nPyznd64Xv5ed9dW9xvWn5uXV9s715i5Whv3u5aZd9ZXtlu\nY37d6Vrv3HF95nRdcexjaeB4bd7sZvTiZ3rubGtp4+506+hq+uP6XnHhWGXn\nX3nlaPvu/Hts8m1T/vdYdG97duvabvDd92zl21f+4llt/F9oY2nna1/o9l3l\n3GRu3Htp23Vf/e798+brWnnnal94+ltl5O9ecObrdfbfYv/eXVz4Zlx4/Pt1\ncXNpeOxqcHhuYPni+e3p5Xnt6X55/XRtZ2bedHDZ/fHvXmFt7Vxd6P5f7u1r\n7Ofm6u3w6f5y9Gpr9V5l5V9WdnhgWmpe/uV1bfTl3eVr6udi7thfXt72YuHq\nV33xbWp8/3PtfW5l9GRs62f2/n1l/e1u/m1zbHR+V2p1YHvl6PPd2erw2+9Z\n+vZbZvpoYnX7cHXX82Pi815s92hWaup3+N3ufuPg637q/mftb2r/92pXcnRe\naG9ib3ru73bo42ts5Gpd+PdsZnX6a3rkcOzb8vbpZm/zYf17/3pq8/hsb/Z9\n/Xf68Wtt7HBibnNqaXJ2d3v57Obq++/fcnX9YGVnbf598flr9+z39e9ubnhp\nXGh7b2xrcf5sdPV76vDt7ujl4ujzbnD+aGpZXd9S429s3WzaYP38bHJ833zv\n6Ntu7+ZdeXL3b2rdZH1vdGdc+VRjbWRrZPdofO7v7d/fful8b2pjcWtwfv35\n/ut59+Z3cfLtdH3s+Hr9625ub2lrbPtpdfNqdmv8bG3vdnjv+nlsfvt99Pjt\n5vX37Xx9/HBpcmppZ2BeXWlidXZ+8fLl9+j0fPTv7fX0cvvr6ubl293PzNTa\n3uZua1pSS0pPTEpMTVBVYF1w8+je39fY19ba4evq/vb/cXFu/v13ffp6++7v\n+WpnXVpaW2Joe//4evv09vTw7Onm6unp6+Pn6ez0/np4a2ttbGdmZ2NfX11j\nXl5paH7+6uDn7Obi6uns8fbr6O/l7/L37+91a2xoYmBiYl9gZ2lrZmhvbm95\n+fb78PH47e7r7H13b21tcnh78ezm5ejvd2xpYV1iaGdqd3z69u709fv4+Hnu\n8e/p7Ono5uft7e33fHhxaWtlXV1dXVxdY2ZmaGhqbnH17+fq6+3s5+nh5+30\n7+v39v1zeHZvaGJkYmRmY2NkbmxwdnF2eXt58+vk7Onk7Orn5ez39//+/nZu\neHp9ent3bGZkZ2RhZWx3dXl99PL67u319fp7e3l27+z29/5xbGlmampwdPzx\n/Pz5fXd7d/39d3Vvem97/3f9fndzcm18fnN7fXr/8fbx8/p++PF6+313dWlu\namJnbGppbG/78Ors6unu8v/8+nf/+PP+eXZwdG9vbnh9ef14bG98fnp7dXx6\ndHb++/v5+vP0eXh+em9vdnVtbnpzaP96cf14e/n6/Xt9eXN5fHN78+nr7vP4\n7/j5dnF5fHZy/nJrcXRtZ3X58/Pu7vb6fnBqZmBiaWRhbHZ0fPP7d/3r8HV6\n8vf17/Pz+fr4+fny/3BwbXV1cG5sd29u//b7+vT79v3+e3X8/n758/H69/11\nc292amxyb3h6d3z+cmt5d3N9/3h0dv3//PH1/vf5cn15bWZmcmpve/18dv37\nfP3u8urq9v9ybmZrd3Zx/e7z7fL/d3l6dHV1c3Z4+fl++3xzc3d0a21uamlv\ndXb9+vz8/n56/f17/PTx9PDu8vjv9Pr6dXv8efp2bHVpb3h5fHF9e25vb2ts\ncWtodXV6+PT1+fr3/fvy/nl+e25qb/x6ev59+fL9ffx+dv7x/Xp++v79+/ty\nZ25tam1obHv28/j18e/y9f99bmtucXNvffr3+nz/c21pa2xqeHx1c37+9vP1\n93328vrt9nx6fH5ze/dxcP90b255b2/2+vj88Ph6/nd3evZ5dfjw9P7x8Xh7\nfnNiX2JkYl9ka3R+/f738fTx7vX++357ef/7eHb7+3z27nxx/P3//Hpufvpu\nc3j2cmh1dPj1/PD1++78eHZudHZwe/39enl2bHFzfH355+n6/ndoZFZFNz7C\nZtbHaW7AvcXM0cZbZk09WUJNQtxd6tbc59hezW5gxNRPyunfzVnLbGHgVUti\nSkntUlvv+1vm72vk7nRnX9zdZGreT/PIWEfYP0jr+VflyF3Qa8NPYLpU3dnX\nX2rIR3xa9U5rYmldT8tGZ9llYenUV97WWd9gYt9ffd/x8+Ts7eJXfmR1bV3H\nU2HN4mnNaVnaT91iyFTv1U/bTutNdlflbknPZfdmylrfzVj4afdL8Ghb3E/X\nTNRO3FL64UPdTOhmxtttwk/Hb/dX595Dykz2ZHXqZWlv2Ftu01TYU9JtVr5N\n7N3vU8xWXt8/uj3pw29e4NJHc1DiSk/WTla/TsZY4MlH29NCVLY0zMg3ymju\nVdNDwUpkvkltzdVBxeLvT/HHQ0W7REy5TUjEeT/KT8ZSRrI8Trw5TawxxuI8\nvD7f/+g/uHVMxHdwTsZX315Kvj3GcmvaYdZKzfZZQM1xO9HEOWDAULztar5d\nTcVlPMs/0UdGxT/GTtbVP7ZCZ7A4XbpaOrtB6t01rDPX10/V78s7sznNyzK5\nRVLa20XZ2EHBRc/Y9MzqZ2vQOcpuNrjmPL1IZMw/7NHcT+nFSfnJTf/LS93/\nTtFL38xHx8g/xdM+13Nka05eVu3hTdvHPd3e5F9KsjtJsUo9tls6tEtLzU/u\nTdrjR9jTS8vp3lfFTfXdQclPV1HM60LAT+dLzHQ8t1hU2l9i12FIz29o017R\nTlzMVmXezUve3Ey9TV/KW1rPaUHKStdYTbYyyL02xm5Kxk5BxT//vTvR21/C\nXvjBS8zAO+TYSf9XX2hNztM/yehMxFFZ3t5XzV1QyVTZWWzvSNlSXWBv+EDM\nU0zRbPdqy2L7xGje2NBrysxWytjm/M/rWMhrb8tW6uJi7E5OSUE7QzM5OjA+\nNTlCP198y7+2uKysraasrKuxtbvC0speVUZLPC9HLydDKiA7Ih8uICgvM0tf\nva+tpZ+jnp+koKeurLfR2lc6OTg5OTpTMjbPNS+8KSfBHyM5HScrLDk+v7u1\noKOnm6Gknqurqr/PyVU6Szo2RD9CUkQ2z0spuTQhwSQdQR4fMyk2Wsi7r6Kj\no5yjqJ+tsKvJ1cpOO0Q4MDw5PFJaN/6/Ldu3H1LbGTgyGzUvLFbZv7Wopaif\no66jq72uvFHS/zE/Pyo5PS9T8j9Isss1pU8lpS0fuCMgWywuVcvrxKe3u6C9\nx6LZz6tWTblIOMc6Mso/SLbXW7yrQc2mI1OuGTPaFipFHi/uQ0iwre+npFym\npEyqqj62sjbOvTBayDPdukpUt7gurswdrTgYwicXYikgXlVDxKu7uaG3waC+\n0aPLYqp2RLhFNco9ObtcQ8+vR1KkJj2rGTC/FCvqGzbKNXKuvL+orcusq26t\nrU+0tEDFvTDeyy7DxDvftcc3qVshqSsash8XvSIevD40rLfhpK7GqazLs6xo\nv7FI6705Q8AvSbU8TrW5O7WtH7rFFspIEedDGNTNKrmnUq+hY7WlW8moVXKr\nTEmvQjm0PDawTzi3sjnKpSVTqxg4thIvvBg9ti3uo9LInc3UodhPp9c/q9k4\ns+svvm0rvtItz605WKAtN6QeKqoZIq8cK64yRqW9ep+2TaO9PqvAObHCNbvG\nL9DNK83DLmKtPUafMjWjJCisHR+yHyiwOECntuajrVOotjuuvja3vza9xTLd\n2S5hzy4/rz89nzk5oSYsrB4ityEquTpPrLW9p67LrblHusE5vMwzvs81zG4y\n39sxSrJAS6I3P6UlM7IcKsAeOL8wy6vAs6a5vq3LVLzlOMLcMr7NMr7fMLzN\nL8mwONCmMWOsJDXAGynnHTbKMMurxK+ivbmo1vq0XUG7dTu9zjnBzzXBzS3d\nsSvUqSbbsB5Ayhgz/xxNyS+6qcWrocGyqNrZs29Iu29BvNM/xto10tUrb7Up\n2awl6bMePdMaMW0eR8M4vKW6rKC3sKnD1LrIUMfESNbDPFHXL0rfKT65LEms\nK02vJjbJHiz/JTrLTL+sr6uoqqy1rr3Ws91PvVU9yD8xaDQxajEwxD84sU05\ntj4u8i4nSTEx8d7LtKurq6iptK6v1bm9Q8/hM0xGKzg2LEE/M1XNUOC0X166\nPjhvLi1KNjn3z8K5q66xqLG6rsLNvFxR6T5APi01OSw5T0JU3sPCvbXExL9X\nUU00NTo4OUhQcL7Kv669wq/EzLjZ9tZTQ0U+NDU9PztG/Ne/w7qwwri0z8nL\nUVlFNjY3NDQ8Oj9kSHjH7M69x8fBxcvd6ehdRkhfTkbkw+PCssS4sMS5vdLL\n0+5iSExANzAyNiosODAwPk9IWtbByMq+vL7Iwr3BzLzGx7bByrTL2r7PXtJ+\nXl35TmlLPU07PDw8Nzk3Oj1LP0pWW03b61zN0N/BxMq3vLyzxru2y8bD09r1\n11xP901DT0M/Sko+SEJDSkpOb0he1u5Oa9lTctvu3N3mx9PPzMrGzc7O383S\n8c7Yb+JfW1xPSkpDR0lJR1FZWFr8Wlzjb13baeLZ483P2szU087f0NHV3NvW\n3fh722tfXVxYTEpXS0dOTEtSTk5eVVBPbWJv5dzJz9bCzMzF0s7LzunR0P38\n7utaVVxdYltPaWJMW1FRVUlNW05LXVpQX2Ns3d/PzcvGysrK083h3s5z79ny\nee9nZH1YYmtZVWdSWlZOUktQTUdXT19qbtzVz8/LzM/LzdLN3Hbhdmr/W2Nc\nUlZiYVb4/3fr9dnsaGtlZ09KTk5NVV1dcXbf2c/W0srPyc/Wzt3c2fJheWpP\nVVJLVFNfb1/s5HnzdHFZV1lQT1JOWvNl9Nzd6M/Q0M3m1M/e1dbq8Od7ZvlY\nV/pdW2taa+x0/ehvb2lbUk5ZVlpdXGLrb/Lebu3e4/za3uXb4eHk5u/jeO3l\n8vn0/XTvcmtyZV5YYl9TW19TY2tkffDt73lr7/Lz7vbqbXt+9fFofu3scfrc\n4OTo297t+n3tZV1xW2lkV259cPn2b354eejuav99b29kWm77aO/77/z83Oji\n4Ort7Wd6bVRqXVFXYFtaYnj54u/n0drg39/q4/Tn+Gdnbvtca2ZbbPlh69ny\n/N7zbn5hZV1PUlheb2Vv4d7h39fq99/Z6fvue/v9cXNvYXJfYWtu+t/i8+Dk\n72P0alpXXk9PU1xla3Tv4+vW2tLU297dbWv3bP1gWlhZU+Xq+e7n5N/k++po\n8WZjXF9bWWJXXmts7+fn19vX0N3h5+3zYV1nWVRmbGpcV2bia2/r4+x+99/f\n+e/r/Vlje3ljamV05Oj12Nr1bW/u62NeeW1kZGR+eW947u9eau7pbXNq/HVo\nZmh7+fV0cnH88t733N509OPk9m5wbV9pXFlva25uYm3v6N7hbPzi5/VpXmvz\ndP9leGj7fO9sZ/5vbXfubfZramzreOX18HBabN/v6et46N/d3/Zm7GJeXG5+\nalxfX3fmdezh5evg9ndjdftzW2JpYWtbbm/78O7v49/d5OzoeWT7aGhfX1ds\nYFvsaeR72e3Q6NTd4fx0e2VpTelRfllha2PuaNtj6WtbYk1ZU1pUWF9g3tnP\nzczHzMnO1Nnq7XJ3YF5YVVlRWlxbW2hncX3s7fflfPFr6/l3dG508fV67nN+\neHNxdHB+8Xf893f7ev1wenl6+e/v+X36dWtoX2dgZ2h69XXx/Pd+/v3z9Xp6\n+vF2d/Tufe7+cGtsaWR0Z3h9d///6nZxfn55//l3+37y9uz3ePnq3/Z6+PRx\nZ3B7dX347fL8e25yZ2FdX2JkbHXx+enr6eTi4PDzenZpZmNkZ2Rxa37+dnhz\neHf/+Xr+cW1sb2ttd+7q6N7m4ebm/m3+bGVoa2xnbm9ibGtobXv6bfTq59/d\n3OLn5up6bGdfXVtbXl9nePb7fe/z7fV8+XJ2+vT5+ffu7fT/e3d3bm9ubHBr\namtsafj+ffl5bnv/b3Vycnn07eb16+n5/nRvam1rZWR3eHju6+3x5+zz8n79\n/Pn1/33zdnZ5dmVpcmprbG9oanhvbnNpd/D9+np2dXJ+e3J2+vTu+Pfu9PPy\n8X36b2NiX2Rmcnzz7+Tg5OHl7H7//XZ+eXVxcmtnaGJkZXVxZnf3/33/fXj7\n9Xt8+Pl8+vt8fX34dnb3eG91efz69/f7+/xzc3dtaXz58fP07vn69n1vb2tk\nYWhjaW9yeHL/7+37+fv17vp3cf/5+fJ8cmz//G5yfP756vF8dWtqdXpxePPt\n7Onx8/T8+mxodGhlZGdnaHx1dHNyevLp9333+e/o7e/4/3x7dXZ2b3N2bmRk\naGJnaW1zenfy7vvv9PP1+H3y7Pb6/f77fHxva2t9e3j7dHFteHd88/Pp6+7z\n9Ozz9PZ+cWplZGNfZmpse2519Pj3dW1udXh6d/78ffDz8fD08vn49X1vaW5v\nbm9sbG96eXf4//32/fd4bGlnbXR3cnL7eW3+8XdVVHB39d7SzMvJxcXHx8vV\n7VpRTUhGREVCQklMSUhKQj5APkNOW9nIwLu4t7a2uLm8v768t7OwrrC7NhAW\nzRcTHBW2pre2pJGYn8A1XD4hFhk9utu7qp2YrcZRPUIiIi79vcito52hq6q0\nvkwcCRBeGxgtKpuRq7ilnK7jIxYrPCAn8KaYnaiinr0hGx0fJR8trqCho6Oe\nnrTVub1lUc7EIQwtuRQzHhmXqji5qZ2jvSIhuSwXKTGpmtutl57BNSAaSCca\nzMCrna6hl6a7q8NPUi5mqK82DRmeFBIpEp2fGa+an6vuOya6JRSqtbKYsqGV\nsSwu/h0YHR6rqziknKSlWzm1visrzrCopaSk5A0MrRwOMBicjUG4nqWwSBkY\ntD4ipqacmERHp9YdHikpTzEkqqK4q9yuoD00xbqrzSlTp6+0qayuOgsQoxgP\nMxqbmR26l5+rXCxWqCwbrcDJpyrTmk0q3U5C7yIcvt0yrbWqnKyxrcsqJC02\nR7afnJyns+ASCS8dDTcdqo64nJmoqs8uHSglIsNWy57EvaG4TTQ6KyEuK0u+\n26+dnKejrmEzHB4tK+2ppJqfqqq2x+MUBSdYDz8oR4usvZyouL8oFzQnFzve\nu5iospeuPkIsKjguL6icpZ/MKq5AFiUiMv4q2p2enZ2kotguVrK2LwoOnx4S\nchmTkyirqavHJhUkziAxn6CZmlm4qjgiHUvAw7m/mqdJUCcuHhcvbqe1s6Ks\nqL3msqnlNdK9qbdPFArCLg3MLbSSK02qXC3MdyylUEKawEivPSXMPTGjnKym\nrjG+NRhKOzXPP/aorT5EMS9KObmbmZ+sudZGRUVBLA0aqB01OR2byiu3t7yl\nuSrgKx80OESnnKqVnLutRCsfIyg0v7WZmKixRygZFBwlLtGvqZmYnqCw2Dwz\nMCy6xiMTJbYZJCYmnN82oKm2ps0sOSgfNte6m5mjmqKu4CEmJiUlPbanmKW9\nUiEbHCMjP7Ovnp+foaqtSUQ0Lz9Fr9ogIDwiGxwa167rtaepoK42RDo2Vzm8\nnae4qKiuyS9dtDMjKDLAvTZL2HHGOzq7ulhOx8eys7anrMRP9NUqGx8jJi4g\nLcC2wV/0v6/6SL3E3GFa3sHHw6aouq23vLQ8LC8oMEE+v662t/1m7D4+Qz9P\n2vaxprGts8tcNSsmJSAiKi5JfU9YT1nKyb65u7C1zs3I1VU/+7Gxtayur79K\nVEAzM0FJYbnMwLtTcUg6Qkpk1sjBtsNTPjgoJzcrOkVCxVpHTToyMjxdu7mr\noautuXlkVjs30ry1ra+qp7FsStxBMzk34MX61uz9VkdEPFk+MEU9Qmc+PDw+\nPS40XF9LWurHyk99ub3iz7mttWO+t764Xdy9yL3IuK+1yebASk4/KmdEJk9N\nOWsuM79ENHdOUs82P75bSGtO41c5bN9KasvSwMvqs8RYyt5du+tYrrzCpthm\nrUBxui3csSzQti/TTh/LPSTyOUfBM1SyS1nXO8fcRmO6Xka7QkS9Qua+S7tl\nSrxjT+8+VrnQT62ywatPVbExOcAzuLQvuMVHZ0c6MFcvL7hGVbhYQLc3Q8sw\nxtRBxM/4yDVOvSrD1jyocFCl1Ui/PVnEOl/E08i/zcfDTMU0P7c0vL42sucq\ntVApqywzty/a6k/SzUbOXjavQzarPUyrLfWuJ7zYKK7HMrG7ZbhZU9tjOsXd\nUqxRyLE7xW4txk8vsD81pynavC7OQUVPWkPOz0G+Ssplbs1eunVcvM48vUg7\ntS3juDKyvy+wtSazyyu9Vz2zWsu5YrxEa9Yuz084ukNWxUFVxkNKREfQSEnM\n0tq9P9C7P9TgRcLRQ73p0VBQyD3NXEmySdWuPrzBNcJRROdTfT+7zS64RDW6\nLzOtQS6sSUKvNvu4MM/RYM7Pyb1PznzoV0F8af5eRqs8RKwoy7shr8Yqpto2\nqVc8uXc11cM/ZbkvvL4ptlk1vD9JuTrT2UXCSk7BQEOxMlStLr+6La/NMrPZ\nOKpMPKY1Xa4yUb8xxfE5vftfzkDYZUltRHppPN/YOLZEO68vXa4tyqsvy6wu\nybEtyLs0v9E6rvc+s1tbyVU4vFExrkUwsEw1tUIyrU4zs+o5tkw2r01KvVte\nvEDxtzfY1TXETDm7TWK8O9DMP11fZ1ntxl3PvF5XrTs+rC5IrTNGpytWqiRt\nrix0sS3Dty7GvDhYyz5Mvm5OxcFKfro6Rq81NqpCOatON6toMb3LMsTEMcS7\nNde3PtjvPvBTTF9oecRN289O0l9L1HFD1tNHvG5DvNpEXe1ZZfp3+s9SQr/t\nPMJnZL5ZSbVaVb89XsFPUc9T4L5AZs5jX01rW2LNPNTXPs9HQbpfN7r+PLBe\nLa/KMrnPP7TNLra4LMS5Kr23Js2pL0GmMDilOy6sRi6z1y27xTG8yDfk3FjY\n5k9O37hCR7dJYbpCScP57dlZbHRJ1l0+xc9KvNFExsE6UfZtUk9tXsHNUNbT\n/99QP95jVtZL5M9MX2tW/HbtePTLZ3vTUdPhT2P+2F537X7T2UtPbPnfbF1t\nz81lXdtc3slVT2R08PJUYsfmfHRK4HxGbelj2c/aWOLXRlpzQOnVTGjF6vHB\nVGDIZmdlXm1661VN111+0lB02NnZ5evn13x3XFrr3+jp4l3fyVpKa0lV3kpL\nW1HsbklKSl1kVFhR6Mvp5ltk0P3R0ey/vs3Ax9u/xNjK2dfGy9bQ2c/S5mdQ\nQSsnKigsLCcrOUnGvb6vqqSkq7i+xONuPi4uNz9KUlXSvr22tsK+vsTH3lxW\n6NDd087Oxr3DyP4sJiomKiwfHis26Le7sKehoKWuy05CPDgxLDJFac3Fy7+2\nt7O0w8jO3dPSdnfp17/AzMm/v7/IWTQnIx8iJiAhJi1JvK2opaWkpau1ykM0\nMy0vOTxNw7m1rbC5ucnt31dBSExjzsnIysrO183Pxb2/xl81LSYhJicjJCgt\nW7Konp6ipq21yU80JyEhJi9KyLmyraqpqq660nZJQExIS1ZWfdzPzsrDwb28\nuLa8zkkwJB8eHh8gISc8yKebmpuep6/ESy8kHh0fKj3LrKShoKOorrnRSTgw\nLS85QFbh79zPzLy1sK2tr6+4zk8tHxoWFxsfKDRctaObmJmdp7lJLCQgHyEo\nLkDCqZ2am5+pt91KPjAqJyQoMkTQvrq5ubOvq6iqrrbA3EkyJRwXFRYbJDTX\nr6WfnZudo63OOigfHyQsOV3MuKujn56gqrtbMiwqKywuMzlTx7mtq66vsrSx\nsra+0Vw7LSMcGBgZHik60rWrpqGenqOrwkAtIyEkKTJKzriqop6dnqWvzjwu\nKSYnKy43TNi9sq6trKyvsbfBzvhPPzEnHhkYGh8pNV7Iua2mn52eo6/TOSci\nIiYvQOO4q6OenZ6irMBLLiYjIiYsOFTNvbm2srKxtLi6wcfN3GtCMygeGxka\nHyc4W8m0rKaenJ2grM42JiAgJi5EyK+ln52doKeyzz8sJSEhJi05TN3Evbm0\nsK+urrK4xNn6TDouIhsYFxogLUXNtKuln5ycnaWx9C8iHh4lL066qZ+cnJ6k\nrb9WNSokISAlKzZOy7u0sLGvrq6vs7vL5VtFOi0jHRkYGyAtQtG2raehnp2e\npK/lNScgIicxUb2rop2dn6avx0g0KiUjIiUqMUjfvbayrq2srK+zusXP6VpC\nMygfGxkZHSUwSsq0qqKenJ2hqrtPMSkmJiw577aooZ+gp6/BWzsuKSgnJysu\nOErnv7aurKurrK6yusPVZkc1KiAbGRgbICo92bSpop6cnaCnsctDLyooKjBC\nz7Soo6Omrr15PzYuLC0sLC4wO07Wu7Csq6qrrbG5v83wVEAyKiAcGxodIiw8\n4LerpKCfoKKorrvdSzkxLzI8Vcq4sK2vtb3PXkg/Ozk0MC4uMDhL3LuvrKmp\nq62zvMjoU0E0LCUfHRwdHygxT8CvqKSgoKGjp6250kk2Li0vNkbowrWvr7K6\nxuZSQTs0LywqLDE+fL2uqKWlqKyyvM9iRzszLikkHx0dHiQsOvK9rqmjn56e\noKWsuehAMi0rLDA8XMe2r66xusnpTkI2MCwqKy47VcGxq6empquvvMxtSD42\nMiwoJB8fHiEoMEXYt6ymoJ6en6KpssdVOS0qKCw1Ss+4rq2vtsDZVkc5Mi4s\nLC43Rdi6raimpqquucd4TD87NTAsJyMgHyAkKTROxbCpo6Cen6CkqrXVRS8r\nKCovPu7Ct7O0usLWZUtAPDYzMTM5R+nEtK2rqquutL3O/0w/Ny8qJR8eHR4h\nKDZWvK6moJ6dnZ6jqrnePS0pJysvPmDJvLm5vcPO1X1kTUE6NTY4QVbUvrWv\nrKusr7W+1FM7LiYeHBobHSArOuO5q6OenJycn6OsvF01KiUmKC87X82+ubm5\nvLzAws94SDoyLjE3RXHIua+rqaiqrrnPSzElHRkXGBsgKj3Yt6minpycnZ+l\nrsBONSklJCctOVfNvbm2trS1tLi+z1g9Mi4uMzlJ7se2rqqoqq650kUuIhsX\nFhgdJTJguqugnZubnJ+mrsVONCslJCUqMD9px7mzrq2rrK6zv9tGOC8uLjQ8\nS+bBta6srrbCbz4uJR4bGhodJTBVvKmgnJqanJ+nssxEMSklJCYpLjhO0rmt\np6Okpqu0yWQ/NjAvMTU7SnbHurW1u8lqQDEpIx8eHyEoL0LWt6qjn56dn6Or\ntc1MNy0oJiYoLDRF07aqo6CgpKu3ylhBNzIvLzI5RHfIu7q7xuhJNy0mIh8h\nIyoyR9S6rqqmpaWnqKuvuMX8RTcvLCkrLjVK07WrpqSmq7G+1VxJPjk1MzY6\nRmbMvr3A0V9BNC0oJiUmKC0zPmHLt66qqaiqrK6yuL3M7k4/ODU0Nj1M3b+2\nsK6vtLvK3GRUTEZAPz9BSV7cyMfJ3VVDNy8sKyorLC4xND1I68GzrKinp6qt\nsbi/y91dSz88PUJS68zDvLy/xMnN0+tmT0tJRUZKXHHV0c7hZEw/OTMyLzAv\nMC8vLzE5Sde8r6qop6irrrG3vtFsSkA+PkVa3Ma/vb/CxsvN0+RpTEI7OTk+\nSmHczNPbc05EPjs6OTY0MC8vMTdAXtK9ta+ura2ur7S6xNxbTEtMU3PYy8K/\nvb29v8XM62xNRj08Nzg4PEFW8tva3XxdTkVCPTo3NDAxMjg/W9K/t7OxsLCx\ntrvDz+hqYmXy2s/LyMO+vLu7vsnVe1hHQT05ODU1ODxDUlz4efl0ZmJYUkpA\nOjUzNDpAVOfKwLq2s7O1ub3H1Nne3dnR0c7OyMS/v8HBy83Y7WNTRD06NjY2\nPD9JT1hWWlhfXVhWTkpDPjw9P0ZMXO7Vx7+7uLi6v8TLy83LzMvNzczJyMbI\nxszP093b6HlPRzw4Nzc6PUJIS1BYYGz3+G9sWE9KREA+QENJUmbk08vGwb++\nvr+/wsTKy9TPzMjJyMbHzc/W29zk8WlUSD47OTo9QEVKTk9QVltfanhubGdd\nUElHREdJTVVdcunVzsXBvbu8vsDDysvNzs/NzcrKzs/Z3u/yaFdOSEE+PT4+\nQ0ZITFFaWmZk+Hzp8u11aVpWU1BSW11javv23dLNzMjGx8vO0tjZ29jX1dXS\nz9DP0tLd+2RYTEtJREJGSEhKS0tOVldgdujj5Of/a2djX15jZGJj9Pfk3NPP\nzczRz9vp5+Xc393c3drd4t3h2tnd6G5aUlFNTUpKTk9TVFVbXW119Ozr7P/3\ncW1vfm5taWdqa3D19+jl39zc5d7e4ejn4N/a29rc3trc5eb1cW9lXldXVVRO\nUU9PU1VZaWZz7/b5eXdxdPrv6ux59frv7uju6vv17//x6ebf3+zu9Hpx/X7/\n+e3l5+Hk6/xrZl5fXVtcW1hYW2Jmce7r7+v3e2hrZm5ve/fu7ez69e/t6+zu\n7Ort6eno6uzp9HdoZWBfX2zx8PLn9HxscWlnZWRjXlxaXWNubfDo4+fy+n10\ncXRucXzv7+3u3+nn6ubp/Ovt+HT++2toamdsX1teY3V29fPn7/LufnF+em9p\nZ2dmZGtseHvu9uz5fX766/n57+708ml59vn68vLt8v7w8O3pfv1uam5kZWBk\nX2VlbWt5+Pby8ezy735jZGdlaX5y7+3t/HF5eHX28/vs9urt7/F4fvjqc/3+\n83h7+2xxc29haWppbm5qdG57bXt2bWn++vjw93JmaXNtZGx1/uv07ODd2913\n6fX5cHlnafH2ee7x9XR29m/57vTvanZnYV5uaF5+fmFi/nL/anhqeWxsYX1s\nauZ5fmVs9OXp5NX03vjg8Oh392Fpenh4/O7hbHPxcP/sXG1pc/Lz6Nvp7mNb\nW1FPT1hsaGD88N3d5t7v6e/+dnF8dHVhfGf96+zm5ebw+3j29/X7dXL8a3d8\nfvVx6vPt597cz9vx+nvj71xWT0RDPDo8PEJJUWnZ1cbCv7u9wsXNzvdSTklH\nUE5u2c/IwcC6u727vb6/y9bfZC8nKScuKSUwS3TG67+usLTFaclvSD88XNJ7\n2Ma5tL3OytTfXEZGSklZW+bQ19DLy8XIyby4s7W80TMqLikrJSM2TU/fZ72s\ns7vM9sxePj5F+eZd3Ly7vtHszuFeWXHJvsfLy8zcSD4/QUM/SOjGvLaxsLW4\nvMJPIyApJiojKs28vbjIrqrB00xHej8+WGvFy+bCv+TrWFjaWPjBvLW6ycfk\nQzo0OkM6P1fhxcfDub7QVEhOSz4/T/jab+/GwMltUmBeTlLXvGYsP11UTjBC\nwsXfXeq5uMbe27/NWVVczW8/VtPI2GvqyNdRTW7Kzf907NpjP0hfY1hIWdtq\nTktVZkxCTmXk72vPy9tnUnHZ3+jKu7a6yNDUZz46PkVTb+jJw8/jY1NOQkJP\nXt3Ryb/G3P9nXlhMT1tWUU1TePps797c6VdOYldQS1Te4vnm4dXU6evb49bS\n2MvLz8zNzNF4YWNkeE9HTElHQUNXc2t89vXuX3ze9O599dXT4fHo3fpTT1lt\ndmnu2c/V7X5ueXZeYXd86+Hc2eHm525cV1doa3Lo5dvZ919TT1FNTlxu+np2\n5tnkdHF05OZr9+/vb1pZa/x37+Td4+/r6PF+9Ol2aNDNz9Hw9PJo9NtbR05S\nVlJGT+9gXfZf799p5+du/W182uDq3+Tk719v7P17dn7uc/7T1N3f6ez7XVpc\nWV1SVGx+ePXj19ri7GxpcHJnXmFhbPtrX2tseO5+9/T68Hx5+PXx7uzm7XRl\nX2d1bHvl5d/f9/tz9vFfbO98b1xYbGxudWvu5PDvdWpeW2NiY3zq6Ofk5+vq\nfHL79Of19vB5/P/0fmttY2lybfvq5/tmbXxy/3306X5oZlxia2D94Orj3+Hl\n/WNeX15dY+/j8/f3e/xzbX7v/2ltfvP2du7vbGxoZXFtZXf87uny6ezs4/Hv\n7f1rXltbV1trbPbo7/Ht7u/q7ubpfXFnW1hZXm3z5+nm3OLn4uDj7O3yc2pm\nXl1eX2hzc/Lq6uf/Z21sbGxnYm1+dG1t7ujv9O3zcXBsdv52cm1na2tnZm3u\n7f967eDo8eLc3ev08fZsYmp2/2pl/ftlZWx29fNubnhua19ie3lzdG7t4PXy\n7O/seXN9a2luZ11haXHx7ujk7fH9YUpN7fvl3ePJzfXf4vbmcfDcdVxqd1pI\nUm1ibW5meGtY/fd55PP752tecmZjbWhv7+7o5+bm4OLo8fLi7/DzcX5sXmJv\nbG14+Ofo7+f5TkZeXVJta+PO6d/P3NvcfOXf8tnW1MzL0nM3OFE7P0FB1d1S\nzM3h0Hzs1k9Q3Hb74/fOzPDV1nbjZGHja+/X49voXF9aS05NSF5jWeTm5tPg\n6eNqfuV0+vjdzMzHvry9wds0LUg2MTo84s9L2MDZzeNo3lRCZW1e1tbKv9HM\nyfjhZVbp6/zPzc/RYFlVQkJHSlBRTvfg3s/PycvPxb/KzcfFyWguJUo/Lz5A\n0b1L47zx1dpvzV0+aX1MV2zvzNjYv9LOzeXN1uXN1erjR0VTRk77aefa5c3G\nx727w814Zd91Wz8sJjQzKzlA3sLiy7XBw8DW3ks8V2lcz8K+u7zHxd1lZk5+\n5151+F/pSUBuTkzj28W9w7q1urrIzb5WOzQ4TiAhZTcwRjzJxDfKul7W6/q/\nWkHGzlzIy7+12MC6z8TfU/RQQV1XXOhb39Vr7NnSyczJurm9vL281EpYNxwc\nLikrMTu8vk3Kvt7O8nvUR0nN3M+/yL+9w7e41MLBzc9PSN7VTlR41Mpoa8XR\nVF3+zcrQv7W4yXNaWjwjFyQ2JCo+0LrOar7Ebk7P0UlTXeS+zsauu8CztsG7\n1OrGXV/k28jOe+LTXVVpXGb4YuLEv7m3vMpkT0cnFBswJSU2YLKzVcWxeEzH\nZV5YRMS53Luvv766ub3AzMy/2uHK0ez4Z1vvVD5s4ElRYfbCvr6wr7/bcGs/\nIxIbPyQfOcq2t1DMtF1GydNU82jfv83Ks7i7s7C7urbIxsbc5HpV29lIUU4/\nYOdJUnRZ0r/Fta++0lRTWjgfEh9KIR9KwLe9RsWxY0u2xWXYVW/B2te1ubar\nrrqusdDJ0U5RSj/o9Elj2F5n6UpM81Xauby1scTlek86LxsRJj0dJ8zFvNNF\nu7D477PIWVBO3b/Wx66tr6uosrS52uBRPEZNTPzqTGdyRk9MO0Bh7c21r62v\nw93lVTk2LBcSMzIeOtzft99QsbdVvbJORFxkxLzJrqetq6euu7bNS1M+Nj9m\n19xOStBJLjpEQFFS0rCxr6y5ztZTSz0yMh0QKUoeLfnqs79Dta7c17xoTF3/\nwLa2rKaqra6uusVePf1TNDlazMlBNV1NKjBtb/Poyq6stre1w3NRTUM/PDMZ\nEDE6HC1bv6rLX62067+8ZdTOcbytr6qtsKuxw+3baU5AO01S/NdNNTM8NDJR\net3Ly7yus7yuuO/1eVFPRz07GA41Nho048Wn2kmps9S1uNPF11+7sbiurrKx\ntsRpzO9CT1hQSUdFPi8xQj5EauDWzMK4rq+ysbvxRGPeVk88Nx4OHzkeLlv5\nqLBKta22t8Rpvs1Ex6+zsrKwrbG/+8x1PE1LP0A7QU80Mk1LR3Tgz8bNvK2v\ntri+zn768lhZQDgfDRtEHyhP46apQ7qpvMu/2eFiPcitt7Wpq62yv2Hz9jxI\nS05VQDVCOzNIQkTSy97JvLeysbS1vcp4ZtlcTT48LA8QOCckSUutnvperbfA\nv1hJylhisq+tpq20rrPuSHRDQ0xIX0k1PDw0R0hF1snVxr29tLK6uLzF/WLd\nav0/Mi8TDy8sJUpVt5/HTrW5vL9YQMnT57SsramstbW05jpVRUhbPkHqZkE6\nNEdkPknLwsbDv7mwtLu+vcxP7t1bPjMtFREoJydPUr+iuOq4wry3ej/Lys20\ns7Cprb27t9dHS0hZXjs7e+RMPzRK5EFL3ci6vs+8r7a6v8bF71tWTz4uGg8g\nLh4sQrulrXS8sLvC3k7UwlDZs62qsrOssb1bTVdJRjxJYfRjTjs5Sz9D7tHO\nvsXCsrO4tL7Z0PBhSEE4Hg8cLyAuLtqirua9wLS3WVXcxNFh1K2nsLytqrLk\nS95ZTjU5XNbYWEE/Tjw5T9fS18i8trSzs7bPWd/fPTcuGBQsJiUuLLumxs+3\nwa+5VP/a3cTrX7Gor7SyrazbS11x5TsxPs7HYj0+flI1PtXSwtnLra62t7/D\n2EdOSzUcESUwJC8nSKW7TrzCrbFATMJratHnt6yxsqusrL/Ny1ldSjw5Veze\nWDs/ST8/TVbQxs69sa2tvc/N1k07OisXGzIjLS8uubNtvcK9qss/9+puzGDJ\nrbG2r62rsMzR1OhdOzNpze7sQT5JNDRET+fT2LuvsaywxM1uTEs9NCIXJzAm\nMyo4tMBfvMe0rv5L9Ovdydq7rLG0r7CuucfafeVVODp1ysxVO0E+MDREa8zL\nzbetrK+2vtZXQjg6MxwaLy0rLydEr8l2w8mtsEdN32nG5PGuq7Oxr6ytveVx\neHQ/N0fQvdk/PEU6LjFP0MPMzLOqrbq7wtJPNDc3JRkkMic3LSuyvk681bes\n/E7S/c7LdL+rr7eyraq01MjnVEo2S9Lb2UxCRDwyL0Ho5svKu6ytsLS+zWw9\nNTQnGyEvJy4vLM3HVsXVv6u/Y8fOzMh4zbSzubavrKy4wMdpSEtFRtvrTlk8\nO0MwNlpP583Qr6uys7zI2EQ3NCogIyonLDMtR85YzMfSr7TKvMrBvXrtwb3C\nv7evrK+0udnyzkpAaVZqXzc5STk6P0Da1/DCtLC2yM3KVj80LjQrKC8qMj8q\nPepK02pNsLPPtLu2qsPlucDHxPS+r7rCzNe+zkZV3dtcODhFPzc1PFPybWbM\nuLjDy8rL10s9UutQPDlASTkuLjk8MS0xRF5W6L+yrrO3srK6vLu2r7a+v8TF\n21F51uFXQEhqTD9NXWzsTVDS3GpuY+p6SEFJVU5EPj5BPDMtMzUwMDI+UWzL\nuq+qrK6sr7i/yLy4wMXEx8XkVOPT2/xRT3t0TE1ZeG5KQ1X8W1db7+dUSUpM\nSkQ6OD47NS0uNTIvMjxY2M27rqqrrKuttL7GwcDAwcG8vcvd2crK+k9OVlQ/\nOkNLRj89RFlPT2jk1N15a2JcY0k9QT87NC8vMzQzNUHr1cW4sa6usLG2wMPF\nx8C/v7m6wcbIxMTP/1tgWE1BP0lKQT0/REhGSWbq6vhrYVVOTT46PT43MzMz\nOTk6RWDZxrq0rq6wsbW9wcLHxb++vby+yc3Ly9DsXV1dT0pBRExDP0NER0lJ\nV2596+33a09MST07PDk2NDQ4PD1ATuLRv7m2r7Gzs7rBwMTKxsXBvsTJx8jH\nyNDcbV5dTkZDRUhAPj9ERkVOWm3v6tzffVhRS0E+PTo2NDQ2Ojw/Tu/Rwrq0\nsLKztrq9v8PCv76+v8PHys3P1uH/XFpcVEtIR0VAPT5EREdOVWjv5N3geVNL\nSkM/QD04OTo6PD5CT27dy723tbW1tri7vb7Aurm/v8DHztXs7/hYT05NTElC\nREhERERESU9QUmDr3uXe32ZPT05IRT87PD47OjxBTF770765t7e4tre7v7+/\nv7/CxsjK1ejm6XpaTU5UTUtKTU9LR0dMTUlKU3bk4OLc2/ZXT15aSkRAPT05\nNDg+RU9j2MK7u7m2tre6vr69vsHGyMrQ5nZ0cWRaUlNSTU1PVFlVTU9UUE9O\nWn7o5tva5u5uWWJjT0hDPTk5NjY7PkZW5MvAvbu2trm7vb6/wsTFxszW3Od+\nbWRcV1lSTU9RU1VWWVxaU1RYZHVvfubk6ujr8WxjV0xHQTs5ODY5PUFR9djI\nvry4uby9v8LGyMfFxs3Vz9Lf7PR1Z1hNT1pbUktQWVpTSlDa0ejRysvDy1tA\nQ049MC8vMj08NkvKwry3u7awu83c9HJTQEFW7dPRzb+4tru/wMXkXU4/Pj87\nPENGS1/lyLy6ubi4u8ZdOCwtLSYmKC1D9erIuK6rr7nJzs5UPzw+UWRv2sO4\ntbe7vr7CzNv2dG5aRj07PT08PD1Jad3Jv7qzsre+wsPRPyUiKSg0NitKt66s\nucq6sbdPMDI5XmE7Rdy5rbG/yby5xNlNSdTBynlLTW1qRTc0O0xZVFPev7q/\n3VdVUEc9OTxK+9LIvLWur9owMTE2bzkvTN23rb3azL++zlg5PGLcvsJf6si+\nvNM+MUFUYtpNT8W/vsFpR0xlVEtFOELjzcLNWlddUFBOPj9RY9zLz8/IxcLM\n+l9o7trR1NPMzdDU6FpMSEZJUVNaa23p3+VvW1dLSlZge9XPzsjN1dHfcldN\nUlFPTUxUfO7u4u7p3XxaWl5cXGXz0sfHzc/T2exnVlFh6tnPx8XM3F9OSUpH\nQT49R2bh1s7O2OlcTl31ev1+bd/Mzs7VbWhzZmRbT1Nh9t7X0NLa7WpdX1xS\nWlxl4djY1tXf6HhWUU1OW11l3NHU1/JfXGVeU05MW9nR2NzZ1NTedltbZV9c\nVFdz59bW6ubc3+f0X19mZG1v4NTZ5WxmaWFbUUtRZG/77uXe5ud9XFpcce31\n+fTk2drrfGlibWtcXW/x6ubh3dfY4fprcWpfWFZdaXVubG9vbnV++enc3Ojs\n6ObzY1VSXHb18vPs5uPm8G9vbF9lb2phbHf+5fR5/3B5/HhxaGt9+Plwde7j\n3+fv++nmfWtlY2drb3X97vT6eHRuXFxiZ3nu7+rq+fLx/Hd8fHB8eXJ9fvr7\naWFl/evw8H529ev6aWNdYHRtbnh3/vj18Ozn3+Hm7WtqZ2JmZWp3fffx+Xx9\n+fj09W9oce/k3+bv+Hj+dWFcVlhncnR08dzY2+Z5bGtlZl9dY2xzennz6OTu\nb29ta2lrfPjr7/Tt8/Hy8nx0fPjr8/r7fu72c3BkYGFiX19pcGx77fR1Z2Fy\n+Xh7+Pz05+To7O7t5+rz9/5tanZtX19qbXV2bHL/8enq6vT++/r5XVBXVfbW\n08fP4/NWVVtZ/et872dbamTp2vl6XE9SUlt92s7Lztnta19YUVZcX3fq497j\n39ve3+9lWFNUX2155uPr+GxfYWFnfnvyb2b7997e7t/1//RranD449vk+29j\ncW9reWptbmBbV1ln/Ore6OvoeP78+e3t/Hv9a33o8ePn9nhjXl1aXWVp+/54\n+m9vcHDz7+bs6ebo3ujxd2ljXl5fb/rs4OLobWRoZ3Bt+O38enFxbXJ0/fF3\ncWReYmr76d/k7HVqamf46evk7f19ZGr88ejv+3xuZF9dX2137eXq8e3j5N/X\n1NfqZVE/PT08UlzWwMm/zebdXWBnU1tYUmVq38zMytTpZU9QTl1y79fZzc7P\nzNHN1u5cTU5X6cm7uLzmOSofICczy7asrLnBflN+d93gTUM6O1zKsaussc5F\nMCsvOWfHuri/yXFdV1RrXFlNQkZKace5sbC3weNQTE7wys13NygfHiU0yayn\nprDKVDs8Rlbe+VpRSum/squss85DMi0zQti7uLvVU0M+R1vYzttvST9BT9W7\nsa+0vdJSUF3q2E40JR0cITLFqKChqr5RNjQ7SXL0ZGL2x7Orp6q2bTAmIyo9\nxa2qrLxbOjE2RHjKyuJVSE/au66rr7z9PTU3Sd3XUi4fGxskQbGfnqKu3zox\nNk3PwcPWb27Otauoq7tMLCMjLEu5q6u2fDguLjzwvba+2U9ATcyzqqmwxUQw\nLzjdurvkLRwVFR88rpubn65RMS423ry4wFs/RM6uoZ6lskMkHR0oVrCjpbRn\nLigtPMizsbt4PTZA0q+mp63ERjAsNFS/udoxHBQVHTyqm5mfsVArLD7LrKu2\n2To0SL+nn6SwTScdHSpgraKmtkoqJSs/vayttW86MznYsqinr8REMS03Xr60\nvkcjGBIXJnShmZykvzcuNWmwq6/APjE3XK+ioKe/NSMdIjfIqqaw2DQpLD3M\nr6233DkyOWS0qqesvGk4LzNF2b6+3TQeGBUcNsefnaWrWjk9RLysr7TsOjpB\nwqqkprRTKyMkL9i0qq/dPCgpN/Kwq66+Tzk4SMuxrK242kU2N0BtzcjKSygc\nFxclSbadoKiuSEdddLCtu8U9MD5fsKOiqcE3JCIlOr6yqrlQOCoxTMOvr7x5\nQzpIybSqq7XIRjUyOVTPy9NCJBoWGCfpqpyfrsM8M1vIrae1zT4uPNGsn6Gr\nzSwfHiZBtaiptUsvKS1KxLGwvfhBRGG8q6mrt+ZAMC85T9PE0U0mGBYVIuiy\nm56vtzs037+qpbh0Nys6waidnarHLx0eJTi2rq27PzMvOtK2tLrtOTs+frKs\nqq2850Y6O0lb491fOh4WFBYuv6OXoK/WKy5iuaWitPo3LEW4pZ2gr18oHSAq\nV7Ctrss+My4+1bq4x1g+Q16/r6yut8hRPzw+VtjU4Gw1HRQUFiy0o5ifvGkr\nLtitoqGxRS8sPLCgnqC0QikfJDZ1ubXETjk0PNa4r7boPS80WLytqK24ykw+\nQUrlzNb6Sy0YEhQZQaidmKTOPykuzKmlqL42MT7OpJ2iq+EsJSYtWr66vdlB\nOzxB3sDD10s4OlXFr6qrtMD0R0RBT+vW3WtVOSAUFRkorKGen9I+NTTRqaWu\nvjssRMeqnaCtxzMnKi9Oy7/NYkk3PE31vrnGWj83PdK4ramyvdBPS09X6M3Z\nWUo/JhUTFh2/np2dtjUvNnWqn6nAQSw5u6Wdnq5aLCMmOcy+uMJEPzo5TODE\nxctLNjxFy6+srLXEfl5eTW/qef1fR0JDJBQVGSSunqCm1jE0Z7GloK9IMy9J\nr6Cepbs8KSowUb3By145NTZP27+4zmM7NUT1t62sscJ9Tlj+3tfiaVBHPkRC\nJBMUGyqnmqCsXC4yyqmlpLo2LjjLqZ6fr1gtJCo9x7S7wlQ5Ojc7UsS/vL8/\nPU//t62vvtlXSXbX83r5VVBXREpGHg8VHz2fm6nbOz1gqp+ouUIrLfiooaGo\n1TAtMjpevMhU6Uw9TkhBVMbGxM0/Re/Cs7S51Gbb0cjRV09XW19ZTEstFA8b\nK7GbocMyNWm3n5+zRS0uQK2eoaq7QiwyT09oxGVK1991UD41OHfEv9Fc6s+6\ntL3L9tzMyMpZSU1b4XROSjYaDhUnzp2dtDQr+a+fnq1NJitJtZ+eqL5fQDdL\na0A/TU3rw8ZcOzo7TNDJ7EluwLi0u8v/48S+xvFUSUx99V1JOyQQDx9PpJyq\nSCY6r6GeqNorJUS3pJ6nt/BWTkNMPjM+Vcy8vuwyLztOz83XTku/s7S+0ur/\nxrm+1GxYUmZwU0M/MRgOFjGunaXMKiu7n56nxjUmM7imoqmzw+ndb0I4LTVe\nzLi50zsuNkLbxNRxSee3r7fZ8/bcu7jIW0hPXebuTz42IA8QJr2epLw2JWSi\nnabGPS0xxqimr728u8TOSzMrLma9uLvWPzA+bGj2VU1Oarqxtsjx0N3PvcHY\nVVdcT1hVSEIzGg4XO6aeslQsMa6cn7s5Lzd6raWrxciwsMJLMSwsRbiywGpH\nOjZVz9dSQVJb2LawuNrhzNvOwb/eTFFVTVNTTT0gEBEmtJ6tUzU2uJ6fszcs\nPNawq66917WpsGMuKy48xLG670lGRVn7WUg9RFrdvri1wPvk1Mm+u8RUQ09c\nWVRSSCoTDx7Jn6pGMze9n52sPSo9z7m2uLrDsKar3C4qMj/kwL/cVG/k6FdC\nQD5ASVrKurG0zGhtzbq4wlo9SG9mTEZLPh8QFTGqo+AxNN6lnqTPLDHetrbC\nvru0qKe5OCguQXLVzMxuXuXbXz09TE9IS9O5tLTDX0/ru7a/3EU+TlxPSU5a\nMxgPHOKirjcuSK6foa9DLke+ssDfwrWqpq52LCk6as/j6OVt2dZWOzhS3nVM\nTcm0sb9NQ/i5sL3gSUJZeVA/PmHZLxUPIbagxCouyKCcpsEzMOW0tmpNxq6l\np7s7KC9XzM1pYO7e0N9dPzpKed5sasq/v+hIXcq4tcDeQzxLVUtBTtrgLRUS\nJbGj6Co2tZ2ere4yO825wUtOvKmiq9kwKTzVyN5NWtvLyW1FOj5m1tJ2Y8/G\nzVtI6sC2uMdsPj1OVUtGZcTNLhUSKLGnRSM1rJmdtEkyU7u73z1KtaSgrkYs\nLve9zFE8WcnCx1Q+Oz907Phtbc3L3VVJ3b63t8P4PjdDU15c9MLGOxoRH82r\nYiQwrZibujw5yK6/RTNDtKSjsj8sNsm25Dw4Wr6+zkc0NkjOx9l06cXIZkZG\n2bu2t8VrPzlJbfhnaszMORoTIMesSyAvqJedzDNFsKvjLy5lqqKqxzk2brq/\nPzFAxrjWRz9L5PFPTf7Cv85TQ1nMvcPQx8DRRDM7cNL1TWHQPh0WItC1Nh83\no5eg9jvGp61BJy/JqKq87Ezjv73mODv1v8pCPVvLzEY6V7621UE9WMW/zvjf\nvrvaOzVbwMtIOFPIQh0XJcq9LR8+opmmWUmzpLA5KDe9qrTzWue9vdJcS9nC\nz047WM7fRzZIxbnKQT5fycHe99zKv9ZVR1LN0VE8Pd7XLRocQbhDHiO3m57F\nP76jp+QqLeawtF9ava+1bEr+xsBaPD5vvdU/N0HIvdRHPuXEz/7tvr3XWVPd\n1nFjVE9JR1c8Ih0s32kmHkWmorhUu6KkvD482sLOUlK8sbtpSsq4v084StXI\n7T09SGbYdm1z7tR0cMm6unNEYcnDYkRj3P0/NjMkIC5HRCgkWK6uw9OroavJ\nTdK7z0s7Xra0xlhzubbRQz/s0/ZhV3BSQUhQfO9fbF5rybmzwGNV787XWUtT\nX2FGMCIfM2A6JiVTscBhz6qgrs/RurHGRT5dvLxuTdq3t9le28fkTl/Z40U6\nRE9OWf7ad1HlvLG79U5Y8PtTTVht/FI5JyAuRjQoKE673Vi+qqWxwLe0tsP2\nfnzXzmNW6MjF3enIxepg18ncTENJQTpEdudPQGW+tbnJ1OdaTlFfXVFUaFgx\nIypDOCopON9fSMWvrbG4sq61u73K3+nqa0xLeedv2cbCzdrGw9VzV0tCPEFe\nW0RHY9PIxL6+0ldNWnlpSEl57EArLkQ6LC04SEI857i7wruysLa4tLW9yMnX\nbF5WS0tk2Njs3MjDzNr3XklCSFRUSklafOLWysfTXElOXV1PUerK1VpPUUg9\nNzIvLzI3P0hP7MzDu7WysK+xsrW6wtDteW94fGRfeeDh6+39aF1hb33+Zmti\nWFxs9mJKRk1RS01c7uH8bnVVQjw4My8uMDg9R/nIw762r66vs7Kytrq/0fJk\nWlZWUVZt++DQ0NnX5///ZGloVk5LT1NRUU5SVlBNUFx0a1Zf9lM/Ozc0MC8x\nOD9P2b+6t7Owr7G1t7q7ur7M1NzleGpsZV1Ybd7c/2p+bmNWVGFUSUdKVFdV\nXXXtaVZi7fdcT1tpTD46NTEuLTA3PUvmwri1tLKvr7G2uLa3vMPJ2Phxc3Vr\nWlpw39zvaGpkUU1OTktAP0ZMS0hV7t/+a9/S4lpPYFxJPjk3My8uMTg9TePC\nt7Kvrq2usba4ur7CwsnW6/ft6nFgZHL78PP1bVtOS0tKQz0+REVERVN77unk\n1tPvVlFWUEU8Nzk3MzM3PkhQ5b+2srGvra6ytre5vsPEx9D5avT2bF5cYV9c\nYmpbTktKSkhCQUNFR0hNXvzn4OHd3XJWTEdGPTY2NzY2O0VWYPHHubOxsa+v\nsbW4ur3CycrL0+Vsbm1jW1leXFdTVFdNR0JDR0VDQ0dMTldu49PT1t3m9lNG\nPzs2MzI0NzpFZuDTx7y0sLGysrS4uby/xMjJztXk6vJ0b2FfX11dWlZST01G\nQkRFREFDSE1UWnfcz9b29HhYSz86NjMzNjg8SGjNwL27tbCxs7S2uLu+wcfM\nztPb4+Ln72phYF9lYF5ZT0xLR0E/QUNEQUNLV2Nl/+Ld5WpZVks/Ojg2Njc9\nSVN1zLu1tLOysbK3ury/w8rN0Nfe3Nne3eTs92dcV1FNR0RERURERUNHSkxN\nTl3x6fdy7OphUElDPzw5OTs8Q1Rx2sq9t7SztbW2ur2/wMbN0tPU29ze393g\n5u91XVRQTEhDQkNDRkdFRklRWFlfdOHrZGBfXVNEPT07OTo8QVFv1sfAurW0\ntLW3urzBxcfLz9jb3d3a3uDp7f3+dV5YT0xLR0NAQENHSklKT15+7uXh4/dg\nTkxMQTs5OTw+P0he38zDvLq3tba3urq9wcbLzNHY5u/q6uPm5uh5b21mWU5K\nR0dEQD9AREhMUVhq6Nva6OnmY01GQD06NjQ5PUNPd82/ubWzs7W2ub2/x8vM\n0NjZ1djb397c39zk7H5pYFdPSURAQD9ARUVJWW/hxcRKQcviPT02LjEyLS44\nY8vKv7GrqKu1trPEWEE+T2RWc9G6rrO1r6+zxGZbST04Ly43Oz1FY8nHxsLM\n1Gs5IRwrLCMsKTitr7+2tKiiultV2rzLTU/Bs7rWXNu+v+Jc2b22vtXHvcTz\nPjc9QzgyOEJuzMnBuLi/z/dPOiUYGyoxTzszuq6ttljPsLTHPzfsurnR8tjH\nu8bV2sS1vLu6u6+vt8VqSzovLS40Pk9TbsO7urnE3GBALBgRHC3MtDlGvK2g\nuUFSvqqyQi89uaq2fDpWt7fJR0rFsquzwMG7u9I5NDlH9nF4Xmz8z767v8TZ\nUD8oExAdL6qvNzEvwaOw9j9Nsa3UNi92q6Oq0VLYuLpmQEDAqKSosb/J6j4y\nLC48XMfG1eHSyMLJ3kw3Hg4TI9yesz0tJ8qorbLN6MDYRTcvS7mrqbHHZsrn\nWlhIxrKopKqxu+dPOzE4PmThy729trzV30k4Hg0PHFWZqWgtGT6uq6TAY8Ph\nzG8yPEfEqayxweVZSz9E3r6opKeorrXDTzgwNT07RN25rK680D4bDA4Z8Zmq\nvSobXMCnpN7fRT/DyM3EOk3X5Ky7v8lMXUde0cCxrKyssry3xNZrPDk1P9u3\nrrTGKQ8NEjmapbEjEy1TnZmzxCoo/8Koq15dNz691LjddcDeuL3PzNnAsru7\nv+vAwL/ISDo1ba+tszYTDQ8rnJ+oNRUfKayYqKo0ITlLqKG5vjczzfuz3Txb\nO7qsr63tTeh1tK+8uMu/vmtNN0y/u84eExEUuaOgpicrHyqkqaa4KS0pS6Ot\nqskt60Szrj9XKTy8rJ2nvGUzQ8S+r7q7s8q6V0fRfUYbExIZu6+hrjP6Klq0\n669EOUEu1rvHrM30vD60/kLOLOzkvKe8sc5Qwcy3sLy1x+jFcci+YSYUFhU5\nsb2mLDlhQp2vu1ceMjnGosG/0jWz7sK6LegwP7vvq7jHvD9YysSqsbGx0Llm\nTstGJBYYGWmqtasiKzE4nauoxyUuK06qra+wRb7MybIxPikv1cymq7G9OzE7\nTq6pqa3LuM3HyEAdDhMX0Z6koigmJiyfpaG3KC0mUKisrbg7ztW6qUnsKCtI\nQ6myr7VKTD1Bac+xqa6uwdjPNRwTFBrLr6CnNlIjNbXAor9EPyvdta+pvMzA\nSshHPtM9vdBgxUHmw826fllpaLSzsrPGvt8pFBITKqiunkwtZCqrrs+1KjtU\nTKi4vq3Oq63OySMtNU+kr6vZLz061LbW1ktZsrOrtM3JTCgTFBQpq7afTCpP\nKayotKkyNjcxt7m3qLiqqszEJikwP6esprk3Pi9Gwt7BYlu6u62xv8ZEHw8T\nFj6graMzKEcrrrDCrkXty/22zke+zKqivr8oKTlLpqyqt0FSOT3Oc8O/6L7O\nuq6/vTITDhEdpaCmthstMHadt7VeJ1lvsqO6vc/uqq+3TSErMreiqKtvO0I/\nX99Zy7y0r73Bx87MKA8QEi2bq6M4GTkqsZ/BrUgzzEe+t1K0taedtNsiHi18\no6Opv0Q/UFLe/1C+tayuv83R4i8PDhcimKSu6hEvNsWb0tNVLbW2wbMxV7yu\nmKq/JhouTp2cqL4wMD99y8xcxrasrL7C28kpDQ4WL5OjsjsNLE+tlMhGLh/E\np66pOTDPtZmhxCUZKu2bmqbPKi403r6/z8u4rq2/y2zPIgsTGtqPs7ohDlK6\nn5haLSwnu6LFuz1FrqmgtUQfIzm9mZ+lzy00LEPKvb27tLSwusHXThcJGSOj\nkVlUFROvppykLyQzQrGpP0/lsZ+otlQ0JS88yZ6foLsuKSU/sqywwL61srXK\nWBwJEyuuj78tGhOymKCuLCBQt7vYMyfCnp6nRS7cTN46J7qjmqI/KiQ3s6y7\nz7+trLbLMQ0JIUyVlywjFCKanLjPOrylTyAZKa+Xlr8uHjihs8woIq6dnK8r\nL0j/t/xqqKKqv0QvFQok7qaULh4hKZ+hLyfOnJm2Gw8fyZeTtDswQ7TYLS1o\no5+sOy3Gr7FELDqvm6GzfjASCR/onJQ1GhwvoZswH+agma4gFSm6paQ8Taal\nryEXJr+ZnK5YP96+Py9QbKqjqKq8HgkPJLKRqUEpLrteKid+l5rKJBYuoqLP\nJiWrmZ5GHiErxbnCoJqfuyscM7W3ra6uqi8NFCxZnssi1KWqzhoScpycsCcj\nxqjCLCA1pputNio53s4yLq+dm6ZGM2LHv8zmt7EiEiVNr6cpHrCmq78bHE63\ntD4v0qSiyykkPsatykS9ue4vJS+5nZ6qvkJgw761yth3Hhcy42+/KSKsprG4\nLTWzYTAoKsOqr1ZBwaqo9yspO7WuWTAoL8+qoqSsv8Vua2Y8SG9aPs71NDUj\nJEBY27zNvqq73ctMTmQxLD5f2cDCzratt7//OzYuKjfNtK+vyEpKOzlJ27Wu\nrrjHy9w7Lj3WubjeREZMOzIsJz3EwspPPXi5ucNvQ0pL8nJAWdi7qKez3TYr\nNd67ub/M7nXMSzI1OkptX1+/ra+7SCwtQtW/1Uc/O1TNyLzD18bPSj80L0rD\nsrHIS0BNXedfadvLxf1LPkToztbeb+W/vMxeQjlPy8O9zW1NQ0M8O1LHtrjd\nPC4wR8q5vMzd3t1vRjs6Scy8vMVpXev2Z2n/ybq9yFE6P/zC0l5JPU53SDw5\nQMy5tbxcPjs/9M/KvLq2t81LOzlB7vFvYUZe6mVXTFnNvsfeSDk8TePKxMnj\nWEU+Td3EvMHObFFV587Y6ltS3cG/zkMyND5xzM/U1exfWlBm2u76bfrPy8t0\nTFRs1dtPQEBIbtTHvsTuSkFL3MbG7UxZ3cnJckdNVWTs9tTZd2JWZtbN291a\nREZH+8fDz1w7MjxO0MS/y9TP0tBdbc5v52Vb1u5g2VBRWk7f1W9eTULp0c/P\n4uPM7Eg+PlTfy8Xa2/ZGP0BK7MTKwchsT0JPzc3VfFTcxc3ZWkj48HPiZFtR\nQ0xe68zNx8PkTD87SdfKy95fX1ZTXlhn1s7GxdxvT0RJTE/lz8zK+lxVUOTZ\n3N9gYmRTZufhy8fJ2mJOQz5EZM6/w9pZS0tPXXLe2eB+Z9/kaldIUNrMzt1d\nVV5bbODf1tpfTUlOZ9/MxMXMckxKSlFh3cjG1X1TR0pd89jOztLiY1VNTVhp\n7Nvc72daV1jy2tjS7FlPTlru2tfT3unvXlNST17ez87f7WlRTUxf4c/O1ttu\nYV1XZnrk29/pa2ldVFlf99rd62BXZe7d2ePn7GtdX2N27fX1amzzYVhbWXHe\n19LP0t13W1JTWWBo/nb/3dzi6nBjZlxTV1v/29ve6ezodWR159nX82X5831x\nWE5QVV5q9tvR0uP1bWJtePp1WVJdc9/X3ehtZGx583Tz6+fecF1WUmh1/v5s\n/t7a4mZcb/Xp7HNjdOfo7X5nZH7m6HJfV1Tt18/O8mZjYf1tVF5q7tXd+W5o\n/3dbXGLy3v5cVVdedHvp2t3c6Wz57Pr9bXLs6+9rXmpu/G9lePXmfGBdZOPY\n1+BrbmpndGt36eXzaWp+eWdVU2Px3+ZvaWhud3zu9fpqXnTj1djleGN75/Jo\nWlpid/Dd1tnbc1lZZevremlfa/t0/3VqbGJq+ODZ32tWWm7t6HZiYmNr/+vf\n5Ox4ZGhw7OHy8+7xd293eef1ZF9o7OXsbV1k7+X9X1dddObk7/Dv/mBfdPHk\n6XFnYmly+u/+bF5eZPDd3N52benc2+hkX2hq7/xubGZ5eGhoaXj6bv7q8uz9\na2pubv/u5t/rcVxYXW7y7/93dX19d/v/evTv7OXg3ujt83d7bXV3Y2NWVWJt\n59vmb2VdX19damd26Onk5PluaWr07efoeHx+6d/i5/x1a2FZWmZ98W9fY2lu\n7/Lazs/K09vY5ej6XE0+Oz9L19PQ3VVeX+/V7HNYS1p33snOzdZvfmBxe2Ji\nWmX64NbY5/RsW2Nlff10dFxlemzv5N7X3uhrWV1fYm1uaGtsbXjs6/D3+nRl\na2pjaml36nPf4+XlYG1ebe388e7z3eTv9lxtXV/ye9ji7eh7397e1Nrg7llM\nSUpQSUpDR15tyc7OzujddG1qWmBsZt/Tzcja0nZZYkxxde/bbP5dWv/57+vv\n9/Fu/nvez87Awby7xWg3KyQpL0LPxry/y8PIwMPtTTcxN0LavLOwucTlUl1Q\nTkw8REhnwsC5vs7hUU9UUFhOTFRax7auqq62bTQkHR4jL1TJtrCxrrK1udRZ\nNCwrLD7Zs6moqrXLVTk0MTE4QFzIvbKxtr3uSjs4Oz9Oa8+7sayrrbTRPiYc\nGRsiMua2q6ioqq6zw2k3KiQkLEO9qaGfpa7NQC0oKCw4VcCyrKuwvN1KPDc4\nPUhc2MC3r6yssL1eMCEaGBshMWWzpqGfoqiyzUcuJiIjKzvOrqSfoam2bjct\nKSw2U8S3r7W8zV5MQEROXevj29HIvbaytLzbPiofGxocJDHzsKWenqCotMxD\nNC0rLC43SNG4rKqqrrbD32lNTUlKQz08OT1K4r+1r7O6yPlVTV3cxL3A3kAu\nJR8dHiMtUMCtqainqqyxuspeQTMuLC00Qui9r6uoqauwvdNLOzAtLC00QN+7\nsK2wuMboXFv+1snDy+pJMykhHR0fJzJJyrSrpqOho6asueI/MCooKCw1T8Ow\nqaenq7G70Fk/NS4tLzdF+snAvsDBxcK+vLm5vMlvPy4kHRoaHSQuSMexqKKf\nnp+hp6/CTjIoIiEkLDv1uaynpaeqrrjE+0g5MC8uLzQ7RVbhybyzr62trrK8\n00gvJB0ZGRsfKTh8u62kn52cnaCos81CLiYiISUtPt+6rqqpqqyutL3QUzwx\nLCsrLjM8TPrIuq+qp6irsL3oPy0jHRsbHB8nMEnLsqihnZycnqStwFI0KiYm\nKjA+Y8q9trSzs7e7wc3yUEE7NjQ0NTg9TPfEtaypqauwu9JNNysjHhwcHSAo\nNFq/raWfnZ2eoqm0y1k+NjMzNjpAS1r94dnPzcjGxcbN1e1ZRzw4Njg9Tt6+\ns66trrK4wt5LOCwkHx0dHiMrOV3Br6mkoaChpKess7zNcE0+Ozg4OTk7PD9F\nTnbSwby7v852S0NAQUtX6czCu7i2t7m9x+JOOi8oIiAfISUqM0P3wrWspqKf\nn6CkqrC9208+ODIwMDAzNjtDUOzOw7/Cx9XxaF5fZXb83tPMx8C+vb2/x91W\nPjIrJiMhIiUpLjlL172up6GenZ6hqK6601M9NjEvLzAzNjk+R13cyb++wcfU\n4m1qaHf249XMxb++vb6/xtpaPzMrJiMgISQnLDVE372tpqCdnJ2fp6683Uw7\nNTAuLi4wMzlCVNnEvry/xtb5Z1tmanX27NjOxr67ubm7xOBOOS4nIiAfISQn\nLTdPyrKnn5ybnJ6lrbrgSDkxLy4uLzA3PEvtyr67u7/M1/lfWFNVUVNfa9TC\nubKwsLS90k82KyMfHh4fICQsOGC5qZ+bmZmdoqy610M4LiwsLC81PF7QurOx\nsbnD5U1BOTg4Oj9FW9jAsqypqKyxxUwvHhsZGSElNk9ntLSooaSgq7jpMCwr\nL17Fr6mtrL/bZT1SSV3fY83WzMbi/Uc8OjU5Oz5bz7OopKSrvzkfERIaJcW8\nrKzArLKqp8NmJx4kLcqmo5+svshG1U48Oyw+Ybmlp6WuxGw2LiooLC4zTNqt\noZ+hq7c/HRQOFyxeoqyzrcGlqLXNIxwcJNiup6XByc7Krb/IQiw0M3C5rqKi\npKvIPygfISY0a8ewqqimrbTCWikRDhAfuaearW6wwKSqQzQcHz5tsrlPv8Gu\no7i6QDQ7KjMvTaqelpyqzi0kIyIuR8CnqKuvvbG6xmsuFwsQGMucqKQ2Oqq7\no8spPixYvDQ7NUSjpaatbcZePScdJ0uflZeetN42JyAeK9qnoqu+xbStsctH\nJw4MFR+inLqvJkqhw6tMKbrWzeYfKk67nqu5ubezRh4WHj2llJqhqrC0RSQc\nImCzrsdMvKmkqr7aORoKDhpclai7TCGqqO69LNGgutghGC7Spqe1rqWlWh0T\nGz6pmaC0raWnuy8kL0rSRDR9rp+jrrXLXBgHDhu5kLhDLx+hoDvXO6qXuTgY\nGEqtp8vyrZyeORgUJ6+fq9ZJq5+suj9avj4rHyyrnp6svbS8Og4HFjCZmiQi\nI2CWvCV4rZObPxsUL6ii3indnJiuHhclvKDHNUC7nKbFtrmw/h8bI8OfoKu4\nt7tEDwcc3ZmbGxYiRJeuG1WgkZk2FhdrnJzgI0qjnrscIteloSocL8+cpMmm\no6pdHRwp4auxr6mttyoJCi2nkKoYFSXGmUYasJeRpR0SIaqXpD0q7qnWJiHO\nm5mvIBsu4Keqrp+ozjgmNdzs6N+2qrVIDwgfu5eZKBkmOKOyGlSclZ0rFR67\nmpzMLkbBdS0cO6Ocm9YjLDXQrLanpspVRE68wkRkt7W8IggNMamSsh0nO7il\nJCGomJhbFRZCm5m3N0KpqzYaHM2goLw+b8TJ8z6+pa/hOHivtegwaaevKgkM\nNKeS4xIjupucHRa5lpPCFRRLmZjPLjWroVYjH0Ktq/02Tc2ztsmwrcdjPFa4\nwOM6S662HQkUR56VLBQlx5adJCbFmplEGh2+mJ7EKyrJws9AN8XA2kw+T0Hy\nvLGmsGNgwKqtbSsoy640Dg46pJfIFBlNnpbvJ9qinVcZHNqZm63NNVM2IS5P\nrKbpO1HEwEs7Tremr+jitayxzjMqNyAPH7KgnSwRHDijmbzCqam0JRUluZyY\nqHJINTdLMte6XdYzL8vCq6fLPjExvZ+irrfXPyAMDC2elKMnGCfosksls5WY\nuBwWMa2Zmqu95jgrKTWto7NSIx8u3aijqr09MkLCrq21vvwfCw8/o5a8Ghs3\np5zUOLmmrC4ZIVCgk5uq0jIsLzRXuLKrs1wwKDPbta+0xE3ZurrCTTAbDRi9\nnZtGGBw4pKI8Pq6dqCkZI82am7XQS8uwvN5uRz1SQG29vaqtSy0qOL2npq3N\nNB4ODjmcmKgfDx7nnqJzs5+kORIUMJ+Oma9CJzlAQPu2qKrrLiw6t6WtudxP\nUlfLr6/VJwwKJ6SUnyoXH1Kkuie/nJqzGREiypaTp7dCMk0/Xqy3vccuO1B2\nq628vT85976qrt8vDwkerpicMRkiS6utMNacm7EbDx/bn5ipvrbMXzomW7Kw\nqes/V0C2qMTOVkK+srCvxT0VBxRdmZNtGRUlqJtcQKeanS8PFDakk53N6VRC\nUS08sbSs1DNVWr+nsre3QTxL4qmozysMCiOvkp0rGRxCn6c416ScqCMRG12h\nmKjnz9PHTiQu5a+jt0Y3Prisvc9S4bGur7XDTx8JDCulj6kfFRfRlqVgvKub\nshwRHb+ZmKxPTsjMMyAr66Whulw3ea+6y0Uz0qyop6/CTSMMCyKzkZstGRMw\nmpy4vtympiwZGjGnm6GwvdlMLh8s3amgt0U5Tb65yO3mv7K1trW1uVMfCw0r\nrpKqIRsb0pmqzujwoawyHxosr5qYosEwJSIubb2lpa/GLSo1TrCprbK9xdHo\nz8bMPRIOHzyaoTEuGzqeqrNTK76t2DoeJLKcmqhILDg+P0c4s6CjqzgoLDu8\nr66vtLTJQEfHtrsoDhIez5a4PisdsJ+0vSkpwsO0wzROybq2vM3Kv0hLPDXE\nv7azfWNUTMjDx7W5ubzR2sO91i4SDxkvnJ+0bB04vsi7LCfUp52oOyEjTaSd\npsZMOUNNNz9Hya6zwWw8QtC4rrXGw7+6vdDV3ywTEBMpm52lcxkjK1qhr6yu\nRmw7L9fCrKWvsnxCOzVFPUVC8Lisq8c/MD7Cq6ewzlZa4sjAvsIzFxAQJKah\npEcbLVCpnNI8Ly+upKirdj8/O86vrb1PJyUwPrKrq6zPTz9K+t3AsK63bzY9\n4Kyoui8QDREppaKfwTFZMtC23bXY7Le8s7s8NCszva+irVEsHSc2vaWmprbV\nTj1H5bmwtPc1Lje/o6GqwyINCxIvnpiaxygpJraeqao+LENCt7XczEpK2e66\nucNRJh8gNbmgmp2qw0c4NDY+S/PGvLSxr7HB1j8gFxQWK8WonbprRTC0rLGv\nOzhBO77E6cQ9S9XKqbPTMBwdJm6jmZeerlssJycrO9G1q7C4yW7FtquuyzAW\nDg8cTqeZpr9XO7moq7YvHRwg6KihocRMREO5ucJNLSsvYb+qoqOktV4rHB0n\nW6mfo7HZVeS7sa60w1MkFA8QHmammaKuzTdNWd7LOSwlKFeunJmfrkwqKCc2\nYb2uuLzHvq2wxDwoJy9Jz8PHu7Osq7nHXk3dy7u+2jwfFQ8SHj2imZuixDUi\nIDu/pqK3Vi0ta7WlprjYPFbAtK/MPiwoLkHMsqqqr809LiovN1LJsaWiqLpM\nMi494MnYNycaFhkfO7ylnaGmstprPDc0LC8zSrWhl5acqHQrHh0lNMisqazD\nZnPnyPU8MCotNz/+xrWopqauxkgrJy1LubTLOB0RERous52ZnKa2Uzo5Qf/f\n0/duzLyspKGgqr49Ih0fLPqzqq28Si0mJjN8uK+4xl1KVHTJv7/AycbDxc9X\nPDEvLi8uKCYgJjPap56bnqq4905LQ0NETNq+tKyqq7DBUzUtKSkrLDNG0bOu\nsr1lQTs+WtjQ1mFGRlPKsaqrssxCMC0yR9jIdTUkHh0mO8Oln56hrbPB595P\nR0U1NDQ67ryvrLK6x+lYPS0mICMuT7aoo6OqtctOPTUwLzE7V7+xra685T82\nPFLDtbfGSy8lIiQpOE3DsKynqa2vusXcTj0vKSgpL0bCraSfoaez+DUnIiMn\nL0rCrqimqa+95jssJSQrOu+8tK+urq+yvMpePjYtKyooKi00Sn3Mu7izsbGx\ntbm9zFg+NC8vLzZB6beooqGotuY4KigqMkZ2ycHBu7q6vM1ZPDIuLzhEec7D\nu7y4t7m6wMxvPy8mICEnL0jWvrGvra62ur/DwcXMc0IxKiouQs2zqqiprbnS\nSjw6OTs7Oz5IXOzQycLBz/tQRkdHR0lETe3EtK2rrLTDTi4lHx4jKjhdybOt\nra6yt7m8vb/G1VI1KSQmMF24q6eqr7vQa0tGSk5cc2dQRTw4OD5T17+5usPj\nSz05PlDiwrmzr66yvmA1KCEhJi4/X97HxsbBv7avrauvu+47LiotNk/Lv77E\nycvQzdXZy8S+wdZQOS8tMDlGZ9fJxMbM2uny+unc2c/Kx8jKzNTqVD8zLSws\nMjxMWmJpb9e8r6mmqa/BUzcuLjNE9srI12lWXNvAt7Kws73aSTcvLzQ9R0xL\nSUtZ6dfLyMbCv7/CyNTi/2deWWBZSz86ODg5PD4+QERP+cS2ramqrrnOX0dD\nQ0RGSE1Xa+PVzMS+vL3Dz/BYRz88Ozw9PD9GVG55/+jRwLq3ucj5UUdLYtDD\nv8TQdUxDPjs5NjU0NzxIbM+9uLe6wcvV0szIxsnN2H1pafPUyb+/x+BNPjg1\nNjg8QUdPVltcYXjhz8bBw8nXfF9o4cu/vsLL1t7e3+5qVUxHQ0NESEtMS0dB\nPz9ES1n57XFaVWjZwLWtqqqsr7e/zv1SQTk1NDQ3Oz9ERkhLUFtkZ2hnd+DR\nysjHx8XDwcLFy9jrdXXx5v9UR0A/RUxPTkpGQUJEREdIR0lPas++ta+tra+0\nub/J1epoVEhAOzo7P0xYXFZPSkZGS1VhamtnZG7s2czEv76+wcrQ331hX2Jz\n6OT0WUg/PT0+QUNBQkNESU9p2MS5tLO0uL3Bx8jMz9p2V0xMTVdz9PVrVU1J\nS01RVU5HQUFIUGro3Nji83x39t3PysbFyM3Z7HdnZl9ZWFNMR0NAP0JJT2Pc\ny8TBwcPFw8TExcjN1uxcUE1PW2zu5uf5aFxQS0lJS01PUFJYX2dvbGVmbHT2\n6trQ0M/R3Oj2++7p6XteUUpISUxRWWN17NrPzszNzs7LycnKz9xzXFRTW2vt\n5ODj6/9pWE9PTk5PUlFOUFlgZWtwZmr/+fn//v32493b2djZ3/VjVVBRUlRX\nZXLx3tjV1Njb2tPNysjKz932aF1ibH7q4t3obFtTTk5PT1JST09SVVdeY19e\nX2FiaPbf1s/R2N/l7+rf39/o/WVdWlRQUlliePT2fv7s3tXOzMzP1dz5bGRp\n/+PZ1tnd5XVfXFJOUVRUVltXVFRUU1NXV15y7d/a0tTZ2t7v//Tr3tzb2+Ls\nbVtWUFFXXF9dXl1hed/X09LX293f4+nu+Hz87N3SztHW3fRoWFNUVVxdV01H\nRERITlhldu/v+fjv5N7b2NnY2NjZ2NXU1Nfg/W5oYmBeWlJOTU5SXGt+7ufp\n6O37+X719/Dh39nS0c7Ozc/Y3vByYFdPR0RDREhMVVxeYmRnee3i29va3drT\nz87Q2OLw8vV5c29vbmxoYmBjYmFeXF5pfP1+b19cX2xtc+7f2tbU19vd5PH0\n9Px8dWJZV1ldX2NgV1NYXGBrevz++nh49+3e29jZ3d3d3Nvc3t7h6vxsb3V4\ne3BsX15fXV5ZVlVSVFVZZHH77evy7N/a2NjZ3+fp9/b38/p2bV5UU1ZYY296\ne/nzempkZWRqevDw5NnW1NTV2t7vbGRhaHTt5ujr82xeXFVUVFhdZnF1/fpy\ncf//8PL3+Hz6+O7r6+1zXVtmZ3vx5uTRz8/R2upxalxVTlFUWGJpbHvw7en3\n9Ozn5uXl6/NyX1VSUlFTVFhcbP1xdXn+8efc2tfUz9DT1tXT1tfa3uju93lq\nX1lWT05PUE9PVFNQV1peanT++O3p6OPi5+vj5eXf5uXh3t3g4+Ln6+nufnNr\nXllYW2Fs8+jk3uPtfmxnZmheVFJWWVhYW1926uLh3dza2Nvh6Oz+cmVmbW5w\ncW/+9vDr+O3s7f1tamdv/ft2cX18dGlfXVtWXGVs8u7t7fLs5+33//Pr7+vk\n8PL0+Pbw6Onm5+bh5fFtYV1ZWFZTUVNZWFphcujg3uXr6urs7vPy+PTu6ePk\n4OXo7/h5fn1zamFcV1dcX2Ntdm9teXhwamlx9ubr493f29vV2N3e7XlhWFRA\nPd0/adBM4lVrv8XHxlva0t7RYmJxZ2BQUmRtaE1rS2NWTPFj5dpt9PVl4uXQ\n1NLc2XLna+RfdFhib/h37GVseHngfdpn8XBaZmpX+/tqa1hdbV1Telt+/3pr\n3Ojp2vjb3Ova7Ojf7N/m7OfX09zm9OfgZ/ZfXWtcXe1ZVWBFWU1KQjk5PERH\nSVXjxr27uru7u8LM4lpQQERHQlxX+szIwb/FwL/Fzdx54OXj3vTl2dzTzM/N\n5FxQOCknHiEqIzEwOr20qqSmqKayye88Mzg2Od52v6y2qa6/w0U9PjY1OjpZ\nx8O6vcG9w+VeQz5YWXPa3Mi+wL7G5OlLPDUmGhsgJDw7OsSzpJ6mrK60ud01\nLC05YsS8uaymo6e3zUc8NCsqKzRZzcbDxMO8xeRUPj5JTVT7zsS9wcTGzM5q\nUEA0KBobHyhPTUy/tKKeqa/Cy8RVOi837Lerrre1srG6VjUtLzs/R03Pta+2\nylJKTUtAODlBaMrDwsTK0GtRPTxCVOx3bksxIR8lL3vn68WwpKCntcbT2GJC\nOD7Xua6uusTGy/VIMSwzQvzS08y/vL3VSTs/VW91RUFP0L3Azl1QV0xEPkF4\nxrq8zWk4IB0hKPrK1La1p6GqtNRW/29XRzxbzLizyela7tXeTzs/SOfGysvO\n2ubaXVRcTVVANTQ4SdHEydRSTFdf0dDXx8O7s7e9v849HxoeK8C4xszfsaiv\nv0Y2QUVMQjlVy6+nr7zjZePXXjkyN1y6ra20xeVpPzMrKS42Pj5Her6vrrnl\nTU3jyszKxsC7vL69vb7PMxwWGyrJtMjparanrL88Ky86SW3yxK6loqrBTz9L\nZl9GQVDEray11zovLjE1NTg8RlRUPD95vqyuvdxP/cXGy9nux761rrO2yVIu\nGxQZJeirrrG9xrnTQC0mLUbBraytrK6vueRKQkx5ycbO0+vVy8vbSTcxMC8w\nLy8zPVvLvretrKy5XDkuOHPEt7Oyra2wut5NPDYwIRodKs6nq8M8LTxkz9lK\nR++8ray2wMa7srXDY0tQ4+NURT9O2sXG7kE1LiwtMDpP1L24u8tndN7P1Wlc\n7r6vrK65x8/1XllQWOHQeDIhHyU70k44Kytcu6+uvsXBw7i8xb28tbS8zlhK\nTGpfUkxEYM7DwN8/MysqLTFL2snHfV/mzbq90/liybWwsLrN19vc2/HZzse/\n2DceGBokVd1eQzfSr6qqvmZiY8q9yMG+tK61wWNISl3vWVFIUuHUyu1ANS0s\nMDpNbnLl+/nW0cS/wr/ExL+/vL3Axs7Ozcq/x+tSOSwfHB8oVMbez01vvb62\nxV93WuHByLy2tK21vc9RTUxbWFVTV9/NwslXPTIrKywwPEvu0MW+vbu4ub7N\n7evPvri5v8rOyL/J7Es4LSEdISt4tL/QPzpe6MLH69DOv7jAxMrGt7e5wutu\nYu9+VkxIXtnIynA/My4uMTY8RvLNv73Fw8jExNfe8dzBurW4wsvJwL7NTTMh\nGh0lRLW2uNFJ9mlyWjxFXc60tLa2vrm3wM5XTFB73OL8V27Yy8XcTzsyMDA3\nPT5FV9e/ub3H2vZ3cWtq1rywra+4wMLIzF82IhkaIz+ysbnNWM7P/UcxNUjc\ntLG3tru0sbrIWU9YaelgX13YxcbMX0I7NjU2NTo+RmrdysDEwcbT2lxOWP7G\nuLWztbi2vMZkNSQaGyI1u7K6vuHCv95QMi49Xr2zube4tK+5yVhFUmzoWE5P\n3724utlANDE2Ojk5OT9W2cC8vcPK31xNSFPlwri0tLS1tbbD/T0nHBoeLdyz\nt7rS1ct+UTkyP2a+sbSztLe0vtBlS2Hn0+tbS0zq08bNXEU7Nzk4OTk4QFnU\nurW0tsZ4Sz9IY8y7trSztbi7zO1AKh0ZHizWsLi+29/H6E04MEPZua61uLi5\ns7zPY0pl18zYWUpLeNXV5E9CPz09ODg8P05k6se7s7O+8UI7RWfNvrizsLC1\nu85bOSQaGiA0t661uerFx11GLS0/ebmutK+wsa/F+0xHdc7M/l1Q/crN2005\nNjg6PDw9QUdPW2/NvbSyus1rUk9b78u5sK6usbvOPiMYFx4zuLS0ucWyuug7\nKCk1Ub+5ua+tqKm43kNAVd/vUE9dybm7zEw4NDc6Ozg3PUtlcvbpxLWzuNdQ\nRlnPzdDYzryvrbO/ZCscGh4r0b69ucewr8dRKycuOt3Av7GuqKewyFVIV9ja\nUk9Wzri6x1E2Mzc6Pzs5OTxKTVb9zrevs8FeQkZsz8XEw7qwra630TIdGRwn\nfL/AusKxrL1ZLCMpMk3KwbSsp6Wtw1xKUdPNXV5i0rm8zU44Njk8Pzs6OjxA\nPkNQzbaurrrYT0VKWeLKvLSwsLC3yTsfGhslW7++u8avqbXeLyMlLUPcybet\npqOrvk9BRWbdXWPvx7S2xmE8Nzk6PTs7Pj8/PT1J3LqzsrrNbElITlzIu7Ww\nsK+wu+0xHhseKV3Pxrq6rK3ASiokKTFAb862qaOjrchTRktpX07uyrmzv9lX\nQj88NTU3O0RCPDs+XMa5srO9zlhAP0zrvrayrq6us8VKJxseIi79T8O0r6i3\najcpKzE4RF7FrqemrLjL39xdT0ZJ1sm+xN7e8FtRPjU5OTs7NDlEYcm/u7W3\nwOdDOz5Rz7y2r6ysrrjbOiQdHyc0VFbJr6urv0QyLjc7NjhLw6ymqrK9v8LM\nWUA+T8/Ozs3PwsTeTTk5PDo2Ly86R3PJwrexucdcQkNJVGvOuKypqq651zok\nHiEmMT49zbGsqr5ZRjw9Ni4yRsGura+1s7C4yVhGS130WmHp18XXWk9ITEg4\nMi8zPEFV1r6xsLjH8lZIQkVZzLquqqqtt3IvJiQmKCwsOsWyrbDDx8h1RDIt\nOlzUyMS9tq+zu8HHzdV8Uln34uhdS05bV05EOzo4ODk+WNC+uby9xNpdSUlZ\n7tfIvLGusr9iPDs6Mi4sKzlRWfXxfM3H6HNt7ci+vr6+w8zY82Z0Zlt/2cm8\nu7/CytblWkY+OzUvLy81Pk76zcHAw9H5eXDx2dnPwbm0tbrF1N7ieVlOSEpH\nQT42MC4rKywvOEvZvrGtrKyusLS4v9Lpbmz26vz54t/Y3fV+Xkw/Ojg5PD5D\nTF35dltOTl/l0cvDu7axsrrDz+NfSz86OTk5Ozw9P0FAPkBESVf9zr63tre2\nt7e4vMHIx8nN0dzk5vleVU9NTEY+Ozo6Oz0/RlZxbmJZYfzbzsvHwLq5u77C\nzOB8T0A8NzQ3OTxBR09j6N/j5ODSy8S/v8DCwMLFx8vP1d3g6fLw+3llXFZU\nV1ZOSEVERUNCRUxYXl9aYOrWz83MysfJys3c43VYT0hCQUNDR0tPXHDk2Nja\n2Nzc0svJysrKysfGyc7Y3eHm7Pby7PZ2X1hUTktGQ0JDRUZITFVjb2Zq9ePR\nzczKy8nHz93qXlBKQT0+QUROWWfs3tjX19rmfW1+3M7KyMnGw8LGy83Qz9bl\n9nd+/2ZaUkxJR0Q/Pz89PkRKVGrn1c7NycfHxcnOzNLm9F5MST88Pj0/Q0pa\n6c7IxsbIyc7c9WZo793TzszJyMfHytHY4PZ5bGZmXVdQTEtJSEZERERISk5c\n/tnQzcrMzM/U19nqc11PTEdBQUJCR05TX+vTzMfFxsbIzM/e7mpdb+ni4NjS\nzsjJyszO0tzvbmNdVU1IRENDQUJDRUlPWWbi1M7KytDY3t/3aWZYUU5GQkVG\nSVFe8NjNysrKx8XKz9HY2Nni8Hj8fXjz8+Tb1tLT0dTa4/lzWE9PSklIRURG\nSUtSXWvv5dvRzszP1tr6XVNLR0Q/P0RFSVZi89LLyMXDxcXGycnLz9HY3uDp\nemlfXW3z7+be3+Dg+Ht0W1tSTk9NTE1OTlZcZXfp2tbX3Obt6HlaVU1GQz87\nPT9CS1vrzsO/vbu8vb/JztHb4OHl7Ovu/O/78Ptob3Z9/fV7+/B7cmJcW1RS\nT01SVldeZnns6ejl9fv2XU9ORkJCPj1AREhTZe7PxsK+vLy7vcXFyM3P3PDr\n4ev+dHj6eHZ1ZWVzc3f78XloY1xZVVBKSk5PV11x49ra3vhtelJJRz8/Pzw8\nQEdOXnTdycC+vLy9vL/Fx8rLzdDX2Njf5XRcX1tbWlRZX2tye/3593lnXFlY\nU1FUV19z6uLo6WpbX1VHRD48Pjs3PEBHW2jjyb65uLi6urq/wMjLyM7U2eLy\n6edgX11VWlJNT1RbYWRiZ253b2Jhbvrv+ezg5eHlXk9WUkVAOjQ3NzQ2Oj1S\n7d7KvrizsbO1tLm6vMnLztnd4vNpbGVpXlRNQk7f6FJIZc/kWmnr7fP62N/u\nzcLNb0QxLzMtKychKT1IUunLr6anqa+3sq+9/0w9TN7p5nXhwLm7xc3Uy813\nTDs4Oz9FPjtDWNPAxcO6ubi5ws7sWkw5Jh4gJCYvLSpBxrOpq7Crq66wy1NH\nRlDzaVHTwbWtsbW/xL/HzG1AOTg5OzgvNj9Uz87Mv7iysLW+z+xqTkExIBwg\nJCs9MTLdx7WmrLOuu8m/bktNP0nmzL20tbSwsbK7w95P+19STzozNjc7TEhO\nbeLCtrO0t7vI0/hLPzUkHB4dJD40O89XuKWtpafKvclCyvRA+FJ4u7ixr7Wz\nt8bB0ODlUE8/P0Y6PDw2RE1R297KubWvsr3Ic1BILyAcGhsqNDrOXsuvsqej\nrq/EPVdGS8ZZ9NH0vbOzrq+7wMvXz9DUdlVBOzk5P0Q9S01Hz8W4rrK3vtlf\nSjMiHBkZIi0+v8e5tL2sp6upuT09MTbXzbm1wca/vbWsr7O93mbv3trVTD03\nLjM7PX7ibNP8yrSxrrbLaTYkHRsZISksZ27AqLGrqLKvtFdOOy5FSdW2t7S1\nvMa7u7iwtrvAz+vmVUxNPDc3NDdJSOzEz7i6vbfJ1k8pHRgUHCgxubmxq7ux\nrK6prfJPLCk2Oca1r6uzu8bMzru3sq++xOxLTkxHRT07RD5PZmrIxry2vsDT\nTTMhGxgZICdIxbeorK6vuLuyzNhNLzgvQs+4qqyuw99v6bevqqqvvNRNREM5\nPDU2QEfr0Mi9vry+zd4/KR4ZFx0kM8PCra67r7WyrbvqVS0xNjbBvrCqtrri\nUF7hvq+rqamyu+pOQjU1MDQ8Rt3AtrC1u8nwQysdGRYZIy3Wuq+su7a4t66v\nx+IzKC4qY7esn6m3XzI6SMWuqqiqsLS7x8VfPC8mKTJGvK2rrLS/7zUfGRQV\nHyhVtLqpt8Gzua+qveM/JCopNbewoqa5yj07Te68sbWysLWsrK+23zkrJic2\nYL2srK+22zcfGRUXIChOvb+twsW2uKyrwm82JS0uTrGyp6/I1k38ysLCyOrz\nxbeooaStyTstKy1K2b+yurvMMCMcFRwmKON17bpHzre4pqvOby4oNzy8rrWz\nYUVU2a+rrbxNOj/us6ajp7bjRj9R587N2tnSzkAmHxkYKSpCvUvJTjXQwq+o\nu1s6LDhmu622xEYwOWawp6Wu1EU84burpKy41UJe3MS80d1509swIBwXHTs/\nuLVU9S0sT9mtrdNOLzJtyqmsvMIzLzY+u7aytsrFwLOusrG+0MHIvLO+ymtY\n6dtGHxkXFCloyqG2vs0sRWLdsF0xLydZtq2fss1dKzlN1bvNdkFZxq+kqKu1\n3u7cxLSxucrg2c9PJBoYEx86N6ywu6tL07rus+4tMiY0yMKmrszBOkDn+r3V\nZ0tE1r2wrrOzvsG6v7e2xtJo48pFJh8cGSQrLc7du6y/r7C9tGw2Nis3bNWv\ntcbHPz9RWs7Ny9/+08O9vre3vL29u7q3yH3q8Vw0IyIiIy4uMD9Dyr69qqyw\nrvFEPjE7PErMzry5zc3uV0xJZ9u/vb7SWvLPvLSurbG32UhWcUsvJykoLToy\nNDQ0PkD1s62pqbrAyuTdSUc+NUtOaMzb3E1IUua3rrC/b0ZK176xrbG9Xz9M\nbnA9Mjs9TGdPPzk2LSosNUL+yM++sK2tsbnPaO/l7e5pPC8vLkbHtq+1u8bJ\nurWvrbK/dEhNXFA8LjA5O0xcSEM6LSgnLjdD23ncuLSvra+wuLi1vMPKSDQy\nLTlY3cbR0szJt7CvrrjQXkZU3N1NNzQzLzU+PEM/MywqMjtQxtHDtbSwtLW5\nvry4ur2/YD43LztDWNZ27dPNu7KtrLK/41NO/OpZPDc6MjU4NTY0Ly0qMTtD\n1dTMt7Our7KzvL69v8TD3k9CO0ZIWtxq7tjQv7qzsLW92mNaaW9VPjI2NDY5\nOTUwMC0sLz5Ia8nMvbOurrCvtrq6vsbU3lJBQkNEWmVefuzMxL64t7i9yNTz\n5e50VDgyNzc9Pjw0MS8sLTA9QV7K1ryxr66vsrm4ub7M22w/QD48S1lv39vL\nwb23t7a5wczW3trd9V89MDc7PDw4Mi4uLS0uNTxD7d3Esq2trq+0srS8xuZa\nRj07PkJUbWjRzMK3t7a2vcLK0c7W6eZ3TTo0PDc1NS8vMTMyMjI7PE3c3buw\nr7CvsLWxtbvH7VU+Ozs8RE5g5dLIvri3tLS5u8HO6WhkWWp0QTM5My85Njc+\nOzIwLC40Ovfava+vr7C0ubO5vMLzX0I/R0RNeujc5dnKwLu1tLi5yNTP5fDs\n919JNS4yNTtEPz8/OTMuKS83P9PHubCusLO2vsPO0WpNTD9HWfjTzcm/u7q2\nub29ztba6c7Q0Mvb2NP8PComHx8oJzdVZsW+2Lu0va2+2ds5MDMyP8W+r6y9\nw3k+OkBN1ru6uLzCwsPJv8fbzFlL5WPKs7extc5FJx0YGB4mPea5rbCvrbOv\nr/hkLyMoJDTVvKmnsbjcPlNFR9jbw7S6tbK7t8ZWV0RAbF/5wcKzrrOwvmo0\nIRoXGR0rTcurqaqpsrm6e087JyslKUVbs6qrqbPK3UREWk/Hubaxtb7JeExQ\nSl3V08W+xLq2trS8xXY3Jx0ZGR4jN2m9rK+ttMDG8kA7MCszL0XUv6ysq621\nv87o38/HvLi8xdRdTkBGT2bJzMfF1s3NysDGxM92XTcqJB0fISU5Qdq6xr3G\n0MTM09FhT0c4Oj9Pzreuqqaop6y3v/JWSEFEREdQXd7Nx7/J2GhMTk5f3tPK\nyM/ZYkkzKiUfISEnLTRcyrKrp6eqtctSODgxOkJUxrqsp6Wkp6y2z0w7Mzc7\nRWrYy9PiX0lDP0RMYdzLwb/I0vhTS0U/Ni4sKSgoKCs0T8uzramprLG7x+fw\nWFlZXt7Vvrq2s7W3u7/Jz9bgXU1DOTUvLjM4RmrdyMPDvsTL0PZcUkpSZmhe\nPzYvKywsLjZFa8u8t6+sq62vt7/QYE9DSVB00ce9vLu+wcbKz+5OPjUwMTI3\nPUdZbeLWzsrGxcXBxMjN3O5sdvJfSTw0Ly0qKiovPl7Eta6qqamsr7W9zuZZ\nRz45OTpEXtfCvbzCydXxcFpPST89PD1IVuvPz8zO2dPVzsnLy9Ld+V5YVEs9\nOzg3Ojk7PUpc79nWxsO7urq5urm+xdtdRTs4NztFXtTDvLq6u77GzeplT0Y+\nOzs8PkNNZN7MxsTGzuF7ZWvp2M3Gwsr/Sj04Nzc1NTg8QEtb2sG4sa+wtbzN\nfUg/Pz5FTl3q183LycfDwMLGztXd+3lnX1ZLRj8+QUZPWVtcXGFn68/Kwb29\nvsDMXT0yLzA0ODo9RE1szLqtqKitvGc9MS4yNz5KWXjPv7StrK661F5LTVxg\nVUtERkxm29/9TD8+P1bjzMvZ5vHgzsbExMfLx9JLMCgkJy4zOz1PvayhnqOs\nv1Y+OjYwKysxULyrpqmuu8veTjswLjVK1Lq3vL/Gyt9GMispLzxMd/rRvbaw\ntL7Rbl504Mu+trG6Xi4mIygtKCYpObqknp+lq6+/Sy0gHyczVca5q6Gen6vK\nPy8uMC8vMz/Ssq6wucrjRy8lICMsRsmzq6ekp67BVT06PENay7Srr8s4LCkq\nKh8dIza8qqimo6Kmt0MsJigrKy1DuqOcnqSqr7XiMyclKzlARn2/srHGSTIq\nKSgoL0u/rqusq6yuuftBOj1Kb8e0q6u1bDc1LyceGRwuUsO6tqedn6vHPzo1\nKicsPMWxrqikoqWuwf1ANC0qLDVBU/7ZydlHNi8xPUNf3cq5uLW4u8DaXFpV\n2MG9sa6vuno6Ny8kHx0fLz9H78Gto6izucTZUTk1PkFH4r+uqayvs7i/5j88\nRUE8Oj5MTkI5MzU6PUNX0b66vLm9v8LoWU9JVd7GtK2srbS/Tjg4KB8iISUt\nMEnCvbOqrLK1vsnTSUJZTFXOy8fEx726wse/xs3V92hRRDkyLSoqKiwyRc25\nsa6tr7K7z/1GQUxI+8W7sK2srr1bQUsvICUiHyUjLlFevaqpraikqa26zc1E\nMj46MjtJZuTNu62ttLKzwc9XNy4nIiMkJS0+Zca3raiqq625w9Z1dkZE6sy/\nuLW5y1FTZDEnLSkhJCctODhltbKzqKKprKuvut5HVkMxNkA7PG7Jvba2rqy5\nwtJGODApJSQkKTM5R8q5sKurqqqusrfB2XJoXFJd/vhlRkFeSTAyOSsnKyov\nOD3av76wp6WpqaiuusvndUE3PDw5Okf+3cq8u7y9v8f8QjYxLSoqKSw4QPrB\nva+pqKanq6+4x+NvTT8/PDIwOz4yMDg4MC8zOEVU+MG2trCrrK+xtL7M4Wtj\nUk5OTVVbd9bY2c3V+nNaSktFOjo4MjM2OUVd1se+uLGurq+vs7m9w8jmTU47\nLzUyLCsoKzQuLTtNxry8r62qqK+ztLvIbVJcV01CQmfncnLuz83XfFJebUxF\nPzo9PDc2Okdk59XKvri1tbS0sre8v8jLz+pQPDU1MS4rKCcpLTM2Q9y8r6ys\nqqioq7O9zd3sVEZDRkxea11acd3W51lOVFdPRj88OTs8PUZUes/Dvbm5ubi2\nusDAxMrJzNTsSDw5NDAsJyUkKC4zPl3Lta2ppaWmqKuwusfcWEpFQD8+QEhK\nT1lw6X5lX15gT0RAPTo7PURNYtrIv7u1sbS3ub3Dy8/V4nhZRT06NTQxLSsq\nKi0xPE7hw7mxq6mmpaeqr7i+x9piTD86OTc3OTw/QkVMTVbt3NvyWFBLSElP\nXfve08fBvbq6u7/Dyc3Ky8/dVUM9ODY1MzAvLCwuMz1Z1cG4s66sq6mpqq6z\nusbR9lJHPzo3NDM2Oz0+RE1baP3pfWFhWVRYWGPm0srEv729vb2+wsPFycvR\n3mxMQjs1Mi8tLSwsLTA3QFjMu7KtrKqqqamrrbG5wtVfSkA7ODUyMC8xNDpB\nTmN77ntsaWn78efU0dDIxMG9u7q8vcLFxs7U2fViTkE8NTAvLi4uLi8yNTxH\na8i7sq6rqqmoqaqsrrW/2FU/ODMvLi4vMDM2O0ZYeuva2vxqb2/v2s/IysnE\nv727urq8v8TIz9vmdFNDOjMvLS0tLi0sLjE2QnHGtq6rqaipqamqrK+2w+ZN\nPzk0MTAwLzEzOD9JVv/q9fpoX2Nv5dbRz8vKw727uLi7v8HCxMXL3GtPPjUv\nLCsrKyosLC44Q3jCuLGtqqmop6iqrrfF319ORD04NTIyOD5MZm5eVU9MU2BY\nT0Y9PUNR1r+7uLm6t7Szs7a/z+D4eXtiSDctKigrMC4uLi42S9S4r66urq2r\nq62ywdxYUGFdbFtCRVBY3dHd22RNUEU/OzMxMTI3OkFf07qvrautsLG2usHc\na09LVFpaUTsuLi4uNzArLjI/18W9trOvrq6yub7J3elxZ3rr08nIy8vMy8nU\ncUw7MTAvLzEvLjI7TNzDu7Ktq6yutLq+yN1xWF3w4tjaYDgsLzAqKSUhLkVN\n1MS6pqClqrW9vchbOC80P3fX176zrauwvL3A2ksxJiMmKSsrKjBOzr63sqyn\nqK21vcPJ60hDTF3Zz8y/v2gxLTMsKiQcJTU/6tq6pZ6hrLGzs74+LzM5TlpW\nzrasra6utLbISDcvLCgjICQtMzlH+Lqurq+tqqqvvtTa311MSlHnzca9u8RO\nLCw0KSMeHS5ARk7PrKCfqq6urrpMNTtLRj9I2bavsrSsrLfNTEZENCghIiYs\nLS46bMW8uLOsqKuwtrnC3WZUWVdMUta9ubvMRzE5NSclHyIvMjQ+3raqqq6t\nra21xdfLzmdbX8nAyNTOu7/M62VzVDksLjAxLywuOktKVte9sK+ysK2vt8LU\nzd9NR05s6PFfdFY8QEdFRjoyNT07NDM4SWxjT+W7sayqqaenqK2wustqQTw0\nLy4uMjo/QUtr1tPfcFRQQjo6PENWaHXWv7izsbS0trzAxs3iZ01GR0pJREZM\nU1xWSD49OTItLjE3Q1PQua6qqKeoqKuyu8rfUz85Njc2NTc+SllcWV5gXk1D\nQkRIRkRLas/Hw764s7S1tre8w9Z+Y1BIQT4/Q0dGR05PTUhBPz9AQUVMZN/Q\nxr65tra4ury/y9vpemFOSUlNV1pWTlNaVkxEQENJR0RITmrh2NXLwb6+wb+/\nwsbP1NjybV1UUVNOS0pKR0NFRUZKTlVg7+Lb1NXV0tPb3uPq4uDY09DNzs7M\nztXc53JeWE5JRENERktKTVdcafd6+Ovq3dvb2tbQ0MrIzMvLztbg/F1SSkJE\nRUBBQ0lPXG/u4d3Y3fb36/Hm1M7Jys/U1NTU2uDwbWJUTk9PVllXYvVxcvxv\n5NjpY1pdbW5dZPj07t7Wy8jMy8nJdD89Ozw8MDA8TGV3+sS2tbu/v72+1F1Y\nUlNPTl/o4WlvevXX7fjd5+blZmn/anVyZGZfdt7c29bc1svR19rb0t3x7kcn\nIi4sLi0nR7e1r7GuoqOyzk5KSTUqLknPvLqvqKitwP5XOykjJS08RV2/sa2u\nu8TG6k1FP0v/avDHvLm8v77E3k85HxQfKyc0LUqjoqipr6ilyTAnLTtBOk+t\npKSoray05zMnKCstMEHItbi7v8reTT03OT0+V8m7sLC7wMbjV0c9SG/az8zA\n4x4WKzI9PyXin6WswM6oqWIpJ0jB0UTUp6Ssx17PeTgqKTde0cS2q63EQyww\nPzs+PEzP3O/IvrGvzVZVU1E/PGa4s7q9xTwZFzU+8VUtsp2mtDw/sbdKKCnD\nrb1QUbeuvF9O18DSPjxNcs7ra8K/zcpnTkxJPzExNT/tzce5u9Xp++3O32/T\nwLq6vry/NBMSOdi89SyxnKnJKiq0rFgoKr+rt0s6vamtzXvLt7ZAKS9B3tdu\nvq6wvUItLi8uLjnqwLzI1b/JW03mvLW+z8W8zlt6va2zPxUNLbq8zCE3naO3\nNx/MoLU2HiyroLk/TLijqmlEU8DHODA+yKyzzFk5OzQpKjBJxMXR9lTv1tzU\nyrmsrbvYSUz7bta3q6q6KA0PLeyxVSS5mp+tLB3fq9soHzyimq1URr+iqtdG\nRcfCRDY6bLa02DcrMzs3NTlzy3oyLDl9sK2zqqGlsz8oLk7OzsSpoKjbFwkY\nPsWtLSmim6G8HiHEscctI1yjnrNAMNSgoLVENf+8zjsvP72w2SwlKzhZZU7n\nz+o/KytTrqSkp6mxWS0mLsirqaqqru8XChYtvqQ+OKihn7cjJE7AuUAmMrml\nqswxS6WcpeItMd7AdT8/y6y4OSYhKmS4xOFnPTQyLjq/railq7TVNy01bLKq\nrK67LA8RJ32guilurKKjPB4yu6y9LR4us6WoxjrIoZ6tPSQrzbPC51O8qcAy\nHxso36+uwG9RPzAnKEqxo6CnsdQ6LjPqsquuwS8UFCxeqKkxOcOtn7grLV2w\nrWwnHzC9pqrZTL6morM8JCrfsbDGasK7ei8eHTWzp67OPTpJNCksPrOeoKi3\nTD08OWK5rrUvFBUqzqSuOEW7qqS/MTFQw7nZOC0yT7yttMPJv7m72zsvNv2v\nq7LDX0o+KyMpRrOqtug/O0Q6NDp1raGntGUwMkJ4ubC4QRoVIEiqqUk22Kie\nrEIpMt26vE8sL3a2rrPN0r3CzPBEQENNyK+rr9Y8NC8sLTNIyLa3yF0+Nj1F\nSMWsqKq5SzQ5Tr+utFQfFBsxvqvHPliwn5+3OSgsQNDJV0Jpuqupuf5WS1Z4\nTUpdacy3rq6+QysmKjhW72ll1cC92D01OUfPtayqsMdINTdVu66w5iUXGSRA\nu7rJwK6koqvLNCYkKzvxvrCsrK+81W1FPkJDYs3KvLSyssU8KSQpPM7LXkJC\nesbG2mRb3MW+vcTI2lM8O+uzqai0QR4WFx42vK6usa+spKa3RCIaHS3MqaOn\ns87LubS75zgrLTvOsK2vwkUwLDJI+lY9Nzg/Tm/SvK6qrLfYPzc7PD1GaMCu\nqKu3xk4oHhwfMtC3ur++ubO77j41OEbr0dvTwbevr7W/4X5YVOjm6WBBOTpI\n783VUUJCSUxBNi85fritq7LOTj86PEJTzLy7vMLKzNlVPzlAXdrKyszJx+FB\nMCsqMkFOd9TCta2tsbnKdk1P5sO7x1xAPkz85FdDQkpjbkc2Lzlayr/G1+De\n4OxmVlnky8jEw8C8u8XpTD4/REZSe9jDvsntRjcwLjI+X8m9u7u5u8TRa1r3\nzMz2TT0/XczEz2ZKTFteTUE8RFltalj3zcG/4E1GTvXY3m5a78e5tLfFakY9\nQ1r+39bg//1wV0k9OUBf0MrY//razMvR2+T4XU9HQ0htzMbO3eXj435dV138\n621SSU14z8vXZE9UYFxWU1Vh4czFwsfWZVZXYvju8fvw7vxeTUdHVeTP0uld\nU1j71MvJz+9TTU1TddXO1O1fWVpuenvk19LX/VJLTmfc2eprZHD4dWNcWVx0\n6Orp6u/t7/f1e2hjZXbs7nBeW2nu4uhsVllv5tPOz9TiXUtFR1LqzszQ2epu\nbPf0Z1tk7N/vWktPZ9zMz/ZZUlJg6uD/ZmViYP3c0MnM2nROR01b/dzjbmVv\n7NLQ6VhJS1d0083Q1ulmUk5Xd93X3XZfWVVs2tDS4WxeW11bWl5seunj/Wtt\n9d/Z52xfYW9x8+Db1NLbdlVNTFNeb/br73b/9nVsZGR08+/z7+vn7nRmaf3g\n19jf/GRcVl3v3t7qbV5dWlRYW2fz497+XV752c7O4V1RVV7q1tTT2OxmWltk\na3NpW1xp+uvl+mhr+Ofp7n5pX11faG386d/e4+X0/fry6ejo7fZ0X11cXF1q\n8un1bllPV2L64uDpe2toc/Dr6ePf3u1yam3z6+1oWl1q+X327O7t/2ddX2Re\nX2Rr8t7Z2d72YVxhdt7W19nb4P1lX1pYX218emthXV5r+Pr5dWZiaPLp7HVp\n9d7b2+n7ffXxbF9ZXW7x393e7Pl2ZXL+aVpWVFdq69/c4PZvbfDf3Nzzal9f\nYWRsbHLr5eXsd2dZV15oevLqfHX3+f9nYGN65+vu6+Xe3ed0YWJ35t7e5ftn\nXV5kdf98cWpiXmNndHp2eGtmbe3f293m/m1ka3d369/c4u5rXVtebG5oZmt2\n6dze7GtfY2d19P/w5uTg8GpeYWhnZmZkbXro2tTNztbffV1PSUdITVl86dzY\n0szMz+NlUUpCP0BGUPTOxL++vb3AzHVHPTs+SFNu4dXMysvN1+R5XlFPTU5U\nXvfc2+12bF9fbXj5dnPv+erk7v97aFxYU1NXbO/e2NbQ0dnqa19fa/fvdXJ1\nb2xpdvXv7N/e4+/6/WlcWlxfY2ReWFdhb/zh1tHS2elxXVlcW2BeWVxq59nW\n1dzf5vL7/nx9dGlsZmJxe3h8dXjs5Oj2ZF9cXmZtbGt2d2ZhaX7g09DY3d3f\n621YT01TZu/d2t7nbWFdW11bZHX17+zi6+vf5PR7bG5769zc6GxbWF1eXWj/\n6OfqbVxZWV9r+OfZ0s7Q3v9fUFJXXWv55t/c3+hza3l2d3NvcnJxbGJibGtq\n++7o4N/vd21qY11dYG3y3uHpel9iaX75+fjs2drkcmJjbHR4dfPg3+xrXFlU\nXHLu3t3e4+b9bGdkdG5qZmpvffH87fh+fF5aXnXh3Od2ZVpeaGxvfOba2drZ\n6P1uYldZZHnh5vFxaGtueHD+cWj//f91c3T77/r/+Ozm6O39amprb3F9fnry\n6etuaWJcWlRaYv7i2tjj7fX+bmVnbHRt++/x833+bXr18eHj5u7v7u7v/ff7\n7Ot8a2JcXGd2/PD2bl5PRT04Njc6QE/tyLu1sq+wsba8xdft/fzv39nUyr+7\nurzKTDEiGRUVGB8qQM2zqJ+bmJeanqrENyEcGx4mMUzMuK6ppqSlqrHNSTUw\nMzlDU/LNvbOurq+42DsmGBARFBsqP8SspJ6Zl5eboa9WJRgVGB8v0a2kn6Kn\nqa+6zUYyKictPtCvp6aprrrH1XxcWk9GOCkgGhYZHSQ8Z8Cvr6min52fqbw8\nJh4eKDvGq6amp62ytcbrSTEvNEHGrqelq7jZQTQvLzM6SeXWVTcqHxwfIy5L\nYMK2sKaenJ2jsFEmHBsgMGazrK6wuMK8v9htPDI6Tbuln5+ls9c+Ly4tMztL\nx7Svs9c5JBUSFhoqSOWwq6WamJmdq/8hFBQbK82nnZ2jp6y3vUoqIBwgNcaf\nl5qgsE04MzQ7MysqL+ymm52jtjkYCgoSGzeyqKGdm5WUmqHDIw4MExw/opeW\nmqSpqrPDNBkRExs0qZSRmqlnKyYvQEIyJSU6qpSRl52uPRQIChAcL8Wkpp2T\nk5Sap9waCwwTHUCklJSYnKOkr+EqEwwPGSuqk5CYpW4uKy9LQjEoJUCqlpGZ\nnqvkKBELDRIdLV+lnJWPlpqjyykSDRIaK8KelJaYnaiuXCkbEhQcKrybk5ae\nrz0nIyYwOkJIXLekm5qfp7lfMh0RDQ4THzK5nJiWmKCpxjMkHBkdJDy/ppub\nm6CsuUc1LCkvN266rqqzyEktLzVLubOwtcrc4Ma+vMPeZ0U0JBoVEhknNq+j\npp6ssa3Fuu0uKB4iMeqlnZqbp6y+xMXmVC4nIyhDz6+tt7zGvrGzvE8qHxwl\nUqmdnqWuzjAbEQ0RGiFNtqmZmZiXnqXCLR4WGSAvxqyfm5yanaKr6i4cFhge\nMeGupampra+wxE4pHBocL7idmJyhq7xIIxQMDBMcL66elpOam5+qtD0hFhIZ\nID6unZWWmpymrL8/KBoWGB81vqKfoau+y2BIPiwmIydIrZyZnaSv3C8aDw0Q\nGilepZ+cmJ2cn6u7MB4WFh0mT7GimZmYmZ6kuEMjFhMWHjDNq6akp6qrtMc8\nJR4dJ3emm5ygqrTUOyQXDw4TGynYr56YmZeanqbLLxsUFx4v1KiamJeZnqGv\n0zIbExEWHze5op6fpa/FZjktKSctULSgnJ+krsBIJRcODRMaJl28pZqXk5SZ\nn7kuGBIWHS1as6GdmZaYm6W8NhsSERcgN8Gsp6isrra80kg3LS5Gwqqkp625\nzFMwIRkREBccLF2+opyZlpqdp8c4JB8fJjNBwq6nnZubnqq9PiceHB8mNEda\n23TYv7musLjDX1bbvq+utL7aUj4tIx0WFhkbKTRiraedmJman6u/RCwlJCYs\nPm+4pp+cnKGpuVMxJyAgIiUrLzr7v66np6mvu8G/vr3D22xJPjYpIxwYGxse\nLjButK2empqanqq3dzUvKyksMTnlsqeenaCos+pENywsKCMkIyo83rOop6iq\nr6+vtrvXTj40LyslHxsbHh4qNj3DtayenJyboKqw7jwzKCYoKzrcs6afnqKm\nrL3UQi4oHx0eHyk6+7SopKGiqKqvu8Z0QzkvJyEeHB0iJScxLz+7r6CZnJ2e\nq7C5XD4vIyEnL0y7rKeioaSjqrzcNCQgHh0iJitA0LKjoKKlq66xucpiPjAq\nJiEgHx4iIiIuNVuwqaCbnZ6fp668WTkuKSksN0rWtq2noqSorsVVOywnJSIi\nJSw64rWsqKWnp6ittMddPzYvKCEfHRwgJCQsOVWvop+cnaGjp6u13UQwKywu\nLzlM0rOopKWrtMbfYT4xKyIfISUuUcO1qqempaaqr7zoQTQvMC0mIB8eICks\nMEnSua6sqqeln6Cnq7nkXUMzLi0yP/q+vMG9uLaytc1NNywnJSguOlTUxr2x\nqaSlqrbPWktJRz43LiQgJSgpLC4vOUf+yr2uop6eoKWmq7W+aDs1Oj00Ly89\n+8K5ub7L3lQ+ODk/S0hAPkrRu7i8zNPR71JGQUdORT0/V9HIx9Lo2+tbW2/d\n0tl2W2dnV0g/QUhSZe3Z29bQxriwsLjC2lxSVVhnYVBLUunIvr7D2VlGPDw8\nOjUvLjI7UdrFv8DBxMfJzdHR0s/HxcjJy83Lzth3TEM7Njc7RVJUTUhHS1x8\n6+Xs893LvrWvrq+0vMfV7WFLPDc0NjxCSUpFPzw7Ozw+Q0/uzr23tLCvsbO4\nvcLXWExKS2TYz9L7WEo/PDk4NDIzNTxGWt3PzMrIyMjHztLS0snDvr29vb/E\nzNpzU0pGRklJSkxLTUxKSktIR0tLTFhw4MzGv76/wMLEyMfO2N7j6vdqVUlC\nPjs2NDU2Oj5CR1jt08rDvbq3t7m8vb3Ax9HY3uDf+GdhX1hQTkxMTkpGREA+\nPz8+QEM8QN7fasG4ubW6ubG5vbq+wMl7TEI+OzUxNTY1Nzc+X2P1x8jHxtfb\nzNL0/e/TzNrQv7q6u72/yNPudGZPQzo2Nzw6OUNLS01KUuj97MvIys/TysbE\nwMO9ury4t7y93kM/Ni0sJSYxLzdQb766vrvAw89cXE9IT07jvrq3tbO0uL/H\nyeJfW1ZSTEtLS0c+ODY0LzE3PE78fsq9w76/zMbG0s7Ixb+6uLa0t72/xtFr\nTz8uJycrKCMuP0Hy+c+3vr+/wMRt8tr/09PNvr66u7/Ay9TsdHxRTE1LRT5F\nSD9BPT1FR1V338/Y3vhLTtXeZ8vExr7Fwra4vbq+y9fuWFdfSk1fT05bTDkr\nKDY8JS/WUce8vqmyvLvDwz9C0UtZdOm+ysfFxcZMSks9QzlE7WPoetbE/Pve\nfVhETFti29TBucfSz91QNjV2YDzmv76+19G/40FO+kZDbuvNxd7Iu9F3zs9J\nOS8uVkUq1bxbvdK/vEvU621GL3ZON19uvspXwMTLVU7AX1zZ77vG0cDOzk1G\neERES1XO39fAv8fn5uNOQz5GTDcxT+85SM/f1+3kvsT3xrnN2r/Dy8jMwMbs\n1cfaTEA1L1MuI88/Ld1J1s5Xws3KSj+/RDnL3M/Qy7K6v8a+ukpiw1hZeOvN\nfO/bXmBJR049SE5Na2fNyWbp3fFMRWtKRFA8XcFL5bTI173C1c/xZO1YWM/L\n6Ma9yNHb2nlJRU08LD5tKDfIL0PSZNJeyL/J1me81z/axW5P3MfU5s/Bym3b\nv91a0cpnVHhfSUttZ01f3vxc383rfNvc/1xbZWBGP0xFO0RJV95W177X1b/B\n0drIv9R+xsTr48jZfs/oc9dpS0Q0OEIpLkwvOWFv9tK7wsbAxMnX6uLRVGTH\n4dfEzcfA0dDQ5mlPZ05JV094Wl/wWFtOWWdYZ23V3Gzf6fpsbWdWUUlPYm3f\ny8nR1sTTW87hSG76S1zuXnXxe+/o7Nzb8NvvZ/XZZmjNYkhfYD09ZD87WmRX\ndc/LzdfSzeNhVW5URVRm+fbVxsfHxcbM0tfO3fjY9Wf+325WfVtPUVNMQlFQ\nRlhZT274Z+fb9Hvl6nXk5eLT2t3X0+lu3PpZYFxaU09ZVlBXZ3z049TR2tfV\n3t7e9+fe5dvPz9XR1ef9WU5URTw/Pj4/SFROaPzw497e8tbV3drY0Nra1s/L\n09bNy9PPzNLT19rj9W9PTUs/Pj8+P0dJUFxXaHzo2uXOztzR1+Pf4v7r33F+\n5Prs3N/s5e1lXVlNTFRMTF5eXXvZ1tnOzM3MztXc4eD3cXDu3/rk1OX45/pa\nT09JQEBFQj5FS0lJUmxmcNzSz8zIx8jJy83Lz9nb2dna0tHT19ra5XJdVk1J\nRkRFRkhOVlpbYnN7/u3f5ufe5unf5+rf2+Xp3+L2aG5zampjaWZaWFBQWFJV\nbux85tLUz8zMzczO1dTV3Oju//92ZGVlZl5WXFxRUVFLR0dHRURFR0xVW2Xs\n2tbOycbIycnJzNfb09zm2tfa3t7d3uPt6vdvZFlZU0tKS0pISVBYWF/t4+fa\n2d3d4vJ6cmBeY2RobGx+6+3y6e5manpwavvi+fzk4t7h5d3e39zUz9XSz9Lc\n3+N+cV9RTUtGRUZGRUhNS1JZVVhdW1dgZ2nv5tvU09HOzMvLycrJytHPztbZ\n2t/3935fY2FYUlJRTUxMTEpMUlJTW2lveOHd3NTb3tnZ2dbb39jb497fe259\na2JcVVJWUE9UTkxMTk1OUVVf/ObZ0MzHx8jIy8/T1+Lh6O/vfnFybmdvamhw\naF9dWlVQU1RPU1RYX2z3+Ozn5enn6ffw9/Xu7u/t6u3h2tfd3dvf6O/wfnp6\nbG1ybnN2cm9kZmxrZWn/b3BsX1xdXFhZV1JWW1lbZGhyfnvv8nb8d2xo9Ovq\n393V1NHNy87Rz9bc3ePs7vludG9lYl5fXVxfX2JfXl1eYV9fYV9cXmtiY//w\n6+Xi3N3k6/B8a2pkX2JhZGp2eXj5eG5taWhlaGx88vLs7Ont+PHv9/bw6+r0\n7eTo7ern5vBxc2hlZmpqZ37u7Ofp6PVzeWtmY2Fsa21ocO7u7u7m6PLv9n55\nbm5qZF1cXmJpZGh0dvjr9HN6dW1wdHJ39n55+vh+/+7r8ezz/nVtcmlqbWht\naXN6dvtudvHs7fDs9vLv7+rz9uzs8fx+cnz5/Orx++vu+Htzbm5uZmZoaWxv\nfPv//H13b210cnJsamRdYWRmaWx5//n2+vz9/fX8dnp5eHz6+Xpzd/339O/r\nbWrb3vT85t3p++bl9H399HZud/1qXGJ5bGBib2VaW2NpZGb36/fx6Obq8ufs\n6ur56/F6eXR0bXf6+35za2RlbWZeYWRmZm51bnf+++7o4d/f5u76eGpmaWZr\nefPu+vXq6fT+fnV3dWRia2548+Tn6u75d3Z2bGxpZmp7/Xl9+O7y9u/xfX37\nem1pbG9tanlza3Zvcm9zcmpuePz07/X28+zm6/b/fv37enJ0dvx3df9ubW1k\nZ21xb3NybXhwfP7z7PDp7fLq8nVzfn5xb3Bvc318cm56+u3m6+3+bWlpbGpx\n8u3w7/Hxenl2Zm1ubm5vcXF2ff5+env5+339dGp4+nVyeHl5bm9vaWdsanL+\nd33w4evq3env9Gd1bHL+7ODt6XxvZ2Joa/7+9fnz/nJzZ25qc3l3+3nyePf/\naWhndXH47fJ5b21nZWlyb3R6/Pj57u//7+nq5+vv935ubHN1fnP57vR9cXJm\nZWRjaG5tevnz7v13c3V8ffH0/Xhzd25ocHd2++zp+PB0edRrXPj29flzafbu\n82xsePf5Z2xz9m9hanL4dWxwdXp+a2/v7+jw6+Tp9W/+c3lva3b/6+98bmhq\naF9eY2x3evf07+r0//94ePZze+3ydHl7dfx6ev/5+3VsZ3J6fH17+/Py/X54\nbnJ+9Xx67Px8eXZvZmppev56enb9fPn8+Pz99P/49fb//3Zw//x9fnj//21t\ncf10bfb/bv7+cXf7cnB9fPf69/t573x0fXf/dnF+/nRscHN18/b07Pp5eXRv\nbntxdvn6+vz9bmhoamlvamZqc3d6fH38/vj1/fzx7e3s7uv2fe/2e3hqZGVu\ncnL7+P309Hh5/n1vb3lze/v3+vH08/98fW1sb21qbHBqbHh7d/Lp7+ryfXj9\n+/x3c3b1/Ht+cXt1eP5tZ3H8/Xt2+fb6/v98evl9b3R5//H9cmxv/XZua2xq\nZ2tpZ2tybXL59e3o5+zm5+/u+3pxcHJ5cm339enk7P12cGtta2VkZWZodfjy\n8Onv9fd6b2xxbGptb2x09PL9evZ8dnV3fX7w9nf9+X56dW5z9fD18PF9e3f5\n9P74+nt3eXtxb3v/fH1ya3vu+Hl5eXJybmhpa29oX2hvbvzz8Ojp6O3x8/11\ncndnZW13+vv5ff/0eHl6cG5rbWpu8vHv8/d3en11b3L69uzx9O3u6fptaWll\nZmhncnry7u3r83hxeH18dHV17+r1+XRzc2tpbm57/HlvfPh4b255ff/7dHz7\n/P726vL57/l2eG9qZGlqbXV1cXfs7fbs+25y/3xydXL/eHn2/nZsa3d8fHz7\n9H3+eX5tb3hpev7+fPjv9Ozy+/37+H59fnttZ3F7dHd0bm96/HV1eHFvfPr9\n+u/s+fx4bXT69Pv19nZwbG5ya2toa357ffn8+vDy93z8/np5d/x3c3l7dnpt\nb37//3T17vr+ev317vR9dm9vc3f5+/3w+P52/ndqbWtrbmprbXT/d316fH79\n7/1ydv1+c3b+//bzeXV0b3J4dnX++3Z5/XNrcnl6/u7s+Pft7vPv6+/t9W9v\nenZtZmRmcHh1c3Rvb3d1aG39e/7+9O32+fj/bGdsbXJyfPTs9P38fvz78/Z8\nd3x6fP728vTv9ftvbWhsb2lsbHp5evn3e3N1cnJsb3X79O7p7vb57fhvaWVq\nYWNtevl99O//9vL6/Wpvc3L+fP368+7w9nl4eG1tc2xrb3d6eH5ubG549+/u\n9fP19fr0+3n9ev17eXNoaWx0d3t5cnh8dG1qbXN97+zr7uvq8/X/eG5sdHlv\nc316dm5saW5vd+/z9/Ln6/Pu7/p3/Hh7fXJtZGppa3NycXJ8c252cHl6dvNy\n9exkeej/4ebp73pva2hganp7+HVrZ2lmZ2/75uPj6e3xbXNyent4e//7fX38\nfHR2eHt6eG9ye2xnZGV8/nr06ebk6fT+bG53cm9zdHRybWxrdXz67+/t7uvs\n8PF5cXpvcnhx9vj6dnRsbXtua3d3/Xp3eGp68Hzz+258cmx8c37y8/j/em1n\nZ2ppbHh8\n\n--16816888-2078917053-688452093:#2321--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.47.msg",
    "content": "X-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.1.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Thu,  9 Jan 1992 13:30:05 -0500 (EST)\nMessage-ID: <MdP9Ghe0M2YtMbPm5Q@thumper.bellcore.com>\nDate: Thu,  9 Jan 1992 13:30:05 -0500 (EST)\nFrom: Nathaniel Borenstein <nsb>\nX-Andrew-Message-Size: 438+3\nMIME-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart_Boundary_MdP9G7i0M2YtQbPlt5MdP9G7i0M2YtMbPlxY\"\nTo: rsw@cs.brown.edu (Bob Weiner)\nSubject: How MIME looks in AMS (MIME format)\nCC: Michael Littman <mlittman>\nIn-Reply-To: <9201061308.AA17408@pebbles.cs.brown.edu>\nReferences: <9201061308.AA17408@pebbles.cs.brown.edu>\n\n> THIS IS A MULTIPART MESSAGE IN 'MIME' FORMAT.  It may contain enhanced\n> text, graphics, or sounds.  If you are reading this warning, your mail\n> reader does not understand MIME format, and some of what follows may look\n> strange.  However, the plain-text version of the message appears first,\n> and can be viewed with any mail reader.\n\n--Interpart_Boundary_MdP9G7i0M2YtQbPlt5MdP9G7i0M2YtMbPlxY\n\nThis is a MIME message.  I'm composing it with Andrew, and at the end\nyou'll see a picture of what it looks like when I read it with Andrew. \nNote that the word \"read\" was italic the first time and bold the second\ntime.  The word bigger is in a larger font.\n\n                          I'll center some text\n                           and demo that next\n                         Because italic and bold\n                          are getting quite old\n\nNow for a picture:  [An Andrew ToolKit view (mailobjv) was included\nhere, but could not be displayed.]  and some audio:  [An Andrew ToolKit\nview (alinkview) was included here, but could not be displayed.]\n\nThis is what the message looked like on my end:\n\n[An Andrew ToolKit view (a raster image) was included here, but could\nnot be displayed.]\n\n--Interpart_Boundary_MdP9G7i0M2YtQbPlt5MdP9G7i0M2YtMbPlxY\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\"\n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nThis is a MIME message.  I'm composing it with Andrew, and at the end you'll \nsee a picture of what it looks like when I <italic>read</italic> it with \nAndrew.  Note that the word \"<bold>read</bold>\" was italic the first time and \nbold the second time.  The word <bigger>bigger</bigger> is in a larger font.\n<nl><nl><center>I'll center some text<nl>and demo that next<nl>Because \n<italic>italic</italic> and <bold>bold</bold><nl>are getting quite old<nl></center>\n<nl>Now for a picture:  \n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: image/gif\nContent-Description:  Jessica Rabbit\nContent-Transfer-Encoding: base64\n\n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\nAAAAAAAAAAAAAAAA\n\n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: text/plain\nContent-Transfer-Encoding: quoted-printable\n\n  and some audio:  \n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\nContent-Description: Would Be Cool\n\n2N7gZl1cdFtZWF/p3svK099w63XR1W1xY29gY19eXFJUT1hfeXJ57fZ1fN3n/u3r6e7b3fB7\n7eJ76uJoaWlxbGdq9+pxe27vf3Lf9fDu/1lt4HhheNXhYfXqcWhraW/+3+n7cXnkYmZ8bWx7\ncP7rdX/16Plqefd4XWJs+uTd3eJlaPnx6Pz58WtYa+Tn7+rl/lly+fl7cX1yfnzb3ePn/Ovm\n7e98WVhmdnF1dmlwe3Hz6fz58XJyePzm6dzZ7Hxrbuvq6PNobmlid+jt+f5zcGtq+Nzre/v0\n9+7k4PttcG1iaPLo9mdpZnR7+ev0dXL56PHq3uvt/vbl7u5zdm9mb+5pXGx2eG99f3xyfnF5\n7OfreXJtdu3k4uXr5uz/7urvevvu9X1+6v5yb2ZqZG1+fGZtdXH5dXh+eG5/8vX99Ox+eP/n\n4vV0f3zz9vLtdn5+7/h9/XR8dHD/+ff3/HJlc+3ybnF8/vjr5O7zdXJ4//f19v3/fnhvcW1t\nem9tcvp0aWxua//xeH7y8P759/Pu5/H16+vs7urp6ev3e3NtfXRpZGBtePl2emtoeHV++/14\ncHJuePr19f/u4OTq5+17fvLw+Xly/25sd/DteXR1cG1983tta3D/bm9xdnt1dvr3+vPt6OXg\n4ujs7+/o8PDq7HtjaG5qZ2p0aWRodXT48P1yZm768nx4dff+//79cnfu7e7z+u3s5uXu6vT1\n8nhxd3r/f3j4+f5+ffjy8Ovr/X326u/9fHd0d3J+cmloZG1x/vn8dW5v+e329/vtfvLu7fPt\n8Xz0+HPte+xy6fft5Gzpb+F36PZu6uVOwUa3PDXD331EUWbx793e7Pzizsp/aVfJ5FHX+nZY\nXPx8Y/rrZtnZYHb97fJ9+mv25WtZ399a7ftK379P6Vnl5/Fi/cJYWU9q3NzzZGtp6evg6V9n\na13v7Pxo/3Tw6Hza/P798ur9537u/e/6/u/1e2t0Xv56ePlvePdz//t3b/9pYm9md3Pr5eXo\n733v4O377v/9+ev9dnBtal9mem9haG1pbXZ87f5vZvHk637qcHLn5ut+7url2MnQ8FtUXPt6\nV09TYurX13tfW+vf1+VjUlZueuFsX2jq3d/r/+585Oveet7d31FaWP1sX0tRdeDU8u3f8XTt\ncl1mdX3q9XR52s754uzZ6/l8aO3a2mplXPzd3VpNUuR7bVFW7t7VW2dY2ul8bEvf9cleUv3e\nyHlV4OHaU2jXz/lUYe/WdHrkZFvaa91hfMbG7j9x591lS+pf209c2OfqTnP7/fH76lxa4Ofi\nXl925sleX2LP2VJpb8nlVVn51PH8XmbT3fxvX/XfyldeVdPtYWpW1m1hVlzc6OlhWdna6WXx\n+PTgb1ZU5c9TXfPm0GXpU9jVU1tS1OxXWfXD5VtT2tPuXFXN6V5TeNdyXt7p4l/m0u75VG3T\na1jv1mpk//LsaXtkb25X5FxyZXT7bHNh3/DT2tfVbeTvYmBoelxhVNLj3vFfye9u9mxURmXt\nZV1h1chwVnPOy1pTbNDsb13h0vz4UOTPa1n73HlS5dxuVl3SZlpk2Pt0Ue7UUGZu395cbsvN\nYnj26fVh9/Rle+DSYNjkZORp3ltrV179XWxl5ezc6m798Wvtallsfub65trg22vy2nl0Y3Dc\n7WFffuB7W3Hu//t1f/Hm7mr63ef+/3Hibnd57etmaHN9+O/+7XhpeetgYPThYGn45H1dbWjx\neHFw3e117urYc23j6W7493Le5m/39F9e+vZxb1zy6F5c7+BacfXm9GD0+vxoddb2Zefh7Hj+\nfO99a+7ucnPueG93bO98XXvzX1dk3+tYbuHfbvvY5u53/mz+83Lw93Ly4OtmZPnoZl317v5h\naXT2/PR+dvFsZO73bG3o33hu7trvb27eYm1+d/Z3eO/nanH36PloY/P8fFxt8W506ef4evVv\n9OF89/fyeWB47G537el+/OzcYGjvdW1wcWZ93+H+8X15bHZpZHlu+Ovc9+rd//Dp7mtqeWhv\naO/meHh73f7vfmTdaGT/5/1wbH54Zm778Fnp62jl5t/o6Wzv8nZv6uvzZODfcuf25mv5+Ohl\nWndc/Xhe+PHpd3R16t/zb17o+Gvm5Hti7OtuYOTh6Ht97+fnXXLf82xtcXZe/Xf1ZGjedefv\n5/Tr6uNobe57dPXm7+ngfXxy/v1dXWLz/mL373Xn8HHt92l65WFj5+xk7t30+fhd5dxmZ+zv\nb+Tr9Hz0bXPmbGpweXj3bnTwcfrqf/R1ZnlzZfbueHnm5/HzffTk9F/q2/tbaONpbGVpb2tk\n4dxp7v3dcGr53+lmZercd/X05XN4bfttbG3oelnw5W1n9eR36nTs4+7q6et64HFqeFl49V9m\n4G1neu99bd5o//taauf6aHHmefN//u727nNu6PFwc/L8cd/z6+5u3HNl4Xj3aXr9aH5v7/r7\naW/+aV/v+FV57Pt873z26udvdN9ve+r4ZW3o/Gr/e/fwfe9v6Pby6Px7em9uannrcW/96fN2\naPB0ffNr9Otqdvvme2j972xs8+14f+7u7m17ePN+Z3jmemli6ulob35482ZZ7uJ3ZuTjcnHu\n4m1s8O7safbX72/+9/3ubHXofWP89/dn9X5ac2lvcGJ99fh2eeLtcG9kdvP6bW7o/G5t+eHv\nf+lxZ+Xu8en/7+l4+/rteHBrbe78b+PpX+vv7+/x/2Pz7mZofuxkYGh26GRgevlrZu7y7vf3\ndv989Pf49v/39Of1dfzo9mZl5nZ4/Gd85uV4+eXpb23tfnPob27r6u7t8/f9fnpldnB8fW1q\nb/D1ZXDjd3hv/fVkcH5ueH736Wttfefa/W3m7H3w9frx9u/69vLl3n7rfGx+e2praH38+Xpl\neW9uZW9r/nLtd3Xxcnb+8/Tiem3t7Xjs6PDz4HFqbX39e2xhb+X7X3b3aW3xeP1j8Oh0Z3rc\n43lv397n7d/scXVye3ZgdWl1bGp0aP59c3t1cH1vbW9lYXHq9mp6Z+bpfuzq4u309HV53uhn\nZezu7+10buXkb29+9GhkZWZj+P9qbnl8eu9zafv+93r56vnhcGz592Zu+npzb335+2398/Rp\n/urpcnV+8uxl8t78b/Z0ePps6+L7c/fjdm1293Fkevt1aW1xaO7ub2hu9/z/dfbu6n1qbebz\ne/Nye3Nx/vr44eD0/n546v5kcXPz9mRn/Pf7/X1+a2x6bGb34/p+5N7p79969ulxZ3Nvae7z\nZXF3+35fbPX7Yml25u9x+Pj+9/f7fG788XV18evk5vVy8up7ZW/8ef59bnl6fPhuf/Ntfu1m\nYu3o4e/4/W53bu/sa2/1bWR3aG7v+vvz/vv8e/b5/uzr/Wxx8fb+aGFs/Px3/Xz/7uPr82t8\n83hubX749Wpv8+7s92r+73r5/2tp+HVobH12aez5bP71fHv89+Dd6e7m+3h47uhsbW56cWlo\nZG1pa3lvZmd+bGR18vV9e/Py/Ojs5uF4/OLf7/vp5Pl66vF1+XRpa29xb19XYG1rZ2Jpdnd0\nbnn18vDs+nrr7vHy5t/o9/nx+/D0dXx7/nR4/nhtbGdhcP706uvv/vXq7O/w7vd2bHR4endp\ndHF9emdueHhydXH3/G//8P18fv/4d3v16eh7bv/ybW94a3vx8/Pj9vbt8enw8vDu/XN1+/R+\nb29sbG90b2lvb3D1737v729venRuce/rfHj97OrwfP/r5vD/9P1vb25iZWpv/2xtc//x7u3u\n8Ozu9uzydHD99/r68Ors9PL4e3p993F19Pj2dWh2+W9fXG/wcWRqZ3nxdHzu7/H+/ejqfHr6\n+XNxfv1ybnBz9vh0cvvo7vV9fXv3//nn6+rq9G9na/t+bXH+/Pf9ePp/cnVxa2549nhma/59\ndmx673dlbP7v6/t09Ofl9nL56fJ6bvPo9nN49fj7f/fyfl9ebPl+b3V8f/P4b3Du62tm8d/p\n+3d95u5sav3re2367f39eW59+HV6c2xuaGJm+fRub3328fP47/h1dHzt5unq7/Po5eXy+nlt\nbXj5f2thYGtoaHb0fWhsc/rv+W1qe+vf3+z1eXb6/vDt6PJtZm7p6nBeZHr1+mp97vNsXG3k\n6PpsceXodm/36eb9fvjv8G5sdHhxaW/8fmphY2/89f3v/PbzevLt7v9rbWp16e33en5++O7o\n7/j8cW9tb3Ruamx97vx7efTe62hgaubc82hpfePre/f67/VoXmPu6H5nXmTv6PN+eu7t9Xjz\n9nZsZGxzeWpkbW7+6un09Ofr9vvs3+Dj7Hdz+ent/HhsfOzw+W5hX2l8e3RfXWxlYGtrZ25o\nft/n5OD9/ur6ePB8aHX4ee/n+ml18X17bW13d/Tq8vv49/Pv7O54b317bG1vc3RvfPrz7fP7\n+fJ9+HRianX49ntramxka2ptdG1ub/jq7eTj7erx9evu7+PtefH5+nx3fnX99vp6a2NraGNu\nfXt5dHrx9fHu+m12fn96c3v9fHR0+/Dt6n51fPvv+/vx7/X/fvXp9v50aXJnb3Jsb3Tq8Prs\n5Op5b2z48vf+bXP/7/N2aGlze31+e//17/t9/fny6et0b/HzfXVuZWh7cXl4fuzubn317OHs\nenVtbPb2dG587+ftcm17fe7o/n74e3V5ZWRuaG5xb23/9XJy8uLlfnLy6unva2R49PDq6ft9\ne/56c3h8/Hdvb3n563ZgZn3n3/Rubv7w8evy+Wtt/vbn4ux7em7/6/drZmNpcndzal9iX19x\nfHdvcm94/O3d5fLydHPt4fT87fV57ePk+2tpfXhmcnh3eGt5+Hd8/W58/WtrZ3ns9Gdmd+7n\n9Plubvrl5u/pa2h1bmZpbnL6bHju7+L4a/r7/3B0bfbvbGd16+5w/f5ifu918Gdl5d/n5n5x\n4fZw7P5r+m9ddffr73hmb/P8fmdefP35eF313N5+eej16/5pfXBo9nhpaPrn+HRf/u51a3n2\n5f5l/+va6mBc7ejs9mZ2bt7c6/N7eOjQ3vns9dla3tpgUVnmQTg3577HXjtS3snY/lZQethY\n1bXIw1g+3LfB5O3lxNTRwt86O/LbKxg8qqa9Jy1TqM/qStDDQTFVtb/La07bfPi5t8tvVlS/\nv7uyvLlLOzA7vDsdEEqgpXomQ8SwOUXJs9k1PEy1vb296k3f3cu0vre5xbuuqq4wGi+owhwR\nHMGjzyp3sLg9LVGuujhBPXuvtrXHx11XXtq8t6irsFHJq18cI6woFiLJtq0zL7SzNzPVxsos\nL1+/srLTw7RPX7m1r6mwqKTCTz0xbT0aDiO3yMcwYs/KOk/Ne0pBQz/Hra29u868vs3Qrqqp\nn52lJh17RRALLqS4QS+2r1IdMLbHNjvRv7G9yq+v5O3CwLiuq6CcnsUpLLwiBhLDuz49raK8\nHyc/LSQ1sqiywaGjb0KvpLtMvJyeuMraVqUrBRnHLxqzpK/MJ1c3KBYtx7aus52fwketq9bB\nsaTJ1ZGpLp24BAtIGyQudp6nLVWtHhU7uV22q56c18KbqL+hptD8zLeppQ8CNDoYH1iipis8\npycgY9TKS7CSm9OvoKrCvavJPbqfp0gOByIUEkG/xrKvvcIzQrrdS7aem6CrpJ+rr7fCYj+1\nsDcZDRgRFB8rWrmvqqNtTMa/38aimZ2hnJyqssy4vDkyai0NDBwYFBstxMS8pqfW1revwr2f\nmqCdmJmfrba71zEvORMKGBsQFihTX0unoMzrtbfRWaycnZ2amJ+tsb87PufONRQZJBgRGCIt\nMECtr9uvnqi7taiqvLqhnKSrprM/Ly4uPisfPjwiKCwhKC4yTWXUq6qup6WvvbzKxLy7trG8\nsM87RTUxPiwwWjk8PjMzNTJBYcy4srazvsbNxcnKyrm2w8fOyk89Oj89OTxFXmVLR1FHRllq\nybi8xM9dbs1cYMjfvdhr+/dRdObbZEFK6GRdXs/SY2Hs7lzj19t9W0pOU1Zp0d5c/VhY2dDY\n1XZYW/3q0MTHz9He2ehoVk9y/k9VS0hYT2P+Z2N219/Tytd061Jt+UvWzc7P2O7XalFnT1dX\nXGjrWtzJ+NXX331cbufsUE9cVU5O1dFsZHjm2V3gTmn5XPDR3tHHysPJ49n2TEZNT9n7a2FZ\nS2dkU+lVeW9oU9zq/nFm5eHbyc7LytfPY1R6b27o4uvjbG1sVlNJQkhJVVjX29vg5vDW3N/I\n087UeW9ZTFhdXVzf4NvOzs5v7d1oSkhdT1HicmL7Y17hbs7l62JeWVtlae7b09jLyNzI29nb\nbOteWmRdaVdSZE9aWlpVVk1LV1hvcmzez87Pz77Ty8/e1/dk19P13tvkZ05WWEtJVE9DQEZL\nSn3z18/MysfGw8zS2NXnfu/o6+Xq73hoW1xJS0xVTUhPVVRbYvfwYNbTyszLy8nS1t3n0eHe\nbmtaVF9gUVpdUl1WTVFV3/jr3M/Y3ePOz+9b2dxtaPzhfFl05l1PT1FTTkv7bP3kzsrLy8TC\ny9jQ1NPrXWpYSEc/Pj05Oj4+Qk9s3c/Et7CurKuqp6y/1OspJCokIiEmODc32L+/vb2ur7Gk\npauoqqu5TD0uICEiISMmN2hezbS3t7i7usTIsK21ta6ss8BdNCklIh8fIitJWMqzsK+1t7rG\nybq1sq6pqq+vuEUqJScgGx4oLDhKvrTBua+xwsy1sry3q6essq2wUSwoLiMbICosMUW7uem3\nsrvO57Kzz7epqqyyrKtMLS0wJBshLSgsTsTBz7WtusnAt73Rua+3tK6utr9IMy4sIh8pKC48\nYMPCv7K6vr3HvMvIt7q1r6+1tcdDLi8wHyIrKi07dsHPvK69v7++vd3CtMS6rLW7s71UNjc+\nJCQ0Kig9UPNm1rLfc7u/5dC+vMe9rrK2squ8QktpMCMyLSItRDpAbMHPUbm/9sa9yM6/r7K1\nra2xxGBMSyooMSYlNjo0c33X4Oq80tW6xN66t7yvqq60qrRNUvstJDAoHy03LkNQXWRgv9Pb\nt7vJsLC0rqunrrervzRcXx8qNx0lPCcvVztQTti9+risxrSouq+osa6pubu1PE1lISw3HSI6\nHypXLkHqZb+5uKyys6ivtKuytq2zvrrSNWIwIS0mHicuJjpFPnzPv7qyr62xrq+1s7a7uri/\nwsPePkE5JiorJSYxLTFOR2LLwbmxr66ts7W1v8nAwtHIxdjP5T1OOiwwLissMzM9Sl7Ry7+2\ntbi0tr2+vsnNz8vT39HPfnJjQkM9Nzo6NjpBPklaZOnX0MbFwrq8vb/ExMrW1+ZjX1tcXGBg\nfmpYU1JPRUFBQT9IV1hr29PLxsXAw8fL1uDfdlxzZmTg2ODe1NPT2d7udWNcT0RGQz9EQ0RL\nUV18bV29z0fKu8dvv7nR7cG94/nKy2xs0+hUT1hJPj5BPj4/RUtOXO3j2M7KxcLFw8LHyc7X\n2epsbm1fWVdYVVFYXF1dcvZubF5WXl5effD939vd2+P+7un86/Z7bfl1a2R+enXp5tzU1tPT\n2djb+Gx5Y11TTU5NTE1TVFtrXVr+2939/t7a2M7N0c/S2Nfb2ebtYmx+ZmNdYVpTTj89a9De\nSm3M0OHhzunv4dlqUnfR0F1NXtPfaPTMydhyW2Rhc1RETXhfWF/5dGZe183f5/bW7uDu2ehP\nZPvof2vm0VVEd7241kQ9TO5X389cT2LMwdLP0t1oQ1rt205CS3B9UVxv5mlg4NPVbnzf2tby\n/tzez9rW0vr1XXVvVfHTztxVbtzSZ0xET05APTtESElKW9bIxMC+urq7vL/Dzc/X+tfc3N5Y\nbFlHQjg3NTIwMzU5SFl45sK4s7K3uLm7xdLk59Ta2c/Gu7i8w9BeUz8yLSgmJCcnKzpN08C3\nsKuoqaqvub7I5F1XT/LOyL69v7i4fks9LiwoIR4iJSo7P3m+r6ilpKelqq+53VJJRkFMYNS+\nvbq3uMVnQy4rJyEfHyInM0L5u6+moZ+go6m1vOhIPjc2OUZvwbazr6+1zlY7LSkjHh0eIik8\nWsevqaGenqCmr8DdRTgyLS0zQ9q1rKqmpqmvzEcuJiAdGxobHyk+1bCooZ6dnaCmsc1EMi0p\nKi01TMuxqaOgn6Ksw0gsIx4bGRkaHSY22q+mn52dnZ+mr79NMismJSgxS8ixqaOgnp6ls+oz\nJR4ZGBcZHCEsQ7+roZybm52hqrbSQTEpJSUnL0vDraOfnZ2ep7V5MSUdGBYVFxofKj/IrqOc\nmpqbnqWvx0s0KiYlJiw83bGmn5ycnaCsxj4oHhgVFBQXGyEtULmnnpqZmZueprDMSDIqJiUn\nLTzWr6WenJydn6vLOSQcFxMSExYbIS5TuaeempiXmZyircNPNiwnJSgsOu62qKCdnJ6irdA4\nJBsXFBQUFxsjLlK8qqCcmZiZnJ+puO4/LyspKi04YL+up6GfoaWuzDwoHRkWFRYYHCMuS8Ku\no56bmpqcn6Wvw1s5LispLDFA676vqaamp6y5XjUlHRoYGBkcICo55beqop2cm5ueoam1zkw0\nLSopLDJA9ryvqqamqK2+VjMjHRoYGBocISw+zLGmn5uampueoqq69T4uKScmKS8+5bitp6Oj\npqu9TS8iHBkXGBocIi1CwqyhnZmZmZqepa/KSDMpJSMjKDBKx6+nop+ipqzFQiweGhcWFhkd\nJjbpsKOcmZaXmJugq71MLycfHh4gJzZvt6egnZ2eoqnAOygbFhQTFBgdJ0S/qZ2YlZOUl5yk\nt24xIx4bGx0gKT/Eq5+bmpman6e8NyMZEhAQERYdJT65pJmTkZCRlpynxTkoHBgXFhkfK0yy\nopuWlZaXm6OyRh8WDw0ODxIYIy+9oJeQjY6RlZ2pvzcfGRMQExgeMeSvnpmUkJCTlp2zRiYX\nDw4MDA8SGi7epZaQjo2Ok5ihxjYgFBAPEBcfLGGtoJePjo+Plp2q3i4fFAwLCwsRGiFAsqGU\njYyNj5iltEklHBINDxMaL++5pJuVj42PlJuqvU8rHxUNCgwOFSApObeflI6NkJadrL1cJRgS\nDhIcKD3JtqaYkI+PlZ6jqblSKxwVDw0OExYdJza9oJeSkZSanKW6RycZFhYYHio1b6+impWV\nl5mcoai6Py0mHxoSDhEWHSouPbyglpOUm5+gq7pFIRoZGiAoLjjZq5+ampybnJ2hr9o9Ni4m\nGw8OFhofJCExtp6YmZuem5mjujsmIiMhHyApOMuurKWenJqcnqSqsdVGLyIaEhAVFxkcHjG+\npZ2bmZeVl5+tzDwuJB0bHCEpM0/HrZ+bmZmam52jsus7Kx8VDw8TFBgbHzi1pJ2ZlZORlJyp\nuWMwJBwYGBseJDBesaCamZeVlpmfr85GLB4WDw8SFhYZHSziqp+cmpaUlZmgrbxwNCUeHB0g\nJSw9y6yfnqCgn6Suv1w8LykmIyAiKTAyNkPYubCwtbe2tLvRTD48PT4/QUhg07+2r66vs7e8\nwcnnUEI+QEZLS0ZJVWL4+PLn4+xqU0lAOzUyMzM3PklY4Mi9tK+urrC0uLzD1XpjWFhdXW7q\n28/HxcjNz95fTEA6NTAuLS0vMzk+SmDcyb+7ubi3ubu9xMnM0tzx9ujc0MrEv7u6uru+xtVo\nST43MS4sKystLzQ5P05/08nFwsC/v7/CxMTFxcnNy8rJycbDwr6+v8TN1939W05HQj09PDg1\nNTc4OTo9Q01XXWv938/JyMXCwcDBwL/DxMLDxcbHyMnP1NTc+21rZmdrZFhPTEZBPTk4OTk6\nPT9FUV50597a1tfV0NDOzMzKxsHBwsPEw8PFxsfKzNDb5vhyY1pPSUZGRUNCPz4/QEE/PkFG\nSk5TXGz659nOx8TBwb+/vb7AwsTGys3V1trn7u37b3Fyal1bXVlRTUlEQkA/Pz4/QUNHTVhr\n7ODd2M/NzcrJysrGxsrKyMfJyszP2dze8m1mXVpVTk1PU1deYnFzbm1mXVVPS0dFRkhKTVZp\n8ODW0M3LyMjKyszO1Nnf6uvzeHF9efv8+Orl4t7h7vX6fWpfX11dXlxaWFlXVldYVVZZW19u\n+Xx+7fP58ujd3trT0NDV2NbW2d/l8flycnVgUfzoZ31u4efh39zd4t/o8XtiWVBLSUtNTE5P\nTlXY1Hhp6tHN1uns6dndU0buylJVc9i/0uTkvrvSzMK/wNPh2FlDTT80MzAyMTY9Pk3f1se6\nuri4uLzEyN5qb1JGTFZbT2zNxMK+ubW0t767v1o9MzgwISIpKCUpOklOy7irp6uoo6iwuLbJ\nST87ODIuOERPZs6yr7Wrp6yzuL5vPC8oKB8aHyIfJDVGRcSsqaWioJ+jqa6vyUlPPi4uMzY3\nSG3PtrWvqquus7XSQzwtKCIdHx8eJCw5PdOysaqjoKGlpKixucjiQzo9NTU7RllXxrm7tq+v\nt7zKST07KSEnIh4jKiwvR93HuK+opaqmo62vr77iaV5CPEA/SExby9PGs7m7uLzQUEs8LSgn\nJyIiKy0vPf3SybStraqqqauzsbnI1uxeRUlMSVZd1czRuLy9uMbIWUZFMCopKSQiKy0sOk7c\nz7yvra6uqKy3rrTHydN9Tk5OSl9Xe8LMyLa3wLy+elJKOi8pKCgkJSsvLzz23865r62xrqmx\nuLK3yd/P9klNVFlg+dHCv8K2tL++v91JPTwvJCgpIyQqNC845c7NvK6stq6psLm3tsny1OtT\nS1v9XPXQxL/Fu7i8wsPJSj08NCkkKikjKDQ4Nk7GxcK2rK23rqqwvbu3zU7v3Uk+S+5cSNW4\nw8ezrrzHu81AODgwJCQqJiMpNjk5XsLAvbKqrbGsqrC+urfSS1hgQjpM22pPyrS4wrautch7\nZUgwLCkmJCIlKCwyO1XIv7quqaquq6qvu7++0UxKS0Y+PVnbbtm5srO1sbC6y25FNy8rIiAl\nJiMlMkRFVryvr66npqqtrbC8zuVaQj09PD1Hat3bv7KvsLCvsrrHXTowLCggHiImJSUvR1zx\nvrCrqaemqamrs8HO2GtAOj0/PUbv1djDtrK0tbO3wt5PNCwsKiIeICgrKzFJ38a4r6yqqKaq\nr7G1vuJWTUQ9Ozs/T9rGxLuyraywt7vD20YvKiknIh8fJCkvOEZuxrWsqaqpqKqus7zJ715N\nQj09Qk1oz8O/uravrrK7xNVjPzArKCUjIiMnKzE/VuLDt62rqqqrra+0usn2WE1GQEFGT2nP\nxL+9ubO0ucDM31o/MSspKCcmJiksNEBd1cS7sayrq6utsri9xttfTUdDSFNq7dLIwb66ubm8\nw83qX0s7LywrKikoKSsuN0n5zsW7sq6sq62vt72/ydj3WkxISlnt1M3LycW8ur7Gy9fzY007\nMC0tLSsqLC0wOUp20cO6tLCura2xuL3G0Nx8X1RMTVvlzczMycfBvr3CydZ+UkM4MS8uLCor\nLC4yO0psz8K5sq6tra6xuL7DydhmUE9PT2Xe1tbOxsHAwcHFzuVzW0U3MC8tLCwsLC0yOkz1\nzsC5tLCvrq+xt73Dzd9yZWJeYHTi1NHLxcLBxMbIzdp4UkA3Ly0tLCsrLC8zOknzy8G7trKw\nr6+wtrzBytX1bmhcWWr139TLxMLDxMTGzeBpVEg8My4tLCwsLS8yOENf0cK8t7Kvr6+vsrm/\nyNTpal9cV1lu287NysTAxsrKztlwVkY5MC0tLCsrLC4yOEVtzcG7trGvrq2usbe9xtLjfGhb\nUE99zsnJyMLAwMPGzedYRTsxLCopKSgoKy0zPVjQv7q0r62rq6uttLvBytLlZFJPUmvZysHB\nwL28vb/K60o3LSsqKCYkIyUpLj1Z3cq9s62ppqeqrrG1ub3K8lBJS1re0tfVyby3trvK4VQ9\nMS0qJyMgISUpLjlL7M27r6mmp6mqrK6xuMXsU01OT2Xn5N7OvLOyuMDN6UYzLSsnIh8fIygs\nNUV1z7ytp6anqamqrbK70VlHSk9NVXHkzL+1r7O7vsTXQi0qKiYgHR8kKC07VtjFs6ejpqio\np6qwuMVxSERGQ0FP58/DurGvtLm8zkQuKy0oHxseJSkrM0zPu66mpKampKSruMHKb0Y9PD1E\nX+3bxLSur7W4utM8LS0rIhwcICYmKjr5w7erpKKioaGmrrW600Q4OTo6P0hZ07mwsbS0s8JC\nMjUvIRscIiUgJTbvyr6top+fn6Cjp6y320xEOzEyPkRDW7+ztbeztdc7ODsrHRseIR4fK0Rl\n3Lemn56enp6fpq65yl89MjVEQDtLzLi7vbW32zkzOCkcGx4fHh8qQX7JtKifnZ6enp+msb/H\n8z41PllDPd64tru6uMk8LzQpHBkbHR0dJjlpxLGlnZucnZ6fprLE2U86NUbySE66rrCwr7DT\nMC4vHxYVGRsaHCc/z7esn5iYnJ2cn63K+E84MDhRT1y+r6moq6y9OTIzHxUTFhgYGiQ8yq+n\nnpiWmZ2fpLL3PzUvMT9OT8iup6Slp6zXMC0oGhMSFBcaHitdsqSdmpiWmJ6puddJLycsSd1h\n2q6gnaCnq8YwKyUYEhETFhofMNOsn5uZl5ebo7LsPzQqJixRxcKzpJyanKKuUykkHRMODhAW\nHSlEtqGYlZaXmp6p3C8nJyUmL2m7q6CalpebobkuHxwWDw0NEBopRbumm5OSlJqirMY2Ix4e\nIjBjxK+hmZSTl5+vPCIdFw8NDQ8YJ0e6ppyWk5Sao7T4NCUfHR8sebutopyWlJefszogHBkU\nDw8QGCvcrqSfm5eWmqW/PCokIyMlLlq4pp6bmZmbobA4HxoWFRUVFBst2qadm5ybnJ+mvzUj\nHR4iLUHVuKmfmpiZnqnJLB8cFxUWFhkiOcOjnJqZm56kruA0JR4eICk/x7Cno56cm56n2Cge\nGxobGxkbJDa2n5yam5+kqbPOPicfHh8tWsGxrK2mn56fqVwnHxscHx8eICY3uqKcmZyip622\nxU0tJh8gLVPAr62uqqikpbBHKB4aHB8gJSgtR7akm5ibnqizvdhCLycgIy1Lva6tq6urpqq/\nOiUcGhwdICYqNOqtoJmYmp2osL78PC4kISUvYLmtrKqqqqiv8C0fGRgbHSEmLDrEqJ2XmJqf\nqbTBXTgrIyIoOs6yrKyrq6entE4nHRcZGx0iJSw9uqaalpiboqu3wk84KSEhKEO+rqusrKqm\npbNDJBoWGRwfIiMqPbWimZaZnaattL9PNScgIitctqytr6ynpKSzPCIaGBseHyEgKD24oZqZ\nnKGoq6+3YzMmICYvbbiytbKupqKkrFgoHhwdISAfHiAu3qienaClqaenrcE4KiQpNVHXyMO5\nrKafpKu7PyslIiAgHRweJD3GrKemp6akoqe4aC8sLTQ9QkPnua6lpaWpr7LKPiohHh4eHh8i\nLk69raqnqKWnp7LPQTEzNTs7QFm3q6Wlqqipqq9qLB8eHiEeHB4kP82vr62qo5+krOFKOj07\nNi4xQbykoqSop5+fp8MsHRweHBoWGCI5yruvqZ6bm6a4z1dLLyYhKDRazbOinZmYmpufqsYp\nFxIUExMREx44uKmem5aUmKGuwjwpHBkcJCo2V6+alZWUlJSZptktHBEPDgwOEBos6q2dlJKQ\nlJmirkEkHBcZGhwkQrifmJaTj5CTm6rJMhoNDg8LDQ0WKWCzoJSQj5KXmp/hKR0YGRcXHTJs\nr5+XkI6PkZScquInFw4PDAoMDhohN76dlJKPj5CWn8NRKRwYFhgdIzO+pJyZk4+PlJukszwe\nExIPCgsNExohOK2bmpSPjpGXn6e/MSMfHRscIDLtuaudmJeYmJqhtz4mHBkQDA4PEhUeMcOu\npJeSlJSUmJ6svOI2JSIkJic2ZtO1pqGfn6OntkwvKx4WFhUUFhohM0DVqJ6dm5aXmp6iprNW\nSD8vKzI/OT/Oubm1rbHNS0E8Jh0fHRoaHiYuNOizrKifmpyfnp6msLq/ZTo2P0Q2PMrT18Cx\ntm1O4z8mISUfGRwhIyQuar68qZ2enpybnaSqrsBURj4vLz82POnYvbq4r8hRbj4rIiIeGxwf\nJiox7764pp+fnZ2en6etr8xMTzszOUI8Q8/rybu/t9tJ9DQpJiQhHSElKC8/0ci5pqemoJ+m\nqKevucDZ7ElCS0lITNjoZr/Mz9BITDcwLiQqJyMrLDE8S8zEs66tqamorKyuu7nA19tvYVBZ\nU0zbblje5e1bXlE4OUguKjwvKTY/OELU2di3t7i3r7G8tLS/wb/B2+/Rf1ZjbFxYbV9MXGJP\nUmFJQlNOPj5nRzpRVj5G6lJJ3NT027/Bybu5wMC9ws/S1mhfbk9ITlBOU/T78NHJzcu/zcrJ\n5HZNQz43MjIyMTU8Q03tzMa+urm7u73Dx8zU7nNsYFVk6vnszcrLycfJ1tfgZE9KRz89P0JC\nR1FaZPTf2t3i7nhpVVVWTExMUlld5c7IxL26u7u7vcTO6mJUSEE/P0FFTWD959XLzM/R1uto\nXFNKRkVFR0lOXPvaz8rDwsbGyNTld1VMSktMTlNefeDQzcrIysvP2XpeV01HRUVHSU1WY+fU\nzMjFxsfJz9nvaFlPTEpMT1dfaPng18/My8/U1+P1altWUU1MTFFXXG339OjZ0NPY1t3p8Xdp\nXFpXVFtn9+vg3NjOzs/U2uTyf3BnXVhYW11eZfft8fHw/3R9dmZdXVhTU1VXXGd46trW2NDN\nz8/S1dvp5+9tbWdqbXB7dXn19/N4c25oa1tYW1tdVlRaYGluePbu697b3tzX2uv08Ovy9vP9\n7+3f3d/i5t/e3+HteVROWmZvXlJJR1Tx13pcWn/Nx87p9+hOPFq+ts8/PF/A2k1W2rzKXUvq\nw8HbPzpH7tJtTUlS5NfZ7mn12NXeYF11299kZlzu293V7f563t3m+l9jZnf/ZFpLU1xh72z8\na3h19+X0+ObneWFr3NTgd1pf4svJ61ZN/M/J2VhPVOPIz/lOT+3K0GdHPENq189hR0JQzr29\n5klJbMzI12lPUejM0excZezS0/VSTVJzb2JrUFld/cfExmpMUd/Kz2FERVjPxMrlfNS/u8Vg\nODI2PklERlzTysftT1THr665Tjk/5Lm8fzYuOte4ud5OTG/Iwt5lV1BwYEtEQURa29xxY27c\nycO+xtpfWOTP0FpDPEJZ1svi1crCucF3Pi8vQ9nB1j8zPM+wrLVlPUH3vbfNSDpA0Ly2yjgu\nNNy2wVw2NTt1vri/0F9OU2HgzMraYl1Rae3Y2OdnS0pf0bu/xc3k62tVS0JPVWNQSU1Y78rE\nx99PSEVO9NdtT0ll39rSbdzX5NPLyMnMys5pW/bXz+tNSE7k1dlkOTQ5UMLFzGVHRU3qxbzM\nakA+RuXKX05GXMu5trnUVVdd0szPT0NN7cztfvH7/O9i7/TU30hYVWJdYNXeaUhT/Nna5F9Z\nZ9nIzNjbVTs7XMO61k49SuXHv9BjR0RJ6MzEyfpZSlTnycPOUT06Q+LO22RfeunIurq+3kdG\nT2roy3ZGPD34zsLabF5b4s7QydVORz9V6d7Q71ROT1JvY9LK32RKUlLkwsTQ32xTW/3a1Mzl\nREpJX9HLy8XbXVls39PVWlZEPU7uxs1ZTVF02N/octnYcGBRRWffycvM9ks/QNK6vMx1Tlfk\n3MlybnpWRVptbN9hXmfaYOfT2ttbU09QV+PM0+9QTU/nzsfNbW9VdN/O1exdT0hM79vhVFpb\n6tHa1u/leOzX0NtoY0xXdtnWe1lPWVzf7PFkaO573n7k2+L/WVlfcG/+8tfYbf1lfuve39fP\n8F1MTV7k1NFwT1FZa+7n6n1aX2vn2Np5W1t93NPX3HbwZF9vcWpu7eLVZ11jcfNq9Hxea+3i\n4eXk6WdYWHvh3e5oVU9Yad/b2dXb9m/y6dPP23xRT1V6dGtnaf199217+ufo/dzi7m5fXmd9\n/u3pcWdjee7n4eDf6/tsde7f1d1mZvno7Pjo5/FcVlFTWVRPT1VUWFddbvfb1tHU1NDSzcjD\nwby8vb7Eytv5W0M5LyolIiMmKzRD98e6sKminpuamp2iq7fhOSkeGRYVFhgaHiczXLmpn5yY\nlpWVmJufqbbmNiYdFxQSExYZHic0Wbyso52amJeXmJuepa7HRy0gGhYUExUYHCMuRsmvp5+b\nmZeWl5mcoqu8Ui4iGxYUExQWGh8rP8qupJ6bmZeWlpiboau9TCwfGRQTExMWGiAsS7+roZyY\nl5WVlpicoq3EPykdFxMSERIVGR8sTrypn5uYlpSTlJaboKzEPScdFhMREBEUGB4rSbyon5uX\nlZOTlJaboKzIOiYcFRIQEBIVGR8tULmonpqXlJKTk5ecoq/VMyIaFBEPEBIVGiIyfLOlnZmW\nlJOTlJeco7D0LyEYExIQERMWHCQ1+7KlnpmXlJOUlZidpbJfLiAYFBIREhQYHSg9z6+lnpuY\nlZWVl5qfqLdPLSAZFRIRExUaHyxGx62knZuZlpaWmJufqbpOLSAZFRMSFBYaHyxGxa2knpya\nmJeXmZufqbVoLyIaFhMSFBYaHytCyK2lnpyamJeXmZufqLN2MiMaFRMSExYaHypByq6lnpua\nmZiYmZuepq/POCYcFhMSEhQYHSY46bSnoJybmZiYmJqcoau6VC0fGRQSEhIWGiAtSr+rop2b\nm5qZmZmcn6avxEIpHRcTEhIUFxwlNHS4qaCdm5qampqbnZ+nr8xBKR4YExISFBgdJzT6t6qg\nnZubmpucnJ2gp6/BTS4gGhQTEhQYHCUwWL2so5+cnJucnZ2foaatuec+KB0YExMTFhogLT3N\ns6ignZubm52foKSmq7G980EpHRgUExQYHCIuPc61qaGdm5ybnqKlqaqusbvTVS8hGxYTFRgc\nISs4Xb2tpZ6bm5udpKqusbSzuL7NTjMjHBgWGRsfJi07UL6xpZ6cm56fqrK5v7i5trjA4D8t\nIR0aGhwfJSkwPGi7rKGenJ6jqbjAzcu+vLW4vMlpPCslHx4fHyQlKzNExLKmoJ+fp6y8zf9d\nzsm5s6+utbltOywhHx0dHh8lKTdsuqqioKOnsL7OcmPevrGqo6Gipq7OOiccGhgXGRseJC5R\nv6qioKCjqrG5ydfKvq6moJ6eoarAPSYbFRMSEhUXGyM0yqqcl5WXmqCsud1VUva7raSfn6Kr\nuz8mGhIPDg8QFBsmQbKgl5GPkJSbprpSNS0sMky/rqaipKq0ai0fFxEQEBIWHCdFsZ6WkI+Q\nlJunwT4pIx8fKDfPraCcnJygrGYqGxIPDxAUGSAy0KmclZGQkZeeslQrIB0cHyc5wamdmJaW\nmZ61NBwRDAwMDhMbKVirnZOOjY2RmKfmKRsXFRgeK2OtnpiUk5SYna46HBALCgsMEhss2qeb\nlI+OjpGYosguGxUTFBohNMKmm5WQkJCTnKhKHBAKBwgKDxgq+qqalI+NjY6UnbsvGxAPDxQd\nLsmom5WRj4+QlZyqQxwOCQUGCg4bL72hl5GPjY6Sl6XjJxcPDQ4THTTCpZuUj42Njo+Xob8p\nFAsHBQcLEB85uaSalZOPkZSaql8kGA8PExks0aialZGPjo+Rlp+xQyETCgcEBQsPHz2znpiQ\nkI6Pk5enzCoaEw8TFyRStp+bl5SSkpOXnqrJMh8TDAkHCg4WK36pnZiTlJGVmp+4QSEZEhIX\nHDPFp5qXk5GRkpabp70/JhsPCwgHCg8ZNL+hmpWSk5GWm6PDOCEZFRYbJU+zopqYl5aXmZ2k\ntdk4Jx0SDQsKDRMcN8OlnZiVlpOXnKO5PiYdGBoeKFi3qJ6dm5qbnaGpv2I5KSEYEA4NDRUc\nML6mm5iTlJSWnaW4PSgdGRkbIC9vuamgnpycnJ6lrLzPTDYqGxMPDQ4WHT67pZuZl5mYm6Kq\nzTUmGxkZHSdEuamem5uZnJ6krLjiVTQsHxYPDg0SHCfDrJ6ZmZaZmp2oslUqIRkZGyAx3q+m\nnp2enaCjqrS/b0k2LSQaFBMQFiEqvq2impuZm56hrcJOKSUdGx8kNe+0qKOgoaGjp6y1v9lb\nRTgsIBgWFBUgJVmxq52enZyhpKvL7S8mIh0gJi9guqyjoJ+ho6assLrK4FM+MCMaFhQUHSM8\ntq+fnqCeoqqpvm1FJycgHygyS7quqKKjo6Smqq23vc5fRTMkGxcVFR0iOLu4oqChn6SqrL3p\nQi0oIyUqN1y8rqimpKanp6uutcDbVj0vJBsZFhcfJD3Cu6WkpKCmq6vB2kIuLSgrLz3+vLSq\nqqimp6SorrLEdlAxKB0YFxUdIS3VyqympZ+gqae5cnIrLiomMztKu7qvp6ykpaelrK+9Ykgu\nIxwYFxcdIjZrwquooZ6eo6S65EApKicpMjxmwbuuq6qlpaSnrbPRTDclHhoYGB0iLVffr6uk\nnp+gpK/TSSsoJiUuOEnCvK2oqKKkpqWss8dGNCQdGhkZHiMtTP+xq6Senp+lstM9LSclJyw5\nRse4rKajoKKmqa672j8tIBsZGRwiKjhdya+ooJ6eoaq+WDEpJyQoLDRJy7WnoZ6eoqassMBf\nNSQbGBcaICg5VNW1q6OdnZ6mu1E0KScmJiosNVC9q5+dnZ6mqrK4wkQtHhgXFx8tPG5/zrSl\nnZmdqsgvKistMC0oKy/qq6GcoKits6+utM5CJR0dHCsuO0M3U8itoZ+otfE/UD8+NSkoMES6\nrK6svLmwsq/CTTs6SM3AwkcrLSxOaUc3KS5Ts6iputTdyba/XjArL0rIwc5fbcSvrLDIVVjb\nv73PWTcqMS44PS43N1a9sa+vubq50N09NDc3TGFf886/s7S7x3bl3+dmTk1l3NHHydVHNjIv\nNzQ1OkrLtq+ws7e3vc1TOjY4OT9ESu/KurW2uL/DydLa2ubpSy4xLjdBNTc87buwsri8ubnI\n8j48Pzw7PkFyxMK9v728v8z3Vk1YaXBp99fLwstUODczNzcwO1bEubW1sbG4zUs9ODk2LzdO\n28S/u7Kvr7e+xs3aWUVETVg9LjQ3Rkk8SdW7ur3ExbzFVz86O0I9Oknt18XExri2vMXS3NXX\nc2/YzcTG1dVIMzUuMDUzOVHeyLm3t7W94nZJPkE9OkVIV83IvLW2ubq/xMLQ6PVfceVt9G0y\nMToyNzMyPuhm3L+7trbM1cfiWEs+SFJESfbOv73BvLa6wMPMzdHk39Xa6EgvMDEuLi0uO01a\nz7mxrrG6vL7PZkI5Ozo5Q2HVw725s7S6vL/J1N7q3MzRz247OzQpKyopLjg+0bizraqur7XJ\n4lg5Mi8tPj49y7+4rbGxrLXDx9n56lxVzs1KPUQ0JywsKTIxOcy7t6yqrKuxzN9WNjAtKz9G\nNtC3tqqvtKmw0tvvWvZTP27LTz+8uzcsKjREKiIvZ9Vn4LynprzEubnMPDNEVzQvUtW9vtm0\nq7W+yce+x09MzcTDzezE0D84Jh0sJx8qLUO9wbuppKepsMtgXu8zKDA9/e5SwayqsLi0r7Te\nRExrWTs6VNHIbE1IQL5pIkZjJFMtIblpP7vYvay3ZcO5XdRWNs3OS8/Ky7W5zbq2y8n5Rv3e\nTFPgWNzNXdzjTVRPPj9AQkZEPj5ESEhJWGxi/mxr1Nba0dbIvb/AwL/AxMfN2NbZ1+R23N3c\nYFtpTFBLQlBEQ05aXmd2bdr6bllOXl5ZVGt86+Hi3M/Q6tnyauhuZm1a+93s7d/b3u9pUWZr\nYGda29rWzs/N6s/a/Hr0+3hgYXJTWmX3bF9l6O5jb3td+uBic3Zd52N89FxrTFZSV1dPXuFq\nYtDkzXXcznrOW9PVbMfPz/jexNfuZN5r4FxI2kvtUGNh3PBKy27/bk/3TVpgS+NaYP1N/+Zm\nZVVlZtbjWF7Zx2ra3crFV9NpydtNxF7Y0Fv31dle3Ghie2FRZF9g+ltD1G5fXUzxeE5tePl8\nWNnl7+DsdOXU/tNZZsjRXGhddNTdW1XD3ebjVtDmT3jQbUhTZPtcUPLta2/Y3n3cdlPYf3Z0\nUOnKylpbz+l19mdUXvNWaW5j13ZQ+tXvTGzkXOVc4dv8W+zS6Pn44uTN7ux55d3+eOhidf5f\n2/j+dH5o9PJVYmFUW25zcNJjavtl2m9sWVzi7W1maejZ3ezo5vlzdOdpd/Fl+e3tceLe8djz\nW+jcVl7p5Fzrb//t8nrl6VbodmJuXvxrUW1u4O/s7XB0XNLoXW5aftheXNfl5N/cbenf8v31\nUG/eX+xe7Nbeal7cY3FmVl1t+/t35dhe2srua+tecupfVvdjYWhl7N3h9lrf4F3mX+3c6e58\n83jr52Bc53FdeW9e72Fl7d3ybdnf2uZgbnld/Vhjf2/paPLk2vXm7W348nZq+HJ6Z3D47OVu\naHbl9WVdbOJ2+ulvaHNt7Pl6eGVr7t73/XX1fn3n7eFzZ2ru4nNpZu/y7+rq3Ot5+X50aVte\naHtobvnu5enj69/c63F0c2dlZnT7+3R4fvz77/pxbGl9/HHr/mRuffzrcXR1/u/3/v7+/u34\n7OrvePjq4t3v+Orl6vn9dm5rdX10Z15la2xfXmZkZnR08e95+fz37u33+PH38enw/+fl9/rq\n7fH0/HZ78PR9+vf4/nt6/XJlZGxudHX//Xtw+/H7e3ZwaGVnb/r59Pv28e/n6+7v7vH19Pfv\n+vnq93t+ff37e3N7eHlvfXptdXB8+/x1alxaWFhYW2JnbHns39rX2djV1NXU1tjd3Nzd297k\n6vz7+GpdU0tHSUpKSEhKTVJaavrr3tnUz8/R1dna3OLn9P717unk4t/b19XT0tHP0M/T2uh8\nZlNOTkpDPTs7PkNJVF1q6tnQy8vLztTY297p7unq7vDo39zU0c7OzcvLyszO0t73X09IR0VB\nPTw7PEBHT1tt7trSzsvIys7S2uHj6err8/Xz7unb0tDT1NLSz8zMz9nnf2ZWTkxGQT06Ozw/\nRE1VYu3Zz87Ly8zO0dXc3t/e4OTc3NnV1NbV19TS0dDU0dPe6/tcTUhGQT46ODk7PkZQX/re\n0szIxcbJzdPa3eHx7fHy5+Lb1tXSzMrLy8rJysvO2vNkVklDQj88ODY2Oj9ETVt24c/KyMjJ\ny8rO1dvf49/a4Nza2tfT0c/MztHPzczM0dnqaVlLRkRCPjo3NTc9QktXZevYy8bCwsbJzdXb\n3d7b3d/i4NrUz9DR0dLPzczMztXY329WSENEPzw4NTM2PEJOae3bzcrIxMbJy83V297k3+He\n2tnV0c7My83Qz83LyszU33leT0ZAQT47NzU1NjxCTVhp6dTMyMXExsrNzdDW19LV2dXW1dHP\nz83Mz8/NzcvN0d75ZlBFQkQ+OjUyMjY7QU1Zb9/Ry8bDxMbJy83T1tTU29fZ3dnTzsvLzc/O\ny8nGzNffc1NHQ0I+OTQyMTQ4PkhPYOXRycXCwsPGx8vN09XT1dbV1tjUz83LzdHRzsjIzdDd\nb1VIQ0M+OzYyMTI2O0FOZOHRy8PBwcHCxsrMztDS19jd7eDWz8vJzs7JycXDyM/Y71tIQkE9\nOTMwLy81OT5EUOjLw7y7u76/wc7qVk1PXdrMwbu5sa2urrS5wNFePjQqHx0eJDf/vLa6v8vK\nys3SVkU5Nj9P2b66t73EysfBxs34XHrPuLCwtb7E1WpPOy0gHB8oVLqws8tdSWTNx8dWPDI0\nU8i1tbzJ/XvYxLvDz3V7ybesrbTMV2L34l9BKxwdIju2rrDZPTI82L22z0I1MUjPt7C4x1hM\nVNi+wcTP2sq5ra2xyX15TV9NOygdHyh9sa20WT83Xsa7wkU2LTroubC7ylhHSWnJxMLP1Mu+\nr6ytsr7L/k5BNisfHipAta+1azw6Sbu7wUUsKzXNtaq24Us5SvfKy8vO1b+/tq+vsLm/zc9f\nPy8kHCAy0KqyxzY0O8uuvN4sJitUr6qpdks5R8rKxFreacG2ua60sbq5u8jhNy4oISIvVLm1\nxE1ATue2xGw2Ky1AuLmsw3dRSM1tyztScMKuu7C+r7a1tczUOjktIRwoP7CptGMyPEitssY2\nISo2tayv0Tnr4bK9WT81ccKsr7S3x7SyrsM+KSEhIC1OxLfJb0jyyre37zgqLT7Kube/fe/j\nwNBgPT5oybe8t7iyr66pv2AvJCIcJzi7rLnKNEr8ta3IRicnLmS3tr3mRdTHvNQ/Rki/v7m6\nvK+0rKuzWS0iHRwnT7ipyOwzS7+vquk7JSpA3rbFy+PUxs7iSUl5yb3E1cm6rqupq8A/KCEb\nGiphq6rFPS9Rv6eu+DElLlC7s8HMas3L3F87Rt64s73GybiuqaavTywhHBofQ7mluGwyPsWy\nrPM3KixFx7u7ysvEwsNEPDdwtra337+3raiprFgzIhwaHDi9p7FhOjy+sK9dLygu+MO3zu7J\nua7FUTA42Liwx8/As6qpp7JgLSEcFx42t6i6SzVet6y3PCorNeTJ08nPsK6w9Dc8P72/xNLP\nr62orKqz9TQgGRQeQKupyDs8vayrei0nL2LZXUX5uKuqs1U6N1THwMxuvbCqqauqst8vHxcU\nIl2ssVk3Yq6qtz0pLz3+WDdIxaqqsMpT3m3eZGzIuaywsrCrp7o9JBsWHC7NusxBW7itr1k2\nLTw/UT5MxLiusLvD1nBNWUzcv7SrrrKtqa5OMiIeGRsuzbHNXV+1q7dQNC88TUY7/rqvsry8\nvdRURENf08e2rK2tra21PyYfHBkoO73Bxnm1rbbDOTs4Rzk4Tsqwu7jBv8P5Uj1aXcK4q6uv\nrKmyTTMiGxYhPLvNV+a1p7fSOEg8Oi0uV7q21r6yrb5NRGLPVVnCpaWssamtvygcGRorNUZF\nwbutss6+7FstLSo76ODOw6msr09Szc9dO2mwoa+3rJ6uOiAiGxsfLF/SycCsrrHFVUQ0LSk5\nTNLXuqqssc3V4no/VsSsqbCvpaW7NCUjFRonMT9m4aypuLm71j8vJzNCPEtyr6OpvrfB0E08\n7q6subSqpLRTNiwdFB8vLzRRtKavxq+x6jIsLT8yL025q62zrqzLTEzwx7K2sLCtprhSNyYY\nGyMnKTvqrbG6rqvEQjk2OTAsOnG/sLOpp7HE/mvTuba6s6qsv8hjLBwbIyYhKv68wL2sp7hb\nUF81Ki05PUO+r66sq6y65t25sL6/s6mzUNj2HxojKSEgNcDC/bKkrtvyy0ctLTc2L+q6t6+s\nqK6/vLKzwLu2tLXScV4qGyArIB80XeVmvKatx7+6WzM2PDkrNbLC6ayorLi9ray/wq65yNfD\nfC0eIS4fHS9WQE27qq3Auq/VNkNHLik9zXPcsaiwva6rtLeysL3FvMtXNSYfJyQeKTw+Tcyy\nrLO4sMBRSkQ2LCxZ8Em9q6+4r6qrr7OtscbByF04KCInIx4lODlA0rixtLOvteJgbTgvLDz6\nP+KusLywq6ytsa6sv8XF20UqHyolHSIvNDRdva60t6yzxs3hRzYsNV05V7S1uq+tqqmurqy0\nw8DQRTMkISggHikxMkDWu6+0ua6wy9foQzAuPz5A5r+1t7Ssp6qvqqy3v9ZuPisfJigfICk2\nPEzTtqyzt66wv9JRQjUzOj1N+si7uLOtqKmurrC4w3RGPC0jJigmJyovPWjVx7WxsbG4vb3Q\nSTpBSEdPZ9LBv7y4uL7Fxs/b1trc4vhnWEg+PTk1MzQ5PEFOauHVyMC/yczO2ev+6/p55dXO\nzszEwcXEwsLBw8jTZUtGQjkyLy8xNT1FTlnhx8DEy87V1tXW3eTZz83LzMnGyMnJxcLCwsXN\n8FdMQjs0Ly4vMTg/SlnpzcrGxsvR1dDS297f39vW0MzIx8TCwb6+vsLI0mlMRD84Mi8vMzg+\nRlRu3c/KzM3S2Nfa3uju7OjY2NnRycXEv727u729w9hjTkY7NDAuMDM5PUROXu/d1tHO1dHL\nycvS2NbS1drTzs/KxcG+vLu8wMrdY0tDPDYxLzE1Ojs+RVFm49fUzs7Jx8jN0tTa19HT19LM\nxL++vLm5u7/F2F9KQDs1MC8vMTQ4PD5HWvPXzsTBwMHDxczU2dfY5OvazcfBvby7ubq9ws9t\nTUM9ODIuLS4vMzY6P1Lyz8a/vLy8vsTM0Nvh6evn49TKw768ubm7ur/J211KQDw3LywsLC8z\nOD1GX9zIwL68u72+w83Y7/Pq6tze1srEwL+9u72+v8XTcFBDPTcwLS0tLjM5P0pv08S9vby9\nwcHI3vNeYuvx7uDYxLi4urmurrW9ytFBLiwpKCQjKi03PW27urKvrq24v8ZtRzs3Oj48Q9jJ\nw7ivqqqurKqxy8TIPTYoJCsiICgvMThmzba4t6quur2/3E1COjw2PExN5Ma9uLWvrKywr662\nzeDbRy4nKSwlIi05NTltu7zAtKy1x8LCdT88QD45P2bj/Mq5uLm2ray1ta+1xtj7XjwpKC0o\nIioxNjlBxbnBvK+wvsPFzUtCREFDP1L559XBurq4ta2wubKvvvXh50swKC0sJSUuOTk7bry7\nwrWvuszLzW8/P09HPErm5vzMure+u7CwuLu2s8He3HJXNScrMCkjLjlEP1G4tL+8sbjKe/Lc\nQDlFS0JOXtPFyby1ubq4trO7xbbA3np76jsvKiwtKCo1QEJM17u8x7y3wtfo82dKPktqUE7e\ny77CxbW3wb+7trvOurnp+f/eQiwmMDkkKjNRTT/bsrjbvri94UVr6UE2WVhOXGy/u8zAtLzB\nwbuvvtC2udNl/c9GLCQ2OyQqNGBTPmCytt7LvrrTQmDeTTw9aNRMTsi4xdu9tLvOwbG1zs62\nuPFM09Q3IyhBLiUoReZGO86uut3PtbP7Q3PRRzg/dvFLaL65wsW8s7rFurO7yMrAw19Wck4v\nJC84KykrQl9CRcu0uMXLt7PTVGDrVTg6Umte/M+7ur26t7S4vL7EzdTe7lZd7GJFLzRCMy4t\nMj88OUTexr7Bvre3vsvrfnhUS0lW++Hm3dbLyM7T08nL3NjKxcPIx8TH0ftZS0M7NTIwMTU5\nPEpt2tbTy8TFzdHY299jYW5o/ezg1M/Mx8bIx8LCw8LDxMzW2eVeST8+OjY1Mzc7PkRPXvba\n2dLQy8jO2+La3OXx7NzS2t/Z08vM0s3Ew8bJy8nM1N9qV1JGPT09Ozo5Oj9DRkpQbOvk1srH\nyMnLy8vQ2t7f1tbf3NXOz9fPyMfKztHOztp6YlpUS0I/PTs5ODk7PkJJV3fcz8nEwMDDxcjP\n2dzn+/hzcu7r59/b1M/Oy8zPz9DV2elwZFJLSkM+PDk5Oz1CS1Nz3M7JxsbExcnN1N/v/nRp\nZXbv7OTa1dHPz83P0NDV09t5ZFtNR0ZCQD89QEZJUmR33NPRzdHc5X7o7lln5vvn29/OycjE\nyMjCxsjFxMjQ/EtFQDQxNTY9RUJP4tXIy9XJzOZrT0lYXVlx3tzCvMfJzc7Fzf3e0c3EwMXE\n0E8+OzAvOTdCVVXey8/M13tqV0tHSkpm2tHGv8PBwsnSZVze2dzX0sS5tbzYUTs3My4zPEfu\n1dHIy83aXUxEQEFFSljVw726v8jI1+B9VVZu4MnBwcLBvb7KVzItLjRJU1D+28u+yd9fTE5P\nTEdIU/fKv7/C0eXd7GRjU1bw4sy/wsnP2tPP09hKLzA7UMrPVlRb38LPW0pCVNrT6V1Y7cfA\nyOZPTmXs2N1pW+jPx8bVclxi18fK1j4wOkTZwtxXU1fWwNloSUFZ4NfnT0Zf2srK9VZUXeHT\n5fl978/JzNfubODIwcTxPjc5RerQ3GtbWuPY6mpNSVX84OtpTlPq2MzXfWNcbena39bQ0czQ\n1edmaN/OyszeRzU2PvDEx9xUREVe4NfjWVNbdtzdZllm4czL2v1cY+zRx8vQ4+fg4M/Lz9ht\nWE9FQkNMYt7T3mxSUmRw+3hhXWX0+ep++97vdujt9Nvf18/UzszMy8rI0OlZSD88O0NVadjb\n5OVw6dvp7VZKTE/22czO2/JhfXd67vPj29rY2dPMxb++xORHNjExOl7SwsprVEx5zcvPV0E9\nP1fcx8PG1PXvfnRwdNTOy8nc2tfKuru+bjgvKS08Xb3A0+RJXN/Pwt5URDxDW9HGxc3c2ePr\ne2Tv49rNycTHxr++wvM/MCYoMk26s7vNRUJZ1rq/+0I0N03OvLvKfFpdadzQ19fY0cvMv7u3\nt8pSMyYfJjfJrK++VjZC9ryzyUo0LTnvvre82mFUXdHS1th307+6tLW3vM9XNiUeIS3mrKy3\nZzQ8Z7uuvUsvKjL/trG11kZVT8u9281da723rK+3u3JIMSQfICxirqy28Tc+bL2uwEUvKTLk\ntK6x2k5cY8DC4HxN6bqtq62zxFw6LR0dJC20q623ODhD3K2xzTMlJTK/rqq4XldPyL3F0091\nxK6orq67W00uHRweKbuqqLM7LznbrKe5NiQfLMaup7dnU1TFv8HfV8q4qaqtr8jWSCEYFxxI\nqaCqTSgnRa2gpV8lHSFSrqi05lNjuLrE6T/gsqSkrLDE+DwfFRcj1p+etjEeJNOhnKY9HBws\nz6iu2EtHurG41URcup+gra/eVX0hFRUdX52ZrjcbGkyimZ9OHRoo16utyFLZvbe8VU/Gp5ui\nsL9HQzEZFBwzrJmiUiIaJrWcnrgrHCZMv7K+bsu1ssBmQ9SfmqKv3S4qIhUdOM+fo8EtIic6\nq6e+fy0sO/7FzLnVxrjWy9S0np2mue8uJxwSHk2xnKPNKiYxQbK+OzozSdK/0t7c1LG0zXvO\npJyfreUvIRsXIe22p7RMNTzKurNmKSgmP7isrNNrTG21u7CjnqS0bykeFxYsrKCl3SYgOa+l\nqWMlIypoubG0zMjDub/ar6Sgobg6Hg8OHL2bm6wsHy3IoqXNLCEpR7WxxOLQs6qrtrixrqq+\nRyAPDh23n5+9Kyo8sae8SCksVbGmvEtEzKmkoaa1xL3ASh4ODB2pmJ3oHhssr6CvQCMo3aWi\nvjw+tp6anKnb6Lu3QxYLDS6fma0oGya3naM+GBg0ppul7T7Co5ycp8jFs6zQGQoMNZqTqScX\nGkqioz8aH8qfn8krK8Wbk5erWXK7rFUTCA/ClJW9IBwptp+2HhMqppqmSzRIsZyZo9PZr6a6\nHQoKJKCVqS8lNbeksiUSHbacpFE/v6ecm6XvRbqlriELCiGfla4jHS+vnq4lFB+vmqgvLMSf\nlpejUTTRo6YlCwkfoJWxIh45qp/EHREjppemLivRnpSWo1U3v5+qHQkKLZmWzx4fR6af3xoU\nLKKbxSkxtpyWmKZpP7ihxhUJEMiZnzghLsOjrS8YHcyfqTwwz6icm56yXM6prCsOCx6rnL4m\nK9upqkYgHTqrp/cuSa2dm5+ryNu2qcsbDRFLoKwtJFarpc8lHSW/o7E+OMCinZ+lsdHAqq8r\nDw0hq6F4Ii69pa04Hx46sa3xOt2onp2gqrrBr6tVGQ0TRKWrMylzralrJiAuv67IOTu7o5yd\npLHDva61LhINHMKn1ic1uqatOyUjPbe1bzhNsaCdnaSwubGrvyMPDyW7sTgmPbenuDkpKU27\nwVpA26ygnZ6pur6uqdceDxIsubktJDq7p7hBLCz3srdmOmGuoZ2dqLzGr6jHIRITJ8zCMyQr\nc6yudy0rVre0zUlgu6mfnqSyvbKpsToaEh1BvkgjITDBrbhKLjfNsbXUWuG5qJ+grcO8qaS4\nKxYWJlrnKx4iOrmsuUIySbiqr8Re7bqooKi80LakorYsGRklPTkjHSAyxq+070Tqr6aquuTr\nyLKsssDEr6Sjr0skHSAqLCMeHylHw7jI3MCtpqetu95bfcK3tri1rquruTwkICUqJyIfIio+\nybq5uLGqp6asvmlO2b23vcPAtq6xzjcqKi0vKiQhIy1KycLHv7Wsqq23y9zVxb6/y8/Hvbi8\nylZAPz47LyknKTA8TlxVVubFvLu+xsvFvLe3usC/u7Syu9RORUhIPjErKi41Oz06OT9vxr/A\nyMe/ure7wsa/uba5vsrT4O5sU0c/OTQxLy8wNz5HV2vhysLCyMnEwL+/v8HDxMC9ubq9xdPc\n81c+MCwsLzM2Nzk9Rlzlz8/PzsrAv8LM0su9t7W3t7e5vMn0UklDOjIvLi4vNDY6P01208fJ\nyszJxMLBw8O/uri5ury9vsDJ41VFPTs1MS4uMDQ4O0FMZNvJxsK+vr/ExMfIzc7JxsfN0s3H\nxcXL3f1xWEU4NDEzNDY7P0ld3cvIysjKxsXL121gb/Lf2dHNycG9uru8w87U5mNLPDg0NjY3\nOTxBSVr04uHk7dvb4fl1/OrYz8zCvbq5uba0tLa9x8/gZkI1LystLi8vMTc+T+/h3djNxMLG\n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\nz0AoHhsbHyxEzry4tbGuq6mssspHNC0tNEFwy8C8trOysrnE7U1GQ0hLT2bnx7q4tLrHej0s\nJB8eIio3a8K2rqysrbTC8kU9P0Za5tDIxL65trGxt8LxRTo3OD1O+c7CxMXVa04/Ozg2Nzk8\nQlvfzsfM0+RiWFZXY/jn3tfTysS/uri5vcnZbl5dX/fm73dnXVldXFhSSEI+PkROatrNycvV\n8VlSTkxXW2Fz7ubg1dTMyc3P2N/0+uvs5+vk4ufn+XRsXllPSUVGS1zq1svKzdLfdF5UWGFm\nbXX6c3Pv4t3Z297p+Pxyamdw++ff6ujq7/Dscl1WUEtKTlJh7d7c29/xdG1jX2h67uPd3NXR\nz87S2N/p/nBtbXRubmZncfnt9H50b21jWVJPTVBWW3fg2+Lt/WJcXF1ibH3n29jU08/P0dXa\n3eLn8f9vZGRofO/k6fp4Y1xbW1xeX2RnbXj9/XZvdGleXFtaYvrv7d/e393a2dnc4ux+/n9s\nZF5jcPTf2+Hv/W1sbWxqa2VfYWJse/7z8H19+vt8fvXt7O/38+/p4ePn6ezwfGxlZGRlZ2lx\n/vz2/X15/PD/cG9qZ2xyd3b/fn31+Pf3+vDp6OTg6PtvavXl39/l6Orsfnl8/21nZmVjZm5y\n9u7x9n5rZmFfXmVlYmZu9+fj5ejn5+35+vf8e//v5OLc2t/m7+7u9m5qX19ramht/Ozo93Ft\naWNeY2pra3388ff44N/c2dzpd2Zub2RvfP5+eu3r5+fu9PRtaWdfbfn8b3r39O5waXZ4Y15i\nX2Zz9+no3NnX2uHr/v1ycnFve378f/Pn6+7o8PZuYWdubGxoZ3J77+rq+mtkZ2piamJn/fjp\n6efn4tvc4+/8Zl5jbHb88unq5+Lq6+bt93hranTu9/z6cHFta2xrZmBjXmdvaX3j3Nvd4uf7\ndP98d/v/cnH47O3z7/dwb3B8c251cHvy7+zw+P36f/j0bGhkZGtuc3n13+R+9/n57O7ub2t8\nen/6/X3t7u7v/v9ybW1wbGZ38+7v6+/+d3B2bm5qZmxuc3J26d/e4Oru6/V3//nv8HN0+336\n9X79dnJsamxxdnl8efbw7eju+/79+3p7b2txe319+Pn3fHn9+Oz2dv348e/1cW5zdnV3/nd8\nfX55dmxv+Xpz+fL1+n9++e7w9vj3/3h9+Xj58Xp8+ft3bm5vbGx1//96dnv0+Pzx9n/19/f2\nef/w9f55dnZ0c/x8dnZ88vd/7vTy9Ph5bHV7e29taG10cX36/3/87+vp6+37ee/s7v90fvPv\n/n1sZGtuefP7bnJuZml0dP/18f98+vTu7/f57u/18/D3eXp8b3Z9fPx6+v3+f3F1d3R88/V9\n+f54fX76/Pfz9Pz7+nlvfv51fP9zb3l8cXZ9fX37+vfy9vjy8H59e3n78/z49HxudXx9/vDy\n//Pw8fr0/Hv/fHl6e29pb3X/935+fnJvd3psb3RsaHvy9/rw6/f16ubp7u/v8vTy9358fW1t\nbW1ydHV2/fbt8vH6dnX/+X7/d3BwcnR6ff33/X72+vt4fndu8uzw+fN7dHh3/fv9fHj+/vjw\n9ffu4+rv7O78ev3+d3hvbGtnZWlucnb9+XZ1+Pz99/Lz9vjy7vX7dn34+PDr6fj8+/fw9v9u\nbnV7fnpuZ2xtamxsbXl6c3h1ePTp6vLu6enr7u7x8Ozq6/d/+vx1amtzfHR5cm11eHNzbGx1\neHRy/fB+bG95ffv29/r38e/7cnP+8fLu7Ozq6vR8enp8+HtpaHBzbnj0+Pt6fv749Xx2cG9x\n/Pb/dXp0cvnr8O79/vDw+v99eXBsbnJ9cnvy/fnz/H756+9+/Pn7eG949fr+eHBzfft+en31\n8/T9ePv1+H3++nt8e3r79vX+cXF0fP/9fnZu/vxwfvD1ffv6eHT9eXB1/nz9/H1vbfrs6/t8\n/fzw5+n68/9wcf70fPn07/v67359+v/++fx7cHB0dmtnbXRsbXl5fO/w/fj18uzq7/v58/f+\ndH57eP78b2hpaG1y+/P7ff/27Oz7/n/9cm7+/Pjz9/X3+PLu9Prx9vH17+7u7397dW1maGll\nZW93bG53+e/2+vX6eXF2em5x9fV/8uXk5uDk5+j4+PlzbfXqfnR3dXdubGpoZGdrbW527/T7\n9O/t8Pfu7vnv6+rv+n/v7n52fnVpb3JvbXZ4b3n+/Xx/9+/r7fH093pzdHlybXBwcPXr6uPp\n7/Tv+vv0eXR3/f92bGtmZ3J6dWxrb3l6dnv8/vfv+fr49fz67O7z7/P27O/7+e/u8f5vcP56\nc3Bubnl+dnF7+Pr7/Hpvcnhydnh+fPz5eXb17vT8/vX3eXR+/P/9fH708e309O7u6+ju/Xd+\nbmZvbmZgZWRdXmhrbH7x7/Dy8u7r7PX3fnd1evH5/ezf2tfRztHa3udvXFlZVVFPT09PT1BV\nW15pcvHl3drb29zc3+bp6O91dfv2//3v7+jd2dfY2dzc3uHo6uzyf3t7b2lfWlFKRUE+P0RK\nVW7h1M3JyMnKztDW435eUVBWWWDw2M7JxMPDxMfN2OR6X1hTU1hSS0U/PDo7PkRPbt/OycnF\nwsLDxcrT6F1PS0hNWGLv29XRzszMzc/Z7vNrXWJu+Ozd0s/R1vtJPDY0NDg+SVV11cvCu7i2\nub/QZko/Oz1ETVj30MnDvLm5u7/J3XhfXGBkZGNUSUE7NTM1OT1GWfvax7+7t7e7wtDvVUlD\nPz9ASVjpy7+7ubq9wMnP3PB8bmFaYPze0M3iSTQrKSovOkdRW+LIu6+rqq6820s9Ozw9PkBI\nVdu9sq6us7zJ1eL4b2tbTlRgVUtIPS8pKi0zP2TUy8G3r66tr7rhTD88Ojs+QERaz721sLC2\nvsXLz+FyXVRVcdLL2GNEMickKC0yO05v2LytqKirsstNQEE+NzY4OkLdt6+vr7G4vb29x91u\nYFRa3M5uQTctJCIoMTY7Te7MuaukqLHA+UY/SEg5MzdEasOxrbG3tbS5vb7K62Nw4uPfY0E3\nLSYjJSwzOEJY0LqspqatvNxaSUVCODE0PvvBtbC1ubm0s7q/ydDf9dXN0lk9OC4lHyQsMDRB\nZNC+rqansMDR9VVOSDgwNEfYv7i1trazr7C6w8jGz9jMzW09NjQpHx4lLzI2Sd3GtaijqbvS\n1t9aTD80LzhfysK9ubWyrq2zv8vAvsnOz9ZLODQqHhshLzYvOF++sKagprfVzsLePzEtLTZb\nxsfSybSrqqyzwcm9t73X7NxvRTcoHBskNDIpLUu6qqKgqbnCt7XjNSkoLTpv131uwqynqq+3\nubm3u8765czjRi4eGiAxOSYhLeatpqOor7GsqLVBKygtND9IPz93sqiqsLOurbC4yfP8z89x\nPiodHCo/NiEiN8Wurautr6ynqck3LzU/NzMzOErPsrC2ta2prrjBycvOxdJYPTMqIicvMycg\nK0zBv7yyraurq7fba/v8PjM1P09W3Me9ubGutb2/vcXsY1VQRzgvPUA7Lig5VPc+N2LBt8TK\n09PHwb7oW2nPz2vv283PyMLKztjN3GdgcH1NTmXj5nv77dzi+045O0dPOzY5Oz1Gcuhv5MC2\ntrm7ur/Kz8/vVFJZXFV72e9t5sjDzeZwcmV1Zko9SOf1TkdV/PdaVFRPVlRadOXqfHzg0tHe\n6uTpfPji5H1f3cnKz9ra1MzW6W976XJmXGZfXVNNUlVOUFJcXG3h2eJrcevZ32RWXm52XlRa\n2dTgfdXHxtn33M/Ub2bi6WVWX/5oVUhLW2JXWerZ5O/Z1tXh6nVtcHdqZHFrXl9t39XZ797v\n4u3j4G9f+uj6amr0YFZZVWFRWV1e8uXe43zt4O9mXPV/fO923OPd4d/a2N3f6nDt4enyann5\n7F5gdmdWZfJVXmLuWFP84nLv9lnrff1XZXtxXerk3HbQ3mV71N5y5tnk49nX+/r7/vX7bW5n\nS1rpa2tP5GbeflPYXvtqXtFdU9ndWEvOzEtZz9lNVcTeVMzOWVzL1FHT3k/k5+nrTdDRUtXj\nXWdlx15D32U8Rt9ISGlWRnHG7XHGyODSxtDe0NN9fN5sW3RwZmh1amtz7PL18fX3b/91Zmpn\nXF1bW1pda3rz/O7k5+rn3t3d3N/q63xudPp4aGt8bGn/enzs6/v7+XVudWpua2RcXGNobfvz\n8/Dq6uno5+Tf3tze6O/39/V4ffV6cnb+fG599/txbG1sZl9lb2ljbHl0efz2/vTudv/5eHX3\n8nz55+v87OXr7Ovk5vXv5u7x7On5cG9vc25raGJeYWdueHl2ffd/eX5xZWx2dnj45e/78ff4\n9/r4/PL+bnD+9Pvx8ezq6erv8u/n6Orn7nZ1/2tiZmBeX1pbYmhpdn729e/q7u7u7uvueHf5\n9PP29vPu6ebue/jv8/J89vd1bmxlYGRlaHF5d3n08/jx6uvy8+vzdHR4fvn57f18+3rz8fnw\n/H369vP7d25vcG1tbWtsdH3+dX19bnN38/T87/D49vDp8n56b253c3b5/fHr7O/4fvbu/fz0\n/nZ8f3h6fn5xaWVqdnFiSt+7PejCQs97UMxcZelb2mv75Wvr6f1l7NTIdjO7zTjCM/CrK2/G\nO7I4Sq411787s7lEyVbHwDnEPVHHNFxsTthHT8/L3uvO3c3eXmxZTmwyTbs+3r5Nt8dRut75\n3UZ7RUzaOtnLPsHg8czTw16942TO9edi2vVJ31A9TDhJPjZGPlheSNjHyMTKvbu+wcnGxM/0\nyPTJ3+i/y8q+zN7P50cyLjctKiYkMjk5Rdm1sK+tq6isusHQVEs+MzY+REdfysO3s7S2r7W/\nuMXM22dIOzYkJC8lISYrNUP0zbenp6umqKuuykhCQzQqLTk9Uu/JsKusrqyrr7fIyMFsPDo0\nKh8lKR4jJyk+ati9q6OkpKSpq7XvQD83LCstNURe3ruvqqurqquuus7P5kQ4MC0hHSknHiYp\nM3rOxq+joKSlpqqtwUI4Ni0pKSo4T2jMs6qnqKqpqKy6zNBsQTkvKR8eKiQeJSk2c+bIraSi\npKepqK3ISjs5MiooLDtPXdG2qqerrampr7vIzOVQPDQvKCAlKSMlKCs+c+/Crqikpamqq7HJ\nTz46NC0sMkFV9Mq5rausrKyutL7Rz/s/PzkxLCUnKigoKS04Tf3Tuq2pqKiqq6651FxLPDc0\nNDpEWOfLvLKvsrKzub7Oy2NZUjlKPDM3LiwvKystLzpDYsu+sa2sqqyur7rF2lFHRDw7QUZY\n2tjIvL+5vsvBz8zfX+VXVk5KRD42NTYzNDM0OkFOX9bFv7q1tba1vMDL33VbUFxZW/rfycfJ\nxcnH2Nb+7W5wfUpfVk1NSkhERkNEREQ/QEZHS09f7tLMxcPDxcPGz8bOzMzMzs7Pz9zg7m95\nf11vUWZbWFtXXVdoZ2Rh8/9hXFVRTEpHREZGSk9cXu/X08vMwr/Av8LFxc/K29/vbPhsVVZT\nUExOWkxTX2rw5N/e2dTx6+lz5mtYX1BXV1VNUllfam/s+NvU19nk2Nrb3ePY793j5fVc+Xlg\nfmdx/WvdWuV73nLid2/o1O7XfOHk4+5cYFdgWVNIUEdaVVlV+3zg3OXZ2tXa3tb05t932Gf+\n4XrtXWrXZeFw99Lpzdjez3rH5+n7ZeNgU1pGRkpJS0lGVU5vb/Hz2eHS0NrM8dTi4utoante\n7nbi6tfW3svQ0dfYztnU4/73ZttdW1dabk9JSEFGQUJERUxQV+vl69rYx83OyNLN1NXU7uvt\n59Xq6+PY0M/Q2Ojdy8/edXtqWehkT0ZBQz9IOzo6PUxJVl741sjCwcDGwcrDytrba+h7bWZo\nXvjV8tHbzeHOy8/V39jo29zpaFlLQTw5ODY1NTg7RE1m3M2/u7e0tLi/yM7afFtUUEtOXGXq\n28zJysfJx8bU2drj2ttsUEk/OjY0MjIyNDc9SnbMwLq2s7Kytbq/x9leSkRBRU1efe7f1cjA\nvr7FzNfSzc7O5FlIQDo2MS4tLC4wNj1N58W4sa6trK2xt77OflFFPjs9Q1J018vJxr66ur3G\n0NjV2fFgSz85MS0rKistLzU9TH/HubCsqqqrrbO7yeZWRTw6Oj1FV+TMxL++vr27vL/J0+9h\nVEQ7MSwpJycqLTE5R33JuK6qqKanqq+3x/RNPjc0NDY7R2/Lu7S1t7m4uLm9yOFcSD00LCgm\nIyMnKy86Uc+6rqmmpKSnq6+62E08MS0tLjE7Tt/BtK2rq62vs7i9x+JNOzEqIyAgICMoLTRJ\n1rqtpqOio6WqsLrPTjkuKSgqLTpZyrmxraqoqKmtsrvJ9Eo8NSwhHR0cHiQsNErPuKujnp6f\no6u5y187MCslJSkxRs22raupqKinqrC6ye9YST42LCMcHB0fJjA3Q9W2qaCcnaOrttNbTDkt\nJyQmL1e7rqurrKupqauxx3BWXXZxWD8tHxsdHyQrLy47z62gnJyjr7zI4/dELCMiJzjJr62v\nr66rp6m00VhK7L66yGZLPTQqHx0cHiIsOFy8qqCenqOuwupAMy0qKSs0UrytqKiqrbG4w29P\nftzMu7e7vLrMPCIYFxoeJisuSLSemJmers9TRzgrIiAoO8WtqKmqqqquvVU3N1HGt7Owraur\nr9spFg4TGh8nLTe9nJKTnK1XODgyJB4fK3mroKesqqqttk4rKjZmvrCvsaifoKvXLiEaEhAW\nHilJuKmemJmhuUUoISQnKjrPrqKdoK7SVEw+Ny4tPcarpqamqKmor98wIiIlIxoUGy/Fqqm2\nwq+mq9EuISRDu7a+v7mtp61dKygyTMvH2Mmyqamus7i/vLvIRDk7MCccExcmTr25vbmpnqC8\nMyMlM/K8yc+4q6ivXSkoPdC5vMrEsqiptcLNy7iwu1M1My0dDxEcLrqrq7ConZ+zPB4aJE+6\ntq+2taur1zMtLkW4rbe8u7i3trvJ38u6t7fiMSspHxYSHC3CpaesrqmosmYnHB84uquqrrqy\nsL5TMy0sX6+srbrP38y8wL3Dzb25s75UMh0WEBIiQK6op6enoajMKxsbIlOso6Cmqq213S8h\nITDHqqavyHrjw7q0vtXIurG52DYeFg8SIUqspKWqraqvzS8eHCJIrJ6dpLHH51Q8Lyw07q+n\nqbheP0nOtK21y9bfxMhGKx0YFhwzy62qsrzAuLjGSC0oLl6vpqSrwXVUZupnQzc93bWstNxB\nPGG4qKm521di19tPKx4WFR4zuaqstsa7sKqwcS4kJzy9qKSqvNX1Y9vpTkVDTunBv8XL08K0\nsLbAdkM+ODU0KyEeISxLubCxu8W+ubS2v108ODdF1by2tLzL1Nvd2v5VRD5CW869sq+zvcrZ\n7m9WRz81LSUfJCYwRtq6sqqqpqmtu2g8LiwsN1nEta+zuL7IytTvVUhARWDMurW4wM/y69XU\nb0QxJB0cHiQ0arqspaSjpquyx082LSouOlLJu7q7vL68ubzC4Ek7O0jfvLi5vMbIycrnRC4f\nGxobJDBgu6mjoJ+ip6/ESjQrKCsvQeS+ura2uLS0ucPhQzk8SdvBvLy+w8vMz3A/KR4cGx4n\nNXS5q6afnp+jq7xUNiknKC04TN7Fubexrq+yvuRFPT1O38q/wcTEx8nQZjgmHxwdIis+7Lyx\nqqWioKOquOo7MC4sLzU8SmTXwLSvrbG911RKTW/ZysPEv7/GzuNNNikiHx8nLj5U1cC4ramj\npamzylk/PTk8Ojk7QmDLt7Kzu8nV4Nrc1t3azci/wMjqUz80KyUmJiwyPU7ywbuvrKuttL3V\n905JPj5CRVhh0sa8uL/Lz9HWa2TpysO5uLq50WRDOSwlHBwfJzlmv7mrpp+fprRbNi0xMjc7\nP2u/rqyuucrP2uFQPzg9Yr+wr6+yt7W+XzgnHxwbHiUxS8uzqJ+eoKvHRTMtLC4xQtq5raqu\ntbvI0VQ4NTxN18bCs62trbPL7k04MyohHhwiLT933byvoaKks+JEPDw2NzRK1rixsrvAvMDJ\nWjs9T+/Y39K1rKyuvdHO7kkxJh8cHCMrM0FnuqifoKWxwedKOjAuMknmxru3t7Szvs5WRk1M\nTE1ezLSws7C5urx4OS4oJCAeISQ4Vce5s6ino6y15lZHPDkzOkXdyLu8u72/vdP5UkRJUWHf\nv7m0tbW3uchWRDYyJhscISg3ODzdsKSfoquts7rNQi8uLzU+PUPeurCts7e3usXmS0322tjU\n0se9xddwTj8xIiAkJSwqLDjQsqelqKWlpqy+Tj81MzEtLTdJ1L27tLCusbfH0Nvl+21h7NXd\n6mJwUUEtKConLCkpLUbRs62tqaelqK7F2FZIPTUvMjlJY3rWxrm3uL6/wL/G3lRe+PteUU5S\nX1Q+LjAwNjYvLzhby7m8ubWura66x9Ld41lIQ0ZLXFpfd+Xczs7Ky9Dj3Nx6eF/9burieFt0\nYUQ6ODg6Pzs6PUz3ysnHwbu3t7vBxcjHztx2Uk9eT01OTWTi8+7d3d3Z/X5k6OBu4V5Y+O/t\nc1NWWldQSUQ+QEdJT1tt2ci/vLy8vL7K0tpfcVdRWktaVllyWH70XNxv4Ploz/nX5f7b0d7P\n0N7y4WROTEZGQT4+Qklbe+DYzMrFxc7NfuLQd23sXW1o/vZ2aWx0fe5WWm7c6dbL2MzIx8rd\n1tVd9FlPWEpJREhFSU1FSVpcffnv8N3Mzs/N0NPP0+fvflhhU1xWVmb56efdztXNycrRz9vn\n1mBqYVdeXmRfXWtgX1pTUU9ZUVRPV1/25+7e3+7a3/FobXFu5Glc7N3t2dvd28zP1s7Y1uDf\n2v10X/P0ZVZkbk5gVlpaWmlmXGJk/OtvXV9kfHtfanhe7nhoZeje9dTq3dvP/Nn02Xx+7ejc\n/d/w5ufi/uZwd27udPBqVmBh/FbtX15fZWV+YmNsXmFecGr8bv327u9ze3796H3b6u7t6efn\n7Ono7Njm2tXO/O/a4vLg73J1aGdodVNaWldiYlpfe2x1W3Fjbl9XXF53ZOppbWfq5uvn39fr\n2nrc3tzb3Nna19bi7tfb6Odp8O5Y9GxuWmxlXGVe9mpxZmNaXllZU2RWVV5iZltsamrp8+zW\n9d/s3n3c29nT1NfgyenL39vt6eHy5PXdbtXu2HPp3tvjXlVKTEdGPTw8QEVLUF9q39DNzc3K\nzs7U4/Ps9t3k6t7Xz9HR1dHK2M7Z3eTe1HbtWXFWZ1tOT0tSRkg+PTw+TEtVV+vXysLIycvI\nztnk7/xvfH337ubu5Nzd3+Dc19TV1dPT1t7vfmtlXVxbX1dUV1VPTEtJSEZJSUtQXGf47t7T\n0c7NzNHU2N7f6PHo6+/v59nZ3N3Z1c/NzNDW1drrfXtoXl1cWVFOTk1KRkRGSEhLSkxSV3Dp\n4NnT083Oz8/V29/j5un4fPHu3tfW1NPMysrMztDT1d98b3NoYlpYUE1LS0tHSEdERkpOUVhf\nb+7o3NXX1NLW29zf6npr9u/1f/Hi3NTRzs3MysfIyszO0djjfGlbWVlXTUlMSklFRENESElM\nT1Nbd+nc2dfW2NTU193i4N/p4uDq5d3Z19PU1NHPzczNz9DW4Ol7X11bU0xISUpKSEVCQkdL\nTldaYXvg2dPP0NLT09nd6u/0cGtr+uzk3NnTz8/MysrKysvO1dzi6nleXFZLSUdISURBPz9D\nRktQVWJ64NPPzc7W0s7R1t3r+HF57+rk6+je29XQz9DPy8vKy9LV19vj+1ZMSkhFQT48Ozs9\nQklLUmjq1s/KycjHyMnN093o83RrbnFweX7v6N3Xz87PzsvJzdDS1t3jbVROSUhEPz49PD0/\nR0pQX3Xe0svIyMjKycvP0tvrfm5rYmV0f/Hu6NrSzs/Ny8zMzdLY3dzuXk9LSUVBPzw7PD9D\nR01XbOvXz8zJycnMzc3O0dfd7fn1d3p4e/Pt49nV0c7My8rM0NTW4G1YT0xJQj47Ojo6PUFG\nTFl+3NDLyMXDxcfJy87R2uLm7PJzZ2dtb/7g2tbRzcrKy8zO0NTsZldNSEM/PDk5ODk8QElU\nat7OycXCwMHFx8zT1Nnp/2pqaG14cXvy5tvQy8rLx8TEw8fS611PTEc/OjY2NTc6PURKVHTc\n0svIxsTExcbKztrc8HB5Zvrc0tPMwb24tbGvs7rKUTorIR0cICo48Me6r66rrLXMRDczN0hX\nb2hqx7u0srzJcFBaZuXYyL69tbGztL3XTDctJyAdHyk+xbe3u7+8urrNSjgzP+zAt73bdNLB\nvr7cTktN58bEx8vDvri1urq/2Vg3LComIyAmN2S3tLu/1crFyN1IQD9Xx766wtdtX83Lxs9S\nVVnqxsS/x8O9vLa7xcrY3lM6LSIeHShSxLO+fGHYu7e9WTIzPdS0tcDtXW7Kvsz3Tk/gzszL\nzc3GurW0t729vcxfOCkfHBwnPcm4vNLv0cC5w147OUTRubfE605Wyru7yl5ETs29vMtkfsCx\nr7S9yO1UZUszIBYWI+OqpblDNV+zp7BFKig/tKWrzzk3X7mtuVQ2PN+1s8ZTSuK4rK660uDi\nb2pFLSAZGyhkrq28TEP8u664WjIxRr2usc9HRG/Aub13UlDxyb7DytPPvri5vL3H3FFJOywh\nGh0q+bCuwUhDYLyzv0sxNFe1rLHQS0pc2L283FdPd8i6vsrQz7+5ur29v8HUPy8nHhsgMPS0\nus9VadC4ue8/ND3rtLO93E9i28PJy/Js/9rDxsfWysS6usDGw7jGXD0yKh8cHizhsa++W0z0\nvbXCTzc6WbywuNBcWerCy/xcYnXXydDQ1su/uLvGxr+5utQ/MyolHx8oP7+1ttJWU+PBwc9K\nQEngu7i8z9tjXt7Vx+V2T+nOxL/Oys26ub3Hw7/Vbjo0KiMdIDfbrrXLQT9rxrLEXDk8WcGy\nvcb+aPXVzuniXtzMwsfT3dy+t7G7ytbLw9BTPC8kHBwqVbCwwT84Tsattd82MkHMrrXFWlXd\nwL/Y8khoyL/I6lpXwLSwudpi98W9wVE1KyQeHzBUubnNRTxnxa61zUQ4ROS3ubzNcNvT1V56\nT03Ky8Z2aV/FsLSz3mBNz77O2jcvJiIhLfnEtdpHPFi6sa7PRDg+2ry2w99o5tLXze5OSOrE\nxstSWtq3r7LCTU5hv7jDSjAoHx8qScS73jw5Vrqtrs4+NkLMuLjOYlzOxvpvVVrjv8DlXkn9\nxLSzudNGV9K4tcU+MC8qKigsO9rD3/5K8L2xt9ZHNkPbv7jC22jQzujT7ejtV2X+zezez8Wy\nusVLTO/Es7lnMi0oJyc0RtfIX1hQwbmvvFxBPWrPwMjrf97MxcxOR2PMw8hbPk7XubK4zlhT\nZsa1tsJKMDc7LyopLkrBvnRTTcu0scdCOj3ew8TWV+7Kvb/mST7kyM7aS1P2vLu8v9/g6srL\nvLvGVy4yODIsLC9EzMFzYGnNt7nNQkJD5cPKz/DLy8PKS0hKzs/Kb0do3by/vs3OzNK/zMXN\nUT87PTg0NCouT8bB41JJyra+1z9BVsa/z9X1xcDD3EQ9X8jJ2nNLa8/b1M29vr5pVvHlzMvz\nRUE7NDMuLkDMys5WXN+5vdxbRu/bz+nTy87D5VpWVGHuztPQZU5808nGwcC/2FBMZNHGwllG\nPEI9MTMwYOTeTELpx7bSWVBgz37+W8W+0OpZa1rK6ufe3NdtX1XFw8LN08vO7VrkxcDQSThf\n5zwxLSw/y0tEUsW9t9pM59nUVltmv8ZbenLcxNhRWtjt31tJ2sfN+9DKu7xqWcbJ2MtST17x\nPi4uLzxOS0Riyr/E1PLS5nZVX93DyGXW1c/bWF3fy09xXu3a3HLgvcjJzsrMxXVvzeJZUExI\nNC8uNklGSFjHv8TgfeHdbVNh2cnG2tvWyMxWW8PeRkvj5tlubsvAy8/GyrzU3NbkWFpOQE8z\nLi86P0RSccO/z9LY1Gb8VuvV0NLpzM3d1HT5cORbWfh72ezQ3cTGv8TIvsTOXt9xRUlPNS0x\nLzlGQkrWwM3Ey9Dc9lNe29nO7cvD2c7dVXPPXUR41u9h6dDBvsC9wr7G0+7beDpSTz4qLDM7\nQjVN077by8PD1ltlfd9m5srJzenTymxc19JNUO7c+njbwbq/xL+7vM7kzkY8PT4zKy8vRz0/\nT8fC2MXIw29bXnBtXMzYzczOy85gbsleVnTxYt3e1MC7v8K7ubjZbeRHNTk8LCwzNEBKSnPK\nydG+xM/d+mBVXmLP1ubO0tTjzt357N5zXeLfz9PAvb2+u76/zE5DTjc2LisuNjg5ZODVz7+/\nwcrw13FVSGnw8PbTxuLKxtZwzM9ree/a5NbGuL++t7fM/NVbPS84LSkrMDw3THXAysO8usj1\n6H5hS1h53mXWwMjVv83V29vv12hg3s3JwcK5sL/Qvmw+PjstKiwpLjw5S9bFw7i6vb7O42hS\nTFpRY93e1MvIwc7Yzcpiad35XtvCxMS7t76+xuNWPzcwLCgoMzE0SNLMxre0tMHGzupGS1hN\nSlrh3uHGwMnUxMje6tnXft3Gxci+ubnLx9TqPDE+KyUmNi4tQezKy7uxr73Jxc5OSVFOU0dR\nyNfwwrjDzcPF0e940svez727xMm+x3FLREAvJicsLiwvTX7bzLeutbu9vcxYUFdQR0Zl6e/T\nw77ExL/Czdze1dTi3czEx8zJ0t5qRj43LSosLi4vO1Dsy7+4tLW6vsHL419YUUlITF3e3d7N\nwL/FycnFxczZ2tDO4frp8mtSS0Q9Ozc0OTs7O0RXcd7NyMHBxcbIys/V33lrc2Vo++Dd39rW\n2Nra3t/f4ufd1c/T09zr7HFbUEpHQ0JAPj4/Q0lSWV9r69rSz8zJycrMy87X3uDxanV2a2d+\n4tnV0tHOy8zLy87Z3uhuVk1IREE9PDw8PkBFS1Fe+NzSzMjHxsXJyszW5eXudGZnamz76d7a\n1tDQ0s7Nzs/Q1tzofl9STUhCPz49PDw+QkhOXPzj1MzKx8fIyc3O1Nje83RseX7/7+ng2tbT\n1NPPzs/T1dfd7HVnXFFMSkdCQEA/P0FGS01aduHXzsbIysjKz9fd5+TseX7u/P7o6unk3djW\n2NbPzdDT09Xb5/RnUUhEQj49PDw/REhQWmrk2c/NysjJyczO1N7n8e9vZG10fPXq4NvY19TQ\nz8zLzc7T2NvqalhOR0E/PDo7PT9FSlBe6tfSzcvJycjJ0Nre5nt39P13c3V89+nf3dvUzs7K\nyMjL0M/S5WJVTEdDPzw7Oz0/QkdQYvDX087KycjKzNDX3uvzfnF8eXJ+7uvw5NrW1M/PzczN\nztbZ3utqT0lGREA9PT5ARU1WXm7g1tTQzczOz9DT3OHe3+96f/l7bW1v++Xi3NfT08/NzNDa\n3uP4XE9JQz8+Pj5BSExRZPHc0szKzMvMzc/Y4u55d29ndv51cnL+8O3j3tnV19LS1djg4f9f\nVE5JQ0JAQUZLT1ZifuTY1NTOzdPa3+Xt7XBs6vf47d7Rz9TVzM3V2NXO1Ong3VxNSj88PDg6\nPkJIWO3YzMXCv8TLztToYlJPVFBRZv3j0M7GwMnKyNHl7OP7W132/GZrbEtJT0U+QUNCSllz\n4dnOxsbIyM7V2ftkZFZSYV9f4dja0M/RzNXe1+V8fXtofvpw7vBVS15QQEZNSEVPaH/32czQ\n1MrI0drZ4mteZGxlX+Xb6t7Mz+XY3PptaXFoWVpuamP662ps/nZqYW1pU1diVFRod2Zt4Nnk\n3tPY5d/d8W7t6mZz3+n92M/a2svJ19/Z7k9OT0M+QkRCRE5kbOnOysvIyM7Z3OloXllXVVtt\nePrc09nOz9rQ5G7pblZiZ1dXXG97bfrvb2j49mht+3BgZmleZXZvb+7f4uDb2+jm3uh1fv1r\nY2RoZWd0aWZ69/jt4+p8/f9oaP51Y2Vvd3v06enr5+v5fvry+fbzfv718/P18/p1eXRpYWlt\namdqd2pq++5+devr8Xt16/v+5+t8+f10eHBtcHH48/Dr7/9+/HVqbn1jYHFrb/t+9u3s6urm\n5+vt9fhscv5gbHB0eGv5fHt68e378+/t/e39bu31eX14bllda19ieP107ePe3tzb3t/j7nVx\nZl5cXWJb++5w3uLc2u7m7Gv+6WRv9GtzeG5vevX3funo/+Te9v7tfX34d/V1Ym9dXG9kbXZt\n+HVu93hz5Oby6uzn4ujg7Xjo/HXw+Xd26e7y4+b2++33ZE1f8kFc2VByzdTczsvR79LNWXbf\nTkRlSD5PTE1O+eJ018rX4snS6dfabmDxX115YPzu5dbe09Dm6d5uZXxbWF1cYWhu7urn1d7z\n3t92aGdZS01QSklSVVVr7ube1c3U1c3c7uH9XWRuZVx733zXzt3Y09vt5PBrZXf2YvTe6+LX\n199r9FRHSTw+Pz9GTV7y1M3Fx8nFytPa7lNZUk5SWmRf48zUzsXL0c3O3erf5XHb11zX2mXj\naldMRUc9OUM+PE5eXN3JzMzHws7ZzOZWX2hPTetfYNnTy9HDwtnMx93czNre1NTa4NByVVs9\nNkYzLj83OENf6NrEur/Et8TYye9TT1tNQGDiT9zAz8y/wczRxtH+1c7828Xp+Mj8TVc9MEAx\nLT00O0Ve0szCtbnGtr/c2NlKQlVFQ0/nXt2/xsjDvM/aytHz3MvW2NXM1+Lq5Vg8OjI7LS0+\nMTdO2uHDtre8vrTG5tF0REZQQUhmYuTQyL/GwL/RzsrY28/OzdvMy+n15V9OSDUtNzQmODwy\nP+bGy72xtMi6tmHR1kZGXUVJb3nd48G9zr6+09TI0eHYy871ysZSZs5FQUQ8OCw1PS40U0xI\n0MC9wry2xNHLzl1Ga3RITs/1c87FxdbCwd3cxcjmzcPN3sjNX2leYTs8QzMtL0cwMVtaW3K8\nucfEuMNjz9pqSlDaVlPYxd/Svr7L1b/N99HM2ePJx9bW2PxySUdNNjk9Ki5TLzdfX9zdw7W/\nz7zHbuBj619Lftbf49HBv97EvOd23NridM7D1M+9ztvYP3dPNDk9NSwtSUEyS8nZ98S4vd7M\nvdVU5sZfV9nJ4E7CvevswsLpXdfFdlzHxsjX4LzsSVdOPD46Oz8zMDtfPUft0crfxbvM5s7P\nfmvs19hW98PcesvOzHztyuhn39DKzdPCvs3hzdZGSlNBPjFMRS8wRP84R17D21nNu8Vv28jG\nZU3DylNV1r13T8u83WbOxM5b5r7N/dbJxNNY9eQ/TD9HQzg9ODg9S0BOaHrPz8vDxsfN0NHM\n2tZy4OlT6eDd6dzQzObs1d7v18zOytDLxdhkb/FSPztJPzo0NT9LPkVl29rhzr7BzMzNzNfw\nbdnqbGr1fN3g2s7K2tnY3N333tnd4NvY4HpnXVpSTlBMSk5LRUVMTExMUWNu++7Xz9DPzMrM\nz9LW2+b8fGldYWdrXl5x8Pvr39bT0s7OyszQ0dnk5/tgYF1STEdGR0ZERUdOUU5Yc+jg4d7S\nzdTa29ndfG5sbW1manT47eri2s/Nzc3Kx8rNzs7R4e7vfl9UTUlEQkFAQ0RHSk5TXvzp39nP\nzM/R0djk+H9+bV5gZGdrePjo39XNzczKzc/P0NPa3t3k7fljUEtIRkRCQUJFSEtRXvri2dLO\ny8vO0tjm9H1qZmhiZGx8+ePa3OHb0tTU0dTX19nd39vc7f14YlNNTEhDQkNCREdNWGT439fQ\nzs7Pz9Tb3+jx7O348/L4+/357OLe3t3b2NTU1dXa29vj7n5oXFROSUZDQkNGSUtQWWZz6tXP\nzc7Q1Njb3t3j7/36fv74ef7x6ejk2tnb29PQ0Nvx2tbgXlpdTUtEQkVIR0xaYPf54tjS1NnV\n2+H+e21cY2lybN/z4dfd2tff5NzV6OzYzNXTxMjN12NYSjc9PDY4Q0lY3dbExsnHxuR4X05Q\nTE1Z8XPOyMvDv9LLzu5kZV1dW1za6PbWztfS2t/bTTBSXi80ZVQ+dcq+6Nm9wlJwzVZFTmh7\nUW/GyeLGvM/P19fdWVjjZEzj0PDjy83X51lLPzo9OjpCTVPiy8nCxMbH1Ph6V05TTk5mbN7P\ny8nEyNjT22lXa15ZbOvi8NrS3/rm+V1XVU0/SF5KTWvoYt3Pztzb1e5fXulXWuttY9LX5tfR\n2tje33h5/G3z3dbbzNxaZV5FPkdBQEhcfPPTysrPy9Tpd2NST1VOW+ra1crGzsrO5eVjXl5j\nU3BmcePn5OnibXpdWlRTU1tla3j77/Fv/+RcZfH6Xf/tbnju3v3dz9bi0s357c/pZN/ZeXfg\n4U5D7kc6VF5EStNkdtbG2ezP125a4FxQeeFx88/Z0NXVzmzs3l9N3GFO7e5cbdLp4+jd7HJz\nYFRVa1dY81pX31pTb/dbe+B05Obf6ed4fu3g6m3a2+bV1dnXzd/X0t7f3epGR3M+O05TPVLZ\nWnLOyvrTy+9e7/FNVPZtU9nH/tHD1t3N3HBzbF5eXP5teN3o9trXeuXnXV9rTlNLUFpIVX1r\nUdbfbdza8f3d/PB28PXm4tr50Mpz0M/la83o5t3a1eXN0GM6VVouPlQ7N9XiUca/zt7BzWP7\n4VFIdlVK08/yzcDM4sfPeXvZZ1Hj42/mztrPz9nT7Tk+5Cw3WkIz1spKyr7Ha8XMXVjb8T9h\n101Zwcpxvrzj1L/lTt3oVuTWzt/RxlxPUz86Nzw3QExma9jDzcfIyuHk71tUUktYcVfRx9XG\nv8/Hzt/UePrd4dfK2dXJW1FIPDo3Mzs+P1Xc2si/wsfHz+b5X1NLTFhmXNrOyc29z8jG4t7P\n3//B29XPz+hPbT4xPzYvO0k9T83PzcK8zdTP7FdZWUpIX+FM08HWx7nMzr/Y4sPI4sLA2NjL\n70RMOjA2NS86P0Zc2sbJwMDH2tnvVk9MVVFM29fiwrvSw7vY3MPU6svFxsvLwl1eWzwvLkEq\nL0hJPc3D1cW6v97T12BJV1ZJR9ze4M27xsy+wvLSwc/kx7nKw77Y8lo+MSwwLys1Rz5UwsfD\nvLnL0NnoTkdSTkxV3sxvwbjNyrzL8cm8zc24vsa8v2hXRTAnKy8mLEpIRMC1w7y0v+nhz0o+\nXFA9UdTK7sS5y8/B1+HJv8/Etrq9vrfpO2ouHzUuITVKRlK/tL3JtcNTZtU9PFZkP/jF97+5\nzL++08rOwr3St6+/uMlozDcvKiUuJi0+SEzBvLy9vsTyUWVMPk1bSObI0cW/vcnIwM3XvrrG\nua+7udvSzC4vKScqJzA+Rmi8vry9wc5aTllIOkltWWvIvMPHvMXPzcvGu77Csa+1uthsXi0i\nJCslKTVYaPm4sLvFvtROQEw/Okj739G/u8K+wMvazsW+v8SzrrWw1EjRLyAlKigoMGbW5Lmu\ntsTH1VA+QUI6Rnlgxsi9u9K/vu/Pxbq5z7Opt73SQk4rHyEvKSk46MDQu6y0xdTkVUE+PUJe\nbnHGv8XPxr7Tdsq1uM+4qK272k/ULRwiKykoLfi70r+trbzce9pGOz5GWFliyMHI1cy/zWLX\nurG9yqyls9hoWjMhGyczJio/v7jHu6uyzV1oWks5O3fRXNG+v8zWyMbf5b+vu8qupbBvVUov\nHRoqMikpQbqvyL6tr8pHTXVeODrtyc7Rybq+0OndyMe+s727raeuYzM3LxscKC4vLUazrr28\nubHJQTlZVzs74si8ysK3vcvV38W6tMDCrqmt2Tk/Mh8aIy8wLDTCrLW+uq+3VjNF4kA1Q863\nwti8t7rL7cWwr8zRsKqwzEEzMyIaJystLzPVrre7ubW43ThBWT49R/i9v8i9uLi/yrutr8C7\nsK7BYWg4JB0fLywmKkO5ssi/sa6+RDdXXD03TNO+xM+8sre/v7CtvMO1rrPjQjwtKR8gKyou\nOETCtLe0ub6+0Es+OUFPUlLbyL+7u7q0sK+3vbq0ts5MRzsvKigtLy4vOEd55NjIxcXBxM/h\n5+Hh/Wt/5Orq6tTJx8bCv7y2tLm+wsz9RTk1NDEuLjA3PD9LY+3b2NnOy8zLy83P19za2tfO\nzMnFv7u4uLm6vsv5TT84NC8sLC0xNz1DUuzV19LHwcPIysnJzc/Qz8rHycnEwb68u7y/ws1s\nTkE5NC8sKywvNz1DWefTz83GwcLIzM7Ky9PSzMrJyszHwb++vb6+vsfeX0s+OTIuLS0vNTg+\nSmHk1trXysjO0tPLyM/W0szIyczLxMDAvr27u77DzHJMQDo0Li0tLzE0OkNTafTn0sfFxcjE\nwMTKy8vLz9TOysnIxcG/v8C/xM/8WEhBOzIuLi4vMzY8Rk5W9dXEvr+9u73AxMnLzdff3dnO\nzc3Iwr++wMHEzOFhTUE7NS8uLi8xNTk+S1r52Me9vL28u7y/y9bW2uvr597S0M7Iw8HAw8TF\nzN15UEM+NzAvLi4wNDlEUmXezMW9vL29v8TI0eDc4PTv4t3Sz9LKxsfGxcTGytLfdU9EPTYz\nMTAxMzY7RVBs3c7Gv8C/vsHGydDZ2ODk3+Pe19XQy8nIyMrMys3Z5PNiS0Q9Ojk2Nzc4PEJJ\nVXvm3M/JxsnMysvO09nd29zj3NDOzs/PzczNzc/T0dPe/G1kVUxKRz86Ojs7PUFFTVpndOXU\ny8nJxsXFycvMzs/Y3Nvi+Glr7+rt6+fe2Njc19TZ6nxtYF1YT0c/Pj4+QEFGTVtrft/OzM/X\n1M/ab0dEvam8PEG8uE5zssI+R7u15lbIw1hBZ8xsOzpLTjovNUJHQEVj0tbt3svBwsvPzdDU\n3ffv1tDpWdzH1GTew9Vs6M/XbGXt3NhfZvn/bFBUT0xJQ0NAPkRRV0tLdNfb7NjFx9/ox8TP\n3NfI3W7lz8zufc7WeN3a3HLw3HthfmpP8eJvZVZoTjxIVUA4O0ZLRUh1z8vLyb65vcbFwMXZ\n7W5+3ldNW/rzaVdibNbgTWPXxdtM5Mfca+rP219g7009P0hEOThGXU9O58bAxsW9ur3FztPS\n8mdSTVhPR0dacGd6de7V09Xe5MnC0/LSyNjl2v5VUk9CPDw9OzU5S2BcXtW8ub+/t7a+z9/c\neUpGSEVHS0tWfeXg4M/Iy8/Q1dLN0Oby09Hm3uNeUmlNNzQ6PzcvOln4a3fJtbW8vLi3vc7e\n9lNKRkJAQkVKUmrc2NbKwsfNycTDzdrb29/X1d7iaEc6Pk4+Lis2SUY7Q8+7vcK8srC4vsjP\n2WVJPz5ERUA/THza3NrJv77CxMLDxMzb5+Pd2NFvPDVEXDwqKjtQPjVGx7m/xbqwr7e/yM3W\nc0g9PUJHQj5GYd3a28/DvcHJycPG1O/x4etqbdzRbjw4UXY8Ky1BVz04TcG5xMe4sLG4v8TI\n0P1LPT5BQz8+SWB2793MwL/DxMTEzOH7fW1tXlz839viUDxFbU4zLDleSDpD1LvBzb21tLe9\nwsva3WVCPkNKRTw/Wuz5c9u/vcPGwsHJ1+Ls6NjlXFFPT0M7Pj85NDZBTlFnz8C9u7i2uLu+\nyNZ1V0xDP0FER0VGWOLd4NTIwsXJy9LV2OtpWFppYVxheOLg6OPc6VpJTVFFPDtCTE1Ub9fI\nxMG+vb7Ay9xzZFJCPURNSUZa0s3Oxb29v8DDy9TV2OXvXUU7PEU+NDE5RkVDWc/Cv767uLi6\nwM7odVxIPT5HSUVIWfHe19HOysbI0tnV1/NdX2tmXl1qbnze29/d2d77em1dTERISkQ+QVBd\nX/jVy8fDv8PIyM/9W1tcT0VJXm1r48rEx8PBxMfHyNFkRj9APjYwMTg+Q0tq0cG7ubi3trnB\n0u1sVUY+PT5AR1Bu3dHJxcXExMfS5fltWUtJS01OU2J55dXSzs3Q1eB/XU5FQUI/Pj9IVWXk\nzcO/vby9vsHJ2G9aVU9KR0tWYWr01czIxMfHxsrYXUY+Pjw3MjI5QUxi3ca6trO0t7m9yOhU\nS0Q+PDw+Qk9o6trSyMHBxcjN1977W1JTVE9QWmj549jUz87U3fdYTk1HQT4/Q0dPX/PczcTB\nwcLExMna/WlaUVBNTU5e5NzVy8XFwsHFy9XtWEY8Ojo5NzY4QVFz2szAu7a1t7q/x9b2UkI+\nPT0+Q0pRcNfLyMbBwcXJz9npcWBaU09UbvP17+vu/nFeUUxJSUZEREhQaPDf08vGwsDCx8vS\n2/FhWlRTVV7+5dvX0szLy8vO0NfgX0c+Ozk5NzU1OkJW3MvBvLi0tLW7xM/dblFHPzw/RkxT\nW+zSyMPCwsbM0+H/a2FYVVtdWVx85+xeRz0+TFpUSD9FX8u+wcjNzMO+wNFvUU9cXldOTVRt\n29DV2dvTzs3M1Ox9dn1/dmdbXF5fVEhERkdLTEtLT2bj0MzOzcrIyMnN2vdpWlJSVVVcb+vj\n3NDOzMnLztPW3enxdmNdXFdOS0ZCQkRHRkVKUWft2s3NzMfGxcnO1+/+9HRxZmpr89nX2dja\n2NTW3ujq+f/z6v1iWE9MTE5NSENCRUpRVlpcbOHQysfLztPSztDS2eXy6Nva29fTz8/Qz9vv\nZlpUTUdDQ0RHTE9TW2Xm09HU1tvh3+b3aVtaXGNv9PP27N3W0dHX2tvc3ujtb2VrePz7/Xp5\nb3X/fXRtbV9cW1pZVlZcaGxub3Ts49/j7O7u7u5+cvvu/nFsb/no2tfd3N3g3+Di6vxsb3Bo\nXVtaXmxxd2tpeebY3PB6amJ46+j2YFleYm338XVeZPfg2+trZ+zVz9hgWGzr52xYU1Vv4t/o\n8+jd1Nvt+Hv+7unsfGdr9OjvdGZfZ/z9bGVfZnno7XtoaO7m82hcXGzw6/F9b2ty9urn63tv\n9+zt9H306uDf6+nr497m9H359W9hXV9tfXZkY2xqbXFwfnJsamFmb3Rw9On2+ezm6/Pt6+vr\n8+3w8PB+dvXr8m1lePfv8nduaG769uv0ff3v4uZ7ZGL/9fj0dml09e/7bGhfZn51dWpjZ3Xi\n3Onx6eTj6/RydO/1aV1o/337/n7t4+Lj8fXt6fJxa299dG1nZGNudHn/b3X19vVvbu7v7nZm\n/evf5Ht4fvbwdmltfX75/25t+97h+25rd/b3emZdb+Xe8m9+8+bleWZm9/h2eGlu/Ofqfvr2\n6/xx9nVqbmtuZGB1dPvw7+nz7OPr+W1z6efv9nV48fT17/R+fvJ5bHdzd3Rx/3lvdP30cmZ8\n83Fxev7/8e55+n704+589/Lr8HP+/v3y7Of3c3n8/mtpb21yeG96fXn28+nybHv04+J2bXj0\n7Hdu/XhtaGz//HL57+7u9ff1fv99b/X1+f9tcm1q+vPw83Z18+xvb/367vP49P77/fTtenz6\n//X5+v58+Hl3cG56eHJ9+/fufXvx+u/q+HRyeHFvbWZkc+75/fjr4+Xxfvrv/Wxrb3Z6bWVq\nen10b/To7u7t6Ov8+u3s8vj9dWxtdv12bm94fPt9/evq+Xl2c3Nu/339emxoZm/8bmXy5/Zt\n++zo6e3v/fT48Pj78vfu7v359/T8dXx5Z2rz8HBtd/7y+XduePx4bnL39XVudH77bml9/3V1\ne/fp7PPv6+v3fXf37+/u8Ofi6ntpc/jzcGlvbnx/e3/18H1weXNteXBv/vV1b/72em989e75\nfXr+8PD4f+zm6vX36ePr/Xn/9HtoaW5pamlpbX/0eXZ5c3J3cXny7PTu8ebn6+br7e76/Xhx\nb371fX7z9Ht8dXdwaGtpZ2puenj//fr+dvzs8e7v7ezr9e/p7fPy6+3v+nBtbmxpcG1mbG1z\ndn3y+H7/e3n/fXx6evz49fP58u/t6e93dXJye3l9fXt7fvl4b294e/x8cX19+v1seO/s8Xt4\ndH3p6u/z8Onk6evv+Pt1bGxvbWhlZmp0fGdq/fTq8u7p7vXz+/707O/8b2tvfH1rcPvy/v34\n9vf98e3t7ejz/+3u/nJmZWJhamhvcXl+ePrv7ent7u/u7Pd7/fl78/L5cXB+fW9rcXv6enxw\nbXL+cm19+v5+7+vs7/h49O1+dPry7/N2+/r58vf3eHZ3d3Byc290evr38/n0/HhzfP/7fXV2\nffv57/T7/e7y7/P8/nz3+HJ1c2z7/Wtv8ftxb3n07np89n1xbHN0bX/x9vj78O/2/nv87ujw\n8fru6fh1bXf5fXR3ePx2b/x+enB1cGlrdP12cW9+9f3t7Hpv/O72+vbr9fXt7ux+cW12d3n6\n/Hh9/357/vP6bmx3+/fz9Pn9d/31fnd69v93fHx5dvvv9fTzemxra217/X58c3j9/fh6evju\n7evr6Ozu8fT3/v98emprcWpsc3l7fHx0e3r+fn707/D57erl4uT1b294+fp4b3V2//54bXj5\neHFvdWpsbGxze/V8dfLs9fr18/90dfbs8Ovt+u3n8P337uns8n5sb3Nz/PT2fn56dW1pZml0\ndGxnZmlrd/r06O767uvt6u3zfHTy9PXv8vn68/398Pp++/10bHBvbW909fZvenxve/Vxferv\n5N/xfHly/vxqav72bnJ9bHD/dm51eXhwbfrp6efh5+vw9u3t7/Rzam1qbXrx8ffw93h97O57\nfvr6/G5mc3RpbHZtbG9we/338uzx+PDq7vb18vD68envdXx9a19lcnRsb+/1cG96fP34+e/y\n9+3o9PXn7H/+9fLz9vv/+/92dm5oanx9a2tvd3vz6ejq7Obq+397dmlgZWZjanr7/vjs5+jx\n8O73/vn7d2tscnV0b3V/9vDs6/Tu7Pbv8fnu931+f3p6effw8/V4dnZz/Pn8+PX5fm9paWtn\nZGhlZ3b59/Pq6u/27+br8e/t9nr+fXp/8P54f/b0ef3+eXl2/frze3d6e3t3eHL+//T1+Pt6\nfHp3+35v/vXv/nzz8vLz7n1ub3dwcnx4dnd8fPz18/f8fW5oam1vc/fx/Xb97ff37e/y7Oz4\nfu3o8/Ls8vX4/v78/m55ePru+nx4c2tqZ19ldHl4dP/19vn69Pjs7e/6dHt6ffj19+vr7e3t\n7fD8amtoaHF5dm1udnj++fX8eP39+fr08e7s9+/v+nh9dm1tcXd2cW5y+3drb2trdPr2+fHq\n5+79e/b4/H727/D7+v52dv9/d3h++f1+/+/wfP78c3J9fHZx/e/u+f5+fv18eGpka3R2e3r7\n/3BzdHZ7/P308+3r6+f3+u7p7PD5enFy/Xh4fvH29/xycm1yfP7+/PX1+fj8/nVvb25tb3h+\n/3VybXJ5d/749Pf39fz29fPzfvzu7/3+/nx7/3t8//Ls6/N+fn318/bw8377+vT2+vn7d3z1\n/n11cWZkanN4dHRqdPz5+vX3+/b19fX3+/n8fX17+PH+f/n4+O/t7e7z+/Xt7/r4+Xjz7n15\n8O/5f3x+amVkZGZocW1lbXv77uzq5Obj5Onr93x1fHlvd390bn71fn56fXlscXNvbnV+ff70\n9vnu7vTy7Pn78e7z7+z7/v3w+HVzfHp+fGpsbWxteH3/8316cW599H58f/t+/n7+9PPz/fx+\n9vH3dX328u3//Pb7d3N4dXVwbm5ze/Xt7O/x+XJy+fD4+f3t8X74enR89/J5bmpvcWlse/T7\n/Pf2/Pv7fHj49Pt7fvz69PXt9f14ffHq8/vu8nVyc3Ntb/x1bnRye/T1f+vs/O35cHDy7Pxw\na2t6eXz8/H19+fjw6+nn5+/3fW5maXJra25tbGdsev328vDv+n5+ff759Px5ffDt7vf5+fL1\neXx8dX7+c21raXBzcXh4ffv99+/o5OXp6ur2fn90dX15b210dmxw+v5tb35zd3t6fnx6cHb9\n8u/w7O/8+/Ht+GPt7nR47nZ1bXxtbuT17/Z/4Xr8cnjuffJ4cHd3d2r4dnF5cHV2dft4evXz\n+nj++HR3fHn/+O7t7fP67ers+/319P9tbGhqbHFwaG50cXV6/Pns7vH18PDt7erp9fzye3Ju\nb254enl3bP36eXj+enJ4b2188fvz8Xl3/vn8eP10cHX17PLz6+nr6PL0fW548+73/Xlydnx1\nfXFtfPl+dP37fPX8b3X/+fb7eW14fW5z+fv+9e/7b3H88/t5e/n2/fbt8n1+7u708O32+/n/\n7vn5fGlrbPfl6m1kZV9g+unp6en19urz9XhmaPnq5+r+bGZpbf3w8PN9bW98e/z27fBzePZ6\ncXF2ev7u8u7o7377/3Rvd3Vy+XhwcXN4/vX17/348vL4+/TweHf6/vPz+/10dHxvZ3J6cnb+\ndXjz+vTy8vl4cnn+/Pb9c3J1//1zcvfw8+74cXP6+W9v/fj29ndpdPj07e3y9/v28u/98/Zy\nbWpqa3h8+/p8739obf12bnxzdfv+dnz3/Pj8+/5/7PP3/vz09Off6H308v18enVtbnJtb318\ndGxwfXJ49/758ez1+fz/9//89fb+d2prfnBwdmly8/Dx/HV/9PX1++jq4d/r/Xvs7f10ffn6\ncXrd0txta19KRkr7y+V02ur33exhU1373dTc5e9veObRzt3w6OF/XF9pXFNbdHx7aFxpalpe\nX37f4eLn6+Lg493kf28=\n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: text/plain\nContent-Transfer-Encoding: quoted-printable\n\n\n\nThis is what the message looked like on my end:\n\n\n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: image/x-xwd\nContent-Transfer-Encoding: base64\n\nAAAAawAAAAcAAAACAAAAAQAAAqAAAAOCAAAAAAAAAAEAAAAIAAAAAQAAAAgAAAABAAAAVAAA\nAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAKgAAADggAAAAAAAAAAAAAAAHJhc3RlcgAA\nAAAAAAAAAAAAAAAAAAAB////////AAD/////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVAAADH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAP/jEAQAAAAAAAAAAggBy\nAAAAAID4BgIAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVAIkjFhQAAAAAAAAABhQCKAAAAAICAAgIAAAAqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAIkjEyQAAAAAA\nAAACiICCAAAAAICAAgIAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVAIkjEaQDRxxxxxxwAiICCxyxxx4CBwh5yxwAqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAPkjE\nQQCqKKIKKKIAiICDILKKKIDyIiKLKIAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAIEjEsQCr5hh6L5gAiICCJ6KL6ICCIiL6BgAq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqAIEjEmQCqAQSKKAQAiICCKKKKCICCIiKCAQAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAP8jFDQCqKKKJ6KIAhQCKKKJ6KICC\nIiKKCIAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqAIAjEAQCJxxx4JxwD4gByJ6IJx4CBxx5yBwAVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAIAjH/wAAAAACIAAAAAAA\nAACIAAAAAAAAAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqAP/jAAAAAAAABwAAAAAAAAABwAAAAAAAAAAAVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAADAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n///////SSSSSSSSSSSSUkkpJJJJJJJJJJJJJJKUkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk\nkkkkkkkkkkkkkkkkkkkkkkkkkkkkklSSSSSSSSSSSSSSSSTJJJJJJJJJJJJCSSEkkkkkkkkk\nkkkkkhCSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTJJ\nJJJJJJJJJJJJJJPlVVVVVVVVVVVdVVaqqqqqqqqqqqqqqtaqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvVVVVVVVVVVVVVVVVXVVVVf///////v//3/\n/////////////7//////////////////////////////////////////////////////////\n/////3KqqqqqqqqqqqqqqqvKqqq2qqqqqqq9VVdqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlqqqqqqqqqqqqqqqqvqqqqoAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAXKqqqqqqqqqqqqqqqvFVVVYVVVVVVVAqqklVVVVVVVVVVVVVQSqqVKUpSlK\nUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSnlVVVVVVVVVVVVVVVXV\nVVVaAAAAAAAUAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAbKqqqqqqqqqqqqqqqvVVVVYSIiIiIiARESSIiIiIiIiIiIiIhKI\nRIpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlJHKqqqqqqqqq\nqqqqqqvP//+5AiIiIiIkERAgiIiIiIiIiIiIiIAiECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtqqqqqqqqqqqqqqqqvlVVUoCAAAAAABQASCAAAAAAAA\nAAAAAAkAhIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKHKq\nqqqqqqqqqqqqqqvWqqpZQSSSSSSQCSAQkkkkkkkkkkkkkkBIICAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvVVVVVVVVVVVVVVVVXHVVVYBAAAAAABIAFC\nAAAAAAAAAAAAAAUBBISSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\nSSSSSLKqqqqqqqqqqqqqqqvtVVRaUUpJKUpUCkgQpSSSVKVKVKSlKVBQQCAggggggggggggg\ngggggggggggggggggggggggggggggggggggggggggggggvKpVVVVVVVVVVVVVVbHVVVYAAAg\ngAAAIASCwE4PALAAgAIAAAAdGXlElCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\nCCCCCCCCCCCCCFqqqqqqqqqqqqqqqqvsCCJZF//kJNKJCUAmUlasIpRTkkhJSiUocHXDhQQQ\nQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQvKVUlJSUlJSVJVVVVXG\npUpYRkkhAYAgIASBQMUUCFEBwAEAAIAgkYBUyhBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJBJ\nBJBJBJBJBJBJBJBJBJBJEllVVVVVVVVVpWqqqqvuVVayDBh0SyQKG3DuVI0WuZYmi+Hu/i78\nNPJAgoUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAAXKqqqqqqqqq\nWpUlSVbFVVZYRqZwBoEgT/uSQSX0ZrIGobYlRBshELDJkxAJAJAJAJAJAJAJAJAJAJAJAJAJ\nAJAJAJAJAJAJAJAJAJAJAJAJAJAiUnVVVVVVVVVVpVVaVqvuVVZZByT0nCAEmIhy0wWsHJFE\niTPsRpVoVJpAgUJASASASASASASASASASASASASASASASASASASASASASASASASASAIIAdKq\nqqqqqqqqWqqlqVXGVVdYF4nyGQqQCKrWQUyktJQKgZJC2DEgEChS1QgJAlAlAlAlAlAlAlAl\nAlAlAlAlAlAlAlAlAlAlAlAlAlAlAlAlASghJHVVVVVVVVVVUqqqqqvtVVRZJzT3cEAEiokS\n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\nVVRZD//wpIApJBCCQBUpIEACqBIgCECAEohEAQUEswISkEhABAQBKABAQBKABAQBKABAQBKA\nBAQBKQAghCSUkAgAEABIAvKtVKqqVVVVVVVVSqrGVVdYQf/6AAkAAEQIEkAAAQSmAkAEgQoJ\nQAIAlBAiHiiCCQIEkBCUAkkBCUAkkBCUAkkBCUAkkBCUACSKEIBAASCSQkkAqFqpVUqqqqpS\nqqqqqqvtKqxYEAAAUkBEkgEiQBFKlCAIgIkgIECAEkCSAIIIgIAkgECQIoIBQAIoIBQAIoIB\nQAIoIBQAIoIBSQAAQikJJAgAgIBSAvKqqrVVVVVVVJVVVVfGVVdZQkkhAQUQQEgACUQAAIkg\nKiAEhQQUgAoAkgigFAKACQoEiAhIBKiAhIBKiAhIBKiAhIBKiAhIAElJCAAggSFKCgkAIllV\nVUqqqSqqpVSqqqnuqqpYCAAIJFAEFAJJAAEiRAAEgAqQICEAJICkAKAEgSglIECQAkICUAAk\nICUAAkICUAAkICUAAkICSAIAASQIIAgAQEAkiPKqqqlVVqqqqqqVVVfKVVZaIJKggACQgSgA\nUkgIEJKQBEAAiIhSgCQAkgEQJAAACQQAkAgoBJEAgoBJEAgoBJEAgoBJEAgoASgkpAEhBSJJ\nCRKAArVVVVaqqVVVVVVqVVXWe76ohAQKJIgEIAKkAAJCAgAFIREkAgIAKgEkAEhEAUqSQFEk\nBIICQARIICQARIICQARIICQARIICUgEAAUgISAAAQAAqQPKqqqlX9VVVWqqVqqvm7vpYEFBA\nACJQmnABJSgQSL7wBAceSCgPB5QAlQEBSIAACQAAkCiQBJACiQBJACiQBJACiQBJACiQACRK\nlAEhASSSEkkACrKqqqqrOVVVOVVVKqvOkopZB//pKYACCJiQAAIEgYjCQSdIAgKDhgEoAFBI\nAqJUgCSpBIAEkAUgAEkAUgAEkAUgAEkAUgAFJIAAAJAEQAAggBBEgPVVVVVXWqqrWqqqqVbW\nqrVYFQAgAaVIGhIElJBQJQxIJAKJKJAqmkgCUgUCKEgAJIAAEAJQAlASJQAlASJQAlASJQAl\nASJQABJIkgJQCkqCCUEQJTKqqqqrX3dnuVVVVqvKqqpaRFy0kwACizZNuHXjgUhDh5LYc7uC\nih0444euHMJEgCpJBKQFSAJAgFSAJAgFSAJAgFSAJAgCUkACAKQEkBAQgAgEgPVVVVVXOzO3\n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\nCQECIXVVVSqqqqqlVVWpVKvNSqpalqJzfAAkgaGOOZYyWIrMzuMKjtYlj+GzN2djNcgFKiSE\nkgRSAIAAkgQSlAAlQSlAAQkCEpKUoCAACAAAKQABICQoCnKqqtVVVVVaqqUqqqvWqqpYBBCx\nBJUAJ8T4fwPoGen3f+dHH+8H/8XnO8pHeYKgAAAQAKAASCkkAJCAASSACAASSCBIgAAACQpJ\nAkiUgESkCQEBQbVVVSqqqqqlVVVVVVXLVVVYTIo7fgAUgBCAQCSBKQABIAEkIABIgAAIQCEo\nBQgEpEpBKhJJAIABKgIKSAASIKSAIIEAFJJSQEAgKAIACRABICREBHlVVVVVVVKqqqqqqqvu\nqqpZB//wgSJAJQIqEoAgDEqQCSIBCVUCJVJCEggCQ0EQAQAQAAACKhKQAKCgAkoAigAkihRJ\nACAAEhIJAkClIASQCgAQkXKqqqqqqqqqlVVVVVbCqqpYSf/yFAgEgEgAQCSKTQAFIAkkIAAo\nAAAIQEBICiRAiElCkSUogEAEpAICSABKACSAAEAAJIJJQABAEAoAAlABIJSCBLKqqqqqqqqq\nqqqqqqvuqqpYAgAAgUKQJAJEEgAAgFJACkABCREBJEkiFBICQgAUIgAIBAAAERSgAShIAqSA\nkQEUkBKUgBAAFKQUhSBJIAUoBAAggXVVVVVVVVVVVVVVVVXHVVSqSCRKJBAAgSgRQEpSCQAI\noBKUIEQIgQQAgUBIESSAgEkhISSiRAAJJAEBKAAkBCRAAUAACUSUgAFAIAEABSACUJKCEnKq\nqqqqqqqqqqqqqqvsqqpYAgEAAASUIAJACQAAQCSCBIAAhAFCJCFIIBSCQAgiKAAECAAIAJIA\nASBEASQBIIASSAklIAEAJSQJCUhSkAkgAgAoQdlVVVVVVVVVVVVVVVbHVVVZKKQSSVAAhJAC\nICSSJIAoEBJSESQQAIAAhIAICSCIApKQISkgkgCkpAIQJAEkAgSAISAABJQSgAAgIAIAASAC\nSEkBBHKqqqpKlKqqqqqqqSvtUqpYAAEgAASkIASQiQAAgCkCRIAAQAAEkCkqECSCQAQCQCAF\nBAAIAKQAASiFASQBSKAkiApSQACAJJIKCSCSSAlIAQBAUrVSVVWqqqqqqVVVVqbHVUpZJJQE\nlSABD/Hr+B9KDoBQICdJBfqmAoABYIA4B90oEuuQEJZBKgEVJAAgJACUABKAASAAEpIJAECg\nIBIAIKABJCUFAHlVqqpVVUqqqqVVKqvqqqpYB//gIAkgTWMwjnMAVBIZKQEAIZgKoBJBaiSM\nkRgCQGNCQAQSAEhAASQIgUgAkgAqSAkkgACgSRIEiQCUiApQQABQJdKqVVVVVVVVVVVVUqvH\nVVVaVACp8SAKKSqSlClJGEAkUCWSiUoiCkAVIAAIAYiQCVEIEpNAkQAAlAFCJAJSAEkAASCA\nClICIAAQABIAAkABCVIAgHqqqSqqqqqqqqqlVVXsqqpQBlgx+ApABQQow0KF/fVhdLkwAYMy\nw5/fLT17SQpy4FlO93IQBEpUAUgQAJAAqQBEkAQqQABICSSFSoCkkBJIAACUJXKqqqqqqqpV\nVVVaqqvGqqpcliV1mSAEkZSKikiTUZBIiEkkkumXdJk1NmTpIfjJJWsRIiUEkAAASACAkgSS\nAAkQAlAAEkkBQAAgAAoAAUACVIoBALKqqqqqqqqqlVVSqqvuqqpYB0zwOgSQAwYYgsCGVSRC\nmmngADEyppQhavyKCyo7wE1fKqGQBJKKAkgkAJAASkAFSAUiQAIkFJSIkSBJJBKQACCAUvVV\nVVVVVVVVaqqqqqvLVVVYl4n08JABSRSKqlLSEQFQ+DNL/KsSIxCzIkKYQYhoyVUSUmUCUEAh\nKAKBKgJJABKQASAIAkiAgEACBAEAgAABIoAVATKqqqqqqqqqlVVVVVXWqqpYBzLwaAVIAUIw\nhSEDM0hFBVkiQQlWadQhZkiKESyKYEcwHcFAAhIAAkgkAJAASQACUAkCkAAkJBJAkUhSKUko\nCCpAJPKqqqqpVVVVVVVVVVflVVUqVoh5YJAAlQsyrDuaEYlRTEm4BZ2yZpilJ2LZgQnZKVOZ\nqpMJSAAkkAAAJAJVAEpIBKAoBKkAAIAKAAIAAAAAoAAIgLVVVVVWqqqqqqpVVVXOqqi4BBEw\nSgJSA6Hj+l4XfPBjjneZIfDbxy/zvD11J7x1wOEPCIKQAqSABVKSgSAASQACIAkBIABSkiUg\nkkiSSlSSCokiKvKqqqqpVVVVVVWqqqvrVSspJkQyYEgASIKEAAAQARIpEJAgEgJEiIIEICQl\nAABElIQUEkoCSAAKUAAIBAkiAEkoiSAkAokAAAAAAAAAAAAAACAAAFlVVVVKpVVSqpUqqqvO\nqqpYD//w5AJJAhAhSSVFKECQRAIKQFAQICBRCoECkooQACEhQAUgASpAAiSCUSAIlAAAAAoB\nSCAkqUlKVJJJJIlKogpJJXKqqqq1WqqqqWqqqqrlSqpZIf/yESgACEEEBAAAAhIRAkhACQJA\ngQkAICQSCCCCUoQABKwJJAAJSIAQAASgAJKSSUCkAQSAAAAAAEAAgCAACEAAAnVVVVVKpVVV\nVUqqqqvOIIFYAAAgAAJSQBBAkUkpIIBISAISQEgUKEBJBAFAgQQgACEkkAJAQSKAACpEkkAJ\nSAAAABAAkEAqJJSSiRUoJIpRARKUkNKlKqqqqqqqqqqqVVfUlSpYpJKEpJAAEoUKAAAAAgkB\nAShACQBAgQUEESQEJBECSQQABJAFBAgSSQAAABJAASkpUkESAhKAgAAAIAABAAAEJAAAAXVV\nVVSqqpUqqqqqqqnKqqq0CAAgAASVACBAklJJSEBQSAESgEoIEEAhQACRAQBIAEFKQASgIQJA\nAESSSkASSAAABBRAoIAQJSSoCSJIUkkBAUklSvKqqqtVVVLVVVVVVVfVVVVYQlSCkqIAJIIE\nAAAAAQUFASQAJQAiRRSAAlIAJEkAkiQABJAIhCgFJRAIIAVAAKSlIIASChJEgAACoAgBCABU\nFAAAAFqqqpSqqq0qqqqqqlXKqqq0EAAoAAiRCCCRSSUkkFAASAEoAEkAAAApKACkgABSBACS\noAUCIIEgAAUiCSAVKgAACCSAAEAAKVJACQKkApIAgJSkUvKqqVVVVVKqVVVVVVfVVVVZQIkA\nSkAEIQoABACCCQBSASQCkgBJSSSAAEoABJUAUJIACVBIAgQCVJAAQAiAAApJIIAEqQSSgAAE\nQCgAkABCIgABAFlVVqqqqq1VqqqqqqnqqqqoKlJVISqiiKFVUVRRRFUJVJFQSVUkIkkqqpCq\nqSCqCklVRASSqVKpAkVVKqUqqqESSlVSBFJIVVVSlUKqSqoolKqoqvKqqVVVVVKqVVVVVVfF\nVVVVRIEglEEUJQoiBSKKEoJSIkpFJIiJSRCQhEUJIkURUSIkKVJEREREqSiIkRAgQEpJJIJJ\nUokiggkkIhQBJBFFIkRFBLqqqqqqqqqqqqqlVVXVVVVVVX1eq11Vqura9Vqq6rqqqqq1VWq1\nVVautVrqrVqtVVqrVVVbW1taqqqqrVeuvrVVVXqqqrVauuqrWtX6q9a1WVVa6vKqqqqpVVVV\nVVVVSqvP/v7//+v1/fv//99v2+3/3+/////f/7/v//v73/ff++/3/+/9///2/e33////+/17\n6+/+/9f//+/v99/97/+v/X3v7//3v9N93//fu7/7/vd+/f/6q6uqqr6/V16qqrf1fr9VdXqq\nqqr1Vet6qt6u9b11Xvq9VXqvVVV9r369VVVqrrfevrqvqv1VVXr6vXVfeqr6r696+1W91XfX\ndVV27uquq73Xt1X/////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////AiBAiJAAAIABESIAE\nAEAiAgEkkQgEiAABJABAAAACAAEAiAJAIkgBAACAREQJEIAAgIIgCACIiAAAAAIAAREAgCAA\nAEgAEggABEIAAAiAQAAAABDVJUqUkqqqlVUpIlUpVSVJVFSSJKVSUVVUkqqVVVVUqqoqUqkV\nSSVUqqoqkpKkolVVFRSSpVUlJVVVVVSqqkoqVUVVVSVVSKSqqJSqqqUqlVVVVUvKqqqqqqqq\nqqqqrVVVVVVVVaqq1VVVVqqqqqqqqqqqqqrVVVVqqqqqqqqqqqqqrVVVatVVVVVVVVVVVVVV\nVVWqqrVVVVVVVqtVVqqqqqqqqqqqqqvVVVVf///3////+///7////v//v////f///f//////\n/99/v//f/////9///f//9///33///+////+///////9//9//v///+/7/+/////3///////3K\nqqqqqqq9VVVVXqqq+qqqr6qraqqqr1VVV1VVVVVVVXfV6qr1VVVVVXVVX1VVfVVV9dVVVXqq\nqqvqqqqqqqvVVXVV6qqqvquqvqqqqq9VVVVVVVPpEBBYAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAvIiqW5SUpCVVKVQklJBKlUkEpJKlJSQSqUqSkpVUqqpRAkJVQJKSSSSSVJIJVSAkpI\nCSVKUgSkqUgSpVUkkpAlJRJIEpJJAVJVAUqqqqEqqpVVVUbqtVWoBAAIAAAACAAAEAACAQAg\nAAAAFAAAAAAAAAAAAESAgACgBBBBBAAEAgAASAAhIAAAAFAQAAJAAAAQCAKAAEABQAgAJAAA\nJAAAAAQAAAAAABPJSqtaQJJChEkiIqpUhRIApFIJRJUlASJJEkqSIkhCKAApEhIKgQQQQUiR\n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\nrJmVBcM2cjhVgwRbJgAk/DjwTMD37nuoSDzie+PCM7q+dNijw4heEkAEAAhIABABQlQEAEoA\nSgFAlAXOqqq4AEMABKBJABEkkJIgAAGIqIAEEIEAAUQgIhABEEIAUFkSAEkBAiQIAhAEkRIG\nGSEkgAAUABAAiSIgCEQRWBJAkkECkoVICACRUACSAEgIAVfrVVUqkhBKkAkAEkQAAgCAlC0q\nAiShQCQqSBEEikSkQWhJBQQAKQAkCIEhSEKQAECT5AQACSSApUJUBAhVIRFEIkASAQRIACAB\nISIAApIACQIiSAXMqqpYAIQABQIlAAEqUJIUIQYcgAAICgiAAgBABwAAEOIAAACVAEkAgCQI\nAQgEpBAAkSEpIAAiABABIQEQCAABIBSApEACSAiQBAiSIACUoECAAifmqqpYSgEokCgQVKQA\nBEBAgJBAEkpCIEIEqCUUkSpJRQCSVFIASQBKEoAhJCBQAIUqAAgAgkkIEkFEACQkolJIEkAK\nAApIAqICkCAAilIAAQoEqInOqqq0AKACAgECAAEigBIIEgQUgAAQhBCgAoAABAAAAFAEAQCg\nAFIAhCUEAAoFKQAAkkJIJBBCQBQRVICAAAACQAlASSACSACkBQkkAACklCBQACfrUqpYpASQ\nSCRICSQIEoAhQBFAJSlAEUAEkCRJUSSVEgJQSBIFSQASEACQUqAgACkkABABAEEQBICAABIS\niSUoBKAJAAEoABIAkCABEkoAAIECRIXOrVSpASEEAoACgAEhACkIEkASAAAUgBIgBAEAAAAg\nQJACAkCQACVAgpAEAASJJAABKQUkSQgEkCIkRQBAIAACkApAVJQCpQBIAgqQQABKSCQgECvl\nUqpYJAQRKAkoEpQEVIAhCAJAlKSABICJISQSRJKCEgFISBIAKoAECASRSRAAAKSkACCAACEi\nBIgBECUJBKSQAkAJAACQACkCSEBBAkkAAICCRIPOqqpZASCAAScBJwEgAHzkQvASAAglIyQA\naAiAEAAOAJQCAgCVAC9hISAB+EXJTsHxdc8pq348gPGQBIAAQAAEoBJAJUQESQBAAhAUKABJ\nSiQoAC3LVVVYJAITJA2kAkgBIs2wACJEEkSAJQEloEhKQSkiUgBISKoAIgzMBAkkTQCAAk4M\nqyiAh0K4E50JICSlCkpQBUAEgBCRACUJKESAgKkAAAEBJIPsqqpZAUiDQSmBJgJICKWVKEgV\nQBAkoZAApRoAEgAEgKICAAiRCIlJQQBBREmkk00kimilSExEgSjASQAAQAAEkBKQJAQAUgBA\nAQAgJABSUSBEACvHVUpYJAAOBAyEAjzZIYYQA2PeNLNg9sdL2T2zxiXNDhi8174EQCwee/vE\nVjiw4mjWTCGBEgVwJYqJACSSCSkgAIAEgFBSAJISpBKKgIkABAoQlRPWqrS5AJStISdRSrLs\nBNx0ls2IyBWpQ1yRCVCVOYbOtm1lWzBAEg+oiRIwzOzdmlUjEVUmnph6sQhAJAAAgAAJJCSA\nJQIAkgCAAQAAJCAlASCCAEbmqqUoEgAYCA2AAg5UkHgwCIyS2rNgjkmDNiGiExRpkMyE0SEJ\nQCGK+RvgeEaoM1KqKIKCMwiMISlkgJUqCUlEAIASgAiKAEokiFSRAQSAVAQIEgvNVVS5QKYy\nQki/5lpG/opEmbFZ4CJJpZ6SkqkyvEpIqPGUqqhA/wRYkuJKTFSK8lYioqImaVQV/wxAJAAA\noAARSCkgKSAgkgAAIgAESEAoASEhQJPWqqpYEg7oEAmBAyNkAhDACRMhCUthBNICJEJGKQiT\nBolHJkISBClIwKMAZMSpGnJ2EIIDIRBFMShKgUikBJJABIAJAAKEACiSgEJQAhKAiAgEAgvO\nqqqqAEfCBV2QSjJMkOmam13rsFSlWVlKb1vUci+7bOkWa9LAkIzMzFMyRm6Nk1m4YJKSO6pI\nYZrAJAIBEAQJIBKASUgBSQIAKBAEkIASIkJBKEbTVKpYJQuQUAdFHF3uAMX4Bcm44mRRyo4F\nNmN1HIYMOHUEG2pSAguneMXp6znc7+pBIooBXiByIvCJACgIQlEgAkAJAACUIEgpAokgABJA\nAAAEARPuq1S5AEEEAgAAAhICVCAEkgQACBICAKSkEUgABCFEggFCQCAAkKQABCAAgpEiQBYY\nEIJJAkkoiJKgSQKiCAAJIBSASSQACgIAQCAKVIAVSSlQiAvGVKpIkhIhSCqUSEAoAIFQABCS\noIhIEgAWRAJSUIQQCEgIBIVKBACUUIEiCAQICkHyQhAEyAAAIAECIBAAIEkgBUAVAACRQBCl\nCQSgAApAAIACIFPWqqq4AICIAoABAhKCiCgEpIQABCECQEpYAJAABCAFIgIiQBAAgSQBBCgI\noSECgBIAEIShglKJCklICkRJCgAKkAkgVJIEEoQAIEAEiSAIkhSACgvmqqpaShICEARIEIAA\nIoEgAhBJEIRICQAIkgElIQlQAEiACUAkFAEkIQCgBAgoEkAlQhAACAAgACECQAEAQCSgACAA\nAECQABAkiQSQIAEiAEAUoCXOqqpQAECghKECRCSoABAJIIUARAACQFJCAKQACEACSQApIBUB\nIJBAiEoKEQIBABUAEIUogpIKSQhAEpBSEoAEpQpKRBAFSIUAAEgEipAAqAkABIvrVVVZKQIC\nEAhIAQAApEUgBCAlAJJIBQAQKgEkoASIABKAhIAkAEISAgBAQCikKUCUhBACKAAgIAEJQAIA\ngBKQACAAEIKQAiASSQCQAAKkASAkkBPNVVRYAChIhAICkFIkAQAKQQiASCACkCSEgEgACkAi\nqkASECIBJBCAQJARCQABAAAAIQJAASkEhKQgEkiQJEAEkgSkhCACSAkgAEkFIlABEApABQ3n\nVVVcpIEAEKhIAgCAlAkgFEISAoSoAIAAAQBKQAqAABJABIhUAIIJEgKEIESIJJSRCEgJRACQ\nAgCEgAACgQSQAJAAIIkoASAElQAQCAEUQqASkBPMqqpQACq7hAABIJIkAUAEgBBAkAABJCpS\nVEoQEoAkIgASgAIBSiBAAJAgiRAiAAAEQgJAESQEkJAgJKSQICAEqAUkCAACSAkhAFJCQkhA\nEASAAkbmqqpckoREISKUCgAASBJQBIECBCpEAQABAABCQCkAiFJAFJCIAAkSSgSCAASASpJQ\nAEgSQACQBAUJEAIBBISQAlABQlKQASAIIgAICAECQRACSAvOqVVYABgEiAgBIJSVAgAFICQo\ngQARUESQRJIAEgBIAgASQCAiUoAAgJAglIApAAAFKAJAEkgFISBARSCoSCAEgAJQEAAFJApC\nCJSCQpBIEESoEVPrVqoqSkCTYSNIPAADOJ0gBIp8KZFBxxOCEEBLj13dMV3oBIKAABJKJAEK\nACSASSUgASgCQCCQCAIJAAQBAIlQCUgCQSSQgCAQIAAIEAUAhQAARAvNSVTYAAwAhASCUSVE\npAQJQRrFAoQIzoFIhBICsJdUZySNIBASSIQAASRApIASAAgJJAKQFIoCQkiAJJEQSQAFIAJI\nEAgAJQSEhJKhBJBSIEkSAIbmqqpZKJG6UJbIFnAWjS3TlAGJlPfi5hMGbbX8J1RVITXkCUSI\nAiEpJAAIAAlAJKEgAJAJQABIEAASgABBAAkgAkgAgqElABAAIgAEEAAAAgBAkhPOqqpYAghA\ngAMCEUkEyEp1AJDAbJKwqoFJWdNNK0mISWQjAAAhIAgAAUkCJJASAAAJSARACSICBSSAJKQU\nUkAJUAKSIABAUkSpCEiBQkpJSJQSAIvlVVVYSCKkyky+t23ziRalL0KFypaUqiUNqmZQOUyq\nYSaqKRSEBKEklAAogAJAVSSgAlEJIAgoUBAkgACAACUgAkgACiUSAAAAQQIUAQAEAABAEhPO\nqqpZAkgQoAWAVUgFNDWqgBDVWMyRmgG5NlK0q2AAyyUigEABQAAAAKoAKkAUAAgKSABACkIC\nAkSAKkgiSQAJEIEpIIAAkqUSEFBAkFKBJKUUgErWqqpYEBJBQVMSZ20nPBjWCoF53dj516vm\nFLcwJYmaI9nWBQSUCopJUgCSgBSBREJAAkkFIBCQiAAEgAKIBAkgRCQAAASSAABAAgECAgAo\nAAAASRPLVVS0hIqukARAkSAAAoQrQCQCAhUEICACpADCVEhAIBIEQEAAgCAQAEAAEkAgERAS\nQABABIQEIkkgEkgCgUAIAQFKlSAAlEgUkJBIpJICUkkiAA/WqqpYEAlVRRACBASUSBCJCQEo\nKFAQgoUoASpID4ECVIApEglSKQFEiQVSQAKEgABACSUUkABRAAAJQABIKCSilCQAABJKAQJA\nQgUAAABIAQAISqHNVVUqRIJAgEKQgUEBAQIWQEgCgQiEKBABJAACkCQoECSIAJAAAEgAIFAA\nEkggJKUJIEAABSkASSqAEqQBAgAAAACRIkAAkEgJCEBSSSQCkFJCABfWqqpYABEKKQgCFBRI\nJEhBCQCQBCIhAEEkAJEoAICCRIABKgESSQJJCQEKQQECgABECQiSUAAJAIAUgACUEBKJJJIE\nCASkAQEgARIAAACQAgAQSQXmAAFZKQQgACEkQAACAAEIIFIEQIAIRAgBKAQBJCQQACpIAJBA\nAEgAQCRAEEhIKkgRIAIAAkkgUhEAJEkAhIAgAQCRIkEBSEgJSACUpKgEkJSEAFfXVVZYgFCB\nJIQABKJIUpQggQCREhJCESCkAJEkEIBBJIAgpAUJSQElBIASQgIAAASABKhJSAABAARSgQAS\nECSCSEoAABQkAQCgAFIAAAFQAgABKQHMVVa4EgAoAAFSQAgCAAAKKCQABACAgAgBSgABBCkI\nABIIASAgAEgAQCSAEJClIkAkgAEAAqVIJKAAJFSAhQAkEACSSQABJCQJJQCSSkQEoJKgAFfn\nVVZKQEUCSlQACSBISSSgAICSUFIUEqKUAEkkIIAgqUBBJAiElQBSEoAJQgAAgQSAEkQKSAAE\ngAiJAAAkIEqAQpIAACSUEBBAEBIAABAgCgAKSQvMVVZYFBBAgA8lJwoBAHjiSyQEAgGBBgAA\nkQwBCCbKAB0SAUIMAFIODlJwCKWnkFcmhBCgAS/TKQIgUkozz8gkgAClKgAAhQUUgkCVJISJ\nAJIAgBPnVVa4QEEFElmAAkCUJc24AQCQSCTISiSSBCZUIQhABIQAJJAUkgEmrEgRIAKBAgIC\nVEIBJBgxAEgJAAjmaEgAClIAAElSACAACAIAECAAJABSEkXMVVZZCQhTABKpShAAgKcSlZIC\nAgECBQAAgIgAiEGioCpJAMSKAIgNFQKYCSDJUIqRRQhIQTKVSQKAJTSVNKaSQABJRIAApIiS\nQlCRBAkkgUkABBfXVVZYICIGSViAAp76BIRQAtn2LXtJlDSdfmj2w1yIG4mR0wNoJCBFHNeW\nXDqBAiJG/9uHNiNpZe4e/BEEQYwIEkkAECUSAAIACAIEIKCCCCASUEXKVVaqCgCNABnJJjJs\nUdw0k0iZsiPmyug2NJwbXYkBHJS2QV2UgQoV9Uy7M0SlSAoSRG7tn2yLs1FiiSnhwUKCAAIp\nBABASSClISCQiAggkQpAghPWVVZYICQ4Sk8AAydFAHiwBlqVJkomaJli5TC7SrGkSrEilQiQ\nJEBGpGgVRn6RAEKDVWVB0UiJFh8+XGNyVQoQSSiAIJIJBBIABAoCAkEEBAACCEvOqq05BIU0\nABGf4hpU/gpCTYlResMozeRMSxQksRUfiJWhApW0AP4EpE0RHlCFkhImRExWk0rZUpSpMCoY\nIoMEgAAkiACAQQBJIQCQoBBJIKJQQhbqVVaokB5hJIYkiqpGCViBBM0myIxYkRBNWbC0k7Ig\nGaJUyhMhSQSUVshZssKhAEKCTURMmWmTGjAgYKNQqgpQEpEAASolCEkACCQACUUAAggJEIPO\nVVZYBQfIACwACjNUoGHYSUqmZKbPndJ1lWpLVWqJMzrUgzVqQEAmxFxTMmKJWxYyxFVMsWbh\nchq11jM2ZSIEgARKUgAAQgBUgkEkgABJIEJABCvlVVZckBOgUpiVLF3uAsX6GpQ5OYMmSuCm\nqLBIrZMgHhNnig2aZRKOTue7nT3j+Yf/M+73e6kF509e/JHn5ASQClAAAEiSCCUACAQQJRIA\nCRABIQXOVVZQAkUKAAQACQABEEAAgEZkSEkIABIICgkkAECKYIkQIoEiAAAAIgSAIkkIACAB\nKICBBJhwCRABADQQCUwFIAUkkgIAggAlQkEEAECkgAUoCFfWVVVZKABAJJFIoBVUQRKSCShA\nAgAglEAgoCABSQoAICBBCigASSSUiFAkgQABJQJEAgoEECfBIASUJQhBQAkgASAQAEhKCFSA\nCBQQkhIAJSAEoAHNKq5YAqQSgAACCQAAFAAAgDXpIKoEARIKBIpIAiBJegkUQwJJAEAgAgQI\nKFSkAEgQkKCRBAgSCUAggEoQEkhJSAkFJAEAoQAkQkFEAIBKAAkgClfmVVZckAFACSkoQFIi\nQJSSFJAgAgCQSAAgEAACKIEAACAAAEgASQSBKCCggAAAkgJCBAQAIUJAIBKCEghCQCUAASAg\nASQkBASBEAABKgkAlKACQAvWqqawBEgSQgAAEgCICAAAgAAKUEAFAkqEhUlAgBBSSQpFKAKS\nAiAUAggEEokkAJAAgQFKRBASCQAQQIIQFIAkUAkJUACBEUAgBJRIAEBQAAkgEkXGVVZZUQCA\nCJJJQBIBIlJUIqVAAQpQSCAQIAAKAkUBACAQAUgASAlAkKKQQCABKgJKFBQAEIJAoBJBAhCC\nQASBAqAgBKoEQBSEkAEAkQUCUkCCQAvuUq04AFIkgACAFQCQAAABCAASlCAAAgRCCJJAUAAk\nUkSCSAEoASAIBAAFEgqQAJAQgUCSACAQCkAQUIQgCSAgSAkJAACgCIAgBUhSBFAgABIoEpbK\nrVZIiQAAEkoEgFICSklIQBJAAIFKSJEBIggRBJSAAAAIASQClAEiUCSQAEAJJAJACAIApQlC\nQASFAhEEoASFAEBAEkQJIgSJUAIAkACKkkACQAPWUq64IC7uwABQIACQgAACEoASRCgAAAAo\nAIIEIAAklSSCkAFAAUgABQACSREgAUgKQiCkAEAQEpAgIEBICkAgJBIShBEAAKAAAiCQBIgA\nAIkAElbmVVJahIARCSkEhUoCEUpIAEpAEQIkpSSAkhBQgSSAABAoBJQKSAJJIEpIIAQEpAEg\nEIoAiQSBQASIiQkCQAqEgUBAEEApSgkkiIQCkCEkSiApQAPOqq5YECoEggAgIACgBAACpAAS\nAECAAAgkAISCFAApIgSBICCAAkgCCAACCkEAAJAJBABIIEAoEkACACBAEpAQJBQUggkAAABA\n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\nEBIKgkhQAkkJQRFKJAQACBCACAQBKgBJKkkggkHOVVZZIgAFABJIIKVIAUAAASiSSJJKKQAq\nQJJAACoAEAQkCgAASARAECBQAAQEkpQJUElJKkAEhECAAAIEkAAAAAAAASCUggISgoFIAJQA\nQAAIKBfWVVVYAJFQJUACigACSASSRAIIAAAggEkAJAARKQBJQJABIBSJACESRIUCklBQAACg\nBQAAABJQERIolKggBKUklSSSSAIAKEhAKBQBJACVAJShAkvNVVZZJAQCQBSgAEiQAlAAEUCC\nklSEEgBEgVSEAEQAFAVIBIAgUogAACAgBAQFVJIJAFJKRIAEgAACAAKJIAAAAAggApCkAQAU\nAQCQASQAKgAEQBPmL9ZYAJAIBIAEkQIEqAEpQAoQAAAQQBUQBAAgJRCUgFAAkCKBAABKkoiF\nISEgAAAAUgAAEAUgCSSQJJAABJJSkSEJSAIApCVApBIEpABIgCSQEkXWra6qSAVCQCUQBEiA\nAkgAEiBEpSIEEoAEkEQJAAIAJAJIBIgoJJIAIAIQCAgIiSSkAJJSRSAJQAEEgARKkAAABARA\nASCSAQAIAUCQAUoCEkAEgBfLLCpYIJAQFIBCUAAUkAJSQIEAAAihQAiQARCgJEiSgUgCUAAA\ngABIgkhBICCiIIAAigAAAAkgEpQQJSEAASlKUJAElAoAJBIhJAIElAEoQBKQCUXuWpZZCgIE\ngCQIBJJABJAAEhBSSQAIEkIFSAQKQQAAIAJIBJKSKUoCEAEICoQACCpSIJUkkSAKAACEAAhR\nJAAAAgSQASBJASCEAJCAAJAAEgAEgBPCpVdYAEiQBIEhIEAEkAFKQEUAAFJAgAgQAJBABEkp\nCkgBIAAAAAAoQSQgoBESQQAAAAAABASgSlIgpKIEASSSSBACSAIgJAIQkgIUkgRJQJJQFIvu\nVVRaUQAFICAACRUgBUgAEgAlKAASKSFBKgUSQAIAQAKQClSUklKBFAAIBABAEESUlSJSkSAE\nAAAIAACBSAAAAoUgApCKASBCAKCAAJEAEgAFACbWVVdYBBJQEoSVIAAJUAJJQBSAASVAAAQE\nAJAACkhJAkgBIAACAAAEASlCkKUJRRAAQAgAAASQUkSiSSQkAJUpSCAJKAQAlAkISgoRUgAk\ngCUgKRPNVVZZIIACQBAACSJAAkgAEoAkkgASSoEhIAJJIBAAUAEoCSUgpSRAgAAQAgAgAAUk\nCSKUkpAFABAAAgEAkgAAAAkAASEgASAAAABEAJIAJIAIgEbmVVZYAiVIBEFIoAgEiAEkgCSA\nACSAABQEAkgAAUElBJQEoAAEAAEKFJJESCSCSJABIAAAAACQCUEkqBQSAJEkkqBSpAAKSAJS\npKkAEgBKgAkiBQvOVVZZSAACQRACCkJAISAAJAApSQApIkCRSAJVSAgAACEgCpFBKSRAgAQB\nAgAgAgJICSRJSSQCQBIIAUEApAQAAAgAASkAgkgAAABSgKQAKkAAkCbVfv1YAJRIFAUoABAK\nhApKgSSAABSAiAIAASgAAiJUUoACQAQEAAAECVBICJSFKEgBIIEABAEoJIBCRAAqAJElKkFK\nJABSCAJJEokACgCpABJSARPO165ZJAECASACogUgESAQJAASVIASAkikUAKIkIABABSQESEh\nJKShQAICQAAQAQKkCCRSQUgCACQQEJSASAAAABAAgUkAQpAAQCAkoEkARIAApAvlVFJYAEgI\nSAiQCKAAQAFAAElAAhJASAABApAiBAlEEkACRAgEAAAEBIgoElJBJEgAIQAACACQkoBAQgAB\nAJJUokSSBAAJEACVCQSAAQACECVKAFPWq1VZSgJCAkIEAAlKCSQKkhAVAIASAqSQSAQAgSAQ\ngAlIAQJBJSkQkCKCgAAQAAElCEklIlQEACkKCJJUVCAACAAAoJSABKQAIEApEFSohAAASQbH\nVKpYASgIKAAQpSAAIIAgQESAVAlASAAJAFEkFASCJSAASCgUAABCBIAAJUlCSSQAQQAAAABQ\nKQAhIAEAAQkiQJUkAgASUAJIiQSARQAAAUkRAAvsCRE5IAKCgpSCAAkkiCSAFAAgAUASASpA\nSgABISAgAApKAkJBUkkIkCRSAAAQgAiQEFSSSRIFAEoACUgiQEAIEgAIkJJEBJACAFASACSK\nUABESVPGpKSoBJAoAABISSAQARAKgSSKiBJAJAABAESUAAKEpKABKAAAAAAgAIEASRKCEqIC\niQBAIEEgJQBJIACIBQSiQEiiAgEBIACoSQJAFIAgASkAAAvpVVVaSAQBKSQBAAkFJAUgIAAA\nIgQUgSKUIhABJJAQAASgAkkpFKQElCRJAEAgQACkACQUiQgIgEkACSQCkCAAEgIAkKRQCSoB\nACAVQCQElABSVBXVVVVYAlBEAAEkFKAgACABCUpIgJCAJAgAiISkAgRAlJACSAQAQACQAIAA\nCQkJEkQAJICAACBCEgBKoBBIAIKSQEgEAgACRAAEJIlAAICQACUAAUPKqqqykAURSlABAAoJ\nUokoQAACEAAkAQEkACABSJEUAASQApFIEkkFRCSUoEBAABEkgCQkkgoQQJIACkUBKCgAFAKh\nSEkQEUSgAQAIlCkFJQAlIBbVVVVYASAAAAJUUkCgAAACCSSoQlKAlCQAkoEkAAAAkpAJSAAB\nQAAQEQAACQkEkkAAEoCAAEBBAgBIgAAkAoBJQSgEAQBCQBAClCUiAQAQACSABJPIiCJZJAlJ\nJJAAABAJFKSAgAABEAAkAIFQIBQAkkkkAAUgASRICqpCAFKkgCBIABSVACQlKRIQUKQCIkiB\nQBIAAAEgkEgICAUgAAAAkEkCUQApIAvVJUjYACAAAAFEiUJAQAAqEqpECSUAUiQChECSAAQB\nJJABJAECIAAIJQAAJIkBJUAAJQCAAACFAgBICAIkEkCUlKQCAQEhIVAJJKSSAQAoBBSAApPJ\nVVe5SQkpKUgQIAgSCSkAQAAQgABKAACIAQggpSFIAAJIASBIhCJCgCRJAABIQAlIgFISSkgg\nEFIRApAAABAAAAEoqFIECAJAQAAAqEpCgUASkAvUqqlIICAAAACAiSJAIAAREkJCCUkAkkog\nlCCCAIABKSgElAUAEIgQJIEACUkCEiACEgAIAAEIQQhAKABJSkJJSSQAAgCQIIgFEkpKAQAA\nJAJAASXiqqu5CgklSlQkAAAUikpEABAIgBBQAIAIAIoQSCkgAgKQAUhSAgIEACRUoABAgIkg\ngJKCkqRCFAIKQSUCABCAAgEkgJAFCiEgAAAAJEkoAJASVBfMqqrYAKAAAACBJJJAAAAAkkSg\nKkICkhJCUgBBAQAKkJABKAAASBChJIAACSUKAgAECgAQAAAAQJAgBBAIEkIlKCQACgSQIACC\nJKSkgAACkgFAAEXSr9WqSAqSJIgkAQAJIpJIAAAEAACIAAAQAJAUSEpABASQAkkUgoQIACkS\nAABAUJSRIJSEpEkpBAUJEIShQBAAAQFKQIACBJQogQAAJKSAIKgUiRPIqqrYAkAAgCCAlCSg\nCAACSpSQokogJUlEkgFAAgAEUBACkABACBAgSoBAUlIRAgIAAAAQAQQAEJAgQgAECUJJJBQA\nJBUokAEABBKUgAIUggCAIAvrXCu5QBEoJAokAAgKgklAAAAECAAKgAAAAKQJIJJBBUJIBKQS\nQQUFABISAACEIJCkqkkEkEFKQgIIAKSAgAgAAUCSAQAABSBEoIAAKSCAEEokiSbIqqqoFIQB\nEKABJKJACAQUqJKQQSkgJJSSUgAgEgAUABEAUAJABFAQJECBJUogigACAQBQCQgACEghKhAS\nJSEpJAIAJEiSUBIQEiSSgAQSQQAAABPSqVW5ACFIBASQAAARISCAAgAFEAACAAAAAEoKQKSB\nUARSBSASoAJCAQgkAAAIAJJIQFIEgEJJIAKEAAUgAAQAQJClAAIAAkCFAAAAEpEAFCJKSkbJ\nVVWoIogAoJACUpJECIIEkJJQBJJIkkklJQCgAgAQAqAAIAJABIgIlCCASRJBJAABCgAgCQgA\nASgQSKAEpJAlEgQASSglSAIgEkpSQABJQIgAAAvqqqtaCAJKCAVIAAABICCgBAACQACABAII\nAFAEkEpESAkVCSgSICJAAIokAEAQASpAIJIKQCJSlAEFAgkgAAUAAIEkAgJAAkgIgAAAFJQA\nCAKkpJPJVVXYIJAAApACSSUkAQoCkCpICUokkSggkgKQCQABACBAIAJAgoACkgAAlQJCVAAU\ngACgJIAAAKQgCAAElJBIkhQBKEgESABCJKlKQACVISgAAAvS/+65CASRQAJAAAABKEBIBQAC\nQAAAAAEEAIgFIFJISoQIhIASKCUoAEkoIFAQAUSAKkgEgCSSSAEJQqSQAAACAIEgAAJBApUQ\nAQAACUgABAElJSbLqruoIlAECkgKSlJUAREAkBFIEpJJSSQRKiAQAQACABEiECpAAQAAKQAC\ngAlBSBAigCEQEoAAASQgEAAAkqUoSggKSUgUCAAAlAJJIAFIkCQAABPqqqq6iQqioSVRIQkC\nqkSqRUoiiEiSJIlEQIqlVFVRVSSIioEqpKqqhKqkKoQqEoqUKopKiFVVVElKiqqqRBCFIVKh\nJCKCoqqqQqkSSqolJUlVVUbFVVVRJFCUFJCElKRUQRIREhBJJSUkkiSSlSSIgoiKIEIlJFSE\nEkRCUkRIkSlIpFBBQBEkJSJIkSIkUAkRKKUoigkUkUpUShBElCRIkhCQkiSIiAvqqqqtVa6r\n1Va1VVWrXWrW1ddVVVVVVaqqqqqquqtqr1rVVVV11VW6qrWrVtVWq1ddX9VVqq1WrVqrV9Vt\nVqqqtdVVVqqrVddaq1WrVdatVaq2t+vN//d7/33+v/vf//9++9/7f33///v//v//////7/+/\n+v+////vv/7X/999+7/9/v77/X////v79/f+/X/3+///73///f/+/r73/f9+/7v3/t/t+r3f\nVV3eq9dX6r71VVfXrvVf1dtVar6qr6qqqqq1uqrq36vqqqq66rf9VfXfXuqvV6uuq9aqqr6+\nvV1Xr9VdXqqq+9VVX1VXq+u9X1fXqu69V/V7X9//////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n///////AIiAARABABAACIiAAAARACAIkCAAiIBJIRJIEASIEABACSRICBAAAiAIAQAQAABAg\nRAhESAAAAQEAAAiAgJJEAAkiACIgEAQAgCAAEACAgAECAADVSUVVKKqVUqqpSUVVVVKUpVRJ\nUqqUiUkikkSpVJRSqqKpJElUqVUqUVRVFVKqqqVKkVEpJVVVVKpVVVJVKkkpSqSJVUlFSqlV\nFUqqpVUVKqopVVXqqrVVVqqqqqqqqrVVVVVVVVWqqqqqtVVaqrVVVVWqqq1VVaqqqqqqrVWq\n1VVVVVVVVq1VVVVVVVVVVVVVVVVVVVVqqqq1VVVVaqqqqqrVVVWqqqvFVVVf+//9/////97/\n//7///9///f/7//v/9////7///d//3//////979/v////////ff//+/v///////////v//+/\n/f/f////3f3///9//77//3vVVVVVXqqvVVVVVXeqqq+qqqvVVX1Vuqq6qvVVVVeqqr3VV9VV\nVVVVXevV6qqqqqqqt11VVXr6qqqqqqqqqqq6qqvqr1V1VVVV91dVVVvVVeuqq9XKCAhYAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhUqW5ISlAkklKVSCVVJBKpKQqqgJJJUqJVAlSqkhJ\nJIRKSCSSlVVKkBAkEqqqqSkpJJKVSkQEqqqpSSpSkklEpJAUkJSKUpJICKSUqpBJUhRSSC7N\nVVWoBAAKAQAAAAoAAgEAAgCAAEggAAAgAKAAAQEEEBEAAIAIAAAABUKAQAAAAACAAAAAAACQ\nAAAABAAACCAQAEJAAgAgAAEBIgAAAAUAAEEBAIPhVVW6kUpApFSSRICQgKRIkEghCQIKSJAK\nIgokQFBBBQBSpCpBIhCRIBApFCEISpISkkkiUlIFCEIkkSKUggoFKQgSkKSElKRSAJJJCIBU\nkggkUivNVVWoAAASAAAAEBICFAACAQKEIEhAAgKgiECBEgUIICkAAIAECEIEAISAAIQhAABA\nACAIAACQIQiAAAgAEECQACJABAAQAAAAkgggIhIAACCAAAXRVVW4kkkASRJUhICggSSQkEgQ\niAISkKAAARAkAIBCCQAkSBKRIQiRSiASkhCESJAUqQpBEpACCCAlJIJEhBAEkgASQSSFSSSQ\nAEIKQICJKQgklVfkr+rKAABJAEAAICQKCAAEBQBCAShABAklJASAShIIoCSBAkAABCAAAAJA\nAEIQAgKAAEAEQAJIoISAAEgQEUJQAJJAJAAgAAAFJQBABEogAEKAAAHKqpW4qSQAUhKJCQEA\nQlKBIFIIkgESQQAAASAkAECACQAkSBJJIIpJJJAUpAhCQKQkiBKQFJAACQApSQEFABACSACJ\nASoIklJACFISQAAKkhApIS/orRXYAIElAIAgQCQRCAAUAgAgAEQABBKUlASBKRISQBKAAkAE\nAgAAAAJAASEBCgAAIUABQAlSQBSAACQQJIJJAkogJABCCAAJIAhACUkgAIIABAXLWKqpEiQ/\n0CQIEgFfIkkMkJKEpBEl0IU/AWA85wDAEoIkkBKRSElSUkgJIABQQElJCAikCSAAEkASUgFC\nCCAASAAKAUQQgpUgBIISkAAEkiCSkSfoq1XYQAC2woChQJRgwAAmBAAQAEAAghERyDKKQhKF\nQCYAAkAAAQAAAQEgCkoCEQAAQiIAIAElQAJAACQIoIKSASRAJBBEEAACUBBAASSQAAIAAAnK\npKs5CSQmUCgIEgDKUpSEkSQFKhSpiIKQgmAM1oBAFAGVIBSSSFIlJFAKQICQhFJSEICSCkgA\nFJAUlICABCgAoEESgAUBBJEgBQQSSAEEqSiUpJfIq1XYIACWTxFe7u+No8cVlznd9kOHsyYb\nriyURju3Hb0AAkAAAgCAAASgBBICIAAABAoAoAEkgAlAABIJEQBSBQQACVAIUAQFIBBAAJQQ\nAAAAAgXqqqqpClAGG5R1JNUyLlkGzW7ImwRMsQSfGzYlRNS7YmjJUAlJIJIpSQAEkQCQCSUl\nQSBIBKQAJSAJJQRAQEoAQCFIkAJCBIFACUUUpACEiklJIJPJ/v/YQAJXWdAhzEUipA5WaVSq\nkU/qlZRRmaqGvHyZPlGABKAEBAAAAFKQABIBIAAACAIhEACUgAEggBAlCQAlFIgCBIgIIBQU\noAAAAlIQIAAABAvTV6q4EkgGGYIow0tqLUYESERJVQUIkQYQ0SISqkKRIsSkAAkhQSSJJAAF\nSUCkClJSIkgIRSQAJJQIJIIAIEkAAAJIgCKCCSAACSSSSACEBKSSQUblVKqpQACWXYhia7km\nZAMkzVV3EZQq1RSalWaLWEjVqFCAqkAAFAAgASSQABIBIAAAgABBAAEkgAAhAEkkgQAkkSgA\nJIAoRAFSQAAAAJIgkAAIFAvKqqq4CUoGGbIhITWbhrks2GwqmSYtm4QxmyYjGuKRMUKoABSU\nAVIKUAACVABIBJSQKUoQSSAAKUkESQAAKEkABAJJACQBASQAElJJJAAJBSpCQJPVVVVKRAAv\nTxB1yZCiS86nnLpiO6vHTcs/Lr0BUD37numCkUABSAEgAkpIAUkAkAAFAABFAApSgACQACSU\ngQBKUJAAEoBEKABEiAAggEkgEAAAAgvKqqq4EJIIEQkhIglpgAQhAAASQkKkUAIBACBKFCQS\nRIEABAlIAiQJIIARAABIBSUgSkkAUkAAEkgFKAAAEFIAAgUpICUQgpIQIpSIKQIJIkSpIJXX\n///YggChRCAEACAeElCEJSlACAgBAQkkJQkAgIFAEAoUkCAASIAgCglAVJUCUAABAAASABFK\nQACQApJSRQCSSBAACQACAACCgAABAEggABAACgPNVVUoIKQEAQqRSQkBAIIQgAAUgkEgJEMB\nAEBIIiASBSNABIpKACSEgEAJAABIAlJQSSSAlIQAFSoCQAAAACQAAoJKQElAqSggESSQSAEK\nSQUUgKvWqqpahAEQSCAAAEAkKghCJKSAKAQEgAiUEgkBCApAUAQCUAAAkoAiEQkgElICSAAF\nABASACASQABIClVJSIApSEgAAQAUAACERAAFApRAACBAJBPmqqpYESBCAgRJJBJBAEEAAAAk\ngSEgKSABQIBIQkASAkCQBSSgACkAhEAJAACQApJASQUAkglACUQCgAAAAikAAAKklFIBEpIR\nASUgQAASpIgJAQvXVVVYQAoISJEAEEAEEQQKSkqABAQCgIJIEiUCEAJASBIJIAAFKQAUEBJE\nEpICSAASACAqACAJIBEoEkQlKAAkkkgAQABIQABACIACCklAAgEgJCXMqqpZCQCCAABSBRSR\nRCCgAAAlIUFQEhACAABIhJAUAkCACUkgAEpBBICBQACQASkApQkAlQogCAABIBEAAkoABAEk\nEkkCFKQUoClIgAASIKQKAIvmqqpYIFIIJSkAoAAAAIIAkkkABAgCQESoJJIAAEJBSAIkoAQE\npQAIUBIIBJIElACSACBEAECEoUkkCUAUkABJUSQAgABIgAJABQAAJKSAhAEgUhPOqqpZCQC+\ngHB0CSUk9yhKAcHe8PP4aAAxARCSWhwcdSzg53k5/C0CBIBCYARAISQASQgRIBAABAIBABKA\nBSSCAAiSJSgAIiAJEEkkAAAkISAEAEbrVVVYIAQx1LIwIAQBQgEAVOXEMmWJIJKQlFIACC1Y\nzARyxhh0hJQoICUUQlAkgABJAEFABUJSkCgkJIAiUAAICSIIAAFJCIkgQAABSkqBBASRJQvO\nqqpZClEygDCKCU1QUyBSAaKNKKEoagAYABCpFQotlUlRUpRRkBkBCQAFMAIBFJICKBAJQAgA\nBQEBACQIAlJBIACCkkgAQAAJCpJQAAAgQSAAACbSqqpYQAA4d75x455Eyh7u6KqEOrURI69T\nXLbAXBoowAxVQhVYinz19uXvopEkAAgogUUkCiEkkEQUEoCiSAAEBKQQCACVCSSgIAgBKSkK\nFAUqSRPOqqpYEkketzcyZNxAfrZEQrbMraHwJs2WLBdpI0voejDb017Q+BOzW7MkGAQAkoKA\nJAAAgIQIAhFBQCgAApUhIAEEgqQAIEAJBIKUAABAgUAAgEbrVVVZQACXMzO3bs5JQjJU0JaG\nJaVSrEjcslIgMg1tWJJKQhKSylEamVlsUJBKABABAEiSJBBCSIAACQKSSACECSRQEAJIgQpA\nEBAASUkEEBSkCQvOqqhYCSQHs3M/7CwCUqamhLSkZSEQJVqUGBKpPklIBBBaVjLQkBlSMRGl\nFAIApISoSQIAAQQQACSUQEAAgSAhAAAEhEgCFAAUhISSAAAhBAABICbKVUtYRBBhuzs2DI0o\nRiI7kIiEJiWEtEiTLLYgQQqIllTEwpMagVETFVI0EEgkABABAAgklCFAlIABCQSSJAkIUkkg\nIQEoQSlAEBAAJSSEIlEkBJPnUrRaEQQ5szN3bk7BQrZRBY2mYrEoJ823JhK01ZitzBBVQhFQ\nzBW2ERumVQKBKQSIUkIBAIgSACkgIFAAAQBCAIIJCEABCAAJBISlAAAggAQBIAvOqqVYgCC/\nXa4z16ZE9x0VUenOenP5e5c5uD9w456cuJrk7705/Lznu7nTMEgkAFAiAAhUEgCASQQEiQEl\nJCUQigggIBUkIEkgUCAAkkqCJJAkApPVVVpYJIkABIIwBAggBEAgAAAQgggEAESASSAEACCA\nRAiIECEEACJAEkQkIAABJAQAlSEAgKQkAEFIACQIAQAEIEEKCgAACgAJBIkkABAgAAUBSArn\nVVJYgAASkCi6kKKJUBSCkkpCAKCQUQAlAAVRKoAJEFQhQQgQkoEEQBCAwpKkASFKAAQCEgCA\npQgBJIEglCkgAiRAQFJJQCUgAAAAKUAFJSCUAJPNVVVYJSSABALgAgAABQAgAAAQUAoCBCkA\nUpAAABSgBQYECEJEBBBQEgISaAABSAgAkUFQgEgoACJIACAEAIAJSAAREgAAEoAJUkpJAAqQ\nAEAAkg/WqqoqgBAkkUggSBJJIBKJJSlBAkBIIIBJAACJJEAJIAiQIgAAUEIBQEhAACokASAk\nBAQCCQSClIACSopQkgSgAElEAESqQCSgAAAgRSABKQSSABHNVVVYJIQAAAIKAkAACUAAAAAU\nJBECiCQAJJIgAQkASIAEgJUqAhCQFIESSoCAkAqBIJCIQEAAACSQAAACAKAKSgABSRAAEAAJ\nFSSJEASkACAAqUfmqqpYACCUpJChKASVIAIqVKSAgIQIAICUgAACpCAlAhKQEgAASEIEgCQA\nAAQSBSAEAgQgJQkpJIAAqJJIEgJAAJUkAAEiQpJAQBAAAJAAJIVSAAvWqqq5SQkACAQAApAg\nCSiAAAAgJCFBJCQAKUkgAIoAIIAEgKJEAQhAJAEpIkEAkARRIJEKACAAACpKAgACgEgSSAAA\nlJAIEAQSCQSSSASSgCAASSXGqqooAAASQlEUkASBIAABRJKCgIAkAICSgAQJEgBUghJQEggR\nJCESgKQACBRKAJEACgAApIJSUoAgEElIJQJAASRKAAUgQlBAICAAAlAAEokJAAvuqVS5KlJP\nQ9BHB2AYCSTpwIAoJCgBUhJkEkEgQJEAIIAEgAJAAAQAJAElIQAAkgBJIJJQACQAABEEhAAA\nAEgSpAEApUAKCAIUhIlKkASkQABASkbFVVVYAAAY1jIDTiksoAFAktUBAQEkAIgkyAgJEgQE\nhCUgJKgCUpBJASQABBEkAEkEAAABFIBKkkQQIJUlUgBAAKQkABJBIEhAEAAAASABBJIlABPu\nqqpZRJS0zRCSiwBICpBSgBGISEgAkCFpjSJAAIFAIQAJAAKQAAQQSAFJIUQBSQAhSlSUQCQA\nAAEEiAAAAJIUSACBJACACgIJBSSRKApIQACAUkvGqqpYEAAwTFYGqmfLjhzAy7/24c3SH24t\n/7cPfNQUhAkgCpAJSlFBAJQACABUABKAAAAAAoCkSkhQAqRSJEBBAJIkAFIJIEggEAIEBKAC\nCSoSABPtVVSqBUk0LBKS2rZduWZUgNUbtybAYbskiN25NjAAIUAKoARAAAAIUgCUgkkAlIAp\nJSVJICgBAAIEkAEAgRQAVAABJQBABAIKglCRIASQkAAAkgvGqqpYkABwjUADViSIgz9ApJFV\nUHZTkZG2rIqDo01JCCSgACEJJJIhABIAEAACAEkAAAAACQEkSSggBCQKBACVAJUkAAkKkSig\nSAAAAJAEBKJSAKXuqqq4Akk0LBVCUqQqjSBSgZkRGaTDRTUkiajNKgYAQgAESohAAACIJICl\nBKSopABKUkiSgEQAAAIJIQEgoJIAIgABUkBAAAAAApUklAUhIAgAkgvKqqpKSAAxTRAKqiyI\ns2RAyNFVUmRFgREkyIqVIhwlEIqRAAASSUoAghIAUAIAAJUAAAIAJRCUklBEACQAEgBIiEiU\nACURJKJKSAACAJAIASBKABPWqqpYAlSY1nJCIqYsmTHShJURFy1QczNsmZi5s3KABCAASSUA\ngACkIIBIBSCJJABJJKCpAAQABASBSgFKAJICAQIAkgAECAgAASJIpAJCSAoAqSbnVVU5KAAv\ng+sXt3Pd7p7h/ez7ud7gm7v/Z93O98AJIABJAAASJSQAhCUBIAQgAJIAAAQAJJBJUJAIAJQA\nkgAoJAiSAJJQISEklAgAASgQAkAkAAvNUqpYAkQJJAAEBBSRCUgQJAJJIkAUIAAACAICBBSQ\nCUoAUqlAAAEkEQBICSEKSAClSkESAASAAgSRJACQAKkBAUAAkgAFBAQBASKkkAIFUBKBEpPX\nVVVYkBCgACJQEEAEAAFCgIkECBJAhKkiISgokEAAoAAlAAAJJJQAQEkAoAhAAlIAABRASlAk\niBAEAFICSgBEJBJSAEkgkJCUSAAABJBQAUAIQAvKqqhYBIQJSQgChQkhSSQQJCBBIQAIEAAI\nhAKABAkkClKAJCRAAAEqEgBUCSISoABIkgASAAQAIUJBUgCkAEkQgAAApAIIAgIAAkiSQASB\nEBJCEkbXVUtZUCBAACBIICAAIACBAIIIBCShQkUgEJAEkSACQAAkgIEEqUgAQBIAQAAACUkC\nAKJAKSCShAEIAJIBKQACEqSSASggSEgSSAIICVAEQkAIgBPMqrRYBIkSVIUCCIqUClAkUhCC\nQQAICBAJAASgAAqQEkgAKRBIAAJEFISJEpKSAABIpAgVAAkAEJBCJABIAEkgQAgASAEKAAKA\nApCCgASQEBJAJIvnVUqqIAAAABAQQgAAQAKAAEQoCEpCIEEgSlAEpKACQAKkgEECRSgQQBAg\nAABAJSUAAEJAJKBKQgIQgEkASQQJAkElASRAJShJKAQQFSACQkAJEBPWqqpYiSVKRISEEEil\nEkgpJAECggAQhQgJAASQAASgEpAAEhQgEAJFCSEKSSgUgABJKRAIgAgAAKQEJABKAEEgUBBA\nSAASgAAAASEEQAkgEBUgBQrGqqpYAAAAECAQQQIAAAAAAJQQKElEECEgCSACSpACQACKQACC\nQEgAIAQABACAElIgAAEiEkSSSgChAJUASQgBAkESAklAJKSSpAgRAEQCQUAEoFPtVVVZJVJS\nBAkFCEBIkpKSkgCEAQABBAgJQAkgAASQFJQgEpAoFQKRCoFJQUolAAAKSkgAQAAAEEgISgBR\nACJIIBQAkBAIAAAEAQKAVQFQFAkgCA/GqqpYAAAAUKBQIQkCQAAAAJIgRBJIIKCgEqAJKJAJ\nQAEBQAKAQBAEQBQACAAAKklAAAJJBUlKQQEgAJIEEoAEhUCSAkIilJJQJFBJAEgJQCAJISHu\npVS0qJJJBAkCCEBAFKkpKAAJEIACCAgJAApAAgSACUBIEkgSBISAEQCSQiSRAAASkpAQIAAA\nBCQKkACBIClAIAgAoACAAAACAAQAIAIACQkABBfKqqpYAgAAAEAIQiUUgAAAAklEAgpIokJA\nEkASkBAJIAoggABAkBAUhBIICIAEESpAAAJEgiUkkBBAASQkCQAEgiJKCSoSSSVISSEShShJ\nIEBSkEXWqqpZAJSUqRJBEAAAJIqSgAABQKAQABAUgBIABIVACSAKKSQSBISAIUCCQClBRAAS\nSSAAKIAAIoQRKAgBAEpQIIAAAABAAEACAghAEAIACBIABBfnVVVYKgAAAAAEAkkkgCAAFJUo\nCgFCSUFASkBSUCAFIAFAAIFAECASgAIQBIAEASJAIAkkgBJSgAFEBKCUSQAEigSSUpEEpQRI\nKCASQJAlIUASUUHMqqpZAJKlJKUhQAAAJASUgCACQEgAABAJABIABIiQCkgRJCQShAkAKShF\nIBJQkAgSCSBAEkAAFKABIAQAAEkAAFAggAQgACECgQoAFASACBSAABfWqqpYJAAAAgAEFJJS\ngJAAEoBIEQEUlIUgEkAkkAIBICCEAQAAEKBJAAEACUACASBAQAkJQAJKQAUkAJCklQBSSQSE\nClCClIQQBEBKQSIJIIAkkkvOqqpZASkSSElAAQQAKQSkgBUCBEhAACAJABUBBSCkBIohSFKU\nhAkASkBSQBSISAoUFIAAElAAEkABSgQAIEgAACABIAIoACCEQBIAAECgCiSAABPTVVVYJABA\nAQASpBBJABAAEkAQUAEBUoEgSUAUIAQAkAAIAAAAEEAlABUABIAhBKCBQBJUiASSQBSUABCS\ngAKSlIJUAkgAJIIRCUEklQQEoAAFSkXuqqpZAUgUkFIAAIIASSJJAAiEBKQoABAIEAlACSEk\nBJECSklJBRIASQAkoCSAQAAgCQAAAoEAEgAAkoQAFSAAACABIAJFACiAQAgAACEQBJJQABfF\nVVJYJAFAAgBKJEglAAgAJSIRIACBEkUhQSAEoAQAUARIAAAAIACSAEiAAoAKEkqCICUiUBRJ\nQFJSABBKQAklJIlIAkgQEoASJSBSqIRAkAEASUXWqqpZAJAJSJQAgQKASkKUgACACSQkQAAI\nCAkQCUEpBIACUpRSRJQAkgIqSCSAgAAoikAIBEAAFIAAqQSACSAAAAACUIIEgBJAgAoAAiAU\nBKQlABPXVVVYEgUgAAFSBAgSAAAAJKQkoAEABJShISBCQBQAABSoAAEAEAEqAEgAAQASCUkA\nAAShIQCUgASSABAJIAJSUpJIAhBQEkASCSBJEASAkACAJIvMqlRagJAKSSAAoKEAklJJAAEA\nCpBJIAAECAgIEgEkqSACkkBJBKAAqQEikFUAkABKSSAECFQAJJAASUSACUgAACACkAQFIBIA\nQAQARJAiBSQoACbnVVVYSgAgBAIkEgQUQAAAJJQKQAEAAqSQISEgQEgAAASQABUEIAkkACQI\nCQAqASkAAASQQgCSgAFJAAAUoAJJSQlIAlCgAkBJBJCVAACIkAAClRPWqqpYAJUEkUiBAIFB\nFJSkgAFAEShVSAAFBAgKFAKVJQAElIAhCQABEgEBICIAkABJUpAEgIgAJSQASlJACkAAAEAB\nIAQJJBSASAQAJSQAAlKAAAvGqqpZJACQAAAEEhQIAAAQCUgJRAIAABKQESCgQKgAAFKQAAiA\nIClIQJQkBIhIBSUAAASQFCEpAAAVAAACQBSUlQSUBJBAAEAlAlBIgBCSSAAKUlPtVVVYASA/\n9GpSgEBOj3eHv8IgAUCEUoACXMQECAEiSAAFSSI0igCDEASBAwECQABJFOAEgcQASVKYSRUh\ntoAgACABKQQSSQkA0AXCKQYAAklAAArGqqpYlASmkSACCQEGHDGjiFCBJAoRABJICFERIkQI\nASSRAAASAJK1hSYkKSRIJJIAQUJSFFBJAABIAEAKmiKCSIJICCNAICAlQSBIASNUqAASRJPu\npVSoAUAkkCSSQFIlVSFFCgQoAIBASQACjYBAABEipAAEpUkKkAARIAoBAwACACCkAFAChEUA\nUiQakgkhUggQAigCkgoUiQkBkAhCRQBAApQAEA/KqqpZSApMX2OGPRyHFKNNGJNvPjrnh98o\nKB90vrm3Nz57bDx3j/+9aKs7L33394Tn18H3r1h1HNl4d7mYE0edeA6dmPfmucB7x/d4c87y\nkAFJQlHWqqpYAkAFGyyiyDIltDFtj8G7ImkmbREACU3YNmzdmzZJNmkSREbVshENmTUSKgGT\nZtWSDWyoI2zJImyNNhkiTRkGzZIiamnZJiNtyaNQBJAACAfnVVVZKAlUEaaGcEYMrKVpDIWR\nP2HIyJ+SrAiMoEWI0SNzM1QbFmSREBUqmaXyIio6JEA2RFX4vkSMKmWoEgw+fCNUaUqrS+CJ\ngipEHQJEkASVIkvNVVRYAkAGVSMiNR6FpiEtSSE1YDjDzrAACJqoKWSqlWoxYmZSAkmZlL8I\n0SEltQDSrFHSFUSEKNaolEyKUodpQk8GSwIiQhKrEaTWeSrABIAAABXXVVVYkAkUETWKmDIU\nVDMxKAURMlp2VxSSSgiKYEaIkSIdIzgSS7zRMCDalaWB3EVSJMFTRGaQYkSKNUSYGisgSBEU\naUqqZkCJRd5EyYJUkCkkSUPKqqpZBIBFUWSCSTKGRSEVDMGTMUkmRJigGJqoO3zMu3bJKmSW\nAVCVFSmImzGYilGbNtWaDEzGMVXYCm3aUok1YzlGyYo2wxnZAKhUyxJABIBBABbXVSpYECUO\nP/dXdB0ubnvT3+u7nnXDt48knB3cnjnd1x5z9zw5kxHPuHHd7vDxmELvc6Dpo+54nu52WLhs\nPw5efA6HnvXb5eB3yYrvdMeyUAkISRPMqtVZBIBIgAEEkUQBCIIQAAAgRIEoCGKQAkACAIIR\nFAAkgEMiQJQhIggEAAoIRMBAhEQEBIEkJICIGCSCAkIBCSUkQCAIESRAQECAEEggBIACAkfn\nVSpYUBICCSQQABCUQhAElIKFECQArchBKAKokghAMJSACu4IEgCECKJQkqAhAIkSERBQkAiA\ngAog0QAoSAiUIAAFFIEiQAEJJQQSQQCFICSoSBXWqqpYBICQkAiFJAQAEESAACggBIEkDwAU\nApAAAKEUuAApQDkCQJIhAAAEAASIJEAAQAUCBKAkJKAEZEoCESABCpJeACgAEkhAAFEAFEoQ\nCQABAQfGqqpZIBIEASAgAlBSQQAVJIECUAQCQJKASASJKgQACSSAJEAoAgAIUkkhKRAAgRSl\nBSAIkAkBAACREABIRAJIQAAAJIJKQAIEkgAqQABAoEpEJCntVVVYCkCBJAQJSAUACEqAQCBI\nBKFIEAAiASAgAEEkgAAkARSCUKSCAAAIAEVSJAAAQAigBIBIUkoARKQCASQCESkSgBAAFUiQ\nAJSACSQUCQAQAIfGqqpYoBIUAJCgASAEoQASBIUBIAgAQSkJJASCkQQAElKBJAAAAgBIJJKg\npQAAAJKSFKIEkAUCCABJAACQSAEoBABAEkFSQAACSgAEoICAQAlBShXulVS0BICBSAQEQAig\nCEiAkBBQCQJJCABAAUAgBCFJAIAQASUpIEkCAQQIAFEUkAAAgACABSBAgpIAUkgEApACgUkS\nAIgACJJIAESQCCQkEkAIAEfFVVUZEBIIAlERCkISQgISAkABICgARKUCVBSEkIgAShJElAAA\nCQAQlBACkgRAQlJKBJISUAIUEACVAAFQSASQFAAASgIkogEBKRICQQCAiAkhKRXuqqpoRIDi\nSDBActAAEJxAkBeUCgJcIABRBgAoAgaUAAABceSUgF0EAIdAAIAJEGCgQABOUlCBBKQAOyQH\nASBqQJSWAEiAAKcsADDgGlISIpAIAAfLVVVZABIoAJkFEkClRAUCAUYBIJAGrJIBoqKJKCoB\nJKSUMYAQJURRMioKSgkgBKKxEkkHUAIEEAakUhCRlAGoAiBEKQAFJAEEklApmABAAAJCSSnW\nqqpYSQBhJBBANMoAASRQkAKAAASIBQCUMggcAQMgAAEAaKlUgEwAEKJAAKAJIDCkBBBOWSCh\nQkiBFIIxAVSkkGTRAFJQASFWABoiiiQUkSAQAAfLVVJaAEkjh1Mclkxyd3WHNkoXnTppb13f\nfuBWdl673v4RLoc85PeXvnrLy7/cu+JG558+IH9zhw33Vjw/acH653j99w4Duw8Fz1Hp645C\nBAlAklXuqqpYlAA27Zq0EtmYqi7YuwMicm24bBqJI2QiGzJqZkSEJK2REUbMkCtkQRE2aygT\n+bNmiiIuWUWMkuURsiKJrSRE35GOTbtGzZNgrZEAgQAUBAfKVVVYASqlSp4yWnD6IqRPkyoE\nJ0UZJAipYyCyVSbL5GYQt4jT9FRlsmK35VGjUmJDGYNmAKKgzQyRlkQZU+irLLFWiL8g6pEM\naNYpiL+UFCSAUJXXUqpZIAAsSNRYElKAmlVKUUKW+KkQJUSVKjI+EaJCE0iCIqqZQUVGlCol\nAJYyRiATH79uSDZTZkSHslFTGkCJBiBEqZQLSNVFTJKgqpQBIQglAAfmrSpYBJCkWpIMmsik\nHcRYFQoIQptibA9xoqBBtSpmQ7wIKoiRFFRI0KKkCu4mYzSLWDNnAR3FQxWsksARUxLNSyJm\njJBEypEUSpoiiJEkACCABSnNUtSykAQnzZutElzFKZVNUUNIdOtoJSMpKilVEXbDGRGhI62z\niMZulDI2oMU2w2AjHrdmSEimWQSMlnZVExCZCbDEyLqWWLsFzbNwzNiBJIQkoEfnVSpYAVF7\np7m4P+d4CM7nv4cquky08wJj33Dju53l4ViEcIeM8D7nbJ9z5Exc6dKHr127AQmLrq5nfz0P\nveX/rho/3c9Dvc7Xlz3Sfc8kABCAAhXMqqpZSABAAAQCRBAkkgEoQJAIACRAEkgQAJIIRAQQ\nkgIhJEgQlICIACJEASACACARAAFIUEhCRAkhIIAgQEEAiQAIEgASQhIAAIEIAiSBSgQkkIfX\nVVVYAkUCSlEoEUSCABQBEgJAJIESQASCkgChEVCCAJCIAQJCAAogkogQRAEoEoJESpQBAQIQ\nESCEAiCJCQQiAFSiQFSACECKUgAgqAAEAKEAAhXNVVRZIBBQAAACQAAgpIEgAJASgCAEFJAg\nAJIEAAQgpAQCkEgQkkAEAAIEEJQCQCgAAACQSEgEgAghSAgAQFAIpAAAEgAkghAgAKkIApJQ\nkAhVIEfrVVVYEkACSJJIAiSEACQKUglAEoSQQACJJEAQJSCCAJBICQBCACSRJJChQgBIBIBJ\nJFIBAQBQEkEEASJJCQCgASJJQJKCCEUCSgAikAACAkIABQnOqqpZABUQEgCCSIARKQEAAIAU\nQCECCSQACBSEgAgoSAIBIEoIlIAACAQICKUCkBIAAQCoSEoEgBBBJAAAICQKJAgAEgAgoQBI\nAEoABKkgpBCEoCflKqpYSUBBQEoIAApAAAgpJCSBCQRIIICUoIAQCSEBAkgkAQAgAAkkoJBC\nIAAQAkCSlBIBAgEgCUUUACVUhIJAgCCSQCSEBAkASQCkkAQEAEAQCIXO1VVZAAQUCABCpSAU\nikIAAQAgIEACiCkABCSFIAhASAKBJEkJJIBABAQQhJEiSBIEAIBEIJAKQAABKQgAECAQKQkE\nEgAhEKBKAEgABIFBJBSEgivrKqpYJJBAIUkQAAFAIAiSVBKEgQpIAQAkkIAgASEFASgkAAAg\ngCUSkFFAEAQIAkCQkgkQEgEgJJJIACAJQRJEgCAQgEkEQgEBKQCKUAgUAUAQCAPOqqpZAAQJ\nBAAESSgJCUAAgQAQKEACSHoMBCSJSAhQSAABUpSEKQAABQAKBSECQBAAAKAFAKQEgAACkkVA\nEgAAEgkgKRBAAJQgAEggBJEBJAkFIVbSqqpYSlCgEBJRAAIgQAlKCCpEghEoARgskIAAAUIA\nAJKkAAAQAEkkkAIgUAhQCkJKUgkgUgCQEpSoAAAEgJKSQKACgAESSgCJJQKBIABIACBQBAPO\nqqq0AAQJRUAAVICIEkAAIgAAAIQBJBqEBCkkUBCVJAAAlKSFJAAAAlCJAkIFIBAAAABEAEgE\nAAABKSRQJAAEEgpIEpIAEEQAAEgoCkgCkgkCQSvrVKpYSSBAAASSAaohQASS/uJJKiEkjDgQ\nUQABApQBASSOAAAgAJ5KSAIACAAgAkFSSUkQRQCRSlJEBAEEgEpQQAAAQAAlQRCSUgABIQKQ\nQKAIBAvOq1SZAAkSSJAAiIJkFJAAksgAAAgAJRuePn987BEhkEAjIiQJSBQAFSCSQlIJSBQA\nAAAEkFQAAAARIUgAJAACFKKSFKSABAIEAJKIAEgEEgkioJPlVKpYEqAAAgFKIpIQAAEq0kCS\nokBJBF3MzMxmfEgKCQSCCICgAVCpRAoACACgAEASlJUgAACkkklAAACkgJJIQAgAgAAJEEgQ\nkgAiSgCQgAAAEgvOqpVZIApe8PnNh4ft+vgAGFpwd3eXfRztxczT8jPDbCcquXvHbj7mz4Cp\nISQJJQlAAAAJJRIAIAASSSQAKQACCQJSIkpAQgKCAKkAgJIEJKUkAIbrVWpYAkA0jdNm7Msm\n7IykUuyKKibtdBnM1Mb/YJJRtoyCZtaKmpGzdCQAgICAACACSVEgAEAKhJSBABBKgElIICgA\nCAAJCChISgAkEgAhAAAAkhPMqpS5SBIw+Qo0SoJtRPgBEFX4oqxIRljMzNzAaDNFKiWmHKVv\ntDUWJgESFCgkkgkoAAQKSBKgAAAkVIQAEgACRIEkgpKAQoAAAEkBAKSIUlJSAJbnVVUoAEBZ\nkSKlSIokTYEkEkSSGkVNRBztenjlYJWBIwaCtIZIERFSpCRAQAEQQCAAlSEgAUAEKVKAAACk\nQBUoAgQACAAqEAklSQAUJAAACAAASgPNVVS5JQkMhQokaqKlVKQBWNSAXeRoVTjMQMHhahDR\nokmiRaeakFESNQAQEohEFIpJAAgJUBIhAAAkiVIBEoACSEFKQSgAhEAAAEpBASklApSSAKvm\nqqpYACA21cttTYYsRMUkEEXNCYbJbB2Nfnx2YBtFKhyLdIIMWhO7JFSFQCEAgAAAJEEgBICI\nJIkAIAAkAAiQARQAJAKiARJSKQAAFAAQEAAAJBPOqqqZSIp4efPO72H+73mAuu54KKecew9e\nf3899Luj9wdHO9PnuLznd0AgCQgkJSSkARAJACQCACBJCRSBJIIFIACSAUAIUAAAgEkqQSUE\nhJKpAQrqqqpYAgACQAgQAASASBISCBIggQAiBCEIk4OEEEAIiKSQAkUgQAiQIJKCIECAgAAA\npAEgKoBISoIgQEAEACgQClIBJARBASVKCQAACAAgEAAAlBPOpVS5IJEAFCFFUpAlAkBAgoCK\nFFKIgQhCweUgghKCIgAEoBZqFIIEiAAgiBIkJKUoAUgJACkCACCIEgkhUgKCQACkAJEQSAAA\nQFKSQkkJIkkSAI/TVVUoEgQpQIQAAACACAkCEBIAQAAAFCII5uICCIAIAAkiBIOggCgQASkK\nAUAAgAABJASgEQAIKQoBQCCEAJAICJIASgABAlRJBQAAECAgAABAIiHOqqpaQIEACAEkSSQp\nQkBQhECkEkkkgICCfHyQgCkhJKBAkCQIJIKEkABASBSSEkkkAJAKRElCgEBIFIggkgSiQgBJ\nAKkkIAEAQCSkhIkKlVIJCBfVVVVYAhQlIVQBAACACAkCEQIAQAAAIhIIkIICFIAEEAkEBIEg\ngAAQBUkCIIBACAAASgJAAAAQAgEAgAECABAAEEkAJAQAiUgJFIAAIABAAAAgIEXOqqpZKECA\nCACQSlISISAgQFBJCSSpCECgBCiggBJBBQBIgCAIJSiFIABQiiIUgpSSAIASkkoEqJRKJSRQ\nlISSRAIkAQFSAAJAACkpCSQRIiSJChfqqqpYAQIEQiIJAABAhASJCQEARBAAQQICUIAKEkAk\nICUCEopCgAIgAiUEAAgAEABBJCpAAABQAAAAAAACABAIASgQlCgAEkglJIAAQAJECIAAQEHO\nqqq0hEhREIiAUpIQESAAICRSAQUSEChIBCSAQBSBCQBAgACIJJAJSIABIkKShKQQAQASVSQE\nikkkkVJISQSCSAEEAIIkhAIAABKIFJABACpSEhfmqqpYEAEABABJAACCQAJShIAAFCBABIEA\nkIARCUAEIBIUSSQgAAEgACRUCABAEACCVCJAAIEgICCABAABAFAQASQiUgCAEJCSUkAhQEEk\nKQAAgEvNVVSqQlBKQSQAJJAkEpAAACklQIgUgCBJBCSEIAkghICAAAEFSkgJJAEAglISRJIg\nAIgSQCAJBIQpQJUgUgUFJAEAAKgqQAQAAIkICQgBAESQJBPmqqpYCAEACAEkgAKAQAFKUoQA\nAgJAFIUAIIAggSASEEoCSlQQAACgAJQCCAAAAAAFIgCIBQSgEBAAEgAFACBQACQUkgEAElEp\nSiBCICJUJRACgUXOqVU5IpQkgkgIJKQkiSgAAAFIkKAJQBBSCCoIFApARACgAACCUqQJUgFQ\nopKUkklACEkCkEgJBAUkAJFAJQgCUoFAAEREgAAAAAgQhAAAgAUkEBfqqqpYAACAEQEhEAAA\nIAESSigCBAkgAkAAIQBCQCAJASQEqSIIABBAAEgCAAAACCAUoQAQAgJAUKABSgQUgECIACQB\nSRAQBUkkkkKEEUkiCJAARIXOqpSqkkIpRFAEBSSSCkhAAIJIQQBEkBUlCEQQEoSASAEhAAiC\nSAUSJAIgSJSSQgoABFJEoJASAglIAIAAKBIikgCUAASFIAAAABAhAAIIQgJRACvTVWpYAAgA\nAASRIAAIQAEEkgAAJCUQCUAAQRFCQBAJAJQEBKAoAqAAgUiJAgAAEECREAAAAgJAiCABJBKk\ngkAAAJIAKpAgEiVKUkEAEighCEgEFIPOqpVYqSEkkgAACSkhEpBAIKklAQAFIAkoEAAIEgSg\nSQEgkAkCQAiSJAAASKSlBBAEQkkpKJASIgkkASAAABUokACSAAQJAIAAABBKQIEEIQKAgCvV\nKqpaAAQAAFKpIAAEAAUKhACACEkgASABRJIgQFAJAEgCAkAQFEJAACklAAAAIUJQCACAAAJA\nAKAAlARJKUACAkoASJCgEhIpJUUACgQQiEgSIoXO1VSwSkFKUgAARJKBJJAgARIpQgAJJAlE\nAACFEgSAUgJQoBJEgRAUkgAASSUpCBAFApISRJASSApQASEAAAkgpACkggQEgECAAABSgJFA\nAgEACCvrKqpZACQAAEoiEEAkAACAlEAACCkgACAQEqoQACAJAAgCCUAABACAAJJSAAAAIIEg\nKABAEgJAAkACSAQSpSACASQAECEQSQIJSRIAJAACkCRUoAPOqqpYSQCSlACIhBQBUkgoABJJ\nIQAJSoQFQABCSQkgJKKQABUlQSQlSAQApJJJBCQIgSgUgKAUkBJIAkCAAAlISAiUhIhEAihA\nAECSAUkoBIAACpblVVVZABIAAKQAAICUAQKCUkAABBKgABFQEiEIIEQEggAEpIAAFACAAlBK\nEEAAEIEiBAKABAlAAkAAqBIKSSABASIAEAIBKAEJKhIAJAAAkAkiQAvOqqpYSQCkkgElJCIA\nSEgIABSSQQAKUQAAAIgCCgFAIJJACCJSAUgkSAIABBSShCQAkSAlIQAJSBKSAkCgAAkkSACS\nQkCQAUQgAICSQJSIBJAIESbWqqpaACoAABQAEIhJAAAiSUAICFJABEpFSgEoQEgShAAJIIgA\nSAKBAEhIoIBAIQBKAASABCUgAEAAEAIBKSAAASQAAQoBJBCJJBIIEgAiUAEiRBPKqVSolIBK\nSQFSQgIASpKAAAkiggARAAAQAJBBEQIAISkgBAKSAkgQUgICCRIUCEkApJAkoIAKShJUhShI\nAApSSAFKUECoAIAAAQCCAKSABSQAAQvXVqpYAAEAIEgACEgpAAAJJSAAKCSEVJJBJAUEBEhJ\nBAACkEgASABCAEgoAEAAQgAkAgCAAgkgAEAAEAEAkqAAAlQACQQCUhKSpBIQkgAJIABJJCXN\nUqq5SVRSCQIkgQIAUSkgAAqQAgEAAAAQASAQgAIAQUpIBQEpAlIQlIKCpBKSEKSBEKQkkJAE\nohSJAkRUAASUoACSQFEAAEAAAUBEAJJCCVIAAQvWqqooAAAAQEiAJBClBAAEqSACkJQpRKSE\nlARCEkiVBAAAUCQObYCCAAgAAIAAQBAIQAECAgCQCIAgSBAASRAACSIAAgAVJQJKJAkASggI\nIAEqVBPmqqq5JIkSEgApAIQAAUkgAASQBAAAEAggAUEAgAAAUJKkAgEktKQgklEokiSkigTC\nFKhISEoEgCSJAkJFAEUlAAipJIlAACgAgIBSAEKBCRAAAUvWqqpYECBAQCSAEhAkVAACRJAE\nkSSkgSCJSAhKJVJSAgABSJQGRYEKABQCAAAAICKIgCEBAQCQEoAASAgQFQAAJKAAACAIpIEk\nEiUBKQAkIEEkkBPNVVSqRAkUFIASQIUBAJSQEASQAAEAJAQAAiIAAAAAiEiQAAEkJKHju7zl\n6e9+5cHnO/hIUFAFACSSAkICQElIgAkSkQoiACBBAAAkAFIBCBQABArmqqpYAKABQAlAAiAk\nAgIJQlACUlQSgJBJKIASUiVEIQIJEkgEhockTZFbQ02bsqSo1aUAAQJQSQIASBBIAgACCkBA\nBACAFIUEJKSASQCUQUCSolPOqqpZJAkgCSAVKAiBUJCACAUgAACAJAUAAClAAIARAFCAQIKU\nJKKX2rXyiwmRF+iPjjBKSCAAEEioAgSCkJJIkBIUoUgSQBAhCAAkACQAEAgACA/rVVVYAEAC\nIASAAEIkAgAJISAJJSIJAJAlJIAJSgRAJQQJEggGhooEiJECIayVsgKqFKAABIlFQQABKFAI\nBAgAAkCACAJAAkCIIRSBJICSRSEqQSHNVKpZShKQipAiShAAkJJABAkgAAhASAQAABIgAFEJ\nAAEgAEEkJMKmKZVWBMixEqCIjiqSkAAQCEkSAgSBISJJIBAkgkAUkBICAEAgCCQAAAQAEBfm\nqqpYAEBCAASIAECSBAgkkCABSSAlAlBSSUCCSQAEElQJJQQUFIsWLNGKk02VGxmcUaAAASSC\nIgBAkCAUBAAgCUKAEApACUBIpQSEoIBJSJEiQkXNVVS5JBIQkSACkhQAgSIBBQkoEAoASAUA\ngBIQAElBAAEAQFEPD8Pr3c33A6d7+eBnv5pSRAgggJIIBIkhISSKQBAkhJASgBIAAEAgBCkA\nEgAICBfnVVUoAEACBAJIAIBKFACUECAAhKBJASAKFIBBKQAIKkgpEgAQIkgAQCQASAkAAgJE\nkCgAESCCBEAgkAAACAAABIEAEAJAJICSShKCkIAUgEkhIEHMqqpaUhSQgSABJCUAgSQAggqS\nAAQASAlAACQUAEpCAAJAAJKEiAFSEgCpAkAlCKAQAQJJAAQoUBSIBSUkgpJEkCRKRSASACQE\nAIAoBBJAIgAEChfXVVVYCEAEFAlUAQAkCACSCKAAJJCpASASUoCASQAIkUgEkgAQASQAQJIA\nCASAIAlApBAEElCBAoABUBAASAgQAIAAAAJAkoCRJAkAkEACiEpQIEvNVVRZAglBIIABUEiB\nIkgAoASUgAQASAgAACgiAFJABAJAAJRFIACSEABKQkAkhIAUAQSRQAQQICSkAkJSASIFSikk\nkUgQACgAASBEBBUgAQAChBPrVVVYUCAEAhSIAQIkAAJSARAAEpBFAKFSSQKIJQASUEgJSgEA\nCkoAhSUACAqAECSAlFAABSBEhIAACAgAJABQAAAQBACFKQEklAkQkUAJJAlIAUXOqqpYBQpR\nIIAiJEABSUgASEJJAAQQUgQAgEACgCSAggJAAJBJIBCSAAhJQpAkhAAkAAVJIAkAICUlQgKU\ngSSCUkpFISQgAEQAAQAEAAkgAUACUBfSVUpZICAAAhKAgAkkAABJAQggKSFAABASCRIoJIAS\nCEgFJAEAAUAAKSAACAAAIUqASSAACKAkhIAAEKgAJAAIAAAACACBJREpSCSQSSAElBJIBIXP\nSrVYCISSSEAQKSAAlJICJAIKQAgVJIUAQACAACkAQgKQAUhSSApSAAUkgSVKCAAlAAiSQgoA\nECSSBAEkAUkCSSSRIlIoAAAAAkAEgAlAAAACQCvWtUpYohABAQRCgAlKAABIEChABKCAACAl\nEkoCpIAlECgAlAIAAiGBclAAJAwAQEkAJSIAEABJQIBAkEQApAAoAIAEAAACUkklKAlQJSAS\npKUoBIPKlVS0AEJIUEEQEoAApUoBBQISQAgiUgkABACoABJABIEoAJCVIICkIAJSAVSSGgBI\ngQCpBKICFCgQBBEkAJSBJClBJJSAAAAAAkAEAAkAAQACUCvXaqpYiQEAAhQEQCUkAACUIJBA\nCkEIASApISQAiUAIkAQBUgIAEgWAqUgAlEYAUCkCBSQEEAgoAQKFIkAAkgAIgQAEAAAUklKk\nkAUhJKBKJBSQBIXsn9UyIFBSiIEhEgABJFABCAQSQBICSAkAQAESIBUCBSFIAKCRzaeh45v4\n4fXPPWx5/8EBRQKBIEAgQBKoBEkgJEpRUpJABAAABSAIAAgAgIAEgCvGSohYCQIAIAgIAJJU\nAQJIIJBACUAoASBJClRABIAoEAgBEgIDpsyHNE3dsEbMlDZEiRRIACgEBQSCEkACkCABAAAA\nAAARUEkUkARCSkEkEiJQJIPWnKa5ACCUCkJCSAABIEgCCAUVIBKCkAkAAAASQCICgkJIQEhI\ndVmSJ9iJNGRT0SZ+c0ACJIEhQFAQgBIAAgqUSSJJFKUEAgBAIkEQEBIBAAgEgC3WKRZIJIoB\nIAgQAkpIBQCoQpAABIAABKAlKSJAEoiQCAgCCQEDpEjCpkrJkUzGmDLIqQEogAQIEgJECUAp\nKEAAIAgAQAAQCJUCgBQCQkCUSSEgEoPO1W1aQACQBIIFIAACkCQCEAJEgCiokAkAAAgSQAAE\nokJIgFBSZUyKNAiZEEVIkmJAcVQAKSEiAIgBIBSAAhEkikKSCSlCgABIFIFAABAAAgQJACvq\nKpY4CSQEkBCghKlIAIEQQigQFIICAkAkpKBABJJQABAAJQEDLG2jZqqNtNRu0CNriwEkgAgA\nSiCUBIAEkEQAABAAIAAIEpIAQAgJSkSRKJEgSRPOqq6pAgEgBSAIIAABJCRECIJCQBBAkBIA\nAAoVIAAEkkSkACQl3udF093c6D7nTXc93MAAEkJJAAQBICVQBAFKRISpCkkCQACSCSIgAAAE\nAAAJAAvKVVJcKJQCUAUhAokkEIAAoAAIAkEKAkCSSkCACSUgCAAApICAAQgRJAhBIkIQFAQg\nESpJQAgASJBIBIABUSQAECAAIABIElIIIACJKSlQkkkgClPuVVaxAAFIAkAESCABBCSSCSkC\nkBBAkBIAABAiQEAJAkkkACglSEKACUIQABCEgVEKRAAQFSKSAgUCQCRIAECSBAkSBJICAACC\nipAAAAAEAAAKQArCqq5YEkgCSASQAQSUIRAAAAAoCUUEAUAlSUKIBQSgUAQAlICAAhAJIBCE\npIQACAAgACJEgABASJBIEoECRRIAUKBAkEAQpJIQAAUlJKUhJJSgCSfuVVZaQAJAApAEkEAB\nCAVJUpSBIAAhSBIIAAgCQCAJBSFIABIkkISABAQgACEpIiSEpIgAIkgUAAACQCBAEACpBAgS\nBBSEAQCESJAAAAAICAAEkAvWVVVYCSgJSAJQCQkoISAEAAAEAkiEAICgSSBIFIkgIAACkkAA\nBCAqUVEEkogAAIAQAAEkiACBKSUoCQoKQJIAAEFAkIARFAoRAgBSSSRBIlKQBKXOqq5ZIAJA\nASAFICBCBAiQlKUhIAIglCQEAAkCQAAJCUpIAIqSQQkAAABAAAJKkCSFKkgAApQgAAgCQECA\nEgBJUhAQBCUgQKBAQKUAEAEQAAAFIAvqVVZYApAklAUgBIUAkCICAAAECSgCAIEQlSAIASUg\nAAAAkiAICAARSRISlJEAAoAgAQJKSACEkqCQCQISQEkAAISCkIACAgEJCgAJRJQCSSSQAJPO\nVVa0kASAAUAJIBAkBQCAkklBAAKQpCRCAApCUgAKUlJIAAiCglJEAECAAABIpCkJIEAAASQQ\nAAQEgFCAEgIkkiAgAiSQkJAgQEkgAAFIAAACSgvSVVZYAlAJSBSgAkCAkCQqAAAIUpACAQAI\nkSAIAJSgAAABKv4QKAAAJQUSS1oCAAGHAh9elABBKRCQSQQJQEiAAAKJKAACBASBCQACSUgA\nlUpIICXOqqpZSASAAgAJIBIkAgiAkpJCAASQSEkABASiSAAElJKkAMZEApUkgCCQAwCQSSSj\nSIYGIVISAEIEAAFAEgAqSSAAAklIkSAoQFKQAAJJAAARCRfWVVdYASAVKCJABUAASKAIAAAI\nilABAgBSUJAAASSQAAABJEIAkAAABIIZKhIBAACLACYmgABASQgiSlQkgCkABASSkCAAAAKC\nCQAJJSgASElEAEHNKqxZIAkAAogSkBKSAAUCVKkgIASoQKQAAgUlJAAFSSkgAVa6eu7z3i54\n0uHl3c/D886+FEkIACEIAAAAKQBEkUgEBIpJJJAAgCSAAAJSAgABSBfmVVdYBSBIkABAAIAB\nKRAoAAAEgSABCgCJSJAAAJKQAAAEpHxUydImkQKjZCZDJsyLtmZmQQAikoQhKSJKgEkQAAJQ\nkAAAgEIqJIASVJAACJJIIUvWqqRZQAoCBKUUpCSkAEICiRKAJAkQQEkgAAJJUCACSpJIAMd8\noDKmH4RWrVUg7VmDN2ZuAEoAIAEAAAgAEgAFSSAABJJSKQiACCkAgAUkoCACCBPGVS9YFKAo\nEAAAAIAAJQiQIEAUgSBCEQAJEkggAoJIAAAAkkpBitYrsBVEREwFpEirPndmlQBJBJQkkqEk\nQJKQAAkkkAAAACAIoIAqAlACBIJIQIXuVVZZAASChJJJKCklACAECBSAIAkIhFRAQAIJEBAC\nUSlIAELQgTJhlSik2YlKJUqDdmZmAFEAQACAAAQBEAACSQAAIkkkiQpCBBJAUAJIQBABEivV\nKqpYJJAAEAAAAIAAJIJRIUAShSAgIAEJBKhAQkEoBAABJM5m1ZNkmI6nWuyDbG2LN2Z2UgQV\nElIlKRCUAkpIAFJKiCCAIAAQEEABAkgBCUKUAAPOVVa0gASohKlKShKSABAACAkAEAkKCQgA\nSAESCBQCQUpSCPw9eu2/LwXK5Fch3udi4887AIEAAAAAAEABJAACVACAAggpCkkEhRUkIAKQ\nQBABJS7lVVYYBJACIAAAAEAASkSSQiAkQSBAQCClAkQAIECQCAAAIQFAACCAgFAgCQCFAQiB\nCBREkghRJSSSSQVIASkoAJIREEEAQCAQIAAACUgCBIJIAIPOVVbZIQUACRJSkRSpAAAAiIkB\nEAgREkQAQBFJCggEgkkkgFASVIgkKgQEQEggSEIUQkEAAKIEAAAAgEACkAACRAAERJBIEQlE\niSJSgAEgkCACUCvWVVZYBBBUoEAABAAASSlKIAAUBKKEAACSEkAAQCJQKAAABQJAAACBAJCR\nCQKCAhBAEAAUkgAglKUqJRIoBJJQEElQAAUChEAAAAgAJJQKBISoCQXNVVZakIAACRSSQJIk\nAAAABJSBIAAhSlIAgBJUEoAEglKSUCAVJKQgQAIAIEggoIQJBJSAIEkIAAAAAACBIAAEhQAE\nkiBAIBJJJIJJAAEgkCACQFfmKqtYAhKSQAAAEgCAkqUokAAkCSSAAABKCUAAQASQAAABAIpA\nAACFCkgkiQAKBAEgEAAiiQBCSSSRJEoEAlKQIBUgAIQUgkAAAEgAFSQAAIKQAQHWqq5YoIAA\nFJKSAJAkAAACBUkBAAApJJIAkBSJElAEqSSkJAAJJSggIAIAAEkAQSAKRUkIAFQQAAAEAQCR\nSAAEiIAKUgEAIBSlUgKUgEEqSigFKFfLKqoqBApJQAAApEKBKRJIEABIUkkAEAAkBIAgAASQ\nAAAAgEkgAAEIhKhKSQApCIUgAAAgSQBApSlQlCQAASSQAhEgABQkhUAAAEgAIggBAAAQAgvu\nVVbYQSAACUkoCBAkAEACgkkCAIJJBUkBICSKSQAEipSQKgBEqSRCEAIQAFUAQiAEkSoJACUK\nAAACAIFJJAAEkIQElIEAIAkokgEkiIJAUkVCQIXCqVZYFACVIAABIIEAJQSQCAAIiggAIAQU\nAIAAIClQIAACgSUQAAAQQJDAlQBJGASQNGAgJIAgFKSIEiQAAEpQACCQAEgkgiACACQAAAgK\nABAICivuVq5ZAUoAClSQBCRJAEAkolSgIEEkiJFBShJJCgAECKUgAAAFEkkEFERSACAAMpAF\nEKSEACIJAAAhQACUkgAFJAgFSQIAIIpAlIFSSSKAkkIigAbWVKpYSACRIAACkIAAkgqAAAAB\nAiQCAgAAAEAAAEkhQgAKKSkgQQAggUyASIUkggJQMjARSoggJIqEBJIAQCkgEKJQAAhKigAS\nACQAAAAkAAiAJJPNVVa0AlAEBIlIBCkkAIASKSSUSAEgkJIpJBUkpIAIEEkggAALlzyPPP/f\nDxPZt9wHEeJAAAKEgCAQkARJFQAIhAACSSEAAEkAkgCVKpIBKQAQACfmVVZaSAJQkCAAkIAQ\nSiRAgAAAAKQEBACEAEACACUgQQAAEkkmXWYaIkRtukZKliMt2ygFJEgCEoBCAlAgABKiAJJI\nAAQkSQBKAEoAAECUAFJCqRXOVVZQAkgCBApSBBUEAAEIEpJJJAFJISQBKQlISQAKCFJKBAAB\nyXxbf2ZIkwzY0z4KkqJAAQEggCoAkAIJIkAAqAACVJCBAFIApACRQBABSQAQAgfqVVVZKAJI\nEKAAEEAgpJQiQAEAgSQAAAAoACABAAkgIgEAUKVLTEEZIERK2URImiiYmiAklCQECQBKAkhA\nCAkSASVIAAIkSQAkAKQECoJIAAVBECnOqq5YAkAChASShAiJAACAFKRIIAEklKkCkgkgUkAE\ngIhSAAAEWFBOKVVYjhVKkqIKkzIAAIFJIEQAkAISQkBARAACRUAAAEkBKQEggCQCSlAURIfK\nVVZckBSQEJAAEKIACVIJQAABBJQAAACQASAJACSQEiAAkpSWyOYIsURMmIbt0jEts2CSUgQA\nCRCkAUiIEAkJEFIoEApJJQCUACQCKQEoAACAABXmVVaoBIAEQgUkhACkoABACSSkSACSpRIE\nkAkgJIEEgApIAAAHvTyfPnf9zyNG/d5HOdgEAKCSQAQBJAAiBSAgBICCQiAAACQBJAFIAEgC\nUkgiSQfXVVZaUCJRCBAQIRIABIkFIAAAAlJAAEAQCSAEgAQQJKACSSJQAAIQgQBBMoRSAAkI\nQkSRJBIACSEUEBKAUASCUBIAAIEqVJBIAJQASQCQAAEJAFXMUqpYBIgAIUJECEBKICBQClJJ\nIAAUSBJEgApAKlCEAASQAAgCVJCdpFIQGaFAkkACEAAAAQCkgEBBBUASAkAgBACpKCQAAAQC\nSACSAFIEkpIAUgfnLVdYkAEkhAgBQgkAhIkBIAAAgkSBAkAAJKASgAIhSpAElKBIAAAugACC\nTgjkQQSoiSSklBIAJQUAIBJAiBKFIUoAAIEkkSEoAVIASQCQAABSAEnMpVZYBJAAAIJIEIBQ\nEAAkBJUoKBAgSBUpAASAEkAIAAUgIAoCkkoAKRAgEoIgEEAAAAAAAQBKACBUiAASIQAQCABK\nkhAABAgCpACpACQFKSgAlBfWVVZYkAJKUhAAQCUCQSSAkAABAkEJAEAAEpASQASgSJAEgkBI\nACAkgEUJQBCCggqJJKlJSEkASRIAAVJAAJJCQikAAESSkCCQABIAEoCQAAKSAEXOqqqqBSCA\nAISSFAAgEAEQBSJIQBIgSglKQASAEpAKAgJAEBIBJISAEgBAEkQoJIAgQAAAAgIkEECJJAAS\nSAAIEIBIpAAABQkESoBKQCQEkoAAkhPqVVZYkAoJShAAgJSFQlRCUAgBEkCBACAABJAKQAJA\nKEgJQUAkABAJQEkEgAAAgCkJEkUqSCiBQgQggEVAASUgQAECASkqUCARAAkACQCQACpKAIvO\nVVZYAkBAAEVIJAAgEIAQAkKQABAUSQkkkAUgFKASgQKQEBKBUgUgFABAKSUkJABAABAAAgAk\nAJEIJBAVKAgKFShASAIAAgkAUSBJIEgFSAAAkiblVVdaSBESSQAEgkkIggCBSBACSUJAACAA\nBJACQAlABAgEhIAkCFAEgSkKgBABASIJJUCRKEkASgABAkEABKEgQAIJAkgiSCApBAkACQSQ\nAUikABPOVSpYAgQAAEiQEABCIFQkAgSkABASUgkpQAJICQASQUEgICQAAgJAIABAEkJISAiA\nABIEAgBSAJJQSBBEgAAECSCQSAEIAokAAQBKQEABKAIBSQvVKq0pKFAlKQICQKkQCQCASFAA\nlIJAAKAACSgBICSACCQAgoBJUIgShKUEQAgAASASlIAQkEkAJAAFAEEQKSSRIAIBASQgSAAS\nVCkAAiSkAkgUBBPOVVZYAgUAAECQFAAEgEQpAgSQICASkgqSQEKgCQgkkAEqECoCBCJAEABB\nFQKSkApAAClCBBBJAUqASQgEgAgACVCSIAEKASVAAIBSkIAIgAJAkUbVVVa4kCCSSQoCQRKQ\nJREACCAChIVAAAAABQAEoCCAASQAQQEoAQASRJIUABAIBKAJJIAIEUEAFAAJACJQCSCkoAIA\nClRBJAAFIgkAAgkgKSgCAAvOVVZYBIAAAECQAEAEgABJQgkgACAUlKJKUCiQCgQqSAFEFEAB\nUEkAAACBIkSCQASAABIhQAhKgJEgUgAEgAQICRCkgAAQCKiQCIAkoEIFAAKQkibmVVUqUBSU\npQQElQSQCSUAEKCEkoiAAAgAAIICQJCBApQQQAkkAQAkklIICAAQEpASUkCEAiIAIgQCAJUg\nElBCQEQASSJBIgIAoBKABRCQEpACAJPWqq5YBQAAAFEgACAEgABJBAggIAIiSQJSiACQEAQA\nSAAFCSABFFSAAACCQqkEgASEABIBKICQCJFIkgAJBAUAEgEpAAgIAECSCSAkkAQEgASQpAvG\nKqtZIElSkgABKIJQElIAEEEChEgJACgAISoBQlEqACSgIAJIQAAJVSQoEABQJJAhJUAUAAoC\noAAAABEgUSBKQCQAJKEiSRIAAAkAAJAQElAEABPuqqxYCAAAAIlIQigFIACqQhBQAQEAUgKS\nCACUCAAApQEICkgQCRJCAAgCBEkEAASIABKAkkCgCkklKUQJAAgAFIEkAQQAAACpUkBSSAKE\ngASRJUbKVVdZISSJKiABAAEgBJIACIUElCRSAJAARKQAIkkkACQAoAFBIEAICKCQoQABSlAB\nJIASAAQKQCAQAAEgCSCSQCQAlBBKUlIAAAEBAUgQJSAAAAvWqqpYCAggAApSKSAIgQBEgCAg\nAIAAkgSSAAEiAAABJICkBKQICBKBIgQECElQAASQACkApSEAEQpCSSAJIAoACQEkAEIAAABK\nSpQkUgJCAApJKJPmVVZYoKCEkSAAAASiFCUQJQiCUhKSAJAAKSQIpJKkABIAkAAioUAkACJQ\nQgACSSACVIBSAAQkhAAIAAUgBKAkoCQQSQgpJUkAAACAAEgISSAgAgvOSq60CgQQBASSSUAA\ngAAEgEIQAEAAkASpAAEgAQABKQCUBSSACBIBSQgCEJRIAApIABIAkpCAIUkClJAKQASACQEF\nAAKAAABJJKIkkAJCAASKQJXVNSpYQBBCUJAAAAqSEpSQCQBCSQJKApAARKQElCkUAEoAkAAE\nQICUAEBIQAEAlKEBIkASAAAkiAAQAgEgBJAlICQgJKgCUiUAAAgABSgQKlAAEgPOSq5ZEQUI\nAgUpJIAAgAAEgFIQAFAApASJEAEgAABBSQCSAlJREiQAkhICCkBIAABICBKAqSUAAlKEkKQJ\n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\nSUSkEqSQgUkSQlAgAkgggCQAABJAABICQQAIAAIAIiSAAAAAAISAkFPOVS6pJAAAkgFJQlIE\ngKkBIAKQpKQEAkIggABSAKAAAAASlCAAAAAQkEgIAAABAAEEJAIAgAUKQAIKKQCUSAASSQCg\nEFVCSSCSCIApVSqqUiAQBAvqqqpYAApSAEgACACQEgAkAkgCAAJQkAgAEkoAJARSiSSAAISk\nqSRCBQJCkkkkSRQhACiSCSAgCkiAAEoBAUlAAEoKQgAIAARAQBKAAAAAAAJEkSXOVVZakoAA\nkgJKQkgEgEQBIAEgkkgCBIEqQACVAREAIAgkpBAAAAEIgEgQBAAAEEAISQAAQgiEgAAkiQCg\nUAAUqQBAEIRCpJAUEgAkQkISkkgAIAvKVVdYQCiSAEgACACQCRCUBSQSAQBIkCQAElIAlEAE\ngSCAAEJJIlQgEgBEUJJJQQShABElCEIQJJSAICQJBJSAAEkBQhEQAgKBQEkBCAhACACSglPm\nqqxYFAIApAJSQkoFIAQBQAEApCUABIEiAACAABJQKAQpJBACCACFIKUBAAQQCCAEUoQIQBBE\ngCAkiQEAAAAlEgBUCEAESKAgFIBIIpESQpIAEAvOVVdYgEhKASgAEACQBJEoElQSAIAkkAQI\nUpIUkkABAlCAAUEoISIQAgAIElBCIISQACEgCUEAEoEQACQkqVKAQEkAIQkhAASEgCUAgAAA\nAABKRJPWVVRYJQEASAKSBSACQAACAAFASCgABSEiAACAABUkQAQSkBIBBAgEkElCQAIAihAE\nlAgFIBAkgBIElAEAAAAkEgAiBCAISRAQIgBSKJSSUlIAAQvlVVdagCQJAJAAUApICVKQSUgJ\nAQFJUAQASkoJKUAACSBABIAkECBQAQAIBUhKAESQASCQBISAEkAiAJQVJIkAQBSIkISiAEJE\niJIAAgBAAAAklCXOVVZYJAFAUgSUgkACggAEEAIgSEQQAkiSAACgAAlKQgkUkCSBQoUCVFIi\nQAIQkAAEkAgEgCAqQBJApAFAACBJFIAAABAAkggAAACUgJIUlJSAABfWVVZYAJQJAJAACASo\nKBJRQRCJARCEiAIASKQJSSAACCAAAIAECBARAACAFEhAAUlQBKFQKoKAEkAEAEgCSokAAElJ\nSkCSACEkkkoAKgAAAAASUUXNKqqpSACAJASkgpAAAQAACEQAUAIAIpCkAgEAAAkkgQpEpCpQ\nQgSEIkgpAQIKVAAFIAQCACASABSRJQIgAABUkgACABQAqQQBBACSAKVJSUkABBPmVVZYAVIU\ngJAACAEipEpJIQBJAkgkgAABKCRJJSAAJCAQAIABEFAgCACASAggACkgBJAIIgpApUAAAEiE\npEkAAEkoSUBKABCUESQARAAAAAAlIIvWqq5aUACAJASSQSQIAAAACFIAIIIAJKSQAgAAAAlS\nAQSFKBJIBAIJIpQSAkIEiQAJIAVCiIAQAAlJJAAgAQAlSQAAAAkASoAAgAEkgSRKSkpACCbG\nVVVYAkQigJAAJAAgJKSlIgCSihCqgAICkEpKVKAAlBAQAUAAkEggAABASAhQIEUgBJAIABJC\nkiAEASkSlBKAAApJKSBJAApSJKiAFAEAAAAEoRPuVK5ZEBEIKAUpAVKFAAAAAJAAAAQAKRCQ\nBIAAAAkUAUUCRBKUBQKFJJISAoIEiRAJIAIhJIAQAIpBSAAAAIAkUkAAAAkASKAAAAIpASRS\nUlJICAvFVVJYQUBAAlAAJAAQEpKSSgJUklBCAEACUCSpIkBASABIEAAAUAgQAABASCggAAEg\nCUiEACSESgAIAJKkkkkBACSSpSAJAgEkpIgASAAAAAAAQlPuVVa0FBISgAJKAJRCQAAAAJAA\nAAQQiRSgBAAACBIJAiQCBUklAkEEqUkSAQIKSSQKQAAQqQEBAJJCUgAAAABIJIEAAAlAQEgA\nACEkApJJJJKSEArVKq5YQAAAKUgAkgEIBJSUpAlJKSJEIAAJIUkioEAgSIEoUAAACCQQAAQA\nJCCgBAAgBJJCACQUJAAIABJJJJUAgAQUiSAJCQJKSoQCSEAEAgAAQJPOVVZZCUlJAAKQBEAC\nkAAAASAAAAABCSUACAAIChSIACACAlSkggEiSSFKgIgEkUkEkCAAigCAgSSCSUACAABSKlCA\nIAkgQEgAABCQABSBSKSpCg/lVVVYIAAgEkgCUBUoAlJSlAESkpSUIAASoCUgQEACkoSQSAAA\nKCQAAAAAEgCQAACQBIKUIEoSBBAoABJIlJIAAAIkhKAJBQCkpEICUoAoAAAAICHOVVZZClQK\nQAEkAkABIAAAASRAAAAAiklACgAJEQkgACAEAkUpAoEpJJRIgJQFSJIFQBABBACAoQSCVAAQ\nAACSRIAAEApAUEgAAQCQACSCSSokCRfWVVdYQAFABSQASACkCSSSSAASSlJSACAEgFSgBCAJ\nKQlRSBAAICQAgEECCgCQAgAQEkEkEKQkBCAAAKVCSVIAEBSSQkAJAgFJJAoCSQAQAACAoEXN\nVVRYEkASQAikApQBIAEAApUAAAAAkgkgIgAKQIqAAEAAAgSSCAEkKQhIQJICIKlCABQBBAEB\nEIpSiAAAAACUhIAECBJAIKQCAUCgAEkEkkAkBBfmVVdZQBSAFKIBSAEkApRJKAAkpJKSAEAE\niCJAEgAkpQUSSFAAISQAACEBBABIggAISUAoUJQkQgAAIUkUpRIAIAlRIEAEhABIlAQElQQQ\nCAqAkEHWVVZYEgA/sCCSASAMkAAGASIAAAAAkhScAo4RAaZYACBAAgJKiAFOkgQgUSQAKEkB\nAAkCAgCACKSUCABAAECkikAAChJAESQAAJEQAEFFIkAoBRfGqVZYgKS20SQDFASUQTEzJAhJ\nSSSSAEAFKAKEkorJJIIEkJEAAlQUAJCFAACUgQAkJSBICCIJIAAAQkkCSQIAACSJIEEJQACU\nkgBBUggAABECkAvtKq00JAAklEEkQSAGFBhiASECAggAqQlEASIgAKIqACiQIARRIAAFJAAg\nJKgAEEoAgAkCgghCCSUlEABIAFBJIgAgBBBCFJIAAKQQAIIkkkRAAkbGVVZYgElEFmuGOHf1\nh75+y4N+PLnnh44U9Opjz4LJnoObh9zuDu18gJKIgAFSQgBKCSAQEKEIIAAAAJUBKgkECJKE\nkEIIAECSUgBCRCiAAAASSBPuqqqyKQAWuySizKo2zJAjZGW7Ikk2TVEG2bNMTabJUw7Nk3ZF\nMzZs0gQCKkQAiJIQQApEhAQhCSlJSgBIAIBBIAAQIgiBRBIAAEoQEQApSkkAEQvKVVZYABJE\nEbaKcCMlUdCit8ERvmXA2J9UiROn6IJfHyRqijNMHypFABBIABASAABCJKAAEBCEIAAAAJIB\nJAkIASpAgSAUEIBJSQCCQESAAABKQFPWVVa5JIQUlSMCMlJMRpkyJRNVKTDLTrQErZqEDKZK\nEAVIoyIqUGNUJIECRIUAUlIAgASSRQAQhUkkSACkASAiSAAUEApABCgAAFAgEhASUqQACgrn\nVVZIABCGESWmmB3lWpAqrEERIDplZxCViVJNKIJpVJRKgipoGSpEgCQIECAlAQCUEpAIAEpC\nEAABAJIBJASAAUiCSSABUIKVJQKFQAJAAAEkoCfMVVZaSkAkWaSCSkqETLRiJilTdckuRJqE\n2bbmL6LNmIboyqKUmKLsqQFCBAkASEgBAAUikAAAQiSkUgBIASApUgIgAASUAgAAACAgFJAU\nkiQACQvXVVa5AAKPO/dPeBjO500fc+O7nnXjt68vcuczx0/87yedx3cwD3c+gBQIUKASAAJI\nJJAAAqkpCJAAACkAlASAAEgIklAACCpIlIkIgEFAAICSQCXKVVZYUpAQAhIBAkIRIQAEkggQ\nAAEACEAISBAkkIABBIEJEEhpQkgBEoCCAgSAlSACAAJIoAAAAAUkkgBIASASJAKCAIVJQgAC\nAABCJBAJSCQEEgvWVVUoAAJAKECUKAgEBFJQAEFEqqQSrcSgAECAAgkkECQgQQKgCACoQCIQ\niBAqAAkoSkgCBSKkqSAQAKUBSAlAgEgQSgAAEJEoJJIQAIUgAIBQQFPOUq5aSSQVARIBAkFB\nSAAFSRAAAACADyAKUhQpSEABBAEIFEjKQkoCFAhEIkUAkSACAAKQQAgAAAiFJABQAkASJAEE\nAFEkhAQCQCCEkiAKVCkCFAvVKqtYAACAJABIEAQEASUgIAUkkRISQApAAECAARKUEJQigAEg\nCAAQgSEBAABEBAKQJKgBCSCKRSIAARIFKAJAAKQQSQQQIJCQAoIAAAEgAQAIgSXmqqxZJKQi\nASQCRJCQkAAICkAABECAEkASlAgSSAABQgCAJSAJIqSEIARQSSQRISAFAAEkIAggEACkpECA\nApAUlAFFAAEECAIEkBCpSSgEgElAIBfOVVdYEAEIpBBIAAICAkkiQBJKkBIKQBFAAKFAAEpI\nCJIEgAUgAAAQAlABAICACApQSkQAiSCBQJIAAAIIkASAAJQAElQhQSgQBEIABACQFQASgkHW\nVUpZBSBAAQUCkpCgkBAAEgAQAgCgEkQSSAgUpQACIACgJJAJSJJCkAJIUiQkgkAAABFSAAoo\nEgBJJJCiBKAlSACRIACIEAKFIRBKQUkEgEoAKBfKqrZYIAoJJCBICAQCAUJJQElASEoCQAAA\nAkCAAEkoglIEgAEgAggICUgCAACCCBElKUAAJKAAgCUEAAIAkAKAApIECSIAQpAQBAEACAAQ\nIgBJAUvuVU65CQCAAIgBISEoqACAEhAKAgBIFSVJIBIlJAAAEABAJUgKSEKCQAKQkkggogQA\nABIkgASIJIBBSlBIBJAkQACRAAhKEARCQSQiQkkEiJEARBPKVVYoIFISSgEkBAgAAJQkgEIg\nKEkAQAAECUAAAJSiQkkSgAEgAQAIAkgCAAEEAFAkpICAEpAhEBIIAAEAkAEBFFIAUqEAglEI\nFACICABQAAQlEAXWqqq5CABAgKQBAQJEigEAJACEggBKCSRBIBSRKAAIEAAAJEgEkFJCUAEg\nlKRBJIKAACQpAASIRQCCUpRUBShIAQCSAARQIAAiQVICglIEkkEABVfmVVZYIUkSJACUVCgQ\nICQlEKoQECkAIAEIBIAEAkkghKUpACCQAgAICSQCABAUAAgSkoEAJJABACooAAAAUAEBJBIA\niRABCkSAAAAoKAAgAQhJIAXOVVaqCAAAARAAAIEEBICARABEhIBJCVBCQCVBQAAJAAAAUgoF\nSJSCQEFQkgUBKQIAACBJCASQJIACSSJFAkhIAQCkIEJIQBAklEkAApSKSEIACJPVKVZYoRJJ\nJEVJIgiQkBIJAREAIAkAIAIRBIAECVKgFJSlCECQAAAoAQQCAKBIAFCqSQUAIJACgACQAAgQ\nCAECSEoACQgBAkSAAQAikAAAIAgUogvOVq5YBECAAAAACEIEBIBAIEQkCkBSCRCAUCRQgAAJ\nIAAAAhACSkkCVCCIpAgCSAQAEEgkhAVIJKoEkkICQpBAEABKgCKSIAAqSEkIBEkiCkKAAJbq\nqVVZEBIlSSiUoRAiUAkEhQCAoAUAoEIKBIECFSSAAUkkUEJIAAAQAIIgAIJIApBCQQAQEFAB\nAACQCBBIEAEKQSkAJIAAhKSBAgAgkQAIQBAJJAPOVVZYQgAAAgIABASABJBQICQpBKAkCBCA\ngCAgQAAlJAABBBACUpJEiCgJJCACkAIQCEkFBQJIUiAFIgSCRKhAFABQACSkIQAAQKoIAFKC\nEkSAASvmVVZaCKSSKEgSkJAJIAEEiIEAEAiAQoQkJISJAEqAACSUAISoAAgAIIEgAISoBEhB\nIQAgIAgCAIKQAFAIAAIJQEkCkoAABCUqFAAhKQBIQAASlAXNVVaogAAAgAKAAASQCkgAAiBJ\nBQIpCCEBACAAVQApSQEBUiACSSKSCggKUhABIQIUCFKIiIJAkigEkgSRJICACQAgACSSkAAA\ngQkEACQCEpJAAVfmVVZYEpVKApAkSlAEoQJSSAUAIEgAIQAkEoUpABEABBRIAASQAAABICEg\nAEJEAEiBIgACAigKAACQACAEAAoSICSJKQAAASSkBCCQkoBIQAAJJAHOVVZZAAAAqAQBAASA\nAEgAApAkiAJJAEoBABAAIkRJIUACJSAFJJJIBIQEkggRSAAgAJSgoAJAlIgEpQpBUkCAhIAA\nAFJUkEABIIgEACkBFJUgAJfVVVVYKSIkAFCUCSAkigBKqAEQASgAJQCUKkEkiAAAAACQgASQ\nEAAgkBCQACBAISSEkgAEBJAEACJQACAIACQKEApSpQEABQkkAgCQSQAkAAACUgvOVVZaAAiB\nEgQBQAkAIJIAASQFJAKSAFABABAAAlJKVJQEKSACRSSIBIAFJIUICAAQIJIhEAVRJIAFKQSC\nJQEgRSAAACQkkAABUKQFAEkBJKJIAJPqVVdYpKAkQCBIEqASgEBIhAAgAJAAkgJIIkKVKAAA\nAACRAAlIABABUApQEBAhRKpEggCEQlAAAAkgABAogCQBAAJKJICAAFKkAgJQFQAkAAgCSgXO\nqqxYAAkAFQkCAApAKhSCIUkJSASoAIgCCBAAApUkiSQASSACSQSQBIACRIIIAAAAEJAgCAIS\nkkIJJISAKIFISSAAgCQSpQAAiEgCQEoBSQKQAKvKVVdYikAkgCBIUkAJAAAICAAgAlABKiCo\nIEJIkACAIIEpAAEoACAFIClIAAggkkSSQgUJIkhACAggABABAgQBAASkBIBAAAkSIQCIAgCU\nAEgApAPmSqRYIBIBEQkCABKARJJCQlUJIASIAAgChQgCBJApCCQASpQCkgpACQACSSKKABAg\nEJBAAAEUgoEJSkSoQKCkJJABICQUSUBABCQhIJAAlAEqAS7XNK9agkAkBEAQikAlEEAIEAAg\nCSAgokKQECEokAEAQQBJAACQAKAJICJIBAAAJUCJRAECSSQAECQgAAABBAIAEEEkEoFBAAUE\nkICECgJSAJQAJAPMq1RQEBUAgBJEIBIABBSCBIiJIAkKCBAEQgAABJBIEEkASJAEpASACggC\nQUiRABQAASQoAAFEhAEJJJIkUShJBBIBACQAUlBIACQRIKQApAFEgSvnKldcQUBKEkABAkCU\nkIAoUCIAAqAAQEIhCJSkkAUBQiAlAgKQARApICBICAIESQJJJACAqlQQEJRAAECAAAEEIICU\nSQAVAAACSoBAAACSAEgQBAXMVVZYFAgAgBSQSBAABCSBBAClIApIEgiIAAAABSBIEIkASJAE\nkESABIoCgkiAEEAAAUgkAAAFBAASkhQlFIhBCCQAAElAJJUgACkJSkgASgIEoVfXVVZZQCCS\nFUICAEKSUIAEAKQACkACQSABJJJJUAIAggASAARQAQACUAEoKAApQQSSlAEARJFQUFJACACA\nQCIIIoAklQAAgAAEqQAgAAJJASiQBAHKVVZYCQoAgACgkhAAAhJBUgEkgBKgEAkgQAAAAlCk\nIEpAkkEEqEkoBSAAAlIACFAgAJBKEAQABQAUgpAkCQCCACkAAFSUKkSQAEkKSSAASAAEkJfW\nVVaqIECUIhQKAIJJSAgUABQAEkAEiSAFCUqUiAQAhQASACQAAgQBIASSkABJIgCEkgUAglBF\nIAlAEAKBICQoSQBJUgABABAAiQBAAASVACSQAgvOqqxYhBABCIEAqCAQAoJAlIEpABIgIAqQ\nIAAAIkEoIEkAqQFSIJFECUAABSQAAJQAAJBIIAIQCIAJBKAgCQECEEkAAIkgRIVKIEgSVJAg\nSoAiQJPWVVdYEEJIQAgkARJBEBACAAgAUkCChKABCSiSgAQCggASACQAggARIApSUACSSgEq\nUgABCUiCQiUgUAkFICQQQQAKRCAFECAAAQFAAgSCABKICgXmVUpZBQgCEkIBEEAIRISQkoKS\nABAoAASkQAIAJSEgIKSASQCSEJIACSAAAlIEAIgAAJUkQAAgEAAJBIBACgEEEEpAEQqQBIiS\nlCQSgJAQkQACgKvNKrdYEEJ/////////////////////////////////////////////////\n//////////////////////////////////////////////////0QJAPWVUxZQBAgAACQBASA\nAAAAACAASQQAkiAABIBIAAAECAAkACIAAABJAAJJEABAkAEiSAAACJIJAkiAABISQJBBBAAR\nAAAAgAAAAAAAEAEAACREAS7mqVdYAoC/////////////////////////////////////////\n//////////////////////////////////////////////////////////UAlAPNVqpZKCQv\n////////////////////////////////////////////////////////////////////////\n//////////////////////////RIASvWKVZYAICsSSQBIEAEkSSSRABEAAAgAAAAQBIAkRJA\nAAkAEQACSSIAEiAAAEIIAEgAACCIgAAAAAABEQAAAAAAABEAERBEEREiASSRARAiSQ0BSAXO\nqq60kiguAAEkCRJQBAAAEVQRJKoKSSqqEkCSBEAVVUBKhElQAAiSQIkklBCCSgJJJQgiJJKk\nqSSoREkklJVVVQRJBEQRBEQIqAAEUESIAERQApfqKqpYAAFsJJQAIAgEkJSSQAFAAACgAAAA\niAIBVV3VVVdVVVVV3dVVVVVVVdV1VXVVVVdVVVVVVVVVVVVVVVVVVXVVdVXVdVVVVXd1V1VV\nd1YFKAnO1VZZSSQtf/FSikKAAgAAEhAKUkAJJIiIAkim6qqqqqqquqqqqqqqrqqqqq6qqqqq\nquqqqqqqqqqrqqqqqqqqqqqqqqqqqqrqq6qqqqqrqqSAASfKKqtYAAA8QBAAAAAJKBKlQEIg\ngHpAgiIiUAABXVVVVXV1VXdXVXXXdV3XdVVXd1d3XVXdd3VXV3dVXXd11dVVVVV3V11XVVdX\nVVVVVVd1VVwJJAXmqq40lJKtXNkSSSkgQUAAEhCEpIgSIAACBSkmq6u6666u66rq7q66quq6\nrrqqquqq6qqrqq7q6qruq6quurrrru6qqurqu7qq7q7u7uqqruUgAVfXKqpYAEAsbJBAAAAJ\nBAkUgEIRgaJABJJIkAABVV1XXVVVVVVVVVVVV1VVVdXdVVVVV11VVVVVVVVVVVVVVVdddVVV\ndVdV1VV1VXVVVVVddVQEpAHMVVa5SRItRrQdvvXHHPHAPnLHpInNvHHGLXSS6qqqqqrqrq66\nquqq6quq6qqq6q66quq6rqq6uu6q6q7qrqqqqqu7qqqqqqqqqqqqqrqrqq1AAJfnVVZIAABs\nTJCKooqoso4voouogMIuo44qsqhDV3XVVV1V1XVXd1XXVV1XVVVXV3XXVVXVdXdXV1VdXXVV\n1dVVVXVVV1VdXddd3VXXd1XVVdQEkgvMVVa5JJQtSxQqvnGHpvnJGfo6pJM6sqnCKooSqqq6\n66uuqqqqqq6qrqq6rruqqqqq6qqrqqrqqqrrq6quqrrrrq6quurqqrqqq666quqqrqUgAJPW\nqlZYEAC8bbCLoJJs4oJATIsogIIqoopGYpiBdV1VXVVVXVXVVVV1VdVVVdV1XVVVV1dVVdVV\n1VdVVVXVdVdVdVV3VVdV1VXVVXVVVVdddVwFKgXOVa05BSItUNQatoopnsqyIqpqqa6rvqoy\nK3gqrqqrquq6q66667qu6ruq6qqrquq6quq6rq6quuqqqq66rqquq6qqqqquu6quuqqq6qrr\nqqUgAKvlKlaoIAgsQJBMnHXHknnAnXIngHHIqHHHog0DVdXdVVdV1XVVXVVVVVVXVV1dV13X\nXVXVdXVdV1VdXXVVVdV1VV1Vdd1VVVV11VXXV3VVVXQEpAPWqqZaCSKtf/QBISEgJgAQIAkQ\nkgAkYQkgJMhC6q6qq6rquqqrqqqquqrquququqqq6rquqqrqqrrrqqqqqrqqrquurqrqqrqq\nq66qqq6qrqaQAS7mVVZYoAAsEgFIBAgKXFJFCqBCAEqBJEQEgHAFVXVVXXVVVVXdVdd3Vd1V\nVdVV1VVVV1VVVVVV1VdVV1XXdVdVddV1VVdVdddVVXVdXVVddVQBJAPOVVawCSRtAKgCQSJA\nAgCAQAgISQAoEBFAJRUgEgCSgAgSRJIAIiCAiAISRCREASSRAISRJJIIJIAIkJIgiQCSACQC\nQJAqCACSUgCCQkEiApSkASvVVVZaQIE8SgBIBAACSEoSCEEgIEiAQkAKgAAJQIoAEkFAEAAS\niBIEIShAEQAQFAAEFBAEAgEggCSiAAACACQASQBICgCARJQAAIoQEBQASAYAJAXOVVZYEhAv\n////////////////////////////////////////////////////////////////////////\n//////////////////////////RJAVfmVVZaQESv////////////////////////////////\n//////////////////////////////////////////////////////////////////UAlAHW\nqq6oEgAtJJJJZLLJJJJJSSSSSkkkkkkkkslJJJJZJJJLJLLJJJJJJJJLJJZJZLLJJJLJJJJJ\nLJJJLZZZLJJZJJZJJJZJJJJZJJJSSSSSSTRSAJfGKqpYQBKukm2mk002k0kkpptNpSabaSbS\nbSy0m0mm0k00k00kk0m2mkk0kmmmk0000m002m0m00kk0mmk02mm0mmlsmkm0kmm2kk9ptNt\npNYAEgvtVVZaEoA+ddVdXVVVdXXduuq6vdV1V3VdVVWrqrqqruqq7qq7qrqq67uq7qq6qqqr\nrqqrq6rqqrrrqqqrqq6qrqq6rqrqruqqq7v1XVVVXVSSQJPGKqtYQCStXVVV////////////\n////////////////////////////////////////////////////////////////////////\n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\nrXVbdXVduret6re9VWq9d1q711ut1Wvt7qruureuqrXV3VXWru1u9VdVVq3rerW6vd7VVbq6\nqrQCQlPKVVZZAAAu////9//////v++/9/29q/+//9v/+///+/9v3v973/9/7//f+v/f7//72\n//+/993//9//f//9+/vf3////fde399/9r937/dv3dUgEA7WVVdYEiStqqqq3XVVVVVavrqv\nV/f/rvqqv6r7qqrXqv696vf7VfVeqr1X6r1eqq2/VVXqvXdVqvVX1VVXXq719VVVV1339fXV\nf+v2ur3693QEiSPOVVRZAIAv////////////////////////////////////////////////\n//////////////////////////////////////////////////ZIIAvqqVdYUgpsUqYmQSZl\nIiVEAGUkoBASQAFIgIoCESAQEIgABAgASgqARAEACEQQRUEASTIpAKRENhJgEkiJEUIACzFM\niCQEAgJIAACBSgABJAQAhKXOVqxZAJAurSnZXJkpZbK27orVW1dlXdytd1Lq7a7nbqu7u3Xd\nsuldrd27t1XXOTrdrYqmdxW5kqsd22rZVTru6UpS22u61d1W7bq6Vbu6q7VJABflKVdYCgC9\nqqqrq7VdWq6qq7VVVVVVVVdVVV1VVWq6qqqqqqqqrVdVVVVVVVVV1VVVVWq7XWqrVdVqqq1W\nrqqqqquqrVVVXVVVWq6rqqquqqQAEkHOVVRZIJItVd1V/+/v7////9////v//7///v+//7//\n//////3f+7/////+///////v/7/+/7/9/v/d//v7////f3//9///////9/////9///0kgBfV\nVVdYAAAs6qqqqvr6+qqqqvVVVV6qq+qqq6rqq+qqqr1VVVd1Xuqqqqqvqrqqq6q6q+6rq/qv\nV6r3VV6vqqqr1/VdXVVVVVVVXVVVVVXVVVQQJUvOVVZZSkquljJloAkElIEkkCklKUkSSECS\nSIkkiCQCRIEkkkkkhIikpJJEkQSQEEkkkEEEgESEpCRJCESQQkkkSIiCRJEiQSSkgkEgkkpB\nJIUEABPmVVZYACAuqUqfrqQUBW1VJJKpJSFSkRaUpNUSpJXaVIqlJJJKkRKVJVSQSuqtzklE\nkRV0bRUxIMsRZpJSWpKTIiUqklJKnKqqmk0rUpSdVVwglIXWqq1ZJIRuldXagJTSsCAIi0QQ\n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\nqBRUlEohKoWEttIsCGQSBBPJUqtZAqRs+pdVhKgUQA7CFmkYmQGSSQpJSnLEoJElFNCITEko\nEFKUoZJkgLTCCkkioVlWidJNUVSQKJJIEkaCQ2QBJZKEQsTNQFgxAEGBlY0AgQbkrVXYCAEu\nyqrtmQLFE7AJYIJCglokqSEkAoAVIxSI0Q1VEQQjJSISjCQUmkIpxJSYLQFIEgUxIlEmioSK\n1JBqSAnaQkQpKBAAVpFNNTRaIkRKFEvSqqq1QRAsduqzoiwpUEKwi1kqSkCSJNUlbJtRGEkr\nCVIhYNKsikrSsaNJQkqkMkUmwGkBqTAEjAUpQklIIRERKaQhGlLCC1O1EURAgIUEKiQAgBXJ\nVVXYBESvyrrLqZNCFkpOKAJBKkspSCiRECCQQoCQIiGCFglBaCQEBBgDGJSSARBBJIJ2BEti\nM2RANISTTSlEogGUoJIUpAxCRCiabSlpSJUkIkPr7vsyUAAwIQSQCAAogCQBAUkQgSBEEgAE\nBJAlSlQEqIgoiIAQBQEhEgJQQAARJEQQFCCIoQgQgAFJASAEAkRJAKgkBAkkgIAIEQgiAEAE\nAkwBCBbKu6/YAJK/////////////////////////////////////////////////////////\n//////////////////////////////////////////xUAJPVSqi6qkhFKJEVRVUEqolSVCJK\nJEoikqqiokpAIAKgAiICRFUlSKiSSVEKKqqJERKKgkoAEkVJKqgiVEqkpEkSVAUSpUREVKqi\niJKEqiqlVCUCqkvKqqqRASUoQkSgKCCpBFIIgpSQkoiUREQUCREqlVQVVJSpKSCSEQJJIgpR\nQQBSSkhQVJFVSSgiQAKUgpEIiSRJIqhJCCiSgQAUJSQpAUEIIpCpESPlVVVVfVVXWrVfVq6q\n9VXWuVVWqrarWrXV6tVVVVXVVVVVVV1V1vqqrdVVXX6qqqtWqq1VVVatX/qqtVVraqtVWqtV\na6tVev9V1VWq+rrrqq6q1VvP////6//+/9/1+/3/r/977+////v9999vv7////9///////f/\ne6//+3//++v/9/3///v///v7+q/3/v//v/3/9////v7/r9X/e/7/r++/f/3/f+/aqqqqvqqr\nq3Verq9V+qve+vqqqq6vbff662qqqq3VVVVVVV1V3vVVXtVVXr1VfV9VVV6tVV6+r/V9V6qq\n6q9VXVVVV6+q+v6r3q+q9XXV1VdX1Xr///////////////////////////////3/////////\n///////////////////////////////////////////////////////////////////////A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJJJJVIEkkJIkhJJASASQAAQEkkkiQBAIC\nESSSSUiJSSSqSSJJAQJJIJJJIEEkgSASSSBJKSCAkASASBKSRJAkkSSSSEAkggEkACAkhIIJ\nEkiQBITAAAQACgABACAIAAVAkAFUkEgIAAIFUSiQhAgEAAIgAgAAAggAUFAACAAQChQAJAlA\ngAoAAAgkBJAlAoAEEAUABAggAhIAIJABVQkAICigQAIEoCHSqlCIoJKUJIEiUlAEQqQAAiCg\npSiQAAAEIEJQlSgJKEpEqCElCQlSoSlBIEBKgCASEqAkpSKAkASASApQglBKUCCEqEBKigJU\nAEQShIAJBKgQEojAAAAiBAQBACgAAAIhEACJSAoEAAAESkpBCRAAIAEAAAAQAQQAAAAACAAI\nBBIAJQoAQASAAAAoBSAoAkAAIAIABQQAARSAAJAAiBEgICSASAFEgALkhJKAEFBIEoJJJUiE\nARIgAUAQlKSRAAAIQACSgSRSkqlCRBBUpKSKRKUiUEApAEBJCRASkkkCUASCSCSSiUhJIJEq\nRAASJAEiIUAJAoAJAkQABJDB6wAkmgICQAEQAAAglEAKUBEEAAAASUkiEkoAHAAAAAAAEUIA\nAAAgAAAABQkASBEAIEUAABBAAkAAAgAAAAEACAAAEJIAgUgIBAkAUCUgQBCSUATLOSSACIiR\najVCUiSCAAkgBIRRJIlJAAEAIQBKRkkkkiJKQAhEkpKAkkklICBJAkQSgQBKSUEJSBJUqElJ\nJSQJQiSRQgCkJASgkCBJAQACEkIIAlDGDUAqSCAEAJEAAIAgkkAEgCAAACAAUkmSqFEABAIA\nIIgAEgIQAAAqAAAICIoASAEgKEgAAAhAAkAAAQAAAAFAEIEECJABAJAEBIkAJElIgAhCiATU\nqXPD27c82z9+vj7lw494euS69/++uDvOecQkvPNzwgEpQFCBKSkASpShIgBJASQJAQEklSIS\nSAKSRCUqVJQSQBQQIAKUEgCQUAAkgAAAJSEAISDGBbImSRs23ZE2aFuyNLJm0RBJE1Eiaks5\nJiAAbN2yKEgAFAQkAABCAAAAAEgASAEARCQAIACAAlAAEIAAAAAEFICEhKQBAJIFBJIIKSkk\nAABSAAnUERPsTzGiSrWiVRGb5xwMrfl18hG/QXEDY+lJRqkb4QEkgKEBJSUISSSKSQClAlRS\nEBBSgEoJSAElQgSRIlFQgCIQEABIKgAQAAAggIAQpJUAlKDFBVZFGhUqSJEq5BUyiw11yYAx\nlq4gaDFNKkACZImSkFAAIghIAAAhAAAgEFIAQAAAhQSAFQBAApQACFAECAQAJAiEhSQCAKlC\nUqkEEhJEAAAkAAjWKRMUCVEjbNUiOTESIaZMdRKdAgqpQFsVowkoRM0SAQSkiAABJKSEElKB\nQQASCkSSICASQEkFKABSIQCRIJASgKAgIABIpAAIAACQQEAASUiBEkLHU1MWq5t2SJGqJBVX\nFJJkQYhJqoQxSklZKxSRbNlbtAAAAqUgAAAhIAAkCCVAgBAACQkACABQASIAgEoACAUAJAQJ\nCSkAARIiSRIFEBSSAAIgQBDh47nj3Pcc/e/3fHu59zy7evlw9xRe4HTO2eaUO3O55lKVSAAK\nSkkICSSAIIASEkJKQCAlIkkARAiSBQBJISAlARCgAAAkiECAAEAQBUAAlSgFCUTAEBIoIBQk\nBAQCQwACBIgQpIBKCEUJJIEQAFCBJBQECAAAASkggBBCQAApCigAgAgAEgoAAABKEIAAoCQA\nCEkASEQKUkoAIhISpBJCQApIAAJAIAHFQkCChJCBUJEobgqoIAFCzAkAoQAgABRFJQQUAEFR\nIkkiJAAEEkEAAlSAIAKSJKEpQKAkpJUAQhJKCIEqoQApAQBAAQBKgIBAAkAIEiECSJAUgkjQ\nEBAQIDggBAACeKACSUgIdIBIBFCKUkAAAAEhSQAAAAAIgSSBAAhUkIASBIAACAAAEgSAAQAk\nCIAAAiAABCSAUFISkEkAJCQUSBSCQIBQAgSAIALBAUJBCSUFIJJIAgIQAAIgkCkBEAIAAQSS\nUlQAAAokklSgJAIUJKEAAgJAkCpUoIqSQBAUlEiBICSoqASiEIACAgBAAgBJAABBAIBIAhIE\nqJAEhUjQSBAQQgBACAACIEiEkkiEBIBIRRCSkEAAAAEklKCAAAAJASCAgAglSFASBIAABCAA\nEkUAAAIgCQECApAIghJQiJQSSJIAUpUASCQCUACAAAVAEADFBIFCEEkJIlSoiQAQAAAQkAkB\nAEIAAgkpJJAAAAIJKpJAJAQiCkCAAQFAkAJEkIRKQABJIkgEoBQQEAJACAgCIAFAAABJAAAV\nAoBIAUoSRJAKQBL/////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n//////////////////////8=\n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps\nContent-type: text/plain\nContent-Transfer-Encoding: quoted-printable\n\n\n\n\n--Alternative_Boundary_MdP9G7i0M2YtIbPlllMdP9G7i0M2YtEbPlps--\n\n--Interpart_Boundary_MdP9G7i0M2YtQbPlt5MdP9G7i0M2YtMbPlxY--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.48.msg",
    "content": "X-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Fri, 11 Sep 1992 13:34:20 -0400 (EDT)\nMessage-ID: <8egBWQW0M2YtE1Y7Ea@thumper.bellcore.com>\nDate: Fri, 11 Sep 1992 13:34:20 -0400 (EDT)\nFrom: Nathaniel Borenstein <nsb>\nX-Andrew-Message-Size: 948+7\nMIME-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart.Boundary.EegBWL:0M2YtE1Y78F\"\nTo: Marshall Rose <mrose@dbc.mtview.ca.us>\nSubject: Re: I'd like your opinion\nIn-Reply-To: <7821.715397074@dbc.mtview.ca.us>\nReferences: <7821.715397074@dbc.mtview.ca.us>\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Please read the first section, which is plain text, and ignore the rest.\n\n--Interpart.Boundary.EegBWL:0M2YtE1Y78F\nContent-type: text/plain; charset=US-ASCII\n\nMarshall -- sorry it took so long.  Since I assume you've already seen\nwhat your MIME Simple Times looks like using the richtext program, I\nthought I'd check it out using the MIME implementation in the latest\nAndrew.  Aside from the fact that it re-tickled a bug I'm aware of in\nthe support for multipart/digest (which I'm planning to fix, don't\nworry) it looked really nice.  I'm enclosing some screen dumps to show\nyou what it looked like, in parts, using Andrew.   There were a few\nplaces where I think some <nl> tokens should have been added, but\nbasically it looked great.  (In particular, if you have two consecutive\nrichtext parts, I think you assumed there was a linebreak between them,\nbut there isn't -- you need to be explicit about it.  That's how Andrew\nhandles in-line pictures, for example.  You'll see what I mean in the\nfirst of the enclosed snapshots.)  \n\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\nAnyway, it looks very nice for the most part!  -- Nathaniel\n\n--Interpart.Boundary.EegBWL:0M2YtE1Y78F\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative.Boundary.EegBWL:0M2Yt01Y75h\"\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\nMarshall -- sorry it took so long.  Since I assume you've already seen what yo=\nur MIME Simple Times looks like using the richtext program, I thought I'd chec=\nk it out using the MIME implementation in the latest Andrew.  Aside from the f=\nact that it re-tickled a bug I'm aware of in the support for multipart/digest =\n(which I'm planning to fix, don't worry) it looked really nice.  I'm enclosing=\n some screen dumps to show you what it looked like, in parts, using Andrew.   =\nThere were a few places where I think some <lt>nl> tokens should have been add=\ned, but basically it looked great.  (In particular, if you have two consecutiv=\ne richtext parts, I think you assumed there was a linebreak between them, but =\nthere isn't -- you need to be explicit about it.  That's how Andrew handles in=\n-line pictures, for example.  You'll see what I mean in the first of the enclo=\nsed snapshots.)  <nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 1\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoik6ozp6NjXaamiJozG6o0I6Nj36kxo6pEhKNkUqoTmapE5aNUsKokH6pFSaavv5\noRnapFW6pUUDocKipVwapjgToMMCpmJ6pjNDmZyGpmxKXY9pmG0apzWjppdCoHJ6p9Tz\npouJp3xaMgH3pVPap4IKMX8KLGM5qIg6MW6plYeaqI7qMIsKl486qfsSqY1KqZha/jCW\naqaZ2qlFJJCKd6meOqpOA6rDJ6oviETdGG9/iEw3mE/sWDraR6rJtamBqnFCmKqA541R\nx4AP8092SKvCZat2ekKCV4fzF4/IKn/e1jBI907C2pOmen+oGoOVN3KjyE9xeIiFWEwj\nt60U94kmN26PF60q6JmQmChX6ZRpeau9WoXMClBmRIfgGq/zN324Z33bhHVnl3vmWoxT\nsyjrmpWSunOtF3kVOIjIB1PfB4VsSHOGd4dK96/1N61Y2STtWqzvuqvBOIoLa4TuWHOm\nx1CdNLHP+nsUC1tneaMsWa3G90qjZ1G7Goh5CHUKG7P8FEsnC7HKmrKJOa1e6LK6/spx\n0/R+NfuxwDp5I/tCsiexzTSxPruUQIuNQguGnad5U7eKb/iKA0WKeGSCtNeL4qqzuli0\nUWuWU4uQVbs0sbptBdOzZ+tUxMqg3Ai33TOrcSu16GqOocqpzbiqNENTdpu3IDW3hDuq\nhnu4nZq4ioupdJklftu4cvq4VZKTayu5d+qTElqwmMulmqugnNu5Vfq5GRq6ovukpOso\nQHm5p4umqetblhu5rRumr8soqyu7s7ultWtcppu7Qrq7Ltq7vqujwGujrDu8o1uUWBq8\nx4u8qKu8Riq8zquixRtt0ju9Ilq91HK92Luh2nu77tq9Tvq9sRu+4ouk5Mu959ug/unb\nvOs7o+2Lu++7ovFrvvMLv9C7ue57vyNavxrLv/i7t0bZK+oLwI3JlEe5vwZcoYy7wEna\nwA48pBAcwTs6wRQcwAE7kBcswWnrkAq8wf5pwSDcvx1MkR88wgdcwhp5wiiMmCLcwgys\nwhlLtzAcmS9cw+wrwybJwjjclzfcw//5w0AsmUI8xCm8t/1oxDGMxBqsxA5axE48mFDs\nUgRVxXrEeVhsxel4xVoMqyT7xXcHxlprTGOcxVx8xlucxl4cxmxcxl0sxmQcx2asxnA8\nx2vsxmh8x3L8xm28x3lcx3yMx3Tcx3YMyH9MyIEMuPYyxVHswzrcsvLbyHHJyJIs/peU\nXMlsecmYXJaavMld2cmeTJWgHMpKOcqkPJSmfMo8mcqqXJOs3Mov+cqwnJKyPMsjWcu2\n3JG4nMsXucu8HJG+PKN6PMePGsy/rJDGfMwEmczK/I/M3Mz6+MzQjI/SPM3VVs3WPG3Y\nnM0M+chvycPcvJDbHM7CNs7kLJHezKiRXFPP83GV6HH8RokONz5XO44iE8/jmrOW90fx\npsiH17asOrjIQ8VuS4SRxsR9a79lo4r+aqzHmok396wQy3PNulGdM9EF531vt6/z3KoY\nlbTBatDOutGj46yyitF469ApzTfmbDMMXdEhDdMWVXik568yKNHVeDkoLdL7Wnc8/hux\nKAtFrveC8jjS61TS8HjSSa09Rc3S6VzATSPU4sdADqg9NL2EAIg+ebSGdfdPY7eGZrvH\n8JaBSyh+M+3VQG2yOk1uEqTV6BduhjfVryizJtt6g5R9WN21eESFY/u0WJvXrUhP8IrX\nMk2jTw3OWgNJOdSs+6RGqSdUvrrY+YrT9uTXle3XL410O8uBMwjS+zbUvLd9Hy1F69S0\nQIh+qA3ZlN3QCxi24+eDf7jYqpTaNi13Hz3asA2sv/fadNc3LY0zQo16KPjQF63Vlm13\nxw3aixSCyhex9srPzg2BDa3ZFD2FrufVC3eEso3Ztz3U1K3ca03XyA3ewj3ejm3e/hi9\n2eMq2c1E1TbotKxt2Ah9quvcUaUd3zpb3rZ32c793f3t00qt2jKL3d2t1jYt3vgd3ZBd\n2Wit0gd+3//t3bid1uEd4Mmt4A/O3z2E3hn+PZTt3zb3fvBd2Jk239Ra39MI4cXki0yN\n4eS92Vet1qvN1ce63JaN0iDe008b1D/t4Ixt4RF+2SdLdxQU3P595AXutBRU4OMNtf/2\n4UkujLM94gKdNL+9jCqO0+TX4kOe2xeOskcdd1Tu3Ve90Qte1Yytgxun3iTubVtd5pht\nfqLo3rV9h3Ie5JoN59Fd47g93DpeSniee7t94QkeUoeN4luDi66o3WW31/lc1ovO/oq1\nVK5jK9FjJ64ht3VsrW+aXq5Fe+lPJK/dxnZkWE9HR9L9d4SmqIlgfX19SG66SHZpSOmn\n1+qaXteHaIgkeugKrVxVrlqD7uQxlegWfdAZnND/u1xnDmlUJ+wQl+I8vTdX3lYAHVww\naFiUiDjTfs6otu3cbmre/u0eyevJLu4WGe7mfmnozlSyeK8mbYZw/bKu+usdtXoed9Qk\n40ltfesAe1xJDOz47uyMB88CD61v+4DSs+Ix3ebF7uiJyH7V/rMmHrSIzlY+p9S/aqyr\nrYwiTe/QXuEYb9wRc+89/XIb/1nrLj+W/uYQT9b2du8duIMlO9W8R+cqf4Vg7eHN/lfr\nTOh/xZ3fYM7wj5XyTGXnPpjnmnfjO93dME6vd27dNQg7ME7oe470U6/h4k3bjRhaRA8/\nf/fdSF7edL3Wzhj2/A3dCq9BV5/jls7kcV7wHD2MS4/y5E7Dh7XgYO/2oA3yFn71gf7j\nCz89fi/gs27gt2f0CW7zf16xE0+1FU/tvS3keo/1Id/3Sn75e5/4GzT4VQ/hcc3m2135\nNl7obVn3uaXYqvj0Ew74HZ6LTZ76gB50y3o4qn3ne+7maO7mct7kUPt9gK6ypo9bsQjY\nrt6KmKjqPHuCf61vNO61Xo/6MIitnf55rn/rzqh8vn/FjH/s9N3rsebxn3XyHC/0/nBv\nk8GPj+B/WYRffBEN7uevzBHP79r8/unukl1f/ypJ//h/y/q//7rc/wgQutz+MMpJq704\n6827/2AojmRpnmiqrsFxEIIAAC4sEHiu70Rts8CgcEgsGo/IpHLJNNZis+eNR8X5Ys2s\ndsvter/gsDgljb5i1epVMG673/C4fE7flmnnaXq3rvv/gIGCg4RNd1J7PH2FjI2Oj5CR\ndYd5iXwvP5Kam5ydnp8dlDaWOosZA6ipAwqqqaytqwGwsbOvrbaquK6ysLqovrS9vLfD\nucW7tce/ysHEyc/C0M7R1NPWxtLY1drXyNve3cvZ4Nzl5Ofi3+nhzebr7u3o8e/y/sD2\nzPfj9PuxGKJopKxgwgKqoMGDCBNOymNmVMAeA9konEixosWLKv7pIWUKo8ePIEN61PgQ\nIg6CIlOqXMnSEcmHHVvKnEmzJpeXAWPa3Mmzp08SODlG/Em0qNGjEIJa0om0qdOnKZUm\nYgq1qtWrBaXuoYq1q9evg7Sm4Qq2rNmzYcSqGYq2rdu3WdRSIQu3rt27IuQqYou3r9+/\nGvReOikRsOHDiBUILsU3sePHcBfnoAu5suWnkgUSvuxV37x+nK9mNpkptOnTRUdTRs26\nNUjVjV3Lnv0R9mbauHNTtF1at+/fnXijBE68eCPhhY0rX+4HOfPn0OE4j069epfp/taz\na0eCfbv37yu6n6q1C0OuYB3KT5iFvgToLMuArIrfgD6vEPbFcXg/Xj5/8/81EeAG9r0y\n3nysEDjgAuWpd0KBQDGEh0M5xQbgfen0Z+B96S3IwC8gtkeCh0iQOAItEfBnYgUqJnhB\nPyum+MGK75kI4xY34ifLhwxeyGGM9bEI2oJASlBkBuKZt6GIFtB3JAQQPtDek39Q6cGA\nLeoYpAZWOtDljixuuV6PWnwppZdkNsnjlWHmCKUIZkqQJJc1zjckhA66oueUITJ4J5F/\nDvNjoLh8CGOB3nBYX4ZOMnrjnh6CI+ik+tnSY3yH1jnokora6Sem+3xqIJ4NrkPp/juW\n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\njiN0LEGZ0Qld+oWZtXeR1kWfaVkscZQ9lYJjocVAdnY23niYPwYUfGOhvQBpEUqLPjOU\nfBmZBSQP6DSgStmMERV2gFGgaulGiYmgvEJWBuqYVeluMPabz/CE/ChF9oecaJd/mXZ5\nWXUtTTGS+4hVbelqmHZ7pjYJoSZ2qjZWQGRsy6VEighwPepW1aWjpLZr9bcXMMdU/s4i\ndVQlpQ7Jo42xa1BVM4chkqVmkOboem6XUz26nNQwcu5lgiZXTs0XiOU0i0H4h8CxiHz6\nbt/JhIBaG246qEiypih3c476qJBqE4eqqJRKTZNaqZi6TJeaqZwqTJvaqaCaS58aqqQK\nSzmYqGq6R/62f4XHgAaopBPZb3taqhdnikP3kQZFcK3miVNXT3YiqKhDqxRoq75ocDLq\nq4G6bog6q8LKcMQqiYEXElhEart5lly6kSEJlS8JnPIILvVHkII3pBwJrM2acc9qnacF\ndtQZp/CYko0le0Kprt/UjFBJeAk6P5vGrOXaTOf6pV21mPIJme2qov1JsAk6r6ZF/p3E\nwp/TqVj7qnvnypZ1aZ+xYpbwuK4ZWZ2FebEFKprTmiuWJmsPG3oRy6sdy1jVaa0Yq7EY\nu6vWF7IE066/5rH6OrIP2JWHlKfFynn/KpX1mrLrY7DKSaBIKVQKK6cn2aGdhqs2q4c4\nm0lfGY6LYWvZaZn2WKVfFFb3h6VTqmlShFVfJ4q1RqRVJaZNa4dPy0o6CyHNp6vGCR81\ne7bDNKp+5EfMOI1kQq5yG3GnCql++7eAG7iCO7iEW7iGe7iIy7R7W6tpa0vqt7iQO3eN\n+0trG7mW+3CTi0xRe7mciyR027mgOx+fG7qkC32ZG02PW7qqCyKju7que0mnu08v/vi6\ntGshrVu7uDtHzKlN6Te7ufu7Axi7Jwa8xLt7wru5xZu8M3i8lau8zsteu0tyeJq6z1u9\n5XG71pu9N8q81Ku93kti0XunSdi831u+yIG95pu+tMS9vqu+7ltCddqCWvec71u/L8O+\n9Gu/+osf+Lu//jsi/fu/AtyDATzABrwZ6HvAxJvACvy7DNzAuPvAEEy7EjzBrlvBFqy6\nGJzBpLvBHAy6HvzBnBvCImy5JFzCkHvCKLy3KrzCZ9vCLmyzMBzDDzvDNFyuNnzDwmqK\nuVk7ZvtI5+RycfvDx3hgKHorbwuaoDHE2TuEf6I6NhaK50kauMiNrpiwETYvKVFn/q+o\n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\nlV75lT+ZAAA7\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 2\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoimaNPE4oxtao62GljgaoxLzcfbmeOAogDzqlz76kxoKMgfXiLm3f0W6o0nKk0sq\noTn6jFcHpUT6dlVKoVcKokI6ccNYd4fof1SIPmf3ieCHT1/XjV+alGGaoVlKpj04iBd4\np2JUguzHenF6lxAqLHUqpXdqeHl4hbIUcj5Xe38qlwE6LIMahUKoiXpYRYCnhxuX/ouN\n6qiPaZjItIAUqKfJ03qJWoaZinVUuqkRSZmcVnxPWHkFmKgcZ02niqSqKqedupgFM3ar\nKEFxaIi4aIqtKEFsyo63ypGseikEeqzMujMBJ6hj2qzSejPPCixjOa3YSl0CqXjXmq3e\nWjNuqZXd+q3kyl2eCYncGqnluq4TE65wya7wmjDuOq7xWq8SM6/qaq/6+jfnao7pGq37\nGrAFg68AK7AGCzAEu6wHu7D98pVXmZYFy7ASG5D9uihXCZYQq7ATu7H08pU3ypL0yrEi\nWy9n+bFvGbIjK7IJy6ApK7Ar27Iwu48VO5Axm7IvW7Mje7M4y7E6u7MT27M+y7BA/hu0\nBzu0ROuy2zp8KHu0+mq0YAinGkeDD2OsSmdRLBeLJtd5W8dPEDgxqCqPn+qNL7iK+lZ2\nUbqMjbdz3jaJ5BZTi9RI22YyTquMxvpPatowSAePnUN6zcdCtQh9NfhtJZe2Z6s9hbtO\nd6h9gwe4NNe4SsW3eeu4faS2OfO2l9Nxdlgyc/tOkkuEUDS1nTszn5u4kStUd5u4vAO2\nYCuD60RTeft725SqcUuEaztvhle7OEO4DiO7C7O5hhtLR6e19pSGwCp9lneLIzeKJ+ir\nqZe83haBOVRy0ttMSRd4wet5uKi1lThI/Ia8FEeLauq8VRu5t+u4sshPvTh2DOi3/uLX\nvpqXvokITSR4u+IbrOFGiltLbteXhC80decrevC2g1zrML57QqWEUR2oiq07qj24ps1k\nfrkHhH+IdK+6tvvmema6fQg8uuhHwQpcvglMvetrRQ4oeBZcwuXri+RbuqWDwag7wT4I\nhHZnwi/8wdaXpj74b2KHuh8sexqcwq27wTGsiqNnwjL8wBiMe7iLMAU8Pu0bvapktyzs\nwivMw/CHwL6IxUCcw7Q0ha73T+5Id6gHxVR8uNE7w1v8uq/UwiJ8pPoWxJL7gClstzSM\nxndnvjwswsO7xY1oQA8Mg/Jrx+6ox3YcpVUMxxQcxW3Mux2btPe3tJwLvGxceS6s/scg\n/MKEbMZaLH97/LpCVUykm8VgvIWJjLhlXLvuV8p7/Lw1/MmTrMpWa8pTPL4MdMpZ18ab\njMlJvMmlTL4/jMVo3MUK5MOsG8w2rMuWu8pg7MpzzMhNvLeWbMhaPLqSbMvUDMuITMuq\nXMhVO8fVDMQex83dfMrJLM7BnMmXDMerHMvdDLsn3MfZ983mLM2GHM/GbMvR7M2FK36E\nzEziloG9/MqmnM7KPM2NS7UUOzX9uFGXynsZ3MnqfMPRrMaLC6rjm29CvM6MaoOYTEEc\nqIODJ8gPLdJnrM7ELNCczMqv7H2WS8fgnHkjDNJNaMn3XNAwfdFILL09fM4hHcuw/kvE\ndWe+vZfDdtfDBj0/juyFkOzE5Je96Lu9wcir8ax8xoS1rthtzyPVdGe/f4x699u24ZuG\nzDtP+Os/ynfVx0uGqXyEat29xNtwcJ2/OJ2/Zq2FT4y+KO2KbqqL9fa999urX23WxTpN\nec12A/W+AMW1a0h1WT3VDfPMQ+TOV8PImJXM8iPZoStEkC1EjMg0lH1Zls1UcvzZc7PZ\nnI3Qoova3+i+2gidpC03ps203hrbso2ttF3b0nrbuM2sur3bt9rbXstRXVrVXSfXgTu2\nxbc0jPzae8i2p6i+ij3Itos8mAbcv6u4mbvEl1vRYqzJ1w3NfKvdEHe42T3QEXPN/san\ne+3scCmNtyfD3G2Z1Ni41NNNu+Dtuh3dzuBd3vutjOJ9bruaMuj9ghfNwoWny1gD31Up\n3whJ3yCXvPBHquEL0HUtvjUc0R6NfW7d1V99ekVMgvYrh30KhaH3hkfYtW/IvnEtimzq\n4So+fyOtw0Hd0W3Ne4cY3cIoqmDXSS8+4f9tlgzukA7+4BYNq0V+yBL9zv5M015U0hZs\n1BN8zRD8vEBd4ok45R2Mzke9fR1sumQEqlKMwr58wevcvNVMwuQ8qkncwJDk5LRHqh58\nusKl29tMzzbN0xTtxo+X39t95zP3TEjuwWSO03mex+Ss5Yx75rx8SHU+138Et148/rzL\njIJjvMxZjM8EXdOCTsbKReeL/s5+Pr0Xrt21PNdL3OicmNNpbOjsjMuunumu/nKI+NIg\nTMep/OmjfoOhDMyxa4dj/n6vPuCNHurj3OlBTpFD7tOvzuozXM65PMn6fdD3vezL7uS5\n3t+wbs3BXsleftO/58nOnu3X3ufe/NPSvre/vsbivu36jM0/TpQz+68aO+1JLua5XOq1\njscr3bccnOXqvtPCaMUHPdTWrulYXsmojM81rcj5jub5HrsgzdFMXt559O0fPdFCXPCc\nXPHFroLxrrT5Wr1mu+GGLccoftgUp0dwLdll+3DCStf+29axqL1vbuK7aOL/57/E/qvy\nei3yNc7Wxfu5XG2oRHyKrc7XV43Wssi9utiLY53Z9VeUWxLyKKPgAc5Vn43Zvr0vdGkl\nOZns5vPuo4P1Yj+5dbj1JCv1TPquIqPaueX2o4j266X2Esr2ct+oPln3YH/3v033Cmr3\n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\nzMRczKWcAAA7\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 3\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoik6ozp6NjXaamiJozEKhu4obvG4o0baLz36kxpaMGVnSEV6pFCKL0kqoTkadY3I\nc1GapQ0zpSAapFbafU5oTOMXh25Xivx0plp6mFyaoVUKdR24g1L4igxoprJXh2lalhAq\nLG1KpP9HgXkIePokS61np3falQE6LHtKjAwlfoM4iHeHfmdYqH5JmZxWfMDHqHoY/qfq\n932SOpiUeikECnVn+kwgqKlxakA51Kl3+amUxaAAFW/AKKaxSnvXt4qfeKuqKpesWimh\nmqu+qjIBp6de+qvE2jPlWGuJWqzKCjJuqZVjuazQajLNCpfRWq0JM63Paq3a2jHYmqzb\n+q1/45mQqHjZCq7mujDdOqznuq4Bk669yq7w6jQCSa7eGq/2Wi/u6qr3Gq9feZVpqa77\nGrD9ipX/+q4Be69feaMsWa4H27D0cpYK+5YM67AHm68Ue7H7KK7mSK8Ai7HnarEe27Ag\nG7ICO6/DN7Eky64jm7L2urIsC68u+7LrGrMya640W7PferNg+DDsSH8i07PftnNX/oql\njcRy7oeL4TaqQ+o/DtN4TPqkQXtvRTtvnfOCsWhynbd1StuNWKOz7xQxTvu15rNOYrtR\nzVS12pN7Sudt++dzscSpf9h88Ki2FsWkvGOHdNtx6wS1FER6ckt3NQe4QLszXpu2POu3\nhksyUIS41Zi3bFu3j3u2L7i2QvW2hme5ufd7hzsxUFs6ePuze6tUZFt421S5lXu5PGqy\n94eyyviqS8hC40Z4syh+DZe1azhNY1e6uWuKp6h5J3h6o1d3Iwe8wsi0tDt/wlu6l6u5\nDkduEtSHbxi9DsiGomi7qXe8DFhPlThIUwepuOo8sNu9vIeL1xu+SHel5ld36nuH/mhT\nuCekSuj3hJJ7e+zrgxhld/N7v8lDv5R7v673v/VrT80UvHOaqk2IdQY8iv5ruWLni1db\nv/z7h0J1vovrhvE7v3SIdLgneKgLhIu4gKk6wPYLSdAbghxYpw+8wC/XwPrbvqrrhaxb\ntjQHwQsswAB8h7DnbbSbwBBItyFseAmIw5CrwZKrwzWMv5kLwUMKuybsev+0xIT3T/l7\nxDNswx2swjmswVmstjxMxHnbxVVMwcrXv5jrxefLwfM3hU6su4NLuC+MjTGcuFxMxVd8\nw0UcwOvnuWecuRMcuqA4gACMxEYcyEVcwXVsuKS7xpibtovkuTf8xGwryEgsxahr/sU0\nnHVTbMVBN8lhfMlDrLw+KMl9jLbL64uW3LlurLH9aLZkm8mcbMeVjMdkZFF7vMhSXMto\nPHsZKMl+7MWxXMmUPMNizLzCTMqWPMePrLyNDMxTvMyH7Mm+/MqDrMl3zMyR+8xZS83P\nbMvrW8hrG1JvjJBx/L7vZ30tPKh59Hboc8Dyd8fpnHnT/M7azEDFbM0tbM7VLMaDB6i6\nS8aLDL86OHgbbMf0bM0bLM8dnMh2p4rnLMgcrMXCqMTCnL75jMEEHdA2iMeoTF3h7JDj\nbIau64oiHb8VSIpkR3EmrcNryLuvtLvU68hA/Eda+707nIHKJ6v/hrQ4rIpNmtM7/ixB\nYfq6YaeLxgtvRE2GtVqAWKu92cdPunjSaWiIeWfUA6WJY6dvWvt4ZreEG40z7uuwJ9fV\n06O5KNfRFPnRAXu6RMhWjEiYZq2RaL2v4si1CEXXifnWBauvOPurX73XytrXfk2sgB3Y\nvjrYhK2qhv3NVkszYd0wbeyzYOuNkxuOYg1z4EiMORPWUpdwjNu1eG2ScQ3T2se5n9vY\njj3akw25jYvaYSsxlX0511wzZC3Hik3Oka3an1u1rd3Ktp01iU21pG3MNkNTxC3cilvF\nKfPauA1xrLzcub1trWvctE2in72w9Vp51wup1vvSu1jVrqjTTTi94rvO3r3V5Ju0/mm4\ntUbdw0gtijNNvNgr3lJtvukNf4M6vaOajhLI3jbNvZ6Epp8M4NjEb03ai+n9uscri7YK\n1BQndyLN3+CNT+XL4HRT3RJ73fmWwekL0XHY0CI8zz24elQIwvvL0BxIuQQcwby8fbTK\n0yO8txRdwS1O4u1MyR6M3RZtuiFuwQ/dg9qMR0HY4xHdzFzs4uj8vyae0Hxsv5gczfvr\nyifcxEXz24Rc5TJt0FscydLs0KacxMmMej/szWR8d5hIzEiuv/umxGlu0GFs4zDN5Vo8\nTQEMyfkszZgY4PDszwMMg5H85hZ9z3vOw5480XJexlm+5cxl4c6K4V1+yEk+58h8/sqj\nPM/IXeWD7suVrs+DXs3cfOawDOnXvOIUPOnIHc29LNr6bOZATOm87dzb1+de/rjMVNum\nXkp5DOvxHOm4/nv0XOthnjNU/uOv7MyYDuVWTseOvMeYXuyyLsvMXsuqnuTBLOZ9y+bH\nztu1vumdfsrQnMmVLtraruzfHubE7s5PzOW//Oy0Xs+9jux2nTLBLuobrtCAbrofPskx\n7uXKTtFzWnJvnuI+vs7rF+1WfsapbvDU7uMBvclwHvCni8B0ruQgnrz+/s0oTO8ovr42\n3nsvbsMmrs4Tjt/OLNDsrunCnmqKTq1WTauEeNRS3eJKfeVX7Ywrf4TozbTAi4Pv/k1N\nJl3VM8+KtzvVSF3Tchq8OD93zrvS5F3f3p27Sc3SOD2LLsWH3ab0AHjzR2i9cuq7ZqTg\nSa/TPb/gWK1HL6/cChPs0X01Zg9Saw/ufTnbwJ7yoW23kRNcbd/qd9nWNYP2E8eT7w6P\n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\nSmVc2qVQ9qVgymRiOqZIVqZm6mNomqYutqZsqmRXunlvaqBx2p9zWohueqeUlad6/mpX\nfNqnZFan9yl9xcmHdiKfdFUyvOUpxVmoE3mLNpiY9zYljioUC+dXF5aoJddZy9QwjyYF\nUyaSk+mXNgmWfBeMmWo/93dGo9qqRpiMdZl0xAiYl4qcnKd//keCEpmc1BCqj6p/diKr\npqqoLKeqwsiqoIKdpFcxvHeMiLpAJMZCwbmawqqfRilVmjion9eJOykzfDKNZemYivRX\ncgiPjxlif6NZc1k6YvmYjUON58o53AUkQzOvVfNZNLlhlAMp9po41zdH8gpY5SqZH3JJ\njpk13lpIjZQuVtMyYdNE94qMcTiuoRexyrmwqferoCqoJGqpV7OPUGR4/po3BvmC/lwj\nCiAJhAKzYN7lN0GjN0qkCeSXrmJxH2V0P87VYMXVGPCxQ+hjswrWs/Uls+oFtEzUgFgI\nRJIRNwmHNHAnYZhTnt31kSNYqtZaK6mEhtQ2rQlHrjXHYNATPLRzgoJFbxlGYOPCsgrj\nQQBhtnlnRajTPjgZEednqXK5tB6UPOFztIa6t86DdKqDO+0FdrWDWUiLGiIHQ0EIYtRx\ndzTmq+8jRsYaQxfEgSq2qNm1uC8Xke+5XUvrhtuohIzhhJbrG0mYYhEYtf+lQlQhuoqx\nuXmHc6gqQ+iFs9UAQoL7GScCPVwEQ6bLjBobBZA7PocntmzLQSokDLY5YEnLgHBZ/haU\nmxkxWLPRq6pweboFyUJm5zt+G7YGhxWbu7eoM7sgxHq+i2C4e7j7I7ciJDzcWES7+hHD\nS7MTBq7b9bJEC71dZJ0r9EMui17/g5jvJbUhSwu3GZLzgcAHU0f927INaEJoK0ahmYVA\ni19zsxFuI4MyaDUNjEdwq0O5C0SaqXgFJ8LL27/Be7VaEFXlZaf+g66gBF2AIwrUyHrE\nU7B2VJbTxUh/tknhqoANi7JEZLA5DEk8k0kq6T/nmnpFk7EN8sNvBDaPVEmFBHr1GlpB\nzDzVKCV/1DUkdMOT9LcWcoCQtJ4MN2gAi2Ex7HknG14n+qzPR6opTEP5NytwfCx3/uwl\nb7wstBp92aRhyoROeTxR19rC2hpklRouCBtOn/oqjcxVfwqoUsaxWSrJiBjJlgzJlLy1\nmcyImNzJV1WOvfmOyzqpEuhx1YqpefUlCSN5AEGHE1OrI0cuYZiofFaujzwFxKddg9kv\n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\ncIyjHKGYAAA7\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 4\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoik6ozp6NjXaamiJozG6o0I6Nj36kxo6pEhKNkUqoTmapE5aNUsKokH6pFSaavv5\noRnapFW6pUUDocKipVwapjgToMMCpmJ6pjNDmZyGpmxKXY9pmG0apzWjppdCoHJ6p9Tz\npouJp3xaMgH3pVPap4IKMX8KLGM5qIg6MW6plYeaqI7qMIsKl486qfsSqY1KqZha/jCW\naqaZ2qlFJJCKd6meOqpOA6rDJ6oviETdiEfsOD6ranykKmybGqgaJ4SwWoPFV4fv1Iix\n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\nfeurzlsdluGMlZ+xqInGyEjNRIbMlByllleXb4T4IZhqRLF66hH3UH9epFR3pj1/SmTJ\ncBP/88nOQa8ayhPt88wQ9Es/TC7vtjVZ8B71dD09dmLJ1Caj4ICDxo3r2Fv51qKCunAq\nQEolemi8pgYE2KLiyn5HhFUFaZbZxHeYpoonV4V32+1k89gmR2I3H1ulSrV3hMO4SEOH\nl4BCu27V9qR7pUI8uFUcuo8b71rfwtAt2t0dfrLt8cEOviAv6RVe+fQZ3tyX+U8g3aAP\nOVrMnbudCM59+q7vE63/+rIPDbE/+7bPCLV/+7o/gpO/+76vnb0f4Lv7+8SfBfJu/vnF\nn/xWkPufr/zO3wR99+JYHnPPX/2OEPwd+PLZ7ujW3/0wAJFK/swG6v3k/7ObH8chT4wl\nv7+kX/7PffxKfrf37f70X1zYP4MvT7WTXP/873z3/78IELPRO81Bpp6LMOrNu/9gKI5k\naZ5oqq5s675wLM90bd/ucRCCAAA6noBALBqPhKAQp8own9CodEqtWq/YrHYb7P26Q6SY\nqOxtN86zes1uu9/wuDwL/u5643FZ0E7P/4CBgoOEhYYjdUB3YXlHe4eQkZKTlJWWhYlg\njUiPl56foKGio6QBmYubjjtLpa2ur7CxsjKnQqlGnbO6u7y9vpa1eLdkq2a/x8jJ/srL\nU8GMt7nM0tPU1dYNzsPERMbX3t/g4aLZ2tHi5+jp6m7kw+br8PHy87SLdrblxXz0/P3+\n/x3aQdMHsKDBg+gEpnqHsKHDh7wUbmIIsaLFi54kNqKIsaPHj3805uEIsqTJk1ZE6iGI\nsqXLl0xUiiEJs6bNmyBkcmKJs6fPn9jsKcLnjifQo0hR6lTFbV/Sp1AxLsVlNKrVqwWn\nFqGJtatXcVq3sfpKtixYoZryNX3hpwMFDW1BxC3xFkOMujbwopir126UCX76yp0AQ7AU\nwYZDAI6U+DAGwmxFUJirAA1lDo1thE1StcmItpcxp3ACWrGJ0IVbUF7tuDKa05VR/rt2\n61eGbLgfWOe+cIjw7RsZfEv+THy26Nd0U6JFpXbsCshyrZDeC/vJb+prSievTpu37RO6\nu5vuXVvL9evjwXNvtpzowLWqjUuYXEHC4+AMHuRffD+N/tj43QeXBRX4R199j9VH4HwM\nLgjggIHx99Z/Dw6oIGAB1uXgghbQN6GA3s3XYYENOihihQxipmGH+gWYonwFkjYZgTQG\n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\nvuxkv5UZjaqpi4Amf6KboVkMir6nquTKZUZCtzoGxnm7wgeMa70rXL87kSpMx3ycEC28\nFUark3fUx4R8Di4LTYN7Fay4yIzcyI78yJAcyZI8yZS8yIUsPAgcNAqcmJfcyR9xyJ4c\nyvIAyqJcyulAyqacyuCAyqrcytXAyq4cy8sAy7Jcy79Ay7acy7qAy7rcy6/Ay74czKMA\nzMJczBnxx2LByca8zMhAzMz8zIfgzNA8zfOKzCi0wNScza4gzdrczYqWyYC0ny/szeTc\nsdaMueWczisKzpcbyOr8zq12zu4Mz/QcEvI8zvWcz3PAzfrcz8l2z9jszwLdBvw8/tAG\n/YHs3EV5fNAMfQYF3dAQXWMArcwRXdFR8NAWndFBkdC+q9EejS8cjccfPdKYbMeHKdIk\nndJsG9KbvNAq/dIIbdIJ7JYBDdM2TZAsTdMUfdM8/QEY3dP6/NNAXc9CPdTwXNRGrc5I\nndTlvNRM7c1O/dTa/LAUu6NDeUby50OgmbF6SbYm85oRa8ZXVUlPLNUa4LGWpKNqSZgj\nCi+rC3RoW5wOZ6qp2rcmip97atYEPdEubbAvSo9aWW+HlHIcR4KFWDKUWqlmetV6/c0y\nrck63dfjAbu9isJEHLfOm5Wlsbwyenk1N4cqY5QqdaGzGtoOCHD2KoaMCyCqO4C9/im9\nje3TfO3BWhhOinOpv0Wn4TU/+/eCq8qnVMPbVaPZuuU4NrJM9bvDda2FXNLEVMonPhXb\nEYDWRTN96Pa+jJXIcxp+EmdZTwh+uX2O19V4gg3cb8aEmzp5VuPVJE3dExpSmUfEWTrX\nzyKXiK2GOphjCvNihEaEx63YUJqK5jJbDdpgVS3V7s2e6I1myzujrHRTthWhbkWhBTqq\ns9qHe/mg3U1/ZKh/eB3bCW57arXeqZPDirc7jAhbb9xa++2g8Ml2Ajfcdu2EjD1its2p\naiIcOQfdbw3is0240uq4v9mM7vpkvfemINy/DLaqVYfGoDqt6xt2uNlVW7zYSr6o/lGq\nddIdED8ey2W95Rv92OHcovjMxwUL5g7d5arM3mj+zzktzjXd5hod1XLuy3Re57p853hu\ny3q+57Lc537uyoAe6Ko86IRuyoZ+6KKc6IruyYze6Jf86JBOyJI+6Xxc6Za+wpie6d+7\n6Zw+uZ7+6Vgb6qIOs6Re6ix76qiOsqq+6iTb6q4OsrAe6zc567Q+k7Z+6y+Z67p+krze\n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\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 5\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoik6ozp6NjXaamiJozEKhu5YcUPqRc8Eg0tYpDtKlj36kxoqj3VIejXoi0hHc95G\nd1a6pGvZpBKao8qYe9+mdNrTTOs0eL8HplralVwKokH6pc0kfgZkRfnWc6VjeP9mQGLq\nbWnKpPv5oRnqpe80p/L3h1C0Th73PVWKPniKiXvKlhAqLIA6phgFjjlUp74YqJO6/k3J\n80/x2KgjGaDDEqknJKiVh6aFiqYWZae/t6l56qlxSZmcFqZ3aKn2lKqZ2jmXWnKTyqmu\nipeweikEiqngx3uuR6vMlHu2t3F216pZ2qtC+auUxaAudYR8aHn71qqGiKVkl6S26qxD\nCa2VEqzS06neapDlCKltOq7lqpQBV2uiuq7wqjJuqZVjGa/2ijPzCpf3uq8Tk6/1yq8A\n2zMCqXj/GrAGS2wDO3wFe7AM2zH++q4NG7EI87DpKrEWC1cJe38Le7Eci7GeCYkEC7Ed\nO7L78pVXmZYVS7Iqqy8mi5UoK64rG7P28pU3ypIbK7M4O7MZC5Y1+5Y3m7M5S7Ew/gu0\nKiu00kq0F2u0SLu0+/ix5hiyKcu0HKu0Ugu0VFu1OHu1WBuzWru1RZuxXvizXmuxXTu2\nHVu2L8iOfcQ7v1h85uN+lKhG1no14Mi2tuo/4cZPENis2hN4ajsyzAiNh6e2fXg5JYO2\nLygyiRoxp6qn3Uqmbyt4BSN1O3duqdpy83a5TEhLsqd9tcqsGQWlk+u4uIqqicuqFCSl\nCYO4bto9fOswjSuDhnoyZyq6uFp4ScNAr0urG2WsYipUivq7uzuqV8o05Kq6iWu6X3q8\nyhswrCusvHeKn7iLA6Wo2We90nt0nmS9FEeL3Ku3Dti9tBeKM5h6rfemuou7S8hC/tqr\nt3IovgA4u9naiu2bt4vUiMGrq5B7peMLe4UKp6aYtxQXvl0nQd+7vhdovltnwNOEi5s6\ncqOIVBIkiwzIjs8rqVlnpz6IdLhXrPybv38YwrHbg5/7u+aHrCdcwou7wIQKhKrYrApM\nfgsYf1U6fj7YwqYqSwpseCSMfo0rwNzrjCGMrLP6uZBURZC7uJXafsu6wT08w8Xav4ba\ng2fawcXrwRz8whpsxRMLttgothisqbCXhk3MwVnqSYt4xkVMRr6LenLqxk1MusmaxLda\nt4sadBrMxnC8v39Ex/FmpWbsx8J7xZyrq9uLrUWsxWssuSZnb2+8xWO8yDesilWs/saC\nPMiNzG/TdMl7vMULc8HEm6f3W6aCrL6A3ENxzMcZrKc1bLqBLKiHqsK3asR2mL8KFMdw\nq8hr/E+cDKaVnMe87MmgS8e8+ri0HMWzG4L6W0zAq8qs3MbbJ8yDt7/OrLu9DMOJbKmj\nXMJd7LT92Ltlus3YjMV1x7vbnMrA3MutTLrSXIXirMivrMvQvM7xDL7nPMvZzLuaOsuv\nnM+nvMv/rM+aF8ixq8orLMn0LND13M6VqsT+jMnBPM7t7MEP7bFT8822G0t5tNHqm8rW\n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\n/blqRA51q/xRdn53k34s1T7a5UCIgHBlAWsehSXb9ikphBNwwlciYT1IYV75BoBY032i\noCz4MVI+BG1FVCWvVm1iVSPYBnDqxnMamGYC+Dgbp3yTJWsIVW/VQVOV0W4nch7mJhrv\nFSM66H0taDQc+Dk6Als9mIKAlYHKxoPrNoGHAm2Jw4JD2GYvWDoEyDnz91U4ZUKjJXEI\n+HC8VRMMR4aXIYYQdyVpuBs6NFpkVYVCY3wVpWDekjv99nE6YXLUt0L/tj6f4ScI/mY5\nK/eGcAg0fkeFJ2NpiFiIF3OIWhNpjFhMVzg+MegwRWc0lxiJojN8mthOnNiJ6fSJoFhO\nojiKBDWJAIRzpoh2qMhBlbiKoFaKsIhNsjiL1lSLtihNuJiLzrSLvMhMvviLyBSMwnh0\nrVhDWViMb0aMyvhLzNiMj3aMUqSK0LiM0ihH81aNd3eNJqaNhseNyeiN30hzxjNq2SiO\nfQeOr4iOg6eO1MiO4/gGNVdfQLeOiZZFeTM5B5N8jLaImwOPjeiO52hRI1SAiOZaDVcv\n/lgXABmQ5LhN5thJa0WIFGmQiFMwC9mQOdN9VQRGbOVqwyJ/tjMrZ8R/IXRFKbc+/gy2\nkgUWQhNWkvuHPxppLsHVX+RFPYCyfw7YhxDIV/xHYZllD7ihbmyUJ7RlgcA2k1sjkBKJ\nff3XGbHigxPEWbdlQdDHVPhIOf/mXwUZKxGEW0rZLkVIg1G1gxKkbedhcddmVw/oVkkJ\nfcJWa28plcoVlpTElAyZhM7BQtJjW87DXjCFkjwCls+hU73iWYSZiXbJCRx5gEQFfzwJ\niNAhRK0jUkX1JvfGU0S0JtWVGuG2mKjgbYRVNqrGFi/ZfmS0YFgULWuBFbSimihJmu4F\nLIM1DvlnRWqEkKD5Fni5PxnZLvFCWrsJR735Pb+pfcEZNsPZCc9YNcmnmMu5Bs0Z/p2X\nNJ3UKUnWeZ3z9ZDydHMDqZ1Dlp3giVTFOZ6YV57muXnomZ6et57sGXru+Z6kF5/yeXr0\nWZ+qd5/42Xr6uZ+w15/+OXsAGqC2N6AEmnsGeqC8l6AK+nsM2qDC96AQWnwSOqExJZ4W\n2kR1B2y4KTaBlWj56Bb8KKJjglmHuVbHmXcbam+7xZdvY5CAQGlOmaKU9aLxZaMsRaNz\nt6L+pn5tKYM1+n0EKYT0hqNGCjFuE4mQ1yyyY5P0cFdehFEJJkaw0zvWkiwPlVcEdhur\n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\nmqiKuqiM2qiO+qiQGqlxmgAAOw==\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 6\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoik6ozp6NjXaamiJozH6gv7DNHnnjNzYcOz4jEaKTDTVjU80fxQ3cYx3de64jsPW\noz+poQXjc80oVEYXjyKDgyckMYg4eMjUR8UngFXXiFvqccmTpGgqbFgqoTkadUqXNGKa\nexlVpo3kMHn6h2cag2nKcsX0duO4hXAqqHK6nx+aoXUqpaaoeafUg8DIilsnQZ8Y/qUS\ndH2GKH5uF2+lqHyqFIe46ISBZ0yxCFCVioCrOH4QSIqRuoOXWoFh13r8pIuvJHquWqqS\n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\npjfN6U57+tOgDrWoR03qUhc6AQA7\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: image/gif\nContent-Description: snapshot 7\nContent-Transfer-Encoding: base64\n\n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\nW/YXKfgXdQu3f2KYfYV0VPy3hdekdb7keenHhr2Eg2cXfZeHecmnOzQHgkY4hD3XeWtn\nbibnh0NIhuoHeTb4SaBnhdKEdw4HSzUXfCuIbS0YbTHYVAzFgxNIcmiYheFnhWoo/nqn\nx3w5V31J12391E/wRojGN0L3dIIBVYR+x3dAJ3Kf2HfUZ4ZaVIEIx3dFyHBsp3RKSIqV\nCEqXmImO6Ge9Fonaln83c3hI434dd3I4FYZiA40zpVtdCClfaDXMeDTS+HOgRW9ks42M\nZ42PKHDISHBZKGT3Jo59I2/VxjDUWHDkaIzGdo5P9474mI9dU44qp4/++I8rw4/2CJAE\n6Y/X+CjZWJAKuWwH6SgJuZAQqWsN2SgPGZEW+WoTySgVeZEc+WkZuSgb2ZEiCWkfqSgh\nOZIoiV4lmSgnmZIuqV0BxyWS+JI0mV4xiSUC0JI1uZPBdZOSoio6yZNCyYXlyCS+/hKU\nQ5mUqBWTtFIATvmUtYKUSjmVl2V/T+mUpEUAUkmVXIlYVlkATgKSLtiVZJlaVvkkYjmT\nZbmWmLWSiLKVbBmXXHWT+ZWMcnmXfnVtXaKWeNmXbuVsgOaXgtlWgElpg3mYXVWYjIaY\njJlYKxiYjRmZB6WYpHZmlnmZmJmZmrmZYkKPC8aZoBmaojmapKllnhlnqJmaqrmarNma\nraIxiBabsjmbtFmbtpliKHaburmbvNmbvvmbumJjUjacxFmcxnmcyJmcyrmczNmczvmc\nyvllpTmd1Fmd1nmdASad2Lmd3Nmd3vmdY6JVrjme5Fme5nmecMZglAac7Nme7vme/vD5\nLae5nvFZn/Z5n/iJnyvoJXwpmf7JRs7WJeaIjv9ZoKLlmZsGMwN6jwbaoIoToFnpWgvq\noBR6oDGToLY1oRW6od+EoBGqoP3JoSJ6OBBqXLRiXCE6oiqqNyWaKomGona5ojIaNy36\nXGHpoik6ozp6NjXaamiJozF6Mt8Xjzu6oj36kxpaM4uUe0XapOu1nx+aoTkqpKXjpFY6\nMEcqoVOqceIHSco0eMPIe6eoeSw0SF3KT2h6pR2ZpSAapFGXiJVndwuoiv+0fUhHp3Bq\nfa63p0SqpsEGocKypSeEUUh3h810qPbEpDQHgdBHqI4qf5jIjn7KkPs5LIJqh3vq/m13\n+qiJ2qkWtajrl6lyWkr0N6kRSZmctlGcCkWriqiq2DlKp0qbKqqZV6qmqpCoeikEqj0c\n6KXoJ3t/uE21KFS/an58Sqqvequ4+piGWTBrSE9lmnrGNK0UB4x5dKaal4GzyEzKSpC5\nSlkMWo0406fd6pIBF6hu+jDkCo/lepjnCixjuY7LKKntaq4CqXjxWq/6WjNuqZX5uq8A\ny12eCYn4eqkBe7AT069wibAMmzAK+68NG7ES87AGK7EW+zcDa44Fm64X27EFQ7Ec67Ei\nCzAgu6sje7L98pVXmZYhi7IuG5AZuyhXCZYsa7Ive7P08pU3ypIQi7M+Wy9nubNv/tmz\nP+uzJRuuRduxR5u0TLuPMTuQTVu0Sxu1Pzu1VIuzVnu1L5u1WouyXNu1I/u1YOuxYju2\nF1u2YDhuE2Osxqeotmoz9AoyoxdvQWe2NoO2vJqsEqO3pOdtoOq3y7hOESNxdapPdQe4\ndlsyeDuonbqul/NtjBurSiW4HTdv82eobpu4I7O47/Q92OqAW7eEvCeKn1h3fOhvnxu6\nYNd12RpupGit/UeFrsiJhmhAhep+rKi2AIWmcqi5/sK5vAq6hhenPdi4vRqC+XascSp4\nntp+v9qqPniHczu8epqpPRSH7Dernop1QzqndOi7+gK8keuq8Ie5ZKS825u8ZVql/rkH\nS7frqoQKe5pqvspHvXeHqfZ7qKOavoj6t9pbqOCLL+KLv/D7uP2Lu+gLrKsKwAcsVDaH\nue/LwNRrvqy6ToVbTBCsvwe8we3LvvyLuAE8wLAaq4VLwQWst52nvsxLwv0rjBmswUzK\nwO8ruQVMwxb8qIUXrDM8wTEMvSAMviJswBAMwDN8ewn8t8p7wfGLvhwceMNKuoY3vde6\nxCU3wvn7h6H3e1Hsg9fKthIcwDl7r8NHtC8oi9TKT8+KTy81u2mYfd3niuhjea/ouu2L\ni5o6phKUxj5XhaxYuh5npoP3umO3hmBsL0G8NFqMWuIXvIUMVmJ8f2SsNYz4We4o/sSN\n3DGHjMhxG47Q2cmVDMSP7IWRzGz5dMllk8mm7KSonMpFusqsrKOu/MoyGsuyrKK0XMsi\nesu4vKG6vMsU2su+3KDAHMwFOszE7J/GfMyRmczKzJjM3MzuGsrYOMrQPMvSjJDUXM22\nfM0Omc3anMvcTJHe/M28HM4aOc7k/MvmXLNIm84G+szuHJfwHM9rOc/0TJb2fM9cmc/6\nPJX83M9J+c8ALZQCPdA7WdAGTZMIndD2+rQba7MM3ZgLHdEjOdEUvabrbJLofNF9adEc\nbZEe/dEQGdIivawOPcYVW9J3SdIqDZAs3dIGmdE8m9J0O61Hp29y7Emw646w+Lrj/lO3\nFeeMMB1pJw3JNA2KbxethYhH1arUCujUb7pzMdiIQ82iMj20R01LSQ1+Rhe7aQrVNNio\nZayuFVzVfePKObTUOUjV5rfIXU153DqCvXt9Jrhz0up/rXt2Zr00aA1/w/rXFvVCbq1H\nvxi9UJjWVFe8+vd1DFiKe51qV+2vWV2rag3WDLR9UM3Vr4TYZYjZ6ldGlxiExTvJj50z\nfd1Imp3a8ftMg716yeOM1lS6UviAbi3agei4pT2xkb2wVG3ZvPipMOjbTK26sf13zoSD\ngJfcIJjbRXPacA3YbC29G7fH7+d9rJ2H0dtIF+i9ksfczb3bG52GNe1JN01uJjdQ/oRd\nTFu9rfWEVKbo2mfsx3K4yd6dsOA92R9VynuL2/VNMffdslxV1vvd30jz0ocDjs9I3wTu\n30Utyvi94Chp4BAeaxI+4Rj53xBt4QqN4e2s4SJZ4R4OaiAe4p424iR+aSZ+4iTJ4Squ\nlCne4ur14jCukiw+4zwp4zYeXjie4zBZ4zz+kjv+49IV5EK+XERe5Ml15Ejekz6+5Bjd\n4NP84E4+bUo+5bjV1w7MjcdnwYjIcjnGfyO3tvztjWPd2+NKiRyl4DznUtM7RDqn5lja\n5FNdh+Oqfb4YS19MwHanxXRHuZarMkvat0g8uZbswZ27bQbMt2sk4FbcM3Iu6D+c/jM0\nJUUePOmfKqySG+gNM+YvaOiHPuiS3uiePr7dk+jWu+h+fumODuXY/OBTJ32sK7qp+9XT\npHbiLYJuF8dhfsMd3Ot3rMeyK0F0rLY7yLqi93KpW77J3nrxxrt3TYUpvIqmq62nV7vF\nGq06TcC63tTOju153d6q29R5p9PWLu7lHe7b3rqY/OipOIPjZ9jcjdivlMRD3Ouajnsx\nLHe8Tr/N9Np42r2Nzb+0J+/V6+7Mm9ZzCr1NGH9ZnKejWsQtzMX+7vBevMKFju93fLzG\nW8NTOO/NK/Fb7MAPX6fc66sRz+BT04/jyPGrTfB3+skU2KUEz6kmzKj7XtY4X+mr/gSq\n/9vDtIp6Lq/zlJ3zNn+/vv7CV9y48mv0MkzzPW+/S0/qL29vLs/nLV/CsqreNVz0Uc/C\nvr6/9s3q3Szld/7zH5/0WI+8YGrDTe+3EC/qX7/v/I7AcZ/0SK+9SE/BxMrzNO/z88vr\n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\n7YwMyGzJQrHJhmykOtE3NjXQ1xhMNAdVUkFD00KBQu1T18tNQi8z0SRFVDQNdWhF5YSd\n1nT0VLQCG2gyCtKSmpRCJD2pSlcqoJSy9KUwlY9LY0rTmo5npjbNqU6Lg9PraNOZIt2N\nyqS10Q8erCTlKBhKpjVAhBH1p7OsocB+U7DhHGtYc+llVoPaRuL01KdGvQhXkeKcpaJS\nXPeKyhXzWKxVovWOCAPrNaFFMxcqLH53batd9cpK1HCjk/tSq2++OsshFpE6b2Vr/mkm\nWsaz+nWvrpjFupZqVsjWMa23cU1ZA/ZYTkQksoLtDWGZiBPDkhAyukttz2RyT8g8c2g/\nSyI5+ZIznF32nFiDrTjtCLSsrRYmtc3tN7fWrOpQNnzJxKHO2Mfamn3Na6m1GucmKU/n\nYnOS20QmYJK2REL+8GJ0A6do/akneMmSWc9bySER91m/YQJvEcOi2igISMCajnV7Ixz6\nPhveG9a3ffAFXeRShrTm8VeQdkzcgV0WmVjZTZLxpS/3yKc6Rrb3b9iVsODoBkS/GG9p\n9hMlaGlE3ndl6LxyfSEoTjvGDG7YvQUl4+yu99BNyk+MUQRsAD33zBzmZb+/EzCF/hEX\nyaZW8JMXrB6Dd/w9H4/ibDCkYh55TGS2us8aTfRqidXYIjZ2dXUr/itzkdpgIlrSu/rV\nYhaxVUI1wxV7WRbyFndY5hfrkHcAzGCRp/JmIuYYyaW0chUfWAcon9LOcq5fd7E3Lwc7\nWT1bhqWkGH3lwyaazFJWsgdj6OYQz5Wf5pvhPMOI6DTTmYtVDOGp9dzHA1KamjfmoZ89\nrWkRqvPQQJ41q0c8sO9mcjejpfWsZwbjGM6Xw/yVLxL/uOfJ5XjAYAy0A6cMxyA3RL+h\nDPJ791bJXD+xr4jUpwP52LIJk06TH3H2ueX8yFZLMLAb3vSP/3hs1wTbi0mzJzDx/o1j\nc8bRKz3+aY+FO7VhHqYshfHZkqlRMhznLpcefrg3Ga7vUTscL4pTpk6sW+PFNJK3tS1M\ni6Mp7qXRVuIMD5k3Rz4YYmq8ZLFV7cV8ac6iwibSAFUVfWx+Hp4HKaE+J1NFg94wnJs3\noATjENFzVNnrmGro4z3jK3O+LIKNdae6uXqxtI7119y762APO2W+Lvaym91OUh/b0XV+\n9ra7vR9kf7vc554Uo58Y6XTPu95bWYapr73qBl06re7Va1r08lgpfxp3P1oLwVuW695y\nfKskH524D748RC+84eGxdGsd0dB9JdfmM+tYyY7YMpS3BmedTh7LkzVEqWde58Us/sTS\n96aojSV97FW/2NVH9aZ2XyOKI5/ysBT/t2MZKjvVm2GiUeSb7LQaOpsL4f4O3PkqGx/F\nXP7cF4c7D/VumnBdO36Jqfz5iWnnMtXC2zimf57T3dn2u4kyj1A8niIfcFxEKRnuzh9p\nu4d2rqR2d8d28kJhGCZirHRsG1dhFeZHjARB2AZHDxY3+cVckgMwfBNn5eR/EuhsSbZu\nkgRhfCSCmKNC2cZn6ZZu2PaATHaBrVZ9X+GCEWhhGHhj2mF51rNscZZUH0dqeNaDc6Rr\n/XM8PhSCPnF9eQZiS4ZUiFZOthNOL0E7wtNwArRrLJhpHqc9lENmPgZrXBSDgjRo/k7W\ncUcYgPrgeu+GZkI4ZuwAQ9GDcYVQEwhEaKsAaJr0aIEFZB3WhNrnOwPTZJcUh2zYRX7V\ng/EmPpT0aVH2WNKmY1qYZ3DYLavWIMHXZcMXeWhWiZGlhaeGa4CYhNHETdmDiMrVQwvk\nZ334bInkEudCimmGh5zWQGADajG4hzSkY7cliZSmLQCnRERYa8Dla6YmHTo4R480MvjF\ngKmwECW4E8DhRHXoi100X5ykajeISgsFbYboViT0eRoBQseFbG9mh9h0htRIR3iGQU82\nSC34X+8WgYowjBNGb4hobDToe1E3gP/0d2azS7eUXMmUQpX1WiuXTr/ocvhGT4ih/nIw\nx30kx0/iR1qNRHP5NH2wBhctZ3HtZpH3ZEs0JzVHRkENZ13GB00iEzn1B5Ls9X4dhHC6\nxJIC6XESOVswaIyXaCNeZlCVUS9omFc/SR5ByXt7x1M5+SM76VGoV1jEcVEClXVF+Ryu\nFx+Mt2a+UZUegpVRySFTuZVeiXVd+ZViWVNhOZZmyVJleZZqWVJpuZZuGSpt+ZZymSlx\nOZd26Sh1eZd6WSh5uZd+WSd9+ZeCySaBOZiGOSaFeZiKmSWJuZiOySlHeSSZ+JiUCSiN\nWZmYuSOXmZmcKSOb2ZmgmSKfGZqkCSKjWZqoaSGnmZqsGSGr2ZqwiSCvGZu0+R+z/lmb\nuEkfOviR5gKGxTGUXihVTCQwPtmbvml4xxmcxKlLQGUw9DQrJhdz4qVaCZecm3KMIGhV\nFsRoFKWPl0eUidVZ2llV3hkMt/VxXXU7ihRaawWegYRa12SE/nUq2JlsiQWdCAWVjRee\nb0Wer8drTmdatMd6ioVlhQigAoqLn9KVRSCd9IWS7Id977l/riVx9Edy4iU1AKlx1sc0\nxWWSELpd8DmHIVdgvWVCnzeTyxVJxOZFHWo97ddvnHYTh5GgbGYqDJqNQGSQg5SCjXNy\nXwiNETZviSOkEHhfGQeJENiF5YZg5SOiJPhfnEc9G+dB6nU4dSWDDChujiVSM5F9/lcq\nPZCHKDkKYFUGj4LYQ1SWVUHaiXFDhWO4P4rGgSa3cFN4iqVkjr4ZcEyYi3NzZmJlNHq4\npoIqnuf5NfCmnJpSpiPUhITmP2PYqAd6bQN0je5jSBIoY+gIRe4GnghHiKEXZuXWZ/Yg\nqqkoh7+Wagx2cH74CYlanngZmU+SlOE5Z2I2jJ1Wasv2iWdafJfUhrImjG6aa7tGe3pK\nlH1ICohkSgPFix9oq/PZaL86oNu4qLJ6JZOZV8z2rOtWaFLqbs4IV+YobO61Sgoop8io\npaoEqFrkiYaop5HYbdfYid2znkRqpLqGq/HHpN4WqKcXq2nXjwUIeMSHWx2zb1UT/hcO\nGU4n90sGyZu/pDQZin8DmTbGB5ES6m/R2XIYyZwQmhYYe5Lew31646IV11rqJ5PvJZN2\nsU9ZI6O0E3KvVSq3CS7SmoqUApy5OQU1u3Nm6E4EFXo7Oxo967PlMqZ9grRDexRFu7RO\nm4PX+iV497RU6yFNW7VYq2UBW14Dm7Ve2yFX+7ViS2Jba2LCN7Vjm7YAErZq27aXwbZu\nG7dMG7Vokq1ye7foAbd4u7c3V7ZcppN2y7eCOx16O7iG2wWFe7iKy3doRIBna4CLG7n7\n2HeOi4loK7mYa290Cye0mrmei1GbOyiQ+7mkC7p+K2mdW7qqeyGhG0uXu7qwWxSJ/hu7\nhzu7tDu4tnu7fJu7uou3vNu7cvu7wOu2wju8alu8xju2yJu8X7u8zJu1zvu8VRu90vu0\n1Fu9S3u92Luz2ru9uNm93kub4Bu+sDm+5Mua5nu+qJm+6kua7Nu+oPm+8MuZccenz1mo\n5IKyHrV/Bae/62QzW9dUZtN081t5rTtp4BVd6qmoBxhiSsufbeR/t+Y6dzFXPhhW6MXA\nBay1/Mi1j0uwETyiRvXAVolBPqe0FOqElFhH8slUToWeG2wcx8haFod+HElxKnl911Wh\nHQldAamShEDDKhycFXxDfXM3N3yx5covOEOx8BfDlTHDz+U9LOx5zEfFjVNIU/rE/udK\nqe0Gct0UccOJbm6kjGy2ORf1nGiRpE8MxXN7ulSHLhhXxlWsxeQYxhwLtNy2i3SMNi4z\nx+q5wiM7nzRmVtGoSiexOVjcxyTsxq9zwKm7qodMxXW8x358nkC8b0d8eOjnlGvzUBOs\nxoZDyTBqx2wcyJXMxp7syAJIuQL7wQczPZNMYJM8ywTGchScgaQ8XJj8yZcVykbzfrYc\nXrOsw7dWxKr8s6zctx1stpY7ulNFyH3sfJZcyIpYw3TsoWWMTr2MqUPcyztsylBWzKIW\nzsgMX8q8zJgByYGbVIQxcRXsSz7Mp1yTeM7lw1zcvzTzzvqsw4lcTfp8MwZ3vwD8/rAA\nqLPkW7iNHDs6Mk5EsdDqzLh+17USFZQQzSDxtg8XHdFVoLf+rC5aCSLWKVkhzdHvw86v\na9KqK78qvZcs3dJ3+dIwPZfrEQY2fdM4fdPtPNOZW9M5/dMHIAAIzNOL69OzQQZDTdS1\nu2Vx4BRIHclKvdR+29QD8dQ7HdWKa9SbYdUpjdVZzdS14dRCDdVevbtgfdRjfdVlLbha\nLdZJvdZ329ZVndZdDddmPdVhPddvbdfEe9ZbTdfQzNds7dduTdaC3bZy3QtcHdiH7buE\nrdeG3djK+9iKDdggLNl769NksNmc3dl7jdleW9OdPdqc/dmgjbUyfdpyp4ZQKCFB/rXR\n+LLRZAV0H62dnMqd/BZSDNOdFkyc/8jDCKutWLWdJw3H/ihXsv0cCcNXeOUtsHpU8WMu\nh7jcMPyv4DavrZrdwikruB3NB5h7rJjBC/ygwq0wG4Wd1v0e1G2oS5ne5ml6zt2L/EnA\n7s2dorZZ3o1Y5d2fdxXb4Mc8QhszsczMruzBz3zZvm2ySDxbumxcp/ywvjpqwtySUzx/\nMHrFIstL9DdzRfNO+vZyGTp+BLdBzRVwBKmMGlrEIgtxF5d/TCzCP/yi1xWhGvrD65cW\nFgRxPdx9QVyOp8V4TdeSivYKrH02R4ym1WxAFshBi9iun6quCXjLUJ4OzwhK+Op5/kH4\nbbRcgpaEXZ+jfQ3IxdyokUu6jtwIbdkU5RxmX+Cq5W6Wglzqo9AYxKMcOJOBhXqUi+W8\nBQxKhtJUPKzDoZz4yTR2sWb+h4D+OHAIroLepiZ8qUm46FFzZ/U6iam6o0Zcj5G4hfJm\ngecjD4leaVVIjKhAhYyASQ/KVfqaRXv+yMZN0XgFhNMahuyIQpa6ZquY0dBwZrfObLrK\na5SQahq0rJsYRpM6jyY+6qiYPrzuiAZUjLPuzTea69R4j0g4i3CG6i2KZY3OZ9COuCjN\n2J1l7ZA+o/MmD6hVqNT+hsKasCQu6kL7pbx6opo6qH8G4LnKr2Hm53Z6aWxB6uf+/q04\nKH2Wfu2xKN+1B0l+uMSKPiDhjuBbt8ht/uKhri8ZuEgi4a0UX67jWKVm7j/EavGyR8hZ\nXm9GHqk6iu9y3uQlWzwHFkQ/SslWtPFNfmEsTOutiI1rjl8s2q/2ap/P+uRAT+QPL8ex\n5cQxzrL5hOb3vOLHzHEAjc1Xo+MoN500CcAoabAT1+ITG66GHl3yZ34cR7EQa3/uBE9W\n/3z1DJAZbnDip7AgO33PdnggbuhUH5EL+7JSmO4uLn21zedFHyDBfrOadbPVyp69p9rs\n8uqwLPgK+JvpfMmbh9D1bdepze0wfpVXV9LDPRq38vmgH/qiP/qkX/qmf/riG/iK/n/X\nzfy3SKnWqw+9qh/7cT37tB+3l3/7YZeXyb0qSrX0ee+//ND7nsFYrV4t22OgDqazXPfA\nm0X88c3QVWL7oQV1BNrAmGZp0G97z31U1n/8pJH8IHFwCO2flpXtu81Y128m1P/eAY79\n0Q//5prwld/fECx69S+elO+pAq7d5s7bCBC63NMwyrkevZjazMPuygeOZHkchCAAwJkK\nRCzPNOG+ZTVY++55n14IKBL2eD6gUpckDoVE0W/zCDKoWCm0moQyq8tQ12v0bcdcrTHs\nhHijyqOY137Pr+tzsAnX/Nx6FUN3TmVncVJthEhMeHyEDmZciIx/dYpzk2FvhmRj/myN\nT3uVko85p6gMLiosqzA1sDE3KqeSg4i3jFZ/WIO2S6RiU3QOuLuZVLfCvGDJVzrAxFqC\nvtLUbtBd17nL1sKfYJbd39mWxMzK2Om5mtLt1+e6Rd7e5uN46fRpwNX9e77UnNWT922e\nP4L2xKVamMpVKxQqYsWaJaBWQHjI1rFRwy0hNHHOnk1RduzTBG1fimDEp9CjQY/FOh6Z\nt+WiS5KJPgp0hAZlS5E/Q9KzmXCnxmiOeMaT8IjPUoAKfQJ9OnOZTKI5fVIlyrBrDoct\nIL6SSIOiRahF1QHaZuYqO15T1YU7BvJjJLjbYrqcG6FeHEE5b/5cZ1RovkRt+dXV/ruS\nqRy1hTviNQyTnNVwhPP+vYs2smXEWDU2MYq3ZWLSW72qJgHWFdkaZnOg5npUcdrObiU3\npstbJdrBgkknJYMxMGXjkHH/tiqZuOZptX3Hhfq00OjQ0++FbKxbZ3PqtHOf4zy7cvnz\nq9N3aC32dVkUOGS/k5kMdGmUAtv5/ZWdt/eo+213nF/Z2bbYbpexNIxivUg1nm3SbSLh\nL9A9l40+G7GlHyj4UVfJgk09OJRbwQS1oUkj3VdQdx0iBc6D6sUIAXsvuDdDbPKNUkom\nmEASTRr7FHLHY0MmxQwSSHqCWCk6AmJIkaCYdxpdGemhxmhMdoNGKJHM9eQXYBZJ/hOX\nfVi5ZYHGRClkID9mASBmdVTVSVXWmbIZLmU69VggduTBiZ5IySioKmI9VKONssBHy6CM\nNuroo6lECKl6VE5qKXCXZsqYppx2GgGNESFqg6IVeWrqqagydWCqtXzIqoyBveporLLW\nqhqoY9mIo6289pqenb6CYEewCw1LLKXAHqtsBriKOmoMiy4r7bTUVmvttdhmu16hYR2K\n6K7ahivuuOSWa+65HDQrKrjotuvuu/DGK6+j6n5L6rz45qvvvvzOW6+u9/Yr8MAEF2xw\nqv+6xy6jdJ6FSsPCqsXBGqvNxF+kMNoKbC9rtWsnrSd1lSykpoDMqcWa9JrwawuL/hyy\nmn3FjAGtrvqh3MQlqtrBiAwRWGtWT6Bprn0Ta1YCnCdL/CrPvK5MVss9v4wpUIDNfMF2\nNlMdcXhaXw2ey13LSnNy7prstWpmz7os07Y6LRHUXsuZZJBCaYPyM/9QgmR/dqMMJJYI\nccjmniPns9HHetpCOB1sGskj3Ynz1BeQYKZ8SeND7nj5mRc67njKgEtucSgX//nlIZo3\ncnrfXhrTZJfNnPkizFpbXhPmg7o9UcBHxw4hXy7qEhVbWIGupT+3oTO7jxxXNzY+WulV\nYjwnlqYdZm2dl7H1b0X/F9bHBdRMXhRajid/VA204vmGk1O+ddKL76KK5yN9Z/bz/in/\nfOdFjV/barqDBdzOJh7YrYRKAsKOOYblIOyUxy4cWaCxaie+Pu3JJuGzy+RyE4W5dSc8\nA6pJSuJXDRFmZDrgU6AHTeNA+ZGtgO1L3ng4AcMDolCBOjvgBUfYqADChnckKAmLyIZA\nIsmQO+U4UGroF5N/VMdqN8yhDYPDmbtMr2sVAhoLOUgSmz2xizn84gNhlMUalox4N4OO\n87q4i/wc5jfo+d/wlrMqenHLNesC4giEaB4iUk06Y7QQHFuonDZOcWoUpKMgJ3NIDe4l\ngZuqDAgbCUbHBGmL0cHhEelYxk0yByaB7JIihLNENzkJjfTDmtKEU8lH+fA90CrV/tGg\nJ8a1NJB8/GuQKlsEQwq5UCsDqY8U+6chwMxHl2B8SQohOKH8cVKHVWMmCROUNyWuL5cJ\namY09UeiabLvg6B05hXBGcP6Be8ogKSmgtKGilfeSI87u07iQidKTKTOE4FS0imNSKd+\nbslPeaNYT0QTOis5yU2EWwQ9RZkkeyoJoSAZnVLilLo+eBMOphsFRSeXhZI8lId8qmgH\nI1enHklpbxSVW0MNaDpaLoigCB1oRu34AkOFyl6xBNvBdvqwsMmGp1kDqtRWxU6fhsud\nMhjgzoTKVGHVzGFNDVpUN3i4Ty4VXUhNVE5757euevWrYA2rWMdK1rKa1W/omuBU/otV\n1IMZS60zK9y1svqs+Kz1rnjNq17FRVel7vWvgA2sYCfVV3gO9rCITaxi23nH9uRxq4uN\nrGQnS9kAFBaylc2sZjc71cva9VwhkiNnR0vayHo2WmmVS2lXy9rJnlaWqY1ka2dL27++\nNkcl3RxK+ecjc/JDnh3FG+fgR9LSLdSktU2uchl125/20n8AOqdLidkiqXwPg+t7X3Wx\nu9zuejdGzZ0lfUzYQRIuM5XcRQ5I+ai9idLuu/CN7wjCK94v1jGKc0Tv19RL0EM6T5Xv\nla+ABzyjxnoLYJgN4j0lxt9aFjK9Q81KKXVjXUcS+MIYtqyBb4rgz4o3otuUEDRD/ru8\ncV6nmFJFiC/3K0zuZfjF36Xvh2lySYvmloFVzdJIeUSmxRnTSE+a6ShhTGT4ylhabWVY\nkZfMZMbWtFscVphhlZXkQVW5yViG8ZGpLFeSdTnLYC7ylsNM5jIfdsxmTrOa74rmNbv5\nzQdrM5znTOd8ybnOeM7zue6s5z77ea4bzpWUE/znQhu6Wrg6gaIXzehFE/rQkI60yjbc\n6Eo3+tGSzrSmTUUjZ9UAtZsOtagv1WlPzwDUo061qmVUalNjetWwjvUpWu1qVMv61rhO\nl4EtzWtFvzrXwA62AmjUa16/wtbCTnauiQ0fRIUK2cqONqyZ7axnw1ba2J72rptt/iNr\nZ/vb2n6yC27g7GNfG9zozjS1T62CdtPA2+mOt7q3/e52C4Dbh4K2vPeN53XLQAWOZvev\n+U3wN/sbWoyu98ALznAzH9w98G64xA1Ob1FFfOIYd3jFy73wjHv8xQ9/zcU/TvIlM9ve\nKE+5uz1c8pZnmNgqj7m9O+7ymi+X1qYGeLF3zvOe+/znQA+60IdO9KIb/ehIT7rSl870\npjv96VCPutSnvnRx4zvnVM+61rfO9a57/etgD7vYx072sj/d6q5Ou9rXzva2u/3tcI+7\n3OdO97rb/e54z7ve9873vnuaFWGRueAHT/jCG/7wiE+84hfP+MY7/vGQj7zkJ0/5/spb\n/vKYz7zmN8/5zq+gBZ4PvehHT/rSm/70qE+96lfP+tajngVnjb3sZ0/72tv+9rjPve53\nz/ve+/73wA++8IdP/OLLngU2T/6fka/85uOZ+c6P/puhL/3qm5n61s9+lrGv/e4Xmfve\nDz+GwS/+8suX/OZPf3fRr/7205b97o9/aeEv//prlv72z79k8a///iOW//4XgIAFgAJY\ngHhFgAaYgE2FgArYgDvFgA4YgQMDgRJYgfpCgRaYgfGCgRrYgejCAiAYgiI4giRYgiZ4\ngiiYgiq4gizYgi74gjAYgzI4gzRYgzZ4gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4EoRI\nmIRKuIRM2IRO+IRQCIMJAAA7\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\nAnyway, it looks very nice for the most part!  -- Nathaniel<nl>\n\n--Alternative.Boundary.EegBWL:0M2Yt01Y75h--\n\n--Interpart.Boundary.EegBWL:0M2YtE1Y78F--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.49.msg",
    "content": "Return-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA19468> for nsb; Tue, 29 Sep 92 10:19:23 EDT\nDate: Tue, 29 Sep 92 10:19:23 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9209291419.AA19468@greenbush.bellcore.com>\nMime-Version: 1.0\nTo: dnd\nSubject: Re: Happy New Year\nCc: nsb\nContent-Type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.4099.19398.greenbush.717776361.2\"\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2\nContent-type: text/richtext; charset=\"iso-8859-8\"\nContent-Transfer-Encoding: quoted-printable\n\n=E4=EB=EC =ED=E2 =E4=E1=E8 =E4=F0=F9=EC\n!\n<nl><nl>\n\n(I guess there are several ways to express Hebrew in email.  You used the=\n\nlow-tech way.  Above was the medium-tech way.  Here's High-tech:\n<nl><nl>\n\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\n\nW1Zj4Ovfbl9pXlFaeXNZZdLe9c3O093z3vf/69nc29l+5W9XdntvcGd603Zja19qTlRaXmpi\n8/Lg3d3+c9rV3V/gZGjxX/tpaPr4c2n2X3jm+G/l3+DW/mfkbfNrXNPj+up52ttqYeZvT2F5\n+eX2/+pxWV99aWT/6ejv3/ls3+F83drlbXH1bl5u5Or2YW1sYXzs7WleZWF4/nDn2+tfbefn\ndGHk4vPtbefn5vdr9WNp6HdoWl/i6/pW9edYWmRr+Gdjbu1x49x04uDz193n+n/c73Nh5udg\n8mZjet7f+lp08mxgWWxhZlNeY2vwbeD7eOLn8+xudO304HL06G3jeVp89Gvq8Gtg4ehffXrb\n1nNl5+frb2ne9Gr78GpdWfPiWlhz3th3Z9vfb3VsbnBx7/FjVV7u5uN3+dHc7+pvb+5lUVpk\n/HddZHbo3eTn33/w3+pkW3Zh7/1Y4+Hp5fbZ52rz+2JZ8OT6a2Xl2vF8ePf46XRl7l1m6fts\nZ2Tlbln3fdvwXvvYem366d1yYuF3V/7k7u1eX+X8ZuPmbOD36/Rd6/53bV3871pV9PVa8Pn2\n4l3t3d/xadfkZ2Zi3fRX8OXk+WXt4/Ji3Of3+Fzg8l/+anF6YVBk72VybWjy8t/g6djg3t/2\n+fTb5OV8WOdxVvNza/dgb/ZjWPvxaf5u5d3+/ORuefZs8vxv725fb3h0d2dp2t9w5tzn7G79\n8WlobXVweHF9/XJm9OdscGx33vtg9ffq3mj37OfU3N3Y8/TefltccXR1VFzz5u157G9uXWdv\nZ3P25f93b/9vaGJp93fy5utt39jw4/T1+XR98PFlaHbubGVv/N/yfe7kee/h4nxt6nNp/e7w\n7FNZ4nj0aG3gd/lvfnpk+PJubv7l6Xd9eO9ra2Vr7nVy9ebyduv6X2xkct56XW746ex78nls\n7Nnv7evr3/t07XRZZGFlbnrxeWhebHxoev1z7fV5/u/q9fvi5vbj3dv3aX1q+nZcdXdec3hs\n83xkamRrb2zyfmx3dvju/OjX63bj7ePybff+eGx3bGJzZ2vt7+Tm72xx6PFsa/Hm3/Js7/p+\n+3x4d2/v5/N+fGd17mhq+W5+8mpzbffgbmDp/XLeeHDp7nf0bXLrb3t7eev1bd7rWXH2bnZd\nXOvo5etz5urn4/Tz7vX+b19xePDvbPLc4vL4+/3s/Fp68FpddXr07nh74uxub/Pze2Ff7mlh\n83r23X7t2PHq5mnr3HdpbGd+ZWT89PlfXG9+ZW3c6mH75d7jYvXX3ulvbejf9O7rcnlvdejo\nbHbm9GdkXm/pZFxhcXf3aWr4fXft6Ovs7/ppb+rscWdj9uN2+93r8d3l7ehcT3R3XmVgefFn\nZmv8/XJvdO74/Hbt4Xjx8/nz/e7j62152uLpfGDv9n1yefPqbVpwemprZn7vc2r4cXn+X/nk\nXGHj6+j+a+Pm9vz36OB2W2r+c3X48HdrcO3c3/hw6uTz7f7/+3Ri7+ZteWxrdWRjcWp0aGjo\n8O9oavd1e2zv19zr7OTc6nvu33laanr38Wby33nx7f78+mdfc310afh+bGl6+nttafDie+je\n5nrm/mP3b2Fse2x1a3nsb+3j3+px7Of992hw4/tt6e/+8Xvz8OFqXuNvWmpqY2pgX3zl+290\n4Nnf9nPe2+rveHN4buTnXll+4eJxX2zy9mBi8vJfYWv75fl+4+LzbnHv92doYXJ4bd/q6exo\n7N9nY+p89XVk7eN4bHt7+W1t/nt9bXTr4/Zfbfhr8X1i5Xdf++/k1eV56efq5Wv93uxpcWly\n/m10WVVgXmL5ZVvqe3jd73z7a2lpYGXx7unxcOPc/fHp+Ojtfen+591vY2p48l1dcvz6b3bz\n+3J7+W5seXjr5nFg6trwePP34vT+3eHw5udqav5nXlpXYV9ffHNo8fJ08N/k6e3m3+XedV55\n+fzh/mJiffllWVxr/G5vYnjp7Nvga+/d19bu+djddV1b9OZbZu5v+Hnz6HR4amjr+2laXXd1\naGp62u5i6OPsbmXv425ZXuv2ZWl+2+t63d/feWXf22ZbduvnaVpk6OluXvvh7W937PZ56358\n93Bp+v5q5e/27WFsdfTqaW53fu9mZ3dnaWNfeW933eL07t/d4Pr0anrxX27wbPx4Y3H5ZGv2\n73deZO7m/vd++97W4n3j7H5pbG5uffZ4+fNm7uX67992ZflqcuVzZWxu3+toaGb36Ptbavvz\n82H8e3Te7Pvm+Pzb53f7d/nsZmJ16XhhY158bnJtYPPg6/196+Pf8uPh8+Xxeujv/mxmcm96\ndPD5Y2T7flZb8+XzZmF97vJ18urr8ufj+vT75uNxbeftd/NjX+nqeWxfdvNlXm507PRnfunq\n5O733ut27eltZ2VuaV5j9OLr9njw7e55X2n1eXjo6Hv64+nu6OXg6W1caeDiXWDs6WxZXe9t\nUlp7dW9nedxuWH3e72l22M/Za33W2O1g+O1v7/5r9O9w5+Nrb/ju72JbXlxhX2/9aWP63Opv\naefY9WFp5d3+Xm3w6Wtl7P1vc+vnbFhf3NlkWnPo3+pt7Nzwfmtt+WxteWBpfOfe7m1y3d3t\ncPHd4fFha+nvamNjZmZ36PdrdPLkal5wdmtcWmF4/3H37uDidmzq6nh0dOrd5ejn6+fx39vv\nb//qdl9dZH51X2599fPz7/j/7e1ubmNndHr7ZGro7eTtfO/s6X556Xhi8uJoZmdg7u1xav3l\n/e/u8+9mcunl4eh8+Xtr7G5oc/Xua2l+9fzm+vD2Yvfi7W5v5+t58v34/25sXWtyc/BsfO56\nc//z6X5i9u9u/G9f+uDr9u3j7HLn4PD37ejhdF5r7eR6X19fdvlsXm7s3N3n9Obf7ePc82p3\n9W1cV1lrXF1sXWhoYvXt7efx7O/76err6+Ti5Pv86vXs6vPr+PN+Z3H+dnBt7+/0e1xfd25l\nYXnta3bj6ev7buPc8Wpvbn1uXnH1dW3+dG92/u5zbXzr7Wtge+Pe4PL149zfdXPx5uxhXmdb\nYnbs+2Rx49vrf/be3/pqfv307W1n7utv/P92Ym1tb2laY3hyZWFe+O338Hnt4Pzr4Ojh8u/h\n3uzv3eNueO3k8F/742lQWv7qX1to7+BnX+LnbHBt9/1va3jpcGHs2en+cf3y5/hhbfDp5Pb5\n29ze7HvsdWZxa1dcX3lzYVzt6Gh1fHXye2rq7m7y4vt09eXo7/zh2NTcevv28u9uW1xlY/Z8\nXG7jeG9u/vlkfHFaYuXd8VtYbt3r/H1+5fDv9vx6+PByZWfo6/teY/PoZWr27etv/PHwe234\n6H1x8dx3auXi3PFrZfDec2Vha271f15efnP3e3Jiburr6HPs3OR/Zn7g6G5nf/9+enH8efVr\nY3Rt7+pmaW10eHLs/mtu7ubwcPra3+vn8+rrZWBnZHzw+mt+fOjveWxmefnubWtqefJ8bmVu\n7+bs+evncfp4++9sa/3za11m3+1t6Nvi6vTd6W3xfuTtZfXsc+zm/GFbZGxjXVxnbWZlevX3\n7fr1fP7qenvu7N3f5Ox65ufy+ero8+5/dnJxd29gYf7ral1z+GVj8/htY/fh6fls4ODy+PLq\n/HX462Vbb/hkX2/j93p7fu7/fOPq7uvt9v137vZneuvr9HZwf+L2a298e/Hu+3tw8XRta1t2\n4Hpvf3dyaWzm92x27PVr+97X72X75uP0ZHHj+GVaYWRq83lvdW10aHhvaGhtbmn23unn5OXj\n4NfZ7OXt5fNjdm5savz4ZFpqfmdbYPj5+mxx/XxoW2ptX3fl/WXr3uvl3Nzq3/x+8Wj992xj\naHBsbOvjcXfzfHXv8X7v+GJ5/mN8cP3h7vP0+/hzcG9xeG16fmVpdf7ifVxw4+plZfn2cHRy\nbvbu9vLy8uja3nJv6+Z7bH7n3+5ue21z4e5kYnZsbHv+7Xt96O1pa/Hm9Gtt6OH0dePd5/pr\neHNyXl5YXmpfc3h+ee3qdX/16t56eN/d6Hvs6OPm6urq6nJ8/31tberkcWNbcfJcWFrp5Xxr\ndObweHxufXF2eHR1fvXy93poe/R9e/L49+Xf4O3q7P31+G9oZ2hvbHF27+N5+P54alxeYnds\ndPL26d7V1ujs5eDr+3NjcXdvaWNr9XZcWWFjdW5aYWNw49/ueufb29vk5ebr6ffyb2/s6elv\nZnr+amVbXGl+dGj5e3R1cfb+aXXt4+917+Ls+Xl48uHqbWtzb/5yZV5v7PJwd+v2fvhwYnr5\n5u1vbPDsev/97+brfPDb3Obz/+3w6O5mXl9eaWRfX2nvfG5ycuTg7Wpp7e9xYWNvdmRi8et8\ndePa8Wvr2+f/feLifm5873N5eXj58ep+ZmJlfPN6aWt2//72b2v07n5wffP5/mx98PDh9+7j\n9Pfz+WNgYF5fYWFxfGJrd+bh59/q8enj5+vx6N/d3fDs6/1rfG5hZm1vZmNmX2h/bnV8cnNr\n9ex28+zw+Pjx6+f3c+ztfvD1+mhlaWJo/X1xeu3s6ubn6O1uanZxYW5rZG9xbHH57Pz57u74\ndfH7fnT23dzuc/Ln9vrn+Xv+ePt/ffPl7nlmefpqamJeYGJwd2Jfb/h6e3vu5vJ29+fm5uXt\n9PH46+10Z3fo/Wl3cGdzcGtpfujq8nvz5O5wd3pye/pvaHPs4+Hk8Ozi6+vq/Xp4b29lY2lf\nXGV8/Xp4dXZ3ffr37PDi3urf4fZv9/dxfvJ2YGFyffT9b23+7Hd1cXT+cGVi8uHf5u309OXk\n9Pz8cvx2YWh1+HBuaGh+6uL9e3H273FtaXfv9nVvfH17dmxtcP7r7Hrw7/Z27+Lu7eXxdPv1\nfv90aHLt9Hx19Htxc2RhZm54b37s+e7l6/p6b3j38Xr/eXB2f3p88/H27+l6amxw/ndraWx7\n/m53+/Dl4fxx9tzc8PH29vz+cHR95+V5/Wx0emdiXmRkbv9paffp9nX67uvv9HH/fnp+/PHv\n7O3q3eHk4OHp+/v7dGFXYG5qYmNs+u3n7Ph8/e55aGv38nh4/Orj6vHvfm/z8f9tZ21oZmVm\neOvp8eXs9+jo7fp/bnPz8vDv/2lnbfH78upvYm348/Dn4+b39enp4ftv+/P1+G1iX19kYl1b\nWmp+/XXz7nX6+3B46Ofp3+Pj2dzf3Nva4N3sd3t5bVxfX15gXFxocGdbam5gcfDr+/Pt8+n+\nc+/w7vh16+vs7Hl+d2hka/b9/+vue3rp7e3n/vvm5Prz6Xl1c2pjZPfx+PV6//T5eXh+bXx9\nYmvu+2VjaX3w+PPy7PHx/Gx46N/reX3m4/j7emhkafD3Z2R7d2FmamloZvn5/e/07Onv+ujg\n63397e777+rz6fNqfvpybmFgZWlwamlncvDy9Pv86fp/7Pl96uPp+/j0fGllfPf+a2FocvL6\nbv3o4+L2+Pv293RmY2t/e3xxbXJqaHn7ee/p7/L26OH3/u/28Ob/a3vx5OdybPz7aFxhb3Rv\ncWpyc3ju6vV1b3bvdmrs3+t98fN2evNxYmj54Xtt5dzh6eLa5njv7m5lZmxmZGppb2hpcHRy\nce/9cnF87eXg4uvv5Onq8Obt8urscml+b25vbHZpX2r4f19tcmZwd3589+3y7ezl3+b0cPf5\nbHJ+a2Fv5ur0++rocGj95vJtbGtfYnJ2dnBzdfz/bmzu5/5pa/Dh3t/q7d7f531vaW53cmhk\nav32bmd09Oj2+Pj1fn7q+XJscOj0XWzh723//H1sdvlvaWdqbHR2eW9pdevqd3z6b3jn6v7+\n5N3e5Xvv5ettXmn98XNt/nl9fXHr5/tv/HdfaX5pXFhu5e1uZnLq5HBtbf7vbmlw5u1+4OZ6\n/fnr7H565eHyaGRvbWl5cmhx+Ht/6n7w5+j9e+/q4t/n6vVnZ25pavJ3XFhc9PdjYW1kavf0\n+/j36+/48+zh//Pxdm107PN7/+bn/u3f5+bu6+v4/HpoY15cY2FlaWh98e58/er2bW91aGjw\n737v8erq+vDe2d/k6u3+c39oYGJtdWtlZX/8dHb89/j26vD28Xh67e7u4+lvbXlwdnZobGpu\n7ev4/u7lfGFo8+9nbHv/bm3x8ftxc/Lv7OHs7dxrXM7fV2L+5+VcaNbd9f506OtXWO7dbU5Y\n7e5/cHXs5F1a7ut+ZWbn4m928d7e7e3c5H/s+GptfPvq6+r1cX3u/3NrYmxtXF5vZmVxdnpz\n8fN3ZnHn3N94+unp5+Hqfnzq6Onsfvf37Hdq7/xsXWF0aF9hbXJsfvv4+O/o5evo3ujq4+Dq\n9fj1eF9fbW9jXmB0ZGn/ZmZkaHxzbGxz7OPh3N/j5t7a5PB37uDvbn7rfnjzb21w7t3oaF1o\naWloXF1mbm929/nv+nb9/Xt3cnxxdfPs83Tv7ndx+nzv9Xr17+n/7+bt83X03uh8bm7z+Xdn\nbH70cn/s8Xh3cGVhZ292/v13dv5oc+bp83Z1bv75eWt0bF5t7uv79eLn9Pf6fXjx/XV7bWr6\n5d/m7/nv4+94/O7z/XlpYWZ48vB5cWj/7G9pcmhy/3Ntanjx7fds+uHv929t//Pm6+/o53x7\n+fz6e2Vgam9m+ub4bvPl7/H/8+rq+Pnl3+n3fGdt9fV9d/rzdmNdXGVoXmNub3zu+/3o4uLn\n6+Tm9Hh6+Ovs7fR9dXnw9nplZv52ZGL54/h64t97f+jsdXrt6+zs+O/reHp0b2tpaGBfXF9m\nX2Fw/fb26uns6N7b5erh4u55d+rs9X196enp+PZ7a2pzb1lXbX1oXm95+vdu8Pt7+PfycWl8\neejh4n358+1iZt5l43No0ubv4HHd3v3p5+Rw8e5iZ3BrdFxWdOdyW17+7XD6+HFpeXr8Z2jp\nfnFtdefqdu7ycXvu7W5lbvX1dm95b/v68Obs6eXe6O326+vx//Pve3369/V9ce3+/uv3fnZp\nZmZgXlxkY21va2ttf3hsYmZ97/jt5uHf497c5Pf5/Hx3bHDze2nx4vfn4d/v9vL++W5xe2tq\nePj7dnr29vHn92hpbv5tb2xs/XhjY21293ZqZnN46fJv93d6+Hn53+Xt7ejw9Onv6ODl+Ofq\n6uTh7XV/9nZfZmlmYmv3c2BeZHVxYnVvanR++3hubXrt7ezi297o4N7h83X88u51d/54c/Tj\n9Gl26e1ra25rbnp3/XZqbH1lXF93cWF46vh95+Pe63/56+jx7ePta+zmf2Rre3ZtYv7+dnB0\nevH69/tsYmlzfP9lafPn5+7j5e7v8/977uXpe2nv5Ox3a2xkZ25oYmru5/9qavb3emxt7397\n9Oj2a235bm787uvt8u7p9//88vt97fT66/F7aHF4b25nbXV2anz6ffF5+fv05vPq6//p5eHr\n+Xx2cmdxaV9iZl1dYmVkZm1tc+7d3t3n69zf5d/i7+7k6n76/XloaWdr6fBvYGNlZHdgXG5s\nb3x3dvrj3uvm5+rm9/10b3lvcm92fnl1eHn683t/+Hh2+/Hv/O36cHV2+fR0ffD+aGZ0eO3r\n7u/r8Xbx9GxvdHVtZGt4d/j2fX12b3j76vH1f2/78+3x+Pj7b2lvc29sc/DueX746ff5fnF1\nfuvt9nZ58Oz3d+/zdezqeu3z7fj6+/bra15pcWhrZF5caX17YGT86Or87u7d2uzu4eHe5O/t\ndHF0cmVvenZ2cHTw5/b3fXV7+mlsf29uaG5zf+rqdGxsfO7xe3987+v0+3Xv4eH9c+7l7H78\ncnJ48v139/ryemz26m1lcGllb3ZpbG969/9rYm7t7/fq6uvj3ujr7ODfcG5++2xp/m5udv5w\nan54bn98bWzz431jY3H6+fh88Obu5uno5ez3ZGd09vJwdnl8fXv+6vNybG1ra2loXV9tbm92\n9O/t5u7r4+7v8vx/d+3p6vPy7vjt5+rvcfrvcmxpc/z5bXD5+XVebHBmbXJwaWNv+P5y/PTv\n5vj19erm3d/v/Xvx6ud3bW9qa3r+d2xvdGlmY216e/rv+/v38unzeefj6uju9PT+9urq/G/2\nfmNganFoZmtrefx1d3Z7+e7ufvLf6f91dP3w73z6b2z49Hl/937ycXPq5vP/enFmee56b279\nfHhscX3v7/P4+N7f4vxy7vP3eGdjZ2xvZl9faftsZvnn6ezs+2zt5/5yfn1x+/Hp7evn7O71\ncnB7cn17d3h0aWlueHR5/PHu9/tsc/xzcn56bHz9b/35dW92dm9+9f1wfuzz8u7o6PPu8vv0\n7vtpbnD672psfnny5+12/Pd8fmZv//J4aXX4ffPx/fRucf5rcW5+4+Ln7ef0evN7dHZpZW11\ne/P0+HR18/N1bGtoeP50bHf6/nFxa2/97/99evz88e7u5X/68ejn6N7j+nf69u14bXJ4el9h\naGZyfnb7evv0+/p8b2xnZGlra379fvDt6+fo6ejh3+j5enB/dmxy+n5qbWVt8fx+bmZr+vD9\ncWZqeu9wa2567uz7++vf6Whq7t/l5+bu/Xb0//9ranViXGX+eGReZ/Dp7vDk8erh53xqe/ht\nbf7w8vz9bW51/vP1dmv9eW1kcPPp/P19ffjp4uX0ee/r7+Xsfv3y73h5/WxibPZ6b2pmYXH4\n6/htfX52Z3Dx53t5fHFv+ejp7e3s7efn3d7p8HBqfPrr+mVlaG5taF5hbmVfZXl7fPzv8vfo\n3un1/O7u7/L37vb+7u756OX5cf12dvVycHN7a3bv/Wdpc3Bq8u13aGR3+/b8ffTrfvn68/Pp\n4/Lm6eXlfGdtevfo5nV0/3r+YmFjZ3xuZWl87Pp3f/rn6PLv6e3w8HJwfOPj+nx5bXd7dXFs\neOrn7vjv6vh++/f+/21ufXD87vZoY3j/d3X+8HxsaXXr73p7fPTs6N/u+Ojj7P305+13+/do\nYXvvd3xpaPt9amtsZGFpc3Ztam1/++7h4+Pq6ep6d/72+Pz07Xt+83t5cnP15v5w9/T9b2dq\nbWZpfvZ7+O3zal9qc3t+eHr5+PP2+P756fxsZG/ufnb+7/X+7eTj7/57cG9ye/10bv7v//bv\n+XxubnL08/zu6f5t9ux/am/++v1xb/l4bWxqXmbx+Gpx7PNzeHX99vd+9+/y9Ozq/vTxc3T6\n7Ojf3fVufXb78/h2evV4aWVueXl7amx1c3V6bGr05PDt6+vm6PVrYWh6bmxzaffp8P55d291\n/e/3e3l69Pz77OxxbO3n9nlwfuvvfHj26t/e53v59XtsaG1kZ2VkaGltaW//efvv8nV67+3k\n6n747PHo5PP59O7u/ff3fVxfenRvbG158nNvd376b3Zqbvfn4uz0fe/tfHj89Ofj7/7ycPz4\nX19j9O13YWDr4v95aXDs63dfc3vm3u9mbPd17ep3aHj9be36fvLp5N7dfvN5ePH772poZmlt\nbmtle/Lmal1Y/tnzdVlf89zlXF9z3M7eZf3a4OBnZ3bd2l9fWmb+7Whaav/l/2Bk4eTf63ve\n2dTqanD53XlaW2JsfP1rcmRhaG9zaO3g9+vv3t/n1trfa2BrbN53bW5j9f1jWlxy9+jd/3L6\n8OlvcWVq63ne2N3mXWj13txzXWT31dH5YFTgzulMOT5jxMdnSk7dzd1NSGfLw9pbV+XJz/tU\nc8/U809V69DPe11f7NvyW01Yc+NqUVNa395oW1/m3uP97tff7ebxffr68drP5F1u7eTuZPl9\n7Gk8MDvgtrpkPkTJxeBJPfC9ts1LSFbGvdpWS2DbdU5LesPL0V5kw9LgUVLtRjZrtLLNODdJ\nu8Y9NjP+7j1F3rOuyEw698zh5U7EuLvGSmTSwMZMTU7ax8pUHx86r6K9NSljrbluKi7Cqqtf\nNjvSrbtmQkrQyvc3Oj5RrrfLST5MWcdK2re6tMfl0ry/RT88OkchG0Oyn7c6LD2o4T4wL7Cr\nrFc207+t8TE/V7nbRkVLutjWzsm3x8PXxbrEyFlZcGM/LCUWKKusqi4yOLKuKD45t6PDSyvI\ntMXBNNixwGUw4sO2tTrpx7mwxc5gvctLbD9QzVwtFg8/nZq9ISzQnXwhKFCdo9MsM7i72kdD\nsrHfOzPAuLLQRL/BtMrdwcnZMknAxkcpJhgmq7PpOE23pNseK8WqrV47aLO9Qjtcta5KMU+0\nsdZm+6us3OvLQeOx5ezCvkY0Hg8YurrFzs6+qMkmPEHmx830v6zPTN/bsrQ/LUq9vcPFvKiv\nZ+++vtVLMD/Kt9UuJy0mGyU4uq7FUcjPSU7b1ci528+9v/JV1MC3v8vUfFvSuK639EZMZeZO\nQD8oKS0kLjpA6LboT+1wzt/uTMTD0Vnjvba6y87Ow8viy7y8vsDCvLfCxMTcRDc1YFwsJSks\nMDAnPrvB2/7nvrJzS2S/xWM/4Lm8zO3CvsxX78e4ury4s7W3v8q+eDw9TC4pKiAlLjBS3k/O\nvtPuY2nQyGBcys7TycG6wV/8zu3T0cWurbSysq+20evQSzYuLDQrICIpMzIwX727yPfPu8Tq\nUNO/xtPGvr3J08zB41loxLW0sa+uuMLGzXlZPiwpKCYpKykzPz5M/M+7u8rFwdjsZk/eyNLF\nxNC/w9PLy9a+uriwtLq2ucvmc0o4Ni0qLCgnLzU3QT9M0d3dvre2srvIwc5faGNn2ebv6PTd\nzs7HxsrGx8jAv8XN0cnI4VJCOjYwLjAxMDU3PEVT887Fwb2+wcXU4OL38u/w7dnJxMLCv7y7\nvb27vsPN1e9aT0pCNy8uLS4vMDc+Q0xq7s/Av8DCwsfJ1Oji4Ojb2trKwLy5uLm6ury/yNHp\nW05AOzczMC8uLS40Oj9LXuPNyMjGv7/Iy8zU1NPX0s/Py7+9vr26uru9wsjM2mtSRDszMC8v\nLzAwMjk+RlDzzsjFxsTHzc3Jyc3T09LPy8zHwL28u7q6v8bK0+VuUkA7ODU0MC8xNjs/Qkpb\n6dvRzc7Nzs7O0NbOztLOzMrDv7+9u7q7vcHJ0OBiRzw5NTQzMzQ3Oz9GTVZ029fW1M/P0M/U\n3NrV29nPzMfAwL++vLy/yMrL3HRXRT47NzY1NDc7P0hPV3Td2trW2dbZ6ebf7Oze2dHMx8TC\nwb26u77Bxs7c/1ZJQz05OTc3Oj5ARU1d8eDl2tHc5u/u7fx06+vs0cnFwr++vb2/xMrP3/Va\nSkM+PDs5ODs/Q0lUYvrYz8/Mzc7R2uTf29zg7N/V08nFxMPFxsjN2+5cSD88Ojk6Ozw+RU5b\nZ+nd2dPPzM3Q1dbU2NrT0NXSzsfCwcXGxMjM2PFlTkI8ODc3OTg5PT9MXXjf0MzFwcXHyczQ\nz9jo3tfPzczGwcC/w8vR2u1dST07ODM0NTU4PkZPXu3XzcjEw8XEys7MyszPzs/OysbCw8LB\nxsvO3XZbSTw3NDEzMjI1OD1JVnzbz83HwMDDx8nKycnGx8fCvb29vL6/wsjSdldMPjgzMDAy\nMjM2O0VTW2Xf0c3Hx8jIx8bJy8rHxsK+vr68u77DyM3fcE9BOTMyLy8vMjg8QUpUauDaz83J\nwsjJzGldtrq+sbq5t7OvvMTF5VxHPTksKCssKi84OEVU28TLzru8/8PIXdLZ18TDvLO7r6qy\nsa+vyGPsPikrJyAkJCksLUD8aMWwwr+uv9XB1/V1ZsvZzq+vsaWkq6qoul1xOSgnIB4dHiUm\nKENcT7uwwK+qv7S238ft9MTav7K7raapqKqsv/V+MCgnHh4eHSIkK0E+cbTBvqm/uq3awb34\nwMG/srivpqmpqau85c45LCwgHx8eJCQpPDlIwc/MrbzUr8HSvMnHvbi3tK2pp6eqq7Tow0kr\nMSMeIR4hJSQzMznK1360udmyttO7vcm+uLS0raqpqKurscXCWzE1Jh8jHyEkJS4yNuTd6L27\nvsC4vtq6vti1tbysq6mnramuzL7XMDgtHyUhHyMkLC8xXuruv8a/v76118O3+rqvu6ytraOs\nqqXOwbguNzUeJiIeJiAsMyxmZkXAx9K6yr6/0bnJv6y6rKiuoayrpMu/vS8+Mh4pIR8oISw0\nLGpbSb3h5rzvxM1pu9TDrruqqayfqaejvrm9Mz8vHykfHyghLTIu7F9XuePPt17L0lW/38qv\nvqupq52pqKDFubovRDAeJx8fKB8uNCzuUkm65M2/asB65rlmu6+/qKmqnquloM+3uS1GLh4p\nHyEoITMzLtZMTr1iz89UxE31uU66r76lqqmdqqSjzq/ALEoqHigeIScgMjEz0kxquW/DxU6/\nUly5T8Cvv6Wppp2roaHNsL8rPiwdJB8gJSAzMDLPTmC7d9DX+Mo/2r5Nt7S+pKmmnamfo+Sr\nxCdNKR0nHiMnIjoyNsBnZbjn8tNqbEN6ykm9trqmp6SeqZ6n6qnmJlYlHSgeJSckPTQ6uWZh\ns9nl5GXoPevBTb+1uaino6Cqn6Rcs70hNi8cIiIkJic9PjrGvVTKuW5FyOM17b9kwrOtqaie\nn6ygolrTvCYmLB8eHiYqIzZ8SF+xv02/tzxJvz49ysS/v6yhqqGbqaemy8VDKjUeHiodIi8u\nMkvY6MLB6s3WTk1bQ03T1Li3r6OloaCpp63eW1QuKiciJiYoLTZCQ/zS08PUWu3jXFFOacbB\nxL+5tbm4srO2t7u7vdpmbEE7NzU3NDI0Ozo8QUNKRUFOXlda8trLxsG6t7ezrqyvsrCyusPZ\nVUE4NDUxLS0vMzM3PkFJSU5vYVv+/unTy725uLKtqamsrK2xt7/kTj01My4qKSssLzM0OkBE\nSld0c3rg6OrXwbq+uLCuq6qqq66wtr7VTTw3MiwrLCwsLjE1OD1IYFxm5djO3+rKwcC/ubSx\nraqqra+vtb3aTD86MC0rKystLzM5OUZdY2Fdc+RxX/jaz8W9uLGvrKiqra+vsrzZXEk6MC4t\nKikrLi8xN0JLV2lu2+X03N7Yyb+4tbOuq6qqrK+xt8XnUD01MC4sKistLi80Oj9JUGjj5+LS\nzczNyL24t7Wwrqysrq+yuL/ZVD40MS4qKiwtMTQ4PUJNY3BnbnrZ0OLcxcC8trSysKyqrbCz\nuLzLW0A5My0pKiorLC81OTxKYHFx8tXLy9LKw7+6tbGwr6ysrrK1trzQUUA4Mi4sKyorLTE0\nNzxLW2J449bNzM7LycG6tbS1sa2srrS1uL7PWEY7NC4tLCorLzI1Oj9NXfnq59XMyM3PzMi8\nubi1sq2srrGzub7MWkQ2Ly4pJycrMC86Q0z5/u9fcNZm3N3Vubexr6ulo5+lrrK03zIqJCch\nGx8pOjM53r+wx860vUsuSEgyPz/Crbetn5yfnJyotbdKJyUYGiAXHSxCQc+yt6W12rLOLyU3\nMSpHR66jr6KZmp+cna7CwTMpGxIiHhYhP3DmwLqnrU7kuzciJTEyLUa7oaepmpqdoJydr13b\nTR4YGSMdGCp+w03DqK/eQvDVKx4qPjAwx6ujqKSZnaWhnKTEf8I/HRsbJR0ZNs/jULesuW06\n4+AnIC88Nj68qaOpopyipqSiqLRfw04dHx4fIR0u685Lu63QfExIUS4jKj07PLWspqGjn6Gn\nqaOrv7ncPyghHx4jHi9JTMu6t83VVUBFNSwpKUBf6rCjoaWjpaSqsamrsch5UScnHh0lIyw/\n0+DAvtjqRzc/NicoM0tRuqiko6akp6uwraeusK7DRC8pIhwdIy0uPc7CzeLNZ0JIMi0wKFDI\nwq2lpaeoraqrtq6orqqqSy83JRkdHyIsMUDTz1fMu1JKVC8tOEhYwbKppKytqayyr6yrqKin\nqUcmLiIXGRwhJSk50dBvuLjPy1ExTuA5XLa2rquurKy1rKqsqaWpsK22MB4oIRcXHCIiJDBv\n1XnDsLjOz73BztXWtbG+sq2xsKypqqyyr7HLSktVLyEmKyEcHigrJixG49XNtq6zt7m3trm7\nuLC3vr3N2sO4xnHpzs9mT9fbRURIR0E4ODoxKzE2ODtMZtzkz8nAvry7u7rCz7+uvdbHxsXG\n0c9qREtGQTxCQTo3PUlSVVFq2tLMys7Lzmpi7G5fbNfj9MC7xN7cy8pqQ09YPjo5TOtVQE9g\n3s9X4767yPXZvsdoX8/OeHTXyMNlRrzHWkk+YU03QURCUFRTRm3c+ldOaPjazevoxb6/2vjC\nucrSzL/OcFnYzFZDPk5RPj5BTktETlnf6f7e4+PbzMjSzsvJ6fHQ3nJi2s3g5tvT8VJk/k9N\nY0o9RmxcQUJfcVhS6c3c6M/Bw8XBxdzc1dfnYVvWz1dKXO5cREl5401FZehpXO3Mz2pk19pf\nVtnKfUrXv9NPR9bH011Rb3pwTkRHVFBj2d5f6M/b+u3R4fXu09bu9+HX6vDl3t9+Zvbe6V1T\nWl9eUz08ZNVZQlrLzlZQ28vpW9a9vth+0sTOVln75P9KW9noWVNfUkdiz9xTT+HwTExVZFVg\n29DfV+jFyuJd2b7MZN2/xfpPWcfPSU3V6DcyU8xLM0i8vUo6xLDUSlrAwF08Td3lVUNRa+DV\n3t3O277LQ/SusU4zTbrRLy9vyk8977/FYWPFuNVJX9JrNzvXxD40SbbUPs2vr08/yrhdOkbI\n3UFCeNRHOEi5t+hmu7TqNjZa8Ptlxr/F0uxg7vRTTk7fd14/RtnvSWq6sEUqRrzGOT/It105\n1bK/R0i+rb1PTc3NPDVgw1MuOs/FTj1cy77f1MfIWk1i0+tObN7QYdva8Wtd3OB6SmL0+1xg\n1szP38bAymNw29TaZ91tUEA1ODUvKy9BSk7mv7u/w7q0tcG7s767uL7GwcOxs7+4rUYcJTAd\nFxgjT9I9faWhtdNay7NfNtettcbFvKutvrqtrbCzwL+yPhEWKhsUFyTAobXHn5qtWS8x0Eko\nNLOusbC2p6KwvrCutcNp7b27JA4YLh4ZHzWnmrLWqaTGLyIn/tsvTqiko6e4r6Sx6cC9yb7Z\nabCpPhIRIyQdGR+5maPVvaasVCMgNGnMbb2opJ6nxcK3wczFacaps7aprkQTDRkfGxYfsZea\ns8evsE0eGSvTsrm4qJyaps9cyrjGSVOxp6qutK2uIwsOGBoZGi+gkpu6x7vSMxwaNLGvr6un\nm5y8P0fr2NH6zKihqq2sr7JMDwkRGRseKbyWkKTf19VDJhodX6u1q6GhnaT6OFHezLnDuaWl\nr7Gssb8kCQkTGR8oQaeSkqfLYD84JhwgTK+nnqKmoarJQkZS0bTEw6+qqautus8mCwkQGCIt\nRa2VkJ2yVS8zKRwdNbWjnJ6in6S3RzY4Ts1iza2op6apsLw1DgcNFB4tOsWbj5WkwTIuLiId\nIjy1m5ien6Gpuz8pKT5T47SwrKChrLTOHQoKEBkqMTmrko+ZqNU4MSQdHiU7sJyZmZqkt+8w\nJSktNsWsq6ajp6uyShgMDhQeNDlcqZmWm6npOTMrKCgsPbOdmpujvfFLNSwtNE+8t7eppq22\nxkcgFRYdLkNCTc2vqqyz3D86QVlVVdSwpaWrvVVCOjc4OD9Yx7evqquvveRWRjInJjBMck4y\nLT3axtlPRU9r3Ma4srS2t8LuTD48PUZn3tDFs66yust1UU9W3tpeT2L+TjcrJyguOEJGS326\nra2vsrvS2c/qTz9GYs++vLzBzNHQ4l5QS0tqxbi950xIUT8tJicuO1VlWt66rq650fH+XFBe\nfPbXyMC7vcrhXlVdcV9PXM+2ra/BZ0hCQD0wJycvRn32b9C+u7/cTj5AWenYyL+7u7q6vt5J\nQkZc7+bfz762sLXSTEdKRjoxLS45WthuT1vj2fNOS1T61szEw8O/vcPU2OBsXFTtyc3a0sXC\nwcTiS0BDST80MDhP4epTS05k4uRrYXfPydTbyMTL1eT8c2118/DSyMLFycO/vctbRUFDPz05\nMzhU211AQVvMy+n13t7d2OHhy8zR3ejbz8vmfNbExcfKxb68xF06Mjk9Ny8tOGbP5VZb1cPD\n0W1p2dFuVO/Dxd9i5cTEz9PIvb6+uLm6us45JyEnLisnLVW2rrG7wb7E2Uk7QVZmRkfPs7PG\nzcS+v9Xlv7W1sq6usuIrGxcaHyIlM76inaGqr7ncOionLThKd9GqnqWzwcfeSjhDuq6tqaeq\nvDMaEBIZHSMyu52XnKatt10rHx4qN0TJr6CZnKzD1G4+MTbTq6WlpKXDJhUPEhgcIUKom5id\nqrnQOyEcITA/VMCflpqmsLfJPiwv36+qpKSlrzcYDhAZHB4xrpiVn7G5wzceGB41Vmy6o5mY\no77LxWYzN86rpKOlo64yFw0PFxseL62YlZyty2oyHRcdO8a9rqGamqv6WWlAO2m6qaKioaGw\nMBkODRQcHi+rlpKarc1PJxcVHj67saebmZ6uWzg8OTjXq6CenZ+krS4UDQ0RFx01ppSSmaXD\nNh8VEx1IuK2hmJWcuDo9Pi8v6KacnZ+cnbUkEw0MERceQqGUkZmq4C8bERMfZa2km5SWoMA5\nMC4sN72knZ2dnJ67JRMMCxEYHkmfk5CYqmwrGBETHt+jnpmTmKfPLSQsMDm1n5ycnJyguiUT\nDAsPGiVKoJKPlqhVKBgPDxzqpJ2YlJik1iokKS9EsqGcmpuepLYuFg0LDxkhO6aTj5anTiYZ\nEA8bXKKbmZaYoMgnISw1QLuhmpmfoJ+tMBcNCg0XHjGqlY+To08oGxEPGVCfmJeUl6duKR4l\nNFWxnZqcnZ+mtTwbDwwNFiAvupmPkp/fKRwTEBc4pJiWl5umwSwdIjZut6Kcm52nqavYJxYN\nDRQeJ0+fko+ZuC4fGBASJK6Ylpian7M2Hh4w9LqpnZmcpaytuT8cDwwPGiIvt5ePlahKJRsT\nERtxnZaXmp6ndSMdK267rqGamqKvrrRSJBQNDhYfK86dkZGd2CkeFRAXL6aXlpmdpcUsHiI/\nva6jnJuhrbS2xzQaDw0UHyQxrJWPl7I0JRwTEx+6mpeanKGyPiIfNMyypp2bnqiusL4+HxIN\nDxkfK8mbkJKiWiseFREaSqCampqco8wnHy1SyrCgm5ykrrS65CUSDQ8ZHiVdnZCRn8k0JBcR\nFjGnm5ybmZuxLSAtQ0/ZqJuaoainrN8iEAwNFh4lTJ+Pj53BOSYYDxMqqZ2em5aYrC4jLTw/\n86mamZ6hpK9iHQ0KDxkeJFicj5Ggy0IqGA8SK6yjopqTlqg5KzY6MkesnJqeoKGnVRgMCxEZ\nHCDPmI+VpL3rLRgPFS+6sqeZkZWnSzxDMSo+r56cnZ2dpj8WCwsSGBkfyJmRmaa0vTcaERk1\nWGWymo+Vp7/D/DQoO6+goZ+bnag3FQwNExcYIMablp2oqq5PHxkgMjA02J+Umqasrb48LD60\nqaukn6CrPxsPDxcZGh9Lp5yjrq2rvDojLEUxKze6n5+oqqaqwE1OuKyzsKqosk8jFxUaHR0e\nLM+trri1ra28UUvOYDQtMtOzuryvp6aturOoqa60w9dfNyIYGB4lJSMqScXG2861q6uztq+x\nyzwuOmVfSe+zp6iurqmnsNBOSUc8LywsLjUxKykpLC8wNETKtq+qpaSqt8n7VEtDTdfAt7Oy\nsbnPUT89NTA1UsnAw8PBzFk6Ly0vNDU5SNrAxtTR3FtCPEZ1zbyzrKmrssHWaUY6N0F+18u+\nuL3H1V9DNzAuMTk+SlZm7G1OPjtCTFffv7KtrrG3ucHkU0hRX19d4cXAv8PG0XZNQT9CREdJ\nUWBaQjg2OTk4PVnMwL6+vby/0mJeeH1p+NTBuru9vLzA0XRka2176ujq91Q+ODc5OTk9Rk1P\nXH/j3n9dXWj19+Xc0sC9vr6+v8DByNLV0c/Kzc/aYUxIQj0+Q0RBQj9BSU1HQkRNW2Tr2MzG\nxcnMzc3Pz83MysTBwsPCxNV8Z2NfYP7l7WpTS0lAOjc2ODo/Rktk19LP0NDS3OTa2NHOzcfB\nv8bN0Nzj+WJp5tTQ193X2G1WT0pCP0BBR1dhWVRXV09TVlhgbOre08zLzMvU3d7l3tXO093a\nzMnN2N7p5dve+/zuc1hLTEZCPz0+QEJITl3q4OPZ0tnU09zb09DT0s/U397a2unc3NrQz8rG\nyMrP5WlRS0U/Pj49Pj9BRktSVVphb+nf29fQz9DPys7Xzs/Xz8vLycjJy8rLz9vY6l9eU0xH\nR0hBPj0/QEVISE1XbH11bN/R2tPQ2NLNzMzLx8XKzM3OzczOzc3V5OfyZVRKSkI+Pj09QEJE\nS0xYbVxadO3X2NjJyMjGyczNzNHb3NTLzM3HydDQ2dxqT09GPz8/Pz9BQEVHR01RXG951M/N\nzM3I1NnP29rPyM3JvsO+vL+9x8nWcFdLRDU2Mi4yMDI4PkVH9NPNwL24vr++xsLK083M0MW4\nwr61u7rAxmdJQDYsJyooKSgqMjxE/8G6tK6srq2xtrrG1+Tb5OTf1cnDu72+vMRpSD01KyUo\nJyQlKy42QVjBubOrq6yqq6+vub/Ay8zOzsrBx8C8z8nvOzw3KSMnISAlJysvOkvKvrSqqaqp\nqK2usLi/ysjM0tXDwsS7v8jJUDk9MCImJR4iJiQqNTdfx7+vqquno6qrq7C5v8fGzOXBvtG+\nus7Kzzw/OygnKiEhJiEmLjA9dOq7r66ppquqqq+1vL3Ezs7Kyca8t77Hu80+ST4qJykgICIi\nKCwtPGlltq6xqKWqqqmwsLrAxOHezMnOvry9w8DIRk5GLScpIh8jIiYpKzl8XL2tr6mjp6qn\nrq+0wcLO3trG1869vsjEv0VGRTAoKiUfJCIlJys0UU/MrbOupKWrpqqusbq7wM3VyMzSv73C\nzcblPE46KSYoHx4iIScpLkL+XrSqr6ahp6ikrq+0xsbX79jX78a+xbu/ydxBQTgmJCYfHyAh\nJiwwR9LQraaqo6Cop6WxsrvOz+hd7+Vrw8XLucjIzD4/OiQlKB0eIiAlLi9NxcurpKmjnqWl\npbC0vM/hZFH+WFjLx8u9tsbdTEQ+JyMmHxwfIiMrMkvWw6+kp6Seo6ikq7u4wl5bXEpLUuzF\ny8u2uNVmTkIvJCYjHR4jJCgvPt3Gtammpp+gqqartr3F6ExKWHZKZ8jGz763vMRXSUkuIycm\nHh8kJikyRdG/tKinqqOhqaqqs8DG3VFGS1NCU8/15b/BxbzDPjtNLiQoKCEkKCwxOmC9wLqo\nq6ynpautrbTD2dp0RUdjUVj+zezez87X1OcwOlkpJy4pKS4rOFY937nMvqqvsKqtr6+4vbRS\nfsBN7kXS3D3aRcdXP788y0Y/Ok/8KEdHMTs6PXI5Ru1pcdO2xrS2uK28vbi83MrEXNFQWdZQ\nTN9K/VdZ22LTRlhPSUM8QTxIPT0/ST5MX93V3LTIubW7vb67xdPK2r9HVeRI7zHzY0PuR7Zd\n41vNwz5K4Vo/PDnMOztST8E81M3K1my1xW3BarzGOLN66s1KuV9LyUy9P0C7OL4+Oq04Rb8/\nzUhS53NlPM3DMclIX9I+1lPHUOzAzU+5bc2/QLnOR8f6Wsc/8M/eTkS9TW/eP7lpPbk5x+dM\n4UPEOt1POcQ8UtJSZlzbzstq2LtOyPzOzl9Ox8c5xHtizEbOuFBGwsfKOua8S+80yHk6QUS/\nPD5p3t49U77b/FDIsj7NzVm0NcnN3U9vv27byT6y2T22Pbs3zF40tSfHYjPCNNZKbco2tVFi\nvEy/4VTLWr0/ys5awEzK+sRp171MxFrY5z3KP+g/ZO1KS/JsVV5Dx1Z0Pbg7zO1AuEG9O7ft\nRrk/xb09vGTA+2e7ObNDUrk23mo+zElB2ETMQ2Z70WZc79NbXNA9tD1Dujy2W0a1Z9HU4cX1\ny0XM2UTFUEvRR/ZOZsU0w149xUg8tz5dxT+8RcreP7lWTrY/xfFdvju2OsvDOLRC6L43sjS8\naTm2MM7fPL5eS8JOyEzS7mx8TMxI2EV9xDnG7EO1Pm3CXNVH2s1FzWZNuD1kzWz9Z8RNy/BO\n0c9F3O5462HIP8xa4dY7yU9l1z3G8EXMzkfd702+UTvMzUtJ1NtYxkPOu0jzxcjwZuvR01RB\n3b1BRe7Q2kdJ4sppP+PETOtPS7hEQ8r0zkhS1ch0W8tiw99ExdL3e0PGy0Z2Tb7ZPOpu4WNW\nVs9dZEbH3z3Nc2pX1eFv1+tMycg92N/tb1n/xutFwGnhbE7G80VaecheSuDJZknt185ISubX\n8kxL0MxeU83LZd7c+27fZ2HtXmvr7GNS6efVTlrLz1/85kbu7mlUXWff51bY2ezZ2Wxb1nFX\n4/5S+d5lZnXx/XPc91tt1ulf7HB+6mjp4N/0ZNRiY2526U9f5OFsT3zN1F/w7eLabk7zbk14\n5mZaYOTj4N9559b5b9nobl9o721e5fHk8Wl65nBr907hdUz35Oxvb9zkdtpiXNtwUV9t7Hdf\n6s/8Zs/R3eje0tp/T1lZWVtX+WVl6nxsffZ97npTeGZjaFrqb1/94t7f49TafeLZ6fN4497u\n7d3kbu9/3HhRet1pU1df50tZ6mhxSG/bfWJf3d9dZuNiZnfh3ePj6dLd193z19XldO3ZXVPT\n+WZ/8PhY/HtOVWj3X0xWWF5VT99ZZtPy7ebe2s3X98zM0txp2c3gbevT2Gvm3GhjbfJUUVNP\nU01GSk5XV1Ribe5bXuHi4t3X1OHPzOTc1MzW3cbF0efez9/79/Hqc1VVXVNMSE9PREZJT0xL\nWWN1Yd/W4ufaz87X1dPf0N/fzMrr1M/QxdPz2dLfYlReVlhNQkdLS0tESlVWTlrwcmPyzd1s\n2tTF03rLzc/L39bN3MrN1d33zM7ZZmT5X0tARUU+Oz5BQERRVl/u7dTPzsnO08rL0djd29PR\nzs7XzMbVycLOzsrdXEZMUT03Nzo8OjlBUmJeddPLy8vGwMra293b2d3Z09PUzczHysa/xca+\nxmtNRkA4MS4tMTQ2O0Blz8zCv7u3ur7Ez9luTFl3Xlj+yLvAx7q4uru9vMDuSTkwLismJSou\nND1N4L+2tLGurbC8yM/pRDg/S0NIa8+6tbq3rq+2uLq63DsxKSUlIR8jLDlK8MCvqaqtqqmv\nwNRlTTwuLjg/UnLMtq6usa+tr7S6wM9CLyUfISEeHyk8+ca4rqWjqq6vtL9kPTg3MCsxUuHD\nu7erp6yyr6+3v8nXUTQkHR8iHx8pOPO3sa6mo6ivvMrOUzUvNzk3O0+/r7S5sayutb6+vLzJ\n1OA+MSUcHyckJi9Hva2usauor8DpYV9IMzE+SV/rzLausLm+urS7yc7AubzMVTswIx4gJCYr\nM1e1qq2vra+5zU0+Qj45PErfvr7Atq+1xNDHvr2+v725s7tjOCwiHiEjJCs64rKrrKyvuMZh\nPDlCPTxN5sa3usS8t8LlcmfKu7++t7OvsN42Kh8dHiImLkXGrKSpra+820k4Nj1GTOvLwba4\nyMzJ3mFOTs66u7uyrq2wzTknHRwdICYuRb+poqWssb7sQTIvNUJuzsW4sLDCbmZiVFBN5Lau\nra2vsq+6QCceGRofJSo806yfn6iyxG1JMy0vQPC+uLi1tr3dUURGS1jfvK+trK+vtb3hOCMb\nGBojLjVUuKadnqvASDc2My4yXbyvra62wvZBNi89WNnGtKuqq6+5wb/NTywfGhofLz5NyK2f\nnqa+PjAvMTY5Q9O1ra256URCSU10cdq+squttr2+wMfJ3lAxHxobIDFJ2L6vo6CqyzkrKzE+\nVPfVtquuuH5BPk/cycbUyrqwtr7L0MzBt7vCWyobFxojPH7Kuaigoa9IJyMqM03x4cCtqKu2\nVD9GT9XI3lLfvLa3ucPYxruztMNpMx4ZGiA278a6rainsk8pISMtUMa4sq2rqazCVDg3QVld\nT1PXtauptMfP1MbDzOJmMR8bHCU91NjHu7KvvEEpJitMu62sqquusshNOzc6VO101MS5s6+0\nwuhPYt7T28vDwv0lHRweM1VNTuPcvcD8PjpK1K6qrbrFdlh4T3Npccu8urq8v8DO2Nve+273\n7eJv18vSaDgmHx8hNllo18nGvbrM3ldIW8zDx8zjaOe/u7q/zsO9u77MX0lLSWfbz8bYXU1d\nXF1XQjk9QT46Njc+18bDz1tUZ/pea09YzLm1u8fa0dHIv8fV2Mnc2uVc+1tkaGNaUU4+Qz9N\nbd38WE9JYU7eXFJVWOzQvu7lU2rY0tvof0vY0s7Pzs7fycnAzWhMS0z+0893XnNRXEs/QUlL\ncldMY97Gx81dfGd7zt5qT01V4NjK2f3l0b7FzlpLSG3Fx9xaREvizMLeSDc8R3vufUpD6s60\nutFDPEJ1u8nzUk13v7vTY0BMzcrM7Wc/QUPFsbDNOTk/xcBZMTtH0L5dRlHOvbxNPDVJz8nY\nT0hbxcG92Ght4MnByGRVUOfLzttoS2vMzPRLP0Vd8dtZRVLx1tNbVFPvx8LtWlRg3tvLdFtY\ndtTG/lpf3drj2tvkajs6O+TzxGHm8tRnSkhL+f7MWnlG3NvKys52btHPxt/pW2jZwdXnWV7b\nz8/RWT9R5db2WExPXernW0xMaP7lWF9VX3zy4/zq4enx1tLW6ubidlpOZufdbmLjX9Df4NDy\nZkY/RVTuz+12X9jX8+P119TY5Fdy59TNz+NhXe3eztt5+F3s/F5SXutwUVFSYF5SWmFk52xS\nZs7N0m943dXT51xeyuVVNz5hw72/70RY7b7MdD06d725zE9GZMG2vVxVR1lIWfdzRDQwM7iq\nq+EuLEmxsdc0Lju9tLtrOknLrrXWPD54y8DNakhK3sfPblln0s/cVTxK7OfiaUpQW33G681a\nT1JfzdP6YN9pY/0/OlThzcLazulvzNnOVkJFV3vWzm7f2cvAz15nX93P4mRQZ+bi2HVXWGNj\nXlZXUk957O5XX1By7svd6etfSUdMyLnCb0pQ5cPT7EhOaufKx15JX+i/6E9TVX3N2/5eT9bN\nzt/3+HH56mleTUlJePbfVFFObs7BzVNNVc7Izk5AT8zBzU1CVtzDyP9GWmvc1+RxUUtqzN7Z\n6n5+z9VwTU/bycfpaVdbftvdTEl65uJaU1BZc9F+WE1x4ftqUlXny8fcVE5ix73VR0rTx8Lr\nfFxs4s3ga0xKTHnPyXdURUJjx8NjS0rfzs5zTUv3w8pdP1TcxL7OTzxH58PG+kxFScy8zVA/\nRtrHz+FJTF7Z39pkTkpt19vKXFtR7NPgS1nh2tzeYE/i09/4+W3U3MnJ1mbX4+p/3eBp7Whh\nUVhZXURObG1LPj4/R0xQa+/gydh34s/MxcPLyb25vsbOz8nAws1oWtjLz1ZEOSQhLC08/klb\nusPM2DwzR07Nsrq5sLvEusna1cm4ts9Wau7Mv8HR18i6vywRER43r606Tq+vrfwhIT7HrLFr\nza+urLVn3sDJydZV2sbLwLzBzcu/vLk4Dw0bLbKjRzyqqqq+Hxox9LSpylizra+tyU3LxGxo\n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\n39jTs6WvurW0yzs7v6ervlPYxUhJUMWxxDMpO2tKP0csV7s5JicpMshjNcO462xNX6+svsnt\nz7m+xdG6rK222F5c1upNUNu4zjI12cHCzDU7Ti8+PCQrQFFFMzFiuOPodV69z3b1va+zzcKw\ntLC00eHHvsBcS01Sr6nUVjMmQ8tLOzYtT+VTUCwoOk8/PCs5rsFJ+L6yttZfwbG3zMS0ra3Q\nzrS32E9LWsTwWu1jy94yJzlfekY7TTIxOz3WUD9IKDOqtDpAyrGtzDJPs7e7vMy/vM68t769\nyfvD50BAfM903zw91jw8PC5LvEVFSShM1UfaSDu910jI0+LSScGvVse63by5bPHD4edX0LnP\n7F5MxME8PVzeXD4nNtbBsMo6PvlG4EQwr7o+RD+9ru08QX7AZDfPtX5QW7e1PzBct7PDO32+\nw/Y0NrnFU9nozelPQzdUy+7YPESyx3s/N0xz1b3KOcm6OW11xss8Md7A39lI+rDKPEZO0Mjd\nycHr6sFL1lw76NjE6TxIXFa1yj9ON0W4yNG2RzpKP9e+S0TD4MLGSTdJUsPSST4+x7zmTr7I\n3HlL6NzN1+G3vEk6VNG35i49zbzNPEu8wVA5LsuozDErPK62PzxR6LzezM46NUi+sk8+fWG/\nw2/UtsN5PD+1yuzbVsrUREdqWFhMP763Rj1E5r7qNUnGTznHu8TpL1vLzWVQccZCa8HCvE5A\n27XFWDZYu7nDbFjsbFz+2+79PzZXSGzrUerE39NgOzJI5tzPWdXPT99gcsfETjw+bbW0ydHM\n09ZAXVXZvtLQw35OWVbLyfJSRjxDWuHXXkJI0so9MVjFs1o14L/STzlHv8fpYmTcZsqzzGJJ\nUsG5ztz71cTVQD9i7mpqSd3CTjw5XL/aPERE3MD0SkvTw21qWXG/xdDk01BnWd7K6kR0y2Be\nTujD0FJS29fNdk/g3PRP7dvoTENTz8veTz9d2lpo78/H6l1+91M8TsjC0O7kelHiycRnTE9T\n/ODX0cfP0W8/O1bobPh55sfT+mBNaXRGTOPV82ZVx7/331xK3nNOV+7JzzxHxLzER0r+eG/U\n28tkWdtgX9b6WmR4/UNl9uXW9tPaT0Jf9/To1s7P2k9KWMjcVkDpv9VTUOvNaT9Fa2j/797H\n1ndbTMe7eFTlv8ZdRtvNz+9M4dFTQj5qzE9LYuzHX1jH60xDUt9OO1PIws3b3dtxUFJc195i\nWNvIzOLsysTgUGH5eWJeatbY711c1/n0TVTeSjtaeOfrXcrFaV9JTP1fZlFWx7zYZHPWyHtO\ncV5g6tnp1eNia3Du31vvyct3VnzX2VxSWt73YFhMWlxMSmzU2l5j1vVdXOnY6VJO2MnN1fLX\nwf9MTXfbZO7O29528thYQ0773nZYWHLW2f5PS2ThfXbi1tPzVl/u3NDN4PXs1OxVWV1zfmnw\n5PXm7XV8UU5cV1le697V3e5UTVVl083Uz9zk3+Dg5e1fYv1oVVftztpnXXfj3nxc+e3iWUdP\n/ndo+OtuV1f2z+Jpat7fZ93p0svW62RTWVR+2tvV1+zj+VBf9X5dUkxddtHsb+Hr7mxPbM7q\n/9z37+5e7eps7Ofn6mZdWvPU61xt3tljWmH+7VhV6tnU32Ff4td0ZWruWlJo/evX/1hsfm75\n7+DP0u7lztpiX+z+a1lLXnth8uH063ZTT1rW225qX3rlX2TX0dXkZmrb62Zz28rhWE9Q9upb\nY/Pd5mZmbN7b5XtsX3bdc1z4/mvg6n90du/ed15g6+JubmZi8updWWhwePtdZdrret/d+X5e\n/8/U+WLfzvlYYObM1l5w82xnZl9f6/1mUVD183Bqd8/gXWJPWdjZ52r43t1sWGbm51pX9/Ph\n3G/u3uFya2Bbae/3535p3M7Y79jW2+hpUWDiYk9Wb9vbWE/s2OVZWXzv9F9Wb99sZ1xt42tZ\naXX14d3OytX1ae7Xak5j2d/fZVHb0P37a23ibFdg591qVWlw8OJTX9Tzcexh7N5+dv3vfGJi\ncGP47XPd3mzp7O3n7G1cYltbW2t6fHRpbuXr6tjg6N/f/vDa3fnq2+Hbz93l71NcelROXVNX\ncWVfX11cW19UVH1fU+jd5dDP2NfS2dvSz8vFzN3f7FxVXllQVlxZYmhbW1dVUFBPTVtjetbP\n3uPM037n6fTazczOztba2WdZal5TWV5WX/tuZlhQWmBOS11hXuXb3dnQ0uxkaufe6/XOv8PM\ny97h3VlJTFxfYFZs1tN7TktXT0hLTX7P0ubd0t7nYkpPaG1i/+LZy9Dd0dR1afjo4dbf29bm\n6ephVmFeREBNYH1wetnS3ux8ZGRu+V5d2svP2d/h6mxaWFpTW3rn5+bR0Nvd83nx51JGTE1f\n+FNV1svN41tc19ZfV2Dk3Onl/tzL5V5VT2nmY2Dk3dPN2tzi9+xfWGN38vxuad3vb0w6RVRm\n+Fpvx8LMcVFfbE9HTVHgz9fTzsrI1H1z897c3d7Lx8jI2ubqYEY8OkJNRUJR1s/Zamdtb15S\nUF7i0NTnz8jMfVpVYGVr7/jay8PFyMrK0edgemxk9l9LREhOSURDU+TtYFttbOfT+u3h7Njc\n7Gds2t3q7NnP29/u2M7e2M3i39Hd7XF1/nNOS0tEPzo+RE3s3m7j1dDjWljk3nXX2dXO1cnO\n9dTQfllSXu3j0snIy8fJ2GFg42Nn7Gj87F1HODA1QUNJS2rHxtHjXdvSVlZaYOfV0srCycDE\n6Xru89/q0sbN0MbG22xs7VtOWGllTlNnXU1MQTc1O0VISWHKw87e4N9TSFX00MPDxMG+v8Xo\n58na39jazMvW33B/bFNNUlxVRkpgW09ITmbrflpNTWBSS0dMd21Ra8/a3t7c1tzaxs/VxsXN\n19LR2Xzp2c7ffuDlZnb6XHLxaltRV3lTRlp8WldNU9N/XGZNUnhPSW/n1+xd589uZ/Puy8/z\n4N3Xy/JY6N9/YFrfy+Xu0dbc2uV+fGvwblX332xtdeTsWVZuZlddaXJzcm1vW1loZmdzbWNc\nefFXTWHf39jj+9/c2eT6+NvUb+vX1tnw4Nfm39zeeGhrZPlo5NtZ6dz9ZWTlX1hVb1hGVm1M\nUFbY6ERU3stiUWzWznBQ1OXNXFbNfsZj3s3c5mTf7tRe2tV70e9Z+OFh0VJn7WlaUeFxWnJY\n4GNNzE1/YO7PP+RY0kpIw1XkanHuxU/Yb9Hs1/BeyknLRdrLTl9972rvXlvX3V3dV8zZUdjv\n0dZk6d/vZVn500nsbFvyWnH/UGbPROBMyltcamrPS2PeY+j2T8zrVchM0tpp5f7b5OVozObb\nX9de6OJf4/HjWNdOyFf+eFL0/lXrXE/kTOtQ4fTZbv/OYdNcXc5L5vtj7Gtv5dZNzFrLTdNM\nzVXVbvx65mVfzk/n527Z2krCdmrb3EvESedyWWx1V/h8ZWho7m54a17JTM7qZNBEz07WWGHZ\nWNfgb81Z4u5ayFzadOraS8hM3tpLykndcW/jTt9d8O9V3GDiWM9M2+9v1VxPy0TJau3cXNzl\n5N3q9eLvWm1sbulT/E/XWXHqa/F+7Onf6N/eWNlL02H852ta9d9Y0EzId/hh3O7cUO7lYVf1\n6EvMRd11b+99W+R01GHS7X7GWclcbNNH2HhsdVVpaOlf0UrDRNR8W+lT3lJm+2HjeVze2+xe\nyVr6z1LBYl3IScZR3PvXT8xSXvFO/W1T5u9l2UrJTerPS8FpWsRGylNFwUdtyzu/WljJUc5q\n7HDX2EzeWFrJQO7JP71C293Sb+/abM1S2Gd240vaX2dre2rdTcE9xVbaz0zbYNdUzlPPdlVa\nvj/XXkm5RPLNSrxB1WXvzD7P5k97VubOTufp6dVT2lTKStJM4dlf3EzPfkzCRr/pTcpYaGL0\n6GBldutlTMRIz2JWy1jrTt7oZsdXZMhCuj3JTc9mQr88vlRSvj7M1E7PU2Htau/P495az13O\nQs9FylZK1jvPROO/+tDd681mZPTfXUbbaHrvSsJb01fp0uBzUGbh40zCPcBRX99M3W37WubW\nVcxV4dNV21zb3WjYUO7LXs9K3G7oVF7wWtVPV3Jk51L+7tLUWvfXX8xV5uJn+Wz6ftbpTNdw\n/M9N8+/+TFnwXd5QcO1fzkr5eOjPcNzW1cxZztbQz/DP8n9pV+fpb09eWlRHREVKTT1NVVxs\n3+3T2M7OzdTOwMjBv7+/xsjL2uvU18zMczElJyozMTA+v7GxtdjY3lZBNzJQvri6ubKvs89i\n6djN2t7Ox7+/xshsNCQeIikwOkfArqquwt5RQz4yMDl2uq+usa61wW8/Um7c0MO4sa2stLhu\nKx4VGSAtRmW5paGls0g2MC0uLjfVr6akrK/A2FU3PUjawL63rampsL7XOCMcFhomNeG9rqah\nqLo/KyUnKzldvaijo6i+e1A5NTc+0buxq6uqrbjIXD0uIh8cHyw7w7esqKmwxzcnJCYvTsGw\np6Kirr1LNDUxPl7Vs6+trLK2vltNQzkwKScfJS9Wvbeyr669ZzIpJy5Quqynp6msyVcxKjA7\nT9zBuLCytLvO5WheZ3hLNC8kJS40yry1ra23ykkvKy9B0b2zsbqyw0w9LTNP7Mm7u7q4vrzG\nzr+/wcz8Ni8nHiUrS8G3sa2wudU0KiszUL66t7u9u8VYPzg/ZP340NC8r6+vt729vdjmRCss\nIigxOdHGt7a8y1c3LC00P9W4t7e6vcTnaEU/R1j9283Esq+trrq+xM7VfTYsKiMtNj/Jzri3\ny21CLi0vOE/Fu7OyvbzF7X5CPEdY5srOva+urLTAx8/Y41cvLCopPjtMys+/x2pNPjIzOED8\nv7Wtr73I309LPDxNT97I0Lq0sbC8x9bm2M5+PDswMEI2RV5Ny9T11UU7Pj9IcM/Dub3J0Ofo\neEdHUFPj2My4urezwszQ2MLA1FxEODY+OT1EO2btc8piRUlCR15e98nR3dDb7vtTWu5Z4crO\nxsjJvcTOxsy/ur691GZJQz02OTM1QENZe1nxflrf2tXQ71hQSk9qe3Jv2NDTyc7NzcnBy87B\nw762u8DMTjw/NzE7OD1VTv3XVFdNSWt/ZN/tU19u39LkYvn95NHaz7+8uLK8vrrEu7zsTTot\nLS8uP0tK0dXVyVE8PDlDft/Ox9zPv8bHzUxNZlF+19e6tratsr26wcTIQjQwJis2LlTWZb3e\nWN08Njw2R87DvLnX3sPTzM5FTGlnysnOurq3rru+vMe5xUM7LiUvMjbRceDETVlPMDY5PF/J\nvbjEWdjO37/zP1FXzbvOybm9tLPFvL7Btcw4MSsnOjQyxdTOuz89QS89WD9hv8K1tu951e3C\n1TxLT/e8yc3Axrq1wL+8vbfAQy8nIy87Nsa8y7pjP0YwMk9GUcfEu7bP8855f9k8OVJvwLjI\nvby9sb3EusG0sUguKiUvSDpNvda6wDYzMC5KVkrazL+vu2TqXE7ZSj5LT8S0vb+9xLm8zL65\ntLHFOSwqJDU8PrTG0Mc5MToxO2ZazbnAvMBTWeReXE47PvTAs7DEzcjJubrGv7SvsV4uKyAq\nSTzIt9bHVS41ODBEYfm8uc3M3FbPxGpiRDppyb+0vNrMx8G5wL6ysrxKNi8lKTo4066+wkEr\nNjw5TlJIyra4ud1D7dbY8UZFUvDFuL7DwdS/tr68t7Ox7jQtJCIuN0avsL7PLyo6PUvoVuu6\nurrBQUzS2sV8QEtNbbu4w7/L2Ly9w7OzsLk9LicfKzxCuq24vj8nLTE689LZu7bDz11J7cHA\n5UE3PWjDtrvIysW7vcG0q63wNS4kJjU0PrGsrLc2KS4tPXNQ37u5v9JDQV/CutJFNTvzvba3\nu7y4u8S+squ0OygpJC9DLVqxr6e8KiUnK1HYXMK4xbfGPEHXvbfIPjlA47a6vLe3trrAuKyx\nUygjJSxGODrltKetTCkiJDRq4NS8ubS36T9J7MC75kZEYMi8ta2vsrbEvLbLQCceHSpCZLvE\nxLK26zolIis/zba7w7q/w8ZeU83tcNBt38rFr6yvr7jBu8XePh8aGR8/vLevr7WxvzYjHiM6\n0Levr7KutcVbP0JNSuzOzMjIuq6rrrfNcG7cZSsdFhkvz7avua+nrcE1IyQtPf7TzrWqpqe1\ne0E1NT5H2L29uLCvsb5eRkRow8RBIyAlMWRKPEx5uLbLcEhP2eZn/dXAuba7yOFaR0VO+dDX\n0cfDv9ZPQz9O5cjDz+r76+nv4vVfVlJaV01KSUFBQ0pZ2tXCyn5gSUdJUGnu2MW+u73H5FtT\nVVza4PbgVs/Ny8ro319TW1VTUE5fVG751MXHx9v3VEc/PUVDSl911c7MzNre7XV2bWBu8erS\nx8PH1uhtW09TZFZRVmDu3dLa4Pp7cWZYRkhQYmb63+jb09Pr+HJd+O/n08vJzcvN2vVfW09T\nXVtWTE9RZOv2eHhva25oWFJp8vd++O555tbX3ffr6e3Rzs/OyszY4/1kVlVYTlBWW2ZjfXX5\n7HRZTU9WWltaZ/7u6un6+drP0+Xs39bX09rr6eXd5Ojj6ON8al9cXVZcXmXk1trrX1hgY/hv\nY/hxYF1eV114cGFUbffn2NfU5uLffHBtd/Z7/eXh6ev97e/p3OnuYGBbWVhbYF1v/+nm1dbk\n3+7u5+7p+fL66+Lo5/35X2RfaGZbbVhTW//q/eja7F9veGVeY3dbZfHs7n3y9Pfl3NzW1t3d\n39/f6nhbXmpsal5fXm7s39/o4+/ubm1tXWFcXFNb7ubi3Njc4ebpbGN5bGxjXmh27On5fO7x\n+Gttc2Fp8ezz+Ot9ce3t6OTofFDcXk3H4u/D0fdhSlTkYG9dZFXd49bc6/R3+O3tWkdZ1ebU\nfFtu2NPjU/B5duP4cVz9d+vt5dxl5vlfWmpNc1Pv3ufv8GN24eryWXzw3+ve3eTu+3vj2n5l\n43jv7M78dmVaXF5ral5RYklJ7vD+b+jMx8vdQU3MYlPbTePp39jH7uRfa2NrX97I0cHrzePu\nbVZPVvpUTVZcXd9V92B71kxv5GBrVDjcYuvUyM/Izu/U2eZaSlfPW97uZMHR5/HUTUJMUs/c\n8l3MW9tIUM7nSWLN7s9h6fDRTfFz6u9mas39ZPPpT2pRVPRnZlt/09NJ6NPO1mHi3clQ2VXl\n4l1p2/Hn5knKU9hr5l3R9VvTRftNWk/nY9vr6mzl1VDPT/NdTVhmftvP1c/f19D4aF5MaVZU\nYF9acWFq2Olv6GnrzN7v5tTJyejL0s7J6mXe2n3o3dTt71I9Ni8sKSwvN1nPyby+v7y+w8O6\nurq7vbS5xL67vbzUYu/q+d69Xh0bHR82KiAqTryvv1m+srKxyNS2r7bAwLuuqrq+v8O3wVdJ\n8+ZoXkk3GxoiHywqJi3Gq7TGbdS0r7zmebisq7rEt7SsrrnKy73kWU1O3MTMX9E3FxocGy4x\nJDO4ramtTUq6urDASt2zq66xxcWutbW818zYy+Fk0eXV09NYGxQYGSk5LipNrqSerGNO1ra6\nw1hJuq2prL/Jybe2xMVlYNbYzcbJ99jYOR0UExcnPz04X7Khm6C6aENF2N1JQfm8qaKrts1u\n1L691t3yeLy9v7/X2VMjFRMVHzZMTd6zp52dqsRHNzAyPTxavq6hn6a5YD5J2cvP0nX/xby6\nv8PfOx8WFBgjO1Vqw62hnJ2pwkUzNS8sOUjFp6GjqbxMOzw/bszPxcTIvri3ubvcKRcSFB49\n1dzgwK2em6K9Py4wQj8zNj/Ho52hrW0xNEnkv8J18sK4sK23vrtlIhcUFSJEbVvix66enaa8\nQy84U0E0MzLfpZ6isEovPN68tMJdb8e1rK24vsBIIRkVFiI6UVvgy66fnqSxYzU3SEQ0LSxL\nrJ+frVw2RMm1s8hMVMy2rbG+xcPYLBwWFB0vS1hk7buinJ6pyzo1RUA0LSg4tqOepcNGTMq5\ntcRMSeq/srC5v7m4SSIYEhckNUFASM6pnZygtFA4Ojw0Likt46qfn6rRSmTJur39TlzevrK3\nvbexuTwfFxQbKjxDRVzBqJ6ep7xONzg5MS0rNMKmnqCyWD9RzbzHT0l30r6ytbi2src/IBkW\nHCxBR0RL46+ioKi6TDY5Ozk5NT69qKOmt08+T+bHymxe27+2sLK5ubOv+ScbFxsqQUE4MzbU\nq6Wpt1c5Q1hYdVhQvayoqbhYPUFK7c94bNLGvLOyt7i5uLdcKB8cIC88NC0tMu6uqq++Xkne\nxsfE0OO8sLO43Ds0PFDTxtnbwbqytLvFxsK8t8w5JyQlLToxKyotPM+6vcXgcMa2tLi9w7+4\nuMZYOTY9Rl3m0se7s7W7vsLJysjFvsZLMisoLDQvLCoqLkvNwbq/yb60s7S5ydHMz9ZsQzxC\nWNa/vb69w8vJ1N3Z1tDIvrrHUjctLTMzLiooKjb+wsDI0NG+tbS5xNjPzM/P6VdSZ9jIwcXO\n19/a2NfRzcrKysrI30o8Ly0yNjQxMTE6/s/c2OPaxL69urzDvb7ByORTU1pX7dTd5d/n3MvI\nwr/KzNLt3N5UOzgxMjw/Ojc4OEjv8O9vauLIvbq6wczO0dfb92b7083Ew8bHztDOzNHc6V9X\nWnHZ3lA9Ojc6Q0M6NTY3Qlll8d3XzcK9vcDL2dve2c/V0s7Lxr++wMTR72Rqe2hmWFdcYe77\nSjw8PUNTVkk9QEFN8/t6eHzrz8rLz9XXzszMytbTy8nGys3Y7fT54efp4O13dG9gYlRIPUBC\nRFFOTEtMTlxpX15ZXXvVzc3Ly8/Nx8rHy8zI0dLT3+L/a/bt5u7u7Hrd6Oz5Rzs6OkFYVkZA\nQT5S7PP3a3HmzMO+w8XLysnLzNrm8tnLy8rQ6vHvbevnb3r94tXuPTQyMUfzWD05Oj7fzOdd\nUV7Pv7y9v8LAusLM2U9q4s/IytvY183Pzcvcyr+8yzsqJCQvSkk2MDJNubC76z888sfEzl3g\nuq2uuHVCSurAvbvIy8O/u7/Gyby2yy8eGBsoR/5IOkHGqaSvXi4qNVTmW0NksZ+dp8g3Mk/A\ntrjExbevq6y4vbo8GQ8NEiu9tbu/tqGaoMokGBkoRm7gWbKbkpSkPyEkOMG1s721p6GdpK/L\nIAwHCA8xrKaooZ2WlKcpEg0RJma8raebkpCbziIZHjnArq2vqJ+cnKO3MRMGBQsaupybnpqZ\nl545FAwNF0etpJ2alZOaxiUXGSr7saqrraGbm56rUB0MBQcOKqOXlpeXmZ/QGw0LESayn5uZ\nl5WZrCwaFx4/urSvrKmcmpuizC0WCwYJFkObkpGXmJ+1LxMMDBg9opmXl5iaockgGhsn2ri4\ntrCmm5ibp34iEgsGChhVmI6PlpusbSURDA4dWpuVlJSYnahTHBocKuK8zL+ro5eVnK0+HxIL\nBgkYypSNjZmhvTkgEAwPIbqVj5GXnaa7Px0bHzLEs8W9qp+Wlp68LRwRDQgKGdmSi42cq24v\nIRINDiaxkY2RmKW85j0eISc2wbPJyqmelpWezC0dEw8ICRi+j4mMn8A8Kh8UDA4po4yLkaK2\n1ktCHx0nSLqvynitnpaYol8pKBwSCgcSx4+JjKNSPjcpFQ0MJ56MipOp62BHTiUiK0i5uM9m\nrp2UlqBgJyUeFAsHD3KOh4yiPTAxKhYMDCWciomVsT9bZFgoHy3nsLtiP66ak5anTikrJhYK\nBg/MjYeNqDMvLygTCwwql4mKmbw9UE1MKSVHwLXIR0OrmJGYq0srLCkXCQQO042GjqwuLTgr\nFAoNMpKHip17Mz9TSyopXLe0czY6q5eRmKxDLC0wGQoFDVONhY6oLi07MhYLDSyTiIqeYCxH\n4kstKXG4sk4vNK2YkpixSi8yNR8MBQs3kYaMpjMuPDUZCwwml4mJnGYzQklNMizLs7xELi+z\nmZSYq0Q1PzstEAUHIZuIip07LD88HwwKG5+KiJZcLDRv6DwsSrO0+S8tv5qTlqdNMDdIOhcJ\nBRaqi4iW3Ck6PykQChO0jIiPvS8vPj1EMEStsuE0LmGelpefzDM5P1gnCwYLPZCGj7UoJz47\nGgsOMZGHi6MvKTNiXTk2uqu8Ryw8qZiWnL86OT/eSBUHBxijiYqfNCAuSSkQDBqhiYeUWyYp\nSdlEL3mtr9MuLcidl5mqPi49478oCwUMTY6GkdYgKERBGgwPT46Gja4oJTE6OjU/qKC9Nyo6\nqZmZoMU5OVu/zhkHBRWkh4edKhsrZjERDBiiiIaUQx4iOFFCNsmkqM4tKfOfmJmpQi8+XbJb\nDwUIIZWEjLcfHTjHKQ4OJpiGiaErHiU2Pjw+rJ+tTygtt5yZnbM+NlfKsFkPBQgkk4SO2hwd\nP7wrDg4qlYaJpiUcJEBPNkSroapbJi6znZufxjM8a7+s3RMGBx2Yho28HR0+tTUQDSKZh4if\nKR0gL0M7W6OerEIiKrWdnKLBPlXIzLbMGgkGFKiIiqYjGzGwyhkOG6iJh5gzGhssV0lpq6Gs\nWyUmw6CdoLlRX9G/tLwuDQULQ46IljIaK7axJg4PRo+HjsMdGyZH+syuoqpuJyZkpp6iq8Do\n2/HEulkWBggfmYiP5hwly6w5EQ4nmomMrCEcKE7GyLmprN8rJUGrnp+pt8rb3fDTySMKBhHA\njYqhKydLsdoZDRm0joubNx8iL9a8tKas3zQrOLKhoaOrvu1OO12+dhkHCR6fjJLaJTm9si4R\nDymejZCuLiczz7W9uLHGRzEzzqqioKe0yeY+Odq8OBAGDDiWjZo/K/q01B8PFGuWjpe/KSQ3\n5rCttL5gODZUwK2kpamvz0VDUujeHgcJHqqNjrktXsrHNBMQLKKRkK0rKj90rbDSvck7NT/5\nq5+kqq/TX2pBWb4tDAcRTZGNoD48cMNFGA8dupaPojctPP2vsfHGxEY4PFSrnaGpssvZyFJM\n2DwPBg4rmYuXSDFL51MeERrKmpGdXDJUwrm7Z8+88zc5e6qdoK/EzuzeV0TzShAFDSmaipZJ\nNkhcUR0PG72bkZxfPrzAy8w7+7HRNDvwqJqescjlWHxGP+l6EgUOKpiLlzovTd95HQ8buZuT\no9K2qb9KMizEr2c2P82hm6S0x1Q/QkBay9wRBA4xl4mYMz/O3VYZDR20m5Oju6in2jAoK760\nTD1Jvp+dp629WT8/L0+vXgwGEkaOiqQpP1TQPhIOKaiZlaSqpbM6Kys/uMFET8+uoKSop7s/\nLyo0zKs5BwcWy42Oxyne1rwsEBNDrZuTpKqlwS4+NEO2yF7RwLCipKWqdTIxMkW5thUDDiSg\njJktSLhXPxkOILutlJmpnqQ7PVMuz71B873Qq6Sno646LDMs7KstBgkaz46QZjPAXP4kEBnp\nrpiWqKKfv01VMkHWV0/KzrKkpqSq3zYyLTlyRxEHEyudkJ9AxcBHLhgWKbWimJ+io6nIY043\nTlVMfc+9rKWgpLc7Jyg1Rc9vFQoWL6GUqjXPxU4yGhY1q6Saoqukp+JbZEXO2TxTxM2tpqan\nuzckKETV0NEjDRYsv6KzMlm34T4dGzyyrJ+kqKGr3V5rdsTM8tXN17WrqKvcLS01PUo6TL09\nFRcgaaqvOD+/wV0jJEWtqaKusKy6UUnEtLDFZPPPx7m7trxHNTQ/zl85P1K8zCIbHSu7wDdO\n127ZQDjRs7WvwtXB52y3ra6tvt3EzdjmWnW+1FpWOULfcv3SUUU1LCcmL93BxV8zO9TD9kc/\n1b3LSlTIsq+2s660yH1M8MrQf9fPXUHrubS7SiwuR/ZSOkzkztxzMiosLDvX4lfd+77NSkfL\ntKyw0/TIy9jHw7a0x9TmWNNNN1TGv7xtOkBbe/JCNj9sVkVNNy47PDxl2tfEyVTY3O/Gy2zA\nwMW718y+xMzF7s6/0tHN62HlTHbgY01FPko/PDo1QWfOekdK2uxaSU7Oyfph53TdxsrKv2VW\n1L66yE5cvr7GcUt3y3p34XRZQ0jqyF9LOjhLPzpszsDCUkA/R2ffw7bGSzxDbL6xt724zkpD\nPVjZ0cS+xEg6O0pqztN3bWRHRVlP1ttYU0tIT2be1tPN2tDJ3ffDxsDM/+VYS15j5svb3epW\nTUVRWk5SaHxXcfvg6N/oV09mb2VUWPXNzc3VbONlWWF32tLVvslxeFxw32tYXVzj+kpKWdXO\n2X1faXVUVV9jbmVxf2tq79rZ09lncftVX23i0MzR5V9s+VNPYH1sYt3O09TP32hRQ0JSVFlk\n5MvQ7Njd7+NkXXllWVX60srIzNPtXmFXVmhdX+vd1N9bb/JhY1RaXU9edPTn63fu2d326vZ2\ncE9QctzRz93X1fJ5ZmduVWPg5OtmduXh429o6/9YT1BV9dje6+j2cm5953Jr8vbwbm/d6+ft\nX/pvZf567OPz5trh4X17fHFhW1/+/fp59uP5XmD7+Gx45HpuXV/+6/VjX/r2bPPt4Nrv/G73\n4fbk5OXkePTn+P91fvJ6X11hWVtpXW3f49/vcPrr6fh4dP5savPv4+Pm7WdgeHVpa2xrX2v9\ne/j5/O/l8vdpdPd059zc7Pr1/m9udf7+7nR3fXzv9flua2tnXmXy9fh87dzl8+np6Xp97mpx\ncGdmc+/t5N/b8HlsavT1Zl5sfl5dZ2/zeeXof35veuvq6u188ntubHB7d/ft+efc6Off2991\naWtcaebobmR4ffz++/j2+Hpvbnn9+Wpz9e7t/X1xeHT3+P77ZWZvZ23/f3jo6nN48O3w9uzq\ncmhkbfju6t3h4dvj4eHf3fplYV9eWmFnanRhZv1raH7+eGxqc/f99+3m8vnr3tzg5vTw+W5t\nfmJeaWNoXl9zfOTi6/v14OPi5vZrZGh5c3Xk5Off8+7m7vtvbmhdXF5hZ2RhZnbw+ezr9+zq\n7Or6c/vt629rd/bp7XFsdOz4fmx2fXFueWpt7e7m3ubm4OPq8v3+dWRdZGRnenVx8fDu9ftu\ne3hydmZv+ft5fvNyd/J6/vhxdGtncu7p8nzu8Ofq6+h7bnhuXWNsePt8fnd+ZWZ9fPLl4+vt\n4OPo/XDx/XH37uvr9ejtbmf9/mn39XFgenZdYWdrYF9zcX3z6/lvePB5bXzo7vnl397b5+Dv\n/fVxbGRgYnR5Y2B75mrt+Hvo6PP27vR3amleXm3/+fP54OTl7erxeOPpY2d+9ud3amxp8elw\naX7x7Hx1a/vh4v18Y3vr6ud6bWB26v5hY3LseGlvZ/Dqcffv7e117v34Y27vfXxu++nl8uXo\n4uV++fJzc3Br/V5iaGNuY27j7ezhfW3+fOvt6vJ08F119+9/aHt7bm343vX7+W/g5HNZW/rv\namRef+jx43lnct/53tVs5+Xn339ub/L3efri3Wlkd1xfUldUa+31d3zW2nVe7fP+XXXx6+R4\n7tzX6/P32+peWmt57WBeZWdpWH56a3bo2+nZ3vVo8/r+7Hn4/+vo927q7vxz5uddZm5laVdw\n6ePjVHnh7d1na/Ft//ps6nT17mP79HNu135rYF7j5XtmdX7+Yl7j3P1i3tLr6m172/NeZPvg\n7mtm4uf9fnjrfv/r711eYO5rX19q1OJdYfNtd2J37Gvd4O1vY3DR4mx3+uXo5N3gbOvn9Ppb\nXutxWV1f4txpXWDq9uxcXGz+4eRt8+Fp8eXt+nj13O1aZGvkeHPp39fc7+rfaGRna15wemRs\nZV9w//zdcfN66+jk6e/UZ/ry6HFqYenr9m9oaGBg5vJXXGd73HFiatvf+Xpc9Nx5d+fe2+du\ndO19X3Xsa3f6cXT4b/rz6vF4d+fvaHjp4/97cuHrZO94e2/w+WdaZGj36mJXYGz33/zz+/Ld\n4eZ62N1nddXvdm374/jw5Wj37V5sZWdvaGh4ZXBodu56+dzZ7Olp7Nf4eWFp4XFbdHh2Y136\n4/rwZH53c19t5nvvfP713mv34N3raH3n6tztZfLeemx+aG5pbu/0alpe3d1fZWl09GpVauX9\n5N/69W1k5dxodPHt42j85ebq+mn0c2hvffd2cXZrdGpv/vTn6OVqcGnp42JvcOvlcv/z59N5\nXnB+83r0c15n8eRzX2b4/15VY9nYc1pr2eZ6fXzf2en36+je8fXscG549XhaXV7371tZbejt\nb/7f4O91aXNuc/Lm+l1o7N/5Z2/j5HVmd9vl8XtveuDxbPNp9eR83+987NzpbmVu8Gh5Y235\n7G9ubH9qd+54/l9gc2tub2hrZ+jn7+nv8vj5bG1vf/F19/179ubk1uju5+TifGp2d2xpYH7+\nbWvo3OZsde7n7Whja3hwXmx6bVxf6eltZmzl4un3/ub9ce7q8vx2ffLk8u7ud3zybV/87vdx\nZmnp8O177+Ll6PJ95HxofGlte31rbPxubHtqc3ViY2pt7/557Obi5+Xn4tzf4OTn92trYGhk\nXWf5a3lw/OT1bW7l7mdgbvfj8HNk9OPj6PP/7fT49G9qZ/12cF5w7/7m835+5tvoZWry5+1x\n/u5qee/+/Xn1eHlxa3zq7HVfZWtxcu/q/n7s4ej09nVvd2z7dXLv+334a/rq9erk92Vq8elt\na2hsZ1tk8evpfHT48ejr8+Xr6d7l6e/79/Vqa2dv7/ttYW/+c2NjXWF2eHp79PX09nr+fPDt\n8/r43ufu5/7u+fn7e2n+8G1kX1xea3FqZnb19+vx49/q6Plt9fTs6/z2d3Lq6OpvbvNuZGls\nc3RnZWJjbP5xbH36+O358/d6fu7s8/vu5N7g5uHd3eLsb1tcW11fXFpcZnn8cW/x6u378u/s\n5e10+/vs5+rt6fHz9uzmfXh9+2VebmNbXmpsbXx+bnjv6+/s7+7e3+r06uXp5npv9u3ycmZt\na2JlaHL9fnP/fXz78vbu4PD09vXo63xsXmNjaW9janL28e7r+Pfs6uXl7Xt0eWtx/Odza/Xv\nfG9x7vV++//u933u6319+ejqcmtubGZ2+Gxo/vbv+Pbj4e99cm5r/P1taGp3/HFr/Or67t/k\n7PT4+P5vbnF3aV9m9PTu73199vD5+PPq9Hptd+/m6Ozy7ujv9/v3Z2lsY2BfaGRhaGly++ji\n9vr8dnfv6vj47Onl49/f5efu6+vvfWxoZGViX2lpbWds+Xr48+/l6X538uzt6eDrfHxtbG5v\ncPr6aWVvbW5u/ndxb31+/f50/vnu7u717N/f6eLd6OXg8nr0fGxvbGNteG1oX19nb2thYmp1\ncv31+Pp+ePHs+n/x8/Tp4u398uztfPrr9/L2b25rbW96bWv7/PX2ffr49e/0fu/r7PF6b272\n9/j0fvX1+P12e25oanJ4cm5maXp5ePNyfu3t7vzu7vLv9vr56/r27/x19vX9//18bWNhZGpu\ndfb39u7i5P128Ojv597uZ2pqZmleXf7pbmBrXVZpWlJdbnXgz9Hg2dHZ2tzQ03Zv8nFaUExO\nX3lpbubr8fp77+f9cPXze3r56+pzWv7a6WF4fllh8v9u2szU4nVu6un97fBeUFdkYF1WW/bn\n5NfV1s7Kzd7p4+x6X1VOVVtSVVxnY3Lm4ufc0trf2Nfpbn78al1ieHVv9+Pe3N/r/u7qYGPp\n715n62pfcHBpXmJoaHvk5ff+5+B1Z/Pp8/9qcefc3djLx8/X09DV3fFtX1lcXFFPWFJLTVJN\nSlBZXGp0e37u5fXc0dvk4dzc29va4ez3bXF0ZWNvX1hm+evu4t/t7eni8XZwcl1bZG5uaG9f\nae7k629taW5waWVkb25pXF7+/Wllevl67+fg3+bl7u/v5fL+9W5kZGhmdvZ4fPvq7GppcGlj\naWdjXVlWVWBjampt6+Lg6OTn4Nrd5vXx/Hzw/Wx1+XNqZGhtdXtvb3F18m9s8OTj73l3Zmhz\naGNqc352fe7t7uXf7O7m3+Xo4OTe4PtlXWhybnJoZWhsaWp87eT+ZG3t6uftfn7+6+x7bnL8\n+Pb78+p9ffft83Dv5vVz8OTk4d3a3uro5Ovv5ez79f79anZrYWlmbWpq+npoZvv8+ep7YGD+\n6fj98+Ld4efm3t3o7e/2f/jt6+zo5ePzeX13ZF1lYV5fXl9rffjs9Pju29LT2t3a2tvfdmNn\nYmJhVE9WVFRYXmrx8e3e5eXuaWttdOjZ4uLZ2d3l8+3s+/5qX+/i9PpjYf57aWdfa+zy+Obq\n3uldXF1g6WtYbnbv82RlfW/9d11n39zc5Xh57vLudWj37frt6uDb3O3v3Nja3uDp7enyYl9r\n/v9/YUw4MT9T1MvsfMnEz2lCRWPb0Nbo0b/F1nlq+uL8Y1hh0cvY/Wzx1OVeW2Xu0c/f6vfy\nfmNgaVE3LS9A5snX9su7vM9MPknv0tbbz8C9yNlkVlROREZSaOfbz8vKzuNgXGzp2c/JxsXK\n0+P7eWNXU0I5Ni43TeTGwtXPyv1NPz1O2czIyM7DwM/3VEhITUtd79rLxMjP1+lza11YbNPE\nwsfKzdHU5FNHR0JDPi0sPP+8utZi4Od8TDg6WM++vczKvsDLekA9SFpnb+vLxMPJ9Hj6Wldc\naN7IwMPHz918V1pca/FKPDQrLkRnw7zKzcpyTkM6QvfMv73Hx8LP4E89P09m7e3nyrq8yOtX\nXvtlW3DVwLvC0t/d4mhNS15eUD8yKi1C6L2+093O1PZNPEFoyry6xMfCzOFOOzxJWPX57My/\nv8zrVlx8+H1w2MG9v8bdemdWW/nn529KQD4xLjtWxrzPan94als/PV3PwL3HzcXH5UtCTe7a\nc1nuw73E8llf7fddW+XCvcHP2dbWeFNX6edTQz1EPjE1Qui9v/ZUYXvpVj5F6Ma8wdbSyc1m\nQkJX1tB1atjFvcTvW1x843lc78u/v854b+57Yl572fBSSkVAODE5Tsu9ym976HtiRD5P3MjD\nzdXM02pbXGXY1vvv2cvDzePp8uTeaFnuz8jG1+3e5Pv67t3W+0pGQToxLztaxsDOd11vX05B\nRVzMvb7ExsfL7k1PWe/ha2/Ty9DQ/mrk6nH6c/fLx8zP6XHtdGrj19PWX0lGPzgwNEfav8hk\nUWl8Xkw+SO/HwMDJycTaXVdafetjYOLNwsbY6t3b3XFTXtfJydhuaunj9+nV2+pcRURDOjAy\nP+6+wuxVa+v/UEBDZsq/ws3NydlnXlh932Rg39HMy+dj7ub/bmT3z8fGzNfk6eDgavHW3GJK\nRkVFOS81Ss28y1pQa3VmTD9M5sW/xcvO1O1pZWx/d37o2cnK0Nnh6/N2V1Zx2cvO3/H77eLc\n1M/P4U49Pj06NTVD2L7F3VdZbVRMRkr/y8LBx8rN3mZVW2Fs8d7TysrS1drzbWxbW/nTx8Xa\nb/Tm6+bj5dvebEY+PT07NDlUzsbPY05mbVZOSlHYwb6/xc3V33Zudm9s+OTYzs7P1d/s7mxd\nZXPcztXp7nrk09bc4en8XkI/QDk1NkJ1yczjaF5jXE5KUn3Mw8TKz9jd9Hru+/Hc09LLysvO\n1eT7b3b3+d7V1dre7vDl3+Pp6GNIP0BAOzMyQePEx+tYYnVkUUlM7ca+v8bI0N3h+fX9fv/c\n0c7Kzdbc5vx2Zmbl18zK3fpvYeTU1uxsX0pGQTwzLzhQz8PSZGP6bVdGQU7Vwr/BxcTI1e9u\neuzrevfVyMHL2tzk8XxfUFXv1M7O4u/wZl7v329hVEZKTTwyMz77wMjpa3Ph5lRASWfOwcXN\nzczQ4WRfb3z+4t3MxcfM197m63ZnZHHs3uDr6Ozb1tzd321NRUNCPTMxP3HLyeBceuVcUkVJ\n+szFxMXJysvkZ2xqZXDx38rHzc7U3ebra2T139HP2u1x9uXo3fpqZlBAQUY8ODtO3MPV/nNy\ndl5KQEllzsHDycLI4PdrWml1VX3Ty8fO3uPa5/L6burU0cvN19re6d7Y5vhcRT4/Pjk1N0X3\nytD0bf5tXUtGTnnOx8PGw8ja6G5teHJ+383Hw8vd3975Ylxda+bZ2drX1+vzdXvd1eJPQj9C\nRj42Ok/bzdZpXuTvYE5IWNPHyMzOz87bb2ZdYvvv5s/Jy8zQ4N/a7P1rZuLa4+NvcOXn7uxj\nUkxGSUs+NjlK5sbJ3/be5XRNP0Zc2MrHycjM3+lqXF9bVXnYzsvL19zb5+9td+fX09LQ1dbY\n3uPX4lxMPzw9OTA1RXbIxc/d0+RtUT9DVuvNxMPAxNPl8VpXVk9s39fKxcbMz+Bla2h45eTc\nzcjKz+L18uDrZ0k9PT45NTtL7szR5Of9Y1pKRk5z2c3KysjEyt9uU09e+/DYzcXBydnk4+11\nbP3dzMvQ4+nf5OpuX15OPz46NDdBUd7J0s/P6WVSR0hUZNzOz8zFxsvWXk5QWVhed9XFw8fM\n0NHW4+fy18/X1t3u6/Zs6ftfaEU1Njg9Sk1P3M3O0G1UU1NPVlhx29/dzcnKzeZtf3361MvM\nxMHHycnP3OB9c3P06Obf43x3Z1peWVlhVzkvMTlETk5Z1sjM2XJi9HZl/G9q18vNx7/DyM14\nXHrv3tDQz8fIzdTm3eRgYmxmf/xmaHJbVV9XX+pwXlE3Mz89RVRL7cXb5OJOXOBaXd/vzsTR\nx7y/w8ne3Nzs3NXYzdTr2tPh7mJUXXtpX15eelVJTFhwXurscOB9TEZLQ0RPSkxvXPxpWfXs\n3fRs7M7Nz8jHxMHK0svK1ONvf9vl3dPv5eRhY29TXmVoY0pObH7t729h8vFtXVZUS05UT0xc\nVEtYWl5lW2by7ePWztjNztDGysvI0szPz8/e1+Xfa1xeVGROS1FTVWhqYvb15N90Wvh3Xulg\nVGJbXH5YWX1aWn1WU3P8btx35tHP2e/Z3N7d6df51tzV4eneWGhdXVz+XW12cdtp4Nfr7nni\n62JZXWBObHVi8Gxb8/pfZmVZbVxVefFh4mhv8Xvg38/Z2dnX5mLd2HruWnfu9+XY7trl79zz\nYHT9XXd0XWRYX1dYbf9sW2hcb/1f5vR43+rh62Hd8u/k4vvk4nfr8m1+4t31be34aGt7bXLl\nc3NybXjy8OPybu5rXmxrWm/78/b49+ptfOTr7uFo8P1z73Bu9m9m+G94/GLy3+7o7XHe8Hvp\nenn87ul7Z3t+c+nseONnZGxcWXTu+O//39x59mlkeuryd/Nt+/n66H766Hj77PXnd27u8210\n93j5e/Hu5uvr93H0Y353ZXFv72j6+/lqePl9cXjz72l0+Glw6vJ+eHZp6uP+debvenxq+t/h\ndfpuderx/u7q+m5q+fBw8W5fcvvs4/lkY/dzaGlmXfrye3Zp7PHu4+Ds5e9ueOf37+Z15OHt\nbnhnY35iavn7a3h39ODjfHr3fn51/ux7ZHhzb+lpXmf1bm7j63b683zq5mV06X397nlu6+h4\nbXr4effw825oaXXs/HNocuR86ezwfnfu5urt7/x3e+Pr7+b2b3j1emxmZmNobWdca2JpZmt1\n+33r5ebg2d7n5Xv27/HxdXrv+Pv6+W9tbmd7cmj0ZWhibH55+Xj68fPu4+36+uzv+3Jm+/b3\n8Ory+f9q8OhqaWVub3Jzd+zr/fRzaO/seWprauz6fml5/e7s+m1yff769vHwc3Nu9Wt4bF55\nbHrt7P7+6OHi3eDc4N/h9OXvdnRlalxobFpYXm9xdl9m8/Xv+3Bt/+vtbV/24vTk5uPp9Pl4\n5/f5/G9xZWxxc2x47uV2fv1+4+999/T689zp7et0fuX5YX1pYWv+eH7z/Xdx+2xtemZofu99\ndOnu+Grr4u7h4Xdheejg5W1la29+aVx1dPLp7vnx7PnvaO7e6u3y7ep0/N3/aGxjaXNjce12\nZ3J7fvtq8f1w52lebW7x7nxheOff6//35fdqbvh8cmz2dHn73+jy+3Li3O9v+v9obnP5+vHq\n5vfn7nVoXWFobnxeYWRlbtrwdnP46/X8bG3/cuHt8Pr45fz05/tuffbvamV+7X5pdt3i82Li\n3/1r7m3x927y623ybmlqamtrbG17dmjpfft9aOzt8Xv/5t3xePXefOxp3NrrZuVj5/7/6+h8\nd35cWF1bXm9a5nb7bHBt8vvvffts5Oje4v3b2N7nZOriYPn/8enyXP9lX2/tdGpmZX7bae14\nbNz7dfj2fHBkafzadXds7m1pd/J+X2jg7/N95+DscHnt6O17e2pp8+rm7Hj15PVybW5meGJe\n7V1ldnvl+XRn13nr2fLg6+L15Vz9eGZe9mpsY2/j9uh9dGRoX1tsYVhbaHFo+XDg+9jP09zP\nz8rHzdjKzdDU1NHY5FxMPUE7NjU2NjxATezWzcC7vsHJztH+Y/Zfants5dPVysPFxsPDwsjP\n1dnPbFliRTg6OTIyNDY+P0ntyc/Dv8LBys7U6F5oYVdaaPfb3M/IxsK9vb2+wsDDzc3M+VZK\nODYzLy0vMDM+R/HXx8e8vcHBxc9/fGxlU15mYFv018zMy8K/wMHBxMXGw8TN1vRYPTYwMC4s\nMjQ6PmLwy8i/ur7Dx8To8m1eVk9SbWpk187Jxr69vr6+vcTGxL/F0mv7SDAyMC0oLC40OEHb\n1MfEtbi8wb/B+Vt19klLXm9Ub87Fxsq6vcHEvsLNzsXBzcjQ4Fw7NTQtKyktLjM5TOHZv7u2\nuLvAwc1dal1MSFFeeHnbwr7Bvrm8v8C/ws3Iv8jTxHhMWTguMS0oKi4uOEFLzsHBubK6wMHN\n1lxNYV1ITefe2su/u73Bu7rCxsLHzNHJxNzV21FQOC8yLyooLjE5QkzPxb+8uLnEys7YXEhQ\nXltQ7crKx8K7ur/Fvr7M08zN1tbNztLkXFVENS8uLSwrLzg9RmnJvry+vbnAztHeeFxfbPzd\n3s7ExcLAv8HIz9fU2P7t3trW19jY+k5DODUxLjAvMjo+TG/NwL26vLy/zNTg+GxncXf83NfN\nx8a/wsfJ0tjZ8mtnefRo/O3z+11XST8+Ozk4NztCS1vw18nDwsDGy87X625mbH9r79nV1NPV\n09LX2Njl+vfp7XF449rd4N/o729US0ZAPz09P0NLV2R74tnPy8/W3dzX1dPW2dbP09jW3uXd\n7P12+/RuZl9od3p+7d3V1NzwaFtTTEdFQEFHRk5YZvbg1dLNysvN0dTW3u/y9O13Z2ZpbG/s\n737s5ODc3d3b1tnY2dXR1952WVNPSD49Pj9CSU9acOPTzMrMzMrN1Nzf6mlcWF9sZv7sd+zb\n19zi29rX2NTV1dHP19ne6n5dT0hEQD49PUFIUF3839nQysfLz9Lf8XJjXl5mZ2hv6+Ld2dnT\n1dHU3NjW1tfa1tLZ2uL0Y09KRENBPz5ARU1cb+vd1c/Q0NLY4Prz/nx29ujq7Onk39/j4OPg\n3N3d3Nja2tne3NPV5XNeT0hHR0NAQ0lMUV988+jj29bX2+Hg4ezq6O7v8Ofi39/d3eDc3ePe\n3d3b29/b1dbd5e39aFFKSUpLSklGRUdOVlpgbfvo4NvY1tve3NfY1t7p5uXg3+Th29nW293a\n2drd4+rf2eDxc2lsZ1RHQkZLSkpIRUpQWF5ibunZ1dHO0NnW1dja3OL25OHq3uDk39va3+Lg\n6ePob2dqa25wZm5tePt+blZTVFRYTk5PT1Fdb3H03N3k4+Ld3uPr5eTg5uTf5+Lc1tfZ2t3l\n9m97bG34b31y/Pzm8vTpZl5ybl1PTFJaYVtSWnLy8HxkWnfd3eT17trc3Nja3ufp+X/p4ODx\nc2Vs5ex58Hd83u7u/W3j6W/85nvo4mZub1ZVUktOVltbV1lseHH+aG/e3+nv6tzU1Nbb3+Pa\n19vh3tbf7erm5fV2b3ztXE9afHdqY1RSXlpVUlFRTk9d7eXm6/Dm4Nzl597n5t3c5d/b1tLX\n2dff8u/28n3//u3j6vtsYFlNUVVZbGlZWF/v+lNRXXD05/Vr8+1we9rc4t5uVWbp39fOzs/Z\naFFd69fR4XpgWmtsZd3Z/fVlU1FZc+3i5v3eyG04PUV8urrFWDo4Rte9u8ZrRUJP5MTG2U9L\n5M/R4k9NYOnX3WlXWPTUz8jP+VxOW/Tz6GNKTltXXt/MzdxmUV/j2M7UblZMTejO0NZaOTn0\nvrS8bEo+Tc3K1ldETkla19XK5lJcaNbIz+RNR2fYwsVxWlNX18fI5ktCR+3N0t9LPlLfx8Ts\nVU5R7s3PdFNNTnzOytFeTV/yz8vpTkVFVMe9y14/QFrLvcX5TktO6sjK01ZET/7LweRQSUpu\nysjZTT9N7sK/4k9ET9zZ2uVXWmr52eH2V01aa9fR7e1e7cvS5l1NUVNe5/Hq3NrLz866ziQh\nW62frTgoLMSoqcgrJzPUrLL+Ni1GuKqwTi0tSrGqu0EqL3e5sspFPD/Wvb/FSj1KbMjSaVtM\nXuLUzvRdYFjhz87UW1JTW93T4+hlVlx/1NXo81tj6+nb09brXF5w/vpkVVZZft/zf11j3+Pm\n9ltbft7b6H1qbWVm7H5x7t/O2GZnbl93+3b9aVpl8vF+4ex4fXrq3tzgfW5faO5tZlxWa+DT\n0u5bWP/Z2v5WT17r1tzifWZ47edscWRcfenkcFtWadPS12dPU/7U1u5eWF312ubvZmtp2crd\na0pLbNPK1FZETe3R3GdbVlr31NDkZ1146eXpdWRo5tTP2nJkb+/4cWpcZure2PRv8eXj53Nm\nZ2BVVG3j3flda+rPzOhpS1rd1s5fQkNOzsXK2k9PZO7L5nlOPmDs1spgVFToytXXe1x+5tTH\n1v1NTFzv0s36V1F6+NDRfl5MTnTm8F9PV2Xh1eZmT2zXzslmV+jfzNJnbW9xem1fcHZ/8HxY\nfuBz6Xxd+15r7/be/VlmZfrN3lpLTd/JyO1VVVvp3uRmWGzl0s/vXFZfc3t9WVdu2tvf4HJz\n3d/i4n356fr67ODZ4nVnYXzh6W1sbGf6fmNVUG7o/V9JRk9o9l5WU1ve2N3e5c/O087Rz83N\nzMjFxMrZ59DJydHc1t0vHB4jMsXMTMa3sazSNTpCW9RKP8i1r6y/3L/N+lc7SM2/ubzNxb2/\nwcjLwlweEhcfSK2747asqKxfJyUuP8O6yr+3ua6yzNtqRkZFQ3bDvLSvtrm91tTN08NJGxEV\nIuKqr8+5qaWpXiAcJDq6rbKvra6ttmI5Mi46ZOHHvcTBuLWyueBNTtq3slYfFBMg1ayuv8mw\npKleIxseOrKoqqyvr7G/Ti8qLz/mxcvTxbu3tbW+0tfOv66wPx4SER/Vq625v66iqz8dFxw8\nq6Gmqq2trdwuJycuecDKxMLJu7W8t7HC2tjYtKxbJRcRHNWsrrLFvqWrOBwWGTumnqOrsbS1\nWSglKji/tcK9u762sr27tMbt1cy0rNsqGRIbT6+vttDMq681GxYbQaOcn6u2t7xHJyUvVrOv\nw8i9vbq6yse3wXjwxa+s2ikYEBtSsKyy1sKptC8bFx7Ynpufrbu3vTwjIjDUrrDQ78e8usPX\nzLu+3Na7rKt4IhIPH76pqrl2vKe/JhcWJK2YmqO2z73FNSEgMrqpsdlc1Laxv87Fvr7K17mq\nr00fEA8lt6iqv1i2qO0gFhYspZicqcTYus8vIylPs6u+U/G+tbbAyby5yeXIsquzOhgOFD2p\noqvreK2sPRwTGVqcmaC4WNW5WCgkL9essFxG1bqyuMjDtbvXzripqN4gDw4hsKGluVW+qMof\nFBMlp5abq9RTyr88JitHuqy/SFfCtLC6xb24x3nWtKatOhsODyyqpKm8ZLOmUBwUFjWdlZ2v\n6Fy/xjElL2q2r9o9Zry2t8DLvrvZbb6qprMzFw0TOaqhqMLNra8zGRIZV5yXnrVUXMVeLSg0\n0a+zfkf2vLG3wMS+v9Xbu6mksi4YDhI6qKSpuciurjEYEhlPm5aguVpWz1EpJDPMra7bR9W3\nsra/xLq50tK3qqS2LBYNEjiqpKe4zK+xLBYSGm2alZ6yb1nQUSgkPrysrnM94bq5u7/Iubnc\n6b2spLEvGQ4QL62lprDHsK4xGBMZQZyWna3VW91JKCQ2vqqqyUJUyLq7wcG5tsfcvayotDAW\nDREtrqGmuMaxsjQZEhhGnJSbrdxl4EcpIzS8qKvLQU7Dub/DwLmywOjCraq0QRoNECe4oaO4\nzbKyOxwSFjudlJmp12DmQicjNMKpq80/TMq+wMS9s7PH+cWtp645Gg8RKrGjp7XEsq4+GxMY\nPZ6Vm6zOXGw/JyEvxaqqw0VL0sDCw7uzs7/bx62nskAdDxAmvaajr8y1sD0dFRYvoZaZpcRa\ndkInJDPMqqfGQk/exr7Gvq+wxeLauKmvRyITEB/draeswbyxTyAYGSqrmJmitu9kQiomMd+u\nqbxMT+rPwcW/srHC5eS/ravYJhQOG+KnpK3Ix6/HJhcUIbOYlp+44vpKLCIq+auksGpJ7MfH\nzMGyr7zhd8KtrO8mFxAbUq6prb/IscknGRcgwpuYnq/OZ0ouIylbrqev4Ex+zMzVzLaut899\nyq6puzAbEBQtvKmos8GztjQcFxs/oJebpbvfWDMlJTe+qKnCUkxo2Nnau6yvvtLzvq2zXisY\nDxxHsqSpyMywzysdFh+4mZeer1xSSisiLFeupLBXSF/lz9fQsaq3yNDKr6zhKhoQFz+zqam4\n0LW9LBwYHeOalpyozElPLyAmQremqt4/Ue/Oyte9rK+/zNS6rbhBIxQRJNespq7OvrFNJBoY\nKamYmaG5UU06JCIv2qqlt1RPbNrO2ceuq7fI2sOyr98uHxMZN8OrqLLSucEuIBobQ6GanajP\nREQuJClAuKepyFRg/tTQzraqrrrP5LituEIlFRIlXLCmr9O/tEYkGxcorJqZn7RtYz0nJi/o\nq6W0+lZc387bxa2sucj61bW3XTAiFhoz9a+ossy8yDEmHR0+p5ydpsRPSjAnLkG/qqrA8nFf\n19Diva2wvMLaxbTHPSUXFCVjr6WvyL21UyodGSmunJqfteL9PCYkK0uuqLXeX1fmzuzJrayz\nus/PsrReMSEVGTBOsam5y7S/NigcHD6qnp2ku89+MScqNcerqrnR6G/f7Pm9rq+4wcy5ss4z\nJRoVIjvJqKm4vbhMLCEaJcWinJ2qyec/JyQrR7SnrcPM2+HU9dezrbK2v8C1vEssHhMYL+yq\nprXJt8czJBkaPKmcm6G2x+wvJCUv3K2qtsbN2N/69ryusbW/zrewyT4nFxMmQrins824sFst\nHBclv6Gcn664vUopIyU6tamuucLJx+lL37mysrvJuK+8RisbEh024amquLet0TIhFx1HrJ6c\npK605ywjJCv+r62wtr/N3GDou7a2uL65s75MLR8VGSo/sqevubO9PyscGiu/opudp66+PSkm\nJzu9sK6wvdDbamy/u7u3wMW3vE8xJRkZKTnIq7K7tLlQMiEcKP6sn5+nrLRaLSgmMsu1r6+2\nvcfiVdrEvrvBvrS36zkmFxckNL6psbiusdk5HhkiSa6enqWnrdc1Jh8qS8WvrLK1u+JObc/A\nub6/tri+Yy8fFxwoS7GvtLOtt3ErHBwq2KifoqWosVctIyIvZruura60v95d383Jwb22tLrv\nOigaGSIvxa2vtLC10z0iGyE6uKShpaasxz4qISg8zbGtra61xd7n3NXJx723vdNHLyEbHihC\nuK6wsrK8ajIgHipSr6OjqKu15zopJCxEw7Gur7O3ws7P39bGxby0w1FDJxodJS/Esry2rrnK\nQyIeKDm/qKipp6zDUy8mLThduq+urbG/xcfr4s/fybfA5lgtHRsfKV+3vbevsLfSLR8iLnWu\nqqqnqa/HOignLj/MurSurrO5w9Xb1dHPw7vaUD8jGx8lM8C6vrKxu8FEJiIpPL6rq6mnr718\nMCgsM1e9trGtr7e7yfPq29e9usv2SSweHiArbb+8tbGyt+ssIiQubbStq6ipr8E/KyouPtS9\nta6tr7W82WJocNC9wmtLNyQfIyY3zcS8srO7xzwpKC1Bvq6sqKistuw0KiwxSs69s66usLbD\n4/7q0cjE4Uk/Kh8gJC36v7+2sre89i4nKTFytq+tqauvvE0vLC88bMi7sq2tr7nQ6vvsx8Da\nUUEuIyIkKD3qzbqztLnMOi0tL0TKuLCrq62z0D4vLjRG8si7sq6tsb3O5+/NwM1XQTYoIiMk\nL1/PvLOytbtpNi4uNmbDu7GtrrC6ZDozMDxR+Me4sa+ut8fQ4M6+weBFOSskJCQoOFXNta+x\ntL5UOjIvOljRvbWwsLG8c0M6OT9JY8u6tK+vuMHFysbBz1ZCNSgiIyMrPlTNtK+ur75eRDs4\nQk5R7Mm9trO912tLTV9q9dLCu7S3wMjMxbu6xHVJNCglIyIqMTlhv7Wvr7rL3l5QUEhDSWjU\nwLu/w8bMzc7T2dPNxcLR+P/nzb67v9JwRjErKCQnLC46Ws+8srO2t7q9wNRYR0RFSmh359TN\nx7++v8HGy8rWcWVbaNDHwsLJ2VE7MSwqKywtMTtW08K7uLSysLO9z2JMREZLRkpb587Dv8G/\nw8rN1epxduzbzMnMyszoSDkxLS4uLC40PljOwr65tLGxuMXnW1FPWlhQXOLMxL/FycrOzdHp\nYmNq7tzW1dPU3l9BODIxMzEvMjhK68m/vbu4tLW9yN9/amJuZlxabN/Z1tjX19fNy87U2eXf\n1NfV09z+Uj44NDI1MzEzOUnvzMbDwL24t7rC19rb2dxxXVhe6tjY2tHNzMbI0N/w/uXp9ujm\n8XdPPTc0NDUzNDU9VNjKyMbBvLW0u8XQ2NrW7lNNT1lsdm/y28/HxMvR1tbWz8/c4uTnb0g7\nNjQ3NjQ0OUJW49LOyL25uLm+xcfR3eJnT09YX23r5drOx7/BzN/s7ufd+nRxXl9PPTc1NTg2\nNjlAU/TPycS+ubW1usHN2OjpY0tITVZt4unmz83Mxs3e39zg39vy7epuVUM5NTU3ODc6P07l\ny8TBvbu5t7jC3OpoXFpKR0tSYurc3tPJxcHEz9fV2djZ4OzsbFI9NDMyNTY1Nz1R3MnFv7y5\nt7i8xNHffFpYVkhNX/3f1dXOxsW/v8nQ1dbQztfya1NDNS8tKy8vMTtO2MC6urq2t7W3v9Fi\nVE5NUE1SYezPyMfPyMDCvsPN0djTz9tpU0c7LioqKS4vNUJ0wriztLi2t7m/znpSUE5WUldj\n7s/R2dLRy8nEvsDGy8vFxcrrUEEwKikoKi4yPF3HuLGzubq+xcrrT0VGTV/x7NbNzMXG0eTf\nz8q/wMnIxr+8wNhVRTMqJiQlLC83ZMK0ra63u8DO1upPTU9UZ87IysLFy83hXl191MW/xsnG\nvre6yl9FMiglIiQqLjhkvrCsr7q+w9XsV0NDT2TbyMrHwsDI3nVfZuXTxL+/v7+8t7jA6Egz\nKCQhIyksM1e+sq2uucLM52lOQEJRbNa/vr++xc/aYlFYatvAur2/wL24ushlSzYoJSIkKy86\nbLyxrK27yd5WTEhBRlrqzL26u7zE2XZUSk1g2r+5uby/vLa5zFhBNiolIyEqND/vvbCsrLrW\nbEtISD8+Td/Fu7e7vcDZb1dMT/rNvrS2ubm8ubnKWD0xKSIiIigzPuG5rqytud1VQDo9PkZn\nzL22sLW6v99TS0VLbtS+srS5ur66ucJcPDIpIyEhJjNB3ritq6u10F4/Nzk6PFbOv7ixtbzC\n7kpCQEZf076ysLW2urm2ve5ANiskISAjLz1mvK6qqrLSUD42OT09U8e5s66yvMHrST89QV3W\nw7iztbe7v7y+0Uk4LiUhIiMtPU/Brqqqr8hVPzY1Oz1OzLu1sbO5wdhLPD1DXM+/ta+wt73D\nwr3FWjw2KyQiIig3Rty1rayuvlI+NzM4Pkbmu7KvrrW+0k0/P0FUzb62r6+1u8LIvsNfPTUs\nJiEgJC9D/ruvq6qw1kY6NDc/Rm/AtK6utcPZXEE8O0bxxLq0r7G5vsXDwc1UOzQqIiEjKTtQ\n2Lasq629TTs3NDpET9K4sK6vutHqSzw9RFjLurOvsLm8v83GzWI/OS0lIiImNErvvLCsrLZi\nPjczOENM67yyra65zv9LOztAUtC7tK+us7u9yMfD4Ek6NCojICIrQFvKtq6ts81BNTAzP0tm\nv7GtrbLB8FhCOz5K5761r62vusDLzcXNUDg0LCQiIyg8WNK4rq2vvUk2MjA7Tl/NtK2tr73r\nWEU6PUhewrWyrq60vMLPyMtaPTctJSMjJjVOab2vrq66Uzo2MjhNYs+2rayut85pSzs6QlnO\nubSwrrO+y9TJvsxPOjQoHyAiKT9fybKtrK/JPzg1ND9VcsCvra60yHdaRDk8TOi/trOvsLrB\nyMzCxG0/NSoiICMmN03hsqmprLtOOjYyNUNF7rmxr7G73XhNOjxIasa4tK+ut769wr2+100/\nMCMeICIuPUy/raursu0/PDUzPD5WvrGvr7bG0exEP0pd07+5tK+2v8TGv7zLUj0yJx8gISg7\nR86vqamtvldBOjU5Oj77vre2tsDP0mtKTVrtxLmyr7S9wMC9u8VfPjcrIyMgJi87bbutrKy4\n3lpBOTs8P07SwLezur7A0m5fW2fPv7u3u8XFwr++xf5JOCkiIyInLjVTu62qqrPEzm9KQDs5\nQ+3Xzb6/w7zK6OLw683Avrq8zczFwL3Hd0s4KicmIygsMUy/sq+tsLe7yO5XS0BDS0hQ7OrV\nw8rKwsHGvrq7u8PW09DOzdtZSzksLSwsLS0wQdXAu7m9vLm8xdXzVk9KPjs/SFTf1cq9uLGs\nrbC0vc7a3fNaTEk/Mi0uMDEuLjE9X9nT1s7Buba2uLvByNRZQjo2O0JJU9i9sqyqrK60vcrf\nW09EOjk2LzE0NDY1NTtNVFlz/tO/t7SysbW4u8ttSjo0Njk8UNvJuLGxs7i/xMnZ+F5OSlBM\nPjs8PkE8NzU6PkBGSE/0yLmxsbOxs7q/1lVDPT4+Qk9f5s3Gw8THxsXL0Nnq6tvY9FpOS0tD\nPjo2ODk4ODtAU9/Nwb27ubrBytT0Z2FgaubWy8fDwMG/xMvO3O/m73RraFROTElHPzs5Nzk6\nOz5CTHXYzcPCxMLFzt/m/nr66tjRycbKyMXFwsjW09Xh3eXu7OTlaFlNR0E7OTU0Nzk7QEtg\n39LKxcXFydPc49jQ1tbMysvGxMnMzM7T39/f5/P+c2/q8GpcTk1JPjs6ODo9P0ROZNvQzMnL\nzc3S19PV09HUzMnNzMzS3d3h72pk7Hl63OX17/fv721dU0lERT8+P0BHTU5YZfvb2dXOztDP\nzs7O0tTMztHM0dzY4N/o+fdyb3f+b2pjV1hWT1ZUV2ZeWFlOTE9UXWBfX/r39Nfc29LV0dbv\n5NnZ19nc5d/W1Nva0Nz66mln/V5ZWFVZXFxaYmNgb1xVUU9bXFRcXlp16+nt6N3U09LO3d3S\n1dbR1tjS2NzY5u95W1hXVlVfXl9dVnNqX3JaXWtZVFtZVFxoXXvs8Nzf1dHVz9nq6Obi4dzc\n2Nnf2d306eluaFlWZGRs+GZ17/l0YGNvblVPTkxUW1VeWl3h3eTc2d/X0eXr4+7f1+ze2Nnb\n5ezs7+Xn6+Xr59jU2NzmY0xFR0U+Ozo+QkxWXfvTx8HJzsjLzMvd3tnp2N565+bi3Nvb18/W\n3drg297ycVdGPDw+OzY0OT5IY+LbzsG7uLm+xMPH13FXUmJqXVhc7NDGyM/Jy83Ky87Q5XRi\nQzY0NjYzLi02SGPz4s2+ta+yub6/vcPnT0hOUlFPS1rPwsLAvr27vsnO0upfTTouLjAyLikr\nOFTz48++t6+sr7jAwcDPWkhJSkxTS0/4zb6+vrq5ubzJzc7vUj4vKi0uLysnL1Du5NjFtK6s\nrba/w7/IUjw9S1ZIRUztysXBvrq3tbvJy8bN7kU0LiwuLionKzp571/Stq2tr7O4u77J/kdD\nSUVCRE1t18zBvLmys7u+wMXD5kc7LiouLConJzdfWmfIt62tsbO5v7zPSj9BTEU4P2/az8jE\nu7Gtsb2+u77KZUk9LikrKygoKzdMWs67tq2sr7O7w81YRkM7PkA9TnDjxsK/tbKzs7i7v8jM\ncUg6LiotKygpLTtKWc++ta2wsbK4wNlbT0c7OjxGXmrqxr68trOvsri6v8XKX0Q4KyksKSUn\nLz5GYsm5r62vr7C4v9pdVD84OjpBSkvxzL65urGwtba8vb3VY0o0LC0sKSYqMztM7Me0rq+u\nrbK6xfhWSjs6Oj0/P13ez8C+trCzsrS3u8vYWDctLS8oIykuND1N2LqvsK2orbO6wsdPPUA8\nOzk7TGrdzsS3trays7nCysl6OC8vLiklKjA2OUXQvLqzra2vtLi5ymVTT0c8PUJEWe3Pwry2\nt7W1vc7RZTs4MS0sKCwuMTtD4svBtK+tra+xt8DI3lJGQz8+QE5UbtbHvLy9vb3LVVFEOjIs\nLy0uNDtOWtzAubixrrC0t7vCzH9aV0pFTU5e4dXNwsfKxWFMTTszLy8vLy82Q0Zizb23trKv\nrrS2tb/KznhbSktTTU5f4unLx8TJX/FqOjQ0LywsLjY6O2bUyr+2sbCwsq+2u7vDz+X+d1dM\nUm1eXd7e5mdrcEo9OTcyMTE1OTtIYN3Pxry5uLi3uLq6v77Dy8PM2N3c42Xo7k9ITkk9NTc0\nLy8yOzo9WNfXy767u7u4ub6/vsbKzs7JztLNx8/Ly9lqVU5ANDAvLCwsNDg6TenVxru2s7a1\ntbu9v8PN3N/Z3vTMzdbKz9rwbVJENTYvLCwtMzI6SGfiyLu2tbOvs7a4uL3G0M3aYdfeddlv\ne2lUTEE6OjMxMDM2OD9BSm3YxcC+ubO3tLO6u7y9vczJxOLP21BKTEI3NjMyMTI6PDdKb1zj\n2M/ExL+9xsW8wsXAwsHCvMHFvs3ea04+NTUvLi4vOzpEeXrewbzAvLzBwsfKzt3UzeXYvsvL\nv9Pq5Fo/OjUxMC40OzxO997Pv7+8t728v8jJ0dnM1/zEzefByl5cW0E4ODMvLzQ9P0pq0sa/\nuri9vby/zdPb18Z9zr7bzsLnS1dLOTYyLzI1N0NOWc/Dvbu3ube6w8XM193SX3TN3NvZdElP\nRzk3NTI2OztK69zLvLu4uLy5vMjNx9be3uvS3/nd9UlERzcvLzAyNTlCctjJu7O0t7Ozub/I\nycnWZ/nP4G3m7ks9PzcxLi0xMzY+ccvFvLSwtbi5usDR08bM5tHBxdDYY0pDPDIuLSwuMzhC\na9PEuLW0s7W6vMHQzMTe4cfEys7XVkhBNzEuKy0zNzpP1cq/uba1uL2/ws7VyczXzcrIx89t\nTElANjEuLzU8PUjux7y6uri2vcHE0ezQ0Hjf1dXU3F1EQj82MzIvNUJLYNvIubK0ubW5wsnl\nd93O5+/e2MnI8kI8PDczLiouO0hT5Mq6r6+1tbe9vMl098vT7dzm1srdRjc2NDMxKio1SWrd\n0cKxra+3vcC9vtZffdLOztXXy8PVRzUyMTQvKSw1TNjMzMG0ra+3x9nLzOlgcdvKvcPMxcLP\nUTgvLi4tKywzS9G/vLqyrq+1wu99d19ZVWfZw7y8vcLNWzszLSwsKiwzRt6+trKvrq6zv91d\nTkpNTFztzby5uLa8y1c4LywpKSgqMUjVurGvrq6vuMpnSkFDS1Br0sK4sLGyt8hpPi8rKCgp\nKzBFzLivra+xtbvLWD04OD9JVNrDvLGur7C3yVY3KykoKCksNFbAsaurra+1wNdOOjQyOUdZ\n1sC5sqytrbC/cz8tJiUmJysuPN65ramqr7a6yGZDNjIzPEpk2sK0rqyrrrK60EozJyMlJysv\nN0zHs6yqrK+3wc1OOTMuMj1MbMm9tq2srbC6v8t7RjInJCYpLzQ4S8+4ramssLa9yP1ANC8x\nOlDZzMbBurGvs7zG0tXdYz4tJicsMTQyOE3IsaqqrrO1t73yOCwsL0RufOXUxLavs7m+yMO/\nyNhrRDQtLC0vLy0xQN68sa6xsbK2vN9CNjIzPkZJX/bQu7e5vcLBuba4vcPL0mo2KiclKSsp\nKzn1t6mmqqyus7vWQTMvLzdHSk9v07y0tLm9vrq0usrsVFt2Sy4kIyYtNTAxQ8Gtpaaus7O1\nvO06LjU8SVNEQ2jAuLW6yszExs/tUEtp39rOy9pNODk6OzouLDVL2MC+xbyvrK+86k1TU0o8\nNTZC9N7a19vKu7i/z+XlzcjS2tHIvb/pNi0wLzItKCxIyL66ubWrqKq3z1NPTj0vLTE5SVVX\n4L23trrIzsDAz+5bT/Pd6NvOz8/TSDc+PTQuKys7a+/WvrSsqay4wtZfSTowMTc/TWXdwrW0\nur/FycjXTkdJV2dpaunKxsjX62tOREQ8NDY5Oj9JT3vUycC/yM/Hzdvh4t3X0dLV0c/O0tfb\n2tz2XVVZXFZNTVJcaPv04d3w4N7n8GxbVl1bV1dSWnzq/GtgXm53cG5qbd/S2+PUysjM2Ox6\ndmpeVk9SYnb99erp49zW1dbW3OX0cmNUTUpNU11mfPfq2M/Kztrd5PFxaVVPUllcXl1fcnLz\n8m9laPt9anF5+/Xu7/37+OHf4uTd1tLT2+n19PZ6ZmVjaGpz7unt7vVyam/6fWBaW1ZYWVFW\nWFtma2xp6OPo3tvV0tTa5e7p5vB9bXX18/X7+vf9fvpnXWFraXH7ePPx7+nqf19u9/307/pt\n9e93fmtjcOr2bGdjXWZjXWlv7Oz17t/T3N7b3+Pk3+ltaG1oY19n+/Ltd2Zj/vT2633/8O76\nevjr6ezn6+PffmtyW1NbW1dcaX/q7+3a193u+35qbW1jXV5yf/Ps6t3c5ur49Ozo5ur26ePg\n3+pubfttbWVhZWJcYmxna2185+rw5u9ud/r9c2NeZmhsfPjy3+Dk5n748Plwbnb87fjt6PLk\n5uz3cPr0/XVmYmdoanF7bWNpanfq/Xvs+3jl6uvh397g6vX2/WxpZ2Vga3x2bmhpZ2Vsam9x\nbm/47OPf6u715uPm4Of3+Pp7b2JqfP51fvf45uHp+/p27/RnYF1dX2p3anH37OPm6ODn5fpt\nd/JtbXnxbW9zfXj8d3tfZmlyfWxv7OLm7eTd3dzg4+l1cnlrZFxmY2JhZ2xvdO/04/7w2t/t\n8el6bV9n5fNpbXl8dG/sa1rg3e73/+vh7Wr6aGpgZmBYUHdq5Nva1dDT2N3ec2BaU1xWXlxl\naeL89u/j/NjU1tvd5vf2b/VrZ2JdbXr772tdXGdjZ19abfVraml4dWn38evt5ubd8ezk5u3k\n39jlTVnva29q5+jt6PvVcXBvdutfVVvv/urp6ePo4N9+6O/0aVlhanluYXFkXHhkZmJo/PVq\n39/e2Oz9cf5zdOft3Orj/XZj7GZ3Y3df92fmcvHo9X5ud2bv7OVo8eLYZOJj7l/t/ttv8G9y\nc3tpWlxWZGL5X9/y3+zbZdxe5nHbbNh1+nr0eXty+95qamnd6/f+7fBzXet4dXx6X+Fq7GB1\n62Frc+9oZf1n8Pd2bWfn8Ot/8vr093n18Wl56Hnocuv+6nvqZufubuLlc2rh8u1reXbpWPdY\nWF1jWGHf+flk7dDxY3D73uZs3tXbd+zr7d54Yf5i4n18XPBYZGxm+mFX6P5f2ubVXtPz02F0\n8tdyc2bb8G10+979XFrj+Vb4Vv7efOHcXe3vdF9sXvv1Wu7n33Zre9r38fXa4XReYvBkdVVs\n5+Rt6F3Z1+bne3v4/FL+cPhqYmLXb/N4cGnYZP1jeOPeXv/L8fRcbHP5ZlT/+fH4XPTZ3fJq\n5tr1X1xg32hnVtXSY19c3ej0Stffz090293eWM9z1GHNVdtqdPRcY1nlXO9V1G5hW/3P+mRU\n2eNdT1jOd01k3Nxzbu3b6+t219prU+bi3WxP4NFm5X3S2txb69TsX13raGhXZHHoTllZ8l5l\nXl3+7GjlcdrT4G/s5+LzYvzv2vj0ftXdX17rdfH6YPP5/2hqcV9dUU/nX3dl6d3o5tfi589q\nbWnr5GtUb9na8mrZ431p3X55T+h1emBj217eTNr1Z1xZc19+Xvjt937m6fnpce91+WLr2GRs\n49bX4V7Q315YXe/jYk5r3uHjXuTe2WdP81/vS01s7Hpm7M3J3uXd2OplbH1yZk5qbWZd9+ng\nX1jvfddTcH/q1PRs4udaemZ1fV5eY3zue+7vb9h5fPfc3HXd4eVwbV793uluXWrs32Ro5dfz\ndl1idE5dZWRcWnnl52du4uZ17uLn3vDubu3c8dzh+XHi6GBuWHtpZGdZ52vpY3LheO7g1Xbq\nZXP4X+Zr9W199+XkfPbr2u7oZ2//8WtaZ2hxW2d3fvj8+vFx7O39/W3e92h89vJmYG7za2Br\n5Nvp9+rZ3/Zk3tZ9Ym/n03pubN7vaGFZ7HTuXnVfZnNd8mZmWVnv6fVlYejf9W9u6unn+N/a\n3d3x7s/he1lTcmBdW1luZWdZZd/23fPY2+HU9+Tv2vh14VpmVV/o7t1sbXp0+GxmXFxvb3hq\nXt3n6XNs2/XsdmPu5ujx72164+j73Oh7a1tgWG9qY3Rl5Gbh1ePYd+Z67fVl6/dkZvDo+Wxy\n6u3xbHzmZ3xv92hgeWHa4Oju7N/861h6+nncX3J+4fLx6PbhdWNbXlhUX3FlYmjs0djh593b\n6+Pf53vp3nFoZG/4ZWZaZOzq8XJ79vT1aXh5a+bo5XV+6HDxdmRkWfR+a2lr3eDoZ/bX7fdp\ndO35ZGdudfP8eO/n/ffh7utna/X8XlhZceTvYV9x5N3i9X7i7dXbdO3p5/l2ZG/pbFRVYHbx\nZlpof3R8Y2rz7fZubXfvae/f/f3q2tHd9+Xk3etyXVlmaHRtZe1rd3xrdXZ5/u/p7+Z+8tzt\ndV/tfW1eZ9jm62Nl7vtgXFxha2xue/Tj6ebpeurf7XppZmt3ePPn7Hnt2+Dj93bv6fFfaujz\nYGNi6eleY2jl3+9z4t/zemNoaW1kav5z53lq7/H2/Hh05/3tdu7ccv5x7vFjXFzu7GdVXOTY\n7F5i3N3ld2r34+B4fu7U3mpmbPF8am1uZ2929vJub2N7eu3rZG/s3/Zu7+Pl9V/v8uv7Yfx8\n6e7z9Ph9aXJccGlmY1txdPBfWv7p6Wl4fubj6ers4f7r7uTn+/zs6+z+e/nu4nB7YW1z9e5v\n6Pji9GlsWVdVYWpWVnDi2dx96Nr2bW33b19YYXV6bmrc29fbcOTi3Plr6efb6Glve/L7aW12\n6ntdXXl4emf+52tgX3P03+ny6/hsdfHr9PJzX2ru8Xd3b/xtbXh/e/L+afr7+mtpcu14bPbj\n9P7u7eDj5fPf6e7tbGph/ut+fHl89enuffTm9HReYff0b1tuZGdkWmZpevZncOrt7Ojv4eJv\naW5tX2VmbGv06v7m3tvg6fHf4fXs+Nzse+nf4XX47uxjWXR882BbXFvq/FpOVfvo72vt5Ohr\nXGLv3H15Z37l8+vt4OB9ZvTq8/Xq+HZkZvTh72RqdurvaFb93uTk7vbz293u8ffj4XlvaV1l\nbH9qZWp472Vgcfx3XWBsYvzm69zjfdzc73ru3+169Hr0bXL9+OpvcG1lYmJ2d/L62t3z9/nU\n53Z89+tmaXBobGBpZ25rYW975d96bt/u5Wxg5+/oavh47nlf7XH/YWF05t9zfnX1fvvu8e3l\n3/x4b9/ddXN36W56dm9ffPRbaHrtfGldbu9nfXzucmr45OteamXy7fv86eDu7efz+fPr6HV1\n69zj6v79b1tvbHVtXXRvanHy6HtfX3Pl7fT+++/qf2ju6nlhYF/p8GX39uj0+vdzenfv4d3q\n993X6nps7P5qXWL9b2ZzY2xmbO1yc3h46vz26vf7ffV6bnT4+epvaPjq+GVueOr6fft28eni\n6/l5ZXFy4eJpYG3e5WVdbd3tZXbj6Xzj7HVxb+v3Y1tid3z9aXB+6+j1c374f+t9YGL36ejw\nc/d26/5qevvu5PTs5u/9amRwc2NbXV9t/3BxfO7k7mTy29ba2Nfc3ejX6WJeaHZnYl1daGdc\nZWrp5fT78v1rcnBvb3trbGt9/ubl7ePn+e3m6Htkc21lYmZqavfm535t59nb29/o5+LocW9n\nZ2NfXl9iaPd6c/7u6f1zfXV5+mxoaPbsfWxraHP46v5q/Ofa3Ozo1dfmcP7r73JtYVxcX35q\nXFhjaHFsWV5eb+be19na1NPke/n67m9p6urtb2tvamRebXJm7+7+cXN8/Pfy9W5z5trwb/fc\n2+5vam9mYldYXGZ48Nzc4ujc2ef/Y2hwaXBfW1JdY1148NjR0NHX6mxmXV1SUl1t5d/c3+He\n4+fg19x+ZmxqY21meuLn29ji5H1oX11bWVxdXFtcY/no7tzj3Nbe5GVZZvttX3D+bvft3ud2\nbvHgfmxoamxeaWpgdfbi4vLi3eP4fe9sc/Pv9eze5uDyefXk3+1sf+x4W1RXXFxcb/Ho6uPf\n9P7zevN2ZWFjfP7uefzi4Od8fOfq+mxjY2FxZ2dnZfHs/GtgX25tYVxtemx3+drTzsvMzdLV\n3HRgVlZfa3FgX215bvd+5NXX1dre43ppV0xJSlJTVFBWZHBz/uze2dHNzdPq7e5sWFNXWVdV\nW3b/5trd29nX1dvj4NzfZ15fZXBfVlZefHju7dvS19LT1tvr6Ohxa11fYFVYWFxZUk5SXFtY\nXG/d09rRzs7W29jscmhmalteav50anzx5ujp4tzl5Ol5a3h3ZGVVT1Rm++7s8OPV193l6eLk\n+mloa2JdZW1gZnzz/W/16ujy6t/h5mxjYF5ma/Hy/Org7mliX2hvYmZ1fPf25t/l5evu9uzr\n/H9u9+fl/vHe4Obv+nRveP1ubXJ6b11ZY2hcXGdoZmvv6Xt89Ofi3+To7P7x8n9rY2V283py\ne/l46+x8+O/o9Xp2aGhjZWxpcfHc2t/v59LW4e/r3uX+c2deXm93Zmtmbf/ybF5s/HxkbHv6\n9Hl1dG3w83NwdG5vZ2Nocnj3dvvp4+T0cW1lbu/z6+bn5N3Uzs/S1tzk7PFtX19mXFtZXmNe\nYl1jXF5s7Ot+7NvU3OLd4t7a4/V0ZGNeU05TXm95bWBofvDvfXd5/PN9dmxycWpwZ3Tp3+Du\n6uHZ1tfa3+rv8vhsaGluam1vbnFublxbX2FmdvLp7O7k5un+/Ojf5u7q5X5wc2NhcPp5aGr3\n+3JlY15bV1liYWFg9eXj4NzX29ze3ujt6up7Z2xnZGNeXWVodvfw7Ove2djY297o6urm3N75\ne3toX1pWXGT8+GhhZmNsZV9w+vzk4vLq4O1u/mtbY2dpZ275effr9PRv+uPi6/b6dnl1cXJs\nfefd2+He2+Pm9m5qcv1xZFtf8+Tm+n/u7uzsem73dmdhZmp88W1scO3m+fZ6a2VhYlxgcnNr\nY2FqZ25tdu3m4u/66vD3f/Z4cenk39vd3vHq4fFuYGFdXGtvfe7m6O7+8/L37ubk6O7x+nT4\n8314c2Rldf72dW1pZmtmaXpxa3J5cWhkfXt0Y2Z65tzl5+bi3N7s7+3s6t/p8Ojp8WxjZGVn\nZ19dWWn1fW575ebucn3i3Nzj8353b2dmbm/56eLf3tjX2+Do+3P0dWFbYXhsZV9q+WtlaGxo\nZnpkW11jfPTp4+vi3t3g/v3t39ze3d/b2d33cGtfXl1aXF9fY2Nlamd5+vT6cfvp83v5+XNs\nan/zfX52fPPt7t/d3d3f3N7i8Pzv6eZ9ZVxXW11cW2J/9XV7+3x1dG9pZ3N8bGhqeH78/fjx\n7+rf4Ozi2Nnj7O3s9HBjXFpYWFpXV1xue2xt8d7d29XX2Nvm5un1dv9zevhva2NqaG19fndz\nbGZiZWxwcW9tY2Nqb2959f53+O3j5+vc4+3r6uzq3uTr6+Lual5YWV5gY2p+ff7tfvrp6f5g\nXV5kbnxxe+rp4+jv5d3gffzs5ur3fXh8d/j3a2BgZXF6a3H67f138fH47/VvamV6fmpteujt\n9unx8ufz9/3zfPru9ujk4efn7WxsYWdydWljcvhy++b6+/57bG5rZWxrdvrs4Obq5+z2eXJm\namppbm5ta3f2fnNxcXnw8Xd3//3q5eXm49/m7fh58Ozyc23u6OrtcnB3dnJzb2lvfHt1dPbv\n5ux9/n1vZmBjbG1ze3Lv5uPs+mpobV5cX2zp4Ob1+uzv9nn/cXXv6/lv79/l9u/x/v51dnP5\n8vbxff38dm1kcPT/bXx7ffx09+Xf3t7e+/nm7XVjaWpoY2r4+33o5+71amFeWVlfZG5wduzd\n2dre5+ru6vF/9Ojh8XH+bmZoam1oa3d2bmJp7/N+9u/+c3RubH3u39/sev/r7vL78/L183pz\nd3hubGZt+P1+b3BscvxvYmlsbHHu9Xf38PZ+f/t0cP5wXl5qaGn46ufe2tva2+Dl3+zyfn33\n9/5qbW9yYmBcV19pbGVz8/bm4er5/Or5+3lqdnF5dHJwc/f4bGz8++7l7PHh5PXv8fD8/2lb\nXmdrZGF56+Hj5+bl6uzk7nx59O/r6ezq4ebt6un9dvpzaGFgYVxeYV9iXlpdaGVfb3ny5Nze\n6ePY3vp3bGxvbnrr4t/o7PXu4d3g7Ony7eXh6Ht2b2RubGNqaGRaXWNjZWpuevn07ebl49zf\n6Onp6e/7eGtoaGBdZGdv9nJrc/j5+3x1aGdxdXR8+HZ0/nRseO7t8vx6/vx+7urq7u/k3d7b\n4ebs+fz+ff//7u3zfP3+dXt2dmtqbWNdX2NiYGFfanx6dPXi3OHm7Pr5/XVvfft/Z2BeXWRp\na2tobnv+cXbu6+vd3drY2Nvd39/b3urt93z97/RkantzevT2eu36b2tqcXFucXBtdm9tb3J0\nbGNiaWZbV1tpefHm7Ofp9Pj19nFpaGJgaWtv+ujl6+Lc4d/a2Nzi6nrv7vjz6uru5ez56+ru\nf/9sYG9va3Rua2lgWlZZZGhfZm1pcvDwdHb+/v9tZHD9fXx/9e7o7fX67+Xp8XZuaXh9bf7n\n4+rs8Xz37/p8emxs+/r78uXd3OX66u/s6vTyb2lkY2lkcm1scW/4e2xu/e35f/5vY2p8b3vx\n8nhz+np9+3puam5lbvZ9ffnm6Pfn5+bk7vp7enBwb2z77enq5OHn6u39fvTw/2xoaWxx7/d2\neOLg7PhrefPyeGZra290bWdmcW1nX2BoYmFtbm938+Xp7uXld2Bt+/btfn/n5ODg5+np3eLq\n7Pj45up+dWlv/3BgY2FmcGJcYnT9fn397+3o5fH69O/49Pj0/3T79vX49HdqZ2hoZmZcWl1f\nanR0b37w7erl5O3m6+fh6evm4d3g6O3o4Ofq8ezxe/13bGl1cWd2fG1udW5ia/n4bmBmcGhi\nZmRhZvru9O7r6e33eG795+nx6evt6+/8cG5xcXV77/LwfW17b2hud3FtenJv/Hrs5uLm7eTm\n4t7k497d5nd5/HRmYWBdY19cWl9hYV9ZXHbr6/Z9/fvw+25sf3hzcHnu59/h5Ojd2d/6efXw\n+mZiY2h3dHByc3V3f3X88O3q7ev+d/Xm3OHh39vd8Xhx+XFoc2ZbYG9ta3n+bmtod31tbWpu\naF1dYmlhYWljaPvj3N3f3drc4OHl+X3t7erv7Ovu+X14bWptfuvzfXdvaGNseWpfaXd49vPu\n6u7m6Ovj7/N6bn3x92pmbHjs/3BxcPB3bW95c2pwY2Jsb3f47vTz6vPw9vrl6O/67ePe5nFp\ndX3+bF1mb3T1/3L+9vDs4PL36Obe6u/y9XtxdGxzb3D/fXT7cGVobW1seWxhcf5pbX/+d3T6\n+f/w6/bw3ubyf/7r6e/86OT8fe78euzsb2hkZ+7ofG5tb//2dGpv6ePzfu3j4ej7a2v/7vNs\nZWz7/m9vaHP3c2VjZ2dseXtv/env9fj37uv28fd98/Pw9n7r7fPx6t/c3+j57+DseG9wcW5p\nXlxcX2Zs/Xl1dHb57N7nfHxrYWrv9Xru8fV8evz57/pzbn73e3h8e/98+XpvePj6bmp1/Xp0\n/ffw5ux0a2Z88PNxdvb07O3o497g5+jq9PL1/mtren7+9OfzffX0bG76al1dW1hbX1pfanfy\n8+/v5ePm6vP88vd7bF5fdHhzanfo4+bh3+Xk5Ot4bXJ1/21ue/r17fLy4OP86+99//dxZnBu\nb3x77/Xv7+zs8vf6eWpraWlnZGdodvl8aGpten50cP/v9/Pt8PD0d2pnd375/P75//Hp5ebm\n6/j38vP46Onv7ejp4+bp721vcmZnaGVlZGRtdn5uY2Ntb/jtdXf58fx55dnc39/h7/v39vxu\nZ15gXV5ucGpkb/5vdG5s+fLy7u3s8uPa5eLi4OHo6u/u/vp+Z2pwbWdeYWhuY11jbGxnZm1u\ncPzx9/rl3dzg6OHe5evw/vz0/mxjXGV0cGVpeXH36+nt5uDn6Hx1+3hsaGx49O70+3N+83Nv\nbmJrb2hiXV1eZGt38O7l3trc5d/k7fH4e3d2cmxma2lv7ujr8u3q8ejr/vPt7PV98+74+3hr\navb7e+98dnh4X1leYmhkaGhof+nt/H7w7P5tZ/nv+fx49+vh5/bp3+Hi5n37735taGtnam9s\namtsdfR+cXt88vP18vfx7fN+fP17cf/47+jvfOzg4+34cWZva2ducG9vb356+ez0eW91a2ls\naXZraGRqe3z59e74797l7unp+O/lfWhodHB1dnrn5eXn5vlq/Pf7fnpsZW5oYmRkX2d++eff\n6e7w6+Pk6uvx7+7re21+93NrYF9pampuc3p9+u/x7/vy83hveP5zeXx3ffL8bmdseu/y/X5+\n7vr97Ofg6fl+8Ovt6uzx9Off5+ru+HZ2bm5uaG9nXl5ia2hhY2RqdfPq6fn+/vL28u/2bnbr\n/3v5fv3o5uju+fbs7O/3935yb3VuanRtbXx+eXF6efvu8Pl+8ntyc2pueG1ubXr79evw/mZx\n7urn/v3r5u3y/XX97HhreXRxfnpnZ317aG5ubmpv7v5+7t/g7+zr9X15+/D8+3dza3ns7vD2\n/PXx7m9wdWNfXl1pamheX21teH1sevHt5Ofs49vd5+3t7/71bWhqb/zz7+fm39zj9Xh8cHn0\nfWdocWZrZ2JkZnTx6Ory8+fm7e30dH3s7/PzdmJiamVjcG1kbG9tcnlsaHD5enn1+H/+8/Tu\n8Prw6fr16+fl4ODo5d7k9+bk7/luZ2prb2hfW19uf/h8f+7t7Ozu5N3ybG1pdXZpZF5s+P5v\nePz37vF7fvTv8H1oZ3T++3Z/fuzj5uji5/vs/GpvePR5eHdpdHj/aWr/eu/6b27v5/Xo5ePf\n4+Hm7e75c2ppeft7cXLv8313bnLz/mNoYWRrbG1paWhoa2VqcG5uffr55OTn6u/r5+1/b/f5\nd3b27fD27uvq5O30eP3x9Pfz6OHm/P50b3NjWVldYW/8eHz06+Pq6/7x7vP4bGv66O1xbPx/\nc25ta2tx/n9mY29/dm9ubmZkYmV1b3r7/Ona2t3c2tfX2uTzffLufHJnbXFpcPX8+319aWZ4\ndmRjbnb56PJycWdiaWtpdnX8+3j27Ov7aGN5+X34a2h78+/s6ejo4+Lv8eXo/nZ0eW9qcXZt\ndHF1dW1oevd1c+ff393c3+nt73tpZWZqa2Zxfvd5d29ocnFxaWZmX2l5cPftfXV49+/z9+vp\n6PX27Oz6+Or7ampraHR4fPLv6/Pu7+7s6/b+6+bu73Zx8fZ8dvt1a2NaV1tgcHN09u/e4OPq\n6d/o7XVjd/Hu+m/68/FzZ2dy/m1xa2h6fHFobu/x+P9ve+7r9/Ho7eXe6vH473RtbG5zamhp\n9uTq7/t89+vp7H5xfXjw9nHw9u/q6uh5dG5jYVxfZV9eYW1+/+7+ffvr4O18ffHp7PD1+/jv\n+/55b3h1eXp6/v/17Ov8bGhs9ef5b37v7Ovp/nFxfn51bW5+/P5+8uzi5fF/dv51X19mZ3Z/\ncmx5/O/wem10d29ubmxwefT7/e7r6/N3fe7q9v349eXh5+/n4er0em1z/mllb3JvbWViZW/9\nd3Jtcfnx7+7u8fDu7+7y/u/vfXr68Hxydf53/XFmamlza2txbnd8b2757fHv6e396OLu8ufh\n3+X4fe7m73xuam1rbWhy/vn5cWht8ur7ent6eXd7cmhjaXR0dPny/e3q7ubo9Xr893Rta2pp\naGxuaW/yfH3w6d3b3t/f3uDl8PX5+vf4bW10bGViaGZla310aGd07uvq7Pr7+nx97efm6ubh\n6+zvd3p0cWVfZ293bmpkZ3dtdn7+7+bn+O/3+Ovt9vzt/P17cPDq4On9/H3s5+9vbfr6+Hh0\n/vbt8v5//Xdvb2tudWpob+3n5Ob3fHR0fG9nZG18/254/nr+9/n17Ont6ero7X1zcfh2cnlx\nb2tocHnw6ePk8vp4/u56cvru/PLl7/x58v169ezl7X1rbWxvdmRfZmhpbGRgaGRrefLl3+fs\n+Xj9ff1wbX37+HZ7ffHp7+zy8OPtfXJ5/vn7d3hx++h7bnR3eHhsbvZ+/Xz7eHjp7nn9/HBr\ncHd2fnhv9urp5ejq8vfu/vp2amlrY1xjamZscGxubv71fP/78O188Ofs6e32fvf39e346+vt\n7Xx2dnFnZnh9bWdmaHH/6u18f/Dq7fzt5Obh6v/1fnR3a19bX21sZmhlZm5raXD37Or7+e7n\n5evq6unl6OjucW5pZGhlaXP9c2hwd3x79O7n4uTk5Oz1f/r8b3x0Z2du/XRocH11d3N0Y2Zt\nbmVgcfp+8+7y9/jt6Obh5urs7e3z8vF4b//5d2djZ3N1dG9reu/u/nZudnFubm16+vp9fvr7\n/Ph+dvHl6ff5fO7l7v598+zp92dobmx8cG52dffx6+bk5uv5dnh4eXpwYWdyc21yfvf09/br\n7O3w+vVx9vtramVqaHjufXH99/148/T+7/X65+jw7/j693Ztb3R3e3t4fvHu+2xpa3Z4bGVn\nb3n6fnXt6+fn5uDd29vm8ebk7XxraGFeaWVoZWNzeHJ/8fHzcnH+fX52bG9vdHr8ffny/Pd2\ndPv//v73c2n+5uXt8Ozq8Xd/9n98+v5qdPj6cWd1eXV+9/F59/dzeHRxb2ltamx3ffp5fO7v\n8Oju9Pn5+35vbHBub/h4c/Lu4t7j7n37fPn6c/Xu7u5tZ298b2JqbWtxaF9o9/J8fW5v8O3v\n+ent8eLj5OHs8u7+bnX9cWZpc2xrd3JpZnRxbXVx/PTyd37m4d3e7Ong5+fj7n357/b5bGdi\nZF9cXl9eW15rd/Xt5Oru7+3s+Xj66vdx9e7r7Obw/Ph5/PDt9fJ+dvr4f3Fubm5+e29pdPl5\n/P99/3X+fnJ8b3J6bmp+7/7u/H7g5O3x8/N9eHR3/H93//t3ePr9fejofnD9em/v+nZzb/r3\n6n9obXX15+f7cPXx+f5sa2pvbGp1/vTw9+7v6+/37vT9b2RlaWlubXl8dP/5/vbt7P3x7+rz\nfPf7/f/+7ezq5ubo7ebn5uHw7/rz+XVnYmJfX2NdWl9nbWRhZmhtbXV69OLk7O3r4ujm6PDv\n7uTh6+7s7uvuaWRmX1xdZ293dnN29+778np55OTv6ebp3+D2ffl9Z2hzX1VYYGRmbnN0fXNu\n/uzq7fn4/vfu693c3t/s9+nd6nT08vl8+ntudnFiXGVtZmhvb2x6/XJxeHj58u94dXv75ebu\n6un2dP90cnx3b2lxfX52fnb87/V8/PPy6Or1+X727vDq6+vq6/L7dG7/b2t9dW9naWluaWxv\nbnT/+nh++Ph6dnx6b3h6d37y6e/t7O736N3i6ubm5ufu+e7q7er7a3J+839rZmZpYmFqY2Bh\nYXH5dG7+fffu6+Ps5+Hk5fv++/P+cGRfa3ppam1tenz38+/j3Nzm6+fr6u3x6u72//h6evHx\n8nZ7+3ZsWllfYF1dW15mcu/o7/31/3199Ovvev7z7/vs83/+bvr3dG577vZ+7Ovw/H1xampl\nbWdmZ2x6eXp5+PR2b//u6fj68/Hl4OX07+Lm7Hx7+Pl3bnJgXGhuaWltbvv8dWtsc2dsfvR8\nc3ZvdHr3+P/56Ori3efi3uP7a2ZpbWRkZ27y4uPx7+jl39/rfW969XtmanJpfG92ePfudvvy\n7/777u3o8G94dP76bmdt+W/37PP18Ojt921saWZlZ2lrfX50+Pz66fB+7ePu6+nt7Ozv6+zv\n7ubp7u3283ZpZGlraHhqdPd2Y11fZG19bnV8eejtfXN3dnF0b33t6vL9/3/x5en38vP08vfu\n7ebp7O3p/Gx5d2/47/1xbndzfHFlY2dpcnZ7+Xb3+Pfx7Onn8e3n7Ovv9f37e2tmaHb47m50\neXj+fW1rZWJsb2169fHy7vz05Od7aW388X52dn/29vZ7/O/8/G9xd/bwcvr28vX79PTxfXh4\ncnZ89ndoee/k6fPy+Xp2amdwb+/qbmlu+Ph9eGloam9vZ25yc3ZobfLufvfz+PDl3ePs8vb+\n7Hxy/Wxqcevr9e7s5eru5+z08/j+bHn+eW55dGZlXmljX2htbm1ram7w+292cv5+7+3t3+Pf\n397a3d7h5eh2dWlnaWz+a2NfbXtod3Vhbe7/c3h+fn10dXbq5Ofs8uXn6Or1/Hl9eG1oZGx6\nbWZobnX573N4bGl5/H5uf3Zqdf59+PV3c/jv7Pb++Pvp7fnxe3p7cHz8fG5sfvP/cHv3+3d6\neHR2/PpraWn/6On3en3r7uz4d3N69/t7cXn/+3dzdu3q9X5yfvtuaWlwbnB0c/b38+jo93v3\n+Pnq8Hr47PL67+7yeW58dfT3dnZ++n58amdycnD8+Wxt6+b9b/fneP3n7vbu5OTvcWx7/Gho\n/3BkZnZ7aGnt5ebn3+t1/ubqZWV19+Xu+PX58G9gX2Vx9P1wdG/w3ef7bWZo/PF+eP/29n3+\n8vL2e/Xr7OTj6f35/Hv+bmhreGtlcPb9bG5x+nZrbWlpbvP1+vnt5+rq6fn18vf1635od/16\nbGx0cGz99/jw9u3u8e73+uzh6nR593d5fnZgYXZ1au/Z42RcYF1SWnfv5t7Oz9bwWU5MUmHc\nztrk3uxvYWVYW3Xt1NTX321gdODo7/FzaWhucGlyeGljbGt293xu9OTl5X52Z2Z7/vLs3+Lq\n/fje3+DrbGFcYGhfXGBeXl5fXF5se/Tm3t/a3urk5err9Hp6bm98c23+6Ob2fHFsc/v7+vl4\namt3c2psdXP14ub6/PbxeG95a2tuZWRz8OLh8Px4dvTm+25+dWRhX2R86+18Z2/89/5rbG1v\n9Obg7HR0cP738ejufv7o5vt3dnhsaWdn/PL1e3hsbOne5ufi5+vl8nJ8eXFvbF5nfXpmXnL4\nef31/3z2+Pn7dnz8fnZ47ft7f3fw6u/u7u/78uzv9nvt7Xr37X58eGxqefvwfW999u/u+Xd1\nbHFwcfHm6Pf68/v492pfZ/r49vV4+PV9ZWtucfb9/vrm6ePl8vXs3u7t3+n9furw/ff+cWhx\n/WxpYF1re3tpbH/27ujreW767u31cWlqZXZ+d/zr5uno5vD073h4+nNvbfv3++zp7e7j6/np\n5ur3fG536n1ubGltdXdoa/To/W1wavz1dGhhbW5udm5oann79vT35uHzeG/t4ebu/PHw6ej5\n//7r/WxsavN7Z2pt/PR9bWxqan58bm77+H14cnn49nJw9u7l4vJ+/ujh4/L39/P9e/73+3Zt\nbWNncGpvbGxx/ndy/fV+dm9tcHRybHBscffu7vru6enp4+Hm7O/v6+Xl7ntrbnhubm9oY2Nw\n+e79e/55ePHi5/xt++z7f+vu7uzt+XNoaW5kYWFkbXBpbW5nb/zl8u/n7uvt6ODe3/Tv/mps\nc/5za3B/93398m9neW5ob3zu7/Pr6N3d6f52furn7Xxvb3BxalM/V8fJWky+w0FB7MlQMljL\n2sboe3Pv0k9HaF5e8se3u/5GU/5qP0ftc+LMxsXOcVVfeFpLbMrVdl9JVnBWW1FfcP7RzdJm\nWN/X++vrWl5VVW/s2dP5dfpXYNPN08/Z2u5l82lSWv5+eOh7aV5bZufp8+70WE1PUm3f7PH+\n7ux03tHZ6NrQ3Ot47m9aU23tXVZdYX31/u3kc2t0am/q8O/f7vd6/eDhf/LceFj44F9de/hj\nVnPa+m7k3ONpbvtzbOhzXPntffZfW3dcZO3i3ubr3/9bfujs6m11dlpZae7o+e/i39zf6+3s\n5OLi725tX2lpXGxvbWdmaGJu7uh4ZWpmfOxubX/o7njs7Ovq7ujf39/l5/l2fW55e/T8b29p\nXV1rb3Jtefvk5efj9P9qZ3Xz3vNydml1cX1tXGrw6uzn3+v9dWheXGh/6+rq597a6vh5ZGbw\n8PXu6P50e/H8bHRsbfXz7f9zYmn2bmdxefx88fF8fvZ9c/Jxb2hq9f7+b/vo9fLv8XhnanLv\n/nN5enpze/fy8ez5bXzl53N19n10fP3q8efj7/zv4ej3d21qc25iZWtoaWlnbf3p5/Hy6Ovx\n9v5nbvH3eHb/fPH9cGxx/uzl6v51aWr29nzu6n54+Orn+ft1anF1/2939PHx/fj69n117v5+\n9G51+fVyaXJyenV99Pvw7ejk9fbxfnNmd/1nZ2phYf3t9nB2//Hs9v39/G547+rm5evu9u3n\n6ev++vn7bWdtZmhoZ2Vtb3BuaWh87efv+Pvy6OTv9vpy/+/68ujp9H9vbm9vamlx/P1/ePt4\n/e/+e3Z9+vPw7vf/7/Dz9vfw/2z57fz2dmt0enn9alxiaXNpYmFkbX/s7eXp7Orl7PLl8Pb3\n9u789e7r+/39fevu/HpvbnNsZ2Vla/b7/+re3OHo7v73/25iW19scGRhW1hrbW96cn/393j9\n4uDf6nty9t/k6u7z+vXl73rw9HxyaWJicG9qaGNmc/v77uvx5N7g5t7g9/vy/O/leGtsZ11d\nYGFhXl5gZGRoZWxtdOjq7+fh4+fe3+Pi29/49/br4nh2c/7+Z2dra3F+dWFm+vH0eW/56OHx\n8+3p5/L6dWlnaW5sbHp9eGxudXNvaW1pbft2cXH66OX0+Obf3+Dg5u/07H5udv3t9nRudHFl\nXmVoYV9pa29teujj8/3r4dzc3+Pf4ubg5Ov7eGtpbWtlXl9lbGhjYmZx/fJ7eP3v6ezs6/F2\nb334+3x3/HB29//78/z76+n+fOvp8ff8eu/q7O/37Ozn72tqb/rxb2lja2xgXWRjYmVmb+3l\n5+7r6efs6eTo8fnx+Xd+7+1+aWZpfHdoYmdtfOrn+P/x6+Tr7e32b2/v/3d9dmxmbXJ17/Dm\n6Oji5+x4bG9xaWdsY2Rtb3Nxa2t99/P3++zv7Ph28+fr9f378u/u5ul8fuzwb2NtbmxraWti\nZ3d5c3T26Ofu7+jj3+Po83n17XZnam9uaWdqcnVpY2hmaXJtaXv18eXr+une4e706e729/b7\n/u/u/nZz/nx4bW50cHx1b3Xz7erp+/zo5PP4em1ufGlramh0e/ttbnpxcXj1/H398fR/b2r5\n7vLr7/vx5+bv+HVzf3hzd/n+c29vc3R79fdta/n3+XJ26ebv7PD59359bGxtbnVvcX78c3Pz\n7uzo7O3s7/X0fnz17+x6dnRrev58bnN6bnVzampve3Rv+/Hy6e3w7+rd3+r9+3pwcHD+/m5v\ncXhxbW5namZhafl9bXNvb/ro5u7u73x97Orw+/Lp5ufr6+3n+2xt/vluamtra3b0eGJnfHds\nb3z68+v2bnr39/11bPbs6up8bXf29nZ99fx7bGxq8erv5u33fPn6c37+cXFpcXzv+XB5d3v6\ne3R4fPb6+3N+9/x+df7r6evo7Pn5fXJnaWhjbXf7cmp5e3BtbXh7dfPh3uPq6uTteGttc3Fr\nc21kb+vp8PL15eDt7vPt5ez7b2tvenRqaHP+bWlvcXry7Pf69fLm7nr68/X/fH7+6OLm8P/8\n/+n0Zl9jYGJfZnh5dnlzbvtwannu3vr42tnn2tbcW8rPPGny6v9Rt8U+QdJpQXvO09pQbE1c\n6T5ebK+qtr0zLBUcvquWoFFju2wlGzS6n5u4UixJKDq068NPVno+VHrPtdksLr+svmUuLlS7\nrsFuTEdCRETNr7K6321HQ15mPTjmubK0zzQrM/nl9bO1zUQ7S0Jyytt5Sv7Hx8xMRFzHv9Pt\nU05CRUVcv7rCS0hFPmdtx7+5ztRPODw83cK82l9mQlFp6vzM2s/ZZ2RFT2vs183kbvVPZFZd\nfMvB4uZd7/xcXEtPZeVdXlxUzszg0lFGSEzVv7y/2mxIT1bjyd7a3s3PdktAU2bdwc7vTUVU\nXPbv9U1J893O2OP7XE9j2eLr4dXV/VNY4evvaXd8eeT/fFhZ48fHzmBITVzmxcfhb2TWy9ft\nWlHtz83hX01CTVzg0Nh7VFxXYvrr4t/c099uXlFW4M3L2V9ZV1tXVVhl5mtnZFtjV2Zp287v\n3N7i2+P88+R34Nfm4GFn6Ofa5+ruV1dVZWhr+WzpZ3Hk8PBvb3x6enFiaW/7Z1ttfPPj1Npd\nWFNm1NXb/V1ZWfre5d92X3F9fPrlb2hmft/vfG1hdvJ9e3l+8+b5aWhp++v/b3VzdujpaG9u\ndHFncnjr8ujs+uz0/PTj4u93bHN3aHpwYV5ma3P3a//f39/8aWnw7Hxtb/z+9Obp7Xhodffv\n8ep0YnJ/9fdtYFp149/d63leZm5te3Hr63N1a217fHpqcujg6XRte3rr2ez9f2Vu5+Lt/vf7\n6d/j4OxpZ/Pb2u9rYF5i/OXr+3Bmd+73dGJkZvfj7OTn6fdz//zf8WJjXHt29Oj56/JyYFxf\nZ3Xy7f71+vn59W9tbXry9nlv8O7u7O/5bnzt4+Pj3d3u7N/kem3/eW1lXmdgY2xqaWl3bGVl\nbG5lbHLz5ebvfvXs6+Pl93b68fPp5u7+eWZfY2Rse2ldb/L08/d4d3JnZWRs7+Lp8O7r5uTu\n7+rk6Xdpaf/4/fp1+vX/fG9vd3t1ampua2Zsc3v++v1tZnD1+flt/ejb3fZ+f2734+Tza316\ndnXt5+ziW1Hr7M1wTtDmV9HadmhL3NJp2sxuXVtEPU1Ya8nNZ+ZvZ19i+dzX4+xZV2/f0czN\n1PpdVVt2/tbW2c9+UlxRT1B+6vF4bWNbeNfS3dLb63JbWXL77Nne2Nh7WlhTVWB53N17bvhq\nXWBbYu3v6ens7Ofm393t9uVzXFZfbfvs+WdeZGlvcn3n39zV1eHs4397ef3lb213a3Rq/ubj\n5uLpbmxbXFtXX/1zaG9u+3dtf/zm1tvl5OLt53Rke2lxbWVj++fs7eX0X1RbX2b99uv4fXT9\n7njt3ujk3Ojt9XTd3OTm+nz0dFxlZF1ubWp08O9ufftocnru63l5fe/o5O5xb2pjbnFubHZ8\n8+bp4er08fV0dXx47+/t7H5pcHtv+u/3a2Vubmr68Oz89/9fYGJ25/F++vHm4Ot69np49nf1\n7vv3a2/3+/p4bF9j7uLu/u3x5trlfXxqZGt8/X7waWBramr+8P72/2lt+XRqeXdzdnpte+f1\n9eXc3d7ienl9bm5ubmxqdnp19ed58+779fL9e/D8evh8ZWVtcWViaHT6enb6e2v06fTt7uz3\n/PDw8G9ydvvtfWtncf39++7u/u34a2hp//F1av7q6On06fft6O/z8X1w+XZs9unj6O3q+Hdw\nYGFhXmNlY3T6dW1od+/19+7l5OPj7PH9f/B9dGt0fvbp4+rn59/p+29vfXN+cXl7aWhlYmBk\nX11eZ3vq6ejs6unj2tnb3d7q8e7w+/N4bW1qeXlyamRiYGBlaWtz+Xp+8Pj7cvrh6ev2d/P9\n7vr98Ojf6/5/8+98dH1x/XlqcW1mbPf9dvjr/nFtZ2huaWpydfjz93z77fTq4+jj393n7e3z\n9fPw7f12ZWX9d25mZWRcZ2phYWd2dvn5dPx1+PX79vjv7eru5t7k6fP28vL6/G/+5ej9bWVq\ne3F0b2N3dGVrbWxrcXp97ePf4Ovq59/d6+/69vN2dHF0eGpoX2BmZWBbXWV1/3lsbnzy39/o\n4+Dd3uz57P5u/X16fvL+Z2Vkdv1tb3FzcG588Orv8ft88uvteWt1bW53eXhy+P1+8nz3dXX8\nd290eHL49H37en9+anz/8ujh3/pvePjz73lmaW90cGdsfvbq7nJ28Oz59fV+8fvx7fn5evv2\nd/vq3+l6dmxwa2lsZWpqa2hob3d8e3j26e78ePj76+frfnF3fvX17/L39/bv6Oj9/PVvaXJ7\ndm5ucXZ1fPf49/x48unu5+Do7e3yfnJ7/XVoam1uYFplaGhz9Hd78e3xfvnw9ntvamNr//ry\n9Onq7Ojm6/jr5e938/ZvaGleaHJka3Bqc/X0cnv08P19/H33/nJzefvs6ePyfuLf3d/o6ejj\n83xoXlxfYV1YXGJkaWh2dP3v9u3u+O/m3uDa3/x4e/H5fP7173l8+HhscG5zffvy7/V6cWpn\ncHbw5ufo6Ojz7+5+dv7q6vJtX2RsZGNpde/k7H5+8fFzdGxna2hiWVpcZO7q4d/c1dje6/jz\nb2ZjfOjl3t7k4ujh3ez17PtmX1lTWl1eam11/eLpc3lnXVthaHx/dXb25eXb2drb3dra63ds\ndmJfZWdzcXBmam5+8XhoYGVpbW1obXRrcvLi393a3unu4Oj3/Hv8+Xdz/vPwfn52/PL5bGdk\nX2NhXmH+5ujd3N7e297s9vDz929fWV1mXl5eX2V883t9+H1qYm5++vXx+P717+z4bnz2eHL8\n7O3t397e2NTT1Nbe6n1qaWthXFhQUlpdX2lz9eDY2d7l6nxuZlhYWlleYmFp/efm7uvt7uvj\n3+nk4Ono6PlzcG9v/3t5bXR1/Oz17u7v729ubGtvcmZZXF5jbGp0+Oje29nV1dfY4e7q93Zl\nXVdVXV9kYl9gaGluevDk3trY2Nrf7Pl7fHh8bV9lfOjt9XlsfOzr/nN1eP5qX2BjaGBeZ21x\n7+bh3tzf3drd3uDs8/t9bmRlbGxnX1xhZ2tvcnF+8e/q6d/d3OLr4d3f6XRqaGVdWllbZHZv\nZGJs9/Lx7v3/5+x4e/vq4uT76tzZ2tzm6+b2cHVzd/33c19bZGlcVVRYXXP7X2B5/v3y8O7o\n6e3n4+Te5uzs8untfHd77+30fvP0eGxtc2t/9vd6/Xzz6P5nY3Tv6ufvfvt8b2xv+PN8cXrp\n7vrx7/5xaV9cYnfyeW9tb3z7cm5xb3vyef7p3dzqeP7r4ut/+v356+xsaHr+cG149e/v5ujt\n7flubGJkcPT+fu98+Ox//vN6cfz3/+vo+P95fvX17n76cmttXmJlcPP29/Tz+e/5aWVhYmdp\nbWt4bW755uTq7enn7e3x7vDr7P/47e7m6fJuaXVvdW5pYmVjYGRu9d/h393b3PH4/vT3cmxi\naHr5c2Fiaf79Z3N9amx4/nz37/399vnz5uPzffX6ffh9eHt5e3Fqbf/zcWViZmBcY3f08Ofh\n5ODj4N7x/uXj6+jk7/VvZGloa/zp+21ycWpqaGdram/46/Bsf/374efteW365OPs6ubg6Obq\nfGpmbmpfYWd1dGx28+/t/G1mbe7t/3dqbm9sb2566OXu6uLY19vj+nBwamdt+vj76vfv5Ob2\nen12Yl1tdW5jae9uaPn5amz8eXT1+np8e/Lm4/n74N37cPZ2dvn4bWpqa2dqZl1t9ebl7ez7\n/u7d5W1ocvJ5e/D9bm7u5vd79+jj5ehxa//xbFtebWxna2ldafLreWN45/Zz+vb+8e58+PLv\n5vdx/HJvffr1/OblcGzx7/l9bGt4fGlkZG9z+vtvbffl4+T5+ezo5urpfW53+vRxcGxkZ2z+\n7/5qamdv+fJ6bHT7eXJ/+PHu/vrv7+vr7v59en3m2tnc3Nvf3+ltaWVdX1pVWFdeYlpdZ2Jg\neP579+7d2+b3+u/p3t75dv7n4vD56dvd5ujr8e3x93RkZGltbGhpZmBiavZ3ZV9mbnL+/GVc\nZHrwfm787Ovs6d/e3N7n6Ojn4+X0+uzzb2tqZ2RnYV1ibG57eGp35d/j4d/g4ujo6/579mxi\naGtraWtv//519Xhsc25mZnX7f2lnbXL58nN86+Pg6fLw6Obz/nH06ObmfWt79/5sYW5+a2do\nZ2t5+vl76+bp6PX///j6ef/s5+zu9Gxvfn77bW53bW/5e29vdnT9dvbzY2n+7fHtfG707e96\nZmptdvp+cnx68+rs6+Xd3+Ls+f3++HJuc2lnbW1pZ2dkYm//7u767Obe4fXp3t3c3+598u9v\nbWVgbGRhX19mbXhna3fq6vVyYm5//vh9fn796ex8+Ofl6uni4tzd6O78cW54dnz9d3J2/PH6\ncf9/aWRmYmd0cnJue29tfv377+3x9Orl4OXr7/fs6/fud2FlbWdkX2dtbWpzaXf06ebw7enp\ndXL9dv387+vsfvv8fP1vdXp19+3m7fr+/vn47+52cnzv829sefLm6v91cPpuX15hZGFfXmFo\nc3Zwe/Xo5+Tm7PHp3+bp5u/2bvzo6+Xs6/Ls3+x0a2lgY2VgXmVsa29vZWV3f3dwf+vu7u3v\n6vbw7nn78PR1e/T1++vt6+3x8G579/96fHBt9v5pbm5ubGNpZm53/+7v7+3q93L++Hv49Xls\n8ef8+ft7eHd1cvbu+G9xbmhya2xiX3Lt4+zv6ujo7vj26t/k6uTl7vX2bGhkWlhaWl1kcG5p\nbvXp8/56/ezm8/Ln7+ri5/fs9W/v8m/5+3hzdvP2cWlqa2l+9X3z8W9scHX+7XhscPzzfXFl\nYm37/nF8ev3v+PX16+vu8HJt/+7u7Ob59e/wfH3xe2tmamlqcnj9+Ozv+fPs4OHn7nz98Or+\nbWloanh2am969v5rZ2zw6Xtvd3vt6O/v6efj7HF8/Hdnam5ubWhfX19sbnBzaXnm6/P26Ofg\n3unq5ufr5+b3/u/6dv77cWh9+n7u9ezt7urt/Wpu8+ft+n5vdG1lYF9obX56a23++3z+9/D3\n5+R+bXd2c/f0dHNsb/72dGdiYmv0/Xt1/Onn3+P8fejd6PH0ffPf5Pz07u/m6u39dnRvcGpu\neWlmb2xrdHl2dX7u8m52c2lqaWZoeHdre/Tq6er489/f5n566+jnd2tqbf7w8XpxeW9rbW1o\nbvnr7/3u/Pfl9vLze23+8+7+dmpmc3j7c3zz9Ph99Onr9nJ6fvv0cmRebvz29nx6/u7q93Ju\neO/4cGlw+XV1fm9xd356dXz19P389vf++O3p7/5zb3htaXP/9/R9+fZ2dv3y7/h46+ns6nl4\n+vnl62tma3Rramxwb21xdHttZ2dvcnpvbf307/Hyfn7u4eTr5+Xz+v5va3D4+Wlt+vL3/Xh0\n+P56fHlxefT6c21y7+7q6+fienn/dnFu8f9vdW9tZm1vfP9tenVpbPn8d3z/7env+/Xw9PPy\n/3Fyevb5bnJ2efjs8PPl3uLv+vvw6+/9eHdsb/d4c3l2f/v3/vX5bmp7fnRwcWpkbn78d/Tz\nd/Pm4+bu8e3vdmdra3JwbGJn9X5z7+/159/q+O7l5ODkfWry6/Vub3FveHp4bm9tb3NpbHR1\ncnh0bHju+nr08e7u9e/u+P5tfuHj5eXvdHH383xsb/b6cnb9bXT+//729H5ra29vc3x6dvPq\n8P/8dm5rc3j47u73//l8+e3t7/H8d3R4ef37bW5udXr/fnN6evf8b21yeHJ67+/w7O7t6d7f\n5Xxqan/6fnlraGlwa29wc3n7+vHh4+z09e/1+nt97vD07u9/8unm93Nxa/v6bGJgY2ZraF1f\na21uePfs8/vj3d7v9evo6Pz+bW3q5vd1aWx45+9vc3nv7e3+bWt97XttcnT6+mpeYmZt+Hpu\nbvbk6Ofu//fo5ez6cXjx+HJx7Ozz6fRpYWpub2lfYHj6e3xqXmB0/PDq8O7u7vvv397xdnZ1\neu/4aWf4fnL/8/t4/39+fX707e347vptfv55+vXu8O3k7f5+eXh8eWNeZnnw93VsbPfz/Xxz\n9efsenft/e17Zm1yc2tpbXv+8Ozs597o8PX3+vPv+W1pfP9/cnz5839teXv76e/49fny7PH/\nbnn5fmtqcX3t6/Bw8eXq+Xvv9nluYV1kZWl1bWj/9PT18uri3+707/r+cmpoYWBma2387/v0\n/fvf3O19d/n7c3lvaX36cW/58uzzcHf35OTl7W9teH56a2l2/3FeYmdra2tsbXnv6eXz6uLi\n5/17+PV8evP27/T+Z2T+7XpfZX56+/hzbW3v83Fobu98a2f68fTpeHv6/e93evbe5Hv/9+Hq\ne3119+zr7/d7++38d/vyfu/3al9neGhfYWNmcP34+PLe/WF56Ofz8v3z4Orm8W7w6e7z8H1t\ndHloX2V2dGFobG9ybmlv83dtf+vs5+Pr9e/e2+nx7+j2evR5/n1vbGprbGlhX2xubfjsd2zr\n4Ozx6OXtdHd9bm3x8nf16/V+cX73cXx2Ymdy9/t3b2lyeXF++3X76+57eODl7ubrfnLzdmpz\ncHZqYmp4cGFu7erp4eDm7dzZ7X525t/l7WtnevNsZGlsffj8+vR0dn5iXm/+7vX5+f52fnZf\nbnj2eHT5+fnw6vD57e7v9vP49O737Wxs7er2cfvw9/d7cmt1d3ByeOvn7uzx/3Vyd3n38+vn\nfXxsb3v9/nP2fu/n6er1bGFkZl9iYWx9evr6/O3p6O37//ft8/z66uzq6nZoaW1ycWp09/pp\ncHl5//d1anft8/Z6/+3wenZ+9fHo5Plw+PNoXGp5a3FtZnp9+P1taG38dXv5/ure3OV2cPR+\ncvP0cGxocf5lY3dvbP3p7fV78+51evz9bWhuc21+8G9ndfr+9u7g4uvy7ut/fH98cGVnbvP1\nb3T4e2d0fXF47Ol0ee7s+Pjt6erv6npraXNwXl5vfv31enl56+b3dv3p6ODe7e3s7+95/v55\nfHVwdXR2a2ZiYnJ3b3Z+fXp8ePXn9XJranfs5u7s6PPx+vbybGRqaGn37vl5dXl57+rv6+jo\n6/b8+Xx6+ntvbnt/dG7x7n13+fj49vV7aGpyf3r29ezmdXj5cHvs+Glqe3p9cmZw9nz7cm51\ncPtvaWz37e3p7Hh0/3ry6vPy7ntt+uLf/m/5+/rn7fZmYGh7ZWD+ev54ePpte+3n7X7/fvr2\n/v3z+evr8unt7fXz+HNxd3dmaHFua3X3eW958PdraHp3am3y5/L86Oxyee/p8fxuefL05ujt\n+W9t/vhwcHBrdffl7//v/n7+fGxwc3zvbGVhbvXyfXP+7/r97fRwbfrrfnB8eXRy8dzj7+zo\n6333+XJ4b/n1aV5pdmpnbnFrZn/qd2/56uHv+vr05+zg5n3+fO/m7e58bnn78uz+d25pYml+\nfW9yaGhta3N4fWhs7fn36uvh5+fq/e/o6/5tcP38+mt0dHbz625ed+/ydm55ev1uavry8eXt\nfHp+9/z/+PXp8fbq5vH78vxsbPfwe3B5aF1gZF9fbHr+b2tq9O12euzf4uvi4On4++5pc+/1\n+PXq5Ojv+nlnYXV5amNv+evr5er0+e7vZl9rbGr+eW5saXV3/fdpbn39fXD4dHXs/P768nx7\n3/BveHB4eXF68/X3fG/x39/r+/Hn6Obm8X3s83l373lrX19wbm1rfHVt+/b0a2VzaGloaXV2\n9vLqb2b0fmx/6eX46uPf393b6P78e39xZnRzc25sZF9qbWl77vptb3xlb3Rqevns7+7w5uPp\n6fTv7PH393j9dvvydG9qfe9vb3r46urq+vry6XldW2FtbG1oaft6cHFxdn75enNz/vt+e3R7\neu3t8Onn2t7r6e54bu39a/709XJ58e12a+nzcHN57+79e3tfWm/pcn7scWR87/Rwafb8fG77\nfWlpdHX/fXX8fXv17fP57+rt6vTu5d7n5u1y+mh4bFxdZGls/uvu9u/6/PHz4uT8+P3//vhz\nZ/Tld2p85etrbn5fam5kYWb88vD5+v35bnT96vD73+ZwcfDte/18/+rw8ezi4u/p8Hx/fGNc\nWV7+bmNobmRdaW7xfH7l/vfl6e7w/Orl3uTd4PX2+PtubWpiYnNubXJucWpu8vt1/enya/73\neXdo/fVvfebd8Hb08N7vc+1ycf/tdl5q9Ot3bXf96t3b3u93d+5vWlpqXlRe9+x6c+f0aHjo\n92Ru3uF8+N3c+/z0c3br2dzubW7i92ls+25t7vB+825famNaZH1+cO3g8Hdw7Otscebje//e\n4nX/9XFhZWz9dWn48PHp8PxtZHnva11t9PZ69vNv/PDw5Ori297ubn5++3Znemphc3h0aGn8\n92lz5t787t/u7+npfGZlYXFxY2/5fP59emppeW5qefLt7evv+uno7+7q93Xz9H7r+vfydPjr\n7W9fX15oaFtdXmJqduv37uf99vl77uff5O3q6n357/duYH7ueOrg53Jq+W1naeb2Yvvv/3Lu\n9WhiaP1gXvrs8vPp+Gxffud2fnxu9/vveWh89fH59PVteul8a3v5dnjm3OPu4/R56e/m/V1m\n9unz6+9tZ2hldWlffHZqaHji6vL2a19p7+755uRvaW9rdfZwb29se/Dq6OPn7PDx7eTd3Xpv\n9nRwf3Zoa2v673d76+pyX2lrZHvo63J583dwb350Y3f0/u/i4uzj/GxqZGxw6eHmfGP5emb6\n9vhpceR0bH1tcWFm+vZyb97b7+/l7m9t7fNta3Xv8uL7fOhjYXj/aGR4d2NpcfBoWXHn9G/j\n2+vw7Nzheevd5Xhu8H1fW2b7ZF/v6WVn6drlb/Ln/GtyfHhibHVvefvt72pl89/o7t7k7Hdq\nfnBdaev2ce7m4+1rc3ZqdOnj3N7k3+9kXGJfW2Z4fnNq+Hx68+/u/Gt96nxpc3l7bXPm4Ojm\n7f72/Obl3+Xq5O/memR6b29oX2ZnZF5vcW3r4/Fzb3drbmtw8mxgcPbn/v7n7Oni+fny+un4\ndWp4fe7v8X9mb+/za3F+9u/+9vHt5u/m72/7fmxrbXZ5c2loaf33d3J3+XBxdnv07nZucvb7\ndf347+/z7PhrYXXt/vT1e+/kcmVoaGdu++r4eO/x+3176tvx893mb37o6P1xfXlhY21/eWtr\n6+v46W1s+HPs3/5tbmtiXXHp9Wns3ety/ft7amT4ZFZg6eT0+vDi7GVp8n166d3j5t3e7W1q\n/Ovx9vH3dG90b3B77ed8aWl2eWNd+O5sb3119X1673NtdXZsW2Lv3uv93N7n5PLneWvj6X36\nfvDtcnZ6cn7vbFxaZm13Z23983xnb3X+6Nbc+3R8d35t9+Vybu30cX53cm1z//9pZ/R4/m9x\n+Xf67Oj4cHr4+/t55+f+efj4e3n++GJccfv1dvff7mVp/vVqbf50b/Xd7WhfX25vZX/u9XX5\n5XVu7+1kV2zp629y3uR8+/97bW/o4/l73d3s5/d98G1s+nNlb/V7d+/6/3V5fGZlaGxnZnz7\ncGNn9+73cuve+O3r+PR+7vD+fuvf+WRzcHZvb+96eO38dl9ldnRv/vD/b2tmbnH04fL/febT\n1+Dm39jj7P77dHH5b2JhZGBkZm7+bXJ6e/Ts6/B2bHZ1am5zc/Pt+vzu/v51b3tp+dnj++vo\n5vxpefJ3cvXp9Pp6725faWpv+/jx6vXt+Gz373xwb25taXb5cmZtbnR0d+3o7P735ejydWp8\n6fr77vLwcXNqb+7o+fP+ZGz3cVlYbPpsbuXo9PTh3OTv3N5zcm968Ovz6nVeX2d7b/Hq6mZr\n7O97ZW/1cGrr7nBudnn2ZX3f+nT77HR29vHr5u3o7P/v8eXye/P9dHX5bV9q9/5tX2b15Pb4\n6e1+8+91eGhebnlkYPfv9/T86+rn7+bi8nb83N5vaXpnWV1sc15d/e/9bHzx9mz47/ff3eTm\n6v50cvt5/258enn67up8fGx07u/u9vl88fN8a2ZkY2dfYWz69unhe/7rf2lpcWdjavd+bnTv\n6+bo7O3vfPz2+nxyfWhxevnreWhu6O50cPl5YXDm8frk3N/u7nz4cvnw8XRt9H11XmV0fGhk\naHD0dfb+ZXLv8PJ5Z3Lp7+/t8N/t7+/9/G1jXv77/nvv/F9qavl+fOjv7Xvy5uLn5OR17+j+\n93Nqa3ju6vlmanhpaWpsYmdo7Oj+bmx3/+r+/2poeeHa4+Tg4uno7evsa219bvzz+evwfGZk\nW1hjenlob2tr7unk+uvh3OD14eff43lgZW763Or8eWltcl9dW1tgXm329+7w+v7r3+xtdePn\ndfLh5Oju+3d4auTd8u/x7vF6cGxvZmRpbHBncPppXm96/nNpfPro8/bw+/z53efp5OD4cf9z\nc29v/PL17erob2R6aV5ca3FjaHXp6ejxcm1xc+rs8t3Z2ufq8O70bGdfXV1p/nR86ud5a2Nk\nZWdrbHzr7PN7evPj3+r79/Tn4n9q8+1ubfXu+/X7/3f/6n5eXmj9c2NmdHf97PZ2Z/Tr9fl9\na/Hm5/D88vlvbPru/HZrZ2FlcPjt9u/w7Onw9PhvfXVy8untdPPu7env/l9mdnp7duz0e/v0\neXv3fHJiZGtoamj57Xt5c//7+O55aGvz8nJmb+zh3OTq/Wlw5e5qbvXo8HLq5vRy7eN7c3jy\n83t+7Ov7ce3uaGJraV9cXWhlXmb+9/L34tzw7+Da5ebm9Hj07+v3dvt6dmdtbGRibPFwc/32\nf2/36+56cPB+a3rt5e927O7z8O3kfGds5eN4/u3te21saG5pfG9gXWL25PZr+eDf39/4ZGx1\nZGpwa/3vdGp48+3v+fzi3urv3+l8+WVlY2308/R3b3L4+HR38v/m7Pd+9PdybWv7YFpeYWJh\nc35ucO7h6+zh4Ol89uzu8ezt7uLb3t3l+fn6cnJmXGd0Zl1uampoZ2pYXGlqZmj06/ny7N7V\n3OLz7e7y6/x99Ojs+2tdYnhxbWx2fWl4eGlfbO9taWRt+uXh397i3t3o7/XqfmZode36eXB9\nenns7mllcGNgW19scm9q/e7q397e5uvk7H93+3Z7aFxj+evuen13bPTh7Pz48+368/Do7Pzu\nfPpuaWZkXFtdYG9qam5v/uXX1tni497h3+x9/X39fvXn+G5qYl9h+v1kZWn87fJ4aWtmeXTx\n4O/x6Ofx+eri5Pb59vXqeWdqfnhkZmJid2pianH78OTx7fbq5+be4vN+8fXz8PlsZGRt8+3/\n9e34c3b0cF9gamFgcXpybPvo8+rm4uv58e/rd3T4bGV2eHztfv70efvz/3z4eHZ0ZXr3/vF+\naGRobf9wanLu+fHt7er59Pv24dri9OnrfG5uc2ZfamlofP398nVncnhsYmh49/Fvcvz15Ofx\n7vr87Ob2fvb173x1/v12fuz4cnRwd3Vz+fdteXZs8+/s6Pb6+nb77/h3cnj3fnP4cWxrcHlt\nbHl4aWFscG1y9ev67t7Y3evx+e7o7f55+u3v7vr4+u/1bGJqe3x8bmdvdfrx/nb/b2p88PNs\naXNtcWtzfnt79evs7/Pq4/1pdvd8/fz97+f06O1s8uXybmdqe/ZpZGt45+Ho6vZtcH12b2Zl\na2VqdO3t9P/28PLu7HpnbnlwbHh3+O91a/rr9Hf79vL4+Pz/f3vv8/3s7Pryf3fr7vF5aF9l\ndG9naG57+/Zvde7u6ez38u3o6e3z8+jucnt4ZmFqaGvzdm98bHjq3+924t/pfPx9eXR0cGx5\nffn4/XF26u1maX3293V1/nNs8/h1bHnvfn3s6fz67/Lv/m7/93nv7u/9dPTsdGlr7+7u6fP+\nZ3P9fGt75PdzfX7783x/b2xx7fF1am3ueWJq8u3l7f727OLd4nNqdfftdW30bGz36u5/9/Dx\na2lob3Vwb2xyaGpqcvXp9mxt9/J7cvT29Ot67+bl4ur+dnhybnd1fOv2em1scGR7639pb+vt\n9+7lfX7z9urxc3b5+3Vwd3Z1c29nXV1t/XBucHv18uzvdnB35d3m5vF5b3TzeGVmbGppbftu\nbn3o4PTt7Ovy9Ozv9Xf75vlr++7zd/jybWl1fHVnaXhzZmRydmxodHpub/fudm/t7/bv7Orw\nfHvv6evg7n10/OXyfHhmavj57+Xq++fk8O3s9WxlfHdobW5tc/V8Z2twd3R++nB8bGtxY2V7\nenj75ejf2d7f5t/e5+fs6n5zefPu+W9raXlpXl1YV1lv53FobXX69ePn7+767+/w8O7wcn7u\n7f159v315O3y9PP2bWlx+3NlYGpx/OjteGx58vHv7/fq7/Hl9vF4a29mZW1rdHd59Op9bPf+\ndXp9b3Dp5+97dPT5dnj3eH33d214+Hxvamty+3traWl2enF2e37m3/Hv597X5mlj++b27/x3\nd3B8/GZhb21mZ37wfXVvcnN+/vnt9Xrx9PD28ezq+mh89/p8cPru7uLnfGlncWxsaGZpaG/6\n/nv57ePf3OXu9v31+PxvaHh5ZGdwZF9v7/pvevPr7evn6+tx/G9revPzbfbtdnj47vT39O70\n8fl5emtoZ2p3cW1ud+3/dezg5e709u559/ByaGv6/mtp7u95/Hrq7PHxa2lhd/htbGpqcfvz\n+Xjx6/X15N/s8/fj19rf73twbPdybF9dYWRrXV15e3jx/v3j5fppeXdnb+rrbHHt9fPj7fbz\n/vfw7O3x/fTr5f5peW1nbHt8bHN093ZteXh+b2Fhfu57bml7/v53fO71fvHn9+zp8fX37+3o\n+/ru8uv0b3V9/v56cO/yYm15amp95Ovt9nHv9m1lb/n+dmVrbGh7+v/2/nZ5c3x9bnb6d3vv\n8X1rfe559+vi3OLk5dfY6fP4dmZmdnNiXWdzdWFfYWltXGh///Ds7eno7e7t6vbu7u/3aXrk\n7+ry+vd9+nBkaHz/eXV5d2z/+P13dXt4b3fu3+psZX3n5Hd46/Rx+fT9cP7+b29t++LteWdv\nfGt2cXV7+XJr/3b77uv3+H3y6PVvdv188e7s7e7vfuri6/l99PJz/3twZGVfY2djb/nyb2dy\n8+z9ZGp1bX/983ltdv/u7+vc2+Dl8eLc7Wtr/XxmY2xua2RubWBp8ffw6OXl39jj9Pbw7nN4\n7PbweXn4fHRhbHBcW3F8YVdWWl9haPn2cfzy6eHe3Ovl2ufx497q9fju5+ntfHZpXmpsb25j\navjw+/3i2/X+7Oru7/BxYWJmd+9vX2zs72188ex2YWRmanB2enBq7ebg3/H8dunqaWl27Hpm\nb/Lf4vXv5vPq3+Hi7/rseWRrcu3tZ19k+mxZXmBgbHH++Gpr/Pr7fu/o8ev9/uDh7P9v++v7\nbvz6e2z45n55fvDs/n/g2d76buzrbW1tbGRdX2h7aV9m/Hlvdezzb+/m7HP/7t7j+/tt+t7g\n6vZ+d3h6emlkZXH0alxodf50ae7peHd+4tzs6uTk7fz57Hdvb27vbWlr/G9hW2js9vzq3Ont\n4XtvfPn77f9v83rv53d19Oz7bfXn/WFka3xtZ2ZrcmFifG1eae3u8vPq3eDl6uTa3N/o7O7s\n/GptY2JhaGdVXH7scVxl++vo7vrl8nPs4+Dtb3Pz+2xkdXlfZ3n6/Xt3a/J/aX7t8PbpeW/x\n9PHv5uP38N/sbWl6dGJeX2llYGNqZWf97nVrcXnq2+t76N/k5+b06/Tyefzw7u/s7XX79m9y\nbWttb2BoaV5lbG9tfnx2fe/f5+/06PVucHX5efTh7O18eObf+mns5Ph1+ezl+P7o9Hd8a2xq\nYG56bWBjbO7wcH3r8+nh4/L/fnxoamtnaWf87fHy4t706uPf5G595e1lZmVuY11pcXR69OV1\nYHbt4uppa+3r7ubp7/bv4+n8e3l9bWh4emhubnR9/3N4+WtpaW12f+t8an3l4+vt7+/w9Htz\neGpt8floa3zwcmd18PH97urg537s3t/47uZ1W15/b2NlX2xtbn1zaPt2cvJ7cXN/dWheb25p\nfurl5dfZ6Ofd3+Hr8d7rbGp2/Glv5vdhY2T/9mtvdHBrZvnu9Xls9mts7uPl6Ojzfuvl8uf7\n9vTt+/h6YmZoaXFxYWtuZn758+ZtZnpvbm5uZWFid93t/w==\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2\nContent-type: text/plain\n\nHappy New Year!  -- Nathaniel\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.5.msg",
    "content": "X-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Sat,  6 Jun 1992 10:42:04 -0400 (EDT)\nMessage-ID: <MeAAuwe0M2YtEfF9xR@thumper.bellcore.com>\nDate: Sat,  6 Jun 1992 10:42:04 -0400 (EDT)\nFrom: Nathaniel Borenstein <nsb>\nX-Andrew-Message-Size: 434+4\nMIME-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart.Boundary.4eAAtte0M2Yt8fF9oM\"\nTo: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nSubject: Re: MIME example in VIN\nIn-Reply-To: <9206052121.AA02633@etlibs.etl.go.jp>\nReferences: <9206052121.AA02633@etlibs.etl.go.jp>\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Please read the first section, which is plain text, and ignore the rest.\n\n--Interpart.Boundary.4eAAtte0M2Yt8fF9oM\nContent-type: text/plain; charset=US-ASCII\n\nNeat -- that's very nice looking!  I thought you might be interested in\nseeing another view of the same messages, so here is a picture, first of\nall, of how YOUR message looked to me when reading it with Andrew:\n\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\nAnd this is what the older message you sent me a picture of looks like,\nwhen read with Andrew:\n\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n[An Andrew ToolKit view (alinkview) was included here, but could not be\ndisplayed.]\nFinally, just for fun, here's what my mail-reply window looked like\nwhile composing the message you are now reading:\n\n[An Andrew ToolKit view (mailobjv) was included here, but could not be\ndisplayed.]\n\n--Interpart.Boundary.4eAAtte0M2Yt8fF9oM\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative.Boundary.4eAAtte0M2YtIfF9lv\"\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\nNeat -- that's very nice looking!  I thought you might be interested in seeing=\n another view of the same messages, so here is a picture, first of all, of how=\n YOUR message looked to me when reading it with Andrew:<nl>\n<nl>\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: image/x-xwd\nContent-Description: Your mail to me\nContent-Transfer-Encoding: quoted-printable\n\n=00=00=00k=00=00=00=07=00=00=00=02=00=00=00=08=00=00=02=A2=00=00=03=82=00=\n=00=00=00=00=00=00=01=00=00=00 =00=00=00=01=00=00=00 =00=00=00=08=00=00=02=\n=A4=00=00=00=03=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=08=00=00=01=00=\n=00=00=01=00=00=00=02=9E=00=00=03~=00=00=01=DE=00=00=00=00=00=00=00=02xwd=\nump=00=00=00=00=00=FF=FF=FF=FF=FF=FF=07=00=00=00=00=01=00=00=00=00=00=00=07=\n=00=00=00=00=02=FF=FF=FF=FF=E0=E0=07=00=00=00=00=03=00=00=00=00=FF=FF=07=00=\n=00=00=00=04=92=92=92=92UU=07=00=00=00=00=05=B6=B6=92=92=AA=AA=07=00=00=00=\n=00=06=B6=B6=B6=B6=AA=AA=07=00=00=00=00=07=B6=B6=90=90UU=07=00=00=00=00=08=\n=92=92=92=92=AA=AA=07=00=00=00=00\t=DB=DB=B5=B5=AA=AA=07=00=00=00=00\n=B6=B6kkUU=07=00=00=00=00=0B=DB=DB=DB=DB=AA=AA=07=00=00=00=00=0C=B6=B6=B6=\n=B6UU=07=00=00=00=00=0D=92=92llUU=07=00=00=00=00=0EmmmmUU=07=00=00=00=00=0F=\n=B6=B6=DB=DB=AA=AA=07=00=00=00=00=10=DA=DA=DA=DA=FE=FE=07=00=00=00=00=11=FE=\n=FE=D9=D9=A9=A9=07=00=00=00=00=12=FE=FE=DA=DA=FE=FE=07=00=00=00=00=13=FE=FE=\n=FE=FE=FE=FE=07=00=00=00=00=14=DB=DB=B5=B5UU=07=00=00=00=00=15=92=92kk=00=\n=00=07=00=00=00=00=16mmHH=00=00=07=00=00=00=00=17mmIITT=07=00=00=00=00=18=\nIIII=00=00=07=00=00=00=00=19HH$$UU=07=00=00=00=00=1AII##=00=00=07=00=00=00=\n=00=1Bmm\"\"=00=00=07=00=00=00=00=1C=92=92IIUU=07=00=00=00=00=1D=B5=B5=DA=DA=\n=FE=FE=07=00=00=00=00=1EIIIIUU=07=00=00=00=00=1F=D9=D9=B5=B5=FE=FE=07=00=00=\n=00=00 =92=92=B6=B6=AA=AA=07=00=00=00=00!llll=AA=AA=07=00=00=00=00\"=91=91=\nll=AA=AA=07=00=00=00=00#ll=92=92=AA=AA=07=00=00=00=00$=B5=B5=B5=B5=FE=FE=07=\n=00=00=00=00%=DA=DA=FE=FE=FE=FE=07=00=00=00=00&=B5=B5=FE=FE=FE=FE=07=00=00=\n=00=00'=91=91=B5=B5=FE=FE=07=00=00=00=00(mmmm=00=00=07=00=00=00=00)$$$$=00=\n=00=07=00=00=00=00*mm$$UU=07=00=00=00=00+mm=92=92UU=07=00=00=00=00,=DB=DB=\n=92=92=AA=AA=07=00=00=00=00-IImmUU=07=00=00=00=00.=FE=FE=FE=FE=A9=A9=07=00=\n=00=00=00/=FE=FE=B4=B4=A9=A9=07=00=00=00=000=92=92II=00=00=07=00=00=00=00=\n1$$II=00=00=07=00=00=00=002$$IIUU=07=00=00=00=003=DB=DB=91=91UU=07=00=00=00=\n=004=DA=DA=FE=FE=A9=A9=07=00=00=00=005=92=92=DB=DB=A9=A9=07=00=00=00=006=B6=\n=B6mm=AB=AB=07=00=00=00=007=92=92=92=92=00=00=07=00=00=00=008II=00=00=00=00=\n=07=00=00=00=009$$=00=00=00=00=07=00=00=00=00:IIII=AA=AA=07=00=00=00=00;=91=\n=91II=AA=AA=07=00=00=00=00<$$$$UU=07=00=00=00=00=3Dmm=92=92=00=00=07=00=00=\n=00=00>IInn=AA=AA=07=00=00=00=00?JJmm=00=00=07=00=00=00=00@=92=92=B6=B6UU=\n=07=00=00=00=00A=B6=B6jj=00=00=07=00=00=00=00B=FE=FE=B4=B4TT=07=00=00=00=00=\nC=B6=B6=91=91=00=00=07=00=00=00=00D=B3=B3=91=91=FE=FE=07=00=00=00=00E=D9=D9=\n=91=91=FE=FE=07=00=00=00=00FllII=AA=AA=07=00=00=00=00G=FE=FE=B5=B5=FE=FE=07=\n=00=00=00=00H=DB=DB=DB=DBUU=07=00=00=00=00I=91=91=DB=DB=FE=FE=07=00=00=00=\n=00J##=00=00UU=07=00=00=00=00K=DB=DBkkUU=07=00=00=00=00L=92=92\"\"=00=00=07=\n=00=00=00=00M=FE=FE=D9=D9TT=07=00=00=00=00N=DB=DB=B2=B2=00=00=07=00=00=00=\n=00O=91=91=91=91=FE=FE=07=00=00=00=00P=B6=B6=B6=B6=00=00=07=00=00=00=00QH=\nH=00=00UU=07=00=00=00=00R=DB=DB=92=92=00=00=07=00=00=00=00S=DB=DBii=00=00=\n=07=00=00=00=00T=FE=FE=91=91=AA=AA=07=00=00=00=00U=B6=B6IIUU=07=00=00=00=00=\nV=FE=FE=D7=D7=00=00=07=00=00=00=00W=B6=B6HH=00=00=07=00=00=00=00X=00=00$$=\n=00=00=07=00=00=00=00Y=B7=B7=DB=DBUU=07=00=00=00=00Zmm=00=00=00=00=07=00=00=\n=00=00[=00=00$$UU=07=00=00=00=00\\=00=00=00=00UU=07=00=00=00=00]=92=92##UU=\n=07=00=00=00=00^=FE=FE=91=91=FE=FE=07=00=00=00=00_mm=B6=B6=A9=A9=07=00=00=\n=00=00`=DB=DBmm=AB=AB=07=00=00=00=00a=B6=B6II=AB=AB=07=00=00=00=00b=94=94=\n=B6=B6=00=00=07=00=00=00=00c=00=00II=00=00=07=00=00=00=00d=FE=FE=8F=8FTT=07=\n=00=00=00=00eII=92=92=00=00=07=00=00=00=00f=B6=B6=DB=DB=00=00=07=00=00=00=\n=00g=FE=FEll=AB=AB=07=00=00=00=00hII=92=92SS=07=00=00=00=00i=B6=B6!!=00=00=\n=07=00=00=00=00j=92=92=00=00=00=00=07=00=00=00=00k=DB=DBIIUU=07=00=00=00=00=\nl=B6=B6=FE=FE=A9=A9=07=00=00=00=00m=DB=DBHH=00=00=07=00=00=00=00n=FE=FE=8F=\n=8F=00=00=07=00=00=00=00o=00=00=FF=FF=00=00=07=00=00=00=00p=A8=A8=A8=A8=A8=\n=A8=07=00=00=00=00q=FF=FF=00=00=00=00=07=00=00=00=00r=D3=D3=D3=D3=D3=D3=07=\n=00=00=00=00s=00=00=E6=E6=19=19=07=00=00=00=00t=00=00=7F=7F=7F=7F=07=00=00=\n=00=00u=00=00=BF=BF??=07=00=00=00=00v``````=07=00=00=00=00w=FF=FF=C0=C0=CB=\n=CB=07=00=00=00=00x=E6=E6=AD=AD=D1=D1=07=00=00=00=00y=7F=7F``=E5=E5=07=00=\n=00=00=00z=00=00=00=00=80=80=07=00=00=00=00{=F5=F5=DE=DE=B3=B3=07=00=00=00=\n=00|=DD=DD=C8=C8=AE=AE=07=00=00=00=00}zzoo=9A=9A=07=00=00=00=00~=B8=B8=A7=\n=A7=A6=A6=07=00=00=00=00=7F=98=98=FB=FB=98=98=07=00=00=00=00=80=00=00=B9=B9=\n=00=00=07=00=00=00=00=81=89=89=E2=E2=A2=A2=07=00=00=00=00=82LL}}=C8=C8=07=\n=00=00=00=00=83rr=BC=BC=B0=B0=07=00=00=00=00=84LL}}LL=07=00=00=00=00=85=89=\n=89=E2=E2=89=89=07=00=00=00=00=86rr=BC=BCrr=07=00=00=00=00=87=89=89=E2=E2=\n=98=98=07=00=00=00=00=88rr=BC=BC=98=98=07=00=00=00=00=89=89=89=E2=E2=96=96=\n=07=00=00=00=00=8ALL}}=8B=8B=07=00=00=00=00=8Brr=BC=BC=92=92=07=00=00=00=00=\n=8C=00=00=00=00=F7=F7=07=00=00=00=00=8D=BF=BF=BF=BF=BF=BF=07=00=00=00=00=8E=\n=BF=BF=90=90=D8=D8=07=00=00=00=00=8F??????=07=00=00=00=00=90=7F=7F=7F=7F=7F=\n=7F=07=00=00=00=00=91rr=BC=BC=81=81=07=00=00=00=00=92LL}}=CC=CC=07=00=00=00=\n=00=93rr=BC=BC=B2=B2=07=00=00=00=00=94=F7=F7=E8=E8=00=00=07=00=00=00=00=95=\n=89=89=E2=E2=99=99=07=00=00=00=00=96LL}}=9C=9C=07=00=00=00=00=97rr=BC=BC=9A=\n=9A=07=00=00=00=00=98LL}}=8C=8C=07=00=00=00=00=99=00=00=00=00=81=81=07=00=\n=00=00=00=9A=F7=F7=EB=EB=00=00=07=00=00=00=00=9B=89=89=E2=E2=8B=8B=07=00=00=\n=00=00=9CLL}}WW=07=00=00=00=00=9Drr=BC=BCww=07=00=00=00=00=9Err=BC=BC=B1=B1=\n=07=00=00=00=00=9FLL}}XX=07=00=00=00=00=A0rr=BC=BCxx=07=00=00=00=00=A1=DC=\n=DC=FE=FE=00=00=07=00=00=00=00=A2=DB=DB=DB=DB=00=00=07=00=00=00=00=A3=DC=DC=\n=FE=FETT=07=00=00=00=00=A4=FE=FEHHTT=07=00=00=00=00=A5=FE=FE##VV=07=00=00=\n=00=00=A6=DB=DB$$WW=07=00=00=00=00=A7=B6=B6=00=00WW=07=00=00=00=00=A8=92=92=\n=00=00UU=07=00=00=00=00=A9=FE=FEGG=00=00=07=00=00=00=00=AA=FE=FE!!=00=00=07=\n=00=00=00=00=AB=DB=DB  =00=00=07=00=00=00=00=AC=B6=B6=00=00=00=00=07=00=00=\n=00=00=AD=DB=DB=00=00=00=00=07=00=00=00=00=AE=DB=DBII=AA=AA=07=00=00=00=00=\n=AF=FE=FEkkTT=07=00=00=00=00=B0=B6=B6$$WW=07=00=00=00=00=B1=FE=FEii=00=00=\n=07=00=00=00=00=B2mm=00=00UU=07=00=00=00=00=B3=FE=FE##=AA=AA=07=00=00=00=00=\n=B4=FE=FEHH=A9=A9=07=00=00=00=00=B5$$mm=00=00=07=00=00=00=00=B6$$mmTT=07=00=\n=00=00=00=B7=00=00IIUU=07=00=00=00=00=B8=DB=DB=00=00WW=07=00=00=00=00=B9=00=\n=00=00=00=00=00=07=00=00=00=00=BA=00=00=00=00=00=00=07=00=00=00=00=BB=00=00=\n=00=00=00=00=07=00=00=00=00=BC=00=00=00=00=00=00=07=00=00=00=00=BD=00=00=00=\n=00=00=00=07=00=00=00=00=BE=00=00=00=00=00=00=07=00=00=00=00=BF=00=00=00=00=\n=00=00=07=00=00=00=00=C0=00=00=00=00=00=00=07=00=00=00=00=C1=00=00=00=00=00=\n=00=07=00=00=00=00=C2=00=00=00=00=00=00=07=00=00=00=00=C3=00=00=00=00=00=00=\n=07=00=00=00=00=C4=00=00=00=00=00=00=07=00=00=00=00=C5=00=00=00=00=00=00=07=\n=00=00=00=00=C6=00=00=00=00=00=00=07=00=00=00=00=C7=00=00=00=00=00=00=07=00=\n=00=00=00=C8=00=00=00=00=00=00=07=00=00=00=00=C9=00=00=00=00=00=00=07=00=00=\n=00=00=CA=00=00=00=00=00=00=07=00=00=00=00=CB=00=00=00=00=00=00=07=00=00=00=\n=00=CC=00=00=00=00=00=00=07=00=00=00=00=CD=00=00=00=00=00=00=07=00=00=00=00=\n=CE=00=00=00=00=00=00=07=00=00=00=00=CF=00=00=00=00=00=00=07=00=00=00=00=D0=\n=00=00=00=00=00=00=07=00=00=00=00=D1=00=00=00=00=00=00=07=00=00=00=00=D2=00=\n=00=00=00=00=00=07=00=00=00=00=D3=00=00=00=00=00=00=07=00=00=00=00=D4=00=00=\n=00=00=00=00=07=00=00=00=00=D5=00=00=00=00=00=00=07=00=00=00=00=D6=00=00=00=\n=00=00=00=07=00=00=00=00=D7=00=00=00=00=00=00=07=00=00=00=00=D8=00=00=00=00=\n=00=00=07=00=00=00=00=D9=00=00=00=00=00=00=07=00=00=00=00=DA=00=00=00=00=00=\n=00=07=00=00=00=00=DB=00=00=00=00=00=00=07=00=00=00=00=DC=00=00=00=00=00=00=\n=07=00=00=00=00=DD=00=00=00=00=00=00=07=00=00=00=00=DE=00=00=00=00=00=00=07=\n=00=00=00=00=DF=00=00=00=00=00=00=07=00=00=00=00=E0=00=00=00=00=00=00=07=00=\n=00=00=00=E1=00=00=00=00=00=00=07=00=00=00=00=E2=00=00=00=00=00=00=07=00=00=\n=00=00=E3=00=00=00=00=00=00=07=00=00=00=00=E4=00=00=00=00=00=00=07=00=00=00=\n=00=E5=00=00=00=00=00=00=07=00=00=00=00=E6=00=00=00=00=00=00=07=00=00=00=00=\n=E7=00=00=00=00=00=00=07=00=00=00=00=E8=00=00=00=00=00=00=07=00=00=00=00=E9=\n=00=00=00=00=00=00=07=00=00=00=00=EA=00=00=00=00=00=00=07=00=00=00=00=EB=00=\n=00=00=00=00=00=07=00=00=00=00=EC=00=00=00=00=00=00=07=00=00=00=00=ED=00=00=\n=00=00=00=00=07=00=00=00=00=EE=00=00=00=00=00=00=07=00=00=00=00=EF=00=00=00=\n=00=00=00=07=00=00=00=00=F0=00=00=00=00=00=00=07=00=00=00=00=F1=00=00=00=00=\n=00=00=07=00=00=00=00=F2=00=00=00=00=00=00=07=00=00=00=00=F3=00=00=00=00=00=\n=00=07=00=00=00=00=F4=00=00=00=00=00=00=07=00=00=00=00=F5=00=00=00=00=00=00=\n=07=00=00=00=00=F6=00=00=00=00=00=00=07=00=00=00=00=F7=00=00=00=00=00=00=07=\n=00=00=00=00=F8=00=00=00=00=00=00=07=00=00=00=00=F9=00=00=00=00=00=00=07=00=\n=00=00=00=FA=00=00=00=00=00=00=07=00=00=00=00=FB=00=00=00=00=00=00=07=00=00=\n=00=00=FC=00=00=00=00=00=00=07=00=00=00=00=FD=00=00=00=00=00=00=07=00=00=00=\n=00=FE=00=00=00=00=00=00=07=00=00=00=00=FF=00=00=00=00=00=00=07=00=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=8C=AC=01=\n=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=01=B5=\n=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=00=\n=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=\n=E8=04=01=01=00=00=00=01=01=01=01=01=01=01=01=01=01=01=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=00=00=00=00=00=00=00=00=01=01=01=01=01=01=01=01=01=01=01=00=00=00=01=\n=01=00=00=01=01=00=00=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=01=01=01=01=01=00=00=00=01=00=00=00=00=00=00=00=00=00=00=\n=01=01=01=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=01=01=\n=01=01=00=00=00=00=00=00=00=00=01=01=00=00=00=00=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=00=00=00=\n=01=01=FF=FF=01=01=00=00=00=01=00=01=01=00=00=00=00=01=00=01=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=00=00=01=00=01=00=00=00=00=00=00=00=00=\n=01=00=00=00=01=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=00=00=\n=00=01=01=E0\\=01=01=00=00=00=01=00=00=01=01=00=00=01=00=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=00=00=01=00=00=00=01=00=00=00=00=00=00=\n=00=01=00=00=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=00=\n=00=00=01=01=FF=FF=01=01=00=00=00=01=00=00=00=01=01=00=01=00=00=01=00=00=00=\n=00=00=00=00=00=01=01=00=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=\n=01=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=\n=01=00=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=00=00=\n=00=00=01=00=00=00=00=00=01=00=01=01=00=00=00=01=01=01=00=00=01=00=01=01=00=\n=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=01=00=00=00=00=00=00=00=\n=01=00=00=00=00=00=00=01=01=01=00=00=00=00=01=00=00=00=00=01=01=01=01=00=00=\n=01=01=01=00=00=01=00=01=01=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=01=01=01=01=00=00=01=00=00=01=\n=00=00=00=01=01=F4=88=01=01=00=00=00=01=00=00=00=01=00=00=00=00=00=01=00=00=\n=00=00=00=00=00=00=01=00=01=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=\n=00=00=00=01=00=00=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=\n=00=00=01=00=00=00=00=00=00=00=00=01=01=01=00=00=01=00=00=00=01=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=01=01=00=00=01=00=00=00=00=00=01=00=01=01=00=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=\n=00=01=01=01=01=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=\n=01=00=00=00=01=00=01=01=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=00=00=\n=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=01=00=00=\n=01=00=00=00=01=01=F6=C0=01=01=00=00=00=01=00=00=01=00=01=01=00=00=00=01=00=\n=00=00=00=00=00=00=00=01=00=01=00=01=00=01=01=01=01=01=00=00=01=01=00=00=00=\n=00=01=01=00=00=00=00=01=01=01=01=00=01=00=00=00=01=00=01=01=01=01=01=00=00=\n=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=00=00=01=00=00=00=\n=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=01=01=01=01=00=01=00=00=\n=00=01=00=01=00=00=00=01=00=01=01=01=01=01=00=01=00=00=00=01=00=00=00=00=00=\n=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=\n=00=01=01=01=01=01=00=01=00=00=00=00=00=00=01=01=00=00=00=00=00=00=00=00=00=\n=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=01=00=\n=00=01=00=00=00=01=01=A4=1C=01=01=00=00=00=01=00=00=01=00=00=01=01=00=00=01=\n=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=\n=00=00=00=00=01=00=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=00=00=01=00=00=\n=00=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=\n=00=00=01=00=01=00=00=00=01=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=\n=01=00=01=00=00=00=00=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=\n=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=01=01=01=01=01=01=01=\n=00=00=01=00=00=00=01=01=01=01=01=01=00=00=00=01=00=01=00=00=00=00=01=01=00=\n=01=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=00=00=01=00=01=00=00=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=01=01=01=01=00=01=00=00=00=01=\n=00=01=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=01=00=00=\n=00=00=00=00=00=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=\n=00=00=00=01=00=00=01=01=01=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=\n=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=\n=00=01=00=01=00=00=00=01=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=\n=00=00=00=01=00=00=00=01=01=8C=AC=01=01=00=00=00=01=00=00=00=00=00=00=00=00=\n=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=01=01=00=00=00=01=01=\n=01=00=00=00=01=01=01=00=00=00=01=01=01=01=00=00=00=00=00=01=00=00=01=01=01=\n=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=01=00=00=\n=00=00=00=00=00=00=00=00=01=01=01=00=00=01=00=00=00=01=00=00=01=01=01=01=00=\n=01=00=00=00=01=00=00=00=00=00=01=00=00=01=01=01=00=00=00=01=01=01=01=00=00=\n=00=00=00=00=00=01=00=00=00=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=\n=01=01=01=00=00=01=01=01=00=00=01=00=00=00=00=00=00=01=01=01=00=00=00=00=00=\n=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=01=00=00=00=01=01=01=B5=01=01=00=00=00=01=01=01=01=01=01=01=01=\n=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=01=01=01=01=\n=01=01=01=01=01=01=00=00=00=01=01=00=01=01=01=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=01=01=E8=04=01=01=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=01=00=00=01=01=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=01=01=FF=FF=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=E0\\=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=FF=FF=01=01|||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||z|||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n=01=01=F4=88=01=01|||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||}z|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||}=01=01=F6=C0=01=01||~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=A4=1C=\n=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}|~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=01||~~~=\n~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~}}=01=01=01=B5=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~=\n~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=E8=04=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}}}}}}}}}}}}}}}}}}}~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=\n=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~vvvvvv~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zz{zzz{{{{{{{{{z{zzzz{{{{zzzz{{{{{{{{{zz{zzz{{{{{{{{{{{{{zzz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{zz{{{{zzzz{{{zzzzz{{{zzz{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=A4=\n=1C=01=01||~}}|||||vvvvv||||||||~~}}{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{zz{{zzz{{{{zzz{{{{{{{{=\n{{zz{{zz{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{{{=\n{zzzz{{{zz{{zz{{zzzzz{{zzzzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}|||||vv||||||||}||~~}}{{{{{{=\n{{z{{{{{{{{{{{{z{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{z{{{zzz{{{{zzz{{{{{{{{{{{{{{zz{{{{{{{{{{{z{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{zz{{zz{{z{{{{{z{{{zz{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=01||=\n~}}||~~~v|||||~~~}}||~~}}{{{{{{{{z{{{{{zz{{{{{zz{{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{zzz{zz{{zz{{{zzzz{{zzz{{zz{{{{{{{zz{{{z{zz{{z{zz{{{zzzz{{zzz{{zz{{{=\n{zz{{{{{{{{{zz{{{{{zzz{zz{{{{zzz{zzz{zzz{zz{{{{{zzzz{{zzzz{{{{{{{zz{{{zzz=\n{zz{{zzzz{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=01=B5=01=01||~}}||}}}}}}}}}}}}}}||~~}}{{{{{{{{zz{{{z{{z=\n{{{zzz{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{zzz{zzz{zz{zz{{zz{{zz{{zz{{{{{{{zz{=\n{{z{zz{{z{zz{{zz{{zz{{zz{{zz{{{{zz{{{{{{{zzz{{{{{{{zzz{zz{{z{{zz{zz{{z{{z=\n{{{{{zz{{zz{{zz{{{{{{{{zz{{{{zzzz{{{zzzzz{{{zzz{{{{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}|}}}}}}}=\n}}}}}}}}||~~}}{{{{{{{{zzz{{{{{z{{zzzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{zz{{=\nzz{{zz{{{{{zz{{zz{{zz{{{{{{{zz{{{z{zz{z{{zz{{{{{{zz{{zz{{zz{{{{{{{{{{{{{{=\nzzz{{{{{{zz{{zz{zz{{zz{zzz{zz{z{{{{{zz{{zz{{zz{{{{{{{{zz{{{{zzzz{{{{{{zz{=\n{{{zzz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=\n=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzz{{{z{{zzzzz{{z{{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{zz{{zzzzz{{zz{{zz{{{{{{{zz{{{z{{zzz{{z=\nz{{{zzzzz{{zz{{zz{{{{{{{{{{{{{{{zz{{{{{{zz{{zz{zzzzzz{{zz{zzz{{{{{{zz{{zz=\n{{zz{{{{{{{{zz{{{zz{{zz{{{{{{z{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{zzz{{{z{{{{zzzz{zzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{zz{zz{{=\nzz{{zz{{zz{{{{{{{zz{{{z{{zzz{{zz{{zz{{zz{{zz{{zz{{{{{{{{{{{zz{{{z{{{{{{zz=\n{{zz{zz{{{{{{zzz{zz{{{{{{zz{{zz{{zz{{{{{{{{zz{{{zz{{zz{zz{{{z{zz{{{z{{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zz{{{{{{{{{{zzz{{zzzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{zz{{zz{zz{{zz{{zz{{zz{{{{{{{zz{{{z{{{z{{{zz{{zz{{zz{{z=\nz{{zz{{{{zz{{{{{zzz{zz{{{{{{zz{{zz{zzz{{z{{zzz{zz{{{{{{zz{{zz{{zz{{{{{{{{=\nzz{{{zz{{zz{zz{{zz{zzz{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{=\n{{{z{{{{{{zz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{zzz{zzz{zzz{zzzzzzzzzz{{{=\n{{{zz{{zzz{{z{{zzzz{{zzz{zzzzzzzzzz{{{zz{{{{{{zzzz{{{{{{zzz{{zzz{zzzz{{{{=\nz{{z{{{{{{{{zzzz{{zzzz{{{{{zzzzzz{{zzzz{{{zzzz{{{zzzz{{{{zz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzzzzzzzzzzzz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zzz{{zzz{{{{{{{{=\n{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz=\nzzzz{~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=\n=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{zz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{=\nz{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{{zzz{~~~~~~~~~~~~~~~~~z{~~zz{~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{=\nz{{{{{zz{{{{{zz{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzzz{zzzzzz{zzz{zz=\nz{{zzz{{zz{zz{zzz{{{{zzz{{{zzzz{{{zzz{{{{{{zzz{{zz{{zz{zzzz{{zzz{{{{{{{z{=\n{{{z{{{{z{{{{zzz{{{{zzz{{{{{{z{zz{{z{{{{zzz{{zzz{zzz{zzz{{{{{z{z{{{z{z{{{=\n{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~{zz{~~~~~~~=\n~~~~~~~~~zz{~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zz{{{z{{z{{{zzz{{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{zz{{z{{zz{{z{{z{{{z{{z{{{z{{z{{{z{{zz{zzz{zz{{z{{z{{zz{z{{{z{{z{{{{{=\nzz{{z{{z{{{z{{z{{{zz{zz{{{{{z{{{{{zzzzzz{{{zz{{z{{z{{z{{{{{{z{{z{{z{{{z{{=\n{z{{z{{{z{{{z{{{{{{z{zz{zz{z{{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{z{=\n{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~zz{~~zzzzz{zzz{zzz{zz{~zzzz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzz{{{{{z{{=\nzzzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{z{{{z{{z{{{z{{zzzzz{{z{=\n{{z{{{z{{zz{{{{z{{{z{{zz{{{{{{{{{{zz{{z{{{z{{z{{{z{{{z{{{{{z{{{{{z{{{{z{{=\n{{{{zz{{zz{{{{{{{{z{{zz{z{{{zzzzz{{z{{{z{{{z{{{{{{z{{z{z{{z{{{zzzzz{{zz{{=\n{{zz{{{{{{{zz{{z{{{z{{zzzzz{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~zz{zz{{zz{{zzz{zz{{zz=\n{{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{zzzz{{{z{{zzzzz{{z{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{zz{z{=\n{z{{{{{{z{{{z{{{z{z{{{z{{{{{{z{{{z{{{z{{{zz{{{zz{{z{{{zz{{{{{{{zz{z{{z{{{=\nz{{z{{{z{{{z{{{{{z{{{{{z{{{{z{{{{zz{z{{{zz{{{{{{{z{{{z{z{{{z{{{{{{{z{{z{{=\nz{{{{{{{z{{z{z{{z{{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{zz{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~zzzzzz{{zz{~zz{~zz{{zz{~zz{~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzz{{{z{{{{zzzz{zzz{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{{{{z{{{z{{{z{z{{{z{{{{{{z{{{z{{{z{{{{z=\nz{{{zzz{{{{{zz{{{{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{{{z{{{{z{{{z{{{z{{{{zz=\n{{{{{{z{{{z{z{{{z{{{{{{{zzz{zzz{{{{{{{z{{{z{{{z{{{z{{{{{{{{zz{{{{zz{{z{{{=\nz{{{zzz{{{z{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{{{{{~zz{~zz{~zz{~zz{~zz{~~zz{~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{zz{{{{{{{{{{zzz{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{zz{{{z{z{{{=\nz{{{{z{{{{zz{{{z{z{{{z{{{z{{z{{z{{{z{{{{{z{{z{{z{{zz{{z{{zz{zz{{z{{{zz{zz=\n{{{{{z{{{{{z{{{{z{{{zz{{z{{z{{z{{{{{{z{{{{zz{{{zz{{{z{{{z{{{z{{{{{{{{z{{{=\nz{{{z{{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{z{{z{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~=\n~zz{~zz{~zz{~zz{~zz{z{{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{z{{{{{{zz{{{zzz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zzz{z{{zzzz{{{zzzzz{{{z{{{{{zzzz{zzz{zzz{zzz{zzz{{{{zzzz{{zz=\nz{{{z{{{zzz{z{{zz{zz{{zz{{zzz{{{{{{{z{{{zzz{{zzz{{{zzz{z{zzz{{{{{{zzz{{{{=\nz{{{{zzzz{{{{z{{{z{{{{{{{zzz{{z{{zzz{{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{z=\nzzz{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~zz{~zz{~zz{~zz{~zzz{{zz{~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{=\n{{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzz{~~~~{zzz{zzzzz{=\n~zzz{{zz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{zzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~{{{{{~~~~~{{{{{{{{{{~{{{{~{{{~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{zzzzzzzzzzzzz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{zz{{{{{{{z{{zzz{{zzz{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}=\n}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzzzzzzzzzzzz{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{=\nzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|=\n|~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\nz{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{z{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{zz{{{{{zz{{{{{{{{{{zz{{{{{=\n{{{{{{{{{{{{{{zz{zz{zz{{zzzz{{zzz{{{{{{{{{{{zz{zz{zzz{{{{zzz{{zzzz{{zzz{{=\nzz{zz{zzz{{{{zzz{{zz{{z{{{{{{z{{{{z{{{{z{{{{zzz{{{{zzz{{{{{{z{zz{{z{{{{zz=\nz{{zzz{zzz{zzz{{{{{z{z{{{z{z{{{{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{z=\nzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z=\nz{{{z{{z{{{zzz{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{z{{zz{zz{{z{{{zz{zz{{{{{{{{=\n{{{zz{zzz{zz{{z{{{z{{z{{{zz{{z{{zz{zzz{zz{{zz{{z{{z{{z{{{{{z{{{{{zzzzzz{{=\n{zz{{z{{z{{z{{{{{{z{{z{{z{{{z{{{z{{z{{{z{{{z{{{{{{z{zz{zz{z{{{z{{{z{{z{{z=\n{{z{{z{{zz{{z{{zz{z{{{z{{{z{{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzz{{{{{z{{zzzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{=\n{{{{z{{z{{{z{{z{{{z{{{z{{{{{{{{{{{z{{{z{{{z{{zzzzz{{z{{{{{{zz{{z{{{z{{{z{=\n{{{{zz{{z{{z{{{{{z{{{{{z{{{{z{{{{{{zz{{zz{{{{{{{{z{{zz{z{{{zzzzz{{z{{{z{{=\n{z{{{{{{z{{z{z{{z{{{zzzzz{{zz{{{{zz{{{{{{{zz{{z{{{z{{zzzzz{{zz{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzz{{{z{{zz=\nzzz{{z{{{{zz{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{z{{{z{{zzzzzzz{{z{{{z{{{=\nz{{z{{{{{{z{{{{zz{z{{z{{{z{{{z{{{zz{z{{z{{z{{{{{z{{{{{z{{{{z{{{{zz{z{{{zz=\n{{{{{{{z{{{z{z{{{z{{{{{{{z{{z{{z{{{{{{{z{{z{z{{z{{{z{{{{{{{zz{{{{zz{{{{zz=\n{z{{zz{{z{{z{{{{{{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{zzz{{{z{{{{zzzz{zzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{=\nz{{z{{{z{{{z{{{{{{{{{{{z{{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{=\nz{{{{{z{{{{{z{{{{z{{{z{{{z{{{{zz{{{{{{z{{{z{z{{{z{{{{{{{zzz{zzz{{{{{{{z{{=\n{z{{{z{{{z{{{{{{{{zz{{{{zz{{z{{{z{{{zzz{{{z{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zz{{{{{{{{{{zzz{{zzzzz{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{zz{zz{{{{{{{{{{{z{{{z{{{z{{zz{{{z{z=\n{{{zz{{z{{z{{{z{{{z{{zz{{z{{z{{z{{{{{z{{{{{z{{{{z{{{zz{{z{{z{{z{{{{{{z{{{=\n{zz{{{zz{{{z{{{z{{{z{{{{{{{{z{{{z{{{z{{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{=\nzz{{{z{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{=\n{{{{{{z{{{{{z{{{{{{zz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzz{zzzzzzz{{zzz{{=\n{{{{{{{{{zzz{zzz{zzz{{zzzz{{{zz{{zzz{zzzz{zzz{zzz{{zzz{zzzzzzz{{{{{z{{{zz=\nz{{zzz{{{zzz{z{zzz{{{{{{zzz{{{{z{{{{zzzz{{{{z{{{z{{{{{{{zzz{{z{{zzz{{{zzz=\nz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zzzz{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzzzzz=\nzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zz{{zz{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=\n=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||=\n~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=E8=04=01=01||~}|||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~~~~~~~~~~~=\n~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=\n=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~~~~~~~~~~~~~~~~~~~~~~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=\n=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01=F4=88=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~~~~~~=\n~~~~~~~~~~~~~~~~~}|||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||~}}z||~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~}}=01=01=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}z||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=\n=8C=AC=01=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}z|}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=01=B5=01=01zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=00=01=01=01=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||=01=01=E8=04=01=01||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||}=01=01=00=00=01=01||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n}}=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}=01=01=E0\\=01=01||~~~~~~~~~~~~~~~~~~~~~~=\n~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~}}=01=01=FF=FF=\n=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~~~=\n~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}}}}}}}}}}}}=\n}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=8C=AC=01=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{z{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{=\n{{{zzz{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{{{{zzz{{{zzz{zzzzzzz{{{=\nzzz{zzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{zz{{{{{{{zzzz{zzzzzzzzzz=\n{zzzz{{{{{{{{{{{{{{{{{{zz{{zzzz{{zzzz{{zzzz{{{{{{{{{{zz{{{zz{{{zz{{{zz{{{=\n{{{{{{zzzz{zzzzz{{{zz{{zzzzz{{{{zz{{{zzzzz{{{{{{zzzzz{{{{{{zzzzz{{{{{{{{z=\n{{zz{{{{{{{{z{zzz{{{{{z{{zz{{{zz{{{zz{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{zzz{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{z{zz=\n{zzzz{{{{{{{zz{{zzz{{{zz{{zz{{zzz{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\n{{{{{{{{{{{{{{{{{zz{{zz{{zz{{zz{{zz{{{{{{{{{{{{{{{{{{z{zz{{zz{{zz{{z{zz{{=\nzz{{{{{{{{zzzz{zz{z{zzzz{zzzz{{{{{{{{{zz{{{zz{zz{z{zz{{zz{zz{{z{zz{zz{{zz=\n{{{{{{{zz{zz{{{zz{{{{zz{{{{{{zz{{zz{{{{{{{zz{zzz{{{{zz{zz{z{zzz{{zz{z{zzz=\nzz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{z{z{z{{{{z{{{{{{{{{{{z{{{{{{{=\n{{{{{zz{{zz{zzz{zz{{{{{{{{{z{zz{{{zz{{{{{{zzz{{zzz{{zz{{zzz{{zzz{{zz{{{{{=\n{{{zzzzz{zz{zzzzzzz{zzzzzz{{{z{{zzz{{zzzzz{zz{{{zz{zz{{zz{{zzzz{z{{{{{{{{=\n{{{{{{{{{{{z{zz{{zz{{zzz{{{zz{{zz{{{{{{{{{{zz{zz{z{{{zz{{{zz{{{{{{{{{zz{{=\n{zz{zz{z{zz{{zz{zz{{z{zz{zz{{{{{zz{zz{zz{zz{{zz{zz{z{zz{zzz{zzz{zz{{{{{{{=\nz{{z{{{{{z{z{zz{z{{zz{{zz{z{{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{z{{{{{{{{{{{{zzz{{{{{{{{{{zz{{zz{z{zz{zz{{{{{{{{z{zz{{{z{{{{{{{=\nz{z{z{z{{{zz{{z{z{z{z{{{zzzz{{{{{z{{z{zzz{zz{z{{zzzzz{z{{z{zz{z{{z{{{zz{z=\nzzz{{{zz{z{{{zz{{z{zz{z{{{{{{{{{{{{zzzzz{{{{z{{{zz{{{zzz{{zz{{zz{{{{{{{{{=\n{z{{zz{z{{{z{{{{z{{{{{{{{{{zz{{{zzzz{{{{z{{{zzzz{{{{{z{{zz{zzz{zz{zz{zzzz=\n{{zz{zz{z{{zzzz{z{zz{{zz{{{{{{zz{{zzz{{z{{z{{zz{{{zz{{zz{z{zzzzz{{zz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{z{z{{{{{{z{{{{{{{{{{{{{zz{{zzzz{{{zz{{zz=\n{z{zz{zz{{zzzz{{{zzz{{z{{{{{{{zz{zz{zz{{zz{{zz{zz{zz{{zz{{{{{{{zzzz{{zz{z=\nz{{z{zz{z{zzz{zz{z{zzzz{{{{z{{z{{z{{{zz{z{{zz{{{z{zzzz{{{{zzzz{{{{{{{{{{{=\n{{{{{{zz{{{{zzz{zz{{zz{{zzzz{{{z{{{zz{z{{z{{{{z{{{{zzzz{{{zz{{{zz{{{{{{{{=\n{{zz{zz{{{{{{{zz{{zz{{zzz{{zz{z{{zz{z{{z{{zzzzzz{zz{{zz{{{{{{zz{{{{zz{zzz=\nzzz{zz{{zz{{zz{z{{{z{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{{z=\n{{{{{{{{{{{{z{zz{{{{{{{{{zz{{zz{z{zz{zz{{{{{{{{{{z{{zzzz{{{{{zz{zz{zz{{zz=\n{{zz{zz{zz{{zz{{zz{{{zz{{zzzz{zz{z{{z{z{z{z{{z{zz{zz{{z{{zz{zz{z{{{{zzz{{=\n{zz{{zz{{zz{{{{{{{{{{{{{zzzzz{{{zz{{{zz{{z{{zz{zz{{zz{{{{{{{{zzzz{zz{z{zz=\nzz{zzzz{{{{{{{{{zz{{{zz{{{{{zz{{{zz{zz{{{zz{{zz{{zz{{zzz{{zz{zz{zz{z{{z{{=\nz{zz{{{zz{{zz{zz{{{zz{{z{zz{{{zz{z{zz{{zz{{zz{z{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzz{{{{{{{{{{zz{{{zzz{zz{zzz{{=\n{{{{{zz{{{zzzz{{{{zzz{z{zzzzzzzzzzz{z{zzzzzzzzzz{{{{{zzzzz{zz{zzzzzz{z{zz=\nzzz{{zzz{zzz{{{zz{zz{zz{{{zz{{{zzzzzzzz{zz{{{{{{{{{{{{{{{{{{{{{zz{{zzzz{z=\nzzz{{{zzzz{{{{{{{{{zzzz{{zz{{zzzz{zzzz{{{{{{{{{zz{{zzzz{{{{zz{{zzzzz{{{{z=\nz{{{zzzz{{{{z{{zzz{zzzzz{{zz{zz{{{zzz{{zz{zz{zz{{{zz{{zzz{{{{zz{{zz{{zzzz=\n{{zz{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{{z{z{z{z{z{z{z{{{{{{{{{{{{=\n{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{zz=\nz{{{{{{{{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{zz{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{zzzzzzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{zzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzz=\nz{{{zzz{{{{{{{{{{{zzzzzz{{{{{{{{{{{{{{{{{zzzzzz{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{zzz{z{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zzzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zzz{{{{{{z{{{{zzz=\nz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{zz{zz{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{=\nz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{z{{{{{{{{{{z{z{z{z{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{zz{zz{{{zzz{{{zz{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{=\nz{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{z{{{z{{{=\n{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{z=\n{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{{{z{{{z{{{{z{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{z{{{{{{{z{{zz{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{z{{zz{{zz{=\nzz{zz{{{{{{{{{{{z{{{{z{{{{{z{{{{{{{{{{z{{{{z{{{{zz{{{{z{{{{{{z{{{{z{{{{zz=\n{{zzz{zz{zz{{zz{{zz{zz{{{zz{z{{{{zz{{{z{zz{{{{{{{{{{{{{{{{{{{{z{{{z{{zz{z=\nz{zz{{{{zzz{{z{zzz{{{{zz{{{{{zzzz{{zzz{{zzzzzzzz{{zzz{{z{zzzzz{{zz{{{zzzz=\n{{z{{{zz{z{{z{zz{zz{{zz{zz{zzz{{{{zzz{{{{{{{zzzz{{{zzz{{zz{zz{zzz{{{{{{{z=\n{{{{{{z{{{{{z{{{z{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{zz{zz{{{{{{{{{=\n{{{z{zz{{{{{{{{{{{{{{z{{{z{{{z{{zz{zz{{{{{{{{{{zz{{zz{{{{zz{{{{{{{{{{zzzz=\nz{{{zz{{z{{{z{{{{{{zzzzz{{{zz{{z{{{zz{zz{z{{{z{{{zz{z{{z{{zz{{zz{{z{{{z{{=\n{{{{{{{{{{{{{{{{{{{{zzzzz{{{z{{zz{zz{{zz{{z{{zz{z{{{{{zzz{{{{z{{{z{{{z{{z=\n{{{z{{{z{{{z{{zz{z{z{{{z{{zz{{z{z{{{z{{z{{{z{{zz{zz{{zz{zzz{zz{{zz{{z{{{{=\n{zz{{z{{zz{zz{{zz{zzz{zz{{{{{z{{{{{{zz{{{{{z{{{z{{{{z{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{=\n{{{{{{zzzz{{{{{z{{{{{{{{{{{z{z{{{{{z{{zz{{{{{{{{{{z{z{{{{{z{{zz{{zz{{z{{z=\n{{z{{{zz{{z{z{{{z{{{z{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{z=\nz{{z{{{{{{{{{{zz{{{z{{{zzzzz{{z{{{z{{{zzzzz{{z{{{{z{{{z{{z{{{z{z{{z{{{z{{=\n{z{{z{{{z{{z{{{z{{{z{{{{{zz{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{{{{z{{{{{=\n{z{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{zzzzz{{{zz{{{{{{{{{{{{{{{{z{{z=\nzzzzzz{{{{z{{{z{{{z{{z{{{z{{zzzzzzz{{{{{z{{{{z{{{{{{{{{{{z{{{z{{{zzzz{{{{=\n{{{{{{{z{{{z{{{zzzz{{{{z{{z{{z{{{z{{{z{{z{{z{{{z{{zzzz{{{{z{{{{{{{{{{zzzz=\nzzz{{{{{{z{{{{{{{z{{z{{{z{{{zz{z{{z{{{{{{{{{{{{z{{z{{{z{{{{{{z{{{z{{{z{{{=\n{{{z{{{{z{{{z{{z{{{z{z{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{{zz{z{{{{{z{{{{{{z{{=\n{z{{z{{{z{{{z{{{{{z{{{{{z{{{{{{{z{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{=\n{{{{{{{{{zz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{{{{{{z{{=\n{{z{{{{{{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{z{{{z{{{z{{{{{{{z{{z{{z{{z{{{{z{{z{=\n{z{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{z{{{z{{z{{{z{{z{{{{{{{=\nz{{{{z{{z{{{z{{{{{{z{{{z{{{z{{{{{{z{{{{z{{{z{{z{{{z{z{{z{{zz{{z{{{z{{{z{{=\nz{{{z{{{z{{z{{{z{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{{z{{{{{{{{z{{{z{{{{z=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{z{{zzzz{{{{zz{{{{{{{{{{{{z{{z{{{{{{{{{{{{z{z{{=\n{zz{zz{{z{{{z{{{{{{{{{{{zz{{{{zz{{{z{{{{{{{{z{{{{z{{zz{{z{{{z{{{{{{z{{{{z=\n{{zz{{z{{z{{z{{z{z{z{z{z{{z{z{z{zz{z{zz{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{z{{z{{z{{{z{{zz{{z{{z{{{{{{{zz{{zz{{z{{{zz{{{z{z{{{z{{{zz{{{z{z{{{{zz{zz=\n{{zz{zz{zz{{zz{zzz{{{{z{{{z{{z{{{z{{{z{{zz{{z{{z{{zz{{{z{zz{zz{{z{{{z{{{z=\n{{{{{z{{{zz{{{z{{{{z{{{zz{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{=\n{{{{{{{{{zzz{{{{{{{{{{{{{zz{{{{{zz{zzzzz{zzz{{{{{{{{{zz{{{{{zzzzzz{{{{{{{=\nzzz{{{zz{{zzz{{{{z{{{{{zzz{{{zz{{zzz{{{z{{z{{{z{{{z{{z{{{z{{{z{zz{{{zzz{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{zzzzzz{zzz{{zzz{zzzz{{{{{{z{zzz{{{{zz{{z=\nzzz{zzzzzzzz{{zzzz{zzz{{{{zz{zz{{zzz{z{z{{{{{{{{{{{zzz{zzzzzz{zzz{zzz{{zz=\nz{z{z{{{zzzz{{{zzz{{zzz{zzz{zzz{{{{{z{{zzzzzz{{zzzzz{{zzzz{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\n{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{=\n{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{{{{{{{{{{{zzzzzz{{{{{z{=\n{{{{{{{{{{{{{{{{{{z{{zz{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zz{{{{{zzz{{z=\nzz{{zz{{{{{zzz{{zzzzzzz{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{zzz{z{{{{zzzz{{{{{{{{{{{{{zzz{{{{zz=\nzz{{{zzz{{{{zzz{{{{{{{{{{{{{{zzz{{zzzzz{{{zzz{{{zzzzzz{{{zzz{{{{{zzzz{z{{=\n{{{{{{{zzzzzz{{{{{{{zzzzz{{{{{{{{{{{{{{{zz{{{{{{{{{{z{{{{{z{{{{{{z{{{zzzz=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\nzzzzzzzzzzzz{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\nzz{zz{zz{{{{{{{{{{{z{{{zz{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{zz{{{{z{{{{z{{{{{zz{{{{z{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{zz{{z=\nz{{{zz{{zz{{{{{{{{{{{zz{zz{{zz{{zz{zz{zz{{zz{zz{{{{{{{{{{{{{{z{{{{z{{zz{z=\n{{{z{{{z{{{zz{z{{{z{{{zz{{{zz{{{{{{{{{{{z{{zz{{{{zz{{{{{zz{{{{{{{{{{z{{{z=\n{{{{{{{{{{z{{{{zz{{{{{zz{{zz{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{z{{{z{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{zz{{{z{z{{{{z{{{{zz{{{z{z=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{z{{{z{{{z{{{{z{{{z{{{{z{{{{{{{{{{{z{{{z{{z{{{{z{z{{{z{{z{=\n{{z{{{{{{{{{{{{{{z{{{{z{{{z{z{{{z{{{z{{{{z{z{{{z{{{z{{{{{z{{{{{{{{{{{z{{{=\nz{{{zz{{{{{{{z{{{{{{{{{{z{{{z{{{{{{{{{z{{{{{zz{{{{{zz{{z{{{{z{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{z{{zz=\n{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{z{{zz{{zz{zz{zz{{{{{{{{{{{z{{{{z{{{{{z{{{{{=\n{{{{{z{{{{{z{{zz{{{zzz{{zzzz{z{zz{zz{{{z{z{{{zz{{z{{zzzz{zz{{zz{zz{{{zzzz=\n{{{{{z{z{{z{z{{{{z{{{{z{z{{z{z{{{{z{{{z{{{{{zz{{zz{zz{{{{zz{z{{{{zz{zz{{{=\n{zz{{zz{{z{{zz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{zz{{{{{{z{{{{{{z{{=\n{{{{{{{{{{{{z{{z{{{{z{{{{{z{{{{{{z{{{{{{{{{{{{{{z{{{{z{{{z{{{{{z{{{z{{{zz=\n{{{{{z{{z{{{{{{z{{zzz{zzz{{z{{{z{{{z{{{zz{z{{z{{{zzz{{zzzz{z{{{{{{{{{z{{{=\n{z{z{{{{z{z{{z{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{z{{{{{{{zz{zz{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{z{{{z{{{z{{z=\nz{zz{{{{{{{{{{zz{{zz{{{{zz{{{{{{{{{{z{{{{{z{{{z{{z{{z{{{z{{{{z{{{{z{{zzz{=\nz{{{z{{z{{{z{{{{z{{{zz{z{{z{{z{{{{{{z{z{{z{z{{{{z{{{{z{z{{z{z{{{{zzzzz{{{=\n{{{z{{{z{{z{{zz{zz{{{{{{zz{z{{zz{{z{{z{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{z{{{{zzz{{{{z{{{{{{z{{{{{{{{{{{{{zz{{z{{{{z{{{{zz{{{{{zz{{{{{{{{=\n{{{{{{z{{{{z{{zz{{{{z{{{{zzzzz{{{{{z{{{z{{{{{{{{{{z{{{z{{{z{{zz{{z{{{z{{z=\n{{{z{{z{{{z{{z{{{z{{{{{{{{z{{{{zz{z{{{zz{z{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{{z{{{{{z=\n{{z{{{z{{{{{z{{{{z{{{{z{{{z{{{z{{z{{z{{{z{{{{z{{{zz{{z{z{{{z{{{{{{z{z{z{{=\nz{{{{z{{{{z{z{z{{z{{{{z{{z{{{{{{{z{{z{{z{{{z{{{z{{{{{zz{{z{{z{{zz{{z{{z{{=\nz{{z{{{{{{{{{{{{{{{{{{{zzzzzzz{{{z{{{{{z{{{{{{zz{{{z{{{{{{z{{{{{{{{{{{{{z=\n{{{z{{{{z{{{{z{{{{{{z{{{{{{{{{{{{{{{z{{{{zzzz{{{{z{{{{{z{{{zz{{{z{{{{z{{{=\n{zzzz{{z{{{z{{{zzzz{{{z{{z{{{z{{{z{{zzzzz{{z{{{z{{{{{{{{z{{{{z{{z{{{z{{z{=\n{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{z{{zzzzz{{{zz{{{{{{{{{{{{{{{{z{{zzzzzzz{{{{z{{{z{{{z{{z{{{z{{zzzzzz=\nz{{{{{z{{{{z{{{{{{{{{{{z{{{{{z{{{z{{{{z{{{{z{{{{z{{{{z{{{z{{{z{{z{{z{{{z{=\n{{{z{{{z{{z{{z{{z{{{{{{z{{z{z{z{{{{z{{{{z{{z{z{z{{{{z{{{{{{{{{{{z{{z{{z{{=\nz{{{z{{{{{{z{{z{{zzzz{{{{z{{z{z{{{{z{{{{{{{zzzzzzz{{{{{{{{{{{{{{z{{{{{z{{=\n{{{{{{z{{z{{{{{{z{{zzzzzzz{{{z{{{{z{{{{z{{{z{{{{{{z{{{{{zzzzzzz{{{{z{{{{z=\n{{{{{{{z{{{{{z{{{{z{{{z{{{{z{{{{{{z{{{{z{z{{{{z{{z{{{z{{z{{{z{{{z{{z{{{{{=\n{z{{{z{{{{{{{{z{{{z{{{z{{z{{{z{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{z{{{{{z{{z{{{{{{z{{=\nz{{{{z{{{{z{{{z{{{z{{z{{z{{{z{{{{z{{{{z{{z{{{zz{{{{{{{z{{zz{{z{{{{z{{{{z{=\n{zz{{z{{{{z{{{{{{{{{{{z{z{{z{{{z{{zz{{{{{{z{{z{{z{{{{{{{z{zz{z{{{{{z{{{{{=\n{{{{{{{{{{{{zzzzzzz{{{{{{{{{z{{{z{{{{z{{{z{{{{z{{{{{{{{{{{{z{{{{{z{{{{z{{=\nz{{{{{{z{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{zz{{{{{z{{{{z{z=\n{{{{z{{{z{{z{{z{{zz{{z{{{z{{{{{{z{{{z{{{{{{{{z{{{zzzzzz{zzzzzz{z{{{{z{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{zz=\nzz{{{{zz{{{{{{{{{{{{z{{z{{{{{{{{{{{{z{z{{{zz{zz{{z{{{z{{{{{{{{{{{zz{{{{zz=\n{{{z{{{{{{{{z{{{zz{{{z{z{z{{z{{z{z{{z{{{{z{z{zz{zz{{z{zz{z{z{z{{z{z{z{{z{=\nz{z{{{{{{{{{z{{z{{{z{{{{z{{{{z{{z{{{z{{{{z{{{{{z{{{{{zz{{{z{z{z{z{z{z{{{z=\n{{z{z{zz{{z{{{zz{zz{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{zz{{zz{{{z=\nz{{zz{{{{{{{{{{{zz{{{z{zz{{zz{zz{{{z{zz{{{z{{{{{{{{{{{z{z{{{{z{{{{{{{z{{{=\n{{z{{{zz{{{z{{{{{zz{{{zz{{{{{z{{{{{z{{{zz{zz{{zz{zzz{{{{zz{{{z{z{{{z{{z{{=\n{{{z{{{{{{{z{{{{{{z{{zz{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{{zzz{{{{{{{{{{{{{zz{{{{=\n{zz{zzzzz{zzz{{{{{{{{{zz{{{{{zzzzzz{{{{{{{zzzzz{{{{{{z{{zzz{{{zz{{{z{{{{{=\nz{{{zz{{{{zz{zz{{zz{{{{z{{z{{{z{{zzz{{{{{{zzz{z{{zzz{{zzz{{zzz{z{{zzz{{zz=\nzzzzz{{{{{{z{{{{{z{{{z{{zz{{{{z{{{z{{{zzz{{{{z{{z{{{{zzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{zzz{{z{zzz{{{{{zzzz{{{{{{{{{{{{zzzzzz{{zzzz{{zzzzzz{zzzzz=\nz{{{{{{{{{{{zz{{{{zzz{{{{{{z{{{{zzzzzz{{{{z{{{{{{zzzzz{{{{{zz{{{zzzz{{{zz=\n{z{{{{{{{{{{{{{zzzz{{{zzzzz{z{{{{{{z{{{{{{z{{{{{{z{{{zzzz{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{zzzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=\n=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzzz{{{zzz{{{{{{{{{{{zzzzzz{{{{{{{{{{{{{{{{{zz{{{{{zzz{{{zz{z{{{{zz=\nzz{z{{zzz{{zzz{{zzzzzzz{{{{{{z{{{{zzzzzz{{{{{{{zzzzzz{{{zzzzzzz{{{{zzzz{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zzz{{{{{{=\n{{{z{{{{{zz{{{{{{{{{zzz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{z{{{{z{{{{{=\n{{zz{{{{{z{{{zzzz{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{zz{zz{{{{{{{{{{{z{{{{z{{{{{{{{=\n{{{{{{{{{z{{{{{zz{{{z{{zz{{{zz{{{z{{{{z{{{{z{{{{z{{{{z{{{{{zz{{{{{z{{{zz{=\n{{{{{{z{{{{z{{{z{{{{z{{{zz{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{z{{z{{{z{{{{{{{{{{zz{{{{{zz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{z{{zzz{{{{{{zz{{{{{zz{{zz{{zz{{z{z{z{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{=\n{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z=\n{z{{{z{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{zz{{{z{z{{{z{{{z{{z{{{{{z{{{{z{{{=\n{z{{{{z{{{{{{{{{z{z{{{{{z{{{{z{{{{{{{z{{{{z{{{z{{{{{{{z{{{{{z{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{z{{{z=\n{{{{{{{{{{z{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{z{{{{{z{{{{{{{zz{=\n{z{{{{z{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{z{{zz{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z=\n{{zz{{zz{zz{zz{{{{{{{{{{{z{{{{z{{{{{z{{{{{{{{{{z{{{{z{{{{zz{{{{z{{{{{{z{z=\n{{z{z{{{{z{{{{{{z{{{{{{{{{z{{{{z{{{{z{{{z{{{{{z{{z{{{{z{{{{{z{{{{{{z{{{{z=\n{{{z{{{z{{{{z{{{{{{{{{{{{{{{{zzzz{{{zz{{{{{{{{{{{{{z{z{{{{{zz{{{{{{{{{{{{=\n{{{{{{{{z{z{{{{{{zzz{{zz{zzzz{z{zz{{{{{{{z{z{{{z{z{{{{zzz{{{{zzz{{z{zzz{{=\nzzz{{{z{{{zz{z{{z{{{zzzz{{{zzz{{{{zz{{zz{zzzz{z{{zz{{{{{{zzz{{{{zzzz{zz{{=\nzz{{{{{{z{{{{{z{{{{z{{{{{{{z{z{{{{{{z{{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{{zz{zz=\n{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{z{{{z{{{z{{zz{zz{{{{{{{{{{zz{{zz{{{{zz{{{{{=\n{{{{{zzzzz{{{zz{{z{{{z{{{{{{z{z{{z{z{{{{{z{{{{z{{{{{{{{{{zzzzzz{{{{zzzzz{=\n{{{{z{{z{{{{z{{{{{z{{{{{{zzzzz{{{{zzzzz{{{z{{{{{{{{{{{{{{{{{{z{{{zz{zz{{{=\n{{{{{{{{zzz{z{{zz{{z{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{z{{z{{z{{{zz{zz{{{{{{z=\n{zz{zz{z{{{zz{zz{{zz{zz{{zz{z{z{{{z{z{{{z{{z{{{z{{zz{{z{{z{{z{{{{{z{{{z{{=\nz{{{z{{z{{{{{{z{{{z{{zz{{z{{z{{{z{{{{{z{{{{{{z{{{{zzzz{{{zz{z{{{{zz{{{{z{=\nz{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{z{{{z{{{z{{z=\n{{{z{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{{z{z{{{{{z{{zz{{{{{{{{{{z{z{z{{z{{{{{{=\nz{{{z{{{{zzz{{{z{{{{z{{{{z{{z{{{{{z{{{z{{{{z{{{{{z{{{{{{z{z{{{{{{z{{z{{{{=\nz{{{{{{{{{{{{{{{{{z{{{{z{{{z{{{{{{{{{{{z{{{z{{z{{zz{{{{{{{{{{{{{{{{{{{z{z=\n{{{{{zzzzz{{z{{z{{{z{{{z{{{{{{z{{z{z{{z{{{z{{{z{{z{{{z{{z{{{{zzzzz{z{{z{{=\n{z{{{z{{z{{{{{{zz{{{{{{{z{{{z{{z{{{zzz{{{{{{{zzzzz{{z{{{z{{z{{{z{{{{{z{{{=\n{{{z{{{zz{{zz{{z{{z{{{{{{z{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{zzzzz{{{zz{{{{{{{{{{{z=\n{{{{z{{zzzzzzz{{{{z{{{z{{{z{{z{{{z{{zzzzzzz{{{{{z{{{{z{{{{{{{{{{{z{{{z{{{=\nzzzz{{{{{{{{{{{z{{z{z{z{{{{{{{{z{{z{{{{{z{{{z{{{{z{{{{z{{{{{{{{zzzzzz{{{z=\n{{{{{z{{{{{{z{{{z{{{{z{{{{{{{{z{{{{{{{{zzzzzz{{{z{{{z{{{{z{{zzzzzz{{{z{{{=\nz{zzzz{{{{{{{zzzzzzz{{{{{{{z{{z{{{{z{{{{{{z{{z{{{z{{{z{{{{{{z{{z{z{{z{{{z=\n{{{z{{z{{{z{{z{{{{z{{{{{z{{z{{{z{{{z{{z{{{{{{{zz{{{{{{z{{{z{{z{{{z{z{{{{{=\n{{z{{{{{{z{{{z{{z{{{z{{{{{z{{{{{{z{{{z{{{{z{z{{{z{{{{{{{z{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{=\n{{{{{z{{{{z{{{{{{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{z{{zz{{z{{{z{{{{z{{z{{{{{z{=\n{{z{{{{z{{{{z{{{{{{{{z{{{{z{{{z{{{{{z{{{{{{z{{{z{{{{z{{{{{{{{z{{{{{{{{{{{=\n{{{{{z{{{{z{{{z{{{{{{{{{{{z{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{{{=\nz{{z{{{z{{{z{{{{{{z{{{z{{{z{{{z{{{z{{z{{{z{{z{{{{z{{{{{z{{z{{zz{{z{{{z{{{=\n{{{{{zz{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{{{{{z{{{z{{{{=\nz{zzzzzz{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{zzzz{{{{zz{{{{{{{{{{{zz{{zz{{{{{{{{=\n{{{z{z{{{zz{zz{{z{{{z{{{{{{{{{{{zz{{{{zz{{{z{{{{{{{{z{{{{z{{zz{{z{{{z{{{{=\n{{z{{z{{{z{{{zz{{{z{{zz{{{z{{{{z{{{{z{{{{z{{{{{z{z{{{{{z{{{z{{{zz{{{{{{{z=\n{{{{z{{{z{{{{{{{{zz{{{z{{{{{{{{{{{z{z{{zz{zz{{{{{{{{{{{zz{zz{{zz{{z{{{{{{=\n{{{{{{{{{{{{{{z{{{{z{{zz{{{z{z{{z{{{z{{{z{{{{{{z{{{z{{{z{{{zz{zz{{zz{zz{{=\nz{{{{zz{{{zzz{{zz{zzz{{{{zz{{{z{z{{z{{z{{zz{zz{{z{{{z{{zz{{z{{zz{{{z{zz{z=\nz{{zz{zz{{{{{z{{{{{{z{{{zz{{zz{{{{{z{{zz{{zz{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{z{{{{{{=\n{{{{zz{{{{{{{{{{{{zzzz{{{{{{{{{{{{zz{{{{{zz{zzzzz{zzz{{{{{{{{{zz{{{{{zzzz=\nzz{{{{{{{zzz{{{zz{{zzz{{{{z{{{{{zzz{z{{zzz{{z{zzz{{{{zzzz{{{{zzz{{zzz{{zz=\nzzzzz{zzz{{{zzz{zzzzz{{{{{{{{zzz{{{zz{zzz{{{{{{{{zzzz{{{{{{{{{{{{zz{{{{zz=\n{{{{{{{{{{{{{{zz{{{{{zzz{{{{{{{{{{{{{{{{{{{{zzz{{zzz{{zzzz{zzz{{zzzzz{zzz=\n{{{{zzz{{z{{zzz{{{zzz{{{{zzz{{zzz{{{{zzzz{{z{{{{{{{{{{{{{zzzz{{zzz{{{z{{{=\nzz{zz{{zzzzz{{zz{z{{{zzzz{{{zzz{z{{zz{zz{{{{{z{{{zzzzz{{zzzz{{{{{{z{{{zzz=\nz{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=01=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||||||||||||||=\n|}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||}}}}}}}}}}}}}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01|=\n|~}}|}}}}vvvvvv}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~vvvvv|~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~vv=\n||||~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=F6=C0=01=01||~}}~~~~~v|||||~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=\n=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}|||||||||||||||||||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~~~=\n~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~~~~~~~~~~~~~~=\n~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||||||~}}=01=01=E0\\=01=01=\n||~~~~~~~~~~~~~~~~~~~~~~~}|||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||~}}=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F4=88=01=01||}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}=01=01=F6=C0=01=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=A4=1C=01=01zzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=01=\n=01=01=01||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||=01=01=8C=AC=01=01|||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||}=01=01=01=B5=01=01||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}=01=01=E8=04=01=01||~~~~~~~~~~~=\n~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~}}=\n=01=01=00=00=01=01||~||||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~|||||||||||||||||||}~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=\n=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~||~~~=\n~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=F6=C0=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~||~~~~~}}}}}}~~~=\n~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=01=01=01||~||~~~~~}}}}}|~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~||~~~~~}}||||~~~~~}}~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01=\n||~||~~~~~}|||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{zzzzzzzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{zzz{{{zzz{{{{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{{{{zzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{zzz{z{{{{zzz=\nz{{{{{{{{{{{{{zzz{{{{zzzz{{{zzz{{{{zzz{{{{{{{{{{{{{{zzz{{zzzzz{{{zzz{{{zz=\nzzzz{{{zzz{{{{{zzzz{z{{{{{{{{{zzzzzz{{{{{{{{z{{{{{{{{zzzz{{{{{z{zzzzzz{{{=\n{{{zzzz{z{{{zzz{{zzzz{{{{{{{{{{{{{{{zzzz{z{{{{{{{{{zz{{{{{{{zzz{zzz{{zzz{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{=\n{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{zz{{{{{zz{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{z=\n{{{{{z{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{z{{{z{{{z{{{zz{{zz{{{zz{{zz{{{{{{{{{{{zz{zz{{zz{{zz{zz{zz{{zz{zz{{{=\n{{{{{{{{{{{z{{{{z{{zz{z{{{z{{{z{{{zz{z{{{z{{{zz{{{zz{{{{{{{{{{{z{{zz{{{{{=\n{{z{{{{{{{zz{{zz{{{{z{{{z{{zz{{{{zz{{{zz{{{{z{{zz{{zz{{{{{{{{z{{{{zz{{{zz=\n{{{{{{{{{{z{{{{{{{{z{{{z{{z{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~||~~~~~~=\n~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{z{{{{{{{{{{z{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{z{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{z{{{{z{{{z{{{{z{{{{{{{{{=\n{{z{{{z{{z{{{{z{z{{{z{{z{{{z{{{{{{{{{{{{{{z{{{{z{{{z{z{{{z{{{z{{{{z{z{{{z=\n{{{z{{{{{z{{{{{{{{{{{z{{{z{{{{{{z{z{{{{{{z{{{{z{{{{{{{{z{{{z{{{{z{{{{{z{{=\n{{z{{z{{{{z{{{{{{{{z{{{{z{{{{{z{{{{{{{{{{z{{{{{{{{z{{z{{{z{{{z{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=00=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{=\nz{{{zz{zzz{zzzz{{zzz{zz{{zz{{{z{{{{{zzz{zzz{{zzz{{{zzz{{zzzz{{zzz{{{z{{{z=\nz{z{{z{{{zzz{{zzzz{z{{{{{{zzzz{{{zzz{{{{{{zz{zz{zz{{{{{{{z{{{{zz{{z{{zz{{=\nzz{zzzz{{zzz{{{z{{zz{{{zzz{{{{{{zz{{{{{{{zzz{{zzzz{{zzz{{{{{{{{{{{{{{{{{z=\n{{{z{{{zz{{{{{{z{{{{{{z{{{{{{{{{{{{{{z{{z{{{{z{{{{{z{{{{{{z{{{{{{{{{{{{{{=\nz{{{{z{{{z{{{{{z{{{z{{{zz{{{{{z{{z{{{{{{z{{zzz{zzz{{z{{{z{{{{{{z{z{{{{{z{=\n{{{{{z{{zz{{{z{{{z{{{z{{{{{{z{{{{z{{z{{{{z{{{zzz{zzzz{z{{{{{{z{{zzz{zzz{z=\n{zz{{{{{z{z{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~||~~~~~~~~~~~~~~~~}=\n}~~}}{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{zz{zzzz{{zz{{zzz{zzz{zz{{z{{{{{{z{{{z=\n{{z{{z{{zz{{z{{z{{{zz{zz{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{{{zz{z{{{zz{zz{{{{{=\n{z{{zz{zz{{{{{z{{{{{{z{z{{{{z{{{z{{z{{{zz{{z{{z{{z{{{zz{{z{{{{{{zzz{{{{zz=\n{{z{{z{{{zz{zz{{{{{{{{{{{{{{{z{{{{z{{{{zzz{{{{z{{{{{{z{{{{{{{{{{{{{zz{{z{=\n{{{z{{{{zz{{{{{zz{{{{{{{{{{{{{{z{{{{z{{zz{{{{z{{{{zzzzz{{{{{z{{{z{{{{{{{{=\n{{z{{{z{{{z{{zz{{{{{z{{{z{{{{z{{{{{{z{{{z{{{z{{zz{{{z{{{{{{{{{{{z{{z{{{{z=\n{{z{{z{{z{{{z{{{{{{{{{{z{{{z{{zz{zz{{{{zz{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0=\n\\=01=01||~||}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{zz{{{zz{=\n{zz{{zz{{zz{{zz{{{{{{{{{z{{{z{{zz{{{{{{{zz{{z{{{z{{{z{z{{z{{{z{{{z{{zzzzz=\n{{z{{{z{{{{{z{{{z{{z{{{z{{{{{{z{{z{{{z{{{{{z{{{{{{{z{{{{{z{{{z{{z{{{{{{zz=\n{{zzz{{{{{{{zz{{{{{{{{zz{{{{{{zz{{z{{{z{{{z{{{{zzzzzzz{{{z{{{{{z{{{{{{zz{=\n{{z{{{{{{z{{{{{{{{{{{{{z{{{z{{{{z{{{{z{{{{{{z{{{{{{{{{{{{{{{z{{{{zzzz{{{{=\nz{{{{{z{{{zz{{{z{{{{z{{{{zzzz{{z{{{z{{{zzzz{{{{{{z{{{z{{{{z{{{{{{z{{{z{{{=\nzzzz{{{{z{{{{zzzz{{{z{{z{{{{z{{zz{{{{z{{{z{{{{zzzz{{z{{{z{{z{{{z{{{{z{z{{=\n{{{{z{{{zzzzzzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~|}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{=\n{{{{{{{{{{{{{{zz{{{{{{{zz{{{zz{{zz{{zz{{zz{{zz{{{{{{{{{{z{z{{{{zz{{{{zz{z=\n{{z{{{z{{{z{z{{z{{{z{{{z{{z{{{{{{z{{{z{{{{{zz{{z{{z{{{z{{{{{{z{{z{{{z{{{{=\n{z{{{{{{{z{{{{{z{{{z{{z{{{{zz{z{{z{z{{{{{zz{z{{{{{{{{{{z{{{zz{z{{z{{{z{{{=\nz{{{{{{{{{{{{{{z{{{{{z{{{{{{{{z{{z{{{{{{z{{zzzzzzz{{{z{{{{z{{{{z{{{z{{{{{=\n{z{{{{{zzzzzzz{{{{z{{{{z{{{{{{{z{{{{{z{{{{z{{{z{{{{z{{{{{{z{{{{z{z{{{{z{{=\nz{{{{{{zzzzz{{{{z{{{{{{z{{{z{{{z{{z{{{{z{{{{{{z{{{{z{{z{{{{z{{{zz{{{z{{{z=\n{{{{{{z{{{{z{z{{{z{{{z{{{{z{{z{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~~=\n~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{zz{{{zz{{zz{{zz{{zz=\n{{zz{{{{{{{{{{z{z{{{{{zz{{z{{{z{{z{{{z{{{z{z{{z{{zz{{z{{{z{{{{{{z{{{z{{{{=\n{{zzz{{{z{{{z{{{{{{z{{z{{{z{{{{{z{{{{{{{z{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{z{=\n{{z{{{{{z{{{{z{{z{{{z{{z{{{z{{{z{{{{zzzzzzz{{{{{{{{{z{{{z{{{{z{{{z{{{{z{{=\n{{{{{{{{{{z{{{{{z{{{{z{{z{{{{{{z{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{{{=\nz{{{{{{{{zz{{{{{z{{{{z{z{{{{z{{{z{{{{z{{{{{z{{{{z{{{{z{{{{z{{{z{{{z{{{zz{=\n{{{{z{{{{z{{z{{{{z{{{{zz{{z{{{zz{{{{{z{{{{z{z{{{z{{{z{{{{z{{{z{{{{{{{{zzz=\nzzzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F6=C0=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{zz{{{zz{{zz{{zz{{zz{{zz{{z{{{{{{{{z{{{{z{{z{{zz{{z{{z{{{zz{zz=\n{zz{{zz{zzz{{{{zz{{{z{z{{{z{{z{{{z{{{{{zz{zz{{z{{{z{{zz{zz{{{{{z{{{{{{{z{=\n{{{{zz{zz{{z{{{zz{{z{{z{{zz{{zz{{z{{{{{zz{{zz{{zz{{z{{z{{{zz{zz{{{{{{{{{{=\n{{{{z{{{{{z{{{zz{{zz{{{zz{{zz{{{{{{{{{{{zz{{{z{zz{{zz{zz{{{z{zz{{{z{{{{{{=\n{{{{{z{z{{{{z{{{{{{{z{{{{{z{{{zz{{{z{{{{{zz{{{zz{{{{{z{{{{{z{{{zz{{{z{{{{=\n{z{{{{zz{{zz{{{{z{{{z{{{zz{{{zz{{{zz{{{{z{{zz{{zz{{z{{z{{z{{{{zz{{{zz{{{{=\n{z{{{{z{{{z{{{{z{{{{z{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~~~~~~~~~~~~~=\n~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{zzzz{{{zzzz{{zzzz{zzz{zzz{z{{{{=\n{{{zz{{{{zzz{{{{zzz{z{{zz{{zzz{{{z{{{{{{{{{{{{{zzzz{{{zzzzz{z{{{zzzz{{{zz=\nz{{{z{{{z{{z{zz{{{{{{{z{{{{{zzz{{{{{zz{zz{{zz{{zzz{zzzz{{zz{{zzz{z{{{{z{z=\nzz{{{{zzz{z{{zz{{zzz{{{{{{{{{{{{{{{z{{{{zzz{{z{zzz{{{{{zzzz{{{{{{{{{{{{zz=\nzzzz{{zzzz{{zzzzzz{zzzzzz{{{{{{{{{{{zz{{{{zzz{{{{{{z{{{{zzzzzz{{{{z{{{{{{=\nzzzzz{{{{{zz{{{zzzz{{{zz{zzz{{{zzz{{{{zzzz{{{{{z{zzzz{{{zz{{{zzzzz{{{{zzz=\n{{zzzz{{{zzz{{{{zz{{{zzzzz{{{{{zz{{{zzz{zzz{{zzz{{zzz{{z{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{=\n{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}}}}}}}}}}}}}}}}}}}~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{z{z{{z=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=\n=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzz{{{{{{{{{{{{zz{{zzz{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{zzzz{{{{zzzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{{{=\n{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzz{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{zzz{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{zzz{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{zz{{zzz{zzz{zz{{zz{{{{zzz{{{{=\n{{{{{{{{{zz{{{z{{{{zzz{{zz{zzz{zzzz{zzz{{zzzz{{zzz{zz{{{z{{{{{{{{z{{{{{{z=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{=\nz{zz{{{zz{{zzz{zzz{zz{{z{{zz{{{{{{{{{{{{zz{{zz{{{z{{zz{{zz{zzzz{{z{{zz{zz=\n{{zz{{zzz{zz{{z{{{{{{{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{{zz{{{zz{{zz{{zz{{zz{zz{{zz{{{{{{{{{{{{zz=\n{{z{{{zz{{zz{{zz{{{zzz{{{{zz{zz{{zz{{zz{{zz{{{{{{{{{{{z{{{{{{z{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{zzz{{zz{{{zz{{zz=\n{{zz{{zz{zzzzzz{{zzzzzz{{{{{zz{z{{{zzzzzz{{zz{{{{zzz{{{zz{zz{{zz{{zz{{zz{=\n{{{{{{{{{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{z{{zzz{{zz{{{zz{{zz{{zz{{zz{zz{{{{{{{{{{{{{{{{{zzzz{{{zz{{{{{=\n{zz{{{{{zzz{{zz{zz{{zz{{zz{{zz{{{{{{{{{{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{zz{{{zz{{zz{{zz{{zz{zz=\nz{{z{{{{{{{{{{{{{{zz{{{{zzz{{z{{zz{{{z{{zz{{zz{zz{{zz{{zz{{zz{{z{{{{{{{{z=\n{{{{z{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\nzzz{{z{{zzzz{zzzzzzzz{zzz{zzz{zzzz{{{{{{{{{{{{{{{zz{{{{{zzzz{{zzzz{{zzzz{=\n{zzzz{zzzz{{zzz{{zzz{z{{{{{{zzzzz{{z{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=\n=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzzzzzzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{zzzzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{zz{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz{{{{{zz{{{z=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{zz{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{zz{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{zz{{{{{zzzz{{{z{{{{{zz{zz{{{{zzz{{z{zz{{{z{{{zz{z{{z{zzzz{z{zz{{zz=\n{{zz{zz{zz{zzz{{zz{zz{{{{zzz{{z{zzz{{{{z{zz{{{{zzz{{{z{{z{{{zzzz{{{zzz{{z=\n{zzz{{zzz{{{{{{{zzzz{{{zzz{{zz{zz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{z{{{{{{zz{zz{{z{{z{{z=\nz{zz{z{{{z{{z{{{z{{z{{{zz{zz{{z{{{z{{zz{zzz{zz{{zz{zz{{z{{{z{{zz{z{{{{zz{=\nzz{{z{{{z{{z{{z{{zz{{z{{zz{zz{{zz{z{z{{{z{{{{{zz{{z{{zz{zz{{zz{zzz{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{=\nzz{{zz{{{{{{{{{z{{{z{{zz{{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{=\n{z{{z{{{z{{zzzzz{{z{{{{{{{z{{{z{{zzzzz{{z{{z{{z{{{{{{z{{{z{{z{{{{zzzzz{{{=\n{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{{{{{{{{z{{{z{{{zz{{{z{{{z{z{{z{{{z=\n{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{z{{{{{{z{=\n{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{{{{{{=\n{{z{{{z{{{{zz{{z{{{z{z{{z{{zz{{z{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{z{=\n{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{=\nz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{zz{{{{zz{{zz{{z{{{{{{z{{{z{{z{{z{{z{{zz{zz{{zz{zzz{{{{z{{{z{{=\n{z{{zz{zz{{z{{{z{{{z{{zz{zz{{zz{{{z{z{{{{z{{z{{zz{{zz{{{z{z{{z{{zz{{{z{zz=\n{zz{{z{{{{zz{{{z{z{{zz{{{z{zz{zz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{zzzz{{{z{{{{{zzz{zzz{zz=\nz{{{zzzz{{{z{{{{{{{{{{{{{zzzzz{zzz{{zz{zzzzz{zzz{zzz{z{zz{{{{zzzz{zzz{{{z=\n{{zzzz{{{{zzzz{zzzzzz{{zzzz{{{zzz{{zzz{{{{zzzz{{z{{{zzzz{{{zzz{{zzz{zzz{z=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{z{{{{{{{{zzz{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zzz{{{{{zzz{{zzz{{zzz{{{{{zzz{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{z{{{{{{{{{{{zzz{{{zzz{zzz{{zzz{{{zzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{{{{{{zz{=\n{{{{{zz{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zz{{{{{zz{{{{z{{{{zz{{{{{zz{{{{z{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{z{{=\n{{{z{{{z{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{zz{{{{z{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{z{z{{{=\nz{z{{{{z{{{{z{z{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{z{{{{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzz{zzz{{zzzzz{{zzz{{{z=\nzz{{{{zzz{{zzzz{{z{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{z{{{z{{{{{{{zzz{{=\nzzz{zzz{{zzz{{zz{zz{zzz{{zz{zz{{{z{{{zzz{{{{{zz{zz{zz{{{{{{{z{{{z{{{{z{{{=\n{z{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{zzzz{{{zz{{zz{{zz{{zz{{zz{{z{{zz{{z{{zz{{zz{{{z{{{{{{{z{zz{zz{z{{{{z{{{=\n{z{zz{zz{z{{{{zzzzz{{{{{{z{{{z{{z{{{z{{zz{{z{{zz{zzz{zz{{zz{zz{{z{{z{{{z{=\n{{{{z{{zz{zz{{{{{{z{{{z{{{{z{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zzz{{zz{{zz{{zz{{zz{{zz{zz{{zz{zz{{zz{=\n{zz{{{{{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{{{{z{{{z{{{{{{zzzzz{{{zzz{{{{{{=\nzz{{z{{{z{{{z{{z{{{z{{z{{zzzzz{{{{{z{{z{{{z{{{{{{zz{zz{{{{z{{{{z{{zz{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zz=\n{{zz{{zz{{zz{{zz{zzzzzz{zz{{{{{{zz{{{{{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{=\n{{{z{{{{{{{{{{z{{{{{{{{z{{{{{zz{z{{z{{{z{{{z{{z{{{z{{z{{z{{{{{{{{{z{{z{{{=\nz{{{{{{{z{z{{{{{z{{{{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{{{{zz{zz{{zz{{zz{{zz{{zz{zz{{{{{zz{{{{{{zz{z{{{{{{=\n{{{z{{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{{{{{{{{z{{{{{{{zzz{{{z{{{z{{z{{{z{{=\n{z{{z{{{z{{z{{z{{{{{{{{{z{{z{{{z{{{{{{{zzz{{{{{z{{{{z{{{z{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{{zz{zz{{zz{{zz{{zz=\n{{zz{zzz{{z{zzz{{z{{zzz{{z{{{{{{{z{{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{{z{{{=\n{{zz{{{z{z{{{z{{zz{{z{{z{{{z{{{z{{zz{zz{{z{{zz{{{z{{{{z{{z{{{z{{{{{{{{z{{=\n{{{{z{{{{z{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{zzzzzz{{{zzz{zz{z{zzz{{{zz{{zzzz{{{zzzz{{{{zz{{z{{{{{{zzz{{z{{zz=\nz{{zzz{{zzz{{z{{zzz{{zzzzzzz{{{{{{zzzz{zzz{zzz{{zzz{zzzz{zzz{zzz{z{zz{{zz=\nz{{zzzz{{{{zzzzzz{zzz{{{{{{{z{{{{{zzz{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=\n=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=\n=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{z{zz{zz{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zz{{{{{{{{{{{{{{{zzzz{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{zzz{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zzzz{{{{zzzz{zzzz{{{{zzzz{{{zzzz{z{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{z{zzzz{{{zzz{zzzz{zzz{{{{zz=\nz{z{{{{{{{{{{zzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{z{{z{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{zzz{{{{zzz{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zzz{=\n{{{zzz{{{zzz{{{{zzz{{{zz{{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\nz{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{z{{zz{{{{{z{{{zz{{{zzz{{{{z{{z{{{{{{{{{{{z{{{{z{z{{{{{{{{{{{{{z{{{{{{{=\n{{z{{{z{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{=\n{{{{{{{{{{{{{zzz{{{{zzz{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{zzz{{{{zzz{{{zzz{{{{zzz{{{zz{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{zz{{{{zz{{{zz{{{zzz{{{{z{{{z{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{zzz{zzz{zzzzz{{=\nz{{z{{{{{{zzz{{z{zz{{{{zzz{{zzz{zzz{zzz{{{zzz{zzz{{zzz{{zz{{zz{{{{{z{zz{{=\n{{zzz{{zzz{zzz{zzz{{{zzzz{z{zz{{{{zzz{{{{{{z{zz{{z{zz{{{{zzz{{zzzz{{zzzz{=\n{zzz{zz{{zz{{{zzzz{{zzz{{zz{{{{{{{zzz{{zz{zz{{{{zzzz{{{{{z{zz{{z{zz{{{z{z=\nz{{z{zz{{{zzz{{{{{{{{zz{{{zzz{{{{zz{{zz{{{zzz{{{zzz{{{{zzzz{{{{zz{zz{zz{{=\n{{{zz{zz{zzz{{zzz{zzz{{{zz{zz{{{{zzz{{zzz{zzz{zzz{{zzz{{{{zzz{{{{{zz{zz{z=\nzz{{{{zzz{{zz{{z{{{{z{zzz{{zzz{{{{zzz{{{{zzzz{{{zzz{{z{zzz{{{{{z{{{{zz{{{=\nz{{{{zz{{{z{zz{{{z{{{z{{{{{{{{{{z{{{z{zz{z{zzz{{zzz{zzzz{{{{{{zzzz{z{zz{{=\nzz{{{zzz{{{{zz{{{zzz{{{{{{zzz{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{z{{z{{{{{z{{z{{zz{zz{{zz{zz{{z{{{z{{{z{{{{=\n{z{{{z{{zz{zz{{z{{{z{{{{{zz{zz{{zz{zz{{z{{{z{{{z{{{{{z{{{zz{zz{{z{{{z{{{{=\n{z{zz{{z{zz{{{z{{zz{{zz{{zz{{zz{{zzz{zzz{zz{zz{{zz{{zz{{zz{{{{{{zz{{z{{zz=\n{zz{{zz{{z{{{{{z{zz{{z{zz{{{z{zz{{z{zz{{{{zzzz{{{{{{{z{{z{{z{{{{{z{{{z{{z=\n{{z{{z{{{z{{zz{{z{{{{{z{{zz{zz{{{{{zz{zzz{zz{{z{{{z{{{{{zz{zz{{z{{{z{{z{{=\n{z{{{z{{z{{z{{{{{z{{zzz{{zz{zzz{zz{{zz{{z{{z{{z{{{{{zz{z{z{{{z{{zz{{z{{zz=\n{{z{{z{{{z{{zz{z{{{{z{{{{{zz{{zz{{{{zz{{{z{{zz{{z{{{{z{{{{{{{{{zzzzz{{z{{=\nzz{z{z{{z{{z{{{{{{{{{z{{{zz{zz{{z{{z{{z{{{{{z{{z{{z{{{{{zz{{z{{zz{zz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{z{{z{{{{{zz=\n{{{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{z{{=\n{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{zz{z{{zz{{zz{{zz{{zz{{{{{{zz{{zz{{zz{{z=\nz{{{{{zz{{zz{{zz{{{{{{{{{zz{{z{{{z{{z{{{z{{{{{z{zz{z{{zz{{{z{zz{z{{zz{{{{=\n{{zzz{{{{{{z{{zz{{{{{{{z{{{z{{zz{{{{zzzzz{{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{=\n{z{{z{{{z{{{{{z{{{z{{zzzzz{{z{{{z{{{z{{zz{{{{{zzzz{{z{{{z{{{z{{{z{{{{{zz{=\n{z{{z{{{{{z{{{{zzzzz{{{{{zz{{z{{{z{{zzzzz{{z{{{{{{{z{{{{{zz{{z{{{{{zz{{{z=\n{{zzz{z{{{{z{{{{{{{{{z{{{z{{z{{z{{{{zz{{{{z{{{{{{{{{z{{{z{{{z{{z{{zz{{{{{=\n{{z{{zz{{{{{{{{{{zz{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{z{{z{{z{{{z{{z{{z{{{{{{zz{{{z{{{z{{z{{{z{{{z{{z{{z{{{{{{{z{z{{{z{{=\n{z{{z{{{z{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{{{{z{{{z{{{z{{z{{{{{{{{{z{{zzz{{zz=\n{{zzzzzz{{zz{{{zzzzz{{zz{{zz{{zz{{zzzzz{{zz{{zz{{{{{{{zz{z{{z{{{z{{z{{{z{=\n{{{{z{{zzz{{zz{{{z{{zzz{{zz{{{{{{{zzz{{{{{z{{{zz{{{{{{z{{{z{{{zz{{{z{{{{{=\n{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{{z{{{z{z{{{{{{z{{{z{{z{{{{{{{z{{z{{z{{{{zz=\n{{{zz{{z{z{{{{z{{{z{{{z{{{zz{z{{z{{z{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{z{{{{{=\n{z{{{{{{{z{{{{{{zz{z{{{{{zz{{{z{{{zzzz{{{{z{{{{{{{{{z{{{{{{z{{z{{{{{zz{{{=\nz{{{{{{{{{z{{{z{{{z{{z{{{zz{{{{{{z{{{zz{{{{{{{zz{z{{z{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzz{zzz{{{z{{z{{z{{{{{{{zz{{z{{{z{{=\nz{{{z{{{zzz{zzz{{{{{{{z{z{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{{zzz{zzz{{{{{{=\nz{{{z{{{z{{z{{{{{{{{{z{{zzz{{zz{{zz{{{{{{zz{zzz{{zz{{zz{{zz{{zz{zz{{zz{{z=\nz{{zz{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{zzz{{zz{{{z{{zzz{{zz{{{z{{{{zz{{{{{=\nz{{{{zz{{{{{z{{{z{{{{zz{{z{{{{{{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{{z{{{z{z{{{=\n{{{z{{{z{{z{{{{{{{zzz{zzz{{{{{zz{{z{{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{z{{{{{z=\n{{{{z{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{{{{zzzz{{{{{zz{{{z{{{{zzz{{{{=\nz{{{{{{{{{z{{{{{{z{{z{{{{{{zz{{z{{{{{{{{{z{{{z{{{z{{z{{{{zz{{{{{z{{{{zz{{=\n{{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{=\n{z{{{{z{{z{{z{{{{{z{{z{{z{{{z{{zz{zz{{{{z{{{z{{{{{{{{{z{{{{zz{zz{{zz{zz{{=\n{{{z{{{z{{zz{zz{{{{z{{{z{{{{{{{z{{{z{{{z{{zz{{{z{{{{z{{{z{{{zz{{zzz{{z{{z=\nzz{zz{{zz{{zz{{zz{{zz{zz{{zz{{zz{{zz{{{{{{zz{{z{{z{{{z{{zz{zz{{{{{z{{{z{{=\n{zz{{{z{{{z{{{zz{{{zz{{{zz{{{{{z{{z{{z{{{{{zz{zz{{z{{z{{zz{{{z{zz{zz{{{{{=\nz{{z{{{z{{{{{z{{{z{{{z{{{{z{{{{{{{z{{{z{{zz{{{z{{{z{{{z{{{{z{{z{{zz{{zzz{=\n{z{z{{{z{{{z{{zz{{z{{z{{z{{{{{z{{{{zz{{{z{zz{{z{{zz{zz{{zz{{{z{z{{{{{{{z{=\n{{{{{{zz{{{{{{zz{{{z{{{{{zz{{{{z{{{{{{{{{z{{{{{{z{{z{{{{z{{z{{z{{{z{{{{{z=\n{{{z{{{z{{z{{z{{z{{{{{z{{z{{z{{{{{zz{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{zzz{{{{{{{z{{{z{{{zzzzzzzzz{{{{zzz{{zzz{zzz{{zzz{{{{{z{=\n{{z{{{{{{{{zz{{{{{zzz{{{{zz{zz{{{zzz{zzz{{zzz{{{{{z{{{z{{{{{{{{zzzzz{zzz{=\n{zzzz{{{{zzz{{z{{zzzz{{zzzz{{{{zz{{zzz{zzzzzz{zzz{zzz{zzz{zzzzzzzzzz{{{{{=\n{zzz{zzzz{zzz{{zzz{z{{{zzz{{z{{zzzz{zzz{{z{{zzzz{{zzzzzz{{{{{zzz{zzz{{{{{=\n{{zz{zz{zzz{{{{zzzz{{{zzz{z{{{zzzzzz{zzz{{{zzz{zzz{zzz{{zz{{{{{{zzz{zzz{{=\nzzzz{{{{z{{{z{{{{zzz{{{{zzz{{zzz{zzz{zzz{zzz{{zzz{zzzzzzz{{{zzz{{{{zzzz{{=\n{zzz{z{{zzz{z{{zzzz{zzz{{{{{{{z{{{{{{zz{{{{{zzzz{zzz{{{{{z{{{z{{{{{{{{{zz=\nz{{{{zzzzzz{{{zzz{{{{zz{z{{{{{{zzzzz{zzzzzz{zzz{{{{{zzz{zzz{{{{{{{zzz{zzz=\nz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{zz{{{{{{{zz{=\n{{{{{{{{{zz{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{z{{{{{{{=\n{{{{{{zz{{{{{{{{{{{{{{{{zzz{{{{{zzz{{zzz{{zzz{{{{{zzz{{zzzzzzz{{{{{{{{{{z=\nzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{=\n{{{zz{zz{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{zz{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{z{z{{{{{{{{z{{{{{{{{{z{z{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{=\n{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{z{{{{{{{{{{{z{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{z{{{=\n{zz{{{{{zz{{{{z{{{{z{{{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\nz{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{z{{{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{z{{{{{{{{{{{{{zz{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{z{{{=\n{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{zzz{{zzz{zzz{{zzz{{zz{zz{zzz{{zz{zz{{{z{{{zzz{{{{{{=\n{zzz{{zzzz{{{{{zzzz{{{zzz{{zzzz{{zzz{{zz{{zz{{z{zzzz{{{{{zzzz{zz{{{zzz{zz=\n{zz{{{z{{{zzz{{zzz{zzz{{{zz{zz{zz{zzz{{{{zzz{{{{zzzz{{{zzz{{{{{{{zzz{{zzz=\nz{{{zzz{zzzzz{zz{zz{{{{{zzzz{{zzz{{z{zzz{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{=\n{{{z{{{z{{{{{{{{{z{{{{{{z{zz{{zz{z{zzzz{zzz{{zzz{{zz{zz{{zzzz{z{zzz{zzz{{=\n{{{z{{{{{{{zzzz{{{zzz{{{z{{z{{{{zzzz{z{zz{{zz{{{zzz{{{{zzz{zzzzz{{{zzz{{z=\nzz{zzz{zzz{{{{{zzz{{{{zzz{{{{zzzz{z{zz{{{{zzz{{{{{{{zzz{{zzz{zzzzz{zz{{{{=\nzzz{{zz{zz{{{{zzzz{{{zzz{{{{zzzz{{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{{zzz{zz=\nz{zzz{z{zz{{{{zzz{{z{zzz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{z{{zz{{z{{z=\nz{zzz{zz{{zz{zz{{z{{z{{{z{{{{{zz{zz{{z{{{{{{zz{{z{{z{{{z{{z{{{zz{{z{{z{{{=\nz{{z{{z{{{{{{zz{{z{{z{{z{{z{{zz{zz{{z{{zz{{z{{z{{{z{{{{{z{{zz{zzz{zz{{zz{=\n{z{{zz{z{{{z{{{z{{{{{zz{zz{{z{{{{{{z{{{z{{z{{zz{zz{{{{{z{{{zz{zz{{zz{z{{{=\n{{z{zz{zz{z{{{{z{{{{z{zz{zz{z{{{{zzzzz{{{{{{{{{z{{{{{{{{{z{{{z{{zz{z{zz{z=\n{z{{{z{{zz{zz{{z{{{z{{z{{{z{{{{{{z{{{{{{zz{{z{{zz{{z{{z{{z{{{{{z{{{zz{zz{=\n{z{{z{{z{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{zz{{z{{z{{z{{{{{z{{{zz{zz{{z{=\n{{z{{{{{z{{{z{{z{{{z{{zz{zz{{zz{{z{{zz{zz{{zz{{z{{z{{{z{{zz{{z{{{{{z{{{z{=\n{z{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{{z{{zz{zz{{z{{{z{{zz{z{z{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{=\n{{{{{{{zzzzz{{{zzz{{{{{{zz{{z{{{z{{{z{{z{{{z{{z{{zzzzz{{{{{z{{{z{{z{{{{{{=\nz{{{z{{zzzzz{{z{{{{{{zz{{z{{{z{{z{{z{{{{{{z{{{z{{z{{zz{{{{z{{{z{{z{{{{{zz=\n{{z{{{z{{{{{z{{z{{{z{{{z{{{{{zz{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{{{{z{{{z{{z{=\n{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{{{{z{{{z{{{{{{=\n{{{z{{{{{{{{{z{{{z{{z{{{{z{{{{zzzzz{{z{{{z{{z{{{z{{z{{{z{{{{{{z{{{{{{z{{{=\n{{{{{{zz{{z{{z{{{{{z{{{z{{{z{{z{{zz{{{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{=\n{{{zz{{zz{{{{{{{z{{{z{{{z{{zzzzz{{{{{zzzzz{{{zzz{{{z{{{z{{{{{zz{{z{{{z{{z=\n{{{z{{zzzzz{{z{{{z{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{z{{{z{{{z{{z{{{z{{z=\nzzzz{{z{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{zz{z{{z{{{z{{{z{{z{{=\n{z{{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{{zz{z{{z{{{z{{z{{z{{{{{{=\nz{{{z{{z{{{zz{{{z{{{z{{z{{{zz{z{{{z{z{{{{{{z{{z{{{z{{{z{{{zz{z{{zz{{z{{z{=\n{{{{{{{{z{{{z{{z{{{{{{{z{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{z{{z{z{{z{{=\n{{z{{{{z{{z{z{{z{{{{z{{{{{{{{{{{{{z{{{{{{{{{z{{{z{{z{{{{z{{{{z{{{{{{z{{{z=\n{{z{{{z{{{z{z{{{{{{{z{{{{{{z{{{{{{{zz{z{{z{{z{{{{{z{{{z{{{z{{z{{{zz{{{{{{=\n{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{{zz{z{{{zz{{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{{=\n{{{{z{{{{z{{{z{{{zz{z{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{{{{{z{z{{{z{{z{{{{{{{z=\n{{z{{z{{{{{{{z{{z{{z{{{z{{{z{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{zzz{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{=\n{{{z{{{z{{{z{{z{{{z{{z{{z{{{{{{z{{{z{{z{{{{zz{{z{{{z{{z{{z{{{z{{{z{z{{{{{=\n{z{{z{{{z{{{z{{z{{{z{{{zzz{{{z{{{{{{{{{z{{{z{{z{{{{{{{z{z{{{z{{z{{{z{{{{{=\nz{{{z{{{z{{z{{{{{{{{z{{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{{{{{{{{{{{zz{{{{{z=\n{{z{{{z{{z{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{{z{z{{{{{{{z{{{{{{z{{{{{{z{{{z{{z=\n{{z{{{{{z{{{z{{{z{{z{{{{zz{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{{{{z{{{z{{{{zz=\n{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{{{{{zzz{{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{=\n{{z{{{z{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{{{{{zzz{zzz{{{z{{{z{{z{{{{{{z{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{{z{z{{{z{{zz{{z{{z{{{z{{{z{{zz{zz{{z{{zz{{=\n{z{{{{zz{zz{{z{{{{{{zz{zz{{zz{{{z{z{{{zz{{z{{zz{zz{{z{{z{{{{{{zz{zz{{z{{z=\n{{z{{zz{zz{{z{{zz{{z{{{{z{{{{{{{z{{z{{{z{{{z{{zz{{z{{{z{{{{{zz{{{z{{{{zz{=\nzz{{z{{{{{{{{z{{{{z{{z{{{z{{{{{z{{{zz{zz{{z{{{{{{{{z{{{z{{{z{{{{z{{{{z{{{=\nz{{{z{{{{z{{{{z{{z{{{{{{zz{{{z{{{zz{zz{{z{{{{z{{{{zz{{{z{z{{{z{{z{{{z{{{{=\nz{{{{{{{{z{{{{{{zz{{{z{zz{{z{{z{{z{{{{{z{{{z{{{z{{z{{z{{z{{{{{{{z{{{{z{{z=\nz{{{z{{{z{{{z{{{{{{{zz{{z{{z{{z{{{{{z{{{z{{{z{{zz{{{z{{{{zz{{{z{z{{{z{{zz=\n{zz{{zz{{z{{z{{{z{{zz{zz{{zz{{{z{zz{zz{{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{{{=\n{{{z{{{z{{{{z{{{z{{zz{{{z{z{{{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=\n=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{zzz{zzz{{z=\nzz{zzzz{zzz{zzz{z{zz{{zzz{{zzzz{{{{{{zzz{{zzzz{{{{{zzz{z{{zzzz{zzzz{{zzz{=\nz{{zz{zzzzz{{zz{{{{{zzz{zzzz{zzz{{{z{zz{{zzz{{zzz{z{{zz{{{{{{zzzzzz{zzz{z=\nzz{{zzz{z{{zzzz{{{zzzz{{{{{{zzz{{zzzz{{{{{{z{{{zzzzzz{zzz{{{zzzz{{zzz{{zz=\nz{{{{{{zzz{{z{{zzz{{zzz{{zzz{{z{{zzz{{zzzzzzz{{z{{{{{{{zzzz{{{{{zz{zzzzz{=\n{zzz{{{{zzzz{zzz{zzz{{zzzzz{{zz{{{{{{{zzz{{{{{{zzzz{{{zzz{zzzzzzz{{{{{zzz=\nzz{zzzzzz{zzz{{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{{{{{zzz{z{zzz{{{{{{{zzzzz{=\nzzz{{zzzz{{{{{{zzzz{zzz{zzz{z{zz{{{{zzz{zzzz{zzz{{zzz{z{{zzzz{{{zzz{z{{{{=\n{{z{{{zzz{{zzzz{{{{z{{{z{{{{{{{{{z{{{z{{{zzz{zzz{{zzzz{zzz{{{{zzzz{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{zz{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{z{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{zzzz{{zzz{{zzz=\n{zzzzzzz{{{zzzzzzz{zzzzz{zz{{{{zzz{{{{{zz{zz{{{{zzz{{z{zzzzzzz{{zzz{{{{{{=\nzzz{{z{zzz{{zzz{{{{{zz{zz{{z{zzz{{zzz{{{{zzzz{{{zzz{{{{zzz{{{zzz{{{zzz{{{=\n{zzzz{{{{{{zzz{{zz{zz{{{{zzzz{{{{zz{zz{zzz{{{{zzz{{z{zzz{{zzzz{{{zzz{{{{z=\nzzz{{{{zz{zz{zz{{zzzz{{zzz{{{{{{{zzz{{{{{zzzz{{zzz{{zzz{zzzzzzz{{{zzz{zzz=\n{zzzzz{zz{zz{{{{zzzz{{{zzz{{zzz{zzz{zzz{{{{{{zzz{zzz{zzz{z{zz{{zz{{z{{{zz=\nz{{{{{zz{zz{{{{zzz{{zz{zz{{{{{{{{{{{zzzz{{zzz{{zzz{zzzzzzz{{{zzzzzzz{zzzz=\nz{zz{{{{zzz{{{{{zz{zz{{{{zzz{{z{zzzzzzz{{zzz{{{{{{zzz{{z{zzz{{zzz{{{{{{{z=\nzz{{zz{zz{zzz{{{z{zz{{{{zzz{{{{zzzz{{{zzzz{{{zzz{{{{zzzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{{z{{zz{zz{{z{{{z{{{{{zz=\n{zz{{zz{{z{{zz{z{z{{{z{{z{{{{{zz{{z{{zz{z{z{{{z{{{{{zz{zz{{zz{z{zz{zz{{zz=\n{{z{{z{{{z{{z{{z{{z{{z{{z{{{z{{zz{{z{{{{{zz{{z{{zz{zz{{zz{{z{{{{{zz{zzz{z=\nz{{z{{{z{{zz{z{zz{z{{{z{{{z{{zz{{z{{{{{z{{zz{zz{{z{{{zz{zz{{{{{zz{{z{{{{{=\nz{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{zz{zz{{zz{{z{{zz{zz{{z{{{z{{{z{{{{=\n{{{{z{{{z{{{z{{zz{zz{{z{{z{{z{{{z{{{{{zz{zz{{zz{zz{{zz{zz{{{{{{{{{{{z{{{z=\n{{{z{{z{{{z{{z{{{{{{z{{{z{{{z{{zz{zz{{z{{{z{{{{{zz{zz{{zz{{z{{zz{z{z{{{z{=\n{z{{{{{zz{{z{{zz{z{z{{{z{{{{{z{{{z{{zz{zzz{zz{{zz{zz{{z{{{z{{zz{{z{{zz{{z=\n{{z{{{z{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{zzzzz{{{zzz{{{z{{{{{{=\nz{{{z{{{z{{z{{{z{{zzzzz{{{{{z{{{z{{{{{zz{{z{{{{z{{{zz{{{{{{{{{{zz{{z{{{{z=\nzzzz{{{{{z{{{z{{z{{{{z{{{z{{z{{{{{{zzzzz{{zz{{{{zz{{{{zzzzz{{z{{{z{{{{{{{=\n{zz{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{z{{{{z{{{z{{zzzzz{{z{{{z{{{{{z{{z=\n{{{z{{z{{{z{{{z{{{{{{{{zz{{{{{z{{{zzzzz{{{zzz{{{z{{{{{{z{{{z{{{z{{z{{z{{{=\nz{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{{{{z{{{z{{{z{{z{{{z{{z{{z{{zzzzz{{{{{z{{{z=\n{{z{{{z{{z{{{z{{{{{{{{{{{z{{{zzzzz{{{zzz{{{z{{{{{{z{{{z{{{z{{z{{{z{{zzzzz=\n{{{{{z{{{z{{{{{zz{{z{{{{z{{{zz{{{{{{{{{{zz{{z{{{{zzzzz{{{{{zzzzz{{z{{{z{{=\n{z{{z{{{z{{zzzzz{{z{{{z{{z{{{z{{zzzzz{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{z{{{z{{{{{{{{z{{{{z{{{{{{z{{{{z{z{{{z{{{z{{z{{{{{{{{{z{{{z{{{zz{z{{=\nz{{{{z{{{{zz{{{{{{{zz{z{{z{{{{z{{{{{{{{{z{{{z{{z{{{{z{{{z{{z{{{{{{z{{{{{{=\n{zz{{{{zz{{{z{{{{{{z{{{z{{{{{{zz{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{z{=\n{{{zz{{z{{z{{{{{{z{{{z{{{{{z{{z{{{z{{z{{{z{{{z{{{{{{zz{z{{{{{z{{{z{{{{{{{=\n{z{{{{z{{{{{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{z{{{{{{{{{{z{{z{{z=\n{{{z{{{z{{z{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{z{{zzzzzzz{{z{{{z{{{{{{{{z{{{=\n{z{{{{{{z{{{{z{z{{{z{{{z{{z{{{{{{{{{z{{{z{{{zz{z{{z{{{{z{{{{zz{{{{{{{zz{z=\n{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{zzz{{{z{{{{{{z{{{{z{z{{{=\nz{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{{z{{{{{zz{{{{{z{{{z{{z{{{{z{{{{{{{{{z{=\n{{z{{z{{{{z{{{z{{z{{{{{{z{{{{{{{{zz{{{{zz{{z{{{{{{z{{{z{{{{{z{{{z{{z{{{z{=\n{z{{{z{{{{{z{{{z{{{z{{z{{{{{{z{{{{{zzz{{{z{{{{{{z{{{z{{{{{z{{z{{{z{{z{{{z=\n{{{z{{{{{z{{{z{{{{{z{{{z{{{{{{{zzz{{{z{{{{{{{zzz{zzz{{{z{{z{{{z{{z{{{z{{z=\n{{{z{{{zzz{zzz{{{{{{{{{{zzz{zzz{{{z{{{z{{z{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{=\n{{z{{{{{{{{{{{z{{{z{{{{{{{zzz{{{z{{{{{{z{{{{z{z{{{z{{{z{{z{{{{{{{{{z{{{z{=\n{z{{{z{{z{{{{z{{{{{zz{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{{z{{=\nz{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z=\nz{{{z{z{{{z{{z{{{{{{z{{{{{z{{{{zz{zz{{zz{{{z{{{{zz{zz{{zz{{z{{z{{{{z{{{z{=\n{z{{{{{zz{{z{{z{{{{zz{{{z{{{{zz{zz{{z{{{{zz{zz{{zz{{{z{zz{{{z{z{{z{{z{{z{=\n{zz{{{z{zz{zz{{{{{zz{{z{{z{{{z{{zz{zz{{{{{z{{{z{{{z{{zz{{{z{z{{{{{z{{{{{z=\nz{{{z{zz{zz{{{{{z{{z{{{z{{z{{{zz{zz{{{{{zz{{z{{{{{z{{{zz{{{z{z{{{z{{z{{{{=\n{{{{z{{{z{{{{z{{z{{{z{{zz{zz{{zz{zz{{{{z{{{z{{{{z{{{{{{{z{{{z{{{{z{{{z{{z=\n{{z{{zz{{{z{{{{z{{{z{{zz{zz{{z{{{z{{{{{{{{{{{z{{{zz{{{z{z{{{z{{z{{{{{{z{{=\n{{{z{{{{zz{zz{{zz{{{z{{{{zz{zz{{zz{{z{{z{{{{z{{{z{{z{{{{{zz{{z{{z{{{{zz{{=\n{z{{{{zz{{{z{z{{{z{{{z{{z{{zz{{zz{{{z{zz{zz{{zz{zz{{zz{{{z{zz{zz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{zzzz{zzz{zzz{{zz{{{{{zz{{zz{{{{z{zz{{{{zzz=\nz{{{{{z{zz{{{{zzz{zzzz{{{{zz{zzz{{{{{{{zzz{zzzz{{{{zzzz{{{{{z{zz{{zzz{{{{=\nzzz{{{{zzzz{{{zzzz{{zzz{{{zzz{{{{zzzz{{{zzz{z{{{{{zzz{zzzz{zzz{{zzz{z{{{z=\nzz{zzz{zzz{{zzzz{zzz{{{{zzzz{{{zzzz{{{zzz{z{{{zzzzzz{zzz{{zz{{zzz{{{{{{{z=\nzz{z{{{{{zz{{zzzz{zzz{zzz{{zz{{{{{{z{{{z{{{zzzzzz{zzz{{zzz{z{{zzz{{{{{z{{=\n{z{{{{z{{{{{{{z{{{z{{{zzz{zzzzzzzzz{{zzzz{{{{zzz{zzz{{zzz{{zzz{zzz{{{{{{{=\n{{{{zz{{zzzz{zzz{zzz{{zz{{{{{zz{{zz{{{{z{zz{{{{zzzz{{{{{z{zz{{{{zzz{zzzz{=\n{{{zz{zzz{{{{{{{zzz{zzzz{{{{zzzz{{{{{{zzzz{zzz{zzz{zzz{zzzz{{{{zzzz{{{zzz=\n{z{{zzz{z{{zzzz{{{zzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{z{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{z{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{zzz{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zzz{{{{{{{{{{{{{{=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{zz{{{{{{{{{{{{{{{zzz{{{zz{{{{{{{{{zzz{{{{{=\n{{{zz{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{z{{{{{{{{{=\n{{{{{{{zz{{{zz{{{{{{{{{{zz{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{z{{{{{{z{{{{{z{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{z{{{{{{=\n{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{zz{zz{zz{{zzzz{{zzz{{{{{zzzz{z{zz{{{{zzz{{{{{=\nzzzz{{zzz{{zzz{zzzzzzz{{{{{zzz{{{{zzz{{{{{{zzz{{{{{{z{zz{{zzz{zzzzz{zz{{{=\n{zzz{{z{zzz{{{{{{{{{zzzz{{zzz{{zzz{zzzzzzz{{{{z{zz{{z{{zz{{{zzz{{{{{{zz{{=\nzzz{zzz{zz{{{zz{zzz{{{{{z{{{zzz{{{z{zz{{{{zzz{{{z{{{{{{zzz{{{{zzz{{{{{{z{=\n{{{{{{{{zz{{{{zzz{{{{zz{{{{{zzz{zzzz{zz{{{{zz{{{zz{zz{{{zz{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{zz{zz{{z{{=\n{zz{zz{{{{{z{{{zz{zz{{z{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{zz{{z{{z{{z{{{{{=\nzz{{z{{{{{zz{zz{{z{{{z{{zz{zz{{z{{{z{{zz{z{{{{{{{{{{z{{{z{{{z{{z{{{z{{z{{=\n{{{{z{{z{{z{{z{{{z{{{z{{{{{zz{{{zz{{zzz{zz{{zz{{z{{{{{{z{{zz{{z{{zz{zz{{z=\n{{{z{{z{{{{{zz{{z{{z{{z{{{{{{z{{{{{{{zz{{{{{z{{z{{zz{{z{{zz{{z{{z{{{{z{{z=\nz{zz{{{zz{z{{{{{zz{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{zzzzz{{{=\nzzz{{{z{{{{{{{{{zz{{zz{{{{{{{{{{zz{{{{{z{{{z{{z{{{z{{z{{{z{{zzzzz{{z{{{{{=\n{{{{{{{{z{{{zzzzz{{{zzz{{{z{{{{{{z{{z{{zzz{{{{zzzzz{{{{{zz{{{zz{{zz{{zz{{=\nzz{z{{{{{{{z{{{{{zz{{z{{{z{{zzzzz{{z{{{{{{{{zz{{zz{{{{{{{{z{{{{{{z{{{{{{{=\nz{{{{{z{{zz{{z{{{{{z{{{{z{{{z{{{z{{zz{{z{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{z{{{z{{{{{z{=\n{{z{{{z{{z{{{{{{{{{z{{{z{{{{{{{{z{{{{z{{{{{{{zz{z{{{zz{{{{{{{zz{z{{{{{z{{=\n{z{{{z{z{{{z{{{z{{z{{{{{{z{{{{zzzzzzz{{z{{{z{{{{{{{{z{{{{z{{{{{{z{{z{{z{z=\n{{{{z{{{{{{{{{zz{{{zz{{zz{{zz{{zzzz{{{{{{{z{{{zz{z{{z{{{z{{z{{{{{{z{{{{{{=\nzz{z{{{zz{{{{{{z{{{{{zz{{{{{{{{{z{{{zzzz{{{z{{{{{{z{{{{z{{z{{{{z{{z{{z{{{=\n{{{{{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{{{{{{zzz{{{z{{{{=\n{{z{{{z{{{{zz{{{{{z{{{z{{{{{z{{{z{{{z{z{{{z{{{z{{z{{{{{{z{{{{{{{{{{{{{z{{=\n{z{{{{{{{zzz{{{z{{{{{{z{{z{{z{{z{{{z{{{{{{{{{zz{{{zz{{zz{{zz{{zz{zz{{{{{{=\nz{{z{{{z{{z{{{z{{z{{{{{{z{{{{{z{{{z{{{{zz{{{{{z{{{{{{{z{{{{{{{{{z{{z{{{{{=\n{z{{{{{z{{{{z{{{z{{{z{{{z{{z{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{zz{zz{{{{{z{{{z{{{z{{zz=\n{{{z{{{{z{{{zz{{{z{z{{{z{{z{{{{{{zz{{z{{z{{z{{{{{zz{{z{{{{{z{{{z{{{{z{{{{=\nzz{zz{{zz{{{z{z{{{{{{{{{{{{{z{{{zz{{{z{z{{{z{{z{{{{{{z{{z{{z{{zz{{zz{{{z{=\n{{{zz{{{zz{{zz{{zz{{zz{{zz{{{{{z{{zz{{z{{z{{zz{{zz{{{z{z{{{{{zz{{z{{z{{z{=\n{{{{z{{{{{{{{zz{{{{z{{z{{zz{{z{{zz{{z{z{z{{z{z{zz{zz{{z{{z{z{{{{{zz{{{{{{=\nz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{zzzzzz{=\nzzz{{zz{{zzz{{{{{{{zzzzz{zzz{{zzzz{{{{{{zz{{zzzz{zzz{zzz{{zz{{{{{zzz{z{zz=\nz{{{{{{{zzz{z{{{zzz{zzz{{zz{{{{z{zz{{{{zzzz{zzz{{{{{{{{{{{{{zz{{zzzz{zzz{=\nzzz{{zz{{{zzzzzzzzz{{zz{{zzzz{{{{zzzz{zzzzzzz{{zzzzzz{{zzz{{{zzz{{zzz{z{z=\nzzz{{{{zzzz{zzz{{{{{zzz{z{zzz{{{{{z{{{{{{{{{{{zz{{zzz{{{{zzz{{{{zzz{{zz{{=\n{{z{{{zz{{{{z{{{z{{{{zz{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=\n=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~~~~~~zzzz{~~~~zz{~~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz=\nz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~zz{~~~~~~~~~zz{~~zzzzzz{~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~zzz{{zzz{~~zz{~~~~~~zz{~~~~~~~=\n~~~~~~~~~~zz{~~~~~~~~~~~~~~~zz{{{~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz=\n{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~~~~~zz{~zz{{{zz{~~}}{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~=\n~zz{{~{zz{~~zz{~~~~~~{{{~~~~~~~~~~~~~~~~~zz{~~~~~~~~~~~~~~~zz{~~~~~zz{~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{{~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~z{{~~~~~~~~~{{{~zz{~zz{{~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{{~~~{zz{~zzzzz{~~~zz{~~zzzz{~~~~zzz{~zz=\nzzz{~~~~~~zzz{~~zzzz{~~~zzzzzzz{~~~zz{zz{zz{~~~~zzzz{~~~~~~{{{~~zz{~zz{zz=\n{zzz{~~~zzzz{~~~~zzz{z{~~zzzz{~~~z{~~~zzz{z{~zz{zzzz{{{{~~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~=\nzzz{zz{~~zz{~zz{{zz{~~zzzzz{{zz{{{~~~~~zz{zz{~{zz{{~~~{zz{{zz{~~~zz{zzz{z=\nz{~~zz{{zz{~~~~~~~~~~zz{~zzz{zzz{zz{~zz{{zz{~~zz{zzz{~zz{{zz{~zz{~~zz{zzz=\n{~zz{{zz{{~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~zz{{{zz{~zz{~zz{~zz{~zz{{{z{~zz{~~~~~~zz{{=\n{zz{~zz{~~~~~zz{~{zz{~zz{{zz{{{zz{~zz{~zz{~~~~~~~~~~zz{~zz{{zz{{zz{~{{{~z=\nz{~zz{{{zz{~zz{~zz{~zz{~zz{{{zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~zz{~~zz{~zz=\n{~zzzzzz{~zz{~~{{~zz{~~~~~~zz{~~zz{~zz{~~~~~zz{~~zz{~zz{~zz{~~zz{~zzzzzz{=\n~~~~~~~~~~zz{~zz{~zz{~zz{~~zzzzz{~zz{~~zz{~zzzzzz{~zz{~zz{~~zz{~zz{~zz{~~=\n~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~~~zz{~~~~~zz{~zz{~~zz{~zz{~zz{{{{{~zz{~~~~~zz{~~~~~~zz{~~zz{~zz{~~~=\n~~zz{~~{z{~z{{~zz{~~zz{~zz{{{{{~~~~~~~~~~zz{~zz{~zz{~zz{~zz{{zz{~zz{~~zz{=\n~zz{{{{{~z{{~zz{~~zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~{zz{~~~zz{{~zz{~~zz{~zz{~zz{~~~~~zz{=\n~~z{~zz{~~~~~~zz{~~zz{~zz{~~~~~zz{~~~zzzz{~~zz{~~zz{~zz{~~~~~~~~~~~~~~zz{=\n~zz{~zz{~zz{~zz{~zz{~zz{~~zz{~zz{~~~~~z{~~zz{~~zz{~zz{~zz{~~~~~~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~zzz{~=\nzzz{~~zzz{zz{{~zz{~zzz{zz{~{zzzzz{~zz{z{~~~~{zz{zz{{~zz{~~~~~zz{z{~{zz{{~=\n~zzz{zz{{~zzz{zz{~~~~~~~~~~zz{~zz{~zz{~zz{~zzzzzz{~{zz{zzz{~zzz{zz{zz{~~{=\nzz{zzz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~vvvvvv~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~~~~{{zzzz{{{~~zz{zz{{~~zz{~{zzzz{{~~{zzz{{~{zz{{~~=\n~~~{zzz{{~~zz{~~~~~{zz{{~~zz{~~~zzzzz{{~~{zzzz{{~~~~~~~~~~zz{~zz{~zz{~zz{=\n~{zzz{zz{~{zzzzz{~{zzzz{{zz{~~~{zzzzz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||=\n~}}|||||vvvvv||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~{{{{{~~~~{{{{{=\n{~~~zz{~~{{{{{~~~~{{{{~~~{{{~~~~~~~{{{{~~~{{{~~~~~~{{{~~~zz{~~~zz{{{{~~~~=\n{{{{{~~~~~~~~~~~{{{~{{{~{{{~{{{~~{{{{{{{~~{{{zz{~~{{{{{~{{{~~~~{{{zz{~{{{=\n~{{{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=A4=1C=01=01||~}}|||||vv||||||||}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~zz{{~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz=\n{~zzz{~~~~~~~~~~~~~zz{~zzz{~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~v||=\n|||~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~zz{{~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~zz{~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zzzzz{{~~~~~~~~~~~~~{zzzzz{{~~~~~~~~~~~~~~~=\n}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~~~~~~~~~~~~~~~~~~~~~~~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~{{{{~~~~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{{{{{{~~~~~~=\n~~~~~~~~~{{{{{{~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{zz{{{{{{{=\n{zz{{{{{{{{{{{{zz{{{{{{{{{{{{zzz{z{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{zz{{zz{{{{{{{{=\n{z{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{z{{{{{{{{=\n{{{{{z{{{{{{{{{{{z{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{zz{{z{{{{zzz{{zz{{zz{{{{{{zzzz{{{zzz{{zz{zz{{{{{zzz{zzzzz{{{zzz{{zzz=\n{zzz{zzz{{{zzzz{z{zz{{{{zzz{{{{{{{zzz{{{zzz{{{{zzzz{zzzzzz{{{zzz{{zz{zz{{=\n{{{{z{zz{{zzz{zzz{{{{{zzz{{{zzz{{{z{{{zzz{{{{zzzz{zzzzzz{zz{zz{{{{zzzz{{{=\n{{{zzz{{{{{{zz{{{{{{{zz{{zzzz{{{zzz{{{{zzz{{zzzz{zzz{{zzzz{{zzz{zz{{zz{{{=\n{{{{{zz{{{{{z{{{zzz{{{z{zz{{{{zzz{{{z{{{{{{{{{{{zz{{{{{{{zzz{{{z{{{zzz{{{=\n{zzzz{zzzzzz{{{zzz{{zz{zz{{{{{{{zzzz{{{zzz{{zz{zz{{{{{{z{zz{{{{zzz{{{{{{{=\nzzzz{{{zzz{{zz{zz{{{{zzz{{{{{zz{{zz{{{zzz{zz{zz{zz{{{{zzzz{{{{{{zzz{{zz{z=\nzzz{z{zz{{{{zzz{{z{zzz{{{{z{{zz{{{zzz{{zzz{zzz{z{zz{{{{zzz{{z{zzz{{zzz{{{=\n{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{zz{zz{{z{{{z{{{{{zz{{z{{zz{{z{{=\nzz{zz{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{zz{zz{{z{{{z{{{{{z{{z{{z{{{z=\n{{zz{{z{{z{{{z{{zz{zz{{zz{zz{{{{{zz{zz{{z{{{z{{{{{z{{z{{z{{{z{{z{{z{{{z{{=\nzz{{z{{z{{{z{{zz{zz{{zz{z{{{{{{zz{{z{{{{{zz{{{{{zzz{{zz{{z{{z{{zz{{z{{zz{=\n{zz{{{zz{zz{{zz{{zzz{zz{{zzz{{{{{{zz{{{{{z{{zz{{z{{zz{zz{{z{{{z{{z{{{{{{{=\n{{{{{zzz{{{{z{{{z{{z{{z{{{z{{zz{{z{{z{{{z{{zz{zz{{zz{zz{{{{{zz{{z{{zz{{z{=\n{zz{zz{{{{{zz{zz{{z{{{z{{{{{zz{{z{{zz{zz{{zz{zz{{z{{{z{{{{{z{{{z{{z{{z{{z=\n{{zz{zz{{zz{z{{{{{{z{{{z{{z{{z{{{zz{zz{{z{{{z{{zz{z{{{{z{{z{{{z{{{z{{z{{{=\nz{{zz{zz{{zz{zz{{zz{z{zz{{z{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z=\n{{{z{{z{{{z{{{{{z{{{{{{{{{zz{{z{{{z{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{z{=\n{{z{{{z{{zzzzz{{{{{zz{{{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{=\n{z{{{{{zz{{{{zzzzz{{z{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{zz{{{{{zz=\n{{{zzz{{{{zzz{{{zz{{zz{zz{{zz{{zz{{{zz{zz{{zz{{zz{{zz{{{{zzz{{{{zz{{{{{z{=\n{{{{zz{{z{{{z{{zzzzz{{z{{{{{{{{{{{{{{zz{{{zzzzz{{z{{zzzzz{{z{{{{{{z{{{z{{=\nz{{{z{{z{{{z{{{{{z{{{{{{{{{zz{{z{{{z{{{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{z{{z=\n{{{z{{zzzzz{{{{{z{{{z{{zz{{{{z{{z{{{z{{z{{{z{{{{{zzzzz{{z{{z{{{z{{{z{{zzz=\nzz{{z{{{{{{{zzz{{{{zzzzz{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{zz{{z{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{z{{{{{z{{{{{{{zz{z{{z{{{z{{{{{{z=\n{z{{{z{{z{{{{{{{z{{z{{z{{{{{{z{{{z{{{z{{z{{{{{{{{{{zz{{{z{{{{{{z{{{{{{z{{=\n{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{z{{{{{{{zz{{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z=\n{{z{{{z{{zz{{z{{{{{{zz{z{{{{{zz{{zz{{{{{{{zzz{{zzzzzz{zz{{{{{{zz{{{zz{zz{=\n{zz{{zz{{zz{{{{{{zz{{{zz{{{{{z{{{zz{z{{z{{{z{{z{{{{{{z{{{{{{{{{{{{{{{{z{{=\nz{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{{{{{zz{z{{z{{{z{{{{{z=\n{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{{{z{{{z{{{zz{{{z{{z{{{z{{zz{=\n{z{{{{{z{{{{{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{z{z{{{{z{{{{{{{z{z{{{z{{{z{{z{=\n{{z{{z{{{{{zz{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{z{=\n{{{{z{{{{{{z{{{z{{z{{{z{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{{{{z{{{z{{{z{{z{{=\n{{{{{{{{{zz{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{z{{{{{{{{zz{=\n{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{zzz{{{{{{z{{{z{{{{{zz{{{zzz{{{{{{=\nzzz{zz{{{{{zz{{{{{{zz{z{zz{zz{{zz{{zz{{zz{{{{zzz{{{{zz{{{{{z{{z{{{z{{z{{{=\nz{{z{{{{{{z{{{{{{{{{{{z{{{{z{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z=\n{{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{{{=\n{{{{z{{{z{{{{zz{{z{{z{{{z{{{zzz{{{{{{z{{{{{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{=\nz{{z{{{z{{{{{{{z{z{{{z{{{z{{z{{{z{{z{{{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{zz{zz{{zz{zz{{{{{zz{{{z{zz{{z{{z{{{z{{{{{{{z{{{{z{{zz{{=\n{z{{{z{{{z{{{{{{{z{{{z{{{z{{zz{{{z{{{{z{{z{{zz{{{z{zz{{{z{z{{{z{{zz{zz{{z=\n{{{z{{{{{z{{zz{{{{z{{{{{{{z{{z{{zz{{{z{z{{zz{{{z{zz{{{z{z{{{z{{z{{{z{{{z{=\n{{{{{{{zz{{z{{{{{zz{{{{{zzz{{z{{zz{zzz{{z{zzz{{z{{zzz{{zz{zz{{zz{{zz{{zz{=\n{zzz{{{{{{zz{{{{{z{{zz{{z{{z{{zz{{zz{{{z{z{{z{{{{{{{{zz{{zz{{zz{{{z{z{{zz=\n{{{z{zz{{{z{z{{{z{{zz{zz{{z{{{z{{{{{zz{{{z{zz{{z{{z{{{z{{{{{z{{zz{{zz{{{z=\n{{{{zz{zz{{zz{zz{{z{{{z{{zz{{{z{{{{zz{zz{{z{{z{{z{{z{{{z{{{z{{{{{{{{zz{{{=\nz{z{{z{{{z{{{z{{zz{{{z{z{{{{{{{z{{zz{{zz{{{z{{{z{{{{z{{zz{{zz{zz{{z{{{{zz=\n{{z{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{{{zz{zz{{{{{zzzz{{=\n{zzz{zzzz{zzz{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{{{{{zzzzz{zzz{{zzzz{{{{{zzz{=\n{{{zzzz{{{zzzz{{{zzzzz{{zzz{{zzz{zzz{{{{zzzz{{{{zz{{{{{{{zzz{{{{zzzz{zzz{=\n{zzzz{{{zzzz{{{zzzzzzzz{zzz{{zzzz{{{{{{zzz{z{{{{zz{{{{{{{zz{zzzz{{{zzzz{{=\n{zzzz{{{{zz{zzzz{zzzz{{zzz{{zzzzz{{{{{{{{zz{{{{zzz{{zzz{z{zzzz{{{{zzzz{zz=\nz{z{{{{{{{{z{zzz{{{{zzzz{zzz{{zzzz{{{zzzz{{{zzzzz{{zzz{{zzz{zzz{{{{{zzzz{=\n{{zzz{zzzz{zzz{{{{zzzz{{{{zzzz{{{{{{zzz{z{{zzz{{zzz{zzz{{zzzz{{{{{{zz{zz{=\nzzz{{zzzzzz{zzz{{zzzz{{{{{{zzzz{zzz{{zzzzz{zzz{{zzzz{zzz{{{{{zzz{{zz{{zzz=\nz{{{zz{{{{zzzz{{{{zzz{{zzz{{{{zzz{z{{zzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{=\n{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{zzzz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{zz{{zz{z{zzz{{zzz{{{zzz{=\n{z{zzz{{{{{zzz{{z{zzz{{{zz{zz{zzz{{{{zzz{{zz{{zz{{{zzz{{{zzz{{{{{zz{zz{{{=\n{zzz{{zz{zz{zz{{zzzz{{zzz{{z{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{zz{{z{{z{{{z{{zz{z{z{{z{{zz{zz{{zz{z{{{{zz{zz{{zz{z{{{{zz{zzz{zz{{zz{zz{=\n{z{{{z{{z{{z{{z{{{z{{{{{zz{zz{{zz{zz{{z{{zz{zz{{z{{{z{{{z{{zz{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{{zz{{{{z{{{z{{z{{{{{{{z=\n{{{z{{z{{{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{zz{{{{zzzzz{{{{{z{{{z{{z{{{z{{z{{z=\n{{{z{{z{{{zzzzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{=\n{z{{z{{{{{zz{{{z{{{z{{z{{{{{{{z{{{z{{z{{{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{{zz=\n{{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{{{{zz{{z{{{z{{z{{{{{{{z{{{z{{z{{{{=\n{{{z{{{z{{{z{{z{{{z{{z{{{z{{{{zz{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{{z{zz{zz{{z{{{{z{{=\nz{{zz{zz{{z{{{{{{{zz{zz{{z{{{{{{{z{{{z{{{z{{zz{zz{{zz{zz{{z{{z{{zz{{{z{{{=\n{zz{zz{{zz{zz{{z{{z{{{z{{z{{{zz{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{zzzz{{{zz{zzzzz{{{zzz{{{{zzz{{zzz{{{{{{{zzz{{zzz{{{{{zzz{zzz{zz=\nz{{zzz{{{{zz{zz{zzz{{{{zzzz{{{{{z{zz{{{{zzz{{zzzzzz{zzz{{zz{{zzzz{zzz{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=\n=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zzzzzzz=\n{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{{{{{{{=\n{{{{{zz{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{z{{{{{z{{{z{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{=\nz{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{z{{{{{=\nz{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{z{zz{{{{zzz{{z{zzz{{zzz{{{{{zz{{{zzz{{{{{{zzz{{zz{zz=\n{{{{zzz{{zzzz{z{zz{{{{zzz{{z{zzz{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{{{{zzzz{=\n{{zzz{{{z{{z{{{zzz{{{{zzzz{{{{zzzz{z{zz{{{{zzz{{{{{{z{zz{{{{zzz{{{z{{{zzz=\n{{zz{zz{{{z{zz{{z{zzz{{zzz{{{{zzz{zzzzzz{{{zzzz{{{{zzz{zzzzz{{{zzz{{zzz{z=\nzz{zzz{{{zzz{zzz{zzz{z{zz{{{{zzz{{z{zzz{{zzz{{{{{{{zzz{{{zzz{{{{zzzz{zzzz=\nzz{{{zzz{{zz{zz{{{{zzz{{{{{{zzz{{z{zzz{{zzz{{{{{{z{zz{{{zzz{zzzz{{zzz{{{{=\nzzzz{{{{zz{zz{zz{{{{{{{zzz{{zz{zz{{{{zzz{{{{{{z{zz{zz{zz{{{{zzz{{{{{zz{zz=\n{{{{zzz{{z{zzz{{{{{zzz{{{zzz{{{{zzzz{zzzzzz{{{zzz{{zz{zz{{{{{{{{{{{{{zz{{=\nz{{{{zzz{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||=\n~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{zz{{z{{{z{{zz{z{z{{{=\nz{{{{{z{{z{{z{{{{{zz{{z{{zz{zz{{zz{zz{{z{{{zz{zz{{z{{{z{{zz{z{{{{z{{{z{{z=\n{{z{{{z{{z{{{z{{{z{{{{{zz{{z{{zz{{z{{z{{z{{z{{{z{{zz{{z{{{{{z{{{zz{zz{{z{=\n{{z{{{{{zz{zz{{zz{zz{{z{{zz{zz{{zz{zz{{zz{zz{{zz{z{zz{{z{{z{{z{{z{{{z{{zz=\n{{z{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{{z{{zz{zz{{z{{{z{{zz{z{z{{{=\nz{{{{{z{{z{{z{{{z{{zz{{z{{z{{{z{{zz{zz{{zz{zz{{z{{z{{{{{zz{{z{{zz{z{z{{{z=\n{{{{{z{{z{{z{{z{{z{{{z{{{z{{zz{{z{{{{{z{{zz{zz{{{{{zz{zz{{zz{zz{{z{{{z{{{=\n{{z{{z{{zz{zz{{z{{{z{{{{{zz{zz{{z{{{z{{zz{z{{{{z{{z{{z{{{z{{zz{{z{{z{{{z{=\n{zz{zz{{zz{zz{{{{{{{{{{{{{z{z{{{{zz{zz{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{z{{{z{{zzzzz{{z{{{{zzzzz{{{{{z{{zz{{{{{{{{{{zz{{z{{{z{{z{{{z{{z{{=\n{z{{{z{{zzzzz{{z{{{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{z{{{{{{{{{zz{{z{{z{=\n{zzzzz{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{=\n{z{{z{{{{{{{zz{{zz{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{z{{=\n{z{{{z{{z{{{z{{zzzzz{{z{{{{zzzzz{{{{{zz{{{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{=\n{{z{{zz{{{{{{{{{{zz{{z{{{{zzzzz{{{{{z{{z{{zz{{{{z{{{zzzzz{{z{{{z{{{{{z{{z=\n{{{z{{{{{z{{{z{{z{{{z{{zzzzz{{{{{z{{z{{z{{{z{{zzzzz{{{{{z{{{z{{zzzzz{{z{{=\n{{{{{zz{{{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{z{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{{{{z{{{{z{{{{{{{{{z{{{z=\nz{{{{{{{zz{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{{z{z{{{z{{z{{{{{{{z=\n{{z{{z{{{{{{z{{{{{{{zz{z{{z{{z{{z{{{{{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{=\n{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{zz{z{{{zz{{{z{{{z{{z{{{{{{{{{{z{=\nz{{{z{{z{{{{{{{z{{z{{z{{{{{{{z{{z{{z{{{z{{{z{{z{{{{{{z{{{{z{{{{{{{{{{zz{{=\n{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{zz{{{{{{{zz{z{{z{{{{z{{{{{{{{{z{{z{{=\n{zz{{{z{{{z{{{{{{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{{{{{{{z{{z{{z{{=\n{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{{{{{{zz{{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{=\n{z{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{=\nz{{z{{{{{{z{{{{z{{{{{{{{{z{{{{zz{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{=\n{{{z{{{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{{{{z{{{{{{z{{{z{{z{{z{{z{{{{{{z{{{=\nz{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{z{{=\n{z{{{{zz{{z{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{{{{{zzz{zzz{{{z{{{=\nz{{z{{{{{{z{{{{z{{{{{{{{{{{zz{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{zz{{{=\n{{z{{{z{{z{{{{z{{{{{{{{{z{{z{{{{zz{{z{{{z{{{{{{z{{{z{{{{{z{{z{{{z{{{{{z{{=\n{z{{z{{{z{{z{{{{{{{{{z{{z{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{{{{{{{zz{{z=\n{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{zz{{{z{z{{{{zz{{{z{{{{z{{z{{z{{{{{zz{{z=\n{{z{{{z{{zz{zz{{z{{{z{{{z{{zz{{{z{z{{{{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{{{{=\nzz{{{z{zz{{z{{z{{z{{zz{{{z{zz{zz{{{{{z{{{z{{{z{{zz{{{z{{{{z{{{z{{zz{zz{{z=\n{{zz{zz{{zz{zz{{z{{{z{{z{{{{zz{{z{{z{{z{{z{{{z{{zz{{{z{{{{{{z{{{{z{{zz{{{=\nz{{{z{{{z{{{{{{{{{z{{{z{{{{z{{{z{{zz{{{z{z{{{{zz{{{z{{{{z{{z{{zz{{{z{zz{{=\n{z{z{{{z{{zz{zz{{z{{{z{{z{{z{{{{{zz{{z{{z{{{{zz{{{z{{{{z{{z{{z{{z{{z{{{zz=\n{{{z{zz{zz{{{{{z{{z{{{z{{{{{zz{zz{{z{{{z{{zz{{{z{{{{z{{z{{z{{{z{{zz{{{z{{=\n{{zz{zz{{zz{{{z{z{{{{{{{z{{z{{zz{{{z{zz{{{z{z{{{z{{zz{zz{{z{{{z{{z{{{{{{{=\n{{{{z{{{{{zz{zz{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{zzz{{zzzz{zzz=\n{{{{zzzz{{{{zzz{zzz{{{{{{{zzz{zzzz{zzz{{zzz{{{{zzzzz{zzz{{zzzz{zzz{{{{{{{=\n{z{{{zzz{{zzzz{{{{z{{{z{{{{{{{{zzzz{{{zzz{zzzzzzz{{zzzz{{{zzz{z{{{{{zzzzz=\n{zzz{{zzzz{{{{zzz{zzz{{zzz{{zzz{{zzz{{{z{zz{{zzz{zzzzzz{{{{zzz{z{zzz{{{{z=\nzzzz{{zzzz{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{{{{{{z{{{z{{{zzz{zzz{{zzzz{zzz=\n{{{{zzzz{{{{{zzz{{{{zzzz{{{zzzz{{{zzzzz{{zzz{{zzz{zzz{zzz{{{{{{{zzz{zzzz{=\n{{{zzzz{{{{zzzzzz{zzz{{{{zz{{zzzz{{{zzz{z{{{zzzzzz{zzz{{{{{zzz{{zzz{zzz{{=\nzzzz{{{{zzzzzzzzz{zzz{{zzzz{{{{{z{zz{{{{zzzz{zzz{{{{{{zzz{{{{zzzz{{{zzzz{=\n{{zzzzz{{zzz{{zzz{zzz{z{{{{{{{{{{zzz{{{{{zzz{{{{zz{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{z{{{{{{{{zz{{{{{{{{{{{{{{zz{=\n{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{zzzz{{{{{{{{{{{{{{zzz{{{{{{{{{{=\n{{zz{{{{{{{{{zzz{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zzzz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{zzzz{{{{{{{{zzzzzzz{=\nzz{{{{{{{{{{{{{{{{{zz{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{z=\n{{z{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{z=\nz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{{{{zz{{{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{z{z{{{{{{{{z{{z{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{z{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{zz{{{{{{{{z{{z{{z{{z{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{{zz{zz{{{{=\n{{{zzz{zzz{zzz{zzzzz{zzzz{{zzzz{{z{zz{{{{{zzzz{z{zz{{{{zzz{{{{zzz{{{zzz{{=\n{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{zzz{{{{{z{zz{{zzz{zzz{{{{{zzz{{{zzz{{{z{=\n{{zzz{{{{zzzz{zzzzzz{zz{zz{{{{zzzz{{{{zzzz{z{zz{{{{zzz{{{{{{z{zz{zz{zz{{{=\nz{{zz{{{zzz{{{{{z{{{zzz{{{z{zz{{{{zzz{{{z{{{zzz{{{{zzzz{{{{{zz{{{{{{{zz{{=\nzzzz{{zz{zz{{zz{zzzzzz{zzz{zz{{{zz{zzz{zz{{{{{{{{zz{{{{{{zzz{{zz{zz{{{{zz=\nzz{{{{{zz{{{{{{{zz{{{zzz{{zzz{zzzzzz{zz{{{zzzz{{zzz{zz{{{zzzzz{zz{{{{{{{{=\nzz{{{{{{{{{{{z{{{{{z{zz{{{{zzz{{{{{zzzz{{zzz{{{z{{z{{{zzz{{zzz{zzz{zzzzz{=\nzz{zz{{{{zzzz{{{{zz{{{zzz{{{{{{zzz{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{zz{{z{{zz{{z{{zz{zz{{{{{z{{z{{z{{{z{{{z{{z{{z{{{zz{{z{{zz{zz{{{{=\n{z{{{zz{zz{{z{{{z{{z{{z{{z{{{z{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{z{{z{{{{{z=\nz{zz{{z{{{z{{{{{z{{z{{z{{{z{{z{{z{{{z{{zz{{z{{z{{{z{{zz{zz{{zz{z{{{{{{z{{=\n{zz{zz{{z{{{z{{{{{z{{z{{zz{zz{{z{{z{{{z{{z{{{{{z{{zz{{z{{zz{zz{{z{{{z{{z{=\n{z{{{z{{zz{{z{{{{{zz{{{{{zzz{{zz{{z{{zzz{zz{{zz{zz{zz{{zzz{zz{{zz{{z{{{zz=\nz{{{{{{zz{{{{{zz{{z{{zz{zz{{zz{{z{{{{{zz{{{{{zzz{{{z{{zz{{zz{zz{{zzz{zz{z=\nz{{zz{{zzz{zz{zz{{zz{{zzz{{{{{{zz{{{{{{{{{{{z{{{{{zz{zz{{z{{{z{{{{{z{{{zz=\n{zz{{z{{z{{zz{zz{{z{{{z{{{z{{z{{zz{zz{{zz{z{{{{{{z{{z{{z{{{{{zz{{z{{zz{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zz{{z{{{z{{{{{zz{{{{z{{=\n{z{{{z{{z{{z{{{z{{{{{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{zz{{{{zzzzz{{{{{z{{{z{{=\nz{{zzzzz{{z{{{z{{{z{{zz{{{{{{{z{{{z{{z{{{z{{{{{zz{{{{zzzzz{{z{{zzzzz{{z{{=\n{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{{z{{z{{{z{{zzz{{{{zz{{=\n{{{{{z{{{{{zz{{z{{{z{{zzzzz{{z{{zzzzz{{z{{{z{{{{{zz{{{zzz{{{{zzz{{{{zz{{z=\nz{{zz{{{{zz{{zz{{zz{{zz{z{{{{{{zzz{{{{zz{{{{{{{{zz{{z{{{z{{z{{{z{{{{{zz{{=\n{zzz{{{{zz{{zz{{{zzz{{{zz{{zz{{{{{zz{{zz{{zz{zz{{zz{{{{zzz{{{{zz{{{{{{{{{=\n{{z{{{{{z{{{z{{zzzzz{{{{{z{{{z{{{z{{z{{z{{z{{{z{{z{{{z{{{z{{z{{z{{{z{{z{{=\n{z{{{{{z{{zz{{{{{{{{{{zz{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{zz{z{{z{{{z{{{{{{zz{{{{z{{z{{z{{{z{{z{{{z{{{{{{z{{{z{{{{{z{{{z{{{z{=\n{z{{{{{{{zz{{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{zz{{{{{{z{{{z{{{z{z{=\n{{{{{{zz{{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{zz{{z{{{{{z{{{z{{{z{{z{{=\n{{{{{{{z{{z{{z{{{z{{z{z{{{{{zz{{{{{{z{{{zz{z{{z{{{z{{z{{{{{{z{{z{{{{{{z{{=\n{z{{{{{zz{{zz{{{{{{{zzz{{{zz{{zz{{zz{{{{zz{{zz{{zz{{zzzz{{{{{{{{zz{{{zz{{=\n{{{{zz{z{{z{{{z{{z{{{z{{{{{zz{{zz{{{{{{zzzzzz{{{zzz{{{zz{{zz{{zzzzz{{zz{{=\nzz{zz{{zz{{{{{{zz{{{zz{{{{{{{{{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{z{{{z{{z{{z{{=\nz{{{z{{{z{{z{{z{{{z{{z{{{z{{zz{{z{{{{{z{{{zz{{{{{{{zz{z{{z{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{{{{{zz{{{zzz{zzz{{{z{{=\nz{{{z{{{{{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{zz{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{=\nzzz{zzz{{{{{zz{{{{{z{{{z{{{z{z{{{{{{{{zz{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{=\nz{{{z{{{zzz{{{{{{z{{{z{{{z{{z{{{{{{{{{z{{z{{z{{{z{{z{{z{{{{{zz{{{{{z{{z{{=\n{z{{z{{{z{{z{{{{{{z{{z{{{{{{z{{{z{{{{{zz{{{zzz{{{{{{zzz{{zz{{zz{{zz{{{{zz=\n{{zz{{zz{{zz{zz{{{{{zzz{{{{zz{{{{{z{{{z{{z{{{z{{z{{{z{{{{{zz{{{zzz{{{{zz{=\n{{{{{{zzz{{{zz{{zz{zz{{zz{{zz{{zz{zz{{zz{{{{zzz{{{{zz{{{{{{{{{{{z{{{{{z{{=\n{z{{z{{{{{{{{{z{{{z{{{z{{z{{z{{z{{{z{{{zzz{zzz{{{z{{z{{{z{{{zzz{{{{{{z{{{=\n{zz{{{{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{{z{zz{{z{=\n{z{{{z{{{{{z{{z{{{{z{{{z{{{{z{{z{{{zz{{{z{z{{{z{{{{{z{{{z{{{z{{zz{{{z{z{{=\nz{{zz{{{z{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{z{{z{{{{{z{{zz{{{{z{{{{{{{z{{z{{=\nzz{{{z{z{{zz{{{z{zz{{{z{z{{{z{{z{{{z{{{z{{{{{{{{z{{{z{{{z{{zz{{{z{{{{z{{z=\n{{z{{{z{{z{{zz{{z{{z{{{{{z{{zz{{z{{z{{zz{{zz{{{z{z{{zz{{{z{zz{zz{{{{{zz{{=\n{{{zzz{{z{{zz{{zz{{zz{{zz{{{{zz{{zz{{zz{{zz{{zz{{zzz{{{{{{zz{{{{{zz{{z{{z=\n{{{z{{zz{zz{{{{{zz{{{{{zzz{{zzz{{z{{zz{zz{{zz{{zz{zz{{zz{{zz{{zz{zz{{zz{{=\nzzz{{{{{{zz{{z{{{{{{{{z{{{{{z{{{z{{zz{{{z{{{{z{{{zz{zz{{z{{z{{zz{zz{{{{z{=\n{{z{{{{z{{z{{{z{{{z{{{{{{{{z{{z{{z{{{{{zz{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{zzzz{zzz{{{{zzz{{{{{z{{{z{{{zzz{{zz{{zzzz{z=\nzz{zzz{{{{{zzzzz{zzz{{zzzz{{zzz{{{{zzzz{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{z=\nzz{{{{{{zzzz{{{{zz{{{{{{{zzz{{{{zzzz{zzz{{zzzz{{{zzzz{{{zzzzzzzz{zzz{{zzz=\nz{{{{{{zzzzz{zzz{{zzzz{{{{zzzzzzzzz{zzzzzz{{zz{zzz{{{{{zzz{{zzz{z{zzzz{{{=\n{zzzz{zzz{{zzzz{{{zzz{z{{{{zz{{{{{{{zz{zzzz{{zzz{{zzzzzzz{{zzzzzzz{{zzzzz=\nz{{zzzzz{{{{{{{{zz{{{{{{zzz{zzzz{zzz{{zzz{z{{{{zz{{{{{{{zz{{zzzz{{zzz{zzz=\n{zzzzz{{{zzz{zzzzz{{zzz{zzz{zzzz{{{{{{{{zz{{z{{{{{{{zzz{{{zzz{zzz{{zzzz{{=\n{{zzzz{{zzz{{zzzzzz{{zzz{{{{{z{{{z{{{zzzzzz{zzz{{zzzz{{{{zzz{zzz{{{{{{{zz=\nz{zzzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{=\n{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{z{z{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{zzz{{zzz{zzz{{zzz{{zz{zz{{{z{{{zzz{{{{{{{zzz{{zzzz{=\n{{{z{zz{{{{zzz{{{z{{{zzz{{zz{zz{{{z{zz{{z{zzz{{zzz{{{{zzz{zzzzzz{{{zzzz{{=\n{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{z{{zz{{z{{zz{z=\nz{{z{{z{{{z{{{{{zz{zz{{z{{{{{{zz{zz{{zz{zz{{z{{zz{zz{{zz{zz{{zz{zz{{zz{z{=\nzz{{z{{z{{z{{z{{{z{{zz{{z{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{zzzzz{{{zzz{{{{{{zz{{z{{{z{{z{{zzzzz{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z=\n{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{zz{{zz{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{zz=\nzzz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{zz{z{{z{{{z{{z{{z{{{{=\n{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{zz{z{{{zz{=\n{{z{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{zzz{{{z{{{z{{z{{{z{{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{z{{{z{=\n{z{{{z{{z{{{z{{z{{{{z{{{z{{{{zz{{z{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{zzz{z=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{zz{{{z{z{{{z{{zz{{z{{zz{zz{{z{{zz{{{z{{{{zz{zz{=\n{z{{{{{{z{{{z{{zz{zz{{z{{zz{zz{{zz{zz{{z{{{z{{z{{{{zz{{z{{z{{z{{z{{{z{{zz=\n{{{z{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{zzz{zzz{{z=\nzz{z{z{zz{{zzz{{zzzz{{{{{{zzz{{zzzz{{{zzz{zzz{{zzz{{zzz{{zzz{{{z{zz{{zzz{=\nzzzzzz{{{{zzz{z{zzz{{{{zzzzz{{zzzz{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0=\n\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{|=\n|~~~~~~zzzz{~~~~zz{~~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~zz{~~~~~~~~~zz{~~zzzzzz{~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~zzz{{zzz{~~zz{~~~~~~zz{~~~~~~~~~~~~~~=\n~~~zz{~~~~~~~~~~~~~~~zz{{{~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{~zz{~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~~~~~zz{~zz{{{zz{~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~zz{{~{zz=\n{~~zz{~~~~~~{{{~~~~~~~~~~~~~~~~~zz{~~~~~~~~~~~~~~~zz{~~~~~zz{~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~zz{{~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z{{~~~~=\n~~~~~{{{~zz{~zz{{~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~~~zz{{~~~{zz{~zzzzz{~~~zz{~~zzzz{~~~~zzz{~zzzzz{~~~~~=\n~zzz{~~zzzz{~~~zzzzzzz{~~~zz{zz{zz{~~~~zzzz{~~~~~~{{{~~zz{~zz{zz{zzz{~~~z=\nzzz{~~~~zzz{z{~~zzzz{~~~z{~~~zzz{z{~zz{zzzz{{{{~~~}}{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~zzz{zz{~=\n~zz{~zz{{zz{~~zzzzz{{zz{{{~~~~~zz{zz{~{zz{{~~~{zz{{zz{~~~zz{zzz{zz{~~zz{{=\nzz{~~~~~~~~~~zz{~zzz{zzz{zz{~zz{{zz{~~zz{zzz{~zz{{zz{~zz{~~zz{zzz{~zz{{zz=\n{{~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~~~zz{~~~~~zz{~zz{{{zz{~zz{~zz{~zz{~zz{{{z{~zz{~~~~~~zz{{{zz{~zz{=\n~~~~~zz{~{zz{~zz{{zz{{{zz{~zz{~zz{~~~~~~~~~~zz{~zz{{zz{{zz{~{{{~zz{~zz{{{=\nzz{~zz{~zz{~zz{~zz{{{zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~zz{~~zz{~zz{~zzzzzz=\n{~zz{~~{{~zz{~~~~~~zz{~~zz{~zz{~~~~~zz{~~zz{~zz{~zz{~~zz{~zzzzzz{~~~~~~~~=\n~~zz{~zz{~zz{~zz{~~zzzzz{~zz{~~zz{~zzzzzz{~zz{~zz{~~zz{~zz{~zz{~~~~~~~}}{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz=\n{~~~~~zz{~zz{~~zz{~zz{~zz{{{{{~zz{~~~~~zz{~~~~~~zz{~~zz{~zz{~~~~~zz{~~{z{=\n~z{{~zz{~~zz{~zz{{{{{~~~~~~~~~~zz{~zz{~zz{~zz{~zz{{zz{~zz{~~zz{~zz{{{{{~z=\n{{~zz{~~zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~~~{zz{~~~zz{{~zz{~~zz{~zz{~zz{~~~~~zz{~~z{~zz{=\n~~~~~~zz{~~zz{~zz{~~~~~zz{~~~zzzz{~~zz{~~zz{~zz{~~~~~~~~~~~~~~zz{~zz{~zz{=\n~zz{~zz{~zz{~zz{~~zz{~zz{~~~~~z{~~zz{~~zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~zzz{~zzz{~~zzz=\n{zz{{~zz{~zzz{zz{~{zzzzz{~zz{z{~~~~{zz{zz{{~zz{~~~~~zz{z{~{zz{{~~zzz{zz{{=\n~zzz{zz{~~~~~~~~~~zz{~zz{~zz{~zz{~zzzzzz{~{zz{zzz{~zzz{zz{zz{~~{zz{zzz{~z=\nz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~~~~{{zzzz{{{~~zz{zz{{~~zz{~{zzzz{{~~{zzz{{~{zz{{~~~~~{zzz{{=\n~~zz{~~~~~{zz{{~~zz{~~~zzzzz{{~~{zzzz{{~~~~~~~~~~zz{~zz{~zz{~zz{~{zzz{zz{=\n~{zzzzz{~{zzzz{{zz{~~~{zzzzz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~{{{{{~~~~{{{{{{~~~zz{~~=\n{{{{{~~~~{{{{~~~{{{~~~~~~~{{{{~~~{{{~~~~~~{{{~~~zz{~~~zz{{{{~~~~{{{{{~~~~=\n~~~~~~~{{{~{{{~{{{~{{{~~{{{{{{{~~{{{zz{~~{{{{{~{{{~~~~{{{zz{~{{{~{{{~~~~~=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~zz{{~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~zzz{~~~=\n~~~~~~~~~~zz{~zzz{~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~zz{{~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~{zzzzz{{~~~~~~~~~~~~~{zzzzz{{~~~~~~~~~~~~~~~}}{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=\n=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~=\n~~~~~~~~~~~~~~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{{{{~~~=\n~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{{{{{{~~~~~~~~~~~~~~~=\n{{{{{{~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zzz{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{=\n{{{{{{zz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{zz{{zz{{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z=\nz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\nz{zzzz{z{zz{{{{zzz{{z{zzz{{{{z{{{zzz{{{z{zz{{{{zzz{{{z{{{zzz{{{{{zz{{{{{{=\n{zz{zzz{zz{{zz{{{{zzz{{zzzz{{zzzz{{zzz{zz{{zz{{{zzzz{{zzz{{zz{{zz{{{{{{{{=\nzz{{{{{{zzz{{zz{zz{{{{zzzz{{{{{z{{{{{{{{zz{zz{zz{zzz{{zz{zz{zzz{{{{zzz{{{=\n{{{{{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzzzz{{{{{{{{z{{{{{{{zzz{{z{zzz{{zzz{{{{{=\n{{zzz{{z{zz{{{{zzz{{zzz{zzz{zzzzz{zz{{{{{zz{zz{zz{{{{{zzzz{z{zz{{{{zzz{{{=\n{{{{zzz{{{z{zz{{{{zzz{{zzz{zzz{{zzz{{{{{zz{zz{zz{zzz{{{{zzz{{{{zzzz{{{zzz=\n{{{{{{{{{{zz{{z{{{{zzz{{zz{{zz{{{{{{zzzz{{{zzz{{zz{zz{{{{{{{zzz{{{{zzz{{{=\nzzzz{{{zzz{{zz{zz{{{{zzz{{{{{zzzz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{zz{zz{{z{{{z{{zz{z{{{{z{{zz{{z{{zz{=\nzz{{z{{{z{{z{{z{{z{{{{{zz{{{{{zzz{{{zzz{zzz{zz{{z{{zz{{zz{{zz{{zz{{zzz{zz=\nz{zz{zz{{zz{{zz{{zz{{{zzz{{{{{{zz{{{{{zz{{z{{zz{zz{{zz{{z{{{{{z{{{{{{zz{{=\n{{zz{zzz{zz{{zz{zzz{zz{{z{{z{{{{{{{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{zz{{{=\n{{{z{{{{{{zz{{z{{zz{z{z{{{z{{{{{z{{z{{zz{zz{{zz{zz{{z{{{z{{{z{{zz{zz{{{{{=\nz{{zz{zz{{{{{z{{{zz{zz{{z{{{z{{{{{zz{{z{{zz{zz{{zz{zz{{z{{{z{{z{{{z{{{{{z=\n{{zz{zzz{zz{{zz{{z{{zz{z{{{z{{{z{{{{{{{{{{z{z{{{{zz{zz{{z{{{z{{{{{zz{{z{{=\nzz{{z{{zz{zz{{{{{z{{{z{{z{{z{{zz{{z{{zz{{z{{zz{zz{{z{{{z{{{{{z{{{zz{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{z{{{z=\n{{zzzzz{{z{{{{{{{z{{{{{zz{{z{{{z{{zzzzz{{z{{zz{{{{{{{zz{{{zzz{{{{{zz{{zz{=\n{zz{zz{{zz{{zz{{{{{{zz{{zz{{zz{{zz{{{{{zz{{zz{{zz{{{{{zzz{{{{zz{{{{{{{{zz=\n{{z{{{z{{z{{{z{{{{{z{{{{zz{{{{{{z{{{z{{{z{{z{{{z{{{z{{zz{{{{{{{{{{{{{z{{{=\nz{{z{{zzzzz{{z{{{z{{{z{{{{{zz{{{{z{{{{{{{{{zz{{z{{{{zzzzz{{{{{zz{{{{z{{{z=\n{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{{{{zz{{z{=\n{{z{{z{{{z{{z{{{z{{zzzzz{{{{{z{{z{{{z{{{z{{{{{zz{{z{{{z{{zzzzz{{{{{{{{{{{=\nz{{{{{z{{{z{{z{{{z{{{{{z{{{{{{{{{zz{{z{{{z{{{{{zzzzz{{zz{{{{z{{{{{{{{{zz{=\n{z{{{z{{zzzzz{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{z{{{zz{z{{z{{{z{{z{{{{{{z=\n{{{zz{{{{{{zz{{zz{{{{{{{zz{{zz{{zz{zzzzzz{{zz{{{zzzzz{{zz{{zz{{zz{{zzzzz{=\n{zz{{zz{{{{{{{zz{{{zz{{{{{{zz{z{{z{{{z{{z{{{z{{{{{z{{{zz{{{{{{{z{{{z{{{z{=\n{z{{{z{{{z{{{zz{{{zzzzzzz{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{{zz{{{z{{{{{{{z=\nz{z{{z{{{{z{{{{{{{{{{zz{{{z{{{z{{z{{{z{{{z{{z{{z{{{z{{{z{{{{{z{{z{{{z{{{{=\n{z{{{z{{{z{{z{{{{{{{{{{zz{z{{z{{{z{{z{{{z{{{z{z{{{z{{{{{{{{{z{{z{{{z{{{z{=\n{{zz{z{{zz{{z{{z{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{z{{{{{z{{{{{{{zz{z{{z{{{z=\n{{{{{z{{{{{{{zz{{{z{{{{{{{zz{z{{z{{{z{{z{{{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{z{{{z{{{z{{z{{{{{{z{=\n{{{{{{z{{z{{{z{{z{{{z{{z{{{{{{z{{{{zz{{{{{zz{{{zzz{{{{{zz{{zz{{zz{zz{{{{{=\n{zz{zzz{{zz{{zz{{zz{{zz{zz{{zz{{zz{{zz{{{{{zzz{{{{zz{{{{{z{{{z{{z{{{z{{z{=\n{{z{{{{{z{{{{zz{{{{{{z{{{z{{{z{{z{{{z{{{z{{{{zz{{{{{{{{{{{{z{z{{{z{{z{{{{=\n{{{zzz{zzz{{{{{{zz{{{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{{{zz{{z{{{z{{z{{{z{{{z=\nzz{zzz{{{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{z{=\n{{z{z{{{z{{{{{{{{{z{{z{{{z{{{z{{z{{{z{{{zzz{{{z{{{{{{{{{{{{{{{z{{{{{z{{{z=\n{{z{{{z{{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{{{{{{{zz{{z{{{{{{z{{{z{{z{{{z{{z{{=\n{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{zz{{zz{{{z{{{z{{{z{{zz{{{z{z{{{{{{{z{{zz{{z{{z{{zz{{zz{{{z{z{{z{{z{{{{{=\nzz{{{{{zzz{{{zz{{zz{{zz{zzz{{z{{zzz{zz{{zz{{zz{{zz{{zz{zz{{zz{{zz{{zz{{{z=\nzz{{{{{{zz{{{{{zz{{z{{z{{{z{{zz{zz{{{{{z{{{{{{zz{{{{z{{{z{{{z{{z{{{z{{{z{=\n{z{{z{{{{{{{{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{{zz{{{{{{z{{{{{{zz{{z{{z{{{{z=\nz{{{z{{{{z{{z{{z{{{z{{zz{zz{{{{z{{{z{{{{z{{{z{{{{{z{{z{{{z{{{{{z{{{z{{{z{=\n{zz{{{z{{{{zz{{z{{z{{zz{{zz{zz{{{{z{{{{zz{{{z{{{{z{{z{{{z{{{z{{zz{{z{{{z{=\n{{{{zz{{{z{z{{{{{{{{z{{{{{zz{zz{{zz{zz{{{{{zz{{{z{zz{{z{{z{{{z{{{{{zz{{{z=\n{z{{z{{zz{{{z{zz{{z{{zz{zz{{zz{{{z{{{{z{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{zzzzz{zzz{{zzzz{zzz{{{{{zzz{{z=\nzz{z{zzzz{{{{zzzz{zzz{zzz{{{{{{zz{{{{{{{zz{zzzz{zzz{zzz{zzzz{{{{zz{{zzz{z=\nzzzzz{zzz{zzz{zzz{zzzzzzzzzz{zz{{{{{{{{zz{{{{{{zzz{zzzz{zzz{{zzz{z{{{{z{{=\n{{{{{{zz{zzz{zzz{zzzzzz{zzz{zzz{zzz{{{{{{{{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{=\n{zz{{{{{{{{z{{{{{{{zzz{zzzz{{{{zzzz{{{{{zzz{{zzz{zzz{{zzz{{{{{z{{{z{{{zzz=\n{zzz{{{zzzzzz{zzz{{{{{zzzzz{zzz{{zzzz{{{{{{zzz{z{zzzz{{{{zzz{{{{{z{{{{{zz=\nzz{{{{zzzzzz{zzz{zzz{{zzz{z{{zzzz{{{zzzz{{z{{{{{{{zzz{{{{{zzz{{{{zz{zz{{{=\n{{zzzz{{{zzz{zzzz{zzz{{{{{zzzz{{zzz{{{{zzzz{{{zzz{z{z{zz{{{{zzzz{{{{{{zz{=\n{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=\n=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{=\n{{z{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zz{zz{zzz{{{{zzz{{zzzz{{zzz{{zz{zz{zzz{=\n{{{zzz{{zz{{z{{{{{{{{{zzz{{z{zzz{{{z{zzz{{zzz{{zzz{zzz{zzz{{{zz{zz{zzz{{{=\n{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{z=\nzz{{z{zzz{{{{z{zz{{zzz{zzz{{{{{zzz{{{zzz{{{z{{{zzz{{{{zzzz{zzzzzz{zz{zz{{=\n{{zzzz{{{{zzzz{z{zz{{{{zzz{{{{zzz{{{zzz{{{{{{z{{{zzz{{{z{zz{{{{zzz{{{z{{{=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zz{zzz{=\nzz{{z{{{z{{z{{{zz{{z{{zz{zzz{zz{{zz{{z{{z{{z{{{{{{{{zz{zz{{zz{z{{{{zz{z{z=\nz{{z{{z{{{z{{{z{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{{{=\n{z{{{z{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{zz{z{{{{zz{zz{{z{{{z{{{{{z{{z{{z{{{z{=\n{z{{z{{{z{{zz{{z{{z{{{z{{zz{zz{{zz{z{{{{{{z{{{zz{zz{{z{{{z{{z{{z{{z{{{z{{=\n{{{z{{zz{{z{{zz{zz{{z{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{zzzzz{{z{{{{{{zz{{z{{{z{{{z{{{{{zz{{z{=\n{z{{{{{{{{z{{{z{{z{{{{{{{z{{{{{{{zz{{z{{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{zz{{=\n{{zz{{{{{{{zz{{z{{{z{{zzzzz{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{zzzzz{{z{{{{{=\n{{z{{{z{{z{{{z{{{{{zz{{{{zzzzz{{z{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{=\nz{{{z{{{z{{zzzzz{{zz{{{{zzzzz{{{{{z{{{{{zz{{z{{{z{{zzzzz{{z{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{{{{z=\n{{{{zz{z{{z{{{z{{{z{{{zz{z{{z{{z{{{{{{{{z{{{z{{z{{{{{{{z{{{{{zz{z{{{z{{z{=\n{z{{{{{{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{{z{z{{{z{{z=\n{{{{{{{z{{z{{z{{{z{{{{{{z{{{{{{{z{{{z{{{z{z{{{{{{{zz{{{z{{{{{{z{{z{{{{{{z=\n{{{{{{z{{{z{{z{{{z{{zz{{z{{{{{z{{{z{{{z{{z{{{{{{{zz{{{z{{{{{{{{{z{{{zz{z{=\n{z{{{z{{z{{{{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{z{{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{z{{{{{{{{z{=\n{{z{{z{{{{{{{z{{{{z{{{z{{{zzz{zzz{{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{{z{{{=\nz{{{zzz{{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{z{{{{{{z{{{{{{{z{{{z{{{z{=\nz{{{{{{{{zz{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{zzz{{{{{{z{{{z{{{z{{z=\n{{{{{{{{zz{{z{{{{{{{{{z{{z{{{z{{z{{{z{{z{{{{{{z{{{{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{zz{{{z{z{{{zz{{z{{z=\n{{{z{{{z{{zz{{z{{z{{z{{z{{{{{zz{zz{{z{{{{{{{z{{{{zz{{z{{{{z{{{z{{{{{{{z{{=\n{z{{{z{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{{{z{{{{z{{zz{{{z{{{z{{=\n{z{{{{zz{{{z{z{{{{{{{z{{zz{{{{z{{{{{{{z{{z{{zz{{{z{z{{zz{{{z{zz{{{z{z{{{z=\n{{z{{{z{{{z{{{{{{{{z{{{z{{{z{{zz{{{z{z{{z{{zz{{{z{{{{z{{zz{{z{{z{{zz{{zz{=\n{{z{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zz=\nz{zzz{zzz{{zzzz{{{zz{{zzz{zzzz{zzz{zzz{{zzz{zzzzzzz{z{{{{{{zzz{{zzz{{{{{z=\nzz{{{{zzz{z{{{z{{{z{{{{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zz=\nzz{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{{zzzz{zzz{{{{{{zzzz{{{{zz{{{{{{{zzz{{{=\n{zzzz{zzz{{zzzz{{{zzzz{{{zzzzzzzz{zzz{{zzzz{{{{{{zzzzz{zzz{{zzzz{{zzz{{{{=\nzzzz{{{{zzz{{zzz{z{zzzz{{{{zzzz{zzz{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=\n=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{zz{{{{{{{=\n{zz{{{{{{{{{{{{zz{{{{{{{zz{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{zz{{{{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{z{{z{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{z{{{{{{{{{z{{{{{{{{=\n{{{{{z{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{z{{zz{zz{{{{{zzzz{z{zz{{{{zzz{{{{{{{zzzz{zz{{{zzz{zz{zz{{{z{{{zzz{{zzz=\n{zzz{{{{{zzz{{zzzz{{{zzz{zzzzz{zz{zz{{{{{{{{{{zzz{{{{{{{zzzz{{{zzz{{zz{zz=\n{{zzzz{{zzz{{zz{zz{{zzzz{{{{{zzz{{zzzz{{{zz{zz{{{{zzz{{zz{zz{{{{{{{{{{{zz=\nzz{{zzz{{zzz{zzzzzzz{{{zz{zz{{{{zzz{{z{zzzzzzz{{zzz{{{{{{zzzz{{{zzz{{zz{z=\nz{{{{{{z{zz{{{{zzz{{{{{{{zzz{{z{zz{{{{zzz{{zzz{zzz{zzzzz{zz{{{{{{z{zz{{zz=\nz{zzz{{{{{zzz{{{zzz{{{z{{{zzz{{{{zzzz{zzzzzz{zz{zz{{{{zzzz{{{{{{zzz{{{{{{=\nzz{{{{{{{zz{zzzz{zzzzzz{{{zzz{zzz{zzz{zzzzz{zz{{{zzzz{{zz{zzzzzzz{zz{{{{{=\n{{{zz{{{{{z{{{zzz{{{z{zz{{{{zzz{{{z{{{{{{{{z{zz{{z{{zz{{{zzz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{zz{zz{{{{{z{{{zz{zz{{z{{{z{{{{{zz{{=\nz{{z{{z{{z{{zz{zz{{z{{zz{{z{{z{{{z{{{{{zz{zz{{z{{{{{{z{{{z{{z{{zz{zz{{{{{=\n{{{zz{{z{{{{{zz{{z{{zz{zz{{zz{zz{{z{{{z{{{z{{zz{zz{{z{{{{{{zz{zz{{z{{{{{{=\nzz{zz{{zz{zz{{zz{zz{{{{{{{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{zz{zz{{zz{{z{{zz{z=\n{z{{{z{{z{{{{{zz{{z{{zz{{z{{zz{zz{{{{{zz{zz{{z{{{z{{{{{z{{z{{zz{zz{{zz{zz=\n{{z{{{z{{{z{{zz{zz{{{{{zz{zz{{z{{{z{{{{{z{{z{{z{{{z{{z{{z{{{z{{zz{{z{{z{{=\n{z{{zz{zz{{zz{z{{{{{{zz{{z{{{{{zz{{{{{zzz{{{zz{{{z{{zz{{z{{zz{zz{{z{{z{{z=\nzz{zz{zz{{zz{{zz{zz{zz{{{zzz{{{{{{zz{{{{{z{{zz{{z{{zz{zz{{z{{{z{{z{{{{{{{=\n{z{{z{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z=\n{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{zz{{{{z{{{z{{z{{{{{zz{{z{{{z{{{{{z{{{=\nz{{z{{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{zz{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{zzzzz=\n{{z{{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{z{{{zzzzz{{{z=\nzz{{{z{{{{{{z{{{z{{{{{zz{{z{{{{z{{{zz{{{{{{{z{{{{{{{{{zz{{z{{{z{{{{{z{{{z=\n{{zzzzz{{{{{zz{{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{{{{zz{=\n{{{zzzzz{{z{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{zz{{{{{zz{{{zzz{{{{=\n{zz{{{z{{zz{zz{{zz{zzz{zz{z{{zz{{zz{{{{{zz{{zz{{{{zz{{{{{zzz{{{{zz{{{{{z{=\n{{{{zz{{z{{{z{{zzzzz{{z{{{{{{{{z{{z{{zzz{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{zz{{{=\nz{{{z{{z{{{zz{z{{{z{z{{{{{{z{{{z{{z{{{{{{{z{z{{{z{{z{{{z{{{{{{{{{zz{z{{{{=\n{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z=\n{{z{{{z{{zzzzzzz{{z{{{z{{{{{{{{z{{{{z{{{{{{z{{{z{{{zz{z{{z{{{{z{{{{zz{{{{=\n{{z{{{{{{{zz{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{{zz{{{z{{{z{{z{{{z{{{z{{z{{z{{=\n{z{{{z{{{{{z{{{z{{{z{z{{{{{{{zz{{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z=\nz{{z{{{{{{zz{z{{{{{zz{{zz{{{{{{{{zz{z{{{zz{zzzzzz{{zz{zzz{{{zz{{zz{{zzzzz=\n{{zz{{{{zz{{{{{{{zz{{{zz{{{{{z{{{zz{z{{z{{{z{{z{{{{{{z{{{{{{{{z{{z{{z{z{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{{z{{{z{{=\n{z{{z{{{{{{{{{z{{{z{{z{{{{zz{{z{{{z{{z{{z{{{z{{{z{z{{{{{{z{{{z{{z{{{{{{{z=\n{z{{{z{{z{{{z{{{{{{{{z{{{z{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{z{{{z{{z{{=\n{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{z{{{z{{{{{{{zzz{{{z{{{{{{=\nz{{{z{{z{{{z{{z{{{{z{{{{{zz{{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{=\n{{zz{{z{{{z{{z{{{z{{{zzz{zzz{{{z{{{z{{{{{z{{{z{{{z{z{{{{{{{{zz{{z{{{{{{z{=\n{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{zzz{{{{{{z{{{z{{{{{zz{{{zzz{{{{{{zz{z{{{zz{=\nzz{{{{{{zzz{zz{{{zz{{zz{zz{{zz{{zz{{{{zz{z{{{zzz{{{{zz{{{{{z{{z{{{z{{z{{{=\nz{{z{{{{{{z{{{{{{{{z{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{z{{{z{{{z{{{{{z{{{z{{{z{{zz{{{z{{{{zz{zz{{z{{z{{z{{zz{zz{{z{{zz=\n{{z{{{{z{{{{{{{zz{zz{{z{{{{{{{{z{{{{z{{z{{{z{{z{{{{{zz{{z{{{{{zz{{{z{zz{z=\nz{{z{{{z{{z{{{zz{{{z{z{{{z{{z{{{{{{zz{zz{{z{{{{{{z{{{z{{zz{zz{{z{{{z{{{{{=\n{{{{{{z{{{zz{{{z{z{{{z{{z{{{{{{zz{zz{{zz{{z{{z{{{{z{{{z{{z{{{{{zz{{{z{zz{=\n{z{{z{{{z{{{{{z{{zz{{zz{{{z{{{{z{{z{{z{{{z{{zz{zz{{{{z{{{z{{{{z{{{z{{{{{z=\n{{zz{{{{z{{{{{{{z{{z{{zz{{{z{z{{zz{{{z{zz{{{z{z{{{z{{z{{{z{{{z{{{{{{{{zz{=\n{z{{{{{zz{{{{{zzz{{{{{zz{{{{zz{zzz{{z{{zzz{zz{{{zz{{zz{zz{{zz{{zz{{{{zzz{=\n{zzz{{{{{{zz{{{{{z{{zz{{z{{z{{zz{{zz{{{z{z{{z{{{{{z{{z{{z{{zz{{zz{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{zzz{zzz{{{{{zzzzz{zzz{{zzzz{{=\n{{{{zzz{zzzz{zzz{{{z{zz{{zzz{{zzz{z{{zz{{{{{{{{zzz{{zzzz{{{{{{z{{{zzzzzz{=\nzzz{z{{{{{{zzz{z{{{{{zzzz{{{zzz{{zzz{zzz{{zz{{zzzz{zzz{zzz{{zz{{{{{zzz{{z=\nzzz{{{zzz{zzz{{zzz{{zzz{zzz{{{{{{{{{{{zz{{zzzz{zzz{zzz{{zz{{{{z{zz{{{{zzz=\n{zzzz{{{{zz{zzz{{{{{{{zzzz{{{zzz{zzzz{zzz{{{{zzzz{{{{zzzz{{{{{zzz{{zzz{zz=\nz{{zzz{{{{{z{{{z{{{zzz{zzz{{{{zzzz{{{{zz{{{{{{{zzz{{{{zzzz{zzz{{zzzz{{{zz=\nzz{{{zzzzzzzz{zzz{{zzzz{{{{{{zzz{z{{{{zz{{{{{{{zz{{{{zz{{{zzzz{zzzz{{{{z{=\n{z{{{{zzzzz{{{zzz{zzzzzz{{{{zz{zz{{{{{{{{zz{{{{zzz{{zzz{z{zzzz{{{{zzzz{zz=\nz{z{{{{zzzzzzzzz{{zz{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zz{{zz{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zzzz{z{zz{{zz{{{zzz{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{{{zz{zz{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{=\n{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{z{{z{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{zzzzz{zzzzzz{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=\n=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||=\n~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~~~~~~zzzz{~~~~zz{~~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~zzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~zz{~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~~~~~zz{~~zzzzzz{~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~zzz{{zzz{~~zz{~=\n~~~~~zz{~~~~~~~~~~~~~~~~~zz{~~~~~~~~~~~~~~~zz{{{~~~zz{~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~{zz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~~~~~zz=\n{~zz{{{zz{~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~~~~zz{{~{zz{~~zz{~~~~~~{{{~~~~~~~~~~~~~~~~~zz{~~~~~~~~~~~~~~=\n~zz{~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{{~{{{~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~z{{~~~~~~~~~{{{~zz{~zz{{~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{{~~~{zz{~zzzzz{~~~zz{~~z=\nzzz{~~~~zzz{~zzzzz{~~~~~~zzz{~~zzzz{~~~zzzzzzz{~~~zz{zz{zz{~~~~zzzz{~~~~~=\n~{{{~~zz{~zz{zz{zzz{~~~zzzz{~~~~zzz{z{~~zzzz{~~~z{~~~zzz{z{~zz{zzzz{{{{~~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{|=\n|~~~zz{~~~~~zz{~zzz{zz{~~zz{~zz{{zz{~~zzzzz{{zz{{{~~~~~zz{zz{~{zz{{~~~{zz=\n{{zz{~~~zz{zzz{zz{~~zz{{zz{~~~~~~~~~~zz{~zzz{zzz{zz{~zz{{zz{~~zz{zzz{~zz{=\n{zz{~zz{~~zz{zzz{~zz{{zz{{~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~zz{{{zz{~zz{~zz{~zz{~zz{{{=\nz{~zz{~~~~~~zz{{{zz{~zz{~~~~~zz{~{zz{~zz{{zz{{{zz{~zz{~zz{~~~~~~~~~~zz{~z=\nz{{zz{{zz{~{{{~zz{~zz{{{zz{~zz{~zz{~zz{~zz{{{zz{~zz{~zz{~~~~~~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~zz{~~~~~z=\nz{~zz{~~zz{~zz{~zzzzzz{~zz{~~{{~zz{~~~~~~zz{~~zz{~zz{~~~~~zz{~~zz{~zz{~zz=\n{~~zz{~zzzzzz{~~~~~~~~~~zz{~zz{~zz{~zz{~~zzzzz{~zz{~~zz{~zzzzzz{~zz{~zz{~=\n~zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~~~zz{~~~~~zz{~zz{~~zz{~zz{~zz{{{{{~zz{~~~~~zz{~~~~~~z=\nz{~~zz{~zz{~~~~~zz{~~{z{~z{{~zz{~~zz{~zz{{{{{~~~~~~~~~~zz{~zz{~zz{~zz{~zz=\n{{zz{~zz{~~zz{~zz{{{{{~z{{~zz{~~zz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~{zz{~~~zz{{~zz{~~zz{=\n~zz{~zz{~~~~~zz{~~z{~zz{~~~~~~zz{~~zz{~zz{~~~~~zz{~~~zzzz{~~zz{~~zz{~zz{~=\n~~~~~~~~~~~~~zz{~zz{~zz{~zz{~zz{~zz{~zz{~~zz{~zz{~~~~~z{~~zz{~~zz{~zz{~zz=\n{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~~~~zzz{~zzz{~~zzz{zz{{~zz{~zzz{zz{~{zzzzz{~zz{z{~~~~{zz{zz{{~zz{=\n~~~~~zz{z{~{zz{{~~zzz{zz{{~zzz{zz{~~~~~~~~~~zz{~zz{~zz{~zz{~zzzzzz{~{zz{z=\nzz{~zzz{zz{zz{~~{zz{zzz{~zz{~zz{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~{{zzzz{{{~~zz{zz{{~~zz{~{zzzz{=\n{~~{zzz{{~{zz{{~~~~~{zzz{{~~zz{~~~~~{zz{{~~zz{~~~zzzzz{{~~{zzzz{{~~~~~~~~=\n~~zz{~zz{~zz{~zz{~{zzz{zz{~{zzzzz{~{zzzz{{zz{~~~{zzzzz{~zz{~zz{~~~~~~~}}{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~=\n~~~{{{{{~~~~{{{{{{~~~zz{~~{{{{{~~~~{{{{~~~{{{~~~~~~~{{{{~~~{{{~~~~~~{{{~~=\n~zz{~~~zz{{{{~~~~{{{{{~~~~~~~~~~~{{{~{{{~{{{~{{{~~{{{{{{{~~{{{zz{~~{{{{{~=\n{{{~~~~{{{zz{~{{{~{{{~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{{~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~zz{~zzz{~~~~~~~~~~~~~zz{~zzz{~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~=\n~~~~~zz{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{~~~~zz{~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zzzzz{{~~~~~~~~~~~~~{zzzzz{{~~=\n~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~{{{{~~~~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~{{{{{{~~~~~~~~~~~~~~~{{{{{{~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=\n=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{zz{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{z=\nz{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{z{{{{{{{{{{{{{{{z{{{{{z{{{z{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{=\n{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{=\nz{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{=\n{{{{{{{{{{{{{z{{{{{z{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{zzzz{{zzz{{{{zzz{{{z{{{{zzzz{z{zz{{{{zzz{{{{{{z{=\nzz{{{{zzz{{{z{{{zzz{{zz{zz{{{z{zz{{z{zzz{{zzz{{{{zzz{zzzzzz{{{zzzz{{{{zzz=\n{zzzzz{{{zzz{{zzz{zzz{zzz{{{zz{{{zzz{{{{zzz{zzz{{zzz{{zzzz{{{zz{{zz{{{zzz=\n{{{zzz{{zzzzzz{{zz{{z{{{{zzzz{{zzz{{z{zzz{{{{{zzz{{{{{zz{zz{zzz{{{{zzz{{{=\n{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{zzz{zzz{zzz{z{zz{{zz{{{zzzz{{z{zz{{{{{=\n{{zzzz{{{zzz{{{{zzz{{{{zzz{{{{zz{zz{{{{zzz{{zzzz{{{zz{zz{zz{{{{zzzz{{z{zz=\n{{zz{{{zzzz{{{zzz{{{{{{{zzz{{zz{zz{{zzz{zzz{{{zz{zz{{{{zzz{{zz{zz{{{{{{{{=\n{{{zzzz{{zzz{{zzz{zzzzzzz{{{zz{zz{{{{zzz{{z{zzzzzzz{{{{{{zzzz{z{zz{{{{zzz=\n{{zzzz{{{zz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{{z{=\n{z{{{{{z{{{zz{zz{{z{{{z{{{{{zz{zz{{zz{zz{{z{{zz{zz{{zz{zz{{zz{zz{{zz{z{zz=\n{{z{{z{{z{{z{{{z{{zz{{z{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{z{{z{{z{{{{{z{=\n{{z{{z{{{z{{z{{{{{{z{{{z{{z{{z{{z{{{z{{z{{{z{{{z{{z{{{{{z{{{zz{zz{{zz{z{{=\n{{zz{{z{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{{{{z{{{z{{=\n{z{{zz{zz{{z{{zz{{z{{zz{zz{{{{{zz{{z{{zz{zz{{z{{{z{{z{{z{{{{{zz{zz{{zz{zz=\n{{z{{{{{{z{{zz{zz{{zz{{z{{z{{z{{{z{{zz{{z{{z{{{z{{{{{zz{{z{{zz{zz{{z{{{z{=\n{{{{zz{zz{{zz{zz{{zz{zz{{{{{{{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{zz{zz{{zz{{z{{=\nzz{z{z{{{{{{{{{z{{{zz{zz{{zz{{z{{z{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{z{{{zzzzz{{zzzzz{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{z{{=\nz{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{zz{{zz{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{zzzz=\nz{{z{{{z{{{z{{{{{z{{zz{{{{{{{z{{{z{{zzzzz{{z{{{{{{z{{{z{{zz{{{{zzzzz{{z{{=\n{z{{{z{{z{{{{{z{{{z{{{z{{z{{{{{{{{{{zz{{{{{z{{{z{{{z{{zzzzz{{zz{{{{zz{{{{=\n{{{zz{{z{{{z{{zzzzz{{{{{z{{{z{{{z{{z{{{z{{z{{z{{{{{{z{{{z{{{{{z{{{z{{z{{{=\nz{{zzzzz{{zz{{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{z{{{z{{z{{{{{{z{{z{{{z{{z{{{z{=\n{zzzzz{{{{{{{{zz{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{z{{{zzzz=\nz{{{zzz{{{z{{{{{{z{{{z{{{{{zz{{z{{{{z{{{{{{{{{z{{{z{{{z{{{{{zz{{z{{{{{{z{=\n{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{{{{z{{{{{{z{{{{{z{{{=\nz{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{zz{z{{{zz{{{=\nz{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{z{{{zz{{{{{{{z{z{{{z{{{{{=\n{z{{{{{{z{{{z{{{zz{{{z{{{{{{z{{{z{{{z{{z{{{{{z{{{z{{{z{{z{{{{{{{{zz{z{{{{=\n{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{{z{{z{{z{{{z{{{z{{=\nz{{z{{{{{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{{{{{zz{{{{{{z{{{z{{z{{{z{{z{{{{{{z{=\n{z{{{z{{z{{{{{{z{{z{{{z{{z{{{z{{z{{{{{{{{{{zz{z{{z{{{z{{{z{z{{{{{{z{{{z{{=\nz{{{z{{z{{{z{{zzzzzzz{{z{{{z{{{{{{{{z{{{{z{{{{{{z{{{z{{{zz{z{{z{{{{z{{{{{=\n{{{{z{{{z{{{z{{{zz{z{{z{{{{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{z{{{z{{{{{{z{{{{{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z=\n{{{z{{z{{{z{{z{{{{z{{{z{{{{zz{{z{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz=\n{{{{{{z{{{{zz{{{{{{z{z{{{z{{{{{{z{{{{{{z{{{z{{{{zz{{z{{{{{{z{{{z{{{z{{z{{=\n{{{z{{{z{{{z{{z{{{{{{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{{z{{{z{{{zzz=\n{{{z{{{{{{{{{{zzz{zzz{{{z{{{z{{z{{z{{{{{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{{{{{=\n{zz{{{{{z{{{z{{z{{{z{{z{{{{{{z{{z{{{z{{z{{{{{{z{{z{{{z{{z{{{z{{z{{{{{{{{{=\nz{{{z{{z{{{z{{{z{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{z{{{z{{{{{{{zzz{{{z=\n{{{{{{z{{{z{{z{{{z{{z{{{{z{{{{{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{zz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{zz{{{z{zz{{{z{z{{{{{z{{{z{{{z{{zz{{{z=\n{{{{z{{{z{{zz{zz{{z{{zz{zz{{zz{zz{{z{{{z{{z{{{{zz{{z{{z{{z{{z{{{z{{zz{{{z=\n{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{{{{z{{z{{z{{{{{{{z{{{{zz{{{z{z{{{{{{zz{zz=\n{{z{{z{{zz{{{z{z{{{zz{zz{{z{{{{{z{{{zz{zz{{z{{{{{{{zz{{z{{{{{z{{{z{{{z{{z=\nz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{{{z{{{z{{{{z{{{z{{z{{zz{{{z{z{{=\n{z{{{{{zz{zz{{zz{zz{{zz{{{z{z{{z{{{{{z{{{z{{zz{zz{{z{{{{{{z{{z{{{z{{zz{{{=\nz{z{{zz{zz{{zz{zz{{zz{{{z{{{{zz{{z{{z{{{z{{{{z{{{{{{{z{{{z{{zz{zz{{z{{{z{=\n{{{{{{{{{{z{{{zz{{{z{z{{{z{{z{{{{{{zz{zz{{zz{{z{{z{{{{z{{{z{{{{{z{{{z{{{z=\n{{zz{{z{{z{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzzz{{zzzz{{=\n{zzzz{zzz{{{{{zzzzz{zzz{{zzzz{{{{zzz{zzz{{zzz{{zzz{{zzz{{{z{zz{{zzz{zzzzz=\nz{{{{zzz{z{zzz{{{{zzzzz{{zzzz{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{{{zzz{zzz{{=\n{{{{{zz{{{{{zzzz{{{zz{{{{{zz{zz{zzz{{{{zzzz{zzzz{{zz{zzzzz{{{zzzz{{zzz{{z=\nzz{{{{{{{zzz{z{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zzzz{{{{{{=\n{z{{{z{{{zzz{zzzzzz{{zzzz{zzz{zzz{{{{{zzz{z{{zzz{{{{zzzz{{zzz{{{{{zzz{zzz=\n{{zzz{{{{zz{{{zzzzzz{zzz{{zzzz{zzz{{zz{zz{{zzz{z{{zzzz{{{{{{zzz{zzzz{zzz{=\n{zz{{{{{{zzz{zzz{{zzz{{zzz{zzz{{{{{{{{{{{zz{{zzzz{zzz{zzz{{zz{{{{z{zz{{{{=\nzzz{zzzz{{{{zz{z{{{{{{zzzzz{zzz{{zzz{z{{zz{{{zzz{zzz{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{zz{{zz{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{zzz{{zzz{{{{{zzz{{zzzzzzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{z{z{z{z{{{{{{{{{z{{{{{{{{{{{{{{=\n{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz{{{{{zz{{{{z{{{=\n{zz{{{{{zz{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{zzz{{z{zzz{{=\nzzzz{{{zzz{{{{{zzzz{{zzz{{zzz{zzzzzzz{{{zz{zz{zzz{{{{zzz{{{{zzz{{{zzz{{{z=\nzz{{{{zzzz{{{zzz{{{{{{{zzzz{{{zzz{{zz{zz{{{{{{z{zz{{{{zzz{{{{{z{zzz{{zzz{=\n{{{zzz{{{{zzzz{{{{{{zzz{{zzzzzzzzzz{{{zzzz{zz{{{zzz{{zz{zz{{zzzz{z{zzz{zz=\nz{{{{z{zz{{zzz{zzz{{{z{zzz{{zzz{{zz{zz{{z{zzz{{zzz{{{{zzz{{{zzz{{zz{zz{{z=\nzzzzz{zz{zz{{{{zzzz{{{{zz{zzzz{{{{{zzz{{{{zzz{{{{{{zzz{{{{{zz{zz{zzz{{zz{=\n{zz{{z{zzzzzz{zz{zz{{{{zzz{{z{zzzzzzz{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{=\nz{{{z{{{{{zz{zz{zzz{{{{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{{{{zzzz{z=\n{zz{{{{zzz{{zz{zz{{{{{z{zzz{{zzz{{{{zzz{{{{zzzz{{{{zz{zzzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{z{{zz{{z{{zz{z{zz{z{{{z{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{z=\nz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{{{{zz{{z{{zz{{z{{zz{zz{=\n{{{{zz{zz{{z{{{z{{{{{zz{z{z{{{z{{zz{{z{{zz{{z{{{{{z{{{z{{z{{{z{{{z{{zz{{z=\n{{z{{z{{{z{{zz{zz{{z{{{z{{z{{{z{{{{{zz{zz{{z{{{z{{{{{zz{z{z{{{z{{zz{zz{{z=\nz{z{z{{{z{{z{{z{{z{{{z{{zz{zz{{z{{{z{{zz{zz{{zz{z{{{{{{z{{z{{{{{{zz{{z{{z=\n{{z{{{{{zz{{z{{{{{zz{zzz{zz{{z{{{z{{z{{z{{{z{{zz{zz{{zz{{z{{zz{z{z{{{{{{{=\nz{zz{zz{z{{{{z{{{{z{zz{zz{z{{{{zzzzz{{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{z=\nz{{z{{zz{z{{{z{{{z{{{{{{{{z{{{zz{zz{{z{{{z{{zz{zz{{{{{zz{z{z{{{z{{zz{{z{{=\nzz{{z{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{{z{{{{z{{{z{{zzzzz=\n{{{{{z{{{zzzzz{{{zzz{{{z{{{{{{z{{{z{{{z{{zzzzz{{zz{{{{zz{{{{{{{zz{{z{{{z{=\n{zzzzz{{{{{z{{{{{{{{{zz{{z{{{z{{{{{z{{{z{{zzzzz{{{{{z{{{{zzzzz{{{{{zz{{z{=\n{{z{{{{{zzzzz{{z{{{z{{{z{{z{{{{{{z{{zzzzz{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{=\n{z{{{z{{{{{z{{{{zzzzz{{z{{{z{{z{{{{zzzzz{{zz{{{{zzzzz{{z{{{z{{z{{{z{{z{{{=\nz{{z{{{z{{{{{z{{z{{{{{{{{{zz{{zz{{{{{{{{{{zz{{{{{z{{{z{{{z{{z{{{z{{z{{z{{=\n{z{{z{{{z{{{{{zz{{z{{{{z{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{{{{z{{{z{{{{{{=\nz{{{z{{{z{{zzzzz{{zz{{{{zz{{{{{{{zz{{z{{{z{{zzzzz{{{{{{{{z{{{z{{{z{{zzzzz=\n{{z{{{z{{{{{z{{{{zzzzz{{{{{zz{{z{{{z{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{z{{{zz{z{{z{{{{zz{{z{{z{{{{{{{{{z{{{z{{{{{{{{z{{{{z{{{{{{z{{{z{{{z{{z=\n{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{z{{{{{{{zz{z{{z{{{z{{{{{z{{{z{{=\nz{{{{{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{{{{z{{{{{{z{{{z{{{z{{z{{{{{{z{{z{{{{{=\n{z{{{z{{z{{{z{{{z{z{{{{{{z{{{z{{{z{z{{{{{{z{{{{z{{{{{{z{{{z{{z{{{{z{{{{{{=\n{zz{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{zz{{z{{{{{z{{z{{{{{{{zz{z{{{zz{{{{{{{zz=\n{z{{{{{z{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{{zz{z{{z{{{{z{{{{{{{z{{z{z{{z{{=\n{{z{{{{z{{z{z{{z{{{{z{{{{{{{{{{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z=\n{{z{{{{{{{{{{{{z{{{z{{{z{{z{{{{{{z{{{z{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{{{{z=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{{{zzz{{{z{{{{{{{{{z{{{z{=\n{{{{{{zzz{{{z{{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{{z{{{z{{{zzz{{{z{{{{{{{{{=\nz{{{{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{=\n{{{{z{{{z{{{z{{z{{{{{{z{{z{{{{{{z{{{z{{z{{{z{{{z{z{{{{{{z{{{z{{{z{z{{{{{{=\nz{{{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{zz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{zzz{{{{=\n{{z{{z{{{{{{z{{{z{{{{zz{{{{{z{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{=\nz{{{z{{z{{{{z{{{{{{{z{{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{{{{{{{{z{{{z{{{z{{=\nz{{{{{{{{zz{{{{zz{{z{{{z{{{zzz{{{z{{{{{{{{{{{{z{{{z{{{z{{z{{{{{{z{{{z{{{{=\n{z{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{zz{{=\nz{{z{{{{{z{{{{{zz{{{z{{{{z{{{zz{{{z{z{{{z{{z{{{{{{z{{{z{{{z{{zz{{{z{z{{z{=\n{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{zz{{{z{zz{{z{{z{{{z{{{{{z{{zz{{zz{{{z{{{{z=\n{{{{zz{{{z{zz{{z{{zz{zz{{{{{zz{{{z{z{{{z{{{z{{zz{{{z{z{{zz{{{z{z{{{z{{z{{=\n{z{{{{z{{{{{{{z{{zz{{{{z{{{{{{{z{{{{zz{{{z{zz{zz{{z{{{{zz{{{z{z{{z{{zz{{{=\nz{z{{{z{{z{{{z{{z{{{z{{{z{{{{{{{{z{{z{{{{{{zz{{z{{z{{z{{{{{zz{{z{{{{{z{{{=\nz{{{z{{zz{zz{{z{{z{{{z{{zz{zz{{zz{{z{{z{{{{z{{{{{{{z{{{z{{{z{{{{z{{{{z{{{=\nz{{{z{{{{z{{{{z{{{{{z{{{z{{{z{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{z{=\n{{{{z{{{z{{{z{{zz{{{z{z{{{z{{{{{z{{{{zz{{{z{zz{{z{{zz{zz{{{{{z{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{zzz{{zzz{zzzz{{{{zzzz{{{zzzz{{{{{{zz{{zzzz{zzz{zzz=\n{{zz{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zzzz{{{{{{zzzz{{{zzz=\n{zzzz{zzz{{{{zzzz{{{{zzzz{{{{zzz{{{{zzzz{{{zzz{z{{zzz{z{{{{{zzzz{zzzzzzzz=\nzzz{{zzzz{zzz{{zzzz{zzz{zzz{{zzzzz{{zz{{{{{{{zzzz{{{{zz{{{{{{zzz{{{{zzzz{=\n{z{zz{{zzz{{{{zzzz{{zzz{{{{zzzz{zzz{zzz{{zzzzzzzz{zzz{{zzzz{{{{zzz{{zz{{{=\n{{zzz{z{zzz{{{{{{{zzz{z{{{zzz{zzz{zzz{{zz{zzzzz{{zzzzz{z{zz{{{{zzz{zzzz{{=\n{{zz{{{{zzz{{z{{zzz{{zzz{{zzz{{z{{zzz{{zzzzzzz{{{{zzz{zzz{zzz{{zzzz{{zzz{=\n{{zzz{{{{zzz{z{{zzzz{{{zzzz{{z{{{{{{zzzzz{zzz{{zzzz{zzz{zzz{{{zzz{{{{zzzz=\n{{{zzz{z{{zzz{z{{{zzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{zz{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{=\n{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{z{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\nz{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{z{zzz{{zzz{{zz{zz{{{{zzzz{{{zzz{{zz{zz{zzz{{{z{z=\nzz{zzz{{{{{zzz{{{zzz{{{z{{{zzz{{{{zzzz{zzzzzz{zz{zz{{{{zzzz{{{{{{zzz{{{zz=\nz{{{{zzzz{zzzzzz{{{zzz{{zz{zz{{{{zzz{{{{zz{zz{zz{{{{{zzzz{z{zz{{{{zzz{{{{=\n{{z{zz{{{{zzz{{{z{{{zzz{{zz{zz{{{z{zz{{z{zzz{{zzz{{{{zzz{zzzzzz{{{zzzz{{{=\n{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{zz{z{zz{{z{{zz{z=\nz{{zz{{z{{zz{zz{{zz{zzz{zz{{z{{z{{{z{{{{{z{{z{{z{{{z{{z{{z{{{z{{zz{{z{{z{=\n{{z{{zz{zz{{zz{z{{{{{{z{{z{{z{{{z{{zz{{z{{z{{{z{{zz{zz{{zz{zz{{z{{z{{{{{z=\n{{zz{zz{{{{{z{{{zz{zz{{z{{{z{{{{{zz{zz{{zz{zz{{z{{zz{zz{{zz{zz{{zz{zz{{zz=\n{z{zz{{z{{z{{z{{z{{{z{{zz{{z{{{{{z{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{zz{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{z{{{z{{{{{z=\nz{{{{zzzzz{{z{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{zz{{{{zzzzz{{z{{{{{{=\nz{{{z{{z{{{z{{z{{{z{{zz{{{{{{{z{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{z{{z{=\n{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{zz{{zz{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{=\n{zzzzz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{z{{z{{{z{{z{{{z{{z=\n{{{z{{z{{{z{{{z{{z{{{z{z{{{{{{{zz{{{z{{{{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{=\n{zz{{z{{{{{{zz{{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{zz{{{{{{z{{z{{{z{{{{=\n{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{zz{z{{{=\nzz{{{z{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{z{{{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{z{{{{{{{{zz{{z{{{{{=\n{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{zzz{{{{{{{{zz{{z{{{{{{z{{{{{{z{{{z{{z{{{=\nz{{z{{{z{{{{zz{{{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{=\n{z{{z{{{z{{z{{{z{{z{{{{z{{{z{{{{zz{{z{{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{zz=\nz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{zz{{z{{z{{{z{{zz{zz{{zz{zz{{z{{{z{{=\n{z{{z{{{{z{{{{{{{z{{z{{zz{{{z{z{{zz{{{z{zz{{{z{z{{{z{{z{{{z{{{z{{{{{{{{z{=\n{z{{zz{{{z{zz{{{z{z{{{z{{zz{zz{{z{{{z{{z{{z{{{{{z{{z{{{z{{{{{z{{{z{{{z{{z=\nz{{{z{{{{z{{{z{{zz{zz{{z{{zz{zz{{zz{zz{{z{{{z{{z{{{{zz{{z{{z{{z{{z{{{z{{z=\nz{{{z{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zzz{{{{zzz{=\nzzzz{zzz{{zzz{z{{zzz{{zzz{zzz{zzzzzz{{zz{{{{{{{zzz{{{{zzzz{zzz{{zzzz{{{zz=\nzz{{{zzzzzzzz{zzz{{zzzz{{{{{zzz{{{{zzzz{{{zzzz{{{zzzzz{{zzz{{zzz{zzz{zzz{=\n{{{{zzzzzz{zzz{{{{{zzzzz{zzz{{zzzz{{{{zzz{zzz{{zzz{{zzz{{zzz{{{z{zz{{zzz{=\nzzzzzz{{{{zzz{z{zzz{{{{zzzzz{{zzzz{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=\n=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{zzz{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zzz{{{zzz{zzz{{zzz{{{zzz{{zz{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z=\nz{{{{{{{{{{{{{{{zz{{{{{{{{{{zz{z{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nzz{{{zzz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{{{z{{{=\n{{z{{{z{{{{zz{{{{z{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{z{{{{{{{{{z{z{z{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{z{{{{{{{{{{{{{z{{{{{{zz{{{zz{{{z{{{{z{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzz{{z{zz{{{{zzz{{zz{{zz{{z{{=\n{zzzz{{{{{{zzz{{{zzz{{zzz{zzz{{{zzzz{z{zz{{{{zzz{{zzzz{{{{{z{{{z{{{{z{{{{=\nz{zz{{z{{{{{{{{zzz{{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{{zz{zz{zz{zzz{{{{zzz{=\n{{{zzzz{{{zzz{{{{{{{zzzz{{{zzz{{zz{{zz{{z{{{zzzz{{{{{z{zz{{{{zzz{{{{{{{zz=\nz{{{{zzz{{{{zzz{zz{{z{zzz{zzz{{{{{zzzz{{{zzz{{zzzzzz{zz{zz{{{{zzz{{{{zzzz=\n{{{{{{zzz{{z{zzz{{{{{zzzz{zz{{zz{{{zzz{zzzz{{zzz{{zz{zz{zzz{{zz{zzzzzz{{z=\nzz{{{{zzzz{{{{{z{zz{{zzz{zzz{{{{{zzz{{zz{zz{{{{zzzz{{{{zz{{zz{{{zzz{{{zzz=\n{{z{zzz{{zzz{{{{{{{{{z{{{z{{{{zzz{{z{zzz{z{zz{{{{zzz{{{{zzz{{{zzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{z{{z{{zz{zz{{zz{zz{{z{{{z{{z{{zz{{z{{{{{z{{z{{zz{{z{{z{{{z{{{{{z{{{zz{zz=\n{{zz{{z{{z{{{{{{{z{{{z{{{{z{{{{z{{z{{z{{{{{{{z{{z{{{{{z{{{z{{z{{z{{{z{{z{=\n{{z{{{z{{{{{z{{zz{zzz{zz{{zz{{z{{zz{z{{{z{{{z{{{{{zz{{z{{zz{zz{{z{{{z{{z{=\n{zz{{z{{{{{zz{zz{{z{{{z{{{{{z{{{z{{zz{{z{{z{{z{{z{{z{{z{{{z{{{{{zz{{z{{z{=\n{{z{{z{{{z{{zz{zz{{z{{{z{{zz{{z{{{{{zz{zz{{zz{z{{{{zz{{z{{z{{{z{{z{{z{{z{=\n{{zz{zz{{zz{zzz{zz{{z{z{{{z{{z{{{z{{zz{{z{{{{{zz{zz{{z{{{z{{{{{z{{{z{{zz{=\nzz{{zz{{z{{{{{z{{{z{{z{{z{{z{{{z{{zz{z{z{{z{{{{{{{{{z{{{z{{{z{{{z{{zz{z{z=\nz{zz{{zz{zz{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{zz{{{{z{{{z{{z{{{z{{z{{{z{{z{{z{{{z{{{{{z=\nz{{{{{{{zz{{z{{{z{{{{{z{{{z{{{z{{{{{zz{{z{{{{{{{zz{zz{{{{z{{{{z{{zz{z{{{{=\n{{{zz{{{{{{{z{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{z{{z{{{z{{{z{{{{{zz{{z{{{z{{zz=\nzzz{{{{{z{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{{{{z{{{z{{zzzzz{{{{{zzzzz{{{{{zz{{=\nzz{{{{z{{z{{z{{{z{{{{{z{{{z{{zzzzz{{z{{{z{{z{{{z{{zzzzz{{z{{{z{{{{{z{{{z{=\n{z{{{{{{{z{{{{{{z{{{z{{zz{{{{z{{{z{{{z{{z{{{z{{{z{{z{{{{zz{{zzzzz{{z{{{z{=\n{{{{z{{{z{{z{{{z{{{{{zzzzz{{z{{{z{{z{{{z{{{{{z{{{z{{zz{{{{zzzzz{{z{{{{zz{=\n{{{{{{{{{{zz{zz{{{zzzzz{{z{{{{z{{{z{{z{{{z{{zz{{{{zzzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz{{{z{{{z=\n{{z{{{z{{z{{{z{{z{{z{{{z{{{{{{zz{{{{zz{z{{{z{z{{{{{{z{{{z{{{z{{{zz{z{{z{{=\n{{{{{{z{z{{{{{z{{{{z{{{z{z{{{{{{{{zz{{{{{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{=\nz{{z{{{z{{{z{{{zz{z{{zz{{z{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{{{{z=\n{{{z{{z{{{{{{{{{z{{{{{{{zz{z{{{zz{{{z{{z{{{z{z{{{{{{z{{{z{{z{{{{{{z{{{z{{=\nz{{{z{{z{{{{{{z{{{z{{{{{z{{{z{{z{{{{{{{z{{{{{{z{{{z{{{zz{{{z{{{z{{{z{{z{{=\n{z{{{z{{z{{{zz{{{z{{{{{{z{{{z{{{{{z{{{z{{{z{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{=\n{{z{{{z{{{zz{{{z{{{{{{z{{{{{zz{{{{{{{{{{{z{z{{{{z{{{{{{z{{{{z{{{z{{z{{{z{=\n{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{zz{{z{{{z{{z{{{z{{z{{{z{{z{{z{{{z{{{{{{{zz{{z{{{z{{=\n{z{z{{{{{{z{{{z{{{z{{z{{{z{{z{{{{{{{{zzz{{{{{z{{{{z{{{z{z{{{{{{{{{zz{{{{{=\n{z{z{{{z{{z{{{{{{{zzz{zzz{{{{{{z{{z{{{z{{{z{{z{{{z{{{zzz{{{z{{{{{{{{{z{{{=\n{{{z{{{z{{z{{{z{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{{{{z{{{z{{{{zz{{z{{z{{=\n{z{z{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{{{{z{{{z{{z{{{{{{{z{{=\n{{{{z{{{z{{{{zz{{z{{{z{{{z{{z{{{z{{{z{{z{{zz{{{{z{{{{{{z{{{z{{{{{z{{{z{{{=\nz{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{{{z{{{z{{{{zz{{z{{{{{{z{{{{{{zz{{{{{{{{{{z=\nzz{{{{z{{{{{{z{{{{z{{{z{{z{{{z{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||=\n~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{z{{{z{{zz{zz{{zz{z=\nz{{z{{zz{zz{{{{{z{{z{{zz{{z{{{{z{{{{{{{z{{{z{{{z{{zz{{z{{z{{{{{{{{{z{{{{{=\n{z{{{{z{{{{zz{{{{{{{z{{z{{{{{{{z{{{{z{{zz{{{z{{{z{{{z{{{{{{{z{{z{{{z{{{z{=\n{zz{{z{{{z{{{{{zz{{{z{{{{zz{{{z{zz{zz{{zz{zz{{z{{zz{zz{{{{{z{{zz{{zz{{{z{=\n{{{zz{{{z{zz{{z{{z{{z{{z{{z{{{{z{{{{{{{zz{zz{{zz{{{z{z{{{z{{z{{{z{{zz{{{z=\n{zz{zz{{{{{zz{zz{{z{{{{{{{zz{{{z{zz{zz{{z{{z{{z{{{zz{zz{{z{{{z{{{z{{z{zz{=\n{{z{zz{{{z{zz{zz{{{{{z{{zz{{{{z{{{{{{{zz{{{z{z{{{z{{zz{zz{{{{{zz{zz{{z{{z=\n{{zz{{{z{z{{{{z{{z{{z{{{{{{{{z{{{{{zz{{{z{z{{{{z{{zz{{zz{zz{{z{{z{{zz{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z=\nzz{{{{{zzz{{zzz{zzz{{zzz{{{{zz{zzzzz{{zzz{z{{{{zzz{{{{zzz{z{{zz{{{{{{{{zz=\nzzz{zzz{{zzz{z{{zz{{{{{{{z{{{{{zzz{{zzz{{{{z{{{{{{{zzz{{{{{{{{z{{{zzz{{zz=\nzz{{{{z{{{z{{{{{{zzzzzz{zzz{zzz{{zzz{z{{zzzz{{{zzzz{{{{{{zzzz{{{zzz{{{{zz=\n{zzzzz{{zzz{z{{{{zzzz{{{{zzzz{{{{{{zzzz{{{zzz{z{zzz{{zzzzzz{{zz{{{{{{{{zz=\nz{z{{zzzz{zzzzzzzzzz{zzz{{zzzz{{{zzz{z{{{{{zzz{{zzz{{{{{{{zzzz{{{zz{zz{zz=\nz{{{{zz{{zzz{{zzz{zzz{zzzzzzzzzzzz{{zzzz{{{zzz{z{{{{zzzz{{{{zz{{{{{{{{zzz=\nz{zzz{zzz{{zzz{z{{{{{zz{zz{zzz{{{{zzzz{zzz{{{zzz{{{z{{{{{{{{z{{{{{{zzzz{z=\nzz{{{zzzz{{{{zzz{{{zzz{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zz{{z{zz{{{{{{{{{{{{{=\n{{{{{{zzzzzzzz{zzz{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zzz{{{{{{z=\nzz{zzzzzzzz{{{{{{zzz{zzzzzzzz{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{zz{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{{z{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||}}}}}}}}}}}}}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{=\n{{{{{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{zz{zz{zz{{zz{{{{{{zz{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{{{{{{{{{{{{{{{{zz{{{{{zzz{{{zz{{{zz{{{{{zzz{{{zz{{{zz{{{{{zz{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{z{{z{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{z{z{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}=\n}|}}}}}}}}}}}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{z{{zz{{=\nz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{z{zz{{{zz{{zzzz{=\n{{z{zz{{{zz{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{zzz{{zzz{zzzzz{zz{{{z{{{zzz{{zz{zz{{{{zzz{{zzzzzz{{{zzz{{zz{zz{{{{{{z{=\nzz{{z{{zz{{{zzz{{{{{{{{{{{{zz{{{{{zz{zz{{zzz{{zzzz{{{{{zzz{{zzzz{{{{{{zzz=\nz{{{{{{zzz{zz{{zz{{{{zzz{{{zzzz{{zzzz{{zzzz{{{zzzzzz{{zzz{{{{{{zzz{zzz{zz=\n{{{{{{{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zz{{{z{{{{{{zzzz{{zzzz{{zz{zzzzzz{=\nzz{{zz{{{zzzz{{zzzz{{{{zzz{zzz{zzzzz{{z{{z{{{{{z{zz{{{{zzz{{{{{{{zzzz{zz{=\n{zz{zzzz{{{zzzzzz{z{zzz{{zzz{zzzz{{{zzz{zzz{zzz{z{zz{{{{zzz{{zz{zz{{{{{{{=\nzzz{{{{{zz{{zz{{{zzz{{{zzz{{z{zzz{{{{z{zz{{{{zzz{{{{zzzz{{{zzz{{zz{zz{zzz=\n{{{{zzz{{{{{zzzz{{zzz{{zz{zz{zzz{{zz{{z{zz{{{zzz{{z{zzz{{{zzzz{{zzz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{z{{zz{zz{{z{{zz{{z{{zz{zz{{zz=\n{{z{{z{{{z{{zz{zz{{zz{zz{{{{{z{{z{{z{{z{{{z{{{z{{{{{{{{{{{zz{{{{{zzz{zz{{=\nzz{zz{{z{{{{{{zz{zz{{z{{{{{zz{{zz{{{{{{zzz{zzz{zz{{z{{zz{zz{{z{zz{{z{zz{{=\nzz{zz{{zz{{z{{zz{{{{{{zz{{zzz{zz{{{{{{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zzz=\nzzz{{{{{{{zz{{zz{{zz{{zz{zz{zzz{zzz{zz{zz{{zz{{zz{{{{{{z{{{z{{{z{{z{{z{{z=\n{{{{{zz{zz{{z{{{z{{{{{zz{{z{{z{{{z{{z{{{{{{z{{{z{{zz{z{z{{z{{z{{{{{{z{{{z=\n{{{z{{zz{zz{{z{{{z{{zz{zz{{{{{zz{{z{{{{{z{{{z{{z{{z{{z{{{z{{zz{z{{{{zz{zz=\n{{z{{{z{{zz{{z{{zz{zz{{zz{zzz{zz{{z{{{z{{{{{z{{{zz{{z{{zz{zzz{zz{{z{{z{{z=\n{{z{{{z{{zz{z{{{{z{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzzzz{{{zz=\nz{{{z{{{z{{z{{{{{zz{{z{{{z{{{{{zz{{z{{{z{{z{{{z{{z{{{z{{{{{z{{z{{zzz{{{{z=\nzzzz{{{{{{{{{{{zz{{{{{zz{{zz{{zz{zzz{{{{{{{{zz{zzz{{{{{{{{{{{zz{{{{{{zz{{=\nzz{{zz{zz{{zz{zzz{{{zzz{{{{{{{zz{zz{{zz{zz{{zz{{{{{{zz{{zz{{zz{{{{{{zz{zz=\n{z{{zz{{{zz{{zz{zz{z{{zz{{{zz{{z{{{{{{{{zz{{zz{{zz{{zz{{{{zz{{zz{{zz{{{{{=\nzz{{zz{{{{{{z{{{z{{{z{{z{{z{{z{{{{{z{{{z{{zzzzz{{{{{z{{{{{{z{{{z{{z{{{{{{=\nz{{{z{{z{{{{zz{{{{z{{{{{{z{{{z{{{z{{z{{{z{{zzzzz{{z{{{z{{{{{{{{zz{{{{{z{{=\n{z{{zz{{{{zzzzz{{z{{{{{{{z{{{z{{zzzzz{{z{{{{{{z{{{z{{z{{{z{{{z{{zzzzz{{{{=\n{z{{{{{{zz{{z{{{z{{{z{{z{{z{{z{{zzzzz{{z{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{z{{{z{{z{{{zz{z{{z{{{z{{{zz{z{{z{{{z{{=\nz{{{z{{z{{{z{{{{{z{{z{{z{z{{{{z{{{{{{{{{{{{{{{zz{{{{{zz{{zz{{zz{{zzz{{{{{=\n{{zz{{zzz{{{{{{{zzzzz{{{{{{zz{{zz{{zz{zzzzzz{{zzz{{{zzz{{{zzzzz{zz{{zz{zz=\nzzzz{{{{{{zz{{zz{{zz{{{{{{z{{zzz{{zz{{{zz{{{z{{zzz{{zz{{{zzz{{{{{{{{{{{zz=\n{{zz{{zz{{zz{{{{zz{{zz{{zz{{zzzzz{{zz{{{{{{{z{{z{{z{{{z{{z{{z{{{{{z{{{z{{=\nz{{{{{{{{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{{{zz{{{z{{{{{{{z{{z{{z{{{z{{{z{=\n{z{{{{{{z{{{z{{{{{{zz{z{{{{{z{{{z{{{zz{{{z{{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{=\n{{{{z{{{z{{z{{{z{{{z{{z{{{{{{{{{z{{{{zz{z{{z{{{z{{{z{{z{{z{{z{{z{{{{{{z{{=\n{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzz{{{z{{{z{{z=\n{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{{{z{{z{{z{{z{{{z{{{{{{{{{{{{=\n{{{zz{{{{{zz{{zz{{zz{{{zzz{{{{{{zz{{{zzz{{{{{zz{{zz{{{{{{zz{{zz{{zz{zz{{{=\n{{{{zzz{{{zzz{zz{{zz{{zzzz{{zz{{{{{{{{{{zz{{zz{{zz{{{{{{z{{zzz{{zz{{{zz{{=\n{z{{zzz{{zz{{{zz{{{{{{{{{{{{zz{{zz{{zz{{zz{{{{zz{{zz{{zz{zz{{zz{{zz{z{{{{=\n{zzz{zzz{{{z{{z{{z{{{{{z{{{z{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{{=\n{{zz{{z{{{{{{{zzz{zzz{{{z{{{z{{z{{{{{{z{{{z{{{{{z{{{z{{{{{z{{{z{{{{zz{{z{=\n{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{{z{{=\nz{{{z{{{z{{z{{z{{z{{z{{{{{{z{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{zz{{{z{z{{{z{{zz{zz{{z{{zz{{z{{z{{{z{{zz{{z{{z{{{z{{zz{zz{{z{{{z=\n{{{{{z{{z{{z{{zz{{zz{{{z{{{{{{{{{{zz{{{{{zz{{zz{{zz{z{{zz{{{{{{zz{z{{zz{{=\n{{{zz{{zz{{{{{{zz{{zz{{zz{zzz{{z{z{{zz{z{{zz{zz{{zz{{z{{{{{zzz{{z{{{{{{zz=\n{{zz{{zz{{{{{zz{{zz{{{zz{{{zz{{zz{{zz{{{zz{{{zz{{{{zz{{{{{{zz{{zz{{zz{{zz=\n{{{{zz{{zz{{zz{zz{{zz{{zzz{{{{{{{z{{{z{{{{z{{z{{z{{{{{z{{zz{{zz{{{z{{{{zz=\n{{{z{zz{zz{{z{{{{{{z{{{z{{z{{{{z{{z{{z{{{{{{{{z{{{z{{{{z{{{z{{zz{{{z{z{{{=\nz{{{{{zz{{z{{{{{zz{zz{{z{{z{{zz{{{z{z{{{{{{{z{{zz{{zz{{{z{zz{{{z{zz{zz{{z=\n{{{z{{{z{{zz{{{z{{{{z{{{zz{{z{{z{{{z{{{z{{z{{z{{z{{zz{{{z{z{{{{{{{z{{{zz{=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{zzz{zzz{z{zz{{zzz{{zzz{zzzz=\n{zzz{{zzz{z{{zzzzz{{zzz{{zzz{zzz{{{zzzzzzzzz{{zz{{zzzz{{{{{{{{{{zzzz{{{zz=\nz{{zzzzzzzzzzz{{{{{{zzzzzzzz{{{{{{{zzz{zz{{{{zzzz{zzz{zzz{zzzz{{zzzz{{zzz=\nz{{{zzz{zz{zzzzz{{zzzz{{{{{{zzzzzzz{{zzz{{{zzz{{zz{{zzzzzzzzzzzz{{zz{{zzz=\nz{zzzzzzzz{{{{{{zzzz{{zzzz{{zzzz{{zzzz{zzz{zzz{zzz{zz{{zz{{{{{{{z{{{z{{{z=\nzzzzzzzz{{{{zzzz{{{{zzzz{{{{{{zzzz{{{zz{zz{{zz{{{zzzzzzzzzz{{{zzz{{{{zz{{=\n{{{{z{{{z{{{zzz{zzz{{zzzz{zzz{zzz{{{{{zzz{z{{{{{zz{zz{zzz{{{{zzzz{zzz{{{{=\n{{zzzz{{{{zzzz{{{zzzz{{{zzz{{zzz{zzz{zzz{{zzzz{{{{zzzz{{zzz{zzzz{zzz{zzzz=\nzzzzzzzz{{zzzz{zzz{{{{{{{zz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{zzz{{zzz{{{{{zzz{{zzzzzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{z{{{{=\nzz{{{{{zz{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{=\n{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{z{zz{zz{z{{{{z{{{{z{zz{zz{z{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{{{{z{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{z{z{{z=\n{{{{z{{{{z{{z{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{z{{{{z{{{z{=\n{{z{{{{z{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{zzz{{z{{zzz{{zzz{{zzz{{z{{zzz{{zzzzzzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=\n=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=00=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}|||||||||||||||||||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=\n=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~~~~~~=\n~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=F6=C0=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~||||||||||||||||=\n||||~~}}{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=01=01=01||~|||||||||||||||||||}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=01=\n||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~||~~~~~~=\n~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=00=01=01||~||~~~~~}}}}}}~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~||~~~~~}}}}}|~~~~~}=\n}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0=\n\\=01=01||~||~~~~~}}||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~||~~~~~}|||||~~~~~}}~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~|=\n|~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F6=C0=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~||~~~~~~~~~~=\n~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~||}}}}}}}}}}}}}}}}}}~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=B5=01=\n=01||~|}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||~}}=01=01=E8=04=01=01||~~~~~~=\n~~~~~~~~~~~~~~~~~}|||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||~}}=01=01=00=00=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01||}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=\n=E0\\=01=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}=01=01=FF=FF=01=01zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=F4=88=01=01{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{=01=01=F6=C0=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=A4=1C=01=01{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{=01=01=01=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=8C=AC=01=01{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=01=B5=\n=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{=01=01=00=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=E8=04=01=01{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{=01=01=00=00=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=FF=FF=01=01{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=\n=01=E0\\=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=FF=FF=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=F4=88=01=01=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{=01=01=F6=C0=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=A4=1C=01=01{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{=01=01=01=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=8C=AC=01=01{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=01=\n=B5=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{=01=01=00=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=E8=04=01=01{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{=01=01=00=00=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=FF=FF=01=01{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n=01=01=E0\\=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=FF=FF=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=F4=88=\n\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\nAnd this is what the older message you sent me a picture of looks like, when r=\nead with Andrew:<nl>\n<nl>\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: image/x-xwd\nContent-Description: The way that message looked to ME\nContent-Transfer-Encoding: quoted-printable\n\n=00=00=00k=00=00=00=07=00=00=00=02=00=00=00=08=00=00=02=A2=00=00=03=82=00=\n=00=00=00=00=00=00=01=00=00=00 =00=00=00=01=00=00=00 =00=00=00=08=00=00=02=\n=A4=00=00=00=03=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=08=00=00=01=00=\n=00=00=01=00=00=00=02=9E=00=00=03~=00=00=01=DE=00=00=00=00=00=00=00=02xwd=\nump=00=00=00=00=00=FF=FF=FF=FF=FF=FF=07=00=00=00=00=01=00=00=00=00=00=00=07=\n=00=00=00=00=02=FF=FF=FF=FF=E0=E0=07=00=00=00=00=03=00=00=00=00=FF=FF=07=00=\n=00=00=00=04=92=92=92=92UU=07=00=00=00=00=05=B6=B6=92=92=AA=AA=07=00=00=00=\n=00=06=B6=B6=B6=B6=AA=AA=07=00=00=00=00=07=B6=B6=90=90UU=07=00=00=00=00=08=\n=92=92=92=92=AA=AA=07=00=00=00=00\t=DB=DB=B5=B5=AA=AA=07=00=00=00=00\n=B6=B6kkUU=07=00=00=00=00=0B=DB=DB=DB=DB=AA=AA=07=00=00=00=00=0C=B6=B6=B6=\n=B6UU=07=00=00=00=00=0D=92=92llUU=07=00=00=00=00=0EmmmmUU=07=00=00=00=00=0F=\n=B6=B6=DB=DB=AA=AA=07=00=00=00=00=10=DA=DA=DA=DA=FE=FE=07=00=00=00=00=11=FE=\n=FE=D9=D9=A9=A9=07=00=00=00=00=12=FE=FE=DA=DA=FE=FE=07=00=00=00=00=13=FE=FE=\n=FE=FE=FE=FE=07=00=00=00=00=14=DB=DB=B5=B5UU=07=00=00=00=00=15=92=92kk=00=\n=00=07=00=00=00=00=16mmHH=00=00=07=00=00=00=00=17mmIITT=07=00=00=00=00=18=\nIIII=00=00=07=00=00=00=00=19HH$$UU=07=00=00=00=00=1AII##=00=00=07=00=00=00=\n=00=1Bmm\"\"=00=00=07=00=00=00=00=1C=92=92IIUU=07=00=00=00=00=1D=B5=B5=DA=DA=\n=FE=FE=07=00=00=00=00=1EIIIIUU=07=00=00=00=00=1F=D9=D9=B5=B5=FE=FE=07=00=00=\n=00=00 =92=92=B6=B6=AA=AA=07=00=00=00=00!llll=AA=AA=07=00=00=00=00\"=91=91=\nll=AA=AA=07=00=00=00=00#ll=92=92=AA=AA=07=00=00=00=00$=B5=B5=B5=B5=FE=FE=07=\n=00=00=00=00%=DA=DA=FE=FE=FE=FE=07=00=00=00=00&=B5=B5=FE=FE=FE=FE=07=00=00=\n=00=00'=91=91=B5=B5=FE=FE=07=00=00=00=00(mmmm=00=00=07=00=00=00=00)$$$$=00=\n=00=07=00=00=00=00*mm$$UU=07=00=00=00=00+mm=92=92UU=07=00=00=00=00,=DB=DB=\n=92=92=AA=AA=07=00=00=00=00-IImmUU=07=00=00=00=00.=FE=FE=FE=FE=A9=A9=07=00=\n=00=00=00/=FE=FE=B4=B4=A9=A9=07=00=00=00=000=92=92II=00=00=07=00=00=00=00=\n1$$II=00=00=07=00=00=00=002$$IIUU=07=00=00=00=003=DB=DB=91=91UU=07=00=00=00=\n=004=DA=DA=FE=FE=A9=A9=07=00=00=00=005=92=92=DB=DB=A9=A9=07=00=00=00=006=B6=\n=B6mm=AB=AB=07=00=00=00=007=92=92=92=92=00=00=07=00=00=00=008II=00=00=00=00=\n=07=00=00=00=009$$=00=00=00=00=07=00=00=00=00:IIII=AA=AA=07=00=00=00=00;=91=\n=91II=AA=AA=07=00=00=00=00<$$$$UU=07=00=00=00=00=3Dmm=92=92=00=00=07=00=00=\n=00=00>IInn=AA=AA=07=00=00=00=00?JJmm=00=00=07=00=00=00=00@=92=92=B6=B6UU=\n=07=00=00=00=00A=B6=B6jj=00=00=07=00=00=00=00B=FE=FE=B4=B4TT=07=00=00=00=00=\nC=B6=B6=91=91=00=00=07=00=00=00=00D=B3=B3=91=91=FE=FE=07=00=00=00=00E=D9=D9=\n=91=91=FE=FE=07=00=00=00=00FllII=AA=AA=07=00=00=00=00G=FE=FE=B5=B5=FE=FE=07=\n=00=00=00=00H=DB=DB=DB=DBUU=07=00=00=00=00I=91=91=DB=DB=FE=FE=07=00=00=00=\n=00J##=00=00UU=07=00=00=00=00K=DB=DBkkUU=07=00=00=00=00L=92=92\"\"=00=00=07=\n=00=00=00=00M=FE=FE=D9=D9TT=07=00=00=00=00N=DB=DB=B2=B2=00=00=07=00=00=00=\n=00O=91=91=91=91=FE=FE=07=00=00=00=00P=B6=B6=B6=B6=00=00=07=00=00=00=00QH=\nH=00=00UU=07=00=00=00=00R=DB=DB=92=92=00=00=07=00=00=00=00S=DB=DBii=00=00=\n=07=00=00=00=00T=FE=FE=91=91=AA=AA=07=00=00=00=00U=B6=B6IIUU=07=00=00=00=00=\nV=FE=FE=D7=D7=00=00=07=00=00=00=00W=B6=B6HH=00=00=07=00=00=00=00X=00=00$$=\n=00=00=07=00=00=00=00Y=B7=B7=DB=DBUU=07=00=00=00=00Zmm=00=00=00=00=07=00=00=\n=00=00[=00=00$$UU=07=00=00=00=00\\=00=00=00=00UU=07=00=00=00=00]=92=92##UU=\n=07=00=00=00=00^=FE=FE=91=91=FE=FE=07=00=00=00=00_mm=B6=B6=A9=A9=07=00=00=\n=00=00`=DB=DBmm=AB=AB=07=00=00=00=00a=B6=B6II=AB=AB=07=00=00=00=00b=94=94=\n=B6=B6=00=00=07=00=00=00=00c=00=00II=00=00=07=00=00=00=00d=FE=FE=8F=8FTT=07=\n=00=00=00=00eII=92=92=00=00=07=00=00=00=00f=B6=B6=DB=DB=00=00=07=00=00=00=\n=00g=FE=FEll=AB=AB=07=00=00=00=00hII=92=92SS=07=00=00=00=00i=B6=B6!!=00=00=\n=07=00=00=00=00j=92=92=00=00=00=00=07=00=00=00=00k=DB=DBIIUU=07=00=00=00=00=\nl=B6=B6=FE=FE=A9=A9=07=00=00=00=00m=DB=DBHH=00=00=07=00=00=00=00n=FE=FE=8F=\n=8F=00=00=07=00=00=00=00o=00=00=FF=FF=00=00=07=00=00=00=00p=A8=A8=A8=A8=A8=\n=A8=07=00=00=00=00q=FF=FF=00=00=00=00=07=00=00=00=00r=D3=D3=D3=D3=D3=D3=07=\n=00=00=00=00s=00=00=E6=E6=19=19=07=00=00=00=00t=00=00=7F=7F=7F=7F=07=00=00=\n=00=00u=00=00=BF=BF??=07=00=00=00=00v``````=07=00=00=00=00w=FF=FF=C0=C0=CB=\n=CB=07=00=00=00=00x=E6=E6=AD=AD=D1=D1=07=00=00=00=00y=7F=7F``=E5=E5=07=00=\n=00=00=00z=00=00=00=00=80=80=07=00=00=00=00{=F5=F5=DE=DE=B3=B3=07=00=00=00=\n=00|=DD=DD=C8=C8=AE=AE=07=00=00=00=00}zzoo=9A=9A=07=00=00=00=00~=B8=B8=A7=\n=A7=A6=A6=07=00=00=00=00=7F=98=98=FB=FB=98=98=07=00=00=00=00=80=00=00=B9=B9=\n=00=00=07=00=00=00=00=81=89=89=E2=E2=A2=A2=07=00=00=00=00=82LL}}=C8=C8=07=\n=00=00=00=00=83rr=BC=BC=B0=B0=07=00=00=00=00=84LL}}LL=07=00=00=00=00=85=89=\n=89=E2=E2=89=89=07=00=00=00=00=86rr=BC=BCrr=07=00=00=00=00=87=89=89=E2=E2=\n=98=98=07=00=00=00=00=88rr=BC=BC=98=98=07=00=00=00=00=89=89=89=E2=E2=96=96=\n=07=00=00=00=00=8ALL}}=8B=8B=07=00=00=00=00=8Brr=BC=BC=92=92=07=00=00=00=00=\n=8C=00=00=00=00=F7=F7=07=00=00=00=00=8D=BF=BF=BF=BF=BF=BF=07=00=00=00=00=8E=\n=BF=BF=90=90=D8=D8=07=00=00=00=00=8F??????=07=00=00=00=00=90=7F=7F=7F=7F=7F=\n=7F=07=00=00=00=00=91rr=BC=BC=81=81=07=00=00=00=00=92LL}}=CC=CC=07=00=00=00=\n=00=93rr=BC=BC=B2=B2=07=00=00=00=00=94=F7=F7=E8=E8=00=00=07=00=00=00=00=95=\n=89=89=E2=E2=99=99=07=00=00=00=00=96LL}}=9C=9C=07=00=00=00=00=97rr=BC=BC=9A=\n=9A=07=00=00=00=00=98LL}}=8C=8C=07=00=00=00=00=99=00=00=00=00=81=81=07=00=\n=00=00=00=9A=F7=F7=EB=EB=00=00=07=00=00=00=00=9B=89=89=E2=E2=8B=8B=07=00=00=\n=00=00=9CLL}}WW=07=00=00=00=00=9Drr=BC=BCww=07=00=00=00=00=9Err=BC=BC=B1=B1=\n=07=00=00=00=00=9FLL}}XX=07=00=00=00=00=A0rr=BC=BCxx=07=00=00=00=00=A1=DC=\n=DC=FE=FE=00=00=07=00=00=00=00=A2=DB=DB=DB=DB=00=00=07=00=00=00=00=A3=DC=DC=\n=FE=FETT=07=00=00=00=00=A4=FE=FEHHTT=07=00=00=00=00=A5=FE=FE##VV=07=00=00=\n=00=00=A6=DB=DB$$WW=07=00=00=00=00=A7=B6=B6=00=00WW=07=00=00=00=00=A8=92=92=\n=00=00UU=07=00=00=00=00=A9=FE=FEGG=00=00=07=00=00=00=00=AA=FE=FE!!=00=00=07=\n=00=00=00=00=AB=DB=DB  =00=00=07=00=00=00=00=AC=B6=B6=00=00=00=00=07=00=00=\n=00=00=AD=DB=DB=00=00=00=00=07=00=00=00=00=AE=DB=DBII=AA=AA=07=00=00=00=00=\n=AF=FE=FEkkTT=07=00=00=00=00=B0=B6=B6$$WW=07=00=00=00=00=B1=FE=FEii=00=00=\n=07=00=00=00=00=B2mm=00=00UU=07=00=00=00=00=B3=FE=FE##=AA=AA=07=00=00=00=00=\n=B4=FE=FEHH=A9=A9=07=00=00=00=00=B5$$mm=00=00=07=00=00=00=00=B6$$mmTT=07=00=\n=00=00=00=B7=00=00IIUU=07=00=00=00=00=B8=DB=DB=00=00WW=07=00=00=00=00=B9=00=\n=00=00=00=00=00=07=00=00=00=00=BA=00=00=00=00=00=00=07=00=00=00=00=BB=00=00=\n=00=00=00=00=07=00=00=00=00=BC=00=00=00=00=00=00=07=00=00=00=00=BD=00=00=00=\n=00=00=00=07=00=00=00=00=BE=00=00=00=00=00=00=07=00=00=00=00=BF=00=00=00=00=\n=00=00=07=00=00=00=00=C0=00=00=00=00=00=00=07=00=00=00=00=C1=00=00=00=00=00=\n=00=07=00=00=00=00=C2=00=00=00=00=00=00=07=00=00=00=00=C3=00=00=00=00=00=00=\n=07=00=00=00=00=C4=00=00=00=00=00=00=07=00=00=00=00=C5=00=00=00=00=00=00=07=\n=00=00=00=00=C6=00=00=00=00=00=00=07=00=00=00=00=C7=00=00=00=00=00=00=07=00=\n=00=00=00=C8=00=00=00=00=00=00=07=00=00=00=00=C9=00=00=00=00=00=00=07=00=00=\n=00=00=CA=00=00=00=00=00=00=07=00=00=00=00=CB=00=00=00=00=00=00=07=00=00=00=\n=00=CC=00=00=00=00=00=00=07=00=00=00=00=CD=00=00=00=00=00=00=07=00=00=00=00=\n=CE=00=00=00=00=00=00=07=00=00=00=00=CF=00=00=00=00=00=00=07=00=00=00=00=D0=\n=00=00=00=00=00=00=07=00=00=00=00=D1=00=00=00=00=00=00=07=00=00=00=00=D2=00=\n=00=00=00=00=00=07=00=00=00=00=D3=00=00=00=00=00=00=07=00=00=00=00=D4=00=00=\n=00=00=00=00=07=00=00=00=00=D5=00=00=00=00=00=00=07=00=00=00=00=D6=00=00=00=\n=00=00=00=07=00=00=00=00=D7=00=00=00=00=00=00=07=00=00=00=00=D8=00=00=00=00=\n=00=00=07=00=00=00=00=D9=00=00=00=00=00=00=07=00=00=00=00=DA=00=00=00=00=00=\n=00=07=00=00=00=00=DB=00=00=00=00=00=00=07=00=00=00=00=DC=00=00=00=00=00=00=\n=07=00=00=00=00=DD=00=00=00=00=00=00=07=00=00=00=00=DE=00=00=00=00=00=00=07=\n=00=00=00=00=DF=00=00=00=00=00=00=07=00=00=00=00=E0=00=00=00=00=00=00=07=00=\n=00=00=00=E1=00=00=00=00=00=00=07=00=00=00=00=E2=00=00=00=00=00=00=07=00=00=\n=00=00=E3=00=00=00=00=00=00=07=00=00=00=00=E4=00=00=00=00=00=00=07=00=00=00=\n=00=E5=00=00=00=00=00=00=07=00=00=00=00=E6=00=00=00=00=00=00=07=00=00=00=00=\n=E7=00=00=00=00=00=00=07=00=00=00=00=E8=00=00=00=00=00=00=07=00=00=00=00=E9=\n=00=00=00=00=00=00=07=00=00=00=00=EA=00=00=00=00=00=00=07=00=00=00=00=EB=00=\n=00=00=00=00=00=07=00=00=00=00=EC=00=00=00=00=00=00=07=00=00=00=00=ED=00=00=\n=00=00=00=00=07=00=00=00=00=EE=00=00=00=00=00=00=07=00=00=00=00=EF=00=00=00=\n=00=00=00=07=00=00=00=00=F0=00=00=00=00=00=00=07=00=00=00=00=F1=00=00=00=00=\n=00=00=07=00=00=00=00=F2=00=00=00=00=00=00=07=00=00=00=00=F3=00=00=00=00=00=\n=00=07=00=00=00=00=F4=00=00=00=00=00=00=07=00=00=00=00=F5=00=00=00=00=00=00=\n=07=00=00=00=00=F6=00=00=00=00=00=00=07=00=00=00=00=F7=00=00=00=00=00=00=07=\n=00=00=00=00=F8=00=00=00=00=00=00=07=00=00=00=00=F9=00=00=00=00=00=00=07=00=\n=00=00=00=FA=00=00=00=00=00=00=07=00=00=00=00=FB=00=00=00=00=00=00=07=00=00=\n=00=00=FC=00=00=00=00=00=00=07=00=00=00=00=FD=00=00=00=00=00=00=07=00=00=00=\n=00=FE=00=00=00=00=00=00=07=00=00=00=00=FF=00=00=00=00=00=00=07=00=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=8C=AC=01=\n=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=00=0D=\n=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=00=\n=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=\n=E8=04=01=01=00=00=00=01=01=01=01=01=01=01=01=01=01=01=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=00=00=00=00=00=00=00=00=01=01=01=01=01=01=01=01=01=01=01=00=00=00=01=\n=01=00=00=01=01=00=00=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=01=01=01=01=01=00=00=00=01=00=00=00=00=00=00=00=00=00=00=\n=01=01=01=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=01=01=\n=01=01=00=00=00=00=00=00=00=00=01=01=00=00=00=00=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=00=00=00=\n=01=01=FF=FF=01=01=00=00=00=01=00=01=01=00=00=00=00=01=00=01=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=00=00=01=00=01=00=00=00=00=00=00=00=00=\n=01=00=00=00=01=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=00=00=\n=00=01=01=E0\\=01=01=00=00=00=01=00=00=01=01=00=00=01=00=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=00=00=01=00=00=00=01=00=00=00=00=00=00=\n=00=01=00=00=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=00=\n=00=00=01=01=00=0D=01=01=00=00=00=01=00=00=00=01=01=00=01=00=00=01=00=00=00=\n=00=00=00=00=00=01=01=00=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=\n=01=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=\n=01=00=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=00=00=\n=00=00=01=00=00=00=00=00=01=00=01=01=00=00=00=01=01=01=00=00=01=00=01=01=00=\n=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=01=00=00=00=00=00=00=00=\n=01=00=00=00=00=00=00=01=01=01=00=00=00=00=01=00=00=00=00=01=01=01=01=00=00=\n=01=01=01=00=00=01=00=01=01=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=01=01=01=01=00=00=01=00=00=01=\n=00=00=00=01=01=F4=88=01=01=00=00=00=01=00=00=00=01=00=00=00=00=00=01=00=00=\n=00=00=00=00=00=00=01=00=01=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=\n=00=00=00=01=00=00=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=\n=00=00=01=00=00=00=00=00=00=00=00=01=01=01=00=00=01=00=00=00=01=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=01=01=00=00=01=00=00=00=00=00=01=00=01=01=00=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=\n=00=01=01=01=01=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=\n=01=00=00=00=01=00=01=01=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=00=00=\n=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=01=00=00=\n=01=00=00=00=01=01=F6=C0=01=01=00=00=00=01=00=00=01=00=01=01=00=00=00=01=00=\n=00=00=00=00=00=00=00=01=00=01=00=01=00=01=01=01=01=01=00=00=01=01=00=00=00=\n=00=01=01=00=00=00=00=01=01=01=01=00=01=00=00=00=01=00=01=01=01=01=01=00=00=\n=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=00=00=01=00=00=00=\n=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=01=01=01=01=00=01=00=00=\n=00=01=00=01=00=00=00=01=00=01=01=01=01=01=00=01=00=00=00=01=00=00=00=00=00=\n=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=\n=00=01=01=01=01=01=00=01=00=00=00=00=00=00=01=01=00=00=00=00=00=00=00=00=00=\n=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=01=00=\n=00=01=00=00=00=01=01=A4=1C=01=01=00=00=00=01=00=00=01=00=00=01=01=00=00=01=\n=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=\n=00=00=00=00=01=00=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=00=00=01=00=00=\n=00=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=\n=00=00=01=00=01=00=00=00=01=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=\n=01=00=01=00=00=00=00=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=\n=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=01=01=01=01=01=01=01=\n=00=00=01=00=00=00=01=01=01=01=01=01=00=00=00=01=00=01=00=00=00=00=01=01=00=\n=01=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=00=00=01=00=01=00=00=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=01=01=01=01=00=01=00=00=00=01=\n=00=01=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=01=00=00=\n=00=00=00=00=00=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=\n=00=00=00=01=00=00=01=01=01=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=\n=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=\n=00=01=00=01=00=00=00=01=00=01=00=00=00=00=00=01=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=\n=00=00=00=01=00=00=00=01=01=8C=AC=01=01=00=00=00=01=00=00=00=00=00=00=00=00=\n=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=01=01=00=00=00=01=01=\n=01=00=00=00=01=01=01=00=00=00=01=01=01=01=00=00=00=00=00=01=00=00=01=01=01=\n=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=01=00=00=\n=00=00=00=00=00=00=00=00=01=01=01=00=00=01=00=00=00=01=00=00=01=01=01=01=00=\n=01=00=00=00=01=00=00=00=00=00=01=00=00=01=01=01=00=00=00=01=01=01=01=00=00=\n=00=00=00=00=00=01=00=00=00=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=\n=01=01=01=00=00=01=01=01=00=00=01=00=00=00=00=00=00=01=01=01=00=00=00=00=00=\n=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=01=00=00=00=01=01=00=0D=01=01=00=00=00=01=01=01=01=01=01=01=01=\n=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=01=01=01=01=\n=01=01=01=01=01=01=00=00=00=01=01=00=01=01=01=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=01=01=E8=04=01=01=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=01=00=00=01=01=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=01=01=FF=FF=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=E0\\=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=00=0D=01=01|||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||z|||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n=01=01=F4=88=01=01|||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||}z|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||}=01=01=F6=C0=01=01||~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=A4=1C=\n=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}|~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=01||~~~=\n~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~}}=01=01=00=0D=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~=\n~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=E8=04=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}}}}}}}}}}}}}}}}}}}~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=\n=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{z{zzzz{{{{zzzz{{{{{{{{{z=\nz{zzz{{{{{{{{{{{{{zz{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{zzz{{{zzzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=A4=\n=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{{{{{{{{=\n{{{{{zz{{zzz{{{{zzz{{{{{{{{{{zz{{zz{{{{{{{{{{{zzzz{{{{z{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{{{{{zzzzz{zz{{zz{{zz{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{z{{{zzz{{{{zzz{{{{{{{{{{{{{{zz{{{{{{{=\n{{{{{{zz{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{zz{=\nzz{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zzzzz{{{zzz{{zzz{zz{{zz{{{zzzz{{{{{{zz{zzzzzzz{{{zzz{{{{{{{zz{{{z{=\nzz{{z{zz{{{zzzz{{zzz{{zz{{{{zz{{{{{{{zz{{{zz{{zz{{{{{zzz{zz{{{{zzz{zzz{zz=\nz{zz{{{{{zzzz{{zzzz{{{{{{{{{zz{zz{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zz{{{z{{z=\n{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{z{{zz{{zzz{zzz{zz{zz{{zz{{{{=\n{{zz{zz{zz{{{z{{zz{{{{{{zz{{{z{zz{{z{zz{{zz{{zz{{zz{{zz{{{{zz{{{{{{{zz{{{=\nzz{{zz{{{{{{zzz{zz{{z{{zz{zz{{z{{z{{{{{zz{{zz{{zz{{{{{{{{zzz{{zz{{zz{{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{zzz{{{{{z{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z=\nz{zz{{zz{{zz{{zz{{zz{zz{{zz{{{{{{zz{{{{zz{{zz{{zz{{{{{{zz{{{z{zz{z{{zz{{{=\n{{{zz{{zz{{zz{{{{{{{{{{{{{zz{{{zz{{zz{{{{{{zz{{zz{zz{{zz{zzz{zz{z{{{{{zz{=\n{zz{{zz{{{{{{{{{zzz{{zzzzz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=\n=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzz{{{z{{zzzzz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{zzzzzz{{zz{{zz{{zz{zz{{zz{{{{{{zz{{{{zz{=\n{zz{{{{{{{{{{zz{{{z{{zzz{{zz{{{zzzzz{{zz{{zz{{{{{{{{{{{{{zz{{{zz{{zz{{{{{=\n{zz{{zz{zzzzzz{{zz{zzz{{{{{{zz{{zz{{zz{{{{{{{{{{zz{{{{zz{{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{zzz{{{z{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{zz{{{{{{z=\nz{{zz{{zz{zz{{zz{{{{{{zz{{{{zz{{zz{{{{{{{{{{zz{{{z{{zzz{{zz{{zz{{zz{{zz{{=\nzz{{{{{{{{{{{{{zz{{{zz{{zz{{{{{{zz{{zz{zz{{{{{{zzz{zz{{{{{{zz{{zz{{zz{{{{=\n{{zz{{{z{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zz{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{{zz{zzz{{z{{zz{{zz{{zz{zz{{zz{{zz{{zz{{{{zz{{zzz{{z{{{{{=\n{zz{{{z{{{z{{{zz{{zz{{zz{{zz{{zz{{{{zz{{{{{{{zz{{{{z{{z{{{{{{{zz{{zz{zzz{=\n{z{{zzz{zz{{{{{{zz{{zz{{zz{{{{{{zzz{zz{{zzz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{=\n{{{z{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zz{zzzz{{zzzz{zzz{zzz{zzz=\nz{{{zz{zzzz{{zzzz{{zzzz{{{{{{{zz{{zzz{{z{{zzzz{{zzz{zzzzzzzzzz{{{zz{{{{{z=\nzzzzz{{zzzz{{{{{{zzz{{zzz{zzzz{{{{z{{z{{{{{{{{zzzz{{zzzz{{{{{{zzzz{{zz{{{=\n{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{z{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{zzzzzzzzzzzzzz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz=\nzzzz{~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=\n=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{{zzz{~~~~~~~~~~~~~~~~~z{~~zz{~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~{zz{~~~~~~~=\n~~~~~~~~~zz{~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~zz{~~zzzzz{zzz{zzz{zz{~zzzz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~zz{zz{{zz{{zzz{zz{{zz=\n{{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~zzzzzz{{zz{~zz{~zz{{zz{~zz{~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{{{{{~zz{~zz{~zz{~zz{~zz{~~zz{~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~=\n~zz{~zz{~zz{~zz{~zz{z{{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~zz{~~~~~zz{~zz{~zz{~zz{~zzz{{zz{~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzz{~~~~{zzz{zzzzz{=\n~zzz{{zz{~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~{{{{{~~~~~{{{{{{{{{{~{{{{~{{{~{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}=\n}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|=\n|~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=AC=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=FF=FF=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~}}|||||||||||||||}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~}}=01=01=F4=88=01=01||~}}||}}}vvvvvv}}}}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~}}|}}}}v=\nvvvv|}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n}}=01=01=A4=1C=01=01||~}}~~~~~vv||||~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||~}}~~~~~v|||||~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=8C=\n=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=01=01=01||=\n~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=E8=04=01=01||~}|||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=01=01||~~~~~~~~~~~=\n~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=\n=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=E0\\=01=01||~~~~~~~~~~~~~~~~~~~~~~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=0D=01=\n=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01=F4=88=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F6=C0=01=01||~~~~~~=\n~~~~~~~~~~~~~~~~~}|||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||~}}z||~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~}}=01=01=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=01=01=01=01||}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}z||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=\n=8C=AC=01=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}z|}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=00=0D=01=01zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=00=01=01=01=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||=01=01=E8=04=01=01||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||}=01=01=00=00=01=01||~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n}}=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}=01=01=E0\\=01=01||~~~~~~~~~~~~~~~~~~~~~~=\n~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~}}=01=01=00=0D=\n=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~~~=\n~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}}}}}}}}}}}}=\n}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=8C=AC=01=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{zz{{{{{{=\n{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zz{{{{{zz{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{zzzzzz{{{{{{{{{zz{{{{{{{{{{zzz{zzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{zz{{{{{zz{{{{{zzzzz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{zzzz{{{{{zz{zzz=\nzzz{{{zzz{{{zzzz{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{zz{zz{{{{{zz{{{{{{{{{{{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z=\nz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{z{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z=\nz{{{{{{{{{z{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\nz{{{{{{{{z{{{{{{z{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{zzz{{{{{zz{{z{{{{z{{zz{zz{zz{{zz{{z{z{z{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{z{{{z{{{{z{{{{{{{{{{{{{{{z{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\nz{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{z{{zz{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{z{{{{{{{{z{{{z{{{z{z{=\n{{{z{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{=\n{{z{{{z{{{{{{{{{{{{{{{{z{{{{{z{{{zzz{{{{zzzz{{{{{{{{{{z{{{{z{{{{z{{{{{{{{=\n{{{{zzz{{{zz{{{zz{{z{{{z{{{zz{z{{zz{zz{{{{{{{zzzz{{{{z{zz{{{zz{{{{zzz{{zz=\n{{{zzz{{zzzz{{{{zzzz{{z{zz{{zz{{{zzz{{{{{{{{{{{{{{{{{{z{{{zz{{{zzz{{{z{zz=\n{{{{{{{{z{z{{{{zz{{zz{zz{zz{zzz{{zz{zz{zzz{{{{zzz{{z{zzzzzzz{{zzz{{{z{{{z=\nzzz{{z{{{zz{z{{z{{{zzzz{{{zzz{{{{{{zzz{zz{{zz{{{{{{zzz{{zzzzzz{{{{{{{{z{{=\n{zzz{{{{z{{{{{{{{{z{{{zz{{z{z{{{{z{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{zz{{{zzzz{{{{{{{{{{{{{z{{{{{z{{z{{{z{{zz{=\n{z{{{{{{{{{{zz{{zz{{{{z{{{{{{{{{{zz{{z{zz{zz{{{z{{z{{z{{{z{{zz{{{zz{z{{{{=\n{{{{z{{{{{{{z{{{zz{{z{{z{{z{{{z{{z{{z{{{z{{{{{{{z{{{{zz{z{{{z{{z{{z{{{{{{=\n{{{{{{{{{{{{zzzzz{{{zz{zz{{zz{zz{{{{{{{zz{{{{{{z{{{z{{zz{zzz{zz{{zz{zzz{z=\nz{{z{{{z{{zz{z{z{{{z{{{z{{z{{zz{{z{z{{{z{{z{{{z{{zz{{z{{z{{z{{{{{z{{z{{z{=\n{{z{{{{{zz{zz{z{{{z{{{{{{{{z{{{{z{zz{{{zzzz{{{{{z{{{{{zzz{{z{{{{z{{z{z{z{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{z{{{zz{{zz=\n{{{{{{{{{{{{z{{{{{z{{zzzzz{{z{{{{{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{z{{{{{z{{=\n{z{{z{{z{{{z{{z{{{z{{{zz{{z{{{{{{{z{{{{{{{z{{{{z{{zz{{z{{{{{z{{{z{{{{{z{{=\n{{{{{z{{{{zz{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{{{zz{{z{{{z{{z{{{z{{{{{{{z{z=\n{{{{{z{{{z{{z{{{z{{{z{{z{{{z{{{z{{zzzzz{{z{{{{z{{{zzzzz{{z{{z{{{z{z{{z{{{=\nz{{{z{{z{{{{{{zz{{{{{{{zz{{{{z{{{z{{{{{z{{{z{{{{zz{{{{{{{{z{{{{{{{zz{zz{{=\nzz{{{{z{{{{z{{zz{z{{{{z{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{z=\n{{{{zz{{{{{{{{{{{{{{z{{{{z{{{{z{{zzzzzzz{{{z{{{{{z{{z{{{{{{z{{{{{{zzzzzzz=\n{{{{{z{{{{{z{{{{{{{{{z{{{{{z{{{{z{{z{{z{{{z{{z{{{z{{{z{{z{{{{{{{{z{{{{{{{=\nz{{{zzzz{{{{{z{{{{z{{{{z{{{{z{{{{{{{z{{{{z{{z{{{z{{{{z{{{{{{{zzzzzzz{{{{{=\n{z{{{{z{{z{{{z{{z{{{z{{{{{{{z{{z{{{{z{{{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{{{{z=\n{{{{z{{{z{{{{{{z{{z{{{z{z{{z{{{z{{{z{{z{{{{{{{zz{{{{{{{zz{{{z{{{z{{{{{z{{=\n{z{{{zz{{{{{{{{{z{{{{{{{{z{z{{{{z{{{z{{{{{z{{{z{z{{{{z{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{zzz{{zz{{{{{{{{{{{{{{z{{{{{z{{{{z{{{{{{{{{{{=\n{z{{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{z{{{{{z{{{z{{z{{z{{{z=\n{{{z{{z{{{{z{{z{{{{{{{z{{{{{{{z{{{{z{{{{{{{{{z{{z{{{{{{z{{z{{{{{{{z{{{{{z=\n{{z{{z{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{z{{z{{{z{{z{{{z{{{{{{{z{{{z{{{z{{{z{=\n{z{{{z{{{z{{z{{{z{{{z{{z{{{{{{z{{{{z{{{z{{{{{{z{{z{{{z{z{{z{{zz{{z{{{z{{{=\n{{{{{zz{{{{{{{zz{{z{{{z{{{{{z{{{z{{zz{{{{{{{{{{z{{{{{{{{z{z{{{{z{{{z{{{{{=\nz{{{z{z{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{zzzzz{{{{{{{=\n{{{{{{{zz{{{z{zz{{zz{{{{{{{{{{{{z{{{zz{{{zz{{{z{zz{{{z{{{{{{{{{{zz{{{{{{{=\nz{{{{{{{{{zz{{z{zz{zz{{z{zz{z{z{z{z{zz{z{z{{z{z{{{{{{z{z{{{{{z{{{{zz{{z{{=\nz{{z{{z{z{z{{z{{z{z{{{{{z{z{{z{{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{z{{{zz{{zz=\n{zz{{z{{zz{{{{{{{z{{{{z{{zz{zz{{z{{{z{{{z{{z{{{z{{{z{{zz{{{z{z{{{{z{{{zz{=\n{{z{z{{zz{zz{zz{{zz{zzz{{{{zz{{{z{z{{z{{z{{z{{z{{zz{zz{{z{{zz{zz{zz{{{z{z=\n{{{{{z{{{{z{{z{{zz{{zz{{z{{{{{{zz{zz{zz{{zz{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{zzzzzz{{zzzz{{{{{{{{{{{zzzzzzz{{{{{=\nzzzz{{{zzzz{{{{{{{{{{zz{{{{{{zzzzz{{{{{{{{zzz{{{zz{{{{zz{zz{{{z{{{z{zz{{z=\n{{{z{{{{{{{zz{{{{{{z{{{{{zzz{{{zzz{{{{z{{zzz{{{zz{{{{{{zz{{{z{{{z{{{z{{zz=\nz{{{{{{{{{{{{{{{{{{{zzzzzz{{{{zzz{{{zzzz{{{{{{{zzz{{zzz{{zz{zzzzz{zzz{zzz=\nzzz{zzz{zzz{{zzzz{zzz{{zzzz{{zzzz{zzz{{zzz{z{z{{{{{{{{{{{{{zzzz{{zzz{{{z{=\n{zzz{{{{zz{zz{z{{{zzz{{zzzzzz{z{{{{{{z{{{zzz{{{{zzzz{{{z{{{{{{{zzz{{{zzzz=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzzz{{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zzzz{{{{zz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{=\n{{{{{{{zzz{{{{{{zzz{zzzzzzzz{{{{{{zzz{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zzz{{{{zzz{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zzz=\n{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{zzzzz{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{z{{{zz{{{{{{{zz{{{zzz{{{zzzz{{{=\n{{{{{{{{{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzz{zz{{zz{{{{{{{{{=\n{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{zzzz{{{{{{{{{{{{{{{{zzz{{{{{{{{=\n{{{{{{{{{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zzz{{{zz{{{zz{{{{{zzz{{{zz{=\n{{zz{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zzz{{{{z{{{{{{{{{{z{{{zz{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{{{{{zz{{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{{{{{{zz{{{{zz{{{{{z{{{zz{{{{{{{{{{{{{{{{{{z=\nz{zzzz{{{{{zzz{{{zzzzz{zz{{zz{{{{{{{{{{zzzzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{z{{{zz{zz{{zz{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{=\n{{zz{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{zzzz=\n{{{z{zz{{{zz{{zzzz{{{z{zz{{{zz{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{=\n{{{{zzz{{{{z{{{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{=\nzz{{{zz{{{zz{{{{{{{{{{{{{{{{{{z{{{{zz{{{{zz{{{{z{{{zz{zz{{zz{{{{{{{{{z{{{=\nzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{zz{zz{{zz{{{{{{{{{{{{zz{{{{zz=\n{{{zzz{{{{zzz{{{{{{{{{{{zz{{zz{{{zz{{{{{{{{{{{{{{{z{zz{{zzz{zz{{{{zzz{{zz=\nzzzzz{zz{{{{zzz{{zz{zz{{{{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zz{{{z{{{{{{zzz=\nzz{zzz{{{zzzz{zzzzz{{{{{{{{{{{{{{{{z{zz{{{z{{zzzz{{zzzz{{zz{zz{{{zzzz{{zz=\nz{zz{{zzz{{{zzz{{{zz{{{{{{{{zz{{{zz{{zzzz{{zz{zzz{{zzz{{zzz{zz{{{zzzz{zzz=\nz{{{zzz{{zzz{zzz{zz{{{{z{{{z{z{{z{{zzzz{{zz{zz{zzz{zzz{{{{{{zz{{{{zz{{{zz=\n{{{{{{{{{zz{zzz{zz{{{{z{{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{=\n{{zz{zz{{zz{{{{{{{{{{{{zz{{{{zz{{z{{zz{{z{{zz{{{{{{{{{{zz{{zz{{{zz{{{{{{{=\n{{{{{{{zz{zz{{{zzz{zz{zzz{zz{{z{{{zzz{zz{zzz{zz{{zzzzz{{{{z{zz{{z{zz{{{zz=\n{{{z{zz{{z{zz{{{zzzzzz{{{{{{{z{{zzz{zz{zz{zz{{z{{{{{{{{{{{{{{{{{{{z{{zz{{=\nz{zz{{zz{{zz{{{zzz{zz{zz{{zz{{zzz{zz{{zz{{z{{zz{{zz{{{{{{{{zzzzzz{{zz{{zz=\n{{zz{zz{z{{zz{{zzz{zz{zz{{z{{zz{{{z{{zz{{zz{{zzz{zz{{zz{{zzzz{{z{{{zz{{{z=\nzz{zz{zz{{zz{{{{{{zz{{{{zz{{{zzzzz{{{{{{zz{{zzzz{{{{{z{{{{{{{{zz{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{zz{{{zzzzz{{{{{{{{{{{{zz{{{{zz{zz{{zz{zz{=\n{zz{{{{{{{{{{{zzzzz{{{zz{{{{{{{{{{{{{{z{{zz{{zzz{zzz{zz{{zz{zz{{zzz{zzz{z=\nz{{zz{zzz{z{{{{zz{zz{z{{zz{{{zz{{zz{zz{z{{zz{{{zz{{z{{{{{{{zz{{zz{{zz{zz{=\n{{{zz{{{{{{{{{{{{{{{{{{{z{{zzz{z{{{{{zz{{zz{{{zz{{zz{{{{{zz{{zz{{zz{{zz{z=\nz{{zz{{zz{{{{{{{{zz{{{zz{zz{{zz{{zz{{{zz{{zz{{zz{{zz{zzz{{{{zz{{zz{{zz{{z=\nz{{zz{{zz{{z{{zz{zz{{z{{{zz{{{zz{{zz{zz{{zz{{{{{{zz{{{{zz{{{zz{{zz{{{{zz{=\n{{zzzz{{{{{z{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{z{{{{zz{{{{{{{{{{{{{{zz{{{{{{zz{=\n{{zzzzzz{{{{zz{{{{zz{zzzzzz{zz{{{{{{zzzzzz{{{{{zz{{{{zz{{{{{{{{{{{{{zzzzz=\nz{{zz{{zz{zz{{{zz{zz{{zz{{zz{zzzzz{{{zz{{{{{{{z{{zzz{{zz{{{zz{{{z{{zzz{{z=\nz{{{zzz{{{{{{{{{{zz{zzzzz{{{{zz{{{zz{{{{{{zzzzzz{{{{{{{z{{{zzzz{{zzzzz{{z=\nz{{{zz{{zz{{zzzzz{{zz{{zz{{zz{zzzzzz{{zz{{{{{{{{zz{{{zz{zz{{zz{{zz{{{zzzz=\nzz{{zz{{zz{{zzz{{{zz{{zzzzzz{{zz{{zz{{zz{{z{{zz{zz{{z{{{zz{{{zz{{zz{zz{{z=\nz{{{{{{zz{{{{zz{{{zz{{zz{{{zz{{{zz{{zz{zzzzzzz{{{zz{{{{{zz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{zz=\nz{{zz{{{{{{{{{{{{{{z{{{{{{{zz{{{{{{{{{{{{{{zz{{{{zz{zz{{{{{zz{{{{{{{{{{{{=\n{{{{zz{{{{{zz{{{{{{{{{{{{z{{{{zz{{zz{{zz{zz{{zz{zz{{{zz{{zz{zz{{{{{{zz{{{=\n{{{{z{{zzz{{zz{{{zz{{{z{{zzz{{zz{{{zz{{{{{{{{{{zz{{zz{{{{{{{{zz{zz{{{{{{{=\n{{{{{{{{{{{{{z{{{{zzz{zz{{zz{{zz{z{zz{{zz{zz{{zz{{zz{{zz{{zz{zz{{{{{{zz{{=\n{{{{{{zz{{{zz{zz{{zz{{zz{{{zz{{{{{{zz{{zz{{{zzz{{zz{zzz{{{{{{zz{{zz{{zz{{=\nzz{zzzzz{zz{{{zz{z{zz{{zz{zz{{zz{{{{{{zz{{{{zz{{{zz{{zz{{z{{{{{zz{{zz{{{{=\nz{{{{{z{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{zzzzzz{{zzz{{{{{{{{{{{{{{z=\nz{{{zz{{zzz{{z{zzz{{z{{{{{{{{{{{zzz{{{{{zz{{{{{{{{{{{zz{{{{zz{zz{{zz{{zz{=\nzzz{zz{zzz{{zz{{zzz{zz{zz{{{{{{{zz{{zz{{{zz{{{zz{{zz{{zz{{{zz{{{zz{{{{zz{=\n{{{zz{zzzz{zz{zz{zz{zz{z{{{{{{{{{{{{{{{{{{z{{{{{zz{zz{{zz{{zzz{{zz{{zz{zz=\n{{zz{{zz{{zz{{zz{zzz{{z{{zz{{{{{{{{zz{{{zz{zz{{zz{{zz{{{zzz{{z{{zz{{zz{z{=\n{zz{{zzz{zzz{{z{{zz{{zz{{zz{{zz{{zz{zzz{{{{zzz{{zz{{zz{zz{{zz{{{{{{zz{{{{=\nzz{{{zz{{zz{zzzzzz{zz{{zz{{{{z{{{{zzzzzz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{=\n{{{{zzzzzz{zz{{{{{{{{{{{{{{{zzzzzzz{{{{zzzz{{{zzzz{{{{{{{{{{{zz{{{{{zzzzz=\nz{{{{{{{{zzzz{{zzzzzz{{zzz{{zzz{{{zzz{zz{{zzz{{zzzz{{zz{{{{{{zzz{{zz{{zzz=\nzzzzzzzzz{{zz{{zzzz{zzzzzzzz{{{{{zzz{{zzzz{{zzzz{{zzz{{{{{{{{{{{{{{{{{{zz=\nz{{{{{z{{zzz{zz{{zz{zzz{{zzz{zzz{zzzzz{{zzzzzzz{zzzz{{zzzz{{{{{{zzzzzzz{{=\n{zzzz{{zzzz{{{zzzz{{zzz{{zzzzzzz{{{{zz{{zzzz{{zzzzzzz{{zzz{{zz{{{{{{{{{{{=\n{zz{zzz{{zzz{zzz{zz{{{{{zz{{zzzzzz{{zzzz{{zzzzzz{{zzzz{{{{{z{{{{zzzzzz{{{=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{zzzzz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{zzz{zzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{=\n{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{{{{{{{{{{{{{zzzz{z{{zzz{=\n{zzzzzzz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zz{{{{{z{{{zz{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{zzzzz{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zzzz{{{{zzzz{{{{{zz{{{{z{{{{{{z{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z=\nz{zz{zz{{{{{{{{{{{zz{{{z{{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{z{{z{{{{z{{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz=\n{{{{{zz{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{=\nzz{{{zzz{{{{{zz{{{zzz{{{{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||||||||=\n||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{z{{{z{{{{{{{{{{z{{{{{z{{{{z{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{z{{{{{{z{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{zz{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{z{{z{{{{{{{z{{{{{{{z{{{{{zzz{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=0D=01=01||~}}|||||||||||||||}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{zzz{{zz{zz{{{{{{{{{{{z{{{{z{{{{{z{{{{{{=\n{{{{z{{{{{{{{{z{{{{z{{{z{{{{{{zz{zzz{zz{zz{{{{zz{z{{zzzz{{{zz{{{{{{z{{{{{=\n{{z{{{{z{{{{{z{{{{{z{{{{{{{{{{{{{{{{zz{zz{{{{zzz{{z{zz{{{z{{{zz{z{{z{zzzz=\n{z{zz{{zz{{zz{zz{zz{zzz{{zz{zz{{{{zzz{{z{zzz{{{{z{zz{{{{zzz{{{z{{z{{{zzzz=\n{{{zzz{{z{zzz{{zzz{{{{{{{zzzz{{{zzz{{zz{zz{zzz{{{{{{{z{{{{{{z{{{zzz{{{{z{=\n{{{{{{{z{{{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~vvvvvv~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{z{{{zz{{z{{zz=\n{zz{{{{{{{{{{zz{{zz{{{{zz{{{{{{{{{z{{{{{{{{{{z{{{{zzzzz{{{{{{{z{{{zz{zz{z=\n{{zz{zz{{z{{z{{zz{{z{{{{{z{{{{{zz{{{{z{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{zz{zz=\n{{z{{z{{zz{zz{z{{{z{{z{{{z{{z{{{zz{zz{{z{{{z{{zz{zzz{zz{{zz{zz{{z{{{z{{zz=\n{z{{{{zz{zz{{z{{{z{{z{{z{{zz{{z{{zz{zz{{zz{z{z{{{z{{{{{zz{{z{{zz{zz{{zz{z=\nzz{zz{{{{{z{{{{{zz{{{{z{zz{{{zzzz{{{{{z{{{{z{z{z{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=\n=01=01||~}}||~~~vvvvv|~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{z{{{{{{zz{{z{{{z{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{z{{{{zzz{=\n{{z{{{{z{{z{{{{{{{z{{{zz{{z{{z{{z{{{z{z{{{z{{z{{zz{{{{{z{{{{{{{z{{{z{{{{{=\n{z{{{{{z{{{{{{{{{{{{{{{{{z{{{z{{zz{{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{=\nz{{z{{{z{{{z{{z{{{z{{zzzzz{{z{{{{{{{z{{{z{{zzzzz{{z{{z{{z{{{{{{z{{{z{{z{{=\n{{zzzzz{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{{{{{z{{{{{{zz{zz{{zz{{{{z{{{{=\n{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~vv||||~~~}}||~~}}{{{{{{{{{=\n{{{{{{{z{{{{zz{{{{{{{{{{{{{{{{{z{{{{{zzzzzzz{{{{z{{{{zz{z{{z{{{z{{zzzzzzz=\n{{{{{z{{{{z{{{{{{{{{{{z{{{{{z{{{z{{{{z{{{{{{{{{{{z{{{z{{z{{z{{z{{{z{{z{{z=\n{{zzzz{{{{{{z{{{{{{{{z{{z{{{{{{{z{{{{{z{{{{{zzzzzzz{{{{{z{{{z{{{zz{{{z{{{=\nz{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{=\n{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{=\n{{{{{{{z{{{{{{z{z{{{{z{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}=\n||~~~v|||||~~~}}||~~}}{{{{{{{{{{{{{{{zzz{{zz{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{z{{{{{z{{{z{{{{z{{{{=\n{{{{{{z{{{{z{{z{{z{{z{{zz{{{zz{{{z{{{{{{{{{z{{{{{{{{z{{z{{{{{{{z{{{{z{{{{=\n{{{{{{{{{{{{{{z{{{z{{{{zz{{z{{{z{z{{z{{zz{{z{{{z{{{z{{{z{{z{{{z{{z{{{z{{{=\nz{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{=\n{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{{{{{{z{{{{{{z{z{{{{z{{{{z{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{zzzz=\nz{{{{{{{{{{{{{{{{{zz{{{z{{{{{{{{{{{z{z{{{zz{{z{{z{{{z{{{{{{{{{{{zz{{{{zz{=\n{{z{{{{{{{{zz{{{z{{{{z{{{{z{{{{{{{{{{z{z{z{{z{{z{z{z{z{z{zz{{{{{zz{{z{{{{=\n{z{{{{z{{z{{z{{{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{z{{{z{{z{{z{{z{{zz{zz{{zz{zz=\nz{{{{z{{{z{{{z{{zz{zz{{z{{{z{{{z{{zz{zz{{zz{{{z{z{{{{z{{z{{zz{{zz{{{z{z{{=\nz{{zz{{{z{zz{zz{{z{{{{zz{{{z{z{{zz{{{z{zz{zz{{z{{{z{{{z{{{{{z{{{zz{{zz{{z=\n{{z{{zz{{zz{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{zzzzzz{{{{{{{{{{{zz{{{{{=\nzzz{zzzz{zzz{{{{{{{{{zz{{{{{zzzzzz{{{{{{{{{zzzz{{{{zzz{{zzz{{{{{{{{{{z{{z=\n{{z{{{z{{{z{{zz{zzz{{{{zzz{{{{{{z{{{{{zz{{{z{{{{{zz{{{{{{z{{{{{{{{{{{{{{{=\n{{zzz{zzz{zzz{{{zzzz{{{z{{{{{{{{{{{{{zzzzz{zzz{{zz{zzzzz{zzz{zzz{z{zz{{{{=\nzzzz{zzz{{{z{{zzzz{{{{zzzz{zzzzzz{{zzzz{{{zzz{{zzz{{{{zzzz{{z{{{zzzz{{{zz=\nz{{zzz{zzz{zzz{{{{{z{{{zzzz{{{zzz{{{{zzzz{{{zzzzz{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||}}}}}}}}}}}}}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}|}}}}=\n}}}}}}}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=\n=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{zzzz{{{zzz{{{{{{{{{{{{{zzzz{z{{zzz{{zzzzzzz{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{zzz{{{{{z{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\n{{{{{{{{{zzzzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{z{{{{{{zz{zzzzzz{{zzz{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zz{zz{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{zz{zz{{{{{{{{{{{zz{{{z{{{{z{{{{=\nz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{z{{z{{z{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz{{{{{zz{{{z{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zz{{{{{zz{{z{{{{z{zz{zz{{{z{z{z{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{zz{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{=\nz{{{z{{{{{{{{{{z{{{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{z{{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{zz{{{=\n{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\nz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{=\n{{{z{{{{{{{{z{{z{{{z{{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{=\n{{{zzz{{zz{zz{{{{{{{{{{{z{{{{z{{{{{z{{{{{{{{{{z{{{{{{{{{z{{{{z{{{z{{{{{{z=\nz{zzz{zz{zz{{{{zz{z{{zzzz{{{zz{{{{{{z{{{{{{{{z{{{z{{{{{z{{{{{z{{{{{{{{{{{=\n{{{{{zz{zz{{{{zzz{{z{zz{{{z{{{zz{z{{z{zzzz{z{zz{{zz{{zz{zz{zz{zzz{{zz{zz{=\n{{{zzz{{z{zzz{{{{z{zz{{{{zzz{{{z{{z{{{zzzz{{{zzz{{z{zzz{{zzz{{{{{{{zzzz{{=\n{zzz{{zz{zz{zzz{{{{{{{z{{{{z{z{{{z{{{{{{{{{z{{{{{{z{{{{zzz{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{z{{{zz{{z{{zz{zz{{{{{{{{{{zz{{zz{{{{zz{{{{{{=\n{{{z{{{{{{{{{{z{{{{zzzzz{{{{{{{z{{{zz{zz{z{{zz{zz{{z{{z{{zz{{z{{{{{z{{{{{=\n{{z{{{z{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{zz{zz{{z{{z{{zz{zz{z{{{z{{z{{{z{{z{{=\n{zz{zz{{z{{{z{{zz{zzz{zz{{zz{zz{{z{{{z{{zz{z{{{{zz{zz{{z{{{z{{z{{z{{zz{{z=\n{{zz{zz{{zz{z{z{{{z{{{{{zz{{z{{zz{zz{{zz{zzz{zz{{{{{z{{{{zz{z{{{zzzz{{{{{=\nz{{{{{{zz{{{z{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{zz{{z{=\n{{z{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{z{{{{zzz{{{z{{{{z{{z{{{{{{{z{{{zz{{z{{z=\n{{z{{{z{z{{{z{{z{{zz{{{{{z{{{{{{z{{{{z{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{z{{{z=\n{{zz{{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{zzzzz{{z{=\n{{{{{{z{{{z{{zzzzz{{z{{z{{z{{{{{{z{{{z{{z{{{{zzzzz{{{{{z{{{{{{z{{{z{{z{{{=\nz{{{z{{{{{z{{{{z{{z{{zz{{zz{{{{z{{{{{{z{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{z{{{{zz{{{{{{{{{{{{{{{{{=\nz{{{{{zzzzzzz{{{{z{{{{zz{z{{z{{{z{{zzzzzzz{{{{{z{{{{z{{{{{{{{{{{z{{{{{z{{=\n{z{{{{z{{{{{{{{{{{z{{{z{{z{{z{{z{{{z{{z{{z{{zzzz{{{{{{z{{{{{{z{{{{z{{{{{{=\n{z{{{{{z{{{{{zzzzzzz{{{{{z{{{z{{{zz{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{=\nz{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{=\n{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{{z{{z{{{{z{{{z{{{{{{z{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{zzz{{zz{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{{=\n{{{{z{{{{z{{{{{{{{{{{{z{{{{{z{{{z{{{{z{{{{{{{{{{z{{{{z{{z{{z{{z{{zz{{{zz{=\n{{z{{{{{{{{{z{{{{{z{{{{{z{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{z{{{z{{{{zz{{z{{{=\nz{z{{z{{zz{{z{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{=\n{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{=\n{{zzzzzz{z{{{{z{{{z{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{{{zz{{{z{{{{{{{{{=\n{{z{z{{{zz{{z{{z{{{z{{{{{{{{{{{zz{{{{zz{{{z{{{{{{{{zz{{{z{{{{z{{{{z{{{{{{=\n{{{{z{z{z{{z{{z{z{z{z{z{zz{{{{{zz{{z{{{{{z{{{{z{{{z{z{{{{z{{z{{{{{z{{{{{{=\n{{{{{{{{{{{{z{{{z{{z{{z{{z{{zz{zz{{zz{zzz{{{{z{{{z{{{z{{zz{zz{{z{{{z{{{z{=\n{zz{zz{{zz{{{z{z{{{{z{{z{{zz{{zz{{{z{z{{z{{zz{{{z{zz{zz{{z{{{{zz{{{z{z{{z=\nz{{{z{zz{zz{{z{{{z{{{z{{{{{z{{{{{{{z{{zz{{zz{{z{{{{{zz{{{z{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{zzz{{=\n{{{{{{{{{{{{{{{{zzzzzz{{{{{{{{{{{zz{{{{{zzz{zzzz{zzz{{{{{{{{{zz{{{{{zzzzz=\nz{{{{{{{{{zzzz{{{{zzz{{zzz{{{{{{{{{{z{{z{{z{{{z{{{z{{zz{zzz{{{{zzz{{{{{{z=\n{{{{zzzzz{z{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{zzz{zzz{zzz{{{zzzz{{{z{{{{{{{{{=\n{{{{zzzzz{zzz{{zz{zzzzz{zzz{zzz{z{zz{{{{zzzz{zzz{{{z{{zzzz{{{{zzzz{zzzzzz=\n{{zzzz{{{zzz{{zzz{{{{zzzz{{z{{{zzzz{{{zzz{{zzz{zzz{zzz{{{{{z{{{{{{z{{{zzz=\nz{{{z{{{{{zzzzzz{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzz{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzz{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{{{{{{{{{{{{{zzz=\nz{z{{zzz{{zzzzzzz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zz{{{{{z=\n{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{zzzzz{{{{{{{{zz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{zzz{{{zzzz{{{{{{z=\n{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{{zz{zz{zz{{{{{{{{{{{zz{{{z{{{{z{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{zz{{{{{zz{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{zz{{{zz{zz{zz{{zz{{{{zz{{{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{z{{{z{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{z{{{z{{{{{{{{{{z{{{{{z{{{{z{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{z{{{{{{z{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{zz{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{{{z{{{z{z{{{{z{{{{zz{{{{zzz{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{zzz{{zz{zz{{{{{{{{{{{z{{{{z{{{=\n{{z{{{{{{{{{{z{{{{{{{{{z{{{{z{{{z{{{{{{zz{zzz{zz{zz{{{{zz{z{{zzzz{{{zz{{{=\n{{{z{{{{{{z{{{{{z{{{{{z{{{{{z{{{{{{{{{{{{{{{{zz{zz{{{{zzz{{z{zz{{{z{{{zz{=\nz{{z{zzzz{z{zz{{zz{{zz{zz{zz{zzz{{zz{zz{{{{zzz{{z{zzz{{{{z{zz{{{{zzz{{{z{=\n{z{{{zzzz{{{zzz{{z{zzz{{zzz{{{{{{{zzzz{{{zzz{{zz{zz{zzz{{{{{{{z{{{{z{z{{{=\nzz{{z{z{{{{z{{{z{z{{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{z{{{=\nzz{{z{{zz{zz{{{{{{{{{{zz{{zz{{{{zz{{{{{{{{{z{{{{{{{{{{z{{{{zzzzz{{{{{{{z{=\n{{zz{zz{z{{zz{zz{{z{{z{{zz{{z{{{{{z{{{{{{z{{{{z{{{{zz{{{{{{z{{{{{{{{{{{{{=\n{{{{zz{zz{{z{{z{{zz{zz{z{{{z{{z{{{z{{z{{{zz{zz{{z{{{z{{zz{zzz{zz{{zz{zz{{=\nz{{{z{{zz{z{{{{zz{zz{{z{{{z{{z{{z{{zz{{z{{zz{zz{{zz{z{z{{{z{{{{{zz{{z{{zz=\n{zz{{zz{zzz{zz{{{{{z{{{{zz{z{{{{zzz{{z{{{{z{{zz{z{{{z{z{z{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{zz{{z{{{z{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{=\nz{{{{zzz{{{z{{{{z{{z{{{{{{{z{{{zz{{z{{z{{z{{{z{z{{{z{{z{{zz{{{{{z{{{{{{z{=\n{{{z{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{z{{{z{{zz{{{{z{{{z{z{{z{{{z{{{z{{z{{{z{=\n{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{zzzzz{{z{{{{{{{z{{{z{{zzzzz{{z{{z{{z{{{{{{z=\n{{{z{{z{{{{zzzzz{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{{z{{z{{{z{{zz{z{{{{z=\n{{z{{z{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{z{{{{zz{{{{{{{{{{{{{{{{{z{{{{{zzzzzzz{{{{z{{{{zz{z{{z{{{z=\n{{zzzzzzz{{{{{z{{{{z{{{{{{{{{{{z{{{{{z{{{z{{{{z{{{{{{{{{{{z{{{z{{z{{z{{z{=\n{{z{{z{{z{{zzzz{{{{{{z{{{{{{z{{{{z{{{{{{{z{{{{{z{{{{{zzzzzzz{{{{{z{{{z{{{=\nzz{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{=\n{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{=\n{z{{{{{z{{{z{{{z{{{z{{{z{z{{{{z{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{zzz{{zz{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{z{{{{{z{{{z{=\n{{{z{{{{{{{{{{z{{{{z{{z{{z{{z{{zz{{{zz{{{z{{{{{{{{{z{{{{{{z{{{{z{{{{{{{z{=\n{{{z{{{{{{{{{{{{{{{{{{z{{{z{{{{zz{{z{{{z{z{{z{{zz{{z{{{z{{{z{{{z{{z{{{z{{=\nz{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z=\n{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{z{{{zzzzzz{{z{{{z{z{{{{z{zzzzzz{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{zzzzz{{{{{{{{{{{{{{{{{zz{{{z{{{{{{{{{{{z{z{{{zz{{z{{z{{{z{{{{{{{{{{{z=\nz{{{{zz{{{z{{{{{{{{zz{{{z{{{{z{{{{z{{{{{{{{{{z{z{z{{z{{z{z{z{z{z{zz{{{{{z=\nz{{z{{{{{z{{{{{{z{{{z{{{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{z{{{z{{z{{z{{z{{zz{z=\nz{{zz{zzz{{{{z{{{z{{{z{{zz{zz{{z{{{z{{{z{{zz{zz{{zz{{{z{z{{{{z{{z{{zz{{zz=\n{{{z{z{{z{{zz{{{z{zz{zz{{z{{{{zz{{{z{z{{zz{{{z{zz{zz{{z{{{z{{{z{{{{{z{{{{=\n{{{z{{{zz{zz{zz{{zz{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{zzzzzz{{{{{{{{{{=\n{zz{{{{{zzz{zzzz{zzz{{{{{{{{{zz{{{{{zzzzzz{{{{{{{{{zzzz{{{{zzz{{zzz{{{{{{=\n{{{{z{{z{{z{{{z{{{z{{zz{zzz{{{{zzz{{{{{{z{{{{{zzz{{z{{{{{zz{{{{{{z{{{{{{{=\n{{{{{{{{{{zzz{zzz{zzz{{{zzzz{{{z{{{{{{{{{{{{{zzzzz{zzz{{zz{zzzzz{zzz{zzz{=\nz{zz{{{{zzzz{zzz{{{z{{zzzz{{{{zzzz{zzzzzz{{zzzz{{{zzz{{zzz{{{{zzzz{{z{{{z=\nzzz{{{zzz{{zzz{zzz{zzz{{{{{z{{{{{{z{{{{zzz{{{zzzz{{{{{{z{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=\n=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}|||||||||||||||||||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~~~=\n~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~~~~~~~~~~~~~~=\n~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||||||~}}=01=01=E0\\=01=01=\n||~~~~~~~~~~~~~~~~~~~~~~~}|||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||~}}=01=01=00=0D=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=F4=88=01=01||}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}=01=01=F6=C0=01=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=A4=1C=01=01zzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=01=\n=01=01=01||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||=01=01=8C=AC=01=01|||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||}=01=01=00=0D=01=01||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}=01=01=E8=04=01=01||~~~~~~~~~~~=\n~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~}}=\n=01=01=00=00=01=01||~||||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~|||||||||||||||||||}~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=\n=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~||~~~=\n~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=F6=C0=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~||~~~~~}}}}}}~~~=\n~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=01=01=01||~||~~~~~}}}}}|~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~||~~~~~}}||||~~~~~}}~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01=\n||~||~~~~~}|||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{zzzzz{{{zzzzz{{{{{{{{{zzz=\nz{{zzzz{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{zzzzz{{=\n{{zzzz{{{{{zzzz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{=\n{{{{{{{zzz{{{{{zzz{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{=\n{{{{{{zzz{zz{{{{{{{{{{{zz{{zzz{{zzzzzz{{{zzzzzz{{{{zzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~||~~~~~~=\n~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{{{{{{{{{{zzz{{{zzz{{{{=\n{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{z{{{{zzz{{{{{{{{{{{{{zzz{{{zz{zz{{zzzz{zz=\n{{zzzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=00=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{=\n{{{{zzz{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zzz{{=\n{{{{{{{{{{{zzz{{{zz{z{{{{zzz{z{{{{zzz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{=\n{{{{{{{zzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{{=\n{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zzz{{{{zz{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{=\n{{{{{{{{{{{{{{zzz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{{{{{{{{{z{{{{{=\n{{zz{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~||~~~~~~~~~~~~~~~~}=\n}~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{{{zzzz{{{zzz{{{zzz{{{{zzzz{{{{{{{=\n{{{{zzzz{{{{zzzz{{zzzzzz{zzzzzz{{{{{{{{{{{zzzz{{zz{{{{{{zzz{{{{{{zzz{{{zz=\n{{{{zzzz{{zzz{zzz{{zzzzz{{zzz{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{z{z{{{{{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0=\n\\=01=01||~||}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{{zz{=\n{zz{{zzz{{{zzz{{{zz{{zz{{{{{{{{{{{zzz{{{zz{{zz{{zzz{{{{zzz{{{{{{{{{{{{{{z=\nzzzzz{{{{{{{zzz{{{{{{zzz{{zz{{{{zz{{zz{{zzz{zz{zz{{zz{{zzz{{{{{{{{{{z{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{{=\n{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~|}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{=\n{{{{{{{{{{{{{{zzzzzzzzzzz{{zzz{{zzz{zzz{{{zzz{{zzz{{zzz{{{{{{{{{{zzz{{zzz=\n{{zzz{zzz{{{{zzz{{{{{{{{{{{{{{{zzzzz{{{{{{{zz{{{{{{{zz{{{{{{{{zzz{{zzz{zz=\nz{{{{zzz{{z{{zzz{{{{{{{{{{z{{{{{{zz{zz{zzz{{{{{{{zzz{{{zzz{{zz{zz{{{{zzzz=\n{zz{zz{zz{{{{zzzz{{{{zzzz{z{zz{{zz{{{zzz{{{{zz{zz{zzz{{{{zzz{{{{zzz{{{zzz=\n{{{zzz{{{{zzzz{{{zzz{{{{{{{{{{zzz{{zz{{zz{zzzz{{{{z{zz{{{{zzz{{{{zzzz{{{z=\nzz{{zz{{zz{{{zzz{{{zzz{{{{{{{z{{{{{{z{zz{{{{zzz{{{z{zz{{{zzz{{zzz{zzz{{zz=\nz{{{{{zzzz{z{zz{{{{zzz{{zzzz{{{{{z{{{{{{z{zz{{{{zzz{{zzz{zzz{{zzz{{{{{zzz=\nzzz{zz{zz{{zz{{{zzz{{z{zz{{{{zzz{{{{zzzz{{{{{{zzzz{z{zzz{{zzz{{{{zzz{{zzz=\nzzz{zz{zz{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~~=\n~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{zzzzzzzz{zzz{{{=\nzzz{{zzz{{zzz{{{{{{{{{{zzz{{zzzzzzzz{zzz{{{{zzz{{{zzzzzzzzz{{z{zzzzz{{{{{=\nzz{{{{{{{zz{{{{{{{{{zzzzzzzz{zzz{{{{zzzz{{{{{z{{{{{{{{{{{z{{{{{{{zz{zzz{z=\nz{{{{{z{{z{{z{{{z{{zz{zz{{zz{{z{{z{{zz{zz{{zz{z{{{{{{z{{{zz{zz{{z{{z{{z{{=\n{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{{{{{{{zz{zz{{z{{{z{=\n{z{{{{{{zz{zz{{z{{{z{{zz{{z{{zz{{z{{z{{{z{{z{{z{{z{{{z{{{{{{z{{{{{{zz{zz{=\n{z{{{z{{z{{z{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{zz{zz{{zz{{z{{z{{{{{{{z{{{{{{zz=\n{zz{{zz{{z{{z{{{z{{z{{{z{{{{{z{{{z{{zz{zz{{z{{z{{z{{zz{zz{{z{{{z{{zz{{z{{=\n{{{zz{{z{{zz{z{z{{{z{{zz{{z{{z{{{z{{zz{zz{{zz{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F6=C0=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{=\n{{{zzz{{{{{zzz{{zzz{{{{{{zzz{{{zzz{{zzz{{zzz{{{{{{{{{{zzz{{zzz{{{{{{zzz{{=\n{{zzz{{{zzzzzzzzz{zz{{{zzzz{{{zz{{{{{{{zz{{{{{{{{{{zzz{{{{{{zzz{{{{{zzzz{=\n{{{z{{{{{{{{{{{z{{{{{{{z{{{z{{{z{{{{{zz{{{{zzzzz{{z{{{z{{z{{{z{{z{{z{{{z{=\n{z{{{z{{{{{z{{{z{{{z{{z{{zz{{{{{{{z{{{z{{{z{{zzzzz{{zz{{{{zz{{{{{{{zz{{z{=\n{{z{{zzzzz{{{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{zzzzz{{z{{{{{{{{{zz{{z{{{z{=\n{zz{{{{zzzzz{{{{{{z{{{{{{z{{{z{{zzzzz{{z{{z{{zzzzz{{z{{{z{{zzzzz{{{{{z{{{=\nz{{{z{{{{{zz{{z{{{{{{{z{{{{{{z{{{z{{{{{zz{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{z{=\n{z{{zz{{{{z{{{z{{zzzzz{{z{{{z{{{{{z{{{{{{z{{{{zzzzz{{{{{zz{{z{{{z{{z{{{z{=\n{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~~~~~~~~~~~~~=\n~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{zzz{{{{{{zzz{{{zzz{{zzz{{z=\nzz{{{{{{{{{{zzz{{zzz{{{{{{zzz{{{{zzz{{{{{{{{{{{{{zz{{{{zzz{{zz{{{z{{{zz{{=\n{z{{{{{{{zzz{{{{{{zzz{{{{{{zzzz{{{{{{{{{{{{{{{z{{{{{{{z{{{z{{{z{{{{{{zz{{=\n{z{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{zz{{z{{{{{z{{{z{{{z{{z{{{zz{{{{{{z{{{z{{{=\nz{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{=\n{z{{z{{{{{{z{{{{{{{zz{z{{z{{{z{{{zz{{{z{{{{{{{{{{z{{{{{{z{{{z{{z{{{{{{z{{=\nz{{z{{{{{{{z{z{{{z{{{{{{{{{z{{{z{{{z{{{zz{z{{z{{{{{{{z{{{{{{z{{{z{{{zz{z{=\n{{z{z{{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{zz{{{z{{{z{{z{{{{{{z{{{z{{{{{z{{{{{{z=\n{{{{z{{{{{{{zz{z{{z{{{z{{z{{{z{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{z=\nzz{{zzz{{{{{{zzz{{{zzz{{zzz{{zzz{{zzz{{{{{zzz{{zzz{{{{{{zzz{{{{zzz{{{{{{{=\n{{{{{{zz{{{{zzz{zz{{{zz{{zz{{{zz{{{{{{{zzz{{{{{{zzz{{{{z{{zzz{{zzz{{{{{{{=\n{{{z{{{{{{{z{{{z{{{z{{{{{{{zz{{z{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{{zzz{{{{{{z=\n{{{z{{{z{{z{{{{zz{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{{z{{{z{{{zzz{{{z{{{{{{=\n{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{{zz{{z{{{{=\n{{{{{{z{{{{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{{z{z{{{z{{{{{{{{{z{{{z{{{z{{z{{{z=\n{{z{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{z{{{z{{{{{{{{{z{{{z{{z{{{z{{z{{{{zz{{z{=\n{{z{{z{{{{{{z{{{z{{{{{z{{{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{zzz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}}}}}}}}}}}}}}}}}}}~~}}=\n{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{{zzz{{zz{zzz{{{zzz{{{zz{{zz{{{zzz{{{{{=\nzzz{{{zzz{{zz{zzz{z{{zzz{{{{{{{{{{{{{{zz{{{zz{zzzzzzzz{zzzzzzzz{{{{{{{{zz=\nz{{zz{zzz{{{{zz{{zz{{zzz{{{{{{{{{{z{{{{{{{z{{{z{{{z{{{{{z{{z{{zz{{{z{z{{{=\nz{{zz{zz{{z{{z{{{z{{{z{{{{{{{{z{{{z{{{z{{z{{z{{z{{{{{z{{{z{{{z{{zz{{{z{z{=\n{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{{{{zz{zz{{zz{zz{{z{{{{{{z{{zz{{zz{{{z{z=\nz{{{z{zz{{z{{zz{zz{{z{{z{{zz{{{z{{{{{z{{{{{{z{{zz{{zz{{{z{z{{z{{zz{{{z{{{=\nz{{{{zz{{{z{{{{z{{{z{{{z{{zz{{z{{z{{{{{{{z{{{{{{z{{{z{{zz{{z{{{{z{{{{zz{{=\n{z{{{{z{{{z{{z{{{z{{z{{z{{z{{z{{{z{{zz{{{z{zz{zz{{{{{zz{{{z{z{{{{zz{{{z{z=\nz{{z{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=\n=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{zzzzz{{{zzzzz{{{zzzzz{=\nzzzzz{zzzzz{{{zzzz{{{{zzz{{{{zzzzz{{{zzzzz{{{zzz{{zzzzz{{{{{{{{{{{{{{zzzz=\n{{{zzzzzzzz{zzzzzzzz{{{{{{{{{zzzzz{zzzzz{{{zzzzz{{{zzz{{{{{{{{{zzz{{{{{zz=\nz{zzz{zzz{{{{zzz{{{{zzzz{zzz{zzz{{zzz{zzzzzzz{zzz{{zzzz{{{{{{zzzzz{zzzzzz=\n{zzz{{{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zzzz{{{{{{{{{zzz{{=\n{{zz{zz{{zz{{{{zzzz{{{{zzzz{{{zzzz{{{zzz{z{{zz{zz{zzz{{{{zzzz{{{{{zzz{{{{=\n{zzzz{{{{zzzz{zzzzzz{{zzzz{{{{z{{{{{zzzz{{{{{{zzzzz{zzz{{zzz{z{{zz{{{{zzz=\n{{{{zzz{zzz{{zzz{z{{{z{{{{{zzzz{{{{zzzzzzzzzz{zzzzzz{zzz{{zzz{zzz{{zzzz{{=\n{zzz{z{{{{{zzzz{zzz{{{{zzzz{{{zzz{z{{zzzzzzzz{zzz{{zzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{=\n{{zz{z{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{z{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{zzz{{{{{{zzz{zzzzzzzz{{{{{{zzz{zzzzzzzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{zzz{{zzzzz{{{{{{=\n{{{{{{{{{{{{{{zzz{{zz{{{{{zz{{{{zz{{z{zz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zzz{{zzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{z{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{zz{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{zz{{{{{zzz{{{zz=\n{{{zz{{{{{zzz{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{z{{{{z{{{{z{{z{{{{{{{{{{{{{z{{{{{{{z{{{{z{{{{{{z{{{{{z{{z{{z{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{z{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{zzzz{{{z{zz{{{zz{{zzzz{{{z{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{zz{{{z{{{zz{{z{{{{{{{{{{{{{z{{{=\n{{{{z{{{z{{{{{{{z{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zz{zz{zzz{=\n{{{zzz{{{{zzzz{zz{zzzzzz{{{zzz{{{{zzzz{{{{zzz{zzz{{zzz{{z{zzz{{zzz{zz{{{z=\nzz{{zz{zz{{{{{{{zzz{{zzzz{{{{{{{{{z{{z{{{zz{zz{{{zz{z{{z{zz{{{zz{{zz{{z{{=\nzz{{{zzzz{z{zz{{{{zzz{{zzzz{{{zz{{{zzz{{{{{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{=\n{{zz{{{z{{{{{{{{{{{{{zzz{zz{zz{zzz{{{{zzz{{z{zzzzzzz{{{{{{{{{{{{{{{{{{{{z=\n{{{z{{{z{{{z{zz{{{{zzz{{zzzz{{{{{z{{{{{{{{zzzz{{{{{z{zz{{z{{zz{{{zzz{{{{{=\nzz{{{zzz{{{{zzzz{{zzz{{{{zzz{{{{zzzz{{z{zz{{{{zzz{{{{zzzz{{z{{zz{{{{{{{{{=\n{{{z{{{{z{{{{zzz{{zzz{zzz{zzz{{{{{zzzz{{{zzz{{{{zzz{{{{zzz{{{{zzzz{z{zz{{=\nzz{{{zzz{{{{zz{zz{zzz{{{{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{zz{{z{{{{{zz{zzz{zz{{zz{zz{{zz{{z{{z{{z{{{z{{z{{{z{{zz{{z{{{{=\n{z{{{z{{z{{{z{{zz{z{z{{z{{z{{zz{zz{{zz{zz{{{{{zz{zz{{z{{{{{{{{{{{z{{z{{{{=\nzz{z{{z{{zz{{{z{{{zz{{z{{z{{z{{z{{{{{z{{{zz{zz{{zz{{z{{z{{{{{{z{{z{{z{{{{=\n{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zzzzzz{{{{{{{{{{{{z{{z{{zz{zzz{zz{{zz{{z=\n{{zz{z{z{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{zz{zz{{zz{{z{{z{{{{{{{z{{{{{{{z=\nz{{z{{{{{z{{z{{z{{z{{{z{{{z{{{{{z{{z{{z{{{{{z{{{z{{{z{{z{{{z{{zz{{z{{zz{z=\nz{{zz{{z{{zz{{z{{z{{z{{{{{{{{{{{{{zzzzzz{{{zz{zz{{z{{{z{{{z{{{{{zz{{z{{zz=\n{zz{{z{{{z{{z{{z{{{{{z{{{zz{zz{{z{{z{{z{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{=\n{zz{{z{{zz{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{z{{{z{{z{{{z{{z{=\n{{z{{z{{z{{{z{{zzzzz{{z{{{z{{{{{z{{{z{{zzzzz{{z{{{{zz{{{{z{{z{{{z{{z{{{z{=\n{{{{z{{{z{{z{{{{{{{{{{z{{{z{{{zz{{z{z{{{z{{{z{{{{z{{zz{{z{{z{{z{{{{{z{{{z=\n{{{z{{{{{zz{{z{{{{{{z{{zz{{{{{{{zz{zz{z{{zz{{{zz{{zz{zz{z{{zz{{{zz{{z{{{{=\n{{{{{{{{{zz{{{{z{{{z{{{z{{{{{zz{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{zz{z{z{zz{{{=\nz{{{z{{{{{zz{{z{{{{{{{z{{{{{{{z{{{z{{{{{z{{z{{zzz{{{{zzzzz{{{{{z{{zz{{{{{=\n{{z{{{zzzzz{{zzzzz{{z{{{z{{z{{{z{{{{{zz{{z{{{{{{zzz{{{{{{{{{{{{{{z{{{{z{{=\n{z{{{z{{z{{{z{{{z{{{{{z{{{z{{z{{{z{{zzzzz{{zz{{{{{{{z{{{z{{{z{{z{{zz{{{{{=\n{{z{{{z{{{z{{zzzzz{{zz{{{{zz{{{{{{{zz{{z{{{z{{zzzzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{zz{z{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{{{{z{{{z{{{{{{z{z{{{z{{=\n{{{{z{{{{{zz{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{zzzzzz{{{z{{z{{z{{{z{=\n{{z{{{zzzz{{{{z{{z{z{{{{{{z{{{z{{{z{{{zz{z{{z{{{{{{z{{{zz{{{{{{z{{zzz{{zz=\n{{{zz{{{z{{zzz{{zz{{{zzz{{{{{{{zzzzzzz{{{zz{{{z{{{z{{{z{{{zz{z{{z{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{z{z{z{z{{{{z{{{z{{{zz{z{{z{{{{{{{z{{{{{{{z{{{z{{{{{z{=\n{z{{z{z{{{{z{{{{{{{{{z{{{zz{{{{{{z{{{z{{{{{{z{{{{{{z{{{z{{z{{{z{{{zz{z{{z=\n{{{{{{z{z{{{{{{{{{{{{{{z{{{{z{{{z{{{z{{{z{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{{{=\n{{zz{{{{{{z{{{z{{{z{{z{{{zz{{{{{{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{=\n{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{z{{z{{=\n{z{{z{{{{{{z{{{z{{{{{{z{z{{{z{{{{{{z{{{{{{zz{{z{{z{{{z{{z{{{z{{{{{z{{{z{{=\nz{{{{{{{{{z{{{{z{{{z{{z{{z{{z{{{z{{{{z{{{{{{{z{zz{z{{{{{{z{{{z{{{z{{z{{{z=\n{{z{{{{{{z{{{{zz{{{{{z{{zzz{{zz{{{zz{{{z{{zzz{{zz{{{zz{{{{{{{{{{{{{{{{{{{=\nzz{{z{{{z{{{z{{z{{{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{z{{{z{{z{{{=\nz{{z{{{{{{{z{{{{{{{z{{{z{{{{{z{{z{{z{{z{{{z{{{{{{{{{z{{{{zz{{{{{z{{{z{{{{=\n{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{z{{z{{{{{{{{{{{{{z{{{{z{{{z{{{z{{{zz=\nz{zzz{{{{{{z{{{z{{z{{{z{{z{{{{{{{{zz{{{{{z{{{z{{{z{{z{{{{zz{{{{{z{{{z{{{z=\n{{z{{{{{{{{zz{{{{zz{{z{{{z{{{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{z{=\n{{z{{{z{{zz{zz{{zz{zz{{z{{z{{{z{{zz{{{z{zz{zz{{{{{{{z{{{{zz{{{z{z{{{{z{{z=\n{{z{{zz{zz{{z{{{z{{{{{zz{zz{{z{{{{{{{{z{{{{{z{{z{{z{z{z{zz{z{z{{{{zz{{z{{=\n{zz{zz{{{{{{{z{{{z{{{z{{zz{{z{{z{{{{{{z{{z{{z{{{{zz{{zz{{{zz{{{zz{{zz{{zz=\n{{{zz{{{zz{{{{zz{{{{{{{{{{{z{{z{{z{{{z{{{z{{zz{{z{{z{{{{z{{{z{{{{{{{{{{{{=\n{{{{{{{zz{{{zz{{{{z{{{z{{zz{{z{{z{{{{{{{z{{{{{{{zz{zz{{{{{z{{z{{z{{zz{{zz=\n{{{z{{{{z{{z{{z{{{{{z{{{zz{{{z{zz{{{z{zz{zz{{z{{zz{{zz{{z{{zz{{{z{z{{zz{{=\nz{{{{{{{{{z{{{{z{{{zz{zz{{{{z{{{z{{{{{{{zz{zz{{zz{zz{{zz{{{z{z{{z{{{{{z{{=\n{z{{{z{{z{{z{{z{{{{{z{{{z{{{z{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{zzz{z{{{zzz{zzz{zzz{{zzz{{{{zzz{zzzzzzzzzzz{{zzzz{{{z=\nzz{z{{{{{{z{{{{{zzzz{zzz{{{zzz{{zzz{{zzz{{zzz{zzz{{{{{zzz{{zzzz{{{{{zzz{{=\n{zzz{z{{{z{{{z{zz{{z{{{{{zzz{{{{z{{z{{{{{{{{{zzzzz{zzz{{zzz{z{{zz{{{zzz{z=\nzz{{{{zzz{{zz{{zzzzzzzzzzzz{{zz{{zzzz{zzzzzzzz{{{{{{{{{{{{zzz{{zzz{zzz{zz=\nz{{zzz{zzzz{{{{zz{z{{{{{{{{{{{{{{{{{{{{z{{{z{{{{zzz{zzz{{zzz{z{{zz{{{{zzz=\n{{{{{{{zzz{z{{{zzzzzzzzz{{zz{{zzzz{{{{zzz{zzz{{{{{zzzz{{zzzz{{{zzzz{{{zzz=\n{z{zzzz{{{{zzz{z{{zzzz{zzz{{zz{z{{{{{{{{zzz{{zzz{{{zzz{{{{{z{{{z{{{{{{{{z=\nzz{z{{zzz{{{{zzzz{{zzz{{{{{{{zzzzz{zzzzzz{zzz{{{{{zzz{zzz{zzz{{zzzz{{zzz{=\n{{zzz{{{{zzz{z{{zzzz{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{zzz{zzzz=\nzzzz{{{{{{zzz{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{zzz{zzzzzzzz{{{{{{zzz{zzzzzzzz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\nz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{{{{zzz{{{zz{{{zz{{{{{zzz{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z=\nzz{{{zz{{{zz{{{{{zzz{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{z{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{z{zz{{{zz{{zzzz{{{z{zz{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zzzz{{{z{zz{{{zz{{zzzz{{{z{zz{{{zz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}=\n}{{{{{{{{{{{{{{{{{{{{{z{{{zzz{{{{zzz{{{z{{zz{{{{zzzz{{zzz{{{{{zzz{zzz{{zz=\nz{{zz{{zz{{{{{{{zz{{zz{{{zzz{zz{zz{zz{{{{zzzz{{{{{{zzz{{zz{zzzz{z{zz{{{{z=\nzz{{z{zzz{{{{{{zzz{zzz{{zzz{{zz{{zz{z{zzz{{{{{zzz{{zzz{zzz{zzzzz{zz{{{{{{=\n{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zz{{{z{{{{{{{{{{{{{zzzz{{{zzz{{zz{zz{zzz{=\n{zz{zz{{{z{zz{{{zzz{{zz{zz{{zzzz{{{zz{zz{zzz{{{{zzz{{zz{{z{{{{z{zzz{{zzz{=\n{{{zzz{{{{zzzz{{{zzz{{z{zzz{{zzz{{{{{{{{{zzz{{z{zzz{{{{{{{{zzz{{{z{{{zzzz=\n{{{zzz{{z{zzz{{{{{{zz{zz{{{{zzz{{zz{zz{{{{{{{{{{{{{z{zz{{z{zz{{{zz{{{z{zz=\n{{z{zz{{{zz{{{z{{{{{z{zzz{{zzz{{{{zzz{{{{zzzz{{{zzz{{z{zzz{{zzz{{{{{z{{{{=\n{{{{{{{z{z{{{{z{zzz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{zz{zz{{zz{zz{{z{{z{=\n{{{{{z{{{zz{zz{{{{{z{{{z{{zz{zz{{z{{{z{{{{{{{{z{{{z{{z{{z{{z{{zz{zz{{zz{z=\n{{{{{{z{{{z{{z{{z{{{zz{zz{{z{{{z{{zz{z{{{{{{{z{{{z{{zz{zz{{z{{{z{{zz{z{{{=\n{zz{zz{{z{{{z{{{z{{zz{zz{{{{{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zzzzzz{{{{{{=\n{{{{{{zz{{z{{zz{zz{{zz{zzz{zz{{zz{zz{{z{{z{{zz{{z{{zz{zz{{z{{{{{{zz{zzz{z=\nz{{zz{{z{{z{{z{{{{{zz{z{z{{{z{{zz{{z{{zz{{z{{z{{{z{{zz{z{z{{z{{{{{{{{zz{z=\nz{{zz{z{{{{{{{zz{zz{{z{{zz{{z{{z{{{z{{zz{z{{{{{{{zz{zz{{zz{zz{{zz{zz{{{{{=\n{{{{{{{z{zz{{z{zz{{{zz{{{z{zz{{z{zz{{{zzzzzz{{{{{{zz{z{z{{{z{{zz{{z{{zz{{=\nz{{z{{{z{{zz{z{z{{z{{{{z{{{{{{{{{{{z{{{z{{{{zz{z{z{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{{z{{{z{{z{{{z{{zzz{{{{{{{z{{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{=\n{{{{z{{{z{{zz{{{{z{{z{{{z{{z{{{z{{{{{zzzzz{{z{{z{{{z{{{z{{zzzzz{{z{{{{{{{=\n{{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{zz{zz{z{{zz{{=\n{zz{{zz{zz{z{{zz{{{zz{{z{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{z=\n{{{{{zz{{z{{{z{{z{{{{{{z{{{z{{{z{{{{{zz{{z{{z{{{{{z{{{{zzzzz{{{{{zz{{z{{{=\nz{{zzzzz{{z{{{{zz{{{{{{{{{{z{{{z{{z{{{{{{{{{{z{{{z{{z{{z{{{z{{zzzzz{{z{{{=\n{{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{zz{zz{z{{zz{{{zz{{zz{zz{z{{zz{{{zz{{=\nz{{{{{{{z{{{{zzzzz{{{{{zz{{z{{{z{{zzzzz{{z{{{{zz{{{{{z{{{{{{{{{{{{z{{{z{{=\n{{z{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{z{{z{z{{{{{{{z{{{z{=\n{{z{{{{{{z{z{{{z{{{z{{z{{{z{{{{{{{{z{{{z{{{zz{{{z{{z{{{z{{zz{{z{{{{{z{{{{=\n{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{{{{{z{z{{{z{{{z{{z{{{z{{z{{{{{{{z{{{z{{{z{=\n{z{{z{{{z{{{z{{{{{z{{zzz{{zz{{{zz{{{z{{zzz{{zz{{{zzz{{{{{{{zzzzzzz{{z{{{{=\n{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{z{{{zz{z{{z{{{z{{z{{{{{{z{{{z{{{z{{{zz{z{{z=\n{{z{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{z{{{{{{z{{{{{zz{{{{{{{{{z{{{z{{z{{{{{{{=\n{{{z{{{z{{z{{z{{{z{{z{{{{{{z{{{{{{{{{{z{{{z{{z{{{z{{z{{{z{{zzzzzzz{{z{{zz=\nz{{zz{{{zz{{{z{{zzz{{zz{{{zzz{{{{{{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{z{{{{{{z=\n{{{{{zz{{{{z{{{{{{{{{{{{zzzzz{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\n{z{{{z{{z{{{z{{z{{z{{{{{{z{{{z{{{z{{{{{{z{z{{{z{{{z{{z{{{z{{{{{{{{z{{{z{{=\n{{zz{{z{{z{{{z{{{zzz{{{{{{z{{{{{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{{{{{z{z{{{z=\n{{{z{{z{{{z{{z{{{{{{{z{{{z{{{zzz{zzz{{{z{{{z{{{{{z{{zzz{{zz{{{zz{{{z{{zzz=\n{{zz{{{zz{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{z{{z{{{z{{z{=\n{{z{{z{{{{{{z{{{z{{{z{{z{{{z{{z{{z{{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{z{{{{{{z=\n{{{{{{zz{{{{{{{{z{{{z{{z{{{{{{{{{{z{{{z{{z{{z{{{z{{z{{{{{{z{{{{{{{{{{z{{{=\nz{{z{{{z{{z{{{z{{{{{{{{{{{z{{zzz{{zz{{{zz{{{z{{zzz{{zz{{{zz{{{{{{{{{{{z{{=\n{{z{{{{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{zz{{{{{{{{{{{{{{{z{{{{{z{{{z{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{zz{zz{{zz{zz{{z{{zz{{{{{z{{{zz{zz{{{{{{{z=\n{{{{zz{zz{{zz{zz{{z{{{{{zz{zz{{z{{z{{z{{z{{{z{{{z{{{{{{{{zz{{{z{z{{z{{{z{=\n{{z{{zz{{{z{z{{{{{{{{{{{{z{{{{zz{zz{{zz{zz{{z{{{{{{{zz{zz{{{{z{{{z{{{{z{{=\n{z{{{{zz{{zz{{{zz{{{zz{{zz{{zz{{{zz{{{zz{{{{zz{{{{{{{{{{{zz{{{z{zz{zz{{z{=\n{{z{{{z{{zz{zz{{z{{z{{zz{{z{{z{{{z{{z{{{{{{z{{{z{{{z{{zz{{z{{z{{z{{{{{z{{=\n{{zz{{{z{zz{{z{{zz{zz{{zz{{{z{z{{{{z{{z{{z{{{{{zz{zz{{z{{{{{{{{{{zz{zz{{z=\n{{zz{zz{{zz{{{z{z{{{{{{{{{{z{{{z{{zz{zz{{z{{{z{{{{{{{{{{zz{{zz{{{zz{{{zz{=\n{zz{{zz{{{zz{{{zz{{{{zz{{{{{z{{{{zz{{{z{zz{{z{{zz{zz{{zz{{{z{z{{{{z{{z{{{=\nz{{{{{{{{{{{z{{{{{z{{{z{{{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{zzz{{zzz{{{{zz=\nz{{zzz{{zz{{{{{zz{{zzz{{{{{{{zz{{{{{zzz{{{{zz{zz{z{{{{{{zz{zz{zzz{{zzzzzz=\n{zzz{{zzzz{{{{{{zzzz{zzz{{zzzzz{zzz{{zzzz{zzz{{{{{{{{{{zz{{{{{zzz{{{{zz{z=\nzzzz{{{{{{{zzz{{{{{z{{{z{{{zzz{zzz{{zzz{{zz{{zzzzzzzzzzzz{{zz{{zzzz{zzzzz=\nzzz{{{{{{{{{{{{{zzzz{{{zzz{{zzz{zzz{zzz{z{zz{{zzzzzz{{zzz{zzzz{zzz{{zz{{{=\nzzz{zzz{zzz{{zzz{zzzzzzz{{{zzz{{{{zzzz{{{zzz{z{{zzz{z{{zzzz{zzz{{{zzz{{{z=\n{{{{{{zzz{{zzz{{{{{{{{{{zzz{{zzz{{zzz{z{{zzzz{zzz{{{{{{{{zzz{zzz{{zzz{{zz=\nz{zzz{{{{{{{{zzz{{zz{{zzzzzzzzzzzz{{zz{{zzzz{zzzzzzzz{{{{{zzz{{{{zzzz{{{z=\nzz{z{{zzz{z{{zzzz{zzz{{{zzz{{{{z{{{{{{{{{{zzz{{{zzz{zzz{{{{zzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{=\n{{z{{{{{{{{zz{{{{{{{{{zzz{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{z=\nz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{zz{{zz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{z{{z{{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{z{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{z{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{zzzz{z{zz{{=\n{{zzz{{z{zzz{{zzz{{{{{zzzz{z{zz{{zz{zz{zz{{{{zzzz{{{zzz{{{{zzz{zzz{{zzz{{=\nzz{{zz{{{{zzzz{z{zz{{zz{zz{zz{{{z{{zz{{{{{{z{{{{{{{{{{zzz{{z{zz{{{{zzz{{z=\nz{{zz{{z{{{zzzz{{{{{z{zz{{{{zzz{{{{{{{zzzz{{{zzz{{zz{zz{zz{{{{zzzz{{{{{{z=\nzzz{zz{zzzzzzzz{{zzz{{z{zzz{{zzz{{zz{zz{{zzzz{z{zzz{zzz{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{{{zz{zz{{z{{{z{{zz{z{z{{{z{{{{{z{{{zz{zz{{z{{zz{zz=\n{{zz{z{{{z{{z{{{{{z{{{z{{zz{zz{{z{{{z{{{{{z{{{zz{zz{{z{{zz{zz{{z{{z{{{{{{=\n{z{{{{{{{{{z{{z{{zz{zz{{zz{zz{{z{{{z{{z{{zz{{z{{{{{zz{zz{{z{{{z{{{{{zz{{z=\n{{zz{zz{{z{{zz{zz{{zz{z{{{{{{zz{{z{{z{{z{{{z{{{z{{{z{{zz{z{z{{{z{{zz{zz{{=\nz{{{z{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{zzzzz{{z{{{=\n{zzzzz{{{{{z{{{z{{{z{{z{{z{{{z{{z{{{z{{zz{{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z=\n{{{z{{{z{{z{{z{{{z{{zzz{{{{{{{{z{{{{{{{{{zz{{{{z{{{z{{z{{{z{{z{{{z{{z{{z{=\n{{z{{{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{z{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{z{{{=\nz{{{zzzzz{{z{{{{zzzzz{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{{{z{{{z{{z{{{{{{z{{{{z{{{{{{{{{z{{{z{{{z{{z{{z{{{z{{zz{{z{{{zz=\n{{{{{{{z{z{{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{z{{{z{{z{z{{{{{{{{z{{{{{{{{{{=\nzz{{{z{{{z{{z{{{z{{z{{{z{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{=\nz{{{z{{zz{{z{{{{{z{{{z{{z{{z{{{z{{{z{{{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{{z{z{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{{{{z{{{{z{{{{{{{{{=\nz{{{z{{{z{{z{{z{{{z{{{zzz{{{{{zz{{{{{{z{z{{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z=\n{{z{{{z{{z{{z{{{{{{{z{{{{{{{{{{{zz{{z{{{z{{z{{{z{{z{{{z{{z{{z{{{z{{{{{z{{=\n{z{{z{{{{{{{{{z{{{z{{z{{{z{{z{{z{{{z{{{zzz{{{{{{z{{{z{{z{{z{{{z{{{z{{{{{{=\nz{{{{z{{{{{{z{{{z{{z{{{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{=\nz{{{z{{zz{{{z{z{{{{zz{{{z{{{{z{{{z{{{z{{z{{z{{{z{{{z{{{{{z{{z{{{{{{{z{{{{=\nzz{zz{{zz{zz{{{{{z{{{z{{{z{{z{{z{{{z{{z{{zz{{{{{{z{{{{{{{{{z{{z{{z{{{z{{z=\nz{zz{{zz{zz{{z{{zz{zz{{{{{z{{zz{{zz{{{z{{{{zz{zz{{zz{zz{{z{{z{{{z{{{z{{{{=\n{{{{zz{zz{{z{{z{{{z{{{zz{{{z{z{{{{zz{{{z{z{{{z{{z{{{z{{{{z{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzzz{zzz{{zzzz{zzz{{{{zzzz{{{{{{zzzzz{zzzzzz=\nzzz{zzz{{zzzz{{zzz{{{{{{{zz{{{{{zzz{{{{zz{zz{{{{{zzzzz{zzzzzzzzz{zzzzzz{{=\nzz{{{{zzz{{{{{{{{zzz{{zzz{zzz{{zzz{{{{zz{zzzzz{{zzz{z{{{{zzzz{{{{zzzz{{{{=\n{{zzz{z{{zzz{{zzzzzz{zzz{{zzzz{{{{{{zzz{zzzzzzzzzzzz{{zzzz{zzz{{{{zzzz{zz=\nz{zzz{{zzzzz{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=\n=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\nzz{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=\n=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{z{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{zz{{{{{=\n{{{{{{{{{{{{{{{{{zz{{{{{zz{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{z{{{{{{{{{=\n{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{z=\nzz{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{z{{{{{{{{=\n{{{{{zz{{{{zz{{z{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{z{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{z{{{{{{z{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{z{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{z{z{{{{{{{{{zzz{zz{zz{{{{zzz{{{{zzzz{zz{{{zzz{{{z{{{{zz{zz{{{{zzz{{=\nzzzz{{zzz{{{{{zzzz{{zzz{{{{{zz{zz{{{{zzz{{{{zzz{{zz{zz{{{z{{{zzz{{{{{z{zz=\nz{{zzz{{{{zzz{{{{zzzz{zz{zz{zz{{{{zzzz{{{{zzzz{z{zz{{zz{{{zzz{{{{{{{zz{zz=\n{zzz{{{{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{zz{{zz{{{zzz{zz{zz{zz{{{=\n{zzzz{{{{zzzz{z{zz{{{{zzz{{{{{{{zzz{{{z{{{zzzz{{{{{{z{{{{{{{{{{{{{{{z{{{{=\n{z{{{{{{{{{{{z{{{{{zzz{zzz{{zzz{{z{zzz{{zzz{zz{{{zzz{{zz{zz{{{{{{{zzz{{zz=\nzz{{{{{{{z{z{{{{zz{zz{{{{zzzz{z{zzz{{zzz{{zzz{zzz{zzz{z{{{{{{{{{{zz{{z{{{=\n{zzz{{{{zzz{{{{{{{{{z{{{{{{{{{z{{zz{zz{zz{{{{zzz{{zzz{zzz{zzz{{{zzzz{z{zz=\n{{zz{{{zzz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{z{{z{{zz{zz{{z{{{z{{zz{{z=\n{{z{{zz{{z{{z{{{{{zz{zz{{zz{zz{{z{{{z{{{z{{{{{z{{{zz{zz{{{{{zz{zz{{z{{{z{=\n{zz{zz{{zz{zz{{z{{z{{{z{{{{{zz{z{z{{{z{{zz{{z{{zz{{z{{z{{zz{zz{{zz{z{{{{{=\n{z{{{zz{zz{{z{{z{{z{{{{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{=\n{{z{{{{{z{{{z{{z{{z{{z{{zz{zz{{zz{z{{{{{{z{{{zz{zz{{z{{{z{{{{{zz{zz{{z{{z=\nz{{z{{{{{z{{{zzzz{{zz{zz{{zzz{{{z{zz{{{zz{{{{z{{{{{z{{{z{{z{{{z{{zz{z{z{{=\nz{{z{{zz{zz{{zz{zz{{{{{zz{zz{{z{{{{{{{{z{{{z{{{{zz{zz{{zz{{z{{zz{z{z{{{z{=\n{z{{{z{{{z{{z{{{{{{{{{{{z{z{{{{z{{{z{{z{{z{{{{{{{{{z{{{{{{{{{z{{z{{{zz{zz=\n{{zz{zz{{z{{{z{{{z{{{{{z{{{zz{zz{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{=\n{{{{{{zz{{{{z{{{z{{zzzzz{{z{{{{{{z{{{{{zz{{z{{{{{z{{{z{{z{{{z{{z{{{zzzzz{=\n{{{{z{{{z{{{z{{{{{z{{{z{{zzzzz{{z{{{z{{z{{{z{{z{{zzzzz{{{{{z{{{{zzzzz{{{{=\n{zz{{z{{{z{{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{zz{{{{{{{{{{z{{{z{{{z{{zzzz=\nz{{zz{{{{zz{{{{{{{zz{{z{{{z{{zzzzz{{{{{z{{{z{{zz{{{{z{{z{{{z{{z{{{z{{{{{z=\n{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{z{{{z{{{{{z{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{{z{{{{{z{{{z{{zzzzz{{z{{{{zz{{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{z{{=\n{z{{{{z{{{z{{z{{{z{{z{{{{zzzzz{{z{{{z{{{z{{{{{{{{{{{{{{{z{{{{{zzzzz{{zz{{=\n{{{{{{{{{z{{{{{{{{{zzz{{{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{z{{{z{{{z{{z{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{zzzzz{{{{{{{{zz{{{z{{{z{{z{{{{{{z{{{{{{z{{{zz{z{=\n{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{z{{{z{{{z{{{{{z{{{z{{z{{{{{{z{{{z{{z{{=\n{z{{z{{z{{{{{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{z{{z{{{z{{zz{{z{{{{{z{{{z{{{z{=\n{z{{{zz{{{{{{{{{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{z{{=\n{z{{{zz{{{z{{z{{{z{{zz{{z{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{z{{{z{{{{{z{=\n{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{{{{{z{{{{{{z{z{{{z{{{{{{z{{{{{zz{{{z{{z{{{z=\n{{z{{{z{{{{{z{{{z{{z{{{{{{{{zzzzz{{{{z{{{z{{z{{{z{{z{{{{z{{{{{{{z{{z{{z{{=\n{{{{{{{{{{{{{{z{{{{{z{{{{{{{zz{{{{{{{{{{z{{{{{{{{{z{z{{{{z{{{z{{z{{{z{{{z=\n{{z{{z{{{{{{z{{{z{{{z{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{z{{{{{{{{zz{{=\nz{{{z{{z{{{{{{z{{{{{{z{{z{{{z{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{z{{{z{{{=\nz{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{z{{{{{{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{=\nz{{z{{{z{{{zzz{{{{{{z{{{z{{{z{{z{{{{zz{{{{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{z=\nz{{z{{{z{{{zzz{{{z{{{{{{{{{z{{{z{{{{zz{{z{{z{{{z{{{zzz{{{{{{z{{{z{{{z{{z{=\n{{{{{{{{z{{{z{{z{{z{{{z{{{{{z{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{{{{{z{{{{{{z{=\nz{{{z{{{{{{z{{{{{{zz{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{z{{{{{z{{{z{{{z{=\n{z{{{z{{z{{{{z{{{{{{{zzz{zzz{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{zz{{{{{{{{{z{{=\n{{{{{{{z{{z{{{z{{{z{{z{{{z{{{zzz{zzz{{{{{{z{{{z{{{z{{z{{{{zz{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{z{{{{{z{{{{{{z{{z{{zz{zz{{zz{{{z{zz{{{z{z{{zz{{z{{z{{{{{z{{{z{{=\nzz{zz{{z{{{zz{{{z{{{{z{{{zz{zz{{{{{zz{zz{{zz{{{z{zz{zz{{zz{zz{{z{{zz{{{z{=\n{{{z{{{{zz{{{z{zz{{z{{zz{zz{{z{{z{{{z{{{z{{{{{{{{z{{{z{{{z{{z{{z{{z{{{{{{=\n{{z{{{z{{{z{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{zz{zz{{z{{z{{z{{z=\n{{{z{{{z{{{{{{{{z{{{z{{{z{{zz{{{z{{{{zz{zz{{z{{zz{zz{{{{{z{{{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{{z{{{{{{{z{{{{zz{{{z{z{{{{z{{z{{z{{zz{zz{{z{{{z{{{{{zz=\n{zz{{z{{{{{{{z{{{{{z{{{z{{{z{{zz{zz{{z{{{{zz{{{z{{{z{{{z{{{{z{{{{{{{{{{{{=\nz{{{{{zz{{{z{z{{z{{z{{{{{{z{{{{{{{{{z{{zz{{z{{{z{{zz{zz{{{{z{{{z{{{{{{{z{=\n{{z{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{zzz{{{zzz{{{{{zzz{{{z{zz{{{{zzzz{=\n{{zzzz{zzz{{zzz{zzzz{{{zzz{zzz{{zzz{{{{zz{{zzzz{{{{{{zz{{zzz{{{{{{z{zz{{{=\n{zzzz{{{zzz{{{z{zz{{zzz{{zzzz{{{{zzz{{{{zzzz{{{zzz{z{{zzz{zzzzzzz{zzz{{zz=\nzz{{{{{{zzzzz{zzzzzz{zzz{{{{{{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zz=\nzz{{{zzzz{{{{{{zz{zz{zzz{{zzzzzz{zzz{{zzzz{{{{{{zzzzz{zzz{{zzzz{{{{{{zzz{=\n{zzz{{zzz{z{{{{{z{{{zzz{{{{zz{z{zzz{{zzzzzz{{zz{{{z{{{{{{{{z{{{{{zzzz{zzz=\n{{{zzz{{zzz{{zzz{{zzz{zzz{{{{{zzz{{zzzz{{{{zzz{{{zzz{zzz{zzz{{zzz{zzzz{{{=\n{zzzz{{{{z{{{z{{{{z{{{{{{{{{{{zzz{{{{{zzzz{{zzz{{{z{{{{{zzz{{{{{{{zzz{{zz=\nzzz{zzz{{zzz{{{{{z{{{z{{{{{{{{zzzzz{zzzzzz{zzz{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{=\n{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{=\n{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{zz{{{{zz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{zz{{{{=\n{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{z{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z=\nz{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{{{{z{{{{{=\n{{{{{{{{{{{z{z{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zzz{{{{zzz{{{{zzz{zz{zz{{{{=\n{{zzzz{{{{z{{{zzz{{{{zzz{{{z{{zz{{{{{{zzz{{{zzz{{{{{{{zzzz{{{zzz{{{{zzz{{=\n{{zzzz{{{{zzzz{{zzz{{{{{zzz{zzz{{zzz{{zz{{zz{{{{{{{{{{{{z{{{z{{{zzz{{zzzz=\n{{zzzz{{z{zz{{{{zzz{{{{zzz{{{{zzz{zzz{zzzzz{{z{{z{{{{{z{zz{{{{zzz{{{{{zzz=\nz{{zzz{{z{zzzzzzz{z{zz{{{{zzzz{{{zzz{{zz{zz{zzz{{zz{zz{zz{{{{zzzz{{{{{{{{=\n{{{{{{z{{{{{z{zz{{{{zzz{{zz{zz{{{z{{zz{{{{{{{zzz{zzz{{zzz{{zz{{zz{{{{zzzz=\n{{zzz{{z{zzz{{{zzz{zzz{{zzz{{zz{{zz{z{zzz{{{zz{zz{{{{zzz{{zzzzzz{{{zzz{{z=\nz{zz{{{{zzzz{{{zzz{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zz{{=\nz{{zz{zz{{z{{{z{{z{{z{{zz{zz{{{{{{z{{{{{{z{{zz{zz{{zz{zz{{z{{z{{{{{{z{{z{=\n{zz{zz{{{{{zz{z{{{zz{zz{{zz{zz{{zz{{z{{{{{z{{{zz{zz{{{{{z{{{z{{zz{zz{{z{{=\n{z{{{{{{{{{{{{z{{zz{{zz{{z{{z{{{zz{{z{{zz{zz{{z{{{z{{z{{z{{{{{z{{{z{{{z{{=\nz{{z{{z{{{{{zz{zz{{z{{{z{{{{{z{{{zz{zz{{zz{z{z{{{zz{zz{{zz{{z{{zz{zz{{zz{=\nzzz{zz{{z{{zz{zz{{zz{z{{{{{{{{{{{{{{{z{{{{{zz{zz{{zz{{z{{zz{zz{{z{{z{{{{{=\n{{{{z{{{z{{zz{zz{{z{{{z{{{{{z{{{zz{zz{{zz{z{{{{z{{{z{{zz{zz{{z{{{z{{zz{z{=\n{{{zz{zz{{zz{{z{{z{{{z{{z{{{z{{zz{zz{{zz{{z{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{z{{zzzzz{{zz{{{{z{{{z{{{{{{z{{{{{{z=\n{{z{{{z{{z{{{z{{zzz{{{{{{{zz{{{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{{{=\nz{{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{{zzzz{{{{{{zz{{z{{{z{{{{{{z{{=\n{z{{zzzzz{{zz{{{{{{{z{{{z{{{z{{z{{z{{z{{{{{z{{{z{{zzzzz{{{{{z{{{z{{{z{{z{=\n{{{z{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{z{{z{{{z{{{{{{{{{{{{{{z{{{{=\n{z{{{z{{{{{zz{{z{{{z{{zzz{{{{{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{=\n{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{{z{{{z{{{{{zz{{z{{{z{{zzzzz{{z{{{z{{z{{{=\n{{{zzzzz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=\n=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{z{{z{=\n{{{{{{zz{{{z{{{z{{{{{{z{{{{{{z{{z{{{z{{z{{{z{{z{z{{{{{{{{zz{{{z{{{z{{{{{z=\nz{{z{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{{{{{z{z{{{z{{{z{{z{{{z{{{{{{{{{{=\n{{z{{{{{{{zz{z{{z{{{z{{{{{{z{{{z{{z{{{{{{{zz{{{{{{{z{{z{{z{{{z{{z{{z{{{{{=\nz{{{z{{z{{{{{{{{{z{{{z{{{z{{z{{{{z{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{z=\n{{{z{{zz{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{{zz{z{{z{{{z{{z{z{{{{{{{{{{{z{z{{{z=\n{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{z{z{{{z{{{z{{z{{{z{{z{{{{{{{z{{{z{{{z=\nz{z{{z{{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{z{{{z{{z{{{z{{z{{{{{{{{zz{{z{{{z{{{{{{z{{{{{{z{{z{{{z{{z{{=\n{z{{z{{z{{{{{{{{zz{{z{{{z{{{{{{zzz{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{{=\n{{{z{z{{{z{{{z{{z{{{z{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{{{{z{{{z{{z{{{{{{{=\n{zz{{{{{{zzz{zzz{{{z{{z{{z{{{{{z{{{z{{z{{{{{{{{{z{{{z{{{z{{z{{{{z{{{z{{{z=\n{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{z{{{zzz{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{=\nz{{z{{{z{{z{{z{{{{{{{{{{z{z{{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{z{z{{{=\nz{{{z{{z{{{z{{z{{{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{zz{zz{{zz{zz{{zz{{{z{z{{z{{=\nz{{{z{{{{{{z{{{{{{z{{zz{zz{{zz{zz{{z{{zz{{{{{z{{z{{zz{zz{{{{{{z{{{{{zz{zz=\n{{zz{zz{{zz{zz{{{{{z{{{zz{zz{{{{{{{z{{{{zz{zz{{zz{zz{{z{{{{{{{{{z{{{{{{zz=\n{{z{{z{{{zz{{{z{z{{{z{{zz{{{z{z{{z{{{{{{{z{{{z{{{{z{{z{{z{{{{{z{{zz{{zz{{=\n{z{{{{z{{{zz{zz{{z{{{{z{{{z{{{z{{zz{{{z{zz{zz{{z{{{z{{{z{{z{{z{{{z{{{z{{{=\n{{z{{{{{{{{{{{z{{{{{z{{{z{{zz{{z{{z{{{z{{z{{zz{{{{{{{{{{z{{{{zz{zz{{zz{zz=\n{{{{{z{{{zz{zz{{z{{{{{{{{{z{{{{zz{zz{{zz{zz{{z{{{{{{{zz{zz{{zz{{z{{z{{{z{=\n{zz{{{z{z{{{z{{zz{{{z{zz{{{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{zzz{z{{zzz{{{{zzzz{{zzz{{zzz{zzz{{{{{{zz{{{zzz{{zzz{{{{zzz{{zzz{{zz{=\n{{{zzz{{{{zzz{{{{{{{zzzz{{{zzz{{{{zzz{{{{zzz{z{{{{{zz{{zzz{{{{{{{zz{{{{{z=\nzz{{{{zz{zz{z{{{{{{{{zzz{{{{{{zzz{z{{zz{{zzzz{zzz{zzz{{zzzz{{zzz{{{{{{{{z=\n{{{z{{{zzzzzzzzz{{{{zzzz{{{{zzzz{{{{zzzz{{zzz{{zzz{{{{zzzzz{zzz{{zzzz{{{z=\nzz{{zzz{zzz{zzzzzzzzz{zzz{{zzzz{{z{{{{{{{{{{zzz{{{zzz{zzz{{zzz{zzzz{zzzzz=\nz{{zz{{{{{{{{zz{{{{{zzz{{{{zz{zz{{{zzzz{{zzz{{zzz{{{{{{{zz{{{{{zzz{{{{zz{=\nzzzzz{{{{{{z{zz{{{{zzz{z{{zzzzz{{zzzz{zzz{zzz{{zzzz{{{zzzz{{z{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{zzzzzzz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{{{{{{z{{{{{{{{zz{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzz{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{zz{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{zz{{{{{{{{{{{zz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{z{{{{z{{{z{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{z{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{z{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{z{z=\n{z{{{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{z{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{z{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{z{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{zz{{{{zzz{{{{{z=\n{zzz{{zzz{{{{zzz{zzzz{{{{{zzz{{zzzz{{{zzzz{z{zz{{zz{{{zzz{{{{zz{zz{zzz{{{=\n{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{zz{{{zzz{{{{zz{zz{zzz{{zzz{zzz{=\n{{{{zzz{zz{{{zzzz{zz{zz{{{{zzz{{zzzzzz{{zz{z{zzz{{zzz{{{{{zzzzzz{{z{{{zzz=\n{{{{{{{{{{{zzz{zzz{zzz{z{zz{{zz{{{zzzz{{z{zz{{{{{zz{{{zzz{{{{zz{zz{{{{zzz=\n{{zzz{zzz{zzz{{{zzzz{{zzz{{z{zzz{{{zzzz{z{zz{{{{zzz{{{{{zzzzzz{z{zzz{{zzz=\n{zzzz{{{zzzzzz{zz{zz{zzz{{{{zzz{{{{{z{zzz{{zzz{{{{zzz{{{{zzzz{{{zzz{{{z{z=\nz{{{z{{{zzz{{{{{{z{zz{{zzz{zzz{{{zz{zz{{{{zzz{{zz{zz{{{{{{{{{{{{{{{z{z{{{=\n{zz{zz{{{{zzzz{z{zzz{{zzz{{zzz{zzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{zz{zz{{z{{{z{{{{{zz{z{z{{{z{{z{{z{{z{{{{{{zz{zz{{z{{{{{{z{{=\n{zz{zz{{z{{z{{z{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{{{=\n{z{{z{{z{{{{{zz{zzz{zz{{z{{{z{{{{{z{{z{{z{{zz{z{{{zz{zz{{zz{{z{{z{{{z{{{z=\n{{zz{z{z{{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{z{{{z{{{z{{zz{zz{{z{{zz{{z{{zz=\n{zz{{{{{z{{z{{z{{{{{zz{zz{{zz{zz{{z{{{z{{{z{{{{{z{{{zz{zz{{zz{z{{{{z{{{zz=\n{zz{{z{{{z{{{{{z{{{z{{zz{z{z{{z{{z{{{{{{z{{{z{{zz{zzz{zz{{z{{{z{{{{{zz{z{=\nz{{{z{{zz{{z{{zz{{z{{zz{{z{{zz{zz{{z{{z{{{z{{{{{zz{zz{{z{{{z{{{{{zz{zz{{z=\nz{zz{{zz{zz{{{{{{{{{{{{{z{{{z{{{{zz{zz{{zz{{z{{zz{z{z{{{z{{z{{{z{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~~=\n~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{zzzzz{{{{{z{{{{zzzzz{=\n{zz{{{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{zz{{{{{{{z{{{z{{{z{{zzzzz{{zz{{=\n{{zz{{{{{{{zz{{z{{{z{{zzzzz{{{{{z{{zz{{{{{{{z{{{z{{{z{{z{{{z{{{{{zz{{{{z{=\n{z{{{z{{z{{{z{{{{{zz{{z{{{z{{{z{{z{{{{zzzzz{{{{{z{{{z{{z{{zzzzz{{{{{{{{{{=\n{z{{{z{{{z{{z{{{z{{z{{z{{{{{{z{{{z{{{{{z{{zz{{{{{{{z{{{z{{z{{{z{{z{{{z{{{=\nz{{{{{z{{{z{{{z{{z{{{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{z{{z{{{{zz{{{{z{{{{{{z{=\n{{z{{z{{{z{{{z{{zzzzz{{{{{z{{{{zzzzz{{{{{zz{{z{{{z{{{{{zz{{z{{{z{{z{{zzzz=\nz{{{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{{{z{{{z{{{{z{{{z{{z{=\n{{z{{z{{{{zzzzz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{z{{{z{{z{{{{{{{{{z{{{{z{{{{{{{zz{{{z{{{{{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{=\n{zz{{{{{{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{z{{{zz{{{{=\n{{z{{{z{{{z{{{z{z{{{{{{{zz{{{z{{zz{{z{{z{{{z{{{zz{z{{z{{{z{{{z{{z{{{{z{{{=\n{{{{{{z{{{z{{z{{z{{{{{{{{{{{{{{{{z{{z{{z{{{z{{{z{{z{{z{{{{{{z{{{z{{{{{z{{=\n{zz{{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{{{{z{{{z{{{z{{z{{{{{{{z{{{z{{{z{{z{{{{{=\n{{{{z{{{z{{z{{{{{zz{{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{{{{{{{{z{{{{z{{{{{{{zz{=\nz{{z{{{z{{{zz{z{{z{{{z{{z{{z{{{{{{{{{z{{{z{{{z{z{{{{{{z{{{z{{z{{{z{{z{{{z=\n{{zzzzzzz{{{{zzzzz{{{{z{{{z{{z{{{z{{z{{{{z{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{{z{{{{{{{{zz{{z{{{=\n{{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{{{zz{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{{z{{=\n{z{{{zzz{{{z{{{{{{{{{z{{{{zz{{{{{z{{{z{{{z{{{z{z{{{{{{{{zz{{z{{{zzz{{{z{{=\n{z{{z{{{z{{z{{{z{{{z{{z{{{{z{{{{{{{{{z{{{z{{z{{z{{{{{{{{{{{{{{{{zzz{zzz{{=\n{z{{{z{{z{{z{{{{{{z{{{z{{{{{z{{{{zz{{{{{z{{{z{{z{{{z{{{zzz{zzz{{{{{{z{{{z=\n{{{z{{z{{{{{{{z{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{{{{zz{{z{{{{{{z{{{z{{z{{{z{=\n{{z{{z{{{{{{{{{z{{{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{z{{{{{{{{{z{{{z=\n{{{z{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{{{z=\n{{{{{{{zzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{zz{=\n{{z{{{{z{{{{zz{{{z{z{{z{{z{{{{{{zz{zz{{z{{{{{{z{{{z{{{z{{z{{z{{z{{{{{z{{{=\nz{{{z{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{z{{z{{z{{{{{z{{{z{{{z{{=\n{{z{{{{{{{z{{z{{z{{{z{{{{{z{{{z{{zz{{z{{z{{{zz{zz{{z{{{{zz{{{z{{{{z{{{z{{=\nz{{zz{{{z{z{{{{{{{{{{z{{{z{{{{z{{{z{{z{{zz{{{z{z{{{z{{{{{z{{z{{z{{{{{z{{{=\nz{{zz{zz{{{{z{{{z{{{{{{{z{{{zz{zz{{z{{{{{{{z{{{z{{{z{{zz{{{z{{{{z{{{z{{z{=\n{{{z{{z{{z{{{{{{z{{{z{{z{{{z{{{z{{zz{{{z{{{{z{{{{zz{{{z{zz{{z{{zz{zz{{zz{=\n{z{{z{{zz{{z{{zz{{{z{{{{z{{zz{{{{z{{{{{{{z{{{z{{zz{zz{{z{{{z{{{{{{{{{{{{z=\n{{{{{z{{{z{{{z{{zz{zz{{z{{{{zz{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{zzz{{{zzz{zzz{{zzzz{{{{zzz{{{{zzzz{{zzz{{{{zz{{{{{zzz{{zzzz=\n{{{{{zzzzz{zzzzzz{zzz{{{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{z=\nzzz{{{{zzz{zzz{{{{{zzz{zzz{zzz{{zz{{{{{{{zzz{{zzz{{zzzz{zzz{zzz{{zzz{z{{z=\nz{{zz{zzzzz{{{{zzzz{{{{zzzzzzzzzz{{zzzz{{z{{{{{{{{{{z{{{z{{{zzz{zzzzzz{{z=\nzzz{zzz{zzz{{{zzz{zzz{{{{{zzz{zzz{{zzz{{{{{z{{{z{{{{{{zzzz{{zzz{{zzz{{{{{=\n{{zzzzz{zzz{{zzzz{{{{zzzzzzzzzz{{{zzz{{{{zz{{{{{zzzzzzzz{zzz{zzz{{zzzz{{{=\n{zzz{{{{zzzz{{{zzz{z{{zzz{z{{zzz{z{zzzz{{zzz{{zzzz{{{{{zzzz{{{{zz{{{{{{zz=\nz{zzz{{zzz{{zzz{zzz{{{{{{{{{{zzz{{{zzz{zzz{zzz{{zzz{zzzz{{{{zzzz{{{{z{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{zz{{{{{{{{{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{=\n{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{z{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{{{{{z{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{z{{{{{{{=\n{{{z{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=\n=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{z{{{z{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{zz{{zz{{{zzz{{{zzz{{z{zzz{{zzz{{{{{{{{{zzz{{zz{zz{{{{zzzz{{=\n{{{z{zz{{{{zzz{{{{zzz{{{{{z{zz{{{{zzz{{{{zzz{{zz{zz{{{{{{{{{{zzz{{z{zz{{{=\nzzzz{{z{zz{{zzzz{z{zzz{zzz{{{z{zzz{{zzz{{zzz{zzzzz{{{zzz{{{zzz{{{{zzzz{{{=\n{zzzz{{zzz{{{{{{{zzzz{{{zzz{{{z{{{zzz{{{z{zz{{z{zzz{{zzz{{zzzz{{zzz{{{{{z=\nzzz{z{zz{{zz{{{zzz{{{{zzzz{{zzz{{{{zzzz{zzzz{{{{{{{{{{{z{{{{z{{{{zzz{{zz{=\nzz{{zz{zz{{zzz{zzz{{{{{z{zz{{z{{{{zzz{{zzz{zzz{zzz{{{{{zz{{z{{{{zzz{{{{zz=\nz{{z{zzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{z{{{{zzz{{zzzz{z{zz=\n{{{{zzz{{zz{zz{{zz{{{zzz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{z{{z{{{z{{zz{z{z{=\n{z{{{{{{{{zz{{z{{zz{zz{{zz{{z{{{{{zz{zz{{zz{{z{{z{{z{{{{{zz{zz{{z{{{z{{z{=\n{{z{{zz{zz{{{{{{{{z{{z{{z{{z{{zz{z{{{zz{zz{{z{{{z{{z{{{z{{{{{zz{z{z{{{z{{=\nz{{{z{{z{{z{{z{{z{{{z{{zz{{z{{{{{z{{{zz{zz{{{{{zz{{z{{z{{{z{{z{{z{{{z{{zz=\n{zz{{zz{z{zz{{z{{z{{{z{{{z{{{{{z{{{zz{zz{{z{{z{{z{{{{{z{{{zz{{z{{zz{{z{{z=\n{{{{{{{{{{{{{zzzzzz{{{zz{{z{{zz{zz{{zz{zz{{z{{{z{{{{{{z{{z{{z{{{z{{{z{{z{=\n{{z{{{z{{{{{{{z{z{{{{z{{{z{{zz{{z{{zz{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{z{{z{{{zz{{z{{z{{{zz{zz{{zz{{z{{zz{zz{{z{{z{{{z{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{z{{{z{{zz{{{{zzzzz{{z{{{{zz{{{{{{{{{{{{{zz{{z{{{z{{z{{{z{{{{{z{{{z{{{=\n{{zz{{zz{{{{{{{z{{{z{{zzzzz{{zzzzz{{z{{{z{{{{{{{{zz{{{{z{{z{{z{{{z{{z{{{z=\n{{z{{{z{{z{{{z{{{{{z{{{{zzzzz{{z{{{z{{z{{zz{{{{zzzzz{{z{{{z{{{{{z{{{z{{{z=\n{{{{{z{{{{{{zzzzz{{z{{zzzzz{{z{{{z{{z{{{{{{{zz{{z{{{zzzzz{{{{{z{{{z{{{z{{=\nz{{zz{{{{{{{z{{{{{{zz{{z{{{{{{z{{{{{{{{{{{{{z{{{{z{{{{{{zz{{z{{{z{{z{{{z{=\n{z{{{z{{{{{{z{{zz{z{{{zzzzz{{z{{{z{{{z{{{{{{{{z{{{{{zzzzz{{{{{zz{{z{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{z{{{{{{zz{{z{{{z{{{z{{{{{zz{{z=\n{{{z{{z{{zzzzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{zz{{{z{{{{{{z{{{{{zz{{{{{{{{{{=\nzz{z{{z{{{z{{z{{{z{{{{{z{{{z{{{zz{z{{{zz{{{{{{z{{{z{{z{{{{{{z{{{{{{z{{{z{=\n{{{{{{{{zz{{{z{{z{{zz{{z{{z{{{z{{z{{{z{{{z{z{{{{{{z{{{{z{{{{{{{z{z{{{z{{{=\nzz{{{z{{{{{{z{{{z{{{{{z{{{z{{{z{{{{{z{{{{{{z{{{{{{z{{z{{{{{{z{{{z{{z{{{{{=\nzz{z{{z{{{z{{{{{{{{{z{{{z{{{z{{z{{{zz{{{{{{z{{{{zz{z{{z{{{{{{z{{{{{{{{{{{=\n{{z{{{{z{{{{zz{z{{z{{{z{{z{{{z{{{z{z{{{{{{{z{{{z{z{{{z{{{{{{{z{{z{{z{{{{{=\n{{{{z{{{{{z{{{{{{{zz{z{{z{{{{{z{{{{{{{{{{{{{{{zzzzzzz{{zzzzzzz{{{{{{z{{{z=\n{z{{{{zz{z{{z{{{z{{{z{{{zz{z{{z{{{z{{z{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{=\n{{zz{{z{{{{{{z{{{{{{zz{{{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{z{{{{zz{=\n{{{{z{{{z{{z{{{{{{z{{{{{{z{{{z{{{{{{{{{{zz{{z{{z{{{zzz{{{z{{{z{{z{{{z{{{z=\n{z{{{{{{z{{{{z{{{{{{{z{z{{{z{{{{zz{{z{{{{{{z{{{z{{{{{z{{{z{{{z{{{{{z{{{{{=\n{z{{{{{{z{{z{{{{{{z{{{z{{z{{{{z{{{z{{z{{{z{{{{{{{{{z{{{z{{{z{{z{{{{zz{{{{=\n{z{{{z{{{z{{z{{{{{{z{{{{{{{{{{{{{z{{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{z{{{{{{=\n{z{{{z{z{{{z{{{{{{{zzz{zzz{{{{{{{{{z{{{{{z{{{{{{z{{{z{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{z{{z{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~~}=\n}{{{{{{{{{{{{{{{{{{{{{zz{zz{{z{{z{{zz{{{z{z{{{{z{{z{{z{{{{{zz{{z{{z{{{z{{=\nzz{zz{{{{{z{{{z{{zz{{z{{z{{z{{{{{z{{zz{{zz{{{z{zz{{{z{z{{{z{{{{{{{{z{{z{{=\nz{{z{{{z{{{{{z{{{z{{z{{{z{{{{z{{{{{{{z{{{{zz{{{z{{{z{{{{z{{z{{z{{zz{{{z{z=\nz{zz{{{{{z{{{zz{zz{{{{{zz{{{z{zz{{{z{z{{zz{{{z{z{{zz{{z{{{{zz{{z{{z{{{zz{=\n{{z{{{{z{{{z{{{z{{z{{z{{z{{{{{z{{{zz{{z{{zz{{{z{z{{{z{{{{{{{{{z{{{{z{{{zz=\n{{z{{zz{zz{{zz{zz{{{{z{{{{{{{{z{{{{zz{{{zz{{{z{{{z{{{z{{{{{{{{{{z{{{{{zz{=\n{{z{zz{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zz{{{zz{{z{{z=\n{{{z{{{z{{zz{{z{{z{{{z{{z{{zz{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{zz{zz{zzz{{{{zzzz{zzz=\n{{{zzz{{{z{{{{{{zzz{zzzz{zzz{{zzz{z{{{zzz{zzz{{zzz{z{zzz{{{{{{zzzz{{{{zzz=\nz{{{zzzz{zzz{zzz{{{{{{{zzz{{zzzzzz{{zzzz{zzz{zzz{{zzzzz{{zz{{{{{{zzz{{{{z=\nzzz{{{{z{{{zzz{zzz{{{{zzzz{{{zzz{z{{{{{zz{{zzz{{{{{{{zzzz{{{zzzz{zzz{{zzz=\nz{{zzzz{{zzz{{{{zzz{z{{zz{{zzzz{{{{{{zzzzz{zzzzzz{zzz{{{{{zzzz{{zzz{z{{zz=\nzz{{{zz{z{{{{{{{{zzz{{zzz{{{zzz{z{z{zz{{{z{zz{{{{zz{{{{{{{zzz{{{{z{{{{zzz=\nz{{{{z{{{z{{{{{{{{{zzz{{{{{zzzz{{{zzz{zzzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zzz{{{{z{{{{zzz{z{{zzzzz{zzz{{zzz{zzzz{zzzzzz{{zzzz{zzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzz{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{z=\nzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zz=\nzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzz=\nzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzz=\nzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzz=\nzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzz=\nz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz=\n{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{{zzzzzzz{=\n{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{zzz{{{{{{{{{=\n{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{zzzz{{{{{{{{{zzzz{z{{=\n{{{{{{{{{{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}=\n~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz=\n{{{{{{{{{{{zzz{{{{{{{{zzz{{zzz{{{{{{{{{{{{zzz{{zzz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{z{{{{{{{{{{{{{{z{{{{zz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{zzz{{{{{{{zzz{{{{zz{{{{{{{{{{{{=\nzzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~=\n~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzzzzz{{{{z{{{{{{{{{{{{{zz{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{{{{{zzz{{{{{z{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{=\n{{{{{{{{zzzzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{=\n{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzz{{{z{{{{zzzzz{{zzzzzz{{zzz{zzz{{{{{z=\nzzzz{{zzz{{zzz{{zzzz{{{{zzzz{{{zzz{{{{{{{zzzz{{{{{{{{{{{{{{{{{zzz{{{zzz{{=\n{zzzz{{{zzz{zzz{{{zzzz{{zzz{{zzz{{{{zzzzz{zzzzzz{{{zzzz{zzzz{{zzz{{zzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz{{{{{zz{{{z{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zzz{{{z{=\n{zzz{{zzz{{zzz{{{{zzzzzzzz{{zzz{{zzz{{zzzzzzzz{{zzz{{{zz{{zz{{zzz{{{{{{{{=\nzzzzz{{{{{{{{{{{{{{{zzz{{zzz{{{zz{{zz{{{zzz{zz{{zz{{zz{{zzzzzzzz{{zz{{zz{=\n{zzz{{{{zz{{zz{zzz{{{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{zz{{{{=\n{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{z=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{zzzz{{z{{zzz{{zzz{{zzz{{{{zzz{{zzz{{zzz{{zzz{{zzz{{=\nzzz{{zzz{{zzz{{zzz{zzz{{{{{{{{{zzzzzz{{{{{{{{{{{{{zzzzzzz{{{zzz{{zzz{{zzz=\n{{{{zzz{{zzz{zzz{{zzz{{zzz{{z{{zzz{{{zzz{{zzzzzz{{{zzz{{zzz{{{{{{{{{{{{{{=\nzz{zz{zz{{{{zzz{{z{zz{{{z{{{zz{z{{z{zzzz{z{zz{{zz{{zz{zz{zz{zzz{{zz{zz{{{=\n{zzz{{z{zzz{{{{z{zz{{{{zzz{{{z{{z{{{zzzz{{{zzz{{z{zzz{{zzz{{{{{{{zzzz{{{z=\nzz{{zz{zz{zzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{zzzz{z{{{{{{zzzz{{z=\nzz{{{{zzz{{zzz{{{{{{zzzz{{zzz{{zzz{{zzz{{zzzzzzzz{zzz{{{{{{{{{{{zzzzz{{{{=\n{{{{{{{{zzz{{{zzz{zzz{{zzz{{zzz{{{{zzzzzzzz{zzz{{zzz{{zzzz{{{{zzz{{{zzzzz=\nzzzzzz{{{zzz{{zzz{{{{{{{{{{{{zz{{{{zz{zz{{z{{z{{zz{zz{z{{{z{{z{{{z{{z{{{z=\nz{zz{{z{{{z{{zz{zzz{zz{{zz{zz{{z{{{z{{zz{z{{{{zz{zz{{z{{{z{{z{{z{{zz{{z{{=\nzz{zz{{zz{z{z{{{z{{{{{zz{{z{{zz{zz{{zz{zzz{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{zzz{z{{{zzz{zzz{{zzz{{{{zzz{{zzz{{{zzz{zzz{{zzz{{zzz{{zzz{{zzz=\n{{{{{{zzz{{{{{{{{{{{{{zzz{{{{{{{{{{{{zzz{{{{zzzzzz{{zzz{{zzz{{{{zzz{{{{{{=\nzzz{{zzz{{{zzzz{{{zzz{{{zzz{{{{{zzz{{{zzz{{zzz{{{{{{{{{{zz{{{{{{z{{{z{{zz=\n{{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{zzzzz{{z{{{{{=\n{{z{{{z{{zzzzz{{z{{z{{z{{{{{{z{{{z{{z{{{{zzzzz{{{{{z{{{{{{z{{{z{{z{{{z{{{=\nz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=00=0D=01=01||~}}~~~~~vvvvvv~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zzzzz{{zzz{{zzz{{zzz{{{{zzz{{zz=\nz{{zzz{{zzz{{zzz{{zzz{{zzz{{zzz{{{{{{zzz{{{{{{{z{{{{{{zz{{{{{{{{{{{{zzz{{=\n{{zzzzzz{{zzz{{zzz{{{{zzz{{{{{{zzz{{zzz{{{{zzzz{{zzz{{{zzz{{{{{zzz{{{zzz{=\n{zzz{{{{{{{{{zz{{{{{{{z{{{z{{{zz{{{z{{{z{z{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{=\nz{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{z{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z=\n{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~vvvvv|~~~~~=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{zzzz{{zzz{{zzz{{zzz{{{{zzz{{zzz{{zzz{{zzz{{zzz{{zzz{{zzz{{zzz{{{{{{zzz{{=\n{{{{{zz{{{{{zz{{zzz{{{{{{{zzz{{{{zzzzzz{{zzz{{zzz{{{{zzz{{{{{{zzz{{zzz{{z=\n{{zzz{{zzz{{{zzz{{{{{zzz{{{zzz{{zzz{{{{{{{{{{zz{{{{{{z{{{z{{{{zz{{z{{{z{z=\n{{z{{zz{{z{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{z{=\n{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{{{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=\n=C0=01=01||~}}~~~~~vv||||~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{zzz{{zzzzzzzz{{zzz{z{{zzz{{zzz{{zzzzzzzz{=\n{zzz{{zzz{{zzz{{{zzz{{zz{zzz{{{{{{{zzz{{{zz{{{zzz{{{{{{{zzz{{{zzz{{zz{{zz=\n{{{zzz{{{{{zzz{{zz{zzz{{zzz{{zz{{zz{{zzz{z{{zzz{{zzzzz{{{zzz{{zzz{{{{{{{{=\n{{{{zz{{{{z{{{z{{z{{z{{z{{zz{zz{{zz{zzz{{{{z{{{z{{{z{{zz{zz{{z{{{z{{{z{{z=\nz{zz{{zz{{{z{z{{{{z{{z{{zz{{zz{{{z{z{{z{{zz{{{z{zz{zz{{z{{{{zz{{{z{z{{zz{=\n{{z{zz{zz{{z{{{z{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~v|||||~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{zz{{{{zzz=\n{zzz{{zzz{{zzzzz{zzzz{{{zzz{zzzzzzzz{zzzzzzzzz{{{zzzzz{zzzzz{{{{{{z{zzzzz=\n{{{{zzz{{{{{{zzzzzzzz{{{{{zzzz{{{zzzzz{{{{{zzzzz{zzzzz{zzzz{zzzzz{{{{zzz{=\n{{{zzzzzzzzzz{zzzzz{zzzz{{{{{{{{{{{{{zz{zzz{zzz{zzz{{{zzzz{{{z{{{{{{{{{{{=\n{{zzzzz{zzz{{zz{zzzzz{zzz{zzz{z{zz{{{{zzzz{zzz{{{z{{zzzz{{{{zzzz{zzzzzz{{=\nzzzz{{{zzz{{zzz{{{{zzzz{{z{{{zzzz{{{zzz{{zzz{zzz{zzzzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||=\n~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{zzz{{{{{{{{{{=\n{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zzzzzzz{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{zz{{{{{{zz{z{{{{{{{{{{{{{{{{zz{{{zz{{{{{{{{{{zzz=\nzzz{{{{{{{{{{zz{{zz{{{{{{{{{{zzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~~~~=\n~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z=\n{{{z{{z{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{zz{{{z{=\n{{{{{{{{{{z{z{{z{z{{{{{{{{{{{z{{{{z{{{{{{{{{{z{{{z{{{{{{{{{zz{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{z{z{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{z{{{z{{{z{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{=\n{z{{{z{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{z{{z{z{{{{{zz{{zzz{zz{zz{{{z{z{{{{{zz{{{z{zz{{{{{{zz{{{zzzz{{{{{{z{{{{{{=\n{zz{{{{{zzz{{z{zz{{zz{zz{{zz{{{{zzz{{{zz{z{{z{{{{{{z{{{{{zzzz{{{zz{z{zzzz=\n{zzzz{{{{{{{{{{{z{{{{z{{{{zz{{{{z{{{z{{{{{{{{{z{{{{{{{{{zz{{zzz{zz{zz{zzz=\n{zz{zz{{zz{{z{{zz{zz{{zz{{{{zzz{{{zz{z{zzzz{zz{{{{zz{{{zz{zz{{{zzz{{{{{{z=\n{{{{z{{{{zz{{{{zzz{{{{zz{{{{{zz{z{z{zz{{{zzz{{z{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01=\n||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{z{z{{{zz{{z{{{zz{zz{z{{zzz{z{{zz{{z{{{z=\n{{{{{{zz{zz{{{z{{{{{{{{z{{{{{zz{{z{{zz{{z{{zz{z{{{zz{z{{{z{{zz{{z{zz{zz{{=\nz{{{{{{{{z{{{{{z{{{zz{zz{{{z{{{{z{{{{{{{{{{{{{zzzzz{{{zz{{z{{z{{{z{{{{{{{=\n{{z{{{{{{{{zz{zz{{{zz{zz{z{{{zz{zz{z{{{z{{z{{{zz{z{{{z{{zz{{z{zz{zz{{{z{{=\n{{z{{zz{zz{{{zz{z{{z{{z{{{{{{zzzzz{{{zz{{z{{z{{z{{zz{{z{{zz{zz{{{z{{{zz{{=\nz{{zz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{{z{{{z{=\n{zz{{zz{{z{{z{{z{{{z{{z{{zz{{z{{{{{{{z{{{z{{{z{{{{{{{{z{{{{{z{{zz{{z{{{{{=\nzz{{z{{zz{{z{{z{{{z{{{{{z{{{z{{z{{{{{{{{{z{{{z{{{{z{{{z{{{z{{{{z{{{{{{{{{=\n{{{{z{{{zz{{z{{zz{{z{{{z{{{{{{{{{z{{{{{{{{z{{{z{{zz{{z{{z{{zz{{z{{z{{z{{z=\n{{{zz{{z{{z{{{z{{{{{z{{{z{{z{{{{z{{{z{{{z{{zz{{z{{z{{{{{{{{{z{z{{{{{z{{zz=\n{{z{{{{{z{{zz{{z{{{z{{z{{{{z{{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~=\n~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{z{z{z{{{zzzz{{{{z{{z{{z{{{z{{{z{zzzz{{{{z{{{{{{z{{{{z=\n{{z{{{{{{{{z{{{{{zzzz{{{z{{{{{{z{{z{{{z{{z{{{z{{z{{{{{z{{{z{{{z{{{{{{{{{{=\nz{{z{{{z{{{z{{{z{{{{z{{{{{{{{{{{{{z{{{{{z{zzzz{{{{z{{{z{{{{{{{{{z{{{{{{{z=\n{{{{z{{z{{z{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{z{{{z{{{z{{{{z{{z{{{{z{=\n{z{{z{{{{z{{{{{{{z{{{z{{{zzzz{{{{{z{{{zzzz{{{z{{{z{{{z{{{z{{{{{{z{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{{z{{{z{{{{{{{z{{z{{=\nz{{z{{{z{{z{{{{{{z{{{{{{{z{{{z{{{z{{{{{{{{z{{{{{z{{{{{{z{{{{{{z{{z{{{z{{z=\n{{z{{{z{{{{{z{{zz{{z{{{{{{z{{{{z{z{{{{z{{zz{{{z{{{{z{{{{{{{{{{{{{z{{{{{z{=\nz{{{{{{z{{{z{{{{{{{{{{z{{{{{{{z{{{z{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{z{{z{{z{=\n{{z{{{{{z{{zz{{z{{{{z{{{z{{{z{{{z{{z{{{{{z{{{{{{z{{{z{{{z{{{{{{{{{z{{z{{{=\n{{{z{{zz{{z{{{{z{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{z{{{z{{{zz{{z{{z{{z{{z{z{zz{zz{{zz{{z{{z{{{{{{{zz{zz{{{z{{{{{{{{=\nz{{{{{zz{{z{{zz{{z{z{{z{z{z{{z{z{z{z{zz{{z{z{z{z{zz{z{{{{zz{{{z{z{z{{z{z{=\nz{z{z{{{{z{{{zz{{{{{{{{z{{{{z{{zz{{z{{z{z{z{z{{{{{{{{zz{{{z{{zz{zz{{z{{z{=\n{z{z{z{{z{{z{z{z{zz{z{z{{z{z{z{z{zz{{z{z{z{z{zz{z{{z{z{zz{zz{{z{{z{z{z{{z=\n{{{{{{z{{{{z{{zz{{z{{z{{z{{zz{{z{{z{z{z{zz{{{{zz{{z{z{{z{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{z{{zzz{{{zzz{{{z{{z{{{z{{{zz{{{{{=\nzzz{{{z{{{{{{{{zz{{{{z{{{{{{{{zzz{{{{{zzz{{{{zzz{{z{{{z{{z{{{z{{{z{{{zzz{=\n{{z{{zz{{z{{{{{z{zzz{{zz{{{{z{{zz{z{{{{z{{{{{z{{{{{{{zzzzzz{{{{zzz{{{{z{{=\n{z{{{{{{{{{{zzzz{{{{zz{{{{z{{z{{{z{{z{{z{{{z{{zz{zz{{z{{{z{{{z{{{zzz{{{z{=\n{zz{zz{{{{z{{{zz{{{{z{{{z{{zzz{{{{{{zzz{{{zz{{zzz{{{zzz{{{{zzz{{{{z{{zz{z=\n{{{{{zzz{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{z{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F6=C0=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{zz{{zz{z{=\n{{{{{{{{{{{{{zzzz{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzz{{{zzz{zzzz{{{zzzzz{{{{zz{{zzzzz{{{{{{{{{{zz{{{zz{{{{zz{{{{{{{{{=\nz{{{{z{{zzz{{{{zzz{{{{{{{{{{{{{{{z{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{zzz=\n{{{zzz{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zzz{{zzz{{{zz{{=\nzzzz{{zz{{{{zz{{zz{{{{{{{{{{{z{{{zz{{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}|||=\n||||||||||||}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{zz{{z{{{z{{{{{{{{{{{{{{{{{{{z{{z{{{{{{z{{{z{{{{{{{{{{{{{=\n{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{z{{z{{{z{{z{{{z{{z{{z{{zz=\n{{{{{{{{z{{z{z{{z{{z{{{{{{{{{{zz{{{zz{{z{{{{{z{{z{{{{{{{{{{{{z{{z{{{{{{z{=\n{z{{z{{{{{{{{{{{{{{{z{{{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{z{{{{z{{{z{{z{z{{z{z{{z{{z{{{z{{z{{{{{{{{{zz{{z{{z{{zz{{=\nz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{zzz{zzz{zz{{zz{{zz{{z{=\n{{{z{{z{{zz{{z{{{z{{{zz{{zz{{z{z{{zz{{{{z{{z{{{zz{{{zz{{zzz{zz{{{{{{{zz{{=\n{zz{{{z{{z{{{z{{{{{{{{{z{{z{{{z{{{{{{{{{{{z{z{{z{zzz{{{{{{{{z{z{{z{z{zzz{=\n{{{zz{{{{zz{{z{{z{zzz{zzz{{{{zz{{{zzz{z{z{{zz{{zz{zzz{{{{{{{zz{{{zz{{{zz{=\n{z{z{z{z{zz{zzz{zzz{{zz{{zz{zz{zzzzz{{{{{{{{z{z{z{{{{z{{{z{{z{{{z{{z{{z{z=\nzz{{{{{z{{{{{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{z{{z{{{z{{{z{z{{{z{z{{{{{{{zzz{{z{z{{z{{{z{{z{{{z{{z{{zz{z{z{{{{zz=\nz{{{z{{z{z{{z{z{{z{{z{{{{{{z{z{z{z{{{zzz{{{{zzz{{{{{{z{{{z{{{z{{{{{{{{{{z=\n{{z{{z{z{{z{{{{{{z{{z{z{{z{{{{z{{{{zz{{z{{z{z{{z{{z{{z{{z{{{{zz{{{z{{{zz{=\nz{z{z{z{{z{{{{{{{{z{z{z{z{{z{{z{{zz{{zz{{z{z{{{{z{{z{{z{z{{z{{z{z{{z{{{{{=\n{{z{z{z{{{{z{{{z{{z{{{z{{z{{z{z{{z{{{z{{{{{{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{z{{{z{{{z{z{{{zz{{{{{{{{z{{z{zz{=\n{{z{{{z{{z{{{z{{z{{z{{zz{{{{{z{z{{{z{{z{z{{z{z{{z{{z{{{{{{z{z{z{z{{{z{z{{=\n{{z{{{{{{{{z{{{z{{{z{{zzzz{{{{z{{{zzz{z{{z{{{{{{zzzzzzzzzz{{{z{{{{{{z{z{{=\nz{z{{z{{z{{z{{z{{{{{{z{{z{{{z{{zz{{zz{{{z{{{{{{{{z{z{z{z{{z{{z{{z{{{z{{{z=\n{{zz{{z{{z{{z{{z{z{z{{z{{z{{{{{{{z{{zz{{{{z{{{z{{z{{z{{{{zzz{z{{z{{{z{{{z=\nzzz{{{{z{{{zzz{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{z=\n{{{z{{{z{z{{{z{{{{{{{{{z{{z{z{{{{z{{{z{{z{{{z{{z{{z{{z{{{{{{z{{z{{z{{z{z{=\n{z{z{{z{{z{{{{{{z{{z{{z{{{z{{z{{{z{{z{{{{z{{{{z{{zz{{{{{{{{{z{{{{{z{{z{{z=\n{{{{{{{{{z{{{{z{z{{z{{{z{{z{z{{z{z{{z{{z{{z{{z{{{z{{z{{z{{{z{{z{{{z{{{{z{=\n{{{{{{{z{{z{{z{{z{{z{{z{{{z{{{z{{{z{{z{{z{{z{{zz{zz{{z{{z{{{{{{{z{{zz{{z{=\nz{{{z{{z{{z{{{{{z{{z{{z{{z{{{{{{{{{{{{z{{{{z{{{{z{{z{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zzzz{{zzz{zzz{{z{{zz{{zz{{z{{{zzzz{{{zz{zzz{zzz{{zz{=\n{zz{{zzz{{zz{{{zzz{zz{{zz{{{zz{{zz{zz{zz{{{{zzz{z{zzz{zzz{zz{zzzzz{{{zzzz=\n{zzzzz{{{{{{{{{zzzz{zz{{{{zz{{{z{{{{{{z{{{{z{zzz{{{{zzz{{{zz{{{zz{z{{zzzz=\n{zz{{zzz{{{{zzzzz{{zz{{zz{{{zz{z{{{zzz{z{zzz{{zz{{zzz{zzz{{z{zzz{{{zz{zz{=\n{{{z{z{{{zz{zz{z{{{zzz{{z{{zz{{{{{zz{{{z{{{zz{{{{zz{{zzzz{{{{{{{{{zzz{zz{=\n{{{zzz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zzz{=\nzzz{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{{{zz{{{{z{{z{{{=\n{{{{{zz{{{zz{{{zz{{{{{{{{{{{{z{{zz{{zzzz{{zz{{{{{{{{{{{{zz{zzz{zzz{{{{{{{=\n{{z{{{{{{zzzzz{{{{z{{{{zzz{zzz{{{{{{{{{{z{{zz{{{zz{{{{z{{z{{{{{{zz{{{zz{{=\n{zz{{{{{{{{{{zzz{{zz{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{z{{z{z{{z{{zz{{{z{{{{{{z{{z{z{{z{z{{z{{{{{{{{{{zz{z{{z{z{{z{z=\n{{z{{{{{{{{{{{z{{{z{{{z{{{{{{{{{{z{{{{{{{z{{z{{{zzz{{{{z{{{z{{{{{{{{{{z{{=\nz{{z{z{{z{{zz{{{z{{{{z{{z{z{{z{z{{z{{{{{{{{{z{{{z{{z{{z{{{z{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{zz{{zz{{z{z=\n{z{{z{{{zzz{{zzz{{{zz{{zzz{{{zz{{z{{{{{{z{{{{{z{z{{z{{{z{{{z{{{{{{z{{z{{{=\n{z{z{{z{{{{{{{{{z{z{{{{z{{{z{{z{{z{{{{{{{{{{{zz{{z{{zz{{zz{{z{z{z{{z{{{{z=\n{{{{{{z{z{{{{{z{z{{{{z{{{{{{z{{{{{z{z{{z{{{z{{{z{{{{z{{z{{{{z{z{{z{{{{{{{=\n{zzz{{z{{z{zzz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{z{z{z{{z{{z{{zz{z{z{{{{z{{z{z{{z{z{{z{z{{z{z{z{{{{{{{{z{{=\n{{{z{{z{{z{{{z{{{{z{{{{{{zz{{{{z{{z{{z{{{{{{{{z{{z{{{z{{{{z{{z{{z{{{{{{{{=\n{{{{z{z{z{z{{z{{z{{zz{z{z{{{{{zzz{{{{z{z{{{{{{z{{{{{{{{{{{z{{{{{z{{z{{z{{=\n{z{{{{z{{{{zz{{{{z{{z{{z{{{{{{{{{{{z{z{{z{z{{z{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{z{{z{{z{{z{{zzz{{{{z{{=\nz{z{{z{z{{z{z{{z{zz{{{{{{{{{z{{{{{z{{z{{z{{{z{{{{z{{{{{z{{z{{{z{{{zzz{{zz=\nzz{{zzzzz{{z{{{z{{{z{{z{{{{{{{{{{{{z{z{z{z{{z{{z{{z{{zzz{{{{{z{{{{{zzzzz{=\n{{{z{z{{{{{{{{{{z{{{{{z{{z{{z{{{z{{{{z{{{z{{z{{{z{{{zzz{{zzzz{{{{{z{{zzz{=\nz{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{z{{{z{{z{{z{{z{{z{{{z{{z{z{{z{z{{z{z{{z{z{{{{{{{{{{z{{{{z{{{z{{z{{{z{=\n{{{z{{{{{z{{z{{z{{{{{z{{{{{{{{{{{{z{{z{{{{z{{{z{{z{{{{{{{{{{{{{z{{{z{{{z{=\n{z{{z{{z{{z{{{{z{{{{{z{{{z{{{z{{{z{{{{{{{{{z{{{{z{{{z{{z{{{z{{{{z{{{z{{z{=\n{z{{{{{z{{{{{{{{{z{{z{{{z{{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{zz{{zzz{z{{zz{{zzz{{zz{zz{zz{{zz{=\nzz{zz{{z{{{{{{z{{zzzz{{zz{{{zzz{{z{{{{{{{zz{{zzzz{zz{{{{{{{{{{{{{z{zzzz{{=\nz{{{{zz{{{{{{{{{{{{{{z{{{z{{{{zz{{zzz{z{{zz{{zzz{{{zzz{zzz{zzz{zzz{{z{{{{=\n{{z{{zzzz{{zz{{{zzz{{z{{{{{zz{{zzzz{zz{{{{{{{{{{zzz{{zz{{{{zz{{zzz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zzz{{{{{{{{=\n{{{{{{{{{{{{{{{{zz{{{zzz{{{zz{zzz{zzz{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zzz{zzz{{zzz{{{zz{{zzzz{{zz{{{{zz{{zz{{{{{{{{{z{{zz{{{zz=\n{{{{z{{z{{{{{{zz{{{zz{{{zz{{{{{{{{{{zz{{{zzz{{zz{{{{zz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{{{{z{{{z{{{z{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{z{{{z{{z{z{{z{z=\n{{z{{z{{{z{{z{{{{{{{z{{z{{z{z{{z{{zz{{{z{{{{z{{z{z{{z{z{{z{{{{{{{{z{{z{{z=\n{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{zz{{zzz{zz{{{zz{{=\nz{{{{{{z{zzz{{{{zz{{z{{zz{zz{{zzz{zzz{{zz{zzz{{{zzz{zzz{{zz{{zzz{{{{{{z{z=\n{{{zz{zz{zz{{{{{{{{{{{{zz{{{zz{{{zz{{z{z{z{z{zz{zzz{zzz{{zz{{zz{zz{zzzzz{=\n{{{{{{{z{z{z{{{{z{{{z{{z{{{z{{z{{z{zzz{{z{{z{{{{{{{z{{{{{z{z{{z{{{z{{{z{{=\n{{z{{z{z{{z{{{{z{{{{{{{{z{{z{zzz{{z{{z{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzzzz{{z{{z{z{{z{{z{z{z{{{{{{{{z{{{{{z{{{{z{z{z{z{{{{z{z{{{z{{z{{z{=\nz{{z{z{z{{{z{{z{{z{z{{z{{{{{z{z{{{z{{z{z{z{{{{{{{{{{{{z{z{z{z{{z{{z{{zz{{=\nzz{{z{z{{{{z{{z{{z{z{{z{{z{z{{z{{{{{{{z{z{z{{{{z{{{z{{z{{{z{{z{{z{z{{z{z{=\n{z{{{{{{z{{{{{z{{z{{z{{{z{{{{z{{{z{{z{z{{z{{zz{{{{{{{{{{zz{{{{{z{{zz{{z{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{z{z{{z{{z{zz{{{{{{{{{z{{{{=\n{z{{{{z{z{z{z{{{zz{{zz{z{{z{{z{z{{z{z{z{{{z{{z{{z{z{{z{{{{zzzzz{{{z{z{zz{=\n{{{{{{{{{{{{z{z{z{z{{z{{z{{z{{{z{{{z{{zz{{z{{z{{z{{z{z{z{{z{{z{{{{{{{z{{z=\nz{{{{z{{{z{{z{{z{{{{zzz{z{{z{z{{z{{{{{{z{{{{{z{{z{{z{{{z{{{{z{{{{zzz{{zzz=\n{{{{z{{zzzz{{z{{z{{{{z{z{{z{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z=\n{{z{{z{z{{z{{z{z{{{{{{{{{z{{{z{{z{{{{{z{{{z{{{z{z{{{z{z{{z{{z{z{{z{{z{{{{=\nz{{z{{z{z{{z{{{{z{{{z{{{zz{{z{{{{{{{{{{{{{{z{{z{{z{{z{{z{{z{{{z{{{z{{{z{{=\nz{{z{{z{{zz{zz{{z{{z{{{{{{{z{{zz{{z{z{{{z{{z{{z{{{{{z{{z{{z{z{{z{{{{{{z{{=\n{{z{{{z{{z{{{z{{{{z{{{{{z{{{{z{{{{{z{{{{{{{{z{{z{z{{z{z{{z{z{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zzz{{zz{{zz{zz{zz{zz{{z{{{zzzz{zzz{{{{{{z{{{=\nz{{{zzz{zzz{zz{zz{z{zz{zz{zz{{{{zz{zz{{zz{zz{{zzz{zzz{{{z{{{zz{{z{{z{{{{{=\nzzz{z{zzz{{zz{{zzz{zzz{{z{zzz{{{zz{zz{{{{z{z{{{zz{zz{z{{{zzz{{z{{zz{{{{{z=\nz{{{z{{{zz{{{{zz{{{zz{{{z{{{{z{{zzzz{{zz{{{zzz{{z{{{{zz{{{zz{{{zzz{{{{{{{=\n{{{zz{{zzz{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0=\n\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{zz{zzz{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{zz{{{{{zz{{{z{{{{{{{{{{{{{{zz{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{{{z{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{z{z{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{z{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{z{{{{{zz{zz{{{{z{{{{zz{z{{{zzz{{{zz{=\n{{{{{{{zz{{{{{zzz{{{zz{{{zz{zz{{{{zz{{zzz{zz{zz{zz{{zz{{{{{{{zz{zzzz{zz{z=\nz{{{{zz{{{zz{zz{{{zzzz{{{{zzzz{{z{zz{{{{zz{{{{{{zzzz{zz{{z{zz{{zzz{{zzzz{=\n{{{{{zz{z{zz{zz{{{zz{z{{{{zzz{zz{zz{{{{zz{{{{zzz{{zzzz{{{{zz{zzz{zz{zz{zz=\n{zz{{{{{zz{{{z{zz{zzzz{{{zz{z{zz{zz{{zzzz{{{zz{{zz{zz{{z{zz{zzzz{zz{{z{{{=\n{zz{{{{zzz{{{{{{{{{{{{{{zz{z{zz{zz{{{zz{z{{{{zz{zz{{{zz{{z{{{z{z{{{{z{{zz=\n{{{{zzz{{{{{zz{z{{{{zz{{{{z{z{{{zzzz{{{{{{zz{z{{zzz{{{{{zzzz{{z{zz{{{{zz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{zz{{z{{z{{{zz{zz{{zz{{z{zz{{z{{{{{zz{{z{{zz{{z{zz{zz{{{zz{z{{zz{zz{{{zz=\n{zz{z{{z{{{z{{{{{zz{zz{{{zz{zz{z{{zz{zz{{{zz{z{{z{{z{{{{{{z{{{{zz{z{{zz{{=\nz{{{{{{z{{{{z{{{z{{{z{{z{{{z{{{{{{zz{zz{{{zz{z{{z{{zz{{{{{{zz{zz{z{{zz{zz=\n{{z{{z{{{z{{{{{{{z{{{zz{zz{z{{zz{{z{{zz{zz{{{z{{{{z{{{zz{zz{{{zz{z{{{z{{{=\n{{{z{{{z{{z{{{z{{{{z{{{{z{{z{{zz{{z{{z{{z{{{{{{{{{{{{zz{zz{{{zz{z{{z{{zz{=\n{{{{zz{{z{{{z{{z{{zzz{z{{z{{{{z{{zz{{z{{{{z{{zz{{zz{{z{{zzz{z{{{z{{{{{{zz=\n{zz{{z{{z{{{{{{z{{{{zz{z{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{{{{z{{zz{{{{{z{{zz{{z=\n{{{{{z{{{z{{zz{{z{{z{{{z{{zz{{z{{z{{z{{{z{{{{{z{{{z{{zz{{z{{z{{z{{{z{{zz{=\n{z{z{{{z{{{{{z{{{{zz{{z{{z{{zz{{{{{{z{{{z{{{z{{{{z{{{{{z{{{{{{{z{{{z{{zz{=\n{z{z{{{z{{{{{{zz{{z{{z{{z{{{z{{z{{{{{z{{{{{{{z{{{zz{{z{{z{{z{{{z{{z{{{z{{=\nz{{{{z{{{{z{{{z{{zz{{z{{z{{{{{{{z{{z{{z{{{z{{{{z{{{{z{{z{{{z{{zz{{z{{{{{{=\n{{{{{{{{{z{{{z{{zz{{z{z{{{z{{{{{{z{{{z{{z{{z{{{z{{{z{{z{{{z{{{z{{{{{{{z{{=\n{z{{{z{{zz{{z{{{z{{z{{{{{{{z{{{z{{z{{{{{{{{z{{{{zz{{z{{z{{zz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{z{{z{{z=\n{{{z{{z{{{{{zzzz{{{{{{zzzz{{{z{{{{{z{{{{z{{z{{z{{z{{{{z{{z{{z{{z{{{z{{z{{=\n{{{z{{{z{{{z{{z{{z{{z{{{{z{{z{{z{{z{{z{{{{{{z{{{{z{{z{{zzzz{{{{{{{z{{{{z{=\n{{z{{{{{z{{{{z{{{{{{z{{{z{{{z{{z{{z{{{z{{{{{{z{{z{{z{{z{{{{z{{{z{{{{z{{{{=\n{{{z{{{z{{z{{z{{{z{{{z{z{{{{z{{z{{{{z{{{z{{{z{{{z{{z{{{z{{{{{{{z{{z{{z{{{=\nz{{{{z{{{{z{{z{{zzzz{{{{{z{{{{{{{{{{{{{z{{{z{{{z{{z{{z{{{z{{{{{{z{{{z{{z{=\n{z{{{z{{{z{{z{{{z{{z{{{{{{{{z{{{z{{zzzz{{{{z{{{z{{z{{{{{{z{{{z{{{{z{{{{{{=\n{z{{{{z{{z{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{z{{{z{{z{{{z{{zz{{z{{{{{z{{{{{{{{{z{{{{{{z{{{{{z{{{z{{=\n{z{{z{{z{{{z{{{z{{z{{z{{{z{{z{{{{{z{{zz{{{z{{z{{z{{z{{{z{{{z{{z{{{zz{{{{{=\n{z{{{{{z{{z{{z{{{{{{{{{{z{{{z{{{z{{{{{{{z{{z{{{{{{{z{{zz{{{z{{z{{z{{z{{{{=\n{{{z{{z{{z{{z{{{z{{{{{z{{z{{{{{{{z{{{{z{{z{{z{{z{{{z{{z{{{z{{z{{{{z{{{{z{=\n{zz{{{z{{z{{z{{{{{{{{z{z{{z{{{z{{{{z{{{{z{{z{{{z{{{{{{{{{z{{{{{{{{{{{{z{{=\nzz{{{z{{z{{z{{z{{{{{{z{{{z{{z{{z{{{z{{{z{{z{{{z{{{z{{{{{{{{z{{z{{{z{{{{{{=\nz{{{z{{z{{{{{{{z{{zz{{{{{z{{{{{z{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{zz{{z{z{z{z{z{zzz{{z=\n{zz{{z{{{{{zz{{z{{zz{{z{zz{zz{{z{{z{z{zz{zz{{z{{z{{z{z{{z{z{{{{{{z{z{z{zz=\n{{z{{z{z{zz{zz{{z{{z{z{z{{{{{{{{z{z{{z{{z{z{zz{{z{{{{{{z{{{z{z{z{{{{z{{z{=\n{z{z{{{{{z{z{z{zz{{z{z{z{zz{z{{{{z{{z{{z{z{zz{zz{{z{{z{{z{z{{{{{z{z{z{{z{=\n{z{z{z{{zz{{zz{zz{{z{{{{z{z{{z{z{z{zz{{z{z{z{z{{{{{{zz{{{z{z{z{{{{z{z{{z{=\nzz{z{zz{{z{{z{{z{{zz{{{{{{{{z{z{z{zz{{z{z{z{zz{z{{{{z{{zz{{z{zz{z{zz{zz{{=\nz{z{z{z{zz{{z{{{{z{zz{z{zz{{z{{zz{zz{{z{z{{{{{z{z{z{zz{{z{{{{{z{z{{z{{z{z=\n{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{{{zzz{{{{{z{{{z{{zz{{zzz{{{zzz{{{{{{{zzz{{{{zzz{{{zz{{{{z{{{z{{{zz{=\n{{{z{{z{{{z{{{{z{{{{{{{{z{{zz{z{{z{{{z{{{zz{{{{z{{{z{{zzz{{{{{{zz{{{z{{{z=\n{{{zzz{{{{{{z{{{{{z{{z{{{{zzz{{{zz{{{{{{{z{{zz{z{{{z{{{z{zz{{{{{z{{z{{{z{=\n{{zz{{{{zzz{{{zz{{{{{{{z{{z{{z{{{z{{zzz{{{{{zz{{{{z{{{{zz{{{{z{{zz{z{{{z{=\n{zz{{{{{{{z{{{{{z{{z{{{{zz{{{zz{zz{{{zzz{{{zzz{{{{z{{{{{{{{{z{{zz{z{{{z{{=\n{z{zz{{{{{zzz{{{{zz{zz{{{zz{{{{{z{{{z{{{zzz{{{{{{z{zz{{{zzz{{{{zz{{{{zz{{=\n{{{{{z{{zz{zzz{{{{{{zz{{{z{{{z{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zz{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{z{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{z{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nzzz{z{zz{{{zz{{{{{zz{z{zzzz{{{zz{{{{zzz{{zzzz{{{{{{zz{{{zzzz{{{{{zz{z{{{{=\nzz{z{zz{zz{{{zzzz{{{zz{{{z{zz{{zzz{{{{{zzzz{{{zz{{{{{{{z{z{{{{{zz{{{{{{zz=\nzz{{{zz{{{{{zz{z{z{zz{{{zz{{{{zz{z{{{{{{{{{{{{{z{{{{{{{zz{{{{{zz{zz{{{z{z=\nz{{{zz{{{{zzz{{{{zz{{{z{zzzz{{zz{{{zz{{{{{{{{zz{{{zz{{z{{z{zz{{{{{{{zz{{z=\nz{zz{{{zz{z{{{{zz{{zz{zz{{{{{zz{{{zz{zz{{{zz{z{{{{zz{{{zz{zz{{{{zzz{{{zz{=\n{{{{{{{{zz{{z{{zz{{{zz{{{{{zzz{zz{zz{{zz{{z{{{zzz{{zzzz{{{{zz{zz{{{{zz{{{=\nzzzz{{{{{z{{{{zz{{{zzzz{{{{{{zz{{{zz{{z{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{zz{{z{{zz{zz{{{z{{{zz{{z{{z{{z{{{=\nz{{{{{{zz{zz{{{z{{{{{{z{{zz{{zz{zz{{{zz{z{{z{{z{{zz{{z{{{z{{{z{{z{{{{{{z{=\n{{zz{zz{{{{{zzz{z{{zz{{z{{{{{{z{{{zz{{z{{zz{zz{{{z{{{zz{{z{{z{{zz{{{{{{{{=\n{{{{{z{{{{{zz{zz{{{{{zz{{z{{{z{{{zz{{z{{z{{z{{zz{{z{{{z{{{z{{{z{zz{{z{{{{=\n{zz{zz{{{z{{z{{{z{{{{{{{{{{z{{{zz{z{{z{{zz{{zz{{z{{zz{{z{{zz{{z{{{zz{z{{z=\n{{zz{{zz{{z{{{zz{z{{zz{{z{zz{{z{{{{{{{{{z{{z{{z{{zz{{z{{{{{{zz{zz{z{{{z{{=\nz{{z{{z{{{z{{{{{{{zz{z{{zz{zz{{{z{{{{{{z{{{zz{{z{{{z{{{{{{zz{zz{{{z{{z{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{{{z{=\n{zz{{z{{{z{{z{{{{z{{zz{{z{{{{{z{{{{{{{z{{{z{{{z{{{{{z{{{z{{{z{{{z{{zz{{z{=\nz{{{z{{z{{zz{{z{{{{z{{{{{{{{z{{{{z{{{z{{{{{z{{{z{{z{{zz{{{{{{z{{{z{{zz{{z=\n{{{z{{z{{{{z{{zz{z{{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{{{{z{{{z{{z{{{{z{{zz{{z{=\n{{{{z{{zz{{z{{{{z{{z{{z{{zz{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{z{{{zz{{z{z{{{z{=\n{{z{{zz{{z{{{z{{z{{zz{{zz{{z{z{{{z{{{z{{zz{{zz{{z{{z{{{{{z{{zz{{{{{{{{{z{=\n{z{{z{{z{{zz{{{{{zz{{z{{z{{z{{z{{{z{{{{{z{{{{{{{zz{{z{{z{{{z{{z{{{{{{{z{{=\n{z{{zz{{z{{{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{z{{{z{{{zzzz{{{z{{{z{{{z{{{zzzz{{{{{z{{{{z{{{{{{z{{{{z=\n{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{z{{z{{zzzz{{{{z{{{{{z{{{{{{{z{{{z{{{{z{{{{{=\nz{{{z{zzzz{{{{{{{z{{{zzzz{{{z{{{z{{{z{{{zzzz{{{z{{{z{{{{{{{{{{{{{z{{{{{z{=\n{{{z{{{{{z{{{z{{z{{{zzzz{{{{{z{{{zzzz{{{{z{{{{z{{z{zzzz{{{{{{z{{{{z{{z{{z=\n{{{z{{{{{{{{{{z{{{z{{z{{z{{{z{{zzzz{{{{z{{{z{zzzz{{{{z{{z{{z{{{z{{zzzz{{{=\n{z{{z{{z{{{{{zzzz{{{{{{{{{{{z{{z{z{{zzzz{{{{{{{z{{z{{z{{{z{{z{{{{z{{{{z{{=\n{{{{{z{{z{{z{{{{z{{z{{{{{{{z{{zzzz{{{{z{{{{{{z{{{{z{{z{{z{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{z{{{{z{{{{{{z{{zz{{z=\n{{{{z{{{{{{{{{z{{z{{{{{{{z{{{z{{{z{{{{{{z{{z{{{z{{zz{{{z{{z{{{zz{{{z{{{{{=\n{z{{{{{{{z{{{{{z{{{{z{{{z{{{{{z{{{z{{z{{{{{{{{{{z{{{z{{{{{{z{{zz{{z{{{{z{=\n{{{{{z{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{{{{z{{{z{{z{{{{z{{{{{{{{{z{{z{{{{{{z{=\n{{{{z{z{{z{{{{{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{z{{{{z{{z{{z{{z{{{z{{{{{{z{{{=\nz{{z{{{{{{{z{{z{{z{{z{{{z{{{{{{{z{{z{{z{{{{{z{{{{{{{{{{{{{{z{zz{z{{z{{{{{=\n{{{{{z{{z{{z{{z{{z{{{{{{z{{z{{{{{{{{z{{z{{z{{{z{{z{{{{{{{z{{{z{{{{{{z{{{{=\n{{{z{{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{z{{{{zz{{z{{z{z{z{zz{z{{zz{{z{{z{{z{{z{z{{{{{zz{zz{{{z{{{{{{z{=\nzz{z{z{z{z{zz{{z{z{z{{{{{zz{{z{{z{{{{z{{z{{{{{z{z{{zz{zz{{{{{zz{zz{{zz{{z=\n{{{{{{z{{{zz{{z{{z{z{z{zz{{{{zz{{z{{z{zz{z{z{{{{{{{{{{z{{{{{zz{zz{{{{{z{{=\nzz{{z{{{{zz{{z{{z{{z{{zz{{z{{z{{{{{zz{{{zz{{z{{{{{zz{zz{{z{zz{z{z{{{{{{{{=\n{{z{z{z{{z{z{z{zz{z{zz{{z{{z{{zz{{zz{{z{{z{{z{z{z{zz{z{zz{{z{{z{{z{z{zz{{=\nz{zz{{z{{zz{{{{{{zz{zz{{{zz{{z{{{{{z{{z{{z{z{z{zz{z{z{{z{{z{z{{{{{z{{z{z{=\nzz{zz{{z{z{{{{{z{z{zz{{z{{z{z{{{{{zz{zz{{z{zz{z{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{z{{{{{zzz{{{{z{{zz{zz{{{{zzz{{{zz=\nz{{{zz{{{{{{{zz{{{{z{{{{{{{{z{zz{{{z{{zz{z{{{z{{zzz{{{{zzz{{{z{{{{zzz{{{{=\n{{zz{{{{zz{{{{{{{{zz{{{{{zzz{{{{{{z{{{{{zzz{{{{z{{zz{z{{{{{zzz{{{{z{zz{{z=\n{{{{{{{{{zzz{{{{{zz{{{{{{{zzz{{{{z{{{{{zzz{{{zzz{{{{zzz{{{z{{{{{z{{{{{zzz=\n{{{{{{{zz{{{{zz{zz{{z{{{{{{{{{{{z{{z{{{z{{{z{zz{{{zzz{{{zzz{{{{{zzz{{{z{{=\n{z{{{z{zz{{{zzz{{{z{{{z{{{zzz{{{zzz{{{{z{{{{{{z{{z{{{{{zzz{{{{{{z{{z{{{z{=\n{zz{zz{{zzz{{{zz{{{{{{z{{{z{{{zz{{{{zz{{{{{{{z{{{zzz{{{zz{{{{{{{zz{{{{zz{=\nzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{zz{{{{{{{{{{{{{{=\n{{{{{zzz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{zz{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{z{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{z{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{z{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{z{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{zz{{z{{{z{{{{zz{{{z{zz{{zzz{{{=\n{{{z{{{{zz{{{{{zz{z{{zz{z{{{{{zz{{z{{{zzz{{{{zz{{z{{zz{zz{{zzzz{{z{zz{{{{=\nzz{zz{{{{{zz{{{z{zzzz{zz{{{{{zz{{{zzzz{zz{{z{{{{zz{z{{z{{{{{{zz{z{{{{zz{{=\n{{z{z{{{zzzz{{{{{{{{{{{z{{{zzzz{{{zz{{z{{zz{{{zz{{{{{{{{{z{zz{zz{{z{{zz{z=\nz{{{{{zz{{zz{zz{{zzzz{{{zz{{{{{{{zzz{{zz{{z{{{{zzz{{z{zz{{{{{{zz{z{{{{zz{=\n{{{z{z{{{zzzz{{zzz{{{{{{{{zz{{z{{zz{{{zz{{{{{zzz{zz{zz{{zz{{z{{{zzz{{zzzz=\n{{{{{z{z{{{{{zz{{{{{{zzzz{{{zz{zzz{{zz{{{{zz{{{{zz{z{{{{{zz{{zz{zz{{{{{{{=\nzz{{{zz{{z{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{z{{z{{z{{{zz{{z{{{z{{{z{{z{{{{{z{{{zz{zz{{zz{zz{{z{{zz{{{{{{z{{z{{z{{z{=\n{{{{z{{z{{z{{{z{{{z{{{{zz{z{{{{{zz{{z{{zz{{z{{{z{{{zz{{z{{zz{{z{{{z{{{{z{=\n{z{{zz{zz{{z{{{{{{z{{zz{{zz{{z{{zzz{z{{{z{{{{{{{{{{{{{z{{{{z{{{{{{z{{z{{z=\n{{zz{{z{{{{{{{{{z{{{{z{{z{{{zz{z{{{{{{z{{{zz{z{{{z{{{zz{zz{{{{{z{{z{{{z{{=\nz{{zz{{z{{zz{z{{{{{z{{zz{{zz{{z{{zzz{z{{{z{{{z{{z{{{{{{{{{z{{z{{z{{zz{{z{=\n{{{{{zz{zz{z{{{z{{z{{z{{z{{{z{{{{{{zzz{z{{zz{{z{{{{{{z{{{zz{zz{{z{{z{{{zz=\n{{z{{z{{zz{{{{{{z{{{zz{z{{{{{zz{zz{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=\n=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{z{{{z{{{z{{zz{{z{{{{z{{{{{{{{z{{{z{{{z{=\n{z{{{z{z{{{z{{{{{{z{{z{{{z{{{{{{{{z{{z{{z{{z{{{z{{{{zz{{z{{{{{z{{{z{{z{{z=\nz{{z{{{{z{{{z{{z{{zz{{z{{{{z{{z{{{z{{{z{{z{{{{{z{{{z{{{z{{zz{{z{{{z{{z{{{=\n{{{{{{{{{{{z{{{{z{{{{{{z{{z{{z{{z{{zz{{{{{{{{z{{{{z{{z{{{zz{{z{{{{{z{{{zz=\n{{z{{z{{{{z{{{z{{{{{z{{{{{z{{z{{{z{{{{{zz{{z{{{{z{{{z{{{z{{zz{{z{{{z{{z{{=\n{{z{{{{{{{{{{{{z{{z{{z{{z{{zz{{{{{zz{{z{{z{{z{{z{{{z{{{{{z{{{{{{{z{{{z{{z=\n{{zz{{{{{z{{{{z{{{z{{{zz{{{{z{{zz{z{{{z{{{{{{z{{{zz{{z{{{{{z{{{z{{z{{z{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{z{{{z{{z=\nzzz{{{{z{{{{{z{{{{{{{z{{z{{{{z{z{{{z{{z{{{z{{{{{{z{{z{{{{z{{{{{{{z{{z{z{{=\n{z{{{z{{{{z{{z{{{{{{z{{{z{zzzz{{{{z{{{{z{{{z{zzzz{{{{z{{{{z{{z{{z{{{z{{{z=\n{{{{{z{{{z{{zzzz{{{{z{{{z{{z{{{{{{{{{{{{{z{{{{z{{{{{{{z{{z{z{{zzzz{{{{{{{=\n{{{z{{{{z{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{{z{{{{z{{{{{{z{{{{z{{z{{z{{{{{{z{{=\nz{{{{{z{{{z{{zzzz{{{{z{{{z{{z{{{{{z{{{{{{{{{{{z{{z{z{{zzzz{{{{{{{z{{z{{z{=\n{{z{{z{{{{z{{{{z{{{{{{{z{{{z{zzzz{{{{{{{z{{{z{{{z{{{{z{{{{zzzz{{{z{{{z{{{=\n{{{z{{{z{{z{{{{{z{{{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{z{{z{{{z{{{z{{{{{{z{{{{{{{z{{{{{z{{{z{{{z{{z{{zz{{z{{z=\n{{{{{{z{{z{{{{{{z{{{{{{z{zz{z{{z{{{z{{{{{z{{z{{{{{z{{{z{{z{{{{{{z{{{{z{{{=\nz{{z{{{{{{z{{{{z{{z{{{z{{zz{{z{{{{{{z{{z{{{z{{{{{{z{{{z{{z{{{{{{{{{{{{{{z=\n{{{{z{{{{{{{z{zz{z{{z{{{{{{{{{{{{z{{{{z{{z{{{{z{{z{{{{{z{{{{z{{z{{z{{{{z{=\n{{z{{{{{{{{z{{z{{z{{{z{{{{{{z{{z{{{{{z{{z{{{z{{{{{{z{{{z{{z{{{{{{{z{{{{{{=\n{{{{z{zz{z{{z{{{{{{{{{{z{{z{{z{{z{{z{{{{{{z{{z{{{{{{{z{{{z{{z{{{{{{{{{z{{=\n{{z{{zz{{{z{z{{{z{{{{{{z{{z{{{{{{z{{{{z{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{zz{z{z{z{zz{{z{{z{{{{=\nz{{z{{{{{z{z{zz{zz{{z{z{z{zz{zz{z{{{{z{zz{z{z{{z{{{{{{zz{zz{{{z{z{z{z{{z{=\n{z{z{{{{z{{zz{{zz{{z{{z{{{{z{{zz{{zz{{z{{z{z{{z{zz{z{z{z{z{zz{z{{{{z{zz{z=\n{zz{{z{{zz{zz{{z{z{{z{{{{{{{{{z{{{{z{{{{{{{zz{zz{{{zz{{z{{{{{{{{z{{{{z{zz=\n{z{z{{z{z{{{{z{z{z{{z{z{z{z{{zz{zz{{{{{z{{z{{z{zz{z{zz{{z{z{{z{z{{{{z{zz{=\nz{zz{{z{{zz{zz{{z{z{{z{{z{{zz{{{{{{zz{zz{{{zz{{z{{{{{z{{z{{z{z{z{zz{z{z{{=\nz{{z{z{{{{{zz{zz{{zz{{z{{{{{z{z{{z{z{z{zz{{z{z{zz{{z{{z{zz{z{{{{z{z{z{{z{=\nz{{{{zz{zz{{z{zz{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{zz{zz{{{z{{{zzz{{{z{{{{zzz{{{{{{{z{{{zz{{{{{z{{zz{{z{zz{{{{{zz{zz=\n{{zzz{{{{{{{z{{z{{{{{z{{zz{{{z{{{z{{{{{zzz{{{{{zzz{{{z{{{{zzz{{{{{zzz{{{z=\nz{{{zz{zz{{{z{{zz{{z{{{{{{z{zz{{{zzz{{{{zz{{{{zz{{{z{{{{{{{{zzz{{z{{{{{{{=\n{z{{z{{{{{zzz{{{{{{{{{z{{{{zz{zz{{z{{{z{{{{{{z{{z{{{z{{zz{{{{zz{{{{{{{zzz=\n{{{zz{zz{{{zzz{{z{{{z{{{{{{z{zz{{{zzz{{{{zz{{{{zz{{{zzz{{{{z{{{{{{z{{z{{{=\n{{zzz{{{{{{z{{z{{{z{{zz{zz{{zzz{{{zz{{{{{{{zz{{{{{zzz{{{{{{zz{{{{z{{zzzz{=\n{{z{{{zzz{{{{z{zz{{{{{{z{{z{{{z{{{{{{zz{{{{zz{zz{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{=\n{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{z{{{{{{{{{zz{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zzz{zz{zz{{{{zz{{{{{zz{z{zzzz{{{{{{zz{z{zz{zz{{{zz{z{{{{{{zz{z{{z{zz=\n{zz{{zz{zz{{{z{{zz{{{{{{{{zz{{zz{zz{{{{{{{zz{{{zz{{z{{z{zz{{{{{{{zz{zz{{{=\n{zz{{{{{zzz{{{zz{{{{zzz{{{zzz{{zz{{zzzz{zz{{{{zz{{{{zzz{{{{{{{zz{z{zz{zz{=\n{{zz{z{{{{{zz{{zz{zz{{{{{{{zz{{{zz{{z{{z{zz{{{{{{zzz{{{zz{{zzz{zz{zz{{zzz=\nz{{{zz{{{z{zz{zzzz{{zzz{{{{{{{{{zz{{zz{zz{{{{{{{zz{{{zz{{z{{z{zz{{{{{z{{{=\n{zz{z{{z{z{{{{{zz{{{z{zz{{{{{{zz{z{zz{zz{{{zz{z{{{{{zz{{zz{zz{{{{{{{zz{{{=\nzz{{z{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{z{{zz{{z{{zz{zz{{{z{{{{{{zz{z=\nz{{{zz{z{{z{{zz{{{{{z{{zz{{{z{{{{z{{{zz{z{{{z{{z{{{{{{{{{{z{{{zz{z{{{{{zz=\n{zz{{{z{{z{{{z{{{{{{{{{{zz{z{{zz{{z{{zz{{z{zz{{z{{z{{z{{z{{z{{{z{{{z{{{{z=\n{{zz{{z{{z{{z{{{{{zz{zz{{{zz{z{{z{{zz{{{{{{z{{{zz{z{{{{{zz{zz{{{z{{z{{{z{=\n{{{{{zz{{z{zz{zz{{{zz{zz{z{{{z{{{zz{zz{{{z{{{{z{{{z{{z{{{{{{{{{{z{{{zz{z{=\n{{{{zz{zz{{{z{{z{{{z{{{{{{z{{{zz{zz{{zzz{z{{zz{zz{{{z{{{{{{zz{zz{{{zz{z{{=\nz{{zz{{{{{{z{{{zz{z{{{{{zz{zz{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z=\n{{z{{z{{zz{{z{{{z{{z{{{{{{{z{{{z{{zz{{z{z{{{z{{{{{z{{{z{{{z{{{{z{{{zz{{z{=\n{zzzz{{{{{{{{{{z{{{zz{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{zz{{z{{z{{zz{{z{{{{=\n{z{{zz{{z{{{{{z{{{{{z{{{z{{{{z{{{z{{zz{{z{{{{{{{{z{{{z{{zz{{z{z{{{z{{{{{{=\nz{{{zz{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{z{{{{{z{{{z{{zz{{z{{z{{{z{{{z{{{z{{z{=\n{{{z{{{{z{{{{{{{{{{{{z{{{zz{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{z{{{z{{{z{{z{{{z=\n{{z{{{z{{z{{{{{{{z{{{z{{zz{{z{z{{{z{{{{{{z{{{zz{{z{{{{{z{{{z{{z{{z{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=\n=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{zzzz{{{z{{{z{{{z{{{{{{z{{{z{{{z{{z{{z{=\n{{z{{{{{z{{{z{{{z{{{{z{{{z{{z{{{z{z{{{{{{{{{{{z{{{z{{z{{{{{z{{{{z{{z{{z{{=\n{z{{{{{{{{{{z{{z{{zzzz{{{z{{{{{zzzz{{{{{z{{{{{z{{{{z{{{z{{{{z{{zzzz{{{{{z=\n{{{{{{z{{{z{{{z{{z{{z{{{z{{{{{{z{{{z{{z{{{{{z{{{{z{{z{{z{{{z{{{{{{z{{{{{z=\n{{{{z{{z{{z{{z{{{z{{{z{{{{z{{z{{{{z{{{{{z{{{{{{{{{{{z{{{z{{z{{{{{z{{{{z{{=\nz{{z{{{z{{{{{{{z{{z{{{z{{{z{{{z{z{{{{z{{z{{{{{{z{{{z{{{z{{z{{z{{{z{{{{{{z=\n{{{z{{z{{{{{z{{{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{=\nz{{zz{{z{{{{{{{z{{zz{{{z{{z{{z{{z{{{{{{z{{z{{{z{{{{z{{{{z{{z{{{z{z{{{{{{{=\n{{{z{{{{z{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{z{{z{{z{{{{{{z{{{{{z{{{{{{{{{z=\n{{{{{z{{z{{{z{{{{z{{{z{{{{{{{{{z{{{{{z{{zz{{{z{{z{{z{{z{{{{{{z{{{{z{{z{{{=\n{{z{{{z{{z{{z{{{z{{{{{{{z{{{{{z{{{z{{{z{{z{{z{{{z{{{z{{{z{{z{{{{z{{{{{{{z=\n{{{{{{{{{z{{{{z{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{z{{{z{{zz{{z{{{z{{z{{{z{{z{{=\n{{{{{z{{zz{{{z{{z{{z{{z{{{{{{z{{{{z{{z{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{z{{z{z{zz{{z{{z{z{z{zz{z{{{{{z{z{z{zz{{z{z{z{zz{z{{{{z{z=\nz{z{z{{{{z{z{z{{z{z{z{{z{z{zz{{{{{z{z{z{{z{z{{{{zz{zz{{z{zz{z{z{{{{{{{{{{=\nz{{z{z{zz{{z{{zz{{z{zz{{z{{z{{z{{z{{z{{z{z{z{z{{z{z{zz{{z{{z{{z{{{{{z{z{z=\n{zz{{z{z{z{zz{z{{{{z{z{z{{z{z{{{{zz{zz{{z{zz{z{z{{{{{{{zz{{z{zz{zz{{z{{z{=\n{z{z{{z{{{zz{zz{{z{{{{z{z{{z{{z{{zz{{{{{z{z{z{{z{z{{{{zz{zz{{z{zz{z{z{{{{=\n{{{z{z{z{z{z{zzz{zz{{zz{zz{{z{{{{{{{z{z{z{zz{{z{z{z{zz{z{{{{z{z{z{{z{z{{{=\n{zz{zz{{z{zz{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{zzz{{{{z{{zz{zz{{{{=\n{{{z{{zz{z{{{z{{{z{zz{{{{{{z{zz{{z{{{{{z{{z{{{z{{z{{{z{{{z{{{{{{z{{z{{{z{=\n{{{{{zz{{{{zz{zz{{z{{{{{{{{{{z{{{z{{{zzz{{{{zzz{{{zzz{{{zzz{{{zzz{{{{z{{z=\nz{{{{z{{{zzz{{{zzz{{{{{{{z{{zz{z{{{z{{{z{zz{{{{{{z{{z{{{z{{{{{{zz{{{{zz{z=\nz{{z{{{{{{{{zzz{{{zz{{{{z{{z{{{z{{z{{{{{zz{{{{z{{{{zz{{{zzz{{{{z{{{{{{z{{=\nz{{{z{{{{{{zz{{{{zz{zz{{z{{{{{{{{z{{{z{{zz{{zz{{{{{zz{{{{z{{{{{{{{z{{zz{z=\n{{{z{{{z{zz{{{{{{z{{z{{{z{{{{{{zz{{{{zz{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{{{{zz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zz{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{=\n{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{z{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zzzz{zz{zz{{zz{{z{{{zz=\nz{{{{zz{{zzz{zz{zz{{{{zz{{{zz{zz{{zzzz{{zzz{{{{{{{{{{{{z{{{zzzz{{{zz{{z{{=\nzz{{{zz{{{{{{{{{{{zzz{{{zz{z{zz{zz{{{{zz{zz{{{z{zz{{{zz{{zz{{zz{{{zz{{{zz=\n{zz{{zzzz{{{{zzzz{{z{zz{{{{zz{{{{{{{zzzz{{{zz{{zz{{zz{{{zz{{{z{zz{zz{zz{z=\nzz{zz{zz{{{{zz{{{zz{zz{{zzzz{{{{zzzz{z{zz{{{zz{{zzz{zz{zz{{{{zz{{z{{zz{{{=\nzz{z{{zzz{{zzzz{zz{{zz{zz{{{zzzz{{{{zzzz{{z{zz{{{{zz{{{{{{{z{{{{zz{z{{z{z=\n{{{{{zz{{{z{zz{{{{{{zz{{{zzzz{{{{zzzz{{z{zz{{{{zz{{{{{zz{zz{{{{{zz{{{{{zz=\n{{zz{zz{{{{z{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{zz{{{zz{zz{z{{{z{{z{{z{{z{{zz{{z{{{zz{zz{z{{zz{{z{{{zz{z{{{z{{{z{{=\nz{{{{{{{{{{{{z{{{{z{{{{{{z{{z{{z{{zz{{z{{{{{{{{zz{{z{zz{zz{{{zz{z{{{{{zz{=\n{z{{{z{{{zz{{z{{z{{{z{zz{{z{{{zz{z{{{z{{{{{{{z{{{{zz{z{{zz{{z{{{{{z{{z{{z=\nz{zz{{z{{{z{zz{{z{{{z{{{{zz{z{{{zz{zz{z{{zz{{z{{{zz{z{{{z{{{{{{{z{{{{z{{{=\nzz{zz{{{zz{zz{z{{{{{z{{z{{z{{zz{zz{{z{{z{{{z{{{{z{{{zz{z{{z{{z{{{{{{z{{{{=\nzz{z{{zz{{z{{{{{z{{{zz{zz{{zzz{z{{zz{zz{{{z{{{{{{zz{zz{{{z{{{{{{{z{{{{zz{=\nz{{zz{{z{{{{{zz{{z{{zz{{z{{zz{zz{{zz{{z{{z{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{zz{{z{{z{{z{{z{{{z{{{{{z{{zz{{z=\nz{{z{{z{{z{{zz{{zz{{z{{z{{{{z{{{{{{{{{{{{{{{z{{{{z{{{{{{z{{z{{z{{z{{zz{{{=\n{{{{{z{{{{{z{{{z{{zz{{z{{{{{z{{{z{{z{{{{z{{zz{{z{{z{{z{{zz{{zz{{z{{z{{{{{=\n{{z{{{{zz{{z{{z{{zz{{{{z{{{z{{z{{{z{{z{{z{{z{{zz{{z{{{{zz{{z{{zz{{z{{z{{z=\n{{zz{{zz{{z{{z{{{{{{{{z{{{z{{{{z{{{z{{zz{{z{{z{{{{{z{{z{{z{{z{{{z{{z{{{{{=\nz{{{{z{{{zz{{z{z{{{z{{{{{z{{{{zz{{z{{z{{zz{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{z=\n{{{{{{{z{{{z{{{z{{{{{{z{{{{zz{{z{{z{{zz{{{{{z{{{z{{z{{zz{{z{{{z{{z{{{z{{z=\n{{{z{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{=\nz{{z{{z{{{z{{z{{{{z{{{zzzz{{{{z{{z{{z{{zzzz{{{{z{{z{{{z{{{{{z{{{{{{{{{{{{=\n{z{{{{z{{{{{{{z{{z{z{{zzzz{{{{{{{{{z{{{{{z{{{z{{{z{{z{{{{{{z{{{z{{z{{{zzz=\nz{{{{z{{z{zzzz{{{{z{{z{{{z{{{{{{{z{{{{z{{z{{zzzz{{{{{{z{{z{{z{{{{z{{z{{z{=\nzzzz{{{{z{{{{z{{z{{{z{{z{{z{{zzzz{{{{z{{z{{{z{{{{{{{z{{{{z{{{z{{{{z{{z{{z=\n{{z{{{{{{z{{z{z{{z{{{z{{{{z{{{{z{{{{z{{{z{{z{{z{{z{{{{{{z{{{{z{{z{{zzzz{{=\n{{{{{z{{z{{{z{{{z{{{z{z{{{{z{{z{{{{{{z{{{{z{{z{{{{{{{z{{{{z{{z{{zzzz{{{{{=\n{{z{{{z{zzzz{{{z{{{{z{{z{{{z{{z{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{zz{{{z{{z{{z{{z{{z{{{{{{z{{z{{{{{{{z{{z{{z{{z{{{=\n{{{{z{{z{{z{{{{{{{z{{{{{{{{{{{{z{{{{z{{{{{{{z{zz{z{{z{{{{{{{{{{{{z{{{{{z{=\n{zz{{{z{{z{{{{{z{{{z{{z{{{{z{{{{{{{z{z{{z{{{{{{{z{{z{{z{{{{{{{z{{{{{z{{z{=\n{z{{{{{{{{{{zz{{{z{{{z{{{z{z{{z{{{{{{z{{{{{z{{z{{{z{{z{{z{{z{{{{{{{z{{z{{=\nz{{{{{{{{z{{{z{{{{z{{{z{{{z{{z{{z{{{{{{z{zz{z{{z{{zz{{{{{z{{z{{{{z{{{{z{{=\nz{{{zz{{{{{{z{{{{{z{{z{{z{{{{{{{{{z{{{z{{zz{{z{{{z{{z{{{z{{z{{{{{{{z{{{z{=\n{{z{{{{{{z{{{{{z{{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{zz{{z{{z{z{z{z=\nz{z{z{{z{{zz{{z{{z{{z{{z{z{zz{{z{{z{{z{z{z{z{{z{{z{{z{{{{{{{{{z{{{{z{{{{{=\n{{zz{zz{{{zz{{z{{{{{{{{zz{{z{z{z{z{zz{{z{z{{{{z{{zz{{z{{{{zz{{z{{{zz{{{zz=\n{{z{{z{{z{z{z{z{{{{{z{z{{z{{z{z{zz{{z{{{{{z{{{{{zz{zz{{{zz{{{zz{{z{{z{{{{=\nz{{z{z{z{{z{{z{z{zz{{z{{z{{z{z{z{z{{{{{{z{{{z{{{{zz{zz{{z{{z{{z{z{{{{{zz{=\nzz{{{z{z{z{zz{{z{{z{z{{z{z{z{{z{z{z{{{{{{{{z{z{{z{{z{z{zz{{z{{{{{z{z{z{z{=\nz{zzz{zz{{zz{zz{{z{{{{{{{zz{zz{{{z{{{{{{z{z{{z{{z{z{zz{{z{{{{{z{{zz{{zz{{=\nz{{zz{zz{{z{{zz{{z{z{zz{{z{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{zz{z{{z{{{z{{zz{zz{{zzz{{{{zzz{{{z{{z{{{z{{{zzz{{{z{{{z{{z=\nz{{{zzz{{{z{{{{{{{{zzz{{z{{{{{{{{z{{z{{{{{zzz{{{{{{{{{{zzz{{{z{{zz{z{{{z{=\n{{{{zzz{{{{z{{{{{zzz{{{{z{{{{{zzz{{{z{{{z{{zz{{{{{{zz{{{z{{{z{{{zzz{{{{{{=\nzzz{{{{zz{{{{{z{{{{{zzz{{{z{{{{z{{{z{{z{{z{{{z{{{zzz{{{z{{{z{{zz{{{{{{z{{=\n{{z{{{{{zz{{{{z{{z{{{z{{{{{{z{{z{{{{{z{{zz{zzz{{{zz{{{{z{{z{{{z{{zzz{{{{{=\n{zz{{{z{{{z{{{zzz{{{{{{{z{{{z{{zz{{zz{{{{{zz{{{{z{{{{{{{{zz{{{{z{{{{{{{zz=\n{{{z{{{z{{{zzz{{{{{{zzz{{{{{zzz{{{{zz{{{{zzz{{{{{z{{{zzz{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{{zz{{{{{zz{{{{{{{{{{{{{{{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{zzzzzzz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{z=\nz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=\n=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{z{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{z{{zz{zz{{{zz{z{{{{zz{{{z{zz{{{{zzzz{{z{zz{{{{zz{{{{{{=\n{{zz{zz{{{z{zz{{{zz{{{zzzz{{{zz{{{zz{zz{{{zzz{{{{zz{{{{{{{{zz{{{zzzz{{{{{=\n{zzz{{{zz{z{z{zz{zz{{zz{zz{{{zzzz{{{{zzzz{{{zz{{{z{zz{{{{zzzz{{z{zz{{{{zz=\n{{zzz{zz{zz{{{{{{{{{zzzz{{z{zz{{{{zz{{zz{{zz{{{{zz{{z{{zz{zz{{{z{{{z{{{{{=\n{z{z{{{{{zz{{{{{{{z{zz{{{{zz{zzz{zz{{zz{zz{{zz{{zz{{{{z{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{zz{{{{zzz{{zz{zz{zzz{{{{zzz{{{{zzz{{{{=\n{{{{{{z{{{{zzz{{zzzzzzzz{{zzz{{z{zzz{{zzz{{{zzz{{zz{zz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{zz{z{{z{{zz{{zz{{z{=\n{{z{{{{{{{z{{{{zz{z{{zz{{z{{{{{{{{zz{{z{{{z{{{zz{{z{{{z{{{zz{{z{{{zz{z{{z=\n{{z{{zz{{z{{{{{zz{zz{{{z{{{{{{zz{{z{zz{zz{{{z{{{{z{{{zz{z{{z{{z{{{{{{z{{{=\nzz{zz{{{z{{{{{{{z{{{{zz{z{{zz{{z{{{zz{zz{z{{{{{{{{{{z{{{{zz{z{{zz{{z{{z{{=\n{z{{{{{z{{z{{z{{{z{{z{{{z{{{{{{zzz{z{{zz{{z{{{{{{zz{z{{zz{zz{{zz{{z{{zz{{=\nz{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{zz{zz{{zz=\n{zz{{zz{zzz{zz{{zz{{z{{z{{z{{{{{{{{{{z{{{z{{{z{{z{{{z{{{z{{{z{{zz{z{z{{z{=\n{zz{zz{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{z{{{zz{{z{z{{{z{{{z{{zz{{z{{{{{{{z{{{{zz{{z{{z{{zz{{{{{{{{z{{{z{{z=\n{{{{z{{zz{{z{{{{z{{zz{{zz{{z{{z{{{{{z{{zz{{{{{z{{{z{{{z{{{{{{z{{{{{z{{{z{=\n{z{{{{z{{{zz{{z{z{{{z{{{{{{z{{{z{{{z{{z{{{{{{{z{{{{zz{{z{{z{{zz{{zz{{z{{z=\n{{{{{{{{{z{{{{zz{{z{{z{{zz{{z{{{z{{{{{z{{z{{z{{z{{{z{{{z{{{{{{z{{{z{{z{{z=\nz{{{{{zz{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{zz{{zz{{{{{{{{{{{{z{{{z=\nzzzz{{z{{{z{{{zzzzz{{z{{{{zz{{{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{z{{{z{{zzzz{{{{z{{{{{{{z{=\n{{{z{{z{{zzzz{{{{{{{{{{z{{{z{{z{{{zzzz{{{{z{{{zzzz{{{{z{{z{{{{z{{{zzzz{{{=\n{{{z{{{{z{{z{{{{{{z{{{{{z{{{z{{{z{{{{z{{{z{{z{{z{{z{{{{{{z{{{z{{{{z{{z{{{=\n{{{{z{{{{z{{z{{zzzz{{{{z{{z{{z{{{{{{{{{{z{{{{z{{z{{zzzz{{{{z{{z{{{{{{z{{z=\n{z{{{z{{{z{{{z{{{{{{z{{{z{zzzz{{{{{{{z{{z{{z{{{z{{{z{{{z{{z{{{z{{z{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{zzzzzzz{{{{{{{{z{{{{{z{{{z{{z{{{z{{z{{{z{=\n{{z{{{zz{z{{{zz{{{{{{{{{{{z{{{z{{{{{{z{{{z{{{z{{{{{{z{{{{{zz{{{z{{{z{{z{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{=\nz{{z{{z{{z{{{z{{{{{{z{{{{{{{z{{{{{z{{z{{z{{{{{{{{{{{{z{{{z{{z{{{{z{{{{{{z=\n{{{{z{{{{{{{z{{z{{{{{z{{z{{{{{{{{{z{{{z{{{z{{{{{{z{{{{{z{{zz{{z{{{{z{{{{z=\n{{z{{{zz{{{{{{{z{{{z{{{z{{z{{{{{{{z{{{{{z{{z{{z{{{{{{{z{{z{{z{{{{{{{{{z{{=\n{{{z{{z{{z{{{{{{{z{{z{{{{{{z{zz{z{{z{{{z{{{z{{{{{{z{{{z{{z{{{{{{{{{{z{{z{=\n{z{{zz{{z{{{z{{z{{{z{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{{{zz{{{{{{{{{{z{{{z{{{{{{z{{{z=\n{{{z{{{{{{z{{{{{{zz{{z{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{{z{z{z{zz{z{zz{{z{{z{{{{{{{z{z{{z{{z{z{zz{=\n{z{{{{{{{{z{{zz{{z{{{{zz{{z{{z{z{{zz{{z{{z{{z{z{z{{z{{zz{{z{{{{{zz{zz{{{z=\n{{{{{{zz{{z{z{z{z{zz{{{{z{z{z{{z{z{z{{{{{{{{{z{{{zz{zz{{z{{{{{{{z{z{{z{{z=\n{z{zz{{z{{z{{z{{z{z{zz{{{{{z{z{{z{{z{z{zz{{z{{{z{z{{{{{{{zz{zz{{{z{z{z{z{=\nz{z{{{{zz{zz{{zz{{z{{{{{z{{z{z{z{z{z{zz{{zz{{z{{zz{{{z{z{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{zz{zz{{z{{{z{{{z{{zz{{z{{=\nz{{z{{{{{{{{z{z{{{zz{{{z{z{{{z{{{zz{{{z{z{{{{z{{z{{zz{zz{{z{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{{z{{{z{{{z{zz{{{=\nzzz{{{z{{{{{{{zz{{{z{{{z{{{zzz{{{{{{{{{zzz{{{{z{{{{{zzz{{{zz{{{{zzz{{{z{{=\n{z{{zzz{{{{zzz{{{{{{{zz{{{{z{{{{{{{{zzz{{{z{{zz{z{{{{{z{{z{{{z{{zzz{{{{{{=\nz{{{{{zz{{{{z{{{{{{{zz{{{z{{{z{{{zzz{{{z{{z{{{z{{{z{{{{{zz{{{z{{{z{{{zzz{=\n{{{{z{{{{{{{{z{{z{{{{{z{{{z{{{z{{{{{{zz{{{{{zzz{{{{{{z{{{z{{{z{{zz{zzz{{{=\n{zzz{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{=\nzzz{{zzz{{zzz{zzz{zzz{{zzz{z{zzz{{{{{{{{{zz{{{{{zzzz{zzzzzzzz{{zzzz{zzz{{=\n{zzz{{{{zzz{{zzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||=\n~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{z{z{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzz{{{{zzz{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=\n=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{zzzzz{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{=\nzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzz{zz=\nzzz{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zzz{{{z{zzzzzzzzzzz{zzzzzzzzz{zzzzzzzzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzz{zzzzzzz{z{z{z{zzzzz{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzzzzzzzzzzzzzz{zzzzzzzzzz{{{{{{z{{{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{{{zzzzzzzzzzzz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzz{z{z{zzzzz{{{{{zzzzz{{{z{=\nzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz=\nzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzz{zzzzz{{zzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzz{{{{{z{z{zzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{z=\nzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzz=\nzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zzz{{z{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz{z=\nzzzzzzzzzzzzzzzzzzzzzzzzz{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{{{{{{{{{{{{zzzzzzz{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{z{z{zzzzzzzzzzzzzzzzzzzzz{z{zzzzzzzzzzzzzzz{z{zzzzzzz{z{zzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{z{zzzzzzzz{{=\n{{{{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{zzzzzzzzzzz{{{{{{{=\n{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{zzzzzzzzzzz{zzzzzzzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{zzzzz{{{{{{{{{{{{{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzz{zzzzzzzzzzz{zzzzz=\nzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz=\nzzz{{{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzzzzz{{{{{{{{{{{zzzz=\nzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{zzzz=\nzzzzz{zzzzzzzzzz{{z{{{{{{{{{zzzzzzzzzz{{{zzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzz=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzz=\nzzzzzzzzzzzzz{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{zzzz=\nzzzzzzzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{zzzzzzzzzz=\nzzzzzzzzzzzzz{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzzzzzzzzzz{{zz=\nzzzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{=\n{{{{{{zzzzzzzzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzzzz{{{=\n{zzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzzzzzzzz=\nzzzzzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzzzzzzzzzz{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzz=\n{z{zzz{z{zzzz{{zzzzzzzzzzzzzzzzzzz{z{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzzz{{{z{{{{{zzzzzzzzzzzzzzzz{{{{{{{zzzzzzzzzzzzzzzzzzzz=\nzzzzzz{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz=\nzz{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzz{{{{{zz=\nzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nz{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zzzzzzzzzzz{{{{{zzzzzzzzzzzz{{=\n{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{=\n{zzzzzzzzzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{=\nzzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{zzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzzzzz=\nzzzzzzzzzz{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{zzzz=\nzzzzzzzzzzz{{zzzzzzzzzzzzz{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{zzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{zzzzzzzzzzz=\nzzzzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzz=\nzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzzzzz{{{{{{{zzzzzzzzzzz{{{{{zzzzzzzzzzz=\nz{{{{zzzzzzzzzzzz{{{zzzzzzzzzzzzzz{{{{{zzzzzzzzzzzzzz{{{{{zzzzzzzzzzz{{{{=\n{{{{{{{zzzzzzzz{{{{{zzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzzzzz{{{{zzzzzzzzzzz=\nz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzzz{{{{{=\n{{{{{{{zzzzzzzzz{{{zzzzzzzzzzzz{{{{{zzzzzzzzzzzz{{{zzzzzzzzzzzz{{{{{{{{zz=\nzzzzzzzzzzz{{{{zzzzzzzzzz{{{{{{{{{{{{{{{zzzzzz{{{{{zzzzzzzzzzzzzzzzzzzzz{=\n{zzzzzzzzzzzzz{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=\n=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzz{{{{{{zzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzz{{{zzzzzzzzzzzz{{{{zzzzzzz=\nzzzzz{{{zzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzz{{{{{{{{{{{{{{{{z=\nzzzz{{{{zzzzzzzzzzzzzzzzzz{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{zzzzzz{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{zzzzzzzzzzzz{{{{{{{{{{zzzzzz=\nzzzzz{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{zzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzz=\n{{{{zzzzzzzzzz{{{{{{{{{{{{{{{{zzzz{{{{{zzzzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzz=\nz{{{{{{{{{{{{{zzzzzzzz{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{z{{{{{{{{{zzzzzzzzzzzz{{=\n{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzzz{{{{zzzzzzzzzzzz{{zzzz=\nzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{{{{{{{{{{zzz{{{{{{zzz=\nzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzzz{{{{{z{{{zzzzzzzzzzz{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz=\nzzz{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzzz=\nzzzzzzzz{{{{{zzzzzzzzzzzz{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz=\nzz{{{{{{{{{{{{{{{{{zzz{{{{{{zzzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzz{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{zzzzzzzzzz{{zzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzz{{{{zzzzzzzzzzzzz{{zzzzzzzzzzzz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{{{z{{{{{{{{{{{{zzz{{{{{zzzzzzzzzzzzz{{=\n{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{=\n{{{{{{{{{{{zzzzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzz{{{=\n{zzzzzzzzzzzz{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzz=\nzzzz{z{zzz{{{{{{zzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{zzzzzzzzz{{zzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzz{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzzzzzzzz{zzzzzzzz{zzzzzzzz{{{{{{zzzzzzzzzzzz{{{{{{{{{{{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{zzzzzzz=\nzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzzz{{{{zzzzzzzzzzzz{{=\nzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{zzzzzzzz{zzzzzzzz{{{{{=\n{zzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz=\nzzzzzzz{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{zzzzzzzzzzz{{{{{zzzzzzzzzzzz{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nzzzzz{z{zzzzz{zzz{zzzzzzz{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{zzzzz=\nzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzz{{{{zzzzzzzzzzzz{{{zzzzzzzzzzz=\nz{{{{{{{{{{zzzzzzzzzzzz{{{{{{{zzz{z{{{{z{{{{{{{{{zz{z{z{{{{{{{zzzzzzzzzzz=\nz{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzz=\nz{{{{zzzzzzzzzzzz{{{zzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzz{{{{{{{zzz{zz{z{{z{=\nz{zz{{{{zzzzz{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{zzzzzzzzzzzz{{{{=\n{{{{{{{{{{{{zzzzz{{{zzzzzzzzzzzz{{{{{zzzzzzzzzzz{{{{zzzzzzzzzzz{{{{{{{{{z=\nzzzzzzzzzzzz{{{{{{{{zzzzz{zz{{{zz{{{{{{zzzzz{{{{{{{zzzzzzzzzzzz{{{{{{{{{{=\n{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzz{z{z{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{zzzzzzzzzzzz{{zzzzzzzzzzzzz{{{{zzzzzz=\nzzzzzz{{{{zzzzzzzzzzzz{{{{{{{zzzzzzzzzzzzz{{{{{{{{{zzz{z{{{{{{{{{zz{{zzzz=\n{z{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzzz{{{zzzzzzzz=\nzzzzzz{{zzzzzzzzzzzz{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzz=\n{{{{{{{{{{{{zz{{z{{{{{{{{zzzzzz{z{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{zzzzzzzzz=\nzzz{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzz=\nzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{=\n{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{zz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{zzz{{z{{zz{{{{{{{z{zz{{{{{{{{zzz=\nzzzzzzzz{{{{{{{{{{{{{zzzzzzzzzzzzzzz{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{z{zzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{zzzz=\nzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{z=\n{z{z{{{{{{{{zzzzz{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzz{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{z{z{z{z{z{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{{{{=\n{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{zzzzzzzzzzz=\nzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{zzzzzz{z{{{{{{{{zz{z{{{{{{{{zzzzzzzzzzzz{{{=\n{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{zzzzzzzzzzz{{{{=\n{zzzzzzzzzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{zzzzz{z{{{{=\nzzzzzzzz{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{zzzzzzzzzzzzzzzz=\nzzzzzzz{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzz=\nzz{{{{{{{{{{{{{{{{zzzzz{z{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{=\nzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz=\nzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{=\n{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzz{{{{{{{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{=\n{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{zzzzzzzz{{{{{{zzzz{{{{{{=\n{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzz{{{{{{{{=\n{zzzzzzzzzzzz{{{{zzzzzzzzzzzz{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{zzzzzzzzz=\nzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzz=\nzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzz=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzz{{{{{{{{{zzzzzzzzzz=\nzz{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nzzzzzzzzzzz{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzz{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzz=\nzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz=\nzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzz=\nzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{zzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzz=\nzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzzzzzzzzzz=\nzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{zzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{=\n{{{{zzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=01=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zz=\nzzzzzzzzzzzzzzzzzzzzz{z{z{{{{{z{zzzzz{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzz{{zzzzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzz{z{zzz{zzzzzzzzzzzzzz=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nz{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzz=\nzzzzzzzzzz{{{{{z{zzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{zz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{z{zzzzzzzzzzzzzzzzzzzzzzz{z{z=\nzzzzzzzz{z{zzz{zzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzzzzz{{=\n{{zz{{{{{{zzzzzzz{{{{{{{{{{{z{{zz{{{{{{{zzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz{=\n{{zzzzzzzzzzzzzzz{{{zzzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{{{zzzzzzzzz{{{zzz{{{{zzzzzzzz{{{{{{{{{{zz{{zz{{{{{{zzzzz=\nzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zzzzzzzzz{{{{zz{{{{zz{{{=\n{zz{{{{{{{{{{{z{{zz{{{{{{zz{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz=\nzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzzzzzz{zzzzz{zzzzzzzz=\nzzzzzzzzzzzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zz{{{{zz{{{{{zz{{{{zz{{{{zz{{{{zz{{{zzzzz{{{z{{zz{{{{{zzz{{{{{z{{{zzzzz{=\n{{zzzzzzzzzz{{{zzzzzzzzzz{{{z{{{{z{{{zzzzz{{{z{{{{zzz{{{{{zzz{{{zzzz{{{{{=\n{{zzz{{{{{{{{z{{{{{{z{{{{{{{{zz{{{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{zzzzzz=\nzzzzzzzzzzzzzzz{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{zz{{{{{z{{{{zzzzzzzz{{zzzzzzz=\n{zz{{zz{{{{{zz{{{{{{{{{zzzzzzz{zzzzzzzzzzzz{zzzzzzzzzzzz{zzz{{{zz{zzzzzzz=\n{zzz{zzzzzz{{zzzzzzzzzzzzzzz{{{zzzzzz{{zzzzzzz{{zzzzz{{{{{{zz{{{{zzz{zzzz=\nzz{{{zzzzz{{{zzzzz{{{zzzzzz{{zzzz{{zzzz{{{zzzzzz{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzzzzzzzzzzzz{z{{{{{zzzzzzzzzzzzzzzzzzzzzz=\nzzzzz{{zzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{{=\n{{{z{{{{{zz{{{zzzzzzzz{{zz{{zzz{zzz{zz{{{{{zz{{{{{{{{{zz{{{zz{zzz{{zzz{{z=\nz{zzz{{zzz{zzzzzzz{{zzz{zzz{zzz{zzz{zz{{zzz{zz{{{zz{zzz{{zz{{zzz{{zz{{zzz=\nzzzz{zzz{zzz{{{{{zzzzzzzz{{zzz{zzz{zz{{zz{{zzz{zzz{{zzz{zz{{zzzz{zzzzzzz{=\nzzzzzzz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{zzzzzzzzzzzzzzzz=\nzzzz{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zz{{{zzz{{{{{{zz{{{{zz{{{zz{{{{zzzzzzzzzzzzzzz{zz{{{{=\n{zz{{{{{{{{{z{{{{{zzzzz{{zzz{{zz{zzz{{zzz{{zzzzzz{{zzz{zz{{{zz{zzzzzz{{{{=\n{{{{{{zzz{zzz{{zzzzzz{{{zzzzzz{{{zzzzzzzz{{{{{{{zzzzzzzz{zzzzzzzz{zzz{{{{=\n{zz{{{zz{{{{{{zz{{zz{{{zz{{{zz{zz{{{zz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{{{{{zzzzzzzzzzzzzzzzz{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzz{{{{{zzz=\nzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zzz{{{{{{{zzz{{zzz=\n{{{zz{{{{{zzzzzzzzzz{zzz{zz{{{{{zz{{{{{{{{zzz{{{{zzzzz{{zzz{{zz{zzz{{zzz{=\n{zz{zzz{{{zz{zz{{{zz{zzzzzz{{{{{{{zzzzzz{zzz{{zzzzzz{{{{zzzzz{{{zz{{zzzzz=\nz{{{{{zzzzzzzz{zzzzzzzz{zzzzzz{{zzzzzzzz{{zzzzzz{zz{{{zz{{{{{{{z{{{{z{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{zzzzzzzzzzzzzzzzzz{z{{{{{{z=\nz{zzzzzzzzzzzzzzzzzzzzz{{{{{zzzzzzzzzzzzzzzzzzz{zzz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zz{{zzzzzzzzzzzzz{{zz{{{{zz{{{{zzzzzz{{{zz{zzz{zz{{{{{zzz{{{{zzz=\nzzz{{{zzzzzz{{zzz{{zz{zzz{{zzz{{zz{zzz{{zzz{zz{{{zz{zzzzzz{{{zzzzz{{{zz{z=\nzz{{zz{zzz{{{{zz{zz{{{zz{{{{zzzz{{{{{zz{{{{zzzzzz{{{{{{{{{zzzzzzzz{{{{{{z=\nz{{{z{{zz{{{zz{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{zzzzz{zzzzzzzzzzz{{{{{{{{zz{{{z{z{z{z{z{z{z{z{zzz{{{{{zzzzzzzzzzzzzz=\nzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zzzzzzzzzzzzzz{{zz{{{{zzzzzzzz=\n{{zzzzzzz{zzz{zz{{{{{{zzzzzzzz{{zzzzzzz{zzz{{zzz{{zz{zzz{{zzz{{zz{{zzzzzz=\nz{zz{{{zz{zz{zzzzzzzzzzzz{zzz{zzzz{zz{{zzz{zzz{{zz{{{zzzzz{{{zz{{{{{zz{{{=\n{zz{zzz{{zzz{zz{{{zz{zzz{{zzzzz{{{zz{{zz{{{zz{{{zz{zz{{{zz{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzzzz{zzzzzzz{z{z{{{{zz{z{zzz{zzz=\nzz{z{z{zzzzz{{{{{zzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nzzzzzzzzzzzzzzz{zzz{{{{{zzzzzz{{{{{zzz{{{{z{{zz{{{{{{{zzzzzz{{{{zzzzz{{{z=\nz{{zz{{{zz{zzz{{zz{{{zz{{zzzzzzz{zz{{{zz{zz{{{zzzzz{{zzzzzzz{{zzzzzz{{{zz=\nzzzz{{zz{{{zz{{zzzzzz{{{{{zz{{{{zzz{zzzzzzz{zzzzzz{{{zzzzzz{zzzzzzzz{zz{{=\n{{zzzzzz{zz{{{zz{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{zzzz=\n{{z{zzzzz{z{{{{{{{{zz{{{z{{{z{z{{{{{{{zzzz{{{{{{zzz{zzzzzzzzzzzzzzz{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{zzz{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{z{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{zzz{=\n{{{{zzz{{{{{{zzz{{{{zzzzz{{z{{{{{{zzzz{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzz{zzzzzzz{z{z{z{{{{zz{zzz{z{z{z{z{{{z{zzzz=\n{{{{{{zzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{=\n{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzz{{{zzz{{{z{{=\n{{{{{{zz{{{z{{{{{{{{{{{{{z{z{{{{{{{zzz{z{z{z{z{z{zz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{zzzzzzz{z{{zzzz{z{z{z{{{{zzzzzz{z{z{z{z{z{z{zzz{{{{{{{z{zzzzzz=\nzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{zzzzz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzz{{{{{z{z{z{{{{{{{{{z{z{{=\n{z{{{{{{{z{z{z{{{{{{{{{{{zzz{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z=\nzzzzzzz{{{zzzz{z{z{z{{{{{zzzzz{z{zzz{zzz{zzz{{{{{{{{{{zzzzzz{z{zzzzz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{zzzzzzz{{{z{z{z{{{{{{{{{{{z{z{z{z{z{z{z{z=\n{{{{{{{{{{{{{zzz{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{zzzzzzz{{z=\nzzz{z{z{{{z{{{{{{{zzzzzzzzzzzzz{{{z{{{{{{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{zzzzzzzz{{z{z{z{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{{{{{{{{=\n{{zzzzzzz{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{zzzzzzzzzzzzzz{z{z{z{z=\n{z{z{{{{{{zzzzzz{{{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{zzzzzzzzzz{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{z{z=\n{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{zzzzzzzzzzzzzz{z{z{{{z{z{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{zzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{zz=\nzzzzzzz{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{z{z{zzz{z{{{z{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{zzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{z{=\nzzz{z{zzzzzzzzzzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zzz{{{z{z{z{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{zzz{{{z{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{z{{zzzzzz{z{z{{{z{{{{{{{{{z{{{{{{{{{{{{{z{zzzzzzz{z{z=\nzzzz{z{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{z{z{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{zzzzz{z{{{{{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{zzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{z{z{z{zzzzzzz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{z{z{z{{{{{{{{{{{{{{{z{z{{{{{=\n{{{{{{{{z{{{{{{{z{z{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z=\nzzzzzzzz{z{{{z{z{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{zzz{zzz{zzz{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{z{z{z{z{z{{{{{{{{{{{{{z{zzzzzzz{{{{{{{{{{=\n{{{{{z{z{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zzzzzzzzzzzz{=\nz{{{z{{{{{{{{{zzzzzzzzzzzzz{{{{{z{z{zzzzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{zzzzz{zzz{z{z{z{{{z{{{{{{{{{{{z{z{z{{{zzzzzzzzzzzzzzz{z{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzz{z{zzz{{{{=\n{{{{{{{zzz{{{{{zzzzzzzzzzzzzzz{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{zzzzzz{zzzzz{z{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{z{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzz{z{zzz{{{{{{{{{{{{{{=\n{{{{{{{{{zzzzz{z{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{zzzzzzzz{z{=\nzzzzz{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{z{z{z{{{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzz{z{zzz{{{{{{{{{{{z{z{zzzzzzzzzzzz=\nz{zzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{zzzzzzzzz{z{zzzzzzz{z{z=\n{z{z{{{{{{{{{{{{{z{z{zzzzz{z{z{z{z{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=\n=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz{zzz{{{{{{{{{{{{{zzzzzzzzzzzzzzz{zzzzz{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{zzzzzzzzzzzzz{z{zzzzzzzzz{z{z{{{{{{{{=\n{{{{{{{{{z{z{z{z{z{z{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{zzzzzzz=\nzzzzzzzzz{zzzzzzzzzzzzzzz{{{{{{{{{{{{{{{z{z{z{z{z{zzzzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{zzzzzzzzzzzzzzzzz{zzzzzzzzz{z{z{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{{zzzzzzzzzzzzzzzzzzzzzzz{z{zzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{zzz=\nzz{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzz{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{zzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{zzzzz{z{z{zzzzz{z=\n{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{=\n{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}}||=\n~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{zzzzz{zzzzz{zzzzzzz{z{zzz{z{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzz{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{zzz{z{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\n{zzz{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=\n=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z{z{{z{z{z{{zz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}=\n}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||=\n~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01=00=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=FF=FF=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=E0\\=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{=\n{{{{{{{{{{{=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=8D=\n=8D=8D=8D=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~}}||~~~~~~~~~~~~}}||~~}}{=\n{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=01=01=01|=\n|~}}||}}}}}}}}}}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=\n=01=01||~}}|}}}}}}}}}}}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=00=0D=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=\n=90=90=90=90=90=90=01=01=00=90=90=90=90=01=01=00=90=90=01=01=01=01=01=01=00=\n=90=90=01=01=01=01=01=01=01=00=90=90=90=90=90=90=90=01=01=01=01=01=01=00=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=01=01=00=90=90=90=90=90=90=90=90=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=00=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=\n=8D=8D=90=90=90=90=90=90=90=01=01=01=00=90=90=90=01=01=00=90=01=01=01=00=00=\n=01=01=01=00=90=01=01=00=00=00=01=01=01=00=90=90=90=90=90=01=01=01=00=00=01=\n=01=01=00=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=01=01=00=90=90=90=90=90=90=90=90=90=90=90=90=90=90=8F=8F=8F=8F=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{||~}}=01=01=E8=04=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{=\n{{=8D=8D=8D=8D=90=90=90=90=90=90=90=01=01=01=00=90=90=90=01=01=00=90=01=01=\n=00=00=90=00=01=01=00=90=01=01=00=90=90=00=01=01=00=90=90=90=90=90=01=01=00=\n=00=90=00=01=01=00=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=01=01=00=90=90=90=90=90=90=90=90=90=90=90=90=90=90=8F=\n=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~}}||||||||||||||||||~~}}{{{{{{{{{{=\n{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=01=01=00=01=00=90=90=01=01=00=\n=90=01=01=01=00=90=90=00=00=00=90=01=01=00=90=90=90=01=01=00=90=90=90=90=90=\n=01=01=01=00=90=90=00=00=00=90=01=01=00=01=01=00=90=90=90=90=01=01=01=01=00=\n=90=90=90=01=01=01=01=00=90=90=01=01=00=90=01=01=00=90=90=01=01=01=01=00=90=\n=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~}|||||||||||||||||||~~}}{=\n{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=01=01=00=01=01=00=90=\n=01=01=00=90=00=01=01=01=01=00=90=90=90=90=01=01=00=90=90=01=01=00=00=90=90=\n=90=90=90=00=01=01=01=01=00=90=90=90=90=01=01=01=00=01=01=00=90=90=01=01=00=\n=00=01=01=00=90=01=01=00=00=01=01=00=90=01=01=00=01=01=00=00=90=01=01=01=00=\n=01=01=00=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01||~~~~~~~~~~~~~~~~~~~=\n~~~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=01=01=00=00=01=\n=00=90=01=01=00=90=90=00=00=01=01=01=01=00=90=90=01=01=01=01=01=01=00=00=90=\n=90=90=90=90=90=90=00=00=01=01=01=01=00=90=90=01=01=00=00=00=01=01=00=90=01=\n=01=00=90=01=01=00=90=00=00=00=90=01=01=00=90=01=01=01=01=00=00=90=90=01=01=\n=00=00=00=00=00=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||~~~~~~~~~~~=\n~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=01=01=\n=00=90=01=01=00=01=01=00=90=90=90=90=00=00=01=01=01=00=90=01=01=00=00=00=01=\n=01=00=90=90=90=90=90=90=90=90=90=00=00=01=01=01=00=90=01=01=00=90=90=01=01=\n=00=90=01=01=01=01=01=01=00=90=90=01=01=01=01=01=00=90=01=01=01=01=00=90=90=\n=90=00=01=01=01=01=00=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F4=88=01=01||~~=\n~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=\n=90=01=01=00=90=00=01=00=01=01=00=90=90=90=90=90=90=00=01=01=00=90=01=01=00=\n=90=90=00=01=01=00=90=90=90=90=90=90=90=90=90=90=00=01=01=00=90=01=01=00=90=\n=90=01=01=00=90=01=01=00=00=00=00=00=90=01=01=00=00=01=01=00=90=01=01=00=01=\n=01=00=90=90=90=00=00=01=01=01=00=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=F6=C0=01=\n=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=\n=90=90=90=01=01=00=90=90=00=01=01=01=00=90=01=01=00=90=90=90=01=01=00=90=01=\n=01=00=90=90=90=01=01=00=90=90=90=90=90=01=01=00=90=90=90=01=01=00=90=01=01=\n=00=90=90=01=01=00=90=01=01=00=90=90=90=90=90=01=01=00=90=01=01=00=90=01=01=\n=00=01=01=00=90=90=90=90=90=00=01=01=00=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=\n=1C=01=01||~||||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=\n=90=90=90=90=90=01=01=00=90=90=90=01=01=01=00=90=01=01=01=00=01=01=01=00=00=\n=90=01=01=00=90=90=01=01=01=00=90=90=90=90=90=01=01=01=00=01=01=01=00=00=90=\n=01=01=01=00=01=01=00=00=90=01=01=01=00=01=01=00=90=01=01=01=01=01=01=00=90=\n=01=01=00=00=01=01=00=90=01=01=01=00=01=01=00=90=90=8F=8F=8F=8F{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=01=01=01=01||~|||||||||||||||||||}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=\n=90=90=90=90=90=90=90=01=01=00=90=90=90=00=01=01=00=90=00=01=01=01=01=01=00=\n=00=90=90=01=01=01=01=01=01=01=00=00=90=90=90=90=90=00=01=01=01=01=01=00=00=\n=90=90=01=01=01=01=01=00=00=90=90=00=01=01=01=01=00=00=90=00=01=01=01=00=01=\n=01=00=01=01=00=90=01=01=00=90=00=01=01=01=01=00=00=90=90=8F=8F=8F=8F{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}=01=01=8C=AC=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=\n=8D=8D=8D=90=90=90=90=90=90=90=00=00=00=90=90=90=90=00=00=00=90=90=00=00=00=\n=00=00=00=90=90=90=00=00=00=00=00=00=00=00=90=90=90=90=90=90=90=00=00=00=00=\n=00=00=90=90=90=01=01=00=00=00=00=90=90=90=90=00=00=00=00=00=90=90=90=00=00=\n=00=00=00=00=00=00=00=00=90=00=00=00=90=90=00=00=00=00=00=90=90=90=8F=8F=8F=\n=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{||~}}=01=01=00=0D=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{=\n{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=01=01=00=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{||~}}=01=01=00=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{=\n{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=01=01=00=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E8=04=01=01||~||~~~~~~~~~~~~~~~~}}~~=\n}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=00=00=00=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=01=01||~||~~~~~}}}}}}=\n~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=\n=90=90=90=90=90=90=90=90=90=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=FF=01=01||~||~~=\n~~~}}}}}|~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8D=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=E0\\=01=01=\n||~||~~~~~}}||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8D=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=\n=01=01||~||~~~~~}|||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8D=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=F4=88=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{=8D=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=\n=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F=8F{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=F6=C0=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=A4=1C=01=01||~||~~~~~~~~~~~~~~~~}=\n}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=01=\n=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{||~}}=01=01=8C=AC=01=01||~||}}}}}}}}}}}}}}}}}}~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=0D=01=01||=\n~|}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01=00=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}|||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||~}}=01=01=E8=04=01=01||~~~~~~~~~~~=\n~~~~~~~~~~~~}||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||~}}=\n=01=01=00=00=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=FF=01=01||}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=E0\\=01=\n=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}=01=01=00=0D=01=01zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=F4=88=01=01{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{=01=01=F6=C0=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=A4=1C=01=01{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=\n=01=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=8C=AC=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=00=0D=01=01=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{=01=01=00=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=E8=04=01=01{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{=01=01=00=00=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=FF=FF=01=01{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=E0=\n\\=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{=01=01=00=0D=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=F4=88=01=01{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{=01=01=F6=C0=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=A4=1C=01=01{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=\n=01=01=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=8C=AC=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=00=0D=01=\n=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{=01=01=00=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=E8=04=01=01{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{=01=01=00=00=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=FF=FF=01=01{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=\n=E0\\=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=00=0D=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=F4=88=\n\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\nContent-Description: Note the use of the audio button..\n\nWWT03dbQ2N/edW1bW1pn5+Xc5uHcd19lalxa+fV082deYGfr4Nve09rqdnL2em9xfmxvbWz3\nYWRfbfR301bc12PXUepYYnxu6Ozu3u5yeF5ua3f7eftz8ndicGhy5+DV2t7q9G/ufX1p9N3n\n9ut3+PN6cm10Zl90Ynzx/uzpf2/8fnJ6+X1yZm16eP3p5+Tk5e1yamdoe/d87eDv7/x4/vDj\n5eNvd+5yeWZqZF9lZGj+6+Tu5uzr82pubHLr+OTf5Pdq+Hp6+Ofe8eTrbmlp/nJqd314aG99\n8/l8fHB0621tbHd5bmxna3Rwa/Xs7Onk5vfyeH3q/XF2amVjZmt5+O/n6/l8+fXu6ezybV5m\nZ294d+/z9O/u5eXt6v3++vr5eXh7bXrk6HZwZmNod3p0dHBzfv31+HL/7+3+++33+fDr8Xf4\n7vRmY2xtdnNzdHH39v5sZHf5+3d27ubm7fHvf3X/fnpxdv749/Lp9O3r8vt3Zm9qcP/882x1\n/e/x3d1b13xlXlt9UmZW6+7M6u3P8vJW5vhbV2rfb3J+4uj7ffjlaP1p+XVle+TWd17c3VtX\ncPNmUGzW+lnp5PBsbeV9YmD27+tsZtlu9uXg2nd421rWWGfe32Rf3dV5UNR4dlhc5vN2Ve/W\nWGTeeXxlWev2+u7x3XJ4+vXzZuFvc91l4+do7F/l52T3Y/v3ZV/1a/Rk7Pd8aWXceGHx32vr\na2zXal/Zduvt3d1z33HbcV9neV9nZ3dpZX/t8Gh59uNmZvvvceLqdXtg7Htv4Gzy6mjt2mvv\n6X1deeN7YF/m7mPr73LncPHvZ/Jn7+Vedu1lc2J26Hdy3tb2/N3g9O/f4mdY+3BdZm7h41/1\n5+3peHdv+WpbcWZt6Wr6eW7zd+ty7Nvi7/fv7XBxdHp+8+fuZvh6bPRs+e9tbmnn6m1sduxr\nbvXzb21r9Xlsbe/fbG/n5+dwWufjXnfn4/Ff491YaeDhaGTx7GRX7fBsZ27V43nv9ufuZXV9\nbu189GdPaObr6fXo5uF57dpjWGf+Z1/p/HF3YPze+1ru1+1l++jvbfT1e/d96e5iZOzvX2zv\n6f3r6en1bfT06G9v7mf382F67mRnfv53c2Lpd2TgbW/vd+h/7lxo3GZefe5rYuPpX2zs1vdp\n3d3b/PvlfHTwc2ZtbmloZnj9beF+eOJfePHxcWnrfHj47upk/ery6l/t013p2NzhVNv0XmZV\n+mFpXmXhZ3Lm7uxkft7sXV9x+nVr8OPi727Y3W5l7d9kY+fo6G9f+Nx0X/jiYWDt9Ghsanrm\nYWb1feh0eNvV417k2PZkXOXyVG/q/Flm3eb3fnFy43VW9N545n3e/l7fcG30bexlfvr24Hf8\nbX1qZ2v97G1v7e31bW/v8Xtp9H5tY2/q7nFx5ez1e3nk5Ghu6/dqanbscGpr3uxteOblXf3m\n5m1j6/1u7v14Z2Xsc2l2+/thf9/rdfD29ero3+xy4uh9b13f5GFs8uleYO73c//v3XFffuHj\naWTe8f/ub+vxa2Ps+G3t6Ods+ORrc3RrcWxiZezxYF3k5H1l/Nrra+Tnevrs+nhvZd3vYHbu\n23lf/u3uYFv+82dl6f5t8+ne+mjibvRwX+7x9Gj22+VqfuTo7fp9+m5iemppbHtwbu/3cvvr\ncGbp72pbd+B8b3/p3eZj8t7w+G996V9m52tvZHLe/m5vettoXO7acllu/fX9YWHl62947vJ+\n9ebzZnHe7m5p9+Xtcmnw62xm+fn9bml7fGlnamH37GPz62Xn3fjy8+PsanTfemJt7+5fYnzl\nb3f19eV8beb5c3Zs83VxZvbsbe3u5fdf8OtqZmLl4mlf5th4X3re3V1e+XdiWvXsaGN96O7n\n4vfj8F9/7/hpb/nvenTx7/5zduXsbW3vbWJlY/l8a+lwaW/s2/915+BqbfBpcWBe5n5l8uDq\n6efv4Xhv9m9lWmP0Zn1+Zt/u+uXu4mxy62lhW/DcaHfz+OxvaOvrbHX16PZfce/0ZGju639l\n9u34a23q51583PXsamzpa3jdXWrkeuplfuTr72nx8/33bf5vXvd+W1/l6fhiadXoX27p2Gtc\n/uRxaPH37fXt6Pzj+PLnaO1vX3dpa3hwdHD85374aurfZWZv+W9z6e7s8+7g4PVo8eh2Xnru\nbF9l3XRi6efobHn0X/Z5Wm9qc/V53/768mzh6v7zeWv7+2Tn9fJ6Y+Px7u3442tdadznX2Hu\n7HJfeutmemTt3XF6697wd37n5n1jfdjubWt953fsZWnp9W5k4uds93l7+//te2d8//1r+v1o\n623p7mdm9d9td3Xs519p3vNzan3dd118+354Y+jadnzj5Glg5uxjb+N9bHbt5O3yfed66mhf\nd2leZHFvbWT3ePvn7ep+8OT1eG//6mhx23xt4+/d/Wjq8PNoZPBsW2hp92ds5vHrYmF87uld\n59VPa9nq72Df1WVx6elxdfd57/pxZ2nu725483RibeVtXOzbZ2Tv9N51UnvgbmHv3uj2euPg\n++5+5Opfb+z3VlrvfmD492Zt5fxx6fR5Z/b+Yu347OVf785lX+Xf6Vtt3NjoX+ndbFls719c\nW3biXWzc6G593dp3WnTf6mhefObxbfbn9Wvr5HJrbHH5a2zdfFrr4WZiZuv6ZF9m62Tn+V7f\n8nLc8G/r2P1seGTcflvv6epr79ptamv5fFpu3vFoXOfoZ+Nd495mZmJ+/Wxp+9137d595+Ts\n/Wxv9Xxu71xr42Hma27ZeW9z/N57c2To3G/zYnD7+H5Zfev6emLq4+d6YdzmaGNz3W935GJ1\nc1/x631i/Nv9Yvrn/mby7PNlaG/8be/i8XPe5lp7+XVmYu9zZXP65PVtbOrg/3R74OZxaPLu\n/W3t3m725XPy92v9bmX/bmtncNv6fPfk5/r1aevtblxh5vBx+Xjt3Gv45H57dHl08uLyd+R7\nXtX3VWhofXZcX+bjdWVw8N33YOjzbv525/zq/OvcWerYam7t837x52Ju811yWmZsZulYcul5\n3fx25+Hu8nln6Gn22mvq33T47PToeGFw+W1abP39/H3n+nH3e3Jl/3Fu5mth6e7/eW/f3m9w\n3t/nfmzn82dcfO9fY2zr7WT84ex2bmxx+2d07/n9X3H1aOXjb3X87m3f3n7b6Hv+fu53dGN2\n6WxmbfHheWV19nlpY3ptcXBzfmru2Odi4/Rw32Bk7uroau/ye99hYt3d8HZ6b/TnYFp6/vFq\nfOjv5HN7+299evN9a3Fs8nZve2z181345/bhdPl79eFlb/d96/Vkauv35vFq3eJicO985nF9\nb234dHl69/VrY+zsanJ16ONeaX574etp5u9g/OhmZeL76e1q7ux+9Gp17W7vaGztdOLh63Vv\n9mBqanp/aGZr3+Lk5Wz42Xdn/XPp/m36bnJ28Wt98+riZnzsbfF0Y2Nr7mtffH7Y7Vrv3/V7\n5W1l7Gl28GT21XV++Wbd6l9mYWh+e2j39XLtfn73d/nf7Wf95ep1YuHYXm7f/fzs+X/1d2L8\nZV76dG1s+O3m+Wjz5HtsbGvtaVz36+jfY2XZ5v7j7Hz59mX7fmZv7e1Xb+D26n9v4+Plcmlm\nf3hgZl79cGrqdvjo7eb7dePk7HBn7uloWnnpf2pu3nll93D37W/26H5tfu9ybGt3cnH57N7p\nbuXq6eF2bfj1XmTyZm/teeb6X23u5X5kdt3yXl9g8+9nbero+H347ebubfPqaWP+6vtud3n0\n9Wz2Zu7f/fBkafdr/PxzfPz+/PDh4n/+9XR0eXL4fWRy9OvsfWhm/vVqdOr+eelsZtzzYW1r\n8/txdXzo3+z34+bv5f527G5t+Xh2YmJxa379bfH0eft4bvPoaW92bPF3bvvr4eXx8ujofnz5\ncnNtX2n1ZV/5+n1zeuXmefR8ZWRw7/N+8e9z7+Xn6fru7nZxc3p69/lqcu30fGRt/XN19P1q\n+Xxz+nZ4cvZ6ZXr5+ev18ert4eHt+HPv8Wt4c3Rvfvl2evzv6n5++XZ9bm54c3JsbnZ98Xzy\n6fr46uz86+twcH9wam12+m/+7e36e+/3aXjvamdpZG/3dGp99frm6vLq+Hf58XL+7/5sePV5\n+vVwZ3N/fPX77n569HB98212+2l6+HpwfXt/5+n5eevr+vT5dnx5b2lnZ3d7d+bx9+zt9P74\n+v9sZ2xsf+bxc/Hr5e379vt5cHdrYWJu9/14func63Bve/t++XRqaGp89ft8+ndx7+r4/vf6\n8m9rem95d3J0aP7n6fF37+Xq8fnu82dmamptZ3l3bXh6+P767O/p5N/j8/Px+W1ycG5sZWdm\nevJ5+X7+fm9x+O/5+3V0b3zs8/Tr7/3r7Xr9+Hv7+3x09ut8dXZ68/5ma3Jmav5xbXzu7vL0\n+X9zfPXq+XT2bXH7b/fr8vv2/vru8P7+cnvwcWNmd355fXtwdO/zcnPv+Xj/d/bs7+7u5+rv\n7erueW5tb3hueXV0fPf8b2xweHb99n5pbP5zbnrv7vD48+Xj6OnudmtvfG1qdn5td3V/73r5\n+fr5evp+dP70fGp5/f95dX9v/Or56/J67O97d3f98/Z6bXF3eHlybW/48fx++/z8+Pt2eHj+\ncm9+evH3bvfp7ePk6u/7+Wtsamduc/z78+/w+Pz36vR7f3Zubnz69/14evn3fXvu73Zz+f35\n7/n6cHp+cmpqfXxqbXp1c+/z8+r//Ozt+f33fnn6+vH9fPDs9nj6+nP3fHZpZ21qa2ptb237\n9fbwfvL48O9t+e99/f/09Ont6evu6evu+XFoZl9reXBobfx8bH74/+/s8+z3bn/wcn33cXJ9\nfnL68PLn4+p/8/NwdnVoaWl1fnZ8+fJ5fv7x7/vzdG76+3Nrb3Np/+nx9ufpfnj15udxcHds\ncX9vanf3bHru+ufsevb9dGx2bG9xbnrt6/rz6efp8e3v9/n49210dvz9b252c3RtaXp+eXJs\nZ2r77u/1f+jt6+rw8//z/GxpcHl8/eno9/Xx8uv6cnX+cWhlbXhv9W9scHbr7nr18G9tev55\n+3348/Dq6PT4+XVueP5wc3h2/n189n547/917fl+d3R9eG59ffLs+O7z8ejo7fL4b3b+e3dr\ncnJ9d3Jwcvn2a19u/PPu9PH1/ebpd25s+P1593F7fXnv7u7w73Zqb296/Whm+vHx7Onv9fn7\nfXzz6fdqde3ufvZ7bWl29Xl+c3H+cGt39/l2cm958nN2+f/37Op5e/H3ffDt6Ojr6e368vpv\nbmpoamj/6+vzeO/v8PH88P5sZGxuZGf46uT09ebu6+r8dXD+dm9tZWdzc2lsZ259bm78/HRx\n+/lw++Db3+Df3+fd3Ojc4Obm5+vzfmhfXV9cWE1PU1BOTk9QV2pvbfXm4NjZ19TTz83Lzc7P\nzs/X3d7d7PP9/HFmXltRTE1PSkVISEdIS1RfZmzo4uHUzc7R09TV3d/b3vLz5OPk4uja0NLR\n0dPX3N3sb2pwZ1hOTFNNR0tLRUVJSUxUVlh54t/S0NnT1Nnb3N7V1Nvc1dTb1NDXzsvMztHO\nz9fc8l9QS0Y/PDw9PT5ARUtXbvni0M3MzNLW1dXk7ujw+Xrz3tXY1s3Jw8LCxsvN1d/s+G1c\nS0VIQzs7PTw9QENIWWZq7trOzdHd3NbX4Obi0s/Py8fBwcDAw8TDx8vR2uhhTEE+OzUzNTU1\nOTxBTWP63MvFwL/DycjK1drf7unn6/jm3dPLzMnBvb/BwcLK0t56WT89QDYuMTQ0NTk8QVri\n3M7Fwb29xcrIyNN2cuzq+PXp1szKxL6+vr2/w8XL121OQkNDNS4wNDQ0NjxJS1LNzcm7uLvH\n2c/F2E9P7eFtQkG+s8G7rqust7atul1CKh4uOB4cKk7F5j/Hqau84FjJuFMtMErXbEI+zKyw\nzcSzr7bEw7myr7jLwsJfLRweMigeITC+tM/MvK+sxDs7681PMjFku75pTMOuscPNua+vs7e2\nsbbB30s0HxoqMSIkM8mutb7Nx7fFOioyavJIP1nGra/qW8q2s8Pnzq+nrLeysbzIWC4eGSMu\nJyUuzaupsdrrvr5PLi08dtVUQm+tqMlEQ8uxuNpwuaakqbLGx79ZJhUVLD4sJjG6op+wSEbH\ntmgnJjq+tFozXamo0zcy6auryFC6n52lvU5p1jwbDhg1RDUtTqydnLY5OM/APSknPbe0bEO/\nrrPPOTdwsKy/1LWinabNSU1BJBMWIzJCO0jFpZul1TY+1HA0KC/cuLxszLW6xU85SryuuL61\nqaCjt2k9LiEWGCMpLj7YsqSeprhrS1lINSovaMDK2Lq4w8tVQWC+ur+7r6ejprHZSzQeFRge\nIy0++LWhnaW1zF1OTjopLU3Y2Lmvu8HLVFzLwMbAuK+opq26xlMqGxUaICQtOGutnp2mttBz\n51IwJipDyr20s727vuz7zcXEvb23qqiruN9GLh4XGh0eKDNrsaOfpauzwt1PNCkqMEvOu7C3\nubnAvcHKw727t66srbjrSj4gFBofHyouOMmmn6apr7q61jYoKTdNUtG5ubGwv8S+u7m4vMK1\nrq+51edeLBgYHx4iJic7tKWpqautpar6LCk0PD87P8uvrLnPyLKprbvMva+vus7p2Oo1GxYe\nISMjHy2/p6esrKqhor1ALy4xLi8+2bq5u723raqrs7q5uLq/0frLyzogGh8iHx4cKeCxsLSv\nqZ2er+tPRjovKjNxyMzgyLWsq7K8uLG0v9PS0si9vNwhFyIlIR8aIdWsxs+3rpycr+Pd2v1B\nKi1Z0NtgUc+uq7S/vK6tuM38077MbFpeLRklLCQqIyZNt09SubanpbrPtK/DTjdDwcREOEbV\nub7Py7uvssXb0crdYz9FXetIJzVIO0s0LTncQUZmcda9ztbCxb/By93Kz9v3ZE9q3dbO4Nfg\n4tXZ6OLMztnl5vLq0OpsT1ZVYV5HR0tLRUM+QVNmXWfq4d7V82x0d+jsfOHQ2N7d18e+vcXM\nxsjGy+dmWlxVWUpNWFxXT05LTlFUYmBab97k6+rn5GxXUFRRZ2VXct7NyszSycfHxs3X2+Zt\nXVNVT01NTVFPTUxVY+zj1tXYz87O1NfpZ1VSV13+fnv17ejg2Nvo3tnV1OP5a15TVFlMS0lG\nSlFbePXi1NDN09Te4+bsbHJvafLo49vZ3ujp3d7j6erd2d3p7P52dmFTT1NSTlFUWGVnYW1u\nZm1yeHBs8efk3/Hr6uDW2N3i5OLY4uTe4N3b3/5vePZqWVlWWmlhXV9ocm9qa2dvc3Xt6/Hr\n4urv9HZ1en13cHv8/fj17uXh6Oni5e9y8vFuf311ZmRraWNeZnx+aPj2c3f48Orj4Nve397e\n3uZ6dWxoZGd2amZpdmdgavf0a2lsaWNocWhnefTs8Xv06Obp7Ov37u7s4fH46evt6uL2bXH+\n/mx0++r6evp1eHFoZGRrZWFfZXBsdvP29ebw7Ofk6/by9/t5ev7v7f/+/vPo8/f3+352a2xt\nefhxbXJ29fDz8P726t/r9fh5e31oa3d3cWtyanNwdm918+vm7e18eftv9+10b3dtcv/x5+zl\n8+vk7ejp8f1wa21pZ2hlZ2hveG1lavzx6ejz7eTk4ubu6N7r+f/6fm/5cmtxaWp+evjt+vx/\n8W9ia2dfXmNlaH/07+Xp7uvj5u7x8vbt6urt8n5vfW9t7e5v+fJ2dmtqY2ZqZ25qamdpd3lz\n6uDo8/Tp9PPv//b7/ejq+fx6cHl9d21s/HRxdXFhY995a2vw+3P4e37w/e/f4ujk7nhu/WdM\n9eFa+EjjvED0t3RkT36/8lJf8XtBPcd0SlLKzMlx1czfWlPR6HpMaGtz/M3oXfJibmRhZPda\nUWraVUrq5uvr287K7mDj1n1baFxiWVV34OLj5tjV2d7Z29rP0eTZ1Njc4047Qkg8OTU7TlxJ\nXcjAx9DMwcB5Xtned3Rizslf8sC9wcHEuba+xMK+wGEsJTIyIh8lNFVFOcaoqrGvray2TDlD\nRjUxMjlJ3M3CsbCxr7G4s7rFv8jKw8vC2S8eKUAgGh4qRV4wf5+gr6yoqa1eLztGLi04PkpO\nV7aqs7qwrK/EfsW+5F7RvLy/xk8sJC8pHBwgLkQ/SaygpaejpavBPjY4LiswNjxN6b6wrrKz\nsLLE18flz9jRt728tr5NJyEuJRoaIS9FR1upnaKmoaWsyjguLykmLTM9asW1rKutqq23v8vY\n+k9nyc7Iwrq9VDAkLS4cGiArNT4/tZ+gp6GgprJUMzguJSYtNUNfzLCprKypq7S+zc7fTk5t\n4NrNz/5LMyo0Kx8fJCkzOj++qaemoaGkrMNbTjwvKy0vMjtRx7Owr6uqr7jH3PRbNj5BNUU8\nRWxObfpZ+2FSTlj5Zl5fbdvsavJoYFJLV1le7uTZy8W/ubq+v8TP32FJR0E/QT9FW1n819HH\nx8jKyc/b1+D64+FsWlFKQj45OD1EQkhae9XJycW9vb/CxsrL3lpQUVZQSkhTXGly5dfc1OfW\nysrOzcXIy8/l/2lWQj0+Pj8/Pj5P/era0szGyNLd1eNbT05VW19hZe3b4eDh2tTZ3t7T1dXY\n2dzf5U7KxU/G2+PP++deT0hBSkM+Q05bV1pt+9/hV13vf/FqXVDq0lRl6tPP0d3Lvt9vxsrd\ncPDAv8zHtrG+y9M8PlgsIiouLDI0NsS107mmrbu4xOHaRTdJRC426PxQ0r28uMHDtsB02cXP\n1sS7tsPNutUpKDwnHB8pM0Q6fqSjs6igrcHoRz43Ki5MQzdutrm/uq6vw93GwFtFdc7Q27+y\nvsm8PR8uMxsaJis0UmqtnKOqnKDH1/cyKCcnMjwwU6+2v6mlsrq8v8ZRQdvJZN+6uszKyigf\nQCcYIC4tPm/Ko6CzpZ25VdJNLy4vO0w4QLu637qstMbOu7nb5cDDzL+7vMFszj8bKDwcGS42\nMmzUr5+uu6KrRknQPS42S/NQSca24l23s9bnvLrGyLu4vry1vcXdWEsjHSsmGSE7N0i/sKem\nsa2r0j1VQS40TF1WYcG2xcy8u8TLyr/Ax7q4wruvvc/PezwgHi4hGCdDM0O8sKmqtq6sXjnO\nWy493HpeW9u82lvHvNHPvLi+xLeyvsG2usfiV08qGyUqGx4/RUS9r6yptb2uzS9Qyzg31Mns\nZdzB4kzpxNToxrq6v7ewusCxssTgXVYtHB8vHRs5Vj7Mrq6qsL6yvzRByT826sHkWPPI7EVt\nxdHTwrm0u7qvtsK3tcL+W1MoHCU2GxxOXT3GsbKtv82xzi5YuUI+v7zbb1jh4DxKvc72vLm3\nt7qyssC3sr/oUlEoGiQwHB1KWUHKsq+txtywyy5ftkpBv7vSWVnVYTtOwNv+vbe0trewtLy2\ns7xdTU0iGysrGiNjTlq+ua+vZeKyZzHWuU5cu7vNTUv7TTlSv9PiurO1uLeztbu3r8FMfTca\nHjkfGzfkTs++uKzHP7+7ND66xXzIurrgPktuPDfXvNjMs661urW1u7y1s9JPSyUbKS4cJFpe\nY8PGubJNQbraNdy4ysW5uL5MN1dHMEbCwcS+r6q2u7G1vbyzw0NKLhwjLyAgS11Yvc3Nst8z\n6sg8S7u8vbS4utE+QUQ4OmW+vMi3qq+8trS2ubm97EwuHSIvIR46/2PHzc21zTZRyERFwby7\nsLe9xEQ9Szg5aMm7vb2tqrjAtbO6vL7pUzcbHj0kHDzXYsTU/rLFLD65SjnGubaxvLu1WTRC\nQzlLyrm5xbaqs8y/s6+03uXKMRshPyceNO7S10Vrr84uRb50Qe+7r7PFvblcMjdFQ0/Rt7G7\nuqytwr6zsbPMQ1E5Gh9LKyI4WNW9RD6xvy48xXNN6cmyrsTSveg3NkNd08y8s7W2srO5urau\nt2BFTSgaLTomKjpQvc823q9hMURhauBYy6ywzsi9/z05RNHGzsG0sre4t7WzsbTEak0xHiM2\nKiQtP9XAQ0a2ukE6SWLWU0q5rLzcxcd6QDvpvs3Uva+vu7+yrLC2xl50Oh0kNSomKTHXvD9D\nsrVwRDxYwks5y7W6zWfZxWxBXcW8wdC2qrPHvq+uuNRc4kAjKDUrKSktW85ASL65yG9FeMJn\nRmzMwcxrYdfS49TKvra7vLa8z97l1c9XTNzUbGFbUUI3Nzg4OTY4SFlMTWjUys3Lw8LU4N90\nXmx3anrszsG9vL+9urq6ubu9wtBvVUo6Ly0tLjAvMDg/Rkha08XFx8fCv8TN2/FqdGtce9LI\nv7u8uLO2uLa5vb7RXVtJNC0rKy0tKzA8QkpZb8/Bx8rIycXF1ufT2On+cePJx8G8vLi3u768\nvb6+ynljVzwwLi0sLSwtNjs9SV3YwsXLwb6/v8bTzs7d8mtw2dfXx769vb2/vLi5vMLP6G5G\nNC4uKyssLDA6PEVl2Mi/w8C7wMfDzNTV/WdsX2Xo2s/Dvr26urq5uru8x+5dUz82MC0sLC0v\nNzo+TXrTycbHwb2/xcbL0d95Y2Nr8ebTycW/vby8vLy7u8DM331PPDQxLiwtLjA2PEBQb+TM\nx8a+vsTFx8vQ3fP7e/3k2M3IxMG+vb/DwL2+x9PebU4+NzQvLS4vMjg7P01d9tnPyMHBwcTI\nyMnQ2NXT3uHUz8/Ozc3Nzs3Ky8jFw8bO22lLQzoyMDAwMjU2OkNPXvzZycTCwL6/wsfM09/6\n+OTo6ePTysrLyMXExcXHyszS4G5PRj86NzY0MzY5Oz9HVHnf1MvHx8jJys3P19zZ3d7d3dPR\nzczMzcnFx8fKz9Tc4uR+Wk1JRT87OTg5Ozw+R1BYau/c1M/Nz87Lzs/Oz9PZ4d7a2NLNycnH\nxsbGyc/a2+R0YFpQSUNBPjs6PD4/QUdQW2vt39vX19rY1NDR19XOztLT08/Q0NLMy9HVz9Lf\n5u/vfGZeY2JYTkxKQz8+PkFJS0tYZW/v6d3Y2dfPzMzR0szM1N7b2Nrh7XpZ6r/D3d7P0Nfk\n7WtQXNxoP0RRQzo7O0JJPkJt09HU0MLCz87LzuPqz9Tt9uXs72Xq0lv7yNF2fM3Ea3PM7Xrv\nZHr+SkFGRz87OT9LQ0Rm2dLUzcPAyMfBx97cz3xf51tP3fFSXtp4Tmm9vMzYvbvaYsPTPFrO\nOTFOPi00Pjk6Q1Vdb8i5vbuzuL66vdBmYHVNPUtVR0196+jPxMjIwLvBxr/KytlUPk1YMioz\nNy4tLjhHS1vOvbKwtbCsrrrAxc5bPz89OTo9P0541se/vLq1u7i2w73B2VE6O1wvISoxKigr\nNE1b7sm4q6iwr6ist8HQzlw5NTg0NjY5X8rPybeurrCvr7S6xNTUOyc2RyMeJikpKik1a8e+\nva6ioqyrqKq43uP7PDEvLjM6MznqvLu9sqmqrbCvsr3Y9EwtJzUrHSAmIygsLj7Vt7Kxp56i\nqKeorb54Uz0wLisrMzU2R8q6t7CqqKmsr6+yxVpZQCYkMiQbICUjKi8zUsCurK2inKGoqauz\nylpCMSwsKSkwODtTvrKvq6enqKuvtLrOVD89Kh8sKxweJiQrMTZSv66rrKSdoKmrq7LJUUEz\nLS0rKS89RFS/r66sqKeqrbK7x+dbRjkwKiQvNB8fLS8uMjRouLOzr6mgpK+xrbTFUj8+OTMv\nLjtLSmW+sbCvrq2vtr/MXlpPPj5EOCckRFklJDk6PEI4Wbqzt760o6e9wra6yVtFQ0A+OjdH\n2fRmvbC1u7m3v83xV1NOSz1A4NNdOC7dvS4oQEo+OC45b9tqUcqrrsS+sbK7zM7O6P9WQ2bU\nWFLQws/r18/MckNbYH55R2XCzc/Ey0U8v9sqMEMyMjArNU9eVlvDrLK/tayvvby63vvUXEBW\nWj5P7FhPWeDa5H/vwcvQz93LzdlgVtTaVFs9OnBJMzpBPElAO1PX4ufWybvEysTAyczZ6exd\nTm/nX23v09FpwtXaw97c0tNe0NJMX/FYaUpcWHlZTu1NT19eTlFqUVxYVF1YTF/xVU339Gvp\neN3B2+vCy8/H5NzE0mbe0Nh7+dHl8dJg2Mdoa3bKVEhP/UpEXklZYW1fX93TUvLSZEjHXDr2\nzT9HxUhKv14/3NBHUcBjTMXHWsq41dezxva7u07YzkjhS0BdR0r0PmXWSv7HXezSW9DPQN3Y\nP/pYPGFWU0k/2e1IVszz69F47b7U6+7Bv2VeufN+c9DuSczXPd/HQlXH/UHKyktPuE5Mutk6\n579HRsJFP71LNcrqP1/TUVDJ7EPM+EvObvBle8/u2dbT3PW/3GzP3FDUwzfK5UbZ4XBeX9DE\nO93LTN3uT1zcUedR1kVo7UzBQVLE5y+51zXA3VZXuEZdvcs6wbgvwMY9aM1oP8fPUT+uXDCu\nyzPMuTZztT9Fuu8/6LtHQr1ZO7tYPMVvRNXlTN/p4kvbyE9MvkZMxlxa391U0FnUYGnCUGzN\n6VXbfcxe7NBbbcdH581Cv1dPzWxM29tM+n5Mz2NR9ebtbt9kZefmSfXTS+zrXV/WUGPKTN70\n9tzhZctt0dVb2uRyfs9XVtDKRdzHRc12V+JY4mJAyfc1skJLuT9zx01i6dFbS8FRRr1dRrxG\nUb5fU87bTcVvX/ffclPLX9tb6dlM3c87xdM3v9I5vNw4uWxEvUTpy0fLSvrAPua/QFu2PGe+\nRe6+OtjIOcrcOb/rP87SR8hZUcFPZ9Ra0HB+ykG8bjetRz294kXIazuxOPe+N77JL8G8Ns90\n1FJh3FPtzUxHuV0/vO1W6cVA1b05ULlIRLpB+txJyEL6wjjExTTAvja86EnEWU/DTWzPSmTK\nSVOxNleuLca6OlmxO0ezREjD2jnN4V9Kys82uOo4xMc1yddU1kzPyTe2X1zTzDjDyTnDVlf6\n1zu6T0/MUu/JU2i+S1W7SFC5WEjW0jy/6lFHxMsxvc02yss9zbovwck+esY/zedS1Wbca21s\ndWhh5tJLW79fRLdF+8FC48BQQrs+48w/d7Y21cE7v+9jWMlaeFHIUk7EOr/rQbtIWq8x47Iv\nw11Fyd1AUMleS/TGPbtaTNy5P3C/PbtC3Pnc1Du2/k3UxDW/vjVOucknuLk1S6w9OatDNb34\nUGXx+ufQRGXB5z7M7ULNyD3iw+pa9+rGTv7OVub5zEhbv103vGJCxE9Jytc/5sj2WPDe3mno\nWOK+TE3cxmND0uJ9YfJdZsZDVczXTN/OScxtVGfDZkDV5mJr3lHhzuZM2r59SczTWdJPVdrY\nT0vg1FdKVFpdU0xIbvZHd9rf1PTQztHHyc/Dvc/QvcbExM3Jy8THPCAzXiQjLyg6wTg6uKu3\nvbi5u7v+OW/MRlfNYdS7vr+urL24rbm+tL9jLBoiMR0cIiNQrlVRq6Gmsb6/tr4uIDrhQ0pV\n6q2oxtCoprC4t7avrsxBNx0VKywaHyovrqbcy6ehrcFhTmJYLCI3zeXIvtivpLjCsrCyr77I\nta+5TCsdGi8qGB4tN7Ks8sOkoq/BbkpfVy4oONa/xtLMsaeyy7y3t6673b2vuedCJxkfOCIc\nJS5ZpKpiuZ+ir+IzNFlBKCg+w7C449WsqLnq6Mi2sdJhuauuzTwsIigsHRwnN+eyubyspKe0\n8DYzPzsvN1DMtLTEw7e803Hryb67wcS0qq3GbT4gHCYfHisvOK+mr6+oqa7KNC04Pz0+O061\nrb365cu+v9VkyrCyuLSsrLjGNxgbKR8hKCY6pqKur6qrrMg0KTBBPzo3SLutuer90L20wXLY\ntK6xr7C1ur0uFxwkICcqJTyloaqtrbGvvT4qLjY8Rzw8zq622tXUvq636tS1sa+ssby/yi4Z\nHR8dJy8mOaunqKeuua6yVDAvLTRNRj35vb29vc7JtbC8vru9tqyuvthTLh0eIx8mLCg4sKqs\nrK6xrK70NjQ0O0o/N0fDvcfAxcmxrbvDvL26rq/D1tg8IB0kIiYsJSnIq62srrSsqbtLPTU2\nT0o2N1vSyrq/1birsrq7xsW1rrjJ5kctHiMmICgoJj20sK+srq6orMlUPTQ8RzcvPlFdw7jK\nvqyttLa9yLuxtLzGW0MtHyQjISgoJz68t6+rraumrL5pQDc9QTMtND5WvrrMuK2urrC9wLay\ntrrRTkcxHyIjHiYqKDnBuq+oqqulqr/aSjY1OjEsNj9NwbrAt62urq62u7i1uL3UTz8sHyYl\nICcnKD6/vbOtrqukq8DnTDw/PiwqNkBRwcLPtqutrq63uLG0ub7XT1M4ICUnICUpJC7lybyu\nrauipLDGYUJCPS0oLTdA3cfWu6yrq6uwtLCyubzGXE08JiMnIiIlJClL2sm4rqqioau71V5S\nRTMqKjI+WOf1zrGqq6ywsa+wtb29yvhKKyMpJiMjHyI2Y97Bu6+loKavx3v+ZD0vKi07S1pc\n/7+urK6vsa+tsLi6ub3WPyYlLCUiHx0jP2H8zb6soJ+ptMDIx/g6LiwwOTw+QXS7sLKyr62q\nq7G2s7C2zzgkJy4lIB0bJUVZTP/Gq5+iq7G3t7naOi8vNTcyMz5zv7a3tKyqqauzsq6vtsw5\nJScvJSAdGiQ8QT5Q262ip6usra+yyz89Pjo0LS8/Y9DMzLytqautr62orbXDVjMmLiofHxwd\nKzowPE7LqqetrauqqrDkUu5RPzErN0lWVlTytKuur7CvqauzvMvVSSsvLiMmHh0nMiw1P1e1\nq7Cuqaqoqr3IxnNHNS01PD1FSWe7srW1tq+trrmztcTMMy88KykjHSIuLCoyN9Wxsbesqaal\nrrq2xvRJMDA8OztAQ9q/v7+4tbOts7Swtr7KPDVALSwmHyErKSgwM1+7uLasq6akq7W4wdNX\nOTU3OEE+Pn7IwL+8u7Ots7C1tLrARTc/MC0pICApKyovLkrFu7uwrqmlq7S4ucfwOzc9PEM+\nPUfLx8TAvLSusLK1uba/zz42NTItKiQjKy4uMDhMx725trCrqa24v8PN7D88O0tCSkBgyMe+\nyra3sLS9u8jG5uhMRDQxNjAxMC0vOjk8QkbbwLy+tLSvuMDRyN3mZ0NNSnBT8V/Ky7/Hvb69\nv8rP02BnSFtDVTk+P0pERjo5SUNLQ05NydHJzcfFv8XP29zm42pm6/Pc1dvexcjI1M3Y1tt5\nbH1VW1Jqb+ZLSFZnWk0/PkBOQUE9TWbc6dXLw7/Gz9TL08zs8PrY69dj79Ta3O1x8Nfl9F9g\n5vp973Xn6vdQ8133VEU9R0RDQUBHZNjZztLLxsXP1MzNztxo3ujUd3hU+vXceltYde3gaWbf\n6+jR2djJ0/nj3vp7Sz8+RD8+Oz5JW3Xf29LOysvO0czKy9zt5uPodmBVYe1kaGJ23dPk6NrL\nzMbVy8zVd21oWlJBPjs8PT87PUtt6t3Xz83Fx8vMzdLN193e6+9hW1peaGRpaOrX0NTX08/H\nztjb0tXnW2VaTkY/PkBAQEFCSmLu593Y0snL2NXU0NTjc+fqenNqXHbf3m3e1tnL1d7l3eLe\n4+Xd2+pjbO9uaE5GRkpDQkFBSFNYXmnq1M/U1s7NztHY5eLh725vefTr7+Xf2tLU3t3e3eR5\n9+bk391taeLsa1FHRElEP0BDSldVVHvk2M7U1s7KyszU29LV4fhpbvFvXF9ncOb9b/Hj5Nvc\n2M/NzdDi5t1wUUtCP0M/PD5ESlhaX+XPzMvNzsnFz9rq59zoamlscPdxbnb06eft4N3c2s7N\nx8nMzdt0+WZIQzw4Ozs2OUFLXPn70sLFxMHBwsXX8O7t62RUYW9rbnj23trY2NPT2M3O0cvL\n09DkS1VlRz47NTg8NjVEUWbf28m4u8TDwMLE4GP+flxSS1zrW2tyWNnN3cnAxL/DxL67xtXc\nUkJXPiwvLiwvLyw8TlXRubatrLSwrrrK2lNHRDs6PzxJW2HPw8W3uL66u7+6wc7F1tPnNTJM\nLiUpJygyKi7l3+S0raymrK2psdXOZkA6Li84MTdrcc25uK+ttrGuuLu9ys/vaEopMD8fHyok\nJDApP8t4vqSqqqCnqau60cc8NDEtKy4uQ1dava+wq6msqa+2tr3n6VpLKSY8JBspKR8sMDPZ\n5cWnp66foaqqrb/NRTk2KCsxKy9QS8+5s6mpraaptLK1w9tOUUIfKkccHDUfHjUtM8xitKOt\nppumqqSzyM9DOy4lMSokPE47xbGyq6mnpa6urLzQylA9PiUlSB0bQR8cPzQozNi7qq2lnaqo\noLjBvmg6Myw1KSlDPDPJtcOvqKmsrKu2yb3LSj9fOCA3PhgqOxspQCg71v+ttayeqKyfqru1\nx1g8NzMuKjU6Nk7JxrytrK+trLW7udZzZ0JQMiJcNBdPNBg7RyFPzFqzuqelsqWfva+r7l1r\nOjI2LzMzOkl4zsC1sLKur7W1vs7KaEvqNyR1NRhjLxhIOx9Q4ki3v6epsKGlvqaxVb5XOj06\nMjE0QTpSxea8sLiwr7mwvci9XU7RPyhETRk5RBgzRiE40D+/waqrs6Gluaet/bhzQUM6NTIz\nQzU/xlPJsL61r7ayvL651XLQYjAu0SYcxh8beicj5UlYvLimtKefsK6jx8O4RUI9OS8uPTYw\n23lMt7vCsLSyuLuzydnK6WU3Mu4jIvMcIFUkKN5Cab6yq7GkpbGqqc67wkBHRTkuNEIvOc1H\nWLHBwq+xtbmyuM3CyPpNMz1JHjE4GTQ3HzdoNtW+r6+toKuvpLHHrt9HW0EyLz02LU9jOcm5\n3rmuuLmztMO/v+nsbjQ3TCMrPR4pOiUuVz3jwbWvr6OqsKWvv63TVOhINjU8My9EQjjhxWy9\nsr62rrfBt8H9x2kzPWcmK0kfKjkpLERJT9Kvtrmirq+lsL2uzWj3TD0zRDYvR0Q548trv7a+\nurC4vrbFzMljQD5fJi8+Hi0xJi0+OVnetrqzpbCtprC6rcn62Vc9O0YzNEc+OuDaZL68v7e0\nu765xs7LfDtGbiU4Ox8vLyYvPTtS9rW/sKWzrKays63H0thrPzxDMjBIPDh9bFnBv8K7tLe+\ntcLOwdpCQe0qLUohKzYoLT08S268u7ynsbGnsLmvv9XY70M5SzkyRz85W+tWyL/Eura5vre+\ny8fLRzzWLipVIyg4KCs4PURTvbjIp661p6+3r7vE/91nN1A/MENDOE1wWt/CwsC2uL+4usrF\n0Gg9U04jSTMfOi4nM0E9U8u0z66nuqqpt7WxxNPm8T8+SzA0RDk4altZxcHEvLW4ure9w8vQ\nRj7eKyxOIis4KC09Pkhuur29prGyqK+4sL7N4GpbNkI7Ljw8NFJpV8rBu7m0sLm2t8HEzWM9\nSEsmNDceMTQmMkg+Vcq3v7GmtK6ntbuxwuh7Yz01QzQuQj03d+Fpwbi6t7C0u7W6zczOSzVr\nNSFHKh86LCc/S0TevbC9qaW4qqfAt7NTdm47ODc2LzFCPz/Q2s61ubawtLW5vL7T2eE6NeUo\nJWwfJUYmK1VFXcexrbukqbumq8u1vklTQzctMjcsNVM8UbbMvKyxtK6vvL2+0G3PQjA8QCQo\nSh0pSCYw2ljftq2ts6Gquaiw38XLOzg6MiovPCw8yU3brLu4qa62s7THzcL3SHBEKjtRHS9U\nGzVLJ0DM67+4p6u4oKzErbdW5U41NjAwLS9DPkm9xr2rs7Cutra/zsp6bXBNWD4uRT4eQTsd\nREgrasDUtrenq7mnr9a8w0FHPTIwLzU1OmXe1ba4s661sbfKw9VO3n1Y4GBtXy1I1h0y9R0x\n4CxEv8+yua2murKrz3zGTD47NDozNVZPU8C8t7ezr7++umZP30lL+PzZ2c/IRzVcPCEyMiQx\nQT9lxritr66qrr+5wExPSzw2NDo/QVTEzsmvs7+5wtreVldZSFvTzL/Au7jPSDA2Mh0oMCAu\nWEvBr66kqK2osNjeVDk3MTA3MkPfZcKxtrO0uL7pW1JDPkFR6dC8sa+xtLjPOyUnLxsbLSg0\n9cSspKeioK6/wlIxLi4uLzhR/Ma1s6+uuMDLbT8/PDhKVmfDtbOvq623y29QKxsdLh8aOVbg\ntKminqawrMgxLy4pKS5Dw7u6qqeyub/ZRS8xOjQ2Wcq8tbStq7W6ucFYOU9BKiIiMjklMby9\nwrGtrK/fT246KjFESGa7rKuwuLnIQTAvPTIwYsa/vriwsb/Ox8lkWcTG1tVs6k0tGyRiHyPf\nx7Sss6yjwDhOUi0uPlLEs7OrprlHTEMsKDA9VtO8sqyzysnGfUdJ987HubK5vcVWOSESKGQc\nKryvp6G4tKTZJjI8LDNP46uir7CozCorMCgtO1O2qK60rLlIPkhGTFbTtayts7C7Ry8lGRUt\nRSVPq6ahpc3KtjcfKjg4UcO0oZ6su708JCYlKkDdu6qjqLbFZD01NULcyryuqqyvv180KCEb\nGTPFNu6ppaeuTEXYPCMrUWXDtK6kobBhRi8iJSsy37i2qqOuy+9EOj8+Tryysa+trrTbNisp\nKiAYKK12Sbiwq6hVLVPWMCpBV7aps7enqlkyLCQoNzNUqqevq6zSZz8tOGlWxq6vrau3ys1F\nKSYrLyodLbO/0MnNrqbeLz/dRzs7SbOkr8e3teY0IyM0R0fSrqirsctYUTkxPnXEs66tqay+\naU00KSsrMyYe4rHbwMzIp6w8LEVVPTw59aelvsO1wk0uHyA33+u6qKqprFk9SjYzRvK7p6q1\nrrPrQjMrKy81MSkuzbzF1uW8rb87MTxIRkFHwKmosbzBzEMrIyU40Me1qayttk46PDY5VM63\nqKm3usZNQjYvNz1KaTogM7fMelVPsKbOLS9QXFk/Q7Ggq8Xd9VAzJB8uyrevq6mpr+k4MTM2\nSt7IsKequ89bPT08PlhMd8YvGS6ySVxfRqacYSYuT0vsPjWsnKvF4E5POyIdN724raitrLFf\nODYzN1fOv66qrb1lQzk5PEnz92fTPCAt01Vo/lezptAvMD9I4FRDt6Stxl9GQz0rJDq/r6qr\nrq+6djg0Oz9J5b60srW97EY9PEnsw8NWcTwdKMw+RNbur6K/LDFJOkVIO7iirc7FyFM9KyM5\nvLq4raytt1c5PkU8PWfAtre6vb3iNy9D0sm8djg6JjbKMDzKuayubjM/Wy0vP3KuqLfItbVF\nKycmOdnUvKWir75iPUg4Lz/Lurm6ubzGVjs4Sc/EvOhANCdWfCg6y7Srtkc/0EskKzvXr7LF\nsae0Oy0sLTxEV7KipbO7y0g5LCxI0cq7sK+71k4/Qz5F1Lh+NzhCzUMqO7yvuef3v8M1JC1P\n3eLbtaWoxD88Oi4qLmKurbGuq7RfMCw9TjxMvK+vvubX00M5Q1bXxjksur01N1Dfus04463Y\nLzpDR21HUq6pw9bEbT0wKTjGzdOvqq25d0ZNPS81Z8rAvr+3xE9PZFJNVUYv2rw4Q/buzsFK\n4LLTO0tSOkFCRr20x76vx0Q9MzM/PkS5sLmvtMTbRTc/RT1exb69v9Pf40ZASUtb2c7OzM/Y\nc0A7VlVASGbo32xS3NBlX+Pwb3BdYGhRbsjW1r67wMXP2t5bUfPTyMr5SktEMTY9OVLWybax\nvsbEZT47NztOXvC8tLvDz39NPzk7RE5uzcfIwsjZ8GRXTExOWG9q7c/M0NTRzt1fXVlRTU1n\n1MzKxcfK12ROS0tKTlh23tne/GpXS0lJUGt249jZ3+PdemRn/OTd3Nrb8PPs+Ovi3drX087V\n6O1qYWhr++9lUVBbTkRNYmZw2M7O1ufp+k5LXl1WbtnW19ve4HFja2heZfPx8+be33956OTr\n9Pnr/ldZamZUXuvj09LOydHY0eRn931bVkhGUEdDXGdZ3tLg2Ot27GZY+/Fs59jh2NLd4H1r\n73Bdbujf3uft4XhicmtoeXz98HBq+fprcHZ86+707Ov9bmprZl9nbWZcYGJtdF/87Gfd2mh3\n7e7k4uTd3efZ2N7hemVfWFViZF/y7PXr697xZ2pvbW3+eHFueXJqefF7ZWlvbHJrXnbu8t3e\n7NTS8unj/f12Zv3rbvvg4+HyeH1VVGBMUnZha+Xq3tz749xuf+Ztb/pqbfp3eP3offvb3d/i\n3+D5cPTq/mJlYExUZktSa1384NnP0NzU3Gdya1pnamNyfvja3vfe4uzwVvX3Re/2VOTZ38/O\n2M3g69lqXFZDYGc7XO1J7dJ60s/fyt9f33pPY2FObvXu1+fb0m1w5VVUeFtp4OvRzNfIzeHX\n52JpYFtaSER9TUDtUkzf3d7X7dTNbvPeWVNnX277eu3m3OXr49rW1dTa19bR5mfl7mV7cE5V\nTkxNPUxTSGLdfOPMzdDd4+B8WlZdYFxk5N3dy8fGw77A0dbVa1dTREvVRDjX6jhM6ENLWXzX\nZ92+2W3I02ZYWHJKT9lsVdbL39LHxczHvsPJxcbYV1RCMzs1LTs9P2vfzLq/wbzO4+pWSUNA\nWGdN2s/qzMfOyc/Kv8jJv73Fy9BcSjQzPygtRDdF18+/usO4v3ra8UVISkJaTlbNa+S+0s++\nxMG9vr28vbvKZdM+KDw4HzQ8MV5w07C/yK7KT9VYQEg6TO092r1SzLvdxL/Iub2/tri+ucvl\n3i8nQiwdOjU0+HPCr8u/relN00xBPzhsZz+9xVK9w9e/zsW3vbivssK5u15CKilCHx9ILznl\n2baw1bKwTFvWRkI8POJSSsXV4sXLx8DMua+6tquyv7jLRywgPCgZMDU4VnC4qMnDqMxJfFtL\nOS9ay0Viu8zMy8y2w8etr7mwr7O+aHYuHTQpGi0qOctIw6O4zqzA3WI9XEksPb1eTL7NucRZ\ns7LJtq+vrbaytVlOKx06IhgyKjXPVMGlu8ytzd7oPE5WLz24fG2/57bATbewwrixrqqzuLhs\nVSccNyMZKyg/z0TLqLXRtMXFzzlI4Tw+w93PyEu7ulbDtrm0trSoqrzU3ecpHSokIiUfRc/2\n+L6ts7fo07vsQjxJ6cRcTMDTxMpxtrK3u7StqavC7c9LIx8qISUoH0nOX8jLurCuxXfE3+xt\nO0rNz29aTdO7v72+uK+tr7i2u951QyknLigpKyU3SE7Y+NjDsrS9v83LyulvUFZrX3jrbs/B\nyMLIyLq/xb/L3M/tUkw/QT4yMzIwOj06Q19sycLKvr7Ew8rY3Xdg7Vtn2u/Wz9O/vb+4u728\nv8XSS0dLNy8sKSs0MDA/R+fFxLy8urnBxcbWfuteX/Rb6tnjz8fEu7a3uLy5ueVJWEQ1LSgo\nKi8wNDtM0cK8u7y4vMTH1X50YVp4dvbi3c3Evrq2s7S5vbrGY0hFOy4rKisrMDQ2RGLSvry/\nwcHGysricm786tvY6t3OycO+ure1uLy7vsxZPz86LisrLS0yNzlKatfFv8PBvsXKy9bt7fJ4\n4uR77trUyr28urm5uLu+yNZPQkY5Ly0sLS82NjpIXdzLxcPAvMHDxM7O1/j782Ng/u3jzMC+\nu7i3uLq+x9VZQ0Q5LywtLS40NDlKbNHIwb6/vL/Gxs/Z62RoeGtcYfXdy8C+vLq2trm8w9Ba\nSEk9Mi0tLS00NDZKXuLKwr/BvL/Ly9PubGZeY2tffN7Yy769vLm4ubu7vsvsTk9JNy8tLi4x\nODU8S2jPysfFxL7GzczZ9nh8cml5cfHYzsK/v726uLq5vMTN+ExKRTUtLS8uMzk2O01f483J\nysbEzczJ0uTg4vLi4efc0s/JwcG9u7u6u7y/yuhPTEU3Ly0uLi81MzhHXfbazczJv8bNytPZ\n1Nzb3t/d4tXPyb6+vr26ubq5v8zfVU5JOy8qLC4uMjA0RWrMysrAv77B0eDu+GFWZfTgzcjF\nvrm4ubm4trO3v8jeQTE2LyQnJSg7Nzl6wLq4tci/teFXTkNVTERCX9b5zMnAtrm1s7S1tLG0\ntL/c+0EtJSomIScmOVg+ebmvtba/xbtmQkM/SEhCR+Tmz7/Gs7O2sbOztrW4srTQ3GVLLyIq\nKiQkJTtXSE29rre/y77BTz1DUkdES2/Ta829v7m6trCxt7e1trS6wszcSzQlKTAfJCcuVT4+\nwq++v7+/vFVCZGJBRVhu+07lvsC/uLOvsbeysLm4t7bKaXY/KyMoKCIhJz5JPnS2sLq/wbjK\nTFVsWERDbt9WW82/v8S6sLK5uLK4u7W6ucVW3UwqJSwnISQlQEc0W7W1u76/sclJ9O5PRkRk\n40hWxb/EwbmtssC2sLm+vbu0yFbM+C4nKiskHyI0QzJCwLS5wrquu+7sy9k+PHBwRUBnvsfZ\nuq6xvLiur8XFtLS+2M/A8iwkMigfHyE0NSk/urq9vLKotfrFwWs/O0xaOjfewc/JuK2ut7Or\nscLAuLjH3snPSzgqLSwgICUoLC4y+cDHuK6trrfAu8tGQ0dBPDhIzszLvLCusLGurLW/vLjI\n3eL1XT00Ki0tICQlJy8tNOrCyLOurKy0ubbLT0xJQz45SuZu3Ly0r7Cxq622u7zG4WRQUUQ6\nPDQsMysmLCkuNy8/2Mu/tLKtrbe4u9VuW0xIQURZc3XMvbeztK+ut73E1V9JQ0lHPUdNSjo9\nRDE0LzE9NDlS6eXNxr24wMO+x9DQ2ebreNzO2M7Jx8fMyMvX1tjr5flieF9nZWV4Z1taXEtC\nPzs7ODY7PUFKTmjg3dfOzMrFyMO/w7+8vb7Dyc3Y7n1iXWVeZGhpeP7x+Pnw39zo9WhXTkM/\nPjg2OTw+R01b7+DZy8TExMK/vsLFxMbN1t3qbltaZF9mb3j083b+3uPt7djS19jX2PVbUUo/\nOjg5OzxBSVb439vUzc3JyMnKysvO0N7r7/54cm5y9Oz19efp5N/e29vb1dHS0M/P19/2VkpF\nQD07OTs+PkJJW2507djRz83Kx8fKy8nO3+Pp9H9x9e3o2tbW0Nvf2uTw4+b2+evv8vzw8G3m\n+FVaTEpIPTxAQEFJTWV3Y+LR29XX2s3d5tBk0bzxwcfex17Z+Fv8/OT/8mrG3FLL2WrXT8/h\nftNKzF1HWEJKQD5BQ0pCSWpeXn9v0t32xN3JwtvExs/T3+L0alnwaXv0e9nK8+TJbd7katJ1\nePfxZl/iW+hVWc1Lb1laaURLSVtDSGBQ/FdozHDUas7oZMJGwF5pyEzHUs/QZclryM1VtkvD\n2k/AQchHcsw8xlvk2PDhT85LcElOVkZfRE5PWUXhWEzYS93PTchhzN90zNzT5d7N6M9ly/XT\nbua+R8ZPzso/u0LIVlvjTcs6wVd8zkjCXP1VWvRDWUFRXj7wT29tWPdidV3fUs9cectnx9PX\nzObE3NPZ79rq12by3UzKW03O+GPS41y/TL5X9N9T1j3ePlZNPOQ8XExUZErURsvpT8VdxuHa\nxVm9b9rOYL9Ax3vjUEjS0PxsyMvFR8bbekbX9F/ZOrhHb2ljvzXKQnBxO+JfUkV9cFFkT+jZ\nVk3H3WnKXcXSWM/e1WTP5tzp4GrJTtBe295Iw03IY9/WYMVAx1LQR1PfSPI+bU9YSVDuT2pc\n2mft4frBXnvCTsh1S79L01fc0k3Q6HjP6Vm+V1O+UM5VVsZJ3GtlxkPT+PXWSMxc6Utm4j9t\nT11dQtdS7lFVxEjfbNvVXMvE/8bxxcNcv/LQYFTaTURJTk1IS3LmZH7PzWzvzNr5Zf3PX2Po\n0GFT33T3RX79YlNk0Wlp7czgatrP3lns1dxdX8t3Y1Zr50pMbOtJVd5ucljm0uhv38pwa97j\n5Fh4yu/pz8jO18vO0VVW8Ug5Pkc/O0JQbFNwvsvXxL/H09vQz1NV2F9LVPV4XlToz2Js0+z1\nedvU7ufXzd3SyttO4e48SkVBPj1NaVhXyMToycTL1/3i1FZH7ltTYeriW+jW4e7fytLb0cnc\n8NfH5Uxu00M6TE08Okz7Wk3OvdPYvb/Yb+DZT0BdYkJEVnNjUdrH39LBx8jJzMbX6cx4TO1e\nPkZDSEpDUOFXZcjZ4s/U2utd6uRNWexSSv7tU+nZ1MjeycHVzsXR3dLtd1ZKTkc5QUk+TFxe\n7drUxczTxdFy6vBga1dOYFpHdelX1tTXx8rHwsrIvs722l1FSD44PTo9TEZZ1tvKwMrOzt3i\nd1lnXUNS7kb3137Ix8e8vsW8vsrH1P5JOkA8LjY+O0JX38zPyLrF4c3UYVZTV1E+UdNFWM7Z\nysvGvL7DtbfOx8LnQzdFQCkxQzk7WdDF1M+0wFnMxlRIS19UOEvWP0nIzs3BvLG3v7G1yM7L\n4TkuSDklMj87PFXBuuTPr79W1cplQj59VzBH2UZI8r2+zbuts7uwsLvjz9MvK0UsJjE1RzxF\nuLR3wK7B2/nY0jw33EcwTltSd2C5ts22q7K2t7W5YnzcMCpCKygxMVVEP7y18Mi6xs5NdcVC\nON9PPExG3NNPure/tbGvr7u2tNbr4DoqNC8mLitGUTnltcXPxb28XkzJ5jpEZFFERFnP3924\nuLu2sa+0uLa9z/VnMig7KyYtK11NN8ywys3JvbdfRsPhPUlCXXc4UMPYxMS6rrW2sbG0usfO\nz1ItJzorIycp6Eg137O7xtS/sthM33RqTjVY10dR/8Kzysyzr664vbCyvtTg7EUoJy8oKiIv\ncEdG2cKzuurAu8nXSEj7SElPTeXf07+9ube5r7G1tLi6xPdkTi8nLiosJidSU01y5b21xsPH\ny7/TTVFITW1HTVbovr7Ev7mvs7/Cv7u/3FhnYz8wLjEzLjA6Pk9ZbM/PyMHGwszWztl5Vk5a\nc09ZaN/N19HHvry8vbu6vsHM2d1XQzw7NzQzMzg7PUpLUN/KxsnPx8bW32lYWVNVXGbs1dTL\nv7q3ure4u7y6vtTnXEdEOC8vLzAzNjw+Rm7VzszOzMjKz+9eY1xTUVp+69vIwb23tLa6uba4\nvsnO3049PDcvLS0uMzY+REty3c7Gx8jG0NzpZmJaUlht69TLxL65tLe7uru5usDJz+BNOzk0\nLi4tLjM6Qk1OX93Ox8nNzdrm6ndwaG1sedfNyMnGvbu8u7q7vb6+xMzdTD9AOjAuLC4zOT1D\nSl3d0M3MysjT3uxufn1tcuzY0s3LxsC9u7u8u7y+vsXP21pBPz41Li0uMjY8QUhY8NjPy8zI\nxtDn5ujpa1tebeXb0crCvbu5urq4ubq+x8vjTD8+ODEsLC8vNjxDTl3g0dTPycnN2+Lq/W9d\nXHnk1dHNxb64uLm4ubi6vMLGzHRCPD42LywsLzA3PkVSXd/P2dPOzM3h8e5yfmlq597VzsnA\nvrm4urW3tra8wcXKcz84OzQuKystLjI9RE9l2svPzMjHy9HZ6e7yZHTj5NHIysW/vLG7vLC7\nt7fFwtBMPTMyMiwtLCwvMTxFWd/MxcjGw8bPztvmY1VTVevPy8LAv7i4tbe7ubq7vMLK01s8\nLi8vKy0rLjYyP05Wz9HCvc3Iy9fM7PJ8Tl9YZNDWw72+t7m1try4u7u6w8XSbEYvLS8rLS0s\nNzI4SkbZ0MO4xMPG1MvuceFLT1JT2NXHvcW7uLaxura4vbi+w8rrWzcsKywqLSsuOjFFTE7L\n07q7wr/S1NFk8WJOYE740c6+vry4urW2uba9vLvBvs/lVjgtKSsoKisvOTVFS1TW0bq6v7/M\nz9Vl/15VW1boz8y+vr22ubO2ube+vL7GwM/kWjksJionKyssOjRIUFTN0ri4u7zGztdmcVRO\nW1Xk2cu+vru4uLW1t7i+vsHDw9N8UzwsJignKCwtOzxHeGPNzbq2ubu/yeVvVmBKTVJj08zG\nvbu5tbazuLq7xMPMzNN3WEAvKCgoJysuOUNI7OrOycC7vL3BxNrvWVNKTU9s2NPCv7m5uLe4\nuby9ycvOzNffbk48LCkpKCsuNENIbNjVyse/vr3ExdfuXlVXTVdj5NPJw768vLi5t729wMnO\n2dTf+V9KNisqKiktMDxNV9bPy8rFwsLDyszt/FZUVlldY9PPwsC9vb67vr3Ev8jLztDO4Ohe\nQy4pKykqLTNAT9/JxsbBwcO/ycjS7mFNUk1YWu7Rzb+/vL68vb+9x8XQ0dHZ1e7hUzgrKioo\nLTA/WOfGxMXNw8nIy9fUbHNbWFFWYmrc1se+vru+vL/AwMTG0MrKzNXvYDstKSkoLDI/Wn/J\nx8vXz8vKxdLH3PRiUEtGTU9w3cW7uLa5ub2+wsfOzMnGydJ3RC4jIiYsPf3CvtT5SkBBYc6/\nu8TH62364ONkTklUdcm5tLS6w8zRzsXCu7u8x/5JNyghJCw2VcvHyVFPQk12zsXOye3LyMO/\n3VQ5MjhPwLCtsb3Tbd7It7K3u8rZcHRRMyMfIi49yLu93UNKP/DUw8525O6+vLvFTTovNE/K\nsrG0v9zc4726sbe+xNTL2Og4JR4fLz/GucTfPE5O6OhgWkjoxbOywNhANzY4/c69t7y7y83P\nx7q1sb28yMjNajgkHh8vRtC7z+g9UVZx70hJS864s7TKXUQ+Qz9W3sy6ubS8yMnUvbiztry+\nxtRZLSAdITtPxM/nVT/fX9xFOUBIv6+vtt5aSE9WRU5Rz7qzrrzI6O6/ta2yucfR6j8oHx8p\nR3O+3HVHSW9VbTw6QGS2rq+5521LRD06XPq9tbCz0M5jzLuxrLa7yNJWKR8fJktkw9xYTELV\nanU8NTxIv6+vuNpsb1FEOz50v7CxtMr23c24tLG4xsDJyTYfHR9A1b6+SkU64MzXTDIzPtqy\nr7XPWGpWRDxDWb60r7XD19nCvLO3u8a/uL48HhwfRb6/wDo4NdzCz0MuMD7LrrC+6lLa3lI4\nNkfErayz31jRuq+xusPdx7OzZR8ZHTWyu7k6MDT4tsBOLCo3y62rvV1G7sjyNSw606qprs5M\n1bqsr7rMY8iysOgfGB0zrbXDNis5y667QCgoOr2ursxEVs273jErN8enp7FcPtOyqa/PcWO+\nrK3OHxUdM6uu3TcpP8GsuzgmKT22rrTbQP68tt8sJDPDpKe8TjzGramze13atait1iAVHjqr\nrUYzKFO3rcMyJS5StLTObUzFsLdOJSA5t6Op30E+tKWnuEpWyK6mrWkeFh9Mq7I3LSzZsK9k\nLCc4zbTFTlXtsqu8OyEiQa6msk09Y66lrcZL3ratqrRYIhghS7S1NDQ2yra7RysrPtLB60Rm\nw62qwjciJUyvq7lJStKup7PPb8Ourq+47yoaIELHuDEyPMu2w0csL0rKx2A/+7utrM42JipI\ntLG9Yl3CtKy609nBr7O0usk6Gx012bE8LzvPtMRLKC5YxsBLNvezqaznMCosULi8yvzNvLe0\nv8LEta+6u7u9SR8YMN25UyU9yqzCPCcs1LrRPy/Zqqm2Vjg2PkHz0c69wcPGubO5xc23tba5\nxUshGS3LwUcmRrKq2zEoNru9QjAyvKau4URUVEwsPcq0sd5g0q2uwV3fqqmzzGd0JhwtX+A/\nLk+wsD40Lkm7ZjU2XLOsxUzbwnMxJ0q1rslJ+bKotOZVs6awxerH0CQZLN3iPytUqrE2LTLv\nuUYtPcKttVZUubk+JivPrbpOVLerr8d2uaivxsq9vTgYHNXWPio0qqNHJjfwtk8jNLqtwj5K\ntattKinlr75OTb2quNDItaiv3dOxtWkhFjW7NSovvKPAJTa+zEwoL7awdj7otaxnLjxry35V\nzLS7zcG3sq+xvr+6u+gvGiPZNCwzy6u5Lj+7/j4xOsq/VFW/xL/7OlxXPlzNxbnKza64wbKo\nsc3Gv8Q8Gx96NCcwy6u8MVazbjY1SNt7P9e17OzU/F9COuS/etzCuLPDzKyjttm7s8w0GyPM\nJx8+uq3dNLqrPS5d4EY6QLi4N1u30jQ8WL7PPMStudfAtqisvrmsvkk3ICw+Hida2cHoUbG+\nNELGSjdK771XOb63RDdM1bpKYLa0z7+1r621sq6x70U6IyosIS1FZs/MzbnUPm7JPjh5/+JO\nTsLLP1lpW8vbyr3HxbG2t62vs6653VwqH0EjHTVOceXyt6xIOrvHMj/c0mo2S7jaM9TNXu7R\nvLX9zquyv7OusbDJ4fApITklHy9Ae95au65bSr3PPE1j3H0/SNNeTelR0crTv7vOu7S1sLC0\ns7W+YTknLTEdKDhNT03drbxC2bdmP2Dj3k07YsY9SNXrzd3btrz+u7CztLS1rrrLeEYnLS4h\nJy8/X09mtLdt3r3J6lJK5vs9Q2o/bVFMv8TRub/Ctrq7r7O6tbzE3UUqMDQoKCs5U0xJ0r7H\n0MzNxsj6Wm1VWU5CSFBq19rWvbu9ycrGx9D30MPIv72/0lxzSz04NTY8OTpHQUNfcfvS39fC\nxdTdZ09YTkhNWXPl28u/u7e3trS0tre7xd9TQz83Ly8xLzU+PENJTu7Zd+PMxsTK5/L5WVBb\nX19n8NHLycC8vLi1tbK0ubvD+0ZBOzItLC0wNDg9QEdVZOLMysbDyMvKz35bXWRfaXni1MrF\nw767tre2tri6v8rgTkA8NC8uLCwvMzk9QU/92ce/xL+9ws7XfmVmWlZca+bd18jFwby4uLi2\nurm5vclrRD47MSwsKywvNTtAS3LRzca/wMC/ytToWlVcVVVr5dfNycK/wL25ubm6vbu8wMrs\nSEA7MS0sKywvMjg8Rljay8K9vLy9xc3U/1lXUFVjZ+vXzca/vbq3trW1uLq+w8nrRTo2Lyws\nKystMDY+RlXfysG8vL28wMrP5WVhYVthafDY0Mi/vr26trW2u72/x8zfTj03My8sLCwtLzQ5\nQU5m08W+urq6vMTN2XxeXFhebHHf1dLIwb68uba3uby+w8nO4v5MMygmKS4uLjZFUVNPX9LA\nvLm3ur3NXlFQTE9WZt3NxMDDxcG9vL2+vr7EyczV4e5eRTcxLywsLS82P0la897Sx7+8ury+\nxdHrW0tGSExd79rJv767ury9vsXIy9DU1NTX3n5PPjYxLSstLzM7RlB01cnAvbu7vsLI0eNx\nUkhMTlJ2387Evru6ubzBydDW2N/n4djZ7VtGOzYyLi4vMjhATm3Vy8O+vby/x87a9mVbUk1S\nYHbdzci/u7q7vsXN1dvpbm7q39/f6GBJPjk2MjAyNjtHXeTPyMTAv8HKz9PeemBaUVVbYn7j\nz8a/vb2+wsnP1Nvr/+jc2NLS3FlBOjUvLS4xN0FW6dPMxL+/wcfO19/walxOT1RTcObXx7+9\nu7zAxcvb8G5o+9/QzMrM5Ew6My4rKy00PVLjy8TBw8PIy8jJys7W4GVNR0NCTXHQv7m2t7rC\n0PlbYf7azMG+v8beTjkuLCssLzc+S2fm1c/Nxr68vLu/zvhQRD48QlN7z8C8vLy+wsnW3N/g\n2tbMyMXBv8PUUjkvKykqLTQ8TX7e18/Iv7q5ur/WXk5GRUdIVHfdzcK9u7i5vsfaeHnx2Me/\nvr/ByNlONi0pKCksMzxKZ9vPy7+8ubm+yu5VS0pMTk9SX+LNv7e3uLvE0N/5d+fd1svHwLu6\nvdo7KyYlKC0zPEFGW82/ubW6wsza6O1zX1RKSFJp3cjDvr2/vb3F2W1PUuvPxr69uri8x18y\nJiQmKzI3O0VczLi0ub/M2NHcdVxJQ01sevLj4cu+vbm8y9Dcfuh8VV7TyLyztrW5yd09KCEk\nJiowMj/syLiyu8zHyc/OXUJGTGjNzl5wzcu6vMzJ09TJ0VpPU1LOvsa+uLews85TNyUfJicp\nMDVYvrm7usDPwctTU09P4NZ83cjKxsfTzdne3dfP3/FTTVxf48zAvbivr7PBZEQtICEqKS02\nQMyztb7A1N/J7EdOV2TV1+THvsrV1NPY1+1WbPn861RMYt3bybq4sq2xt8FqRjQkHicsLDg+\nZru4wsXH3M3SSE3r8djU/tG8xenZ+NjQW15m4dzqb1js0+bQxbq1sra9v9FmRi0iJC4uLzo+\nz7rDzcXHycfuRWrZ8+BtZc/G0ePW0c7ad29q7u5uV1Tv19bPyL24tre8wdlxTTgtKjAyMDc2\nR+rd2MnIyMHH0s3L19jraGRzaWvc4OjPzdHM3HjvXE5cTlXt6+PHxs7Bw8vBws7R3V5dYEQ5\nNjIzNDY6P0Zdz8fIwL69vsTQ2tra19t6aurtY1JOTVFVW/LQzMa/wcbGwsXDyMzO3G9YST44\nMjIzNDY5QEhsysHBwsHBwcnV3+345+HqaWFuZF5NRlldaM/Xx8O/wcS9v7y+w8HBzGs3Ljcy\nKiosOU5qT9O6tbO70su91VNGSlTxTETrwM96d23b01ZDYfXg/Wlsxr/Nv7W0tLO6ucX5STAk\nKy8kKDNM6s37v6y33M/M2dlKPl/PUVjcz8W82F/cyVM+TkzyVkb+xt/0yby0ssW1q7zPzeo9\nKSAzLyMoQdVhfe6wrsxevLzOVVN+z1ZD68jf4dFv0dBHU9lXQ152089z6rq9ybq3tLHAycXc\nPSsjLzEfJz7gSWTOrqzP6bC2XFBj7l9EP8zIVum4x1FOyupGP03R+Etuv8vmyreyur2vtc3+\n10YpHzQvISo/yW/ezqqv1dCwxlFFT1xLOEnC0ljEtsni4/HrTjxJaEtb7czDx8O0sb+zsb/T\n1mY9KyE5LSAsUvRH1b+steHHrs5AUOVcQz12vulRvLPt9eFtdkU8VW1AX9bKysO6r7i9rrbL\nzttHNSUuMyAnOlU7WMq2sMrDrLdk8cznRz9Iz2VB77bMXM3C0VRGX+o/ROTd7Nm+tbi+srC8\n29d5PigvOiQnLz1CQ1e/scfBra/Gyc/Nc0E7X1g+ScvW5cTLzM1v/t9ITvpTZdrPxLnHurjA\nzL7nUTw3Ry8sLTk6Nz1UzM3NvrK2usHBxtlTSk5STFFp6ujazubb4l5PZ1xWferp0MjRzsbN\nzMLOzsP6VOtYPTw5OTo6OD9SVHbWz8jAyMnHzdrW4XPq6H1v9mpfWU5LU2Bi9+HYz8vKzMnM\ny83X1s3P29ng/mtXUUo+PDs7PD4/SVhmeOHQz9HYzdTXz8zT09fX2N7o8PJoZmN3bG95697h\n3Nra5ufj7fp1b/p6cuPr+Xp29HpqXltVTUxMS0pKT09PYPDi39XY1tDS1tne4t3g/nX/bvzs\n5NXS2drW2ONuWt5hT2dc5WLw3Nna6tzw/XlkamlfYmZSTVRPTU5OUVlbW2RrYu3l6uTY183R\n1c7Ky9XR1dtbS9vwXNTJx2xCTsdYO1/FxUFbv9dLP8vJWFzRwVpF29dSP03Ta0RW2nFGS9lv\nS1za4lj+2Ohv3MjS7tPM3fzc1e9u6eXvdeTe7+3Y3eTh4/V35fBf/vNrZ/xaV1tXVk1VU1Bb\nUE9mY2ntZu3l5uDi2+rT3dnq8N7+dtzc1tHb293o7WVYb2Ng6/va09/f29Xs7vP8aVlXVFRQ\nTk5UVFpbeWzp5vfu6Ox5fftq+vJ4cnD/+enj5drg6uPd4PDo5evm+O7o9+/2+Hx+fu/udWZn\nbWRma2FibWhkaV1Ye3Rge/X4cuXg6eHv7+73fvj3a/7u//v4dXb6bHfr+vPq5uLq4dzq8PLr\n+3F79vN29/toZmx+fWxpd/T3b2lkYGdqaF5fY318dv308fry+/j8+uzv7+/s6ffm39/b4N/p\n/XR6fXx6e3hsbm5ydnRnaf38fG1ueW1udnX4/fvt7PL0fHFpaGd1cGxv/Ofr6ubl5urq6er0\nen57b3RraHf/Z2vz/ejf5+3s6e16d3xuaG/2eW5t/21sfGxma3b59erf63xv/fb9e3r6d/h8\ncPV9ZmNnbnN0dHl8fPP29fno5+3n6urm6/D0dn18bm9xcnLq7fHy9W5sdWpvbnD8/39//vp6\n9OXz7vH6fv/49H1mX15fZ2Z85uTi29jg5+38b2Rue3tqb/5+fPrx/vH3cXnxdWlve/T67/p2\n/vzr/Hr06+7r6/DzfHRsbXl5cHFsdW9ndvnu7Pt8+PD8cmpoZ2lydG978/nq629Xx9Nlw2vP\n3VrjW2h5PdBQRrI9/M5JylRY30PR0GTHXMvdWtt91e8+1kPuVFbRRt1gU71M03bZwU+/e9zS\nVuDlR/b5fGtmZEY+vlD4xli6S228UedibFo/Z0llWlvK5NzeY3toxVHfyGLJZOxhS/BhVfFU\n0PfX197Pz+3g5t35cHRWXEpBXk1Fz03b81/Pa87ic8719HTqaWl68c9efdXVXPPY4H9S2NJk\nUGv1eVbr+lHdZ2tt/lN0737cc9Vl6dtX0FlR0V9k7WzZVfPOW9lcXM1H03lPylDY3F/+4vZj\nbNxrYNdfbMhcV9Jma1Lv3ErWeP7JVfnsXelX7/9o9ufszmfvbFrzXPjp5l3MykngyELXbTm/\nS03CWv/p/NxGY99Ez+vc4O3s02Fbx01b2u3+af5YYnFsbM/j42zI6lfEYe/rTGpmb+5l8v5P\n3WNZxT/VZVjETF/iXdraTd5mXmXeYdBs2ODo2FDPTGTnWdLv487rz9hZ1GD59FdkVeJfWN9X\nUdFQ4tld01DQclTcS/PmWGx57F3V6+TU39Nf1Gdc109eX3fZU93W7+F022Zv21PpTepqTs1V\n3G1oz17W1ljc83JrdmFwbuz04d5k0fle63VWW2docWnfdnjte/Bt1nXtdWH7ZvTl6W7X/+7i\n3N9t6m5n4WTjWe1k9nFc11jtfOl38+Rub+d7Zu75V3ZjZnxz4mrf+uTa7uHoZ95dbHJabWjw\ncebcXd/0VdBg6nr47Wnf4F557Gbpe29072Hw635y3mLt8vxvfuJs42HbcOP2auFa8H5fbF5p\n5F53dmbfbnTm6Ols9+hk7Nhp7X172H7WdenVX+3mb25w63BaZX5U/nZNbGdbVW5xWfjpa3b1\n8PPo5uDT0ebYy9bZzNl+1eD85XtiYV5iTEhLQUJISEhPWVZk/Pvc1dXNyMfFxcHCy7++yL3A\nxL/bQGpCKj8wLjg1QD1IZUlP2ljhys69uru2u726vLy7uLWzuTpoxh4zQSU4OTw8SU5EUlRN\n/dffycK/vLu7x7y4wbeus628LbU9GM0rJVMzVj9FzT0+zj78zvvJvsC8v8rFvr27sLCsqlky\nriMdzyMvQj7lSNrzQkZUQmv3zcjIwb3LzcLDybetr6yvPES6HShiJT5EWtFPx9U+SGQ4R9hx\n7Mu8yny5ytq5tLSuqbFNNbwoHdUuLVj3z1vIvEY2zz0tz988ybVs2L3XzsK1trOpr8g/Pcke\nKcEpNcTe4N+90zZMeCw+zjtqtdy/wtjAycmzta+quMc2Qc0aON4lY8trxXXJejtARjo+Pn3J\nbb66esq+zcazrK+urb89PsYdLMspROVuxz/V1jY8SEE8O9nRbry+4tTFx8q0rbCtq7bvLcUz\nHMk6Lthk1k1Vwz88UTs7PE1vXsTD0+PLxMa7tKyvqq2+TjC+JyPCLzrkSc1ZTcZLO04/OUJL\nWerTx9Rlyr/HvLGvrKyxtEsuvy0h2zM7VUrXSnvOTk5HPj8/OFnXXMHB48rFxre4samvsa7O\nM0bXIi1OMz898cVG4MxHPjs/OzBI2GTRub/fxbzAt7Ouq7Cvs1sv0kMdPEQ3Oku/z0DZ2TYv\nSUgvPtrm7Ma1zeu1wcu0r7Wwrqy5WjjsPh08PjVFPcfKN/7ROjJJdDwyys5Qwb/H/Mm3x76v\ntLGtq7LkNmxCHjRBOj4908Q1WsE4MlpNQTdPuk5tts3Tysa2y7eruK+osb1MLdIrHkg7Pj4/\ntmEzwWI0Pz1eUTDduFNvucjJz8Kzxrewr6qutb4yLd0iJ0Q6Zz1StUlC60VFNkfYPT3Zw/bb\nvsPB2Mu5wMG4q6uvtbovL+YiKTg41jhEtVdDVkljOT3PWjtfub/i0L66W1S+v767raSsuL44\nMUckKzI71jxKumRFSUlmOT/aTkdbw7Pr7cDE8kHVt768rKSjsrtlJjcsIjAv6OM5zcBZSkBc\nXTlH01BE5Li+Z1nHxE5YvayusaOfr9c5LEMlHzc7/GE9vr9HREteTDZHzk5G7bvATkzLyF9r\nu6yttKaeq79DKTUtHi40/MQ73Ln9RT1LdT03en1NVc20zkpfxdJT27Gsr66horTjNCk6Jx8z\nPcdyN8i+Rz48Vm8zO9Bl+GnAsnVI78vTWNeuq66ro6Oy6i8kOyYiMTe68zfIxlhHMlXmMzx2\ne9JjyLTRQl7Ixtzcr6aqraWksE0kJjokIi1Rs1Q8yMboOjH9Vjg+Wc3L17y93klj0s7Zx6+o\nqqulprBOJSEvKSEqRbTJOm/G00QvRXdFQFHcv9HHw91eTXjP18Czqaapp6aufiodKi0jLTW5\ntzxJ2c16MDdmXkpIb7rBy8ne4k1O2sm/t66nqaiprcE0HyAuKyov96/aOkjS0zktP/NxT1LJ\nurnG5/JYb+3kurOuqaupqK6+OyAeLSwqMEaxyzpC781FLTzo4FtTz7i7xW1fV1nVybuysqqq\nramttGsmHCcwKy00wLVKOEnW3zQ0VtbaVmLDurrVXWBe2M3JubGtrK+rqK3INSAgLi0sLkW8\n0zo8W9RMNULoz+Niz7jEzdxbb17cv725tLCsrKqrsc8yHx8vLy4uQbzgOD9l3GU6SuTUzuXc\nw76/3FBN2sjKxbyxra+uq6u0VykeJDItLS9euFs5TXzMVTlR3M/UadG9vr9lSl7mycbIu7Wt\nrKyoq7dYKB4kLy4sL2G9Xz5O/MhuQFlrzs1z3M/Av1pMWtvDy8q7t66sq6etumooHiMtMCwv\nX7jcR0npwe9DR03Wym3wxMPK20v67tvIy8W6t6yoqqy40DMfHisxLi48vsBuV1/OyEk+RlzK\n31PLv8/GVFvX68rFzLu3raaprLbIPCEcJjAwLznGut9a8NHMTz1FVdnZWd7BvMFUTvPSz/ro\nvbWuq6qorcJMJx0iLC4uNHC3x/9k58rqQEBHcM1x78fHuchNXP7V0W7MuLOsq6mmteEzHx4l\nKy0zO7+4z+PmzMdJO0JM1XBOzcC9uWpv8u3P4fC/tq+pq6irv1QoHR8nLC0zUra7zN/Sxd0/\nPUZx2Vd4wLu0zExXY9t6Vdi4sq2rqaOvyzshHiEoKi03y7O+yc/Fx086PURwcFPNvsW101Fr\nVtrVa8i5s6mrp6a69TAeHSEpLC87v7G7xNDEx0w9P0np/WjSv7W7eFBS+2pMZsW0r6ypo6i7\nSykeHyIoKi9Mt7W8w8O/0Uo+PkxlVW7PwLPA7FhS6HlY7sK0raqppavEQSUdICMoKi//s7S3\nwb+950E6PEtQUWHfurTA2mN41mVZ2b2vq6ynpa3MNCAfICQnJzPPtLG5vbi85UU5OkxPT098\nt7XB3FbWyHpl6butrKyoqrTmLiEgIignJzfOtrS8v7m92Es4PEtTTkNyurjA33rHw9lo47yt\nra2sr7XpMiYkJysmJy9bwbrBwb28v+ZKSlBfTkdX1sXJ4dbJw8fR18m9vL2+vsHWVUI9P0E6\nNjlJW1dKS0xWX1ldet/Z0tTUyszWe2N1Z1dab9bDvLezsbW8xdRoTkg6MTM5Ozo5Oj5KT1t8\n59HMy8jKysbU+e91bFxacdfBu7m1tLW4v9ZkVk0+NDM4ODYzNDg+SFNm78vEw8DFxMTS6fxo\nYVtX+M/Dube0sbS4vs58WU89MjI1NTIxMjc+S1x92snBv8PKyMrb6/J0bF1l28q+urq0sbW4\nvs7vX049MjAzLy4uLzY+TGfozsC+vb/Hxcrk+XtsdF9p2cq/u7q1s7S3vcvuYEw8MC4wLy4v\nMThBU37ez8nEvsXLyc3Z2eHf4vLdz8nCvb25t7q7v8nfYU08MzAvLi8vMzlBVffq18vHwcTI\nydDZ1Njb4uHVzs3Gwb+7ubi7v8bWclU+MS8uLS4vMzlAWfHg0cvFwMbKytbVzdLb39zTz8vE\nv7+7ubq6wM37XVI/MS0tLi8vMjlFX9zW0MnGxcXIzepRy8/3zsO4vLy6sK+1t7u43DguLSwr\nJCYuN0NNVc+4tLvYZvpmUU1hzr7Jzsy/uby9urSytbu+vsPJbysgLCkuJCFGz/pOR8quxko9\nb7vFS1S7rbHha7+2wvjMsq+7ysK2ud1dbjofIywuLCAzw9RORF60wk9d6Lm10+fFuLTNacq9\nusLGtLTAxM/EzlJLTEAuKSwuNCsuPltsTkrYw9Hc6M3Ax8nCvru9v7y+w8S9ub/W3Njae0pK\nVU5RPTY3ODY2OD5NSkpXbvV/5NnX4t7HwMO/vbu7v8nFyc7c8OLZ325na3l3WlZfWUZCRURK\nQD5ITEVHRlXf4Ojdyr/F1NnQxs3f3OXT1dvOzNDV2930d/599mZYWVhcXE9MUVZUTVBfeHZd\nXO7naF9g595nfOHY1NvZ1dnibmv07eXr393W2t3Z73pwZ39xWVtv5OteXf3tXlldaXVWU23r\n62xs835lXWL57vb04djT0d7d3en7ZnP6dnx26Njnfft8dX7+fu1xbfjucmRrZF9fXFlfaHv+\n7eze1+n76utuYWr6amvl3Nnc5+Th3+b98/ZpaGReZmRneG1r/Pptd29fZ/Lw+/7t3upqZ3nu\n/Wlze93W697a393neHz2+3Ft6+d6bGpuZ11gaWJdY3Hz9XZqb/z+X1leXVxf9t7W09bU0NPX\n3+Pq6ej1+Hh8f/9tc3ZtYmptaGloYllUU1laWlxnfHz+8+Pf2tvX09/c3Ojj4Obr8vv9dW5x\nd29ubnT1/fxpYF5dX1xZYWtvbGl77urz69/i3trc3unl4fZt++r2dHTx8f78+v19/Pl7Z15f\nXF9eZGhse/jyfG9+6+bq7OPh+XTr9Pbq6/j3eOvf7e3u8vH9+n9sd2xdXV5iZF5ga/z7ePfx\n6Px14+v6ffnp7nVkb+v0+H385dzg8PH27vZwYl9ucG9tbv36+PTk6PJ6efbtfmh4dHtoa/tx\ndXJ38fPu7+zk4ujt7+3u8f16Z2VhYm1qfe95du3k9O3o8u3/b3txbP9rcnJ66eXqem7+6O30\n9PZ5bP3zbmlx/f7t8vHo7/tsen5ofXltcW9v9Hp97Pzt9Xv87u7wa+/e6Xp06/V2b/lyaGZv\n6+htaO7p+G597vz+ff12c3r7aGpz7/F76uv363L96urqfu1sZmj76G91ce7+bWz0cHh4anhy\ncW//8/Jzc+7l7e75ffv8fGRo+H1teWr3f/fuc+3u6Pfq5Pv+9nplYGr+bmlt6ORzevvo3Ozs\n6OZsbm5ueGZqa/xuZnHu6/rt7fxp7+l4e3Hz6nxw5OX88OPg7WtseHNmYPZ9ZGdu+Pz76+rx\nbGxqa2Rn+mdg9d/r693Z5vfk4ef87udyYGJ5aV5lenfz5ePrefdr6H9dZWVuaHBybe3g5eX9\n29ntcnDcfmt0/fXqdfLqf+lqcnp+amF3d2Zfb/RrcPPy7/X96/P98vTz9vbr4nBtfeLua2rp\n6mdx8e1jYXLzYl3p4+9n6uFma/Z+bn/w+XT739zscvT4ampoZXH27t3t/H7m33ZtbHRxZmpf\naXVx+Ot2a/Tk62786fR1cv7p9G/r7nh94N5qfv7s+1x0bHXrb/L6fHfo5m5k/OJ+bWV07nly\n/OV06uHr53J462xnbHjrX2F46uhrfd7xYHnf6FpbeON8cPHp4HBp7+H2Z3rm92d64uxva3x2\neX9u/uruaenhdGV363hkder6XXR272Zk5ub5a3Hj2nNm9+p8ZX3y9mV99PLt7vXv7Xr5+3p+\nefju/vj15+xveOrpblpq3GtZbeDsY2Z26mFq3OZqdOfkal5x6nJoZHl+Y/fn8N/j3et+dXn/\n5fldbN/lYWXl4vttbHNqcXdwZWv0c31q/uDk7nR06fVeZ9/na/zd4Ohs69x8anZw32xZdXVh\nXvXfbV7Y42t26er5aV/xcmd97vVjX+zm/Ozi3tvvcNnrcWlrfmPz6Xtieu/vfGF7Z2Njbfj7\n9G9uefnuem/373Zk9OLp6OXjfej9evf7a3V+b25rcW9rfu3waGjv5m1w/PH3+eTw5Ovt4+r8\nbPzjb2F3+WRXZfr0aHvf6+7u5O1lYnp2ZVx65O5q7uXw7t/i6vD25X9reFxteHhua+nz6/z7\n//96a3Robu5++u5u+31wcHb1fnv25HRo6OD9Z2306/x1avzw9v7n6X52dP55aGV5+WBs3upz\na+vecWh57Ot7b/Dlb27m6HhwfO19e+Pme+/t7fFse+zxaWl1X2p4/P5/dOzr8PZxZ3/9eWtq\n9nv28Ovi6fjtfmtsfH5nbXX46PTz7/D+8P5+b3v9+Ht0/vf5av346vHr9m/s8XBobWxmbH7/\naXznafbu/ez45+p7evTudv9/ffTufH3x/fp3aXPzcu94cnnv63Jp7eZwd3VrX27ub/f19eff\n6ubn8Hp9/XV4cHRvb2/3725kcO1pd/HzdWvj4/1m+u1vXHfsfHP97vHx8d3X6Wzs3HRk7eRo\nXmR+ZFlneXpz5uLs/vfi62949HJmbPzw/Wx37eb67t7o8uvycW1sfm9odP/y+XbwfWl5e+/r\neW99fPnr7uj2/uTk92159W5mbmt2///77+z/7epxbvbua2pscW5m+vhof/738XXx4+xm9up5\n+Pn9fmz36v92bvPvfHnr72397Xlt/uv2/m1y9G767vrr6+zudfp6d/l9f35zeHRpdG5qb310\nc+/08Xhv8u/u6+v57+Pp6u7+8/xtaWlwePN4Z3jw8/vq7//083dvbG55al97e2nt/+/m9+rp\n4eL+9up9aGJ4fnJ1eXpu++r1bXLr7XRqc3VkZ3h0cGZx6uZ7fOT2+ujq9+/q7Ont8u7j5+3t\n8GlnbWJjbGdocW1y9/1ubu/o9vv+/3n98PR+d3p1eG597u/16+Lr9e31+/Z9+nBob2trbXR3\n+vP29Onr9fn6fnf97/Z+cG//bnPu+fnw6uXr+3VycXJpZGp3d3D8cX/o83z9cm1tbn76eP/3\n8uzi3+Xv6OXue2hod/97dnJ4+u/x7fZubfP5bXJyaWRqf3hx/+3s7O7s5ez97e9sbmtnam5v\nd+fl+Ozq+/v1dWpxbW/29XZ/fnf98O7q8e3t++zu7vlvbHJwe+9xdn1yeXhqa/b2/3p1fe7s\n7vZ6/O/p7nT+7v54//r6cH7v8/L7fvXv/3Z9dHD9dnBubW376fTw6vp67uHs/O7s7vD6/HVr\ncnRqZGl0+H758OzzfHV7dGt1eHdlY2hy8+7t+Wty7+328uz2fuvk+/ns+Pf1+vfs7XlxcGpr\namlubHR29PXy6u19cftwa31veHp+5uXr6ezp5u56bHxwbG13enLz7HhsaG12cnT49fTvdHP7\n8uv0+Pjv6Obr/Pfv+2t1c250+ftufv18bmttdXv8/nh79+777u35cmx1fvp/eXn9/XV1//n+\nbPHm7O3t7vxubGhqcm12/f715Oj1f2xxdnR8dXvz7uzs7uvr7O306e39+3lrZGlrZWl9d217\neXns5Pnz8H54e3tyffr28PPx6uv3fPr5/n1/9/Tz/nh+eXJpaWZy+P/9eP726un5dXp1d/76\nenRx8fD97e/28v3s6P11+3doam5tbGlo/31x9ufk6vB9/PlydXtvce7q7/Xp6evo8/p+eP57\nZWZqb3VtcfPq8+/n4e70f3t1a3f+bmt9/fhyeefxe3R2fHZ1+vP9fPnr9Gxv+2lpbmxt9urp\n9fj79vH89vTy8evk7/h6d/50cP337fp7/mtla3ltaG1ycXBvbnt+fvjv+nh6/fP26erv6ubo\n9v3v8u73eP3r8318b3R+fGp0dGZy7vtu+fh4dXR4++/0/Hdve3rz8/7v7/v2/u7m9/vyfHh2\nZ21lYHR5e2167O3o6fJ6/fD2am327vz9fG/16/7z7+ni6fhv+Hrx8mdqcGNfaGFcZHR6bmX5\n63Fzb3Xr3d3e3dva2tzg4uDf4+jt9/l0bHNrXmRoVFNeSkpoTkv44W/m2tjY5+7ddW7i3fv1\n2dnh9une6nXp52Vo9X5r+vx1dH18ffZsd+vs9ufp/HV5dWtdXm1nZF5pdPnvXUzvaURe1XNf\n3NHaenTc9lls2elu4tTT3NjMzdvg1drh29fU3NjTa1dZPDQ9PzZBddvdz8bI3mVqZkxOedTi\n2cTDz9DW62FeW15kc+DY39PT3dxvUlVkU0xZeevhzsnP1s/O2ujgdlxgXjcz2j4u+MdS+cDD\nznNhzmVCX89qVvHLz11n0+ZWd83W4dzLv8zWwb7U18nI2UlKaDYrPUU0POPI0+XKwX1FWXlG\nPlnR2uLEvcPY3u5WXEpN3d3sxb7IzMrb3HJZ8Nn06sC83EvY7SkqQDkvP8+/yM+5t19H4XQ9\nPvDP7d6+usz539RLPlBcZGPdwcPOyb/K2Oje1tfi6PdRQDY2PTs+V9PUzMfP2W1UU1BOVOrP\nzs3Eynfu9VFQYGbv1+jRw8zZy8nPzszHwsh0SF5JKSs+PC9AwcTQyLzAWUp2Zj0+6crkz7q6\ny21e+Ek+Vt/g0MW+vczVyNtUYeXUxMzx3tdOLyw3Oy8y1cHl1Lu+5VNabkc+YsnQ07q0vtT9\nYv8+O+rfV9y9v8rQx8LvZNLS08bqb3dLMykwRDYu/rfH3L670k1N4VE5R8vNfsm6u89pVlZ2\nR0LNzW3Hu8bSy8vK4+u+vdrf2E5DNSktPjQtbr3Ky8i/x1BDdl8+TcnG1ca5vN1YU0FUTj3P\nvtfFuMTPx8/M2/rKwszbyl08PSwoNzouRsHOysfHv3M9VPtGSNjDwr+7uL7hZ0M6bEc+yMHQ\nv7/SwMxl1tXfzsXKzutGSDkmKkA4L1W/vMjev7xUQWjzTEvZv8DFvLzKWj87VlU6ar/NzMTH\nv8N42sze0MjEyc9pREguJjNGNTrQv7/X47/NQEJtXU1oyr29vr3C11I5O2ZLPd7AwsLNxrnK\nZ9PRz83YxcbOVD5ELiQuSTU52r24yOrIx0o+U1ldfM27t7vDxtFPNTdUTj/vv7+/ycK2xGPb\nz9nl3cbFzUc+Ui4jLkM3PO7Cs8T6w79XQEhTdHDnvbS5wMbbWTszUVM/9sjCu8XNur97e+DU\n3PnGvcDXRkc9KCUyOzlM4rm1zN3H00c+P1P0dNS4tLvA1PtUODlKSU3fxrm4v769yu1ue93j\nyr/Hv9M8PzUjJzQ0Pl30t7LR2cVpSkNAZunvwri5t7/m/EU3RT5C2c3DuLm9ucrq6V5d8t7H\nvsHB10E5MCUnLjVAeMy1scbMxv1MRERXevnLu7q4v/hjTjo7QEjezsu4ucDAzOndZlvW1c+9\nvr/ERzU1KSUtMDtt6Ly1w8rB5FlVSFTxYNe/wbzA3npMP0xGR33XyL7GxLzJ19Ta2t7fx8HI\nx8pqPjQsKS4xND5dzL3Hz8TE1OVda9nkeebQxMTcZmhdVWJbbdza0M3Ox8nSz83Q09LSx8zZ\nzthVPTYuLzAxNz9S6tLSzcbBx83c4NvdfGBs399kXvfe2ejm0s3W5uTVztfZz8vN1N7Z1tvk\n7PNhTkM7PkVBPTw7Qk9KTP3Ry8fDwr7BzNbxe29eVVpnfO/j3+zx4t3j4s/O0tHV0tPa3e3j\n6n3c33RoYVdOSj88Ojw9PkFIXtzKycrJyMfO2trW3u9tc+btdl1XYXFve+vc1M3HycfJzc7b\n3t7b2uf6cVtOS0lDOzo9P0FCSWHe1djZz87O2d7Z2Nnlcnzp6fRsaXf0fHnp18/Myc3NysrN\nzM3P0tff+VlNSEI/OjY3PUBBQ01t3djTzczMzdDb3dnc7mtx8d3f/3vw8/bk6ODa19fTzszI\nyMvKysvL0t5hSUA+PTg1Nzs/QENPd9XOzMjFw8XN2+bv+GxbYHnn6fvu6uXo6u/n3t7c0MzL\nycbIx8bKy9T8XUxBPTw3NTY4PD5FUXbTx8PAv7/Gztzu621bUVpu+O91/O3r9Ovp1s/S1tTL\nyMnNy8nKzc3Q61ZDPD07MjE1OD1ESnXJv76+v7++yuB+a2xYS0pU//FpbOXW3d/l3M3O2+TS\ny83Ox8K9vsHEzV5DNC0tLissNkfkzsm4rrO7yt3+WT08SFL73vPbwc3U5+/e7E9Z2NLP1czC\nwM/LxL+8vsTI4E49MCknLCssOE/FvL28r7bG6lJLSEBCbNC/u8DTu79PTkpaYkhCy77FxcC7\nu9TyxszJz9jR+T46MScqMSwuSm29u8G8sMD9a0pLTUVOxb+7usrFvGdES0dRTUb/vsbCvLq5\nwuzjznXc0+fZ6UM6LiYtNisvT9m7usK2rsJcV0pJRD9Oyb++vci8vl9JTlFPSEnav8jEu7m7\nxtfUze7uys3jUUdPLSQrNS0sO125vMq4rbfV71BWWEBG78jEyNHFvdxOVGN0VkhiyMnZyL69\nxd3Zzs/m4NHOcktPPS8uLzYxMT1Yzs/KubS2vMrS1O9TR0xY8F1LZcfVc9bPyc1mesjV7+LW\nzM9nZeDg7/1l7dX7fNniWlNSSUE6Njk9Pj5N4c3IxMK9vcrW1N7k4/X75vL2dFRWXlRUa37j\nzMnNzc/W1vFca25f/uv52dbZ0M/eZ15hSz89Pj9EPz9NVVVo/fnLwc3JwMbIyulu8VpJT1Re\n3eDlz8vPy8rSz8/m6uTs5vb92+H+9+fe/U9PXkE8Pjc6QTc5Vlx0ycrDs7jFvsHRz2FAT1Q+\nRWFf4Nr+y7/My8bLxMh+08xmaOhdYXdV39Ni5tJYQ15SMzc8Mz1CN1HF1su3vL22xufP7E5W\nSj5WaUBQ19PLyc29uc3Wx8vR5F1702ZK5eF/6u3Y2+bpXj5FZDYuOTc7Tj1Hu73Lubq/uMZV\nfOFMS01DVHZOZMvMz8fHxL7M4s7K52526NnvWWTVambJ5Vr0900+SUg4Nzg2SFlFZb/FxbzF\nwrzUXufwVlpPSF1YTffU39TLy8nGzMzGzdPa4t7vb19WZe996+dx2d9LS/BMNzw8OD8/OVjQ\n38/Hx768ztvIzHxXW1tUZmVTfdvu1sfO08LFz8XO3Njsa1pOS05RTVJn4M/Q2tvdzNhFPUE8\nODk2PFhrXd/Hw76/ycbCy9zs6v9jXVBSavNnYNzP0s3LyMfY8fT2X05NUFlQWuHc2crEx8zO\n3Ox0UUM8Oz4/OzhBU1laad3LydPbz8rN3d/T09Tc3NbRztjb19LQ42pzfmRZW2RbXXlod9nV\n1dTe4tfbcVdXU09IQkhOTklHSU9eZV9fb+PZ29nQ0dHU19PP0dbP0NPT3N/k9Wv16P/3+nFy\n7enl5O3h3ODzc15jY1BKSktOT09PU1pcX19p/+ft8uDn5dbc5dnZ3dzg39/f5/Dn3t/e3ufk\n3+Ho+//t82pxdnNwb2/55u/7d21taV5bXFxPT1RSV2NkXmfz4d7k3dre5ebs8X/88fX79PT3\n6OPh393f2tjb4eXk6vD0+HN1fHRiY25waGBjaWpnZmFdXlpcXl1lbW5ubH3q5ufm3+zt393o\n/fXv8PP29e7i4Orp4uXm5ev5e3psaG13b2dsffpzdn78dPvx+3FhYmhuY19gYXr+bWpud/Dv\neH3w7/z68e/j4+7v7vXu5+nr7Nze5+nx8u30/HNxc3V1bW9tfvD/bnJ/bmtmaGZka21nX2R3\n8PT3fP3w7u/y8+79+f1zefPq8/fy9e/h7PPr7fTu/290cnh+fnJ2+v397Ob+d/xmaWJgZm1v\nb2x98/z/++74dfr1bm94+fh4enz87u7p6v/+7Onq6+bj6P52fHpxa2n9+Xt//Pfy7/l3dfpv\nZmhfaHR1em7+8unk5uPh7e7u/Xt9eWlmbG5qdfz7+PHt+Hn5d3NxamNmen7w7ufm6erq6vjp\n5PJ4b/xva3R0dnL18/v2/3B4fXFobG9mbvj4/P30+3Jv8OZ8dfz39PPt6+zu5ubu6vB+fW5r\nbW5qa/b7aHfy+nlscn10bnTz+Pfi3uHo5e7v5vn9c3R8/m5hY214c2307v787e9ua25taF9r\n+u/59/B89+7r5+Xv+fN4b2tudnL58Ofl7e737+31fGJw7PJ4d3h3c2toZm3373p+cXno5ejs\n7uvu6vz+c2l0e2RfbHZxbv7+dfL8eu398fZ48vpxf/duc+rq5PHu7vx98/JreGZY+evt5nt1\nfe/7/uXf7fpmZfJ9Z15eTVtyT2Zjbu/729LR1uPj29TZ6eZiXl9aYF9e73tqbnzg6d3Y2+Zn\nfep9cGxlVmXP3WZYWO3a3WtbX2Xo3XRuZ3fud/z3//Vj895n7fR91+v/8eLa7W/85u18em70\nc170de3zfutoYGhy7ONuX2/s5XpzdHT16vteafzs7WpeXXnd3uHz+vt51Nbua1db8upzY2pn\nXGLp33l57Pvf+/ja4uLh+HZ5+tzma3nscOHf3utdVmJoZ2FfXFJVX/n+amVeWmLl6+t7beff\n29XP1drPzMzNz9DV3dDR1dfk7ev4+OJZPTQtLTM2OTw9QFDhzb+8vby8vLi7xc7Pzci/vsDH\n0cvBvsHK1eTTyT8nJx4gLigpMy8/y7exra26sa+9vM5ETW7wzczuXs26r6y3wMPBuLjF3llP\nKB0kHCAvISY9R8Csq7Wrpresr05lUTVX219hel31uLSzsb29srK3vM5eZe06HhseHSwvIC1K\n0auosLSlpKuuSy4/Q0htS0R7xL67u7+4sre2vMbGydrw7GNDJB0nJSovIittu7O4urSloa3M\nPjc9R0I1O2HRvr/dzbSvt7zAwLC1ysvMxr7CRiAdLCwpJBsn07nRbcisnZ60+Vzd5zorLkrR\n6D5GyLCsvODEqqiyyFbNsrjRWGLnLx4kKysqHyNFxMvYwK6kprXIx8PvOC03aP5EOlG9tLi8\nua6rr7y/v8PM+Vhk3upcNyAqPSsoISRCZz05VLOprbu2q6u9SUDf2lE9N1XJ3tzDtrO1ubq0\ntsX0399aS0dY5dg4IzVCMiwgJD9HNTVEuKqxvbOvqK7U8cPFxko2TdTa22zVurzEy+DQxdRQ\nTVJGVE1BQUJFU1dSRUZPWG1oV+7Z5uPn3NreZU9TU1FsaGPt1ce+wsS/vru/yMzh+WNTTkxL\nS0VBR1hfXnBhbOni5uR3+9/b3P5lY11PT1RW+3dYaX7czs/Wz8bHzuZ0emxVTVFTT05PVmzu\n7una3d/c5ufb6PTj0s7fcmz193ZiXG/j931qd9HP09nk29z5cltLSUVBRkRFTVZn+/Xs29vZ\n1NzWzM3O0uLe1drk7Off3u18+/nv7/30b2d8bGNqXVxkXFlbXF5pZl5cX3v1b2Rw9+fj6Ojq\n7+vn73dm3vVq497Z09fb1tPc6+VyZmleX15cXFhVV2X8dPXp5fRt+elwfur+39z16ez9+vNj\nXF99dmFvenrv7nzx8+rb521t5+Xx8310/XNjbm5aX2xjXWZ0793T1+nf2dfX7Hnzb2VoZl5q\nfPzu7ezweG5uYF5sZl1pZFlq/nhodd7a6OPrfOf6bfh8++vw6uvj297k3t7l9+5y/P3t62Jp\nYV9kaGJfXmVfeulxdO/h+n5uX/1rZ3hnbu/o5eTf+tTV297g4eVpYGZ2W19bYmvv9fjvfPHb\n9HVz4WVd7fZWZXVg+Htv3+Nud+nfbfnr6390cV7of/Frevn82txn/enn8+r8a+72bWz/Zvn3\nbW59cOpnbWxvaWr1fGvq5+/d7u/d5+Pm3l7eefZr+Vr+/Gtt4+v28etse292bFxsXWpyb3b/\n/Xrt6+rfb+rm7Xd+8O73c/7fcut97u70eXbu535hYfltamVravBwe2rcamVu8n3aYdbbbNv0\n/95z/ex86njmT933bGNW4Fzi+mNg3nR+Z91V7mXPXdrz+drYV89lVnjbT+5sbfZt9vja42lk\n2NdQ11xy3U7mVnTUYWja0VXt40/JW+HbcefVVEtFd1pt7czO3tPf7MxeWWL+S0xH5t1a3M/f\n3+xzbebe52je/9z75FHPWXRW5uJda9tQ3X5qdeRY39twZmbu5l9q7OlQ/uXn0Vt36Op26F93\n2eNL8VHO61vVz9PaVl/iZVBXUXThTF7p1sx7Tt7P7GZVaMjsW2p80tRUb9/cbGNW5tnVcu7b\n0trsXt7u9lpOXFhDQz4/UE1KbfnXztXJyMDGzNnJy93n28rD0NHHvr/JzcvI0DwoKC4tKSMq\nU87Y2MWspqy8ysnA5TowOk5/TD36ubW9ysm4ucnVy7+9wcfFvrm4bh8aKionHxw1rrG9x7Oe\nob1IP3rXMSMqXra6Wt+vqrPS+8q9zO7dvrO4u7exr7j2IREZJyEiHzCmm6u5uqekzikkMHha\nLjS3oKC6PWW9zj4vOsO4ws68qKOtu7y8yOQ/IhQTIi01Njevm561clbC1S8gKG2usdPaqqCz\nOSUsV85MQ9uso6u5uq+ru04+SPDcbEEhERs4NT0sOKeZqVo7+rbKMyhBraa/PlasquMrJUqz\nv01Xv6amv+fEr67OQFjDvdFjVysREysoPi8qvZmfvnFTvrfwKi/Qsr1SP8aor1wtP8W0t15F\nvKixv/vKrrxGOlLBuMtP+WQcDh0iLd8vPp+YqLdYPszHLSI17L65v7qnorVEOEhjxNtD3ayr\nsbns2tVPOD5m+/roz8G4NhEYHyXISTW/naCryTI43m40PUJar6qwsauxu89ENkzPZ3rfYu67\nwuDa8WNueVBk2tbl08XbLR4mIS9WPDt0vL+3vmPYuLnJytlXxLnEu7jA1Mx9T2dYP0Bg/cvA\nfFFZTk5WTUt5097cbl5TU1FMWXru5vDf0tzlaWvX41ZVVnHi8l9m6n/4Yl5cY2pl59ve3NLj\n7W9p28rKzMrS72n0aVpdVVRz29DU1up09V9KVmBUZE9f2s3VfFhITlFZTUlOXOve6nl+8/13\nZV9+5Nfd1cXCz9nO2d/r+urb7ezn4OJx+nZ34v1iYW/m2t5dXWVTTUpKTFdSV3j8593fbVFS\nXFRPUHfTysfIzef18eLi5NrWzs7S1ehycF9WV19kdff46u3wb3F6ZG7u9eTg6GplXU5PUVJT\nXF5m8ufd4O5lZV9ccNzV1NDR1Njb+WVrc/R69O3r5vp6/nZmbHjx7nnk3uPr+21xc2ZubWRv\n/29saW9+//RhVWF18+h5avb3eWVeb/dwfu3i3fV/6OPl6fFvdvju4d/d39/n+f38/3pzaPvf\n39/k92pwaV5cV19fWl1mXV1gdvT57vLx7uz/c3Fr+/H97Ofu7d3a2Nje4ODvbHT2bWloeOzh\n3N3lfGVmaWVmYGBdXmttamn/6urz6eHr8Xlwb3N2bWJ2733q+HFsb/t8b3B+duHn6/Tv2djr\nd/B7fev7Y1pd/v9rauvz8+Xj3ubvd3BvXV9fbPdrZGnu5efrbGrf4mpibXr6935sb+7d4Ovq\n/vr1ZF5qYmNxavjV2fPf5P3e6F9leGr04v3w4/nx42pcfWFq5ft48ff063r93+Xu3+X49+vp\n7PNiVFZXWVdMSkhLUVRcYWnu2tfb1dbUzc7Kys/Q0s/NzcvQ3NnZz83U3Nnc2tDM3jAkJyQu\nQzg2SlzOsK67vL7Uwb3aUUI6QMzCztJo/L21uMD7Uu7HxMjM4NXDvb2/ydLD8yUbHBkkPTI6\n3tW2oqazssZVyMhJPTUvQ7+4vcLg47mvtcpOP07MwMXEzs+9tLC0v9bczkUdFRcVJkc4Ub26\nqJ2jrrLgP3paOTk0L026t7O6/N67trrORj1M17+7xNLGvrWxtr7R4drSOxoUFxcs+kR5urSk\nm6K1x0c3a2U5NTAy562vtrpo5rW5xf87NkfQxcLLcc24sa6wvM7X1NRRJBUWGiJS7EjcvLCi\nn67A0EtT0FA4NzQ+vq+6xNdiwLC3zEs7PXTJ5mNVTM20r7C1vcfAvsTWMBwZHCEyQjEzStqv\npaiur7a7uLzZSzozP11aV0RAW8e0r7nQ7/Tl2N9TRUdkxbq6vMPKyMG9xFYvKCgpMTUuLC0y\nQ8i3trKwr6yqrrrYTUZLRz86NjhLyb3FzuJx4tPS0Nz76trLxs/f+2l/7uzi4N7U0elbS0tL\nTUo+Ozo+R01NTlBTXeXY0s7TzsnEwMLN4/Ria/xtanDax7++wsnS2trd7nJbU1dhX1lbWmV6\n3s/X52hUTktDOzY1Nz5IT1xiaPPWycjKz9vW1Nre19PVyr++wsnMy8XBw8zoZGBhXU9IREJJ\nWHPg3+Lm5djQ1upSQ0FDQT89Ozg7Q0pWb37j29bKw8XFxcTEx8nJysrIxsPGzdDW2+tvX1BL\nS0xOT1VeZnzk3trSz9Xa53lkTEI9Ojk5Oz5DSExWZ/Dg29TT0c3Ly8nGxsbFxsXEwcbM0dff\n4+9pXlldYVpXUlNfa/je3OHp9HRubWFaV1lZWFFKR0NAQUVISUpPVWNz5tjPzMvFwb/BxMbK\nzc7P2t/e4uLf3tvd5e/q5PxtbF9cXF5oaWNs8/ZsZWVfWVFOS0hKS0lHSUpLUVJbcfny5eXg\n2NTPzcvIxMLExsbFxsnN1Nzf5HthW1pbXV9hZWNjYWlpaGdfXFtaXV5lZFpcWVRaX1tZW1la\nYWBdX2Riae/m5eLh2drb2NjX2tTQzs3R0M/V09Xe4Or1fv90bG1uX15pXl1jYFhZW11eXVpV\nVVVVWFpVVV5fYGz48O/r6+Ld2tza2uPf3eDn3Nja29nZ3d/h3d/37utqdv7w5fB8c3X+9On/\nY15cW1xXT1VcV1pgXGxsYGpvdPn7aWr+dnvy7Pjd0N3Z0tng3OXu7Pj093Nw6fDs4ers7N7g\n7evyb2NkaWpcXWxfX3RwZGVuaWpwbXdydXP3eW326+zq8vvk733m5vX6+/zy6ezq7ebr+u/r\n4u98+/ltefP67u327e/6+3ZlY2VnbGVtdH58bfrxfHx8dHZtZ2p2eXf07PF09On2c254e/Hq\n6evx6uPd5e7e5e/rcWhkX2hoY15neHv97u7s7Ovt7ff7eXD+dW5yfvr29v52/3Btd25ranD3\n6Ot3++r6bmlufP7w63Z+dHDr6nlqe+7t7+rn7ut4d+3r7fXyf/Hj7PXs+25wbWNmX19ib3Fk\naH5+a/Ts8vD6d29lWltYX278TUz6a1Ts8d/J1+7Uxb+8xMi+yNTaYUlTalZYY1tkdl9falFD\nPTo4Oz09Q1R8zsLFxsTJycfLx8TBura2tbGxsbS6wMX1LhsODRYgz6uvqqeln6G9NicdJD7t\nuK+5vKeksM8pIzXUrKe22MK1qKGqsMBJTd1dKxAIChI9np6jqrSqoK47IhcWLrSemKG2r6qz\nzykZHjuumpyuxs65pqS210E0erjANRIGCxg/l523scCun6wpGRUX05mXlaTZwLHKMRsSHsGd\nk5zBUlO8o6jWSzpRp6GyPhgHCRwfo5nfpp+on6kfDxUWZZKWmJ9dabdLJRsRHq2bk5jHTLu6\np6owL1u2nZ7dIxMIDiUqo57Jn52qrjwQDx8ym4+dnqW/wk8dEhYa25mZmqdq1K2vts4rZKOf\noLklFAsNIC2poL6npavJMxQPIUqdkJqdo63HPBgNFB6ylZaZpcdk027IvluwrLaqvB4MDhYn\nnKW9qbu1sjkUExssm5KZmaq/w2shFxEV35yWlKXNv8hO6Ntiq6KvttsbDhofMqG86qqpuMUj\nDxgq+Jycpp6gqrY8GhofJtKnr6Wjwbu+OUPZ36qepr1WIxEaLTGsrOyvp8VHKhUYL16onaim\noazMPSAdLUK8rmHOtMa6zjtYvr60q62hnz8fEw89t7qv186gojcdFBQ+pqqprbiioOQqHx00\ns7W3tMT6akMzReHOuq+yr66ysK5PHxwYKbjIyr+6rbExGhwmX6qvuKumprI8Iig3UsjSy6+o\nr+osHylHwq+urKirzjgsLMqsqao3IychLC4oPa6foKxILj0/OjY27qegq7xZRmE6Ki9EuKWq\nvc3f5mIxIiXnr6uszc+42jEnJTW8sLWtqsMuJiIs1uVMwKqlp8kqKTAzPkVesqKlssNTRj8s\nKzrWr6u0y9tYPjApLUbNvsXAvLy8VTdI983F6G7DsbK7ySwcL0U+vl9LpqS8ezYsPE8xOdO5\nqazXT990Pi4qPMK0tsHKvL33PTQ+6srW3Mu9vvRCPkBDY1s6f7a8tbxQz8JLSEg+273MZDU8\n1HFKOC5avddeXf69tc1KS/rJy1ZG0bm7xWFV1tZQPzxI1Mze58/FxvdAP01aX1ZTeczN5FxN\n9cvwW1xZ1s5NSnvUv8LwXW7meFBKVujW2/B+5f5YV1Zj4978/ODd6llOT17s6tjNzdDfeHrm\n6fVsae/V2WhPUV9zb2JgdejX1+ZpWv74b2ZfcXZhVVhffO9pdGV22Nv6Zmfi19zY29rU1+90\nZV9wZF5+6+Hd6GpbXVtWYf7o09Hd6/Dx9Pb4f/f7dGlcWFhedX936+Ti4XZ3+HZkXWBfZXZn\nZGt+7Onu8Oji3OR2eevl2dfZ29/nampta/Xt7uTe5N3ob2puZltTTlVdXlJLSU9cYenl3M/O\n0998a3N/efDx8/Lw5+l79e3+9+Xi29vd2+Hp4+Li5efZ3NvW8m37Wk5KQ0ZOT01OT2D49Ozu\n79/X1dfj7evrfWdcXGn75OXf0czJzNfZ2+Ho5t7cz87ebmJbTUdCQUhOVlpWV19mavR5+tfS\n1dnj921jaGdkZPrk5Orp4dnQz9bW0tDOz9TT0NjqX1VTTkdCQkVLT1NPUF724t/c3tjV2tjj\n//R4cm5hXmNy+97X2djX1dPZ1s7MzMrJztrsXE5RTUNAP0BITktKT1187Onj29fV2On/eXTv\n6/T76+Pp7N/b2NTQzcrHx8vT19DT2u1kT1BQRD07PD9ER0tNWOrf3dvb1c/U2uv6d/br+/3v\n9/nf2tnQzs7PzMvNzc3OzczX5O1YSUhDPz07PUBFSEhScd3Rz8/Pz9LX6ndpdftubPb58+7q\n3tXMzM3MzMnIysvM0Njh6FtKTUo/PDs8P0NHRktl6drV1NfT0tTa9vt/enZiduvv59vVz8vK\nysXFxsfJysrN2+J9T0hGQTw5Ojo9QUdHTXfc1tbUz83O1Ov+8/3yc3T27uzc19HKyMfGxcTI\ny8zMztre4F5IQUE9Ojo6Oz5BRkpY6dXRz83NzcvT6/R3Y2psdGl94dfPy8jGw8LBxcnJy8zZ\n6vFtUENAQDs5OTk9QUNFTGbbzcrKyMfJ0ep7a2JlZF9sfOnc2c/KxsC+vsLFxsvO0NPc+mtL\nQEU/ODY2Oj5AQURNbd7W0s7Ix8rP33l87W1gYnTh1NTRy8XAwMHExMTKzNPT1d9vV0k/QT43\nNjg7Pj4/RExy49vSz8jDx8/gbv/je2R25dfX1tLMwL7Cw8TEyM7g6/b3+21scF1JQkdEOzk6\nPEFAQUhQ/9/b0c/LyMjP2t/d3Ovx6+Pe39rRzsrHyMjHys7a6fF5+n5teOz7YkhEUEo+Ozs/\nRkNERE59+/ri0cjFztHW2tbe7eXVz9Tc3dDNztXa0czN2n/04Oj7cvfr6dzhXUZPVEM9Oj1F\nRENCR1BabOrezcfIzM3Nxsrc3tfQ2ejm59/b2ufr39Xb+3Pt5vFt/PX1fWxsdu/pXVlmVU1G\nQUVKSEZKU2z7dOXW0s/Pz9HZ09p3++zk3+ro3NfU1dnV1t/e7vz0fnBtanT1b2tw9Ox88/Jw\naWNcUUtJTVBNTVJcbnRpa/jm3+bo4ubh3dra1dLY29XV1NrZ2d/qfn14+e3vbmvzfnJjYl5e\nbF9db/5tXF50Y23xa2tobG1fWFllX15o9fTt39/g7fjv5t7p6O/j7d7b7erd293g3Nng7PHn\n9nt1dWZddWxobv5va21qanV9e3ZvfmtiXVZXWVtbZ19ebXL34OXo3tne6enn5NnU3d/a4OTn\n+u7x9X53/nZeYGJpcnTz7uv0d+/zfPHqenFqYGNZW1xYXWJs9/xta/1qevF1bnXr9ObZ2tzj\n+PPj7vl7cvTh4+jm6u3p3+Ls6e36fHFtZG93ZF9fZWFlanh8/nt6emVreW5kb3RraHd1+t/p\n6eXd3ev2/vjz8vh4evr47P7t4Otw+u798erqc317dfF2e/J4bv19aXX8/m1lZG91Y11jaGJv\n8fT7/Onj9fvq7XJ37Oh5/d96S8nITMpr3dJa+/XoX2Ls/lNLy91UZDu44EvJW87VRe1NPOdP\naMnbzc3V1MpiZN5LaF1E2O5K5m3myF5dz/l9z0fo7lZ2Y19u5Vjl3F3Qb2n2+l/r9PXP4mLJ\nWPfITNx1WnrwZlzrVN5ZXXRy2edx3fh//2l5aXtq9ufac/LPat/fYNvnXWv8T3dnUX56ZvZs\nX9ru6ehe4N9Z+Nv43W759tl512/jy1na8+7dae5v2n3qeVfmUV9qXnllT0tZTlJLSU5kXltl\n7tfa0dXPysnQz83f0tvf1era2uvr2erZ22XT1Xjicl3xa15cPjlBOz47OFtvVGJl08za7NnQ\n2dzoz83Oy87PzNXVztPQzd7a1eXO4vzT7GXsbXXTa21v9d14Qi8+OTU4LUfoSFhf0L/SednM\nzM961cTLx9TWwsrU0tLIyt7f0+fv4/7b71/c8vfkbN/abfXjTy80Py88LTTWSEp137/Kdd2/\ny9nQ3L/I3cnLztHc1MjR2tXVz/dV3eLs7Gbd0nT729H0WPPs1j8rRz8zOSxP0D9O6MnI717F\nverf2si+/evDzNrc6svF+9/Hy9ta887rdl7vyu5m2NLPa1ja2V43NU02NTQ0e0w8ZtnR32jV\nwc7+0MXGzuDGwtrf08rK5/TNze5XbNnvX3jZ095u2M3g9mXb1WNJOEhNNDI5RklBRHfQY3nN\nyMvr0sPN3NzJydv20sbY79bNzuFp8dxjW/vr2OVt3djn6v7o3up+VFJTSTw8Oz1EPUdaV1ff\n08/S5MbK1c/bzc3n1M7Zz8vNzNrl2+f5ZFdy7mp6/fLcfX338PFrZWp5Wk1LS0pCQkxOUlJm\n6fvm49Ta1s/UytDT2N7Q2+DteOri9GT4clZn72/+bvnjYmF98+R57uHpbGbm+GdTXe1uXl30\n5m1n9OX3ZvTub21573l0ZH76W1lqbmRhY3fu5uPc2dna1Nvh3+vi6Pvv5On5e3h3aW1mbm1m\na3X6+HN27/Xuc2t8bGRjYF5rb2Fu+/N1b3RqdG5ncPJ/++bt7uzh29za197i5unm+np2bmtj\nb3f+7fZ99+Xg/m1qZGZhYWBlcWFkbmpqaWlpaWdteXX5/Pfr7OHg3Nra1Nnd2+Dv+mpha3Bp\ncHpybfx+fe3p9vDxdn1vb3p2a3Bvb3Z2bmp8+nN4/m5xd33+dmx1fXj4+nrr7PX+7enl3uTu\n9/757e/7+XRldfDt7errdXv17e77b3L+dXZqYWhiZGRkaHj38Ptz++3t6+/z/Xzq5H3/7n18\nb3X/7v1u/Xj69ern6/L87vf/9/X3d2598/Tu7Xhv//Xyb2xqZ2x4e3RrZ25uZG5/+vX/+/F+\n/erq9m585d3ucnxtbHz393V1d+fo/enb3u/r7vb6eHZtZmFlbGhla2128O7wfvx8+PRxeX58\ncHr/+O3o6Ovt6uv4++7r7HRsb/n8bnx8ef5xdPD5b2xvY2ns8u70+PLq5vX9eXr06/5ueX39\n/3R/9vX6f2xobG9xbV9n/Xnz/HRqafnq5ufs7ubl9vn08v58f37u6ftzb3JxbHZscntwc/b+\nc3N8/nF3Z2n5cGRPUdfNz9D14tLf1NHtdF1UXF5ueGhsfvnted7Y4O9VWFtKSVLuzt9JQFzT\nxcfR0NPV0djU+FNJPT5IXs7Ex8fZ6/Bsy83ncUpRXnb+VlVe7dnueVNp4srcfmtC4WDY3Uz/\nSnn5X+jn4Pfq/uzPz3tYVfDN1+pQT83N1GVEas3L91FQ5NTwaPTYUWX97s7mYUxR02zcTlvg\na9T6WEdM3PbK61boaMLKzvNR3mzc6kdfU2Rwb9Dz2+D/4GLk4fjkU/DwdF5ie2bx7PT8c2Hn\n69XqZldWbnrocV9ocvHz+vXyX3bn7O1qZPbc/vP77eDad/Tx4NLa3mvu4PLkYl9dXPdpa2Zs\n6f1pZGBYaHhtXldhZXdpcm9r8fPd6OLxeeXW2djY6NjRzdff2OjW19TT3OVr7Pn2dE9AODc3\nOT0/SE1e6fbX0dDNycjExMjO09DQy8/c2dHLyMfL1Nve09bZ6f7n7T8wLygwMjE/PEnp0ca7\nw72/0MXM59Tu3snV5+xY5M3GvcPKwMjGyNvh3WXh2c7fNCwrJzUwMTs5S8nDure/uLi/u81Z\nV0lO8VhQWE/Vwr65xMi9v73C3mlla9DZ0mI2Li0tNTcxNzpGz8TAu767tbq5vN5bTkNJSD5E\nR3bCwcC/wbu6vb7H09Pa2tjc7lM0LywrMy8zNj5gyL/Cvr63try+015UTU9JPT9EXdjAvb29\nvLy9xMbEwMjP2M3Ex1QvIyImLC4xOfm8s7G3vry+xu9GPUBNVF9+ZuDY1MTGysTKzsXLxr/C\nv77Iwb/Evvc1JyIjKSspNlS6rbC4vLy8yEs7NzpOWFXXy8rEz8/Gy9Tb7s/CxL/DwLm7wcDD\nvr9NLCEeIykoLj/MrKy1ubu6vV47OEFcaUhZzsS/3W/WysrN3tPAvcHJyby4wszMxLnCWCod\nHiQqKCk8vKutt7+0r7xaOzxVdEs9Tsa5w2Rqybq8zN3Nv8DO4tfDwtXtzry6xuVFIx8lIyom\nKvK0srK7t6uyy0w/Xd5DMztavL5YbsO1r7vTx72+z1d8ysjVY+jEv83m3GElHykjLiUmZrq2\ntr62qK7CWkXk2TYwOVu3yFvNu62uxs7Gvr5fQWnh3G1Q7sLFz+bayk8lKCwmMyIsysW9vc+u\nqLzNVkLM5DdHTcWu2Wq/t6y3c9rHxsw+N1pYT2ND/MDc2H1g1c47KDUyOzssR9fczuzpuLvO\n3GTPv9p53s69vvDPvb+9zvLX6m9WQUxdWGZNS29eVFNLWuDp7dxhfu5PUklHTk9OUVpc6uLc\n0szKys7Lx8vKz9HR6GttY2ZmcGxwaV9kUFxZTlRed9zV19DZ4eDuamRjXmZmX2lgZnVs8/5n\n8PxnefTn2e9edf7s6GReb/z6bFtq+25raOrV0dPZ39zg+e9zcvX/dm/l5nVsd97nYl5o8PFj\nb/Hs82lkbWt2bFpXXl1bWVln9vLy5tfR1NvxevbycW1uc+Ta2dva19re6HN0cG1rXWhvZ3Vv\nXXfybG1lZG5sZF1cXmN76ujf0c7a3e5qaVhQU1lk+PHq393X2t/l6O3p9H/5e3VtaGFeY21q\navnt8OPm7+705d7s/u3l3d//bWdobWBUWl1kal5fberd8nzl7e3e3ebj4fBtYmFqbGNjdu38\n/PT06uTm9vP27ebs8uns7fn+e2hdY2psamVx7Ov26uXk/n92Y11gX2JeYm947+Dg7eplZ8fL\n/k9P5tV7Ulvqz83oYvfQzOlWVmj+9V5Z8tfb9Ghq6eV1WVhhZmBYWF945t7h/fzZ0t31e/Pl\n3/tfY/Tj/mdhf9/l+Xf68PluXWJvffJ2Zmbs2d3b19Z1OC1PurlZOE+5sshPReq8wFg8Q97J\nY0BO2tZiREbMvcb/Sl7MxnZKR0/sdE5FRljMw8TIzsC6xH5GSUE/S17U4V7uy8bOak5SZ3dp\nW1VaU2Tu3t3o3+nezMzkWlBe3ONbUWHeztl9eOPe9mhia299ZFVUe+bf4mfq0dTfY2Fo9mxY\nW2Lq4Obh6vLqZ1pfaWdubGdeX37n5O7w4uF+++rj4O50fdrMzNvv8NnKzu5sbv1oZF1eTz48\nPD5CREpR+trNzNXS0NnY2d3W2dzYz8/Mys3R0svGy9PU0dfU09vu6udHKiYpKzExNUrIvba1\nv725vtBvTE9ZVVn29trOzMvJysrG0tbP2NnNz9DL0c2/wMC/4iweHyEpLi87xq6qqLXFv8Hc\nVT4zPUx90MnJ1MzLzsvW0tnc2dnq9d3Qwr7CxsTCvr3FTiQcHiQwOj1et62pqbvoY1lKRz05\nRl7Mt7XG41FY1cvX+3boxL/I0fDnzcLLztLRwLi5yDceGx4oNz5J2rCppqvBVUNCP0RDPkzP\ntq2su1tFQFTP3llWesq+wdpiXfnVz9Pp2si7trnAQCQbHSc1XtXCsayss80/Nzo+V3h778e1\nrq249zs0Ok/W1fdd/cm/xn5GQlDrzMHExr+9uLe79S8hHSMz9cfDxsnDxNROPDc8Ycm9u729\nuba+6D8xMDlbxbq+xcjJ1WVDPENczcC+vr2/vbq8wd42JR4fL1bHw83WyLzFbT84P3XFu77O\n2si8vdtEMi87YL61uc95eenccEpDUNzBvr/Bw8nEv76+y0wvIx4pPtm+v9XRzdPfWj07SGbL\nv7/M0szJy2A9NDtOyre6ynFa48fK319UY8/GxsfKxsS/u7a5bi8kHiAvVce/ytvFxM1+PzAz\nSNu9usDJv7i2vFo1LzlO2czS3N/Eu7rJW0FDYtXFzNnXwLi3usTcTTIqIyEtTr+4vNXY3Gta\nQzg3Ts24sbbAy8bO6UAuLDRYybe2u8TIx9DvSUFHfMi+ws/Zy7u5vsraaEEwKiQmN/e+vMzq\n1t/0aUM5PWzHubjE0dDNzuw+MThQyr2+x9Pdzs7dXkpJXc/Gx9fz3sO6ur/U2+dLNSwjJjnP\ntrbJeuh0XFE9NTxvwLa5ydvg299ZOzM7YMS9vcbLysrK2XFTYunOy9Dd6NjIvsHIzsvNWTov\nJSc1+cHGfUltan1fRz1J0L+6xNTo29TYZj83PWHJwsO+vsDCyNr8W1ly8ezo63nv0MbFxMC/\nwf83LCUnNHTLyepY1c/fYEk8RefNx8zZ2MvK0mVANkD+zsfCvLy/zOFtaGtufvvy6eTX0ce/\nvr+9vcxMMSolKjhn0tf04snN601DP07o2tnYzMO/xt5GOztL6tTUyLy3vMnUee/2a19e9N3X\n0tXJwMK/w8j7OS4pJzBL+dbU88zD3VdJPkJr3/Ph1MO5vc9QPTxCUG3ozbq5vcTP291+X1tf\n69fc3s3Fvbu/ycDcOjMqJTFGWnt2Vsu71VJHPEN17Wnr3MS1uMhjQDxET09S0ru3uMXMw837\nWkpLd9rm0MLCv77Ky73WNi4pJjdMS2FdX8C40VVNQEvl+Vzp3Me5vcv7RT9BQUxZ1b2+v7/G\nwcbzbGNd6Of+zb/BwsXKxsPaPS4rJzJKQ0lYWMW4zl5RRVLneFJb6M2/usP/WE5ESk9TzcLT\nxr7DvsX99OLt1tvvzcTJys7bztJoRTIsLDJAQjtDaM29xPRpa+XP021q6NvPzdTrV01QY+nY\n19fn69HMzNPk79rW1NLe3Nne62xbYu3g3M7N2nheT0M9ODk7PEJGSljo0cvGx8rM1exfXF5T\nVV5qe/Tg0szHw8HGy8zJys3acWdxcWNaXWHtzcjO32FWWk4+NzY6Pj4/R1R63M3JyczP1ed7\nYl5ydHJ4euPh8NTKycnN0M3IyszT6eng9mZbWV1u3s3My9d3cmpLPzs4ODo7PUJNetzb2tbM\nzNTd6+7j5e55dfd1Z37ez8fBw8TDxMbL1N3k+2lcVllbfuHi09DtXWZVRz85Nzo+P0RGUHTg\n19na1dLP0dja1N3s6+9ubfvw39HMy8rNzMrP0NDZ5vxpXmBcYXnv49rV3WVbZVZJQj4/Q0RH\nSkhMYn/56eja0dvYztXo7nRkb3D+7ercz8rHxMTFyM3O0t/y/WxbXGlwdm51/O7u6GhPWVpL\nRUBBRURARkxQX2Vr6djVy8rS2uHp7/H58u3n2M/OzMrKysvNztXe4+h0X19cXF9iX2t1bW53\nfu/o8WZbXFtUSD9ASEtJSktOZNzR1dTc2tvn5+Lj4NjU2tXMy8/NzsvHz9/p6eDyYltdXGJr\nZW996O387/h5e2FXVFNTTklHSUpKTVdXXF5qZmf2/uHb3djYz83NzMzMz87P19ng49/o6+Pm\n3+37d/H7bmd9bnL6ZmlnXmlsW11eWVlSUE1KUFNWWFZaXWpw//7q4tXZ29rW0NfT1s/Q2Nbf\n1tnZ4t7n7unt9GXu/nXiZWN/YWJjWVVmW2lgTVtTXllPX2JdVWh872Tq1m/v9OTd69l43ePv\n2urg7fTe49rm6uLj7t7u+O1343pp9+z1ZHH3+vf4/WpdY1tcWFlgXmxeZG1/YWBp7Fzu6nZ0\ndN7a8e/f1tv84d/c4en/5Pzn5Xb8bO/uYmXs/fPyYOPnZ/vq/Wd2YGVsX2pdVmvyZvhvW3Dm\ne/Vs/OP09+d7b37//+T49er51OZ709jt733nYWPybl9pb+fmaen76dll7V9j3WNeWm14fFVd\n5W73/nbj6+riZmrefnHvWuzfeu5qYu/pa9vga27k4HPq89TrW97X7GV7XfJgXe1fe2Bi+WJz\n+t5vXeft7WJq4vj/Yezi5/L8d3ZwbWLp8exrb/V23+7gYmTb5Xpz7mju9WTh3+/i3/rj/uVt\nXPVZbFhTcORiVvv13G1n2dr0c+l67/Ro6PX8beD2a+Rp5uVv4Xlsb29safNcaXxd3W9u7nnn\ne2Zb4d78aWJ11u3j6mnr5d9qevtr7HR05W1k2eFfYWPq32VXYvLgd3BnZOzy6O1q8Pr25G35\n4f3s833q893uX3dvc/lqfuplcnT26Flc7N3m+/3m8ezz7+ZeZu36cH35ZFz91Otibu7paW3/\nflxc++l1eOhv/e/o6f7tfvLn9/d46t/seubq5+Do4fXo7nVyd2xPQj5DSk5RU2jt2c/OzdHa\n5ejn8u/i3d/r79zP1PX93M7N2ebx3d/s4N3d4NrW1elCLiouPUo+OD3yvLe7vsPEyuPv6HNZ\nTlzWyMrqV1/f1tfrbm1p/eXc2ef239PRzs/Q0tfPysHA0EouJCUvQEI1MEW9rKy1wMrO7FZP\nUE1HSPrAucF8TFjVxsrbaFlp1sjI1f9s2cbDytXh39XMxMTWQiohJTFLRjQvRbeoqrnS19P4\nT0ZGSExbzLSvvWBEUtTI4lBKV+LOzc/dal3mzMvX5+Tay8PAvb/ZQS0nKC88Pjg2TbmpqbTM\n7vphSj07QUtoyLe0v21IUNXI/T87S9TBw8vMyMXGy9d7V13y1MnJxb/E2kgwKCguO0A7O1W4\nqau7bU5WUEQ7Pkhc2r6ysr9qSFrTzlc7OlHIu73I0dDIw8t+TEdW5tTNzcm/vMNZMygoMD9H\nOjdZtamrvmZWalhBOT1HVOC+trjOUE/6z9tOPkX3xL2/xs7TzsrQZ0dHZtbN09bMvrW31Dop\nJS5HTjgsNr+nprdiTmtmST08P0VbxLGxwlpKadbpTkRN58zCvb3Czuzs2ndJQk383nj0y723\ntbnMPykjLlJbMyg0tKGmvU5LaVRCPj07OlC4q6/SRkrw32ZRT1d/zLqyu9pecdt3SkZOa/Du\n1sS9vr66trxRLCIlNEU5LjLOqKWwzFpPRzs5PT0/WryqqrdvRk1VV1lVW3TUvLS4yldLUlNM\nR01o5d/PxL68u7y5uuU1JSEqPUc9Pv+yqK272kU0LzM/RklpwK+rsL9jPTY8WNTU3NTFu7m/\n2Uk8P01p69/e3M2/u73Cx8S9w1MxJyMpOExYWt66r6+8YzgtLDhU3cu+trCutc5EMS87fL+8\nv8TGycfHfz40OlfUy83W3tXDvL3CycjDylc1JyAmN2XQ1ci5tLjEYzkrKzdnxLm3uLm6vt1A\nMzA+z7Wwt8ffet/dUT05P2fNvr7K6+jJv7/EycrJ6kQxJSApQNTDwL29v8LURi8qLj/Zt66v\nt7/H3U48MzZOwK+ut9FVV/ZoTEE/SvvGvcPVfO3NxL++v8LZRTEnIyg858a+ubq/xeA/Lisu\nPtS2rrC3wdVfQzkzOGO7rqyyxVtKUllPTE9b38O8v83sXWTZx7+6vnc7LCMjL0/Ux8C+vLvE\nWjUrKjNptqyssr7Wbk89NDE91LKqqbPeP0BMT1FLSlzSvrzD3FdNVt/BuLa/XjUmIStC2cK/\nvr27vNw9LCcrP72rqa6+cU1JQTYvNlS6qKWsxUs+Q0xaVkpR1Ly0tcNfRURYzrq4z0UtJCc3\nYMvAxce/ub9tOSomLFm0qqetyU1APjo3Njz/tqqorsJPOz5JUVlp7NK9tLfFX0FBXcS6x1Au\nJCc56MC7w9bNwcLoQS4oLUu6q6iuw1c/ODQ0Nj1xu66rrrrcSkNERk9d48K2srbC70xIYs/W\nWDYnJC5Rxba3xM7KzehMNiwuQsmwqqy76Ek9ODY1OUrLtKyutspcTEZHSUtW1bmvr7bOUEhX\n3vBILiIiMPu2rLHEzs7WZ0MwKjBSuKilr89JOzg6OjU2SM+1rK641k5GRlFeW/vJua6ss89N\nQ1ZtWjsmHyg/yq2ruM3V5GNPOCkrPMaqoaa6XTwzNz03MTpfvKuorsROOzhAXn3kx7iuqazB\nSj5CQk08Jh8lOdOtrLrKzdna5z8sKzXxraGks9JCNz5ANzE2RNOxqau6bTw0OkJKaMWyqaSq\nu2U/OTs8LCAgLUy4qrC/yNX//Vs3LjVKv6uosspnSk5WPzIxO1a+rq2611dGSUg+QWC/raOk\nsMpqRTo2KB4eLFW2qrLI0dHj3lAxLDfkr6WovlQ9PVreVjcwOmu4rK/HW0VFT1VEQVvBrKGl\ntMtPPDowIRwkOsapqbzla1hh7kQvMk27p6Gs1j4zN1JxRTc6S8uvrLnZVkRHSz04R8uuoqKs\nutNHNy0fGh84wKiks9l9XUpDNCouXbGkn6rORDo5Qj84N0fKubCvw+x2U0ZBOjNCw6qgo629\n0E44Kh0YHTi7p6W10tndUT0vKS/braSkrs1hUEY7MS40abmwr7LC1NZnPjIsLkW8qqKkrbjL\nSjElGxkhTrKnqLnNx8xHLygoO7mnp6y6zMTHTjEpKTbNs7O0usa/vng5LisvV7mpoqWrssVG\nLR8YGSXeq6Wqt7+91jcmIShTrqars7q7tsQ9KCUrQMa6ubSytbjITjkzLzRNvaegoqmy0jgl\nGhYaKsirpqqtrbNeKx8fLOKwrK2urKy9RjAmKzRE7sCzq62yxOVNPTAuNF2ypaSmqbF8LB4W\nFx84yK6pqKSltTslHyQ17cGzq6emqsY3KiorLjpVvqqorrW91U0zKCk7waypp6Oiq2EnGhUZ\nIzhguaifnaTKMScmKy84WbenoqWtwVs9LiQkLUa8rbCvqKm4Ui4oLT/qx7Gjnp+qVSgcGBkg\nJi3cqp6corntTjUqJik5y7Sxrampr8Q8KisuNTtB47CmqLPNX0w8NjxWy7CqrLG/XzQjHiQq\nKjJGxauor7W4vMLrSEBMV01GR2bPxc//38bH2vV13MvWXlNMSUhKVe3azcjK1fD97ev48N/W\n0dbuV01KREA+Pkhbdufb2t1pV1974tHMzMnHy9Heb11SSERMX+LOxsHBwcXZYFtdaf7p3djQ\n22pSSUM/PT0+RE9ke+fb1OFrbf/x4tLJw8DEydT+Wk9GQUVPbtvIv76/xc/ib1dSWnPq3NTf\n+/VqVklDRkhISU9e/+Xj8X14YFVRWuXRy8fHxsfSf15STEpKWXnbzszNdM3GQ2O+ztDYy73C\nydlbWFxCNzc0OUA6OU3t3czb2by9y8S/wMDaXG9YSko9P1JYW1xhy8bT1s2/xM7OzMDI383C\nw77n59E9MDEwKCgpLU1OWL6vrKyvr625+k5HPzowM0JHUeDRv8XKv8nZ82psWVBa8djcybq7\nu7a5tbvzaz0sKCgpISYvPOLjuqmlqayutclCNzY1LzJAWdjMxbe3vLzGzNhaTUdEQUxWec6/\nt7q4tLi8yGNdPCsoKSwhJzU929u4qaaqqqy2z0NAPDQvNEpHRdPTvcfJsL/Z19rrTUNW71FZ\nzb6/yry1vMHM0O47LystKyIpNzZL4rqsra2pqrXA3GI+MzI2NTdDSNTc2b25uce9wc7jZdrz\nXGLb39jLysHHxL7M31pANi8sLSkrNTdLacK1rq2srLG4x+tLPzg2OTw5P1tj4NLJu8PDvMPF\nzdrae2x8bHnY3uPKycfD29LtQ0Q2NTQmMTAzQ0rLvbi1rK6yub/KYUlFQDc3OjhBSGPTycG6\nsru6ucLI3vhxV0lOU1RlWdjQ0r7Gwcj9Wjw5OCotMCw2O1rJv7etrK+wtrvOXUk+NC83OTRK\nYd/EvrWwsbezu83YV0U9Oz4/QFH9/Ma9u7S7ubzbWjg9MyEsKiozNV/Lvrapqq2utbzoSUA6\nLyw1OjhVzrq3sq2trbm8yE9GOzc1Mzg+QlbMwb21r6+1rrnNz0QvKTAkHi4mNj1NubKuraWs\ntLzJbTw0ODgxOF7d0ruxrq+3tLzc9EM4NjEyOTdBderGuLawrrO3tMPIv0ZGQS0nLzYdLjEu\nXkPEs6+7rKq9v8fhTTw9TU9A6cXOubu6tcbPy2A/Qz00ODc9TVbWu7u4r7O3uL3J3mlbYks9\nSjwwKz4zIT80P1ZbvLW0vqyvxcnIfUlESWfzUdW9wcvCv8z7XN1HODw8Q0FF4cnJvLW1uL7F\ny/JPT09GTd5qbXJJPy1MNh8+MTtNUcG4rryuqb3NxO9NS0dP22Z7w7/IyMXK5E1RWj46PkxR\nROLGv73Hu7vUet/eSElqY/nMxcrUWjssPDYdLzc3T2q4sKmxtKm5WnBSPDg+SN3GzrywtL6/\nxGE/Pjw1ODY+3X3ku7O2wMHD0lhFTElETWnbysi8vl9ENio1LR8uP1bju6yqpa24ssg+ODg2\nOU19v6+xtrC11Ew9My8wLjpTXci7s7G5vMvaY0dBQkNDT+LOy8S9vL3O4EQtKSs0JidB6b2+\ntaqmq8nnz0kzLztb1MW7raq1ydRiOy8uMT1Mf8y5srvCxdtOPTw+REpS3sfCwL+9xNTa2ndO\nQS0mNEMuLULJtbi+t6ut5UNZVz43PHa6sru3rrXsQT47OTc0SMW/x8W9wd9VPkBLR034zcnD\nv8nMzPlZXmLt2u0/ODsvNTgvOGG/u7mxs7O5ZkVKS0A/Y8i4sLW8v9ZHOTU1OkVQ27y5vMDJ\n5kpGPz9Pft3MxMjMz+ZaUlhaXP7PwsrW0XIyIy8+MTA30q6prbu1rsJINDM/T1JRza6stcdr\ncFs8MDZZ1tTKvri83k1BPT89PU3WxMPGxcTI31ldcOHO1WtCPDQrNDs0PuS5sK6vvMLGTzgz\nOUhdzb62ra+94ExBOzk5QP3Hube+ws9pRjUzPlNn7cu9u7/YV01OSkdNXdm+ubvK6l84JSY1\nPUBF3rSopbTY2uRIMiwyUbywtLKsrbpXNC0wODo/Y8C0srvXVEtIQDs8VMi8vszW0NVzSENN\n/Me+vsZNOTErMjMwOnm0q6yzxM3OTTcxOFjGuLW1rq66bzkyMzlAR1fNtrG2ylhIQT04N0bf\nxb7BytXU40s+QVjUx8bDu7e+YUA1JCMzO0NXz7ispazQWUxDQDk1PM+uq660vsnpQzArMkvY\nxcG/vLvISTU1PUdRYd/DtrfE3W5eVFFWZ9O/wHQ7LysxPDg5SsWuqau63nxlSj86PVvAsa+y\nucbaWT0zLzZO3svFvbm7yVA7NzpBTGzYyb67wc94WlFRYmt12cK6usZULSQoLjg/QFO+qaSq\nue9EQ0Y8NDhWvayoq7bIa0Q4My80StC9trfD61tNPzk6PlzLvru+w8bN3ldJWPXNzU48Mi03\nPj0+RNu4ray412RPTlBHP0XduK2rss5hT0VAOjU2Rdm8ub3N+9/lXUpAQ1jVyMjJy83Jy99u\nYmzfzl04MCstOD0/P1HMt6ytutFeSk9bVUtN58Cxq6++50tAQT45OT9fyru5xNN3VFRRS0hP\n7cu9uLzEy9DRzuc/Mi0nKTU7Pk/sxLOsrr3WTjxES01QZtS+r6uvu9dLP0I/PT5BSem9ub7I\nckhJWmhy/+zQv7u+wc/w9d3oTjwzKikzOT9UVXzLuLO4vNxCQklPdOfezr20s7W/aUhDQENL\nS0tmy7+8vtRfWVBUZHZ53snAvsDK229mcP9lSjwwKy42PUVESF7Pvbq9zGpbZuzY1dTQyL66\nub/dXlNPVltfYGfl2MrG0HtXUFRl6trSycbGx8rSfmBVSktRVzstLS42S0dKT1vbyb3Aztlw\n7cnHyMvPzcO7vcfbY1BPYvt1emVu1szN22Jaa93KyszZ69bddmRUT1NOS01fcX1cPDIwMzpD\nRkhPa9vIv8TMzs7KxcXJ1dXKwLzBz3ZWWvDX1t79dOTa1952fm312dLV62RXVFliVEQ/Q1Rz\n7PxeS0NAPkRIRUdKUWvo3dzV08zGx9DNztDEw8XExcrP0tnf6nxy6trc3ud6eezq5d3u/v5j\nWk9MTEdCQUZLT2doTlBLQ0xPXGteYGL37v7m5dvMx8bKzdPPzMjHycvV297m4+Dh6PTm1tLc\n8HF17fNpYlBMUlhVTkxNTkxMTU9ZXl1YT1ZgWlxeX3ZxWlzz6t7RzczMzc3Pz8zIyMrOz9bf\n7PLs4Nva3/h9/ndmYl9p9G1dWE1NUVlRR0hLU2pkW1FOavTn43x07OD9am1ea3d63Nrd3uTa\n2NXN19nU5OHf2NPc5O3j29rk+/rw8OtsZ+7sbVpOTlVYYlhTT1FcVFZTVllb8vh1+FtY9+zZ\n2/Tm6tTM0tft7N7t3t7l8Wnk29/X7+fa3tnnevNye35pZFxwe2ZqZ15laHBwaPpfWl9VXFxb\nXWVq/31mZ3vj5+Tp8eXd6fn77Oh67+/s3ODi/+/c2d3q+vTs5NvibV9hXmX98WxeYG958/Py\nb2Fu+n5uX1pt4+v0c2pkXvTpeWhs8m187u77bHj77uHb3un35Of/8nt16/f+4Nzu+3v64vJy\nb19u5+v4Yl5iYXV9Z/pzZGpme39xaHXo2NbraWp97O/h6F1eXOne9OZld+Hl6WNh9/n5dvDu\n7Wleb2lsbvPl3f9g8+/n4ul9+ujl7ebv7PBvfPnk/mlfWmZofnxlZ3bg73X/d/rx73JqaPvc\n7l5uc3zd4fDxX11x5t13YV1o4NHbd1xceuLj73FhZ2vx43lkX2H14+j7b3X46O58/O7r7/N3\na/rxcHB3dnBraG949PVw+Pj46PZ0b2xy9+r4aHr08uX3be7n7P586ft8bmJqdmlpe+rr+n50\n+Ozo7f5td3fu5Pd6Z3jg5e1zd/70/H10+eHn8355bW5sbWVfZHbj7X1sYPzt4+NzXmL23d3u\naG7/++Dye3NobHTr7Wxid/To9mtoa/rp7vdvdPP0+f16a+/e4Phtf/bt5Ppval577+l4XmJy\n5exxYWP95u19Z3jm/fLucGh17eLvcfx37urn6WptcnXr6PRtbGl23+l0Xmd8ev1wa/Pj3fNu\n/uTc9mJl+vdx+HxjZmd96u95euTj7vL4e3R4cWxkc3Bt+f3xemr64+Xs8Ph8bvbk6vNkYfLe\n2+xxd/DZ3nhaWnnp/WNZWmr69nptbvrpeP7zc+/o7HttbPvtcnB87ubp+Xn18PV+aP7j8vR9\nevLt8Gx4enHq6nlfXWpw6+32eXP88PlmZHDr5/j98P3m6HhzZ2VhanNze3rv5uVxZPHe6ur7\na3vt7+ztb3ru3+n4dG3t6vVpZW747G5pfe11YW/1amN3d+75bXRy6uPt63Nwdnh8dXN96+nt\neXzq4uP5Z2Lt3un9aWZ87Xlrce/z8+55ev7+7n12bV1jaGRpb/Dp3uP/7O/9729eXmBtaGty\n+efm9/7u8OTb53RreOXje2lv+eLc53hs+ev3cW1rbXT9/XJvd35rbW1x9+9+aWVy+ff48Onx\n5/Jy7/FsaPv0bW5scfD3fHpua3b1/XJpZ3rj4OLm6v978O7t6+n1bWjz7/h+cmlhd+Li/mtt\n+PhqXF9peHdsZWR+5+brdmj95+XvaV9z4tne7fHu6/X17Xtoav1vaHn3fHJ0+O/w3+xvcmtx\ndnZv+e58cvz4/Hx4fXxucO7udX3o6HptbvzpemJsbXr0e3x59/P5++vreHVs+O747vRyYWF0\n5+l+a2fz2dne8mduefLz/HFaXHHm7HNlceTf+XBobnj++Hvw+v7k4/toc+3u73pqfu/3b3f9\nd/ptcv/77P3o5vt59+r19nVpeH58+fNnYHb46+58aGx8e/Xq5fF6fGx+8X19bGvq3ut9a3b5\ndf1uaHbr9m5kbObf3ehwZ3Tr4e9mZGlnfPLz925mb+fk7/1z8PDm5vhxZXJ67OX6enn27ejv\nbv51Y3Px7/Z0ZPrmfWFv6uzk7HFgbHvs4Ph4dvTt7/d2/ez3cXJpYn7scmtrffTy7Xdv+/Rx\nZ2Vgeujh4/d6ffb47N/g/W7s6/jvbmt3d37s8mtmbXVqZF5veW7y8fX9fnj9/3X8e2hu6uXu\nf3nu3dnd7n745t70Z11fcH72emRmc+zkdF9j+Of9Y11m693k9Pbu/W57c29vbe3k9G586eXu\ndmj27Pj3dmpv/XhpYWdq/ert+Pp97+rr7e/l6/r9/P5ybHFt+/psb3p2eHj39floXnTwe2tn\na/Xe5HVpbPjf3ex3b/Th5uvt7OzveHFkX3J3bG5nX23r9Wx49eTe6nhuce3p5ettbHHv6Or2\naWt0dH13enp3dnns3u1+d2Ji9OtwYl9p++Ln/3Jt/d/f7nVlavDg8GlsfO/t9Xh48ebvbWls\nen5+f3r739nmbWdqdup5W1lj+evv7ffz5+Dj6ejvcGVpZ2dnevx9/OfjfP3r+nptaXB8+nht\ncOrf3OPvd23l5fhuYWn97PhuYWl+cmhofe7s6H9naXvvdG508N/iemNv6uLm92lu9O75aXDu\n7Pnz8fJ6e+78aWdpZ2hseObl9mxq+fPw625odXvr8/Pr7ev67e/y6O9vZHXo5+9sY/7n/29o\nZmz79HxoaW1z9/H48+v4enf06+rsfXH67nZtfeDf7f93am/u7X1qY3z5dX558u7rfW1vbfni\n+Glu/u70eWt06+HubWtz+HdqYWX/9/R2anjf2uJ9bW754vZkZm956ej29e3s+fH+bvHp9Gtd\nZHHs9WxrcvTx8P5vdu/q/npzb/11dP35+Ojg8HZ3efn27nhoeHx3+Xtu9OXxdnNu+e75d2Zv\n7ejuZ2n64un+92559e90Zvvr6v1oZH7n7v5tYHHo5vpkX2/r5v9tffjz5OR2cPbt+Hh39ufk\n3+tsePf7cV5ZYHbx/2Rk9+rq7Xt68+Tqe3J09PnvfWxvcvHr8PTv8/fz9+7udmZiaGlsbXN+\n8eXf8XR/a2hqdHt//X34/Hrq4eDr+/Pz7ux5bHf6cP31eHZ6cGt7cmRt+351dHj363hw/nV1\neOno7/Lz6OPf6ezw7/l5eWxubWRga3rs6PHz7fd9+/53dm5nZmty+Hhofevk5u337eXv+HNp\neXFnYGhy/Ozq9urj5OTsc2lqbXdtb3p9dWtw+f7v5vl18O3s73toX237+nxvZ2d0dnx++fP+\n7+/t7O709H1u/nhzfHBpfObf5e7r7vbv/2puf29qaWN16uzyfHt5+/J1avt9bXVsYv7s/fn7\n8+/p6/R9cHj78X1u9PB99f178f/5a2d3b291/Hn69/Xy73Vt7vDu/ffxfv1sbPj+c3J3ffpz\ndnz29m9ua292cH3s7fH6++Pp+ff7b3V0cXn78/Tq6nj27Hh37/B8bm93cG1sefv6/O9+fO7o\n6vxzbv/ofGlzcvvu739tfX/+fvHt/PH49n147uL+Z2VnbH1/bml57efg6vr7en51fO7s/Hp7\nd/fv7uPu/fH0fXf9fGdveGllZnr3c21uee3zbvl9df7+e3jl6uXh7fb17OzrfGpx7/Q=\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<nl>\nFinally, just for fun, here's what my mail-reply window looked like while comp=\nosing the message you are now reading:<nl>\n<nl>\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: image/x-xwd\nContent-Description: Reply-in-progress picture\nContent-Transfer-Encoding: quoted-printable\n\n=00=00=00k=00=00=00=07=00=00=00=02=00=00=00=08=00=00=02=9D=00=00=01=A7=00=\n=00=00=00=00=00=00=01=00=00=00 =00=00=00=01=00=00=00 =00=00=00=08=00=00=02=\n=A0=00=00=00=03=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=08=00=00=01=00=\n=00=00=01=00=00=00=02=99=00=00=01=A3=00=00=01=E0=00=00=00=00=00=00=00=02x=\nwdump=00=00=00=00=00=FF=FF=FF=FF=FF=FF=07=00=00=00=00=01=00=00=00=00=00=00=\n=07=00=00=00=00=02=FF=FF=FF=FF=E0=E0=07=00=00=00=00=03=00=00=00=00=FF=FF=07=\n=00=00=00=00=04=92=92=92=92UU=07=00=00=00=00=05=B6=B6=92=92=AA=AA=07=00=00=\n=00=00=06=B6=B6=B6=B6=AA=AA=07=00=00=00=00=07=B6=B6=90=90UU=07=00=00=00=00=\n=08=92=92=92=92=AA=AA=07=00=00=00=00\t=DB=DB=B5=B5=AA=AA=07=00=00=00=00\n=B6=B6kkUU=07=00=00=00=00=0B=DB=DB=DB=DB=AA=AA=07=00=00=00=00=0C=B6=B6=B6=\n=B6UU=07=00=00=00=00=0D=92=92llUU=07=00=00=00=00=0EmmmmUU=07=00=00=00=00=0F=\n=B6=B6=DB=DB=AA=AA=07=00=00=00=00=10=DA=DA=DA=DA=FE=FE=07=00=00=00=00=11=FE=\n=FE=D9=D9=A9=A9=07=00=00=00=00=12=FE=FE=DA=DA=FE=FE=07=00=00=00=00=13=FE=FE=\n=FE=FE=FE=FE=07=00=00=00=00=14=DB=DB=B5=B5UU=07=00=00=00=00=15=92=92kk=00=\n=00=07=00=00=00=00=16mmHH=00=00=07=00=00=00=00=17mmIITT=07=00=00=00=00=18=\nIIII=00=00=07=00=00=00=00=19HH$$UU=07=00=00=00=00=1AII##=00=00=07=00=00=00=\n=00=1Bmm\"\"=00=00=07=00=00=00=00=1C=92=92IIUU=07=00=00=00=00=1D=B5=B5=DA=DA=\n=FE=FE=07=00=00=00=00=1EIIIIUU=07=00=00=00=00=1F=D9=D9=B5=B5=FE=FE=07=00=00=\n=00=00 =92=92=B6=B6=AA=AA=07=00=00=00=00!llll=AA=AA=07=00=00=00=00\"=91=91=\nll=AA=AA=07=00=00=00=00#ll=92=92=AA=AA=07=00=00=00=00$=B5=B5=B5=B5=FE=FE=07=\n=00=00=00=00%=DA=DA=FE=FE=FE=FE=07=00=00=00=00&=B5=B5=FE=FE=FE=FE=07=00=00=\n=00=00'=91=91=B5=B5=FE=FE=07=00=00=00=00(mmmm=00=00=07=00=00=00=00)$$$$=00=\n=00=07=00=00=00=00*mm$$UU=07=00=00=00=00+mm=92=92UU=07=00=00=00=00,=DB=DB=\n=92=92=AA=AA=07=00=00=00=00-IImmUU=07=00=00=00=00.=FE=FE=FE=FE=A9=A9=07=00=\n=00=00=00/=FE=FE=B4=B4=A9=A9=07=00=00=00=000=92=92II=00=00=07=00=00=00=00=\n1$$II=00=00=07=00=00=00=002$$IIUU=07=00=00=00=003=DB=DB=91=91UU=07=00=00=00=\n=004=DA=DA=FE=FE=A9=A9=07=00=00=00=005=92=92=DB=DB=A9=A9=07=00=00=00=006=B6=\n=B6mm=AB=AB=07=00=00=00=007=92=92=92=92=00=00=07=00=00=00=008II=00=00=00=00=\n=07=00=00=00=009$$=00=00=00=00=07=00=00=00=00:IIII=AA=AA=07=00=00=00=00;=91=\n=91II=AA=AA=07=00=00=00=00<$$$$UU=07=00=00=00=00=3Dmm=92=92=00=00=07=00=00=\n=00=00>IInn=AA=AA=07=00=00=00=00?JJmm=00=00=07=00=00=00=00@=92=92=B6=B6UU=\n=07=00=00=00=00A=B6=B6jj=00=00=07=00=00=00=00B=FE=FE=B4=B4TT=07=00=00=00=00=\nC=B6=B6=91=91=00=00=07=00=00=00=00D=B3=B3=91=91=FE=FE=07=00=00=00=00E=D9=D9=\n=91=91=FE=FE=07=00=00=00=00FllII=AA=AA=07=00=00=00=00G=FE=FE=B5=B5=FE=FE=07=\n=00=00=00=00H=DB=DB=DB=DBUU=07=00=00=00=00I=91=91=DB=DB=FE=FE=07=00=00=00=\n=00J##=00=00UU=07=00=00=00=00K=DB=DBkkUU=07=00=00=00=00L=92=92\"\"=00=00=07=\n=00=00=00=00M=FE=FE=D9=D9TT=07=00=00=00=00N=DB=DB=B2=B2=00=00=07=00=00=00=\n=00O=91=91=91=91=FE=FE=07=00=00=00=00P=B6=B6=B6=B6=00=00=07=00=00=00=00QH=\nH=00=00UU=07=00=00=00=00R=DB=DB=92=92=00=00=07=00=00=00=00S=DB=DBii=00=00=\n=07=00=00=00=00T=FE=FE=91=91=AA=AA=07=00=00=00=00U=B6=B6IIUU=07=00=00=00=00=\nV=FE=FE=D7=D7=00=00=07=00=00=00=00W=B6=B6HH=00=00=07=00=00=00=00X=00=00$$=\n=00=00=07=00=00=00=00Y=B7=B7=DB=DBUU=07=00=00=00=00Zmm=00=00=00=00=07=00=00=\n=00=00[=00=00$$UU=07=00=00=00=00\\=00=00=00=00UU=07=00=00=00=00]=92=92##UU=\n=07=00=00=00=00^=FE=FE=91=91=FE=FE=07=00=00=00=00_mm=B6=B6=A9=A9=07=00=00=\n=00=00`=DB=DBmm=AB=AB=07=00=00=00=00a=B6=B6II=AB=AB=07=00=00=00=00b=94=94=\n=B6=B6=00=00=07=00=00=00=00c=00=00II=00=00=07=00=00=00=00d=FE=FE=8F=8FTT=07=\n=00=00=00=00eII=92=92=00=00=07=00=00=00=00f=B6=B6=DB=DB=00=00=07=00=00=00=\n=00g=FE=FEll=AB=AB=07=00=00=00=00hII=92=92SS=07=00=00=00=00i=B6=B6!!=00=00=\n=07=00=00=00=00j=92=92=00=00=00=00=07=00=00=00=00k=DB=DBIIUU=07=00=00=00=00=\nl=B6=B6=FE=FE=A9=A9=07=00=00=00=00m=DB=DBHH=00=00=07=00=00=00=00n=FE=FE=8F=\n=8F=00=00=07=00=00=00=00o=00=00=FF=FF=00=00=07=00=00=00=00p=A8=A8=A8=A8=A8=\n=A8=07=00=00=00=00q=FF=FF=00=00=00=00=07=00=00=00=00r=D3=D3=D3=D3=D3=D3=07=\n=00=00=00=00s=00=00=E6=E6=19=19=07=00=00=00=00t=00=00=7F=7F=7F=7F=07=00=00=\n=00=00u=00=00=BF=BF??=07=00=00=00=00v``````=07=00=00=00=00w=FF=FF=C0=C0=CB=\n=CB=07=00=00=00=00x=E6=E6=AD=AD=D1=D1=07=00=00=00=00y=7F=7F``=E5=E5=07=00=\n=00=00=00z=00=00=00=00=80=80=07=00=00=00=00{=F5=F5=DE=DE=B3=B3=07=00=00=00=\n=00|=DD=DD=C8=C8=AE=AE=07=00=00=00=00}zzoo=9A=9A=07=00=00=00=00~=B8=B8=A7=\n=A7=A6=A6=07=00=00=00=00=7F=98=98=FB=FB=98=98=07=00=00=00=00=80=00=00=B9=B9=\n=00=00=07=00=00=00=00=81=89=89=E2=E2=A2=A2=07=00=00=00=00=82LL}}=C8=C8=07=\n=00=00=00=00=83rr=BC=BC=B0=B0=07=00=00=00=00=84LL}}LL=07=00=00=00=00=85=89=\n=89=E2=E2=89=89=07=00=00=00=00=86rr=BC=BCrr=07=00=00=00=00=87=89=89=E2=E2=\n=98=98=07=00=00=00=00=88rr=BC=BC=98=98=07=00=00=00=00=89=89=89=E2=E2=96=96=\n=07=00=00=00=00=8ALL}}=8B=8B=07=00=00=00=00=8Brr=BC=BC=92=92=07=00=00=00=00=\n=8C=00=00=00=00=F7=F7=07=00=00=00=00=8D=BF=BF=BF=BF=BF=BF=07=00=00=00=00=8E=\n=BF=BF=90=90=D8=D8=07=00=00=00=00=8F??????=07=00=00=00=00=90=7F=7F=7F=7F=7F=\n=7F=07=00=00=00=00=91rr=BC=BC=81=81=07=00=00=00=00=92LL}}=CC=CC=07=00=00=00=\n=00=93rr=BC=BC=B2=B2=07=00=00=00=00=94=F7=F7=E8=E8=00=00=07=00=00=00=00=95=\n=89=89=E2=E2=99=99=07=00=00=00=00=96LL}}=9C=9C=07=00=00=00=00=97rr=BC=BC=9A=\n=9A=07=00=00=00=00=98LL}}=8C=8C=07=00=00=00=00=99=00=00=00=00=81=81=07=00=\n=00=00=00=9A=F7=F7=EB=EB=00=00=07=00=00=00=00=9B=89=89=E2=E2=8B=8B=07=00=00=\n=00=00=9CLL}}WW=07=00=00=00=00=9Drr=BC=BCww=07=00=00=00=00=9Err=BC=BC=B1=B1=\n=07=00=00=00=00=9FLL}}XX=07=00=00=00=00=A0rr=BC=BCxx=07=00=00=00=00=A1=DC=\n=DC=FE=FE=00=00=07=00=00=00=00=A2=DB=DB=DB=DB=00=00=07=00=00=00=00=A3=DC=DC=\n=FE=FETT=07=00=00=00=00=A4=FE=FEHHTT=07=00=00=00=00=A5=FE=FE##VV=07=00=00=\n=00=00=A6=DB=DB$$WW=07=00=00=00=00=A7=B6=B6=00=00WW=07=00=00=00=00=A8=92=92=\n=00=00UU=07=00=00=00=00=A9=FE=FEGG=00=00=07=00=00=00=00=AA=FE=FE!!=00=00=07=\n=00=00=00=00=AB=DB=DB  =00=00=07=00=00=00=00=AC=B6=B6=00=00=00=00=07=00=00=\n=00=00=AD=DB=DB=00=00=00=00=07=00=00=00=00=AE=DB=DBII=AA=AA=07=00=00=00=00=\n=AF=FE=FEkkTT=07=00=00=00=00=B0=B6=B6$$WW=07=00=00=00=00=B1=FE=FEii=00=00=\n=07=00=00=00=00=B2mm=00=00UU=07=00=00=00=00=B3=FE=FE##=AA=AA=07=00=00=00=00=\n=B4=FE=FEHH=A9=A9=07=00=00=00=00=B5$$mm=00=00=07=00=00=00=00=B6$$mmTT=07=00=\n=00=00=00=B7=00=00IIUU=07=00=00=00=00=B8=DB=DB=00=00WW=07=00=00=00=00=B9=00=\n=00=00=00=00=00=07=00=00=00=00=BA=00=00=00=00=00=00=07=00=00=00=00=BB=00=00=\n=00=00=00=00=07=00=00=00=00=BC=00=00=00=00=00=00=07=00=00=00=00=BD=00=00=00=\n=00=00=00=07=00=00=00=00=BE=00=00=00=00=00=00=07=00=00=00=00=BF=00=00=00=00=\n=00=00=07=00=00=00=00=C0=00=00=00=00=00=00=07=00=00=00=00=C1=00=00=00=00=00=\n=00=07=00=00=00=00=C2=00=00=00=00=00=00=07=00=00=00=00=C3=00=00=00=00=00=00=\n=07=00=00=00=00=C4=00=00=00=00=00=00=07=00=00=00=00=C5=00=00=00=00=00=00=07=\n=00=00=00=00=C6=00=00=00=00=00=00=07=00=00=00=00=C7=00=00=00=00=00=00=07=00=\n=00=00=00=C8=00=00=00=00=00=00=07=00=00=00=00=C9=00=00=00=00=00=00=07=00=00=\n=00=00=CA=00=00=00=00=00=00=07=00=00=00=00=CB=00=00=00=00=00=00=07=00=00=00=\n=00=CC=00=00=00=00=00=00=07=00=00=00=00=CD=00=00=00=00=00=00=07=00=00=00=00=\n=CE=00=00=00=00=00=00=07=00=00=00=00=CF=00=00=00=00=00=00=07=00=00=00=00=D0=\n=00=00=00=00=00=00=07=00=00=00=00=D1=00=00=00=00=00=00=07=00=00=00=00=D2=00=\n=00=00=00=00=00=07=00=00=00=00=D3=00=00=00=00=00=00=07=00=00=00=00=D4=00=00=\n=00=00=00=00=07=00=00=00=00=D5=00=00=00=00=00=00=07=00=00=00=00=D6=00=00=00=\n=00=00=00=07=00=00=00=00=D7=00=00=00=00=00=00=07=00=00=00=00=D8=00=00=00=00=\n=00=00=07=00=00=00=00=D9=00=00=00=00=00=00=07=00=00=00=00=DA=00=00=00=00=00=\n=00=07=00=00=00=00=DB=00=00=00=00=00=00=07=00=00=00=00=DC=00=00=00=00=00=00=\n=07=00=00=00=00=DD=00=00=00=00=00=00=07=00=00=00=00=DE=00=00=00=00=00=00=07=\n=00=00=00=00=DF=00=00=00=00=00=00=07=00=00=00=00=E0=00=00=00=00=00=00=07=00=\n=00=00=00=E1=00=00=00=00=00=00=07=00=00=00=00=E2=00=00=00=00=00=00=07=00=00=\n=00=00=E3=00=00=00=00=00=00=07=00=00=00=00=E4=00=00=00=00=00=00=07=00=00=00=\n=00=E5=00=00=00=00=00=00=07=00=00=00=00=E6=00=00=00=00=00=00=07=00=00=00=00=\n=E7=00=00=00=00=00=00=07=00=00=00=00=E8=00=00=00=00=00=00=07=00=00=00=00=E9=\n=00=00=00=00=00=00=07=00=00=00=00=EA=00=00=00=00=00=00=07=00=00=00=00=EB=00=\n=00=00=00=00=00=07=00=00=00=00=EC=00=00=00=00=00=00=07=00=00=00=00=ED=00=00=\n=00=00=00=00=07=00=00=00=00=EE=00=00=00=00=00=00=07=00=00=00=00=EF=00=00=00=\n=00=00=00=07=00=00=00=00=F0=00=00=00=00=00=00=07=00=00=00=00=F1=00=00=00=00=\n=00=00=07=00=00=00=00=F2=00=00=00=00=00=00=07=00=00=00=00=F3=00=00=00=00=00=\n=00=07=00=00=00=00=F4=00=00=00=00=00=00=07=00=00=00=00=F5=00=00=00=00=00=00=\n=07=00=00=00=00=F6=00=00=00=00=00=00=07=00=00=00=00=F7=00=00=00=00=00=00=07=\n=00=00=00=00=F8=00=00=00=00=00=00=07=00=00=00=00=F9=00=00=00=00=00=00=07=00=\n=00=00=00=FA=00=00=00=00=00=00=07=00=00=00=00=FB=00=00=00=00=00=00=07=00=00=\n=00=00=FC=00=00=00=00=00=00=07=00=00=00=00=FD=00=00=00=00=00=00=07=00=00=00=\n=00=FE=00=00=00=00=00=00=07=00=00=00=00=FF=00=00=00=00=00=00=07=00=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01{{{=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01{{{=01=01=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=01=01{{{=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=\n=01{{{=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01{{{=01=01=00=\n=00=00=01=01=01=01=01=01=01=01=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=\n=01=01=01=01=01=01=01=01=01=01=01=00=00=00=01=017=1Dd=01=01=00=00=00=01=00=\n=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=\n=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=\n=01=00=00=01=00=00=01=00=00=00=01=01 =00 =01=01=00=00=00=01=00=01=01=00=00=\n=00=00=01=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=00=\n=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=\n=00=00=01=00=00=00=01=01=00=00=00=01=01=00=00=00=01=00=00=01=01=00=00=01=00=\n=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=00=00=01=\n=00=00=00=01=01=FF=01=01=01=01=00=00=00=01=00=00=00=01=01=00=01=00=00=01=00=\n=00=00=00=00=00=00=00=01=01=00=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=\n=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=00=00=00=\n=01=01=01=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=01=01=01=00=00=01=00=\n=01=01=00=00=00=01=01=01=01=00=00=00=00=00=00=00=01=00=00=00=00=00=00=01=01=\n=01=00=00=01=01=00=01=00=00=01=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=\n=00=00=00=01=01=00=00=00=01=00=01=01=00=00=00=01=01=01=00=00=00=00=00=00=00=\n=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=00=00=00=00=00=01=01=01=01=01=00=00=01=00=00=01=00=00=00=\n=01=016=E8T=01=01=00=00=00=01=00=00=00=01=00=00=00=00=00=01=00=00=00=00=00=\n=00=00=00=01=00=01=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=\n=01=00=00=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=\n=00=01=01=01=01=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=01=00=00=01=00=\n=01=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=01=\n=00=01=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=\n=01=00=00=00=01=01=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=00=00=00=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=\n=00=00=00=00=00=00=00=01=00=00=00=00=00=00=01=00=00=01=00=00=00=01=01=00=00=\n-=01=01=00=00=00=01=00=00=01=00=01=01=00=00=00=01=00=00=00=00=00=00=00=00=\n=01=00=01=00=01=00=01=01=01=01=01=00=00=01=01=00=00=00=00=01=01=00=00=00=00=\n=01=01=01=01=00=01=00=00=00=01=00=01=01=01=01=01=00=00=01=01=00=00=00=00=00=\n=00=00=00=00=00=01=01=00=00=00=01=01=01=01=01=00=01=00=00=00=01=00=01=00=00=\n=00=01=00=00=00=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=01=01=00=00=00=00=00=01=00=00=\n=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=00=00=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=\n=00=00=00=00=01=00=00=00=00=00=00=01=00=00=01=00=00=00=01=01=02=A4=1C=01=01=\n=00=00=00=01=00=00=01=00=00=01=01=00=00=01=00=00=00=00=00=00=00=00=01=00=01=\n=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=01=00=00=01=00=00=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=\n=00=00=00=00=01=00=00=01=00=00=00=00=00=01=00=00=00=01=00=01=00=00=00=01=00=\n=00=00=00=00=00=00=01=00=00=00=00=00=01=00=00=00=01=00=01=00=01=00=01=00=01=\n=00=00=00=01=00=01=00=00=00=01=00=00=00=00=01=00=00=00=00=01=00=00=00=01=00=\n=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=00=00=00=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=\n=00=01=01=01=01=01=01=01=01=00=00=01=00=00=00=01=01{{{=01=01=00=00=00=01=00=\n=01=00=00=00=00=01=01=00=01=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=\n=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=01=01=\n=01=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=00=01=00=00=00=\n=01=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=00=00=01=00=00=00=00=00=00=\n=00=01=00=00=00=01=00=01=00=00=00=01=00=01=00=01=00=01=00=01=01=01=01=00=00=\n=01=00=00=00=01=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=00=01=00=00=\n=01=01=01=01=00=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=01=00=00=00=\n=00=00=00=00=00=00=01=00=00=00=01=01{{{=01=01=00=00=00=01=00=00=00=00=00=00=\n=00=00=00=01=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=01=01=01=00=00=00=\n=01=01=01=00=00=00=01=01=01=00=00=00=01=01=01=01=00=00=00=00=00=01=00=00=01=\n=01=01=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=01=01=\n=01=00=00=01=00=00=00=01=00=00=01=01=01=01=00=00=00=00=00=00=00=00=01=01=01=\n=00=00=00=01=01=01=00=00=01=00=00=00=01=00=01=00=00=00=00=00=00=01=01=01=00=\n=00=00=01=01=01=00=00=00=01=01=01=00=00=01=00=00=00=01=00=00=00=00=00=01=00=\n=00=00=00=00=00=00=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=00=\n=00=01=00=00=00=01=01{{{=01=01=00=00=00=01=01=01=01=01=01=01=01=01=01=01=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=00=00=00=01=00=00=00=00=00=00=\n=00=00=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=00=00=00=00=00=00=00=01=01=01=01=01=01=01=01=01=01=01=00=00=00=\n=01=01{{{=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=01=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=01=01=01=00=00=00=00=00=00=00=00=00=00=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=\n=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=\n=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=01=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=01{{{=01=01=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=01=017=1Dd=01=01=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\n=00=00=00=00=00=00=00=00=00=00=00=01=01 =00 =01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=00=00=00=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=FF=01=01=01=01||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||z|=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||=01=016=E8T=01=01|||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||}z|||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}=01=01=00=\n=00-=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}z||~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~}}=01=01=02=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~~~~~~~~~=\n~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}|~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~zzz{zzz=\nz{zz{zzzzzzzz{~~~zzzz{zzzz{~~~~~~~~~~~~~~~~~~~~~~~~~zzz{z{~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~{zz{{zz{{z{{zz{zz{zz{~~~{zz{{zz{{{~~~~~~~~~~~~~~~~~~~~~~~=\n~zz{{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~~~~~~~~~~~~~=\n~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~zz{~zz{~z{~{{{zz{zz{~~~~zz{zz{{~~=\n~~~~~~~~~~~~~~~~~~~~~~~zz{{~{z{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{=\n{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~zzz{{z{zz{=\nzzz{zz{zz{~~~~zz{z{{~~~~zzzz{~~zzzz{zzzzz{~~~~zz{~~~{{~zzzz{zzzzz{~zz{~zz=\n{~~~~~~~~~~~~~}}=01=017=1Dd=01=01||~}}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z|=\n|~~~~~~~~~~~~~~{zz{zz{z{{{zz{zz{zz{~~~~zzzz{~~~~zz{{zz{zz{{zz{zz{zz{~~~zz=\n{~~~~~zz{{zz{zz{zz{zz{~z{{~~~~~~~~~~~~~}}=01=01 =00 =01=01||~}}}}}}}}}}}}=\n}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~zz{zz{z{~~zz{zz{zz{~~~~zz{zz{~~~=\nzzzzzz{zzzzzz{zz{zz{~~~zz{~~~~~zz{~zz{zz{zz{zz{~z{~~~~~~~~~~~~~~}}=01=01=00=\n=00=00=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~zzz{z=\nzz{~~zz{zz{zz{~~~~zz{{zz{~~zz{{{{{zz{{{{{zz{zz{~~~zz{~~~~~zz{~zz{zz{zz{{z=\nz{z{~~~~~~~~~~~~~~}}=01=01=FF=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}z||~~~~~~~~~~~~~~~{zz{{z{{~~zz{zz{zz{~~~~zz{~{zz{~zzz{~z{zzz{~z{zz{=\nzz{~~~{zz{~~z{zz{~zz{zz{zz{~zzz{{~~~~~~~~~~~~~~}}=01=016=E8T=01=01||~}}~~=\n~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~z{{~z{~~zzzzzzzzzz{~~zz=\nzz{zzzz{{zzzz{{{zzzz{{zzzz{{~~~~{zzzz{{{zzzz{{zzzz{{~{zz{~~~~~~~~~~~~~~~}=\n}=01=01=00=00-=01=01||~}}~~~~~vvvvvv~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{{{{{=\n{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{zzz{{{zzz{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{zzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~=\n~~~~{{~~{{~~{{{{{{{{{{{~~{{{{{{{{{{~{{{{{~~{{{{{~zz{{{~~~~~~{{{{{~~{{{{{~=\nzz{{{~~~z{{~~~~~~~~~~~~~~~}}=01=01=02=A4=1C=01=01||~}}|||||vvvvv||||||||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{zz{{{{{zz{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{=\n{{z{{z{{{{{z{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~zz{~~~~~~~~~~~~~~~~~~~~~zz{~~~zzz{~~~~~~~~~~~~~~~~}}=01=01{{{=01=01|=\n|~}}|||||vv||||||||}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{zz{{{{{{{z{{{{{{{{{{z{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{z=\n{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzz{~~~~~~~~~~~~~~~~~~~zzzz{~~zz{{~~~~~~~~~~~=\n~~~~~}}=01=01{{{=01=01||~}}||~~~v|||||~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zz{{{{{zzzz{{{z{{{{{zzz{zzz{{zzz{{{zzz{{zzzz{{zzz{{{z{{{zz{z{{z{{{z=\nzz{{zzzz{z{{{{{{zzzz{{{zzz{{{{{{zz{zz{zz{{{{{{{z{{{{zz{{z{{zz{{zz{zzzz{{z=\nzz{{{z{{zz{{{zzz{{{{{{zz{{{{{{{zzz{{zzzz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{}}}}}}}}}}}}}}}}}}=\n}{{{{{}}{{{}}}}}}}}}}}}}}}}}}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{z{{{{{{z{{{z{{z{{z{{zz{{z{{z{{=\n{zz{zz{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{{{zz{z{{{zz{zz{{{{{{z{{zz{zz{{{{{z{{{=\n{{{z{z{{{{z{{{z{{z{{{zz{{z{{z{{z{{{zz{{z{{{{{{zzz{{{{zz{{z{{z{{{zz{zz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{||~}}z|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01{{{=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{{{{{{{{=\nz{{{z{{zz{{{{{{{zz{{z{{{z{{{z{z{{z{{{z{{{z{{zzzzz{{z{{{z{{{{{z{{{z{{z{{{z=\n{{{{{{z{{z{{{z{{{{{z{{{{{{{z{{{{{z{{{z{{z{{{{{{zz{{zzz{{{{{{{zz{{{{{{{{zz=\n{{{{{{zz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z|||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{zz{{zz{{{{{{{{{{z{z{{{{zz{{{{zz{z{{z{{{z{{{z{z{{z{{{z{{{z{{z{{{{{=\n{z{{{z{{{{{zz{{z{{z{{{z{{{{{{z{{z{{{z{{{{{z{{{{{{{z{{{{{z{{{z{{z{{{{zz{z{=\n{z{z{{{{{zz{z{{{{{{{{{{z{{{zz{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{{{{{{{{{z{z{{{{{zz{{z{{{z{{z{{{z=\n{{{z{z{{z{{zz{{z{{{z{{{{{{z{{{z{{{{{{zzz{{{z{{{z{{{{{{z{{z{{{z{{{{{z{{{{{=\n{{z{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{z{{{z{{{{{z{{{{z{{z{{{z{{z{{{z{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01 =00 =01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{zz{{zz{{z{{{{{{=\n{{z{{{{z{{z{{zz{{z{{z{{{zz{zz{zz{{zz{zzz{{{{zz{{{z{z{{{z{{z{{{z{{{{{zz{zz=\n{{z{{{z{{zz{zz{{{{{z{{{{{{{z{{{{{zz{zz{{z{{{zz{{z{{z{{zz{{zz{{z{{{{{zz{{z=\nz{{zz{{z{{z{{{zz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zzzz{{{{zzzz{{{z{{{{{{{zz{{{{zzz{{{{zzz{z{{zz{{zzz{{{z{{{{{{{{{{{{=\n{zzzz{{{zzzzz{z{{{zzzz{{{zzz{{{z{{{z{{z{zz{{{{{{{z{{{{{zzz{{{{{zz{zz{{zz{=\n{zzz{zzzz{{zz{{zzz{z{{{{z{zzz{{{{zzz{z{{zz{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}=\n}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{zz{{{{zz{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{z{{z{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{zzzz{zz{zzzzzzzz{~~~=\n~~zzz{zzzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=016=E8T=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{zz{{=\nzz{{{{{{{{{{z{z{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~{=\nzz{{zz{{z{{zz{zz{zz{~~~~zz{{zz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{zz{{zzz{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~zz{~z{~{{{zz{zz{~~~zz{{~{z{zz{~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~=\n~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{{z{zz{zzz{zz{=\nzz{~~~zz{~~~{{zz{~zzzz{~~zzzz{zz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~{zz{zz{z{{{zz{zz{zz{~~~zz{~~~~~zz{zz{{zz{zz{{zz{zz{z{~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{zz{z{~~zz{zz{zz{~~~zz{~~~~~zz{zzzzzz{{{z=\nzzz{zz{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{zzz{~~zz{zz{zz{~=\n~~zz{~~~~~zz{zz{{{{{zz{{zz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~{zz{{z{{~~zz{zz{zz{~~~{zz{~~z{zz{zzz{~z{zz{~zz{zz{~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{zzz{z{{{{zzzz{{{{{{{{{{=\n{{{zzz{{{{zzzz{{{zzz{{{{zzz{{{{{{{{{{{{{{zzz{{zzzzz{{{zzz{{{zzzzzz{{{zzz{=\n{{{{zzzz{z{{{{{{{{{zzzzzz{{{{{{{{z{{{{{{{{zzzz{{{{{z{zzzzzz{{{{{{zzzz{z{{=\n{zzz{{zzzz{{{{{{{{{{{{{{{zzzz{z{{{{{{{{{zz{{{{{{{zzz{zzz{{zzz{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~z{{~z{~~zzzzzzzzzz{~~~{zzzz{zzzz{zzzz{{{zzz{zzzz=\nz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{=\n{zz{{zz{{{zz{{zz{{{{{{{{{{{zz{zz{{zz{{zz{zz{zz{{zz{zz{{{{{{{{{{{{{{z{{{{z=\n{{zz{z{{{z{{{z{{{zz{z{{{z{{{zz{{{zz{{{{{{{{{{{z{{zz{{{{{{{z{{{{{{{zz{{zz{=\n{{{z{{{z{{zz{{{{zz{{{zz{{{{z{{zz{{zz{{{{{{{{z{{{{zz{{{zz{{{{{{{{{{z{{{{{{=\n{{z{{{z{{z{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{{~~{{~~{{{{{{{{{{{~~~~=\n{{{{{{{{{{{{{{{~~{{{{{{{{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01 =00 =01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{z{{{z{{{z{{{{z{{{z{{{{z{{{{{{{{{{{z{{{z{{z{{{{z{z{{{z{{=\nz{{{z{{{{{{{{{{{{{{z{{{{z{{{z{z{{{z{{{z{{{{z{z{{{z{{{z{{{{{z{{{{{{{{{{{z{=\n{{z{{{{{{z{z{{{{{{z{{{{z{{{{{{{{z{{{z{{{{z{{{{{z{{{{z{{z{{{{z{{{{{{{{z{{{=\n{z{{{{{z{{{{{{{{{{z{{{{{{{{z{{z{{{z{{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{zz{{{{{{z{{{{{{z{{=\n{{{{{{{{{{{{z{{z{{{{z{{{{{z{{{{{{z{{{{{{{{{{{{{{z{{{{z{{{z{{{{{z{{{z{{{zz=\n{{{{{z{{z{{{{{{z{{zzz{zzz{{z{{{z{{{{{{z{z{{{{{z{{{{{{z{{zz{{{z{{{z{{{z{{{=\n{{{z{{{{z{{z{{{{z{{{zzz{zzzz{z{{{{{{z{{zzz{zzz{z{zz{{{{{z{z{{{{{{{{z{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=01=01=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{{z{{{{zzz{{{{z{{{{{{z{{{{{{{{{{{{{zz{{z{{{{z{{{{zz{{{{{zz{{{{{{{{{{=\n{{{{z{{{{z{{zz{{{{z{{{{zzzzz{{{{{z{{{z{{{{{{{{{{z{{{z{{{z{{zz{{{{{z{{{z{{=\n{{z{{{{{{z{{{z{{{z{{zz{{{z{{{{{{{{{{{z{{z{{{{z{{z{{z{{z{{{z{{{{{{{{{{z{{{=\nz{{zz{zz{{{{zz{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}z||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01=\n6=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zzzzzzz{{{z{{{{{z{{{{{{zz{{{z{{{{{{z{{{{{{{{{{{{{z{{{z{{{{z=\n{{{{z{{{{{{z{{{{{{{{{{{{{{{z{{{{zzzz{{{{z{{{{{z{{{zz{{{z{{{{z{{{{zzzz{{z{=\n{{z{{{zzzz{{{{{{z{{{z{{{{z{{{{{{z{{{z{{{zzzz{{{{z{{{{zzzz{{{z{{z{{{{z{{zz=\n{{{{z{{{z{{{{zzzz{{z{{{z{{z{{{z{{{{z{z{{{{{{z{{{zzzzzzz{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z|}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{z{{z{{{=\n{{{z{{zzzzzzz{{{z{{{{z{{{{z{{{z{{{{{{z{{{{{zzzzzzz{{{{z{{{{z{{{{{{{z{{{{{=\nz{{{{z{{{z{{{{z{{{{{{z{{{{z{z{{{{z{{z{{{{{{zzzzz{{{{z{{{{{{z{{{z{{{z{{z{{=\n{{z{{{{{{z{{{{z{{z{{{{z{{{zz{{{z{{{z{{{{{{z{{{{z{z{{{z{{{z{{{{z{{z{{{{{z{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}z|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||=01=01=02=A4=1C=01=01||~}}|=\n|~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz=\nzzzz{{{{{{{{{z{{{z{{{{z{{{z{{{{z{{{{{{{{{{{{z{{{{{z{{{{z{{z{{{{{{z{{{{{{{=\n{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{zz{{{{{z{{{{z{z{{{{z{{{z{{{{z{=\n{{{{z{{{{z{{{{z{{{{z{{{z{{{z{{{zz{{{{{z{{{{z{{z{{{{z{{{{zz{{z{{{zz{{{{{z{=\n{{{z{z{{{z{{{z{{{{z{{{z{{{{{{{{zzzzzzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{zz{{zz{{{zz{{zz{{{{{{{{{{{zz{{{z{=\nzz{{zz{zz{{{z{zz{{{z{{{{{{{{{{{z{z{{{{z{{{{{{{z{{{{{z{{{zz{{{z{{{{{zz{{{z=\nz{{{{{z{{{{{z{{{zz{{{z{{{{{z{{{{zz{{zz{{{{z{{{z{{{zz{{{zz{{{zz{{{{z{{zz{{=\nzz{{z{{z{{z{{{{zz{{{zz{{{{{z{{{{z{{{z{{{{z{{{{z{{{z{{{{{{{{{{{{{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zzz{{z{zzz{{{{{=\nzzzz{{{{{{{{{{{{zzzzzz{{zzzz{{zzzzzz{zzzzzz{{{{{{{{{{{zz{{{{zzz{{{{{{z{{{=\n{zzzzzz{{{{z{{{{{{zzzzz{{{{{zz{{{zzzz{{{zz{zzz{{{zzz{{{{zzzz{{{{{z{zzzz{{=\n{zz{{{zzzzz{{{{zzz{{zzzz{{{zzz{{{{zz{{{zzzzz{{{{{zz{{{zzz{zzz{{zzz{{zzz{{=\nz{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~zzz{zzzz{zz{zzzzzzzz{~~~zzzz{zzzz{zz{~~zzz{~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{{zz{{z{{zz{zz{zz{~~~{zz{{{zz{{zz{~~{=\nzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=017=1Dd=01=01||~}}||~~~~~~=\n~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~zz{~z{~{{{=\nzz{zz{~~~~zz{~~zz{~{{{~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~zzz{{z{zz{zzz{zz{zz{~~~~zz{~~zz{zzz{~zzzz{~zzzz{~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}=01=01=00=00=00=01=01||~}}||}}}}}}}}}}}}}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{zz{z{{{zz{zz{zz{~~~~zzzzzzz{{z=\nz{zz{zz{zz{{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=01=01=01=01||~}=\n}|}}}}}}}}}}}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{z=\nz{z{~~zz{zz{zz{~~~~zz{{{zz{~zz{zz{zz{zzzzzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~}}=01=016=E8T=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~zzz{zzz{~~zz{zz{zz{~~~~zz{~~zz{~zz{zz{zz{zz{{{{{~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00-=01=01||~}}~~~~~~~~~~~~~~~~||~~=\n}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{z{{{{{{{{zzz{{{{{{zz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzzzzz{{{{{{{{{{{{{{{{{{zzz{{{{{zzz{{zzz{{zzz{{{{{zzz{{zzzzzzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{z{{{{{{{{{{{zzz{{{=\nzzz{zzz{{zzz{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{zz{{z{{~~zz{zz{zz{~~~~zz=\n{~~zz{~zz{zz{zz{zzz{~z{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=02=A4=1C=01=\n=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{{{{{{{=\nzz{{{{{{zz{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{zz{{{{{{{{{{{{{{{{{{zz{{{{{zz{{=\n{{z{{{{zz{{{{{zz{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{{{z{{{{{{{{{{{{z{{{{{z{{{z{{{{zz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~z{{~z{~~zzzzzzzzzz{~~zzzz{zzzzzzzz{zz{zz{zzzz{{~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{zz{{{{z{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{z{{{z{{{{{{=\n{{{{{{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{z{{{{z{z{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~{{~~{{~~{{{{{{{{{{{~~{{{{{{{{{{{{{{{{{{{{{{{{{=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{zzz{zzz{{zzzzz{{zzz{{{zzz{{{{zzz{{zz=\nzz{{z{{{{{{{z{{{z{{{{zzz{{{z{{{{{{{z{z{{{z{z{{{{z{{{{z{z{{{z{z{{{{z{{{z{{=\n{{{{{zzz{{zzz{zzz{{zzz{{zz{zz{zzz{{zz{zz{{{z{{{zzz{{{{{zz{zz{zz{{{{{{{z{{=\n{z{{{{z{{{{z{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01|=\n|~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{{zz{{zz{{zz{{=\nzz{{zz{{z{{zz{{z{{zz{{zz{{{z{{{{{{{z{{zz{{{z{{{z{{z{{{{{{{z{zz{zz{z{{{{z{=\n{{{z{zz{zz{z{{{{zzzzz{{{{{{z{{{z{{z{{{z{{zz{{z{{zz{zzz{zz{{zz{zz{{z{{z{{{=\nz{{{{{z{{zz{zz{{{{{{z{{{z{{{{z{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{zzz{{zz{{zz{{zz{{zz{{zz{zz{{zz{zz{{zz{{zz{{{{{{{{{{{zzzz{{{{zzzzz{{=\n{{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{{{{z{{{z{{{{{{zzzzz{{{zzz{{{{{{zz{{z{=\n{{z{{{z{{z{{{z{{z{{zzzzz{{{{{z{{z{{{z{{{{{{zz{zz{{{{z{{{{z{{zz{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{zz{{zz{{zz{{zz{{zz{zzzzzz{zz{{{{{{zz{{{=\n{{{{{{{{z{{z{{{{z{{{{{{{{{{{{{{z{{z{z{{z{{{{z{{{{z{{z{z{{z{{{{z{{{{{{{{{{=\nz{{{{{{{{z{{{{{zz{z{{z{{{z{{{z{{z{{{z{{z{{z{{{{{{{{{z{{z{{{z{{{{{{{z{z{{{=\n{{z{{{{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{||~}}z|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=017=1Dd=01=01||~=\n}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{zz{zz{{zz{{zz{{zz=\n{{zz{zz{{{{{zz{{{{{{zz{z{{{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{z{{{z{{{z{{{{z{{{=\n{z{{{z{{{z{{{{z{{{{{{{{{{z{{{{{{{zzz{{{z{{{z{{z{{{z{{{z{{z{{{z{{z{{z{{{{{=\n{{{{z{{z{{{z{{{{{{{zzz{{{{{z{{{{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z|||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||=01=01 =00 =01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{zz{{{zz{zz{{zz{{zz{{zz{{zz{zzz{{z{zzz{{z{{zzz{{z{{{{{{{z{{{zz{{zz{{{z{=\nz{{{{{{{z{{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{{z{{{{{zz{{{z{z{{{z{{zz{{z{{z{=\n{{z{{{z{{zz{zz{{z{{zz{{{z{{{{z{{z{{{z{{{{{{{{z{{{{{{z{{{{z{{{{zz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||}=01=01=00=00=00=01=01||~}}~~~~~~~~~~~~~~~~|=\n|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzz{{{zzz{zz{z{zzz{{{zz{{zzzz{{{zzzz{{=\n{{zz{{z{{{{{zzzz{{{zz{{zzzz{{z{{{{{{zzz{{z{{zzz{{zzz{{zzz{{z{{zzz{{zzzzzz=\nz{{{{{{zzzz{zzz{zzz{{zzz{zzzz{zzz{zzz{z{zz{{zzz{{zzzz{{{{zzzzzz{zzz{{{{{{=\n{z{{{{{zzz{{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=FF=01=01=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~}}=01=016=E8T=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00-=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{zzzz{zz{~~~~~~~~~=\n~~~~~zz{~~~~~~~~zzzzz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=02=\n=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~=\n~~~~~~{zz{{zz{{z{{~~~~~~~~~~~~~~zz{~z{~~~~zz{{zz{zz{~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~zz{~z{~~~~~~~~~~~~~~~{z{zz{~~~~zz{~{z{{=\n{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~=\n~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{{z{zz{~~zzzz{zzz=\nzz{~~z{zzzz{~~~zzz{~{zzz{~zzzzzzzzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{=\n{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~{zz{zz{z{{~zz{{zz{zz{zz{~{{{zz{{~~~{zzzz{{zz{zz{{z{zz{zz{~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{zz{z{~~zz{~zz{zz{zz{~~~~zz{~~~~~{{zzz{zz{zz=\n{~z{zz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{z{{{{zzzz{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzz{zzz{~~zz{~zz{zz{zz{=\n~~~~zz{~~~~z{~{zz{zz{zzzz{{zz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=017=1Dd=\n=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{zz=\n{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~{zz{{z{{~~zz{~zz{zz{zz{~~~~zz{~~~~zz{~zz{zz{{zz{{~zz{zz{~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~}}=01=01 =00 =01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{zz{{{{{z{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~z{{~z{~~~{zzzz{zzz{zzz{~~~{zz{~~~zzzzz{zzzz{z=\nzzzzzz{zzz{~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=00=01=01||~}}~~~~~~~~=\n~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{zz{{{{{z{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{{~~{{~~~~{{{{{{=\n{{{{{{{~~~~{{{~~~{{{{{{{{{{zz{{zz{{{{{{{~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=\n=FF=01=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{=\n{{{{{{zz{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~zz{~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~}}=01=016=E8T=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~{zzzz{{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00-=01=01||~}}~=\n~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{zz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}=01=01=02=A4=1C=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{zz{{{{{z{{zz{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z|}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{zz{{{zz{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}z|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||||=01=01{{{=01=01||~}=\n}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{{{{zzzzz{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~}}~~~=\n~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z=\nzzzzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=\n=01=017=1Dd=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~{zz{{zz{~~~~~~~~~~~~~~~~~~~~~~z{~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~}}=01=01 =00 =01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~zz{~~~~~~~~~~~~~~~~=\n~~~~~zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00=00=01=01||=\n~}}||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~zz{~zz{~~zzzz{~~zzzz{~zzzz{zzzz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~}}=01=01=FF=01=01=01=01||~}|||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzzz{{~zz{{zz{zz{{z{zz{{zz{zz{{~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=016=E8T=01=01||~~~~~~~~~~~~~~~~~~~=\n~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{zz{~~zzzzz=\nz{zzzz{{zzzzzz{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01=00=00-=\n=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~zz{{zz{~zz{{{{{{zzzz{zz{{{{{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~}}=01=01=02=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\nz||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{~{zz{zzz{~z{z{{zz{zzz{~z{zz=\n{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~~~~~~~~~~~~~=\n~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzz{zzz=\nz{zzzz{{zzzz{{{zzzz{{{zz{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{=\n{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||~}}z||~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~{{{{{{{{{{{{{{{~{{{{{~~{{{{{~~{{{~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~}}=01=01{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||~}}z||~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=01||~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~}}z||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=01{{{=01=\n=01||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}z||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}=01=017=1Dd=01=01|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}z|}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01 =00 =01=01zzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=01=01=00=00=\n=00=01=01||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||=01=01=FF=01=01=01=01|||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||}=01=016=E8T=01=01||~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}=01=\n=01=00=00-=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}~}}=01=01=02=A4=1C=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~}}=01=01{{{=01=01||~||=\n||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01{{{=01=01||~|||||||||||||||||||}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~||~~~~=\n~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01{{{=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~||~~~~~}=\n}}}}}~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=00=01=01||~||~~~~~}}}}}|~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~||~~~~~}}||||~~~~~}}~~}=\n}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01|=\n|~||~~~~~}|||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{zz{{{{{{z{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{zzz{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{zz{{{{{{{{{{{{zz{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{zz{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01=00=00-=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{z=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{z{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{z{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~||~~~~~~~~~~~~~=\n~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{z{z{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{z{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{{z{zz{{z{{{{zzz{{{{zzz=\n{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzz{z{zz{{{{zzz{{zzzz{{{{{{zzz{{{{zzz{zzz{=\n{zzz{{z{zzzzzz{zzz{{{zz{zz{{zz{{{zzzz{{{zzz{{{{{{z{{{zzz{{{{zzz{{{z{{zz{z=\nz{zz{zz{{{{zzzz{{{z{{{{{{{{{{z{{{{{zzzz{z{zz{{{{zzz{{zz{{zz{{{zzzz{{z{zz{=\n{zzzz{{{zzz{zzz{{zzz{{zz{{zz{{{{zz{zz{zzz{{zz{{{zzzz{{z{zz{{zzzz{{{{z{zz{=\n{{{zzz{{{{{zz{zz{zz{{zzzz{{zzz{{z{zzz{{zzz{{{{zzz{zzzz{{zzz{{{{zzzz{{{{zz=\n{zz{zz{{{{{{{zzz{{{zzz{{{{zzz{{zz{zz{zz{{{{zzzz{{{{{{zzz{{zz{zz{{{{zzz{{z=\nzzz{z{zz{{{{zzz{{z{zzz{{{zzz{zzzzz{{{zzz{{zzz{zzz{zzz{{{{{zzz{{zzzz{{{zzz=\nz{z{zz{{{{zzz{{{{{{{zzz{{{zzz{{zz{zz{zzz{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01{{{=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{=\n{{z{{z{{z{{{z{{{z{{zz{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{zz{zz{{zz{{z{{z=\n{{{{{{{z{{z{{{{{z{{{z{{z{{{z{{zz{z{z{{{z{{{{{zz{zz{{z{{zz{{z{{z{{{z{{{{{z=\n{{zz{zz{{zz{zz{{z{{z{{{z{{zz{zz{{zz{z{{{{z{{{{{{{{{{z{{{{{{z{{{zz{zz{{zz{=\nzz{{z{{{z{{zz{z{{{zz{zz{{z{{{{{{z{{{z{{zz{zz{{z{{{z{{{{{zz{zzz{zz{{z{{zz{=\nz{{{zz{zz{{z{{{{{{zz{zz{{z{{{z{{{{{z{{zz{zz{{z{{{z{{{z{{zz{z{z{{{z{{z{{z{=\n{z{{{z{{{z{{zz{{z{{{{{z{{zz{zz{{{{{z{{z{{z{{{z{{z{{{z{{z{{zz{zz{{zz{z{{{{=\n{{zz{{z{{zz{zz{{zz{zz{{z{{{zz{zz{{z{{{z{{zz{z{{{{z{{{z{{z{{z{{{z{{z{{{z{{=\n{z{{{{{zz{zz{{z{{{{{{z{{{zz{zz{{z{{{z{{{{{z{{z{{zz{{z{{zz{zzz{zz{{z{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~||}}}}}}}}}}}}}}}}}}~=\n~}}{{{{{{{{{{{{{{{{{{{{{{z{{zz{z{{{zzzzz{{{{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{z{{{z{{{{{zz{{z{{{{{{{zz{{{{{{{z{{{z{{zzzzz{{z{{{{z{{{z{{{{{z{{{z=\n{{z{{z{{{{{{zzzzz{{{{{z{{z{{{z{{z{{{z{{zzz{{{{z{{z{{{z{{z{{{z{{{z{{{{{{{{=\n{{z{{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{z{{{=\nz{{{{{z{{{z{{{z{{z{{z{{{z{{z{{{z{{z{{{{{{z{{{z{{zzzzz{{{{{z{{z{{{z{{z{{{z=\nzzzz{{z{{{{zzzzz{{zz{{{{z{{{zzzzz{{z{{{z{{{{{z{{z{{{z{{{{{zz{{{{zzzzz{{zz=\nzzz{{z{{z{{{z{{z{{{z{{{{{{{{zz{{z{{{z{{z{{{z{{z{{{z{{{z{{zzzzz{{z{{{{{{{z=\n{{{z{{z{{zzzzz{{z{{{z{{{z{{{{{z{{{z{{z{{{{{{z{{{z{{{z{{zzzzz{{{{{zz{{{{{{=\n{zz{{z{{{z{{{z{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01|=\n|~|}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{z{z{{{z{{{{{{{zz{z{{z=\n{{{{{{zzzzzzz{{zzzzzzz{{{{{z{{{z{{{z{{{zz{z{{z{{{{{{{{zz{{{{{{{z{z{{{z{{{=\n{{{z{{{{{z{z{{{{{{z{{{z{{z{{z{{{{{{z{{{{{{{{{z{{z{{{z{{z{{{z{{z{z{{{{z{{z=\n{{{z{{zz{{z{{{z{{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{zz{{z{{z{{{z{{z{=\n{{{{{{z{z{{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{zz{{z{{z{{{z{{z{{{{{{z{{{z{{z{=\n{{{{{{{{z{{z{{{z{{z{{{z{{{{{{z{{{{z{{{{{{{zz{{{z{{{z{{{{{{z{{{z{{{{{z{{z{=\n{{z{{{{{{zz{{{z{{{{{{z{{{{{{z{{z{{{z{{zz{{z{{{{{{zz{z{{z{{{z{{z{{{z{{z{{{=\nz{{{z{{z{{{{{{z{{{{{{{{z{z{{{z{{z{{{{{{{z{{z{{z{{{{{{z{{{z{{z{{{{{{z{{{z{=\n{{z{{z{{{{{{{{{{zz{{{{zz{z{{z{{{z{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{{z{=\n{{z{z{{{z{{{{{{z{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{z{{z{{{{=\n{{{{{zz{{{{{{z{z{{{z{{{{{{z{{{{{z{z{{{{{{z{{{z{{z{{z{{{{{{z{{{{{{{{{z{{z{=\n{{z{{z{{{z{{z{{z{{{z{{z{{{z{{{zzz{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{z{{z{{{z{{=\nz{{{z{{{zzz{{{z{{{z{{z{{{{{{{z{z{{{z{{{z{{z{{{z{{{{{z{{{z{{{z{{z{{{zzz{{{=\nz{{{z{{z{{{{{{z{{{z{{z{{{{{{{{{z{{z{{{z{{z{{{z{{{{{{z{{{{z{{{{{{{{zz{{z{{=\n{z{{{{{{z{{{z{{{{{z{{z{{{z{{{{{{{zz{{z{{{{{{z{{{{{{z{{z{{{z{{{zzz{{{{{{z{=\n{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{{{{z{{{{{{{{z{z{{{z{{z{{{{{{{zzz{zzz{{{=\n{{{z{{{z{{z{{{{{{z{{{z{{{z{{z{{{{{{{{{{{zz{{z{{{z{{z{{{z{{{z{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~~~~~~~~~~~~~~~~~~~~~~~}=\n}{{{{{{{{{{{{{{{{{{{{{{z{{{{zz{{{zz{{{z{zz{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{{{z{{{z{{zz{{z{{z{{{{{{{z{{z{{{{{{{z{{{{zz{{{z{z{{{{{{z{{{{{{{z{{{z{{=\nz{{zz{{{z{zz{{{z{{{{z{{zz{zz{{zz{zz{{z{{zz{{z{{z{{{z{{{z{{{{{{z{{{{{{{{{{=\nz{{{{{{z{{{z{{{z{{zz{zz{{zz{zz{{{z{{{{{z{{{z{{z{{{{{{{{z{{{{zz{zz{{zz{zz{=\n{{{{z{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{{{{{z{{zz{{zz{{{z{{{{z{{z{{{z{{z{{{zz{=\n{{z{z{{{{zz{{{z{z{{z{{z{{{zz{{{z{zz{zz{{{{{z{{z{{{z{{{{{z{{z{{zz{{{z{zz{{=\n{z{z{{z{{{z{{{z{{{{{{{{zz{{z{{z{{{z{{zz{zz{{z{{{z{{{z{{zz{{{z{z{{{{{{{{{z=\n{{{{z{{zz{{{z{{{z{{{z{{{{{{{zz{zz{{z{{{{{{z{{{z{{{z{{zz{{{z{{{{z{{z{{zz{{=\nz{{z{{{z{{{z{{zz{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01|=\n|~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{zzz{{{{z{{{{zzzz{{{zzz{z{{=\nzz{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{zzz{{zzz{z{{zz{{{{{zzz{{{{{{{{z{{{{{zzz=\nz{zzz{{{{zz{{{{{{zzz{zzzzzz{{zzzz{{{zzzz{{{{zzz{{zzz{{{{zzz{{zzz{{zzzzzzz=\nz{zzz{{zzzz{{{z{{{{{{{{{zzz{{{{{{zzzzz{zzz{{zzz{{{{zz{zz{{zzzz{zzz{zzz{{z=\nz{{{{{zz{{{{{zzz{{{{zz{zz{{{zzz{zzz{zzzzzz{{zzzz{zzz{zzz{{zz{{{{zzzz{{{{z=\nzzz{{{{zzzzzz{zzz{{zz{{zzzz{zzz{{{{zzzz{{zzz{{{{zz{{zzzz{{{zzz{z{{{zzzzzz=\n{zzz{{{{zzz{{{{zzzz{{{zzzz{zzzzzz{zzz{{zzzz{{{{{{zzz{zzzz{zzz{{zzz{{{{zzz=\nzz{zzz{{zzzz{zzz{{{{{{{{z{{{zzz{{zzzz{{{{z{{{z{{{{{{{{zzz{{zzzz{{{{{zzzzz=\n{zzz{{zzzz{{{{{zzz{{{{zzz{zzzz{zzz{zzz{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01=00=00=00=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}}}}}}}}}}}}=\n}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{z{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8=\nT=01=01||~}}}}}}}}}}}}}}}}}}}|~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{=\n{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}~~~~~=\n~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||||||||||=\n||||||||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{=\n{{=01=01||~}}|||||||||||||||}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{zz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{zz{zz{{{{{{{{{{=\n{{{{{{zz{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{zzz{{{zzzz{{{{zzz{{zzz{zzzzz=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{{{{{{{{{=\n{{{{{zz{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{z{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{z{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{=\n{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{{{{{{{{{{{{{z{{{{{{{{{{{{{z{z{{=\n{{{{{{{{{z{{z{{{{{{{{{{{{{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{=\nzz{{zz{{{{z{{{{z{{{{z{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{z{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~=\n~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{z{{{{z{{{{z{{{{z{{{{z{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00=\n =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zz{zz{zzz{{{{zzz{{{=\n{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{zzz{{{{{{{{{zzz{{{zzz{{{{{{z{zz{{{{zzz{=\n{z{zzz{{zzz{{{{{zz{{{zzz{{{{{{zzz{{{{{zz{zz{{zz{{{zzzz{zzzzzz{{zz{z{zzz{{=\nzzz{{{{{{{{zzzzzz{z{zzz{{zzz{zzzz{{{{{zzz{{zzzz{{{{{zzz{{{z{{z{{{{{{{{{zz=\nz{{zzzz{{{{z{zz{{{{zzz{{zzz{zzz{zzz{{{{{zz{{z{{{z{{{{{{z{{{z{{{{z{{{{z{{{=\nz{{{{{zz{zz{zzz{{{{zzz{{{{zzz{{{zzz{{{zzz{{{{zzzz{{{zzz{{{{{{z{{{zzz{{{{z=\nzz{{{z{{zz{{{zzz{{{{zzzz{{{{zzzz{{zzz{{{{{zz{zz{zzz{{{{zzz{{{{{zzz{zzz{zz=\nz{z{zz{{{{zzz{{zz{zz{{{{{z{zzz{{zzz{{{{zzz{{{{zzzz{zz{zz{zz{{{{zzzz{{{{zz=\n{zzzz{{{zzz{zzz{zzzzz{zzzz{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{=\n{{{{{{{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{zz{z{{{z{{{z{{z{{z{{{{{{{=\n{z{{z{{zz{zz{{{{{zz{zz{{z{{{z{{zz{z{z{{{z{{{{{z{{z{{z{{{{{zz{{z{{{{{zz{zz=\n{{z{{zz{{z{{z{{{z{{{z{{zz{z{z{{{z{{{{{{{{z{{{z{{zz{z{z{{z{{z{{{{{{zz{zz{{=\nz{{{{{{zz{{z{{z{{z{{{{{{{{zz{zz{{z{{{{{{zz{zz{{zz{zz{{z{{{z{{{z{{{{{{{z{z=\n{{{{z{{{{{{z{{{z{{{{z{{{{z{{zz{{{{{{zz{zzz{zz{{z{{{z{{z{{z{{z{{z{{zz{{z{{=\nzz{z{{{z{{{z{{{{{z{{zz{zz{{zz{zz{{z{{z{{{z{{{z{{zz{{z{{{{{z{{{zz{zz{{{{{z=\nz{zzz{zz{{z{{{z{{{{{z{{{z{{{z{{zz{zz{{z{{{z{{zz{zz{{{{{zz{z{z{{{z{{zz{{z{=\n{zz{{z{{z{{zz{zz{{zz{z{{{{{{z{{z{{{{{{z{{{z{{{z{{z{{z{{{zz{zz{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{zzzzz{{zz{{{{zz{{{{{{{=\nzz{{z{{{z{{zzzzz{{zz{{{{{{{{{{zz{{{{z{{{z{{{{{z{{{z{{zzzzz{{z{{{{zzzzz{{{=\n{{z{{zz{{{{{{{{{{zz{{{{{z{{{z{{z{{z{{{{{{z{{{z{{{z{{z{{{{zzzzz{{{{{{{{z{{=\n{z{{z{{{{zz{{{{z{{{{{{z{{{z{{z{{{{{{{{{zz{{z{{z{{{{{{{{z{{{z{{z{{{{{{z{{{=\nz{{z{{{z{{z{{{z{{{z{{{{{{{{z{{{{{z{{{{{{z{{{z{{{{z{{{{zzzz{{{{{{{z{{{z{{{=\nz{{zzzzz{{zz{{{{zz{{{{{{{zz{{z{{{z{{zzzzz{{{{{z{{z{{{z{{z{{{z{{zzz{{{{zzz=\nzz{{z{{{z{{{{{z{{{z{{{z{{{{{z{{{z{{{z{{zzzzz{{{{{z{{{z{{{z{{z{{{z{{zzzzz{=\n{z{{{z{{{{{z{{{{zzzzz{{{{{zz{{z{{{z{{z{{z{{{z{{z{{{z{{{{{z{{z{{{{{{z{{{z{=\n{{z{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{=\nz{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{zz{{{{{{{{{{zz{{{z{{{z{{{{{z{=\n{{z{{z{{{{{{z{{{{z{{{{{{{{{z{{{zz{{{{{{{zz{z{{{{{z{{{z{{z{{z{{{{{{z{{{z{{=\n{z{{z{{{{z{{{{{{{{{{{{z{{{z{{z{{{{{zz{{{z{{{{{{z{{{z{{z{{{{{{{zz{z{{z{{z{=\n{{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{{z{{z{{z{{{{{{{{{z{{{{{z{{{{{{z{{{z{{{=\n{z{{{{z{{z{{{{{{{z{{{z{{{z{{z{{{{{{{zz{{{{zz{{{{zz{z{{zz{{z{{z{{{{{{{{{z{=\n{z{{{z{{z{{{z{{z{z{{{{z{{{{{{z{{{z{{{{{z{{{z{{{z{{{{{z{{{z{{{z{{z{{{{{{{{=\n{{z{{z{{z{{{z{{{z{{z{{{{{{z{{{z{{{{{z{{{{z{{{{{{{zz{z{{z{{{z{{z{{z{{{z{{z=\nz{{z{{{{{z{{z{{{{{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{{z{{{z{{{zzz{{{z{{{{{{{{z=\nz{{{{{{{{{{zz{{z{{{z{{{{{z{{{z{{z{{{{{{z{{{{z{{{{{{{{{z{{{{zz{{{{{z{{{z{{=\n{{{z{{{z{{z{{z{{{{{{z{{{z{{{z{{z{{{{z{{{{{{{{{{{{z{{{z{{z{{{{{{zz{{z{{{{{=\n{z{{{z{{z{{{{{{z{{{z{{z{{z{{{{{{{{z{{{z{{z{{{{{{z{{{z{{z{{{z{{{zzz{zzz{{{=\n{{{{{{z{{{{{{z{{{{z{{{{z{{{{z{{{{z{{{z{{{{{{z{{{z{{{z{{z{{{{{{{{zz{{{{zz{=\n{z{{{z{{{zzz{{{z{{{{{{{{{z{{z{{{z{{z{{{z{{z{{z{{{z{{{{{{z{{{z{{{{{z{{{z{{=\n{z{{{{{z{{{z{{{z{{z{{{{{{{{{{zzz{zzz{{{z{{{z{{z{{{{{{z{{{z{{{{{z{{{{z{{{{=\n{{z{{{z{{z{{{z{{z{{z{{{z{{{zzz{{{{{{z{{z{{{{{{{zzz{zzz{{{z{{z{{{z{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{zz{{{z{z{{z{{z=\n{{z{{zz{{z{{{z{{{{{zz{{{z{z{{z{{z{{{{{z{{z{{zz{zz{{{{{z{{{z{{zz{{{z{z{{{{=\nzz{{{z{{{{z{{z{{z{{{{{zz{{z{{{{{zz{zz{{z{{zz{{{z{z{{{zz{zz{{z{{{{zz{{{z{z=\n{{{{{z{{{z{{z{{{{z{{z{{z{{{{{{zz{zz{{z{{{{{{zz{{z{{z{{z{{z{{{{{zz{zz{{z{{=\n{{{{z{{{z{{zz{zz{{{{z{{{z{{{{{{{{{{z{{{{{{zz{{zz{{{{zz{{zz{{{{z{{{zz{{{{{=\nz{{{z{{{z{{zz{{{z{z{{z{{z{{z{{zz{{z{{{z{{{{{zz{{{z{{{{z{{zz{zz{{zz{zz{{z{=\n{zz{{zz{{{z{zz{zz{{{{{z{{{zz{zz{{{{{z{{{z{{{z{{zz{{{z{{{{{{z{{{z{{{{z{{{z=\n{{zz{{{z{z{{{z{{{{{z{{{{zz{{{z{zz{{z{{zz{zz{{z{{z{{{z{{{z{{{{{{{{z{{z{{{{=\n{{{{z{{{z{{{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{zzz=\n{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zzzz{{zzz{{{z{{{{{zzz{{{{zzz{{=\n{{{zzz{zzz{{zzzz{zzz{{{{zzzz{{{{zzz{zzz{{{{{{{zzz{z{{{{z{zz{{zzz{{zzzz{{{=\nzz{{zz{zzzzz{{{{zzzz{{z{{{{zzzzzzzzzz{{{zzz{{{{zz{{{{{zzz{{zzzz{{{{{zzz{z=\nzzzzzz{z{{{{{{zzz{{zzzz{{{zzz{zzz{{zzz{{{{{z{{{z{{{{{{{{{zzz{{{{{{zzzz{{{=\n{{{zzzz{{{zzzz{{{zz{{{zzz{zzz{zzz{{zzzz{{zzz{{{zzz{{{{zzz{z{{zzzz{{{zzzz{=\n{{{zzz{{zzz{{{{zzz{{zzz{{zz{{zzzz{{{zzz{z{{{{{zz{{zzz{{{{{zzz{zzz{zzz{{zz=\nzz{{{{{{{z{{{z{{{zzz{zzz{{zzzz{zzz{zzz{{{zzz{{{{zzzz{{{zzz{z{{zzz{zzzzzzz=\n{zzz{{zzzz{{{{zzz{{zz{{{{{{z{{{z{{{zzz{{zzzzz{zzz{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zz{{zz{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{{zz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|=\n|~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}|=\n|~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~=\n}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{{{{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=\n=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{z{z{{{{zz{zz{{{{zzzz{z{zzz{{zzz{{zzz{zzz{zzz{z{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{zz{zz{{zz{{z{{zz{z{z{{{z{{z{{{z{=\n{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{z{{{z{{z{{{=\nz{{z{{{{zzzzz{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{{{zzzzz{{{{z{{{z{{z{{{z{{z{{{{z{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{{{z{{{{{{{zzz{zzz{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{z{{{z{{zz{zz{{=\nz{{{{zz{{{z{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{=\nzzz{{{zzz{zzz{zzz{{zzz{zzzz{{{{zzzz{{{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1D=\nd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}|=\n|~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|=\n|~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{=\n{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}=\n}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{=\n{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{=\n{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{=\n{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~=\n~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{=\n{{z{{{{{{{{{{zzz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{zzzzz{{{{{{{{=\nzz{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{z{zz{{{z{zz{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{z{z{{{{{{{{z{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{{{{{{z{{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{{zz{{z{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{{{{{z{{{{{z{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{=\nz{{{zz{z{{z{{{{{{{{zz{z{{{zzz{{{zzz{{{zzz{{{zzz{{{zzz{{{zzz{{{zzz{{{{{{{{=\n{{z{{{z{{{z{{{{{{{z{{{{{z{zz{{{zzz{{z{zz{{{zzz{{{zzz{{{zzzz{{{{{{{z{{{{{{=\nzzz{{{{z{{{{zzzz{{zzz{{z{zz{{{zzz{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{{{z{{{{{z{{{{{{{{z{z{z{z{{{z{z{{{z{z{{{z{{=\n{{{z{z{{{z{z{{{z{z{{{z{{{{{{{{zzz{{z{{{z{{{{{{{z{{{{{zz{{z{{{{{z{zz{{z{z{=\n{{z{z{{{z{z{{{z{{{{{{{zzzz{{z{{{z{{{z{{{z{{{z{z{{{z{zz{{z{z{{{z{{{{{{{{{{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{{z{zz{{{z{{{{{{{{=\nz{z{z{zzzzz{{zz{{{{zz{{{{zzzz{z{{{z{zzzzz{{zz{{{{{{{{{{{{{z{z{{{z{{{{{{{z=\n{{{{{z{{{z{{zzzz{z{{{z{z{{{z{zzzzz{z{{{z{{{{{{{z{{{{{z{{{z{{{z{{{z{{{z{zz=\nzzz{z{{{{{{zz{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{zz{{{z{{z{{zz{{z{{{{{{{{z{z{z{z{{{{{{{{z{{{{{z{{z{{{z{z{{{z{z{{{{{{{{z=\n{{{{{{{{{{{{z{z{{{z{{{{{{{z{{{{{z{{{z{z{{{z{z{{{z{z{{{z{z{{{{{z{{{z{{{{{{=\n{z{{{{{z{{{z{{{z{{{z{{{z{z{{{{{z{{{{{{{{z{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{z{{{{zz{z{{{{{{{{z{z{z{z{{{z{z{{{z=\n{z{{{z{z{{{z{{zzzz{z{{{z{z{{{z{{{{{{{z{{{z{{z{z{{{{{{{{z{{{z{z{{{z{z{{{z{=\nz{{{z{{zzzz{z{{{z{z{{{z{{{{{{{z{{{{{z{{{z{{{z{{{z{{{z{z{{{z{z{{{{{z{{{z{{=\n{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{{{{{{{{{z{{{{=\n{{{{z{{{z{{zzz{{{zzz{{{zzz{{{zzzz{{{{{z{{zzz{{{zzz{{{{{{{{{zzz{{{{z{{{{{{=\n{{{{zzz{{z{{{z{{zzzz{z{{{z{{{{{z{{zzz{{{zzzz{{{{{{{z{{{{{{zzz{{{zzz{{{zzz=\nz{{zzz{{z{{{{{{zzz{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{zz{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{z=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{z{zz{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{z{{z{{z{{z{{z{{z{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{z{{z{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{z{z{{z{{=\nz{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{{{z{{z{{z{{z{{z{{{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\n{{z{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{zz{{z{{z{{z{{z{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8=\nT=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzz{z{z{z{z{z{=\nz{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{zz{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzz{=\n{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z{z{z{z{z{z{z{z{zz{zz{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzz{z{z{z{z{z{z{z{zzz{zz{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{zzzzz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{{z{z{z{z{z{z{z{z{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{z{zz{{{z{z{z{z{z{z{z{z{z{z{z{zz{{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{{{{{{z{z{z{z{z{z{z{{z{{z{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{{{{{{z{z{z{z{z{z{{z{z=\n{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{=\n{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{=\nz{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{=\nz{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z=\n{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{{z{z=\nz{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{zzzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{=\n{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{z{z{z{z{=\nz{z{z{z{z{z{zz{{{{z{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{{{{z{{{z{{{z=\n{{{z{{z{{z{{z{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{=\n{{z{{{z{{{z{{{z{{{z{{{z{{{{{{z{{z{{{{z{{{z{{z{{{z{z{{z{z{{z{z{{z{z{{z{z{{=\nz{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z=\n{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z=\n{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{=\n{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{=\nz{{z{z{{z{z{{z{z{{z{z{{z{z{{z{z{{z{{z{{{{z{z{zz{{z{z{z{z{z{z{{z{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{z{zz{{zzzzzzzzzzzzzzzzzzzzz{zzz{{z{{{{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{=\n{z{{{z{{{z{{{{{{z{{{z{{{z{{{{{{z{{{{{{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z=\n{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{{{z{z{{{{{{{z{{{{z{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{zzzz{{z{=\nz{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~=\n~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z{z{z{z{z{z{z{z{z{{z{z{{{{{{{z{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{z{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{z{{z{{{z{{{{z{{z{{{{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{z{z{{{z{z{zz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00=\n =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{=\nz{z{z{z{{z{zz{{z{z{{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{{{{{{{z{{z{{z{=\n{z{z{{{{z{{{{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{{z{{{{{{{{{{{z{{{{{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{=\n{{{{{{{{{{{z{zz{{{zzz{z{z{z{z{z{z{z{z{z{zz{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{z{z{{{{{{{{{{{{{{z{{{z{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{z{{z{z{{{{z{{z=\n{{{{{{{{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{=\n{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{=\nz{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z=\n{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{{z{z{{z{z{{z{{{z{{z{z{{z=\nz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{z{z{z{z{z{z{z{z{{{z{zz{z=\n{{z{z{{{z{z{{z{z{{z{{z{{z{{z{z{{z{z{{z{{z{{{{{{{{{z{z{{z{z{{{{{{{{{{{{{{{=\n{z{z{{z{z{{z{{z{{z{{z{{z{{z{z{z{{z{z{{z{z{z{{z{z{{z{z{z{{z{z{{z{{z{z{z{{z=\n{z{{z{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{z{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{=\n{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{=\n{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{=\n{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{=\nz{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z=\n{{{{{{{{{{{{{{{{{{z{{{{{{{zzzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z=\nz{z{z{zzzzzz{z{z{z{z{zz{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{z{{z=\n{{{{{{{{{{{{z{z{{z{z{{z{zz{zzz{{{{{{{{{z{zzzz{z{{zzzz{{{{{{{{{zz{zzz{{{{{=\n{{{{{{{{zzz{{{{z{{{{{{{{{{{{{{{{z{{z{{z{{z{z{{z{{{{{z{zzz{z{{{{zz{{z{zzzz=\n{z{zzzzzz{{zzzz{{z{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{=\n{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{=\nz{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z=\n{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{=\n{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{z{{z{{z{{z{z{{{{{{z{z{zzz{{z{z{z{z{z{z{z{z{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{z{zzz{zzz{{{{zz{zz{{z{{{z{{z{zz{{z{{{z{zzzzzzzzzzzzzz{=\n{z{{{{z{{z{{zz{z{z{{z{{{{{{{z{{z{z{{z{{{{{{{{{{{{{{zz{{zz{z{{z{z{zz{{zzz{=\n{{{zzz{{{z{z{{z{zz{{zz{z{{z{z{{{z{zzzzz{z{{{{z{{z{z{{z{z{{{{{{{{{{{{{{{{{=\n{{{z{{{zz{z{{{zzzzz{{{zz{{zz{{zzzzz{{zzzzz{{zz{{{{z{{{{{z{{{{{z{{{{{z{{{{=\n{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{=\nz{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z=\n{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{=\n{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{z{{{{{{{{{{{{{{{{{z{z=\n{{{{{z{zz{z{z{z{z{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{z{z{{zz{{{z{{z{z=\n{{z{zz{{{{z{{{zz{{z{{z{{z{{z{{{{z{{{{{{{zz{{{{{{{{{{z{{z{{{{{{{{{{{{z{{z{=\n{z{{z{{z{{{zz{{{{{{{{z{z{zzz{{z{zzz{z{{{{{{{{{{{{zz{{{{{{{{z{{z{{{zz{{{{z=\n{{{{{{{{{{{{{z{z{z{{z{z{z{{z{{z{{{z{zzz{{{{{{{zzz{{zz{{zz{{z{{{{{z{{{zz{z=\n{z{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{=\n{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{=\n{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{=\n{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{z{{z{{z{{{{{=\nz{{z{{z{{{{{z{{z{{z{z{{z{{{{{{{z{z{zzzz{{{z{z{{z{z{z{{z{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\nzzz{zzz{{z{zz{z{z{z{zzz{z{zz{{z{{{{{zz{{{{{zz{{{{zzz{z{{{z{{z{zz{{z{{z{z{=\n{{{{{{{z{{zzz{zz{{zz{{{zzzz{{zzz{zzz{z{{z{{zz{{{z{zz{{z{zz{{{zzzzz{zzzz{z=\nz{z{{zz{{{{{{z{{zz{{{{{zzz{zz{z{{zzz{zzz{zzz{zz{{{{{zzzz{{zzzz{z{{z{{zz{{=\nzzzz{zz{zzzzz{z{{z{zz{{{zz{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{=\nz{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z=\n{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{=\n{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{=\n{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{z{z{{{{{{{{{{{{{{z{{z{{{{{zz{z{{zz{z{zz{z{=\nz{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{zz{{{zz{{zzz{zzz{zzz{zz{{z{zz{{{{z{{{zz{z{z{{zz{{z=\nzz{{{{{{{{{zz{z{{{{{{{{{z{z{z{{{z{zzzzzzz{zz{zz{{zz{{zz{{zz{{{{{{zzz{{zz{=\nzzz{z{zzz{zz{{zz{{zz{{zz{{{zzz{z{{z{{zzz{{z{z{{zzz{zz{{z{{zz{zz{{z{{z{{{z=\n{zz{{zz{{zz{{{{{{{{zz{{{{zzzzz{{zzzzz{{{zzz{{z{zz{z{{z{{z{{{{{{{{z{{z{{{{=\n{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{=\n{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{=\n{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{=\n{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{z{{z{{z{{{=\n{{{{{z{{zzzz{z{z{z{{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{zzz{zzz{zzz{zzz{z{{z=\nzz{{z{{{{{zzz{{z{{z{{zzzz{z{{z{{zzz{{{{z{{z{{z{{{{{{{{{{{zz{{zz{zzz{z{{zz=\nz{zzz{{zz{z{{z{{zz{{{z{zz{z{zzz{{{z{{zz{zzz{{zz{z{{{{{{{{{{z{zzz{{{{{zzz{=\nzzz{zzz{zz{zzz{zz{z{z{{{zz{zzz{{zz{{z{z{{zzz{{z{zzzz{{{{{{zz{z{{zzz{{{zz{=\n{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{=\n{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{=\n{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{=\n{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{{{{{z{{z{{{{=\n{{{{z{{z{z{{{{{{{{{{{z{{z{z{{z{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{|=\n|~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{=\n{zz{{z{z{z{z{z{z{{z{z{z{z{{{{{{z{zzzz{{{z{{zzzzz{{z{{{{zz{{{z{{{{{{{{{{{{=\n{{z{{z{zz{{zz{{zz{{zzzzz{{zzz{zz{{{{{{{zz{z{zz{zzz{{zz{{{zzzzz{{zz{zzz{{{=\n{{z{{z{z{{{{zz{{z{{{zz{{zz{zzzzzz{{zz{zzzz{{{{{zz{{zzz{zzz{{{{{{{zzz{{zz{=\n{zz{{z{z{z{{{{{zz{z{zz{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z=\n{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{=\n{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{=\nz{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{z{{z=\n{z{{{{{{z{{z{z{{{{{{z{{z{z{{{{{{{{{{{z{{z{z{{{{{{{{{{z{zz{{{z{z{z{z{z{z{{=\nz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{z{zzz{zzz{z{z{z{z{z{z{zz{{{z{zz{z{{z{{{zzz{{zz{z{{zzzz{z=\nzz{zzz{{z{{{{z{{z{{z{z{{{{{z{{zzz{zz{{zz{zz{{zz{{zz{{zz{z{{z{{zz{{{z{{zzz=\n{{zz{zzz{{zz{{zz{{zz{z{{{{{{{{{zz{z{zz{{{z{zz{{zz{zz{{{{z{zzz{zz{{{z{zzz{=\n{zz{{zz{{{z{{z{zz{{{zz{zzz{zz{{{zzzz{z{z{{{zzz{{{{{{{{{z{{{{{{{{{{{z{{{{{=\n{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{=\n{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{=\n{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{=\n{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{z{{=\nz{z{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}|=\n|~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{zz{z{z{z{z{z{z{z{z{z{zz=\n{{{{{{{{zz{z{{{{{{{{zzzz{zzzzz{z{{{{z{{{{{{{{{{{z{z{{{{zz{{zzz{zz{zz{{zzz=\n{zz{{zz{{z{{{{zz{z{z{{{z{z{zz{{zzz{zzz{zz{{zz{{{{zzz{z{{zzz{zz{{{{{{zz{zz=\nz{zzz{zz{{zzz{zz{z{{{{zzz{zz{{zz{z{{{{{{zz{{{zz{{zz{zz{{zz{zzz{zz{z{zz{{z=\n{{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z=\n{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{=\nz{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z=\n{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{{z{{{z{{z{z{=\n{z{{{{{{{{z{{z{{z{{{{{{{{{z{{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z=\n{zz{z{z{z{z{z{z{z{z{{z{zz{{z{{z{zz{{{{{zz{z{{{zz{{{zzz{{{{{z{{{z{z{z{{z{{=\n{{{{{zzzzz{zzz{zzz{zzz{zzzzzzzzzz{{{z{zzz{{zzzz{z{{zzzz{{zzz{zzzzzzzzzz{z=\n{zz{{{{z{zzzz{{z{{zzzz{{zzz{zzzz{{z{z{zz{{{{{{{{zzzz{{zzzz{{z{{zzzzzzz{zz=\nzz{{zzzzz{{{zzzz{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{z{{z{{{{zz{zz{z{z{z{z{z{z{z{=\nz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~=\n}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{{{z{{{{z{{{{{=\nz{zz{{z{z{{{{z{{{{{{{{{{{{{{z{{{z{{{{{{z{{{{z{{z{{z{{{{{{{z{{{z{{{{{{zz{{=\n{{{{{z{{{{{z{{{{{{{{{{{z{{z{{{{z{{{{{{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{=\nz{z{{{{{{{z{{{{{{{{z{{{{{{{{{{{z{{{{{z{{z{{{{{{z{z{{{z{{z{{z{{z{z{{z{{z{{=\nz{{z{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z=\n{{z{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z{=\n{z{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z{{=\nz{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{{{{{{z{{z{z{z{{=\n{{{{{{{{z{zzz{{{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z=\n{z{{z{zz{z{{z{{{{zzzzzzzzzzzzzzz{{{{{z{{{{{z{{z{{{z{{z{{{{z{{{{z{{{{{z{{{=\n{{{{{{{z{{z{{{{z{{{{z{{{zz{z{{z{{{{z{{{{{z{{z{{z{z{{{{{{z{z{z{z{{z{{z{{{z=\n{{z{{z{{{{{{{{z{z{{z{z{{z{z{{{{{z{{z{{{{z{{z{{{{{z{z{{z{z{{{{{z{{{{{{{z{z=\n{{{zzz{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{=\n{{{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{=\n{{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{=\n{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{=\n{{{z{{{{{{{{z{z{{{{{{{{{{{{{z{{z{z{z{zzzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{z{z{zzzzzzzzzzzzzz{{z{{{z{z{{{{{{=\nz{{{{{{{{{{{{z{{{{{z{{{{{z{{z{z{{{{{{z{{{{{z{{{z{{z{{{{{{z{{{{z{z{{{{{z{{=\n{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{{{z{z=\n{{{{{{{{{{{{z{{{{z{{z{{{{{z{z{{{z{{z{z{z{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z=\n{{z{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{{z{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{=\n{z{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{{z{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{{=\nz{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{{z{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{{z=\n{{{{z{{z{{z{{{z{{z{{z{{z{{z{{{{{z{{z{{{{{{z{z{{z{{{z{{{{{{{{{{{{zz{{z{z{z=\n{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{{z{z{z{z{z{z{{zzz{{z{z{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{z{z{{z{{{{z{z{{{{z{{{{{{{{{z{{{{{{z{{{{{{=\n{{{{{z{{z{{{{z{{{{{{{z{{{{{z{{z{{{{{{{{z{{z{z{z{{z{{z{{z{{{{{{{{{{z{{z{{z=\n{{z{{z{{{{{z{z{{z{{{z{{{{{{{z{{z{{z{{z{{{{z{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{z{{{{{{{=\n{{{z{{{z{z{{{z{zzzzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=\n=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{{{{{{{{{{{{z{{z{{z{{z{{z{{z{z{{{z{{z{{z{{{{{{{{{{{z{{{{{{=\n{{{{z{{z{{z{{{{{z{z{{{{{z{{z{{z{{{{{{{{{{{{{{{z{{{{{z{{{{{{z{{z{z{{{{{{{{=\n{{{{{{{{{{z{{z{{z{z{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{{{z{{{{z=\n{{z{{{{{z{{{{{{z{{z{{{z{z{{z{{z{z{{z{{z{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{=\n{z{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{{=\nz{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{{z=\n{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{{z{{z{{{{{{z{{{z{{z{{z{z{{z{{z{z{{z{{z{=\n{z{{{{{{z{{{z{{z{z{{{{z{{z{{z{{{{{{{{{z{{{{{{zz{{z{z{z{z{z{z{z{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{z{zz{{zzz{z{z{z{z{{z{z{z{{{z{zz{z{{z{z{z{{{{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{z{{z{{z{{{{{z{{z{z{{{{{{{{{{{z{{{{{{{z{z{{{{{{{{{z{z{{z{z{{z{z{{{z{=\n{{{{z{{z{{{{{{{{z{{z{{{z{z{z{{z{{{{{{{{{{{{z{{z{z{{z{z{{z{{{z{{z{{{{{{{{{=\n{{{{z{{z{z{{z{{{{{{{z{{{{{{z{{{{{z{z{{{{{{{z{{{{{{{{z{{{{{{{{{{z{{{z{z{{{=\n{{{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{=\n{{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{{=\n{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{{{=\n{z{{{{{{{{{{z{{{{{{{{{{z{{{z{z{{{{{{{{{{{{z{{{{{{{{{{z{{z{{{{{{z{zzzzz{z{=\nz{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{{zz{z{z{z{z{z{z{z{z{z{zz{{{{{{{{{{{{=\nz{{z{z{{z{{z{{z{{z{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{z{{z{z{z{{{z{{z{{{{{{{z{=\n{z{z{{{{{{{{{{{{{{{{{{{z{z{{{{{{{z{{z{{{{{{{z{{{{{{{{{{{{z{{z{{z{{{{{{{{{=\n{{{{{{{{{{{{{{z{{z{{z{{z{z{{{{{{{{{{{{z{{z{{{{{{z{{{z{z{{{{{{z{{z{{{{{{z{=\nz{{{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z{{{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z=\n{{{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z{{{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z{=\n{{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z{{{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z{{=\n{{{z{{z{z{{{{{{{{{{z{{z{{{{{z{{z{z{{{{{z{{z{z{{{{{{{{{{{z{{z{{z{{{{{{z{{z=\n{z{{{{{{z{{z{{{{z{zz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{z{z{z{=\nz{z{{z{zz{{z{{{z{{z{{{{{{{{{z{{{{{z{{{{{z{{z{{{{{{z{z{{z{{{{{z{{z{{z{{{{{=\n{{{{{{{{{{{{{z{{{{{{{{{{{{{z{{z{{z{z{{z{{z{{{{{{z{{z{{{{{{{z{{z{{{{{z{{z{=\nz{{z{{{{{{{{{z{{z{{z{z{{z{z{{z{{z{{{{{{{{{{{{{{{z{z{{z{z{{z{{{{{z{z{{{{{{=\n{{{{{z{{{{{{{{z{{z{{{{{{z{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{=\n{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{=\nz{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{z=\n{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{z{=\n{z{{{{{{{{{{z{z{{{{{{{{{z{{z{{{{{{z{{zzzz{z{{z{z{{z{z{z{{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{zzz{z{z{z{z{z{z{z{z{z{z{{z{zz{{{{z{{{{{{z{{z{{z{{{{{z{{{{z{{{{{{{{{{z{=\n{{{{{{{z{z{{{{{{{{{z{{z{{z{{{z{zz{z{{{z{z{{z{z{{z{{{{{{{{{{{{{{{{{{{z{{{{=\n{{{{z{{z{{{{{{{{z{{{{{{{{{{{{z{{z{z{{{{z{{zzz{{zzz{{{{{{{{{z{{z{z{z{zzz{{=\n{zzz{{{{{{{z{{{{{{z{{z{{z{{zzz{z{{zzzz{{{{{{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{=\n{{z{{z{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{{{z{{z{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{{=\n{z{{z{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{{{z{{z{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{{{=\nz{{z{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{{{z{{z{{z{{{{z{{z{{z{{{{{{{{z{{z{z{{{{z=\n{{z{{z{{{{z{{z{{z{{{{{{{{{z{{z{z{z{{{{z{{z{{z{{{{{{{{{{z{{{z{{zz{{z{z{z{z=\n{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz{{{{{{z{zzzzzzzzzz=\nzzzz{{{{{{{{z{{z{zz{{{{{z{{z{{{{{{z{z{{z{{{{{{{{{{zz{{{z{{{{{{{{{{{{{{{{{=\nz{z{z{{z{{z{{z{{z{{{z{{z{{{{{{{{z{z{{z{{{{z{{zz{z{{{{{{{{{{z{{z{z{z{{{{z{=\nz{z{z{{z{{{{{{{{{{{zz{{{{z{{z{{z{{{{z{{{{{{{{{{{{z{zz{{{{{zz{{z{{z{{{{{z{=\n{{{{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{z{zz{{{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{{z{{=\n{{{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{{z{{{=\n{{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{{z{{{{=\n{{{{{z{z{z{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{{{{{{{z{{z=\n{{z{{{{{z{zzzz{z{z{z{z{z{zz{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{{zz{z{z{z{z{z{z{z{=\nz{z{zz{{z{z{{{z{{{{{{{{{{{{z{z{{z{z{{{{{zz{z{{z{{{{{{{{z{{{{{{{{{{{{z{{z{=\n{{z{{{{z{{z{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{z{{{{{{{{{z{{{{{z{{=\n{z{{z{{z{{{{zz{{{z{{z{z{{{{{{{{{{{{{z{{z{{zz{z{z{zz{{{{{{{z{{{{z{{z{z{{z{=\n{{z{z{{zz{z{{{z{{{{{z{{{z{{z{{z{{{{{{{z{z{{z{{{{{{z{z{{z{{{{{z{z{{z{{{{{{=\n{z{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{z{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{=\nz{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{z{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{z=\n{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{z{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{{{{{{{z=\n{{z{{z{{{z{z{{z{z{z{{{{{{{{z{{z{{{z{zz{{z{z{z{z{z{{z{{z{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{=\nz{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz{{{{{{{zz{z{{zzz{z{z{zz{{{{{{{z{{zz{{{{{{{=\nz{z{{z{{{z{{z{zzzz{{{zzzz{zzzzzz{zzz{zzz{{zzz{{zz{zz{zzzz{z{zzzz{{zzzzz{{=\nzzz{{{{{{zzzz{zz{{zz{zzzz{{zzz{{{{z{{z{{{{z{z{{z{{z{zzzz{{zzzz{{{{{{z{zz{=\n{z{{z{zzz{{zzz{zzz{zzz{{{{zz{zz{{z{zz{{{zzzz{{{zzz{{{zzz{{{zzz{{{{zzzz{z{=\nzzz{{{{zzz{{zz{{{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{z=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{z{=\n{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{z{{=\n{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{{{{{{{{{{{{z{z{{z{{{{{{z{{zzz{z{z{z{z{z=\n{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{z{{z{z{z{z{z{z{z{{z{zz{z{{{z{{zz{{{=\nz{{z{{{zzz{{z{{z{{{zz{{z{{{z{{{{{{{{{{{{{{zz{{z{zzz{{zz{z{z{z{{z{{{z{{z{{=\n{z{{zz{zzz{zz{{zz{z{{zzzz{{{z{{zz{{{zzz{{z{{z{z{zz{z{{{zz{zz{z{{{z{{{z{zz=\nzzzzz{{zz{{z{{z{{z{z{{z{zz{zz{z{{{z{z{z{{zz{{z{{{z{{{z{{z{zz{zz{z{{{z{{{z=\n{{z{{z{zz{{z{zzz{{z{{zz{z{{{z{{{z{zz{{zz{{{z{{z{z{{{{z{{z{{z{{{z{{{{{z{z{=\nz{{z{{z{{z{z{{{{z{{z{{z{{{z{{{{{z{z{z{{z{{z{{z{z{{{{z{{z{{z{{{z{{{{{z{z{z=\n{{z{{z{{z{z{{{{z{{z{{z{{{z{{{{{z{z{z{{z{{z{{z{z{{{{z{{z{{z{{{z{{{{{z{z{z{=\n{z{{z{{z{z{{{{z{{z{{z{{{z{{{{{z{z{z{{z{{z{{z{z{{{{{{{z{{z{{z{{{{{z{{z{{z{=\n{{{{{{{{{{z{{{z{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=\n=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{zz{z{z=\n{z{z{z{z{{z{z{z{{{z{{{{zzz{z{{zz{{zzzz{z{{{{{zzz{z{{{z{{{{z{{z{{z{{z{{{z{=\nzz{{z{z{{{{z{{{z{zz{z{z{zzzzzzz{z{z{z{z{z{{zz{{z{z{{{z{zzz{{{{z{{{z{zz{zz=\n{{{z{{zz{zz{{zz{{{z{zz{{{{z{{{{z{{{{{zzz{zzz{{{{{{{{z{{zz{z{z{zzzzz{zz{{z=\nz{z{z{z{{{{z{{z{z{zz{z{zzzzz{zzz{{{{zz{{{{{z{zzz{z{z{z{zzzzzz{{zz{{{{{zz{=\n{{{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{z{{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{z=\n{{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{z{{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{z{=\n{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{z{{{{{z{{{{{{{{{z{{{z{{z{{{{{{{{{{{{z{{=\n{{z{{z{{{{{{{z{{{z{{{{{{{{{{z{{z{{z{{{{{z{{zz{zz{{z{z{z{z{z{z{{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{zzz{z{zz{{z{z{z{z{z{z{z{{z{zz{{{{{{z{zzzz{{{z{{zzzzz{{z{z{{zz{=\n{{{{{{{{z{{{{{z{{{{{{z{zz{z{{z{{{{{{z{z{z{{{z{zz{{z{z{{{{z{{{z{{{z{{{zz{{=\n{zzz{z{{{zzz{{{{{{zz{z{{z{{{z{{z{{{z{{{z{{{{{z{{{{zz{{z{z{{z{zz{z{{{zz{{z=\n{{z{z{{{z{z{{{z{{{{{{{z{{z{{z{{{{{z{z{zz{z{{z{{{z{{z{{{{zz{z{{zz{z{{zz{z{=\n{zz{{z{{z{{{{z{{zz{{z{{z{{z{{z{{{{z{{z{z{{{{{{{{{{{{{{z{{z{z{{{{{z{{{{z{{=\nz{z{{{{{{{{{{{{{{z{{z{z{{{{{z{{{{z{{z{z{{{{{{{{{{{{{{z{{z{z{{{{{z{{{{z{{z=\n{z{{{{{{{{{{{{{{z{{z{z{{{{{z{{{{z{{z{z{{{{{{{{{{{{{{z{{z{z{{{{{z{{{{z{{z{=\nz{{{{{{{{{{{{{{z{{z{z{{{{{{{{{{{{z{{z{{{{{{{{z{{z{{z{{{{{{{{{z{z{{z{{zzz{=\n{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{{z{z{z{z{z{z{zz{{z{{{=\n{{zzz{{zz{{z{zzzz{zzz{{zz{z{{z{{z{{{{z{{{{{z{{z{{z{{zz{zz{{z{z{z{{{zz{{z{=\nz{{{z{{{z{{zz{{zz{{zz{{{zz{{{zzz{z{{{zz{{z{{z{{zz{{z{z{zz{z{{{zz{{z{z{{zz=\n{z{{{z{{{{z{{{z{{{z{{{zzz{{{{{{zz{{z{zz{{z{z{z{{{zzz{zzz{z{{{{{z{{{zz{{z{=\nz{z{z{{{z{{zz{{z{zz{{z{{zz{{zzzz{z{z{z{{{{z{zz{{{{zz{{{{{{{z{{{{{{{{{z{{z=\n{{z{{z{{{{{{{{{{z{{{{{z{{{{{{{{{z{{z{{z{{z{{{{{{{{{{z{{{{{z{{{{{{{{{z{{z{=\n{z{{z{{{{{{{{{{z{{{{{z{{{{{{{{{z{{z{{z{{z{{{{{{{{{{z{{{{{z{{{{{{{{{z{{z{{=\nz{{z{{{{{{{{{{z{{{{{z{{{{{{{{{z{{z{{z{{z{{{{{{{{{{z{z{{z{{z{{{{{{{z{z{{{{=\n{{{{{{{z{{z{{z{{{{{{{z{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z=\n{z{z{zz{z{z{z{z{{z{zz{{{{{{z{zz{z{{{{{{{{zzz{{zzzzz{{{{{{{{{{z{{{{{z{{{{{=\n{{{zz{{z{{zz{{{z{z{z{z{{{{z{{z{zz{{{z{z{z{z{{{z{{zz{z{z{z{{{{{z{{z{{z{zzz=\n{{zz{zz{zz{{z{z{zz{zz{{{{{z{{{z{zz{{zz{z{zzz{z{zz{{z{{z{z{z{{{zzz{{{zz{{{=\nz{z{z{{{zz{{{{{z{z{z{z{{{z{{{zz{{{z{zz{z{{z{{z{zzz{{z{{{z{{{{{zz{z{z{z{{z=\n{{z{z{{{z{{z{{{{{{z{{z{{{{{{{{{{{z{{z{z{{z{{{{{z{{{{{{z{{z{{{{{{{{{{{z{{z=\n{z{{z{{{{{z{{{{{{z{{z{{{{{{{{{{{z{{z{z{{z{{{{{z{{{{{{z{{z{{{{{{{{{{{z{{z{=\nz{{z{{{{{z{{{{{{z{{z{{{{{{{{{{{z{{z{z{{z{{{{{z{{{{{{z{{z{{{{{{{{{{{z{{z{z=\n{{z{{{{{{{{{{{{z{{z{{{{{{z{{z{z{z{{{{{{{{{{{{{{z{{zzz{{z{z{z{z{z{z{z{z{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{z{zz{{zzz{z{z{z{{z{z{z{z{{z{zzz{{z{z{{{z{{{{zz{z{{z{zz{z{zzz=\n{z{{z{{z{{{{{z{{{{{z{{z{{z{zzz{z{{zzzz{{zzzzzz{z{z{{{{zzzzz{zzz{zzz{zzz{z=\nzz{{{{zzzz{zzzz{z{z{{{zzz{z{{zz{zz{zzz{{zzz{z{z{{{z{{{zzz{{zzz{{{zzz{z{zz=\nz{z{{{{zzz{{{{z{z{{zzzz{{{{zz{{z{{z{z{{zzz{{z{zzzz{z{zzzz{{zzz{z{zzz{{{{z=\nzz{zz{zzzz{z{zzzz{{zzzz{{{z{{z{{{{{{z{z{{{{{{{z{z{{z{{z{{{{{{{{{{{z{{{{{z=\n{z{{{{{{{z{z{{z{{z{{{{{{{{{{{z{{{{{z{z{{{{{{{z{z{{z{{z{{{{{{{{{{{z{{{{{z{=\nz{{{{{{{z{z{{z{{z{{{{{{{{{{{z{{{{{z{z{{{{{{{z{z{{z{{z{{{{{{{{{{{z{{{{{z{z=\n{{{{{{{z{z{{z{{z{{{{{{{{{{{{z{{z{z{{{{{{{{{z{{z{{{{{{{{{{z{z{z{{z{z{{{{z{=\nzzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{{z{{{{{{=\nz{z{{z{{{{{{{{{zz{{{{z{{{{{{z{{{{z{{{{z{z{{{{{{{{{{{{{{z{{z{{z{{{{{{z{{{{=\n{z{{{{{z{{z{{{{{{{z{{z{{{z{zz{{z{z{{{z{{{{{{{z{{{{{{z{{z{{{{{z{{{z{{{{{z{=\nz{z{{{{{z{{{{{z{{{{z{{{{{{{{{z{{{{z{{z{{{{z{{{z{{z{{{z{{{{{{{{{{{{{z{{{{z=\n{{{{{{{z{{{{{{{{z{{z{{z{{z{{z{{z{z{{{{{{{{z{{{{z{zz{{{{{{z{{{{{{z{{z{{{{{=\n{{{{{{{z{{z{{z{{{{z{z{{{{{{z{{z{{{{{{{{{{{{z{{z{{z{{{{z{z{{{{{{z{{z{{{{{{=\n{{{{{{z{{z{{z{{{{z{z{{{{{{z{{z{{{{{{{{{{{{z{{z{{z{{{{z{z{{{{{{z{{z{{{{{{{=\n{{{{{z{{z{{z{{{{z{z{{{{{{z{{z{{{{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{z{z{{{{{{z{=\n{z{{z{{{{{{{{{{{{{z{z{{zzz{{{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z{z{=\nz{z{z{z{z{{z{zz{z{{{{{{zzzzzzzzzzzzzzz{z{{z{{z{{{{{z{{{{z{{{{{{z{z{{z{{z{=\nz{{{{{{{{{{{{{{{{{z{z{{{z{{{{{{{{z{z{z{{{{{{{{{{{zz{{zz{{{{{z{z{{{{{z{{z{=\n{{{{{z{{{{{z{{{{{{{{{zz{{z{{{{{z{z{{{z{{{{z{z{{z{{{{z{{{{{{{z{{{{z{{{{{{{=\n{{{z{{{z{z{z{z{{{{z{{{{z{z{{{{z{{z{{{{{{{{{{{{{{{zz{{zz{z{{z{z{{{z{{{z{{{=\n{z{z{{{{z{{{{{{{{{z{{z{z{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{z{{z{z{{{{{{{{{{{{z=\n{{{{{{{z{{{{{{{{{z{{z{z{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{z{{z{z{{{{{{{{{{{{z{=\n{{{{{{z{{{{{{{{{z{{z{z{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{z{{z{z{{z{{z{{{{{{{{z=\n{z{{z{{{{{{{{{{z{{{{{{{{{{{z{{{z{{z{{{{{{{z{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{z{zzz{{{{{z{{z{zzzzzzzzzzzzz{{{{{{{{{{z{=\n{{{{z{{{{{z{{{{{{{{{{{{{z{{z{z{{z{{z{z{z{{{{{{{{{{{z{{z{{{{{{{{{z{{z{{z{{=\nzzz{{z{z{{{{{{z{z{{{{{{{{z{{{{{z{{{{{{{z{z{{{z{{{{{{z{{{{{{{{{z{{{{{{{{{z=\n{{{z{{z{z{{{z{{{{{z{{z{{z{{{z{{{{{{{{{{z{{{{z{{{{{{z{{{{{{{{z{{z{z{{z{{z{=\nzzz{{{{{{{{{{{{{{{{z{{z{{{{{{z{{{{z{{z{z{{{{{{{{z{{z{{z{{z{{{{{{{z{{{{z{{=\nz{z{{{{{{{{z{{z{{z{{z{{{{{{{z{{{{z{{z{z{{{{{{{{z{{z{{z{{z{{{{{{{z{{{{z{{z=\n{z{{{{{{{{z{{z{{z{{z{{{{{{{z{{{{z{{z{z{{{{{{{{z{{z{{z{{z{{{{{{{z{{{{z{{z{=\nz{{{{{{{{{{{{{{{{{z{z{{{{{{{{{{z{z{{z{{{{z{{z{{z{{{{z{{{{{{{{z{{z{{zzz{{z=\n{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz{{z{{{{{{{{{=\n{{{z{{{z{{z{{z{{z{{z{{{z{{{{{z{{{{{z{{z{z{{z{{{{{{{{{{{{{{{{{{{{{z{{z{{z{=\n{{{{{{{z{{{z{{{{{{{{{{z{{z{{{{{{z{{{{{{{{z{z{{z{{{z{{{{{z{{z{{{{{{z{{{z{z=\n{{{{{z{{z{{{{{z{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{z{{z=\n{{{z{z{z{{{{{{{{{{{{{{{z{{z{z{{z{{z{z{{z{{z{{{{{z{{{{{{z{{{{{{{{z{z{{{{{{=\n{{{{{{z{{{z{z{{{{{z{{{{{{{{z{z{{{{{{{{{{{{z{{{z{z{{{{{z{{{{{{{{z{z{{{{{{{=\n{{{{{z{{{z{z{{{{{z{{{{{{{{z{z{{{{{{{{{{{{z{{{z{z{{{{{z{{{{{{{{z{z{{{{{{{{=\n{{{{z{{{z{z{{{{{z{{{{{{{{z{z{{z{z{{z{{z{{{{{{{z{{z{z{{{{{{{{{z{{{{{{{{{{z=\n{{{{z{z{z{{{{{{z{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1D=\nd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{zz{z{z{z{z=\n{z{{z{z{{z{zz{{{z{{z{z{{z{z{{{z{{{{{{{{{{{z{{{{{{{{z{{{{z{z{{{{{{{{{{{z{{=\nz{{z{{z{z{{z{{{z{{{{{{{{z{{z{{z{{{z{{{z{{z{z{z{{{{{{z{{z{{{{z{{z{{{{{{{{{=\n{{{{{{z{{{{{z{{z{{{{z{{{{{{{z{{{{{{{{z{{{{{{z{z{{z{z{{z{{z{{z{{{{z{{z{z{{=\nz{z{{{{z{{{{z{z{{z{z{{{{{{{{{{{{{z{{z{{z{{z{z{z{{{{{{{{{{{{{{{{{{z{{{{{z{=\n{{z{{z{{{{z{{z{{{{{{{{z{{z{z{z{{{z{{{{{{{z{{{{z{{z{{{{{{{{z{{z{z{z{{{z{{{=\n{{{{z{{{{z{{z{{{{{{{{z{{z{z{z{{{z{{{{{{{z{{{{z{{z{{{{{{{{z{{z{z{z{{{z{{{{=\n{{{z{{{{z{{z{{{{{{{{z{{z{z{z{{{z{{{{{{{z{{{{z{{z{{{{{{{{{{{{{{{{{{z{{z{{{=\n{{{{{{{z{{z{{{{z{{z{z{z{{{z{{{{{{{{{z{z{{z{zz{{z{z{z{z{z{z{z{z{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{z{zz{{zzz{z{z{z{z{z{zz{z{{z{z{z{{{{{{{{{{{{{{{{{{{z{{z{z{{z{{{z{z{=\n{z{{{z{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{z{{{z{z{{z{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{z{{{{{{z{{z{z{{z{{z{{{{z{{{{{{{{z{{{{{z{{z{{{z{{z{z{{{{z{{{{{{{=\n{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{=\nz{{z{{z{{z{{{z{{{{{z{{{{{{{{{{{{z{{{{{{{z{{z{z{{{{{{{{{{{{{{z{{z{{{{z{{{{=\n{{{z{{z{z{{{{{{{{{{{{{{z{{z{{{{z{{{{{{{z{{z{z{{{{{{{{{{{{{{z{{z{{{{z{{{{{=\n{{z{{z{z{{{{{{{{{{{{{{z{{z{{{{z{{{{{{{z{{z{z{{{{{{{{{{{{{{z{{z{{{{z{{{{{{=\n{z{{z{{z{{z{z{z{{{{{{{{z{{z{{z{{{{{{{z{{{{{{{{{{{{{{{z{{{z{{{{{{z{zzzz{z{=\nz{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~=\n~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z{z{z{z{z{z{{z{z{{z{zzz{{z{{=\nz{{z{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{z{{z{{z{z{{z{{z{z{{{{{{{=\n{{{{{{z{{z{z{{z{{z{{z{z{{z{{{{{z{{z{{z{{{z{{z{{{{{{{{{{{{{{z{{{{z{{z{z{{{=\n{{z{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{z{{z{z{{{{{z{{z{{z{{z{{{{{z{{{{{z{{z{=\n{z{{{{{{{z{z{z{{z{z{{z{z{{z{{{{{{{{{{{{{z{{{{z{{{{{z{{z{z{{z{{{{{z{z{{{{{=\n{{{z{{z{{z{{{z{{{{{{{{z{{{{{z{z{{{{{{{{z{{z{{z{{{z{{{{{{{{z{{{{{z{z{{{{{{=\n{{z{{z{{z{{{z{{{{{{{{z{{{{{z{z{{{{{{{{z{{z{{z{{{z{{{{{{{{z{{{{{z{z{{{{{{{=\n{z{{z{{z{{{z{{{{{{{{z{{{{{z{z{{{{{{{{{{{{{{{{z{z{{z{{{{{{{{{{z{{z{{{{z{{z=\n{{{z{{z{{{{z{{{z{z{{{{z{zz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{=\nz{z{z{z{z{z{z{z{{z{z{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{{z{{z{{z{{{{z{{z{{z=\n{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{=\nz{{z{{z{z{z{{{{z{{{{{{{{{{z{{{{z{z{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{z{z=\n{{{{{{z{{{{{{z{{{{{z{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{{{{z{{z{z{{z{{{{{z{{{=\n{z{{z{{{{{{{{{{z{{{{{{{z{{z{{{{{{{{{{{z{{{z{{z{{{{{z{{{{{{{z{{z{{{{{{{{{{=\n{z{{{z{{z{{{{{z{{{{{{{z{{z{{{{{{{{{{{z{{{z{{z{{{{{z{{{{{{{z{{z{{{{{{{{{{{=\nz{{{z{{z{{{{{z{{{{{{{z{{z{{{{{{{{{{{z{{{z{{z{{{{{z{{{{{{{z{{z{z{{z{{{{{{{=\n{{{{{{z{z{{z{{z{{{{{{z{{{{{{z{{{{{{z{{{{{{{{{{z{{zzzz{{z{{z{z{{z{{z{{z{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{=\n{{{{{{{{{{{{{{{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{{z{z{{z{{z{{z{z{{{{{{{{{=\n{{{{{{{{z{{{{{{z{{{{{{z{{{{zz{z{z{{z{{zzz{{z{{{{{{{{{{{{{{{{z{{z{{{{{z{z{=\n{z{{z{{{{{{z{{z{{z{{z{{z{{{{{{{{z{zz{{z{{{{zz{zzzz{zzz{{{{{z{{{{{z{{{{{{z=\nzz{z{zzzz{z{{z{{z{{z{{{{{{{{z{{zzz{{z{{zzzz{{{{{z{z{{z{{{{{{{{{{{{z{{z{{z=\n{{z{{z{{{{{{{{{{{z{z{{{{z{{{{{{{z{{z{{z{{{z{{z{{{{{{{{{z{{z{{z{{{{{{{{{{z=\n{z{{{z{{z{{{{{{{{{z{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{{{z{{z{{z{{{{{{{{{{z{=\nz{{{z{{z{{{{{{{{{z{{z{{z{{{{{{{{{{z{z{{{z{{z{{{{{{{{{z{{z{{z{{{{{{{{{{z{z=\n{{{z{{z{{{{{{{{{{{{{z{z{z{{z{z{{{{{{{{{{{z{{z{{{{{{z{{{{{{z{{{{{{z{{z{{{{=\nz{{zz{z{z{z{z{z{zz{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}|=\n|~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz=\n{{{{{{{{zzzzzzzzzzzzzzz{z{z{{z{{z{{z{z{{{{{{z{{z{{{{z{{z{{{{{{{{{z{zz{{{z=\n{{z{{z{z{{z{z{{{{{{{z{{{{{{{{{z{{z{{{{{{{{{z{{{{{{{{z{{z{{{z{{z{{{{{z{z{{=\n{z{{{{z{z{{{{{{z{{{{{z{z{z{zz{{{zz{{{{{{{{{{{{{{z{{{z{{{{{{zz{{{{{zz{{{z{=\n{{{{{{{{{z{{z{{z{z{{{{{{{z{{{{{{{{z{z{{z{z{{z{{{{z{{{z{{z{{{{{{{{{{{{{{{{=\n{z{{z{{z{{{{{{{{{z{z{{z{{{{{{{{{{{{{{z{{z{{z{{{{{{{{{z{z{{z{{{{{{{{{{{{{{=\nz{{z{{z{{{{{{{{{z{z{{z{{{{{{{{{{{{{{z{{z{{z{{{{{{{{{z{z{{z{{{{{{{{{{{{{{z=\n{{z{{z{{{{{{{{{z{z{{z{{{{{{{{{{{{{{z{z{{z{{z{{{{{{{{{{{{{{{z{{z{z{{{{{{{{=\nz{z{{{{z{z{{{{z{z{{{{{{{z{{{zzzz{{z{z{z{z{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\nzzz{z{zz{z{z{{z{z{z{z{z{{z{zz{{{z{{z{z{{{{{{{{{{{{z{{{{{{{{{{{{zz{{{{z{z{=\n{{{{{{z{{{{{{{z{{z{{zz{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{z{z{{{{z{{z{{z{{=\n{z{{z{z{{{{{{z{z{{zz{{z{{z{{{zz{{z{z{{z{{z{{{{{z{{{{{{{{z{zz{{z{{{{{z{z{{=\nz{z{{{z{{{{z{z{z{zz{zz{z{{{{{z{z{{z{z{{{{{{{{{{{{z{{z{{{{{z{{z{{{{{{{{{{{=\nzz{z{{{{{{{{{{{{z{{z{z{{z{z{z{{{{{{{{{{z{{z{z{{{{{{{z{{z{{{z{{z{z{{{{{{{{=\n{{z{{z{z{{{{{{{z{{z{{{z{{z{z{{{{{{{{{{z{{z{z{{{{{{{z{{z{{{z{{z{z{{{{{{{{{=\n{z{{z{z{{{{{{{z{{z{{{z{{z{z{{{{{{{{{{z{{z{z{{{{{{{z{{z{{{z{{z{z{{{{{{{{{{=\n{{z{{z{{{z{{{z{{{{{{{{{{z{{z{{{{{z{{{{{{z{{{{{{{z{{z{{{z{z{zz{z{z{z{z{z{z=\n{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{z{z{zz{{{{{{{{zz{{z{zz{z{z{=\nzz{{z{{z{z{{zz{{z{{{{{{z{{z{{{{z{zzzzz{zz{{zzzz{zzzzz{z{z{{z{{zzz{zz{zzz{=\n{{{zzz{{zzzz{{zzz{{zz{zz{zzz{{{zzzz{{zz{{z{{{{{{z{z{{z{{{{z{{{{zzz{z{{zzz=\n{{z{{zz{zz{{z{z{zzzz{{zzz{zzz{zzz{{{{{z{z{{{z{zz{{{zzz{{{{zzz{z{zzz{z{zzz=\n{{{{zzzz{{{zzz{z{{zzz{z{z{{{z{{z{{z{{z{{{{{{{{{{{{{{{z{z{z{{z{{{{{{{{{z{{=\nz{{{{{{z{{{{{{{{z{z{z{{z{{{{{{{{{z{{z{{{{{{z{{{{{{{{z{z{z{{z{{{{{{{{{z{{z=\n{{{{{{z{{{{{{{{z{z{z{{z{{{{{{{{{z{{z{{{{{{z{{{{{{{{z{z{z{{z{{{{{{{{{z{{z{=\n{{{{{z{{{{{{{{{z{{z{z{{z{{{{{{z{{{z{{{z{z{{z{{{{{{{{{{{{{{z{{{{{{z{{{z{{{=\n{{{{{{z{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{zz{z{z{z{z{z{z{z{z{{z{=\nzz{{z{z{z{zz{{{z{{z{{{zzzz{{{{{{{{zz{z{{{{{z{{{{{{{{{{{{{z{{zz{zz{{zz{{zz=\n{zz{{{{{{{{{{{zz{zzz{zzz{z{{{zz{z{{zzz{{z{{zz{zzz{zz{{zz{{z{{zz{z{{{z{zz{=\n{{{zzzzzz{z{zz{{z{{z{{zz{{{{{z{{zz{z{{{z{{{z{{z{{{z{{{z{{z{{zz{zz{zz{z{{z=\nz{{{zz{z{{z{{zz{z{{zz{{zz{zz{z{{zz{{{z{{zz{z{{{{z{{{{{{{{{{{{{z{{z{{z{z{{=\nz{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{{{z{{z{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{{{z{{z=\n{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{{{z{{z{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{{{z{{z{=\n{{{{{{{{{{z{{z{{z{{{{{{{{{z{{{z{{z{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{z{{z=\n{{z{z{z{{{{z{z{{{z{{{{z{{z{z{{z{zzz{{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{|=\n|~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{=\nzz{z{z{z{z{z{z{z{z{{z{zz{z{{{{{{{zzz{z{{zz{{zzzz{{z{z{{zzz{{{{z{z{{{z{{z{=\n{z{z{{zz{{z{{zz{{z{{{z{{{z{{z{{z{{z{{z{z{z{{{z{{zzzzz{{zz{{{{zzzz{z{{{z{{=\n{z{z{{{zz{{z{{zz{{{{z{{z{{z{z{{z{{{z{{zz{zzz{{{{z{{{z{{zz{zz{{zzzzz{zz{{z=\nz{z{z{{{{{{zz{z{z{zz{{{zzzzz{{zz{{{{zz{{z{{{zzz{{z{z{z{{zzzzz{{zz{{z{{zz{=\nz{z{{z{z{{{{{{{{{{{{{{{{{z{{{z{{z{{{{{{{{{{z{{z{{z{{{{z{{{{{{z{{{z{{z{{{{=\n{{{{{{z{{z{{z{{{{z{{{{{{z{{{z{{z{{{{{{{{{{z{{z{{z{{{{z{{{{{{z{{{z{{z{{{{{=\n{{{{{z{{z{{z{{{{z{{{{{{z{{{z{{z{{{{{{{{{{z{{z{{z{{{{{{{{{{{{{z{z{{z{{z{{{=\n{{{z{z{{z{{z{{z{{z{{{z{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{z{zzz{{z{z{z{z{z{z{z{=\nz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{z{{zzzz{{{z{{zzzzz{{=\nz{{{{zz{{{z{{{{{{{{{{{{{{{{{{{z{{z{{{zz{z{{zz{{zz{{zzzzzzz{{z{{{z{z{z{{z{=\nz{{{{z{{{{zz{z{{z{{zz{{zz{{{zz{zz{z{{z{{{z{z{{{{zz{{z{z{z{{zz{z{{{zzz{{{{=\nz{zz{{z{z{{{z{{{z{{{z{{z{{z{{z{{z{z{{zzz{{z{z{z{{{{{z{zz{z{{zz{{{{zz{z{{z=\nz{{zz{z{{z{{z{zz{{{{{z{{{{{{{{{{{z{z{{z{{z{{{z{{{{z{{{{{{{z{{z{{z{{{{{{{{=\n{{z{{{z{{z{{{z{{{{{{{z{{z{{z{{{{{{{{{{z{{{z{{z{{{z{{{{{{{z{{z{{z{{{{{{{{{=\n{z{{{z{{z{{{z{{{{{{{z{{z{{z{{{{{{{{{{z{{{z{{z{{{z{{{{{{{z{{z{{z{{{{{{{{{{=\n{z{{z{z{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{{{{{z{{z{{{{{{z{=\n{z{{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz{{=\nz{{{{zzzz{{zz{{z{zzzz{zzz{zzz{{z{{{{z{{z{{z{z{z{{z{{{zz{zz{{z{{z{{{z{z{z{=\nz{{{{{{{z{z{z{z{{{zz{z{{{z{zz{{zz{{{z{zz{{{z{z{z{{zz{{z{{zz{z{z{{{zz{{{{z=\n{{{{z{{{z{z{z{z{{zz{{{{{{z{{zz{z{z{z{z{{{{zzzz{zzzz{{{{{{z{{{z{{{z{{{zz{{=\nz{{{{zz{{z{zz{zz{{{z{z{zzz{{{z{{{{{{{{zzz{{{z{z{{z{{z{{z{{{{{{{{{{z{{{z{{=\n{{z{{z{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{=\n{z{{z{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{=\nz{{z{{{{{{{{{{z{z{{z{{z{{{{{{{{{{{{z{{z{{z{{z{{{{{z{{z{z{{z{{z{z{z{{{{{{{=\n{z{{{z{z{{z{{{{{z{z{{{{{{z{z{z{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z=\n{z{z{z{z{z{z{z{z{z{z{zz{{{{z{{{zz{z{{{z{{{{zzz{{zzzzz{z{{{{z{{{{{{{{{{{{{=\n{{{z{z{{z{{{z{{z{z{zz{zz{{{{z{{z{{{z{{{z{z{z{{zz{{{z{z{{{zzz{z{{z{z{z{{{z=\nz{zz{{zz{z{{z{{{{{z{{{z{z{{z{z{z{zz{{z{{z{{z{{z{z{z{{{{zz{{{zz{{{z{{{z{z{=\nz{{{{z{z{z{z{z{z{z{z{zz{{{z{z{zz{{z{{z{{zz{zz{{{z{{z{{zzz{zz{zz{z{{{zz{{{=\n{{z{{{{{{{{{z{z{z{{{{{{{z{{{{{{{{{z{{z{z{{{{{{{z{{z{{z{{z{{z{z{{{{{{{{z{{=\nz{z{{{{{{{z{{z{{z{{z{{z{z{{{{{{{{z{{z{z{{{{{{{z{{z{{z{{z{{z{z{{{{{{{{z{{z=\n{z{{{{{{{z{{z{{z{{z{{z{z{{{{{{{{z{{z{z{{{{{{{{{{{{z{{z{{z{z{{{{{{{{{{{z{{=\nz{{{{{{{{{{z{{{{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{z{{z{{zzzz{z{z{z{z{z{z{z{{z{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{z{z{{{{{z{{{z{{zz{z=\n{zzz{{{{{z{{{{z{z{z{{{z{{z{{{zzzzzz{zzzzzzz{{zzz{{{z{{{{{{zzzz{zzz{zzz{zz=\nzzz{{{zz{{zzz{zzzz{zzz{zzz{{zzz{zzzzzzz{z{z{z{{{zzz{{zzz{{zzzz{z{zzz{z{{{=\n{zzz{z{{z{z{{zzzz{z{{z{{{z{z{{{{{zzz{{z{{zzz{{{zzzz{{zzz{z{zzz{z{{zzz{z{z=\nzzzz{z{zzzz{{zzz{{z{z{{z{{{{{z{{z{{z{{{{{{{z{z{{{{{z{{z{{z{{{{{{{{{z{{z{{=\n{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{z{{{=\n{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{z{z{{=\nz{{{{{{{{{{{z{z{z{{z{{{{{{{z{z{{z{{{{{{z{{{z{{{{{{{z{{z{{z{{z{{{{{{{{{{{z=\n{{z{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||=\n~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zzz{z{z{z{z{z{z{z{z{=\n{z{z{z{z{{{{z{{{z{{{z{{{{zz{{{{z{{{{z{{{{z{{{{{{{z{{{{{{{{z{{{{{z{z{{z{{{=\nz{{{{z{{{{{{z{{{{{{z{{{{{z{{{{{z{{z{{z{{{{{z{{{{{{z{{{{{z{{z{{{{{{{z{{{{{=\nz{z{{{z{{z{{{{{{{{z{z{{z{{{z{{{{z{{{{z{{{z{{{z{{{{z{{{z{{{z{{{z{{{{{z{{z{=\n{{{z{{{z{z{{{{{{{z{{{{{{{z{{z{{{{z{{{{{{{z{{{z{{{z{{{{{z{{{{{{{{{{{{{z{{{=\n{{{{{z{{{{{{{{{z{{z{{z{{{{{{{{z{{z{{z{z{{z{{{{{{{{z{z{z{{z{{{{{{{{z{{z{{z=\n{z{{z{{{{{{{{z{z{z{{z{{{{{{{{z{{z{{z{z{{z{{{{{{{{z{z{z{{z{{{{{{{{z{{z{{z{=\nz{{z{{{{{{{{z{z{z{{z{{{{{{{{{{{{z{{z{{z{{{{{{{{{{{{z{{z{{{{{{{{z{{z{{{z{{=\n{{{z{z{{{{{{{{{{{{{z{{z{z{z{{{{{z{zz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{=\n{{z{zzz{zz{{z{z{z{z{z{z{z{{{z{zzz{{{{{z{{zzzzzzzzzzzzzzz{z{{{{z{{{{{{{{{z=\n{{{{{{{z{z{{z{{{z{{{{{{{{{{z{{{z{{{{z{z{{{{z{z{{{{z{{{{{{z{{{{{{{z{{z{{{{=\n{z{z{{{{z{{{{{{{{z{z{z{{{{z{{{z{{z{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{z{{{{{{{z=\n{{{{z{{{z{{{{{{{z{{{z{z{{{{{{z{{{{z{{{{{z{{z{{{{z{z{{{{{zzz{zzz{{z{{{{{{{=\n{{{{z{z{{z{{{z{{z{{z{{z{{{{z{{z{{{{{z{z{{z{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{z=\n{z{{z{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{z{z{{z{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{z{=\nz{{z{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{z{z{{z{{{{{{{{{{z{z{{z{{z{{{{{{{{{{z{{{=\nz{{z{{{{{{{{{z{{z{{{{{{{{{{{z{z{{{{{z{z{{z{z{{z{{{{{{{{{{{z{z{zzz{{z{z{z{=\nz{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}=\n||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zzz{z{z{z{z{z{{z{zz{{z{z{{{{{{{{z{zzzzz=\nzzzzzzzz{{{{z{{{{z{{z{z{{{{{z{z{{{{{{{{{{{{{z{{z{{z{{{{{{{{z{{{{{{z{{{{{{=\nz{{{z{{z{{{{{z{z{{{{{{z{z{{{{{{z{{{{{z{{z{{{{{{{{z{{{z{zz{{{{{z{{{z{{{{{z=\n{{z{{z{{z{{{{{z{{{{{z{z{{{{z{{{{{{{{{{z{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{z{{=\n{{{{{z{{{{zzz{{z{{{{z{{z{z{{zz{{{{{{{{{{{{z{{{{{{z{{{{{{{z{z{{{{{{{{{z{{z=\n{{z{{{{{{z{z{{{{{z{{z{z{{{{{{{{{{{{z{{z{{{{{{z{z{{{{{z{{z{z{{{{{{{{{{{{z{=\n{z{{{{{{z{z{{{{{z{{z{z{{{{{{{{{{{{z{{z{{{{{{z{z{{{{{z{{z{z{{{{{{{{{{{{z{{=\nz{{{{{{{{{{{z{{z{z{z{{{z{{{{{{z{{z{{z{{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{=\n{z{{z{{{z{{{{{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=\n=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{z{z{z{{z{z=\n{zz{z{{{z{zz{z{z{{z{{{{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{z{{{{{{{z{{z{{z{{z{{{=\n{{{{{{z{z{{z{{{{z{{{{{{z{{{{{{{{{{{{z{z{{{{{{z{{{{{{{{z{{{{{z{z{{{{{{{z{{=\n{{{{{{{{{{{{{z{{{{z{{{{z{{{{{{{{{{{{{z{z{{{{z{{{{{{{z{{{{z{{z{z{{{{z{{z{{=\nz{{z{{{{z{{{{z{z{z{{z{{{{{z{{z{{{{z{{{{{{{{{{z{{{{{{{{{{{z{z{{z{z{{z{{{z{=\n{z{{{z{{z{{{{{{{z{{z{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{z{{z{z{z{{{{{{{z{{{{{=\n{{{{z{{{{{{{{{{z{{z{z{z{{{{{{{z{{{{{{{{{z{{{{{{{{{{z{{z{z{z{{{{{{{z{{{{{{=\n{{{z{{{{{{{{{{z{{z{z{z{{{{{{{{z{{z{{z{{{{{{{{{{{{{{{z{{z{{{{{{{{{z{{z{{{{=\n{{{{{{{z{{z{z{{z{{z{{z{{z{{{{{{{{z{{{z{z{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{=\n{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{z{zz{{{zz{z{z{z{z{z{z{{z{z{z{zz{{{{{{{{{{z{z{{z{{z{{{{{{z{z{{{{=\n{z{z{{z{{{{z{{z{{{{{{{{z{{{{z{{z{z{{{{{{{{{{{{{z{{z{{{z{{z{z{z{z{{{{{{{{z=\n{{{{z{{{z{{{{{z{{{{{{z{{z{{{{z{z{{z{{z{{z{{{z{{{{{z{{{z{{z{{z{z{z{{{{{{z{=\n{{z{{{z{{{{z{{{{{{{{{z{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{{{{{{z{{{{z{{z{{z=\n{{{z{{z{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{z{{z{z{z{{{z{z{{{z{{{{=\nz{{z{{z{{{{{{{{{{z{{z{{{{z{z{{{z{{{{z{{z{{z{{{{{{{{{{z{{z{{{{z{z{{{z{{{{z=\n{{z{{z{{{{{{{{{{z{{z{{{{z{z{{{z{{{{z{{z{{z{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{z=\n{{{z{{z{{{{{{{{z{z{z{{{{{{{z{{z{z{z{{{{{{{{{{{{{{{{{{{{z{{z{z{{{{{{{{zz{z=\nz{{z{z{z{z{{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zzz{z{z{z{z{z{z{z{z{{z{zz{{{z{{z{{=\n{{{{{{{{z{{{z{{{{{{{z{{{{{{{{{{z{{{{{{{z{z{{z{{{{z{{{{{{{{{z{{z{{z{z{{{{{=\n{{{{{{{{{{{{{{{{z{{z{{{{{z{{{z{{{z{z{{{{{z{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{=\n{{{{{{z{{{{{{{{{{z{{{{{{{{{z{{{{{{{{z{z{{{z{{{z{z{z{{z{{{{{z{{{{z{{{z{{z{=\nz{{{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{{z{{z{{z{{{{{z{{{z{z{{=\n{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{z{z{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{z{z{{{=\n{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{z{z{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{z{z{{{z=\n{{z{{{{{{z{z{z{{z{{{{{{{z{{{{{{z{{z{{{{{{{{{z{z{{z{{{{{{{{{{z{{z{z{{z{{z{=\n{z{{{{{{{{{{z{{z{z{{zzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{=\n{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{z{z{z{z{=\nz{z{z{z{z{z{zz{z{{{{{{z{z{{z{z{{{{{{{z{{z{{{{{z{{z{{z{{{{z{{z{{{{{{{{{z{{=\n{{{{z{{z{{{{{{{{{{{{{z{{z{z{{z{{z{{{{z{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{z{z{{=\n{{z{{z{z{z{{z{{z{z{{{{z{{z{z{{{z{{z{{{z{{{{z{{z{z{{{{{{z{z{{{{{z{{{{{{{{{=\n{{{{z{{z{{{z{{{{z{{{{{{{{{z{{{{{{{{z{{{{{z{{z{{z{{z{z{{z{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{{{{{{z{z{z{{{z{{z{{z{{{{{{{{{z{z{{z{{{{{{z{z{{z{z{{{{{{=\nz{{{{{{{{{z{z{{z{{{{{{z{z{{z{z{{{{{{z{{{{{{{{{z{z{{z{{{{{{z{z{{z{z{{{{{{z=\n{{{{{{{{{z{z{{z{{{{{z{{{{{{z{{z{{{{{{{{{{z{{z{{{{z{{z{{{{{{z{z{{z{{{{{{{{=\n{z{{z{{{z{{{{{{{{{{{{{z{{{{z{z{{z{{{{{{{{z{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{z{zzz{zzz{{{{{z{{{{{z{{{{{{z{zz{{{z{{z{{{{{{{{{{{z{z{{{{{{{z{{z{{{{=\n{{{{z{{{{{{{{z{{z{{{{{z{z{{{{{{{z{z{z{{z{{z{{{{{{{{z{{{{{z{{{{z{{z{z{{{z{=\n{z{{z{{{z{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{z{{{{{{{{=\nz{z{{{{{{{{{{{{z{{z{{{z{{z{{{{{{{{{{z{{{{z{z{{z{{{{z{{z{{{{{z{{{{{z{{{{{{=\n{{{{{{{{{{z{z{z{{z{{z{z{z{z{{z{{z{{{z{{z{{{z{{{{{{{{z{{{{{{{{{z{z{{z{{{{{=\n{{{{{z{{{{{{{{{{{{z{z{{{{z{{z{{z{{{{{{{{{z{{{{{{{{{{{{z{z{{{{z{{z{{z{{{{{=\n{{{{z{{{{{{{{{{{{z{z{{{{z{{z{{z{{{{{{{{{{{{{{z{{{{{{{{{{z{{z{{z{{{{{{z{{{=\n{{{{z{{z{{{{{{{{z{{z{{{{{{{{{z{{{z{{z{{z{z{{{{{z{{{{{{{{{z{{z{{{{zz{z{{z{=\nz{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~=\n}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z{z{z{z{{z{z{{z{z{z{z{zz{{{{{{{{{{z{{=\nz{{z{{{{{{z{{z{{{{{{{{z{{z{{{{{z{{z{{{{{{{z{{{{{{z{{z{{{{{{{{{{{{{{{z{{z{=\n{{{{{z{{{{z{{{{{{{{{{{{{{{{{{z{{{z{z{{{z{z{{z{{{{{z{{{z{{z{z{z{{z{{{{{{z{=\n{z{{z{{z{{{{z{{{{z{{z{{{{{{{z{{{z{z{z{{{{{{z{{{{{{{{{z{{z{{{{z{{{{{{{{{z{=\n{{{{{{z{z{{{z{z{{{{{z{{z{{z{z{{z{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{z{{{z{{{z=\n{{{{{{z{{z{{{{{{{{{{z{{z{{z{{{z{z{{z{{z{{{{{{z{{{{{{z{{{{{{z{{z{{{z{z{{z{=\n{z{{{{{{z{{{{{{z{{{{{{z{{z{{{z{z{{z{{z{{{{{{z{{{{{{z{{{{{{{z{{z{z{z{{{{z{=\n{z{{z{{{{{{{{{{{{z{{{{z{{z{{{{{{{{{{{z{{{{{{{z{z{{z{{{{{{{{{{{{{{{{z{{{{{=\nz{{z{z{{{{{{z{z{zzz{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{z{z{z{z{z{z{z{=\nz{z{z{zz{{z{{z{{z{{{{{{{{{{z{{{{{{{{{z{{z{{{{{{{{z{z{{{{{{z{{z{{{{z{{{{{{=\n{{{z{{{z{{z{{z{{{{{{{{z{{z{{{{z{{{z{{z{{z{{z{z{{z{{{{{{{{{{{{{{{{{{{z{{{{=\n{z{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{z{{{{{{{z{{z{{{{z{{z{=\nz{{{{{{z{{{{z{{z{{{{{{z{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{z{{{z{{{{{z{{{z{{=\nz{{{{z{z{{z{{{{{{{{z{{{z{{z{{{{{{z{{z{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z=\n{{{z{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{z{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{=\n{{z{z{z{{{{{{{{{{z{{{{{{{z{{{z{{z{{z{z{{{{z{{{{{{z{{z{z{z{{{{z{{z{{{{{{{{=\n{z{z{{z{{z{{z{{{{{z{{{{{{{{{{z{{z{{{{zzzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{z{zz{{{z{z{z{z{z{z{z{z{z{z{z{zz{{{{{{{{{{z{{z{{z{{{{z{{z{z{{{{{{{z{z{z=\n{{{{{z{{z{{{{{{{z{{{{z{{z{z{{{z{{{{{{{{{z{{z{z{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{z{{z{{z{{z{{{z{{{{z{z{{{{{{z{{{z{{z{{{{{{{z{{z{{z{{z{z{{z{{{{{z{{{{z{=\n{{{{{{{{{z{{{{{{{{z{{{{{{{{z{{z{{{{{{{{{{{{z{z{{{{{{{{{z{{z{{z{{{z{{z{z{{=\nz{{z{{z{{{z{{{{{z{{{z{{{{{{{z{{{{{{{{{{{z{z{{{{{{{{{{{z{z{{{{{{{{{z{z{{z{=\nz{{z{{{z{{z{z{{{z{{z{{{{{{{{{{{{{{z{z{{z{{{z{{z{z{{{z{{z{{{{{{{{{{{{{{z{z=\n{{z{{{z{{z{z{{{z{{z{{{{{{{{{{{{{{z{{z{{z{{{{{{z{z{{{z{{{{{{{{{{{{z{{{{{{z=\n{{{{{{{{{{{z{{{{{{z{{z{{z{{{{{{{z{{{{{{z{z{{{{z{{z{{z{{{{{{{{z{{zz{z{z{z{=\nz{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}=\n}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{z{z{z{z{z{z{z{z{z{z{zzz{{z{z{{z{{{{{{=\n{{{{{z{{{{{{{{z{z{{{{{{{{{{{{{{{{{{z{z{{{{{{z{{{{{{{{{{{{z{z{z{{{{{{{{{{z=\n{{z{{{{z{{z{z{{z{{z{{z{{z{z{{{{{{{{{{{{{z{{{z{{{{{{z{z{{{{z{{{{{{{z{{z{{{=\n{{{z{{{{{{{{{{z{{{{{z{{{{z{z{{z{{{{{z{{z{{{{{z{{z{{{{{{{{z{z{{z{{z{{{{{{z=\n{z{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{z{{{{z{{z{{z{z{{{{{{z{{=\nz{{z{{{{{{z{{z{{z{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{z{{z{{z{z{{{{{{{{z{{{{{{=\n{{{{{{{{{z{{z{{z{{z{z{{{{{{{{z{{{{{{{{{{{{{{{z{{z{{z{{{{{{{{{{{{{{z{z{{{{=\n{{{{{{z{z{z{{z{{{{{{z{z{{{z{{z{{{z{{{{z{{{{{{{{{{{{{z{{z{{{z{{{{{{{{z{{{{=\n{{{{{{z{{z{{z{zzzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=\n=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{z{z{z{z=\n{z{z{z{z{z{z{{z{{{{{{{{{z{{z{{z{z{{{{z{{z{{{{{{{z{{z{{{z{z{z{{z{{{{{z{{z{=\n{{z{{z{{z{{z{{{{{{{z{{z{{z{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{z{{z{z{{z{z{{{{{=\n{{{{z{{{{{{{z{{{{z{{z{{{{{{z{{z{{{z{{z{{z{{{{z{z{{{z{{{{{{{{{z{z{{{{{{{{z=\n{{{{{{{{z{{z{{{{z{{{{{{{{z{{{{{{{{z{{z{z{{z{{{{{{z{{z{z{{z{z{{z{z{{{z{{z{=\n{z{{{{{{{{{{{{{z{{{{{{{z{{{z{{{{{{{{z{{{{{{{{{{{{{z{z{{z{z{{{{z{{z{{z{{z{=\nz{{{{{{{{{{{{{{{{{z{z{{{{z{{z{{z{{z{z{{{{{{{{{{{{{{{{{z{z{{{{z{{z{{z{{z{z=\n{{{{{{{{{{z{z{{z{z{{z{{{{{z{{z{{z{{{{{{{{{{{z{{z{{{{{{{{{{{{z{{{z{{{{{z{{=\nz{{z{{z{{{{{{{{{{{z{{z{{{{z{{z{{z{{{z{{{{{{z{zzz{{z{z{z{z{z{z{{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{=\n{{{{{{{{{{{{{z{zz{{z{z{z{z{z{z{z{z{z{z{z{zzz{z{z{z{z{{{z{{z{{{z{z{{z{{z{z=\n{z{z{{z{{z{{{{{{z{{{z{z{{z{{{z{{{z{{z{{z{{z{z{{z{{z{{z{{z{z{z{{{z{z{z{z{z=\n{z{{{z{z{z{z{{z{{{{z{{{{z{z{z{z{z{{z{z{z{{{z{{{z{{z{z{z{{{z{{z{{{z{{z{{z{=\n{{{{{z{{{z{z{z{z{{{{z{z{z{z{{z{z{z{z{{z{{{z{{{{z{z{z{z{{z{z{z{{{z{{{{z{{{=\nz{z{z{{z{{{z{{{{z{{{{{z{{z{{z{{{z{z{z{z{z{z{{{z{z{z{{z{{{z{z{z{z{{z{z{z{z=\n{z{z{z{{{z{{{{z{z{{z{{{z{{z{{{z{z{z{z{z{z{z{z{z{{{z{z{{z{{{z{{z{{{z{z{z{z=\n{z{z{z{z{z{{{z{z{{z{{{z{{z{{{z{z{z{z{z{{{{z{{{{z{{{z{{z{{z{{z{{z{z{z{z{z{=\n{{z{{z{z{z{z{z{{{z{{{z{z{z{{z{{z{{z{{z{z{z{z{z{{z{{z{z{{z{{z{{z{{{z{z{z{{=\nzzz{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z{z{z{z{z{z{z{z{z{z{z{{z{{=\n{z{{{{z{{z{{{z{{{z{{{z{{{{{{{z{{z{{z{z{z{{z{z{{{z{{z{z{{z{{z{{z{{{z{{{z{{=\nz{{z{{z{{z{{{{z{z{{z{{{z{{{z{z{{{z{{{z{{z{z{{z{z{{z{{{z{{{{z{{{{{z{z{{z{{=\nz{{z{{{{z{{z{{{{z{{z{{z{{z{z{z{{z{{z{{{{{z{z{{z{{{z{{z{{{z{{{z{{{z{{z{z{{=\nz{{z{{{z{{{{{z{z{{z{z{{z{{z{{{{z{{{z{{z{z{{z{z{{z{{z{{z{z{{{z{{{z{{{{z{z{=\n{{{z{{z{z{{{z{{{z{{z{{{z{{{z{{{{z{{{z{z{{{z{{z{z{{z{{{z{{{z{{{z{{{{{z{{{{=\n{z{{{z{{z{z{{z{{{z{{{z{{{z{{{{{z{{{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{z{{z{z{{=\nz{z{{z{{{{z{{{z{{{{{{{{{{{z{{z{{{{{z{{{z{z{{z{{z{{{z{{z{{z{{z{{z{{{z{{{z{=\n{z{{{{z{{{z{{z{{z{{z{{{z{zzz{z{z{z{z{z{{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzz{z{z{zz{zz{z{zz{zzzzz{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{z{z{zz{z{zz{z{zz{z{z{z{z{z{z{z{=\nz{z{zz{z{zz{z{zzz{z{z{z{z{z{z{zzz{z{z{zzz{z{z{z{z{z{z{z{z{z{z{zzz{z{z{z{z=\n{zz{z{z{z{z{zz{zz{z{z{z{z{z{z{zz{z{zz{z{z{z{z{z{z{z{z{zz{z{zz{z{z{z{z{z{z=\n{z{z{z{z{z{zz{zz{z{zz{z{z{zz{z{z{z{zz{z{z{z{z{zz{z{z{z{zz{z{zz{z{zz{z{z{z=\n{z{z{zz{zz{z{zz{zzz{z{zzzz{z{z{z{z{z{z{z{zz{zz{z{zz{zzz{z{zzzz{z{z{z{zz{z=\n{z{zz{z{z{zz{zz{z{z{z{z{z{z{z{z{zzz{z{zz{zzzzzzzzzz{z{z{zzzz{z{zz{z{z{z{z=\n{zz{z{z{z{z{z{z{z{z{z{zz{z{z{zz{z{zz{z{z{z{z{z{zz{zz{z{{z{z{z{z{zz{z{{z{{=\n{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{=\n{{{{{{{{{{{{{{{{{{{{z{zzz{zzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzz{zzzzz{zzz{zz=\nzz{zz{z{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzz=\nzz{zzzzz{zzzz{zzzzzzzzzzzzzzzzzzz{zzzz{zzzzzz{zzzzzzzzzzzzz{z{zzzzzz{zzzz=\nzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzz{zzzzzzzzzzzz{zzzzzzzzzzzzzzz{zzzzzzzzzzzz=\nzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzz{zzzz{zzzzzz{zzzzzzzzz{zzzzzzz=\nzzz{zzzzzzzzzzzzz{zzz{zz{zzzzzzzzz{zzz{zzzz{zz{zzzzz{z{zzzzzzzzzzzzzzz{zz=\nz{zzzz{zz{zzzzz{z{zzzzzzz{zzzzzzz{zzzzzz{zz{zzzzzzzzzzzzzzzzzzz{zzz{zz{z{=\nz{z{z{zzzzzzz{z{zzz{zz{zzzzzzzz{zzzzzzzzzzzzzzzzzzzz{zzzzz{zzzzz{zzzzzzzz=\nzzz{zz{zzzz{zzzz{zzz{zz{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}=\n||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{zz{z{z{zzzz{z{z{z{z{z{z{z=\n{z{zz{z{zzzz{zzzzz{zzz{zzzz{zzzz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{zzzz{z{z{zzzz{z{zzz{zzzz{z{z{z{z{z{z{z{zzzzz{zzzz{z{zzzz{z{=\nz{z{z{zzzzzzz{z{zzz{z{z{z{z{z{z{z{z{z{z{zzzz{z{z{z{zz{zz{z{z{z{z{zzzz{z{z=\n{z{z{z{z{zzz{z{z{z{z{z{z{z{z{z{z{z{z{zzzz{z{z{z{z{z{z{z{z{z{z{z{zzzz{zzzz=\n{z{zzzz{z{z{z{zzz{z{z{z{zzzz{z{z{z{z{zzzzz{zzzzzz{z{z{zzzzz{zzz{zzzz{zz{z=\n{zzzzz{z{z{z{z{z{zzzzz{zzz{zzzz{zz{z{zzzzz{z{zzzzz{z{zzzzz{z{zzzz{zz{z{z{=\nz{z{z{z{z{z{zzz{zzzzzzzzzzzzz{z{z{zzzzzz{zzzzzz{z{z{zzzz{z{z{z{z{z{z{z{z{=\nzzzz{zzzzz{z{zzz{z{z{z{zzzzzzzz{z{zz{zzzz{zzzzzz{z{{{{{{{{{{{{{{{{{{{{{||=\n~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{=\n{{{{{{{{{{{{{{{{z{zz{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{z{{{z{{{z{{{z{{{{z{{{z{{{z{{{z{{z{{z{{{z{{{z{{{z{{{{{{{{{{{{{=\n{{z{{{{{{{{{{z{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{z{{{z{{=\nz{{z{{z{{z{{{{{{{{{z{{{{{{z{{{z{{z{{{{{{{{{{z{{{z{{z{{{{{{{z{{{z{{{z{{{z{=\n{z{{z{{{{{{{{{{z{{{z{{z{{z{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{z{{{{=\n{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{z{{{z{{{z{{{z{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{z{{{{{{{{{z{{{z{{{z{{z{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~=\n~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{z{z{z{z{z{z{z{z{{z{{z{z{{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{z{z{{z{{z{z{{z{z{{z{{z{z{{z{{z{{z{{z{=\nz{{z{{z{z{{{z{z{z{z{z{z{z{{z{z{z{z{z{{z{z{{z{{z{z{z{z{z{z{z{z{z{z{z{{z{{z=\n{z{z{z{z{z{z{z{z{{z{{z{{z{{z{{z{{z{z{z{z{z{{z{z{z{{z{{z{{{z{z{z{z{z{{z{{z=\n{{z{z{z{z{{z{{z{z{{z{{z{{z{{{z{z{z{z{z{{z{{z{{z{{z{z{{z{z{{{z{z{z{z{z{z{z=\n{z{z{z{{z{z{z{{z{z{{{z{z{{z{{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{z{z{=\nz{z{{z{{z{z{z{z{z{z{z{z{z{z{z{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{{z{z{{z=\n{{z{z{{z{z{z{z{z{z{z{{z{z{{z{z{z{z{z{z{z{z{z{{z{z{z{z{{z{z{{z{{z{{z{z{z{z=\n{z{z{z{z{{{z{z{{z{z{z{z{{z{z{{{z{z{z{z{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{z{z{zz{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zz{z{z{z{z{z{z{z{z{zz{z{z{z{z{z{z{z{z{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{=\n{{{{{{{{{{{{z{zz{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzzzzzzzzzzz{zzzzzzzzzzzzzzzz=\nzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzz{zzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzz{zzzzz{zzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{=\nzzzzzzzzzzzzzzzzzzzzzz{zzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzz=\nzz{zzzzz{zzzzz{zzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzz{zzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzz{zzzzz{zzzzzzzzzz{zzzzzz=\nz{zzzzzzzzzzzz{zz{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~}}||~~~~=\n~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{z{z{z{z{z{z{z{z{z{z{zzzz{z{z=\n{z{z{z{zzz{z{z{z{z{z{z{z{z{z{z{zzzzz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzz{=\nz{z{z{zzz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzz{z{zzz{z{z{z{z{z{z{z{zzzzz{=\nz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzzz{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{z{z{z{zzzzz{z{z{z{z{z{z{z{z{z{zzzz{z{zzzzz{z{z{z{z{z{z{z{z=\n{z{z{z{z{z{z{z{zz{zz{z{z{zzzz{z{zzz{z{zzz{z{z{zzzzz{z{z{z{z{z{z{z{z{z{z{z=\n{z{z{z{z{zzzzz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzzz{z{z{z{z{z{z{z{z{z{z{zz=\nzzz{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{z{zzzz{z{z{z{z{zzzzz{z{z{z{z{z{z{z{z{=\nzzz{zzzzz{z{z{z{zzzz{z{z{zzz{z{z{z{z{zzzz{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{=\nz{z{z{z{z{z{z{z{z{z{z{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{z{zz{zz{z{z{z{z{z{z{z{z{z{z{z{z{{z{{z{z{{z{{{z{{z{z=\n{{z{z{z{z{{z{z{{{{{{{z{z{z{{z{{z{z{{z{z{{z{z{z{z{{z{z{{z{{z{z{z{{{z{{z{z{=\nz{z{{z{{z{{z{{z{{z{{z{z{z{{z{{{z{{z{{z{{z{z{{z{z{{z{{{{{{z{{z{z{z{z{z{z{z=\n{z{z{{z{{z{{z{{z{{z{{z{{z{z{z{z{z{z{{{{{{{z{{z{{z{z{z{z{{z{z{z{z{z{z{{z{{=\nz{z{{z{{{{{z{z{z{{z{z{z{z{{z{{{{{{z{{{{{{{z{{z{{z{z{z{z{{z{z{{z{z{z{z{z{{=\nz{{z{{z{z{{{{{z{z{{z{{z{{z{{z{{{{{{{z{{z{z{{z{z{z{{z{z{{z{{z{z{{z{{{{{{{z=\n{{z{z{{z{z{{z{z{z{z{z{z{{z{{z{{{{{{z{{z{z{{z{z{z{{z{{z{{{{{{{z{{z{z{{z{z{=\nz{z{z{{z{{z{{z{{z{{z{{z{{{{z{{z{{z{{{{{{{z{z{{z{{z{{z{{z{{z{{{{{{{{z{{z{z=\n{{{{z{{z{z{{{z{{z{{z{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z{z{z{z{z{z{z{z{z=\n{z{zz{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{z{{{{z{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{=\n{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{z{{{{{z{{{{z{{z{{{{{{{z=\n{{{{{z{{{{{{z{z{{z{{{{{{{{{z{{{{{{{{z{{z{{{{{{{z{z{{{z{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{zz{{z{z{z{z{z{z{z{z{z{z{z{zzz{z{z{{z{{z{{{{z{{z{{z{{z{{{z{{z{{z{{{{z{{=\n{{z{{z{z{z{{z{z{{z{{z{{{z{{z{{z{{z{{z{{{{{{{{z{z{{{z{{z{{{{{z{z{z{{z{z{z{=\n{{z{{z{{{{z{z{{z{{z{{z{z{{z{{{{{{{{{z{z{{{z{{{{z{{{{z{{z{z{{z{{{z{z{z{{z{=\nz{z{{{{z{{{{z{{z{{{{{z{z{z{{z{{{z{{z{{{z{{{{z{{z{{{{{z{{z{{z{{{{z{{z{z{{{=\n{z{{z{z{{{{{{z{{{{{{{z{z{z{{{z{{{z{z{{z{z{{{z{{{z{{z{z{{z{{z{{z{{{z{{z{{z=\n{z{{z{z{{z{{{{{z{z{{z{z{{{z{{z{{z{z{z{{z{{z{{z{{{{{z{z{{z{z{{z{z{{{z{{{{z=\n{{z{z{{z{{{{{{z{z{{z{z{{{z{{z{z{{z{{{{{{z{z{{z{z{{{z{{{z{{z{{{z{z{{z{{{z{=\nz{{{{{z{{{{{z{{{{{{{z{{z{{{{z{{{{{z{{{{{{{{{{{z{z{{z{{{{z{z{{{{{{{{{z{z{{=\nz{{{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zzzzzzzzzzzzzzzzzzzz{z{z{{{{{{{{{{{{=\nz{{{{{{{{{{{{z{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{z{z{z=\n{{{{{z{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{{{{z{z{{z{{{{{z{{{=\n{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{z{{{{{{{{{{z{{{{{{z{{{{z{=\n{{{{{{{z{{{{{{{{{{z{{{{{{{{{z{{{{{{{{z{{z{{{{{z{z{{{{{{{z{{{z{{{{{{{{{{z{=\n{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{{z{{z{{{{{=\n{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{z{z{{{{{{{{{{{{z{{{{{z{z{{z{=\nz{{{{{{{{{z{{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z{z{z{z{z{=\nz{z{{z{zz{{{z{z{{z{{{{{z{z{{z{z{{{{{z{z{z{{z{{{{{{{{z{{z{{{z{{z{{z{{z{{{{=\n{{z{{{{z{z{z{{z{{{{{{{{{{{{{z{{z{{{{z{{{z{{z{{{{{{{{z{{z{z{{z{{z{{{{z{{z{=\n{z{{z{{{{{{{{{z{{{{z{{{{z{{{{z{{z{{z{{z{{{z{{z{z{{{z{{{{{z{{{{z{{z{{z{{{{=\nz{{z{{{{{z{{z{{{{z{{{z{{z{{{{{z{z{{z{{{{{z{{z{{z{{{z{{z{{{{{{{{z{z{{{{{{z=\n{{{{{{{{{{{z{{z{{{{{{{{{{z{{z{{z{{{{z{z{z{{z{{z{z{{z{z{{z{{z{{z{{{z{{z{{{=\n{{{z{z{{z{{{z{{z{z{z{{z{{{{{{z{{z{{z{{z{{{{{{z{{{z{{z{{z{{z{z{{{{z{{z{{{{=\n{{z{z{{z{{z{{{{{{z{{z{{{{{{{{{{{z{{z{{z{{z{{z{{z{{z{z{{{z{{{{z{z{{{{{{z{{=\nz{z{{z{{{{z{{z{{{{{{{{{{z{{z{{{{{{z{{z{{{{{{z{{z{{z{{z{{{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{zz{z{zzz{z{z{z{z{z{z{z{z{z{zz{z{{{{{{{{z{z{{{{{{{{{{{z{{{{{{{{{{{{{{z{=\nz{{{{{{z{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{z{{{z{z{z{{{{{{{z{{{z{{{{{{{z{z{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{{{z{{{{z{{{{{{{{{{{{z{{{{{{{{z=\n{{{z{z{{{{z{{{{{{{{{{z{{{{{{{{z{{{{{{{z{{{{{{{{{{z{z{{{{{{{{{z{{{{{{{{{{{=\n{{{{{{{{z{{z{{{{{{{{z{{{{{z{{z{{z{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{z{{{{{{{{{{{{{{z{z{{{{{{{{{{{{z{{z{{{{{{=\n{{{{{{{{{{{{{z{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{{z{z{{z{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{z{{{{{{{{{{{{{z{{{{{{{{{{z{{z{{{{{{z{{z{{{{{{z{{z{{{{{{{=\n{{{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{{{z{zz{{{{z{{z{{{{{{{z{{=\nz{{z{{{{z{{{z{{z{{z{{{{{{z{{{{{{z{z{{z{z{{{{{{{{z{z{{z{{{z{z{{z{{{z{{{{{{=\n{z{{z{{{{{{{{z{z{{z{{{{{{z{z{{z{z{{z{{z{z{{z{{z{z{{z{z{{{{{{{{{{z{{{{{{z{=\n{{{z{{z{{z{{{{{z{{{z{{{{{{{{{{{z{{{z{z{{z{{{{{z{{z{z{{{{z{{{{{{z{z{{z{{{{=\n{{{{z{{z{{{{{z{{z{{z{{z{{z{{z{{{{{{{{z{{z{{{{z{z{{{{{{{{{z{{z{{{{{{{{{{z{=\nz{{z{z{z{{{{{{{{z{z{{z{{z{{z{{z{z{{z{{z{{z{{{{{{{{z{{z{{{{z{z{{{z{{z{{z{{=\n{{z{{z{{z{{{{{{{{{z{z{{z{{z{z{{z{{{{{{z{{{{{{{{{{z{{z{z{{z{z{{{{z{{{{{{{{=\n{{{{{z{z{{z{{z{z{{z{{z{{{z{{z{{{{{{z{{z{{{z{{z{{z{z{{{{{z{{z{{z{{{{{{{z{{=\nz{{{{{{z{{z{{{{{{z{{z{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{zz=\n{z{zz{{z{{{{{{z{{{z{{{{{{{{{z{{{{z{{{{{{{{z{{z{{{{{z{z{{{{{{{{{{z{{z{z{{{=\n{{{{{z{{{{{{{{{{{{{{{z{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{{{{{z{{z{{z{{{{z{{z{{{{z{{{{{z{{{{z{{{{z{{{{z{{z{{{z{{{{{{{{{{{{{{z{{{{{=\n{{{{z{{{z{z{{{{{{{{{{z{{{z{{{{{{z{z{{{{{{{{{{{z{{{{{z{{z{{z{{{{{{z{{{{{{z=\n{{z{z{{{z{{{{{z{{z{z{{{{{{{{{{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{=\n{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{z{z{{z{{{{{{{z{{{{{{{{{z{z{{{{z{{z{{z{{=\n{{{{{{{{{{{{z{{{z{{z{{z{z{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{{{{{{{{{{{{{{=\n{{z{z{{{{{{{{{{z{{z{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{z=\nzz{{zz{z{z{z{z{z{z{z{z{{z{zz{{{{z{{{{{{z{{{zzz{zzz{z{z{z{{z{z{{z{{{{{{z{{=\nz{{{{{z{{z{{{{{{{{{{{{z{{z{{{{{z{{z{{z{{z{{{{{z{z{{z{{{{{{{{z{{z{{z{z{{z{=\n{z{{z{{z{z{{z{{z{{{{z{{z{{{{{{{{{{{{z{{{{{{{{z{{{z{{{{{z{{{{z{{{{{z{{{{{{=\nz{{{{z{{z{{z{{z{{{{z{z{{{{{{{{{{{{{z{{z{z{{z{{z{{{z{{z{{{{{z{z{z{{z{{{{z{=\n{{{{{{{{{{z{{z{{{z{{{{{{{{{{{z{{{z{z{{{{{{{{{z{{z{{{{{{{{{{{{z{{z{{z{z{{z=\n{z{{z{{z{z{z{z{{z{{{{{{z{{z{{{z{{{{{{z{z{z{{z{z{{z{z{z{{{{{{{{{{{z{{z{{{{=\nz{{z{{{{{{{{z{{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{z{{z{z{{z{{z{z{{{{{z{=\n{z{{{{{{z{z{{z{{z{z{{z{{{{{{{z{z{{z{{z{{{{{z{{z{z{{{{z{{z{{z{{{z{{z{{z{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~~~}}||~~}=\n}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{{z{z{{{{{{{{z{=\n{{{{{{z{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{z{{z{z{{z{{{{{{{{z{{{{{{{{{{{{z{z{{{=\n{{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{z{z{z{{{{{z{{z{{{{=\n{{{{z{{{{{z{{{{{z{{{{{{z{{{{z{{{{{{{{z{{{{z{{{{{z{z{{z{z{{z{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{{{{{{z{{{{{z{{z{z{z{{{{{{{{{{{{z{{z{{z{{{{{{{{{z{{z{{z{{{{=\n{{z{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{z{{z{{{{{{{{{{{{=\n{{{{{{{z{z{{z{{z{{{{{{{z{{{{{z{{z{{z{{{{z{z{{{z{{{{{{{{{z{{{{{z{{z{{z{{z{=\n{{z{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{{{{{z{{{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01|=\n|~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{{=\nz{z{z{z{{z{{{{{{{z{zz{{{{{z{{z{{zz{{{z{{z{z{{{{z{{z{{{{{z{z{{z{{{{{{{{{{z=\n{z{{z{{{z{z{z{{z{{{{{{{{z{{z{{{{{{z{{{z{{z{{z{z{{z{{z{{z{{z{{z{{z{{{{{z{z=\n{z{{{{{{{{{{{z{{{{{{{{z{{z{{{{{z{{{{{z{{{{{z{{z{{{{z{{{z{{z{{{{{z{{{{{{{{=\n{{{{{{{{{{{{z{{z{{z{{z{{z{{z{{z{{{{z{{{z{{z{{{{z{{{{{{{{{{{{z{{z{{z{{z{{{=\n{{{{{{{z{{{{{{{{{{{{{{z{{z{{{{{{{z{{{z{{z{z{{z{{z{{z{z{{z{{{z{{{z{{{{{{{{=\nz{{z{{z{{{{{{{{z{{{z{{z{{z{{{{{{{{{{{{{{{{z{{{{{{{z{{{{{{{{{{{z{{{{{{{{{{=\nz{z{{z{{{{{z{{{{{{{z{{{{{z{{{z{z{{z{z{{z{{z{z{{{z{{{{{{{{{z{{z{{{{z{{z{{{=\n{{{{{z{{z{z{z{{z{{{{z{z{{z{{{{z{z{z{{z{{z{z{{z{{{{{{{z{{{{{{{{{{{{{{{{{{{=\n{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{z{zzz{{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{z{{{z{{{{{{{{z{{{{zz{{z{z{{{{{{{{=\n{zzz{{{{{z{{{zzzz{{{z{{z{{z{{{{{{{{{{zz{{{zz{z{{z{{zzz{{{zzz{zzzzzzzz{{zz=\nz{zzzzzz{{{{z{{{{{{{{{{z{{{{{{{{{z{{z{zz{{{{z{zzzz{{{{{{zzzz{zzzzzzzzzz{z=\nzzz{{z{{{{{{{{{{{z{{{zz{zzzzzz{zzzzz{zzzz{{{{{{{{{{zz{{{zz{{{zz{{{zz{{{{{=\n{{{{zzzzzzzzzz{{{zz{{zzzzz{{{zzz{z{zzzzzz{z{{zzzzzz{{{{{{zzzzz{{{{{{{{z{{=\nzz{{{{{{{{z{zzz{{{{{zz{zz{z{zz{{{zz{{{{z{z{z{{z{{{{{{{{{{z{z{z{{z{{z{z{{{=\nz{z{z{{{{{z{{z{{z{{{{{z{{{z{{{{{{{{{{{z{{{{{z{z{{{{{z{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{z{z{{z{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{{z{{{{{=\n{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~~~~~~~~~=\n~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz{{z{{{{{z{=\n{{{z{zz{{{{z{{{{zz{{{{z{z{{z{zzzz{z{{{{{z{{zz{{{{{{{{{{{{{z{{z{{zz{zz{zzz=\nz{{{{{z{zz{zzzz{z{zz{{zz{{zzz{{{zz{zz{z{{{{z{z{z{{z{{{z{{{z{{{{{{{{zzz{{{=\n{{{{{{{z{z{{zzz{{zz{{zz{{zz{{zz{{{{{z{{z{z{{z{{{zz{zz{{zz{{zz{{z{zz{zzz{z=\n{{z{{zzzzz{zz{z{zzzz{zzzzz{{z{z{{{zz{{{zz{zzzz{zz{{zz{zz{{z{zz{zz{{zz{{{{=\n{{{zz{zzz{{zz{{z{zz{z{{z{zz{{zz{z{z{{{zz{zzz{z{zzz{zz{z{zzz{zzz{zzzzzzz{z=\nz{{{z{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{z{{{{{z{{{z{{z{z{{z{{{z{z{=\n{{{{{z{{{{{z{{z{{z{{z{{z{z{{z{{z{{z{{{{{{{{z{{z{z{{z{z{{z{{{{{{z{{z{{{z{{=\n{{{{z{{{z{{{{{z{{{z{{z{{{{z{{z{z{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=016=E8=\nT=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{z{zz{z{z{z{z=\n{z{z{z{z{z{zz{{{z{{z{{{{z{{{{{{{z{z{zz{{{zz{{{{{{{{{{z{{{{{z{z{{{{zzz{zzz=\nzzz{zzz{{{{{{{{z{zz{{{zz{{{z{{zzz{{zzz{{zz{{zzz{{zzz{{zz{z{{{{{{zzzzz{zz{=\nzzzzzzz{zzzzzz{z{z{{zzz{{zzzzz{zz{{{zzzzz{zzz{zzzzz{z{z{{z{{{{{{{{{{{{{{z=\n{zz{{zz{{zzzz{{zz{{zz{{{{{{{{{{zz{zzzz{z{zz{z{zz{{{{{{{{zzz{z{zz{zz{z{zzz=\n{zz{zz{zz{zz{zz{z{{{zzzzz{zz{zz{{zz{zz{z{zz{zzz{zzzzzz{{{{{z{zz{z{z{{{z{z=\n{zzzz{{zz{{zz{z{{zzz{{{zz{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{{{{{{{z{{z{z{{{{z=\n{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{=\n{{{{{{{{z{{z{{{{{{z{{{{z{z{{{z{{{{z{{{{z{{{{{{{z{{{{{{{{z{z{{z{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{{{z{zz{{{{{{{{{z{{{{zz{z{{{{{{{{{z{{{z{=\n{{z{{{{zzz{{{{{{{{z{zz{{zz{z{zz{zz{{z{z{{{z{zzz{{z{z{{{{{z{z{z{z{{{zz{zz{=\nz{z{z{z{zzzz{z{{zz{{z{zzz{zz{z{{zzzzz{zz{z{zz{z{zz{z{zz{zzzz{z{zz{z{{{zz{=\n{z{zzzz{{{{{{z{{z{{zzzzz{{{zz{z{zzz{{zzz{{zz{{zz{z{z{{z{{{z{zzz{z{{{z{{{{=\nz{{z{{z{{{{zz{{{zzzz{{{{z{{{zzzz{{{{zz{{zz{zzz{zz{zzzzzzz{{zzzzz{z{{zzzz{=\nz{zz{{zz{z{{{{zz{{zzz{{z{{z{{zz{{zzz{{zz{z{zzzzzz{zz{{z{{z{z{{z{{z{z{{{{{=\n{{{{{{{{{{z{{{{{{{{{{{{z{{{{{{z{z{{z{{z{{z{{z{{{z{{z{{{z{z{{{z{z{{z{z{{z{=\n{z{{z{z{{z{{z{{{{{{{z{z{{z{z{{z{{z{{{{{{z{{{{{{z{{{{{{{{{{z{{{{z{{{{z{{{{=\n{{{z{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01||~}}||~~~=\n~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{zzz{z{z{z{z{z{z{z{z{z{zz{z{{=\nz{{z{{{{z{{{{{{zzz{z{{z{z{{{{z{{{z{z{{zzz{zzzz{{{zz{{zz{zzzz{zz{{zzzz{z{z=\nzz{{zz{{{{{zzz{zz{zz{zzz{{zz{zzzzz{{zz{{{{{{{zzzz{{zz{zz{{z{zz{z{zzz{zz{z=\n{zzzz{{{{z{{z{{z{{{zz{zz{zz{{{z{zzzz{{z{zzzz{{{{{z{{z{z{{{{{{zz{z{{zzz{zz=\nz{zz{{zzzz{{{zz{{zz{z{zz{{z{z{z{{zzzz{z{zz{z{zz{{z{{z{{z{zz{zzz{{{{z{zz{{=\nzzz{zzz{{zz{z{zzz{z{{z{zzzzzzz{zz{{zz{{{{z{zz{z{{zz{zzzzzz{zz{{zzz{zz{z{z=\n{z{{{{zz{{{{{{{{{{{{{{{{{{{z{z{{z{z{{z{{{{z{z{{z{{z{{{{{z{{{{{{{{{{{{{{{{=\n{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{z{{{{z=\n{z{{{{z{{z{{z{{{{z{{{{{{{{z{z{z{{{{{{{z{{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=\n=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z=\n{z{z{z{z{z{z{{z{zz{{{{{{{{{{{{{{zz{z{{{{{{{{{z{z{{{{{{{{{{zzzz{{z{{z{{{zz=\n{zzz{z{zzzzz{z{{{{{{{zz{{zzzz{z{{{zz{zz{zz{{zz{{zz{zz{zz{zzz{zzz{z{zz{{zz=\nzz{zz{zz{z{z{z{z{{z{zzzzz{{zz{zzzzz{z{{{{zzz{{{zzz{zzz{zz{{{{{z{{{z{z{zzz=\nzz{{{zz{z{zz{{z{{zzzzz{{zz{{{{{{z{zzzz{zz{z{zzzz{zzzz{{{{{{{{{zz{{{zzz{{{=\n{zz{{{zz{zz{{{zz{{zz{zzz{{zzz{{zz{zz{zz{z{zz{{z{zz{z{zz{zzz{zz{{{zz{{z{zz=\n{z{zz{z{zz{{zz{{zz{z{{{z{{{{zz{z{{z{{z{z{{z{{z{{z{{{{{{{{{{{{z{{{{{{{{{{{=\n{z{{{{{z{{z{z{{z{z{{z{{{{{z{z{{z{{{z{z{{z{{z{{z{{{{{z{{z{{{{z{z{{{{{{{{{z=\n{{z{{z{{z{{z{{z{{{{z{{{{{{z{{{{{{{{{z{{{{z{z{{{{{{{{{{z{{z{{{{z{{{z{{{{{{=\n{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{=\n{{{{{{{{{{z{zz{z{zzz{z{z{z{z{{z{z{z{{z{zz{{z{{z{{z{z{z{{{{{{{z{{z{{z{z{{{=\nz{{z{z{{zzz{{{{{{{{z{zz{{{zzz{zz{zzz{{{{{z{zz{{{zzzz{{z{zzz{zzzzzzzzzzzzz=\n{z{zzzzzzzzzz{{{{{zzzzz{zz{zzzzzz{zzzzzzzz{zzz{zzz{{{zz{zzzzz{z{zz{{{zzzz=\nzzzz{zzz{{z{{{{{{{{{{{{{{{z{zz{{zzzz{zzzz{{{zzzz{{z{{z{{{zzzz{{zz{{zzzz{z=\nzzz{z{z{z{z{zzz{zzzz{{z{zzz{zzzzz{{z{zz{z{zzzz{{{{z{{zzz{zzzzz{{zz{zz{{{z=\nzz{{zz{zz{zz{z{zz{{zzzz{{{zzz{zzz{zzzzz{zz{z{{{{z{zzz{{z{{{{{{{{{{{{{{{{{=\n{z{{z{{z{z{{{z{{z{{z{z{{{{z{z{{{{{{{{{{{{{{{{z{z{{{{{{{{z{{{{{{{{{{{{{{{z=\n{{{{{{{{{{{{{{{z{{z{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{{z{{{{z{{{{{{z{z{{=\n{z{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~=\n~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{{z{z{z{z{zz{z{z{z{z{z{{{{{{{{{z=\n{{{{{{z{z{z{z{z{z{z{{z{{{{{{{{{{{{{z{{z{{{{zz{z{{{{{{{{{{{{{z{z{{{{{{z{{{=\n{{{{{{{z{{{{{{z{{{z{{{z{{{{{{{{{{{{{z{{z{{{z{{z{{z{{{{{z{{{{{z{{{{{{{{{z{=\n{{z{{{{{{{{z{{{{z{{z{{{{{{{{{{{{{{{z{z{{z{{z{{z{{{{z{{{{{{{z{{z{{{{{{z{{z=\n{{{{{z{{{{{z{{{z{{{{z{{{{{{{{{{{{{zz{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{zz{=\nzz{{z{{z{{{zzz{{{{z{z{{{{z{{{{{{z{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{=\n{z{{{{{z{{z{{z{z{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{z{{{z{z{{z{{z{{{{{{=\nz{{z{{{{{z{{z{{z{z{{z{{{z{{z{{z{{z{{z{{{{{{{{z{z{{z{z{{z{z{{z{{{{z{{z{{{{=\nz{{{{z{{{{{{{z{{{{{{{{z{{{z{{z{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{=\n{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{zzz{z{z{z{=\nz{{z{z{z{{z{zz{z{{z{zzzz{{z{{z{zz{z{z{z{z{z{{{{z{{z{{z{{z{{{{{{{{z{{{{{z{=\n{z{z{z{{z{{{{{z{{z{{{{z{{z{{z{{{z{{z{{{z{{{z{{{{{z{z{{z{{z{{{{{{z{{{{{{{{=\n{{{z{{{{z{zzz{{z{z{z{{{z{{{{z{{{z{{{{z{{{{{{{{z{{z{{z{{{z{{{{{{{{{{{{{{z{=\n{{{{{z{z{{{{{{{z{z{{{{{{{{z{{{{{z{{{z{{{{z{{{{z{z{{z{{{z{{{{{{z{z{z{z{{z{=\n{{{{{{{z{{z{z{{z{{z{{zzz{{{{{{{{{z{zzzzz{{{{{{z{{{{z{z{{{z{{z{zz{z{{z{{z{=\n{z{{z{{z{z{{{{{z{{{{z{{zz{{z{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{{z{{z{{z{{{{{=\n{{z{{{z{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{=\n{{{{{{{{{{{{z{{{{{{{{z{{{{z{{{{{z{z{{{{{z{{z{{{{{{{{{{z{{z{{{{z{{{{{{{{{{=\n{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{=\n{{{{{{z{zz{{zz{z{z{{z{z{z{z{z{z{{z{zz{{{{{{zz{{zzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzz{{{{{z{z{{z{{{z{{{{{{{{{{{{{{{z{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{z{z{{=\n{{{{{{{{{z{{{{{{z{{z{z{z{{{{{z{{zzzz{{{{{{{{{{{{{z{{{z{{{{z{{{z{{z{{{{{{{=\n{{{{z{{{{z{{z{z{{z{{{{{z{{z{{{{{z{{z{{{{{{z{{z{{z{{{z{{{{{{{{z{{{{z{{{{{{=\n{{{z{{{z{z{{{{{{{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{z{{z{z{{z{{{{{{{z{{z{{{{{z{=\n{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{{{z{{{{{z{{{{zz{z{{{z{z{{z{{z{{z{{z{{{{{{=\n{z{{{{{{{{{{{z{{{{{z{z{{{{{{{{{z{{z{{z{{z{{{{{z{z{{z{{{z{z{z{{z{{z{{z{{z{=\nz{z{z{{z{{z{{{{{{z{{z{{z{{z{{z{{z{{{{z{{z{{{{{z{{{{{z{{{{{{z{z{{{{{{z{{z{=\n{z{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}||~~~~~~~~~~=\n~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{{z{zzzzzz=\nz{{{{{{{{{z{{z{{z{{z{{{{{{{{{z{z{{{{{{{{{{{{z{{z{{z{{{z{z{{{{{z{{z{{{{z{{=\n{{{z{{z{{z{{z{{z{{z{{{{{{{z{{z{{z{{{{z{z{{{{{{{{{z{{z{{{{{{{{{z{{z{{{z{{z=\n{{{{{{{{z{{{{{{{{{{{z{{z{z{z{{{{z{{{{{{{z{{{{{z{{{{{{{z{{{{{{{{{z{{{{{{{{=\n{{z{{{{z{{z{{{{z{{{{z{{z{{z{{{{{{{{{{{z{{{{z{{z{{{{{{{{{z{{z{{z{z{z{{z{{{=\n{{{{{{{{{z{{z{{{{{{{{z{{{{{z{{z{{z{z{{z{{{z{{{{z{{z{{z{{z{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{z{{z{z{{{{z{{{{{{{z{{z{z{{{{{z{{{{{{z{z{{{=\n{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{{{{{z{{{{{{{{{z{{{=\n{z{{{z{{z{{{{{{z{{z{{{{{z{{{{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00=\n =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z=\n{z{z{z{z{z{zz{{z{{zzz{zzz{{z{{z{{{{{{{{{{{{{{z{{z{{z{{{{{{z{{z{z{{z{{{{{{=\n{{{z{{{{{{z{{{{{{{z{{{{{z{{{{z{{{{{{{{{{{{{{{z{{z{{{{{{{{{z{{{{{{z{{z{{{{=\n{{{{{z{{z{{z{{{{{{z{{{{{{z{{z{{{{{{z{z{{z{{z{{{{{{{{{{z{{{{z{{{{{{z{z{{{z=\n{z{{{{{z{{z{{z{{{z{{z{{z{{{{z{{{{z{{{z{{{z{{{{{{{{{{{z{{z{{z{{{{z{{{{{{{z=\n{z{{z{{{{{{{{{{{{{{z{{{z{{z{{z{{{{{{{{z{z{{z{{{{z{{{{{{{{{{{{{{{z{{{z{{{{=\n{{{{{{{{{z{z{{{{z{z{{z{{z{z{{z{{z{z{{z{{z{{z{{{{{{{z{z{{{{{{{{{{{{{z{{z{{=\n{{{{{{{{z{{{{z{{z{{{{{{z{{z{{z{{{z{{z{{z{{z{{{{{z{{{z{{z{{z{{{{{{{z{{z{z{=\n{z{{{{z{{{{{z{z{z{z{{{{z{{{{{{{{{{z{{{{{{{{{z{{{{{z{z{{{{{{z{z{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{=\n{{{{{{{{{{{z{zzz{{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{{{{{{{{{{{{{{{z{{z{z{{z{z=\n{{{{{{{{{{{{z{{{{{{{{{{{{z{{z{z{{{{{{z{{{{{z{z{{{{{z{{{z{{{{z{{z{z{z{{z{z=\n{{{{{{{z{{z{z{{{{{z{{{{{{{{z{{{z{{{z{{{{{{{{z{{{{z{{z{{{{{{z{{z{{{{{{{{{{=\n{z{{z{{{z{{{{{{{z{{z{{{{{{{{{{{{{{z{{{{{z{{{{{{z{{{{{{{{{{{z{{{{z{{{{{{{{=\n{z{{z{{z{{{{{{{{{{z{{{{{z{z{{{{{{{{{z{{z{{z{{z{{{{z{{{{{{{{{z{{z{z{{{{{{{=\n{{z{{{{z{{z{z{{z{{z{{{{{{{{{{z{{z{z{z{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{=\n{z{{{z{{{{{{{z{{z{{z{z{{{{{{{{z{z{{z{{{{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{z{{{=\n{{z{{{z{{{{{{{{{{z{{z{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{z{{z{{z{{{{z{{z{{z{=\n{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=01||~}}||~=\n~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{=\nz{z{z{z{{z{z{{z{{z{{{{{{{{{{{{z{z{{z{{z{{{{z{z{{z{{z{{{{{{{{{{z{{{{{z{z{{=\n{{{z{z{{{{{{{z{{{{{{{{{{{{{{{{z{{z{{{{{{{{{z{{{{{z{z{{z{{{z{{{{{{{z{z{{z{=\n{{z{{{{{{{z{{{{{{{{{z{{z{z{{{{{{{{{z{{{{z{z{{{{{{{z{{{z{{z{{z{{{{z{{{{{z{=\n{z{{{z{z{{z{{{{{{z{{{{{z{{z{{{{{{{{z{{z{z{{z{{{{{z{z{{{{{{z{{z{{{{{{{{{{{=\n{{{z{{{{z{z{{z{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{{{{{{z{z{{z{z{{{{{{{{{{{{{{{{=\nz{{z{z{{z{{z{{z{z{{z{{{{{z{z{{{{z{{{{z{{z{{{{{{{{{{{z{{z{z{{{{{{{{z{z{{z{=\n{z{{z{{{z{z{z{{{{{z{{z{{{{{z{{{{{{{{{z{z{z{{{{{{{{{z{z{{z{{{{{{{z{{{{z{{{=\nz{{{z{z{{{{{{{{{{{z{{{{{{{{{{{z{{{z{{{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{z=\nz{z{z{z{z{z{z{z{z{{z{zz{{{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{{{{{{{{{{{{z{{{{{{=\n{{{{{{z{{z{{z{{{z{z{{{{{{{{{{{{{{z{{z{{{{{z{{z{{{z{{z{{{{{{{{{z{{z{{{{z{z=\n{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{z{{z{{{{z{z{{z{{{{{{{{{z{z{{z{{{{z{{{{{{z{{=\nz{{{z{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{z{z{{{{{z{{{{{{z{{z{z{{{{{{{{{{{z{z=\n{{{{{{{{z{{{{{{{{z{{z{z{{z{{{{{{{{{{{{{{{z{{z{{z{{{{{{z{z{{{{{z{z{{z{{z{z=\n{{{{{{{{{{{{z{{z{{{z{z{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{z{{{{{{{z{{z{=\n{z{{{{{{{{{{{z{{z{{{{{{{z{{{{{{{{{{{{{z{{z{{{{{{{z{{{{z{{z{{z{{{{{{{{z{z{=\n{z{{{{{{{{z{z{z{{{{z{{{z{{{z{{{{{{z{{z{z{z{{{{{z{{z{{z{{{{{{{z{{{z{z{{{z{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{=\n{{{{{{{{{{{{{{{{{{{z{zzz{zzz{z{z{z{z{z{z{z{z{z{zz{z{{{z{{{z{z{{z{z{{z{{z{=\n{{{{{{{{z{{z{z{z{{zzzz{{z{{z{{z{{{zzz{{{{{{{{{{{z{{z{z{{{{z{{{zzzz{z{zzz{=\n{z{{{{{{z{zzzzzz{{{{{z{{{{{{{z{{zzzzzzz{{{{{z{{z{{z{z{{{{{{{z{{z{{{{{{{{z=\nzz{z{{{{{{{{{{{z{{{{z{{{{{{{{{{{{zzzzzzzz{z{{z{{{z{{z{{z{{{z{z{{z{{{zzz{z=\n{{z{{z{{{{{{{{zz{{zzz{{{{{{{{z{{z{{{{z{z{z{zz{{{{{zzzzz{z{z{{z{{z{{{{{{{{=\n{{{z{{z{{{{{z{z{{{{{{{{{{{{{{z{{z{{z{{z{{{{{zz{{zzz{{z{{zz{z{{zzzzz{{zz{{=\n{{{z{{{{{{z{{{{{z{{z{{{{{{{{{{z{z{{z{{z{{{{{{{z{{z{{{{z{{z{{z{{{{{{{{{z{z=\n{{z{{{z{{{{{{{{{{z{{{z{{{{{{{{{z{{z{{{{{{{{{z{{{{{{{{{{{z{{z{{{{{{{{{{z{{=\n{{{z{{{{{z{{z{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=1C=01=01=\n||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{z{z{z{z{z{z{z{z{z{z=\n{{z{zz{{z{{{z{{{{{{{{zzzzzzzzzzzzz{z{{{{{{{{{z{zzz{{{{z{{{{{{z{{z{{z{{z{z=\n{{z{{{{{{{{{z{{{{zz{{zz{zz{zz{{{z{{z{{{{z{{z{z{z{{{{z{{{z{{{{{{zz{{{z{{z{=\n{{{{{{{{{{{z{{z{{z{{{{{z{{z{{{z{{{z{z{{z{{z{{{{z{{{z{{z{{z{z{{zz{{z{z{{z{=\n{{{{{{{{{{{{{z{{{{{{{{{zz{{zz{{z{{{{{z{{z{z{zzz{z{{{z{{{z{{{{{{z{{{{{{{{{=\nz{z{zz{{{{{zz{{{{{{{{{z{{z{z{{z{{{{{{{{{{{{{{{{{z{{z{z{{z{{{{{{{{{{{{{z{{=\n{z{zz{zz{{{zzz{{{zzz{zz{{z{{z{z{{{z{{z{{{{{z{{{{{{z{{z{z{z{{{{{{{{{{{{z{{=\nz{{{{{{{{{{z{{{{{{z{{z{{z{{{{{{{{z{{{{{z{z{{z{{{z{{{{{{z{{z{{{{{{{{z{{{z{=\n{{{{z{{z{{z{{{{{{{{z{{{z{{{{z{z{{{{{z{{{{{{{{{z{{z{{{{z{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{=\nzz{z{zz{z{z{z{z{z{{z{z{{{z{zz{{{{{{{{{z{{z{{z{{{{{{{{{{z{{{{z{{z{{{{{z{{{=\nz{{{{{z{{{{{{zz{{{{{{{{{{{{z{z{{z{{{{z{{z{z{{z{z{{{z{{{{{{{{z{zz{{{{z{{{z=\n{{{{z{{{z{{{{z{{z{zz{{{z{{z{{z{{z{{{{{{{{{z{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{z{z{{{{{z{{z{z{{z{{z{{{{{z{{z{{{zz{z{{zz{z{z{{{{{{{{z{{{z{z{=\n{{{{z{{{{z{{{{{z{{{z{{zz{{zz{z{z{{{z{z{{z{{z{{{{{{{{{{{z{z{{z{z{{{z{{z{{{=\n{{{{{{{{z{z{{z{{z{{{{{zz{{z{{{z{z{{{z{z{z{{{{z{z{z{{{{{{{{{{{{z{z{{{{z{{{=\n{{{{{{{{{{z{{z{{z{{{{{{{{z{{z{{z{{{{z{{{{{{{{{{{{{z{{z{{{{{z{{{{{{{{{{{{{=\nz{z{{{{{{{z{{z{{{{{z{{{{z{{{{{{{{{{z{{z{{{{{z{{{{z{{{{{{z{{{{z{z{{z{{{{{{=\n{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{zzz{{zzz{z{z{z{z{z{z{z{z{z{zz{{{{z{{z{{{{{{{z{{z{{=\nz{zz{zz{{{{{{{{{z{{zzz{{{{z{{{{z{z{{{zz{zzz{zz{zz{zz{{{{{{z{{{zz{{{{zz{{{=\nzz{z{z{{z{{{z{{z{z{z{{zz{{{{z{{{{{zz{{{{z{{{{zz{{zzz{zz{zzz{zzz{zz{zz{z{z=\nzzz{{{{zz{z{zzzz{{z{z{{z{{z{z{{z{{z{z{{{zz{zz{zz{zz{{{{zzzz{z{zzz{z{{zz{{=\nz{{zzzz{zzzz{zzzzzzzzz{zzzz{{z{zzzzz{{zzz{{zzzz{{z{{{zz{zz{z{zz{zz{{zz{zz=\nzzzz{{{{zzz{{{z{{{zzzz{z{zzzz{zz{zz{zzz{{{z{{{z{{z{{zz{{{z{z{{{z{{{zz{{{z=\n{{{{z{{z{{z{{{{{{z{{{z{{z{{z{{{z{{{{{{{{{{{z{{z{{{{{{{{{z{{{{{z{{z{{z{{z{=\n{{{{{{{z{{{{{z{{z{z{{z{{{{{{{z{z{{{{{{z{z{{{{z{{{{{z{{z{z{{{{{{z{z{{{{z{{=\n{{{{z{{{{z{{{{{{{z{{z{z{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}=\n}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{{{z{=\nzz{{z{{{{{{z{{z{zz{{{{{{{zz{zzz{z{{z{{{{{zz{zzz{{{{z{{{{{{{{z{{{z{{zz{zzz=\n{zz{z{{{{{{{{zz{zzz{{z{zz{{{{{{{{{{zzzzz{{{zz{{zz{{z{z{{z{zzzzz{{zzz{{z{{=\n{zz{zz{z{{{z{{{zz{z{{z{{zz{zzz{{z{{{z{z{{{{{{{{{{{{{{{{{{{{zzzzz{{{z{{zz{=\nzzz{zz{{z{{zz{z{{{{{zzz{{{{z{{{z{{zz{{z{z{z{{{z{{{z{zzz{z{zz{{z{{zz{{z{zz=\n{{z{{z{{{z{{zz{zz{zzz{zzz{zz{{zz{{z{{{{zzz{{z{{zz{zz{{zz{zzz{zz{{{{zz{{{{=\n{{zz{{{{{z{z{zz{{{z{z{{zz{{{{{{{{{{{z{{{{{{{{{{{{{{{z{{{z{z{z{{z{{{{{{{z{=\nz{{z{{{{z{{z{{{{{{{{z{{{z{{z{{{{z{z{{{{{{{{{{{{z{{z{{{{{z{{z{{{{{{{{{{z{z=\n{{{{{{{{z{{z{{{{{{z{{{{z{{{{{z{{{{{z{{z{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{|=\n|~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z=\n{zz{z{z{z{z{z{z{z{zz{z{zz{{{{z{{z{{{{{{{z{z{{z{z{{{zz{{{{{{z{{z{{{z{zz{{z=\n{{{{{z{{z{z{z{z{{{z{{z{{{z{{{z{z{{z{{zzzz{{{{{z{{{{{z{{z{zz{z{{{z{z{zzz{{=\n{z{{{{{{z{z{{z{{z{{zz{zzz{{z{{z{{zz{{zzz{zzz{z{z{{{z{{zzz{z{{{{{{z{{z{{z{=\nz{{z{{z{zz{{{z{z{z{zz{{{z{{{{{zzz{z{{{{{{{z{{zz{z{zz{{zzzzz{{z{{{zz{{zzzz=\nz{{z{{z{z{{{z{{z{{{z{z{{z{z{zz{{zz{z{z{z{{z{{{z{z{zz{z{{zz{z{{{z{{{z{{zz{=\n{z{{z{{{z{{{zz{z{{z{z{{z{z{{z{{zz{{{z{{z{z{{{{z{{z{{z{{z{z{{{z{{z{z{{z{z{=\nz{{{{{{{{{{{{{z{{z{z{{{{{{{{z{{{{{{{z{{z{z{{{z{{{{{{z{{{{{{{{{z{{z{{z{{{{=\n{{{z{{{{{{{{{{{{z{z{{{{{{z{{z{{{{{{{{{{z{{{{z{{{z{z{{{{{z{{{{{{{z{{z{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{=\n{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{{{z{zz{{{{{{{{{z{{z{{z{{zzzzz{z=\n{zz{{z{{{{{{{{{{{{{z{{zzzzzzz{{{{z{{{zz{{z{{z{z{z{{zzzzzzz{z{{{z{z{{z{z{z=\n{{{{{{{z{{zz{{{zzzz{{{z{{{z{{zz{z{z{{{zzzzz{{{z{zz{zz{z{z{{zz{{z{{z{{{z{z=\nzzzz{{{{zz{{z{{{{{{zzzzzzz{{{{{{zz{{{{{{z{{z{z{z{z{zz{z{{zz{z{z{{{{{{{z{{=\nz{{zz{{{{z{z{z{z{{zz{z{{z{z{{{{z{z{z{zz{z{zzz{zz{{{z{{zz{{z{{{z{{zz{{z{{{=\nz{{{zz{z{{{z{z{z{{{{z{{zz{zz{z{zz{{z{{{{{z{{{{{z{z{{{{{z{z{z{{{{zz{z{z{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{{{{{{{{z{{z{{{{z{{z{{{{{{{{{{{{{z{{=\n{{{{z{{{z{z{{{{{{{{{z{z{{{{{z{{z{{z{z{{{{{{{z{{{{{{{{z{{z{{z{{{{{{{{{{{{{=\n{{z{{{{{z{{z{{{{{{{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01||~}}|=\n|~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{zzz{z{z{z{z{z{z{z{z{z{zz=\n{{z{z{{z{{{{{{{z{z{{{{{{{{zzz{{{{z{{z{{z{{z{z{z{{{{z{{{{z{z{z{z{{{z{zz{{{=\nz{z{{{{{{{{{{{z{{{{zz{{{{{{{z{z{z{{{z{z{z{{{{z{{{{{{{{{z{{{zz{{zz{{{{z{z{=\n{z{{z{{z{{{{z{{z{{z{{zz{{z{z{{z{z{{{{{z{{z{z{{{{{{{{z{z{{z{{z{{z{zz{z{{{z=\n{{z{z{z{{z{{{{{z{z{z{zz{{z{{{z{z{{{{z{{{z{{{z{{{{{{zz{{zz{{{z{{z{{{z{z{{z=\n{{zz{{z{{{zz{{zz{z{z{z{{{z{{z{{zz{z{{{z{{{{z{z{{{z{{z{{{z{z{z{{{z{z{{z{zz=\n{{{{{z{z{{{z{{z{z{{{{z{{z{{{{{z{{z{{z{{z{{z{z{{z{{{{{{{z{{{{{{{{{z{{z{{{{=\n{{z{{{{{{{{{{z{{z{{z{{{{z{z{{{{z{{{{{{z{{z{z{{{{{{{z{{{{{{{{{{{{z{{z{{{z{=\n{z{z{{{{{{{{{z{{z{z{{z{{z{{{{z{z{{{{{{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01 =00 =01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z=\n{z{z{z{z{{z{z{z{z{z{{z{zz{{{{{{{{{z{z{{zz{{zzzz{z{{zz{{{z{{{{{{{{z{{z{{{{=\nz{{{{z{{z{z{{{zzzzz{{z{z{z{{{z{{z{{z{zzz{{zzz{{{zz{z{{{{{zz{{{z{{zzz{z{{z=\nz{z{{z{z{{{{z{{zz{{z{{z{zz{{z{z{z{zzz{{zzz{zzzz{z{zz{{z{{zz{{z{{{{{{{{z{{=\nz{{{{{{{zz{{{{z{{z{{zz{{zz{zz{{z{zz{{{{{{{zz{{zz{zz{{{zz{{zz{z{z{z{{{zz{z=\n{z{z{{{{zz{zz{zzz{zz{zz{{zz{zzz{{z{z{{zz{{z{{{zz{zz{zzz{{z{{z{{zz{{{z{zz{=\nzz{{z{z{z{{{zz{{{{zz{{zz{{{zz{{{zz{{zz{{zz{{z{zz{{{{z{{{{{{{{{{{{{{{{{{{{=\n{z{{z{{{{z{{z{{z{{{{{{z{{{{{{z{{z{{z{{{{{{{{{{z{{{{{{z{{{{z{{{{{{{{{{{{z{=\n{z{{{z{z{z{{z{{{{{{{{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{z{{{{{{z{{z{{{{{{{{z{{=\nz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}||~~~~~~~~~~~~}}||~~=\n}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zz{z{z{z{z{z{z{z{z{{z{zz{z{{{z{z{{{{{{{z{{{=\n{{z{{{{zz{z{{{{{{z{z{zzz{z{z{{{{z{{{{zz{{z{{zz{zzzzz{zzzz{{{{{{{{zz{{{{{z=\nzzzzz{{{{{{{zzz{z{zzz{zzz{{{{z{{{{{zzz{z{zzz{zzz{z{z{{z{{zz{{zz{{zz{{z{{{=\nz{zz{{{zzz{z{z{{{{{{{z{{z{{{{{{z{{z{{zzzzzzz{zzzzzz{zzz{{zzz{zzzzz{z{z{z{=\nzzz{{{{zzz{zzzz{zzzzzzzzz{zzzz{zzz{{z{zz{zz{{zzz{z{z{z{{z{{z{{{zzz{zzzzzz=\n{zzz{zzz{{zzz{z{z{z{zzzz{z{zzz{zzzz{zzz{zzz{{z{{z{{zzzzzz{{zzzzzz{zzzz{z{=\n{z{{{{z{{{{{z{{z{z{z{{z{{z{{z{{{{{{z{{{{{{{{{{{{{z{{{{z{z{{{{{{{{{{z{{z{{=\nz{{{{{z{{{{z{{{{{z{{z{z{{z{{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{{{{{{{{{{{z{{z{=\n{z{z{z{{{{{z{{{{{{{{{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=01=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zzz{z{z{z{z{z{z{=\nz{z{{z{z{{{{z{{{{{{z{{z{zzzzzzzzzzzzz{{{z{z{{{{{{z{{{{{{{z{{{{z{z{{z{{{z{=\n{{{{{{{{{{{{{z{{z{{z{{z{{z{{{{{{{{z{{z{z{{{{{{{{{{{{{z{{{{z{{z{{{{z{{{{{{=\n{{z{{{{z{{{{{{z{{{{{{{{{{z{{{{{{z{{{{{{{{{z{{z{{{{{{{{z{{{{{{{{{{{{{{z{{z=\n{{{{{{z{{{{z{{{z{{{{{{{{{{z{{{{z{{z{{{{{{{{{z{{{{{{{{{{{{{z{{{z{{{z{z{{{{=\nz{{z{{zzz{{{{zz{{{{{{{{{{{{{z{{{{{{{{{z{{z{{z{{{z{{z{{{z{{{{{{{{{{{z{{{{{=\n{{zz{{{{{z{{{z{{{{{{{z{{{{{{{z{{z{{{z{z{{{{{{{{{{{{{{{{{{{z{{{{{{z{{z{z{{=\nz{z{{{{z{{{{{z{z{z{{z{{{{{{{{{z{{{{{z{{{{z{{{{{{{{{{{{{z{z{{z{{{z{{z{{z{{=\n{{{{{{{z{{{{{z{{z{z{{z{{{{{{{{{{{{{{z{{{{z{{z{{z{{{{{{z{{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=016=E8T=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{=\n{{{z{zz{{z{zz{z{z{z{z{z{z{z{z{z{zz{z{{{{{{z{{{{{{{{zzzzzzzzzzz{{{{{{z{{z{=\n{{{z{{z{{{{z{{{{{{{{{{{{{{{z{z{z{z{z{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{z{{{z{{=\nz{{z{{{{z{{{{{{{z{{{{{z{{z{{{{z{{{{z{z{{{{{{z{{{z{{{z{{z{{{{z{z{{z{{{{{{{=\nz{{z{{{{z{z{{z{{z{{z{{{{{{{z{z{{{{z{{{z{{{{{{{{z{{{{{{z{{{{{{{{{z{{z{{{z{=\n{z{z{{z{z{{{z{{{{{{{{{{z{{{{{{{{{{zzzz{{{z{z{z{{z{{z{{{z{{z{{z{{{{{{{{{{{=\n{{{{{{{{{{z{{z{z{z{{{{{z{z{{{zz{z{{{z{{{{{z{{{{{{z{{zz{z{{{{{{{{{{z{{z{{{=\nz{z{{z{{z{{{{z{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{z{z{{{z{z{{{{{{{{z{z{z=\n{{z{{z{{{{{{{{z{{{{{{{{{{{z{z{z{{{{{z{{{{{{{{{{{{z{{z{{z{{{z{{{{z{{{{{{{{=\n{z{{z{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{{{{z{{{{{z{=\n{z{z{{z{{{{{{{{z{z{{{{{{{{{z{{{{{{{z{{{{z{{z{{z{z{{z{{{{{{{{{{{{z{z{{z{{z=\n{{z{{z{z{{{{{z{{z{{{{{z{{{{{{{{{z{{{{z{z{{{{{{z{{{{{{{{z{{{{z{{{{{z{z{{{{=\nz{{{{{{{z{{{z{{{{{{{{z{{z{{{{{{{z{{{{{{{{{z{{{{{z{{z{{{{{{{z{{{{{{{z{z{z{=\n{{{z{{z{{{z{{z{z{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{z{{{z{{z{{z{{{z{{z{{{{{{{=\n{{{{{{{{{{{{{{{{{z{{z{{z{z{{z{{z{{z{{{{{{{{{{{z{{{{{{{{{z{{{{{{{{z{{{{{z{=\n{z{{{{{z{{{z{{z{{{z{{{{{{z{{{{{{{{{{{z{{{{{{z{z{{z{z{{{z{{{z{z{z{{{z{{z{{=\nz{{{{{{{{{{{{{{z{z{{{{{{{{{{{{{{{{{z{{z{{{{z{{z{z{{z{{{{{{{{z{{{{z{{z{{z{=\n{z{{{{{{{{{z{{{{z{{{z{z{{z{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=02=A4=\n=1C=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z{z{z{z{z=\n{z{z{{z{z{{z{zz{{z{{{z{z{{{{{{{{{{{z{{z{z{{{{{z{{z{{z{{{{z{{z{{{{{{{{{{{{=\n{{{{{{{{z{{z{{{z{{{{{{{{z{{{{{{{{{{{{{z{{{{{{{z{{{{z{{z{{z{{{{z{{{{{z{{z{=\n{{{{z{{z{{{{z{{{{{{{{{{{{z{{{{{z{z{{{{{{{{z{{z{{{z{{{{{z{z{{{z{{{z{z{{{{{=\nz{{{{{{z{{{z{{{{{{z{{{{{{{{{z{{{{{{{{{{{{{{{{{z{{z{{z{{z{{z{z{{z{{z{{{{{{=\nz{{{{{{{{{{{{{z{{{{{{z{{{z{{z{{z{{z{{z{{z{z{{{{{{{{{{{{{{{{{{{{{z{{z{{z{{=\n{{{z{{z{{z{{{z{{z{{{{z{z{{{{{{{{z{{z{{{{{{{z{{{{{{z{{{{{{{z{z{z{{{{{z{{{{=\n{{{{{{{z{{{{{{{{{{{z{{{{{{{{{z{{z{{{z{{z{{{{{{{z{{z{{{z{{z{{z{{{{{{{z{{{{=\n{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{z{{z{z{{{{z{{{{{{{{{{{{{{{z{{{z{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{=\n{{{{{{{z{zz{zzzz{z{z{z{z{z{zz{z{{z{zz{{{{{{{{{{{z{z{{z{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{z{z{z{{z{{z{{z{{z{{{{{{{z{{{z{{z{{{{{z{z{{z{{{z{{{{z{{z{{{{z{=\n{{{{{{z{{{z{{{{{{{{{z{{{z{{{{{{{{{{{{z{z{z{{{z{{{{z{{{{{{{{z{z{{{{{{{{z{{=\n{z{z{{{{{{{{{z{{{{{{z{{{{z{{z{{{z{{{z{z{{{{z{{{z{{{{{z{z{{z{{z{{z{{z{{{{{=\n{{{{{{{{{{{{{{{{{{z{{z{{{{z{z{{z{z{{{{{z{{z{{{z{{{{{{z{{{{{{{{{{{{{z{z{z{=\n{z{{z{z{{z{{z{{{{{{{{{z{{z{{{{{{{{z{{{{{{z{{{{{{z{{z{{{{{{{{z{{z{{{{{z{z{=\n{{{z{z{{{{{{{{z{z{{{z{{z{{z{{{{{{z{{z{{{{{{{z{z{{z{{{{{{{z{{{{{{z{{z{{{{{=\n{{z{{{{{{z{{{z{{z{{{{z{{z{{z{z{z{z{{{{z{{{{z{{z{{z{{{{{{{{{{{{z{{{{z{{z{{=\nz{z{z{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}||~~~~~~~~~~~=\n~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{{zz{z{z{z{z{z{{z{z{{z{zz{z{{z{{z{{{{=\n{{{{{{z{{z{{z{{z{z{{z{{z{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{{=\n{{{{{{z{{{z{{{{{{{z{{{{{z{{z{{{{{{{z{{z{z{{{{z{{{z{{z{{z{z{{{{{{{{z{{{z{{=\n{{z{z{{z{{{{{z{{z{z{{{{{{{{{{{{z{{z{{{{{{z{{{{z{{{{{{{{{{{{{{{{{z{{{z{{{{=\n{z{{{{{{{z{{{{{{{{{{{z{z{{z{z{{z{{z{{z{z{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{=\n{z{{{{z{{z{z{{z{{{{{{{{{{{{{{{z{{{{{{z{{z{{z{{{{{{{{z{{z{{{{{{z{{{{{z{{{{=\n{{{z{z{{z{{{{{{{{z{{{{{{z{{{{{z{{{z{{{{{{{{{{{{{{{{z{{z{{{{{{{{z{z{{{{{{{=\n{{z{{z{{{z{{z{{{{{{{{z{z{{{z{{z{{{z{{{{{{{{{{z{{{{{{{{{{{{{z{{{{z{{{{{z{{=\n{{z{{z{z{{z{{{{z{{{{{{{{{{{{{{z{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=\n=01||~}}||~~~~~~~~~~~~}}||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zzz{{z{z{z{z{z{z=\n{z{z{{zzz{{{{{{{{{z{{z{{z{{{{{{{{{{{{{{{{{{z{{{{{z{{{{{z{{{z{{z{z{{z{{z{{=\nz{{{{{{z{{z{{z{{{{{z{{z{{z{{{{{{{z{{z{{{{z{{{{{{{{{z{{{{{{{{{{{z{{{{{{{{z=\n{{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{{{z{{{z{{z{{{{{{{z{{z{{{z{{{{z{{z=\n{{z{{z{{{z{{{{{{{{z{z{{{{z{{z{{{z{z{{z{z{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{z{{=\nz{{z{{z{{{z{{z{{z{{z{{{{{z{{{{{{{{{{{z{{{z{{z{z{{{{{{z{{{{{{{{{{{{z{{z{{{=\n{{{{{{z{z{{{{z{{{{z{z{{{{{{{{{{z{z{{z{{{{z{{{{{z{{{{{z{{{z{{{z{{z{{z{{{{{=\n{{{{z{z{{z{{{{{{z{{z{{{{{{{{{{{{{{{z{{z{z{{{{{{{{{{{{{{{{z{z{{z{{{{{z{z{{=\n{z{{{{{{{{z{{{z{{{{{z{{{{{{{{{{{{{{{{{z{z{{z{{{z{{{{{{z{{z{{{{{{{{{{{{{{{=\n{{{{{{||~}}=01=01{{{=01=01||~}}||}}}vvvvvv}}}}}||~~}}{{{{{{{{{{{{{{{{{{{{=\n{z{zz{{{zz{z{z{z{z{z{z{z{z{z{z{z{{{z{z{z{{{{{{{{{{z{z{{z{z{z{{z{z{{{{z{{{=\n{z{z{{{z{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{z{z{{{{{{{{{{z{{z{{{{{{z{{{{z{{z{{z=\n{{{z{z{{z{{z{{{{{{z{z{{{{z{{z{{{{z{z{{z{z{{{{z{{{z{{z{{{{z{{z{{z{{{z{{{{{=\n{{z{{z{{{{{{{{{{{z{{{{{{{{{{{{z{{{{{z{{z{{{{{{z{{{{{{{{{{{{{{{{{{z{{z{{z{=\n{z{{z{z{{z{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{{z{{z{{{z{{z{{z{z{{{z{{{{{{{z{{=\nz{{{{{z{{z{{z{z{{{{{{{z{{z{z{{{{{{z{{{z{{{{{{{{z{{z{z{{{{{{{{{z{{{{{z{{{{=\n{z{{{{{{{z{{{{{{{{{{z{z{{z{{{{{{{{{{{z{{{{{{{z{{z{z{{z{{z{{{{{{{{{{{{z{{z=\n{z{{z{{{{{{{{{{z{{{{{{z{{{z{z{{z{{{{{{{{z{{{{{z{z{{z{{z{{z{z{{{{{{{{z{{{z=\n{{z{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~}}|}}}}vvvvv|}}}}}||~=\n~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{z{z{z{z{z{z{z{z{{{z{zz{{{{{{{{{z{{z{z{{{=\n{{{{{{{{{{{{{{{{{{{{{z{zzzz{{{{{z{z{{z{zzz{z{z{{z{{{{z{z{{z{{{{{{z{zzzz{{=\n{zzz{{z{{{{{{z{zzzzzz{{{{{z{{{{{{{{{z{{z{{{{{{z{{zz{{{z{{{{{{{{{{z{{{z{{{=\n{{{{{z{{{{{{{{{zz{{z{{zzz{{zzz{zzz{z{{zzzz{zzzzzzzz{{{{z{z{{{{{z{{{z{{{{z=\n{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{z{{{{{{z{z{{zzzz{zzzzz{{zzz{z{{=\n{{zzzz{{{{{{{{z{{z{zzz{{{zzzzz{{{zzz{{{zzzz{z{{{{{{{z{{{{zzz{{zzzzzz{{zzz=\n{{{zzzzzz{z{zzz{z{{{zzzz{z{z{{{{{{zzzzzzzz{{{{{{zzzzzz{{z{{{{{z{z{{{zz{{{=\n{{{{{{{z{z{{zz{z{z{{z{{{zzzz{{zz{z{z{{{{z{{{{{{{{{{{{{{{z{{z{{{{{z{{{{{{{=\n{{{{{{z{{{{{z{{z{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1Dd=01=01=\n||~}}~~~~~vv||||~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zzz{z{z{z{z{z{z{z{=\nz{z{zz{z{z{{z{{{{{{{{zzzzzzzzzzzz{{z{{z{{z{z{{{zzz{{{z{{{{{{{{{{z{{{{{{{{=\n{{z{{{{{{{{{{z{{{zzz{zzzzz{zz{{{z{z{{{{{z{{{zz{{z{{{z{{z{z{{z{{{{{{{z{{z{=\n{z{z{{{{{{z{{z{z{{{{{{z{z{{z{{{{z{{z{{z{z{{{{zzz{{z{z{{{{z{{{{{zz{{{{z{{z=\n{zz{z{{{{{{{z{{{z{{{{z{{{{{{{{{{{{{{{z{z{{z{z{{z{z{z{{z{z{{{{{{{{{{{z{z{{=\n{{{{zz{{z{{{z{{{zz{{zz{z{zz{{zz{{z{{z{{{{{zz{zz{{zz{{zz{zz{zz{{zz{zz{{z{{=\nz{{{{{z{{z{z{{z{{zz{z{{{z{{{z{z{zz{z{{{z{{{zz{z{zz{{{{z{z{{{{zz{zz{{{{zz{=\n{{{{zz{{{z{z{{{{zz{{zz{{z{{z{z{z{{{{zz{{{{{zz{{zz{{zz{{z{{{{{{z{{{{z{{z{{=\nz{{z{z{{{{{{z{z{{{{z{{z{{z{{z{{{{{z{{{{{{{{z{{z{z{{z{{z{{{{{{{{{{{{{{{{{{=\n{{{||~}}=01=01 =00 =01=01||~}}~~~~~v|||||~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{=\nz{zzz{zz{z{z{z{z{z{z{z{z{{{z{zz{{{{{{{{z{{z{{{z{z{{z{{z{{zz{{{{{{{{{{{{z{=\n{{{z{{{z{{z{{z{{z{z{{z{z{{z{{{z{{z{{z{{{{{z{{{{z{z{{zz{{{{{{{z{{{z{z{{zz{=\n{{z{{{{{{{{zz{z{{z{{{{{{{z{{{{z{z{{{{{{{z{z{z{{{{{{{{{{{{{{{{{{{{zz{z{z{z=\n{{{{z{z{{zzz{{z{z{z{{zz{{{{{{{{{z{{z{{{z{{{{{{{{z{z{{z{{z{z{{{{{{{{{{{{{{=\n{{{{{{{{{{z{z{{z{{{{{{{{z{{{zz{{{z{{zz{{zz{{z{z{{{z{z{{z{{{{{{{z{{{z{{{zz=\n{z{{z{zzz{{{z{zz{{zz{{{{{{{z{{{{{zz{{{zz{z{z{zz{{zz{{z{{{{z{z{z{z{z{z{{{{=\n{z{z{{{{{{{z{z{{{z{z{zzz{z{{z{z{z{{{{{{{{z{{{z{{{{{{{{{z{z{{zzz{{z{{zzz{z=\n{{z{z{{{z{z{{{{{z{{{{{{{{{{{{{{{z{{z{{{{{z{{{{{{{z{{{{{{z{{{{z{z{{z{{{{{{=\n{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~}}~~~~~~~~~~~~~~=\n~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zz{z{z{z{{z{z{z{z{z{z{zz{{{{{{z{{{{{{=\n{zz{{{{{{{z{{zz{{z{{z{z{{z{zzzz{{{{{{{{{{{{{zz{{zz{{zz{zz{zz{{{z{{{{{{zz{=\n{z{z{{z{{z{{z{{z{{{{zz{{{{z{{zz{{{zzzz{zzzz{z{zz{zz{z{zzz{{{zzz{z{zzzzz{z=\nz{{zzzzz{{zzzzz{{z{zz{z{{z{z{{z{zz{{{z{z{{z{z{{{{z{{{z{{z{{zz{{zz{zz{{z{z=\nzzz{{{{zz{zz{{{{zz{{zzz{zz{zzz{zzz{{z{{{{{{{{{{z{{z{{{{z{{{{z{zz{{z{{{zz{=\n{{{{{zz{{{{zz{{z{z{{{{z{{z{z{{zz{{{z{{{{zz{{{{{{z{{z{{z{{{z{z{{z{{{{z{{{z=\nz{{{{z{{zz{{zzz{z{{{z{{z{{z{{zz{{zzz{zzz{{z{z{z{{{z{{{zz{z{{z{{{zzz{zzzzz=\n{z{z{{z{{z{z{{{{z{zz{{{z{z{{zz{{{zz{zz{{{z{z{{{z{{z{z{{z{{z{{{{{{{{{{{{{{=\n{z{z{{{z{{z{{{z{{{{{{{{{z{{z{{z{{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=FF=01=\n=01=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{z{z{z{z=\nz{z{z{z{z{{z{zz{{z{z{{{z{z{{{{z{z{z{{zzz{zz{{{{{{{{{{{{z{zz{{z{z{{z{{z{{{=\nz{{{z{{{z{{zz{zz{{{{z{z{{{zz{{zz{{{{zz{{{{{{{z{{z{{z{zz{{{z{zz{{z{{{z{{{{=\nz{{z{z{{zzz{z{{{z{{z{{{z{{{{z{z{zz{zz{z{{zz{{{{{z{zz{z{zz{{{z{{z{zzz{zz{z=\nz{{zzzzzz{{{{z{z{{{z{{z{{zz{zz{{z{{{zz{z{zzz{zz{{z{{z{{z{{z{zz{{{{z{{z{z{=\nz{{{{{{z{{{{{{{{z{{{{z{z{{zzz{z{{z{{{z{{z{z{{{{{z{{{{{zz{{z{{{zz{{z{zz{{z=\n{{zz{{{{{{{{{{{{{{z{z{{z{{zz{{{zz{{{{zzzzz{{{{zz{z{z{z{{{{{z{{z{z{z{{{z{{=\nzzz{zz{{z{{z{{zz{{z{{zz{{z{z{z{{{{{{{{z{z{{zz{z{{{zz{z{{z{{{{z{{{{z{{{{{{=\n{{{{{{{{{{{{{{{z{{z{{z{z{{z{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~}}~~~~~~~~~~~~~~~~||~~}}{{{{{{{{{{{{=\n{{{{{{{{{z{zz{{{zzz{z{z{z{{z{z{z{z{{z{zz{{{{{{{{{{{{{z{z{{{{{{{{{{zzz{{z{=\n{z{{z{{z{{zz{{{{{{{{{{{{{z{{zz{{zz{{zz{{z{z{{{{{{z{{zzzzz{{z{z{{z{{z{{{{z=\nz{{{{{zz{zz{{z{z{{{z{{{zz{z{{z{z{z{{{zz{z{{z{{zz{{z{zz{{zz{{z{z{z{z{z{{z{=\nz{z{z{{z{{{{z{{{{z{z{z{{z{{{{z{{z{z{z{{{z{zz{zz{z{z{{{z{{{{{zzz{z{{z{{zz{=\nzz{{zz{z{{z{{{{{z{{{{{{{{{{{z{zzzzzzz{{zz{{{{zz{{{z{{zz{z{z{z{{{{z{{{{{z{=\n{{{{z{z{z{z{{{{z{{{{z{z{{{zz{{{z{{z{{z{{{z{z{{z{zzzz{{z{z{{{z{z{{{zzz{{z{=\n{{{z{{{{zzzz{zz{{{z{{zzzzz{{{z{{z{z{zz{{z{zzzzzz{{z{{{z{z{{z{z{z{{{zz{{z{=\nz{zz{zz{z{{z{z{{{zz{{z{{{z{{z{{z{{z{z{z{{{{{{{{{{{{{{z{{{z{{z{{z{{z{{{{{{=\n{z{z{{z{{z{z{z{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~}}|||||||=\n|||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{{z{z{z{z{z{z{z{z{z{zz{z{{z{{=\nz{{{z{{{{zz{zzzzz{z{zz{{{{{{{{{{{{{{z{z{zzzzzzzzz{z{zz{{z{{{z{zz{{zz{{zzz=\nzzzz{z{{{z{{{{z{z{{{z{{{z{z{{z{{z{{{z{{{{z{{z{zz{{{z{{{{z{{{z{z{z{{z{zz{{=\n{z{z{{z{{{z{{z{{z{{z{{{{{{z{zz{z{z{z{zz{z{{z{{z{z{z{z{{z{z{{{{{{{{zz{{z{{=\nz{{z{z{z{z{{z{z{{z{zzzzz{{{{z{zz{z{z{{z{z{{{{zzzzzzzz{{{{z{{{{z{{z{z{z{{{=\nz{{{{{z{{z{{z{{{{z{z{{zzzzzzz{{{z{{{{zz{{zz{z{z{{{{{{z{z{{{zzzzzzz{{{{z{{=\n{{z{z{{{{{z{z{{{zz{{{z{{{z{z{{zz{{z{{z{{{{zzz{z{{z{{z{z{z{zz{{{z{{{z{{z{{=\n{{{zz{{zz{{{{{{{{zz{{z{{zz{{z{{{z{{zz{{{zz{{{z{{{{z{{{{{{{{{{{{{{{{z{z{z{=\n{z{z{{{{{z{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=02=A4=1C=01=01||~}|||||||||||||||||||~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zz{=\nz{z{z{z{z{z{z{z{{z{zz{{{{{{{{z{{{{z{z{{z{{{z{{{zz{{{z{z{{z{z{z{{{z{{{{z{{=\nz{{{{{z{{{z{z{z{{z{{{z{{{z{{{{{{{{{z{{z{zz{{{{{{{{{{{z{{{{{z{{z{{{{z{z{{z=\n{{z{z{{{zz{z{zz{{z{{zz{z{{zz{{{{z{{z{z{zz{z{zz{z{{{z{z{{zz{zz{{{{z{{{{zz{=\nzz{zz{{{zz{{{{{z{{z{{z{z{{z{{{z{{zz{{z{{{z{{z{{z{{{{{z{z{zz{z{{{z{z{{{z{{=\n{{{{{{{{z{{zzzzzzz{{{{{{{z{z{{zz{{{{z{{{z{z{{z{z{z{{{{{{z{zz{{z{z{{{{z{{z=\n{{z{{zz{{{{{z{{{{{{{z{z{zz{{zz{{{{z{{z{{{{{z{{z{z{{{z{{{{zz{{{{{z{z{{z{z{=\n{{{z{z{z{{z{{z{{zz{{z{{{zz{{z{{zz{{z{{{z{{z{z{{{zzzzzz{zzzzzz{z{{z{z{{{{z=\nz{z{{{{{z{z{{z{z{{z{{{{{{{{{{{{z{{z{{{{{z{{z{z{z{{{{{{{{z{{z{z{z{{z{{z{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{=\n{{{{{{{{{{{{{z{zzz{zzz{z{z{z{z{z{z{z{z{{z{zz{{z{{z{{{{z{{{{z{{zzzz{{{zzz{=\nz{{{{{{{{{{z{{z{z{{{{{{{{{zz{z{z{zz{zz{{z{{{z{z{{{z{z{{zzz{z{{zz{{zz{z{{z=\n{{{zz{{zz{z{zzz{z{{z{zz{z{{zz{{{z{z{zz{zz{zz{zz{z{z{z{zz{z{z{{z{z{z{{{{{z=\n{{{z{{z{{{z{z{{z{z{{z{{z{{{z{{{{z{z{z{z{{{{{zz{z{zzz{zzz{z{z{{zz{zz{z{zzz=\n{z{{{zz{zz{{zz{{z{z{{{{z{z{z{z{{{{{{{{{{{z{{zz{{{{zz{{zz{zzz{z{zz{{zz{{{{=\n{z{{z{{zz{{{z{zzz{zz{zz{{{z{zz{z{z{{{z{{z{{{{z{z{{{{z{z{{{{{z{z{z{z{{{zzz=\n{{z{{z{{zzz{{zz{{{z{z{{z{{z{{{zz{zz{{zz{zzzz{z{zz{{{z{z{{{z{zz{{{{{z{z{{{=\n{{z{{{{z{z{zzz{{zz{z{{z{{{{z{{{{{{{{{{{{{{{z{{{z{{z{{{{{{{{z{{{{{{{{{{{{z=\n{{z{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~~~~~~~~~~=\n~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{=\n{z{{{{{z{zz{{{{{{z{{zz{{{{{{z{{z{{zzzz{{{z{{z{{z{{zzz{{{{zz{zzzzzzzzz{{{{=\n{{{{{zz{{{{{zzzzzz{{{{{{zzzzzz{z{{{{z{{zzzz{{zz{{{z{{z{{z{{{zz{{{{zz{zz{{=\nzzz{{{z{{z{z{z{{zzz{z{{{{zzz{zz{zzz{{zzz{{zzz{zz{zzzz{zzzzzzz{{{{z{zz{{{{=\nz{{{z{{zz{{{{z{{{zz{{zzz{{z{z{{z{z{{zzzz{{{{z{{{{{{{{{{z{z{{z{z{{{{z{{z{z=\nzz{{z{zzzz{{{{zzzzz{{{z{{{{{{{zzzzzz{{zzzz{{zzzzzz{zzzzzz{z{{{{{{z{{zz{{z=\n{zzz{{{{z{z{{{{zzzzzz{{{{z{{{z{{zzzzz{z{{{zzz{{zzzz{z{zz{z{z{{z{z{{{{{{zz=\nzz{{{zzzzz{z{z{{z{z{{{{z{z{{z{{{z{{{zzzz{{{{z{{{{{{{z{z{{z{{z{{z{{{{z{{{{=\n{{{{z{{z{{{{z{z{z{{{z{{{{{{z{z{{z{{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zz{z{z{z{z=\n{z{z{z{z{{z{zz{z{z{{z{{{z{{{{{zzzzzzzzzzzzz{z{z{{{{{{{z{{{{{{{{{{{{{{{{{{=\n{{{z{{z{{z{{{{{{z{{z{{z{{z{{z{{z{{{{{{{z{{z{{{{{{{z{{{z{{{z{{{{{{{{{z{{z{=\n{{{z{{z{{{z{{{{{{{z{{{{{{{z{{z{{{{{zz{{zz{{{z{{z{{{{{z{{{z{{{z{{z{{{{{z{{=\n{{{{{{{{{z{z{{{{{{z{{{z{{{z{{z{z{{{{z{{{{z{{{z{{{z{{{{{{{{{{{{{z{{{{z{{{z=\n{{{{{{{{{{{{z{{{{{{{{{{z{{{{{{{{z{{{{{{{{z{{{z{z{{z{{{{z{{z{{{{z{{z{{{z{{=\n{{{{{{{{z{{z{{{z{{{{{{z{{{z{{{{z{{{{{{z{{{z{{z{z{{{{z{{{{z{{{{{z{{{{{z{{{=\n{{z{{zzz{{{{zz{{z{{{{z{{z{{{z{{{{{{{{{{z{z{{{{z{{{{{z{{{{{{{z{z{zz{z{z{{{=\n{{{{{{{{{{{{{z{{{{z{{z{{{{{{{{z{{{{{{{{z{{{z{{z{{{{{{{{z{{{{{{{z{{{{{{{{{=\n{{{{{{{{{{{{||~}}=01=01{{{=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}{{{{{{{{{{{{{{=\n{{{{{{{z{zz{{{zz{z{z{z{z{z{z{z{z{{z{zz{{{{{{{{{{{z{z{{{zzzzzzzzzzz{{{{{{{=\nz{z{{{{z{{z{{z{{z{z{{z{{z{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{z{{z{{{{{{z{{{z{=\n{{{{{{z{{{z{{z{{z{{{{{{z{{{{{{{z{{{{z{{z{{{{z{{z{{{{{{{{z{{z{{{z{z{{{{{{z=\n{z{{{{{{{z{{{{{{{{z{{{{{z{z{{z{{{{{{{{z{{{{z{{{z{{{{{{{{{z{{{{{{{{z{{{{{{=\n{{z{{z{{z{{z{{{{z{{{z{{{{{z{{z{{z{{{{z{z{{z{z{{{{z{z{{{{{z{z{z{{{{{{{{{{{=\n{{{z{{{{{{{z{{{{{{z{{{{{z{{z{z{{{{{{{{{{{z{z{{{z{{{{z{{{{z{z{{{z{{{{{{{{{=\n{{{{{z{{{{zz{z{{{z{{{{{z{{{{{{{zzzz{{z{{{{z{{{{{{z{{{z{{z{{z{z{z{{{z{{{{{=\nz{{{{{z{z{{{{{z{{{{{{z{{z{{z{z{z{{z{{{z{{{{{{{z{{z{z{{{z{{{z{{{{{{{{{{{{{=\n{z{z{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~|||||||||||||||=\n|||||~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zzz{z{z{z{z{z{z{z{z{{z{zz{{z{{z{{z{{{=\n{{{z{{{z{{{{{{{{z{{z{z{{{{{{z{{{{{{{{{{{{{{{{{{{{z{z{{z{{{{{{{z{z{{z{{z{{=\nz{{z{{{{{{{{z{{z{{{z{{{{z{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{{z{{{{{{{z{{{{{{{z=\n{{z{{{{{{zzzz{{{{z{{z{{{{{{z{{{{{{z{{z{z{{{{z{{{{{{{{{z{{{z{{{{z{{{{{{{{z=\n{{z{{z{{{z{z{{{{{{z{z{{z{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{{{{z{{{{{{{{{{{z{{{=\n{{{z{{{{{{{{{z{{z{{{z{{z{{{{z{{z{{{{z{{z{{{z{z{{{{{{{{z{{z{{z{{{{{{{{{{{z=\n{{{{{z{{{{{{{{{z{z{{z{z{{z{{{{{z{{zzz{{{{{z{z{{{z{{z{{{z{{{{{{z{{{{z{{z{{=\n{{{{{{{{{{{{{z{z{{{z{z{{{z{z{{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{=\n{{{{{{{z{{{z{{z{{z{{z{{{{{{{z{z{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=017=1D=\nd=01=01||~|||||||||||||||||||}~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{{zz{z{z{z{z=\n{z{z{z{z{z{zz{{{{{{{{{{{{z{{{{z{{{{{z{{z{{{{{{{{{{{z{{{{z{{z{z{z{{z{{z{{z=\n{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{z{{{{z{z{{z{z{{z{z{{{{z{z{=\n{{{{{z{{{{{z{z{{{z{{z{z{{{{{{{z{z{{{{{{z{{{{{{{{{{z{{{{z{z{{{{{{{{{z{{{{z=\n{{z{z{{{z{{{{z{{{{{{z{z{{{{{{{{{{{{{{{z{z{{{{{{{{{{z{{z{{z{{z{z{{z{{z{{{{=\n{{z{{z{z{{{z{{{z{{z{{{{{{z{{{{{z{{{z{{{{{{{z{{{{{{{z{{{{{{z{{{{{{{{{{{{{{=\nz{{z{{{{{{{{{{{{z{{z{{z{{{{{z{{{{{{z{{z{{{{{{{{{{{{{{{z{{{{{{{{z{z{{{{{{{=\n{{{{{z{{{{{z{{{{{z{{{{{{{{{z{{z{z{{z{{z{{{{{{{{{{{{{{{{{{{z{z{z{{{{z{z{{z=\n{{z{{z{{z{z{{z{{{{{{{{z{z{{z{{z{{{{{{{{{{{{{{{{z{{z{{{{{{{{z{z{{{{{{{{{{{=\n{{{{{{{{{{||~}}=01=01 =00 =01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{=\n{{{{{{{z{zz{{zzz{z{z{z{z{z{z{z{z{{z{zz{{z{z{{z{{z{{{z{{{{z{{z{{{{{z{{z{{z=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{z{{z{z{{z{{z{z{z{{{{{{z{{z{{z{{{{=\n{z{{{{{{{{{{{{{{{{z{{{{{{z{{z{{{z{{{{{{{z{{{{{{{{z{z{{z{{{{{z{{{{{z{z{{z{=\n{{{{z{{{{{{z{z{{{z{{{{z{{{{{{{{{{{{z{{{{z{z{{{{{{z{z{{z{{z{{{{{{{{{z{{z{{=\nz{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{{z{{z{{{z{{{{{z{{{z{{z{{{{z{{=\nz{{{{z{{{{{{z{z{{z{{{z{{{{{{{{z{z{{z{{z{{{{{{{{{{z{z{{{z{z{{{{{{{{z{{z{{z=\n{z{{z{{{{z{{z{{{{{{{z{{z{{z{{{{{z{z{{{z{{{{{z{{z{{z{{{{{{{{{{{{{{z{{z{{{z=\n{{z{{z{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{z{z{z{{{{{{{{{{{{z{{z{{z{z{{z{{{{=\n{{{{z{{z{z{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||~||~~~~~~~=\n~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{z{z{z{z{z{z{z{z{{z{z{{z{zz{{{{{{=\n{{{{{{{{{{z{{{{{{{{{z{{{{{{{{{z{{z{z{{z{z{{{z{{z{z{{z{z{{{{{{z{{z{{z{{{{{=\n{{{{{z{{{{{{{z{{z{{{{{{{{{{{z{{{{z{{z{z{{z{{z{{{{{{z{{{{{{{{{{{{z{{z{{{{z=\n{{z{{{{{{{{{{z{{{z{{z{{{{{{{{{z{{{z{{z{{{{{{z{{{{z{{{{{z{{z{{z{{{{z{{{{{{=\n{{z{{{{{{{{{{{{{z{z{{z{{{{{{{{{{{z{z{z{z{{z{{z{z{{z{{{{z{{z{{z{{z{{{{z{{z=\n{{{{{{{{{{z{z{{{{{{{{{{{z{{{{{{z{{{{{z{z{{{{{{{{z{{{{{z{{z{{{{z{{{{{z{{z{=\n{z{z{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{z{{{{{{z{{{z{{{{{{{{{{z{{{{{{{{{{{{z{=\n{{{{{{{{z{{z{{z{{z{z{{{{{{z{{z{{{{{{{{z{{z{{{{{z{{z{{z{z{{z{{z{{z{{z{{{{{=\n{{z{{{z{{z{z{{{{{{{{{{{{{{z{{z{z{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=\n=FF=01=01=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zzz{=\nz{z{z{z{z{zz{z{{z{z{z{{z{{z{z{{z{{z{{{{z{{z{{z{{{{z{{z{{{{{{{{{{{{{{{z{{{=\n{{{{{{{{{{z{{z{{{{{{{{{z{z{{z{{{{{{z{{{{{{{{{z{z{{z{z{{{{z{{{{{{{{{{{{{{{=\nz{{z{{{z{{z{{z{{z{{{{{{{{{{{{{{z{{z{{{{{{{z{{{{{{{z{{z{{z{{{{{{{{{z{{{{{{=\n{{{{{z{{{{{{{{{{{z{{{{z{{z{z{{{z{{z{z{{z{{{{{{{{{{z{{z{z{{z{{{{{{{{{{{{{{=\n{{{{{{z{{{{{{{{{{{{{z{{{{{{{z{z{{z{{{{{{{z{{z{{z{{{{{z{{z{{{z{{{{{{{{z{{z=\n{{{{z{z{{{{{{{{{{{z{{{{{{{{{{{{{{z{{z{{{z{z{{{{{{z{z{{z{{z{{z{{{{z{{{{{{z=\n{{{z{z{z{{z{{{z{{z{z{{z{{{{z{z{{z{{{{{{{{{{{{{{{z{{z{{{{{{z{{z{{{{{{{{z{{=\n{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{z{z{z{{z{{z{{{{{{{{{z{{z{{z{{z{{{=\n{{{{{{{{{{{{{{{{{{||~}}=01=016=E8T=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{=\n{{{{{{{{{{{{{{{z{zz{z{{zz{z{z{z{z{z{{z{z{{z{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{z{{z{{z{{z{{z{{{{{{z{{z{{z{{{{{{{{z{{z{z{{{{{{{{z{{z{{{z{{z{{z{{{{=\n{{{{{{z{{{{{{z{{z{{z{z{z{{{{{{{{{{{{{{{{{{{z{{z{{z{z{{z{{{{{{{z{z{{{{{z{{=\nz{{{{{{{{{{{z{{z{{{{z{{z{{z{z{{{{z{z{{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{z{{z{{=\nz{{{{{{{{{{{{{{z{{{z{{z{z{{z{z{{{z{{z{z{{z{z{{{{z{{z{{{{{{{{z{{z{{{{{{{{{=\nz{{z{{{{{{{{{{z{z{{z{{{{{{z{{{{{{{{z{{z{z{{{{{z{{z{z{z{{z{{{{{{z{{{{{z{{z=\n{{{{{{{{{{{{{{z{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{z{{z{z{{z{{=\n{{{{{{{z{{{{{{{{{z{{z{{{z{{z{{z{z{{z{z{z{{z{z{{z{{{z{{z{{{{z{{z{{{{{{{{{{=\n{{{{{{z{{z{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00-=01=01||~||~=\n~~~~}}}}}}~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{zzz{{z{{z{z{z{z{z{z{{z{z{=\n{{z{{z{{z{z{{z{z{{z{z{{z{{{{{z{{z{{{{{{{{{zzz{{{{z{z{{{{{zzz{z{{z{{{{{{{{=\n{{{z{{z{{{{{zzzz{{{zzz{{{z{{z{{{{zzzzzz{{{{{{{{{{{{{z{z{zzz{{z{zzzz{{zz{z=\n{{{{zzzz{z{zzzz{{zzz{{zzzzzzz{z{z{{zz{{{zzzzzz{{{{{{{zzzzzz{{{zzzzzzz{{{{=\nzzzz{z{z{{z{{z{{z{z{{{{{{{{{{z{{z{{z{zzz{{{{z{{{{{{{{{{{{{{{{{{{{{zzz{zzz=\n{{{{{{{{zz{z{{{zz{{z{z{{z{zzz{{{z{zzz{z{{{{{{{{{z{{{{{{z{{{z{{{{{{{{zzzzz=\n{{{{{{{{{{{{z{{z{{{{{{{{{{{{{z{zzz{{z{{{{{{z{{z{{{{{zzz{{{z{{z{z{{z{z{{{{=\nz{z{{{{zzzz{{z{z{{{zzzz{{{z{zz{{{z{{z{{z{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{z{{{{{{z{{{z{{z{z{{z{{{{{{{z{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{||~=\n}}=01=01=02=A4=1C=01=01||~||~~~~~}}}}}|~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{=\nzz{{{zz{z{z{z{z{z{z{z{z{z{zzz{{{{{{{{{{{{{{{zzzzzzzzzzzzz{{{{{{{{{z{z{{zz=\n{{{z{{{{{z{{z{z{{{{{{{z{{z{z{{z{{{{{{{z{zz{{zz{zz{zzz{{{{{z{{z{z{{z{z{z{z=\n{{z{{z{{{{{{{z{{{{{zz{{{z{{zz{z{zz{{{z{{{{z{z{{z{{z{z{{{{z{{{{{zz{{z{{z{{=\n{zz{{z{z{{z{{{{zz{{z{{{{z{z{zz{{zz{{{z{{{{{{{{z{z{{z{{z{z{{{{{{{{{{z{{z{{=\n{{{{z{{z{{z{{{z{{z{{z{{z{{{z{z{{z{{z{{z{{zz{{z{{{{{{{{{{zzz{{{{zzz{{{{z{{=\n{z{{{{z{z{{{{z{{{z{{z{zz{{{z{zz{z{{{z{{z{{{{{{{{z{z{{z{z{z{{{z{{{{{{z{z{{=\n{{{{{{{z{z{{z{{{{{{{{{{{zz{zzz{{{{{{zz{{{{{zzz{zz{{zz{{z{z{z{zz{{{{{{z{{{=\n{{z{{z{{z{{z{z{{z{{z{{{z{{z{{z{{z{{z{{z{{{{{z{{{{z{{{{{{{{{{z{{z{z{{{{{{{=\n{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~||~~~~~}}||||~~~~~}}~~}}=\n{{{{{{{{{{{{{{{{{{{{{z{zz{z{zz{z{z{z{z{z{z{z{z{{z{zz{z{{z{z{{z{{z{{z{{{{{=\n{{{{{z{{z{z{{z{{{{{{z{{{z{{{{z{{{{{{{z{z{{z{{{{{{{{{{{{z{{z{{{{z{z{{zzz{{=\n{z{{{z{{{{{{{z{{{{z{{{{{{{{{{{z{{z{{zzz{zz{z{z{z{z{z{{z{{z{{zz{{{z{{{zz{{=\n{{z{z{{z{{z{z{z{{{{zz{z{{zz{{{{{zz{{z{z{{{z{z{{{{{z{z{{{z{z{{{z{{z{{{z{{{=\n{{{{{{{{z{z{{z{zz{{{{{z{{z{{{{{{{{{z{{{{{{{{{zz{{z{{{{{{{{{{{{{{z{{zz{z{{=\nz{z{{{z{z{{zz{z{{{z{{{z{{{z{{{{{{z{{{{{{{{z{zz{z{{{{zz{{{z{{{{{{z{{z{{{{{=\n{{{{{{{z{z{z{z{{z{{{{{z{{z{{z{{{z{{{{z{z{{z{{zz{{{{zz{z{z{z{{{z{{zzz{{z{{=\nz{z{z{zzz{{{{zz{{z{{{{z{{{{z{{{{{{{{{{{{{{{{z{{{{{{z{{{{{{{{{{{z{{{{{z{{{=\n{z{z{{z{{{{{{{{{{z{z{z{{z{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~|=\n|~~~~~}|||||~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{zz{z{z{z{z{z{z{z{z{{z{=\nzz{{{{{{{{{{{{{{{z{{z{{z{zz{zz{{{{{{{{z{{zz{{z{{{{z{{{{{z{{zz{{zz{{zzzzz{=\nzz{z{{{{{{{{zz{{{{z{{{z{z{z{{{{{{z{z{z{zz{{z{zzz{{zz{{{{{{z{z{{z{zz{{{z{{=\n{{{{zz{{{z{{{zz{z{{z{{z{zz{{z{{{{{zz{z{z{{z{{{{{z{{{{{{z{z{{z{{{zz{{z{{z{=\nz{{{{{z{{{{{{{{{{zzzz{{zzz{{z{{{{{{{{{{z{z{z{{{zz{{z{{z{z{{{{z{{z{z{{zzz{=\n{z{{zzzzz{zzzzzzz{z{zz{{{{{z{z{z{{{z{z{{{{zzz{{{{zzz{{z{zzz{zzzz{{{z{{{zz=\n{z{{z{{{zzzz{{{zzz{{z{zz{zzz{zzzz{z{{zz{{{{{{zzz{{{{zzzz{zz{{zz{{{{{{z{{z=\n{{z{{{{z{{z{{{{z{z{{{z{{z{{{{zzz{{z{z{{{{{{z{{{{z{{{{{z{z{{z{{z{{z{{{z{{z=\n{{{{z{{z{z{z{{{z{z{{{z{{{{{{{{{z{{z{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{|=\n|~}}=01=01{{{=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{=\nzzz{z{z{z{z{z{z{z{z{{z{zz{{z{{z{{z{z{{z{z{{{{{{{zz{zz{{z{{z{{{{{{zzzz{{{{=\n{{{z{{{{{{z{z{z{{{z{{zz{zz{{z{z{{z{{zz{zzz{{{{zz{{{z{z{{{{zzzzz{z{zz{{z{{=\n{z{z{{z{zzz{{z{z{{z{{zz{z{z{{{{{{{{{{zzzzzz{{{{zzzzz{z{{{z{{z{{{zz{{z{zz{=\nz{z{{zzzzz{z{{zzzzz{{{z{z{z{{{{{z{{z{z{{zz{{zzz{zz{{{z{{z{z{{zzz{z{{zz{{z=\n{{{{{{{{{z{{{{{{{{{zz{{z{{{z{{{z{{z{{z{{{zz{zz{{{{{{z{zzzzz{zz{{zz{zz{zzz=\n{zzz{zz{z{z{{zz{z{z{z{zz{{{zz{zz{{zz{z{{z{{{{zz{{{zz{z{{zz{{z{z{z{zz{{{zz=\n{zz{{zz{z{{{z{z{{zz{{{{{{z{{z{zzzz{{zzz{z{z{{zz{z{{z{z{z{{{{zz{{{{{{z{{{{=\n{z{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{z{{{{{{{{{{{z{{{z{{z{{{=\nz{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{=\n{{{{{{{{{{{{{{{{{z{zzz{z{zz{z{z{z{z{z{z{z{z{z{zz{{{{{{{{{{{{{{{z{z{z{{z{{=\n{zzz{{{{{{{{z{zz{{zz{z{{z{{{z{{z{z{{{z{{zz{{z{z{z{{{{{{{{{{{zzzz{{{z{z{z{=\n{{{{{{{zz{z{{{{{z{{zz{{z{{{{{{{z{z{z{{z{{{{z{z{{{z{{{zzzz{z{z{{{{z{{z{z{{=\nz{{{{zz{{{zz{{{zz{{{{z{{{{{{z{z{{{{z{z{{z{{z{z{{{{{{{z{{{{{{{{{z{{{{z{{{z=\n{z{{{{{{{{{z{{zz{{z{zzz{z{{z{{z{{{{{z{{z{{z{z{{{z{zzzzz{zz{{z{z{z{{{zz{z{=\nz{zz{z{z{{z{{zz{{{z{{z{{{z{{z{{{{zzzzz{z{{z{{{z{z{z{{z{{z{{{zz{{z{z{{z{{{=\nz{{zz{{zzzz{{{{{{zzzzz{{z{z{z{{z{z{z{{{{{z{z{{z{zz{{zz{{zz{{z{{z{{{{{{z{{=\n{z{z{z{{z{z{{z{{z{{{{{z{{{{z{{z{{z{z{z{{z{{z{{z{{{z{{z{{{z{{z{{z{{z{{{{z{=\n{{{z{{z{z{z{{{z{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01{{{=01=01||~||~~~=\n~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zz{{zz{z{z{z{z{z{z{z{z{{{z{zz{{=\nz{z{{z{{z{z{{z{{zzzzz{{zzz{{z{z{{z{{{z{z{{z{{zzzzzzz{{{{zz{{zz{{z{zz{{{zz=\n{zzzzzzzz{{{{z{z{{z{{{{z{{z{z{z{{{z{z{zzzz{z{{{{z{z{{z{{z{zzz{z{{{{{{z{zz=\n{z{{{z{{{z{z{{zz{{{z{{z{{z{{zzzzzz{{{z{{{{{z{{z{{zz{{{z{z{{z{{z{{z{{zz{{z=\n{z{{zzzzzz{z{z{z{z{{z{z{{zzzzzz{z{z{{{z{zzzz{{{{{{{zzzzzzz{{{{{{zz{{z{{{{=\nz{z{{{{z{zz{{{zz{{z{{{{{{z{{z{z{zz{{{z{z{z{{z{z{z{zz{z{{z{{{{zz{zz{z{z{{{=\nz{zz{{{{z{{zz{{{{{{zz{zz{{z{{{z{z{{{{z{{z{{z{{{z{{{z{zz{{{zz{{z{z{{{{{{z{=\n{{z{z{{z{z{{zz{z{z{{zz{{{{z{{{{{{z{{{{{{{z{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{z{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{z{{z{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=\n=01=017=1Dd=01=01||~||~~~~~~~~~~~~~~~~}}~~}}{{{{{{{{{{{{{{{{{{{{{z{zzz{{z=\nz{z{z{z{z{{z{z{z{z{z{zz{{{{{{{{{{{{{{{zz{{{{{{{{{zz{{{{{{{{{{zz{{{{z{z{{{=\n{{{{{{z{z{{{z{{{z{{z{z{z{{z{{{z{{{{z{zz{{{z{{z{{{{{{{{{z{{zz{{{z{{z{{{{z{=\n{{{{zz{zzz{{z{{{z{{z{z{{z{{{{{z{z{z{{z{z{{{{zz{{{{{{{z{{z{z{{zz{{{z{zz{{{=\n{{z{{zz{{{{zz{{{{{{{z{{{{{{{{{{z{{z{{z{{{{zz{{z{z{{z{{{z{{z{{zz{zz{{{{z{{=\nz{z{{{{{{{z{{z{{{z{z{z{z{z{{{{z{z{{z{{{z{z{z{{z{{{z{z{z{{{z{z{z{{{z{zz{{{=\nz{{z{{{zz{{z{{z{{z{{zz{{zz{{z{{z{{{z{zzz{{z{z{{{z{{z{z{z{{z{z{{{{zz{{{{zz=\n{{zz{{z{z{z{{{{{z{z{{z{z{{zz{{{{zzzzzzzz{{{{{{z{{z{{{{z{z{zz{{z{z{{{{{{{{=\n{{{z{{z{{z{{{z{z{z{{z{z{{z{{z{{{{{{z{{z{{z{{{z{{{{{{z{{z{{{z{{z{{{{{{{{z{=\n{{{{{{{{{{{{{{{{{{{{||~}}=01=01 =00 =01=01||~||}}}}}}}}}}}}}}}}}}~~}}{{{{=\n{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{||~}}=01=01=00=00=00=01=01||=\n~|}}}}}}}}}}}}}}}}}}}~~}}{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{=\n{||~}}=01=01=FF=01=01=01=01||~~~~~~~~~~~~~~~~~~~~~~~}}|||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n||||||||||||||||||||||||||||||||~}}=01=016=E8T=01=01||~~~~~~~~~~~~~~~~~~~=\n~~~~}||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||=\n|||||||||||||||||||||||||||||||||||||||||||||||||||||||||~}}=01=01=00=00-=\n=01=01||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=\n~~~~~~~~~~~~}}=01=01=02=A4=1C=01=01||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01{{{=01=01|}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}=01=01{=\n{{=01=01zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=\nzzzzzzzzzzzzzzzz=01=01{{{=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01{{{=01=01{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01{{{=01=\n=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{=01=017=1Dd=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01 =00 =01=01{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=00=00=\n=00=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{=01=01=FF=01=01=01=01{{zzzzzz{{{{{{{{{{{{{{{{{{{{{zz{{{{=\nzzzz{{zzzz{{{zzz{{zzz{{zzz{z{{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{zzzzzzz{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zz{z{zz{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{zzz{{{{{{z{{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=016=E8T=01=01{{{{z{{zz{=\n{{{{{{{{{{{{{{{{{{{{z{{{{{{z{{{{z{{{{{{z{{{{z{{{{z{{z{{{{{{{{{{{{{z{{{{{{=\n{{{{{{{{{{{{{{{{{{z{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{z{z{{z{{{{{{{{{{=\n{{{{{{{{z{z{{{{{{{{{{{{{{{{{{{{{{{z{z{{{{{{z{{{{{{{{{{{{z{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=\n=01=00=00-=01=01{{{{z{{{z{{{{{{{{{{{{{{{{{{{{{z{{{{{{zz{{z{{{{{{{zz{{{z{{=\n{zz{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{z{{{{{{z{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{{{{{{{{{{{{{z{{z{{{{{{{{{{=\n{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{=01=01=02=A4=1C=01=01{{{{z{{{z{{{{zzz{{{{zzz{{{{z=\nzzz{{{{{{{z{{z{{{{{{{{z{{{z{{{z{{zz{zz{zz{{{{zzzz{{{zzz{{zzz{zzz{zzz{{{{{=\nz{{{{{z{zz{{zz{zz{zz{zzz{{zz{zz{{{{{zzzzzz{{z{{{zzz{{{z{{{{{{{z{zzzzzz{zz=\n{zzz{{zz{zz{{{{z{{z{zz{{zz{{{zzz{{{zzzz{zz{{zz{zz{zz{zzz{{zz{zz{{{{{zzz{z=\nzzzzz{zzz{zzz{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01{{{=01=01{{{{z=\n{{zz{{{z{{{z{{zz{{z{{zz{{z{{{{{{{{zz{{{{{{{{{z{{{z{{{z{{{z{{zz{zz{{zz{{z{=\n{zz{zz{{z{{{z{{{z{{{{{{z{{{{{z{{z{{{z{{zz{zzz{zz{{zz{zz{{{{{z{{{z{{z{{z{{=\n{z{{z{{{{{{{z{{z{{{zz{zzz{zz{{zz{zz{{{z{{zz{zz{{z{{z{{z{{zz{{z{{z{{{z{{zz=\n{zzz{zz{{zz{zz{{{{{z{{{z{{z{{{z{{{z{{zz{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{=01=01{{{=01=01{{{{zzzz{{{{zzzzz{{{{{zz{{z{{{z{{{{{{{{zz{{{{{{{{{zz{z{=\nz{zz{{{z{{z{{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{{{{{z{{{{{z{{z{{{z{{z{{{z{{{z{{=\nz{{{z{{{{{z{{{z{{z{{zzzzz{{{{{{{{{z{{{z{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{=\n{zz{{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{{zzz{{{z{{{z{{{z{{z{{{z{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01{{{=01=01{{{{z{{z{{{{z{{{{{{{zz{z{{z{{{z{=\n{{{{{{z{{z{{{{{{{{{z{z{z{z{{{{z{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{z{{{{{{{z{{{=\n{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{z{{{{{{{{{{{{{z{{{z{{{z{{{z{{{=\nz{{z{{{z{{z{{{z{{{z{{z{{{zz{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{{{z{{{{{=\nz{{z{{z{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01{{{=01=01{{{{z{{{z=\n{{{z{{{{{{z{{{z{{z{{{z{{{{{{z{{{zz{{{{{{{{zz{{{zz{{{{z{{z{{{z{{z{{{z{{z{{=\n{z{{{zzz{zzz{{{{{{{z{{{{z{{{z{{{z{{z{{{z{{{z{{z{{{z{{{{{z{{{z{{z{{z{{{{{{=\n{{{{{{{z{{{z{{{z{{{z{{{z{{z{{{z{{z{{{z{{{z{{z{{{{zz{{z{{{z{{z{{{z{{z{{{z{=\n{{z{{z{{{z{{{{{{zzz{{{{zzz{zzz{{{z{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=\n=01{{{=01=01{{{{z{{{zz{{zz{{{z{zz{{z{{zz{zz{{{{{zz{{{{zz{{{{{{{zz{{{zz{{{=\n{z{{z{{{z{{zz{zz{{zz{zz{{{{z{{{z{{{{{{{{z{{{zz{{{zz{zz{{z{{{z{{{z{{zz{zz{=\n{{{{z{{{z{{z{{zz{{{z{z{{{{{z{{{{z{{{z{{{z{{{z{{zz{zz{z{{{{z{{{z{{z{{z{{z{=\n{zz{zz{{zz{zz{{z{{{z{{{z{{zz{zz{{z{{z{{{z{{{{z{{{z{{{{zz{zz{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{=01=017=1Dd=01=01{{zzzz{{{zz{{zzzz{{{zzz{z{{zzz{z{{{z=\nzzz{{zzzz{{{{{{{z{{{z{{{{zzzzzz{zzz{{zzz{z{{zzz{{{{{z{{{z{{{{{{zzzzzzz{{{=\n{{zz{zzzzz{zzz{zzz{z{zz{{{{{zzzzzzzzzz{{zzzz{{z{{{{{z{{{{{zzzzz{zzz{zzz{z=\n{zz{{z{{{zzz{zzzzzz{zzz{{{{zzz{z{{zz{zzzzz{zzz{zzz{z{zz{{{z{zzz{zzz{{{z{{=\n{z{{{{{zzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01 =00 =01=01{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=\n=01=00=00=00=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\nz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{z{{{{z{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=FF=01=01=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzz{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=016=E8T=01=01{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{=01=01=00=00-=01=01{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01=02=A4=1C=01=01{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=\n{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{=01=01{{{=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01{{{=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=01=\n=01=01=01=01=01=01=01=01=01=01=01=01=01{{{=\n\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv\nContent-type: text/richtext; charset=US-ASCII\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n\n--Alternative.Boundary.4eAAtte0M2YtIfF9lv--\n\n--Interpart.Boundary.4eAAtte0M2Yt8fF9oM--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.6.msg",
    "content": "Return-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA05435> for nsb; Fri, 12 Jun 92 22:23:28 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA16354> for nsb@greenbush; Fri, 12 Jun 92 22:23:23 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA10002; Sat, 13 Jun 92 11:23:16 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA00452; Sat, 13 Jun 92 11:23:13 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA13778; Sat, 13 Jun 92 11:23:08 JST\nDate: Sat, 13 Jun 92 11:23:08 JST\nReturn-Path: <ysato@etl.go.jp>\nTo: nsb@thumper.bellcore.com\nSubject: Re: [95:taka@fxis.fujix] MIME and Header encoding RFC.\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nOrganization: Electrotechnical Laboratory, Tsukuba Science City\nMessage-Id: <gELh6.ysato@etl.go.jp>\nReferences: <9206120510.AA06898@atrai.sala.sony.co.jp>\nContent-Type: text/plain; charset=ISO-2022-JP\nMIME-Version: 1.0\n\nHi.  I received a message from a member of i-headers mainling list,\nas follows:\n\nIn message <9206120510.AA06898@atrai.sala.sony.co.jp> on 06/12/92(14:07:02)\nyou taka@fxis.fujixerox.co.jp wrote:\n |FXISの神戸です。MIMEとヘッダのエンコードに関するRFCが出ました。\n |RFC1343は、ほとんどmetamailみたい...。\n |\n |RFC1341(.txt/.ps)\n |\n |\tMIME (Multipurpose Internet Mail Extensions):\n |\tMechanisms for Specifying and Describing the Format of\n |\tInternet Message Bodies\n |\n |RFC1342(.txt)\n |\n |\tRepresentation of Non-ASCII Text in Internet Message Headers\n |\n |RFC1343(.txt/.ps)\n |\n |\tA User Agent Configuration Mechanism\n |\t\tFor Multimedia Mail Format Information\n |\n |RFC1344(.txt/.ps)\n |\n |\tImplications of MIME for Internet Mail Gateways\n |\n |--\n |神戸　隆博（かんべ　たかひろ）\t\tFXIS / Network Team.\n |\t\t\t\t\ttaka@fxis.fujixerox.co.jp\n\nHe says that MIME has got RFC numbers and RFC1343 is almost about\nMetamail.  Where can I get these official RFCs?\n\n--\nYutaka Sato <ysato@etl.go.jp>\nInformation Base Section\nELECTROTECHNICAL LABORATORY\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.7.msg",
    "content": "Return-Path: <nsb>\nDate: Fri, 29 Nov 91 07:13:33 EST\nFrom: Nathaniel S. Borenstein <nsb@thumper.bellcore.com>\nSubject: Testing Multipart messaging\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=foobarbazola\nTo: nsb\nStatus: RO\nMessage-Id: <635263359948143070.21002.1@Jeffreys-MacBook-Air.local>\n\n--foobarbazola\n\nThis is a text prefix.  You should be able to read this, no matter where you are.\n\nOnce you've had a chance to  read this, interesting things should start to happen.\nIn particular, a picture and audio should appear more or less *in parallel*.\n\nFinally, a magicmail message should sort out the pieces.\n--foobarbazola\nMIME-Version: 1.0\nContent-type: multipart/parallel; boundary=seconddivider\n\n--seconddivider\nMIME-Version: 1.0\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\n--seconddivider\nMIME-Version: 1.0\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\nSubject: TV Theme songs\n\n8vp7cnRvc29ubWxcUebUX0tM1N5bauLZ5ejv2N5772hiX1lVVFdZWWPm0dDU1+LubmZhW1VXXVlfdOnZ0tHPz9TY3/ZgV1VUV2Lw7e/0cmRcV1FPUFZeb+7g2dLOzc7U5HJfYFxYWF/66uni3el0Zl5ZXFtdZnPx4djOyMXGz3FJPkzjXFVf/NfX2dzf5vj2\nfXn39OLe9k46N1zAwM1maM7wVkxLW+bQ1dzi49zW0NDX4mBAOVfHyNDcdHfe4mdbUUtHTnXYz8/U09Ta2dTQ7UhJ1cvnT0VP//fd2O9WRkI+PEVlzsC/yM7PycG+vcpFOO69zF9PbOx+YFJJOzY2MzM8X8i7u7y7uLOxtsRLQ8m+2U5KXurcWVNRRTs3My0q\nLkDZv7+8tq+trrHGU9i5vtxUVW3ldFJPRzszMi4qKS9Oxbu8tq6qqay31Me3v9tRT2p3X05IPzwxLi8tKSk0aMO/vrSurKuvvb+ysr/mWGH1Z0tFPz01LS4vLiwvTcO5v8K6tK+wt7evr7nJ6+7qa05DPjs4ListLS0uO9C2tsDBvbm1trKur7W9zeF8Xk1F\nPjo3MSsrLSwtL027rrK9vbq1sa+trrK4v8vacVZORT88OTAqLCsrLDFnubK9wLixraysrrG4vszkaVtaW1tbXllDQlBd7GJLQj04NTg9RlJgeuna0tDV2dfQzczJxcPL6M2+u8VZPDQxMDM4P0pQWmfu3dbb4ePc0czIw7+/zta+t7rdRDg0MzM3PkhPVl58\n4Nra3t/b0szIw7++w9jNu7W67EM5NjY4PEFITFVgde/k3+br4tnPy8XBwdJq28a5uc9SPzk2OD1FTVRn+Ofb2Nbe3tXOysbExMjn787FurnFbEE5PTw4Nj1aU09f4dbZ29nLzc3IysnReOrWzsXBxd1NOzU0NzxBT23h1cvL2e9pX15u8drO1tvN0c/Gv8LU\nfltMRkM/Pj08PT9HU23s3dbPycS+vsnMy8vBvsV3RDkxLi4zOj5FSU/XubS0srKys7S2ucJhPzQyPkc5MzAwMC8xOd2qqauqrK6xtLvLTzUxRfpMOjI5UkY6MzNdr7K2sLS1u8TdYExGPjIySeXc63xQPT7PrbPFzMjE2mlNRklOREJKbdTV5djFy7usu9No\nSGzb/E5EOS8qLj7nx7/DzNi9paSrtEgzPWDyUz8/PC4wOkZ76lI/SrSpr620vs5RP2DK7z88Uezc1NPV3XTCr8htSzw0KSQkLlXi139R6b2sp6y3ppicqLfhSzcnHR0jKikpIx0dJEq1qqOYkZWXnaq9xHArJztMQTstHxoaHy05b6uorKeoqbG72i86p6m8\nv8s7Jyg38MG1pqm7zkU1LSceFhEorautyllGxqikn5yWmaKpuMZWNiccEw0bNC0eGB03rqGfn5eUmZqfpaiwyz4qHBcoRiQgKC09Rz47YcLHr6Whpq+5x1gsJXGtbU+8vMi4w+G4sdZeRDUtIx0bGxoisaO6v6edn6OjpJ6Yoayyy1UvIh0XDg8pLRwYIEW8\npJ2dmJGVmZykrMBlPCkaHOndKh0eKCg0RztHwcy+qKOhqa+zzi4uq6fSODhvbLevytO3x0Q9LiojHRscHB6/n7G3qZyfnZ2mp6CmtLrOVDYpHxoVDxcgGh8u5K6kn6KdlpWam5+ntc1FLiQbHicocM/qOygrKCxJW8+rpqu0s7nLTC46XsiioaSwYlZKSr/Q\nOjYuKSMeGxodJFN41p2Xk5ijpqmpn6Kzvuw/LiciHBQQGx0YK1Gwo6alqqeZmJydpK24yVY0IhwrLx8rab7IRDw2MzAyXL69zNrOz+o/M1TyPGquop+lqrC+3E5PRzo3NS8tLSorOT452qugnqSqrrrMYVhZT0xBNzQyLisuKy/ptauorK+1vcra19R2WlBA\nPj85LiouX7mvrK+1vM1XQT9LWFdeX0pHU2VGLzq+r62vtbq7yVA/P0VAOzk5ODY6REo3Pbyspqessba7zmpLQj04Nzc2NjY+Tzs317aurK61urrCzuDreUtLcFU+MDlKNC5NvbOwtLi9y9J9VFZST1Rk6eh+7+pnT1RcUklITVNVVFlb69LPzczN0+NfVFRT\nYebc5+PQy9V9Tz8/QUBBSVNq4NXW29TFv8LKzczS9XJgTlVkYFZPU1xeWVJJQUpia+jIt7O3uLvJ1vVOPDY6UVtPT0Y+PD88OtKnqa2tsrrCzWxFNS82S0o9NC43QGmsqq6ts7nG12tJPDg0MDE0Liw1WK+en5+pub/rW0Q3Mi0qKywsKzA/r5udo7XMyLmy\nu95EOTIsKSgoKD61tbndW8m8uLu5wcv2SEg/Li25oqeuPzVETE1HPzguJiMnMdqinZ+fs97NxctNKiQzVEw6PLCdoaOseDMuLConHx0fKCwsUJ2Sko6TrkVV2MTORi4mIh4aH0tsWL21JB9Vwaiip6+3ub/UrqWuqqmlvRweIyQuMjI1NTEwOE3NtKujnKo0\nPklNTTEtMUJX07mvrqytr6u9MjhEQTUsLC88OjM+3rmup6Kr32vYzb/eTktGQjcxOU1KPWLNZM63tLS1wOZj9tzg53teSkw+KiktR7musbi7yd3i3t/Px8TXPDU4Nj5GMzXmvbW0tra5v8LBWz9Z3s3ZRDUyMDEuOtK2r7GxtcrWw73E4U5JSkpDOzY1NzI5\n5sO+tLG1u8PN0971eG1eVEY/PDY1Nzvit7KxtLi+xcjS29vwYE9FQTs2OkA+O0nNu7i4urq/xM3o1NF+b/5PPjY2Ozc2RM+7t7rBwcnT0dLS315TVEc9OT9NRkltxLq4uby8xdHkdmtcT09iWUc9PTw3RN7Curq7vsHNbU9e3+lVSU5QSkQ/OT3rwrq3ur7F\nxcXM3X5uWElHS01HPkBDTdjHycu7vsy+v83T5uP9WElHSkc7NjU9a9PEvr27vcfSz8ra6eBeV1VJPjg0LS5D4sO7vL67t7m+w9j5Vz84NzU1Oz86PVzOt66xtri7wdlXOzIxLzI7Qk/jwN9S1sW4rq+6zFY+OzYvLTZGx6qwsLfZ4Fp1Tz40LS4vLzBFpJSd\np7G4v95JNSwgHBwcHDKmk5mbn6Wnv1xNNyQbFRIdapyboqOnpamtu10uIB0YEzucrKmiqq/E0EAxKiUhHCmgmaqfoq6tqLM9Jh0aFRTVnb3IzK2oqqmlsOc6Gxyfla6+LiwvKSMgHxwsNs2LiJGWq1c0RDMoHBURDxDOj5idqb6oqK23xkMqHS0mtpK3sD1J\nYy0mIB0aLKOnNJaModREqq/VQSsdHMlcHhlFqigpX7Osnpmdp5edXSQznz0ZEBMVDxgptI+LlKipi5arQxwgHRgREtCdrkYkm6RPyDK2rrr+O7OqKy0vmYytzhoZHxgXFiqdnqw0OI6RlKVduzMlHyTMwyYaCyTCITy8kY6Ynqygma88HR2j0B0RDRIRHzuo\njImSoUuVjarvGx4ZEhAVxJejbBospOinra2lv1kuM8m7s8y0jqVYIBEcFxQRFryWqzHFhYWPmjQ7OSAeHSTcKhQMFD3kl5mUj5ums8CioDUbGLQ9EwwX0jkuKTWljJGfspOOujQWFQ8aXmi6np80GSasQrexsq0+LBkkmY2YsbeTsS0dEx0XEQ4UQ5+voY+C\nhZepJywpGhoaHTUrDwwZtpmMjpCTqMBSMuenNBstxB0PFzuwTSQpQaiNlLehjprbIxEYLs3KzjvCxhgYS8i7qrmqxRwfr5+Zj6ZmoqZKKxcZHhALCgwui4mTiIWPnz0tVysZFREPHRMKZpOcl5KVk5u2bz0pP8MbH14hSq7IttMnFxQgsZGdqo+atzISJaKg\nr/4tI0w5Fi9fJ3Dfy7I1LKqZnJaTuradzS0bFBoTDAkJFZuBh4qEjZ3BJSksIRwWDw4VGSeamJqSm5+irb5JLSJIyBoiuq2gvTpbIhQTHUSfkaWfkr0mN06lobnELBsbTi0dPS01ukIrsp6XlqaqnKNNqaw1IRMPEgwFDTKbhYWNiouYqkIkJyEWEg4ID1TL\nnJarop2fn6PDXk8mH0EdGaealZ7wNyQWDxEb4JSWqJmrL2ipl5arSycbFik0HDc3HScrLquUjo6ar7WlScGpQCgZEw8IBQ0jo4uEio+MlZ/DMzAkGg4IDBy8pK2hrbuon5uisFkvLR0cSr6elpqsPiwfFQ4PGzSllKq+nZWZnZqfvDIeGRYaOyYaHxwbMpmS\nko+YpLTWo6d4tPooGQ8LCA0VIKSQiIaRj5Ccqc81HxQLBQse9Jefs7ZOtp2YnKXRLiQZFEKopJGSotopGxcQDQ8dwpKcPKSRkI+PnbUxGxoXFio5GxwPDDiXj42Lk6K0Q7OdutBOKxwLCRYcFxcvp5GEi4+PmqT+MSMPDBgcGyOdltHSL02pnJyqxzkaDySf\nk6KalavTLB8aEg4OEyG3n5qNjY+QkKC5TSIaExIYMiAPCRG2l42Oi5KfrlhZopu8RyAXCggXIh8eSLuji4iPk5SbrjgaDAwdJyIksJe8Py1Bs5uYpbgrFBo5s5SYmZi5Xi8hGBgRDA4PG5SHjI2Tjo+hyUQsHxsTDx4eDRsmLq2WjIuRnaKvzLWr1zUaDhwt\nJR0aJE3dtZiTl5yoy0InFh4+P0s8Sa6pu7LC676yvzkiGSDBt8V3zqOhvLjCYVI5LSgqJSTfr6mwvqScrLPIRl9fRyseGRs6yLm3uamftbOst7hmSEQyHxwuVFhFNm+lq6usxbi6w9c8KCw8Pz9CRv2xy9WzyMXRzsA/IyxV2MLGZFCrqcK52dNNNzUpIDDV\nz+rTwM2ooq6sv9FDMjIrICQ1Slla19Gqn66xvbu5zEQuKCw+RUpNRzlau8KyrbO3vdNIMjFgyM9uPDFJsbnXzM/K1WNHPjZARkJc3tvXraq0uNdnWkg4KiEvatbZ6uXYr6mzrrO9zT0vKCUvOz5W7F1OuqSqp6/Q3GFPNC88V0c6Nzg5XK+/vLK7vsz4TE5P\nXubX1FY1OMfP18dcTE9ANkPZu7rXYlVMZq+vvrr2RDUwM0FORExd8fTj46qktLjOxsVoODI0NDQ0NzxOUbirsqqtt8hUOztFS0ZFRDcsLNOptbq8w8nhXERdzNNNQljuTd2uwVNIRkdESkZT89bDv9L0TPStrbjA1Fg5LCYvWHZYYllcWM2qp7G61EdFUElF\nRzwzODw6PE21qbu9uLe84lRT8ONPT1A/Nis3yMe6vcbL18zGv8Pb6Gs8NjvhtuNNTlZMPEJa29JZVsa7x2PVsLa6vuFSNi0pKjdLbNzrZ92zo6iurrz9NTI7SVY7LjA6OTtnr622uMPCzdtiW9nE1lZJPDIzV3pS1MvUalLPurvCy+tVSTk43rbJ3UI6TkdE\nZdTd09bjd1dXw6+6tLfZSz04ODYzPklQXk1GvKOmrbPG3lQ+R0c6OzgxMjo9U7mysay7zn9d295MUM7HbD02O87F481PQENATcO7x9fp+G585L27xb12NDM/R0pCR3bIxs/19r+0v7yyxVc5NTw+Ojs+PkdbY82pqKuy21pIRlRNPj8/OC41QVW6tbSvuL/Z\nVunac1ppz19FPj7Sv9fuSD9GT3jwxb6/xllBT+S2sMLIYj4xMz08SElX19997+W5q7G7035SUk45OTtIXkM7SGXDrqywu95BPkdNbWxkfk47OUTkta+6zGts2dbpX1FLRUNHR0pXxrm9vdtPRkpUU2F/XVBKREBPs6qxudNSPkFKQkFEPj9AaMrPuKyvuM5s\nT0ZYW0w+PU9EQUZcvK6zudFUUUxFP2X9YFZER0laxbi9xNRVS/nvWv5r4O1HRkhOzrrA9/RxUldJTevaz+NNTFxs4buwvclmTlVGQkRGTEI7PEbsw6+rs7S/1+tPRkJAOzQ0O0NJUb2rr7jJaWRaUkVDT1xoaWXy276zxX9MPkVCRExh693Vy8TJ1Me2vMpm\nPj5AP0BNa9LfTkdNb825uL2+zvJYSldfQjk0OD5JZNC1rbC1v8LGW0xKTE04LjA6S3LFtbe1wu1eTeXR3OllX313ee3Cu/BFPERJPkhf7uZeWeHJvr+6tLvUS0NCODk9P0xVbGFSUdm3sLa+xtftTUhSZE88ODhLaN2/srPAzt7Y39zkZ0hDRz9BRUtjz8K/\nwcrdVkti3PxiXVRWVVTexLrBdkE8Slnt5FpKSUt/zb+1tbO+zO1KPzw8PDs8RlHi1eLZv7Cwub/Pb09IUU5CPzk2OU7TyL7BzMnT3c/IvcVePzw/PT5LWtjP587V9nla+dfY4/vrbvrS0sW/0dhQOTk/WupuZGlqb9G6uLGxzl5JPT4/Q0Y+PkNPTmrJysO3\nt7rB08zZ/VlMRTo7NzQ8Tty8vMDM5cu/vcTL6UY+PUNUZ97CyvpvTU3n1GxWTEhe7dTEx8i6udJlRzxBR0ZNTkteaXjJv7+3s8dgQzpAWF1OQjk9RUjrw7+9t7zHzdDLyNZnTTo3OTo/Uu7QwMHKzdvVvsDM0vNQPj5KWmP21+BPUFlOW3T38/ztbGTVw7/G\nxL7cUEtDQ0RLT0FARFHozbqzs7O/3W1gZUU+QTk3NkXt7tLAuLO8xtLYxdlfRz5GPDo/QU/qycJ/UmfZyM2+w31oT09ZW2xfbtpnR0Bezn5282T8du3YzsK+v8HE0FJLWklISEFDOzxK9cy/trW3vNN452ZfTz86NDQ7XOXnzsjBwcnLx8fHz3lLREM/R0pN\nbdvK0Xvx08nIxsn0Vko/RVfy1N7l6mBr2M/pZGFORVb8283Hvsbb5XpYVFVNQT5BQEZHWdnHurS3vcbR325tU0I9PD88PFDfysbLx8rDur29xtxPOTs+PkVQZ3T4zt/szsa7x9PRf1NNR0ZKXV9Y8mhkYl7Kyu9oW1JV28fJwsfV21lVa1ZfXE1JRUhJXd/M\nvr++t7vEzXhtWVJMQj8+SU1R2NLs2NnLvcbLwXde70ZDTl9PUU5DT2rb4Xj179rgz8fW3HtUYGFRTkZKd9jb2Np7fOt83MnEvsthUEVDZsm/yOpKQEZBQ09X2cjKv75n4sDL121NQD42NELYuM5fz1VE8ca5vL/Ob1Q/P3RGP9njWEdMVdzGxsPCvcDKzEg/\n+ExBRUFJQE/m1sO4tsta2Ng4etlIT0NIP0Bcyru2t87sw080dUs7R01ifObj2MK4tsTnz0cuU/9HXF1ZWlV7yLWsrbnS2TorOzw2RWnv7P9u3Mm8tLS3tvo0PDYvP3FrUkE6S8S0rquts3E5Pjg3Rtj7Sz4zOP26sq6srsBqRzw1MUvg+lc9Nk/Ata2ts8Ru\nPjc5MT3h3l46LTbMqqGkq7t7Oy8vKi5MUFA+Lix3opyfpLHKSjUwKClHWEczJyA4n5aZn67KRS8rKDPO0U0wJh4mrZmbn63CbjYpLVvBy08xKB8fWp2bnqjEUi4iNrOst2oxJh8eL6qam5+xezUiLbyzvN04KyQgLr6inZ6mvkclIGOyt8M/KyEdJdShm5qf\nuE0pHS66rrJgKx8bHTmnnJqdrdE4JivPrK7LMCIcGS2km5yers06JibuqKe3OSUbFSWgmZyertwwHyTIqqq+NyYeFx+klpqfr8ovHTCxrrDXMyIdGRu6lZabprkuHPimr7tfPyccGBkxnZecpLc4H9GgqK3JVy0eGBgmuZ2coro3HT+eoKW00TghGRcidKad\nn630HyGqoKOt2zsmHRgeSaKXm6jMKBxqoqKnyzgjGxgcRJ+WmqXELhwwqJ+kxDsmHBcVL56Ym6bBNR02pZ6fskkmHRkVJqCbnqfFLBxKnpyerlEnGxkXIKaanqLMJB+5nqCltk4qHBsdH7ydn560JiS4n6KswT8sHxoaH2Khnp6pLCK9n5+nsWItHxoXHT2v\npKCkTiDjnJugsN41JBwYGzSyp6erySQvo5qcpb8/JRwZGSm3oqGrzSUhtZuaoLtEJRsbGiiunqKszCshyZybn7s6IhscGx+0m56kyiYivJybn69KJBkZGx7Fnp+k6iEurpyaoa1LJRsbHR9IqqOlWx8+qp2bpKtxKh8bGh9Dv62juypDrJ+bo6rlLCMeGhw8\n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\nrLv1Pjk2M1erqmQiGx4ntaCmqa685c2mn7A2Hh0aGxwmup6eoKCbl5/HKCQgHRwbHB4qt5qSjI+ddC4sIyMgHx4dHyREl4qOnbHEOy4qKScmKCYrzauzr6agqrHFTDcuLy80yam4Ox0eNq6iqau62UxEwqOlxiYbHBkcLayeo6OpqJycqj4hIRwaGhweLaqa\nmZCOl64vKyUfHx4dHB4iOpqJjJSr6D0qKSYmJCMiIzWypJuapqq8dj0yLSwsLDm6rs4sH1CopquuxFI/O0qyoq4+HBsbHDumnqWmrriqnJ+7Kh4dGRobHzamm52YkJShViYmHx0cGxscIj2djIuPnl45KyYlJCIfHx8o5Z6RkKKst0s4Ly0oKisrQ7OzcS7b\noKmus8tBNzk3aKmnxigaHB5GpKGorbbOyKWdqU8eHBkYGh9IpJ2fnpmVnK8uIyEcGxobGyBOno+MjZe6MS8mIyIhHh0fITeejYyZrrpGLywsKCUoJirarrnFtqGosrtiPC8zNDi/p7VGHhok+6KlqbHG5Vi3n6K2KxkaGBog+6CfoaOimZmi3yIhHRoZGhsf\n+52Wj4yTpDcrKCAgHx0bHSArp4uKkabYSS0rKigjIyQjN7Ospp+lqbXNTjovLjAvRa+txTAbJ76kp6u151tJ7qqfq14cGBkZIsifpaWor6Kanq0uHR0ZGBocIdOcm5aOkpzJKCghHx4dGxsfKa2Mio6Z2T0vKSgmJCAhICjLppyTnq+w7EE0LysrLC/frbfy\nJyevpayuvFU+Pj/Fo6a8KxcZGiW6oKerrbuxnZym1h8bGRgaHCe/nJ6ckpGapzYjIx0dGxsbHiuwj4qNk68xLiglJCEeHR8hPKeWjZaytmM3Ly0qJykoNLmuvGQ5rKWysctLNjc4R62ks1seGB0qrqKprbbIzqicoq4vGRoXGBwrsp+hoZqUmJ/DIh8dGxoa\nGx0trJSNjZGePSkqISEfHhsdHyyskIuPo8dpMy0sKSUkJCdirrKvraqosrzhRjUwMTLWqbHGMxkcNqymrK/I71W7n6Cqzx4WGBccMqmipqWkmZiepzcdHRkYGhsdMqaYkI2RmbgpJyIeHh0bGx4mto6Kjpa+PTEoKCYjICEgMLeuppidsrLLSzkvLCwsObWu\nv9onHVOprK+260hCYaqfqbI0GBcZHUWmpquprqGZnaK8IhoaFxkaHjyinJiOkpmiPiEhHRwbGRodJL6Oio6QpjUtKSQkIB4dHibVqp+Pkq681ToyLSooKS3ur7u+ZCzZprK1wUw5OT6/o6iy2SEWGR9+payws7+xnZ2kqzwaGBcXGh9foqGdkpKbnrUnHR0a\n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\nKz2qmJyfprDA1VY/OSkeJykkKjGympqdoK3F60AqMD0sKiQjJi+2mZieoa9NQNlIPTQsKCQmKTHInJmkq6m43mZAOTEuKyglJSxLp5mcoKm+8E9IPjkwKSYiHidkopidoaq6z/hWPTYvJSEnJio/p5mcn6Wwy2ZROC4yLSYkIyY1q5ianqay0UVKRTYvKiQi\nJCc2r5qanqazv31NPjQuLCcmJiYuuZubnqKuxV5IPzk1LygkJScsyZuZn6Ovw/hWTTwyLiomJCUrX5+an6GrudVRRj84LiglISMnQaKZnZ+pus7kTjk1LSciICMnQaOYnJ6irtRfSjgyLCklJCYoOamWmJ6nst5OPjcyLiwmIyQqRqybmqCnt99URT84MCwp\nLCokL7mcnKGlscPvTD86QD0mIiQiKtKdm56grb/q18o8LS0kISAiKd+cmZ6gp6nDP0MzLSkkISElKlqfmJearrz9PjowLiooJSIkKsqZmZ6grb5bRj05Ni4rJis8KzWlmp6jqrvhX0c7NjdQLx8kIy6wm52ipbLOXVfF2SoqJB8fISy5mpqfo62trEk2Nioo\nIR8fIy67m5mZlqfh9Dw2LisoJCQjJCy4kpOioa/PSjw3Ly8sJyQmPVxPn5qhpbHITUdANjAvPE4jHyg6pZyfpau55ExHark9IiUfICE2qZucn6ezuqq4LzMrJSAeHyE2qpmcnZmd8kU/LiwnJiAgIyQwrJKOnaqvY0M2MiwrKyYiJDG5qJ+aoqi56kU8PDUv\nLC5aQB8q1J+do6a0wmlKPj/CvSYfIh4kQqKcn6Grvde1p0ooLSEfHR8hP6KanaCemq02Py4pJiIfHiIlPaWVj5Ksuuo6Ni0rKCgjIiMqtpWYn5+tv089NTMwLComN8YvJ7Cdn6WrvvZQPzs0SrNMHSEgJc6fnqOlsMRm4qquLCclHR4eJF+em56hqZ+d7y81\nKCUgHh0gJ2OemZWOnfVwOS8rKCUiISAjJ8aPjqGjrd9ENjAtLSooJCjpvTytmqKnr8tMRD43NDPbti0dJCu5nZ+mqrbXWk3Fps4jIh4cHibJnpyhpa+vn6c1LCshHh0dHinInJqbkpS2Pj8uKScjHx8gIirFkoqWqK7ePDQvKiopJiMkN6+opJugqrbgQDk5\nMy8tNsLLJCA4rp6jqbHCa0lBSbOpNh4fHR0qt56foqi2w6yevCopIx0cHR4qtZubnpqUnU44MSglIh4dHyEsu5aMjp+84jgvLCgmJiIhIinDmJWdoqrBWzszMy8tLCpAtFYkQ6Wfpqq52k9BPzpyqrclHh8eL6yeo6Stu9nJpKFOJiQdGx0eLK6bnZ+jnJiu\nNi8pIh8dHB4gLa+Zko2UtVI8LSsoJCMgHyElRZeMl6Wpykk5MC8uKyonKs+vTFufn6qswllDPDk4N8ysUx8eITGon6eossx7W7ygrDAfHhscHy+qnKCiqKucncgtKiMeHRwdITGrmZmRjp9eOTIoJyMgHx4gJTqcio6frsk8My8rKykmIyQzs6utn5+qs85E\nOzg0MDA5vbM2HiNJp6CprLvlT0tgr6HDJR0dGx85p52ipa24qpukRCckHRscHCA3ppqdmZKXtDcvKSMiHh0dHyQ7n4yLlazuQS4tKigmIyEhKN+fl5mjqLf9PzY1Ly4tLEOxvi4mz6GlqrDGWURCP+moqjweHB0fTKOfpqq2ycSjnbUtIB4aGxwhQ6Kcn5+a\nlZ/4LCoiHx0cHR4lTp6QjI6ffjwwKikmJCAfICQ3oI6Poay6RzkvLywqKSgq2q3POrueqa247UY6Ojk6w6a+KxweI9ygpKiuwdtouJ6j9CMdGxocI9yfnqKkppqarDkmJB0cGxweJeicmJCNmLkyMCglIyEeHR4iLaiLi5mtxEIwLiwqJyYkJDOyrK+noKiy\nv1M+NjU0ND+xrV8kHS27oKertdpYTnarn7AxGxsaGye9nqOmqbKlmp/EJyIeGhsbHie9m5uYj5SjQysrIiEfHRweIi6rjIqQoXNHLiwqKCUiISEo0aSclqKqs+5DNTEtLi0vXa67PiExqqWrr79SQT9Cy6Sn3SEZHBstrp+nqq+/uJ6cqkEeHhoZGx4tr5ue\nnZWTnLcsKCMeHhwcHCAxqI+LjpnNNDAnKCUjHx4fIzyjko6bsbVOODEuKykqKS+9rsRASqOmr7PRRzY6OUKxpLg5GxsfOKahqa+70eOsnKO9JhobGBsfO6eeoaOelpqmTCIjHRsaGxwfP6KUjY2VqjAsKCMiIB4cHiEtpY2Lk6rGTi8uLColJiYmSq2vrqql\nqLS/WDsvLzEyZ6qv2igaJN+kp6y13llNyqKfrUUbGRkaIeSho6anqp2Zn7MpHx4aGhocIeedmZKNk55XJyggHx4dGxwfLKiLio+dfD4tKSgmIyAgIS64qJ2Voq616kAyLiorLDa8rr5YICmxpquvvVc+Pk+voKm9JRgaGii2n6errrepm56nUx4cGRgaHCe8\nnZ2ZkJOcrisjIB0dGxobHi2mjIqOlb0xLSYkIyEeHR4n3aKWjZmyuFQ2LiwoJygsT7G2vkc7qaexttFDMzQ416eot0MbGBwtraOqsLvPvaCdprUoGRkXGRwvrZ+inpaUnKJcICAdGxoaGx40oo6LjZKjNSonISAgHx4hKd6cko+Yvj4yJycpKyouNfqknqGi\nyzxJOzYwLSwzRsSqo6OqaigtNTxRXVRMXc+5rqqqwyomKy07VNrAta+wtrOwwS4lLCsuOUf6vK6opqapujIgJyouOT9EbMKzq6ejpcQrJycoMDtHZs3BuLCrqLJBNz02NDU7SN/At7Syr7o8LjxCWezzUVDtyLy2sLg/JiwxPWjMvru3u8K/urtdKiktLjpN\n2r6xq6qrrrfmKyUsLjc/SGXJta2qp6evRCcqKy45RFTnybu1rqqrwDc3NzE2O0FQ2MG7ubSzxzg1SEpZXk1KXtnHvbi2yjQqNT5Wz8XFwcHEwr67wT8pLTE5T9bEuK+ur7S7xEYnKS8xOkBO3bqvq6mqrcktJistNT5IUPXGua6rqaxtMjUwMjo+R2LPxL+7\ntLDMPEpVUltJREtvz8S+vL9rLzRMXcnFyM3Y1tDMxsHcMSkwOE7Pxbq2tLW9x8reNSgtMjZAT96+tK2srrC8RCgqLjM/R0xfzrqvrKqquD8vMS84PURT99HHv7eusu9BTUpFPz1BTPzNx8S/wFc4RV3ez9jxWF3n1szBv2cvMT5L6dDBvry7w8zKxl9i5snL\n3XllZu/b3n5fVk5LTWNy78zGz9/p7m9idO/3WU9PTFZv38i/xdtfXWn/9u/iX0xOUV3t1snK0OB5amT48m75a1JTWl9cXtrLzeVxallj6eXd4mNORkpTZuPPzexjcnXt1NDXcVROTlFXduDPyM/f3Nvf7O/p9GBOTU1OYdzJw8vfZFZbbuXq9F9JSE1WddbH\nyN5nXWtu9tzs+XNYU1llcnXZzdHtXm1obtzW2N9sWU5PYOjMys/7VF1269bT1nlOTFBkeOfQ09nvYm/z6ehramRaVFJfYm3XzM7be2pVU2ju5G9dTkpXet/NxMffXF9z7eng6WNZVVhp5dvY1dDY5/x1bV9mcW5gWFhXVWTfysjV9ltXW2j37eptUE5Z+NrX\ny8zhbF5kZmp6Y15ma/f87OHp0svO42ZhVU9f/d3feG9faujazMnQckxOVWXr7ef9W1tk/evn2tvmcl1mXmBzaXL9Z1pZXl1h3svI2WReWVp84uLvZlBNWuzRyMTH3VlWX2Ns/mlXUlRj7uTb1c/P3GhXWVVRW2z182FdZWrw1cjJ2GRNT1p82drrblNQXu/d\n2M3S911b/uft3+xubGZmZ3n3et3Q1OdfYmpm7t/h/11XT1Z23szL2W5PVGnz5e15Wk1PW/bd4NbT335hY2JjaWBfbHBxannl4c/Fx9pjWFRWbt/d9GBaWWfcz83Kz3VNTVxrdnR0ZVtfevPq4OHd2eJyYFtdZ3ro3+1mYF5eetvLyNlkV1Zf79nd621TUV/o\n0M/Ny91jW2RkZXxoXGFn+e3w29jTzdJ8UlJPTV355eZlX2Vm59TOzttfSUpWauLl9fVeWmzv39rU1NzwZW52aPH4cu32aGVz8OXSyMjVX1ZWT115a2FdU1Be48/IyMvdU0xVWFljYltbX3be1tLNztHcZU9QVVNaavTkf2nw5d7QyczdZU5NVmnn431zXlRk\n4tfWzs7jZFddbmZsc1xcXlxfft/h1szQ4V5UW1VYZ2lfWVdWX+PTysfS6llOWWNpbnJoXF504M7Py8jU6GdYV1teXWJyfvN8+tve2M3T/FhPT1JcbvDvcXRoaOTX2NLU9ltYXmx+ee/3aWpuanzj4NfR2ev8bHJ6am98bltbX2nn2MzHzuD2ZF9jZV5ZWVNU\nYfzXz83Hz+9oXlZPU1ZYX19len7b1tfO0/lWUlNTXW196nds/m/o2dXS1+tiYXf+5d7m4m5bX2Boe+ba1t3+cX9v/v1maV1PTVNd/trOy8/rd3RfZGxhWFZRU2bk0srIyc/6XmJdVVlcW2NpceXY0s3Nz9b4WFRWVF1udPX6a/rm4NnS1eVuWVplZm1+Z2Vf\nVFpu7urd19vje236bGFmWFdZVVRc/uPRycvP3v7zbV9nYFlWVlt62tHMx8vR5GdqZVlTUlJVXGN63djTy8/Z7V9WU1FWXmJob3F94Nzazs/eb1xcZGZrfH1ubGZn8+Hk3NTZ3+379fZ6em1fXFpZXvji08rM1N3s+25eW1hVT09XZt7UzsfJ1ORuYllRTk1P\nUFdl/dnOzcjL23ZdV1FSV11qbHHp39XP0M3P42BZXmVud3b2fWlvbvvq7uTf63Ft+fn17XtvXlNTVVtq79fNz9vl297q/WNZU01MU2Ho183JytHe4O5tYltTUlBWafDbz8rIy9r9cG5eWlxbXltba+vc19PQ1+plXGFgZGtjYWdhZm787ujc4/hqbPd6b/Z8\nbGZcXWB48ebW0dXf6d7f7+95Zl1ZV1lp69vPztPc8fl1ZF5bVlFRVmB+49rOzdbmdnFsY11bWl5iZGvx3dvSztXpb2ViYGl5b2prb27+5N3Wz9bvaWz3fXN6e29nY2Nm++nl2Nbd7Pz09/51aWJaVVZWYfzez9DZ5/R9bGZjXVxXUVVd/eHZzcrR4fh+bWlq\nX2FmaG1z6NbRzs3X9GdnXVtndHlqXmRqdOnh2tnhaVljbXB8ff79Z2Fka/jn3tvd6f309X7v+m5qXVZZX2zr1MvN1+jk5n15cV9cV09SYurZ0MvL0+v7/2JdXllWW11hbPPd08/S3W5dYFtWX2xvaV5fa/7q3dbb6mdYX2119fPy7nptcfTs5djZ3+j79v50\n7+rw/mpdWV9pcd/V2ettcP5zePh0YlpUUFz65djR1Nvs9/N3a25qXlxfYmzs39PN0Nrqdm5mX2f99XJlYGrs4NrR2OxrXl9r++vo7XRlYV908u/g6HBob399ffTr7HNgXFVZYWTx3eP/cXr+9uzq7mpXU1BZ9t7Vz9fg5+Pn6uv4e2JWWmFs7ODY0Nbm+3lk\nXl9eanVkXmBn8eHc2N10Xl5bYfjl4+h3am9v+unp5OpqXm/28uff3t/wZ2RiaHz159ze7+7s9ejh6O9tWlhYXfzc1dbefXj0fXb8cmZdUlVifebd2dnffmZpX1peXV9ramhufunb1dfe/19gXl1/4N7g83j159/c2NzwZFlgfffp4eXp+2pmaWxrevx9/3F0\n+3j75OPycWFcXGNy39LW3vdy/fp/7/BuXlhYaOXa0s7U3vJ0cG1maW1maHX+7t/d2tHU4XhfWlhXY+3m7PN6cfXj4NredFpSVGB3693h/G1sZ2x/fPPvbmZpb/Xv7uLd6XVsY2N4893P1N3rfn306unsb1pWV17r2tLP235lZ2Zna2hmXlhdcPTd2trV2e5q\nZF9eYmh+7fv7f3Lu3dnW3HtcWl1n7d7a3vptcnvy4d/g7WdaYXns39/i5/BuaWhmb3nx5Ot4dHJv/Ojn8nRdWFhbb+XZ1eFtX2ZwdvT8aV1YXG7v2tPR0trrb21uamxydPf69Ojr49zU1eB5W1ZYW2zt6up7am977Obf4XdcU1hqfuXe4uz8d3F1/v726e78\na239/fHk3uh+aF5eaPbc09TefWpv+/Hs7HBdV1tq69zSz9frbmNgZWRiZmJkZ2z25t7a1df1YFdSVFhi+/Z+c2xy9eDd2t5zW1ZceOzi3OLveX348OHg4N/wdm9v+fj79PV4ZWNgX27x3tbd72teX2VwdHBlWVZecODW0M7a8mhiY2VraGBeX2vy5NfT0tDX\n6WleWlhcavju9/Lu7eLX1Nbc/FtTVl5t++nteGx08ere3ODwaFxbXWVzev54cmdnbXL57uPf7HNnYGJpf+71/WpiZ37e1dDP2vJta3d4+/ttYV1je+rZ09TW4v5gW1xaWl1jamtv9Ozf2dTU4HxcVVVda/fs6/5ve+3f29nb7mddX2/25uLn7v51b3rz6+nh\n3+n8fPz89e7q+mxfW1tl7dzU09v3a2hub29xZFpUWGby29TT2ed2Y15gYF9fYWVmbPHk29bT1N/+ZF5fZnjs5eTueP/t3tra2+5lW11p/u3o93BjXWJr9unn5Ot6bG/6/Hx9dm1gXF9n+t/W0NPd/GdobHJzbmhgXWT/39LNzdXpbGJkZ2tsZ2VmZnvl29bU\n1druZVtaXWJrcnZ4bmx18eDa2uD8X1ldZXT8+m9iXV5s/Orj4ebzdG7/7erv9XhybGdv++fb1dPY4vN3dnN3empfW1pfcefZ1NPc9GlkamhiYV1bXF5x69zV1NXc6HZmYGBfZWhqbm/+8eLa08/Y7WpfYWpx+fT9bWZr/uTb2trf9G5qefXyfGxlXl9ka3rs\n4tva4vF6dW1rZmZgWlZXXm7p29XV3fhrZGZpZWBcW1xo9N/Vz8/S3PF2bGhmZ2prbXB27+be2tra5GxcWl1lbXp7b2piaW/z4uHk8G5laXzu6ev9bGJeZm157efi4ury9Ozp7fhya2VeYGr84NnU1dzrfHh0endqYF1cZHjr3NjX2+lwZ2traWViX2JlbH3w\n5eHi5+9tX19iZ21zcWxoZmpy9N/b3OP7cn/u5uXo83ZpYmz97eTf3uPv+vLu7PJ6Zl5dWlxjcu/i3N7p/H3/fHd8bWFdW2Fu8N7Z19rl/HX7+XZyamRjZnju5drX19vk8nNxc3N1d29saG7569/b2d3ubGNpb3v8f3JqZGRv+ern5un3bWlve/7/e2tgXV1g\naH/p4d/n9Hn87e3v735oX15r9ODY1NTa5PX69vZ4bGVfXl9s+une29vj+21paGhna2xlZGRs/+rf3Nvg+mtqdPv9+fd0a2hqdfTk4eHi6vb+8ejq7e58a2ZpbW/x4t3e6O728unq8f1uY1pbY3br4dzd6fx1c3r9dmddW1teZ33m397f7XFrbmtpaWtrZWZ0\n9erd2NnZ3vFucH3y9Pfxe21uevrr39/o8ndrbHH8/Hp4bmdgZWxtfu3m5/b+8e7q6ez5c21fXGJw7OXf3efw7urq6er0bWVhaG/+4t3c3OPy/fLyfXd2dnBobXp/7eTi6PF2aWlw/ff8fnVmZWxxffPu+m1mZnF++fH6eG9nX2Rqb3vw5+Tp8enl5OHj7H5x\nZmJoeujg3+Ht//zu7fX2d2FcW19qee3k5enydmpvfXBtb25uaGt78+be3ef7cGZlb33183tza2/16eTj4eh9bm/56enq6/p4cW1uefPz7ejr73p68vT07vpqX19eY3bu4uLtfm9x+/N6cWpeWFpic/Tq5OXu/3dxd/d+c3p3efry6uXe29rf9nJsaG998uv2\nenZ5/e/q7O58YVtfavjv8vB+cnF6enn4+Pr4enl+/Ozs7urvemtpZ2d96d7c5e739+zn6/N7amBkcPLg3Nze6vr+/H7+eW1pZ2l3+PHo4t/h63NnYmBkanP/fG9tcXz05+XseWJcXmn/7/D3eW9w+u7r5OPp8fz87Ofk5ent9XxtbW1u/Ojh4u18cnT9+/p4\na2JdXml+5t3e5vpvbnr5+n9waGlu/u3o5N/g6vluaGtwdf3u7evu9PDt6ODe6n9pYWV57ufl7PT/fPjv7u3ue2pmaXfv7vL1/HRvbW1ubHX58vh8b213/H//emtlX19neerf3ufu8/Pr5uvw/21qbvzq4uDe3ub3fHZ2fG9qbnJzd3Z5+ezn6PNvZF5fanr2\n7fN7e/rz7efl6X5nYmh77ery8/T5/PTu7u7t7e72+/z67uvr7O31em9uc/nk3d/se3V3ffj9e29mYGJy8+jh5Oj1b2prbWtmYWJma3b79+/l4uj4bGNfYGdz8ejo7vHr5N7b2+L2al9ldPLs7/j+/n337ezr8n1sZ2Zpbm9zeXx5dnNwcn3z5eTr/mtobn/4\n8/J7bGts/+rh3eHwfHJyffT2e3Zycv7v5+Tl3+Dr/G5qZ2pucvvz+3hzfO/o4uDsb19dX2l7+/h4a2xuefbt7PdxZF9janF1cXR3cXF5/vXt5uDh6PR/eP7v7e3t/G9scP3p39zh829sbm51eG1oYWBneO/o5OPn73lucG1sbm93fHv7+fHq4t7h6n5mYmRs\n//Hq7f599urm4N7l9HVrcn7x7PH09fl9/vLx7+3w9fp5eXV5+/n5enFpYmZt+efj6f1qZ2tyen12amNiZXL26ePl6vJ+eH/4+n9+/fn18O3p5N7c4ez+a2ZocX75+PxvaXD97+rl729lYGRu//b8e3VycXP47u3p6vP8e379+vT5+ndvbmt17+Xd3OHsfXl9\n9fL4+HVpaW7559/b3ebyfXd3fXdta2tqbXX57urk5Ox9cmxnZ2xtb3Jtampv/e3o5ut3ZmZpbv709/n+/vfu5t/e4Ojv+vn19vX5+/l/d3x///Tr5+vyem5tbXJ1b29tZGRree7j3uLr+nx7c3h8bmpqaW/87OTg3+Dl7/34e29zcnV7fv/47ebf3d/j73Bs\nbXL99vj+enV4+O/p4+n0e29xeHl8eHBubGlqcXN3+PLx9X1zbm1xc21qamVja37p3dja3+ny+vz79n5uamxy9ubg3t7i7Pp0b21oZmZma3B1ffTu6ujr9XpsaGpufvj4fnZ5e/bt6ePo9Xt1e/rv7vT6fnl5fu/r7Ofn6+vt7/Dy8v53cW1ubnn27ePf5+76\nenV1dm5qZWFjaHbx6uXl6/l1b2tqaGVjYmNqc3v37+3q7fX9/Xt7+/v38fX48+/q5+Ti5fB9enn/9PR9eXJsbm53/vz7/3l1ff58fnxxbW1pbG9zfvfs6Ons8PT6/v50bWpkZGt67eLc3N/l7vD4fHltaGdobn7u5+He3+Pr+X51bmxpa25ydXz38+7p7PR8\nbGhpa3V4cnJuampwd3z3+n10b3J1d3v+e3d6eXz17+vl4ODj6O3u8Pb5em9tamtx/e7m4eXt+Xlxb2tqaGNjYmh19+3n4+bu+Xl3dnN3cm5zdXv57evp5+ny/np++PXv7/b4+3/98+3s6ent8Pf18fLw8Ph6dHJyc3727Ont8vj5+v55b2tpZmVobXn67uru\n9P55dG9ua2dmZmdtd/Hn4N3f5+vu8vj5+316ff738Orn5+Xn7/19enp6dW9xbm5xcXl++fTy/Xp8f/379vv+eW9vb3X99u3r7/Tz7/Hy9Px4eHd3ef707efk5urt7vP7/H53dXByd//v6ubj6fV+eXRvb3JwcnN0dnr78+/u9npvbWxsbnFzdXRxcnN4e/35\nfHVyevnv6+jp6uzx9fb08e7r6+7x8e7w7uzz+3x0bmpqcHr58vf+f314eXp2b21qam53+e7q5+vx+P9+e318dXV3eX367+nl4ebs8vr9/vTx9PT6/Pj17+7s6+71/f349fH1/n96dXRxdnl/9/j7fXz/fH39eHFsaWhnam96+PX5fnwuc25kAAAAIAAA9RIA\nAAABAAAfQAAAAAEAAAAAAAAAAP//////////////////////////////////////9//////////////////////////////////////////////3//////////f/////////////////////////////////////////////////////////////////////\n////9/////////////////////////////////////////////////////////////////////////////////////////////f/////////9/////////////////////////f/////////9///////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////3////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////f39/f////////////////////////////////////////////////39/f39/////////////////////////////f39/f///f/////////////////////9/f3/////3d3d3d3d//3\n6+fr7/f///93d3d3d29va2/d1dXd5+93b29vb29rb29vd3f/9+/v7+/v9/93b29vb///////d3d3b3f379PT33dnY2NnZ2dra2dnZ2dr//fv7+vv7+//d3d39//r/+fr593b59vv62tr729jX1tZX2drZ2drb19dY+/3zsTN2dXr4+v3b29fWV3LvsjP0edn\nWU9ITUtGP0ZAPkJMSkzn79vXzs7Lx8fKzMjHxcC6uLm8vsDHyNVda0m0vlk+PDw1Ozs6Pj4+PkQ9OD9NTEtJTlVPTl1fVWv//+/b9+vCyL6/vMO7u7y6urq8vbu2t8W/xL29z8Vn06i4Z2dJQDUxLzAmZ0g/LSssLC8zMjg9O0E+T3dv38rNysjZ69PN2dXr\n193M28vL0ca7s7Kztba2tbWztsSloau2vbvNb2dTTUo+ODc2OTQxNTI2LzU0Njc7ND9DPUxPUznd4/drXcbBy8Hb511d/8jJy9HO39nCzdvGT6OrucXDt9vFzctPqry91ztCNjg6NThAODk4OD1HQUVES0w8OWNLV0VRSl1d49Nva8vMurqut7q8tLi7vsF3\np6a1v8a/T1v//2NLPEdCPzM6NTw8PUNDS1NX7/9f/1tZTkk6R0NKQUv/V1NbU01Ta+vjv7u/wb20uru7vbefrcHM2WtR7909rsJjb005Mj04ND1LQ0xMX1XVzNnLvtHra01L92tKR11LZ05NPknbX8LLxsbMxL7Vzs1LtqrCvdXJQFFOUeddSUpfSTw9U0NB\nSFFna+dvY83L3dPBz+dnREFPQ/dba1FKRU9DOV1K23fDzMbBvcLGwmO1p7bJxsVr69fXX6m7xN9PYzZBNztMQz1ZSURZ691j68vJ53dCV05DSUFEREZPPTpIV0Zr39vR2efF1dPP37KqvNfLv1vFyc/M42tn1U1PVWt3SlHvd2NjW1lvY2Pb5+NXWVE9Se9b\nU0dKSj85ODpBPvfRz8e7vry/vcD3oqq+y8DGXdfPY7WmycjnTz5BQ0U9/2NKU1lJVWdvX2/R92dRUVFJS0dLRD89Pj05PUVN69nLy73Fv8m/vcetp7PJxsr348bTxs1fS1tMP0U7REBJTWdMRkJATEpRVWNbV1lESU3n691dT1VTSzhFSkhv38jIvrW5xLW0\nw7yhrsu/zvdb3VNCpsXTd1cyODk4Nz9AOkxFPkR3TE7/3f/vZ1ljY1Ff71tdVU1PPUdnRsnTz8m3u8y+vrrEsaWxx9HZTULO3c7bTkhdQzY8OzY7PkNDRFM+QFFMTXfrb2fnd2dvxs7A2dnfY11HTWtZZ8nTvb+6wcnDvMZDobDK31vvOl//OanLZ19bNi46\nNTVEP0lNSUNN6/9Ozs7f2+t322/N18rLb9njZ09DW1l3yO+8y83PyczHyDursMZXTVcwX2tf70ZATkA4Mjk3NUM/X1tJUVXr53fJz8zLzc/Z17vBu7rX281RSEREb07nw8jAytnNxczD782sw1tXTTg+Pry8XVtjQS0yNzI0PWtIZ11XZ87I78jGxsjJzczJ\nyMzKwN3bzltERELfWd3Ly87b1c7X281rU6vLR0w8NzTnSlNMPz89NTU4NjdCTe9v6+fXzsjLwb++xsnP0b27ur28289dS0U5P05CzffXzuPd3cfNyvdFqrldT0s6Ojmux+tZSTgwMjM5N2tGZ9X/6/++xsbDv8HLyNvNvsHCw7/TxVdRQjpKUUXXa/9jU+/j\nX9/bbzWrr+M9QUs0SmddX1VPUUU9Nz88093vzcPN18PAy8fCxtHb79u6vcjIx8ljW0I+N0VCX3dv12Nvd9vd59vZNMeu50RNWyurw+fNS0c4Pj02Pk9Z99XVwcHOvsLBysHEx9vvxcvE49nX0U9FRzw3O0HrWWNrXVtvZ3dv498/N6nJPGNVQUxZ68prX1FK\nPTs83f/d58bAy9fFw8vJzMbL52/TvcPP79/fVT5APjI+RMpD99Xj69vX1+/X/0g1pclN9zy6vsrP30o6REI3NldX3/fVwr2/wr7Evc3Gztnd1dfX71HbUV08QDo6O0BnV2dd52PX3f/fd9lvYzeoyVvn909HxtfL61FLQjxAR+/rXc3Kxs3bzs/T79vra9Xd\nxs3TXWtPa0E/PTxAT0vMa+PR38/T483f5+trPKnJZ+84rb7EzedjOEA+PD9Lb//rzsvEwdnRys7d3e/Z591nU0tVTUtNPTo8PU1ESclra9HXzdnbytPX1903pbPG7+frT+vE529LO0FEQD/RVevV18/Ta9/v2fdnb9f3wM7d205PTUlCOz1JSE9R0WPN38rI\nydHJy83T20y9qb1PPKvDxMdjTjg9SzxGQT7M3/fVycrn/2vj91tb1/dnXUxKU0ZLR0k/RE5VV1frwuvTvs3Iy8bHy9vfVTCnvVXb991Vx/dNR0VFPkdESmvf3d/b19tV/+t3XXfZ39vj01VdTEhJR0pCUVtbd+vTwdfIyMPLysjI3d//PLyx0UKut3fH/0M4\nPT87R09AZ87n09fNze9r2d9vb9fn6+9MU0tdS0NFXUVja9tr593dycXIzc7Gys5j42dNOKu9Y87XTUxvQkw/PTxHTkxOZ8hnb9fv22t36+vv53fC0etfX2dHRUR3Rltv99ff1cbIzcHEz8jO01v3b0wxpq/TRKu8Y19MRTM5NjxNSUVdb9vT2dXL9+9v5+Pv\n1ePdUVlfUVdIS1FnZ+PRyu/Nxtm9y8vZ1cvvWUtfRlkwq7vr2WdnPkhMPj49P05vTV3rwm/f1d3MZ1vX12tvvc/V/3dfS0hLR2P3/8zFzczHv73Mxb/by+drTU1ZU1M0qOdTsNtMOj42NTw4SHdTTmPM4+fbz8fRUdXVwGvI1edfV01LTU9AWdnf1cjJyt3X\nwNfL49/bZ1NFUU9dVzettcZTTT9EO1U6R0VXa+9nWcnf3d/d0c5Td8vnz8jF19dnWUxET0dG583rzcnIx928zdvF4+djVVdJTV1fT0GlXa/OZ1s2QS4+S09n3WNXyc7VzdvLzf/R08TNzs/T909LQ0hTREj3zdHZx8jT18fKb+dvUVFNSk1RWV1XNLq0Y0c+\nUzNJSk3nW+Pf4/fT1ff32eP/x3f328TOzNXjXUhIQUxKT//Ix93EwsfOzL7Z791OTFNTSU9ZX19bNLSub3dNPT08Rmtjb9lr18vX0dXX48PLzc/JztHb2VdbPUZDUUdV48/NzMXNz8drzs9RT1NPWUpMXVlbY1kvqMpHOV1FOVnv39nv2f/F62/M5/fdys3O\nX8nM0ddvd1tFPz9VQXdf28vH1cfMv8zfyV3vY1tRX1tXY11n/z/VvqpVd01DRm9dd3fP39vL/9nfx+/G1cXX1c/j21lVQj45P05Ia+fb2cHb28Pd413vX0xKW2t3X/93Y/dfTy6s70JRTXdRz9vf7+vXd91nV+dj69PPzOPP29vjU1FKSjlNRVvd4+vNwdHd\nvsPd32fOS2PvY+vf9+9dZ19RKc+qyetb00dV2W/r2dPbXXdX3ffXzcnK1et3/29OREM6OkpM/93d3c3KxOPNz29rb+tXVf/V5+Pb/2tjU0c4R77LR+vVTu/MY+/TV+NvV/9fZ+Pn1e+/3XdnWVVDR0JJTVXn687X183MxsXV39lja9t339Xb1d3/X09RRzon\np7DfxtnrRedfzuffUVffUV3L1c/d1dfjU1VKSz88PEhPzdfrz87b57zP3dvf91lfz3fdzs3f5/dZTD89OSiot2vT48pK3+/rd0hT409V/9vb99PHyN9XTE5LQUFRS+vd0d/O0//CzdHn79Pj9//J09vMytPrb05DPz47J6yfvMnTzT9d21lfSV9XWUvZ28rd\n1dnr2U9JRE1CPlNNz8XI49fTym/JyV3b92f398rT983Na/dXSEA4OjQzU63EZ9vVRdPXVVFLTVtZW3fV2XfGz8/fUURBT0ZJV9fL2crb28bX69nR3//j1c7nwsvXz9HrWU1DPjs9PytCn7Bvy9FLWWdNXUtDTF1n493Oz+Pn43dVP0NRSkxPxMfFzePLy+dn\n48FbWdvZ393Hxeff319MRDs8NTdNSjWlt0/Zx3dR9+dPSUVb39//583H19vdWW8+QU1jWdvGx9PdxNHjZ0rv62/nyszFzci819tv/0ZBPD05QkJHMZ+svMbMXTrrXUxPQUnd09/XxM3fZ2Nr/0dEWW9b1dHI0czXZ1tfXVn372vjys3V18rv/19TPj4+Oj83\n5/dCsbCyWc/bSGv3R0hIa9fV78/HyNlR/1VTUUNVX83X08vPz89bTuNJTmfO2cO/v9XPwuNrS08+Pj1DPz9TQUvTn63PxWf/R0dTS01b29HO58rJ31dbXXf/TlNfw2P/57/b/11rWVtNd9HK07zGz9XV605OQz0/PkVBOP9f9zWxrcz3ye88TVM/b3fd/8LV\n1ePnU0xRd+drSNPR12vD0d9f60xTU0z/yrzDvMDG1c/rXz9BRj5DR0FHTEY3rsylvc/PSTxBTEz3V93Rzdfd7/ddTl/34+dLzu/nX9/R319fU0lXXefJvsK+v8fZ91VTP0pDRURKTEdPa8tvNaa42etXSTpKX2vdb9XKy/9Zd2NPUffr71HX3+vI3+fn3VtZ\nTldj28O+u8TAxuvrXU5BQ0VGREVXTEtMO6tPp7K5R09EOE7Va1fd49vX505b405P79P/1VN32Wtva9vrVU5bX93Lwr63yMTLX1lCTUdGR0tGTv9BV+Nnaz+9qb1HW0pFVd/348zV1W9fR0prUVXv32/dY+/f0Wdn299Zb11vzsrFvra/zNNrWU5MRUNFTEJZ\nTE7nP3ey11+juj9RSU1fzs9fzW93V+9GSXdbV+vXb9Nb73dXTv/R919n5+/HwcO9vb7rb1dOQ0ZTRkhLY09K11vvZ2tnP8W3/0Rr91fj0dPO22NVb0dFZ2f3Wdd33cxXa29r7/fd93fn2dPJxcG/v1vrb1lMR09KSltXUVPnSzyvx85M67JnRGvZd9vjZ19O\nXVVrUUhn9//Vb3fN51dZTmfX293b98zMyrzEzMrKRV1RS0ZJTFtOTldJ79nb/1tnYzr/s8VLz87Td83fZ3dMTFNPSHdv11VX487bTFnv/+vZz9Hb08fVxs3N2c9OTm9dSEtTWVFOU+NvT0SxxdNrRlWzx1XHxtVnd1VPTlFRVU9RY9NvY0nba2dGQ2t349HR\ny83Hx8TF0e/390lFVVlKVVPZSVdTd8jX2eNMSk4xsrLHd8S/9/dj3XdNR1NVTFfr1WdPVW/nX0ZO59/308/LzdPIz9fv72NnW0x3Z01Zb19jT9vj/1HBu/9vRkqxvt/NwsVrb1VfTUdLWUxNb9lnZ0ldS11XRUtn19fOwMfIysfK2XdnTFlPS11VX1fjb19N\nz+//ynfvQk06t7XH1cjFzuNjY3dVP0hTTUfdd19ZSVNOW1dNV+PX0c/HxsnPzszdV2tVWWNv/2tZa/dda2PV2Wf3d93/TMG4vt/Mw8/d911bSUtESE1RXd9nVVf3TGtVUU9X39HOyr/EyMrPy+NPWUtRVWNbXW9f3fdb1//3Z3dTSVVdu8Xb48THzd3jb2NK\nT0lITU53a09bT19Ib19bY2vPz8zIw8XJ1dPnY0xPTVf/42Nvb2Pn72/P62d3619X37q+xt3Kxs3RY+ddVUFLUUJKU3ddUU9T611HY11d39PTysO/xM3J4/dnU0pMW2v3XVXd9/fd79/fVWNdTVvVwc/j783Ly93fb2dPRFNVSUxO91NNSUx3701ZV3fO0cvG\nxcbDy8n/XVlPSVNn/+vvW+fj/+/PY+tOWVNZXcu9xtnPycbT391da01DSltMTVVnU1VEY2dnW1Vb49HTzcvDwsjMz3dbVVdJSf9jd1tj39vfd85jX1lOTVdbyL/G49PTydPV3/9rT0xRU1dKTlFPUUbna2f/WWvT187Kzc3Mzc/da0tLTklR92drb+fn3eff\n129ZWU1Ra+PKycrR0czN3d3va1lXUVlRXVVfT1lJU2vfa3dfd9Pr0c7OzMbJ3+9rSktRS1Ffd19r3+vZ98vj71tOS0dr09nMy8vN59nT6/d3TGNVV01Ra0dNU0vvY93r6+Pd1dHPx8zJzczja19JR0tTW1dfWd3vd+9322tvU0lGV2fR083JwMjRztnn/29f\nd2NVTVt3R0hPW2933efr59Pf2dfRysjK1eNbTkdHTF1ZVV/nd9/v98nd/29OREZja9fRzcTFzevT09/v/2dnX1tTa1dLSUv/72ff4/f/2Xfny8vLztvd/1VJTUZMW11ZXefn5+/P591bX09MTXfn48nNw8TLztfj929va19dTG9VU0lOb2P3d+/j/+/T5+vP\ny8/M1+t3UUVMTU5rV1t37+vv09/d42NVTklOWffdzsbExc3b59vj7+v/Y1XnW09MU3dOY+Pf4/f/293v483M0dHva11OR0pOTlt3XV3369Pd/3drX1VTT2tn3dfIw8LCx9Pn9+tnb2td91NVTU3/W09r5993d//Z49vbzs3O0eN3WU1LSlVO7+dVY2fX3Xd3\nd/9bTE1Na2Pfz8vAwcnP2+fn5+//b3dbW1lOX2dZU2vd4+tn59ff39XPzs/fb1tPS0xLX1lnZ1tdb93ja/9rY09VTFvr39XJxb/AxMzX43drb2tjY1NPUWtOV19ja+/jd1v329Pf29XN2ffjVU5NTE9vX2NfX+tr5/drd3djXVFL7+/d18jDvsHO0dnnZ3dr\na1lVS1d3XVdf/2dn9+NnZ93n2dfR0c/jb2dOTE1PU/93W13jb2f3d+9jX1dRV1Hf1dPMx8LBv87X0+NVV29fV1NOXWdXW2v/Z2Nv611d3dXZ29XP2e9vY05NS1Fr9+tf9+9nY/93b29jXVtdX9vT0c7IxsbG3efjZ1NVY11VUVNnZ193b+9rY2v3/2/b09vX\nztff519TUU1PV2d3711db2djY3fnXV1XX+930cvLzMnIysrj7913TU5nWVdPY2drb//rb2dbY+vvb8/V59nX5+t3W1lRTlNr72/jZ2dva2Nrd/dvY2937+vbztHP087R2eP/a11ZV2NXUVVjb/937/f/Z19n7+Pn19nb09vr62tXXV1TX3fv9+93XWf/Y2dv\nd11fZ/fn39/Tztvb0+vj3/fvb19XW2Nba3dv6+/n92dZY2v/69nX29vn5+t3X1tbWVdr7/fr6/93Y3dnb2drd2/37+/Z49fX2evbd+/va2Njb19ZX11na/fn69/rd19n///j29/b2+Pj63ddWV1jb2d36+d3/2djb2drXWdna/d33d/d2d3Z6/dnb+/3d3dn\nW1lf/3f/7+vj3+trX2vvb93b3d/v7+/vZ2tdXWN3a+/n7+vrb2NrZ2dfZ29393fv29vf3df/b/93b/9vZ29nWV13b3fn793j6/9fY3dr69vj3+Pn5/drX2NjZ/9v9+Pv7+9va2tvZ29ra///7+/f3ePd3/dfX2tv5+dv92tjZ+v/9//32/f//19nb3fr29/n\n6/f//2tjb11ja//36+vj7+9rb19nb2Nvd+/r/93f39/n71//b2v3/2v//29nd///7+vf3+frY11vd/ff3+Pr5+//b2NjY2N362/v/+/3d29rY2dra2dv7+/r49vZ4+P3Y11nb/fr6/fvb2//9+v/6+Pn/+9jZ3dv7+vn6/f39/93b2tnX2P/9//r6/fr92Nd\nZ19rY2/n7+Pr3dnj5+93a2tfZ/93b+v3a29v6+v37+Pr929n/2f/9+fj5+/37/9nY2dja//39//r9/93Z2Nna3drb/f34+fj1+Pv92dfX2f/5+P37/d3a2vv7///9/d3a/9va/f/6+Pv9////29nZ19na+vn9+fn5/9rZ2Nja29369/n59/b5+/3/2djX2v/\n92/r529rb+/r//fv5/93b2dvb2/n3+f//+//b2tra2//6///6+v39/9vY2d3d2937+fr59vr//93XV1n/+Pj5+vj929n7+P/d3fvd2//d3dvb+vn93d393dvZ2dnXWv35+vn5+fvd2tdZ293d+/f6+/j2+fvd/drW2Nv/+/v5+t3b2vv6+v/9+Pr929rb2P/\n9+vn6//vd2tnX2tjd29v9///9/93a2Nv6+v//9/f7+PZ6+93/19Za3fn3+fr6+93Y+/r/2Nv/3f/d3dra+//4+fr/+//a2tdZ19n9+vj//fnb2trd+/j3evv6/f/9+Prd19vZ1ldY2//5+vv92d339nb9/fv/29na2dv73fr5+93/3d3b2vvb3d36+v/9/d3\nd29rd/fv///r93f34+tvZ2NjWV9v9+/v7/f/a+/f2+dv//////fvd//v//f392tn/+/j3dPf7+v//2tv/2djX1tdX/939+vr5+fn429n3ef/Y11nZ//r/29nb2f/6+vd3d/j6/dv//93/2t3X11ra2trd/9n///3/293/2N3Z2tvd/935+fn49/j/2/f53dr\nb29n//drb2tjTlfAub7M2fdnY11dX1lTV2NfVWdjX2f//3fn5+/3b3d3Xdnd29/b39/Z293j729dU1VbU1vOyP/Pz99v5+/n/29ZU1NRTVFRUVNZW1NXX3f/79/r1dPP08/IzM3V09nj/+fra11PT0pMR0dNxNNJd7jG3XddT1lrXV/va11v6+fr19vf2dfZ\nzt/n7/9vb3f349fnd+9jY2dbW05MSkJDRURBTFXBwNfn29/Z02/Ny8z37+/v39PJzM/P2d/d79vv73dnXWtRb19ZX1tvY29VTF1VW0pFSURLST88TaKpy9XvR0FXU/fZd1tXU09T99PZzM3Tys7Z08/3/2PvY1fR3c/OzdfZb+dra1dRT0dJRUQ/Qjs/rrfZ\n729jRlt3d9Vj5+/3d2PK1crRy+vj611fXevTW1Nbd2Nf72f/5+frTvf/709OTE1fVUo1vramwW9NRjRPXUtZR0tPRkRO4+vdyca/zL/CwMvPz8PPx7zO1dXZ2efrd2dKS0tGS0k/Q09ORT5Aq85ZX1UuO0M7PElIQltLa1fJ28q9vcW9vLrDu7rDtbrVwMXN\nycXLzuNO429RTTs+Ozw4LrfbNsauXT7XSy7fXz4/Qzk1PTs/TldRz9X/08zf28/nur+1ur+8trnAvL7AwNt3Y+dRSldITltDRTkuo9NJR0kzRcx3UeNVRHdjVU/RTllTZ2NRQV33Tedn10vv18jLzb3CzLe7vc/d3WtZOtm011c4K7Hrb0FIPkzfzVlva2d3\n69nRz8n328hrRUVJTVNdT8xn7+e+yszB0cnXwcTd9853//dfX0NBPiyqzuNRP0E9wc1b/9VRT1lTWd/T28nL3/9NREc+QDs/SUdfX8n/yc3Gxr+7vr3JxsW+z8b/VUYvq61vO0lnQ1+/S1fnSmvvZ2Nnz+//d1lBPDs+TjpEXVXvysjVs7q7u760vL7Oxc1d\nY1VOST9EN++vyVFGV0rr6+9R2Vljd1FJU+/rS0hIP0A9OTw9PkNOTHfDwsmyuLS1t7q+wcS/ztdMS0hCPiuurNtBRkxFxM/bwcf/09dnS+/v91tTTD0/QTk5Pjk+TVtP1d3NvLmwr7C0s7rCzd3rU0hPSzUuU79ZSUZFSsfXy9XOxnfbWWfd2+dj918/Qj46\nNz06Pz9ATltv18a6squtr7G6xsvv/0xNRj84R1lKSUQ/SUvZZ9vN1d3DysvZ28rP993ZWUxXS0RNSUVHPkdXTv/T18i7tbGzur3Cz2dbRDw3OkI/PjxBQUNMzu/MwcjJyci7x7+8xtPZd2NIQz8+QUFKSkhMSuN3z8zPv7q+sru7wdPvUU1XRDo1NTQ1Oj1F\nTe/V2cbAwcC8u764vMPK0/9fV09MQEk9RkRBRk13TO/fz8a8urO3ssDDyVtBOjo1NDEzOEI/SU1X1+vLusS/urq+vbq7wMrX2VlNRERMPUVFTU5RSE/3Z1fXxb68u7/GwW9ORj83R0BBPDxBRUdNUf/n57mur7S8xczLzd/D13dOTVFJS0ZVTE9PV0R3T+9f\nb+/Lv7q9zctXU1FTPkVKTU9OV01LS1dPxNHDzs/Myc7Hys7X219TWfdZWWNfZ1dXZ11VTGtPXU132dPFyb2wuct3X0k5QkI8PD5DOzrZrq6xvMTL79nd98//TF1vW2dvY/9bWf9RP2dXZ09NZ1NZY1nKyc7NvsLZ78rPWV9ORUBB/1NbW2tv2dXVy8vLz//Z\nztv/V1NfW1NVVUlTS0xd72Nra09IzFvL78brvqu12UxFPDo6QEo7xqy0wt/fWWf3X1VrVdld42fZ09nrd8/rd1Hdd3dZRUtAPtvbWVNTVU6vrLDO02tfRU13//9KTUhKQ0Hr4+PT19vO3eP///9jW01jUVdvV2P3y87j51nOW28909vPP8Wqz2djXUA8V0RX\nO7qstsBba0NrSmNfd0tAR0tOWetj19fNzePftru/xWvJ1/9GZz9nXUs4orxGTlU/RD9rWf9OS1lNPURvZ03dyse7zr69zM3Rd+f/d11VT1tj087nyr3PTUxIOeM/NajFQEQ8ODE0S0RTRDequdVX984+48Hnt9HFvry+u726vb7EwcfH473K58Zfbzk0Njw4\nNCinvjs9OzUtNkFBV1Nd5/9rZ9dZx8rGubi2vLm7vcS7vbq8v7/LxMPHyde/zVc/UTk2OCwrRcU2LSwqJCwrMzU4PDY7q+fLa29fW8m12bWutq+vqaytqaiop6ijp6WsoaypxtdPRP8xOSOlXS4sKh8hISEkJigjJSMiJygvLi40SUA6T//Vzr66tLeztK6v\nraqmqaSmqKeurq+ttsWvn6rBvdE6PDMvNjo1NTMtNMtKRiw7JSoqKiovMDBJRO9R49nIvLu6r66sq72xv8XNvdHZPJ+uvrq9413rb/fRb1dv3T9IUT5LNDczLzgsLjcuNzI3PUVARUZRb9+/uri7x8TOv75ryE3Mprjbwb9O3cZrxL7Gv7jAVaWlrLLvvjE8\nNDkzMjs0OTA1Nzk4PD5T3bnX70c/QjpJQDs9I6DjTM9jRl3Fy7+srrWvsLW2sba9vsO9ycVb5/drUd1bSVFjVU1BRndvY1E5Ni0oLTgqLR+2uTw8Sj1r08r/w7u/t7a70dWfp6yusLnfy9XdyltPx2/v18zL58i9srjCY087KysuKSMoH7Y5LjI2PTM+SFHD\n47rCuby1sLa8vrnF1dnVycO/xcS6zb+9v7u+xK21tsHfUTQ1Kj0qJyJOUzIsMy0uOVc9Sc7nzsTT1VO1obC2uGNV72/Nd8TZ97/TvMS9sLiqq6qvtshnPzQ+Li4kLb41Nzw1LkZKNU3nVV3/Tf9r09d3Z+tjRUTb49tZ09tny8K+u7axrKyura+7z1M9Pj0r\nKbq16ztdSTVIW0/3zsbJyUpnb0M3qshd3TAwLjpAOT49OD3fVdnCvK6pqayos7/d4z/vKjVnt9lKZ1lKWcPnysDFyL3T99tT919LOe86MTFAPTk4QzY3R0Jda9PGs7O1tr6/XVk82TkzRbL/3W/j78vXurS2vbuwvMW9z+c1vsfC4y01Mzo5OUU8MzFTPmNb\n38TJvLvLzE0/Nj45K9271+dn18nJvbG3rrGysLG9usHJ4/drPGc1NDtLPE5GQj46XTxVWWPG09/d60ZFOTcxOSg/1chJZ+PT2cSyva2zubOvube2w+9nvdvHRTg5SEFBP1VJOE132dHPu77Gx9tNRjYzLjIpLjxfZ01X99nVvb+0s72ztbe4ub7Dz9VORV1H\nPkZda2tRX0hnzv/v68XAycPJ/1FAOjcuLzQ7Pkc/SENdX3e/vri+wrvAw73D1dnva1PLSVNMW29nT3dfXevVzdO+ur22u8TN40c9MTcsOTs/S1NjV1njxcS/wcG/xsjF0f9fV0g9VTdAQERjV2vZ/2vEycfMxbq4uLjL2+9HQTQ3P05ZVedd72fvzcXFwsXO\nztHL2XdbUUw6ODM1ODo/R11XUVnTzM3PycG6uLa2vczG40NEO0o+V1dj2WfZ28LHwLW4xcvLx85vTUtHOTMyOzE6PD9LV01VyevPycS/vbu5uL7P4008PUBESu9f1c/Jz+e7xry/u7zJy+tva04/RD00MzA0NjxAP1VNV8n3zcnOy8W7v72+ydXbTUFIQl/f\na+/VzsbZuce7uri4v8rF719VPj48NjQxOzc6R0VKSEzP593Mz8jFxsHAwMnXb0U7RD9FY1njy8nHxL26ura1trvIxfdrV0lBQzg2NTU5N0VBSU1ja9frzMrGysjJzc/nb09EPkRARedb9+vZ2cDHvsC3uba7wsXR/29OSkk8PTs5PkFLUW9r593N28rGyNHP\n2+ff619PQjs+Qz9XY1nj08rMyMLEv7y6usfMd1NVWUpGRk9DSU5TTVdr4+fPy87Ry8jO2d//93dPRUc+RkRFR2dZZ/fT19HLzcLJvcTT091rW11TXVlVR05na2Pr18/Zz8rLysfAxM3TY2v/U0ZJQz5EQkNGS1VbX+ff49PKzMfMzv9nY0tNSk5PSEtbb2/j\n3dHGx83Av8LGw8PIz8/f3/dLU0hDT1VTT11XY05r/3fn0dfb529OR0pJSUNMTUtdXVFn5//b2cjMy8HCxcXBx8zM0e/V/2dvVV9bXVtjW11j7+vj993vY993Y05PUU9KSExLS0tPZ3f349Xj583JzczMydHV3eP/1+P3/19vU19v32Nb29/n39PV49/Xd/9v\nT05RT0lOXVNXTlVj99/d3/dv4+f/09Xb2dfn999rXf9n/+vv7+frb93r39nd69/343djV1dZX19ZUWdjd29j39//29vf49vf7/ff62dr919rY1lfU0xd72Pn0ePn3dHT5+fV5+Pfb2NnXVdvX1lvd//v/9vd69vn/2/r7/9r//9dV2NbY2dbWVlOZ2Nb/+/j\nd93Z2d3Z2d/f329j///r/+d339XV5+vd19nVz/f///9vV/dvd1VOTExTTU5bU1lbXWNvd2/f39fX2+Pn7/fvb+f/6+/v79XRzN3/2dn/1czX3evnd2f/a3dTV1NZW1dLUU5PX2tbb2djb2//9+fv0ePv92dvd/9v92tv2dfn3evX3dPN0c/V3ffvb/fn52td\nV1tnTlFOVVlXU2tf/+vv6/f3d///Z/f/9+/j39/r7+fT6+vr2dXj693ba11j4/fj1+NrX2NvWVNRUV9fZ1nvZ2djb19bY293b29vb/fn293r729349//6+fX493O3dv//99359nj73drX19dUVdZ7+v/a29vX/9fd//n3+t3XU1ZX2trd/f/d//n4//v5+Pv\n4+fX7+//59/X3+f/62f/d2NnX2NrWVnj2+ff3ff3b3fvZ2NbZ19v/2/////35+9vW3f3b+/r7/d3b+v33+vnb2tjb2tnb+fv6/dv/2/v39/r79nj3eNvY2/3//93a2tna29r93fv62ff7293a19jW/f/429fY2NXa13/Y2vf4+/f593X3dHZ3dvX72Nra2f/\n6+fvXWt3/3f/7/f/7/9vb3d39+vj/+93b19bZ05XY1Nj7+Pj2dfn5//j3+fv2d3d9/fv62t3b29na/9rX2dvd//n5+/3W3frZ3fr3W9dWV1bX+t369v/d+Pn59nX6+/va93n7/9v6/9jZ/9jY13r3////2tn/+9v93dn72t34+N3/2tdZ11fZ/93/+vZ4+/f\n29vj3ef392NrXWPn/+Pr92tvZ+9nY2f/b+fj9+fvb///d29nd2dfXVtbV/f379vX39/3193n6+vna2tvY1tr7/f//+9va11rb11v73fn3fff92N3d//v5993Z2NjX11vZ//n5+vf6+Pf7+fv9+vv629fY//v9+t3/2dn7+drW2dnX+//5+9r///34/9vb29j\nZ29bWWf/3dvd1dfd193j6+/392djVV9rd+/n7/fva193b2f/b2d3b+/vb3f339vr9+9vZ19nZ2dra//3b/fr5+fn9+fn//fv411j9+fv63f3/29n6+9rb/9r/2Nj92dna+/d5+drd29va3f/d+/j2+//92fv6//j3+Pr7+9fVV93Z//3/2/39+/rY2tna/f3\n9+Pv92//9+v/d/fvd2v/93fv39/r9///9+N3d2939/d3b19d//fr9/f/b11vb2Nr6/9v/+vn4/d39/93d29ja2/v4+/r593n69vd3+/f/2dnb2/va/d3X293b/9jd2tb/+9nY//v/+v37+/3d+v37+93b/9rY2djd+vd3d/r4+fd4+939/df/29vZ2dvd+v/\na2/3d2frd19ja2f/b2/v5+/v3+Pfd29vW1ddb//n69nb4+Pn3ePr7+/3d3f/d2tnX/93/2Nr/3ddd+NnY2v/b3fv59//9+9j/3dvb2Njb29n6+//d+vf493r3+/d493j93d3Y1tr/2/3a+/rb+fvd2N3b/93/2/v7293a2vra29nZ19fY/fr6/fv6/fv4+Pd\n3+fr93d363dv/+vv929nb2NfZ3d3b2fv6/d33dvv63f3/2Nnb2Nj///39+vv7/fvd3f37/fn4+vvd/9rX3f3a2d3b2d3Y2/3d/9v5+fnd+f/d2v/a3d36+trb29rZ//n7+vn7+fv7+fv5+/r93f/63f//+/37+93/19jd2v3d2dnZ2t373f/72tva2ddXV9d\nZ3fr493j6+/v///v9/d369/v9/f39+v3/+f/6+t3d/f///dvd+9vb/f/93d393dfXWdfXWNnb//r//d3Z2dr63f3393v7/93Z2t3/+vf5+Pn4+/r6+/r5+Pj///rd3f/7+/rb2drX1lr7/fv5+//d2NfY3dfWV9nY2dvZ2Nv9/fn7/fr6+d39+fj2+Pd2efn\n3+fj3+fv7/93b29nY2dfa3f3/293Y2Nvb2d3d3dvb11nZ29rb/f/a2vv79/f69PX3dvrZ19jY2dra3dnY2t3a2/v993Z1dvn5+t37+Pnd/9vZ2/f3edra2dna19nXVdXXV9r73fj6293b+fv7+/r7/9vd11j/+/f3d/f293jd+v/3+vn93dva/d3Z2v3d29r\nb2dja2dnZ2t3d99r5/fv/+fV4+vd6/ddTe9fWV1v/29dY29ra+vNzMrLzNHX193n699ja09RUU9VWVlTVW/nY19fV11ZV29ra//3///n49vb0czMz8rOy8/L1dfd2df/9+9dZ1dbWVdTTFNMTU1NS0RDU1VKR0xVY1v319nOzdXNztPKysrIyMbLytnR0dXZ\n6//3Uc+1uMVnV0k7Pj0+PD07P0lIY1v/6+vV2dPZ9+djY0xrTk9Zb2tjyM/N1czLzs/RyMnPvsjJ0dfvX1tvZ0dTQUfRb1VXVWtXd11351/3291r5+9nV09NR0xHRj1HS1FHT+tf/9XLxr6/vsG8vL27u7q5wsPb4//va1NGMdGnr+tLOzguNTQ6Njk4MzQ8\nTEz/293X3XdrW19VT09jd1v3/2dn08LCv766ube2tbexsK+vr6+vuLi8xrvIsK/JQTYqJCsqKSoqJigsKzEzNENIW1dbW2NTRtfDzevVU1FCQ0ZBSf9r1ee8vbu0s66wra+vsrezt66345+fn6q50TM6MjM0OSsuLysrLjc5MjpDPTs3LjQ3NUTZb1lr40pj\nSs3Az8S8wsnA1b68vLu4vce7zuf/W2tJoayuvM3fREtRTUZHRTxEOT09Pz5RU0xGST07MzY5PeNL/+dOQ0BDQU7V59O1s7a0trCxr7WxurzH1dvRPt2fn7a690EuNS4vQjk1Pjo4P01ISv/fzsPfX1tTY0lMyu//70VDNzBDT0FGRtn/59XCvsO9u7y9w9Xf\n72tDrKey173LT0lMPkNORkRNQzpFRkJH79fRz93vX1/v1dnjvM7JY1k9OjtHSkVMxMHP2cLOxcK8yufI2VdV6z5frZ+8u81KPjU3QUFDTklZQkZR41fXzMzKw83/19v351fnXWdZSDk7Qk5RSdnv503rwNHJwLzEyc3ZXUxrNqKpw9/bxz5n/0zf72/N70xE\nb1U/X9NV72NRT0hLU1vvw9HvTlc+Ojo/T0jvb83V29PCvcXHwsbb3fdrWVMyuMKlt7jEPWc+TmdL18/dWWP/a1X/69PVZ2dVT0tRT07/UVFIPzwsOTxGQVnj2d//ucXIvru6vsnT1+fP5+9Do7tO50RBT1NGZ8bd2/dbU0xvTm/j719fSj9CX0FIUetVWUg7\nRzUvOz9N19PGy8G1trWus7W8v8TN2czZ0TWfR6my328/TDHO/0NXTEQ/RUo/Q+9jU1FHS09OSVFLa0lVQUA2Pjo/5+PKycjVzLu6xbW5vsPT0dPj/8/ZS622v0lVSz1G22vXT29jRz4+QU1Oa1NbT0VIUWtX/8a+53dNSD4+M01ZStPFyse/uLS/s6+7y8HR\nx9/b08xnTq1HtcFTQlNOL09JPEc/PDlBSl1NV/9ZT1//b+Ndus/bSExCTkVBVW/Jx7/Cu8G/v7i8vr7T71vnd11R61E3pNs6PTc/P1Vf319jWUdAOT4+XVNVX01nY/fV62fAxsb3a00/SUhL18PJu7q4t7a4sb23ws3r3+Nrb0//SjynZya+uUdCRks2Pzcw\nNTk2OldZb3fR2c7TvsC9wrO4zv9dTVFIQlNjycTGwsK+vsa0xcnZ32Pfa2dOVUo9LaldLjs4NTZET1tPPURBOj1BV0/v13fX09HFxcm7tbrDzU7vQUZGTdHfy9O4ubu5v7LBv8zLd///Z1VHSi05uzwuOia6W1/nSz43Qj43PVlT19Pb18XAwr21va2vuczf\na2s+TD1C/1nV58rGzOfCvOP3b+9j/2PjWUZXM7/LQzdANjA9W053S0BbTztIX1/d2dHbwcC/vcO/s72+zcpTVUZMTUdbym/Pzb3K3b+91W/f4+t3b19OSDgvrkozODYuMTiqu75fX0pIQ0XX1+PdyufR277JwcS3v8fVVUtEPztERE13/8/OwM3nvsXPd+/d\n62tnX05FRTWyZzk2OzZKTmfXa01J519FX9XP68vbyb7Lvci+trvHztFXRDxJRD9FXev/18jZa+fF49f36/d369VZW2dNMqtnQjg2QkBJNKiqzuvK40hX0efZze/FwN3N3ce4ytvIZ0o8Nk04Oz5XW1nOzuf31cXZ0+Pj/+ff93dVX0dntVM4Nz9BU/fnzMxb\nZ93d52/Kysjfz8nDzczMysnZ0edXQTw4PTk9P05OY9PX3XfZxM/V999v39vj1d/MU7W4z0VDRj3v9//XOqu/u8/fb1Xr9+9v43dra29fzt3GT0xEQTs8R0FFTmtV19Hb79PEz8rZxN3X3+tv78td97nRTkI6Qm/v5+PK/1XR583v2+fn3993//9n52/ZV9dV\nQkNBOj4+REdM5+PMxtPTz8HRy8/N69PZ087Tv9FXV8nLY01HTXfr218xyrTD09/dUV1XX+NdV1FT71VV61dESU5ISENHTffdX+fPa///0cXT49fbydfNx8TC02Pr591dX1FP29XL03f32Wv/U/9na1//a1tXT07vX1dXT1NHS0E+P0lOY2//38nZ18jM09Pf\nzMvMzM7Kx83N0dvj0ePrXXdd///nSUG5u87b/1lMXV9ZUVtRT2tTSk1GQkFGSUFHUU/n/+/n2d/bzc7N0dfKy8jOxsTHx8fN02PV92dvZ19r4/djXdNdZ01XTk5PV0pOT1NTX1tXd0pMTklLTFFd/9/Zzc3VzMrKzc3b/+PNx8/My8vN09vbd3fvZ1tfXVFd\nXVNXV11jX2/3W2tvd/djXWt372ddWU9fT01ZT1fn79fNzNvbzdXn09Xn793J38/R0c/Zb29bWVtXW2tnY2trY1d37/9dZ/9bV2drXV1vWWdnXWdbX3dfW3dr9+fZz8/J483Rz9XV6+d358zd2+fn3ev/W1lXW2dfa2tv/1tdU1dfd//n7+tfa29v92d372tj\nY1NVW1lbXW9j9/fb3c/Xz9XZzdXV2c7VxNXT2+Pfb/9XXV9bW1dXVV1ZV19ZV2dvb2trd29v/3f36/fra29TTmN3Z1dZ6+fn1dvd1+PX39vf6+Pf49/b3d/3d+P/X01bVVv34+fnd2tnd2NXa2Njd2ddW1td9+/n9+d37+9r62/na+vj9+v37+vb4+Pn2/f3\n/3fr29Xn3W93/2dZV1tZW133b3frV1trX1Vrb3f/d+/ja+fX2dfjz9/r//936+P3/2/n92fv//fn92/3Y11nb2/v5+9ra2v3Y1lZT1tVZ+fr699v7+v3d+vf693f4+d3693b3+vn52tfb1n3Z3fr/+dva3dr9+Pr4/9vY3dvWWNr7+t3d2dZUVljd11n5+fr\n2+fv43f/79fb4+vd4+vn2dnr1+vja19nZ/dn5/93//fr92NbW19jX3dbb2Nr7+vrd2tn73dZY2tnX+/d5+vj7+ff/3ff7+fv7+vvd+Pd2d/j4/dvY//vd1//72v3b2N3X1tbb2d3b2/3Y2dr/9vvY+vra1dZb11n7///69/3//9vb9nZ49/j3+Pf29Xf3d/d\n5+f/a3dj52//a2NjY2tnW1FVVVNZW19dXf/v73ddb/fr5//j7+/f19PX29nX1ePv5+/v6+Prb///3ef/d29va2tna3frb2//Z2dvY1tZV1dbU1dfX29fZ/fv91/j59//793d7+Pf39vVztnj693b9+/r//f/6+Pb6/9vd19bW19ZY2tvY29fY19jX2NZV2Nj\nX///6/fj2dnrXe/r7+/r29/v1dfb09vP2+Pj3+Pvb2tj//9vd/9nZ1tbXWdfa2NrY2dnd3d3d3dva2NdZ1tbX2d329/r6/9vd+Pr3+fn3dfX2evb39Xbb2/rd2trY2Nfb/fn3+frd2tvZ11na2trd29jW1tbZ2NjX1lXX2dvd/ff59XO4+Pr4+Pr3+Pj3d/d\n3evf3dtv//dv/2dvW2Nv6293729nY2NnY293/3dv//9va/9rd2dfa19rZ2fvd+fd3eNv7/d34+vn2+/d3d/b59nb5/9rb19nXWtRV19n/+/jd2tvd11ZY2vr5+vn7/d373f/a2tvZ2/39/f36+fX19vn7/fn7//r6+vf4+Pv/3djX19na29jY11bb2/r7+/3\nb//vXW//d//37//372/3d+93a2tvd//j9+f33dnr4+v3/2dvb3fv5+v35+fvd29jY2NrZ2tna19v/3d35+Nra/drZ1///+P39+P36+fv92djb/93//f3//fn3+Pna2//92dfa2P/6+fv5+/vZ19va3f/929jZ//v5+PZ3e/373d3a/fr6+fv9/d3d2dra2tn\nd29va3d39+Pv4+t3a/fvY2P/7+vr7+vr//93Y2Nja+t3d/93b/d39//n5+/r/2Nvd+fn3+Pf49/n63djY2tvZ3d3a1/3d//3d2trb3djXV9jZ/fn6+vjd/93d2//7+Pv7/f36+vn5+Pnb/93a2v39+/j4+Pv6//v/29v7+//9/9fZ3dr5+9vb2drX11dY/93\na29rd/93Z2dfX/f/7+/v6+/v3ePj3d/f7+fv7+Pd2+Pn3+Pn7+v/Y11ZX2Nrb2drd293Z2NfX293b2dnZ2t3/3f/9/d3b19j7+vr4+Pn7+fd39/r4+P/7/f37+/36+fn7+v39/9na2dnb29rZ2v39/d3b29nb19jX113//93b+/r//93a3f34+vr4+vj493j\n4/f/d2N3/+/j3+Pf7+937/9392dfY1tfY19rb///d2dnb+/37/dva//v5+fr5+f393dva3d3d2/rd3fr7//r62tra/93d//n7/936+fr5+fn/2dnY2/v6+/v5+vv93d3/29va2NnZ2//b3f/b/9vXWtr7+/r5+f/7+vv7+Pnb29vY2f379/r7+/v9/fn6+fn\n93dra29va3f/6+v/a2dv//f/a2tvd///a/93//9rZ2Nvb+//92//6+/v6+93b/fr7+fv7+v/7/fv5+f3929vZ2tn/+v/d//f93drd3dr/3dnZ2f/729nd3dra11fd/f/7+vf6//f5+vv3e/3d+9va/f36+/////v//fv73drd2d3/2tvd+fv7/f//2/v72dv\nb+/f929ra2drZ293b29v//dvb+/n7/fv/29vd/f34+vr63fv6+fr6+/v/3d3b3f39+//7/f/d/9rY3f3a29v7+frZ2/3a2NnZ2f/7+v/929vd3f39/f/b2trZ2/37+vv4+Pr7+fr4+vr7+/n///39/f/7/dv72tnb3djX2f/5/d3/29nXW93b29v/293/3dv\n7+fv6+9vb/d37+vv6/fv9//39/f39+v/d/9v////5+f3/3f3d2t3d3dn//f/b2trb29ra2tn7+vv7/93/+/n5/fv7/f/d2d37+//6+/n92/3////9/93//93/3f////3//93/2tra2f37+vn6//vd2tnb/fr6+fn/293///v/+/37/9rb/9vb///b29vb///\nd+/vd3dvb3f/9/fr63dr/3f/9+/rd+fn7///d3dv////7/fv9/f/d293//f/d/f/b2d3d2t36///////d2936/f/9////+v3/+v3d////29vb3f/9+/v9+/3d293b2/n6+/393dvb/f/7+/36/93a2tva//v9/dv9/d3d/f//293b29v/2dr9+//b3fr6+/v\n7/fr7+f3d293d/93/+Pvd293b293d//v//d3/29v7+v3//fv63fv/3d3d3d3a29vb/f/b2/v92t39+93d3f/9/f35/fr5+/3d2/35+v3/+/////39/93/3f/a2dra29vb29vZ2939/f39/9vd///b29v7+v3d3fv5+vv9+/3/+vn/3f/9/9v7+fv73f39+//\nb/93Z29vb2dj/3dv/2Nna/93a/////f/b2t3/+/j3+/v5+Pv7+Pr7//r92937+vv/+/v/2tvd29r///v/29vd3djb///b3d3d2//d2tnb2937/f3b//3d////+vr7/fn92//6+vn5+/3//fn6+936+93b2tvb2v/b/d3d3drb2dvZ2drb/fv6/f3d2/3/+/3\n6+v/d/93d2//7+/37+v/a3f36/fv6+//b+vv9//r9/d3d3d3d///93d3/2drb3dvb//37/fv9/9vb/f///fr9293//d3d+/37+/v6/dv///39+vv93f36+/vb+/v/2trb2t3////a3d3b2tra2dnd//v5+fv/293d/f37+v39/fv9////+/v5+vn9293a3f/\n/+//a3f/b2//7/9vd///b/////939/dvb///Z2v////r5+vvd293//fv7+/3/+vr/+/r6+/v7/9nb/f/d/93d3dvd/9rb//3b2//d/9vb3d3d3fv/2937/drd/f3/+vn5+/39/93/+/vd///9/dv9+/39//v7/////f/9/93d2///2t3//f/d29r//fv//9v\n//f/d3f37//37+//6+vn93dvb2tv6+f///f393d37+/3//d3b/93d///d3dvb//vb3f/93d3d/f37+f/d3f//29vd//3d/9vd3fv5+v//+//b//v73d39/f/b2/3d3dvd3dv9/f39////3d3//f/9+/3///////v6/9va293a3f/7+/37+/v//fn7+/v7/93\n/+/39//373d3d29v/3dvb293d/////93a2t3/3f/d3dvd/fv7+fn73d3//dv///37/f3d293/+vv//fr7+//9/dvb3f3d3f37/f/d29nb2//////b2t3b/9ra293///37/f36+v3a2//////6+vn4+fr9///7/f///f/b3f3929vd/9rd/9rb293b293b293\n/+//d/f/93d373dvd///9+vn5+///+/37/fv7////3d3d/f3b293///3//93b2t3//939////29vb3f/9/f//3d3/3f/b2/39+/v6+//7+vv/3f/7+/v7/fv9/f3//939/93d3d3b293d3d3b29vd2///3d3b29vb3f/7+/v9/f3//f37+/39+/v7/fv7/d3\nb//39///////9/f/b//v/3d3d/93/+/3/29vb29vb3f//3dvb2tvd//3//fv6+/3///39/f37+//9+vn7/f//29v////9/fv7/93//9vb29va29v/3dvd29vb29vd//3///3//f//+/v6+vv9///9+/3/+/v9/fv6+v3/3f/d3f//29vb3d3/3d3d29ra29v\nb//37/f39/f///////f///93d3f39/fv7+/v9/f39//37+/v7+/v7/d3b3dva29vb29v/3d3b3d3d3d3d29v/2939/f///f3//fv6+/39/f39+/r6+/39/f////3/////3dv//f/d293b2tvd3d3//f3//93////d2trb//37+vr7/f39/f////r7///7+/v\n9+/v9+/3/3d3d29vb3d3/3f3///3d2trb2tvb293d//3//////f////39///7+/v7/fv/+//9+/v9/////fv7//3//9vd////3d3b29vb//3//9vb29vd/////fv7/d3d3d3//9vb//v7+/r5+//9/d3d3f39/f3///v7+/v93dvb29vd29vb29vb3f///f3\n7/9rb2//b3f3//f/////////9///9/f///fv9/f////39+/39/////////f3//9vb3d3d3f//3d3d/93//f3b29vd////+/v9/f3/2939+/3///v6+/v9/f/7/f/d3d3//f//3f///f3/////3dvb293b3f/d3dv////93dvb2939//37+vv9/f/d/fr7+//\n9+/v7+/393f/9/93d//v9/93b29vd3d3d2tvb29vb3d3//93d//39/fr/3d3//fv7+/r7+/v9/f/d/f3///36+/v5+vv/3f3/3f/d/f/d29vb29vb2//d293b29v//d3//////f/9/9vd///9+/37+vv7+/////v5+v///fv//f3/3dvb3dva29v//9vb3d3\nd///9/93b///d3d3////////93f393d3d//37+/v6+vv7+/3///393d39//37/f3929vb3d3d////29vd29vd//////3/3dvb3f/9//39+/v7/fv///39/fv7+/v6/f///93d///b3f/9/f39/93b29vb29rd///d29vd3d3d/f3/3d3//939+/39/f39/f3\n9/f3/3f//+/v7+/v9+/v93dvd3dvb3d3///393dvb29vb2//d3d3b2////fv7+vv93f/9//v7/f39+/v9+/39///9/////////f/9/93/////29vd//39/93d29vb29rb3d3//93b3d3/+/v7/f////3/+/v7+vv9////+/3//93d3f/9/f3//f3//93b2tr\nb293//fv9/f/d3dvb293////d/////fv6+/v7/f/d//39/f///93//f39/f3////d3d3d/f3/+/39///d2tv///39/f//3d3b29rb//37/f39/939/f37/f3////////9/f39/d3d//39////29v////9/f37/f/b29va2t3d//37+/3////d3f///fv////\n///37/f39///d3d3//f39/f3//////f3////d3d3d3f////39///d3d3d3f/9+/v9/f/d3d3d3f/9/f///////fv7/f39///d3d3d//3////d3f//////3d3d////////////3dvb29vd3f/9+/39/93d3d3//fv7+/39/f/9/f39/f/d29vb3d3////d3f/\n////9/f//3f/9/f/9/fv9/f3/3f/d3f/9/fv9+///3dvb3d3d///9///////9/f39/f//3f/////9/d3d/93d////3d3//f3///39/f39/f///////////f3////d29vb2///////3d3d////3f/9/93d3d3d/f37/f37+/39/f3////9/f39/f//3d3////\n///////39/f3/3d3////d///d//39////3d3d3f//3d3////9+/v9///9//39/93d3f39/f3///39/f///93//f////39/////////////////////93d3d3d///d3dvb293d3f///////f////v7+/v6+vv9/f3//93////9/f3/////3d3//93b3f////3\n////////d3d3d3d3d293d///////////9/////fv7+/v7+/39+/3//f3//////93//93d3d3d293d293d3dvd///d///d///d3f/////////////////////9/fv7+/v7/f/////9/f39/f/9/f3//93d3dvb293d////29vd/93d///////d/////f39/f3\n9/f///f/////9+/v7/f/////d3f///f//////3f///////93d/////f3/////3d3/////3d3d3f//3d3////////9/f///f39+/v9/f///93d3f/9/f/9/f/9/f/d3d3d3d3//fv9/////////93d3d3d3d3/3f/d//////3//////93//f37/f/9/f39//3\n7/f39/f3///39/////9vb3f//////3d3//9vb3d3d3f/////9/93d3d3d3d3d//////3//fv7/f///93d/f3////////9+/3/3f//3d3d3f/d/////////93d3d3d3f/d//3//////f/////9/f/d/////f3/3f///////////f39/f39/f/////////9/fv\n7/f3/3f///93d//3//93d/93d3d3d3d3d3d3d///////9+/3//////////93d/////fv9/////////////fv9/f39/////f///////93/3dvd3dvb293//93d3d3d//3//////f39/f39/f37+/v7+/v9/f//3d3d//39/f3////d//////////////3////\n/3d3d3d3d3d3d3d3////////d//////39///9+/37+/39/f393f////39///d3d3/3d3d3d3d//////////39///d3f//////////////3d3///////////39//39//39/93///39+/v9/f39/f//////////3d3////////d3f/d/////////f/////////\n/3d3///////39/f39/////////f39+/39/////////////93d3d3d3d3d3f//3d3d/93d///9/f3///////////39/f39//////39/f//3d3//f39/f39/f3/3d3//////////////93d/93d3d3d3d3/3d3//f////////////39/f39/f39/f3////d3d3\n//93/3d3d///d3f//3d3////9/f///f/////////////////9/93d3f/d//////3////////////////d///////9/////93/////3f////39///////9//3//////////f39/f//3dvd3f/////d3f////////////////3///////3///39///d//////3\n////////////////////9/f3///////////3/////////////////3f////////////////3//////////f3//f///////////f////39///////d///9/////////////////////////93d////3d3/////3d3///39/f/////////////////////////\n////9///////9/f3//93d/////////////////////////////////////////f////////39//37/f/////d3f/////////d//////////////39/f39////////////3d3d///////d3f/////////////d////3f///93d3f////////////3/3f///93\n////9/f39/////////f///////////////93d///////d3d3///////3//////////f3//////f39/f/////9/f3///39///d////////////////3d3d///////////////9///////d///////////////////////d///9+/39/f/////////////////\n//93d///////9/////93///39///////////////////////9/f///////f39/f39/f////39/////////f//////3f/9//////////3/////3d3d/////f39////////////////3d3///39/f39/////////////////////93d3d3///v//93////////\n//////////f3////////////////////////9/f3////////////////////////////////////////////////////9/f/////////9/93d3d3d3f/////////////////////////////////////9/////////f3/////////////3d3d3d3//////93\nd/////f3///39/f/////////////////////9///////////9/f39////////3f///////93d////////3d3///////3///3////9/f39/f///////////f//////////////////3d3d////////////3d3d3f/////d3d3d/////////f3////9/f///f3\n///3//////f3//////////////f3//////93d////////3d3//93d3d3d3f///////////////f39/f39/f39//////39////////////3f///93d3f/d3f/////////d3f///////93d/////////f///////f39///////9/f////////////3////////\n9/f///93d///////////////////////////////////////9/////f/////////////////////////////////////////////////////9//////////3////////////////////////////9/////////////////////f////////////////39/f3\n///////39/////////////////////////////93d/////////93///39////3f////////3//93//////f/////9///////d////////+///3d3///////////////////////3//f3////////////////9///////9//3//////////93d///////////\n/////////////////////////3f/////////////d//////////////////////3////d3f/////////d3d3d3f//////3d3///////////////39/f3//////f///f/////////9/f39//3//////93d/////////93d3d3///////////3//////f/////\n/////////////3f//////////////////////////3d3//////////93d3f////////////////////////////3//////////////////////////////////////////////f/////////9//////////3//////////////f////////////////////3\n9////////////////////////////3f/////////////9/f////////////3////////////////////////////////////////////////////////////////////////////////9////////////////3d3///////3//////////f/////////////\n////////////////////////////////////d3f/////////d3d3d///////////////9/////////////////////////////////////////////f///93/////////////3f///////////////////f///////f39/////////////////////93d///\nd3f///////93//////////////////f///////////////////////////////////////////////93/3f///////////////////////////f39///////////////////////////////////////////////d3d3d///////////////////////////\n///////////////////////////////////////////////////////////////////////////////////39+/////////39/f///////////////93d3d3//////////////////////f/////////////////////////////////////////////////\n////d3d3d///////////////////////9///9///9//3//////////////f3////////////9/////////////////93///////////////////////39/f///////////////////////////////////////////////////93d///////////////////\n///////////////////////////3//f39/f///93d//////////////////3//////////////f39///////9//3//////////////////////////////////////////////////////93d3f/////////////////////////////////////////////\n////9/f3////////////////////////////////////////9/f39///////9//////////3/////////////////////3f//////////////////////////////////////////////////////////////////3d3d///////////////d/////f/////\n//////////////////////////////////////////////////////////f///f////////////////////3////////////////////////////////d///////////////////////////////////////////////////////9///////////////////\n///////////////////////////////39/f///////////////////////////////////f/////////9///////d///////////////////////////////////////////////////////////////////////////////////////////////////////\n//////f39///////////////9//////////////////////////////////////////////////////////////39//////////////////////////////////////////////////////////////////////////////39//3////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9///////////////////////////////////\n///////////////////////////////////////////////////////////////////////////3///////////////////////////////////////////////////////////////////3////////////////////////9///////////////////////\n////////////////////////d/////////////////////////////////////f/////////////////////////////////////////////9/////////////////////////f/////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////9/////////////////////f/////////9///////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////////////3//////////////f/////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////3////////////////////////////////////////////////////9//////////3////////////////////////9///////////////////////////////////////////////\n//////////////////////////////f39/////////f////////////////////////////////////////////////////3///39/f///////////////////////////fv9///d/////93///3/////////////3d3d3d3d///////9/f39/f39/f3////\n////////d3d3d3d3d3d3d3d3////9/f39/f3//93d29vb29vb3d3d///9+/v7+vr4+Pj5+vr7+/v9/93b2tnZ2NfX2Nr/+/r6+/v9+/v7+/r7+/v9+/n6+v3d29nY19fX11dX19ja2939+/n49/f3d3f49/j5+fr5+v3d29nXVlXV1fr1dn/Y19dXWNn49/b\n69nb2dvT0dPX1+9vWVFJRENDQ0dPT13/39vTyr++vb7BxMPHzc/T5/dXUUhCPDs6NDzTwOdfW11VU1nTztXLzNHd38zKzs7R219jVU9IUU5Zb+vX19fNzM3IxsfKz9vvX1FOSkVFPz07OzUxMjUzNjXvur/N3cfBvLm5t6+0tra3vby5vr+/xtF3S0VBPz9E\nP0BLTEpARVPb21VNV0tDOjo8Pj0+OUe7zedHOzo2NzastN3/49vPxbavp62wr6y5ubmxt7vFxNvvV0dRRUpPR0VGPT5APjg4PUM9ODgyMjA8OkBbW1dZUUlDR01ANq6pwl9r2dndxciwtL65ubvBura5s7m3u87L2dV329//0/frUVNXQ+NdUU5CPTAvLzEs\nO87VX0c6PDYxOTc0t7bIZ11r/8jFwLS/xs3L1WfRys7R0dvX31nvz8HJvru5t7vFwsTn2b/G409PSD01OTk2ODg9PDk5Mzk+OTBTsdNIW1VJ1Wu+sL3Jw8LKv7+5vMDCxd/3d1X37/fZycPCyuPX0+9Xys/3Rz09LjCv0UxESkEzOjc2QkQ/Pi6px2/nd/d3\n58fCttPZ2cTFyrq5uMDDys7f/1/L1cvR0ctv/93Z/8zO399KSUVDP0JGPENGQjlFSUZJWWtPTarEW1FPT1N3ysfBWdfOyMTEurrD3dvva0VFR01v38/K1cr3587jb83L3WNdXy+ux9dGRTktNDQ0PUo+UWc4qLPX2//fSMjb58prd9HbzcC6vMrX29/ba1tN\n39/KzdHLz9vTys3N693NT1lTRkBDST46Ozs2NkpETF3/6z3BqMVJ/1tXyNfvy3fj387Cz8C/yc9fb2dOR1ndy7/D1b7L1c3GxtXO0cDOZ0vGrV/bOjUsLS4sL0BCO1VnLE+nwU/j3V+/yM/C78nFw72/ub7EzXdfb1lCVVnP0c/nzdXX0cvL1+/fd/dTa1FL\nRFE9MTMwLzEyRUZLV+tHLKW/S1lfY8vK3fe/38DFvL+7u7/O1VXnVU9j2bjBwMq9wsPRz9Ff13df90U8qudCRD8tJSwrKy9AO0XdVddDxKrB987L08fK58HDxsO4u8fKxdn3VW9vRE5M0dfZy8/K2eff2W9OTEdNW/dZTj1ERjUuLzM0NF9Lb+vX10w3pLlv\nwOu7z8jZyri7u7u4vLy+0/9ZUU1FTVvn02vIxtvf92tbY0hnTFM9X7DvS0c+LywvLS45TUZv5+u81VGir9G/zb3Kx//fzrnJv8HBy7/jUUFERDY7PkpbY1Xby93/a/ffU1NJVVnJb+tXX0dFNzIzNTpZWefjvt93Obyqxd/Cy9nLwtvHscm+vsnNzudNRTtJ\nPjtGQ9dR78zX2f9rT19O42t3a8+rz8FTSTQyMi42OEZLy1/IxMZTRaG577/N2cfVW+fCu8++0/fXb01EQD89Oj87UVdVd9nN729rW2NPU3fN/8Lrv1VJa1M1Oj9AT2PRz8jP0WM2n7bLyePHzcjX1b26zL7H13frR0Q4Pzw/PT5PW9tfzc/VZ1njVV/v789J\nor251Ug7OjYvODtOV81vy8jD3zmktL1338930efvZ7zrws7va+9VQT9BO0E+OUbdW1XFzNFfX2tVX19fzee51cjJW1lVPjg7QlXb1dXbwd1rP6ukuWvTz+PF4//Tws3VyltVTUY9Nz46SEBAP+PDY8HFydvf12fXyNfXvqayvdFVPTs+KzI7QmNrX8zTyVkz\nn6u/19/3/91XX9/R0d3OY1tdSj48QTtBRTc7791rzcLMy9vr0+PZ28XMw7zJxedfTkM4NzhTSN9P0d/ZQzOhtsjjd+9nzl1r19fT281PXVlLPztIO0xTTEz3vtnHvsHD09vV3cXRPqGtvb3/bzRGNzIyNjlCYz++X9VbMK2uvs3fY2PZ2U/Xzu+/619Id05B\nPz48P0U+U/fZ2c6+ysfN787f09/L2b/Ru83nS1E/Ozo7TEfjSdNLT0kvtLa//+NV78fT48rHd+vFW1lPUT8/P0pVVVXfxLrRwb2/y8hr42/M69+hscnO50E0PjgwOTQ7Q0tMv9drTDSftszK62fv0dnn1cld0W9dUWdJSEI/SEhDSVvI0cvCwMPDyf/V2+vX\ny9XFz9VdZz9CPDU4OkJCSVfjTkdHMam1v+fOa//Ax83IvdnM1WfdT1tCTURMY1ndW8DEysDAxdHNVWNT9zqttb7I40swQD8wMTAyPEI6RtPn7102oq+7z9N3UcnZz8vH2czd51P3T1NFREpRSFt3w8PRv8DCxNXfX29fW93R78rdU0M6Pzg3Mj07RD1VU1dO\nTzKgsrvby+dnxci+u8nNwsVZT+NPQEdER/dO2c++xtO/vsXI21tdSlk6obPOxsxDMDU4MjUvOkM9Odnr711LQ6GuwcfX3Vff08C778/F3VlPXVE/RD5ISD/fXc/G0cDFvsfRb29ZWdvM0V/D1UY/OTs6MjBJTEVB/01OVUM8oa69ydfL582/urfTy77vWT9L\nOkA6Q1VfTtfZvsbbvsfJzeNbV0k7vKm6zr53Mjc0Miw4Mz9JPEDj59X/Vzqfr7rJzNVnz8m7us7Kx8xLQkk6QTk/TEtIW93By9u/xsPMa1dXT2PXy87v1e9KPzc8Lzg+RElNRl1f32tGxp+vyL7RyszDwrG31+u7T006PzM1Pz9vY09MucTX68LE1dFZVV1H\nN6SwtcvR4zI+MTEsOTlGU0xMW8V331dHn7C9wMPT18nLtLnOZ79OXT5FODRCQVVNR07EzMfVy8vH/19MX1fj0cLGzGPVSzg3PC88S0prTllJX+PR7zilrLzKy8f/v7+yu8RvzlE3PDM3N0RP6+td586/yePK3df3U09ZOa6us7vEa0FBNDE1NjFCRVVZ729r\nyddLPp+z18PK48/KyrW7z1n3UTc1STE1SEpfVVVd/77P18bT1etVV+Pd18y/xcxvX1k2NDo/PkxF3V9RT+vf3eNKobfFz7/X07++urrVd0xLLzI2NDVGY/dja+fPzMPL2dXZ51tXZ1WmsrrDwFs+QS4rPjwwSk5vV3d3a2vHX0ejtcTJz8Xrv8O/t+ddTUI6\nLzcyOExAXU5fVf/Hxd/Z2WffXffJztHCv8PKz0s6QS9XPElNU+NKY/93d9X/OJ+zws7BwNG+ybm660dEODgrPTE9TF9rZ8t30crDa8bvZ99vTc+ksbm6xOdCQTI2Mz81ONNIY13/b13/d/+/qrrX0cLDyL/EwrxXVUk4NDI5NDhrP3fr7+vXxdXVyF1b1+fP\nvcLGxbzf11tNNzVJSEVAd0tdQVv/b1tbQ6apv9vOu8G+wr2/y0hHPzAsPTk9PtlfzszZ1cjJ68TKb+vn90Kfqbi8v8s9QjwvLzs5OjjvUdtVVe9n52dOp6i938zGxb2+x853U0RBNC8vQzdISff379HZzcr/wd33/87Lw7y7ysbJz29HPzc1P05EQUlvSVFT\n22vrVUalqLvfvb3Ht7vHxVs+PTsxLjQ3V1V3/8jbydvAyVvE5+P/zkeun667xMNFPj43Lzs2NDHdQWtnX1nv79lvO66tvd/JvM64vMjLTD0+PDcxNTk81T7Z03fT2cbVY8Zvd9vNx723v83JvUtVQDs6O0VLN1FKU0tOX+f/90lEo7S7xru6vru2x8VENT04\nLjI6QE732+u8zs3XxtdLy1/r299Fn6m0wsfKNz44NDo1NDo+RE/P61VZ3d/JRUCisr/Xv7vAvL/dzUk0PD02NDlEX1dbytPf0d/R20z/92vLx8W+ucPM08xPQkI5OjtDPE09S0Nv3+//5+NPPZ+ywL66ubu3w8j3QC41NC84P093Vdd3vd3b49NrSGd3a9FI\nraGttMLGXTw/OTo1MC9GTTtFXV/bVdHO61VEn7C8vrzDvbvf12s8MDg9ODVISWNHz+/bx3ff0V9dWWPjyb3Ht77Fz8hvSj09Pjc5PURBP0xVU8vNb9Vj42elsLy2ury4usvOVzMtMDc7OlPnTFvPztlry0zjSVVrZ+Pn36Klr7++30o+Pjo8Mi4/Pkg+4+tf\nW8Vv0dVMvaavvbm8vr3CXeNVLzM1PTs9Tv9FTs/v3VP//+vfPGdn2b+8u7fExcnTTkU/RDw3O0w/RUlV3ffV687nvUS0p6q5tLm1vcNnWzooLi09O0Nn609byMj3U0LdY1dRW+vZTcykqLa6wllDPTk5OTAvW0FCT/fX2/93v+/JO6ekrr69uLvB60x3Ni4x\nPEVBTGf3Q93vy11JRuPNP0Z328u8vrq8v9XOd0I4Rjo5ODpLTkRbY9fN39vKw+c5oqGru7q3u8rVSUMtKi40PkdP69FEzMrTa0FC7+dZR+/Z40GfrLOzxetMPTs3NjYuOD1GQOv/38/Z68LLykzZn6bAuLi7601JPzctL0BKR0z/d01V3dlfTD7Pb11NY8jF\nur/BvsFd42M9Rjw3OztBPz9MY2Pdy+fbvN3IVzafp7q4t7tvbz44MiwsPklPT99fd/fN129NPtXZZ1Xfx+fboLW4tedRSj06Njg1LkpEP1lb3d/V78O53dPVSqmisr+4vkNEQDc7MDRKW19ZXVdv31nV/0dvb+NOZ93Vvr29xsHNW1VPQkI2OT06Qk9JQctb\nxdvTx8HNztXT05+mvLPL/0Y3MjE4MEZbb/df92vBX+d3d09I429Z091Co6y1ybtRQD5LPjU1MTlKRk9Ezsznzsm/48zOxMREoZ+uxONPODw5N0BCR1trd01N/9Vdb2fPUV9nX2/Vyb+8w8bO208+Sz5END08Qz9Mb0zrd7/KvMTRyc2+vFHTn6/L1VE4NDYy\nPT1IU1PXW1fXxF1X51NnQGtby99XvKSuvtnEUzpCO0MzOS0+Qkpf28/f17rTt+vbwcDE/0WfreNvOjo1Pj9NXVVJT/dXUevba1XLTuNLVe/Tzci7u77K21tKPDs9Qzk7OUZGT1fZ19nPwcHB0dO9vL/F/6Wrv1dJNzY6QUFVU0pNb+dR293vVV//50hRZ93d\nQqCsscn3XTxBOjtAOTQxP0xVa86/0cTGxr/d0cO+x85nq6y8RD46OkVXXetNS09B71Vf52ffTGvNWVF398fCvbzB6+dMOEU4PTtHPDpFXVFV277IvcTOutnDv73Ex+OvrbtPPzc6PUdMTFVEU0drZ1/r99tBQvfvWVvdQqimrbfv1TxARD07QzY4Mkhd9//I\nvr6+z7rjys/Cys7R36uw0UY/O0NMWXdXS0dIQlVv/13TXVFfU8lZ39O/wbq6xuP/Qz85OThCPT09S11X58rFvMjHx3fByb3GxsS+s8DPQzs8PElNUVdIPllAd+/fV85PSVl3yV/j72ezp62/2103Szo7PD85OD1CXePjv8G40cvHW8rKw8/OxsG80+tCPENE\n79tXTkxFSEVj4+Pra293Wf/E99fNvry+wet3Qz07Nzo8Qj5ET1tK99W9vcPBv9HjusO9w8XCvsTrX0Q7QERPU0pJSEBLRefb99lTW2dnd8/jyc/CtbO3xXdJPEA8Pz9FQj9TTkxjy76+xsy+4/+9zszJ38vB3VdMRD5FW/9jT01bT0tV48rbY+tj3+PnxsvH\nw7y9v9HjST8zNzw+RUZFU2NVR9nGu83JycLj18HFxcPNxr7ra01ESEZXVWtLSU1XSllVzM9TW0/f3+Pby8vJv7vAzN9TQDo8PkJHS0Vrb1NT48C71czGvf/JzcnMzNPDz19KVT1KSmNjW0dFX01ZT1nK3Vv/b+fXxtO/w8K/wsz/TUA4NDg9QUtKWef/WVHT\nuLzNzcK+zsnExMnJ08bnW01NRUZDTVNOS0RPV1VNT8/nTmPr18/Hyby6wLy+yNtLQzg3O0JDR1FO6+/vX86+vtfXzMDM29PLx9XR02tNTktBU1NVVU5ISFFrU0pjzudf9+PVxefDwbrExtHfVT46NzQ8QEVPV2/n/3fnyb/BzePLwMTLycu/zNPTZ09JS0RL\nY0lVTE5IW2dfVWffUVtv28vG18a/wMrK7+NMQj0+PUdLTV1Z393f3dXRv8vZ487E4+vbycrM42NTSUtHSFfdW1tMU1Nd/1lfZ83dX3fdxM/PzMfIzutZd0xCQD5CSVNfa3fn2evZ4+PE0ff31cPj29nVys/vVV9MT1NLU99va1dfW+/j/19n2W9OZ8zCzdnC\nycrPb1NbR0RAP0tKT1Nrb+/O787T27//d+fK1dnd1c/HzP9nTltfVV9nz/dZWWNZ7/9vU1vdX1lnztnNd9nZ3WtbT1FLSEVBV1db5+ff287Zz9Xjw/db68fR1ePf09XZa1NTT1tMT1n//11fZ29v52tjT99L/+/K1c7b19Hn6/dXV1FPS01fW2/v9+/T293T\n0f/Kd//V69vj993X09VvW0xbX19rb9n/Y29jd193Z1NO51Xvz+/J1d3n329nW1tdU1FOU1lv79fn49fX1+ff/91rVdPj1ePr69vd32d3TlVnWWNn4/93//93//93V3dbV9XX69HP5+tva2dZXU9jT1ldWWNn2dvj3dPV32/NXf/j/93n593d387jd/dVXf/3\nb+vd9+dr72f3WV9O31dd993n2dH/91/3WVf/U2NTWWtdd+vd1dnn09133fdvY2tn3dXj39/n0+9r/1NZZ19fX+9r72//Z+9dd91bV1vr5+/X0+PrX1v3WWNj/2dn72Nr6+fV0+fX29//a2P/Z//332vX4//Z52djU1t3Y/f/5/fna+//52P/Z2dvd//b39vV\n3e9vX11jZ2NrZ2N3Z1/d59/X7+v/d/9f91tna+fb7/fZ693f7/9bY/ddZ2dr5//jd+f/b/dda1lf/+fr387n929nW2Nja/93a3dna9/r2d/j9+N3a19fZ2d39+v/5+vv3d//a11j92drd/fj9+f/7993Y2/3Z2fn2Xfn0/d392NZb29na1lnX/9369/b5+fn\nY/9rZ1tvY3fb5+v/3efZ2+PnWW//Y2df9/fn52P342tjX3dXX3fvd+fV9/fvX1tb/3fn9//ja9/n2dvv699va2dbY29db+tvY//rd+Pr93dZY/dvb2ff6+fn9+ffb2dr73dr2+dv59vv63dnX/dr//9rXfdn6+vf2ffn/1tZY19rY1//4/dj9+Nv2e/n73df\nb2drY+fb49135+Prd1/rb2fr43fr1+9va2NVZ2tvd29n73fn69vj7/fvZ1tdXf//Xf/j52v35+Pb//f3Z2ff/29r593j3evv6+trY/dna+P3b//r52f/XVv/b/dva1//6/fj29fvd2dnWWNfb/djb+PfY+v359/n69/3Z3fva2vd19vj6/f/62tbZ2tbd/f/\n9///b2djW2dv9/dv/+/n693Z2ff372ddWWf/72Nr/+9j6+fr729vb2tv//d3b+fX393v9/fva2drb2//b+///+t3b2N3Z/ffb2f//+/v39vb/2d3Y1lfY2/vXf//63f/49/f/+vnb19v/2v/3dnX4+93d+t3W2t3b3d373f/b2d3Z2f//+N3Z/fv7/fn3d93\nd29jWV1n9/9v73fv59/f4+t3929n9+9v93ff5+fva/dr729fZ29vb2//9+f//293///v529j9+P34+ff42tva2NZX2P/b2/v9+/3593n5//jb1tn92fv793d5+dr72//b2dn///3a//rb2v//2d3b//rb2f/4//n393372trY1tdd/d3///v/+/f4/f/Z29n\nY3f3/3d35+v37////+t3Z2d3b3dnd+Pr//frd2//6/9na+/v/+vn4+9rb29nW11vb2936+t3993n5/f/919bd3drb+ff4+t39/9rd+9na3fv/2f/4+////dr9//r62t39+f/99/n7/9na11fY3dvb2/343fn3+/3d19vW13352935/f373f393f3b3drZ///\nZ/fd5+9372f/5+t3a///63f/6+Nn/3dvY1v/b29rd+v/b9/f6+v/b19VVf/r79/T3+v/d/9nZ29ra2tvb3dvd+fn////d//v3f9v///v9+fn5/fv/2tnZ/93d2/34/933efv93dvZ11Z7/9399/v/29rd293b2NrX2NnZ3fv493v63dr63fr//fr6+/37+dv\nY/dnX1ln993Z18/V3e/j/29nX19bVVVrZ/fn3e/3d/9ja29jXWdrY293d93OztXb2+Pn4933Z2dva2Nvb29rd+f3a/fv//9jd3dnY+/X62drZ1FTa2dnb1137/937/fn3+fn29POz9PP29nvd01FPzY8ycvfa9/R43ddV2dba19f393d4+vHz7+/wcfb53dZ\nTUlTXV//79/b29PN083XZ1VR/0dHPj4/PTw+Ozs7177H62Pv79vKxsLCw8THyby7uLu8ur7Av83X41FMR0ZBOjs+Q0tHSUtNSkdMVUs2M1m9y19ZVdfZb2tdRj5KTkpPW1tMY19jzMO5vru8vru5s7W2uby8v8XRyM/dZ0s8R0hET01MSD9KUT1LTD46r669\n71FHQ0JCR0c8O0tITEl3b8HBvby0tbu3ur/Ay83bZ1VPQzs2MDs8NTE3Niq4vd9JUUA2UVdCoKe0zsfZ0+ddZ1nvSe9BRXdvxc7AvLi5ure3ub/Da1VVW0g3N1FJ20NOQUz3Pf9KWU1ZT01PRN2ftl/fUUM+Rjw4b0g+REA6TE3Ty729vriyt6+/vMvd60lb\nWz9DSsfjX1NrTKG8xd/3PzRGSUFPM62p0TzvVztHPE1JT0n/SU1Md9W/ubivsriyuLTA5+M/bzs7PklIQl1n/2tJwUZHXU5fWWdCSfdFL6PIQD83Ly5FNUtNWU9DV11X1bu4r6ytrrWvsrrGW0o4LDI4V0pRWVtHob20x+9RRsjjU2tZR1csn8ZGWz4vT91A\nPlE9Sk9LUdXJuriwrq+1urm61V9BVTdENlM2PDg8U1U+19O9X8vZz1PR4+dP/y6hyU9XSz9FUT1GS0NGPk9Pa+u0u7CqrLO6t8HjSUouOjpIOVtCPbesu+/DWURfwndKZ1tf929HLZ+5Y+db2Tr3Pz/I/0hva0j/zL22u7S6u9Pn30ZVRDY4NTozQjpdVVNr\n18DR08nf7+9Xd+9PRy5dpsZHZ7w3b99JT11jTldPTOOxwLyyu7fT3VE+Pj04OEF3OTmmtLTb0//vzs7vsG9A4+vnWfdOMKC6TkjnPjjMSl1nTkPrW0s+xrbIvsm/wc9TRFc/RTcvRzM8QE9fzc2+vbu4z7+13VPX32dMPTOit11fTMJIa+9KSkE9Q0tBW1HB\nt7u+xt3VXVNnQ1lXQVvNV8fCvsjEybzHyMfTytPIZ+fOW13bunfnSUBjR0bb2UljREhDS1NI0dPP09fvXVs8/0ZVPkFBX0/Z99fXxsHEv8rI273H7+PN51dn27/H00pMY01PS9VFU0VHSllZUUvD3e/jZ1NIQUpVz9Nn/75LznddXdHH1cDKzefjxt/n0+s+\n/8/VUUNEPUl3Z83P4//3UUdn59F32c/V59tnZ0tnX1NOU0/XVdN3z9vRwc/O19nIa+fr49vdWU1LREVIRTxDa01fZ3fv2ePXb9Hb7+PV6+/nz+fXd9H/999r59HrTHdZXf//b+/Hb//d0Wdd3WtER05HV1VNSv9f1+fjzdvV7+tj3dXb1dHP49/322/32+vr\n69Nvzdtra913X//jXWP/5/frXe9dW0tZV0tITkZXWeffd9l339137/f/4+fb09n/63fj/2/j4+/NZ+vLa1NTX0pda93b3/drX9/T1dN3Sj9OT0FKa1Xvd+PM39vKzc/X0dPV09nO/+drWUFGS1dOd3dPS1FMSUdKW93v4+vT29vLz9/r3cvMwMO+zsrNzMLD\nw8PCw8HKztHd12tfS0Q/ODI0MjI4NTU4Ojc8OTc4ODc8OT5JP0JjuLG0uL67vLmvuLe1ubWurqypqaimpKWprLG+zv9ZR0U+OzZXMjMvMSwrKSssKiYjIiEfHy8yLywtLjFBRNG8wL68r7Gvq6eipKajpaapq6iqrLK3ubvJycDL0/f3V04/Qj05MSssKbas\nwVU0KyEoJycpLS8uNS83RW/GwLGzqquxub7Va1lPY9fT59nAtbS6sLi1uruysr/A69td97673Ts7MjMuLCkrLScxLzc8U//n1/dra9lVSefv69fj0WfTvsO+r7OtrK2yuMO5vdf/QUmfoa/XXS8rNi4uMiwmMy4wMllfZ0/Iu9lLVUlAMzAzNDQ/Y0vJwbWu\nqbCssLmxtbO+2d01pafC0b7rOdfPT2dHREzrOkTr38hZ00pJODAuLygmJCYsLTE5QlNrwri/w7/Fur68ubzETqqfn6e10U1N611C3zZNX8HfuraysLCvvrTjTTQ2IiEiICksLSozPj7PzLzC0cHZtb7VX9cqn66wyUhjX8LNycP/58DCuLeyr6+zsrvCZz85\nMCsvLScsNSwxLz00SUxXymdvX3dd601fSSyfn7G2wjBvQmtGXfdVu8a1sqqmqaqoqL+tyGM7KjUoKzsvOTc5R0TTV+fDRVM7Y0c/MiwhoOs2Okw4Z0drd+tj28LLvbqsqKmqqq65229dPS8yOzQ6W1dMTVfDxLXEvsVjW09GPzcwHz+1odvvQyv3KTlCLzpB\nTnfGv6alo6SrqLHDz1c8Ni45M/863W/3xruuq7DIr8RXwudAMiohoNMuLyswNyw7NEgzOjxG/1nVra6xsbzfU0BFOjg+Pv/DvbvIvbi2r6autba0ysXOSDcuJ6VO57LvRTBnMDQ7LTE1QTRVXc61tK69ve//SP85PjwwQNlb0+O+sqispqivr8XHr8VJPUMu\nqPc+OiwvPjA+Oj80OkE6OU/PzrXTyEI6My03Li42PU7LzrvAt7CqpqSqr7O1v8vOTz9CKp9vrLr/VT5IND5NLjk1PztJ48O+rtdXRzk8NjYxLjM2RG9Pb925taqmrKy8ucbDyk5DOiahuF9NSzM92TzvXUhJSe9HS867v8Oz51EvLi4tMCw6MWfZb8vGvrav\nr7Gyx8njb09bP0gtr7BJu6nOS8NVRkXVOlVV70vItri9urVRQj47Oi48PTs561FO68PGuLWpuLXA3UxK9zZNMSus9zg9QC5rxkrj71fTd8BvwL+zwMPOzDw4Li44OTpFY2uvwLi7t7CurrO9a/89QDQuOirbrMMpvqln38JfW0dOPF13Y/fGvr3Du+fZPDs+\nVTXva1lNw87Iw7Wzr7Krvs5vQjs1Kzo1NLzKOzU7QTxbU1v362Pb377JvsK2xsHbV1cvPD03SVFr/7vCrruyvKu0tLXNRzw0NS0sMDLdwXcwLK68wMfL61Fb1/fvz1/jx8LD1+9NRDw9X0PH48F3usi5urixrrOuw+tVOy80LjAw3ddPNzQvPkDXNsXRZ9fK\n18e/x8y/1+dOUzRCNEc8W9fZxrC9rLStrq2wtctvTzYyMjMzLDvA9z0wLLvCtO/Z21VOz13fy29j51VdU1s5O1dTa2/3vcC7wbi6sbivtLi7WVdDNDY8NjI+5+ffQUo+RFddP7vj78TPa8nN0dHTW0xfOz0+W0xGT//j0bXHrbeztbrHz2NKQjg4SDg8Pl3j\nz1tXX9FfuuO1ytPM12djd1lZW1FFVUY+QkZNW2vr11m+77rnzcHKxtXPXU9OTmtRW0nn09Pv5+Nfb8BRt8LDzMbZb9Vv/293QkZFQD5JT08/S1ld29m7z8TG09dnd0ZNPTxOTTtH/9/n23fP18Xbzr6+y9XFztnRy+9rVUxVTVNOd293V3fT12PjzONZW2dV\nSz9JSEhISV9Va+vv19V3//dr/9nMvL3Ry7vExMrF2dPvd1NXV1dva1dMZ2tTXf/M2ffZ729RTUZKRklLU0xdVf/f3e/b291Xa8vfZ2PM59f/63fn91nf59935+dnd9nP4+/rxd3r92vnb1dbW0tfVU9Xz9vf69/r52tZV2Nfydf399/b1+vvY29jY+/32ef3\n7/9P92fr79Pbd2tbd2//WWv/d1lvY19bWV/r3+/r691359fvXV/vX2tVUVVVa1H/69nRy87X5+fP493j3/9bVU9jW1t3Z1fj99fjzufZ1dn39/9jXevv42fvb+fna11jVVFVWW9d//d37/fv3ffX39XOU/dTd2d3a/dn/+/j59fV48/P1XdvX+dZ92//a2Pv\n/3dVU0xTSFNf72fj7+NbY+fv3e/j3+9fW2Pnb3fZ5+/f2dnf09Hbzsrj9+ddU/93b2djY1H3X1tfX1Vbb29f7+Nja13ja+vb59nZa29na19d/3dj6/fjzNvv3c3N0dnb62Nr92dZXV1rb2dTXU9XT01dX/ff4+djY+tn99/X32//Vef/9//X5+fV3dff5+fd\n1efj69frVWvb629v92dVTV1fV0pOa3drb/d3Y13j///349v/XW9v62dr0Wtr7+vr3+Pf39PV793v73fr//fr/2f/52Nr91tdUVNnZ2tva91fZ2f/7+Pva1tfW/drY3fr59v/79fn3+f309vra/fvVV3rd+t33f9bZ9/ra29n39vn1+Pd/3ff99vb4+djW19j\n/11rb1lfa3fja11jY+/jb+fn/3dra1//Y2//Z1vn7/dn/+/n6+fn2dvr42tv99/f59trb/fvb2tn72/v7+N3593//+Pv72tjWVVd/1tdY1Vd9+NfY2Nv6+ff3c/d69/Z7+/Z/2tnX//v52935+9j92/n73fv7+/3W/f3Z13r4//n//9vWV1v/1lVWfdv9+fb\n5+fj29//3+/j//f/7+v39/9j9+v/3+v/72/vb+Pj2f9rXVVrY1Vn71dXd+//W2Nn7/ff29/v793Z39vb6+/3V2//d11r6+fr79nf5+drW3dnY93vX19da2Nnb3dnX/ffb2tdXedv6+Pb193f52v3///nd2Pv6+/vZ/9j7+t3393j62/vZ+tv6193b29r/2dd\na1Vb/+//a+//a+/b2ePn/+ff793f72drZ2dnW11nb3djZ+fv6/dr793v9+/3Z1trb3f/d3dna2/j919fa+9v3dnn3e/j4//f39Vnb2f/d2tvd2tnX+/r/2vvZ2//X/fj92vrd//3a11ra1tv5+//Xet3Y93d3+dv6/f/7+vf6+/3/+vnd3dn5/9vd3fn7+Nj\na2/3b+v/719372tnY2NXZ+Pn/+f3Z29j//f3Z3fr6//v93dna2//5+/v7+fv9+vb3evvd+/v9/fv63dr5+P392djW1lfd+frd+dbW2/33/dn73dj/3frXWddX11n73fb3dnn63f33eP39+/b3+PV7///319ja19jZ+vX93djXWP37//vY2///2NjY1tnY2N3\nd2f//+///+Pb4+frZ2//7/fn///r2dvd3ffrZ2/r//dvd+tbXWtv33f/7//3629rW11nWWtda11r39fn6+Pj4+P/Z2/33+Prd+vn7+/3/29jb+fn69/n72/vd+t3b+P3/29fb19jX2NZX2dnb///d+vv4+v3b2/34+/j93d37/f/Z2vn9/fn5+f/59//X2d3\n72/v6+fr5+d3b2NvY19dX1tdd3fn4//n5/f3a+/n2+//5/93/19na2dn9+N37+Prb/f39+fr92/f4+f/b2Nja2dva+f/3+f3a2/v4///d//r99/jY1336+N3b2drXf/3/193b3fnX2f3b2t3/+//7+Prd+/363fn9/93/+/v///va//n52v/23dj7+/vd2vv\n9/dj6/93a+frb2d39/9vZ+/j3ed3Z2drZ2t3d+936/939+Pj2+PvZ19fY/drZ3fr49/va2tv7+fda2/3b+/ra2drY2d359n35+vva3dd99/n4+Pn///rd2/3///n42tf/1Vjd///a19jZ2N36+/3/+djY1t3/2NjX3fn5+/n7/f33+/v293b3+P/3+vj2ePf\n3ev3d/9XT1tVb29fd2dbY/9rd29nb29na3dvXWv39+9d7+v//+vr49nX2ePr9+/n6+vr4+/v5+/r92t319vrd2dvXVlrb/9n//fra2NrY19fY3dvY19rW11vZ+/v69/d3+fn6/fr3+PZ39/f5/dna+f/6+9n529ra+fvd2t3/29va29nXWNn929fb2trZ2tn\nZ/fv5+vn5+vv3d1vb3fv//f/b2/v393f4+Prb2/va/93b3d3b3fvd3f3b293a2tjW1lnZ3d3/+937+9v7+fr7+fn529vd2tn9+936+//9/9r/+vr593d6/9373djd/fv73drd2drb2djZ2vr92Nva3fv6+fr6/f/7/dvZ2tr9//r9+Prd+/n72f/5+P/7+fj\n7+/n6+vr/29jZ2tfa3dvZ/f/b/93//9n/+/nb29jb3f/9/fv9//j729j92//d+fb3+vj3+v3d/fr33dv////b//vb2v39/dvX2fvZ2trb29v//93a3f/6+Pvb/9va/93a/9379/36+ff6/fd5+/39/9vb2tdY2//d293/2dr7/fv5+t3b2tfd2//7+/r93fr\n93d39293b//v//fr5/f3593f7+v/Z2drZ2tv//9v//9vZ2v/b+/v//dvb///d+///+/v//9nb/f3d2/v7+9r9+/v5+ff3+/v6/dna29v/+vv/3drX1lja19n5+Pn4/drZ2dv7/f/b/9vZ2t3d2Nvd//r93dv7+939+/v9+v/d3f//+vf4+fn3ef36+Pr9+fr\n/29fX3drb+/r7/93/2Nna3d3Y19ja2dfd/f//+/3629vb2tra/f/79/f6/fv92dv4/fn4+/nb29rY93b2+//Z2NfX2Nnd+9va/93a2fv69/3/3drY29va2drb3fr4+/v4+/v4+vr49nf4+tjZ29rb3f//+vr6+/r5/f3d2NrZ1tZWV1jY3dd/2tZb2/b5+PT\n2dfVb9v/b2dnW1dZWV9ZVWdrX+ff09vR2c7T2dfOzs/Z23djWdn/Y11NVVVNR0ZFQEBF3b7G2fdrV1dZa3fX19PMzdvN0dnTzcrNzNPb52t3a//n//9vWVVXV01IRklLRT1DXf9JR05VZ2///93TztXFxMjDxcHHycrX3efj9+/3///j69lj2c3n2XdnZ09T\nUXdHZ05CUUxLTkdITVNTzbi/yf/n91tPW1ldS0I4Qrvr12tXSVdJTFXv92P/083GvsfBvrqysrW2vcHIvl3dZ1VMS0M/STw7PEFIRkRZwNtASVU/Q0FNSk9FT0JDSUpIZ1Nb32fdb2Nna1/HxsG9sbSyramrrqappKuqsbu2tsu8uG9POy4tJCcpJW8tKiEj\nJyAoKy81NzZEr7/H29lfPkxLPUJBNzdCQ0pnwLu9r6mrqqempaipoqSoqKuprKirqrS4w+dXPjUlTLlGKCgpISEnKygnJyUtLSctQT4zTuNNV07/2W9T38rKsrSsra2ssKytq6q2scjPyuPvxb/Kw8XZwdHNXzGsujxVOTkqLyssMSkkxd88Kzs9JS8+Q0lP\nTT9PX0Lrx7+7rayrp6yvrKKqrrevsMpf311d329Ob+9rTT0xK6fbPUJjQywzMDg9TlFAS3dN9/9COUVLTTo3OTw2MjU6Rf9vvaits6uqqKmxrq6528f/xudrb2vG729NPD0sJ6jLNUk8Rj1MRFFEOKO1yUlZP0JVPllvRTJMQzgvOkJGS9vIvbyzrKaqr6+y\nwr5PyFtZS0ZOSuNNS009bzkrn7JbytdNTdU/Sc5HTk5TSWNZPD9APz9LNDc5Ni4yMTxDW8y+wL6srKqlq7K0sve2vetXY1XD087Z2UZrXyyiv79NQfc4SWdNL6TB/2NTPTI2NjZHPjk7Nj45PDQ5RUVfzcXHvruvo6+ssbuw78/JZ2PIyMDG2dtdTFlfXTKf\nrc277+M8R0z/PjkxNT0vLjIyMi46NjMxODU8Nj5DVffLu7a3rqmmo6qssrm3u8bJ71m8zsHZ70s/V1NrKq6uz99vWS9MOSaqSDwvZywoMzsxMzc3PS84REVAQ//Jx765ubGmqaqop7K7uKvbwb7f78PJz8pVW1tLRkMrb63XPkk0NjdFNjY+LTM+LzY6PzY+\nQU4/PkVNVVvv18/Lt8C9saurrKiqr8Svr8LPy+v/x93V605PQ0dHTz0vq9s3P1MvPT0kql9ZM004LD86REdDRl1bTWv/01+9wcC7v7qzr7Cvr6e2t769t9/FxtPLyd9RTEE+Pzs5NDCsYzRdNygvOTc2NzE3SP9CU0tP91vr1edP2dHPY7/EwbzKubu0sLCu\nr66/vcDOS11R99tv/1dHQD9GOD4zJabOTEI7My86Kay2Tj87QkNVW1NXXVfr0WPTy8jAube7uK61uri0t7m5vd9nv05JSVFETktTQT9BNjg2OTwkp77nQzo9N1NPT0Q+PldZymfZ1cbT48bE5+vOyMa/yMq4yb/Jx77K0bK6yV3/V0dETU5XTEk8Pz04Qjk4\nNSOnsv87Sz8+QjkwpsHZzMTGd8DPy8Pf27zP99vD193Ay7m8ycvIwMLVyNvjRVc7SzpPPDw+Pjo8Njo2MDo7J7euyU/n70/ny87Ld2vG27zJxsLF2+PfzVlNU/drZ2/T389ra9fdWb29xttnd1U4vlP3PkZVREhNRTw+PEEta6y7S05nV29HTqm/ytHNW+/D\n68zN/13Lym9rzstVzMxr529Ma2f3U01ZZ0NES0BI2U1ZUVtrTVVNUU33/09XrLDL0/fv/2Nd6+93W9tMUcTP293ra1HfT1tX611nvmfZ929r3+PGzcnVb2NCPz/TSVFHTm9V/0lIWV1nT9W2tbvH08/ZX0qqtLvT39c/vT2/SGdRVV9PTFVRTkvOT1VXTkdT\nW19KZ2NdUUrnVUxvxU1nd+vvb2/v/+tPyLquuLzN39vO2+f/11tT509HSlfbTEhPSEZATUJXTc5nUU9RU113b+Pjzd93b+NjVcl3/9XZ/+PrV99b/89TZ8W2u8PXz1XfsbW7ztlOQkTGSltHPkVJUT9LRUb/SFlZUVVvUWNMX1XK0ePj09fvusHEzsrf19fX\n2dnZxdXby8/I411jT0xTUV1XZ05NRudJW01fW1NdT1FPZ+v3b9/rVWv/b3fb99HXZ+vjb3fE48ndztPR0+Pv683f1+vMzMbM2fdZU+tZWVtfTktHa0pRPkNHV1lLRUtnUWdnd2//3e/Vd/fVzcPGxcXD0by8yc/d1dXf619r1+dva9nXa2djWVFRW05HT01I\nRT1VZ01OU05PTU1TW2Nd43fv4+PZ7//R19fRzMjByMrXw7zJyM7P2dHVztHV39nb39/3X05CRkBKUUdLS0REQUxvSUNGT1dXZ1VVX19vb/fX1dvT49fTz8nFxcnCx8vDusXM38/d3dHX72fra3dd619XSEpHS0RJRkhMT1FTT1VVRFVNVUtvW1Vn6+ff987f\n1dfXysjExMTHy8XFzs7O0cjV7/d3919ZX1VPXV1bX11LUURNSVNRR0xKWWNXa2drXV9ra9F379nV19fN3dfZ09n3z9nRxsbK0dXR1dPV23djY11jY1tRWVdPTk9ZVUhOSV9LTllba/9312/v4//r/2vv79/369/j493d2+fj4+ffz9vb1c/R2dnd1+Pd5/dX\nY1dbX01OW1ddUV1ZTFVOY19b/1tjW2f/7//363dr7+Pd49/f2dnT093V0d/b6+/f6+PZ3+fn6+vn93fvXVVZY2NdW1VfWW9bZ2dRTk5jW0trb3dv793nW2/f3+93693f39fN09HZ1dXX3dfr593d99vdb+P/d/9vb+ddVU9ZTkxLSFlRT1lbd19nZ2tjd+Pr\n/93d49/r19Hb2//v39vv/+/n2efX4933Z///687n0+trb/dfa19jY1lRV1VnWV9XX2Nna2tj/1VdXev39+/j29fP2ePn39vd6/9v3//f6+/f49/n2fdrb2Nf72trd2dfZ1tnZ11nb2dZV19XZ13362tj72vr///v63fd39fX39vd1dXd19fd693Zb2P/9//3\nb13/XU1TVVNZY2t3b2N3d3drb/fvb2Nn//f3Z2/36+/j9+v3X+/Za//vz9/b49/v9+vd3+tja//jb/fv5+tv9+Nva2djXWNfY2NnVVtdV1VbWV9fX2Nj7+Pv993f39XX09v/d9/d3c7R4+vZ5+vj5+vr//dr93d3/2f//+tj/1tTT09ZV11bW1lXV2NnW29n\n63fr59/Z69vj5+fb3evd3+/n2dv349fj39/d5+/f5+vfd1t3/2dnY2drZ2NVXVlPVVVXV19nd2Nda11bd2N3b+9v6+fb29vf39fd0c7O0d/Ly9nPztXr3/dvd3djX19ZT1NbWVdVWWdfW1FbT1NPU11rd+/v6//r3+9359/n99vj0dnZ09vd2dfb3efj7+Pr\nZ2ff62tv/2tnZ3drZ11VV29jY2ddY19fb/9nX19bWVlra3f/7//v5+/b3dnT1c7Tz8/P09vr59/n9/dj9+9j929vY2Nna11ZVVVfX1Vba2NbZ2f3b29jWWdfd3f/6+vr49/d99vb59ff293f3d/n49PR5/fr7+vr9///d11ZV2ddd+93W1tv/1trXVdj/3f3\nd/d37/9352Njb19rX//r4+tv7/d35+fj3ePb2dXb09fvY//v59/v//93b19rZ11dZ3djZ2NfZ/93V2Nrb2v/63f/d2fv/3fr9+Pf6//j39/n3efr5+9372/369/d5/9fb29jb3djd293a3fr9//n7+9r93dnb2NRW19rW2//d/fr/+tva+P/9//r5+vn3dvj\n4+Pn5+vn6+vr9/fv/2Nbb193b2djb293b2dvZ3d363df72//42tv/9//39/3//9vd/f3/+/35+fv5//r5+vn5/93a29vZ/fv7+9rZ11ra2drb2Nna2djb+/r9+vf9+fn9///Z1t36+/r6+Pn7/9va2tvd/dvd+vr7+/n7+Pj/+vr9+/////v92djXV1na3f/\nY2vn7+9nd+939/f/a+v3d+9vX2vv5+/f6+Pv63f3b29vb/d3///373dva/9na29r93f36+Pv79/3b/939/f/9933d3fn629v6+93d/dra19bWWf//+tv7/fvd/d3////d+//9+vj9//3/3fv7/93/2/v3/9vd2dfY29vd2dv6+Pn7//j9//n5+vn6/fj33dn\nb2/r73d3Z2ddZ2NdY2//5+v///f//293b293b3fv/+/r9/fj/29392/v/2//7/f/9+/v9+/d3efv9//3/2drb/fn9+/f63dv929ra2//b29vb2tjX2tdW2dvZ293d+frZ3drY/fn7/f37+fb4+v35+vj7+Pj5+vn39/vd3fv/+/3/2trX2NjWVljZ3dva2tv\n/29r9/dna3drb3f34+vr5/9nd/93//f//+/v59/n4+vv39vj5+fj9/9va3d3//9vd2tfb3dra/93d3dvd///Z13//2tnb2tja2//72dnb2/v9+/39+/n39/n4+fn5/f35+//7+vj6+/v6+/v73d3b2Nvb2dZW1tdXV1v79/b393j6//v/2tnd//vd11dX1td\nZ3fn6+ff3dnb2ePn/2/3d19dX2dnX2935+Pf2dfZ4+vf4/9jX1tXU1dfa2trd/f3b+fd39XX2dHb7/dnX05XV1dfZ/f3///j39/r3ePr911ZT05OUVdn693Tzs/RzcLFzM/T2XdbSktIQ0dIS1Vf/+Pf59/Vy9Pf3XdfUU9VUU9Vd+fr1czMycjLycHEzd3/\nZ01DQ0NFR0tOT11r69/f4+Pd29v35+v/XV1r93fv3dnRzdPTz83V2+P/Y1lOTEpLTk5RV1tbb3fn29HRzc/b1dn3Z19OU1lb7+/3493Z09HRycvP3/d3W0VAQUJHT09fY2tr493ZzsfJz9ff7+9XTk1VX1/r7+ff3czPyMfHys/rX0xFRD4+QE5bZ2dv49PL\nx8S/wsjP71dKQElFQ0tba+vb0c/JxcrMxs3dd19MPzw7RUlOV2vf49vMw7+/vb/GzN1rT0E+QU5JTFFbb+//39HPz9fX2+9fb11MTlNZ39/b2dnM08nDx8zZ52tdSUU/Oz5BRGddXf/v29fRzsXO29Xd519bW1VXW2vdys3bzsjCytXX71dbWUlNRD9JRkhK\nW+P3b93Nx8zNzs/f2+/r/19LT09rb+vFz8rGy9vN7/9ZU0hPS09OQT9BSUxX28zNyc7Vz93MysTHzu9dTENGTEtNZ+fr17i91dff51vvZ09RSUI9PENXb93PwsLIy9XVz87j4+9rW09dT0dJa1VO/7vR3d3vb1VRUWtvT01IRD9BWe/Rz8W9vcS+wr+/2dXO\n1+v/419FR1F3TevFw7tPY1lXTkhTT0tIPzw+PkNT79vnysDRa1NVa1VO3fd3991jWWdd1+fvvqywu83F087Rzc7j4/9TS0ZIT/dr3WNnv6+6yOfvTFdvY3fdRTs9Pm9DQ0PGqrJXO0M9Ozo8PUA4NjM1NztPd2/fz+N3TUZLV9/ZyMLCuMDR48W/v8q0qKOs\nvtvjv8q/tbm+xsz3TUlfd3dCMkapsMxOPjk8QUZOWfdXNi8vPEU2Ok63uFk5MUg5NUtOSUg/PTk5Pmvb62fj2ed3T1Vnzcy7t7OusL/VY73F5+esoafTz1nP3czAub3J1dtLP0NLd1c4O6axwF9CNDZEQk1r0e89NjE7QTUzOK21xWc2PD8+R+fj91FPPDw8\nStXM2dnZ3+9j/1dZz9fVv7u2zVlK39NnQ8ChrbhVb0zj09vGu7jN0WM/PkBVy9HrP8antddTSTo7VVXfy1sxOTA9ODcvq8m+sUo/PlVFTdlvW1dRQD5IQvfI1//Mzutv42NnyMXNx7G0xd1vStFnO6Otvr5IUVXHXW/Cutvbb084Oj1G529FMqOtx0I+QzJd\nZ0zMvzlBOTk4RjHGrcS9ukc7QFVCb2tTSmtLOj5APs/V2c3G391n4+POvLq8rKu0vM/jW8BV75+vvstjTENjSevF2UpKQz8xMzU8Sz88Pi6jvkY6RUw9PVe8zko5QT9NVS+hrr/HrVs7Z0pr0/dNV0pZSExKSMHG08y9z9NvXczj18Tnr63ZzufjRGsyzKrG\n38tdOkVjRlvB41FRPTo9NTg/Yz5OWT66rXdP62syOte70WM+Rkg+d02ir+evtclP90tF2eNn31VTWd1BU8zIXb/Z0dVvRtvX61dduLPR40fZOz84zKx363dIOTxCOktH4/dnPzg8PDo9/0lj1Ui+pbxfzs1jO8Wuts1KTsxR3Uihrr6rtcvOa0RC2U1H22NM\nTVFNW9fP78tv2VlRPkxdV0JTxLrNdz9TQzwsvq3n21NKPT4+OWc+OV3EXT5KPUpR21vvyGs5t6i/y87FOsSyxb5fXULHXTGisrmpzd3I31tC1UxCVWc6SUQ7X+Nfb8nN//9XPkpVSUpLvtfI1UtGPUEsvqzO0VdLNkNIPk5OOUlP3dtZRUFba1n3yff/RZ+6\nwnfZTFO6xb/H6z+5VTWlrqmu08fJvU5N59tI/19bT0VITWdVa9FrW19NPkE+RT1XyWPrX0w+PUIotqzD50ZZOUI3O11vO0r/705TY9XRze/Lyc/dOJ+uwFX/zc/DycXZ513KYzKjo6zfwt9VwEZOUW8+U13vOE9LSu//Y8vX21NRSj5BQEXNxW9310dERUUl\nQKy9U0d3NkA4M0FORz5Z91U5QO/Tys7Tws3ZOJ+oumPbv7/Nv8HIyVHVRT2fpLjruudXwVdGS1NDQWNrNTk6XU1r/8vR3VVrVzg9PEfO01t33f9ERUYoya69a0ZjP1U6N0lPRD7Vz2dPREnLzr3Hus33N6apulvvu87/193F11VLPMmfsr13y19r42tLbz47\nQO8/Qz09R1NZV3fX40H/TkE+Ql3R213j3cxdZz0rq7G702P/QeM/SFVdR013zV/dSlPnY9HIvsn3QFOjv81Tx9NHU1nA0V83NVufwL7Pyf9d6+d3TzpEWU4/WT1R/1tV383j42PJ/0hFT1vGz/fv38/d/zQprqnAa1f/U28+S1FNR1tRa033S1ffU0rFusnZ\nSUyft8Jnwb5ISL/bd/8vUT2osr1f103OXd/bRjlPV0hRRTpLX1tPU7zZ0+PM3VlFUc2933fny8vdWTUrqre1W1VbR2NAPEtIS1FMTVFRRUxdUUnjur1v7zpfo7vZxr9AW+9NR1vPL2OqucVvy0/Rd9HX6z9nWVVRTkFC71NTXcnGytXD0/dT27nL2eNn2Xdr\nRi86q8LDd29HTmtESU1BP0c9PUY+SFVrTktnzb7v3ec4obe+12PTRVNFT7BCJrWru8/Fz1W/ztXB70FR3U1Ob1FE41NVX9/KwsLB09l3zsHbd2/V90jvQi0sqc3b5+dAWd9XXUFPPk8/Pz89R0NdT1lZWce/2f8toa+4Rc5ZN0hNuucwJ6mqwcPrw/+9ze+8\n7z9J11dPY09B111r79nEwLfEys/MvcfvZ+vHQEzbPC42p8vnzt87RXdOWUM/O1E/PDg7OkJNSlFZSMC7x0wroqK7d2PrN1m7RU41LLSsvM3bym/H09vD2WdG2VVLV1FP11/Vzc7PvbbB2869vN/n291jQlnbTixXqblb2V9LS2tdW0I/PlM9ODg5O09OSlFX\nRL68zj4quKG1RkzrOL87RV8vJqqtxcnP2ffP292+yFdf21VJQ2NVZ1vXx8jBuLi8ysm0um/B2etfTktjSinKpbtv4+tBX+dTT047Pko7MzU2N1s/Qk1nW9e450kzd5/F50b3x10xR0o4Jaitv8PP23e/29W8v2tj/1c/SE1fa+fZy8q+t7e/w72xvdvN291T\nS0rrRCixp7/b59lHV+dEa0k2PUs6Li4zOkk8RU1ZVeu920M51Z+33UTFsS48XUM1Kqevv7nP2ePNzsjJvt9ZX01FPD5jVU3TysnDvLfEzbmyvU93yv9KSk5XPif3qr3X79trU093z04+QU48NDA1PD49QWfN2f/PvUw8z5+400O3xi49O0QsL62zvr3XW8/v\ny8K/vtfnV0NJOjxfW0LZxLu5v7W8yriwwV/ny1dASUNLNSq8sMV3zedO30zvzuM/QkVJMTM5PkQ/S//Ly87Zz9Hf95+vyVe/Uy86OzwoS6230b69TWvjXc7Bze9nPkM9M0VZU0jVyL+7ube8trSzwOvN119PSz5FNyqrs73nxN1Pa+/XztFAQENAMjQ6P0Y+\nS9vLytHX5923PrCpxNnHRy05OS8nL6zG18W7T+dn0cbHx+P3O0A0O0BrUVPjxsa7vbe7uK/Mw9fVb09TR0A/Mi6ossHvu81Ha+PK2dlPP0E7Ojg5Q0lDTM/EzsvVX8euO66qwbY7QjE9Ni0p3bTf58K6SGdVxsRjyMjnNjM6PUBvRFfbxr/Bt7fCr7PCy7/P\nWUlCQFE3MTqqtd/IudNT/+vD11VvSz42OzQ8Rk9AW9fHxcvHV8u5TLahs688MDU0NC0p37RdTse1SlFZyb/vXbpvPS89PD1TRUPnwb7AvLu8rbe+ysrHWUI/QUs5Mmuls1+9vM/r482/xVdB3UMyMTk7Qk1GTtvOxsvJd7zNRz2fuatFLzMxMisrsblPTL66\n71trx8vOWcPIRiw7OkQ+TUJvu8C+wLm3rrnKusrvb047PUQ9LTqjtmfZtd/v/8u/2c9RX0Y2Lz86RkZJTWvRzsvJU7HfYzWlr6tIMjkuLywrrrNdRM6350xn69lr79F3RSstPUBDTkJXu7vGurqyqre8v7XR/0pHP0lFMz6jtM7Rtc7Z68LDy1vbT0kwLzo6\nP0dCRHfvX9PTZ7fbTzWrpaZDMDYxLSsqvrFrR/+0zFlX1cpjTb7nUzAuPkJLSUh3vLrFubq1rrW8w7/GT01IOz8/LeensN3dvMvR99m+yU1r3UEzMjs9QUtESs3Zb9/F0bfR/1UxoZ9bNzU4KioqrrZdQFHCw+tM0cjfSdPHQTYuPT1HREvfxr7BvryvtLG5\nwMnV3UhEOzo7L6qrutfvxP/LY2vAzFNn90UwNjk7P0lCWc/rZ9/Rv7PJz28vtJ/MRzc5KSc2rb53S1fOvNFXz8nRXdfO/zszPEhGQk1v08TCwL6vt7m1wsrZWUg/OzM0LrixvuP/zt/ZY//Cyktdb0IyNz09SEpGb9Hj/8zXyrHFxMk/Tp+u2zw5LyI+rd1f\nUVN3xs1Vzc3RY/dVXzw6NzpGO0d348bJv7+ttLa3wc3vW0s+PzQtNq2xznfR98nn/8/Bymv/Wz02Nz49OktL/9/v3cbVybPCxc9IPp+uxj84MCDCt99bTV1Iw8z30c7n9+tKWUdCOjdLPkXv38/Bu7qstrK1v8n/Vz8+PDAlPqvA993ZUb//X8/Iz03vTzs5\nOz4/OUhKd9ff0cPNuri7vstZa+Oou1U3NCOyt2tbT/9HyNPT29ddd29LSExIOjo/PUbd9+u/vryturK1v83/V0I6Oi8mvq/nd9vdUch3Z8vK3U7dVz08Nz9FPj3n2d/b08nbs7y6vdHXvz2nvk89Lz28w0lRWVlP69fJ69NZa1dEPl09PEE/OGvb2+e9v7+r\ntbO1vsx3XVc8OjMqrrjRV9dbTsvr79vZ60pbRjs5MzlAQDpFz2/v79Hfs7a9v9nbuy+ksWs1L0q51V9N91n3682+2etb/1dHP2NIPjw9N07r12PEx7+usri3vclvX1E5Ni0rrbXn59fbUcnZ3c/X52f3RkM7OzY8OztCze/f1+vVuLa7x93Fvyuyrd0uK8G+\nVUROZ1NRX9G+31db905BPUxbRTs6REl3zf/Oz7qvrrS0ub3vV2NDOyw9r7j//9HZXd3Vzs3b5/f3RERDODw4OjdN/2vv3V9jubW3vOPIvC7Lqdk/Ka7MT0RIa1lTTcu9xmNv71NDPkNVVzc3O1dZ1d/V2bi0rrK3t73XV2NINi13uMnvV+/v4+PVw8vXb+Nr\nR0lIPkQ+OjhK/+fZ391vuba0uXfEuD0rpMc+K63OPEpBXUt3PtHEyFNTY0lEPT5ZXTcyOEzj48nfzbu1rq+4trrKW29TNC7ZvWNb9+933d/nvc/Z7+P/RUxETEQ9PDU7Z9HjyuPfvLq0umPLrkMnq6s6OK6+MEdTQFtfQVfFxVlNd0pGRDxnU1E1Okf319XT\n07i8rq63ubfEVWNLMCmywUFE19tTxl/XvMd3d+PXS0pJVUk6PTs+TdXLzczrtrywuf9rrkouKadFzbfONDVKPkpPPVvX2d9OVz9DPj9Mb0Y/OkhP0cnI1bm4r6qxuLK6z2tXOje2wj9FY29V2VnbxMROW2NnRUBDTkc4Nz09RVPXy8/nubyuvcvRr0tFLsy7\nrrrfSDg+P1lTRM5f3+93W0VFRURJW0M9OUZRW87I08C+uK21vbe+z29fNPfBzTtCW09n09/MxMtjWff3TkFHX0Y2MjtESkhn09HZwcCzts7Is3dHOC+qpsZXV0g2Pl9Ta8xRXc3Pa1FVSFdTTUw9P05dV2PDwcLGt6+0vL3Lz2s/M7ndRDtBSUJHX9Xjz///\nXWvvV0tJ/0s6NDlRWU7v38u/vb+2ssXGre9VPymmp85IXVMwO0lNztNfTtPZb01LS1NTQFlEPU9jXVnjvbrGtrGutsLHyuM0y8lZOjlAR05KQde/21vfV19rV05VZ103NjhFXVv3zv+/t8G5tb7Lr/dnRCmuo8hPTmc1OEg8yr5rPtXO1UpMRFVMPD5FPUBO\nT0/b29O9ubmzssfRxdc1sbtGOzs/R2dVT2O9zXfXZ+PTXVtVZ1c3NTlEU1fdyNHrsrK+urzXs9tPPj+/pcJfSVVCNz1MTOvdP1/vzE9DQltLRjpMRT5NWf/fx9fBtby0sc3Xx2NKr8U8OkU+R2NnXdnT48HnUWfXX1lRa0s9NDhDVWfrw8nbv766uLr3tc1K\nObtCpMDrSElbN0VZV1df20Jf0fc/QklJPTlPRj9DXefjzcHfxbC2tsbXyEdMrN07NEk/RVtd99vM52/EV+vfXW9rVV1CPT5Ka1fLv8TZuMnEr713ssE+P7REu7XnV0RNMkJVSlFLPVFn3V0/R0lEQDr/S09A39PRzrnMyrmuucbZ00e1tlc8OUBEQkxX1d/L\n2WPPy+9bVXdfSkpGQT9D61HGyL/dtM3XvrNXwsc4yaw9b67DVVNHNkZVSF33PD3P210/TElKQD5ZY1NGb9HTy77Dy768r8z360+oxUE+O0JISz7j1f/rzV1Pd8dPUWNvTEs/RT1DVWvXx87RvMHZyb7Gy80zra89K6i2409BPUxOTkfXTDdGwONDRk5XRT9V\n63dT3d/L073Eyr6/t7v/TMWqz0c+QDxHSTxdzF1j091NWdXfV0tVQUg+RD1HV3fZ48fGy77LzM7R57k3tLZAJ++syu9JQD9fU0bbZ0I/3czVP05LW0dL49dv59Hvx7vCzL+/vr3ETb2rvkZBPTxATDhFb99V/9dLY2NjWWtdQ0lNSURFV+vd3dG81bvE08zI\nWbv3sLtEOiuovr9GR0w/U01ja1NBV+/JRElFTEpEa93n2dvn777C08bBwLrTSrKowkdGQTo+SjtHd1dr5+dOW99jU1tOU0dNTUJLVXfV38rFw8S+09HA7//MsLz3Pyqssb5NR1lAPmdPX1lFTl3RTT5PRE5IS87f29vf58u+zNPAwb3JR7euv1NISzZBSD5L\nXUlO22dRY9lrXU9KRlNJR0hKU1vn283Aw8W779HDyUCrssnbSS09q7pbSWNCPuNdTGdOR13VVzpLSUxCT9Pn3evZ6+PFvXfXwMPRT6q75/dJQTg8P0JRXUVf1W93W9fn609KSUxMT0dXTVl3683Ixs7A2dfIzUGuodNTZzMuqrfPZ2dIP11vT99vS/fP50NK\nQUpMSe/N32vn22/Xv9FvyMrXWam7W05bQzY5OkJJSkBrd2df7+fX11U/V09IZ19nTufZ0c2+vsPFxMrLz0GqoMdHT0syqrvFWVU4Nk9XSFdvPnfj40BZTD1TVVnTznf/3ePNy8tnxsb/b6e90VdKUTo7NUZIRjlZ41Fb91vj3VNERm9FP+vvU03X18jBvLvT\nu8HFz0PDorVTV0guqa2+119MM1lrR013PkNrY0Y/Wz48T1//5+9f3V/d0c5rzchP96ax59tTQ0JAOztVTEBJ0+9M3/ff2+tKTlP/SkzJW1Nf187Hx77V477Pbz/AqLFOY0ko2am9d+9GOEhnTUjvV0Fnb2NKSlNFSPfXyd//29//zsdd3cdVW6etz+/bSDpG\nTjlETT1K4/9jWd3d32NHVUxVU09XX2tZ/9vLxcDG68LM7z69rqvHRU8yQaq3yVk8OjtVS1lIX0pXX2trSE1RU03du9dv98vf1cvH38NfR6atwtN3V0M+PE5FRTpK72djZ1vT03dLXW9OSWNnUUfdWf/nxcbK98LDbzy3rr6xSzs5Na27tVM6Nz5MSllPTFNN\nX13dUU1N12dV1bjnVd3F187FxdHPS6arssPbT1lMPTzvQjs92/93UVlr42dLSFtLSE/jV0ZF519nd8fR2e/CXznnrb7Dvz0yNqy3yds5MjlRTl9RT01LWVnbY1lf59VZzs/H32/LzdfCxdHj96ats7/LRUlrQj9BSEE6Vef3Y1dv9+NjVV1KU1NdX01LQ3fV\nV9vX39f/YzO9r8/buEItNq61x0Y9OjlMVW9nVVlXZ9nTb1/R593rwsXV783Vz92/vs9TvqiuuL7dT0hKR0dANzxHRmtnb1tfd/9Pa1NRU3dXUWtfSUpfzWPX3cfrZzqysc/rvVkvLa6yxE02NEFETl1rV0pNSmPPWWPn3WdbvcHbX9/L3+fBxMZNraiztrzK\nXVFGQVdBNDY9VVNTU1tVZ1VHX1VKTfddTFvjTUtr39vTz8rrW+ett8fRt3c1NquxtU44MzhLVVt3VUdMR2PZXVt361VP18T/V1Nj9+vVz91Xr6y9u7bMXUpGR09JOTk8S2fdV+9r72dVV2djb+f/W2/341Xnb13jxc/jSL+vudvjuMU0NauzwFM4NzQ+TG9v\nUUNKR13v62fj91NjzdHR51tX79vK1W9dq63CyrjCb19EU04/OzlBQ1Xv9/93b1tdWVtX1d93a9nfXWPr/1X/1c7vRLKwu+djy783PquyxkQ6ODU5RUx3TD5AR1n/d1nV/1tnzNv/92NZW/fO1/fjqa+5ybe+0+tHX2tGPD5JRVfv61fNX2Nfd/9R69Fr7+vZ\nWU9n/05d78xJS7i2x+9Z9749Q6+zyj84Nzc1PUPnQkY6TVd37//T2W/nysn3Z2NrXePVy0OurLS/wLfBzeNG//9COz1ESkzvZ+dn51f3Z+tZ3dPr4+PT/2dTY1lV6/9Vd6q+1edrU75FN6+03Uc7NTQ3O0ZOTjg9RlFf/+vb4+Pf1cb/Z1FR7+/XXU6srLfD\nwre6xN9Vd29DP0Y/Q1n/413ZZ1nv9+9f29/r0dXT51tdVVdZ42c7/63F3+trS8TZW6633UM7NTE0O05PQzg5Pedf//fN59XVzsjvX1lMY9XHVU2pq8S8xLq5vl9V71tAQkJAPUT/0XdjTV9b02vv29f3ys/M1WddVVdO22c9vrHBWdX3R13K0a2150JCPTI2\nO0hjRTU1RFHbY+PO2d/Nys5vZ1NIX2fXSuOtsMbOyby7v9VT30xFQ0VDO0NX09lnR1H/4+/309Hb08nF0Xf3WVFTX2dEs7vE///Xa1HMs624Z0RBPzY0PkVZSzU1QWdrXc7T09fOwc7rY1FLVf9vP/etuM/VxMO6v99rY0tFRUFBPD1X791dSk5R7/fnytvX\nytO/zev/W1lXW1FRr7bN/2PfTl/Hqa3AWUdDQjk3OkpPQDU7QGNn793H187Lycn/X05NX/dnQr+yv8rfysPAvO/ZX0pFSkI+PkFT499NSFdX/1v/38Xby8rGxdt3W2PvVUjEscLNZ1tPWUCxpa/NRUtFQzs4QU1OQTE6SFldWdPVytPLxdf3X05Td99OVbO9\nzsXdyMfByc3Pb0lCV0tDP0pX3+NIQ07vX19n487L1cfJy9t3U13/SkayuP/f51NLTTvFpLHjSkhLRT87R1VNPzM5Q/9nd+vXyMjJw9n/71td9+9X67LD3cvOzsbH2c7E70RCTElDP0JZ4/9NQEtr/2f/59fXyMbKzs/rY2dvSlG3uF3j32dHTTvIo6/PRkVE\nPkY9R1VLPTU3Q1fvb/fX1cu9yd1360//52tPvLS+/9HPzMHH19/VxkZIR00/SkVZ9+NOP0hbW/fn59nd47vL0dXnY91nQVOxvU5T3U9NTzm+pLDBRkVAQj5LRU1HPDY3RE9n6+PXzs7Iu+fr62NvzWtVr7bIW8/V2b/I293bb2dNRUZGQkxXW11LREFOTWPX\n09XZ18fGzszX92frS821y29R0UlLTjrBpa7bd0Y9QUFDTk9AODY6P1FTa9vVz8zDzdvLd2v/12/fsLjZd9vR3b/BzNPX/2tOU0RKR0rvY09LREdGT05v1dXf2crj077vd29dRbm80VdV3VdMRT27qq3RW0pPP0ZHV1lBOTY9QklZb+PVzMjCyev30V/v50zb\nrr9fW+vT2crNytHd/+tXRWdHT1f/WVNLS0tGV1330c3Mys/V2dfFZ/9KUbTAZ0tZX11NPjpfra3Ra0w7U0NFVU8/OzU8P0dd/93Xz7+9zNndd9nb50jEsLtZV9vTz8fL083Md+9vTUFVWVdrU0hXTEhDSWP/1dfOxtHb19Hr0dlFY7G950xfW1tjQDtPrq61\nb08+PEVPVV89Njw7PUZOY+/d58m60+fb51/X30e6tMfZV+vRz8nKzNPP3//vV0hCTttrT0ZPb0pDSV/d09fPyMzbzs/T3+tVb7S/X1lZV09fRD7vsreyd0xDPz9H/1M7Njg+PkRNa+/j4829zuvf52/3/121tsj/92/nzdPKy83f49v/X0tKUffZWURZVU9D\nSGPZ19nJys3OzdfR2/9G77HFW05vUUxjRkDjsb22z1NEQkZGT1c9Njw7RUJHWffd28vE09nn729vV0+vsd1vY2v/yt/Pys7V7/f/X0tLX+9XV01ZX0xMSF3d087Lx8/Px83Oz/dPzLHFX1ldZ1dPRUbbsL+/301EQ0hKUz49Ojs6PkVGT2Pn2c7H1+fn729v\nTtG1uNtn51PVzuPTx8vZ1Wtfb1tO9+tfQlH/XUpFTVPr483Jy8vTzsvNzddXuLvG711XU3dKTEvEsL7GyE9JSUlTTEA5OUE5Oz9GTU9v1crJ03df52tjS9+yx3ff207ny9PZys/Ty/9VWW9d7+NPSEdNb0xCR0/n59fJzMzP1c/O0d9nsrzPVeNbU2dLWU66\nr7zGzllHU1lfSkQ7Oz5EQUJETV932c3M12NXZ2dVR8q10U1J3U5n79XZ1dvVz19OUVfn5+9KSlFXUW9VSlXjz83HxsfE1cvTzP/fr7nbV1Vra1VBSv+2tLrPd1tBR3dbSj48Oz09Rk9HTl/XzcfKyu9X//9jS7u11V1OW2/nY93Z1efd1fdVR01n2VlAQU9P\nSERLU0lZ59PTzM7F08/R1XfArrvna2NX6/dMStWwsLbRd81MS93nSD4+PT5AQUtVTVHnzsnMz9VjXV1bTrm4yVtNV1td3+/b79/X0f//S0dr011HQFVTTElKRmdVa9fTy83JzMvX713Tr73vY19VWU5dR9W4sbfOa9n/S+fvSz4/P0FHS0hHb1ln18bIzt3/\nZ2tRU7W0yl9OU2djWd3NZ2vb1+f/SUZn61FJQklNTUhKQENn9/f3ysvJy87R90/jrrrVX2NfY1VIWWe4tbbJ52vZWW//SkdCPUNKVU9JT//f48vH09/vd3dTScKxxlNOT1//W1/T2VVj093rV0hv52dITkpHU01JRkZMb+d318nLy83X3U33r7POT19dW1lM\nS061tb6+2Vvv2193T0VJPUBIX1tLTmf/zcbMyd/n5+9fS8S0v11OUWP/b2//2+tn79HXWUtfZ2dIS0xGT0xMREdRUVXn29/Kz83V30rvr7fNV1dbV1NOVVm6sbrLzldJ2e9nb01GPD9NXWdXT29r78XG19Xj4+NdS7uyx+9ZV1v39+//d2dr29/TX1NfY19R\nT0hBWVFFRkdNV09r3c/dzs/Z70rbsrjfVV1bTVFPV2+9trrG93dM3+tXY1lJPDtjX1VbU+tn48zJzf/X299rU7Wzv2dVd1lr39/jb29b28t391tdV2NnX0o+SGNFQkpNW1Fnb9HK387Tb0VjsLr/VVNnTEZRV92/ucHO3VNP69VOXWdRPDld91VTWf/3483V\ny9lv0ddrY6+vwW9Vb3dn79Xf72dnY8jRd29vWU9f/04/P1tOQ0ZOV1lda//Jz93TZ0jPsb/jV05ZXUVJXe+7vMHZ2WNFd81RTXddPTtR711XU29r2dHZ/9Xd6+NnzrCzymtdd3fv79XZb19v99/M3//vX1Nd31lIQ09RTUpMW1VnX/frytnvb07Ftb/vU1dR\nTUdITv+9vL/OW/9PU+d3SllfQzxFa2NdW2dv2c7b92/X6+9X2a+2z+9j72/3287jd1nr59vjztv3V2dX72tPRU5RTE5MTFdjY2vf583d/0a6tsRdV1lTTUZOUf+9v7/PXU1ZU9tbV01XRT9IX29fa2dn49Hd////42dn1ay61f//6+9n58nda1nj29nd28zO\n/0/3Z2dZTE5OT09RTVVfZ2fb3d9vW1G7ts1XUVlPS0VKWd+9v8DZXU5OV3fnTldJR0VTX3d3//dv39Pd//f3Z2NnvLC60W/v599n48zTXVPn1evZ29ff92ddd1tfV1VRV1NVT11bXf/n091rS9u3v9VNTllRR0NIXdO/v83fV09PVVHZX0VHQUhZX29v/+/3\n29vr72/nZ1dTtq+702/f3df/2c/VW1vn19/f19XXa+/3WVtXW11VWVVRU19bW2vn39ljSFe1vV1XU1NRTEVLW86/wdfnWUtXXVlva1VAQktvZ//3d2vd2evna/djZ09bta++d+/f79nn2c/nZ1/j0+fb28vPd13f70pNY19VXVdOTV9ZUfd33etbSdO6xudJ\nV05RTUtRXcq+xNXrT1FXZ113Z1tGPVN3/+fva2vb0+drb11nU03Zt7rF32Pv79/n19djVe/j49nf1c/L22/va2dLd29vd1tPU1tfXW/d599XTL28yvdZS05RSkhVd8i/y+tVWUhTVVtv90hBREVn79vna2/XztlvXfddV0fZsr7T1+tj3+vn191TTtvj5+fb\n79HX1f9rW1lZTmP371lTV1//d/fn1edbWbS4zmtZX0pZSUxfzcXAxmtPUU5MWVdd50ZAQk5O69vrY2Pv09trW19nSETKscLv/+v3a+Pf1edbUdfb69/r2dvP2d/nW1lPY03d329ZV1dj6+/n391La7S3zldnW1lKT05rycXCx29NV01bVVtX20w+QE5nU9PZ\na1/v1dVrWVtbSz/Ls8DZW+9f71vd2+NRU+PX4+Pv59Pb1d/bb0xOX2Nn0d9jV1ln3ePf5+tOZ7a4yl9RW09RQ1F3xcfCzG9PU09XX1dX629DPk9Xa2/N919v1dPfX1dbTELKtL3ZY1tjb3dr2+tNU+vb393n59nR29fb61NKXVVnd9N3U09v49/Z4+9KTri4\nze9VTFlTS0nfxcXIze9VT1NXWV1P7+tLQklVX+PVzv/33czZ/11fT0DCtb7ba19T/1/3a/dLS2Pf39/369nj2+fb92tRTWNX39vfZ1Nb3dXV3/9RUbW6xvdbTklVRVFXxsPHz/9VTVNdWVNTU+9NSEtOa2vO19/n59XT3WtdT0bVtMHX729fa+9r21tMT3fv\n39nr/9nZ69/r72tZTElVXddva1VZY93N63dLWbS4zu9ZVU5LTUvjzMTGzmdVVVVja1lRV2dbTExRU2frzOvf39fd3etdS0bHtsPV43dr/3fnd29KT+ff693X493T2+PZ/+9jV01OY/fnW1VTZ2/b2V1Ha7m73VtbUUtLSEpdxcvL02tNT2NvZ2NbU11jXVlV\nWWfZ39Pj28/P49lrTEfBtsfX9+9n//f3/1lVS2/d2//Z0d/b193j9//3XU5RV/dna1NVd//d02tIZ7m5311XXUtJR0ldycDT3f9ZR13/W19XV1FdY19VUWfr2+vR2dvO1+t3XUjGtLzX6//v7+fr61VKUVXn2et319vf39/Ta/f/Y09LU2t3WWtfX/fj319K\nS7i432NfVU1MSVH/zcfP72NbS1n//19RXVNf73djU1/v3//Z09vZ0+djW0nDtb7X/3dn4/fv709HSGN37+/369nX69/R63fvX1VVV2trVWf/Y2/V3V1RUbi8y29fVU5NSk5ryM7N419NT1tb92tVV1df599dWV9r72//ztnd5+N3TUjVtb/X52dv5+/n91tM\nR/f/513f49/Z3d/X22vvWV1ZY1tnY0/da3fv32NHa7a5z/dbW1NTU0z/xdX/21tJTl1Z6+9fW1dr49dVW2tv9+vr2c3d4+93UUjMtsXb//93d+P3Z1VJP13vd2//2ePfb9fb6+///1FnY2//b1dd43fvX2tMWby0xfdnWVlTU07jxtf/a11PTFVv//dXV1Nb\n99n/W29va2vr79PM33dbWUrTtrvP92tj//fvd2tLTGP3d2tZa9Xd7/fn9/ff72Nn62tZX1NM59/X/11NX762xnf/Z1lPTEvTw87ZXV9MTE1XXW93V2tnW9vnZ1nvb2/f5+/T091fWUrbt73Rb2d33dHR32NFS19b511dXd/j3d3f3evna1FZ92tZY19Va9Xr\nZ1FHSLq3y+drY19bTlfTxdVrWU1VT2dfXe9vV1lbY+/Tb2NjY//R1/fjy91rSETrtrvL5+d3b83X21dPUVljWXdj6+fn39vfd3fnY1132fdTT1VRWXfbd05GRsC1wd1jd1dNSkvjyc//71lPWUlZW3d3611R7+/T3+v/69/T01v/zc//V0lVuLvZ/2fv387R\nd1VTVVljV113a+f///fN29vbZ2Nj311TVWNfT2Pj/11JR8G3v/9TV1VLTVndydX3XVFJTUxdX1tjX2NXd+PR2133a9vN193V09X/TEZTubnA/1vd3cnP6/fvV05XTU9nb93R42/f2f9rb+/j/2tMXXdbW1/b21tKRWO8vtnn/1VPTk9rzNHZb01HQ0xXX2Nn\nXVdXX2v37+vf1+PV3+PnZ9ffZ0lIvLfBZ+/dysnZ5+9jTVtj/11Tb+vjb+vVzuNj99vjd11db91XWVtZX2NXS1u5vsprUUxfY1ddzsfZZ1VLRUtbV1tPSk5V79/v29v3a//ZztXrd+vrXUtEv7PE73fb49XR1dHrY1FbW01NXdH/693R13fj38/V719ZZ1lf\nZ/fv7+9VRUG7vchrU1lTX0xvy8PPb29FP0BLX19ZV29XW2Nf78/b7+vXzuf3Z/f/91s/TLvGb+vRzszK23fvX1VZa1dNW+/n78/O1+ff3efvZ2/vb9/nX19dZ+v/Skq8tsddVWtrXVdVzcbf/1lJREVOW0tHSl1RU1133dPX93fRxt3nb1Ndb1tGVbi8ymPb\n3c3Izu/n901bW1lLZ+/v2evnb+f/0c3d611dUe9vV/9dd3djS0zRucBbV2tZV1NnyLvD41tJRkNPT1NXUVtZVVvj2c/J92/nz+tra1nv629GQsG+y2vb1c/J2+f//1VZa0xJTF9r29fbz+P/793r9/9d/2f3Z29bXWtjY0pfvMrrV29v52djyL/Ha11MS0pL\nT1NfV2N3Y2/v18/R6+fLxs93XVlfX2dNRN29yvd368zEzXdfX05LTElPW2v/4+/r6//v3e/X3WtfX2ff2/9fVVFdX0trub/bY1tbZ133vr7JY1tXSklKU1dXU1VdVWfvzMfM09fRz89ra19bW3dTQeO7ws9r587I22Nd6+9OTU5MTFdr593f4+v/b+vd0edn\nW13nb3dbX/9vZ05Tw8DZa29bW2PXxb3M//9PSUJDSlNOT2dnb2fvz9nd0c3X0d1vd11db/9RRVu9xut308jE0Wv/71lITU1ZTlVr993Z2dPdY2/V72dfWffLzu9dU11bU1dTz8TOXV1jW+PVv8fM709MQUpEVU1RV0hTV/f30eP3ydfX383j91VNd09PRuO5\nvM3vytPP49/T611GUU1VWVvf69Pf2eNbWevJ3+t3b2vd129fV1tbVUxFzL7K91dZU2fnxMLB3VdVR0Q/SEtXWUlVb3f/29PRyM/d/933U01f72tdUV/ExM/b0dPb2+vd/2dbW1dVX05X/+fVzNX32dnX/13352vfyP9TU133Y1NHzsDNV0xZV2/XvLvGY01V\nQEJAQ05MSkxv6+t3389v39Hd/87N62dbU1dXS0nGu8rf59nTzdnX319NR1NVXVN30c/O3dnn693V02/v/2/TyNPrZ1tdTkNF/8DC31trW1Pvzr7H709OQj5FRk5PUUpZb1Nd49fj18nV3+vZZ09VY19TTELGtr7N19vj3Xf/61lTY/dvV05b6+fV0dPX/+fT\nz+PR19vZ09V3W1NnV1lRTb7Fd1NZXV/bzb7J61lPR0RCPURDREtf///n3dfvb9vj4+PdWVNPXXdfVUfGu8HnY+vj09vR2f9VT19VWVFd/93b1crL1d/V1+fd4+/bycvX529nUUpFVb/F/1FXWWPPvL3N/0lDQDw+Q0lMT19vX1Nj499vY9vT4+PZ729ZW1tV\nRj/LuLzZ59fR3293//dbUVFZVVVf183b19XZ92/32c3NztHKw893Y2NbV0pGTcK/yu9nU1PbwsTNb1FNSkhDRkNFR1drXWNd9+Pr48rG099rX09TV19dU0trtr73Wevn7+drZ2drX2d3Z09RX2Nj49fV3+vVzs/X3dfLyM7jZ11ba11dT8e7zlVMTFPLvbzA\n1VlMQkJEQURJTExXX9/X2d139//Z2efj9//v62dVTkdPvL3NX/9fb9vZ2d/nT01JTUdNXWvd29Pdb1Nj3dPP993N08vO1efvW0xMPVG+wuNrZ2/Ixb7L2d1OSUJDP0dVZ+9dd2Nra19r79PNv8nf62NnZ19ZZ0tHw77H29vj9+9dZ19rTlVfa11OU1Ffb2/n\nd1tR/9vX08i/ztPjZ19VT1FVSPe5v9NNUVvbxL3I1+NLT09OSUtXTk5MX2/n293P09ndz8fn5//fZ1NbX2dT07zE91dTTf9r39vba05RTEpGS1Vb91lfX1v/2dXn2dfP03fd3dXv/1tNREO/v85bW19vxL+9v85ZRkxAQUNMX1vr79Xfa2tv1+PVzMbb99nZ\n1ef/Z1dHS8HJ2+/3d9/Z/+tbXVdRU0hERllfd+drZ09RXWdf68rFxtvT1edZUVFNRkHJvM9db/fbxcXBx+9NRE1PU09nb1VbVd3jY2fn19/Ty7y+09nj62NZV29dU729x2tTU13bd/93a1dOWVFVS01XU05KT09na2fXzsjH0Xfb2/9vVU1NS0zZuc1jU05b\n48i+v9f3WUpMRUpTV1NNXWv3Xf/Pz9fby8nK3+fZ2d3n29tdT8O6yF1PVXfn49/R0f9dV0xDQUpbXVtV/3dZUVn318/O03fn993f/1tLTUJPy8zfU1dd3cK8ydP3SkdIS0pMT11jb+Pnb2t3a//bysTCx9HX09nn/29VT9++zGtjd9nR0ev/b2NXT05RV1Vf\nV1VTXV9VU1l3683Hz9HN1+d3UUpITEhOwLvVV09Md8S9yNdfR0dLVVFdX11LSUtVXW/j69vRy8bFzdfV2d3nZ1tjU9G3wdtjWV//69fR09l3W09VTllbU05TY1dRW+vTzMrL1Xf/d//fd1dbWURI177TT0hJb8vEyc7bW09OSkJETVFTT1f/d19nb+fZzcrL\nzdvj087T3+frUWPBzetr59vZ08/V199fWVdVSk1RU1tj3+tfV1tr99/Zy87R2e/jd2NTU0dH78DPTklN58G9w9d3T0VGSVlbXVFMSkxfV11ZW2v3z83MzcXL0dNvW1ddTHe7vc5v7+vn18/O1+dZWWNbV1fvd2dfV1lPUWfVz9XMzM3X62/d42NTTEhFZ73H\n70lITmfP1c/R909HSFFZTk5MR0xOW1dZW+/NyMXOysvf39vT393/V1vNvdX3Y2dn2dHX1+v/b29dTkpMT05b/2tvXW/r3ePRy9XX6/fR0+tnd2tRXcLHY0ZMWePKyMfL3U5FS1tOTExJSElRY2NRV2d32+fjx8DN59vb3f9fV0t3wsvba11v18vO193/VVNT\nV1dfX2NnY/9rXWtrZ+vO1dPd49/VzeNbTlVIUc3A41NPTnfNx8XK31dKVW9bVVNTU09VTUxLV+vd09nTzcbJ3+Pj32ddU0hbv73X/1tnd//v99Xjb1ldVU5jZ29TW2djXVtra9PNy83d71/v19fnZ2tOSW/Az3dTSFX3ysbI22dVb+dvU0hFS01ZWVdPXff/\n39nMyszR5+vj3/f/a1NRz73jU1dv39/v69f3X11rX09TW2NPU29362///9/d99nb19nX1dffY/9jSVfHyvdPQU7vyL7Dy11RUVVfUVtPUUtOUUpdX/dvb+fXzN3Oz9XM1d1jW0RM2brDb29nd2dr19HbXV9fXVVV9293b+dnW09T693X3dPX7+/d08/Z929Z\nQkLOv9FZR0tn1cvL1f9rZ3dfSkpNU09PUU9dW11ba/fNxc3M1ePn2+Pn51dPa77G0etv/2Nv39/rZ13/529vd1lVX3f/d19f/2dr59fN09fd29vfd2dnRkn3v9NJQET/zcTG1/ddV2NrVVFRTEpGSk1fa2tr9+fj3+PTzNHV299rZ1tZZ7+7xOtVV1X/0dPd\n229jb11v/2f/43ddX1V343d349vd3+Pd2dHM1e9VQj9NxcjrSEdVd8jJz9PvX1tXS09JSU1MU19nV1tVY+fd193f19Pd39Pd32tTSv+6wuNva1/r2+vn6+/r3/dnY2fr6//v72djZ1ljb9/Rz9Hd39vX32dTTUVIzsdnR0dR28vN1d9bV1NXX1VNSktITlt3\nd19dZ/d359XTycnT3d/b9+tnWf+7vM5nTmN36+fv6///Y9/j/93n711bV2tvX29r9+PV1dfZ1dHP229VTENHY8HNTkNGZ9vMy9vnV1FTW0tJTEZOSU9dXVtVd/fn5+/f69fX19fP0d/3XWfDusDjY19n9+/33c/R1dv3Z+/na3f/d/djXV9jY+/X1dfv69nb\n5+f3WUk9QdfRV0dKY9nNzdf/X1FbY1FHSEdGS1vd2XdjV1dZa+/b1d3Vz9fV0dnfa1/TvcP/WVv/59/r6+dvb+vj9/fjd2tnb+tjXVdnZ3f369fZzsvN6+9dTUtARu/F21NMXevPyt3jZ1FRV1FJVVlXT1NnY1tdWV9nX//f5+vb2dPV29/rXVdfxbvN/1dV\nUVtd/9fV6+vd3d//b2N3d/9nV1dZ493Lztfb1d3n3evnY1FGS2vNzVlVV3fXz913X1///1dISEpHTFf/529fW2NbXXfn6//n2dnn38/P1f9f1cPRW1lRV1Vr793d///r33dnX1NZY/f3/2tv93fv69/O09fZ1d/f/1FMSlPOyGNTUefKycrbd1dXU1FRT09P\nWWfn3fdnV1VXWWdja2/rzMzP0dnn/1NH3b+/409KSUxVb+/n/2v/b1tbb2v3719TTU1V793Xz8rBy83N19vj905EP0PVub7v79HP1dX3X1lNVVNTT1NMTFn/1+9VR0ZJWffj19vn29Xd187N0WtNVcG801lERElTW///b//O0W9bSklKT1VZVVFj987R283K\nztfR4+Pvb29rY1XbvcH/b9XRyMvV5/9bW1tRUUxMSk3/5+9r/1lPUUlPVW/3187X19HBzltHROPB11FEP0pZ08fb/1//Y1lRUV9RWWvn71tf59Pd49PR0dvRysfb/19PTENRx7vT3dnRx83b/1dNTU1PT0pVa+fO0f9RSkNGVVFja+fXzsfX3dPH41FHPF/D\nw91bSUFPW+NjX//v519jV2tZWW9v91Vj99nZzsDCwNfX2f9ja+drW0xPx77K4+Pd2eNfV0ZJT1v3/1tNTUpf/2P/VUlNY19j7+/Ry8rva9PKy+NvT2PLyO9GRUFV19n/a93372NRUVFMR1FbY2/j0cvN59nf3///ztnj79ffa2tP98DC3+/X49fd52tdVU9d\nUU1JTV/j4+/jVUpMVVdbW1fd0crN08jAw+9PQT9rxc3vVUdd3edv9+9va01MT01XXf/j32trX2Pv993X19/v0d//a93na1dHTdnD0c7N09f3W0xHSl9v92NPVe/v39nvVUtLUW9v/9/GwMLJ09fRzN1rV0tjwcDXV0tRa1tXX19fXVtfX09VT0tPV19rY2vv\n3+Pf5+/v4+NbX+/j7/ddT9/DyNHfY/fnX1tPXWPv52tXUW9db93/W1dba9/n7+fXztHOzszJxcvna09dzsbTXU1NW13v9//na2NPSkRNTUtj99//Y2PX72tjXWNjb/fvb//T0+dLQE3X0dPX393nXVdVVVtj/2NKTm9v59fd32tRW2tr/+/TxsbExsjGwM7X\n/01Pb8PG129jY2vna1tdUU9bV09VV01b/+djT1Fja2NbW2trb+dra2Nr711NRU33zMvX19//W1FIS2dv3/9dZ/fv3dnd72NRY9nT3dPLx8bEx9PPz87M62NRXcu/yPdbRU5bV1drW1FjVVtXUUtOXW9vY2/r6+v/Z2tnZ29jXWvXzt1XU0pK18nT12tVY1tN\nUV3/52NRVU5OXWfd2WNXZ9nX19/X19fMx8fMzMTDzN9nV93Jyc/3XVdnb2trW2NjUUpJSk5RW+/3Y2dr929LSVNja+9v/+/fztX3U0Y/Y8bDxtfr92NXVV1jY1dnZ1NdZ2vf1/dra2Pr6+vd39PKx87Mz8zK2e9dW1vVv8bXVWNbY1tOU1ddW29VU1VXb+9r\nW11b9+tjXV1ja+vn92/32ef3Y01DSe+/vc/rV0xLS1PvY11jV05bXVfv/2tdZ+/d2d/Z3c7Mz9PZ2c7FydPrY13Zvb7NXVNTV2dbb2tv9+9vTk5OV2f37///729jZ2djY2tra//f3efnZ05GQ1HOxdPfXVFNS1FXV2P/TkdJTFNr//dvZ2/V2d3/Z93MzM7O\n08rKycjV71fvwL3J52Nbb2dr//dja/djWVlda13//2/v3/9XXVlnZ2v//+fn2+fnWUdBPUvNv8XdW0hOTlFMSFlbU0lISVlra99nWVvr1dvf/9PPz8/TzMnHz8jN62//yL3C1fdrW2dTb//32e//V1ldb29n31vr529nZ2tn713r3+vrb+vv909JPT/fyL/P\nZ0xGT0xJRlNbV0xER0tRWWtrWW/v2d1r/93R0dPf08rPysvM1d/nzL3DzO9va2/39+v3393r62tvWWP37//r3f/va29vXVdd59nda2vva1tLQD5M28bL71NKV1dKRk9jU0o+P05TXWdrV2vr3dX3///b29vr28fMy8zIz9n368G+wd9ra1dv/+vf5/fr32dn\nT13r7+vv3f9rXWvvY11n3dnd7+fZ529KREJM2cbD1W9ZWV1FR0xZWUpCP0pMXV1nb2f39/dnb2/33/fn383N2dvPyNXfb9W+xttvb11vb2/n//f32+djXV3f//fr39v392/3b2P31cvf5+vf629PRUlK2cjG0f9jWV1FSU5OU0hFRU9OU1lZb2/39//39+vr\n3//329XO2dfXytXnb9m9yN9jVVNnb133b2/32/dZTl33///369//9/ff62/329Xf29vZ329XVU9N38rGzd/3b1NISVNjXU5FSUdHTVNd9/f39////29v92dv59vf69vPxs33X9/DyddnV11jb/f3//fn29lZTGdvb//f383jZ/f3b2/329fj29HV42dZV1NK\nVdfJz9nb91dTSEpVTUZHSEZHR1Nj9/f//2f3b2/3Y2Pr2dXR3+POzNfjb+PDws7nZ2///29v/+vb3/dVX/f/6//349v3//9n9//n2+fj29n3929dU0dGT9HLx8zVb09NTE9PS0tPT0dKS09nb+P/Z2Nv/+fjb9/f6+v35+PO0dHr99vOwdH3XW9nX2NZ99vV\n1edfWV9db2/319fn9/fn2ePj3+fb2+f3/2f/b11NT+fRztHb611TSE1TTExLS0VBQ0pZX29j9+P3//9vY2dv6+Pj69vKyc7n49vTyc7nZ2dvb+fj29vX511fY19jZ2Pjztvb9//n5/f392/b39vV5/9vXU1JSl3OzNHb4/dfTU1PTUtIRkY/QVP34/dfZ/dn\nZ/9v9/dv69fb29XOyd/36+ffzMvR1fdnX2Nv9+fb919jZ19jZ2Pj19/rb2f/5/ff39XR3+f3b//3Y1VOTWPOxMrV3+NZTk1ISk9ITVFIQkpRW11Vb/dfX2//6/dvb+vr69/V1efb1dHTzMjP62Nnb/fr99vR62/nb11dVWf36/ff5+vV1d33Y2/d3/f3b/f3\nZ1lbVVXdx8jb4/dnXVVZY2NJRklERElRZ19j/+Nv/29n92dbXW9v69/OytPb5/dvb9fN2/9jY/fn39vb52//X1VVT2/n18/P3W/j6+f//9vX3ePj6+PrZ19ZTUxj28rNzM3Xb05JTk9JR0xLREdVb2dn//f3X19fb2Nf9+PT293X39/j4+vnb/fKzd1vY2P/\n9/fnb19vZ29nX19v//fn6/fj3eP/39PO09////d3b2dZV1t3z8XKzNf/b1lRW1dOTVFMS0dOWVFZX29fZ1/32+t3Z29n/+vb2d3Z39vd/+vTzONnW1139+Pd2d//b11NTFVn/+vr493T0933693f3+tnZ//34+NvW1lXd9fNyc/r/19db19ZUU1KSEhMUVFf\n99vZ/2dvd2dnZ2//993X09PT2+v3W1vr0933Z3fb3d/3/29fXVlTS1Vf99/r39/d3/93/+Pr2dnf3+v3/3dVV11dZ//KwsbX42ddXVVVTkxMSk5XW1tnZ2d3W2dv/29vb//d49/f39vb4/93W2fry8rZb13///f3491vb19bWVldX/9n/+vf3f/32dHX2etn\n/2dv//9bWWdnb//KxMvVX1tZW1dbX1tfUVFKSFFZZ2f/X2/r69v3///d4//r69HV09vj62d399PjZ2dn63fj49frZ1tNUUhNU1tvb9fP0eP/4+vd9+v/9///3evjb3dnV1/XwsnR///j/3dZW01TTkxMSFdXX2dv/3f/Z3dfX2/34+vbzs7R43dfd19n69PX\n9+vr2evr2et3WVVRV1VX/3f//+Pd63f/4+Pr6+Pj6/f/9/9nW19fUV/OwsDP/2dnW1tVW1tXVVVPUVtbX1tXW2dnZ3d369nZ3f//493j4/dv/2dn68/T3fdvb2fr3ePrd29vb1dXW1tfd93Z3ffj2d3Z493db19v////d///W2fvzM3jb29rW19bX2tfX1dN\nTE5NU1FTb+Pv7+//9//v7//r2d3d3e/36/9rZ+PZ43dnb//V0dnjb1dTV05XW1tr993Z2d3d6///9+Pr/+/j493d63dXU1dr0crR3e9rZ3d3a19bV09KTVNXW1tb//9nW2N3/+/j3efr1dXV2ff//2dXX//Rzt3n//fj5+f/a19rW1NXU2t39+vn7/f/Z///\n99nZ5/fvd///a29dW1df38zM1edjX11fY2NvZ19fY1dXV01PZ2t3/3f/4+PZ1d3b29/r6//36/93d//VzudvW2fv39/3/2tnW11ZVVdXW2t399/r/+/369//a3f37+Pj6/9nZ11d69XR2/9nXWv//+/n/2ddU01NT1Fda2v///fr4+Pj5//n49/d493b3/9n\nXVvn1dfrb3f339vj7/dnV1VPVVtjZ//r493/Z11jb+/r9/f359/f53dnW01NV+PO0d//b293/3dvZ1tnX1VTU1dfd////2v/69/b39vZ1dXX3ePn/3dvb2vf09Prd///7/f/b3dfW19XW19vb2dfa/9ja2dn//f/7+Pr4+/v/2tnW1dRVevKyd1vV11nd+vr\n92dvY11ZT1dZW193/+/j49nV29vd5+fn693b5/d3a2/v1dXvb2Nn9+vr5/f/d2tbWVVba2P/6/d3d2d36////3d36+Pn6///Y1lNTFn/1+f/Z19f/+vv/3drW1FMTFNbX3f359/d29vr7+Pb2dvd3dfX293vb2dr49fb73f/7+vj3/9rXVtfX19rZ19v6/fv\nd1lfa2t37/fn39vX3/drW1FMTFH32dv/b2Njd/9rX2NfWVVMTFVZXWNrZ//v3dnj39/d29fb19PZ29/n9+/r39PX1+f3/2vv39vr/29rZ2N3a2NjY2tvY1tja2///+vn6/fv/+//Z1lRTVF319Pba1tfY/93d/9rX1lRTE1NUVtnd//r3+//59/f3//3393d\n29vf3+fj6+/j3+fv7//f29vj5+vv729vY19rd/f//2v/d29rZ//v39/j9/f/Z2NTTk5Z9+Pfd2dda2//73dfVVNMT1FRWVlfY+fb2+//7/fj5+/j29fX0dvf6/frd/fb29//Z2vr39vn//93//9vXWt3b+93Y2Nna3f//+Pf39/j29/ja11VU1ld/9vZ7/93\nX1lZ/2tnX1FOTU1NWVldZ2vrd293////6//f3+ff39vf2efnd2vn29Xrb2P/79/b9+fn39///293Z/9r/+9nd2dnb+ff3+tv7///Z1tVU11Va+vn72Pfb2NjY1VZXf/vZ11dV1dda+fn/11r59/f69/f59fR0dfZzs3R62tj/9PT2e9jXWt3b29jY2dZU1NT\nWVld//9na2v/d1tPW2dr/3f///fb3+9nT0lV2c7R3+//Z2dja29vZ29vY2dvd/fr93d3b////+/3593b39/n49vr/3drZ+vV1+tnb2tvZ19nZ2tnb2djZ2N3/3dvZ2f//3dra29v//f////v9/9vX1VX/9XR3f9nXVtbY/93a29nY2drZ3f/d2tr//fr9+/3\n493n5+/r59vd5+9va+/Z0+NrY2Nrb2tvd3d3/3dfY19rb3f//////29vd29vd3dv//f39/dvX1lVY+Pb3/dvZ11dY2trb/9rW11dY2///3dvd+vv6/9v9+fj4+Pr39/f2+P/Z2/f0d/3d2t3d2///3dv/29ra293b3f/d////2dva29vd//////v//9rW1lR\nXe/Z2/dvW2NjY2Nba29nXVtbX3d39/9ra//v7/f/7+fn5+/j393f3+P//2/f1dnf/3dvb2N3/3fv//9va293/2/3a///d29vd2//b//3//d3////a11RUW/f193/X1tfX11bX29nX1dbXWdrb3drd//v93d39+vr6/fr3+Pj4+Pr9//j19fj/3d3d//////3\n9///d3drb//////3//93d3dva2//9+93d/93a19ZU1/v393/Z11fa11bX29nXVdXX2dvb3drb//37////+/v7//v3+fj5+ff7///39Xb93d3a3f///f////3d3dnb//////3/3dvd/93b3f/7/f//+//d2dZWV/v39vrd29rb1tZXWtrY1tXXV1na3d3d///\n/3d3d3f3///36+fv9+/f6/f/79fd63d3a2//d//////393drb///////7///d/93b//35/f///f/d2tbX19339/r/3dra19dY2NnX11dX2dna2d3d///d//////3///37+fv7+/j7/f/79fb729nZ293b///d//3/2tjZ///////9/93//f/d//37/f39+/3\n/29nZ19349/j7/93b19fZ2tvY11dX11jZ2v/////////d3f/d3f/9/f//+vf4/dv99/f73dra293///////372tjb3d3//f35/d3//93///37/f36+/3/2tra2Nr7+Pr7/f3b2dfX2djXV1fXV1dY2//////d/93d/9vb//v7+vv/+vn6/93/+Pd6/d3d/93\n/3f///f3/2tr////////9/93/3f////39//39///d29rY11n/+fj5+v/Z2NjY2djY2NnX19jZ3d3//93b3f///93//f//////+vr6////+vd4/9vd3dvb2v//+/v/3drb29vd//v7/f////3///3//f39///d3f/b2djd+vr6+//b2tjZ2tjY2NjXVtbY2tv\nd2////////93d////////+vn7///9+/n5/93d3f/////9/f/d293d3d3d//v9/////////////////f///9vZ2Njb+/r6/f///9rZ2trZ2NfX11da////3dv/3d3////////9/f/9+vn///////v6+/3//93d/////f/d3d3d3d3d//3////d///////9+/3\n//////93b2tnd+/n4/f///9nZ2Nja2Nna2NdX2dvb293/3d3//////////////f3///37+/v5+/3d3f/////9/f/////d3dvb/////////f39/93//////////93d29va//r5/f//3d3b293d2tfY19fY2t3d2///////3f//293/3f//+/r7///////9+/v\n/3d3//////f/////b29rd//37+////////////f///////93d29nZ2//6+/v7/f/b2drb2djZ2djY2///3f///93d3d3/3f///f//////////////+/v//93d///////d/93/3d3d///////////////9+/3////////d29vb//v5+vv9///b2tvb2tra2tn\nY2tva293/3d3d/////93d3f////3//////////fv//9vd///////////d29nb3f///////f3//////////////////93b2///+/r9///d3d3d29ra2dnZ2dra3f/////////d3f///////f39+////93d//39////////////3d3d29nb3f/////////////\n/////////////29vd3f//+/n6/f//3d3b29va2tna293d3f/d/93d/////////////////////93d//36///d///////////d3dvb3d3////////////9/f//3f/d////3d3d3f//+/r7/d3d3d3b293d3dva2tra293d/93////////////////9/f3////\n////9/////////////93d2tva2tvd/////f3//////////////////////9vd//r7/f//////3d3a2tva2trb293d3f//////3d3///////39/f//3f//3f/9/f///////////93b29vb2///////////////////////////3d3d3dvd//r6+////93d293\nd3dvb29vd3d3d3d3//////////////////////////////f/////////////////b293d3f///////////////////////////93d//39/////93d3d3//93d29vb29vb2/////////////////////////////////////////3////d293b293d///////\n/////////////////////3dvd///9/f//////////3d3b29vb3d3d3f///93d////////////////////3d3///3////////////d/93d3d3/////////////////////////////3d3d3f///f///93d3d3/////3f/d3d3b293////////////////////\n///////////3//93d/////////93d3d3d3d3////////////////////////////d3f///////93/////////3d3b29vd3f///////////////////////////93d/////////////////93d293d///////////d/////////////////93d293////////\n////////d///d3d3d/////////////////////////////////////////////////93/3d3////////////////////////////////d3d3//////93d///////////d3d3d3d3//////////////////////////////////////////////////93d3f/\n////////////////////////////d3d3d/////////////////93d3d3d///////////////////////////////////////////////////////////////////////////////////////d3d3d///////////////////d3d3d3f/////////////////\n/////////////////////////////////////////////////////////////////////3d3d////////////////////3d3d3d3//////////////////////////////////////////////////////////////////////////////////////93d///\n/////////////////3d3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////LnNuZAAAACAAAHDqAAAAAQAAH0AAAAABAAAA\nAAAAAADT087My8rM1W9369/j493b4+tvVVFVZ3djXUpVVVlfa2v/39/Z19vb3ePj5+/n3dvNxsLCwL+/wMXIyMzf93dnVVNVTktGQkNAPz9ERUlKV+/r7+/fzczLyMjAv7/Bw8TGycvOztXn/1dIQj89PT9DSU5TWV1j/+PbzsnLysjJxsPDwr/CxMPHy8/P\n19/n19XfX1lTTElKS0pJSkpNU1FbZ//r3dfT0dXV19/3Y+u/s7vFy9t358SysLnMa0U/S+/HydtOOTIxOERv901BOTQ3R93Au8TX91X3x7qurrW91V9j6761uMF3PzUzOU3f72tKPDk9Tc67u8TdTkZT1bmytL3Ob0xjzcG3u9VnQz5La8a9xt9KOTc7TNnE\n12dIOTg/a8C4uslnQ0NO17qztsLfZ1nTubCtssTdS0FP/8W+3Vc9MDA5R+fjVUI3Mjg/27u3vc13T1Xbvqumsr/rXVfvwbi5yF9HNzU9T//vSjs1LzhI97++1e9LRE3rvLCxt8brX+/Eta6wvttJPkR3v7m6zk05NThH3czNU0A9PTdZ9+fLXe/rY8XTvb/R\n003Z49Ovsa2z3ds+Tc3ArbnESzUwKj13zbp3RCwpLCtVysS5X2M7O+PZr6mvrtPdT1W4tq2vx9c2RENOw9vbUTk2KjlE373bzk88Y0PIv7y41873U7/CtbHCwU9VT1XFxL7XXXc6U3dfu+//SjM4NE3Oz8JPTDk1TOe4rrm9WVFDTMG4rqi2vv9NS//AtLS7\n40QuNTtDz8xnTjMwLTFBY9PJ499V793Gtre4usfByru8v71jd1dL2efOzU4/MTAwP3fby1lBPzI7S9uytrrMWUo+/7+vqKy250tLRdO6urHPbz46TlXVvtPRSDw1PU1Z2e9OSTlFSO+7yMfTY2d3xrq0ssDD/+vDxa+wubxMRDk+2efEyk45Ky0uPPdj9z84\nNi5EZ8KqtbfK/+vrvq2tp7fEQklnVcG7x8A/OS4zSknn/09ONkA9XcbLwdln90nN0cCxysbbX8nZvbjDy0pKOEjOybW5z+c0OTdEv8u/3UQ1KjI767a9u2NNQjrbvLWntbfRW9vfvK+xrb/RPUBTRtnvU/c1OjQ2TD9KQTo/NUlbzrbDvtXXxcqwrrCvzNVM\nV8fKubvNTTYzLUDvd79ZRjQpMjZjssa63Ug9PGfPuKu6u19vXV23tLGu1Wc7RFfjvru+x0pKOE/X78ZXTkMzQDpM2WPvS0lNVc7HubfEyVPPvr2ssLG562tM37vBt8xrNy4zMU3NXWs1MCkoNDz3uMq/b1NP77+yq6iztm/Zzcu3u728T0g5QVVb3VVTPjM8\nOVfn/91GUU9Lxsy8uc3rRlHdzLextMHdWT1d09O3v8rjRkVD777HvN9OMjI4Om/L99k/PDQ4W9e9sr+763ffxLWwray9wl3Xx8+5xszNOj80O0tJUzw4MS46OlN3TndDWd/ZtbKwr77C6866ua+uu9NMRDdP093FW0g5LDEyQs3/11M8NDVHY7+xurxrU1VO\nw723rL3C92PO177ByMRNW1njwsq+71VON0VJTs9XTzcyODRJ3cm+19dCTefTtKyvrsDF/+O5tq6tvMZFRTpF2e93WTo1KC4vNU9ISkQ0Oj53w7qtr7vJ27+/sa6xr8jrVU7PzsDKXU0yNj0+9/fjRDo5MkBv973FxWtKW2/NtsC8zdFHU9nJt7S+wEpKP1O+\nu7e1zGs4QEFZzdXjVTUyLTxDTcnr/19Aa+/EubWuwcXIyLS2rrK7u/9f71/J3+dLNzUtLz0/Z0tBMy4yOFG+vrG8vs1nxLiuqa+vztVRX8HAwLlvVzM4NTlnd2PnOTYsND1Lycrr40JRTc28vrbB31tNzMi2sLi451ldTsLBurvP0UxJ32PI391XOjkyNE5L\n71dLOTVAVdm1u7fFzGPru7KtqK+z6+vv17q2wMZFPiswMjVNST4/LC4qNEZdwMvVz1vFwrOusq+2zMrZvLy3t83bRD5RTN/rb008OjU6U0rjY2NNOUdVz7q6t8/fRkH31cSzubrZb05Rz72+uL/MSEpra8G7y9VAPTU6RD5XWUE+Mjg/Z87LvcHV0+e+tLKt\ns7W5zsG+vbK1uetJNjI7P0pRPzwsLS4ySF932/9VPlnIu7CqrrLCx+fAuLe0t8fvP0lGXc/f91E5Mi8+P1FrSkM2ND1F08m/vdX/X1PRxLm/w8hvd87FuLe4zedjSffIwre9v18/OzxI1/f3S0AtLzU8V8vRyGdVRWu/ubSstLnLxr+4r66xtMjvRUtGSFdE\nOTQqLS82PERJQjs8PFPPurW2tb7JwcSxra+2wcz/Tdnby8fMX0I7OTx3Z29nSjwzNz1H1dvGx9lfY+vX2cLLx/fv79vJw8i6w8rT39PXysbZxef3/1dNRktIP0k7Pz9EPT5LUU7f68q9vL/CvLq/t7ezsbi3wMjM28tXTko9OTExNjM7NjdDP0BHTf9ny8rD\nubq0tbe1vrW4xLzGwszd90z/W0dZSldDREk5Qjk4Rz1LSUlrTGfj3cDMydXVz//d29nAy72/wMPTy9fVv8i+zdfTd+tRTudVS0JAQTxBPjtXSUpTXePdxcG+t766u7e3urC5vLW9ucff70dJOzU8NzgvLzIwNjk7T0xda/fT18i7uK+zs7a7w8jAwL66ztNv\nV05JWU9P61FPRD4+PEFCS29VTVNf6+PJxc7E2+dv69/Xz8vIvMLEzs7V3czPz8LKzf9VS0VLREpXSkk/Ozk6QUVN09fKycvPxbq5uLK2tbq+xsW7u72+y2tHPzY2My42d1M9NzEsLjv/s7LKxmdNa7+rqKitum9Ob8W1r7jNXTsxO1vbxdNIQTAuNTtn3/9X\nOzI5QtO4sb/Kdzk/XcyxsrrNb0VE/7eurLfMTj5FZ7+ztcVVPSwuPUzOxVNEMCouSdG8tsTIV+vbvauqrLe9WePCuKirrsxGMyo4O+/ZRTQjJCMtRee1/182Lzt3rqiirLvJPEvjsaOhr9VMKDA6a6ysrVk6JiQ0R7KvvGsvKSQwW7Cnr7hAPTI52bustbpd\nO0VB2baqtLrCOFFJ2bq3tu9fLzI8PdVRY0U5Ly1BRM3Mz87j1/e5r62yvLzfycu8rrC10c9OR/dK51M7OS8tKkBDTuc/RTpBP3e1sq68wM/Xv7irq6y7a289Vde6tMr3NDMuOPfMs8dILSgoLVXMs7d3Vy4wO9mvp67Nay8uOF+tp6W01zwuP12wp6ev1zwr\nMkTJt7fNNi8mJjJAwMrFXTc6PGO8pqirr1vvZ9WwqKavtE1CTVW/vMBMPickKyw+R05BOzcrO0jfuLi5xsZrx7SvqrCwxtffU83Ew9PbSztVTOvR2+9OSjM/RkX3T0dBTUFdvsO4yHdHRFtvtra6y19nR+vItqyzwUtEN03ZwK27/z0rJy1AXbnGUTgqKSpP\nuKeisbtIPkzNraiirb9CNT5Xta2ruVE7JiovPd/dUzUvJyw0V7W2tNNPR0XKsqOjq7FVY1nNtqyux+8vMjQ9zb6461U3Ljg5V9/NSUc7LUFEz7u4uff/OkHjybnDwV3Z9++/ure+vVnvyeO+vcRjWz0yS0j/50E4LTErRd/ZuczZZ1vfuKmmqLPGa1Xjv6yn\nrcJVOy09PeO+b0osJR8kNE23vdtDMS8127eqorC8W1VPva+oprjXPjU3W8S8s91rOy44QL67vs46MSkwPsC2u71DPjw/17mvuLtDPD5Jwq6psLhnOEZFx7uwtdt3Lzg5PdPO30Q9Ki02O9nMxd3f71vMu62wsLnMyP/FvLe5x8xGY2tryl1GNzgrMkA/WVNH\nOjo5RMC9trjH1ffvy6ypq67E2UFXTs6wucVZOyw1RHe1uMNXNSorOUq6tM9bNS8vU8uvqrzfODY0X72yqbO/7zpI47uvrLfRWzI4Pdm9ur5ENSkrMEXLyMVLPTg3Vb6rqqqz09Ndzrqtq6+4/0xESOvDuc3jOCwtKjVEa1NIQC43OkrRvbvOyevrxcKzs6++\nyMPdxsrHx9NrPltZZ83T3UlPPD/3W99vTzs6NzrPxr23z+dHTD/3uLixvdNLVf/nr66vu3c/ND9IwLS+zj8zKzE8Z77G/zwzLTRv3bGst75NTlXGs6yossBKPUNfurSuvE86LTA0Z9fX7zQvKS4707m6ulVDPTzjw6ioq693X0Zrvq6qsbpCNzg2d8W3vsxB\nLzc1T9nCyk9DMDM5Rt3EuevnT0JvWcjGv8df1WPNu7e3vb1P5+Njw8XIa1M1O0hB42tZRjkuLEpRybvJzPfvTL+urqmvuMrn/8uzsrK+3Vk3PkD/zv9INC0nLzNDytvnQToxOu/Pr7C6x1VZV7yzraq9yFM/R9G8u7HbTjowOlfEu7nfQDErNT3RvLm9UUE0\nO2+8rrOzXTw8PNu5rKuwxUdIQGPBuLjJdzc4OD5Xz81RVzU0Oz1j2cPRb1tI18y3tLi519X/zry7u7/TRFFbY8vP0VtBLC06P29v71dFOjNd58q5w8t3X0nHtrSutcLZWVnMvLe6yOdKPD5Byr2/ykk4MTc8/8TO6z82MDpvxrS1v188Nzznuq+uu8xVRF2+\nt66uxfc1MDdEzsK82z8sKi8928i/0UU9ND7ZtayqrctrV+u+sKurst9NP0jdx7q+z1kuMC0yRndZRUEvODxE38fC21s/Q+PPubS1vMzvZ7+8ube/50lVT/fR18vrTjo8S13b7/dVQzQ4Z/+/usbRb01Az8W/uMLMWU9Zz7OysbrTSz0+RcjBwM5INzE1Ot+/\nyddAOC45U8W2t7zjSz5RxrisrrrEST1K37yysL73ODM1SNnKyFU/Lis2TNPLv8NVPjQ9b8K5trTXZ2Nvybuvr7fDV09HX8i7xc3vPD8/Rd/V11lMNjQ7Q3fT08znTElnb9PGy83Xd2PJxMG5uL7J2Wtv91dvd2NKQkJBSEJIZ1VGP0VFUWfvz8DGzcbFwby7\nuLW5vL/FzcrOzL/I1+9nRUBCPkJGQz5CPjpASlFb//9jUUhZZ+vMv7q7wNPZxsrHvrzF2eNXVVVV993Zd1dMREM/TP/va1dPT2Nn58W+xd3j72/j38/DvsXGytHNysTGzt1rVURGWWfj/2dKSkA9SE9ra+9VTk1N69HPxcXGz9130cPJwsDA3+//b9vO1d93\nUz47ODznwMZbRjQ2OmO9u8rnUzc5WcO1rbG6zE9L0cC2sLi+Yz06V93Kv83rRzQzOF3v0+dZPTg/Tc29u7/vST9L38C5ub3Ob1F3wLqyu9NTPDY6U9vIy1FGMTQ9SO/T02dbNj1HZ7u7t7XDyl3JvrewvLvT9+Pju7/ByFVAMTtf587vQjkuMDdXw7y+UT42\nKz9Vy662u+NMPj69r6ututk1PENZuba4zEA1LTlTzLu87z8tNDNXwLixv8pMNUxXw7C5uNVdQ13KvLC3vchBSE9XzcrJ2U5EOknf69FTVz0yR0XnzN/dTlFGa8G8ubzTW0VM5760sb7bXz84S/fBt9tZOy42OVu+wL5ZSTAxP1nFusfGXVFH9721r7HAxW9b\n68q+vsfdU0hDXdvdzElJPjRDSufG599ORkBI18O4vNX3RD5OzbKws71vQTlD28S2wv8/NTA0XcnIuGdNMzE2Ot+/xr/vST9j076vsrm9X2//zrS4ur3VY0zf48y+b2M7Njs+493fb0BBMj1jZ8rTXUU7PEPXtrWxv8xfQ//Ovq7Cw29FNzhdz72472cyNTk8\n28jKzFtNOk/Vzr28xtFOTVPTvcC8z9XdTsnAwLnO0UhBTkvOvb++WU41OFFdv81vRjQxMT/LvbS/2082PVvGsa6xyHdDOWfKt6u8wVs3MzJJ0cC390svMzpFzcLNxz84NDvvy7yzvcJra93Js7a6xm9fTtnPy7j/Z0o5QkFjzd1vQzsxPl/XurTO2UhISlu4\nuLi441M8SN/GtLbIbz85M0fn1b/P/0g4Qz9Xxt/XXT81Plvrx73Mx1lf2+O7uL2909lf47i8tbfNX0NPW9u8ytlBOjExQmfbvfdROTAzPWO8vcX/YzhFd8qvrre9Vz44SsW7srfTUTU6PmPFyMdMPzYxQ2/LuMjIXUFMZ8m5ub7T/z9O48aztr3BU0dIW8a9\ntsH/Rz1Ea9G5vMtJNC4uPmfbvN1dPjI4SNe3urfMYz1JY9Gzrbe3a09GVcfBubv/RDU4OknVb+tbPjw3SlVv0Vt3TE3X0bu4vcDV3XfPu723xdlvRlv30bzP50s6LzlN78zD72c6PD1jt7S2ueNKOUt3xrW3xOtGQT9vycm95048OklnzrzP204/OD5Nb9Hf\na009R0zvvLu+zfdLTXe/t7C2we9ZX+u8r7O3zko4O05nz8TdTDo0MD9j18bXZz4yPEDnt7q6xWtKS2PNvrbAxk1JUVnNwsXHUUI5PExd2e9vTDxCR2/KvrzV3V1J/9PBusfPX1Vn38O4uL7PYz5M/864t73GTT07S/fv2VVGODI1PP/M0c5XRj1Da8u9t8bG\n/1/nxrq4s7nL60hf587B92NCNTk6Tevj40Q+MzVFWcK8xNFbTk/Zt7WwuMpXRU73xLS3ve9NNjdN98++32s7NzU73b29uMX/P1Fd27i4wsxIQj9bzsO8v+dGOkZJ48bFxdljTUTr18/XV006OT9H78vPZ01FQE/dx7u/w99Pa9/DsLO1u8NrWdPBvLfB00Q7\nNjxb5+PdSjsvND5M78zZ601BP2vNvbW6ye9HWV/KvL2/ylVEPk3rycf/WTo1PEL/x8jZW0tAS9PHvLjE/0lAR92+tLW+yFtDVefDtre7yV1CQuO9u7i/ZzUxMjZI3+/vSjkyNT9f0cDO2VdJU+fHuba3vcfv08K7t7vC00lFQ0vf1+NRQDUxOEVV193/RDw8\nQuu8urW6yF1O98/AtLm+z19FWf/TxMHZazs9P0vj0c/RWUxGWdnHvMDN40dFT9/Mx8bdW0tFXdXFxNXjW0VJWca7t7/jXz09TVnV21VFOjQ4P//jz9XjRT5Da9G6uba9y+fdx7q3rbO81WtOW9nNz8pdSTk7PENRV05dRTw+Q1Pn08vV0f/n18nEyszN729v\n18/T3+tvSkVMTWtvX1NLSUZT3efT19frW2drd9Xbz8nK7+fXys7BysfDytPV0c/RxMPAydHdU01JQEU/Pz9BRD89PURTU11jb+/349XdyMa5tbq9wcLFz8DCyMnnb1lTQ0NVTU5KQTw6PUVHXVljb+Pnb9fCyb/CxMrR1+vRydHL1dXZb3dXWV1j519bU1lv\nb93X48r/d+Pj/2v/b2ffX2fv59vr1+9n3d/b19vR2dHK2cjOz9//d01FPjtBQEpLSEZCR0tMWVnvydHV187Hwru6uLW7vsHGxc/GzNfT711TTVNMT0Y9REVGQ0RMSllnd9/by9HRyNfOz9vN29PT29n/3et3d1FZU01MSllRTf9dW11j/2vr//fdZ19n2dHd\nyMvNxdPMzcS8x8PD0cvNx8fFvs3ZW0hHQkRCPkI/Pjs4RkZPT09ZV29r2cfNx769vcC6vL69v8HE0e9r42dTU1NMQ0VAPD5CREVHSUdbZ2/r08nGyMzLycnTz9HLxtHVzNn36+dvX///W2djXfd3a2vb0e/39+dnX1tVa/djZ+/3Z+/V2dnLy8/Z39XPyc/V\n18mzuetfPzM2O0rX50hBMS42PPfDz9l3PztH1butrbW8zv/fw6+ur7rTU0BHW8q9yvdMOC82RWfXa01FNzRDW8O0ucHfTEdTyLe1uMf/PTtT57m2xGM+MC8668G3yVM2LTI967qtusx3NDVIY7+wvcjXR073u6+ts85vOzpfuaurrsFDMS40Uc3O51U4MTA1\nSGdjX0Q6Ok/VvK61zNFDQdfArqeossZVO0V3yb3Rd0w6NDpN1dXvPzctLDVdtrK7yE8+PEHRvK+0vsxTT2PRu73M01E6R3fZvLfdZ0gzOkvZu7O621c5Ok5fy8X/VUc+ScyzsLXOTz86P8ivqaq1008+OUTjwchvRjIyODhOyFdDOiwtNkrGr67Cz0A6Sve1\nqaissMN348nEu8FnW00+U8nBwvc5MCsqM0fHurzHUT5DROu8uL7Nd0vnyr6vts9ONS00RsmxrsNbNSssNkfTusDM2UdBb+PNyW9TRT9Vw7Kur73RTEBHb7yurrK4329vY8/F21NFOThHX93PUTcwKis4Ucq1utlfPzZH276vr7e7w9nIuLK1w+tHODhGzbS2\nv1cxKSksO+fEws1TPDxFU8m+ydNfTnfEuLGxw/9INT1b2bSuvs9bOTY9U9XF1fdZUVPZvrzHVzw0MjnrtK6wv103Mzpbuq6stb7dTWvRw7e4z2c6OEdV073dSDImJjA6a7u7zlc7NjhG0bu7vr/DxLqvrK28/0tGS+e2ra69XzssKzQ/3cPPd0g3PE33ysrj\nd0Y8d8O1q628WzgtMkPMsay02z80MDZBX9l3U0tFSd+/vMVvPzg3P+e6ra+8y0U5Pk/CsrC0ut/318W8t77TVz08X8C6t79KLyYlKzrZvrrVSzoyN0Xvv77P52/rybmsqrS/XT0+T8qvrbDBTjEtLzxv1d3vRjg5P1Pv32dNPzxHzravrrzjRTY9Wc61rrrI\n40FFSWfKzfdTPj5P17m0xO9AMi41TLyvsLz/OjMzQ9O+t7jA22vZwry3ucjdTUnnv7ivu2c9LCovM0XZ3VtJODY5QUVRr2tOUWfOtKqqtMlbR0fjta2rsL5NPDc/d8/L31tENTtT783MX0k3M0X3va+ss81DNjtN37qyuM1bRkRKXdvjT0E5OkNfxrvEZz04\nNTtrxLa5w89JPkdXzb3Bxs9r68+5tLS+yls+Tdu4rq2xy0AtLTI+d9HRWz01NTtEY8zrTEM8RefDsa62wv9ISvfDr62yuddGPUJrz9fbXz07P1Hn2WdLPi8vO++/trXCZ0A6R2/RubXA011K99XKu8FbRzw+U9u7t7/fPzQyOFe+tLjHWTs2OUnOxsbKX0hP\n4762tLvHW0RNyLavrLHDbzk5QEVn029LOzE1O0hV/1k+Nzg9VcO0tr7bR0JL57asrLC961FNZ8i9vMjvSTlBXdnAy2dMNC44Rte4srnMRzlCVdu7t73MXUhR48/Exe9DODc+Z8S/x1U7NTM7W8y8vMjnRj5FWcm/zttfQ03bwba1vcdXPkrnvq6qrbjfPDxM\n/87BxWdANzQ7RVfdY0M5NTpXzL23xGdJP0Vnx7SytbrRX13/yL3Dze9KQUvrxsXTW0AvLTdO0b28y107NjtZ0b+4xedPSG/LxLq4zl9APUZvv7i3v1E2MTM5yLy7wttPQUJJ48zR31c9QVPXvLjB1WNIQWvAuK6vtL1nS2Pjyb6/0088OD9TZ19VQzMuMjlX\nw7m81UY1Nj9vu7SzutVnW+fKvba/yutDRm/Nu7rMVT80NkNdxrzGz2M/Q1Hr0cLH23dPXdHCwsfPXT8+Rl/XzcDKUT82NjxT483Ob1FHUf/Xw89vXUVDT+u+uL7Haz89R+fCtrO1u9Hn58zJycLJ71NPW3f342NEOTc3PVF31cnTa0pIRkrn1c3Gys7Oy8XC\nytXbb11308bBydfrSTw9TFNZX2v3WU9XX11VXVtZW1fXw8fNy87jW1vv38/Ry8XN519VTUpMUVVfd9vX5+fnXVFbS09r79/V2dvZ71dfb3ff2ce+vr+6vcXR1+vn793OyONfWU0+OTk/RUdTW2dfY2tbV1tXY/f33cjEycjJ09nva+fVzsvKzMzbY1tMTFtn\nZ+vb4+ff92vv//9vb+/b08/TzuNvW1dfa2v31+93Z1tTT0xJSktKV//f3dvn43dXX11d69HT09tvb/9fXffr39PTx8G/wcHCx9Pn/+fX2dfN62NbRj49PkVVY11v929vZ1tvb1lf49XOys/LxtHf3+Pv19Xdzs/d29t3V01JS01NW9v/d+drVVNKT2vn79fN\n2d3f7+fj/+fb3+fZ29nX3W9jTEVKT1fv3ffj929jZ11nZ2/r5/fv29vj42tn92/jzsHCv7y/xsvO0dPV19njb2NdX1VGP0FCQkVNWXfZ4+tnTExVX+fTzc3V/2t338O/yNv/UU9ryL68zWNJP0RZ18bDy9tVTFPbxr3G3WdCQ093xb7P71FAPUVdzcDF2Vc+\nOj1N387L71dIP0vVyL/C2VlNT0PVzNXJX29MTNt3wczOy1vT19O5urfF/1k6TePOtrzPPjY1LkfbwLfP20E6Pz/NwL6+XW89Pm/3uri/wEdRP0zAvbe711kyPT//vsnD2Uw/NU5Zyr/bzEtCW0/NysfMVV8/S9PjwcfT20pXS1HN681rTU0+a+vOv3fnSENL\nSsu9vsBXXTk8TPe5uL7OV2NF58S7srfAyUdLRv/Au73XXTsvPkBnys7VZ0k+PE9rzcbR61NNY1vZ2d3vX19d58nNy9P/WU933cvAzN9fTUxrzcG9wv9rS0lb3ca1wNNNQjM4SdXAt8pbPDo3Q9/FxMFrQDc+Tt3Nw83vU0dI983CwsTXTkdGRHfNzNXfXVf3\n18vCyNvnY+PJwry9xGtTQEFMz8vE2Wc/Pz1V0b7DzF9VP0JXz7660W8/Oz1N07u4vs1RPUNJ47vEw8lJQD1R69XC53dPRFNrycHLyFdRS0X/78nKd/dOUUZr1dXOX09HTPfMwb7V/0M7Pk/Lubm82U86Oj9vvL3I209DPVHRvbS7yVNLS2/EuLa0yu8+QEVX\n3cbO01lEPEdj39HR/2NPW2/Ryc//T0FCSXfXys/jS0RHV+PDw8v3V0VO2726tMTfS0E+58WwtrrRWTk9Qt/Bu89rQDk4QGfNxctdOj5BR9m8vb/dRjg+UdnAu8HJ/1FEWffV0+tnVUpjb9fI129RTVP3yr+9w833SVv/zb7AxetMQkJjx8LB1f8+OUFfybO5\nwl9FNDdC78u4xuNIRD1NY8zFxOtTQVFrz73ByNNLRUNf0cXBy9dXU1Vdzs7R91NOTFvn1ct3Uz49RF3Pv8XGY1M/RWfVyL/MzUtISF/NwMXnZ0M5R0zRubzE70o9PGfIu7S5zFVOTE/Vx8S/32NGTWfvzcjna05LTG/MxcjXb1FHTU1v22ddTENKUf/Rz91R\nTT9I58a6t77OW1NN47y6uMzIV0VPW9O+vsLvUz48Stu/v89rPzU3OUnXzMXTVT5ATFvOwszPa1NPd8zIx85dTUdFT9vHzM5rTENIW9/IvMvOb05n387AxcTvW01X18K9wM3vQkFDb8LAw8b/ST5JX9/Gxt1KPz4+XdXIv91XPT1HSdO7xMHZUT9O68+9usbM\nW01NX8rOyspdV0ZHZ9/IzedMPz5EVePfze9rSkn339HKzttTT1V3x72+0fdNPEVT/77Cy2tLPjxP08u8wc9VTlVfzL7Fv+NXQ0xvzsG7x8tjSkJd1c7ByNn/Sk9X/8zr3Vs/QkZNZ9/RX0w9PElrzcvJyGNMTV/Jv7i6wNFvW/fPu7y93WNEPkpd37vP2Uw9\nNDdHd9/I6088RUVryMXMxmtTRmvXwr290f9NTUvf08/O/05GQU5T3c/fd1dKb+PKx8Tf90lNX8rGvsPBd1VLWee8v73Pd0RJUd/BusXjS0E5RGPXycXrRDs7P2PVw8TbXUVBT1vPvcbF2Wdjd8zExcLvd0xKb9vO23dvQERJV+vn319HPjxR78vEzNVRRktj\nwcG8wdPrS0Vn977Aw9tNPj9D/+u/yd9NSENO2cHBvNVbQkdT3by7ychfT0hjzsq9vczPSFNr38LKxcpPS0FVX2/jXVFAOkVHb+fT2VVKR03OzcHKy3dbVd3Ds7e2x+NTSFvRyrfE20M9Nj5d69HJY0s3OTpF68/J2UE9PkNExri6u8Lb29vEvby6xM93T1v3\n4+t3Z0VFSFf359l3WU1FTuvXyszRa0hGV9vEwcPL209MWeu/vb/Ld0ZGUWvZv8fvSj05PU3b18jfWUU+P1njxc3K51tLY+PGvLm/xmtfY9vLz8rGb1VFS1Nv//d3T0BJSFNb/+9XTFFX0c7JyszjX1P/17+/w9PnW01Rb+vG1/dRRkNHV9vZydH/V1fdY2Pd\n68jXb1lXb/ffzc3AztfV4+fvzMjMxdXT92NdV+NnTndOTUJDRURRUW/XW11OW19d18/EvcrJ29fTzb+/ur7P219XV0/rb//3Skc9PUFMa09bY0xIPlVn38DNxcd3X2Pf08a6wcTRb/9fb2//zF9jVUNNSVNfb+tb/19Xa1/n3dnM3dHfa//vzs/Tyc/Jzd/X\n18zbz8jZ0d3vd2dnV1ldSlFXTExKTVFfWU1jZ2N3b9/b1dHRyM7XzMrHxsrK1dvn/+N3Y11dXU5PTklMS0tJS0xGT11bXf/X1c/P49Pb49nOyMvLzNPX42NvXf937/9jW1FPWVNjd9vna3djV19r59XO2+//d2Pj08XJxcfT19ffzszFys3V629ZV1tOUUhF\nR0FCQ0RRSldPUVdv39ndzdHOy8XDw72/xL/Ex83NytnX91VTSUpFU1dKR0c+OztT5+NrUUpJSuvCub3K12td58W6t7bE11lHWe/Rw9f/Qzw6PVfV2d1bRTxBS2/GwMrbWUdIU82/urzRb05Xb8a5tbrLd1NK59W/usfnRTg7PUzbzutNPjc4Pk3OxMfdTktL\nV8i6tr7E42vny8K7v8TvX0tJZ9/Z21VEOjk/Sm/d/0g+OzxVzbq5xndTOv/bua21t29JOjvXxq+zwlU0NDJT37m10Us0MzJPzL2122M7OD5Zvbmw0f9MM05dua6srd9vOD/jvK2xsV0+Ly07U77CzEYwMCo6Ssq6w908QjxTzbustrXbWW9Ovrasr8DRP1E+\nT9nJy11LMjQ5OElM50tXSTpMSevfxMfXw13M0c7Hy7/NvsbRxWPjVetv19dbaz5APkJV68Vv20s6QjZMTM+81b9HTz1E0cGutLrZSV1DxLusrbnNPT86Y8e7s99nNy4uOWfVuOtRQCs4Ndm6ra/v9zU6XcSuraq/0z81S+u0srTRPjwqNjz3vcHdNjQrL0Bn\ntLu3/z5ANWvKr623vD9XP0zGsq24vj88STvZz7jJ0WMxQDRCa8rD79E4Qkc71dm80c9rPe9IzMm8u8u+487Pz7/Iu+PH0Vt3RVk/U0w/3zpKPjw8NV9CxMXdy0z/RtnOuK64td3f/++8wa66vtU9PTNKU8jKUVkuMiwyW+u613c9Lzs5wL+vsMT3PUJJvrCu\nqr/NQjhDS7m2r79LOCs3N9HIvcE+PjEyP+e5wrhNSEU0Tm+5u7jIUWtAb9e5sLW032NTR9XNt8jKXztENktMb91KWTU9P0X348Nb0/9P2d2/wbXKy7/vxcu/xMbGTtdNU11NV0BTN0trPltCTj9GS03M2cfbd2tL2WO8uLq73+dHZ9/Hsbu/d04+PF9jv8LV\nSDg4L19VyLvRYzs4M1fNwrDGzU08PT+9u6yuwdlBTVG9trSw2003MjlPy93ATTk0LDY808q9z0tHOE1dvLGzstPnV1/FuK2ztddNU0Fn68TTZ0IzODQ/S2fvSUxNQkpN49W/99//RufryMi5vd3DX+fRzcnRyE/P609jU2NJYztd401rS1NDT0hDydXO019V\nSutLwr3Dvtv/Su/RvrCyuM/vRkXrY76+0U08Ni5HQ9/E/2s6NjE93cyyusZdR0lOvLasrL3ZS0pLxby2sd1LNzEwQv/nv11AMy0yNdvHubtdTTpBTMC2t7DP411M78a2urfXTVVDY+vDx81bOj46Rk3Zy2d3PD5DQHfnvtfd/0dnUdXOv73OwN/ZzMm+vrjX\nwc9ba0xfSnc/RF08Rj49OkRKPNV3/9lId13L57SvubXEyPfOy8mvtr3ZVz87VUnM1V1RNDArND5Xx9v3QDg2O9/JsrK9201OTMG6r6q5yldDQOvEvrLMd0E2Nznj18DJSz4vNTr3z8++Tkg9PE3dvsi641NVR93FtrK0xF3rY8/DubrM0Ts6PDtP/8dfSjgv\nOjhP58XN73dCWf/LvLWzxb/f/8rGvLy439v/SVlNWU1bRDpKOD9GQUVGVTrd1/fN79lj0WPft8G7x8vj4+d3u8LAw2NMRVlOyMTV3UQ8Mz5Ga8Xb10U7OTpbWby9yudHQ0PRy7etvL7vX1Pvu7ivuNdHOTk9a1/T3UU7LzE0Xf/vxU9MQkVjwra2sMPT2f/I\nvrGxsbljY0pT58HK4281MTMzPE/nTUs3Lzw5V+u/w8/rS2/bx720tMK91ePMz8jJwN1rb05nW19r309FZ0dNTUtPV189UW9R42trVf9KV8nZyc7R39XP2be7u7nG3XfjVcrG7+tKQTY+PT1vS1dEPDo+U1PCxsfE92fvyce3srm7y9vrz8PIvcXZTD8+PUk+\nTE5DRzg5O01OT81n73ddd+PK27y9zMjTy8vDzse749fjb2/b12PJX01ZSUZFY0x3W0VVRUlHV2930Wfv91tv3cjOvrzHvszVzcO9w7zH02dHQkdRRFdPRUM6ODlIP07bW+9jX2PRyM63u73AxsjJvsO4tr/C2+trZ09Lb0lIPDk4OD44RkdFTUZOTln338rR\nycjMysvDx76+v73FztXZ72vj59vva19jVUdRSlVVT1tTU0lPU0tfVV3j72dX/1/r39HGvr7IxMfLwcO/vb7T/1NGS0ZOVVdPPD85OUFFVXfrd1lbVXfbyL27vcfM08/Cwb62uMfO/1VjWV1jb0Q6OzU6PERTV11GSUpJZ+vMx8jT49vrzcTBvb2+zdXX3c/V\nztXZa09RS1VVY19VTUNJQ0hXXWdrd0hMV1H349PLysrn1dHNw766vb7L1ePr3f93Z11FPT48QENJU01TRklGT2Pvx8bGyNHV3cfCvbm6usXGzM7KysTLz19MQT09PEJAREM8PTk/QU3/d+Nj7+//09PHwcLHy8XKwcXFvsbXd/dd7/f32fdnR0hDQVVT/3dZ\nTUNNRVljZ9n/b1dVVWvOyr/BxcfMycu/v7/AwL/Xa2dBOj5NX19AOzcyO0Bbzs/ZUUxDTtvAtLW703dZZ8e3rK63b1VKPNnHvrjnQy0rKzJP58PjSD4tNjpVvLi2xFNJPU/Rua6vtstd613Lv8K42edJPU5K3dffZz9HOENTU89n/1lGW0tb09fO3f/nd8rH\nwb7Nxt/Kv825x85nQUo6TFtd70M/NTM+P+vL1eNJTEdMzMC4s8PJX2fNybe0srvP00jjyMi8ytdHOzkwPEVRWUE9NDc/Sffb1+9TWV9vx8LIvdHTa+PDv7a0v91TWUjfyMa+2V9ANjs+Y8vJ00s9NjY+/8a6xONAPkE+3by5scDMXVHZxrixtrzZd0BITl3j\na1tEOTs4PEhOWVVKS0xd99fK18vb08nIu729vt/O18e9vLq/00xBSEhbZ2NXPDg1MjpIXcrva0hAS0r3yL66x8hZ49PXvLm5us3fT2/Z283Ob1lISUdTW09fR0BEPV3v689nY0lJb/fFvsLLZ29N18S/srG7zk1OS//FxsfdRTovMjpMz8/3RDs8Mkfnzra/\nyPdX///Ct7Owu8Rfb9fLu7i6v/9fTUZfWV9bQjwyODo7S0hZTEVNR+fd2cV30e/vysu+u7vC2dP31crDwMbnZ0JGSl/O2d9fPj41O0ZryNfbS0NMP3fby73O0V9b29XDu7u4vszbzcbJxM1nY0JFSEZRRUxAOD04RV9f31dZQ1H/37y3urzb713bxLu1s77P\nT1VX2b68wutFPC42OkXj72NGODk1RWfKuMDXT0tfZ8S8uLXDzuNrz8m9u8LRTk5PS+ff22dJSTlCRURfT/dnQU1IY87Cv8/fTVFv2cW4vL7jb05dyry6t8r/Ojw8Ru/j61k8PC85PUXb09P3Rk9H78u9tLa/zNnM2cG9u7rEzM/dz9vKzl93Q0VKP0k9QTo4\nQDtNZ1XfUVtLTffNwbnCyV9vV928tra2yNFIU1Nrv8LI0Uo/NkBKX8/fX0A4PTlV38+/02tORGNvxLy9vdvf7+vEvri1wsZna1tV0d/fXz48NDpKTu9VTjs5PkJnx8O+zdtPV8u/uLO5v/9vW/e+u7u4zd89RkRJ7/93Wzs5MTs+TNvjb1NJU0znzca+y9Xr\na87OvbvCv+Pn2+vK08vZW11GTllV/05VRDtAQ0/r69Nrd05P39PHvsjIb2dZa8TCv7zO2Vdv/9nIzttnQT82QkdM/1tNQTo/QOPT08Pnb2P30de5tb2+3+/n2726trnO60pNd+vIy+dEODcxPFVX91lJNzdAS9PBxcP/Z0pP0cO+tLu9b29nd8a+vbzTYz9H\nT1fRzedZPTo1P0pj1+ddTUNVTtnNx77V3+NnzMrBvMPC0dvLzsHGy89PT0VCU09fSEo/Nz1BSWtf91VTSUR3ysC6vL3Z5+/jwby9t8nNY2vn48nH0dFMQTg/R0v3X0tCOT48TNnZzdtXU0dIXbirvb/P9+vfwLy+vNvrUUlv79XP31M9PjpBV1/db1dEOkhV\n68HEws5vVUjnyMC6u8ZXTl9XyL69vNlbQT5ISGPdd19CPTc8S07r3V9fRFVrd8XHvr7PytPKv8G7w8bXd87NxcfOzlNRS0VfU11jTEM1O0NGX/frX0tPP13f2cLHydNn52/Ovr68w85nXefjz8rV401IQ0BdU1trSEY8PUhj2d3T51NbWdfFwbvBxdNj3c/C\nuru6yv9XTmfn09N3WTo6PD1PW2/3RkA3PE93z8bI2Wd3Wc6/vLi8yd9b993Gur+/01tGS19j499fVzw6PEFfW3fnTEc/S2fbyMnJ3V9r98rDv7nBz29b49XKxszZU0tHSltf73dTSjpBSEvn29PdWU9Hb87JwsfL3e/v98nHysfN1/9Z2f/n2f9nR0NDSl1M\nVV9LRj5GTlnd/+fnXf/r08PAvMLG19vOzMHAwL7X5/9d3+fd42NOQUREQ05RVU5JSj1MVVfn/9/vb/f308vNx8fF19HO2c/Lzc/v/1tjY1VZWVVMREZDSk1JXV9nXVdja+PXz8rMysrIzNPFx8bGx8zPz9v35+9vXVlTS0xLREdLS0pKSUdIU1dfb+vd09nb\n0czKx8nIyM3Tz8/RysvP2evvb2NfVVVdU0lHTkxMTVFRWVtbXff/Z/ff3dnNz9POy83LzM/NztPf3+vn429bV1dNS05OUVlTUVVXW2f39+ff2+vr49vPy83Pz9Xd49vZ0c/X33dfTlNbVV1jW05HRkNITU9fX1lTVVlV3c/PycrM0dPRz8a/wsHGy9HR0ePP\n093rX1VNS01MZ19TT0pKR0lPVe9nZ/93b2vr09PLzM3L19vb1dHXztfd3W9dWVtTRlNOS0xISkhPXWff5/f3d/fv18zJw8nMyM7PzsnGysnP2dv/a2NvW1VbU01LSUlHS0tIW1NPWWdnWWvv79XRzsrP19/V0dXMyMjFztPb43df9/frb11VTVFLSVldX2NV\nT0xVW2/j6+vd3+d359HMyMfP12dV/8rCztdrXVtj3+dVS0E4QFnfxb7M60w5PUlnxrq5y99VTGfTyb/A32dvZ+/Fu8DdRDk4OkbrwLnJWT40NDdE28TK01lIUVfrwr3G1VdOZ9HBta+4zWNBSffPv7q/b01BO0dn69v/SURCQ1vbxcp3STs8QFPItbS5zE5G\nSU7RurrB0UxKVVvdwMhZQDQxPUrjwLzfUUQ2PVXjv7jEztVvZ9/LwMTV7+vrzb24vMXdQzs7PF/Hyc7XRzo8PkVr91tjRT5T283Bvt1PPTZD2761rbfPZz8/Tf/Ct77O71NKWWfn510+Pz9Dd769wM9KOTY5QtG7vLvGZ2t399fN2+v/U//Fvr293Uc8MzdM\n78S8xOdNPjxDV9nCwvdbWVfrxsPI1U9ASU/ZuK+xvm8+Ojo+/8m/w9lPQkVFS2dfVU9CRF/dysLKa008PVf/w7K2vMr3U13n08G+zufj69/KydNdPzg4PVvGu7rHVzo2OD13ycDDze9VX+PRxcjna0ZK682+tr7VSzYyOklnw73RVUM8PUljz8jd/+vv48vA\nxM5TRktX3bixsLnOVT9ASnfHwsbTVUZMUWPfZ09IOzpX18W6v99FNjI7Vcm3s7vZV0pKU//Nv8vf493bx8HG30U7OTtI67y4wONMOzc6SdvNycj3VW/f3czV62tLSFnEube0vl87MzpJ3cO4vetJPzxFT//Iz2dZXXfTxbzFZ0U7OkFdvrGxts5NPzxA68XC\nwtFZS05d//9dTD85PVPRwr/G/z82NUVn07q2xuNTTF/rz8HD0f9348y8t7zCVzo4OD/Zu7a70Ug5ODlM0cfEzWNRV1vXzs/nW0dFX8u+t7XG7z82PERdyrzF41E/QURHWf9bTFNj3cO6u7/jRj07Rtu6s7K5119MRW/Tx8HF41lPY//b1WtRQTU7U+fFu8DZ\nSDY3PEnrvrnE3VtOU1v/z8znY1/30765u8FjRT89R93GvsLXWUQ/QlXb69vfV0tv38/I2fdbPjtF2762srrZQzg9TG/DvLzTWUxIUVdv1W9JR0lV1cC6vNVVQD0/S8+9u7zOW05IT9vOzMnTX2/dzcrR71NANzlN3cjBwd9FNzZAUWPKwNV3V0pv5+PMzV9N\nT2vPvrW0vNdKQz9I3b27vMdXRkI+WdHP1ddbS1P/z8zZ611FPUfnyb+6vtlRPEBVXdvBxdtdTU5ZWWPvW0M/RE33xL27yFFBQkZfw7i4vddRS0ZZysDAw9drV2/XxL/P4109O0df0cC+yf8+OD1HW9HGzfdTTFlnZ93XXUlLTmvJv76+20xGR1PRwbzAz19L\nSEhX18/X31FHWW/Vw8n3WUA4Q13Ovrm8zk88Pkrvy769zWdPTv/v48/fTUZHSG/Rx8LOa0tDRV/TxMHD011RSEv319HNz2v/283ExMzfUT8/S93LwsLVTDw4Pktd08PbVUtEVevfzctjSkZJXc69u7vLU0JBRuu/ury+901HQ1fn2dPM/1Nb2cvJztdrQT1E\n683HvsPdVz9FX/ffyMfdW01X99vf2/dCOT5DW8rDxs9OPDw/Ucq6ur3TV0xKW9nNz87ZZ1fjyL+9wc/vSD5K983CvL/fRj5DTl3vzM1rTk5d29XV2WdAPkRV58bAwetHQT5K/8zBwsrfX1lf48vR91tOQ07bw7q9x9tFNztH787AwMlbPj9O993TxN9TS1XZ\nysfBxmNIPENX28y/v+9RRURJXdfOzddfVU7nz83ba1dGT2PPvbi7xOtHQEZj2cfByeNOR0tn6+vbd0pBPk3by8bJ51U+Oj9O3c3DwdNZTU1T99HLyN1vZ+vRyMfL41NFSFvTw8C9w9tfSU1da+PR0/dVXW/v3+vrZ05ITmfZz8zO60tCP0NVa+/j3WdXV2N3\n///f92dr78/GyM7T905GU3fZz8rDw91r/3ddWWPd1/fnzszv7+//Y1tZb93r59nP62tjV1NNTFdn9//n299rW11bWWPr28/N1d/dd1Vba3ff3dPP0ePd1etdU1VbV1Nd29/v4+drW1ddb+/3383T3d/3b1dXXWdrb/fj3dv/Z/djXWvn4+Pd393Z/2NfY2Nr\n7+PZ29PMz9vvY11bXV/v1dnZ1etdVU5VXWN3593nd2Nrd11VY29fXWNn693v6+trV1tv/+vb1czX//9nY2t32c7M087K19/f93dnZ2d3b2v/4/drY2Pr92f/7/f//2tva1NRVVtVX3dv7+fr92tbXf/d1dnZ19fvd+d3Z2/359vd08Xv20xVTUPRyMG+/9dH\nSVFOyMXJvf/XSFH/XdvIzNFNSjk/SErP0dHLU04+Rmdjz8fPzll3R2PbRNPn68lZzOfdxtnI2/fnTetR/9f/zf/n3T5rS1fT78HF18tPd0pOZ0/P09/RSW9KT+9TzNvjyVHjVWPV78PRa2c9TT9N/8yutdX/Mjo5Rrmvt8dnOi49S824ucTrPT07d8e/udFd\nPzhMW867x9tXPjpDd92/v8tHOUnr27jL02c/PD/fr7Ouw+c7NUB3uKq1vEI5LTFXzbyrzF80MTVLx7KyvFU7KTQ/Z7K0wMQ+My893ciuuc1XPUtNzLnIxlM+PD7Vxr2x71k9O1FjwLa/40U9N1m+xLDIbz4jNLusp66vzUUyLj1rwau7zDw0MTFrysmw/1c5\nM0VXx7TJxj48MEbKzbG7zdM4Skl3uMG9zk9APXf3xsBbUzs/WWu1uLnERT0wQM3GrrvOTTI1ON+6vbVfWT4xT+e9qr3GQzguO3fCr6/GzDM6P0i+u7m7V0I0Q2/dtsXdSzpEQdXBxLpnY0k632PMvWtvQT5FWcTKwFc+PzRN08ewwc1RNjU877a0rsTVPDdA\nXbmss7VnRDY5Z927r9FjNTI1RdG+sb9vSi9GQ1+5yMTjPj08Xd3HwGtdOkNvd7i6xMtHPzpOysW30fdBOExbxbfAxEg+N0LCw7i13VM2NDvbt7GvyWM/MErdyqq950M2MjRXzLy061EuOURVvLi8v0k9NEL3zbrAyt04SVHRvsPFXVNDRcbEvbrvWTY4QFe+\nu7jZUT00TtXIsb7HSzczOee4ubTXTS4vPF25rba5TkAzPWfXt7LNZzc8PnfDubfKX0U1T2vHtcbOVzg9O2vFvLnvXTw6Xe+6uczjPz4/Tr/BvNlGMi06Vc21ur5NOzA1/8W9rsnVPTY+Sb+tsbLjSzI8a8quqbzTODYyQdPBuLlnQDE9SNW8wsRjPz4599PF\nvndfOzhMTcW6wMlRRDxVyMO0w99FND9O57a6ue9DLi5TzLuuuso8NzQ7y7q4s9f3Nj5KXbuwvM5IPzlj08m3yXdEMT5B773Dwv9CODVZ27663e86OEpVwLy7yVNIOUfJwLK0wk87PEBvwb230Wc6NEpr07a9wVk9NDn/wb231VcyNTtJw7e8vk8/N0n3yrm2\nym88QUrbw76+11FAOFvnw7bHz1M5Pj/jwr2/b044Pl/Xu7vC40JAQVW7ubfBYzYtOU3jvL3BVz4xMU7dybbHzj04PUXRt7i87001TevNtK+7yD9BPl/Iv7m8Z0Y2Q0/Ov8bJWT1APuPNv73rXzs1SlfMvsDXTEA7SdvKt8HLZzpCVeu7vrvnTDMwSNnDt73I\nQTo4PtnBvLXVVzg9SvfAtb3FT0M5a86/tLjLXzU+Pm/CwL/RRjs2TVnIvNPfQDlDSszLwc1OQjk92826u8BdQEBF5768t83jQjdOd824wcJTPTU3b8O7tsn/MTc6Rsi7vb9OPTBBY867uMbrQEdFzL69uc9dQjdja8S5w8dZPD9J28+9xvdROD5b773Cwuc/\nPDxRwbuzuslBNj5M376/vWdJNDVNZ9m8z3c9OjtL3b2/wetIM0tf2bi0vslHQj3nwL23vN9HOk5fwbrDykw8Ozzfyr2701U7OEhVzsK+304+OEnnz7vBxU88Slvdurq311kzNEjvy7m/zj89OT/jw8K+50w3QU7bw7rE20c+Of/NwLe8yv89TVfHvcC+1UU6\nPl/nwcXbazo3P07Oyr3LTDs0OU3Mvr6+XUE/SOPDvbTH0UU+V+/JuL3GW0Y2Q1/Nwb7Pazk+Pk7LxszOSzszS1/Pv8TTUT1ETsK7u7fJXUM9Y9/Du8PRWz4+TtvKvc3rTTtDUffHxcTZSj4/UePLv7/HUURNZ9W/vcTjVz9CVd/Z0eNPQz4+WefN093/SD5J\nW+POytHvV0pN48rIxr/XXVdd48zBzcbOT01VU+/b087bb1FVZ/9rVe/rV1tbY1lVXffdd2vZ1d3j59/N1d/bz2dVWVdjZ2/f2+9dT1VTUW/Vztv3U19bU1nZzdXf4/9nWWPTx8jTzs7vXffd2c3P2+9fSEhOY2fr3W9dT0lNTVVVa+tnX1trY2/d38zL29PX\n09/f1d/K2dvR429bXedf6+dv91lPS1VbTG/db2tXVVFTX1fR09nT1d3vd9PTy8nX1+drVV3r69fR399dUU9R///f0e//X1NTWeN308vn4/9nb+/T28vM/9vn/2tj3e93W1VbUU9TU+tVV2ddZ1lbW1VnUWvfd9nb3ef/3+fNzdXJz9nvb9v/39PdzttvVWPv\nX+/d9/9TTk1Td2Pj1/dnV1lfX+fjzcjX09vZ/2/Z49/3Y+9nXVVn52tnd2v3Z19ba2NT53dv929vXV9vb9nR2cTJ3WP/2d/Ixs3O22tVV2tj9+fr91tMRk1XT2/3Z1tNTUxTX1/Rz+Pb3evn2c7RyszXztPd///jd9/b39tvX05NWV/d2V1NRkNHW+fbzmtT\nTkxj58y9v9HdSGNj27u8ue9dPzpVX8DCwNtCRDxMb8W/zd09QD1K48+6x85XREtO08a0wsxnPk9Cd8a5t9nvNkI/QNXKvN3jPDhIOmvny93j2T1XR03rzsPbv//d22PXa8bPx8b3y1tXR1HR3bvN21VBQzpn98i+13c+PjhR78a0xMJNRT1E0cCussJ3Ozo1\n79e4s89vMzo2VcK/ttddNzE6Ssy8tdN3TDFGRcK4sbNnWTM9d8ivsbB3UTcyXd+4trtfOjwuP1nKub/jODguOlvdtLq+S0E9Nd/Er662zztPPVXEtrG/yTs/RD7n27zP11c6SjhGXc/db9U7V0lI/9W/97/d99FfyefI1crG/9VIY11Zd//D69VdSFVF/1HL\nyufVSE89T9/NuMvFZ1NDQMvRtbvN1UJJPdnKxLnn/z06OUzNy7rrZ0ExOjjfzby9TU0vNj/jtrivze86NlPvsrKvu2dPMURTyLS2uWNJMjZIV7i9uu88Ni0/TL60usBATTtC58CvtLdbS009a2e9wMfOPUo6QVXZwt/MRE9NP2tZzW/ja0jrSd9v087dwuPL\n3d3L58lbzcrTy2/RW+dZU81f41VZSURbQNPnW1lDRTpdScq+78xTd0jry8yzxMPVXVdTysq5w9vrPEQ8/8rBuXdbMzQ2PtHRvM9bOTE9PsC8t7PR3TtJT9OytK/BXzg0Pkq8u7i+UTwuO0HJu7q6SkMzN0TXu7u2X0tIOm9rube3u0pXPkn/xrjCwk1NTENr\nd8bV21M+Tj5ZT+t3TFM7S0hb4+/HUd3vb9F3xse+zOvH98/V09Hb30vT3/fZ7+tRdz5r51X3UW9GU0tHyOPN1WNvW9fju7jDxGdVQlFjzL7O20tDOkBrz77L40c7OTrv576/4282OThdxLuvucpFQUNru7exttVCOT5Lwby4vV9CMzk8z8W/vU5EMTI4QMnH\nu8lTRzpLb728uLp3b1Fj3765vr9ZSkhLX9/BytFLP0U9UUzX52tnPExER2fTyOvRd+vT68jEucrN2Wf3UXd31+9r11tvT1VZV99P29dvXUldR/9r/8Pb1V1fVVvV0be7yt9TUUnd27m3zdtFQDhT3cy4zONHODQ6W3fBz2tONDU0W8q6ssPbQD4/77q3rrfK\nSD0/S8LDtbvjWTc7PmfMxb33TDc3PEzKyb3OU0Y8Tuu8uri592tLXevBvcXISUZARV1rwc/dVTtFP1Pvx8z3XzlBR0rnyL3T21NHd//NwLm/091XX/fd1cTHZ+tPU1VM7+/PX1NjRE9DSk9TV0/P62trW29329+7uMfJ3+dZ09nLucnN60s/SGtvv8nraz04\nNUZdz7/d/0A6N0Pvzbq7x/dLR07GwLe2ydFHPj1Vycm7xW9DNztFz83DvF9JOztH183LvWdMQkBTyL2+utdbUUz30bq7vslJSkJKd8a/ydFAPUA/TuvL3V9CNjs/TuPFyd9rR05j29G8uMjL62ff79fKvsvr31FjVV333+9Nd2dVWU1PZ1tFa9339///Z9tf\n977AwcjRZ2/3Z8bDz89vSD5HSv/K1dtnSDxASVnNyttjTDw/V1/GvMbIb0tEY8y+tLrI70Y/SdvOw73jV0I6QHfj18RvTDw3Om/j3cbfX0k/S2/Cw7u62+9VWePBvr2541tVTFPXycnKd0RDQEZv193fXUBAQUZL38/bz2dV///vzLzAycxv5+tf99PT99N3\nV1tFSP//VdnXX2NNR1n3VXfL5+9jS1nf39m+xM/R/2fj19m/vdnvY05PX2fny+tXUUxATUZO61dPTktASVlb39fv2dvvZ9/MzsbHx8jT69nV3d/V7+P3XW9vW09jX19dVVdjWUtVWV/r/+fN2+//2dnJxszDydt3/3dn49nT2WNNS0tJU2vn23dOTUtDTv/n\n393/W1NOXd3OyMHFzvdfW93OzcTD3VdOSlHv99/L50xJQ0NdW1ff/1dKRUZOa+/Jxc/3/2Nv18rGvL/T2+dn69XRxtH3X1tNV2Nr5+9dSEk/P1drd/fvX1NXTvfP0cjFx9Pj/+vP19PI0etfX1Nfd2Pf52NMT05ZX2P/3+tXV1dX93f/ys/X7933483RyMjN\n2dvvd+/f0c/fZ11bTVFZY/dfU0pMP0NLT2drd2tXVU//39fLz83d7+/Px87Gyc//b19r193d099rTU1MV1ld/2dfSUxMWfdv29Hbd2fd3cjLycLN42vr79vV18n3XU5VT093Z+PrV0dJTUhj3+fZX1VJTFd3zczEzNnrX1tn2c7BtLnZTEA8Re/Iu7/fQDk2\nO2vXwsH/STU1OkzJwrjJ7z8+SF2/trW4z09MV//Fu7q990c/R1nVxMjPTz83PExb0cz3WUA/Q2vZxL/N11VT/9XFvb3L/09PW9/Iys3nTkRAVV/b1dtfQkVCWdnPzudjQ0NT68e/vsvvZ1dd18XFvdnfZ0zOzs3N628+SUFEzNHNb0Q5LzhE673HzUc7Ojhf\nxLe0vstHPU5nurCyuW9ZNzxn57q2wc08OjI8/9G703c+Mjs/58O8utlXRT7/z7y1vcFTS1tRyMnCv2trQExdV8332V9ARkJv3dfRWVc/PVlrz8LP0V1NTU/Gwr271+NFSv/Mvb7G70lIO1Xj08rRXTo5Oj9f3c/NX0o9P1/jxr7JzVdZa//Hv7m7zudRa9nb\nx8rVZ05MT3f///dJQD8/Ud3R1W9VPT9Lb7u4u8TrXz9P3cm2usTdSTs+Vc6/uc9vPTY4Qu/CwL53QzU3SWvHvMXVTElEZ8nJurvP51Nr782+xMTdUUlP39nN1V9MPD1HSd3f428/OzpG59O9xtVPQ0ZPyru7t8zfTUdr18a5w9lNRz9O2d3MyGNOPEBGTd3v\n0eNLS0lj59HEzchv49HdwMvMyuN3WePH0cjdW0hDSmPdztvfRT88PPfPzsXjUTw8QGfBu7zG41U8TWfGtLm/2Uc9P1HLvbnB6zw3OkBdysvMWUQ3OUpb18TM705MSu/PyL7Hze9Z48vCvcHL71NOVe/GyM33Sjo9SFvNzdlnPTc0Qt3Fu7/TTD1AU8m6t7fO\nWUI/V9nGtr/PUT48Rl/Txb/3Uzo+RE3OzMrTSkk/Ue/VwsPOb1N378nBx8LTb19Z2dXLxe9nSEZXXdvr71dCPjhR73fN929LP0NKz7/GwtddR1Hrxry2vsdXSklXy8bFv/9OPEBNY8/T3VNAPjpRd+fH2eNPQ1vryLu9xdlrS1PZv7y7xfdFR0pfwsPCzE07\nNT9f18LJ0Ug8ODpb0ce+zmc/PEnvyre5u9NRPklr1b65wMtERUNM39fJzFVGOD1DV+Pj01tFSklv79nI3+djUdvPwsHFyOv//9vHycLP41lEUV/fzd3bW0U6PE1r3913XURFRV3PxMTE22dJVffNw77H12NRR2/Xz8fN51NCS073ztfdZ0ZGSWfV19PnX0dI\nY93DvsXLW1dRX8HAvrzZUT5HX9vCv8PvSzozRFvvydNvQzo6PlnIxr3LZz5ATWfHury9911OW8/EvrzJ50pJUXfXzMzjU0U9S1dr32tfSj1IVd/Tycrnb1NZ2cm/v8LOU1ld68bIw8dvSD9MY+PI0dVXQT4/X+ffyPddRUFMY9fHy8ffW0xvz8zBv8/dTU9b\n28bOzs1PS0JO/+Pjd1tDPEFI69Xf3VtNQkXr0cfByt1PUV/bv7m5vctbQFHv076/x+dHOztL49XF0Vs6ODo/98nKwutPQUFnz8O6v8ZrTEtj2cbCv9VjQkhZa8/Tz91HRUJR993R53dLP0tj18/MzGNZT1XMycO8x+tRU2fbwsXDzllJQFXr58zb/0c9O0NX\n4+PVb089SVf/y8fO01VPS+vGwr6/z/dNXefJxMnL901LQ2/b2dlvTz88R1Hn29tvT0lBUd/Jv8LF409Xa9G9vb3J90NEW9nKv8fXSj87Q/fPzsb/TT09Q2PdyszTWUc/Ue/OwL7G1VNXa9HDxL/Ea1FIVePNy9HnTT0/RF/v4+NVQzw7TffXyMzrT0ZHb8XC\nu7rJ909j3dG+v77Jb0ZJXdvdyc9vQUE/RWvj999XRT5JX+/XydHbVVljzcbHxsz/W0r/08zK0edXRUlR587O1XdOPUJX/9PO0WtJRERVzMjFy9VRTV3Xyb6/wdFjSUzv0czEz+9LRkJRd93n/1NHPUVKZ+Pf3+9LSlf32dXJy9XrY+fNx9HOye939//V1dXv\nb1lJS11ja1ljU0xIR1dnZ//34/9v59vRzMzJys/j3dvf1dvbz91rW2drU2fv7/9fX1FXU0pjd2dnd29TV2Nn4+Pf083T7+fT2dfVzcvX629v72Pf3+f/W1VNTEtJX11VT1FOTVljY9fj6+/j7+fXyc7JzM/T193f0czf1+frZ1lZWWNrV19TUU1VV1FXW1dv\nVWv/3dvd29Pd2evZz9HX39//a+f36+fj629nV1VvZ2tv62NZU1NZd/f/6+P/X19r99fRzcrP3+fn3+PV0dHb52trZ2dn6/9nX1VOUVFXV2NdU1tfW11n7/fj6+vb2dvX1c7Zz8/Z19XX29/j/+//XV9fWVdRU09ZVU5RUU9VV2v/4+Pf3d/n2c7KzMrM09nr\n99/Z2efj42dfW1trb2dbZ1dNU1tbX19vXV9dW3f36+vf2ePb29PNzs/X3d/3393n3ev/a11ZU1tdU1VTS05n62dfTUlMWf/XyNPj91Vr18vAvcTOb11r2czDwM/vTURNVXfPzudOQz4/TGvXz91RQkRJW8/Fv8jZXUxj59G/vcr3V0tP99nJw9dvR0FGTvfN\nzdNbRT5EV+vKyNtrSUVM98rDvMXvXVNb48K9vclnTEhNZ+vGxutbRD5GTf/T0fdGPj9Hd9/JzG9OP0V3yr23t8h3RkFf28u9t8f3Z1FOX2Nj909FRFFr683XWUg3Oz9M07q5v9NNRE1O3by5vsTjZ//Z2cnJZ1dCPU3XzMfA60M/NjtRb8/Ax3dNS0hO79XK\n1etjd9nMvrzFz1VHTVPrwru/0107PERCa9njY1VDQFdnY9HvTUxDQ+/Cvrq742tTRmPZxbu6wNn3WVXn79/dXUxNTVvPxc7nTDY2Oz5ryMbFx1NCV1ld2crPy9tjzsPJyMprU0E8W93Ov73LV0Q4OUlT38nNd/9jU/fva3dXRE9n476ztLvJSj4/R2vNvLy/\nzE5LSUhTXVlbTUNZ29nO0VNGPDVAWdfAtrjN90dHW/fTw7/Mz8vTy8bP710/PUNP38e8x+9LODQ3QV/Px8nTUVNfVf/P1dndX+fHvr65vu9MOztN78y+uc1jTDs9Q0tf3f9ja3fv19PnY0RCREz327e1u8VfTEpJ58XDvr7XW2dvW/9dT01AP0zZz8bH90U3\nMjlL98i4u9d3TUhTW9vDx8/Z29XNwcPH1U1ESUlrxL3Bx2c8Ojg8U+fr091RTFNRd/dja2dRWcu8u7m803c+PE1n0b25v9tNPkFFRm/fZ1dnX2/Ryc/bSj09QE3Ot7W4xVlKPz9j0cG9vMf/d2tdd1lPUUdBXc3HwsLnVzswOkZT172+1WdJRlVOa9HL49/X\nzsS8vsPdSEVESOu8t7rDY0Q8NjtM79/O1VtRX1Vnd1NdY0ZT3cO9t7nK60E+TO/Zv7m+3VlJS0pGUf9VT1NX/8/M091EPT1BT9u8ub3BY0pEQ2/HwL+902fr59/R911bRT5K487Ev9NRODA1Qk/fv7/P50pITERV3//32dnRvry/w2tPTExT3by6vL3vTEA7\nQWNnd8/rTFFfW/drTE9BPEvVw765vM5TPT9Z98+5tcXOX0hTT03j/1NRVVFZ3dHO1Us/QT5H28C/vsdnVUZCd9PVxr7T59fXz8zvZ2tHQFvRy8XB0e9CNj1HSu/FxdtrSEdOSl3v/1tjb/fOwb/Az2NVTUr3wLu7vs/3TT5BT1//1dlnX1FTa19RW1NBSXfb\nx73Bxt9HR1dv2b+5vsv3X29ZU2f3TU5PT//T0dXvQjw+PEnrwsHD2WNOQ0Zj1dPHw9XZ0dPJw93v3UdBT9vMv73M/z41O0ZLa8TG2W9IS09ETe9dVVlfd8zGxsh3T01MWdm8uLq802dMQ1Hb3+PO61FTY2/b90xOPjg+Y9XFv8PPTjw/W+/TurfAyndVb/9r\nz9V3XVlRX9/X1d1IPz08RtvHxsHOVUtFRG/Z287I63fb0crJ2d9nSUj/zsu/wNH3QDpHU2PTwdf/VUZNVU5361tMT0tZ08fIyXdKR0NKzrm6u7zdX0xFZ93Zz8rdT1tnd+NbV1E/Okvr28y/zt9NPUpd/8u6usbPd2/f/93O3VNZV1XfyMvTYz07OjpPysLF\nxOdRRTxL99vTwsRva9/VyMnZ1e9FTO/MyL2+zlc6PUdNX8vC0/dTSVdXUWvjTk5TU3fMyczbSkJCQlvPvL28wOtjTE3nzNXLyHdf59/X1W9bTTk8R3fbycbXXTw4QFF3zbvCy9N37/9Jwcvd//dv98/LzdFdRz87Pk7Xz8rH91FJRE13Z/fP22/j0czL0+fr\nT0hb08fDwMjVU0JFTllj18rb52dfY19TWVlTUVFb78zX3+dbSkVDS+fO0cO9zN/3b29dX93G1dvNz+dnTlVbTEtn92d37+/3WVFZV09Z7+PVycfGydXvZ11j993XyMfV52dVSEdIT19bWe/f719j/19RUWPvb+vMxcfV3dv/Y2Pf19nOx8XV/29jT09VX2v3\n39nZ/2tfTkxNUVld593V7293V0tOU1lbb9PKytPOzOdna+vr79XLxMzf4+9RS0xbWV1r7+dbU1dPTExVY2v348/KzsrN3/dvY2fv3czIz9XnV0tKSk1TXe/rd2v3Z1dXW2tjb/fX09XTz9fn7+vr//ff08/T0d33Z1lVV1db/93X2d3va1VNTE5Vd9/n3+Nj\nWVtXV11na3f3693Rz9PX3e9rX3fn49XKz9vrY09RVVNnd2//5+9nX1VTWVlj49/TzdXPzdv/9+t39+vr1df3d+t3WU9NTEtKU+vj5+P/U1NTVWvv387Kz9XV2+fZ29/b3+vf593X3etvW09PVVn35+PX2f9XV1VRUVn/4+vv3+NrW1NRV1Vf39XZ1c7V6+Pn\n69/r49vX393X1993Z11RTVFVW+vd4/dbTUlMVXfdzMnGy93r/+//99vP2e/j2/9rZ2dnU01OWVNRZ+vjd2drZ1Vbd+ff1c7Jye/dX19nWczIycb/909b/1nZ6/f3U9X3X1tNY0//1+vMTlVXRF1b3b/R301NRUNvzb6+09tFS0xOw7+/vv9bPUZV977CyGdF\nSTtP69W/4+9LPktI67++v9PfSElfZ8TFzMlfX0tK5//bY1tVQVNb991n/0lNUUnP0czJ/+dZX9vXwcPJ21tnY9/NxcR3XUM9SVXdusHPX0k7PEfvv7rO20hGREfjy8zOY1E+RV3dxL/M1VdNQF/Mz77G0dVVX01f22/X3//vW+v391lJTURV5+/EzN/vTlVP\nZ8jIv87rV0lT/8y8ydtIRz48V9PJu+NfPz08QmfGv7/X70tNVWfKyMrD5+9bd8/Tzev/WU9dVd3T691dZ19R53fd/1djS13f2cXV50dBQULvycm72eNKP0VO3b7DwOtvRktb/8HC1dtMVUhO0crByGtMPUZDY8vNxMzra0hjW//L48vZd+Nv09v/Y05bR13d\n/85nV09CVU1dzN/VX1lRTtvRw7vT3UhTWW+/ury+d1E7P0lrxb/K41dNPUdd67/R2/9IT0lfzM/F319GP05R3czZy2NnW0v3b+PT687v39Pjze9nU0xvY9HCy8lRTURFXWfRwePvSEhJX87Jv833XUFMV926wMTVTz86R1/OvcnZTkVDPlf328n/d05RZ3fR\nzNPTZ29Pd9HPwtPX2VNrW3fP/+dXX2NO2dXZ11FTQUt3/76+zuNKRD1R39O/yt9OP0lK38bMxmNZRUNfd8m4ysxXTD9Cb9G+uc7PTUpJT93f085nd0tX293V7+NjTndf1cXR0W9nVU7v79nba2tITVVX29/jb0xFQl/f0b3Hz1VNR0rjwr+6xuNMSk1dysHM\nzVVPQEhn48bI3e9BRkJb1c7EzutnSVdRd9fr2e9fd1nf49/vVWtMUdvjxsjdXU1XUf/JzMbdb0xKZ+vMwdXfSkpESd/NxsHfbz9FRU3MvsLA31lCSlf3xMXV2U1OSFf33c9nX0xFW1fdz9nZXWdjW9XVztfv31v/29nEz91fTFlMX8vKyONjPkBRTuPBystr\nVT9Gd+fGv9PfSk1JVc/Myc5rXUBMUV3Ly87ZVU9GZ+/bxNnd61lva9PR2dFdXV1X59fO12tnRktda8nKz+ddWUtd3dvF0+9KRk5R48/OzVtPPUFZXdfCzdNXTkFI38/Dvc/fWV9Td8bJy85vZ01fb9vN3+dTS09L99vn0W9rWVN3Y93d699VY3dn09nV/1VZ\nR1fb28bM3U1MU0hvzMvF2/9ITGdnzMTO0VtdR1HXz8nI3/9CS0VOz8rJyvdbR1tf78nV1eNVWVH/39vRb19KRltf29Pd3U1RVVPf383T5+NbZ+fjxc7RX1djU/fNycff70dFT073ydHRa1FARl33zcnb505TTWPPy8rTa1dAU1nfzM7TX01JRGdv28nd32tX\nX2PR0c7Lb3dfY9vOxs3Z/0lRUWPT089vY1FLX//Ry+PrS1FdY9PKzONbVT5MZ//Nzdl3T0g/T+PVxsvXX1lbWdXKzcvvZ09Z59fJyNXjS1FNX9/j2d1fX0tbW//V9+trTl1j3c7L11lbSEtv58vFzedKTENJ79nKy99ZSlNd58XLzfdjU0l3zsu/y9VfU09O\n39HVzXdnSVdfXdvX5+dVWVdv0dXO2V9RRVFf28vT21dLTEdn69fR/3dMT2/rx8XK51VZS1vTysHH0W9JTk9fzs7M2WdHRU9n58/b41NVTFPfzcrH419GT1Vvz8vX21dVR1dnZ9/vZ19NW1/bzNfZd1dTW+vNw8bP3V1XX//PyM3bZ05LT2vZz9HfUUpKV2/R\nyc7VX0tFTv/vzc3ra09ITGvd3dVvWU9TZ+vPx9PbX05VX9nJxcfdZ1FOXd/Iyc3nU0tJTffVztf/TUdKU/fPycvb/1dLV2vjysvRa1lOT1tr6+Pra1VbX11r/9/nd2dn9+vn39vj49/Z3dPf9+dnX/ff3+vvWVdVU13f1dXnb11XU1n31czd93dPT1lv39nd\nd19VTFNn3dfT1etrXVl349/by9nvb2trb/fj183bb/9fV1Vdb2/n93d3Z1tjd+/n09Hf92ddXW/n39Xbd2dRSkxRY/fT13drV05RW+fTydXf3/9dZ+PVzsnN0d1vXWP/7+fZ22dbU1FXZ3fr1e9rZ11XXXfr49Xn72tbV1lrd//d7+f3XV1f9+fr29/f73dn\nb+vv99Xd5//3d2fv9+/Z//d3Y1VVXV134+vn73dnXWt379fX3+/v/3fvd//n/3ddW1tfb11n72//d/9na+9v69vf2dvn7/fb393P2dfjd2NdX11d/2v3d2NXVV1da+/r2+v3a2N3a+vT29nrb1NTXV/v2dnd72dZWWv3383X3e9jX2t3993R3d//Y2dn9/9v\n6/frb1tZXWtfb93f3efn92/vd/fZ3dfd91lZX1/v11v/Rkg+SNHCusr/QjtDQsq5t7//UzpJWce4u7xbZ0E/a9u+xsdLPkY6Z9m+v9PbOUA6Q9e/t8TMQD9EPtvFucDPUThJPXfLv7vV3T9HSE/PzLzR2VdBX0zj0cbG3dlDU1lTY1/PY9HrV/dLV0zd58/B\n381MTE9X2d+9xs3jP0E9Tl/FvMjRPkA5QW/Et73FQjs9P9PHtLXCUzk5Rcm7tbDP7zc2OD/DurnBTTcwOUDMs7a8U0AzOUzItLK6U0U1MkrZubK3WTw7Lkvvu668xD8+ND3ju660yUE7OzzTvLO300g2PDd3y7y61185QD5byb+3zd1JQUxF0cW/yOtVO0hE\na9vVzP/rSk1RXfdvyevL12vnW+tbz9fTvdfN71dJV+vvws7nY0E/PFlvxsDX5z9DPVfdzLjG0UM+PkfPzbzC1WM8QUPbw7q5z2s6Pj5dvLm1x1U3NDxNvLa0v01BLzpDv7a1vUs/MDZH3bSzt9VENzVG57Ovtck/ODA9W72yu8o/OzU5Xdm1u8RMPT06d9e5\nuMPLRklFWcy+usfOSkhKR+fbyN/nT0JPSGdf5+dv21/vd9/Xa9lf3dHj32/rT/9d68XZ0/9nSExjY8PJz+NXTT9bV8+9zdFXTj5RX+e8y9NfRDxCZ2+9xM93Q0M+3c28tsvnQUNByFfXudVfQTY6SMXCtsJbSTQ9R868tbnvTjY8R8+0srDNTjo1R2u3tbnL\nQD4zPU3Tub/LPz45PlvXtr7C70FFQl3dusXK1z5LRVHdwbzXzkRHV03j3cXv22NJa2PV28/3a9tTb//r1///Sut3a99351FnSWPL48rO42tRVVHTys7La1VETUjnw9XMa04+TVHru83K/0k9Qf/duLfG1UdIPuvNv7PL40g7OU7VybfMY0U0Nkbfxra85002\nOz7TvLWx01c3NT53vLizx1FEND5TyLm5wEhCNT1O1by7vl9HPkBP2bq+vN1GSj9R77/DzNE+SUpN69G/3cpIR19R39fEd9/vQldLXe/Ra1PXT2v/a+Pr1U3d71/R79Pr12vnx+PN1ePra29Vz9Xj21lRRVdJb8j/3WNKP0Vfd7y/y9lLSj//68a50dlPQz5b\n0cq3yd1POzlH38q4vddbOTo868e4ss//Ozg9Z8S/s8NbSTU8SdG+uLtdTzc8SeO8ubjTTj07QVfDwr3TRkM6RlPBv8PJQ0pDSmfXvcrGS0ldV9nOu87M40djV+/ZxudZZz9VV13f19FHZ0ZK53fN0chXZ+NN3ePOz9NvTd9v59Xd13d3SGvjY9n/71NjWVnJ\n49vfZ1tM91vPxdvTXVNDXf/Zv9PTa0dCTffZvL/O40U/PmvVv7rOdz46OU7NzbrF7084O0bdyLu8/188PUrrv7q2xP9EQElvw725yVtEO0RRzMnFzkdHPD9P78HJxU9JS0r338HJy9tFVU5r08HI3eNFT1Vf28rGY29HRWdd1dPIb193Rvdv2c/V6073XWff\n99Xn509X22PZ29Xv72dPztPV0e9vTVdEY83jzOddR0pOV8bNyc9VS0JPXce9x8djTUZR68m7vstbRz5E792/vtX3Pjo6S93LvNnjRTw/S8zDuLzfTz0/Ts7CvLrjWUA+S93JxL13U0I9SlXLycHvTEs/T13PxMnJTktJS+/Ows3OWUtTT/fVxs/da0lbW+vT\nzMtra0dPW2ff3dFXWVVO72/f2dl3T3db59vZ0d3rTtvT083T0XdvSVXN0czb91NJRkXb29PZWU0/SEnVwMbLa1dJSVvXwcHF51tJQ19rxb/Iz0xBPEZv07/P01lCP0Xr08DC029FREXv08nB0e9ORUpv0dfG1eNdSFlf0dfLzv9vS19r6+Pj0WNfVU///9n/\n2+9bX1nr79vj5+9b///Xz9HN499VY2vv19fO/3dPS1tVd+/n71VOR1Nb/9nVzndvV13//9nOyeN3a1v/Z+PMzd9nX0xbVVnd62tZd1FTZ//R08vv/3dPa2vjz9F3zt9TX2dv19XP93dXVWNf393Z2W9fTVdXb+Pv12dfT1dnZ9/f1eNjY1V3b9/R189371/v\n393O0893a2db///f2dtvVVdNVVdv5+vjV1lTWWvvz87P229rV2/rzcfNz/93VVljZ/fn2/dTS0lVa9vX2dlbVU5Zd9vT1c5jX1db9+fR1dNvVVtV//fb0dvbVVtXX+vd1dvnVU5VV+/r19Pfb05ZVffn2c3b3VtbX2/n18zV2+dfZ1/v29PO5+9XW11f6+/f\nd2dXTFFTZ+/n4/f/V2Njd9fZ1d3bZ2d3b9vX19Xb91dbV2tvb9/r411VU1N3a+fd29NOY29TZ03ryM7D1ddMSVFI38PIvdV3STxJRme+xLzZVz06SUzVvMbBTlNJPuf/w7vT2z5KSVfIxr/Da+9DV//rv7/M00RXQE3Rz7/Oa1M8UUhvzNvRS1FGQdvvxsLj\nd0NLa2vEwcbTT1VDW87Tv8jjWTpIQFfEy7/fVUE7VVXNusnLR0c9Qu/GvLrTaz1AQ1fLvcHCa107RUxfyL/JzVNVPk1r48rn52NRX0v349vXd/fj/9tj5+9Zd2fnw9XI/2dLSmPfxbvKy0ZLPkD318G821s7Pz1Oz8jEw2NXPUld/8a/v8VXT0JT49e+xM9r\nSVFDb9nn0V1bRkzvd8/Xd19JT3fjyc/Md1NRRvfN077X60pDSFHVvsbCY1U6QlFdwcHG0UdEOkR307q80VtBSUNbxsm8zndRQVtR773Mv+NdTk93/8/I3dNPXVdT42v3d1d3UW/bb9ddU1NT29vKy+fbREtRWcLKxcZrUz1GWe+8w8lnS0Q7TefbvM3ZWURE\nRV3Ny7vb90dKXVnZx8/GU2dNT9lv285390tnY+vPd/9TTl9T18/VyllTSUbf48m9zt9KRkBVy8e9v99fPT9GX7u+usBbRDg9Udm2u8JrRD43SN/TucbbUT5CRF/CxrjJY0ZDUVXTvcvEWVNLSHfvz8p390ZMY1nT0+9vUVtVd9Xnz+tbV03v2dXE0dlbS0tT\nz8fLxvdfP0RRXcnCzM1RSD1HZ+O/wdn3RUlIW9XXwc7vd0RbWWvO18lvW/9V2+vn02frY2vT583r929KX1tnytnPd09CQVfX073L10xGQEfXwcO722s+P0hvwLrEw1FLO0Jj48O80d8/QDpG3c6/vfdZPURJd8TIw8tXT0BZ787Az9FTRltK48/TzVtdTkfv\nb9nP629GTVtVy83GyFlPP13Z37/KzmdJR0Frxsy+zedDQExOz77Kwl1TQkZdZ86+2dVJS0VKd/fMyu/3S2tna9Xv2dNb42ff4+PZW29bT9nnztNrXUFLXWPGzM/3UUU8VdnTv8nOUUlGQ9nEy73b60dFS03Tv8vGW1E9RGN3x77f60NIRVnO1cnKZ1FBWWvR\nw87NY0xTS9nTzMX3/01GZ2POx8rNUVNGR9/bwsXZWUBOTl3Jz8bbY0U+Wf/TwMnLUU1GSd3Lzr7d50hLU0/ZyNHLWVdETG9ry9X3d0hZTm/d69PnX11O6+/Xz//dVVPrb87X2+dTY1Nj0ePP729KRFld48fZzFldSEbr1dHB09VNUUhLzsnKw/9ZQEtZ98LD\n0dlNT0Fd39XDzudNQ05M38/VxmNbSUj/b87J19FTU1FT09nIy293SE/v78nT1V9LWUtrz9PH7/9CQmdb08XTzFVXQ03X3cvA1ddHUUhTzNPGxWtVP05Xb8TV0f9OST9nZ9fE3d9RSl9P1dfXx2dvZ1fjZ9Pb49VRa29d0XfVXVlvUd/T585j701N92fVztvR\nTltBStnjycXr/0VRS1/FzM3OY2c/X2PXws7NY0pXSNvd3cT/91FHZ1PZ2dvPU1NJStn/yMvv70VOa3fH08fvV1FCWd/TxNfXSEVPR+PL08X//0JFX1vVwszHXV1DSdvZyL/X50ZRT13L083NY1NBX2/nyc7ZY0tXSePX38jrY1lHX13dzuPTZ1FZTevrztN3\n705V/2fO29PVVV9TWdvfzNvjW0hfa2/R389bXVFG59vjx+fZT19ZXdfN185vZ0lb73fO0e/nSU9KW9Pr1dlXU0VTX9nI3ddnTFdM29HNw+/vVUhnb87LydNZU0hM79vHzNfvRExRV8zPyNNvSz9N/+PK1c1jU01Hd9vbx9fnT01VV+PN283rZ0pZ93fXz9/b\nTT1RyNXv2c5vd1Nna+/na91vV/9d32v332/f/1/Z/+dr999jd/dr32N3XWfrU3fdZ+dZd3fv51vv2WfjZ+Nv69v31+dr3Xfna/fXd+/vX+tfd2/j12d3/133W9/n699f9/dZ/2vb7+d3W3dnX+fv22d371drb2fX699v/29VZ+fv1+/fa3dnUevj99v352Nn\nW13r4+vX6+tXd29n4+fv1XdnU2drY+/f5+tja1d3X13d5+/vY3dbd3d30dvv4+/vXefv79fv6913b1v392vd7+/vZ3dd52t34//j/2/3Xe9nZ913//f//1vvd//b/+Pr/3dd5/9r3Xfr/29rW+dvd93/92tv92vja/ffY3d3/+f/5/dr62Nv39vb5+NbRlNX\n/+/n72/nWV//b9/f2/9j/1Nn7/fV2dfnY3dbY+Pn1c7Xd1t3V2fd69Pf92dZb1dj2/fX43dfXf9b/9133/f3b1v/WV/fb9/j629f/19n43fn9/f/b99fd99nb1ln08TJb1NNRFH3x7/L/0ZBREvTwb/Hb0w9P2PVwrvEb0xFPVnHxLzJa0o9RU7vvsPK70w+\nQFPfxL3N609GRlHLw8XHW1FIR2PTvb7dXT8+RWvGwr3dSUc8Ru/NvcHVVT5ARWPCvb7TVz48SG/Dur3MTT46PufFubjOUz09QFu9ur3NT0M6SPfPuL/fW0E9RGPGv7zKTz87PU/JvsXDZ0xTWe/Pw89VSD1H38y7uMhLODY4S9PFsrzfVz0/SV3JvcP/XU9J\n18TGxvdJPUBEU7m1u71fPDc5Rue5vMXPTEdHXd3Vyf9TSkNn18i5w/dAPDtH2cu6uO9fRz5JXc/KwdVJV0tPyr/EzV8+Oj9L1bW4v99COTlFZ7+6xdFMRkpVzsbG11dHO0rn07m4zW9ANTlK2cS0u9VdPz1Jb93OzltRTFHOvr6/3Uo8Oz9vvLu4vldJPT5O\n98rIx+dKWWNvxsTXX0Y4PvfRvbC7zEs4NTx3Vb22xd1LQkpX39fTa1FLRuO+v7zFWUQ6N0Tnv7221V9IQERP3dnX209b59nHxMt3QTo6Rtm/srTBVTs3N0vbyrvJ401DT3fTzc5rR0c+V766ubnbSjg2O0/AvLW330c+QElrzM3Pa01TY9XGx8lbPzo8TeO6\ns7rIU0E8QE//xMLb3VFO79nOz+NRPz9AVb24t7vfPjQ2Pf+9urbDWz89SGPXycz3Q0JNa8W8vsVVPjU8TWu9s73GVzw5PlHfvsfV51FOW9/O2d9RR0RI3by5uMpbPDc7T8i/u7nrV0VCW/fb09tOP01v0b67w2tENTRGZ8ixsrrjQTc3Q3fJvcXXWUxX99HL\n3WtGQTxNxby5t89RPTU4Wc/GuL3ZXUlJUWfn399OR2fjzL7AxVk8NTdL37y0t8RRPjw9U9vHxdV3S03r08jG40lCPDt3wLmzuc1HNjQ6b8K5tLvjS0RLWf/V2etKSVf3ycXGzUo5Nz5R0763vtdNP0BIVdvB0dvrTGfbzsnTY0Y/PUvXubm5wl86NDhLzcC8\nuNlPRURda+fP10tATF3Tv76/3Uo2N0RfzbS4vs5KPT5GXc/K29tjU2PdzNXnVUE9PFHFvbq601M9OUXnzse6x2tZSWPd3dvVZ0JBa+PIu7zJbz0zO0dnv7S5yFM/PT5T2cnF129LU//TxcvfWUU8PPfCwbm/21k8OEr318e6yGtXUWfr59/fXz5Ka9vDvr/M\nSTk4P1fVubi+3UdDP0r31cfj519Hb9XMw81dSD43Rd2+vbe97z83PEzTz7652VlKUffr2dfbTkJMZ8++v77fQjs8SFnVub7E40lFSUxnzdV3601O2czHyd9RQj08TsG9u7zRSTo4QuvLyb3IZ01Ga93f089nQUFT/8K/wcRZPTY+S2O/ub/FY0RCSFfjx9Xj\n71Fb38vHze9MQT1B28K+u8l3Pzk+X9HVxb53XUlR29PX1dlVPU9n2769wc5JNzpDW8u4u8JrRz9DWefIx9//Rkpn18XF1WNJPzpZyMe8vtldPzpHb9fOvcpdUVNr39fZ2f8+RmPrxb+/yFU8OEBX17y8wttIRENP79PI6+9XQmPXzcTK/0lAOEfJw8C5xu9B\nOj5L1dnCveNPSlHr59PZ301BS2PVv8G/40Y9PU1jx7q/xmNLSU9378vd9+9NU9fKw8rbX0M8PE7Gv7y9zE86OkBr087AyV9JRmPd187P6z09TWfHvb/Ab0Y2PU5dxbnAxmdGQUhv38TL519HS//PxMrNV0M7PWPOx76/0Uk+QUz399fA53dba9nb3fd3Vz9R\n69fBvsLVTjw6TmfVvsLLd0lHSe/bzs3vWUVFb8m9wMz/RTw5SsnAvLrL/0A8QWvZ0cHRX01Nd9/VytfnRD1MX9vBvb5vUT09SWfMwsXRWVNNV+vd2etjTUVZ1cbDy9FvTD1B59PRw8PPU0VPY+sf\n--seconddivider--\n\n--foobarbazola\nMIME-Version: 1.0\nContent-type: application/atomicmail\n\n; This is a a ATOMICMAIL message that contains a survey.\n; If you are reading this after receiving it in the mail, that\n; means that your mail-reading program needs to be upgraded\n; to know how to run ATOMICMAIL programs.\n;\n; If you are reading this in the hope of editing your survey\n; before sending it, you should start at the END of the message,\n; which is where you'll find the parts you're likely to want \n; to try to edit.\n\n(setq newline \"¥n\")\n\n(setq global-survey-qid-ctr 0)\n(setq total-questions 0)\n\n(defun nextctr ()\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1)))\n\n; USAGE:  (survey-multiple-choice \"Which is best? \" '(\"bar\" \"baz\" \"ola\"))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" of \"\n   (int-to-str total-questions)\n   \": \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (car\n    (car\n     (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n   newline))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (getstring (informative prompt) \"\")\n   newline))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (int-to-str (getinteger (informative prompt)))\n   newline))\n\n; USAGE:  (survey-boolean-answer \"Do you think I'm sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (cond ((getboolean (informative prompt)) \"Yes\")\n\t (T \"No\"))\n   newline))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun surv-pkg\t(q)\n  (list\t(strcat\t(int-to-str (nextctr))\n\t\t\" (\"\n\t\tq\n\t\t\"): \")\n\t(informative q) \"\" \"s\"))\n\n(defun surv-pkg2 (q)\n  (list\t(strcat\t(int-to-str (nextctr))\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (sexp-to-str (car (cdr (car lis))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n; USAGE: (survey-simple-form \"preface\" '(\"foo\" \"bar\" \"baz\")))\n\n(defun survey-simple-form (preface qlist)\n  (formatfillinlist\n   (fillindata\n    (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n\t  (mapcar 'surv-pkg qlist)))))\n\n; USAGE: (survey-complex-form \"preface\" '('(\"foo\" \"i\") '(\"bar\" \"s\")  '(\"baz\" \"b\")))\n\n(defun survey-complex-form (preface qlist)\n  (formatfillinlist\n   (fillindata\n    (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n\t  (mapcar 'surv-pkg2 qlist)))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval\n\t(cons\n\t (car (car qlist))\n\t (cdr (car qlist))))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((eq 'survey-simple-form (car (cdr (car (car l)))))\n    (plus (dcount (car (cdr (car (cdr (cdr (car l)))))))\n\t  (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to cc subject qlist)\n  (progn\n   (setq total-questions (qcount qlist))\n   (sendmessage\n    to\n    cc\n    subject\n    (ask-question-set qlist)\n    NIL\n    0\n    T)))\n\n(defun maybe-displaytext (t)\n  (cond\n   ((equal t NIL) NIL)\n   ((equal t \"\") NIL)\n   (T (displaytext t))))\n\n; This is the user-generated portion of the survey\n; Be careful in editing this, because you don't want to \n; mess up the LISP syntax.  (Be especially careful if you\n; don't know how to program in LISP!)\n; Note that lines that begin with semicolons are COMMENTS.\n\n(maybe-displaytext \"Thank you for your patience.  I would now like to ask you four questions about what this message did when you tried to read it.\")\n(handle-survey  \n     \"nsb\"  NIL\n     \"Re: blah\"\n     '(\n       ('survey-multiple-choice \"Were you able to read the introductory text?\"\n      '(\n        \"Yes\"\n        \"No\"\n        \"I don't know\"\n      ))\n       ('survey-multiple-choice \"What happened with the audio part?\"\n      '(\n        \"I heard it fine on my SPARC.\"\n        \"I saw a message saying I can't read it because I'm not on a SPARC\"\n        \"I saw garbage\"\n        \"I don't know\"\n      ))\n       ('survey-multiple-choice \"What happened with the picture?\"\n      '(\n        \"I saw the picture just fine\"\n        \"I saw a message saying I can't see it unless I run X.\"\n        \"I saw garbage\"\n        \"I don't know.\"\n      ))\n     ('survey-short-answer \"Do you have any other comments?\")\n  ))\n(maybe-displaytext \"\")\n\n--foobarbazola--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.8.msg",
    "content": "Return-Path: <dbc.mtview.ca.us!mrose@dbc.mtview.ca.us>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA10321> for nsb; Sat, 5 Oct 91 19:14:36 EDT\nReceived: from fernwood.mpk.ca.us by thumper.bellcore.com (4.1/4.7)\n\tid <AA29702> for nsb@greenbush; Sat, 5 Oct 91 19:13:19 EDT\nReceived: by fernwood.mpk.ca.us; id AA09802; Sat, 5 Oct 91 16:12:20 -0700\nReceived: from localhost by dbc.mtview.ca.us (4.1/Anterior/SMI-4.0)\n\tid AA22354; Sat, 5 Oct 91 16:00:42 PDT\nTo: Nathaniel Borenstein <nsb@thumper.bellcore.com>\nCc: \"Stephen A. Uhler\" <sau@thumper.bellcore.com>\nSubject: Re: near closure on audio stuff \nIn-Reply-To: Your message of \"Fri, 04 Oct 91 23:13:17 PDT.\"\n             <14836.686643197@dbc.mtview.ca.us> \nMIME-Version: 1.0\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\nDate: Sat, 05 Oct 91 16:00:40 -0700\nMessage-Id: <22353.686703640@dbc.mtview.ca.us>\nFrom: Marshall Rose <mrose@dbc.mtview.ca.us>\n\n+vt26mvx613r4Xh2+mTt3Wxk3edkXN7fae3v62Bl/m5xYu54am3+7nFwb/N3a+N2X9xf1W5v1UnK\nXmffTMxcaW1x3fRv29rY2vHl4vF1al5/XWpeX/Bjamx76Wpz9OjnbXv7ZHleXXJt9X7u6uzn5+r/\n4vP2dWd+ZXRr/O987X303fzu8vrdfet++u569253+O3venJsZ2Vvb39rZ3NufG54em12bXJ5dvx+\n+//z7vH07vPn6Ozu7fHp7vT2a29pZ3B/6fvx6/L09vp9bXF5cPno6vh8dvT4dWRoenNuamttd3h2\nbnJub2948PLzeXj4cm398efl7+Xm6+P0+fPz7PnvbHVxZ3x7fPLp4+jt7XtsaWJocnh3df5rcHh/\nfnVrbG5x93t9bX328u3z8Pnt9Pjs7vTw6e36fXx5+v1tbm5nfHf5e+/v6+z173ZuaPfvdffy+H5z\n+f14bn70fvz8bG9hZHJy8HZzcGh1bW789uLn6ubj4+3tev5vbGxobmpteu7y8+Xp6eZ1d+//fnv+\n/nR+dG5yfXvy+vjq7Xx+fGxramt2+vt+fPbs8fV9/29jZGhvbWdtf+zs7+ji5uPp6v7t7Ozte3Vs\neXVrfPH7ev//7vtnbmxr/nl8dXJ4cu/t6/X+7nl5aGl8evv5eWpy++rse3pz+O77bG1wd/Hv9e7u\n6/X87e7Nw0kxPf60tH8/PGu/uMBQOT/jxstNOkDfvr78P0Pevv9Uc0949+LI22FtzNdZT2Dg8VZY\naM3O5OxXV2f/6/FrWWNw59jb3fD36+zl919kafx88v1jbPTk62tdW2RtaGBt79zsY2v83dvo7m5o\ndm/m5WtnaOnj+2Zz3NvuaXjx7v57dXv0eN/peGlYaXzg42pi7ONeaWBXaGzs2OZxZmvg5O5+belq\nV1p5zcvtY25p4u5nbF1dftrfaW334ebt71ttdGh9+uz29Wni3/p6Zuj/bfRna1xe/fPu5v32ZmX7\ne/9vbGp56+X+c/Di1+XsX130aufidvx2831sZ/fsd+jq+Ghh++Dvbl9t6eRoW2zp7HD+dm/l7+7v\naW/s8N7tV2Nx9ebmdG7v/ufmbF5geuprcnJh9PTs7+Xq+93/bPBpe3l2cG5wb97X3//89ezxYHJp\nY2VneGFiXPTc5/Vf5Nrf6WL4+fr89vph8955+mtqXVz+b2ZbaODc6vvt+Obk5Nh0Wm5v9Ppu6e/u\n/W5u9/R17m5n82Rr/HPg2u7882bm9lzsX19uXN3zX2t+6nV9+t/pd+F6fvl89HngZmVvZO/i3nFm\ndX7X9GJl8tly9/5r+m7k9m5qc9pwYnJr5elsW2RvbOf1/mpw7vnoallo+uDi6vbe2/75/+LxaPdu\nZWpu6uxjZWRb6dt1aWPz2nv0/mt/+uXpaGv2a+rh+N9rb/fx61xbWHD69/xy+PzT33X2b996b/5l\ncH1g4dpZa+bl3nRdbd/xanr+ffbv72VibfLr9u3r5llo+mftZXZwevl46/Tpd+/gandfYPFz7+fi\n32/+7dz6Z2xr3/n3bF5/Z2387OJqY3R1ZmrwaPrp7u5p6eHf6/rzff516m938G/7am1/fXv5fmRd\nX23ve2t7d+Tzb+no3d/t7Hfr7XFue/748npubP/x4PhfZWXy+G1cXXTo3/H6ceDf5eb97mZu/P7n\nZmdsb2xie//7+nbx5PVwfX75dG/59enj9Oze9v5oZ21scl1s935saux47Oh1ZWfc3d7rY2365enu\nX1jx7tzsZlpj4vDb/F1qauzfcVto6eh9bvjp4N/t+V9u8HT6a273+PH8eGRt9+zqf3j+a210++n2\n/nHy73JiXHLp3d7f6XZ4bfbsc2xcZu9tbm552dfe7/9+Z11e/u7qa3rxY/Xw/e/36XdqWWTx/+Lw\n7+trcWpsaGr679/s/Hp94ed4Zl588+/4Z2b43d3i8mn35N/wbl5f9XJucWBke3x3ev729X376/Hs\n5uXnbWRu9WxfX2fd5/76d+Lh6n1sYmj37/RvdHrs3t3sam7r7W5gXG78bXV79fh4+erk/mleXvXe\n7297/ODd82dlZPng5vFdZ+7i52xtbW5hYHRscH3/5+x2en5x6+V3cXfs3+t4+efb2u9za2dqZmL4\n6OnqaXN6XV525u5wanTt/mZp/OHr9eZxdHRp8f56eWdw5t3z+Xlv8Xzp7Pr6YWr05XtqZmj06+t6\n+mto6+z8amNv5eLna/3e4uRzZHrycvrtbW1dYO79Zl9q797ucmpg+OP17ev2b23n3ejzfujqd2Rg\nXmJvd/X8fnt+7vjt4/Hl7n15an1vbWpv6fh8bm11++jt8/dtanns5u78+t/j+XJhZGn28P5vXmh7\n7PN2bmVs+v/18vzv6ejrdXP98ODufXh55uVvbXf4/GxpZl9sfeze7PXp7O7wb2djX2ViYG50ennu\n3OLvb2367vh39/Po8fv5/ebs8u39bGdiaPF+ZWdq8uPn7vN66OP9dmdmd33p7ntpXmvv6vtubXl9\n69/td3f77PRwaWp28ubk6fRz93xtZmdvbH77/fZ3evrs5evvfXRvbW93/fP1eG999Pn6//v4/u96\neuzr8nx6a21sam1vdHv2fnf/c29veerq+Pzv6N/e5ez/8/pqaGBhb3X8+3Jt/fr9d2tta3J9+Ovt\n5+Xk7n75d/f7a3F2dXh8d/H0d+z9cGxrdvjn9fd4+vJt9PTyfmpvdPN0bXP86/P1/u3rfPN+6ud8\ndGp7/fn8enxwdv36eXN4c/f5a2ltevj7cm97//13evbp4ePl6e16aW9sa21pc/x6dHt/7+zy7v9/\nfnFxbv7r7Pl1cPvz//v27+799vf1e29sbunsenZvcmxqaW56end6+Pd9++zg3+L1dHd69fr6fnh4\neXJpaG52dX/5e3B27eno5u3p7fx3aWx7cHR9dvT3+fT8+Px8bmhla3R3eHX15OHgfWpsbXj+c3zx\nf/tve/9naWv4/mz86d7m6Ofr5/N6b3N79+7z7/p6eHh1bmplbH/3/Pz/d3Zzb217/HZyePLt7uXt\n7uh5+/F6c2NlbWhv9e3td2/17O/8dvDsfHhwfu708vdwdHr76+rxfXP68HhqZWn58X1qanf36uvn\n9m5uc/f+cmpu7Ovv/3Nz++zy93ZrbGpyb2x69O7r6urw8PV7e/Tn6/ptbXn4735zc3Z+enhta2dn\nfPX6/vrx6+//d21vdff3+u3t6/L9e3d2fez0f/j29vLxc2tvcHRzb29rcX74/O/p5ej59vf19/v9\n/np7enZ2dW5sd/n2+v57+3VmaG/7/Xdzd//y5+Xs7/r27fN5ZWBqfvf6fvr27uzu9m9tb3dzd3Vv\n9Ovu+3J5+n/89fX4/X7u7/xtY3J3dH19d3z9fP7x8/v37/d8/vX19/V7cW5x+/Lz+3hvaGl0dXf5\n6uftfmtoav7v7vP/7/Hr6Ovxffz58vl6d3T/fXtwbXJyc3Jvbnb6+HtpZm58+O3n6Ort7vD9d2xu\nenr9fHZwcXj+9/v37ezq7/XvfnZ+fXRqbH72835rb378dG91bXT++e/s7vx5/vLt9/Xz+Pr07+3y\nfnx5+HxxamdrbHBtbnp4+uzn6/fv7fl5//z1+vj6bnf49/bt6/T/d/p9aGloZV1bYWZve/jt7+vm\n4ODg5u/3dnr29fp3e/bq7PZ7cXJ6/2peYWJodnz9cnPx6ebq+Xn+7/P5fHh2b/zu8vZ8/Pbx7/x7\ncnZ6dG5oanv19vv88enr6On4+3x0dX10aWtw/Pt8cm5vbvz59ff6+PPr6+fq9vj+f3BscnL98Pj8\n/nl/d29sZGx89fL6+vr5+fl7/vr9+vz7/3Z69/Hu8fb4+nV4dnh9d3R8/Xx4cG99/f14c3l4/ffx\n7e7/d/779f13cHV+fv/+8O7t6/R4bWx5+/bz8vb3fXJ2dnp2amVt+vb47/H49P1/f3Ftee/r7u7t\n7ero7fr8bmZnaWttb3l4cnFpam777fj27Obk5+zv+nz3+3Z2dvvx7u79eH54aW12/PRwZmpv+fh7\neHFubHT67vH9++7l5ujq8vZ1bmxnb3Z9fXVzdPXv7vX5/nzs6eXg6H1saGNeXmZrc3d0fPn2+fbv\n7/P8/fv3fXJ+7ePo7/Ht8P758/L5enVvc25nam1tbGlrdnp0eP7x6+Xn7vPx7u7u8fj19X9zdnx6\nbWxubXz+cWdjaXzy+337f3/9/vX2+fbv6Ojv9/T1+3FpcHZ2eX35/nt++/Lu8XVpZWV6+PLz+fp4\n/fL0fHj+9Pf8+Pv29vTu7n9ra2pqd/71/XZzdvnu8H13ePXv+Xx0e/Ls9Hd3fXx8+nt4eHp+fvvv\n6+vyfnv/fnhzc29rZmlu/vbz7Ozr7vH5f3pxbXB8/nx2/e3q6/t4enn/dnH+9/P8fnlxbnJ4c3Zy\ndHR9/fnt7Onm5e52eHdze3dxamx+9/X3/Xl89/d+ev75/P747/D2/Xl9cmxwe315dnrx6/D9fvf4\ndm1tdvp+/u/t7e73/fx4amRjaG54fe/n6+nq5+j5b2//fW9tcXv07vN9eP73fXz/+PT+cW1ycXV1\neH55b2xtd/15+unh5fB9eXd1b2559/P8d/zx7+/z7fD6fHB49/Z7fH/6/21teX17d25uc3R89u7r\n7fHy8/j2/nZ7eHRzdHl1d3z89PX49/b3eXF69PD0dm14+npyfvDv8/T49fv5+P16aWJnbG9vcPrs\n6+zs8/32+3j36fJ4c//y8vX3emthYm379Hpua3J4/PLu7O30fn/3/Hh2+PL9fnFv+vDz9PPv7fh+\nfHZ2eH/+eHVzcXZ9/nhxd3v9+31+/vn4/f758fTu7fH8dHB1/PT4d21tcnV6fvrx7vDv8ft9fPbz\nfnFtbGxy/Px+/vX1fX5+eHp++/Ds5unq6/p+cm9rbnBvb3FycHZtbXB2+fDy9O/6fHt98/Tu6+70\n/n58+vn/d2xoa3FwcXn57u3n5+30/Xp6/nh5eHV69/f8/P/8+/v59/56dG9sbXV8+/Ds7fd4d3d7\ncXF8//f7dnR3/v779vf29vLu7evu8/j9fXV0d3l2bGptcX59cXJzffTv6ujr8X53fH1/d25uev96\neXj9/3JxeX7++fr29PXx7u3z+fz/cW5ua3JzfP12c3749vz9+vXy9Ozu9/3+/f/593tzdH5+cm5w\nbnjv7vp8dnV8eXf8+Pb08e7x+P5wbGttc3J49fLx8e3t9fb4+Prv8nl2b216/Xtvbnf//np1d3r2\n7+7q6uv9dHJvbnF7fH18d3b69fP7fn1ze/7/9/h+cnr5+H17+vLv9e9+dnlvb3R3df3ye3Z2cm5w\nfPfp6vHz7e3t7/n9/X16fHp4eXFpa294/vr/e/359/n2+f3z7O/x9vnz8H10eXJtbm5sbXJ+/v95\ndXh6enn9+fn18ezs7vX68/f8+f/9/fP6dXd89/tyamlqbnd97+3v+399+vX3+3Vsa250eG9vfPv0\n6+zu6+rx/P94cG10ff/+9PH59e7x9vp3amhufH19+Pj9/nR88ff7d3l5d315+/l9d2tnfu3o5+7z\n9/LzfXh3dm51fnl5bXrw5eHxdGhpffnw/3X1eP17dXx8/vju8ftzb3b59HB3/Xr4fm9xeX3w5ePl\n+WtvcPjpfWRfaHV+f3n48/Dn73RiafR45uJ5+nZ27/H5fmtu7OTofW5o++h0Ym1nW2rv9OnzbvLf\n2+br8mn59P18a2Zu7m1r7Plrd+7m7H5+Y2zybv52YGFrb3Tc1+3t6v774eNrZ1lv1+/y8F1feu7i\n72ppa/n1ff1VU2Ry2uT56Nvb69f5WGBoZWP75d/98dl6afxZX25o5H1sce3ic9vsXe5kZ9zZYVlm\nYt/S3WFz+k9x1+3852hs293g7H5dXtloZt5VW251aOniVW336Wxh/W/j9frZ6/3f9vv93tpt7PFe\nb/P853lcXl5tX15eX+3h3NL+8Hj6zuPr41NVW3HX8HvrZuLk7exfaPhaWF9cbW5u+vD0bW3m3unc\n6ODM3ehrVU9S+vjs2vB+/ePn+v5cVOxzYXNYYOfZ3uvtaGjx39nW5FdcWVLpz8zac1hPWlVt8m3X\n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\ns6afuzMiIB8mJh0q3cC2q6CfqnUrKzUrISVBtamin6CluDcqNEMuJDfGrqmpqK/MPCwrJR4gLvSv\nqKenqLRcOjQvLzlzwLWyxUxMc0Y+5dI/TOpc4NXPzruor86rsFo9KzEqKy8sbcbKta2uxWFJMzg0\nKzJXxL2uqbDGcv9ZS09AO0/Ms7nAu7a+U0o9Mi0rNGS9uLe7weJbT0E9NjQ/17y7ub7xXFBCO0Bc\nYsaztcH7dHrIyNi3xcm0y9FQOTgsNjY4X0VFUV5TRfPwfcfWzL7HXDtJ67+urrTCvrxXRkNTYUvf\n0cd8RjwyMjE9SEZK07m4usnUU0j3z7/S69zHy25oR0tQXF9t0V1kZPnmX1xV2cnUv6rGXLvX5kR4\n9jg9LDBFOztUx8fMvMN3TD9N3M3p3MTDvLm8z9nOWd/jbUQ/8E9IPURNV2pswddVTUpEQeC/t7i5\nucHaRj89Nzo/V9nIyc3K1llJTU5e5O7uz8TO1cfmOtyoaFWz4eJA8G4yWjJK1DIyRtRGS7/M18rI\ny8LLXtHI5NjLwNP940lkSEHP4GtH8MlVWUdNUERR6NdOStvIxb66yc7PaV5GPT1Ib2bpzMLG9WZS\nTEtFTl3Wz8i8wsbLz9naUjJHyT/gssLNQXroPj8tRWE3PlfCwr26zsfNYFjZyvJaZ93S7WB+1OD7\n3OpKRE5eX1pgW2l6aXV7bHzV0+Te29HP2PttbGnx3dxlT1JYXVpfYH3Y2dzT4v566NHZfVVOXmhu\n83xlWlhSSlvg5+Pbx77Cze9tZV/u6XJdfups7n1VS0JDUuncfvtlZPv0593V6WX96fb45tTNycrQ\n1G9aZVpMRklNVGvw49nY8+3d7mz62d/q4uzn5PhzaFpSUFpuafXk4dvb3uVfVllZbl785d/Teezb\n5Oxi8el+6mxv/Pne3dvuZl1ZYWZy/fNzWnB7eGhdbF94393c+erd3d19bW9id/l5Z1xtcuzd4+Ph\n3Nzf3OxXTU5Rc9za/WFu+97kb2RhdvH57/356fXhdVNOUmtu7uvd1NjLzdLa7nddWVNMUl5md+3k\n4+lxaGNXVl7l3tzZ2tPX1+hgV1NbafLm3d3m7ePoamNaX1tXXmzc1t/m3OR4Xldmb/lveN/k9n3s\n9vfrdmVkcf11am9y8eHd2e38c2/9cHFt8+3k3uXrc19TUlxdXGXq1trd4Oftefns4v9dZ2RdX337\nZGp47d7h7n746fLu7vvt5NjjdmdXX2pla2dyaGbt397h4ulza21t+PXv7G5nY2N1/OXf6O18anF+\neHhseeno8vLn6e/8eG5uamFqbmx37ujr5+f4bWlqa2957eTpeG1zbV5m+erf4t7d7PX97OJ+bWtp\nY1dZYW73/Ovr9vjw5en7f3/9+G9pZGNu/uro7ebm5+16bWhpdu7d3e5tYmJeYWhw9/ru4u7s7vX3\ndXVqbXH+f3zz8ezi3uh8bmtlanFueuzp5+nyeG1jXGX06+7s9vr6fW9maG9y8uvt6+Tt+fLs9H/p\n6/HvbWVgXFxdbHbx3d7e4uzz83hlYGllaXNubvzr7fZ7dfzr6+/q5+3s/WZhaXT/8fl97OPsdmto\nbHp/dH7z7+33/u/l5O3ueV5bYGRsbWtzfuru8+ju+u3k7Ofm83lybWJhbHXv5vHv9Pn5fXpmZHX+\n7unzfHh3b3Xx8u/u+nz7fG548Ov3enhvbGZnbXFzbWx39uXf3+Tt7u/48O7x+3h6bnB6dG1seH99\nemxrbm93fPv5+3/77O35dWRseHvv6ubm7Ofu+n5tbGht9/Pp6vl+dfr3fmtcXm337vb19vbv7u7y\n/H1vdH/4fnZ7+PPx7vL07/D57fJzbWlsbG9ta3JsZGNx+Ozn7e7n4ubr7v10fHpvd/bs6+94c3hx\nbm5oZ2tw/vPu7/r37/B0bHdxe/j17ezt7f52fHdtbXZ1bWltffl9/vLr6+7x7ebu+vp4bWtudXh9\nd3L57e3t6uXzb2xnZm1vb33y7fR+e/jq6uTh6f9ubGRjYmRrcvjk4uXr9/Z7cXBze3Z0+/Lt6fF+\nc3N+eXdxc3d0+/n693VpbHP68Ovr7Ovr83J2dHR6b2drb3z7+/f27e7z9ff68enxdHd4fPju7vX2\n/29tbGtrcnhze3p5fXZ4/3h2dXzu6+Pf4er0/mtqbGtvfXpv+uvs93psa3R2eH/x6+bl6Oj9b2pq\nd33+dnJ0fPj8/ff1735td3739/78e/r4fft+/vXx9nR0fnh7fndtZ2x0/PDz8/Ps7vX4+3ZtbHBp\nY2t29u7m3t3d3+fr9HNtb25pZGdlZmhvd33z9Pn483tsbnf++O71+fbs6vD8e3738fHv8fLr8P10\naWdteXZ6dm50ePbt8e/0+PD7fnx8e/75+Pn7/nRqZmptePf08/f4+PLu7/Z2ePn5+vTy9PxtaWdm\naWltc/br5+To6uz1/nl7+PD1fXl7dnF7cW9tbWxraXP+9ezp5uvzem9zeXV9/fx/9ure2t3i+nx5\nbWpfX2NhYmpv/PN9b250dX748+rl5efn5uru9n/79n17dnX58n5taWprb29veXh6fPDl4+Pq9nh3\nc3FzcXN3dvLu+nh2//p9e29sbnr8enj7fnf7+PPq4erv7Onm6n5wb21pXl5fZWhv+PTv8/X++vx9\n9+vn5OTr6er0enp0eX9vbGlw+Pp2bmpscnZ4fXd2dv3u7Ofi3+r8dG9zc21rbXf86Obp9P7/+/L3\nc2pvcn3u7/50cHBnbfv48/Hx+XtzeP77eHBxd3x6/fLp6u3v7+7zeXBwdW95fPzu6+z8cm1ubG5u\ndG13/PXu+fXy7+zs8vxwbXH/enJyfv3u7u3tfnlsbHN8e/36eXF2e3px/Xl18Ovm4+Tm5u3v+XRw\naGd+e2pmaWt28+99dG1zcPjr+/58dfjr6Ont7vf59vr58Xdz9XZuc25rb3z28XtzffXz8f15cXv/\ncX39ffvx9fPz/Xr58HhxbGdv9nh4enh8/Pr29/5/9e73evHn6u/6+Pb+b2tpcm90dnnt7fZ9fv32\n/Xlza29xfe/s7P3s7O/4fPPtfV9hZWRpYWrv5+Pk6Ozq4Od7eHFsafn7fHRmbPLr93358Orj8Pr/\n+f78/W5mYWdv+XNtb3N29H3v7Pz/cH/48PV7fnj66+vt7/N5fuv+Z/rt3VlMeer4XVn529fpbvzW\n1tjt+/5oVlNj+XdZYXjb5vb+bfbucV9v8Pf2dfnv69/q7vfs5Ofr9e/8eW5ialtfaGRmaP776+Dh\n7O/v8eL3+fx09HBsd370bfny9HR5cnP1Y19te/h5+/Pye3J47+Z9+O/f2+fs9O97bHhpaGtcXGts\n6uzy5N/ndWT06nBdXXrq/+t07O1q9vXs+3FueNvofm3/2/pnZn19fGz46ehqXvn/bXRo8ejedfre\n+XVqePpsam37bnt5//L35vV+6Hx1c2n67O7vc/h5ffD16+n7ZHn262dg3WR46Wz1ZXPrbHl0/Pxm\nbeZ49u/u7ujp6O/q8nt4cF1qafdwXXHv9Vtf6Op6ZPPldnj539r2+e3r+2H72uxrY/bmbF1k3OZr\nZfntbVxc7OFjb//t7mln69z9f/Lj8F373vLx5ervdWR5b2j4eGxua3H0/nz7+fP9cOzk6/v95Xpv\ndWnu9WFienVr8fjsbW3w7OT6X2jb2Ox0bu7sY236bl1x5u5scu7xa290d3Zwb+/o73p77ebw+nTp\n5Wn9e3pvWu7hb11s3nRpcunbeG7p5u1saufmY3Vz/OFud+ZzaHF+c25paHTp/l9/4eb/7t/rdPbn\n911e/O5kZeXf5Whx2/f6fP/jeWpp9/pocGfw/W1zcOrqbXXq4v1scernb25pa/9sbPvjd2L25+xn\nbePj9l5z4u31+O7rcnt4fmlu7fBvZfNuXWr363bu5/Xp+XTr9/z0/e149HD43/TnanPqbXZjbPh2\nZGNxcnts8uL5a2N+6/F7cOLX7X736O1ubf55eGRx6fv7c293fOX+cPjf4XdveujwaWh66GlmamL9\naGZnfe527fDp5uj3fuv0eFxg//798d/b3ujz5uTod1tib2taWHb4bG/073b4b27h6/vw7ebj4Wx6\n6296+u96Zm11b3FkbO5tam10/PTi9nZ5+Pvx9Obh4uDz9+vu8nR2/XVgX214bWphaPn28fPp7/30\neP78fWp39/n7+uv2/+/x8fxtb/71bW50eHJs937t/Hf69uvr5G1x4ej1bW55b2ZeYXbv6/576unz\nfP9yeWz94PX5euPfeXZx93dsbHN5aHl+8vhxeGr95/NpafTt9XZ1+u79aHrvdv3n8ufb5/Hq4/1m\nd25qZWx08nZeaWprX3Ls/uzw5N/xbm7q7Plv/OLq/23/5uZybXFtaGBq5+RxcPDpf2J84Of9a/Dr\ndWZodm1randvaGZq6OT5fnzp6e998Odwdv346+/v7+bl8/vy7nRna2l2ZV9tcf1tevt37u7q7e/5\nc+fp+fb6+G55d29qaPl2b3P38Wtvfunr+Xv66e/x6uj6dnT27/NuXfPg+2Nh9Pf3cW7xfv179m9f\nY2z7/e7q7u/9evXv9e3t8v9ufPn4cW52fH5pfu37dnjt7vRqaPzr5n5s7uH1bHXu7W1i+ujzcGVn\naGpta3zs83738Pfq7/ftfPnz8PhvdH7t7PX99uvv9Hp57nVlZm1wamxmcu70/Pft6/F28ev8/mp4\n7/Tu9Xt2+HtxZl9qaG329O3m4uvu8Hfu7/v29u5y9ebo72ZlbfpsYXNsampufv19/Ozj6nJqbn74\nd2z76Or39/Hy9n77+XBqc/Hp/nV0cHrs7Xh+9Ozz/vXu7+7u/PB8a3JrbWhs+Xhvdv1ubfPyfHN+\n9fX7cW335ez3ev/r6O3q6/Tv9XNtbGtfZ3hs//h69vZ+7Pj+7/rr9nBtaXh29Ozv6urk5nJocm7+\nbGNvd3htcHB6/vt2/eh5eP7w6Px99/Pv+nD86/V4dvvv7ff6+v/8dnN7fW9lb/R4cn7x83/3+n/y\n+n/t7nVhXGf1fmlndfHu8vHm5+3p4+DveXp+/W1fZWxwevvy5ODo7vj8b2lqamhqbn72+v9+9O3p\n83vz731ra3X+d21t8+jy/Xx++n9vbnj8cW1sdvj+/uje3t/o5+buf2Zrb2hjX2vw+mxlaG10/nh7\n7OTp5+jy9fz06+x5bXNxePh2am9+dm5we/ry9Xjt5e3u9fXn5+fl7/50Zl9obGZnZmNob3VzfO/n\n4N7j7+zj4ux2cnd2cXh7dnBvfvx1aWpqbXh6e2pre3FscvXl4u7z7uPg5uzv8H1tbXBubW1rdu7q\n7/Tt6e12b/749n1tbnN9c2xxdXz49/x9eG9ta23+7Oz47+vwfX349vx6/Xn98/F1dOrpfmtub2xy\n+vP+8ebp8356bnBvbWxtev378uno9f7p5unvd2xrdn9waGlseHp2/vv79vDt9Pjz9vZ8b3d4efTy\nfXb37vVzcvP6fnJpanrt6/V5eXZxdHj0fnByd/Tw9O/r6/N4bGt3e//5+f//+u/u9Pbv7/pxbGtm\nanZ7fv99/n716u3u6+bo9nBmZWpvdX18+u/4/Pru6O3v7O73cGlve3twamlveXRve+7r6e58dXh+\n9fh3b3ZzbnJ2++7m4+bt9vJ8bWxraW51b2329f/59O3v7uvx+XRva2hwb3Xs6/f39fv46/l0+Xb9\n7ft++vxweHNibO/0+O7y8Oh+aHRrZnz2eX35/P3v7evl5ezs93JtcnNrbm1rb29wdnl6eXz07/H0\n7+7x/nh4dHj++/jv7u3w8PV++f5ybm13e21pbHr6+vp/e/bu8vf9/H539/j/7/v6+X97d/l8c21l\nb29pdHdvb+3k5unn6Oji6vDv+HpvbWxsa2dmZWVvffnz7uv0/Xv//XV1evf2fv3w5+fq6u7w7ff9\nen13d/57bGhkYWRpcXp0evLw7eXk5ejs9Pf0fnr6enn+evv3+/V7cXBwd3RuampscHFzeffv7+3w\n+H18+fDv+XpvaW51b3Bz7+Pm6uvq7O/s7fv5+vx7eX5/fnhuam1qZ2ZjZGx9/Hl3+PPz7Ojo7u/t\n8Pj49vbv7v5zef1zb21qcnBxd/3u6+rs6u/8enBycXBweXdyfv/6//vu7+3p6O/7fW9pa2ppbm11\n9PX7/Pj09/Xw+H50bG9zbGxueXz58+7o5eHh5er5f3Vvbmt1//d+bmxudG9yfH5+9vP+fX11cXz6\n+fXx6uPn7vj6/XR0bWtvcG5tdHp9/Pj79/Lz/P33+fPv7vLx9fXz9/dzcXRpZWRmaG50++7v9/fz\n9/z77ezr6/P6+vT2+Hp6eHN6dnd2efv7/HdtcXRxeHv68fbw8vHs8PP9/f95b2xxbm1y+Pb6+n5w\nbG5zdnr78/Pw7e/u7vDw9ft+/vb4enF2cm1ycnJubnV6+vf39/fz+Pj29vLy+Hv98Ozp7fLz9Hds\naWVoaG51d3378fDx8/b48+/6fXV7fvjt9vv4cWxsbXB1dWtqd/Ht6vHy7vf09fb7e3N19vD/fvx6\nfv14d3Fze3p0bG97//Ts7u3t+f37d3B6/Xz9/X1/f3l1fPTv6ujr7vp9e3VtZmlubmpqcH748Ovr\n6+7v7e37/PN5bGtudnz+fnn49vTz+XZzeHt8cXB1+e3q5ujq6e329n5vbGdiYmdtcnpzb/zv9H36\n8fLs7e/u7O/z9Xz98vf7enF+/HhzcG5nZmZlaHBxcXh8/fDp5eru7Orr6ujq7+3q8X58/3RtaGZv\ndXJvb25tefLu7vH2+nt3dnv+fXt+/fvz7/d/dnR4e291f3v8+vr48e7u6ev0+v39+3NwdXV7fn3/\n/v7+fnl5d3d6dnBrbnxzefHw7Orn5efs+nx6dnJ2dXVzdnh8fHd3eG9udXz4+nZzdHd87u758uzn\n4enu9PDx+HhvbmdmZ2xyd3j8+/vx9ffw7vj38vT17+z7dGpoamt0b3F0c3b+/Pr4fvLx+fTv7vjz\n8/ru7e72e3h2/vh/fnZvb2tuefvz7Ovr8n56+vZ9dm9ubnV8fHhtamxteHr79PT4+fny7fN3cnZ8\n8Ozs5+bv8/H3/n51bWltcnP++/z3e2pnanBzf/b5fXz/+Hpwc3zu5d/h5e3z/f71fnRtZmxyeXt4\nfX1wb3N7/n78+vz+9u7t7fL27/Ly9/v0+Pt4cHJycnFucnl5eX5+/fTr5+rv+338/3ducH52enhq\nYWVtdfx1b3f+9/Ht7Ozk5Ojn6+7x8/tydnV1fHt0cHFzd25pa3t6dHd8+X5zb3X+9/Lx8/j58/n5\n//rs5ebr7PP8+X94d3z++/5vaWZqamtra2xwf+/u7ezw8Ph4dXx9e//28uzp6uvp6ejp+XtzbGxo\nZWdsb253+ff0/X/7fXt+9vP8enx8e/fs6+/1+Pt+ff19enhubnR6eXh1cG9sbX338/X4+X739Pn3\n6+jt7Ozt7u3ze25rbG5tbXVzb29ub3v28+/y/3v8e/zy+P7y7Ozx+Pp4bWxwcXNxcHl9fv95+vDv\n9frv9PPvfX3/fff2/np3+O7t8f9+fHRvbm91dHj69O7r6/H5fHhvbGtrbnBzdHRzffHt9vju7/Dw\n+X99cWtucXj19H377Ozo5e37/ff9b210e3BoZWRrevXv7O/6fHx/efv7ffv29e3t7/b18Pd9ef/5\n8PHx9XtuaGpubm93dnp3/vf5/vvz+/z39/t7/fn+/Xt1dn3+fv18eHr5/vny/Xj77O7p7P39/fn+\n+fr//nt0aGZkaGpvc/7t6uLp9/Pv8vx1dGxrbWhpb3f9/PLs7Ovn4+vv+HB3/X55b29sb3V8+nx4\nf/f08fH4+vn5fnNucXN3enJ2/fr28e7s7u/z+356dG93b3B8/v/48fPw7+73enh7dG91cnJ4ffXs\n8ff+cnB4/vHs9X5+fnz+fHb+/n17d3v09Pr8cmtra2pxe3337Ovr7fPz7Ors7/V+b2xtcGxv//98\nfv/48Pp+fHz7+fb5eXd/f3FsbW5ye/37/Pzx7Ojo7vd7f/Z+dnX58O7s8PX4/v56dm5paWZmcf59\ne/7z9fv+dXd2dHH66u3s7+/t8fLu7vDy8/Ly+HVtaWdsbGhlaG50ff7y5ufq6uno8ff9+n1ubWxt\nb3b3fm1ubnT+9Ovq7PR9/3pubW93c254+/Py7u3u9XZ9+ffyfXBvcXd/eG939vDz9+/v+/Xu7/b+\n/Xz98fr1+3Z1bGpxcG92dXp4dnb78+/p7O/v7evyf378fHV1dnn//nVtZmZqbXN4+ezu9fn89PTx\n7u7q6ert+Pf/dXdwc3Nxd3p3eXz+/Xv7d2pqbnN3e/v07O7s6+3v7vxtampsdXBtcnR29uzr5ufs\n8PD7fP92dn58fvv7/3V2efvz8fd+eXV1dHJ5/X19enn67+3t7vDz9vp6b25ta2trbnF6/vx9fvju\n6/L+XUndtbjB6UA4PFTfzeZMRVbu4s/dUlN43NbZ6GZ21cnH6ExUfNHHynhJSUhd3d54XVhRbete\nT1d41sO/xc/qXFhm/XFeW1xbXl1aWVNVaene5ftwfX3x49/T0eL059fLz950W2Tw2W9STE95cEMv\nPbausK7DOzlFPD1HTdSyrLfTRS8yV9xeSDs4TMq8vtJWS2HOxMrY/H7Rv8XvdmNl1lMmJLCcqqal\nNCE7LyI6RC/Do7DCwjAlQ9xXzLrIva228E04MkrP3008NT7hvLfHXkY9TMq9xetZWNe9w+07JTCb\nj6Ouvh8f4UgnLSUkwKOuvk4oLNm+60VAW7SkqsJCLjrmxsdQLi9Zxru8YD9dz8O800U+RVRZWFMo\nGK+FjKKbOQ8mUh4gKh9dnZ+1Ox8hPLWvOiIut52dqmcjLcC+0ncvKtqutLnfNzv60V9KT1ZLTVJG\nQjkiHJ6AiJ6dNBUqMxsXGSWunKC5KSEwT7ZvHBo3o5igsFAu5K7JMS41VKypyGjf1cvfPi4uRdDP\nRisoRcBZIyOPgIudqx4cMicbERI3oZ2j5CsuPb36GBMexZOTpMNS28hcJiBEtKapyVnLuMFPLik1\nTe9dNCsuRMrVLBy2gICWq0YoXCoYDwocop2pzD3Aw3xfFw0WMJqTpq+vq7k4JB4/rKiswMaxr7hK\nLC4yPE1AMCwsN31TLh8siICNp6pDvS4REAoUrKu6usyfqTo8Gg8VGVydn52cn7k8MyMp2reurKuu\nt7XCPC4sKzlBLyEeNcLVNiEjj4CKoJytn10SDQgVXC08yq+Rm19IIRkPCyC7q56Zl6SuuiEcOcG0\nuLmvpp+qQCwtNT8tIh4dKmZrLyQ6ioCUm46eoSsRDwsgIQ4xqJqTubin0yIICh8vPGWgkpObtjA/\nfTk7P7+tqaSstHwsLks8JBgXJENfJxqggIutiYmWaRQWEx0XBBOqoJ65qo+UwBENGxkPFj+dl6Gf\nnJy0Ji7nvz8swp2ewT9Yvs4uHBkfJiMfIaiHkqiGhI+xHyMiHQoDFisgUq6ajJKlu78iDAwRGzI+\n3paRoa2oqcrMVTv338jEzk4/ys82KyIjKx0knpGzooeKkaJFRjsbCw8aDg8o5p6YppmMmzYiHhcS\nGBw7uuaqn6evrKesvMK+ssszP0MxLSwvOigYIpWOUp+Kjo+jzrhIEgkcIQ0PHS+vprCdk56oosQg\nGh0eHx4su67XwqWlscO/q6i6xbK7PCwpJiwkFBmdnjuNiJGOl5mfSBALGQ4FDx0eP7ymlpamoZef\nVFs0Gh8dHSwsNcOpq7Cop7PP4bOsz928+y8nKysWG6JmMIyMkI6SlJiwFhQaCQQNFBIpz8uXlqie\nmaOspEsrOCYgJSAiTsvGrKSqp6fFua/MUdtuPDUvNj80JiDdmq67lZKanqKuzSsWFRsVER4mK8Gv\nuse4s7KuX+K26kQ9NjlAP1PItLWrqbGvt73EzMVUNDJNaTgtM01aZ8uyq7GysbXIXDUnLzQvNj/J\ns7a1y2BSOzovKjhIOz1KSPnH1NC4tbaur7K5ysi9v85YSe30Vk89Oj1ETXZdadPBtb7UXE5NPzU4\nOj/Nvbu5zltZbDsuOlFrZWTVy+N6yb/q4L+8uc/ywL7Oy838XEVP/UwvLUFTUT48Zce5t729x8/B\n1lU9PlJ5zunf5ElgXz0+QlrW2dHp+tfqX1pb7dPSysjI3cWxuMloWM3OVTcvNzhEOi87RunAvby7\nu728v9xVR0Vl2mlPWW3jalRiauTYx8Xv7et4eVE+Pld1Y2Rvz7q3usv50svPUzw8QEs/OkU+PWvT\nvL7ZzMnFxvFLRVFf7+diatHCvsPe6s/O7FdQTtfqSUU8P1ZfUlfqxLu8y+DMzOnrXkQ+PUJLUkVF\n/tDKx83T0tPMzmxLRlX/eGB/z8fLxcfMy9vU70tJV+JpPj5RbVZDTf7b3ubIxdDq38fcV01ESFVf\nWF9RUtTM1Opd7uVvZOrbftrS3d/Z08a+z+jU3n5lRkdbW01CSUpLbtx8c29q1dff0tPX3Obo62JJ\nUuDl8F5QYvHsYWR3WFhbWVtv287EwsfJwsbP3evwXlxQRUNEU1dTUlrg1OD43u1paPne931s+9Hl\naFNLVu19X2zz7One18zR5m9+fF9kXm7v4dnWz87O2+To6HNWSUldYFFMXuhqatPU825TW/Ll+PjT\n19nPZElMSUpMS1z8dejPwMHPy8/i2PJZXfLn59zY1dryXllYUVBUUlx9ZW3g3O1+7dTN5E5OX1hl\nZGfo3N5v1+5JUF9TT2vXz87OzcrP9u9dX/hcVVZ969fL1evc7Vb9X1n9YU5d6vf0avfj6Ph+Z1xU\nV2Zs/Xzo2dfQ81JaYE9QYvz429fZyc3b22ZW3u1PXWnu4nL/1eXu6W3q5mZQYNfmbt7a9GpkXGFY\nSUtfUlHf393Qzs3O4WztYk5PTmfzaufPzdri2d9sa1Vs2WJf3N/s4XVZaPTiaGnkbPPq3uDdcGbe\nYFBQU0dOWF117d7bzNPW1tTn52lUblhYcNfd4ntl2+VWT+LfXnJw/dzW/uzubd7Y9eji7vt8bV/l\naVn0aVJPT0pjbVhb2dfy2dbO1W1q4XVQWufW3/jezdP689nybGfy5GJSXutjVlBdfG1nd996YezR\n42FifuL+Xm7r73nr2NPU2s7G1eTp6mVNRkhKQj4/S1VVTnTQ7vve1s3X1e9Yysi8rrWuqKy4wMw/\nNy4pKSopKj0+O0JpZ0ZSRUlsPyg9qJ+srJKRmqCvrMomFhYjJBkf0KqnuLqpuS0hLi4gJTE9Vcq1\nXDyjkq7Ak5efrLq3WTMWFSckGiHarKazv621Nig7NCYtMzlITUxMd6eXuKORm5qwrL0tJhUcJSIn\nTK6uq8jueDMpKDgpLko6Y9pTNVGwoNqskZ6ZoKChUDkbHyAaJzLEurDI2/AtMywyKzFDLE95TTdj\nrqDerJGhnKOdpD5UJC8pHyxG3D3SPzUvIzA4OixKxjZEyU4zTq+lVZ+Un5efl6VOVCMxISQqNms1\nXCstKiUuL0EtWuk/2sJjT8WkqmuXnKGbpppoTzMmPyErPcg7RnsoLCArLC0uLM5NS7zN2cW7n7yu\nlquboqSlN8UpPC8f8D5GOG4zJishQSoqODxqL8vARcfhpaRomZ2jnKmaSUvsOEAc1GU6O1nJHygj\nMyYfRS8+L1zAO+u7saawopemnJ6erTOzXioqOj80OTTnKiEqKygjQjguPlvcO0uztr+loJ2anpmf\npr3tzyQvNCYrOTowOyktKyUqLj0uOUtCW+/iuLOzop2fnJWeqKOwaTwuLyskLTYyKjEvJSktLjRC\nQDxERGbq57yvrbChmaSamKKmtLg5LS4pKCYtLSopLCkpLTg+R1JaTEnd0cXOuq+0raafn5+coqyy\nxUpBMi4tKCYiJh8jKSk4RmBka1RR4NzDvLq6r6+zq6enpqOpsLS1yVFSOC8oJCQfICEoLjRKS2Fm\nZtPUx8O1srCvra67tLO9uLC3ubW2x1pfPDQrJyskJCctMDZDSG3cysjCtrKvsrCwvcHM1d11zcXF\nu8zM3VlfREA/Pz86OTg4Nzk5PkpN1s3Cubq1ube4z+xfa2f5ztLQ3mn+XkpZV33L2Pri7ENEPj4/\nQExM3enNxcq+ztfj7GxJXOTrd9HdcPvebF/OyMrc0eJaUUlTRFr2ft9izGxjZF1wSvr4det9+11h\nXnlcZNDJxsG9v8zec04/OkJNTOjR09Pa52xkXVlYWF3a6HLs8FpMUVbh29PEvr/MzNJmTUhNS0tm\n3Oz03+VbV1JUXlT92+D8ZWpWU19v4OfJwMDGycToVlFUW1Jg7tbqbeFiT1RKREhZZE/u399/VF9o\nd+LLzb+5wMzGzmFQUlNJWmhv82zd7V9VWFtLU2NTU1NZUkdX/fvby769vLzAysnaWlVOUVNRVltq\nW1ZUUU1UWlnY2PV/7H1aX1ddd+bW3M/Dx8zNytPm2flXSFBhRUtfY1xNbdbbWO7Oa1lmWUxaUmzL\n3+TKwMzRy9L1cexqZ1JOWFpUVXFiXmd9/eZn7Mt+VtzSYE5o0nRTbcvPXu3J1m/r3XtVbeFRSFrn\ndlpq095PXuRnVnPY/OjQ1M7S8MvPaP3vYUlUX0xNTVtQV2Vh6Xvt3NDV3tfl5/7j5nDYzc3Oy8jG\n0ujmXk9GSkM8PTo9PkJHVuzizcfDxcXK0c70a+bfZnm+ub63ra+6vcNpRTgvLSkmKCwqLT9RWNa6\nsrS0s7K8z9pLQeNeRL6nrq+enqmtrck/MiMeHhkXHiEfLGXXvKqlo6Knr66+S01AMSkfObHAVaeU\nm56amZ+3TykkGhAPEhMUHy1Crp+bl5SXm56u5z0sIR8eHiYzPlfH4tqgmKi1mZWltK+1PyUaFxsV\nEBkqM2K4pJqXmpyaoLlYPSceHh4kKS8/vbGzqqmwv1ElILy5HTChnamsm52grTM6aSYTFCMrJSU8\nvKWosqCco7/BuEgsJyckJSUrOnLXy7SwtLzFMj+YtSaumpq5rJ65rEwcIi8iERUqKTJnUHChna+s\nop+6xOM9+jUmKkdDNk3rfcXEXsrITS8uLx5Oo0nZopiXoJmgrKdYJh8jHhMUHR8uPMe8rJucn6Of\nrsBLMi0kJR8oLTrax7q0q622wM1qRC0oLiovv8X1rqWcn5+fraes6DgsLCQeHh4gJCs6PVbHra2s\nqqumrLPO7NxBODQxMTIyOUBSaN2+xsG8wcnK0+vx+VtazL6+urm1rq+92d5fPjo3MC40Ojk8Rz5C\nbHhvbs7ZVl9OSUpKWlVkzsK4tq+srq+yvM35SzwyMDAvMjQ0RerQxL6uq6uoq6+0ustUPDQqKCkp\nKy86PE3m4PPczdjQztLc0/HhxsLCxb67vcLJztlsVVJFQEFMUEta683Mx9XmxsrgfHntXFpVTFxe\nZF952mR77374XlFJSEY9PEA/QUtYb+PIvry4sbS5t7a/2dbrUkxJQEBITElNdlVNVVPn8WNh6sHG\ny8TBwsvQ5HNcQjs7PDg1OT4/UOrYy8G5t7i5vcTL52pkVU9PT01XZ2Fo5NZs7O/n3nbsV3fc5P70\n1M7X6tvv91tFSk5ISlZVY+bf+H3h6Gf9elhYU1lf6srFw8G9vsHG1M7R/FpHRUM8PDs/RU1IUtnL\nyszFwsHGz9Dd5WlVSU5fYU5Pb2VwcPZ+z83ufHfi/2liYWPvfVtx5c7O29vc0OdYT1rb8FlVWl5a\nTWXt6dpfYXrm32Xv3MjeUldUaFpc1b/Ezuj35NzX+lVVc3NCR/JhU1/obW3Py3l08tvd/lpUVtVu\nWPzm0cPS/WHsaURKdVdGSVhg68vCwcPExeba0NliRz5Nc0c5TNtpUnHb0NPBydbZ0t1YXGj79VVf\ndmRkVGV0WWFnSGRfXljr2M3P2sjxydXvzXnX5WtcWFv6XGjca29fW19X9HV+a/FtZ19l3tzj4urb\n4O/e22PpVVRaVFhPdlxfzubYe9Xf2tHg4vvd6WX3Zttpff1o6ltiZmTtZm5633roZWXu9+hc5Xll\nbl59YvL8X+xSe2Lr5XrQ7d3Q5dHmzu1zXV3zWVheUfFOcFji7NjY59ng2Hjtc35ZaWxUXXR4+Gzv\n5+3a3Fzy6XJycGFZ9G9mXm7UaODe+N/09Ht172h+bupo4XDr39/m4+3dbnNTbGZcWVllamDPaPrf\n1eh47N/1615gYm5eVF9adWTfa/vP98zo0M/q5Vf+V2tkT/vwzlfv+mB4TFVY2XDf0tPK5sv/3d1V\nVVFfTk1YV35uemHP9N/b2tfs4Wtq8Gdbb3Rn3Odq7tnec9Xu7Gfv5t7V5lNUWEpOS0pcY8/fzsjL\nzsjQT1taTUpUT1Lf/9/cz8/czdXg3+pYWV1MTlhdZe7v6NvXftfc5HZxb3L26GZg9W5kd294ZHVn\n7mxoX/Lkbuzz8Hno3N3hfGvu4O5cdGn+9tzd2szN0tLV1nxiTktGRENBQkZOUFxp5+TPy8/U3NnX\n4O1u8/zoaX18X+LE3zi6o76tsce0vrI3JDIkJCghISo/7cytqKegoqevtNBANC0rJy8tM0JcvcS2\nuby30e5APD82MTg/zaKlpJ6gmp+jtS4uIxwZFBYYHzVAVrOknJqbn6iqtUstJSQkJykrOfnEt7Ct\nrbC3wV45MC4sKzVvs6mmnp2cmJ2nxzsvIRsXExUYHiwxRL6snpudnaOkq8tKLCcpJykqL0dpx7i3\nsLKyutnvRzw4MzY4P1i+r62no6Cipauy2kQxJyMfHh0eJi48Vs69s66ur7K5yNPuT0dGQURPb9/c\nycC9u7m+yOJRRDs6NzY7QF/d08G3sa6ur7G4vcvrWEA8OjY0NDc5OD5GS1pdZlVJSkVJS0hXX+fE\nurSyr62vsbbC1mJPRj07OTY6PkhWddTIvr28vLy8xM7e7mFSTkZJS09IRkxLT0pDQDw9PTw/P01y\n3MfCu7WzsLK2ur/G02ZQSUdIRUlNSlh0//px6vl6blxedeDe0szJxcO+wcbN8GZOQj03MjEzOjs9\nSFFf38vEw728v8C+wcvLzM3V1dr27mNcVlBRSktGQ0dKUnHl19PMwMHBwsXLz9lwT0ZBP0VISk1R\nY23k1eXl7PzzZmdVTlhYa/Pf2NbPzczOzdfc7W1oWVZSVF5gae/VzdDO0dbZ3OdoWVNQT09PUVNb\nefHr4t7d3eD6fn7+9Hp6a2vo6eHf3tvb1NzvbF1STE1JRERHTVx+4djPyMnGxsrN1NnrfXhrYmVu\naXnt4+bs6vH+eWNWVE9NTUxQUVtld97WzcrJx8nO1Of1aVxfWVZQT1VUWF1ncWtyZVxcXGBmcXTu\n1cjFw8HCxcbL1u9nVk9MS0lJTExNU1xibPLi3dnY3el+bXF++3d5693b2N7l6npuX1xZUlFVWGHz\n3tPSzcrMztLhfmteWVFPUVBXV1Zfduve3NTPzs7a6P1qbGZfXl5na2pwdXz/bGVfXl9dXF1dbPTk\n29nTzcrJztbd5ezs8XVlYl5XUVBQVFlbXmFodPPs6u7n4eri39/h5u3z7/d+dXtye2xiZGducmxz\n/O7f49/lev3++XFibHz27u/07ezk4urr4+bp7X13b29vbWxgX2lsY2FiYFpbXlhbX2Rtce7k28/Q\nz83P193naXvXX1lpdXxj6/t18Xz85u5bW1tbXV1VUmd0f9/W09HQzcrK1PT/eG9vX1ROTlBWXVRP\nUl32fW1gXmhs7PRu+ODT1dnV1tbV0dZ9Wk9RVUY+S83MSbygqK+ura/hWDwfHSElIh8tR161oJ6l\npqOqwlYzJyUqKyowVse7tLCur7XBZ0lBOS4sLC0sI8GRmJ6YlI+ZpM8ZFBgRDAoOITHAm5yYk4+T\nqb40JB4ZGRchPb2uqZ2cnam6bjcxIyAfJSslJzi2mo2SmJGQj5/4JBEREg4LDRhMq5+XmZiZn6pB\nKBwaHBwiLtCuoZ2foqq0VjQqJSMjLTM3ODo7Z4+JnJ2ZkJS2TxgMFBwVDxE2oqKWl6CnsrIrHh8a\nHh83XL+ln56lo7DoMCkqHiMlMEJiwmbH8s2Pi5+loJmZ6DsZDRYeHRcXWZ2el5imr9TWJxwfHyQm\nSMW0qaSkravAQCkmKyUlJjRqz8zPyk+fh4+nop2VrTUjDQ0bHxoWJp+bm5OfrtFSMRYbIyouNLyr\npaOlt7Wu2i8eKSsnKClK2cva3mk2n4eTq56dlq1CJAwPJiEaGSmgnZqUq7rfPSUYHR4mO1u8raCh\np6+ttHw4JSglKCgmO+jjTvlJOpGHnaKfm5fQSxwLFiQeHhs0nqCVla+5Pj4rGRsaKTxOv7anoKCq\nrbbDSignHyMoKjpIWmjTSkKTip+enp+bvbYqDhkjHiIcIu++lpGpsfFvxzAnFhgsLkA84qmgm56p\nr8BGKx8dHyQvNT7Nu76pjo6nn6Osq1LcKBQkJh8tISg+P5+ZqqrN2qu9SCIbJCcqLDFOuKSfoqit\nxUMzLCgqLjpYWrupt8Wytrq+2/rNr6WkqrPG90AqHx0dHyw8TMy3qqWtsco/MyssLzJP3NO6tbm+\n7VtLR0s/TOnJvb/QWklFPDp9treun5yen6OuVS8uJxwcGxshL9S6xritqq3De1k6PUk/OjpDRFrI\ntbnh2L65uMpRRTxGPCcqSLepqKGenpuap94uJyQfHxsXHC3WuLi1tK+oqLpBLDE9RkE2ND7Muby5\nxOnSzNVdPzw6Slc8LCjPm5efpqGbmqC9JxoZHSgjHB8tv6Kep8Fn+svIPCQgKni3wvnlwbe1uNI/\nNztEQTk3Okn66UYpQJmOkp2on5uj1yEUDg8eLi0sObOblZiuMiInPDcjHSPnpaGkrLS7zM1vMSAf\nKjo/PknsyMN+LUWVio+dq6WfqFYeEgwNGzv+TFe0mpCXuCoZGikyKSUraqeamqWz6lDrWDEiHiAu\nSl5i5N3Nai5clImOnrGuoac6GxMNDRo9urPGv52PlK4pFRYhKCcqLTyxnZiZp209btJOLB4dJTVX\nxdJPbeg7LMGPiY6fv66boDoYDg4QFyjlrbS8n5GRoC4WGCEkHx8mOrqimZWbtE1H5s0/IBkdJ0DL\nxMPNZ15NOPmajY+Zq66cm80fEg0NERkrvq22qZqTk6coGRseHx0cJ9KmmpOUoc4yL27ZLBkVGzeu\nqK261/7rPypem4+Pl6mnmZ3MHQ0KDREWI+yzqp2YkZCfNhoUFx0cGyXDnJCPmq3JTUNHMSAZGB5E\nrKSqvOLNv1spHSiljYiMmqikobUnDwgGCg8bQqealJKTk5q9Hw8MEBwqOsulmZOTmqbCOCoiHyEk\nKTnGqqaw7zw+QDQmHSugioOGk7HIus4mDgQBBw8ivJuRjo6TmaRqIhMMDhYgObylm5WSlZqqSCYe\nHyo0Likx8rKtu1M8Pk34+T80wpaKh4+5LC5EPxwLBgkTJsqflI6PmaSzSyYYDw0RHTm2pZ2Uj4+T\nn9csJCEjJiYlLT3atrfNVkx7w7jCRikfPpuNjJa7Rsu9XCYVDg8WHTGznpiZo7nSRSsfGRUZIzXA\nn5WOjZCYn7M8HxYSGiczPD9G3rq0t7zJakw7LywmIDuci4eKlqu56DAeEQsJCg0bxJqRj5ekr9ku\nIBsZGyAtx5yPjIyPmahLHhYUFBkfJS9NyrSpqrbLXUVPbUk6NzYy45qLh4uaxkkuGw8JBwkOGD+Z\ni4mMlatCIhURFBgfMr+cjYiIjZe8IhEMDRIYHjHCpZycoqmw3DQoJi0+VmjbxsBoOrqUjI2Yrlsv\nHBAODw8QGjaikI+Tl6JiIRcWHSo1Y6mbk46Sn8olFhETGSrcsqujoKWqxzMnHx0fKDnIqZ+dnqa1\nSh8lqJaVmafOKhcSFRsYEyBQrJSQkpWvKx4aHB8rS9+om5qUm+cvIRsfJjfWwLm4srZMNzgwPXNv\nycLGsqqqscxKLyYdFCmXjY2PoNwfEhkdGBYVMK6hjYyZqC8cHhYbMj3Ht6iapK/CKCEjJsuqqaCo\ns8NDNSolLkPWsrq/wF9s0P5KNS0vLzArH7mNjIyPp9YdEiMaEhwaO7CpjpbEviskIxQkLiezn5aU\nsMk6Hi9XrZ6tqq5majMoJB01u7CrvFMxJDJ2z7zc8M5uzMxYKRVMjY6Mj71PFxRAGRIWDjermIaZ\nwskbJyAYOiMtqqWTm729ISyyuKXISNM1RUsvNi7cn5+hySUcGShO/8XmbcG0p6rNQCcWEa6Jjo6Z\nx7wiKS8KCQ0Zn5aLit4+Qy/qGxQVDjOdj4uftd0mr6XdNxsqaPqtxj9K3qGevjgbFRsmftXPraWe\nn6q7NCYnHxsPG46GioibpsUbLQ8CCg5NlJiMmzimrsYmCQwPH5mQkJzPo619vCUYHDaamqzCLTLU\nsaZYISIiKzxawcm3qbTuSlN0PC4zLyccH4+BjY2Xq6seHA4ABRbOk56amMKalWEWAwYXMJuVnJua\njpDAHxgVGTKspcrjr6qqsrdPKScnJR4nTtW8qqi2vrW9WjMtKyIgGyeKgY6Pn6e5Hh0IAAsgp6Ov\nmJmdk58nCgYRHkitopWQjI+3IR0iHxwn3KqjnJyisM5NJRwfISMlMc+wqq3IeNPH2jkxPDozMigg\nloGPl5idnS4bCgAJGThLUJqMjY6dLRANExITHuSUi4qMmrJSNh4RFiQ/4q+dmJutzDQuKxsXGCnh\n8dbEppujq788OCkhJCMuJjmFgpiRm5itFhUFBhcWHR+2i42Xn6/KKR0UDhgqz6SckY6TnrfRPBsS\nGShJxbepoZmcyicaHB0cIjyvp6mqsq6s6jovMzgqLDg4T4yJ05uPk6AZGw8OGwwMGOuYo5+Tj5VS\nIB0bIxsYLbWbmZyYlZ67RS0uIhsbJruwrLGtoLNOJyImHx8mPb6wqKSlpbZaOSwwKCgvPIyLRpqR\nnKsfNRgVGgcXPzA8N6CXmZzOuKXNKx0wSCsqQquiqa+xoLI+Qb+8Sz4vUe02Kyo1Jixczb/CsK21\nwHZYSDo1OkvXwK+k5EiWuB+do8rST60zVCkSLxwTHzdCNqGbo5WdsK63MR8qJCEvOvjdtKSkoqqo\nqbXHVEgnHR8hKCcoO9a3q6eiqsLAfEpHNzw+d8dg0l0nvJoq3I+lurKksy4yGR8nERgzMyPPobur\nn6iop7O7p9wjNjUjHB827LKrm5SZnqapPx8fGRYVHDI14K2joa6qorDbWOFnN0hMNzowNjkiXZ47\nro+sr6KfsFnCISQsExksHxYtvTy9m52bmZ6nqkAfLCUaHilDyK2fnZ2ip6vXODo+KCEoLComLjle\n1M6tpKqvra3C3bz+KCgyLS80KzauuT6Xkqqgm5++4jcgIxQPHCQZJK68/KSeqKmtwbG0O0+8Si5L\nw0NRv+C/rbDHucdI7DsoKjQxKy44RMrEYbestbiysL7J2Dc6RzVBRkpmXvi7qMnYqbTIxbfVO1Y3\nLTgsJi08NDpy2dLCt8W/r8JnXMq61NfX1cC/vtDTyF9LSkhNTD89QEhGQF91YE09TODX/vrFu7W1\nusXP2vh+U0Vb4Hn8fXf7VEdHQUFFRF7Yy8nHvMG/u+NSUE9iTVX43NZv8FtBPz9FPDw8RNPQyLa5\nwbixu8/V2Nzfa0o+S1FCPz5AR2d4687OxsXI2HhvUl9oR0lVad7Jv7/BwsjJ3z44PDw8O0hdcsm7\nu766t7/DzFpLSkJBRT87O0tTRD9F7s7Gv8PBw8TExMXfWVhVX0xa1d3JzNjOd2dpVEk5Pj83Pkpx\n29vMxr3Dw77Gzc/W7u/tXEtBRE9PT0VCVnvc4NTKx73BzNpzZlFOV1dg7NzP1O3ueFlTS05dUU5W\naXdYY+7q09/azNTV7eXceODS3O703d1ndF1SX1hcZVxr6NbV5XdXWFZOU27oZmze2s3K0NzZ32BT\nVlhXZ2NbZtXO1dPv2c9vX+/c8Wf/a2tzXVRKSUdHT1Fn6uHa0cbO2uhlYlrr3ebQzsXBx8bN3mdH\nRklDQklaUlbxcGVkWl984/p12c/KxcjN3urse/v07mVYVVvv7mJn5vdfVlp8X1ldauz22szN0Ofj\n3mtXSUtNTm3q+W3e0drl5+l1/v3k19/b4enncG5y6XBOWl1Vb/FtdeboX15ybGt+aV/h2ujj29bP\nz9rh9ndwZ1tOT1lXU3HY33jk5nN46ez8/V1r3eXu4/Jlb+Pqa253+95s8LvmUfBSWlVFS3pfRU/e\ny+Hh2czCzm920+F2dGj6YntbYejh919ra1paaX1jaWfw1c54YvDVdGNd8m1h6tzjz8jU6910a1RG\nQEteWnDe1dfg29ndYP1ec21NXnzeXmLn/vdb7uX2YnvT2nPv1NbcadzS9lxf8VJQa9jrfubt0WpK\nU2ZaRWjI3dO9vsHLzNptV0JISj85QUxCS1BQW+rb2sbHysG8v8DBztrl4G9ZVElOSD9DS1ZIT27z\n3OTS2uHi6tbW+mvO1PLa6PRYTcXVRcG8yMfAut3UeE1SOi8wOS0uPj87R9/ay8K/tbS7tba+wbrG\n18PeXV5bQT9COUA/Pz5PS0BiaVVtzdnYxsjMxszZyM91/GFA4q8wZaNfwrivvle1RvVKKjA0JSA6\nNSk3z2VpurmvrbGvp7LQs7JlVbpaOk0/Pjo/QU5JN1nrPj3/Yj9b23dtztrWx8XDxdNNua0yv59U\nvq6yuV+3UFM8IzQqHCE3LCI8zj1fubavrq2lpbmzqbBnx65DO1I7MS87Ozw3PG9NOV/PSE3NzUhc\nyv7238bNTMCs69egsLWprqzXxHFCPiMrJxwdKCkiM2BMfbq1rK2vpaK4vKazUsWvWULcVTUvOjw4\nLjxjOjNe3D5Lwc1Vz8jazuVyx7LYbKO00Keus764xEhoLy4uHx8pJiArQTg+xca7r6+sqK20qazK\nvK7QTsp6NTk5NDQzOj1AOEV1QUPY017vx8nvb8yswEmeqe+jqq/Vz7wzPCwoLx8fLywlMuNRQLi1\nvrKvrq++vqvLUL68VEm5Uj9bTk49SktbOz12STlI50BFbttwWvGvtT6goNWipau/zrg3OCwkKx0c\nKSohK874Ra+psayoqqm1wKzTQXtfPC1RQi5CR1NYesrJ2NHLyVBQ20I9SlhHOsmwOa+c6aWiq6zV\nrz03NR0sIRkkKSUlUL9CtaatqKSnp6e4t7VjPkhIKi09LS06SERP4uDJyN/Ew1p8ynlL0ulNrr1M\nnazOn6uu4L/VJTUiHCUbGicsJzO3wdujoqmho6mmrcO4y0I4TTgmODgvNkBSSm5m39NXZNnpRl3Z\nXmnO47qlaquVw6qdqrZJuTAiKRccHhQbKiolTKnEr52foKCip6W62b15MTBULio8Ojs7Sk/sZEL0\n0kQ74Xs8VMzY7cbFu5+0z5efv6eisDZHPB8fGRceGhklTTs6qaOto56jpKW6srJKP09ULjZdP0NK\n2OLrY1vTPzM+STAwTk9O3cm6s7u9wqSeTbCXrvSwrVIqLiQfHxYaLCQfRK3Gx5+epqWoq63AOkva\nKipFQDXrxM+st8m4uUozXzknLjYxO0xpvbG8t6ey1MNUPqjHIaqgZOGzrEM7PiY1KBclPSYlyanN\nsJ6oqKe4wb1OJyxBJiBPeU60r62mqLrGsEwsPDMoLDc0R9Prx622wbLJUVU6I9ChIz6Xprevoqtj\n7CMkORgUJC4sMbuqp52oqJ2wRDs/LB0fKjkwPqqeoJ+bnqC8Pj4rHxcfJSEsPsSwqa6poavUd+M1\nKCIcNp85K5KSnKKcm7neHBQmFwsRJDIvxqKilpirpaLKJScrHx4mL9+kq6WSl56qqtEqJRkaHRwc\nL+fNtamhpaa/xbo9KCk5LicvJjiRnDCUipOrrKIwKBoJEBoQDx+0pqOampSTp347PCYXFx4wP163\nnpSWnZ+crEMpHyEeGRsoSFzirqSmr7rH3UYvKjI+NzpOzsf6L8yOnTCakJivV88sLxkJFCUaGii0\nnpqbr56YuygfLiwdHyrLpKOpoZearedkYi0jHSdEPTdFtLXD51lXVDwnM1RSPk25rre9ur/E3EQn\nKJmXK7GQkqdQ7CMlIAoLHCYgJsSalJOgq5ykSBsbKyYjJDmqm5+qoZmgvkE5RTUlIjBJRDM4Rt9V\nL0RnytTovLWuwNq7ud1bTEFEOzUvKCqdksOtl5GbUjEeHx0MDBciPmfEnI+Nn7WmtkEfFRooNC43\nrpqXnaejpMQtIyUpJik2TsDK1dfrzE4/S0zZ29TDvri9vb/P2U4wLjAxLjA4H6+Lnq2YkZO+ORkR\nHg8KDx35qKOdk4iOtfQ9LBoPDhIry82vmI6PmKW6yDscFBkkK0BJwKikr0vTw+Q7LkTpx+1fyL/I\n1kM8SDUuLDNH6bvHP7uKjbCfnpy6IhMLGRoOFSrOnJWeopWRwh8dHSAdGh1fnJmenZeWn+wmIiQd\nFhs6w6yjoJ6lrGApJyMlJCk6YLOssLGrrr5FOT0uLC9C6M+vr+3blI+3zsOy0SYaDhwuICAyxZ+Y\npbuomcYgHx8pLi4pW5+bn6SkparMKiMsKyAjRrisq660t7w8JiYoLzY8Xs2sqbK1trvdTD4vLzgy\nPl7mw7i3Pa+Onsi/uq1HLxcTLCcfJDLbpp6suJ+e6TksLC0xMidDraettK6pqLdCLj9HLCUxu7G8\n1Fm/vTwmKD/fZVx7uqCnzf/JxTopJSg8Q0Bdv6ypqbBBVJudYz5LscBDJxotPC0kJ0q6qa+8q6Sz\nRi0rLC4yLj3EqaSloaaqsNc6JiEjIic4u6urqautuUssKiovNjZJx6qsvr69zD4wLS9O12vqxK+u\nsbk1K6ac9zVwqa67VhwlPTEeGytXsqy3tJ+ftEYxNzIxKiU6sKSoqaChqbRDJyUpJh8jTq2srrOu\nrro/JistNDI45LWjq7i+u79ILiw5S09DbLuwrso/L9qivTlesaeuuD8kLjcmHB0qSLqqrqyfnqnH\nTzUqKiUgKmm2raSfoaOpwTsqIRwcIiw/waqgnqCntN06JyUkKzhNy8ewqqy4z99sTD0zLj1k521X\n1+Fsfb+zvbiwsa2zxkAsMTIrISEuQtq9ta6np6/IbEw3Li42TObNxbuxsbvOVlBFPTYxPV/WzsvA\nubnDfVzv/VJCUG/y6uTb49fTbUJDSz49TmFQWtjKxbzD62rVzG1OS1ndzN12yrq7xdHT8F5KPTtC\nUE5GU9jR111ITE9RRUZUX9zN0s++vcbc187NyNfh2srL4WxUVFNLQ0Y+QFNPTEv/9XLl7vjpz8/R\nzcbGzuFpZVpNSEdK1L7Bvb23ub/BVD06OjoyODk9XN3T6OPg+t/qcmftzc3Izt/X39jwXFpvzc72\nc8a8u8DX+lldPzMyOT06QUNl1cnI0cjEyN7c3uXtak5GVmJWWvFrxKqtt7W2s8LRPykvLSsmKTQ3\n9se+ua+ttre6yvFfRzUzOzg8S23LuKytrq60xVA9LywwMTRCz7y8tbrAy29GOD1APT9O6NPLzdjf\n12NNVE9Z3MTTfrafrbyuy7VoTCsdNiQmJi5Xcq25s6imrdX9QTk4LCgqQM7Lt6ynoaSrw+laMSkh\nISgxPu2zq6Wkq7jRUC8pKSsyPlHZta61vMbcUkU7OEFR7cW5uL/Ksqzp49N6y0lNLzNRMTo2Sm53\nv/e8tb7USnpIPz00Q1/BvsCvrK23y31GQzYsLjM5TdDBsq+rr8PYRTkuLC0zQ2jIvLOyuMbkZUY9\nODxVbu7cvrjDPluiuEjZwK3OzDQr3TgpITNUSspcvqinu1LGx1Q1LDFD5XhXuaequMjEy2E2KS07\nQDQ8vLaur7eyuco0LzUvMDNR27W5xLu8w09DPjxGPkZX1r67vdlS/6uzP+K5rsdSSDRvOCYoN/A/\nV265p63HTsHDRTAtPVZ+Y/iyqrDBz8fjPzAtO0Q+PcWuw7ersb/rTjc5MygxV+17x7m5ssNeYGxF\nMjxBR+9q07myxDtNqatGTrmstVs6NnQ8ISU5ZEVL6bejq9Z/usA4KixvdTJHyqquvr/Er3Y1MT5K\nLjZjtbfMxK+sz0RFUUMvLj1u223svLbFU1naXT41QO3dYVbAsLLHWknox0z7a76vvMJuwFIyLS0x\nLzo3abavs7iyvdZLOTU1Oz1J2r+vr7i3vM1ZPzc4OzU+2bq6wLa+zvk9OTk/OkfX0cnKydTc41da\nVk1MZ9zs3snAu8VMSc/fPkDtwr3M6sm6zz8+Rz41MzZJztDOwre3xtZeTEA+Pz1LYs28vL++vc7n\nZktTY0tHcNv69fr17XRPRVxZQUpi6eTd0Me/wsjP1+pvTklQX/RlcvHd2FVCT11LUHPezb+9z8jB\ndlRUTktPXGTdzMvP21xNUEc+PUxfanzmx8XH1dvMxdRSZOZwTlD75OdfZ+lrUU5TePFeXN/ObVJ0\n0t/ey9fMws1fW31DTGxK8czR3crMVU9OTlZVT+7D2XHg5nZwT0Vh4llY2upw2nFNXNtfUtPKy8fO\n3dvUbExda1JWbFtOXl5f0MrOysnaWl1fSlRcTOnL5efIzVRo0m5eW01Z31tH/NpjXtzbzsLn4cfi\nS1zvSUnu6+3cYmDe+UxY2m5OWuLr79182s3wXOrcWWDsW01f6mfq1N/d3XBp11dO0s5r8dHj3vLX\n6Gh5WmxNZtpgW2F4XmZRXdHvW9zD3lV5293a5nzNzVlLYF1LTVdq7XxWb8rRc2ri22VWV3d0VfjQ\n4W3bzNp5f+fP31leb2FOXWNv2Obp3NTfaO/iV1fP4U7qw9B0Uj5Ubjo9zMlO37zN6t1/cdHmU9HP\nUlzM/0VYTkp57F/Zwdxb4upNU2pZa+FbVe9gUOvLzMrL0crQZl5vTkZa711i29nNx+FO78xJROdv\nTVzcbE9UZdH5TOu+0E/WwMpmZNHUV0NXZ1hOYejs4vXm3+Nv+udgXFxiX2hdXOfe/2vpfW908eDp\n5eXc3Nr5ad3ZbFrn3mJf4fVPas/l+9Z7S1LsUkhh2srN3cy90ExT+E8/RlZs/19oztBXVNnYXW/N\n1NzefGzuY01afV5QVldm8O3Zz8/Kv8X2U15jS0xLUcvPV9DB3F9+8lRTVePAxuPLu8tYVkw9Oz07\nSWdVX87F2+rgZFhcX1TgxdXkwsHqf+LodVpOXOpaR1Te6VZb3c5tWuXc2edZe89bRt3FcEV7u663\nw7uzvEc4OjUrKTA+U1jhwbu/yNj+V0pDRFXu2cy8srvJwsPkSUpRUUtGS1tdTlzpe1ldd3Tl1+77\n9dPRd2dURF+ro7i6qKnWMy4sKSQiLVrYeMOwsLzTTz06NTE6Xse8t7OvsbW81mhWS0E+QEdOW2rn\n0dhmT1deRz9J5tRcf7+2wvtWST+3nrhwq6O6Ly4rJyYiJjy8vMu6rqu8Py0yQzQvSLquuLmxrrPH\nZl7dYT8/Sk5KSVb+2uxdWVpaTk5OUOTG2GrDuNM/RFE7rpu65aiguCwrJyIoIyI6ta27uqyrxTUq\nLjM3OEK4p6mzube92EI4S9NyRVbRz3Jbbt3mWEpOSj9BTWldZN7KxsW/40U+MzSpmLXXopyqMCQe\nHSchHTSwoqq5q6i5NR0dKDY8PruenKKuubjNOykqRvhLRd+6ucXT29DvPjEyOT4+TM+7ur69x/h+\nUzgrKS2nkaOyn5mfNRwXFR4hHjKzm5uvr6y/LRgYHy/Sv7GfmJmpcFNGMCopOt+/vdHBtrjMSkNA\nOjAsLj3wy8a+trK1zEc9P1BGMComUJKNo62gnbMgFQ0QKjUoO6aTmLDMTjQnGhceWaahnpycnao+\nJSAlKTHLr6yoq7toVEk0KywvOENFS+e+u77Av7/STDs+T1NITm3XXryTj6fQ279GHhcQFC/DyMqr\nm5+/QCokIyYsObaempymtcRuMyMgJzu8oaGuubbBNyonKSwzOz1fv73Nz760u9tbU09GSk1s0MbK\nTDatj5a9UNW7QB8VDxpNtLnCrZ6mzD0mHyEuS9quoJ6fp75ENjUwJio9z6SdqMr8xUorIiQrPehy\nWs6yt8jUz9Pa3Ew+UM7JzsvTWS8ovZWXrs++rnMkFw4VL7euu6qeprhqKx0dL/jBrKOho6u6PyUn\nMzc3T72voqCySDlJPS4oKjBD1s7b576zvtV37t9rXFJvz8fL+Fk5ISmikJmvuLPEOSIVDhhDraqp\npKu7vHQlGR0yxKqfpK2vt+ssHiQ50LauqqWfqnAtKCkpLzQ5P/C+wM3q4OHT1Ofe0b++zWlX2thM\nNSQePJiNmKiuw1AtIBINF0Gonp6ludC98CUZGSnAn5ujsbq+3TQlJDa+qqWstLW5djAoKTVKVT43\nSHfh7fPMvbu9w8nP/Uc/TGzl/E09NSkup5CTnq/dXjovHQ4RI7ufoam/Ts28TiQaH0+kmZ6ydUhn\nTzcpK+ionqCvy15JOC0tMkFVVkY9OTxQz7q7wcnAuMhLPVDY2d3+Rj09Kh4/lYyTna3LOi0lEAoP\nJqubl52+abeyORgSHEielZutc9bLUjQlKUGvnqGvy1s+PEM8Ly42OTc4O0rJr6mtuMXRX0E+QVTy\ny8TrQDQpHi+bjZGZpLs+KyoVCw0Z0p6Vlqrbv7ZKHRMVI7GWk5y39U88PjInLNejnJ+r+DAwPkUz\nLCwuNT9j6dm9r6yxyGhBOjtG7srCxNtSQDEiJqePkJWftUkqLBkMDBEtrZiRm7G9udIoGBQYOZ6S\nk6C9WTc5NyghLrefm52sPigrOTwvKyUrRb+61c64ra262EY6PUbuxsDHfkk9OCseNZmOj5enwy0n\nJBAMDRdToJCPnbHDx0EeFREZapmPkqG9PjAzLyQeLbedlpmsMSMrOzotJyUv4rKxvsK9trO2zjou\nL0TLvL3cT0M+RzEfM52Qj5OfxykkIxUODRU1pY+Omq7L3DYfFxMYO56Qj5mwPCwvNSokLeWmmpim\nSiklKi80LyksVLSrr7/T18K3xFI6NkPivbvMZT4yMC8oMqORjpGdsy4fHhUODRIsq5OOk6C2zT0i\nGBMUJLGWj5Wiyj43MiogIji2n5mdskApKSwzNCwuP8+1sLXD39/PyMttQjtA6b285TkrKzk0MayT\nj4+ZpzweHhcQDhAg+ZyOj5muyEsoHBQSG1Cdk5OapsJEMisiIS1fs6Wdn7FEKSUnMDg3Nzp6va+u\nve1M5bm2xkQzNlLFyFw3LjU3Mb+Yj4+Xp1sjIB0TDg4YM6iRj5eltL89JhoTFiS6nZaXnKfASzMo\nIiUtPsmnnZ+1QCwqNEM+LykvW7SprMRNVryvuGQyLjduwtZGNTY4KTSekI+RnrAvJCoWDwwPH0Cb\nkJOYo6fJMCIVEhYny6WYlZifsM0/LCMhIitqrJ6hrs9BP0U9LiMhKku3q6u0wMC9wdlKNzAyQerM\n1FA/OCszpZSSk5ynVSYlFxEPER8ruJyXlJmbrDwoHBkZHi98rp+amp2jtEspJycoMjt0xritr7LJ\nQzMqKiwyT821rbK70+jU63pQQkpKXWNAODI/3H7Gp5yZmZ2uMR4dHB8kKi0rP72soZ+jtU86MTA0\nOjw4P+C3rKqstcPLy9J/UUhEQ0dFPz1AREFEVtW+ubnE+k5FSExi0sO9v81WPzs6QVjbx8O9wMy9\nub7J4+daSWVsX0w6Ny8uOUNZd9zR7eXHuK+sr75SNi8tMjxMzbqsp6usuOJFNDAsKzE7Vc/CvsbO\n3VdZ7djP6OfiXWZdWVhY4t/XydXuW2rW1dDe7PdfanvXv7q8zG1mXE0/LygmLEPIsq61vsjO31ZE\nPDxOz7uys7nJb15h+31YTUZIUltaSUJCS3fYzt9mbuXPy83W/f37amFcbPfZycS/w8vfSzovMT1f\ny7+9urWzu+JGPkBMX1tNQj09QE1OS1Jsy724tr3K6mNWTl9s/NrNxcjS8EtCRU1eaGpbWGrb1PRs\naWRZU1hOTl3exr64trzK/k0+PUldanvv7mpZUUZDSmXPv7e0u8nV7VhHPTg6P1PfycHJ3l1OS0tQ\nVmThzcXIzdryd/jr+3N29e317O/76uHiY1JKQ0dLYOPUysTG1XdcWWvi3dnV2vBaUk9LT1hy2s7L\n0+RyV05NWH3x4s/Kwr7DzvpYSD49PkJUfdfU6vJq/t7c5GBfZ3Dk5Or1eebXzs7a6GhdaPLe1tlx\nVE5RVmR+dnP729PY6V5PTE1Zeuvl5N/Uz9Pb9GpeXmFpeW1pY/fPysXK2XxaZXJpWU5KR1H10MrP\n32VOS01OU11z+enZ0dDU3+328dnT1tnyeH7o4HhkWFhkeO74dGludWlhW1dYWWDz29bS19/k5d/v\nX1ph7NjS0+9mcm1qYVZTT13q28/Oyszfa1RMSUxRVFdk/+jf393j7O/t/m5pbuzd1NbX1dfb6Xpf\nVlVUXXX4821qbWRt+/L+bG547t/l9nV37u30fnru5dza5e/7amJjYFlcZPLb1dLW3e50bmZjWk9N\nUV/02dHS3XdeW1dRUFVec9rNycbKz93ucGZlXl5cXnf58P5kX11kaF9fYXza0M7X6mRXWmR49+3m\n4N/d2+H/bGFYVVtndO7l3NbU1Nv9YFpecH/q5vVtXllSUFRTWmN/3dfV1t3o7Ore3/P4dH756tze\n3+X1aVhWWlZaaWptanX07uLh39/c3OXq7/HsenVwZnBqZF5YWV5q8efy9e3g1c/P2N7l6e9uXlRP\nTU9ZY3nw/X51b3ry7PLu8m5lZu3b2dHP1tzt+Whpb2BdWVpfY2929ezo6O/99evu+f3u7Ofo83Fr\nbXN8e29kXmBs7uDd3ODo6ubf3uP2a215/HBfWVJRVF5mZWNkbm90//Tk2tbT0tTb4env8Ojn6u1x\nX1pcZHJzamRhZG94b/Xt8Pb28310bXb76eHi4u94bWVmaWRdW23r2dDR0tna3eXyal5dZWtjX1lV\nUlRYWmzv7Ozm2d7r8nF5e+/l4d7l4t7c4en5c2xfXV1gYGNz7+Lf7PhuZGlufenh5+708u3t7nlj\nWlpia3Lt49/Z19fb4OTu8/10amNfWVlXV1lYXGBgZnbz7u3q3tjb29/p6u3q597f6u3r7XdlXVpZ\nWFpcXm14ePLx7N7a293f6O7x+HZnZl9hbHZ++P/98eze2NfY3ODl93BjWFRQU1ZcZ2558/9nZ255\ndvrk4N/f5e/y5enm4N/f3N/r/G9ucvlvXllWVVheX15ga/Xh3t3a2Nfb3+Xwfm9saF9fZGVz8+DW\n0crM09rza1VPTEpNTVJVWV9x+3v27eve2tvk6OL28ePj4ODa2Nbb7Pp7a2BqX1heYmRjaG1lZGRs\n/ern6Ojq5d/d3+10bWllY2ZpbG/z6N/Y0cvO0trxb19aUk5OTk9PVFtj8+Hd4uLi7O93df/t6e3i\n29fS0NTe6+56b2NfW1lYVlZTV15fam7+7ufb2djY3N7h4uxyX11dW19lafjf0czJx8nLz+BuVExH\nRERESEhNVl774Nnd3t3j4ejh39zW1dPV2drb4ufi+GphWVlaW1hSU1hdX2tw9+Pl5N3b29jY297n\n9m5jXlxaV1xhbe7f1M7Jx8XGzNlrT0Y/PDw9Q0xd8t3Y1dbW1tff6+7t49rY1NTb3d/l6e1+bmdm\nYFhUUVJUVldaXWt+7d3Uz8/R09Xc4et7Z1pZWVZVWFpdZvLazcjCv7/DythrTD87OTo8P0dSa9/P\nzMvLzdLZ3+fn5eLg3NbT1dnb3+t9al9bU01NT1FSVFhZXGRy5t3a2NbR0NLU0tXd621cVU5LS01X\nftjIwL69vr/Gz/NKPTY0NDY6P0te4tDLyMfGyMvP197n39zZ19bW2tvf5+z+aVhOSkhGRkhKT1hh\n9t3W08/Ozc3Oz9HU3Oh7X1RNSkpKTl7t0Ma/vLu7vsfUdEs7NDAwNDk/Smbay8XDwcTIzNLX4ujp\n5NnV0NPW2d3h9G5dU01JRkVGRUhNUl9x6tvVzcvLycjIy8/b7mdUTEhJSU1f5s7EvLm5ub3H3VVA\nNzAtLS40PEt4zsG8urq9wcjO2ejv9+Xa1M7NzNTfeVxUTEhDQkJDRklPVmX24dnW0s/MycfGyc3T\n4H5aTUlITFRu2su/ure3ur7KdEY4LyspKSwxO07fw7q1s7S3u7/Gz9nf39vWz87S3fpcTUdDQUFA\nQEFESEtQWGFw6djOyMO/vr/Bx87ealFJSUpSc9XGvLe2uL3J80o6MCwqKisuND5W17+4s7CvsbW6\nv8rW5O16b3d0aFtSTUxMTExNTE1NTE1OT1RYXXDm08nCv7/DzOH+fmf408W+ubS1tbvLaz4vKSUj\nIycsOVTMubGurq+zu8LP3v1rZ2ft49zb3t75Y1lYVFNVUE9MSkpISElMT1Zs6M7EwL7Cy+Dv7PjP\nv7evrayuscFbOyohHRwdHyg0cbqtpqSlqa25z2ZCPjw/TW7NxLu6vcDU/FNFPjs7Oj0+QEdLWXPb\n0cvFycXH0O5OTl70yLisqKajqK2+Qy0gGhgYGyAtTruqpKKkqrXFakA9OT5JX83BtrSxr7W4xepS\nPTYvLSwsLjE7S+nFurS0tb3I60Q2NkprvaujnZ2dpbLuKx8YFRYZIjLZr6aipau87TsyLy87QPvJ\nvK+uqqqrrLW62kw8Ly0pKCotNkPqxLeztLrL+j4wLDb+vaWdl5eboL0+IRYUEBQbKturnpucorFh\nMichJio2UOa4tq+usK2zsLS9vu1UPjQxLS8xOENb2si/xs5qTzssMVG8pZuUkpadtzQdEA4OERwv\nuqGamJymxTglHx4jLku+r6eipaauvd1AOjQ5PUZ3+dTY73dQTURFRkhVVF5RPTJHt6ialJGSnrQr\nGRAMDxQeR7Oem5ufq9g0JB4eHyxEwaehmpmdo8BAKSAhJDROyba3uMToTz82Mzc7Slrk3UY9xaWb\nk5GRmbY8GxMQDhccKF/BqaOlpa7fOCIdHB44xaWYmJSZpbk2KiEhKS1AT3fIyr6+yus/LysqLj/v\nubfRbbeknJSTkJm2OhgRDw4ZITe6sqmqu75YMCsfHyEm1K6clJaUnK3SLCcjJjA0Tl5gx8/Gw2VP\nNistLThQ0LvhOl2rnJCOjpGtNBkOEBAaKzjeyb6vr6+u3jEeFhgaMKmbkJOZnsdPOTZRRl5BMjgy\nSdfPvd8+MigpMj/LuLnKLzqsnY6Mj5K9JxgOFRYdMStDWNenpaWpRCQXERskv5qXk52ttVPk6vvP\nOzg0MFX0wbtuTDIrLCs2P1DUy8NFMq2ZkYuQlKMpIhUWGxUfISRjz6eerrI6HRwWIUHJnJybna+o\ntb+9Q0U4M0JH92JKTjw/RDpCNi41MkDfzdEx3ZuUiouSlT8fFw8aGB0tJ07EvqGueUEZFxcZQL2d\nlpuZpayr0tNCMUE+17zFvkMwLig0NTM6MjtCVr3ATSlPm5OJi5OZNB8ZEx0aHSkiUK+unKtZORYW\nFxk6f6Wdn5men6G85z4wUNm8vO5KMDExLz8vKiopOXe+sL83J7iWjoeNl6oiHhobIBgcHyDJq6Kb\nyTslFh4dKk9PsK6jmp6cpclmOUbIvLr4TD0yQDYxLyEkKDLYu664PyrvmI+Kjp2pLycxJScbFB0e\nRKaupeQkLRwlMihOPVGwr52dqKO7vbLLrbrY2jVIOzJGKionHyopMnXNv1Q3pJCNipanvyYtNi0p\nGhkjMbijtscuHScgJzMqP+a/qq2rrcyzsq+isrGzzLveXT0oKiosNywrKSQ498d5NaWPjYqWpcEk\nKi4qJRobKkqtobLsLB0jIiEpLT+1qaWpxN1N0a6tpqu4rrCys1UwJiErLzIyKCooNM3KUzCsjoyJ\nk63KJCczKiEZGizRp56vViodISEfHypBtJ+jqsFIV7+sqau1uLKnqLduJR8kK0E3LCklLUnO2C4u\nno2KipqtSScxMSwaFR0ut6Glvj4qJygjHBspU6mdp8BXPN+rqay0vq6jnqTCNh8gLDIzKSAlLkvA\n1zMfQ5KKiI+swi84UzAjExcs0aOhvz8xLzkoHRYaP66cnsFDPW24qrXcz7Shm52vVzEqLzErIx8j\nLk7X8TknJayNi4ybubL0zzMbFhImv62puT9N1k4uGBMWKbCiorpHW7y0vtpNzKudnKKsyMxVNike\nHiIrNzY1Q09PPTekkI+PnKqsflonGBYWLMCyq7Lav8c8IRQUGzK2rKu4yLa20m9Z0LCpoqanprC4\nOyYlICcpJiksOdXI+jYtoI6PkKayprrBJxURFjm0u7nH2quuSB4RExw+u7u3u7msr+Nh9cGuraqt\npqOwvzUnKSkqJiMoNl7A7josMpqNk5evrJ2t3B0SFR18xDpPz7OfrDYbFBokQE9XwbSvrLDRxsG9\nuLOrrKWpu+k3LS4uKSQjKjhe2lg8Mjygj5aZoKibqmYgFRkfOFUuOry0pK04IBofJS45NWy2tK6u\nv7ays7K2rK6prMhiOTAxMCwlJC06TWdFOztGu5iVnJmgnqDJNRsbICY8Mizvu7KvYy4kJSorMC80\n3769r7Cwq6urrausrrPfQjcwLzAwKiw5QkdDPj0/SkmymZmZmqSirMQ/JCAeIzItM1FM3M1hRy8v\nMTM6MTJDUcqwrquqpqKkpq6/ZTszLy4vNjg7Sk9YUU9RRUVCTtaxoaKqrayrr7x3Ojk8Pz81Kycs\nLjtIPT5BSUVDRUFizce8s62mpKert8pNPTo0Nz07PlFOV1hNQDk5Ok7m1Lmsr7Ooo6errbW7uc9I\nMychIyUjKC0yPFdJOjlEZ83Bxr6xqKSkp7G6yGBPRTw9PT9S+HRJPTQuMzg+R0rWtbayqKSmpqKl\nq6/JTjgrJSIgHyItMzdGQDw/T+Ppa/7Yuqunp6u0uLu+xdpcQ0BMX2FJOTAuLzM4PUZP3K+ttrCq\nqKaipKuvvd5ZNCYhHyAjKi4vOjw+S1d7ZlJX2r+zrayssbS3uLe+y/VWZO98SzgvKysuMDY+UnDN\ns660sqmlpqaorLC51EcvJiQmJiUoLDE4PUBETFlaXW3Yv7eyr7G0t7Svs7rH3fPc1WdENi0sLS4z\nO0ZYYfa/r7CyqaepqKessbnsQTQqJyclIyguLzM4O0JRXWH56dXCuLOys7W0rq2wucTO087zTT0x\nLS0uMTQ6QEJFTcmvsbCppqakpaqxut1FNyomJiUmKi0uMjg7QUpRZODm38m9t7a3ta+rq6+2vr/D\n1lo9My8uLjAyNTs/R0pLf7utraynp6inqa63y085LiknKSgoLC4vMzY5PUr6z8bP1L+9vLavra6v\nsrSytL3YQzg5NTEuLi81PUNGRkpaz7Str62opqepq7K+1Uc3LyspKSgoKi4vMDQ2P2DTx8zV0L6z\nsa+xtrSvra+3wuRaTkI6MSwuMjY6OztFW+zf4r6urq2oqKurq6+7zU47MysoKSgnKSwsLzc+TG3k\n0sS/vLe2t7WxsbKytrq9xtZnSD47ODQyMzU4PkVLWm195MexrbGtqaqrq622weZCNi4pJyYkJCku\nLzQ6QVnUwr28vr63sbCvsbW3t7q/yuJbTUQ8NjMzNjk8QUlMWuji49vBsrKwqqmrrK2wvM5YPC8p\nJSYnJygsLS86RVfexb28vb22srGwsba7vLzCy91mTkA7Ojc3ODs+RE9ZXPjl7urdv7CxsKurra2u\ntcTmRzcuKSYmJSYrLzI2P0tc18G6trq6tbKzs7W6v8DF0O1bTEdFQD89OTtCTE5VWFRh5NbS2ti8\nsLCuq66ztLa/z188MCwpKCkpKSwyNjpFVeq/tbi6uLi4tLa7vL7IzNRwXWFXTU1LRUVGRUhMTU9X\nXGbf2Ob22Lu1ubSvsbWztL7UZj80LispKSgpLTU4PE1f2ruztbm6vLu4u8LI0dzX2vtmd2xm+VxH\nRUlLT1VSTVVge9nU5Xp9z7q5vru4u7m1us7oWz42MSwpKiwuNTw9RWjaxrq5vLy7vLy7wMvO1+vi\n8WJcX2//8mhUT1RcY1tOTE5Yaeza2PNZb8e9xMC6u7q2t8DT51Q+OTIsKy0uMzk8PEVo2MW8vb27\nubu+wtDq7N7d6OXf3NPS0dtrV1daVE9OSkdLVV5ieuzzaVf0xMLHvLe8wr2+ztjcXUY9NzAwMjE2\nOzw+TvLZyL6+wsXGyMvMz9PTz8rM1djY297Z2fFfWE9MS0pIRklOUFv35OvvaFjXwMvIurzEvba9\nzMrjTEY+NC8wLzE6PjxBWPjXwb3FysjGxsbN3drQysbGztnQztjhcU9MTElHR0lJTFNXXfDd5+rt\nX1nQwtDMvL7Ivri+ycfQVUdANS8vMDI5PT5DVf3Rv77Gx8fLzMvQ3drOysfHztTS0dnb6ldMTUtJ\nTU1JSlBRWG5qWVxfX9TAx8a7u8G+uLzGyNZVR0A3MTIzNDo/QEdZfdrFws3X09ve0NDd2s3HxMHI\n09nW2ufwX0xNUk5PUU1MVV5aXnBz79bU7E9WzcTOxbrB0MC3v8zOckI+PzgyMjM4RlVMSlFXfcjA\nz+ba1dfKxMvUzcbDw8fO1dra2udbSkhKSkxLRkZJTlpz7/Tj19PaZ/jFyNjDvMnTv7zHyMtoRUY/\nNzY3NThDSkRIU1Zm0srU5Onh08jFxcTDwb6+xcrP4PHuclVMSUZHT1VMS09VX/jh5Orj3tvZ6lxL\nVuHn8s/FyMm+u7/FyttVSUM7Nzc4Oj0/QENLVvjQzM3LxcTCwMDDxsfIzNPc3eR0Z3FlWVtiXVNR\nUk5NTU1PVl9hb+fd3N3b2dve4Ot8d2/73tjb2M/Pz8/T4m5fWk5GQ0JBQUZMTlFf9uDVzMjIyszM\nz9XW2ebr3Nzi493f4el0ZF1WUVJQTElJS05SW27p3NbOysvLy87T1dz2aGddUlBTUE9WXF5v937t\n4Nzf4+Pr8+rk5+33/O7i3+Hf5nxjbdPPb1RRUFZSSk1dau/p8NvQ2NfY2ttoXvd8detq/+//63zl\n4+Xn9G5ea19TV2NaWn1zeXjz3/DZ197e2ux54H784nny5PHu7H586mFiaFdST1taWV997Pfa2drX\n2djde1//Ym7vXG133u5g4djj/ubf+Wnz91pffWVcYF1fXXvl49zl3urk4+fd39f8c/BeYGhhen1f\nXVlUV1/r6fna1/Hz39Xf8u7/e1hacWNkYXXf4+/e19/d1uTrbmheT1hYWlpbZnDscPHt4Nrh3+LZ\n3Nnb2t5v//NYY/xZX19eZF1hbHz892p8/Hrue+Lb+93c39jk7e9q6WRe8V1q/nF3ZmF27nR3Yu3g\n/n905ej1YV/ialtldeDh3Nvi29DsZ+ViWl5QWFpkdft6euDa2d/x6O3d52Fyfl1gb21oavbmaO/e\n7u3+6fH6d3L1amleavxtZXp/3eD56Gvn6lvfcm/u6917+N5yY+VpZv1n5m35fvTecHhsY3nxX3Bn\n/vhh5uLm8Pji4vD883du5eJwcHFuaWdkYX77++h0au/q7W3x92b7b33o5WR63ffd7mX04Hb2/V72\nd+tvbuj89G5mW3Fnce1laXftcv/m7u3p4e/o2G1r89/w/3hhX2zrYm7tZe1mWvN0aHfv5//f1d/m\n7OzfbFtybW1ebNfn6Wxv2+/t7mhne/1iWW5gXWtldvVjbN/b6d3c5Ovp7OP8beB8bXJveXJucWdh\ncu7vZfrxc29y/XzsfWnq3exfaeLscPfd/vrh9flq7uR+829q6l5Q+Gxab2tpc+Tva+Xi7N7zdu/V\n3XRp5ex23F1cfWzrW138e3xbbuLc7mfs+3vq6+tsdfny92zv9Xjm+uzubd/8XHTocmF9b+z8e3Jv\n7Wz55f7r9+f8X/T0bmZr/P7vbu54aHTr3njx72719+1vaOXvXWZ86/938Gb31vJc+el9b2/03uBu\nWHfj6edtYd7j6m1ffmx0ZGb3/mhm+Nza5Wlv5OttZfn/eXj+4/1zbXzr7mhmenZoau3j8uvf7ers\n5uhfad94W3jz835ne3lyb/txZW359WR44vZk99bc3vt4bG/ue3hx8WRf6Ohz9/P69/rweWV9+mZ/\n//v3av796O3u7mb87mxl7G5kdv1xbu7s7Xru7fbw++XsePnnaW1rYOH8aO9yev/7cnNz6upp7uht\nZu/nfPr0e+b6YX108+/h8HHh5/1y6P9eb237bGJz7+f7Ymh34+H56/d3e3luWHbfeube63507P1x\ne3dnev5p93j29Gx3dmd+7vDw+u72b+/pemn2+vXnbfr6+eZ1a3H77GZlbPXg4ext7fPw/F9obuzy\nfm378XhlXujicmpv7uDc9v/x4/B/9Fxk/nxvc+10X2jk5HNgdt7g5Xty9ux0+2Zp+fTd+W1/bGj5\n3/VxYPb679jg7G53a3t9amtsYW/c711pfW57e293+fL67/X4/ejq49j9eeXt9nL36/VcWvv2bWJn\nbXjmal744+F7Z3ft3Ov462X65vPu82xfc+bobnNZXd/6X2X/6+/x3drpdWv28expaHJn8/Px8/1u\n99/zdvHw/mHw7mpqbOjo83lu6/v+6fVlbXX3bl5z7eF3a2py7PdpZfHf3OX6+fZ6b+9+cf7/X23j\n+X3ufOflYWV47v5oePby7HZtdu/5eWtofW/o2+379eptcO9rfel2ZW3r4/V6b373+nj96nx8bWT3\nb2Ft7+jtfHHp3X9x//vq8Pd5dHh4am7x6fN29/H6c3D0f2nq6Wlxdfv36u509fd7/floZWpmYWfv\n6u198t7f7ezr6O99f3XweP3yfu/2aGB+a2hqZHxzbGt8/n7q7Pb87OHr+fv0em5xbWhfeejx7f7z\n+nrp6vp6//D8bHru6+r4/Pfu7vhue21c8PVta2lqdv9t9Obs5+frfn7zenpyZHh6d/d+9e3n+P11\nbXV183dqb29u6+f08+Pb3+Xl72dnaGVuaGhjb37q6/vt7fh6a2Z1dG547+/18Pbt7+7/aP/w+3N7\n/fX9/HRtdXT09nz+d3p77eLu+fx5fG909/p77f7w+XL6ann4d/fw9/Ptc3x95OhvdWhra3329Ozz\n7Ofq8fL5bWZrZ15fZWp7fvzv7evy79/m6e/+6ef18fx3fGtxd2t38vVoa3V6cGNwZ29wa/r1493a\n3OPe5OlubPlpXWJrcXRz+/d69/1wfHh0fnh3/Pn3+fv06+j3+/VzfHJ6fm3r6XNue+/t6en3/X52\naGdudfh99Pn7+nV1cXptb/jv8vn3evTl6ur49ux7bGZqdXv6fGt2+ffw5ePm6e3t/HlwZGZmaGRo\nc3xrb+/u7PL27+/18Ovq5eby6/Tu+G5+amdwbm1teW9qbWloZnD++Obr6uv77Ozl6XR6cW1w+/59\n7fDx/v9+dXdyfPjs8nVudm9z8/Ps5uLj9vr2bWhzcXFsdnn29H94a3T4/m9ubmV27vXp4OLof/bu\n+e/0/vf+8G5r9fx29v12dnBtcXxvfO/5/e3mfG93a2d0cnt5b3r0/PLm6urw+u3vfnl0/+18dGpf\na2xp7Obr6fL2fvrp7vn7/XVqc3J9//z39372+Hhxbfzq7PPr9/pvbf1yfnlzdHj+fPd3/vhzb/78\n9/Hy8Pnt5Oft7+z7aG5vanFxbW1zamx98Ojt6u72e2198/jx6OXo7floaWxveXp6dHZtb3p77/t8\n+330+O/0d/V+dvX+ff528/v27urq7O78fWVxfnV6anl3dG1sfv3v/fXv+PH1/Ht1dvt8dX53c/f3\n7unu+XB89/j99P15c2V+9frp7f58fvn9eHZtefd++fLr6ez5dHJzbGx0/f/y7nZ69nx5//f9fm1z\n8O3r9PLw+e/t7O35cWhnY2dnbHV3dXZxdXt/+Xvy7vDm6ujg5vj5+f52bnlzbnR5+/tva3f5+fDr\n+/P8fPD9fff5/nT+/WhnbG798PLs5e7u9vl+e/V7c3Nub3p8+/j79e3xeHN4//nx9/5y/fb9f3F1\neHV9ffnz9/Tq7fp9e354ff1z/vX38f10eHd8dnR4d/336/L/9vD2/nJobWpueXnv8ff7/vDp6fL7\n8e3w/H/6eWhvbm54fHhwe3v3+nv8ef1+fvHt7Ozt8O7z/vL+eP1tbm5scm1ocvb4/X3/evTt7Ort\n7O3v/X13/XR68XzzcnF7cm5tfHJ1/Xt4ePn++vX87ezu7u7u9P7+/nhxb310c/72+X51ffpydH1z\n+/z87vD0+e3u+Pz+eXV5c/n4/Pfw+Gxwb2d4+XhudHhpdPT08enm6+n3+uPl6vVyamZmZnPt9O/7\neHt893rs6vj4dWlrdWlmanP09uzv7uro5+vv+fx0/3137/N5cn7/9/N9evPuemhpbHVua3z29fz7\n/fv9/vLq6/V6fHN48Pd+efz4+/n17PD78PN7cWpmamhjaWtsaW739fX76+Dl7O/v6+nt5OXw7Pj/\nfnN5cmZqb2xsaGVma3NlZfru59/n7uru+fTp4eXm9Xf89ntzfHRybWJmffV5enBtcGx2bG/48+/o\n7e3l7e/08u96dXN8+3dvaG307nr27Xp+fnz/7uXs7/97eWhzd3J0dWpu/X55ev9wa/rye+3z7uP2\n7fR18Obv9+v7+fV9fmxreG5qb2toZWh4dXju6ePo8O3z62978fTzePTm4fb182hz+fZrY2ZiaWv2\n7vd1/+bx7Ozv7vf4bm1qbPJ9d+72/Onq+n15fvdz+vf8fHR9anP2dv7y/u/u+3t99nPy6vX4X2Jh\nY25p9vbn6vDd6PHu6H1t5+/593Jrdmt18W9u7vxv93xza2hxd+5wde396un47H/v4+rd821vYHTo\nZXluWe3t+3Jrd2Xr42pl+fzr3fh36eHc7Gv4fGZpXvXeZl/1b27h5nzb0e5nXF964mxMV2p25Nvp\n59beftzbal9WWGb3Z2Le09jaeWBpaVxXaVte9HTb1M/X7OH6ffdfX11eferpeW7u9ujg+XlpXlZR\nWVleaG3m2NLLzNHf73FWTEE7QFfJt66rrbG4yG0+MSsnKC06W8+/vcTP6GJRSU9YaufWy8rJxcbG\nzNbZfl9hUU1KPS8iIMWbl42NnL4iFhIPEx0iLM2km5OPkqE1GA4MFCe4npqaoKuzvt06LScmMErV\n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\niIyNoSwcDhAXGTc/76aekY2Oj6U7Gw0OFR9SuqikqaWsvd03KyMfJis4y7Wsqa6wvHxGIRo/v6uO\njZCVtmkjExkPDBIPHz+sjo2KjJ/OHA8QDhsrL8GsnI+NjJGhVRoPDQ8bMbynoqCossL+TzQoIh4f\nKFKuoJucn61gMx0SGj3BmoqMjZCqPxgODQgJDxIkrZaKhomOpSsaDgsRGCHaqJmRjo2TnrUoFhAP\nFSNNs6ajpa7DYTQoKSgpMkbDqZ+dn6zHPCckHBUpuKeOiI2OnNYrEw0LBwsRGlKflY2LjpOmQyAU\nEhcbJEm9qJmVk5ScqPwhHRcUHig9u7Cqr7/HRDxVRUlKP0dcz7yyrrO/9kAyLSgpVrSrlo+TkZ3n\nJxIMCwoPGSPCoZqRkJOXorlAHxcVFBw1x6OYl5abqrw4JiYgJCotRezGtLa5wU4zKSUqPMyvpKOo\nrL5rTz06ODc9NCk6vbmej5SXnVokFg8REBYpM060sKmenZubo6vJLywnHicsLUZs0LKtpZ6kpafH\nSjckHx8fIigvQl3BrKijn6Stvl08NDY/UPPPy+pOPTUvKik6y7efl5mZnLFJIxkXExUcIza/q5+b\nmpugrLlOKyIeHCEqNdSuo52doKi62EszLCglJSgxRHDPxb67ta2srrC/ZDwzNzhAaWNXSj06O0rk\nyruvrbS3w0k9Rj09bMm+uLW63klNTUBHSDQsLCwuOe69s6uprK+3yGxOPjk7QFDt1tDNyL67wcrZ\nSD06Mjc8RGDzz83v2cng2tB8W11s/dO+urq3uspgRz40NDc4RV7axMXFxdLT31VKPjk9RV7Pv7m0\ntLi8xt9mXU9IRTo2OT9c2czKz87T8PpeVlxUWGf6a1FcWGTSxr66vsfY69zc5v5QPzIvNT5hyLq2\ns7e/0FtFPDo8Pkpm18nHysPL1cTJy89URD06P0BGXFvfz8/Fwb2+xM3/aFNDREM/PTk/V2jDur25\nvr6+0c7dZV1LRUNDR01PXFt25PLM0tbXddtxWXRjbmhUXVFe0c/HxsjE0M/RXEk/ODk8RFTxycLA\nvb/GydL3U0xORj9JUmns0sC+wczfaVJNRkRJX9/b7WNNSE9KTvDaxbq5ur/U4/peT0RNSUVfXmzd\n08zV2NHvU05GP0NZ/uXNyM3L3PvnaHXm+9ri5/9hblhpek5u6eTV29vdaunmZVlKPzw/S2Xa0726\nv7y+yeBcT25LO0JHSF/Sxry7v85iPjg9PkBM9MzFwsTW8d9xVGPcfVTj3uDb9OxtdVpg7mN79Wdf\n5tDSzth8a2lHQk9KU+LkzcnS1+5zX1JXZfTbzdPa3d3rW1vc2mhWWU1Pa1VPXurq1cTN1f1UVGpw\natvQ0tzeeVNaZ2jt1d7U/1/na3ZsSElMTVl24Ovo0NHg0sjV1NDucllYWUdLZe/i4t/X2N38V1dm\nWlZr5dfnZe3r2t107uhyWVlcVGh7etrY1M7P3PpZVlJOWlr42NPI0uhpUE9UU1xTWNve18rJy+Hm\n3OZbUVVTTlv/cvnr3NPdef5dVlBe9ejV0tDQ1+lrZVpRWXb84/Dq3n55bGZabe5fVFnv8+nPzdjZ\n5/p7X1xOUlpd6NbPy8/k+GJWT09WXGnm4NvU297meHltX19q9+p+5flh7+je5mlhV1d77njm5Orn\n6Op5YmNudHv67nNv3Ojk6W5zcH5xbHFgbO3p7d/a2/JdZXZtfG5sZWF3+mp27/jrem//5efl3d7f\n4PPz92htYFxhX25sY/HueOnn5+fu+WFt/2hyanr0+/7r4eze29vtZGNea/X0aGJbWuXY1tXg72lb\nX19YZ2tu+2xp+OPd3up57Pb6fXVwdPvr3Njl/Pn9ZV1gbfZ08/b49W3q7O/r+mpXVVtp9ube2Nfd\n5/L3/GprXVNrb3nu59/t5+Z1aWdpbvDn+HB97uL1b2NpdHnf3+nU1+z4eXpkV1JTWmNode3n4eDl\n5+DceXB7a2ltanHw8u/w5dr5c3tydWFibmpv6Ox94uTv/n3q3+lnX3VobHZeZG/8fOre7uzk8fvt\nfGFiYmh193z04Ojp3+j8b2589HRn7+z87u9zb/x7cHh3X1pt6Ojt397q63BgY2V+eG95+n1mfdzh\n3tb1aXDw8Hzl8PZ2Xm1vZmBhbG/+6Pf13fH76v91/u33fPteZXzyffDe5e9bYG9p7W1icuvs/dbk\n5932fGJvfV9nXWrw9/515OXf8m7s1d9q7OVtZGlmXG1hY+z4+3hved7YfWNq/vn3dfTq+X9v4OHn\n5W9nbXlpbnT18V9n5Nj999/p7XlqZHLq9m1/93BtamfxcV5eZ3B88+Xa1ttma9vtb3xz7en3YGPv\n52lifP3uX1Rw99/dbnf773Nfdn189/zt4N3f6ODb5fhmYmdhaG5paG/17PN5Z2Px5n369+/v5N3o\n831rbWx5+nJvdvh/aWhyeunk6X1z/Glw8nxxfufl8/fw83trYGRv/XFs8+bn+fLyePvj3+Pn7/Z5\ncm5raW/+9XBeUUVDTl/dwLexsLW92E0+NjMzNjxFTWrg1MjGx83fdmBWVl5ibG518/ni2NPMzNDZ\n72laTEddzL6yqqipr79sMyciHh8iKTZM07WtqqeprbXF6Ek6NTIzOUd1y724tri7wtdbQzkzMTE1\nPEv+z8O9u7m6vL/J13hRQj5Uzb6up6ansclPKyIeHBwfJTRHzK+rqKWoqbHC3Ek5NjQ3PErZwruy\nsLK3w95KODAtLS81P1rYw7y7uLm9xNh5VkY8OEvNu6qhn5+qul0pHhoYGhwkOFO9qqaipKeosshs\nOy4pJysxQ8Ovp6Kipa3AXjcqJSMkKC5A47+yrq6wucDM+F9LPTo2Li9PvKufm5mcrMk4HhkWFhod\nKlLOrqWgnaGmqr9RNSgjHyArOtGrn5uanKKwXTIlHh0eIy091LavrK60vttcUk1PTkZBPTo1MmKv\npZyYl5mq6DIdFhMUGh4r3bWnn52corLLOiUeGx4mMdWqnpqYmZymulsuIR0dHyQvW7yxra+50kk7\nNzU6QlPlz8TCxsnWVzxMuqyinZuaqPg0HxcUExsjLO2wpZ6foafKPCkfHh8nRL6onZqZnaax3zYr\nJSQoKzdkwbSwtr7+Oi8rLTQ8UtbMwry4s7bA4EQyJiRFq5uTkpKZxCcZERAQFSU46a2knJqgprs0\nIxkXHShlp5yWlp2owUAyKycpLDdXxq+oqK7MNicgHyUuSsm+vLm6trOytMhHMyonJSrEm5GOkpqk\nPhsUERUYGCQ9yaifmpWcrj4dFxYYKcejmZqeoa3HYkFBOikmKDe9p56dqPEqGxkeJzx62sfBva+p\npqi47j0sJictTNVe0KaYkpSdp8wiEw8RGh8nS7elnp+gorQ+HxgaIjLJpZuZnKm0yD0tJyYuNkW+\nqp+frvwxJCEjKTlKSlDmuauqrrnUSTg4StzN61pZRy4p2pyRkJy1WCYaGBojLyssPryin6Klslsm\nGhwpTLispaGmrs1KPi4pLDzAq6mmp625WzMrIx8fIi5Xv62prLPB0Nfl/Pff2HRMPzk2NSwkOqSS\njZGiuz8kHRscIyMhKUKtnZyfq9cuHhsiNsi1t7e5ubW4uLvP5uHfzdNledTP3UgzLi4uMz9ky8fH\nwr++wc98VFBg3szYTTgvMDIvLt+cjoySpt86Jh0aGBodIC3NpZybo7hVLyMfISxKwbatp6OlrL5b\nOjExQM+6trm4tbreOSkkJikvP/2/ub3EyMTDzOH/3c3dTzovLjQ9SEB6o5KNj5y9PSgbFhMUGiMx\nzqOZmJ2tUSwfGh0nO8KsqKSipKmyz0c2LzRSv7S0vczdXj8yLSssLTJIyrWyuszc393qb/zr5HpM\nQkNDQ0pdZ8Sjl5OYq0UsJB4eISUtMjM90K+nqLR3PTIrLDp2ua61vr++u7i9zN9aSl7Sxcp7SUdY\nWExHPDUzNDxpyMXXX17awbu7vMHUXkU+P0JET+DXauKwop6jt3dJOS8vMzc4MSoqOH7Bu7zAyPRJ\nTPTJwMPeUUhHTe3Fu7i9zM2/urq/11Q/NzIyNDg9R1flyMPHzNHS1djh9nZjWlJMRkZNVF14fnPE\nrqmqs9D77F5ZeujmXT80ND9OTkQ3Mjc8RvfCuLa+7kpJWODKxcrW1sa4r662vs9lSTw4OT5AQkdN\nUU9IP0JW+N3V1s/M2HRaUVNcfdPHyM29r62wv97b2HxeaNzbVzwxMTk5MC0uNkNd2cC3t8DbX1hq\n28q9uLzGyL2zs8B4VlxeT0hJTUxBPDs+Pjw4OUJb5M7Cu7i5vcTaVUVBR1Vretq7rrG7xb+1tr7M\n6lU5KygqMDk6ODtCT2vXxr/D0+91eeTOwby8xNHPv7i5wc/U1NntY1VJPTYwMDI3O0BLV//VysO/\nv8HI1+9jWWT628/P5mbLubzFyb2yuMPK3F8/LissLzU3Nz1HTl3eycDEzNPc4tjSzMfKzc/SyL25\nucDP4u1gTUdIRj86OTs+QUVHS1bnyMLEzNbj7u3q+2574t3c52r8v7K0urm1uM7t6lk/My0uMDQ8\nQUJBQ1Hi1M/L0uLm3NTSz8a+vsHIzczJzNbd1M3Mzc3fUD84MzAwNDk/TGzYycbIx8rP2+Dk6O7w\n5/VlXlpRd7Snqq6ytr5aSEs0KyYlLDE7V3zdzMvGyfxo927s4d3V3c++uru/ytLfetjHzN1dXd3Z\n9Ek3MzE0PD9ESk95zMC/yMzLycXK32VSU1VNTmrX30vQoJ2orsC+xkQ7IRwgHy4xMHDTr6mvr9dP\nWkFLPTv92ryvsa6yt7nYXks7PTo9b8fEzOZlSjw2LzA6P05vzLqvrbS9yO1MPjw7PUtl7t/Pw8nJ\nvcs+MLier73FxrZePCQfMC87OjPZtquzzMVYPzoyOD/4v7y5s7CwuMfpXVtHPkZITlnLwmB35XdR\nOzg3SfH51MrKxL7MZmFyT0BJTmPVzcnGwMJ6SkdJQiwypJ+zs7OnrvEtHCguKy8uQ7ypsNC9vFs5\nLi08adrSu62sr77abWdePDxLadp03d3cwdpuV05WSj44Qmbca9zAvbvU7vRzVUJDSGvb62nTw9pT\nQDxESzYuqpilq62prUopGyIzKi4+6q2otdPKuT0nJypH2dbLs6asu9dLVlQ8MzzTv8DA12HAvFk/\nQvVoUDw91czbWtbGur1gTmn4QD0+QlhuV1nNy2tPXllNSEZMOLWUna2usKhDJx0cOi8uRlyvqbDP\nRM9NKCUnQ8jAu7SpqrplPUdIPz9dvrSyw+7Q4kM8z1A77svVaGRNYdxVRdS/6VxIQ0xnRTlH1c3W\n7trCyd5QTEtFTE4+XJuTqLK6r8QoHxkkPS8/bsCprLtQQ1stIyc3v7Gvr7GttHM4Mz9V9dTKtK23\nz1tLQjQvUfTdx9DM+mFIQk5GY8rSXWXT8VFnSEr57m1d587KzN1aZldLUlhZTaiWo7zKzdUtJR8k\nUUtL4cq1uco/Lz01Kiw/vKyrrbS3vl8+O0rdw77Du7fFXkI8NDFuyE1pw8hMOTk9fdZd3bm6zPBd\nTV9uREfs0trd7uPZ4FlEPj1FZWBHtJaatNTixz0qHx8/22zj9c63ulguMjovMD7csaqstsXG3kND\nSnvCurnBy9ZMRkQ3Nkq8xUtp+VpIPD9jvrvYyMXwYEtGS9zI3Ojd3ntUSEdGWF1FP0Lnxsxespid\nulddy0AyJiM+5tTcTe7GwlovMTk8P1fFtK6yxmJQTEtOXtW8tbjE3WhaWk5JREzOuHc5XNdeP0JM\n4sHN3t/cXWL6T1jW7E5OblRFaM/NztpURUpdYGb3XqmYor1l1vExLiIjNXW9x87R1MtbNC0vN0nN\ntrW6tLjWS0ZPWs7EysK+xexebVxPRj1Kv8Y3Mmm7xWZLUM3A7kNCTP7M1l/lxdBWTE1ESm/V0dLg\nV09wXE1YfWrInJms0ENVOzEqHShXtrC/eVjh1EguLS9Ay7izuri52FdFPkbfurm9ub3M3VtCOj9J\nOz3g2UxLw7bD5kQ+S3hbSGXJu7W7e05aTj03PUn0wsnT19bcVEQ7QuXP4quZoL1ZSToxLyclOr60\nt8Z2Wk9HNC4vOF+9rq+6vsRkQ0REWcW2srS2x1dFPTs6PUdLTeK+y2LXv8xQPTc8WczIxLu8v9Zc\nRjw8PkBO7dLY28zUX0o/Rl7gy8K5pZ6ty046OjQ3LixI1Lq83FQ/Rkc8OTVD27ywtL7Na1NOWFz+\nwbeytMP+SkZCPDo9RV/OfUdnxbnE7kg8UeTV5NXHw8LXWkI/R05YVldRWm/649/iWk1f2ci/w7Sp\nrLHRQDctPTw4QEbGxsTWQj85Pj8+TFHPua+0y29NXHllfNu8s7S79UlAPj89REpKWevT19DHzN9u\nXExLZt/RycjYbWJZVE5NSUpSTUxZ38rT5OfU0+bV1dGzqay7d0c5Njs4Oj5YycLGX0E7OkdKSEFO\n0r6zucj+Um374trVwbu4vt5OPz5ASElQVkVT2cG9zOZZa+NdTEdmzsTI+Fpee3FVTU1KRUpa9NzY\n1c3Iy1srN6OepLhq0TfZPCUlJby6rbZTXzW/ejwuJD1LrK2/u3e63u9IL0/srq62vFN6Tk8+Mj5G\n1dDwVzxN3bm2zehb1NVnTDpEXcO5x+VJSk5RTjo5SdTAytx37M7C0ywps56frsrKR87ZNyQdMV+0\nsr9nOM67xTUkJy+/sLC+0727uMlbPztUy77I2/zTy857PjgyNz9HYd6/uLq+209DSV/gzMXEw7/F\n3Es4LzRO2snJxL7Gz2k+MC45Uda/u8HQ2N9bRkZRctDDvLzF2DstRb+3vt3IyMS/20ctKi87VM27\nvL+4sb19OzEuLj1q1+nmyry2sLbZPzY5PD9JaMq6sK60wn1ENzI0O0RY5c6/ure9z3lKQj9FS0xZ\n683Dv8LL2dPTfVpPSD49R1P51NXkZXznfm1OSUxd0MXBxsrHys3jWEpGVP3n72/o7unsb1dMWF5i\nXFZaZM3CydPa2OL0b1FIU+vU3nZaSkdIU1xXXHjYzcjK09/f3mlUUXPYzcjOzsjFzfJkU1Fg/F5J\nR05LT1pWVFF93drdbWZbe+Da2vfZzsjN72hPVl9q/mvb19HS5O1XWl9rfV5uXWre0szW2uf4d1tV\nTlJkcXNje+bf5mhkYfne/WFSWPfZ0Nzp6ejk4+xpW2F77O5uZF1dfN7W2d/e3Nzi6WleZfnj7/J1\nem9cVUtLUFxlYn33cf7t4evr2tfU2+Po7ODRzc7U1tPedFlRU1RZU1NZWllRUlNWWVtpdt3RycXK\nzNz1b3ng5efi2tPa7V1PRkZNWWdpeXp773JeV1xt8tnNxsXJ0d/j8XFmYmVs4970Z1xWTUlHRkdL\nVu/c19jY1NPQ1t/n8Orf2dXPzM3S3u5xXVdZXGdoX15iYFRNTE1PXHn39+rf3Nzg5vd58OPZz9Ld\n9mppbm5mZ3bo3NfS2/dnXmf78f5qYV1dZF1VUVlo/9/c5XhrdvPo6O7q4djS1dji8HdvaWBpcvjo\n7fhtb/r0/WleXF5kX1hYX210cnb86uDi6/Xu5d7a2djY2tzk93B28efk/GhbWVpUTklLVGR5bmt5\n5dnc4/Du5d3Q09jZ19TZ4vZ2bHX17Obt6+Xe4e94XE9KR0hHSExVXF9kam/45NnW1M/Ny8vLyMfH\nyc3a/lxRTEdBQENHTE9WXHHp2c/V3u755+Xp8fLq5NvX1dTVzcfGxcTEydHgWUU8NzU1Nzg8P0VO\nX9vLwr27ury+xczR2/FhV1daaOna0s/S2OphT0dDQkFAQUNHTmbf0szIxMPEyMrQ3OPubWJfbXRs\natzHv7i4vtBeSz46Ni8tLC0yPFbTvraysLGytbrE31BAOzg5RGDlyr65tbW3wu1IODEvLzAzOUNb\n1cK7ubq7vcLK1n9WTUxOT1hfbNvKx9/1uLO0ssHNTUlTNi4oJyYrOUdbdLuvqqaqr8bP3lBFNjAt\nM0FluLGxsq+rsbx0Oi4rMC4tKy89V8K5uLi2sbS2weJYSU1DQT89Q0vpz8zGwb/aR8Ksvbv4ccxN\nzTwxLSlCMzU2PurRr663vbq0vc9JQUE/R0RBTty/wL+5u7jD1mQ/Pzk5NzI6P1vhzsC/ubvBxc7W\nflVIR0dFSkhNbtDJysTGv7q8vU0x0cJNajZDw8fAPEn+Teo3Mzc9R0bzTtq4uLi7uMC8v2NxZFdP\nSlBIfOld5ujg3PJUS1tWSEZFR1PxaHrPzcS9vsLL1Ofj6XpaWm9bbmlj4G1pXVRjWlpQRmNeUF/c\n5+fZeM/LyMzc0NTV03ZPX1xPT0xPTVtgXd/m39Tb29/Z5mrveGJkYldZ9ePb2tLTz9T16nFgcllO\nTVRfWGJpbdvUzdjcz9bU62ZYUFRMTU9PXe/b1dPOzMzT5m5gXFNTT1JidtfV08zMydHZ5GNkX01N\nSkpPTlpcXGT32dfT19XV0dTw6G5rfV5qY2Pzaf/j5efd3e3xbflkW2ZXX2JeaXfw5dre1s/Sztr3\naVhZU05OV15e7ene1dvP2O3ff3TsXVNdWWztXf5xe9vy4u51b+tkaexTbWp43vDr39vg1NLe4+bm\n7m9kZ1JTXk9WbFVpYFPWeuHOYdTcadHn4ONh6ttp6eVd537v21/acU/nTVHoR17nVc7sesddz85M\n3V5P/VZv+/Pud9Pd1tfqzerc41niW0ZXTFdoadRN4r9Oz9ROxU5YyD3izT7BaVPASMzXScFvUNZN\ncM9H695N0fFdz2br1lLl5UbOTUjFPcvKN7naP7JMPq9BW7cvu7ors8ssq0strD08qypLpyXDsiOo\nxyWmcSykOi2jND2oJMOsI67iK6dHNK9G6bo1vuRCtS7Sui24SzysL8e8KqdMN6grwrYprj89sC/b\nxjzETOTeVr5IzM5Euj98ujXK6ju0PVe7Nb/xPMBPa/RVxUi+VEatN829Lqw7Ra0pscQnrUVFsy/M\nvzK1RDutNtfNNq9LUL88u99AzUrNyj1o0WzPTW7BXc1ZTL9U/k1Mv01K4FfN1kPIZdPCOc/fWMZC\nU8RZ3n49uPpJzj29yz/UT8vNP1Ld1NNOTdHQ2UlMz+9qVlXZ2Wxf3tbVblfX1//gU/3QW2JtatZV\nWe9q5FPt0mHfTmfIUOdaS8BfZdtNxdlL2XPY1Unh9ebYS+Pcb9xPZNVjaWle029b32HgfWnqbOVh\nYufz821r4et8537k3vlv4+Zffmpy5VZq5ljq8VzYaPfUZ+VqXdp3X/x23e5i5e7s4mn52l/s8Vvc\nWVrfVfBoVdVgc9Zi1N1f5lpt6Ff4bGToXtna/NR18dVl3uds7GZtZmX4Xm96fO5qeeZ14/lm6F74\nd1zi/Pv5Y/7q9/t28PDn73zXe+PxW+drbPNd9d1e7/Jj311+21rfdVvgZ+f6YNr2fudk+Pxo4+/z\n43B98W5ucfdtcPpr3u5u33L46lZs+lv2Y1rqZX7bZuDaY9zkcdxyfO507W149+h+du3u5v9ddvJo\n7Wp3321xeF7ub1/zY/PrZ+314ept7Pfg7XB2Y+v3X//oePb8dex+9f5u8Xbw9m7q8P57aOXqafl0\nfuZfaPF/7nB+6efufN75/fdj52lk+Wb5ZmH4bFx26XfpfPbqd+np+uPqcO77499mfuj5dl153vdo\nf+rqamN1XWZzbv5t5etuc+3bcVrr5m5je+hfdOXq4fro6/bs7er4X+7hXnr6/fxbdeb2dGZ2+W30\nde5qZtp5eOtv4v9e4OL2/V/t/WZ66N5fZPPq8V/17np07ehL5cbsVmPP5GRba91eWWPdb2rs53d9\n3ez17OTp9G5r9XJfWGxVYsfpYdnd7lpl+mhUX3vv+Vfb123V1uz+btv1XuZ3aPldZn1qc+fs+vDr\n8WZl4OldadvkZl192/dh8eFdXuru9F1z6vh68Obp5e906n1s621b+mxt6vbldl7d7Fzzb2jsW+vc\nYXPu7OHk6uB8e+Zx9m9caW9l/W122ujq5/Xd+V/8Z217XHR7eHVq/3lydGR87Xfx6ersZ/PudO1w\n7t7y6+Xz3/jy52R7YV1lVXFzeOf/dOvve35x6ex/7nry5Oni2tLP1NDT09fz/GNQS0FDQ0BHSEtW\nXfzs5dHU09Lf3en86Hnw3+fZ4Vxc2NNROcujvNypqKnD7eA2PiccKComKTHpvLittKypyX9PTD8t\nNThDyMa9raaqtbrEZEI1LTQ7MjZGdGfo0+XHx/783NTyWWb+1dJzPEWfpVirqaWtP2QuNzUaIiwq\nODlJv7Ct4k67bEI+Nmz5ycnVrKqvtL24vdlFOkpdQj9NV3xfSkZNVT46RkxVUHTKxcHJyM1wZVxB\nMOugr7eosaGt9EAmOCoeKCAs7tzBw7Wu2/RMMj8/RlRTuriyqrSvr8btRktNQlFPc8vQ2XFOTEU6\nMzI3OEZWZce9vL+9v+56dU1TVEQ8v5+sr6qwp7rgRSUrKScuJSxARse+wsZczMnu1UZRz9i+zd/G\nzL29xMjWwcHLyuZ3aUpMPjQzLzw6OFBR/NrTvMPDwdLAy9/uSWRXRkozP62stK64r628vj8vNCsz\nLyQtN0u8v8Pfbb7Fzu5CTH1v+1dc6ty4sLi3vL64wM9bR1lGPzwvLzQ8REFJYHLMysnLybq/xMr0\nVEZDRD46MnyhpqynrqSovnEnJysjKyMgOli/tMHA3s6+XE49Ot3S2OPzvba0vvu/tL3LZ+TX2nVC\nPz07OzMtNkZWbeLKzr26xsnKyMnUTjY3Pz1APy5Pm5mqpKujofU4HR0rHigmHu+xrqzFu9VN8S0t\nOzzFxcm5uamsvr5fRs61zErlv7zOSTQ7QzgwLzU+9OhP3cTCx+Tt38fLXmNJRE4/Q1BWR7OUnaqh\nrqLEKiQXJCkdLSM3q7OtvceyT0k3KD5J1rzXtrOxrMXHzF3J1F9i7L/MY31MSUM2NTI4P0VVVtDF\n08fPz8TLz/p3ez8+RUJOYORAtJOfrqa1p2YqJxcoKyA2KU2ssanDwbQ9OCknPT/Hvcqsq6uvz8zP\n1s1KQU3ew+puXFnuRzUvMj5GS1BVyMTJx8+/wMvKbOT0Pz88Q1dL6NtHyZuctq6yrsIvKxsjMiYw\nLT62t667xLTuPzQuPERmzNnGsrK8ubu9vsp2P+XYT+dMX9hvVS80SDxJPjlm077Y7bvCvsJ37Vli\nXDs9RXjT2cTMx+7Jnq35vsKt8jk8JkI4Ki4mQFxI1X22r8DKUdrEST5BRFXay8a8rq22tLzM20lG\nQD1ANjk+PE9bU1Vl0+xbc/jUyszJ0tPS32lKTGrd5u3OxL64vtphVDsx5PU7+r+vv9PKYfhEOC8w\nOj0+QdHIvLrNyNTH4khgU+TS3c7YwsPNxdruaFNURUVPS1FVT2RUVmJT5Nvp1drGy3Hd3tvWzsLM\n2d7b61ZUTkdUWEtFSlZaXG1rZPLd3Gtm1tre4//c6uLf4MnMy83c2uLdc0pUamZfSUxWat5OS11d\n7WNlW1jS19jJzs3X4G1RX15bUF3X1tDS39zj2t9bXlpdZVtnWVpmZe7l7u/k2dDkd+j53v1TZmjr\n7Fdqd9zSb/fl9/Nr6PNZ/WZq6WzlX1VhVGFVT3f91NTnztzc3G/sct7d/9Xn39PrblVi91lgYWT3\namJVU19YUllt3Nnc5+zQ0dnddPbr8XlUXPPiz9TsfPd8XVxkW1l93ef46N/p6vxkYV1iZGFxdeze\nfHxrY2th8m1n3dzU19ja9+rs/fru3+1jYV9bW1paWmnn7+/m6N3reXxjeP10+Wr77uzV3+/m4+Nt\na15TY2ZoYmze39zjcv1xcG9gbF9s9mR5/PPi6Nnhe/T36eHr5Pv53el5XV73+fD+bXbvfmFiYWZb\nXmNb/O326PPc2N3g/vHk5+Hj5d3i8HNaUk5OT09n9enY0c7R2uh2aF5cW19fbuDu8ezi3Xr793Ts\n9/bl5Of26/dld3FqZ1xgam57e3Jtam5lXm3t39/j7uXY2eR+fXZ+/G176tbQ3vZtX19XT09Ybn/5\n++fb2eF8a19lZVps8t7V2tPb4N9rYFpXW1hje+fZ4N3a4+X+a25oZmZs/291/W1qa25sbP/z4trf\n6d7h6/NebdlrVl7s095nY+jf52Jba2R9YVp46/Rpa+rtfmNi697l6urb2+9wY2hlXWNnbuvf4ubk\n5OrufVxbXmZ56PPx4Nze7PxtZHNoXV5mbWRu8/fZ2lY52aazRDVOur5AL0jL10RAdcTBXkXXucpG\nPWTGzUxJ6czValbzz9RiTfTN5mZd6tr0XV7l6lFMbubseH7k5l9d3df/XmTUz3Fcaebl+WVr2Nlk\nVG3Z3WlXfOJvV1X22/1STvjV2m5W5MrcdP7n7+1pWWNq58rP8/jc0uZbUVFbXUlKXGPm2fbtzs3l\nbnrs7u1ZTWjf1ebv3eTe2e1sfdjrXFFQU/PdXldt2enu6GZx3eXz5O9c+e17bXJzX3LX621h/drT\n4mpd9OFvZV9vZ15fVl/lzM19WG7Nzf5KS33bbU5azcj4WO3Y2+hSU+rcXU9/0czkX1ne2U5H9c3j\nXlfh3fX3au/f+1lZd+Zt6+Ft5Nb42NZbaOndXVFRXujp329vZ+Xu+Vt12eB1XOrn+l1qeurgVE1r\nztTeaX7QyOJLU17V11dJVtXT4Ghx2OHuVFNebf1o6H3T3G963tlmXFxhV21vZtrW3Pzz7Wtt6t/y\nY1n91uV0Z3no3+VoV1Pp7Vlj5dpzaG/74dj9VfP939bdX2vX5uN4dVZs8F5dTF/57mlw1drR1N1l\nfNp5WEdc4NRfTPzS1WNVVN7B001Kcs7Peldvzc75WU5l6t/9b3js4Hhw73x5Zl9cZmJZbufUcVjp\n8ff0X/DY6VRVbHHy4d/23uTd1ujucGJbcOb5bG7p4e1obOLbUDZCwrOzw9vNv8hPNy8zRc/N7O7q\n1czWUz89Qk9oXVFh6dXOztfZ19vrcWZu5NPO1X1aXGhdTVvzQy1bm5mjr1/fzT0uJB8pQLeuWUFP\nRs3POiwlMcivrb/p2c/Ozmdpzr2wtsTzSk9ZW19USkhDPz49RE1o1cnEytPIws17TjsqO5yUnaLQ\nRdI0KSQbIDF5qcw++jDZvD08JSZCvaWmtbvCvLPI70I8zrqvuU8+PE7ZztVNOTk8REA5Pk/OvLq/\n0PNw8M7TSywfS5iVmqJcY0wqLiQcHybaqrK52ULHunY6Ih4yxKmkrbrKxru90UU2QtW3t9tHPlrH\nv8ZNNTA0OD1KTmvMvry9xGlMVlxVOyElpJSVlqx6SSosLCMgITmuq7HCPEDLaT8qHSRGsqOnr7zR\nx8TAzlBP97692GlKTuPLxtBJMy4uMztP48/Fv8jWd1dpaEUpIruVlJWf2eo9Li4lIB4m47GxtE4y\nVExCRyghL26roai8WXbEtK69bWDkwLvWSDg6XMO92DstLTA6TGnq6NK+ur/fTUtRRy4pupiXl5/L\n6jQpLikmISZFxbSw6TxHQENBKygzbq2jpbNhXc+2rr7kTk7Py856REVbyb/XPSwrLjpc49bQ08/F\nxuZUSkc/LyrbmpSWnLhzNSgtKSckJEO8sq/JRUc+PDcnJSxHsaShqsPa1720wM9aUszKzeRMS1Tc\ny+JCLikqMkjvzM7Sz8jHzuhcTUYzJ0eclJOYq8Y6JismJiIcLuq6qLHM+TUxMCYnLT+7qqOlr8D8\n0brDzW99wb69zG9TQU1wa001LCsuOlPl3eLZz7+4vtB0QToyJTWglZKUnqxIISMfICMcKD9arqqq\nrlU5JRofJ0KvqqSmrrC9tq2/ezg0VNu7tLq/WkRMQD0wKy0sOV/tycnWx7y0uM5lTEhCNjJCsqCi\npKSrvlVCPDQyLCgoKjBI17y++kE2OE3w0L+7vMbPxr+4uMx+99LJysO+wcv6TD86ODY3ODQ6QkpP\nW93KwsTL0H5caW13TlS0p624uLzLz721uchONS0pKjA2MSssNDpCa8i3s7i+zOHNvLS2wMa/xMfF\nx8jcZnhlV08/Ni4tLzhDSkxJRVXUxr++vMHO7lTIqqq6vba6ysC2vdFOMywpKCwzNjc6PjYwPmLO\nvrq5wtzOuqyor7vA1mh7zs3va2tTTExMSz85ODs+Ozg5OkjZv72+vsDO61xYv6ywv7ius8C9t8tU\nQTUtKCcuNj08Njg5Qu/Mw8HL0XpjzruvrLK+xsXDycHC50tFS0pNZmZOQDk3NTY6PENW58zHyMrI\nydd2VHy3rrWzrrLBxbnA9l1EMSkrNjk0Mi8vND1W28jFycbFysK4srfEz87Gvbi5xvVZVFVLRktK\nQTs4ODo8REZGUfvRzMzFxMrYb2XOtbG5ubG1xL+0vO9JPTMsLjYxLS4vLjE+aODMvrm4urm5vL3A\nzNfNvru9vsHN/ltNPzw8PTk3OTxBSEtQVVvw1dfVx76+w9pCYLizsrS1uL6tqrxaNC0qJCkpJCYs\nQvnfxMnMuK6qr8xOPFW9u8lbYca1qqy9XD5ITEA1LCsuO1RjXFjvzsvO4n145tjXVjVYpqGnpauq\nqa2zLR8gHSMgHSEkdamqqrXCuLi4Yy82OD5dTVTMqZ6mqquuschDKiMpKikqLTzvwcDEvLzG2mlY\nUlxlUF3s2cpUN+eio7Gmq66ltMwqHiwdHSIZIzXbp7q1qrqnqcVsMD5NMk9DP7etra6uqq+2vzsu\nMC4rLTA1RGve09nP0dXJ9HTM0L6/y8X7VVxKTktHTUzev7+8uLu7vcvvTz8/QTo1MTQ9RnDcbOjN\nycvNytDYz91rWGve89rOzMTDwMDHydtZSj46NzU2NDpCVdbJwr++vcrNyMzFx9PpW29nTVlZWGBZ\nYlz91OPa09XW6vleSEVHTVdSWGbmzsvL2mZnWE1JQUVOadnSv7i4t7zCydvlVEE+PURMS0pLYOHd\n1+X56N/R2XxoX/jf9GRRW2VPV31+2cS9v8fEv8jL01RGQT9EREtPTVpsan5zV01KUlRLTlnrzMO+\nv8O8vr62vcnJd09HPTU6QD9IRFph6M7kbWrpee5nXV1z1t/T3Wz0xb3Hxb+7t7m/515yWEU5Ly0u\nMzc1PUld0cK/xL64ur7Cz+j02tPq9+Xe3uJz9ubfdExLSk9TSEdGTVJSVGTt7+9y2MzLytzf6vZG\nOL6r3L6utaersGc61jMjJR4hLS81Nduwu6+vtq2uuFw9aEU9RTc5XLqxvbOpray4WktPOCcjKCwz\nPDZMubO+w7W2vMdWTGdRPDdAUUk3wpmqspqkn6PLNh8wHg8YGhswOUqwnJako56vtE4nJSgwJSNG\nx6+qqJ2boa693EstIh4gKycqN2W/ura5r6/A3O9eTEhEQVrhUU5dW0HMmqjVmaKoqE48ICsdDhof\nHjM+1KKYmKunnbjtLR8pKy0jK7itrayum5m1W2jXOiUiJDtJLC7ZvdVp8MS1uT5UuMRWTs/HyuE6\nQetGOTA2pZxgqJuindlFLywsDxMhHSUyWKiYmKanmqlUNiorLCQeKsy7yrammpmy07a3PiMgKDIr\nIynQw03Yv6uotd/Frs43TOxSRzY3RlI8MTxPnpw8npekn1vKOywnDRgmGh4uzKaenKWdlrU/QjEp\nHx4fMN1qx6acmJ2uq6znLCIoKCIiJzX2T3q1raqvubm+xUs7S0c+Nj9aRkRGTmM/sZrMqJepnbvK\nQyQsEBUgGB0r5q6gm6GemKvedTsoIB8eKj5LwqmhnJimrKnONiUlIh8jJC524uSuqqupr73XzUsv\nPDoyOz5AT/beY9jM0J6h6pyeqKtHzSomHRAfHRsmSrOrn56gnKC+0G0tISYkJS4+2rSnqZ2ar66v\nzDYnLCIkJiQ5YUvYrq2xs7LBy904P041ND1TUkns6cm2XMGXruCaqK7RTVweLBoWKxweL8S9wJ6e\nop+survsKSkzKScuU8m5rqyeoLOxs9UyLDMkJikqPD1Dz62ywrGruuLUUU1JOj4/WkNE2011x8/F\nsKC/r562sv7qPCUqGyMkHSk/7Wuspaqmpay5vk05Pi4qMUJFSMm3rqutrravwz5DRTgoKzAvNDlP\n3MrFuLe7v7u/d+loTkw9PT5BRT7txtu4paqvpKazxsxNKykhHx8fJSxGXMirp6ikpq25yuhHODIw\nNjc7XNjXuqu1vK2vyNzdQDk0LSsuMi9MWVO8sLa6sbPEysxcQjszODMwPV/h+7moqKqpoaW/wMtC\nLCIlHx4hJzE3VL6ur66nqa+5u8ReQzw6ODM8Tk1fwa+2w66pv/LB1DUvNi8rKzE/RkjPtry8rK28\nxLvLQj46NzQxOk1XZM62pq6wn6e0vLflKzAsJB8hKikuMl++yrWpqK6tqbXK4flHNTU5PjpD+9C2\nu72xtLzZx+86PDowLTE1NT9W3b27ubCwu7y82VRQPjM3ODc7Tu7NvsCkqM+kqcHUysspNzQmKCUw\nKjM1S7juvK6rtburvMnZ8Oc/Tk5YTUzG5n7CuVn6uF1B/mQ3Oks+O0VQU9pl3L6+zMC319rTWEdF\nTT1GVU3Z2tfMvbDNv62+zMW9Uz5VPDAuMjAvMzdSXWDKu77Ctri/v8HM2dPs8HJ7/Wt+TW/PQUTV\naz/+yE9a3P5PW2RIYVVR6e5Y8cTWe87Pb+zWelp//FJf3utt0rzI0LPB0L3I6kT9SjQ5NDYvNjpB\nS0nXzcTHuLW+uLm9w8rN9+9mTVZMQz5YZDljxExMvspH3cBdR+J1RE5WWmZm7cjN2cbA3PPMYE1f\nU0hK/FhIbLrFRLCy18K4ukLN8jk6OD4qODQ4RTt+78HLvLC/t7e4ys7C6nVae1BHUkRNTVNETNpS\nc9Ta/NvMVFngZlJo4+9v3evc0e/h3OdmZ25UU2dnVUb0vEjotsDSya3c4r3fTUF4NDg1MTs1PT3Y\n8P68vbq+tLjEvsfOZH5tU09IWEdERFpPSNpcY97O4dXH39PX41TvbElmdVhX3nZa7en0Yuzodf5e\nWkjLzj69vcfRuq9pwcvaRUFSMjotPDs2P0vMUcq7vr++tcHHyMXSXOP6cElNX0dISldKQ0lZ5mzs\nxr7Ox7rI+9bOW01gUUVHT0xOUVRganLnbOzb5+Xg3FK/vkC/u79wvLBPyvfOP0lINk0tPjhQNj7H\nUt3xtsrIuby8zr3M1XpjX0pJP09EQ0tWXlrj8N3QzM3OxtDc19vtXWl5WE5t32Zm39Xs6ehyZl5c\nS0xPS0RLVE1PaOPn3MjBx/bNtsFozbrE3NHG399kSk1WQDU9QD48R05Y7+naz8TOz87R0dbf6uHV\n2+LZ2dlucP5fW1hUTVVXSlFn9mvn2eTS1NHm2NHi6fLmeXNpX2ReWV1x8v7w5ebx+XNtbHhhYmlx\n+XHq5+vg4OR8+v9iW11xVlFZYGdp4ejc18/Oz8zMy9LZ3eR1W1pVTk9PT09VUFVaYGpfdvHi3d7W\n1Nfd2tre5tjY6t/q/2loYVlaWlRPWFJQZe/f6NPS1tDP1Nze3+X6cmxqXGJfX1pUXlVYW1lpZmx9\n7fXp29jf1dPU1dXW49/s92JeZVlaVV5ZXWpkbWH//fn77t/o49XY3Nrf5/j+X2VuW19gZF1dcGL+\n7u3u7OPq3d7j7O37aGlpcWpw93Dz9ff/79/r6evb6u718W1WX1laWWZjaPdpeu/g5t3a39nc2+rm\n9G5hX19eY2T7a2pna2505vj7+ejzffHq5Obk+Onp6ul2cmxrYFxhYmFdX2589+vc2NXS1trc3/pt\ncmlbWVtaXV9mZnP89vjw6vnv+Orv9e/57fjm5OTg5Ons/HL8YV5faVpXX1xqbuzw6dzj3tvb4Obo\n7PT6fWxpa2lob/lsamdkY2draHp4dfjk5ufc2dvd1tzl5up0ZmRaYFxXVFZaWmFqcn/r5OLZ29/a\n19zm5+5/dm9mZWZiaHD9e/Ho9fn+dG9xdm979Pvr6/Hp6uL4/O3z/W91/3Rsa2VfZ3lxc3d2dfPq\n8Ozy7/b/dW1/dmlu+u/o5eDi4+n2+P/99/htcG92cWh1bHB3/Px3cnb9dv10eXls9fh6fO7n7ujr\n6O707e/q/XNvbmpjYl9fZWttaXvv7+Pl29bd3uTqe3Z7aV9iaGZmbXjx9ez+c+/u7ezq/Hb0+29/\n+HD++/1vcu199npsa211bXJ0+fT08vDj3dzd6OzxemxkY2FhZ2ptd3vy+3j+9/Z7d255+Ozs7erq\n6PDx7PN7dXj//m9paWtvcnVubm9t/e3t7/Hq8+zh5unn7HpvbXB3fG9mZ2du+/vv6ePp+vl3aWVm\nY2Fqdf3uXF/Ex+d3X+fe401J//nR1Ob2185lZlBITVhbUfH438nO3OHZcXrsV1d27fTd5H/a2/Ns\na11YZVZTY3zn2c/V1tXe7mRPSk5XYPLk2czIy9XvWk9MSktPXGr539jZ3fBiZHBq8e/23dPM0d/x\n/+jd6WpyfG1fXG3z+19RXWleZF9s7tTO09Le5OX0ZVNNTFlta3z139TU41tfXllTT2P00tPX4P/e\n3dr9ev5o397e5djT2dJ+XltWT0NGTWfQzcfOzsvjbElCQEFOU27fysLCxNf7XFJOSUxOXHro19vY\n3N5+WlVVcefW1s/FxcTU/2hfVk5RUlh6391vXNbEwsxqXVNhWUA7OUNZ4tfo08vDwthTSlBUa/Pe\nz8fCzeBkU1lXUlRu39HO2u10XVRSTklSbuna3djT0d34ePDa3//93NHO1W9WTFLLyejpVefeYU02\nPEBMb1JaZs3Fxsj0XVrr3OfRzsC+xtVfZFZPTENLXeXl9+l6bFlOS0lUYOnb2tba09zi8uTV2tvh\n2tvVzuPg1nhHP+q9z8z3T9BlTDcxOzv33lb93MrCvstcU1lYXGZ20Lq3usLf/l1WQz1HTGfu8m5q\n/XJnVUpIU2Bl6d/VxsbN2dze6edybuTc2dvb8XDo4NlaPUjJxM/RTld0dWk/Pzs//F9kfHjYw73I\nc09KT9/V/tbPyL3Dy+t4cl96UEVHSk9ZXFZVbOz25Pxo49XS0djt7dfP19jd+3ZuX09KSExabO3c\n2Nxg58LWZ27o3mjSydHDy+x3U0lGQD06QFJUeNvh29HN0951WmXb08/L083Jy9fwbVRVW1RSVl9w\n+WVVWVhXV1NUYuza1NTd4dXZ3eLj3drT1uhmTf3G2HDVzNvdzNZ/6FtHRT88PkA+QVtuWuzf9+LU\n0NLZ3+DPys/Ly9HPysrS09jtb15WT01FREVITE5XVV947NXY2tXZ0tPX3frt+/zvd29rfnh1XVDV\nx+7txMbYyr/M4eNcSkI6OD0+PEVeXmPY3O3Z0c/Q2vHezc7Mx8zUy8vY2d9tZnVhVVZLQkNGRUlP\nU13w6t/S1dLNz9fVz9zo5ux0bX5rbnBYSmbGzd/Lxc3NxsrgfVZKS0E8PkE9P1BUTVzr6OPPzdPV\n3OXd2NTOy8/OxcXKys/kbWZcT0xIRUVFR0pNT1NeeOjW0s/OzszP2uz3eWhneHBgYFZZysDYzr7H\n1crI4/Z0SEJEPTtAQD5JXFJW5OLfzczd4N3t5dfW1MrJy8PCy83N4HtxXU1MRz9AQkFFTE1PYPHi\n1s7NysfL0dXkfevl9HpmW1BO1L/R1MHBzMq/yuruTz88OTU3OjtBVFpa6tzg08vP3OTu6NHKysrL\nzMbAw8rP29/gcFpORD4/Pz4+REpQaOfd1M/MxsbN0NnpeHpoWV9lVEdOyLzMxry/yse/znZiTD87\nNzc6OzxHY19c7ODp1cvO2OV3/djP0MrIysK9vsHI1PNvaVZKQT08Pz9AQUFDS1363NLMxb++v8jT\n53NfW11YTUNuu73Buru+yMTD9FBAOTk0NDk3OT9U7fne3uHRysXN8WVt8M/Hy9PWx7+6ub/M3XdR\nWdlLOD04P0g4OTg8WfDV5vTFvbu5wc/qUlh+RTO5oK6jqdWpxmFLICUdJkMiNEc2r666zzpHPtW+\nPfbBwKurtLjBysnZ9T8/51nY1FRXVVlDOzkyOD47SGB81cK9wr++09zR2dxMRFA9LLuYpaKlZqW+\nNywXIR8tzyQ6vMmnrtk7LTsxPXY3x6eqpa3FyryzWTpESLyy5lNy3dtVOSosOTQ5OzpuwL3KyLzH\nvsFPT1TQx2ZTPTs9qJWlpq/QpesvHhYkIjVZKE64sqi4WDMsOzc+5E20paypv+vSzrhNRNjRsbfy\nT05uUDoyKy09OT5HSNLEvsfNt8HIzlN5587oQ1M7LK6Xoqe2+qvGNiIaIyI7zC0+xr2rs+03Ljo9\nXcRayqqtrrtCPGrEz2TTxLivv29PQEVFOi8sNj4/X1Vczs3CxL+92uNYZ8nkXElLPUmcmaqnbcat\nNzceGycjynAu0Fe+rdBaLC08RLW607CzsK2+1kpEYm/Ayda9y8/JVz82MTQyOTc2S09owcLFwbq0\nwM5qTO5zalguMaSYoKHHR8U8Wy8aHhs1tV+45z21w8ZfJSgub6qvq6/Ss765rPZENDPa1r7A/dNd\n38dKNyonMz5bak1OUsm0r6/A3dnQ2FVPOi3Zop+iqrXFQjg/NisgHiUrPrixtbXbU004OT5O39C4\ntsG4t7Ktu9hcS01HXdXQ0fFdUUdKQjg2Nj9PXutbZtzOv8zY09/P2+/qTm28s7rIw73GysC8z1M+\nMjE3PktLPzQuMzc4Q2fLvLq7vr62sLTD4FQ/Tsu7tri8x39kTj04MTEyNDs6Qk1a0s3Q3+zQz8zL\nzLGpsri3ub/fyb3K3UQ5LictND1DOjszMTlJ083W3vHv3L2vrauttL/X5mNi43De3l5WR1pvSD80\nLzAyP1n+49jGv8bUZU1nt6qxu7awsL7Ht757TTsuKSgqLDAxNDs9U9bCub6/wtjoZnLJurG0u72+\nvsDAxV07Njc7PkROYHVeVUc9RE1Z+3Lk2NvYcdu8ur/Kw7a4vLWusctUPzQuLC4yLy4wNTg7TdS/\nvsPGx8jJxLu4usPUzMPDwLu911dEOzo5PURDRExRTUhb4Nve/VtbZ3B107y4vMXBuLvCt66yw2lH\nOzIuLzAuLSwvMTU/b8vGxcfCvr64tLCutb3Ex8jMx8jhSz0/QT49PTo1OT4/R1HjyszOzcvN2dvb\nzL27vsnGv8bCuLW83E5JQDQvMTQ0MC8vMThBX9bO1d7Ju7awr6yssrzEw8bV33JPPzo8PDw9QktJ\nQj9DSlrm3t3b3NLKxsTN0cnDws3bzMTFycfEyc7uST03NDc6Ozs2Njk+SkpPcu7k2cy9tK+vrq+0\nub2/xtllUUk/Ozk8Q0ZBPDo+QUdPXmZk/dTLzMvIvrvAy9fe19PKy9TY2djb3t/l9FpKQj07Ojs+\nQ0VISElOUWjXz8rIx8C8ubi4u7/FyM7Y619RTktEPz8/Pj5AQ0lMTFpr/drW1NDNx8G+wMXM1uDg\n3N7l629lbXB7dHx+b2FKPz9ASU5PVVZeYl517NnOy8vT2NHMyc/RzdPa5/V9W2XZz9tZR0NCRkRC\nQEJKV3TQyMvJxcHDy8/Y7mdQTF/Wwbq8w8TGzNl+Zk44LCcnLDQ+SWLr2su/sauqq7G9zdjRzNJn\nQjYvMj5LT1JTYmB3yL/G7UlAQ0xieX/s2MvDvrzBzN5oSzQuSrSmpLHMwLi1vU0uJRwYGiAyWu/i\nvq2inZ6fo63JQDIyNjErJipDx7q4trKvtsrkXD8xKiozP0RES8+zra6vr7K5yedcQjEqKCorKTuw\nnZaZpqupqKxSIBgSERQZIzzSvK6hmZSTmqfFQzQsJSIfHyIqQbimn56go6awzz8rIh4cHiYuPGy+\nraOgoaWst8tMODAuLCooKCcvuZyTkZqnqqurvygWDw0PExsnSLqpnZeSj5Obq3c2LCUfGhcaIjnC\nqqOenJudo7NdLiAcGxwfJCo51a+inp+ipquyx003LSknJiYmJz2smpKVn6mrqavdIhQODhMZIC1S\nuKSblpOUmaK5Qi4oIh4aGRwoYqufnZycm5yhs0AkGxkZGx4hKDfarJ+dnqGlqa/BVjctKyknJiUl\nL7ydk5CZpq2sqLAwFw4MDxgeJjLyq5yWk5OXnavYOCoiHhsZGyM/r56ampydnZ6raSYaFxcaHB4h\nLGKsnZqbnqOnq7fuOismIyIiJCgsNMaeko2QnKmtrK5DGQ0JDBMdJS1NrpqRj5KYnqrFOCUeGxoa\nHChTrp6amJibnqW0SicaFBQXGx8mNsamm5eZnaOrtclLMSghHyEjJy02Q9eol46Mkp+vvL5dHw4I\nCA0ZJTRsrpuQjo+WnqvJNiIbGRocHylRrp+amZqbnajHMyEbGBcZHSQxU7mlm5iZn6280V0+LSQi\nIykvNTc/Wd2/pJaOjZeu8VXgRR0MBwoTJkBkv6WXj46UnKrHOSIbGRsdHyQ0uZ6Xl5udnqGzPCAZ\nGBocISgzU7+qn5uborPfT0g+MCciJjFO1dpUSvi9trOmm5aYqGA+S1YxGQ4OFSM9ZtCunZaUmKCu\n3DIkHh0gIyQpP66blpmiq6ijrTocFBchLTM1P9ewp6Kfo69iMjA9QzUqKDL+vLi8wcfO3NbKXjzs\nq5yZp2Y/Ycl4KBcTFx8uT8Oto6Cfn6Ot7SwiJCouLSs0yqednJ+nrbXAXTAiHR4nOlZnati5qqeu\nxkc4OUBNTj87Ss60r7jdRj9HTUU8Ny86rJiTmbJM1LC4NRgOERonPc62rKainJqhxiwhJzU2KSIo\nSqyenJ6krr3N0M5AIhkbL721XTZGtaSov006NDRD1L3PPzvesbDmMy9C4+lVTnnPeuCjlpepOi/L\nrlIeFRQbIStYram3sqKXla0sHyg1LyUeKkzAp5yYnavBv7VPJRwdKTAxMV25sayrqq/YPDhHRT0+\nSdfQ4NHDyko2NUnS0t/szrivulbss6uty05MXEg2NikiIypWvbjGu6qoqbxROy0qKjc9PE/Kp56f\npq+3ymI2KCUjJi5E3Ma+vLWsq7DMQTtBRkA9PkFGVdO9v9pv/dbN2nRb9sCzvSse9qOivD1aera3\nue8aGSfhuFI/OOWsn5y3KyM19NxLNDE4vqGbpeZIRvHmRS8fHSnOra+1s7Cuq6/fLCInLztP2tHb\nvqqnsdxHOzU6SlNLR17MyMfF2Vg9KiNnqKOksq7Cu6q/PhkWHCY+37/NtJ6Wm7I8JSUlLzMoKDix\nn5yerdpPbHg8JR8fLcyrp665v7qvu+g0JSs4+cvS1Ny9r666VzEvMjg8Pz9G57murLXaY356XEQ3\nN0jUw8JHL8KsqanP8TpivNtQJCUuPdXGz0fcrqquvUkvLDdLXkA3V7urqay66HtubFo+LysyT8e4\nx8u9s7TZQS8yQEBAPVXPuq6utc9OS1R2TzkuMVu+sre/yMzEzHM7Liw0bsDCzMq9sK3DMCc7drvB\nUkpMw7m43i8rLkDSusbzyK+qrsY5Ky42TGlMTee5sK2zTzc5OklEPjtFwbSutb7IdedjVD0zPlXT\nzc/pWXTWzOpbS0JNbdPP2crGxcfN11JDR01CMTTfv62ruMdk0ttXOCcoLkfOuLa8sbCzvPo1Ki02\nStva3Me2s7K7VTw6P0xQTkBJf8Kxss9DPk147ldASNrGv8XzTkVPZ+baW05vxba41UVl3PJWNjhO\nwLe3v39eWuRdPzArN2m7tLrP0MfB0VI5LTNC37+7v8m8t7bBTTQyPEtiWk1S2MC9v9xLTl596XNP\nQEhMY9jSyMC9w7/I3F1GQTk4Sry0rbDH1EI/LywqJzNBvq2oq7OwvtNHLiclLj7Frq2qra+2yE0u\nKSguR+HMyMLCvr7TVD02OU3a1tLNyL27vc75SjtDT1xy6+B+Sduqray4SUowPjYqKiE3V7anra/L\nvMPhXC4pKDr+vq2yra2wsMlQLSkuNXjf19zeyszHWDw0M0FcztXOv763ub3QVko9RE7z1/DU08jD\n2U0487i5sOI+OjFLPDowK0JUt620v9bEy8PkOy4uR8OsrLfE2dTL20MzMDhhvr/fRzxH8M3sSz9D\nfMO9w9L95NDLz3tXTmnay9lnWU9dbs+93zRbrb2stzs8Kj4+MTwoO12+pam0zND6WEcxKCxGyamn\nsLzBv8LCTzEsLz/ixvhfVW7Lx9NLQD1F3cnHztDd2MjL2lVERFNsV1RMUOfKurm7xNDZOzm8use6\nSDs8P9VDPjAtTui4sMdRWOHdz1Y5NU68tKu2f2JQz8TTTzZBXM6+3kM7Qm7IzF8+PVL6x85ZWlPY\nxb2+7HBYWuzo7ko/Rl3GvL3H7eja7z8w0be/qb9dZjpOMi4sJTRJy66ttre4vspNMyktPW62r7S5\nusfHzVU/N0BRy8V6Vz9Lc9PdTEU+RmrZ4F5s5MK3uL3aTkxOTlZLREth2si7tr7N5kk5JzOrsqil\ncclXWUskJBsgSsqopLG6sLG8ay8fHi1Gu6iusK2urrhMKyQpOtu3vszOz8rK3UA0NDpY19X9c9fN\nubXC6klERU5eXGdcfO5s2cq/wsznSUczJtekrp2o7b85Qi0hIhorUcylo7Kuq7jGPCkcHzdGrqit\nqaqrsr86IyEoNdKzuri+xLy/1jguLS1I7+vc28e6r6++Zzs2PUVSbXhtXt3Fu7bGXkhASFQ7KXij\np5qfytotLiogIRokQMGfnKmsrsDJPywdHSw3s6Spp6mrsLtGJB4jLW6zsrK3vLm8zjcsKik9c9nU\nzb66rq2+7kE0NTlDTEpf7M6+ure/1uxMQj8tJsKgppmk0sIzOyceHBUmP76enainp7jJOCIYGyk2\nr6SooqOnqrBBIx0eKUa2u7OwsqmtvDgnJCM1Sl7ix7qyqay+VDUuMz1EUlHgvLa2vcDrXvhGPjot\nIr+cppek7bwzSSgdGxIiN8idnKeko7C6PiUWGSYsr6SnoaOlqKtdJR4cIDu6u6+vtKmpsUkrIR4t\nRVnOzMu7qqq41TgsMz9bfVFLb760tLfmS2JOU1Y6KiavnaOVq9nHLU0mHRoSIzW2mpyjoqewvjgf\nFBgiL6ulpJ+joaSrRR8bGiA9vryvrauipLE9Jx4eL0Nc39LKtKaquO40LjdRb1RDO1W6ra63az9P\nUHFaPC8gNZ+fmZa+yUMzOh0dEhUtWp+XnKOkrMJeJxgSGyZdn5+enaCjqb0rHRsdJlu5u6epqKKv\n1ysiHh84SXzDvbevqbHHUDM0P0lPTkVNzbOus8BLQktIUEI2MzU3vJuem57V3jEsKBsfGSJWwJ+c\noamuvE41KB0cKDe+paKgpKivvWotJCIkL1y/ta2rrrK9Ty8oJCs3UMy+t7ezrrnMZD06PEBGQ1H2\nxba5wf9CUG9aT0A7P0E9r56mnKd/0i80Kh8mGylHZKmlq6+xuNNKNiUjLi/ms7CoqqmtsLxEMCso\nLT1S2L22sLC1zUEzKikxP1nMvr65r7K80kw6NjxGVd/p0sHHwtJfW0lLSEpWWfZIQ7GprKC14/kz\nUjcyMR4rLDe5t7G2tLG7ts45MC0tPuzJw724ta2uvNtANS43Wlbf337MzctgPzczQ2/IvsXL1sfC\nzN5NPz9T2dDCyN32X15LV05ATlJt1s/Lz9D5UtXFyb3Ez8zXz+tWQDAxMTQ+TGPsx8G+u8PF0PX1\nVGFSSFhO/dnRwsa+vL+/0WdKOzg3Mzg+S9zCubm+wdt7UUNGQU9s0r+8uL3I8kc+Ojk6PU77zL+6\nvMHTZlhKPjo+Sfa8tq+ts7fE6VM5NjAsMDE5TFrZysjBxsHF291heOLoyM3Lw8fN2+BsTkNAP0NU\nW/zo4dzn5GVaS0JJS/nKxL29vcDJ0HpaUEE/QUZRWt7T0sza5uPteVBHSE/uycvJxc3BwcbIb1tI\nPkA7PD4+Rk1a9dvNzc/Kzs3GyMnOz8/b2PBeU1BQUV9fXlpTVVFcZmRrWltcb9jW09bZzs3KzNvp\n/O3ofnRlVlJQUVVWV1z86N/T7F5gX2Di1fLf18i9vr7VYlpJS0xDQD0/TmLn71pgXnvU0cvP1s7M\nw8TO3mp+7e7mbFFJS1Zq+mJTVlpo4+5dU1Zs3c/N19/i387M1Nbtc21ja1BMSkVVXF/v9e/u++Xq\n99TP08bGycPP6GJKSkhCSk1LZPry4GdfYVJWXWb439nYzsjJycvP1ufn7mRtXFFYV1ljZVpSTUpV\neNzP09rY09Db8GdcY3Ta0dLS5efvcm9QSEVGS05eZmNt+9/SyMXIys3W3OJ1X15ndOrf7/pvX1xS\nTklKTlVq+fDs5eft7e3t8Ofi4dfW0czNztPh8mBRS0dJS1JeZG704Nvg6/dsd/P55d3a1tfW2d7h\ncF5eV1VdW1pZXGp43tjc2/B08u7i3trY3tfb7H5ZTUtITE5SYG3r3tzc3u57+/fn7e7t6tbR0dLX\n3Onv6/l0YlVSU1hbWVlYYW1tdHR8/u7o39jZ1tPZ3eLseGVnZmZ1bWlpaXFudG5naGlrcXV299/T\nzsvO3O9tYV5dWVZYYW/57PlyYlxeXF1iYG7r2dPS0tje2tja3ed8aVxXWV9jZG9udvD/dHFnYWJy\nfvvn49rX1tPY5Ppza2VeYl9eZ2xwamdgW19jdezf29rS0M/Q2ut3ZWNhX1xaXmVr+ez9dF5ZWmZv\na3T7+vLj3uPh3t/d2tvl7nljZGdiZ2xsfu3zdXZuaGptbHfv7ebj4+fs+HFtcXf48ujn7eXk7Ptr\nZl9cZGtvbnH26OPe2Nbfzs10V01NQj9KRVN5VNjNzr7KysvQz3pYyXBXzUfZVkRuQetPY9l+2MvZ\n59V73VtWYExjVlbb39bZ1srazdr16/9rXFpRWk9WU1FZVlRuZdzZasr+z8p90e3U+115XvX6Xt/f\n2M5c5Gxf3kxFbUxK9Uvj2v3MeMvKb91kX+DfbWXqUnDO6ujVwcnWwNXbwW5PSkg9NDgwM0BBSG/I\nwLy4u7a0u8LS0uNqUUNLTVFLSVlndVxe59rtYVZfaGJXTV7+dnD/3szJzNrPyt3sVVhPNEurZ0Wo\n2qyl27Y9vXcePCIfOCInMF64erKprZ+jtbC1vPcyOTQvOy0wWenI2L6wtq6+9dRqQzMvMzE1OTle\nxLq3t6+usrfL6mM+NS4yNTM7Q0VMoZzpn56wm8rUPSHrGRQgFSYtKOPIoZulnJyfn7lfPCguJRwj\nKUFU5rSznp2qqrCz0jAoHx8mHx8sSL20r6agnaGvvL7POyomJSosKyxByeLLmZWtnpymoWFBJxUm\nGw8YGCpKQKufnpWXnZ+rsMcpJR8cJCEpOUWwpKGfoZ6js8w3KCMeGxogLDrvt6mfnp6iqK7NVTks\nKCMkJSk4Sta+saqsqKKboL683+diJiQfGyMhJy4pX66tpKKmpqurrlgyMS8vLCszRci1s7GtqKyx\nw1ZBMi0qJScsM057xbOvq66vsLvE5UU+PDw5NTdGV/DGyMG5t7W+zexLRDosKzxh2sTKvrGvrbXK\ndD42OTYvLzE7WOPMzci4vL65ub/T7PdkYVFHRkxRU1lgbfvjf/vn2NxLT11Y5H542+7O4vDG3uHZ\n3dHs69j7V15aS0hGTUhLXlz+2c3N2NLKx8nN1+7d4WJYVWpiY/RnbmZlf25qaV9YTE9bT1326npu\n3Nzczc/f5s/P19/Xz9nX7FhOTU1CQElTX2pt3cvGwsjNys7WfFlXTUpIR0xSWXnb28/LzcvO2OVi\nVEtLSUZNUF342cjGwsHFxdHf6FVPR0JHP0ZLSWfr187bzcjDxdnT2Ot9XGFYUFlf++/5cV1u5Oj9\nYFZoaVdPTlVc+t/f18vKzMbL1M/a6G1PTkVCTVRfYWvt2MvM0t7W2XjwZ1ZYWl1Xbfj37+LW3d7l\nd25qXFJMVFha92h52tbT2M/N1dLT3Oni6WFaVU1KSUxSUmvo6djS09Xo3t3n8GRs+GlfXm/f39/n\n5dvc7GNaWVtRTVlnb+/v4tnWz9ju5+bxYlhhX1phYP7c3tzY0tXa4Pb5dF5QTlJVWmtxbObX3uPi\n4tt+bmtq629v7Xrk5f3lfm1t/u9v7vJmYnNrXGdqYfHtfubZ2+Li7tzcemdeY2hhX1FQW2Fufe7g\n4NnNy83W2tnsa21eTkxXV1FdemZe7+Pq2+rs8evU4+Pe8ejfd1xddXpzcWFy++ngb2tobf1fXm5m\nfOXo7Off3u3p7XD1/Gltcu73bvj5bnVrfup1bWH49XHu7u1vau7h3+H5ae7vfuXqemRiaGxpYmNr\nc+fk6fZ4f+/+Zvb9Z+/e3ur73Hpf7v5fYWtqZljt3d3tZt3f7tzh6vNsXmbqa09db3Lra2z17vf7\n495pXere4XVccfHo+Xjn+ezi9uVvXv7r8/3t+W955+1fYuvvenVq9+tiX2/77HpsaWN17Oft9mzt\n3uPsbnLg2N/q+W7m/2VkVmFaU1xea+Tq59vd2+Xd3372b2dfbl9i8Or/eeXu5N/i5Gr+b3NsW1lf\neWZf8N3n5dXb5/p48/9hV1lyb2Rib/Lb3+zc3+fs6e1s/3d7ZWJtafduZHXd0Od0a3ju8fVfWl5g\nXGnp2d9paNzP1+bv7+nd8GNcW1RaZm14X1xu49XW3+vl293p6mlVU1hs8HRaWW/p29vld+7a3/Rv\nbWlpcGdke+zg29rb2+Tr5d/raWZrXFROVV5dW1dl8Onn6Ovs7fHp6u74eHR66/B8fOHS1ed49NnX\nc01GTF5ybWr5fGD4vqyqs95HW8vXPCklKzlJS0pjzLqwrrC74UZCTl1NOzZB1rm1vMrRxr/G5ko7\nOD1KX2NOR03qysrZbXXWyMfWaVtp59xwRC8r6qCcqGo8u56hTBwZITQ8Jx4nRremn6O00WLErbky\nHiA9ta3LPFyvpai6Uj9IWl5WSzg0P/rN+EE7X76+bUBLyrjCY0/kyNBcQUJOU05X8fNeRz/AoZ+0\nUFiyp7E5ICU6QzIpJzNZxLizr7vTybe27DYtOO/OVD1fuKyvvMXEv9dOQkVGOzQ0O0RITF3RydPc\n2Ma/ws3Yy8rjWk1MTFBWUkxNXd3G1ni0qbliS9K+2Uw4Q2xNQENoSDpN1sjxPj/lvsdMS/3m1n/7\ncu/IxL3D1+zjzNXqW1Nm4N1bTkhRbWZTSlNTT1ru3/JaTmbf22xm5NLN3tfNz9pbPvOpsM3BzbK3\n6kYsNy8tQyorTtq4v8XC3bjRQEw6Q3xvYlXEtLq0uc3ByN1+Rz43S9tWX2Rh0tRZRkhYUU9YUM2/\n0uTr7Of1XkdHWFTy+WPkz77F915BV6uszra8tat0PCkvRio6LSdr3MLAysLov9o3PjxKz83dzbWt\nsbu/y9rMUjw5OkVEV157xudh7HNeRz9CVcvK3NHaybzLbE5ca1JVRkppZvJs4NhidEQ+uaa6t7G+\nqLxKMypILS8xIkDSyL7JucfC0Dk9PzxJanjPuba5ubm8xM9bTUtGVE1X3dbF3lZQRktAOj1Datvz\ny8fEvsfL3/5vR0hKRmJgXWvgx9DO4kFAxKe1vLjUrLxMOCk8MTU4Jz/44b/CucLPdjlDTEFPbefC\nsrS7vMLa4OJCUFhHZE5Xzrq/4eVuW0w2MDtKYmNg5c27w9XP3trvREBGVGV+0XPdwvV88k5WxKu4\nwbC+r7lBOTE6MS0vJzfN0Ma/vru7zkA7REBKa05rvru7vMPT48nuYONIcc/azu7a7nf4Rjw+PURh\nVl7q09bm3XL03PFkVlxnad/f3NXWzdfe92BnVOG1u8S7v7rIYE45OTkyNzQ3TWrRxcHK729ZUkxF\nTPnU1NPOxL6+zdzR08zeeObp09nu81dYTkdGQU9OTVdVcHLp2era3t7Wd2pgaH128nvm/PXb7uXp\n8WxX8sfDzcjEx8bP1vhRVUxJRj1HWlJdUEtNS1BMTVph3dvn2NTMzczI1MzN0sjRz8vU0dzg7V5c\nSkZIQ0JFR0dNW2L17erc2N7t5eDf4tvU1NLd4Nnc419bWk5vzcjPxr7L09Pd/2NYSEE9PUhTS0hO\nTE9rfW1hYG3w293m1NLOzdLOysfIxcTNy9Le3XxhUUpGQkNAP0dISE1abuva2Nvf3NnX3NzS09jg\n6uHr7XZj+/1nWnrIyc7Ex9DX2uxkYVZNST8+RUpOUlZTWXNoZ3R279zm/eze1NDMzc3LzMXEzdbg\n2tzj/lhTU1FKQj9DSk5NTlJk6NrV1tjW19ja3+3+6+16fO3j3eT3YlDyxsnOxcLJzM3b429PUEQ6\nODs+PkpVUF556tvY3N7Y3/Lm5efa1NDPzcnKysjM09rf5HxvXFFORkdGQUNFSlVp/vvh2NPP1uvv\n4vD2cmb06+fe19vf1etT5sjW0r+/y8fL3tt0TEg/NzQ7OztMVVl53+HczdXOyuX37Xxs5dHd08fN\nzs7Yz8/h5dbia1xRSkxMSEdERU1XXn7j2dTPz9bW3d/iampqXWh46+Dd4eXtXGrU397GwcjHxM/R\n1GNMQjs0Nj8/QUpGU9rOzNDf79jP0dLfZGPTxcTI2O7azc3T52154+xqXkpCR0pLSURFTWLu2c7T\n0s/S1dPV3uj2++fe4ejr9Xv0e19ZVFNXVmD35tve2tPW0dPg7PHv7W9aT05PTU1MSExUWF9z59zW\nztHU0tLV3t/d3NTU1dTX1djmdmJbUE1NTEtKTFFZXWFtcvTb1tDNzMnKys/b6WRdX1ZQTlFXXGZo\n+er8d3x8cHdzbHjn2tvf4ePc3N7d6/Xy8fT+fG9qZ2hhXV5cW1xeYGZod+re2dzc3eTi4OxsYV9e\nZGxmY2Vpa2x1/unm59va2d3e2+js9v71c218d21vfntoaW1mX1xeZGNrePTu7+vn5uLh4ub++v14\n8+jo/HVyam1uZl9gZWJhZGh87N7Z2Nrc19TX2+Dt9H5qX1pXW1xbW1xna3d7dW537Ovr8O/m5eft\n9u7r5+Pn8Pv4+v97bGpsaGhnb3Bsa2p4fnN7+/Hp6+Xg3t3g5u3s6O79cW1kW1hYW15kZ3D97+jq\n6eLh5ejs/3n46ejt8nd4fHh2b3NxefD3d2149HhlYmx49vL17Ork4eLt++32dWdka2ppaXF7d2x1\nd2978vXo3dvb3+vy9Hp7+/xvZ2ZhZG1oaXp9/nZ9+fTg4eXreH1ycPv593Jrd3h4/ff7cW559vb1\n6+rzd3jy6+14WuTIW0dd2d1UW+HbZ1rp0d5o6ODqfH/1d21qXEJ8wf1W2LnEREnZzkw/VddqRlvc\n1e/o1NXtTmraUl3Fu+s+T7q8PzptxFA6UMvPTVrHvNtY+s7fV1Zx+1dNXuB5Z2/j3v9r6tz/XV7n\n53H3399rauHcfFdc9+d9aPHW3Wpr7+t6ZW/7dGRs+Ovt7erh7mhicXdcX/jucmHz2+xx6uLlaGT9\nZmtw/OTud9va5/bz6u1sYW7ve1tebWpceeDe72bh2957bOdsbP5uWG/o6edmbOVvXe/R1lpZ+uHc\nWFt72tX69lVc4un4X1Nj38/c19jffnriXFZHRU9id2J249TLydnc2Ox57/RcV1RvcmR6/fH+49Du\nV2rRzO1OV9nYcEZAX+HhbGnZzc3e/GLv39laUVxt4WJUXuzS12Bs8svF7U5T79hsR0FT1dF7XmbZ\nzs7d/fXb1vZgW1JX4dtiUFJq3+hhWXva0dTb4uLa42pRR01Y629dXd/L0dbg2dTc+k5KV3Z2TkdU\n5c3J1e/WycbPW0dEW/5fTUtV5tPS2N3O0dvi9nhaU1BYbF9jX+vY0tPl7+7c1eZiT1dld2lRTlbq\n09npcevWz9juZmR8bnJ4bWhk7N7rdmFp7t33YWhu9+zic1pp79nvdGZp+fHc9np+ef7v91tYW2dp\nfO5u7urcz9LU9V9edNXW8VFGSl7Y19zv+NnLvsbZYVlrY11JQUNNYV9cWWJ929Td82dpe/fp/XRj\nbu3h1tfb19rd2tbcZlZcYmFYWWhkPDLNqqSjq7TjddpNLyEdHCEuW8e+saqkpKi6RS8sLC0wNz1P\nv6mgn6WvzU9AODArJygvTM6/v8nNyr69xXg/OT1V6NfKRz+mmpeZpLQyLDQmHRQUFRs9raCloqCj\nqK2+LR4cHygzx7KsopyanaO2PCYgICEoLzpZvq2srrjVTj5BPj4+Oj9bw7e3ucpORUc7KTiooJqX\nnaHo/0IeGg8ODRMwt56WkJKXnKnpJBwUERcfRbqfl5aTlpupXCobFhcbIzbHrKelpa7FWDgrJiov\nOGbAuLOur73hSTgvKil9opuUlJuiwdMxHRcODA4WK8KhmJWVlpymyzAhFxYZHzfGp56al5qepLhF\nKR8dHCAtOlLJvLi/v8tNREFDTF3Nycq+xc7+VGhMPDjTop6Xl6CsaEUrGxkQDg8YLM+lmZeYmZ2l\nuEktHRscHy5XsqagnZ2ip6/MPislISIpLzdJXtLNxL7L0drf3NrR0dTcfk9HRENKPzjjo5yXlp2q\n3182HxoQDg4XKn2rn5ubmpmeqdIyHxscISo4+MKtoZ6dn6i40VM8LiklIiUqNkRWeevIwrSutLnH\ny9Pf6Ek3LzI8QDhnpJ2ZlpuiusFeJBsRDg4TIzTPr6KcmJSXnrBiLSMkJSQjKjRUs6Gen6Cmq6+2\n6C8mHx4eJCgqM0LEtKejqKuwrrjH7zYrJywwNDMtzJ+Zk5acpbq2SSMYDg0OFyY167ujmZSRlp+5\nWjoyKiMdGx8sULmopqOfnJqeqW8sJB4eGhobHSxQtamloaOhoKSv+zorJScpKiopLbmbmJWZnp6n\nps0fFg4PExUeHib0pZWSlZeiqKOu2ikbGxohLio1TL2fm5SVnqSwzEMmGxQRFhsiL1C9qp2YmZqe\nqLpaOigfHh0hJSY+opmcmJibmqCqVxwZGBMSERQYHk+loZ+ZlJOSlaDJNSsnHRYUFR0zzKufnJiT\nlJun1CwdGBQUFRcdLc2pnpqYlJadqLjgOCogHR4gJCo2Zcy1rKqmqKmrtsFZOC8tLCgnKi9DzLOs\nqaipqq24eTkqJCUmKi87fL6tpaOkqKy20FA2LCckJigzVsu4r6ypq663zV9ANjItLS4wOj9Tz8G4\nrqyrr7K1vchbRDQsKysuM0jPvbSuq66ytsxBMi0rLDA0N0bYwLWvsbq8t73YZ0c4Njg8RFzMxr20\ntbW0v9thQjYzNDEvNDc4SMzFu62vtLO2vMTVUj4yLjs+OEzZyrasrbKvss5fQC4sLisoKzM7cL67\nurW1tbW2uddUTUlNUnTq6crFycO+xmlKSjcyNzEtMTo4R8y9tbGrrK6rt8PERTkzLC8rKDXLtcux\npaegp7LA3V0rIykkISQlLk/IytCzp6esr7S6yG9CPUk9MEPjV9S5vru1uc7h10k2Ny4qLzEzQvnS\nxLOtsrGvtrrLUTw3OzQsNUU7RKip26GfqazCrk8+Tx4lKB4gIDc8OMjIs6mrrK6orMzYz0s8OzZA\nXFN+0cC9w7zEw8xWTjw5NDQ7NzxBTu7lx72+vsK9xNfOYU1bST4/Rzw9rLQ7p6Cqr76l7klnJzko\nHh4gMSgw5Oe9ua6prKyzubnJWFxfRUxcVt3j5OHHv2bGwvZeT084PDkyPDk5PF3oXcW6urW2ub7E\n4kxSQzo+NzXbq9fKnaeyr6q2OFY2KSwfHyYtKzLH2GK+sLC6sbO7u9zk0mpJScvrR7/Az72/wcbC\n5ElWNywzMiswPkJL2MbHtLnEtLnP+e5VPUdFQFBbWVy2qsetn7C1trdgNkUsKikgJistLlXHc7+u\nsryyrr/H+1f0SEVM6dh7u7y7u7266tbxSkU3NTc4MTxFSlVl1+PBxdjFxcfe1dlPVE5XalV+3Vn7\nubHNr6jEuLzFWD9RLTAtKDAxMzjR207FvczZu8pczfVg693OzsPKvrnHu8fq0NloUO9QQk1COzw/\nOT1IP0t06fjIvcy/vsLIX2xjTk1OaFJXdNOzvbyrtba8wcVGUjk1NyktLzY0QGdJe8/JyMfGzcPp\nZM9rWmnN0dG3xLuyxb7IynRVXT1BOzc2PD06Sk5PX9fPy8XGy83V9vVdWV9kbWr33tXc0La0vrS0\nuMLt1ldENS82LCwvN0JK6vfMvcnK2Njue+tZ+uvjzsG8vri7vb7I1WlbTktGPkA9PD4/T0tT8GTg\n59nQ3c/g3u5n+mf04uPR09fTzcnd8sW90+/XzfNh9lRTTkZKQz8+R0tGV2NVVHR7eNbU1NTW2d/V\n1MrG1cm/zNLQ1mBc809XYk1PT1hPUGdUV1xPVVZea3Pm59LZ287Q0t3c3d7vbXJbRk/P2m7IvMbJ\nvb3L0N5bTD84Ozs6OT9HRFtq79LNzdPV4+zk69nQ29jGxc7FxNTT0uHt/1hSUElIS01IR0xJUGBi\n7O/g19ja4Nna3dnka234d+zlXk9cy8nVvbvBwr7B1tl2SEI8Njk6NztMS0pr5nrm1Obj3e/s0MvN\nyMnJxcbLyMxxbu9iW2hfWl9XT1pbTk9ZTU1nZmP+7efb29/a3HF76GVfe2FRa25XT/LCwsW9trvA\nu7/P315HPTo1NDs6OkVOUFvv+vrW2+Db3uLby9HVy8vFyMjG0Nje5H1u7V5YZVhQSk5RUlRMT1RT\nXXX67Nre7e/r8W96cml38u3n3+V5Y9O8w869usPGwMzr52lLQTw3Nzo4O0dHRlrl8eXP1+Hg3d/n\n3NnTy8fFxsXGzs7Q4+bn9GNpZFNOTEpKS0hHTVZWXHP++Ovm5ut0fPxv693d39rS2d7pbV/bv8XS\nvrjGzMHHcGNjQzk4NTI4PUBMXF5l393v1cvX5dXP4uXU0NPPzczOz9fY19vc2tve4m9WTk1KSEhG\nRkxOUFdx7/DZ2t/g29vi29727fT+8/d++e59ae3MxcrLwcHLzMzaa11MQDs6OzxES0xRW15l+OTi\n3t/v9/bv5djPzMrIycvJyMvP1dfd63hhVU9OSkdGR0VESU5aY23i08/Rz9Hb3Nnf39/o6N/c3t/h\n925oXlhYW2FeWvPW3d3PzNjf09bn3tfrZVhNSEhIRkZHRklXXWnn1NLTztLZ1dLU1tLS1tDNzc3P\n1eD9WlVQSkVGSUZHT1ZWZvPx593Y0cvLzczN09vofmZdW1xcXV5v/XD57v9rdfd6amtxeGpz7+7o\n6OPh8u3pf3NvY1xbYF9jb3f89ufd29rY1tvf2trp9vl5YFdXU1BRVltbX2989/Hp6e3l39vc3+Th\n4efe2+Tr5ur6et95VGFcWl5dYGV28fDx5e/l5PT4d3Rsbm5rcXZsfO3r7fnzdHX8d3JveGVgbGH+\n++bi3NnZ09LV3+XydfxlbGNeWllfX2J4afz5cG1q+3xtfvt96/b86+rt3eHh4+jy+nnxb+r79vZv\nfGRkYWNqXG1lcG523+DY2+Xe5e3mdHv3+v1qfV9hWmJlYG1yffB16ffb29zZ5Nv06mpkXVtsXGp0\neP1pfGj4bO3o9fX2+uTm6exs7ub34nrh3/ngYuxfX2FXYlhrWmxrbOn+3tnQ0tTb5Ox1/mZt92P1\nYWlhaWhyavX2X/tp9/Zo6nzu5uvt/evp3+fj6PvzbmhdXlxyZG1t/Oxv4u7q5fHae+Np6Xz59WXk\nb3j2ZeNe6nB3bW58a2RtYV9qZHp4+u7t29ve2djW4t5y/XFhXl9dZV5rXmjy9Ozn9OH86Pjj7vVi\nX29sa2xr7Ofp3eDf4enh7P9obGNsYW9ea3X7+HNw8W/n/Ovu9XNya/7/7u/f/PT/e21wev3393h3\n8HzvdPr/699o8OX24233b/dpYGZjb2pzd2Xue2r3b9/r8OZ+2njgd+/48ul97XV57mnpa+xgbWtv\nbXVr/WZobnlf/HXt4PfQ7Njb397u+3NcaFhmZ/xrbPN13Oz363rseO9uZPpw92pk6WPwbWzd+t3z\n3uhu7WNtc2puX/t58ud95O7jbeDmfORhZnJz7Wl4Zt/n89xW3Vpwdl1ke2jxauT22e/+4HXWfels\nfPdvfF3tZ33pat5fevZfeu5v61Ds9eDidG/+5PXaYXbmeNhs5WX6cl7s++R6dWLldf1yZfdZ03rg\nYe1g7uTf73NvY+lt6nFf9WDXZHj4ZN/47+Bs/Xj67eN34WvqYttp4Ftma1/2bn5nbNpx5/Vs8/d+\n6m/gWfJ19uNe3WbY/2t2b/R95nlt8GjvYfpt8G/+8u113mfmat7sauzjZNFPz3Vv7VVl8WB6YFri\neGLdWupq79pt+erqz3jqbGnbbd9a5l/bdOxfW+Vw3Fv9W9tr995O0GfV9lXb/eVzVuRc5FTbT+Tx\n8eZZ3ujl2U7NWMxR4Pdky1DgUt7j6mlM3lvObFnTS81dXNlFy2L9+VHW+tVfc2Xa1Pz0StzR4O9M\n8uvd5k5l59/TWF3Z6d1YW2/t8eh/bvT+3Hrubm15cuVmdVlz9Ojw6ub36l3l8+xsXXLt6/JW52/e\nYm/w2+Fqbfbo4W1zY9/qdWlf4Hbna2vo+OdgfuvieWF88eVqYOrj42J5+t93aGZq+FpeXHLvdXPs\n4+TqfuPk3uX+7fDm6Hr/9Wl9XGdle3r6cfx89uT97PRx7Gpza2xzdPfweO/s5/Z79PXmeXlvb3l8\n/m7teu5ucu596Hp+emdwZHnxfvHt6u7s7N/z+Or373J2eW5taXn4b+r0+2lvbnh3aPht8GlvaXv2\n7evg2vvm4vn+aO5nbGd2dGr/4en09uRv/WdzbWl9dn/t5vT78fL97fZ5bnJy9ml7bv1y6uZ83u/l\n7fR2bP5vYHv0cXb1bmt16XZ0e/V4e+7we2Tu6P3i5+Hv/+f9bG768mn0e2hobP5gdnH56uT96eJ8\n733ueXVrX/l4+3/rc/nfdm3/8Gds82r2d+/25d5+5+JUbMJeS9NsTuPeZXbfXFfsa13r7l3m2F99\n2vdm2uJr391h9Nt4b+V+XOp5Wmh9Ymf59nrq52z26Xb94Xl0/W9n6uB9ePl9/uryd293aW96evlw\nfPvt7OTievX9727m7WnzaXL89G/rbm7qb2d+8fz++3x8bW9u/3V4efP27uzo9ubk+ePoa3/vYXRy\nYF5wbWT2dm3173Z96X543et68OP6eeVq8+n3bvByYO1pYXb8dPLwc/zfe/Xv+u5ueH3v+evf4tzY\n1tjR1dvjfWNUTktJRUJFSUlRXGhz6NnW0MzOzMvQz9ne9mz/YVp1UT/KvTa/qk2/r7Tl1bFFRls7\nOS4wNDIvNE9APMzKcMmyusCxtr3AxsTT3/zWekbtXEpPV05AVE9KS1JTTmZjZHbd3tzR1c7PztHj\n3l5aSXu2P+Gk28erscVZs1g1RC8vJiYsLSwtY2JFv6+6uairtK+zusr+6fdOPHlmN2PWUU7OzlHk\n4lhJREg/PT1HSkdk1tfRvbzCvsTK5GBQRTw8w2w7qbHKqqusz7jBPEYqKyggIyovKT/H78muqbKs\nqLGwv8nOT0E9U0I5VtxpTr+83sa9y2pdTT40MjY0MzdTY12/tri2sLC7wsxqTD47OzE0aMdCuqK9\nrqWpuce3PjUtJSggIiYwLjPEyMOwqauvqLG4vn/aVz49TUk4ZtlJ27rN1LnG791fQz06NTc6NUVf\nX9G9uLy1tL7D4WRNPDk4NzU8R0LNrL60nayvpq69+c81LSwfJiMhKTo9Or63vq6prLGuvc/NRUpN\nPj5S6UrWvszDvrrPzs5US0I8ODo3OkBGUPzJycO8v8DH1edgSkRIQj5QYVvZyM3RrbHep63JtsDJ\nO0s/KzMoLSwrMT5uSb+2vLa4tczGz1f3QkpSUmfrvMfDs7q9ysLMR15ROzk7Ozc6PkdKZ+fNxMu9\nwMnG1+ZeYU5EUkVOYlvt0c/r37q4d7Wszr22wFBV7jU1Mi4vLTA7TUhevb/JubnHy8XfcOxcfeXj\n2sXD2sfJ1fdh2khIWUhFRFRHTVtX6fTp0MrU6cvZWW57WExYWkpPbenz19HT2N3fY87C5b2xwb23\nvN983Dw6NS0uKy8zQkZcxMfDvbjAwr3S1Plzd13tZ9zS3szS3s7iU8ztUNzaUkr7SEVNSE5JWmfq\n++7J1u7Nzuz36HdPW15KVFhWVmRtZtzqzLXAuKu2t7O601llODEvKywsMTZJXHLAwsHAvsXZyfth\nZUxUV2/71sXOxMDOz8PNT8bWR+TuRUdhQkRVT1Jf3nTY4enPbGH7YUxPYE1S7mFZ2tjlz9HPz9vS\n3ci/ybq3wb7Dz3tNSzg2MzA1MjtDVmlp0NzV09jec954dOL32dHIx7+7w77Ays/O3FD+SzzcQjrW\nSD1yXj5Y90p263lr4Hn5ze7e1+x3ZnFbbuXx9t98XeDl7+XWy8S/vLbBvr3S6FNOOzk5Mjg1O0NG\nTln1X/3efvPa1N3Oys7CwL+9vr/DxNHZ40xXXz5KVkFDTkhFWFVba//m39zgz9XXz9rf5O11bWtZ\nV1JRVE5WXVZl6vbzz8vVyMLBvry3vL/A0/RNRz84NzU3NDhAQk1a6OnXzM/O1s3Q3Nja09bKxMnD\nxMfK2OpdU1BFTUg7U2U/4dNN185t5c/f2svg6+hmZ3VdTFVPSktJUFRq9+fZ3djO0ODNy+nUxsfJ\nvbnLwL3i3GpPQzs7MjY1Nz5CTE5tcfTV38/Qzs3OxcvEvsO/wcbQ2etdWUhGTj9PX0TieF3b9PHy\n7l1obl395d7a09v37WNaUkxSTVNdXHn43t7l2ure3u7Z2t7Yz8W/wbi9yL7V9lpHQzg5NDI1Mz9E\nS11819PHxsXDwsDHxcnOzdXY5/P8aGlbV1lNTVdJXGNY6nXt6vjg2Nvcz9rg1+Dr7mtfW01MUUlI\nT05RYmzv3OPi1Nngz9nczNLbzdDJwcS8x8zHX2BNPz84Ozc3OztNUXbZ0MrJxc7MztjU29nr3tzs\n3evx7Xn+bm5rYVpfaFV9/Xnf3djs3t/k3d7g/u9wZnBXWFNNSEZKTFJdbubg3M7R0MvV29Hj7th+\nZfPWzNS8u9u+x2n4UlA8PD01PTc9TVBg78ze08nTztDN3tjcb9Dc3NTa1+LX5Xt7W1hSTldXWH5o\nZvPn7uvX397T2u3i5Wx7bllOTUtJU1VbfvXf29fV1tTkaPtkUe/va+rZ3c2+xr25xMjP5k5KUDo6\nOjU5O0hMdN/zyczQycnN1sze9Nt7/OnsbezcaunqZ2dfW1NsXV/cWXHHfuPD2+XR4Fpv9FRna05U\nW09QZVJSdXdl6Nbl19Hm3OJZYPlZZNve99fRzMDEv73Hz9feS0hNPDs7Ozs+Slbi3tvLy9fTyt/2\n3/ptbe/t59ro3dbm59rfbXRqVGt2WV5f6Px90OjY2Hze+f7x7vNeZF1OT1ZZVlhkc3t78+rk8vXp\naGBiYnTz2tTU0NXVvr3KvL3M1WFpSj9BOT47N0BLT1ze0tvPzNnU1Pjh3XT+9+zo4Nri1NXs4+f6\nY1xaVmxuaeLf6Ojl5OXs8O7n7nft/GZmWFlcVlhXWFdWZ2jt3OXe3ePs/XlsaXj75Nrj3tPUyb7B\nxcTGy/RaTkdEPzw7PT9JVGXl29bW2tjf4ebt6HFma2n06Ojf2tXb3t7y7vNfZe/2dnxgWN/O09rb\n197j8WNfX1ldW05OVFZcZ25jYGls9ebg2eD+dW98/Glqe+jd3djY28q+v8fJy9j7d2xRSkdAPkBC\nSVVfc+ra3erd5Pf48HZkYmBrdezh4tnX0c7Z3tzi9/vp7n747/tv++59/u73enlpX19dWVdVVVVW\nWmBvevTm6e7q6e/s7nh29fj63tfa3d/f7XDfxsrXzsnU6tnX7WxdTEE+PUJMTVNebWpy3d7r5+tt\nWVhaXGzj2dPNzcvJysvN0uPw4nVfaGhcWWx8bv5sYmliXl9fW11pYWBvdWlnbXJ/7/L16+/+fXp6\n/vDx79/Z3eDl73Fd5cnP2M3IztXLzN76W0k/P0BDSEpKUV9k/9ze7+7zalxl/vzt6OXYz8vIxsrO\n0Nz9avHhZE9afV9TaPZiYm1naP7x8e1zZf75ZmdxY1leaGNpcHDz6P356nR35uv939rr7t7f9efM\nx8zOysrR09DkYVJIQ0FAQUVLS05aYGrv5uno4uLp7Ovr8vn35NzWzcvOz9Xb7PnW1XVjcV9RVmVf\nXVxXWWRndubt/+Xa6vfufV9aXFtdXl5q9eru7+n06d3k9+/i7njq6+nNxs3Ty8nU1tHfa11OREA/\nP0RJSEtZa3be1Nze1dTa4e94bH7x9+fc2tfV1NbU0977Z1xt7WxZW19bWmloYnP6dfTl7+fo/G99\nemRhXVdZYmls/v138+Pj7+zm7+zi4+7k3enRxMvQyszX39rkX1VPR0JCQkJHS09h9vTs3Nvj3trh\nfW52b3rv4d7c19POz8/Q2+Ld2N7ueGJXT09RUVFTV1xs6eDi5ern4e13bmNfX2FrbHP79Hx2+PPt\n49/f3+Hs9nVx++TPys/QzM3T2dvka1VOSUA9PkJFR1JpdO/d1tLRz9Td6vr07fbv5Ono2tLT1NXZ\n3+1zc+v1YmNqXltdW1pdXV92dmh27u7q3uV+e2xiZGVodPh5bnn4e/n6/+zj5Ork4OTq9NnL0dnS\nz9LTz9TicVNKR0M+P0JDSFZmbfTe2tPNztPZ4err8m5pbHT939TU1dTV1NHY63FlW1RTU05PU1Zb\nZ3L97+ri3dnc5Ofn7/18d2xfXmpza2pvdX356+bu+erf4ebf2+Hm2dvk3dnf5dzffW1qWU5MSUVH\nS0xTXmd949vY1NTY3N7o7eXs7dzc/vfb2t7a3eXf3vNxZ1hWV09NTk5RXW506tvc09DZ2Njd+PLp\ncXd1YWFyYGjxZ3zve+j4aezyX3P4aXX67+b7aVNN5s/v3tHczsXO3+R1cXBcUUhFSU9dbmpj893d\n5/b79/jt5u/67eLh2Njo3uDh3/R3ZF9dVGRVVnZbed9g19r7y+Hry3jX2lvbVVXlS2h4S+NbVtBP\n/c9P1OxT01t2z1vv5Vf43F7d42LX6/rXc27bYnDbX+/kdOncbdz7Zt5camNiY19lU29bX/lW3Pp1\nz1rQ/fDNT8lT3O1Yyk7OZe7eWMxXzG3p21fbWG7uTNdL5mBT3EjOXF/GSb9V0t9lzVDOVtxdX+JM\n0FLjel/kYmvbXtZsdM5Jyk3ZeFzLQ8JGym7n013WYOlq729vbXRf7FdtclXPTcpKzmNvz0zFSMhQ\n0Vh1+GDfev/oad7q9tte3W5u4E7MRMpI1mRb11LVZt572GfVauRscGpk31/iXt1c3F3l9mruXu1r\n62vVbNNe3nDu7Wtza19l6lXKTMlZ3Pl5/F7oXelg7mDoZ9hm12TRX9V88+NP007YU3lfZG9vYNhc\n1nD04V3dU9lP2Fr17/Lt6uXt5d9o11baYOJ663xv7WDlav/rZdxS1U/dXuVh21/ZVdVU6ulf0kzN\nVc9OykjITtxvdn3lX9hc2GTn4FrXVuR9c3Nq9G326/z5fO5i213safP94Hvb/H30dnT3WtlTzljX\nYG/sVN5Y7GPyX91Z0E/ST9FX2l7nY+vy4u7j++nv7dtq1VnYV+Fi+FzvYfltefn9Zu9U2VbcXttu\n2WrVaOBk3mTl7GrbX2vqV+dic2lvZ/dj9XHz7dlszVrRXPjwWuRnbtZbzVvdbfttZndi/GZ97X/o\neW3uW+r8cs5YyVDOWub5cPFh7FfbYfH792rZU81OyUvJS9ZR7FptdG3tfONd1EvIR8dMzFTOW+Tt\nZ9FT0FXQWt5rcN5Sz0nPUuF6a+Vv6GfoZ9106G/fYNZfettMzEffak7JQMBAx1De42nMT8lUznL/\n3FjfWu9df3Ju7HHmYefoZtJW3OZXyEHGSuJ2Vs1KzF9+0UvHTNP+Ys5PzVPeaGN8XWD6Vt9j3/n2\n7P7l4+v77e/9ePdn6/tv6F7mWvVb8mXsa/xu523k9PneZ99y3/feZtz1a99c7Xp3auVd62Rxa+lj\n3FTeYu9+fHh38nb96+rs4PrXdNxifW5s/FjyWO9p+2Tpa95t2W7aaeJ66O3vdOhf4l3xbG7oX99f\n9nlh62HrZPR19+/n7eP88fXv63H7aPZy9H5ucWlsZWpmfm3s6/Lj+evv7OHw6XTse+9u73Pv9+r3\n7X56/2huY19mam11bf/se977323n+ffrbOdg5WHgX+Fu7mp+a+fr3+p87GjtXfdeeGn8b+776/rv\n8vHfeeZn5mTjZ+phc/p242TjYOBm52zxf/rxevlq/mzoYuRo53D5fGt9d/XvbOdg6Wrzee/35Xrg\ndebue+Vt32TvXndrd3ZycGt7bOxr53ji/O7lf+Fx5vz/72XpXulr9fV46W3/X3Jw/PJ2cm3/9ff4\n/vvyft/s5vDz5Xntafls+3Zy923zbPpub3Rn727ieu93b+1p83Pxd/D56nbqa+B13nb+bWb8Yftw\nfPRw43zgdO51/vZv8WftX/Fm7Xjk6ufp+ed47mX3ZPlfb15qa/737+/t7+/07+198nr1fu/78fLr\n6+t99v19dmJoYmpwb/Zw7PPq7Obl+u5s/G9pamj1dXhh+mzh/uDz5uns5vf3dv1q+uj/Z+1t53D3\n62P3aPNxfv17/Gl3bXB7dPb0/39u72x6/fvp7ePw5e3m6+7t/nlfbF9qXl9p/u7v8Xfj7e11efnw\nd/v/7ef65N/h83Vp6e/yaGV2ampjaWpy/WtyfPb5++3v4Pnp7+3qeun4+PJr/Wh4/Ht5dvRz8vt8\n/H3l6/nuc/tmZGd46/p2a/fv/3/u//n87/zvcn77dvd6fGxrfXrr6ez/b3736vf4b3L97m1gdPZ9\n+u71439tcvHv/Hd16v758fH4+mZv7/XvbmR2/m/v/vn8dejp8P137u55b2X76W52bu3l/ffq6H5f\nZffm9mRtd+X3fnt4/u94bHXr/nv/9Ozu/m7x/Hpvd/fy7Pvq4+tyXm33b3Rs4vBsYG70cWxgdn3p\n+X3j3tbd6fF1aWRcZm1udvnu4/R38+LrYWTt+/tfbfHq+Wl95t/ubGTw3u1xfnHm83Jx+3hbdGxs\n+2315+zf5vP+bnju+mpqa/z3/3/r6/ns7vF3a2/+dvv0dHfn7ev57+9nd3L/8Wxxc+/sdmNccOrs\nbnTj4N7p9Oro9GhfaHVgXmJyeXZp797h9n7o7nJcY/p79/Lr2ujs4/7x63R1/P3n+2/+7O1sXl9m\nbPN253ry4339aWp3bPb2a2ht5eLvf+bk6e/x/HJqa3vqfHRdYuN9+GRl6u/16fTm3+/7/efsfXpg\ncfR0ZFfi3nHv8X7k6+98am9tbF9y/f18fuzm3Xzz7O3sY2tnY3Ffa3zteG73493v+Ovk5G9t/n79\ndvt74u1jdvDf+V5u8ut5W2Dj8F5xcff3bPTe6erw7/v1625tfeTuZm9laX715HtbZ/546O535t3Y\nd2zy4+ZWXPHpeV9t49dv/vd7bV/h521oZHrn6Wtt7Ozsanzf7W9od+DubVpl4+lsV/vo3+9r2+dz\nanHo8+9qce7873B+ZX92belv92L131/2eW/lc3f99vrm5fL37d9nZftv+Wpua3nZ73763t5gX2vt\nYFj9/uj7/+7t8H7j4+jlcH5s/GhY+3bud1tt6+rzeeL5/uvy++Lpbe7372tV6tvheVVx5uD1WvLl\n62BZ7etnWn/k63hb39nza17Y3Wdk99jg62lo3d5hU2rtaVxsdWz+/Gv+4nv8aXPl6fxq4u7s/3jm\n29zt5+Dq5nxjZWZgWVtuc2fu7nvp7HznefvravNpafRs9G9u7uLmceXa4PppeXbtemdqaGh1fnDs\n6e/b7fnza/1rdG1o/GXv8vVvX/Xs6m5t5+Dc9ODzeXha5t/9YFjv4m9qZH3m8GZoefv9WHzx7+Bp\n6+zh22no9Hp3WX3k8Gbr4O7wX29qf+pd9Hx4e3Hvfuz/8t3peXX5bGZl+eV45u7Z2F1sbGt8ZmNm\neGJ89Gry6u/l927//t/mYv7Y3O9gcubpeOr7+/Jte3JvbV9eZOz+a19723nt2uT2ZO/xflts8evd\na/J8/OVv/F5r7mtkX3Ds7nfd5OFwZ+P3bV/x4+7u7/nv1+5+Xl/vVGPl/m5j6drkYVzx7urucv7n\n3eP2fevfd3F5cXtna2tdfWVpZ2nqZPDo5/b14+fpfPvp5+N1Yfz2+vZnaWlv7vVoburefWnx/Ol8\nYn344u176vH33Nn1dHBxXVpqWmFiXl5x6/3k29zT3O917/NtbF9043pecdPPeWJs+fNoUVx+XWB2\nf+Lhfn3t8uTi3PhkfN/d+X7v5fZe+Gr+9FXz5u1uXWn+4nRsbHZ0ZP7n5/jo+3ze7X3+/+3y7m1m\n7etsY2t1YmXr5NvzbuXf6ntraml9+2t67XV45fV9a2ru7f5uZXH78+X7ZvXf8Xvv6+nv7XRrcmNy\n/3x/dG5793tYZer163H75Or8/N3g8WLq3ePpYX3m72pf+X7wZmFwZmxkdHRt99/u7uf853pq+vzk\n7nNsX3vu+XptcuvbcV7v6eHx9OvxfGn9dfv8d/l66ep+6vDu9/VlXG9nanBf/3Dz+WP58fj16efq\n5+n99PZncurqeHRsYXD0XmPr6ezl7PR7avPpe2Z57u/v9OHo52xk7ml2bGpt++NobHxr8/vr+X1v\nb/P+7mnd2GVqduP4Wv3e8PV27Nvv+21nfO/yaFpiZnfn4Hn+39z/bHZt6GNf6PDqcOz9+On582x2\nWV3we/Ji7uHl4W3v7/7ndW7x+XRt6HludHP4at5kWX557n9vdtzmbfjo3/rx6nf56uTvb3Zw6/xk\nXlpk7fFlbu3j8mNhePB+5uHd4/vx6N1xY+ryf1VTdGp2bt/be/Df3/lkb/F8b3BeYfPmfmN+1epp\nXWzS3PB26+n2dmn1YG1lYO5+fm1w3dv8Xvjd7XF7bGXsXW3i4+584v78cGpm+vVc7ubud3Ll7Ohs\nXu7qfGNd/OLk7Wh7/nT9f2x5cF5+4Otycuzu5urr42lp++TrZOvobHR74O5tc/l6e25k/XJ+ePrh\n8flmde3g4+h2Znpn+1tYefHY/lz+63t6fvDj6/596+RtdOft6Wlj7OjwWXHjem5f6Nr6Wl/f5Xp3\nXHzZ42lg6uvvY27m5OpZ+uR7919k9eb4cvrxdWhmber3YXrb+mJs+d/5eXDs2fhzeunqeWpm4/dk\nat7UaGft1t9kbmf5Zll83PZU7d7p+2F49O5pW2Bx/mxed9vubvjh3eV6+ePm+Hnn+O7n5OJlZmtp\nXmjueG9f+/vu62/n8fhuXXb4emNz3t/i93nf63f69fRqamZi839rbHfo8nJha3zu6PHf8+Dg9H1t\n2nZeZ3fi9/N0dvx/7nRqXHvobGRw7evp+Gv97Ovy/vLrc1944fF1Z3/rb2hrau7f4/356uvqdW9/\n/G5l+H1v6+F/f/f58WJt8ub3X/j1+f1uc+jtaXpo8+rtbV3p6Xlye37w8HXv6Hxo/Ph29vF0YG3u\n/vv8/P5t8Orx7+n0fnd9e2T16vL5bfXp9WV36vltZ3n87mlf9ezf7WV7fPRuZW774Or25tvy8PRx\nfGp95+z4dmp6bm5kavDwa2x9+uh1d+vo7GlobPntbm7m4vHk6u/p9Wxzd2Rqfn9ucObi+Hh96nNi\n6ur2X2Lrdm1jcuXt625q3+1nZHjk53Bs7NrsYnDj7GZs7uD1bm1t9PJuZO/obm10499oXH3e7mRl\n7Nzg73nf42Z8+GZeZnRzdOnsc/F+bHVtef53cfx+8OTp6/zp8nJ8cPv5/vbvdWpvdHbt6/Lq/vL/\nd+js/W999m9bYvX3enHu5+7v/Hv3eGpjc3doZ2Ht3+X6bvXg4vxy7+RzY3P45er18+vqeWBedXN0\ncHD1/flz+uTr/ndy/+f1cv/n3u188e34bWRlbGhjanJvanPi3/d8+OPi/Gps+Ob2Y2r0829z69/c\n7P3q8HhrZmFr8+5uaP3v8v9n/ejxdm747fP++un6a2p6eXN3bfzu9Xn+5ev79erqd2prdnpnYnrs\n9vry9PD4c3vy9XRocu1+amJx7PhubvPo6fT15dzkdm/96PFzand+enJ08fLtem308nhwfGtiZWd2\nfXV88N/f6fTu7Pd0b/ptaHV99fj7+OXf72plb/7ye3h8fnn+9/19dXV/7+vt9H7173tqa3Nwc3f1\n8Gx86fFuZG/46+/48Ofj8ffu7HxrbHZ5bWBiaf1/bX3o3uXufv/0/29pdfv89Pby7Ojq9/96dXVz\ncHd0dXr5/H5++fP7f/r6fH349v78eG1vfP5wanJ5fPn+7uvs8Pnt6erv7uz8eHL59Hhvb2hrbm9u\nbG568PLx7OTk6fF8/P18cGpram776+z2enb+c2ltc/77+vXv7/X8/H5+f/96dvz9fHl79fHz8/Ly\n8PJ/fP58fXx0bm78+n3//f7+eH379+3t+X77/Xn+/Htzb3L++/nx6+jq7fF9dnVubm9zbW1x/vn1\n/H39/X12dHn78/Ht6ubn6e3y+XZwcXlybnR7c2tqb3V1eP30fnr37urq7vL6fndxePz+e3Bue35+\n7urn6/Pv8/15ffz8fnJvb3FxbHH69fX59+/v8X5+fHhva3N3dXb+fnp69+vq5urr83x8dXRwbm10\nfnx69+7t7uzxeXZpaG52/vbw7+/z9fn07u7t8Xt99/j6d3JvcXV0c3R8fXf/9f5yd3h++Hp5fv3z\n8/Dp6O18e3xzcmtpb3Fvefv49Px+/fbr5uft9P34/X15cHZ3d2xrcnry7e3v9/1+/fb38/d+fP34\ne3v8enx3eXt4/vx+eXh1c3FvcXzy7vH08u/y7+vo5+z1fHV6d3Nra3JubG52+f378/D1/nl4fHd7\n/Pbz+PDr6+vu7/T8eHR7dGtmaHL7//58b21udfzz8vf09n15d3z48/Ht6+zq8/f4fXd1dG5rbWtz\n/3h+fn3z7+rl4ubt7/b1/Hpvam1yd3RycnF0eXr7+3Rvc3p1c3Rucvrv6+jp5+Tl5+zx+fv8dm9p\nbXRubXX8+/76+vx9fnx4/vz09X5xcXt8f37/7+nr7vh5fnx2dGt2fnz+fHZ5+/Lu9fjz8vn99/P5\n+v3+/ntybW5tbnJ8/3Z4f//7/H/y9Pf47ebt9/Ty7+7x+fz3eG1ybnFvbW1qbXd8fXh39e3z9Pb4\n7/Lx9XV7fvr07efn7/l/dnN1dnh1b29tcv73+H/+fHt2e/f5dnb38Ovu7+rq8Hl5/vn2/nRubWpt\nb29uc3Z8/vvz9X7++/nu7vX7+fn37e3r7fP5b2xsZmlsbW52cnb+7+Xn6e/z7O95e/v+/3l8eHNv\nbXN5fPfw7urp7fh8e352cXFvbnF98Ozo6O3zenZybG5vefl8dXr68erq7u70/HNucnh+d3Z2dHp8\nfHZycXl9fHv66+rw9Ppzdnd/+fjx8Pn39fbz8Pl3dG5x/vP5/ntvamVobvjh3NfSz8/S1eH1bFtT\nTUtJS0xOUlhkbfnq49/e29zd4+Tm4tzd3uHe3d/g4ubq8G5kX1tZWl1faGlrevDi3N3Z1M3P19vg\n3/B2YVRVUVFOS0pKTU5VV15pfuji2tTNycnLz9PX2tzj6O3t8npoY2NhX1hVU1hcXmdocP7y7u3t\n7erq5+Xf3uLu/nlvbWhnX1dWeubs3tnV0s/O1djZ4+9lVU5KSUhISUtQW2Jv6tvQzczLzc7S1tvo\n7/p5dXN1bWViZWZlYFxcXV1cXV5fYGVtdffo4+Pf1s7Oz8/T2d/k7/trWF/1dm9z+9/c0t9+fGdn\nWk9HQ0VHSUpNUmbv2tHPy8rKy8/R1dfc5P198fdrZWZnbmpoZGJmYV1bW11hcHX45d7c2tfU1dre\n5vZ4a2NdWFZYXmRiZ2tietrU1NvVzsvI0t/y6vxaTkZFREdISk9YbPDj3NbQz87P09bY29/m6+7m\n5Oz8b2ZeW1lZV1daXV9iZWRn//Hn29XU09PW29/h7vR6amZhXl5lY2FlX1pbZOzg593YzsnM0NnY\n4X9cTEdFSUlJS1Jjb+ni3tvY1tbT2NjZ3N3f3uLf5+n4c2tfXllaWFteX2BeYGhzbvfm4Nzc1tXb\n2tzn7/ZxZlxdX2FnaHf6emRaV2vh/Xvq1crHyNDR1uRxU0xGSUpLT1dia+jl393i5vLq/H797+78\n8e3j7PPs8PP17Pf86+zq5n5pYFpfam13fu3q4ufq4ePk9XlramplZF9lZ3ry7O78eV512+346NvS\n0s7a393wa1ZRS0xNTVVcbHTr6/Ho6ubt5+l+8u7s8efe3Nvh3+338e/sev/5fG1lXV5iY2Ngbmz9\nfG37+efo6/x67+7v+e3q6+Pj8G9hXFpSX9vs/ejcztLO3+/jeGxaWE5UX1phY/h2+vJ57vT7df5+\ndXdze/js6uLq7uvq5eTc6OTobnb9fW11aGNsamtt8ndueX3w7/Fvevz77vLt8e7/7+n+dWpmV+bS\nf/Du3d3f32R6/mldWVlSX15cannu/Onue/jw8ffq9Ozg8+/p59vc4Or17X9pfnJpZl5obmdcb3to\nanV1/fX+9G/7+fvo7ujk7fbt+/Pw5t/pdWRha9HkbN3aytXa7V/7WU5HR0hMVVNlbN/b2NPf1dnd\n6ebf/+/1+vl8e/PofG5/cmxibGBZ5O1kefttdmtf7u/o5efW4uTr9d7m9mFfaWdfY25tX1Hox8vT\n1cvGxc1sU1RMPjs8PUFISlTYzM3KxsS/wc/h3tp6X19gaX5sa+P4ZXz+XmptWldaW05cbFZn6+zd\n2N3bytDj1tXh92NVXmNZS0xbfs3Vx7i6tbq/yed1PzYzLiwtLzZBV9fIt7Ozs7e7wsv4VUhGRT5F\nTu7PxcG/ur7F2HFOQz01MzU8PUZX4MnFv766vMPLz9lnTENIRkBIVFlcUs6nrLqqrquwzE0vOysd\nHh8jKzA72q2jq6ijpqm56UJBOywpMj9K3dK+r6uttbO3ymU7Li4sKCcuO0ndx7mvrK60ucDXXT83\nOTg2NDpGbszpW6qYpbOgoqa4QykiLR0SGSAmMkDRqZqbqqWfqsk6KykuKR4nZMC7raignKO85Ltj\nKCQjJy0rJTi+vcu+ra2ru2vJwFgzPUY/Pzs4Xc5FTce998Wgn66noK6xzy0jIyMWFyAlMvXGrpyZ\no6ylr2U5JiIoLCYpbLCqqKCfnZ+5Vjk1Kh8fJDA0Ok/ArbG3urG46ExITkdAOkZbak5F9s/aUuu+\nzV2xnKe5o6W0xDQjHyMbEx4tMeO4rZ6Yn7avsD8sJSAnMC4xv6Wlo5+eoqrSNjQqIx4mLDRSUMO0\nrr2/vM1vRT5AblBM3cbQ2NJPWfdMPU7oZFPFn5yvq56ovTwjHx8dFBkwPE+4qZ6YnrS+tkQjHx8m\nMDVCtJ+goaGfor1MLi0lHSYwQUfGu7ayzu5pYjk5S0lq2MzCs7bN1NZLNjc4OEJGYt/Popajspyf\nwD0jHRsbFRUwXk+yoJ2ZnbJxyDscHSImMkvYrJydpKOirFw7KikqIys/xc7Gu8PHXz43Pzw6TfvN\nubK8uLXHXlU9LjI7OT/tx7y/spqYtbChvTwkGxsdHhkmvL+4pKGfn689N0IkHCYtPse6rqCdp62v\ntvs1MSwzMDRcwrvnzO9ZQzM3PExG98fDu7i+ysPPSj5EOjFBX2XKvL7IxaSYrc2mtVEpHB4hJB4m\nvbjBq6qoqMExKjcpITNPxauqrKWkutnpP1NGMD/Ky23AwcbfPDAyOisvSlzUv77FtrfT3+BrT0U+\nQEVb6lnQvL7U8rqfnM3Jp88/Ix0oJykjOLLAva+4r7VCKy49LTBzza+psrOst95gU99zS1fXwn3j\n2dv4OzU0OjYzQFjez83KxbzA1NvT2k9NTUVFcXRQ2MHGTcienLa/qbhPKB0lKiUgNMTJu7K6r7FP\nLTI7MjZQz7OsuLquu+rmZNrNWHTOxF5U5WViPjc6Pzw5Ql5+79TRy8DD0NTOzXBVY0pIU1JT28rR\n+2Wsm6bWsKzoMyEhLCwkJn++1bu7uq7ANi0/PjRH7MOus8O3scjV0VnHvVxUyddVYktQb0MzOlE8\nOkpMZt3yZMi4w8rCyMlsREdJP0RoXta901i5nZ6+v62+RiQeKi0mIznCysC6vbC1Ry43STw8X82y\nrry9sbng4WhWxcdFZsLvaV1LZWI5Mj9HNzxLTNvQddS6usrGyNfWTT9HRUdXdN28u+fVsJ6i38ev\nzDoiIS0uKSU/vMrGwcCyuz8tOVw/P2DMr67DwbK4yenyytF1RWDZYl5Y7GxKOzk/PTg8SmHb2NvF\nubzHzM7YV0RBRkxXcHrQu7rW36yeqkvBtVMyICU0Misr5bnKvsjNts4yLUFfRVzcv6uw0cS6xORM\nW8XCW1DMxeJYTmNkOjE0PT47QVDQv9HZvLjA1vjW2FA9RFtfX137vLfTWbKbpWDIsss2IB8sNCkn\nULm+vcrSuME0KTlWTFvbuqmrv8a5v9tHSsrWamXYw85kS2lYOzIzOj0/PUzUx8nMv7i7y/re0FE+\nP0pccVBYurRvRLudntz0rrtJIh4sNCwlNb29vcTftrY/KS9hXFHixquovNfCv89UPuS9zF1wwsHV\nQ0JuRDMtND9EQj9vv8DUz7y2xHdg5OtLQElZ5/RS2Li8696pm6xOu79pLh0hLTYrK92+u7jt3bfO\nMis/9ejKz7qortNw1MjtQHPEyMXk0sfPWEJNPjgzLzZFSkVhyb7BxMO6u95gfmJKQkZJZdJP57e/\neWuqmqpTwLvVMB0fLDkuK2u9trP9arrFNig2d9LH4sGqrMhYdsvJSD/Jt7zrU8m83D48SUQ3LC9G\nW0tE47+8xt7EusZmSltwWkdDcc76Yci/z1q8m57Fx7vERiMdIjIzKTnUvK6/U826YywsRdu+ytuy\nqrTeXm7VzUdJurfO0uviz1I5OkM7Mzk8QPNnU8y+w8vBv8rHbEtYRklVT1je1uLHwVlcq52ozsi9\nyjwgHis1Ly9Dy7Sux1vHx0IsLT7avs/Usqy4z3pf4cl8Wr24xNNbTu5hOjU9PTtDPj7y0+rZyMnE\nvNRq0/NNSEhMXN9v2b7HxMJWQr2gpcndxbtqKB8nODcvOVjCsLxW7MVxNCw2d7zG27uur7vcVXq+\nykjZvsXOVUR5zkY4PD09RTw2VtTm3c7Pv7nKaOfYXVVNRF/R2uTO2djN90JHsp6p18TBv1AlISk8\nOi9AVL+uyFDqzlMyMj3Yt8PItq+1xGpG379YUci8xPo+RcfrPTlCRERENUDbydXe0su+xl9f0uRY\nUE1Zfn3dwslTXc5rRmGtn6vF2cnFPSckLD0/Oz1MvbHJXVztUjg0PM+3vL6+vb3KeExdxc7fvb3G\n20tAXl06Oz4/R0w+Pt7K1tHb/sS/4m/X3er7TEdw2+vT219tz9xAR7OfqM7gxLlaKiQqOT47OUDK\nsLz3Xn1dPzY69by+xcPDwcDOXFfLv+nJvc3OXj9GYEc9PTxAWWFDW8/P0uBe1bzG9OLUfV1NQkrg\n0ernYXTJ7z9OrZ6uz8zKulQsJyo5ODg9PM2vu9hzZUs9OzhUw8G/v8fCu8P1XszDzLzKbeBbSEJH\nRE5RPz9VW0hYbnvl6XLUvcHIxdVbUk5ERk5n1cxwbMnYRjq/o6m93cKzyDspKC85PTc0Y7Svvuf7\ndE89ND5uzcbKzsK3uMth7MLIzNlQde9+Sj9ITVxDPD5caFRfX+LYz83DvcDNfktDTkhFVNvFyt33\n09NFM9mkprrNwLG5SColLDE0NDBFtqy2ydjuTj4yNUzaycLFw7azv+Rj18545H3u2v1MRXtkV0c9\nQFVaP0zn0dPPz8K4wvNZU0hLRTxPzsrNz3F61vs8L12po6/Auqyv6y0jJy42NzA+vKyxv9tZRj0z\nLzpL2b67ubSwtcLZZmbmXkxYd+bh6FhRXlNEPj0/VHZkdNrNwbzB2OlrT0pIQ0/c0NHV4Pr762JC\nNVuoo6+9vK617DMmJyw1PDU8z7OvutpHOjo6Ojk9dLmvtLi2s7TE30pAYe9+TEhczcpZSEVOU05C\nQFffz+D/7sG9zmpOWHzmVEhu09j6UEpb6t9nR0jLq6m4u7u3vPU/LCouN0Q+OU3JvL/PWD5CUk9J\nRVHXv7m3tr3DvsTjZFhRT05pc1pPWePvW0tJS1hpVU9T5s3IzNzY0M/iZV169mpOSlRadHlvWVnv\nzbe5xsjDv8rK01JLSEZAPD1CS09PWmpWaOXzb29+Y2L64tXLyMnGx8zP0ftZYF9dYXLq3tXb5d19\nVUtEQkZNVV5s7N3S2+rmeFlNTlVf8Nra73rUvr3Iwrm8v7q4xPlOSUQ6MS8zNDQ9SUta3c3O0M/V\n2Ot46dzRycO/wcLBxdV4dmpfb2lZWWhpb21ORD9ARExOTV7b0c7M09TR5mJVTE1a/+zt5uHIub3H\nu7rDw7zC2mZLRD81LzE0MjdGSk3v0M7MzdfV2PTqz8rOxby/xsPEzdna8WBoYVhUTUtNTUVERUBF\nUVtv39XXz8rNztd8Y15QTVRmfejn7cm4vcm9usXKxMvZfkxEQzo0Njg1OUZJS2vW0c7P19jiZ2nb\nzczEvr+/vb7L1eNcV2JZTk5QT1lVQ0BERktSV1rlz9LT1dfPzuNraF1SXHx8/vh61Lu5w7+6wMvE\nyNprT0U/PDU1ODY3QEpKWuPUzcnR5fB+eN/Pz8u9ur2+v8rNzfJPWF5QTk5JSk5GQkdJSldkYO/S\nzs/Q3N3R3mlsc11c/vLx9WBdzLvByr27xcrGzuxkTUA8Ojk6OTg9S0xLY9/XzcrU6evj39fU08e/\nv7++wMvO03BVU0xGSEdGSktJS05RVWNufNzT1dXW19nc39/rZ11rdnn1eGJa37/E3Me6v8jDw9x6\nfk4/PDk3ODo5PUdLWOLV2c7J2v7n2NvVzMW/v76+wszLzepVVVRMR0lHRkdHRklMTlhk793W1dbR\nztLb3drjdmx6fnJyemFXXNnFz9nAu8bKv8Xe4vVMPjs5Nzg4OUFNTmfW09XMzNnc1dXUzszLycnH\nyNDRztf7c/JdTEpJSUdISEdHS1Ne+93T0M/O0NnY1Nvs/n97c29ueXVdVVNd2s/Ux72/w729zNTT\nXEA7ODQzODw9Q0xb+dzUzszLzM7R2dbPz9DQ0NfYz8zU1s7XeGVdTUdIRkFBQ0dOVFj82dTSzMvP\nzs3V4ubvaGJuef799u16Z1xTV+zW4dvIx83IwcjT13VKQj88Oj1DRklOVmrj2NXS0NTU09rl5d7f\n3dfW0MzLz9bV3nlnX1hPTk1JSEpOUk9W/+Dh3tTR1M/P1N3k6fH2+3Nsc351aXH48P5pZGJfX19l\nZ27v3tri4djV1tXT2+PwZlJOT09PUFBPU1lcXW3x7Ofh3dnUz87Pzs/W19XX3eb1aFtTVFhVU1RR\nUFRZY21v/OTb2tbOzc7Q1t/r7HViY2leXF9dXF1ja29mZmxrYWB6+frl3Nza2dfU19nc4O16bWVf\nWlVVVFNXXmVgZfzf29rV1dXX29/u+PbyfGZgX15cW1tbXGBpbHFv/+rh6O3o3tvj4NnU09fZ5Pd/\n+m1jYVxUT1JVWmJv8+jr6ODg6Ozm5un7fmxkbXRydfft9HltbW10+Pfy8/13dXhve+vg4OTl5+Pg\n3N/i7X53Z1xWVVVUVV1mcuzp6uTe3+Lm9XN+/XRxcXb16Ory+Pd9cnd++/b+/vfyfnJ+eXR2eH79\n+u/o6n7ZzE9d3k/Zb1XVXPbuX+ZrX+pm8Nn4809b12ByZX7Pdu/e49fW7PnWavtrT2pqaW9h6X5n\nd3l85m3waHvufer77NzNz3Pu/lFRU1BSVE9d/tvd0MXjz9P0fm3cVmx3Wdxj3/nj1FnkWllfZlRZ\n7mTwcuzV9NJv3ups22bf5V7ZYNte9GlX61L4YFTWVt7tdNf79Nt2a89O3uNezlnZ61fTZ19s7m1e\n/Ere6snnQr5B5+k1vkXc4ka0ULzo6MVewjnPSOJNN748wkRQv0m4Ru/E2s1J1OrjZUZ7V+j2SdLk\n0vJOzOnaS0vQU9VPS83uxkjjxFXDQ2fJWtFGaMlY60tYxUzlT+XPXXdGy+jecW/NYspUdc5XylLT\nT/16WtlU3GRZ/F/6Y+5e4u3hYnreW9vh6N9x2Fnq30vkXFzPVvD6bc9P2NhZ3+1tb/PQSNbtVs9N\n5lDgzUPJXN/fac9M1/ptZFzgW/JVfc9S10/Y0FfTT87TSOhe1fhH7dzSZmTb3t19XVHH8j3VZM9l\nTtpcwU5Pfc7IRWzWw1VV5/HWUE9hzVVH++XdUed15MpQ8+LN1E7aY9DZRvjz0mhOWeq/Pk3P2sxC\n2mVuvkFlZsDLO/HkvkdLStW5RD3vt9E9VMnFXT9My89jPmq42khPxMR1UkXKylZBTbzSRURkuvdQ\nQOe2T0k/v7lBTU65zj9dbbrnPGrKwlFB18vPT0DO5uNNS8zw2UZ9y1zVP+vD2Wo9vM1IZkPDeGRQ\nSrZmVmjZv1ZhTczGPVBfw2pXdkvE6mdybMdK2vtY0HPsUuzke+9PZ9jfXdpfX87PSkvD4kJf49b7\nU2fdv+5L7cbeUF9xZV9LaG/rdVzWzdRbWtXYfftObN7vaU/Z03RuXN7ccVdeztxnVdXUYltv3E9k\n6l/jaVXtyspO3szhbVJeX9j+TOV8bGV51mR1d93pVnvq+PNV8NPWWFHW2WpRT8vSXvntz/Naa+7V\nYE3+1edJdtX0+l3l3eFeWd1pamfbX1LV3GFWb93t+Gnv3OhgXdjab+Nh5N9manHdamxj6dpWT2jW\n6lxw5tvWZF/m0etLaeTrcFJn185iV/LR221ZfdLnbVDq5VZfXNbmcXlqzXbwaW/ZYm1V7NteWmLm\n7mryWebdXm/112h51Gjp7HL2YuFWfeNj7u7de2/f7dxXR8a8S2PBv8Vvx8/t2T4+Sj83MDpJSkxM\n2L+/xcS2t77Uy8r/WUVOTUhIQ1dXVV9v097u2NzT5u9nWHtoVVRMPMaqScaprKnRqq9luzQyNCkm\nHCYuKC02TdzOu7Swpqq1ra2yz8y7WGT8SERITTxEW0s9S1E+T0pKT1zrUN7M3sbDvcLAvtzf0GJB\nNju70DHPs662zKu1ub40PzgtJB4qKiotL1TPvLmzpqSorqypssLdfmZBPzU7Rjo9PFRhSWtT6OBq\nXlV5Y1BSXf3Y337QxMfm7srf+VQ5RLvBN9OpqrS6qa+4uzw3NzIiHCUnJiUsPVa/ubeqoKKqp6ar\ntr/bXFNANS43PTc1PU5ZYlJj+t5UP1xbUkVJ2eTU08y5u7u+wLzK42M8PsPaOPq8tLvAsse5vjk1\nNDUnHygoLS8yPny1sbSro6Spq660uMtMQ0hANzE4PEJKSE5r2mdabHlmV1VIV15XWu/LzcG8wLy6\nv9nc8Uo7MTnmVj3su62tsa60rLhEPDUvJiEkJCwtLThtuLexrKemqqqwtLbA6U1YRTw8Ojs8Pj9B\nTk5KbV5QW1VkVV9+X8/KzMG8tb2/u8vfYkg9NTQsNclTUbutpaqnqbitxD0vKSsgHyEhKy83QuGy\nra2qp6eoq7K5vMVpSUY+Ojw4Oj5BSkRcXU/rYnNna3pQ7/lh1MrLz8K9zM3L91VMRjw5QTcv4LHF\nw6ympaentMu4XSwlJCQdHyEgLTxHSsKqqaijpKenqLXGwdBJPT44Lzg5MD1NT0rtz1fdzOVjdN9T\nV/lTXd/S3dfAx8vJ1v5a+ls/QUVDPtWzy7+ur6yurr5oxUswLCYlIigpJjNCWNy+r62opaqtrbC5\nyt5bPkRCOjU5R0BO82x73dHw9OpXSlJNQENNWWffzsm8uL6/v8TU9VtFPT4+OzZEvbrJtrOtq62w\n1tt4OTEoJSMkKisvPEvPvK+rrKinq7G5vs9mVEA8Pz9APkRXYOLZ39nf32ZWV0pGQUNFR1No1sfB\nu7q4vMLMd11SRDs5PD5GS0X1tLC1r62usLCz1kw8LywoJyIhKjE8SvXLva6qq6ysr7m9wdFtUEtE\nTFtJQUZeZGXgX09dXVNISk1BRU1U/f7Px8W7vL3CyMr+dWlOR0FGRUp4fllR9b65ubW6vbu+v9tZ\nRDIvLy4tLC40P1/Vxr67uLSzs7a9xc/Oz+/ualVRV1hLTFVOTFNWUU1TTUlVWVxicOXmzsPDyMjB\nxsvO2/5eXlROUVNWVFVPSU5OTExR6dfJvLq7vLu6vsbXYkg8ODY2ODw+QExZfOXTxsfCxMvKz87V\n1s/Z4X1rYVhPT1hj/GZlbGR1/fT4et/7Z3z892Jr9fLa2uPq597o6+9iV1NXUlRcV1hn8+Pe2NbU\nzM7Y1dXf6+fvdvXf82N35e5kY2NbWmBbWVdTT0pOUU1OT1hmcvPq18vHwb++vr/CydLe72RUTkpJ\nSEdISUtPT1JcX2h86NrUy8jMzMvKztPZ83t+Y1ZcX1lVXF1TUU9NVF9udfjZ0tHMz9HR0NT0c21a\nVFBPTlJbVlt2/fHfz8zNx8nMztPY5+blXVVPTEtGSEdITkxMUlx58t3T0MjGyMrMys/Y1NXc5fFl\nWlpYUlBSUE5QU1di/u3n3Nze3Nfa4urr6vR3aWlqamZsdmtwdfzs7OHe4d/q92xobmJmanD4//rx\n7u57/u19bGtra210bW/8ff3u6Ovw5t/i4eDj5+nm725tY15bVlRTXm1s9+3n4d/a4ezm5uXo8nNw\nbm9naGlncm967uHc3d3k7e7wc19hYVtYWVpXXmht9uHa4N7a3tzb3Ofz8fV+dnxucfPr6/b3fWZg\nXlxcWltcX2139OXf2dbZ2d7j6ezp9XFmX15aVllcZXn/9efi3tTQ1dvf5vpvbWtiXl1cV1laW2Bo\ne/Lf3d7Z19fZ3+b8eH55+fR+bWdvcW9vamthX2BbXWdxenL37+ro69/c3+Lm5eTn6u7v93JqYmJj\nZWdtc251enx6efDp7e3w7/Lz6Obk4eT3a2hiYF1bXGFobf3u6+ni3N/g3+Hl7vtybXFvbWtlZGNn\naWZseXr97unn4t/d4efo5uj3eW90cmpsampoZ25tev398vh7e3d1dn/7b3rx6Ofo5Ofn7ff7d2tk\nYWZmamlqb3ny6ujp7Ozo5ezy+Pn/fnhvbW5waW1wcHj99PZ+cG/66uXk5+fn5el+dHzy8P39eXJu\naWhkZmloc/P09/3/9vp5b2hrevfv7O/u6+vt8vDy+vXu6uz59u7sf2xqamdv/2xsbl5l2+JobW94\ncW78fnbp4/Lp79zd+trcb2Rkb3Vsc2BfZ1xecO3kb2J77ebx9+ff3uTp397x8X3v6HdoYmVqY15e\nWFdj79re/Ova2uRt+9jb5FZHWt/Sz+9XS1XUzexVUF/l71Rg3M7Wfezb09/U2GViUFBb6vBVT0lW\neeLU0NHadmV73cTXR0dey8ntU0lryMvOdEVARXrI0WxLQ1rFusRSR1Rj7c7Bx/BFPU7LvcZZPD1V\nzsbXWkpXb9fL4+TXd1Fd3+pp5edlY+nM01JZd+fqZW5jWGLZze1NVufazuRgVVJ08tfQYkxXas/L\nfVBMYtrDwdVbSk58yMvZVT9FYc7T6WZNWuXSz9xxTlx+4tTx/vft7W92Zl1ldWZ35XNjYOPW9eVq\ncPdTbunS1lvu9O/R2OlQRU7/091mbFz3y8rXWVFmeNHO9ExKa9TP81pPVG/f1fVcWVdv7d3Y7fNg\natvP0e5dW1xy2dTlaFpi4Nl9XVhNVWjt7mrw4dvU0tXnZ2Jge/nv5+XX2ufg5uptYlxTT09XWVtb\nX3Hp4OHh6HNf++Ls+HP+927l6Hb4//Ds8N/W3+TyY1lVdfp46Onq/D86z7ixq661zOvUSzs2KCMj\nJzZJy7i2rq6vsr/PXkA+Oz1JT/nXxby+vsTU4GhPRz8/PkBNUVxvZ+rNxcTJ0+n73e88MsGzspue\np6nl1jErNRkbGxQhKUqxrp2kqJ+vrbJfUCwpKCU9T9Ovsqyqq6etsMQ7MCYiJiguND5i4buvrauv\nt7/V909FPzg4NjI2MjHdtK2cm52bpq3JOjQcHBoTGxofNXerqJ+dp6CnsK674T02LSkyOj5e0dHE\ns7SvrLO821I1KiokJywrOD9twLSoqaintLjJV0c0LiQkMzTIo6SZmZ+fsLhQLiwZGBYQGBsnQcCn\npp2bn5udoae04TctJCEmKDBE5s26sLOtrbS9fj4sKCUhKCw1TNu6r6mlpaaqsLzzOysnLS1Pu7+m\np62oubvoQjsmJx8bHhwlL0LDuaqopZ+hn6Corb1kOi0oJSgtM0Rq1r+4tbO1vNRTPC4sKiouNUP8\nx7evq6qsrrrRQzxFOcq3vKezuLNo3T8zMSMpISAqJDA9Tb+8ra2spqqoqa6wucpdRDQvLi41OVBt\n2MPMv8HS01BBNjE1LzxCRNXKurCyrbG3vk5HVUPNr7WoqLix2UQ+KysiISMdJiktaPe5r6+oramo\nraius7bXcz83NSwwLy88Pk3Xx7q0tL3PXz04ODY7QEBIXHnLubOvsbndU91avqmvoqW5tU42MSQm\nHh0fGiEoLcm7qaGmoamsqrKvtcLIVEg+OD85PUM3Pj87W9/RvcXOdkZFOkNYW8/W2tR3597n0lRM\n0nK6paadnKWouFI5KiEcGRcUFxsiOsquo56enJ6gn6irtO5TODEwLzk4PkY8PkM+WOHXzdbqUkxD\nQ01c6uHQ0dLNysLXU87TzqutqqKsrK++zE0yJx4bFxYZGiQ4V8KvqaadnJybnqWuxFtLPjgxLiwq\nLi45S0/i4t7z43tu1uXa29/439r2+lhQPEu3tqieqKGlvbfORDcrHxkYGBklOl+3rK6rpKiopbbf\nRzQrNUZFwru3ramqra5mOCwkIiUnJSwtN/K6rKSgpqivykcsJEe8sJmgqaK2t7tVJRcSDg8bJTWx\nqaCWlJeZn+UwIhgWGhweOtGrl5KQkpeoxkUiHRkWFhshLGi/sKiipaSpvuM7LSEjva2kkJ+hmK6o\nyisWDA4MESAjLbOjmI2Nk52oPCgoGxgaGRs/uqiZmpudnKm+ZSEeHiEnLzsxXL2xp6a1Y0gxLywj\n1aqqkZedk6Ok3CUaCg0NDh0oNLGblpCQmKex2SkuIBkcHCdBr6inn5+ioqlZMychJy0xKy88Uq+k\no6WuuuNwSSQlyr6vl6iqnrquOicbDBMTGDI90qudlpaYnbp17S0oJh0eKUTPs6murKOnrLw/KyUr\nLS41LzRTv66pqa64tbCzulEiHD+1rJqluq7PstUtJA4OFxYvSUy4sZ2WlpWessY5PTgqKR0hLDjC\nwLWxuKutsr9HOTU4Pjo7PD5mv7atrbKxuLm5zGY7NDEkJD9nvq3Csbjhsr/YPyMhHhwrPuKzrKWk\npqWprr9INCkjJCUxSO2yrauqrqy/6X43Ly8yQUryzM69vr262GtBOkRX1N/q13Ld4+1uPjw4OUde\ny8C/vbWzusLQW0dUXEs8MS8yO1nx39zPu7OtrrK9bVNAOj40Nj5Jecm1tru/z+Hdd0U8Nzs9TGJu\nxsvCusLKY0tOSU5XX/de0r7EvcTWZUk/NzQ2Plrmz8fJwLu5vMK90VJOS0xIREpHUu9lemZTW09R\nZmzh68u5vLe/zNBr31dEQzs6Oz5KT2fezbu4t7fEy9H9ZUM+ODA7P0RiZM3Cwru6t7/Zz9VnUEVN\nXlZQPUdUVnFTXPJ949Lfv7jDydLJz2tPP0JDRlVOTkhUdu3IycrN1tHOwNBPUkdEadfwXW1wWf3o\nXF5PWt/k6+jMwMXDx/Z4VklHP0JBPlLUwru8x8rOz3VLQDhCR0Ncc9nMxMDIxtLb92Dc4W9IP0xS\nfOHr2dfMyd/uW0pPUllXZ+JqYNrj5u18zvZb5WVjat3Kzs3HzNJcRVNhT0c+P1Nt7ePg8+DDwMzM\nz2Jpau7WV1RUWPdy199eV1pjZl1TWHH459DFzdnT3m5eW1NGXFpMam3oz8rP08fP2NXqVUhFRkt6\n+VteXNrL03h+6vvW1cjE1l9Ra3J3XVFLSWVxa2R7al7Tz9PO0NjT2mVTTlJMTVRbanjt3c7Cy9j4\nadXddFxHTWTl2+je4O3lfVZaTkVW/NvP3d3Sx8zl2HVUV11lTkxgal5j69/P597ZfOL0+21RUGl/\nfHFZ49zn2Nfc3eLg1t5qT1lrW19fYPrj3+Pv/lZNZmjp2VBq0+7S3OLOZ25pW9z4Wmhqetx2dNzY\n+1t9b+nYZE9ibd/1TmlbVtx/0sbd3dvjzPRcW1heSEtg393w5ubZ3OH06m1WXktX3vfb0/Xt4W/m\n7uVfTm9tZG54aW7p6uh+cG/Yyuxwet/pW35a3c7vWVXW3/VcWlxcZEde5fnX3efXzMzcUmh6e3RX\nVV5+3vnm0O1fWO/W3u9aT0te7u9w39pZ+NvKy+9eTF/veGdmX+LM0N/42t9kXkxMT1lr/Pbf5uP6\n6s3I8U9MWuPdY2xcac3Q3d19ZXt4ZWpRU3vyZFRb5dfr3tbp39/m4+3b6ntfZGV+7O/+Uk9X8OH3\naU5r1dja92lfZvnayc7/Zllt8GNu/X1WTnXO2nnd42tqZ+Tja1ZRbObX0flZaX7r3fZhbnzv/eTZ\n9G1z6dz0X2fv7l5TXWX+62pxeuzc5+bn2tzzZl5aU2Tq7Ol8aHffz83XZ1JWa21gW1heZvff3tfR\n0tri4/Z7b2xeY2tiYG/m4NfX72ZcXlxYVlphWVpx5tzv++Xc1tn5a/Dq7V9m8u/e6+3qeGdt8eJn\nQjg6Y7appqu5zdHJz1MzJyIhJCo1Xrqsqquusbe+0046Mi8vNUF21MvHw767u8DN/FdMSUZBPjs5\nMzJbrZ2Ym6i3vbexyy4cFhUZHiUuS72spqeopqKjruUzKywvNTc7Q1vOuq+srLTHXUU/PDkzLzA2\nQ2PRxMDBwcHJ3cyvoJucqtpHT9v+LhwVFBsoOk1kyLWsqKqsra+37DguLzxOU01T3b2wq6qtts1P\nOS8tKykrLjdI372xrKuutcH9OzNLtaGdqcpd07Ku8yUXFBolMDIxOG61qaeoqaquvko4QuHF5zsy\nPcqtqrDD6FlVTT0yLS0zQFZtbe3Ht6+xu83tbEQvLmComZmpYEDSrK06GRASHjU8LSk2uJ6anKKr\nr7jcQDg5OzQpJS1jrqWnr7Owr7pRLigoLTEyMTZE0bOrqq65wcXNWzQiHi+umZioQj2znJq7HBAS\nHi8tHx4ttZuWmqCor7fOSDAkGxgdMbqqrrmtnZWXqUIoKC8vKSIgJzjkuK6wur65srPKPCsqLi8q\nMrqelpyvtJ+Xms8YDhIdIx0XGz2lmJedpamtud04JRsYGirCpKCprKCYl6FbJiEqMi4jHR8vx6mp\nt/Zmv62yXS4qN2J2PzQvLD6nlI+XscikmJ83EAsRHR4ZFyK8mpOUnKu/w7q/MhgPFzippsHHoJGP\nm8Q6OjAjHR4nKygs36qlr8jAtL0/LjRQWjs4UMvPWDwvOKqVkpu1vZ6XqCYRDhUaFhYdNLedlpKX\nqcnGuU8eEhQqzbu/uKGVlJyxXz46LSAcHiteubq/w7y0vGE0LS00PEZW7cu+t7q9y1cuKrCSlKls\nspWUxhkQEhQVFxsjM76Xj5SgsKuqYR4XGSIsOe6vn5uZmZ+w6j81JhwdKlPN6FzMubTEPy0rN0VM\nV8myrrW4srjyODI5Lx4smpKjuqmRk+0aFhoYFBQWGkWgl5ignJae5iYdHR8iKzZQr52Yn66mnq8v\nHyQoKCcvP/6vqrNkb9lAKyv5xVE757Ctr7rE61tcQDIqIyqgk6y1pJaU8SUfHBoYFBMaQ5+lq5uR\nk6ZUOjUkHx4cKVmurbmnnJuiulhGSjYnHiNL2/I8Tre66DhA28pANNmsqcpFyK2vai8sNUo3HRqx\nj6GypZqPqVQ3HRwWDw8ZPH5or5GMlqi0sscoGRUWIC4sRaiWk5ydl5q7Kh8fHBgeIC3Qr6y/t6el\nuPvnTUdDPjo9UuPkzsxYPDY+TjUp45WfvZeXkqQsfioeEQoPFC0+Ma2UjZSfn6a8KxcZHBoeJj+m\nmpqbl5acuzIuLh8TFiQ5PDq+pqCqtq+xvUEpLkFGNzViv73GaV1PPk1DOzS5kqqzkpybzSZWIhkN\nDx4aLkrYnpWXpKKbszYlHiYlHCRLwbGon5yaoLGuuzYiISgkICY0W3vfs6ivwMy2veVNOTc6Oz9G\nWV5R38/Zzr63xkXOlqQsoafBxChUMigdFj0pIjVGsqqls62gtMvJxT80MSxRPzFeu7DAtK2xp89D\nyFs4LTM1Ky03Td9eWLaxusK7td5r6dvONy8/Q0k6Snh7v8vNzKGfL6ac1bg900ojIxo7Khkw2dNm\nsqepprO7qa0/ND4rKy8uPmnbxK2mr66irPbuVT8uIyUvMicu4bu7taysrLHCwss/MzU1LCoyNU3b\n4Lu4rq3EppxCXp/GdT9HViwyJDc+HipGXz3hsMOvrLi1sr1qbTs2Xz43QfXFx729t6+zvk/f1T8x\nLz42NTM+3mTZzr+6trnG09jeQzo4NEFJRUvkv728ucrrpqcrsaJIzd+xPy5EJUAmHzU8Ly24xF2w\nq6y8r7C1uT7t2zs2Ouk+R8pgzszGvcLF0db+RUdELiw4RT8/2r64sba2tcxt+FU2Nkk4N1Rk6NTC\nt8Rcv584NJ1jdtKwsyy3REU3IzUnKyJJdS3Mr6i6q5+wsMi+wTs8OT8zNFs9Pu68xNG/xr7b3Xln\nVj9iPj1BU08+ztXOv8GyvNTcXnJFQEY6QUxf9lNcZsqvTMuizrexq7o9tEU0LCsuIyckOD89zbSu\ns6WnsrG1v1hCSDk7O0RSSWnj4e7tw/JOzcF6UcXXUl54VUNcV1xQS+TYcvDGxe/IxXVrTkM/QUg7\nPlC+ydansLOsqa5Qv209LSkvJSomNTo339O8x7KqurG1s7fIvuReTkBJOzg+QD1BVFtazsXWurrE\nv8XN6V1KOz9DOUFNbOTXwMvJzeDSXl1YQk1OW0VDt9BEq66+v6+vTL7VQDg6PSkvKjc6Mk5lym+4\nrb+wr7G7w7vkZVBCRzw4PDw9SmNdV8rGzb21ucPGxuB8VD9EPj4+RlVL8dr3+tvPblZqamZ732RM\ndqzaL6evX92srTK4vE09Q0wqNCkzNiw5WNBHvay6ta6sv8O31GlATE4+PUJeQUFh5k1fzm7f0b7J\nz7vGxNXS1U1EQkw8O0pVR0fUzmRl1s9u9879fXxSOOKxRVqwrMvLpbrf1MRRNTovNSorMT88M9nC\nzM60rsG6tbm+y8/9UktIREE/RUxMW1/Zy9rPzcrZ6+9cY19bWv3lW+zQ2VnZw9Xn185jYW9WSVRJ\nQVFQSUVdaFzm4s/W2dXZ01dZwMXc5cG2wL6/v8bU3UtAPTswMC80OjxGRu7OyMK7tru9vcPOy8/U\nfvLoXWNUVEtLUkhJTE9JSl1lWnzJztbIw8bIys7S09jkfl1YVExJTU5NT1dYWPbrb+fN1/vSy9re\n49jf+vxod2JYYk1LUGFeTWF8YWzp6ODUzsvNzdHKydHM2Nz8bFVFT0tHRktLRk5ac27s0tPNy8jP\n2tng5e775m9lc3FkT1hbUGRlZF9qbWDk4eTb1NTRzczLzNnr5npdUE5HSlpPTlRfb3Dc4Ord4Nbh\n3u12f3nvafJ4dO/183Li5O30eej4fXxlaF9hW1NqX15u39nmz9bY3d/bdn5vcm1hbF9pe3V6fmZq\n3/Vt8ut4bfNyYGlnaXdocOnh5erg3eLm5N/d++33cHRneWBaZVpXV1tfXXb959bU29nPztTg7PR+\nb1xcWFZXWVZg1mpY7tbT79h7btzsVVLY6+1p39jm2GR//PNaUWNZWlteWGzvc/jay87RztHR1N72\nYmddTExOTU9XW2X07H7g3djX2trh2t/u++3saWVs9vRvYnpvYWRlaV5raWh+9+3f3eXf3N3f3dv9\neHh8X1heV15kbGf86Xvt6Obn6H9t6+P8b/Dg4vj06Orv6fxxeHJqXFNNX2BbXHLd3Nnc2NPS3Xn1\n+W9YVmNxfXRvcPnx8Hhxf251YV/43t3p1s/Q2OrxdmRUT1RaXVxgbfvq4+He2Nnl7PtuYnZ5Z3L9\n+HBu/nRtd3F5evX47+zs5+nn8O7v6vt47XZpZ2VlcPV3dPbn7PH4ev50c2pkcHFz+ezm5d3o5uV8\neGhsX15sYGBg5Nzu5+Tt9Onf8Ghma3/0bnz77+f7dW9qaGBfZ3zm9nj64d3a5vPj63deaW5v/Wtt\nYnRzb25davbm8una29bW3uXrcWNiXVheamtoburh2Nvs8Hv4eGteXG9zdnb+7vf/cmtt7/jy5+bf\n6ODf/G17ZlxdV1FNTXPBw8bNxb/M2EpFPD9IQEdL08q/vsbL6/hOS0JDUGHf3MzIxsja9VlSS0lK\nTWLp1NPa3trZdFtSVWjt1tfXz8nIz+peXFxYTk5NVWV+fm7v5tznZ2FofPLt9e3j297f4fB7cG9f\nX1phbGvn5OXt6XNqbGdnXWd57t/XztTZ3N7z+2hWWFdjYGvu6u/u5u/8Xl9kZWR/4+bZ2ehoc+rs\n/WhnaOzd5H5udfH1WlBOUmTv727m2Nnd6PJpa3/s82hz+dfN2+P07NLL6FFNTEtFSOnDvb2+x83q\nUjwwLzQ+Ut3Hvbi0uMdtQUFASlRVcNzDwsfQ6mFXVk1QU1VZZfX2/eDn49jc33Rp9+rd8OvSz8zO\nz9d5SzQ4vbrDxFDd2sjaMC8qN2Fg1W7Ux7OuxlU4Nj7qzm/Wwrext8lNQT4/SUJCT/LMzM96XWFY\nWlxSS1jcycTJ3m/l083M3Ozdz8nYWkM3QLm0ushFW0pYSSwrKDvawba6vL62ud0/Ly0zZce+t7iv\nrLDCSTMtMD1ETfnWw7q+0VdCOz5ISk5m58zCxsrd7ud+4Wle3s++vMhzT1BjubvV9EZZTEs/LCwu\nP+fIvsfGvbW5z0c2Nj1/1tTPx7GrrLdyPTU5PkA/PkzhxMHQWEJHT1dQTExsyLy6wcvZfGddZ1FM\n7M3GxsbO4V5ARcG1vL9TQkBASzAsKi5RyrS0vb+2srvmOCwrPOzJvcrRvq+rsMtCNjlGTEY5N0fu\nwb/RW0haeOnwVE5c2MS/xdpmWWTt5lxISlzez8zKz87YZ8Sus7rTQTwyODUsLy04Y8KwsLe8vcTX\nSzYtLj9wv7e5trOxtbvMTDw6PD5DQD9GTtzMzOJaWFLv19nqY3LpzsrR5mtlaHFlYE5FUe/OycPD\nyMPMxLa9x+BJQDg6Pjk5NjY8QXPJxb+/v8HEwc5wUkU+P0VU+8y6trKwtbvVVkA2MzAyNz5R+dfK\nxcrM0NjfeGJVXffb0trd6Hzs29rd4Or/e+3t7XFbUExJRVPf2MnCv73GyNFpUERAOjY6PUZr0MbI\nztfl3d/qfmf22cvJzdDf6/RxZVVVXGrv4Nze5+PrXk1EQ0lSZ3h46d7c2NfY3NfS19fa5/9valZL\nSExVau3g3d7TztTjalhRVWX83NTTzsrHzdTa4u1wXVNOSUVCQD9BRUhPauXW087NzcjFxcjNz9TU\n0dPX3vBsV09MSkdGS05WXmhmaHX07evo9u/azcjIy87R1tznbFlPTExLTVNVXGRscPzi3dXQz9PZ\n1dHOz8/T621eWVBMSUM/PkFJUVprfuLVzszNzMzKyMjIzM3M0NfibFRLSklHRkVHS09YW1tja+7d\n1c7Lx8fIyczQ1eH8amJcWVhYWVtgXVhUUVRo6eDh3tjV0c/R2+jj8nJpY2ZdX15bVlJUT05PUldd\ncOzZzsvIyMjIyMjLzdHnaldSTktKSElLTldeaHz7Zl5jcPTg2tjSzcjGxsrU5PZwYltSTk5RVlRW\nWVhbX277f+zh3dTLxcXIy9Hd6XxhVU5OUlNVVFFQVVlaVlRYZezZ0M/R0dHPzdHV2dvX1tjf92VU\nTkxISEdITFRif9/X1tjb3d/f397b2NTQ0NXc4PNpWlFOTUxOT1RZXWZ28ere0s3LysvMz9bgfV9X\nU1BNS0xOVV1dW1pfbnzv49vY1dLQz8/Pz9DU2+fu+nlqXldSUU9OS0tMUVpld+rX0dDQzs/X293g\n6vbv6ufm6flyaF9aU05NT1NYX2777N/VzsvLzNHb4uTq/mxhXFpXUUxKTE5VXGR07d/Y09LU3NvZ\n1dDS1dja3+l8ZltUUFFUUlNXWl9iZWtx/fL7793SzMvO0dbb6P5nXlxdYGBeXFpdZm1wa2dndfLi\n2dfW1tXW3OPvfG9vamVgXFtbX2BfXVpcYW1wc3L/7+Xc29nY19jY1tfb5/l6cmdlYFxaWFhYXGRn\nbXd8+/Pr5OHe3d7e3tzg6vB8bmlnZGVmbG9vcGpkYF9iaXzr5uTf2tbU1dre5fNsXl1aV1hZW1xe\nXl1hY2hse/Do39rT09XX1tbZ2dzh5OXn921fXFdTVFRVWFxdYGv76uXj6u/s7O3r5+De4ebq7/P0\n9fr49u/v/m9tbWhobXNybnh9dW1oZGRuamJmb/fr5er19vbu6OPn6ejl39/s28/g9m9XeNz4Y15c\naV9ZVlFOTlRec/vm393Qz9PX29/q7f9sbnf9+t3Q1NPc4+FxalxTU05QT09WV1lmcWdx6+Pc0s/O\nzc/S2eL3dGtcWlhWVlVaX210bXRyf/n/e2/56+Xh3dfc4/ViXVpeXVA/T7i0qqOvsMxxdjU2Jh4f\nHio+07OtrKqrra+/5TosLCcuPVfGt66uqqqtsMNWNS4rKy4zPEZuz8S5vL3B0d5dWk5KT01qfejV\n7ex5ZWhdVzw5sqWkmqGwxjo8JyQgFxkbI1avn5ubnqa0x0MuJx8fIixevKadnZ2lrrxOOSkjJCUv\nQeC+vL7K0/pmVUpMSFZ42cjLxcrOz3xWRD49P09vyddOsJ2emZu1SiUeGxkfGxwpM7WelpWaosIy\nJyAeICMqPNWonpqYnajLOS0nKCoqMUjOta+xzEY6MDdGS3DlzcO+srjAx/pVQTw9NjpEWOLPw1pa\nn5mblahOJxodFxwfGSk+t5yXlZypxS0iHhsdJDPHqp2Zm56rwlMuKSUmLTveua6stctXOTAwLjI8\nUsW4s7rCyu7h0uVNOjU2P2XT2+XZSkqflJiUpEkqGx8ZGR0WJU2vmZeYorZ8LSMfGh0oSKmdmJmh\nrus/NiwqJixCvqmmp7XoPzY0LCknKDrUrqiuv2x7yru5yT8xMjpl2nNBP0w44pmTlZWzQCccHxcb\nGhpGvaCXm6a+VTgqIx4bKmOql5ecrGI5Ki8uMkVBuqifn63PLyoqLTIrKCk7yqymrsdASOK+uN5S\nPEPb1MhrPC83SDSrkpeUndxPICIdFhsWJ8GunZ6tv+9aRiojHCPNq5eWobM6NTU2PC9C8Liin6W7\nPCstNT04LScnPcSvq7z4SnG6ublqPEVYvr/2PC0rM+5XuZWVlpq66igdHRUbGyPBrqSgr7/iS0Yq\nISAnwqecmai6SDQ+OTQ0Xb2soaCs0UEuNDUyMCgsLEDEw7jGztDivs7rZE/Z0cfDdkw7Mjs4MqmT\nk5Sl2U8mKh4YGRYru6qgqsfuYF9BKB8fOaqemJ2120xZSzgrJU6xpJ+ovU9LRFVAKCMkMkHcylHZ\nx7e0vdBAPkzZvsfqSktKTE5CNC6mkpSWrtljLjUfGBgYOLOtrcZoy7/IOR8dItyhoKCvxLy5tFIr\nIym3o6W477+6sdE8KyInL0I2NTpKvrevw9zO7Mp79371x254VDk9RTs/o5WZnbK5vEAxHBcZHU68\n2tTdv62v4ikdITK5qre4t6yjq783Jy1XrrG/0c60rrhdOTAwLy8sKjVE1L/Fx8m9t8btSFHP0MxV\nQEU8U+lpPcqZl52ozL3hNicaGR0u0GtE0rqtrMwxIig1375d2rOmoKe/QzU9dcnFYe26sa7CUT8/\nQzUtKSkxT37b0MjCx73H3N/42dLzTD9ARk9TRD2ul5uhr7Ss0D0hGx0hMDwuNsmup7FuMis5Qkc7\nONiro6awydbc2O5kUlHJt7i8zmzyUj8zLS0sND5N69jX1MzBwtfU083K5l1NS1ZUTUhA1KOepa62\nrbbdNyUjJCovLCs9w7O1xGlCSlpLPj1evK+wusjTyb/A21n6w7u9y3BXUVdKOjU1PEJKXVdd6vZr\n9+zs1cfGzdxjXnJeUExLWuTt5buvtrivt87Lz1NIRD4/TUo+Qj03PD02MztL37u4vr+/z+faYlr1\n1MO6sri7ucLS/E1ARUE5OTw+PkVBPUlZd9TN1tHLzcjG1PlufHZiTvm8v7usrbi4udNUSTkxNTcz\nOT43OkM9PEFDTdK8vry6w8rKz3Zv6uTFu7u8u77HytthT09IQT45OTo5OT1IZ93Z1tPKyszIz93o\n6uBhSj5Fx7q+ta2vsK656F9LPjs1LSwzNTM5Ojc9T/DOvLu+u7zF2fl7++HQw7q4u7u7wMjRfE5L\nSUI8ODUyNDc6P0lf39TMxMDAv72+yM7P4FJDPz9cycW8sa+2ub3da3RNPTczMDIzMDM8P0rq0s7G\nu7i8wdZyZ3RoftfLvr2/wLy7wM74WVFORTs0MzU5PkJIUF/izsnJysbBvMDN2XpZUFROUWFo3L68\nwb6+ztrK12bm8VFHPTQwNTY2PkpQ/dbRy8HAycfM7e3X0s3Mz8zCwcjLz+b26WNLQj48QEU/QEVL\nT1ZkZnnazcK/wcPHz9zb3e7t4d7d2dzsb1lPU1NTWV1cXF9aWGVqfNjPz9HS1+n3a1dVUE9OTVVd\nbX343NPR1NPT2drU3Pl8/+zq68PnRNVNRH48Sl9L6u9v2e7r2OPR4nXT0dfNz/Hnwtd5zE9PakFJ\nSEBEQlBlWfb75cfO2tXUzc3L1O3V3+rbfPZvcnpedmlZZF5ZT0lfVllpTO/fbNneaep92s7xyfPv\n03TM4GB5YvhaVuxWZ95l2/Tf0vfVUlPdTF7ZY1Ni5u/33OlY49NY5ttO49Ff0FNTzEvT0Ey/51S+\nUFjMP9hxP8xIb8dIcGNX7XDZUfn+TsxV0eJ6wFnKz1Pt2tjka3HZaNfgV1hhSGJOR2xN4FBgxUfQ\n5uzHTr1Q+MBAtkvixTi0RFi7P97ZR971WONM2dU719M/2NND9sVXYshS9+5vyTrB5j63QFvDPMbf\nSr5ZYLxL08dT1PJY1EhLy0lT3VVL+chAdb8/XMVaW9zF6EO4d0C820HBwTnOvz/2zk1OWcU/QLc2\nT7tDX9zNQH+6Qma8aEjAz0TQ71/4XMtZYrhFarY71740xfs/yznMyi652S+sQzytM8THK6pJMqYt\nQ6UlxrApquE0qjxMrCnEqh+tvhyfMy6jH6vCI54yNZ8m2qojr84rpzBrsSmvxSysVkCyPtfEPsRa\nScVrOcfkM7hHQbEwvtgyqjReryy31SuqVDy3QNG+ObdgPKsxTa824NY92W1K0kdcrzB6tDW75jy2\nTFLGQMjLNrxUU7k8W7U5x846tkLa1DO1TkLHU9zoc1bg11j+/t5dXM5PVdLoPb/UR8Va3vFv1/To\netrr6G10f1tfXU732Ftj22Rm3lv7adRD7r9H289jzfF+8FK/WT+80zvL3D7MzkVr/stPRbpGTbc7\n2cg8yEZewDa/ZkG2RNnGUMZCzr5AyfpVvjx7yjvAT0XCS93eQLvfS9RN5fFK3lTfxz3mwl9mZ8Ze\nV75D28RD1vRiy1F4ZePZRvPPTV/QXV3HdD/K0ktg6Nw/1MA6x9RG693KRNm+SejOX1XZ00Jn1+NR\nZ+bv4+ddV9TfS+fuYM9M4mJRwz7Yxkq8UfPDUctH3MM3z9o8ye9Az3Ry4UzAWU+8Q1zIV1999/pv\n6s5afM5H1cc7y81K1HxkaNxwRXnR8GHSa2C8TV/GUljt5UXrzlhN3sI+6L1Gatrn5lPR7k3N9U7L\n/mj5Td7oXPVf3Nz+XVXP8099Zt1t6GJ50ehmZO7mzVxL1s1UTdPoTtziUlnA5zzEzk3d+39e3889\n2cI//dRU+ObYV2vHUVvLS3rYZWxx2WFq01hp3l3TfWLYXtFpWs1P2dpKz2Fj/lP0YW3dVdrSV9j3\n2M9bYnZ49Pv0WEvJ8UjX3t9efttf3NhXWW7nVGTjb9Pgbf3vzGBL1mB57FFyaOzfSm7TXe1k8NRy\n2Nzfz9ba6ePT53draV1VZUlPZVFXZl/y9Ot/Y8/W+drq6tb76n773l5tZmJaVltcblxaeXrze+7P\n3NPOZ099vMffzsW+v8P4XG1oQDM4NDtAO0peyb/Kwr6+wNRuVFFXSUBKWHvR0s7HwcDP2ehhYU1G\nPkRQTV5p68vHwsjLw83S315aUk9IRE1PVXB22/DQyPN+1dlXQ0r/WE/N3E/Ry9nQ1eZY4dJST2xf\ndN72XPTNb2fkcufoeHpi3txd8OTr2evkbVn2WU10VVFXSfPU28ve0b/HzPRaWk9LRz9FT1vez8rK\nw8PL0nJZTEVKP0JVXNzTzcG/wL/N/nFST0hASU1a3vHezM7N0ux1X1lQSkxQU2Ht9trP0tHV0dv2\n6ux7fm5ib/z0/n15XlxdWFteZWl88u3d3tzd3N7t+XdsfGVpd+HX4t/r5t92W0Q9ZOnt2F3ry76/\n/2hWTWNaREJKX8/ExdnVy9DoXEVCS1JTV2vqzMHCzNba5e90SkZMVuLh5+nu09Dm+lpVVk1SWl/2\n1tDR0dLoXmVWSE1eZe/U1tXJxNDub1FVXldNVF9r1MzW3OlOVszO1f5bY9LH/1xKQkxgdU1dffDC\nvc/xemVnblZDQlFu28jP1crJyNhlTUdQUFhtZenXz8/ra15VYVZVZGXq1s7NzdPf721dVVdaXO/m\n4ejl0trYckE4OVXWxcPTzb68wdxKNzZBTldcWHjDtbW/90E+SVNLQ0ZWzrq4vcvkdvFsS0E+Q1/S\nycrT197m+kxDSEpf4One4NnLzMrVanxobGtYXl1t2M7f6E06UMnCwtVdVdvB21o9MTdI2+La2da7\nsrTKVDk2TvbfZU1S37y9yl4+Q1nT5mBUTHvOy/FQSk3uz87qb2zu0tna53zbz9XsXmBaZe5PTj45\n0La1sMLlcldZOTMtK0Hav7m5wcW3udJHMCw55ci9vM3HvL3QTDgvOWTSytFmVtzJ41xCO0n3y8/d\n6GnNv8LJ+15229nc+GB9XUg5VsHGtcVd+UxaRz40KzxM3bu5xM6+wcvjQzY6SnTAtrm/v8jY30g0\nMTpI3cLK19jW29xkPzxCTHLNytPR0tPMyuVfUU1p3tbXz9f43etPPVG/w7i+T1o/SlY8Oy87XOO6\nusvZy8/cZT83Ol/Pua+3uMPQ5l5INzpBVs/F02hXTU9fXk1LT1nYx8vV5d7t59z8e2hk2tTQy/hd\nVVT58s3iOESxs6+tRT41NVI1NyssXMqrp7fP3WpbWDsuLkvMs6ixvMhk69n9RDxBStzB2FNLQE/Y\n2P9JQEFTzMnM1Gp70sTF0W1JWGhfZE1OZe3Mw8bI5djSTDhTtsK2uUVTPlJVNjYqMVXMtLXM39HR\nw9xHNDJS27axwczTy8nOWD0+SPfYzP5PUUxy3t5kTUtMY29oXmLr18K/xtNdT1ldX21n7dDM1OfO\n3W1jSUg1N7OorKXASEk2QS0mJSE7wK2kq7q/ydBwOCokLlq6p6q1usLBy/MzJyw9yLG0zlxTY8/U\nUTs3PVjLz2VadM27tLvgTD9CTVhYVVdc3MXCyMncY1lEOz07MMKeo52k3VAtLiceIx8t0K+hn6y2\nw15GLScgJkTJpZ+kqLbFX0IvIyQvWrSoq7jOZFtdTToxMDZby8TI0MzBubjNTjw4P1nUzuRrcc7F\nyN9LPkxiV10+NLSeoZyvPzYlLiciJiE6uKadobbG+0tGLiggJ0vDpKGprrzJ008zJSMy766mq7PU\n9fpYRy8qKzRsw73Dy8m9uLzgQTUwO1DVydXM0crAy9RbWVA8QzY8p6Kln8daPy82HyAfH060p5+n\ns7jD2D0qIx8tTrynq6yutbXKUy4lJixeua2vur/Gvc1YNSstNGDTyc7cw7qyuNw9Li81RvvY0tbA\nube82ko+Pz0/NjOrn6KZrOg/KS0dHx8bN7yonp6qucd7OSknHiZHv6ajpKq0uc1PMSgiKDvDrKus\nvsfB5ng4KykrP/nFu8O+urW1yUUwLDA+88XEyczGvb/NTzw8OjkuRp6fnJe+zjcqKhkfGBtJuqCa\nnaq1vvMvJx8aKES2oaCgq7W20EoxJyMqOtCtq6y8xcbl3jwtKCk5V7+6v8K+tbG5XzUrKjZWy8G/\nwcS8u8ZXQjc0PkdAR6aeopqvdzgjJxwgIh9DwKmdnqayylYuJiYeKkHIp6KfqLK5YEA2KyYsN1G1\npKq0uuleWkEuJyovRr23uLO+vLe/bTYuKjB5y768xsS+ucZTQDUuNzJFoJ+embjCQS0sGh8aHELL\npZydpa62fi8nHxwmO8moo6GprLnfYjQsJyo1da+qqbbCymnoPC8nJjRJvri5u8e2s7nZPCwpMUrO\nxcDS3r65uc1eOi84PTjJn6efn8vJNi8jGyMaJ3K/qJ6fqau5SisnHh4yQ7ynoqKrrMpERi4oLDA/\n1Lmqqq2x1XY9MS8pLjJOyL2wtrq9yOlJOjAuOGDKurjBxsrBy1dLNjI2L7udoJqh0+AxMSMbHhYk\nVbyfnJ6qrbdHLyccHSxCt6Wgo6qrvvhCLSkqLzzMrqurtsTsaVE2LykrOFi+ubO6yLq8zF48Liw1\nTNO+usbHvr2+cUg2Lzk6NrudoZqexNstLB8bIRkoS76jnJ6nq78+KyYdHS07t6Oen6WqzVI9Kyco\nLTjKqqissMhZ/0IzLCgrMtS5sq29wb7Bz0w5Kys+Z8WzusPGxL3Qe0UuLzUuXaCenZuy0z0wJhsf\nGBw40qacm6SrsVYyKR4bIzHjqJ+eoqa32kwyJyUqMOO0r6qssb7RUjAsJiUuRM29sLW7sbfD60Qu\nLDM9Wse8v7q8vb7dWzwxMywpv5+glp65yDU4Hx0bEh8xwJ+Ym6KktVMyJRkaIi68op2eoae6yEcq\nHx8pNcSqr6+rsrq3TiwkICUw07+3rre3rrLURjUpLEBRdsXFybq0uMH9QTQzOTc0P6ifnZarv0Ip\nKBwgGhorRKybmJyksGowKR4ZHylTqJybnqW12EwuIR0kLFWrqKaqssXV6DUrJSQtVLqzrrK7ubrG\nUzksKzhQ1cPCyMq9vcXjSjozNzk2M7Ken5WfuM8qKh0dHBYmOLecl5qhq885Kh8XGiI0rp2Zm5+p\nv943IhwfKECyp6Gnq7rX5zAoISAqPryzr6+5uLm97TwuKi9F7crBx8O6trjMTTovMTo4L82goJeZ\nr7syKR4ZHBUeNcidlpeeqLw9KyAYFx8svJ6amZ2jtd88JBwcJTO9pqerqKu6uEUnHx4lMMe6tq62\ntLK07TszKi5GXnTPx8O1r7PAWDouLjcwLrWgn5Sdrr4wLBwbGRIfLr6clpedo74/Kx4WGB8st56a\nmZyjtdI1IhwcJDPDqKOlp67CzTspJB8nNNG2sKy1tba+1EAzKyw7Te7FycG6uLO80U00MC8uKfqf\no5aYrq83MB8ZHBEcLHSfmJacoK5XLyEXFR0m0aKamJufrr9AJR0aHyvsrqegpaexwkgoIx0jLk65\ns6mvr7DCykY3LSw5P2nOy7+8t7vB6EY9ODg6LTmno5uUqK5OLioaHhYWJjSrmpeaoKzYNCgcFhsg\nPKyemJqcpLXWLyEcHSY4wqukoqSsuegvJx4fJzPNuK2ssK+7wOs9MyswPU3Lxr66ubi+y1I8NC84\nOS/ro6OZl6mwPCwhGR4VGys9ppqWmaCrTS0kGhkdJUitnpqanKe5XCsiHR8pNcavqKGlqrlWMSMh\nIik/07evra+1uclXPDIuN0Rc1MzBv7u2vsxaOjI2Pzk3v6unmp2ptj8vHx4eFx4oPqyemZueqWM2\nJhwdHiY5waaem5uirvcyKCElJy1K2q2mpKOzzDwrKSUrL0LbvrCvr7XB30k+Oz4/R01d08S6uL7O\nY0k+Qkg5Mme3rp6eqLBZPSklJxwfJS3hrp+en6S7cDstKSkqLTvzu6ylpay42Es+PDs4Oj9P1ry4\nvMn0TEQ/PkJKVXXa0MvFydTc+3RcW1ZNXWDdysXJ19ldWFpJSUNESlbwxLi3sbjCx3tcTEFAPD9B\nP0dLSVBdc9fRycjDvsvI1WRZR0lFUXp1y8PFwszPy9bhaUxIPT9FP0lNVmvz0NHKxcjFztl6T05P\nWfXg8/xxceLa2fVtWkta+t7R0eFWUuzq1cTSz8zOxc3OYT49NTc+QEhMXXLpycbHx83Rz9DW3tvu\na31mXnzt1svHyuVrU0dHQ0E/RU9f1srGyNLlYlZSV2P/2s/HwcDD0PRTRTw6P0dT69DGwr/D13hT\nTFBcaffl693MxMTN6FZKTkxHR0NASE9v39rP4djN087Z5W1t2s/BvcXQ5WVWT0tDPj9ETn3WzMzV\n2HJaU0hOS1Pq08S/u7vCyeVZTUZESE1PWenU19PY/VtOTk9b5+rm1NrJxMfJ535fVmZWUk5LV2Jq\nc1pRT09fXGN7ZdzLwry/v8bV2vNnWkpIS1Roeun4Z1lRVVNXV1VdXP/VzMXIyM/l3+zy7e31anX+\n7OH8WUxFREhOVmNn4czMwcLJyOTf5G3ea19uVlxkWVxVTE9OTlhbZn7t3NLV0tDb297o193j2t7V\n19ba9F5MR0FESkxWVl3y2szMzdH2bnd95t7c3t/d2tPT3HJXUk5NUU9RWFdo3dbW1t3m4N/d39zW\n29PV8m1dU1BOS0lNVlz/3uLh63B0bW14fefk3NHOy8zNz9Tb9WNZU09PT1JVWWd1b2ldV1dg79rQ\nz9bY2djX3eXy/Pj47vhwZl5eXFhcX15bYWZh/N7Xz8zKyc3P3X1eT0xMTVFXYG9vb3BuZltYV1Zj\n+uLW0s7MzM3T2eZ6c25+83p3d25z+H5iUkxLT1p27e3n5+Td2Nnm8XVz6+Tf4e7+eu3x+XxsbHn1\ndXBsam//7erp7XtpX1tbXWZre+/t7OLg7XNfV1pq9ejd2tza19fc4ut7aWhv++rt+n1sZF9dXFdW\nWl9s/fn39PX26ejt8/j38Oro6Orz9e3h3d3f5+zr7fl1bG1nZGZncnFqaV1ZXXtkWnxpdd3t4t5q\n0tNS8XNj2Wrs1vDb3fnc9V/zXGXhZGZwXfl0Z/pfbm1m8/fs6fb25ubi7/3yb+/pfHdqY/zg5N7b\n4tjfeHB5e1lRUVZhYF9kd2xt3WFu6Wnqfv3m2eL51d3e1N3s2ex2blxuWV7R2vNuTFVdRUhpVkx9\nY+fFzc/KyMrU3FRa+09hUVti7NlTzcXmxtLmzdj2TVpYQ0xEPkxaRUv+9dHJztXCxOnZ2ebg3nxd\n6NVmVt/7Y3prVVTuTkloVlxeW/jV4d/p4sp12c5qzPtp3GTaZk9eYl5T18/Xv8PDvcLMYltKOTcy\nMTU5O0Bh1cu9ubi2uMDIzNx4WVBJSVBw22HoysbD0Oj69lhBPT4/Pj9ESejW28bGu77Ev9PO6FBS\nUU0/RUtKXVFAyKe5062zrK7xR0J8LyImJiwtLTBhsLS4r6qlp7TPy9NNMyswNj08Otq+t662sa6w\nvFZFOzEsJygwOj1L1rmwra+yr7LDZ0VBPDQvMT1GUWnnxty6mqTCrbGfty89KjUiGyEaKT41U8qh\nnaepqqGo1z41MC0sJyk25LvFsqilp7mzsn0/LiwpJSgpMDz9ure0rKiqsrvE7UM2MS8uLzpHVnvB\nsra3w9KknbZrTbCpPCkkLi8fJB8oRd60v7Shn6K2vrvQQSspKCs0PU7gtqiipK+0ucPUOysoKC4t\nKi9Lwbq8uLCsr7vF111NOzUxNT5DUO3Ju766s7S76k85Q7W+Uz1IrazFPDFIPDgsKC4vTsC4tr21\nq6u5X0Q+Qjo0Q1F8y76vr7a8w9NMaFU6Ly07TkU6ReDCwc6/vcTCys38REVTWEdHa+LT1c++wMve\n3cvSUTYxOD02MV6wqKy8uq2qt1M1LionJy02QFXYtaustL+/vMZkQD8/Pj9Hc/tu4dvLv77C0efw\n61hUWEtHP0pYXHNSX+HWz9LQ1MnHzcrW7PdoTUhGQ0tLTGL13MrJzuHaysnObUtLTk9HSVx6293U\ny8nIycfLzd1dTEE/REhKTVhmeurg0tPX09nS3vj9ZXzv6etmXk9Uc2Bq/OrQy9Tx+Oj0X1RPUlVM\nV3/gzs3NzsvFytxyYFpbTlFWVmBfbvvv82d85efjaWfl6vBaWtjf+nxt9vLvaFlbZ/X3eGt86ePY\n1uXu4dnT3tfkZ/z26n1eVFVVTlJTVlxcaPjj4OPu08zb3+7t2+lmee989/ViXm137HRqY2V4aOzk\n/HZt4+Xf6WL/7u71Xmr3cfN8fm9u5t/h6OTr7d3ucVtVZFpXWl3r3tXX39rd5f9dWl1WVFtfe/jc\n2eTV19zn7eduaVxmfWH65O3n8HpwZP77bF9o63BjcHXt2u/6d/Pd3P5YXV9samZv8d/c3t7Z1+p7\ncWR4X1drV1Bq8Ox8f/r33N/e6Grt2OdoduV3Ym1wcvVqXe/m4tLtbuT/bHBfVFJkbmFw7XjZzOLn\n4tzW8ntfcGhiX05f6XhUXPFx/N/V5Pnb29jd921za1dcXfTd6vzv3uZhZ27sZWv0Yere5HFfY298\n6OBu6+Pn3+vk2fBaampSSk5mX1Vx3+LR4t7O3triaml//XZvbmRj7eDx/Glv2OlhfWx5YWLlf/pu\nW2/e193c6+r6YtztV1FTWP967+L8aG3TxtPpYFv+3uxcTFBfYeHX72Bad9TN21pVaeXN5WhgWeXa\n0t9YYG373t7mZVb64W1obu/uWlh37N5kW/D6X1d81dfd+mT00M3faGFc7fFfe3Nlb3Jv5+vh3Ghl\nX3zpbmZVVW/b2m5VV93Mztv4Zl3w3N3rWlhu7d5+aXZpZnbY2mpcV3jY3ep+YmJ/5dt5XGP+5uxf\nYvnt+O3a6WdofvV2/Pdud/18+ffn7e/o7/pwevpteXlta2z+6u3y+Hfk3fleX2pfXV5iafji3tnf\n+vXvbm5pWl9p/vxnavje2t3l6fh96ObvdnR2b3/2Tzs5Ubusr8de2bevvUMtLTY+PjY0PV3JurW4\nxN9j9c3OXT89Tc+/xuF638nByvZORERPbvpfS0RP9NXgX1dw1MvN2/xnbePU2ltQ0LWutdlR7b29\nXDEpLDlEOjAyQs21sLnFzs7GxNVPPjs/XNLJzNLRxLm5x15FSF3j1d1gT05b7N5mRT5HaOPwUkte\n1cjL5VNNVWX49Gdd9M/IzFM9abSrrslIUrmrvD0oKTvXfS8oLFuxrL1NStu6t8tHNj1d1tDmZ3zK\nvLm7yXdTXvhuV0tJVnn9XE5PUVZTUll92drc493Oy9BxVFFZ+/xmVEtlxLi7x9Pez8PD7ElGT2Bh\nSTo5Q1/f6VVESXfSzdP7XnzVz95sX3HXysrR4fHl0szQ6F5UVmFrWlBc8NnW2+Xm4ebscVpNSEpK\nTFRbXm/j29vj6dzT0Np4W09X4NPW08rIy8nK09rc7V5UTEdHSEpMVVZTWF1m/t7e92x76tzY3ufi\n2dPT3nNm8+Hobl1baejld2Vnde3l6ndmaGzt4PVscurb1Njxa3j2/2ZXVF16e3N0ZWF64d/vdm5v\n/X9rZmx98+5zX2T25+ftfHnk1tbf9P3n3+5eVmT46d3X29zUz9TZ5mtXV1VOSklMU2JjWV1+4t7r\nd3Dy3d7vd3T149nZ3ujs39bT4HVpbHv4aFlaYm56cXT5597f5vZrb+nd2+Ls+/jsdltPT1VaY11Y\nW2J26eLo7Ork4+Ln8P3t4eTn6ebf29bW19zf5XZeVFFQU1VVWF1t8OTh6O3n393e6v96cnbyfmRe\nZ33y63thX3jj6n1nYG3v4enx9+vd29/q8+zp9XZkX2NiY2Rmb3z27/91cXV/8urq8Xd37d/b2drj\ne29vaWhlXFZXX2h1bm94d/jr7PPz6NzX2eh1dfzu5+p1af7g2d73bGz+9WtbVlpkdnVoZGl/9vb3\n+v98cHLz8/fq5+vm5OXo9vt7enZub3V9/vh6e/z/+vLs6ePg5/D6dm1qZWNpdnd5dm5+5t/mcl9f\nYl1WWGXz5+jk39va5v9wb3t+c3nu5ebv+XxtbG/563l77+Xd3ev37Oz0fW1nbWpfWVleX3Z1bW5v\neXpyc3zs5ejf397d6vt+7+Li5Oz66u7y9mleV1poa2RsZ3zv5tre5PLx6+r0aWZocXV5aWz87uT7\neGxhb21kX2fy7eXr8evq7Ovtc/vu/Pzu6+zk4efu/mlq8XdeXVxkdf51YG336+1+dnr25d7k+Pzv\nfH19eXd493767uHp6eTxc15hbXJnY250/vHn6nx66ufw93h6e238fXF9d3tzcHp68vHv7u3j6Pf6\neXf9e3x2aGh3+vX3c/nu7vRybGr0fHRwZm1/8u/q5u3v8ff0+evocW11am169G5iYnf07/Zuce7s\n5+T5fH166312dG5x9+f3eG5v6fdwbv379/P79fXq6fDw9vT6cXZubX1uZG37a2V6ffjr8vfx6ezw\n+Whrd/n9/f3z7v/3+Pf0eHXx5+7z6eHpfnF1cmtgXGNjbHvx8vLm8vHr5urq/2tqX2Rna/P1e+vn\n4+Dq6uTl+P/9dmJdY15kdGxiY/76/eLj5+3v6nz8/O7l7+zo+Xt6eHr69v78+2158f9xfXJscf3u\ncm5ydnp0cHj3++/ycHtv+uvm6/Huff19+vN2//l+9P1yfXn3e3T7aWvo7fPq6/1tce9uZ/X5eGNr\n7nNv+Oru59/t7G12d2dqbnX76+zrdW/yfPLxeH5ncfF8bGVtanHs6/vv9HHw+Hzk3+766uzj5vtt\na3d1a2dtbX52dfJ8bmlrafx8ZXt/fOzt7OLq7Xzj2+nt7vHm525uc3JqYWhlaW5fbXFy/XTn4/b0\n6uXo4Ht2ffnzdHR9c2hv9v3+e3h1d3lyZ/l5++vx9fPu7uzu7H9v+/rp6nhubnf1dm56bHJ++3tp\nefp69fxz+vb54eXp7u3tb2x2aWn+fmh7dF3v7Hhzcn556erv5+Pmeejub35/6/ZvaXXtfvf4cWFj\nb3JmZfPv+fzp5ubzbOzl5eb/fXT4c3JraW1p7en+bHTz7/7273r/fv/v+X9s8ezu83J3ffJsbWhi\na2t2d2x5e3jl3ez8/vv17uX7fO/r7Pju6/n5+Ox+ZmJhZG3vfGdufurrevvw5Onv7nd9amNnan7u\n9/798frt5Pt0f/V3ePB6b3ry83P9f2xocG55+e/p7fP69O/q5O/x8fB9d3h4/nJqYWl6/ezq9H/+\nbW1yen54eHJv+/v08uvq7vT2+Xb07u93Y2hy/vV1X2Vufuzu8nz08vn5dGlpeOjd4+r+eW9td/v2\n7ufi2tnhZkU9QkdZzLuvra6vvndAMi0pKS0wO1zNuLCtrLG5xmhJOzg4OD9KU37bzcjEv8HHzO5i\nUElMSk1PTlJSWl5Q/sG4raaioaevwUAsIRwbGh0mLknBrqeko6Srsr3uRTcvLiwtNkLrva6opaap\ns8xGMSomJyktNkFkyruzr6+vs7rE22lNQj47ODU0NDVLv66lnpuboq7XLh8ZFRUXHitBv6qhnp6f\npK661Eg3LSopKS43TcGto56dn6i6UC0iHh0fJjBH2Ly0sLG1ucLQ7F9bXV1aTkhBPDo1Od+zpp2a\nl5unujggGBMTFBknPsKpoZ2eoqi33EYzLiwsMzpWxLetqqenq6+77j4vKScnKzA9WOTT0Njd9n3i\n1Ma/vb2/xtP5XEg8NTAuN8usnpmXl6C8Ox8XEhEWGyhWuaifnZ2iq7hXNCsmJyozT8uxqaiprbG7\n1OxdRz44NzU2PUdPVU9KQT9KZM26sa6zvctyTERAPTk2NTEuPLagmZOSlaNkKBkREBIaJDTFrqaf\nn5+mt+wvIx8eJjjcraSgoKm1ymJaWHvW8GNHOzg1ODo4OTY1O0rLs6umqbDAYUQ7OT9BREU+OjY0\nN2emmJOSlp2/JRkTERQZJj1ctaiinZ6irUQoHRkeKl+spJ+krrrlTl/qx8DKxs74Xkc+NiwpKi04\nVsGvra2vvMxeRD87PklPf+n8aEg9OTk+6KOTj5KbrjsZERMXHys71sy7qaSen69RIxcWGyu6oJuc\nqLtwSPnDurfFbUw/Tu5uVD0xLi84VtPGxtb0ZldbZW/m3dLEvr/JXj82MDI9UumsmJGTnsE5HxUX\nGyMvNUu+saafpKvPKhwYGiZVr5+do6q5y8XhSz4xN1fLrqmuvkgwMDY/UUg7NzQ9ccu+v9b5Y3HQ\nxcDDzXZGPj8/P0hHTqyWkZWnQioeGB4pMT82Nuq2p6GtzzUfGx4r0amko6attL3jVjwsKjX5rqSl\nqblVOzk3OzgvLi42S+bPydPj2c/KyMfKxMHD00g5ODY1OztMp5SQlq05LScgJikoKyktabGpqrpi\nRDYtLTNPwbGsqKmy2D0yNDxSyLavrK61vt9FNi4tLi8vMjpI4cO7usDM3uLTxsHH1XRIODY7P0dV\nT0+ul5GVqEIuKyQjJiUnKy5GuKmpstVHOi4qLUHMs6ytr7THZkpFT/jQw721r7C89j82MzAvLi8y\nO1LOu7m/3GFf38vIzdbf6XFXTEQ+PUrp5Mqll5aduDgtLCcpKyosLCw5y62rs9BDODMyQ867tbzM\n08zJyszNy9Hv3r+0tb/6SkQ+PDo0MTI4QF7X1d7j3szAvsDF1NPN4V1KPTg8R2XNw83HraKiq984\nOz89QUZCOCwnKjzRw8rb/djLy8C4u9JKNjVAXc24r7G4v8K9u8lROjU6QkZGTExHREVOX/x9Xmvc\nyr+8u73LXUU8ODpBWtG/uri6xtDCxl5COkDMubq7wtpOOjY6Q0g8NTc/aMzDv8DOYEU/Q1zYycC9\nvL3Axc3PzM3eWkpITFJf8OdWPzs+Rk5RUFlu6NrS0NTrX2HrzL+8vsjxVEc9TMS7v8XRxbvEz9Xf\nbz4vMTg8PTk7Q0pUZ+vQzNje2NLKxsXCxc7lduHIwcTHycrZaGBzc08/Ozw+Pj9DSlZp7N7f5uLj\n5d3Vy8XGy9d/WU5Z821a0LzC1OfMu7/JxNBtSDg8Qjs5ODY7P0f2zsvQ39rJydbtb2987c68t7a8\ny9jZzc1tR0FERz8/RUdISU1gblxbX3Xg0cvMz9DOz9LfZVZXZN7LyNpNXMXD1+3TwcvYyMzqVkE/\nPjk6PTw+Q0zs3OLPzc/S4url+OXT1NPV2MrExMfW7WJo4uhjXnhpT0xPTUhEQ0lRX+rd297d1Nfo\n7OTc19zc3X1gWVJMQULZvL/Hv7a2v8C+1VVFPDo4Njg5O0ls29T0ZWdfa9/Y329i4c3GwcfP2ODY\n09bOz+B4Zm7nellOSUhHSVFZXXp7anbj19zm6Nva7mVod2leUEtNWPPX9HO9rrS+xb++3e/gSDo2\nOU9LQkg/SG7+5VE/Wtza2Wxq6ubHxczL2s3DzNLub+BkTOvAyWpLW+lkSz8/S1xtY1Rf1c7nW1pp\nfuliUFvy18/fZGLs8Fvu4Vi8pam0xcq3xFw2KC8uLjkuO++/ts/X7lRyRTxDTdfFv72/ubfAzuxm\neF5OP0D422NnwLvH2VZRU0s9PVBe29DY3szE8FdSS0w/Oj5c1M7BydTO7lE/SVVj11zGpJ+pr7+9\nyTwrHyYuLT89arewteRvVDs2Lzdew7u7trS1u9NMR1BRTVF8z7/Aztx069xYPzpDV15bWNfG2Gt9\n19LtXFJPXExCS2He5VhX3MrM319m3cnwYNjlxaimvbzHz900LSc2QTBGTOy/vuFM+U42LzRD0LzD\nuq6vucxgYurvTEzPxcTG3OfZZD9FSUVISUpQ4/Jk+eDd2dddfdjpcW3udN/eWFdnYfTpYmNaU13z\n3+zV9dGmpL2+2czMOS4oO0k0S03gvcNYP1VCMTE5Vb+4vbausr3aVFbp4k5ayL6+yu5nXUUwLz5a\nY2buz7zCblNheWJfV/PHxOFl29jvWENFT1NLS+bYfHVVZ9fa187GxcSvq7vCzdntPDItOUM4RElr\n3vVOP1VdSkRN2b+7wsu9u8nhcuvPy9bgy8TUbkw/Pz0yM2nK0dPSyMLSREJecfraycm+xW5eY08/\nPT5KfXNZ6snK319RVt7c/8+9vsi5srzT2d1dUTk0PkVFQkxKS2JKP1BsWFzezsbCy87DwtXr2dDI\nxtDd3NphS0Y+Q0g9POK6wtLg1tN3PzlY1M/PysrCwmtKTk0+PD5Fad3n2MnM1d5VQH6/y9LQy7+2\ntNNfydRcTjk8Slg9OFFMTVBERnLRXk3y08zGz9O/u8jXzsnJzONebnJUR0FCSldTRkndvcj5ZurP\n60tFccbDyM/TztlMPkVKSEpKTP7Nz9/kfV5iWFNt1MW/vb/JdMKyw81m9+BOPy82Pz0/P0tb5Ope\n5NjnZWjjyry/xcLEydHddGJxYFZdWFFMSUxLTENC5bzAztPOy95UR2fTzMfLztfeVD9FRkVER1Vt\n5etv8+r7ZlXby8a+wbu9103iwMzI2up8WUAyNDk8QkhKWujc3tXT7np89c7DwL+/xs3T9mFXZV9X\nYVBOVllWTEBNwrzK9e/R1mI+QFzTzcvLzMfaTkJIS0lKSFXf6fff5HJ29tzMztHDusJAP726t75R\n3tfaPSwyMkpiRkvuxepjbFBfXldiyru8ub7M12VUTl377M7T2ulYTURFRD9E4rm8zW9o3PRSQUvs\nycLP7O3V/EtGSlVeWVFc4uVwbVxz4Nzb0MK+yEVJubK1vuLk1+88LjE1PVtbS2zV6W9mTkxYW3HJ\nvLu6v9J4ZlVQ+NnPycza7W1NPj1BS1dQXc3Ew8rk+XB6WFNn6M7JzNvne11OSkhFS09ZZGvw2tTd\n4dne29TPy+tCZri0uL/OeHpRODMzOETb41hweF9eekxJXvrNwb7BwMXfaFxSXNzOz9LldWpPQz5F\nUmTd33h+0cLO6m1lfmtib9TO09rf7mttU0pJS01QWFNe5tbV09jt+OPb2dPPytxGRd2+ur/I1trc\nSDkxMj1Y7WpjavXTz99eVWrfyMfOztXT5WpdVGNs59nmaFVZU01PUmL518vJydzvaVtcYurjzcnO\n3mlcVVVLSlFVV1tcX2vi1dbZ5unj39jOzuVKRdy/uLvKytLeTjkzMDxP8N/14Gp6+GVaSlF6x73A\nwsvN2W9YTVx/29Ha81pXTUhISFJu3NPIx8nO3XhVVlBceOPW09DmcFtbXllPSkxQXV9e9tHHytLf\n+2703NrbWUrrxrq7zd/w6WVCOTdAYdrZalZPWG9uZE9Uf83FysrP0trubWPu3c/P2+VnV05MTk1Q\nZOflb+fSzc7qW1BbZm7p4tjRy9T3a1JMTlJPTlNVZd3T0MzN2ud/ZHLl19DnTVDgyb7N5eXk2F1D\nOzhFZOx3XV/2zMjVXEdJY9LLztXWzszcZVFQYt/T231fW1tVTUpQedXN2Hjdz8jNdFtZ8t/d7GJm\neud9WklETF7q6/hoaujX1Nzk9+rY7Gh76tLM0WY8Ok/OubvExsnIckM0LzxP2tfe5ubMztVbRERM\n3c3MztXN1OVUSElR59TR2d/h83ZYUllu3dneY1Rb2szS03hpf+T6UVFPXvLqZlldatzU2HlbYX/Z\n1N32enZ99Xhv4txaQkfuvbm6yOraZ1k9NDU95dLH2ufk3MnuY0VIYNPDzM3a2NtsVEdKVuzNzdHd\n6PtcT0dJWubNzdtvXmVaVVRZYuDMwbi7w+FSRj9AP0pq1MjG0HFiWFdTT0pHU2Ln0s3MztNvYfft\n3tZROE28sK+861bj40Q1Li5Gv7rBzv/nxclMODc8b8HB19nRz854RD1HYdrIzNjTzdN2UEZKZ+Dh\n5ezz3NLZ8m5lYnjt+v7l3djS3mxXTk9YdfDy7ef+fuP78fhqZFpdWW/+a2ttbmZvYGb15t/e2ufx\n6vHv3+Pu5t7X51RY07q6xdtdZVxlPDY5PWNu0V7nzMrB51M5P0xk1NPKzr7F2XBRUFJhVmHhzMTF\nz2pWVE9MSkpa3MfGztvs6OPnb11eceLa4353aWZeVExLWGJ+5t7b3N3vZmNnbHbu6PTn5uTn6/xs\n+u3k+fry5N3ybFJRV2B48dnUz8/V42pdWVxeZGdv7vd9aWBeZPP2/WxmfOHZ5Obn8uz8aVtaZ+vZ\n2+bv5+npblRQV2/u5Ozu4dXS3PFgYHTq63NmaH/r72ZbX33l7WpgZnv09nR09+ri7HNkYWpqcnv0\n5d3X3u3+efHs6fZ1efPv+/5mYGRrcnv4+PXt5ujtem95/XpoZWd87/P9bGhlaWtudPHo3+H9a19o\nbWx1/d/W0dbd7HZ2bmtoa2x39Pf9b3JtenNx/vXm6ur+b3B1eGZka3nz7unq5+bn7m1fWlxib/Tt\n6eHj5uzxdW9vcffu7Pfw6+bofG5ufXd4c25yd/Dp6fD3/n1xYl5ebPvt7vnx6+v2cGhqfung3+f7\nd3hvbWJgZnL17u327+/s+3j9/u3q5Oz6dGlpa3t3/vfx6+rudGtoYmNsd/Lx6+3y9XZwdPLj4Obv\n8vN/amttc/718X79dXd3cX3+fHJsbXB6+evp7e/08e/s9H17+OrufG5qam1va3P97efl5u98amVp\nbGVqfO/m4+Pt7/t5bW5zfuvl6e/o7fVzZmBiZWt5evf79/d2amZmbfru5eXn5ObxfnBsevz4+HVu\ncvvn5vB5ffTr8f5tanzv7f54eXt6bmViZm56/vz47+/ze2597ejp5Obl4+fu/mtkZmptbWxv9Ovo\n7PLv+fV6bWZfYWn97O7o4ePr9Pd7cG5vcXF8em9raGx+9Plpe8XPb/VXXGliaF9ncOzm3ubm5eni\n5nRibn7y721jcnF97n3x8fn4bHZxb298/nf6f+r6e3pnc2/y9vHo8enw9f5udm52em/37ezm5ubv\n9vtraWt1dnbtbu7y9fhxdGRoZXn3fedw7e/v4Oh083xw/fv5/efl+/luaWt3bGxsb/76435ubG50\n8fL/+W7r6+7t8ezkfPZeZmRue+vv5Pvs3Xjpdn5tdWRtav1953XqZeppe3Jud/jw+/X4ee/06n53\n9XX+/3Z8d+Rx3mfieed/b/Fc8f9x8G568/pv+2lv6l7ga/V69ffr9u3x6/rm9ez6/u906F9vanL8\nZOpt/Ox592Z+bm7+83zv8nz1eexr7nDr9n7g/fDnce1zavdicm1fb/1j4V3p9Gztdu7e9d1862ri\nau789G/kW/hd7mjhfd535m7ifNt+5f14/V32WfNkc1t6VOJa3WPg+t/089xv33L3+vb1ffJncW5p\n7/X95e/t53XpcXZ9Yu1k/vT67G787GboXvJv/+h+6XHnf91n7GD9bPBs8W/6aPJbe/x96Gffat9o\n3mfqZnNi32vlb9/03uzv/m78dfJt/mnmeepq8GfvXOdj7Wx0b/t29X125vL67HvoeGd3Yfdn+fB9\n4X7o7nPocu968+7v4H10eF7zZv5lcmv8b+t28/rn8+F57WLvZ/Ju6WjtZt/94v7lbuBu6mJqc/tv\n/nnj/e5qb2rpW3Rc8mHlY+By32XpZet78/rg8Oh/6/T14XPfYuZgf2N4Z/p74fv6cvv+5/P0a1xr\nWvN343vbd+B04mvfbORe5l7rWPhj62PeZONr6HPmZ97/7P12bfN3ZuVf22fh8vl0/nvbbOFk4Wzi\na/FsZflieGhe/2zw//Lvc+hq3mroZuv16nD/bvZu42X09up+8W9+f21x6l7fX+9963XtaOPy5nh7\nZ99d32bgaXprefnybOpt21/edu/ybeZj6nRs3mvgaW5s62n4blv2Ynruedxv6OPx2G3sdPJ/9HN1\nam9wZ2dxa/l4cvf65ebk7e384mLiauRe7WbnXeVh3WbkZOdm6WXmZ/Zpemblb+Vz6m3lbepvcW3s\n+//s7un54WTpbXZnaWpkY+lo5frdf9pv5W70fvBj72vndvN3+Pds+3Fm7Wjg/un77Wnsa/N4c/3v\nZOZj52vs/nd6e1/6bfHr9/Pm7PbkX+Zi62r9fnPu7ez9fvZt5V7uZm/ybOlr7W9v62bz+fH2+eT3\n5Oz87GffYfd+beps6GjmXuZbbmlXaGpo7Wju5d3s33fc7Obt+vR372PsXetc7Gjk8/vra+Bb72hg\n5WjdfOn953HhZOVc8WN66F3mZXvcWdZa4nb7+3DhbN9s6vNs2lPPYN/mXdxX4GFq+WTgVtpb+exY\nzU3NWX7pU9hl3+3422TbX+vzZ+Ba2l1+e2DuXd9e5PRr2lraX353YO32+txu33Pr7XXlZex1+Plh\n21fUU91kY95OzU7SWvHiUc9P1GJ23VXOTs9Z895Xy1XUbfTaXtpP2Fzt6mTZXOJk7vpq31vfX/f1\nZNld3mLv/mbaXNZk4f5b7FXyZGjpW9td3mXl4+7d7+jsc+Bj5nV48mbvbfNvd/5m9lnpXuztdddc\n2VbnYm/rad5y2nXw7GnfX+FvduZf5Gb272DiaO77ZeJe4mPob3HmZthd4W386l/oY+X+9O9i5nDq\nfnrr/e7+9/X3+XfudHltZnRse21i92nscPvv7OX95/nlf+h57nb6eXh/enH8a3piem3v8fnwdvN/\n9n7++PV8ef/x9PH38fb88PP79ml7bv1+dntxfXxsfXH8d/T47O566Hjmd/JvcHxu/m597PPude54\n+2d0aHRsbnpw6O/h6uTv6/L5dX5qfnjp/OZ483R0evx1/G7sffhvcXFq/mb+a+rv6uh/6Pnr9Pzq\nbnRga2Juc3zz8vHv9ex89n/78v3yf/Bxb3n26u7p7vv//nduamRiamtsd33u9+7p7/B47Pzq9/v6\neO548mx1bmr9c/p79PD+6H/wb/T9efz583h+/f7vdnpyeXt1f/1++3nt8Ofu8/h1eG1zb/n37O/v\n93hxeH31eH1tb3dw9Hjue/H4/fFz8n7u9Xj3ePZ19/hx/25va3VydPHy7f/27fzu/vF+9u7972z7\n+G5yZXV5dntv9nt2cfz3+O979H3vePn59ep95Phv8PX1/u/uenF2eXhy//95eHL+cnBu+/To7f74\n//Hu/nF+8/j3/vd1/Hl8fGtrbGhnbX7v5+Xr5Obi6Oz9dXj+cmlvfXp1cGtpZ2xt8Ovr83n87eb8\neHh7/fvw+3708Xlr/HzodXD38/xvePx4fP338e38Ym/+6vb17ev0ePn/7/Zsc3HpfnNqcXZqb337\n+fjy7+rze3Bz/u59b3z89W988e52bfDu6fZ2+/Xs/Hnu6eduZWZqaWzs9+/sd2547+5+b3F7+Hfv\n6fN3efzv9G/46ujp8PxzevV2d2xobXr2fmVmbfP4dXd0fvjxdffk7PPw6PDy9P7vfP10avbw+Xtv\ndW10efrxd2pvenF6fH1+dezn5u/19H3s5/X77uP1b25rb35nZW5pcXB9c/ru6N/a53x8+/dtZV9e\navN+aG315ujx8eHf7Px49Ovt/n739WpjcXhpXG3q4uPr9XXp6nNiaHl0b2lo8+l8+vhvff/8/X7o\n6fz0fWts83lvcn35b/X27Ont6vT68P1v/G5idPX6eHF58ujzZ3bq/Hf38+96cn/1+nNv+uT0cXF5\n5+n9Z2zo629sefFtZG3v7n1r/Nzua3Zr7/BhZXPo4Pjy6+3j4+3q6Glka2lqYWV45uH0Yl7+7Xhn\nZH3z7u128t/q4d/m9Hd8/Gxp7f52/m1yaGR7ZWZ76uh2+f3s6eje7W5oaGx7a3l+6tnf/nN8+vVt\nYnZt/HZm8/Tr6vvv7ex5bG7sdmd3bmnr5vv77O1ufu3u9nd7beXrb+vx6WpsaHZ+YX3+635jcW38\nc/jr5fFnfHjp82vs59ftc2167/juffJvcvNrfWv6/nPzbWpm6uhnavnp/GBq73vt8nvi7+37Ze/0\nb+fuaWds4Ohlbfnp5vdq9N/vfGrx5Hxoc/PqZltp/PRYXeXk7357+d3a9v195ux69XR9fPv5dGt6\nfWh58X52aGJxb3n36+3t7/D8durg6H338uXvbXl3alt47HH+a2x89XZ49/Lyefb7fWpp5OZ2+/vq\n3+f3YXR7X1ljbHD37Ob79vDx3/V5ePXnbXzf73D3dmTv9XZs9+h89Xlke395a/fl+/NsYm3p5PJ1\ncvpuePZ73+L18vDh8Vxn7d/qXFJo6/n4Zm/x/nVp+OXpeXjj5fRse9vbfXJzffVsZHFpbPBnavFx\n72n83/ttbOnn/3vc3unqYWJzZWBx6+dw8X789Xj5cOX7YGN3ZvPc7PHx3Xli+Pn+8nv9/Xxx8Nzr\nfGdoYWP0a2hnddzddW/o4uxufeh+aGfy4Xt3dHXyf/xcbeBtbHHk4HpradfX+HV+4Phu9ub7d31f\nbH1mYWVu9fTydmV3+eHmZmLv2nlebf7g5Xtz4/1z8XznfOn9eNxrZmJ65HNsXn3g7Ghu3uF8a2x8\n6ul2YfTdbFzw4PptZvLs/HR2+2X38Hv6b3Nu6vV4dH3nZ3J76tzx6H7s33Rkb+12e/r782lndPbv\nc35pbXrrcmLk5vVveevlbm7j+HZo+N3lcWh7+Pf+eWNu3OxjcfZt6vVdXeff+Ott9fPq72P9ffhn\nYPttZm508ufq6vDn6Pf6+Vlgb3rtfft24uhv7eDuYH3d6OZpZPZ4fP79bmxravtx5fb3+fzqbGt/\n+fri7mh1buV7YXJ13Xt97vDo7nhw725u/m7tdPNldnj63mbybe3pfuN3fmfl4H1oY+hnYHL86nR1\n9Obb6m1dcO1saWpzdvrl7vL17eju6PVobXn5dmF973b78Xb25Hzz5+5sYnxn+uR7c3Tp9nfv8m9e\nZ37wYWHo3d3r6v7c8V5qaOHpZmvj2m5j7+lvY19j+HhjaN/Y7Hpt7dz0Wl3w9P5t7+36Zvnf6PRh\n/NngaGjue399a233e2Lw7Wlfd/x92uN+93vq3eleXnr9b1xZa+Ds/uDjfWzo7P1sYOzz6eZ2/N3f\nZ2J69nVcWGLxZ2Xe6/z6a+Pe4u5s3NjibFz+63lhd3po/2p64PJtZ/R+eG9h4OHk8PLsXWxzbeXv\nefxxaPzvdfn1a17t4m718m7td2h07+1x69/qem723tzsaGb8+334bHNtZWJv9ff7Zevc7X55cHnz\nZ2Bz7uPm9PR5fuvh4fluXGNZWmBb+/b86uHw793X6mt//ODuYW7r4ubv/eLb/GJmZXhdW334fV1u\n29jtWmXp5vpfae3e83Jkfdt6bHzlb2ngePp6YmDs32l2a+nl7Gxr4+3e9Pft6vNi/OttXWFmfOtj\ncuPv8O/58el4W15+4urrY3Hc6v5u/HPw/mRoZnp07u7v5fzt6Gxt9+zoeHr75/5mavbg6ntq+Orz\nX174fXBiV/3gbnvh1tfyX2Le1+xdWu/fdmJebvN6f+7l+25xd+bj/VRp3v1dWunk5e/y2dXieOTt\ncWldampxaW9pffZgd+/2amvw3+h96eDW7l9gcfN4d2Nu6Pr7Z2R37H9sd3fuamz34d34amfn4fhg\nXu3j8ez4eOPa/Hj6eGtfZXbldmf67ezyal/13+pmY+vd4m5fd+3sfm717ev9cXJ2Y2L8++30ePzq\n7H76aHv9++776nz+++51Y3ZmbWl77u/x9vHp6O3t9X/u8Ph7evDp+Wt69G1bY/ZpbmRcduPt9O39\n6fFkbd/hcmzw6Ol5ZX3j3/53b3bpclpx5nprbvvn53v4391uX2d28m9fa/DsdPzr5vNxaHre729m\nbe3qdmb7+f/z6fb35eHscW9s+u1rXmX5fnV7cX707Px5emdpcnbv3uZ+39fi+3lzdfVqY2dpc3J1\nfvru7O19avPo7uzsb2x6cWptX2nv/Xp77e7o6v72/PT08HRq+Oz2e3n7+f17+eHsdXN3d/1oXWBr\nenL1/+/c3un97Ox9c29q+Oz0+vPr8/x772paXWr5c3Z59e3o4fP2f3N8+ff5fGz+5+fsffHt/nR5\ncXf+dXDy63d+fW5qa21t8OLm6/x18fN7+G5hb/xna3J0793g6u5xdPb7//P+efX/b2n/eWz99/12\nb2747/v9fPf1e21v8unyeHzu6/F8+Obt7vxvamv7/P54bWZweW/+8/Dp73ru5vFvbXX+7vpwe/Ju\ncfx69fL8fe7sdn376et3dn7r5/5lY2tqb2x3fXhzbu/p9fX36d/qem7v5O9xdP98a2v7dmdq/N/i\ndmhv7Ov+c/nr72lfcerqdnT99P5tb/Xw9nxpb3lvbHL46O318uPh6+/u5e/+ZmZ7cXB3c3r6dXh/\ndW5w9PR5d/77+/V89u/y6eXq7O37/nh3Zl5lcH51bnPy5O12dPPs9XZv++58c//t7fb29/52a272\n8vl1cPfs7Hdy9ujq8O59c378d3duZG39fnxpYWn+8fTv9P94end7/Xz38/L08uzx9e7v7vb8+/j1\nenF0e/z4/W9sb3N9++/z+/5++v94efvu7vl1fPHs+m97+vD/dHF6/nn97uv0fGxja25rbfzy9v7+\n7eLi7fr99vf3e3j5/nR6eXl++fP8eG9zfnx7endvefnr7uzn6e33/nh7em5oZmtubmtsfe7t7vT9\n+/h/d/nt8ft9+PXy+Hz88O3v8/n++317fnj9enBvdn579vL4fXVvamxudvj28+3r7Ovo6e99bGVn\nb/XzeHRyeG53fnXv7314/O/y6evu93r49ezw9/X47/V+bG9+dXRubmhrb292en77+/n27u7v7/91\nbnf99vP6/Pz5fnZ2dXX++ezn6urs9fx9/n5+eG5raGpra3v07+3u8fH6+X53d3d5fvXv7/t6/3x5\n9ero7Pf+enVybGlpaWpu//Dt7vDr6PL28/51bm5vePv07e3o5ejr8f3//H1zbnBqaGpkZWhvcnbx\n6OXj5urs/m90dv/5+fh++vp6ff76fG9rcPl9b21sa3D78u3w7+3q6uzs8PLx+nVubG1ybWdrdXn8\n+PXw7unm5+zt8/5+cW5xeHz/fnx5d3p5f/50bmpv/fb39fp+/PXs6uzx9PPv7/l2eHr5+nh1cGxt\ncnv/dvzy8/j8eHV1cHBv//L19vLx9vf07e30+H5ydHV4fv74/H36/W9sbHZ++fP3/Hv7/vv4/X5+\n+377/Xz47uzs+PTx/nhtbXBuePj09vj4fXxvcHN79/jt7e3wff75cmpqanl+/vb08O/6+399+vn2\n+PXx7u/w+X92ef357/H+eG5pbnh2b2xscXr47+3s6urvfXz4/Pv9dmxpc+7r7vD58PPzeXL9dHN5\ndHBsZGlxdXh98Ovo6ero8/54+/x0ff17//v59vt8+vXz7vR7bmxoZ2hqdP719e/s6+Pl6e5+cW1v\ndnd4fHt8+PR1cHR97/Dv9Pr/8enxfHVra3by7PD0fXZ1fPh9fX53cHl9emxpcXrw8+7v+e7/7/5+\n7vHq7e58c21pZ2huefju6ujq6/J5dXNuc/r8eX56en18bnL77uPg7Px4b3ZtdGVqbmtzb/J5fvT2\n6erh7/pwa3x96u7t7PLq9e78a3B+8O3vfGlsbWppZmtv7uvm6H958uju8fZ+c3h3+vp5b2VjYWVt\nb3f9+e7h5u91/Ozn3+fy9Ovp+/d7cPL8eHRzZ3n+aG1dXFZMT2XWxb/BydPd82RXTkxVaHjwel5b\nYWJfX1lXXX3q6uh5Z3Hm3Nvb5fHi19LT2uTr9n759WtXXGprb3N6+ubc6n55WUNBSfWurby+Rz1F\nPkQ3Okl6u7XC7Uw9THJkVUhZ3LuwvM9dTWjm1nJRWWbXzeFWSkxZ7Nv+U05Xaejm6+Da1+b38u7n\n7er2cO/4dWNfb3rg7Hl8XV5KOEFeyqiturxOT0o7OC00T8uysMb3VEZaU0ZER865tbxpRj9N3dvg\naVd+2NbrX1lj6djsXVlVXmJZWE5e3c/Jzc/a2uJlYVZb3c7KzmJcZ3zMfTkt2Kmxrso1Nz5dQjM2\nOFy0tMrfREnSytRHP2DNt7XFVz5JbdrPflRt3NDbW0tJX9ra3fxZWFZcXVr85tjQ+F9j59Xc4XRp\n3+ByU1pdU+rJxs/W00wv46S718Q7TPVjPyYtP1mzsu7xfvbEeEg3NdC4tbrhUU7Jv2FXb+vMv9NI\nQkpRWnBfUGXm8V5ZTkpn3NXS1eR32M7oa1pXb9rXfe/d+P5uXvzUydhnTzRWoavWzUBWZkA3ICpd\nzbK6buzezMpDNzY60769wca4w91hR+HO1NLcy9DuSzw+SVJXX1r2e1hbUmNuYuHYz83KzWhVZfLu\n5NXifs/R80tJ4+l1cF772FxdravLy2VqSC8yKTDh28zNy7jG6lM3PUJGbPXAuLq52k9e3WQ/aMa+\nvsjlWm1ZPThJat1+UE1c7VpNZ83G2GD43Xfi5urc3tHtVE9b69zQe1bb0s2/sqy93t9IPzApKi5I\n3mfYxry40GdIQEo8P2TMuLm8vsjRbG9vQ0TevcLZ/tjRcko6P0pOTUpj3Nf9b9fN2vxi/Nt1SEfa\nytpcSmjQwtdLX8e73EtOa7Wpu8+4u9c0JygsOC8v67avttbbyMlGLTA/W/Hlvq6ts8jHt+U0Nkvi\n325jzLnNTUVERT47PVfU/XHLxcbOc+nLekJGV1ds+17Xx87O0dHW92BPU+zMtq69urbHVzQtKSsu\nLTt/yL66uri5yk1DQzo3O0fgvr64qqy+w8dfQT44PU5KT9TK29HoZl5HPD5ST03dycW+zfPY209K\nUVJifmN7zMXIycfR6nte6ry8XcezxOlLOTM4LykwRj9Oz8G5tLzLvcNMPkBFT09M1LW+uayzvsfh\nSUI3LzM8PEfW2M7Ey9PP9kdJWFBa6d3P0Onbzd/96Wth3OFsftPUa1972tS/xWu+tcztWUc/PDQs\nNDw2PFV6z7++vK+yyc/NWENEOj1M+s69t7eytcHaYUA3NjQ2PUNHbNDT0MbGy9N5ad3VYFV93dxr\nXO/Z6m/42tjZ5n7n4uL4U0L9xWf1xsrJ1Otp5HU+PT06Njk3PG7TyLqxs7S6zetgTkpIR1P03+vd\nz9HU42pfXFZOUF1aVlde9OR4duHX0dfW09fd9W5r7vBnXWFv7PpmVVnxffvg09vd1/pqYlhNST1B\n09de3cK9yMvQyMDfVWD+TUM9OkJMSkrt3dnOzsvFy+/+5uZ3X1df/+bm3NDS1+Fve/peWGttXl9l\nYmVwX1Vr397c19Td1NHi82xhZGFXU1hdZGZt+erm6uHa62ljZGhnYmnj1trf5u1x+mxbW11sa3X7\n8+zs7Ofj4urk3dzf6OTf6Ov6ZWFdWVNOTlRbXmtufH7q4d/c3d3d4Off3OL17+rl6/xuaH5rYmVm\ncHRvZVxfa2Vz7+LU1NfX2t/+ZF1XVFNTYHn79Ovb2t3k7PpsZ2VqaWtsb3t77+ro3+Tj29re8W1k\nYGhdWGJtZ2p0dvDo5+Xf3+t++PBwYGBkaXJ89OLY1+Lz73ZmW1hfYmZ87eLd6ejx+vpvaF1ebP/p\n4Obk5/H6/vf5cnfx6e78cHBvb21gYnB9+vH5+Ovr+HR18u/vfH75ffLv6+759u/6aF9fZWFgbvnt\n4d3e5eXk6/P6/W11cWd2b2lqY2ZraGJebPz06ezl2dXa2tzf8HVoXF1dXVteZnXs8vDu6+3w+/fl\n6vL35+fq7m9tanF2++5/9+z/cG5fWVdbYGJmee3d1djY3N3l6u3/cmBebPLt9vrv7Oz/bGVnZl9o\naG53/uvo5eLg5+zt+nv/+XFwbGBfZGRiaG54fu3s7OXn4t/m+PH4eP53fP77/f7p5+vtbl9dWlpj\nb3nt4Nvr7ufo7XD+fW9yeH3s8mpd+dFlVdLPaXhgXutXS1n8W1v73tjT097R0+H27W9zcVpYXnjt\nem/o6e5pWGzqbVpe7fNw9O3b1+R1/O7tZWFs9+xsee318tXd7OxuW1ZTWGtfZe/T2+Dc4tzl+WXf\n7VpddXZfbVtkdWto9uR3+Ov1d+/s7ePx++7i8mpvfuz5Z3jhf2l3efV5amRwX13t6+7v5u7f3vDq\n7PhscWRkdvnv4ubl5PJpXWVpZFpfZGh1dG/w7HDu39/h3tnY1trg7PRxZmpmX19kbWVhY/3we+3i\n3OZ+cmljWllkaGxzb3rvdmBvcWdnbnn35+Li5PL849jh99rP3N3Q0M7Y7VQwQ69mNsC4usXf/u7L\nNic9Ui4uRGO7tc7Gq7FSXOZJQTs2Sd1TRs2/2s3I2NXoPjtTXDs/Sk6hn8Ghmp+pxPo9LCMVGCsf\nHzfzrqerrq6mujQ2OjczLTXYtr+9rKivt8Xu4UMuLTk4MT1LUt/PZtPE5f5yZO27t6qfpqGgqbZM\nNCUdHBocJis6ybaqqquvzng5LjEvLj3WwbWsqquss8nL8j01ODk5PTxEVE5DUVlPWlfOtKago52c\noqvEPy8hGxkbICMtXb2tq66tt102Li0rLDFOvLOuqKSnrLbD7kQ3MDI2Nz1JVF9cS0VZTjtNwqul\noZ2bnKa2z0IoHhwdICMrPcu3vMDA2DwuLC00O0vIrq2sp6ertLzA1VdMSEZAOz88NTMyMDE1PFd/\nxaidnZ2bnaO0YEAuJB4hKCszRei/vutPSzMoKCo0QUvLr62yraqtt8C/v8nW0Mzbak9FOS4sKicn\nLzpC266enJyZm5+qyWI6KCIjKCouP1rZzG5GPTAoKCozPUzFtrCwrquus7m3u8fHxMfeXVRPOS4s\nKykmKzY9WLuknp6am5+mu8ZMLSgnKiYqPEtr4mVXSzYsLS0yNkLPxr2+trC1t7ext7u3tr7N1fRN\nNC4uKignLDs8RcKooqScnKCktLXaOi8sMCgpNz9KUU9OQzAsLzEuMld+3cjAtbm+tK+4vLSur7u6\nushTOjYuKCQnKy0zOeevqaadnKKgqK6/Sj0wLiUnMzA3UHFRS0I6PjYuPEY8R/7Z0Mi/sbO5sq+v\ns7K2vc7lXDwwLy4qKy45PDdXsbKunqKko6aswslROzUoKy4qLj9INz1KQTs1QkA9P1j3TdzFu7y1\nrK2trayxvcnPXzw0MC8uLzQ5Q1ZbVHy+vL2pqKmlpam0t8lJOSwoKCQmLS4vP1JGV+pVTltKTFZM\nbM7EuK6rqqiprrG8zmQ/ODAsLC8yNkFZ79LKycXF5f27vO+uqb6uqLjStsk9QjMoJiUhJywqMj06\nP/b35Lq2uLGusa6usbGyvMbPaU1FOzo8PD9GSk5WXFpk/G/q6NXEwr+7uLu+v9H2Ykg7OTg2NzxE\nSVlkYHhvbWNqee/e69DCwcG7vMXN6VxNSkNCSU1cZWzw6377293Wzc/OxcHJxcTMytDlaVhIPz4+\nPkA9PkJERkpOVG334dLPysS/vbu6vb7Ax9Ltb1hLREFBPj9DREZLV1Zv3NnMyMjIxsTJycrNytPi\n7W9TTVFNRkpORkdKREVLUFpje97PzsrAwMG/wcnN2er5Yl1XUE1MSkdEQ0dKUV/w39PKycfIw8fM\nyszQ1t5/bGJYUFRRSktJRkZGS09WZ3jhz8vFv8DGys7W+2JZVV9aam5dZmBVS1BZVlZt5u7b2uPW\n19jX1NPX3OXb1u7r3nRiY1lMTlBMT1ZVV1xebu/o3M/P0c3V3eDvZvz3ZG93X15pVlNaV1Zn/e/i\n0c7U0NPX1t3g3drX3+XqclxcW01LS0lKTVVfbHzi19zX3eTX3OHf3Ojl6Xbx7Gb/53NkY2BSTFBR\nVmJ569zb2NHPz87Q1dTg6OL2f3F2Y1ZXVlRUUlRfaV9v6/n27m1ldHdveu37/t3b3dbP3uDd62lt\nb1plal1f9n5VfONqed3k59HW4dXa+fbodnBtW11aUFhZV1hofmh/4erk6v/m6fn36efr6+TuaHp9\nYmnuXWjnZXzh4d/f3t357e56dWBt6v7n2+nz6PljaF5XV1xcZGt/fHLddWr8cXR57H/t9N/k6Nff\n6H37/WBpZ3BeZ/plb/V8bXZ04vr03OXb2+HW39nS5/n5Z1RNT1hQUXFkd/Pq+HLi7/Z3bP1edt9v\nddzY6uPZ4X7q7l1q82xj9+/3b2z5fWr43/Hm1OX87Ox7ZvboZnP8YWJdYXRXXez5X/7ebXTq/vd+\n73L3927f/mTj3nrx2v537Hzv9W577/ft6u9bWu1dZOXwdunl4+T87/l8XmTpclr88Fhl8GpfaHv3\n/X3j4Orv5eFoceF0funudvXufXx8cGT27Ov37t5xa9vf7ene7Hd8d3pfWWJjV1RvaltidndfXfdt\nX2h572l14t/u3dXX5NvN1m5PzrxK5rrIydK2xlrOYlc9NTQ1MCk7UDVAv73lua64uLu7xc9bUvE9\nOEZINTxfTkhy1+HT0OpTv6dG7Z21uqujqVSy2zU7ISInHRshMCckzb7msKSjqKOhoq21us9RLDUx\nJygtOS88dtvPz768xe3q1lRGTFNPRuSuu7mdo6KepKK7w0coKhoWGhgXGiUrLtCxraKenZ2eoaeo\ntnVTRS4pLSotLzlIWMzvwrvY2dlgPj9FPUNESN3N3r6gosKdmaqlq6rXNjQcHxsSFxscHSpV77um\nop2bn56fpbPKxUotLy8rLy84S23W7ri46dbfYDw6OzY/RUvixMK4s7O1wdWyolFCoLfQ2drALDUl\nHjIdGiMrLi3dsq+jn6Gbnaastbs8LTErJSQrNDxE9L6vs7usscHfZF89PDQ2Rz5CY8q/xb+9vsH2\nUkAyyLsp1ae6r8GnrWO8KjA7Hh8gLC8vb8u5p6uwqKuw91TuOD0wLztN3VK9sa+ur621s89HQTYt\nJikoKS81P227ubeur664x9D7UC8s1qxNTKGin6iupMXILxsmHBkWFiMpL0HSq6Ggnp+fnam1u891\nOy4qLzs3M0fIxsPIv7nLZD49PjEyMjNHWfLJvK+xsa61tr3R4VtMPDY6NjdGVl9IQmTAssTGvr6v\nvN1PR2c5MTIvPT9BUti5vb67vb3J7VdNTEU/StvHx8G7t7i/zu5ZRjUzNDIwMTxGVOXOvre0r7Cv\nsL7L0V9AOzs3MTU/RUrv0cq/vL7LzMxdVFpKP0FTTE100cbAv8fBv8TN3+hcYFhFRUVHP0VTR0hN\nZ15a3d3b0MjDyMLDw77Hyc3U1mdOSUA8OTg7OzxKT1fWx8C9urS5vb/JzdxmU0ZJTEBGTlBYXnFZ\nbeT3Yl3kX1lzX/Tf3t3PxsrLxsfP3fZUS1JKPkVbUk9b6d7a1N3QzttvY+5zXVlSa+927+TRztLX\n3Nr5/fNdWVlQVVhXdGVie3Tvd+/latbP1dLV0trR2WFg/F9NSU1PSUdOZOff6ubLv8XKxcjL2GJd\nTUVEP0BBREtJWtDOzszFu73BysvQ7nxOTk5KSkZQYG5jaOfW3vPa5uHrZ3Zha2ZeYmL+Y+7f79vi\n0tv0ztnk7Wnta1JSUlhiWVRoaWTe2O/f1Nfl5tnv6uPt49fZ/G/9W1RWTVBST1hXfPFn3trV08/N\n3NTf4+5sa19iTE9eWGxw/NfTztLX2edsYFRLS1JXU1jf1dfMzdDNyd547GpbUVlXVV5hWmzo9+p7\ncGr8d1Fk83737uHd2eHt+N/Z5+v1bm1oZGBrbW78fuzg4ujd5Ov4d2Zed25iZnzramHo6+53am9h\nZWdiam1+8fLd3uLV2+ni3eXs8HZjZ2ZVUltcWVlpdn7f4Ovf3uLY2dfW1t148HtoZlxjYmJfX2Vf\nZl1aX2dvfPDl497a5OHZ5O798PVsdGz95OfvdO/2bnFkX19lXl9sdHl/8Oz1397k6Obd4+Xr+fxu\nbWBiX11kY2p+d21+/O717uX44+D69/Ln/mdvdvn7fXv/6Oz77ep0/H365u93YnXz/Pt4//9qZVpe\nZ1laX2r5/evh2dDU3NfX3OHveHlgXF5bX1hcX2jx6eXe3eDj7+v0dGhgZFxWV1tt7Ovl3tnY2Nre\n3+f4Ym7+W1tfXGX+ZVxobfJndeR83enb0d/o19PtZmTo71lXVm9uZmVq4Hn17PfefF7433Nubfnl\ncmxgbdnbbm3s3d/5fep9YHprUlhseWNt8fDneXzQ22Ty2eto6d1jZNr1aeJ9/nhcYHduUmLidGJt\n8uF5etzcdXTp9f98dOj7YH7i7XVj7u5sd3D77Wdd/OLuaXPh9vd+7up88X7h73Hr/nD6cWlqXl74\n82Ri3911aOfp7uZ07+1v7+br9P5yZlxhYGdxbP3p293e7N7Z8XDy/1hg+l5bb/Js+/Dv4+V9a/R3\nWnnmdllz+Gh2fubzbeXh7XHm33Hn7vXmbmh+dFxbeGtrePl+6dnY0MvJycnL2+xuVkxIQj49Pj9B\nRktRbNzV08zExcjEx83Ozt334HdbW1xcTVRhSEi/1Tu1t9++va3587ZLUUY7QDMxNTs7NjvnUkfM\nysHWwrHHwbm1vtC4vtf+5F4+PTxAODY8QUQ9Xtxo3srAzsy+yczLzNL/b17NzmHLurvNwbbIbG1y\nQzYyMi4pKzE1NDp509bFurK2ta+vtruzvda/wtxeZ1Q8Ozg5Ojg5Pkc/Snl5Zd3E1tDEyszXyMz+\n6u7S29PBw7e4vbe+x+1eVzQvLSkoKCwvMz5O6sa9t6+tq66vrrm9t8hk4OJIOkJAMzc9Pz9CS09t\nZF3b4mt17OxfZd3d5N7R1Xfivb/fsK64rbSuvtrFOz0wJikiJSUnMDQ/b829sq+rqauqsrO60sPr\nTUxJSjw/R0JLVlpm6HZfZF5OSU5JREpOXGzozsfGys/FzFRVtK9AvqOzs8GtskHfLy0yHh8fJyok\nN1jfvrespqelqa2ottV0U2I2MT08Pz5J6NfNz83EzmVQTEQ6NTk+QEZT1sbEvbq3u8fR3OxPNzbI\nrz1uo6qsvLCtSc8uISwhIBofOC85abqppqSkpZ+jvsDGZzgnMS8uMi9lzr+8v6yuuc9jbkAyKykv\nNzU4U720vLmvrK6+x855XjkwMCzkr0TOpKSgs7CzP9AoGx8dIBseM0S8sa2inJqeqayu0D4qJiUh\nKSowZMa2q6CjqKmvvUw1KSEjICQpL1vIuq2oo6mqrLq/6T4vLTIrJiUttKm7paGdmKWrWDU8HBwX\nFBwfL0LIpKCcmZygqbfkMyYiHB8mKz9/rqKgnp6corXcOCgiHRsbHic1aLWwqKGin6q0w1ZOMzIt\nJCosNDsyQa6cnZiboZylrUEgGxAWGRYcITi+n5iam52jqq9GKSAcHyEvPUu5q52Ym52os8o/LR8b\nGhsgKjVGxq+oo6GkrbLFak05NiwtMjI8Nj5fbMTMqpmdl5mrpMpRMxsYDhEWGCw62qqel5WYnq7P\nSSwoIB0iJTXUr6Gem5ygprlQNSYgHx0hJS09XLesqKepq7S/3UM3MzEwMzxFTGfh3sC4u8DVrZ+h\nnKG32TEuIRwbERUbKFGxnp2ZmJufrL0uIh4aHSIuQMqnn5yZm56rzTckIR0cHiUuPtS2qaWjq7a5\n7lU8NDUuOz9TyM69v8jM/WlSWl1GQMiqqZ2gubg8LSgiJhoeISJWsaSdm5+osMY7Li4gISQoP86r\npZ+dpaeuxVIzJh8kKC9LXtq/t7a4tsh0Uzo3PUlT3MLAvsLHzOVdQDk3NT5KSlO2o6WanKmqRDco\nHSAYHB0jP9esoJycn6vCSi8tJSgmJjRHtqefnZ+hq7xkNywqJiQoKzhN0L3Cvb/Gw8rNbV76bNne\n4utYT0FBPz1ETGjLwb23uKaip56vylwnJhweHRspJTnFsKOdm5+mtk0tLCUiKykxSseupJucnaG3\n/zcpIiMiISctO3i3sK2qtLrG0P1QYD5CTEFXXuf169pn1tDVyM7T53m4r7Ojr8fMLCsiIiQgMis4\n1cetoZ+ip7Z5MzEqJjYuOlt1v7Chop+fr8ZHLSYoJSUsKzU/y7mxqLOvvNbQTVxAQEw8UVxr0dDS\n09PZ5tzQ29HYT9m+0LSxxLxgPjQuMCgyLSw/Q+u8raupprO/3kE4OTUwOT5D4Lu1q6isrLfVTTkt\nKCopKjI7TsS3r6utsLzHeEVLPT5CPkFFVW3Nvb68vcfHzt5xRj5JQv6+ybO0wr1TSzYsLyUsMC9O\nWse0rKeoqbHIbEEyMy8xOz1tzbitramuuMZMOS4qKSktMz7tyLeusK6yu8LabE1DPTo8Qk/60cnC\nxczab1tIPDdHY92vr6ykr7DKPzcmJyMiLCo4WNSvqqWkqK29Xj8wLzAuNz5Pyr2yrayssbvYRjYt\nKyssMjtN1cW2sbKxt7zK9E89Pjw7RUlY+dbJxcfM3GxYS0k/Subos6yso667yjUxJiMnIi4vON3N\nr6qppq2ywlZCNTM4OT9Tec7AvLy7ur3Ez2hDPDc1OD1CTHF82cnGvr6/yc/kXV1PTExPWWXyf21Z\nV11h/nx+aGbGwLeprqqszt82KyohJycrOzrfyLutrqqttLrgVUA5Ojw+SWv73srJvra3ub7UUj44\nMjI2Nj9OaszAure4ub7J3l9NRENBQkdKUFNfe/bWz8nKztZd8MnXta+3q7nM4DQwKScrKDI1O3b7\nvLKtqKytvOFOOjQ1ODtGXP7Iu7iwsLS6ylY8NS4uMTU/X+jJv726vL/L12BXS0NJR0pOWHHt3NHU\n0tjl619MS8/LtaespKvC0TQrJB8hHyctNea/rqWioKasv003LCgrLjRJ+8GyramprLXLZjowLisv\nNDpKXNm/uLS0ucTvV0hDSE1UYVdRVVfu5dTW5NtvfXFXSljBwKuiqqKv2FQoIx0cHh8tOGOzqZ+d\nnaOz3DQoJSMmLzxeua6noKKmrMdBLiclJy0ySl7Xv72ztbW81lo/OzxJb97M1ON7VFtp9fT+WVZQ\nUebg2l1PwMCtn6iirk48IR8cHSQkNl/DqZ+dnaO1Si0iHiQqONa7r6aioqKqvkwrIx4kLD3Mxba6\nubvDvuJnQzc4O0jexcS/ytbfal9QVElFTEhp5s6+wMl2PVq9vqGjrqlIPCoiJR0mJCtUx6ygnqKq\nwD4sKycuPEHava+qo6StuEwtJyUnMlTXvLe6u7vF5fs/ODs5S1/bz8jGy8TO2nNPREBITVtu+dzd\n1dPoWztMt7ahm6qlyTUtHh4ZHSEn5bKlnJuhqco3KCUjJTU/zq+moZ+itOQzJiMmKzbnxbOsrrG9\n7Dw2MjVCTvTa0MvCvb/B1lpBPDk7TFHy3+3ZzsvBylk2PLe0npiop28pJRweGh4mKcWnn5iap7Y+\nKB8hJSdG3Liknp6fp9Y2KR4eKS9Ju7Grpaiwwk0uKi0vPezlzcDHvLe9xepIODc5OUdQe8u/u7u/\nyv5DNiooS6iflZWnrzwkHxoaFRwmOaeYl5WbtVoqHxweJCnmr6WamqCq1S4jHx4iOGa3pKSmq7DL\nTDopJiktONi/uK+zs7q//z04LC43O17PvbaytMN4Szo1OC0svZ6bkJatyCkcGBkYFyMyxpuTl5ml\nSy0gGxshKjexop2YnKzLOSMfIiUv0rGonqOtt1s0LyspLDA4R7+3rquxuM1pPzYzLTM8Sce3sayu\nuM9INi0uMTJDPvGdl5ePo0QuFhYXHB8idr2ik5SbomwhHBkZHTRRupycm5usai4jHB8vOcKmpqKi\nsd5ELiwyMzM1Pk7Jrq6vt9xNQjw3ODg5T867r664w+FOPjw2Mj1HU+PaX6mZoJeeMzYeGR8fKCU/\nvK6alqKu7B8cHBwjO8W5npufna1LLSQfITrjxaakq6SwWD0uJigvLzh6zsmurbq3zkpEPz0/Zl9h\ny97Yx8jL2+NUR0g8Oz1ETmja8KyZn5qeNDQfGiQjLio9wLadmqW0TiAdHh8pQ7ivnpqgorg6KCMk\nKEzGvampsqy3RjcsJyk2O0Pe1cW0rre4xU9JRD47RD9F2cW3r7PDbkg2ND01NT9A/sG4uqaZpZ6o\nLDMgHCYlLypOuraenrC/SSQiJCguXLS3n56opsA8LCcpK0zIx6+stK+28j41LisyOzlPzMq0rLK9\n1Uw3PD8+W2fcx725vcRvPTk3N05YTefjz8bNXrigrp+jPFoqIysoLyMzSVujnqWmuzUrJSMiMVhW\np6GmnqvHRi4oJDA9TLaxrKOpss07LCcoKy89asavq6uxxms7ODc6Tk7u0ti+vb/IZ0o/Q05ESExG\nb9nH2Lair56jeMgpJCQgKiA2R2qjoKGgsEwvJSAfLD5Tq6inn6q23zgpJCsvS7y1q6SrrrtLOiom\nJSczR76tqqivwu4/NjQ1OT/ty72wt77ITz87OUFBRk5nzM67pqmioLy+OSYkHCUgLk1MrKujoqqu\nWzwnHyMkL2y8rKOjpKmy6DMrISUvP8Gup6epr8BsNykiIiUy+reqqKu2xnI8OC8vOUbKvrWyuL3W\nakA5NzU8WNnWw62qp5+uvlwpJh8hIyk9Pr2tqqOmqb/cOCcqJCs2TsK5qaqpqLbBTi8rJSo0Wbyx\nqaisscxGMSklKC0747qwrq+5x99EOzc1PlLPwLy6wsx6T0tLZk1IwMi4pLSrtU1PKCojIS4nPl/R\nrq2jqKyvVUk0LTA1PT7p7s61s6+utMj9PzEyMjZF7se7s7q+y1dFOjY2OkZwxby5u8XdVUg+P0NH\naN/KvsC+xtRZQExQ3La3sbHEyWxCPC8sKCgqLj1av6+rp6iutcxOQDo5O0BDSVxtz8O8uLzH2m1V\nVE5NSkhJT3L40NDz61NMVU1n5dbHxcfS7VFDQz0+Q0pw0L64t7i6wcTIycXL1WpKPDg2NDUzMzQ4\nPmPKuK+vr7S6wdL7TkI9Oz5GTnbWzcTDwcHFys/eXlZHPTs2Njk/Ut3Bu7i4vMHN6ltMRkJHTlFd\nWlBUVGTiz8m9t7avsrKzzNhIMjEqKi0rLzc8UNrDua+tra6yvc5dRT46PT8+SU9W18rEu7/DxczX\n2f5PTT85Ojg7PkRRfc7Buba0tbzE5ko/ODY5Oz9PfNDDwb+5vbiyuLC4x8lFPDcrLSooLC0yQ13M\nuLCsqqutsbrK9ko8OTQ0ODdDe9+/ubu3u8DG2mVMPjk2Njk+TVzizcm+v7y7wcPO+WhNQj46ODo8\nRV3fvrSuqaqrrLrIdDo1LSkrKCksLDdHZr22sK2vr7K1ub7D3GpOPTs6OD5ITHHp2MzMxMLIy+VV\nSD05Oj1BUPbXxcC+vb2+wcvfXEhAPDs8P0RIX9LFtK2sqKuxtdZLPy0sKyUpKCgwOU7DubKtr66u\nsrK4v8nuVUg/PD1FRljucNfeYfVfV1lKR0NASE5d2c3HwMHEw8nNyc3U41REPTk7PT1L7tG1rqyn\nq6+01lRCLiwpIygmKDE2Sci9saytrKyusLS8yXhIPTs8QE9d+eL1eGBUVlBMT0pDQD09RE78zcS9\nu7u4uLi4vMfiSzoyKyozOt+zrqWlqaqxxdg/LywjISEfJSwyWcW6rqytq6utq661vdlPPzo3PEBI\nWFJPWFlu19fb4VNDPTY4PT5OYXzNxb22s7GwtbzKakI3NDc+X8q8sbKytr7J6lM+NS0pJyUoLDRH\nbs7AurWvrKqpqq6zvtpdS0I/Pzw8Ozw/RVJp5+rrZFNPSk9YXlVe4szExcPFyNh2XEpEU8e2pqGk\nobLKYSwnHxsZGRshNsunnJqanam14z0zKiIhISY+yKWbmZmfq79RMSkhHh0eJjF3va2srK+6v8/c\nX1M/PTs6Pj89ZaqmmZOdmqtIQB4aFhEREhsly6KYj5GWnbJNMCMdHBkbIzSznJOQk5qs7isfHRoc\nHyc517Sqp6quuM5YQDIuLy87TW7F2Vmxo6GRlp+cZEAvHBwSEg4THSi3o5qUlZmdqcw6IxsZGR44\nvaOYmJiboK/eLxwZFBceJ0nFrqijn6KmtNc7KycmLDJGRTzCop+UkaSduDzHJicZERMPHyU9trWl\nnpuamqK9PSgfISkrMVJ7sKGfnJ+rvUk3KCMfHSEpO8u3rKusra+1ylQ4MC4wMDy5r6icp6ilwrTo\nQi8fJRkeJB4sLknMsqiooqepqbG7bT0wLjQ3REhZxsCvr7jCSz85OD07Pz1Ha9O+u7y+v766yftJ\nPGnqybnd2nxYy93LXz9IMz9ANjs0Oj5Ldlzm28e7trK9wtHeycbIzO1WUlhiXVxJQktN+N7X1enW\n08jH1/lJSk5X621qX1xzfO5zU0pITXbPw7zAwMrTzdzU32ReSEVCPkM+PDk3O0Jo3M2/wrm2s7O7\nv9vf2+7WX05JRVps5XlUTklOYFtSTkRIT2J8+d3czsnGxsfN19jd29vocuvm3tXb+1xSSUk+PT46\nR0hSXFvf1sC8vb7Nzc7Sz+NkWVhf79bU3ul1afRuWU1JRkpPU2JbafLc1M7GycjL2+heWVJRXVdv\n8d7P1dDh+mBTVUZLTExXWmp+3cvIwMDGxdjlYUxNRUhDSE5Q/XzWysvGxsbIy9ToZU5JR0lMT1xj\n/tjPzc/jX09JSExSZ+zWzcO+v7/K1uNfUklEPz5AQktYaNrLyMLEycnV2N7vfVpWT1dfZf7t7+HV\n2tbzW01FR0ZPU1/z3srCwMDL4GlQTkxPTk1VW9/OxL/HyNPY32pcSUBAQUpPWV1dZW7g08zHysrM\ny8jLz+1cTkpVWHXwb2Jd1GA/Pj9scFNNWsK3trzP89PA2UM2Nkzv6V1X58rBzuf92tRsUEhS6exw\nWVVtffZeT2vp18zb1MzL2FxTT2f4dG1e+tPO12JPVFhST0xQ69LQy8jJyMzmXFZLR0dHUGZ2/eLP\nz8/P2drj7evwdWleWlpfYFxaWl9q6trU3Ofg4PNaVGPt4ul54+Lv0czF1FpTW/NZRERUed7+Wfbf\nz9VvW2D+/2Ff9eLa4dbW4Ofn193ubntrV1VKSlBYZ/Xg8Wvd1MzPbGbk0NpoXl763fdfWlvn1/Za\nY9jW9mlg/9h+T05bbl9aXfvR0el72c/U3en8cOV8dtze9FtTWl5hVFBYZmZu393d4fx3fPjz5vRy\nbu7lf/P/7XtrfHbmeOHi6uPh3+XdYU9MXP1TSVe8usjFvbm9x1A9Qj80MTo8SFBJWM3Ezc/My8zO\n7XHeeVFMXXVqe3TpysrT2NjYfFZXWVdPRDko7p7CzqqfnaapWkzOLhwYHBoeIiM2tqevqp+fn6e1\n4VrhOSstLzlIU1LMtbW6vMng0WQ7Mjc2NTk+Ste9v7ywq6yywM9PM8i1TFPTwLy3wjs5YEUtKCQi\nKTA0Omu+tq+vr6ytr7zS4U9NZO5hYd3Xy89qR0NHQkhHQkVTbfDW1dbMxMnOyM7Y1+ji5tvZakc4\nOlfpTlzoz7u5vdL6Zk9EPTczO0RRa9XPy8PByM3O711eZ37y69DMysbLztvf6WRSSU5aW1RaXWNb\nW1VNX1hTW1pv49Lb69PKzdPa2t/rVEVfz8rM2t7YzsnL5VBNTktAPj9CSmvmbGjk19DJy9Xa3N3t\n621fbGX57d/Z29bh29nm8ntcTkhFSUpNTk1abt7NyMbFxcXHyNDv+G9aSUdCQERBRk7/0M7Ixb+6\nvcLO2+J1WkhBQ0dKSk9XYWZnaGV5bmdjcN/W2tvNx8jIxcrU1ej7dl9ORUdMTEhKTF5weOzg0czI\nzdLO095rWVJMTkxNVGzo3M7GydXZ2tfc615QU1NSVFhVaOXg2trb6vDl8m5fV1NWX15XZ+Ha4djV\n2tjf6v/e5mdsbuz9/Ph/6ex0W1heXFZZXV1v8HR/2tji393Z1trd6tvdfG9mbWpoX1tdam9rcnn4\nb11aXWzr637o3dfb4OhsYmlrYV5lbWzi0tXR0dbY1/pUTVFSUVBMWGhyZ2HZ2uXd6+zY2vP32N73\n3eXf3d15WF1RSUtSZNHOzsnCur3J3mVPSUE5NTY8Q0xj7eDLxcfEwcHN1dXd63BeUmZyaGZ73ul9\n/GVlelxNTFxTU1xg7OPXzt7Mvc7Pz91tU1tDS1NTTVp5PEC5r8S/v7+4s7k/Nj49NS4sKjRU233Y\nvbaysrnEzMzsT0tGQkhXVnHAvMXIwMTUbEg+Qkw/OT5GXv9k6tzExtPM08zH0vpfa2ZmTlFXUV9m\naks90KuywcDMt7K7Ui86ODAvKysvPfbKwb+8sa2uuMnV3WVIPDg9R1FPZL6ys77Ny8fvPzMwODw6\nNz5b28S+v7y8u73Lz91mXmlNQENISk1ZYurNv85OfbWtt3lFY7+7fjYvMz1APTo9RFXLvbvC0tjH\nur7pUEtTdO1vWF90eM69u8fvYVdXVEI6O0JMWeXOy8TCxsXK0PNYU05MSk1OTF3h09DOy8zNztxx\nW05FP0JGTWPh0svFxL+9vMDN4GZUSkM+PkFGSU1TV2J+29LS1/F56+P8bX/f0cfBxMjMz9vgflRL\nS0tGQkVKTlRiZVthfOfWzcnJx8XKz8/R4WtVTEtQVVBPT1Ve/uLf2c/Kzc/V3OLf3utlVE9OVVpb\nXF9eXmBjY2ZlXlxp6uPg5eve0cnJzNLW0s/V4ex8a1hTTklHREZLVV1eZHzj1c7Nzc/P0tjk/3Z3\n7+7wcWlu/XpeVFBWW1lVXfvd29jOzs7Mys3V4nheXFtQSEhOTlFVVlps6u3z+vT07uLa1dbRz83N\n1t3b19v5Y1lXXFhQUFZaWllWU1dganDx29XVz87O0NTW2NrldmJfW05KS05VWGfq1szP1dPR0+X8\ne/rycFpVWWZpW1lYXl9dX2JnZmpv+ujp5NvWz83Nz9Xa4/fx8n1tYFxaV1NOT1daWllmfe7j39zW\n09fZ2tzm7/d9fvpoVE9QU1rxy7+8v871bPV9WkpDQD9BR09k5NjU2eDn6N7Y2Nzn/XR97tjNx8rS\n52ldV1BKSElOWmZpd+vi6OLb4ujq4N3i4Nzb52NTT1FXXWVcRTk+0a2jpK7I6t7abz4uKScmJyw9\n1LSusLi8urSzu9RLOjMzOEFb3djq07msp6m7UDk1NzczLi0uNUfTubK0ub6/vLzAzeJdTEQ/P0VK\nTExCNjjaqJycpshLW+5tOSYeHR4iLU24qKKkq62srLHHQCwoJyktNkffvrexrKmmpqzFPy0oKSsr\nKy00Scy2rq2utr/I0uJ4Xk5IQz47PkZPbtnsRUW7n5iaqksvOk1GLiAcHSEoN9Cso6Gmr7SwsLro\nOiwpKisxQei9sq+vraysrrjpOColJiwvLy86aLytqquutL7M2ftiUEA4Njg7PkdY2sW/xepaxKie\nn65NLzRHVj0sIyEkKjbps6qprbe9uba5xlQ1LSssNVDLu7e6u7i0tLjB6EU2Ly4yNjc6RWXNv7u5\nub3Iz87N0P5LQ0VGRUpUZtzEv8LEwr7A1kcxKys1Vcm9vL/CwL28vsppPzUxNT5R79fZ5H5pceXQ\nyszT3ube19nqaV1cY2pqY11mfeni5u3w7f5hWV/v2NPfbFpWU1RaaOXRzdbg3tHKy9pbRj9BS1RX\nVVdi5tHKx8bJztnyYFlbWFVTVV583c/IxsvQ1NnmZk9LTE5NTExOT1Vdae7Z09be6efd0MrJzNbn\nZllUT01MVHPc09Ta4enr497obVVMSk1SWWBu7dzSz87Ly87R19vsYlBJR0pNT1hj897Xz83Q1t7u\n+29dVVFTXGp8aV9n+ebg3vBxb/bq5Nze5erp6ePd2+Hs7PRqXVhXXGl3dWpiXl1eYWRoeuTd293f\n3tvY3OV+ZFtVUlNi6tXOz9n0c3F7/HxuYl1ZWF5u7+jv+fXr5uDm/W1rcf/x7n1pZmd57uLe5+35\ncG1sc/Pp4N7c4P1mX1pWUlFVWm3p29bZ4evq4d3f7XBjXVxfcuTW1Nx+YWBs/HhuYFpcYfvf3eb4\nbGv45N7j8mtfXmNw7eXue2545NnW1t3yaWNmZWRjX11hfeXf4ev6a15cXV9kcerd2tre5u/v7fZ5\nZl9l/OHa2+T9ZmJiYGRjZGJgbevb2dvmeG976+Xm+WtkZF9dX2Joc3F45tfOzM/ddmFiYl9eXFtd\nZHH57OPn8Hp0/uzn6ujw7u719vp6bGZfYW7v3tvc3eb0cWFfX15fYF9ne+re3eDq+3j57+30fXl4\n+O3s8PV2aWhlbP3x9f9waWZoeOnk5+17cfro4Nzh92VeYm/7emls/v367+vk5f1hWmN74NXY43No\ncHFuaWNfXFtjd+vc2Nzo7vDz7O1zY11eaHLz5Oz2cvHo9e7f33Rhav3ybGNvdV1h8Xb/5ODc2d7m\n7PhkW2dfXnNqbHFvfXHs3uLd7d7ceHtsXmRla3Bmduv1+Hno2djc+WBfY2/9aXNqanZs7/dr8/3t\n39/b7mhscOx7X2Fic9zV3P5v8mz9+GpeT1zs7v996OJ1eO14+PLx+l5p6+fo7dnca2ltc/llfflt\n8vH082p7el9rZG3++9ve5fZr8u7u5P9aWG/k6OXp/2tpaP5+bfp893jg0uPi6l5WXXrh2tfdXlBR\nU11l5d73cGnz4+bd7HRzb+nn3NPh/WFhXVhn9uHk4+psbfxoXF3/3OXk3m1XT1JcbtfS2Nff6vDx\n6PpnZltdbWx0efjxbmT06Obc5uhzYWNabGt74eHobX3k3tTU5WpbVFVp7+Hh7Pj78+/x3+Xydl5X\nWGFueX58cF9qb3zycu/+b/T24+fr6nRpaGR94t/s6+t6YWvl3dbP0938XT4yMzzctKefo6m7UzUq\nKCYmJiguPtGvpaGkrL9YOzU3O0FERktezr21tbvKYUc+PkNITU9XaujLxMfPaEpBQC4i16Kejo6U\nn2M0FxMWDxETGyRqn5GMjI+kPh0SEhQjMEK+u6qgmZWXmKhRJRsYGSIsPX7Mx8y6ury7zehKTE1Q\nzM3Mz3xEKiNJqaSQjpicuUUfFhoODRAQGjOqlo6KjJyzNhoZGB8hJk5Ts5yUkJSXqTciGRUYICo4\nzru4tay1xL5SPTY4NTLfzr+wucg2Iy6/spaOlpWnyi8bHw8NDw0SIcmcjoiIj5q/HRgREREUICXD\nmo+JiIuYrywXDw4SFCAvaKqim56fqN1FKyMhISw16bm0sOA416unlJGYmqzFLSIiERAODA8bRqmS\ni4uPmK8xJhwZFBQYGz6plY2Li5OcvywbFBEPFx0t2q+hpJ+kr7PuPiskIiEuQ1r5R7Ken4+Ol5Wp\nujMeIA4ODgoPGjGymY6Nj5Cdt98nHRMQERMo2J+Tjo2Pk5+0Mh0TDhETHi92r62ioqCepq9fMCQf\nIicuLSlvpKCQjJORnqjdKCsQDQwIDRUpxqCTkJOSl6Go9y0ZEBEQHTe2npiQkI+UnrwoGQ8PEhom\nMX3QrqWemp6lzTooISUmLSUhbamgj46UlJ+fvT45EQ0KBw0VL8GkmJiXlZaao8wqGBMVGCI25bCf\nlZCOkZ7FKhsWGBscHiIsS7OhnZ2frMNrPTEnIB0ZNaSekZGcnaieoLt9GwwKCw8bLFrNtKGalZOX\no8MzJiIeHxweJ1ummZCUmKG0yjQsHhkZGiErP2/CsKefnqKuzTYqIBokyKyfmJ2doaCfuVgiFxIP\nExgaI0Swn5uXm6OhrbtsNCYZGh4qSbmsopyamJ+sTykkHiYiISIlPM2rp6errq2uuEEnGhzJsaCb\nrqKnoJu9VxwTGhYcHRgdK7ebmJadq6eurLY9IhgbITFSdtG4opyYnKraNjQqLCUdHiI33bKrraak\npqy7TiQZKbvYqqvLn5+Xn39SGRsmGhsVFBwwp52lnqGgmZue0iwjHCcsLCUpO9Chnp2prK6/tU0v\nIx4hIi83Psyyp6Kgo63CTyonzlBDvz28qaScwcNKJjQiGxgUGydWrLCwpKObmZyoTkUxLjgtJiMu\nRL2ur7vGtLuvtPo+Ky4uLz00PWjHr6umqLW3zT4sPNgvRl8wwLalo7yp2zphJx8cFyEmN75et6uq\nnJ+irPHgSUhWOC8tPOrFvMxXacjAvNFPR0FXaU1KNT722LnAxcjEtLq92j8xKiwuM0ZQx7Gpnp+i\nqcVVNyspIR8iJi1EZc3GvbW3ra+/vr/Av8PeVUxPbU5cUDxicHu80tFaRlRRXlpTPVte4LvRxmDu\n62tjPkY3Ql5sva+usq+7wL/azEQ6Nyo1MzI5Lz1D+sHHw8rTw7m8ub7Jy87L3fBdTUxNTEpKVmV8\nx1x/+ljMft5XTkpO6VfxPz9Oa766t7m7vcTGXUVDQD5JWF77887NzMba915HRDs6OT5BS2/i2tu6\nurWvvbvS0ttaTUU+Q0pSc2xr+uvmzOXd1ztMPj9GW2Tiy9S7xLq+ztXY3V7dSE88NkxO4MnCzMHE\nur3a1D44NjY9NDw/RufJvsS8vsW3wL7c7lpLeExVQkVuT8zc32NH9lXM3dV0WctX111AVD7bcdvT\nX9/Vwr/Wvefp7VxGRvtT2OVe+0vSzdvHVEFJTHXoa2xUWO/wcHdUWfzMxcrT7fnsb1xDS2vnyMLJ\nx+nH2HHYO0k6P05DVUJHSc/Du7PNttTEvebETUI9LVBVSc182cHBsLjazEU/VT09Ni0+PF/I3sLQ\nx7zLvtlc4v3EytLYTG51y9NTVEFJXt1nVzxEQkPFZdPuXcTavbvMvsvL4UxKMS49yMy2scCwuqq1\nTkkoKCgpMCwyRNy6ra20v8W9y87bQD87PtvOvMnmzcm+zOdKPT5HUk1aREJKYc7t3ONt3ci/v8vP\n/lRfWEQwLNuusaKruq69p7w7MxoaHSEvLDBN3q2en5+ruLlq2kgqKiYzRWC4vbGsqamwuVk5LzAw\nLzIvNkDfxsS+ycnRxL/W121ad1/cTjUoQamom56wrLypty0pFRAVGigyO8i3pJWXm6fL5i81MiEj\nHy7fsJ+mqainpq/NNSYiJy02Pzc7Q8ywt7xiREtWw9f7dEjj3r++UC4trqedl6+uwrasMi0ZDhIW\nIj1TvLCpmJaaons7JSQvIigpLfKumZmepLTBytE2KB8jKzrH5tZRTNnVvF86MjFbyLi4yMPEvLze\nSyweP6uhlp+oqbyn6zAfDw8PGS9fvaqjm5ebnsQ6JhwiIi03R72uoJuborLXSTYtLiwsNEDt2czJ\nVkg8PDxGUl7cy7m1sbK8yvdPPjo5KiBUoqCXlJus31QmHhoTEhMcOLSilpaanavDNiggHB4mON+u\noaGfn6i230UtKCwuN07V0MrByVpFOCwzOlXY3ry8tq+2tsPi4UlIPDIvHyTAsZ+Plpyl8kImHSAT\nEh0YNLislpmXmbbENB4mHyc7MN1ryaKnnZyqsUYxLyg5OTRVQVDfUGI/PEU4+snHsbOzusO+7lxp\nS0I5NzMxOTAt67KqmJSXl6faLBsZExQcGSVF76SZlJSbot8sJRsbICQxR8avqJ6bnJykyTQlHh4j\nLTdG7HDoy8C6urfCz+5GSkVNet3Mz9DWWU4/MjU4NjBEr6ubj5SVnM0rGBIODhkdJ8+4p5iWlZeg\nvS0fFxMdIjO9rqWgnqCioau+TiodGx4hN8W3rrDAa9/qZtTfV0VMSlPFwL++0l9GPzo6S1jqwMRf\nVr+8rpufoqdHKx8aGBskKzvEuLihoqSfrMo3Kh8cKCw9ta6roaarq6++aEEsIiMjKU26r6iqvtpQ\nODlDQ0VMUEztvbqvrbzMRzMxNkJY3Mvs39w5OsLMsZugoaLoMCcdGRwhJzDNtbGdnqKfsWgyJBwc\nJC1Hraemnqiur73bRTkqJC0rNcvAsau0yFQ7MjVGXHLEz9K7v7i0xk01KSYsO+a8r6+3tLvXPyk6\nRU+goaSctEo5IBodHCQv5K2vn56ppbsuJB4aHzffrp6dop+qx145KyYtLC1mZta4s7e3tnlSSTw0\nQEA5anfKv7a9z9RCPUFLU8y/v7e+0OnnSD0xGx1EVp+MkpKZQB4XDxAZIDJnpZ+fk5uqry0YGRgc\nPa+jnJqhsbJlLi0oIixPz7KotuE+Oj1vtbvKVTApNEvSrq6wvctdPT44OkNe7cm7u7u8zk8+Likr\nJR5OnpyLiJqmNw8ODxIcLuS8qJWYmJS0Kx4QDhkt7qGXm52dsGU+JhobJjW+n5+lrt44L0tc8cNN\nMzM2OtS2ta6uueFOOiwvPEFfyfJuzM6/ur/TPzQvLTMtdZiYlY6uOikYGRwkJidosaqXmK23OB0b\nHiMmb7Crm5ifqW8pHh0lLfCnpaWks+1HMio1W8nJ2EUqMkrNqqavy0swLjM2PEzTwru2xNXU1s7Z\ncz4uLjREPzqik5yUmj4uHx0aFyIeKqidmZShvFgtKBsaHiLNo5iWpbU8JC4xMDk/vaehn7JNKyUv\nNF+0vu1YT2jOx9JFPExe319GPkHVtrC9ckI5X7/AyU86OknZ0kYm/pOYnJ1CLCQoMRYYHyetm5ia\nt87BQi4bFBkmrJqamamvtFQ6IBkdMLOem6a97+tINC8nLUS/r7vPUj9LZnrr5M7I4VxOR1foXk1L\nbMK4tL9XQj9LTzswIyqajpuft/XLLiwVDRotuKWvpKClnrArGBUdJjPMtKCVl567MiwqJyclQbGs\npKq+49jGPi0sLj5NTltvzbe6wsnCx0AzOz9QelBLza6ors1CMTRAOTYvKESWkKCmsqO0LBsMFR4u\nUzy2m5WbrcJqNCccGR0wtqqro56dorVJKyIlLC01262uuqqpr9suLC42MCoyScOtrrWvr79HMzY2\nNTQ5V76trbfC71lLOjU3LUqbpbelpZq4NiAXJxwaHCuzpKGooZyjzywlKS4mIC7tsKitqJ+erEw6\nMzEvKCYmVra4r7Osq7ftOjcvKy80RcK/yLmwrsVYSjY4My5B17u5zMO81Fw7LL6f7suto5zDZicr\nPRoaGidKyrexnZuouL3oPCwgIjJHSWC4paGjrLa1z080KiYmND5MZ9+8sq2yvdNJP0A6N0BFT9O7\nub++zFVFPkNFRlN7yL/K0ej+L2OjQU+rpp22t1NE/hwYHCMpLkXWpZujr6eoyD0uKS4tJipIsa6y\nsK2ipLZBQmA3KyoxOD5ARMOvtcfDu8hQPT5HVUZI38y/yvXq0+RAPUtP3sHNyrzFOnymXDTQxK24\nvO3mtjIhJCopJyswv6Sns6ylrr3sSEc6MCoyZ05c5r+uq7TPv751R01EQUU5PFHeXlfO19jd/ODi\n23JZ53zz6WL88mBER1pf/tfJzMG5vMLsWUhcWDxnz7u6wMjnbjsxKy40OUdqxsC9wru7x9pSY+Jm\nTklW6/Hv6tbK0Mzb28fN3Of2aldOQ0BKSURBTmNl0MvKwcXJytXvZGRWTlFe92xbVdvOz8XIwtBm\nTERJPT1CSW3d1tLEu77b6t/d12xt7mRRQ0BIUGRd/8/P2nzezNffVlD+731RdNPWytzeyNHmTE9Y\nREw/Rl1943nS0src331f2vLNyNvifV1VXF9WZdrV1d/rWGz9V0lNbPfPzev+69x7e19nbG1hWebX\n5OXtbOlrW1JY4l5o7+fZYOrv6tTl5dPNzt/z+93kYUFKSFJQSlhs6Mfqyt7Z6PrVaHRYTvVebmDr\n2MLSzNrt0VliSklbTHde1Nzed93883tOa09XeGXu3dvt02PZ5NXMY8puy89PZENYTD5IQvLeycvE\nw7/P/FlgcE9EU0ro/Hre/czd2+Rf3FxkUV1veOdfdN7r5dvtxuXOYmJxZmpZbOjye1J8T/5eflNi\n8+7ZbNZ1eM9i1Xnsb/PT+OBp1dfnT0xFU19e6+XLzs3OXtZPYEtKYlra3+ff09fg+v7lZ1BYWXXX\n6mXV69b7XVlc3PD+WP3u9PNj3tzOcu1vW+1J6k9q3l3z7eLh6/t51H/aXOrZettx3Ntuc1FOVkdP\nVvzU0s/M08/e915cU1ZiVm5rZOX3zOLR/mzgdeJcbflm2G7vZmH1b+p5autdXWZVcvFw2HfU+trs\n6/X58W7oeX10aeBd417/XG52Ydho2dzq3m7xVlZJV2Bu2Org1s7O3th54/pgZ2BzTmhf/N1V41/W\n83b4Wtz42u1+311xbWlq8mB7c3P19+Z82n3h8+3ifGXiWfBg8Hru7/f63O/pYF1jVn9ca+7j4tPf\n5HpX61xealncWc9s19ru3lfQZ+rvT+ZZz1bz+3nhZHpZYWtb6vXf6/Z43+rWevvZXe5mWGpjeOp5\n1fnQbuBt+vpm61pqYVvkU91j4ep9f/nvbOj+4Nje9FzlXPFace1c2Fjf6/ndUN1l3F1eXvLs9/H8\n6unX6Or17u5Z7VjgaeRXf/hm2mXoaWX4U+lZ21bd42bQWs9e3dZp0FLcamLlW3P+bV9ud/z3Z/Tg\n+uZqaOV13Vface/fcOh25G11d2vqW+NQ3WZ7aGbcXNx8397s3WDXaOZga+NS3k/tavvld+n/9F/f\nX9xpbNNOzlHc+FvUVspuynbt2lXlSVxHUGJN6V/L28zO1c7c+l5nT15WaGBm3fz23NzZ1+x2avd7\nT2NOW2R3Z2/e6Nji1uno2fTpbnFoX/Vj6WhxZO9+aGt039v09Gzac2xXX3Febmvy6OfU89Xp4nt+\n+2zhXP9f7Pl78GjlbW9qXupn6Wbpfnv1aXVk6fjq6fjv+OFte2l17XR9X/p24ezwcmfraHlpe9zg\n3XL+cm35YXbt1Njb3dnc1uV1aWhXVU5QUFhbW1xmcfbx4vLr63T6bPdz7mZ1feXb397j193kfuz3\nZVpQZGHm83M/UKawwr3Rtb3JQyg1OzI1MTBPzLvHy7nLy+0+PD5ebFPpzMW5uLrDy8v0Y09ISlxX\nXWh/9F99WVdoWlpac3vh0tbl79/6+XhsT0VJRVJUa1M6r52yrbS9rXlmJyA3KjQ2MlG+rrPGwMtV\nXDgzOkfS38zEwLa1wdffyL7sS0vmxOBPSlH8Vjw3Ok5uVE9Y1svN33LPyc/0UVt5cVJERmTk2ENW\noKKuqcO2w008HiotLEgwOt67ssO/0UxPPzQ4QW/HwL2/ure+zH3vysNVSfPNxGBYSFXxPjc5RV/z\nVkzjx8fc1tnWx9xwWmJbS0c+SGHf302xnqmrtMe6VDsoIi4sO0M1dLyzucnPTkhCNTpCXMq8vsW8\nu7/H2mBevsJX+NrBxHdNP2hLNTY2PmB8Tl3Mx87W4vzJxftfV156YUdBXtfL1li3oqewv83D/T0r\nJy4zOzs1SsS6w9jY7l9NPz9P5MvJzMm/wMHN52TVwszdXN/HzHNJSVJJOjo5R2JQXGHPztPP2s3H\nx+5YXmFcQT9FXNre1WC6oaawv8W4yUIsKTA0NDIuP8m9zujP1OtUPj5b4fHf2dHDvr/Fw8jTyr/U\n1tvw0utpR0c/O0A5PkJLT3XV89vQzdHGyOHfaV1ZTk5HWG7ey9HS47yprrvPzbrWSDMwPjY2NDVI\nZ9Pm3srN1FpKVmdcTlRn3MS+wsC9vMHKzfLcZVN6WVZSU01LT0dBQkxNW1pf2s7Gy8rO29dfTUxN\nberi4tvPz8rRU1G7sL3K7MG721Y3PD44Oy4xQGbX7dfIxMh/WF1TU11meNvGvby9wcTCyPdmVk92\nVFVOWV9JWUZLTUlWTe7v3tLa0tfZ7296bWF33OXu79vO1tXib0tKzcDM1tG9ucbYTEVHPT41MjpG\neHXc0NbKzdbvW1hed2hf5crAwMTMy8LL7FJOWVVZUk9g+udnXmJZVktNTlNr9dra0s3N0Oz0fH53\nZXbu/3xwal5SSkZSyL7Iw7y2usXMbmBcQj44Nj1EV1pn6fDr7mhWT1NjaXzw3MXDys7Vz9Lf9Pva\n3ufV1tDZ+mpZUklGSUtTWlhn+One5+r05trzbnNmaGZnXVRi8ejzZurEvsTBvr7Dx8jvX19RTj86\nOj1BP0VLTWD19njs3NTT3PDy397e3tvTzszLw8PM0NPZ63RiUFNTTUxHRkpNTE1aYf3o5ur54+38\ndmdw7OLt6djU09j7fNTEy9fJw8LFxMnX1P9KPjc0NDg6PUpVX9/U2NvW1t7g7Hrw6+Xc0s3Mys3O\nz9DZ3Nfa2OD3dGhZTElGRkpJSU5bbf9/Ymry6u7x5d3U1N/u4dnlc2pxb9vJx8jEvsLIz9nqaVdF\nPjs5Oz9GR01VXWpscPvk1dTW2trW19fW2djV2dPOzM3NzNTa6GlaVFBKRklKT1NOT1VdW11uce3a\n2djU0tPV3ejw6uPo39zd19j/W2btal95e+7azs/a1dp6XE9JR0hKSk5SV2Br+Pt3eXdxbXbp2M/N\nzczL0tjU2uTh29vf5fFxbWVZU0xGREdISlJifdzT1dbX19ja2dPR0tng3uP5bF9XT1JUWFxiePpu\nZGpvZFxfavjl2tbOycjIzNTZ3e16ZlVSVlJRTk5PTkpa51tm3Gz13v3Tz/bj6OTP2tzW29HS6Oh6\nXGNdUlRXVVxeXm9j7dx43Op8zu3pz2vi2lvx8l3obFtwWm33WfLyXub7bflm9H39/2bd9n3N6XLZ\nae7cVuJdTdpcXflgbOxt5Nxd1dZnzev+yXR63Vbx/FljVmFaVm9WbOhV0eRXyFVYx05wzVPd02Pf\n2mbc1F/R+l/RZfbmXlveWlHXSnPZTd7oUt/gVctaT8ZVas5MyM9Avtk8xWBFzUX50j7E9Eu+WGvF\nV+nPU9J6SshmV9ZX7HpG0n9Jy3RVzFhu003M8kjAZEa9U1nESdvUSsrrR7tcPLU8Tbsx2tA4yGxF\nvVFdvEfFyj261UK9a0u9U07ISHXaO9PYPcVTUb5E389Pz1ZZ0lJu31zWZv/XYMltZMx8/eBrZvVc\nV+bqRt3mWslPbslK0809vWlJvULi0TrOaFLLSt3NTNPgY9dwXtfpe/ll8NVcU8NZXdxZ4md1Vdxo\nWG5XzlxdzGh/43Dl1Wvg0lPa4UzZav5Q7cdVT9vdStD+W9hf1VhY3ljjfVvcZ17wXOXbcuTXcXzo\n5P9vzuJO29hUXPvoSszYRsfNdUTQzz7f8E5JzXw+2NVZ2c7vdc7n52jV/lPhSs5YSMZWYd1201LX\nzktvwUxlzu93SsvoQMRjTMVWSsvhW07nwznOxjrEc1xlW7Y8TrlLzlddyD3CzkPJ62NvbMVHTMRS\nXOLfVGbQbFPY1EPQ10XV4P5a69FT1W5DyNtUee3y9NZdS79vPs3TWld5zF1q01p+b+T8Xdxjcnhh\n103izEbk0PnjVd/aW+xSfd7XX0zRwUtMzOxieN7sXuveR9bNSfFt525VzGBT2/TibvncTtzWSevk\nVXhi69Z02ejpy1HY/E7TX13r/fFN+elf1fla195l3mJj3/lfSNPoSd3e5Orc2Fz41GDjb2fXT1zq\nXu/udO9fzu9LzvtTbnvsTOreWNXd/e310/xq0WpY6d9cUGbWUFXNbWrn3dxX485T6t1o+Ftc82/5\n5Hxr8N9tWNfuY2zl01Jn3Wt96/nu9+/tcvJ952dg3Vtj2/heZ9fmT3zlZmL473bY53Xm+tt/aG3b\n3lbz32v8XGhrc9VPXdF3amDm2lFn7n3lan3e2Nxy7NroZ2P73lxe9HBidO5rffZ+bt/fX/vpZ2ti\n6P9i7fn9b2T26PD+ZunlZ25l5ul4/mfX8Vvo6tv8ad526+xu5mROSv6/YEC+uMbY2bPTSndKVDwy\nOThASDxP1c3P1ry3yMnCvsdm3s1vUk9qcExNW1xtU1ft829VafdZUk9hb1pc79DU7s/Hys/5XNaw\n3juxtMPjWKzmOXQ6TjAnNSszPDFJ+cnB0LOrubq4uLti2dxNbEFOXUZrR1HZ7s7fwLzUz9ngVUND\nPT47OkhZXePLvL/Mv8fW9FlhSUJMQEpcTlxk6NS4tsyvr6+y27DRQ04vPCsnLycwOztX5r62vrSt\nubm+ycNr6VhGd0VPWE/dS+7L+9Dnzspb9FNDTjo7Pz9PSG/JzL29vbe+wdPq70pCPz9HPkFWVHfz\nxba8tbe0r7++1WtlNTQvLS4qLjc9UGrNurm0tLa0vcnQc+xLQk9GTEpU6l7Ivs3ExLvJathiST86\nPDc5PTxGZNXVz7u5vsLCwdpgXEpNSEZOSVdpy7zRtq+6s8e9y0dmNTQ1LC8rMDs9TebEu7i0r7S1\ntszM9FRJO0xDQVdTY1nfvszayMXE325uRktGOj5ETUlMzMjLxMS8x9XgWV9NREQ+TU1I9eznyrGz\n1bCruL7RvGA6Ri4tLiwtKjdHQ/i/ubq1ra64usPV0lhEP0lQPkRaaGpj9su+x9bSxs1zT0ZNRz8+\nPlNf9d3XwL7BztnPe1RJRUc/QElOX/La3uy8rbrAta6xwcLlTlo5LystLisuNT5u1ce9ta2wuLm9\nx9xVTkNHSkJKU3zee/rTvcHazMXR611HPkJGOzlGTmzbzcK+uLzHyNP2TkNCP0FCP0lbee3Z1da9\nsbW9u7Syv9JrT047LysqLi4vNUXew7+4s7CvtrvG1txOQz49RUJHT1jc3dbCw7q6v77O0m9EQzg6\nODc+Qld7z8PHvb3Eydf2T0xQR0BGSk9e/+Ld3dnKsrG8trextcjZP0M7LSsmKSwvO0LvwLeysK+v\nsrnB71dLPzw2Oz4/XPzY0Mu+ube6vL7G02hBOzo3NjY9QU3XzsnBv77FydhWVk5JSERMT1rq5NXV\n0Mja5L+1vb27vbzBwVw9PC8uKyoqLDxG3Me+tLKtsbO6zdhZTT87PTtATVvl0Ma/wby2ur3A0nBQ\nSDkyNDM2PUhT+s3Dvbm7wsjTdFVIQ0RGTEtQbN/UzcrIyN/aure+vMTCwMDMQTsxLjMuLiw2Q1nF\nwr++ubW3u87rUk5MRUY9RFzgycfGw8C+wcW/xtf9Vkg8OTQ0NzpBTXnRxL27u73AyuJjTEpHR0tK\nV2Dy4t3P19HZcOC+vby3vr3Av8hSQi8tLC0vLjU2T8q9t7q4u7i4wcxZSkRMWktOUGLXyMDFyM3Y\nz8PBzOdTQj8/PDc2OT5Nd9DFwr++vL7G1lhJSElLSk5PWH713t/f3t3W7NK+vLi2uLu/x9xdQzQt\nLCwuMzY6RXzKv7u6urq7vr/I4mBPTkxQUk5bed7Tz8/PxcDAwc37TT87OTk4Oj5EXtzHwr67vr/E\ny9hyWElGR0hLSEtRWm/vz8zQ0cW7ta+zu8TQ2mVLOy8rKiwvOD5KX9vAu7W0t7q/wszX/lRJQkZL\nU19u6t/d2dbOysTBxs7nWUU8Ojw9Pj9DUO7Iv728v8bKz+BlTklFRUlJUVtoffjk39XS0cK6trOy\ntr3J1GlIOi8sKSosMDpEXN7Gu7eysrO5vcPV7lpKQz5CRElVZ/rs1czBvLu5u8HZUkM4NjQ0Njg/\nSe/Kvre2uLy/yNt7UUY/PT5ARk9WZHHqz8zHw7m0tLC0ucLT+kk+NC0qKSsuNj5P7Mq9uba0tLe7\nv8vYblZKRENESE9ZbeHSzMi9u7u7wNNWQDgzMzI0Nz5KcMi9uLa2uL3C0PhWSEI+Pj5BSVJle+7Z\n0c/KvLS0sLK5v8zXW0Q4LSooKi0zPUhs0b+3s7Cys7i+yeBqS0E+PD0/Sll7287HwLy4uLm+y25F\nOzMxMDE1OkZZ0r+5tbS2u8DL7VRGQT08PUBGTmB169vOzMvBta+vr7S8w9P0RDgvKSkpLC82P07W\nv7aysrG1uLzC1lRGPTs9P0VLXufRwr6+vLi3ubvKWj41Ly4vMDI4QmLMurS0tbW6v8fdT0I+Pz8/\nRERJXevez8/t1biurq6zusHDyEs3LScmKCwsLztVw7OsrrGys7S7yFY7ODk7PD4/SenBuLa6wb22\nt7vMWT85OTIuLS40QvnPw7y3tLS3wdL8VktBQT5BTllke9nR187XXOC4s7i6urm/vM0+MywrKCgr\nKjNRxri0r6+urbHA/FBDPTs5NztJaNjJvbe4u8C+v9HUbU5BOzgyNjk+SVjn0r+8vL/JzvF9Yk1I\nRldq8eZw5dnP1OxvTEu+s8HCv7Kzu75DNzMwLSQnKjFK2r+6r6qrr7bA3m9NPDM0O0BVZu3MuLG3\nv8m+ymlXQkM+Qj04QUd869TQyrzCye9kaFFMPz9CTuzczcrJ0M/F1mVOUT9Pr7fOvLSruL/VODkv\nKyYiKi89YsS2r6upr7u/1k89NjMyPUZP68a5sq6zuszRy1A+Ozw7Oj8/THHa19G/w7/H1vhXTkJE\nQUJOWHPaxr6/wdDf4P5SRUo/Q7au6r2trrLf0jsyNSQnJyw1Pt7Arqusra+81P1BNi8uND5R+M+9\nr6yutru/214/OTc1ODc/UlrfzsHAvsDM0eNdR0FAQUNGVWTjzcK9x8rQ4tpZSEdBPeKpvtuqq6rH\n12suNSUgJCkxM0+8rKmpq6uyxF81MCwqKzZQf8C3raqmqrm960Y6Mi4tNzlBZNfLyL6+wMDT92pS\nR0A/RkxSUmDd1cnGycbP/PnmVUZOQTq9p83BqKqt3d9CLTEfHyUrNTjnr6alq6yruNs7LC4uKyo4\n376yrqunpK3K90o+LCotMkI/WNi9usK+xcTrTkdKSz4/RF/e3OvaysjFytLzY15hT0hTTTpzpLDP\nq6qpv2dMLDIlHSEpND5Ru6ihpa+ttNhBKikqLS0wZbirq6qopKm/UDc5LScqL0lS2MW6r7rB1tVi\nQDw6QkhLRWbNxcvby8rI1PDwY1VVUU1nelU47p+v2a6tqsNdOSg3Jx0hLD5L4rqqnqK4u73TPSon\nKDU8PG2zqKmsrayvyT0uLTAtKzRVwrq6ura1w11CQT48OTxN5tjeyb/Ezet69eh1T0hLfXdVb+XT\nWEiupL+6r7Gw9UYoKjIfHyc4Tsq4tKSfqcfZeT4vJyYtP17Yvqqlp6m1tsdONCgrLDQ8P9O4rbG9\nv8HPRDg4Oz1AREvSvr3K08nY6VJIWWVfTFX56Nbh389wT7GpxrW2ubpWTigrMSMnKj1fwrW0qaWs\nyeJMPDIsLC1H2Me7ramrrrjJd080KystOlfezLuvsLzH9EpGPTUzQmdgadS/uL7RaWLqYE5DQ132\n8GFh4dTG2Evura2/tru3v/pAJy8uKCkrPlO/ubetqa3Cf0c+NS8uL0TYwbyxrayttspPWUMzLi8+\nSPja0767vtdtWF9QPz5K7nFt3cy/ydtYW+L/XUlRcXdrVX/c3t9rSeKtvMa2v7TOzE8tPy4vLS47\nO9TNvLi1sby+4GZISEc6Pkp22M/KxL+6vtjc5OJeTl5PYl9NTkdTT0xRWuzi1czKzc3W6OzxWEZU\nY2BefNjPytHQ3uDkWk9QTlBPUXBW6M7kytHPzN/Mz/brXvnlVFhMR0xNTElTb27u1tDX5erv+fF8\nZWNu6t3SyMvFxsvTeHJQRkZFSk5Xa+/a2OTe1eJkV2VvbG9oeODd6el/8O56f2b98W94+tva6uPr\n9nxdWVRcY1pi89zWzsvMy83X7GxYTkpNS0tPWlxk6t7q7+nq5t7c9+nf7/L47mxdcu/s4drX0dHW\n3/H/W0xLSUxRU15q49XQz9PR2uh1XGJgW1tw6ePa19bW2eVqWllVTkxRWGb17+TZ09Td3trb3nVz\na19vW1teX3xo9+bu1tfZ1uTj/WtlUlJTVVddb/be2tjc2dn3a2lqbmZmaXPm7Obt6dvs6nBr92lt\nXWjy6tzt497j3n1lY19cW2FqaW1vb+3n6Pbw4uPl8Pf7fnFpaGZtZmx1/fTy4uzh4uvqb3FeXWZh\nbnfv5Nvb3d3c2/R7/nNvYGFiY3dqbGVndWx6c3ju73tz7Obt6+zu+fx2bXdtYWF49fPo4uPh3d7n\n5d7pfHNsamRfXF9rZ2lv/Ofp6uXp7H90cmtqbGVhaXXy6d/b3+Tt7ej6Y11kaXDz6vPv8Pp5bHZu\nd3NkZGtsb+/n7Ojm3d3p6fz99W5oYGFmYWpmePHs3tzY19zf6f5sZVpaXF1dZXn96e3s5OPpcnf4\ncWt5c3rv9//13uLs73n/7/dyaW/8/vx4c/bt6v1tb2pwenJsbnvw8nZsa397c/Tx7enn5OHe5e70\n9HxsZ2lqcfx3fXtua2VmYmVwdHP77eni4+Ti3uPx/HhxbGZkav3p9fXr5uljV2Td5VFO7MvVW1/P\nyXtOZs/ZTUVuzu1NVM/D01hT3c9vSEzcxtdOR2/N4U1JecfLelRe3tdrTlnaztb4Vk1d1NNkXNXH\nze5WTmTZ+UxU2M3nUVXh1F1J8sreS07f3FBF97/A3Vdb+ehRRO3AxXdSWmJ27nXhzttaWFhPXurt\n6MzRWVB6/mHu1tnX31xPZOH+etfYa1tlXlRr3Oxt4txbV93bWF/R1lpf1eBWaNHYZerN9UtY3mFG\nX9DyTmbM0FlZ0tNcW9XO73Hhc05dz9FjX9x4SEzr33Df1GZR/NxrZdzcZ3Hd8V1v6mtm499u+d5r\nUnLV5HHc22JSbudnbeZsUV3lbFjly9tm6NLlZvjrYWTk5Vxb4+hYXd3afvrb8Vlj5O5me+5qaerm\nZGTk6V9n4N5//uf3anb19PXq/mJs7fBraPvq+3d9fv5+cGVs9uzv7enyff3u9m986vFhYvvrdW/m\n4v375vRpbPhpXW3t+XH98/pzeXt29ef6ZnLk6Wtv5d71b3X173p2+Pj28H9tbPr+bHHy92386vF1\ncffvfXH08n/16PFy/fj6d3z3e2tqcm1mbnVwc3ry7ejk5t/j+3L67Xtz8PJtZnT9bmRt+35+6+l2\na/z6bG7i2uZ8b29vf/H0fPHlbVxs5utu//H3f/v4bm3792hm/fJuavHtePXp+3Pu3u1v+up1Y21/\n+/r2e2ht+Pxx8uLm8fbtfnv9cWx56+x5fvttZG5/cnrv6/1+8Phz/+bqffru/XJ993Fw6+b3bHT4\ncG/98v756/NtZmtqX2Z++P9+7fB+6+X8e+be8Gt47vduf+v0b3Ftc318+e/l5vlxbG9pX2BodP3x\n7err8fN8c2x58PV4d/Hq5+vw6+fq93b/fnh6a25vbmtsbnV7efz58/1ydnjx6+3p4OL3bW50ff54\ndG96/nz++PPx+nZ99vv3/HR8fnl4+/r38vl0bnv1+Prv7f15em5oaXV8+vLr6+3l4uTxfft3bGpx\ne/X7eHX5+HRuaW9xbWhoevz89e3u8+rm6efs7+3x+nl4b2xqbGlla3Z3bnT+/vjs7PX++/D4+e3m\n5+np7vfz9P//dWhmZWVqb/bu8OzufHz0+H5/9fl7/3xuaGz79X59+/p7fP319vfz7vX5+fLw+Xx1\ncPzm7X189vN9e/1yefd5a2Zqa2dobW949PH8eP/37ens7Onp7/Tw9Pj49Pz6/nVxdnpydG94+v16\ncHFrZWdv+Onj5N/g7Pb/cm5wevr8+3h4/v358/5vdHFoaHP++frx7fn+9Ofk7vj9/3d0b3F0cXx1\nb/3w8fn07uzw9+7q7v5wbnJ8em9mbGxtfHp5/Pf7ff/7eXd3b3707Onq6u3p6/J7e392cXB++fr2\n6ej2cnBta25xcv7x8Pv9/nhuaWtw+O/09PT7fvbv7vb++/r6/n18/n93bmx1/O7u7/b6+nx2fPb5\n9+7u/3v/9u/1+ff+em9sampufvx8cnv9+/Dt8np6fndzdHj/8+7u7Ov4/f9zcG92/Pz97u338vX7\nf3/4ff7v7vpxb3Jvb21ram16+PXx+fz8d3Vy/+/v7err8fXv7fN3aWVpdP748/n69PZ7dnJxe3t+\n+O/s7vT9/PT2+vp9en/6+fr0/Xh1cnRzb3J9/3z89e/o6vJ+fPz4/nNycHFvbXJ4fvn5fP328fH2\n9O/29f17/v7+/vr9/Pv5+nx4/v5+fnp+/PrzfG95e3Z4dH35/H55bmx0+fLz7/Hz8PD2fHpwaGt1\n9vrx5eLk7PH8eXt6dW1rb3d3fv559ft1eHt7fvp7ffTu8vj59vf9/3p9+PX07fX79/j8dGplaHT/\nf3h8dXn38u7q6Ojr7vN7d3t3fvx0evj39X92bW5ubXR79vx5eXd3c3Z5fvj29/747enw+Pfv7PL+\n+vb+cm5zfH/7/frx+/93amhv/Pb+e/58eXz98vDy8fLv+H17eHJybnHz7uzz+fh+enZ9+/358+/x\n+v39/fjx+nNwdnx4dv//dGxtbXJ8/Hz88uzq7O3s7fH1eXl0dm9qbWtscn337u7s6Ojo6u/+fP3+\nem5sbm9xe/j4fXt4dn72+fj7fH12dnRvcv/6+/n9+fb08/x4ef/38O3v7ezr8vf2fH14bmlkZnD9\n8e7u9nt4e/vy7O7z+3Bsb25vfvLw+vr4+PP+//x2dXf+/3Nwb3b57Ors7e/3+PD0/Xlvam12+O7v\n8/P1fHh2dnJtbnf98u729fv99/X1+nNtamVsd3T+7efq9Pjk4Xx46uX0d/RuZGFaXWBiYGV//Pn2\n7dfL0OP7e/fz6n9hWVRdePXr7/Tg29vj9evrfGxdWlpcZGlyc2lx+fnt29nl8X3w3ebv72pdW2zm\n6vJmX+HX2+RgXHfW21tTVllzcOzf8nhhd9LV0uJPV+rb12xRVVJq19ra/Vpfb9jM1fJNUOtnfl1m\n12lMTem/yv5sa+rpX+bR3VRN299iXU5Y38fOV01cfM7F1GhNSlbYzWRSVWjn+ePQ2d/nd31tYV11\n6G9sV0tc487GzGpQWeHP0tTzVVNWTklpzc1URW7Qztvr7vLa1v9VVG1eT2Pl1v5X3cXF2Gxt5tlu\nSUdZ6vRdXXvt3+vm32pmYmb0b25v3s33WFJc3s7S91lVadTI21BP/tDW8FhGT+rO1G1fad/Z5+Pt\n7fBsaGNmaV5ibuvX5lhWaM/I2VVAR+LBxf9LQ0rSvL7dRj5N1L3B7kY+R+/JyN5JP1DOv8fuTEpe\n0cbP81pj5t3f9m1YUFlaWVhk7OPofOvW09Pia15gant2YFpe7ODl6nRq+t3W0+RdU1vu1+FcUVZt\n5dzkb2Ju49TP2XJYVv7a3ndZUlVfdOTY3uxqc9fS319OUl145+p2X2H53c3M3Gpi6tnc+VlQVV7/\n/WJeY37i19bZ5vHy8uju+m9gXVpp7vhqXmL55OHqemhjbXj+fH18/XNlae3d5erz9vV9+/P6b19c\nXX7j6H5reeLdXjw8yqumtz8+uqWqXSYjNGBTMSYpOtSzr7rfYcKrqsE5LDrdy1I4OlLOwsHByuF1\n4M7gRzc3Q0M2R6+gorLOrZydvCwiLT8rGxcdLUVYdMKwraqjn6e+TU3UXS4kKDz7X0vhuLC1vr69\n0Ew9Pz41LzRKaU1CWMW8uKeen6eyrqKnWiQgKzMiFhUfQVhARserpq2wq6y3yt3cYDkwP+9YPkbG\nsbXU+LyzzT0yOD84LTBJfGFsxra2yLuinqzOx6qnyywoSHArHB4vSDMlLM2w0T1Ysam5V3O3r8ZP\n5bavv1paxr3aQzxCSUY9Oz9HRkdc08LH0c7CvsXP087LzOph8tnZdlNLTl52W0lJT1pUSD49RlJg\nYmXv08nEwsHCydPheFxWUk5SXGR159jQztDS0dPW3PJcSEJKZWVOWt7m0sG9wM7Mxcra9llPV0s9\nOTs/UWlNP0FszNBhUs66vN1X4snNX1nv2W5FSfPObkxkxrrKXmDOyu9VVFlNPzI+sLs6xq2prMXN\ntqxWLz87LysgIjdELirYtcXCybGkq728sbjVUDY/X0s2PO3g5VPPwsx8Ws3pSjw/SEZIT1ro0tba\n4vrSp7RIpqm0rO+3ung3JlMtHCYiKS4qMlK2vtauqquuuK6uw9bn5vJDSOxRWmBcY0vq6nBkQVRZ\nPj0/SlRbZnjJxNTNyeRUsa09rqp0pr/Gr1rfOj4tHi0fHiopOEtZ9renraymq6ytyc+8Tj0/P0s/\nSlBZ80/MzEv/3/JHPk5PTkNL52xl3+DNzNdvzKr4VaHSxaxfr85NZUVFICw3IistND9O6cuvuryp\nrMC9r91k3PV5QU9mzvE/zs1UXPTnW1JWTUxCR1lEQ1j64mfhyd3T9VutvTmotWaqwbTF5cxAdyku\nPyQpLzsyOH1bwcbJtLbCxq7HTrzH0+fUycrNZMnvTd/hRjpYUT44OUc9OERp9WHTwcrCvcjZ3K++\nPqm55qzHtsjG0T5vLDA1JCQtNio2Vk3aysG5sbrArsDgsr/Oz7nJY8Tr1WZFYmFHOkhFNTlKPDxU\nYfJk7MnPy8nHwmZOvbM8xaZbt6q0xNu0TVI5KTIqJiU5Linz7Er5sbbPr7u7tN3Hu8Bx0bVn273q\nV1XNUUNNO0pCOT5RRDxu9kv6zNLiyMve3m1ZXrNsRqO5yq2srVyzwDlNKy0pJScnOSov3txW2624\nvLG4vL272Lu+Y8HE2f7Py13t6k9QSzw+RTs6Qj8+SktK/d7dxMjW28/JXO6wvX+vq6+2uq7HyGgw\nOSslJCcuKzM9SdLZzL+7usG9yNbJxMnSwrzCvcHFv8nU9/dTPUI8OTw5OTc7Pz5KVGzLysnBwMHJ\n0szvYMS5u7i3sq+1t85vRjY2KyYoKiwwPEJKZN7MyMG/v7/Gv8XDvb+8wb6+wsTR12NcS0JEPDs7\nPT07QkZEWF5t1NDQzMTO1srN4eHX/OrJv8bDubm+wcXoaFs/OzcxMTMzMzlEQkzf29bBvr+9vcDD\nv8nRy9zi1dTd5NbfcfRdTlhaS0ZIQT9APz9ITlF839bRycjFws7Ryby8xry2v8O/y95iTT02Ni4v\nMjE4PUBLX+DZysHIw8HHz8bBzM3NytPg29XM2dvU72lgcFBESUE+PT5APkdMWX3r1NDExMjByM3I\nur3Iu7zFy83OdmhLPjsyMTM2OTlHTFHt69bSzcfWzdHXzMvHycfS2M/Ny8/N1+Xpa11XVVBJRkE+\nPT5BRUpXaG3az83FxMPJ1dvHvcfFvMLLysnV2OxPSD43NTk5Nz1BRElVam7g3NjVz87OxL/Bw8bL\nzsrM0c3S3OLnZ1VcWk1BPz09PTxGS05catvTycTIxsrO29vAv8nCv8bMxMnS0P1QRz03Njk2Nz0+\nP0hXXu7Q1M3IysrHxMjDydfPz9LRysrT19z5aWJZVktCQ0A9PURMSlFneN7d1s3N0dXcZWTHv8y/\nur/Fv73Fw9BmUz01NDY0Mjo+PUdPWm7g2dPN1M7Gx8jDyM/LzNDFvsHJx9D7fVtRWU9GQT45Oj4/\nRU1XWGH19NjT08rK2HTOur29t7m9v8PJzNDzUEE3MzY2Njo9PkBJTVR07t7Ozs/Ly8rHwsbNzMnH\nxMfKzNLh73tkXlpORT47Ojw+PkZMTl935M7IycbIzdbtz7q9xb+/y9XOzcnI1vhSPTY4OTU3PT0+\nQ0dKXuzZyszPzcrKzMjJx8vMyse+vr68v81lSkNCQDw7NzY4Oz9JVmZ56uPW0NfZ1NpdXLusqKWn\nqLLQczw3LigqJCcuPdPGtrbF3UE8PD1FTm7+2MS6sa2sr7bNYU5GTFvx4e5kVFFQSkI+OTc5P1N3\n0MjLzM/LxsjTXUtEPkI+YK2koJ+prtc/PSorIx8mJ0PHsqmuttRKOzIyMTVA87+vqqyuu9B8ZeVq\nW1BL6cq/uLzUSTYwLzE1OD9NaM7Cvr7L3vTv4N7gY1BQTFFWRlasoaCdrLpfMDsrLCYeKixPuK+t\nt8haQzk0MDdAW7Ouq629wmjt3F/5R2rKw7S5wPVFPDY3MjAvNT5nxcC9z9nS0L/HxM/l02NhSjs5\nNTw51Z+enJ62vEs1MiEgHB85XbOqs7m+ztRHMCgmOm+wpq6xxc/E0udFO0R8wrK1v9lLUE9OPS8u\nLTpfz8bU3ejOvb7C1vtt8tZ3SDo1OEJezuBMrJmbm6lOPSkqKB4fHi3Ot6mrv76+z2owJSIvyLGm\nqbu+v8HYRDMyRryztrjV3cvY+z8wLC47S17iaP7Dw8bP6/nw0NtdXVlaWkc8QvfKxea8nJ6ipkY/\nLCUtHyQmL8C3rqy/y711Ry0kKTW5rq2ptbe70UsvLjtZxLq+trq8v21HNzQ3Njo/RPLEyMDQ72p8\nz/p8W1fj2NtYS0FDWunG5UmonKOfxD5BKTQkHiYn77e9srXGs7tWMCQsMd+zva+xsbHGVDMwPXjH\nw8bHuLa52Dw3NkdANDY5Wcy/yODu+M3Lyu5T5tvN2FA/OTtIZdXGaMqcnaWrQks8MC8dHyY4uL3K\nuby5r8VCKik5QcvEybazrrn0SD1IV17a7OC+r7DLTUNOSD4tKDVJwbzQzNTByNjUVVBb9HFaV0Q/\nPEr5zLu2vLujo6y5PD05MjMmKjFBxv1azsW7wNhMOUVjWFNWd8S8vsz5zsfCwtjd2tveU1VXT35S\nVFZJSkZVX1JSWFNv29fN1c3Hxs5XQjw2O0vuwLi4vqifr7lpQ2Q7MigmLjhNXkd/uL3Dyth0XV5H\nP0jy2s/S1cO/vcHIxcfVb11yak4/RltiXEhDRFXmeU5KZXvX1d7S0snDzPdMREI8SWruyLy/v6Wp\nwsHlxdU/MScvNTI1Mzruvr/Oybm9yeNkVVdrTkdK6M7MxsK4t7y8wt1bSkE4Ozw9PztEasrO23Lv\ny8/Ua2f93M7Q+WReW2ZbbP/ayL27xu7Nw/daRFRtTE5HWGRVUU5UU1tWV1516efc2dLR1NPa3epx\n79XO2+Pd4OltaWdhZWlbXF9hbl9kV1T76+d0XPTVzM51WlNTYVVRX+fMycjJ097lbF1ZVl5YU1hd\nYGduft/Sx8nPztDQ2O9cTVBZTk9ZVVZbaXl7X1hdYmp42dnX0tDT3dXa7PtoZGj16PTp6uPf4+1e\nWE9LTUlLWHPWzcnN3NzZ5unxcPn4fXtoal9YXVtk4+Ln73fr9/l6aujb3dXY4eTt5HhaWFNTTUpN\nVWj74dvZ19rxaGNiY2Nw/drNz8zNys3Z3WRVT01WWGNzcOr47edzZWRoevX/a19famhfY2Lv5+rZ\n1tHY4upxZ11aYWFgb+/azc3S3e/6Z1lZWmR84tzl3N7raFtYT05PWnbu5NzSz9jnbFlTUltm9d7V\nzc3S2eJ1bWZaXVhYWlpcXnT1eXn57efk4dvW2tre6XllZ2Jjce7e2NjZ5Xp0XU9NTlFabO/o4Nre\n5vJjWFlXZvXs3trQ0NPbfmdcXVxbaeja0tPZ3OnzalpYX2JcXF991s7kYFlWWnDteHfr6vVxb/77\n8HhhYWPo3NO+zmrPV1BmRGJ0Zel33dHb2+9f82hcZ1RabOvY29Xfbv1dWmFYZPbi6fLf4/H6ZF1n\naGljbvTj1tzm4ujvcWtuY3nj4+Hx+f5nY1dWX2vn4uTX29ze/G9fX2tu/nd+6eXk8Hd4WFhfXGFg\nc+Ha3ODh9XN1927t53nW2unc6/TzbGtjWV5XWf1rcHxocnh5d1302+vY3One2+B/bm1mc/BlYOrp\n7Oh0dmtxXVtyXvDd/uPlfvhr/vpr315g9v7j5vfufm7dc1voYvjp9dxm2upvz07f703vUt5sX9ld\n5edc8Wr97VbcdFfNZW7bdNZs9c5Y3dtX03Fb32Vt7mT8bV3+/mnhZ2XWY3veWv5taed1Xt99a9x1\n2/pv32vg4fpu3l5e3llv4lnw7mzedOfdT8tiS8tSdNZU1/NXzEpewz7Yzj/CX1rNRszsTdjfb+fy\n4N7z1l/qYPhsSc71Ss9wXslYWtNLy21LwUxozkboz1Hc31rKVlG/Qs3KO75dRsBCeMg8wGVOv0be\nyUbp3UnMZUzFYufx6N9t72R5VtdV9PVf1VLNWVnIQ+nBPuTAQsp3acI6yck2um46u0ZVvkXk0ErS\n6k/WZnzia2LRWWbKSX6+R0y4P/++PcDsVMc8z9Q6zNg+xGtNzGnuXvfPS87eS8ZT2X55z0HIbk/P\nUuRrbPBOymhf2HvcSct+VtBS0nRlzkntxkdbvj7N6VPNU95pT9RmT+fhUcpaW8JT639fykjd007Q\naVzcVtxZd2th4GH78e3mbOjp3F/d3GPScXT44lTX30HIbELGRP7PSvfneW7eTsNySbtF+Lw5xNRO\n1FbffWbdTOlwf+dRYsNlS9hcz15Vy0zW2kzVWtvgU+rWf1bW62J93Wtn1d9ySc/TOMLmOr1ZTcZN\n5NZKzlzd1krP0FfXX3Dx7nRBx9ZB0NhM3s1I02f/zkPTykPly0HLYk29QWnAQuTGP9fWVdNOVsJP\nfNhNwFlP29hQ6cw8zMtF8d3RXtrWT2fGQkzIXEzRdljFe/Lca8RRSbtDU79AX8RAaddO0W5JyFp6\nyUfcykvZ2kq+VVnBS835SMZqUMtCYcU8yn5Hv0Vqwj7Q1D6+WFHFTtrJOr/TOLRCTbo5w+o9uFk/\nu05PxEbj00vPelHJUv/MTdrsTNBqWddP1OpNx1puw0PgykLIT3PsSsRNWsRRVb1JZcNL1PRazT7F\nXUPCckng4+dVyFtZyf5iaM1yblbeblzIS1XHXutY7utyaF5b1exZ3O5qz1Vv43LQSs3SPrxYScRW\n6mdfzFJX2lBqzUbxz0TKc2jJSsvXU8926HBf5eBg/t9K3N9X01bj81DYVnHRWlrqzVF57V/PWt7e\nT8/cTdlq49E6zck6xdg8vnLj5j+yTDqzP0K9TV/vXcBFX7tB8MREz95e11PPU1bcWVr+3kze1Fvc\n2uLnX8vvScv2RfjcW176425hzlZbxF1R1Fnx5WlwacxhTNLyUM7hRtrEV0zN0kvd31ZtynFL3OBb\nXM1OW75PXvrP7kXN7UXO6kvQ2PtqdMxVSb9FRr1JU97dzkTJxUPJxUXqzX5NZMtRSsZtP8zrTlzn\ny0Vvw01vyllv32faXu3VUNXKSMvRR81Y/95FzWRCz2NQ4F3XfVnHaHbMcVrl2mpv8HVg9OdbbM9f\nXOtvX3b+XH3e71vi6mzQaW7V+vRi79tse9tT/dBKZNvu723tbGbU9k/p1V5id/Xx8vpq489waule\n6ORcW1rW9krg8WPydvZ189trXtXl/f//4vF27+dv+/fucmnp6ldp3VRfc11tbOPyftjd89/d4eNy\n7/Zy4350f2LebWZhXmRUXV9cYWh0ZevdbHzd2+9w4HH21nhp793tYOzmZ//pX13m1OJOTc20yuy+\nw7y9elVJT0cuLzQxOzs+Wsq6vcO3s7e82WpXXFQ+OVn78d3cw7+8zHbp22BDPz9DSEZAVtnR29rK\nwr3G5OXZ41xIR0FLXkYv/5292qTHpqVZaiU9UBkkIh1LOknFvZ+kraa0s7JMOS0yPis2Q0u4uLCr\nram3y+M8PDApKyoyPkN+07yxtLe8u77nW0pBQz9EPz1NVWnaZFKqnLSvqreiwjoyHzAiGyUbLcrb\ntK+lnaWmuG/NPS0qIyw0PHZ+r6imn6ittdVnLyomJCwpKz1Zwr24sLawuMzPXV5cREpBSGdOT0xN\n2tfrUbmeqq+qv626Ni8eIyIcJx8rvrWopqKgpqa+PzMpKysmKDTTtrSpoaanqLHUPi8mKSolKzdJ\nW8ayuLGsuMLP22hHRz1EZEdEWVliWlFt2M7P6dSooKutvMWzWywhHiEeJiwr3K6noKGjq7PBOSwp\nICcvMVDFrKSjoKittF85LCEiKzRJQu7EtarJx85t0kpKNkDdWNff/cvL1Pdlc1dNVVzt2tvZ1qui\nrrPS58RALCEgIyQ2SVO+rqegpbPYUTotMColNFy+r6uoqKWu2VY5Ki4yMztGzr61vdrMclBGPzo8\nUmHhxsC+t8TY0WJHPUA9P1dY7Mm/vbe/Vuuuq8RfP1PLWTosKCk0eWND5bqsqK69Rzo/Pj8vL0jN\ntbCwsrO1wepKNC8zP+ja+/rNwthjRDpGZHzkbNm/wLzM3flDTUg+Pj1f0cG8zNLIwMjkRS02sKe3\n13/Ivr/gLR8fLVTpdNrDsKaltjgrLjg/PT5IyauiprLD2kw6NTEsKjbSrqy1xcvLzVc1Ly9M3ePk\nctrEucD8S1JdXWVWTU/Yv7zH+FdLTE5FNi/JoaGnrLjB80cuHBkdJ0TIsKqtpaCoxy4kIiY5Tu7J\nt6ajqbJ2NSwtNDs8Reu4q6mvxlA+ODUyLzVKzbiztbq/w9NjRTo3PEhUZ+jMwb7B6UY8QUdHSDzg\nopuep7xhOjItHhodKmyvpaKpsK+3XisfHiE1wa6qqqmorLZnLiUkKz3Tvbu2tK+utd82LC0yP0pJ\nS+G4srG4zWJJSEg7Nzk+Vc69ury9yV9PST46P1hZTbCbnqWr5TIsMSoeHyc0xaWfqbjE5VI+LCEg\nLsaro6Oyv8XK7DcrJypMtamstsLTx7/dOy4rLT5d2t7cw7y0tsxOODY6QU9XddXDuri5v99GOj0/\nP0NOZNe+rp+jrq1aLy0lJyEkNEK5p6Wnrb1iPS0oIyg5YLaopamvt+hEODQyNU7QtK60uN9UXUpD\nOzg2OVrPx8TG1N7O4VlBPEVY0MnN2OXOyMfR+FRERk9cUVjr+d61p62usEs5LisuKDM3O8myq6uy\nzlc+NjQrLz1wsqqmrLnJTD47Nzc+T8iyr6/HUz8/7FpVQjI4R9nZ0s3Zyb2610xBOD5O6Ode1ca7\ntLnPRzo2NztDSUx+tZ+fpKXjNi4nKiEmLjPEqqWlrMJaPC8tJigzVLCloKWyv14/OC8sMDzzsKqt\nucvtOjtUTU9HQjxC3eLczs3Jwb3oRzw6P1jIz9HIzsnEwfo6ODc6Te3c0b6yqaeor1w5LCgtLTQ2\nPdm9r6yvyWFFNTUxNDhQu6+qq7XPS0E7OjxASuW1r7O8x2Y4QGNgXU0+NEfh79PUz9PEv25NPzpC\nbdDu5tvSwr3DZUtDRFpy3uzkyruvq6u+XTorLS0yNTZIa76xr7fK7Eg/PDUzOFnDsKutt89qRz09\nOzg74ry2rLLMTz9P4cxuPDM2S2nZ3PjJv7m+40IyMz903ubf9Mi3t8JcPTU9ctvuaeS5paSlsT00\nKSovKS8tPsezqq645WleQz0xLjRduauprbjcaFNDPDM1Om21r7TF1vJ711tGOTg+R+v7ZnHgxry3\nx1s+OT5BUlVP7869trfCf0Y8PkVNUlxww6ejpqXBRTIpKiMoKy5xt6qprLp9X0A2LiotOtSup6is\nutttSzwwLjRAxK+wt7vRbc7iTjszNDZc4/jf3c7At7/nTT07QVplW1zhxrixutlHODg8TVpX+c23\nqqanr/I/LisrKiwsOu64qqqvxepSPjovKy5AyK6oqq+9zO1KPDIuNF++s7C3wl910HdWOjEuOml9\n0tzZyru0xvRDODtLemFjaNm/tbLEXz03Oj5QTlTlsqSnoq5hQS0sJicqKDzVsamoq7/QXTovKygs\nQMWsqKeruMdxRTQuLTBHv6+ztru/ydhTNC8vND9c6X3MwL26u81UTkpCQUtPT+vNxL26v95cRDk3\nQE5Y7cyupqShtFs2KSklKCksSMerqKivyttKOzAqKS5NvKqnqK67yXFCMCwrMFW8srWytb3E3kEw\nLS0wQuXIv7y9vr3D90s/Oj5JWF9n2M3AubrKX0hAPkFITWXtyq6np6i8YTktLScpKS5Nyq6trrXJ\n0F1GNS0sMk7Crq2tr7W80k01LSsxTcu9ube1t8RjSUI5Njc8RHjGxb++v8fV7EhAP0FOXXb93Mm/\nwdJkTUZGRUZf3cnLya2nqa7OPi4tLyssLjFMxK6ts7rN2N9UOi4uNU/GuLW5uLe6wOE/MDE+VNPD\nxc3NxbzB7jwvLzlHWWRs0762t8X+RUFNXWFNSE34wLq/zv9SUGRkW1dWQ1Wqp6yu3Fs5QEgnKScs\nSc2uuL24urG72TcpKzRIbM/NxLKrq7XKRzQ6QkE+PUdpvq60vMTdcUhANC41PnPRwry/vsXVXkZE\nQEJIVnnUwb69yuNqU15ycEQ70rKpqrbKRU5dPS8lJSk52sjFx76vrK7EPzIxPExVUE7nvK+ttc1y\nZ+9sSTozOFLc0c3BvcPL8Uw+Oz8/SmDfzcW/ytPe/1lKRUBKfNDKy87f39LO3Ew6WbeurbjL3ejY\nTjIoJSs3RV977sSuqK2+az49RUc9NzxXxrWxtLzFysnOVz85NzpJZe/ZzcnIydZfSkNCRVBa9NHK\nxsnN23JfUkdGSlbrzcnJy87W3GA1Lv2+ta68sr63uFxGJSYnKzgzTUTMrqint7zmd2VKQjAyOVPL\nwrzAwby5uMXtVERCQUpNRUpNavb842n5bu3d49rq3ePl4u72XF1XT1Nc3dnZzMzN2eJwTj0uQs7B\nrr68ub+xyMU+LDErODM7Ojnez7S2vMTMvca9y1RGP05PVlNEVePFvL/Dz9bO29pwTklAQD9FSUZP\nWF7nyb/Ax8jKzs3qXEc/R05nYGjv4cvExtX3ZU48Q+Z7w8jdwc28x8m+TE8/Pko9Sjo8Rkft7eN1\n3srFvb7C3PV0aOtpY1Vc+Hvj9Xz079XP0+hwa1VWVlBPS09UZvbq2M/Kzc/U29/oc1xSWFlc/mBe\nWlx5cNzq/Oj7fGjf7+nc28zb2NfTytXcfl5aU05OTkhKSE9VT15YYv532drPx8jAxs7P29jf/e9f\nX1tQVk9UVFR0fe/t8fNvbXJobHRtfWZw79zN0dfe4t3reGxcVVpaZ2NeZmvl3+r/7err6Ofh/u/9\n/NjX1Nrc2N/kalhQSkdAQURFTVp53dnMy8nExsLM0dnm1eTkblVWTVRUWF9danHt/292bvlmWldb\nbXLp4+Pe39XZ3t3l4ubr7GtfXWv8/fNycfb4bl1ZWFlea+fd19POyMbIztz/XFdOTE1ISUdMWFdn\nZ2zv8djc3dPTzM3Nz9rc4ep7Z11ZW2FycndoXV5bXV5iZWNqb2735efm3tjT0M7V3O55eWVoXFVY\nWWZyfnBpc3X/fn3z5t7c29rV3Onrend0cmZeY15gZF5kYWJeVltcX2v/6ePZ0s/Nz9DY2dje5n9u\nXlpeYGpiYV9faVtaVVRaWm587d7b0dfTz9bT3OPvanBtbGZYWFdXWFVZWmzl2c7NzM/U2d7ubmBY\nXWJmb214/fLt/nVhV1ZVV1hdYWdw/Ove2djU0dDR1NTY2uHn6/prW1hTU1dYWlZYXmZvcnf/9PPx\n5eDf3NfT19re5/B0d25jXFRVW2Vsbv/349rZ2+bu8/Lt6ezv7O3s/HFoXF1bXF1dYmNkam50cWdu\ncP3v6uLj3djSz8/O1N7pemxmYFpVVlteYGNeXV9mcnNzd/bl3dve4+fm5N7d4+rt+XFrb2lmbWZm\naW5zaXJ2e+7o4uTj39/k6O55Z2dnYWJhYWBla29+cHd/+vR6ff788e3d08/Q19nc4up9ZFhUVllY\nWFlXXWlue3R+9vLp6+vq5tza2tvd3uDl7v1xdG9pa2tsbG9pYmVnbW968/Pt6/T7e3F0b293eHd0\n/n597e/2fXBzdvb9+PDw7Ofc2dnb4+ns6u11bmViZWZoX15cX2JjbXJ2dnh2eXt78+nn4d/f5ebk\n5uXt8X1pbW9zd29qY2NlcH/+8e3z7erp7XZ1+u3m5fD29fDs93txZ2ViZmhrb2txbnBpa3l88PLw\n7u3s6+fm6Ovt7e/4+n53enFvbGxyd/v1+ff09ff7/Prw7e/u9nl0dX76/P9tam1tbm52fHb9+/n7\n+/j68e3x8u/n5u/5fHRtZmJfYGVrfPjw9PPx8u7x8+7q5ent7Ovo6urt7Oz8enZxa2JfX2RkZWhq\ncnr8fnv9fvb27uTp6Ont6evs7O3v9nZxbmptbGdnaGpsbWlobXnx6ubh4eLl5+rz/H17/X78+/p9\ncHNzeX18/3z79Pjz8vl2cnZ99X52cm5qaXF9++/t8PX7+nhydvzx8vDv6+7t7vf1+X59d3Zva21v\nfPr8dXB6eXt0e358eG5vefbx9vn6+PDw7Obj5+36dXJvbXj2e2djan/y8fh8/f77+fv3+Pf2/n19\nfHr68u3n7Ovs9P59c25vaGdkY2huePnv7Ozw9fb29+7v+f/8/Xx9+v16eXd2d//19/Hq6ezv8vz7\n+nZydXhwbGxyc3F6/Pfz7u3o5enuf21paGpqZWt7+PH08/x7+vt3b21ucf3v7e3w9P58/3x99u7s\n7ezr6+3z7/v+dWpobHNwdf768PH6/nd8/P76/fHv8/d3en3//fr4/25vb2psdHRwdXz87Orw8Pf7\ndm5zd3d79fXs6OLh5uz59fH5c25+fnd1b2Zpe/z4fW9xeHt7dG5tbnF89uzl4uTl5Obs+XJrZWdo\naW13/vHx8+vz+nlubXR6/vL9fW9ob3d++fr97+bi5vD39fn/e358bW13+vXy+Hx+/Pj4+/Xv8fp5\nffX8dnVtbnt+eHFzcW5ub37x6+nv8Pj79v73+XNvbnBycHn7+vry7u/v7ezr7Ovs9fp2bm1sbG3+\n+3707/Dt8Pf3e29rbG9tc3l/+Pf5e3Jsb3z4/nj87+/v8f15cnZ3e/j8+fj28e/r7vD3+P1+cWtp\nb/3z5Obr7e/xdGxqam91/v379/H0+318dG5zbG1sbHN7+O7r6OTk6vX4e3R0b3Nyefr19/P29/X5\n+3ZzcnFwc3n9+Pr68evq7Ozx/nZ4b294bmlxdnX58e/xffjv7/P/d21pam94/vl/ffv59O/u8PP0\n9Pn3+395dXlzcG90fHj68vDu9vf0+Pv5/Xv/fX74dm1zeXp6+3z77+3r7Oru7/t0cnJ0dnr7+fh5\ndm5sbnB++vl6c3F0fvvx9f31+fXv9fD3/ff+/nx/+/rv7u7y8u7t9XtvaWhmY2Zwb3b4+vf4fv/1\n7/H3ff3z7vDz93z9/nr79/Hu9fj6fnBtaGdpbHd8fff07e/v8X13dnN3+PH08O7z7u/283h3bGZv\nfPj48OzzfPn29fR/eHh6cG5rbHB69fH0/PHu7vb9/3x+evTu7/Dy9f59dXh1d3h6fnZtbnv3+v18\nfP55/vZ9eXZ5/P337u7v+/7+9u7x/XV2e3z9+3xvc3FveH/9+/58eHf36+rp7/n69fHy+v38/v58\nem9ydHFxdndvb21z++zt7+/q6vL6b253fPh+fX59+e/z9PH0e3N7/nlyc3N/9fjv7u3o6efp+Pl4\nbW1qc3RsaWRfY2lwevv69Onr8PH1+Pb16+vv7+/v9O7u7vD8cWp0dm5uamx1bnF8/vn2+e3p7fL9\nffz49/l9e316cnF3fvx9dXF9/fny8/T18/H49/P093RramhnbHZ0fX96cXjt6eTi6Ozv8u/w9Pn1\n+Hhyb3h+/X50dHz/eXRvd317/3x3f3x3enRta252fvju6u7y7u/3+PHu8vTydnP09fX18fF7b2tt\neXx7bWxwa21tbnTx5efn5uvq6/1xamJjbPzu7Onn6enp5+jzcF9WUVFWXWh87eDZ0s/O1/9v/njn\n6evtZGtjavFzbWNYWFZd8Oje3Ofoe/zj5t7xZmJaX3Du29/k6X/49O3vaF1XVV5p697j6v567ufg\n5O3zam3/6+Dg4/ZtaWppb21oZGJvevPr6+9vZ2Vlbfr1fnj77OPb2N3m+W9rcP19d2xra2307fP9\nbmlgXmV16+Dd3Nzb3urzbGRdWFhSUE5W3Me9ur7I9U9JQ0NBQUhO/Mq/u77L8E1DQEFMXerSzMXE\nyczfZ1VOUVZh8evf4+77YFtXUlJUYevZ0dTb3uPc1dnk+mpbWF5tfHR59fzq6fr7ZV5eWVRNTmXb\nx7/CydtqWVBNTFBf8djPz9jvdmxgW1VTVlx+3Nba5PH57uHwZmFt59nc3PNj9evh5PJ1WmNiXG1s\nZVVLUt7Dvr/Lc09MVlhVW09OY9zOz8/L2PRoVE5NXPfj0dDgc1xWVVliXFtlbvPd1d3u397q6+nd\n3vDo/HTo3dddPDlsubKts/U7MjY8QUtIQ13Gt7K500c2NTxGXNnCvLm2vM9YQEBIXeff52xjd+zq\nak9IRkxe89rX19LSzc7V3332cXTucF9bTjhRraytrN02LS46Oj1KP0nLuLO73lI+OklWVXrXwbex\nscJiPztKbNvhWEtJX8/G0FtDPkRaeF1NTWnNvbvA2W/t3NfnWkU/QUjLqKSqsGc1LSw1Mi82PvO3\nrq69W0U+Oz8/PUjcubCtrLrtTUpUZ3VMPDxI7snBy3FPUml0WkM3N0rHtrO621/ozcjkRjk5RERi\nqJ2ip7g8LCYrKyMrNku1qKWt7Eg+Njs6MzhWtqmoq889Q13HuL75OjhGX9znVkZN1sbWTDgzO27A\nvsfS3trAucBiPjo3Q+nO11bLoJugqkgkHx8sLioyNtipoqKxPy0pLDpAWNnAq6WntE00MV+ys8FI\nODxTx81YPT9b3ddPOzM848G/11pb7r62vvk/O0Bh0s/d29DKp5uks0UnKSYvLyQoLtuno6a3Oi0x\nO0g8PlXJqKGltD8tM9+0ts9BP2rBv+U/ND1zx9JFMi8868S/1ldqxba3xVo9O0he4srKzMjD4cmj\no7TLNS0pKC8mJi9Qraapr1YwN0VSPjdFfK+goq1uNi05zsbWT1/GtbPPPS0zSNTTTDw0P/7Kxd7t\n2cvCzM/nW+zW1lZBTW7Mvsx4P0Wqn6mvPyssLUQuJSgp36Whpr8+OUHzUzEvOcypoqTDNi463by8\n2lzbvLnKTTIvOEzt/1NDRmTb2ORcYd7Fvb7A0WdQT0xESE1fz8rM1EnWo6Orr0k6Ly01IB8mLL+o\npKa71OBd/zkpKSxat62puMq+vbu/0EYzPvDO1WtDQVTT0lg+MDM9Vs3Fvr/BvcXR90xLTXjW7/tW\nR0dJW23e1b+joq2t70U3KzgpJS4tR87Hs8LKuMbA0kU9NUR5c87V8NbGt7a/w8fNxsh9PjIvMDxc\n+Onw4e7q2OVZTll23M/GztzKz+lgSUM/RFzuysHJ2li9p7C2u0VKTmH+MS0rJzpdWl1GdbiuqbPu\nRkNXXE0+Mjnluq+vus/PtrfJVDg2PU5PPTo+R+fLytL63OdwXE1a/NrIw8PSXWxeUFxfcUxKS0mo\nnKuqu0/WP0EnGSEmNM/Yy8WyoqexZy8sMElFO0nuvauptcvTyNhPREdGXtHU8uTbXE9COTU5SFP6\ny8vPwbu7wtZfU11fWUc9QkzyzOne2E6smai2vD57OzAoGSo5OslR2Laupbl0TzZCPzc3MVe6uLCy\nuLS0ufBBRjRDwfxoe9PEWEw1LUJMSUxI5svCv82+wtXW/N9iQkI6P/bq2c3HvM7KoKDNxVBD2zE0\nJSBSNjxiOMO4uK3Z3Ns8TDs3X07Ivd+5trWvv8rwS3NvVkU+UXZvUkRHRlFqS0dFUePj19/ZwsTC\nwc7nVFpYRUxMaM7Iub2+xl3Nwf9eREtxSGXaU0Y/RktCSk1BRVvb1dDGwL2+wMhuT0pETF3oyr+6\nvcbK2W5LPjw8RVP04mdbZuznYFFQVeXHydlxX+/q9Oh18tTT2vdjdn9w/tzd6ePt3+Lty8DEzNf3\nVUhBPDU1Oz5JYerW2s/O2tDO3ObdzszX1dzTyc3S2NXT7/VkR0RESEc/S0xN8/nvZFf29tPK2dTO\nzMnNz+1y4ufk2c3O2s7OcWfp6W1gaE0+Pj89Oj5GR1H94tfb2c7PxcPJytnf1tnV4t3P1cbFz8/o\naEw+Pz0+RERFRlhw+OLl7OTPyM3P1uPi4NXa8+p1fNPIytLNxcrRzdB1TkY/Ozg4OTo9Rk5UdOHR\nztPOz87LysTIzc/T0Nnb0M7Oz8/Y6ub4WEg+Ozk4Ojk8RlX50si/vr6+x8zX4dvg4Xhk9X/u0dLa\n18nBz9nN3mVPRTw1ODs6PkZLT1/14NXPzs7KzdfRxsTKy8vP08/Q3+fe5eXe7GdTST86Ojs7PkVM\nWenZ08rDwcnP0dXQz9bb3uH2cNvLzNDLxcnNzdxpVUo+NzU0Njo+REpdeunWzMrKys3V0MvIx8PC\nx8zS09nZ3PL6cWVXTU1HQT87OzxBS05b9dnKxsPCyMnM0tPd4+Dn6t/PztTQycfO0M7nbGtWRz05\nMzE2Ojw/SE9q08jHxL7CxsnQ1s/GwMG+vsXJ0N36VUxHQkNBQEJDRkM/QUVMV23g0cfAvr7CytDa\n7ev3WFzEuL28vLm4wsxPRj8yLyorLjI4N0Zt1c3Kvry4ub/AxMrgeFxe29nZyry5v8PI2fROPzs6\nNTA0OkBKTlZt0s7QzMvMzcrIyM/h5O1/ZVVP7LzPzLKztcW+xlxcNjczLSoqODE4SWXUzLvCurm9\nvMPC8ebZUVra0fbKusbDvs7e3V0/Pz0xMTgyNUROTfLKxr+5vMK9xM/N3V9SXVtSV1fIwey5r7a+\nvrb+VEU2MisrKS8wMEls4NO2srq3t7jDyNBoeEtCc95W7Lu/1MC+1vJyT0NFOTU9OjRAWktYz8nM\nwLq+vsLP1N5ZTllNSVFbU8S93bSttr61s1pLRTYsKispLi81Snjjz7W0u7Swt8fJy29bSlHbX1vP\nvcvTvcTcfnpTRD42OTo2N0dOS3jSzcu/vL2+xMrJ0mdXTkRJWU9JxLd8vqqvxsGz6zxFOi0rKyot\nMTQ/1s7Xuq+zubSyvcfJ4FtIPUr0VljIvcvNvsLdeWBGQjs0Njk3OUlfXuLEwL28u7y/xtPW8lBH\nREZNUEdJv7Lbw6iuv8O9yUM+NCsvKyUrNj0+Y7+7urOwr7C3wdPRdD49RUpKXdDRxby/v8LO+F9N\nPDU4NDA5PkBN5s3Hu7m7uLi+y8/ZVUdKRkRHTWH65+K/r7rGuLu/5E1LOjs0LDE1Ojk7U9nJxb67\nuLW9yMrH4lNZT01QVPDez8rMxsjN52NZTkM6PTw8QkRS/tXJxsTAvMLFydfXaExNTk1IUmRn39vY\n1tTM3GhZUV3ubVvv3dHM2uT03uFVSkpJS0ZBSFhtbPHWy8jCxMbIzt7bxd9Wa/53V1RQTFtiTEtU\nVFJPTFPq2+3m2MnL59zS29Lc59rTzuFp5txkUF1pSD7ku993x8C+2mhSRk9BMzQ8RUdHYc2+ur7D\nvrrF7FpaUkpMQ0JI57zDx7+5tsRyRURIOjIzOkZYX3bNvLzL1szL3WRYWm35Z1JX2dXo6NrT4uHw\nQEWurnrP1La0RD0tMkMpKy43z8zEubCor7/NeVdCOTU2PnTVy8C+tK+0utJpTD04Li40PUtOfs2/\nu77FyMnQ+2ljYmJjaV9ob3l2aFtXVWjuZ/TeQEKqobTWUa2uSzUgLDgqODJJyLynrbrC5tk9LC0x\nO0rYv7euqaqxw1tLTj4zMkHq3Nr34cz2YkxHUElfalNm58bC0dPd1dxYWU9a9WBkYm7fed/gaEY2\nvqCqxkLNqbtDJygsK0VaYFh1rqeu0To2Ozo4NzpMx6+qrrjDv8hJNjc7QFTKtLnI083VRzQyPklQ\nX/vNzcjDv8dbTFZUSD1CXHHUxb/Ay9fb/UY7Pj45Xquho67Csb0/KR8fIic4yLmyrqumr28vKCgt\nMz3YvK+pp6ey40EyLjE7RExN562gp8U8Nk5KNi8uP3zGtLvdXv7Ew1U7OERg9eDUxsLDzfFWREBJ\nU0hLtJ+gp7zhwGguJB0eJiv1r66pr6+qwTwrIicyPdC3sq2sra29STgtKztizs5uz66kqMczKzI3\nNzQyQGXArrC50Vts3Gg/NDVF8szAu73B0uDeXkE3OD7Jp6Gkrc/e3zssIRsgKDe7r6qnr6uu2D4m\nHicvTLqxrKuur7DFRi4mKz3xw7/PybSpqME5KSo1OTc4RNi8sK2wwF1BRExEODdDbMq8t7a8z1tJ\nSERCOi9Hq52dp9Nh4T8wJRweISzJrKSkr66qsuYsHh4nONW3r6ytrquuyDomIi1P1df4yK6orLxO\nNS0rLjtMWn/Ot66wvltBPj5ARE1cbejGubW6z1ZDQEFFST492amen6vOb+tBLiMcHyQu3q+koqqu\nr7jeLyAeJzRbwLasqKqprLpWLCInM0hYSVS4op6lzC8pKzA1NTpJ6bytqq7HQjtLcG1CNz1twre6\nx+BeV1lWT0k/P2q5q6iruMbcVEEyKCMhJzjWsamnqa20xFozJyQoMUjhv7OrqKmvve0/NjQzOD1E\n5bmtq7XhQjk3ODY3Plbcxru4ucToWU5NS0ZHUurLwL7F0elYTUdCPz9NxK6nqLC9x/FBMCkkJCcu\nQtK1qqeqscL4RzkzNDc8RE/dvrSvsbnJ6fHZ3F5DOTxRzr/B2U5CQD9IT1ptYWPjzcG+yd5xWk9K\nRlHiysPL3vtre3xfTURBRmnBsaursr7eTkA6Mi4tLTA6TNa8tLK0u8r2WFdcXVZLSElLXOLMwr/A\nxMfIytFxSkdPeOtVQz5AR0lNWt/LxsTKzc7V5GdTTUQ/RFrQw8XS39vQ2WlTTk5PVH7LvLaztbrI\nY0M8Ojg2MzI3PUlkz765ur7GysvVclNSXV9TS0xh1sjFycvM0dna1MzO6VVDOzg2OD5JXN7Kw7++\nvr7E0H1RQz9BSVZi79fPzMvMz9v3XlZSUl3qxreytL7mTkI+PDcyMDM5Q1nTvbSyt73J3W5ZUE1M\nSUhHTmzRwb7Cy8/Nx8rZcFped2ZKOzY4PUhY7M3Cv8TNz87P41hKRENGTm/Pwr/CzN9pWVlaUUlE\nTdu6rquuuddMPDk2Mi4tLjI+eb6yrq+1v83c8mhTRDw5Oj9P28O+vb/Cw8PFyM3jTz05PUtcVUU9\nQVnRwL7Dzd9mVl5/9F9KQ0hf2cnFx8nO2+xvXVZMS05RW9e6ramuwFpEQ0I6MCsqLTZI2Luxr7O5\nvb2/0Fc8NTQ4P05918zFv7q2t77bTUNITEc/PUNc39PU2NrX1dbX6l5NTFvt2uJqWWN86uX1aVpb\nZP7c2uP/aW99ZFFuvq2qs89RXuR1Qi8qKCwzR8y7ub67sq2zz0U4ODg4OD5P8sy+sq2tuM3tYk5A\nOzk7Qkpq0cfM297a0NlpTEtbbOnj4uvz7u3d7ltKRk1e59nU2+7p2NDebEk4PsaqqbXJ1sK9zFI2\nKSEjLkp3YnXHr6mqscZPOTlAST42OEvMt66utMDLx8fUTzoyMTlFX1tMS2fIvbvD2ltV5tDO/1NN\nVvHr33NTS05s3tTc+mdt5NfcfltUXF5V5se8u766wb/J3F45Ni0yNDlEPVJaxb69vMi/ycHL5VxH\nTEpUXmR5+s/Fvr7H2F1XTUZCPz8/Sl/lz8jIz9HOzcvO22hTVFx5+mpYU1hq/m9gWF3t0MvN1N/q\n5O34XFFMS1Nbee/d2dfSzcrW32RcUU1QTldQXGnm0c7O2drm6fP49W/+/vr7bWRZVlNQVVdeX33a\nzMbHys3U3nBbUE1NTlRi79rPy8nM1P9YTEhJSk9e993U0M3Kzdv7Z2VcVE5PWG3r3NXQ0tXe7mxW\nTUxRW2BcYW/q29rZ29jU09HS09rrd2ZbVFBPT1FSU1do7N3W1dHP1N/1dW1mXlhbZHD57uLc3uf7\n+O14YVxcY2z++uzf4ePw8err73xxbf3t3tvb5XVtZWJbWVZZX2t2++zq729uc/jp6+Pm4+Hg3t/f\n7XNnZmZjXVtaYvLf3OXo6OTk5e1tYl9fZHBycnB57+zm5eXp8nlucn/9cGZlY2JfYWj55d7e29jZ\n19fY3vZoV1BOUVhYXWN+5dzZ3uT4+fzt5/B1Z2xw6eTi8nR2b/Pw731qZWh3/f9tZ3X47unj3uLp\n7uvo+2ZYW2Fpd3f+e/Dp5+Dp7fxtYl9jZWVkbvzt597X09LY3Nve7WtaU1FTVFhYXGV87uni4ODm\n6ejf3uXs93p2/352Y19r9efv/nV77efwfG9nX19qefZ4cHn35d7i7fZ0bmxrcXX++evn5eHp9fnw\n7X5ramxqY2Jja/z3+PLr5OTo6uzs7vlxb29sY2Nrcv7z8X52fv3x7vD39u7v7/f6emxzePn9c3J6\n+/D6e/Pu6uv2/Xt0b3j++PP9fHp5d3Nuamtt/fj7/m9qaG366+zv8PTv7/Pv93Nte+7m4+Lk5/D5\neGhhY2dqbXF2bnz16uXn5ODf6/1wbWdeX15fZG707+7p6Ojs8/337uz0/n/98PTu8vn/b21oampp\naGptcv7v6+nn5unr7u3q7/F+dGtkY217e3pyb33t5eTs8vl/e3p1amZgZm5+7efo7e/z7uvo7XNo\nbmdz7+vh5vBqYl5bYmf+7+Hj7fr26OTf6uj9a2ltbnJ4bnNuenv78Ovz/PT8e2pmZ23+8vTu8Xr9\n9PD89u/m39/i9nFpbW9ubmhmZmdnbXfv6OTl5env+P/2+vd9efz58Pl6ffz8cW1w/3Zw//3z/nx9\nfHVrZWVvfPHr7PHw8u3q6e52d25vbGx0dvnp6+no7Pt0cnVvZVxz4uDc6vZqYWFiem/w9+rm6eD5\n63t7b2ZpZHj24+Xm7np7bXJrZGhw9+zo8ft++/Pu6u3v+29qaXf/fvv8fX767ujr7n54eW5ta256\n+eXp93p+9/X3bl5ZWV1r9+rf3eDe2t/g6PT9amJcWVpcYXDu5drZ3eHl72tmX2FoaW96+erl6uns\n7Pd5/f3z8v56amJfY21rbfLm3dfb4uxxYVlcXmVqd/ju5+3o7d/g5e1xbGJw/fPs7vH5enzu9vfv\n7vtqZmVnZV5cYH3r497f5evr6/Du8X59e/79dnr8b21mZmx1cm/+7uzr7352b3B2e/ju7eTh3uP2\n+3ZocGZeXWRrbPvr6ujn8nd6en17e/nl3dnZ6Hz6b2hlZmxcZW1idHT3//Xtam1yeere3Nzs8/5h\nee7o7Hnx/mpxefh7aG9nZvD9evh363htffTj+Ori4uvw/vXs7PRfYFpVY2z68+7s7PV++mtqdvDo\n4+Df3Oj47X9rZltaXWfn4efi/W1lYWheavXk5/bv4ff25fXv9uz8Zf3x/nh/+mZZaf7v5+zjenfy\naWxy7ON3bnb76vbl2unp9m9zYGJkeOt7d2peY2rv6OjW2d7e929gZXdhVlNTVVv52NLO2Of3Y2/x\ncXN15tzcz9Pf8mxsc3p7d/J1YmpfWFVRUU9VbPvu6d/d29XU2uXzaFhWXmv03dra3+rvfeze3uhl\nUEtKVG7m3Nzmc19RS1XewravrrXGZj84Njk+SU9XVVRbbePc3e9aTEhNXubOyczacWJq6c3Dv8XV\ndldOTFJncvz3eWlGPc6tp6Kmr90tIyMjKjpdzcrJv8LBusRqPSwoKjLusqqnrsP2S1Pgyru+3U47\nOEBP2cnO21dDQkJMXGR38uTPx8PEzmpNPi0vuJ+alZqoZB4ZGRghLDXr772prKanyEEkGh0jPquf\nm5yquOREWUtFPS8/1r2ussdTLy87RNztPzYtMle+rKmxv2FEUGvY1k87LB8kuZePjJSsMBMPFBgn\nPD+/t6qanJ+sLRwVEh89r5qanKC65EM4PCwoKyz/ppyapMo5JSYvO008LSwvULWqqbLdRz9L3dDZ\nYz0zNEBH8Z2RlZiqTzMbGyAaICcutKefmq9TMBodIib7u62eoqGkvPwuIy0vS7Szqqesrc0/Oi0s\nLSoyNTRP/M65v8XPYdfT0L/ZbWVX1NDdVis2o5iXmrBNJRcdIiIzNk2vr6eqSz8tIS8vP7u7qaCn\npbZCMSIhLliupaWqvMO8zFkxJiYqOPPM0Uk4QWy/ucjXVkNf0Lu3w8jP4FEwKCAtn5CPk7Q0JBki\nLCYvJi6zrqeqPTovJkI9QL/Vrp+mpsYtKiEszLKhoK2+RUrSSzouKjpM2MlDMy4xc7yyuXpk18m2\ntcF1PENt92c4KSElp42MkK4qKSAmMR0bHSGynJ2gRSk4M1tpLDc+zJ6eorcrJys8sautse919P67\nzD8yLl24zkMpISpFuaivxV5OxrnBfjo5TtvC10MxKSkp3ZKLjp4+Mj8mJBoRGiPPmZylvipIzj01\nHBo3uZmRnrQzIzM/7cZHeretpa7M4DozOTdKPiwuMEDDvbi6Z1RPZ7/VX+TYu7fOWTgvLy02OfeW\nio2bPyIwIhsYEBs+rpSZrs4oL8g4Kx4abaCYlalQNik9Xjs/PdCinqS9MDZTYFs3MD0+Q0o/T3Pg\nxtJqY1nSvs97WFjLw39MQD5JPzc3rY6MmMghKz8jHRgXNr+nnLdPQi7FuiwjHSyjnZ+oSkPXXs5U\nLTntr5+nyDgnPrO4aDArVs1DMCg0ybm6yktXy764yF5QXtnVTTk8QUvebkCpkJGeRSE6TyMdGB3V\nsqupa0jkTrzHJh8jPqOeq7be6bTDQDAnM7ipp61aQcq+vlwtNFFNPiwoPcm7uuBJYdi/utZPVGrO\nxOtCPkNJTz8uP5uMkKc1Ls1GHRcWJM++uLnRvbS6ujocGyXno6SztK+srF4oJixara25x1a4o6xe\nKSM52EAuKC7TucTfWF7IxcrOfGbPwMr+PDVBTVFWNjWhjo+eRSzGyyAVEhtMwr60v76wu8dDHxsk\nQK+lraukp61lJCIuTLm2vbG1uqmpyy4gJk5cLiksWbO673dZX9b308TQ183Yy8xMREQ3Njgxr5CQ\nnb8+t6kqExAWMct+zb67q629aSkdIDPVsbCwpaGrvzgpNlXfxczHubqyrso6MztPSiwmLkHw11de\nzs/Lwr+/wt9g+2/z9E9GQzc3Nkmdj5WmzNCr0xkPEx9V2kZZwK6orcw7KCEpR8u7uLClpbHqOjla\n2+zl4sq5t73K6mR4STcuLC4yOkRn0sbBv729xvBpWll45M/aWks/OT88RKSSlKHG+7bMHxIUIE3b\nQT7UtK6zzUkxKS5cvrzNybCprdI+QPrCv87t+FNvua61bzs9Wz8pIic/zcru68e8vtTg5ndm7s7G\nz1FIT0k8ODc/rZWQmbY+Tc07HhgbKl3ZTj9EXMO0uNw1KTTBrbXsQ/W3s7vP5cq6t77gT1F22Nhr\nSD8+PjcxNEPs3WBQZ83BxtHSz8fBv7/iQjw9QUtLVcy6tK+tr75PNTQ+TlZtzb7FYjoxOUJEPjtF\n8dDX1MW6u9xJQ0lR7Ma+x93TvLS4xuV36fVPOi81WMXIXz08TGZRQz5DXs68ucLZ39nrXE9d1sLA\nxtXJur/3Sk/LvcrSysbePS4uOT43MThGTUdF4baxvdLd3Nnd28zP7eDIvsDO2sS5u90+NT1e2eNM\nOzc7QEZEQUr2yL/D2e/Uyc73WlrqzsjEz2hQ/sXDztTCtrbH3eFfQTYxMjU3OD1CQkFL5cW/x9nf\nz83Q1NbQycfEwcjPxbm3xlVEWt59Sz07OjY1OTw9Q1XTw8rb28i8v9F3/9DExM3mZ2BZTk3St7nF\nz8zE20pR6W8/MzdES0dCP0ZKR1Lo19DOzc/d+tzIwMrf2c3KyMzPzc3OztTgXkpDPjw7Oj1IUl1l\nZWx48dzX2dzg3tTMx8jR5H1v7dXL13PbydH0btvL2uTS1uhJOj0/PTw8Oj1I+MvQ8n7axcHK3eDZ\n2eT25tjPxr68v83W2vhURkBAQkZJS0tLS05XW2T33c7Q2dDLyszW3ePq5OHt7ebla0tQ1c/l3szA\nx9XQ2vpsSz07PT9CPz8+Q2fPy83c2szM1vhcXubSy8O/vL3I5W3l2WxNS01MTVVkW0tJSElSWVVf\ncN7LzdHY18zP4OtzauXed2hpYltISsu6xMS+vLjN19pLSz4wMTA4R0lkz8zFyd7ddE9XXGtoWO3T\nv7rBwsPH11haYW3sb2x5ZF9USEhCQERCVevd08/Iv7/L/F5tcmJNSFF22Nz9a2bn8UVerq68tcW7\nulxOLi45KzgyNOfTur7BvvnhUz9DPkhd2sS/vLe7xMDO/XJNV0dH6V/e1OveWk9HQkRAU+nn6d/I\nx8vN6/9jVVdTU15uferZ1Orn6VdbXlBNRcupsbm3zLTHVUkuPjUwPS9I98zG2sP3WVU+P0NPYdTF\nv7q3tb/Re1lqS0pNSVjry77AxtFcTUA9Q0FOaPnu7MvLz87U1n1RR0FNWvHZdnzj7+ddTUxO6d7u\n6bGjr7G6zsJGOCwqNy89R0jNw7/Lz9VJPj07SGzpz7+5ur3A0eRiU0tY1uHTzMfLzsn7akU8PTxE\nPVri3svezdHb51ZqWlJYUVhu4+3o2djf4ezq6FdOYuPdaMKnsLi5Yr1QNzQqPzI8UT3Mw73M99ZN\nRDw2Pld13cW9ube6w87U+FRaYFFZz73JzehW41U9OD1ER1pe4cjJ4ubZ7/lrVFDi13Xh3+v3/X9u\n3t12X0xKWn7t52varq67vd2+zVo/LDw7P0Q9Y+i/3Fl8U2FCPj5I3uLKxcK5vcDL3NZpYnRmz9Hg\ny8PMXkhHREE8OURYbevaztbP1W3n3fD9+ePf0NR2b11dXlxaUF1aTlp+3dLeYsWwsrjNyMTQ5Tk4\nOjxBOz8//tHe7GbxXWZIRFpm1N7MxcO5v8TL2tPi7Pt04OlmT2FrSUhBTFNOUE/y9tjU3+LgytvX\n1O/g9PFYVVVKWlpTX3Lq5+Hf5NrZ7FBPwLi4wd2/xcZwPkU7SEE+Pj16c9LgY2lUdlJbVVbW1svQ\n1MbFwcfZ2NrY519hVVhZTktKVGjneXrp5+duaV5n/N/W3dzhz8/d8l5cUVRPTU9QYnTe293e7d3m\n6FZD4sLByNrBv8HE7W5LTlBFPzc+RVR/8ttYYX7g3VxrXPvZ19PZyMTAxM7cevdiWk9ITExRW2Zz\nXmfs4uDx6uzc0c7M1Nfg2tl4a1FOUE1WTUxRXur6d3pv9O92Yllt4NTV3OJ02sS/x9THyM7V53ZY\nVE1LQTw8PEhMae5r5d7Lzc3L1t7s6PP4b2119+bu+2134uDvaGdtZWdmXl5jcuvo+vLd08/PzM7Y\n3XtcTExMTFBQW2Fs+/Pl5OXl9m1ofuz47OLf3N/j7P7z/nNiUU1d7d3j2tXa0NTP2N7W395uWE9P\nVlZfXV9bXF9cYlxfZWr+bGtmZe7g2tvY1NrW1dTT4Ofr9P5qZFxfbnz6c2tna3hta2Nq9/Df293c\n29Lc7nlfVk9UVU9RW2jx6/Vwa3plampn9vDo4d7d3NXQ0dPa5PDp5vf9eH79/nNiY1xXWWFrZGl7\n7d7b5Ozm4+j1a2JfXGRnb3Rpc2VfXl1lY2Zq/vX86d3W19XT1NLX2OLt7v7zaWZ2+HVfYGJiZFxa\nZWhpZWxyd+7v8Pjy7/Z7cHr07u37+f5t+XTz4+nq9ufe3+/+fnjxaWNqaf9/dnd+fvHyfPp0+npo\nbmVx+vn07fp8bXzu8/Tl5ODd3OHuemxjZ19aYlheXmxsXnBk4+Tu1e7U297dct777nd+63Prbu3y\n//RkfmdtYmNcbnTt/HPpeu13c/H77+/x9vX28XF7aGZ7Yvhs8uPk2/vp/HR/XWtfaO/z5OPp2uLh\nemJmXWliaWdr8WDtZe736OXj53fjfPF2/Xz66/7qfPz0aPxo7O306nju+mvyXnZoffly4mH1bHj6\nb+9l6GDZaWviW+l+6fjt4WvebeVp9Pdg3Fjg/vne8ezrdW9vbHz1XO1mdXn+YeToZ9dY3/pj1Fzb\ne/JudG5e207XVeF8aOda6GHk+/16bdpt3Otg3v9w3FfcY/jtX9pk3t1v2Wfnc2vzX3P2d/ZbaVx2\naG7hX9Jo3dhczlXe7V/tXfRb53Nw2W3eeOR1/WnfW+JxYd5i3WT39/Rv8PtseXX1bPvuYO596Gbi\ncWXaZ9n98/F5d1/qXfB+V9FQ3fZX0Ff2403c/1nTZ+/OVc/9ZMpP0f5azk/d50vTbUvLVP/dUdty\nZfvnU9xoVs9a79Vb4d5q6ut67mTqX/5wXONn+uPv6Nr+2nP042te4U/+21Ht30/f3FHPWVrOU9vt\nU8xiWcdUTMFN885U3HFy5XR3enxdaPPnY+jnaOj/6HF66Glq3uVQ3Wld3GZm+95q2/xay21p01l8\n1lN45k/V2krX1k3Y6Ej24Vht8VDd21Lk3F/Q1WDj4d5obt9N8NNQZc9wZHzZfE/IWlXMWO7eWd/m\nXOB3XX3oXu77U+T0Ws1XV8hXbshJ3tBT0vNP231e3P79el/i+m7q71rh6F/lbWDWcW3fXdtaWdti\n79ll5/df2GRj5Vzl+Fro32Df0Whw/e/7YGr4Wm5w42Zi21tp2W9n6Orl837m8+ZqedhY79hl4Hx2\n52To4XX9c3pubOtjXXH4ZvJ55V7k2lXa7mbqZO7qYHF7Xvjnd23t7/bqfN9p6Nlf7/Vr32Zn5WZj\nd3xgdO7gfnTe9lz05Whs6+/1ddruXu3da17993Rn5W9V7OVq7+x7d/7i6l7y7F5u3G9i8ujl9+h5\nc/np5m59715r7mP5f2796/3c7GHma2FuYmlodvZy/+rqcuHdcu386ODt4+1hfvRle3hdZ3/7+fzi\n6vfd6Gf59V9qZlt8bt/4ZuV9/uX9//7h9e/q63pv9mb9dml3amv+9/32bO3v/fJqfer0/Hpr73zq\n52p7+vv29/x3fW/2dnH9Xnd57+X76ffk8PT2aPrp63hl/P5s4WFXfWht9HDy4d3m++N5/XVw+ezp\naffz6en+b2x7aWxna2F59fvtb2z5/3nu9Xx68OPscu385/H263bj9vjk/Wfsbmp5W2Vsa3N2eG/+\n7vHs7/L06+X1fmn8fW98dnN+73r5afx6++h883l3eO38e3pp+nX2cPn68+Z46PH19m3t8XDofHZ9\n9/tu+n7+/HR7cX/8cfH5e+5weXpt/+319/l5eWdsbPt7b+/36+/y7fTv9O3u5/zt5vfx/P5vaW5v\ncXF1bHJqeXX/83fzf/z/d/V5cnZv/u/y6u7u8/v+c3txZm1qcP705+zf4uvsdv/0+X1wc3dubmtt\nc296fvHn5+fu7e33/3VmanBubHb2+/jt7Orv+fhxcHp/enB2bnb9d330/vh+ee/s9/v4/P528Ppx\n8/7z8/Lq+Hp/fHR3/Ptxb3Z7d3v4dHZ9d/zw9f54cm15+O7u6uju+frxev/9fHx4dnZraGppfv72\n7eju8fH37fP1d3F2ef17fn77enV6bXv99Pd+/nX+/Hp2/O/16efr9fb+dHFz8fx+9e3+fG1qaWht\na3vv8/Ln6O7r7fr6/Pz7ePXz+Pd9eWxsaWZna2Vjbml0+O7s7+rr8O/p9+vl5uHt+e3e3u9yXV1j\nY19fZmt8e/l0dvl0+Hxu9fnq2NDOzM3Q3exzWlZOSklMTFNdX+zd3NvZ2d/n8XJmbW52e3Fv9ebu\n5Onr4un/+HtxbHX5b3lrbvh7dnBxde/v79/Wz9fjad/Axc7Xev3n/Ek6PDs9RT4+SvrTx8DFycPD\n0OF2VFVeXltr2NTKwsfHyM75WkxBQ0NERVFbX+fg4NvR2untfW9ub2Bo/O/l7vx4+erybvNqcdPm\nRPqvu7u61sPHvkUuNywwODUwPs7CubK3wrm84ko/OThFSElXxru1sLi7wL7UVkk5OTo8Oj5MXebT\nzdjQzt9/bu188PNm6tzS2ufr8+DuX15ufNzd72ps+FtITsbMyLzSxMzE2URMNzg6Ojk4SFbOvrvE\nxL/GzONfS05YYFlcZvbOzMfPycbQzuluW1RUSklHRUhSVmd67uLpztXY3uzV3tfibW9rdvt2al1d\neu52ZF/959/ldGh0493e6+bZ0M3OzNDO0dzvXFFIQj88PDw+Q01YcdrNy8vJysrJzNPU0NHR0dDT\n1tjkfGVUTEhDRklJSUtSVl1qfOHY1dTU0c/OzM/X3eX/bGJVUlNcX2L23M/QzczKzNfZ7WpaUVJP\nTEpISU5UY2FeaXvy+3diaG7x7PHh28vHxcXJwsLEyNn0aFtWSkZGQkRFSEpLVmJ44+Xp3trb2djZ\n19vh5Ozq7PLv6upuXVpmb2/zycDKwsnTzej0TURFPkNDPEJKWuXWz9zX0drd6WlUXm5mZHP528fO\n0szHwMPG1Orfd1ZLRURHSURCSVFWam742dbW193Y19jgZmx47OtveXfm2tbf7NnuWdS1xM2978/d\nTD8wPzs2SztB4MjDy8HM7tZXQkRNUljd2tC+usDHvNVy4k5laO1dWNZ+cl9NRU9SRkpUXFx8cvPT\n1uvn3Nzb4vxz393l9nVfXubo4X5n2G5ftqzGvLrcykk4KytALjNEP9e6uMLAttJVTDw8TF1V68K7\nurzC79nKRERGSs/XzObIutpgQUFFRj47T93Q3t3SwcT6VFvz/VJIR/PL2mZb18nac2lr6txTP8Gj\nt8SzyLhqNyojPzErPkLMuba+ybTGPjU0O0hbXtS1rK++w8790D0xQ0ni4NDDv7TLT0dFPzg4Ok/X\n0+PXwL3F+E5t7FxHRVfjytzr2MvSYl9hdG5XZklErabJtrS4vzg3JStDKTNH1Lm8tsa+u00yLzk+\nQEzguq+st8a+0+NZNkRRafrtvr66w19PRT00NDpHZu3f0MTEyNZfaXVeTlJp+svJzc/Sz19cYE1R\nTlJRW1FvqKu6ssG3aTg1Jzs4MUBJxsPBwNXC20IzMT5CTmXRubCvvMDAy+JMTElPTU3BvsDH3dFW\nPjUxPURHVnzWzM3Lz8/Pb2tgXm9u4NbLzNza61tVVVpNUVdUbmtUvq62ucW+wkxJNDlCOkU7Rl/o\nzPfVzediSEhLWV1j3s/Cx8jCysXK1nlv2eTX0dvn62pKPz0+P0VMTFru39vWzc7b3N1yaeDW1NjV\n1N7o/1pfe3xfWf1nan9r409E0Mva3tq6vsTJeNhaSj44OjlDRlPu09Tb13TuaF5aXeZo3tLOy9HB\nwMG9xcvP3mhIQD8+Pj5CSln6dvfk6d/h5frx187N0crHzd5nXltgXElOZ+3e4N3k3+pWVVtXWFVf\n+d/P3N7V3+9aYHl43unc1dfZb19eaf5eWVtebl5UV1/o5t3X1tHe6PloZFlcVlVq7dzY1dXX3Opo\nT09SYOz04drT09/Q1uTxX2NaWVVRdeTd4+7uffdoVlVba11aXGfs6OXh2c/W1+Xv72poWVheVWBt\n6t1vbGB33+3d49jJzdTl5+HsdWVfVlNXXXr5dVtc/vlrUU9a79bncvzk3d7f8fXc2ebu/Hlt7ODv\n8F9ZY2RuY278/eTj73V9+f3t7+vr7vT89Obud2Zfefd1Z2dlef1rXltt7Nzb29no7PN0emZfV1t5\n9XN5dP/f6e/n5+fs3dv3/Xp4ZmZpWl5laO3s6eXf4/HnaF5VVnlodG7q5d3b5Of51uDe3l7o5/t0\nZWpSZFZX7lnmam3Z8tj2c2be9/v88u1y7HXketfuZNtpa/pabmBee+vw0lh7523cemrfV+L06Gdx\nYXboYs9b31v5zlrXU1/jY+xm+Vhw9Nfz/WV619zl5N76Ymry6Ff3T2Xabd5W6F/aee5oVN1Y+OH9\n2FjTXdXucnp76X7z7eJ58+Bv3WfgXGtjW/BYZGj4637vc+1u6Xzs7+j++N974vd57WjgZ/dXbVv0\nW/T33dT23HT0+VXhWdha7Wp71WXbaHT39t1VbGDs42j8ZfRn+Glxa33qbujWY+h14d/t4VvsY+/5\nW+lV4m13+WLUWM9j2Xv67GbZWOVu/Ntf32z0e1xoYP1a3Pvh6uFn7vny7l3+am/fV+NY6HTzel/z\n9Pvv4N3s02PQ/OJ8dvJcdV1nYF3xV919dnfu9314W3Ty7+Nf1O3j4/bf4mH1Zmr1X2HmWdVq1nXu\n/mflX2H4WeH5fuj5du1xce9fa/dd5/jk6d1q8uha32n963tq7H7u7uNy7+9v7V5//XB1YnZa6lty\n5W7t7G/Zb+TmXtFr3H748fffVtVP/elPzVRf1lfe21jn1krMXVTPUO1wbNzq6exk/t9b8XZs5evm\nbOl4avxkWdxY4OFV1mft513wcXb93mzu2mvabWfidF59b1zca1fWV3faXuVxb9vf/+h0cN73Udjq\nYdFXeddf2XtS2mht4FHhfl7fWu7eXddZXcpbbNhZ4tRk5Hdt3GV8YHTnYlxe3u73dv7u6+RkYfTu\ne2fqZ9h4WdHrcdJYWdlo/fFYeNVsX9ta5e55a1zbY2zt2/f02lnd3W1yYN7fWH3fVmt4Yu1Z31l+\n2Gjpa1zZbWXPVtjVTsV+XtJV8e9q42VV1V9qfWbtdGd53Vnb5lTNX17LeWnZVGTTXutcVdnyVXpp\n2N5K59Rt4vFIz8BMXMxs3O9Mc9/g7Up+xlxqdmDo/Vpv1WNnfGJ78Xd05dv3VezXYXfcbOLaVt9s\nUdrfY23gd13Q4k323n1WWNZ5V9RuXM3pa2r57VHz0VFzatzJT17Ue+LtXd3VbGxefdBLStBp61lT\n0fLa8FfR0l9l9vVreO5caNzhWGDW7/18Z+jl325fdtvbSWTKb2Ncfurb807d/vzrVe7p39xlb+Pp\nVN5oWtlg/NtP4M1V4u5Tzldf31PYbU/G5Vt6TdHcV/Nk2txi8n772m5Vas/rR2fM7E3vz99PTsvh\nTOrSU2G/80vdxeRG19VYc1l7W2fgUmHT5u5bb8xo995J2slPUt3db2Pb813O7UjN1U9kb33+aWBu\n3M57WNZOVdH4a/PMa0rW2WFwa9ds73VJXndtXend7u5a6s/t29rq6NzkWV/R4E9PbdvqSlXg1fZQ\nXuTT/FP40stYS9bUZlHk1VTx6HTVX1nl52NK3ddWU+PZ5N1aftjtaWnb3n/z+N/xTOPKXk3r2VZe\n5lt3z09Q0ttSU87obtF9a9zeW1LP6k9y6PJPedtb8+r46OrsYXLeZ2P56OP87N9y/Ofr9PvqZ2Dy\nWFr+92Nl4m9j5/tk8dx7btXeXnnc6X7p6OJ+6e9o7uj8cvB+Z2N5a1prY1VkYmNvcmZl6Ot7697a\n+ebZ6O/h4HTu5G5p5fZgaO3sXvj4YnP+d2lzbVvV11jMytrI1L7NZsxbVEs9Rzw7QT1ITU9x7M7H\ny8O/xsPLzs7n1+xr5GlqZGzyX2hoVltTU1tTXltbb2NtbOzZ6d7V2N/l1eL75mZmcWVlZn5nV3dp\nSFfE2VrIvbvVzrjM3fdrbUI9Ozc6PDs+TFxvaM3Cz8XFvsDMwc7Wztzw/N3uT1v1Vk1UX11OXFpQ\nW1JRV2D8W/vP5NbRzc/jztTr5O30Z2drWmRuXFpdXEhav11Wvr+638Wy6s/5WGU6QTcyPTo7PUt5\nWGHLxcfAwru+w77QytPm2O7oWld4XFdXWl9dWVlQU1tNS1RcX1lt3eje2NTW1M7b3tfa4vbl6mJs\nYlpZVl5PSmbL1VnGvcHFzbrJ3tZRWUY/PDQ8Pzw8SF1eW+LN0MTGyMDCvcvNwc3W6uLdXVZVT15Z\nT1VXYFNJVk9PVlNkXH3iaOzY0dLcysvU0NTO3OPgamxpXFRKVlZMUlZbXtPF7cy9vcTavsfv31pa\nRUVHOTxBQzw/V1tXZdbV1szMysrBwsrFx8vPzc3d5uF5X1tSTEhJRkFIR0VLUllZetvh187JyczE\nyM3N0Nbl/npVT1RLS0xQUUtfeVpfz8f0zr+/ws68ydjQZ2tKTUU4PT9AOj1LSk1Z6NzVxMLBv72/\nxsTGzMvV39xt/1laXktPRUZFP0RCRUlOWlpz2tPMyMLBw8HEyc/Z2uptW09PTUlHSlBVWFt4Zu3I\nztvBvb/JyL7Q3+tcWkVCPDk9Ozs7QkxNWvLZ0czDv8C+v8HAxcnPytT02OVnVGFcSUpHR0FDSEFI\nTFBZaNzk3M3Mx8jFxsnGz9re5m9TVVFRT0lPU1JVVV1fVti/4c+7u73Oubvm2Wf9Sz9EOTs5OTo8\nR0VObunk1sXFx8G8vcG/v8jGxtvj3uNOS2xLQURNRz1KTElMVWNY/ezq1c/LzMbFzcnJztvj415U\nU1NOSU5QTk5UWVlubm/ExGa9t77Ix7DZbsv+WDpIPzQ5Nzs4PEBHWWzs0L3BwLi1ur+6vMnNyupf\nZl5NQk1GP0lFREZPUUxgalxo7+Tl2tTPx8HIx8PK0dnbb11fTUtLSUlJVVJOXW36XGm9yFm6tcrJ\nu7J2775dSj5IOTE5NDo6O0BNbVjbv7/DurK6wbm4ydLG0FdhX09JRktCSUpJUU1RVnlgVfr9bXzX\n0uzSyMrRzMPO2t7ra1JST01MSFNTTlpfdnPwWsy4TMOux8XCrc5LumFDPEE9LjYzNjk2P1poXNG9\nwca5tLq/uLnGzMnEY1n1VFA+TlY/RUpiR0ZuV09N4elW9tzefNrKztDPx8vZ1tPhY2VdTktHTEtN\nUU1mav5w87zAVrOv1ru7s21ivT1FNzk4LTUxPzs5YO1l7r27w7y0tr2+u8DUz9f0VFZhUkhDaU8/\nT19QQVtvSktYdU1W4ePj48nEzMa+v8/Mx9tqXGtLQkpHSkdKVFFiWFW7vEqzrcq7uq59Z71AQzM4\nNC0wLUE5NV3a5mi6tcS7tbW9xbvB0trj1FVLbGdWQ3fcSU9n/UZCXEk/P1JPR17b0dvIvb7GwrvG\n09PW+k9SSUNDPEhLSE5Y22ZTt7VHtarHvr+s5km8QEI0NzcsMi0/PTZI0s1evbW6wLqwv8zGxc54\natdiTWTw7Eb8z1pfXf9KQ0lEQzw/SU5NY8zKxr63ur67w8jdfGlLTD09Sj1CTFNbTmTLsOrUpby/\nv7C3OcldPDctNy0wLjlUQUjNu87KuLTAzLu92W3e72NZW3r5/PrK09/GzMzqbG9EQTw6Ojc8PkZc\n6NLIvbm+vbrDzNPZdU1OSUVJQ09dTndOcbHGSq6rwcy7q0g72jo1KTEyLDQyXPley7mxvbyztMbc\nxdBPREZJRkJCWNnV1cS3t8LAuMddT0w+MDA3MzI5U+Tt0bu2vL+4ucrl1+hHP0tIQUhMXV5G9Ky8\nTqupsNXIqEg6PTg3ICgsLC4wYdDEva+qqrC0rrrRVl9VNTM2QDs3UOPJ0suzrrnCubzbQERFMS4u\nOTw5TtjFyMGzt77AxspnSkxLRz0+WXNab1/5r614vKWqwlevujIvMDwlHiosLi5LysC1sKuqqK+4\ns7zoPkVGNC46Pzo+W7/Izru0sMrJxN1WNz46NDU1UVFvyMK7vbm+z8fTTUNHQDo8UFRJ28jMWs+h\nsVOvrKnaS7dHPislMiYnIytFQ/rEr6qrq6uttsD4VEs5NjM4REZLa8m3tru5urbHXVZCPC4sMzI5\nPVDNwreysrS2uM5XT0g6LzI+Pj9R18S/uLjPv6Otbsu4p2srV1RGISE4LCsnOnzZtbexraepvs3D\nwz4sN0M9LzjYvtHXu6usvr2/vuA7Oi4yLysuM1/ffsavqrC4ubzOUzw5OzcxLz76fdjJurK3x1au\noMNOaKmoODQ/2zweIywxKik8Xr2vrrOvpKa9TdzEQi0tPEk5O1y4scS/s6mu02no1EcsKDE9NS42\n7MPLzryurrrX289pPDQ8Qz4+UNvKxL6+v8DbQsOnul9RraHZODfPWyMfIy8qJy9Hu66qrq+no61i\nPm1vNSgrR1Q/SMessr26rqzCZUdfTzQqKzg5PTpOxb66vrq1u8xqXlNFPDtARVPn18zFvL/PytM/\nR6yr0kPKn6lHLEXILx8cKC4qLzzIraanq62qprs/Mz1JMCYsR+twZ7yrrba0q7XlSE5YNCosNTg1\nPmPLzLu2uLq9v29JR0hDOT1FTm3ZwsLIw77I80c9zqewZVa2n648LEbbLR0aJS8tM0u5qKKkpqut\nrL9ALS02MikqO+PCw7irqbC6r7beOjlVNSkoNEQ6RHW/u7mztLjDy91UOzlEQDk3TcnH19i9t8d5\nZG8/Uqypv0bPoKNlJzLgPB8YIDE3N0a9qKOkpquyt79aMykqNTQtME+4sbavqau1ur/fQTE3OC4p\nLD9cXFPHsLG4vLe71lZQRjs5PEJETeLJy8vBusBtTGbZPzHOq63OU7KgqUYqM0MuHRwmNkRNyKql\nqKmprL5nRz8yJycvQVxT3rOnpaq0u8jHxU4rJzI9NikrV8C808ixrbTFzOJZRT8+ODhCa+Tu4si2\nu8/j+9pqTDwvSK6ltPLOpp60LyQtOyscGyVBz8e4qqanqau3cTg4PS4lJzrOxM+8qqOmr7zMVjpC\nTDUoKD7aUDVAva236t68uMtRRktQSElEP0rkwr/O28e9v+ZMRz8/Qz42Q66forbYrKCrOB4fKy4g\nHCI9vbWuqKanq664XjItMjUuKjH+uLCysKuorr1yPTs9Oi8rL0X6dv3Uu7W7wdTo6PBPPzxCWFpP\nTuzBvc3x3MrKaEZNWU5ARGvXekzGo56r1mayqckpHSEvLyQgK2m1sbCtqqqxvcxoPC8wOTs3O9qx\nrbK5r6244UQ9OjU1Ojw3PGq/vdXjw7vHWEZq1ftUUPLU2udpanNuXFRVX3pzWVnfzN5bW9nI7kja\nqqWyXFC1rM8rHyY4OCkkLtqys7Wvra+7x8loNCwyTF89OtitqbTCua603j0zNDc4NjQ4SNa/w8/N\nwL3E41Vm1NRgRkh10d1USVTf03ZRU/zW0+ZqX1xg/Ph4WU91u6qsvN3Nr7FVKiQuPDAnKTnNvb63\nsa+2vsnhQzMzOkVIStuyqquzvLe3yz8sKy0sLjlO6t3Brqu02G/Lx1A1OFTcWkR5vrrH9nDnZUxF\nQkZIWObf/mzfy8zvafvkfmy6rK253MOvu0kqJS42LSYoPMi+wruvrrXN2MtnPjc+79Rv3b2xssre\ny81iNy4yOD1GVt/Mw7i0vdhg/etOPD5a391p5cnGz2FLTVJNSEJGWOfLxcnT29nV32ZbWl9s88y0\nrq+1wsDIXzkqJykrKi00Tc+/sqyrr7nAv8tOOjhBUVRPaNLBvsfO1t5qTD48RVl2Y17cxcLVZHnc\n5GJYcdve9OvVzt9eVFZSR0FHUlxp4cnDyuD73dj/S0hh1c7ZzravsrzVzdFNNSsqLS4tMDtcxrqv\nrK2yub7H8EA4OkFNS03tyL6/x8fH0HBJPz5DTl1TTF7RvsLiXG/PzvJRWOLQ22pn++9kS0RGTFVc\nWmbizcXJ09nOy9NnT2Hf5FRJ2LWzv97ZvL9cNS4zOTQuMj9g1c67s7O4vr6+zk9BR1JSQkBa2M7c\n58zByPFSTlNOTVteWlzpxsbtUnDIwdpYdM3MdUdMaGNJPT9KUE9e3srEwLy9yuTm3W5BOD5c7FpJ\n57Gqrr3KurnnNy0vMi8qLTpK+d29r6+yuLe4xVY+QkdDOzpK79fa08O7vMvd8WFOQkdZWExN/szK\n3e7Lw8j3Wf/1WkZFTlJMRk9o/ffozcbKzszGz3ZZXmdUSERNeep77s2/vry4t793S1JeQS8rLz9F\nPT1Wwre5ura0ucTZ+1lCPD0/Qz9Id8zDyMa/vcd6Vl56W0hFU2pjWV3f0dHW1tHa7XdvXkxESFFU\nTk/4zMXKzMTAyOhYUVVPRT4/SmDezszFwsC5s7bEZ0xUWkEwLDA8RkNGXcu7ubq6ur3Fz+dYRz8/\nQD9BS2rXz87Hv7/I4fvl5FZESF/fbVRj2s3Z+n3q5/hvbmJWVl5xXlZad97h5+Ha1tvk71tSXXlg\nS0te1M3W0M3SwrS1vXdO1tRTMiw1PD84N03szce/tra7vsHG5VFKSEM/Pkhgdency7/ByNbj5Wxs\nVUpSX+5sT1Xt0N1fX9zR2mpf7uHoZ1hXWGBsXlZb7dPU4X3j3+t4XFZab+3m8e3Vy9LSvbq/3Fbe\n1F0/NDxFPTo3QF3s1cm/vby9vsTY8WpiT0FCRU5cWW7l1c3KyNDkc3na5llQVXDtXFNi7tbbe/7y\n1c/oY1hkdWRTTVNefPbu6O7o29LZ+Wdy7nRbUVj/5+De083X7trL0d57X+feZFtVWF9VVE5MU2Fm\na3Zq3tPW19zb4OjualdPVF9hXltm5dbPzNHSysjJz3tcYmNOQ0BIWF5kcdvKzNfg29bbaktSXFlW\nVl/w3+DZ5t3O3vFyXvnvbGxoaGj62NtpW+vU2Nh5adTN0fhdW1NTTUdDSFJafO3l187JzdLX5erl\ndVFPVV7q3N7n3c/Mz9jpanFkT0dHTVBXWFtx4c/p18rUw9Lj1mrcbFVXU21MYl9O+2n9233c0u/Q\n22jvW2TtXGBXWdLj18rfyczMy2NhTEVLRUI/R1N+3tnRzsPBydfl5G9lUUlNU15g+9/r1M/Py9Lj\n+WdtXk1KTVZPYGxd29zbzs7JzszZ4utfYE1MUU1NUWBZ+uRmz9rjy+faz2bn1l/7X1DqX+7YcNjY\n4NThfmxXW1JQU0tTW2bo++PS3cvO6NPz5ndabVJqXG50ZOBo397e2+Dc4+9wZ15dX1tWYW1e3P3c\n4uLIX87kb9tR6lFeT2RVWu9h3F/JZM3p5s1OyU3UXGj6TdBI0lPm7VjOT8pc4+9Z2lXnY+l03ubd\n2m/TYNpu+Wpjb13sTehRbOBO0Fjj2FTJX3vMSM19TsVF78w+vER/xD65RtLXS79FzmlOzE3g51Xl\nXeBg2WBYyD++TF7CPLxE29lNxk3QbXz4b3d5anhc7Fxc0UDCUd7KTL5QymzdbO/vVd5E3kXVS91h\ndd1Zy0/IUMto2dpe3FbQU81O00/e9EvIQc1RXNNO3P3+1G3OdOTeWMdExE5z0T/JQutuWNVW0V/f\n0FDGTdJ0V89IzlNozUe+RtLKQ7U7xnRGvzvOUVDOQcREzWVcy0LAT9rPTcNM0ehax0nKWF/IP71C\nz2xRz0TTTXxzUctJzfpXxEfBWd7US8ZG0/hGwju/RdpyUcVHwU3W3lvVWeNs7Ota21l8cnHl/enm\nbthf33Bl4l7bWehoWd1Z63V772j57VzhY+j75+306GrkfPzdZNpW2mdv3VXSVePqUs5S1XRf003V\nWu1++vpr9v7y+/L8eeJpbW1n8Xh57V/lYd7/9eRr5Pj9/m3qV89Mzlr72ljZaXPrYHHsUtVQ2/Nn\n013cdvnub+pd1Fbea2Pcae/dX+V5Zd9f4171eHTcU9NQ0FfW+P7fZe3sWtlY6m9p7mBzfmjhYeJr\n6+Z94mXi9t7+5HHdYeBh72L1XXhfamtrbOta21vc+fXbfN3r4e/kbtx36Wlmblj6XX9fcf1t3mLT\nXeJ0be1rfPF5ffRi4GTbZ91e217eb+fka9pf31/va2/sWNlP0lDYW93wX9FVzVjd82rWWNNc7HNg\n6l7uZ3p//XPvcfdt9W3pbOT88ORf2l7meHrecen0a9pc5VpnfmDmdFnUWdl5Y9FX0l548FnnWd9p\n6upoz1XMWt5ucOprZ/Rj7ml4/Vvead/qe9Zg3HPz3FraVO90Wt9c4H90dHR3cvxrceZo4e1j2V7P\nbdzt+OBs9W1rbW9pcmJzYX5n93J/7m308/fda9lm3Xbw6m/nZfZv7/X8d/B28mpxd/D18Xn5YvFk\n7G3ree519nF28Xb0fW/sYn5taO5k43Dk8/L54+/Yet9u8Hxs7FzrXvt9aOte6Gr1+275aflvdHbs\n++hs63Ds+/7q9+fs/vVl9G759mz3ZPV47/JzfG33/XZ4Z/D+5eze/t9w7Hh/93r7cnRuf3r2cfZt\nb/5593J3cm9r73DtbO587/bp7ejp6evs+nhwcHJl9l77YPd78+xz7Xru9379d/v1b/lu63t79nTv\nfXr2eHVvY3dm+X/96fvn8PHy/+h73nrn9XXtZ+5rc3Jme21udfrr7fv8b31ubfZ67Hbp+e/n9eHq\n5vlxdm/79XZ0X/54bW9ja23reGpsaute7epu4fbk2+De4uHf625pbHbqbmdrX3ZnanBh7mvn9319\naXHr5991b3vv3vHuX/19ePhu8Wlncnze6X1udfT1eWd07efm8338/vL49PP+cm5/6ntpZnH4Ymjs\nd+fva+384/d8b/Hw7nBv7+/+fPvu7vhzaPvydmxdc/H7+3t4d+Le4Ppu/Ovn6nt2aG3z/vNkXWF+\n2PFmXXXc3nhc9ujmbE5d5eb7a/Hj4ejz7NdyX2Ht6fVlWOHif/zu+fHnb2ht9eXxXmtw+P1f/HV2\nd3Bo9OzvcnTv93zo0u73d3z2bXts7ed26HFx43Z47Ob+WVtr/PZ6a25v7uLi6d3g6m5ifHRkZmtr\ncF1o7Pno5drb7fVmfuzveWR69XJ16tz5bG/t+19oXfj/ZmlkYfHq9O/o2+3p4uL+ffn99nJ0c3Nt\ncvZ4+Oh+Y2pnbOzp/2ls4/Zub2H65Ghk7Onj6e3f3+9ua3VucmJ65/N++ejc3/V9bmprX2Jke+x6\nb/ru8Wxu7Op8Y3ztentme+bmenX4593f5/Lkbmjx829eb+/ybV9mevVoaHLo3uxp+trseWdm5PRk\nbWd78Xps7+rq82Fo897feVZh3933YW/q83j2fe7h8mvp7Pb9a25vbGxu9uL9dHV+3/tfV1/s9e37\nfOzp3t7hb15oa97zeu1v7N/w7n50XV9seu5kZ3Dv7fzx79xz/t1nd2t94Hhr/t/pZlln6/5qbfrq\nbGHq3Nt1Z+nh2/FaV+fcdl5c7vbu5+zhdGNy7H5wXWrc73ZdXujm7m507ezvY+Li9u1db+fvbv1p\n8dhgevT1415jc+npYWzvbHFr79/ebXX6YPhqYPDp4OR8+9zl7el38m5e/G1jamZ86WNv4fnrYF3q\n++rt7N/m/md68N/7Xmrq6nBi+O3q2eVgZ2Vqbmt+fl5h3t/n7OXccXVu625hbVl67vdo8fL03l1q\n7mp7bend++936t7f+n7eZVtnXfvnaGju8uHveO3udnFkbnVfbvbl7v7o3djkcP9yX29kYPluYujp\nce9x7PVp2upxbXjY7mT1d2RgaH1x5Ojd7lve4+P7XPdt7XtTfXvs72rz5vRzd1/v3nR/XOnobtxi\nbepw9eLgfW3r63JyaWhzZ1pyd//sfObb2t7xbXP29npvblRt5+ZxYunmdmbm82RfYfX52uD64X5+\neW/p5WtXW9/m9fZt797qeu73bmNh/ftjU3Tb18/seOTl33FeYltzW2T0buro6/Vn/Onm5mZgdXDX\n3VdvdGjncf51Z+7s6u/rfO7ven1ZdP1qd3n44uXe7X7t6fFma2Tm+WD8Y/X0b29z7vh1d259dmj4\n/t3vd9vz6+/udvzxXWtr5d36ZVts++95a37r3vD5b3Xl5mhmfn7rbHrXfXnxbX1k6eReW2/veF3/\n+PLU43T+furnbf3wXnh8buJvbHh36mxoafXe/n7o4+r/eeNqZvxZbubx+2nq3O/6eWFd9fp4emXq\n4+Po9P3/5mBibnlzUl/k5nZw593vX+7U+2/w4N3xaGpu+ulicXnpallx7ONg9HNm42vreeno/et8\n4WBe+u9y8/vv6Pfn7u/raFx37G1dWO3c/2j71t5q2d9qXl7+/ORtW3Hf1mxidO3t4uBvclVV997h\nVlrv0dpYWuvcbl9+8e165efo6XPgeF5haeX492br2N7gXWHtcl5eal9raf3t+e3b1dfubHvh4Xhc\nbOtkX3XwYVlbetdse2n61mxuXebZ6Opq3+Z4/OXdZfx+6d9RY33n3WBvZf14X2l16HPodfrgavPu\n3nJl8frs5HJlbXt78PLhbVZyddX9XHJs5uxlbefpX2Tpzt9cX/La73N5dWZw/H3j5Fta99rcbFpf\n6O9t7trfW1r92dl2Xlrpf2Tp4OZzWuTb5mxd8930bF5t6l5a3tHdZWnt5Ptia+tyVmBz3+NmYF7V\n2n3pd+Tsc+3s72d+6/BnW3Zk6+5sYWnS31xa6M3tWFx37+x9buDi9f7ye/7xZWTpdF98bnt0YXf0\n6+Fo/tLm3H5QYm7q9Gv46fHn4d/nXmZnfuxeYWB85e7f2Xlkfu7ubWn3+ersZvDgeWto9nzuZGN0\nXu/t2edc+d7eXFNvdt7vZHLp7XDx09p0ceT7ft9yb2Fh9WHo8Gx3WuHbXl1u9P3kc2Xy2upV+dl8\nYGh75Nt2++XmbFZueuhvWGPb1mVkad3S+m723+dfYul6cnBj++Z6XGpv5t1ycWz24/r2+fH3a+vv\naO3t4u35/ujvW/D46/1NXl586FVgZXLm1dbi2eHfcWxtXXxc/Nj19mzx8XvfeWhq7nJqc2rg7ev0\ndH3z4WBz5mpv3OdmZ1302d5ZW2rv3lpq9evu7t7uZFj49uPaXmL6bvFqdf/p2m9y/Xp6bPrd3X9f\nYt/odOhmfdxfY2d+7vLg6OxqYPfj/Fl4cXfbbWNgdHt41u9Zdfv87uHm+e154N3qfGP672h7bHZj\nXPP38PPd6GP142Jj43BY+n7859zlY3Fr/d3oZGb6ZXzq5PVc5u3ybVbo7nRdbODn6F5+3dXYXWBl\nb+jwZP7taulvb21d3tpiWWTy2uNqcOvqePl79+Pu5W5m6/H07X5e6fBrb274Yu/6W2Vu5ODheHVu\n9NTsWmTw3u16X2ff6OztYVv33XFTUWXt49vg8fR08dn4cljjyOReVu/a+Wpo7/ZmUWt2futZa/H/\n+PDd33v14uTmbm9xbPdpWlj2199pXmTbzXJYXvfe82db/eXk3+btYV903+1eaXDc6fvuatvtZXV+\nfl99cennZuHt+/5t73FrXV1hXvX56Oft23Xq3Ofq5/Vcd2/5eFVz7N3mZ+1oXm72+upvXPPg3Od5\n3uXt4V5cX1rp6nR7fdnaZndnXextWmVxYejf2/di0+v0719gXuTxaFxc7dnR593jXP/e4XNaXX7i\nZGz4ce3lblVt9WtgZOTZ2m3u8evlXmRt1vJWde3xbXz83Nryb3TvdmFf2tX5Xl5+c2RcX+jnXnzj\n5NThZvDf43lfWGFu+d7w6+Hn525jYGv5eVxffejkbnd23tj+7W9kYO7Z+GJn7+vb4Vhm+O7xbPps\navVpfPlo7d3k9Gz+9W1nfuh7bHRqYWno7O9+c/bge1tg6N3s+Gxp3tz9593h+W3s9nhkT3rednZv\n/G9w6+p1XGlzbmBt3+fg2udpe+jf8V9lcvT9ZV9059rZamhpbG1g/W1fbOre6H7o3Nzj8OtpZWb+\n4WphberY/V9eWn3i+WJhd+Pc63xrbux+62phbH7rfd3n+mrm225tZmtt8fRnaG/m6Nze7elqevlf\nZerra2pn7ed0fPbd5/98b2r+7VzzcFl+efx+ePfu6Gxp7tzn7ul+4/ZtffV9avBzd/ZtW2bh5+t9\nXWp57G1b9PT97OHofH7f1N/zZvx8aO5dW27n7Wx8bH70+Wlgenbh6237dOvr6P755Hd/bmB27uV4\nal5z7P19X+/f5etqb+fu8PR06+vnd2t3dO3v7mBoZmX4amxj8+rv7Gh039LX42xgfu95Ymdu+uDv\nYWHy5ed+YV1i+Xd0b+7c4u/96e3u+e3ucHBpeftw93Zy73tfbHjr5nR3b+rf/258ffV6a+3v8P91\n6eN4aGRs/Whu+nr5cHLn3/RhbPLh5fp+cXH7/374df7y8/R5bv717v7++Pv4+/1n+u5wc2tu6t7o\n/Wdv+WxzeW159ubvc/l3ee/tef39/u95+/p/dWZv+vTq7/Ls4d7j6PtvZ2doZF9eZWX/7O3u9+nz\n8G9odH79e/b37/5+7Orn+G9jbnP/5vL+/uvp+/fu63ZzZXLqcXBuanfu9Wts++t6e3l83u1+7/vw\n9XJoZ2R68P73bvne4u72b2p7/vp6eP/q5vB7/ev3cm1oam509u17euXi4u9yan/0bF9ea/vx9e/+\na3Ts4/JtbH/s8Hh57uXreWVye25tbm/v4uvzevTs/O58bG1v/nv09fnz7fZybm9+/3dweu7k7H31\n7+zueWVnfvv6ef56ffL3+n58b2x5b2Npf/PvfHbq3t/w/ezk7HtxbHp5bmpv7/Vtb3J5fvl9+urz\neGd2/vfvdG959fPy7Orv8O7493x5enZ4fPvy929vdHr6fnxuevR3c3n16Oh7b3Z1b3Pu6urrfvTp\n8G5ofPt2bmVjdP7/c3L97+ru/XB3+fb9eHr+7+7x7/r68vHu8nFrf/Ls9n99/fX/em9sbnN4dn53\ncHb9/nl8e/ny8vTt6url5u93bHT8fW1tbHf9f/Px+Pv77/F4b21vefz9/P7v7/j7d//79398enV6\neH79/Pvx7u7w7vb59H1wZmJnam1tcXV1ffXr6u/1+Pn09nn47+vs9Pr37+3o7XtzfX54cW1rbWtn\na21xfuvk5+Pn7fD6enBvbGxrcXj+8Pb27uzp7vV9b21pbXNycXf88e7x/v34/e/u9O9/9e3r93F4\nb3Z6dnh2eH31+v9zbm9rcvny7vD48err7+/q8XlybnZ9enNpZ2tsdXV1c3B5+/Hv9vDx+u/s6Ofp\n7vf7f3/8fHRybnd9evnw8Pb9bmVpanB4eff07unn5+zu831za3FxamlrcX3y8uzp6vD38/n6fXp4\ncWxqbG5yevPs7Ori3eHu/Hpzb2pjZGhqbXb+9vH6+e/t7fL28u7s8nx5d3d5fHRzc3p4eX1+e336\n/H78+Pf6/Hx5/f199vD29fP+/vX9fnJvdXR8/nVtdXV2fvHq6+vu7uvv6+73+Hl3e3Z2cW9ubW1s\na3v8c2ttc3Z++e/n4uLk5ubr93Vrbm5xb3d9enz/+e/u7+3u9vn3fv58dmxlamptdnl8d3F5+O7t\n6ufp6+/2/HV7eXh4c3/x6/V3cHR9eHt6em9pa2pufe7t9PHu7fD49PX7+Pf+eHNxfvHw8PHv8vj8\nenRveXZubW16+n7//fry8+3n7/v5fXVtb25teP7+8/X39fz6/X749fV+f/t4d3n98fD8dHB1eP30\n7vDt6vF8evv3/Xt1b21ue/h5cnV49+7x+Prz8vD2+310bW56d3x9cXV7/PD4/fh6cHF0eXN7/37x\n7unq7uzt9Hx0cXn+d3x7+/n48/59/vXw7u35eHp97en6/nVvePp0bHRxbmlveXl5dHN1dHT/7+jm\n6unk5unm6O93bWhoamhsc318enRzeXxzePn+7ujo7ezt7u329vl4d3x8eXxzbXf99fh5cXJwaGxu\nbndveXNy+vjs5eDk5eTp5uvx/HBoaGlteHV5+ndubnB0/+/2/Pj18/v+/Xz88u/v9/T+b2ptendx\n/P15b2tv+u/1cW9x69/l4uTh5f5fVl3z1s/MztPR2OhfSUFDSlFca2/y4Nnefl1QVmfy4N7b2NbV\n3fNrY2n66+/xfHX7/fZ7cW5oaGpnbe/v7u/k5OHb2M7LyOlAR3zPtcN8WDxaSkpCMD5H3L/H3Fhr\n3MzaUz0+Yc24u8fX7NHN0mxIR2TKv8LWXVJZX1lRRkVX/tjZ62lj7v9pXVVk997e8f1ha3Vqdnfo\n2dLT2efu8W5rXmj89+jm1dDeYE9SWmp5bG957tfW2ON7amB2c2JobOrc2+VsX1pVV1dYX37l3+b/\nYl5jXWVkavXs3ePo4tnNzdPh7utzcfnp2+Z0bm3l5P53TTZBubGtsm9KQUpDOTQrNe+/trnVTVvW\n5Vc/MzrVt6+ww1xS3tPhYz9C4ry3vdtDRF/xc1ZFP1Tf1t1hSkzp1drVbFRq5eR9clts19n6X1dZ\ndOHa6HtcU1dRO+OjqqWoR1gyNjQoNSY9vbuss8ZMW/g+NTAsOriuqarE7ktnTz9AN0LBqaqxzzs8\nQlNBQDs2/MzD02dRTcfG0ddVTGnO1N7eWljb0N3abU1PU3ns5WZPaWzo50fbpKqyrzo7OTY/Kzgt\nPLO1r7fVQkFaOy8xM0mtqKqtzF5ET1A8Skn4ua+vuMRQPz07Ojc8OlbMy7/N1m1s7U9fVlLjzcfN\nzdHx5v1PTVNQWefT3XXoXVdsWnH+abKgrLXNNTw2PDAqMzLYra64y0g4Qkw5LjhBxKeorcBVS0Jf\nU0BOX8Gys7rKb1xRQz82Oz5F3t/MzNHTc2RLTGpr3tLW0tHLzu1iTENLXPztYmRp8Obu5Wx3b/t9\n5qiluLRiO0U6OyssNTm6r7zAaUFEVEwyLzxXtKmtudlwXvraSkBJ37qzuMfcaWpNPTgyN0L4zsrK\n2OpsYlFKW+LLwMXN0dbbdlpJQkpV587lfe7u3vhPSUda1dDDp6S4t1U0PTE1Ky48Pbmut73fQjtD\nQDIxQli3qK20zHJmXOJVS2bdvre/5mViW1lNQjg9RE3oct/d1dPt3Vdh3NfP5ell+NHf6l9QS1Rs\ne+/q3/HlZk1MUt/c0tC9oqi4uDs3OjI7KjE5QLO0vMhDPEJRTTY4Q1+zrbG42tjc08tYUE9uxMHN\n39ro7VxCOTQ7QVjw6c7VzM/Y7lD229ndbXVyz8vsX0lFUnje7G/q5ubrTkhRX9vLvsOtorq8ejA7\nMj8yLD841bO+xXFHRUdVPTFDTsatr6+9ysnr2VlDSE7QxMvRy8bO9UQ3MDg+RmNi08a+xOVsRU/g\nz9Dr4+3Ows9eRj9DXXro9mzZ7WteXnhg79rRuqSmur9BNT48OyosND66r77aWUFNakkxLDpatait\ntMTLxMrdQzlCa8G3wlpfy8/tSjUuOE9e6Gx76cbA8nJKSt3HxNze7/HK0XVSR0le6XxVVG1ZZH5T\nXHbrysqtn62wwTk+MzguJjIxUrOzucZ0T0pKNikuO9+vqqy1u7/Q2k47O03NvbnAX1DDxW1HMC84\nV3xPXF7iwLzWVE1O4MXKYFJe/8vM6FdTb+jT/kxHTmjf2mRRXdvAwK+isbq+PkA2Mi4nNztTub/F\nyvJnTEE2LDRLzLGwr7e7utLySz1FX8fDxcxS2rfD+D4wMDpKSUhY3ce6xexdTGnf0OVZZXLMx9v0\nXFxqbFdPUVNZduV1bv946czDqaS3tmc8RjU6KSk3O8W4vsPO1thpPC0qNEy+s7m1t7Ozv3w8PENu\nyc7eYGC9s8BgNS41QEdDRFrHtrfRZ01K69riU1fp38HKbGdccXFlWkxc4nvt619XXdzP0bymq7q0\nTUVFMzEmLjY7v8XOv77E1103Ki49TMe9vbOtq7XIaD9ET1VNV19mvK620E45Mzw3MTdG0L+1weDN\n6O5sWU1N2ervztzf4d5nTl1QUPlvWfjfe+LtZ+2voLG2vETmSDkpIDIxT8h00sCxs796MisxOjxO\nacexqaewu8vzV0Y7NT5KTs21tbu+5kY+Ni4vO1Ljwb7Hv7zJ9l9PSFdXVGL019LY7Wh4ZlNZU05y\n71xsZFnPp6S3r8LWxU44ISYtLEZAQeK1rK+wxEtAPjAuMTdNy7Wyrqmsr7vPSj49LzA+cc/Mws3L\ny1U9O0NHTlJKWs6/ydHS0crL6k1QZ3FvT0VMaujb3Gl3zM7xWlNSTb+rvsS3wbS70j0tPDEuMCot\nPeDHv7W2vra7c1dFPj5EV0zuwr64uLm/ycvedVY/O0FFSElFTXfX0M7Q4d7md3ZZWl1f7Xn33+7f\n5W9iZ+Hl7Nnj18zR3WZeW0xMS0dGTF7u1Ma/vbu+xM7kXkxKR0pTXnTm539gVU5HSUhKU1rv39LN\nz8nQ2uV+5/Lf2N3Q19bO09n2b15PTUc/QEhRYnng3tDLztDa63ntcV9hX3Lm0tXUzdjpd19NR0xJ\nRUhRcNbJw8PBv8bL411YV1lRUlZQV19VT0xKU2Dy4dvT083O2d/r7efu6u3l2Nna1dTX3+9rVlBM\nSEdIT1FZXV5nYvHk18/Sy87My9Pa5+3t+/H2aWxgWVRPVVBPU1n44+Df49bR0dXe3Nvb1tjb6W9m\nVU1KRkhNVFldZXvy3+H76ezs5ufg39bY29PRz9Tc6e7qdmZbVlJRV1NXVFNZXv3z6dvb0s/U3ufg\n7vrt/Xju7fxvcGhZXV1bZG1wduLk+PX/ePjm4ufZ09nc3uxyZ2ZeXF1VUVZYXF1ibGzx6/bh3dvY\n3OLi2NLW2N7j4Or6aFtXVFlZWVpVUVBcZGj64tTOztHa2dvf5PVuZnNsaXJvb2lufvvu9XFqb/5t\nZmhle+306+/t19TyZurqbvP5cXNsb2VaWlpcWFpudm3o2+Xh2dXPzNDZ1tt8b3JdW2FjYWNfXFhV\nZV1RaHX96OXY2Nbi4tPy59Zv9+JraGRdaejpeXpudHz7cVlqfFd931ll4NHH41dfVl3yTU3N1Unt\nyW/61tj2adxqWuBaceJP8sRvW89w/s5vUtnxSs9VQcfjRnfQelrR71Df1GnwZGnSZFvxYebSbnNu\nbd944u1X0tJa8+JYZODsUXFuTN/RV2XObWPYzepQ2dXZT03ITD/N1URN3s3TPu+4VUzXz2ZM29dt\nZebSeFReyt5B6sZUT9ZdTtjwfWbr2OrcXvTf8d9nelxh9PlwUW/dz/5O49vW2uPzfd77YGdnX2Fs\nal3w4Fvk71jf7VtUWWB6Xe/bUHjKz15YysnV6nLOztjVXENGVvR3Q0N7z8TT3tdr1cvhVklJZNb0\nWlVNa9LXzsvPzNPOyN5ZSEpSRz4/Pz9T7d3Qzsa/wcLI1+v8bFhHQ0ROWldhX+jKx8zW1dbb4PpW\nQ0hf8lZU99rS08/K0HRXV1xs0b++xc7HurnUSzo1NzQvLC41OkvTvru8ubGvtL3XXmJjV1dcd3Fh\n3MXG4F5jX1NGPz5DQz9JXG/h1M/Kx8bDwcnV5/dvcHFNPjoxKTStnJ+y0q+dnbUvHxwdHRweJSQo\n6p6Wm6y/q56ixi8kIygsNkxSSuaqmpmhvFpXakErHx0eJDJqw8fUu6mjqLXP+vtfSj04NzUxLiky\nqJORmqqvnpyzKRUODg4TGys7PbiWjIyWsXrGyDsiGRgdKEWtn6Sro5mVnl0gHiAiISEkKjNNtaWo\nvm/UtrPKVktXYtPMxs4+Jx0lqo+Om7zPoZuxJxALCw0WKNKxuauVjI2bPh4fJSMfICdDu6CTj5ix\nT3O9XSMXGSQ9zLWywVQ9W7zFMyElO7+xr66usLW3tscvGhEdn4uMmLzKn5/aHgwGBgoerJeXoJ6S\njplLFQ4PFR9Tqp+cmZGNlMUdFBkjJys4W8Crn5yoPx8eJzEvJic02auemZunzk5NSCwZERiui4eL\nmbS15CYaDAQDCCaWiomOmJupPBwPCgsSNpqNjI6TmqT2HRANEyjGo56lrravq7I5HhgZIi88P2a6\no5uan7dALzY6LhsPF5yCgIaZXCgVDhEMBAUPqYWAhI6tLRwVFA4LDyqeioWIka0yLCUXDhErpJqb\noL1BPb+krCsVEhQj8Kqjq7eso6i8Py8yNS4fFRidgICCjkETCQkUDwkNGa+NhIGNxxwVFBEWHB88\nrI6Fjpq8JCEcHSgq06ejprbaPDrHsbE3GhYUILqdmKDJSE3Br7pPLCEcHBwxjICDh5grEwgLEAwQ\nGy6qkoeJnNMrGw4PHiZRqpuOkJqkLx4gHicqSZ+anq5OLCpVu7LTLRwVGjmtnp+rxUtOxbjBTSgc\nHR4eooOEhIm7HgwLEgoOHCLNmo+NmbtQHQ8VHCHgn5aQlpytMSchHigtS7uil6C/OCIqWbSyQiUd\nGiXKpqCovVtE2bi+dTspGxEYlYSJgo08IQ8VEgoVFRmhko6NskspER8aGldUopOUkKDwPR4jLio9\nOlSsqJyg6TQgLGvtwDIfISZcrKSfsz9LSVq+3j4lERGfiYuBjTklEx8dDxwND6qajYur0xgVMBci\nLSerno2Nq641HT9qumAlLil7naGrWS41M73AMCccI16unabIRjjOvWtAKBwWv4mNio41JxglMhMp\nGxDdqpWPr7geGEElOS8gS0qdj52gSSA696ifutInIDpBx83wxlfAvEMwIR8rTqeirLpKRXXSzzgc\nE3WQkIiOxzIVLCsXNhQVTceTl6asHR8vJUAwLz03opefnb4rJy+vrKupTTk9RU8yOTg7s6qwXyYg\nITm0qq/HT1nOta/fNi0tNC82p5uckpqvQiAoGRclHC3KrZulpqg9MyoaHB82tK6cm6agr8VVJSom\nLL21qqm9w1FRZjUvKCQtSLmrrr1cSEbqv99+STtJS82/zrq5uuxts8nJwNu9V05pLCwuKy4xPmTt\nv7S3r6++YkA/P269vcna1t7Vw8txSU/vzry+7j4vMDM1SGVPfM29srO26Tw8OD5L/b+/uK+0u9w/\nNC86Wd3PznRASOLTzvpLRDxtwL+5w9dxX765xe47PEVbwdVdQi83QO+5vb/SS0dBP0VN176zsr7C\n5ExSVVtNRVr7zrW5zVw/Qj9Y9EpKPjxFVcfI2MrMwLu8wmhWRzxHR1PawLW2t73bUz45ODMwMj3Q\nurSvwFs6MDg7Xry+wb/HzcW9xW9BOjlNvrS5zV5QX9HKWj85NDtJ4dhhc/TMwMjXaVhOU3F5XnLd\nzb23t8P9S0RPXFJFPD5M17u80U89PEnRw87ZX0/vy7y7zNxTP0JHUlNe1s3CvMHKcUQ7NDU7SWzf\nx7y5vcreTkVOTmLmeOzcxru/x2w9PD9T3M7N7V390cjTaFFHUvXl5mVOTm3TxL/Ez1VCPjtAQkZp\nzrq5v8PsXW5fYk1DQUbkvbm+zHxMSk5KR0tLWdrGuri/yVdBPzk/TnzSyr25uLrKcEY5Njk/SnHK\nwsC+wthVRD08QE7pzszFys7TXk1CQV/cxb/V6F1S/V1ZVElbWmL1XO3j28G+ur3Mz2BMSENNUWLY\nyr+/zNxlT01JR0A/S1Je/GRaVVBb/NzT0s3KzMjIzs3c+WpPUV5r6l5OT0tUfm3d1nXubl1dU2h4\n3cPAvsDFyd/i3vfpde3Y1srjSj00Mzo9RENBQUp61crK0NDW1MjCv76/wcnP2WtOR0RHSE9WU1hb\nYXlfXGb52M7EyNrmXm7Px7y/w8DNycfa6kk5NjQ6Qz8/PDg+QUhWZOTLvbe3uLu+v8rjYFhs+ufk\n6+llXVVFREdMV1dbWlJddOze187Nwa+vuLW9v8X9+UlNQS0tKiswNDtDbc7Lvra7xc5vcOXi5uLI\nv7+/x8/P0uxuX0w/Oz5LTklCQU1d383RysnTy8nIw91xu7rNtre6x1FoPEU4KjguLy82Rjvp+9u3\nurq/ucbeyH743H3/zL7Tyb3P53lbREE/OEFIQE5kfe7Oz+vL0nXfze9ezl1Ft7VTsqy6ucm+QUg+\nKDstJio4QDm9xNC8w8PHtulfx0JFS/9s4LbHurfAvcTIUVRQNz89OD1FSEvX1+PO2H1p3nlp3m5g\nWELWq8/MprO0vbe8RVosNjwkKTA7L02938rKz+rQ70nIUTtOVcu/uLCsrbq2udheR0I6OTk5SUFD\naGtaV2dRSUxa6vv+z8Pa4M5IQbKyV6ejtq2ytFZXOSY3Ih4qMjA8unldwM7Ox8tJ28872sDZv7az\nta+4v7fcUFxJOzlEP0JKREpKRENMSUBKTHbWx7u9v9LV3VBDSa65ZaGprau6sEQ+KSU2HiIvNjE6\nverKvtXJ2vlLwMVMv8LHvLq5trTax7x1W1ZLREdFTF8/OEFCOTtBPz9JasrCw769yNHP2c7cPHWm\nu8+gqa6618U7NSInNR0jNzs3UbvcwcDnvslaUr3NTbvFxba9vbm249i/a3ZsVU0/PDxEPzY6PTc6\nTmDz2tPHxL+/vL7Oz9jg6EM6r65Eqqavr+PBRzknHzwjHy9ARUy6zcO3Y9zJYD3ev2e6ucW0u8fN\nuMl2w3PqcVBhU1E7QEc3Ozk3PUA/SvvQyMC6ubnFzcBlSW5JMlqjxsqerai6+M84OR0oOB8qNkpV\nw77zts9JaOZWT8HszbTQxbS759a9ec3B+73Cd2BkUjY7Ni80LjI/T1Pbwry7wL29vOJi0lRDRFo9\nOqms26Opq6xi2EFPKR45KygtOkvWumXYu81KWVhLyedUwLfP0rvFzrq+zrm+2NHTZUhLNjI7MjA5\nQj9O8HPOvr/FwsfJx+xv5FZGSkw0OKeoxqapo6nl8TlaKx0rJiovMTzXrsRlysXL+khG1cBlXczC\nubnIzbe0yszJ0MbtRERbTTYxMDI4PDtO1NjQx8TFwb/N0cjY7GtLSEFISkFesKmvrq2qtM37NzIt\nKisoKTFI+tbFv8nN1M/Vb/1fXnz1evnGv8K6uby6v8vdfl5GTT43RD48QkhWU2R1Ztb1/9Hf2tzY\n4mx7TUxaVGHe1XnHrq+5trK7z9DtSUNAPDg4ODg9QD1GT0tJWXBs0sjT0MfI1crGzcnKy8jDxczH\nzu97eFtOS0JDQUA/PkZHTU9d7eDW2c/Lz9Hb195s3+DrfF/Gub/Nv7jGzMTLYFVXQDo1MjM4OzpE\nS0RY2dLSxcDNy8vS2NXR3M3Pz8nFv8bBx9LP52pIRT84Ozo6PEFHQ17n4c7JxsbHydbM3VRhVFhR\nTHfEu8a7r7O5trnXflY7Mi4sLTM2Nz9OT1/WzcrCws3c1tXi7+jUzs3Oyb25vb++wcvpU0I+PjUy\nNzc5PUVMWdzX0sfGwMHEx87aVUpKT1lKX8K2uriusLi8v9tQSj00Ly4uMjk7QFJXXfjNzdDM2t/f\n2uP20s3LxsG8vLu9wb7I0fNPQj0+OTU6Ozs+SVFUaOvez8vExMjM1d9nWFNTZFZSy7a4urKvtrq9\nxu5OQTcvLSsuMDM5Q1Nbfc/Hx8PDy9Pe5PLn09DJxL+6ury/v8fU6FZGPz89OTc3Oj0/SVNcd97W\nzcXCxsfL2Or+W1pmTk6/r8fCr7m0rbrI2UU2Oy4mKCotM0leRuvIyry/33XV6GjRztXEury6s7m6\nt7vN52ZFPjw1MTU1Mzk/PkRZWfjO1MzGwru+wcva7E5QVD3TpKmwpq+vq+Q2KyYnJCgmIjnX2Ly6\n19jI/EpKTlXKucK/srOxssZ+3tLraHNv787dSUZAODo1LzM9RE3t+Nm7vMfHyNHZ1mpMWW1ITO1J\nSK2boampuK69MSQdJCcoMiYzwbmwvdFlT1U5OEBOwrC0t7O3trfLXk7nz8/E0M/F1lk8Mi4uMS81\nPUfwy8jQx7vBys/o6X17cWp0WEtbZUW+nJyhpbq1yjkmGR0eJD4xPdu2qaqvWDg3Lzc8QE+6q6uq\ntb/ExNVKUFTdvL2+zOteRTwvKy4vO0xOXt/FwcK+y9zY5OH9VEtGYXBHR0M68Z2WmZ6xuMRNLRoY\nFx02V+Fsva2mpbk7IyAoOF97zbenn6KszE5JTOplWmLbt7e83kE4LzMwLi40TOLDxcnNxL7Kzfpf\nXFpmU1ZLSFBHRXaklpiaqb15MSsdGBYZKk25rq2urau2aiwdHCU/wKyoqqimqbTZOysvR9q9u7u+\nwcHXUjUrKSswPnnt4tfMwbm31FVKT3Xee0lGRFPoe14/w5yXlZyyXyopJB0bGB0req2mpay2w9RI\nLSIfJj22pKChqbC7v9s/MC44fLuvrrnVXUdDOjArJyw73by8xnvkv7q+01ZCS3ba51NCOkJcTWuk\nmJeWn7Q7JSQaGxoaIjC/qZ+ep7PTQywlICMrRLannp6irb7xQTc0NzxT1bmusLjfSDgwMCwsLTpu\nxLa9ysvCw8fMZEY/S05QUz8/SWBIu5qYlJekwCgkGxkbGBwhOMKonJyfrc00JiEhJy5Pw62gnZ+m\ns2Y6MTg5P1FTxLy0tcPvODQtKy0yQlrEvr/Avb7IxNxaRURIQ09DPz5FUEmrmpeTmaTRLCQaGBkZ\nGyI6xqacm5+pvTsoIR8jLD7ataagoKCouPtEPDY7OkBLW83LvstoSTQvLzhIX9fd3s7Ewr/Azu5b\nV0c/QD46O1Fwa62bmJaYosQvJhwXGRgaHzHVrJ2bnaKt2jQoJSImMEDStaqlpaWqs77VTTs6Ozg7\nQD9KeOF3Tkc/RXPv6uxiXFnky8bAydffYkxFPjYzQ0k/rpuXlZmeuzkwHhoXFBUZKXuvoJ2dn6Ss\n0jUrIiAoNVnjvbKup6GgqLbjRz4+PC8sKS05XMtyXk5gzMC4ymNLQ1zSwsftZGVia3hUPDA3Wm3H\noZqbnJ+p0DsvHhgWFxofM/S6q5+cnaCs2DcuListLy0yTbmro52iq6+xuN1CKyAfJy85PTo+d7et\nrbTRXE5k1OtSQkFj0cPNT0Q7Ql7d00m9npuanqq/OzsvHxkUFxskRNO6rJ+anKGubzo1NzEoJCcx\nfrKnpaanpqans08uJSUoKiwpLDjgtq+vt76/xMrjST07SGdpdVVKTUxrem3awby/qJugqa/P6j4y\nLx0bHB0oLDjPwq6hoaWvurzUbUguKCowR/TLvLaspKOpuMzZSjMuKykqKzE4Qdq8tri8u7/DvcV0\nQkNLREVFPjxC3b63sbW1sbK+7OXgQjI2QkxNTElIXNjecFhFPT9QaVxQVOLIvrzDwsbDvcPI3m7v\nalxKPz9EXPtjVkxvycLNT0JHTv7i+mV50MHCzvRSS0xUYW3l0cjEwcPM2O9dRz04NDQ3PUt/ybas\nrK+4uLjB1Eo5NzY2Nzw/Pkvs0MrJycnLznlUXF5cUk5SYc3Avr7I5Pndz/FPSkthe1hKR0pa+F9G\nStvI1+PQx7/AycrO71lNRDs4PkxOTEnrs6ept7mvrrlyOSspKiopJSc2zbKvr62urKy2+D03ODo3\nMzlM1cnHw7y4v7uyuN1PemhBNzE1Oz1GU2rZv7e9xsPI0+tgTD48PUJOS0ha2sbHxr68yVzOq6rE\ndcW3w1M0KikqLzkyL0O/sbCusrq8wdVKMSw1RD07S9K3r7C1tbS7z1FIRj03N0BFRljky8XFwb/F\nzdPrTD07PDo5PUNLbsy/vb27vtho6OtFONikpr/JtKuv3jYqIh8nKSMlO7qrqKioq7S71zcnJi44\nNjtntaikpaqus8BWLiIqR0IzPt27tr/HzV182kozNU3pWkr8zc7Ox9RgT/7K4lBo4nxhVkY5/6Gd\nr7+ypqfNLycfHSElHx4uvqakp6SkqbLMOSYjKzMvMEy2pqKlqauttOUxKCksLjI5Vsu8t73Kzc7o\nTT09Ul1MSFrbycjO1nZm499qXFJf5vDr71U+P7Gerdu7qae7RDUrIycpIBwkTby6r6WkqKesyT42\nOzYnJjRN5r61sq+pp67VQk/TSy4vOTxDST88TczJ72LUu7rM2M/Y4+NXPD1Oa2Nn/drMzM3W3lk/\nPcSsyEu7qqy3xOJBOj4tHx8pMzpA7Lq0rqqvv7y4y1ZIRTw8SExEUNfJz9fDur3Fvb3O12FBOzo3\nMjI6SWjiz8S9urq9x9TO50xBQEJLUVFUXmLsz9dnV3W+td1Zt6u3x77LXPteLiczOS4uOUftztbW\nyLy2us3r08zo/+R6aNjM6Xfk93N+593c9XZ9b11OQj9GTUpES2Hl19PPysPBw8vY2NbjY1pmVklK\nTEtSX1ZHStfB0dK3r7q9uMjp0fk8O0s6LzhBOThCQkX94WL2wbq9vr/Bvb3BytXbz9FnUmxtUU9V\nVFhYR0BHSkVFSUtVbezXzci+ur3Cv8PU295kUExEP0dRTkdGSk5a48/i2L26x8a3vMfAymNu9EA3\nPjkxOj44PU5FStDK78y6v8S6vcrBvcjLyc7U1e1peGpYUUc8PD05Njo9P0pd7dPIvrm4ubi7w8LC\n0mVXTUZKTEA8Q01KT1lVXd/Q2dDGwsbFvb7CxcvP31ZFQz84ODs5OEFRTFDq1dDMydPSxsXMy7++\nwcfHxMTI0ehlVko/OjU0NjY2OkFJYNHFwLy4t7i4ub/Q7e3vXk5OT1NUTUdJTEpISVFcYPDXzsi+\nuru8vL/I125PSEU+PT09PT1BSlBTWv3f4tzQzse/wb+8vb28vMXO1d5nS0A/PjYzNTQ1P0lKWtrN\nx769vbu9xsfGy9HQ2t7jd1ZLS0hCPDw/VllHfsXGy724vr+7wdb0WEhCPjs+Qj4+SU5IU/bu49bQ\n1M7IycnJyMDBx8XBxszP6l9bT0I+PDU1Ozs7RFFb6M/OycHAv77BycnL0dze6H79XU1ORT4+7ds7\n0rS/0MCwzt/B6FNJPTY2Ny84T0JEX9bt2L6+vLy6vsHBz9Lb6VtWX0VLVFNPX+l73tnjZnVhWlVN\nSUdTUFBZb/Dh08rIzcrIzNnZ2WFTblc+PEG9yTmzqLS+tqjL6u85PS4mIykrJTNQS9+7srWuqq6t\nr7XH3cxOPT1DPTlFQE/w59LGvcvKxeZNREE6PUA/R/nO0ce+vsbDv9NXV1BHPz4/OUz6SD1ooa1A\nn56otr6qR0ovHywhHRsmMC1XvbarpqOnqKq8zF9YNS05OTo69MnLv66rvbW4ymM+MS0uKSgsPUBs\nwLerqquur7XbU0c6My8tMDc4PuG+0kmml8W2nqWkTthULjQXHSMgIiBAzrOurKGgpK6/y203JiYv\nKzQ9Zq2uqKaloa61XEo9KCciKCksN0XBv7ayrqyvtszVXEI0LzY2OztF1czHxbiuylatnv3zrb+t\nP0M/LkYdIikqPi4/w6qqsq6srbhfMTw+LCozTd3Cs6yooa67sctYLi0sJy8oMEFbxMa1tq+vwcDM\n6UtCOjhBOjxJ7mxwwcTAyMTCSkymrEGxuLatS9gzO0IeKycnPTVP57KqtrCzvL7iODY4PD43acy4\nrK+rrLS7y1E6MDEuKjMxPHRlxby2t7+4xMzNTE1EPEA+S0VO1G/cx83IyL7WPN2pv1q2w7m96r41\nOUIpOiwqNS910mbCvbq0vr7IVdxMRv1B/eTMtcK1us270etLNz41NToyQEpQzdC+v8m7wsHJdOtU\nSUo/SUtS62rl1s/D0c3OXE5FXvBa1d/Puru3u8fJdVhLMDE2Ly80Rk9P2MTAv7+9vsPD0Onf+OJm\nW/5id2Bf/G1mZOzg3e1n/OziWUlaXVhPVv5SYdnr4tjHytbR2ul6elpNSEZJRUpf18jFubCxtrm3\nwetTPDgxLzIwNzpGWmLXysjKy8jN3vh4693k49vU087MyszPzW3v2Xz2TWBcQklHTElBTUtJcfTr\n18/BycvL6u1rW1xUWllPVOC/u7/At7a+xMXMaUo9NTM0NjQ2PT9LXN/O1MjHzMbJy9Xcz9bU0dzT\n1c3Q/OfnfVpfa11aXHRZVFZQVE5PTk5aXPvT1NnPzc/oamRSU1FQW2No4r63vL+7tr/Fv893T0s8\nMjU3OTU5QD9MVOnO3c3PzcbOycrQzc3Jyc/MzdPW4v58bl9dW1pNT1ZOS0hPT0xSXXvs28/MzMzN\n2+J5XFVPTk1PV1hY5b+8wL22ucLDvcn1YE09NTk9ODU7PT9JT33r6M/SzcvPy8vP08/MzMnGyt3Y\nx8zlcX1tT0xOSkpLSUZDRU1TWWb92tHPzczS0tfpcFple2P03ONeWce8ztPEvsnZwcHgdV9LOjY7\nOzc3Oz5IWvHY0MzPzMrP1M/Q5dzNz9PMxcvY0s/k7e1zYFVVTkhKS05LS1FUYXR16erg4fXl6fHv\nfvjt6Ofh19bsZ2T5zcjQzMPBy8u+xetqU0I4Njo3NTg/SlFp2sfMz9Dr29nPzn7rz8HC087Ex8jQ\n4+1z81pISERISUFFTVdVUG3c1Nns29Xg5e527en+W1vp33Z83/pX+LKv0L2wsr9Lc148NyovOC83\nOV7N1cjZy7/jW1Ft3GBe3ce8w8zAt7vf9fj36EdLZG1YQUxUT0pETl5dUWfNys3Yz8za/lhoXk5T\nUVhabdnzfuPPzWtR5LSx08GtsctSbXc8MS00PjIyQuHK1s/Nz9pNRlVqY13YwL6/v77Axst0XFFD\nVW1QWtjR7W96YVZORE75W0/7y8/f1uT58FlOV15YWm91+Phz//jka1VlT9atsL+yqq7VY35DNiwp\nMTUwMVG/xMrIydBuRj9NY2dgzr29vL/Ax9PQV09kU2Ff18zNyN3gdEw/PUFCSE5b/tbS39LW5HRl\nalJaXmryedvb8XtdZO/+bl9ayauvwa+ss31DTTcwKSk4PDs+0Le8wNxvY008NkZ45+XNt7W6wsvJ\n1N9PSvzp+OPHwcTVb2FOPzQ6Q0RLWOXfzMjY0trkWk1YVF1iZOLT2nTy2e1bVunWZEtWsqa+xrCu\nujk6PDc3KC9LaG9UxLe60EE+QEE1M0vSwMi+s7S2yNnY2ddJUeroyczNzszYST88OTc3Pk3h4/LM\nwMje3NrtY1daZ+Hj3dDS1/Jr7WhNSljoZFZfXsWts8S/uLhcPz04Qjo7P0trX9rh5eZWRDo/S09c\n/sW+vr/FwMTL5nHP327vz8nOytPlXEk/Ozs5QE1YdPDf3NHR3drc5u/q2d/h3dzcbmNgXVxVXl5R\nU2Xn7vXe2d7DtcDDvrvCW2hFPz46PjlCRU1sbuL02v5VW1RjVvDT3sbFwsDIwMfEy+9wYGtWUFBV\nVk5QTU9PVl1bXFxgZ27k1tXU1M3Lzdbr735eUU1bY2no2dbf5vlfXlxdWmPt5+jj1tva5X7Vzs7Y\n2crR2nZOSENBOzo+Q0pT+djPyszOysfM1s/S5fPp4X9ueXdoanf3dnd4+/9eU0tPUk5ZYeHb1dbR\ny87V4PB4bXt1ae/d5PH/b2NbVE9XXVdTWGb4+Ozf2dLT1dfb5vtrZ2Zuc2l7fnJkYF9dXl9t6NnT\nzcnJy87U5PprV05LTE5NTU9WXVxjffB4cvTl3ubc1dLP0NPe4ODr8X159fR8bW9+el9cXlxbWVpa\nYPvz8Onj3NfT2uLj6fJ2bWFcX2lrcWxpZF5rX1toeO7v5tra2dji4efq6/XufH379vlvbGdpaF5c\nYHxtZm/75ev07+3k/Wv39en+e/F69Xpsb259bWpycn51fP3x4ufu8Onb2t7m735sYV1cX215fu7i\n4ex5cXB2b3B4d/x9dWxsfXj57ube5/tvfvD9bGt88+73+PD7dmtsdHb+cPj7fvNsc/zm3+vl5Ov/\nbG5pZGNla21w/nVsbm5+6ubh3tjW3OTr/WdfYl9fZmpodfN7cG5xefb0fO3j5Oz29X1++XN7939+\n9vjx6+vx7OXucWJmY2JfZW109Pfu+Pz38+rv7+vs7Pry+Pvw/nN4c2pobHV+eW9rfejx7N/c3vT2\n9fl2Zmhue3dtb3hyaGZsdHNud+3r7fb27e/xenT6/PT18ert6evr6O35c35+Zl9cXmVmbnzu6u3q\n7O/z+vj8/PHv8/h6cnpxa2xyenz79v/47u7q6e/0+HNrbf379enp7enq9HNsZ19lZ2t2eHz88+3w\n+/L7evf06+/36+jl6u3rfm1iXWZmX2Rrffr68vH1+Pd9fnT/7+3s6OHg4eXt+ntubGlfX2NqcX9/\ndm9wb3f+/vbs5+ji3eXw8u/7b2xscH76enF0cXRxbW/89P53fujk6e/+7urw8ft8e3t0b3V4cWtp\naGp2fnv/8eru/Xt+fXJ89fPr6uvr5+ru+Xt1dXVud31iY8fMX0VBWtPLb0hJ/sfDy2VbfdHO2l1L\nTvfV2G5OVGfh5Ec56bSwxzowQ7620TsyQcq2wl1CWce2vWE8OlvEv+dHPUzRxM9YS1rWx81uTlL2\n1dxhTVDv19t1W2PhztluV1dr4dz6UU9s3svTZlZh2s/T9Fpe5tjhZ1RYXOjedV9efd947F9h9NTT\n8mlYXXTi6npyXv578tvY4ePf6fJuXVFWWW/q9F9XYO3VztXuaV93399uW1Vc4NXcb/p07tzc8/z7\n+GtZUVZ/6utnU17xy87hbWNq287mVVVg3tDVXkdLZc3H11xJUerHzOlQTFXnzdpyVlN3zs7vS0lb\n1sTgTUBO2r+/309GXNfCzVtJRlrUwdJkVVT12dfsTkpX5dXY9VdV89PW9GVnXHDobWNv7fDm2uTo\n9W9fZW3e2fhqWFv11dT2ZWnr5ulmZGzn2fxZUlVu7NPaYFlbduTS13X95fFtX2Ps7exrVvvb1drr\n61lN+e73aFJRZs7N9Ftw4N/S81tWbdzq+HpaYtrO0NtYUXJx3G9eaFjsZGXo4uJs7WT52VZgd2fg\ne+juc3Ns2tfY3mFMWdzhe+x7V+LN1OVsT0ha5NJzSVNa2snL2UxX4dbM2E0/YdbP1ufvQ2vY1Mzs\nbUNP6ubZ49Zv+nlnb1rcdHF3bN1c5uplXXLOZuLyUV1l0vDa2n5/T3Lr0NFnUkBK483N0eZGTuv5\n08/QalDeVFXL1Pj54FhN0+t2+uZkSuBTfs183lXXTl3PVc3K1UlJbUzHyd1fTW5U7MfaXF5gVF/t\n/Gre1fDz39x29GdPU9fO699bRmbMyNLXU0ZR8t7q4u7m6GFUYuxn0s3qcE1NUWTS1NjRV09xX2Dr\n4d3o2t5tTmzf3tLTckFJ4tnTydtZTXDya9zcXHbqVGPOXmtmVm9cy9Vq3FhjYf/f9+L021pL4dvf\n5eNyVH3x59nfbmBZYGXP2nrmXVhs2W5edlpy18555eZOXuDY5+3fSEvW4tXS3vhXWVRa9Xvp2Ofd\nZExe+NvPzNtgXVlXZ/jZ2WP3e1rw89vnet9OWOxVb/fk3Obcf//bZmruZFvz4edrc2Nmzc7q7VJD\nRHrNzMLPVUhMVnXWzN1zak9O3M3TztdUTlJVZNLM1+9PRUlp29rLzWxv8Wvf2PfkcmNdTlZZYd7m\nz8zO0evu7XH+bFtaYV5aX2JbdOP6b2RbWmbs4XJwb+3b2+Hybf9pb+3g2tjb+Xns7nb8/1NaZV36\n4+DWydNFP9DFsaOqt+MxJSEoLTJJVFPCtrGsrrpcOC0oLkTKr6mrtslwUFRkXFJMQUBLWuXV0t3z\neVpQUFFXcdrMwsPKzNl6XFNYT0U7MzbBpZ+Ym7VZJRwcHSgsNXJbv6imoKGxTyceHCJBvqmiqLHA\n08jHwdBGOjAuO1nGuri841JFOTo8PkdW18zAur6+wM7daUo+ODQ1QHvmT0K5oaGUk6uyLxUVEBYe\nK7uyp5mhop67RCsbGBkp5KyZl56lwzwwLjM3TuFyxL3Nz/dIPj9CPD5AOUFi2Lmvr7S+3UdASU3z\nyuFRRj06TdPJ5UTWrK2dlKWu7BkVExMfKtGtr5yep52sUjkdGBogR7ugmqKmr1xVTUZLQkw8PF1N\nbsvk6N9bSEpMP0NWX9m/vb26vs/P02JRSj0zLzM3VLyxr79quKusmpzB0CQSFxUeN06qq66er7Cj\n+z4vGxwgMrunmpumquQ5QDI3Pz9PRnTNbMjOT1tJPkZNYG352+7Vw8W+vs/c+VhMRkY8Njs/Wr+2\nrq7QOUO+vaOYq7XoGxsbGywx4b14qK6+nq3bzCgeHyM+yaeeqaaub8trOkM+P0FP1PLMwlpRSzpC\nTU1UTExIYcfBta+5v8lgR0JAOzg+PVC/uLKvvWItLMvBqJWlsrgeHB0YKS1EulutqLicoLu5LRwc\nGypRr52ipKfP09JIR0I/NTdUSXi+3PnYVUpSXElAVkFFxMS8rbK7xmk+MDExMEbl17atsrO5+TIk\nMs7KnZeqpc0fJBsbJCFBSVuiq6SXqbXnHhsZHTbfopyjnqvOwVU9ODMxKjpSULm0wst9SztHY0JT\n+UhzzMy9trfBze49OTw0Olv60Ly4ury/cC8jK2/FnpOfn60mJBsXHh0tREWlpaWVobG+IxoYGitH\nqpyinqS9udpDOi0tKjB93buvxO5ZPTtMbGlwbEQ/T3jHsayvtcpCNi8uNkrUwbe2vL3J7UMoHCZV\ny5qOmpekKCAUEBcXM/3LmZ6flKO21h8YEhUjN6WXmpaduco7LSomKygx386vp7C3z0k+OkZCPUc2\nOWbRr6Wlq8BHLSUrM0G+u7+83/79/s5UOCYbNLiojYyYl1gYFAwQGCC6uaWWo5yYtMQvFxMQGS+9\nl5KVlafsQCYjJCMpLE25rJ+grbpBLSsrNz5PZEZq2sqtqq6y3TstKzM9b8HP28/51sG9veJGMB8d\nOa+fjoyZnkAVEw0RHSa9uK+aqaGZsbk9GxcSGjLGmJOXl6tHNCQjKCsyNHu4tKOirrZ+My0tLjI7\nR0Bcwbytpqy60zgpKS41UMrIw7q2trW3x0s1KSMgI3aim46NnaM5ExMOEB0mxK+ol5+dmLDKNxYT\nEhcvtpiRk5WqSC8cHCIoOmO5rayfpK+uVy0oICEnM0/cr6mrpa3IWS4lJCo86rOssK+5z81rREQ2\nMTU3OzrCn5+WkKmxQRMVEREhLLmkpJegqZ/eQzkZGRocN7mblJeXqz4yHBonLFy2rqqtq7DKv0Ur\nLCMlMUPHtq+uv8XTSFxOPUpHS+fj0MvRy83Ix9jSZkBHPDEuL8qsoJKZoaUpGhgOFh8ttaydmqSc\npd3YJBcYFRw7r5mUkZet2CkZHR4o6ryuqqqstbPDRDwqIicpNvzDsrOztcLA0U9WQDY8Oj5p0Luv\nr7C96k42Li4tLzI0dKidlY+YqOwYDw8OHDa9np6bn6+r2Tg2HRkbGy+1nZKSl6VKKBwaJC1VsK6t\nrLG3ub9vPi8mIykvRr6wrq2xwMx1RUE/Oj5ETtq/tLK3vPhBOC4vNz5X2ca/ysmvq6mfqMzjKBwi\nHidCTry7uK/Es7Ng3TYiJiQr3q+gnaCoy0Q0KTE8QtXLz8C4trKyy000JiMmLkq/rquutdVYS0FP\nVk9bV1v22srHyM9kVEtDRk5cX2vy6+hq3rmvq6Kntbs5JSYcHSgtXbutpaqosF9OLSIoJy/fuami\npKe3100uLzEwWc6+sbS2v9hiOC8tKC49dLisqq/BVjcxOUXZvb2+yu1sWGRpWFpNSlFZ2svKx+pO\nSD0/SnW1rKmfqre6LyonGyQpLtfFrKeuqr9dUy0sLys8UtmzsqyqtLDDfOc9PT47TktVeVvn29vO\n3N10TE1BP0dFUu/Nu7WwsbzHWTk0Li85QnrJv7a3ubnMW0AvLS40Sta9tKuoqqSpt7w5KiUcHyQt\necetqbCuwH5kOjIwKzJA7rOqoqGorcpDNikqLTFIbs+9urm6xd1QOzYxMzxSy7ivrbG7z09CQEFM\nVE9NREFJW9C/u7jB1F89NzU3Q13Nv7u7vLOwraawtdYuKh4cISU767mssa+51tVZR00/P0xN3si8\nsLOvuNLjOzU0Lz5IXcrUxcTPv8fP0lFAOTM4RPm9tbCxuslnRzw4NzY5P07nyLq0tLrG9kY3MS8z\nPmDEsqysrq+5v7/c4l06NSsoKSo0QPnCvLi5vL2+zNVqRkU8Pk1owLmxrre950M6MTE6PlTn3MnG\nw8HJ0GdFPDg7R/jBtrCzvMxeSUA9Pz5AQkRPfcu9ubrAz2hKPj0+RVd/z8bGvri3r621tc9DMyYi\nICQtPc+4r62wt77G4PVcRkQ+P0Ze1MO3tre8yGtLQTc7PjxLUnHOxb++v9RgTkBBTVzcxb6+v8np\nWkg9Ojg6Pkt0zLy3tbe+z2NAOTc4QE7vyMO/uLS0rbG4vE08LCUlJC0zTsvIuLm5uru+ysxlS0Y+\nP0lo3MG6urzD0m5ZR0dFQ0dCSk9qz8a+wMjWXVFMTl544N7d5njj4N3eZU1BPTxAWdnBubm8xNRn\nSz86Oz9IadPHu6+uqqmytno5LiQjIyoxRtfHubq2u7u5yMHuUEU2OztL38i4t7m7y9n7TUpAPT47\nPUZiy724u7/OX0xIR1Ju5tXSz9vnflRRS0ZHRU5i6czGv7/Ize1YRz8/P0pX5sXAvra0ta62vcdD\nOSsoKCgwNU31yL65s7ewvMPVTkw8QUBHX1vc0su+vr7Az3NNQjs5Oz1N7cu9urq+w9x1UEREQk1Q\nedvZydbeaU9LQUZJW+fRxMHDyNZkUkQ9QkRS5c7BvLzDvbq/tsHSeDs2Li8vNDw6SUzp07qysqy4\nvNhOQzg+Oj9MU9XCura2vc9rQDw8OT4/TPHLvLi1vsfzTU1DTEpPWmzSzcbN5lpFPz9CTHzZx8TF\ny9neZl1ORUpKUW/czb+8vb+9ucW8z0tNNjY3Ozk6PzdMWs+8ubO6uMfZ9klBPDw8SGLZwL+9vcLI\n3PlLPjw5PkFQ37+1sbK8zmhGPj48QEdW6cvFyc99WExJR0lOVPbVysbG0tvlbV9dTUhOVOrKwcG/\nzce0vrXBTkwzOTI1NCw4N2TDtLC3scG9yV9GNTUxP1n0vr+9u7u8z91DPDw7Q0hbTmnJuK6ut9RX\nQ0FEQjw5QFXNvbvJ6FVTbV9TRD9GZczJydh+49jM204+OUncwrrCxsfLs668vEw6RDY/Mi4sL1Jj\nur3CwcO2vLxfPzw4TFRmVVTYyre4xtZLTU9ZTUBAPO/Mwr3SxsO4v89eO0FCT09PS1HRzsLNb1lT\nX15gSkZRadrOzOPf5G34V0VCTN7EvsHTx73Ctbbdzl09TTY2MDY9PdhY2dDOwMG7285uTlZMVkhf\naXbKzc/M2tvi/FxLUkxd8Vx24ObYysXLx8ng2mpRTEVFS35u93hbXn7mffFeVWFq/fT4bXjc2uN8\nW1BTV+vFx8bHy8PHy8nh3N9LXT08QThNPl5iXM52xtHHxs/IcP5PTUtJUU/v3NbO1N3Z5eT1Zl5P\nZlFUZ2zz3cbJvr/L0OVwUk5EQUdOVWP079PPz9xtW1BSUlFTXXDu2tfh/ezx69963szIxsfYXca6\n0dDqQFBqSD45OTVIckVm5dm9tLbJx9pUdk87O0JFWdXd5MS+xL7KbF1mUElMQET569rKycC9vMnk\n+01JSD89P01c3szSz9Db6WlYS05NT2f68Orc4evk2+jh3Ona1c/X0dhoTVa+yc3ITeLX2Wk6PDE5\nTUVNV9/HtrC5ydppTVo9Njg6UWnNzMm4uba7yfJQTENAOjlEd8vGxcXBvcDWXUdFSU9ORk1c3cvK\n0Or5ZmVjT01OV2p9/v/z1dPSzeTo6/r0aG5jX+7e3tXxU/zGycvJ39rU1WBFQzk8R0ZETFp9z8PD\nzs3a6upbTkpQX27e0c7GxMrO3vheWVRNS0tSX+zY0NHS0trb5PllWFxeXllbW114ff5rbGp05vPz\nevri1M/Y3ef3eHJfXlxdYGrlbvfuc/Nx9WRw4/bc0dHR221l4tnm92FXXHJ9X1pQVGZoWVBNUXDb\nz9fd6ffb1d1uV1pn//nq39vWz83N1/L6ev5rXV5SWF1XWldYVmXs693c3Nva1vT95X7vfFtfYWxn\nanV85u7u5P9sWVpna/N8eOnd1c/T3NHT8HtnXVxlYVplbXBteGRf53p3+VpaX2/s6+rr5eHc3mtq\nZHfl7Px6d/Xv7OLkcG7pd2Z2XlJl9/fp6Ons4+Ho5dn7V/3v9+9kWl95+m1qa2r93uf9eGds69vp\n5ebq6uPsXGn/bXlqam5yc1r36V9wb+Bqd9Dr3tf13NhgXXtdW3lnanVnbPTx2eBcaXl+2eZgWvjo\n7dx/XWzh3fbrbFFi7X11Ymxz2tnr6mvx7+Tqb2VXYXPn93n98+Ln3Ohx9Oj1cWtpcWX86nVoZmdh\nbvT18el99d74a23v3t3kcHjz7u5u++v8aVtk/29mW2Du1+xebX/c2NbrcG1pcOX0WGj36mzz7lz1\n6u3Z5WtYbGr2+mZjeeDk4Obt+O3k3/dwc3znbV9xYuLda2Bwb3RdVGBt92Vo7Ofi/+jk2dnv7/Hq\n9/d7YOvie2V59GZuenNycGxcaf75b+Hqcdfc7ur0Xm34XXboaHD3fOzs8v186e7+e21nY27+9nVt\nfG/j2/Du3uT95+9ma2d97/1kW15h4frv6Ozf597u5OVhemlefWxqaWtrauP6cnz17XxtYG1vZ+zm\n8+rq9vPi1uP572xo/XteXm9q+Oj09nDt7fHn7GZrfHv9/HFx4uZ5bG96cHpsXWR0/enn4ePp5/j0\n9XZwfW9yeHz97Hn13u72/G9z+etuZGp++3H4amn+e3py9ux5euzj7Od4Zfbn8Hp3eHd9d/j/fX5s\n7+dzbWx6//z6c/Hq4ettZl9sd2r95+Xr73v/ePfk+2/18uvr9/xs+/VpY2dkX2d2//vw/3fs6eTh\n4+Pu8u5xaf77dHnvdnn0cHh3eHv973H65/dpbW9l+/5sfXhvefj09uzh5+ji9XJ/+Xx5bm1z9uz2\n4eRue35pYWJeZXptf3758G7u4erk8/fl5PD0+3vybWZqZXvy+fP79u7+9Xx483BoYmVqb2987/zm\n5uTf+frycXF5dGxlev7y7vzz9e3k7O5tdvBye/z5b/DyePls+nf2+Gt6a3l9+nVu7358bmr/8eTm\n5+Tu7vR/bHT5dX50evpsanD28Xl3cPD17ux+7nz+9mxuc3/++Xx1b/3z8+X2dvjv3+D3dXh5bXlq\nZ/jxenT4Z19rbn5+fXn57vL55ex68ebp+3tzbvDq8/3xdnbyaWn6dnjz5Ot4enL+9/h2aWtseHV6\n9/fs/Pn58X596eLsav/3c3ty9u/u7/TufXNob2xn/G9fZnF8+/537uXp6+jj5PPy9Ovu+2tkf/Dt\n7/x5b25iY2xubXf3dPT0dO77/fpw/ml59frvfufr+Pt57X/p7W/4ev7y/vd2/e587352d2v/am5j\nYux6bH3n5Ozq/+7hfW7q+G789m5453hobXFxbe5r/d/89enrd3D8ZfXm/vbv5/zv8GZudnZsc/5l\n+fF79/3p+e57Y3Vse/73+3zn9Pfv8f/46P77+XlrZmJebP58//VvcO3r7ufn7uXm6+7t4+nf6O7i\n8O/yeWFaXFZVWFleXV9faf367enp7ezh+Pz5+eTl4+vv5e3q7P/7evt58Opxdm//6urpbU9Ky7u8\ntMTk5PjgSD8xKC41P2DZ1824r6+zv1NCRT5BQD49Tc2/s7C2u7/A1XhKNjI1PUlieG/ZzcPAxtlY\nT0xTZl5cVmfp2s3fb2NdYF5bUE1j79THz1/srq6vqtlaVEZFLC4iITdBz7m3u7KorbbNOiouNTdF\nR03esaeoqLd/TVE/ODssLTtyv7izztDI3dpTQDM8WFzExtnZ0snbzmg+R0hNYOPg89vf2M3M6FhV\nS1Jrxaqusa3jy9pDOiMlHyU/Ps6/tq2opLLKRi8uNTg0P0rTsqmpr7TK5Gg/MisqM07PtLa4t7/B\n+ko3Lzc8S2vUycC5vL/QXkdBQD9HSkxY8svIv8jdzvj3/ltrTnizq7Owv3zaWT8pJSUkN0pkz7iw\nraiw0k1ANjg9MzlPyreurLGytcRnRDArNjY1TNvQuK67xsplSk5ENz5PT9i9ys7E0/v3XkJGVENP\n9lpw1MvU0t5O+9nv3n9aULanurm95MLIWysoKyc1PDQ50beyqq/Gy8P8RUEyLz9nfM25tq+sssHL\n+z46Oy4tNj1Y69TKt7K8v8zvUE8+OU5RZ+XQzca93Pj1TkhDQj1JY2re18/Av8/Z2ODlWc2xz8u3\ny7rMYDovPiopKyo4UM3duqqurq+92NxRNjg9PEJd2cGyrri6vdttVTUsMzUuROTrxLu5urK9YvpO\nQ0ROQ0bcaPrIxd1t+UdO/EpDUub8zsbdy8jH1/jtTM63Ynmyxr3D3nVHfCoqMyouLT5Cx7XIsqqq\ntrzB9tZVNjhESUVX2NzKxdzLwdpf/GZXZlpJT11JTF9VT/rw5cjCyMXAzuDgWkxHPz0/QURS/NzP\nw7+8vMXQ6HpSSMlvO8a7xb7AwM3LTjhGNCktMzAxREpruru5r62zsq69x9BnXE8+ND08NkVMVFBt\nwcXIxMDF1uNj7kxCSUxMTHHr8ODTy9LS2dfoXlpdU0hITlBMWOXV0s3ExL/E0cnDVtu8UNXtYt1P\n+z9fPjVLOT02R0E/Y0/Mzce8uLS7tLO9usfP11lQPkc8M0E6PURNWv3S48bN0c/U2mnebGdpauj6\n2NzUztLW4ftUWlhIQ0tMSmJ+293fz9HRw8Blvr/fvuPP8WRpTV87Q0Q9PT5IPkFGVF9q38/Cw8G6\nu7y6u77JxMlhdU9IRzg8Qj48R1NMXHzY3djNztLn09jb4ufT6N/Z3uhw7XdgUUxQSkpOWV9jcN/Q\n0MrL0r/P6Lvg28j1y2ru9mtbP1Q/PDw7Qjs+Q01SWtXUzsO+uL27t7q7xb7J5NdZXUU7Qj82Oks+\nQk9e5Hbbz9Lb0sjY29DS0NzSzNx29udeVVtNRURITkZNW/nj4sjIy77E07fD1Lvpydto/UhQO0I7\nOD47RT1EUVJpV+7e2cfGvb6/uLu6vL6/x9V25UdBQTk/ODxAP0VKeFdz5NbN28jKxczNxtDO1tPf\navteUlJQT01ITklLW0v8aXDY28e8w8evxb251L1X8ExGPjRDNDo1Oz86TEpmWe7IxMHEvbm+vbe8\nvsPDxttQX3E6Qkc8PjtAR0ZCVfpe9NjO2s/EyMfOxcfQ0NzP8lxkXlRIR0tLQ0xLS1dR9ezt1dO5\nvOyvtse1ybrP7ntFVS82Ny8vMD02PUZZ2+LIvLe6urG1u7m8vcje0PVISE49O0M+PUBAQkxOT33i\n8tbHzs7Fy87Hys7Q0+Lo32BmXEtRSEdISlBGUXpbcNbb68iz0s+sxLy5xr3k1URMTC00NDAsMjo2\nRVBkz8bFubC3ubC2vbu/xM7Td1ZTREM9PDw6PT5ITVF16tfV0MvSz9jU1N/R1trW0dTa2n1mX09O\nSkZESElETWB3Z93I1seyvdKuucC6ycFc3T83TC4uLjMuLkA6R2zdy7y3u7Svtre1u77Ezf/h7EFJ\nTUc8OkBFTTxG/nRbV83X4+P90tfl8c7H4NTQ19fh3frqXFBuU0tER09KUU5n0N/Ty8jLvLnju73G\nx/nEUlxROkY7PTM3PTpDRU5Z2NbTxsK8v7++wb/FzcnMz95zdVxWTUVCP0I/QUlLUVlj7OHVz8vF\nwMbIyc/P6uD9YWVRVU1NTUdPT09dYHP+4NPQ0tTO1trZ3uvt4m597npxZ/h/aHllbWldbmL+dH7j\n9utwbf7+cHPm6vjyd2r/al1YVltXWmRgfeXf29nPzs3Kz9DV1+NlcGNdXVVdU1JQT1dSVFdeaf7b\n2dbT1M7O0NTa3u9vZ2BkX1paW15ZXWBhbHXt4t3Z1eDe4Pnp+ex0aHRv9O7l5u/vf2VlX1xdXl9d\nXF1mZ3T87Ong1dTR1NTc29rn5PdtXFZXVlRUVlddXGRufeXn2tvZ19jX39PW2d7q625+ZWFeWFlR\nVFZXUlhdY3R539jU0M3Rz8zP1ubjemdlWF5TVllVW1VZWFpdXHh+++ff2eHZ1tbR2Nbk6N/56vj3\nfWJlWVpYU1lUXWll+/zt5OHa4d7d3d/t5uXo4+bl6/duZWJaV1RSTlJXV19v7ufd19LQ0c7MzdDS\n2eHvemRVUU5NTk9PVl5dZHjx8efh4uDe19bZ2d3f7frud29mZWdhY2Nvcnx3a29qbWltcHD99Ovt\n6eHj3t/e29zc6vl6b2pqYmFgWlxcYF1ZYGNqffTd2tvX19fX19vg5vL1c29pXl1cW1tdZGtvevfr\n7fD/9+358H59dm/5dnZ1cvLq6O3t6/L07vH3+/75/vd6ePv8fnX67fL07fh5e3dtampmaG9yV1/F\n0m3nTnL+TF5PZ+tf7eLZw8zd1N3M9VleTPdeXmJ01d3lat9VVU9DT0/dT+/L6cXL1NHQ33Be6Fhl\n51DxX/N0UuljcOhsfOTsavDd4PLrfm5qX1ZbWXFhXeja0nHHv/HFytXG2tJITnQ7Rj08P0JOP1/c\n2dXDwMe6ur/Ex890dlxES09FSE5PTGJtVmzkdF/wd2bp4Gxu2Nzi09XS1dHcZd7leXxNSHuzvW+2\nwLi152EyRD0nKiYrMT5OU76tq62tr7O3zFs8OTw2PDo/fsq+vLq3uLm7y/VSRDs0MTE2PklX8crA\nvLm9yMzdZkxEQj1ETE1g38nHx8jEwsnVckHbqbjEut+5xto8IS0qKC4pLjnNrq+rq6+ur8dMNTM1\nMz46Qcu4rKytrri62DsvLS4yNTg8UszEwb+/vr3D7FhUV1RQTUxTaW1ZX+rc0svLfmrT5l1aU0BL\nraauqbrAu8foKCIfHCYsMTlbs6ifnqvA4UtEOi4oJzh2va2ur6ypqrXTOSsrKDBPU9XKvrW6vVQ6\nOTU9Pz9Ka8q+uLa/yNdfUUdHSUxYX2vazc/cY3NIUq+qrKu6vtTd8ywnHx0iK0hdv66so6KnvEQw\nKSowNzhB5LeooqOuvsf2TjUrJSI137SorbO/yNlIPS8qLDhR2r7ByMK8u8LXQzU3P1zgz99wyr6/\nxvZPPj3FrKqpscvUWVE7KyUdIC09xa+sq6qrschKLSUoKzvoxLayrayus8pOQTQxODpOSs+urqmy\n4UUtLC0yPT1X2Mq2sLS81WdFQEI6QUxTz8S9vcDH7WdQP0A+Z7Gqpqe0vlU9OiwqIyEqMHm2rKis\ntMtHOS8sMTREzbutqqqtvNBLOD89PkNC9dC9r7Cvv2JAMS4vMztJb87Fvb3GzPtVTUNFRk9/1sDC\nyMzqZ1pZTEFISFTBraalqLXSRDIvLCwrKzM93LaurLPJTzYuLC89WMm7t7Gvr7G960U4PURU293O\n2tW6t7fLRjcsLDI6Ufrf1tTHx8vNdFtTS1Fg3cjExMzjeFxZaFxVT0lOxaumpqy+fjoxMC0uLCwz\nPdm3rq2600w3MjE2P0/Qvbiur7CyyfNAOD9CZuHYy9HOxb690E07MS0yPlD32M3IwsDH22lMSE5R\nXW3t3c/GydbbeE1KSVJWR9euqaequMtMODMvLSssMkBmv7G1u8ZdQzozNztJ2r6xrq+zu8nyTD87\nOkJp18S9xcW/ztB7PToyLztFfcvOycvPx9DvY0hETE9a3NrbzNXZ0PNbXE1W82rszbapqq64+0o9\nMzM0Li43QF7CvL7C0ltGPjo6QlPYvra1urvAz99uS0ZHSFrOxMjJyM3JzmZHOzU3PUhTfeDm1MjH\ny9hlUFf25eDd6dzPy8rVXU5NSExQS0pOXtzOxb7Cys7Kys3KzdnsXFNOS0pGQz89QUpOX/vq4f5w\nZ2Zva3v05tTLw8LEwcHBwcjX2t5dSUpEQUlMTlhUTlJVU1lqZmL+5drNy8/Q0+h3b19ibV1XZ+ja\n09fp6tHLzszKzczIy9PjVkRAPz9DRD8+RExc6+trYmBw5Nnb4d/f1srDw8PFysrFxc3tYmdcT0xH\nRkhIUGFmX1ZSU1pgYWhq+dvOx8bK2fNzZV9cUk9XaeTT1ODi3uPq6evy3+HbycjLzc/Y3+heSkE9\nPUFISU1UVllp9PP2bVpcaX3p08rGv7+/v8PL2dv4VVNdXVtiZ2VfWVJPTUpJTlJdf9/Uz8/Y3e9j\nZ2hfZ3J7/Ont39DW6fp8b2x6797P0NnPyczOz+BgWlNNUVJLS0tJSk9UUVVVUlVfc+zY0tLLycnJ\ny8zOztPc5v9p/vZkeuR9XmRmVVZTS01VV3Db91hd39ne3+rmdlJYZ1pf3u5XctXY3Nfl5dbd+9/H\nvsW+vdnl3GNMSUE3Oz47QU5PX9nZ/PNgV/3m8uba3My+wMHCy83P3GlkWU5QS09r4+B7allSTkxO\nT19yd+7h2s7Jzt56Z15ZXWhs897k93praWpcVVRZfdbpb9e7r7W+vsXIzU83NDM2Pj06RW3Nxsrd\nVU5aV0tQXefCvsHCwb/Byt1gU1xeU1haUnXU3ubrZHfxWU1KS1hn59fc0NPd3nFbXVhPT1BTZe3n\n7vfv7dzhYlxYX9PY7tDQwa6xvrvL0tJFPjUzOjQ4QT9U3WV432vn7mZ1ZuDX1cfFwr6+wsjO33tb\nVEtGSE1mc+r5aef9Y1xSVFhcZ2nz0c/NztbT2ul1UU1MS1RWVmFo6N3m52lv2ujz8H7s2cG2u7u6\nvrnNaEk5OjExMC45Pk9s4sbGwMTN1d/u/PBs89nMxsjFyczL0/tZTUlJRUhNVXnv5unh4H1zXlpe\nbens5tva0c/T4XBWS0tNTE5YbOfVz9jc3+z2cG5z8ODp1b/AxL7Hw8bZbEZHPTs9ODk4Pz5DYWDf\nz8bDv7u/vsDEys/Tc35cTkxLVE1WXVNe69jc1eDt2OJvWVpOUGBhX/zj9NrS3drZ5259aVpmZVte\nb25z7O/j3+Ht5+h96uv79O56bXP07u/e+Xfk597l4+1092taUU5NSk5PUl5239bQ1NHP1dfb4PX3\nd2FwenL93uT48W566O9tZmNaVVdQT1xo+uDb2NTU29nW3+73aGl4bGj7f2369nR97n5qbWhkbnVv\nbG139fxyb3n95t/e3OLZ2dribmRZWVpXWlxfbe/k4t3f4ex8cGVfXFtfaWr/6eLe2tTS09fd5+/9\ncGlhWlVUV1VWWltjd+nb19TT0s/U1tji9HhrZGBcWlpbWVdXV19rfvLv5uPk4Obp6vDx7unq6d7b\n2tnc3+Pj+2VbVlRTWVxcY2lxcnZ7+/psbGxtb/rt6+Hf3d/a1dvZ3e3/cWZbV1NSU1VZZfjm3djU\n0tHQ1Nbd6vltZ1xaV1ZaXF9bXGJocHr59/fr49/e3N3f4+vy8/B+bm1qaXp7e/rx7Ovr8PXycnRx\ncP3z7vX0//19bmljZmJlb21wbnF5fn55/vTs6uvu7ejl5uvs6ury+v50d3p8fnF0f3t3bXR8dnhs\namlrcnzw6e3r5+nn7n5ubnZ58/v27vJ7bWxveXZ3cXf9/fX3+vj07fD48fD2/v17+/Pz+XhtZGFj\nZGl09ezn5Ojs9fr5fvt9fPn06u59fv7z/Pv3/vr39/t3cX39fnZtbm1pamFfYWN57uTi4uHe3uPp\n8vp+dWhgaHT69/X18/By7dHP1WlNTFVy721SS09y2dHV7W/02tPX9GRgeOji6XFeXm/m29znbVBu\n39LTZk9NV/bf8VpPT3fkzM7dcW/t3NnfcmBmbOjh9GZaWmjp3OBvYGV07fJuXl1m5tXV3fJkZX7h\n2+F6XFtq8ej1bGBocvjz+nj87uPh8nVrbPXq83toZvzg2+f6b3Dw+e35aF5XVltocXVyfHN36t3Z\n2dnd5Orv7/X1cWNaW2D96+ftc3P97O71937x7/J7bnT67Pp4b21zbm1yf/l3bm5v/fLo9n5+9+/u\n7vpwcH757vxzbnr48u74ffjx4tnb72xhZWn57m1cWV/14N3q7vz06ut8d/j6amFgaXJyYF1le+bf\n4Oz+fOjb1N33bGBga/v7bGpr/u30e3d6fHJ2++rvemhkevXn4Onz8/9y7d3e/GNpcvPw8fdzaFxf\nbGpsY15l68/HwsDBxs/b/F5NQz46ODk9Qk5ffeTUyMC9vcHJ0+Xp6mxZUVJXX+/a1tfY2eX4eGpe\nU01LSkxTWWBeTWm/ubCvtLC+yMXcXDstKygmLDE5SEvcxb+2sK6vtru+zuhxW01CQEdRZtnMx8nN\nz9rvX1RFPDg4PEFNYebXzsG6t7m9xNDrZVdNQjw7PD5DTl5OYrmuqqywrrXH2vFSNSkjJCUmLjz0\nzcK4r6ysq62wvm9IPjw7PUJFRkld2s/BtrCyvMnfUjsxMC8vLjE9T/HKubCusbS3vs9oTUQ8ODo/\nSE1a3czH1mnDr6utt76/yvJRUTwuJR8jKTA5TM+9t7avq6mstsDQYUQ7PUVCPkBP69PP1cq/vLu/\nws9rPzY0MjY1OkVX38m5s7G2vcbeXklGQj07PERW+dfJyMz3WceuqKq2xMXBy2pNOi4lHh4kLzlF\ncMGwrq2sqaqwweduX0Y7Oj0/PUFczcDM3tK8s7S6yu5HNS4vNTg3OELowbm3s7O5xNzrYko8Nzk+\nS2Hj0dXc7lZSxa2mprHBxby8y1o1KyIeHSEsNz9H27Wqpqeoqq660m1YSDoxLzdAUGzezMrU2sGz\nrrXSTkQ+ODMyNTk6P/S8sbK4vLu6w95PPzkyMTZGdOX2beHOz2/csqaiqr7Ju7W9Vy8nIyAfICcv\nPkzWsqahpayxsrW+7EA3MS8vNT9X7NnLwLy5tbGwutZNQ0A5LyoqLzxR3cS6tre2tLS86UI8Pj07\nODxJb9nOysfRVt6vo6Gs4lXFs7dMJh8gJCYmKC46XLqon56msbq2sblTLigqMTw+P0pY1LqwrK64\nxsnHx+c8LysrLzY+T3ncwrWtrLTG331fTjszMDI7TtrIxc3PyM7cvKumqb5hybKx3SkeICkuKiAh\nLVqzpqKiqK+wrK25QicmLT1IOS82YbqsrbO5u7q2uclTNC4yODgwLTVZw7e3urm5vcPUXEM3NDk9\nQkVL88S7u8HNaVC+p6Kr6kC/qatVHxslNzglHB80w6ulqKqurqekrfErJDFQTy8kKl+xrLTEvbKx\ns7jFZzkvOEQ5Kycud77I3syzq7HG3+z0TDs5PDs8Qnu/v8/cy7zBSlGzpqjDRMGnrFUiHzJBLB0Z\nJU/IwbmupqSqqam3XTMzTEktJSlJub565rioqbnJxMHTSzk7Ny4sLzxNSlPItrC0vL6/0GVPSEI5\nNDxQ+NnY2szGwcRNP7umqb9BxqClZyUjRuQoGRgnWWI/36yio6usqLHeSURFNCYpO1NQQmG0qq+7\nu7Cvv2lbaVM4KysxODk4P967tLW8u7m7x2lEPTw7OzxHe9XZ3su8ucpEOriisFM/tJ6vMCpKwzkb\nGik+Nyw7uKaqsa2qp67MUj06RTorKjFYzXHruqysub62scFsUEU8MS4uLS45WOLNvbCvuLu4ud5A\nPEFBNzY9Tmn028e7u8x3WdisrE5MuqepOzPn1j4iICw0Ly83ULWus7WyqavYTN/HTispPPNPOUHP\ntbO6vcO1ssHeas1bNC41PDEuOWXa4si5srO6xM7Q1ko1ND9GPDlnyNPn0L2+wl9LsKtbzrGvqkBN\nuUg7ICQ5KCwpLMq4uMS9qaixwdDC0jY1PT5LNTzwybbH0Lq0t8/JwMlzP0JANi8xOUA/Stm/uL6/\nuri92lNORD48QExETWnev8XTztXEekW4rUPKqMirxk24Mj4uIjgkJjM08+xXvK+ursW6sMPMQlTT\nPEM7TclQWnXHuc3Kzcq51OnSUlE+ODs1OkNDUGfLu8LBwb7F4PhUV05BTEtGTVz6Zm7Px8v+6c++\nrMnzp73Dtj2+WCwxKDsrJTUxU95Tzri1uLmytMbB0e/PP0VZQUdJa+1v6tnBycu+x8fPYFtUPzc4\nOTpCSVzk18y9ub3AxMXU7l5HRD06P0NZV0ngy8XIxL7Lwq+6WrC1XbxPXe8yNC45Lik3NUBOct+8\ntL6wsri8v8FodlpCWT86V2RcUW7ExMzMy7q/XOFtTEo8PDk8QEhoauPGur7GvbrIXkpjX0E3OUpP\nS1Ff1sbF0M29vc3eyb+4Wu+uXNjdR884Ozk8PSs9Pjw/TtPNwc+5s73AyL3W++VKVExP+F9kdM3D\n1vba0GzzVz9hUkxQUmRb51/w0NTa28bXzcx9+llbUUVKP09TPVZt58zQzdG9v87M6Nq/v0XTsWTb\nzeTRS0E7QDgrOTgzPFlmXcW+uLnCure73ODD6l51W3VdW2xYUEpob0JIWG/cXtzGz9vf0e599OXx\nUWjW3Vdj6HBWT1hVTEdUXVz04dfb1cbU7s3V/srcaNbtzc7pt8navWLPWT9EMzwuNDcwQEdiWsu8\nu7W4s7S2vMLB32FWQz44OT08Q0ROemzfwsrDtc7PusPibHFMUUhHS0lLSvhbZtDh6ffZ31hfXlxn\nW3Pu9/TV0XrF22fK2dpsvsZKsMZduPfVTklHL0AsMDkyOD7KV8S1ua+zr7i4vO/PXT9IOTc5QEc8\nTmHbzM2/w8bOwc9exNZIYc9kS+r9XFxd7WpUVupsRFdzTkVY4Vdf2u7r2s3Q0NPUydzeytpZ4dVK\nVslmYs/qzfXU41byQVpDOz0/RzhW5d/fxbm+ur29v9nX21FJRU4/PEtIS0584uHMysXHzsrDZnzG\nZljh3VZR/mZWTl9aW09Pf1BLZOticNTf18nK1NnZbO5qSlRcVnBjXNfY68W/67rF1r9qw0dYTTlV\nMkQ3QEdB2lXMxb++vbjFwcrzb1JIQj9GP0hLUOfz0NXPxsjEztDYbdRsS+fiTk7dZ0776WZc3m5q\n/mvg71xn1+hVeetWXW5oXWRsXmlqf+vo2s3V2sbJ19XaV8nbOMnSTFndyDrU0EtvTdhFU0tP2UFp\n295d78Vb8s/h+F3S8X77Xsxwa+Ld1l/V7GFhW/RV6epixublzs7wXM9TWWleTUz2TFxbVW1gX2N/\nX2ns5HPg3O3Q1tLYys/i0uPeWl3SWEvQ7Vne0ORty+peYV1PS05CUE5NWHt0XNLT2czM0d/c6XBw\nZ2toX1/26nbo7u96duXx32Xw2OHZ2czf4tv0YldeTlNPVlxUWl5nWGL9Y33gdf7d5e3Y3H3azOLl\nzdbjf2Pc507Z1V3g3s5W69dSW0liRkpISGtIaG3i9d7E39POztLj1+5u+WFnW1thYW5y7O/x5PHj\nb9TVYtTZ32rb41bocWxXcF5RYFFlYl5gaGphbW95eePp59/k5+rWbOrM293TyOvv1k/s6E3qX/Vc\n9c1P1ndvWk9zQGRIUltT+1rOb9bO49blz93o4nf5Z/70bHpu5HRu4u95cXRi2PJZ0+Ns3s7tbtn8\nWlx6VVdiVlpdXlJzZ1nv8nHt1eTb2ezb3/jv1vtz1dvp7dL8UdTbTuV8+P7w0lzdXnD3VFVOd0RO\nWk9UXd343M/PztHU09z5dfpcVVxaVV30ffPp3/lezc1R0cHrfcjKT3fhXU1UW0laTV3yYWbo0l1r\n32tYbt9lbXfr9nH219rw1s7S2c3P42Xw11FO/V9uU+fiWORk21xbbVVZSe1eWG7p22ba1t/g3dft\n/eFsZVxkaVxvavv+397q7vDQ/NnP5tTd3PpzZlFXT09PWlhafP3q6ufr8vF7fG5nY29+a+jp9t/Y\n1ejSzt7f0txOcNRMTeRWX3ng2G7OaNvrT19OWD9WW0xie9d60czPzc/O1eRraWhST1tQVF9zc3Ha\n3Nze0M7hztvb3PXsX2RTVlhLT1NoZe3Z4dra1/Z39GJcWldVWl9ebuzk39DP19fS1uXc2HVdffZS\naWxu2PXR3dbeXeZWU05VT0ZWUF9b/eDb1N3O0d/f2uteV2dcU2Fu/27n2dz43cJ5+cHUY+7PWE1r\nUktMV09pfF/YzujmydBf8O5UT1ZUVVtVbOnq6djI1NPEyd3q0u1TUF1iTltb++xc1NbU6PjTY1xS\nV1BHUVd1avXX09Lcz8/b/mpoVU5RT1RieuHWzdDV08fP79rZ5F5XX1lRSEtRT05i4d7bz8rO2eHt\ncVhOT1BMT2P16dXR1djSytnc0Nr0++T9ZFhMS2VuVFnfzPHWy9DTZm1TT0g+SUxTWt/Oz8bHyMvP\n615dT0dHTE9abOHPycvTw77P5tzTb0tMSE5JQ0pf4V/z0cvP3uDr4mxRVFlbVllrdvTs39PQ4uDM\n0HDfydlvfN/lY1Y+SepidVTbzuu+z91eTl5HUT88Rn7P3crHwcPI3XzwU0NCTEhQXf3VzcHIyNHs\n1+nsbOTaceltW05JW19RQELUx+T3ftvQztZSW/5YVl9vY1ta6MfN6nzZyNbr3+/y+XdgVEtIYu/P\n5nC/ysbUXV1ATz06SUZm7sW+vbrI1vFhRj4/RE5e7d3IwMXN09hfSUhLZs/l6c7Gxe5bSUVLRktP\nbeTRxszN0+hxaWpPT1poaV508t/Yzdbu3tfdaltWY3zx4tvcVU1x1cXQ+dj4z9lORzg/RE3+U+vP\nvrm/y2xSS0xKSk5d2sjCzdXc6nhOSlHgycjK09/obVNDPkVRd+z37Ovl5/Du7eTo3tji+HhwWFJj\nbfvv19DQz93nZl5jUFFVfN5kUHXKvr3UflZU7k5EODlO/MTHzNDayc3bTj9CUdPLy97l19XYXkxF\nSV/m1/f/xrvAym1GQ0tSSklRYN/L0nFeYO/W1uhjZvzr5HldW1373tjd4tba3uT+XldbaO/n19na\n3FU/Qte9v81kU1huekc9PkXvxcTObV3q1MzrTEZT08fI2FdOVW3m5nlZVN27ucJ9Q0RO9ulaU01n\n1dXvUkxW+M/S43RhfuHY7l1UWHvc3uzq29PV1XlNUGXf1N10Xe3S2lNG4s7Hv19MQEjkVX1RRPjn\nytRfVERuz87O9+rk1MvcYEtITvrRz+JWVs26vtdOQkVa+F5XU17hzc/7V0xQ88/R7ltZcNnU6F1O\nUWXi09d6aW/VwMjtUk1W4c7hYfvEw87vTERDUFdaZ1JYfNLQ63pST1JXX17l0cjBwsruXU9NXuza\n4ODec1VT4srJ1WNXVlRUTlBd6dDO3nRdVl1k/flkYV3z3ero/m9nZOzf1df38nzk2+nf/HLezs3j\nzc36WEtbTFZkTGFYcW5ZX0dUZHvfaP5dd87Lx8/T2uTY4fRjXGN36GlUes3J1/tgV11cU01OWnTi\n3+/08/jo3d9hVl53497b7vTrblxu2XhOae3t3d7d3c/N09fm09Hc7k1OTUpSSlBOVeXf31xRT1nd\n4+pja9/TxMzX4O/Y4NriX15YWFj1y83ga1laW1tPSU9h5NTa9nLu4eDn7mVYZvXi3t7pb3Pt8Hlu\ndXbu1+ZseOnf3s/R3srC1FhFSEpOXktKTmHd3dhfVFVacFtaU/7NxcHP2u/n2uDlZmvh2/rszsLJ\n7VpIR0VDQ0NU89XY5vJ/7XtnXV976tzXz83T4HZqa15VVm3h1tTU0Nvf6nPVv8X7U1dYT01GQktu\n6WJjXV55+fZdVldi5Nvb+enMycnP4unr2tpnU1fgwbrGfVNUWkQ8Nz1Y49jr49XN03VYT1ZaavDl\nz8nI1PZ1bf5dTElaz8fKz97lyrW7Wkpbc1VBOjdA7s3faGDf2PxXSVBn629cdOTKxs/r/t3f23FX\n+9rZ497Cu8fxVFZQQjw5Qljl4e3Yz89uVVlfXlFYYN3Jy9PZ1dTbaElK98zV/enPyM7dxsN3zM9W\nTzw/ODpMRvXq28/S0mbidVRTUGNc69/bzc7Fys/VbWJVV01N2su9xNTP3f5BOzxCTE1VZMrDyNLc\n1XpPREplb3d62MjJzepubldLSV7cy8jQzsG/wslo2NVISDc8PjxQPWXc2c/7zuTQ3F9sX3ZTVlp2\n0MzHysnGzd5jTEpd3M/Z6c/K111HQUNIRUVM6NLY2NLJz+1eXmZbWFps283U7erg4lxWb2nn3NDQ\nz8jKxPfKx05oP0lDPEs1SUtYdWLH3L/Fz87m0FZXS0dZVPP13MPFwMbMz2BXTXLXWldm3edwZlFc\nWk1KUm9pdXDt1M7Xavl+c/Zv7HX3+GdnbWtj6tjMyMrLzsjMx8tj711VSDtBOkNFQEtN3N3Oycq/\nyczlcmJST0hPV2Tf1cfExcTJytT7TkniYEhJVuRs8FlT5/BvTVxmZO5m9PDZ3mnq5Njh7+l53+hs\nWE9qaG/k3tLPydBrzL3Q53r6+VljQjtGRko+RVVX7+XPy8fByc3N2PVcWVdUVl9pc+nX1dbQ0N/e\n0Nr4XVxXTlhOS1JcZmXw4enYz9Dc6udnXmBcXV/7/vbu7/Ns7uXl3tvZ5+bpdGRoakxL8dDR1tHO\nzsfI31tTUUhAPzw7P05s+N7QysK/wMrT2enzcGZfWVpbX/XY1t/m4u77d2dfXFlUWGRuYF5r/urr\n5N3e2dfa3Ob5amBbU1ZUY/Dq1tHR3OPe/XFvZFBOWmPm3dnS2cnGzth4b1lOTEBCRkhMUHT27tzZ\n0M/Ky9HS0dPe7G9fZF1eaWdoaHvp7fJuZmpqbV5cXWBjWVhd+97b19bT0dDV3/t6anJ8aWNcam5q\nb3FuZX71Z1ZWXm/Wz9PU18rKztLvd15XWUtLS0xPTllbXWNu6t/SzczNz9PX3OT6Ym1vbHlocXP+\n6vt4empoXV5lXmRocGl09f3j7fP+8N3b3eHe3+Hd+GdqYmFhZWhjanp8dfn0X1tmbOXX39/t5NPc\n1Njf5Gv7ZVhSS05PVVZXXGp+9t/e2Nvc2tzX2tzn7tza2eL69215aWFiWllRV19na2VkY2v+93nv\n39jV0NXd2+3zbG1tW19YWmlu9+7t7+Xf7v5jZWppe33q8Obd29fc1+Pq7GpvXl5eW1lVXFpaWl5h\nZnnx5dzU0tTS09fc3+r8bWdlYmhpXV9p/HlnaGVhYmZbXGnu6d/Z3dTT1t3o6X5ram5qa3FyfvHx\n9fnz83hrX11kcm1mannt59/g4NrW29/v+mlcZV1aWlZXVVtjbPj97dzZ2dnb3eDf39/g5Ojs/np7\nZmNiZGFbYVxaXWRrZvz1+ebi3d3c2tve3uh6/m1pYl1dXmhqbXp2dWpiau7k4+fw5Nra19jb3/D7\ndGljW1hWVVlhXmBobXz87e3q6PPo5efe493V1dnd4vZubmNbXmRiWV1hW19qbW/+bXH27ebu5+Tb\n2NzZ397j7u5lbGxgZmBpXk9UX2/aycvM0tTP2tZuSUdCRElPX2V73t3W1N/tdXrwb/hvXW185tzb\n2N3i4eDc2+jt9Hl4ZWFYVFRRV1xidnhv+OHh3uZxZWr09+zd39/mfmt+8+3nY1zozL27vcHne15N\nSjo1MDE7S+jLxsC8urq/0mZFP0BCTE1b7dLAvLu9ytxmU05HQj89RHrGu7i9ydjrdFZHPjs/T/PR\n0uL4fejjeVRFREx6zMTGz+fq4Nva6fxgSkzGtLKwvuJYR089NC8pLDZXxLu3ury4uMP0PzMzOFXi\n0MTHvrm3us5SPDQ2O0JNUF3gvq+vsr1rRj9DQj9APkjXvrm9zl1HTE9LRz4+SOrAu7rA1+XWzd07\nMHq+sKWuvGhIVTk7LiIlLEfBr62zube821IzKysyXMm1r7W0tLa/dz4vLTM+Tezay8G6tr7WSzUw\nND1aybm3tbG1vdNNODE0OD5TbenRx8PJz3tKQ0RGSldz3ci8ur3E0/w8K0S/tqmvvM7owWFCLx8e\nJjXmurG0tqyrttE1KCguVM27tsK7sq6y0UEuKjI9TF5VbM23rbPFTTIwOElt1cfJuK6tsMVNNS83\nOj1APkjrv7a6xOBWT05OST8/SmjLu7m7wtDsWltJLy5avKulq7XS2GA4LiIeIzXIrqeprq6vvlcv\nJCMpRM6+tru4srG3dTktKzVL4MvJwr24tMFTNi4zSde/ury9vbvDXTsvLjdK7NzV1s/BvsXsSUFE\nT2NkWlNh2MfAxtPl7e9tVEk1MNOvq6m0x/ne2jcrIx8rVLivr6+yr67EOichJzb1v8XFubGsrb5H\nLi40QVleYt+9r620yUg0NTtFS09c+cW5t7vMX0ZDQj5AQkRW2sG8u73I2OhiS0VCPj1M3sW8ucg/\nU7K1usZFPUDT5Dg4LTBUx73gfN/Is7PNPjU9WNHI4k1qv7a4x041N05yX0dFaL6yuMtfVVhZTDw5\nQGLOx8bOzcbI3FNDQ1Ls7mFWYuDX1edz99vcZ2hjUFzczeJISLersbP9TVFO2TEqKytN37/Fbsu/\ntLjmQjQ5Utvm/ujNubW1w+9dS1BAU21N53jk5XTiUFdTTFJZbl598F1u5tXV1c/Vzs3M2lFFPkJP\nb87Pyr/CyNt4TT5ARlFy5fdO3rO2vL978WD5XTI1NTtaXfJXXce9u8PcYWbd1GVGREzg1tjc28K/\nvcbgelRWSDw7PEVMX/Lw0crHzt7ecHjn4t3v3+bm097kfmJYTltYWXn43M7IydTeeFRNSUNFUXdV\nQM+2ycPP79PavW0/WEtVTT4/QVD46+HTyr+8wM3d23tPUE9PYXnm5NzK1+vjbl9LSElKVU5PU1/Q\nyszR1szOztDm9mnr2e54WV1lZelXTFpr8dvYYFR62uD2dFVb6PFbTVt2XGHsy8DFx9LUy87aXlhY\nT0xCPj5CSVBv3ce/wsTNyr7La0xGSkxORkFY6NvRztHS0Nrm4ntPSEhMZ9jT1s/N0s/Kzt/6+3Vl\nZVJISUtNT1xtcOTW1tTT2e1pYWpnZWxv9Gd95u/a5uTsad9vbPpTZl9q8vrS39rS3t316PRkel1f\nX3ne7upvc1hdd1VVTVhqft387+Xa1NPW5nFrdGX83+Lf3dDV2+ZeT09TVWVmd2T94m3q9ntzZeru\n5t/pcud74dfs5F5afVjubWDgb9ndYPVPVVZPdGR53erZz9zP5+byb3x8eHnZ/tLc5eRMWEpNT1b8\nV97RzcjK1ON9althVV1Pbfx+1nPcc3z7ZHlWbm3v5N7j2/Bsbmpf5l3p6n7Z9+ry2XDdY3TmV9JO\n5G5g20/aTN1jYt5Tz21/3WN55VjuX/zp7n5+327TaeVpee3u9Hj9dG15d3PrXvvca85o3+B14nRa\na2p3/2T5W+th4F35XHpm9Od94evj2+nXfPFlb31ZYVxq6nrW7dzd7uBw8GVsZlpmXu9m1tzb5etp\n7mdtXlxkbmfZetjY9thu+V9RYlT2X97s6/H53Xjuff5baNp42tzz9fPsamBcbF546Gnjdm38Y9pu\n9+pv2e/e+ehx9mZw/2L2XWjiV89g1v5/4GHpWGJbbnJr3Wbce27abuf5/+3kdNlj32l28Hl18mFq\ndu5f6GH24Wbee3nnWd5t+dz77fXf6WrsVmBoe2Fue1jgbX7id+3s8fvYYN3hY9ltaN1n7PxXaHpT\n4m9f42Pn12bTYV58XOvn/OP97tJ06e9X3Pdj6Fpc02N90FLh/GDeWGptXuX+W+lrZNb14+P9avXn\navj7Zm7+fflmbm/62M/Rzd7x725qX1JUT09ZU2h059rd1Nzd4nvm8eR2cm9seft2bnRld2lsb178\nc+rp6uXz3u7nb3v+6/Xu/OLu631kY11gYWBkZHx46vXu6evp7+7p7vbzb/Py9Xx2a2lvb//q/OPx\n5+j9+mltb2psZGlqcHj59Ozm6d7q4fD6bf94/WhiaWj1+uv++uv57fL0+/z+eHdq/XL6dvl86u/k\n5fHp/vj1aGFjX2RtbPr6+Onm6+Ry/HB153bu6nHucvDybXNqb297c3FvbHd1+PTx7+zr9P5+7/vq\n8Onr7+59+nB0cG1rbW97f/d49G937/HteX9+dfd9fG5sb3n57uzu6u3s7vPzbW1nZXhtd3B88u3l\n7+br6ert6+/9bW1gaGp7d/7u9uv18f1tbWprdHX/bHJtcHP26fbm7Obr6uby7vr1end5bmRfZmZv\ndvHz7+zy8313/v7y6O/i6eXu8nBwcXFtYmZq++vm7/T88m5sbG13fvX5+ft+9/nq7/ttbHRvbvvy\n6/Z5cW/3/PDu7Pz+b37n4+n8/ndvb/736+74+mRnbHnr9e35eHZtcf778vf5cnlwbW10+fx6cnZ3\nePfn5uXj4ubp8Pt2aWZvevt9c3Jva11Uec7M2vptXFVaamt27+h/cXHq2trZ2+ZyXFxeXV9u8fpu\namf+6d3bdOnFvs9jUVleY1VJR0xm3s7O0Nx199/aeEdESl3f0s3Y4tvVz9j7XFZf7eX/WU5X9NfS\n3PNfYm1pfGtcXHna2ORvWV594OB4ZF5l6d7d5+bt+PNtXVROVE9JSlDru62sr7a8xdddOCsnJy05\nRVDXs6qmqrlvPjo4NjU1PFXIubm9x87P1XBGPj5IW+nS1NXa7v9iWkMpO5+cnZ6+tsfUzSEeGBUq\nPOrU36+ooJ+5MyIfKjhEVEPOrKWep81JU8fGbEIxNU3tw9VQQkXvXEY+NjtO18XCubq4tLnIUDw6\nNy8sz6GdmqO5tn5BKRsaFRw54bCtsa+vrskzJyEpT7ytrKypqqixSS8uN1ni5urawL27wlo7Ly4v\nNTc5RVjavbe0trm8y/JFOj07LSy7nZuaqb/HQUkuIh8ZIj7BqK68v8rBXjElHihGuqakqa2ura/L\nNyQmPMu0tsLIzMLB4j8sJiovQ1JKT0/Ou7Ovv9xm7srmWE9PWD12qaKjrLm+XUU8KyklJC04br+8\nwexgW0M+Pj9X3sW4sa+0trjA1k44NkrSwL26xNHrS0I7My4vOj9Rf+vVw72+wMza5trd8Gdd4+JU\nPEm+sa6srbjfRz5BQjQsLS0zT9DHx858VlVVUWVhX9XDvr6+w87RcVdc58C6tri/1Uw8Ojw2MzM1\nNj/6zszo4c/Jv8XIztLIxtLtSjctNrmmo6Kpu1g9MzE1LyssLzzfvLa8ylA3NztK1MC9t7a7wdJc\nVnZgT1VP7batrbbZPDQ0Mjo9PD9IUlrm19vKv8LDy9fX4+Te9U5KQTYxPrainpymxlwrJC4sLTw3\nPGVk18DDyfRCNDI877itrLXLfUZDVFjfwc7mv7Wzsr5dQTIsMjtBTEE9Q0txzsS9vsbU7u/o3tjV\n9ExFPDQwRKyfm5iktWAjJSUhLiwvSz3avb2tusnVLCsyLdOvq6KtvXo3OztG0s7Nzc66s7S/Yz8v\nKy0yRWBj6fT+3NLHxcvUdFlg483Jz1Y6Mi8xM1mom5eWnqpiIx4aGyMmP27bs7eurLvARCsmICtH\nvaSfoKnNSzUvOkvIu767vLm8y+BINCwnKzA8es3BvcjM1N/a6dbX4tXre29STUZAQUBJvqafm52l\nsjgjHRkeIjHjzrW1vbfCwstMOSwqLTjLrqWiqrbcPTY6QmzHwcLAyc7V4XBRQjQvLS49bMG7vcjd\n52jn1tDL2OFcTEk/QUVW0X/Ysaqin6WqzDQoHR8iKEJM3MLRvcHEvMzaTDk2MTxWzbWwr7O/0vbs\n2NLmZ2RVXV7v0djaU0A1LjA1RGnLvb27xMfK5O117O1hY05ES09h5mpazbewqKeprcxKLyQkICYu\nN3fLuK+ysrvYWT42NjZAV9zBwby6vLm6vsXlT0dNWnbg1+ZqTkA/OTs9PVFb39PLv8W/xs7P/GZa\nWU1EREZQ8d/7z7ewqqWmp7VaNCMfHh8oMUvKt6+us7jLY08+QkA8QUVZ5cq5tK6vs7jGckZGQUtg\nWvdWU01GT0FFPj5FRFvuxb26uL3C1OZdTUc+Pj5EXc7GysO2sq+qra25Uz4pIh8eJi1AzLmtq66v\nu87+PjcxLzk9a8a5rayrrbbDd0MzNDhE79fFz3lLPDw2Oj9KZnLPzb+7u7nAzG9NQT5CRVBj8dXH\nzWTnu7WqoqentzwrHRkbHitDv62qqKqyt9NCOS0qKS9H2q+opaSsut5FODc7PFnQv7e6zFE7LSsv\nM0jzzsvJydDBwMC/zG9SSD5BSU1g5ujgWjNeq6aWlJ6lOBsVDxUdLcu9raWupaKqrV4pGxgbJMih\nm5ecrc8/Li42OT1IRN2wp6SrzDIkHyMuSNna3mfow7Wtr7nnRDs7RU5YX0tJSU3dfjy4nZ6Qk628\nHxMUExoiL2Pfrp6fmZ22XB4VFBovvp2Ympuo0UguJigsNu61sKqnrsB5NCorJisyOk9jysW5sba0\nvM3uWk9PVVFBPUA/UvPMPzSfmpeLn/QvEhMWGh4eOfW4lJScnOYlHRkaHUPIqpaXm57IJR0cHzK0\nqKejteS+0kxGMSkrNjs7TURBxrOyr7pgRGHUzL9aNTc5QGnP7VrWVjqlkZiSnComGRccHCAcLLWo\nmJGlzD0gISEpKDyqoZaVpXMnHB0wx7atqrOxsW9CMyoxSsvgQzUmLmy+rbDUQ0jFurCyWj08Olpc\nQTw5VMKrsi7Kl52Sli8lFxUfHi0jK7KsmpOtPS0eIys/O02lpZ2buDckICdOs7SwrK2ureEmJCcz\nyLK+PTgwNsnM5lRSVM+ttMTQVktefkc1Ly9BtaakrXAmHaiVnZLFHCUdOD0mJRYkr6iWmkI4MUvD\n11IfJ0q9nZ6tWjhJbLS8PjA/88KqyTY1P8W6tE4rKixAzcNtWFPOr6epxlc3LTI6MzZK06+npKvV\nMiQ6pqqnpT4/RUrZMSgcGCQ5vaOpqqmrqb5kKBwfITjDs6ikpaKkrco6KiIjJzNN066rq7DEbTgu\nLCw0SuLEvriwr6657D8sKS40R820rayxyWldRDUsKkvBvKqqt7Sztr1MLSAbHy5Vvre7t7Cwr7xR\nNiwxPk7yb13zuqurqrJeP0A5NDtFO0rKxb3G+kk8TmRucEZDYeDIu8Pc6dbOwcVbQjo5RM2+5UMv\nWKWprKr3X9fSvD4kIB0lQ9y5xcutpqay6DQpLjtBPTY+3bKhoKzGPkXta1U3Ky9Ws7C/YEJmzLzF\nQC8sM03sxsDEwr65xfVQOjQ6Pk/Wu7jMzz/bnqm3uz5Z1m7aLRsbIjrAtbC3wq6lrlgtIyY5UeDf\nUs2soqKt00Q6QFtFLyksQLenrcFbWNDJWjApKj3KubW0urm9zF00MDE0Q+3Kys/HvsPhOEunpbG7\n2tva9VQxIR4qRt3R82p3vKaowzwvOU78Szo2Pr6qpam2vcXK5TImJi5CWMm6ubi3ucNNLy4yPVp8\n0srBurm/6EVGTkhKTUtFTOXPx72+dzzoqqm3znXbzcbqOCsiKj9DQj9iv62kq8NNO0hSQC4qMUq4\nqqqvu7awscQ5LS0uMTZLZdDCuq+2xf9XRzs6ODlJ6si/yMXDys/qaE5APEJW6NfNyM9PTK6mtsr5\n2szI2zkvKCpGUjssM03IqqixxM++vMo8KSotPtvAvr+wq6ipvk83LSsuNTI5+LqtrLK+zl0/OzYw\nOE/42ce8vL7CyupIPTs/Te/JvLzDzOdmTTgxRce+vr66u7m4000yKy0yNzU/U862ra2/1Whw6FtM\nQkdP98S/2VpUdfFveF/fz8jBxM56WEI/RklIRExS9MXByNhy7+Xp3fd582jn6lVSXeTb0tFeV/bY\nzt5pWV16am5aTFRs5up1X2nWycnOzdPX2W5STkxNWmBbUFBdY+bd6fTx19bZ5mhnZW7u7eff2tva\n1/tobGNybX1oV1lTWm9sZXbn29LLzdftb/34bVRRWmrhz9R/XlxkdGZYTlL82cvL7fzn4tzde15m\neOzt+mZaXF9fV1hbXXD679zUz9Xc2+Pg7H59av7m3N31ZlZPTlVZVldWc9LKyNDsalxiX1dbXXbZ\ny8XEy91nUU1NTU5Wc+Pe4d3R1t3peWliZmJaV1946uLe3ub+cX1tcHvx5OjzamptY1lO6L5oT9ff\n1+bablX7W1l+blXr2eXO0nVXWlXiv15R/F3tVV5aW2RLVuza6cbLzsHTdU7f4k7vWFJq5+lf3fxr\n6ltXV1pYT+HaZ8/a4NrZ3+/V8Hxp6Pvu7V/uXW9WX95FVvN35m7bWsXEYNBZUU1WXk7c2G/3y87L\n0W55Y2lnXEla7m5eyN781lbjV+vWYNn78dv4ZHBSV1tOYGZvb2jX597D+ezr02xo111OXdhLzNxO\n01L+aN7QWdxeT8z94fld91XWXWTr7eX6zl/a0mBpUV9pXvJfWO7U1Wbg2+fe6mdVbmJW+G3v3OVt\nXe/i/Xhu8uvncWN5cl/z4+bk5vns3dLpXvJfT2N4Vl/Ycf3sz9nx21pUaux9VGtgYPrp4H3i5OLd\n/3VedOprfmtp/+DxXG7w9vDf9+rV5HD9Zk5f7mZn6Gld49TwXulb+M9/Z+/V8P3ffGL7Z2VnX19k\n6eTg5+vd2enh0OVr8eFzYWRhYHZwW11cWlleZ2BZWGP32+jz/enZ2dDv/dne2tva4FZPeuf6bWRz\nbGzo7npSSVpv49HiOjmroKuu1j477VwqKyYpVLq0zdThzbS8UiwoL07AvL3KwbK1usJ5R0zb4G1k\nREdc6udnXUxKTEhDRlBq1sfGzMfCyd3xcVBo2FZKSkc4PaGZqqvBPU1MNR0bISRsrLe9vrqrrsQ3\nHyIy7bS3s7OupK/rNictQO6/x9LLyLe4zkU0PUM/QTo8X8/Dwc9v38rSXkxLRE92aGDk1+3WxetH\nVMnAXDJNn52orT83/0cvICEmOq6v1c3v2bfERSsmNm28tMm+s66tzk4/O11jWNv50cXFzTktRry9\nZEA/TdjjPErYw7S0zE1RXEM9QkNJXODQxbu8xN1OPTk3OjgvvJSYpandb2suIBolND+3z06zsbS6\nRS4mKj08+b+4pqiywUhRTkVLO1i+t7PA5lxFV9JxSD0/WE5FPUDmxcjOztTe52NNVe/zVU1V38bE\n0fbzZllIQD8z3Zydra/dvb8yKR4nQTjUUTi3tbS6QUQyLz0uRN3DqKuutn7P/UQ/MkXQv7PDysPr\n229QSjxES0hQP0T63cnN1vBY7e50dVxgaFpbXv3XzcXRVkxa9GBBOcGgpay13L9vOTYjKjMuXlhj\nub6ztdleNC00NUZb47exsbTCz+9PS0hQ7NrOxcO9vcr1TUQ/Pz06PVTYztpvduba1uVmWWzeY1FO\nS/bOztf77dnj/FVNZGBZ3r66ura4v9Pd12xGPTw+Rkpc/kxGPz0/Pkpga+fYycvNwc7hcWvd7s3I\ny7/IxL7GzPlf/U9KRz9ITElJP0BKU3lv7tfMyuD4+ezV19LWfu7t7eJsWFhi7su9wsvEvcHV/mNN\nSE1IQkFDVVdGPztDTWDb397Qx8jk/W5n39XMzMvDxcbL0tDd3tTa2+5pWklCPzs5Oz5IVX3Z0tnf\n5XBlbvPb1MvBxMXN5ehlU09NTktkxb/BwL7AztLeW01OUkxEQUFBQUFGSEpVa9/Sz8vP5OPj3unk\n1t3UzMrJz8zN3d3e08/b52pVU0pAPDg6P0ZUZe3c183L1NnWzszNz+Jzfenb33b93t34X15raVxY\nX2llfN7X1tTS0t12Y1lXV1RWVVdaV1dTT09WbO/h1NLY2Nrd3uPs5+Le2dDJyczN1ulrT0hEREpK\nTVtibnd2/2t26urW0NLP1M/Nz9hwaW5eU0tOX3Xu/m10a2hqX15cbud+cW/y4tzT2N/d2NDP1N3q\n7PluZllRTU1PU1hVVGRyevPl2NnVzdPY3OPj6/VvZGpxf3lobWxoaFxZV1phYGFjdd3X19PX3d/f\n1+H17OPd4fJpXWJlX15TUltiamFm/vDk3+Tl6uLc3uHx8efm9GNeYF9mXVdYXnBx/Ong0c3Q19/f\n2dzif3F2Zm5kV1hZWVhVVlVcd3X86d7Tz9jd5e/6+erw9ufn5uXv7fJsZF9eYmRqaWZ4/X1waW91\nbHD78ePc2drf3uHr7Pt2bWJhXl1jYGt9b25t/PF69fj/6uPd3OLp7/LsbF1dWmj09+jt8+je2uV3\nb2hobGFgav7q6efq6ubwefR9/u5zcG148vH5alhYXVxmZWzt4dfV2dna2d71cGNkbmtxc3f3+f9q\nXGRqaWpodvfo3N/n8294fHx1bX7p39ve6/P8+/xoYmJs9vd3d3r89nFoZGloaH10+O7p4ODm7/v5\n/HZsbWxvbm9zcOzm5N/e3+br7/h7bWx1cX5xY2ZiY3BpX15fcufd2tvb19zk7fp2dW1wbF5fZXf2\n9f3z5eLd53xrb3RnXVlaaPH2bn3v5uTl9Ort+vHn8vbu7e339W5sef31fvro5ujvbmRdXVtbX2Zt\n/uvh3t7i7Pf37Ozvb21sfH16fnv9aW35+Xhy/Hp06+949+rf3+xx/3dqdvvv6ehv68/pa3duYFtP\nS2NiVPrb0sjF09LTeFdJRUdLT0x0xsLJzcjM13JlaVhQT0pGTVlx3s/Nz9ng3Nzh6+prW1taYXn8\n7uXf8u3m8Ono7nLza2ViV1dSWldjdXzr2tbZ19vT2+tsZHFfYGV9aP58au/kdXDhd+7pYF9tX1Zn\nb//se37i0NXV3fjd1utNWs9LWbpv2LbLycTJVUtUNTM7Ni5FS0TIw8e8sb3JvfRXZ0o7TVJFXN3v\n5cfj3cfgXXNlTldSTFJYRy06na40nKGlmry8ycAwFCUmFR4eHtuzwMyfmbOrsmy9RyUnQjMuX7+w\nqaGxpqLWXz87KyoqIzc6MkvAzcm2vL67wV/Xzko6Msmd0vqbqaKt+rlGTBwZMx0ZIytFxbvMuKG5\nV77YW0ZFTMfHZbaoqLWrrMbGOjM6MC0vSkc9VE9g0GRO4mpDP2b/R+DbXey6nra6ma6qrly5NDUl\nHzUcIDQvRfi/vbiw59PHRT9LPTzKYlGvrLCupayxs11xWDEvNzgvN0A/Rlpj7dhOV3dQTUp0X0xW\ncayv1J+jrKa2q715SCw+JB0pKCsyQVbczWvQzFhR+Vs9bsn+v7eyq62trq/HedlPOjpJPTw9QEE8\nPz9OSD5FTmJT6sbY1c7CscW3prSsrrKvy8RgRTkmKyklKS41N0VEVNhb587K19zDyL66s7Czr7O3\nvNPa40RHS0NAPEU8Nzs+RUNBSE5qdGPN0MzD6Ou7vr6utK6tsbi/uOlHPS8vKigqLzQyOkdQZ23l\n583X4svsv7u8trSutrG1v7/Yd09BPkA+Pz08P0FGRUZGSk1JTmT8797e8uvGwr2rr66qra22u95Q\nUDErKikpLS8uQUVBXWzc+c7L98rezL3FuLmztLawuru/zvxYRT1AOTo7ODU2Pj0+Rklj8t/Pz83J\n0mDau8u7r7aqqq2zs7LrZEIuKiYmJCstLT0+RnjW0s67zMu71cq8v7+7u8Cysr24us/r/Eg+PDcz\nMTAvMzY4RFxu18XGwcDFycztVPHR0bSvuaqptLS1wU5GOCooJiUqLy00TEtt1tDUv7vdw8Lbx73D\nwLO7v7C3xrvD5uteRT8/NDM1Li83Oj9TW+zR0c7Kyc7Iyt/i69G+xbGstqurs73Dzjs2LycmJSUp\nMzM39+XYwLzCxrfL08LUzcW+yby3ybq3wsjH6k1OPDg6NTY9Pjk9RUNHXHz82M/LyMrDxcjI2Obe\nur7Nqq6/rrPEWVw/KzEoJCsqLDtbR/i3ztK8xPLKv/rHxN3Fu8Dqu7z1w8DW1tZgZW0/PUo5Mjw3\nMjtGRFPX08i9xMa9xMzKzNluYUXssF3Bob67r7zZP10tLTMfKTItLl6+Sr6vxMC+xOu/6Eq97kv3\nw8ZovrrBv8jLydtJS1Q7NTs8OTo/P0tYVdjBxse9u8fNzd34Y0pFPzZFsr7do6etq768X0ctIzgn\nIiw1Qkm+18euxMzazWdS1D1o0Fzq27rCub38uLTI7NjVZ1k+ND4+MjY+PkfwV2u/v83Jw9jMz1tS\nX19HREVJSNSssLKprKeuwM86PjEoKCInLDdEWcrHu73Cwc/eZWFcTVFN/M/LwL2zuLq5vr/U2mhN\nQjk6NDQ4PkVIXnre3s7JyMnTzdzvXkxJRkhFSFd0cL+qqq2qq6y11XQ3MjArLSctMzxPTtnXys3d\n0Wxx925mVOrZzr/EvLixtMvEwL/RWkZATT4yLzc9QkY/R+7N9eLNyMrN2Vjz23RbWX7dz9VTzqOn\nu62srLpvPyguLyAfIiowO1louKmwvby2v99rREn93kpMv7m3vL26wbrLRE9YTD46OjhLQjlI9mxM\n5e3lxchq5r3L6eR3VvVlQ0tWePBFRaeevbKmpq9cRCcsNB0bIjE5PebCqKCvyrqyzzs1NENRRD1v\nrq21vLOps+c5S8k+NzJBbEI8Mk3XVD5F0s3eV/++u8jXz8bJbzw9WVI8PFz2TrGaqrOgpat4QCwe\nKh4ZHixCSsqwp52ju83C3zUpKS88TElnsqWmrrGtrco7Ojk6OzY2R+9YTlrh2W5fTWjeZGzv5c7M\n2VVc4Uc9PUhv/+PMur3CnZu5tLawyC8xHiItHh8kOc7ZvbKpoq3GbWjePSwuNUXh0sS1qaOts7K4\nfy83PzEyMDVFWt5RU8zI02JWWm/3YFlvzM7vf2lpaGFx5c7d18HPdq6err+9vLVXOiwfJygoJiAx\n2ti9saysr6mt0HNoSzovOTk2XsG6ubKrrK641l1BODQtKiwuNkRU5si/ube2t77FzmhgVUJDRk5W\n/8bHzMC9vMLI7UU9PDIsMDo+WMvEwLSusre6wND1XEZBRUNLQ0ZST1VNV15ldV3z1NzZ3vTX0dpd\nVdXa3drSxsS9w9HM2FhDP0M+OTc5P01ectnAu72/vbq9xNddTEtEPTw+SVRm4NLJw8fJzs/eY1tS\nXl9aZfXSzM7R1NboVUhGSEc/QkRCTmpxbunLys3Iy8fCwb7BxcnX1up2WUZIR0Y+PkpLT1dt9Pfb\n32ll8OhvceTc287KyMLEytjj8VdOSENGS09NWeXX2NPJwsXQ4+De81VPW15vdGBbaO1VREVHR0RH\nUFtz99jKxr29vr6/v8LIztbY7FhKRUdHQz89P0VISEtOVl/v1M3Ev8PEw7/GztXq6OFqTk5cYVla\nbPB0ZmVWWWly9/bY0+Tu9uLpZV5UU1xYVVV36e/17ODg4nVobXT99O7d09LRzsjEyM3U4HJXTURB\nQT1FT0tOT1vp3dzc2drc1NLX0czNycLJ2+vleFlZTUJDSVr949Hd5t7Xyd9RSEFKT1dlVVr808zO\nztft6tTP1t1r69LO0GRYVE5gY1lNR1Vr8N9pW1790+JncHn47uxmU2Lzf9/ffu7VyM5k17GrrbjF\nxebgXy8lHyMqLDlDVMmuoqOtus5tTD4xJyYxWsS0rqqrqKWovEAzLi4vLSwuPd3FwsfKyMjI1VlN\nUGbveHH2eefU3GdLT23t4eLaTj6qmqCpz1jaNlEoFRgaMWv4rrisnZqcwS8nICgvLCsu0KGcm5+v\nvN13NyMlIyNGrqess7XPUVAwJiYzWOXJv7+5s7XIZU5APD4+PUPpvbi3v8lXNqeXp69EM0Et+SMV\nHiHetrKq0LKkprIxIB0iQ8/eyrOmnZ2n5zAvLS40MS9NtbWtq7naPz81ND07T23Dv8rP5sHE3ltE\nOzU9R0VP4MG7urS5xMXqLkWfqbnJMWtOwtUdHyAvucS92FG1r6/wJSgtXKyzvtDCrq+8Ti4yRNy9\n1GxcvLJMWEw5YV1rRT55YfrkVW/eybe9z089Pz5LSj5mz8q8vb/J1OtHQi8o0J+dnqnO7lREKBgY\nHDG3ramuta2qsUIlHh8z37y4tq+ppK3dOi0tPFj9V/XfVMW5vb/pWUFBQzk8OkvEuri8vNRHVUk/\nQUVz5crAzMvTyNU7Nz04L0qkm56esUZFMSwfGR8nV6yopbK/u81rNiYhKfiuqamywby91kkuKzJK\nv7+7uk5VyL24y/Y+OEo+Ozg4Z8m8usDHb2RdSlFQTE9s2u3QxsrWUEVLTT43vpydnKFMOywpLR0f\nHiu0qJ6lx+Fb2GgzJyAtyquiqb/eyr/GUi4oLW+1sbXbTEBOsrO9ZzQ7OExGOTxNu7KvtttHNTxI\nSVNJS2vRwLq9yd5NTFFKOjeunJ2crkQ2Ki0iHB8gR6+jn67LX23eRi8jJEC2pqOtxd/DyfU+Kyky\nzrSxrMJM8Gfh1WhHNkFIS11ITe/AubK26UU1MThBXVzZztzDu7e87UlHSVRNNDa7n5ubqFozJyko\nIiIfMsutn6W34ODFXD0qHyU+uKakqLO6vN1FLiUmL3auqq+9ScuwtLw7KycsQlLieuK/r6243TIq\nMD5v2c737Lu2s7fjOS44RF/lTznen5qantQxJCQrJScfI0e9pp+hrMC/UDUsIx8hOcOmnZ+ntLzi\nSTQjIy1Huauru8aysrfZNCUjLDhq0MvKxLi9v9hEOzxK7NvxUEfoxby6yd77YlJUW0o/P0pe5bWp\nqqqvvPlBNSkmJCcwVbmwqau1xVU+Ly4wN0zowrqzsri/zNzs5m1XSEVOZsjCy99STUtGR0RDSVrd\n1tLR2dTTx8XfWEdMYNjBxNlnVl555WpJQ0ZY79bQ2d3YycrrSTs/Vsu8u8LP+vppTEI7PkruzszF\n0dnW3ntLQkJHat/c2djNzM/Xa15raGxuf2lRTVHuzcjK1Nvq+WxYTUdMXujXysXMys/tTj49PERb\n7s/Du7q9xH5IQD9ES2Fv68TKzdjxfFVNTU5ZZGxte/ve2ef36N7Z2977ePPp2eL4Z/nc1MnPeE5M\nT0xMTE5IXM/My9ZuXV567mNYWn7Tzc3b+mt79enraWBz6N7o92ZffeLX2uDnbG14Z1lLRkdW8NXP\n1dnYzs/V6lxTW/f8YFhcaH7k7HhjYmxv6tXX1tXb4PD+ZFJRUldl793e3trd5n5mV1RddX1tdPXd\nzsvP6W5iZX5rX1dRXvba2/BxXmvo4utpW1li7ujve3Pk18/R4O5qZWxlYl9cZvjf2+b7YFdaXWp4\n7tvTz9Dc72ZVVlZcZnzj4tjf6eT1+3NjWFBSYuXQzdjg6nz+cWdcV2Ru5Njb3f9zcWhvXlpYWm55\n593l4eLb2eV5Z2t/8ej1cWRo9Onk73JrcXdsa2FiZXzq49ra4Ptua29qZFxj+OTX1+B0Y2BgaGNZ\nWXXc0M7S3ex4a2RcVVJbbe7r7OHd29ne7WFZYWttb3P+6uDc4vRoW1tfb/bl3drb3+P1bV5ZWVdc\nefHp3+Pe4ezya2draXVvbP7q39/r+nx39vpqZGBv6+Lf5Obr7e1uXVhYXnDu4Nvd3t3g+mBZWVtl\neXjv597W2eZtXFlZZGxnbXD039TR3e76dXJvZ2Vjbu7i297ueWZdXFxiaW797d7a2+b6bGBgZW1w\n++DY1NjidmNpc/H/YVxfb/Tu+Wpmb/fl7HVpbu7i3N/m5Orp6vFuXFleZHR9amZr9+vf3unwfH7x\n7vtvbWxt9Ovu/XJ1evTxdmpv/erf3+z89/r8e2xgZG176Or8b2dpbfrx9fpvaOPX4P1rZ2hqX2Zt\nbXhs/+XU0dXb39/tbVdTWVpbaGx65+Pf3trf5O9ycWRcWl50+efb297n7PD7/m1lZ2ZlaF9kcffw\nf/R7+e/99fD5eu3l6+3u9/X19O7t7u9+bvzl6/hnY2pua2xtbG5maGlufPz39Orf3efn4e/r5er3\n9f1vbmNYU1lYW21x+93Y2NPT3ft1bG3w6mdofml84u1r/PRjbvlrYX1xfuhtZ/jne/97bHTxfGvs\n3t3d3v5sbWtoY2pz39bNy8nHyszW9VZLQj08PD5DTVd62s7Ly83R09ba7392bG5nYWd3duvm6OXr\n5+Xobl13az9Es7HNsry3q7LcN0o5KywiHys6Mj3Jt7Cmq7Wrq79XTTM0PTAtOu3zyLKvrq2wvLzF\nSjk2LS4zMDRG6dy/uLizsr3N02ZGPjozOEI8QlT/0MC+0WK3nrG1rMuos/AuJzsiIR8cKUZsTLai\noZ+isray1i0pKSUyMDBEuKitpKiuqKvlLDMvKywkIzbRYOa7sayquXS6ul05NDQ8TzMuSsXJzc/J\ntLC9+9LmPr+qWsWwxqy62S0xSiAmIyAsSVY+rqGnpam5vLdIJiwtLD49Rsyop7CmrbS+WD8qKCkq\nNzlK07Our7C6uMbtPjo+NTg0O0rozNzKwLu/2MjSZkw9RVVIKzqiqrajs6OgtD0jPiQcHhcfPM5K\nuZ2dnZ+24b5cJB8lJTdPRcynnqalqbm4aSkfLiUfODtsr6exraS2xtc7Kz84KDdNUeS1yNSyxO3X\nbDtJUzhEZ05cxXZAqZuzqae9rLpDHiIqGh8gIDeyrbeenKKltD8xOygdJywzwbKvqp+iraviOzcq\nIB85OzS2r66jpr7OvjksLykoQ+M+yq60s67GRt5JLjc5NkXWR1uvu8q9Wfyco8yuyLa8dSoYLSYf\nKiczwaGqrJ6ksbw+IyUrIiQyP7+ln6Sjn6yz3C0nJicgJj7rsqWnqqitzkcyJyksLTNbxb2urre7\nwE44OzY8TVBVyLfF7MbQ59s2LrWgtqy02Ky6aR8fJx0uKipHrKWon6ezu9csJCcjKT1q2a2ioaKl\ns+XdNyklJSkset28n6Sqr8VJNDEjIy0zVL+1t6uotcD0NzI+NzFGWtG6ucfVvNNVTC8vr6C2qa/G\nrbxaHyAjHCwuLkuupqSdp8LdSiolJiIqWb61paChoqa9QTorJCUlKDHKuamcpqu23ToqKR4mMT3R\nsauvqK26xU0vKTYxOGB/yLeywMXNSUU/MTeupK6hrLyww0UhIB4ZKC0y362mn5ukveo7JyUlISpL\nwLCjn6KiqsVCNioiIyQrPrqrqZ+lrLpbLyQlIig2T8Gupqqrrr5vPjEpLTI4V9K8u7W7yb9XPToy\nNLqjrqOpu6+63yYfHhkjLy9Ds6efm5+2b0kqJiciJjfIs6eho6WntVo6LCYmKCw2w62ln6mwwVo0\nJiQjKThXxK+qqquxv106LysvND9o0rm3s7vGwV5QPiwyvKiupa7KtLXOLSQeGiUyMj/EsaSbnrL/\nRS8wMCcmL/+2qKatrqyuv1kwJyktLzvRxLGmq7C/XjIsLSotOU7Usa2ys7vJW0Y2Ljk/Tu3Lvby5\nw8jLT0M/MjS6qq+nrr+2uM0uJSAbJS8vOtS1qJ2erMn8PTY4KiYpPs6zq7G1r6yvv1YxLS80PF57\nz7Wys774PTQ2NTg9SWq/uLq6v8r6VkM5Qk5e1MfGy8jO3PRKQT05OWquraumtra0xE0rJx4eKSww\nS8y0pZ+isL/3P0k7LSksPHi8try9s66vuttGPERJSUhHTFvj6VdHQ0ls19vm2cfHxs1tWktHSEtf\ncdbJxr7CzN5hW0tCPjpEXW//e7mssKy22c7j6z4wMCkwQUFEQUzVvLG5z87VxMDLaT4/RFNMUUxM\n2r+0u7i8w7zI3Uo9NS4xMjhAXdnFury9v7/I12xMUFheX2ZqdeXg6XP2X2thWGl23nfk2+/c5vNT\nUVlZZ3Xt8dLIx87T5GVcWFVOSU9NXt/Vz9POzdnS8FlWV1hZbu5o+/J0+edzUU5PV/nh4d/Uz87S\n1HlYXVFl633t6c7Ly8jjX29VUUZGPUhb2t7Izsi/wNfiWFNESEVASVzr18/M0cbJydDuXVJOS05F\nTEpd9O/T1NHEysrOzdLc3WlQU1NOVVJVV3Lfbvbv7+/Y71hVVl3c3ul69+Tg2d9+7dzS2d9ZXVRs\nbVtzWeLi3OVqbV7v/HhqY2J/5f7i3tjO1s/v8WtkWllQVVVVbW9veu/gfuTp7NvY2uXY3uvt9m5d\n+l1aVlxPZGZpX+z629HL0drh/HZiT05Ueufc33Pc+8/p4mluXvJ5Y15dV+pk43bj3+Hf6mbp3dbd\n9llmV21fUlBSaPff2OrU2tDf82pbZf31XOv9+dfr3fre22T5VFZYUl1SZHbh083P1Nd4f2ZeWlNX\nbOre5+nu3+XadGJse+R281pZcW1fYFFlZezr6uLR0s3S2+PzcGhXT09MVlt079/S09Le2e/5cnxY\n7V74ZeX++X3va/nqZ2v9bfdp/fft3er4aV5ebWRobPfY4tDm2f3rfPdeW1Vzaer2de375e1w7Fx2\nbWRhYeLg0NXZ19ni4VlcTVZMWVpt7uDV1d/bcGz4dG5i/GTh6uXx5O/gZPFSa1lzWd953uDT5dZj\nfVNvWF1U93Xe19zo0//bbvlbWWBm+vHsa+fq6/h+XPp2513jXtp51+vdX/N25mdwYm1d6Xrcb9rp\n/PRiamVlZ27geOLv13Dpe3v0Z2tiXfVf4+Xw09vW6/JeXlddXVxoZ27Y99nn493d43NrZ2p8fG92\ned316Gljal5uYmhzetzu7eTu9O1/8ml7XvL+7u9+9uXo5ml8YvRY+mT27evv4uvi7fhpbmF6aWbz\na9/v39/q3+1zbVxeXGVg/mPl8+Du5+7ec/dgd3Z8/e775Ozl8O/4+2df9mbuct/13WjzbG11/1z7\nW+51237Ved9v7GL8W/pd4WjzbuX+6PZ6/fz1dW9+Xvx5/+jz9ex/42v8Yul55P5uc27982XpbOZ4\n9v516f3d7PT2/379Ze1l6GT9buVw5XbsYu9k7FfoWfdg/n7f8dZ22mfdZ9//6m/7ffdk513YZehj\nemz0bv9f9l3oZt9869zv++9673v5a2t7dPh483Z/bu9ue/V++fJtfHB0e37j4ubi9vl6a2x+e2zs\ndn56Zv1s/nR6+fL28Pb+enrp/Ph67v798vT6cvVz+/fyduZx7mt4bHB8fGLjXtlg5Hn8/+1le2Hs\nfNv54+l94HHo6GN6Y2F0Yetkff725XHs9/hx7vB55+9r6m/v9XfiafT9/fZo7W5nfm73aPBm8Wfo\ne+N97HLybv1n7nDfb+Z9+/t3du5z43rnYudr72//83zu5Grfaehv8n5yb3RddGz4bW/6++tw7Gze\n893032/nduth7mTyXvddfnfv+/B6eel33m//cHVv/Wvua9xs3PPv5fvu7mn9+/ZydWl172v/X3Zp\ndPX27Xnr6v7b9/L9fPp8ZG9n/m3w7HjfXutrfX5o72/rZOr1fu3p9+bw6X7leXp8X+Be+Xpa7lvi\ncm3wXN1g3G/v933qX9xm5/305n3pe+h/7nL47GDfXuNn6WV75mjgWONf9uxu6vvtem58aOBe3mPu\nf3bocOVm7nJw72DxX+N36Opo3l7WbeT+X+do53r87mriX99k8+1c3mP27F3jVt5i3/P132LaW+n3\nbeRn4v59+l3eUNhTd25W1mTvcPTgfdVv3+P+2FrVWOdvcHNs62n/7V3XWdto8O5f7Gn8cXlv/X58\n72vu/m3f+eTs7/vfa+77Xn1k/Wz7+nDf++9ze3N0/XPm7ntwemlr9fX16Onnf/x2Zd9t9m9x/mbm\nW+j4fPD/7G7ucml7bfdn8udq5mnuduDw6Ort5vL8amB+X/1jbnn59+7v7O/v7v70e/Zs+3bueXp0\nb3d56nbq+vfu+/51bv1q827ub/z8dOt77/356/Pp+e77/X1zaW1nbWx5+Pry9eXy3/TueHRqaWhu\nb3d87/Dm6vP5/n92+3XwePp0+/fv7Pnue3h3dnh69XnzffJvdXV7/nH7cfhvff106/np7vbyfe1t\n727+ant9/X38+/b7+3ducHx+8O76+3N9bvX76O3k7ef+8HT6dfF8fHH/bW5tfG/+dfT4/f//+W53\na3dxfnX7/fDu6OXj5eTv63F+bGluenZtbXB1+XT4b/93e/5y8n/r9evs7Oru9f7//HD4anZpeW9y\n/nv++Orr+/9qdnZ2b3Lz++378/D26fju+PHtfu5temtsZ2F7dvTu6uju6/bu+f98cfx+/P15/P70\n7uzzfXRwb2tuam9vdXtsbeLj5vxr/ufn8m527OXk+2997e5+eWx5d3B0eu98eHtkXmpxfep0ffXs\n6OTo6Ovr6Pz2bGFfbvrzbmx17efv+vj1+3RubWlua/3v+fP76+jg5vN7/vHv9ftyZmlv/nFkYWlo\n9ezl4+Le4urk9HplZmtkZ2psd3nv8+zu+PPm8Pj8/Of8f333bnxuePT/+f5xd/1+c3Nrc/n4em17\n+3Xv6nxx9Obk6/f//Ozn621mbfTj6XhlXmbv7nlfWWjz3t9vdX3e3+r3bf17/OfrclZbcd/dZ1x7\n6uXs/fXteXrx9m1fdujf7G1mft/3c2hh/Ovq7Hb37vDv8W9fXmrs7mxcX+vb5f3859/h9HZy6/j7\n/u/5ZHnp3ulnWl/o6mBaXe3h5f9pavzv/+3u83Bp5untYWTl19ppWWF5/nFlb+v99uzj4mth8eN9\naWFs4uHudGP82uHn9Ghlbf7l3mldX+vd7fFhX2nt3vhnX2nx2OZqbnDu6n58bnnv+fju++n7ZmVj\ncern9PhmX+zW23dga+7i3f5nZG7f6/l+dGxu7PV9Y2Ts8+V9ZPv/8nJlamrn7vTr7ubu6W5ha/Pq\n8/5yfHVv7OL2Xljs2e5vWnfg5ut5/vFvbvDgcVtc+u7zeWnq5ezb7l9eaXLucW9v8+7w5+bf6X59\n9/Z78OLrb2xt9e7zbmRka2tqZGvr6OPvfWlob+ve82dgc+7n8G7i3+ftce/0a33l8Wp+bnH1bG1s\nf/freO98Ye946uX2b27y+Od1aPl083P06mpoaPD68vNj+ODl7Whu6t7ncHP4bFt9/GljXfri7O7s\n3Otv7nv39WP9/f/5Z/9+b/Tu5+ty8un9425p+XfxX2V68N55avXr93VnbO7u7e5tbmBq9HbtY259\n59ry9Grv1+HoaWPs5uTv+W11ePPoWFnx9fdtW1/+7eX9b+dw9+xeb2li7ebj9nrc3erc5upsTmni\n8F9T6Nvx9Hbz8mFi+fV8dvDc9mp9+d58Y2Vj4/Frb2N04eh74+Xy/W7d3GZoYe/dbmhs9W1dfN7d\nX25+6N5bXH/e5mJs9efj+2zoe2L+6eB9XuTf6OpbZH1xbnBgZ+313/H4dvPrZuV2Zu7/5P1t7/1y\n/nR743f76Ojw9ep+ZV9h/mthZ2bv3/3y7Xp+2d14a2V8//Z+b2Zj/Obi7O3r5+xtZ2J76lxr8HH0\nbObW5efp6GZPZdjha2Bx6eVnfO5973TtcvF1af1e3+Vvdf7pa2Vo7vb06P7cbfXdY+P2Z+hvX19j\naO31b/Rx3+b88X/e/GTl3fxaXuPiaF/y4Xxs8OPsdV5cedziXll/5HJm7d9+893/fXBs33Vg5+5V\nXdDXelti1fJeee/tc+tya2Ft2vH9eGvc+vjebWR77+1fa974YGf47Hpv2upnZWvgfV7w4+rw5XZ6\n9frX7FpibfVvbGpu4fZvb3T44Wli4+x7f/Ht5env6+n7aPz4dGBac3pkV3Xa7mt73N/uenHuYevg\nc3bx+l/q7vDqWPvg3/de+eD0c2Vo7l9q6G9iau3v8e/2393lcHl+Z/56ZfHnfORxY2b71Od0/3Vu\nX2Dn52x2ZevjfWBb/dnuY37s8env49/wZmfod+/eZmTm5XNZWunj/GBw/mBy9+Lk7Oju2+9ocnZy\ndGhVcfNg92jf3HT093Lr2vvfcV/hXunlb/Jy6352cm5q8OZ6efrxZV5d8+tTYPnY3Wj33M/gavDd\n5XZybmhfXXPldlhi4d/pb/rwXmhyavxq4/pf3vXl3ep89eXv9nfvX+/oavt0aWFs4eHq4Gfs3vx+\naHpfY29v43hsbfXmb/Tral5h4v1rYF/f5n3+/+vr4NhuZnfv53Vv6tnma15m3/JvYGh3bnBqYWls\n79vp/+Pwc2vd1uj/bHzk6HRdWmb6Xmds/Ov53tj7ZG197Gxq9m7e6e/c/fV4+N9wWm/qe2Vj3+Rl\nXG7i72ljeebo+Hrj3+L25t3o9lZr7mZaW2ld/GJi6efi5tzsfOZ7bPDb+/vsfePvbVxe4+dlW3b2\nbWN433tlYVj96nhhe8zW9Xri0OBp8tn1XV9q/2psb97uX11o3Gp05W9kb9tlXmF23+Hn9uRs9ejb\n3Fxu/fHe9WNffvPtYFj46O9jaulsb2/j4ll2393daV553OD3/3XjbfrxaN9yX2Td6Vz5benh3vxV\nYV7n5nTr8vp9flx9725wYdzkYvn74ttdatb0amRn6X7sd/na92zubPXXeW1mam9kZmJ25nhVatvi\n5Pbf2nd52uRmZn1kb9pvXfPk9fv9bWNd+ufm+G/reWdsZ37k+Pno4OPhfXF1aPTtbVNdanfc7On6\n5uFf/O5oeH1t7W139G7n4ufo8evwaP7b/HFkXflmWlVu4+77dert4Wxe3uLhfPJ8fORja3Zu/Hny\nan3pfO/h/e3fW27ufP1j6+9ta+7fb2ld9+l2X27f+ePk6N/+62dq8/TxaWrw8m/ufGVoeGtm6X1a\n6+n3/3Jz7eLt5+pv5udjb3zzaVj+4H9je93aeGfu5ebval9z+9vqa/hqa+nuaWRu7nFndW7y+Wzs\n32l+fGN/9Nzsbvrp6fduW3T6cm5u59t3bNfqcWl06fvxYmnn5ltX/u7o9Pbt6uD08+VxaulmXODj\nd2Fh7/ju5XZz919b+v7q7uvt5u5lbO7n+O3o73z8+f/rZ2hdZ9pwWmrf5G5eZN7g6Gpe5uvk2f5h\nfPp8+vl07uj7bl/x8PN5fGZY9Pt37GpbeNzt9Pze2fZiZfXgY1/yb2xu/3rreenlafp05OH1bGXk\ncXTi63ft5enmbf57bmhX/HFk+nz1fXlx/+Lf8ff3/eh4bnp+4Xvr5HBp+/RjdG/59GNlcPFlef5n\n7f1tfN3pbWx9eO7le+3m3/nu4d37Wfh0efRg5+hiWXN03vFW9t/fY17+6Oxqbf7jcPTwbuVx+3Py\n7mF6evl2dm545Pjm8+/mbP3z6mp4cmDg6W9i6dv5aWDd3G9Wbd1rc3xpfe9zae7/6e1/evHx9u9u\n9Xp77n57dm537Xtw7/nz7+h3X2ln+OPz82Xk3Wb/7d73ae/u7mJn4/hlX2xpb/9w6nb5fvjzXP3f\n5O1lb+7zc23+4t3xdffb22py5/lsa15sc15dYXzkeXXofO3w/u755+n9cvPl9PHv7+x7XVt26m9d\nZ+Xfc/bs/f16bfjocevo+2to2OVkZGLx32Ns3fdrennn6F9r9ujuZW5y8PFkb+npZe7c5vlp6+X+\nW1328Gpk+WRteW/q5uf19H3u5mv7+vP3a3p57m748erd933/dnz8ZWh3bmpkavHqd3Lu8+vf53Tu\n73HweHb5ZWP67ntuet7ffP3w2v5n9GZpdXB9cmn8dXT6avXt+u558f5cb2ps525s4OLk6OnZ23Rx\ndej3XH5wcntcde9tYG3n6HFr6u/x/Xfd9W31dW5seu/ta2nt4u724ef++XD27WRWW2xnYGjq3+Nq\nYdrY72715n5vZnzzfvzn6e/m93r36+9sZHpzZGZmaXz8fvTl4t/lePbf6ndxeWRkb2lucW3/fHXy\n6/X+9PL37+3t9XR+5+nrb3Xh8vtsdGhlfv/5ZWtmbPd07fni4+Dmc+98/vd6cWNhcHl09u/5bm7n\n62xu/v9xdnzy5P735uxyaXbs+X56ae/4dPPw/3H6/HprdvHr7m577OTsdXzs7Xd3/W9jbf3+d25x\n+uru9+/3fOr1bnFsanh4eu3o83n07+//+Ozyem9vdGllb3Vzam17+PTs4+Xs7ezs6/d9/vlsanf5\n+X72/vx+a2Zt++ru7vR5dWtua2pxdnBudObg/Ong6Ojt63Rr+f18cG1/eWVlcHP38+vq+e/4b3Jy\nbXVycnPz6+Xf4+15b3Rrdnhqc/Ts+HP55ev27vTs/G16e/z5c2x9fWhmcnp+/nl29+13dvXs6uns\n6+Txen5wa3B3aWxz//t/+PXs6/d+enn89nf+9P71/HV68/d6dXR0c3Rqe/BsbXR2//177ur0+Pzq\n5+/v+Hx2cndxbXXv7X1uc357fvv17Pb76+1+/PHy+Pp+/nl6+Pj4d2pgZXN1bm337/nv7+rq/Hvz\n/fr6cHh3+/Hx8u/y/fT++fV/e25veXhvbHJvb375839x/Ozz+/Hu6/b/dnl8cnd2fnh+8/d2cv/3\n/fn3fv58f/v0+fT39PT+fP7z9u7r73h3eWtkYmZobXD66u7x5/H68fL5eXz+7e/y7+rq7flvb3d3\ne3tvamxyend4fHp5+fp1dH1+fPfu9Pfr6/D9/u/s7nptcHh/df/1+fz7+3xvb3N6eG91++/09+/t\n6ubl7fT/dnhvbGdqa2lrdffr6+zt7uzv+v/3c2xtb3p6d3V2e//+9vr48fh6/fd4cm9tcnn17enq\n+Pj79+3t7f10evt+d3Ntb3Fve/vy6+74eHRzcX7v7u3r6+fo8Pl+dW5sbGtrd3lveH318vl8eXz6\n8O3y/vv68/N+enJxcHh98u70+Pv9enZ2b251evfw8+7s7u74enF1d3V7eHBtdPvz/X57eHd3/fHx\n/Xh8/P54fPj37ujk5+vu/nNxeHdub3F4fXZ2//n28PP19P15fX///PT4eX3+fH15cnF4eXFtdvr3\n+vnx9/fu7Ovt6uvyem9rbG55+ntzcXFz/n15/fX2+e/v8fL0/P/97+719/ny7fVwbGxzbmt0dHR4\ndXZ2b2hpbG559e3k5+fj5ebu8u3x+fp4cnJub3X88/p1cHR2dXZ2fH9/enP76+nv7+/t6fL+eHZ9\neHJ6fG9udXxzcXp++vHz9vHr7PP9enJtbnn+/np9fe/p7/H5eHp4cHB0fPr18/T8ePn1/n57+O7v\n+X798+/+dXd2en14eXn+/v73e3FvcW9sbHJ6/vrx8vbt7e7n4ePt8/Tw+n11a2ZjZmtzb2xvdHh8\n/vb09vz69u7u8e7t7PF9+vDr6e/193t2bWpoaHF0bGpsdnp1/u3t7ujl6fJ+enVydnj58/z17/d9\nfvx+d3t8fHd1eXh6ffbv7O/v9n78/Hpvb21w/fz08vx6/3x6e/z7+vry7PZ+dHN2ePp2c3t0fnRy\n+Pbv9Pj4+3l5cWxye/Pt6uXp7evs8/p3cGxwenz7ff77/P77+/f/cm9ueHFrbG187uzs7/Tz7/L7\n/nl6+f56/Pz7f/3y8/f3+Xx9dXJ4fXlzcm16+/T29ez2+PPx7vD7eHZtb/52bm1vcnn+dHj6+318\n+fPr4+fr5e55eW5oa2htcXJ/9vR4/u/4d/rs8+7t9/bz9/n9e3l9fnZ49u75/XRrdXVvdm9sc3Bv\ncX7t6Ovu6/T7fvt4b3N6+vrz9+rl6ezm7HZvcm5vff39+/19+3prZWViX2x27uft49vb3t7g7Xt0\nb3RtZmdnZGRpa2tqZ21oZG93d/bz8e3u7Ont+vPv6eDu7drr7NxvYdf1YO3tenjz9eVmPjbXuT3m\nsby/1875WDgtRUM2QsvIyLm7wsleRElDOD350MvDubW+z+/6WD49SFBRXdbKytPe62BNRkpOTWPc\n3dHHy8/K02djbFpTXFpv5XPv193o5/xmdl9PWmBbWlBAa7fW+7a0vtLhXUw8MTtRR0fVxsbCw9Lv\nVT9AUE9Vz8jIx8/a3/1OTV1YVfre08/c4+dhSkxVWl1v2M/R3Pzc0nth3u/l1Nba893zX1I+NFTH\n2My+sLzUVj9GNCw0Tk1Oz7y3tb3M2lQ/PUlMacvFvr3H3d5nSUdNVm3m39DO3nfrc1RPTk1SWlr3\n4P128/fueW3f3d/a2ODbakjk2lLp1dPF0ufrRzbDtDzbt8XLSk9ITDstSOFKVsTIwrzcWlVTPUNx\nZ8e/xsG+0m/oXUtPfWFw2/389mxgYltUV1tUXXdr7Nfa4NTP6u3pTljfel7twub01WTl3v1QW2Bu\nOTWlr0yvwrzMMC4xTS4sX87mx7zotLhBP0JIPkjs0LG0zL6//E9SS1Hf7djJx9ZlU0xSTkVEUltN\nUmRt6uLe1MfK+PPp7mxVZ19+6PXMzFxZysJoRUBfzkgvr5zWvLfgvTIrJDtTKkjew7i03U+4Yi4y\nO0vXv9O4qLrZ/ldbTD45z7XFyMjL220+OUxNP0RbWW3vXPHP1+3d2Hnk5lboyNlsblxa2utp11JJ\nzL9mQmPbfEyqpN+y4E/ILSsnO0c3xeP0ubnrT/U/NDg4T721vrSvzMzYQURLb1XMtbu1xl1PSTwz\nOkJKWl5N7Mtyc9nkeOh5U+/S39HQ2drX0GzsV0vM9kphxMn25ElJ05+rWLk92ngnKCVISkTFU9yz\nvWNMTj06Qjxkt7S0tLzXzGpCTk3o6My4t7XPVk1GSDk3Pkr4YVhtaXHm52ld6/5QV+nUzcjQ3tXd\nbHH1WUtU48/cX3ZdPMCdpLbJP+VTLSggLjzfsOxfx8C+/T8tLT9Nyry+uK+vxuRJPFBf39jPxse0\nttBPOzpHSzw6PU5g6OFPX+jf0cfUZ1xk69LMc2biy8PLYkdPZd1mUVjv01VM2amjr7ZTPTovOzQv\nLzfQu8G95U39+nA/MzE8xLWwssHc08nI7UU/TM7AyMjGx8z2aFM9Ojc6QEZkdnTc2NHY1dl2bF34\n08rM/9jP0ddbWFJKRU9yZnRmTEnDqKastvNTQTk+NzEtM1nOu7jSUF5cXEo2LzdWw7Gwu9Lc0snE\n3U1J/czDtrjL2ldSXUk6MTI4SeVkTmH62MfDzvZjVPbIytrj49XIy+hbT05UV2lMPDjInp2ltzw8\nRjEvJyIqQbKrtr1ZVsv6Sy8nLVOvqq+7ennJxdlIOz3Zta62Yk97z8doQjw9RVRSRkNNbXPv393R\nzNz6XEhIaNXf7OPTx7/IfGBJSEtdSTTrn5uirUM1PywrKCUtQLOpubz8Sc9oPS4pM+OtqbW/2u/N\n21ZEPk3Qt7XDfElqyMZjPz9Mc1tEPERh18reT1TVytJ5SknvysnUclh5zcjSWUJKVEp0Ui/+nJif\nrjYySi4pIyQxSq2pzM5bRcxvOS0qQMKsqb7Hz37MXUVIT83Fv8Dq835Y9t/uW1NUSkdFQk/y3cvU\nY2Ds22JOV2XWytDs7+j03uRXU1VHT+PObz84wpaar78vPEgrLB8jUsqqrFTbb0rNPy4rLNO1razK\nwcDr4z1D7d69y9DG285bRl3h0WdLPz0/RU5c19DKy+j+ZFVLSVzhycPO3d91bdXcWT87Vt5qYz4u\nwZWXrs093tosIhofVL+utm23s9LrLicsMPbMuq64r7lOQThPx8rG58a1wc5nOTn8vMZTPjpHVUNE\nTfPIxcvn5uRBPlR73trV3MrG+unN2FM7SMrMWUU9NHmZmby6xr7UJB4aIltSx7u/pajdQy8tLCgw\nPrWhp6q8altCPTU768OvrbjJ0VY+U35qRD9IUuZNPUNfzMjeUVjY3lNJTvDGznDZ0PfVx9VRQ1Fa\nysQ+QUdEpJi0v665vioeGx4+Lje2rqWmxVpdTygdJje/qq+vpqW2TjQvOD9GXrqts7jN0sdYOC03\nVUxAOULHvexu483OeFZFR1tl3c3Oz9TKw8hvQT5V6EdTytr4WO+fns+2wcjsIyQfLDsoS7y1rrXD\nvrpOJCc4QUpNyqqgq7y+wdI4MDZG5E9myK+tw87W5ksvKSw4QU9WzLe1usLFbj89RkpJW/LLvb28\nyFg9P+vhOG/FXkMwoJ5LqbGuqTcuKDUrGi0yOcfOwqufsXi+VDIsKCtG0EC5pamor7THxl8rNjU0\nRVjVvq67x9ZGOjQ1LThc/dO+ur6+1N/vVkZIYOLW2NXf8l/t6FX909v3aFR6TM2s17+ttrnk7zs/\nMiMrKi4pQvHKqrKur67CauY6PUU6QFxT2ra1v7+6vsHdX9jPTT4+OTgyMTlH/86+ube5wMv+UUxA\nQ0JM1cTG5drJ1F5IW9btaPjQzdnW4vFv+FU/Ol3HU9m9ubfE1/7PSDg5OTY4PzpffHbFvMDGvMXN\nzGJV2V9DacnUzsPQw9RPT1JENz5IR1nezsrU6t9rTExba9nJwLu9v8rL/khMPT1EQU382mnPvsXK\n1GJRZklGSElPat7rysDJz8vbfe5RTVVUSlpuV3f33c7d1N7a3W3a7e3X1tT6aGhTT0ZBR0ZPbM/N\n08nM1/FgVlFSb+Hn6NrHyeB8am7w7vfc5mtfXVxbXVBd3M7V3PHm2/5aVF97a1pr9n76fGbny9dr\nX3dsWlROXWZl/eXd9Xzj39bV1czNz9DfallLTU9OWV/az+f9a/9oVFVQWu/c0Nbo7fPtd2lq49nq\n3uZ4+V5qWVj7W2rl8O7y9+f7bnP56Pb093ft3tbX6uzoa15ZVldYd+bc4PT3amhoal1r9u3Szs/S\n321eVlVfc35fa/LtflpcX2ri2dTW3+x072VYXl5869zf49fo5O1v+WdmaVxWUVtibHxv89/b397i\n69nP197g6PRjUUpNT1Fo7N3c3e3s7vZ0Xv1359Xd3+ltYWNhYmfv5ebf7PHtbl9qfv9rdHR69/zs\n++fr9+Xt5XVoYVxkZHz29ufi4d7m6/9cWmFpYl1dafnf19nSz8/Z9HJgWFRSXXh5amhz7vFzbWJz\n7erd2N3f3e56a19ea+/l6vl4/urwfnBrZnf9amtrbmpmXmP/+uPf5OXs6PN+/HZrcvro7u/p+e9+\nb29kaHr38fb/7ebk6Xj/bmz58et893Jt/WpoYGBjaX747OXl5Nrk+m1gZ2v36u967ePp6XFqc3R+\ncf30c3xxaGZibHzt5+nj7P7q4e19+O/17/tx6Otubm9rX2BfXmp4d3rs7e3t9H7v7f969+Po6er7\n8flmY2FfZWRt8N/b3d/n/Hp0aHz3fX527/5ra2pw+f3z4+Dg5vxsY1xYW2Vz+P3x4+n68Ozs7u7m\n6unn6uHh7vpgXWFdXVxmd/Lo7/Pg63F7am33fG3t4vr8/uzo6G1v0+5o6ed4Z2BdfmBUXuzmbebv\n/Hnc1mT64OL+YlZh6lxhcOvm6tvn3eLmcXB3XmJiamTz7/He9fje3mf44HFuX2F78mJf/nNoafb5\n7ed5/Nrece3n+Oz7eeLn/P3f8mz683BrbGd6ZFtfcl5c+/Ls6uPm5nxr8fdxbHX44X9u6fPz/Wli\nbvlqbOf0cejc4t5iTV59aFR1xLq+vbq5v95URkE2LzA5PT9Pb9PP093Ozfhq697082B00tnp18vP\nztTe325OSk9LOi2/oFPKnqWmucrrPj0eGi8qHi9Dw62rr7uksTg+STgwMTFNxMDIsaWwtLPI5U06\nLjg+MjtYVFfW1tPL1Pvm4lF6a0lr9DM6mKA1nJulrF3eKjIkDx84HSRLzqqoqdCypy0pNDQ9OES9\nrqqrq5+purtfPzcvLS9EREDkaFluXllOTEdVaE5qyMts4O0syJPCUJaipr9A7y08GhdZJxw6V8Gt\nt/VtrUAkY0ZEzMvVrqTOuKm20r/DPr9ONFVaQTHhQDxmPUZSYEHv1UbpxmVfx99qSi0vm6ErnJyo\npEC8zUkhFk4tGS9L066z39G2NyU6MC9K+tavprKopbG/vso7Xzw33D9o4cjEU+lEOzovMzlBRz3O\ntc/Dx8nNRCsrn6cynJ2fnkSsuDciGkYiGS82yrnJ4d7iLS03MT5XzrOoq6qkq7Xv1+o+TD/Mvl/C\nys1uOTkwLywrO0JHWOm7u87HvMhMQUA0WKSxtpiin6nyrTwoHyMwGSE6Ts18wNTtQS0/OjVF7rW1\nrqino7DEvslQRFLizVNfzdN7Pz89NS8rMTtAPkvHv8/Du73VSlM6Oqutup6koKPOstc5KyYyHR8w\nMU1TzddXPzRUPDQ/7Lm9t66pqa+/wrdvXM/Pw2Fc29FZPVU/LywuMy8yQVrWzdK6uL3Ia9NIL8+v\nxKejpqGup7pSOSo3HhsnLjU019duTzrsQTk9XMBvv7Kura+vtLPKzL3I5G7kU0xPS0k9NTU0MjM6\nVExn2N3DysrEz3hYQz3Jsrapo6SlrK/DTj0uKiAfKyotTfBsU19kRUREStvc3bm3ta6tsrq8ycrM\n393WeFZrXl9DNzs3MjA6TEVNbuvn8s7HzdTX4G9QSb+xuamlqKqzs81SOi0sIyEmKy86T0rz02vN\n8PXR19d1vbzBtbi2uL27vcjS019LUElGQUFFPjs7P0M9QEI/Ufnaxb26ury/1vtiR3vIyLGsrq21\ntMBTQTAuKSUoKjM6RE7xz9nP4s3U2cbGusO+v8vI1czQytDWx8zTc3n1UUU9ODYyMzg5QEr8y8G6\nu7m7wMLK1dbW3trcXVNXTW5ccMjLyNjKy/rySkE6MS4xMzhIase8ubu2uMXGz+VVVE5OZFDZyc7J\nz83V3PBYXVhTTUFBSUVJVGH0+NjMycTCvrzAxMva5U1FQD5IQ0FLW1hYe/HqdF9sbG5159DPy8fM\nyM3S0M3S5M/nWVtKRD4+P0BMTnHZ183Lxs7X2Obg5vh2fe3zdOrs+N7t6+F9bW5qXVNRUk9MTVBa\nYl/849nNysPDw8LLzdt9YlNNSU9ST2Jx7+X18vteT1FZWFdfbPDW1t3V29vS19zW1d7sdG1vXmFi\nZ29YXWFkcV9g/vtuf+zza25wZ2libHD23dzPy83Lzd57YVxTT11n/Pl29G9eVFVeW1dibn3q3tXX\n3tjY19jk2drd53Hpfl5hXV1iX2Jt9Gto3P1caVtbX1dUWVpRY+fk2tDPycbIzMvN5vFpV1taX2Fj\nYl5bVVZcU01ZXmLz4NfU2t7b2+Hj2Nzp3+Hg1eP49mJZTE1OTFpbaO3n2t/g6Xbv/mdoa+/q8+3l\n3d/i0tnq7n3r8HZlbvJkZV5STk9RVGh4+t3U0s/N0t/j9WRdZm1jaXJ9497f3+P0bGdVTk9RWmdu\n8eno593U29/l7d/xd2dr8/Hj4uju6OVt/2/YzNR0SkZIUlxZS0NLXc3Lx9Lc3dTR2ONZXnzb3tx5\nX2h92tbfalhTWGNoYFpaXHP6bWhlaPHb087R29rY3d/vcGNeW19+c2xhbX7c1NjuYVtXXFlWVVVY\nZ+zc2djT1dLX4dzf7fV3Zm768uz4clxcV1p28/B8a2doaHD09P58cv75+eji3eLm3Orl6ezk+G9l\nYmBrc31paG1pdm77enhtWl1k9f3g6ure3dfi5m1ueXb3+H5w6ery8HZzY25fYmVdZ2zv8urg7d/n\n4e7/fWZsandy8vnm3uvf6ud5cnFncmRqbWlucmtfXFtheuPd2tPd3+rw7+/r+uX2aGJdam/07Ojk\nb15ZW19fXnLs5vfu4eLd4uvn5+3w9/f5d3F7evh0eGtvaGdpXF5mev7o4N3n/Xpnamr+5t7e3uHl\n7ntzYV5manX58PLp5H1uaWBkbHF+9/bw5uHj6fd78/V4eG9uaW99dXx1c3/p3ubj4+PpfnN0c25w\namdrbm1nZ25rbm1tb/Tx7N3b29/i7PBuYGBfZGt4+ern6+/p3+fj7HV8ff9wbmxtb3BmbHdycXb1\n/3xvdn51f/bu/f12fXNu8Pbq5+/s9Pv+ePZ+dP54e/f09/v18Ort7+v2b2tpbW5qb2//7319f3Z7\nfH75fH9+ffnv5+ft8XdpbXZ4++3t7e/9ffd9a3l1b19p8fvg4eri7v55X2NkZHzp39rZ29vmdV5W\nVVJTV1pndu7f1dHa3On8bV9dYXF46t7f3dve4O1tZF1YV1tleX3x6ejp6urq/m9vevp3dX7x7ezi\n4+bo+H1oXWBre3j2+XT99nZqYl9jZ2t37uPf3d/m5+fm7+/t9/z+enx9fnRqaGl3cWx4/Xd2en19\n/vH08/T8eu3r5ufq7PlvYmhlYmtydW1xfPr8fvfw+XR/9n388u/t7efq7/x4+3xxfPX29/L7b2ts\na2VhZmhy8uTZ2djX2tzlfmpkX1xdX2RoZ2tsbnBwefrq6fT19fLy8uvq7/L09/P2fHhua2Zldnp3\n/3D48Pf29+zv8/b79/Ls7fF+++/0b2FcWl5nedzOx8K/wcnT71VFPTo5OjxCTGbey8O/vsHGzNj9\nW09LSEpNVWbz2M/Q1tbZ3ud0XlheX2B1euro5N/d3+nu6utuXnXfz8a+uLm7wNpYPDItKystMztL\n8sm9uri4ur7Ey9nvWEtLT2HhzMC9u73F2lxIPzw5OTs/SFBh7NnPzMvMy8rKy9La5/xgU05JR0VA\nQVrUva6ppKaqs+Y9KSEeHR8kL0Haua6pqKerr7nLdj83MC8yNUBlw7StqKiqr778PS8pJygqMDlI\nes7Cvbu8vb7Ey9buXVBNSUpMT1ZibVdOy7etoZ6doa3HMiUbFxgYHSQ0XL2qop2cnaGrvkIuJSEh\nJC482rerpKKgoqatx0MsIh4dHyUwSta9t7KysbCytr3SU0A5NzxAS1ZZTUpMQj3arqabmJmdr3sn\nHRkVGBoeJDBcvaSbl5aZo8Q5Ix0cHycuSNq7raaenJudpro9JBwZGx8qOUrizb+3rqqpqrPNSDUv\nMTxN7NbpVEE8O0ZjX86pn5yWmZ6tXysaGBQTFxohLdqrnZWRlJuqTCYdGhwfKjZIyLGlnZmXm6K4\nNyQcGh0iLTdOfNPAtKysq7XOTzo2NT9ObdHb2ftqVk5PSlx9WE+0oZ2WmJ+yPSgZGBcUFxogLr+f\nl5CQl6jdKh0cHSIlLjxPtKCYlJWaq1gsHh0fIiguO0jct66urbjlST88PU5iUGPr0cC5tr7gQjQw\nLzhb8FS8oJ2YlJyuQCIYERYWGB8pRLCak5CSm7wuHxcZHSUvO8m1pZmVlpypSycfHR8nNDxtwLm1\nt71XRDw0PUpvXGrV3L+yrq+72j4uLCwvPUbfxlC/m5WSkJ7KJBoWEBkZFx4s06STj5Oaqz0gHhob\nHyk746icmZeapcBALCEfJCcy47isqq7OOjMsLjpESFHZy76vrbO5w3lGPjktKy8zQ+27r826mJSV\nk6g5HBcYEhocGCNKqpqQkZqr3CwcHBkaIji2pJmVm5+qzDgrKB8fMEq7pqSsxe82Ki0sKTBGXrys\nrLm+vOPLv/U7LS4sNmLq2dPBssDZm5ObmbI1HxsmFhkbFiFgn5mVmKO87j0fGxgbKc6fmpqdpbS5\nyzIjHiUu86yoqbG+ZElEKyMiJzfJrK63wd/Otq++VzsuLUBoUUZCTd+4qq9OT52XnJzLJxocJxof\nHhwruZmXmJ+7RjUsHxweL/qomp2irrbWTUQqIilNvqymrL7q+T4wKiIkLuK2sbDE19XHt8DUTDtB\nPUJKQkVL98PDvrbHO7mTl5+xLyMaLC4YGxsm3KCVnKu6ymBJLR4aIsqqnpyqus6+zEAzKCtgr6+x\nsMpfR1U0KCooOF22sMjI9NDYzr/e71dmTz5VTklEQWjRxLOxRTuckZqpQCgdIkIgFxgfVKuYmavF\nwsFPLR4ZHl+jn56ru8LAu0kvKCpRsaqyvszS6Vk7KScrPefNwd1n0MXG1MnJ4NvZX0M+RUA/SE7M\nuru0vzzZlpShvysnJDA0GRcaKq2dnKO3yci8aR8ZHTCyoqGrxLuvrsM4LCkx062tzlvbztVbPCwq\nNUdQWenfyru7zdvCvr/K9kAwNDs+SVfqv7SysbxELq+XpK5MKzg78yYZGxw5qKKpsb6xr6x8Hhof\nOL+zs76/pJ2itDckIS/mfFlKV7alp747KSYsQUc8PlO/r6yzvL/F0mI7KysvPl7Gubevr7nG9DUp\nw6W3tclqztm/QiQcGiEzZL20taqenKjLMh8eIy8+Ree1qJ6anatvNCsrKCMjLETEqqWrvM3/Sjs1\nLy07+Luvr6+5ydD8Sz02Nz57vry+xcvJxvw8LSooKz1Pza+moaKmr9ZMPzMuLC0uO9TCvb7GzfJy\nRDQ2Q/XDt7a/xb3K4l9CODI/Ve/Cvr+/vLzM8U43LzI4QFDYx8i/ubq9wc9LPD9DVOPYdVFTTEZK\nTkNK4svFtqyxtLO7xNHjSTUwLiwyPD9JUHPpw7W6vMLP9GHvRzU2OD9byby6sK+2trS41Es6Ly0v\nMzg+XMm8u7/Dz2xqaUxGSVZt59HkcFNPYlxTbtTLXjezmJ+gpEk5MzQyGxoZH+atoqCywbOsuzsn\nHBw0vKqrs7Cvqqe/NB8cKl23rbXCu6+svzknIitZwb7ecs69uMHgRDxHUlJBOjc3S9vDvLy6vsa9\nykQrL6Oap6C7PUw5RSUWGRwxrKOfqvq9tNQ+JB0fNq2ipKq9xbq8x0QrJzW+rrrMVD5az8ngQz48\nTvBTTT1EybSvr7bKSTcvKSw2Sde9sq+tq7TvNSwnIB/PlJeZmbTLSy4lEQ8aIb2fn523wKnGWSgY\nGyPGoaSktMSttLpXJCIszqqyxmZLy7y/2zUyNT5eSUU6Rr+vr7jURDs/S0VFTdu9tbG7zNX8Qy4t\nMS0tPZ2Ol5qmLy4kHx4QGSpHmpmboElqWDAwHBsmTp2ZnKPyS009SiwkLWKmn6a1TzxDWm5ENTI3\nTtrW7lp8xMDHzltEQ0taatvIwMLD2E1NUVlTPT0/SlI3tZKWnqNDKiEfJBcbL0Gjmp2hZTY+MDUr\nIixNqZufptYyOjdNTTQ8YK6jq8Y6MzlG3MTiUlNMUUhMTUrIvr293nlGP0tAS27Zz9fS08vDxNdC\nNzo+RTw2r5WXnag8Jx8iJhsfMlKnnJ6rUTlJOjYsJS9lp52kqtY5PTo/PTdE37CpsPc4NTZavbrF\nXUlBP0xXWvDKvbzO8ko3PEJP6dLF3OTIyb7FZUM3OkxUU0cxV5qRm6LMKCIkLSAaIy7FnZuftUZF\nOjUyJSU0vqCeorY6MzE3Tk1LX7eorLhuNi8/yrzLUT4yOFfgx87BvdnbYT42OEdZ1728zevb3dr3\nWk05OkzryNc/RZ+UnabdKiMlNCgeJy5upJyer0M8ODg8KSYs+qSfn649Ly047eV7Wcmqp6zLMigt\nV7q2xkUxOlfRydrvU1vW5FpDPk5tybzB6U1KTHzIwcdzS05v41o2J2OamZ+jdzErLjEdHCMouJyb\nn75EQDU7Kh4kNa+enqLTMjU55MdsSUq1pqu+NyYoS66ruU4vLkHv3lpDU9G+vdhGOD5f1cnM/kRK\n5cW3vMv9QUZFPkQ3KC+dj5iarT0pJSwaExwl0ZuWmapQQjAsJxsdLLibmZuuPTYzPks9Oz6/paSu\nbzEpMcyyum46Mj16zl1GbN/Cu89PNzxX5MHC2ldMeNHIxNRfSUxPPj9BNCfFkJSboFkuIysmFBol\nOaOYmaN4QTksLh8cKGqempykTzY0NkU7QEfcqqKmvTgnKES+tcZOODtddl1ES+nGuMHzPzpFXdTY\n4WxX3NTKws7N7UpBPEBHRDY6npKcoL05KiQuHBcmM7ednKC+S1QzLSQcIzuqnJ+ju0hDOz44OU/h\nsqiotUowKzbww73VU0dUeVJDR2XhyMjvSzxGVejJycjyWVxd0cTE2UU+QkVr3GUyOJ2SnKbUMCYo\nNB0ZJzmxnZ2o3EhGNS8kHinto52hqsxHPTs5MT1uv6qmruQ/OTA8VeDP4t5VUlZISU793MrK52Ra\nWFrs2NTXaVNNYc7IzF9AP0zf2H9NNUuclKK1UzgvLzMaGCp0p56isn72YzYmHR4vvKCfqK+73kI3\nLi1FwrGtrK/NSjU0Oj7s0tfq+vNQSUZIVNzM0vZYXlxt4eXSzd9VS3PNwMZSOz1U5u9dQzBrl5Sk\nukFNPDErFBguxKOnrLTDudYvHxwkSrioqq6qrsU9LCw1YsS7t7KutmI5LzFA5sPV7dnbWEA8PFXO\nwMnp6WxTSUtcZN3gVGfNvLvOU0VZT0ZOSkoxR5eUprBXzUopJxIYOtGrt6+kravxKSEeKjZHuayj\nnqe/PDAzMzpBaLaprLbZPj89OzxPxcPG2kk/REhNb8zHx8jpU0hFR0/o1W5h2L68zlM7QlleWU1R\nWDzClJiyw2DBQicfFSBdz7nDrqGsvD0qKSUoKjm0o5+hscnnRzQqLD3Pr665sLxZTzc7TtjNSVFP\nRU9MS97BwdDMx1k+OD9e6dxeWM+4t+dBRExZ/k9ESN7LPMmWmry/z7tBJyAXKF9U3c+toavLPTc3\nJyUpOLmqqKutrblTMS0yQ2zZzLaqu11KX8l7Tjo7UEk8O0vfvMHMxrvCRDc9X/5MSVbLtrnTTEtr\nWllMP0NX399U5J2Yt8C9u9kpIRspZTU4+LKosMpa89UuHyQ6yr67tKqjqMRDPD08NT1nyri7xraw\nufNGODA3LSs4WcvDtbS8u88+PEZJRkZg3Ly1xNr3c2lHPD88QFDVvtncpJqyy7a95SolICtJLitd\nr7C3vsC7xTgjKT8/OVm2pqOptMvNYzMtMTxEYLu0rK28wcpLLSsqLTc+db+sssK8wO4+NzY+Tk5c\nwbW8wcLH2Uc1NTxFR17O0cbdrJy5zrS1xDAvKis3JShTu8PLtK+wuEAsND8uLE7FtbCvr7Cv0T0/\nQD44SNVrvbW9t757PD8zKy04R12+wrqwuOBWeFdFQEhaysvUysnsUEc/VWhYVGTZZEauouHApqnD\nS3wwLSwfJT1INO+srK2tw1tpRSorODc/77q3r6mvtrrHbEU8MTZUTHW+u7+/wlw8NDI0PklSzMG+\nxc3X2uVMTOrS4N7bb1paSUdj4lpn3uXV9V2xq9y3qa7VVtszLiomLDAwN8W2x7yvtsDK+0BJQjM6\nTmdSzbW1s7G3wczVT0RMQEdV/l9pWj5JWFNM/NTe183cW2pfVU1a58u/zdbT3VZLR0VRVVVg09da\nTsClv9Spq7pPzVAvMSgrLzIvScJy7rGtv8m6y3daPD1CQDlIxsjLu7W4vcHFympi/uhPPkQ/NTQ+\nS1hryrq8xMfJfEpDSEVIXd/N2tXFxu5NWt3rT0x7dE5TV2evr/Svp7Dr1b06My8sLi8uLkphScez\nvci3ttjgYE1VUEhIz+FP5cbG3MS6x725v8nQfj46Mi0vNDpEz8XHv7e9ys/xWlhcXvNSTWPtUkrk\n3trV3unY5lJX9UrPreTNrK3LX7jtODozMjEwLDdfR0zCusrPucLNzNPV4NpSW3xPSlTpcd3Dx7u2\nu8S/x0s+OzQuMzo9SmTfy7zBzc7Fw8vT62xOTE5NREd57/3a33Hj0upe18xeSLetTNyust1gwF5M\nSjQzPTYrOFxCPXvR6si9yb24wdfIv05Le29OROncz8bOxru/937uU0A9Pjo/PT1MYVpny7/AvLvC\nx9l9amlMRFtrU1dVWvl6XWjMzePNx9bu2u1fWkU/e9VXd8G3vsHAw8hwQDpAODAwNj1GTk7Vw8LJ\nv7e7vr/Bw8fhXVFQSURMSk5VZO3h6PHY3vpkbmlSUFBVVVhp3M3Lxr6+yMzcYlJMSERNUE1d5eDo\n2dpwY3pnXP3jbd/Q2PLcz93/a39vbV5PXutyV1tgU0xVXlt82MzKxb/BxMfR321bSUpOR0JASllS\nUu7V0dXRytLP6GHs63BWYujseu947er77PXc2nv6c3loYk5PSVZfWOPky8LN0M/F0GdbYV9ZVEtT\nbOtdTHrq7lNf/Vvzbext287Z0dvO1drf6c/mal5cW1dTTVFhWWJlcvn2b3fp1uXo39Li3uBs7mnt\nYWlyaujc4X7k3mxfX09OXW3zYdfp3tvU6NrZ72RnWmJQcV599Htv3N/u8dhy5udqd+nsZWNdcO1k\n+V772nPkfd3d7m9zeuj0eV1fa2RdcWv05O3j4O/uYHruXm/78tTp1+Xg3F5kWm1VT1tSX1j49tnP\n3M/Uz9ze1untXW5bWlpSTVZYWFpd5tbOzdXP1Nl6WmpZWFlZbnLk39/U1dva4d3vYGRUWlRkUld2\nb/N33+b91nPf9O787trlcul4+m38YF1kZGPy9fz17O/pa2tv4e7madnj1/bo4ORrYl1ZVFxdcWdv\n+O3r39vu3nLcbOtcYmFdWGJc5/PY3dTa0+Tr6e1rZF14X2dcfnXue3H9ff7y7X5yev/39W5ufXZ/\nd+vu/N7g3uHs8Xf6Xl9qY2lr9Ozi3/bleuxrb2L7XmNvZvRt8e/93/rhe+Zy7v1X/WHfanvf/eJ8\n7Oly9XT0e+Bk5HXvdm5kYmNoav1x/vvr7+B133LpdPprY+h32t3o3WfnX3xYc1h6e2r9ft5v9uvy\n6vL59/f47mp5bGHvX+r56ut14u/te2D2bOZf+Frld334ZN197utq1m7r931zae1bdWxt8mfu3HjZ\nY+Jv7H5y+Wp832j2/u96dXXteOzs5mTqeWvpXHnvZ3ty5mz3eu59/m1qaW7+dmXy7uzldeHj3eBh\n32rybXt6af5bb3Jr+F7qbO7q8uFs0HPvf2/bZvJW/V92dV/ia91t5Ntx0lvuZetie25u5l7l82TO\nYOdm53Vsa2nffu97ZeVseO50bP9weHd96HLtb/l58/J6+ODs4t74415ubl5mZvtd6Gdy613ccur0\ncdpp6W725XHja+xt+fp283XuaPDmd+l2Ym9z//pib2H4+2Xu9Xfx8fTt7+rmdt71/OZ4bvVo7uxe\n3V7s9Wn8bHxvbXptbGPcY+Bs4u5x63zq2nbbfdpsc3FtZ19taHd6bvpr7O7ucPtu6X1xdHboeelo\n2fDfd+nfa3ZtZ+dcaWL5Zvb66+bj+uV99Hzr+XNkYXZsb/hv9/fu+nHuZPfmd+hn6u18Z+v0buJl\n7udj33Xc7vBs615ebV5u6ljib+fiZ9r57txk33Pt9Wbpem1s/W3tbXT27mzhWvxoYXtc9el95Ozh\n6+N88N9s7n3v++vveXp0Z35eYlPuW+Fe6HF81FjMat7pW9Baz197fWzeW+peaW9f5WHaZ+74euNm\n7Hjvfvjqe+Xu/PXn+upZaexb9Gln6F35eWLXcuvl7XXobm7j5ORl9f5pc13vXt344HZ+e3J3X+Nq\n4l7p6XTi8fB743pt+WVve/Rr+V9pav3o597d4eLs5WH0UW5xXmZqb/Fs5W7+5eRx42rn7dvab+dk\nfmFcfWHdYfpqePFR6Vzra2b7+9vode7k4Obhed3X1l5z3PhmeFpvYGtcaHn/bFtf9vrn/l3V/Hro\nWdxn9G3Yz99defb6Xk9mduhdZejhzfjQ2NfbWdxP219N/FvbYf1u5dZt7GvqeGtd9eRg/VjlYfl+\nZ/J7ZmnzbvPf7dhw4nJ772x023L7Vm54XONkdtTafFLb0nZa0eFry1N40l1abutP6NtNTtt5R9H0\nc/LodF/GYnLT4flj2VXe5W9p7c1VYVl3b+lWVt/pZmXv4dXp3WXiyk/tXOpvY29Zzn/+We/gaNlV\nfuvo31jWff38Xmbt6XRo8Ol3dXld53h5bPt3eW9v++956uP15+ne63nu+etyaGFidHF1WPVk+mph\ndf3eZmd6fPNk+uLROy6wq0TJtresuMw/3ckrKTIvM0A2PLaxztW0uM3NPzzyWTg28tvl0m7Xt7fr\n7cfaT0g8PGdMOC4sops+qZ2gmbbRPzjqGhMmISMyJ9+noKlgpqfUXywwPjorKf6zt7qsraan8FPw\n7TApNi9AQjJCzL3a5sPM53xBSV0uPpeibZeen57tcCQvKg4YKBwvQU2poJ6+X6hzLy0lNT89O+6m\noK2opain0Dk3PTQjLDQ4Xz8/zbrE5cvKe1Q/PUMsd5SuzZShnKNEWyM2Hg4gJSJPPu2korQ4ccAr\nMCottrrMxKieprO5w7q7Ky5MTU4uSnT9/S48YUs/Ok7uytpN07w2U5Oh3JmjpKU6MyAwJBElKibI\n5lCqor4uPVkvPS0srKS+ua2oprtMPMe5Lj3n4bhPP1TOWyouNjxDNDrWt7rMuL7rNVeTreWaup2r\nKEIjPikVMCUsui5MqbHIL0n1Ps8rRJ6uyMDNtrJnMEm3yVTbcbqvPjzZ1UQtMTRM/C86xbe90tvo\nfC06l6PLnK+eoStBJzYuFS4lKLo0Sq+utjo/XUjnLjirts3JasWux0/SuK+9yGrzwD0vN0VAMjc8\neMVhXMi3vHVeU0U2JMmWsK2esZe0LVUoSSAcMBw+2Cv3uLC8PVNNd/Ipa67LwFz7u7W+6bqur7vd\nQmjXMjdAQ0w9PT/l0kFT0O5n699XPz0v2pWov5u1n6sseyk8Mhw1HyfbLU68uK9VWV5N1jc+zfJm\n3mdsubGtrq6ss7pEOj81QDQ4SkFoV0ftac56P15W01U29VM/qZy0q6u5oVtCbCxxLyswHjBHNFTe\nysZvztFe7mre+j9VV0G/v7yqtaqvysg+bUA0Vj5lSz/yW9xaRmJGVkM97WrXzNTwUbOs28nGybv5\nuLVtvF1MbSszNzdQOERJSd5PUvVNaE04SlDkx8S1s6+wur7Hzsre8f5MWE9CQT1GQTg/R0teVd7D\nztpKPsq12OO4tritrbu+tclfTC0sOzIrMEI3OlpPSFbuTVb1SWnn4r64tbavrrSzucPL6Vk/OjU4\nPzg5P0fy6XNi0cX9/U87O/qzz8+qrbWzr7HGwddGRzApMTIuMTg2NF/jP17X+NfyV17Uxse6uLqs\nrri4ubx4U0g7RTw2PT9DSktZ++H5bMzjUXNbTT7SrtDRr7G9w7W0y7/KTEM0LC8xLy42Pz9fbk9s\nztZk5VxdycvDura2ubi5wMfO/uhZPEhFQ0pDSkZYd09na2veWHnaZGhKbr3E3tm6usO4t729v/I7\nOTgwNDU5PkdcRU7yUe1jV+1NdXntv8i8uMS6vb670crdWm9LS1FYYU5MWlFETVVXX1Vw535uW0s8\nSdLQx7avr7GwtL7M7VVIOC4vNDY4PUI9R1dJU37b3W7c1eDVzr+8vL2/vcDAxdHP3d9cUGJBQ0c/\nRj9ESkt4e2fre/v7ctrPys3M0PrY2vXrz8bMxr7HztjyW0U/OjY4ODg7QEtMWGtt1szJxMC+w8LA\nyMTEysnL1n5sclRaa17q9VBSXEE5Pzw9TVLrzMbBxMfFztLYXfviYnZuXm97+mpiYWpgVG/6eup7\na1tiZE5j/lnz3tnM0MnHz8vnX1ZMT073amzI19LVYXJpSEtcR2VyZM/y4dtv7HVbald60/XVzNrQ\ny9d393FWW2RMbOtaWmhlZn5VVv58//bW1NrM2tB1ad9j6exiznPd0lTi80xdSk5NTVxzcdDlb8Bl\nWcVqWvboaG7rX9Ze1dpTxuFZxOta03xVf01/SUjrSU7uXuLc39zXxm7gyVnQ9GHET2rIX/BWXN5E\nXfE/7dY9ztVPv0ncyEDM5FLPXN7ZU9/W3d9U2drmyk7dxz/n4ET0VUxwRO58P8JdSLpPY71V2836\nv1rsvEPdvEN81lNS8nxB8VNaUkzJRXLESeTKTM7bXN396WZ011nV9Oxyd8NMcsJNaL9JTbhFR79H\nYE/ZYT3JWEnJ2Erl1F3kz9pNz7g9bblHVsZbTN3bT3BR0mZbv0TtzkrTTlvOVk/Kcm9Uzc9L1M1b\nZL1HXLxHb1Xe1DTEyTTGzza/xEDP4s9NVcZH8+di2v7TX2W9bkPE90HTYnZp9vFY0HTfS9vNPcFH\n29A2unhKylrXUfXPRNrGSdbI8ldizUlg0EfmU8/VScBsSMJL3F9HwFVGv11byVDh1V7RVNbVStbY\ncutX3t9dS0a/Qz/AQtBjUb49v8Y4uGBcvmJ7w37UaVS/QlLPT0rVXTzV3DxXw+c+3sBZbtnMVNa/\nQtTARt/FRM1R8sg4vt02uFBR407TTd/kPcrePvbZ6l1eydldx/3M5N/bWcViQ8zjTmli6FZL3EXy\n1j/E0Enty9hF/8leYc9WcrtSP8LZXk3d1Uja3FXeb3tYvnk9zspMS+jYU2HcV9n76M9r+c9zbHV9\nUfrnY2/w2WzR60u/5EJQyc08Z9NUbNpLXLpHQMTEP0+zUj6/2kvs0kXcvENEuNc71dFW/9NLT8Ht\nO9zGSl5v12P60D/OyErVfM/WP9PIR2vTz1Rfy0zj2E1LzexBdtdjTMrZSr5kTOjDUkGxS0K+3eRP\nznI/vWg3w8o/YeLmW97pSs7VPNG9RkzG2EfZ1kzI3EHhwF4/2L5PTdnVX0zL5Ux5Zm9d80xcv19J\n8sPlTdTDe17NZlfPVEPxxVs9yb9GX9ftWuTVQ83KQObFVk3j1E1a0N7pT3zUe9hLZNHyYk/v125P\n4t3T70vH0HJe/8tMX/5ncVVs9fNrbVbR2kzi1ddhe9/V6Ev72t5faNNuXmrOfk3O7k3pY1brdE1c\n0d5N5NPnfnrh2+RndN7jV17cb15Z6NJPWNLraWXd8V/WaG/WeG996/5y3vpi9n3r5lps4e9iYfpw\ndupZ+dR8ZVzb2lx7cNrdWmz93OBRctbm+1z63+1oYN1yXfv87FdY2GFm4F3q7Wf53tRf8czsauru\n82v7Xml4Umjr6/l94OHgc/Lm9fVi3vJc/vnwXm/mZ/13a+BuX2pq91tedWVe+mxu5Gzn9/Pffdrb\n9WXe4mTo++J07u5p4Ot+blTW3F3Absq4X7nZ6r498E04RjI4PDJAQ0Ttf9HEyb27t7fHubza2Pr9\nR0ZSQEZNRk9UYXJY3Nhl5uXzdVvpenDmbtTa6N9QTbS1Nb2qxL1lrbM0yUk+RCcyLioyKzZURV7b\nvK/Euau1tb+/tdbPb2PFUEhcXlA5R31CQk5eZUZXbl/4XGTT3d5x3r/f1NXNzFnjXDlCst8qr6zH\nyN6f2zyyP2k0KzsmMDAqP0hOX9qzuciurbiywbnHYMJDVexEVURwYD/xfVZeXd9aR1pKR05GT1N9\n21LSxMzIzrvJ/8b4TDlJrDs0pr+2yr6gPcLHMtYrLykjNyQqPURcVrytt7KorK2vu7no3Ww7Vz9A\nTEZfSlDeYHLxe/lPSklGRj9GTlzt79DCvb2/ubjH2tjjTzs6M0q8Lk2rwa9jq6NEtVRmVyQ2Jiwv\nJzc7U3/rt665sKyzrsPHx1LcPlJrPntPb+5J0Nnh31TjTj5HOz5CPE5Eds1uv724tcazvNLMS1VH\nOTwqNbBNL66oqr65ncTNyjdbKSsiHzMnKjFWwWW6rKysrK2ysrvvVOlNOEFbQD3251L9zMzs2NhK\nVHM9PUBOTTrp1tLHzbi+xMLczX1MRDxIPjtCQkW4rU+zpaqqz6m5TdQqNC0nJR0uLi41QLm7ua6r\nqKqttrm6z01LST4+PUU/T9RV38fGznPS8E1PPjxGPUA/VtZe0MK9uce/vs7VVHBcQEdES1BRSVCr\ntky0r6q//bFP+0QrNSs0JiU1O0xB27qzrbOvsa222s9sb0s5Pz9cbEFYy7/H/8fF2dtFSUo+PzE9\nRkNYTMi/xre8trzDvFZcXUJBOERHQGlfV1jEqc7Mq7Otx8LNPM43KissMyctNjznz8vAsauvubW1\nwcp4V0tSTDtKUlL88uHdysfybNN2TUlJQz5IR0Vb4N3Qw729xr/K3e5ZX0NGSkRQTVx+29dgWL2v\nz8O6vq+7v05Jyzo0LSstKzQuOlnoxMOzsrCts7nAvshdWUs+PkhHPkVS8OLUzuDJws1lVGJQST8+\nPkxbYM/QyL69vcjLyt3wXUhESE1IQU1NTFBJzLjHtrS2rbGwzFvoOTouKCcoMS03RnLJwq2xrq6y\nrr270lR7QEc9N0I8SElK1d3Iv8e+ycLXUVJFRj89Q0Vi69jHycXBwcDR9nNOTUg+RD9FUUpzZkxf\nva+8tLKyrLC13+FwNTIpKSQlLCw+R23Cu66yrq2xsLjA03JVRD4+OzpBQEdo2dvPvrq5vcLOc2pH\nPTs3PT5FWu/Nzse+xMPJ3GxkWk9IRURBUFVReGFYyLW1rq+0srWwxdxVMjAqKiYmKik4SdnEvrS2\nraytsL6/0NRtREM4Ojs/T0hQTXTFvLe8u7/NyN9ZQDc4NTtCP1Fh9s/Hvb3GwdLg2fh3T0hHRVtU\nTllNU8i7tq60tLm5ts7MRzQvKi4pLCosPUzMw7m6uq+1r7S5wfraVVRNPkI9SkxQ71h72sq8u7fC\n1txeWUlBOjQ4OD9UYfDmysC/u73F1nz3/m1URkhMT1Ba/21Z38G8s7O2t7u6ysxdPTUtLSkuLy86\nPWjexbq8tLm2t7y7y8zoV2tZX1FIS0lTX1t+3tfJx8fP3OpUTUlBPzw9Qkxp68/FxMXFw8XL0997\nYWRWTk1JSkRISkvgzL63s662trjByV5HNi8uKy4tMDg9WunJwr25uba2uL3CydfpY19PTk9IS0lQ\nVVVtd9nTysjW0O5nW1NSRUtHRFBr3+TNzNHJy83W3etWWFZNSkRHRkpP+M3GtbOxr7Gwv8LsST0y\nMSosKyw0N05Uy8nEt7iwtrS4wL/W3V9RSkJKS0xPT05X6dXP1d7j19nj3/VcVFddV1xSSlBf+d7U\n1d7X09Xc5V9PVE9TUU5XVEdE0MG9tLe1ua+xvL5hSzY8MSotJi0vR05N0OG8uq+xuLO9vcHC1kxN\nRkJIRkQ+Sltt19LO18vN2NnbfVBpUEZTXl1b497dyMXMz83mXGlUSEJEREJVUVFa/9zdz8vHx9hS\nz73Qw86+yr66ftFbXz09QC45MDo2RF5L2s68vbi1wL2+x9h890RHS0tQTWxPcd3j3uLSaX7yaVhU\nXE5RaF1t5dHSz8DDxsTJ1f3h61NMS0FASk9DSW5nftrK0s3F1Nzg6VpMT0VKTVJWW9vbzcrFzM7M\n2Nfvfl9k7mr18dzh39DV0N3lbk9WS0hFREVCTU1PXm/n7s7LzcjMzdXP1d/f7fVpfnn3+/tpZGJY\nVk1MTlNfceTk29PNx8rIzdPY3N5/bWlYUE9MUmNSU1l/bl1lV1tXT01NU05UZ9zOx8K+vLy6v8/R\nvdpVaOptQ1JLSlBKSEFaRkVOZPR00dzXzMrN1c3a7O95YU9fU09RXWxp39/i29ja6Njc6+7sb2ty\nbWFkcG386nDsz9Xc18vT6uJmWk1MSkdWTVFXamvz3d3r8uPo+XBvaV5sbXFt79vv187KzuHvw75m\n7sfE73TI5HJQUUhHQTc+Pj88TG1c7dHHxcO/xsXH2d7g3F5be11ZVWhcWXB2affW8Pzd3Ovm2m9n\n+2had35h/dnufdfYcGr7WlBYVEpLW1VVdNnm4svMzcvUUey4aUjKvuBNwspiblZaSFc5PVFAPkTQ\nXF7MycbQwMfLxdjf4+RZT+BpT17+9l15dvjgamp86VdSc1hPUF5VWejt49nP19LN297h5WhhZFlW\nefdx39nT5WrJt21kvMXeR8duQEo7Rzg+NTxZPlbqwNXOub++xsTI2dleWe5bR1fa4HnUys3U2tvq\na0lKTj89PUhHRVpn29TNw7+9x8PFzfFnZEtIR0xVWnHfz+BvucFVwsLLVu3JQlRFQ0E+QDVSSklt\nzsfdvL3AxMnK4t1iTFRJS1RXe2zOy83By8fW3nVXVkZKQUVHSU1M8Xnr3tHM28zP1t998mJmXWjt\n9t3czc3NynpVwL069r/eWkbFSUZNOU4/PjVLZj9cy8PRvrq/vsXPz9lfSk9fR0V7z2Lfv8nKz9bo\n51lESVRAO09RT1vi4NjG187H0vnq3GFPTlNWX1Ntytjfw8HU18tdTLfOOsLA6Ux5yjtYRjVGPzcz\nY2hC277Ew7m8wb3H69jdT0FNTkdXTOfN0dPNvdrp3X5iRUY/Rz88T2BxfczCwb/GwsXWY2VeQj9G\nTkRUf2vQyc7exMNZTq68Obi7w9N4wz/oPCs+Oi0qP0tF48PFtq+/vLS/ae/wSz5FR0BPVs3hxbXB\ntr7Ay+piPT45NDE3Oj5b8tXDuLu9uL/H2HleS0Y7PkpJUWPqysPOzL7ASd2p60+3v8VR51I8Zi0q\nOjotL01m9L29vq2xw8a6y09NR0I+Qj5e7W3Gwbe6t7nCu9tQQj41LjIwNT5JXc2/vLm3ur/E2GNa\nSD9BQ0JI7Nny1Ly+ysnI00LFrz7ct8XAX8tHRF8oLDkzLC9LUs+3x7uqr8HEuNVSTTs9RUg1RcDx\n4by2s7O40L3FRDo6PC01MjJOV1p+trm+ur/EzNpIUVNBPkRXT1/Z1M67vtXKx0direxMuLu62chf\nO+IxJi0xLSw6Rua0t8KuqbG/wcpuXj80O1Q+OFXRwcm5ureuxMzW40k1Ny00NDM4VMzuxLmyt7m/\n3MtqST1EQztKTmDdztfBu8TN0NNB369gZLm+vtDMSDt/LyctMS8vP0fbr7a/sKyzw8fvWnFDNTtb\nSj7lx+a8sr67tb/l1lM5OjguLz45PezP3L2yvr25ymHtXD1CSD5CWmF0ycbWwr3I2NZNSLHFScK+\ntMHD4zl6PyopLC4uOT1Hu666uK6ttL3aS2BhPDA/TkRW1c3Ss7bAt7vC2OhINzw1LjI5PE3e59C5\ntb69v9Tde0tASEw/Rlhf1snd1L291d/aSPOw1k++u73JxVQ4YjsqKy8uM0hKT7iuubiztb2/3EBL\nVD02P0lI3sPPxbm5t7m/0tniRzs2NjQ3OTtO69fOv7y8u8Te9elcREJGTGJoYdvLzM7Nzc7YZltM\nQMK9c8DKu7XA0TpOSTIvKy0zRkhF3Lu6uLW7vbq/41dPVkdFQT1W+tfZ1cS+trrNzNDWZUE7Mzw9\nOjlC7d3PzcO/v8bT3vHhV1NQUlpabm383dfTzd7b3+/dYVrHx9HA3szL1M8/Rzs7PjY3NEVRWX7d\nzsC8v8PHwcjO7HVeX+pSX1Ne+WzY58jIzs7a3V9XR0A9P0E8SU/31s3Kyb/BxM7Q1+PiW1BLT1JP\nUU9k/dnj3tTc19vV539d6c/qz/Tb0MzHa2VSUU9CPDc8QEhKUV/pycS+v8C9vcLL5vF0YF5BQu3Z\n4+3z39POV0JHSEhFRj5MbOzZ18vKvb7IxszM0dhlT1ROTk9JR03pc+nq+tbVzeR8dll10dnx29nO\ny8nWZW5dUExFPTs+QEVLUVZ908jJx8G/vb/IztfS2ObZ9u/+W1hNSUdARURDSUhZ/OfUzM7GzsnM\n6cdv0exy213RUN5eYfBI3UhiWFDmUdRf6txjzVbkdu3G2tHp2M7Mz9v8a21bVUVEPj9GSEpKUmPk\n0c3SycK9v8G/zcTQ3nNZVERFQT9BQ0pLV2vm5dPW1szZzd7nzXDLfPfRbMlq1PRp0kXaRlFUQ2JH\nX1Jd+2rT6eHg9sPMzM3WyM3F1d55aVVMST4+PUFETEpNWPrcysrIxMe8y77K1M1m0050V05fR1JJ\nVk9VVlJeX/j1cODc8Mj10sVlv/vmy1vO7+lobGdKe0dPUkZhTmb5Zdzw2e7u1+3Nxs7My9LJ1dfk\nUFtKRkk/PT9HTVhd+3zYxszKyc/Pzc/R3NzZ7fvjbFrdUld2TFhMW0RQZkfwW2rh0+XVyW/B1efG\n4tjP3+Bw/2JQXEhOT0ldVV1qcnvY5dbd5dHS3czH6s3N+dnjXmJVS1FESktAT09NbmD3+OjI4cbK\n78jSysvy0eh82vhZbHxMbmRKS1VPTWBWW+/ibdjSWMXibrp8arhnfbhL9Mg94mg53Eg74E5F6/RY\ny8plytdcxXFtu19rweTeyuRLaGZKTU1KQE9kTlptX3XdzdPUytrMyd/Lz2bM2k7P/0Lr9z1Tdz9K\naFpWWu3bc2fPynLTyMzc/MLOWNjJ60f430RKVVRERXBwV1jVz3Pvz+Nq7MrI5tDLzM/dzOBMSmNT\nRENMSENOZ+9PV9bP39zL09/hx8vW2NnR2s/wU9trSVtaT0VIVVxWUVrU7mvRz8/W3M/O2O1y2tFk\nauJvXFJYYVtIUPxqZlpe2Orq3/7h1dfjz8nO3ujZ2+BoYF9VWElJSkRJUlNp5X1169HM1t7Y187K\n0dDO3nnc2vRqWE9YVEpLRkpWTnnsYPHl4tXQ09bTz9LQ1djY3O7vbGZaS05NUVJNWWNrZffi3tfn\n8dnR1MzP2dbWz9Pk9V9QSExMREVITE9X6vVw4eXX0c3K2dbNzdTa1978fn18blRbWk9VVlBLUltc\nXm3mbvTSztPUzM7Qz9PY3Ol+aWdZU1NRUEtMXWNdaPfqa2zt49HPzc3NycjIz9ftYVJJR0dEREhM\nTVtpZ3Xt3dvPz8/Pz8zN0tfU2Ory8f1mWFxXTU5OTU1NT1hbbOfZ1NHT0c/Nz9PU29zl4ed2YFlX\nUFFNTk5QU1Rkd3523s/IxcjIxsjLzNfyaFZHQkFERUJHTlJaaHH219DP0dbX1M/Mys7T1t7e3fNv\nZlZPVlNOTU9WV1VVW2R04d7Z2OPY08/MztLc3+nwbmFjW1paWlVUW15WV1tt3dLJzM3Hys3U2Nnu\nW0tEQkNGSU9bY19iftrU1NTY29va29PP1Nvp+vru9m9uaGNeWl5gXFxXVVldXl589Pzs59rPzczP\n1Nnj7H1uYlxbV1daWVhWX+jYzMvLyMjJ0tvfaVFGPjw8PUBKVXnj2tPPycfGyc7S3/j78uPo/ndz\nbm52enhrXltcX19hbXZsY15hb/7w6uPf5d/Z19nZ3ud7aWpgXl5bW2RkVlrpzsXEysjJzM7c3uxX\nRjs2Nzc5PUVa8eTZzMG8u7q8v8nc9+7o7WZXUU5NTlhjcWVcW1tiY3Xp7nxgXXng2dbU1trn5tvV\n1+N4XVZTUFVcY2ZfXFlRW9jDurq+v8TJztjcfE48MS8wMjg9SWfv5NTGu7e2tbq/zOp56d3pXU9M\nSkpMXHl1XU1KTlNYafnubV5b/8/IxcjN09vc0szP4l1NSklMUlhbWUpBT9G7s7e6u7/I3eLdWj4v\nKiwuMjpFadvd1se3r6+yucHMbFJZbPRXSUlPZHvez8/dYU5SVE9LRUhKSU5f2cjJycfCv8TGy9pk\nS0ZGS0tJS09TSkRsvK6ss7y9vr/Z/28+LyUiKjE7Q0nsy8K8tKqorbfP6u9TSkVERTw7RW7EwcfL\n0tDpYF5YSjs0N0BTb+3Sy8bBvbi2usXealVHPz0/Pz5BR1JTZrurpai2vsK+wltFMygiHSEsOlVU\n6b2wqquppqy46UZGQDw0MDc9Tt3Asq+zu8bM3VI9Mi4tLTA7UtzKvrmzrq6vtb3OVUM9OTYzNTo/\nTFdz7HDErKKfq8XU1MDdPjAkIR4fLD7k1fG+rqShqa26zWA5NjU1Mi00S8q1sKyqrLC9zW0+Lygm\nKCsvNkXZu7Curayus7vJ4lE9NTExNTtIVnbi0cvXxKyjoK14T13AzDYqHyAkJTE+5cXKs6mgn63B\nfF35QDMrKi82S825s7avqKKmvkAuMC8sJiIoLT1uu6ysrri2ray08Dw5Oj88Njc0P1TNub7XT76j\nnJ27PzhHv08uHxofIS5Mzbi+t6ufnaO7Rjg9QzUqJygzUciuqqqsrqelrOUsJCcsLignKznfv66q\nrLG/vLe2xEMzNUFUQzUzOmzHwMF1SL6imputZTxC3jkqHBgaHCxrsK6uqaGanKXNNSonJyQnJy0+\nwaaenaCpsa+25jIhHh8nMDs+R+rBr6yss8r1eNnO5kk8O03Uzmw/OUNc2t46PqadmpeltDwrOSYd\nGREUHC6popyXnJugp7UzIRsXHCMuYsiqn5yZnaW2TDgsJiciJiw928u9vMO+wcbPbmFLTWr32NbX\n3N7O20c5NDhFafo7uZ6flJemtygpHRcfFBYaHuOpl5KVl6C03zUlHxsbHSRIv6ObmZieprw/Misn\nIiMnLT/Zvr66vce+wcjZUUI8SWPuzcvPz87V7Fc+NzY+YN9qtaOlmJmprzQlHRgfGB0lIE+8pJqZ\nmJ+pvjosKCAkKykzTsaupJufo6jjTjsuLSkpJys7PmO8u7Svu77H3HFPX05Kck1q2PrR41VGP0dH\n6tbPra6mnaintjYvHh0eHCYiLEpPraWinqWqudJeNzs2Ljc2OUx3v7Ovqq+ytM/dUDo7LyoqKS81\nSsu9r62ur7W4wN9PQTw5ODk/REpTTGHPvr61rK6mpq6ryTsxHh4eHiYmM0Ffsa6knqOlrsNfPjcu\nLjEvNkVnv6+tqamur75uRjUvLCopKS41RdG9sKutra+5v99XRzs7Nzg+PUZKSW7Ywb+zq62hpaun\n5kw0HR8bHCEhMT3dr62fnqGfrb1vNi8pJyosNkz3t62po6eprcDrPC0pJiYnKjE7ZMq6raysrbW8\nx+xUQTs6OTo8P0RHT3HXy7usrKKdpaGzTEMgHhwYHh0lND63raGbnZuitMs2LCkkKCksN0zGrqSf\nnqKpueY8LCYiIiQpLzxYzLmvqqmssb/Xb05KRT4+PUBBQkREUXzOxrWpq5+eqKXEOjEfHR0aHh8k\nN1Swop2Zm5+ozUcxKCsmKCwpM227o5ybnKaz7TwxKSckIiQoMErPt6+trLCyvMnUXVFHQ0JCSEtG\nRD8/UOjCv6+mq6CirK7KOyojHB0dHCMnOMWuoJudn6a2y1w3LywmJyctPciro52eo6y52z81KiQi\nIyUuPl/Fu7Wxra+yvuBYR01NWFVLRUI/REpQ6dXBx7+pqqOhrbRqPS0pJRweGx4qRr6toaOhn6es\numE2KikkKSwtP9quo5udo6rA6kI2JiIfHyg0TOrAvrKrqa235ENHSmxaVD49TnLreFFIXM65yNyv\nraufr7zTTTwoKRsbHiEuPMvAqZ+dnae2y3R0Oy8jHyctc76zraafoqOw10U4LiknIiQqM03OvLiv\nra+wvtL5X1dDQD08S0xMUUxny7u4u79ta6iturM/esXFPyYqHyw3LCs60M2trLytqK22wFIySTst\nNTQ/67a3ua6ytK+6a1E/Ly8vKi03O0HszcWzsri1tLrBylE/Qzo0MzdAWs/PvrO2tcVWsarvz05P\nx9pQKkFFMjgsLzjqPzbAubWvuL61qs9N30tVTz8zP+BS8dPbvrO7yr7EfFc+MjM4Ly48R/XFwbyv\nq7C4wvZaSzw2OD4+SF9iyMLBvsX+u61D3sTrwdzHS87lLjk1LyowLy/r+FrBrq6wqK+0rMR1TUg0\nMT80PEpPeMK9z7y6zMzKUzw+Ojc/PTpUztbHuLy8t73Ext1JSk45OT5CWG9na9diQ7i0R7u1trS4\ntuq5bjdENCghKycoPDxNwq+vqaGurqy5zG1LMjxJLzVMR0fc0O2/wtnDwmRa5Ew9TUQ5SUtP1sTR\nzLe7wb/H3eh4TlNMPj9DPT5KT0BRtM7eqq6sra20y8c7PUAoJCctJi5JQt7Gv7uvr72utMjBwdtX\n1FNAbU9ASllESm9QfMvWfdTRZfP2SEtcTExrdFvP0efKwMXIx9pna1VIST9FSEpNWVjKtlm8q7u6\nvrXI1OY9Uj0vLzovKDs+OUzbxse5vbmruLu3u9bgz0VKRT0/QUtMZ2Rd18na1Mne4eZvUE5GQ1BU\nWPzV2tPOy8zW1evuXFFfVFRvY2V8YHZMeLpdWLO7wsC2utHKTkpJMi0yNisxTEFL2sjKv7vBtbnL\nw77GbNzoTFlXWU1ZVmHU+ufVyun851FNSktGR0lMYnv+29XO1c7Iz8rP0tTf/1xbVlBPVlZXYmj9\nddnN39TIx8rTy9Pm6lheTkhBREU6P0ZKTVN99c/J1snHxcfNyMrP09TN1+bj4WxXWFFYTE5KT05J\nTU5TTFx45d3Wz87Jzs7R1N/c42/39ebw+n3rfWZbUU5KTE1PSFTU1dbPxLzDv7+/wd37YGBHPD03\nODc6PUBWYOzOw7++vcHCxM3d1Mvc5tTk7eX8b1taT0lKRUNDRkVHUllkedzQzsbExMHBwMHEz93e\naVpNQ0FCQ0FFTVReb21y2s7UyszFwsfFzcfP8l1YU0dEPkBDR0hHU2B1bN7P2NPNztLNyszExszN\n0tzv4lxWV1BLSExGTE9OTU9UVWNo79rMysnDxMTLzMzW43l2XFRRTEtKS1BYWlZbYWrb1ODWz8/M\nycnNzc3f6PJVTk5JQUdJSEtaY2Pq6Ovj2+nw9+7x49TVzsvGyMjL0tfqe1pPSUVBQEBCSExcXv3m\n29DPycvJyMjJzc3b5+1uXlNRTk5PTU5RWFpbcfJwcebQ1tvNy8bKzc7R0uFxXlZMSUpIS0xMTEtW\nV1Nk7dja18/SyMPExsfIzc7X5P5nVU1LRkZGRUVJT1ZfZP7u39nXzczLzcvLzdDW2elvaF9WUk9O\nTk1LSk1ZZmn118nNzMLCw8fGzNfkWFVORz9ARUNGS1BWX2n97ejW0NHOy83RzsrM0M3P2OP4/WpZ\nS0tKRERHRkZNUV/q2M/KxsjIyM3W3eHu+25obWpbXmBWV2NkUFTc5VjXzNnNzMjKy9lx3V1HSko9\nOkVDRFJbct3Q1svF1dLEzdvL0+7d23ds3+JacOdkbXNkYFxOUlxMR1RcTlzp7/Pc19fS19TU4OPY\n327q7mt6XlddSVm+W1S2xsbCur/tylNWSjY4OzctPkw5SNzP2MO7v7jAxLnJ3N3NWFHiTlZUUlhV\nSEnJdkbKwmnywOBf711dWEtKb1BE6dxWfMzX7tHR3tz69tdrVeN0TV31X0psv/lwuL/DxL7A691X\nW0I3PTk0MEJHO0/h2ezKvcW/wby9zcnHzGPj009bbF5HRmlSSGPcXGfV9PX2+fFcWl5uU07p81zu\nzt/5zM3p2tnf9mBwZlJQWV5VVHDL2ui8vsa/usDd0fJURT49ODQ0PT07SWddYM7IzcG9vb+/v8TJ\n2NfV+V58XkhNTF1TSentWmfeX052YVVTW2FeZm3a3evOzNPQytPn295rXV1PTlFOVFlZbljeul3G\nruK+ur7U5cVFVUE8PTM4NkU5QP5LXebF1s+5xsG/xcPPy87O1vfT/1RTd19BbutLVd9eRFtVRkpU\nV1BqZfDc3szKzc/KzdvQ2Ojf42lfWk1LSlJWV0/Jyke0vfm4vb9qw9lGZjxEODk4O0U2WFlNbtjN\n/7+/y7u/v8THx9fR3+h4WlhrW0l1dExa6lVIZFZGTWVXTGtvY3Hn1d7VycjQzsXV3M/WbGHrTUlU\nTkhLUk3O+GC5ydC9u83jvu1SYU5APEE7Pz8+Tk5RX9jhfMXG0MXEyM3JzdjO5tPc/9R+aG98XVZp\nTU1MSEhJTUhPU1ZsauDYzs/OxdDKxsrT1M3obXFfS0xTTk9TTm7RVti+0c7BvOHZxl5SUVE+P0M7\nQ0FFTVxfXNDW5MXGycnDwdLLztDafNXv+XZ04l1zfGdST11GR0xIRUdQTV5sd97c0NDKy8vHysvP\nz9fi+G9bS09QS0tZV0zQ117Fv8fSwr1u59RoSUNPPzw+QkhETVl0cPfU0c/SzMXJy83JzuPO0N7h\n3tTx6vpfZFJTTUtGR0xCRk1NTVj+dOLUy8jJv8HGxcbO5NrkXmNdUUtMT0lLUlpeX97Y2tLNzc3K\nzNbf5GlYVU5LSkxNTVhZWmhmbn7u6e3h6Png39zX2dHU0czMzs/L1+3rclhNUEpCRkhHR09UVGPz\n3+bSys3KycbN0M3X63ptXlhbWVFQT09XWlx+9P/t6+Tk19TRztHP09TV1dbh5HxdUk9JR0hDQ0NK\nSUtWXH72287NyMO/wsK/xMnMzdt1a1lOSUhHQkRHR0ZLUldq5trRzsvKzMnLzM3X3OTwa2BgXFta\nWVhXVllZVldYX27159zS09DMzM3My8/W3etlXFFKSEVGRUZKTFBWY3rv2c/MzMvIyMfGyMvO0+F+\nal5TTk9LSEhISUpSWl5qe/Pu3dTV1M/MzM/Q0tnc4Oj9cG1gWVdXWFZRU1hYWFteZnzj29bPzc3L\nycvO0tx9ZlxTTktMSEdJTE5PX2176NzY1s/Pzs/Pzs7S1Nrf4Ob4bmddWVNPTk5PT1FSV19pe/Xf\n2dfQz8/R0tTZ297uf21nX1tWVVNOUVpaXm378Onf49rW1NHQzs/Q0dLZ4/hlWVFPTUtLS0tOUFZc\nYm547t/c1NPSzs/Qzs7R1tjh8f1zb2BbWVRPTk9PUFZWXGBy6+Ta1M/Nzs/P0Nfg6XZkZGNcWVlV\nVVZYWV1sdfbn4ubi29na2NLQ0tTZ4e98a19XVFNRUE5SVFddZWhq//Ln3uDc3NnV0s/R0tbY3efl\n8W1fWlhTUU9PUVRYWFhfZXXr3dfX1dPSz9DY2dnd4ep3Zl5cXFdYXFxaW1tbX2hv/uje29jT0tLT\n1tri7X1pXlxbW1pYWFVVVVhcYGxy+ebe19PUz87O0dLX4eXm8XBnXldVU1FQUVdaXmBkbf/v5t/f\n3Nra1dPY1tbe6/h+a2FeXFxcXFxcXWJpaGtw++3j3t3X19jU1Nfb3ef6b2pjWlRPTk1OU1dZXWdv\nfung3NjX1tbT09PW2dne5/f+dGdgWVJTVVZVVlVWXGFv9+Te2dbY1dTV1dXX3uTk6ntrZV1aWlpb\nWltdXV9kbP/p49/b2tbW19rb3ejzeGZgX1tYV1ZXWVtaW15lb/Xs6+fh29bR0dLS0tTa3eLvdWdf\nW1lWVFNSVVdaXF1hb/zu4NrV1NLW2drb3+v3+313bWtoX1pWWFpcYG339O/r6eLc19fa3t3e4+r0\nfG5jX15aXF1fXVtaWFpfaHHv5uXg3tvY2drY19bZ3eLu+3lva2RfXFpZWFZWV1xfZGv5593Z19bZ\n2NjY2t7k5+/5d2hkXVpeYV9fXl9hZG52fH757Ofh3dnZ2tba3uTu/m1kYV1ZV1ZXWFtdZWlub33u\n4t3b1tbY2tnb4Obvend8dmtmY11dY2ZjX2RnZGpvcfnt8Ozo493c4OHj5+fk4+32fHFrY2ZgYGJj\nZWRqb3r06+Lj4N7d3uPp7e/3fXVuaWNjXk5izPpTWFh0fW9kafDd195v0MNnUsy4y0tLT8/ISzM5\n5c1QPkVqycn2V+S+yFlV1MHPcmNOZL67alK7ssHY19l3XUItLTo2Kyo4UW3dzb2uqa65trC3zVdK\nVV09LjdSWkJCadjN6Fv30NpOSFVfXEZJ7snN8cK2ubvI09q/zSYgpJ8j5q2ppGq6Lr62FRsiLR4c\nLDqmpLixl5aqtr+4/C4gHjY7JSzOrqmvtqubpUVkxlApICAmMispVq60uq6npK/YTNRhKykvOT0/\nPl6ts9C0TjeVlym1n6avMTkiSCgMGCcnJTZWqZCXsaCWqGIxJCEsHhovy6+yoJ6cmrXru9MkGiAl\nJiYlOba11bioqbPhbMK8SjFM3lJGSXfE2lZXXc7GJh+SjzuxoZ6iSyURKi0NDhw9yK2rno2MpV3F\nzCgYERYqNDxeopKTl6OlrEkvHBogIScsSb66s7S2r7nyYFlRQEZhSnfgX+3g5FZFSEZL3F4iQ4iR\nw5mnmqojEAgcFgoRIbaUk5yUio/WIRsZGxUQHLicmZuWkpaiMB0aIykZIUqupq7O37npLiUzU+vf\nXMCrpbtp19LZPDEyWdYvLsw5I4+JuJiaraM3GgULHQ0VL1mbjI+bmZO9HRYPFB8tLcKXjpGcorlq\nLhcSHcW/w6qpoqVYHx4sLiApSr+kqb+8p6pjNDFDWkFAZ9lb1/UcIYmKwZetuZ9GGAIKJhch2Uyb\njZKezq83Gx8VGj6uoKCcl52qyiUdHBsruKCmp6Kx1jUgHR4qODXsuLWss8K+ucI8N0JN4NS/x0ZB\nOBkeiomzlK5OomwmBQUjHDmiVqmTk5TNLh8RICMlRsKblJeatEHrMSQbFm2emqDIy/pQMRwcLEhr\naO26s7O808O9v0g1P2/Oz7lPKi4tHs6Hk6aPzsd2JSMGCx8Yr5uvn6qclvY4FQ4oNcPDy5qZm5lr\nLi0eKB48nqidosf2Mi8hHys2SMvOYr+/u8LNwsfDVDs9Z8W8yD8sKScjoIqamphewVwrGAkOGiO1\nnainoKKerT8aDxc1uLOrrqqbmq00IBwkP7GlsKitvMs7KhwiLjzmT03kvbC1yMu0sL89Mj9P2s3f\nPDk6LCs2mY+ck6VpcCw4FQ8VDyK+o56op5yYnMAbEhEfTWa1tqmcmZy5LCEpSbW+1ks0aO7SSzA6\nQe1SOTs/7rq3sq+wsN9OSztETn0/MDs7QS82mpSZkafYRTA6GBYRDBgwsKOdl5OSl6ooFRASHC7U\ntKufmpmcq1szMDA7LyguN3zEvL/vZUxIPzxOVs+ysre3vMzkbUdBW09EQTg5QeXExLaurr1ewrfZ\nSCogHylp4b2xrqurq841KCInPc3PxcK6rbG7Wj0/RMjG1t1Z1M/PWzYxMj9cX9PAvLK2xd1PQzpB\nWGHMxMnR3H5MTVlLT9vIvcDKzvDaWjgsJy5D1Luxrq6utM1ANC47X+7qSkvVvsPIzGzq0dVTP0RB\nT1xOS0HYzMK6urXDzFhGRjg3P9zGz7/P08tvSjg9XFXO5ErGusLbVGFVVVM/QPXIwr2/vdtvW0pO\nT05n7MPsRUVNW3HmXNfAycfsaWRoUD9DPV/Pvbi5uMrTaUQ9Nzo7Su/Xy8rs1c/fdkn669LA1NPO\n02A/QD9JVPNu5MDEvLnVX0BLQ0dGSkvpvsLM8uLeTuZZW8rL0F7X4EhMPztBT9LLurS7y8xyTks7\nPkli1/zP0c/QZF1HVvtg/NfN0tTc+0dKSEFU4vDhysS9tsFxVUVKT0pOU1/Jzt1fZF1cTlxrXcPF\nz9z82kxSTjlNX8a/wb3P3NdfT0RGQ0/cz9/c6NvnbmBEbOHPydhtaebfWlZJXFHz8PTd49rN09pk\nXWtfdnfd6Nzha2ZYXm9NSmdw0MLJ2/FeWnleWzxU+/TK1tfezcze+EDwUmrIbPnsWO9c21ZkztzO\n0uhdUVRJRERYc9PGztPW79RoVlZX2HvP5eXMdOhsWlNW92T3Z1d56NJsfF5b1HLPWmDyU+TaXOZ4\n2N7c4dto7+JQ+U5U5z/QQNrSzb7P1e5gVEdHSlfc3cbQ1c5g0kdfSEnp4cbN1+Dc5N1PTEZ8VODa\nWMdR0ORR3ENn+8/e4+tZ73HlWfZl7t/tzW/Z1u9+U2NSVF1H+lzextvAYNbkWtxOV1tV13fPbWxd\n/m9V7FnY1+LKTchaUOZBaHda08zj2OBn2mVd803e2P7NX1h1SuxM+OZjxPzM3mjbSONIbF5az13F\nePnIXdxrRGluZ8pib8xj2c5L6UlOaFZ/3dXOx9Pc4EfwS03uROrS98vW69BgYeJOaeNY6eFq3GlL\n409y3FnY2NvL7OhqZWVVWVd569nZ7u/eaWl8Wnd27s9f5+Zd629WW1Jb4d3czdnJye76UUtWTlRb\nX3Xc29bW4vh4bG3m7/3zdHL0W2JcaHf+3fnf3f7c+XDpXWHjWO5489jn3nbten5nWXR+3dvyfWxp\ncVpaWF1799zl3Nba125sYFvuX/X6Z+5qdnN18fXt3+vV4d5+ZW5aamFfanvs3/3l+G1qX2vycOn5\nfOjh5+54dGhqa3df7ODa2OL1cV949l1uYWr+7vLm7ezwevNtaPPv/u/+auxodGRy6W7Y4efr6PFo\neltPcuJQW+XZ9+Lie9t8YVbn2/Tmfd7W329fWPF+W1n51t/xcOzjfVtacH9kXnzm3exwaed3d2n4\n6PTtbeTs4mhefG9sZ/Xu4uN75+VvX1Vn93n7ZPTf19xu7H1lWldz6Nj64M7m3v1XXu5dUuzq7t/1\n//HrambfZ1V2X2ty42tv6O32XuTPwsZiW1he3/NDSVtP4s1s0M9Q0svqzl5GZFVi3WpjW1/WyfJY\n8O7ez9ntdVZkW1X3aE5sZXvL19/f/e/i1uJZVvB6bupqWPpwW9hwVWv1z9hn+Fzt011OVF3a1Nff\nXWz2d+HbdV9j6uXl3nze1/JeWVJObtbc/2tfZ/Hm4/d6cf3s7d3cf2ZfaW174dvya1tf/uDc8mNd\nXu7n/Hpl8eXj6GhfbXjb3fp3aPzk7u3xbV9faund3eZmUFdn6trsX1163dDW3P9fYV1fYVpj/Obb\n2uf9/Ojf6H9eW2Bs9d7Z2/1hZ2zf3v50Xmz76ez5ZlpeZXLx7+7l8Pt++/bs8uvuc311dHT37v54\naGZpdO/b3t3kdGtqamlcY29xfX7v7Onl+vT88OLr5ejl5vZ6cWFbVllfZnby6d3i6OXud3BwaGZx\neft7fvj68Orp5+zw+Xt1YWlndPx7e3Lu6eDe29ri82NbVlhgZm316/Hu+Pv68OrpfXBwdXZvbmZl\nZGp3fe/s5Nrd2tzc5fppWVdYW2/n2s7Fv7/Dydt5WUtAPDs6Oz5FTlhv4tLLxcXGx8nN2vRnXF1o\nfP7v6+rs5N/r7v5uYFtZU09PUWvcyr+5tLS1ucTYTj40Li0sLS82Pk160ca+urq6ubq8v8bN3P5a\nTU1MT09SWF91/O7s8vhzaV1WVVNXW2J749TMx8bFx8zQ3f1eT0dEQDs9RVDexbewr660vM5bRDYw\nLSwtLjU+VOHKv7u2tLO0trm9xt1hTEE+PT5FT2rf0MzLzdfoYFJLRUJAQERLUF/o1MrEwL6/wcfO\n221RRT89PD5KX9m8saupqq23xVo8LykmJCYpLThG8cm7tbGurq6vs7e/zl9GOzU2Nz1HWt7NxsTG\ny91wUkY/PTw+RExe48zDvbm4uLq9wc57Tj86NTQ1OD5DVc++sayop6utudFNNCwmJCQmKi48TtK+\nta6sq6ytsbnF7Ew8NjMyNz5N68m9ubi6v8rjVkU8NzQ0NjtDUe7KvLezsbO3vcfqTT84NTQ2PENQ\netzTwLezrKqqrLbBUzouJyUjJicrND75wLCqpqSmqbC+cj40LSwuMjxFZ9HAtrCtrK60w2Q7Liop\nKy42QVjdyLy1r62usbvUTjszLzA1PEhc6NPIv7/Ctq2uqq2zwlFHMy8uKSkkJSUqO+SvpZ+fpKy9\n1U1JPzgzLCstN2y6qqWlqK++3FtLPjcuKCYoLTl2vbKurrC1trrAz1o+My8uMDpFWejJvbm0srbJ\nT37Nzra1usZaYT48Pi8sJygrMmHCsq2srrO2vMtXOy4oKjNNxbOur7CvsrS3x1U2LSkqLzQ8Rlvd\nyLi1tbm/xNDWZkc+ODk9TW3r3NjPyL69v8ftTTcuRMLAtbS1sbOru0kzIyEhKC8sM0bCq6Gep7bL\nfkw+OiwoLD3bu66vsqupq7xZNikrNDo9PD5I3bi0u8PU7+vT30k8PD5M8tTY5djX1MnHy950XUhF\nQDsyN7GpraetqK+ztDQnJB8fHiEnLs2po6Gko6qyvUQqJyorLjlJb7eop6eprsJ5RzMqLTM2P1rU\ny723wMrP01xMTUU/RlVZY9DG0t3hdH7d2mBDTWrx2W5XRG+lqbuusqm4fVYnKSghHRwqPXO6q6Sf\nnqKz2FU5KyUnKDBI476xp6anqrLHQj42Ky43SUxg+PHGwchzWm9oXlNZX15mXVd33+1aeNrNx87b\nYezj3/xXXD+8ptrJsa6pX/FNLjEfHiAkOTtHtaWfqaums75bMissLScrPs6+sqyppqixxlQ2OTsu\nLztKTnrb3MS/y3jR8U1PS0xT/VVT3tPkeuHYzcnRYfHQeFRQXFA/u65OtaqtsvW6TjczHyAkKCgu\nZrqtpaampq2/T0QyKiYoLzdhxLerpKOorblcO0UvJyw2ODxs6tW/vczLxu5tbFhHVFlHXuhpU+/U\n18jI19fFxftNVF08O6+7QK6srb/AsDg5LyMlJSgmNtDDsaanqayvxUg/My4sMDY+3cy5qqmrrrLB\n+lo8LjA3MjdGUV1s1c7Gx9LP0vtdbGhdV15VWW7z0s7Mzs/aydFOSU5OOTO2rjmzpa6uyq5MPD8g\nKSkmIi7nccKvqqmoq7nE0EM2MDIzMUdI27e5sLKtttbL6FQ/PTs6QT89R3NaV/7P1NHEzc3N2O3r\n+11LUVtb7fbmZPfYYuHY519pz/JOxrncx7y6wdTLQj1EOjMvOTc+S1hr3MXJysbDwtDPyNvZ/PzY\n6tpm/eJZXVxgdn3w7+XdaWDrbk9RW1lRWfJu5djMyc/K2N/jaVlKSEZKVVdffOzXzszL0tbg6/lv\nV0tSTlVp49fVyMTHysrM1+V4V0xKR0pFR1RWW1psbGN3ZmVs7u187eLX08zIy8nKzNHpeHVhU09W\nUFBbbF9XaWdob2xpXGJy9erg29fP0NPazszX9GdsX1VUWVRea1xfWWxlXnFo39jOy8/R9NnA0+72\nUllLQzo4RkVPTVFn1r+/vbu6ubzG1OB891RHQD9ISU5JUunc3d/qZHRvV0tUa2Vbbd/OxcvIy8XC\n6ut2ZFZLV05MU1tfWF1qat3k98fMycbIws/J3lRVTEg8PUE9Q09OXeHLzNvQ0tHOz+Hh2eb5/9Hz\ne+Rg483Ta37P4mJaS0pOSz0+UmJeXOLTx8nkz8LC2Gh87uxXSVxvXF9ReNJWS7yy3suzscDQxlNL\nPysoLzIqLEP2zru1sauqtb69xU86Pjk2OT1GZcnKzrq2v8nO6E72fj5CWFJDT2Zf59z43MDKbevS\nZE9PQkBHSkpf1M7Lwb+/xMrV6fBSNz619jTBtLTdxLBq0EQzOzgzJjdKPEj3vsa5try0uL7s08tC\nRUVGRURtUnTqdtTMzvq6tubmyM9JRkM7Qz87QtXeVsu8w87GzvThWkRPU0hIVvx72tTMws/Pxsxn\nTc/QSF3d0+Xn0+vP3VVVb1I6PD89Oj9KS2Xh0cK7ub65t8LNzc9eUk9BQ0lESHPd8NvM3vzieFNU\nW1VRXVtp5+Xh2N3Yz8/Q0dbp7epnT1NWS0xXYXD97+HR1N/Z2WNg6mVuVW3LzM7pyb3Mb2HdV0A5\nPUU6OT5TXVrm18nCv76/vL/FyMvV3uJrX1NHR0c8O1dgSUZkz9PvZuDR42rm3ezz3M3Lx87Vy8/s\nX1VOSUhMTlFQVmz88v/t1NTl3NLX1dnQ1drW3Nro7m1cVU9OSUhGSUhLTUxfZv/n2cvLxMTCv8LE\nzNjleVhOU09OT1NOTFldW2h5+X7n5Hzv6vLy5Nnd2dLW19nd83D8Z1dUV1dUVlJVX2xmb+Lf497c\n3d3Y3drS0tTV0tfb2uVhV1ZORkNFREVITVdffvTdz8nIysjHycvO0tbidl9cVU9LTlNVXFheYmRt\nbn1o8t/e2NvW1dXP1NLW2tzr/mJYTkpNS0pNVFhe/fft4d3a1s3Nzs7P1Nvd5fl0aWNeXFROT1JQ\nVltbYGdrZ/rq9+3m3+PZztLT0M3P1Njm83deT09YT0tOVVpfZW5x5t/t4t7h7uPV1tTT2Nnc5nlr\nalhUV1pUT1paW2Vy9ebY2tzT0dje3Od3bW9pYWlsbHV/7+vn6n/7bGBdXF1YVldlffXs49nY2t3a\n1tnf4+jzcV9dW1VSW2NlaW57c2xz7+vu5NbS2d3c2dvl7fv4dWdmYV5WU1dZWV1o/O3q3trY3ufi\n4ux0bnJuaWr57+zt7ebj5fRsZmRkY11eYWBodvv88Onn39va2+Dg3+LycGlgXFdaYmVsbHr2ef3z\n7uvq7vTn5+zp7e317Oz27/prYWdua2hfTXjI4F5PbNjoXk9o5+Nia9nPzeTczcrTdlxq7/pVTVNX\nV09PX3pcV9vM1Glc383Tblp13eNvavPc3/J68exyXl9u/XtmZWlp9uzs7vvy5dne9/7o42ZdW2n3\nenz+7fn7bl7dzu3j0szO29X4fvVORUZMRkJJSk9bbP3hz8vIyMfGycnR3d9wZFhYWE9VT1NbaG9j\ndPX28XdoXuvkamzk1tvb/OvP1npcfP9+fVVXaXhiaej5ysLfyL+/xdfLX1JPOTY2NzY0PUBK+dbI\nv7e2uLO4vsbQ1npcT0xNSk1MVl5fal9qWlVXTU9OT1JYfO3ez83Ewb/Bys3d6/JuUkdKTEdIPjHG\np9zMrqynuLTvOdkuICAiKCUqOkq4q6+opJ+lsLbeSkIxJykvMjVGyresqaqpqrLJSDUsJiUiJi07\nWM23raimqrC3wOFFNC4tMDc6OUHWv7lUW5WayaOyqKlVWRkiLBUYFxw0R8GuoZWZnJ6wrd0tJBsd\nHykxOruln52cnaKqxTcmIh4bHB4pPN27rqaioqqxucNPOTMvLzE6Nz3dvsLIuLm/W8uWom+ozbG5\nNDQUHSYWHBwswLCfnJ2XnKq8NjYjHCAbITrgqqGcmZyboL5IKCAdGx4fKj9utrCppqusus9XPEE6\nNTo+ZuLt211txrvETU3bzFa3lqW5pcW6PywiDxkdGiUvwaeclJadn7Q9Kx0cFxssL86mnZiWlJ+8\nzz0kHBkZHi/s0r6qq6iuvvA8SzwvNTp5zb+4wri7zlc3PT1GYD0/5r7Lno+pq65azyAnFgwhHytM\nvaCdlZWftN0qHRsaHh4/squbmZmdo6lJJR8cHyowP+ato6q12j8+OTIuK0Hqzbi3rq+xtt1SPTQv\nKy8/zL3jyLW7sZKWvrM/OC0hKA4UKCzTvKupnpebrUkuHh8hJSsvs6efmp6mucNJKikqIy3bvbWy\nrrzibjEoKS45R9i9uLGurrO90E08MS8yLTBH2ba3squ5scM+oZ3Jyi4tOjDvHhkmKN+6s7S4qJ+l\nvDsgISg4TTdnvaudn6m9dF46OTspJzjOr7K10UTeYj0xLjhGwbvKz8a7tbjLRjY8Ojo7PVnVt660\nsre+zDwlIbOmx6vWyLisqCEaGhkoSclexKSanJ/BJiEjLy0tQ0yvnJierL47Ky8uIx8oPrSfnq3C\nzHdNNiwiJ0bfvbq2rrGttlc9MC80OU1KW724sa/C9lE9MiQlsKClmqaussDQHBYUEh89tK6kn5yb\noLgiGhgcKzy/uaiamZylxysfHycqLDtesaKfprx2PC4xKygsPMi3rKuvt8bKXEA1LTI7R/PLv7mz\nsL9TNjA2NzosV5mYmJiz2S8sKBIUFBg4rZmZnJ2hq74rFxIUI0Oxnp+cmp2kwjAcFRklPMizr6ed\nm6PFNB8dIio1PVjKr6Sjqb5JOTQ2MC8yNVK7rqyxvNpS91U/NzE6OeqcmZ6bsU8uJiwYGRwaNLSd\nm52hssnXOiAbGiE/rJyeoaeutsw9HxodJliro6isrKqtukUiHB8nOdm9vLWsqa+4dy8oKC82Stbb\nwbKrq6+/PzU1Mjo9REhRfKuVmJmhPSocHx4WHRsnup6UlZqobzorHhwaHS/LnpmZmqe7RjAoICIl\nLfusoJyhsls4PjEuKyYqPb6sp67JT1jiX1Q+Mzddxr+6w2lT8dXc5eJRREZVbWnLy1ncop+lpE0r\nIiU3JzEtJkG6pKCisFw2Ly0pMC89zq6goaGr4EMzLzEzPj9MxLauqbXxMig1P3DaPkJF2rWyr85Q\nVD5V9V1BNlXjvq2zx0ZGPz5dSTUuO9m5rKy94q2iq6rDLSUjLy0zSSwwWr+up6jASjwyLjlCPl3H\nr66qqcHcSzw3M0hJW7+7urq9xlA4LCgzRsy3ubnFzdnn1lpAPUBQzL/M3GJMQ0VTSVr1dM/Cu8Zd\nWExNanFhYOmuoqWhsUc1JSYkJCspPMa1qKWque8/LSgvMz/Mu6+rqq6/zWU+Pzs5P1DVycPKY01K\nVFRLQU7dv7C0uuo5NTRQ2sW94e5u+t1cTTczNz7evLGwt77+SD04QFRe4dXS2beip6esQjQoJiwp\nOy4vVE+9ramrsL5ELiwtL2TDu6+urLGxuN5JLyglKzlSxr3DysC9wcDPPTAwNVK+rK2wuM5iWFtI\nRD40MjM9VNi8u7y9ycXdb1g7NS85S2u9tK+vs8RXxrzCs75YPC0uKjFCMDxCO3DEsqyrqbprSjAx\nP0vS0cbJ4L7Avr9ePy8tMTlc2Ma4urm71WpTR0dCSFjMsayqrsNKLykoLDZBT1pe1cG2rrK/cj02\nNkNg88/Pz8G/ubrGz0xAOjRE4sOwrbW8Yz4vKi0qMz5PybmsqaapuG81KiYrLz7hxrm5trW5ucl8\nRjUuLjNB3Lyvrq+6+lJFRWb0f1dMT1TXxszZVD47Pkxg3czKysjU4eHl19Z4STw3OEXmxr24u77G\n03ZEPUNL+rm2tLbSYjs1Lys1OkvPvbizr7S5x2Y3LiwpNEbWurGut7rB2m1KOzU0OEL7vbSvr73Z\nUj9DTVZob2JQTVtzzcHAyvNOP0FIUvHq4/ZlZvrQy8zVVUFAQU/cwr2/v8zj+2NVVFpPWm3axrq0\nu8VeOS8sLjM+Zci4tbW4v87kUTw1MDE6TNC8sa2vtcDkSz48OjxCSU9v3c/Dv726vcXeTD87Pklk\n1c/Q0eRvaF9PSkZBQk9w2cO/wsfZ+VVRUk5o69rN0NfqdPLizMvd5mBYcG3a1t7eVE1EPkdKX+Hd\n3uHx7uXh0uHqaEpLRkxg5MfFwr7Exs3nXEQ9OjpBTPvNw7u7vL/I2WRRSEBBSE9v2M7R2+ddVE9J\nS0tRZ+3R0M7P3OJuXV1WYW723tfJxcXI135bUE5SXmVQTnHsyr2+vcjtSjw4NzpIXe3My8zN2N/l\nfGRQTk9S8tXMxMjN2mdSSEdPXNvMyMTO2uLq5un0Z1RPTktSWltt+Ojt9u1pafPm3+12amNmfe3f\n08zKzdX7U0xMTVdj9d/Y0+BpV09QWP3WysDCwsbO315KPjo7PkVSedXHwL7Bzv5PRUNIUmL239zT\nzs7N0tz+XFVOTlr40sjEydbvW09PT09SUFJf8c/IyMvb9l9PTEtNWHjf1M3Iy9LfaFNKRkdLVWne\nz8vMztLc7WFRUFdm+d3PycfK0eZnVk5KSk5VXW3s4t7d5nliXlhaZ2plZXL24NLO0Nbd8XRpaV9p\ne3d+efjr6d7e4+l8b2ZeZGBo+fDj5eLpb2RbWV1q8uHb3d3k/GRdXl9ibPbl4eHi5Obr8HFmXllX\nXW/j19PQ0Nfpa1xWVllicvXn5N3c4fFyZ1lZY2Bm+/p1bnT17eDe5uPu/3dtdWz86u/n5e53X19g\nX2lsd+7i2dfc7GxiX2x+evl+e/L67OTn5vRvYVtdXV9t79vV1trudGVcX2Zsamv/8Ovf4Ov4bmNe\nZXPv5ujo5enn4uXua2RfX2xwevzq5Ov2dWtv/vP3+Pd+fHz48/52bWRsdvj0+fX26+bn72tfWlxl\nZ2x6//Pt7eLe3t7n5OPl5O9vZmNscnX7/Pnu8HBkX11fbHzx5ur2eW9ybW/77+ne4Ojs+PV5bGxu\ncG5t+/Lq4fD6+X56cHZtYGZr9+Lf3+XvfXJvbG50dnZ1eXz76+Pi5v1vaWRoaG9+9/Hz8Ozr5ePi\n5/5tYV9fWl9o/+ri3dzl83hoZmNpe+7g29rf7f91dmthX2doYWJw+u/n63xvamdt/Ojh3d3m6/V1\ndGtoa216/fPq5ebu+v39c3BtbGxudHhxeHr47vX0/Xr98+ns9vfy/G9rbnh5fPny9P/5fnh1/O3u\n7Ovo5vJ2bWNhaH19f/59eHT9+PD1eX77fXl6fnp8+/Lz8+3s6+73/Xl+e3z3+/j4+vl7bWRjZGps\naWd07uPl5urt9Hx8dXz09O3u7vD5dHd8cWxqbHVtbHj88Ozl4+v2dGxsdP3u6+3o6e/0fXRta2tv\ncHr39fR4bG5/9vL1/HtvdPnv7ers8O3u8X5vbWtkY2hw/PLy8evr6/Z9eXV9/vfx+3j97evq7vl+\naWdoamxteW578/Tr7fHy83Vwenr8/3v9cXF8eH368Ozu7/J4eHtzdnz58Ovs9Pj9dm1qcP3w6+96\ndnByb250d/79/Pju5eXp7/1vbG9wdHdzeXr48+vm5+r5/nhsbnN8+/fw+3d2fPjw7/51+vb4eG1p\naGtx8evp7/v+dGxs+/D08v58fHb48O/0e3Rwbn7w6efn7PZzaWtsd/307/r28/h8/3twbWpoa3L5\n7ezv9/f16+94e3l6/vv8+Pb19Pr8+3NvcW92cn707eno7fh8d3NxbnL69n5ydvz/eXV87u33+vj4\n8/H7eW5vdHJ1/PH9/PHw6e3t7PL5fnFsa2tqbXJ0d/ft8/Du+Xl0d33y6vP8/v7+/PX59/t6b294\n+/X+e3t0cH1vY2ptevfw7u709+3s7n11eXz07vH1+vv29O/3eHl+9u7w/Xt7c3VzbG16d3Vwam98\n8+/r6fT1fXR5cHFzfPPv8vjv6eTk7fl3cmtoamxsdHV/9fn3fHl69e3r6fT2/X77/Pt7eHJyefv2\n8/X+/vTz9nttaWZpamx3f/Hz8+7w7evp6e3t8X9wamdtcnr9e3Rvb/z29/R4c3J3+PDy+Pz+/e/q\n6e/v6/h6fn58enhwb3FudP3t6+/u8n5zbGxrbvnz/f/7/fzz+Ph9f/77+nx/f/ju6ujt9Pp+//t9\n/ndub29vbnh6dnRwe3t++/3v7enn7/x0d/vy6uvs8/T8cWxtbG5ub290ffr4fv73+35wcG94+375\n8vLt8fbv6OTk6fdya2dobHV7cm5v++7u8fj4/H9++vd++fp8e3l8dW9vcn1+8+/z7fLx6+nv/m1q\neO/6/PP9dG13dG5z+/l6dn16b3/07uzp6ujq7/p6931ybG95dHp0cW9obHd7dnp8ev379ezr6Ov7\nf3n+/f75d3z48e/t7u7s7enqfW9qZmlnbXlycm5yd3v5fnV0+e/0+vjz8/13ePTt6O718/77+Xx1\nbW579vHz8vf7+375+nn//fx9d21rfff07vH3+nxzbGxteP369Pj47enp7O33b3N4d3Ryb2xsbnR6\n9vP4/P78/Xz7/P74/e/r6ebu7erwe3R5/3lrbnNrZ2dvef7u7e72fXxwb21sbnd2evXq6OHi6+34\n+Pv5fHZ0bHNvdvHr7/ry8Pf8/vp2bGpka295e3N6/PDq6Onj4en2dG1sZ211cXZ79/b6/Hz79PTv\n7ujo7fl1c29xbmhrZ2htfPbu6ezv+vzv7O/2/n36+fv39/z38/1xcXZtbnVyeXd3d2xvbmxuevb1\n7+/q6+zu9O7q8fx1+PL49P17cXJ4eHj68e70d2xsbHH89+75fvz9+3h7fv77e3BrcP99//v27ezv\n7ezt7vf+/Xt2+/j/e/9waWZpb3f+9vn07ers9Ovu9P1vc3d6dnFyc3x6/vb8/Pr5+v329Pn9/Pz9\nff78e3Z7+ff4f3t5cW5qZ2t+/X/38+3p5ePm5ufve3n9e3ZzbWp1/29qbGtqb/3v8fHx/XZ3fXN0\nb3P97ubk4N/m7vT5d3B6f3Zsb3t6fHn+9PDz/P9/eG9ub25tb3J4/ff48ezr6ert6/L8cWxxb3Fu\nbm9xeX5/9e/q6urp7/h5b2tt/315dHF7/fX3/v/7+f52dnf+8/n7+/58/PTu6+np7v17fHdyfHhw\nd3Vxbm50d3NwbW10fPTr7Onp8+7r7Ozp7vb0+3hweHdvdntta2tpam15e312e/Xu6ujj5u3t6+bm\n6/h/cGpqZWJiaX74+/j+8e748vz7/H3+ffj4fHhxc3p9fvXx7fH9e3F0/353b3R9e37++PLy7/Hx\n8fb59/r9enRvbG9+fn12eHxvcHz9+vf15+Xu8Ozo6unu9P56dHJ1cG1tamlmZWVmaGt48/Du6urt\n8ezq6ufu8Orn6vP1+29wenZ0bmxtb255/X16c3F4en/6fvj09ff48+7u+Ht99fh+eG92eHr7/vz+\ne313b21uf/j59fTv7+vq7O98e3/+eXx8bW1ubGxtb2929evm5OPq6+nu+f54bmlnaGpvdXz78err\n7+7y+3hwbmltdnn67Ors9fX38+7v6+ru+fr9/XZzamFka21wc3T78O/t7vn8+v59eHj7/np99e7t\n7+/y/n14cndzbnR5fX19ef76+Pr9+3718evr8vl+eXR0c3NxdvPy/nh5/vv6+PX7dnl+/f58+X7+\n/f7x9/38/Xp1cHZ2eH7//f778+7v8fP08e7x9O/vfXd2cXd1bnF7en17dXZwcHd6//728/j3+Pv3\n8/f3/vv++O7s6Ovu+nJxbml4+3t+/fr1+Xx0dXd4dnz87+vz7vP2+HtxbWxoZ2pubXV1e/bx7vDz\n8u/u6/L27enl6/J+eHNudHd2/Pf47u76c2pnaW5ramlyf3328O3z8+7x8Pf5+fbz+fnw7vfy8/n3\n/nFramprbGxsa3nt6uz0+/Xx7uzq7ezu7+72d2xtbnR3cm9sbnB2e3348/L0fHp8+/Xt7ffy9Pt7\neHVrbnR9/nr8+vnv9v9+enV8fn11e/r39PX17+zv+P58cHN9fnl2e/zw7vL0f3d9fnl8fHZ7c21v\ncHf47erp6evt+XZpaXB29/H2+vr68vX48Px9fnd4e/j7f/5tbXZ49u7s9nr99/T8eW5oa2798+/x\n8/H1+PTy9/93b25xeXx99u7q7OvufHt3cnVxcXJven11eXN4fH718+/z9u7u7Or2dnj9+316c29s\naW1zefPo5ens7u79cX74fnl4/vr8eG92cWxtb3Z3/PTx8/ft7fL5d21vbW9++f718e7n7/Hx+Ht1\ne3n/fnr9eX39/fd9+vzx7fPv8/p2bm92fP/47+/7fXFqZmlnanB4+O7v8fDy8vb07/b++3t2/fXy\n8+70+/t2bW9pZWhue/j7+ero6urv/v76/PT2/nl0cnN6+/n++vjy+3j9/nxzbGlubnF3fvjo5Ojo\n7vPu7fDt9m9qbWtra2n+7ejp7Ovp7Xx3bmZpb29ye3t2/vh6cm9scHn47vL08e7v6evq6er1/31x\ndn/49vZ/+v52b3h4aGZqcHt6b3v38+3q7fJ/dHx5b3n+c2/+/H/39Ork6vT6ff357Ppva2xxdnd5\n+vX18Pl8fft+f3lvbnPv6u71+fT7/vj9+uzr6e57b29wbGppZ2lteP73/Pzw835/+u79c/nn7Xd+\n6uX2e/Xq7f189vN0cnxuamdve2//9X1+cnBzbm529vZ7efjr5uXp7Oz09/nx9vZ8cXZ3e3Z9dG9s\na3Nyc3r5enJ9+/bt7evt8ffz9XtzdH3//Pz19/j5+PP5/H5ze3Z5eWxua3f+8PL47vvx8/Tz739y\nef98ent89e3v+XN2dnh8fX9zevTu8vT9/fv6e3Bx/f/9/nxzeHdqamxvd//r5ebg4eXr9vx9a3Bz\nbGxxbGtqa37z6+3z9/b6fG9xd3Z2/vj68u/r6Ors+XBxevjz9ezyeXdub2xsaWl0+/Xq7/nrXU1j\natXJ9/je1MzVbFpYXmtZVlhWZevo1dl27u3p7WptZnjscmz17d/f/e/n8PdjW2xtbm9r5nZIfPBt\n2mvb2Ong189q6eh26lhucmVhWet9aFzzfmvgZfHuX2L81nru7fLma+/p2OJnZOXec2pp63xvWW3i\nb19c6uFkcdze3+D35+5vcvx6W2lkXHh78/Bz5dbvWGXg5Ftt1939X330bXBz5uNweuzq3v5eYfJy\nXG1sYWzf4ODb7Onkb27+8GFVf/psbOrc3N1bcdnuWlZ792dncnpqbmfk22/s7O595Nxw/mb5cXf9\nZt/1399geulzZvRtd2bv7mJvZe7q/Xjf62977uhvb3Hu835l+25g+WrkfXze8fx+eXbx/mPo8nLd\nbOPacWzt615lZulwV/zv52lu7Pvh/vjjbfZ0a3x++W7/5+H5cOT5emJm3WpnfGzl5fdq+PNfWWTz\nduv28N3nfvrf7vtzYXtscG7053Hr6npxfG/z9Wrs+X3q5+7k/Hvj7vdeWWFlXl/+e/B1Y+rg+vvn\n+NvjeeLk3uft3/NdamdfeVhd+mlseO/t8ezx9+Z7ZG936PFf7+Rr7vTi3fX+/efseW10f3RcYm1r\nb3p85e/85nvudGV5+XPwemf39H155/D57fDq7fR16un7bHp9bG5aeOJ1d+3f6nJ07vJsbmtiX2Tx\n7e927+bi7OzxeOZvdvdt+3p16npydf72ZV786V/36/7g/nnh531u+vd4YGXw7Ojv8d/saW/ta3Zz\nYt/8X337fGxsdvTi533i33Rscu7z+GtiYWdrafzh5t7qc3p06F9dd1/+/e/13tTe337seGRUVnZt\n7XN76Pbj5vf77PFyc/l5bnNu4eJvanLtcm5kaul/9Pfm+27s9uVndftw+Fr13uXyePJ//HR8Z+js\nc+5w7/pv4998b3V36Gxs+WRjbV51/XP6cP7x2/Nz6+7fc+3l9m546fZqXXD96/hhbe7kcnF97n/0\n+W72bvPo8G1efejreWv/7H17/Xhv8tx9Z3Xw//nx6er8eHzh6nZjavz/b1df4/llZX7e6Hx/7OPs\nZfrebP7u53pr+PbycXH95e1n7P1td/trYV1m4vXycu3daXz48WpvcG3fdn7v693+dfPs72RveGxt\n++ttdvHp4vxtePHo7Ht4YWzubPZwbG325V5t5PN2ffHtfnt1aOflc+rp3/ls/X7p+m5vZF5lfv9k\n7up36Ox8cfhs5Odo7G7we3rp79/n3+zw+G9+ZPtlanljdVty7Hd1eGtu8/HebX3v7N9u+d7e6vdz\nbv1vZWXs7mZtdd92avH18/5kbeF76ev55WpeZPptam3n3GxlaO/Y72Vv3uNx+PR29W7z5lx7flpx\ndezm6nns3fX8eeH6XmFoeGdpce3eb+nafvt+aftzZXJ1ffpr/OTo3+fz4N12bGldbWb3c1/re/D4\nZXdo+ubw9Ofm8+j+7Obw/V9t43xmeXDv5nRlX3D58W1t8Gx+bHPkfHju3uP9dGl26HZr6+t4bmhw\n8Hf6/nHt/nrr6ujncfPje3hxe/5gYGpub2zt4+ff8ez0+e9vd3Vqe2Vx6n357vXu6mZt/vnwZ25z\n/upvaHvvbPbd/eZ9c+t+62lw93d99O1q8OTmenzuffZscfHpe2F47Xtoaf3qc/lmYO19eOP7dfh+\n7f5uaXng9/Tk9Hj3ffZ3euNob29q5m5jdubl8XNo93r3devxam5i7PP74njg52p4fXhz7nztaF3k\n+fx09OfvfG9zYO59a9rub2144eR7XP3t+2tr3/Xt72x4+HNicvHr73/+6e97bO3leXh97n7/fW7p\namBsZm1jaOns5eD66O9qZfjqcP7++fppeffc4HDu3PFfdPp9e2xhX3dndP9v5+Dwb3Dp2vH97m7m\nel73+m5qb/HjdmRufOvva/r4ce3++vD55+j9bvt34un+4mRcXnvmbmRgePNv/Xl66uHh8fd+b3nq\n4XL97+juZffwfXFo+eT6aXBnc25t6m9pdnzt4/x1f/fd/O/t9n977HV1Xl988H9md3t29/v6dOXt\nY/Pu5+Zu7d/0/X5ken9peWxveffxd/7x9G175un4+93kdWVk93lsc3bv7Wpm4e1oZGzr7vX08OXy\nfPH49/D1cmZma256dPHq6/Z86fd8+Xf99XFqb2l99G147+bpePjj5ebr+nJ3cWhtc21tb3fpfmd9\n8+36a2X3/3H1eezt+eLk7Pd99O9s/fhl/+z5aWd0+/b7/vxzbmhxdHdzbfr96O3p29/o9vr7dWNl\nffz8cu/menJ5e+/5amt9cHz59P7572pv7n/z7Ofq7vd9amh0bnVtaXvv/3V49ejq9+zx8/R69+/x\n9e/28Ovy9P5ubGpmXWVtdnhx//n4f+/q9fb69XdtevRyfex3/f19fnn/evrr3311c37p9Xdr+ff2\na2fp6e99f+7u/3B4/u7r8vV2bG1uenNwbmhye/Z6f+/p6/P4d/Xy+e757+7+d29saXlxa/7o63vz\n7ebj83hpbW5qam7u6/Ty6eL7bnX5/3lxbe97aGFqdG366u7r6fr67PLr7O/2+XZufu/7am5vdXJs\na2/9enb57Ob3b3J19ex3d+vtenn9/fT1e3z67vh/7vl+/33s6Plvam1udHv57/Ht/HV7f3lw//Tu\n+nl9/vdyb25tbXF8fPXu8/zv7u/2d/v48fLs5+3v+Ht5cmVianN0dfb5+vPt7vp8dXR49flvbnRy\n/fn67ufp6+vq8nl4cX5xaG1rbHNvbHf8+fh4b2lx9/h9+unl6ejk3uDq+/zx9/x9fv51a2VpZmZs\nb3Z5+vH39Pb4+3l3dHl1+uz2+/nv8/D19vtxdHl7e/n09/j9fX38fX58f/x2ev7z9fv9ffp9eHf7\n7O/zfHn29/Tt7/D2c3R1cG1sb2lpcHbs6uzr7+/1e2tocX58fv3583t3fPX0/vt+d37/9fL2+/71\n+f38+vf+eXp/+O71eP/7/nN1d336d3V3ffv18fDt+3VybnN1cm1vd/nt6eXj4ub9eG9scnx+ff/9\n8u7t6/x3d2xqcHNvc/34/ft8fX5zc3717/x9/H379Pj08fZ/cW5wevv9+e7t7PL1fnh+eXJ0fHx/\neXb+9vn7/nz57u31+/f6f3hxdXBubnB5dv319Pbs6Orr6+z0eHNqZ2dmbHJ3e/7t6O5+f/L4+O/2\n+fx/f/n58vHy8/58b21wbm9vdf/1/Pby+vz8+316/fLs6+/w9/rx7vb7/3r9dmxra2xqam1vdvbw\n7/p9/395c/fr6Ofw+XRwe3d2dnh9+O/u7e738O35eHp/enFrZ2pvdP308/Pz+HF2eXn3/Pv38/Hv\n8ff3fHl3/PHx8/T7/vX79fL0+2xlZ2hqbW169vb67+vu7/H2/H769fv88e7v8fB/fvxsaW14e/jz\neHdzb25ydnt/ff92d/307uvo7+/u9H9zcHF19u7t7/bz8Xtxc2hnam1+8u/09/j1/XNva29udPv4\n7Ozy7evz+PHv7u/z+v5+dnh1bnRvbm9vb292dv738e3v7ezv8PT29fTv7PR9cGpubWpvd3Ftdfv5\n++/w/v317vT59fr6/3h7c3d8e3v++/T5+O/s7vf6d21ub25xdHr88/Lr7vH4efHv+/58cW5sbXNu\ncG1qcXp69vXx5eru7PD7fHhvbW91e3757+7u9Pr27ujr9fX7fXZxdnl4b29z/O7v8vlub29scHd8\neHJ0fXv9+/7v6uro5OXu8X14dGtqbG94e3h4/n99e3v+9PZ3cXr68+rm5Ofu7+/+c3V6/v7+d3Nt\nZWJhZmtsefPy7ujn6313ffvv7/r+/vn9fnx4dHv8+fX49/T29fp9cnR0dP19fPfv7vH49/j5+ndw\nbG12eHz7+/fy9nz6+np8dnV0efvz9Pfu8/r7+f19dHj57/X8fXplVdLPV9lfWOFQ8PBl82nl4/vi\n3+nb6np5ZWZkbv10fmtq7G5vfm/se/X39+Jse3166/3p83N1fm9o7Wn0+Hvo//56b2/s93be5/Nx\nd29p8GdmfnB29+7v8nJvf/ZrduJvfe3yaN3yZd5n4+du1GPm61zfX2h183Zw+2XtaHJyfHNd4n96\n+Gju6W/XbnXPVuzdXNRfcdRa2O1T1XVc3F1l1Uvn9E3LTezfS9lc8ehr2mjj9mrZbezsZPn47/31\n/erl6mns5154a+9tXWn/Xm/kVd9xa9V86P3vVc/+Wc5f5e1mylxuzkfT8UzPWF3idlzw/njhY/fp\naPlh9N9S9Pfd8FnT42fc01rw0knaeVrQScxbScFJ7/Tyc07DVVnOXXHYXV/LXk7Lfl7baef0121I\nx+E/yudEx15R3d1nTcl6Sc3wW9zORfLAPdzeaF5kxj7DzjvI1mNLxmBLv1Bf39ZPT7xKWs9YY+p8\nVdv1b/Vg3tz9V+DOTNzwXc9a7Gvg7U/eV9ztXdh933TraGTOSn7mXe9d0Wlo1VjnYeBsXdZk7ufj\nYGnUXFfa2FP4zlHs4Gxj7+Vd9fRl4/Vn5uZeathfWelqXujaWtnZWez572Xm917RaFvi72hd5Fxn\n81l039hf2NJ432V0auptXdhxX+r1cXJwV/bc7mfq2ffr6Wvq3V5affBvX+x2/l96zVxY39dXWc5p\nUN3YWWXLclXXc2H+eHfy5F955P5h+vdh/1tQ49tuX97a4H9z2NzWeHrQ+exubV1AQE7mysbMt6+1\nvM7hTDouKi4vLzVO3Mu8u7u4u8nh3mBIR0JJVGZ61cS9vs7Y2ltFSycel5cgoJerlXAoTSklDg4r\nHCmvLaSLmqWqqawrIxYVOSEiyayamJuenp/dJCUmHB0fKmu9vrinqLi/eExmOy8/12FN1Ma6z+87\nH+KPnDehnZ+cKxwbGx4ODh43oaLCl4+arCsjKSgiFSS3qpqbn5qdsT8qKSckKCxPtLO1usHLVDos\nLTY2PEbPs6urtba+/U8uHxcRooSmuJeXi6kYDgscFwgVPp6KlJ2Yn6AfCQ0XNzw7n5OLjKS3zjEg\nEg8dYLKsq6Can7MzKSknJBwgMWTXYryimqHQWszaLyUoJBkPmICQnpygikIKCAEOIh/m6ZaAj2k+\nJjgOCRgbq5CTlKKZlzgaFx4yKjyqoJ6dq9NC2sslGx8rMis3S8GoqK+7vLrlLy05RsfdMRwZjoCO\nbTFDmy8OCgQWoJutRaWKnDgfEhkbLU85oo+OmN83MSIhJi85vZ+eqcfkReLA9kIrMS4zLilmwsG7\nv9TJzMbBPjg8VrPFPSIbmoGPziIqplclFAcVtpybvcSbquAvFhcVL6Grnp6enMBAJx0mPbazwq+u\nsMlSRjZAdLx6Li4wPkfz2zhNurzEQVy8/d9QeLfQUiu5jZKpPyAzMls0DxAmq5qiqcpOvbg/GRQe\nVKGcoq2yrbFkLSYrNlC5r7K1v8/My1A+PU5cOzQuOk1jy1Xfv7+/TvbWRVblrqrHMSK8lpmqOyks\nPLs+GBMaTaSYmbNAP8i6Nx0YHtWemp+4zsfLzT8uJB84sZ2brsJkSFs6LCUmPNm6ssZMO1G7wGQ+\nNE7LxM3HtbS61C8hQqemoqy+WihBMCIgHjNcppuhsmf9OjQ1KikqR7aonp+sv0Y1LCUqLVGtpp6e\nqNgqIiIoLjp6wrGzx8fMSy4qOdy+usPPu66uy0YzJiRGraKanqxNJywlJywwPDh6s6moq7pSODAv\nKiwzWberp620v+Hfek05LjRgtayzzEU8P17B0WJIPkM8NDQ4Tr+xrLC6u8voRTI1SFxaaVZQaNLG\nx7murLO5xU81MjEpKy80OUe6rKuwvdo/Pk5gW/jK5WPm6NTKyNHq1OdVTfe+yOdsVk02LC03fLu4\nsrO8weZQOzVJ6tXJ3VlcSENERVrmxLGurrG8wvxDPDk9Pkzf70c6OTtDTnpuXHrXw7u0sLPC6ks5\nOkFGWcq6vc3Ixsx3Ozc6R19d6PPu0GFFRUNc1c6+w8nRS0NJWODq7crDzNHRycK/u8PmUEZLQz5A\nODY4Ok5o8dLOyb+7vs3W197V205CRF/M3fDc2cbJ33RXZuZdUU1PWD87Pkfs3t/NycTK23Rr2M3i\n+uXpXV/Furm5u73PeFQ+NS8uLi84R/vn79rQx763tL7ZdVpWWlVMTH3Lv7u9wtL6YFBDPTs0Ok73\n0eheT1rOydHZ39TL1u1cVlxT0bWuq6yxvtnsWj0sIx8gJjFF/c65raemrsROOTpLWUxAR9u7sLC7\nyuZ+5/T0Wz41Mzc+TFJLTu/CubnD2nnlyc55WFb55WZaybKzsbS/ycnNRS4pKCkqKSksOuq4q6qr\nrK2ttspONjQ6Q0xNYdC/usPefWdeTkpDRVJZU1R449jP19jU3ODRxsnJw8xxVVZUUlNTUmfvXe/Q\n6mdWVE9a5m5YT1RUXltNXe/WzMrhcN/g3szIzNLz/nr8cVFOTWXb0NDd2ONqa3Dh4mdZTE5UT05Q\nXnjTx8vZ8efPzM/eYVtfbmlWWWxvaVdMTFRxX1debtrPzc/b69vT1NPpfe7Xz9na9nTs9VdQTEdQ\nYWheZP518Obe5vBfV1BRXvz7f97MycvW9/Tc0dn0em/s4e1WRkZKUU9KS01a682/vL2/xsvhZVxR\nTVBYVV7l0tr9dmRWVFtdYH7f5PXp635sbH74eHt6bWxo9uv36OzdztLg92Jt6ex6X1xYV2BZWV96\n2dzp7uzs+efj5t3Y09Xkd2FeXFxaVlleaGtnbWtp/PLj3eTl7Ozm5+3+7uXd2tfa7WFPTVBfbHnm\n3Nrc8Hn26utlVFNSW2x8am3n1dHhfWv039rb7Hfs293qbV5YWGJlb3dwfX3x7G9jXVdpfuHW29jY\n3HhZXWp47vT49/zk5XJkWl5keO58f/r39O7re2RdXuzW3P/23tvfeWlfbHNs/+Xc2tjm9t9uWE9P\nUEtLUujY5+bUzNre5ebe6edsbvxsWFx+fdfZ/ujZ4FxgWFtgT1744G992tnmY11k3+d1YuDacvDy\n6Fxf/drTZO/V12Fs5HVaT1JTX2Jd79HY5Nzec/N5V2B1fXHc62He1m9u2e/75/lpfOxZV+JoXep+\ncPLo+NnrXl9w8WXV/lJ27Pvu1lze0mR+19xZ+u1fbG5cXftNYtd++tlp6NVcX3lwcNN0bdff5ujQ\nWPbZWVrs/FFmXlp98llv4F3v2d/80dJwb+9m7Np+fu1iW+vmam33YHN8VV/o72Nm1+tpempkfnhm\n39nh1tTObe74ZFNV51RdX+3dXV/33Gttc9rdYvvh3Gtc39d0ZOj57+1hbuVeVt/XZP72XHLb93PZ\n4mLh01xQ8ftPW/lbznFH+NTwWtLd99ffXezmTHHT4Ft02XF3bmxy22hd29xeVN3lcXVdZ/rjZm3c\n83ru7Pfr6W3t2d15+P5u7213X19sWV5vb15fWFf39W9p63t/8/3/4NDb2uHv219V7u14e+jScU7Z\ny9vPyr2+v7/c8+pNOzU2NjIxMDhSWVjgw7eyt7SysrbG1OR+SDk3PUA+PkNe5ddyas/KznlZW/Zq\nXV5yZFNf5bu8vLGspqmywtTVVDAmICAlJCMmL1XPvrWuqKWorbK4xN9YPzo/REBBRVzbycjRztXm\nX0k+PT89PUVPWuPMwLu5vcvBsq6ytb+/trjOQzYvLCwnIiQoLTlY1Me3r62qq6+6wM5wW1BGREVL\naMzHycnJxtdlSkM/Njg9Pj9IWn3Rvrq8wMfN60pJ0ba2tbC0t7a22zwuJyMjJSQnLTzTtKyop6qs\nrrXKVjctKy04QlHtvrGrp6uzv99MPjYuLC0vOEv7z8LBv726u8RsRzw2MTzVvLaqqqymprG86C4l\nIRwdICYsQNO3qqOjqKu0z1U8LCorKjVT37mppqSjqrC9eT80LSknKSwxQ3LXwLy/urm8wddLPDYy\nMD/Nv6+jpaCeqq64RzMoHRsaHCApRti9rayrpaqwuN5BNzIxN0p307avrairsrfWSD0wLCwqKy45\nSWbNv768wMfFzM/hT0M+NTZ3vq+hn6KfqbS3YTcpHRkWGR0lQ827q6urpaessMNPOTIuLjxgzbmy\nr6uprLG9cz4wKigqLC82QFbYxb29wMbP4+LiXEs8NS87zbamnJycnqu0wT0tIhkUExcdLOi2q6Ol\npaOor7hwNywoJy1Gzbauq6qoqKuxykEuKCQnKy84QVngxr68vcftVVdTW1RIQDkxU7OrnZibnaGz\nwWIvJBsUERMaJEOyqaOepKSkrb3yNigmKCs41rqspqSko6iyyT4sJiYkKC0yP17Sxby9xNF+UU9o\n9OFiTkQ1L8+ooZmYn5+ltMY4HhUQDxEbKj25op6Yl5+rxjgnJCQfJC85vqCZl5merLjVNyggGhwl\nLk3IwMe8tre4xkMyMTFA6NthV13qUe2pop6anaGfqsY4HhUQExUXIC9RppeWl563VUIyJCAeHS67\nqJyWmZ+dpLlZKBkYHR8rQUlor6mtq7ZQP0MvLTQzPsa9zMTDQzSsn6ecnamem641IhcQFRcRFSZD\nrZSTnJ6jtchSIBYcIy3Prq6dk5ibnrk9LyQYGR0hMM7Bu6anr7HFNzEyKio4P1K8uMO8yzK6nKio\nn5+em6QxHx8YFBIPEB/YsKCYmJqaodsxJh0cHiUv1qebl5qZnKa/Lx8aHBwdIzPRr6itr6+03D8u\nKCs1Q0ZM6buyfVydnaafoZ2epXQlIhsVEw8SHTT6sZuXlZijuthEIhsaHCpTv62blZaTm6zaMR8Z\nGRYbJjNKs6ippae1z+szJy0xLjI+dsNUrpWdo56cmaG2LicsGBAQERYlOzq1lpSan6atvUAdGhwf\nLDJspZiWlZaYoscuHhkXFxkfK1i5r6qjo66/dT41MyslKT3XPb+Wm5+ZmZektTogJhkSEhIaJz1I\ntZmYnZ+nteM6IhweIScsw6Oel5WVmqG5NCgcFxcbHydH2LWno7TRWEMxJiYvPS82nJennJmUmq67\nJiQfExEPGSYvQNehmZydpK+8YSweHR8jJkK5rJuXlZiepMw+JRwaGR0hKjvYsKyqqKqvy1A5LCor\nLyg7np6qnpuWnqyvKy0qGxYPGiMlPG2vo6Gdo6qtu2ctJiYkKDU7Va+jnZ+gn6yz7S4mIyYiISw5\nXsvFt66prLzC505NS1dXT11USlJ97kz2wcO7t7fB5M57QT03MzA4Qjk9RU9y38/U0cnHvrq7ur/I\nzd/9bl9RWebU0MfHzdPoYUY9PDg1NDY5O07v38e7uMHXzMbAurzQ2Ly1w93ExH1VV0Y3NTQtLC8y\nMDBB+NDFu7GvrqyvtbvB3kxOV1BNT2v7/dTdZGZYQTs9QD47PUVYXl7e0MrK7v+4rb3Asquqr67A\nfNtHMSYgIyMkJyxF5syzrq6vra69zd5YUE5WTErmycXGz8O5x+pcS0g/OjAvPD0+REvXv7q7ycS4\nvM9CPcWyv+HLr6qwul9HRTAtJh8hK0I/QcSyrq2ttcjT41U+NTx8y9nRvLKxu8vY519EPTw4PkxJ\nTFNp/3dsXeLaYk1T7dPtR+Kpo665taqsv0MtKyUlJyQlLly3ra2urKmw1T4vKScoKTRbwa6jnp6f\nqLbLSC4nIyQoMTxWyru4uLzN2vVFMSwtN1NgyqKXmaCqpaa8LRwbGRobHys9x6udmJ2su77YMyAb\nHCMtQcmwp5+amZ6t1VI9LSEfJCo3SHjLu7a4ub3I5z4sKS48ODyxl5GWoaqkpW0dEhAUFxwiNcGp\nnZaTmKxVOjkuHhYXID63qKSfnZqZn7ozJiQlJSEiLEnEuLKxtLO6w8fZQy4qLDAzL/adkZKcrKyj\nri4WDg8VGx4oTrGjmpOSmq4+LTMvHxcWHUGspKKfnZubps4zIx0eJCsuMzzmsKepsb3BwMDuPS8p\nKSwtN7GYkpelu66mtywUDhAZICc00qyfmZWWnbsvJCcpJhwZHj2pmpqen52dpMssHhobHyo5SV3b\ntqWfpbdgPj5GPzMqJys8U+OsmZSWo8jNtbRHHA8PGCQxPmq1opuam5+1NyIdHycnICEytZqSlp2l\np6q+MR0ZGR0oOdK1srexqqewZi0mKjJBWW5rb29WSdGnm5qiv+i1qK0+GxETHCcvOlS6pJybnqnm\nLiMfIigqLTjbppeSl6G3zNBSKx0YGydHvrCwuMbLvbjEQikkK0u+tLrNaWNsRSwuvJyUmKnDtaao\nUxoODRQeKjzerZ2am6CrxD4nHBwiLkPTuqiblpmjwzs1Ny0mIyY027ivr7rkSklba0ErJCpLtKmt\nv+dgXVg+KiVPnpCPmbXOtK/kIA8LDRUhX6ednZ+jo6OxNx0WFyFBwa6ppp+bmqG7Mh8fKUDd6klX\nvayruzolIykwOj89P2W4pp+mvFNASEw5KiIjR5yOjZSmytLrKxcODA4aL7idl5qfo6mzRh0UFh4y\nyKqfmZidpaq3RCQZFx8yxKWeoazAakkyIBocJkS4q6qts7m2s75OLScvWMjRTz47M2qbjY6b3Sgq\nLiMcGhgYImygk5ar9VpJNyogIzFHv5+Ym6h2MDI+Ojc7O0vCr6mlpa95LyIgIyMlMvCzqamuutVO\nU8/AxmY8OUFj2ns+MTQ6LjGkjYyUo9wtHhcaJCQbIVSrnJufreQuJSgrKC5F9bKmo6Wv5EdMS1HD\nsrrFeT88MC1Fys9MRlXyy8PHy29ARlfiw77LVz84ODo8PD9Xv6unrbfHNSW/mpymwTwkHzNTWDkl\nM1j/qa3jMiMuNlq4v7KvuKy13EYqKTBPt62qqrO+z3VrMiUgJ9WsqK9sNy84U3XLz2XY0cbEZzou\nM07EsK+3vs3AwmdCMScfHSqjkY+Qn8QpGx8cIyUdNdurm5+k0DMzJiosL37OsKaop7PZSTY4PU/I\nvsG+z+5vOzYyLTbUrq25WS0tSr6qqLLRPjUyNT1AX9rQycXDycrMU0U9MjM2QTsyrJWUkp5QKxka\nIzXOOlNlS660s8kxMSIpPj62sbOpq63GSjMqMTn5sKqtxl1WUWL0Vk5ePTfNub3QNy42T8m5tM1Z\nZ01e0dBrR01LUNtpXH1w08zeU0JETOpj7KSdnZ7oLSIaKjZ+zkPJ1LqqtsgwJSEgNUe3p6ikrrvs\nNzEnMFXFqKitwEw/NkxuS19EQ0nntLG5YTY5PU7MvsLuUVNo3OlXRT1G68vUe1pLXMvBxm88Nj10\nvsPhq6GmotU3NSQ0OknLQtjgTsJdQTstLzM+Wsy0rbK5zUFFPUHIva+srrPaZj40OjdQ7dnLY1dF\nQlBPZmJdXF/cz8XEy9RnZPbufV9MQkdhy7/B2U5JQz9GUODb59dR36afn6VIMikjNTJJUD++w7ew\nXDopJS435b24rrS3s8XaVDs+Ucu3t7rLUEk8OT88Qz5JzMCzt8vqPTY7RGjaxLezsLnNbkc8NTQ3\nOkRR3cjBwcrdX0pGSGTTy8PBw9VNRc+vq6267kU5Nzw/Ozk6P0po41paX/TP3Nbk383bycPPzu5/\n29zJy8/TVElDPUBFTGve4n3QycrTWU1U+NnLxczS0s/Y3fhGOjU2Pk/6z8nH0MvMeFhEPkhW0cO9\nt7u7xNdeMz+/u6y/P0EuPEg/ZjI2S0PExuzcXMu+vbzr6tfjwMTeUjo4RN2/xeBcTl7j8mFIPT1D\n47WvuOU8O1DHuLzLV0tv5eNONzA4V8y/0E1ES9W/vcRZSExczMnP1tfJwbvDPi490KypvFwyLC82\nTEU/TP3CtbbNfE9S1tjcUk/PxLe+Ykg2O1JszmdQa3DIxdNkP0NV3sjIxb7F6FlOWF/239bL1+pi\nST04Oj9V2M7ea2ru0MXCxs3adFxZUVxpbN/Xx8HcPjl7vK20e0E3Qk5ZWjo5Q+7Av8dz/tHQ0E88\nO0rJurXBZU5FVW1iXU1wzcPA3VpJSFFi5u5+6NfM2Wb10czP61tRW2JjWENCTt3Ex850TU9UY/56\n8e/i293W31tNVGJsbefW21RE17asrclbPUJYREk3NUZpvr/E1mHU3v1OOz1Mybu9ylFNU2JjTElF\nbcnBwNTsav3a6fxWTFZk3Nze4O3e4djQz9ZvWExMVmvk3t/sbnNvZlhPT1NjcGRoY2b27+Hf6eHo\n29Ta3fRubPReRk/Tu7C0w91PTkhISjxIVN7J19xPVFVQcUpIQ0/Yzr7L4P5i1d/pV0df3L+8xNdT\nTElcW19meeLa2tnr/n5s5N/k6Wp46d/h4+VqV1trbX5rZG5hcGFWT0lTXHbb2NrxaXP429jVy8rI\n0u9iUmXs52JNTU580MvK3PP55c7O21hHSktba217XF9ibmpeaVxVV2Bm6dXP1d75bvpkX23f0szI\nzMzJy9N3TkhMWWH4elxYaOje62lZWmFqevxtYlxaamv88nzo7OPja2RiZ/Lh0dPa1/RfTUpe4M/O\nzs7Mx8jL0/ZWSkpMT1JOS09f7uLvc15cX3Xn4+z4e/Xo8nBmX2R559fY2tvk2tXc5m5nbPnm9GFO\nS1Xv1NHb8O3Z1djibl5cX2ZmYml8e3P5f2JUUl1q7+9z/Gttdmp1d+vj5eTn6u7g5vT5e+nd1tbl\n92pp+Orf7PJ2X2RdYHzvdVxqd2/m3NfY2eF2Z1hOT01MTlxv/ens8erq9PPr6/t2b2f61tHMzdXd\n4uHv7u309u32bF9dXVtfY2lzdXd6c2lxb+/Y5ujg73xoZmVfXFNVYmr15O14e+rj8nNqYv3f2tbY\n7e7j3+Xm5/zs4+nue2RnYmlgYH1r/fppYFxWVF9y+/l0bXH23tnc5OPc2M/NzdbqcV5aVExNTk9f\nefl2en5u9+nv7fLn4Nzkbmzp29zb3ubj7Xh8em75a19fXGNcV1JXYHrk5+rt7ufj3+Ts8Off3eV1\nd/v68nViYmNt+fLofGtsc+7p5/br6e/qdGleW2Fu59zieWRdW11hX2Jv/enk6N/p9eft6t3qb/p+\n5d3p3ep/8Oj6e19bWFJgZl9gZm/s393h7+Tc7Hj7cn7yd/h6/ubr929t/vHu73Jna2hu8X5ufmte\nZXzh3uno4Obm4OvnbFllZmXx6vx0bmlqbnru6vlqafL46uDu9vf++vluZ2Fqdfrt5Op7dnN0bGFn\nffvl3urm5OHd4/l6eG1mZWlrcv35dmhnbW71eHtzdO/39f559e3o7Pj+d/7r6+319u/v6fhsbf/q\n7XNiXWJ1eW1mcu/s5uj09vV97O91dWJnd3bo5PLv8/Hu9WtjcW1lYG367enn5d/h8m9u/f14+mt2\n8Pbm6Xh1d2ptamlxZGv66ubm7O7seXZycWtjbWv95eTs735q/fZ/dv705+vy6+rsfX70bmJldG1p\nbX3p7O3m5PF3bWNocWv7e2v06Obo6+z8ee36Zm97bW92fv/29v9uamlv9fvt5eHodfLq7Ozf4O/z\ndG9ZWWNcZG1v8e7x7er2+uzlcGFz9/bu4d3d3eB0YV1fYF9qeunsfXduYWVuem9obe/k6uLu5+Dk\n7Hv68eHh9e//7etucl9WWWVjZPX1+W1weGd1fffs7Ofl2tne3e329O/qamRsYGBwemxoYWZpa3f2\n6uLv8PBvf3hvfOLf3uPy7vpv/3ppY19ua2hoffT16Hzz8fDr7PLq3ejl5Pby+G1iXVlebXh1ZGBv\ncmtrbXH+5+Tf5u3p+fLi6PP8fn3k393gdXp8ZWdqWVdbav75b2lr7t3q7ufxfuvtcvz6+tvW3e72\neV9jYl1eaXzv5ur0bmn0/mNfXWVt8enk597d3dzmb2plY3tv921p7/jk7v77dXRoXFtrbW/039fR\n0eHm815UVl5f+ezpdPXnf999a09QWWj11tPI0OrccE9LSlHp5NjKz8V2TWxLZMB47W1NQkNIRmB9\nvcnfx9DPbF5fUlpOZGPZyNjP3mFHREREXG7a09HMzdLV52zwbWhfWXbhzszLzdfda1BEQUE/QkZK\nTV3t2M/MyM3Y6Hjt49bOzMjEw8bKz95vV1BNSUpHREpNTlZdXmFfa/Hl2NLSzcjKz9bc7OvsaVlO\nTU5SWl1lX2Foanh4/fzu3dbR1NLP09TV3eDd4OPk+ndkWVlZUFRQTU9TW2FtbG1y8uri3N7c5efj\n5eLd5+vh7n1vZWpjZGBudnH2bXH17u7j6+vX3ePm6+vm4OLj8vp1Z2ZcWFNOUVNXWlxj/OPd3N7l\n4OHn5vH68f588Pnr5vH99v1yal5eYmNx7OXh3NnZ4Ovv9vBvZm1oanT4eXb59nxtdW5naGlra3Fs\naW1rf/rv6O3o5u3w7e3p6e3yfGxsb3B79vHt6/Ly8XNwd/7w9HBsbmRlZWv89ejqfnx4c3r7eP16\namx+5ODg6e3o7+vu/H56bWhvcW9ub3Bpa2pnamt59u/q7PTx+379eXNtfe/x6+728+/s8Pz47+jo\n9nf8+3Vvb3FvdnH26ursfW9tcnN1c21uffv3+Xl0d2528/n9//53bmls/PHu7urtfH1+dXd7+uvs\n7enr8uzv8/h5f/vz8PJ8df13c31wd/p7eXlsamtlZWpnaGlw+fX48evl4OPv9vHxfm9zfXtz9vHu\n7PT8/Hpqampyf/jz9fTv5+Xm5ejo7PD3em9pamhqZWVmYWpqbHV2dn/49e7p39/m6+/y9/b2fXF8\n/fX+//n+eG1oZWlnanv37+30+/Dq5eTk4+r09f79fnl+fHr9fHBwa2hrcWlkZGNkanN4+O/t8Prz\n6+Pm6uru8vLv6ebx/3N4fW5ubG1qbXBxef7t6+/18vHx9Pn1+fLz8O72fnJqY2Zna29we/f68Oro\n6ur0/353e/9+dnr+eXl1dnl7/vz9e3p3f/f8+uzt9/b78ezq7fN6eX12fH37+nl5cm1qZWZvd3R2\neffu7Ono7vh8d3d5eHf37vZ7d3z7+312dX/+/fx+/PT3eG1rb33z7e7r7e3r8Pv7+f9zcn39fXt3\ndHZubnZ1b3J5eP3y8PXx7e7ufnZ2fPn4+nx9cHB5fHx1dXt7fH54e3Z87+zs7Ojr7vP59/H2+vr2\n9vLvfmxnZmRkaW9zbm1x/vf29u3r6+vr6u3v7+/6c3F1bGlnZ2dmamtv/vvt6+7v6+nr6+zv+/v6\n/fv2+X1+9/b7+/l8dnd3cm1ubm5tbnf49vf/fvHt7PL9d25we3NyeH789erq9O3p6ens8ndyd/bu\n7+3y7/H3/n59bmtoZ19aWl1ocHx9ent5eXr78u3s6vDv7vDn6erq6+zr6evt8vjz/GdibXduZ2lr\nZ2p5+u98av7k3N7h3t/j5OPf3uxuX1RNTU9SVltfYmd1+ene2trb4Orr6uLk6ung4erq5+76dm9u\nbGtnZWRmaGx2/Xxub2949evm5+Pl6+33/H96dWppc3lxcHFva2VaW+zc7OnY1dvd2tTT3vNzX1JT\nW11XWF1aVlddc+/r6ePk6efn6eDd3Nzd4OjxfXR7+/Z5bWdcWFhfZ294dnNwc3f25t7c3Nzf6Ov0\n8e35b25rbXJzdHN6enl+eXb97XZaVWzs9/jr5efq49nV2d3ge1pTWFtYWl9lZmRv+vDi3N3i7PX6\n+3p+6eHl6e3u8fb9cGxrY19fX2BkZ2lsbXn17u3t6Ofg29jY2Nrf6PJ3bmxlXV5eXmJmbXR8+fxr\nXlhi49XX2dXZ4eDb2d3tZlZQTlBXVVNUWFtgbffn3dra2NjY1tLV19fb4+jub2VmZl9cXF9cWlxe\nYmZlZ25tb/nm3+Hi39zZ2tze6vV7cm5oZWRiW1xmdHB3fP94dfPpdlts1c3U2NbY3ufe1NXtZVdN\nSUpSVE5PVVdZYP3h3Nva19vh29bY2t3e3+Tn6+/9dGZhY19bWVhZXF9maWpoa3jv49zX0c/T19fb\n3+p6bWReX2FdWl1fYGJpa3V0cHzr6fd3Y17pzs/Y2tba4d7X0tl6V0xHSFFZV1RWW11ieuLZ2NnV\n2eXp4t3e3t3f5u/6dGZlb3RsYV5fXV1dX2VlZ21sanzo29fW1tfY2d3g7f5+eWRcX2ZsampudXlz\nbnv37uftf3j6bnDm43pdVVZffObc2ulsafjf1dLZ7WVeYW7+6uft/mtte/Pu6u50Yl5gYV5dYmdl\nYmFofuzl4uDd3d7g4uvs5+Th6ftpYWNkanP8+nz7+nptdvb/dm96/HVue+nl6Onp6e3xfnN4b2dg\nX2Zxc2hgXVtaYnzs5OLf3dnSzs3O0t71aF5gZGBbW1xYXF9kZmVpam1saXP+9+vi4+jn5OHf4d/k\n7vj293pxa19eYGJscX348u/n39va3+rwe3Hs6G1bYP97dHj2+HFmZGxye/l6Z2ZucWxq/fF6X156\n5N3b1dXc3dvc3eHsdV5ZW15dWVtfYWJs9/bz7uvt7eXj5+30fXpzc3p7b2hqcX3z8urm6e39dGho\nbXv+8+np7+3n397h3+t8bGBdZXNya25vbHL18vn+eHR5+uzj3uLvdWpgXFtjcWxocvfr39rW19zo\nfG9tbGhqY15gZ2hu8evt5uHh5e7v73xvamVkaWttbm/67e3q7PR+ff57dm1qY2Bqd+/j5Ojl4eTj\n397h4+T7cG5kZWllXmBqc/3s6Obj6u/6enJxbmBcXlxXW2x89evh3uDe39/e3+Pt7fTw9nVtZmdl\nZ21ydXd3c219+Xp4dXJvfX56eHr39/fv6+vx+Pt9dXV7+PB3bWxue/vv6uzt6+zw7u33/nh88/t4\nfH3u5uv1fnZ1bmReYGRnZmNne/Dz///38vTw7ebj4u5+/H5/eXJ6++/u7ejo6O3+fPx8bWNhY2Jj\naHD97vL17env8u/2+vfv8/z6fW9pZWdre/Xv7vb3fP/2+fr9/H58fPrx8/r98e3v7efv9fr2fW1o\nX2JveXd9/nl2dv70fH11dv78/3h8+e3s7O7r7vT5e/fu93Rta21vdnx8fPz58Ort9P15evv7/XJr\nb3T+9vHv8fn7e3N5fv97ff93cW978Orp7O35cW5tb/79/Xt0bXR+ffbv7Obl6/D29/P9eHNtamhr\na29++PXw8PT5fv37fXv78+/5cGtrcGxtd3h0dnZ4+vLt6evu7vj59vb19ff48vDr8fL9dnZta2lp\nb3J2dHBxcnr27uns7Oz28vf6e3x9dXJucnNva2Zx7+rp6evr7fP+b3N9e3d++/j2937//Hz39/Ty\n9Pd+d29wbmxucWxufPPs7e3y7+rs8vt0cm1naWtud3twdHx++vPz+///fvfy7+zv8+/v9/fy8+76\nd3ZvcXBtb3X4+P35+vfz+Hx8dnV7+vt+dXP++f73/XV0fff09vf7eXl+enp+/vP2fHp7e3d1dP73\n8u7q7vHy8ezr7vP9/vx7cm5tbGtqbGxpaHN8/fz89vby6+ru7e/z/vv6e352//T5+3twcG9qbHv5\n+Xx89vb07/L39fl9eXr7/npxcXp2cnR8d3b48+/s6uz3d3v8f/rv5+br8vn49Ph5bW9oZmVlaGxt\ncnl9fnR2/u/j3uPo6+/2+f39ffz2eXZ7fXl1bW1vef/9f/z3+e/z9fx5/ndveO3s7/D1+Pxya2tp\namtuc3Z99e3n4uft7O70enNwb3lzbm5w//z89fDx+Xdvb3J3b3F+ff72+fLr6+zz7+rs7e3v/nFp\nY2NiaW1ve/zu6ePl6/X2eHBwbnJxdXd8+fL09+vn6/L6+nxua2NgZmpyd/Tt7unl5efo7Xr73t1x\nb2Ns1+ttW1tnZXNdcePtcGFt5uh9dmpzffrzeXTw79/e29np8HJwcmVgXVlifuTc4el5dPLo5Ot8\ncnD67/T5cG1rfPF3aFxXW2Fw9PxtZnPs5+zz9nvy7Pvz6eTe6fh2eWtv49vU2+hKNkPx1rKprK66\n0+dDNiojIR4nQ86upaKmrLLHTjcrJyYqOcmspqSlrLnPTjMrJyguPui9t7e+xthfTkE/RVLiyL6/\nyMnWZk9EPThLt6efn6i3UTUtJB8cGx4pXqqdmpyjtVoxKSQjJi1GwqqfnZ6mtOM5KyYlKjRZva+s\nrrfOTjkvLCwwP+3Bt7S1uLzD1F5HPDY3OkRYcO/lz8K7t62prKqz9UosKiYiKSgtPXqvpqGirc5A\nLywuMTtEYcK2q6mttuRURT5BQUlS5cjEynhFNjE0PE1n2s3Du7u9yN9uaPTj6mtPREFHVGFcU1/5\n/sannqKjsEUvJCUkHyYmLFG0n5udpL84KiMkKS4+ZLyppJ+jr9Y2Li4vOD5N6byura/CTDIrLTI+\nVO3Lu7Oxt8V0RT9BQkI+PT9L0L68vcfP3ndM3quoqqm5WTcuLyklJiInOMmmnp+lvFM2Li4tMDQ6\ndryro6KntdtJOTUzMzMyPNWup6iydDctLS8yOkNZy7esqay7dj83NDU3OkBkx7eztb3O7Ek2Q8S6\nsKmsudZWQC4nJB4dIzPEqZ6bn6e4bDwtKCMgJS5Ur6Cbm56mt285KiMfHiQx+rWppqqvu99GMSsp\nKjRouq2rrbXG4FpGPDg5PEjuxbu5usNsPjEvPFfCrquoq7S73EgzKCMfIis4a7yuqqqrrrjMVj01\nNDhBUfLLv7y8vMn1T0I/QUtdfNnMxsTI11xCOTo/R1/azsi/urm8wNVSPzk4O0FUcebX1dTa39ve\n19LlbPLj39HPzM7h6G1ZXGjo7W93WU1KSktEPj5BSmrXy8rLys7MzNHU5fD7bd7PysbKytHre1pM\nRkFAPj5GUWHr29bW2dLW3uZvX2D+1M3Kyc7V8F9TS0lGQkvozcC8vLnBytVVRjo1NzdAW+nMxsLA\ny9loRUA/RFVf5dzk0cvFwMPH0d/m4tjS095zWU5LSUZFQkJHTmfq3Nbf7m1ob/fXzszIx8bN3nBW\nTk9UV1136+fm4tTNy8bKz9T5bHl1cE4/NzAxNDlJccq6trKytLjE50s6NDI1QFzUw7y2tLO2vs9a\nQjs3OT1GS0xUXWx9f3Zx7NbKw8DBydtoTEE+QUxa5MnDwsLF5Upsysu6s7rA4V5GMzErJiYoL0jG\nq6Sio6u43UI0KygnKC9OvKqin6Gptd8/MSklIyg71bKrq7DB3kw7ODU0N0vNua6vvNxNQjw7QERP\n48i8uLrB21JBOjQsNbSnn5misVgvLR8hIRwiLvOnm5ecrNwsHx4hKjrjsaminaCovD0mHiAnM+O8\ns7Gvtb62vWo7LiosPvTMv8LIzMbE1v5OPTxGXm/j2t7Kv77OXEM0NDxJaNfORmqempuZrzMfGh4b\nJC0nRLGflpScwigbFhgmO9itpJ2dnqXtLh8bIC7Jrquosb/LYD0qL1jdu7jjPT1KW8i9zGjn0d7J\n4DguMUD+vrnWet/LvLjLODI6Qte6tMkxLq6foJqzKyQfKSgtMSZKqaCZm78lGhshMryzuamlpKe5\nPB8dJDa4pKKqr79zWzwsJCMo8qWhp8M+Mj7J3FE4LzvPsLO/Xjc+4Lm+XzwxOs2ytMZMOEXpysLI\nZjo0KlWXmJ2eOSEfIy4oMjYuvqOkorQsICU2asy23d+vrKq6TCwhMG63p6u8VE7B1044JSMubr6s\npLTjXFdIV1YuNP+3ra6+OjJId8vPSi8uQ8yvrLHMREdTRTo9SUfxtK+/RDa7q6ujuz81Ljs0Liwo\nOMKupabCPi8wOTtlbeK1sa60zVg4RmVP4+FaXHV3TtPeRWzhztpZ2L+50UczLz7Mr6+4zUk+PD5A\nPDo6Ss+4sLK96FZcXWFWQTxCUc2xrsFPPTQrM6ubpKWyODAxNCghKCxMq6ets346P37QR0BPX7Sn\nq8E6LCw16sfNxsLCvr9ILjc5TbuvtdnwWUZeS0RPzb+8tsxNQTw5OEFLUtfEwsnLzNbZ23xgUVBU\nUVheddO8tcNmRTkuLPefnqiwQy0zOjYmJTFQrp+nts0+PERHOyw40K+kqcE/LTA4RmJf2buvrr1N\nLy1Vz8i+ze/s2V5CSVLhxcDW38/kYkc3LzVgxLq81mp4z83j7GFj4M/cRzw7PmXGu73CwehDPi0v\nrZ+stMX9W0s5HhwuXa6jrb7HxtRHNiolOL+xrrK+2WNmPi4wP9u5rrPEyN5KPDY9Q8Cqx1trU1Zq\n0UxE1sbEzFU0N1LexbzAYk95YVBMRT5LzL/AzGRNTWr698e/zPxOZ9DdZ0U9PGKppstn31Pv3jgn\nKkzJv7O/1r3GQjU4ODz5x8/Hu8L/V0k8QuzMw7m3xu12TkdMTkVDTHm6uL/dVvdfWkZE9cm9yPtV\nYGtLQUZg3+pNRmDOyND4U1nNyN91ZWjm9G1ZTmBbYMq/wszmXVffZD0216vD0sTWwOVLMS1cSjtE\nTMy0tNxX5Us6NzhIy7a/wrq8v30+ND1t5dPPys5m3ry92lRSVGf+SkNSXWTf3X7g31xZ7WFFSlpZ\n39P31L28zGpMTV9cTUhW58/BxNbKzks6P1vezth2VW3F0MLdeb3M2D8/SD9GOEblvL/j7mrW32M/\nPG3d0M/LxcvNdFRcUUxIXszO3uLbz9DrWVjk52FfVEtf2+RvbFxQ89Pe7m9l89bdb2JfXWVp6c/W\n2+z+3d39VEhMXWfp4+XP1dv2Xl5tX03qw8rfaGh21m5LXNvN2OhkXWhQVH3pdlFNUXTqYWvu5eHo\n8+HfXFJo6NzU0tfMxc/u/29nUktXWVhd6c7P3FtNUlRPUGrq3M/OyMjuTUpUau7y5tnV1O/6bk9O\nWGf+5Nne63tlYPT1bWl/6dzQ7PDd8Xtp++Lp7fPj421WTVBeeXlo8efc2/ldZuH6bm5cWl1dX3Pr\n7ezaz83U615YZWhs9tTR3ep96/tdVltiVtrC0l1dc1JPU09WbdDRzM9o+n5YWldu2N7Pz+7lVmbq\nXd/xTWnV4VJPaOrb2XBr/enfWlFw393n4Obm8XFlZGV03tXV53z9/l5SU1dcZujS3e3id1tVaflk\nctjS0N5hWltZV3Xf3d3j+vT=\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/message.9.msg",
    "content": "Date: Fri, 29 Nov 91 07:13:34 EST\nSubject:  A parallel test\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=Outermost_Trek\nMessage-Id: <635263359948198600.21002.2@Jeffreys-MacBook-Air.local>\n\n--Outermost_Trek\nContent-type: multipart/parallel; boundary=Where_No_One_Has_Gone_Before\n\n--Where_No_One_Has_Gone_Before\n\nYou are invited to a\n\n*** STAR TREK 25TH ANNIVERSARY PARTY ***\n\nWhen:  September 28, 1991,  4:30 PM until whenever\nWhat:  For those interested, we'll have a rerun of last year's season-ending\n\tcliffhanger, and  then we'll tune in the season opener and the 25th\n\tanniversary TV special.   Prior to that, if you bring some food\n\twe'll have a pot-luck meal, and general merriment before and after.\nWho:  You and your family, including kids of course.\nWhere:  25 Washington Avenue, Morristown.\n\t(See Nathaniel if you need directions.)\nRSVP:  993-8586\n\nWhat follows is some Star Trek related multimedia mail, the last of which will\ngive you a chance to RSVP on line.\n\nLive Long and Prosper!  -- Nathaniel & Trina\n--Where_No_One_Has_Gone_Before\nContent-type: audio/basic\nContent-transfer-encoding: base64\nContent-Description: He's dead, Jim\n\nLnNuZAAAACAAAFmUAAAAAQAAH0AAAAABAAAAAAAAAAD////////37+/r7e/z9/f7//93b29z\n//////v37evv7+vr7+/z9/97b2NdVU9OT09RWmFr9+Pd3d3e4+vt/29la21ra2lra3vn3dzn\n9+//YVtaV1tp9/PjzsjHxsbGy87P2ef3c2dz/+vr59/Z09HR1dLR2d7n/2lXTUU+OzY1NTQ1\nOD5ETmXf2dLP1dfb3O9jYWNhX19pb+/ZzsjIzMzP43dfVU1RX2/bybu6u7q7wcjN0+1ra1VR\nY3fv7+fZzsS/v8LEztXW62FPRj03Mi8sLCwsLTVFVffLwL6+v8XFy9b/W1tdV1RVWVtr2srG\nytXj/09LRT4/SVtd2MC0r66trrG2uL3I0/dOSE5WWVxn99nGvby7vsfR4VdKRT03MCwoJSYn\nJyowPURb0cfHz9lrZ2tZRktdd+HazcrGv7iwrrC4usHR5W9VTl1pd8i7tLSztbm/xcrb91dF\nPj9DREhXb+vQv7y7uby/wsr3XUQ7My8pJiYnJiYsOEFK38G9vL7Fzc/R72f/1dXe69/v99/M\nw87v919NSUU+PUVMTme8s66urKyvsrO2vcTNb1JVWVNLTmfr2szKx8HLzs3XY0o9ODQtKCYm\nKCYoLjpHacnIx8fI1W9dU0A9RU5nZf/Zxru2rKuusrK3xM/cb1pvd2PXu7Ovr7O2vtVlS0M9\nODM2Oj1ATVfr1cq/vbu6ur7DyutSPzoxKiUjJCUkJS48T+29trSxt7zCyNNYS1FYb+/t2c/H\nvrq6x9HbW0E9PDg6QE1dxbGtqaenqayxtbnC3FFNS1NeZ//c18/SzM7Pz/ddTktAOTUvLCgl\nJScmKCw3QV3bvru2trzCyMjrT0hTe+fXy767urCsq7G4vcn3WU4/P0NJTs+6tbS1uL3Oa0Y/\nPDcxMjg+SlBb3si8urq4uru+yNnvW0c9OTApJycmIyQpLzdFY8i8uLS2urzC71b/697j2sfC\nvLivr7W9xM1bRT88ODxHSnu8rqyqqquvtsDXd1NGRERKUVphX+HTz9LV2t/3b1tNRDs2MC8p\nJSUlJSUsND1I2MC3srK1urm7xldHRUtLTF7Vyr61rKutsLa8zmdKPjpDRlHPt6+ur7K7x+FZ\nRj86NzU3Pk9cb+/Nvry9wb6/w8jV/1pFOzgzLSssKygoLTQ9SNrHvbi3uLq8xNtMTE9eZWfn\nx8G6r6yttLa9ymdGODQ1PUBHzrWtrauutLrC2VlNPj1BRE1be+/jzMLJzNPjXVtKQDo2NDEu\nKygoKignKjA4QGvIv7u4uLq8v83hY2lvc+/Ovrm2r6utr7O7yetURzs5PUdbyrevrq+zusfP\n91lEPjs5OT5FTFBd98zIzcvKy93ja1lPQzs6Mi4sLCsqKzRFT9a5s7O3ubm9vcPnY1dMS1NN\nXdfMw7y9x8rI0V1VT1M+PUdvz76vq6+vr7zCy9VZTkpKTERhc1lr0d3Sy83azs5rXU5EODMu\nKykmJSQkIygyOkTOuLWzrrG/xbu41s7I1+u9ubmyrKytrbS7uuFCOjY0ODlAc8O+tbbAyM3v\nX11LRkZERV7f69PPz9vZyszKx8DYy8vrUT83Li8pJioqKCs0Oz13u7W0srXHwsXcUVQ9PEZE\nQE/XzsC6uL28xcHhRz9HQD5axbavq6mssbC+z+PTRzI8Ojg700ZFd9dN47nDz7+47cjM7ztD\nQy4qLS0jJygqMDNP38vPu7m8vbq2vsfG19fXzsO1tLOvrbPfu77VO0xFNS9CQEXCzL+3rcvY\n4108Qz0wO0jj/93awr7VwLW83bS6wtTDWzowMzMoIyYpIyorLkJd19W6r7K/vLH/zrz3Pc3M\nP2O/zky5s9HIr+dMPkIvNkpM0LinpJ+fo6qvvU5LSzYuMjk4SdDP3sO9z8vFTzZHQi49U0Rd\nzMnN59zrbzA3PDsuLi0xKTAuKz3rxb6urqWgsbe4n6Sqt6rGLTI2Kibrs8XBq8F7MDIfJCEn\nLjtfr6ain5+foqK1w0IvHyAoIzBByc+trKepq7HGZTErHx8fHx8fHyAnMkLIr6ifn5+fn5+f\no6Cx78HhLzRTPylHMysrOiwmTEU4P7Pew7P33atJSa6nc76sr0i2rMNevbs438hIJVlQLyx3\nOCgtNCslMTwuNOPQyLKtqqerrK7GzVvTNS0uRSwmRdM3T63FrqzM377eOT1fKy5XREjJt7Oq\nsLKtqv++wUfXwUss3UYvxNg8c6zLvrLDv75eS2suNy0iLjMfJjsyPa62yq2ipsyrxUq+zT5O\n20e5PTK8yz+8sV/VZ7NFS09NMi9UTTxetFzIu96yvt+7r1ezsMXMa1tO0z05KT0rIkAuMEn3\nQLfnabRWSkfJTDo3yk9DLN+qv1/RyUbrU0lFd0W5tr3Bv7xPZ9EwLsbEPFuvvVO+q7Cup7K4\nY080HyUgHyMmP0BXraOroammta3Jv0tLOygpKT5EL+mst8q7q6zv0cu1UUFZP003LjMzXS00\nRkYq4z0wz0M4QrNFyrNIvsS3T7HG07DDsrasv7m/XbprOzFILS48KD4wRT3XO0TEUEjJy99M\n3bPQY925RbbEa3OvQzrJOsTXTOvJ+9e/68FMr21aRMbDQcdCxMy92a9OwNXzX0bYOlVR33dO\nrcDjw7V31Uc8d0w/OzxTUz4/VdDz99/Ore3G78xCPjxBNi8/Ly85OTMywT+3b83Gzu3Vx0lD\n70nIzFHIt669966wU8RMUelET0DLNWdMa01ttmfBP824Ok9JPeEw6Va/O2e8ULZS07XHU7rK\nuljVw1vXa/tfQ088STlLSmPnzGO/W7/Wx//TxDxNXm8x/85D30nP5bJMw+PNN9Y9V1bBUc8/\n7bG94cO+zmvHZ0zLRz9CQjhZSztAc0TOXjhO38FTyM1XzXNH5z1JNFMqT0RfTdeyXa/pwcXI\nY1fS/87bX9nKzGf/vuHHz/e4T8DzuUpX73vFOs/Nzcr/yOf33kC/d9tcYchP671PxNDUSsL3\nuL3VxLXF+8tMS009KjM4LS45OkTjMtBZ3Ei6wtFKb0rBb0zIxcg6u2HP10vM1O8z2M81QzbO\nR8ZYtMzPU8vPz1HKU8tFYWvM90PdVMZY607HTkbcP8c9zuVFVDrINcw/QzzzZ0q9yeu0uLnJ\nu8NXb9rV+06+Srbf80/Zx8/USctaREndOE04XGFvwsW367fR3L7ezzzeOfdEyEhfw0vBd8xD\nxmvOWlNj5+c+Uzk+ODgvQDM+NUE/WVX/yMnAx3fA/7BlvGm+Ub5Rxsq+xdW988XhVmNGVzlL\nOFpjRMLTtc68w9PMy9vT7VnY8+//593aXc3Wz8/I28vv4UHHUVlMUDxANUU9OktJa9fFy8jK\nw9zM49nKTM5Zd1lR90/cXdTdz9vX3l5jUT5VTW9P2b++vbq/wdJ3Y1dKPkBGPUM+TFlvWs/F\n083Hw9HVzu1nRUg+QTU2ODQ2MzpNTGfcw8nLw8nhx9bO3cnVyMrAxrjFwL3Cu9vC92dcQ005\nPD5BS1Prv8TVx87I1Gfe/9NOa3dvT1X3d3NvzM7vz8jI02drXVM8OTk6NDQ2MTw+UljN0MC7\nv77SynfMZ1djUWtOY3PX0+3ry9Xn3ddlWm9LW0pIR/vdyb6+usPB2tTNZUxJUERLSllXa1nv\nx9bP2cfHx8rK1/9NVkM+NzM3NzM4PFxl18fFv8DFy8nMzszfxsXHzcTBwcjEyc/b299fR0M/\nPTs/TvfUyb64usHJ1W9hU01VV1JNUE1TVG9l49PcyNHN193r729OQ0Y1NjQyMTA2NUJKY8rE\nwsfCxtnZ69Tr39nj7+/OztXdysbP5//vW0NDPT9ARf/OvrivsLK1vsPP0P9eU0peWVFUW2v/\na9nZzdXO1P93d29IPz0+NTIxMC4tNjtFSf/TvLu+ubu5vb3Nztfez9LT19jLxczb/8f3UkRJ\nQz08QEpV28u/wcS/zdNvVE1fUD9DS0hMW13zzsfCur+3u77Jzd1PSUc/ODk2NTAvNzs/PmXj\nz9bJzd7N1MzP29fMydPIxsbAvr7B0cjTy2fnSkJBQ1lRzce+t7u9xMbTd3tXTEdHSU1Tb9nb\n6c7SzcjEyc/lWWFKOzk4Ly0uLSsuMkNPVM3Dvr28vL+8u73IzcTFzNDGy83X291rX1FGPDo+\nOjo5P0Jb28C/vb3Ix9HOzNFzVE1VT1lYXWNn59jNx727vb68ydlfU0s/NDAyNS8vNkVGT2fP\nzM3JzN/v1t1nb9/KzNPOzGGryd/Lw06zzMn3XNHb3TfG12dfsfPCVVfvsllvQkfDP8c64+NB\nUb9Ew9xc0+U8OL9K2FoyLjstOi89NOsuSz22ScPOrsixY8K/+04/47/e373FzcNQuMrTa2Vd\nY0AsP0M4z7a7q666y6v3R1XhPdZLNMjHQN3Id9m349m3wTTFRMI80zE+RTNfWVwsWka6UVlG\nsk3nv8tR9zYwwq9HONTJa008Zaavus6tu1cxLS8sIjDlvNfJpqemtr61tjYrNiciIB8nPz1Y\nq6Kon6GjpajBYfcvIx8iIx8nHys7vbemrZ+rs03rMy03Vc2trK+rr9c8QDo0PeW2tc6zpKW+\nyMXOTyYkJygjKy9GwaijoJ+fpKqryS8/LB8iIh8gKT0+Pb+wraOgpK9r4UY1LjXJwKu1tNVX\nKikhHyErN0vIuMasoa6/zME6LyYuM1VDY6ynp6Ofn6WyxunfNR8fKB8fIyYp2zU5ta9GwKOf\nxdGtrsZb2rGgpK2sqrc/LSwpHx8jMTQySc64rMfBs7c6PU44M2PZyq+ioqGfp62rtd3dPScu\nKx8jLiQr2z8uY6jRO7Gfw0ZfwMJPS8WiprW1r18tICQiIR8q08x3tKiuqq3S5VsnHyIoHy89\nX66foaSjqL5ZSUQ1MSk3KyknO0w7R8GzoqlvvqilTe+3vltS466hq7SutjkjJyYfHyAtPt9d\nrau1r6y43U0sNTctNMjVZ6afq6yrvddKLC1FNjM3PS46RitnscU9rqZra6ejXVGzsr/Z072k\nrNDOyDUfHyIfHyAwyb7DtJ+rw7W7dywoKy4rL1C+r6qfoamptNNvTz8/Qi45TCchLln3PDj3\n59/E+2Oon6/rqaHDP9G6p6/KuLdVIyInJiIlSry/ya6tvLnhz1Q1Kjo/LTe5sK6mn6Kps99v\nPi0kOD4vK0cyLEQ34cG+Ta2rrFU3UKeuNe+wxjI2R7atxdjB3SkfICsiISjntsLNqKOuX8Sx\nxy4kN1xENc6qqKqmrbbHOTs3Ki93Oj7HUTk8Zy85zKpESK6t5+t7p6CqS6yoyDhPxcW+Tklh\nNh8iKiciLty7tr2vpalLSMPILC9fXE3z27+yq6motVhpYyotLixM5TQ+tOM2O+/7vDQ7vai3\nudA1XbSsVEG31zwzOruvs0/d0zghHyMnKitZq6mpt8GrsTQz7eMtM8/JtM5jwKWjrLOww08x\nMt1nND20uzUvSW05P08+zae8bbmhs8Y/PrGt3yu/r9UyV7atyTdT9zkfISs0KTTBqrG/taev\nRjvrxz0wX8LOb//BuK2ssrXYQTA0LixQ1c7JW+9CNSw7SzswP0Jcy6Owtq6zyz0rWa/nLT26\nezwzS7GtzTFBUCkfJDFHRMKtn6evra/HPzE1NisuRqzXPGOyrq+2wrS4vtfDSDxNX0tGMi84\nTj4wOrq30dqmp846wKqtRCc4vksvWq3JL0U3OTkuObGvTzbVUzYlL2vEvbSfn6Sps7zAVywn\nMjw6P0jbwUw7x6/M22dDX0gpKD85Nzw/TmlMOUiyxeO/qqbDWdW5zEzrrVsvNUUzva+v6TpR\nMjQ6Q9exvP84MCwpKTN3uqyfn5+fn6KtvD0pKSsfHy42L0e+xrymuP9P8zgwQELv09c1Lyk5\nNS04tqaosbGvrcw9Pau0TCy+v+tALzTcwikqa8YqKTBNQj1Dt5+qurmzYy8oL9O6wa2fn6Os\nr7bPLyAqLiIgLC0yTT1DvbHL1VlXXVUyNs/GRlG9urvD47iuwsqvqq+80ruqXzT3wzw5Pv/H\nP1tfOSkxQDJBt7nVQEA4W09Uu6irzcvfbzAtQ72/uqafpqyzvVEuIB8fHx8gJCo3QLympbmr\nornLytvK1jo/+/83b763wK2oqa7L78/RRT0/dz4xLTg5N0BZSFH/T2d3b9RLzcbbd2/bSUnr\n/1V7wcHEyr22sLm2trC4vcZ3Ri4pLjMrKjdDOz5Nb9B3Qz1ZUUI4TsvK1bmmpaqqpKesr7W1\ntM1f71UvNT89NTc3Ny8uNkU7NDg1LzE3Pmm/ta+yuLGuvr+4vMXMVUnZzVFjylZFQzk1OTQr\nMDk4P93Pv73Bxs7zSlVv693EwMbCwr+9u8zR01tJPkNQ28vCu8Lfd15JPT5Oz8nfzr24ymdr\nzk8/Pk5PUT5D2dNBP2fX3evPvrrRSklXRTlB/148SnfF0e/jy8pXUt3aZ+O+w1ta52nn72Fv\nyc/3/8jB2/fGvcrvZ01GPzs4Oj88Slr/WGvOz9nEvsPlW2tINjU/U17Z083Jz93v3efrzsft\nd2tIOj1EU2HZx7u1vMDAurzC2tO/y0lBTkQzLC82SURNz7u4vr+7t73BvbzEzs3O0dLzW/tb\nSEpNSUxVZevrTz9KPTI6OTc8R1FOTkxTXV9VXffr187SycXNycnt2cnL0bmzubO3vr/DXD86\nOzs7PkZEODU0OD5PZ8i6u7q6vt/dysjvadnHyv9U08zZa8jEUWM3PD0uLDU+S0ZMVFdES2HL\ntbKzs7Czs7W9z9/Z1mNGS2vf/2Np2Ug5NDw7NDc8Zelnb9fLzM6+vLm9wr7Ed0lN4/9GQkJB\nOzk8RlNNYcbHzMvbWe3W68zEy83MbU1KTz5CTU9AQz9ASVFTY9zT1c/DvLm6v7vAz8vL1Wvp\n7//ryNZ3/+lVUVlbb+fd287L2V/e1eNzX0pKRjk0Okhb5c/KytnV3OPzX1ljZ1NGQUNZ59vB\ns7W8wMr3b3dfT05MXVtfY8a8xNPRzuNIOjg7PTk4RfdzW3fb3dbS07+8v7+8v8PEzN/n81VG\nPTMxNDU1OD5AREtFSFv/3M7CxMXI0tXJxMfKuLi7xOvnztfXzdRPP2NfN3f318jYyMbrU0xV\n5/Nf1cC+yMvf6917e+fba09VTUlEP0FVV0hBPzw+PkNES1Nr7czZ39nIwL68vMnJ7Xfv+1v3\n08vT2uv7/11PTldJPTw7Okbr2My/wMjN2VdaWktFWe9hXevjy8G+vru3xM/VaVNXSj9MV05M\n91FJSlJX99ZvbWFP89X3V83K0W9zSE1NUf/Bws3LydTjyr3IyMj7UfdPUW/U78i+yuFvT0z/\na1FOXFVcT0A9R1dQW+/z2+drd8rB09TK2U1LPTQ1NjVHW1tSysXS78bIw7q+0v9PR01PU9/J\nxMnD309Y3/db691VR0U/SFvj0cDCy9vtNELKL9xWPcRD1dNZvNdrubjf0dfp18nPzNPY/1BI\nPTg6MT7CPGPIxL5HRePFxtvjSt9KP2FZe83Jv9fj7U5PXlHl2XfvY1ZPS1nTyMC+2GV3Xmvd\n98Y3vrA9PD88uuPRr3vLzEh33l/n3cXDylFPMzE6LjY9TENVa/fny8G9tLfC1N1zOlc+Y9Pa\nuMPNx3Pj42Pr3lNXRj53Szaz6zi+P7m6NsRBQbc+XctXVkvczLfFusXd1VxGymHLZ9Xrad4z\nOj00TCphxy5S1y/PRFm/39bLZ0jZY9+9U7nP1k+/OEPFN8HNSc33Mki/P89N2rnTx99Kx1Xr\nOs1fyUk6uz1by0mzc/fE9zx33Efc58Tzx0nlwTjKWzpX0MM199lHW7DptOe/30vPd1ZExtTV\nucA7uz/JwN9lutVDSEtDU9/SU7tBzdRAvE//1z7GRllMO88+uU1ruW+zwUvrb0zEQ8ZLS05W\nPD08R91Gb0ha11XRRcJrb7TXVrpLQ8df17xnylPvvUXKukmxPlS7Ob9KQ7hD3NnIwTjA1Vuy\nSe++81Tbb0Ln31nhzcfUvEbGPM7Pu1S+tjy4Pjm3O8zIUzbE5yzDTVO9vTu1uz62UD27VU+9\nZ3fMzjm+bze+Osq+RDW+7z68OWG8XF9I2zjRNvdc2U1E2Tu+dz64W+W3UVHKvjXF50S/2TDL\nNzfPVTu7SEfITvPn0E292UvKXbhB29W8zle067/3R1awRb/Jzu9t3DhP1zXAW8rYrtA8x7tL\nRq9Xd+9ETdlXQkXAPbzZRNpZv03Ax8tLZzrjey5Ga8Ezw1s30/suz7bdSk7bWN9TPbtMVdFl\n2TP/TsvFPLtZQ84z1Ek42s7nSbl7V8V7V8NvxVE/1VxRc2drwW9B2rNKT8y9ytXRw8FUQsTR\nPURbVjrJPj5GXLFzTrW4zTvMvlLr90S7e0hDtU1GssnVukfY50s843dEONFTzOfMt2td6dHl\nPzTjPys8Z0BMXdm2ulm5u+/nuMdO3N1PNkhVLlVELzJNWzHZxeO5uv9Z1ckyMlHtuzfWpbNd\n16++RjFR0TUrPbzvLNuyVDSworJCr6a6RSlCsc0mMb3NMy3Nrq/DrKKnwWnntDYqQ0g4LTy2\nvse5srbeZT03LCcrMy4yPMO5t6ymoaWvsMZWQi8lJS4qLC03S764/7mpvDzrvy1ES7rWRUA/\nrkM0zavDSa6828XBPjE9QzD/bS7jt2/zzz1nuk4rQctBvUMxsq8+K/fKNSguurbPOUarrktG\nrKGpvby0rN83Q984JSUuT8LHT66frdwww709JUzSUCsu662xSu+soMMrQK/BLCvvs7Q+L1u+\nySoqwbIyMMdKSHdKy7CqX8Ct1d3tyMDNxkwxRTAqLO/dOzZdVUgvM1fRw907z7DBMjrPrLZ3\n26up1FHMvus4OExLMi1E49vnwbOusWHMsbBLNsm2Nf9ZLza8MSjfrDouxq3KY+k7Qcc+LNOv\n38quvju7p61rLTq8qUclOLRnJyzXpK4zK8qtQSc3q7dKLVa4tFkqPbyqazzn685ZOzXDuj0q\nOU0+LkG9r7U6OLGkySkv6aOvMi65o7s8JWmosDMsuKvZKTTDqtErKVOs0yw1rrMvLduotNgy\nWKu2LSnAq9U2xbmxxTAytK82N7VrSrz3LsusVjWyyzHerzguxP8oMbG+NkW03TxHWEy3tz06\nualON83eNkbAQ/Opu109PDU8S93fwL2/Uyouv0Ex26WrTURAPM29OTGzrkUtyaq+ODk7ratR\nK0yyOSY76biw1SdErdEuSv9YrK5ML82nYzNH2XfB1TTzralBM2e090EsUautPzHXres2LVOz\nsb+7V1e6QicnOGW7q9XjrsApKsvTRW9lyqzLJzi+vT8xN8SnxjQvx9dFNEXNwO/rvttTS0Y2\nPK+2PE/APWWyNzO+sTtcvddvvkMxX8//QUq00tjEucVNLylQwrxOMryo/0W/u+fRby1Lrbkt\nU7zN2zw4uqe0Xc7HSigu3aas3F33z1k2K1+qqMo2O0P7bzUyR7S4v9NDTMi/4+OzxEztZ0Zf\nWzE6uPM0OfutrcwoLbiq2TnTzsQvKDi02TvfwSopy62qwSgiVapWLDG3oao/Jy1Ctq3NRV62\n1WVLPz13rr1HSFlD0cBMN1nX18tGOcymwk/LsbpHMig2wbLWW8Oup9EsLOmvv0UvwK7KLTLN\nsK3IOEXHxzwpK+2svG82c7SuVjlWZ29lzlEtSbrKP8O5QS5vw0/Jsj9IvqzdLiEoxKm0NCw1\nO9y+R1OrqNs2JS/BsbTvWee/w005O0e7rLhISbi8Py0+58vGa1PQyc7XU0BJa//Hs7nd/9XO\nzWtCPkvbx8JnQsSzx03nvcXvYUo3M0xb69H398e6y0Q/W9O5v1hC0Md3REY/X8nhXFFbX+ta\nTsW6vcfGb07XzUxE5+9PRT4/Ozc228BnPUA5U8hfR2W/zFVRP0fIvszvtsT7W+lb48LB3s7B\nRjIvUOtPW9VSO0FvVVzRxe/X0/dG97zLyLjDy72270Y/S1bnymVF/7vC3drJzffdZTQuOV1z\n41tAU7e7Z+HDe8u360dOe0k/Ni9Ou8/rXz1G2cXXw7/OwsRdRFF3vMo8NlVvV048Kk7BVztJ\nRDvdwVNPycztz8PKv722sLi+02FCSffRWEM5QVdGPmfUX088OkvnvP89PcS9zsa72NPByGO8\ntr3tX1tV61h33VvfTzw+WktJzspJPVNYVV1vybu9yHfv/1Rdzru7vca/YTxnzsfezM5jd1dv\nXWPX619j+0NLVDw+TUs/Sz82Nu/rXdLZY07r1OdXTlvbwcPfXFdU68jD1dTW1/vfa09Vz9dR\nRv9WQDdNzrWsvlJO08zR1crEvLvETjk7S93N41tnSjw5RWfMxVw9U/PjXf/v5d3n0dF7d+vL\nwL/FTUvXymvvUE//u8FDOTxFUffvTU5hb2VRW/9d+9nGysr3R0nKxMDMVV1Y51Vj6+lMRkZd\n829nSU/Kw2dET1Hc3crQ3e33/0pKXPfvysLJ2V0+PDxP0c7ad1dIRWPT08q/u793P0ZKYcDD\nY1vnX0BHTs64uMtj3s27uLu4ucPN70NCSFN370tPTEBBOj1Zys/nTU9XTUZpv77H70lHZ/vO\n11/vx7/N90xGPEbjy8heQz5EQU1NSWvVY0c7RVPnwsjJy87nXXfDtri6yGdJa+9Tae3r5cnT\nTTk8TNnAw15FW95HUdm/ytRdSV/nT0Rr1c9lPzgyP1H3wbm5ub3DzdTdw8fvVz05Oz09Rk5b\n/29rb1rvyr+3s7i+0Vk/PUzMv9FdTEpLU/PLxcHHyvddSEVWe3dTSkpJRDo/78G/xdNrZVdB\nTNfnY01FRT04Nj/NvL/O4+tvUlnXxru/yVtFPkJt59HFy9/pa1Nvyrq4vcTra1FNWuvNzMvd\na15PX9LJz8vr/2dPRU9r3tvdb0U8PD9Y187Wd1FNSkpV183Cv7zFaU5c993QXUA7NzY2P1/d\n4d3ra29ZV823try/w8fj49fLxsvnTkA9PVHfysfJ111NPzxDX29fU0xJSlRjzsK8ycrjUUZV\nXWve2eNTRkRGTd7JysnMYUpGRlnRx8nVd11KSUVLb8nAwczT5djCvri7vs7Zd0dEZ+PR019R\nTVFNXtfHzNXn/2NMR0JU993pTEE+Q1Pn92NNT09XTlP/ycPP3F9tR0VJZ9nZ1+NJQUVVXc/F\nzVtISUlh68nCwLy/xdPd48y8x9hvU0dEQ0h3zMrU3/9jTlD3ycrnTkVAQ0RI5cbBxc5lRkRc\ny7/AyntNQD5CVtXIy9P7Xlv/49/EvsvaTT48QUdZZWNZc2NVe8a5tLW+ydNdSEdLb9jvYVxf\nWV9ryr27v8d3SURDTf/zW0tDPD9CTWnPz+Prd0xIS0//09leV0ZAQEvvyMrX3t9v7+fp0cnf\nX1lGQExrzL68wMbFy9Lb08G8xe9OQ0JGV//XzfNNTEVET2PZytfvX1dPU2fevri802tZSk5N\nTuvj/1xIRUZZa93Jz+9ZSUlOX+/PzOdPRkE/Rk1f0tHb4e//59XEuLe8y+lZSkZJc8/P+09T\nVV37387ExM/hWUlGS1zv4e1bT0xHSU1l499dTUhGVXfXxcDE3Onna/fj2NPX41lTTUtUZ+Xh\n33tjX1133tHFvL/EyczIx8nN095zWVZPTlVfc/NjTkhJSkhNUld3d19dXXPp08nAwc/j82FR\nTExNWWNZU1NQV2Vt99v3V1RZXWd38+vvY1FQT0tTa/fa3+/p1dfLx8PAwMfZ/11aZXf73d/z\n5/NrX2Nfa9vZ921jVFlfaefd52ttb19WTk9TV01MU1Bfd+vTx8jNztXz493l39XfY2lfU0lC\nSE5dZ11n7efn3M+/vb6/ws7/Z1dv721TWU5MTlFSWf979+9tU1FOW//nb/Pj7fP3/+/f5WNf\nT0FESE1X7+fj2/dfWFVb3dXb1dt3aWNhb+/pd3NhWWFjd8/DxsfGyM7R0c/K0eP7b1RNTVzj\nyszn4953YV1d99X3a2taT1FWZ9jQ2+t3a05HSkxf93dfWVNUXWPdz+Xv/15bV1Nj2dLd+2tX\nUEtQZ9HS2c7W397Wy7+7wMjVb1VPT1Xz4/drW05LTVRt0+ldV1JHREZT39HT1917Y19v49nf\nY1RTSkZKV+HFyc/T71tRUWfRzdfva1RNSU7/3dxnXF5fVl3fxr29wcXM193f18zO52NVTEtL\nXuPM2P93XktFSFPr22tbV1BTUWXVys7vWkxJQT9IY+PpZ2dnY1tn3cvK429ZVVNRV93N0mta\nW1lPTunMwsfN0dXX3s/EvsPO3GNWTEtZ18/Xb2FbUU5P5c/L3W9fUk1JUN3Iyc7nb19YUV7b\n3/tZTktLSlfPw7/L2/djVU9b18zT61hJRkNFXNPV7WdYUFFd38W7u8LO2+tjc9nDx9l3WkxJ\nSU3pzNN3U0dDP0NV69brXlVOTlNf0cPK1ltMRD9AS+3X3W9jU01LXNPJy9n/XlFMTV3azNbj\nY1VKR1bVwL7AxszX5evQwb7I1/tlTk1f28zM329VS0ZFV9fMzttzVUtFVd7Mxcvd711JRE5n\n9/9WTEU+PEFrz8nM1/NjTk7ry8XFzm9rTD9HWefa2+9eUUlL98e+vsTXbVVNVtXDv8LXd1dL\nSmHn09V3VUc+PUV30c3R5V1dUE/dxsPGzV9TRD5G99rT1d1vVUtMXNnIy873Z0pGTnfX0dj3\nV01ESe/Lv7y+x87X79fMxsPK12dTSUz/0snK2FtLRT5Eb+Pb33ddTUZKX9TFxMbdWkhDSVtj\nZ29UST49Qlfr1c7R+15NT+fbycXG0OtOQ0hf697X22NORkvjz8rHx9VvU0dY59XNytLfZ1Zb\n383NzM53UEJATO/W083db1lKVdHKxsfOWUs9PEln3NnT22NJQkZz09XV13tOQj9O39TT2P9b\nST1Ia8vGw8XM3W/v0cK9wcbdXklHUtvMy9HhV0g+O0lc6+//XUxBQUrvycTJy9VtTlNp2dnn\nZ0xDPTtD+9bLzd1vU0hQ98bCxcnha09LVdrLyM3nXU5DS9/Iw8LJ62tMSFvhysbH1/9bTVLX\nxcHCyfddTkdX1c7Ky+1fSUVLb87GydNvSTs6PlNz5+tzU0M/RHvOy8vNe1RCQVXj1M/W6VND\nQErvysG+wtJrU1nVxL++xutPRD5K28zIyedYQTw/TfPVztVdRjw+TOvOycbYZ0xLVdjIx8zb\nVUc8PUxv0MnO22NLRkrrysTFzW1LQURd0MnJzON3TUZZ08S/wMrZV0ZHVd7NycznWk5JWM/E\nwcTWa1FGR2nbz87X/09DQ0vny8bK1V9IPjtGZ+/t61ZGQT5E+9TIytHvWktJT9nJycrnWUpH\nRm3Iw8HF229bVmvKwL/H3WNMREdazcPCxdRnT0hJ/87LzeNVS0JEWdvJxcrnY09OXd/GydX/\nTUE/P0rjzMvaa1FMRk3jx7/E1ftRSUNFc8vL0ndSS0xP98O7vcrfZVVLV9PGyONhU0tITV/M\nv8znV0tFRU73zczfZ1VNSlfvw7zC2W9bSkNCSf/dXE5JREFCS+fHyeddVU5NU/PNv813Z1hP\nVV3jwbzJ1d/v//ffw7zA221XS0dKYdfAzOfnd1lSVePHx91fU0dCQE3byc7/d19XVFfjzch7\nTElDQkdMa8vP92tnVlRb5cS+ym9bVEpHSFfdzHtRUUxLTl3PwsfZ6/dnX2PlysPVa11cV1t3\n28XE3HtnVlFTXuvW5VtTU1hl68y/vcXf721OSUpRaW9RS0hISUxf3c7Q91pbWVxj3c/Jz/9v\nd2/z1czEv8zZ4+Hv49fMycnXX1dRTk9YZd3cZ11dVVll69bP31xRSkhMWm/TzeN773d773N7\n615FQkNESlBd4czV7+vt7+Pf1c3Pa1FOTEtMTlfnbU9NWGfz59nJw83f5+Pe3ePZy8jf8+fr\n5d/f08rX/19fV1dPT2n3Z1FXc/fv7dPIzOdlYVVPTUta92FRTlZdW1VZ7+F3XG//d19d99va\nb2/p3ePr3cvEy9LPz9XvZ2/d41dOVVVPSlRp2913d+//Y15r599fV1thWU9f18rM3dbR32NT\nVlpvVUlKTEtITGPUz9vp3ed3XXPbz9n/e29jUU9d89fj79/n/23318bDytfR6W9de9PKytXU\n1ON3Z3fYz+dvZ1BIQkNNXWdbd+t7e//by8fN42lXSkJDS23vc21vY1tPVu/Y3O9vWU1LTmPd\n0+X3/21rW//Xw7/JzdPjXVVr2djhd15RUUpJd9zT3f9rXldQb93S3fNzW1lPU+XKxMbN4WtV\nSUpdaWtYSkdGQUhezMfN0+13X1hr0MnO2G9WVU9Md8rFydPr3fdd6czBydn/V1FJSVvOxsnW\n92VYTVTZzM3bYUxLQkJW6c/U43dhW1NZ2cnL12lNR0I/TOfT0uddVk5FRV/Z0dxjVUxEQkrn\nz9PnY1lVVmPIuLW6v8vZXU5d3czK2OtnWExLd8nEydn/W0pHTPPPzuVfV05ETN3JwMPS32dI\nPkJc39rhb1VMQkVvzcjI2m9fSkBP28zIzuttV0NFWdPExcrZ51dR98jBxM97T0U9QGXayMfV\n62dGQ03bycbR71dHPkBc0cjJ0etfTkhd1MvJ21FJPTg+TO/Pzt1hTj8+TenNzdJrVEVASuvK\nxMXQ72tQT9nDubm9w89jTlXdy8jI0/dVSEdrzsfGyutZS0NId+HT0u9XST5DT9/Kw8TU/0lC\nRln/3dx3VExCQ2fby8vS81lDPkpd59nV71RGP0Jj18nGyNXpYVfdwr6+wdhtSD9GX9zNyMnf\nW0M/T9/QysnXZ0tFSfPOx8XD1u1RS2PXzMzN2FlDOTpIb93W0XdORD5K+9PPzd9dSz9I79HJ\nxsrYY0pLd8a8vL3D2FdGTevZ19Xcb1dGRHfPwcPF2PtKQkln0M7P22dJPj9Y1czM0/9TQjs/\nWPvj3/9fTD9KZ9HLzNF7Uz48RG/b3N93VEQ9QGfSysbL191dW8+/urvAy+lMP0Nn08vKz+Nc\nS0NW1cvLzfdVSD9J48zEwMjT51NSb8vGyc3/Tj89QV7Xzs7ZX04+PUlr6+f3V0s+PERb08nF\nzetVSkvnw7y7vMjfWktd2c7O1+1fSD5AVc+/wcLPd0pIT93MzM3bX0Q+P1PXzMvPa1A9OTxI\nZ+/l+1lKRkzrxr+/wdddR0VL683Nz+NWRz5Fd9PFwcfP/09OX8a7vb/J50tBRm/NyMfN62NI\nQU/TysrM32dMQENP1cfGxdHpW1NZ28bEx9VZSz87R1zf2NfdVEM9PUdr5+9vSz86OT9j2dLM\n2HdfVmPLvrm5vMHPa1lnz8vR1XtMRT8+T9XJyc/vWVNMV9jLyc3b/1RKTVvRx8rP71VDPjxK\n/+Pf71lQSkxf1cK/yuN3VElNX9PJzNlhSkRCSO3Iw8nX92ldZ9PDvcHU61FGQENdz8nN32VT\nTU1fzsHE1mtRS0ZM783Gy9z3Y1ZRW9fFy99TR0JARFXVy9NrT0dBP0Zf3+VdS0VBP0RN1sXS\n6WdeZ2fZv7S0vMTL0+v/28vCz19OTElNU//Iwdp7W1JOUVnjysxvWlNTWGPdybzF43daTEVD\nTtnO71pfVFRXY87Axf9WT0pNTF/bxt9XTklHRkhdzszna2938/fQvLnG52dTTExMb8jG529r\nX2Nbb8rC129SSkZHSvfGxNh3Y11jXmvdyeNMRD9BRUdezszvZ1NNTk5P88zVa05LSkpNa93K\n0/tpb//r3cW5ub3Fys/V3tnOzN9ZS0lJTVX308vjY11dXF9r49Hhd1VVVV/73czExuFfWUxJ\nSExf/29XU1Fca2/h0+VjTEtLTlRb8+fvWU5PU1tp7dHKz9vb18/MycbGx9xfUU9TU1nz2+dh\nXV1hb+/hzs3rZ1dXY2//48nI13fv49vj7+vjX0tGSE1bXGHn2f9fYWf/92/t0dNpTlFUXVpb\nd9vvXF7/3NXZzMDAxs7V19Xbb+/Z41dRXGtvXV/r3P9bXWd7X1FY/3deUVr/3Xdr2M3VaV1V\nUUlDSF/va1tdZ/djX/PX52tVYWdfTExdb1tOU1dfW2fjyMLHyMbBw8rOy8bO811dXU5IS237\nY1ldZ15XXf/Mzt3r7d/rd2vRxsza39fa/11d9/tVSktOTkdHT//ta2dv/11VUf/j71hTUk9L\nTmPj29/Z1NPW19HGwcTK0d7vXVJb8+tvaXdnWlNb693d7/P3d1pMTmX3ZVxdYV1RVuPNzdnh\nb19NSVL/3djd5ef/Xl1v2tHd6/9bS0VETWl7Z15fV05V7c6+vb29wMfP09PIyNnpZ1FGSVPv\n3N3j/1VMSU5n6dXa529dUVVf28jFys7XbVpVXvf3c11ORkJAR1lz2+Pra1RNTVbf1Nnj/1dL\nR0x3187P09jfd/PRxr++xdl3UkdFTnfd3+d3XVBPX9nMzNHfd1xMS1dv5d93Y11VTVHhy8nL\n3WtPQUBK/87N0ePzaVVY69HM1e9hTkA8PU138/tnV0tHTHfJv728v8PL09LIwb/J52VMPz9H\nc9PW3WtQREJFX+PZ22tTTklDVeXCv8DGz99bU2vY1d9zT0Y/PURX39jfc1dNRUNSe9PV72NV\nSEhO787Ex9Hjd2lv1cK8u73O91tOTmvjztd3Y1hOV3fOxcPI1ndUUVt729feY1FOTFjr0cTC\n02NRQTxDTF3p63daT0tP98/Hx9BrTUQ9RFVv3Nl7W01FTv/SxL+/ytXr3s/Hv77E2l1HQ0ZY\n/9/bb1RKP0Jb/97b42lOQkBFZ9fJxMXO32tz18vKz95fRj89TP/f0s/f+09ER1f34+fzVUc8\nOkJj2M/N1N3/W2/Lvbu7vcnR/2P/1crHzNp3TURKa9PLzM/nX0tGUe3Uzt5fXUhATG3Ry87r\nX0o8O0NU9+97WVpJSFrRw8DDz29XQ0FRZ+Pnb1lMRUBH38jAw8jT32Nj28fBwsnrU0g/SHPc\nzM/nZ1JFRlPdzsvN32NOSkzny8fFydPna13jzcrN2l9TRT5KX9XOzttfTUREV+3V1elTRz87\nP1n/2NXh92dZa8q+ubm7wtpjVFzbzMnK129QSUdn28/N011PQUFMY9/X3PNZSUFDZ83Gys9z\nTUA+Rl/f2dxfT0dBTO/Xy8vZbU1AQEr3z83VZ05BP0nvysK+w87pZW/Rwr6/x+lfR0BJXdnM\nzdpfT0ZHZ87Gx8rlXU1JT9nKwsLK3W1OTW/b0Nn/WUo+PkNpzsjIzntPRURO69nd91FJPzxD\nUOfc4/9bTklTd8S7urvC12tZXePIxMreW05HSFrpy8fL1WNLRUZb4dHX71dNSUlWzsLAxddX\nSkNBW9zL0N/3WU1KTefIyM3rTkQ/PEjfz83XZ1RLR03rwr2+wszl/+3Zwry8w91RSkRCVdnO\nzdlbS0VGTvfGwMnWY0tGRU7XxL/G129cVVFrzcvcX0dCPj9IZ83I1OlXSERET+PO1mNNRUNC\nR2vWytpdT0pGSWfRwL7L1mdjX13nw73D2WtTU1NfzsK/z+9rVE1OUu/N0fdUTkpLUe/Ev8bd\nXUlFREvvzcfa/2dUTlhrzsLM51pKQ0FBTt3M1mdaU0tPXdG/usTO1efr3dTEvMffW0xHSEhV\n0857T0dCQUZP/8XE3nNXT1Vde8a8xM3Zd2FdVXfPzmFNRkJESlH3ys9nWUxJS01e1c/lV01H\nR09Z3cjM72NbWmP/1cW7v8/b7213b97Ew8zrbV9j7+PNxsfab2teW1he39HnV1FLTldb78/T\n6VNKRkhMWeXOyd9rY15nc+vTzuNnVk1NTk9d5+NbTE1KTlb/z8fI1dvd2c3PzsfK91lTTU5R\nW//Z1XNOSklLVmf309tjWVtn79nOxL/Iz9//b2tXW+vnV0pLTlFcY2vh61hPSExjX2Xn195b\nU1Vj9//v19PrZ3Pz1czLxb6+zd/3/+//a+vW2nddZ2/j92/r1fdbV11jXFNV9+tlWVtv7/9h\nb+9vTUlLU2Nj79nL0vd3d+97ZWfn5/9YVVpbUUlPX1xJSVNbXFt328bGzMvGxM3a39ndZ1hb\nbe/3d+PT1GtjaW9zY2/n1etdY//n83vnzsvZ5f9vYU5JVf/3Y3vv429bWXvf/2VjbWdXUFvp\n329pd/tvV1n/29vv7eHR3ePfy8jP2+f/WUxHVe3d7/fj2+9dWW3b3e//e19PSU1z3ePn3en3\nd1xj6/9bUlVPTk1Qa9vc6//vY1dQUXvZ3+vrY09NSVF36+/7d2dlWW/ax8LDw8TJ2/P31tHV\n3v9va1lSa9vP3elnW09IUF7f5+vvb19QTlvcx8fN2fdjSkVMXeXj3ud3XVVP/9HT2edeTkhH\nS2nf63NZUExDRlnn09HV2+/7d+fHvcDGz/9RR0ln2M7O1+tvVElN59fU1913VUlFT93Ny83Z\n82tXWe/R0O9fT0pCP0ph18/T2ftjTUxX18vP1f9hS0dM787Jy9Pn/1ZV886/v8PK0PdXVvfQ\nzt1tU05HQU3nzcvV72NVSEz/2s7Z/19URkVO28fExs7nVkc/S2/r4/dtaU9LV9/Ix83j91lD\nQUpr+2dXTEc/PUFl1c3V6/9vV1nbxLm5vsbTX0xP3svHydlzXUlFT9zMzNZ3W05AQlnjz87Y\n5f9aVWfOxsnQY0o/OzxN3s3K0O//UUdX183HzO9jSz9EVenMzNT3YUxLZc7Cv8PR53dWWdrO\nydFnU0g+QE//0snP42dTSEzlzMjJ02lPRUBL4c7LzudrTUFFTF3v5+tfV0xNb83Bvr/K3ldJ\nS1v/7/9tT0pAPUtl2c/N1ftbUVrTwry7vcnhY05l2c7IxtZ3V0hN79fNz9dvU0FASXfc2dnl\nb11ST9vEwcXK81hBOj5O59XV3W9SREdX3dvb42FNPz1Ea9fV0tl7W0xT18nCwcXM315VY9TK\ny9P/U0Q/QVXr2dned11RTV/b0c/Z72lVS05r1szO0edlTEdOd97d72FTTUhM38W/w8nW51VN\nZ9PJy9xvTUA6O0/v19ffX1dLRl/Hv7u+ydPvU1Nz0cfIz9zvVkpZ1cfL03dUSD5BY9zRz+1b\nV0lGV+HIx87rUkU7PEr709PeY1RJR07jzs3XY0xGP0Fc5c/R32NUSEpay767vMbN5W9j2sfD\nx9dXSD89RHvVytD3XU1CRVLVx8nN71tKRk3Xv7u9xtxzSkdX387R52dPRkNN/8rBwsrvVUhF\nU9jJx9D/S0M8PFHv1d1vWE1FRlHNvr7B0XtTTlHjyMTG1G9XUk3vxMDF0WFORD9DV9vKzdxf\nTUdFV87Gxs9fRT47O1DhzM3XaVlNS1nbxcXP41VJQ0JXz8TH02VKR0VL28S8vcXN3fdt98y/\nwtdvS0M+P0/Xys3fV0pHRk3ey8XP719RTVNzw7q6vs13U0pFUt/X71NIQENEU9DDwtNvUUhC\nRk7TyNHvU0A9PT5SzsjO91ZPTlr3zbq3wM5nT0pMWM7Cx99jTk9OU9m/vsxvUUxGRk3/x8Pb\nd1VPTlf/x73B900/PT1AWMa9x+dpYVtb986+vdllTklJS1rPwMV3TURDSFHpyrvC2etnX2dv\n18DB6VlLRkdMX87Dy2dQS0xOVdzHweFRTUtRWWnMvL/R+1VOTUhL79z3SkVCRk1X3cfA111O\nS09SUufJ1WdMREZITWfHwMrrb2dn++PPvbzPd1lPT1NZ2cfRd1VLTE9Vb8i/zm9fXF9rd9nA\nwNLp/2X39+XJwMlfSEA/QkNR183hW1FPWWN33cbD3GVLSE1NWt3N019OS0xca9bIv8v/Z15n\nY//fzNVvU01PV1/pzsnQb1JRV2Fv0szMe05JSEtVX9/MytdfV1ddVV3/3eVZVFlb8+PQy8XR\nb11bY3f/59/nZ0pER0xZbd3Oy93r79vRzsvGw833Z11bb3P/2dfnWlNbY2t33c/X92Fjb/vr\n79jK1+tr99vX4evX611HQ0NDRUlXb2VPTlNf+//vzsjcb2Nnd29p99TW91dfb+n/d9PK029c\nYXdzV1V361pPU2Xn523dzdNrWmv33f/r287tVVVl7+1z/8/L3Ptvc3dVSlPv811c/9/a/+3W\nydT3Z+fdc1lTd/9dSkpPVE1KWefa7+XTy8vZ1srAyd/j63dSSk5v4/9cZ21fSUhd59737eXb\ne1NV68zR2tPQz/Npa9/3VUpHSEY/Q1vv+2Nrb/dhUVPdzdbb293vX1j/0tDb3+Pta1VR3cnI\n0dXZ61JHSGHrd29v82tdW+PJyM3R1dv/WWHpz9nj4/NvXFlf1MnZ5+ttTkVASmn/a+/j72db\nWe/LzNvb3/dcUVPn2ev/Z1NKQkFV3tnf1dvd93fWx7/Hz9f/TkA/TO/b3+N3YVBHTf/n3+f3\nZVFGSFXTyMbGydb/XF3d0+t3XU5APT1M69PY3ftvU0ZLY9XO0NXrX01MWNXJys/db1NMTenC\nvb2/x85rT1Fv3t9nWE1GP0BS08PDy9j/XUxN+9XN3mddVEdJ98zExtLnWUQ8PEv/3+n3bVtR\nTV/MwcHJ33dbS0xe2czP22lTRDs+X9na3GtdU1Fb18G9wM73Y0o9QlPb0M3X+3dSUnfQxsTP\n61pMSEf3y8jFzc7T82/by8PL42NLPzo6TO3My/NVTEdGW8/H1e9lX1dKTdnNyMXd3+1MTFvZ\nv7m7w91jXlvf2dXea05HPj5Lb9rMzdDvTTo6Tffb3f9PRENFZ83CvcHL419OVGdr5WtdW01G\nRErdx8TE229JQ0z3z8vI1mtLQ0BN79nU0WtOQ0NZ2crAwL/I3VFHTWvXy8vR51tMXdvJxMnZ\nY05MW2vT0N/O0vdcSEbau8XI1UxOQjhET0tXYUlb7UdabdvDwsbdVzxPY8e/bVnjZUtVPT3N\nyr21z9drX2/OzdvJz+9bODc9UePOzVvT1udrRC4qLkqyrK++1uNMZ1tJW0vav6u0t71F3VdC\nPzU1OVJrzsZjX+fKurnM39nj42VGZ2NBY0xOSURANLSlo6VPKh8nSq+fn6Gq50YtJCQrLz69\nu7S998+9v797Ni4xKzpvXbWwrq3H32NI1r/D1vdnP0g9KDlCM/tAMTUvOb+vublGOfdOv6+r\nqbC+SkUuLT9OvLzd1UZPzysuTbypt0ElHyy/p6Gfrba+OicfISnPtbOvvbm3sLe8xTkzKiIl\nKCtFva6qqK+tuGPN28O8yE9jOzlrSfPbR0A4NTp716+tt79vV9rPx7i/0c8yKyslLjUpO6ys\nqLkpHyYwtKu+q662sckvPWNXt9nnx8C1qKq0tV09MyMfHyQvO1NFT8zMvbKxr7DId0E0Li43\nSu/XzdLr1c7Fua+vr7zbzse5ra6uq7HLOTAlKjM0Ql1va+M6KjFbycTeOkL397ywuba3vLvK\nUUppy7W62Uk4MzpP78XI5VM4LCYmLT9Ye//hy8fHyMS+vcnbb1Bf18q3tbzH61FVSkNZ59r7\nST49PUNj0cC+ztPVXkxHQWPN09tpRkVPd8q5vO1dT01RPjpV3MG/xc7Myb++vsf/92VOPjo+\nU99nPTk8SePOzsTD0eljXV1b3b21t8vnc3fbz8e7vclrQDQyMzZK38jGyMzTSEy5REVZ3ExH\nPkdI3b+4v9VfUl5NPTXD0kRBPUhNd86tvM9lSnvrY8K5zsffUDld7V9GSMldT0hOR1w6OstX\nY1tnVrC5wqy+wb9A20VKzvNDrrr33TlHudDOs0fbTzpBOz9fW9PaO1Tf12XG1XdIXThvQ0JX\nv66suEJETeXl0Ve2vmk9Ly8tP1PNusqvu82/1b7C2UNMNjRbSjU6LzPKuLOqrKi12zk/NTg+\nS0vdwjxAQyMyRS3HxDbQybztNTpIvKWkuMq6srVvOiUutKaswCofJSw5u8a2oafGQC8rc9/V\ntbCno6WzyT4uLyonJSsqNjhGurW1uMrTy+PDtke+rFPMtEu7vjNfPi7vQS334TTD2tuptl3p\nY7irt8g5MC4kZdH/PiwrQjkpMC/Koaauu1w+TzIvvLCmqNEz2N9JbSooTkg6LjrPprE7QsjG\nvuM5uKq+ubbPsco8u1QsJCI4sqtBNzX3u0Et86ygo+vHrcOtr8a96yUlLShZqK21UiEfISk9\nrqmjn7NfUzQ0VVTVpaeur0I6STMqLzs+21kvRdK0smE3PETVu6+sqLRTNSMtPzVjuffpPic9\nWb3IzL24SiwpNLKqqKCpuEEnID08zq65sMpCQTIjNbfGvjQjNVVDyKupn6pNQDg221M1trK4\nv0I9vb5bTzU7X0MvP1q+uMrCvr7Me2fExj7G2b+460TBsUozJifZRnvN0cFILWs9QLmyd6u6\nSVYuQ+3de9NvRy8jNberr98uMTU7P/exoKS0UT0vLSQzU/+9tL2xu2dKw+97XTM7NTIyPWm4\nva+pxazKzLGtv7lIVT05NztVyPM9LjtZvs2zqcTGTyzX0b+trMm4QycqKDmuvLezZV88KCxC\n2bO4xLfDPlQuPnfX2b/X/+NXWNXHxrpcW1Q+PzcyP0pTz8LPwbK2t+/O619IKjEtPDdJN9E+\nwttJ07zLvb3MwtHH3Xfvwm9d4zxLPkXnzs7n48Jady5j0//DT9rN71xXOvdP1uNj2etK48rG\nwWfIT1s//9O0ta69w3s9MTA7Y8Xd4c1GRT1Ib8bhzNRfTURFyL64v+NnXUFHZ8nIyndJRTc7\nVdq6t75vQzU5PkzczcjpRTw8PEhYW9Pd520+PjxJ0cy9vuO1zL67u7a5ws5fTzszOj08Vk9V\nWj9DUsLMw85vzu9ZU+nfzcrTx8Ld17++vL3K0VtKPEdJ4+PX2W1va2XPxsHG0Fc+PC84Rltv\nzMvZ0UxKNk4+X07PydnHwbTHw8rt9088QEGws29V/9xZ/+/fzf/f4UlBMTpJTtR7181TST9b\nzW/AykvhTUdERj/Dy8Lpykb3Q01C2Gu9XD8+P8d7y8/LuMvtu97Vyr65tblVXEA6aUZv5Vvn\nQmtZxWXv0dpGv2vD58u0Z8M93Dj7P7r3usrf00dCRkLPY2nCTUw/Umfv41Hd/81PPldPZ/Pb\nS8s7Vjlv78i6wrzr50DnTNTfv9hf60fORlTFUbg/7zxRQP/UT7tpWUdEVzu6293G1sVJ2z7A\nwsfTslXWSVPXOsFOtFW5RWVMyEpGvUPISL49ylPO1+NYuFPN6d61xMZnwzfOTU/hvU7fa0Zc\nNVLrvt1H93dNWDXbTLBPUss+vkFXR8FJvl9bW0HMSV9Jx0TZQ2tXQ7ZPtD57N1NOMck4u8tJ\nWEhnSfdIs1fFT2/fU9w/ulnFv1F3PzrOd1e40XfRLkXfOtfA/8iuTVW6Pce+RLXEV8PrPbrH\n97zIPcY2K807Z8Nb7/+8P//fQq/3VcRIU0g3xP/LzVlZ/1VI2M/Gw7pWRdFHTHvdU3dTZ2NZ\nPjdRacjr0ffN1kBtRP/VPk09PEVBy8HFusnR401PUs/K18xHSkJKW02+v76/TE7ZUstZzcrJ\nZUhHOEVVZ8e640Vvt7XM2uPJtLXF4ffpz+dcVTo9ODo1Nj/P6dvOb+vF1sy7vca8XfNhSENr\nb2XjWVD3UF/Ku7i/yFNLMzQ5NlBDSkJGRUfr1Lu1uLy91sra38Bt49trRDgtPELvuMdfSTlB\nOVtJU19Fd0JGPz5Kvrqusq+ytru9r8G63TkzJSYiKiw4S0vZybuzq6ukp7CxyW9QQUhJ005A\nODs/Ql/Kt7CvvN3Ma1U5RsO+a0UtLC41V+vVREQxP0lTR9HNwrq+u83Hu7GqoaSpqa+9y/9L\nOykjIR8fHyAiMTxU08m7wrOusauuusnKY1PfTV3vY/9tZ9PJy7+2sbzL6VVJSjtFSThIQko5\nNzIzQOHLY1tAPkjOvLOtrbm4s6+pqaWqrLe72Vk/NDEuMCgoHx8gICcrNFFQzb+zrKekoZ+i\nqq66ytlr+0tTPzIuMjE3RG3NztDR2/vnztXNxl/VQT85OTU9Rk0+Ozo4SExvyry5ubq3vre5\nt7GyucPT22tlV0E+NC8rKywpLi42PEdHV9fOvL23sq+ytbu2srS0sri8zOf3b2PcX2f7UUJH\nQD5JOT4/Pjw1OzlNTO/ey83LxMG8v7vAuMXdZ0pIS0tLWm9jV1lUX1dvZ97e/1VnWV/Ta8XJ\n61lMS01YTE9fd29349/Z3eXb1NNdae/ZzdPHxr3Jz9Hn72NUSFhPRENHSFtZTuvl/2tlY2Nf\nS05ZWVhMWenb0dXMytvf+9Xj6effy8fV18/Kz8/XzMzfe/fn49Xz5dHdV1lcUVJISU1vTklO\nT2FnWl/33G9hY19eW01Za/dfZ+n382Xd0t3rXf//929z38/V4/vtb1hPSFl3Tk1MT09JR2Pz\n3f/3d/NpTWndys3RzcjT1OfVzcrd891391tW5+HtZ+Vv61RMXWNjWFtYb29WY9/b2+Pf2WtL\nSVB36eXX3ON3d2vSzMzP2dvnX1Jd29vn9/dnXldf4dvc6d/l329v68/V43tdWUhGS1rr42tr\na1dIR1Fp6+//42NJR01319TX0s7be13t0tXb6+vzX1Ra2c7K09LX7V9VXefZe2dVUUk/QlP/\n9+93b2dPTlnTxr/Cv8HV71nt3dPa3/d7WVhd59DT3+HvWk1JTv/7b2ttXV1SV+nZz93/ZVRB\nP0lV/+vf2d1zb+vMwMLGzNfnXVRj2dHj81lOSURLY29tb1lXWU5Z79PN1etVS0NBPdtzR7Zd\nSsxUxd9KubHv91gw105H1ufQxs9lb+P/z8TU19tXSEDj5dG8d72+XMPrTP9hW8/fO1ZCPthL\nX9VNXGdOSv/3c8a/Z7rAz7nAvthV50lIPUI5P1FG1mdVPUpP77vR3co741Jdurm9wrHnM08q\nMMI3vLs7tzAu60tPOq6/tLAzRD02z3exoq28OiwlK0A0v7dLtt5EvVPEws9pZ9c6zEQ1yELj\nt9+wVFa4SLq4TrnN/y7KtLqsVy0sJTytpqCgyTsqIjXF47i57bS/QkIvNNm1rLjVMSw5Pr6z\nycvzV0lWV2+9s7KzUylbt7mvSywlHylZr6mpvywqHy1D17yqqrOtPDEvJ1e6sq3OPVM8XcZU\nuuFzx2lNQm9fsK+9Wiv/ubW0MykiJtyto6jDMigiOXu9rdXM3ry93s4+RcjDzcTtPNJBSesy\nYUhnuLPUzr93qqtJPr3Jq8YuKh8o0a6kqksrJyBE48S061NPxMzfZzNPxsK9VDdBPUp3S09K\nR1XazsfFuLy6wkKuvrWuQTwjJtOspqtfJSQjO7+/t1w1QNPKyvcuREpzwONfY07pyczlVVtM\n48rBvbqs0zi5wqmv3dcpO821oK/TMicvP8u7bTw+aePNazpEPmPB381ZQlNAT1djy9dOSjbW\nuLZQu620p287KSrNq6OmzjMkI0f3vb9K6b3EvDwqKDjKsb5OLSg1T7e0xt9IO0RpzrFz/7HC\nqPc1SyzKtq6fuO8yKDZfu7rDS1NnzL3L30dHVU9HOC8yP9vCyrxIODgv07q+w6mzpbw0Lizr\nrKWfs0IoIytItKqxtldN5z/XzrSrtXcvJh8qNme6wLlMMyooUU7RrKSoskMpLT20rKu0NzUt\nLFrItL3NOV5N78Jrv77JyE00MC0wU0/CtPdWKyg+NkPbv6+ouzwmKE6tn5+r0zEsL1S3q6jT\nzUtLyWe2t6620Fc1Mi85RHe9vsE8KjEtPF/Gy6nJv0ErQzDCp62q3UEuK0S+sry467uxwLpv\nz8PNSz8uKi4rP2POustMOy8yOT/Hta7KPCgqLNy4prK50TNbWtumta2247C/v7rJzNlKRjor\nLykpOkHfykVILyxfPEzTOLew37RPO1g+r62ssU1NP++tv7y/17a/wsfJuMfZXT03MC4pNDJF\n3mfeRzI2NGPI2bzTvbS0uFNMQE24sauyzG85b8K4ucxeVcK2r8xIOTNBOzM7LTEvN+Pd91M0\nODk6RUzr1+PIzq2qrb89PzjBqqqor8jlZ0lJQzrMz8HDZVFAPEpLQWc0R89IzGsvM2s381Y7\n777VzK5luLDTqefHs8nHu7G1uMdGXHtX3chDOF00azo090FQa026O09MYc08TznERUfLSLJT\nsLZetEnzssSrZ6++vbZVuGO8VN86OdssSTYwQDIrSzlVPm0v4Uk6zDjaaz/Qv7G+vtq2Q7pG\n3dDK4fu2V7J7xFW9QL9nZ1Q9wD3GNOc1a0JrRFVfQ8VX0EB720xvvtDHvM7O7enr0mfK07/I\na8Xe48bV1XNtPd84zj/ZRVb3T2tvS+dPXE3pPctHX0xB/+PV40q3SbZKzEPIyT/LN8tU92Nd\nyG1La+FPwVW23Ne4XcNZwTrHP9BdRlRETUPvWm0740e/b0HjXMxbzMBKuN/FSMJvxMZKy/PV\nUsFDe9HtOXfZa99KsljEzO2/493r0NnATbdD0jbzPt3jPuVEtlq6P70/uTxT60zaQL1PxErn\nOOXlMtM0zlB3R0pZPnc32kvlTNFFxvdVxVddV10z3k3v69NjWsJP88lQxDjBO81X6/vnv1LR\n5c02xDPPXnfJ77blvj67Qs89yfv3Wul3Yds6z+vYe+NXVdNYytzMP89MwMtBvsvKxMg3xzVb\nTXdLXVxpY0nEMME/xsZV6dm8T7dIv03AXUjRP85CwVK8y1LXVGn/XMftS8s9zd86Ous8vknb\nOt4z7XM6wzPBTNtOO7pGs07SyEvOX+FOve/vSk/ZQWdjYbZvwkfnzVzMXc7Mukm+U0jbbT7r\n1N3lQbVNvNPFb7mwQLvIWLlE0bs4yjRt3DbJO0fANs3LL9dGPb9TXE7jc3e8RrrOQq86ybU6\ns01OtTy6SjxNX0tvbW/P20tLvzO+b0W/Qla+L0q/S17ASl3FVP+63cK9Sc7zOdQzPN49c2NF\nRldCXMdRWu9BY8ZFzVpZwdbVx03n2sXVvm+/xGvUSUvlzd3YysjfxUNC7We+usbjyj1XSEpS\nRk9F607/0eu21b/Azc7rS+NlZdlFT0VMyHfF1eG728tMTUBXZ+v3QUU4Pz9TR19Nzr7Lv0M8\nOmHEsa+94TQ2MkVOT1VFSOv7w7+5v77T1PNKPjU+Tnfze2dv7829sK+urrrIa0pvQ0VOQUM9\nOD42VWtdys/N0ddXzsC/uL7L31NLb0rMa1/PU+NcTlVV23PRXktRQUZdzrvDwO9QSU3lwb29\nxVM9MTdAU9fZzslcb1VZx8zH09XvTE9ITFrf385rX0E/P0nn1c/OX0tPPlpp3dzO1VdJRElL\n42/f/1tJVUta1dvPxc/KzWfrd9O8v7+/3ttMTv/c2ettSFVDSu3nu72zvb7JY9N31evcW0RC\nMz88a2H/505GPD40Tl931tnv70v737y4trbAxu1XXF3nzOfEZU9BP05h1VvRTV1HPz9AZ1zP\na/NEPj4/U9nMzcne72/71b7DwMHZ/0pFQVnv88x371NFV0fp08rL2VpRQU//z8rIzuNcTk9Y\n3czL3edbRkBLV+vGyMjR72dbb83Hxb3L2W9NR2ff38/vV0hBPkr/zsLGw9PfWVXj1cvO03tN\nQz1FV//K3+9RRT47Q2fv39NZa0nfd8i/w8DnaUJERFPj18/e911KSVxzwcHJd0pHUvPT0V9L\nTEn/y7/Fzv9YS05dU1dN2cS3sri/50w+RFXl6+dJOz4+RlbMx8TGyNLP7e/fy8HIzfdpRUVH\nT3dv61BMQz86SG/ZzMrM3M9z59XHz97Wa1pRTV3PzcrVTUk8OVfjw7u/1+9vT1ffxcDD305D\nQj9AU9labT85OTs7W8i/vc9jRUI/Ud++sbW4wM9aT09czNX/d1xET1ddxLy8zsnOT11OTM7P\nY18/OTg/RtjHzNDj2tVj08S/urTMz9FrTc7F68BLM089MUJH4bvKT2dXSkhtU9fR21/HVVVn\n5dfOVkc+ST9S6+PK00hV3Ur/1e3DytpO+2k/U0xjwMvpytte71nhu8C93VxDQU09aczj3mdX\nVW9N29PS11RKT0c+Rk7vbef//1vP7XfAxsbKTc7tUdH/zL7Oz9Fve2NTb8rz81tHQTxKU8m9\n7+N3RU5BWdXNwcnJyu/jTE7NycjOWXdAO0dT18FvVFVDRjxSWO/VTUfzPHdbP7zP0MJFXc9E\n3vff2j9VTl9v69u86+ndREJNQ/fAxczvRl9RW3fz389n3/vRVctjxbjAwMZRVUxO2MnBv+dh\nY0lrTvNd7/NVZ01fTEpS51tr7+PczOPL29DOTkM+REhIbd3M2FdpUFfX98fAxMnj729T32vJ\n2uPZVltWU+fRv87ca1JTVV3V2d9RPj89Q0JPTsvz5V9zQmdMY97Vy+9RWU7f3ci5zs1YVETZ\n///A1+XdPVhARdFvv8/dXEBDRUfr3rzO2fdYTlRfVcfJysv/ymtvzcS6wdHvS05Qd93RzGtM\nTEhIS1dnY1dJT1dHV0hn5+Nf2W1n2fvZw9TOSk5dS1tr0s3Fd1PjTOlpRtJGY15D1f9rym/N\n2FNX62fY3WnOVeFVR+NPb2Vf729JR0tS62/nxefH0+nOb1nnSN3vVtvr2tFPb2vR29v3zFVN\nVT7Rb1DP98nNXl1d///nZ8Npd+dNzNPNy83B3dRK2mNP3D3a52/PX7/KxdHYyEdVSU7LXNnn\nR2s8O11N81lMSkI/Q0hd0+XN52/GXNe907vve/9HUURzysTH52tDY0JMW2/K9//dRVlRb8rK\nydx7b1xbb+XT0M5n0/ff3t3Ra8xpT3dMRVd7xtfJ69ldYXdK0NPpXndl2f/zzNfeUUNHd1fv\nd3fXUltRSGtTe8DOudnzd2HjU8vjxtlrW1tr8+PYz29UP0lPd+vPzs/KSttLV/890mf31UNj\nXz9HREvcWdhZQWU8aV1j++v/c2d7bdHCvL7M9+ll/13329vJWFFvS2dX0+vS6Wd7UWtU5+PM\nztDbydPr0NXR2tnU3Hfbb//a995lX0g9TUbP1tTXX1dMTEj/3e/PZ9lNZ0VjzdHMzuFOS0Nb\nc83O51NEPz1MVdDHx8rd72lPUv/rz8/O1llMRExf43v/b0tPUVvHv8fG+2djXWfZ18Hn71lN\nW1NVY9Tj2GNIQkJCVtfpzmNeTWP/58u+xr7b3/9LZ03Tyr6//19HR1d33czM129ITFZNz9Zv\na2tX5U370N/B0f/TW1djd8jF299TWlNJQT9P89vf+0xJP1jhz2dPQlPd19/f2czJymNVSU9c\n/+NfW1VZSkxFSczMw83nZUZdd3fGy+POT1tZRmnv2dbO5fdHW2frwrzFwsvVTlNX7+Xpymtn\nQ0tP3MXf2Fd7XklHPUZv2e97UUlGS9nLw73O2l1OTmft0czN0Vv3TGdj38nO1ftfUE5TXsrP\n119BQE5OWd/SxcXPUUk/XdDHusfXXU8+Pk1SxsrLSkVAO2X3a1/Vd/dTPkRU4cPN33da/15c\n/8/M22VTW09ATP/Evcbba2NbW/vQ0cvNZ2NGVG3rwtXV011RX1fby7y+0dhz90pTY9z30d/3\nSzw+RtnPzednW0tHRe3Zy97XT0dDRm/Rv8bPe91LQU5P19vV309KQUNA38nIwtP3UUdO283Q\nb+ffV05HRHu/wr/Za1tDY+PAucLJWVtOTk1e59PH5d9IP0Bd2MZp329XTDo8X83Hy+ddY1xT\n1MnAw9vZY09DTnfBvcbbb1BFSErXy77Gc0I7SkxYY9XG0dtYU1l717y7vM1rVlpXa/fRy19v\nQklCSPvWw9xDQ0lEXWVj3P/ZTEg/Qk3pzdXIxuNVSz9N58zBe0tPPlFPb9HFyMTrVVtr3b/E\nw99VWU9KQ2/Xw8jO41db7+fUyL3D209GP0XfztPZ5WtbVkZP48nP505NSD5Md9nZ62VfXVlM\nZcy8vdVeTElh49fBw8bZVEpJS1tvXl/37WtRQUNLY9Tj71lNTV//zMfMvb+/20ld7ce+d09P\nV1lFRFTXx9ZVQ0dPUVtt/+f/41tGT2nXw8Pb7+1OTkNEW8/L2HdTSkhf987Mxcn3X1/fycDA\nzNvL129ORV/YwsPaZ1FPVd7b5+Xr0NdRPT5N99nW2d3lT0xW/83F1c9fSUBCXHfb1uP380tJ\nXVHW19zaW09FT3PZzMzR7+NaTk5DT9vnZ1JMRUNOX9fGzNX/911j/8q8ubrQ2efv7//rzthn\nSUZITlFNY9t7XVNJSUVQ39XO71Xv62ldd9zBx93/UldfaW//5+Xt/2FfX2nZx8v/+1FdaV/7\n79XI/09PRuXP0c7P69pvVVFKW2fbzNtbWUth/3Pr69n3a2ddd+9v2vdTUU9PVVdt69/la1tb\nUWdjb/Pje2P/Z2/3593S2ePl73tz/2/n53tbUk9TX+ff3uvv6+Pv0dnPysXL13Nne+3n6dvf\n7XdpXF1dZ2tvWVlYV2FXY2n/6ef/d2/v39/d3eP3X2NaW2l3/+//b+9v9+dvZ+/p5ettb//n\n/3Nrb3d3729nbf/Zzt3r+93naVtYd+ttW11dZ2tv8+/j82drYV9jZ//j/29nd3N37/Pb3/93\nc3NrY2d77+dz93d7///73+H393trc/f/+/f/7f9tY2N77+/j6/fz9/v3997Z3e///29hZWv7\n9/f7d/97d3d3/3d3a2tjX11n++/t9/9zb3dvd/Pv93tvb21v/+/r93f/////d3f37/f3d3t3\nb3t3+/f/9/f3///38/f7/+/z/3t3//v/e3Nvd3d3d/////f7//97d///9///////////+/f3\n/////////////////y8=\n\n--Where_No_One_Has_Gone_Before--\n\n--Outermost_Trek--\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"/\")) ((\"Other Users/\" \"/\" \"TRANSLATION\" (\"Andere Ben&APw-tzer/\"))) ((\"Public Folders/\" \"/\" \"TRANSLATION\" (\"Gemeinsame Postf&AM8-cher/\")))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/preauth-capability-greeting.txt",
    "content": "* PREAUTH [CAPABILITY IMAP4rev1]\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/preauth-greeting.txt",
    "content": "* PREAUTH IMAP4rev1 server logged in as Smith\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/select-inbox-annotate-no-modseq.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [ANNOTATIONS 20480 NOPRIVATE]\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/select-inbox-annotate-none.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [HIGHESTMODSEQ 2] Highest\n* OK [ANNOTATIONS NONE]\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/select-inbox-annotate-readonly.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [HIGHESTMODSEQ 2] Highest\n* OK [ANNOTATIONS READ-ONLY]\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/select-inbox-annotate.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [HIGHESTMODSEQ 2] Highest\n* OK [ANNOTATIONS 20480 NOPRIVATE]\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/select-inbox-no-modseq.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/select-inbox.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [HIGHESTMODSEQ 2] Highest\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/setquota.txt",
    "content": "* QUOTA \"\" (MESSAGE 1107 1000000 STORAGE 3783 5242880)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/common/status-literal-folder.txt",
    "content": "* STATUS {19}\nLiteral Folder Name (MESSAGES 60)\nA######## OK STATUS Completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/courier/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/courier/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc.  See COPYING for distribution information.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/cyrus/authenticate.txt",
    "content": "A######## OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE SCAN IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH] Success (no protection)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/cyrus/capability.txt",
    "content": "* CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS AUTH=PLAIN SASL-IR ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE SCAN IDLE LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/cyrus/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS AUTH=PLAIN SASL-IR] imap.ecs.soton.ac.uk Cyrus IMAP v2.3.13-Invoca-RPM-2.3.13-1.0.JKF server ready\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/domino/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 AUTH=PLAIN LITERAL+ NAMESPACE QUOTA UIDPLUS\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/domino/fetch-extra-parens.txt",
    "content": "* 2 FETCH (UID 14935 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 4 FETCH (UID 14937 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 3 FETCH (UID 14936 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 1 FETCH (UID 14934 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 6 FETCH (UID 14939 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 5 FETCH (UID 14938 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 8 FETCH (UID 14941 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 7 FETCH (UID 14940 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 10 FETCH (UID 14943 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 9 FETCH (UID 14942 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 14 FETCH (UID 14947 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 13 FETCH (UID 14946 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 15 FETCH (UID 14948 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 11 FETCH (UID 14944 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 12 FETCH (UID 14945 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 17 FETCH (UID 14950 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 16 FETCH (UID 14949 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 19 FETCH (UID 14952 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 18 FETCH (UID 14951 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 20 FETCH (UID 14953 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 21 FETCH (UID 14954 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 24 FETCH (UID 14957 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 23 FETCH (UID 14956 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 22 FETCH (UID 14955 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 25 FETCH (UID 14958 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 26 FETCH (UID 14959 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 28 FETCH (UID 14961 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 27 FETCH (UID 14960 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\n* 29 FETCH (UID 14962 (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)) BODYSTRUCTURE (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0 NIL))\nA######## OK FETCH completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/domino/greeting.txt",
    "content": "* OK Domino IMAP4 Server Release 9.0.1FP9 ready Fri, 14 Dec 2018 08:38:25 +0100\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/domino/list-inbox.txt",
    "content": "* LIST (\\Noinferiors \\HasNoChildren) \"\\\\\" Inbox\nA######## OK LIST completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/domino/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"\\\\\")) ((\"Other\\\\\" \"\\\\\")) ((\"Shared\\\\\" \"\\\\\"))\nA######## OK NAMESPACE completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.1.txt",
    "content": "A######## OK [APPENDUID 1436832084 1] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.2.txt",
    "content": "A######## OK [APPENDUID 1436832084 2] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.3.txt",
    "content": "A######## OK [APPENDUID 1436832084 3] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.4.txt",
    "content": "A######## OK [APPENDUID 1436832084 4] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.5.txt",
    "content": "A######## OK [APPENDUID 1436832084 5] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.6.txt",
    "content": "A######## OK [APPENDUID 1436832084 6] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.7.txt",
    "content": "A######## OK [APPENDUID 1436832084 7] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/append.8.txt",
    "content": "A######## OK [APPENDUID 1436832084 8] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+annotate+replace.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE ANNOTATE-EXPERIMENT-1 REPLACE] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+annotate.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE ANNOTATE-EXPERIMENT-1] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+filters.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE FILTERS] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+fuzzy.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE SEARCH=FUZZY] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+gmail-capabilities.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE X-GM-EXT-1] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+replace.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE REPLACE] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate+savedate.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE SAVEDATE] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/authenticate.txt",
    "content": "A######## OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/copy.txt",
    "content": "A######## OK [COPYUID 1436832101 1:7 1:7] Copy completed (0.020 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/enable-qresync.txt",
    "content": "* ENABLED QRESYNC CONDSTORE\nA######## OK Enabled (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/examine-folder.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS ()] Read-only mailbox.\n* 0 EXISTS\n* 0 RECENT\n* OK [UIDVALIDITY 1543354378] UIDs valid\n* OK [UIDNEXT 1] Predicted next UID\n* OK [HIGHESTMODSEQ 1] Highest\nA######## OK [READ-ONLY] Examine completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/expunge.txt",
    "content": "* VANISHED 1:14\n* 0 RECENT\nA######## OK [HIGHESTMODSEQ 7] Expunge completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/fetch1.txt",
    "content": "* 1 FETCH (UID 1 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4) XAOL.SPAM.REASON 0 XAOL-MSGID 1 XAOL-PAREN-LIST (XAOL-TOKEN-PARAM1 XAOL-TOKEN-VALUE1 XAOL-TOKEN-PARAM2 {17}\nXAOL-TOKEN-VALUE2 XAOL-TOKEN-PARAM3 (XAOL-SUBTOKEN-PARAM XAOL-SUBTOKEN-VALUE)))\n* 2 FETCH (UID 2 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 3 FETCH (UID 3 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 4 FETCH (UID 4 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 5 FETCH (UID 5 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 6 FETCH (UID 6 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 7 FETCH (UID 7 FLAGS (\\Seen \\Draft) MODSEQ (3))\nA######## OK Fetch completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/fetch2.txt",
    "content": "* VANISHED (EARLIER) 8\n* 1 FETCH (UID 1 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 2 FETCH (UID 2 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 3 FETCH (UID 3 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 4 FETCH (UID 4 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 5 FETCH (UID 5 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 6 FETCH (UID 6 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 7 FETCH (UID 7 FLAGS (\\Seen \\Draft) MODSEQ (3))\nA######## OK Fetch completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/fetch3.txt",
    "content": "* 1 FETCH (UID 1 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:28:25 -0400\" RFC822.SIZE 253 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:28:25 -0400\" \"A\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<a@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {2}\n\n)\n* 2 FETCH (UID 2 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:29:25 -0400\" RFC822.SIZE 282 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:29:25 -0400\" \"B\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<b@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 3 FETCH (UID 3 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:30:25 -0400\" RFC822.SIZE 298 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:30:25 -0400\" \"C\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<c@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {47}\nReferences: <a@mimekit.net> <b@mimekit.net>\n\n)\n* 4 FETCH (UID 4 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:31:25 -0400\" RFC822.SIZE 282 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:31:25 -0400\" \"D\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<d@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 5 FETCH (UID 5 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:32:25 -0400\" RFC822.SIZE 330 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:32:25 -0400\" \"E\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<e@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {79}\nReferences: <c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\n\n)\n* 6 FETCH (UID 6 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:33:25 -0400\" RFC822.SIZE 282 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:33:25 -0400\" \"F\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<f@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {31}\nReferences: <b@mimekit.net>\n\n)\n* 7 FETCH (UID 7 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:34:25 -0400\" RFC822.SIZE 253 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:34:25 -0400\" \"G\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<g@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {2}\n\n)\n* 8 FETCH (UID 8 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:28:25 -0400\" RFC822.SIZE 253 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:28:25 -0400\" \"A\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<a@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {2}\n\n)\n* 9 FETCH (UID 9 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:29:25 -0400\" RFC822.SIZE 282 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:29:25 -0400\" \"B\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<b@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 10 FETCH (UID 10 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:30:25 -0400\" RFC822.SIZE 298 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:30:25 -0400\" \"C\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<c@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {47}\nReferences: <a@mimekit.net> <b@mimekit.net>\n\n)\n* 11 FETCH (UID 11 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:31:25 -0400\" RFC822.SIZE 282 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:31:25 -0400\" \"D\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<d@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 12 FETCH (UID 12 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:32:25 -0400\" RFC822.SIZE 330 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:32:25 -0400\" \"E\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<e@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {79}\nReferences: <c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\n\n)\n* 13 FETCH (UID 13 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:33:25 -0400\" RFC822.SIZE 282 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:33:25 -0400\" \"F\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<f@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {31}\nReferences: <b@mimekit.net>\n\n)\n* 14 FETCH (UID 14 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:34:25 -0400\" RFC822.SIZE 253 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:34:25 -0400\" \"G\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<g@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES X-MAILER)] {2}\n\n)\nA######## OK Fetch completed (0.019 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/fetch4.txt",
    "content": "* 1 FETCH (UID 1 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:28:25 -0400\" RFC822.SIZE 253 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:28:25 -0400\" \"A\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<a@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {2}\n\n)\n* 2 FETCH (UID 2 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:29:25 -0400\" RFC822.SIZE 282 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:29:25 -0400\" \"B\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<b@mimekit.net>\") BODYSTRUCTURE ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 1152 23)(\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\" \"NAME\" \"cc.diff\") \"<960723163407.20117h@cac.washington.edu>\" \"Compiler diff\" \"BASE64\" 4554 73) \"MIXED\") BODY[HEADER.FIELDS (REFERENCES)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 3 FETCH (UID 3 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:30:25 -0400\" RFC822.SIZE 298 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:30:25 -0400\" \"C\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<c@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {47}\nReferences: <a@mimekit.net> <b@mimekit.net>\n\n)\n* 4 FETCH (UID 4 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:31:25 -0400\" RFC822.SIZE 282 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:31:25 -0400\" \"D\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<d@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 5 FETCH (UID 5 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:32:25 -0400\" RFC822.SIZE 330 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:32:25 -0400\" \"E\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<e@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {79}\nReferences: <c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\n\n)\n* 6 FETCH (UID 6 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:33:25 -0400\" RFC822.SIZE 282 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:33:25 -0400\" \"F\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<f@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {31}\nReferences: <b@mimekit.net>\n\n)\n* 7 FETCH (UID 7 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:34:25 -0400\" RFC822.SIZE 253 MODSEQ (2) ENVELOPE (\"Sun, 02 Oct 2016 17:34:25 -0400\" \"G\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<g@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {2}\n\n)\n* 8 FETCH (UID 8 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:28:25 -0400\" RFC822.SIZE 253 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:28:25 -0400\" \"A\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<a@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {2}\n\n)\n* 9 FETCH (UID 9 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:29:25 -0400\" RFC822.SIZE 282 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:29:25 -0400\" \"B\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<b@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 10 FETCH (UID 10 FLAGS (\\Answered \\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:30:25 -0400\" RFC822.SIZE 298 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:30:25 -0400\" \"C\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<c@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {47}\nReferences: <a@mimekit.net> <b@mimekit.net>\n\n)\n* 11 FETCH (UID 11 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:31:25 -0400\" RFC822.SIZE 282 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:31:25 -0400\" \"D\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<d@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {31}\nReferences: <a@mimekit.net>\n\n)\n* 12 FETCH (UID 12 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:32:25 -0400\" RFC822.SIZE 330 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:32:25 -0400\" \"E\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<e@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {79}\nReferences: <c@mimekit.net> <x@mimekit.net> <y@mimekit.net> <z@mimekit.net>\n\n)\n* 13 FETCH (UID 13 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:33:25 -0400\" RFC822.SIZE 282 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:33:25 -0400\" \"F\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<f@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {31}\nReferences: <b@mimekit.net>\n\n)\n* 14 FETCH (UID 14 FLAGS (\\Seen \\Draft \\Recent) INTERNALDATE \"02-Oct-2016 17:34:25 -0400\" RFC822.SIZE 253 MODSEQ (3) ENVELOPE (\"Sun, 02 Oct 2016 17:34:25 -0400\" \"G\" ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) ((\"Unit Tests\" NIL \"unit-tests\" \"mimekit.net\")) NIL NIL NIL \"<g@mimekit.net>\") BODYSTRUCTURE (\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 27 1 NIL NIL NIL NIL) BODY[HEADER.FIELDS (REFERENCES)] {2}\n\n)\nA######## OK Fetch completed (0.019 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getbodypart.txt",
    "content": "* 1 FETCH (UID 1 BODY[] {253}\nFrom: Unit Tests <unit-tests@mimekit.net>\nDate: Sun, 02 Oct 2016 17:56:45 -0400\nSubject: A\nMessage-Id: <a@mimekit.net>\nTo: Unit Tests <unit-tests@mimekit.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\nThis is the message body.\n)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getbodypart1.txt",
    "content": "* 2 FETCH (UID 2 BODY[1.MIME] {43}\nContent-Type: text/plain; charset=utf-8\n\n BODY[1] {27}\nThis is the message body.\n)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getbodypartheaders.txt",
    "content": "* 2 FETCH (BODY[1.MIME] {43}\nContent-Type: text/plain; charset=utf-8\n\n UID 2)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getmessageheaders.txt",
    "content": "* 1 FETCH (BODY[HEADER] {226}\nFrom: Unit Tests <unit-tests@mimekit.net>\nDate: Sun, 02 Oct 2016 17:56:45 -0400\nSubject: A\nMessage-Id: <a@mimekit.net>\nTo: Unit Tests <unit-tests@mimekit.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\n UID 1)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getstream-section.txt",
    "content": "* 1 FETCH (UID 1 BODY[HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)] {62}\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\n)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getstream-section2.txt",
    "content": "* 1 FETCH (UID 1 BODY[HEADER.FIELDS (MIME-VERSION CONTENT-TYPE)] {62}\nMIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\n\n)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getstream.txt",
    "content": "* 1 FETCH (UID 1 BODY[]<128> {64}\nnit Tests <unit-tests@mimekit.net>\nMIME-Version: 1.0\nContent-T)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getstream2.txt",
    "content": "* 1 FETCH (BODY[]<128> {64}\nnit Tests <unit-tests@mimekit.net>\nMIME-Version: 1.0\nContent-T UID 1)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getstreams1.txt",
    "content": "* 1 FETCH (UID 1 BODY[] {68}\nThis is some dummy text just to make sure this is working correctly.)\n* 2 FETCH (UID 2 BODY[] {68}\nThis is some dummy text just to make sure this is working correctly.)\n* 3 FETCH (UID 3 BODY[] {68}\nThis is some dummy text just to make sure this is working correctly.)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/getstreams2.txt",
    "content": "* 1 FETCH (BODY[] {68}\nThis is some dummy text just to make sure this is working correctly. UID 1)\n* 2 FETCH (BODY[] {68}\nThis is some dummy text just to make sure this is working correctly. UID 2)\n* 3 FETCH (BODY[] {68}\nThis is some dummy text just to make sure this is working correctly. UID 3)\nA######## OK Fetch completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/greeting-preauth.txt",
    "content": "* PREAUTH [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE NOTIFY] Logged in as user\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=DIGEST-MD5 AUTH=CRAM-MD5 AUTH=NTLM] Dovecot ready.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-folder.txt",
    "content": "* LIST (\\HasNoChildren) \".\" Folder\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-inbox.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \".\" INBOX\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-personal.txt",
    "content": "* LIST (\\HasNoChildren) \".\" Archives\n* STATUS Archives (MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 1436832059 UNSEEN 0 HIGHESTMODSEQ 1)\n* LIST (\\HasNoChildren) \".\" Drafts\n* STATUS Drafts (MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 1436832060 UNSEEN 0 HIGHESTMODSEQ 1)\n* LIST (\\HasNoChildren) \".\" Junk\n* STATUS Junk (MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 1436832061 UNSEEN 0 HIGHESTMODSEQ 1)\n* LIST (\\HasNoChildren) \".\" \"Sent Messages\"\n* STATUS \"Sent Messages\" (MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 1436832062 UNSEEN 0 HIGHESTMODSEQ 1)\n* LIST (\\HasNoChildren) \".\" Trash\n* STATUS Trash (MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 1436832063 UNSEEN 0 HIGHESTMODSEQ 1)\n* LIST (\\HasNoChildren) \".\" INBOX\n* STATUS INBOX (MESSAGES 4 RECENT 0 UIDNEXT 5 UIDVALIDITY 1436832057 UNSEEN 0 HIGHESTMODSEQ 15)\n* LIST (\\HasNoChildren) \".\" NIL\n* STATUS NIL (MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 1436832057 UNSEEN 0 HIGHESTMODSEQ 1)\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-special-use.txt",
    "content": "* LIST (\\Drafts \\Subscribed) \".\" Drafts\n* LIST (\\Junk \\Subscribed) \".\" Junk\n* LIST (\\Sent \\Subscribed) \".\" \"Sent Messages\"\n* LIST (\\Trash \\Subscribed) \".\" Trash\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-unittests-destination.txt",
    "content": "* LIST (\\HasNoChildren) \".\" UnitTests.Destination\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-unittests-messages.txt",
    "content": "* LIST (\\HasNoChildren) \".\" UnitTests.Messages\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/list-unittests.txt",
    "content": "* LIST (\\HasNoChildren) \".\" UnitTests\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/move.txt",
    "content": "* OK [COPYUID 1436832101 1:7 8:14] Moved UIDs.\n* VANISHED 1:7\nA######## OK [HIGHESTMODSEQ 7] Move completed (0.013 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/multiappend.txt",
    "content": "A######## OK [APPENDUID 1436832084 1:8] Append completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/namespace.txt",
    "content": "* NAMESPACE ((\"\" \".\")) NIL NIL\nA######## OK Namespace completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/noop+alert.txt",
    "content": "* OK [ALERT] System shutdown in 10 minutes\nA######## OK NOOP complete.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/notify-idle-done.txt",
    "content": "A######## OK Idle completed (0.001 + 5.433 + 5.433 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/notify-idle.txt",
    "content": "+ idling\n* STATUS INBOX (MESSAGES 3 UIDNEXT 4 UNSEEN 3 HIGHESTMODSEQ 3)\n* LIST (\\HasNoChildren) \".\" NewFolder\n* LIST (\\NonExistent) \".\" DeleteMe\n* LIST (\\HasNoChildren) \".\" RenamedFolder (\"OLDNAME\" (\"RenameMe\"))\n* LIST (\\HasNoChildren) \".\" UnsubscribeMe\n* LIST (\\HasNoChildren \\Subscribed) \".\" SubscribeMe\n* METADATA \"\" (/private/comment \"this is a comment\")\n* METADATA INBOX (/private/comment \"this is a comment\")\n* 1 EXISTS\n* 1 RECENT\n* 1 FETCH (UID 1 FLAGS (\\Recent) ENVELOPE (\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\" \"IMAP4rev1 WG mtg summary and minutes\" ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\")) ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\")) ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\")) ((NIL NIL \"imap\" \"cac.washington.edu\")) ((NIL NIL \"minutes\" \"CNRI.Reston.VA.US\") (\"John Klensin\" NIL \"KLENSIN\" \"MIT.EDU\")) NIL NIL \"<B27397-0100000@cac.washington.edu>\") BODYSTRUCTURE (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 3028 92) MODSEQ (1))\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/notify-list-personal.txt",
    "content": "* LIST (\\HasNoChildren) \".\" Archives\n* LIST (\\HasNoChildren) \".\" Drafts\n* LIST (\\HasNoChildren) \".\" Junk\n* LIST (\\HasNoChildren) \".\" \"Sent Messages\"\n* LIST (\\HasNoChildren) \".\" Trash\n* LIST (\\HasNoChildren) \".\" INBOX\n* LIST (\\HasChildren) \".\" Folder\n* LIST (\\HasNoChildren) \".\" DeleteMe\n* LIST (\\HasNoChildren) \".\" RenameMe\n* LIST (\\HasNoChildren) \".\" SubscribeMe\n* LIST (\\HasNoChildren \\Subscribed) \".\" UnsubscribeMe\nA######## OK List completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/notify.txt",
    "content": "* STATUS INBOX (MESSAGES 1 UIDNEXT 2 UIDVALIDITY 1543354379 UNSEEN 1)\nA######## OK NOTIFY completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/optimized-search.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 1:7\nA######## OK Search completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/search-all.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 1:14\nA######## OK Search completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/search-changed-since.txt",
    "content": "* ESEARCH (TAG \"A########\") UID MIN 1 MAX 7 ALL 1:7 COUNT 7 MODSEQ 4 RELEVANCY (11 22 33 44 55 66 77)\nA######## OK Search completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/search-raw.txt",
    "content": "* SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (MODSEQ 12345678)\nA######## OK Search completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/search-uids-options.txt",
    "content": "* ESEARCH (TAG \"A########\") UID MIN 2 MAX 13 ALL 2:6,9:13 COUNT 10 RELEVANCY (2 3 4 5 6 9 10 11 12 13)\nA######## OK Search completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/search-uids.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 1:14\nA######## OK Search completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/select-unittests-destination.txt",
    "content": "* OK [CLOSED] Previous mailbox closed.\n* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 14 EXISTS\n* 14 RECENT\n* OK [UIDVALIDITY 1436832128] UIDs valid\n* OK [UIDNEXT 15] Predicted next UID\n* OK [HIGHESTMODSEQ 3] Highest\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/select-unittests-messages-qresync.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 7 EXISTS\n* 0 RECENT\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [HIGHESTMODSEQ 6] Highest\n* VANISHED (EARLIER) 8\n* 1 FETCH (UID 1 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 2 FETCH (UID 2 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 3 FETCH (UID 3 FLAGS (\\Answered \\Seen \\Draft) MODSEQ (4))\n* 4 FETCH (UID 4 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 5 FETCH (UID 5 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 6 FETCH (UID 6 FLAGS (\\Seen \\Draft) MODSEQ (3))\n* 7 FETCH (UID 7 FLAGS (\\Seen \\Draft) MODSEQ (3))\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/select-unittests-messages.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\n* 8 EXISTS\n* 8 RECENT\n* OK [UNSEEN 1] First unseen.\n* OK [UIDVALIDITY 1436832084] UIDs valid\n* OK [UIDNEXT 9] Predicted next UID\n* OK [HIGHESTMODSEQ 2] Highest\nA######## OK [READ-WRITE] Select completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/setflags-unchangedsince.txt",
    "content": "* 1 FETCH (UID 1 MODSEQ (6))\n* 2 FETCH (UID 2 MODSEQ (6))\n* 3 FETCH (UID 3 MODSEQ (6))\n* 4 FETCH (UID 4 MODSEQ (6))\n* 5 FETCH (UID 5 MODSEQ (6))\n* 6 FETCH (UID 6 MODSEQ (6))\n* 7 FETCH (UID 7 MODSEQ (6))\nA######## OK [MODIFIED 7,9] Store completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/sort-by-date.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 7,14,6,13,5,12,4,11,3,10,2,9,1,8\nA######## OK Sort completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/sort-by-strings.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 1:14\nA######## OK Sort completed (0.002 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/sort-raw.txt",
    "content": "* SORT 7 14 6 13 5 12 4 11 3 10 2 9 1 8\nA######## OK Sort completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/sort-reverse-arrival.txt",
    "content": "* ESEARCH (TAG \"A########\") UID MIN 7 MAX 1 ALL 7,6,5,4,3,2,1 COUNT 7 RELEVANCY (7 6 5 4 3 2 1)\nA######## OK Sort completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/sort-uids-options.txt",
    "content": "* ESEARCH (TAG \"A########\") UID MIN 1 MAX 14 ALL 1:14 COUNT 14 RELEVANCY (1 2 3 4 5 6 7 8 9 10 11 12 13 14)\nA######## OK Sort completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/status-unittests-destination.txt",
    "content": "* STATUS UnitTests.Destination (MESSAGES 14 RECENT 14 UIDNEXT 15 UIDVALIDITY 1436832101 UNSEEN 0 HIGHESTMODSEQ 3)\nA######## OK Status completed (0.000 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/store-answered.txt",
    "content": "* 1 FETCH (UID 1 MODSEQ (4))\n* 2 FETCH (UID 2 MODSEQ (4))\n* 3 FETCH (UID 3 MODSEQ (4))\nA######## OK Store completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/store-deleted-custom.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft $MailKit)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft $MailKit \\*)] Flags permitted.\n* 1 FETCH (UID 1 MODSEQ (5))\n* 2 FETCH (UID 2 MODSEQ (5))\n* 3 FETCH (UID 3 MODSEQ (5))\n* 4 FETCH (UID 4 MODSEQ (5))\n* 5 FETCH (UID 5 MODSEQ (5))\n* 6 FETCH (UID 6 MODSEQ (5))\n* 7 FETCH (UID 7 MODSEQ (5))\n* 8 FETCH (UID 8 MODSEQ (5))\n* 9 FETCH (UID 9 MODSEQ (5))\n* 10 FETCH (UID 10 MODSEQ (5))\n* 11 FETCH (UID 11 MODSEQ (5))\n* 12 FETCH (UID 12 MODSEQ (5))\n* 13 FETCH (UID 13 MODSEQ (5))\n* 14 FETCH (UID 14 MODSEQ (5))\nA######## OK [MODIFIED 7,9] Store completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/store-deleted.txt",
    "content": "* 8 FETCH (UID 8 MODSEQ (5))\nA######## OK Store completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/store-seen.txt",
    "content": "* 1 FETCH (UID 1 MODSEQ (3))\n* 2 FETCH (UID 2 MODSEQ (3))\n* 3 FETCH (UID 3 MODSEQ (3))\n* 4 FETCH (UID 4 MODSEQ (3))\n* 5 FETCH (UID 5 MODSEQ (3))\n* 6 FETCH (UID 6 MODSEQ (3))\n* 7 FETCH (UID 7 MODSEQ (3))\n* 8 FETCH (UID 8 MODSEQ (3))\nA######## OK Store completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/thread-orderedsubject.txt",
    "content": "* THREAD (1)(2)(3)(4)(5)(6)(7)\nA######## OK Thread completed (0.010 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/thread-references.txt",
    "content": "* THREAD (1 (2 (3 5)(6))(4))(7)\nA######## OK Thread completed (0.014 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/dovecot/uid-expunge.txt",
    "content": "* VANISHED 8\n* 7 RECENT\nA######## OK [HIGHESTMODSEQ 6] Expunge completed (0.001 + 0.000 secs).\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/exchange/capability-postauth.txt",
    "content": "* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS MOVE ID UNSELECT CLIENTACCESSRULES CLIENTNETWORKPRESENCELOCATION BACKENDAUTHENTICATE CHILDREN IDLE NAMESPACE LITERAL+\nA######## OK CAPABILITY completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/exchange/capability-preauth.txt",
    "content": "* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+\nA######## OK CAPABILITY completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/exchange/greeting-2003.txt",
    "content": "* OK Microsoft Exchange Server 2003 IMAP4rev1 server version (6.5.7638.1) ready\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/exchange/greeting-2007.txt",
    "content": "* OK Microsoft Exchange Server 2007 IMAP4 service is ready\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/exchange/greeting.txt",
    "content": "* OK The Microsoft Exchange IMAP4 service is ready. [TQBXAEgAUABSADIAMQBDAEEAMAAwADYAMAAuAG4AYQBtAHAAcgBkADIAMQAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0A]\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/exchange/issue115.txt",
    "content": "[COPYUID 55 31 6]\n* 1 EXPUNGE\n* 0 EXISTS\nA######## OK MOVE completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/add-flags.txt",
    "content": "* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 2 EXPUNGE\n* 3 EXPUNGE\n* 3 EXPUNGE\n* 3 EXPUNGE\n* 4 EXPUNGE\n* 4 EXPUNGE\n* 4 EXPUNGE\n* 4 EXPUNGE\n* 15 EXPUNGE\n* 15 EXPUNGE\n* 15 EXPUNGE\n* 15 EXPUNGE\n* 16 EXPUNGE\n* 18 EXPUNGE\n* 24 EXPUNGE\n* 24 EXPUNGE\n* 24 EXPUNGE\n* 30 EXPUNGE\n* 29 EXISTS\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/add-labels.txt",
    "content": "* 1 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 1)\n* 2 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 2)\n* 3 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 3)\n* 5 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 5)\n* 7 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 7)\n* 8 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 8)\n* 9 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 9)\n* 11 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 11)\n* 12 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 12)\n* 13 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 13)\n* 14 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 14)\n* 26 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 26)\n* 27 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 27)\n* 28 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 28)\n* 29 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 29)\n* 31 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 31)\n* 34 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 34)\n* 41 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 41)\n* 42 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 42)\n* 43 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 43)\n* 50 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 50)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.1.txt",
    "content": "* 1 EXISTS\nA######## OK [APPENDUID 23 1] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.10.txt",
    "content": "* 10 EXISTS\nA######## OK [APPENDUID 23 10] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.11.txt",
    "content": "* 11 EXISTS\nA######## OK [APPENDUID 23 11] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.12.txt",
    "content": "* 12 EXISTS\nA######## OK [APPENDUID 23 12] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.13.txt",
    "content": "* 13 EXISTS\nA######## OK [APPENDUID 23 13] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.14.txt",
    "content": "* 14 EXISTS\nA######## OK [APPENDUID 23 14] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.15.txt",
    "content": "* 15 EXISTS\nA######## OK [APPENDUID 23 15] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.16.txt",
    "content": "* 16 EXISTS\nA######## OK [APPENDUID 23 16] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.17.txt",
    "content": "* 17 EXISTS\nA######## OK [APPENDUID 23 17] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.18.txt",
    "content": "* 18 EXISTS\nA######## OK [APPENDUID 23 18] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.19.txt",
    "content": "* 19 EXISTS\nA######## OK [APPENDUID 23 19] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.2.txt",
    "content": "* 2 EXISTS\nA######## OK [APPENDUID 23 2] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.20.txt",
    "content": "* 20 EXISTS\nA######## OK [APPENDUID 23 20] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.21.txt",
    "content": "* 21 EXISTS\nA######## OK [APPENDUID 23 21] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.22.txt",
    "content": "* 22 EXISTS\nA######## OK [APPENDUID 23 22] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.23.txt",
    "content": "* 23 EXISTS\nA######## OK [APPENDUID 23 23] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.24.txt",
    "content": "* 24 EXISTS\nA######## OK [APPENDUID 23 24] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.25.txt",
    "content": "* 25 EXISTS\nA######## OK [APPENDUID 23 25] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.26.txt",
    "content": "* 26 EXISTS\nA######## OK [APPENDUID 23 26] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.27.txt",
    "content": "* 27 EXISTS\nA######## OK [APPENDUID 23 27] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.28.txt",
    "content": "* 28 EXISTS\nA######## OK [APPENDUID 23 28] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.29.txt",
    "content": "* 29 EXISTS\nA######## OK [APPENDUID 23 29] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.3.txt",
    "content": "* 3 EXISTS\nA######## OK [APPENDUID 23 3] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.30.txt",
    "content": "* 30 EXISTS\nA######## OK [APPENDUID 23 30] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.31.txt",
    "content": "* 31 EXISTS\nA######## OK [APPENDUID 23 31] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.32.txt",
    "content": "* 32 EXISTS\nA######## OK [APPENDUID 23 32] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.33.txt",
    "content": "* 33 EXISTS\nA######## OK [APPENDUID 23 33] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.34.txt",
    "content": "* 34 EXISTS\nA######## OK [APPENDUID 23 34] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.35.txt",
    "content": "* 35 EXISTS\nA######## OK [APPENDUID 23 35] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.36.txt",
    "content": "* 36 EXISTS\nA######## OK [APPENDUID 23 36] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.37.txt",
    "content": "* 37 EXISTS\nA######## OK [APPENDUID 23 37] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.38.txt",
    "content": "* 38 EXISTS\nA######## OK [APPENDUID 23 38] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.39.txt",
    "content": "* 39 EXISTS\nA######## OK [APPENDUID 23 39] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.4.txt",
    "content": "* 4 EXISTS\nA######## OK [APPENDUID 23 4] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.40.txt",
    "content": "* 40 EXISTS\nA######## OK [APPENDUID 23 40] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.41.txt",
    "content": "* 41 EXISTS\nA######## OK [APPENDUID 23 41] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.42.txt",
    "content": "* 42 EXISTS\nA######## OK [APPENDUID 23 42] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.43.txt",
    "content": "* 43 EXISTS\nA######## OK [APPENDUID 23 43] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.44.txt",
    "content": "* 44 EXISTS\nA######## OK [APPENDUID 23 44] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.45.txt",
    "content": "* 45 EXISTS\nA######## OK [APPENDUID 23 45] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.46.txt",
    "content": "* 46 EXISTS\nA######## OK [APPENDUID 23 46] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.47.txt",
    "content": "* 47 EXISTS\nA######## OK [APPENDUID 23 47] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.48.txt",
    "content": "* 48 EXISTS\nA######## OK [APPENDUID 23 48] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.49.txt",
    "content": "* 49 EXISTS\nA######## OK [APPENDUID 23 49] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.5.txt",
    "content": "* 5 EXISTS\nA######## OK [APPENDUID 23 5] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.50.txt",
    "content": "* 50 EXISTS\nA######## OK [APPENDUID 23 50] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.6.txt",
    "content": "* 6 EXISTS\nA######## OK [APPENDUID 23 6] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.7.txt",
    "content": "* 7 EXISTS\nA######## OK [APPENDUID 23 7] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.8.txt",
    "content": "* 8 EXISTS\nA######## OK [APPENDUID 23 8] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/append.9.txt",
    "content": "* 9 EXISTS\nA######## OK [APPENDUID 23 9] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate+annotate.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 ANNOTATE-EXPERIMENT-1\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate+create-special-use.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CREATE-SPECIAL-USE CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 OBJECTID\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate+preview.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 PREVIEW\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate+savedate.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 SAVEDATE\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate+statussize+objectid.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 STATUS=SIZE OBJECTID\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate+webalert.txt",
    "content": "* NO [WEBALERT https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbsNd6RU3LIlgDfhmL9Y7ywYhtagFig_xfuSJCUHD9Eg3XqN8DKlDk3G8jmj2w5viIm5PDC3BS4SVy7iFMB6g1244cnQt1E60EdOTSEpnqDzL6FH2L-ReOAyZ3qkSXZQZs2pIfL2] Web login required.\nA######## NO [ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate-no-appendlimit-value.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT STATUS=SIZE\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/authenticate.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/capability+login.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=LOGIN AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH\nA######## OK Thats all she wrote! n55mb83651539qtb\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/capability+logindisabled.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR LOGINDISABLED AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH\nA######## OK Thats all she wrote! n55mb83651539qtb\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH\nA######## OK Thats all she wrote! n55mb83651539qtb\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/count-explicit.noop.txt",
    "content": "* 1 EXPUNGE\n* 1 EXISTS\nA######## OK NOOP completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/count-implicit.noop.txt",
    "content": "* 1 EXPUNGE\nA######## OK NOOP completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/count.examine.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Phishing $NotPhishing)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Phishing $NotPhishing \\*)] Flags permitted.\n* OK [UIDVALIDITY 26] UIDs valid.\n* 1 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 2] Predicted next UID.\n* OK [HIGHESTMODSEQ 29225]\nA######## OK [READ-WRITE] Inbox selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/create-mailboxid.txt",
    "content": "A######## OK [MAILBOXID (25dcfa84-fd65-41c3-abc3-633c8f10923f)] Thats all she wrote! n55mb83651539qtb\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/examine-inbox.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Phishing $NotPhishing)\n* OK [PERMANENTFLAGS ()] Flags permitted.\n* OK [UIDVALIDITY 637172988] UIDs valid.\n* 270 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 280] Predicted next UID.\n* OK [HIGHESTMODSEQ 35312]\nA######## OK [READ-ONLY] INBOX selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/expunge-during-fetch.txt",
    "content": "* 1 FETCH (UID 1 INTERNALDATE \"19-Jul-2019 06:00:17 +0000\" ENVELOPE (\"Fri, 19 Jul 2019 06:00:17 +0000\" \"subject 1\" ((\"From\" NIL \"from\" \"example.com\")) NIL NIL ((NIL NIL \"to\" \"example.com\")) NIL NIL \"in-reply-to@localhost.localdomain\" \"<msg-id@localhost.localdomain>\"))\n* 2 FETCH (UID 2 INTERNALDATE \"19-Jul-2019 06:00:17 +0000\" ENVELOPE (\"Fri, 19 Jul 2019 06:00:17 +0000\" \"subject 2\" ((\"From\" NIL \"from\" \"example.com\")) NIL NIL ((NIL NIL \"to\" \"example.com\")) NIL NIL \"in-reply-to@localhost.localdomain\" \"<msg-id@localhost.localdomain>\"))\n* 3 FETCH (UID 3 INTERNALDATE \"19-Jul-2019 06:00:17 +0000\" ENVELOPE (\"Fri, 19 Jul 2019 06:00:17 +0000\" \"subject 3\" ((\"From\" NIL \"from\" \"example.com\")) NIL NIL ((NIL NIL \"to\" \"example.com\")) NIL NIL \"in-reply-to@localhost.localdomain\" \"<msg-id@localhost.localdomain>\"))\n* 4 FETCH (UID 4 INTERNALDATE \"19-Jul-2019 06:00:17 +0000\" ENVELOPE (\"Fri, 19 Jul 2019 06:00:17 +0000\" \"subject 4\" ((\"From\" NIL \"from\" \"example.com\")) NIL NIL ((NIL NIL \"to\" \"example.com\")) NIL NIL \"in-reply-to@localhost.localdomain\" \"<msg-id@localhost.localdomain>\"))\n* 5 FETCH (UID 5 INTERNALDATE \"19-Jul-2019 06:00:17 +0000\" ENVELOPE (\"Fri, 19 Jul 2019 06:00:17 +0000\" \"subject 5\" ((\"From\" NIL \"from\" \"example.com\")) NIL NIL ((NIL NIL \"to\" \"example.com\")) NIL NIL \"in-reply-to@localhost.localdomain\" \"<msg-id@localhost.localdomain>\"))\n* 2 EXPUNGE\n* 5 EXPUNGE\n* 4 EXISTS\nA######## OK FETCH completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/expunge.txt",
    "content": "* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 18 EXISTS\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-all-headers.txt",
    "content": "* 1 FETCH (UID 1 FLAGS (\\Seen) BODY[HEADER] {275}\nDate: Thu, 03 Mar 2016 12:25:01 -0500\nSubject: text/plain message\nFrom: \"Example From\" <from@example.com>\nReply-To: \"Example Reply-To\" <reply-to@example.com>\nTo: \"Example To\" <to@example.com>\nMessage-Id: <2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\n\n)\n* 2 FETCH (UID 2 FLAGS (\\Seen) BODY[HEADER] {275}\nDate: Thu, 03 Mar 2016 12:25:01 -0500\nSubject: text/plain message\nFrom: \"Example From\" <from@example.com>\nReply-To: \"Example Reply-To\" <reply-to@example.com>\nTo: \"Example To\" <to@example.com>\nMessage-Id: <2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\n\n)\n* 3 FETCH (UID 3 FLAGS (\\Seen) BODY[HEADER] {275}\nDate: Thu, 03 Mar 2016 12:25:01 -0500\nSubject: text/plain message\nFrom: \"Example From\" <from@example.com>\nReply-To: \"Example Reply-To\" <reply-to@example.com>\nTo: \"Example To\" <to@example.com>\nMessage-Id: <2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\n\n)\n* 4 FETCH (UID 4 FLAGS (\\Seen) BODY[HEADER] {275}\nDate: Thu, 03 Mar 2016 12:25:01 -0500\nSubject: text/plain message\nFrom: \"Example From\" <from@example.com>\nReply-To: \"Example Reply-To\" <reply-to@example.com>\nTo: \"Example To\" <to@example.com>\nMessage-Id: <2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\n\n)\n* 5 FETCH (UID 5 FLAGS (\\Seen) BODY[HEADER] {275}\nDate: Thu, 03 Mar 2016 12:25:01 -0500\nSubject: text/plain message\nFrom: \"Example From\" <from@example.com>\nReply-To: \"Example Reply-To\" <reply-to@example.com>\nTo: \"Example To\" <to@example.com>\nMessage-Id: <2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\n\n)\n* 6 FETCH (UID 6 FLAGS (\\Seen) BODY[HEADER] {275}\nDate: Thu, 03 Mar 2016 12:25:01 -0500\nSubject: text/plain message\nFrom: \"Example From\" <from@example.com>\nReply-To: \"Example Reply-To\" <reply-to@example.com>\nTo: \"Example To\" <to@example.com>\nMessage-Id: <2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-invalid-headers.txt",
    "content": "* 1 FETCH (UID 1 FLAGS (\\Seen) BODY[HEADER] {27}\n!@&^*$(*&E WOIFDUJS Fu87#$*)\n* 2 FETCH (UID 2 FLAGS (\\Seen) BODY[HEADER] {27}\n!@&^*$(*&E WOIFDUJS Fu87#$*)\n* 3 FETCH (UID 3 FLAGS (\\Seen) BODY[HEADER] {27}\n!@&^*$(*&E WOIFDUJS Fu87#$*)\n* 4 FETCH (UID 4 FLAGS (\\Seen) BODY[HEADER] {27}\n!@&^*$(*&E WOIFDUJS Fu87#$*)\n* 5 FETCH (UID 5 FLAGS (\\Seen) BODY[HEADER] {27}\n!@&^*$(*&E WOIFDUJS Fu87#$*)\n* 6 FETCH (UID 6 FLAGS (\\Seen) BODY[HEADER] {27}\n!@&^*$(*&E WOIFDUJS Fu87#$*)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-korean-previewtext-bodystructure.txt",
    "content": "* 1 FETCH (UID 1 BODYSTRUCTURE (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"ks_c_5601-1987\") NIL NIL \"BASE64\" 1896 25 NIL NIL NIL))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-korean-previewtext-peek-text-only.txt",
    "content": "* 1 FETCH (UID 1 BODY[TEXT]<0> {512}\nvK2x4iAyNTCz4rDmILDtutAgvcO067ChIL3DwNu1x7jpvK0gsO260MDMtvOw7SC60riutMIgsMW0\n68fRILmrtP3AzCCwx7yztcggsM3AuiC6uLTZIMH9vuDA+8DOILPzvvew+iDDtrHiILHivPrAxyC1\ntcDUv6EgyPvA1L7uILCtt8LH0SDA/LvnIL+kuK7GrsDHIMPix/bAuyCzqsW4s8C0z7TZLiDAz7q7\nwLogw7aw+iCx4sW4ILmwx7DAxyCw+LHewLsgyK66uMfPseIgwKfH2CCzssfRwMcgv6y+yCDB9rno\nIMH9tNyw+iDB/cHfwPvAziDBosPLwLsgufrAzLjpvK0gwd+xub+hILvnvcXAuyDGxLDfx8+46byt\nILTrt/ogurvF5L/NwMcgwaLDy8DMIMH1sKHH373AtM+02SgyMzgsIDI0MywgMjQ3KS4gNLy8seIg\ntb++yCDB9rzTtcggx9G53bW1wMcgx9GxuSC8vLfCsPrA)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-nil-bodystructure.txt",
    "content": "* 1 FETCH (UID 1 BODYSTRUCTURE ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 5235 112 NIL NIL NIL)(\"TEXT\" \"HTML\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 60479 873 NIL NIL NIL) \"ALTERNATIVE\"))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-nil.txt",
    "content": "* 3 FETCH (UID 1 BODY[1.TEXT]<0> NIL)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-objectid.txt",
    "content": "* 1 FETCH (UID 1 EMAILID (M6d99ac3275bb4e) THREADID (T64b478a75b7ea9))\n* 2 FETCH (UID 2 EMAILID (M288836c4c7a762) THREADID (T64b478a75b7ea9))\n* 3 FETCH (UID 3 EMAILID (M5fdc09b49ea703) THREADID (T11863d02dd95b5))\n* 4 FETCH (UID 4 EMAILID (M4fdc09b49ea629) THREADID NIL)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-preview.txt",
    "content": "* 1 FETCH (UID 1 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:25:01 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:25:01 -0500\" \"text/plain message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\") PREVIEW \"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\")\n* 2 FETCH (UID 2 RFC822.SIZE 506 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:48:38 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:46:38 -0500\" \"text/html message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<K8NZOG3ZKXT4.32EL5QYOKY4B@Jeffrey-Stedfasts-2013-iMac.local>\") PREVIEW \"Don't miss our celebrity guest Monday evening\")\n* 3 FETCH (UID 3 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:49:29 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:47:29 -0500\" \"multipart/alternative message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<014Y2P3ZKXT4.TMD6XILA8I5N2@Jeffrey-Stedfasts-2013-iMac.local>\") PREVIEW \"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\")\n* 4 FETCH (UID 4 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:25:01 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:50:01 -0500\" \"text/plain message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\") PREVIEW \"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\")\n* 5 FETCH (UID 5 RFC822.SIZE 506 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:48:38 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:51:38 -0500\" \"text/html message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<K8NZOG3ZKXT4.32EL5QYOKY4B@Jeffrey-Stedfasts-2013-iMac.local>\") PREVIEW \"Don't miss our celebrity guest Monday evening\")\n* 6 FETCH (UID 6 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:49:29 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:52:29 -0500\" \"multipart/alternative message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<014Y2P3ZKXT4.TMD6XILA8I5N2@Jeffrey-Stedfasts-2013-iMac.local>\") PREVIEW \"Planet Fitness https://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 View web ver\")\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-previewtext-bodystructure.txt",
    "content": "* 1 FETCH (UID 1 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:25:01 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:25:01 -0500\" \"text/plain message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 5235 112 NIL NIL NIL))\n* 2 FETCH (UID 2 RFC822.SIZE 506 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:48:38 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:46:38 -0500\" \"text/html message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<K8NZOG3ZKXT4.32EL5QYOKY4B@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE (\"TEXT\" \"HTML\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 60479 873 NIL NIL NIL))\n* 3 FETCH (UID 3 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:49:29 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:47:29 -0500\" \"multipart/alternative message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<014Y2P3ZKXT4.TMD6XILA8I5N2@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 5235 112 NIL NIL NIL)(\"TEXT\" \"HTML\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 60479 873 NIL NIL NIL) \"ALTERNATIVE\"))\n* 4 FETCH (UID 4 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:25:01 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:50:01 -0500\" \"text/plain message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 5235 112 NIL NIL NIL))\n* 5 FETCH (UID 5 RFC822.SIZE 506 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:48:38 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:51:38 -0500\" \"text/html message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<K8NZOG3ZKXT4.32EL5QYOKY4B@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE (\"TEXT\" \"HTML\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 60479 873 NIL NIL NIL))\n* 6 FETCH (UID 6 RFC822.SIZE 507 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:49:29 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:52:29 -0500\" \"multipart/alternative message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<014Y2P3ZKXT4.TMD6XILA8I5N2@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 5235 112 NIL NIL NIL)(\"TEXT\" \"HTML\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 60479 873 NIL NIL NIL) \"ALTERNATIVE\"))\n* 7 FETCH (UID 7 RFC822.SIZE 1024 MODSEQ (41847) INTERNALDATE \"03-Mar-2016 17:25:01 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 03 Mar 2016 12:25:01 -0500\" \"audio/wav message\" ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example From\" NIL \"from\" \"example.com\")) ((\"Example Reply-To\" NIL \"reply-to\" \"example.com\")) ((\"Example To\" NIL \"to\" \"example.com\")) ((\"Example Recipient #1\" NIL \"recipient1\" \"example.com\")(\"Example Recipient #2\" NIL \"recipient2\" \"example.com\")(\"Example Recipient #3\" NIL \"recipient3\" \"example.com\")) NIL NIL \"<2T1YDYWYKXT4.7B2PY7UJXN1U3@Jeffrey-Stedfasts-2013-iMac.local>\") BODYSTRUCTURE (\"AUDIO\" \"WAV\" NIL NIL NIL \"BASE64\" 5235 NIL NIL NIL))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-previewtext-peek-html-only.txt",
    "content": "* 2 FETCH (UID 2 BODY[TEXT]<0> {16384}\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">\n<head>\n    <title>\n        Planet Fitness\n    </title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0 \" />\n    <meta content=\"telephone=no\" name=\"format-detection\">\n\n    <link href=\"https://fonts.googleapis.com/css?family=Archivo+Narrow:400,500,600,600i,700,700i\" rel=\"stylesheet\" />\n    <link href=\"https://fonts.googleapis.com/css?family=Roboto+Slab:400,700&display=swap\" rel=\"stylesheet\">\n\n    <style type=\"text/css\">\n        a[x-apple-data-detectors] {\n            color: inherit !important;\n            text-decoration: none !important;\n            font-size: inherit !important;\n            font-family: inherit !important;\n            font-weight: inherit !important;\n            line-height: inherit !important;\n        }\n\n        body {\n            margin: 0 !important;\n            padding: 0 !important;\n            -webkit-text-size-adjust: 100% !important;\n            -ms-text-size-adjust: 100% !important;\n        }\n\n        img {\n            border: 0 !important;\n            outline: none !important;\n        }\n\n        p {\n            Margin: 0px !important;\n            Padding: 0px !important;\n        }\n\n        table {\n            border-collapse: collapse;\n            mso-table-lspace: 0px;\n            mso-table-rspace: 0px;\n        }\n\n        td, a, span {\n            border-collapse: collapse;\n            mso-line-height-rule: exactly;\n        }\n\n        .ExternalClass * {\n            line-height: 100%;\n        }\n\n        .em_defaultlink a {\n            color: inherit !important;\n            text-decoration: none !important;\n        }\n\n\n\n        /* RESET STYLES */\n\n        img {\n            border: 0;\n            line-height: 100%;\n            outline: none;\n            text-decoration: none;\n        }\n\n        table {\n            border-collapse: collapse !important;\n        }\n\n        body {\n            height: 100% !important;\n            margin: 0;\n            padding: 0;\n            width: 100% !important;\n        }\n\n        a:link, v:link {\n            color: #732282;\n        }\n        /*Link Color for IOS */\n        .appleLinksWhite a {\n            color: #ffffff !important;\n            text-decoration: none;\n        }\n\n        .appleLinksBlack a {\n            color: #000000 !important;\n            text-decoration: none;\n        }\n\n        /* WEB FONTS */\n\n        <!-- [if mso] > * {\n            font-family: sans-serif !important;\n        }\n\n        <![endif] -->\n        /* latin-ext */\n        @font-face {\n            font-family: 'Archivo Narrow';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Archivo Narrow Regular'), local('ArchivoNarrow-Regular'), url(https://fonts.gstatic.com/s/archivonarrow/v8/tss0ApVBdCYD5Q7hcxTE1ArZ0bb-iXxw2d8oBxk.woff2) format('woff2');\n            unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n        }\n        /* latin */\n        @font-face {\n            font-family: 'Archivo Narrow';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Archivo Narrow Regular'), local('ArchivoNarrow-Regular'), url(https://fonts.gstatic.com/s/archivonarrow/v8/tss0ApVBdCYD5Q7hcxTE1ArZ0bbwiXxw2d8o.woff2) format('woff2');\n            unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n        }\n\n        /* Rockwell */\n        @font-face {\n            font-family: rockwellstd-extrabold;\n            src: url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.eot);\n            src: url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.eot#iefix) format('embedded-opentype'), url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.woff2) format('woff2'), url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.woff) format('woff'), url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.ttf) format('truetype')\n        }\n\n        /* Roboto */\n        @font-face {\n            font-family: 'Roboto';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2) format('woff2');\n            unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n        }\n\n        /* Roboto Bold */\n        @font-face {\n            font-family: 'Roboto';\n            font-style: normal;\n            font-weight: 700;\n            src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2) format('woff2');\n            unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n        }\n\n        /* Roboto Slab */\n        @font-face {\n            font-family: 'Roboto Slab';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(fonts/RobotoSlab-Regular.ttf) format('woff');\n        }\n\n        @font-face {\n            font-family: 'Roboto Slab';\n            font-style: normal;\n            font-weight: 700;\n            src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(fonts/RobotoSlab-Bold.ttf) format('woff');\n        }\n\n        @import url('https://fonts.googleapis.com/css?family=Roboto:400,700,900');\n        @import url('https://fonts.googleapis.com/css?family=Roboto+Slab&display=swap');\n\n        /* END WEB FONTS */\n\n        /*Stylesheet for the devices width between 481px to 599px*/\n        @media only screen and (min-width:481px) and (max-width:599px) {\n            .em_wrapper {\n                width: 100% !important;\n            }\n\n            .em_main_table {\n                width: 100% !important;\n            }\n\n            .em_aside {\n                padding: 0px 15px !important;\n            }\n\n            .em_hide {\n                display: none !important;\n            }\n\n            .br_show {\n                display: inline;\n            }\n\n            .em_img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n            .em_full_img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n                .em_full_img img {\n                    width: 100% !important;\n                    height: auto !important;\n                }\n\n            .em_aside10 {\n                padding: 20px 0px !important;\n            }\n\n            .em_font_28 {\n                font-size: 30px !important;\n                line-height: 33px !important;\n            }\n\n\n            .em_h20 {\n                height: 20px !important;\n            }\n\n            .em_bottom {\n                padding-bottom: 20px !important;\n            }\n\n            .em_bottom1 {\n                padding-bottom: 30px !important;\n            }\n\n            .em_ftr_nav {\n                height: 50px !important;\n                font-size: 13px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            .em_ftr_nav2 {\n                padding: 20px 0px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            div[class=display_mobile] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .display_mobile {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .hide_desktop {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            div[class=hide_desktop] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            table[class=tbl_center] {\n                margin: 0 auto !important;\n                align: center !important;\n            }\n\n            td[class=mbltd_padding] {\n                padding-left: 15px;\n                padding-right: 15px;\n            }\n\n            .em_center {\n                text-align: center !important;\n            }\n\n            .pad_mobile {\n                background: white;\n                padding: 0px 15px;\n            }\n\n            .em_img1 {\n                width: 100% !important;\n                height: auto !important;\n                max-width: 100% !important;\n            }\n\n            .em_w30 {\n                width: 90% !important;\n            }\n\n            .em_w150 {\n                width: 150px !important;\n            }\n\n            .m2button {\n                width: 120px !important;\n                font-size: 13px !important;\n            }\n\n            .em_red a {\n                color: #e4002b;\n                text-decoration: none !important;\n                font-size: 35px !important;\n            }\n        }\n        /*Stylesheed for the devices width between 0px to 480px*/\n        @media only screen and (max-width:480px) {\n\n\n            .em_wrapper {\n                width: 100% !important;\n            }\n\n            .em_main_table {\n                width: 100% !important;\n            }\n\n            .em_aside {\n                padding: 0px 15px !important;\n            }\n\n            .em_hide {\n                display: none !important;\n            }\n\n            .br_show {\n                display: inline;\n            }\n\n            .em_img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n            .em_img1 {\n                width: 100% !important;\n                height: auto !important;\n                max-width: 100% !important;\n            }\n\n            .em_full_img img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n            .em_aside10 {\n                padding: 20px 0px !important;\n            }\n\n            .em_font_28 {\n                font-size: 30px !important;\n                line-height: 33px !important;\n            }\n\n            .em_h20 {\n                height: 20px !important;\n            }\n\n            .em_bottom {\n                padding-bottom: 20px !important;\n            }\n\n            .em_bottom1 {\n                padding-bottom: 30px !important;\n            }\n\n            .em_f60 {\n                font-size: 60px !important;\n                line-height: 63px !important;\n            }\n\n            .em_f14 {\n                font-size: 11px !important;\n                line-height: 17px !important;\n            }\n\n            .em_ftr_nav {\n                height: 50px !important;\n                font-size: 13px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            .em_ftr_nav2 {\n                padding: 20px 0px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            .em_ftr_nav1 {\n                padding: 0px 0px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            div[class=display_mobile] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .display_mobile {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .hide_desktop {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            div[class=hide_desktop] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            table[class=tbl_center] {\n                margin: 0 auto !important;\n                align: center !important;\n            }\n\n            td[class=mbltd_padding] {\n                padding-left: 15px;\n                padding-right: 15px;\n                padding-top: 5px;\n            }\n\n            .em_center {\n                text-align: center !important;\n            }\n\n            .pad_mobile {\n                background: white;\n                padding: 0px 15px;\n            }\n\n            .em_w30 {\n                width: 100% !important;\n            }\n\n            .em_w150 {\n                width: 270px !important;\n            }\n\n            .m2button {\n                width: 120px !important;\n                font-size: 13px !important;\n            }\n\n            .em_red a {\n                color: #e4002b;\n                text-decoration: none !important;\n                font-size: 35px !important;\n            }\n        }\n    </style>\n    <!--[if gte mso 9]> <xml> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:PixelsPerInch>96</o:PixelsPerInch> </o:OfficeDocumentSettings> </xml> <![endif]-->\n\n</head>\n\n<body style=\"margin:0px; padding:0px;\">\n    <style type=\"text/css\">\n        div.preheader {\n            display: none !important;\n        }\n    </style>\n    <div class=\"preheader\" style=\"font-size: 1px; display: none !important;\">Don’t miss our celebrity guest Monday evening</div>\n    <img src=\"https://click.email.planetfitness.com/open.aspx?ffcb10-feb913747c6c007b-fe2b17707560007a721374-fe9213727763067a77-ff931375-fe2e15757c62027e751572-ff3c16707464\" width=\"1\" height=\"1\">\n    <!--[if mso]> <style type=\"text/css\"> body, table, td, a, li {font-family: Arial, Helvetica, sans-serif !important;} </style> <![endif]-->\n    <!--Full width table start-->\n\n    <div align=\"center\" style=\"background-color:#ffffff;\">\n        <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"table-layout:fixed;\">\n            <tr valign=\"top\">\n                <td align=\"center\">\n                    <table class=\"em_main_table\" width=\"600\" style=\"width:600px;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" role=\"presentation\" align=\"center\">\n                        <tr>\n                            <td align=\"center\" valign=\"top\" style=\"padding:0px 20px 0px 20px;\">\n\n                                <!-- Header  -->\n                        <tr>\n                            <td align=\"center\" class=\"em_aside\">\n                                <table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\" class=\"em_wrapper\" style=\"width:600px; table-layout:fixed;\">\n                                    <tr>\n                                        )\n* 5 FETCH (UID 5 BODY[TEXT]<0> {16384}\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">\n<head>\n    <title>\n        Planet Fitness\n    </title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0 \" />\n    <meta content=\"telephone=no\" name=\"format-detection\">\n\n    <link href=\"https://fonts.googleapis.com/css?family=Archivo+Narrow:400,500,600,600i,700,700i\" rel=\"stylesheet\" />\n    <link href=\"https://fonts.googleapis.com/css?family=Roboto+Slab:400,700&display=swap\" rel=\"stylesheet\">\n\n    <style type=\"text/css\">\n        a[x-apple-data-detectors] {\n            color: inherit !important;\n            text-decoration: none !important;\n            font-size: inherit !important;\n            font-family: inherit !important;\n            font-weight: inherit !important;\n            line-height: inherit !important;\n        }\n\n        body {\n            margin: 0 !important;\n            padding: 0 !important;\n            -webkit-text-size-adjust: 100% !important;\n            -ms-text-size-adjust: 100% !important;\n        }\n\n        img {\n            border: 0 !important;\n            outline: none !important;\n        }\n\n        p {\n            Margin: 0px !important;\n            Padding: 0px !important;\n        }\n\n        table {\n            border-collapse: collapse;\n            mso-table-lspace: 0px;\n            mso-table-rspace: 0px;\n        }\n\n        td, a, span {\n            border-collapse: collapse;\n            mso-line-height-rule: exactly;\n        }\n\n        .ExternalClass * {\n            line-height: 100%;\n        }\n\n        .em_defaultlink a {\n            color: inherit !important;\n            text-decoration: none !important;\n        }\n\n\n\n        /* RESET STYLES */\n\n        img {\n            border: 0;\n            line-height: 100%;\n            outline: none;\n            text-decoration: none;\n        }\n\n        table {\n            border-collapse: collapse !important;\n        }\n\n        body {\n            height: 100% !important;\n            margin: 0;\n            padding: 0;\n            width: 100% !important;\n        }\n\n        a:link, v:link {\n            color: #732282;\n        }\n        /*Link Color for IOS */\n        .appleLinksWhite a {\n            color: #ffffff !important;\n            text-decoration: none;\n        }\n\n        .appleLinksBlack a {\n            color: #000000 !important;\n            text-decoration: none;\n        }\n\n        /* WEB FONTS */\n\n        <!-- [if mso] > * {\n            font-family: sans-serif !important;\n        }\n\n        <![endif] -->\n        /* latin-ext */\n        @font-face {\n            font-family: 'Archivo Narrow';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Archivo Narrow Regular'), local('ArchivoNarrow-Regular'), url(https://fonts.gstatic.com/s/archivonarrow/v8/tss0ApVBdCYD5Q7hcxTE1ArZ0bb-iXxw2d8oBxk.woff2) format('woff2');\n            unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n        }\n        /* latin */\n        @font-face {\n            font-family: 'Archivo Narrow';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Archivo Narrow Regular'), local('ArchivoNarrow-Regular'), url(https://fonts.gstatic.com/s/archivonarrow/v8/tss0ApVBdCYD5Q7hcxTE1ArZ0bbwiXxw2d8o.woff2) format('woff2');\n            unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n        }\n\n        /* Rockwell */\n        @font-face {\n            font-family: rockwellstd-extrabold;\n            src: url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.eot);\n            src: url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.eot#iefix) format('embedded-opentype'), url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.woff2) format('woff2'), url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.woff) format('woff'), url(https://www.planetfitness.com/themes/planet_fitness/css/webfonts/33EE73_0_0.ttf) format('truetype')\n        }\n\n        /* Roboto */\n        @font-face {\n            font-family: 'Roboto';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Roboto'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v15/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2) format('woff2');\n            unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n        }\n\n        /* Roboto Bold */\n        @font-face {\n            font-family: 'Roboto';\n            font-style: normal;\n            font-weight: 700;\n            src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2) format('woff2');\n            unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;\n        }\n\n        /* Roboto Slab */\n        @font-face {\n            font-family: 'Roboto Slab';\n            font-style: normal;\n            font-weight: 400;\n            src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(fonts/RobotoSlab-Regular.ttf) format('woff');\n        }\n\n        @font-face {\n            font-family: 'Roboto Slab';\n            font-style: normal;\n            font-weight: 700;\n            src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(fonts/RobotoSlab-Bold.ttf) format('woff');\n        }\n\n        @import url('https://fonts.googleapis.com/css?family=Roboto:400,700,900');\n        @import url('https://fonts.googleapis.com/css?family=Roboto+Slab&display=swap');\n\n        /* END WEB FONTS */\n\n        /*Stylesheet for the devices width between 481px to 599px*/\n        @media only screen and (min-width:481px) and (max-width:599px) {\n            .em_wrapper {\n                width: 100% !important;\n            }\n\n            .em_main_table {\n                width: 100% !important;\n            }\n\n            .em_aside {\n                padding: 0px 15px !important;\n            }\n\n            .em_hide {\n                display: none !important;\n            }\n\n            .br_show {\n                display: inline;\n            }\n\n            .em_img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n            .em_full_img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n                .em_full_img img {\n                    width: 100% !important;\n                    height: auto !important;\n                }\n\n            .em_aside10 {\n                padding: 20px 0px !important;\n            }\n\n            .em_font_28 {\n                font-size: 30px !important;\n                line-height: 33px !important;\n            }\n\n\n            .em_h20 {\n                height: 20px !important;\n            }\n\n            .em_bottom {\n                padding-bottom: 20px !important;\n            }\n\n            .em_bottom1 {\n                padding-bottom: 30px !important;\n            }\n\n            .em_ftr_nav {\n                height: 50px !important;\n                font-size: 13px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            .em_ftr_nav2 {\n                padding: 20px 0px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            div[class=display_mobile] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .display_mobile {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .hide_desktop {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            div[class=hide_desktop] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            table[class=tbl_center] {\n                margin: 0 auto !important;\n                align: center !important;\n            }\n\n            td[class=mbltd_padding] {\n                padding-left: 15px;\n                padding-right: 15px;\n            }\n\n            .em_center {\n                text-align: center !important;\n            }\n\n            .pad_mobile {\n                background: white;\n                padding: 0px 15px;\n            }\n\n            .em_img1 {\n                width: 100% !important;\n                height: auto !important;\n                max-width: 100% !important;\n            }\n\n            .em_w30 {\n                width: 90% !important;\n            }\n\n            .em_w150 {\n                width: 150px !important;\n            }\n\n            .m2button {\n                width: 120px !important;\n                font-size: 13px !important;\n            }\n\n            .em_red a {\n                color: #e4002b;\n                text-decoration: none !important;\n                font-size: 35px !important;\n            }\n        }\n        /*Stylesheed for the devices width between 0px to 480px*/\n        @media only screen and (max-width:480px) {\n\n\n            .em_wrapper {\n                width: 100% !important;\n            }\n\n            .em_main_table {\n                width: 100% !important;\n            }\n\n            .em_aside {\n                padding: 0px 15px !important;\n            }\n\n            .em_hide {\n                display: none !important;\n            }\n\n            .br_show {\n                display: inline;\n            }\n\n            .em_img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n            .em_img1 {\n                width: 100% !important;\n                height: auto !important;\n                max-width: 100% !important;\n            }\n\n            .em_full_img img {\n                width: 100% !important;\n                height: auto !important;\n            }\n\n            .em_aside10 {\n                padding: 20px 0px !important;\n            }\n\n            .em_font_28 {\n                font-size: 30px !important;\n                line-height: 33px !important;\n            }\n\n            .em_h20 {\n                height: 20px !important;\n            }\n\n            .em_bottom {\n                padding-bottom: 20px !important;\n            }\n\n            .em_bottom1 {\n                padding-bottom: 30px !important;\n            }\n\n            .em_f60 {\n                font-size: 60px !important;\n                line-height: 63px !important;\n            }\n\n            .em_f14 {\n                font-size: 11px !important;\n                line-height: 17px !important;\n            }\n\n            .em_ftr_nav {\n                height: 50px !important;\n                font-size: 13px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            .em_ftr_nav2 {\n                padding: 20px 0px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            .em_ftr_nav1 {\n                padding: 0px 0px !important;\n                border: #eeeeee 1px solid !important;\n            }\n\n            div[class=display_mobile] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .display_mobile {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            .hide_desktop {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            div[class=hide_desktop] {\n                display: table !important;\n                float: none !important;\n                width: 100% !important;\n                overflow: visible !important;\n                height: auto !important;\n            }\n\n            table[class=tbl_center] {\n                margin: 0 auto !important;\n                align: center !important;\n            }\n\n            td[class=mbltd_padding] {\n                padding-left: 15px;\n                padding-right: 15px;\n                padding-top: 5px;\n            }\n\n            .em_center {\n                text-align: center !important;\n            }\n\n            .pad_mobile {\n                background: white;\n                padding: 0px 15px;\n            }\n\n            .em_w30 {\n                width: 100% !important;\n            }\n\n            .em_w150 {\n                width: 270px !important;\n            }\n\n            .m2button {\n                width: 120px !important;\n                font-size: 13px !important;\n            }\n\n            .em_red a {\n                color: #e4002b;\n                text-decoration: none !important;\n                font-size: 35px !important;\n            }\n        }\n    </style>\n    <!--[if gte mso 9]> <xml> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:PixelsPerInch>96</o:PixelsPerInch> </o:OfficeDocumentSettings> </xml> <![endif]-->\n\n</head>\n\n<body style=\"margin:0px; padding:0px;\">\n    <style type=\"text/css\">\n        div.preheader {\n            display: none !important;\n        }\n    </style>\n    <div class=\"preheader\" style=\"font-size: 1px; display: none !important;\">Don’t miss our celebrity guest Monday evening</div>\n    <img src=\"https://click.email.planetfitness.com/open.aspx?ffcb10-feb913747c6c007b-fe2b17707560007a721374-fe9213727763067a77-ff931375-fe2e15757c62027e751572-ff3c16707464\" width=\"1\" height=\"1\">\n    <!--[if mso]> <style type=\"text/css\"> body, table, td, a, li {font-family: Arial, Helvetica, sans-serif !important;} </style> <![endif]-->\n    <!--Full width table start-->\n\n    <div align=\"center\" style=\"background-color:#ffffff;\">\n        <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"table-layout:fixed;\">\n            <tr valign=\"top\">\n                <td align=\"center\">\n                    <table class=\"em_main_table\" width=\"600\" style=\"width:600px;\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" role=\"presentation\" align=\"center\">\n                        <tr>\n                            <td align=\"center\" valign=\"top\" style=\"padding:0px 20px 0px 20px;\">\n\n                                <!-- Header  -->\n                        <tr>\n                            <td align=\"center\" class=\"em_aside\">\n                                <table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\" class=\"em_wrapper\" style=\"width:600px; table-layout:fixed;\">\n                                    <tr>\n                                        )\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-previewtext-peek-text-alternative.txt",
    "content": "* 3 FETCH (UID 3 BODY[1]<0> {512}\nPlanet Fitness\n \n \nhttps://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 \nView web version. \n\n \n \n\n\n \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4ab48e22f7d9e9447a24bee0d865e2726344dbb9445bfe9550309f3710c1455f171c23158086b024cfc6354b301deb2985 \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4addbddbe9bb6f8638f98f7bb4a15c3f34)\n* 6 FETCH (UID 6 BODY[1]<0> {512}\nPlanet Fitness\n \n \nhttps://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 \nView web version. \n\n \n \n\n\n \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4ab48e22f7d9e9447a24bee0d865e2726344dbb9445bfe9550309f3710c1455f171c23158086b024cfc6354b301deb2985 \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4addbddbe9bb6f8638f98f7bb4a15c3f34)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-previewtext-peek-text-only.txt",
    "content": "* 1 FETCH (UID 1 BODY[TEXT]<0> {512}\nPlanet Fitness\n \n \nhttps://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 \nView web version. \n\n \n \n\n\n \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4ab48e22f7d9e9447a24bee0d865e2726344dbb9445bfe9550309f3710c1455f171c23158086b024cfc6354b301deb2985 \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4addbddbe9bb6f8638f98f7bb4a15c3f34)\n* 4 FETCH (UID 4 BODY[TEXT]<0> {512}\nPlanet Fitness\n \n \nhttps://view.email.planetfitness.com/?qs=9a098a031cabde68c0a4260051cd6fe473a2e997a53678ff26b4b199a711a9d2ad0536530d6f837c246b09f644d42016ecfb298f930b7af058e9e454b34f3d818ceb3052ae317b1ac4594aab28a2d788 \nView web version. \n\n \n \n\n\n \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4ab48e22f7d9e9447a24bee0d865e2726344dbb9445bfe9550309f3710c1455f171c23158086b024cfc6354b301deb2985 \n\nhttps://click.email.planetfitness.com/?qs=fd2766e949040b4addbddbe9bb6f8638f98f7bb4a15c3f34)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-quoted-string-bodystructure.txt",
    "content": "* 1 FETCH (UID 1 BODYSTRUCTURE ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 5235 112 NIL NIL NIL)(\"TEXT\" \"HTML\" (\"CHARSET\" \"utf-8\") NIL NIL \"7BIT\" 60479 873 NIL NIL NIL) \"ALTERNATIVE\"))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-quoted-string.txt",
    "content": "* 3 FETCH (UID 1 BODY[1.TEXT]<0> \"This is the message body as a quoted-string.\")\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch-savedate.txt",
    "content": "* 1 FETCH (UID 1 SAVEDATE \"12-Sep-2023 13:39:01 -0400\")\n* 2 FETCH (UID 2 SAVEDATE \"12-Sep-2023 13:39:01 -0400\")\n* 3 FETCH (UID 3 SAVEDATE \"12-Sep-2023 13:39:01 -0400\")\n* 4 FETCH (UID 4 SAVEDATE NIL)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.1+unsolicited-info.txt",
    "content": "* 1 FETCH (UID 1 MODSEQ (29233) ANNOTATION (/comment (value.priv \"My comment\" value.shared NIL size.priv \"10\" size.shared \"0\")) FLAGS (\\Seen \\Deleted) X-GM-LABELS (\"Trash\") BODY[] {181614}\nReturn-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA12840> for nsb; Thu, 19 Sep 91 12:41:43 EDT\nDate: Thu, 19 Sep 91 12:41:43 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9109191641.AA12840@greenbush.bellcore.com>\nTo: abel, bianchi, braun, cameron, carmen, jfp, jxr, kraut, lamb, lowery, lynn,\n        mlittman, nancyg, sau, shoshi, slr, stornett@flash, tkl\nCc: nsb, trina@flash\nSubject: Star Trek Party!\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=Outermost_Trek\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/parallel; boundary=Where_No_One_Has_Gone_Before\n\n--Where_No_One_Has_Gone_Before\n\nYou are invited to a \n\n*** STAR TREK 25TH ANNIVERSARY PARTY ***\n\nWhen:  September 28, 1991,  4:30 PM until whenever\nWhat:  For those interested, we'll have a rerun of last year's season-ending \n\tcliffhanger, and  then we'll tune in the season opener and the 25th \n\tanniversary TV special.   Prior to that, if you bring some food \n\twe'll have a pot-luck meal, and general merriment before and after.\nWho:  You and your family, including kids of course.\nWhere:  25 Washington Avenue, Morristown.  \n\t(See Nathaniel if you need directions.)\nRSVP:  993-8586\n\nWhat follows is some Star Trek related multimedia mail, the last of which will give you a chance to RSVP on line.  \n\nLive Long and Prosper!  -- Nathaniel & Trina\n--Where_No_One_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAFmUAAAAAQAAH0AAAAABAAAAAAAAAAD////////37+/r7e/z9/f7//93b29z\n//////v37evv7+vr7+/z9/97b2NdVU9OT09RWmFr9+Pd3d3e4+vt/29la21ra2lra3vn3dzn\n9+//YVtaV1tp9/PjzsjHxsbGy87P2ef3c2dz/+vr59/Z09HR1dLR2d7n/2lXTUU+OzY1NTQ1\nOD5ETmXf2dLP1dfb3O9jYWNhX19pb+/ZzsjIzMzP43dfVU1RX2/bybu6u7q7wcjN0+1ra1VR\nY3fv7+fZzsS/v8LEztXW62FPRj03Mi8sLCwsLTVFVffLwL6+v8XFy9b/W1tdV1RVWVtr2srG\nytXj/09LRT4/SVtd2MC0r66trrG2uL3I0/dOSE5WWVxn99nGvby7vsfR4VdKRT03MCwoJSYn\nJyowPURb0cfHz9lrZ2tZRktdd+HazcrGv7iwrrC4usHR5W9VTl1pd8i7tLSztbm/xcrb91dF\nPj9DREhXb+vQv7y7uby/wsr3XUQ7My8pJiYnJiYsOEFK38G9vL7Fzc/R72f/1dXe69/v99/M\nw87v919NSUU+PUVMTme8s66urKyvsrO2vcTNb1JVWVNLTmfr2szKx8HLzs3XY0o9ODQtKCYm\nKCYoLjpHacnIx8fI1W9dU0A9RU5nZf/Zxru2rKuusrK3xM/cb1pvd2PXu7Ovr7O2vtVlS0M9\nODM2Oj1ATVfr1cq/vbu6ur7DyutSPzoxKiUjJCUkJS48T+29trSxt7zCyNNYS1FYb+/t2c/H\nvrq6x9HbW0E9PDg6QE1dxbGtqaenqayxtbnC3FFNS1NeZ//c18/SzM7Pz/ddTktAOTUvLCgl\nJScmKCw3QV3bvru2trzCyMjrT0hTe+fXy767urCsq7G4vcn3WU4/P0NJTs+6tbS1uL3Oa0Y/\nPDcxMjg+SlBb3si8urq4uru+yNnvW0c9OTApJycmIyQpLzdFY8i8uLS2urzC71b/697j2sfC\nvLivr7W9xM1bRT88ODxHSnu8rqyqqquvtsDXd1NGRERKUVphX+HTz9LV2t/3b1tNRDs2MC8p\nJSUlJSUsND1I2MC3srK1urm7xldHRUtLTF7Vyr61rKutsLa8zmdKPjpDRlHPt6+ur7K7x+FZ\nRj86NzU3Pk9cb+/Nvry9wb6/w8jV/1pFOzgzLSssKygoLTQ9SNrHvbi3uLq8xNtMTE9eZWfn\nx8G6r6yttLa9ymdGODQ1PUBHzrWtrauutLrC2VlNPj1BRE1be+/jzMLJzNPjXVtKQDo2NDEu\nKygoKignKjA4QGvIv7u4uLq8v83hY2lvc+/Ovrm2r6utr7O7yetURzs5PUdbyrevrq+zusfP\n91lEPjs5OT5FTFBd98zIzcvKy93ja1lPQzs6Mi4sLCsqKzRFT9a5s7O3ubm9vcPnY1dMS1NN\nXdfMw7y9x8rI0V1VT1M+PUdvz76vq6+vr7zCy9VZTkpKTERhc1lr0d3Sy83azs5rXU5EODMu\nKykmJSQkIygyOkTOuLWzrrG/xbu41s7I1+u9ubmyrKytrbS7uuFCOjY0ODlAc8O+tbbAyM3v\nX11LRkZERV7f69PPz9vZyszKx8DYy8vrUT83Li8pJioqKCs0Oz13u7W0srXHwsXcUVQ9PEZE\nQE/XzsC6uL28xcHhRz9HQD5axbavq6mssbC+z+PTRzI8Ojg700ZFd9dN47nDz7+47cjM7ztD\nQy4qLS0jJygqMDNP38vPu7m8vbq2vsfG19fXzsO1tLOvrbPfu77VO0xFNS9CQEXCzL+3rcvY\n4108Qz0wO0jj/93awr7VwLW83bS6wtTDWzowMzMoIyYpIyorLkJd19W6r7K/vLH/zrz3Pc3M\nP2O/zky5s9HIr+dMPkIvNkpM0LinpJ+fo6qvvU5LSzYuMjk4SdDP3sO9z8vFTzZHQi49U0Rd\nzMnN59zrbzA3PDsuLi0xKTAuKz3rxb6urqWgsbe4n6Sqt6rGLTI2Kibrs8XBq8F7MDIfJCEn\nLjtfr6ain5+foqK1w0IvHyAoIzBByc+trKepq7HGZTErHx8fHx8fHyAnMkLIr6ifn5+fn5+f\no6Cx78HhLzRTPylHMysrOiwmTEU4P7Pew7P33atJSa6nc76sr0i2rMNevbs438hIJVlQLyx3\nOCgtNCslMTwuNOPQyLKtqqerrK7GzVvTNS0uRSwmRdM3T63FrqzM377eOT1fKy5XREjJt7Oq\nsLKtqv++wUfXwUss3UYvxNg8c6zLvrLDv75eS2suNy0iLjMfJjsyPa62yq2ipsyrxUq+zT5O\n20e5PTK8yz+8sV/VZ7NFS09NMi9UTTxetFzIu96yvt+7r1ezsMXMa1tO0z05KT0rIkAuMEn3\nQLfnabRWSkfJTDo3yk9DLN+qv1/RyUbrU0lFd0W5tr3Bv7xPZ9EwLsbEPFuvvVO+q7Cup7K4\nY080HyUgHyMmP0BXraOroammta3Jv0tLOygpKT5EL+mst8q7q6zv0cu1UUFZP003LjMzXS00\nRkYq4z0wz0M4QrNFyrNIvsS3T7HG07DDsrasv7m/XbprOzFILS48KD4wRT3XO0TEUEjJy99M\n3bPQY925RbbEa3OvQzrJOsTXTOvJ+9e/68FMr21aRMbDQcdCxMy92a9OwNXzX0bYOlVR33dO\nrcDjw7V31Uc8d0w/OzxTUz4/VdDz99/Ore3G78xCPjxBNi8/Ly85OTMywT+3b83Gzu3Vx0lD\n70nIzFHIt669966wU8RMUelET0DLNWdMa01ttmfBP824Ok9JPeEw6Va/O2e8ULZS07XHU7rK\nuljVw1vXa/tfQ088STlLSmPnzGO/W7/Wx//TxDxNXm8x/85D30nP5bJMw+PNN9Y9V1bBUc8/\n7bG94cO+zmvHZ0zLRz9CQjhZSztAc0TOXjhO38FTyM1XzXNH5z1JNFMqT0RfTdeyXa/pwcXI\nY1fS/87bX9nKzGf/vuHHz/e4T8DzuUpX73vFOs/Nzcr/yOf33kC/d9tcYchP671PxNDUSsL3\nuL3VxLXF+8tMS009KjM4LS45OkTjMtBZ3Ei6wtFKb0rBb0zIxcg6u2HP10vM1O8z2M81QzbO\nR8ZYtMzPU8vPz1HKU8tFYWvM90PdVMZY607HTkbcP8c9zuVFVDrINcw/QzzzZ0q9yeu0uLnJ\nu8NXb9rV+06+Srbf80/Zx8/USctaREndOE04XGFvwsW367fR3L7ezzzeOfdEyEhfw0vBd8xD\nxmvOWlNj5+c+Uzk+ODgvQDM+NUE/WVX/yMnAx3fA/7BlvGm+Ub5Rxsq+xdW988XhVmNGVzlL\nOFpjRMLTtc68w9PMy9vT7VnY8+//593aXc3Wz8/I28vv4UHHUVlMUDxANUU9OktJa9fFy8jK\nw9zM49nKTM5Zd1lR90/cXdTdz9vX3l5jUT5VTW9P2b++vbq/wdJ3Y1dKPkBGPUM+TFlvWs/F\n083Hw9HVzu1nRUg+QTU2ODQ2MzpNTGfcw8nLw8nhx9bO3cnVyMrAxrjFwL3Cu9vC92dcQ005\nPD5BS1Prv8TVx87I1Gfe/9NOa3dvT1X3d3NvzM7vz8jI02drXVM8OTk6NDQ2MTw+UljN0MC7\nv77SynfMZ1djUWtOY3PX0+3ry9Xn3ddlWm9LW0pIR/vdyb6+usPB2tTNZUxJUERLSllXa1nv\nx9bP2cfHx8rK1/9NVkM+NzM3NzM4PFxl18fFv8DFy8nMzszfxsXHzcTBwcjEyc/b299fR0M/\nPTs/TvfUyb64usHJ1W9hU01VV1JNUE1TVG9l49PcyNHN193r729OQ0Y1NjQyMTA2NUJKY8rE\nwsfCxtnZ69Tr39nj7+/OztXdysbP5//vW0NDPT9ARf/OvrivsLK1vsPP0P9eU0peWVFUW2v/\na9nZzdXO1P93d29IPz0+NTIxMC4tNjtFSf/TvLu+ubu5vb3Nztfez9LT19jLxczb/8f3UkRJ\nQz08QEpV28u/wcS/zdNvVE1fUD9DS0hMW13zzsfCur+3u77Jzd1PSUc/ODk2NTAvNzs/PmXj\nz9bJzd7N1MzP29fMydPIxsbAvr7B0cjTy2fnSkJBQ1lRzce+t7u9xMbTd3tXTEdHSU1Tb9nb\n6c7SzcjEyc/lWWFKOzk4Ly0uLSsuMkNPVM3Dvr28vL+8u73IzcTFzNDGy83X291rX1FGPDo+\nOjo5P0Jb28C/vb3Ix9HOzNFzVE1VT1lYXWNn59jNx727vb68ydlfU0s/NDAyNS8vNkVGT2fP\nzM3JzN/v1t1nb9/KzNPOzGGryd/Lw06zzMn3XNHb3TfG12dfsfPCVVfvsllvQkfDP8c64+NB\nUb9Ew9xc0+U8OL9K2FoyLjstOi89NOsuSz22ScPOrsixY8K/+04/47/e373FzcNQuMrTa2Vd\nY0AsP0M4z7a7q666y6v3R1XhPdZLNMjHQN3Id9m349m3wTTFRMI80zE+RTNfWVwsWka6UVlG\nsk3nv8tR9zYwwq9HONTJa008Zaavus6tu1cxLS8sIjDlvNfJpqemtr61tjYrNiciIB8nPz1Y\nq6Kon6GjpajBYfcvIx8iIx8nHys7vbemrZ+rs03rMy03Vc2trK+rr9c8QDo0PeW2tc6zpKW+\nyMXOTyYkJygjKy9GwaijoJ+fpKqryS8/LB8iIh8gKT0+Pb+wraOgpK9r4UY1LjXJwKu1tNVX\nKikhHyErN0vIuMasoa6/zME6LyYuM1VDY6ynp6Ofn6WyxunfNR8fKB8fIyYp2zU5ta9GwKOf\nxdGtrsZb2rGgpK2sqrc/LSwpHx8jMTQySc64rMfBs7c6PU44M2PZyq+ioqGfp62rtd3dPScu\nKx8jLiQr2z8uY6jRO7Gfw0ZfwMJPS8WiprW1r18tICQiIR8q08x3tKiuqq3S5VsnHyIoHy89\nX66foaSjqL5ZSUQ1MSk3KyknO0w7R8GzoqlvvqilTe+3vltS466hq7SutjkjJyYfHyAtPt9d\nrau1r6y43U0sNTctNMjVZ6afq6yrvddKLC1FNjM3PS46RitnscU9rqZra6ejXVGzsr/Z072k\nrNDOyDUfHyIfHyAwyb7DtJ+rw7W7dywoKy4rL1C+r6qfoamptNNvTz8/Qi45TCchLln3PDj3\n59/E+2Oon6/rqaHDP9G6p6/KuLdVIyInJiIlSry/ya6tvLnhz1Q1Kjo/LTe5sK6mn6Kps99v\nPi0kOD4vK0cyLEQ34cG+Ta2rrFU3UKeuNe+wxjI2R7atxdjB3SkfICsiISjntsLNqKOuX8Sx\nxy4kN1xENc6qqKqmrbbHOTs3Ki93Oj7HUTk8Zy85zKpESK6t5+t7p6CqS6yoyDhPxcW+Tklh\nNh8iKiciLty7tr2vpalLSMPILC9fXE3z27+yq6motVhpYyotLixM5TQ+tOM2O+/7vDQ7vai3\nudA1XbSsVEG31zwzOruvs0/d0zghHyMnKitZq6mpt8GrsTQz7eMtM8/JtM5jwKWjrLOww08x\nMt1nND20uzUvSW05P08+zae8bbmhs8Y/PrGt3yu/r9UyV7atyTdT9zkfISs0KTTBqrG/taev\nRjvrxz0wX8LOb//BuK2ssrXYQTA0LixQ1c7JW+9CNSw7SzswP0Jcy6Owtq6zyz0rWa/nLT26\nezwzS7GtzTFBUCkfJDFHRMKtn6evra/HPzE1NisuRqzXPGOyrq+2wrS4vtfDSDxNX0tGMi84\nTj4wOrq30dqmp846wKqtRCc4vksvWq3JL0U3OTkuObGvTzbVUzYlL2vEvbSfn6Sps7zAVywn\nMjw6P0jbwUw7x6/M22dDX0gpKD85Nzw/TmlMOUiyxeO/qqbDWdW5zEzrrVsvNUUzva+v6TpR\nMjQ6Q9exvP84MCwpKTN3uqyfn5+fn6KtvD0pKSsfHy42L0e+xrymuP9P8zgwQELv09c1Lyk5\nNS04tqaosbGvrcw9Pau0TCy+v+tALzTcwikqa8YqKTBNQj1Dt5+qurmzYy8oL9O6wa2fn6Os\nr7bPLyAqLiIgLC0yTT1DvbHL1VlXXVUyNs/GRlG9urvD47iuwsqvqq+80ruqXzT3wzw5Pv/H\nP1tfOSkxQDJBt7nVQEA4W09Uu6irzcvfbzAtQ72/uqafpqyzvVEuIB8fHx8gJCo3QLympbmr\nornLytvK1jo/+/83b763wK2oqa7L78/RRT0/dz4xLTg5N0BZSFH/T2d3b9RLzcbbd2/bSUnr\n/1V7wcHEyr22sLm2trC4vcZ3Ri4pLjMrKjdDOz5Nb9B3Qz1ZUUI4TsvK1bmmpaqqpKesr7W1\ntM1f71UvNT89NTc3Ny8uNkU7NDg1LzE3Pmm/ta+yuLGuvr+4vMXMVUnZzVFjylZFQzk1OTQr\nMDk4P93Pv73Bxs7zSlVv693EwMbCwr+9u8zR01tJPkNQ28vCu8Lfd15JPT5Oz8nfzr24ymdr\nzk8/Pk5PUT5D2dNBP2fX3evPvrrRSklXRTlB/148SnfF0e/jy8pXUt3aZ+O+w1ta52nn72Fv\nyc/3/8jB2/fGvcrvZ01GPzs4Oj88Slr/WGvOz9nEvsPlW2tINjU/U17Z083Jz93v3efrzsft\nd2tIOj1EU2HZx7u1vMDAurzC2tO/y0lBTkQzLC82SURNz7u4vr+7t73BvbzEzs3O0dLzW/tb\nSEpNSUxVZevrTz9KPTI6OTc8R1FOTkxTXV9VXffr187SycXNycnt2cnL0bmzubO3vr/DXD86\nOzs7PkZEODU0OD5PZ8i6u7q6vt/dysjvadnHyv9U08zZa8jEUWM3PD0uLDU+S0ZMVFdES2HL\ntbKzs7Czs7W9z9/Z1mNGS2vf/2Np2Ug5NDw7NDc8Zelnb9fLzM6+vLm9wr7Ed0lN4/9GQkJB\nOzk8RlNNYcbHzMvbWe3W68zEy83MbU1KTz5CTU9AQz9ASVFTY9zT1c/DvLm6v7vAz8vL1Wvp\n7//ryNZ3/+lVUVlbb+fd287L2V/e1eNzX0pKRjk0Okhb5c/KytnV3OPzX1ljZ1NGQUNZ59vB\ns7W8wMr3b3dfT05MXVtfY8a8xNPRzuNIOjg7PTk4RfdzW3fb3dbS07+8v7+8v8PEzN/n81VG\nPTMxNDU1OD5AREtFSFv/3M7CxMXI0tXJxMfKuLi7xOvnztfXzdRPP2NfN3f318jYyMbrU0xV\n5/Nf1cC+yMvf6917e+fba09VTUlEP0FVV0hBPzw+PkNES1Nr7czZ39nIwL68vMnJ7Xfv+1v3\n08vT2uv7/11PTldJPTw7Okbr2My/wMjN2VdaWktFWe9hXevjy8G+vru3xM/VaVNXSj9MV05M\n91FJSlJX99ZvbWFP89X3V83K0W9zSE1NUf/Bws3LydTjyr3IyMj7UfdPUW/U78i+yuFvT0z/\na1FOXFVcT0A9R1dQW+/z2+drd8rB09TK2U1LPTQ1NjVHW1tSysXS78bIw7q+0v9PR01PU9/J\nxMnD309Y3/db691VR0U/SFvj0cDCy9vtNELKL9xWPcRD1dNZvNdrubjf0dfp18nPzNPY/1BI\nPTg6MT7CPGPIxL5HRePFxtvjSt9KP2FZe83Jv9fj7U5PXlHl2XfvY1ZPS1nTyMC+2GV3Xmvd\n98Y3vrA9PD88uuPRr3vLzEh33l/n3cXDylFPMzE6LjY9TENVa/fny8G9tLfC1N1zOlc+Y9Pa\nuMPNx3Pj42Pr3lNXRj53Szaz6zi+P7m6NsRBQbc+XctXVkvczLfFusXd1VxGymHLZ9Xrad4z\nOj00TCphxy5S1y/PRFm/39bLZ0jZY9+9U7nP1k+/OEPFN8HNSc33Mki/P89N2rnTx99Kx1Xr\nOs1fyUk6uz1by0mzc/fE9zx33Efc58Tzx0nlwTjKWzpX0MM199lHW7DptOe/30vPd1ZExtTV\nucA7uz/JwN9lutVDSEtDU9/SU7tBzdRAvE//1z7GRllMO88+uU1ruW+zwUvrb0zEQ8ZLS05W\nPD08R91Gb0ha11XRRcJrb7TXVrpLQ8df17xnylPvvUXKukmxPlS7Ob9KQ7hD3NnIwTjA1Vuy\nSe++81Tbb0Ln31nhzcfUvEbGPM7Pu1S+tjy4Pjm3O8zIUzbE5yzDTVO9vTu1uz62UD27VU+9\nZ3fMzjm+bze+Osq+RDW+7z68OWG8XF9I2zjRNvdc2U1E2Tu+dz64W+W3UVHKvjXF50S/2TDL\nNzfPVTu7SEfITvPn0E292UvKXbhB29W8zle067/3R1awRb/Jzu9t3DhP1zXAW8rYrtA8x7tL\nRq9Xd+9ETdlXQkXAPbzZRNpZv03Ax8tLZzrjey5Ga8Ezw1s30/suz7bdSk7bWN9TPbtMVdFl\n2TP/TsvFPLtZQ84z1Ek42s7nSbl7V8V7V8NvxVE/1VxRc2drwW9B2rNKT8y9ytXRw8FUQsTR\nPURbVjrJPj5GXLFzTrW4zTvMvlLr90S7e0hDtU1GssnVukfY50s843dEONFTzOfMt2td6dHl\nPzTjPys8Z0BMXdm2ulm5u+/nuMdO3N1PNkhVLlVELzJNWzHZxeO5uv9Z1ckyMlHtuzfWpbNd\n16++RjFR0TUrPbzvLNuyVDSworJCr6a6RSlCsc0mMb3NMy3Nrq/DrKKnwWnntDYqQ0g4LTy2\nvse5srbeZT03LCcrMy4yPMO5t6ymoaWvsMZWQi8lJS4qLC03S764/7mpvDzrvy1ES7rWRUA/\nrkM0zavDSa6828XBPjE9QzD/bS7jt2/zzz1nuk4rQctBvUMxsq8+K/fKNSguurbPOUarrktG\nrKGpvby0rN83Q984JSUuT8LHT66frdwww709JUzSUCsu662xSu+soMMrQK/BLCvvs7Q+L1u+\nySoqwbIyMMdKSHdKy7CqX8Ct1d3tyMDNxkwxRTAqLO/dOzZdVUgvM1fRw907z7DBMjrPrLZ3\n26up1FHMvus4OExLMi1E49vnwbOusWHMsbBLNsm2Nf9ZLza8MSjfrDouxq3KY+k7Qcc+LNOv\n38quvju7p61rLTq8qUclOLRnJyzXpK4zK8qtQSc3q7dKLVa4tFkqPbyqazzn685ZOzXDuj0q\nOU0+LkG9r7U6OLGkySkv6aOvMi65o7s8JWmosDMsuKvZKTTDqtErKVOs0yw1rrMvLduotNgy\nWKu2LSnAq9U2xbmxxTAytK82N7VrSrz3LsusVjWyyzHerzguxP8oMbG+NkW03TxHWEy3tz06\nualON83eNkbAQ/Opu109PDU8S93fwL2/Uyouv0Ex26WrTURAPM29OTGzrkUtyaq+ODk7ratR\nK0yyOSY76biw1SdErdEuSv9YrK5ML82nYzNH2XfB1TTzralBM2e090EsUautPzHXres2LVOz\nsb+7V1e6QicnOGW7q9XjrsApKsvTRW9lyqzLJzi+vT8xN8SnxjQvx9dFNEXNwO/rvttTS0Y2\nPK+2PE/APWWyNzO+sTtcvddvvkMxX8//QUq00tjEucVNLylQwrxOMryo/0W/u+fRby1Lrbkt\nU7zN2zw4uqe0Xc7HSigu3aas3F33z1k2K1+qqMo2O0P7bzUyR7S4v9NDTMi/4+OzxEztZ0Zf\nWzE6uPM0OfutrcwoLbiq2TnTzsQvKDi02TvfwSopy62qwSgiVapWLDG3oao/Jy1Ctq3NRV62\n1WVLPz13rr1HSFlD0cBMN1nX18tGOcymwk/LsbpHMig2wbLWW8Oup9EsLOmvv0UvwK7KLTLN\nsK3IOEXHxzwpK+2svG82c7SuVjlWZ29lzlEtSbrKP8O5QS5vw0/Jsj9IvqzdLiEoxKm0NCw1\nO9y+R1OrqNs2JS/BsbTvWee/w005O0e7rLhISbi8Py0+58vGa1PQyc7XU0BJa//Hs7nd/9XO\nzWtCPkvbx8JnQsSzx03nvcXvYUo3M0xb69H398e6y0Q/W9O5v1hC0Md3REY/X8nhXFFbX+ta\nTsW6vcfGb07XzUxE5+9PRT4/Ozc228BnPUA5U8hfR2W/zFVRP0fIvszvtsT7W+lb48LB3s7B\nRjIvUOtPW9VSO0FvVVzRxe/X0/dG97zLyLjDy72270Y/S1bnymVF/7vC3drJzffdZTQuOV1z\n41tAU7e7Z+HDe8u360dOe0k/Ni9Ou8/rXz1G2cXXw7/OwsRdRFF3vMo8NlVvV048Kk7BVztJ\nRDvdwVNPycztz8PKv722sLi+02FCSffRWEM5QVdGPmfUX088OkvnvP89PcS9zsa72NPByGO8\ntr3tX1tV61h33VvfTzw+WktJzspJPVNYVV1vybu9yHfv/1Rdzru7vca/YTxnzsfezM5jd1dv\nXWPX619j+0NLVDw+TUs/Sz82Nu/rXdLZY07r1OdXTlvbwcPfXFdU68jD1dTW1/vfa09Vz9dR\nRv9WQDdNzrWsvlJO08zR1crEvLvETjk7S93N41tnSjw5RWfMxVw9U/PjXf/v5d3n0dF7d+vL\nwL/FTUvXymvvUE//u8FDOTxFUffvTU5hb2VRW/9d+9nGysr3R0nKxMDMVV1Y51Vj6+lMRkZd\n829nSU/Kw2dET1Hc3crQ3e33/0pKXPfvysLJ2V0+PDxP0c7ad1dIRWPT08q/u793P0ZKYcDD\nY1vnX0BHTs64uMtj3s27uLu4ucPN70NCSFN370tPTEBBOj1Zys/nTU9XTUZpv77H70lHZ/vO\n11/vx7/N90xGPEbjy8heQz5EQU1NSWvVY0c7RVPnwsjJy87nXXfDtri6yGdJa+9Tae3r5cnT\nTTk8TNnAw15FW95HUdm/ytRdSV/nT0Rr1c9lPzgyP1H3wbm5ub3DzdTdw8fvVz05Oz09Rk5b\n/29rb1rvyr+3s7i+0Vk/PUzMv9FdTEpLU/PLxcHHyvddSEVWe3dTSkpJRDo/78G/xdNrZVdB\nTNfnY01FRT04Nj/NvL/O4+tvUlnXxru/yVtFPkJt59HFy9/pa1Nvyrq4vcTra1FNWuvNzMvd\na15PX9LJz8vr/2dPRU9r3tvdb0U8PD9Y187Wd1FNSkpV183Cv7zFaU5c993QXUA7NzY2P1/d\n4d3ra29ZV823try/w8fj49fLxsvnTkA9PVHfysfJ111NPzxDX29fU0xJSlRjzsK8ycrjUUZV\nXWve2eNTRkRGTd7JysnMYUpGRlnRx8nVd11KSUVLb8nAwczT5djCvri7vs7Zd0dEZ+PR019R\nTVFNXtfHzNXn/2NMR0JU993pTEE+Q1Pn92NNT09XTlP/ycPP3F9tR0VJZ9nZ1+NJQUVVXc/F\nzVtISUlh68nCwLy/xdPd48y8x9hvU0dEQ0h3zMrU3/9jTlD3ycrnTkVAQ0RI5cbBxc5lRkRc\ny7/AyntNQD5CVtXIy9P7Xlv/49/EvsvaTT48QUdZZWNZc2NVe8a5tLW+ydNdSEdLb9jvYVxf\nWV9ryr27v8d3SURDTf/zW0tDPD9CTWnPz+Prd0xIS0//09leV0ZAQEvvyMrX3t9v7+fp0cnf\nX1lGQExrzL68wMbFy9Lb08G8xe9OQ0JGV//XzfNNTEVET2PZytfvX1dPU2fevri802tZSk5N\nTuvj/1xIRUZZa93Jz+9ZSUlOX+/PzOdPRkE/Rk1f0tHb4e//59XEuLe8y+lZSkZJc8/P+09T\nVV37387ExM/hWUlGS1zv4e1bT0xHSU1l499dTUhGVXfXxcDE3Onna/fj2NPX41lTTUtUZ+Xh\n33tjX1133tHFvL/EyczIx8nN095zWVZPTlVfc/NjTkhJSkhNUld3d19dXXPp08nAwc/j82FR\nTExNWWNZU1NQV2Vt99v3V1RZXWd38+vvY1FQT0tTa/fa3+/p1dfLx8PAwMfZ/11aZXf73d/z\n5/NrX2Nfa9vZ921jVFlfaefd52ttb19WTk9TV01MU1Bfd+vTx8jNztXz493l39XfY2lfU0lC\nSE5dZ11n7efn3M+/vb6/ws7/Z1dv721TWU5MTlFSWf979+9tU1FOW//nb/Pj7fP3/+/f5WNf\nT0FESE1X7+fj2/dfWFVb3dXb1dt3aWNhb+/pd3NhWWFjd8/DxsfGyM7R0c/K0eP7b1RNTVzj\nyszn4953YV1d99X3a2taT1FWZ9jQ2+t3a05HSkxf93dfWVNUXWPdz+Xv/15bV1Nj2dLd+2tX\nUEtQZ9HS2c7W397Wy7+7wMjVb1VPT1Xz4/drW05LTVRt0+ldV1JHREZT39HT1917Y19v49nf\nY1RTSkZKV+HFyc/T71tRUWfRzdfva1RNSU7/3dxnXF5fVl3fxr29wcXM193f18zO52NVTEtL\nXuPM2P93XktFSFPr22tbV1BTUWXVys7vWkxJQT9IY+PpZ2dnY1tn3cvK429ZVVNRV93N0mta\nW1lPTunMwsfN0dXX3s/EvsPO3GNWTEtZ18/Xb2FbUU5P5c/L3W9fUk1JUN3Iyc7nb19YUV7b\n3/tZTktLSlfPw7/L2/djVU9b18zT61hJRkNFXNPV7WdYUFFd38W7u8LO2+tjc9nDx9l3WkxJ\nSU3pzNN3U0dDP0NV69brXlVOTlNf0cPK1ltMRD9AS+3X3W9jU01LXNPJy9n/XlFMTV3azNbj\nY1VKR1bVwL7AxszX5evQwb7I1/tlTk1f28zM329VS0ZFV9fMzttzVUtFVd7Mxcvd711JRE5n\n9/9WTEU+PEFrz8nM1/NjTk7ry8XFzm9rTD9HWefa2+9eUUlL98e+vsTXbVVNVtXDv8LXd1dL\nSmHn09V3VUc+PUV30c3R5V1dUE/dxsPGzV9TRD5G99rT1d1vVUtMXNnIy873Z0pGTnfX0dj3\nV01ESe/Lv7y+x87X79fMxsPK12dTSUz/0snK2FtLRT5Eb+Pb33ddTUZKX9TFxMbdWkhDSVtj\nZ29UST49Qlfr1c7R+15NT+fbycXG0OtOQ0hf697X22NORkvjz8rHx9VvU0dY59XNytLfZ1Zb\n383NzM53UEJATO/W083db1lKVdHKxsfOWUs9PEln3NnT22NJQkZz09XV13tOQj9O39TT2P9b\nST1Ia8vGw8XM3W/v0cK9wcbdXklHUtvMy9HhV0g+O0lc6+//XUxBQUrvycTJy9VtTlNp2dnn\nZ0xDPTtD+9bLzd1vU0hQ98bCxcnha09LVdrLyM3nXU5DS9/Iw8LJ62tMSFvhysbH1/9bTVLX\nxcHCyfddTkdX1c7Ky+1fSUVLb87GydNvSTs6PlNz5+tzU0M/RHvOy8vNe1RCQVXj1M/W6VND\nQErvysG+wtJrU1nVxL++xutPRD5K28zIyedYQTw/TfPVztVdRjw+TOvOycbYZ0xLVdjIx8zb\nVUc8PUxv0MnO22NLRkrrysTFzW1LQURd0MnJzON3TUZZ08S/wMrZV0ZHVd7NycznWk5JWM/E\nwcTWa1FGR2nbz87X/09DQ0vny8bK1V9IPjtGZ+/t61ZGQT5E+9TIytHvWktJT9nJycrnWUpH\nRm3Iw8HF229bVmvKwL/H3WNMREdazcPCxdRnT0hJ/87LzeNVS0JEWdvJxcrnY09OXd/GydX/\nTUE/P0rjzMvaa1FMRk3jx7/E1ftRSUNFc8vL0ndSS0xP98O7vcrfZVVLV9PGyONhU0tITV/M\nv8znV0tFRU73zczfZ1VNSlfvw7zC2W9bSkNCSf/dXE5JREFCS+fHyeddVU5NU/PNv813Z1hP\nVV3jwbzJ1d/v//ffw7zA221XS0dKYdfAzOfnd1lSVePHx91fU0dCQE3byc7/d19XVFfjzch7\nTElDQkdMa8vP92tnVlRb5cS+ym9bVEpHSFfdzHtRUUxLTl3PwsfZ6/dnX2PlysPVa11cV1t3\n28XE3HtnVlFTXuvW5VtTU1hl68y/vcXf721OSUpRaW9RS0hISUxf3c7Q91pbWVxj3c/Jz/9v\nd2/z1czEv8zZ4+Hv49fMycnXX1dRTk9YZd3cZ11dVVll69bP31xRSkhMWm/TzeN773d773N7\n615FQkNESlBd4czV7+vt7+Pf1c3Pa1FOTEtMTlfnbU9NWGfz59nJw83f5+Pe3ePZy8jf8+fr\n5d/f08rX/19fV1dPT2n3Z1FXc/fv7dPIzOdlYVVPTUta92FRTlZdW1VZ7+F3XG//d19d99va\nb2/p3ePr3cvEy9LPz9XvZ2/d41dOVVVPSlRp2913d+//Y15r599fV1thWU9f18rM3dbR32NT\nVlpvVUlKTEtITGPUz9vp3ed3XXPbz9n/e29jUU9d89fj79/n/23318bDytfR6W9de9PKytXU\n1ON3Z3fYz+dvZ1BIQkNNXWdbd+t7e//by8fN42lXSkJDS23vc21vY1tPVu/Y3O9vWU1LTmPd\n0+X3/21rW//Xw7/JzdPjXVVr2djhd15RUUpJd9zT3f9rXldQb93S3fNzW1lPU+XKxMbN4WtV\nSUpdaWtYSkdGQUhezMfN0+13X1hr0MnO2G9WVU9Md8rFydPr3fdd6czBydn/V1FJSVvOxsnW\n92VYTVTZzM3bYUxLQkJW6c/U43dhW1NZ2cnL12lNR0I/TOfT0uddVk5FRV/Z0dxjVUxEQkrn\nz9PnY1lVVmPIuLW6v8vZXU5d3czK2OtnWExLd8nEydn/W0pHTPPPzuVfV05ETN3JwMPS32dI\nPkJc39rhb1VMQkVvzcjI2m9fSkBP28zIzuttV0NFWdPExcrZ51dR98jBxM97T0U9QGXayMfV\n62dGQ03bycbR71dHPkBc0cjJ0etfTkhd1MvJ21FJPTg+TO/Pzt1hTj8+TenNzdJrVEVASuvK\nxMXQ72tQT9nDubm9w89jTlXdy8jI0/dVSEdrzsfGyutZS0NId+HT0u9XST5DT9/Kw8TU/0lC\nRln/3dx3VExCQ2fby8vS81lDPkpd59nV71RGP0Jj18nGyNXpYVfdwr6+wdhtSD9GX9zNyMnf\nW0M/T9/QysnXZ0tFSfPOx8XD1u1RS2PXzMzN2FlDOTpIb93W0XdORD5K+9PPzd9dSz9I79HJ\nxsrYY0pLd8a8vL3D2FdGTevZ19Xcb1dGRHfPwcPF2PtKQkln0M7P22dJPj9Y1czM0/9TQjs/\nWPvj3/9fTD9KZ9HLzNF7Uz48RG/b3N93VEQ9QGfSysbL191dW8+/urvAy+lMP0Nn08vKz+Nc\nS0NW1cvLzfdVSD9J48zEwMjT51NSb8vGyc3/Tj89QV7Xzs7ZX04+PUlr6+f3V0s+PERb08nF\nzetVSkvnw7y7vMjfWktd2c7O1+1fSD5AVc+/wcLPd0pIT93MzM3bX0Q+P1PXzMvPa1A9OTxI\nZ+/l+1lKRkzrxr+/wdddR0VL683Nz+NWRz5Fd9PFwcfP/09OX8a7vb/J50tBRm/NyMfN62NI\nQU/TysrM32dMQENP1cfGxdHpW1NZ28bEx9VZSz87R1zf2NfdVEM9PUdr5+9vSz86OT9j2dLM\n2HdfVmPLvrm5vMHPa1lnz8vR1XtMRT8+T9XJyc/vWVNMV9jLyc3b/1RKTVvRx8rP71VDPjxK\n/+Pf71lQSkxf1cK/yuN3VElNX9PJzNlhSkRCSO3Iw8nX92ldZ9PDvcHU61FGQENdz8nN32VT\nTU1fzsHE1mtRS0ZM783Gy9z3Y1ZRW9fFy99TR0JARFXVy9NrT0dBP0Zf3+VdS0VBP0RN1sXS\n6WdeZ2fZv7S0vMTL0+v/28vCz19OTElNU//Iwdp7W1JOUVnjysxvWlNTWGPdybzF43daTEVD\nTtnO71pfVFRXY87Axf9WT0pNTF/bxt9XTklHRkhdzszna2938/fQvLnG52dTTExMb8jG529r\nX2Nbb8rC129SSkZHSvfGxNh3Y11jXmvdyeNMRD9BRUdezszvZ1NNTk5P88zVa05LSkpNa93K\n0/tpb//r3cW5ub3Fys/V3tnOzN9ZS0lJTVX308vjY11dXF9r49Hhd1VVVV/73czExuFfWUxJ\nSExf/29XU1Fca2/h0+VjTEtLTlRb8+fvWU5PU1tp7dHKz9vb18/MycbGx9xfUU9TU1nz2+dh\nXV1hb+/hzs3rZ1dXY2//48nI13fv49vj7+vjX0tGSE1bXGHn2f9fYWf/92/t0dNpTlFUXVpb\nd9vvXF7/3NXZzMDAxs7V19Xbb+/Z41dRXGtvXV/r3P9bXWd7X1FY/3deUVr/3Xdr2M3VaV1V\nUUlDSF/va1tdZ/djX/PX52tVYWdfTExdb1tOU1dfW2fjyMLHyMbBw8rOy8bO811dXU5IS237\nY1ldZ15XXf/Mzt3r7d/rd2vRxsza39fa/11d9/tVSktOTkdHT//ta2dv/11VUf/j71hTUk9L\nTmPj29/Z1NPW19HGwcTK0d7vXVJb8+tvaXdnWlNb693d7/P3d1pMTmX3ZVxdYV1RVuPNzdnh\nb19NSVL/3djd5ef/Xl1v2tHd6/9bS0VETWl7Z15fV05V7c6+vb29wMfP09PIyNnpZ1FGSVPv\n3N3j/1VMSU5n6dXa529dUVVf28jFys7XbVpVXvf3c11ORkJAR1lz2+Pra1RNTVbf1Nnj/1dL\nR0x3187P09jfd/PRxr++xdl3UkdFTnfd3+d3XVBPX9nMzNHfd1xMS1dv5d93Y11VTVHhy8nL\n3WtPQUBK/87N0ePzaVVY69HM1e9hTkA8PU138/tnV0tHTHfJv728v8PL09LIwb/J52VMPz9H\nc9PW3WtQREJFX+PZ22tTTklDVeXCv8DGz99bU2vY1d9zT0Y/PURX39jfc1dNRUNSe9PV72NV\nSEhO787Ex9Hjd2lv1cK8u73O91tOTmvjztd3Y1hOV3fOxcPI1ndUUVt729feY1FOTFjr0cTC\n02NRQTxDTF3p63daT0tP98/Hx9BrTUQ9RFVv3Nl7W01FTv/SxL+/ytXr3s/Hv77E2l1HQ0ZY\n/9/bb1RKP0Jb/97b42lOQkBFZ9fJxMXO32tz18vKz95fRj89TP/f0s/f+09ER1f34+fzVUc8\nOkJj2M/N1N3/W2/Lvbu7vcnR/2P/1crHzNp3TURKa9PLzM/nX0tGUe3Uzt5fXUhATG3Ry87r\nX0o8O0NU9+97WVpJSFrRw8DDz29XQ0FRZ+Pnb1lMRUBH38jAw8jT32Nj28fBwsnrU0g/SHPc\nzM/nZ1JFRlPdzsvN32NOSkzny8fFydPna13jzcrN2l9TRT5KX9XOzttfTUREV+3V1elTRz87\nP1n/2NXh92dZa8q+ubm7wtpjVFzbzMnK129QSUdn28/N011PQUFMY9/X3PNZSUFDZ83Gys9z\nTUA+Rl/f2dxfT0dBTO/Xy8vZbU1AQEr3z83VZ05BP0nvysK+w87pZW/Rwr6/x+lfR0BJXdnM\nzdpfT0ZHZ87Gx8rlXU1JT9nKwsLK3W1OTW/b0Nn/WUo+PkNpzsjIzntPRURO69nd91FJPzxD\nUOfc4/9bTklTd8S7urvC12tZXePIxMreW05HSFrpy8fL1WNLRUZb4dHX71dNSUlWzsLAxddX\nSkNBW9zL0N/3WU1KTefIyM3rTkQ/PEjfz83XZ1RLR03rwr2+wszl/+3Zwry8w91RSkRCVdnO\nzdlbS0VGTvfGwMnWY0tGRU7XxL/G129cVVFrzcvcX0dCPj9IZ83I1OlXSERET+PO1mNNRUNC\nR2vWytpdT0pGSWfRwL7L1mdjX13nw73D2WtTU1NfzsK/z+9rVE1OUu/N0fdUTkpLUe/Ev8bd\nXUlFREvvzcfa/2dUTlhrzsLM51pKQ0FBTt3M1mdaU0tPXdG/usTO1efr3dTEvMffW0xHSEhV\n0857T0dCQUZP/8XE3nNXT1Vde8a8xM3Zd2FdVXfPzmFNRkJESlH3ys9nWUxJS01e1c/lV01H\nR09Z3cjM72NbWmP/1cW7v8/b7213b97Ew8zrbV9j7+PNxsfab2teW1he39HnV1FLTldb78/T\n6VNKRkhMWeXOyd9rY15nc+vTzuNnVk1NTk9d5+NbTE1KTlb/z8fI1dvd2c3PzsfK91lTTU5R\nW//Z1XNOSklLVmf309tjWVtn79nOxL/Iz9//b2tXW+vnV0pLTlFcY2vh61hPSExjX2Xn195b\nU1Vj9//v19PrZ3Pz1czLxb6+zd/3/+//a+vW2nddZ2/j92/r1fdbV11jXFNV9+tlWVtv7/9h\nb+9vTUlLU2Nj79nL0vd3d+97ZWfn5/9YVVpbUUlPX1xJSVNbXFt328bGzMvGxM3a39ndZ1hb\nbe/3d+PT1GtjaW9zY2/n1etdY//n83vnzsvZ5f9vYU5JVf/3Y3vv429bWXvf/2VjbWdXUFvp\n329pd/tvV1n/29vv7eHR3ePfy8jP2+f/WUxHVe3d7/fj2+9dWW3b3e//e19PSU1z3ePn3en3\nd1xj6/9bUlVPTk1Qa9vc6//vY1dQUXvZ3+vrY09NSVF36+/7d2dlWW/ax8LDw8TJ2/P31tHV\n3v9va1lSa9vP3elnW09IUF7f5+vvb19QTlvcx8fN2fdjSkVMXeXj3ud3XVVP/9HT2edeTkhH\nS2nf63NZUExDRlnn09HV2+/7d+fHvcDGz/9RR0ln2M7O1+tvVElN59fU1913VUlFT93Ny83Z\n82tXWe/R0O9fT0pCP0ph18/T2ftjTUxX18vP1f9hS0dM787Jy9Pn/1ZV886/v8PK0PdXVvfQ\nzt1tU05HQU3nzcvV72NVSEz/2s7Z/19URkVO28fExs7nVkc/S2/r4/dtaU9LV9/Ix83j91lD\nQUpr+2dXTEc/PUFl1c3V6/9vV1nbxLm5vsbTX0xP3svHydlzXUlFT9zMzNZ3W05AQlnjz87Y\n5f9aVWfOxsnQY0o/OzxN3s3K0O//UUdX183HzO9jSz9EVenMzNT3YUxLZc7Cv8PR53dWWdrO\nydFnU0g+QE//0snP42dTSEzlzMjJ02lPRUBL4c7LzudrTUFFTF3v5+tfV0xNb83Bvr/K3ldJ\nS1v/7/9tT0pAPUtl2c/N1ftbUVrTwry7vcnhY05l2c7IxtZ3V0hN79fNz9dvU0FASXfc2dnl\nb11ST9vEwcXK81hBOj5O59XV3W9SREdX3dvb42FNPz1Ea9fV0tl7W0xT18nCwcXM315VY9TK\ny9P/U0Q/QVXr2dned11RTV/b0c/Z72lVS05r1szO0edlTEdOd97d72FTTUhM38W/w8nW51VN\nZ9PJy9xvTUA6O0/v19ffX1dLRl/Hv7u+ydPvU1Nz0cfIz9zvVkpZ1cfL03dUSD5BY9zRz+1b\nV0lGV+HIx87rUkU7PEr709PeY1RJR07jzs3XY0xGP0Fc5c/R32NUSEpay767vMbN5W9j2sfD\nx9dXSD89RHvVytD3XU1CRVLVx8nN71tKRk3Xv7u9xtxzSkdX387R52dPRkNN/8rBwsrvVUhF\nU9jJx9D/S0M8PFHv1d1vWE1FRlHNvr7B0XtTTlHjyMTG1G9XUk3vxMDF0WFORD9DV9vKzdxf\nTUdFV87Gxs9fRT47O1DhzM3XaVlNS1nbxcXP41VJQ0JXz8TH02VKR0VL28S8vcXN3fdt98y/\nwtdvS0M+P0/Xys3fV0pHRk3ey8XP719RTVNzw7q6vs13U0pFUt/X71NIQENEU9DDwtNvUUhC\nRk7TyNHvU0A9PT5SzsjO91ZPTlr3zbq3wM5nT0pMWM7Cx99jTk9OU9m/vsxvUUxGRk3/x8Pb\nd1VPTlf/x73B900/PT1AWMa9x+dpYVtb986+vdllTklJS1rPwMV3TURDSFHpyrvC2etnX2dv\n18DB6VlLRkdMX87Dy2dQS0xOVdzHweFRTUtRWWnMvL/R+1VOTUhL79z3SkVCRk1X3cfA111O\nS09SUufJ1WdMREZITWfHwMrrb2dn++PPvbzPd1lPT1NZ2cfRd1VLTE9Vb8i/zm9fXF9rd9nA\nwNLp/2X39+XJwMlfSEA/QkNR183hW1FPWWN33cbD3GVLSE1NWt3N019OS0xca9bIv8v/Z15n\nY//fzNVvU01PV1/pzsnQb1JRV2Fv0szMe05JSEtVX9/MytdfV1ddVV3/3eVZVFlb8+PQy8XR\nb11bY3f/59/nZ0pER0xZbd3Oy93r79vRzsvGw833Z11bb3P/2dfnWlNbY2t33c/X92Fjb/vr\n79jK1+tr99vX4evX611HQ0NDRUlXb2VPTlNf+//vzsjcb2Nnd29p99TW91dfb+n/d9PK029c\nYXdzV1V361pPU2Xn523dzdNrWmv33f/r287tVVVl7+1z/8/L3Ptvc3dVSlPv811c/9/a/+3W\nydT3Z+fdc1lTd/9dSkpPVE1KWefa7+XTy8vZ1srAyd/j63dSSk5v4/9cZ21fSUhd59737eXb\ne1NV68zR2tPQz/Npa9/3VUpHSEY/Q1vv+2Nrb/dhUVPdzdbb293vX1j/0tDb3+Pta1VR3cnI\n0dXZ61JHSGHrd29v82tdW+PJyM3R1dv/WWHpz9nj4/NvXFlf1MnZ5+ttTkVASmn/a+/j72db\nWe/LzNvb3/dcUVPn2ev/Z1NKQkFV3tnf1dvd93fWx7/Hz9f/TkA/TO/b3+N3YVBHTf/n3+f3\nZVFGSFXTyMbGydb/XF3d0+t3XU5APT1M69PY3ftvU0ZLY9XO0NXrX01MWNXJys/db1NMTenC\nvb2/x85rT1Fv3t9nWE1GP0BS08PDy9j/XUxN+9XN3mddVEdJ98zExtLnWUQ8PEv/3+n3bVtR\nTV/MwcHJ33dbS0xe2czP22lTRDs+X9na3GtdU1Fb18G9wM73Y0o9QlPb0M3X+3dSUnfQxsTP\n61pMSEf3y8jFzc7T82/by8PL42NLPzo6TO3My/NVTEdGW8/H1e9lX1dKTdnNyMXd3+1MTFvZ\nv7m7w91jXlvf2dXea05HPj5Lb9rMzdDvTTo6Tffb3f9PRENFZ83CvcHL419OVGdr5WtdW01G\nRErdx8TE229JQ0z3z8vI1mtLQ0BN79nU0WtOQ0NZ2crAwL/I3VFHTWvXy8vR51tMXdvJxMnZ\nY05MW2vT0N/O0vdcSEbau8XI1UxOQjhET0tXYUlb7UdabdvDwsbdVzxPY8e/bVnjZUtVPT3N\nyr21z9drX2/OzdvJz+9bODc9UePOzVvT1udrRC4qLkqyrK++1uNMZ1tJW0vav6u0t71F3VdC\nPzU1OVJrzsZjX+fKurnM39nj42VGZ2NBY0xOSURANLSlo6VPKh8nSq+fn6Gq50YtJCQrLz69\nu7S998+9v797Ni4xKzpvXbWwrq3H32NI1r/D1vdnP0g9KDlCM/tAMTUvOb+vublGOfdOv6+r\nqbC+SkUuLT9OvLzd1UZPzysuTbypt0ElHyy/p6Gfrba+OicfISnPtbOvvbm3sLe8xTkzKiIl\nKCtFva6qqK+tuGPN28O8yE9jOzlrSfPbR0A4NTp716+tt79vV9rPx7i/0c8yKyslLjUpO6ys\nqLkpHyYwtKu+q662sckvPWNXt9nnx8C1qKq0tV09MyMfHyQvO1NFT8zMvbKxr7DId0E0Li43\nSu/XzdLr1c7Fua+vr7zbzse5ra6uq7HLOTAlKjM0Ql1va+M6KjFbycTeOkL397ywuba3vLvK\nUUppy7W62Uk4MzpP78XI5VM4LCYmLT9Ye//hy8fHyMS+vcnbb1Bf18q3tbzH61FVSkNZ59r7\nST49PUNj0cC+ztPVXkxHQWPN09tpRkVPd8q5vO1dT01RPjpV3MG/xc7Myb++vsf/92VOPjo+\nU99nPTk8SePOzsTD0eljXV1b3b21t8vnc3fbz8e7vclrQDQyMzZK38jGyMzTSEy5REVZ3ExH\nPkdI3b+4v9VfUl5NPTXD0kRBPUhNd86tvM9lSnvrY8K5zsffUDld7V9GSMldT0hOR1w6OstX\nY1tnVrC5wqy+wb9A20VKzvNDrrr33TlHudDOs0fbTzpBOz9fW9PaO1Tf12XG1XdIXThvQ0JX\nv66suEJETeXl0Ve2vmk9Ly8tP1PNusqvu82/1b7C2UNMNjRbSjU6LzPKuLOqrKi12zk/NTg+\nS0vdwjxAQyMyRS3HxDbQybztNTpIvKWkuMq6srVvOiUutKaswCofJSw5u8a2oafGQC8rc9/V\ntbCno6WzyT4uLyonJSsqNjhGurW1uMrTy+PDtke+rFPMtEu7vjNfPi7vQS334TTD2tuptl3p\nY7irt8g5MC4kZdH/PiwrQjkpMC/Koaauu1w+TzIvvLCmqNEz2N9JbSooTkg6LjrPprE7QsjG\nvuM5uKq+ubbPsco8u1QsJCI4sqtBNzX3u0Et86ygo+vHrcOtr8a96yUlLShZqK21UiEfISk9\nrqmjn7NfUzQ0VVTVpaeur0I6STMqLzs+21kvRdK0smE3PETVu6+sqLRTNSMtPzVjuffpPic9\nWb3IzL24SiwpNLKqqKCpuEEnID08zq65sMpCQTIjNbfGvjQjNVVDyKupn6pNQDg221M1trK4\nv0I9vb5bTzU7X0MvP1q+uMrCvr7Me2fExj7G2b+460TBsUozJifZRnvN0cFILWs9QLmyd6u6\nSVYuQ+3de9NvRy8jNberr98uMTU7P/exoKS0UT0vLSQzU/+9tL2xu2dKw+97XTM7NTIyPWm4\nva+pxazKzLGtv7lIVT05NztVyPM9LjtZvs2zqcTGTyzX0b+trMm4QycqKDmuvLezZV88KCxC\n2bO4xLfDPlQuPnfX2b/X/+NXWNXHxrpcW1Q+PzcyP0pTz8LPwbK2t+/O619IKjEtPDdJN9E+\nwttJ07zLvb3MwtHH3Xfvwm9d4zxLPkXnzs7n48Jady5j0//DT9rN71xXOvdP1uNj2etK48rG\nwWfIT1s//9O0ta69w3s9MTA7Y8Xd4c1GRT1Ib8bhzNRfTURFyL64v+NnXUFHZ8nIyndJRTc7\nVdq6t75vQzU5PkzczcjpRTw8PEhYW9Pd520+PjxJ0cy9vuO1zL67u7a5ws5fTzszOj08Vk9V\nWj9DUsLMw85vzu9ZU+nfzcrTx8Ld17++vL3K0VtKPEdJ4+PX2W1va2XPxsHG0Fc+PC84Rltv\nzMvZ0UxKNk4+X07PydnHwbTHw8rt9088QEGws29V/9xZ/+/fzf/f4UlBMTpJTtR7181TST9b\nzW/AykvhTUdERj/Dy8Lpykb3Q01C2Gu9XD8+P8d7y8/LuMvtu97Vyr65tblVXEA6aUZv5Vvn\nQmtZxWXv0dpGv2vD58u0Z8M93Dj7P7r3usrf00dCRkLPY2nCTUw/Umfv41Hd/81PPldPZ/Pb\nS8s7Vjlv78i6wrzr50DnTNTfv9hf60fORlTFUbg/7zxRQP/UT7tpWUdEVzu6293G1sVJ2z7A\nwsfTslXWSVPXOsFOtFW5RWVMyEpGvUPISL49ylPO1+NYuFPN6d61xMZnwzfOTU/hvU7fa0Zc\nNVLrvt1H93dNWDXbTLBPUss+vkFXR8FJvl9bW0HMSV9Jx0TZQ2tXQ7ZPtD57N1NOMck4u8tJ\nWEhnSfdIs1fFT2/fU9w/ulnFv1F3PzrOd1e40XfRLkXfOtfA/8iuTVW6Pce+RLXEV8PrPbrH\n97zIPcY2K807Z8Nb7/+8P//fQq/3VcRIU0g3xP/LzVlZ/1VI2M/Gw7pWRdFHTHvdU3dTZ2NZ\nPjdRacjr0ffN1kBtRP/VPk09PEVBy8HFusnR401PUs/K18xHSkJKW02+v76/TE7ZUstZzcrJ\nZUhHOEVVZ8e640Vvt7XM2uPJtLXF4ffpz+dcVTo9ODo1Nj/P6dvOb+vF1sy7vca8XfNhSENr\nb2XjWVD3UF/Ku7i/yFNLMzQ5NlBDSkJGRUfr1Lu1uLy91sra38Bt49trRDgtPELvuMdfSTlB\nOVtJU19Fd0JGPz5Kvrqusq+ytru9r8G63TkzJSYiKiw4S0vZybuzq6ukp7CxyW9QQUhJ005A\nODs/Ql/Kt7CvvN3Ma1U5RsO+a0UtLC41V+vVREQxP0lTR9HNwrq+u83Hu7GqoaSpqa+9y/9L\nOykjIR8fHyAiMTxU08m7wrOusauuusnKY1PfTV3vY/9tZ9PJy7+2sbzL6VVJSjtFSThIQko5\nNzIzQOHLY1tAPkjOvLOtrbm4s6+pqaWqrLe72Vk/NDEuMCgoHx8gICcrNFFQzb+zrKekoZ+i\nqq66ytlr+0tTPzIuMjE3RG3NztDR2/vnztXNxl/VQT85OTU9Rk0+Ozo4SExvyry5ubq3vre5\nt7GyucPT22tlV0E+NC8rKywpLi42PEdHV9fOvL23sq+ytbu2srS0sri8zOf3b2PcX2f7UUJH\nQD5JOT4/Pjw1OzlNTO/ey83LxMG8v7vAuMXdZ0pIS0tLWm9jV1lUX1dvZ97e/1VnWV/Ta8XJ\n61lMS01YTE9fd29349/Z3eXb1NNdae/ZzdPHxr3Jz9Hn72NUSFhPRENHSFtZTuvl/2tlY2Nf\nS05ZWVhMWenb0dXMytvf+9Xj6effy8fV18/Kz8/XzMzfe/fn49Xz5dHdV1lcUVJISU1vTklO\nT2FnWl/33G9hY19eW01Za/dfZ+n382Xd0t3rXf//929z38/V4/vtb1hPSFl3Tk1MT09JR2Pz\n3f/3d/NpTWndys3RzcjT1OfVzcrd891391tW5+HtZ+Vv61RMXWNjWFtYb29WY9/b2+Pf2WtL\nSVB36eXX3ON3d2vSzMzP2dvnX1Jd29vn9/dnXldf4dvc6d/l329v68/V43tdWUhGS1rr42tr\na1dIR1Fp6+//42NJR01319TX0s7be13t0tXb6+vzX1Ra2c7K09LX7V9VXefZe2dVUUk/QlP/\n9+93b2dPTlnTxr/Cv8HV71nt3dPa3/d7WVhd59DT3+HvWk1JTv/7b2ttXV1SV+nZz93/ZVRB\nP0lV/+vf2d1zb+vMwMLGzNfnXVRj2dHj81lOSURLY29tb1lXWU5Z79PN1etVS0NBPdtzR7Zd\nSsxUxd9KubHv91gw105H1ufQxs9lb+P/z8TU19tXSEDj5dG8d72+XMPrTP9hW8/fO1ZCPthL\nX9VNXGdOSv/3c8a/Z7rAz7nAvthV50lIPUI5P1FG1mdVPUpP77vR3co741Jdurm9wrHnM08q\nMMI3vLs7tzAu60tPOq6/tLAzRD02z3exoq28OiwlK0A0v7dLtt5EvVPEws9pZ9c6zEQ1yELj\nt9+wVFa4SLq4TrnN/y7KtLqsVy0sJTytpqCgyTsqIjXF47i57bS/QkIvNNm1rLjVMSw5Pr6z\nycvzV0lWV2+9s7KzUylbt7mvSywlHylZr6mpvywqHy1D17yqqrOtPDEvJ1e6sq3OPVM8XcZU\nuuFzx2lNQm9fsK+9Wiv/ubW0MykiJtyto6jDMigiOXu9rdXM3ry93s4+RcjDzcTtPNJBSesy\nYUhnuLPUzr93qqtJPr3Jq8YuKh8o0a6kqksrJyBE48S061NPxMzfZzNPxsK9VDdBPUp3S09K\nR1XazsfFuLy6wkKuvrWuQTwjJtOspqtfJSQjO7+/t1w1QNPKyvcuREpzwONfY07pyczlVVtM\n48rBvbqs0zi5wqmv3dcpO821oK/TMicvP8u7bTw+aePNazpEPmPB381ZQlNAT1djy9dOSjbW\nuLZQu620p287KSrNq6OmzjMkI0f3vb9K6b3EvDwqKDjKsb5OLSg1T7e0xt9IO0RpzrFz/7HC\nqPc1SyzKtq6fuO8yKDZfu7rDS1NnzL3L30dHVU9HOC8yP9vCyrxIODgv07q+w6mzpbw0Lizr\nrKWfs0IoIytItKqxtldN5z/XzrSrtXcvJh8qNme6wLlMMyooUU7RrKSoskMpLT20rKu0NzUt\nLFrItL3NOV5N78Jrv77JyE00MC0wU0/CtPdWKyg+NkPbv6+ouzwmKE6tn5+r0zEsL1S3q6jT\nzUtLyWe2t6620Fc1Mi85RHe9vsE8KjEtPF/Gy6nJv0ErQzDCp62q3UEuK0S+sry467uxwLpv\nz8PNSz8uKi4rP2POustMOy8yOT/Hta7KPCgqLNy4prK50TNbWtumta2247C/v7rJzNlKRjor\nLykpOkHfykVILyxfPEzTOLew37RPO1g+r62ssU1NP++tv7y/17a/wsfJuMfZXT03MC4pNDJF\n3mfeRzI2NGPI2bzTvbS0uFNMQE24sauyzG85b8K4ucxeVcK2r8xIOTNBOzM7LTEvN+Pd91M0\nODk6RUzr1+PIzq2qrb89PzjBqqqor8jlZ0lJQzrMz8HDZVFAPEpLQWc0R89IzGsvM2s381Y7\n777VzK5luLDTqefHs8nHu7G1uMdGXHtX3chDOF00azo090FQa026O09MYc08TznERUfLSLJT\nsLZetEnzssSrZ6++vbZVuGO8VN86OdssSTYwQDIrSzlVPm0v4Uk6zDjaaz/Qv7G+vtq2Q7pG\n3dDK4fu2V7J7xFW9QL9nZ1Q9wD3GNOc1a0JrRFVfQ8VX0EB720xvvtDHvM7O7enr0mfK07/I\na8Xe48bV1XNtPd84zj/ZRVb3T2tvS+dPXE3pPctHX0xB/+PV40q3SbZKzEPIyT/LN8tU92Nd\nyG1La+FPwVW23Ne4XcNZwTrHP9BdRlRETUPvWm0740e/b0HjXMxbzMBKuN/FSMJvxMZKy/PV\nUsFDe9HtOXfZa99KsljEzO2/493r0NnATbdD0jbzPt3jPuVEtlq6P70/uTxT60zaQL1PxErn\nOOXlMtM0zlB3R0pZPnc32kvlTNFFxvdVxVddV10z3k3v69NjWsJP88lQxDjBO81X6/vnv1LR\n5c02xDPPXnfJ77blvj67Qs89yfv3Wul3Yds6z+vYe+NXVdNYytzMP89MwMtBvsvKxMg3xzVb\nTXdLXVxpY0nEMME/xsZV6dm8T7dIv03AXUjRP85CwVK8y1LXVGn/XMftS8s9zd86Ous8vknb\nOt4z7XM6wzPBTNtOO7pGs07SyEvOX+FOve/vSk/ZQWdjYbZvwkfnzVzMXc7Mukm+U0jbbT7r\n1N3lQbVNvNPFb7mwQLvIWLlE0bs4yjRt3DbJO0fANs3LL9dGPb9TXE7jc3e8RrrOQq86ybU6\ns01OtTy6SjxNX0tvbW/P20tLvzO+b0W/Qla+L0q/S17ASl3FVP+63cK9Sc7zOdQzPN49c2NF\nRldCXMdRWu9BY8ZFzVpZwdbVx03n2sXVvm+/xGvUSUvlzd3YysjfxUNC7We+usbjyj1XSEpS\nRk9F607/0eu21b/Azc7rS+NlZdlFT0VMyHfF1eG728tMTUBXZ+v3QUU4Pz9TR19Nzr7Lv0M8\nOmHEsa+94TQ2MkVOT1VFSOv7w7+5v77T1PNKPjU+Tnfze2dv7829sK+urrrIa0pvQ0VOQUM9\nOD42VWtdys/N0ddXzsC/uL7L31NLb0rMa1/PU+NcTlVV23PRXktRQUZdzrvDwO9QSU3lwb29\nxVM9MTdAU9fZzslcb1VZx8zH09XvTE9ITFrf385rX0E/P0nn1c/OX0tPPlpp3dzO1VdJRElL\n42/f/1tJVUta1dvPxc/KzWfrd9O8v7+/3ttMTv/c2ettSFVDSu3nu72zvb7JY9N31evcW0RC\nMz88a2H/505GPD40Tl931tnv70v737y4trbAxu1XXF3nzOfEZU9BP05h1VvRTV1HPz9AZ1zP\na/NEPj4/U9nMzcne72/71b7DwMHZ/0pFQVnv88x371NFV0fp08rL2VpRQU//z8rIzuNcTk9Y\n3czL3edbRkBLV+vGyMjR72dbb83Hxb3L2W9NR2ff38/vV0hBPkr/zsLGw9PfWVXj1cvO03tN\nQz1FV//K3+9RRT47Q2fv39NZa0nfd8i/w8DnaUJERFPj18/e911KSVxzwcHJd0pHUvPT0V9L\nTEn/y7/Fzv9YS05dU1dN2cS3sri/50w+RFXl6+dJOz4+RlbMx8TGyNLP7e/fy8HIzfdpRUVH\nT3dv61BMQz86SG/ZzMrM3M9z59XHz97Wa1pRTV3PzcrVTUk8OVfjw7u/1+9vT1ffxcDD305D\nQj9AU9labT85OTs7W8i/vc9jRUI/Ud++sbW4wM9aT09czNX/d1xET1ddxLy8zsnOT11OTM7P\nY18/OTg/RtjHzNDj2tVj08S/urTMz9FrTc7F68BLM089MUJH4bvKT2dXSkhtU9fR21/HVVVn\n5dfOVkc+ST9S6+PK00hV3Ur/1e3DytpO+2k/U0xjwMvpytte71nhu8C93VxDQU09aczj3mdX\nVW9N29PS11RKT0c+Rk7vbef//1vP7XfAxsbKTc7tUdH/zL7Oz9Fve2NTb8rz81tHQTxKU8m9\n7+N3RU5BWdXNwcnJyu/jTE7NycjOWXdAO0dT18FvVFVDRjxSWO/VTUfzPHdbP7zP0MJFXc9E\n3vff2j9VTl9v69u86+ndREJNQ/fAxczvRl9RW3fz389n3/vRVctjxbjAwMZRVUxO2MnBv+dh\nY0lrTvNd7/NVZ01fTEpS51tr7+PczOPL29DOTkM+REhIbd3M2FdpUFfX98fAxMnj729T32vJ\n2uPZVltWU+fRv87ca1JTVV3V2d9RPj89Q0JPTsvz5V9zQmdMY97Vy+9RWU7f3ci5zs1YVETZ\n///A1+XdPVhARdFvv8/dXEBDRUfr3rzO2fdYTlRfVcfJysv/ymtvzcS6wdHvS05Qd93RzGtM\nTEhIS1dnY1dJT1dHV0hn5+Nf2W1n2fvZw9TOSk5dS1tr0s3Fd1PjTOlpRtJGY15D1f9rym/N\n2FNX62fY3WnOVeFVR+NPb2Vf729JR0tS62/nxefH0+nOb1nnSN3vVtvr2tFPb2vR29v3zFVN\nVT7Rb1DP98nNXl1d///nZ8Npd+dNzNPNy83B3dRK2mNP3D3a52/PX7/KxdHYyEdVSU7LXNnn\nR2s8O11N81lMSkI/Q0hd0+XN52/GXNe907vve/9HUURzysTH52tDY0JMW2/K9//dRVlRb8rK\nydx7b1xbb+XT0M5n0/ff3t3Ra8xpT3dMRVd7xtfJ69ldYXdK0NPpXndl2f/zzNfeUUNHd1fv\nd3fXUltRSGtTe8DOudnzd2HjU8vjxtlrW1tr8+PYz29UP0lPd+vPzs/KSttLV/890mf31UNj\nXz9HREvcWdhZQWU8aV1j++v/c2d7bdHCvL7M9+ll/13329vJWFFvS2dX0+vS6Wd7UWtU5+PM\nztDbydPr0NXR2tnU3Hfbb//a995lX0g9TUbP1tTXX1dMTEj/3e/PZ9lNZ0VjzdHMzuFOS0Nb\nc83O51NEPz1MVdDHx8rd72lPUv/rz8/O1llMRExf43v/b0tPUVvHv8fG+2djXWfZ18Hn71lN\nW1NVY9Tj2GNIQkJCVtfpzmNeTWP/58u+xr7b3/9LZ03Tyr6//19HR1d33czM129ITFZNz9Zv\na2tX5U370N/B0f/TW1djd8jF299TWlNJQT9P89vf+0xJP1jhz2dPQlPd19/f2czJymNVSU9c\n/+NfW1VZSkxFSczMw83nZUZdd3fGy+POT1tZRmnv2dbO5fdHW2frwrzFwsvVTlNX7+Xpymtn\nQ0tP3MXf2Fd7XklHPUZv2e97UUlGS9nLw73O2l1OTmft0czN0Vv3TGdj38nO1ftfUE5TXsrP\n119BQE5OWd/SxcXPUUk/XdDHusfXXU8+Pk1SxsrLSkVAO2X3a1/Vd/dTPkRU4cPN33da/15c\n/8/M22VTW09ATP/Evcbba2NbW/vQ0cvNZ2NGVG3rwtXV011RX1fby7y+0dhz90pTY9z30d/3\nSzw+RtnPzednW0tHRe3Zy97XT0dDRm/Rv8bPe91LQU5P19vV309KQUNA38nIwtP3UUdO283Q\nb+ffV05HRHu/wr/Za1tDY+PAucLJWVtOTk1e59PH5d9IP0Bd2MZp329XTDo8X83Hy+ddY1xT\n1MnAw9vZY09DTnfBvcbbb1BFSErXy77Gc0I7SkxYY9XG0dtYU1l717y7vM1rVlpXa/fRy19v\nQklCSPvWw9xDQ0lEXWVj3P/ZTEg/Qk3pzdXIxuNVSz9N58zBe0tPPlFPb9HFyMTrVVtr3b/E\nw99VWU9KQ2/Xw8jO41db7+fUyL3D209GP0XfztPZ5WtbVkZP48nP505NSD5Md9nZ62VfXVlM\nZcy8vdVeTElh49fBw8bZVEpJS1tvXl/37WtRQUNLY9Tj71lNTV//zMfMvb+/20ld7ce+d09P\nV1lFRFTXx9ZVQ0dPUVtt/+f/41tGT2nXw8Pb7+1OTkNEW8/L2HdTSkhf987Mxcn3X1/fycDA\nzNvL129ORV/YwsPaZ1FPVd7b5+Xr0NdRPT5N99nW2d3lT0xW/83F1c9fSUBCXHfb1uP380tJ\nXVHW19zaW09FT3PZzMzR7+NaTk5DT9vnZ1JMRUNOX9fGzNX/911j/8q8ubrQ2efv7//rzthn\nSUZITlFNY9t7XVNJSUVQ39XO71Xv62ldd9zBx93/UldfaW//5+Xt/2FfX2nZx8v/+1FdaV/7\n79XI/09PRuXP0c7P69pvVVFKW2fbzNtbWUth/3Pr69n3a2ddd+9v2vdTUU9PVVdt69/la1tb\nUWdjb/Pje2P/Z2/3593S2ePl73tz/2/n53tbUk9TX+ff3uvv6+Pv0dnPysXL13Nne+3n6dvf\n7XdpXF1dZ2tvWVlYV2FXY2n/6ef/d2/v39/d3eP3X2NaW2l3/+//b+9v9+dvZ+/p5ettb//n\n/3Nrb3d3729nbf/Zzt3r+93naVtYd+ttW11dZ2tv8+/j82drYV9jZ//j/29nd3N37/Pb3/93\nc3NrY2d77+dz93d7///73+H393trc/f/+/f/7f9tY2N77+/j6/fz9/v3997Z3e///29hZWv7\n9/f7d/97d3d3/3d3a2tjX11n++/t9/9zb3dvd/Pv93tvb21v/+/r93f/////d3f37/f3d3t3\nb3t3+/f/9/f3///38/f7/+/z/3t3//v/e3Nvd3d3d/////f7//97d///9///////////+/f3\n/////////////////y8=\n\n--Where_No_One_Has_Gone_Before--\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Where_No_Man_Has_Gone_Before\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\n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\nl7Vry4B9aM+yKjifMosAADs=\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\nR0lGODdhQAHIAKcAACQkJNsAAAAAALZJJP+SbbZtJLYAANuSSZJJANttSf+2bZIkAJIAAEkk\nAElJSbZtSZJJJG1JSduSbW0kAElJJLaSbZJtSZJtbdu2krYkAP+2kv/bbdtJJG1tSf9tSf/b\ntgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQAHIAEAI/gABCBxIsKDBgwgTKlzIsKHD\nhxAjSpxIsaLFixgzCgCw0WDHgh8zchRJsqTJkxYdoCSokmHLgS8hqpzZMCbCkANxrtzJs6dP\nmD8HIoAwFABRCBIpQIxQ0CZCm0wNOlWoM2jCBQiwah2AoMCABAXAik1wgGwCAmStqqU4NeLQ\n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\n0CK3jI33rIAAADs=\n\n--Where_No_Man_Has_Gone_Before\nContent-type: X-BE2; 12\nCOMMENT:  This is NOT a MIME-compliant content-type, but your software should be robust.\n\n\\begindata{text, 269602880}\n\\textdsversion{12}\n\\template{messages}\n\nWhere no man has gone before...  \n\nClick on the \"death star\" icon to start the animation:\n\n\\begindata{fad,270222644}\n$N icon12\n$C 30\n$T 30\n$L andy12\n$P 0,0,20000,256\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$A 29,24 -1,76\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$S 216,264\n\"Fire!\"\n$V 260,260 417,242\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 250,158\n$V 319,193 265,172\n$V 316,199 290,187\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 187,122\n$V 319,193 215,141\n$V 316,199 232,155\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 241,145 179,117\n$V 265,163 179,117\n$V 316,199 180,127\n$V 169,120 163,101\n$V 184,111 188,89\n$V 163,101 172,115\n$V 188,89 190,110\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 246,158 180,127\n$V 169,120 163,82\n$V 185,109 204,80\n$V 163,82 172,115\n$V 204,80 190,110\n$V 175,133 173,162\n$V 173,162 181,132\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 141,158\n$V 141,158 149,161\n$V 141,158 130,154\n$V 130,154 137,171\n$V 137,171 149,161\n$V 130,154 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 149,161\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 164,61\n$V 185,109 219,66\n$V 164,61 172,115\n$V 219,66 190,110\n$V 177,134 201,167\n$V 173,142 201,167\n$V 188,128 256,143\n$V 256,143 195,120\n$V 175,147 147,192\n$V 147,192 173,142\n$V 168,127 113,103\n$V 113,103 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 132,80\n$V 185,109 195,52\n$V 132,80 175,116\n$V 195,52 190,110\n$V 177,134 192,201\n$V 173,142 192,201\n$V 188,128 241,106\n$V 241,106 195,120\n$V 175,147 234,175\n$V 234,175 173,142\n$V 167,130 113,143\n$V 113,143 171,136\n$V 167,130 160,153\n$V 177,130 210,140\n$V 190,110 208,94\n$V 172,105 172,64\n$V 154,122 120,115\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 139,55\n$V 130,154 175,116\n$V 139,55 190,110\n$V 177,134 219,150\n$V 173,142 219,150\n$V 188,128 193,72\n$V 193,72 195,120\n$V 175,147 226,80\n$V 226,80 173,142\n$V 167,130 144,191\n$V 144,191 171,136\n$V 175,147 173,202\n$V 155,138 130,167\n$V 157,128 121,89\n$V 171,109 165,69\n$V 191,115 205,70\n$V 184,116 247,130\n$V 177,130 191,172\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 156,170\n$V 156,170 177,130\n$V 156,170 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 179,200\n$V 130,154 175,116\n$V 179,200 190,110\n$V 177,134 221,72\n$V 173,142 221,72\n$V 188,128 123,82\n$V 123,82 195,120\n$V 175,147 120,89\n$V 120,89 173,142\n$V 167,130 276,111\n$V 276,111 171,136\n$V 172,131 164,203\n$V 153,136 74,143\n$V 152,114 128,56\n$V 179,113 182,44\n$V 199,118 301,141\n$V 194,137 215,183\n$V 151,150 97,225\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 204,106 216,100\n$V 215,110 221,109\n$V 231,98 236,95\n$V 241,102 241,102\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 214,99 214,99\n$V 215,110 221,109\n$V 242,84 236,95\n$V 246,91 246,91\n$V 221,147 221,147\n$V 207,133 207,133\n$V 168,166 168,166\n$V 150,161 150,161\n$V 175,92 175,92\n$V 192,90 192,90\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 220,75 220,75\n$V 215,110 221,109\n$V 242,84 236,95\n$V 278,93 278,93\n$V 248,151 248,151\n$V 211,172 211,172\n$V 176,196 176,196\n$V 137,186 137,186\n$V 178,70 178,70\n$V 198,64 198,64\n$V 169,100 169,100\n$V 192,97 192,97\n$V 204,137 204,137\n$V 151,150 151,150\n$$\n\\enddata{fad,270222644}\n\\view{fadview,270222644,2,0,349}\n\n... by Curt Galloway\n\\enddata{text,269602880}\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: application/atomicmail\n\n;\n;\n;\n;\n; This message contains a ATOMICMAIL program.  If you are reading\n; this now, that probably means that your mail reader does not know\n; how to handle ATOMICMAIL programs.\n; \n; If you were reading this with a mailer that had been extended to understand\n; the ATOMICMAIL language, this mail message would automatically interact\n; with you and take certain actions based on your responses.  However,\n; the language is designed in such a way that ATOMICMAIL programs can\n; NEVER do you serious harm.\n; \n; If your computer has a ATOMICMAIL interpreter but it has not been linked\n; into your mail system, you can run this program by piping the mail\n; through the ATOMICMAIL interpreter.  (In Berkeley mail, for example, you simply type\n; \"pipe <message number> atomicmail\".)  Otherwise, you can simply write the mail\n; out to a file and then type \"atomicmail that-file-name\".\n; \n; If your computer doesn't have any ATOMICMAIL software at all, you\n; should probably reply to the sender of this message to tell\n; him or her that you were unable to run this program.\n; \n\n(&checkversion 1 12)\n\n(defun init-ctrs ()\n  (progn\n  (setq newline \"\n\")\n  (setq summarizer \"mmsurveyor@thumper.bellcore.com\")\n  (setq global-survey-qid-ctr 0)\n  (setq global-nesting-level nil)\n  (setq this-level-ctr 0)\n  (setq total-questions 0))\n)\n\n(defun nextctr ()\n  (progn\n   (setq this-level-ctr (plus this-level-ctr 1))\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1))))\n\n(defun pushnesting (txt) \n  (progn\n   (setq global-nesting-level \n         (cons (list this-level-ctr txt) global-nesting-level))\n   (setq this-level-ctr 0)))\n\n(defun popnesting ()\n  (progn\n   (setq this-level-ctr (caar global-nesting-level))\n   (setq global-nesting-level (cdr global-nesting-level))))\n\n(defunq onelevel (i)\n  (strcat (int-to-str (car i)) (cadr i) \".\"))\n\n(defun apply (f l)\n  (magiceval (cons f l)))\n\n(defun getstring-oneline (prompt def)\n  (newlines-to-spaces (strip-newline (getstring prompt def))))\n\n(defun getstring-notrailers (prompt def)\n  (strip-newline (getstring prompt def)))\n\n(defun newlines-to-spaces (s)\n  (let* ((l (strdecompose newline s)))\n    (cond\n     ((null l) s)\n     (t (strcat (car l) \" \" (newlines-to-spaces (car (cdr (cdr l)))))))))\n\n(defun strip-newline (s)\n  (do*((len (strlen s) (- len 1)))\n      ((or (lessp len 1)\n           (not (equal newline (substring s (- len 1) 1))))\n       (substring s 0 len))))\n\n(defun cadr (lis) (car (cdr lis)))\n\n(defun cadar (lis) (car (cdr (car lis))))\n\n(defun caddr (lis) (car (cdr (cdr lis))))\n\n(defun cdddr (lis) (cdr (cdr (cdr lis))))\n\n(defun cadddr (lis) (car (cdr (cdr (cdr lis)))))\n\n(defun cddddr (lis) (cdr (cdr (cdr (cdr lis)))))\n\n(defun caar (lis) (car (car lis)))\n\n(defun cddr (lis) (cdr (cdr lis)))\n\n(defun caddar (lis) (car (cdr (cdr (car lis)))))\n\n(defun > (a b) (and (not (lessp a b)) (not (equal a b))))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun thislabel ()\n  (strcat\n   (cond\n    ((null global-nesting-level) \"\")\n    (t (apply (quote strcat) (mapcar (quote onelevel) (revlist global-nesting-level)))))\n   (int-to-str this-level-ctr)))\n\n(defun revlist (l) ; like common lisp REVERSE\n  (cond ((null l) nil)\n        (t (append (revlist (cdr l)) (list (car l))))))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" (of at most \"\n   (int-to-str total-questions)\n   \"): \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (car\n     (car\n      (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n    newline)))\n\n; USAGE:  \n;(SURVEY-BRANCH \"What is your favorite color?\" \n;               (quote (\n;                 (\"red\" \"red\" (branch-question-set \"red\"\n;                               (quote ((SURVEY-SHORT-ANSWER \"Why do you like red?\")))))\n;                 (\"green\" \"green\" (branch-question-set \"green\"\n;                                   (quote ((SURVEY-BOOLEAN-ANSWER \"Are you green with envy?\"))))))))\n\n(defun survey-branch (prompt choices)\n  (progn\n    (nextctr)\n    (strcat\n     (thislabel)\n     \" (\"\n     prompt\n     \"): \"\n     (let* ((ans\n             (select (cons (list \"\" (informative prompt) NIL NIL) \n                           (cons (list \"\" \"\" NIL NIL) choices)))))\n       (strcat\n        (caar ans)\n        newline\n        (cadar ans))))))\n\n(defun branch-question-set (branch set)\n  (progn\n   (pushnesting (strcat \"/\" branch))\n   (let* ((ans (ask-question-set set)))\n     (progn\n      (popnesting)\n      ans))))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (getstring (informative prompt) \"\")\n    newline)))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (int-to-str (getinteger (informative prompt)))\n    newline)))\n\n; USAGE:  (survey-boolean-answer \"Do you think I am sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (cond ((getboolean (informative prompt)) \"Yes\")\n          (T \"No\"))\n    newline)))\n\n(defunq surv-pkg2 (q)\n  (progn\n    (nextctr)\n    (list (strcat\t(thislabel)\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q)))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (cond\n        ((equal (cadar lis) t) \"Yes\")\n        ((equal (cadar lis) nil) \"No\")\n        (t (sexp-to-str (car (cdr (car lis))))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n(defun survey-complex-form (preface qlist)\n  (progn\n   (setq this-level-ctr (+ 1 this-level-ctr))\n   (pushnesting \"\")\n   (let* ((ans\n           (formatfillinlist\n            (fillindata\n             (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n                   (mapcar (quote surv-pkg2) qlist))))))\n     (progn \n      (popnesting)\n      ans))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval (car qlist))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((equal (quote survey-branch) (caar l))\n    (plus (branchcount (caddar l) 0)\n          (qcount (cdr l))))\n   ((equal (quote survey-complex-form) (car (car l)))\n    (plus (dcount (magiceval (car (cdr (cdr (car l))))))\n          (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun branchcount (l prevmax)\n  (cond \n   ((null l) prevmax)\n   (t (let* ((this (plus 1 (qcount (magiceval (caddr (caddar (magiceval l))))))))\n        (cond\n         ((> this prevmax) this)\n         (t prevmax))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to summarize subject id qlist)\n  (progn\n    (init-ctrs)\n    (setq total-questions (qcount qlist))\n    (sendmessage\n     (cond \n      (summarize (strcat \"\\\"\" to \"\\\" <\" summarizer \">\"))\n      (t to))\n     nil\n     subject\n     (strcat\n      (cond\n       (summarize (strcat id newline to newline))\n       (t \"\"))\n      (ask-question-set qlist))\n     NIL\n     0\n     T)))\n\n(defun maybe-displaytext (tx)\n  (cond\n   ((equal tx NIL) NIL)\n   ((equal tx \"\") NIL)\n   (T (displaytext tx))))\n\n; THIS IS THE END OF BOILERPLATE CODE FOR THE RECIPIENTS\n\n; user-generated part begins here\n\n(maybe-displaytext\n \"\")\n(handle-survey \"nsb@greenbush.bellcore.com\" T \"RSVP NOW!\" \"nsb.greenbush.bellcore.com.1991.8.17.15.18.4\" (quote((SURVEY-BRANCH\n   \"So, can you come to the party?\"\n   (QUOTE\n    ((\"Yes, I can come\"\n      \"Yes, I can come\"\n      (BRANCH-QUESTION-SET\n       \"Yes, I can come\"\n       (QUOTE\n        ((SURVEY-INTEGER-ANSWER\n          \"That's great!  How many of you do you think will be coming (including yourself)?\")\n         (SURVEY-SHORT-ANSWER\n          \"What kind of *vegetarian* food would you like to bring, if you have any idea?\")\n         )\n        )\n       )\n      )\n     (\"No, I can't come.\"\n      \"No, I can't come.\"\n      (BRANCH-QUESTION-SET\n       \"No, I can't come.\"\n       (QUOTE\n        ((SURVEY-MULTIPLE-CHOICE\n          \"Aw, that's too bad.  Why not?\"\n          (QUOTE\n           (\"I'm busy that day.\"\n            \"I hate Star Trek.\"\n            \"I hate you.\"\n            \"None of the above.\")\n           )\n          )\n         )\n        )\n       )\n      )\n     (\"I  really don't know.\"\n      \"I  really don't know.\"\n      (BRANCH-QUESTION-SET\n       \"I  really don't know.\"\n       (QUOTE\n        ((SURVEY-BOOLEAN-ANSWER\n          \"Well, please don't forget to RSVP when you decide, OK?\")\n         )\n        )\n       )\n      )\n     )\n    )\n   )\n  )\n  ))\n\n\n--Where_No_Man_Has_Gone_Before--\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAIguAAAAAQAAH0AAAAABAAAAAAAAAAD///////93////////////////////\n//////f/9/////////f39/f37+/37///9/fr6+vr5+/r5+Pn4+fv6+/r6+ff2dnT1dXZ29vd\n5+fj6+//9//v///3//dv/2dnXV1dXV1fXVtVVVNVTk5MTU5PTU5XWV1bXV9r//f3/+////f/\n6+///3dfa/93b/d3d/f/5+fr49nZ3d3X3+Pn/29n///3//////f/d2dZUVFPVVVZX1lXWVtX\nX11bW1trX2fv49/b19HO0dHNzMzLx8bGwcbDzc3R193X49nf59vn52/r48/T3c/d119jZ9t3\n79/nz99ZT1/jY29X/+tdRm//Z0lLT01PSkNGW0o9SkRrS05FV0A9Q0tVWUlK3/9fV87Zx8/N\n2bzd68zBwMv3y8Ldzvf3xsrPyd3HyV3VzF3NTtf3zN/jSt93Tmtf71XrZ11VS+s/b3dLTmfn\n91tG3U1N511na+NLym9v19PKwsvZ29P//2PZxs5f78RLQG//TdlTuc9O6//nd13KY1v/2VtC\nvUHNO8VKv0dbw0b/SM9T11NIzlvZWb/n1VvK1WNXuv9FvzlPvzrB2UHHXUvEQ/fZRtlPytXO\nRWf3P0pZUdvTd8Q9RslGSrg378Q+vb7b91/A1V3/1VvFUUTAW0W+3z+4TU7AzUPPU+93/9s/\nT8K7PEZHRd+4vm/AWUc80znrumvMSWf3vknGvufZtkO5/0fLwj27zz/Asz/C20DV/0FLxS+5\nRkLC20jPwz2//0e8x0LCd0jNzzvT6+vLQUPd1zjjuFc/uD85wU8868A3Y74927s/91ldSFfd\nSe9fb3fd1z/f39dI08pHd85AWb3jQcHTT8fOPcnCT0XDz0xj2dFfZ9/F199ryuNfZ0TP/0x3\nPFnr/0lH2/fR0c/I3//jwFfX1ePf0//Z0cbLa8fbvGdjyGtX3+fdd2Pva9ffTufjTu/nY1nn\n1Vdr3UvT31Pd/0ld12d391dn61tKb+NPTu9MROtPVUVrQ0lVS0g/b0JI71VbSvdR2U9Z4+/L\n22PRyG//3dXfyszM68/Rxu/r293rZ+PLa9tfSOvK12f/Wd3j787bW+9r7//f5/9R60/TydfT\nzNfd3crJ2evr387H22Pv2W9X79Vnb2NTZ1dnV91K9+v/513X92drY2d3//9r42P////jb09d\nUVdXWVtNTFVMQU5NS0ZRSE5KTUxZV1X373dv39vR1+vf09fP49vf29vvzuNZb2fv2ev3b2ff\n5/fR21dn293R63fn59fj619VZ29r487X293Lw9f3Y/dRWXfZ72PKxMPBv8bJxcTLb2d3X1Hr\nW1tZ39/d9+ffVWtrU01fY1VP2d/Z1d/v901VSU9XTUk1ODQ8NTxKPDE1QUdCU9/TV2PJ4+tX\nV04/StvRz8e3srCvra20uLm731dFPzQ5Oz05PUzjzMXDubq3ubrEyc7rTEdPTzxGS0pD4+9j\nP/fTyDVP97hLVf+30W/PrLPO17e4XffP9z9Cb/88SF3I/0zR1dk/T189MTY3LCcrLjIvOE9n\nY8m0rrOura2urq2zsbO2wcK/z993W008Oz04LzU5MjE7QD85VfdfUVPT311r0crj68vG0Xdn\n519RQkY8Pjw7ODxJPD9F/99398Syvd22q6y1sqywr6+vsbe1wbvCvdPNy7vJ0ci/v9vLzMXr\n21tTS0M8OTcxLC0xLSkqMi4rLTUyMDA5PTY3Pk0/Rkj/X3ffy8TBxL23vLy5t7u+v7y8vr2/\nv73AxL++vLy9vr2/vsO9wcfGxcfIy8jd53dVSkI+PDg3NDg1NjQ4ODw/Q0lPTl9n43fd2dXV\n08vV09/j/2tbT0dBRD06OT09PT9ARk1VZ+PZ68vGvr+7uri3tbKwra6tra2ur7O2tr7Fx9Pn\n509PTkVAPDw5NzUzOTc3NTg4OTw6PTw8O0I9Pz49Q0Q/P0NLQU5RRP9Xd1XHX87JzcS+vsC/\nuLu9trG0srGvr662rLuytLXLvsPZzyrGrT8zw18zY808X3dVLz9IKD13PjhJPTQ9RzI9SjU4\nPkQ3Rk4/RFFXY1P/93fd58TRv8zExMXBwe+9xb7Iw8nCvMzCucO5vMq7xNu/z+P3a2dFY0tj\nPd82QjpNOlVJQldDTznJP9tBwEjB53fO1TzfvFnVxV9Ny+NVvtFPu8pN379J/0PLTUX3PFN3\nQTzNNE85XUs/Z0k859M+X8lbS8zTScfOv8m1zc68vsC6yr24v/+wU1O00V27XbzVstHO2cw4\nwe/n17bP1/drWU5HPjs5LCxBMS01Pzw9Qk1Tzl9jw9VX/9dvQ1k+QFNKQd3M6+O6vMPHv8Vv\n2+vP913NWdfP38zVwre9uK6zr62vsre6vHfOPEdHIyY0LyMlRSovPm80QmtOP9HI69HFzffJ\nZ0r/RD45Tj5DSudb0dW8vsqusNdIb+M3L0vfQefBsK+wra2tra2tra2tra2yvNPMyF85RM8t\nOjM0Ki4qLyg9NSwmO1NfLTnN3TxB09P3TUxIW0Y4MkJANjU/59lryrLvvq2rb0+9zC84X29j\n17OvrKysrKysrKysrK23tbiyxGfCw9dDT0o1NDcuLio+KicvNzMtNFc3Ql9LPTxP4zk2UedH\nTVNdP0hnWTxB69dNTdPIw8XEub++w2NPV8fO68q0sravra2tra2tra2tra+vtb7Ly9VfPz81\nMjA1Ni4sLi8yMDQ4Nj5DO0JKV2dKTllNWV1OSUdOUVNbb+tnXVFPT0dMTkxZXV3/38jBwry5\nsrW1s7G0sbGyt7m5vMK/x8jJ09HT3dXV1ePd09Xj3+P/W1lRT0dFPzs2NzUyMDAzMjA0Nzg4\nOj4+P05VY/fT083Iwb/AwL2+vsHBw8PBwsDCx8PHy9HT0+f319nT08vLy8bCwL6+u7+/v7/I\nzc3T629bV1NKRz9KPkBDPkFHRklVT0xGRT8+PEA9OzhHMj03PTo0RjxGPltbd83nweu+wru8\nura5u8W7tLzFzLvj09PG/13n/+Ndd19jRUpdX1FO69PbycW3vr+4srq5urW/xsjC1W9nW0dD\nPkM5PT07OT09PERGRU1XSExZa01FY01JQkg8Nzk3OTQ8OkM96/d30726vLKtsrWsrrOzsb2+\nwcvbW/dDTUdJPU5BPj5VRU3/5+/ZxrvNvcW8x8rBx9nV3/dPTl9RSl1jb2P3b2dRTkg+Pzs3\nNDI0Mjw6Qj9bU3fj2cnIu8DFvbq6yL++xcXIx9fd2edv53fK11/v481n1cPO1dvTzvf351lX\nTWNVU1lbX1dX//9bb2POV2tv70lGR1E/UVNMQE9XZ1VfX2dj1+vT2c/PydO/77/Cv9l3X99f\n90pITkE6TVU9Rv/rUW+/uL65scS2trrBzsW4d/9vTmdIS0YvLy83LS8vNTtMTkNCyL3Hyb21\nsryztbSwtrXB08G6xb531edjb0w7RkJJOT9JSFtf50TNd07PUWc67706NddPTzxrTj8vb+dL\nKziw5zA70cHbxbG+w62070jdwDgsQf9DRO++ycC0yf/d/0UxNUs8OFPjwL6zrVWts2M6189E\nLt/ITreusa6trcbGutE9U0hIRUNdb8rjZ1fZZ0k5TVM4P904NcnfMD3FW0xOSE08QzI9UzYt\nW0gvOUbOPz/Kz0jrxc5OyLa857u1wdPAt8e8s7S2sK+5vrm3yuPM0U/Xs87Rua/A39XXPjg6\nMTM4NS87QjYvODYuKyoqKy4qKDhIOztvv93Au7eyvrnC18K6w7vItK23ta2trrvFrK5X77a4\nxWvBsb/Cys3C0UE+Nzk3Ki05Oz85StXfWU1ISzouKy0vLCoxPD9FXV3Prb43yrVPRWvfxufJ\nus6svbyssd+z0dtfPUM9St1bTbPEz6+7ubXKuszDz9nGz9XOyMXGb9fZ/9s7R2M/MDU1MD0z\nNUM+TElFY1NHRkZJRkdX/9fM68bGv8XLv8vIx8nHxMzOwcHJxsHGz8vO99/M33fT/2/fZ1Nb\nVVFKR0tDPUU4ODs4MzU7OTlCRUddXWvV2dHKx8K/wry8x768ysfCz9HV2+/v929VU1tIS1dN\nSFfvZ3fr/+/d71Vn/29VW93j3c7MysfJyM3O0Wt3b1lOTE5VU11Z/+f/d9nX593b19HTyc7J\nvcHKv8bO29V3VV1MUVtXV3dd79fvz87O0cbGy8PHzMrH39H3b2NHSEpAPDs8PDk5OTg4OTU3\nOjg7PD4+QUNGS0pVW2//49vNz9XO3f/V4//R3dXJxs2/wMjHs+PftrzHxMrFur3Rxr+9xMG8\ny8O5wcXGxcXGxcfdwLpT57lLLbRPLDxdNS42PTAtMjY5LjE7OTQ6SEFASN/3Z9PJzcnIxsbI\nxb/Hysi9w8y/v762tbm4ur7Bu8rKyNHbb+/dT09rP0VFOT9MMzpCPj5GQkZNY0BHZ0RHXURA\nWUtIT01BU1U9SGNFWU53V07b1ePGvr26ub+3u7y1vbi4vbvBwb/EwL/O68rTz8/jzdHMzt/r\n1f/n509ITk89OTo5OTg9Ozw/QkNHQU5VRj5MRkdXa1/nzdnPvtFj28jI7//FzP/Tu85MzLvE\nX8LDXcq+x1vBvM9DQEdL39HX08rA011DLy8wLCgqLTVVy7u6sa2xtcs+NDUvLTE3RuO0try2\ns7W1vcfMyclv58nJxLi4sMK+r7vbyt1n1+Nfd0dbTDlVSU1jZ8vN1cb/TONdPzg6VUXfzz0x\nSUpPXVtTR1dbOy4uKi42OURTxK6tr7G8x8zvTklPa8zAxc3vwbe8vcDIwr7A3V1PY93vS0/H\nv723ubnTX81HKSs0Ly9XRUHdt89LRFVOVU9RR1NNRExLU+fHwl2+v1X/zk5KTm9r2b61vLy5\n1WtbX+v3v73Dv87ZyL3Dxec4LC0817yvsMPRPzIxNDxBW/9ry7S0srfHY1NKOjpEPVnvY19I\nPzpERUtANjzZSlFvPDZjR0fL37/HX8HjXbG9vLPVssHTuMjfucnEtruvusjZPiwuLDhJY9HP\nU01XvLu7wFEpJCw0za+4vsLDuLXPNCMlMMSsq6u7d0E8QEpd99XJys9dUUk/TlVOU1s4PUpF\nR0xVUUxXd8Kzy81Xz05nrK+6u0tLsbu2rMBPPTIuPWdX2Vk5RV1vQTcyLS1N60RLPjA6P0rn\nyetZy7q4ra20w626xLm/vrmura2trb1fRT9N2c/P1f9XSUE5MzU4PlVvT1E/Ni8vNjtGRj80\nM0FGSltrQUtLTFdI5+fLwV/v28C1trCzwb6ztb28ur3BubW4srW9z2dfd9Pj28LBv7rH2WNH\n1cbbvcNMLCYpKDK4s7vCNiQiIis4Z9FrXUg1OTs4Pz9RUT1JOzxASGdv72NEQ9s8Wb68/7ay\n4721vMStrbG3rbi8r7W9sK+yu8DjWcC/xb6/72/Nw9Hv199OSj0/PUJOVf9nM0z/Q0/VTDs4\nQDYsL0lNY9X3Vzs8SDY1OT1Pb+9JNkhjb9drQzc5Sv/369X/X+PDvte+ts7Ps7rEvdXXta+t\ns7/I38m0t+NvT0/ny8bO38jLwbrL1+NNV29jV1tFPVH3Tj83Ly44RE7Xt7rTWzYvN1XCvbm0\nxcvXW05GQFFPSl1ZST86PD9LVUlBQVXj2+NnQUBO68DZY11f18rN4+fn3+fF02/Gvr7R/8zP\nw7y80cXCyb/HwcPAvc1n/3fnx9XT09fBa0ZBQv++uNFJW8hjPz02Lj1RWz8/a8VfOj0yKC4+\nMyY2yNNCR2/jY2/ra2/Nwr/f28O2tMTHvrCxrrfPtbW+u7O4yMy8vtnEvMTIxMdvR05VRklN\nSjo6PkEzMTs+Ny8vOzYrKiwuLTM2Ny86Sk89PUvRye//ysW/ubq+u7Ovr66xta6tra6wr62v\ntby9uLO3vb3By9Pb605fb2ddY1lKS1lfSUdKRU1IST1AOz4/OjYyNDo4Ojk7QEU6QEQ/S0g+\nQ0RJSkxVV09O511NW1dbb1vO2c3Ky7/Dwbq/wcDKwr2/vb62vcC2v7vFwry/vb3Rv8Xnv933\n2f/va/9vT2dZSltITl1CXT9ETD1DQD5OPUJNPkJBNk84QE09QVlLR3dIXXdny2v/y9VvxdXn\nwcrHxcbMvsbIt8nDu8XHw8zryt3d79/ZV8tbWWNTU29NX1dOb1v3Z13bX+Pn3e/O18fL2cXj\nb8jM/9PPXczVWd/vV2vnUVFXT0FTVUBPWUdNSEVCRD08PDk+PTo9Pzg6Pjs6Pz5ATk5ATFFN\nUWdba9vb3dHJx8K/vru3ubWzsbGurq2tra2vr66vr7Cvs7e4u72+w8jM1d3jd1tPS0ZBQT8/\nPj46NzU0NDIwMDAvLzEuLzEyNTQ4OTk7Pj1AP01TV2Nn99/f19HOy8TFxMfFxsDAwcC9v76+\nv7+/xMC7vLy+vr3DvsbFx8/TzdPd3dn3b2NvXWNTTlFIR0REQ0Q/QUNJS0pdWVtnb+/n///f\nd+/r39nn2+vv92dnXVFXWU9XV29dW2dnb+dr99nV29fZ2ePv/29vY//vb//Z793b0dHP1c/T\nzdPZ21Xd1SqtrDwjrqwvLa2sNDK4uEkx77rRMWe8VzDTuj4xybtGPN3PY0vn0d93z8jV583H\n62fV3VFMS8NdPMjdRtFNz+vrSdm060qxzWutUVWtwziurS6+rHdHsVM/tl9Eb7o+vLsxvb5I\nML3rQD9v7z5H0T8uP7czNEXXPjw5XVEtR10tR+9VPTXv9znZdzeuWzbOu293xe/ZvMHPvky/\nrbxF562t6zStr0i+rsbOta3vzbews+tJurTJyELOtF0409dE71tALU68NShCuzUqMuM9Lz0+\nLTZdQyksRWcyKS/X5ysv004ySt06Q8q2Vz7DrsFD3bmv3cy3t823ssNfwK22Z8W0r9v3vLdr\n0bvFW8i8vFd3urnZUb2832PN2Vdbzuc8Qs3jPDVG31kuQu9HOktXNTx3WT49T9NZNFVvTmdv\nVffO0+9vzsTL3dHCx8nNwL3GxbrFzr6/083HwMpva8lvV2NNTGNXPj5LV05CTmfvSz5Db0s4\nOktCOjg8Ozg+STc8X99ZR1fCx0nPssvZvLvA472vv/+/ucbrb9nDV+vFzcm8u7i6trK4yMHB\nz0s/Tk43O0I3RXdvW2/Kw8jd28/ja1s9OD09PTUuQD80OV9LTkv3yf9nytffy8bGxsu/vs7N\nwr/Dxu/f0dlrWdfJ71Nj9/9MR1VFNzxLRTE4TVc8P2/PUWPI0WPvxsf3Y7i51/e/usTVxL/H\nxbm7v7+/vMnOwcXj1d3r70xVZ01XUU1ZU0FPSzo8T0k2NUtvQzRATEk+TW9MRVtdTElPV9vP\n62v3u77ZybzFzsPDvri5t7S+xbi568e93UVPvtk6SsDrT0TMu01CyE4vNk8/MThjVTo9X9tA\nPURPNzRESTo/WWdHP0rXTkFFystMa8fXT83H11/Zsr7XurG5xLe1vt+8tr/BtLrVwbeyv9u6\ntttZxtlTQd13OD1jTTE3SkgtL0k4MThHPj0/21VI3brX/8fAxN3Xw0k4Tu9KSv+4u99OU2NK\nMy9LTUVd/1n/287d3b28zc7j/9tVP+fFw2fNu79vx7rAwsvFxMzjwc3vyL/C09vNzNPbXWfv\nQ0dCPD8/Q0ZRU+9VRGvv51VV9+9FS1dHSVX302NX9z01PEU8PkJZ51lDY1tKTd/b487d6+/N\nx77HvLi5vr++v7y9z8nEvMfByb7FzczL111KU2NDV9lKTOfvSE9NTv/nY01Z23dV3+fvxMhn\nZ0RG3WNHX1fja0RGV0k6S09XQz7JWz5T/0VJRj9ZSV3RX0pbb3dTSs9348HOY8O/vMVTy7bT\nv8PXvrvJ6/fZv8zn09W0tsbNus/GxmdVY+vvQkdvdzs2OTw3Nzs8Nz4/NjZTP0FnSmvnV9Pb\n0+tn28ZKW8fna+fPzk//wNfj/9m9vsrKub/Gu7q8vL23uOPIvsfj48bBzN/L1efMTErI1UhT\n710/PU1OQVlrTzs4PkQvPFFAPUJBQ0A0QFdB//9rRllv1VFNX9XM1c3Nwc7GxtXZysnv67y5\nyFfO393O009vy/9v5+vn3dNNSdPHTU/300o+Y29NZ8znVc7L61PR22fd49vJt8zj78G9yc25\nvdHIvs1rY89v486/10rn60xJ3e9JTk1MOzlAOjw2PFFbOD1AQk02Nj5CVWddV1lbZ2NP92/G\nzePGvbzK1cvK2efHyMXLw8rbyr/Nd+/nyHd323fT2993/3fb1UxZb9tPT1vT3Vdrb1dT9+dr\nX2vTTVPT90ZJR0VTR1NMX9fvV1VZSUpvd1//z8PXTOvN79vN0cLA6+//Y29na2vLxMfV09v/\nd/fPzMnV0ePr319KV93P91vb7/dnTGNjd+/f58rG119T705dV0lN30o9SllMRk5ORT1n60Vd\n9106S19bSVvV09PT23fPx8rC3c3Ly9fJb+u/29vHxs7My/9Nb9dfa2fd18rZ/2tv3XfXX2/Z\nTmfnV1ffV/dvS1lVT05ARW9NZ29NzNlOSlFd301HW1lb/8//WdnVa1tr92d3/99j/8jfb99d\n/83P38/Z093/0ef319Pfy8Z368/nWUdNd2f/6+dda/f/909Pd9/ja+Pn19POb+ffa+tXX3ff\na//X61Fjd2tXSktbWU53d1VZ987b49X3/83Za3fVwb7vZ+fd591ja+Pn629dP11dT0n3d0pO\nZ2tKb813W+trb9Pf/+Pd12/j31frzNX/z9HbY13r4/dTWfdvTm9ZSFld2/dbXXdbUWdd/1XL\nxltX1+9v79fH0d/O/9ffb9X/SnfdXev/28//6+fn2+/rz29f1c13/+9r39Hv2eP/42fnWVNZ\nY2NZW1vr1d3/b99nWf9d99HLysXK1efV31Xj12tX2d3/Z2dXSE5ZTE1FR1FXTU9HTElTY0hG\nUe9bWU5dd193/9nf19Hnb/fv99HZ79PV2dXXb+/j58nL08rV18PH08rG173JzsnO28vCxcvZ\nztfvT2df7+tMSEJHW1NLSUxZVU9JRUtVTU5RX2P/VUdf31tf71tbb29VWVFMd1FKS11bSEtZ\nX1djU1Pn/1tr52f309n30e/v0dfryc/VzsnH093P2dnMy87OysHHwb7Cvb6/ysTGzMvd59/d\n3dn/X91fa1tVU1dvZ3ddT1dRT0JAP0tPRj9ETVdOTUpISltTSEVET1dbU19XSl9ZSkhFTUlb\nWVn36+fTze/XxM7b18rIwr/GwcK/vrvEz8nNy2//W1VjV19ja1tTW1Nfa+//b/f3//9vb19V\nY9vf3//v59nj49Xf28/P4+vX3d/fa/f359nj/1tjX1tbUVf349nr19fV19X///9db2tXVU9H\nP0E+RUVKS0lMUU5dTEj3d3fr3etrW2/nXVdd29nja+/n5+vn38932dPXzs7N287f1dvPyNHM\n09Xr92dj4+fv4/d39193XVtdX2/f/19v5+drZ/9v599j9+f/z8zOx8rDycvOx8nLyMnHytPr\n5+tnVV9jWVNZW09KQT9FRzw+Pj5ERUpOTVlLUV9JQ0pNSUlLTVVbTlln//93Y19ZY+ddZ+/b\ny9XV08rH19/b59XKyMLEzsXKy8jNzNfn193R5+vRy8fEw8TDwcbDxNHj393Vzszb/29ZV2Nd\nUVlNVU9TVU1NSUtKSkVIRkRHR1dbXVVOR0tfSUhNPkJRU01NU19rd/fv/1dv3dfOyMjLy8vf\n293j59XR09vf2d3Z083OyM3PxM3My87Jzs7Nz9nf9+/j0etja2NjZ11ZUVdJT0pVU0pOSERD\nP0NHSUZCSUpNSUZLS1drZ+vn783MzdPPzszN0dPJ0+fO3W/r09fV3+fPyM7b2/fV1dVv19PP\nzutZV2d3Z2tra2drV1tfW1lTUWNv39ndTln3W1lXSVFjY93Z7//FyM7n9+/V52N3a+vRzMvf\n29XV1eN32dXP2dP349/j43dTXV9bQ05GQ0tMV09RT11bR0JMTkxbT05MW/fb2/dv5+fO29/d\nzM3PzM/R1+dj39Hj1+dbV3dfWVVn69/r52ddT13X0+Nn59vZztXrX9vR291v3+9v09Hfa1/v\n42dV2ePfY/9ZW+PR0+tb3dfn499jV+vvb3dnd+N3b9fZ71VET09da1lOUUtXT0xNSFtbX1lb\nY2f/X//NwcjMz2/fybzI0dXPz8rjVV1r485PR0tVXVtJRU9jZ+t3W+/n411jb+vZ1+NrZ9vO\n011MTmfr2c/Tzcvb32/j3+fV0cnFzdlv41dX91tKWWv/409JU1t33+tNT0RGUVtX/+tKSERH\nSVtRWV9La89fU8/H1dvX39/rxLm958C6v7W90f/RwsLfW9nNydH352/DzF1nSlXTa0JNSERH\nPjw2O/9XSDtO29NTPEFHV93/V0Nb91NbS0JRXcfCy8Xn38rv577N09fPzc7LZ93Rx8HKvb7L\n39nn18bK/+dvd9/N3VdRWUhDUTs4d0xNu1syMjBVzlVJWd/GwNk/MjxOwbxMS0/T07rHb7C/\n69lVPtGuvciwwk6+9z5ESOPIXzRRvv9vSzw+47+/zltFx81bw9lJT79RMT9fRmtTU9VZMdfb\nPES5az/F51m7vM7byOvGvVXjv2fXzTj32UfdTUU/Rt9DOV09Y+NMvj882///Oj3HVdfZS01b\nwbnjd8RbvbzB00mssuuvT0+us7/bQsy7vF3bz0xNtmMxyL430esy68frWWc9PlVTMVfKK10/\nMEhrNjLvNTjLSzV3wDdXzWdjwlvGMa1bvuM/vt/IzetXvs3HwkC32V3V1z9X177LyddMd99j\nylNrPMnd7/9rZ1XIxUlrY7tbv+c8tcvPY9nJT8a8PUi5U8q9XW//zuPHPkxTvEo4uTk40U9N\nP0Q7W7cyM2ddSf9vMzm6z0tOQC21sDxjyUjHusw8Ubi3ur03Nq3DUUhO3bC6ySVA9+vF5z7J\nvkz/zT5fW7xVRMNIPcxrOsDE3UxZRk9VV0pb10hKZ2vXQ1PIyLi8PFu3x3exzFe7xL7GycFT\ny7Tdzbo3QKzNML3MMj9KZ76vvzNn5yMnQC48trzfvr5NTOf/yr5EO85fz77BXVu0zVFLJz6v\n3y7T22vKti8luq1ET7Ur1a33Kz63rTw+RStLvNs3R99fd71FObGuW7/rMretvD08vbdd6+/P\nr8ROYzpOYz5RvrisrLO5999fNEzvRMEyR7g7X73bLy1A2yN3rc05P7W2NyoyNrOuv8vZtbLN\nOzg+b9dvPjr/tb/rZ8XKyb7GRU7Nxzorx8ZRQVlCOkjJ4ztX389rSC5RtLfDvb69xOfOx8zF\nLjzDubtjTz4qLT9VPV2urbmvu1Pjz++8dz7f0b671W/Mw7rZNzc0NDs3Ki1HZ99jPEVdTEdd\nRl29s73PTV24trrHx7y0sdfVV1PL2UosOuPJzkQrO7RXOTZLuqyuua+4tbfDyLzZ98XNyMvI\n41tBOjkzNC4zMCstMjg3OT5DSkI6ODhHwL7C51drzdPIvsW0wri7wLq8zv9fSbq/07ndUXdj\nWbO3y7W6ta+str7BXdfXX+fd2//VO09fSVc9LS82Li0uKzA2LiosLzc+S1XrzevAy8e7ybe3\nu766trOxw8PN49nVWV9rUe9ORknf3VfPV0/Pyc+2ub6zwbm/v8e7vtfZUVNHTU8zRTo1Pj47\nN0A1MSswOjQxLjE4QVVn3by2rqysrKysrKysrKyur6++xc/jTF08MTEpKiktLygsMi89P1c/\n19HIvbyxs7mvvb/Husu/zedfUV9ITUVOQkk+Qz85Pj41RUVGREM/TWPdwb+2rq6tra2tra2t\nrbKyu73DyF9PQTg5LCwrLCwtKiowLTQ7PkZbW9nFu7itra2trbK0sbjBzP9JPT43Oj0/PDY+\nOUBDRUA6PTQ5NTE+PDw+QUlvwrmtq6ysraysrKysrKyytriysrS/70w/ODYuLSwnJCQmLDE2\nQEDdXfe/uq+trrevsLOvuLC7w8/dTz5CNTIuKiYnKCkrKiovMTM9U2PLxcG6uK6tra2tubm0\nuLOwtLa4vbq3uLW2ur7Fvbe5wru+w8xbY1P3V000MCwrKikoIyMjIyQrMD1NTmfZxLWurK2s\nubm5uLOzv8PO1ePN29PvVzkxLi8xMjIuMjU9Rv/bxry2raysrK2tra2trrG2ur7R51tFPjkv\nKCkpKCYnKycqLTY+TN3r07uvuLKtrq2tsLCurbG0ucHDd01KQDYyLiwzLi81NzU6P0JPU0pR\nV11d493PxsfGybyxtrq/w8PHzMzO39fEa7+0v1nn1cnNwL3AxcO9td9vd9fPXU9C3W9DNDA0\nKyMjKDI3OFHFwrm7sa++y8a/tr7CvLKusK+ytsfbTDstIyIiIiIiIycvOm/Py9vDtq2trq+t\nra+xubu/tri5zOvN50Y7KigvLCwxODpE58Wxuresq7K8u864xN22s7y3vc+1vPdJPC8sKCQu\nPjA6TkVCQ0rrTTMvLjsvOUtnzri1sbbAvLHC513fwN3/ydfBvrq3xru2v7u6tcHfX1dVWUJL\nRTZAY/80MkdINS4jKCowLCpCZ7vBrbaurbS3t77rw8O7vrmzra+ttb66ylc9LiojKSclKy0q\nNkb/vK+sq6usrK6wwN/J70VRQe/r/1NrTGc3OSszNikkJC42PTlRwK6svq+svqyuvsy/u7TI\n0bTfu8JJTFFLYzguOCwzOCg6SDJAP0bb693FyK24u768s7PE0d3Xz/fFuLjVtLnHrbi/urS6\n28/Ryf/rTEvCzDk3LzM7KSMvYyszSSw/40Qv98pbUTf3WdPKTcKzu7OyvbW9x7/nzUdKPuc4\nMWPrX1m9ucF3wj9M3SlBOydFxVPjZ7z/xq3VvaznS61DzUGxRi6tuzS5X8RZ374o3UEryy8z\nxlPARdnFStG0M7XLO8JfQLjvX7o/z7stu0g1vzs33zRBWyu9NbhHT641rkwvrkd3tC6xwePf\nsz9vrCesKzmsM7yxNqw2Ub++PMvKNawurj/FSLY0tOc51U02v0I81TXJQ+suvi7B0zPbYy++\nTz+tONW9QNe6Mm+xL61nN60sb602tK4+tWdBrS+/xi3MySyuNmc/QD3jN7Uqryxf4zW9TTuv\nLcrBP607xa4yrev/rz66zkfj2z/EyU3Ru8rT68zKRMPOSc///z/rW0xKOcs6W+s7V9NOZ8Y2\na9E9b0VPV13JyUy/U/fTxsi5PK09u8PJua1dsNXKvOfCPve/Mbc7/1n3Sdk21180xTczvyxn\n1yq/My/ZMdVKM8MyN78tV1szxDJbuS2/VT3dw8ay77TLxa7Hxq13rcC9sLdbrT+t2V2yY7yy\n/7xfw9vjPMRZRVHF00PEd1HNS85bTevMOLg4Sc8w9zA6UzlENk88QEkzUz9nNMlH389K20bH\nd120R8K7NbfTP67nVbQvTrQvsUDXV7FAtV/PvNVHsDbLy0nFPMRVY9tHxTg/vy3KPD/rxDa2\nMN9ZZ0S4QblGu9fKXVvTSdvj1T65RuPGb0u6OrxPd3fnX/dV5022W9W9QbRPxWOvQLrAwL7O\ny8i8PL1LtEPXV7k7xDjCO3fO4zq+PlnRREPXO88vQ0jrNmc9Y009RUkvuTRHdzpLPMY5TVnN\nVT21U9XXyGu34768xneyXcLIv0a6P7nV18JXukTvtj/MS89BuFtLv1PZW9tR091CyldDvj3B\nO9XPS9vKOsc7xz1jzTjTUePdVc8/skG7Mt3vb9k/uzq0U9/FQ9tB2c80uzu3OrtLzO/XVdlL\nPMVE107HSl9r3WM9W2dJyzGwLr7ZRtF360++SuPf40PjX0rD3z26QcNIvz+9Qe+7O8LvVbk0\ntfddyNndb0C9VbtVxW/TX09TVUhJ70VXY009a1lH/0rTTfe/yPfD47tnxb+/z7fA2bLTXbVX\nu0m/ScDOY9XOV1fNPms+azTPPTpfOT9FMFs9zzdJQu8+90VfWfc32TjRWW9vV9dv/2u/TblN\nyEK+90K6PLhNxM5DuetVvefbTLjvw+O7zve6v0fDVchOtD+/013CM68wska9T8+/QM5HSc1R\n711GzULKNboqzjvjTi+5Mt1vX0FK40ZX68pfXbtE28fKTsfdZ1XLVePN0zvX91M6wkxOPbg5\nRMI/zWO9SrnDxNXvvlG02f+tWbhPvd/fs0i80bpGw79Iv0vXQE9nMMs8QDZbPUlGMV9ESjnr\nTUVKWzz/70dv28NMzNtFvl/Z49fFXchvWefRa1XFVdlXulXTvc/Rzs3jwc7RyMzIwcTNv8jd\nyMm/19Pf6+dnS2/nTGtPQFlFRz9DPjg6PjxCQEJJSmNM30Z3a2dM7+ffR9/X21m81dPLz83I\nvVnTxM9O3cpTxV9nUbxvU9PvSXdVX0bfR+vZZ8M/vVPNTb8+698+/1e/POvJ28PEuc23612+\nSGM2TD1L9zPFycK/w6zjrLGu17RBz0dVIy0vLykzMDk/Sjc9Zz48Ok1OZ87NraysrKysrK2t\nusNROSYnIiIiIiMpLjVGu6+srK2tra2tr8PXXz0xMS8/SUbfv763vK/Gv8ZGL1NELytBOE9V\n38mxr7q6rb3Bzrj/t8bHtbOzu7CzvMDXT0Y0JiIkIyMjIyMjJis5WcK9rKusrKyssrK0wsnn\n38bbwevEuN9nusrXwkdTzM45Pci+Qbq7tbi1zsW541lO10ZL5+vDvLq9t7W+y9tRNCwnIyIi\nIiIiIiMkKzRLa7Szra2tra2tra+zvv9n31tRTVv/d//n12PXxc/Da8zLv9X31b/G18zByb7K\nxMK/w7/Gv8TGzt/O0Wd33VVrSk0/PTsxLSwqKCkpLCosLzEyPVXXyLazr6ysrayusrjBz85T\nQz44OTc2NzdHRFNd3f/PvcTn08C9vcG0r7Cysbi0ubnI519ZOjo1OzxHTVn/b13vRU9FPS8u\nLy4rMDA5QFdb/768tbezrbKvs7Kzt7m8v83Pzd3//1lIR0M/NDIyNCwvMTYzNz1GWU9j1b66\nvbGzrrK1tbq9vdfnY2tOSUlBRklBREFOPEg/TEJMTEljd9XPvbm3t6+1trW5u7zBxsLD1b/J\nvsvH5/fnT0lJOjcvKykoJyUnKCsrLzc7OUz3/09v0cnPu7q2trW2tLy1ub3Cw87N/+tv6+vd\n59HjysLOyb61ysvAv+/3zMzZx8nHwcnFys7Bwcy9x7/J09Nra04+Pzo1NC8uLSkoKSYjJywp\nKTA6OjZT2dV3u7extqysrK6tsbnFvshvZ+/rX+vIzMzEwcTOwc3IzHfdvtXv1c/KZ9e/07+5\nu8DEzNNXV11fS1dn51lTXV88PjwwLSwuKSgpKyskLio0NUZV983Nx825tba8sqystK2vrLO4\nxcPO90xIUUJFV0hn39HTzsXCzdnEU9W/3+drzOtP08DAt7Kys7y9u9l36+vfT2fC0V9r3Ugz\nOTwuKjAsJigtKiMsNjA9StPvW8+7xc3Auq+/r66vsrnAxW9RQzo2OTg9PUNZ5+fKyMHF09vj\nTT7V31E+U+tPZ8m7t66sraysrLm3r661sK2tsK6vvc3TVzcvNSwlIickIyMqKC47REJLY8xT\n0e/AxcPBtbi1wr/dXz88NDQuNDA2OEZVU9HNxtXRzv9R281JQf/XXee3uryysbm6sba2sq2u\nrq2tra2vsLzLZ04/NDEvKSYmKCIrLjgqPEFLPVnO3dO/urO9s7u9ys1jRj0/PDg9P0FDTExj\nTvdTTU1DRztPPktMUd3jy8W6s720uru4urK0rrGtra2tra2vtL3L3Vs+OzsvLyouKjcsPjlE\nPktbRkbv3dvjtLm8ubG7xtv/QDswMi8tLjQ1NkBFTD9LPjw5OzkzO0s/R9fIxL+usrGurbKx\nsK+xrK2srKysrKyzt7jMSm9INi80KyosLywwP0M+S9dVR2/v/9fGvLq0tLW7vtPbTUU7PDM1\nNDU0PTpGPkxISz0+PT41QUdFRc3XyL2vt7Wvr7aysra4sLWztK61r7m3zM9OSDUwLiwrKist\nLjA3QUBXTtXI0d/Fv8m/t6+zrayttLa82U9JPjMxNTQ3NUU/TUxXR05EPTs7MzpERUlf08zN\nubnAvLS5xrO3u7qvr7GzsbG4wr7NWzU1NTUmJzA1KzI7Ty493/9BRr3rd8qusruura28uLTM\nT013RDNEU0g/V91TR0dXOTI5MzAyPjZB3eNNb7rZzbq3vMO2vMW8uLq2rbK1ubG6x9FZSjIz\nLDE0LDQ5PDJNRVNOwsDvu7u4xrKsxrfIrMPGtrvDyV9bMzQtMCktLTgwOU/nX8zrzkxXQ0M/\nPTpJREjKtnf3v7nv17Szvr21usK7uMC1rbTIuL7Rd01JMi4tKjEqKj0yOT0u32NB48S+wL+t\nu8awr7fKvLPHY73B3V9r7zw2QDgzMTc/PEDr38/DwdVj3e88QUlAPDw0VbxrW86vvdG/rF+u\nvbivwa25ra25vMDrxkItyy8pVzw0KS9HNyZEPC8yukPGz7evSrmw289Zvchb27lnudPrdzVJ\nNSs0NzJBT/fP57i93dtXRzg3OTw1S19T666sw7Wsrry4tb63srG1rKyysLG2y1dPSDsuLC4w\nKy8+LSg2NzUuOltBRsHT67muu8HBs8LOws7Nyr6+yL6+y29VSjs8PDk8REZn3dvX4+drUUU+\nOTo6Oz1BQUlj19PbwcS/tra4tK+ur7Czub6/yf9nW0A+PjgwMS8uKy8rLTE2Nj5DT+PT08e9\nvb6/vL68tbW0r6+wr661ubi8ydHP3+/bb1tbWU9KTUxDRkhKSEpNS0pNRkFMSkVJTkpJW2/3\n48rHxMDGycbIztfXd1tXSz06OjIuLy8sLi4vLzY7P07v18S7srGwra2tra2tra6ur7O4ur/L\n1e9LQkE7NDI0NTQ4OjtBTFdXX/9fX19KVVFCQ0lGRGPd2cm8uLu1sri4tbm+v73Izc7VW1VR\nPTo8OzM1MzIuMTU0QUh30cS7s7Cvrq2vsK6vtrW1vsfGz+dnX0w/OjYtKyooKSkpLC41O0BT\nZ9fOy77Fvbm9x8fK39fRz9PGv8XFwcvKxcPTycjJzsvK693bZ01ZV0VAQjsvNDMuMT47SVnv\n1cy8urWzsa6ura2vtbW3u73Cw9vvXUM5NC8uLC8tLjQ8PUJVY93PzcjRvsLR0+9jTF9bTevR\ny9HJy9nLzcvZzcrTycvR5+NvT0pIPz86NjAvLi0sLS41PUhP78e8uLSvr62tra2tra2tr7O3\nvsHLY089NjMsLCwsLS4zOD1ESuv/09PFytPN79lH72/32dXFu7+8vrvCv8a8wMHCvcvV09tP\nU3c/PEA6MisuKyorLTE4UVXvzbi8tq+trKysrKysrq+0t7zI4/dbPjUzLysuLi0tODc6Ql1X\nWePJz9vT71lrb0gwxb1B2f//tcHbu8+6tcGxvLmvvcnTz8vZZ1E3Pz0uJyQkJi8xKzJHY2/B\nzbWtrKysrKurq6ysurO6xGdTPTg9NzEwNTU4Oz00N0BAN2dZRT1KTVPvxtHKtrb/99Vn9+/3\n27Gur62urLC4v9VHyT8vPDxILygpJC9CRiw0U0H/TDhfra2urbmtra2tt7TBx8VnNTpLX1tV\nPUJrz0hCPjdDQDzn/0dLY2fd583BvrrfPT1BY+/398ivsK+1trm8tu/v3/dbPkFGPCsvKzXV\nPztVN0BOMUqytcG0t7y1r6y8y7z/b2tdQkdf109FY0pnTzM4Nzg6TlVdQ0FE/7/Bxbm6zutv\nb+fXtrjIuK+tsrq9vt9fZ0pJW0Y5Ni87My9nOiw9Y1M7PsO7wsm9v761rq26ur9rP0pZT1VV\n42/bzspdS0E1ODg6OkZRTEpMZ2fPvrvAy2tb68nDu7Ozs7Ctra6yurzKXV1bVUAxLiooLi8t\nMS8wMjM7R0tv0cvCvLi0uLe4wsXI0efTd11NSUdDRUFDU1/3TmPr3ePX029vWd/f0dPT92Nr\nXdnPzs7L1dPGwbq4tLW1t7a3ubrB1WNKPUJANzUrLSwrKisyNzs3O03/zMC1s7a3tLS0tbq8\nxtNjV1NOSEY8Ojo6RE1PUVlnWUhGTVtjX1dOV1Pfzce/vbu3t7azr62ws7i7vb7IzutfQDky\nLS4uKS4tKTAwNEhFY9nGvLyzra2tra2ur7G5usrbV0U8NC8vLi8tLS8vMzg6R0tT/2dv2+PV\nysfOxcfNwr++urq5t7a1sK+urrC0try9v9XZX0Y9ODAtLCoqKissMDI5Rknr1cC7tLK0r6+x\nsbK8vsLZY19HOzoyLy4tLi4xMTc5P0pba9fIw8PHys3Nys7JyNnTysvNv8PBuru6t7a1srS2\nub2/xMnVa2NLPTg0MTAtLi0uLzI3PUROW9nKvrm1sbK1srS4urrI28NIQD4+NTczMTEwMjM7\nPkVPXe/ZzMS/ur3CvcHMx8bXzcnT1dPV29PGxcXFx8PEv8TBwMPHzdfrX01JPjg3MTAuLi0u\nLi8vMzk9Q0xd287Evbm7ubi6urq6vb7D1ed3V0hKR0dJR0ZMV13n1czCv7u5t7e5u7y9w8fX\n2/djSktJSz/3JNW4TEkqTLO8/+fPysnRzN/f61lLPD5NPDw/PDs1Ozo4Mjk+RUhd3c/Hv7y4\ntLCsrLG+yce7u7nD11NJQD9IRUE/PTY3SVnZ3dnbycm/wsPPW1dXUUxBOz1AR2fHv7/Bwb++\nvr7GyWtn52ddT0VDSllbR0Q8Oz5AP0JFVWtNW+vEvby7urq4usPJyMrVSz06Sd3Kz+d3a/9j\nW1VJQDs8RlN35+//08vAv8jTXUs9S1tPPjk5R9W7s7G0uLe4ur7OX1lOVV9bU1djZ1lbWU9H\nRD4+PT1BPT1IW1lVXdPHuri1usn/18jH1Ug8Ru/Dwszr/9/n52dORTo0Nz9TX2Nba82+vL/O\n519FQFNnSzsvTN+6s66vrq2srrjCzdv/VUxPRkVZX0w/QkpTTUk9NThATUs6PVN3y9fTxrq3\nub3Fz9/r0eNLPUld99nIy9vf2e9ZR0Q+ODQ1OkRRX2/Rx8HDxdHfYz9HX1s9OD13wrm0srCt\nra28yMrM3VVHQ0ZKT05APD1LS09IPDdMWUE2O03RzGNZY8+1srrLyMDD5/fJx+9V793NycfH\n09vb31lERj88Oj9DSk1b59fn2dlr/1tITW9HP0hfz7y2sLC0sq+3vr6/wc/Z419XW11AODg7\nPDw8OjM0PTw3OkRGR09n59HAt7vAwsHAu8XZ2d3VzMfFwMLMzs/nWVdJQT8+PDs9P1FZXWvb\n729nX1lKPUffY0dHXdvOxrq3vbmvr7e4uLzAx8/Z729j71NJSFVMQT1BPTo5PDo8PT9RWVVO\n58/T0czN3fdf0cxfU+Pn4+PT193359/3T09RSz8/REZHVWvr79HJxcjNysbN0cvV08TKzdfL\nx8rIv76+wL++v8LHzdHd2ddvV0lLR0I/NzY0MzQ1NDY6P0VLUVtfd+/d19PTz8rExsXFw8O/\nxMnHy87Tztff619PTEdKTUxKS05VVVVPVVVZU11rX2/33dnP68rRyMnOz9PX083Jz83T19nO\n0dvj929nX2NXUU9LT0xMTUtPUVNPT09NUUlKTUtTT2dd/9nOycvGwb68vL2/wMTByMzR23dn\nTkVJRT8/QEA+PkFAQEdLV2v/1czFxb/Cv7/Ew8PFx8TIztXX19vd9+//7293X11nZ2tnW1VV\nT0hFRUlDPz8/P0E+PkA/P0ZKV2dv4+vR0c7PzcjBwcC+vr29v77AvsbNztvjd11dT09HTEhM\nSEZJTU1LTlFVVWfd19HPzcTCv76+wcTEy8zOzOvf42fjX2NTV1VVT09NTUpMRkxGSE1JT1FV\nUVFPVVdOTkpMTUxLTlFbXW9rd3fn59vT0c/RycXBwcHBv77BxcHBx8jOyNHV29vd/29ZVUpK\nR0VDREhHS05TXW/n09HOysbIxcjJy8/Tz9XT/2f/V2NXTldXS1dPT05NT01IR0dGRkdLQ0ZD\nQ0dJS09bXWN379fPzcbIxcbCv8PCw7+/wcDEwsHIyszP0fdvZ3dfS01KSkVKSERCRkZGSk5T\nTlNNT1ldb/fbzszIzMjIxMjFw8fIy83Z2eNjUU9TTU5MSUpHSElCSkpHV2d3d+/n6+fj5+/j\n/+//d//j39fb0cvNz8rJx8LCxMfGxcnGys/Ozd3f4+NjWV1RR0dGRj9EPjw+Pzw5PDs8P0RG\nTFddU193///n39nRz87OxsfGysfM19nduTQ9rL0lPqw6P63OQcJrRcTnOee6PWe16z+6ukhr\nuchK3cpn99VZV9vZV3fD91nKyu/Iz3fX1Wfn13dv0+dX1cxF38dnQWtVPkZXPj9dRzxFRzxM\nSTk8Q0o9P1tHTs/r78TBwLvCwLi+xsbC32e/yk3CxUe9vUfd1d/b38rTb9m/RVtbxU41Qm9N\nNUs4a2M72URGvtdRyNXPvlvfxNf3zuvLzcvN/87I29lb3evbVUpX701GS0dTU0RAQ05PRUxb\na+/X0dXOxr3X473BTcNO28TvRs7GTsHbyL+7utnCv9nVWWdBP04wNTQ+LTo7PNs230fjW1Xv\nQWdNz01ZzE7E68G+wrzFvb2/zdPA58nJ113n1UVTRjs7Pjo3PDtFSkpX3cO+xLm5uLS5xbq7\n//9Za+PZzNW+sr68tse7w7/Fd29PU0M6QUZVMURNPDE2TjswRDs9QVM+Ud1TXc7Za8HF09vH\nz87O92/j/9NDX09d/0FnPVk/PEY7TjrvXc69z7rByLa51f/PW1/fTU5d67rNRbDFtsC82bjA\nN7gyrkU0rS65vz+8ONFCSzs9XzjbPk7vV9VPz8n/uMvCvcLJ48/Rd9NKb1HbT0r/V3dXS1dL\nWzpFRUhHXz5n929jX8VvZ7hLY///OtNON79Eb75NvTe1rS+sPUu3Sbw7sV1v2edNW8I1Vc07\nY01JUzLMMkfRP+9PyVPIS2/VTcBjSb4971u/5zm2SLs8tTeu2d3F3bjV48V3zcLAyNXJa7RO\nu1O808nPXbZGu0O7QUe4RDW4L8tHZ18yzUk3Y/85ty+5Ns2/NMvPLbY0zzpMTDvbvjfr5zvj\nZ09VWedTTcU8yjWtMrvFP7hLd7/du75dtUTFPNm9S1XDO7itLa0rTbUvrDG7ObzEO79BPLYu\nrjbJazu2PlW7Lq850bsurjS00UC8Tj+5OLZIV8I1w0XnTz3AN8LPMK4vRb5Lu9dRyUPPZ9td\nRfdJzkhJ43c/uji0OFm0LrAvtzS878tdU8RvUbsvrje3vj+0OK5IxcJCskS3/z2yU83B3U/f\nvf9byj23P8rLQspOd0pjP2s5zU5GzT/NP91K30xGzDjr1TTP529G21PnU2NHR+dCvNtHxj6u\nMcFfW8nVzMz3utlT18pXyMpPxT5vwjmxR0+9P+vDS7/XXbtO/7hfz64urDg2rFnjsTuvb0+u\nU3fTRdV3NP9TP7pBVd0860tZ69s4vj0yvi22TU7XTkrLQkK9Ql/EOlu9ObxNR68vXbhM2blI\nulu+1+/Zxv/M2dVZvVPP485dOsF3ObpTV0PPUz7vW0n/Re9Ld+tb/8E/zsJj3993zF9r33dK\n51l3/z3ZyTPd10RvTtFbTt9NV1tf59d3d9nKd9XVy83Zv8vTwMDnwc++w2vEzNPj0+vn72vX\na2/nY+fnT89Ma/db/1Nf/0VfX1dbSN9XT1FjVU1vSmtOX1lrW1tZWU1ZTFtOUVtPSlNPV01b\nVVtXWXdb71Nr6/f373fdY3fR/9HX18fZzNPR1c7b09fjz9fbytPGz83Pzt/L39fZ59X/zt3V\ny9fK08vR08rXz9HV2+Pd6+fva2ddXVtMWUlMSkhJQEtEP0pDSUpFU1VLY0v3Uf9OZ1lRb09b\n/1vr/9fv1+fd3+/d5+vZ79vj29nV29nd7+fd99l35+dv5/fr92v/Y+9f/2tn41vn929r713/\nd293W+93d+v34/fZd9v/69nv59X/0fff3dnj39nr3edr33fj9+dvY2tra2//9+fb5+vf3+Pj\n293b09nd59/jb/9rb2dX91NfV01PSUhPSk5JUUlOUURXRVNRV11VY29rd+/r6+Pv6//392f/\n393Z2dHZzt/N19HX0dfZ2c/b18/Pzs/O19PZ49tr72db51n3W+9jd2dbXVdfVV9Xa1N3WW9v\nd2v/7+tvb/dj62v/b/f/39/d2dHRys/O09PO68/Xa9XM21Fv0dfvZ9/3VVln3VlG511VU01f\nU1FRY1NNUV1vQ0xOTUtR/09ZWV9ra/fv52dv783b9/fb19Xn1dnv0dPNb93Dy2tRzu9n4/9v\nSl3d31nv229ra19bTe9vZ9VTSVnf1WPZ79/fzdnI2cnJzdu4tlNN2b7CWevn31u7ykFJyLd3\nSV9Bvb9IOUZXzdfPQzLNs0JHbztbvko4PU3V7+c4OufBVz5L51t3zDlOZ19PzOc0Y8vO6+tf\nxMfCb87BwL1rx8Ovul/Zv7iwvUpTvsvE01M3PN/Pazs6O0XGVTMuOG9dOC45R01NRTw6WdFd\nWVnr2dHMw9vf38avw//fua2w2Wu7sL13zsnHx79XWdvKz87rd1nZysn/Y+/bz/9ZVUlI79/3\nR0tO59XvU0pXb1NBODtCPzw6PUVOUXdNVWPVW1dMPkVGRjpBQUld11Xfu7y+wte+tLLI69fH\nzGNFQ1nX09v/zsvT09dZ2XdbY0c7TM/n59vTua+z2cO9tq+2vrm0v8bC1/9JRkpZSz5H07/D\n62tXUzkrJCMjIyMkKTM/W8+/vLmsrMw0MUfIzEo097Kutse7tq+z0Wdb62PnUzhIXdfJWU/V\nvbvDTnfVXetbRUn3vrm+xL+/w+9HT+fbY1lLQjo0MTAvKzI3O0v/ybCssba6v81ZOjAyMjI2\nWVtbsKutvLyyrKy+Ttu/vVVfa8u5sLTGxr7CyFUzLzg5MjAwPVNJTj083+9N6zkvQD1KZ05O\nw7u1rLq/sbr3zcdJQUhJd8TIzL3AxNtnRjAwLzg7QvfZvry3tsTG609VOikmKjNLy7Wxr7G5\ny2M8Oj9G2c7JuK+0vr3Zz7XTNjw9Sus8WcFfr706PVPj4/85LCxEura5vMKxr8w6LDEsOjIt\nQe+1rKyvsLW4yz0qKSsuMzY6W7K3rL3Ar8HrSj490brPvbG0vMG60c3G09nO0U1rX1NvSi4v\nvGMzRDY231MyMkRXPjdFPsy9XdlTza25yc0+Y7q6W0pL08vJy9m0trO5Y0xOOzIvMUV3xbiu\ntLezr8FvV0EzOjYtQHdn79VvR/d3PTxNUUVRVS9My1PXzNHI519XTUdLTEhFVTs2TF9Dyb6+\n3a6svK2tvMbEubatrbiurbbBuNEpOU42Qkk3RcbAxcdfR0U+KiIiIiIkKCtE71dXP0xRY1E/\nP2ddu7G0r6ysrKyyt7Kssba1tL/Dwc9vuLGxv2++/8pONElBV8vVK0BNPDQyMiwx7009/zwy\nNy0nLSgoMS43PefTtLy7vs/Oyms+PtW8urSusq2svrq6t62trq2tra2tsrCtvL++v9W972Nb\nOkE4PjY2LC8mKTAqOS1ELjs+MC8uLC00MkhKTF/Nyb3Xysn3V9e+X83nwNu4u1m9zr69vv/R\nur+yt7e9u7rOvtHP979fs8W+xd3IQudPQlXvQEc7OT8v/yrRP78/VetEyEvHXbjDtd+zd7W8\n00TRa0//X8swxTlZPl87YzFfPj28V1FVZ2/fyUpJd7pOzcpbyLvRuFevV7p3tj2uvb9vz8JM\nzF+9M8VE2z3/O28v1S09M+swRDxNNkJOW01Pd0/jWVG6S8+3L6wvuFe3b1esRqw3rUCvrj+s\nM7rfxFdVu1GuNbU3uEW6OcYub0NZNT1KN9sw2Tw8SUw6Ty/OML9NPdFM39lFvTjH0cjMzLrB\nwbbEuL3XrUyt67atv7nCvrzbt1e2UbpPwMzZU933SEhKvDfvN0JAQixGI04qPCdCJElMJFkj\nUyw+MjE2RT88XUhHxj+vU7m3v7usa6zMrLutrK2srK6suazLrLmuv66turO1tOO5ys/FU81M\naztKPzdAKUsiOSkrLykqLCorLihHI04oPzI+QDPPOl0+znfnw3fCzLr3rf+zuq69tK23rcet\nrrmsw6y+razHrMuzw8y6b71L51V3Tl8+TTfrMGMyNMslXTAvPj42Qjc1QTFGPzrVOOM/V1tZ\n02tOv8vTtlW2U69BsUZRt1G2d8lfu8jJV8Bv17xEvdHTxlm4S8nGSrpKtc1nuUK3XcFjRrhj\nd87ZyffZzUnGT83jb1lRxmNv2VFnU2tRWU9JYzxrSENJPUo3STc/Qj5MOlE8RERGTU5bW2Nf\nd+NV2V3Z/9Xv2dXNy83JxcfGwcq+xL+/xbvJvsnJycjN38rZyt/Ib8/r0+fb3+/jd2/nV+9n\na9332dfv0+f/11PbX1tdR908bz1HTEFRQltAUUhbS1FKSkxHT0RJQkZHPko9ST5ORkpMS1lL\n61nb49/P0crbxc/AyMHHv73Dur+4vbe3ubK3sbK2sruzu7m7vbvDwMTIytvb43drT1lGSD47\nPDk1NTIxLy4tLC0rLSwtLS4vMzE1Nzk8PUJHTFFVV19v39PJyL+/urq2tLOysrGvsK+vr6+v\nr7Gyr7Wytba2uri7u7+9xcfL0dfvd2dXU0tHQz89PTg3MzQyMDAuLi4tLi4sLi0vLzM0NDk8\nQ0ZOWV3vb+Pf1cnMw7+8uLixs7CysLGzs7W2uLi6ube3urW4ure9xMbX2eP3U1VMSkpHTkRO\nRkJFP0E+Pz04NzY8QUNCPDg8NT47Pz8+QkBJTedRTuvDW+9MTP/Ru7S3vsPDvL66s7a3tra3\ntri8vMXIysfX51VTV0lPW11dVVNMSEU/QkZFSkNAP0hGdzFAQFFvTTUrR0m+u0s7191Z02c3\nSOutray5wE/fz7m+uMK90761s7m3srm9wctPQE5TU2drRkhITFc9MDMxLjE2LiwuLzM5ODg+\nOkI+PkQ8QlNvZ+PXy8S5tbO4tbOvra2tra+vsq6zsLa0tre5vL7FzOP/X1dOQE1NVUt3OkVL\nRFU+Rjg4OD01OTUzOD9ER0I/OzxFQ01NRmNrX9Hn2d3Oyr+9w8TMwsa/vru/xM/Ryc3Tb2tX\nd8zMzF9CPT1K9/9XSj4/P01nZ2dPa013b8zZ59/j0c7KxtHr09HGxL7CztvV09nXzNv/X1dR\nR0pKWVVfW0s/QEM+QERNUU9OU2tnz8vM0d/P48rCxMnPy9vDz76/ycXPz+PPZ99bVWNO03fr\nb+vjX+PJ42Nv63dTd8pHPkZZT0vV70I+RD44P29BPkU8Oz1KTkZDVz89Y0FrX29b/9nXvMm1\nx8nFxbS8ure4vLXHurW7t8OuZ8W+79fLuP//290yRUI7S1VjSTdCQj5ZSkBROVs/V91R39NT\n72t3yte7xu/TTE5v/2PT0dHv68hX49vbd1nKTFFfdz1MzndPX8hCTUfjd0jIwzhdy8vLwr9n\nOjI5Ljzd58K62ctryr/AvbxfTEIvNjZFY3fLyGfH4//O3cLDzLvDxba9urvBzmvX51dj61Fr\nXV9fRudLRllEPj48ODUySER30e//a01jXc3Fx7TBur/J18fjxcW/v8LGzu/PZ2NfPjYxLy41\nOknfzMPJwsvR31NKODI1MTtOY8m7tbq5ubm6v73Oz+9f2dPHvLvCwutjRz9HOjxLPD9BPUpZ\n/+Pr998/TEk//0/fY1dXU2/O/8y+077Gv8a+ybrGxs5Z21VVw8jJusvK1Vf/X0lrU1tHVV1T\n/8XIwL3Pyk9MPzY6PTU8Pzg6PEY9SO9TU28+PTo2RkBNye/n505XX+Pnzb/Hy7/Py7y+t7K6\ntbq+u7i5trC4urO70bvNx768wsnBy9PFymfOW1dGOTQpLSoqMC8tOS0pLyUqLS04LjM0LTw5\nRcPIuLS+tsPVwNPbucy8z7q+wa6ut6yvvLW9triyrbG4tMnHyNHDyczEd9vnU05IRUo+Tkk3\nSjtDSUNJPz5DNjJCMTxKOEU+PEk9WWdTXVVIRD0+UUPXzM2/yN3dZ9/R28S9zsLE1+vNwMe7\ns7m3uLm+vsnKz1lrR0T/a9PHu8vXa0Q2MjQuNjg6PkBIX1Vny9P/zttLS+NOT9/ZW2tv53dT\nudHvusVn03fPy76tsbCsv8lnQD02Q933wLLBvsrTd0RIRC41NCsvMTc9OllGPEc5MUc7SdHJ\nuLi0r7i1ubO6vL7KZ1dPNlNbT7/P0cXf491rWff/3ePLydG9487Ka9vV/3fX/2vvTk1OT0Hr\nTlPXTUxvQjlZP0RGUTlFTjZGRFFr787BzO/HU0Rr79/HucC1sLS2tLO8v8PO29nR19vH2d9d\nTUY+PkpDRvdHRO9FS048RTc4MzU4O0NFWWdfVev3SXdna+d3zd3NvMfGub7FuLzAw8O9w729\nxM3b2V9r38jFs6+3srnDzt1PRE1BS01LXVNMT0hJR0JKTT5fSExIPkg+QUdLV0//W0xLQDo1\nNS4vMTA0PkX/X1/vVV/3783Xx72+ubK5sLWys7SwtbKztbi/vr+9wc7TxlvLwN3H1dFvV189\nRmtNR01FPlNFSdNK0989Pjk4MEtIW8PFv8fXVUQ2Ly8sLjlFTtXJ1+9KPjo2PExC0bzLtbjF\nvL6+vbu4wMHM3dl3373IwbvRXWffTtvOx7/KvVvn519vXf9RSEZMRk5r6+vZ3V9LSz46TjhK\n90fKX1P3T1lZ40v331vPycjIyePr10tj3U7ZwdfdyF9fzt/b2+tbTU48TzxNd0/r9/dV60RH\nRD9NQt/jy8fByrzXv85vylnNzM3BzL7F68lnUdtMz9lbxd/Gvby7wsrvPFFKOHdja8/X29vv\nZ1NEODMvLDA3O2vLy7vB2VM8Ny80NEFdV8vVd+f3Rmt3Quv3Z//J1b2zurCvtbSxuL2wubyv\nuri2wMfZz01fV0BTPEI9R0pIVU1DPDoyND42Rk5DZ0FVSkRRS/dVZ1tL/0xr29O+vrm7w8nv\nWVHj69vJwtnM52NNS0xIUVdO21vO09XKwsfRwdvj2dNvyef/zNXK/9nZd09jSEVXSetOa3dK\nPUBGPlP3d8vMXedJR9V3xcDJvmPVyGfJw8XJusDNxcHJ0dPrT0tZUU9VW2dORF02NUEvMzk7\nPT5KPj49OkdBTc1n38Hr38rj983J2dW+zLy6uLC7sLe9vMHK0cd30/ff4+vVV9Vba2NHa0FJ\nTmf/zc/IyddrWW9jb9Vdb+NRSE8+PD5KOD8+O01ASV9fV91rY8bX0b/Z58LJ47/b17xnzcpT\n3/dZZ+Nd2+9X411j/9fZy8L349NLTldKXV1TTVtZPWdKQsj/3evbW9vb38/O38nNd8zrzs/R\n0+/PX1HdVW9fU1VXRExrTV3/T1lbTEhKTD9RPkldT1FV/0vd6+/PyMDEw9PLz9PEvry2t7e/\nxs/ZZ2Pn5+Pfz93b3+t3V+t33dfX2WPjTmNFRz9CSzo8Qzk+PTpKSDxIRG9f0cfJusjLw19n\n791vxcfJxdfT129jUWdVa+NR0U9V3UxV39NZ/1tPZ1/r3+PR4+fr/87J4727xMXI0dvOV+/X\nSmdrVUhjSj1jTU9Vd0Z3d13X28vGztfO1Wfd213R02fMd99fd/9XY0JbSEFPRlFMZ19NUUFI\nP0pCRVNJd89db+fPzt/CysHMwr/Gx9PIU/9FXVtP0UfrV11nWVnbz9vIwse9xMPGycrJxc7J\n02vn993vyWfT42/nW1lZ30/nTkx3VVFbT0RPX0J3UU3jb3fR/+vP41/vW29ZV1VKVVs/UT9E\nPj5AQj9FY0Y+SENNRXdf0+PAvt3E28/r28LOucW4uLm4vr7Gyetv31f3Y1NnTutfd11bW1N3\n39nZz8bNv8bIvr2+ubzJxsF3zW9b60lrZ0Y9RDwxPTMvPDg5OUU9O0hIY0ZM1+Nn181va+dn\n6/ffx8zdwMzjvsjEvsfGvd3TydfJwsx3x2dVy0bn52/Pze/nxO/HyNfIzNPbxmNXX0lXSUZO\nO0Y+OjM5OjA+Njo2P0s9TUpTa2/r3dPPyc/fyNnKwMfAv7zFvr7CwMTAwsXDw8PrzMLbytPV\nY9n/WWNrze9T/11VY1t36/9TZ3dPWUZFXT9EP09CP1FITklXTlvnX/fdz8njw+fr191fb/9T\n719n719Ga0lMVU9db29da1Hn/2Pjz1dj1/fnzd/Gz8/ExMe9vrm9t7rIu7++wMfGzdnZ593n\nW1dJPEM+Pj05PDwvMi41NzY6M0FKOj9PSVdP51v/b9nC08jFvr6/ur2+wc67vdO+xMa5wL3I\nxMbEycfK0cjI283L18TE1cvGY9XXZ8tba11TRkhMQ0VAPjo5NjNDNDQ5Mi4xLi1DNTE+OTU9\nPD1dQ13VW9vRxufEvse6vLaytrWvtbuyu766ssK4v727vrrDwc7PzcTH09PL20tvW1lZb1NZ\nUUhTQUdKRUdMTj9VS0pKSENCUUlnUf9LRktTSk9rY9tbVU9IW1lvb9/Za9fn2+PR39Hf1dnn\nz9/T0crVzc3Ozdfd7+tdY+9v919XUV9OX2dbY+NXTndNY1dXU09PU1tvW2v3TmddV2v/1Wvb\n7+/O09++y8m9xsu+0cjE2cPT79Xb/19Xa1fOb2ffX+PT1efvV9NRT/dI3WffU0nVQ2tP91lv\nd07vUWNOQddL699Db1tHz0rN2UvLZ9XRS87L3bpjycdfvW/v00vMUdFj4/f/V2fdP2NnQONH\nU9U9bzw/Tzo9U0I6RTxEQ0ZTTUrKS8vT3cHb0cnJxsS908C9ybS4wLTEurTGsbfGsr6/u8DN\ntcHNusvNw0zDbz3dQ0FnQTJOLzU+LTk0KT8sKz0mPTYzQy87PTlMVU7KZ9PPyd/AxdW5yr+5\nxLm8urfHssTNutO9vne14/e478O7/77dSbdJ0chN41tE70RXSD5nPVVbPllJSFtO7+M80TU7\n3zDn4zbnO0xfQNFPTctJV8VEyF1nzFPGvlvB09e9yrSy16zfvbLXtbnPu99bvlPHzk3LRznE\nM9H/NtEw/1843TxDX0BXTkBRPUBdP1VXQe9FRP9GV+tCY0dRWT9jY03PY2/D68XI47rHwba/\nurfBtrrFr+O3w8+/0du5Z8fTWb9f3c8+6007Zz4+XzdIPjNHNjlGPEE+QUdAS09OVWtX12Pb\nyufHyf++yr6839HK68fA38/302vIxsDv3VdRz9nja193T2PP/2tNTVVn4+NTTEtLVU9LTkVn\nXUzjSV9ZWevf5+f/779d09fv1+fNyeO+42POW9PGy85n3c/rz/9P219Ty1vXZ9VnX19dY11j\nU+Pd3efnV1/fV9vfzXdfZ11f20ZO2U3db05ZTV1X/29Na0xRV1lb/3d3Z/fX29PX2/fZ99XL\n19HEzsLVz9PX383J1czb3dtXd01j90ZMQkBPREA/P0ZRRUxFTFVBW0tb71Nvb07f29vRX9nb\nzcD32c93zevR08zG0ci/zcnT58/Lx8DFxdvV2dXV09fX49fn51ljXVHdZ9vbU/dVZ3djWVNM\nUUZMQzpCPj1HQEpJREhCT01ESE9N711VX0dVXXfd293P79vbysbAv7u+vr28v8LIzcHBv8jM\n2d/j13ff2///Y+NjZ2dbXW9LT19OV1tNT1VVVU5NSkJORktTSkZMTEhKRUdJR0lRTlNbW2v/\n49/VyMfFw8PAv72+vb+8vr7CxcHFwMHJxs3RzePj//f3a2tRUU5DR0ZCSkNCPT09O0BCRVVI\nTVNRd1//193V0czJysvP08/Z1cnn2+Pv1etnX2tvY29ZW2vn//d3a2djW01NTElOWUtMRkxK\nTE5LS1Vv6+PXz8jEzMnEyb2/wMHEx77EycPGy8rJ29fb/9f//3ddb2v/X1lZW1VZUVdXd1tb\nTFVVTU1bSk1NU1VPX05fd1dOSk5NVV1ba2d34+/r6+PVz8jHx8vHzcnT19vj3evf5/9dV1FT\nUVtTTldVTU9LS09PW1dfX1dfZ2/n5+vr3ePb3efX29PT08/b39nn39PbzM3NzMzRyM/XzM7P\n29fd09fZ3+Pva1tVTk1MT0pGSUE7Pz1KS09RVV9nV2N379/f49nZ3dPOy87M0dPV19nP2//r\nY11fb//v6+dva/f35+9v4+ff4+fvb2tnXVlTZ1tdb2N3a1tjY19rW1tdZ2tdb+/v32tra2v/\n/2dfXW9b92tjVVdVT1lXY2//3efn59PNy8vLzcnJxcjIxcjOzc7N2+v37+dZVWNfZ2NdWV1b\nU0xOVVVZUe//d+vZzdPOz8zM08vNzs/b0dvf62drd+9rV1NbV01JS0xVTUZLTEpMSUdKQD49\nQ0lDR0VIU05OUVtb/+vf19vT19fR0c3Nz8jIysfJx8rV39XXz8/KyMjCx8nJ1c/Nys7Xy8rJ\ny87Ry9fR0dvdd2tnY11dV11bVUpEQUdEPzw+QkA9QENGSU1VTldrd9nVys3NyMXDxMXFyM3N\nz9vP2d/j9+/vb/9fZ2djV1VZU09XWVFTTk1NTUxOTU5NS0pKTE9ZX//d3ePdztfT29fR0c3X\n0+d3693r79/d2+d3/+f379/r9+vv5/f34+N3W2NfV1t369/r6+vj2dnf29nT09nj29PR0dvd\n29PR2dvXzM3O2dPX2d3V2+vvd1tXWVlNR0lJTEZBQ0lOTk9OV1tVVVVjZ2t3d9XZ09XZ0d/n\n9+v/b1lRS0xLR0pLS0tKSE1VU1NOV2NjY2/r69/Z0cnNz9fRztfd6+v3b//v59nX19PRzdHV\n09vX2dHO087O0c/LzMfJx8rKzc/b3dnT19fVz87b29vj629fW1VTW1FfU09RTExLSERAQT5D\nQD9DRUBDP0pMTU9NXWtjY1tnX2drb/9vd+Pfz83Kzs3IxsPBwsTGycPJyMvV1d/f62dvXVdZ\nVVNOT09PU1tdX2fv7+vf929nY/9nZ2dna19na2936+vd49/r7///7+/f39PT0dXX1c/P2dfj\n5///73f3b/d36+fZ0dXP0c/V2dHZ39tra11RUUtLS0lJTUlETEpOT0xPT1VnX2/r6+9r/+vn\nZ2dnX2NXW3d3//9v//9nY19jZ05XXV1fU1trWVdXU1dbV1FVVWdTd9/b2+/X0cvOycnKyMvR\nzcvFxMG/vL++vL29vry6vr7Ex8vP0dvf5+trX1ldWVNPT0pBRURHSkxLRklLS01MTUxNTU5X\nV1dfVVlRV1NRV0xKR0tESEdOUU9TU1tXX11nd3dr7+vb2+fd6+PvZ3ff593V2efvd29nZ3dv\n993Z29fX1dfTy8nDxsXHxsTHycXFxMbHyMfGys7P2dvn72/v/+P35/9vWVVVU1dVV1tZX19b\nWVNRUUpMS0pOTU5MTElHRkdIS09RT1dZWVlXWV9fX1tfb3fj3dXX0dPV09HLzM3Nzs7Nz8vN\n09fb19Pf3efv/2NjX1tZVVdTVVVXVVdPT01OU1ddY2dra2v/9/9r93d36+/f9//na+vj2dHI\ny8fJxsTExMbGx8rLz9HV29XX29XV29vjb2dvY2tnXWNfX11fV1FNTExLTUxISkpHSUhJSUVJ\nSUpITEpHTU9XY2Njb2vv5//v6/f/7+Pb0dPXztnV1d/j5+vn//9v6+PZ2dPKycfGxcXJxMfJ\nyMzKzs7T0dfb39vf69vvd+93Z1NbT09RUVFNSkpLS0tRUU5PTEpMSUpPXWNn9//v///3393d\n39vd69/d3efn929v5/f34//db2NnZ+93d93V3dvd4+vj99/32ePZz9HOz9nZ429v///n7+//\n//9dWVFVU09VT1VPTFdTU05RW19XT09RXVlrd3f/b//f693n6+fd7+f/9+vvb+Pf3dnf0dXT\n1c3T0c3OxtHLzNPb5+vv79/33+fV4+/373dvb2fn7+/rZ+fj/29v52/3Y3dfV1lNX1FRTFNP\nT0xJS01LTkpRTElHSEtIR0RISUxMV1lv9+/n18/TzcjFys3RysjMysjCyszLz83Mzs3KyMjK\nzMzNy8zJy83TztnZ1+Pn793f/2tnZ1dTT1VPSUpJTU9PVU5LS0hFSENERUNHSklLTExDP0RF\nS008SEZMS0dGSUtPTUpMSUhCSVFVT1V3b//3/2/v1dHHyr++v73EzcnKwMXLzMrNz8fJxMbH\nxMDDvcfFy9nrX2dnb11TXVtOT2Nf7/dva1/n42NfZ1lZZ09NTkFKS05dXWdfVf9PWVtbUU1G\nTkhDTUxITldf/2Nb7/fj49XnzM7MzdPRzdPXy/fO69nXy8/Vy87P1c/L28/Xztf/0e/f1dPN\n999rb1tbXV1XX0tTTk5MP1E7Pzo+Qz9LSEhPU09vb1vb39PMzsPEv8O/v768u7vAvsO9x8zV\n3WNvWetnWVtVTUxbVVdXVWdX42/XZ1lPSU1LR0ZLR01DSkZEPkdKTldr49/J59fTzdXZz8jX\n53fZV19j71Ndd1lvb/d3Y2fd9+PXz8nHyb3BvL+/v7/Av768wb/DyM/b32NFTkE8Pjo6ODM0\nNzY1NTU4PTo6QUpHRl9db3fj59nKzMLGwMDDvsbBxM3Kxb/Izc2/wMrJvr/AybzMwci9wr3A\n3cPTyNnv/19fTldNVVtMSU9JRUg9R1c/SDtFPzo8OTo3Nzo3PTo9Pj88Q0pMU1drd+fd39PZ\n59fNx8O+v769t7rBu77AvMPGw7/BxMPMzNXf7+/va/dnWU9NV2djX2dbXU5VQ01PU11XUVVR\nTD9VVUxbVXfr1czRysTO09XK0czFyc/Z2f93z3fT63dra1tfV+9n9+/j4+vvZ/f/3//r4+dn\nZ1dbUVFPVUhDRkNBODtAP0hHRFNVX1tvb2vv283Fxr++vru9vb24v73Av8rM29Xf7/9nU0tK\nRkxGS1NKV0pGTUlMSUdCP0dKR11r49Pd0dV31d/ZzMnPxMS7v7zAub+7wsTPxM/n91tbW1Fb\nZ19d/3dvZ1NNS0tNU1NZT1NKSkxRTU9NSlNPTldTT1FdV1VOUVVbX2NbXf/359vbz9PrXedb\n53d319XO08XJ0dtba2dr/+fPzM3NzMjJzcvTzdvM2dfbzt3N38vF0dHfz8vPz9HVd9dr6+tn\na11bR0hHTlFdWVlNR01LU1dRX1tfR0tKQUI/PTo7Ojg7PD4+SUJBSUBLSFVZ3+vXzsvIyMq8\nvr69vr67tra2srCxr6+xrrKztbm7wMbO12tdX1tVVUhOR0xBSUE/Pj5APEM9QDs/ODY5OTk1\nOjk+PEA/RT8+QE9jV+Nnx8PEwMO+wMPKxMvL18/Zz9fbz+PZ5+9n6+fv987Ry8XTzMjJwsDL\n1dXDwcfJzszHwOdXa2f/d05JSlvnX0pDPk1TUVdNU0VbVUk9PkRXU19Oa//jVVldS1VMX1XL\nvrvvUz5dv7rHwrrVzefZ19HK6+fn1cbbPTAuzr2ttNtIQDw0ODhNb8G9vFdnX/9dTl3dwut3\nz8RFTGNvPd/328O9/0bdXUc/WU7/T2dZTzw1NVnZSz41LzRF3dlrW9/Ty7+9vtusrKw9LzT/\nrKysrK+vtO9GOz7Er6640+vba0c+OEHjwWsvQzovLzEqKUDnQuPMXzxNzGfru7/BucDVa8HP\nx8bP1VlnWbu4zz85L1ljxVFK213OuCQpr6yyNSMoKKyrrMqwrOffNigpPbeszLzDsLTTST0+\nu7mu32P321U6MiswQfdnb1fIztdTPUNfuruyt7S9uNPZ18HJ1dXvVUlfRTY7N0I6Q0BbXdH3\nWzk2Oj08Sc3fx2eyrSNPra2vUyo2Ma2ttNOtrchTKykqScvNN9u4rc0+ODnXur3VX9u3vkwx\nLDlKY2NHd7uwtt9nY8C4tbu5sq64yklZ59PRV1Nn30s9MDY6QDw6RF3FTkFCTT5LV1tfuLBG\nK66srDolLTe/rLrBra2wUSoqNUHfX0TZra3AOzhT429MTNG4s8o7LzhDPTc7Ss2yrbbXz8rG\n1cjGta2tts5j2e9nSElr529EOjQyMjQuMTxLRD9jQzkySG/nUdHnwLvnsOs8raysQSvNv66t\nrqysrLM0LUxVOTNXya2srMHjw7lRNzlT193vTz9DPS8mJis0PkxjyL282V1LV2PTwLW0t8nj\na1U+NTg+TU9MSkNGQTw5SOvf39fOwsjvb93ZzdPBure9uLW1uVXbvrPOW9+trKxAd8a9Slf/\ns665TDQ4RSgjIy1FS13jwLm84zs5R1E5Nz/ZzNn3W93nXUFD2cfKxbu5tL3My7+5wM3Py9f3\nWUs/Pzw6ODk1NDY+Pzo/T29j38zNzL/IzNPOytPRx7m8w7aztcnMwsrTvclnzK65SzdTUTo0\nOk7JyVE1PUs2JictNDQ4Qte9u7u7s7bB09nKzONn3cO/ys7Ju7u9vLzFw9Hj393b3d/3X1FM\nSDw2MTAwLy4wNjc5QUdJT2/j0cfBw8G9vsLLy8G7vby2t7q6usrLxcvTxsv/29PnU0Zv51k+\nRkpEPjwzNDg5MzdBREFFUVNRb+fr39HLyL+8urq6u7q/wsPIzs7O3f9vd19fWVNOTltbV13/\nb2NZW1lTU01LTVdfW1tf///36+/n087N29PV1c/T3dHPysrO1+Pr72dTU1VbT05FQUJCP0FB\nRkxVVVVZY19dWVNMUVFLT1NXb+fd29HIyMXBwb+9vL69vb3CwL28v8LFwL7DztnR3/9ZT09O\nSj89Pj4/PD1AREdJR0VJTUtPXevf2efd49tnV1dfa19dWWNdT0xLU19nb+fb0c/P19PN0c7M\ny8rDysfJzM7Pzc3R09PR1d/n6+v3a2NfY1lVT09PU05NTk5VWV1fY2/v72/37+vj9+//5+f3\n92NvXWNXVVVdZ11jVVVXUU9LTktPT01NTE1GSktMU2fd0crGxL+8uru8vLq6vLq/vb7Ayc/O\n09vj7/9v7/9nXV9Xa05NTEdTV09OSlFRSE1IUUxZUU5NWV9TU1FXT1dVVU5bVU9OT1FRT09X\nW1lna/fn39XL08nKzc/Oz83NyMrHwMHCwMPEycrJy9XT0dPd3+/na19TSEhPSkhPW1VTWVtV\nTVFZXWNjd2/d3d3r2dXb6+fj/+/rd19bZ2NdW2NrZ/9jY1FZU0tPTE1TS1lVV1tTVWNjd2Pr\n9+fr99/j59/fzs3NzdPVztPj29XO19vMw8vKz8/LztXX387L1dfd2ePb3/d3a+dra2drWVVT\nT0pNSkVGSklFREtLTUZBSEdEQ0ZDSk9TTFNnY/9n49nj2dHTztHM1dXTzNPVzdXX1c3X1dHM\nysrGx8XHwL3Fxb6+xcbJzMfJ0d3Z2f9Za2tZWXdjTmtTOmNMODlTRDk+Pj46PUI+PkJFRz1T\n90VCVdldP1/LRES77zpZvU1O28XIX9W418a528y8ysrZvbzfQsex1zi8v29HwVnTzNfTxme5\ny0XBtlPvxf+972fMSP/FTUNNX1c3OUdbOFVGQFtOTks4b/83Rk9LU1fr2VfZwNX30dnL91/r\nVVfvS1Pj39HT0ca5vb7Dvb3Ezd/TzN/j2d/Z2e/v187d/2djUUpBQUFNVUpLWXdrX19XZ+v3\nd1NV919JWe/vUU/31VFb99VO78vRTd/r/03v3V0+2fdDSV/nZ9X/2z1Z3ddDOlu1zndR9+/M\nvcH/07C1xOfXzt1vX0BC2b2+y763tLy+zV1LUUU5MztDTl9nX+fMw8fb72v3Y1dMTW/371tv\nZ29rVT89RkRFRUlDQ01MQ0RTSz5NZ1lNd93jycTAwr/DyL21xMG/xdu6xO9nys7RxL5nT09n\nb1l33T1300lMSU5vT0hfa0ZT687V/3dOS2fZz9/Jwb7IxN1ZV1lTR0FXY11ra1NNTldnSlFV\nUU9Zb/drZ9tXTld3d+ffydnKwL7JxcjM6//f32/d093X18rO293r59fX329ZTldTRltZT0NJ\nV+fVzNlLR9HByNtbPTtO00lIUVdf78zNV0hdVztK12NBPzk4O9vCz+/Hxs7MyN0/RGdTSN/L\nx720r7G6uMDNd91nTk7n2dvIvcnOy87nX2tbSk9fZ//f1d////dTUU1ITk9XVU9VXVd3b1lV\nWV9OS2P372N3W0lOX1lvb2ddY+fv/+dnTFFRU1fvU05rzMLAy1tLV1n/02dn/0RL08zZWet3\nSu+5usXj905fv7rMa9vHyL67ushf/9tv68j3RU7XT07XXT06RPdCTvdKP2fr/2tV72dVxsLn\n59nL0c2+v+PZztvj49vvTFnda2fva19bW1lfZ1tr6//jW29fa2NLS13r911b99lnUV9MVdfn\nV0ZId3fT38dbLEu1tetTOCkvPbutuLPFUz1O0f8uKjEtQ8asrLK6uMvEvbpRNzQ6P3e8tsLf\n187O08bLXURMY83AtbW7xMbI2etjX0M9QU5dd+//Q0JHSEVLS01JT//3Z2PvXVVfb2v338//\nY2v3V1tdW09MX2NTW+vb6+PMzetZZ1tEXdnZ793Z1edf39dd08bX6/9ZUefNwb53SFFOTtPM\ny9VrW/fvxsLdU0xbXd3HyN9PW13v5+t3W0pXWWtZa2/v59/n62/31dv36+tbWWvv2/dj0ddj\nX83jd03f1d131XdKTnfR6+PV/1NEV/ffy8XZY/9bW1tj6/9TV3dbT1XIzGNHPj08P2PKy9fb\n/1NJTD88PD5Gd9fFvsLFwMXGycvnb1dbW//v7/9n7+vb29PV28rb1+Pf2dHOzcrP1dvX09/f\n73drW1dTWVdfU1NOUWPn3dvP31Vfxcv//9XrP013/1n/2/9M//dvSe/Hb01EZ2tX58PCyN9r\nSEtEPjo6PDs6P9/Czd/j19nV53d3WVlbU1Ff19nb3ePRy8jCzc3Oxsa/vry9vb2+zNvX619P\nSkY9PT5APkZHX1lr79nOzs7X3eN3629va3dZ3W/Z79/j9//n3c/dz9XT28/b0dfVd11OXU1M\nSU5CQEZVS0dPX0tTZ91379njWWdr72vv5+9ZU2P/a+/n5+vX0crMzs3X72v/W09RTkxGS1tr\nX3fb5+/V09fV2c/Z29nTz9fX529nW19TUVlfV0/r29PVxcfOyNHN08zDTMzN72/LZ2NFy2ND\nwkhbTUdMOWdZTlH3XWvN5+vT2dfr411fWVtba/f/d9vvX9/j4+fd1+f34+//6//n71tZX01T\nTVFRTFtbV1tRW1lf6/fr1dnV0czV29vX/3f3Z+f/529r92v///d3/+fv5+/r7+fd5+/v32P3\na+f/7+P35+Pf3+Pd52/v393Zzs7Xz9fNytHP0dVr5/dTU0Tf0z9OXz88PmtVTmPXU0t3129f\na2NHR0hdT0NTzFFd2dPGPm/GX+vbyt9L69NbT+vrW/fNytHTzcfKzr/Dzc3T29n379drV1dd\nUUxRU0tESk1PVXfr7+fZ19XP08nN1c/Z4//v52t329/j99vv//ff7+vf1+fn7293X2f/W09n\nWWNfXWddWWNfVVtTU11TW1dXX1ln/2vn4+vZ1dnO1czPys/M19Pv7/9fV11fZ2dr/2//Y3dn\nY29jV11dY1dnW2NfZ19bV1dVT09MVVFNW1tjZ293a+/n7+/b2d3f39HX19fX19vf0+/n3dXV\n2c3PzsfNyMnHxcTIyMfIyc/R09XZ3dvn5+/r92dnWVtdV1VXUUtKS0VFRURES0pJTEtLS01J\nT0tOTlVRV1NXT09OWVVXXWN3b/fr2dfZ2dnT59Xf2+fX9+Pf49/T5+Pd39vV19vT3dXV18/O\n0c7R1dXO183/3dHZ3+vf73fr3+v/73f3Y3drY2NnX2ddWWNbd1tra2djXVlbWVtZW11jb/f/\n72//d+vr/+9vd2v3X/9n52fv6+vv53dvd29v7/ffY/9v/2dv71/37/fv73fr/13d/3f34//v\n//drX1t3WVlvX1dbXV1bXWtnZ2dja/9fb3dn9+t3a3f/b+vv59vd39vb3+vja2Pd/2d3//9r\n2+P/387r1dnP0dPZ2dXf793X59nP987Ta83Oz9fr6+9n62NfXV9VV1tOTlNVTE5OSllRWU1n\nZ2tr3+9399/v5/fn59Pb3+Pv2+Prd+fv3/9j91lfW1NXX1FfV1lfWVtZU/9dW+db2e/329fZ\n3dPT19Pf0dvR19/T3///d9v///9Z93dra2tdU19RV01ZT1VXV2dra1tnd/9369/n2efn1dnV\n19nj793jd9Vnb+fj6//fa2//7+d33Xd34/d3Z+9r3d/V0dXr39Xf3dtv69/jX2vn5133d2f/\nb/drd2dnX2NPW1lZV1NnU09RU0xPVU1VXU1XXU5VXU9rWVnv5+Nd3d/n/9Xf593v79l33ePb\n3dPTz9PT1dHZ1c/P78/b4/fn711nW11r/1tv62//Wevva93rd+/P29/b39vb39XZ19XT59vn\na3dvW05bV1lRS0pKRklFTk1NTFn/d/drXdNrXefV79nR28rL18hnx9XvxUc/vfdBv8A8wtc9\nU8xdRtXRwi+7PWu7OMa1QUq5zji2OErXYzmwPzy2ON9b50xT389VSsRL42/fSknr71lGVb5K\n33fr69nn1VvZydfn28fPytnT293Ozevn2+Pd/1FTUf9vTVNv/+/dV+PZ0ddVVWfKZ2tv78pb\nQFVrd1VCP87May9bvsLTd0hRzs3/RE3IwNtfb//T109N29lVRNPG5zs4Pm/ZwcjIv7a9WT4+\nPzc8Oz1MvrO0vrmvtMlVRD45Ojs+W7/Da01TSzo1O0z/0c7Iure2v9fVuMvOxc9d50vLU9HR\na0DNSVdOvtlL57XBLi+urccpJkE+wsnO262tyTYsNSwkJSguR6+tt7utrcTnTD03SNnvTr+2\nvetbV05Z289v78W7wsXCv7m3vstfR0xGPkBfd/drb1NBR009SE7vY1PVwXc/Nz333z5frqzL\nRcm760pXut/Iuss9tKywMy9Hb++709m+t8kvJy06Kio9Q125rLxN2bbMR0tdX9O+utXRu7nv\nU9vVb8jCwd/Mvr/Z59HfX0pBOC4zNzo6Pj9FSD8+Nzk6Pzpd38nbz7y821XLra62zF27rq2+\nW9m2wL6/viv3razDLSlbTsvTzWe0rro0LC01LjEwMTu6rblJT7/E1VtZRG+8uNVT37/FV09f\n787AzdXdxclvRUZNS2fv91tdV0g6NzU3Njg7REpNU2NnY03rxsnGwcK9w7+/vlnZtK2vss1j\nObyvrVE4vK13NEe6xc/J2Tk5RVNATOs8KzdLPjVbxl9DT189NU/XSkvOtLu+t7TAvb6818/E\nv+PXzsT/U05LRFNv/0tNY2dRVUtBO0zrazs6P1FVb0k+SGtZPj/PyNl3y8VrWcC5ubG3wFdb\nyLe5ub7ZO0fMr733T10+NzzZydvRbysszq9nLCYuPe+2t+9jv8Y3LjVIP07O02vCra/Jzr/d\n3cu9zc69u91RUVE/SltbPUprd11rW1lVb1tXT3fO01c+TU5nT+PrzMrH0/9f/9fR31/TybjB\nPzhrr7PBRT7rt7LROUHJvj41O++2rsk0JyxTz99ES+/D11szOE1rZ1lPd8XJU0NASufOzm9b\n2bq4w8fGxsnK51VR48HIWVFMUVNJRklP6+9b9+vfy8zPzdvX2cvN6+v/Z3fnW9nrzONdSlFZ\nxMZbO0zP20NLZ105O85rPUDDTVtR2etX2bo117PBLzBbrsvBwsVVybe7Qk53d0VVV0ZA09dn\nPVHba13/UUI+VeNXRk9fVVlv42/v18rT0869wMPJzdXOwsHZ09HXZ2vv419bY0pHU1lDS0xf\nb1/v70Zj38nM68zAz8Nra8PHsrlny9fH01XIvlFvS9/jzclJLTnVzGc2Liw5a9dPMjtNPTlD\nzkZRXVE2PFvM/9u+vb28usjb073H083L08jCvsvZ1dFfTU5PW1dTW1NAXVlvT0prX2fPWVdf\nzbrBd9vPz81RRFnbvLXdU1XV5+NPWV/V72M4S9/nVV1X2T9Fw81TWXfDvk5jxcd3vlVMSsy5\nzOvn2V/jW+/dw+vdRUtvb0rb183jWUpFOz1nUWtVRktVT3d3WV1TV8vNa/9n3+dfTk1K/2v/\n12tnyt1Tb1nvvsjO1+/Z690/48fB1XdEUWNXv80+z9tvxFHj2e+7wz5ITOu4wf9dW8+497vR\n/3dd/8F3vb1XzcxXd8e/yD9ARj9K93dnTmdPOjg+ODs4OUBGXc7ZY2d3ysTBys/Pz9HPzcnJ\nycbI59/Mb9Nba+9jW+/Z33f/XU5ZREhTS0VGP05KRFFEO1NnWV3fzN3DvMtJWb++29Oyw0NZ\nycK2vudLTve1XUHOucTnQUNTXcO6w8fE31FDOz4+Ql9X99vd599339njyctRVWNnXUVGU0hN\nX0tETnfbV05VW+PVz9vvz8HRWWf/73dM/+tPWeNbQU1nd3dfUevra8e93U7vxL/rRNe5w9fK\n//e9xeNnV13Hzl/LPjbTt2tFOjpn42PJ20zV401GPUxXU09KXW/Nv87Pyb/Gy9tn0cLI02f3\n193v6+93a9fT///3d9HT493b39nvVU9nb1tNRkBGWUpDPUdPTENHRkpHX2dVTOPZUVm7ylXV\nsdtv97fnz765d//Tz2/P/2//xdlORszF6z/bZz4+T0k/P01LRkNKS1Nfa11399Pd2dfT2c7N\n0dPdy8rGxcrMysvMzs7O0cbJ3d/r09/f3/f3b+tjX2djZ29rX1NdZ2tvXW9379nvX13r61tZ\nU11RVUxHSUtOSExFSElLTEBKSl9bW2tvY/f/4+9d53fj3evf39fR09vTzM3R09/d1cvd1c3X\n1cvZ49vT4+fn49Xj3efR3e/d2ffvd2Pn//fvb29v/11jU1VVV1NdUWv//1n/a+tn/2tf5+PZ\n5/ff5/9v9/9dXXddY29rY/93X2vv/2tna/djY1tn63f/d9v/b+9n72//X/fr4//v73fj//f/\n/2vn/+Nf42/d/+P35+ff//93Y+93/2df7//dWV1n6/9rXVvrd+t3593j73fvY2v/X1dv/1VV\nX+9jZ/9vb//rb29v2+vf2c/r3c73593j79XVXefA7+PDyt/E41vAdz/b02dT019I22NFztdn\na11r92dPX/dN611T/1fnY2NM10/vTUDBOk9fRlPTPl3nOsrFP1Hda+P3791Jz8FdXd/Kz9X/\n/9PD/1v32ePr9+/TzdHV69nM2ffVy9P/09fb1///3+/j/19j1+9MTdnnVdvjW0ffX01R3dFN\nV29JTstRS+vIdzpV0T9Pd91TVcm+S0q9xks+WbzJVUndz9NfSMC9w3fr0c9ROj5J7z09RM/T\nXVvby9vI1VFr2fdHVWPvSVvRXU1d2c1v49XN68vI5+fFv9/VxcXT0c/M513Tb19b929RTmNK\nQFNGTVlRU05F62tNUWN3XWvbSVPOU09T2c1jS2PXy0fKu79fSsy/d//V0azRSGe8wWNDz8HP\ny1nZzdNdR2e/S1Pf70tfV09Cb11BSO9dQERvRj5TTk5KTF9LT13v29/v1ev3VVf3b2/j529Z\nz2P3z8pX78TVWdu+3+vf0cDM/92+zv9Pz9HnU8nL61vXx+fdQkvfW0FI3czZ3/fvY11da09n\nRXfP30df/9lR4+9vX+//SVljW0//a1Pfxe/vzNHG0dHfzdfb2c/37+N342tv/+NXVetjV1FT\nW01GUUljX1lT7/dvTevX21tdzc7j683N09fP1+Pf905bT1lIU//3Tl/Vz01v0e/3VVvIzEhb\n93dTXedrWbzTTNvB30j3w8Rnv8fZ1clrb9vG/0nGykpDa0hBT04+X/9NRlfvb2tV62ddSEl3\nY0tj3dfV1dHbyt/r09PPxN/XyL/L2cu+71PO0eNbz8znd9dd3ddfW+fdV1FfVUZjVUtO/08/\nVe9HT11VW9XvV2fMxetHUd/VQj9b3UxIR1XTd1Vb49f/Rf/P41Vj2d/jXffP0ev35+t3d1tj\nz+v/28rK49nTa8C/7/e/ws7Gxt3Jxl1jxM9V38xVb+9PTOtPR0ljU09XWU5nY0lf711T93dV\nXV1OXVljWWPb/2fn2dXn68zN3dvb/+ffZ2vn52tf72tRW3dbW11Vd2tOW/dTWXd3W+Pv7+vP\n9+Pj53fj419n4+N3Z+/j9/fr6//nb1vv6+Nv79/TZ//j7//n6+v3z+P/59nrb9fr79/f4+/d\n4+vf2+vv5+tnZ3dvZ2tnX19nZ133XVlTVVldZ2NnW113/2tv72f37+d349nn3d/V09vb3/fr\na2Nra1lZa19nX19TU19PT1VLTVVbUVFVWVtZX1dvd3dr3d3V08jPzdnP2dfR19fT09fb2czX\n3czX2c3d39nf7/fj5+/d2+t333dvY1NXU11PV19bVVNrV2tbWVlvX3dd6//v63fv9/9f71/f\na+//3eP/92fd399v79nv9+vra2//a19TY09ZV1ddT1FOVVdZX1/vXf9fb/dv2f/d09nf09fX\n3dfZ1+PR09PR09ff3dPj1evb19v36+/v4+fZ3e/va/9jZ1VbWVVPW1lXWV1bZ2NfX1VbS1lN\nU0lJWVVNXXdfb3f3991r2e/P1dfX2dPj29PV09vT3dPbz9/Kz8/dzs7f1+fj3+PrZ3fj7/93\nZ1tjUV9LVVVPUU1KS01LTUhNVUxTUVlTW2dZd2tvZ2Nf7+dv39vjz83O0cjNztXI2czTx9PK\nytPL1dHbzc/T19fn7/93X2djX19XV1VbT1FXVU1NTldRTFFOU1VZY1NXb2NrW2Nbb2vr/3fn\nZ///7/fj59/b4+fr6+fr5//P29XN1cvjz9vZ2+/P2d3d29XR39n/7+vn72P3b29db19RZ2NP\nY19dX1VdZ1lZVWtfd1lbY3fvd+93X/f3Y/9v//9vWd3dd//jb2trXVtfV11fY1n/WU1vWV1b\nd2fv493j1dvR1czdzs7PzM7HzMnb3ePv39X/z9nf29/33efjd2fnZ2tfd19fV3drd1dna2dP\nVV1dV1lZZ2NrX/9dTedV/2dX51lnX2f3Z+P30/fn9+9f591rb2PvVV33a/9r7+/ra3ffb+f/\nd+P/79nr3czVd83Ry+vT2+Pd39fv5+vn2ff/429n999f/193Z+/rb/dvb+939/9RWV13TEtr\nU05NU1NXTENTWU1MSUxdd1NZ9/fr/93V19PN08zP2c3j18/X48jN3czZ0dnR1Xfr7//n5+v3\n62vr53ff4+vj3+dv91lrZ/9nW2trZ0pdTldRd11ZTlNnUWtbZ11nW+//W1dZU/9P93fv33fr\n42tf2evPb+fv5+dn42ff39vnzdfj/3e6Vb1r39XZ1dPnzWPHa+dj2ePfSe9Na1v/THdZY2P/\n411rY2dPVevvZ+v/b0vV30TTY3f3/2fbV+Pnd2/rV9FdY1t3Tk93X05b61dnd//nb9/O1dPJ\nysLJycfL383F1dfP1+Pb59X/0//j51vZZ2tjX11ZX1dMU0NJRkdbTVdKd2NjVVFOSVdTY01r\nZ0/jY+Pv0+vfyevf79XfVclv41X/W0/vVe/va+fj02vvzkrNy1vf58tR1cJvzcrv38zNzMzK\n0b/b6//Xb/fE3cX/08pJwP/b51lbTe87Ttc5/0NExi652y+0Lsn3N8tLVzi9PTXEP2/nQ11b\nW81Ld8VB18w2x0TA2U9r0dXT9/fbxE7f72PFWc1Jz8vT79nD3cDDZ8S668P/XbvGTcPdv13/\nx9Pnx+tXy2vRTzr31ztM7z5vWUdTQ0zbPDjOU0HrTlNNz1VdTffvWW9N7+P/R2fd2U/OTV3Z\nW0dL31FH68tZ0d/P2cr30f/M/2PGy8rC48i7ycBfu71jy9tjumvXzP/Ld1fZW1XdS0/nUU9X\nX01bQ9FTPf9Fb1tCb0lX2T1X0VHbV0jnU81KP75RY8rrZ8LZ7/dZwWtOv/drxv9bu0y5wky6\nTffXPtnf/+PMUW/Z//dCWVnfW1NDUc9v4+dVv9dVZ1Vv2UZN6+/VU2Nf/+t3S1dv72dGXcx3\na//j2//3Z3fjzlNO61Pb70xr41ffb0/ba2vfd+PK1c3CztnX19nX0cbRz8fVxcPbydfZ083j\n3c/jW1vf49/P1ePf1+d372dbS01LSj9MSEVHSkRKTERESEpDXUFLTUlHRk9ZVU1nRU9bVWNb\n3/fv2ev349v/0+dr49PTys/RzsvXzdvJx9nH2cjLzc/Rx8vKycvIzMXOyMPIxcjPzdHb2evX\n02/jZ3f3VWNrWWtdSE5LS0tCR0dESUpISEhHSUBIRkhJRElMSkpNSFFRTE5KVVFRU2Nv2e/v\nzdvO1cnLxcfAxMPCw8jEyNXG2c7ZztvVzdXT0dHPz9PZ19Hj09fb3dnf3+//d29TTldOSkVF\nQ0dHR0hCSkhMS0lVTUtOSU1OWUxfU2v3V//Z29HZysnIycHIvb2+v77FwMXJz9PX6/dbb1tX\nWVtVV2dnUWtfWfddXWf/6+dn7+fv5+9n32tnWVNZVU9NT09OT0dZTWtZU1tTXVVRWVNTV1FV\nXV9jWVl3b///b2d3a+vb2cnXzsvOzMzKzcvFzsXDysTHw8rKxMzK0dHT39Xd59vr3+P32+Pn\n32fdb9/r69vv79/v493v7+9db1tjVU5XS0tKSkVJRUQ/QD89QTw/PDs9OzxAPD5BQ0RLS1FR\nW2dd79nVyMPCv7y+vby7vLq9ury4vb25vb7AxL/DyM7MytXZ2+vj/1tvV11ZWWNdb29TW09f\nSltNTFtjVVNTSlFKRExISkhNSE5JS0xLS05MV1NfV2tfX1VbZ2v3/+fV39Prys/d09Xf39HV\n3d3KycjT183f0+fj29fT3ePR4+Pj29/P59vv3+/r59vr1d9r9+//d99Zd1dRVU5dTndnd2Pr\nZ+tjY1lTU01rUU5ORktPRUpNS1lPU1lMb1lbVV1vU2tv72fn2evZ0dPNzcnPzcnKxca/xMC+\nvr6/xca/wczIzM7P3dPf/29v92dna1VMU05DSFFRQUtBQT8+PEJAP0E/QURGSUlNU1VdZ1ld\n99939+PPd9Pd3/fP38/b1dvXzsvPzNfP48vj1czZxcfIy9PAxcbKxs3Rz8jH2dXT49tf/+db\nd3dnY13rTWtRWVlDW09MTUhJQUJIS0ZJSU1ISEtKT1tPXUxfTVdXXV33Y2v33f/X2+v/39t3\nzd/X3eff1d3Z3dPv6+fv3dvZ18jHy8LIx8jHw8jFxsfNzuPf23fZ3fdr/+9fWVdVU0pRS0hP\nR0pBS0tEVUtTT1lITE5RT2NTX29nb+v32efTz9HIysvRxsjLzcvJys7Mz9XT1dfd3dnj28/d\n3e/f9+tbXVVTW0hPREtIRlFHT0xPSklJQ05GSVFPTl1RW1tfV+tvU3dv1eNr99/r19nZ0dXb\nys7VzMnKysrMzcvR09nX0+Pd1c/T0dvj593Rb+PZ6+fj5//rW2/vZ/9jZ2tjb2Nj73d3a2tr\nd2dbb3dnWWdV73dbd1FrUVlMWU9fVV1dW1n/Z/9fa19VWWtbb19V19dd4//XzG/j60fE29nJ\nVdXDVczZVdvF/93bW9tOY9dPb2dJV1FOX0RX/29rXW/v5/f3593Z0//XzufRztPnY89n5+tr\n3e9v3+Nvd1vfb2/dY2Pf3e9rW3dvWetrVWdvY13rZ2tr2Xfb4+/V791j7/fv3f/rd/fnd9nr\na+td//9Vb1dn429fZ3fra3dnd/djW1XrW/93X293Wffjd2PnVXdnd1f/a11j92ffXXf3791v\n5//n32P3a+Nj01fO/93P99fb2+fT2d3n7//d5+fr5+Pf3czZ2dPT19HN3dnX6+v/a//3Y3db\nV2ddXWtXd2drb1lRWU5bYz9IW1VXd0j/W1VvVVvbTmtOY1F3WU5XW19vV11fV19bV/9rb9vX\n69Pd29fV39HZzs7NzcrM1dfG29PM29PZ38jT68fN38hZ68lN01HRT2vnWdVX91NZZ1N3b1tv\nT2NMX1H/UVVbX2tVZ2NPVVdjWV1OWVVjT1VZWV9Zd2Nf7/dv49lrzslnv9fFv9nr38nvyt3f\nzmfOXd1d//fX4113V3dZ91f/71ljV1dXZ3drY19nV09XW19ZY1tVWW9bWWNnY29j42vj1+vj\nzMrOzGfna8JVvlfZ3+93601vd//Td29jd1FdX+/352Pr//fv7+/Z2f/j6+/v/2v/b3dVWe9f\na2NjX3dvX+N3d9vZY9XXWcdZxshT3WN31ddEyU9O7/9ZX0RZXWt3V1tPVU9bTmtdY3dba3dr\n79nf29/d5+P/a2dr62fr53ff6+vr3d33z9nR19Pb2c7bz83P593v2d932/9vY03n12dN70jv\n//9O70ffRtlX/01bZ05ZX2NJX0pOX2NVXVdTZ2Nv72P35+fr1dvZ2dPR08vR19PM49XT59//\n4+vnb+vn/+fv52/ZW+Pvb/d3a11na+9nb+dnZ+//a29rX2NZa1tZY2Nfb2f/a2/vX2v/91//\n//f/4+Pr6+/v4+fj7+vdd/9vb29rd2/3d3dX3dnvX19P49n/0WNr32dv/1nv3etvb/fr29vX\n49/d1+/v3efj92tvZ3dvb3d39/fv5+/r7//j6/9db2NRZ09nXV9ZV11rWVljb193Z2tfb2Nv\na2tnX2N3Z+vj79/r3d/Z1c/R087bzdvZ2+Pr28/d3d3v7/f/92Nra1tXXWtXWV1ZZ3dfZ29r\nY2dbW///929rb2/rd1trb29X/1ddXVnvX29j71/ra+fn/2933+9v29HT30+/zdfZ3d/Lzr/f\n0c5ra9nV1+Pj3Q==\n\n--Outermost_Trek--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.1.txt",
    "content": "* 1 FETCH (UID 1 MODSEQ (29233) XAOL.SPAM.REASON 0 XAOL-MSGID 1 XAOL-PAREN-LIST (XAOL-TOKEN-PARAM XAOL-TOKEN-VALUE) BODY[] {181614}\nReturn-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA12840> for nsb; Thu, 19 Sep 91 12:41:43 EDT\nDate: Thu, 19 Sep 91 12:41:43 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9109191641.AA12840@greenbush.bellcore.com>\nTo: abel, bianchi, braun, cameron, carmen, jfp, jxr, kraut, lamb, lowery, lynn,\n        mlittman, nancyg, sau, shoshi, slr, stornett@flash, tkl\nCc: nsb, trina@flash\nSubject: Star Trek Party!\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=Outermost_Trek\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/parallel; boundary=Where_No_One_Has_Gone_Before\n\n--Where_No_One_Has_Gone_Before\n\nYou are invited to a \n\n*** STAR TREK 25TH ANNIVERSARY PARTY ***\n\nWhen:  September 28, 1991,  4:30 PM until whenever\nWhat:  For those interested, we'll have a rerun of last year's season-ending \n\tcliffhanger, and  then we'll tune in the season opener and the 25th \n\tanniversary TV special.   Prior to that, if you bring some food \n\twe'll have a pot-luck meal, and general merriment before and after.\nWho:  You and your family, including kids of course.\nWhere:  25 Washington Avenue, Morristown.  \n\t(See Nathaniel if you need directions.)\nRSVP:  993-8586\n\nWhat follows is some Star Trek related multimedia mail, the last of which will give you a chance to RSVP on line.  \n\nLive Long and Prosper!  -- Nathaniel & Trina\n--Where_No_One_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAFmUAAAAAQAAH0AAAAABAAAAAAAAAAD////////37+/r7e/z9/f7//93b29z\n//////v37evv7+vr7+/z9/97b2NdVU9OT09RWmFr9+Pd3d3e4+vt/29la21ra2lra3vn3dzn\n9+//YVtaV1tp9/PjzsjHxsbGy87P2ef3c2dz/+vr59/Z09HR1dLR2d7n/2lXTUU+OzY1NTQ1\nOD5ETmXf2dLP1dfb3O9jYWNhX19pb+/ZzsjIzMzP43dfVU1RX2/bybu6u7q7wcjN0+1ra1VR\nY3fv7+fZzsS/v8LEztXW62FPRj03Mi8sLCwsLTVFVffLwL6+v8XFy9b/W1tdV1RVWVtr2srG\nytXj/09LRT4/SVtd2MC0r66trrG2uL3I0/dOSE5WWVxn99nGvby7vsfR4VdKRT03MCwoJSYn\nJyowPURb0cfHz9lrZ2tZRktdd+HazcrGv7iwrrC4usHR5W9VTl1pd8i7tLSztbm/xcrb91dF\nPj9DREhXb+vQv7y7uby/wsr3XUQ7My8pJiYnJiYsOEFK38G9vL7Fzc/R72f/1dXe69/v99/M\nw87v919NSUU+PUVMTme8s66urKyvsrO2vcTNb1JVWVNLTmfr2szKx8HLzs3XY0o9ODQtKCYm\nKCYoLjpHacnIx8fI1W9dU0A9RU5nZf/Zxru2rKuusrK3xM/cb1pvd2PXu7Ovr7O2vtVlS0M9\nODM2Oj1ATVfr1cq/vbu6ur7DyutSPzoxKiUjJCUkJS48T+29trSxt7zCyNNYS1FYb+/t2c/H\nvrq6x9HbW0E9PDg6QE1dxbGtqaenqayxtbnC3FFNS1NeZ//c18/SzM7Pz/ddTktAOTUvLCgl\nJScmKCw3QV3bvru2trzCyMjrT0hTe+fXy767urCsq7G4vcn3WU4/P0NJTs+6tbS1uL3Oa0Y/\nPDcxMjg+SlBb3si8urq4uru+yNnvW0c9OTApJycmIyQpLzdFY8i8uLS2urzC71b/697j2sfC\nvLivr7W9xM1bRT88ODxHSnu8rqyqqquvtsDXd1NGRERKUVphX+HTz9LV2t/3b1tNRDs2MC8p\nJSUlJSUsND1I2MC3srK1urm7xldHRUtLTF7Vyr61rKutsLa8zmdKPjpDRlHPt6+ur7K7x+FZ\nRj86NzU3Pk9cb+/Nvry9wb6/w8jV/1pFOzgzLSssKygoLTQ9SNrHvbi3uLq8xNtMTE9eZWfn\nx8G6r6yttLa9ymdGODQ1PUBHzrWtrauutLrC2VlNPj1BRE1be+/jzMLJzNPjXVtKQDo2NDEu\nKygoKignKjA4QGvIv7u4uLq8v83hY2lvc+/Ovrm2r6utr7O7yetURzs5PUdbyrevrq+zusfP\n91lEPjs5OT5FTFBd98zIzcvKy93ja1lPQzs6Mi4sLCsqKzRFT9a5s7O3ubm9vcPnY1dMS1NN\nXdfMw7y9x8rI0V1VT1M+PUdvz76vq6+vr7zCy9VZTkpKTERhc1lr0d3Sy83azs5rXU5EODMu\nKykmJSQkIygyOkTOuLWzrrG/xbu41s7I1+u9ubmyrKytrbS7uuFCOjY0ODlAc8O+tbbAyM3v\nX11LRkZERV7f69PPz9vZyszKx8DYy8vrUT83Li8pJioqKCs0Oz13u7W0srXHwsXcUVQ9PEZE\nQE/XzsC6uL28xcHhRz9HQD5axbavq6mssbC+z+PTRzI8Ojg700ZFd9dN47nDz7+47cjM7ztD\nQy4qLS0jJygqMDNP38vPu7m8vbq2vsfG19fXzsO1tLOvrbPfu77VO0xFNS9CQEXCzL+3rcvY\n4108Qz0wO0jj/93awr7VwLW83bS6wtTDWzowMzMoIyYpIyorLkJd19W6r7K/vLH/zrz3Pc3M\nP2O/zky5s9HIr+dMPkIvNkpM0LinpJ+fo6qvvU5LSzYuMjk4SdDP3sO9z8vFTzZHQi49U0Rd\nzMnN59zrbzA3PDsuLi0xKTAuKz3rxb6urqWgsbe4n6Sqt6rGLTI2Kibrs8XBq8F7MDIfJCEn\nLjtfr6ain5+foqK1w0IvHyAoIzBByc+trKepq7HGZTErHx8fHx8fHyAnMkLIr6ifn5+fn5+f\no6Cx78HhLzRTPylHMysrOiwmTEU4P7Pew7P33atJSa6nc76sr0i2rMNevbs438hIJVlQLyx3\nOCgtNCslMTwuNOPQyLKtqqerrK7GzVvTNS0uRSwmRdM3T63FrqzM377eOT1fKy5XREjJt7Oq\nsLKtqv++wUfXwUss3UYvxNg8c6zLvrLDv75eS2suNy0iLjMfJjsyPa62yq2ipsyrxUq+zT5O\n20e5PTK8yz+8sV/VZ7NFS09NMi9UTTxetFzIu96yvt+7r1ezsMXMa1tO0z05KT0rIkAuMEn3\nQLfnabRWSkfJTDo3yk9DLN+qv1/RyUbrU0lFd0W5tr3Bv7xPZ9EwLsbEPFuvvVO+q7Cup7K4\nY080HyUgHyMmP0BXraOroammta3Jv0tLOygpKT5EL+mst8q7q6zv0cu1UUFZP003LjMzXS00\nRkYq4z0wz0M4QrNFyrNIvsS3T7HG07DDsrasv7m/XbprOzFILS48KD4wRT3XO0TEUEjJy99M\n3bPQY925RbbEa3OvQzrJOsTXTOvJ+9e/68FMr21aRMbDQcdCxMy92a9OwNXzX0bYOlVR33dO\nrcDjw7V31Uc8d0w/OzxTUz4/VdDz99/Ore3G78xCPjxBNi8/Ly85OTMywT+3b83Gzu3Vx0lD\n70nIzFHIt669966wU8RMUelET0DLNWdMa01ttmfBP824Ok9JPeEw6Va/O2e8ULZS07XHU7rK\nuljVw1vXa/tfQ088STlLSmPnzGO/W7/Wx//TxDxNXm8x/85D30nP5bJMw+PNN9Y9V1bBUc8/\n7bG94cO+zmvHZ0zLRz9CQjhZSztAc0TOXjhO38FTyM1XzXNH5z1JNFMqT0RfTdeyXa/pwcXI\nY1fS/87bX9nKzGf/vuHHz/e4T8DzuUpX73vFOs/Nzcr/yOf33kC/d9tcYchP671PxNDUSsL3\nuL3VxLXF+8tMS009KjM4LS45OkTjMtBZ3Ei6wtFKb0rBb0zIxcg6u2HP10vM1O8z2M81QzbO\nR8ZYtMzPU8vPz1HKU8tFYWvM90PdVMZY607HTkbcP8c9zuVFVDrINcw/QzzzZ0q9yeu0uLnJ\nu8NXb9rV+06+Srbf80/Zx8/USctaREndOE04XGFvwsW367fR3L7ezzzeOfdEyEhfw0vBd8xD\nxmvOWlNj5+c+Uzk+ODgvQDM+NUE/WVX/yMnAx3fA/7BlvGm+Ub5Rxsq+xdW988XhVmNGVzlL\nOFpjRMLTtc68w9PMy9vT7VnY8+//593aXc3Wz8/I28vv4UHHUVlMUDxANUU9OktJa9fFy8jK\nw9zM49nKTM5Zd1lR90/cXdTdz9vX3l5jUT5VTW9P2b++vbq/wdJ3Y1dKPkBGPUM+TFlvWs/F\n083Hw9HVzu1nRUg+QTU2ODQ2MzpNTGfcw8nLw8nhx9bO3cnVyMrAxrjFwL3Cu9vC92dcQ005\nPD5BS1Prv8TVx87I1Gfe/9NOa3dvT1X3d3NvzM7vz8jI02drXVM8OTk6NDQ2MTw+UljN0MC7\nv77SynfMZ1djUWtOY3PX0+3ry9Xn3ddlWm9LW0pIR/vdyb6+usPB2tTNZUxJUERLSllXa1nv\nx9bP2cfHx8rK1/9NVkM+NzM3NzM4PFxl18fFv8DFy8nMzszfxsXHzcTBwcjEyc/b299fR0M/\nPTs/TvfUyb64usHJ1W9hU01VV1JNUE1TVG9l49PcyNHN193r729OQ0Y1NjQyMTA2NUJKY8rE\nwsfCxtnZ69Tr39nj7+/OztXdysbP5//vW0NDPT9ARf/OvrivsLK1vsPP0P9eU0peWVFUW2v/\na9nZzdXO1P93d29IPz0+NTIxMC4tNjtFSf/TvLu+ubu5vb3Nztfez9LT19jLxczb/8f3UkRJ\nQz08QEpV28u/wcS/zdNvVE1fUD9DS0hMW13zzsfCur+3u77Jzd1PSUc/ODk2NTAvNzs/PmXj\nz9bJzd7N1MzP29fMydPIxsbAvr7B0cjTy2fnSkJBQ1lRzce+t7u9xMbTd3tXTEdHSU1Tb9nb\n6c7SzcjEyc/lWWFKOzk4Ly0uLSsuMkNPVM3Dvr28vL+8u73IzcTFzNDGy83X291rX1FGPDo+\nOjo5P0Jb28C/vb3Ix9HOzNFzVE1VT1lYXWNn59jNx727vb68ydlfU0s/NDAyNS8vNkVGT2fP\nzM3JzN/v1t1nb9/KzNPOzGGryd/Lw06zzMn3XNHb3TfG12dfsfPCVVfvsllvQkfDP8c64+NB\nUb9Ew9xc0+U8OL9K2FoyLjstOi89NOsuSz22ScPOrsixY8K/+04/47/e373FzcNQuMrTa2Vd\nY0AsP0M4z7a7q666y6v3R1XhPdZLNMjHQN3Id9m349m3wTTFRMI80zE+RTNfWVwsWka6UVlG\nsk3nv8tR9zYwwq9HONTJa008Zaavus6tu1cxLS8sIjDlvNfJpqemtr61tjYrNiciIB8nPz1Y\nq6Kon6GjpajBYfcvIx8iIx8nHys7vbemrZ+rs03rMy03Vc2trK+rr9c8QDo0PeW2tc6zpKW+\nyMXOTyYkJygjKy9GwaijoJ+fpKqryS8/LB8iIh8gKT0+Pb+wraOgpK9r4UY1LjXJwKu1tNVX\nKikhHyErN0vIuMasoa6/zME6LyYuM1VDY6ynp6Ofn6WyxunfNR8fKB8fIyYp2zU5ta9GwKOf\nxdGtrsZb2rGgpK2sqrc/LSwpHx8jMTQySc64rMfBs7c6PU44M2PZyq+ioqGfp62rtd3dPScu\nKx8jLiQr2z8uY6jRO7Gfw0ZfwMJPS8WiprW1r18tICQiIR8q08x3tKiuqq3S5VsnHyIoHy89\nX66foaSjqL5ZSUQ1MSk3KyknO0w7R8GzoqlvvqilTe+3vltS466hq7SutjkjJyYfHyAtPt9d\nrau1r6y43U0sNTctNMjVZ6afq6yrvddKLC1FNjM3PS46RitnscU9rqZra6ejXVGzsr/Z072k\nrNDOyDUfHyIfHyAwyb7DtJ+rw7W7dywoKy4rL1C+r6qfoamptNNvTz8/Qi45TCchLln3PDj3\n59/E+2Oon6/rqaHDP9G6p6/KuLdVIyInJiIlSry/ya6tvLnhz1Q1Kjo/LTe5sK6mn6Kps99v\nPi0kOD4vK0cyLEQ34cG+Ta2rrFU3UKeuNe+wxjI2R7atxdjB3SkfICsiISjntsLNqKOuX8Sx\nxy4kN1xENc6qqKqmrbbHOTs3Ki93Oj7HUTk8Zy85zKpESK6t5+t7p6CqS6yoyDhPxcW+Tklh\nNh8iKiciLty7tr2vpalLSMPILC9fXE3z27+yq6motVhpYyotLixM5TQ+tOM2O+/7vDQ7vai3\nudA1XbSsVEG31zwzOruvs0/d0zghHyMnKitZq6mpt8GrsTQz7eMtM8/JtM5jwKWjrLOww08x\nMt1nND20uzUvSW05P08+zae8bbmhs8Y/PrGt3yu/r9UyV7atyTdT9zkfISs0KTTBqrG/taev\nRjvrxz0wX8LOb//BuK2ssrXYQTA0LixQ1c7JW+9CNSw7SzswP0Jcy6Owtq6zyz0rWa/nLT26\nezwzS7GtzTFBUCkfJDFHRMKtn6evra/HPzE1NisuRqzXPGOyrq+2wrS4vtfDSDxNX0tGMi84\nTj4wOrq30dqmp846wKqtRCc4vksvWq3JL0U3OTkuObGvTzbVUzYlL2vEvbSfn6Sps7zAVywn\nMjw6P0jbwUw7x6/M22dDX0gpKD85Nzw/TmlMOUiyxeO/qqbDWdW5zEzrrVsvNUUzva+v6TpR\nMjQ6Q9exvP84MCwpKTN3uqyfn5+fn6KtvD0pKSsfHy42L0e+xrymuP9P8zgwQELv09c1Lyk5\nNS04tqaosbGvrcw9Pau0TCy+v+tALzTcwikqa8YqKTBNQj1Dt5+qurmzYy8oL9O6wa2fn6Os\nr7bPLyAqLiIgLC0yTT1DvbHL1VlXXVUyNs/GRlG9urvD47iuwsqvqq+80ruqXzT3wzw5Pv/H\nP1tfOSkxQDJBt7nVQEA4W09Uu6irzcvfbzAtQ72/uqafpqyzvVEuIB8fHx8gJCo3QLympbmr\nornLytvK1jo/+/83b763wK2oqa7L78/RRT0/dz4xLTg5N0BZSFH/T2d3b9RLzcbbd2/bSUnr\n/1V7wcHEyr22sLm2trC4vcZ3Ri4pLjMrKjdDOz5Nb9B3Qz1ZUUI4TsvK1bmmpaqqpKesr7W1\ntM1f71UvNT89NTc3Ny8uNkU7NDg1LzE3Pmm/ta+yuLGuvr+4vMXMVUnZzVFjylZFQzk1OTQr\nMDk4P93Pv73Bxs7zSlVv693EwMbCwr+9u8zR01tJPkNQ28vCu8Lfd15JPT5Oz8nfzr24ymdr\nzk8/Pk5PUT5D2dNBP2fX3evPvrrRSklXRTlB/148SnfF0e/jy8pXUt3aZ+O+w1ta52nn72Fv\nyc/3/8jB2/fGvcrvZ01GPzs4Oj88Slr/WGvOz9nEvsPlW2tINjU/U17Z083Jz93v3efrzsft\nd2tIOj1EU2HZx7u1vMDAurzC2tO/y0lBTkQzLC82SURNz7u4vr+7t73BvbzEzs3O0dLzW/tb\nSEpNSUxVZevrTz9KPTI6OTc8R1FOTkxTXV9VXffr187SycXNycnt2cnL0bmzubO3vr/DXD86\nOzs7PkZEODU0OD5PZ8i6u7q6vt/dysjvadnHyv9U08zZa8jEUWM3PD0uLDU+S0ZMVFdES2HL\ntbKzs7Czs7W9z9/Z1mNGS2vf/2Np2Ug5NDw7NDc8Zelnb9fLzM6+vLm9wr7Ed0lN4/9GQkJB\nOzk8RlNNYcbHzMvbWe3W68zEy83MbU1KTz5CTU9AQz9ASVFTY9zT1c/DvLm6v7vAz8vL1Wvp\n7//ryNZ3/+lVUVlbb+fd287L2V/e1eNzX0pKRjk0Okhb5c/KytnV3OPzX1ljZ1NGQUNZ59vB\ns7W8wMr3b3dfT05MXVtfY8a8xNPRzuNIOjg7PTk4RfdzW3fb3dbS07+8v7+8v8PEzN/n81VG\nPTMxNDU1OD5AREtFSFv/3M7CxMXI0tXJxMfKuLi7xOvnztfXzdRPP2NfN3f318jYyMbrU0xV\n5/Nf1cC+yMvf6917e+fba09VTUlEP0FVV0hBPzw+PkNES1Nr7czZ39nIwL68vMnJ7Xfv+1v3\n08vT2uv7/11PTldJPTw7Okbr2My/wMjN2VdaWktFWe9hXevjy8G+vru3xM/VaVNXSj9MV05M\n91FJSlJX99ZvbWFP89X3V83K0W9zSE1NUf/Bws3LydTjyr3IyMj7UfdPUW/U78i+yuFvT0z/\na1FOXFVcT0A9R1dQW+/z2+drd8rB09TK2U1LPTQ1NjVHW1tSysXS78bIw7q+0v9PR01PU9/J\nxMnD309Y3/db691VR0U/SFvj0cDCy9vtNELKL9xWPcRD1dNZvNdrubjf0dfp18nPzNPY/1BI\nPTg6MT7CPGPIxL5HRePFxtvjSt9KP2FZe83Jv9fj7U5PXlHl2XfvY1ZPS1nTyMC+2GV3Xmvd\n98Y3vrA9PD88uuPRr3vLzEh33l/n3cXDylFPMzE6LjY9TENVa/fny8G9tLfC1N1zOlc+Y9Pa\nuMPNx3Pj42Pr3lNXRj53Szaz6zi+P7m6NsRBQbc+XctXVkvczLfFusXd1VxGymHLZ9Xrad4z\nOj00TCphxy5S1y/PRFm/39bLZ0jZY9+9U7nP1k+/OEPFN8HNSc33Mki/P89N2rnTx99Kx1Xr\nOs1fyUk6uz1by0mzc/fE9zx33Efc58Tzx0nlwTjKWzpX0MM199lHW7DptOe/30vPd1ZExtTV\nucA7uz/JwN9lutVDSEtDU9/SU7tBzdRAvE//1z7GRllMO88+uU1ruW+zwUvrb0zEQ8ZLS05W\nPD08R91Gb0ha11XRRcJrb7TXVrpLQ8df17xnylPvvUXKukmxPlS7Ob9KQ7hD3NnIwTjA1Vuy\nSe++81Tbb0Ln31nhzcfUvEbGPM7Pu1S+tjy4Pjm3O8zIUzbE5yzDTVO9vTu1uz62UD27VU+9\nZ3fMzjm+bze+Osq+RDW+7z68OWG8XF9I2zjRNvdc2U1E2Tu+dz64W+W3UVHKvjXF50S/2TDL\nNzfPVTu7SEfITvPn0E292UvKXbhB29W8zle067/3R1awRb/Jzu9t3DhP1zXAW8rYrtA8x7tL\nRq9Xd+9ETdlXQkXAPbzZRNpZv03Ax8tLZzrjey5Ga8Ezw1s30/suz7bdSk7bWN9TPbtMVdFl\n2TP/TsvFPLtZQ84z1Ek42s7nSbl7V8V7V8NvxVE/1VxRc2drwW9B2rNKT8y9ytXRw8FUQsTR\nPURbVjrJPj5GXLFzTrW4zTvMvlLr90S7e0hDtU1GssnVukfY50s843dEONFTzOfMt2td6dHl\nPzTjPys8Z0BMXdm2ulm5u+/nuMdO3N1PNkhVLlVELzJNWzHZxeO5uv9Z1ckyMlHtuzfWpbNd\n16++RjFR0TUrPbzvLNuyVDSworJCr6a6RSlCsc0mMb3NMy3Nrq/DrKKnwWnntDYqQ0g4LTy2\nvse5srbeZT03LCcrMy4yPMO5t6ymoaWvsMZWQi8lJS4qLC03S764/7mpvDzrvy1ES7rWRUA/\nrkM0zavDSa6828XBPjE9QzD/bS7jt2/zzz1nuk4rQctBvUMxsq8+K/fKNSguurbPOUarrktG\nrKGpvby0rN83Q984JSUuT8LHT66frdwww709JUzSUCsu662xSu+soMMrQK/BLCvvs7Q+L1u+\nySoqwbIyMMdKSHdKy7CqX8Ct1d3tyMDNxkwxRTAqLO/dOzZdVUgvM1fRw907z7DBMjrPrLZ3\n26up1FHMvus4OExLMi1E49vnwbOusWHMsbBLNsm2Nf9ZLza8MSjfrDouxq3KY+k7Qcc+LNOv\n38quvju7p61rLTq8qUclOLRnJyzXpK4zK8qtQSc3q7dKLVa4tFkqPbyqazzn685ZOzXDuj0q\nOU0+LkG9r7U6OLGkySkv6aOvMi65o7s8JWmosDMsuKvZKTTDqtErKVOs0yw1rrMvLduotNgy\nWKu2LSnAq9U2xbmxxTAytK82N7VrSrz3LsusVjWyyzHerzguxP8oMbG+NkW03TxHWEy3tz06\nualON83eNkbAQ/Opu109PDU8S93fwL2/Uyouv0Ex26WrTURAPM29OTGzrkUtyaq+ODk7ratR\nK0yyOSY76biw1SdErdEuSv9YrK5ML82nYzNH2XfB1TTzralBM2e090EsUautPzHXres2LVOz\nsb+7V1e6QicnOGW7q9XjrsApKsvTRW9lyqzLJzi+vT8xN8SnxjQvx9dFNEXNwO/rvttTS0Y2\nPK+2PE/APWWyNzO+sTtcvddvvkMxX8//QUq00tjEucVNLylQwrxOMryo/0W/u+fRby1Lrbkt\nU7zN2zw4uqe0Xc7HSigu3aas3F33z1k2K1+qqMo2O0P7bzUyR7S4v9NDTMi/4+OzxEztZ0Zf\nWzE6uPM0OfutrcwoLbiq2TnTzsQvKDi02TvfwSopy62qwSgiVapWLDG3oao/Jy1Ctq3NRV62\n1WVLPz13rr1HSFlD0cBMN1nX18tGOcymwk/LsbpHMig2wbLWW8Oup9EsLOmvv0UvwK7KLTLN\nsK3IOEXHxzwpK+2svG82c7SuVjlWZ29lzlEtSbrKP8O5QS5vw0/Jsj9IvqzdLiEoxKm0NCw1\nO9y+R1OrqNs2JS/BsbTvWee/w005O0e7rLhISbi8Py0+58vGa1PQyc7XU0BJa//Hs7nd/9XO\nzWtCPkvbx8JnQsSzx03nvcXvYUo3M0xb69H398e6y0Q/W9O5v1hC0Md3REY/X8nhXFFbX+ta\nTsW6vcfGb07XzUxE5+9PRT4/Ozc228BnPUA5U8hfR2W/zFVRP0fIvszvtsT7W+lb48LB3s7B\nRjIvUOtPW9VSO0FvVVzRxe/X0/dG97zLyLjDy72270Y/S1bnymVF/7vC3drJzffdZTQuOV1z\n41tAU7e7Z+HDe8u360dOe0k/Ni9Ou8/rXz1G2cXXw7/OwsRdRFF3vMo8NlVvV048Kk7BVztJ\nRDvdwVNPycztz8PKv722sLi+02FCSffRWEM5QVdGPmfUX088OkvnvP89PcS9zsa72NPByGO8\ntr3tX1tV61h33VvfTzw+WktJzspJPVNYVV1vybu9yHfv/1Rdzru7vca/YTxnzsfezM5jd1dv\nXWPX619j+0NLVDw+TUs/Sz82Nu/rXdLZY07r1OdXTlvbwcPfXFdU68jD1dTW1/vfa09Vz9dR\nRv9WQDdNzrWsvlJO08zR1crEvLvETjk7S93N41tnSjw5RWfMxVw9U/PjXf/v5d3n0dF7d+vL\nwL/FTUvXymvvUE//u8FDOTxFUffvTU5hb2VRW/9d+9nGysr3R0nKxMDMVV1Y51Vj6+lMRkZd\n829nSU/Kw2dET1Hc3crQ3e33/0pKXPfvysLJ2V0+PDxP0c7ad1dIRWPT08q/u793P0ZKYcDD\nY1vnX0BHTs64uMtj3s27uLu4ucPN70NCSFN370tPTEBBOj1Zys/nTU9XTUZpv77H70lHZ/vO\n11/vx7/N90xGPEbjy8heQz5EQU1NSWvVY0c7RVPnwsjJy87nXXfDtri6yGdJa+9Tae3r5cnT\nTTk8TNnAw15FW95HUdm/ytRdSV/nT0Rr1c9lPzgyP1H3wbm5ub3DzdTdw8fvVz05Oz09Rk5b\n/29rb1rvyr+3s7i+0Vk/PUzMv9FdTEpLU/PLxcHHyvddSEVWe3dTSkpJRDo/78G/xdNrZVdB\nTNfnY01FRT04Nj/NvL/O4+tvUlnXxru/yVtFPkJt59HFy9/pa1Nvyrq4vcTra1FNWuvNzMvd\na15PX9LJz8vr/2dPRU9r3tvdb0U8PD9Y187Wd1FNSkpV183Cv7zFaU5c993QXUA7NzY2P1/d\n4d3ra29ZV823try/w8fj49fLxsvnTkA9PVHfysfJ111NPzxDX29fU0xJSlRjzsK8ycrjUUZV\nXWve2eNTRkRGTd7JysnMYUpGRlnRx8nVd11KSUVLb8nAwczT5djCvri7vs7Zd0dEZ+PR019R\nTVFNXtfHzNXn/2NMR0JU993pTEE+Q1Pn92NNT09XTlP/ycPP3F9tR0VJZ9nZ1+NJQUVVXc/F\nzVtISUlh68nCwLy/xdPd48y8x9hvU0dEQ0h3zMrU3/9jTlD3ycrnTkVAQ0RI5cbBxc5lRkRc\ny7/AyntNQD5CVtXIy9P7Xlv/49/EvsvaTT48QUdZZWNZc2NVe8a5tLW+ydNdSEdLb9jvYVxf\nWV9ryr27v8d3SURDTf/zW0tDPD9CTWnPz+Prd0xIS0//09leV0ZAQEvvyMrX3t9v7+fp0cnf\nX1lGQExrzL68wMbFy9Lb08G8xe9OQ0JGV//XzfNNTEVET2PZytfvX1dPU2fevri802tZSk5N\nTuvj/1xIRUZZa93Jz+9ZSUlOX+/PzOdPRkE/Rk1f0tHb4e//59XEuLe8y+lZSkZJc8/P+09T\nVV37387ExM/hWUlGS1zv4e1bT0xHSU1l499dTUhGVXfXxcDE3Onna/fj2NPX41lTTUtUZ+Xh\n33tjX1133tHFvL/EyczIx8nN095zWVZPTlVfc/NjTkhJSkhNUld3d19dXXPp08nAwc/j82FR\nTExNWWNZU1NQV2Vt99v3V1RZXWd38+vvY1FQT0tTa/fa3+/p1dfLx8PAwMfZ/11aZXf73d/z\n5/NrX2Nfa9vZ921jVFlfaefd52ttb19WTk9TV01MU1Bfd+vTx8jNztXz493l39XfY2lfU0lC\nSE5dZ11n7efn3M+/vb6/ws7/Z1dv721TWU5MTlFSWf979+9tU1FOW//nb/Pj7fP3/+/f5WNf\nT0FESE1X7+fj2/dfWFVb3dXb1dt3aWNhb+/pd3NhWWFjd8/DxsfGyM7R0c/K0eP7b1RNTVzj\nyszn4953YV1d99X3a2taT1FWZ9jQ2+t3a05HSkxf93dfWVNUXWPdz+Xv/15bV1Nj2dLd+2tX\nUEtQZ9HS2c7W397Wy7+7wMjVb1VPT1Xz4/drW05LTVRt0+ldV1JHREZT39HT1917Y19v49nf\nY1RTSkZKV+HFyc/T71tRUWfRzdfva1RNSU7/3dxnXF5fVl3fxr29wcXM193f18zO52NVTEtL\nXuPM2P93XktFSFPr22tbV1BTUWXVys7vWkxJQT9IY+PpZ2dnY1tn3cvK429ZVVNRV93N0mta\nW1lPTunMwsfN0dXX3s/EvsPO3GNWTEtZ18/Xb2FbUU5P5c/L3W9fUk1JUN3Iyc7nb19YUV7b\n3/tZTktLSlfPw7/L2/djVU9b18zT61hJRkNFXNPV7WdYUFFd38W7u8LO2+tjc9nDx9l3WkxJ\nSU3pzNN3U0dDP0NV69brXlVOTlNf0cPK1ltMRD9AS+3X3W9jU01LXNPJy9n/XlFMTV3azNbj\nY1VKR1bVwL7AxszX5evQwb7I1/tlTk1f28zM329VS0ZFV9fMzttzVUtFVd7Mxcvd711JRE5n\n9/9WTEU+PEFrz8nM1/NjTk7ry8XFzm9rTD9HWefa2+9eUUlL98e+vsTXbVVNVtXDv8LXd1dL\nSmHn09V3VUc+PUV30c3R5V1dUE/dxsPGzV9TRD5G99rT1d1vVUtMXNnIy873Z0pGTnfX0dj3\nV01ESe/Lv7y+x87X79fMxsPK12dTSUz/0snK2FtLRT5Eb+Pb33ddTUZKX9TFxMbdWkhDSVtj\nZ29UST49Qlfr1c7R+15NT+fbycXG0OtOQ0hf697X22NORkvjz8rHx9VvU0dY59XNytLfZ1Zb\n383NzM53UEJATO/W083db1lKVdHKxsfOWUs9PEln3NnT22NJQkZz09XV13tOQj9O39TT2P9b\nST1Ia8vGw8XM3W/v0cK9wcbdXklHUtvMy9HhV0g+O0lc6+//XUxBQUrvycTJy9VtTlNp2dnn\nZ0xDPTtD+9bLzd1vU0hQ98bCxcnha09LVdrLyM3nXU5DS9/Iw8LJ62tMSFvhysbH1/9bTVLX\nxcHCyfddTkdX1c7Ky+1fSUVLb87GydNvSTs6PlNz5+tzU0M/RHvOy8vNe1RCQVXj1M/W6VND\nQErvysG+wtJrU1nVxL++xutPRD5K28zIyedYQTw/TfPVztVdRjw+TOvOycbYZ0xLVdjIx8zb\nVUc8PUxv0MnO22NLRkrrysTFzW1LQURd0MnJzON3TUZZ08S/wMrZV0ZHVd7NycznWk5JWM/E\nwcTWa1FGR2nbz87X/09DQ0vny8bK1V9IPjtGZ+/t61ZGQT5E+9TIytHvWktJT9nJycrnWUpH\nRm3Iw8HF229bVmvKwL/H3WNMREdazcPCxdRnT0hJ/87LzeNVS0JEWdvJxcrnY09OXd/GydX/\nTUE/P0rjzMvaa1FMRk3jx7/E1ftRSUNFc8vL0ndSS0xP98O7vcrfZVVLV9PGyONhU0tITV/M\nv8znV0tFRU73zczfZ1VNSlfvw7zC2W9bSkNCSf/dXE5JREFCS+fHyeddVU5NU/PNv813Z1hP\nVV3jwbzJ1d/v//ffw7zA221XS0dKYdfAzOfnd1lSVePHx91fU0dCQE3byc7/d19XVFfjzch7\nTElDQkdMa8vP92tnVlRb5cS+ym9bVEpHSFfdzHtRUUxLTl3PwsfZ6/dnX2PlysPVa11cV1t3\n28XE3HtnVlFTXuvW5VtTU1hl68y/vcXf721OSUpRaW9RS0hISUxf3c7Q91pbWVxj3c/Jz/9v\nd2/z1czEv8zZ4+Hv49fMycnXX1dRTk9YZd3cZ11dVVll69bP31xRSkhMWm/TzeN773d773N7\n615FQkNESlBd4czV7+vt7+Pf1c3Pa1FOTEtMTlfnbU9NWGfz59nJw83f5+Pe3ePZy8jf8+fr\n5d/f08rX/19fV1dPT2n3Z1FXc/fv7dPIzOdlYVVPTUta92FRTlZdW1VZ7+F3XG//d19d99va\nb2/p3ePr3cvEy9LPz9XvZ2/d41dOVVVPSlRp2913d+//Y15r599fV1thWU9f18rM3dbR32NT\nVlpvVUlKTEtITGPUz9vp3ed3XXPbz9n/e29jUU9d89fj79/n/23318bDytfR6W9de9PKytXU\n1ON3Z3fYz+dvZ1BIQkNNXWdbd+t7e//by8fN42lXSkJDS23vc21vY1tPVu/Y3O9vWU1LTmPd\n0+X3/21rW//Xw7/JzdPjXVVr2djhd15RUUpJd9zT3f9rXldQb93S3fNzW1lPU+XKxMbN4WtV\nSUpdaWtYSkdGQUhezMfN0+13X1hr0MnO2G9WVU9Md8rFydPr3fdd6czBydn/V1FJSVvOxsnW\n92VYTVTZzM3bYUxLQkJW6c/U43dhW1NZ2cnL12lNR0I/TOfT0uddVk5FRV/Z0dxjVUxEQkrn\nz9PnY1lVVmPIuLW6v8vZXU5d3czK2OtnWExLd8nEydn/W0pHTPPPzuVfV05ETN3JwMPS32dI\nPkJc39rhb1VMQkVvzcjI2m9fSkBP28zIzuttV0NFWdPExcrZ51dR98jBxM97T0U9QGXayMfV\n62dGQ03bycbR71dHPkBc0cjJ0etfTkhd1MvJ21FJPTg+TO/Pzt1hTj8+TenNzdJrVEVASuvK\nxMXQ72tQT9nDubm9w89jTlXdy8jI0/dVSEdrzsfGyutZS0NId+HT0u9XST5DT9/Kw8TU/0lC\nRln/3dx3VExCQ2fby8vS81lDPkpd59nV71RGP0Jj18nGyNXpYVfdwr6+wdhtSD9GX9zNyMnf\nW0M/T9/QysnXZ0tFSfPOx8XD1u1RS2PXzMzN2FlDOTpIb93W0XdORD5K+9PPzd9dSz9I79HJ\nxsrYY0pLd8a8vL3D2FdGTevZ19Xcb1dGRHfPwcPF2PtKQkln0M7P22dJPj9Y1czM0/9TQjs/\nWPvj3/9fTD9KZ9HLzNF7Uz48RG/b3N93VEQ9QGfSysbL191dW8+/urvAy+lMP0Nn08vKz+Nc\nS0NW1cvLzfdVSD9J48zEwMjT51NSb8vGyc3/Tj89QV7Xzs7ZX04+PUlr6+f3V0s+PERb08nF\nzetVSkvnw7y7vMjfWktd2c7O1+1fSD5AVc+/wcLPd0pIT93MzM3bX0Q+P1PXzMvPa1A9OTxI\nZ+/l+1lKRkzrxr+/wdddR0VL683Nz+NWRz5Fd9PFwcfP/09OX8a7vb/J50tBRm/NyMfN62NI\nQU/TysrM32dMQENP1cfGxdHpW1NZ28bEx9VZSz87R1zf2NfdVEM9PUdr5+9vSz86OT9j2dLM\n2HdfVmPLvrm5vMHPa1lnz8vR1XtMRT8+T9XJyc/vWVNMV9jLyc3b/1RKTVvRx8rP71VDPjxK\n/+Pf71lQSkxf1cK/yuN3VElNX9PJzNlhSkRCSO3Iw8nX92ldZ9PDvcHU61FGQENdz8nN32VT\nTU1fzsHE1mtRS0ZM783Gy9z3Y1ZRW9fFy99TR0JARFXVy9NrT0dBP0Zf3+VdS0VBP0RN1sXS\n6WdeZ2fZv7S0vMTL0+v/28vCz19OTElNU//Iwdp7W1JOUVnjysxvWlNTWGPdybzF43daTEVD\nTtnO71pfVFRXY87Axf9WT0pNTF/bxt9XTklHRkhdzszna2938/fQvLnG52dTTExMb8jG529r\nX2Nbb8rC129SSkZHSvfGxNh3Y11jXmvdyeNMRD9BRUdezszvZ1NNTk5P88zVa05LSkpNa93K\n0/tpb//r3cW5ub3Fys/V3tnOzN9ZS0lJTVX308vjY11dXF9r49Hhd1VVVV/73czExuFfWUxJ\nSExf/29XU1Fca2/h0+VjTEtLTlRb8+fvWU5PU1tp7dHKz9vb18/MycbGx9xfUU9TU1nz2+dh\nXV1hb+/hzs3rZ1dXY2//48nI13fv49vj7+vjX0tGSE1bXGHn2f9fYWf/92/t0dNpTlFUXVpb\nd9vvXF7/3NXZzMDAxs7V19Xbb+/Z41dRXGtvXV/r3P9bXWd7X1FY/3deUVr/3Xdr2M3VaV1V\nUUlDSF/va1tdZ/djX/PX52tVYWdfTExdb1tOU1dfW2fjyMLHyMbBw8rOy8bO811dXU5IS237\nY1ldZ15XXf/Mzt3r7d/rd2vRxsza39fa/11d9/tVSktOTkdHT//ta2dv/11VUf/j71hTUk9L\nTmPj29/Z1NPW19HGwcTK0d7vXVJb8+tvaXdnWlNb693d7/P3d1pMTmX3ZVxdYV1RVuPNzdnh\nb19NSVL/3djd5ef/Xl1v2tHd6/9bS0VETWl7Z15fV05V7c6+vb29wMfP09PIyNnpZ1FGSVPv\n3N3j/1VMSU5n6dXa529dUVVf28jFys7XbVpVXvf3c11ORkJAR1lz2+Pra1RNTVbf1Nnj/1dL\nR0x3187P09jfd/PRxr++xdl3UkdFTnfd3+d3XVBPX9nMzNHfd1xMS1dv5d93Y11VTVHhy8nL\n3WtPQUBK/87N0ePzaVVY69HM1e9hTkA8PU138/tnV0tHTHfJv728v8PL09LIwb/J52VMPz9H\nc9PW3WtQREJFX+PZ22tTTklDVeXCv8DGz99bU2vY1d9zT0Y/PURX39jfc1dNRUNSe9PV72NV\nSEhO787Ex9Hjd2lv1cK8u73O91tOTmvjztd3Y1hOV3fOxcPI1ndUUVt729feY1FOTFjr0cTC\n02NRQTxDTF3p63daT0tP98/Hx9BrTUQ9RFVv3Nl7W01FTv/SxL+/ytXr3s/Hv77E2l1HQ0ZY\n/9/bb1RKP0Jb/97b42lOQkBFZ9fJxMXO32tz18vKz95fRj89TP/f0s/f+09ER1f34+fzVUc8\nOkJj2M/N1N3/W2/Lvbu7vcnR/2P/1crHzNp3TURKa9PLzM/nX0tGUe3Uzt5fXUhATG3Ry87r\nX0o8O0NU9+97WVpJSFrRw8DDz29XQ0FRZ+Pnb1lMRUBH38jAw8jT32Nj28fBwsnrU0g/SHPc\nzM/nZ1JFRlPdzsvN32NOSkzny8fFydPna13jzcrN2l9TRT5KX9XOzttfTUREV+3V1elTRz87\nP1n/2NXh92dZa8q+ubm7wtpjVFzbzMnK129QSUdn28/N011PQUFMY9/X3PNZSUFDZ83Gys9z\nTUA+Rl/f2dxfT0dBTO/Xy8vZbU1AQEr3z83VZ05BP0nvysK+w87pZW/Rwr6/x+lfR0BJXdnM\nzdpfT0ZHZ87Gx8rlXU1JT9nKwsLK3W1OTW/b0Nn/WUo+PkNpzsjIzntPRURO69nd91FJPzxD\nUOfc4/9bTklTd8S7urvC12tZXePIxMreW05HSFrpy8fL1WNLRUZb4dHX71dNSUlWzsLAxddX\nSkNBW9zL0N/3WU1KTefIyM3rTkQ/PEjfz83XZ1RLR03rwr2+wszl/+3Zwry8w91RSkRCVdnO\nzdlbS0VGTvfGwMnWY0tGRU7XxL/G129cVVFrzcvcX0dCPj9IZ83I1OlXSERET+PO1mNNRUNC\nR2vWytpdT0pGSWfRwL7L1mdjX13nw73D2WtTU1NfzsK/z+9rVE1OUu/N0fdUTkpLUe/Ev8bd\nXUlFREvvzcfa/2dUTlhrzsLM51pKQ0FBTt3M1mdaU0tPXdG/usTO1efr3dTEvMffW0xHSEhV\n0857T0dCQUZP/8XE3nNXT1Vde8a8xM3Zd2FdVXfPzmFNRkJESlH3ys9nWUxJS01e1c/lV01H\nR09Z3cjM72NbWmP/1cW7v8/b7213b97Ew8zrbV9j7+PNxsfab2teW1he39HnV1FLTldb78/T\n6VNKRkhMWeXOyd9rY15nc+vTzuNnVk1NTk9d5+NbTE1KTlb/z8fI1dvd2c3PzsfK91lTTU5R\nW//Z1XNOSklLVmf309tjWVtn79nOxL/Iz9//b2tXW+vnV0pLTlFcY2vh61hPSExjX2Xn195b\nU1Vj9//v19PrZ3Pz1czLxb6+zd/3/+//a+vW2nddZ2/j92/r1fdbV11jXFNV9+tlWVtv7/9h\nb+9vTUlLU2Nj79nL0vd3d+97ZWfn5/9YVVpbUUlPX1xJSVNbXFt328bGzMvGxM3a39ndZ1hb\nbe/3d+PT1GtjaW9zY2/n1etdY//n83vnzsvZ5f9vYU5JVf/3Y3vv429bWXvf/2VjbWdXUFvp\n329pd/tvV1n/29vv7eHR3ePfy8jP2+f/WUxHVe3d7/fj2+9dWW3b3e//e19PSU1z3ePn3en3\nd1xj6/9bUlVPTk1Qa9vc6//vY1dQUXvZ3+vrY09NSVF36+/7d2dlWW/ax8LDw8TJ2/P31tHV\n3v9va1lSa9vP3elnW09IUF7f5+vvb19QTlvcx8fN2fdjSkVMXeXj3ud3XVVP/9HT2edeTkhH\nS2nf63NZUExDRlnn09HV2+/7d+fHvcDGz/9RR0ln2M7O1+tvVElN59fU1913VUlFT93Ny83Z\n82tXWe/R0O9fT0pCP0ph18/T2ftjTUxX18vP1f9hS0dM787Jy9Pn/1ZV886/v8PK0PdXVvfQ\nzt1tU05HQU3nzcvV72NVSEz/2s7Z/19URkVO28fExs7nVkc/S2/r4/dtaU9LV9/Ix83j91lD\nQUpr+2dXTEc/PUFl1c3V6/9vV1nbxLm5vsbTX0xP3svHydlzXUlFT9zMzNZ3W05AQlnjz87Y\n5f9aVWfOxsnQY0o/OzxN3s3K0O//UUdX183HzO9jSz9EVenMzNT3YUxLZc7Cv8PR53dWWdrO\nydFnU0g+QE//0snP42dTSEzlzMjJ02lPRUBL4c7LzudrTUFFTF3v5+tfV0xNb83Bvr/K3ldJ\nS1v/7/9tT0pAPUtl2c/N1ftbUVrTwry7vcnhY05l2c7IxtZ3V0hN79fNz9dvU0FASXfc2dnl\nb11ST9vEwcXK81hBOj5O59XV3W9SREdX3dvb42FNPz1Ea9fV0tl7W0xT18nCwcXM315VY9TK\ny9P/U0Q/QVXr2dned11RTV/b0c/Z72lVS05r1szO0edlTEdOd97d72FTTUhM38W/w8nW51VN\nZ9PJy9xvTUA6O0/v19ffX1dLRl/Hv7u+ydPvU1Nz0cfIz9zvVkpZ1cfL03dUSD5BY9zRz+1b\nV0lGV+HIx87rUkU7PEr709PeY1RJR07jzs3XY0xGP0Fc5c/R32NUSEpay767vMbN5W9j2sfD\nx9dXSD89RHvVytD3XU1CRVLVx8nN71tKRk3Xv7u9xtxzSkdX387R52dPRkNN/8rBwsrvVUhF\nU9jJx9D/S0M8PFHv1d1vWE1FRlHNvr7B0XtTTlHjyMTG1G9XUk3vxMDF0WFORD9DV9vKzdxf\nTUdFV87Gxs9fRT47O1DhzM3XaVlNS1nbxcXP41VJQ0JXz8TH02VKR0VL28S8vcXN3fdt98y/\nwtdvS0M+P0/Xys3fV0pHRk3ey8XP719RTVNzw7q6vs13U0pFUt/X71NIQENEU9DDwtNvUUhC\nRk7TyNHvU0A9PT5SzsjO91ZPTlr3zbq3wM5nT0pMWM7Cx99jTk9OU9m/vsxvUUxGRk3/x8Pb\nd1VPTlf/x73B900/PT1AWMa9x+dpYVtb986+vdllTklJS1rPwMV3TURDSFHpyrvC2etnX2dv\n18DB6VlLRkdMX87Dy2dQS0xOVdzHweFRTUtRWWnMvL/R+1VOTUhL79z3SkVCRk1X3cfA111O\nS09SUufJ1WdMREZITWfHwMrrb2dn++PPvbzPd1lPT1NZ2cfRd1VLTE9Vb8i/zm9fXF9rd9nA\nwNLp/2X39+XJwMlfSEA/QkNR183hW1FPWWN33cbD3GVLSE1NWt3N019OS0xca9bIv8v/Z15n\nY//fzNVvU01PV1/pzsnQb1JRV2Fv0szMe05JSEtVX9/MytdfV1ddVV3/3eVZVFlb8+PQy8XR\nb11bY3f/59/nZ0pER0xZbd3Oy93r79vRzsvGw833Z11bb3P/2dfnWlNbY2t33c/X92Fjb/vr\n79jK1+tr99vX4evX611HQ0NDRUlXb2VPTlNf+//vzsjcb2Nnd29p99TW91dfb+n/d9PK029c\nYXdzV1V361pPU2Xn523dzdNrWmv33f/r287tVVVl7+1z/8/L3Ptvc3dVSlPv811c/9/a/+3W\nydT3Z+fdc1lTd/9dSkpPVE1KWefa7+XTy8vZ1srAyd/j63dSSk5v4/9cZ21fSUhd59737eXb\ne1NV68zR2tPQz/Npa9/3VUpHSEY/Q1vv+2Nrb/dhUVPdzdbb293vX1j/0tDb3+Pta1VR3cnI\n0dXZ61JHSGHrd29v82tdW+PJyM3R1dv/WWHpz9nj4/NvXFlf1MnZ5+ttTkVASmn/a+/j72db\nWe/LzNvb3/dcUVPn2ev/Z1NKQkFV3tnf1dvd93fWx7/Hz9f/TkA/TO/b3+N3YVBHTf/n3+f3\nZVFGSFXTyMbGydb/XF3d0+t3XU5APT1M69PY3ftvU0ZLY9XO0NXrX01MWNXJys/db1NMTenC\nvb2/x85rT1Fv3t9nWE1GP0BS08PDy9j/XUxN+9XN3mddVEdJ98zExtLnWUQ8PEv/3+n3bVtR\nTV/MwcHJ33dbS0xe2czP22lTRDs+X9na3GtdU1Fb18G9wM73Y0o9QlPb0M3X+3dSUnfQxsTP\n61pMSEf3y8jFzc7T82/by8PL42NLPzo6TO3My/NVTEdGW8/H1e9lX1dKTdnNyMXd3+1MTFvZ\nv7m7w91jXlvf2dXea05HPj5Lb9rMzdDvTTo6Tffb3f9PRENFZ83CvcHL419OVGdr5WtdW01G\nRErdx8TE229JQ0z3z8vI1mtLQ0BN79nU0WtOQ0NZ2crAwL/I3VFHTWvXy8vR51tMXdvJxMnZ\nY05MW2vT0N/O0vdcSEbau8XI1UxOQjhET0tXYUlb7UdabdvDwsbdVzxPY8e/bVnjZUtVPT3N\nyr21z9drX2/OzdvJz+9bODc9UePOzVvT1udrRC4qLkqyrK++1uNMZ1tJW0vav6u0t71F3VdC\nPzU1OVJrzsZjX+fKurnM39nj42VGZ2NBY0xOSURANLSlo6VPKh8nSq+fn6Gq50YtJCQrLz69\nu7S998+9v797Ni4xKzpvXbWwrq3H32NI1r/D1vdnP0g9KDlCM/tAMTUvOb+vublGOfdOv6+r\nqbC+SkUuLT9OvLzd1UZPzysuTbypt0ElHyy/p6Gfrba+OicfISnPtbOvvbm3sLe8xTkzKiIl\nKCtFva6qqK+tuGPN28O8yE9jOzlrSfPbR0A4NTp716+tt79vV9rPx7i/0c8yKyslLjUpO6ys\nqLkpHyYwtKu+q662sckvPWNXt9nnx8C1qKq0tV09MyMfHyQvO1NFT8zMvbKxr7DId0E0Li43\nSu/XzdLr1c7Fua+vr7zbzse5ra6uq7HLOTAlKjM0Ql1va+M6KjFbycTeOkL397ywuba3vLvK\nUUppy7W62Uk4MzpP78XI5VM4LCYmLT9Ye//hy8fHyMS+vcnbb1Bf18q3tbzH61FVSkNZ59r7\nST49PUNj0cC+ztPVXkxHQWPN09tpRkVPd8q5vO1dT01RPjpV3MG/xc7Myb++vsf/92VOPjo+\nU99nPTk8SePOzsTD0eljXV1b3b21t8vnc3fbz8e7vclrQDQyMzZK38jGyMzTSEy5REVZ3ExH\nPkdI3b+4v9VfUl5NPTXD0kRBPUhNd86tvM9lSnvrY8K5zsffUDld7V9GSMldT0hOR1w6OstX\nY1tnVrC5wqy+wb9A20VKzvNDrrr33TlHudDOs0fbTzpBOz9fW9PaO1Tf12XG1XdIXThvQ0JX\nv66suEJETeXl0Ve2vmk9Ly8tP1PNusqvu82/1b7C2UNMNjRbSjU6LzPKuLOqrKi12zk/NTg+\nS0vdwjxAQyMyRS3HxDbQybztNTpIvKWkuMq6srVvOiUutKaswCofJSw5u8a2oafGQC8rc9/V\ntbCno6WzyT4uLyonJSsqNjhGurW1uMrTy+PDtke+rFPMtEu7vjNfPi7vQS334TTD2tuptl3p\nY7irt8g5MC4kZdH/PiwrQjkpMC/Koaauu1w+TzIvvLCmqNEz2N9JbSooTkg6LjrPprE7QsjG\nvuM5uKq+ubbPsco8u1QsJCI4sqtBNzX3u0Et86ygo+vHrcOtr8a96yUlLShZqK21UiEfISk9\nrqmjn7NfUzQ0VVTVpaeur0I6STMqLzs+21kvRdK0smE3PETVu6+sqLRTNSMtPzVjuffpPic9\nWb3IzL24SiwpNLKqqKCpuEEnID08zq65sMpCQTIjNbfGvjQjNVVDyKupn6pNQDg221M1trK4\nv0I9vb5bTzU7X0MvP1q+uMrCvr7Me2fExj7G2b+460TBsUozJifZRnvN0cFILWs9QLmyd6u6\nSVYuQ+3de9NvRy8jNberr98uMTU7P/exoKS0UT0vLSQzU/+9tL2xu2dKw+97XTM7NTIyPWm4\nva+pxazKzLGtv7lIVT05NztVyPM9LjtZvs2zqcTGTyzX0b+trMm4QycqKDmuvLezZV88KCxC\n2bO4xLfDPlQuPnfX2b/X/+NXWNXHxrpcW1Q+PzcyP0pTz8LPwbK2t+/O619IKjEtPDdJN9E+\nwttJ07zLvb3MwtHH3Xfvwm9d4zxLPkXnzs7n48Jady5j0//DT9rN71xXOvdP1uNj2etK48rG\nwWfIT1s//9O0ta69w3s9MTA7Y8Xd4c1GRT1Ib8bhzNRfTURFyL64v+NnXUFHZ8nIyndJRTc7\nVdq6t75vQzU5PkzczcjpRTw8PEhYW9Pd520+PjxJ0cy9vuO1zL67u7a5ws5fTzszOj08Vk9V\nWj9DUsLMw85vzu9ZU+nfzcrTx8Ld17++vL3K0VtKPEdJ4+PX2W1va2XPxsHG0Fc+PC84Rltv\nzMvZ0UxKNk4+X07PydnHwbTHw8rt9088QEGws29V/9xZ/+/fzf/f4UlBMTpJTtR7181TST9b\nzW/AykvhTUdERj/Dy8Lpykb3Q01C2Gu9XD8+P8d7y8/LuMvtu97Vyr65tblVXEA6aUZv5Vvn\nQmtZxWXv0dpGv2vD58u0Z8M93Dj7P7r3usrf00dCRkLPY2nCTUw/Umfv41Hd/81PPldPZ/Pb\nS8s7Vjlv78i6wrzr50DnTNTfv9hf60fORlTFUbg/7zxRQP/UT7tpWUdEVzu6293G1sVJ2z7A\nwsfTslXWSVPXOsFOtFW5RWVMyEpGvUPISL49ylPO1+NYuFPN6d61xMZnwzfOTU/hvU7fa0Zc\nNVLrvt1H93dNWDXbTLBPUss+vkFXR8FJvl9bW0HMSV9Jx0TZQ2tXQ7ZPtD57N1NOMck4u8tJ\nWEhnSfdIs1fFT2/fU9w/ulnFv1F3PzrOd1e40XfRLkXfOtfA/8iuTVW6Pce+RLXEV8PrPbrH\n97zIPcY2K807Z8Nb7/+8P//fQq/3VcRIU0g3xP/LzVlZ/1VI2M/Gw7pWRdFHTHvdU3dTZ2NZ\nPjdRacjr0ffN1kBtRP/VPk09PEVBy8HFusnR401PUs/K18xHSkJKW02+v76/TE7ZUstZzcrJ\nZUhHOEVVZ8e640Vvt7XM2uPJtLXF4ffpz+dcVTo9ODo1Nj/P6dvOb+vF1sy7vca8XfNhSENr\nb2XjWVD3UF/Ku7i/yFNLMzQ5NlBDSkJGRUfr1Lu1uLy91sra38Bt49trRDgtPELvuMdfSTlB\nOVtJU19Fd0JGPz5Kvrqusq+ytru9r8G63TkzJSYiKiw4S0vZybuzq6ukp7CxyW9QQUhJ005A\nODs/Ql/Kt7CvvN3Ma1U5RsO+a0UtLC41V+vVREQxP0lTR9HNwrq+u83Hu7GqoaSpqa+9y/9L\nOykjIR8fHyAiMTxU08m7wrOusauuusnKY1PfTV3vY/9tZ9PJy7+2sbzL6VVJSjtFSThIQko5\nNzIzQOHLY1tAPkjOvLOtrbm4s6+pqaWqrLe72Vk/NDEuMCgoHx8gICcrNFFQzb+zrKekoZ+i\nqq66ytlr+0tTPzIuMjE3RG3NztDR2/vnztXNxl/VQT85OTU9Rk0+Ozo4SExvyry5ubq3vre5\nt7GyucPT22tlV0E+NC8rKywpLi42PEdHV9fOvL23sq+ytbu2srS0sri8zOf3b2PcX2f7UUJH\nQD5JOT4/Pjw1OzlNTO/ey83LxMG8v7vAuMXdZ0pIS0tLWm9jV1lUX1dvZ97e/1VnWV/Ta8XJ\n61lMS01YTE9fd29349/Z3eXb1NNdae/ZzdPHxr3Jz9Hn72NUSFhPRENHSFtZTuvl/2tlY2Nf\nS05ZWVhMWenb0dXMytvf+9Xj6effy8fV18/Kz8/XzMzfe/fn49Xz5dHdV1lcUVJISU1vTklO\nT2FnWl/33G9hY19eW01Za/dfZ+n382Xd0t3rXf//929z38/V4/vtb1hPSFl3Tk1MT09JR2Pz\n3f/3d/NpTWndys3RzcjT1OfVzcrd891391tW5+HtZ+Vv61RMXWNjWFtYb29WY9/b2+Pf2WtL\nSVB36eXX3ON3d2vSzMzP2dvnX1Jd29vn9/dnXldf4dvc6d/l329v68/V43tdWUhGS1rr42tr\na1dIR1Fp6+//42NJR01319TX0s7be13t0tXb6+vzX1Ra2c7K09LX7V9VXefZe2dVUUk/QlP/\n9+93b2dPTlnTxr/Cv8HV71nt3dPa3/d7WVhd59DT3+HvWk1JTv/7b2ttXV1SV+nZz93/ZVRB\nP0lV/+vf2d1zb+vMwMLGzNfnXVRj2dHj81lOSURLY29tb1lXWU5Z79PN1etVS0NBPdtzR7Zd\nSsxUxd9KubHv91gw105H1ufQxs9lb+P/z8TU19tXSEDj5dG8d72+XMPrTP9hW8/fO1ZCPthL\nX9VNXGdOSv/3c8a/Z7rAz7nAvthV50lIPUI5P1FG1mdVPUpP77vR3co741Jdurm9wrHnM08q\nMMI3vLs7tzAu60tPOq6/tLAzRD02z3exoq28OiwlK0A0v7dLtt5EvVPEws9pZ9c6zEQ1yELj\nt9+wVFa4SLq4TrnN/y7KtLqsVy0sJTytpqCgyTsqIjXF47i57bS/QkIvNNm1rLjVMSw5Pr6z\nycvzV0lWV2+9s7KzUylbt7mvSywlHylZr6mpvywqHy1D17yqqrOtPDEvJ1e6sq3OPVM8XcZU\nuuFzx2lNQm9fsK+9Wiv/ubW0MykiJtyto6jDMigiOXu9rdXM3ry93s4+RcjDzcTtPNJBSesy\nYUhnuLPUzr93qqtJPr3Jq8YuKh8o0a6kqksrJyBE48S061NPxMzfZzNPxsK9VDdBPUp3S09K\nR1XazsfFuLy6wkKuvrWuQTwjJtOspqtfJSQjO7+/t1w1QNPKyvcuREpzwONfY07pyczlVVtM\n48rBvbqs0zi5wqmv3dcpO821oK/TMicvP8u7bTw+aePNazpEPmPB381ZQlNAT1djy9dOSjbW\nuLZQu620p287KSrNq6OmzjMkI0f3vb9K6b3EvDwqKDjKsb5OLSg1T7e0xt9IO0RpzrFz/7HC\nqPc1SyzKtq6fuO8yKDZfu7rDS1NnzL3L30dHVU9HOC8yP9vCyrxIODgv07q+w6mzpbw0Lizr\nrKWfs0IoIytItKqxtldN5z/XzrSrtXcvJh8qNme6wLlMMyooUU7RrKSoskMpLT20rKu0NzUt\nLFrItL3NOV5N78Jrv77JyE00MC0wU0/CtPdWKyg+NkPbv6+ouzwmKE6tn5+r0zEsL1S3q6jT\nzUtLyWe2t6620Fc1Mi85RHe9vsE8KjEtPF/Gy6nJv0ErQzDCp62q3UEuK0S+sry467uxwLpv\nz8PNSz8uKi4rP2POustMOy8yOT/Hta7KPCgqLNy4prK50TNbWtumta2247C/v7rJzNlKRjor\nLykpOkHfykVILyxfPEzTOLew37RPO1g+r62ssU1NP++tv7y/17a/wsfJuMfZXT03MC4pNDJF\n3mfeRzI2NGPI2bzTvbS0uFNMQE24sauyzG85b8K4ucxeVcK2r8xIOTNBOzM7LTEvN+Pd91M0\nODk6RUzr1+PIzq2qrb89PzjBqqqor8jlZ0lJQzrMz8HDZVFAPEpLQWc0R89IzGsvM2s381Y7\n777VzK5luLDTqefHs8nHu7G1uMdGXHtX3chDOF00azo090FQa026O09MYc08TznERUfLSLJT\nsLZetEnzssSrZ6++vbZVuGO8VN86OdssSTYwQDIrSzlVPm0v4Uk6zDjaaz/Qv7G+vtq2Q7pG\n3dDK4fu2V7J7xFW9QL9nZ1Q9wD3GNOc1a0JrRFVfQ8VX0EB720xvvtDHvM7O7enr0mfK07/I\na8Xe48bV1XNtPd84zj/ZRVb3T2tvS+dPXE3pPctHX0xB/+PV40q3SbZKzEPIyT/LN8tU92Nd\nyG1La+FPwVW23Ne4XcNZwTrHP9BdRlRETUPvWm0740e/b0HjXMxbzMBKuN/FSMJvxMZKy/PV\nUsFDe9HtOXfZa99KsljEzO2/493r0NnATbdD0jbzPt3jPuVEtlq6P70/uTxT60zaQL1PxErn\nOOXlMtM0zlB3R0pZPnc32kvlTNFFxvdVxVddV10z3k3v69NjWsJP88lQxDjBO81X6/vnv1LR\n5c02xDPPXnfJ77blvj67Qs89yfv3Wul3Yds6z+vYe+NXVdNYytzMP89MwMtBvsvKxMg3xzVb\nTXdLXVxpY0nEMME/xsZV6dm8T7dIv03AXUjRP85CwVK8y1LXVGn/XMftS8s9zd86Ous8vknb\nOt4z7XM6wzPBTNtOO7pGs07SyEvOX+FOve/vSk/ZQWdjYbZvwkfnzVzMXc7Mukm+U0jbbT7r\n1N3lQbVNvNPFb7mwQLvIWLlE0bs4yjRt3DbJO0fANs3LL9dGPb9TXE7jc3e8RrrOQq86ybU6\ns01OtTy6SjxNX0tvbW/P20tLvzO+b0W/Qla+L0q/S17ASl3FVP+63cK9Sc7zOdQzPN49c2NF\nRldCXMdRWu9BY8ZFzVpZwdbVx03n2sXVvm+/xGvUSUvlzd3YysjfxUNC7We+usbjyj1XSEpS\nRk9F607/0eu21b/Azc7rS+NlZdlFT0VMyHfF1eG728tMTUBXZ+v3QUU4Pz9TR19Nzr7Lv0M8\nOmHEsa+94TQ2MkVOT1VFSOv7w7+5v77T1PNKPjU+Tnfze2dv7829sK+urrrIa0pvQ0VOQUM9\nOD42VWtdys/N0ddXzsC/uL7L31NLb0rMa1/PU+NcTlVV23PRXktRQUZdzrvDwO9QSU3lwb29\nxVM9MTdAU9fZzslcb1VZx8zH09XvTE9ITFrf385rX0E/P0nn1c/OX0tPPlpp3dzO1VdJRElL\n42/f/1tJVUta1dvPxc/KzWfrd9O8v7+/3ttMTv/c2ettSFVDSu3nu72zvb7JY9N31evcW0RC\nMz88a2H/505GPD40Tl931tnv70v737y4trbAxu1XXF3nzOfEZU9BP05h1VvRTV1HPz9AZ1zP\na/NEPj4/U9nMzcne72/71b7DwMHZ/0pFQVnv88x371NFV0fp08rL2VpRQU//z8rIzuNcTk9Y\n3czL3edbRkBLV+vGyMjR72dbb83Hxb3L2W9NR2ff38/vV0hBPkr/zsLGw9PfWVXj1cvO03tN\nQz1FV//K3+9RRT47Q2fv39NZa0nfd8i/w8DnaUJERFPj18/e911KSVxzwcHJd0pHUvPT0V9L\nTEn/y7/Fzv9YS05dU1dN2cS3sri/50w+RFXl6+dJOz4+RlbMx8TGyNLP7e/fy8HIzfdpRUVH\nT3dv61BMQz86SG/ZzMrM3M9z59XHz97Wa1pRTV3PzcrVTUk8OVfjw7u/1+9vT1ffxcDD305D\nQj9AU9labT85OTs7W8i/vc9jRUI/Ud++sbW4wM9aT09czNX/d1xET1ddxLy8zsnOT11OTM7P\nY18/OTg/RtjHzNDj2tVj08S/urTMz9FrTc7F68BLM089MUJH4bvKT2dXSkhtU9fR21/HVVVn\n5dfOVkc+ST9S6+PK00hV3Ur/1e3DytpO+2k/U0xjwMvpytte71nhu8C93VxDQU09aczj3mdX\nVW9N29PS11RKT0c+Rk7vbef//1vP7XfAxsbKTc7tUdH/zL7Oz9Fve2NTb8rz81tHQTxKU8m9\n7+N3RU5BWdXNwcnJyu/jTE7NycjOWXdAO0dT18FvVFVDRjxSWO/VTUfzPHdbP7zP0MJFXc9E\n3vff2j9VTl9v69u86+ndREJNQ/fAxczvRl9RW3fz389n3/vRVctjxbjAwMZRVUxO2MnBv+dh\nY0lrTvNd7/NVZ01fTEpS51tr7+PczOPL29DOTkM+REhIbd3M2FdpUFfX98fAxMnj729T32vJ\n2uPZVltWU+fRv87ca1JTVV3V2d9RPj89Q0JPTsvz5V9zQmdMY97Vy+9RWU7f3ci5zs1YVETZ\n///A1+XdPVhARdFvv8/dXEBDRUfr3rzO2fdYTlRfVcfJysv/ymtvzcS6wdHvS05Qd93RzGtM\nTEhIS1dnY1dJT1dHV0hn5+Nf2W1n2fvZw9TOSk5dS1tr0s3Fd1PjTOlpRtJGY15D1f9rym/N\n2FNX62fY3WnOVeFVR+NPb2Vf729JR0tS62/nxefH0+nOb1nnSN3vVtvr2tFPb2vR29v3zFVN\nVT7Rb1DP98nNXl1d///nZ8Npd+dNzNPNy83B3dRK2mNP3D3a52/PX7/KxdHYyEdVSU7LXNnn\nR2s8O11N81lMSkI/Q0hd0+XN52/GXNe907vve/9HUURzysTH52tDY0JMW2/K9//dRVlRb8rK\nydx7b1xbb+XT0M5n0/ff3t3Ra8xpT3dMRVd7xtfJ69ldYXdK0NPpXndl2f/zzNfeUUNHd1fv\nd3fXUltRSGtTe8DOudnzd2HjU8vjxtlrW1tr8+PYz29UP0lPd+vPzs/KSttLV/890mf31UNj\nXz9HREvcWdhZQWU8aV1j++v/c2d7bdHCvL7M9+ll/13329vJWFFvS2dX0+vS6Wd7UWtU5+PM\nztDbydPr0NXR2tnU3Hfbb//a995lX0g9TUbP1tTXX1dMTEj/3e/PZ9lNZ0VjzdHMzuFOS0Nb\nc83O51NEPz1MVdDHx8rd72lPUv/rz8/O1llMRExf43v/b0tPUVvHv8fG+2djXWfZ18Hn71lN\nW1NVY9Tj2GNIQkJCVtfpzmNeTWP/58u+xr7b3/9LZ03Tyr6//19HR1d33czM129ITFZNz9Zv\na2tX5U370N/B0f/TW1djd8jF299TWlNJQT9P89vf+0xJP1jhz2dPQlPd19/f2czJymNVSU9c\n/+NfW1VZSkxFSczMw83nZUZdd3fGy+POT1tZRmnv2dbO5fdHW2frwrzFwsvVTlNX7+Xpymtn\nQ0tP3MXf2Fd7XklHPUZv2e97UUlGS9nLw73O2l1OTmft0czN0Vv3TGdj38nO1ftfUE5TXsrP\n119BQE5OWd/SxcXPUUk/XdDHusfXXU8+Pk1SxsrLSkVAO2X3a1/Vd/dTPkRU4cPN33da/15c\n/8/M22VTW09ATP/Evcbba2NbW/vQ0cvNZ2NGVG3rwtXV011RX1fby7y+0dhz90pTY9z30d/3\nSzw+RtnPzednW0tHRe3Zy97XT0dDRm/Rv8bPe91LQU5P19vV309KQUNA38nIwtP3UUdO283Q\nb+ffV05HRHu/wr/Za1tDY+PAucLJWVtOTk1e59PH5d9IP0Bd2MZp329XTDo8X83Hy+ddY1xT\n1MnAw9vZY09DTnfBvcbbb1BFSErXy77Gc0I7SkxYY9XG0dtYU1l717y7vM1rVlpXa/fRy19v\nQklCSPvWw9xDQ0lEXWVj3P/ZTEg/Qk3pzdXIxuNVSz9N58zBe0tPPlFPb9HFyMTrVVtr3b/E\nw99VWU9KQ2/Xw8jO41db7+fUyL3D209GP0XfztPZ5WtbVkZP48nP505NSD5Md9nZ62VfXVlM\nZcy8vdVeTElh49fBw8bZVEpJS1tvXl/37WtRQUNLY9Tj71lNTV//zMfMvb+/20ld7ce+d09P\nV1lFRFTXx9ZVQ0dPUVtt/+f/41tGT2nXw8Pb7+1OTkNEW8/L2HdTSkhf987Mxcn3X1/fycDA\nzNvL129ORV/YwsPaZ1FPVd7b5+Xr0NdRPT5N99nW2d3lT0xW/83F1c9fSUBCXHfb1uP380tJ\nXVHW19zaW09FT3PZzMzR7+NaTk5DT9vnZ1JMRUNOX9fGzNX/911j/8q8ubrQ2efv7//rzthn\nSUZITlFNY9t7XVNJSUVQ39XO71Xv62ldd9zBx93/UldfaW//5+Xt/2FfX2nZx8v/+1FdaV/7\n79XI/09PRuXP0c7P69pvVVFKW2fbzNtbWUth/3Pr69n3a2ddd+9v2vdTUU9PVVdt69/la1tb\nUWdjb/Pje2P/Z2/3593S2ePl73tz/2/n53tbUk9TX+ff3uvv6+Pv0dnPysXL13Nne+3n6dvf\n7XdpXF1dZ2tvWVlYV2FXY2n/6ef/d2/v39/d3eP3X2NaW2l3/+//b+9v9+dvZ+/p5ettb//n\n/3Nrb3d3729nbf/Zzt3r+93naVtYd+ttW11dZ2tv8+/j82drYV9jZ//j/29nd3N37/Pb3/93\nc3NrY2d77+dz93d7///73+H393trc/f/+/f/7f9tY2N77+/j6/fz9/v3997Z3e///29hZWv7\n9/f7d/97d3d3/3d3a2tjX11n++/t9/9zb3dvd/Pv93tvb21v/+/r93f/////d3f37/f3d3t3\nb3t3+/f/9/f3///38/f7/+/z/3t3//v/e3Nvd3d3d/////f7//97d///9///////////+/f3\n/////////////////y8=\n\n--Where_No_One_Has_Gone_Before--\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Where_No_Man_Has_Gone_Before\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\n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\nl7Vry4B9aM+yKjifMosAADs=\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\nR0lGODdhQAHIAKcAACQkJNsAAAAAALZJJP+SbbZtJLYAANuSSZJJANttSf+2bZIkAJIAAEkk\nAElJSbZtSZJJJG1JSduSbW0kAElJJLaSbZJtSZJtbdu2krYkAP+2kv/bbdtJJG1tSf9tSf/b\ntgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQAHIAEAI/gABCBxIsKDBgwgTKlzIsKHD\nhxAjSpxIsaLFixgzCgCw0WDHgh8zchRJsqTJkxYdoCSokmHLgS8hqpzZMCbCkANxrtzJs6dP\nmD8HIoAwFABRCBIpQIxQ0CZCm0wNOlWoM2jCBQiwah2AoMCABAXAik1wgGwCAmStqqU4NeLQ\n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\n0CK3jI33rIAAADs=\n\n--Where_No_Man_Has_Gone_Before\nContent-type: X-BE2; 12\nCOMMENT:  This is NOT a MIME-compliant content-type, but your software should be robust.\n\n\\begindata{text, 269602880}\n\\textdsversion{12}\n\\template{messages}\n\nWhere no man has gone before...  \n\nClick on the \"death star\" icon to start the animation:\n\n\\begindata{fad,270222644}\n$N icon12\n$C 30\n$T 30\n$L andy12\n$P 0,0,20000,256\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$A 29,24 -1,76\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$S 216,264\n\"Fire!\"\n$V 260,260 417,242\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 250,158\n$V 319,193 265,172\n$V 316,199 290,187\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 187,122\n$V 319,193 215,141\n$V 316,199 232,155\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 241,145 179,117\n$V 265,163 179,117\n$V 316,199 180,127\n$V 169,120 163,101\n$V 184,111 188,89\n$V 163,101 172,115\n$V 188,89 190,110\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 246,158 180,127\n$V 169,120 163,82\n$V 185,109 204,80\n$V 163,82 172,115\n$V 204,80 190,110\n$V 175,133 173,162\n$V 173,162 181,132\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 141,158\n$V 141,158 149,161\n$V 141,158 130,154\n$V 130,154 137,171\n$V 137,171 149,161\n$V 130,154 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 149,161\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 164,61\n$V 185,109 219,66\n$V 164,61 172,115\n$V 219,66 190,110\n$V 177,134 201,167\n$V 173,142 201,167\n$V 188,128 256,143\n$V 256,143 195,120\n$V 175,147 147,192\n$V 147,192 173,142\n$V 168,127 113,103\n$V 113,103 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 132,80\n$V 185,109 195,52\n$V 132,80 175,116\n$V 195,52 190,110\n$V 177,134 192,201\n$V 173,142 192,201\n$V 188,128 241,106\n$V 241,106 195,120\n$V 175,147 234,175\n$V 234,175 173,142\n$V 167,130 113,143\n$V 113,143 171,136\n$V 167,130 160,153\n$V 177,130 210,140\n$V 190,110 208,94\n$V 172,105 172,64\n$V 154,122 120,115\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 139,55\n$V 130,154 175,116\n$V 139,55 190,110\n$V 177,134 219,150\n$V 173,142 219,150\n$V 188,128 193,72\n$V 193,72 195,120\n$V 175,147 226,80\n$V 226,80 173,142\n$V 167,130 144,191\n$V 144,191 171,136\n$V 175,147 173,202\n$V 155,138 130,167\n$V 157,128 121,89\n$V 171,109 165,69\n$V 191,115 205,70\n$V 184,116 247,130\n$V 177,130 191,172\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 156,170\n$V 156,170 177,130\n$V 156,170 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 179,200\n$V 130,154 175,116\n$V 179,200 190,110\n$V 177,134 221,72\n$V 173,142 221,72\n$V 188,128 123,82\n$V 123,82 195,120\n$V 175,147 120,89\n$V 120,89 173,142\n$V 167,130 276,111\n$V 276,111 171,136\n$V 172,131 164,203\n$V 153,136 74,143\n$V 152,114 128,56\n$V 179,113 182,44\n$V 199,118 301,141\n$V 194,137 215,183\n$V 151,150 97,225\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 204,106 216,100\n$V 215,110 221,109\n$V 231,98 236,95\n$V 241,102 241,102\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 214,99 214,99\n$V 215,110 221,109\n$V 242,84 236,95\n$V 246,91 246,91\n$V 221,147 221,147\n$V 207,133 207,133\n$V 168,166 168,166\n$V 150,161 150,161\n$V 175,92 175,92\n$V 192,90 192,90\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 220,75 220,75\n$V 215,110 221,109\n$V 242,84 236,95\n$V 278,93 278,93\n$V 248,151 248,151\n$V 211,172 211,172\n$V 176,196 176,196\n$V 137,186 137,186\n$V 178,70 178,70\n$V 198,64 198,64\n$V 169,100 169,100\n$V 192,97 192,97\n$V 204,137 204,137\n$V 151,150 151,150\n$$\n\\enddata{fad,270222644}\n\\view{fadview,270222644,2,0,349}\n\n... by Curt Galloway\n\\enddata{text,269602880}\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: application/atomicmail\n\n;\n;\n;\n;\n; This message contains a ATOMICMAIL program.  If you are reading\n; this now, that probably means that your mail reader does not know\n; how to handle ATOMICMAIL programs.\n; \n; If you were reading this with a mailer that had been extended to understand\n; the ATOMICMAIL language, this mail message would automatically interact\n; with you and take certain actions based on your responses.  However,\n; the language is designed in such a way that ATOMICMAIL programs can\n; NEVER do you serious harm.\n; \n; If your computer has a ATOMICMAIL interpreter but it has not been linked\n; into your mail system, you can run this program by piping the mail\n; through the ATOMICMAIL interpreter.  (In Berkeley mail, for example, you simply type\n; \"pipe <message number> atomicmail\".)  Otherwise, you can simply write the mail\n; out to a file and then type \"atomicmail that-file-name\".\n; \n; If your computer doesn't have any ATOMICMAIL software at all, you\n; should probably reply to the sender of this message to tell\n; him or her that you were unable to run this program.\n; \n\n(&checkversion 1 12)\n\n(defun init-ctrs ()\n  (progn\n  (setq newline \"\n\")\n  (setq summarizer \"mmsurveyor@thumper.bellcore.com\")\n  (setq global-survey-qid-ctr 0)\n  (setq global-nesting-level nil)\n  (setq this-level-ctr 0)\n  (setq total-questions 0))\n)\n\n(defun nextctr ()\n  (progn\n   (setq this-level-ctr (plus this-level-ctr 1))\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1))))\n\n(defun pushnesting (txt) \n  (progn\n   (setq global-nesting-level \n         (cons (list this-level-ctr txt) global-nesting-level))\n   (setq this-level-ctr 0)))\n\n(defun popnesting ()\n  (progn\n   (setq this-level-ctr (caar global-nesting-level))\n   (setq global-nesting-level (cdr global-nesting-level))))\n\n(defunq onelevel (i)\n  (strcat (int-to-str (car i)) (cadr i) \".\"))\n\n(defun apply (f l)\n  (magiceval (cons f l)))\n\n(defun getstring-oneline (prompt def)\n  (newlines-to-spaces (strip-newline (getstring prompt def))))\n\n(defun getstring-notrailers (prompt def)\n  (strip-newline (getstring prompt def)))\n\n(defun newlines-to-spaces (s)\n  (let* ((l (strdecompose newline s)))\n    (cond\n     ((null l) s)\n     (t (strcat (car l) \" \" (newlines-to-spaces (car (cdr (cdr l)))))))))\n\n(defun strip-newline (s)\n  (do*((len (strlen s) (- len 1)))\n      ((or (lessp len 1)\n           (not (equal newline (substring s (- len 1) 1))))\n       (substring s 0 len))))\n\n(defun cadr (lis) (car (cdr lis)))\n\n(defun cadar (lis) (car (cdr (car lis))))\n\n(defun caddr (lis) (car (cdr (cdr lis))))\n\n(defun cdddr (lis) (cdr (cdr (cdr lis))))\n\n(defun cadddr (lis) (car (cdr (cdr (cdr lis)))))\n\n(defun cddddr (lis) (cdr (cdr (cdr (cdr lis)))))\n\n(defun caar (lis) (car (car lis)))\n\n(defun cddr (lis) (cdr (cdr lis)))\n\n(defun caddar (lis) (car (cdr (cdr (car lis)))))\n\n(defun > (a b) (and (not (lessp a b)) (not (equal a b))))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun thislabel ()\n  (strcat\n   (cond\n    ((null global-nesting-level) \"\")\n    (t (apply (quote strcat) (mapcar (quote onelevel) (revlist global-nesting-level)))))\n   (int-to-str this-level-ctr)))\n\n(defun revlist (l) ; like common lisp REVERSE\n  (cond ((null l) nil)\n        (t (append (revlist (cdr l)) (list (car l))))))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" (of at most \"\n   (int-to-str total-questions)\n   \"): \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (car\n     (car\n      (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n    newline)))\n\n; USAGE:  \n;(SURVEY-BRANCH \"What is your favorite color?\" \n;               (quote (\n;                 (\"red\" \"red\" (branch-question-set \"red\"\n;                               (quote ((SURVEY-SHORT-ANSWER \"Why do you like red?\")))))\n;                 (\"green\" \"green\" (branch-question-set \"green\"\n;                                   (quote ((SURVEY-BOOLEAN-ANSWER \"Are you green with envy?\"))))))))\n\n(defun survey-branch (prompt choices)\n  (progn\n    (nextctr)\n    (strcat\n     (thislabel)\n     \" (\"\n     prompt\n     \"): \"\n     (let* ((ans\n             (select (cons (list \"\" (informative prompt) NIL NIL) \n                           (cons (list \"\" \"\" NIL NIL) choices)))))\n       (strcat\n        (caar ans)\n        newline\n        (cadar ans))))))\n\n(defun branch-question-set (branch set)\n  (progn\n   (pushnesting (strcat \"/\" branch))\n   (let* ((ans (ask-question-set set)))\n     (progn\n      (popnesting)\n      ans))))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (getstring (informative prompt) \"\")\n    newline)))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (int-to-str (getinteger (informative prompt)))\n    newline)))\n\n; USAGE:  (survey-boolean-answer \"Do you think I am sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (cond ((getboolean (informative prompt)) \"Yes\")\n          (T \"No\"))\n    newline)))\n\n(defunq surv-pkg2 (q)\n  (progn\n    (nextctr)\n    (list (strcat\t(thislabel)\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q)))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (cond\n        ((equal (cadar lis) t) \"Yes\")\n        ((equal (cadar lis) nil) \"No\")\n        (t (sexp-to-str (car (cdr (car lis))))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n(defun survey-complex-form (preface qlist)\n  (progn\n   (setq this-level-ctr (+ 1 this-level-ctr))\n   (pushnesting \"\")\n   (let* ((ans\n           (formatfillinlist\n            (fillindata\n             (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n                   (mapcar (quote surv-pkg2) qlist))))))\n     (progn \n      (popnesting)\n      ans))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval (car qlist))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((equal (quote survey-branch) (caar l))\n    (plus (branchcount (caddar l) 0)\n          (qcount (cdr l))))\n   ((equal (quote survey-complex-form) (car (car l)))\n    (plus (dcount (magiceval (car (cdr (cdr (car l))))))\n          (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun branchcount (l prevmax)\n  (cond \n   ((null l) prevmax)\n   (t (let* ((this (plus 1 (qcount (magiceval (caddr (caddar (magiceval l))))))))\n        (cond\n         ((> this prevmax) this)\n         (t prevmax))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to summarize subject id qlist)\n  (progn\n    (init-ctrs)\n    (setq total-questions (qcount qlist))\n    (sendmessage\n     (cond \n      (summarize (strcat \"\\\"\" to \"\\\" <\" summarizer \">\"))\n      (t to))\n     nil\n     subject\n     (strcat\n      (cond\n       (summarize (strcat id newline to newline))\n       (t \"\"))\n      (ask-question-set qlist))\n     NIL\n     0\n     T)))\n\n(defun maybe-displaytext (tx)\n  (cond\n   ((equal tx NIL) NIL)\n   ((equal tx \"\") NIL)\n   (T (displaytext tx))))\n\n; THIS IS THE END OF BOILERPLATE CODE FOR THE RECIPIENTS\n\n; user-generated part begins here\n\n(maybe-displaytext\n \"\")\n(handle-survey \"nsb@greenbush.bellcore.com\" T \"RSVP NOW!\" \"nsb.greenbush.bellcore.com.1991.8.17.15.18.4\" (quote((SURVEY-BRANCH\n   \"So, can you come to the party?\"\n   (QUOTE\n    ((\"Yes, I can come\"\n      \"Yes, I can come\"\n      (BRANCH-QUESTION-SET\n       \"Yes, I can come\"\n       (QUOTE\n        ((SURVEY-INTEGER-ANSWER\n          \"That's great!  How many of you do you think will be coming (including yourself)?\")\n         (SURVEY-SHORT-ANSWER\n          \"What kind of *vegetarian* food would you like to bring, if you have any idea?\")\n         )\n        )\n       )\n      )\n     (\"No, I can't come.\"\n      \"No, I can't come.\"\n      (BRANCH-QUESTION-SET\n       \"No, I can't come.\"\n       (QUOTE\n        ((SURVEY-MULTIPLE-CHOICE\n          \"Aw, that's too bad.  Why not?\"\n          (QUOTE\n           (\"I'm busy that day.\"\n            \"I hate Star Trek.\"\n            \"I hate you.\"\n            \"None of the above.\")\n           )\n          )\n         )\n        )\n       )\n      )\n     (\"I  really don't know.\"\n      \"I  really don't know.\"\n      (BRANCH-QUESTION-SET\n       \"I  really don't know.\"\n       (QUOTE\n        ((SURVEY-BOOLEAN-ANSWER\n          \"Well, please don't forget to RSVP when you decide, OK?\")\n         )\n        )\n       )\n      )\n     )\n    )\n   )\n  )\n  ))\n\n\n--Where_No_Man_Has_Gone_Before--\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAIguAAAAAQAAH0AAAAABAAAAAAAAAAD///////93////////////////////\n//////f/9/////////f39/f37+/37///9/fr6+vr5+/r5+Pn4+fv6+/r6+ff2dnT1dXZ29vd\n5+fj6+//9//v///3//dv/2dnXV1dXV1fXVtVVVNVTk5MTU5PTU5XWV1bXV9r//f3/+////f/\n6+///3dfa/93b/d3d/f/5+fr49nZ3d3X3+Pn/29n///3//////f/d2dZUVFPVVVZX1lXWVtX\nX11bW1trX2fv49/b19HO0dHNzMzLx8bGwcbDzc3R193X49nf59vn52/r48/T3c/d119jZ9t3\n79/nz99ZT1/jY29X/+tdRm//Z0lLT01PSkNGW0o9SkRrS05FV0A9Q0tVWUlK3/9fV87Zx8/N\n2bzd68zBwMv3y8Ldzvf3xsrPyd3HyV3VzF3NTtf3zN/jSt93Tmtf71XrZ11VS+s/b3dLTmfn\n91tG3U1N511na+NLym9v19PKwsvZ29P//2PZxs5f78RLQG//TdlTuc9O6//nd13KY1v/2VtC\nvUHNO8VKv0dbw0b/SM9T11NIzlvZWb/n1VvK1WNXuv9FvzlPvzrB2UHHXUvEQ/fZRtlPytXO\nRWf3P0pZUdvTd8Q9RslGSrg378Q+vb7b91/A1V3/1VvFUUTAW0W+3z+4TU7AzUPPU+93/9s/\nT8K7PEZHRd+4vm/AWUc80znrumvMSWf3vknGvufZtkO5/0fLwj27zz/Asz/C20DV/0FLxS+5\nRkLC20jPwz2//0e8x0LCd0jNzzvT6+vLQUPd1zjjuFc/uD85wU8868A3Y74927s/91ldSFfd\nSe9fb3fd1z/f39dI08pHd85AWb3jQcHTT8fOPcnCT0XDz0xj2dFfZ9/F199ryuNfZ0TP/0x3\nPFnr/0lH2/fR0c/I3//jwFfX1ePf0//Z0cbLa8fbvGdjyGtX3+fdd2Pva9ffTufjTu/nY1nn\n1Vdr3UvT31Pd/0ld12d391dn61tKb+NPTu9MROtPVUVrQ0lVS0g/b0JI71VbSvdR2U9Z4+/L\n22PRyG//3dXfyszM68/Rxu/r293rZ+PLa9tfSOvK12f/Wd3j787bW+9r7//f5/9R60/TydfT\nzNfd3crJ2evr387H22Pv2W9X79Vnb2NTZ1dnV91K9+v/513X92drY2d3//9r42P////jb09d\nUVdXWVtNTFVMQU5NS0ZRSE5KTUxZV1X373dv39vR1+vf09fP49vf29vvzuNZb2fv2ev3b2ff\n5/fR21dn293R63fn59fj619VZ29r487X293Lw9f3Y/dRWXfZ72PKxMPBv8bJxcTLb2d3X1Hr\nW1tZ39/d9+ffVWtrU01fY1VP2d/Z1d/v901VSU9XTUk1ODQ8NTxKPDE1QUdCU9/TV2PJ4+tX\nV04/StvRz8e3srCvra20uLm731dFPzQ5Oz05PUzjzMXDubq3ubrEyc7rTEdPTzxGS0pD4+9j\nP/fTyDVP97hLVf+30W/PrLPO17e4XffP9z9Cb/88SF3I/0zR1dk/T189MTY3LCcrLjIvOE9n\nY8m0rrOura2urq2zsbO2wcK/z993W008Oz04LzU5MjE7QD85VfdfUVPT311r0crj68vG0Xdn\n519RQkY8Pjw7ODxJPD9F/99398Syvd22q6y1sqywr6+vsbe1wbvCvdPNy7vJ0ci/v9vLzMXr\n21tTS0M8OTcxLC0xLSkqMi4rLTUyMDA5PTY3Pk0/Rkj/X3ffy8TBxL23vLy5t7u+v7y8vr2/\nv73AxL++vLy9vr2/vsO9wcfGxcfIy8jd53dVSkI+PDg3NDg1NjQ4ODw/Q0lPTl9n43fd2dXV\n08vV09/j/2tbT0dBRD06OT09PT9ARk1VZ+PZ68vGvr+7uri3tbKwra6tra2ur7O2tr7Fx9Pn\n509PTkVAPDw5NzUzOTc3NTg4OTw6PTw8O0I9Pz49Q0Q/P0NLQU5RRP9Xd1XHX87JzcS+vsC/\nuLu9trG0srGvr662rLuytLXLvsPZzyrGrT8zw18zY808X3dVLz9IKD13PjhJPTQ9RzI9SjU4\nPkQ3Rk4/RFFXY1P/93fd58TRv8zExMXBwe+9xb7Iw8nCvMzCucO5vMq7xNu/z+P3a2dFY0tj\nPd82QjpNOlVJQldDTznJP9tBwEjB53fO1TzfvFnVxV9Ny+NVvtFPu8pN379J/0PLTUX3PFN3\nQTzNNE85XUs/Z0k859M+X8lbS8zTScfOv8m1zc68vsC6yr24v/+wU1O00V27XbzVstHO2cw4\nwe/n17bP1/drWU5HPjs5LCxBMS01Pzw9Qk1Tzl9jw9VX/9dvQ1k+QFNKQd3M6+O6vMPHv8Vv\n2+vP913NWdfP38zVwre9uK6zr62vsre6vHfOPEdHIyY0LyMlRSovPm80QmtOP9HI69HFzffJ\nZ0r/RD45Tj5DSudb0dW8vsqusNdIb+M3L0vfQefBsK+wra2tra2tra2tra2yvNPMyF85RM8t\nOjM0Ki4qLyg9NSwmO1NfLTnN3TxB09P3TUxIW0Y4MkJANjU/59lryrLvvq2rb0+9zC84X29j\n17OvrKysrKysrKysrK23tbiyxGfCw9dDT0o1NDcuLio+KicvNzMtNFc3Ql9LPTxP4zk2UedH\nTVNdP0hnWTxB69dNTdPIw8XEub++w2NPV8fO68q0sravra2tra2tra2tra+vtb7Ly9VfPz81\nMjA1Ni4sLi8yMDQ4Nj5DO0JKV2dKTllNWV1OSUdOUVNbb+tnXVFPT0dMTkxZXV3/38jBwry5\nsrW1s7G0sbGyt7m5vMK/x8jJ09HT3dXV1ePd09Xj3+P/W1lRT0dFPzs2NzUyMDAzMjA0Nzg4\nOj4+P05VY/fT083Iwb/AwL2+vsHBw8PBwsDCx8PHy9HT0+f319nT08vLy8bCwL6+u7+/v7/I\nzc3T629bV1NKRz9KPkBDPkFHRklVT0xGRT8+PEA9OzhHMj03PTo0RjxGPltbd83nweu+wru8\nura5u8W7tLzFzLvj09PG/13n/+Ndd19jRUpdX1FO69PbycW3vr+4srq5urW/xsjC1W9nW0dD\nPkM5PT07OT09PERGRU1XSExZa01FY01JQkg8Nzk3OTQ8OkM96/d30726vLKtsrWsrrOzsb2+\nwcvbW/dDTUdJPU5BPj5VRU3/5+/ZxrvNvcW8x8rBx9nV3/dPTl9RSl1jb2P3b2dRTkg+Pzs3\nNDI0Mjw6Qj9bU3fj2cnIu8DFvbq6yL++xcXIx9fd2edv53fK11/v481n1cPO1dvTzvf351lX\nTWNVU1lbX1dX//9bb2POV2tv70lGR1E/UVNMQE9XZ1VfX2dj1+vT2c/PydO/77/Cv9l3X99f\n90pITkE6TVU9Rv/rUW+/uL65scS2trrBzsW4d/9vTmdIS0YvLy83LS8vNTtMTkNCyL3Hyb21\nsryztbSwtrXB08G6xb531edjb0w7RkJJOT9JSFtf50TNd07PUWc67706NddPTzxrTj8vb+dL\nKziw5zA70cHbxbG+w62070jdwDgsQf9DRO++ycC0yf/d/0UxNUs8OFPjwL6zrVWts2M6189E\nLt/ITreusa6trcbGutE9U0hIRUNdb8rjZ1fZZ0k5TVM4P904NcnfMD3FW0xOSE08QzI9UzYt\nW0gvOUbOPz/Kz0jrxc5OyLa857u1wdPAt8e8s7S2sK+5vrm3yuPM0U/Xs87Rua/A39XXPjg6\nMTM4NS87QjYvODYuKyoqKy4qKDhIOztvv93Au7eyvrnC18K6w7vItK23ta2trrvFrK5X77a4\nxWvBsb/Cys3C0UE+Nzk3Ki05Oz85StXfWU1ISzouKy0vLCoxPD9FXV3Prb43yrVPRWvfxufJ\nus6svbyssd+z0dtfPUM9St1bTbPEz6+7ubXKuszDz9nGz9XOyMXGb9fZ/9s7R2M/MDU1MD0z\nNUM+TElFY1NHRkZJRkdX/9fM68bGv8XLv8vIx8nHxMzOwcHJxsHGz8vO99/M33fT/2/fZ1Nb\nVVFKR0tDPUU4ODs4MzU7OTlCRUddXWvV2dHKx8K/wry8x768ysfCz9HV2+/v929VU1tIS1dN\nSFfvZ3fr/+/d71Vn/29VW93j3c7MysfJyM3O0Wt3b1lOTE5VU11Z/+f/d9nX593b19HTyc7J\nvcHKv8bO29V3VV1MUVtXV3dd79fvz87O0cbGy8PHzMrH39H3b2NHSEpAPDs8PDk5OTg4OTU3\nOjg7PD4+QUNGS0pVW2//49vNz9XO3f/V4//R3dXJxs2/wMjHs+PftrzHxMrFur3Rxr+9xMG8\ny8O5wcXGxcXGxcfdwLpT57lLLbRPLDxdNS42PTAtMjY5LjE7OTQ6SEFASN/3Z9PJzcnIxsbI\nxb/Hysi9w8y/v762tbm4ur7Bu8rKyNHbb+/dT09rP0VFOT9MMzpCPj5GQkZNY0BHZ0RHXURA\nWUtIT01BU1U9SGNFWU53V07b1ePGvr26ub+3u7y1vbi4vbvBwb/EwL/O68rTz8/jzdHMzt/r\n1f/n509ITk89OTo5OTg9Ozw/QkNHQU5VRj5MRkdXa1/nzdnPvtFj28jI7//FzP/Tu85MzLvE\nX8LDXcq+x1vBvM9DQEdL39HX08rA011DLy8wLCgqLTVVy7u6sa2xtcs+NDUvLTE3RuO0try2\ns7W1vcfMyclv58nJxLi4sMK+r7vbyt1n1+Nfd0dbTDlVSU1jZ8vN1cb/TONdPzg6VUXfzz0x\nSUpPXVtTR1dbOy4uKi42OURTxK6tr7G8x8zvTklPa8zAxc3vwbe8vcDIwr7A3V1PY93vS0/H\nv723ubnTX81HKSs0Ly9XRUHdt89LRFVOVU9RR1NNRExLU+fHwl2+v1X/zk5KTm9r2b61vLy5\n1WtbX+v3v73Dv87ZyL3Dxec4LC0817yvsMPRPzIxNDxBW/9ry7S0srfHY1NKOjpEPVnvY19I\nPzpERUtANjzZSlFvPDZjR0fL37/HX8HjXbG9vLPVssHTuMjfucnEtruvusjZPiwuLDhJY9HP\nU01XvLu7wFEpJCw0za+4vsLDuLXPNCMlMMSsq6u7d0E8QEpd99XJys9dUUk/TlVOU1s4PUpF\nR0xVUUxXd8Kzy81Xz05nrK+6u0tLsbu2rMBPPTIuPWdX2Vk5RV1vQTcyLS1N60RLPjA6P0rn\nyetZy7q4ra20w626xLm/vrmura2trb1fRT9N2c/P1f9XSUE5MzU4PlVvT1E/Ni8vNjtGRj80\nM0FGSltrQUtLTFdI5+fLwV/v28C1trCzwb6ztb28ur3BubW4srW9z2dfd9Pj28LBv7rH2WNH\n1cbbvcNMLCYpKDK4s7vCNiQiIis4Z9FrXUg1OTs4Pz9RUT1JOzxASGdv72NEQ9s8Wb68/7ay\n4721vMStrbG3rbi8r7W9sK+yu8DjWcC/xb6/72/Nw9Hv199OSj0/PUJOVf9nM0z/Q0/VTDs4\nQDYsL0lNY9X3Vzs8SDY1OT1Pb+9JNkhjb9drQzc5Sv/369X/X+PDvte+ts7Ps7rEvdXXta+t\ns7/I38m0t+NvT0/ny8bO38jLwbrL1+NNV29jV1tFPVH3Tj83Ly44RE7Xt7rTWzYvN1XCvbm0\nxcvXW05GQFFPSl1ZST86PD9LVUlBQVXj2+NnQUBO68DZY11f18rN4+fn3+fF02/Gvr7R/8zP\nw7y80cXCyb/HwcPAvc1n/3fnx9XT09fBa0ZBQv++uNFJW8hjPz02Lj1RWz8/a8VfOj0yKC4+\nMyY2yNNCR2/jY2/ra2/Nwr/f28O2tMTHvrCxrrfPtbW+u7O4yMy8vtnEvMTIxMdvR05VRklN\nSjo6PkEzMTs+Ny8vOzYrKiwuLTM2Ny86Sk89PUvRye//ysW/ubq+u7Ovr66xta6tra6wr62v\ntby9uLO3vb3By9Pb605fb2ddY1lKS1lfSUdKRU1IST1AOz4/OjYyNDo4Ojk7QEU6QEQ/S0g+\nQ0RJSkxVV09O511NW1dbb1vO2c3Ky7/Dwbq/wcDKwr2/vb62vcC2v7vFwry/vb3Rv8Xnv933\n2f/va/9vT2dZSltITl1CXT9ETD1DQD5OPUJNPkJBNk84QE09QVlLR3dIXXdny2v/y9VvxdXn\nwcrHxcbMvsbIt8nDu8XHw8zryt3d79/ZV8tbWWNTU29NX1dOb1v3Z13bX+Pn3e/O18fL2cXj\nb8jM/9PPXczVWd/vV2vnUVFXT0FTVUBPWUdNSEVCRD08PDk+PTo9Pzg6Pjs6Pz5ATk5ATFFN\nUWdba9vb3dHJx8K/vru3ubWzsbGurq2tra2vr66vr7Cvs7e4u72+w8jM1d3jd1tPS0ZBQT8/\nPj46NzU0NDIwMDAvLzEuLzEyNTQ4OTk7Pj1AP01TV2Nn99/f19HOy8TFxMfFxsDAwcC9v76+\nv7+/xMC7vLy+vr3DvsbFx8/TzdPd3dn3b2NvXWNTTlFIR0REQ0Q/QUNJS0pdWVtnb+/n///f\nd+/r39nn2+vv92dnXVFXWU9XV29dW2dnb+dr99nV29fZ2ePv/29vY//vb//Z793b0dHP1c/T\nzdPZ21Xd1SqtrDwjrqwvLa2sNDK4uEkx77rRMWe8VzDTuj4xybtGPN3PY0vn0d93z8jV583H\n62fV3VFMS8NdPMjdRtFNz+vrSdm060qxzWutUVWtwziurS6+rHdHsVM/tl9Eb7o+vLsxvb5I\nML3rQD9v7z5H0T8uP7czNEXXPjw5XVEtR10tR+9VPTXv9znZdzeuWzbOu293xe/ZvMHPvky/\nrbxF562t6zStr0i+rsbOta3vzbews+tJurTJyELOtF0409dE71tALU68NShCuzUqMuM9Lz0+\nLTZdQyksRWcyKS/X5ysv004ySt06Q8q2Vz7DrsFD3bmv3cy3t823ssNfwK22Z8W0r9v3vLdr\n0bvFW8i8vFd3urnZUb2832PN2Vdbzuc8Qs3jPDVG31kuQu9HOktXNTx3WT49T9NZNFVvTmdv\nVffO0+9vzsTL3dHCx8nNwL3GxbrFzr6/083HwMpva8lvV2NNTGNXPj5LV05CTmfvSz5Db0s4\nOktCOjg8Ozg+STc8X99ZR1fCx0nPssvZvLvA472vv/+/ucbrb9nDV+vFzcm8u7i6trK4yMHB\nz0s/Tk43O0I3RXdvW2/Kw8jd28/ja1s9OD09PTUuQD80OV9LTkv3yf9nytffy8bGxsu/vs7N\nwr/Dxu/f0dlrWdfJ71Nj9/9MR1VFNzxLRTE4TVc8P2/PUWPI0WPvxsf3Y7i51/e/usTVxL/H\nxbm7v7+/vMnOwcXj1d3r70xVZ01XUU1ZU0FPSzo8T0k2NUtvQzRATEk+TW9MRVtdTElPV9vP\n62v3u77ZybzFzsPDvri5t7S+xbi568e93UVPvtk6SsDrT0TMu01CyE4vNk8/MThjVTo9X9tA\nPURPNzRESTo/WWdHP0rXTkFFystMa8fXT83H11/Zsr7XurG5xLe1vt+8tr/BtLrVwbeyv9u6\ntttZxtlTQd13OD1jTTE3SkgtL0k4MThHPj0/21VI3brX/8fAxN3Xw0k4Tu9KSv+4u99OU2NK\nMy9LTUVd/1n/287d3b28zc7j/9tVP+fFw2fNu79vx7rAwsvFxMzjwc3vyL/C09vNzNPbXWfv\nQ0dCPD8/Q0ZRU+9VRGvv51VV9+9FS1dHSVX302NX9z01PEU8PkJZ51lDY1tKTd/b487d6+/N\nx77HvLi5vr++v7y9z8nEvMfByb7FzczL111KU2NDV9lKTOfvSE9NTv/nY01Z23dV3+fvxMhn\nZ0RG3WNHX1fja0RGV0k6S09XQz7JWz5T/0VJRj9ZSV3RX0pbb3dTSs9348HOY8O/vMVTy7bT\nv8PXvrvJ6/fZv8zn09W0tsbNus/GxmdVY+vvQkdvdzs2OTw3Nzs8Nz4/NjZTP0FnSmvnV9Pb\n0+tn28ZKW8fna+fPzk//wNfj/9m9vsrKub/Gu7q8vL23uOPIvsfj48bBzN/L1efMTErI1UhT\n710/PU1OQVlrTzs4PkQvPFFAPUJBQ0A0QFdB//9rRllv1VFNX9XM1c3Nwc7GxtXZysnv67y5\nyFfO393O009vy/9v5+vn3dNNSdPHTU/300o+Y29NZ8znVc7L61PR22fd49vJt8zj78G9yc25\nvdHIvs1rY89v486/10rn60xJ3e9JTk1MOzlAOjw2PFFbOD1AQk02Nj5CVWddV1lbZ2NP92/G\nzePGvbzK1cvK2efHyMXLw8rbyr/Nd+/nyHd323fT2993/3fb1UxZb9tPT1vT3Vdrb1dT9+dr\nX2vTTVPT90ZJR0VTR1NMX9fvV1VZSUpvd1//z8PXTOvN79vN0cLA6+//Y29na2vLxMfV09v/\nd/fPzMnV0ePr319KV93P91vb7/dnTGNjd+/f58rG119T705dV0lN30o9SllMRk5ORT1n60Vd\n9106S19bSVvV09PT23fPx8rC3c3Ly9fJb+u/29vHxs7My/9Nb9dfa2fd18rZ/2tv3XfXX2/Z\nTmfnV1ffV/dvS1lVT05ARW9NZ29NzNlOSlFd301HW1lb/8//WdnVa1tr92d3/99j/8jfb99d\n/83P38/Z093/0ef319Pfy8Z368/nWUdNd2f/6+dda/f/909Pd9/ja+Pn19POb+ffa+tXX3ff\na//X61Fjd2tXSktbWU53d1VZ987b49X3/83Za3fVwb7vZ+fd591ja+Pn629dP11dT0n3d0pO\nZ2tKb813W+trb9Pf/+Pd12/j31frzNX/z9HbY13r4/dTWfdvTm9ZSFld2/dbXXdbUWdd/1XL\nxltX1+9v79fH0d/O/9ffb9X/SnfdXev/28//6+fn2+/rz29f1c13/+9r39Hv2eP/42fnWVNZ\nY2NZW1vr1d3/b99nWf9d99HLysXK1efV31Xj12tX2d3/Z2dXSE5ZTE1FR1FXTU9HTElTY0hG\nUe9bWU5dd193/9nf19Hnb/fv99HZ79PV2dXXb+/j58nL08rV18PH08rG173JzsnO28vCxcvZ\nztfvT2df7+tMSEJHW1NLSUxZVU9JRUtVTU5RX2P/VUdf31tf71tbb29VWVFMd1FKS11bSEtZ\nX1djU1Pn/1tr52f309n30e/v0dfryc/VzsnH093P2dnMy87OysHHwb7Cvb6/ysTGzMvd59/d\n3dn/X91fa1tVU1dvZ3ddT1dRT0JAP0tPRj9ETVdOTUpISltTSEVET1dbU19XSl9ZSkhFTUlb\nWVn36+fTze/XxM7b18rIwr/GwcK/vrvEz8nNy2//W1VjV19ja1tTW1Nfa+//b/f3//9vb19V\nY9vf3//v59nj49Xf28/P4+vX3d/fa/f359nj/1tjX1tbUVf349nr19fV19X///9db2tXVU9H\nP0E+RUVKS0lMUU5dTEj3d3fr3etrW2/nXVdd29nja+/n5+vn38932dPXzs7N287f1dvPyNHM\n09Xr92dj4+fv4/d39193XVtdX2/f/19v5+drZ/9v599j9+f/z8zOx8rDycvOx8nLyMnHytPr\n5+tnVV9jWVNZW09KQT9FRzw+Pj5ERUpOTVlLUV9JQ0pNSUlLTVVbTlln//93Y19ZY+ddZ+/b\ny9XV08rH19/b59XKyMLEzsXKy8jNzNfn193R5+vRy8fEw8TDwcbDxNHj393Vzszb/29ZV2Nd\nUVlNVU9TVU1NSUtKSkVIRkRHR1dbXVVOR0tfSUhNPkJRU01NU19rd/fv/1dv3dfOyMjLy8vf\n293j59XR09vf2d3Z083OyM3PxM3My87Jzs7Nz9nf9+/j0etja2NjZ11ZUVdJT0pVU0pOSERD\nP0NHSUZCSUpNSUZLS1drZ+vn783MzdPPzszN0dPJ0+fO3W/r09fV3+fPyM7b2/fV1dVv19PP\nzutZV2d3Z2tra2drV1tfW1lTUWNv39ndTln3W1lXSVFjY93Z7//FyM7n9+/V52N3a+vRzMvf\n29XV1eN32dXP2dP349/j43dTXV9bQ05GQ0tMV09RT11bR0JMTkxbT05MW/fb2/dv5+fO29/d\nzM3PzM/R1+dj39Hj1+dbV3dfWVVn69/r52ddT13X0+Nn59vZztXrX9vR291v3+9v09Hfa1/v\n42dV2ePfY/9ZW+PR0+tb3dfn499jV+vvb3dnd+N3b9fZ71VET09da1lOUUtXT0xNSFtbX1lb\nY2f/X//NwcjMz2/fybzI0dXPz8rjVV1r485PR0tVXVtJRU9jZ+t3W+/n411jb+vZ1+NrZ9vO\n011MTmfr2c/Tzcvb32/j3+fV0cnFzdlv41dX91tKWWv/409JU1t33+tNT0RGUVtX/+tKSERH\nSVtRWV9La89fU8/H1dvX39/rxLm958C6v7W90f/RwsLfW9nNydH352/DzF1nSlXTa0JNSERH\nPjw2O/9XSDtO29NTPEFHV93/V0Nb91NbS0JRXcfCy8Xn38rv577N09fPzc7LZ93Rx8HKvb7L\n39nn18bK/+dvd9/N3VdRWUhDUTs4d0xNu1syMjBVzlVJWd/GwNk/MjxOwbxMS0/T07rHb7C/\n69lVPtGuvciwwk6+9z5ESOPIXzRRvv9vSzw+47+/zltFx81bw9lJT79RMT9fRmtTU9VZMdfb\nPES5az/F51m7vM7byOvGvVXjv2fXzTj32UfdTUU/Rt9DOV09Y+NMvj882///Oj3HVdfZS01b\nwbnjd8RbvbzB00mssuuvT0+us7/bQsy7vF3bz0xNtmMxyL430esy68frWWc9PlVTMVfKK10/\nMEhrNjLvNTjLSzV3wDdXzWdjwlvGMa1bvuM/vt/IzetXvs3HwkC32V3V1z9X177LyddMd99j\nylNrPMnd7/9rZ1XIxUlrY7tbv+c8tcvPY9nJT8a8PUi5U8q9XW//zuPHPkxTvEo4uTk40U9N\nP0Q7W7cyM2ddSf9vMzm6z0tOQC21sDxjyUjHusw8Ubi3ur03Nq3DUUhO3bC6ySVA9+vF5z7J\nvkz/zT5fW7xVRMNIPcxrOsDE3UxZRk9VV0pb10hKZ2vXQ1PIyLi8PFu3x3exzFe7xL7GycFT\ny7Tdzbo3QKzNML3MMj9KZ76vvzNn5yMnQC48trzfvr5NTOf/yr5EO85fz77BXVu0zVFLJz6v\n3y7T22vKti8luq1ET7Ur1a33Kz63rTw+RStLvNs3R99fd71FObGuW7/rMretvD08vbdd6+/P\nr8ROYzpOYz5RvrisrLO5999fNEzvRMEyR7g7X73bLy1A2yN3rc05P7W2NyoyNrOuv8vZtbLN\nOzg+b9dvPjr/tb/rZ8XKyb7GRU7Nxzorx8ZRQVlCOkjJ4ztX389rSC5RtLfDvb69xOfOx8zF\nLjzDubtjTz4qLT9VPV2urbmvu1Pjz++8dz7f0b671W/Mw7rZNzc0NDs3Ki1HZ99jPEVdTEdd\nRl29s73PTV24trrHx7y0sdfVV1PL2UosOuPJzkQrO7RXOTZLuqyuua+4tbfDyLzZ98XNyMvI\n41tBOjkzNC4zMCstMjg3OT5DSkI6ODhHwL7C51drzdPIvsW0wri7wLq8zv9fSbq/07ndUXdj\nWbO3y7W6ta+str7BXdfXX+fd2//VO09fSVc9LS82Li0uKzA2LiosLzc+S1XrzevAy8e7ybe3\nu766trOxw8PN49nVWV9rUe9ORknf3VfPV0/Pyc+2ub6zwbm/v8e7vtfZUVNHTU8zRTo1Pj47\nN0A1MSswOjQxLjE4QVVn3by2rqysrKysrKysrKyur6++xc/jTF08MTEpKiktLygsMi89P1c/\n19HIvbyxs7mvvb/Husu/zedfUV9ITUVOQkk+Qz85Pj41RUVGREM/TWPdwb+2rq6tra2tra2t\nrbKyu73DyF9PQTg5LCwrLCwtKiowLTQ7PkZbW9nFu7itra2trbK0sbjBzP9JPT43Oj0/PDY+\nOUBDRUA6PTQ5NTE+PDw+QUlvwrmtq6ysraysrKysrKyytriysrS/70w/ODYuLSwnJCQmLDE2\nQEDdXfe/uq+trrevsLOvuLC7w8/dTz5CNTIuKiYnKCkrKiovMTM9U2PLxcG6uK6tra2tubm0\nuLOwtLa4vbq3uLW2ur7Fvbe5wru+w8xbY1P3V000MCwrKikoIyMjIyQrMD1NTmfZxLWurK2s\nubm5uLOzv8PO1ePN29PvVzkxLi8xMjIuMjU9Rv/bxry2raysrK2tra2trrG2ur7R51tFPjkv\nKCkpKCYnKycqLTY+TN3r07uvuLKtrq2tsLCurbG0ucHDd01KQDYyLiwzLi81NzU6P0JPU0pR\nV11d493PxsfGybyxtrq/w8PHzMzO39fEa7+0v1nn1cnNwL3AxcO9td9vd9fPXU9C3W9DNDA0\nKyMjKDI3OFHFwrm7sa++y8a/tr7CvLKusK+ytsfbTDstIyIiIiIiIycvOm/Py9vDtq2trq+t\nra+xubu/tri5zOvN50Y7KigvLCwxODpE58Wxuresq7K8u864xN22s7y3vc+1vPdJPC8sKCQu\nPjA6TkVCQ0rrTTMvLjsvOUtnzri1sbbAvLHC513fwN3/ydfBvrq3xru2v7u6tcHfX1dVWUJL\nRTZAY/80MkdINS4jKCowLCpCZ7vBrbaurbS3t77rw8O7vrmzra+ttb66ylc9LiojKSclKy0q\nNkb/vK+sq6usrK6wwN/J70VRQe/r/1NrTGc3OSszNikkJC42PTlRwK6svq+svqyuvsy/u7TI\n0bTfu8JJTFFLYzguOCwzOCg6SDJAP0bb693FyK24u768s7PE0d3Xz/fFuLjVtLnHrbi/urS6\n28/Ryf/rTEvCzDk3LzM7KSMvYyszSSw/40Qv98pbUTf3WdPKTcKzu7OyvbW9x7/nzUdKPuc4\nMWPrX1m9ucF3wj9M3SlBOydFxVPjZ7z/xq3VvaznS61DzUGxRi6tuzS5X8RZ374o3UEryy8z\nxlPARdnFStG0M7XLO8JfQLjvX7o/z7stu0g1vzs33zRBWyu9NbhHT641rkwvrkd3tC6xwePf\nsz9vrCesKzmsM7yxNqw2Ub++PMvKNawurj/FSLY0tOc51U02v0I81TXJQ+suvi7B0zPbYy++\nTz+tONW9QNe6Mm+xL61nN60sb602tK4+tWdBrS+/xi3MySyuNmc/QD3jN7Uqryxf4zW9TTuv\nLcrBP607xa4yrev/rz66zkfj2z/EyU3Ru8rT68zKRMPOSc///z/rW0xKOcs6W+s7V9NOZ8Y2\na9E9b0VPV13JyUy/U/fTxsi5PK09u8PJua1dsNXKvOfCPve/Mbc7/1n3Sdk21180xTczvyxn\n1yq/My/ZMdVKM8MyN78tV1szxDJbuS2/VT3dw8ay77TLxa7Hxq13rcC9sLdbrT+t2V2yY7yy\n/7xfw9vjPMRZRVHF00PEd1HNS85bTevMOLg4Sc8w9zA6UzlENk88QEkzUz9nNMlH389K20bH\nd120R8K7NbfTP67nVbQvTrQvsUDXV7FAtV/PvNVHsDbLy0nFPMRVY9tHxTg/vy3KPD/rxDa2\nMN9ZZ0S4QblGu9fKXVvTSdvj1T65RuPGb0u6OrxPd3fnX/dV5022W9W9QbRPxWOvQLrAwL7O\ny8i8PL1LtEPXV7k7xDjCO3fO4zq+PlnRREPXO88vQ0jrNmc9Y009RUkvuTRHdzpLPMY5TVnN\nVT21U9XXyGu34768xneyXcLIv0a6P7nV18JXukTvtj/MS89BuFtLv1PZW9tR091CyldDvj3B\nO9XPS9vKOsc7xz1jzTjTUePdVc8/skG7Mt3vb9k/uzq0U9/FQ9tB2c80uzu3OrtLzO/XVdlL\nPMVE107HSl9r3WM9W2dJyzGwLr7ZRtF360++SuPf40PjX0rD3z26QcNIvz+9Qe+7O8LvVbk0\ntfddyNndb0C9VbtVxW/TX09TVUhJ70VXY009a1lH/0rTTfe/yPfD47tnxb+/z7fA2bLTXbVX\nu0m/ScDOY9XOV1fNPms+azTPPTpfOT9FMFs9zzdJQu8+90VfWfc32TjRWW9vV9dv/2u/TblN\nyEK+90K6PLhNxM5DuetVvefbTLjvw+O7zve6v0fDVchOtD+/013CM68wska9T8+/QM5HSc1R\n711GzULKNboqzjvjTi+5Mt1vX0FK40ZX68pfXbtE28fKTsfdZ1XLVePN0zvX91M6wkxOPbg5\nRMI/zWO9SrnDxNXvvlG02f+tWbhPvd/fs0i80bpGw79Iv0vXQE9nMMs8QDZbPUlGMV9ESjnr\nTUVKWzz/70dv28NMzNtFvl/Z49fFXchvWefRa1XFVdlXulXTvc/Rzs3jwc7RyMzIwcTNv8jd\nyMm/19Pf6+dnS2/nTGtPQFlFRz9DPjg6PjxCQEJJSmNM30Z3a2dM7+ffR9/X21m81dPLz83I\nvVnTxM9O3cpTxV9nUbxvU9PvSXdVX0bfR+vZZ8M/vVPNTb8+698+/1e/POvJ28PEuc23612+\nSGM2TD1L9zPFycK/w6zjrLGu17RBz0dVIy0vLykzMDk/Sjc9Zz48Ok1OZ87NraysrKysrK2t\nusNROSYnIiIiIiMpLjVGu6+srK2tra2tr8PXXz0xMS8/SUbfv763vK/Gv8ZGL1NELytBOE9V\n38mxr7q6rb3Bzrj/t8bHtbOzu7CzvMDXT0Y0JiIkIyMjIyMjJis5WcK9rKusrKyssrK0wsnn\n38bbwevEuN9nusrXwkdTzM45Pci+Qbq7tbi1zsW541lO10ZL5+vDvLq9t7W+y9tRNCwnIyIi\nIiIiIiMkKzRLa7Szra2tra2tra+zvv9n31tRTVv/d//n12PXxc/Da8zLv9X31b/G18zByb7K\nxMK/w7/Gv8TGzt/O0Wd33VVrSk0/PTsxLSwqKCkpLCosLzEyPVXXyLazr6ysrayusrjBz85T\nQz44OTc2NzdHRFNd3f/PvcTn08C9vcG0r7Cysbi0ubnI519ZOjo1OzxHTVn/b13vRU9FPS8u\nLy4rMDA5QFdb/768tbezrbKvs7Kzt7m8v83Pzd3//1lIR0M/NDIyNCwvMTYzNz1GWU9j1b66\nvbGzrrK1tbq9vdfnY2tOSUlBRklBREFOPEg/TEJMTEljd9XPvbm3t6+1trW5u7zBxsLD1b/J\nvsvH5/fnT0lJOjcvKykoJyUnKCsrLzc7OUz3/09v0cnPu7q2trW2tLy1ub3Cw87N/+tv6+vd\n59HjysLOyb61ysvAv+/3zMzZx8nHwcnFys7Bwcy9x7/J09Nra04+Pzo1NC8uLSkoKSYjJywp\nKTA6OjZT2dV3u7extqysrK6tsbnFvshvZ+/rX+vIzMzEwcTOwc3IzHfdvtXv1c/KZ9e/07+5\nu8DEzNNXV11fS1dn51lTXV88PjwwLSwuKSgpKyskLio0NUZV983Nx825tba8sqystK2vrLO4\nxcPO90xIUUJFV0hn39HTzsXCzdnEU9W/3+drzOtP08DAt7Kys7y9u9l36+vfT2fC0V9r3Ugz\nOTwuKjAsJigtKiMsNjA9StPvW8+7xc3Auq+/r66vsrnAxW9RQzo2OTg9PUNZ5+fKyMHF09vj\nTT7V31E+U+tPZ8m7t66sraysrLm3r661sK2tsK6vvc3TVzcvNSwlIickIyMqKC47REJLY8xT\n0e/AxcPBtbi1wr/dXz88NDQuNDA2OEZVU9HNxtXRzv9R281JQf/XXee3uryysbm6sba2sq2u\nrq2tra2vsLzLZ04/NDEvKSYmKCIrLjgqPEFLPVnO3dO/urO9s7u9ys1jRj0/PDg9P0FDTExj\nTvdTTU1DRztPPktMUd3jy8W6s720uru4urK0rrGtra2tra2vtL3L3Vs+OzsvLyouKjcsPjlE\nPktbRkbv3dvjtLm8ubG7xtv/QDswMi8tLjQ1NkBFTD9LPjw5OzkzO0s/R9fIxL+usrGurbKx\nsK+xrK2srKysrKyzt7jMSm9INi80KyosLywwP0M+S9dVR2/v/9fGvLq0tLW7vtPbTUU7PDM1\nNDU0PTpGPkxISz0+PT41QUdFRc3XyL2vt7Wvr7aysra4sLWztK61r7m3zM9OSDUwLiwrKist\nLjA3QUBXTtXI0d/Fv8m/t6+zrayttLa82U9JPjMxNTQ3NUU/TUxXR05EPTs7MzpERUlf08zN\nubnAvLS5xrO3u7qvr7GzsbG4wr7NWzU1NTUmJzA1KzI7Ty493/9BRr3rd8qusruura28uLTM\nT013RDNEU0g/V91TR0dXOTI5MzAyPjZB3eNNb7rZzbq3vMO2vMW8uLq2rbK1ubG6x9FZSjIz\nLDE0LDQ5PDJNRVNOwsDvu7u4xrKsxrfIrMPGtrvDyV9bMzQtMCktLTgwOU/nX8zrzkxXQ0M/\nPTpJREjKtnf3v7nv17Szvr21usK7uMC1rbTIuL7Rd01JMi4tKjEqKj0yOT0u32NB48S+wL+t\nu8awr7fKvLPHY73B3V9r7zw2QDgzMTc/PEDr38/DwdVj3e88QUlAPDw0VbxrW86vvdG/rF+u\nvbivwa25ra25vMDrxkItyy8pVzw0KS9HNyZEPC8yukPGz7evSrmw289Zvchb27lnudPrdzVJ\nNSs0NzJBT/fP57i93dtXRzg3OTw1S19T666sw7Wsrry4tb63srG1rKyysLG2y1dPSDsuLC4w\nKy8+LSg2NzUuOltBRsHT67muu8HBs8LOws7Nyr6+yL6+y29VSjs8PDk8REZn3dvX4+drUUU+\nOTo6Oz1BQUlj19PbwcS/tra4tK+ur7Czub6/yf9nW0A+PjgwMS8uKy8rLTE2Nj5DT+PT08e9\nvb6/vL68tbW0r6+wr661ubi8ydHP3+/bb1tbWU9KTUxDRkhKSEpNS0pNRkFMSkVJTkpJW2/3\n48rHxMDGycbIztfXd1tXSz06OjIuLy8sLi4vLzY7P07v18S7srGwra2tra2tra6ur7O4ur/L\n1e9LQkE7NDI0NTQ4OjtBTFdXX/9fX19KVVFCQ0lGRGPd2cm8uLu1sri4tbm+v73Izc7VW1VR\nPTo8OzM1MzIuMTU0QUh30cS7s7Cvrq2vsK6vtrW1vsfGz+dnX0w/OjYtKyooKSkpLC41O0BT\nZ9fOy77Fvbm9x8fK39fRz9PGv8XFwcvKxcPTycjJzsvK693bZ01ZV0VAQjsvNDMuMT47SVnv\n1cy8urWzsa6ura2vtbW3u73Cw9vvXUM5NC8uLC8tLjQ8PUJVY93PzcjRvsLR0+9jTF9bTevR\ny9HJy9nLzcvZzcrTycvR5+NvT0pIPz86NjAvLi0sLS41PUhP78e8uLSvr62tra2tra2tr7O3\nvsHLY089NjMsLCwsLS4zOD1ESuv/09PFytPN79lH72/32dXFu7+8vrvCv8a8wMHCvcvV09tP\nU3c/PEA6MisuKyorLTE4UVXvzbi8tq+trKysrKysrq+0t7zI4/dbPjUzLysuLi0tODc6Ql1X\nWePJz9vT71lrb0gwxb1B2f//tcHbu8+6tcGxvLmvvcnTz8vZZ1E3Pz0uJyQkJi8xKzJHY2/B\nzbWtrKysrKurq6ysurO6xGdTPTg9NzEwNTU4Oz00N0BAN2dZRT1KTVPvxtHKtrb/99Vn9+/3\n27Gur62urLC4v9VHyT8vPDxILygpJC9CRiw0U0H/TDhfra2urbmtra2tt7TBx8VnNTpLX1tV\nPUJrz0hCPjdDQDzn/0dLY2fd583BvrrfPT1BY+/398ivsK+1trm8tu/v3/dbPkFGPCsvKzXV\nPztVN0BOMUqytcG0t7y1r6y8y7z/b2tdQkdf109FY0pnTzM4Nzg6TlVdQ0FE/7/Bxbm6zutv\nb+fXtrjIuK+tsrq9vt9fZ0pJW0Y5Ni87My9nOiw9Y1M7PsO7wsm9v761rq26ur9rP0pZT1VV\n42/bzspdS0E1ODg6OkZRTEpMZ2fPvrvAy2tb68nDu7Ozs7Ctra6yurzKXV1bVUAxLiooLi8t\nMS8wMjM7R0tv0cvCvLi0uLe4wsXI0efTd11NSUdDRUFDU1/3TmPr3ePX029vWd/f0dPT92Nr\nXdnPzs7L1dPGwbq4tLW1t7a3ubrB1WNKPUJANzUrLSwrKisyNzs3O03/zMC1s7a3tLS0tbq8\nxtNjV1NOSEY8Ojo6RE1PUVlnWUhGTVtjX1dOV1Pfzce/vbu3t7azr62ws7i7vb7IzutfQDky\nLS4uKS4tKTAwNEhFY9nGvLyzra2tra2ur7G5usrbV0U8NC8vLi8tLS8vMzg6R0tT/2dv2+PV\nysfOxcfNwr++urq5t7a1sK+urrC0try9v9XZX0Y9ODAtLCoqKissMDI5Rknr1cC7tLK0r6+x\nsbK8vsLZY19HOzoyLy4tLi4xMTc5P0pba9fIw8PHys3Nys7JyNnTysvNv8PBuru6t7a1srS2\nub2/xMnVa2NLPTg0MTAtLi0uLzI3PUROW9nKvrm1sbK1srS4urrI28NIQD4+NTczMTEwMjM7\nPkVPXe/ZzMS/ur3CvcHMx8bXzcnT1dPV29PGxcXFx8PEv8TBwMPHzdfrX01JPjg3MTAuLi0u\nLi8vMzk9Q0xd287Evbm7ubi6urq6vb7D1ed3V0hKR0dJR0ZMV13n1czCv7u5t7e5u7y9w8fX\n2/djSktJSz/3JNW4TEkqTLO8/+fPysnRzN/f61lLPD5NPDw/PDs1Ozo4Mjk+RUhd3c/Hv7y4\ntLCsrLG+yce7u7nD11NJQD9IRUE/PTY3SVnZ3dnbycm/wsPPW1dXUUxBOz1AR2fHv7/Bwb++\nvr7GyWtn52ddT0VDSllbR0Q8Oz5AP0JFVWtNW+vEvby7urq4usPJyMrVSz06Sd3Kz+d3a/9j\nW1VJQDs8RlN35+//08vAv8jTXUs9S1tPPjk5R9W7s7G0uLe4ur7OX1lOVV9bU1djZ1lbWU9H\nRD4+PT1BPT1IW1lVXdPHuri1usn/18jH1Ug8Ru/Dwszr/9/n52dORTo0Nz9TX2Nba82+vL/O\n519FQFNnSzsvTN+6s66vrq2srrjCzdv/VUxPRkVZX0w/QkpTTUk9NThATUs6PVN3y9fTxrq3\nub3Fz9/r0eNLPUld99nIy9vf2e9ZR0Q+ODQ1OkRRX2/Rx8HDxdHfYz9HX1s9OD13wrm0srCt\nra28yMrM3VVHQ0ZKT05APD1LS09IPDdMWUE2O03RzGNZY8+1srrLyMDD5/fJx+9V793NycfH\n09vb31lERj88Oj9DSk1b59fn2dlr/1tITW9HP0hfz7y2sLC0sq+3vr6/wc/Z419XW11AODg7\nPDw8OjM0PTw3OkRGR09n59HAt7vAwsHAu8XZ2d3VzMfFwMLMzs/nWVdJQT8+PDs9P1FZXWvb\n729nX1lKPUffY0dHXdvOxrq3vbmvr7e4uLzAx8/Z729j71NJSFVMQT1BPTo5PDo8PT9RWVVO\n58/T0czN3fdf0cxfU+Pn4+PT193359/3T09RSz8/REZHVWvr79HJxcjNysbN0cvV08TKzdfL\nx8rIv76+wL++v8LHzdHd2ddvV0lLR0I/NzY0MzQ1NDY6P0VLUVtfd+/d19PTz8rExsXFw8O/\nxMnHy87Tztff619PTEdKTUxKS05VVVVPVVVZU11rX2/33dnP68rRyMnOz9PX083Jz83T19nO\n0dvj929nX2NXUU9LT0xMTUtPUVNPT09NUUlKTUtTT2dd/9nOycvGwb68vL2/wMTByMzR23dn\nTkVJRT8/QEA+PkFAQEdLV2v/1czFxb/Cv7/Ew8PFx8TIztXX19vd9+//7293X11nZ2tnW1VV\nT0hFRUlDPz8/P0E+PkA/P0ZKV2dv4+vR0c7PzcjBwcC+vr29v77AvsbNztvjd11dT09HTEhM\nSEZJTU1LTlFVVWfd19HPzcTCv76+wcTEy8zOzOvf42fjX2NTV1VVT09NTUpMRkxGSE1JT1FV\nUVFPVVdOTkpMTUxLTlFbXW9rd3fn59vT0c/RycXBwcHBv77BxcHBx8jOyNHV29vd/29ZVUpK\nR0VDREhHS05TXW/n09HOysbIxcjJy8/Tz9XT/2f/V2NXTldXS1dPT05NT01IR0dGRkdLQ0ZD\nQ0dJS09bXWN379fPzcbIxcbCv8PCw7+/wcDEwsHIyszP0fdvZ3dfS01KSkVKSERCRkZGSk5T\nTlNNT1ldb/fbzszIzMjIxMjFw8fIy83Z2eNjUU9TTU5MSUpHSElCSkpHV2d3d+/n6+fj5+/j\n/+//d//j39fb0cvNz8rJx8LCxMfGxcnGys/Ozd3f4+NjWV1RR0dGRj9EPjw+Pzw5PDs8P0RG\nTFddU193///n39nRz87OxsfGysfM19nduTQ9rL0lPqw6P63OQcJrRcTnOee6PWe16z+6ukhr\nuchK3cpn99VZV9vZV3fD91nKyu/Iz3fX1Wfn13dv0+dX1cxF38dnQWtVPkZXPj9dRzxFRzxM\nSTk8Q0o9P1tHTs/r78TBwLvCwLi+xsbC32e/yk3CxUe9vUfd1d/b38rTb9m/RVtbxU41Qm9N\nNUs4a2M72URGvtdRyNXPvlvfxNf3zuvLzcvN/87I29lb3evbVUpX701GS0dTU0RAQ05PRUxb\na+/X0dXOxr3X473BTcNO28TvRs7GTsHbyL+7utnCv9nVWWdBP04wNTQ+LTo7PNs230fjW1Xv\nQWdNz01ZzE7E68G+wrzFvb2/zdPA58nJ113n1UVTRjs7Pjo3PDtFSkpX3cO+xLm5uLS5xbq7\n//9Za+PZzNW+sr68tse7w7/Fd29PU0M6QUZVMURNPDE2TjswRDs9QVM+Ud1TXc7Za8HF09vH\nz87O92/j/9NDX09d/0FnPVk/PEY7TjrvXc69z7rByLa51f/PW1/fTU5d67rNRbDFtsC82bjA\nN7gyrkU0rS65vz+8ONFCSzs9XzjbPk7vV9VPz8n/uMvCvcLJ48/Rd9NKb1HbT0r/V3dXS1dL\nWzpFRUhHXz5n929jX8VvZ7hLY///OtNON79Eb75NvTe1rS+sPUu3Sbw7sV1v2edNW8I1Vc07\nY01JUzLMMkfRP+9PyVPIS2/VTcBjSb4971u/5zm2SLs8tTeu2d3F3bjV48V3zcLAyNXJa7RO\nu1O808nPXbZGu0O7QUe4RDW4L8tHZ18yzUk3Y/85ty+5Ns2/NMvPLbY0zzpMTDvbvjfr5zvj\nZ09VWedTTcU8yjWtMrvFP7hLd7/du75dtUTFPNm9S1XDO7itLa0rTbUvrDG7ObzEO79BPLYu\nrjbJazu2PlW7Lq850bsurjS00UC8Tj+5OLZIV8I1w0XnTz3AN8LPMK4vRb5Lu9dRyUPPZ9td\nRfdJzkhJ43c/uji0OFm0LrAvtzS878tdU8RvUbsvrje3vj+0OK5IxcJCskS3/z2yU83B3U/f\nvf9byj23P8rLQspOd0pjP2s5zU5GzT/NP91K30xGzDjr1TTP529G21PnU2NHR+dCvNtHxj6u\nMcFfW8nVzMz3utlT18pXyMpPxT5vwjmxR0+9P+vDS7/XXbtO/7hfz64urDg2rFnjsTuvb0+u\nU3fTRdV3NP9TP7pBVd0860tZ69s4vj0yvi22TU7XTkrLQkK9Ql/EOlu9ObxNR68vXbhM2blI\nulu+1+/Zxv/M2dVZvVPP485dOsF3ObpTV0PPUz7vW0n/Re9Ld+tb/8E/zsJj3993zF9r33dK\n51l3/z3ZyTPd10RvTtFbTt9NV1tf59d3d9nKd9XVy83Zv8vTwMDnwc++w2vEzNPj0+vn72vX\na2/nY+fnT89Ma/db/1Nf/0VfX1dbSN9XT1FjVU1vSmtOX1lrW1tZWU1ZTFtOUVtPSlNPV01b\nVVtXWXdb71Nr6/f373fdY3fR/9HX18fZzNPR1c7b09fjz9fbytPGz83Pzt/L39fZ59X/zt3V\ny9fK08vR08rXz9HV2+Pd6+fva2ddXVtMWUlMSkhJQEtEP0pDSUpFU1VLY0v3Uf9OZ1lRb09b\n/1vr/9fv1+fd3+/d5+vZ79vj29nV29nd7+fd99l35+dv5/fr92v/Y+9f/2tn41vn929r713/\nd293W+93d+v34/fZd9v/69nv59X/0fff3dnj39nr3edr33fj9+dvY2tra2//9+fb5+vf3+Pj\n293b09nd59/jb/9rb2dX91NfV01PSUhPSk5JUUlOUURXRVNRV11VY29rd+/r6+Pv6//392f/\n393Z2dHZzt/N19HX0dfZ2c/b18/Pzs/O19PZ49tr72db51n3W+9jd2dbXVdfVV9Xa1N3WW9v\nd2v/7+tvb/dj62v/b/f/39/d2dHRys/O09PO68/Xa9XM21Fv0dfvZ9/3VVln3VlG511VU01f\nU1FRY1NNUV1vQ0xOTUtR/09ZWV9ra/fv52dv783b9/fb19Xn1dnv0dPNb93Dy2tRzu9n4/9v\nSl3d31nv229ra19bTe9vZ9VTSVnf1WPZ79/fzdnI2cnJzdu4tlNN2b7CWevn31u7ykFJyLd3\nSV9Bvb9IOUZXzdfPQzLNs0JHbztbvko4PU3V7+c4OufBVz5L51t3zDlOZ19PzOc0Y8vO6+tf\nxMfCb87BwL1rx8Ovul/Zv7iwvUpTvsvE01M3PN/Pazs6O0XGVTMuOG9dOC45R01NRTw6WdFd\nWVnr2dHMw9vf38avw//fua2w2Wu7sL13zsnHx79XWdvKz87rd1nZysn/Y+/bz/9ZVUlI79/3\nR0tO59XvU0pXb1NBODtCPzw6PUVOUXdNVWPVW1dMPkVGRjpBQUld11Xfu7y+wte+tLLI69fH\nzGNFQ1nX09v/zsvT09dZ2XdbY0c7TM/n59vTua+z2cO9tq+2vrm0v8bC1/9JRkpZSz5H07/D\n62tXUzkrJCMjIyMkKTM/W8+/vLmsrMw0MUfIzEo097Kutse7tq+z0Wdb62PnUzhIXdfJWU/V\nvbvDTnfVXetbRUn3vrm+xL+/w+9HT+fbY1lLQjo0MTAvKzI3O0v/ybCssba6v81ZOjAyMjI2\nWVtbsKutvLyyrKy+Ttu/vVVfa8u5sLTGxr7CyFUzLzg5MjAwPVNJTj083+9N6zkvQD1KZ05O\nw7u1rLq/sbr3zcdJQUhJd8TIzL3AxNtnRjAwLzg7QvfZvry3tsTG609VOikmKjNLy7Wxr7G5\ny2M8Oj9G2c7JuK+0vr3Zz7XTNjw9Sus8WcFfr706PVPj4/85LCxEura5vMKxr8w6LDEsOjIt\nQe+1rKyvsLW4yz0qKSsuMzY6W7K3rL3Ar8HrSj490brPvbG0vMG60c3G09nO0U1rX1NvSi4v\nvGMzRDY231MyMkRXPjdFPsy9XdlTza25yc0+Y7q6W0pL08vJy9m0trO5Y0xOOzIvMUV3xbiu\ntLezr8FvV0EzOjYtQHdn79VvR/d3PTxNUUVRVS9My1PXzNHI519XTUdLTEhFVTs2TF9Dyb6+\n3a6svK2tvMbEubatrbiurbbBuNEpOU42Qkk3RcbAxcdfR0U+KiIiIiIkKCtE71dXP0xRY1E/\nP2ddu7G0r6ysrKyyt7Kssba1tL/Dwc9vuLGxv2++/8pONElBV8vVK0BNPDQyMiwx7009/zwy\nNy0nLSgoMS43PefTtLy7vs/Oyms+PtW8urSusq2svrq6t62trq2tra2tsrCtvL++v9W972Nb\nOkE4PjY2LC8mKTAqOS1ELjs+MC8uLC00MkhKTF/Nyb3Xysn3V9e+X83nwNu4u1m9zr69vv/R\nur+yt7e9u7rOvtHP979fs8W+xd3IQudPQlXvQEc7OT8v/yrRP78/VetEyEvHXbjDtd+zd7W8\n00TRa0//X8swxTlZPl87YzFfPj28V1FVZ2/fyUpJd7pOzcpbyLvRuFevV7p3tj2uvb9vz8JM\nzF+9M8VE2z3/O28v1S09M+swRDxNNkJOW01Pd0/jWVG6S8+3L6wvuFe3b1esRqw3rUCvrj+s\nM7rfxFdVu1GuNbU3uEW6OcYub0NZNT1KN9sw2Tw8SUw6Ty/OML9NPdFM39lFvTjH0cjMzLrB\nwbbEuL3XrUyt67atv7nCvrzbt1e2UbpPwMzZU933SEhKvDfvN0JAQixGI04qPCdCJElMJFkj\nUyw+MjE2RT88XUhHxj+vU7m3v7usa6zMrLutrK2srK6suazLrLmuv66turO1tOO5ys/FU81M\naztKPzdAKUsiOSkrLykqLCorLihHI04oPzI+QDPPOl0+znfnw3fCzLr3rf+zuq69tK23rcet\nrrmsw6y+razHrMuzw8y6b71L51V3Tl8+TTfrMGMyNMslXTAvPj42Qjc1QTFGPzrVOOM/V1tZ\n02tOv8vTtlW2U69BsUZRt1G2d8lfu8jJV8Bv17xEvdHTxlm4S8nGSrpKtc1nuUK3XcFjRrhj\nd87ZyffZzUnGT83jb1lRxmNv2VFnU2tRWU9JYzxrSENJPUo3STc/Qj5MOlE8RERGTU5bW2Nf\nd+NV2V3Z/9Xv2dXNy83JxcfGwcq+xL+/xbvJvsnJycjN38rZyt/Ib8/r0+fb3+/jd2/nV+9n\na9332dfv0+f/11PbX1tdR908bz1HTEFRQltAUUhbS1FKSkxHT0RJQkZHPko9ST5ORkpMS1lL\n61nb49/P0crbxc/AyMHHv73Dur+4vbe3ubK3sbK2sruzu7m7vbvDwMTIytvb43drT1lGSD47\nPDk1NTIxLy4tLC0rLSwtLS4vMzE1Nzk8PUJHTFFVV19v39PJyL+/urq2tLOysrGvsK+vr6+v\nr7Gyr7Wytba2uri7u7+9xcfL0dfvd2dXU0tHQz89PTg3MzQyMDAuLi4tLi4sLi0vLzM0NDk8\nQ0ZOWV3vb+Pf1cnMw7+8uLixs7CysLGzs7W2uLi6ube3urW4ure9xMbX2eP3U1VMSkpHTkRO\nRkJFP0E+Pz04NzY8QUNCPDg8NT47Pz8+QkBJTedRTuvDW+9MTP/Ru7S3vsPDvL66s7a3tra3\ntri8vMXIysfX51VTV0lPW11dVVNMSEU/QkZFSkNAP0hGdzFAQFFvTTUrR0m+u0s7191Z02c3\nSOutray5wE/fz7m+uMK90761s7m3srm9wctPQE5TU2drRkhITFc9MDMxLjE2LiwuLzM5ODg+\nOkI+PkQ8QlNvZ+PXy8S5tbO4tbOvra2tra+vsq6zsLa0tre5vL7FzOP/X1dOQE1NVUt3OkVL\nRFU+Rjg4OD01OTUzOD9ER0I/OzxFQ01NRmNrX9Hn2d3Oyr+9w8TMwsa/vru/xM/Ryc3Tb2tX\nd8zMzF9CPT1K9/9XSj4/P01nZ2dPa013b8zZ59/j0c7KxtHr09HGxL7CztvV09nXzNv/X1dR\nR0pKWVVfW0s/QEM+QERNUU9OU2tnz8vM0d/P48rCxMnPy9vDz76/ycXPz+PPZ99bVWNO03fr\nb+vjX+PJ42Nv63dTd8pHPkZZT0vV70I+RD44P29BPkU8Oz1KTkZDVz89Y0FrX29b/9nXvMm1\nx8nFxbS8ure4vLXHurW7t8OuZ8W+79fLuP//290yRUI7S1VjSTdCQj5ZSkBROVs/V91R39NT\n72t3yte7xu/TTE5v/2PT0dHv68hX49vbd1nKTFFfdz1MzndPX8hCTUfjd0jIwzhdy8vLwr9n\nOjI5Ljzd58K62ctryr/AvbxfTEIvNjZFY3fLyGfH4//O3cLDzLvDxba9urvBzmvX51dj61Fr\nXV9fRudLRllEPj48ODUySER30e//a01jXc3Fx7TBur/J18fjxcW/v8LGzu/PZ2NfPjYxLy41\nOknfzMPJwsvR31NKODI1MTtOY8m7tbq5ubm6v73Oz+9f2dPHvLvCwutjRz9HOjxLPD9BPUpZ\n/+Pr998/TEk//0/fY1dXU2/O/8y+077Gv8a+ybrGxs5Z21VVw8jJusvK1Vf/X0lrU1tHVV1T\n/8XIwL3Pyk9MPzY6PTU8Pzg6PEY9SO9TU28+PTo2RkBNye/n505XX+Pnzb/Hy7/Py7y+t7K6\ntbq+u7i5trC4urO70bvNx768wsnBy9PFymfOW1dGOTQpLSoqMC8tOS0pLyUqLS04LjM0LTw5\nRcPIuLS+tsPVwNPbucy8z7q+wa6ut6yvvLW9triyrbG4tMnHyNHDyczEd9vnU05IRUo+Tkk3\nSjtDSUNJPz5DNjJCMTxKOEU+PEk9WWdTXVVIRD0+UUPXzM2/yN3dZ9/R28S9zsLE1+vNwMe7\ns7m3uLm+vsnKz1lrR0T/a9PHu8vXa0Q2MjQuNjg6PkBIX1Vny9P/zttLS+NOT9/ZW2tv53dT\nudHvusVn03fPy76tsbCsv8lnQD02Q933wLLBvsrTd0RIRC41NCsvMTc9OllGPEc5MUc7SdHJ\nuLi0r7i1ubO6vL7KZ1dPNlNbT7/P0cXf491rWff/3ePLydG9487Ka9vV/3fX/2vvTk1OT0Hr\nTlPXTUxvQjlZP0RGUTlFTjZGRFFr787BzO/HU0Rr79/HucC1sLS2tLO8v8PO29nR19vH2d9d\nTUY+PkpDRvdHRO9FS048RTc4MzU4O0NFWWdfVev3SXdna+d3zd3NvMfGub7FuLzAw8O9w729\nxM3b2V9r38jFs6+3srnDzt1PRE1BS01LXVNMT0hJR0JKTT5fSExIPkg+QUdLV0//W0xLQDo1\nNS4vMTA0PkX/X1/vVV/3783Xx72+ubK5sLWys7SwtbKztbi/vr+9wc7TxlvLwN3H1dFvV189\nRmtNR01FPlNFSdNK0989Pjk4MEtIW8PFv8fXVUQ2Ly8sLjlFTtXJ1+9KPjo2PExC0bzLtbjF\nvL6+vbu4wMHM3dl3373IwbvRXWffTtvOx7/KvVvn519vXf9RSEZMRk5r6+vZ3V9LSz46TjhK\n90fKX1P3T1lZ40v331vPycjIyePr10tj3U7ZwdfdyF9fzt/b2+tbTU48TzxNd0/r9/dV60RH\nRD9NQt/jy8fByrzXv85vylnNzM3BzL7F68lnUdtMz9lbxd/Gvby7wsrvPFFKOHdja8/X29vv\nZ1NEODMvLDA3O2vLy7vB2VM8Ny80NEFdV8vVd+f3Rmt3Quv3Z//J1b2zurCvtbSxuL2wubyv\nuri2wMfZz01fV0BTPEI9R0pIVU1DPDoyND42Rk5DZ0FVSkRRS/dVZ1tL/0xr29O+vrm7w8nv\nWVHj69vJwtnM52NNS0xIUVdO21vO09XKwsfRwdvj2dNvyef/zNXK/9nZd09jSEVXSetOa3dK\nPUBGPlP3d8vMXedJR9V3xcDJvmPVyGfJw8XJusDNxcHJ0dPrT0tZUU9VW2dORF02NUEvMzk7\nPT5KPj49OkdBTc1n38Hr38rj983J2dW+zLy6uLC7sLe9vMHK0cd30/ff4+vVV9Vba2NHa0FJ\nTmf/zc/IyddrWW9jb9Vdb+NRSE8+PD5KOD8+O01ASV9fV91rY8bX0b/Z58LJ47/b17xnzcpT\n3/dZZ+Nd2+9X411j/9fZy8L349NLTldKXV1TTVtZPWdKQsj/3evbW9vb38/O38nNd8zrzs/R\n0+/PX1HdVW9fU1VXRExrTV3/T1lbTEhKTD9RPkldT1FV/0vd6+/PyMDEw9PLz9PEvry2t7e/\nxs/ZZ2Pn5+Pfz93b3+t3V+t33dfX2WPjTmNFRz9CSzo8Qzk+PTpKSDxIRG9f0cfJusjLw19n\n791vxcfJxdfT129jUWdVa+NR0U9V3UxV39NZ/1tPZ1/r3+PR4+fr/87J4727xMXI0dvOV+/X\nSmdrVUhjSj1jTU9Vd0Z3d13X28vGztfO1Wfd213R02fMd99fd/9XY0JbSEFPRlFMZ19NUUFI\nP0pCRVNJd89db+fPzt/CysHMwr/Gx9PIU/9FXVtP0UfrV11nWVnbz9vIwse9xMPGycrJxc7J\n02vn993vyWfT42/nW1lZ30/nTkx3VVFbT0RPX0J3UU3jb3fR/+vP41/vW29ZV1VKVVs/UT9E\nPj5AQj9FY0Y+SENNRXdf0+PAvt3E28/r28LOucW4uLm4vr7Gyetv31f3Y1NnTutfd11bW1N3\n39nZz8bNv8bIvr2+ubzJxsF3zW9b60lrZ0Y9RDwxPTMvPDg5OUU9O0hIY0ZM1+Nn181va+dn\n6/ffx8zdwMzjvsjEvsfGvd3TydfJwsx3x2dVy0bn52/Pze/nxO/HyNfIzNPbxmNXX0lXSUZO\nO0Y+OjM5OjA+Njo2P0s9TUpTa2/r3dPPyc/fyNnKwMfAv7zFvr7CwMTAwsXDw8PrzMLbytPV\nY9n/WWNrze9T/11VY1t36/9TZ3dPWUZFXT9EP09CP1FITklXTlvnX/fdz8njw+fr191fb/9T\n719n719Ga0lMVU9db29da1Hn/2Pjz1dj1/fnzd/Gz8/ExMe9vrm9t7rIu7++wMfGzdnZ593n\nW1dJPEM+Pj05PDwvMi41NzY6M0FKOj9PSVdP51v/b9nC08jFvr6/ur2+wc67vdO+xMa5wL3I\nxMbEycfK0cjI283L18TE1cvGY9XXZ8tba11TRkhMQ0VAPjo5NjNDNDQ5Mi4xLi1DNTE+OTU9\nPD1dQ13VW9vRxufEvse6vLaytrWvtbuyu766ssK4v727vrrDwc7PzcTH09PL20tvW1lZb1NZ\nUUhTQUdKRUdMTj9VS0pKSENCUUlnUf9LRktTSk9rY9tbVU9IW1lvb9/Za9fn2+PR39Hf1dnn\nz9/T0crVzc3Ozdfd7+tdY+9v919XUV9OX2dbY+NXTndNY1dXU09PU1tvW2v3TmddV2v/1Wvb\n7+/O09++y8m9xsu+0cjE2cPT79Xb/19Xa1fOb2ffX+PT1efvV9NRT/dI3WffU0nVQ2tP91lv\nd07vUWNOQddL699Db1tHz0rN2UvLZ9XRS87L3bpjycdfvW/v00vMUdFj4/f/V2fdP2NnQONH\nU9U9bzw/Tzo9U0I6RTxEQ0ZTTUrKS8vT3cHb0cnJxsS908C9ybS4wLTEurTGsbfGsr6/u8DN\ntcHNusvNw0zDbz3dQ0FnQTJOLzU+LTk0KT8sKz0mPTYzQy87PTlMVU7KZ9PPyd/AxdW5yr+5\nxLm8urfHssTNutO9vne14/e478O7/77dSbdJ0chN41tE70RXSD5nPVVbPllJSFtO7+M80TU7\n3zDn4zbnO0xfQNFPTctJV8VEyF1nzFPGvlvB09e9yrSy16zfvbLXtbnPu99bvlPHzk3LRznE\nM9H/NtEw/1843TxDX0BXTkBRPUBdP1VXQe9FRP9GV+tCY0dRWT9jY03PY2/D68XI47rHwba/\nurfBtrrFr+O3w8+/0du5Z8fTWb9f3c8+6007Zz4+XzdIPjNHNjlGPEE+QUdAS09OVWtX12Pb\nyufHyf++yr6839HK68fA38/302vIxsDv3VdRz9nja193T2PP/2tNTVVn4+NTTEtLVU9LTkVn\nXUzjSV9ZWevf5+f/779d09fv1+fNyeO+42POW9PGy85n3c/rz/9P219Ty1vXZ9VnX19dY11j\nU+Pd3efnV1/fV9vfzXdfZ11f20ZO2U3db05ZTV1X/29Na0xRV1lb/3d3Z/fX29PX2/fZ99XL\n19HEzsLVz9PX383J1czb3dtXd01j90ZMQkBPREA/P0ZRRUxFTFVBW0tb71Nvb07f29vRX9nb\nzcD32c93zevR08zG0ci/zcnT58/Lx8DFxdvV2dXV09fX49fn51ljXVHdZ9vbU/dVZ3djWVNM\nUUZMQzpCPj1HQEpJREhCT01ESE9N711VX0dVXXfd293P79vbysbAv7u+vr28v8LIzcHBv8jM\n2d/j13ff2///Y+NjZ2dbXW9LT19OV1tNT1VVVU5NSkJORktTSkZMTEhKRUdJR0lRTlNbW2v/\n49/VyMfFw8PAv72+vb+8vr7CxcHFwMHJxs3RzePj//f3a2tRUU5DR0ZCSkNCPT09O0BCRVVI\nTVNRd1//193V0czJysvP08/Z1cnn2+Pv1etnX2tvY29ZW2vn//d3a2djW01NTElOWUtMRkxK\nTE5LS1Vv6+PXz8jEzMnEyb2/wMHEx77EycPGy8rJ29fb/9f//3ddb2v/X1lZW1VZUVdXd1tb\nTFVVTU1bSk1NU1VPX05fd1dOSk5NVV1ba2d34+/r6+PVz8jHx8vHzcnT19vj3evf5/9dV1FT\nUVtTTldVTU9LS09PW1dfX1dfZ2/n5+vr3ePb3efX29PT08/b39nn39PbzM3NzMzRyM/XzM7P\n29fd09fZ3+Pva1tVTk1MT0pGSUE7Pz1KS09RVV9nV2N379/f49nZ3dPOy87M0dPV19nP2//r\nY11fb//v6+dva/f35+9v4+ff4+fvb2tnXVlTZ1tdb2N3a1tjY19rW1tdZ2tdb+/v32tra2v/\n/2dfXW9b92tjVVdVT1lXY2//3efn59PNy8vLzcnJxcjIxcjOzc7N2+v37+dZVWNfZ2NdWV1b\nU0xOVVVZUe//d+vZzdPOz8zM08vNzs/b0dvf62drd+9rV1NbV01JS0xVTUZLTEpMSUdKQD49\nQ0lDR0VIU05OUVtb/+vf19vT19fR0c3Nz8jIysfJx8rV39XXz8/KyMjCx8nJ1c/Nys7Xy8rJ\ny87Ry9fR0dvdd2tnY11dV11bVUpEQUdEPzw+QkA9QENGSU1VTldrd9nVys3NyMXDxMXFyM3N\nz9vP2d/j9+/vb/9fZ2djV1VZU09XWVFTTk1NTUxOTU5NS0pKTE9ZX//d3ePdztfT29fR0c3X\n0+d3693r79/d2+d3/+f379/r9+vv5/f34+N3W2NfV1t369/r6+vj2dnf29nT09nj29PR0dvd\n29PR2dvXzM3O2dPX2d3V2+vvd1tXWVlNR0lJTEZBQ0lOTk9OV1tVVVVjZ2t3d9XZ09XZ0d/n\n9+v/b1lRS0xLR0pLS0tKSE1VU1NOV2NjY2/r69/Z0cnNz9fRztfd6+v3b//v59nX19PRzdHV\n09vX2dHO087O0c/LzMfJx8rKzc/b3dnT19fVz87b29vj629fW1VTW1FfU09RTExLSERAQT5D\nQD9DRUBDP0pMTU9NXWtjY1tnX2drb/9vd+Pfz83Kzs3IxsPBwsTGycPJyMvV1d/f62dvXVdZ\nVVNOT09PU1tdX2fv7+vf929nY/9nZ2dna19na2936+vd49/r7///7+/f39PT0dXX1c/P2dfj\n5///73f3b/d36+fZ0dXP0c/V2dHZ39tra11RUUtLS0lJTUlETEpOT0xPT1VnX2/r6+9r/+vn\nZ2dnX2NXW3d3//9v//9nY19jZ05XXV1fU1trWVdXU1dbV1FVVWdTd9/b2+/X0cvOycnKyMvR\nzcvFxMG/vL++vL29vry6vr7Ex8vP0dvf5+trX1ldWVNPT0pBRURHSkxLRklLS01MTUxNTU5X\nV1dfVVlRV1NRV0xKR0tESEdOUU9TU1tXX11nd3dr7+vb2+fd6+PvZ3ff593V2efvd29nZ3dv\n993Z29fX1dfTy8nDxsXHxsTHycXFxMbHyMfGys7P2dvn72/v/+P35/9vWVVVU1dVV1tZX19b\nWVNRUUpMS0pOTU5MTElHRkdIS09RT1dZWVlXWV9fX1tfb3fj3dXX0dPV09HLzM3Nzs7Nz8vN\n09fb19Pf3efv/2NjX1tZVVdTVVVXVVdPT01OU1ddY2dra2v/9/9r93d36+/f9//na+vj2dHI\ny8fJxsTExMbGx8rLz9HV29XX29XV29vjb2dvY2tnXWNfX11fV1FNTExLTUxISkpHSUhJSUVJ\nSUpITEpHTU9XY2Njb2vv5//v6/f/7+Pb0dPXztnV1d/j5+vn//9v6+PZ2dPKycfGxcXJxMfJ\nyMzKzs7T0dfb39vf69vvd+93Z1NbT09RUVFNSkpLS0tRUU5PTEpMSUpPXWNn9//v///3393d\n39vd69/d3efn929v5/f34//db2NnZ+93d93V3dvd4+vj99/32ePZz9HOz9nZ429v///n7+//\n//9dWVFVU09VT1VPTFdTU05RW19XT09RXVlrd3f/b//f693n6+fd7+f/9+vvb+Pf3dnf0dXT\n1c3T0c3OxtHLzNPb5+vv79/33+fV4+/373dvb2fn7+/rZ+fj/29v52/3Y3dfV1lNX1FRTFNP\nT0xJS01LTkpRTElHSEtIR0RISUxMV1lv9+/n18/TzcjFys3RysjMysjCyszLz83Mzs3KyMjK\nzMzNy8zJy83TztnZ1+Pn793f/2tnZ1dTT1VPSUpJTU9PVU5LS0hFSENERUNHSklLTExDP0RF\nS008SEZMS0dGSUtPTUpMSUhCSVFVT1V3b//3/2/v1dHHyr++v73EzcnKwMXLzMrNz8fJxMbH\nxMDDvcfFy9nrX2dnb11TXVtOT2Nf7/dva1/n42NfZ1lZZ09NTkFKS05dXWdfVf9PWVtbUU1G\nTkhDTUxITldf/2Nb7/fj49XnzM7MzdPRzdPXy/fO69nXy8/Vy87P1c/L28/Xztf/0e/f1dPN\n999rb1tbXV1XX0tTTk5MP1E7Pzo+Qz9LSEhPU09vb1vb39PMzsPEv8O/v768u7vAvsO9x8zV\n3WNvWetnWVtVTUxbVVdXVWdX42/XZ1lPSU1LR0ZLR01DSkZEPkdKTldr49/J59fTzdXZz8jX\n53fZV19j71Ndd1lvb/d3Y2fd9+PXz8nHyb3BvL+/v7/Av768wb/DyM/b32NFTkE8Pjo6ODM0\nNzY1NTU4PTo6QUpHRl9db3fj59nKzMLGwMDDvsbBxM3Kxb/Izc2/wMrJvr/AybzMwci9wr3A\n3cPTyNnv/19fTldNVVtMSU9JRUg9R1c/SDtFPzo8OTo3Nzo3PTo9Pj88Q0pMU1drd+fd39PZ\n59fNx8O+v769t7rBu77AvMPGw7/BxMPMzNXf7+/va/dnWU9NV2djX2dbXU5VQ01PU11XUVVR\nTD9VVUxbVXfr1czRysTO09XK0czFyc/Z2f93z3fT63dra1tfV+9n9+/j4+vvZ/f/3//r4+dn\nZ1dbUVFPVUhDRkNBODtAP0hHRFNVX1tvb2vv283Fxr++vru9vb24v73Av8rM29Xf7/9nU0tK\nRkxGS1NKV0pGTUlMSUdCP0dKR11r49Pd0dV31d/ZzMnPxMS7v7zAub+7wsTPxM/n91tbW1Fb\nZ19d/3dvZ1NNS0tNU1NZT1NKSkxRTU9NSlNPTldTT1FdV1VOUVVbX2NbXf/359vbz9PrXedb\n53d319XO08XJ0dtba2dr/+fPzM3NzMjJzcvTzdvM2dfbzt3N38vF0dHfz8vPz9HVd9dr6+tn\na11bR0hHTlFdWVlNR01LU1dRX1tfR0tKQUI/PTo7Ojg7PD4+SUJBSUBLSFVZ3+vXzsvIyMq8\nvr69vr67tra2srCxr6+xrrKztbm7wMbO12tdX1tVVUhOR0xBSUE/Pj5APEM9QDs/ODY5OTk1\nOjk+PEA/RT8+QE9jV+Nnx8PEwMO+wMPKxMvL18/Zz9fbz+PZ5+9n6+fv987Ry8XTzMjJwsDL\n1dXDwcfJzszHwOdXa2f/d05JSlvnX0pDPk1TUVdNU0VbVUk9PkRXU19Oa//jVVldS1VMX1XL\nvrvvUz5dv7rHwrrVzefZ19HK6+fn1cbbPTAuzr2ttNtIQDw0ODhNb8G9vFdnX/9dTl3dwut3\nz8RFTGNvPd/328O9/0bdXUc/WU7/T2dZTzw1NVnZSz41LzRF3dlrW9/Ty7+9vtusrKw9LzT/\nrKysrK+vtO9GOz7Er6640+vba0c+OEHjwWsvQzovLzEqKUDnQuPMXzxNzGfru7/BucDVa8HP\nx8bP1VlnWbu4zz85L1ljxVFK213OuCQpr6yyNSMoKKyrrMqwrOffNigpPbeszLzDsLTTST0+\nu7mu32P321U6MiswQfdnb1fIztdTPUNfuruyt7S9uNPZ18HJ1dXvVUlfRTY7N0I6Q0BbXdH3\nWzk2Oj08Sc3fx2eyrSNPra2vUyo2Ma2ttNOtrchTKykqScvNN9u4rc0+ODnXur3VX9u3vkwx\nLDlKY2NHd7uwtt9nY8C4tbu5sq64yklZ59PRV1Nn30s9MDY6QDw6RF3FTkFCTT5LV1tfuLBG\nK66srDolLTe/rLrBra2wUSoqNUHfX0TZra3AOzhT429MTNG4s8o7LzhDPTc7Ss2yrbbXz8rG\n1cjGta2tts5j2e9nSElr529EOjQyMjQuMTxLRD9jQzkySG/nUdHnwLvnsOs8raysQSvNv66t\nrqysrLM0LUxVOTNXya2srMHjw7lRNzlT193vTz9DPS8mJis0PkxjyL282V1LV2PTwLW0t8nj\na1U+NTg+TU9MSkNGQTw5SOvf39fOwsjvb93ZzdPBure9uLW1uVXbvrPOW9+trKxAd8a9Slf/\ns665TDQ4RSgjIy1FS13jwLm84zs5R1E5Nz/ZzNn3W93nXUFD2cfKxbu5tL3My7+5wM3Py9f3\nWUs/Pzw6ODk1NDY+Pzo/T29j38zNzL/IzNPOytPRx7m8w7aztcnMwsrTvclnzK65SzdTUTo0\nOk7JyVE1PUs2JictNDQ4Qte9u7u7s7bB09nKzONn3cO/ys7Ju7u9vLzFw9Hj393b3d/3X1FM\nSDw2MTAwLy4wNjc5QUdJT2/j0cfBw8G9vsLLy8G7vby2t7q6usrLxcvTxsv/29PnU0Zv51k+\nRkpEPjwzNDg5MzdBREFFUVNRb+fr39HLyL+8urq6u7q/wsPIzs7O3f9vd19fWVNOTltbV13/\nb2NZW1lTU01LTVdfW1tf///36+/n087N29PV1c/T3dHPysrO1+Pr72dTU1VbT05FQUJCP0FB\nRkxVVVVZY19dWVNMUVFLT1NXb+fd29HIyMXBwb+9vL69vb3CwL28v8LFwL7DztnR3/9ZT09O\nSj89Pj4/PD1AREdJR0VJTUtPXevf2efd49tnV1dfa19dWWNdT0xLU19nb+fb0c/P19PN0c7M\ny8rDysfJzM7Pzc3R09PR1d/n6+v3a2NfY1lVT09PU05NTk5VWV1fY2/v72/37+vj9+//5+f3\n92NvXWNXVVVdZ11jVVVXUU9LTktPT01NTE1GSktMU2fd0crGxL+8uru8vLq6vLq/vb7Ayc/O\n09vj7/9v7/9nXV9Xa05NTEdTV09OSlFRSE1IUUxZUU5NWV9TU1FXT1dVVU5bVU9OT1FRT09X\nW1lna/fn39XL08nKzc/Oz83NyMrHwMHCwMPEycrJy9XT0dPd3+/na19TSEhPSkhPW1VTWVtV\nTVFZXWNjd2/d3d3r2dXb6+fj/+/rd19bZ2NdW2NrZ/9jY1FZU0tPTE1TS1lVV1tTVWNjd2Pr\n9+fr99/j59/fzs3NzdPVztPj29XO19vMw8vKz8/LztXX387L1dfd2ePb3/d3a+dra2drWVVT\nT0pNSkVGSklFREtLTUZBSEdEQ0ZDSk9TTFNnY/9n49nj2dHTztHM1dXTzNPVzdXX1c3X1dHM\nysrGx8XHwL3Fxb6+xcbJzMfJ0d3Z2f9Za2tZWXdjTmtTOmNMODlTRDk+Pj46PUI+PkJFRz1T\n90VCVdldP1/LRES77zpZvU1O28XIX9W418a528y8ysrZvbzfQsex1zi8v29HwVnTzNfTxme5\ny0XBtlPvxf+972fMSP/FTUNNX1c3OUdbOFVGQFtOTks4b/83Rk9LU1fr2VfZwNX30dnL91/r\nVVfvS1Pj39HT0ca5vb7Dvb3Ezd/TzN/j2d/Z2e/v187d/2djUUpBQUFNVUpLWXdrX19XZ+v3\nd1NV919JWe/vUU/31VFb99VO78vRTd/r/03v3V0+2fdDSV/nZ9X/2z1Z3ddDOlu1zndR9+/M\nvcH/07C1xOfXzt1vX0BC2b2+y763tLy+zV1LUUU5MztDTl9nX+fMw8fb72v3Y1dMTW/371tv\nZ29rVT89RkRFRUlDQ01MQ0RTSz5NZ1lNd93jycTAwr/DyL21xMG/xdu6xO9nys7RxL5nT09n\nb1l33T1300lMSU5vT0hfa0ZT687V/3dOS2fZz9/Jwb7IxN1ZV1lTR0FXY11ra1NNTldnSlFV\nUU9Zb/drZ9tXTld3d+ffydnKwL7JxcjM6//f32/d093X18rO293r59fX329ZTldTRltZT0NJ\nV+fVzNlLR9HByNtbPTtO00lIUVdf78zNV0hdVztK12NBPzk4O9vCz+/Hxs7MyN0/RGdTSN/L\nx720r7G6uMDNd91nTk7n2dvIvcnOy87nX2tbSk9fZ//f1d////dTUU1ITk9XVU9VXVd3b1lV\nWV9OS2P372N3W0lOX1lvb2ddY+fv/+dnTFFRU1fvU05rzMLAy1tLV1n/02dn/0RL08zZWet3\nSu+5usXj905fv7rMa9vHyL67ushf/9tv68j3RU7XT07XXT06RPdCTvdKP2fr/2tV72dVxsLn\n59nL0c2+v+PZztvj49vvTFnda2fva19bW1lfZ1tr6//jW29fa2NLS13r911b99lnUV9MVdfn\nV0ZId3fT38dbLEu1tetTOCkvPbutuLPFUz1O0f8uKjEtQ8asrLK6uMvEvbpRNzQ6P3e8tsLf\n187O08bLXURMY83AtbW7xMbI2etjX0M9QU5dd+//Q0JHSEVLS01JT//3Z2PvXVVfb2v338//\nY2v3V1tdW09MX2NTW+vb6+PMzetZZ1tEXdnZ793Z1edf39dd08bX6/9ZUefNwb53SFFOTtPM\ny9VrW/fvxsLdU0xbXd3HyN9PW13v5+t3W0pXWWtZa2/v59/n62/31dv36+tbWWvv2/dj0ddj\nX83jd03f1d131XdKTnfR6+PV/1NEV/ffy8XZY/9bW1tj6/9TV3dbT1XIzGNHPj08P2PKy9fb\n/1NJTD88PD5Gd9fFvsLFwMXGycvnb1dbW//v7/9n7+vb29PV28rb1+Pf2dHOzcrP1dvX09/f\n73drW1dTWVdfU1NOUWPn3dvP31Vfxcv//9XrP013/1n/2/9M//dvSe/Hb01EZ2tX58PCyN9r\nSEtEPjo6PDs6P9/Czd/j19nV53d3WVlbU1Ff19nb3ePRy8jCzc3Oxsa/vry9vb2+zNvX619P\nSkY9PT5APkZHX1lr79nOzs7X3eN3629va3dZ3W/Z79/j9//n3c/dz9XT28/b0dfVd11OXU1M\nSU5CQEZVS0dPX0tTZ91379njWWdr72vv5+9ZU2P/a+/n5+vX0crMzs3X72v/W09RTkxGS1tr\nX3fb5+/V09fV2c/Z29nTz9fX529nW19TUVlfV0/r29PVxcfOyNHN08zDTMzN72/LZ2NFy2ND\nwkhbTUdMOWdZTlH3XWvN5+vT2dfr411fWVtba/f/d9vvX9/j4+fd1+f34+//6//n71tZX01T\nTVFRTFtbV1tRW1lf6/fr1dnV0czV29vX/3f3Z+f/529r92v///d3/+fv5+/r7+fd5+/v32P3\na+f/7+P35+Pf3+Pd52/v393Zzs7Xz9fNytHP0dVr5/dTU0Tf0z9OXz88PmtVTmPXU0t3129f\na2NHR0hdT0NTzFFd2dPGPm/GX+vbyt9L69NbT+vrW/fNytHTzcfKzr/Dzc3T29n379drV1dd\nUUxRU0tESk1PVXfr7+fZ19XP08nN1c/Z4//v52t329/j99vv//ff7+vf1+fn7293X2f/W09n\nWWNfXWddWWNfVVtTU11TW1dXX1ln/2vn4+vZ1dnO1czPys/M19Pv7/9fV11fZ2dr/2//Y3dn\nY29jV11dY1dnW2NfZ19bV1dVT09MVVFNW1tjZ293a+/n7+/b2d3f39HX19fX19vf0+/n3dXV\n2c3PzsfNyMnHxcTIyMfIyc/R09XZ3dvn5+/r92dnWVtdV1VXUUtKS0VFRURES0pJTEtLS01J\nT0tOTlVRV1NXT09OWVVXXWN3b/fr2dfZ2dnT59Xf2+fX9+Pf49/T5+Pd39vV19vT3dXV18/O\n0c7R1dXO183/3dHZ3+vf73fr3+v/73f3Y3drY2NnX2ddWWNbd1tra2djXVlbWVtZW11jb/f/\n72//d+vr/+9vd2v3X/9n52fv6+vv53dvd29v7/ffY/9v/2dv71/37/fv73fr/13d/3f34//v\n//drX1t3WVlvX1dbXV1bXWtnZ2dja/9fb3dn9+t3a3f/b+vv59vd39vb3+vja2Pd/2d3//9r\n2+P/387r1dnP0dPZ2dXf793X59nP987Ta83Oz9fr6+9n62NfXV9VV1tOTlNVTE5OSllRWU1n\nZ2tr3+9399/v5/fn59Pb3+Pv2+Prd+fv3/9j91lfW1NXX1FfV1lfWVtZU/9dW+db2e/329fZ\n3dPT19Pf0dvR19/T3///d9v///9Z93dra2tdU19RV01ZT1VXV2dra1tnd/9369/n2efn1dnV\n19nj793jd9Vnb+fj6//fa2//7+d33Xd34/d3Z+9r3d/V0dXr39Xf3dtv69/jX2vn5133d2f/\nb/drd2dnX2NPW1lZV1NnU09RU0xPVU1VXU1XXU5VXU9rWVnv5+Nd3d/n/9Xf593v79l33ePb\n3dPTz9PT1dHZ1c/P78/b4/fn711nW11r/1tv62//Wevva93rd+/P29/b39vb39XZ19XT59vn\na3dvW05bV1lRS0pKRklFTk1NTFn/d/drXdNrXefV79nR28rL18hnx9XvxUc/vfdBv8A8wtc9\nU8xdRtXRwi+7PWu7OMa1QUq5zji2OErXYzmwPzy2ON9b50xT389VSsRL42/fSknr71lGVb5K\n33fr69nn1VvZydfn28fPytnT293Ozevn2+Pd/1FTUf9vTVNv/+/dV+PZ0ddVVWfKZ2tv78pb\nQFVrd1VCP87May9bvsLTd0hRzs3/RE3IwNtfb//T109N29lVRNPG5zs4Pm/ZwcjIv7a9WT4+\nPzc8Oz1MvrO0vrmvtMlVRD45Ojs+W7/Da01TSzo1O0z/0c7Iure2v9fVuMvOxc9d50vLU9HR\na0DNSVdOvtlL57XBLi+urccpJkE+wsnO262tyTYsNSwkJSguR6+tt7utrcTnTD03SNnvTr+2\nvetbV05Z289v78W7wsXCv7m3vstfR0xGPkBfd/drb1NBR009SE7vY1PVwXc/Nz333z5frqzL\nRcm760pXut/Iuss9tKywMy9Hb++709m+t8kvJy06Kio9Q125rLxN2bbMR0tdX9O+utXRu7nv\nU9vVb8jCwd/Mvr/Z59HfX0pBOC4zNzo6Pj9FSD8+Nzk6Pzpd38nbz7y821XLra62zF27rq2+\nW9m2wL6/viv3razDLSlbTsvTzWe0rro0LC01LjEwMTu6rblJT7/E1VtZRG+8uNVT37/FV09f\n787AzdXdxclvRUZNS2fv91tdV0g6NzU3Njg7REpNU2NnY03rxsnGwcK9w7+/vlnZtK2vss1j\nObyvrVE4vK13NEe6xc/J2Tk5RVNATOs8KzdLPjVbxl9DT189NU/XSkvOtLu+t7TAvb6818/E\nv+PXzsT/U05LRFNv/0tNY2dRVUtBO0zrazs6P1FVb0k+SGtZPj/PyNl3y8VrWcC5ubG3wFdb\nyLe5ub7ZO0fMr733T10+NzzZydvRbysszq9nLCYuPe+2t+9jv8Y3LjVIP07O02vCra/Jzr/d\n3cu9zc69u91RUVE/SltbPUprd11rW1lVb1tXT3fO01c+TU5nT+PrzMrH0/9f/9fR31/TybjB\nPzhrr7PBRT7rt7LROUHJvj41O++2rsk0JyxTz99ES+/D11szOE1rZ1lPd8XJU0NASufOzm9b\n2bq4w8fGxsnK51VR48HIWVFMUVNJRklP6+9b9+vfy8zPzdvX2cvN6+v/Z3fnW9nrzONdSlFZ\nxMZbO0zP20NLZ105O85rPUDDTVtR2etX2bo117PBLzBbrsvBwsVVybe7Qk53d0VVV0ZA09dn\nPVHba13/UUI+VeNXRk9fVVlv42/v18rT0869wMPJzdXOwsHZ09HXZ2vv419bY0pHU1lDS0xf\nb1/v70Zj38nM68zAz8Nra8PHsrlny9fH01XIvlFvS9/jzclJLTnVzGc2Liw5a9dPMjtNPTlD\nzkZRXVE2PFvM/9u+vb28usjb073H083L08jCvsvZ1dFfTU5PW1dTW1NAXVlvT0prX2fPWVdf\nzbrBd9vPz81RRFnbvLXdU1XV5+NPWV/V72M4S9/nVV1X2T9Fw81TWXfDvk5jxcd3vlVMSsy5\nzOvn2V/jW+/dw+vdRUtvb0rb183jWUpFOz1nUWtVRktVT3d3WV1TV8vNa/9n3+dfTk1K/2v/\n12tnyt1Tb1nvvsjO1+/Z690/48fB1XdEUWNXv80+z9tvxFHj2e+7wz5ITOu4wf9dW8+497vR\n/3dd/8F3vb1XzcxXd8e/yD9ARj9K93dnTmdPOjg+ODs4OUBGXc7ZY2d3ysTBys/Pz9HPzcnJ\nycbI59/Mb9Nba+9jW+/Z33f/XU5ZREhTS0VGP05KRFFEO1NnWV3fzN3DvMtJWb++29Oyw0NZ\nycK2vudLTve1XUHOucTnQUNTXcO6w8fE31FDOz4+Ql9X99vd599339njyctRVWNnXUVGU0hN\nX0tETnfbV05VW+PVz9vvz8HRWWf/73dM/+tPWeNbQU1nd3dfUevra8e93U7vxL/rRNe5w9fK\n//e9xeNnV13Hzl/LPjbTt2tFOjpn42PJ20zV401GPUxXU09KXW/Nv87Pyb/Gy9tn0cLI02f3\n193v6+93a9fT///3d9HT493b39nvVU9nb1tNRkBGWUpDPUdPTENHRkpHX2dVTOPZUVm7ylXV\nsdtv97fnz765d//Tz2/P/2//xdlORszF6z/bZz4+T0k/P01LRkNKS1Nfa11399Pd2dfT2c7N\n0dPdy8rGxcrMysvMzs7O0cbJ3d/r09/f3/f3b+tjX2djZ29rX1NdZ2tvXW9379nvX13r61tZ\nU11RVUxHSUtOSExFSElLTEBKSl9bW2tvY/f/4+9d53fj3evf39fR09vTzM3R09/d1cvd1c3X\n1cvZ49vT4+fn49Xj3efR3e/d2ffvd2Pn//fvb29v/11jU1VVV1NdUWv//1n/a+tn/2tf5+PZ\n5/ff5/9v9/9dXXddY29rY/93X2vv/2tna/djY1tn63f/d9v/b+9n72//X/fr4//v73fj//f/\n/2vn/+Nf42/d/+P35+ff//93Y+93/2df7//dWV1n6/9rXVvrd+t3593j73fvY2v/X1dv/1VV\nX+9jZ/9vb//rb29v2+vf2c/r3c73593j79XVXefA7+PDyt/E41vAdz/b02dT019I22NFztdn\na11r92dPX/dN611T/1fnY2NM10/vTUDBOk9fRlPTPl3nOsrFP1Hda+P3791Jz8FdXd/Kz9X/\n/9PD/1v32ePr9+/TzdHV69nM2ffVy9P/09fb1///3+/j/19j1+9MTdnnVdvjW0ffX01R3dFN\nV29JTstRS+vIdzpV0T9Pd91TVcm+S0q9xks+WbzJVUndz9NfSMC9w3fr0c9ROj5J7z09RM/T\nXVvby9vI1VFr2fdHVWPvSVvRXU1d2c1v49XN68vI5+fFv9/VxcXT0c/M513Tb19b929RTmNK\nQFNGTVlRU05F62tNUWN3XWvbSVPOU09T2c1jS2PXy0fKu79fSsy/d//V0azRSGe8wWNDz8HP\ny1nZzdNdR2e/S1Pf70tfV09Cb11BSO9dQERvRj5TTk5KTF9LT13v29/v1ev3VVf3b2/j529Z\nz2P3z8pX78TVWdu+3+vf0cDM/92+zv9Pz9HnU8nL61vXx+fdQkvfW0FI3czZ3/fvY11da09n\nRXfP30df/9lR4+9vX+//SVljW0//a1Pfxe/vzNHG0dHfzdfb2c/37+N342tv/+NXVetjV1FT\nW01GUUljX1lT7/dvTevX21tdzc7j683N09fP1+Pf905bT1lIU//3Tl/Vz01v0e/3VVvIzEhb\n93dTXedrWbzTTNvB30j3w8Rnv8fZ1clrb9vG/0nGykpDa0hBT04+X/9NRlfvb2tV62ddSEl3\nY0tj3dfV1dHbyt/r09PPxN/XyL/L2cu+71PO0eNbz8znd9dd3ddfW+fdV1FfVUZjVUtO/08/\nVe9HT11VW9XvV2fMxetHUd/VQj9b3UxIR1XTd1Vb49f/Rf/P41Vj2d/jXffP0ev35+t3d1tj\nz+v/28rK49nTa8C/7/e/ws7Gxt3Jxl1jxM9V38xVb+9PTOtPR0ljU09XWU5nY0lf711T93dV\nXV1OXVljWWPb/2fn2dXn68zN3dvb/+ffZ2vn52tf72tRW3dbW11Vd2tOW/dTWXd3W+Pv7+vP\n9+Pj53fj419n4+N3Z+/j9/fr6//nb1vv6+Nv79/TZ//j7//n6+v3z+P/59nrb9fr79/f4+/d\n4+vf2+vv5+tnZ3dvZ2tnX19nZ133XVlTVVldZ2NnW113/2tv72f37+d349nn3d/V09vb3/fr\na2Nra1lZa19nX19TU19PT1VLTVVbUVFVWVtZX1dvd3dr3d3V08jPzdnP2dfR19fT09fb2czX\n3czX2c3d39nf7/fj5+/d2+t333dvY1NXU11PV19bVVNrV2tbWVlvX3dd6//v63fv9/9f71/f\na+//3eP/92fd399v79nv9+vra2//a19TY09ZV1ddT1FOVVdZX1/vXf9fb/dv2f/d09nf09fX\n3dfZ1+PR09PR09ff3dPj1evb19v36+/v4+fZ3e/va/9jZ1VbWVVPW1lXWV1bZ2NfX1VbS1lN\nU0lJWVVNXXdfb3f3991r2e/P1dfX2dPj29PV09vT3dPbz9/Kz8/dzs7f1+fj3+PrZ3fj7/93\nZ1tjUV9LVVVPUU1KS01LTUhNVUxTUVlTW2dZd2tvZ2Nf7+dv39vjz83O0cjNztXI2czTx9PK\nytPL1dHbzc/T19fn7/93X2djX19XV1VbT1FXVU1NTldRTFFOU1VZY1NXb2NrW2Nbb2vr/3fn\nZ///7/fj59/b4+fr6+fr5//P29XN1cvjz9vZ2+/P2d3d29XR39n/7+vn72P3b29db19RZ2NP\nY19dX1VdZ1lZVWtfd1lbY3fvd+93X/f3Y/9v//9vWd3dd//jb2trXVtfV11fY1n/WU1vWV1b\nd2fv493j1dvR1czdzs7PzM7HzMnb3ePv39X/z9nf29/33efjd2fnZ2tfd19fV3drd1dna2dP\nVV1dV1lZZ2NrX/9dTedV/2dX51lnX2f3Z+P30/fn9+9f591rb2PvVV33a/9r7+/ra3ffb+f/\nd+P/79nr3czVd83Ry+vT2+Pd39fv5+vn2ff/429n999f/193Z+/rb/dvb+939/9RWV13TEtr\nU05NU1NXTENTWU1MSUxdd1NZ9/fr/93V19PN08zP2c3j18/X48jN3czZ0dnR1Xfr7//n5+v3\n62vr53ff4+vj3+dv91lrZ/9nW2trZ0pdTldRd11ZTlNnUWtbZ11nW+//W1dZU/9P93fv33fr\n42tf2evPb+fv5+dn42ff39vnzdfj/3e6Vb1r39XZ1dPnzWPHa+dj2ePfSe9Na1v/THdZY2P/\n411rY2dPVevvZ+v/b0vV30TTY3f3/2fbV+Pnd2/rV9FdY1t3Tk93X05b61dnd//nb9/O1dPJ\nysLJycfL383F1dfP1+Pb59X/0//j51vZZ2tjX11ZX1dMU0NJRkdbTVdKd2NjVVFOSVdTY01r\nZ0/jY+Pv0+vfyevf79XfVclv41X/W0/vVe/va+fj02vvzkrNy1vf58tR1cJvzcrv38zNzMzK\n0b/b6//Xb/fE3cX/08pJwP/b51lbTe87Ttc5/0NExi652y+0Lsn3N8tLVzi9PTXEP2/nQ11b\nW81Ld8VB18w2x0TA2U9r0dXT9/fbxE7f72PFWc1Jz8vT79nD3cDDZ8S668P/XbvGTcPdv13/\nx9Pnx+tXy2vRTzr31ztM7z5vWUdTQ0zbPDjOU0HrTlNNz1VdTffvWW9N7+P/R2fd2U/OTV3Z\nW0dL31FH68tZ0d/P2cr30f/M/2PGy8rC48i7ycBfu71jy9tjumvXzP/Ld1fZW1XdS0/nUU9X\nX01bQ9FTPf9Fb1tCb0lX2T1X0VHbV0jnU81KP75RY8rrZ8LZ7/dZwWtOv/drxv9bu0y5wky6\nTffXPtnf/+PMUW/Z//dCWVnfW1NDUc9v4+dVv9dVZ1Vv2UZN6+/VU2Nf/+t3S1dv72dGXcx3\na//j2//3Z3fjzlNO61Pb70xr41ffb0/ba2vfd+PK1c3CztnX19nX0cbRz8fVxcPbydfZ083j\n3c/jW1vf49/P1ePf1+d372dbS01LSj9MSEVHSkRKTERESEpDXUFLTUlHRk9ZVU1nRU9bVWNb\n3/fv2ev349v/0+dr49PTys/RzsvXzdvJx9nH2cjLzc/Rx8vKycvIzMXOyMPIxcjPzdHb2evX\n02/jZ3f3VWNrWWtdSE5LS0tCR0dESUpISEhHSUBIRkhJRElMSkpNSFFRTE5KVVFRU2Nv2e/v\nzdvO1cnLxcfAxMPCw8jEyNXG2c7ZztvVzdXT0dHPz9PZ19Hj09fb3dnf3+//d29TTldOSkVF\nQ0dHR0hCSkhMS0lVTUtOSU1OWUxfU2v3V//Z29HZysnIycHIvb2+v77FwMXJz9PX6/dbb1tX\nWVtVV2dnUWtfWfddXWf/6+dn7+fv5+9n32tnWVNZVU9NT09OT0dZTWtZU1tTXVVRWVNTV1FV\nXV9jWVl3b///b2d3a+vb2cnXzsvOzMzKzcvFzsXDysTHw8rKxMzK0dHT39Xd59vr3+P32+Pn\n32fdb9/r69vv79/v493v7+9db1tjVU5XS0tKSkVJRUQ/QD89QTw/PDs9OzxAPD5BQ0RLS1FR\nW2dd79nVyMPCv7y+vby7vLq9ury4vb25vb7AxL/DyM7MytXZ2+vj/1tvV11ZWWNdb29TW09f\nSltNTFtjVVNTSlFKRExISkhNSE5JS0xLS05MV1NfV2tfX1VbZ2v3/+fV39Prys/d09Xf39HV\n3d3KycjT183f0+fj29fT3ePR4+Pj29/P59vv3+/r59vr1d9r9+//d99Zd1dRVU5dTndnd2Pr\nZ+tjY1lTU01rUU5ORktPRUpNS1lPU1lMb1lbVV1vU2tv72fn2evZ0dPNzcnPzcnKxca/xMC+\nvr6/xca/wczIzM7P3dPf/29v92dna1VMU05DSFFRQUtBQT8+PEJAP0E/QURGSUlNU1VdZ1ld\n99939+PPd9Pd3/fP38/b1dvXzsvPzNfP48vj1czZxcfIy9PAxcbKxs3Rz8jH2dXT49tf/+db\nd3dnY13rTWtRWVlDW09MTUhJQUJIS0ZJSU1ISEtKT1tPXUxfTVdXXV33Y2v33f/X2+v/39t3\nzd/X3eff1d3Z3dPv6+fv3dvZ18jHy8LIx8jHw8jFxsfNzuPf23fZ3fdr/+9fWVdVU0pRS0hP\nR0pBS0tEVUtTT1lITE5RT2NTX29nb+v32efTz9HIysvRxsjLzcvJys7Mz9XT1dfd3dnj28/d\n3e/f9+tbXVVTW0hPREtIRlFHT0xPSklJQ05GSVFPTl1RW1tfV+tvU3dv1eNr99/r19nZ0dXb\nys7VzMnKysrMzcvR09nX0+Pd1c/T0dvj593Rb+PZ6+fj5//rW2/vZ/9jZ2tjb2Nj73d3a2tr\nd2dbb3dnWWdV73dbd1FrUVlMWU9fVV1dW1n/Z/9fa19VWWtbb19V19dd4//XzG/j60fE29nJ\nVdXDVczZVdvF/93bW9tOY9dPb2dJV1FOX0RX/29rXW/v5/f3593Z0//XzufRztPnY89n5+tr\n3e9v3+Nvd1vfb2/dY2Pf3e9rW3dvWetrVWdvY13rZ2tr2Xfb4+/V791j7/fv3f/rd/fnd9nr\na+td//9Vb1dn429fZ3fra3dnd/djW1XrW/93X293Wffjd2PnVXdnd1f/a11j92ffXXf3791v\n5//n32P3a+Nj01fO/93P99fb2+fT2d3n7//d5+fr5+Pf3czZ2dPT19HN3dnX6+v/a//3Y3db\nV2ddXWtXd2drb1lRWU5bYz9IW1VXd0j/W1VvVVvbTmtOY1F3WU5XW19vV11fV19bV/9rb9vX\n69Pd29fV39HZzs7NzcrM1dfG29PM29PZ38jT68fN38hZ68lN01HRT2vnWdVX91NZZ1N3b1tv\nT2NMX1H/UVVbX2tVZ2NPVVdjWV1OWVVjT1VZWV9Zd2Nf7/dv49lrzslnv9fFv9nr38nvyt3f\nzmfOXd1d//fX4113V3dZ91f/71ljV1dXZ3drY19nV09XW19ZY1tVWW9bWWNnY29j42vj1+vj\nzMrOzGfna8JVvlfZ3+93601vd//Td29jd1FdX+/352Pr//fv7+/Z2f/j6+/v/2v/b3dVWe9f\na2NjX3dvX+N3d9vZY9XXWcdZxshT3WN31ddEyU9O7/9ZX0RZXWt3V1tPVU9bTmtdY3dba3dr\n79nf29/d5+P/a2dr62fr53ff6+vr3d33z9nR19Pb2c7bz83P593v2d932/9vY03n12dN70jv\n//9O70ffRtlX/01bZ05ZX2NJX0pOX2NVXVdTZ2Nv72P35+fr1dvZ2dPR08vR19PM49XT59//\n4+vnb+vn/+fv52/ZW+Pvb/d3a11na+9nb+dnZ+//a29rX2NZa1tZY2Nfb2f/a2/vX2v/91//\n//f/4+Pr6+/v4+fj7+vdd/9vb29rd2/3d3dX3dnvX19P49n/0WNr32dv/1nv3etvb/fr29vX\n49/d1+/v3efj92tvZ3dvb3d39/fv5+/r7//j6/9db2NRZ09nXV9ZV11rWVljb193Z2tfb2Nv\na2tnX2N3Z+vj79/r3d/Z1c/R087bzdvZ2+Pr28/d3d3v7/f/92Nra1tXXWtXWV1ZZ3dfZ29r\nY2dbW///929rb2/rd1trb29X/1ddXVnvX29j71/ra+fn/2933+9v29HT30+/zdfZ3d/Lzr/f\n0c5ra9nV1+Pj3Q==\n\n--Outermost_Trek--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.11.txt",
    "content": "* 11 FETCH (UID 11 MODSEQ (29429) BODY[] {58127}\nReturn-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA11583> for nsb; Thu, 26 Dec 91 15:15:38 EST\nReceived: from joyce.cs.su.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA13190> for nsb@greenbush; Thu, 26 Dec 91 15:15:16 EST\nMessage-Id: <9112262015.AA13190@thumper.bellcore.com>\nDate: 26 Dec 1991 20:45 (Thursday)\nFrom: bob@cs.su.oz.au (Bob Kummerfeld)\nTo: nsb@thumper.bellcore.com\nSubject: couldn't resist this\nMIME-Version: 1.0\nContent-Type: image/pbm\nContent-Transfer-Encoding: base64\n\n\nUDQKNjU2IDUxMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAHAAAH////////\n/////////gAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAP///////////n//wP/AE//BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAGAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8AAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAH///////gAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAYAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA/gAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAABgAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8YAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAA/AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAGAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAB+AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAYAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAH8AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAABgP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYPwAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAGPgAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAP//gAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAP//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAA/wAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAP+AA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAB/g\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA/wABhx8MBgAAAAAAAAAAAAAIAAAAAD/AAD//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA\nAAAA/+H24AALkAH/+wHnmAwAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOPh98AAG/AA/fsA5wAAAAAAAAAAAAAB\nAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAIAAAADj4PeAAB3gAEDxAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAAAA4+BzAAAI4AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAQAAAA+p///////AAAAA\nv///gAAAAMHAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAA\nAAAAAAAAAAAAAAAAAAP////////////////////oAIAAAADAAAIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAD/////////bAABP//\n///wAACAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAA\nAAAAAAAAAAAAAAAAAAAAAf/g/gAAAAAAAAAAAAAAAAOAgAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAP/AHAAAAAAH/4H\n//gQB////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwOMwAAAAAAAAAAAAAc\nAAAAAAAAAAAAAAAAAAAAAAAD//////////////////////+AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAAAAB4cPjMAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAA///////////\n//8AH///wAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAD+HD4zAAAAAAAAAAAA\n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\nAAAAAAAAABgROf/4e5H4eBjwwBCfAAgYAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYMTn/2D+f+Dj/8MAAGAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAGPG5+Agfn/g//4HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wuAAICQAIL94BgAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAf8LgAAAAACCYAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPyAAAAAAAAgAAAEAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAA\nAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAPGAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwAAAAAA\nAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAGAAAAAAAAAABgMAAGAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAYDAGD/\nH+AAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAACBgA8AD/AAAAAAAAAAEAABo/x/gAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQA//wYw/gBwwAAAAAwwAABgBg\n6OIYIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA\nAAAAAAAAAAAHEAP/8GMf8A4EAAAABMMYAIeAYGjgEAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAH/xAD/nDjODAMACAAE5zDGDCD\n/HDo4BAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAB/8QABhw4zgACABz4Z++wxgwg/5w6OAQAAAAAAAAAgAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBGJf3EAAYcOM4AAwA//OfcsMY\nOIAHeOjgEAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAQIARiYIxAAGHBjHgAOAd4zjmDDCDiAA3jo4BAAAAAAAAACAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAfMeECAE4mCMQABhwYx/gD/meM4xA\nwww8gAH86PwQAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nA4IAB/AOM/zPhggBOJgjEAAYcGMP8Af9BjPOQMMMPIABzuj8H8AAAAAAAAIAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf7AAf//nP4z8YIATiYIxAAGHDjAHgADwYy\nzkDDDD6AAM7o/B/AAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nBAYz+wcMH/5wINpnCAE4mCMQABh/8wAcAAYGYs5AwwB2gADH6OAfwAAAAAAAAgAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZm8xsOGA+QcCDQZwgBPJgnEAAY//MAHAAG\nB+TOQP8AdoAAw+jgEAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAGZvoPHBgAEHgg0G8IATSYJ/gAGP/zAAwAAgeEZkD/AHOAwMPoYBAAAAAAAAACAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABmbeCzgYABD4INA/iAFmmCf4ABjwcwwM\nAAMHxGZB/4BxgeHB6OAQAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAZmjhvwHAAQ+CDQPYgB5tgn+AAYcHMODAADB+fmY8OAcYD/QOjgEAAAAAAAAAIAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG54474A8AENgg8D3IAOfYJhgAGHAz\nDgwAA75/5mfBgHGAf0Do4BAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAveO88AHgBHYIPB8yADj2CYYABhwM4ccAAP+f2Z9wYBgwB5A6OAQAAAAAAAAAgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL3B+OAAeARjCDwbGgA49gnGAAY\nMDuH+AMD5hwmPcGAcMAAQGhAEAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAQAC9weHwADwEYwg0Gx4AOHYJxgAGDA7g/ADhgYcJhnBgHDAAEAAAAAAAAAAAAAD\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAvcHg+AAcBOMINBsOADh2CcY\nADgwO4HAA/wGHCYBwYBwwABAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAHfB4PwADgT/iDQTDgA4NgmGAAYMBOAAAD8BhwUAMCAYAAAAAAAAAAAAAAA\nAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB3w/CfAAYF/wg0Jw4AODY\nIBgAGAABAAAAOAIIEAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAEAAZ0O4h4EGBeEINucGADgSAAYABAAAAAAAAAAABAAAAAAAAAAAAAAAAAA\nAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNnvIPBhgWBiDfmBwA\nYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAQABjfY6A8Y4FgYgDgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAYTyHwHieAYCAAAA\nDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABAAGGwg8A4/AGAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhgYHAEPgBAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAYYCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+\nAAAQAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAIAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/8MQEAAAAB8AAAMAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH\nAYPnkDAAAN+/8AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAD/wGA55AwAADf//gAAwAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAD/+AH8AAAAA8\nA/8BgGeQMAAB2e78AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAfAAAAAA//gD/gAIH+fwHwAYBnmHAAcdh+DgADAAAAAAAAAAAAAAAA\n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\ngPgAgPDvADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAIALHHw+D8OAM4DwAYDwbgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACR/sP/3/\ngBOA4AGAYGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAkfznP5/gABAGAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIG4/w\nAfgAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBgH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAgY\nA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA\nAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH\n/w//4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/\n//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAHAAAP/9gH//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////\n/+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAf///////////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAB//////AAB4AAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA\nAAAAAAAAAAAAAf8AABn/////wAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAfgAD///AAf/////4AAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA\nAAAAAB//////////w4AH//8fwAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAD//////////gAOABwAAAAAAAAAAAAAA\nAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAA\nAAAAAf///+H/kAABwAABgAcAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgB4D8AAAAAB///4AAAAAAAAAAAYAHAAAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfw//\n////////5AAAAAAAAAAAAAHABwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////+AAAAAAAAAAAAAABwAMAAAAAAAAA\nAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf\n+AAAAAAAAAAAAAAAAAAAAAAAAMADAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwAAAAAA\nAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOADAAAA\nAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAMA\nAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGADAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw\nAwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADADAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AwAAAAAAAAAAAAAAAAABAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAGAMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgDAAAAAAAAAAAAAAAAAAEAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAcAwAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOAAAAAAAAAAAAAAAAAAwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAwDAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAYAAAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAABgGAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBgAAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAGAYAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwGAAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAMBgAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAYAAAAAAAAAAAAAA\nAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAwGAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBgAAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAADgYAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGAAAAAAAAA\nAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAGBgAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgMAAAAAA\nAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwAAA\nAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDA\nAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgwAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nYMAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAwwAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOAAAAAAAAAAAAAAAAADAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAADBgAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwYAAAAAAAAAAAAAAAAAMAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAOGAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhgAAAAAAAAAAAAAAAAAwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAYYAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGAAAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAABxgAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcAAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAADDAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwwAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAOMAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAAAAAAAAAAAA\nAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAYwAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMAAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAABzgAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM4AAAAAAAA\nAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxgAAAAA\nAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAA\nAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc\nAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3AAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nANwAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAzAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAAAAAAAAAAAGAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAABsAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAAAAAAAAAAAAAYAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAH4AAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAABwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAA\nAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAA\nAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAA\nAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAA\nAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB\ngAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8MAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/7/gAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAA8wA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAABwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAOAMAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOABgAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAABgPYAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P+ADgAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAPH/gAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH//gCAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABv//4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7//wAEAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAd///gBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANf//4AYAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAGv//+AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYMAAA\nAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL///gAgAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHkAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAH///4AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH37\nAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf//+ACAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH8wAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD\n/+cQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL///4A\nEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3+IAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF///+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAP5/GAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf//\n/gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6/zAAAAAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn//74AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA+/9wAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7\n//++ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//4AAAAAAAAEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4n//MAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAf//8P//+gAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAMZ//jAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//+H/////gAAQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE//4QD/wAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAP///B//z//+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAADP/8EAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/////wSLMx3/8ABAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn//BAAGAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAB//////8FpsxKAfwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAJf/wAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ANgf//HaLM6zH/4EAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/4AAAMAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAD8AAAH///5JIEox//zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAALv+AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAD///2WTMUzHh/4AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv/CAAAMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAA4AAAA///5YkzFMxzd/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAP/wgAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAP//+WmzEoAOmP/gAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4IAAAYAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAADAAAAD///FpszLMbyM3/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABf+CAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAB///xlkwAjEundP\n/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX/ggAAAwAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAcAAAAf///ZZMzTMUgCRj/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAF/wcAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAP////iSMUzFJ\niLGP/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf8PAAAAwAAAAAAAA\nAAAAAAAAAAAAAAAAAAAABwAAAD////abMyiEYYixyd/+AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAf/DQAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAB////emzMo\nzvIyQACL/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/hoAAABAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAB4AAAf///mWSJCMS+d0YmJjf8AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAB/4aAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfAAA/4//5ll\nzNcxWQJGJiYzv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+GgAEADAAA\n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\nAP//4Af//+p/P8wABwAAAAAAAQR///////xgiBEEeDgAAAAAAA4AA8AAAZsskmJAIlsZI5MR\nmNiaZY42M5EZuAAAAAAAAAAAAAAAAAAAAAAAAB//gAAD///+/z/GAAYAAAAAAAEEf//////8\nYIgBAP44AAAAAAAOAAGAAAHbLJJmUZkkRCETEZjcmNoxiAERGLgAAAAAAAAAAAAAAAAAAAAA\nAAA/8AAAAf/////7RwAOAAAAAAABBH/////8PGCIAfH//8AAAAAADgADgAAD//NFQlGJJObc\naGwgCJjaMYjMREI4AAAAAAAAAAAAAAAAAAAAAAAA74AAAAD/////+8MADgAAAAAAAQT/////\n/BxgiDnzwf/wAAAAAA4AA4AAA//zTdmmYghEDGxsZiNjJIGIzETGbAAAAAAAAAAAAAAAAAAA\nAAAAH94AAP/wf/tu///BgA4AAAAAAAEE//////gcYI/4hwA88AAAAAAOAAOAAAP/v8/ZpmLb\nGSMTRCYjZyWONhMQUC4AAAAAAAAAAAAAAAAAAAAAAP8YAD///D/zL///4YAcAAAAAAABBP//\n///4DECP2AYABhgAAAAADgAHAAABv76+7kEqGxkjExGY2JhFjHYzkzmeAAAAAAAAAAAAAAAA\nAAAAAAPgMAf///4f+2///2HAPAAAAAAAAQT/////+AxBjAAOAAYIAAAAAA4ABwAAAf///25R\nnSTEIRMRmNyY2jGIwRE5nwAAAAAAAAAAAAAAAAAAAAADAGB/////H//////gwDgAAAAAAAEE\n//////gEb4AADAACCAAAAAAOAAYAAAD////+UZkk5txo7CYomNoxicxMxkcAAAAAAAAAAAAA\nAAAAAAAADgBA/////x//////8MAwAAAAAAABCf/////4Bn8AAAwAAAgAAAAADgACAAAAf///\n/+5inkScaOxuI2cloQjMRMZngAAAAAAAAAAAAAAAAAAAAAwGwf////+P//+ff/DAMAAAAAAA\nAQn/////+AZwAAAOAAAIAAAAAAYAAAAAAH///7/uYpsZIxNMJiNnJY52ExAAR4AAAAAAAAAA\nAAAAAAAAAAA+/4f/////j////zs4YCAAAAAAAAAJ//////gGAAAADgAACAAAAAAGAAAAAAB/\n/7ZmcYIbGSMTE5HYmECMdjOTOZnAAAAAAAAAAAAAAAAAAAAAf/+P/////8/////7+HBAAAAA\nAAACCf/////4AgAAAD8AAAwAAAAABgAAAAAAf/6yZlGZJMSJExOR3JjaMYiJEDmZwAAAAAAA\nAAAAAAAAAAAAAH//j//////P//+///wwQAAAAAAAAgn/////+AYAAHH7gAAMAAAAAAYAAAAA\nAG/zQRpRmSTGnOjsZiqY2jGJzEzGZOAAAAAAAAAAAAAAAAAAAAB//5//////7993n//+MEAA\nAAAAAAIb//////gGAAPz78AADAAAAAAGAAAAAABP80mZrGKaRJxo7G4nZyWFCMhMxmbgAAAA\nAAAAAAAAAAAAAAAAf/+f/////+//////PjjAAAAAAAACG//////4Bg8fsw/wAAwAAAAABgAA\nAAAAX+zRGaxmmxsjEhFmI0cljnYzEhDm8AAAAAAAAAAAAAAAAAAAAH//n//////v//////8Z\ngAAAAAAAAhv/////+A5/HhMP+AAMAAAAAAYAAAAAAN/stGZRChsZIxcTkdiY5Yx2MzM5mTAA\nAAAAAAAAAAAAAAAAAAB//5//////7///////GYAAAAAAAAIb//////8M/xgTCP4ADAAAAAAG\nAAAAAADO7rRmU5lkzIgTE5nYmNoziIoAOZkwAAAAAAAAAAAAAAAAAAAAf/+f/////+/+d5//\n/5wAAAAAAAACG////////OMYMwh/AAwAAAAABgAAAAAA7/dJEFEZZObc6OxuIpjSM4nIzMZk\n2AAAAAAAAAAAAAAAAAAAAH//n//////v9ncf33+OAAAAAAAAAhv///////nDGDMIA4AMAAAA\nAAYAAAAAAP/3S5muZp/3+GjsbidnJY0oyMzGZvgAAAAAAAAAAAAAAAAAAAB//5//////7///\n/9//xwAAAAAAAAI7//////gxwxgzCADADAAAAAAGAAAAAAD/v9kZrGabP3MTDS4jRyWOdjMy\ncMT8AAAAAAAAAAAAAAAAAAAAf/+f/////+///////8cAAAAAAAAGO//////4EcMYMQgAQAwA\nAAAABgAAAAAB//28ZlGIGzv/t7eR2JjhjHYzMzmZHAAAAAAAAAAAAAAAAAAAAH//n//////v\n//+////nAAAAAAAABjP/////+BGDGDEIAGAMAAAAAD4AAAAAAf3+/O5TmWTdv/P30di40nOJ\nyEIxmR4AAAAAAAAAAAAAAAAAAAB//5//////7/53n/8d/gAAAAAAAAIz//////gRgxAxCAAg\nDAAAAAD+AAAAAAHM/+/e0RlExJ/4/+YimtJzicjMxGTeAAAAAAAAAAAAAAAAAAAAf/+f////\n/+/2/7/fPf4AAAAAAAAGM//////4EYMQM/gAAAwAAAAD/wAAAAABxv9//axmmhWf/OzuJ0cl\njCSIzMZm7wAAAAAAAAAAAAAAAAAAAH//n//////v///////8AAAAAAAABjP/////+DGCGHP4\nAAAMAAAAB/cAAAAAA7M9//msZps7b//xNCdHLYx2MzIxxM8AAAAAAAAAAAAAAAAAAAB//5//\n////7////////AAAAAAAAAYz//////whhh/x3AAADAAAAB4zAAAAAB+zLLzmURkaGyf385HY\nmNGMZiMzOZkTAAAAAAAAAAAAAAAAAAAAf/+f/////+//97///7wAAAAAAAAGc//////8IYYf\n4AwAAA4AAAH8hwAAAAA/xJC8ZlOZZMSf//sR2LjSc4nIQjGRE4AAAAAAAAAAAAAAAAAAAH//\nn//////v//////+8AAAAAAAABmP//////CGOHAAOAAAGAAAH+Y8AAAAAf83TSxnxGUTEn//8\nbiPY0nGJyMzERM2AAAAAAAAAAAAAAAAAAAB//5//////7////////gAAAAAAAAZn//////+h\n/gAABwAABgAAH9CPgAAAAFvHk0uZrGaaFZv/zm4nRiWMIYhMxGbswAAAAAAAAAAAAAAAAAAA\nf/+f/////+///5v///4AAAAAAAAGZ///////4fwAAAfAAAdAAf7GM4AAAAB7syyRUaxmmztj\nf/cUJkYtjGY3IjGUzcAAAAAAAAAAAAAAAAAAAH//n//////v/ve////+AAAAAAAABmf/////\n/eGAAAAH8AAH4AP4xjOAAAAAe7MstOZTGRIzY3/zkdi40wxmJzI5mzPAAAAAAAAAAAAAAAAA\nAAB//5//////7///////7gAAAAAAAAZn//////ggAAAAHngAA/v/4xCBwAAAAH/3uLRmU5lE\nxJj/8xGYuNJziYpCMZkz4AAAAAAAAAAAAAAAAAAAf/+f/////+///////+4AAAAAAAAMZ///\n///4IAAAAf48AAP//+c5jeAAAAB//9NLGbEZRMSY+OxuJtjSc4nIzMREzfgAAAAAAAAAAAAA\nAAAAAH//n//////v//+b///+AAAAAAAADGf/////+CAAAYPmBgAD//v+kI/gAAAA//+TSxms\nZpoVmPjMbidGKYxkiMzETM38AAAAAAAAAAAAAAAAAAB//5//////7//3n////wAAAAAAAAxn\n//////xgAD/DBgcAA/7r/+//+AAHd9//LLFRrGa7O2f/ExQnRi2MZiciM9TN/gAAAAAAAAAA\nAAAAAAAAf/+f/////+////////8AAAAAAAAM5//////8QBB/wwcAAAP/0f///////////+y0\n5lMZEjNn9zMRmLjRDGYnIjOzM++AAAAAAAAAAAAAAAAAAH//n//////v////////gAAAAAAA\nDMf//////EP4eMMHAAAD7/T//8x///////3+NEZTGUTEmPoTEZi50mOZgEIzkTPnwAAAAAAA\nAAAAAAAAAAB//5//////7v//3////4AAAAAAAAzH///////H+GBCBwAAAeP//zmMf/m2m//9\n90sZoVFExJjozGwmUJJjmZjMzETN7+AAAAAAAAAAAAAAAAAAf/+f/////+7//Z////+AAAAA\nAAAMx////z//x4hgQgeAAABgf/6AjH+5pmS///JLOazmshCZ6Mxu50YtiGSIzMxMzvzgAAAA\nAAAAAAAAAAAAAH//n//////v////////gAAAAAAADMf///4AA8YIYEIH4AAAIAP8xjEfxQZl\nv7votVEsZrozZ/YTdePGLZxmJyIxsM/88AAAAAAAAAAAAAAAAAB//5//////7////////4AA\nAAAAAAzH///8AABGCGDGB/AAACAA3sYzn85JiB+67LTGUxkSM0f3M/H4uNMIZCciM7M347AA\nAAAAAAAAAAAAAAAAf/+f/////+////////+AAAAAAAAIx///+AAATAhAxge4AAAgAA4xgA/e\nQZom/JI0RlMZRMSbyh/x+LnSY5mAzDGTN+OwAAAAAAAAAAAAAAAAAH//n//////v////////\ngAAAAAAACMf///AAAEwIQMYGnAAAIAAHMYxn+YEKBt2TSxGoUUTEm+jP/jZQkmMZmM3MTM/r\nWAAAAAAAAAAAAAAAAAB//5//////7////////4AAAAAAAAjH///gAABMAEDGNocAACAAB4QM\nY/mmZZH8kksZrOayMZvI7+5nRi2MZADMxEzPnNwAAAAAAAAAAAAAAAAAf/+f/////+//////\n//+AAAAAAAAIx///4AAAzBBAx/CDgAAgAAPOcRj8JmWZ+mi0VSxGujNH9n//NkYtnGZnIjOw\nj5xOAAAAAAAAAAAAAAAAAH//n//////v93v//9//gAAAAAAACMf//8AD/4gQQMfwgYAAIAAD\nxGMY/lGYEfpstMZTGVIzR/9/85i40QhkJyIzszdjPwAAAAAAAAAAAAAAAAB//5//////7///\n///f/8AAAAAAAAiH///AB/+IEEPHAMAAACAAA/GICP5RmkZfvvzOUzlFzL////uYudJjGZLu\nt/M3Yz+AAAAAAAAAAAAAAAAAf/+f/////+////f////AAAAAAAAIh///wA//iBB/gADgAAAg\nAAHxjGd/pUAGX5dLMaxBRcy////8JlayYxmYzcxMz59PwAAAAAAAAAAAAAAAAH//n//////v\n////////wAAAAAAACIf//+AP/4gQfgAA4AAAIAAB5AxjP65lmb/SSzGs5rIzn////mdOKZxl\noszMTM+czcAAAAAAAAAAAAAAAAB//5//////7////////8AAAAAAAACH///gH/+YMGAAAHAA\nACAAAe5jGM/kZZm7aDTULMayM0//9/82Rimc5GciM7K/nMjgAAAAAAAAAAAAAAAAf/+f////\n/+/3//8////AAAAAAAAQh///+B//n/AAAPg4AAAgAADkYxjO0ZoRO+i0zlMZUjNP//fzmbHT\naWQmIjOzM2MzYAAAAAAAAAAAAAAAAH//n//////v///3////wAAAAAAAEIf//////4/wAA/4\nHAAAAAAA8YhAxtGaRk3yLMRTGUXMn//78Zi50mMZmMynM3NjNyAAAAAAAAAAAAAAAAB//5//\n/////////////8AAAAAAABCH//////8IAAAPiAYAAAAAAHGMZzPkWAZNlksxrFVFzL//2Oxu\ndLJjGZjdzEzom0NgAAAAAAAAAAAAAAAAf/+f///////////////AAAAAAAAQh///////AAAC\nDAgGAAAgAAB8CEIz7GWRMhJLMazGsjPf/8jsbn4pGGQmzMxM7JzI4AAAAAAAAAAAAAAAAH//\nn///////////f///wAAAAAAAEIf//////wAAHwwAHgAAIAAAPGMYxORlkbJpdMQ4RrIzf/ez\nHZ92KRzkZiIzsqqYSPAAAAAAAAAAAAAAAAB//5///////////////8AAAAAAABCH//////8A\nwf+IAB4AACAAADwjGMxxmgUyaHTOUzlCs3/3Nx+fsZBpRCYiM7M3YzcwAAAAAAAAAAAAAAAA\nf/+f///////////////AAAAAAAAQh///////H+H7CBAeAAAgAAA9jEIEUZpGTZIMxFM5Tcy/\n+4sfm7HW4xOQ3I0yM2M3OAAAAAAAAAAAAAAAAH//n//////v////////wAAAAAAAEMf/////\n/h/hgwgQHwAAIAAAHYzmMaxABE2WSzGs1EGIv/vZ7+ZGEGMRkN3MTMiaQzgAAAAAAAAAAAAA\nAAB//5//////7//2d3f//8AAAAAAABDH//////4QYYMIEBcAACAAAB4IRjGsZZEgEgsxrMay\nM3//2e/mTikYZCbIjEzImNjYAAAAAAAAAAAAAAAAf/+f/////+339md3///AAAAAAAAwx///\n///+MGEDCBAXgAAgAAAeYxjMTEWxsmlkxFjGsjN/v//z1kYpGORmIjMyKpjI3AAAAAAAAAAA\nAAAAAH//n//////P///////fQAAAAAAAMMf//////iBjAwgQF4AAIAAADmMYzF+aRSJoZMxT\nOUCjf///c9mxkGBEJiIzszdnJzwAAAAAAAAAAAAAAAB//5//////z//////330AAAAAAADDH\n//////4gwwMAMBeAACAAAA+MQgRZGkRNlgxEUzFNyP/f/3mQsZbjE5DYjXIjZyc8AAAAAAAA\nAAAAAAAAf/+f/////8//9v/////AAAAAAAAwx//////8IMMDGfA2wAAgAAAPjMYzrEJEDZaL\nMajEQYj/+//8ZkYQYxOQ3cxMyJrKPAAAAAAAAAAAAAAAAH//n//////vt3Rndv//wAAAAAAA\nMMf//////CDDAx/ANsAAIAAADwBGMSxlsTACCzEsxrIz/+//zGZOaRjEZqiMTMiY2N4AAAAA\nAAAAAAAAAAB//5//////77/253f//+AAAAAAADDH//////wgwwMMADdAABAAAA9jGIxE5bMy\naWTECMSyN////9sWRikY5GYiMzKimMjeAAAAAAAAAAAAAAAAf/+f/////+//////9+/gAAAA\nAAAw5//////8IMMeAAA2QAAQAAAHYxnMU/pVIGlkzFMxQKP/9v/zkbGWY0VmIjMzJ0cnLgAA\nAAAAAAAAAAAAAH//n//////v//////f/4AAAAAAAEOf//////CHD/gAQNqAAEAAAB4hGAFH6\nTE2WCgRTMU2Pvf//+xGxluMTkNmMcidHJy4AAAAAAAAAAAAAAAB//5//////7//25/f//+AA\nAAAAABBn//////w/g+AA8CSwABAAAAeIxjMsYEQNloszKMRBj73////OThlDE5HdzEiImOYu\nAAAAAAAAAAAAAAAAf/+f/////++/dud3///gAAAAAAAQY//////8P4AAB/AmeAAQAAADwEYx\nLGWzMGIKMSzGsjfe////zk5pGORmqIxIiJjY3gAAAAAAAAAAAAAAAH//n//////v////////\n4AAAAAAAEGP//////AAABh8QJl4AEAAAA+MYhABFsTJpZMQIRLI3zvf/+9BECRjEZiIjMiqY\nyN4AAAAAAAAAAAAAAAB//5//////7////////+AAAAAAABBz//////gAAH4YEGZPgBAAAAPj\nGYxRGkQASCTMUzFAh9/3//vRsZTDESYiIzInRyYnAAAAAAAAAAAAAAAAf/+f/////+//9ud2\n///wAAAAAAAQcf/////4AAf+MBBkp8AQAAAD2MYAURJMDZYKIBIxSY//++/r0DGU4xOR2YxK\nI0cmIwAAAAAAAAAAAAAAAH//n//////v////////8AAAAAAAEDn/////+B8PwjAQZKbgGAAA\nA/jGMyxARAmWmzMoxEGf//n/7U5MCEMREdmMSJiYwiMAAAAAAAAAAAAAAAB//5//////7///\n//////AAAAAAABgf////+Bh/DAAwEGZEYBgAAAPgBiEsRbMgQAoxKMayf0e5/8xOTGkYxGYg\nDEiYmNjdAAAAAAAAAAAAAAAAf//P/////+/////////wAAAAAAAID/4B8AAY5wwEMDBuSbAY\nAAAD4xmMQAWzImlkzBIEsn9HtvfzECQJGMRmIiMyItLA3YAAAAAAAAAAAAAAAH//z//////v\n//Zjd///8AAAAAAADAAAAAAAGMYIBDHwTkmwGAAAAfMZjFMSRABIZMwTMUj757b385GxlP8R\nBCIjMmdHJiOAAAAAAAAAAAAAAAB//8//////7/d2Y3f//fAAAAAAAA4AAAAAADiGCAQ/8Mik\neBgAAAH4xiBREkwNloohEjFJ+fnZ+s+RMZT/M5HZjEgiRiYjwAAAAAAAAAAAAAAAf//P////\n/+//////+/3wAAAAAAAHAAAAAAAxhggcPgDIpG8YAAAB+MYzLEQECZaaMyjEg/ix2/jPzkwJ\nfhERmYxImJjAoeAAAAAAAAAAAAAAAH//z//////v//////v/+AAAAAAAAwAAAAAAcYwYfDAB\nykhP2AAAAPrGISxFsyBICiEoxLf/9u++z85MaTjEZCIICJi42NzgAAAAAAAAAAAAAAB//8//\n////7//+d//7//gAAAAAAAHAAAAAAGMMH+AAD8pJl/gAAAD72YxRBbMiaWTMUhS3//bv/xPx\nJB0YxG4iIzZmUsDY8AAAAAAAAAAAAAAAf//P/////+/+9mO36//4AAAAAAAB+AAAAAPjHB8A\nAf/KSRf4AAAA+92M0xJMCQBkjFMxT+727++T8TGexxMUoiM2Z0cmIvAAAAAAAAAAAAAAAH//\nz//////v//5z//v/+AAAAAAAAPwAAAA/4/gYAD/w+KRA+AAAAPjf4UMSTI2WmjECMU/s+e/7\n6HEh3sczEdmMSCJGJiJwAAAAAAAAAAAAAAB//8//////7/////////gAAAAAAAA/+B///8Pw\nAAP/AHikafgAAAD8//MsRAQJFpozKMyv7Pn5+exOT/sSExHZnMmYuNCaMAAAAAAAAAAAAAAA\nf//P/////+/////////8AAAAAAAAB/////nHgAB/4AH6T0D4AAAAfv/7LMWzIHkO8yjMvnde\nf/L8TE37GMxuIgoomLjZ3LgAAAAAAAAAAAAAAH//z//////v/953/////AAAAAAAAAB//DgB\nwAAD/gAf/l/WeAAAAH9//NEFsyB5ZPySML53Xj53PzEh+RjIbiJjNmZW8NicAAAAAAAAAAAA\nAAB//8//////7///////vvwAAAAAAAAAPAAAEYAP/8AP/+j/1ngAAAB+f/zTEk8JP3z8ljF/\n//6/Pj8xMfTGMxSgIzZnRiYiPgAAAAAAAAAAAAAAf//P/////+/////////8AAAAAAAAAD/+\nD//B//4D///J9v/4AAAAfv//qxJP77+6Mwowe/+/35/MXXG0xjMRmZzIokYmIn8AAAAAAAAA\nAAAAAH//z//////v/////////gAAAAAAAIA//v////8f///3wPb/uAAAAH7//6z9N39/njMo\nzPv//8/fzF5+aBDDEZmcyZi40do/AAAAAAAAAAAAAAB//8//////7/////////4AAAAAAAHg\nf///h/8B//5/2/Z/f7gAAAB+P//s/bP2f+6hCMz/f+/n/+5ff8sYyOwiIiqQuNHZvwAAAAAA\nAAAAAAAAf//P/////+/////////+AAAAAAAB8/4PgAPAH//8H/v+f394AAAAPz//0z8/s3/k\nzJI8/39v5v//P7/QEMhsImM2ZkYmmf+AAAAAAAAAAAAAAH//x//////v/////////gAAAAAc\nf3/u/gAB4H/gHh9/+P9/cAAAAD8f/9M+TZs/9IwXP8+f9/T/97ezlMYzEZACNmZGJi//wAAA\nAAAAAAAAAAB//8f/////7//93/////4AAAAD////z/gAAP/wAB//f+n//7AAAAA/3//5H0yf\nn/ozD7/vn/H5nent+TTeMxGZnMkGViY//8AAAAAAAAAAAAAAP//n/////+/vnZ3d///+AAAA\n////8//AAAB/gAAD//99//2YAAAAP8/7/M//7d/6c2vP///5+5347vx4PJIRmZzJmLjR///A\nAAAAAAAAAAAAAD//5//////vzZ3f/////gAAA////+P+AAAADAAAAB/9dtu/+AAAAH+z+/zP\nt+z79v9777f/fj/u+fz8ezjI7iJCLgCw0f/8AAAAAAAAAAAAAAA//+f/////78////////4A\nAP////fv8AAAAAQAAAAH/Tbbvv//wf//sb3/9//27f/////9/9437z8/Pz4QyGwmYzZmRj//\n/AAAAAAAAAAAAAAAP//n/////+//////////AAH////x/wAAAAAGAAAAAP///d7//////9G9\n9/P//27///9//f3/t+e/vz++xjMRmQImZkY/9/wAAAAAAAAAAAAAAD//5//////v//2d3f//\n/wAD//j/d/gAAAAAAgAAAAD2/+3f///////Oc//z//8+m3////398//zz98//sYzEZmcyZD3\n//d+AAAAAAAAAAAAAAA//+f/////7//9nf//+/8AP/8A+H/gAAAAAAIAAAAAf//t3//7v///\nxmN8z///958////8/vf/8e/P3+sQwFGZGMmYv//7fgAAAAAAAAAAAAAAP//n/////+//////\n////AH/wAPf/AAAAAAACAAAAAH//f///+7+//zGrfMUz/9tnv//9/nd+///rzU/7Ocju/kIi\nML//+74AAAAAAAAAAAAAAD//5//////v/////////wBgA///+AAAAAAAAwAAAAAf///////3\nv/8xjNMyS+1RZd7/+//nfn9///+///n9//5DNmb/7/++AAAAAAAAAAAAAAA//+f/////7//5\nnf////8AYX///hgAAAAAAAMAAAAAD//////9z///lYjTMkyZFt//////////////////////\nGiZv/y///wAAAAAAAAAAAAAAP//n/////+/9mZ3f//3/A///wDAQAAAAAAADAAAAAA//////\n/////97//7LMm7//////////////////////w5yJv//3//8AAAAAAAAAAAAAAD//5///////\n7Zmd///9/4P/8AAAEAAAAAAAA4AAAAP////////////////////////////////u4AP/4AAA\nAAMYif//8f//AAAAAAAAAAAAAAA//+f//////+2f///////DAAAAABAAAAAAH///////////\n//////////////////14AABAAAAAAAAAAAAAAAACQif/9/n/zwAAAAAAAAAAAAAAP//n////\n////////////xAAAAAAQIEAD/////////8A0CAAAAAAAD0AAAD4Z+AAAAAAAAAAAAAAAAAAA\nAAAAAkI//8/+f82AAAAAAAAAAAAAAD//4////////////////+QAAAAAGf/////7w4AMAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaf//H/mZhgAAAAAAAAAAAAAAf/+P/\n//////////////7kAAAAB/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADH/2f8d+Sc4AAAAAAAAAAAAAAH//j///////////9///+dgAAAP//+AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx/9n/HfmQOAAAAAAAAAAAAAAB//\n4//////////93//////////+ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAN//u91/5mJwAAAAAAAAAAAAAAf/+P////////f////////////4AAwAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3bvxm4mCMAAAAAAAAAAAAAA\nH//j/////////////////gAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAA/7/98YuJmLAAAAAAAAAAAAAAB//4/////////////////4AAAAAADAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//3GxkZJjwAAAAAAAAAAA\nAAAf//P////////dz///////AAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAD//8xsZGZCsAAAAAAAAAAAAAAD//z///////9nc/////+/4AAAAAAMAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/M3/kS1kQjgAAAAAAAA\nAAAAAA//8////////////f////+AAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAHzv/5OLmZo8AAAAAAAAAAAAAAP//P/////9///////////gAAAAAAw\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZn8Rq5mYnAAAAAA\nAAAAAAAAD//z//////f//////////8AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAd3Z8bGRkWI4AAAAAAAAAAAAAA//8f/////3///////////4AAAA\nADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHe7fExkZkIOAAA\nAAAAAAAAAAAP//H/////9////////////AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABzmbuTiwxGPgAAAAAAAAAAAAAB//x//////f////////+/+wA\nAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf927k5uZmD4\nAAAAAAAAAAAAAAf/8f/////3////////9v/uAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAH/vxU1vmbmOAAAAAAAAAAAAAAH//H/////9///////////\n78AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/78RMZOR\nZjgAAAAAAAAAAAAAB//x//////f//////////+fwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///TGTmRi4AAAAAAAAAAAAAAf/8f/////3////////\n///k8AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///5O\nb3cZuAAAAAAAAAAAAAAH//H/////9///////////5DgAAAAwAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+Tm5m67gAAAAAAAAAAAAAB//5//////f/////\n//////QIAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+5\nnzW/duZ4AAAAAAAAAAAAAAf/+P/////3///////////0DAAAADAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/uZ+zk5l+fAAAAAAAAAAAAAAH//j/////////\n////////9AwAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfFyAAAD\n///f95eRGbwAAAAAAAAAAAAAA//4//////v///////////QEAAAAMAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAP/////////////////+7s5sT1mcAAAAAAAAAAAAAAP/+P/////7\n///////////yBgAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/////////////\n///7nf5MbE7mnAAAAAAAAAAAAAAD//j/////+///////////8gIAAAAwAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAHwAAAD///wAAAAAAAAAAAH//PvZnzM5OX5nwAAAAAAAAAAAAAA//4////\n//v///////////IDAAAAMAAAAAAAAAAAAAAAAB4AAAAAAA///////9//////+AAAAAAAAAAA\nAAfwD93dcTOTkRp8AAAAAAAAAAAAAAP/+H/////7///////////6AwAAADAAAAAAAAAAAAAA\nAB///8AAA/////////wf///++AAAAAAAAAA//A///9/e7uxvf5EZnAAAAAAAAAAAAAAD//h/\n////+//2////////+gMAAAAwAAAAAAAAAAAABAf//f//////+A9A8AAAAAAAAAAAAAAAf///\n////////3ubszmxu4ZwAAAAAAAAAAAAAA//4f/////v/1P////////oBAAAAOAABgAAD/gIf\n////+AAD////AAAAAAAAAAAQAAf9+4f//////////wAAf//f3W1sTuY8AAAAAAAAAAAAAAP/\n+H/////7/9f//////v/7Af/7eX///////////////wAAAAAAAAAAA4/////////////////4\nAAAAAAAAAD///xMzk5dmfAAAAAAAAAAAAAAD//h/////+///////////+wD////////////P\n//8wAAAAAA7f///////f/////////39//wB4AAAAAAAAAAA/x/cTM5ORG3gAAAAAAAAAAAAA\nA//4f/////v///////////sA/////wAAAAAAAAAAAAAH////////////3+AAAAADgAAAAAAA\nOAAAAAAAAAAAPsd37MxtXRm4AAAAAAAAAAAAAAP//H/////7//Rm7+/////7AMAAAAwAAAAA\nAAAAf///////////gAgAAAAAAAAAA4AAAAAAADgAAAAAAAAAAD/39+7MbG73vAAAAAAAAAAA\nAAAB//x/////+//3////////+wBAAAAEAAAAAAAPn/////+74ADYAAAAAAAAAAAAAAGAAAAA\nAAA4AAAAAAAAAAA7e7kTL9/u5ngAAAAAAAAAAAAAAf/8f/////n///////////sAdhwAB///\n///////+8AAAAAAA2AAAAAAAAAAAAAABgAAAAAAAOAAAAAAAAAAAP/u5MzOTsXZ4AAAAAAAA\nAAAAAAH//H/////9///////////zAH///+f////////4ABAAAAAAANgAAAAAAAAAAAAAAYAA\nAAAAADgAAAAAAAAAAH//5f+nk7EZuAAAAAAAAAAAAAAB//w//////f/////v//7//wB/////\n//0h4AAAAAAQAAAAAADYAAAAAAAAAAAAAAGAAAAAAAA4AAAAAAAAAAB//+bs3GzPebgAAAAA\nAAAAAAAAAf/8P/////3////////////gfv///8AAAAAAAAAAEAAAAAAA2AAAAAAAAAAAAAAB\ngAAAAAAAOAAAAAAAAAAAP//U/Nxs7uf4AAAAAAAAAAAAAAH//D/////8D///////////+DbA\nAA/AAAAAAAAAABAAAAAAAPgAAAAAAAAAAAAAAYAAAAAAABgAAAAAAAAAAH//uzMzn//ueAAA\nAAAAAAAAAAAB//w//////4D///////////w8yH8NwAAAAAAAAAAQAAAAAAD4AAAAAAAAAAAA\nAAGAAAAAAAAYAAAAAAAAAAB///szM7OxH3gAAAAAAAAAAAAAAf/8P////////n/////////M\nGN///cAAAAAAAAAAEAAAAAAA+AAAAAAAAAAAAAABgAAAAAAAGAAAAAAAAAAAb//+7/9/9Rm4\nAAAAAAAAAAAAAAH//j//////////////////5Bj////gAAAAAAAAABAAAAAAAOgAAAAAAAAA\nAAAAAYAAAAAAABwAAAAAAAAAAH///u7cbM7buAAAAAAAAAAAAAAB//4/////////////////\n//YY/+D/4AAAAAAAAAAQAAAAAABoAAAAAAAAAAAAAAGAAAAAAAAcAAAAAAAAAABz//3///7O\n73gAAAAAAAAAAAAAAf/+P//////////////////2WPgABuAAAAAAAAAAEAAAAAAAaAAAAAAA\nAAAAAAABgAAAAAAAHAAAAAAAAAAAf///M3e39+94AAAAAAAAAAAAAAH//j//////////////\n////+nj4AAbgAAAAAAAAABAAAAAAAGgAAAAAAAAAAAAAAYAAAAAAABwAAAAAAAAAAH////v/\n9/E/+AAAAAAAAAAAAAAA//4f//////////////////o4+AAG4AAAAAAAAAAQAAAAAABoAAAA\nAAAAAAAAAAGAAAAAAAAcAAAAAAAAAAB//+7s///dObgAAAAAAAAAAAAAAP//H///////////\n///////6PPgABuAAAAAAAAAAEAAAAAAAaAAAAAAAAAAAAAABgAAAAAAAHAAAAAAAAAAAf//+\n7N7szs/4AAAAAAAAAAAAAAD//x///////////////////zz4AAZgAAAAAAAAABAAAAAAAGgA\nAAAAAAAAAAAAAYAAAAAAABwAAAAAAAAAAH//+z///+7u+AAAAA==\n\n \n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.12.txt",
    "content": "* 12 FETCH (UID 12 MODSEQ (29461) BODY[] {32737}\nX-Andrew-Authenticated-As: 4099;greenbush.galaxy;Nathaniel Borenstein\nReceived: from Messages.8.0.N.CUILIB.3.45.SNAP.NOT.LINKED.greenbush.galaxy.sun4.41\n          via MS.5.6.greenbush.galaxy.sun4_41;\n          Wed,  8 Jan 1992 11:21:00 -0500 (EST)\nMessage-ID: <wdOmHgu0M2Yt4Gzf9t@thumper.bellcore.com>\nDate: Wed,  8 Jan 1992 11:21:00 -0500 (EST)\nFrom: Nathaniel Borenstein <nsb>\nX-Andrew-Message-Size: 371+1\nMIME-Version: 1.0\nContent-Type: multipart/alternative; \n\tboundary=\"Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R\"\nTo: Dave Sincoskie <sincos>\nSubject: Re: PS -- Re: mailer error\nCC: Nathaniel Borenstein <nsb>\nIn-Reply-To: <9201062142.AA08914@raven.bellcore.com>\nReferences: <9201062142.AA08914@raven.bellcore.com>\n\nThis message has been composed in the 'multipart' format for extended\nmail bodies.  If you are reading this prefix, your mail reader probably has\nnot yet been modified to understand the new format, and some of what follows\nmay look strange.  You may wish to look into upgrading your mail reader.\n\nHowever, the first part of this message (immediately after the funny-looking\nboundary line) is the text-only version of the message.  If you read that part\nand skip the rest, you will probably understand the gist of the message.\n--Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R\n\nBOY, was that stupid.  As you can probably tell from the picture, I\nforgot to put the bold, underlined, and centered environments in place. \nThis should work better:\n\n                           Boldly I shall say\n                       That your bug has gone away\n                         But I wish to underline\n                   that if the bug remains, it's mine.\n\nNow, did that look better?  To me it looked like this:\n\n[An Andrew ToolKit view (a raster image) was included here, but could\nnot be displayed.]\nHow did it look to you?  -- Nathaniel\n\n--Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R\nContent-Type: multipart/mixed; \n\tboundary=\"Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\"\n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nBOY, was that stupid.  As you can probably tell from the picture, I forgot to \nput the bold, underlined, and centered environments in place.  This should \nwork better:<nl><nl><center><bold>Boldly</bold> I shall say<nl>That your bug \nhas gone away<nl>But I wish to <underline>underline</underline><nl>that if the \nbug remains, it's mine.<nl></center><nl>Now, did that look better?  To me it \nlooked like this:<nl>\n<nl> \n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\nContent-type: image/xwd\nContent-Transfer-Encoding: base64\n\nAAAAawAAAAcAAAACAAAAAQAAAe4AAAFbAAAAAAAAAAEAAAAIAAAAAQAAAAgAAAABAAAAPgAA\nAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAHuAAABWwAAAAAAAAAAAAAAAHJhc3RlcgAA\nAAAAAAAAAAAAAAAAAAAB////////AAD/////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD8AAAAAAAAAAAAAAAAAAAAAAAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVUAAAPx/8AAAAAAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqgD/4/EAQAAAAAAAAAAAAAIBwAAAAAAAAAVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAIkj8WFAAAAAAAAAAAAAAgIgAAAACAAACqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAiSPxMkAAAAAAAAAAAAACAgAAAAAAAAA\nFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQCJI/EaQDRxxxxxxwBxyx4\nCBzTxxxixwAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAPkj8RBAKoo\nogooovoosogIIqoooiMogBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU\nAgSPxLEAq+YYei+YAY+iiAgiqiiYIiiAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqgCBI/EmQCqAQSKKAQASCKICCKqKIQiKIAVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVAP8j8UNAKoooonoogIooogIoqvIoiIngCqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAgCPxAEAiccceCccAccieAccigccciCAFVVVVVVV\nVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQCAI/H/wAAAAACIAAAAAAAAAACAAAA\nCIAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAP/j8AAAAAAAAHAAAAA\nAAAAAAIAAAAHABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAPwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////d3dAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAf3d3cAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAB/3\nd3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAA72/w94AA\nAB0AAAAAH////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nwABmTbBmAAAAMwAAAAAf4P4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAADAAGZBsGwAAABhAAAAAB/g/gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAABAAAAACAAAAAAAAAABAAAAAgAAAHAAAACAAAAAAAAAgAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAQAoAAQAAAgAACAAAQAABAAAAAAQAgABAAAAfggAEAAIIAAAQ\nEAEQAAAAAAAAAAAAAAAAAAAAD+AADAAAAABACAABAAACAAAIAABAAAAAAAAABAAAAEAAAASA\nAAQAAggAABAQARAAAAAAAAAAAAAAAAAAAAAP4AAMAAAlY0yqsY0ByxoMZZzKY0GWRVOWdjLO\nYKwWXGMABLJgZY5KaEk5UhYzuZSAAAAAAAAAAAAAAAAAAA/gAAwAACWU0srKUwAsphKWSSyU\nwllFZFlJSySQshlClIAEypCWUUqYSUWUGUkSWAAAAAAAAAAAAAAAAAAAD+AADAAAJRReiovR\nAOiiEPRJ6PRD0SlEUUl6JGCiEU6HgASKYGRRSogqRRgReRPQAAAAAAAAAAAAAAAAAAAP4AAM\nAAAlFFCKihEBKKIQhEkIhEIRKURRSUIkEKIRUoQABIoQFFFKiCpFFBFBEhAAAAAAAAAAAAAA\nAAAAAA/gAAwAACUU0oqKUwEophKUSSiUwlERRFFJSiSQohlSlIAEipCUUUqYFEUSGUkSUAAA\nAAAAAAAAAAAAAAAAD+AADAAAHRNMiomNINiaDGRMyGNBkRFDkUkyJmCiFk1jEASKYGROOmgU\nORIWMZmQgAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAQAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAEAAAAAAAAAAAAAAAAAA\nAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgGGwAQBACgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAYbABAEAKAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM5ntsEGWco\nM5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nPm222wQlkKhIUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAzbabbBBkTqDHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAADNtptsEBRSoClQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM222zwQlFKhKTAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+OZ7GBBkTaDGoAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAgAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA\nAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAQAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAJABAAAACAAAgAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAlnOEnJULJNCzjA05Ywck\nuSAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAACZCQSilgyl\nMMhSE0WUgKSFIAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAJE5BSKUCKUQicwRRReDlR1AAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAkUkFIpQIpRCKQhFFFASVJUAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAACRSQMilAylMIpSE0UUhIokwAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAJE1ghx0CxzQiawNORMDShqAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAABAAAAEAAAAAAIAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA4AAADgAA\nAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAADwCBAAgQBAAAAIAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgIEAABAEAAAAgBAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAilwQkplg5wSsaZVWMAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADySBCSpZBIhLK\naWVlIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIp\nIEFSZEEiEoovRUXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAikgQVIUQSISiihFRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAACKSBAopRBIhKKaUVFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHMECiZEGcDommRUTAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nH//////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAJABBGEgAIAAAAAAIAAEhAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAkAEAgSAAgAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAHWc4XDrGCyTQpnZysYBcmDsrGAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAJkJBIEykMpTDJSQrKQEgkJ\nKykAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAkTkEgSLwilE\nI9JOomASBgkqLwAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAC\nRSQSBIoCKUQiElKiEBIBCSooAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAJFJBIEikMpTCJSUqKQEgkJKikAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAA0TWEgaJgsc0IZJNomITBgkqJiAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAEAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAGIAAACggkAEEABAQ\nARAAYB8AAABIIACAAhUABIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAYgAAA\nICCQAQQAEBABEACQBAAAAAggAIACEQAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAABSckgGpodZzhOOSFjO5lBAEcHYwXCcckxoVJg6yYgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAFKKSAmpgmQkFFFQZSRJYIASISUhIKKKkphVJBMqQAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAASolQCKiCROQUUWBF5E9BABIhJeEgooseiFY8EimAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAABKiVAIqIJFJBRRUEUESEEAEiElASCiipCIV\nSASKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAEaIoAmpgkUkFFFIZSRJQAASI\nSUhIKKKUphUpBIqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAARnChBqaDRNYTj\nkhYxmZBABHBJMEwnHJMaFSYGimIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAM\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/g\nAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP4AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/gAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD+AADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3/3QAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD93/3AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP93d0\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAP3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/d3dAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8AAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/d\n3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAP93d0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD93d3AAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3d3QAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nD///////////////////////////////////////////////////////////////////////\n////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////\n////////////////////////////////////////////////////////////\n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc\nContent-type: text/plain\nContent-Transfer-Encoding: quoted-printable\n\n\n\nHow did it look to you?  -- Nathaniel\n\n\n--Alternative_Boundary_MdOmHZe0M2YtMGzeozMdOmHZe0M2YtMGzetc--\n\n--Interpart_Boundary_MdOmHZe0M2Yt8GzexjMdOmHZe0M2YtIGzf1R--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.13.txt",
    "content": "* 13 FETCH (UID 13 MODSEQ (29486) BODY[] {5670}\nReturn-Path: <rhys@cs.uq.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA09077> for nsb; Thu, 6 Feb 92 23:18:13 EST\nReceived: from uqcspe.cs.uq.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA11919> for nsb@greenbush; Thu, 6 Feb 92 23:18:07 EST\nReceived: from solution.cs.uq.oz.au by uqcspe.cs.uq.oz.au \n\tid <AA14540@uqcspe.cs.uq.oz.au>; Fri, 7 Feb 92 14:33:40 +1100\nDate: Fri, 7 Feb 92 14:33:38 +1100\nFrom: rhys@cs.uq.oz.au\nMessage-Id: <9202070333.AA25077@client>\nTo: nsb@thumper.bellcore.com\nSubject: Test MIME message\nMime-Version: 1.0\nContent-Type: multipart/alternative;\n\tboundary=\"New_MetaSend_Alt_220042694\"\n\n\n> THIS IS A MULTIPART MESSAGE IN 'MIME' FORMAT.  It may contain enhanced\n> text, graphics, or sounds.  If you are reading this warning, your mail\n> reader does not understand MIME format, and some of what follows may look\n> strange.  However, the plain-text version of the message appears first,\n> and can be viewed with any mail reader.\n\n--New_MetaSend_Alt_220042694\n\n\nHi there!  Here's my first test message to you using my own version\nof metasend.\n\nFirst some piccys!!\n\nHere's the icon for my newsreader:\n\n[A part of type image/x-xbitmap was included here, but could not be displayed]\n\n\n... and how about this little devil to announce the arrival of mail:\n\n[A part of type image/x-xbitmap was included here, but could not be displayed]\n\n\nAnd ... any MIME message wouldn't be complete without a little bit of\n*richtext* to _liven_ things up. :-) \n\nWell, let me know how this goes on your end. -- Rhys. \n\n+   +=====================+==================================+\n+   || Rhys Weatherley | The University of Queensland, ||\n+   || rhys@cs.uq.oz.au | Australia. G'day!! ||\n+   || \"I'm a FAQ nut - what's your problem?\" ||\n+   +=====================+==================================+\n*_\n\n--New_MetaSend_Alt_220042694\nContent-type: multipart/mixed;\n\tboundary=\"New_MetaSend_Main_1292627053\"\n\n--New_MetaSend_Main_1292627053\nContent-type: text/plain\n\nHi there!  Here's my first test message to you using my own version\nof metasend.\n\nFirst some piccys!!\n\nHere's the icon for my newsreader:\n--New_MetaSend_Main_1292627053\nContent-type: image/x-xbitmap\nContent-Transfer-Encoding: base64\n\nI2RlZmluZSBEZXZpbDMyX3dpZHRoIDMyCiNkZWZpbmUgRGV2aWwzMl9oZWlnaHQgMzIKc3Rh\ndGljIGNoYXIgRGV2aWwzMl9iaXRzW10gPSB7CiAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs\nIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTAsIDB4MDAsCiAgIDB4\nMDAsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4\nMGEsIDB4MjgsIDB4MDAsCiAgIDB4MDAsIDB4OWEsIDB4MmMsIDB4MDAsIDB4MDAsIDB4ZmEs\nIDB4MmYsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4MDAsCiAgIDB4MDAsIDB4ZGMsIDB4\nMWQsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGMsIDB4MDAsIDB4NzAsIDB4ZjAsIDB4MDcsIDB4\nMDcsCiAgIDB4OTAsIDB4YjMsIDB4ZTYsIDB4MDQsIDB4MjAsIDB4ZmMsIDB4MWYsIDB4MDIs\nIDB4YTAsIDB4ZTMsIDB4ZTMsIDB4MDIsCiAgIDB4NDAsIDB4MGYsIDB4MWMsIDB4MDEsIDB4\nNDAsIDB4NmYsIDB4NDMsIDB4MDEsIDB4YzAsIDB4MGUsIDB4YjgsIDB4MDEsCiAgIDB4ZTAs\nIDB4NjEsIDB4YmEsIDB4MDMsIDB4Y2MsIDB4MDMsIDB4ZjgsIDB4MTksIDB4YmUsIDB4NmMs\nIDB4Y2IsIDB4M2UsCiAgIDB4ZmUsIDB4MDIsIDB4YTAsIDB4M2YsIDB4ZmUsIDB4M2MsIDB4\nOTYsIDB4M2YsIDB4ZmMsIDB4NDIsIDB4YTEsIDB4MWYsCiAgIDB4ZjAsIDB4MzEsIDB4Y2Ms\nIDB4MDcsIDB4ODAsIDB4NDcsIDB4ZjMsIDB4MDAsIDB4MDAsIDB4MWUsIDB4M2MsIDB4MDAs\nCiAgIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MzgsIDB4MDAsIDB4\nMDAsIDB4MDQsIDB4MTAsIDB4MDAsCiAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs\nIDB4MDAsIDB4MDAsIDB4MDB9Owo=\n\n--New_MetaSend_Main_1292627053\nContent-type: text/plain\n\n... and how about this little devil to announce the arrival of mail:\n--New_MetaSend_Main_1292627053\nContent-type: image/x-xbitmap\nContent-Transfer-Encoding: base64\n\nI2RlZmluZSBEZW1vbkJpZmZfd2lkdGggMzIKI2RlZmluZSBEZW1vbkJpZmZfaGVpZ2h0IDMy\nCnN0YXRpYyBjaGFyIERlbW9uQmlmZl9iaXRzW10gPSB7CiAgIDB4ZmYsIDB4ZmYsIDB4ZmYs\nIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4YmUsIDB4MmIsIDB4YTAs\nCiAgIDB4MGQsIDB4YWEsIDB4MmEsIDB4YjAsIDB4MGQsIDB4YWEsIDB4MmIsIDB4YjAsIDB4\nMTUsIDB4YWEsIDB4ZWEsIDB4YTgsCiAgIDB4MTUsIDB4MDAsIDB4MDAsIDB4YTgsIDB4ZjUs\nIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4YmYsCiAgIDB4MDEsIDB4\nZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjgsIDB4\nMWYsIDB4MDAsCiAgIDB4MDAsIDB4ZjgsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYs\nIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4MDAsCiAgIDB4MDAsIDB4ZmMsIDB4M2YsIDB4\nMDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsCiAg\nIDB4YzAsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4Zjgs\nIDB4ZjAsIDB4OGYsIDB4MDcsCiAgIDB4M2MsIDB4ZTAsIDB4MDcsIDB4MGYsIDB4ZmYsIDB4\nZTIsIDB4NDcsIDB4MGUsIDB4YWIsIDB4ZmUsIDB4N2YsIDB4MWMsCiAgIDB4YWIsIDB4ZmMs\nIDB4M2YsIDB4MWMsIDB4ODksIDB4ZDgsIDB4MWIsIDB4M2MsIDB4ODEsIDB4OTgsIDB4MTks\nIDB4M2UsCiAgIDB4ODUsIDB4ZjgsIDB4MWYsIDB4MmEsIDB4YjUsIDB4ZDgsIDB4MWIsIDB4\nMmEsIDB4YjUsIDB4NTAsIDB4MGEsIDB4MDgsCiAgIDB4ODEsIDB4MTAsIDB4MDgsIDB4MDAs\nIDB4ZmYsIDB4ZTAsIDB4MDcsIDB4MDB9Owo=\n\n--New_MetaSend_Main_1292627053\nContent-type: text/richtext\n\nAnd ... any MIME message wouldn't be complete without a little bit\nof <bold>richtext</bold> to <italic>liven</italic> things up. :-)\n<nl>\n<nl>\nWell, let me know how this goes on your end. -- Rhys.\n<nl>\n<nl>\n<signature>\n+=====================+==================================+<nl>\n||  Rhys Weatherley   |  The University of Queensland,  ||<nl>\n||  rhys@cs.uq.oz.au  |  Australia.  G'day!!            ||<nl>\n||       \"I'm a FAQ nut - what's your problem?\"         ||<nl>\n+=====================+==================================+<nl>\n</signature>\n--New_MetaSend_Main_1292627053--\n\n--New_MetaSend_Alt_220042694--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.14.txt",
    "content": "* 14 FETCH (UID 14 MODSEQ (29511) BODY[] {2430}\nReturn-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA02859> for nsb; Tue, 16 Jun 92 04:34:26 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA17584> for nsb@greenbush; Tue, 16 Jun 92 04:34:20 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA19108; Tue, 16 Jun 92 17:34:14 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA24551; Tue, 16 Jun 92 17:34:14 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA12690; Tue, 16 Jun 92 17:34:08 JST\nDate: Tue, 16 Jun 92 17:34:08 JST\nReturn-Path: <ysato@etl.go.jp>\nTo: nsb@thumper.bellcore.com\nSubject: Re: transparent.el\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nContent-Type: text/plain; charset=ISO-2022-JP\nOrganization: Electrotechnical Laboratory, Tsukuba Science City\nMessage-Id: <gFQJR.ysato@etl.go.jp>\nReferences: <AKAHO.92Jun16162622@etlsu5.etl.go.jp>\nMIME-Version: 1.0\n\nHi. I forward my coleague's question about MIME.  He asks where he\ncould get \"transparent.el\" which is required to use Metamail in\nemacs.  I tried to find it using ARCHIE, but no record was found.\nCould you tell me where can I get the file?\n\nThanks in advance.\n--\nYutaka Sato <ysato@etl.go.jp>\nInformation Base Section\nELECTROTECHNICAL LABORATORY\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan\n\n\nOn 06/16/92(16:26) you akaho@etl.go.jp (Shotaro Akaho) wrote\nin <AKAHO.92Jun16162622@etlsu5.etl.go.jp> (etl.post.misc:148/etlss2):\n |(と)＠数理です.\n |\n |emacs 系のメイルシステムで MIME フォーマット対応にするには\n |transparent.el というのが必要みたいです (RMAIL, MH-e, VM いずれも).\n |\n |mime/mailers.txt より抜粋\n ||3.  Make sure you have the GNU \"transparent.el\" package installed.  This\n ||is not part of the standard distribution, but is widely available, and\n ||should be part of most FTP archives, etc.\n |\n |少しばかり探してみましたが, 手に入りませんでした.\n |どなたか持っていらっしゃる方がおいでになりましたら頂きたいのですが…\n |どこか共用のディレクトリに置いて下さっても結構です.\n |あるいはどこどこにあるよという情報でも構いません.\n |よろしくお願いします.\n |--\n |赤穗＠情報数理 akaho@etl.go.jp / 5549 / D-622\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.2.txt",
    "content": "* 2 FETCH (UID 2 MODSEQ (29251) BODY[] {137687}\nReturn-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA01648> for nsb; Fri, 29 Nov 91 07:13:33 EST\nReceived: from joyce.cs.su.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA11898> for nsb@greenbush; Fri, 29 Nov 91 07:11:57 EST\nMessage-Id: <9111291211.AA11898@thumper.bellcore.com>\nDate: Fri, 29 Nov 91 07:13:33 EST\nFrom: Bob Kummerfeld <bob@cs.su.oz.au>\nTo: nsb@thumper.bellcore.com\nSubject:  just testing...\nMIME-Version: 1.0\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\n\n//38/v3/fn/+f/3+//1//v3//f39/3///31+fnx8fXt+fn19e3x9fX39/P77/Pv8/f5+fHx8\neHt6eXp6e3t8fv36/Pr59/f59/v8/n3/fv99//3//n9/fn9+fX59/v39+/78/Pv9/v59/X3+\n/X/9fnx8fXx8/n79/f79/f37/P37/v79fn58fXp5e3l4d3l5e318fn/9+/z6/Pv8/v7+f35+\nfHx9fH1+fX59en17fH98f399/359fn3//v78/P38/v7+//z8/fv7/v3//v7//n9+f359fX1+\n//79+fz8/P78/f79/f79/n/+fX1+fv5+fn5//n7/fX19fn59fn1+fn7/fv/+/3//fH1/fH//\nfX58f/9+/n5+f/3///99/35+fn19fX18fn///vz+/vx+/P///n7+f/1/fv3+//37+vn7+/z/\n/f9+/31/fn5+fH1+fXx+fn/8/vv9/fv8+fv6f/7+/n58fXx+ff//fv3//3///35+fX19fHt6\nfH5//31+fP7/f/3/f3///n59/v5+/f58/37//n9+fn7//37/fX59ff18fXx7/31+f/9+/v9/\n/f/+/fv8/Pj49vf6+v7+/v3/fX96fH17fn1/f/79//7///7/f/7///7+/X7+/f76/fv+/fr8\n/f79//77/f38/v3/fXx7e3l6e3p8fH58/f3//X9+//78/fz7f/5+fH16fX16e3l5enp7/v78\n+f36/fz9/f5+fnt7e3x7fX5+/3/9f3//e359fv98fn18fHx+//3+/P7+/P78/P39/P7+/n79\nfv/8/v3+/f79/Pz8/v5+//97fXh7end5ent9/37//37+//v8f/1+/f/+//78/fz/f319fHx9\nfH17e3x5fXp8/P/8+//9/P77/v//fv39/v/+/f37+/r7+vz9+/7+/35/eXl7d3l5enl8e37/\n/vz+/P3+/v79//19ff5+/n/9/n9+fX56fn3//P5/fnx9fHp7fXt7fnx9//3+/Pz++/38/vz8\n+/n7+f37/P78fH96e3x7fH19fn7++/v7+vv6/P38f35/fX5+fX/+fX5/fn5+/n5+fn19fv59\n/3x8f31+fX1+fn7/f3//fX5+ff99fH18fv3+/fr6+Pj7+P39/P79fnx8e3l5enp8fv/8+/n7\n+vz7+/v8/P1/f319/n///v3++/z7/P/+/v/+f359enp6enp7fHx9/n59/X///v7+/fv+//7+\n/v79/v5+fHx7e3p+fHp9e3x9e//9/vz9/fz8/f1///1+/f7+/v/8/f37/f37/Pz9//5/f397\nfHx6ent5ent6fXt9fn7+/n9//v/8+/v9/fz8/39+fHp+fX3/fH19fX19fnx+f/3//f3++/3+\n/35+fXt7fHl7e3z+fvz9/v7//X///f39/Pz8/fr7+/v7/P7//n18fnx//31//v7+/Pv6+/v8\nfv9+fX96fX57fHx6e358/37//f79/f9+/319/319fv///vz//v7+fn5/fX5+fn18fXx8ent5\ne3x7/39//v79/fv6+/n5+vj5+/v4/Pv9/fv//318e317e3t6fHv+f379/fr8+/n7+/37+vz7\n/358/317fX9+fn9+f37//n7+f37/fn9/fn18fnx9fHx+fn59fP//fH//ff9+/f/+/P39/P3/\nfXx8e3t8e3t7e/7//f7+/fz9+vz9/f3///7+/v/7/f39/////v9+f359f37+/v9//v7+/Pz+\n/f7+///9/vv8f/////7+/v5+/v3+/n5+fXt8e3t7eHl7ent6e359+vz7+/v5/Pz9/35+fX17\ne3x6e318ff///fv8/f7+f37/fnt9fHt9enp8fX///3///f37/fv9/Pr8+vr5/fv7//x//n99\nfnt9fXx8fX17/35+/v/+/fz+/P39+/z7/fr9/f/+/v7+/v7//n59fnt7fHp9fn7+fX59e318\nen5/fH58fH1+fn7/f/39/f7+/X/9/399fH59fn58fH59fv3//vz8/P39/P79/n9+/37/fv7/\nfP///P38/f77/P3+/v39/P7+/3z//399fH58fX16fXx9f39+/37++3/9/n//fH59fHt7fHt9\ne37+//z8+vr7+vv5/Pv8/f3/fnx8e3t8f39//X5////9f/z9/fr8/f1/f/59fX18fXx+f31/\n/n7+/f/+fn7+fX58fX1+/n1+fH1+fH99/399f3x8/f///f9//f79/fz9/Pz8+fz7/Pv5/f5/\nfH19fXx7e3x+fn17fH19fn7/fn/+fv39/f39/P//fn59ff98fX19fH5/e397fP1+/v5+fvz+\n/P37+f37/Pz7/v///37+/33+fX19fX9+/f39/fv7+/v9/f3/fX19e3p7e3t8fHx+fv9//v7/\n/P38/fz7/vz/fn17fHp8fHt8e3x9fHt+/v78/Pz8+/v4+/z8fv39/v7+//39/v37/fz/fv5+\nf3t9fHt9fX58fX59fX1/fX7+fv7+/n//fn1/f35+f/9/fn5///3/f/98f33/fnt8fXx9//9+\n//38/fv8/fz++/z//f3//v5+//7//v//fX7+fv39/f38+/z7/358fnx6fXt9e31+fP7/fv/9\n/n7/f/7//v7//f/+/318e316enl8fX36/Pj5/Pv6+/36/fz//358fnp7fH5+f39//n/7/Pz7\n/Pn4+vv7/X9/f358e3x8fHt6e3x8fX1+fv9+/v7+/v//f/99/X59fn1/fX5+fnx8fn19/v37\n/fv9/f3//X7/fn9+fv5+fn/+//36/vz//P39/37/fP7/f/7++/z6/fz8f///fn19fH19f35+\nfnv///39f///f31/fHt7e3x/fn9+f/5+/v7//n7///39/v7+f31+e3t+e3x8fXz//v37/vz+\n//1+fXx9fXt8e319ff5//f3+/Pz8/P38+//7/f79/v39/n/9/v//ff59fv7//f/+/f39//7/\n/v38fv9///z9fv99/358fv///fr//v9+fnx9fXt8ent6fHt8fv/9/v79/v/+fn9/fX5+fn/9\n//1//v58/358fXx6fHt9fn3///39/f3+/v7+/39//37+/v38/v3+/f38+/r9/Pv++/97fHt4\nenp9fH5+fv98/////v3+//9+/v59f359/399/n9+/n5/fH18fH19/n/+/v/+//77+/n8+/v+\n/n5/fHx7en58fP3//fj7+vn8+vz9/P5+f/5+fn5+f3/+fn/+f/z8/fv+/vr+/v5+//9+/X58\nfv99fv99/33/fn3+//7/f/59fn1+fH5+e/19ev98fv99f399/3///H//f/38//99fXx8fHx9\nfv1/f/79+fz6+fr7+/39/////n58/319fHx7e3z+/v77//v7+/r6+fv4+vr8/35+fn19fHx7\nfP99fn1+/f39+/z7+vj4+vx+f3x8e3p6eXp4e3x+f/39/fz9/vz8/v5+/318fnx8e3x9fX58\nfH19fHx8/379/vz8/Pr6+vz8/P/8/P3//n19fn7/fv79/Pr9/P38/n9/fn57e3x6fHp7fXx9\nfX9/f/38+/v9/P1+f399fX19fHx+fH19fH5+fv9///99ff9+/39+/31+/f7+/f7+/359fn17\nfXx+/fz7+vn5+vn6+Pv9/P1+fH58fHx7fHt8e3t7///9+/36/Pj6/Pz7+vv6/H7/f37+////\n/35+fX1/fv39/v38/v7+f37+fn7/fn19/35//n59ff9+/n5+/n//fv98fH59fn19fn59fn//\nfH1/fv5+fn7/fn7/f3/+/f5/fn17fXt9fH1+f/3//P38+vv6/P3+fv3//v3+//9+fn99/35+\n/n/+/v7++vv8+P38/f3/enp5e3p8fXx/fv79fv3+/v79f35+fX5+/v//f/9+ff99//9+f31/\n/X3/fHx+fn17fnx9fX//f/99f/5+/v38+fn7+Pr8/P39/vz9//z/fv59fn5+fv99fv//fv7+\n//3+/f39/f3//v3+/Pr//f79/n//fHx5e3l5eXp7en9+fv7+/f39/fz+/397fn97/n59f39/\nf358f39+/f7//359/3x8fX19fX99fv5+//7/f/9+/v99fX1+/nx9fXt/fn7+/v79/fz9//5/\n/fz+/Pv8/Px//v7+/f/+/f//fv/+f379/f/9/n7+//3+fv9+f359fH58fH59/X7+/f7///1+\n/v///n9/fv99f39//X1+fX18en97fHx6e3t+fv99fv///P3+/f7//n99fHt8fH39/fn6+vn7\n+/z+//38//99fHx8fXt9fH1+fv59/vz9+/v5+vv7+/39/37/fn7/ff///f38+/r5+vz+//5+\nfXx7enh5eXd6fHl9fn1/fv38/Pv7+/n4+vj6//59fnt5e3d6eXh5e3p+/v38/vz9/f7//39+\nfXx9fX59fn59/39+/v9//359/317fn1//Pz9/v79/f36//38/v3/fH5+fP/+/v78/f79/v3+\n+/z8+f18fn16enl7e318fn9//39+fX58fX99//5+/P/7/Pz6/v97fnp6fHp9eH1+fP/+/P76\n+/38/fz6+//9/37+f35+fn7+///8f/38/fv9+/7//n5+fX58fv59fn7//3//fX9//n99fHx+\nfv9//f5//n58ff7//398fHt7e3x+//79+/r5+fr7/n99eHl3dnZ3e3p8/v3+/Pv6+fr8/P7/\n/f59fnx+f35+fv9//fz8/Pv8/fz/fn58fX19/37///z9+/n5+Pv7/P5+e3x6e3t6fHx+fX9/\nfX//fn7+/31+f39+/vz9/fz8/v99fX18ent6d3t9fH59fn/+/Pz8/v39/f19/3x9fXt9fX5/\n/v////7+/35/fv9+fn98e3x9fX97f/97///////9+/r7+/z9+/38//78/Pz9/f/9/f5/fv5/\nfHx8e3x8ff5//P7++/38/P3+/v78+//+/v76/fz6/f3+/n5+fv5+fX17enp4eXd6enp7fH//\n/P3//vz7+vv8/P/9/31/fv9+/357fnx6e3x+fH99fX7//f79/v//f31/f3x+fX1/fX99f37+\n////fn7//n9+fn7/f398fXz9/f79/v7+/v9/fn////7+f/1+//1+/f5//f38/vz9//z//n79\n/n/8/v3+/f39/n7/fH19e359fX1+fn/+/vz/f39+fH19fH1+f39//X3/f35+/317fXx+fHt+\n//79+vr9/Pr6+vf7/fz/f319fXt9enl7fnx+/v/7+/n5+vf6+fv7+//+fn97e////X7+/Pz8\n+/7//n//fX19en17ent7fH1+fX////3//v5//f1//n9+fv5//n99fn///358fnx+/n58e3x8\nfX5/f35//3/+f/79/Pv9/P38+/v8/Pz9/Pz+/n9/fv7///9+fn1+fn3/fv7+fv7+/v3//vz/\n/vz8//v7+/v//v7+/n1+fHt7enl4eXt8fn5///z9/f3+/H1+f35+/399fn18/X7//n7/f37/\nf31/fn//fn19fHx+fn58fH18fn99f//9/Pz7/fz8/v5+fH1+ff9+fP95e3t4eHl3e35+/vz9\n/Pr4+fj3+Pr8/P7+/n7//v5//n59fn1+fn58fP7+/fz9/vz9/fv+/vz+/n/8/n/+fn5/f37/\n//36/vv7/fj7/fz+fv/+e314eXt7e3p7eXx9fv99f37//v38/f1+/f39/v3+//7+/n59f37+\nfXx9fXx7fHl6e3r+fH5+fX99f////f3+/v///v7+//7+/v1/fnt6enl7fH59en39/v7+//36\n/fz8/fr9/P7//n/+//7///7+/P78/v79/vz/f319/v///v5//v1+/v/9///9fv/9/X79+//8\n/P39/f7//v19/358fXx5enp7e3p7e3p+f//9/Pz9/Pz7//1+/31+fnz+f37//n58/31+fn18\ne3x9fX19fH58//7//v7+fv/+/v99//5+/f9+/n9/fnx7fHx8fn19ff/9/v79/P78/Pz7/Pv9\n/P39/n//fH1+fv9+fv9+/v38+/z6+/v7+/3/f31+e3t6ent7eXt9fP///f7//vz7/Pr9/P79\n/X1/fHx7e3t5fHx7fX18fn5+fv3//f3//v5/fX1//n7//n79+3t+fXT99Xt5/P9+fHt9enx+\n/n3+f/z9/fv7+fv9+/37/f/9f/5/+/7//X79f35/fnt+fnv+//79+/z++v7//v/+//x+/v9+\n/Xx+fn1/fX99f//+/f79/v3/fXt5ent6fnx6fH18//7+/35+//7//P9+/f///P3+/f1/f/5/\nfn58ent6e3l4enl6fH7++/z7+vz8+vr8+f38+/78/P7+/n//f///fv///f1+/f5+/n9+fnp7\ne3p6fH18f39+fX5+f/z//fr7/P77/f39//58fXt5e3d5eHp6e////f78/v/9/3/+fv///39/\nfHx8e319fX19/v///v39/P7//nt9fHx+/3///35+fX1/f/3++f3/+fr2+/v//Pp/+317/X5+\nf31+/X7//X1+fn/+/vv9/Pn7+/v8/f59f/5//3x/fnx+fnp/fnr/fXt/fnx9fX1/fn5+f///\n//5//v///n3+fX/8/Pz9/3//f318fHp6fHt8e3t+e339/vz9/v76+vz7/vz9+vv+/f19fvz/\n//9+/39/+/39/P79f/9/fH5/fH9/f/38+vz6/v3+e399fn58fn7/fv9+fn59f////n79f///\nfn18f3x8e3t//n7/f319fv7+/v59/v///37+/v39/H17/nx+fnl9enx7enx9/339/v/9/vv8\n/Pz9+/z+/f1//H79+/78/fz+/P3/fXp9enl8eHx9ff9+/P9+/P7/+/v++/5+fXt8fHx9/35+\nfX39ff9+fH7/f318e31+fX3//v38/P3+/fr9+fr++X79+/39/v///n/7/H78fv9/e/99fv5+\n//7//f7++vz9/Pz//35+fHt7ff99//z9+/n+/Pz+/f5+fHp6e3l5enl7eHx+fv3++//+/P39\n/P7//v7//3z/e319e357fH59fn7+fX58fv98/33///z8fP1+/39+f3t8e3x8f/1//f79+fz7\n+fz7/Pz8//99fX59fH1+fnz9e3z+ff38+/v9+vv8/fv7/vz9fnx+fH3/e/9+fHx/fn7/fvx/\nfv5+f/58/n98fv1+fnx9fH1+e359fv39/f78//3+//18fX17f3t9fXzz5e167379bXF3a3Nu\ncm1xdfJ3fel76f3x8Xz2eH79/3r+fn75+PP89PP+fnx7dHF5dnB/eXv8/fj49PX38/j6+vn7\nfvl//fz++Xz3/nj/e3t5fHX+e/77ff5++H78/v19fPh/+X79+vn6/fn57/du9XR8fHr2cfB0\nfXl9/Xb2b/1zeX1x+nL7ePr/e/Ny7HPx/njubOxs73r7/Hr2c/d3fP5+ePJu727ueX74b+1s\n72z1eH36dfNs8HD3e3r2c/p4+n79e/v6evZ8/v96/Hx5fXx8/n52/fd98//59Hnye3z8ef15\n/X9+9nj0e3rvcvJ8ff9u+nT7/X/7+/z8+Xn5+/35//1+en38/f//+379/vv7+/t7/v/69Xh6\n/nz9+3x2ePx8dn77+Hf7/v/q42V26XX8aPtvb3hv+Wx+eX77dvh2/f58/3Xy+X38/vZ4/H/5\n+3f2+f98+/7++/z+e/7/eXX+/Hd2fn18eH5+e379/H//fv3+/3/9/X1++/x6//3+fnl+fX56\ndXz/f3l/fn36ev/5fPn5e//+fXn+fHv9ff51//t7+338/v38f/98fn5+fHR+fXt+e/58+fn/\nfn76fH15fn14+H/6/X/+/vj+/P7/fnp8fP1+fvx69f5+/n7x+nz7/X72+Xx/+Hx6fXz8/X3+\n9314/f3+eP9+ff97+f/1+Pv0+/f+/fr//Xd+ff/8dP/+//l++vv6/v73fn59/Xt2enz+ent3\n/vl4efz7/vz/+nz8+X37/nx9f3p++3n9fnZ7ent1fvp7+fj1/XP4+n19/H50/3x5eHn9+392\n/P7/fnr9f3/68f58/fz8ev59ff99fXx4d319env+/fz//vv7/fr8/39+f3v+fn/2/nv/9/v7\n/f76+3///n/9ff5+/v5+/3x+/376+/73//bzfP/+e3v+efv9evn++Pn/f33/fv/8fHz9/Ht/\n+Hr9/Pv+en7//np9fP76en75en58/f96fnx+/397+/n+//v+//76f3X5/Xx6ePt8e3h6fnt7\ne3n8/v/8/v79+f77+v/+/313//9zf3p0eHt9fPv+9v18+Pz5/vt+/3z/93d7/Xb/eXv9dPj6\nent++/98fH97fnt8/Pv+//z+/Hb//nz9ff37+Xzw+Xr1+/t4/358/n/5+/78f/3+e/t9f/7+\ne/71/nl9/vz/ev38f316/H7++Pn9+fj5+X39ff59fP53fnz/9np6+/z6/P17+vb8/nn+fv79\n/vx9fH75/Hl/fn17/P5+/338/P57dn39/Hd4+v5+/nz+/Xp9eXj+eHx2ffp8fvr7fff7+fl8\nfP75fvt4efp1f/13/Xp+e3/9d359+3p2/3r+/3t+/vJ6/Px++Xh9//1+fX19e3X+fXz8fPr7\nefz7fv34+374fX76/3t5+/f+ffr4+Xx++fR2efV4fXl+/fv9/nf69nT/9vh3/v5/+fv4/vf2\n+372+X36/375eXf8cnf7eHH8e3Z8/H/+fnj8fnx7/n57/fv3/fz7fvZ5fvJ6+/p2/P19fv54\neXt2fXh0eX9/e355/v999nb8+3z+fPh5/vh6+Hz59np+ePb9dv74eXz+eHd+e3h7ev3++v/9\n/H/+/Hx5fXt/e3x3ffZ6d/b7fvt7fvj9ffj69/v5//v1fPv//nt9fnp7/n//fvf9evH3ePzy\n/331fHr7eH38fnr9/Xl8fvz7//b7ee9+/Hx+83n+/v9+d/r6e358/Pv5en7x+f/6/Hz/fXv+\n93t8dnr8eXn++Px59vp89Xjv/vrzfu9/+vt99Hx9+/33b338dH18fnn8fnf4/nb6+3r4+XV5\n/v79fvz8/fn2/Pr6/vL7d+79c+57fn53+3d0dnd7f3Z0/H3/e3T5/nf++X1z/fH5fPX8ePN+\n+/5/fnb4enj9eP17/fl+fX7xeXf5fnd9eHN/d355c/l+f/j7fX38e3/99vd6fvz8e/z9b/j+\nc398fH19/Xz9+nr9e/t8evr+ef35//d8ev50eX94dX54efv+fvz39Pn8/fr8ffx+fHd7e3t5\nfXV7/XN++Xp58/z4eX34/37+f3T6dnr7+/98+Xt6evl5evp7fX79eXj7fHr38/b88vn+9n76\n+3b//np4/H18fXz5evl+//t6+Xh7fv79/Hp97vx99fb4fv/z/nf++fl+eX5+fHr4eXr3fXx+\n/3p99/98+P74fff7/vn68Xz8/f9+/PV9f/78/nJ2/Xn6fnp7fPh+/n77+fr5eX79fH35e/n3\n//v1/f75+n159Xt5e/17ffF2d/d7dPp5b/17ffl2//d0/f539Xj//v71fH799fx6/P7/e3H/\n/Hp+e/36dP35d/l8fP17fv57+/h7d/v8eXl8+Hr/fHbye3n4en3+/fz+e3n8enn5fXt9fv1+\n+3z69vv8evf//vN4/vh/+/7+e3z7/Hh6fHd/evt9fPv+/f/1fvX3ePn7e//4fXn9/HZ7/Hv+\n//j7+vb++vf8/PX/fvn6/35+//78f318dnd9eXh9dv5/fHz/+31+/X5++P3+9fj5/Hr++Xp7\nfnZ+fXh7fHh8+3v+///7e3v493r+/f97fH1+/nt//fd+/vr///x+/f16enr/fXx9/P/8/H7+\n/f77+f38+vp++f7+9vv9fv9+e3l5eXh4/n9//fv9+P1++/n6/Pf+/vn6fX3+enj+dXR4fH15\n+3p8/Pt+/P1+/Xx9//z8/P99/v7///59fX18eXt3f/p9/vz/fv7/f319fn//fHp7f/56fvp+\ne/38fH9/fPv6/fz8/H57f316fXl5fHl7fX5/+vh++vh//Pn8+/v//Pt/fX3+fPz+fft+fv5+\ne357ff1/f/z9/fn69/f6+vv7/nt8fX58eHp6d3h+/378/vv9//5//P7//Xt7f3p7+3x7/X7/\n/H7/+/98/P7//n5+e3x4eHx8fHp6//x+/v//+35++Pz+///+/X58/P5+fXv/f3x7fn5+ff7+\nfH18fn99fHv+/X58/Pp//Pz7+fz8/fv7//78/X1/fn78fXz9/3x9/v78+vv69vv++fz8/f5/\n/v57f316fnt6f/t/ffz7+/z+/v5//vr9/v7+/P39fv1/f/95fHx7enx9fP79//36/f9/fv9+\nfn5+f398eXt9e3x7fH98fnx6fX3//P7++/z3+Pv7/fp+fnx+fHh7fHp5e3l4fHp7/vr+f/v8\n+v38+P3+/3/9fv7+/3/+f/77//78+/3//Pv8/ft9e3x7fXx//35/f318f3//fn1+fH7+/H59\nf3x9fn7/fv3/fn96fX18/n9//P59/v9+fn79fn59e3x7e35/ff7//Pj8+//+/Pv9/Pn+/f58\ne3t9fHx+fv36+Pv3+fv4+vr8/f9+fnp9fX18ff5+fX5+ff7+/fr8+/38+//+/Pz8+vr9/f79\n/v//e3p7eHp7fH9+/399/357//57/fx5/H16fXx3e/9+en5/ff3+/v76+/77/v36/v9/fH17\nenl7enp5e3x//v/9/Pz6+/r6/Pv6/Px+fn59fXt7enp9fv7+/Pr6+Pn5+Pn7+v3//f9+e3t8\neHt8e319fnx8f/99fv38/fv9fn5+/v///f5+//5/f359e3t6e3p8fXp9fP/8/vv8+vv7/P3+\nf/5+//7//f/+f/79/f37+vv5+vn8//59e317e3t6enp6e3l3fHt9fn5///38+/r++/z7+v3+\n/397enl6enl6ent7fHz9+vv8+vn6+fn7/X59fHx7fX19/n9/fv36+/r6+/r6/P3/fn1+fHx+\nfX/9/v79/vr6+fn7+3/9/X99enx7fHx+/35/fX7+fX/+/v7//31+fX18fn19/33/fnt+f3/+\n/X7/f31/fn/+/f///n7/f358e3p6fX19/v7+fv3///7+/f77/Pv9/P3++/r9/Pz8//7///9+\n/3/+fn99fX58/3/9/Pz7/fz7+/v8/3/+fn5+fXx7fHx+f///fv5/f35+/35+fn5+fn59fX5+\n/v/+/v/8/f78/P7+fX19e3x9fHp7fH5/fH5//n59f31//v3+/v7+/P37/Hz+/n7/fX18fHt7\nen7///7+/fz7+vv+/f3///98/3x9fXz//n/+/X/7+/36+vj6/P3//v78//39/v7//37//33/\nff//fv///f78/Pz9fn5+fn19fnv/fXz+fP5///v8+v39/v5//397fHt7fHh7eXl8e3t+fn/+\n//78+/r9/f3+//9+fv99fn9+f399fn96fn1/fHx8e3t+fnt+/v79/vv6//n9/fz//v38/fz9\n/v37+fr6/v7/fH1+enx8e3p6e3t9fH1+fX/+/v79//v//n59/////P5+/P59f318fn1/fX1+\n/n5/f//+//78/v9+//3///3+f/3//f5//f78+/v7+fr6/P79fX99fHx7fX5+f37+//z7/Pn8\n+/z9/X7+fn19fHp6fn3//n7+f/79f/9+/35//v/9/v3+f397fXx8fXx8fXt8fXt7eXp+//39\n/P35+fr5+/z+/P1/fn1/ff/++/j6+/j79/r7+f37f37+fXz/fXl3dnR2c3J0c3VxcnZ3eXl9\nfH3//Pv8+Pn39/n29/b28vDu6unm5OPi5ebq7/h8cm9raWJZV1dWWlxhZm39bPXzfOz47O/r\n4Onh5Ovp7Ozw7/H18fL2+f15dm9oa29rZGJ7/Pvtfv7+9ntyc2x69f/7+fPz7/h6fHz9+vv6\n//17ef5yb29yc3r+dXb/eG9taGNmaGZobm90/Pr69+/08u3t7enp6uno6evq7vLw6+308ff+\n9fhten52+vt+b3dwY2j74mo8NEZNUcpx5sjGvd/cU0frZ2r78dHMxM1ud1xYYFJOWn3b1tvn\ncf13YltbX3zi5OTn6u3/b19ibnbv7e3t7O36fX9y+/T57vj18urrbmNlbW37bk5KTUtMUGFm\n6M3W0NXi7nl6XWR6c/Po3Nvd2vLu8fjv8+n16+jx9vX5/fp+dXp++u/q6unq+PHq7/Hy6nZY\nPjMuNElY3c7Nwr3A0WpPSlZ67tvOx8TDzvVcUlBPUVZl5NrY3/hrX19bWl5v79/b3+Lq+XVv\nePTm4eXg4+3t8Xd2dGNaXFhQTFLXbU5BO0VO+WX+4trLzNTx/Pz13+Dp2trh4vZqZWz78OTl\n6+fw/XRvbXXz/fn0fvfy9Pv59P/x6/xubmRhbXFhXmxhZXNqXUw7MTdW+NzK3MvFyt1oT0vp\n2c/LyMnM1WFVVFRl8+Tl4Od9e19bXWVweu94+/Z9/XZ0bXz0/vP+cHT8/1tt+G30b2tu8/h7\n72xZST1BRk1iae7s29fj5f7/++ve2c/V197+ZGFx/ujo5+Do6fxzcW9+fO7x9uvw8/h8c3h+\nb3BsXWHuYmRsX/RvbGN77WzweXzq/00+SkpMZlxt9N7q7OFx+ujs79nW3NHZ+Gt7aGrg7urj\n6/ru7G/5+nPz5e756/Z6+W9nbHhuZmdeWXNvY/prdvlsXVtfafni3uXpfFpMSUtHUVtq6t/f\nd+ltbeJ669rU29jeZW9za3Tr6u3Z4vj8fXTx5X3w4ujs6v5t739mb21pb2FfX15veHn3fm1v\nY15bXG3v29/p9v1qXExLVE9bZWxpbvN58PB07t/o3tvsdXp5/93s9e/v9/HlfPT18+Tf5uvt\n9Pp9/nh2e3h3a11obl5/eW/ya2ReYFxfdGVt8+vr5uh3/3Nba1tQVFVpbGhWbnNs3HXt8Pfn\n+O1l7fJ16Ord3drw/fV54+Hq6OHb3+n5e/tmZW599HpyY2ZrXXJrb3doalxnZmFubGZx8e/i\n6v34+vtqZV5p4Wlp+11uZWFuYHz+fvtea2RodV73+ePX4d3o7Ojn3uPd2eXd6+z8efJud2x6\nc2t2bGpqZ29wZGdpZF9lYGxucGxw+PLp9uxz/vn2+2v4+Pb7Zl14ce/gcGZlaV1lW1d0bHp2\n7+Pm3Prr6ufd59jg19zl3/nw9Od9aXV0bm/7YF5gZvpycWtwcmZrX1tk/+3qfWtYc3/x4Wb0\n+ujp8n1dZGxx7e196/d1cnprbO9n+XBX+lx0fm7mZOX2+Nl84ebl3/ffaejleNnv5Gh38lvj\nZ/d9X/BsflttbWHla2NtaGZvbmtyZ3Fs5+xw8HZ9b+Pr7uNd9PJ36GPs/WflaW13YfZmdGto\n23R4e2p/8v3q4N/x5Od65v7x5Nvc43trefv37uv9bWJedntnaFt1WWfzbf1afHZ7/G/y+/D7\naefm9Xxk+ejX4V51cVzs5P/68Xltf/xye19deGrp5eRtXmtd7+ro3/r49Oruefpz9+7i4urt\na/z6auf3c/lz42368mBvWut6YX5nXV1v9O718m7+bXdlbOl54+Xm5P58aOf1eOpdZGzv6PP5\nX2dWXnx433/reXPqad/n9uBl9W/o2OnR//Z7aNt35PF8dl5pYe71fm9fbvtvXGVnaeR85HLu\nd2LfV/1kV+r56nR5Y2ve8Xbjde3leP12/GRpbVr7Ym1nfOhp5Xjs3N7Y8d7j29fX2+zjbt/t\n/vxfal19a1zxVWV5XO5Wa1lm5lfxWWLjed/2ZWJw6vXk0fX2fW3pZ/D+XXRi+P/+XVrrXnf1\ncvHy+2rk4fPd5erc4+Pd4d3r5G/+3e3i8HhhY1phaGzieXphXFhYde/2ZHJdc99222tveW/e\n9N9jbnNi5HxyXV5fX2tZbn953O7k6fPg7unx3tvY1tzd6+Tp5+nu737w8299cV9ZYWF39FdY\nZV11/1tjbHbb3+tvaWhv2u94W09n697bck1OTVd859t66uju2OXa5OXY387X2dfs5vTn7e/a\n7vttWFdda3PpelxuXlP6X3D1Zn1v4d/s+1VPYWNkfmZfXGFdWFtcZGfs3dnQ3Ofk5drTz9LT\n1d7Z297f7Pd29ep5e21jZmBkZ2NdWl95d2pjbXvu7mBkb1xcTU1QU2dhdXZqZ2B0aurd4NbW\n0dHP1dvY29PX0tXY1uzm/3/t//lnZWdrZ19kXGZpbWVf//PiellTS0pNTlNcWl9tcu/4dmls\n997Rz9HV09XV0NbV19fS09Hc4vNt9vP1dW10ZmJgXlxkam5ubuXtdV5NTUdHSUtXVmn97+H7\nal5ZZOjUysrMz9HR08/W2tra09DP2uV7YXP69m9raV9pZGRpYmVz6tngVUg+O0VIVWNkdG7q\n7Ot2XFxe48/Fw8rO2tvZ1tTX09XS0tjf7Pxvfvv5em5vZmp0aV9gY/bW7k8/Ozo/T1VoeWf4\n39fmcltPX9vLw8PM2N3d2dPS2NbV09HW5HVoZnXo6vN0ZGVpenFsd/Xb/kc8ODc/Tlzj3+/y\n4eTs91xdZ97LxMLM1+Lw4trR0c7Q2Njj+PP+dvjx/HlwZ2z+bHJv+dj/TT41NjxLX9/c/vH9\n59/wX1df9czCwcjX7Pnl2tPP09LV2d3m9HJufezw9HlncWtyenfm5eVOOTc0OEte79zffOjU\n5utkT1nvzcW/xtjffu/c0tHRz9nY2ez2/3Bs7fptfGdpffv9fefi90o3NTU7Ul7h3+js69Xp\n62FPX/HKw8HK4u5259rU0dbT19jb7f1xevzu7ndvaGlz+vfv4d96QTQ1Mj5ZXtnm4/Xg1n/v\nUUxj4MbAv87t+G3f1NPU1tXY09vs+Wxu/e/xfmxlaGn573vp5PVBNDUvPldh0uThe9vTfeFT\nTV7sy8K/z+DxaejZ1dXS19vT3/HzfX727XNya2X3efv1/+rg1UkxNC42X13W1d5+3M1351xK\nV/nOxr3L7ONl/t3Z2tXR3dTZ/u3t+ezmeGVpX27m7et9eefY6zcuMC1H/u/N595uzNVq8UtW\netfKxsXg5Pdw6ebd2s7V29xxb+re3d/6WmBwbPX/en/y4d/U2z4rLy450V7T1eDc1chTZVNJ\n3dLMzsnc9NVvcvf0387L3t94W/jd3d7jaF1saH3wd/fs3+bc2upUKisxL9bl38/lzPbBYUte\nR+jRwsvOz1vifF9lcdzYxtTu+Vhk897u6+ht7f53eHB+befe3+Hq3txsLCY0Le3LaM/ox+bB\n6D9ZSPjOw8rOw/XsZUxOXdrZyM7x6WhgZHpiYej67+fze3b9ZHL1fd3Z2N58be7RLiE9LVy7\nTtV5vPPFzTZaTufTw8rsvNjf+FFLSPNj3NL64+7obfdmUmtmaHPz7OnW3vb4YWP45t/o6O3m\n2fbc/ywjNTZSxFj3zbvOz+o6TnLn6M/P0LvH6V5WTl3ba3DpaFlyY1JoaF1s9F1h6X/95+ty\n6uP05ux0bvN2feXd3uff/mtvZ0EvLThEVO9b5srDz/ZbS15/83PezMfBzvFoamdiamF33tnh\nb09MW1BQWl5r5eR49PZubW9lduPk4N/i7fF2YHbs6Ovnf1vn9Ft8XT88PDNBT0Zs6M7Py9Ve\n+HFdbH3o1cnJ1NPe+ntjXV/98+3n9HhuY0xETFNYYGBg59l9ZmVte/1rat3T2N3o7ubkcV52\n4+D3cezweX5qYVtoPz5KNTtJTFN40uHMy+fw5Pxf+evu1MzT19Pe/v5oXGd4cHzv9Hh1Y1ZO\nSkpPW11z6Obh8XxlaW9rfvzi29ja5ufq8XptcPP8dfh7b3XvfF9ydVttSj5OQDY7VEhU39/R\nycjr39dvanj17tLO2tLP2OfvalxqaV9m/v50cWdeXlRITE9NY2585tvec+t0ZG519e/Y2dvX\n3up/9Wtk//p1a/j/a2Zy9WZ08GNfUklLSkY4O1VTTXPYz8XK2NvN319rde/f2t/WzNLk8v5q\nZV1WXW90aW95dmxeV01NUkxTanLr39rl5+xudHh88d7c3NfZ3en2fW9qZ2tsbGlsb2xweVxj\n7+tjXVhKWEk/OkZdRV311cjJzNrJ0npmavv86Pnfz8/b49/se2FYWF9gXGNz/3lya2lZTE9P\nVV1f7eDV2+Df6u5tbnTs5Ofe3Nrk8XtvcGlpZWz6b2p+eGtrcflucnR/VU1dTj85SEtBYmTX\nyMPKzMDP43tsX2lqXe7V1drT1tzieVpaXFRTWWFpe3ttZlhWZVRXaHft7t/s3OHy8vTo7+Tt\n5+Dl7vrwevn8b255em5nb29s+mT98nl5clxPYU5AOz9KQVJW6srGxsi/xs3c/2psXVNdfeji\n2dfRz9jq+m5cVU5OT1FMSWP2XvTg3tjZ7/7c+2Rqdn7k5fzb1d/o5O7y725jbW9iYmVjZ/x0\nau/vevnvZ2dmVE0+NU9KOVVU7czFzca5wcrM1OrfaE1TYVhZbW3p09fk1tbqdltNT1BHSVBZ\nX/7t4dLP2NnV3+TsfG56dGR6+vjs5uvq5/l2b2FdXVpZWlxeYWdmbXlva3BvZVNPXlZUXFln\n9eDm3NLRz8/R1NLU3OTr/H1zZ2BiZF9eXVxeX2FhZ214+fv18O7y+Pr/9vT6f3/6/v5+eHt8\neXNydHV0cW9vdXNub25ucXV1eH389/f4+fr9fm1maWNgX11eY2hpb3zz6OHd29nZ2tzg6Ozz\ne21taWZnZWRnbG1udXR5fnx4ev35/Pz6+/b+ev9+enp6eXd5fXV3enl7eHh4e3x7f358/Pz/\n/fv6/XpsbW9qamZmaW10df3y7Ofk6Ofk5unr7O/v8v18eXl0c3NvdXhzdnV2eXt5eX79fHr+\n+33///78//r5f/t8/f98fnr9df56cvp6/v56f3d7e3Nta2xsa2lsb3T9//bu7enn6evo5+rq\n7fH19vp5fXt1dnl0dH14enp8fv18/vj9+/34+fn2+/j5+f99+3x+fHv/en16fX59fv/8fHl3\nd3Rva2tsbG1tb3R+9/Xz7u3p6Oro5ubn6u319fV8enl2eH1zcXl7dXh+df/8fH77+Pr2+3nu\n/vv1dff9fvpz9ft99Hb4+357eHl3cm9taGtpaGprbnh6+e/r6ujm6OXl5ujr6fP59nt1dXpv\ncnhrcGtlVFnwbN/a39HZ+XLa63Xfauveb3fm5vjo7H3m4X1pZWBYUE5KTE9OT1lkeuXf3NHO\nzs/P0tPU3en6dW5gX1tcYWVpanz16+nn4+Df4ebk5eHm7e347/7/d3p9dXlrdHNsb2VRT1BJ\nTUlKTVVeZOrd0crIyMbFx8nN1drjeVxZVU9TT1JaZmz+5+Pb2Nrc2trf4ejq5uv9dvt6fHdn\na29pZWZhYWNeT0RNUEZXUFNt2+7czM7LxcvPyczX1d528nZXWFxXWGBaXvbz+eHf49ja5OLd\n5eno+vryeWR4Z25zY21mamhjZ2NnbWptc2dfW1heXF1caW3x6+Tc1dHPz8/P0dnc5/h8aGRf\naGlwff3t5OLn3uDj4/P4eWxrYF9jX2thYGtrb2tvaHN1d3J+e/L18/ptamtsaHNrc/fv9evj\n393Z393b3OLi6fLm7vn66vPw7Pr75vH7727+eWptY3NnaGdpZGJqZ3Nn/Ht9/H3u9e/u7Pfp\nfehr6239em9tbm1xaHtq+3r47e7i4N7b3tvc3uHl3+/neuZr7XFtbVz+Y2VpZWdwb2BtfWxs\nfG799PF88Pd25nbpeufw++r6e+xw8Hv///X3efD0euf88vfv8/Bx53vyf334fv39+Xr+73fu\ndPJ26P137m7sbulf31zlaXVycn9k31vfYt5h33Dr+/F9d+Vj3V7cX91p7X7ka+bz9/7kXd9m\n6Xht4mHba+ly3VnZW/Fw9P9m5Hxv53XpXtFV3X5p4V7hXd1f7nz+dP/lXuJl3FjaX+XuX9Vb\n2Wvq+W/faupv6nb76Wjo+WHfb2jpb/J0+mzcXNVd4e54eXTubnv7+nTzfmfiYv/qc/3qeuJu\n3XXz8/j0aeVn62r3c/V983TkYe73bO902lTRWd5g6m9u2FPXau/8cfls7m/rc/V55nTl/uh5\n32/gbuxu/Wx4b298fW728Gns837863b0e398b+pg3mfned9s4nvs8O5z7nPfXeBm/u5h4GLg\ncf/q/vFp4GLvd2PoZfht9G9t5Xj05/J86ulx5nHpbu1s52PbXNpd6XJ1313cW+htfOx2dfT7\n+P/rbt9p4WXpb/V8e+1y8H187vZ353vpb+Vs4278/2LnWuNnbvdo7HXrfe7icefvfOh/9W3q\nauz+ae9n9Gr2bPf1fe/+8HPlbv369Hbp7m/hbPrqZupq8Xhf3lrjZuls8Hz78u1+7+9u63Dz\neHptb3pta/hqavb8b+77ffXq+f7zfHb8d2t9eHlz8f3+6vL37Ovt6+f26OXr7ujr7uvufvvu\nan5vaGxobGNuXHdgbGJ8cmnt+/vy4vPa4HhWWF1OVk9MVGBqZOjm183M0czMztTZ/3t2ZVta\nX2By+G/h4Nve3OPl3vV4dHNwe25rY/5hdWd2ZP9gaWlcfGZ7efXq29hjRFZVRVFDQU50VW/j\n2su9xMa/wMbDzebj42BaVktLV05MW19m5up+29Xd29nm3dfr7+rt9elxbXl2dG1zZ2dvX1po\nWmljbX312OPbSkVZSkZJP0RTd1nt1s3CvMG+vL3Bwc/e3/lYU01KTU5KS09aX/91997Z3dve\n39nY493l3uDj+fr1e3JtX2l2XGFjX2BuZF/2aOLy2OjVUUFcS0FNQD9RbFP71tbEu8C/ur3A\nv8zl2+5XVU5HTFNLSlNTWfFqcOTb5Nje7dnY6tvn4+LX8Xzr+H52amhtZGRpXmJqaF5tbHZu\n6nrr1Od2RFZWSE9HRE12XnDd18u+wMO+v8TDy+Xk5mFaV01PWlNPV1dXZm1ddvH16ODt5Nve\n4tvi3d7g8fflbfp6X/dgcF5lb19yX21jeHFudfr06eDe5V5Jak9PUktKXHte6NzXycHJyMTH\nysjW5N/uZ2hZU1ZaUVJWVVxmZ1/t/Ofk5uLg0/Hb4+Xn4H1++HN2bmlob25uZXdf9Whta/tr\n9n/6a9/qetft5l9VWVtSWE1VVH9n79/czsvLzsnNy8/X4eLueX5dXFpdWVhcW2L/anz46ebj\n4u/d6Ofn+fHtceli6Wn8aXT/avNw8Wxt61/7aXR0dX7oatx56dpuzk3cSN1L+VJYcF7eYNZ2\n0NXR0tXP19TY9dpj2lTpV2N1VO5M2UvNTtdn+t/zft9v4WzQTstOzE7YYGriXu5g61vobn38\neWznbPhq7HBy52fx/+794fdh9l51YHJkYvhu6XfacNbd6NXq03PMYNVp521xcG9b7GBf3lfr\n9nRnz0nESc19WchIzvROxkDBQsxeV8xHzVbp5VbOUuTsYunjVtBW01bZfGfbZuNj5Fpu/Fxv\ndWRo8Hl16eNs0GHIT8NsXbw5tje3OL9NVsxBwD29Qste5u9eyUbFW1rEPLk4vE1VvDSwMrY/\n3sc3sja+Tm7NP75G3uZoaNZW2mTw51bTVvD8X+5h5Gpp0kvHSstqXcFAvUzbzD+4Ps7PPLk7\ny+FCvD/W0UHATnnOS81a695RzFTt31bWXPPiUc5Wc9RO1l5+7V/hZOx4f/586WXu6mDm8Vzd\nbGTeYfPzbuNn7uBp4ely5erz7ezr/+zobvznbXHlc2/sd2/+dXZoef5f/vBi+O5ze+rwfe/r\n/fjpe/Xw/PV98Xx79HZ58Xt89Hb4fnjwcf3+dfVz/H7/fXvxdPj4+fP77vny7/fy9PP58/r8\nf378ev17fnx9fnz9ff1+/P3+/f76ff5/ff5+ff19//5//X79/v/8//76/P77//38ffx7+nv+\n/Xr5e/p8+//++H35/v76fvz9/fh+/X1+fXz/fn79/v79/fx9/P57/3z+fP99/n17/Xv9fHv/\ndv5+e/z//3/8/v7//n5+///+/n5+f3t9fHt+e355fH57/nx+/X31fvj7/vf8+fr5/Ph9/f57\nf3p+fP59f/18+X36/H72//n9/358f33+/n/++//4/fn6ffV6+v99+Xz7/n/+fv99f31+/Hn8\nfn77fPr//Pt+/v/+/f/+/f37//x///97/Hp+fXp7dn16fH18/33+fn/+//7/fn18fn9//H//\nf//9//3+/P9++3x+fX19fH56fH19fn3+f37//3x+e3p8///+/3/++/r2+vj2+vj6+P/7fv//\nfn56/3p9e319ff1///x9/v79/vz7fvz+/P38/X78/f78+vx+/P39+/1/fnx9fHl7dHp2d3l3\nfXp/f//9//z5+vr49/r3+v/6fX18fHp1e3R2eXh3fHt9/31//fv8/fz++/7+/f7+fXx+f319\nfH18e314e3t8/fv9/fn7/Pv8+fr7/P/7f/3+/v59fvz7/fv9/n/8fnt+eHp6eXp7fXp8fXp9\nfP9+//3//P35+vz+f/3+f/99fH19fn7/fH7/fn9+fn5+fnt6fHt8fv97fX9///78/P3/f31+\n/vz6/Pz//Pv7+v37/v38+/t9/nz//3t/e3t8fH7//f/+/Pz+/Pv7+v35/f79//1//nx/fnx+\nfHx7e3t6fHx8fX1/ff/8f//+/Pz+/P7/f359fXx8/n9+/n7+/v78f37/enx/fH59fP99fn1+\n/3x+f/9//f38/n7+fvv9/Pn9+/76/f/9f/19fv9+f/76/fr+/v1//n7//37+/////n58f37/\n/f/++vz8+/79/v3/f397fXx+e3p9en19f358/n38/H78/37/fX98e318/v7+/v///////v99\nfX18fn18/3z//3z8/v79/v3///7+//z9/vv7+vv9/X5+/37/ff3/fX19f//8//3//vn8/Pz9\n/vz9/P97fn19fX9+e/9//v5//X///31+fHx9fX18fX7+/fz9f/7+fv99e3p6fHt+fX5+/vz/\n/f3+/P79/P//fnx6eX59ff9+ff9/fXt9ff//f/v//v3++/39/Pz9/P/9/v78/v5/f318fnt8\nff7+/vz++/v7+fr5+v55dHx1aV9x6GT24vji5uXm6ujv+fb9eG99/HFvdHVlVWjuX+fu/mzu\n32hW/3Jm5Pflf+nk+vnt6vz/8PF1+e77bv36cW10/GtrcWtjaHZxb3P8fnz77/D06Obr7ebr\n8O7r7/ny9Pn89f14cXh4c357ZlBCPT08RVflz8vDycfIxcjM0+5cTk9PW3Hf3uPn7PL25un8\nZ2JaWF5u9u/i4uHi3d3e4ur1b3J2++zf2tjY2eFRNjEuKzI95c67tbu8wb3Jy9HvS0A/P0Zk\ny8O+vsDP3edyWEtIPjw+SlzcxsHFzNX8YltiXl9ufujdz8/Q1t3ueP317Ori8G1JMy8tLDdJ\nyb60srrB0NJy+v1kTUlLTFzWwr69v8t8WU9LSk1OSktPXH7SysnP3XNXVltt+t7b3dzb2Nvb\n4PF0a2939Ofj6ersWzsyMCwwPunCuK+2vc3XYlhralhSWlZd3sbBv7/J/FNLRURLUFBWXnX0\n1c3O1ehnUlReft/Sz9jc4uz6+PVxb3d+/vTs7PDq3e1KNzMtLDdNybuur7rF3F1LWGhmYm9j\nW/nPyMPAx+dVSkFASVZdYnJ3befW1Nfc+ltVXnHn0s7V3+l6a2/8dW16eW568/z+9+zj3P9B\nNzIsLz13wbWus73NckxJV2Bl/etubd3Py8bEz3JTSEBCTFddb+v78dzX29/lalpebfbbzs7Y\n3/BqYm17dv70eHP48O7o3tnXYzw0LiowPeO+sayyust3SUdRVV548Wpx2s/Kw8HM6l1JP0BI\nTVNj+v/r1tHV195sV1pfbeHQztTX3/tv//p48+76/PXr7t/S0G48NC0nLDZcxrKrr7S+1VNN\nUU5QWl5TWe7Vyr+8wM3gWEU/Q0ZHTFdYZ93PysrL22taVVRd7NvZ1dTb4t7d5+rve2x19eja\nz9ZKNzEqKS89bsq1sra6vcbW0tf3V1BHP0JQbd3Iv8PIzNX0a2taSkJAPj9LZt7Px8jMz9DU\n3uP8YVdZXmbv3Njc4eTt9u7r7OvgbkY8ODIyOENPY9PPzMrAv7+9vsbU335bV15dVVNVUVFe\nfunf2NrndmtoX2RnZ2Fjbnfw5uDp9X/9+/zz+Xlvcm5sb25rZ2hrbHB4//nz+WZWUFJVW2Jr\nZmRoZmt46+Xg3t/f39zc3uHo8fx9fvv19vx+dW9tbGloaGZjY2VmZ2hpaWpuef/z6+nq7O/x\n9fX09/n7+/5/fHd0c3RzbWliYF9eXl5gXl9hZGtue/75+PLt7ero5ubl4+Pj4+bp7fH3/X14\ncWxpZ2RkZGNjYmRnam94/vv8+fv69/bz8vP19vf7/P5+e3p5eHFua2dkY2JiYGJiYWRobG52\ne/79+e/s6Obk5ujp6+vr6+zu8vr+fHVybWtpZ2hpaWttbnF1e3p5fXx9/vr3+vv/f3x5e3l7\nfv7+f3x6eXVzbmxsa2tpaWpqbG1xdHl9//fz8e7t7e7u7/Lx7u/v8vL0+vr8fnhxcm9vc3R3\nd3h2dXZ3en1+e1xU0+VZ5mz97unuefL6+/nwfm9pXmpxaG1tamx3fG9vbmppZW/t6OXi3tva\n2t7r+Pf7/n1xd3v++P59/u7t9PV3ev36+nJucHV0cnJqaWppZ2VlZFtWUFFZVFhXW2Rt6ujd\n3NXPzs3Pz9DR19vf6/Z2bmplZWRmaGttc3328evn5ejq7O/5eHNtZ2RgX15dX19haGpxcXR4\n//j89/319/Hw8/Pz7e7v8vDx7/H18u/0+v/9fn7+fv78+vn39/Tw8/T2+fx9end2eXl4eHh2\neHh5dnl4dnh1dXV4enh7fH19e3x8fH5///38//7//fn6+vv9/f78/Pr6+/7+///8/Pz9//99\nfnx+fn1+/39+f3x9ff77+vf6+/3//v79/317eXd3eXp6e3p8e3x/fn98fn7//v3+fv/+///9\nfn/++392+fh1evx8dnv+d3d+/np+/H59/vv+ff5/fXz8/P38+/t++vr8+v38f319ff9+f/7+\n/3/8/Pz+/fz9/P39fn19fH58f////35/f/7//v5+fnt7fHp6eXp5eXt7f/9+/v79/P7+/P39\nf/9/e318fXx//n19fP78/fv79/j5+vz8/f5+fnx8fn59eXl7fP7+/Pz9/P39/fz9/fz8/f5+\n/3x8fX17fHx7fH59fn///v77/P38/P5+fHp6fXt9e3x9fP///Pv6/Pv+/v59fnx+fv//fXx8\nfnx9/P7+/n7/e3t9/n9+f//+/vz7/Pn7/Pv8+/3+/P38+v3/fX1/fX1+fH99fX59/379/P79\n/f37+vz8/vx//vz++vv7/n1+fX9+fn5+fnp8e3x8eXx9fHx8fXp//n7//nl3fGtJX7lRSMjX\nX1HP7kHnx05X03dOydBZ08nYVezdclt+aUX130RNV87lTsXQa9bMf3jVb299UV38cU9V5t9u\nfcjtacRzb+liW2NsUllfclNzz1vfz9jr19Dm8dp6Wm7wW2NmZE1Kb95p6tDQ3tvNb//YVVpk\nZ1RZ6l9k3ujl197e3NbufeFvampiXe5nZ3tq3+zl3d/tYeNnUGxgVWR2de3kc+HQ7Wnq12dV\n6O9if19e1vpTat3rT2zWbPx6bN7Za2PS12123vtr7mnu125o7en9eXT53PJz4dPf3trb3dja\n5OL9+WlRW1ZLTE9OTlNRXWti+ez95+336uDg/ujX2eTU1uzi7/Lt6u5l7913XWLs9V5mbPt0\ndfxr8OXd7/Pk6eH0ffbp2etfbe9rV1lfW2xhYV1fYk9XYvhx+93W0OTl6tjWe2pn3upqZGzq\n/t/o7M7Jxs7P09HS73hfa2f0a1NkX2haVE1TWktJP0A+PD44Oj9Hae7NzMa9v77FxMTAwcjH\nzMnP1/Vn7+zd3dzf5dzqfG99f3ZuW1dWVE5LTlFYWV1jYWli8e/87+jY3utfRjs+QkZPUmrm\n0s3Nztvf3vD6fu/k2dDRzdHW2NfV29ne3dzf3+rx/v3y/3N5cnFvaWNfW1VXU1ZdX25xffl6\n/n3s6XZOPDs6QExT7PvX08zHy8fP09vp6fji9OLd2tLV0dfX2eHf8fdvaGhhamdvbGlsanFt\nbmZmZl1bWl5fYWpx/PLs6enrZ0tDQUFHSV9vft3dz8/KysvJ0tbd5el87/3u6ufc393i5On2\n73hzbGNlZGViZGdmbW50eXn6fn3/+/v+9fr69vvze1tLTkxJSU9OTVdYau/f29PMz83KzczR\n1t3k8nbr8/jv7+/25ern5vn5d25mZ2deY19fYmRtdPTx7Onv8+rs9HJWSkxJRkhOS0xUWGrt\n3dfNy83JyczM0Njg53px93R2/n14+uvt4+Xw8XtsZ2pnYmRfX19hanrw7+Tk6eXo5u11T0pN\nRUVHTElNVFR07t/UzcrMx8nLy9LV3+t0dP9oeXV6//fq7OHo7ex8b2tuaGRkX2JhZW/87+/p\n6+zq6+p8VUpNR0VGTElMU1Rr7t/VzsnLx8jLy9HX3ep0bntobnZye/3v7eLn7Oz8dm9ycG5t\nY2RnY2v/8O/r6ezq6/FnTUtLRURHTUdPVFh57dzWzMrMxcnKy9PW4uprcn1icG5yc/fp79/r\n8Ov/eHD9bmhtYGZobXzz6u/m5urRyF9HRj48PD9JREtWXd3NwsC/v8rKztfjal1OTlFa8eLU\nz8vLzM3d92BZWl5scPD29ufh3eLf4+ro/vxsWlZMOjAxMDpDUtPgycm+vb+90dT7d3Bu8V7/\n/uHZ2NTj2+Tc2+x+X15WYXX95uLZ2M/S1+D0+3L5bnl1amdhY1lLMS4yL0NFauLexMi3wcDK\n39/512zpbmzk2s7e1fT14uDgfHtca21ubWz9ftnW0tPa4uzg+fX0fmtlZ1BRWFBEMDM0NU1H\n5XPOyMK6ycPb2Ovb2njjc+Pm0dnp4X7t7uJvbW1u/f5+Zfzt4dfT1tzb6vHxdmZxf3JlYFVN\nUE9KNTM3NklNbm/UyMe8xsfY0+Ha1+zu+uR63d/y8ubh6drsdnPueP7yam3s3uTY2ufp5vd8\nd2NhbXRfYV5OUVhVRzY4NztHSWZXztDBv8HFz8nXzdvde3t4aO12/HTd4dnZ4u7+7nT+amxr\n7ujj3eLl7ul6bl9fW1tgXGFaW1dZX2dRPkI/QEpNVE/o4M7JxsvPyc7N0Nb6bXFtcvv4duPZ\n1trX4fHr7fpqdWpmdu/49fJfc3RgZ2NaXVxZXlxZV1xcbm7/fFhNTUpNU1ZeX/js29TTz8/R\n0tDc2+L46u7m7/Hm4ODd4vLu8Hl2e21nYXNgZXdaWHFgV2RcX2NgYV9jd2Re+Vt36Hvy6ej0\n7vz0fu3y/PLy/3Z2b3R1+nnx7nr19+v/8vV/9Pz/72r45W71fftv7HdgZ3VnbW5pbGZ2Y2z0\n9P356vV/93p4bWxnbetlZnx37W93++7w9e55enh1anT3Y+n1avH5/29o4XNp53Fp83Nl8Hpr\nYXruaG1++n737ml44upv5vVl7fpn+3ptfv5vZPp7c3p2d3d1d3rscnvmeG5t/Xtzb292/n9q\nd/Fp/el/9/3vZfHzX+12fPX082Z87m3eeH7tbeJscfRnbm50a3Lvb/75dWxt8v32/m/1cml2\n9vz582v0+3z9/fB6+X5laG/97/z9//Rr+n5s5nl76G1/f2FscPB4/u5tdvDsaul9+/jvfGz2\nY3Ltcmntc/dzc27473f1cfNy73lz6v9vc3hy+25qdfJ463lue3r1fHp0bWvu8nlv+Xn44GN+\n8Hzo/X54c+Vsa+Vfc951dfZ5cvNxcel4/XZ7++h8av9353l19+19/nXuffX0ePB4+2ry8G1z\n7/t1fW559Ph6d/By+Xv1aXPoemlv/mVmbHVsc+947Nt9Z+z57/b+e3Xvbn3qce5pZ+tu6/Jx\n6PR7821383vp8u50/fP38fr4ft7peP59b2Bu/F/t8mJcYN5l5vFd3dr/dnZf9Ol/b23t5P/o\n6XT17uVt6Pdlf3xiben4d27abXruYe/371/tel7v8Pn/6HnievZ9cOx2/m9t/uzx9Ox6595o\nXu1ldfZvZXPlaW7p+3rr+XLp7GVidvL98Ozu9OP07/RyePB6ePp59WzpenXv8nHpfmT2ZGhk\nfF9n/Wzz/f1x+ufc7PH96Oj74HL16eZ4+vZsb+7xY/J2aHbtbWP5ZmntfFxu8m5u73Zn6vhx\ndOz4c+nrfurh8e/o9X7s73tz/3lzeXVkcHxua29vamprZ2Z6eWx2+3r89Pxz9vJ+8vL3++rs\n8O/t8+3j6Ofl6uvn5+vr7Ovr6e/08u7u8v39fnp7dG1ga3ny5vA/MD06PEpHSU7ExMC8vsXC\nvMve+l1LVVdKSlpt68rLz9LM2eDmXlFXamF/7O3iz83T1uV4/OtmWl1tbHjo5uzV1zQoOy8x\nSD0+R7e9uq+3v7q0zO1tSz5ZXklP8+7Uv8nd39peXF1GP0xYV/Df6djHy9HT4W5w7V1daG5+\n3dXn3tXd4OBzZXv3feLqOyYvOi5MSENMvLG7r7bFxbnLWVRHPU7oWlnh1M+9v9p4fllPVkU9\nQlhg5dTe3srG0Nb4XFh+alxpavvay9DY2N7p3u1kXVpfbOrl3N5FKy46MEFNQkvKtbqys8HG\nvcdvWEs+R25oZOLW1cG9yd5tVEpNSj4+SFb30c/XzsvN1OReUFheYW99fuPQzc/Q2Ozp7Wpa\nXVtZdO33997c0s9cMSsxMjZQSUrjurOxrrnIyMfuVko8Okpu8tbMzce8vsneW0M+Qj48P0hV\n28fHyMrN19r3V01QVmLn3+DZz8/Oz9z+bGBZV1hVWHzr4N3a1t/W1eFJMigtMzNcUmrXubGv\nrbbJ3OJaT0dAO0dv0sXAw8nDxMvmV0E8PT4+QklR8c7DxcfP3vB0YlBPT1zy1c7Ozs/R1Nry\nZVlXVllgZ2nz4OPc2+T24+zm3040KS0zNWfv7de9tbOus8jyZU5LTkw/RVzcyb2+x83P2PVm\nTD48Pj9FU15s58/JysvXfF1fXFxjanrn0s3MzdXk+HluYl9bV1tofPHo7Ojw7vD8/fXq41s8\nLS0zM1Hk19LFu7ixsbzYYkpGSlZQTlZ+18S8vsbW9VtVUUpDPz5BSmHm29TT09XT3P1eVVNZ\nbeHZ1NHS0tTY5XNfWlpfaW1tbXF669/g7fpsan3y3NlyPy0tLy9N5c7Lwr+8tLK5xO5FPkFK\nU29vberOx769xd1eS0VHSklGRUVKYd3Oys3Z6u5+fndoWlpo7NXMy9Db6ntze3BoYF9eZXv3\n7O3z+/j98uzy8ufnbEcxLS8sP2jPv7q9v7q4vb3JVUI9PEFk4tbNytPMxMfL0WZHQD4+RU9T\nVV9nfNTMzM/ZallYWmT25ebf2tjRztLd9mJWWV5pevR2bG5t9+fi5On+b3bu6nRKMS8tKz5W\nzbq1u728wMS9yO9XQzk8SlvWwcLJydHf1NPwZ1BAPD4/SFz96trX29XR2N7pX1VUWGXh1M/O\n0Nvi6vp6c2JcW1lcbPrs39/o7vhzb/zv7P1bPzAyLC5DUMy5trq4vMjFw9fbckg+QUBM5s3H\nv8PQ2ONlbWpUTEg+PUFHVOTPzMfL1t3ubGZlWltkaO/a0c7N0+HzaV1iZGRra2RocHf56uzv\n7O736v5dQjU0LC47Q9i8t7W0u8PDy9vW8VNMRT5FU2/QwsLDxtb3bVhQT0pDQT9AS13ly8XF\nx8/ndmJaW2Fha/zu3tTQz9DZ63NgW1lbXV9hY2dtfO3l493f6HVSOzcyLDY6S8+9ubO1u7/B\n0tPbaVdPQ0FHS1vZzcXAxM7U91tTS0NCQD9FTVvfzMjExc7Y6mZeXltdaGr8493W0NPW2+5t\nY1pYWVpaXWNmdvPq3djfa0Y8NS4zNT91yr62trm7vsjIzt72XkpGQ0FJWnfSyMbHydXra1FK\nR0FBREdOaeXSyMfJy9Tj82xfX11cY2x849vX0tTa3/VqX1pUVVhYXGZs9uLd4G1JQDYxNjZA\nX9jEurq7ur7DwsnP135UTEVARktX69bOycrQ1u5fVUxGRUZGTltv3c/NysrP09vs/W1hX19d\nYnP549rZ19jf7fxlXltXWFtbX2349HdPRj41OTg9UPjQv729vL3DwMXKzNZ2Xk5FRkdKWXLp\n1tDV1t54Z1lPTk5MUVlee+Xc1M/R0dPd3+h/eG9mZ29tfe3u4+Dm6O16bWdeXVxdZmdWSEM5\nNDk2P1Jvzr+/vbu+vr3Cw8XR5W9OR0ZCRk9XbODf3Nfg7e5oX15WU1hVWmhv897c2NLU1tPa\n3uH4cG9lY21tdPL49O/6ffxva3NpbVdEQTgxNzQ7TFvcxsLAu728ubu9vcfW5lZKSkRFTE1S\nZGhw5+jp3+j+9W1fZ15daGhp+fHu3Nva0tTX1dvm5/dvcGliZWNfZWRfaWloeWdORkE2ODk4\nSE762MfGwby+ubq7vMDL3PdTT0xIS0xMT1dZZPx87OPz7+x5e/hvcX5vdPP27N7h3tre3tzh\n5eX3eXVnZWdiX2NfWmVfXVRFRT07RD5KZVji29nLxsC+u73AwMvR0+x5b1ZPT0tLUFFUXl1b\nbm1t5ert4Oz56+346un76uj55N/r4d/9+PFkbm5cX1pYXFpeYmVxZlxWTE1JS1hPYnhf6tvd\nzMfKxsXMy8zT1Nnre2hbWFlYWFdWV1lcX2Zsb3T78e/n4ern5u/q6/bu+3n7/n5ueHlzeH9u\navpnbXRraGl3am9/c2xlYV9eYGhmaG5ucfLn5d7b3dza29vc4Obp8vh6bW5pZmZoaWxubG9w\nc3d7/vrz+PP1/PP6+vz+93t9/HdtfXtvfHd8/nV8/HN3/nV5+//+fPz+cW9vbWxtbG5zbXT9\n/frw7fTq6e/p5/P57fh49Pj7cnnydHT67nBr7npiWnr2XNvZ7dbc5uR76v5d8WtXb/lpYvDt\nXHvlaF/862Je329W//tdXf53W2rxc2/z6+z+6try79vo6eni4vPl9uTvXNd4Wd1pe13s5ljm\nefxvb+pfc15571Xw8mJt+O9pbeR0bnntd2bz6m1s5mJy52Luc/rhY911auNw6PR55G5q399m\n6utf5fxu7HF59Hz/a3ToZOjuXt1nbN9p7n93dWbuaWx6+Xz9aehuYdpp/Hr9fXhrc+Vi7/Fw\nenHxc+tz7d5k7O929nV5/+9z/fVj93P0923+fnd7dW9r+fN163vrc/3oann49Ph26W397Wfy\n6316b+tpfXlpd3L+euRh7eFo7G/sbWbdY+zxZeVcfOpd6Ots6Wl7+Gbqbmnpd3Xs+O11duH9\n+G9+325q8nR8bnbjbGzl9nh5+/F59vV57HR46/R/aHnyb2nw+HF79vBxdu30cfD87vn+62bo\nfl/ha3L2au/5dH576HN+5HXuZffeY3j6bu/1aOzscPHy7Xl6ber1ZOrtd/j3+2t6+/r2d/R4\nduT3ZPBvc3dv7Xl0fGry+Pzvd+lueulv+vP86/Nr/PR47W3x3nDz/P35Z/bxe31s8n5qb/78\naG3uc/z2bH7q8Xl+8Hxv9P94a3Ls9v569XRz/nLw7nt46vT9eHn+fnt9ePJ3avZ0eO1v9/b2\n73l8b2jtefzqZu70/W5z+3nv9mXw7WTu/n98be5y8Xhu/25vfn708/729ft/+Xv98nt+/PV4\ncnjp43Hz/HF6ZvF+bPhnfHxy8fx49W5/939/e+Zk7u5t9/j5bWx2/Hdp+vT46/Xqd21t9vhz\n63b+d370anV5fHv+83D0b3v4a/Vucfj38Ht67vv58n37fH54+/x4eP9/bPNt9e9p3/Lu5l5n\n4Pxr7XzydXt7du9nfex3/mZv/mv/a27sZf3tb+p5fuzveXnmcm52bf3+6n1u+elz/vBxcXXo\nceR/f+to6Xl553Dv9u/t/ehfX3xu8Wv8fHrx/+b8fv117Wtv8272dPjr6e729fv8eO9ofnlu\n9f3ze3187P/9fX9vdW1/d2nsbnvt/fl/+fL37vn57/3+em//dPH2YWnqfGTw62jq9XXo/331\n+nTzbvL19/V27/bxefXub23w7/l8fvVu83X+6nlnd/BxcnN07mP472Jy9Hp5cfV68ud5e3zu\n/2z6blZb0n5x63Haa+n5a3lj9d/4fXZr8HDr7vb27/Zt73F4fG9p+e9r8Gpq+mPr7HH9aOp9\n+Pdv/Gv9e+Hqc+py+XRj7n5vdnHkZnXqeel2+fR3/Xb/b3hrf+/+9vR/c/PvcXh+bHP2+fF4\ne/Zv+uxocH7+8Pjs/nT9cuh+fOdlbmh4dH/0en51929x+nR3dPTz8O/teGlwfPL2bPVx/ed2\n/nJncPHveuzs7n317m19ffv4/vD783T8/25wbX518Hp5cnV+fOxufHlz/PX1/+7r6frzb2J4\nbnPpdvt7a/d0bu9ua95odOBs6+T93O1i6d5xdWpzbXPudH56/uzk9P58cmlrdHPi8Xn3/eH/\nYvpuZ25u9vn/8vn06e/3+uxvYu5veHpv63v48/zp7Xbz937273t9c2x6bnRpZ/t1/+b9ffF4\n+f3++G958ezu7Ot/7/74+XJ7bm9uc/fu8u71/+vt831wb293/vz0/Hj4+vPwcnN3/W/+9W90\nevL+eW91+H/19/Xu8vf8fvv+ev3u+Pru7fh8/377dXBtaGpsdHV0c25teHt4+fry9f/0+/z9\ndf708ert6+bn5ejr6/Pw7evm7uvv/3d98vz+Z15jY2ZobW9hTkM9Oz9JV+nbzsrJwsC/wMvY\n9V9eXWJkV1dcbOfd1NXf6nRweGdjXl5u++HW1tbc4OHp6fJ9em91+/Ln6PT1/WE9Li4yOE1m\nxb7Lw8a+vMrN+k9MR2Pa2s/X1tDbzc7feUxLTExfa/7tbO/g4trsfWtaaHTt4O7o6efb2tjc\n7Pxud+ro4/BrZ2RfPzAxMzpMeMK/yMPLxcbU1GdQTkt229DK0c7X6dzn8mROUE9WcfPd5P7v\ne/nxffhpZm974+He3OTi5eTf6/9zcvnr6OjzfG9dPzAwMjhN88K+xsLMyMnZ211PTk36183I\nz87X4tvq9FtMTUxWbevb6e74dH91eXBfZGl+5OHd4ufm6eDh5Oh//nz+7e3u+nJvb25UOS8x\nMj1kzru+wsfZzdjh6lVWTVjb0cbIzdL27/1tbFFQTk9p+dra6fFjZGhp/Wtqa2ru6eDg7+5/\n8+jo4Orq7n3r7efof3ZhYGdsaEIzMjI5UNy/vcLH3dTX4ttrX1RX5tbIyM7U+Hhvcn1cV1JQ\nX3Lf3OfyYV5fZ/x7/HFt+vLj4+rvc3v669/h4en4+Pft6unvbmVdXmxlSjgzMzVH9ci8wcbX\n3tvs2+xsYlr63c3JztDlenJve2JbVk9YZfji5+9oXl5fdH3/d2x1eezl5un6e3vy5uLf5e/+\nfvrz7+79b2piZm92XkA1MjE6T+G/vcDI2dfp4N94fl5m79rMzs3V6/dud2lfWlJVWWj25+x9\na15gZ3H7/n1yd/nv5ujs+3h7++nk4ePu/nd6fvT3f29mamz56XxJNzMvNkZqwry+w9XY7ubf\n9OxhZG7o0tLL0Nrne/xqaVpVVVJfaPHu+f5hZmFrfnz1cXt9++nt6PT9fXrs6d/f5uz59v71\n9n1yZWVjavl/Ujw2MDM/Tsy9vb7N1fHy5O/e/nBt+93Zzc7R2u/6aWVbV1VQWFtqffr0c25l\nZm1v/n39fX319uzt8fL79O/q4+Xn7/X9fXp9eW5rZm55+/VNPDUvMz1Oy768vsvU+PP27976\neWt07d3Pzs3V4fVpYFhXVVJXWWJvfu/2e21paGp1dvv7//v98vXu7fDs7ujn6Onw8nx4eXJ3\ndW1pbXT4Wz86MjI7QOLEvrvFzOb+d2/e7uv7c/ru29LMz9bfdmVZVVVUVldbYGt+7+/xfW9o\naGpv//31+/n08+ns5ujq6O3r7/P6dm9sb291c3V9emxKPDcyOD1OzsW8vsfN4+pw5ujv62py\nb/7f087Q0+H5Z1lXVFRUVlhdaXnu7Oz3dWtnZ213/vf68/Xv6ujj5ufq7vD3+f17b21qaWts\ndX59WEM7Njc7Qv/PxL7FyNPd7Ong6+ZvamdhfuPV0c/U3exoX1hVU1JTVFxgd/bs6u/4dW9u\ncnN1ff769ezr5ePl5Onq7vP7dnFramZpampwd3FRQzw4Oj1Je9fHxsnK0Nbb2drd6XRrXl5p\n8t/a1dfa5vlsXlpWVFFVV1tqcvXu7Ozz9379eXFzb3F5fO/s6OPl5Ont8/x4cGtlZ2RmbGt7\nblRGPz0+QEpl7NPQz83Q0NHP0Nbd8n5kX2ht++3m4uLl6/JwaV9cWFhYWl1eaG95+/Pr6+jr\n8fV5eHJxeXb8+fbz8PP18v57d2tpZ2doaWxuYU9HRUVITVxu8OPl2tjV09LQ1Nnf5u99+nl9\nc250c3p7fXZ3dGprZ2doZWhlZmRmam13/vr6/Pv18/Lu7uzu8fT2+vf2+vt6cnVvb3RzdHZw\nXVBPT05RVFhZW1xl/+ve2dXU19bX1tfa3OPxd21qa2lnamhmZGRsa3Z1c3dra2xsb3J0eHhx\nd3789+7n6ebo7ejv7e348XhzcGttb3RxdmtXT09QUFZYW1tbX3Lt49vZ1tbZ2NbV2dre6fd3\nb3J0bm9tZmVjaGxvfHNybGlqa3J2/Xh1dm59+fHr6ujq6ejp6Ojq7/V6cm9scXJ1b3RwZVVP\nVFFSVldaWl1i/evf2dnV19fV09TY2+Lsf3R+d3puamljZmZvb3Rzbm5oa2x0f3j/dnh4f/Pv\n6+zp6Onm6ebn6+z1/Xh3bW9ybnBrcHFnVlNWU1RXWFpdX2fw6d/b2tXW1tTS1trc5ez4//3+\neG1raWZobHJycG5sampub3Z4dHZzdnv58u7t7eno5+bk4+jp7O/0+nt6eXBvbW1vcnRkVVNV\nU1RYWVleX2zu597a19XT1NLR1trc5Ozz+Pn8c2lraGdrbnJvbmtubG11cnR2b3J5ev307+3s\n6ufj5OPi5+jr7vT7fHZzb25ubm1weXdfVFRWVFRaWVpfYXbp6N3Z19TS09DS2Nrd5O3v9fp7\nbGxrampucGtrbGpubG9zcXRve3r9+Pju7+zq5uXh4uTi6Ors8/r/f3Zybm5ubnB0+n1fVFZX\nU1ZaWVpeYXjr593Y1tTR0dHQ2Nvb4+vv83x2bGdsaWxtcGxscm55dnJ4cnFzfnh/+nzx7+zp\n5uTj4uTj5+vr7/X7/np1dG5zcHB0/3RcUlZVUlVZWFlfZP/p5N3X1NPP0NDS2Nnc4+vv93tv\namlra2lsb2hscW93cnR0dHV3///8+vfv6+jm4uTj4eXk5uzu8f56fnNubG5vcHZ7/X5fVFdX\nU1VaWllfZnvr5N7Y1NTPz9DS2Nrb3ujr8Xt0bWlramppa2drc3R2dnVweHp8+Pz79/fv6ujm\n4+Tk4uTn6Onr8PX8fHVwb29xcnp5fn5nVlZaU1RZWlhfam/s5d/Z1NLQz9HS1drb3uTv8X1s\nbGhpbGpobWxreHt7d3p3ev58/ft8/vry7+vq6ebm4+Pk5+jq8PP1fnZ0cHF2cXN2fntmWFZY\nVFJZWlldanTv49/Z1NLQz8/T1dnb3ubu+X1taWtraGdoaWptdHp5d3t8fvz8+vj8+/Tv7uzr\n6uno5+bn6eno7vPy+Hhyc3RzcG95f39rWFZZVFJYW1hdaXH159/a1NHQzs/T1tjb3+Pu+Hxu\nZ2ptaGlqbGpyfH39eXp8fnx++/7///v18+/t6enl4uXj5+nn7fP3/Hpyb29tbnJvdn5uXVdZ\nWFNWXFtbaHD76uHc19HR0M/S1tfZ3eDo8v51aWhtaWdoamZqdnh5e3t6f/z89/j7+/X08e7u\n7uzn5ubm6Orp7fDx9ntycXBvbnBycXh3ZlhXWlVUWFlWWWZ459vV0s7MzMzO1N3xfndpaGFc\nXGf95+Pm4ebm6u1zX19dYmlwdfvr5Nva29/g4ufn8npvb3v4+fv7+u3t7vV1aWhqfmhJPjw/\nRlNcceTXycLByMzU3Nvg82lmY/ze2trc29/j7HVfWlVaX19hZ3zz4+Lo7e/u7Or5fn767Ofk\n5uXk6Oj3/f57/nr8cGpqZW1scHf75+5TPj0+QVRTZevXyMO/y87V3Nzf92Z0burc2uDf3unu\ndWRZXltja2ZobvL76/N/fvXv7Ov79u3o5uTs7uvl5e/7dPzv+3huamhka25tbXR75dtePzo7\nPk5XV/TXyL++ydPW4d7f/2Vw7uHU1t7f3t7ubFtTWFxfbGNkdu3n6vpzdfru8/V/9Oji5Ofv\n8efl5/N7eff//HpvbmhobnVoamly5d5OOTs8QWJVYt/Oxb/B1tfc6N7gbGno4tfQ2ube3eTs\nXE9VV19mY15q7unmfmhr//33f3H56d/h4ens5eTm6fV9/vT4/P1rbHJrZGZhaXF87eHeTDk7\nOz9YUF3dzMS/wdbY3Ovn62Ns5d7V0dvj3N7k9V5NVFhZaF9fbOru6flnbHh6fv109ubf4uPs\n7ubm5+nufP37+3t2amp1bmtoampsdXXl3E42PDw/eE5l3crFv8Li2d7x6eVebt7b1M/d6dzh\n7PZgTVNcWWplW2/q6+/1ZWr7eH79eP7j4Onl7Ozm6O3u7fTv7n5uanNvd3dkbGdpam/+9OdS\nODo/PWdXW9vNxMPB3t7e9O/nZm3d2tbR2+ve5e78aFVTWFpcY1xh/fDxf3Roef99eHl+7N7k\n5OXo5urv8fTv8/fz/31za29samNlaGlsbfzl+EM4Pz1KZ07v28jGv8zg2enp5/pg7d7a09bn\n4+Dp8nVcV1ZXXVxdXGt97PJ7dG5++vxye/zo4eTp7uvs6u749vLv7vd8dnN9eGxnYmNwb2tq\neOh6STk9PkZlUf3dysXByt7c5+vs+GT44NrV1eLk4ejxdV5ZWVRcW1pcZHXz8nt9e/x/+2x3\n+u7n6ezt5erq7/v67Ozv9f9xcHBubmhjZmhja2Zu+PxXPz1DQ1lbW+HWyMfH2d3h6ezwa2/n\n39rZ3ubf5+z8Z1tYVVhbW11jcvHv+Xt1fH3/dnP68erp6+zr6Ozu8fbv8vP5e3hzbWtraGRn\nY2RpZW/67GVEPUVCVlxW7trLyMbX3Nzj6etra/Ln39vi6eDl5vNvX1xWWFtXXF5t+e34+ft9\n/nxzbXz77Ofr6+ro6Ofr7u/x/n94am5sbnNsaWlkaWtsbnNxWkU+RkRTW1rp2czKydfa3OPn\n6m5y8+ji3uTm4OXp83RlXllZWllaXWh49Pn4/fn9/nZueH/x7u/v6+Xk5urr7u3vfXhtbG5s\nb2tpaGhpaGpmb29hTUFGR0xcVXbk0c3K0djY3N/k+XP27eji4+jg4+Pr/WthWllZWFlaYm79\n+fP19PL7e3R4/fbv8O/r5uTm6e7v8P16cW9za2traGpqZ2tqbnh5elFDRkZJWU9e8dnPys/Y\n09jb3fVtfv/47vD05ePg4e15amBeXVlYWF1ndHf/+vPs7vR9e3/5933/+u7p5+nq6ert9nht\nbGtsbWhoZ2ZoaGhvbXN0XUtKS0lVUlZv5trPz9bQ0dfW3vHy+Hl//2/37ezo7Xdvb2poY1td\nYWRsc2597u3p7fb17vf8/Xl+8PDy7vDv6vH2/3Zyb25mamJhZ2RnaWltfXdbUFNOVFZSWmv5\n4tjc2NPT09Pa3+Dp9Ptuam5yc3lwbHd2dXZtbG9ybW9sbXf//fn29e/u8vf8/n7+end8eHl9\ndnR1cW5xb29ubGxvcW9xdnn+/X9sZmZgYl9fZWx1+/Pz6+Xj3tzd3d3f5eju9v17dXFubG5t\nbXFzdXp8e3x7fP1/fv//fv9+en19fn/6+Pn19vX4/P1+e3l6dXN0cHBvc3BwcnN2eH1+//55\neXd3d3JzdXd5fn3/+Pbv7uzq6Obo6Ozu7vH0+f57eXd1dnd8enx8f/57/v//fn59eXp5enx8\nfH/9/v7+/n18fXx/fH7+f/z//v39/P75+/v8+vr8+vn4+Pfz+vn7/355fHh4dXd5fH58/fz3\n9PTv8fHx8/T2+P36/P78f////f5+fnp5d3l4eHd2fXt+fn9+e/39+/38+/z6+/n5+/39+33/\nfn19ff///359fXx+e3l4eHh5e3l9e338/Pj9+vj29fT19vn8+vz//n/+/vz7/v3//319fHh6\nd3p5eHl4eXl8e3t+fP79/Pr7+Pn4+PX4+fj7/f7+fXx8fH58e3x+/v77/f//fX1+f/79/fv6\n/vr5/P79/v39fH19ff9+/Pz7+vv9/fx/f355e3p7eHh6fH5+fXx6eHh6eHt7fH59/X39/n77\n/Pj5+fv5+vv7/X9//f5+/nx9fX17fH58e319fHt9fXl9/3x7e316ev7+/Pz7+/z3+/z6+fb4\n9vn7/P38/P3/fv99/n/+/nv9/37/fnv+fnv/eXp9ffv9f/78/P3+fvr+/ff3+vn4//v/fvp9\nfX96fnt7e3l6eXd6fnb+/n//f33+/Xr+fvv8fPt+evp+dPV7+vd383/+9374fXp9fF9c73Bu\n3/7m6W346Pxl/vdrenFr9/xnW3rnYOre69rs+9vfdG3ne2hva257amJ98GZu73t3+nN97m9s\n7vdt//R4/3569fV/efj0cvXxefn1/vv0f3X2/W348nL77nf17nr97H5673ty+/t4/Pl+//7+\n+vp/+vh9e/p8dP98evx8dXx8dnh7cXl7cHR8fXl++Pz++fn6+/r59f5/+Ph7f/x8fn//+vb9\n//f8f/b3+Pf2+Pj49vLw9fby9/r7+/93eHd6e2/8+XB68HtfYPReTm5fT1xdXWNhdPHu9NzV\n3tfQ1dfZ2d/m7ff4bWhzZWBoa2lpdn989O3p7ezl6+3t7/J/fP9ybnVub3t+8mpR9eg/YehC\nUWJRVlZva3v46M7f2sjP1M3L0drR2ePpfn1qWVtbVE9WWFFVX2Fiburs7dzZ29vX1t3d3eTt\n+PV3aW1qaWZnbGxud/v3ZVntdEZp/kdUY1RTWW5ka/no1+XZy9PUzMzU2M/a6ejydmNeX1pU\nVlpYVl9oZW7y6Ovk2tve3Nnd5eHl8n7/emtqa2tqa3Z89/lbWdpSQ99WQVtbTk5ebF56/drU\n5c3I0c/IydXQzt7p6v5rWlhZU05SWFFTX2ZldeXf49vS1dnW1Nzl4ed8cnFtZGJnaGdlevZ6\n7fVUX+BFR+xHRFxVTlVtbP7h5MzN1cbEzczIzt3Z33VpXVZTTk5RUlJcam365N3c2tbW2tzd\n5vL+eXJqanV+cP3n9/jm6fL06Pl+6WhIVe45PnE9PlNPWF3r287M0b6/y8HAytHT2nprXFlZ\nSk5XTVBbY2d459/g3dzc5OXg7u31fHx4d3b09PLn4unn3+j39v15ZGJoXmVkUkRuVDhOW0RK\nXHV4fdfWyszNw8TJy8zN3enucm9dWFhbWU9adGdm8ODfZevMU+bXV9/tXn7uamrw9X7y8e7u\n+vX3fH52bHNxZ2hta2t1a1leZ1RNXGVWYXpreunv9trY3tXQ19fU2d3Z4Orn73BtbWJlZ2Bm\nZ2VpaG91fPn48u7u8vLz+Pv6+/9+/359/Pr6/P5/fHp1eHdzcXR4cmxkX11WV1tbW19kZG54\n/urf3NnU1NTT1dfX2uDm7H5yb2lkaGZjZ2lpbXl4/u/z8u7u9fby/nx9enN4fnd9/n38+/v/\n+vn/+////fx7bmdjYFdVXVxZX2Jfb/xz8t3c3NXU1tLT29nX4+3rdGhza1xnd2RmfHNw8fh6\n6eb47ux7+v5ucXp4bXf/b3fzdXXs+XDv63T67vr06vdeWG5oSUxnU05nXVje3GrcytHQys/P\nzNbp4+hpXl9WVl5cWWn0/fHm5OTk5Ovp4vP+enn3ZXX9fX7/+/pdYNBjWslt89Nc1+Bf2e9g\nTD9tTTVITUVfWF3XzMfMzr29ysjL0tPuXldXX0xIWllbbHDm2dbY39nU5/nwfXxtamdq8vd3\n697e3d3e3t7oe3N+eWthbP3z9Vs8QOU+OEVBYU9b5WXBv9LGxby/0src59pcUExZb0pNXmHz\nde/n4M7Z7+rk3vppb3jo5u/05dbZ4uPi3N/vbWdsYF1VVF5fYGhs9/dIPFlOP0I/WU5412vM\nxb3Ay73DwsfR22bmdFJOT1lMVl1XZf3c7+vY29vo5PR56/P4dObf7Obv5uvw7X5zc35lXmhf\nX19fZmBudXl1S0NUUktISVZV7d7k2s3AxcXGx8jMytz7ef1sWFxWVlFbYFViavH97uDt5uXc\n6uzm6+z36Hx+/vLxa3/1b3D5a2Rrb2JjaGloZHN5dO/l62NRXGZaWlRYV2nr7+7k0s/Ozs7R\n0s7U3e7v+W1vYllWXl9cXWFoa/Xs7vTq5efn6+jv8Ozxe3Xzfnrz/Xp5/HtyZXFuaHJrb213\n+v7v5PFeUFtfWFhUV1Vs7fHw5dPTzs7P1NTP1t/s7HducmhcV2JgXl5kZWf89/x87OTp6Obp\n7uPi7fju9Xn093pz/3pvb3NubG9sbm58dHd98+pzW05WXVhYVFhZdefq593Rz83Nz9XU0djj\n7flvbW5oXFdeYV9hY2Vq9+zz9urm5+bm7fXl5fLw7/L17ux3bHNzcm9sa2dwdml0eHv77ubq\nWUpSVlJPTk9Oa+bm5dnNzMjIy9HPzdbl93liZ2xhWVhcXV5jZWFt+e/19uzn4uHl6ufh3+Tn\n6evx7+98bv9+a3FuZ2xzcWt5fPzt4d9SPUhLQ0RCSERu19vZyr7AvL3CzMjI23VeWE1TWE9N\nWWZgb+74d+Le6/jr+HXv7n585N/i3trh5t7i9H35b3N/dGRp+3V4dvf57+T+QzVCPzw9PUNE\n08zMyLu4ubW7w8/I1WZQS0ZFUE9NU+zi4Nra5OjZ9GFcYFdbbmhs6NPU0c3O1dPU43lzalxi\nZF1hdPl38eHe3t7eYDgzPzc4ODw+UcXKw7yztrSzvcvOzmBNRkI/SVRPWObO0MvP2+TgflFP\nT05OXWJm387Ny8fJzs/R6m9lW1VYXFlu8Org2t3e19bkbT0tOTczNjg/R8XBv7uysbOxvc3b\n1lpIQj8+SV1ZadnJy8jO3vD3ZExLSUtOYWv81srIx8bKztTbbV5ZVlJYYF584tve2Nvd2dv0\nSS8wOjE3Nj1A173Cu7axtbC6zd/cZElHPz9IZV9618vKx8zq+W1cS0tISlFjduzRysbFxc3P\n2edqWldSWltfZe7b29rZ3uLf6XBjPCw4NjQ6PEJPvr+/urS3tbbI3+LuTk5HQUhpcXHa0NDM\nzvL+ZV1NT01NV2f85M/NyMjJz9Lb8mlaWVNZXWVm8t7c6uPn7/PrcmNONTU7Nzs+Q0rVw8W+\nu7q7uMLT2N9jW1VJTWBrauTr5tvV5Xv4Y2BgXFVfbn/l2djSzM/W2d7/d2ZcWl5lY2lvfPjn\n6mdv83x3+25RPj5DPEFBREdY1dDIv7++ur3Hys7d7/hUT11cVltgYPbd6e/d6PDyblxlamt9\n6+re1Nzd2t/y72tgX2FfWFxiYvz4ZP7v7nD+bHvo7W1cT1JVTlJMWVt3cvzy3NjW0djW1NHe\n3/NqbndqX2/+6+Df6OPc3+To7O7o7Pr4+3jxeXB6d29sa2VjYmhiZGxoan/4dPp9cnl7c2p5\n7/Pzd3BhY1tUV1ZXYGJibPHn6t3c3uDc5O/d6+jl4+zf2+Td2tzb2d/h4Ob4fm1jaGlkY2tk\nY2xnXWtgYmZgZmL1Z/5yZe1u+n3593rtfvX/eG7yeWLvYmX9b11o81/m+Wl45upz13zq1e7p\n3OvY+tfkaMdNymTy2FLNSM5WcPtX61LbS9pR+OxM1EvldVPbT9VW3/1e0VnSWMtQzu1dzFHN\nT9FeaNRS2lrSTtJsYdtg6V3RTtJj8vF653TpZdhTzVLs00jIUuN9bv1o41vaUs1O2n5a1E7V\nXfPlV93rT8dI0vBOxEbLaV/QUtd0bt1e3VzaVttle+BX01jcYO3wW9VS2Fvob23aUM5W5vB1\n7XXtbuVh2Vbbb2TbVtZd5n368nTu+n597GnueW75/2rmZu13d+tl3mHmfm7lY+tzc+xl6G7+\n7W/ncfLzc+98fPpx+HH2fH7ydupz7/z8+X36ePRx/X94+v/+9v/yevT9fvl0+XP+eXj+dX96\ne359fv39/H7+enj+eXl8eXr/fP9//v3/+X77/vz6/X59f3t/fHx8fn98/n38/379fP98/357\nf/5+fvx+/f79+/9/f3x8fHp6enp5fHt8fn/9/fv8/Pf5+/v++///f39+ff5+/f3+/vz8/fz6\n/f37/v7+/v/+///9f35+fn19/nl+fX99fH59/v39+/v//P9+//7/fH16eHp7eX1/fP7/f35+\n/X//fn18fH98fn99/37+/v1/ff79/31/fP7+/v39/f77fv57fv18/f/+/n35fPx///x9+Xnz\nf/36efR29X/5/33va+xufnxsblFd20vhzlfDaNvOY9dv2VrmbV3lW35i5lzvdPRv6XH46G3u\nePFr82TvaXNubeJR01PWXurrbeZy5GfdaOZr3W5s4GR/9Pxo4nZ46HT7d+Ng7uxg53ln8nN+\n/W7vZN5d5HDtbOpx/txY2FveWt1h9336/HzkZdlb23N65u9q5mrfXNtsYdda+O5k+mvkWufy\nWthh6nvv7mDcc3Z/629t5WTu7Wtt4Gty6X/4bvrvYe/vavzqYXrfXfbt9GLeeHHn7G3o6fxs\n22d15WX4b+tf7/Fpcepo/Oxo/e1xcOZybOl9cPDpc+zoaPHtavvnZfzyae/vZuntZ+75ZvPv\nZXbmYXvnb27ebHLcbX/deW3bb2jm/F/r9mP57m537XJ56W5t6v5w8nt58mtw9W9u9Hdvf31u\n/nxw9vtx9PN1+e/8/PHv8uzz7+bt8unp9O7p8e/t9vD4evr6dnf9b3h8dXl+6uDvY091fzxM\ncEFFTlpQVvPw0NnTwMXJxb/H0MvU4vxlX1VNSU1MRk1WVVlr7ejc19PP09PS1d7n4fhub29o\nYW9vdfx+3+Pr3NjZcVpiVUk/QkY+PkRLTlB+2tDMxb2+vr6+wMrN1elnV1JNSUdJTExNT1lr\nZW3d2t/b0dTd293f6fj07/lu/ev1/e/j6vDo5env7u7w+vvq+kxBXFwzPlo+PkVmWmzW5b+/\nycC7u8zFwtPfbmZYUklFUU1JTl9sXvPh4dvh7uTcbGH5cF1baWlr/n7j2drc1M7Y29re7Pty\nYmhiV11qZWL67X1sXWFSTU1GS0lJTE9hYvXb08rKxcTExMrLz9jkc2lcVlFPUlJVWF5pYGD5\n+HD28+3s7vb76PV57+vq6+Xi5N7l6eHm8P7ze21xZ2RramJr+vrv9V1ZTk5UP0ZKSU9NYWzg\nz9fIw8HCxcLJy9Lp8mtcUE9PTlFQVV1peH3v6ef3fPJ7bGdnamttanrr6Obe2NfX2Nzc3Ob/\neXNmYGFfXV9hY2lwc3z69PF2YmFZTk1NSktOT1Zl++jXzszIxsfHyMzR1+F+aWBZVlZVVVle\nX2BnZXd9cnn07vXv7/Do5u7r4+Dg3+Lh3+X0/vl3cGZkZWJjYmBma21vb3b+9Xh19/BqYFVX\nWVJPT1laXXH+5tXPz8zJy8vN09vc6HdpX1xbW1VWXF9daGt09ezw7+fo5+nu7urt8fLx8u/u\n8Pvy+3t2c2hpa15hZGBgbl9me259+/379vf97fP47uz18+7v+X9sc25tZ2VpaXRsbm/38fL1\n7url7vf59Pf4e3Pv7+/v6Ojj4ubo5ubu8396eXNsbWppaWhnaGxqamhpaW5saWt6dP9+ef31\n9Xb3+/j9//7vfO90fvx773R7ePR6fvr9/el9+Hj3/nd+bf9w/2p7cf/8fHr96PPu/fLq7fnx\n9e7u9f/w8nHqZ/X9dXZ0d2l4Z21obWH+a3ht6mnlbe1u72Lq7fzt/+J7/PBx73ho+297cv7+\nae/6f3h662/bb/V5+vhzaPNv9f5d7fvyfO5v7/jqcfnqbvz3ZvBh513oavP6dvdp5GLibfH7\n4mriZuNf4mN983V062D0bO9l8W75/Oxm629w/v55ffZ9cv987/r87GrrZNxf5Gzubuhd313i\nauVq83LvcPj/dPJt51zgYep16GzyeP53d/p3aOle42Drb/N+evH9cvr5/P/+72zrafJw9Gzt\neP917m3nbOZ38Hn3entu9XFz8XV4+Hdz927xbXrvX+Bj63J+72vkZeZu83Xvfnrtf/7+fHZ+\n/W/uaN9c2l3tfmjrZOln+/78X9hU2Wf68X906WLcXuryYeBk7Gzw/2ndYu/8enR67GTkYuRi\n7O9a2VnfZehn6GfkZu7vY+d4c+ht8/ht417fbG/sa3XzafBv+n106Grtf3XyfXX3c+1o8/hp\n317lZ+pn9vVr8nt9dP3uZeJw+/zqXtta2VvdaWjYUNRY5Wnsaelj6270b+tk3l3ke2XaVNRe\n7upr8+di3V7kbfNv82HcVNpbf+RY11TZaHjuau5+/m/mbut5e+p29f508Hv1autl9H9q6mbo\nbnb2au1q7Gfz9GnydfnzdOtr6H107W3vfvVr62jobO9w8335dfd99316+P73a+Vf6Wn7Y/hl\nfnZu+m3qaO9s73zy9P/o7fTx7/R68m5z8HRj72lu62Dybu9r//hw8HL5behu6W7pd+5++P3h\naez1/vnze2zlZepr7F/tc2fvc3f7d/pv62R1/f1p63hy6Wt+++twfvd8dPpqf+tt9m5+e2nr\nXeRw/mX26mfn+P705Xty7Pxn63L/9Ptw/fH/aeRr8X3oaO3pXeFp8V3bXnf2a3557mH08HF7\n6Hb56Hh16Hh29/hs8e5wbOxqbf1rbu98Z+t993vvfe/1dXrtdHf5fHj4dmr2b3ly/v18+Xnx\n93fufPR++Xv8+XV5/fZ4d/Z0+vtu/HL+bv1vefn/c3zzc/r/e/b6fPj563fq83jt73P3/vv/\nfXF493Rsef5ufGp2e3hveX3//mt7+Htyen169XJv+Hxtb3x3/H1z+O75+vDr5+jp6d7i5OTl\n4ujv7unv+vv8fXdtZXtoYGtvZW1zaHPp7epmPk/xOz9HR01iT1fIx9TEvb+8wc3Hxu9dYlZN\nTkdKaWpc6NDQzc7Uzczk/+t2YFtVWGpiV3bp79/h7dnT5kgyXE0rPDc7Rk4+Z7vHybe3ta+6\nw7m87XxbSUlEODxNSEdf/NvIz9TDw9XY2OntalNZcGJZae/e29rb0czZ5uPf5Ww+Lk1DKTk0\nOUxPP/W3wsC2t7Ouu8W6v+12UkVKQzg8SUdKX2jZx8/SxcXO0N3n3f1ZXGtlYmZq39rf39TU\n2tvt++j+YkIxREotODg4TFJDXb7Ew7m7t6+5w7u9z9dtTFNNPT1EQUZPTV3Z3d/Ny8zIzdfP\n1vD+c2RnZFhgfHB67+nx3exq4GR4aG9cQEFRRTtGPkdaUE3yztTIxce9usHCv8XJzOZz/1tO\nTElJS0xKUV1n9uHb08/U2Nzk2mp37VHcU3NsWN5V72Z0bXt2afZt/HLy/PR6Xll0Xk1lT1xv\nYmV54O3d297Vz9TW0dfY2Ofu7e9wb2xibGtfYmlkaGplaXhwc/529/T59vXv8u/x9PDz9/r8\n//3/f3p7+33//nh7cWx8aGl2Zm9tb25xenT8/v/18O7u6unq6err7Ovv9PH6+ff/+vz++P7/\n/H3+fH18dnZ3dnF1c3F5eXd4e379+/X89Pb58vr5/316c3pvam5sanFwbXd3cHv+fPnz9PHu\n7uvs7e7t7O7v8e/x8PP6+Pn/enx6eHp5enV6fnd7fXV8/Ht8fX5+fv5++fj7+Pr5+v38+313\neHdvdHRvb3Zvb3t4df39evr4/PL19PH07vH07u/z7/Lz8/b6/P19fXx8e3h8fHh+fHh9fnd7\n/3p9f3p+/H37/nz5/3z7e//9ev7/eX79e319fH17eXd2enx6e3t4ff59+/j99vX49fP08PL0\n8fDz8fH2+Pf8/Pz//H1+/Xp8/H1/+3z+/Xz9/35+fH58en1+eX/8fH/8/vv7//z7/n7+fXt8\ndXR5dXN2dXd8/np3e3V4/X787+/v7/Lv8vjx8PLv7/by8/b0+vr7/vz8fnp5dnZ4/fx+//9/\ndnh+ef98fv90eX15/vr7+Pb3+n57cm5uaGtqaWttcm98/vvt6+nl5ebm6u/s7fLx+P79/3p+\n/n/+/v39+f77+P7///98/3p3fHZ7eXx7eHt6/n5++v39/vz99vv4+HFvY19hW15iXmBlZ2l5\n+/Pl4N/c29zb3N7e5O3v+nRzb2ttbW1ucXZ5+fj38fLw8PT5+f99fHh6eHt9/fn48PLw7vPz\n8fr+9X58+3NnXFhWUVNYVlZdYF9t+vDg2tjU0dLR09XX2d/o8XZvamNjYmNiY2Vnb3V5/vr5\n9Pb48vb59n1+/f5++fn27e/v6u3t7u/w9n//f3lkWVxWS09OUltRV25taezp39PU2c/P09PW\n2tfe9Pv2bGZrX2tvY2V+bmt2bXP4bW71/3b9eH/ydXrw7vTr6u3l7fXl7vjx9P/yc2/1eWdS\nTWJLP1NVUmtb/9j299DT1s/T08/c59rh/ft5a3FgX29tY3N4eX7+f/D6d/n+aFt+aFnfZfHf\nctvc+tre7uHrdeP6avfvaXf6eXru73NSSVlGNk9JPVpPXtv+28DMyb7Ex8jP19h7ZX5ZVGJW\nXGted+xs7ul58/ZrdmpeZmZhbHf+7url3t7g2t3k3+n693JrcGRjfWRl8Gj07nzd5lxQW1A4\nRGA5TGRM7fjlxM/JvsHGxcbU1eB2+FxWZVNVYl5mdnb97H346XNx/WNlZGFqaXb78+vj3t/b\n293c4ejsenN4Y2psYm5jeG1p63Ht4V5YWVY+P/Q6R+RGdenuytjHwcbFx8TY0tZ362RfY1Re\nXlxmb2pzfm/6enh/b25naGhncHb4++zm6N/e3d7e3+bn6/P9fW9taGlyYHp7Y+1+/ulpXldd\nRT7qPkHXRmTmfs7hx8fJxMfE1s3Q+d51a2FcXlpgXWppYnZpbHV1eXR2bG5sa3d4+/fx7Ork\n497f393j4uTr7vv6eWdxeWFp+GVn629ze1xWXkc/5j5F1URt7/zS7cbNy8fKxdvL1PTZfHpk\nZWBbal90aGn2X2x3ZG1tbWRpamVycPr98ubr5N/d3t3b4d7i6Of09Pl6b3Rwa3Jubnl5dWxp\nT1paPHhQPNlOWO910/3Kzc7HzcXYzs7s2vH1aWhsW25jb3hs+Gh0d1xvbFxmaWNgb3Jv/PDo\n7N/c39zb2t/e3ero6vD5f/Z4eH90dXV9cGZtXU1cTkReTEtjVmdu593czs/LzczL1NHX3ubx\n/mltZWZsanh0f/z9fnN7al9kZltea19lcXp+8+Pl4Nvc29zb3d/g5ejs7vT4+vj1f/31//97\nY3NWS2VIQ2RJSmdaYXvd29nMzcvMzcvW19rn9npxZGVkZmpr/vrz7Ovr7e75dWtpX1ZdW1Vb\nYWNi9e7v3dvY2dbV3Nzf5e77/m5uamtub//+8uvr6Ofp6ur1/HtmaVtTWU9OU09VWl9v+OLd\n1dHQzs/R1dnf6PB3bmpnaGduc33z7enn5Oft7/lvbGphYmNhZGlydv3v7Obk4OHl5enu835/\ndW92bXFzdX57+Pn78ff6/vl2cH1ub291dG78en/5/vP4/Pf2ff75e/r3+/Tw7e3p5+jm6enp\n7u/w8/h/fv9+d/9+e/F8/u18/nt6cV9bSHhfNc55N8RoXs3xyN3Lz9jI/N7YcV/+b1Z3YWz9\nc+fs2+rm2frx/m1mX15YXFldYmH/d/Pn597m3+Pr6fj1dm9vam9udnr58fHm7Ovvd/JyZG9k\namhrfnD08ezh59/i5uTu7/x9eG1vbGttcHN5+X798vr6+v79/nVxe29udnd6ef77+f779X/3\n/n38fPx6f/j99vny7/by8/H1/vl/en1zdXx0dXv+ff/x9/nw+Pv4/v/8+vX09PPu7Xt4+GJj\nZllaWltaX2hn/ezv3t7d3N/g7OzycHlvanl3ef/t6/z08ud8auh8cHx5+f16+e/t+fbo9fx+\nf/5vbXR2cGt1fnt8+ezy8e7r6O/w6uxwY3JdVU5GXVBCc2tl3eXTy9LV0c/ceul+ZWddY/lz\ncOXc3+Pc3e50a11cV1FcXl9p9uvh4N3c3OLt6fhxa2lrbG1yfu7s7+jo6+94eXVpZ2lsb3V1\n++nu8+TqfG5zXVhWUVBSVlVmb/Tj2tfT1NbV3OnzfmtkYWRkafv27N/f3tzf5+Tyc3ZsZmpq\nanZ7/fHu9fHx+vl9d3N2bXJ6cnv49fXu+vnr+213dl9mXWJrRjvSWDXOXmzH9uy+xG7Myuvc\n403n3k9Z4O747l3o019a4e9sal1m32VZ7OT07Pzx1O1j7Olyb2dp6O9k997t8Pn+4ulnbP17\nbFxfcHJhYnN+bmr4/Us+3k856k15zGfjwMXZyM3Zyt5S6+pUW15Q+vFP+d3q39/83dhcZPhl\naWpce95tetvk39559N97ZXNra3JcXPh6af5yfed2bPxycnhiXGlbQUhrQ0x0TM7WbcnLy8vK\n2NPK/PjpZnhzXF12a2X+cPnc8/zq/nt7ZWZwaWVtamp8dHL4/v31+fHr7e/p7fHw+vz6e3v/\nd3d0c3R2dnZ9dnd8eHJrXlhbWVZeZl5n/n70393a1dbV1dna29/n7XdtaWJgaGdncnR3+fX1\n7ezv7vR+fnlzdW9rbnFwevv48ezt7ezv7/D1+P56dXRwcHRydHd0ePx5aWRdXFxbXmRkZHR9\n++Xf3tjW2NbY29rc4+fzc25rZGdsaG51dHv49/Ls8PPx+n3/e3V6dm90en348/Ht7ezs7/Du\n7/f7f3Nycm9vb3FxdHf/+HdpYl5eXF1iZ2Vs/n7w4d/c19fX1dnb2t7k6PN2cWpkaGppbG9u\ncXl++PX59vf+f/7+/Pr8fX78+fbw7Ovt7O3w8/P2/Hp0dG9ubm9vb3RzdH76fG5nX1xZWl5o\nZmR6/3vi3+LX19jV19vc3OHi6f98c2ppaWdpc2ppcm99/fz//PR/+PN99/X79/v99e/08uzw\n7u739PL5//19dXdubnRvb3p9/fl8XlhkYFlcWV76ZGZvb+nZ1dvRzNHO1eTj4/tvZltbXl1b\nZnP84ufs4N7o6fFyfX1pa3Jv/PH87ubo5ePu6uj/eW9sbHBqZnt+e3t49u/3/nnt5OR0TEtT\nTEhLSVzj5d/VzsvEytHNztXZ82Bsc2RfZGX98W5z/vzz+WpodXBramdy8u/z7OPe3N/q6Obs\n8v12e/V8b3R0fPZ0bf70emxtYGtta2NsfO/a3VxJXFBKUEVL/ert2dPRxMTOzMvS0dhoX3Zi\nX2VeZO3ub3n6fev2YWt3a2xsZHPo7Ozi5N3Z4Ozo6vTzc2l5/npyeX9/bnZyYn9taW91Z3B1\nYHB4cfLo4t5dUHZLWlRMWP7k9dDa0snL1M7R2tfdbnF3YmpuX2P4cGh+d27m93Xw7nnz9W/v\n5uzi3+Xh3e717v5++HJrem1qaWpiZ2tgaWlje2pq+nn3/vdx/vL67f3r6d7leG7qfHd7a3vq\n6X7v6/Dm5Pjr4+jo7P717fhubm5wfnpye+7v6+3z7+ju8fDu8+rtfPz9fHRwamt6dW14cG98\nbWNpbnx1emx+/vj5d+z+7vr0d+/sd+ly4fXn+vn76PTw5mvgdeVj4GPqdP1t9Hp+9m3vZeRd\n5VzfV9hU21vbYNph12fYbeDu+uVz6W188m36eOlq7e13+Pd3fG/rZu9wcnL2avJt83X/727j\nat9r4f3732rhb/f/dHR/ae53a+dl3m3q6nTdaeNu/H5q5WHoe2bjYOhr+u9j2lfVYfDkWtVX\n1GZ621jSWt14b9te2HR73V7aW91hZ95U2lvlanriVNJX4Xv86GTbXuV8/P1993niduV25nv/\n5mDke3PpY91h6+1Qxz/AQ8xlTr47vkjXcVvKQ8ZS69tSzE7RbWTPTs1V9NxOz1Xu+F/SUMtP\n1OhWyUXDSdrdS8pO3vpVyEvgzUPFVn3US8hM3OtU0mBv3/xs4elteNJOzU3OV1/KRMhK1Vr1\n6lfOS8hN7s9HwkrW2kW9Ps/cRLw9v0voxzy5P8zfR75C2dNJ2tZK5sg7vVtEtTXE2kDBV2bt\n1krN3z+9UU3FWlzh2U/d30rFT1rCSVy7Os/BNLdbQr1SWs5wWNvrT9ziS81sSr5A7r4ytlg+\ntT7uxkDL5knCSuLdTs9Z7mrWV/PQSMlbdttQyUrnyz/K5EPGekbF70LCc0fFbE/S3UrW3U3Y\ndmPeXenlU9FrU8xgUs/nTdPpWd9v7GbwfPrlW9JW889GzfRS2u5ic9lf+vH9+H5j3nxd4HNu\nd+Vrb91c5+VV1XVi42jn+lrW/VnZf29u4upY2Gpt42npbXjhZGrda2337HZh3HVf4vJobd/+\nWd3nWujkZfnsfXD75mtw6Hht6P9r7fFqfuhvdfLyb3Lmdm/y+Hp49fJs//F4e371fXj7/X7x\n/H31/vj89nx98Hd3fv31bnfrbnn9+/5x73t2+/Z5ee56/H156nlx8PN5cOnvaO/ubX709m18\n6HRs8O5seOp1ffl6fPT6cnfnfWno/nj8+/Vzcej8Z+35be93ceVnbt52Zufma3Lt42dn23he\n799fZ9x0X+fpZWHZ7Fno5HRs7+JvX9/1Yehz/n37dO93ZdtZ4eNR0W1c121n7t5Y5O9g5exe\nb9Ffbul06Wlo3eNN1/ll317ZVuXieFTizEbb4WN96Gxey1JXxVZPwUvl2VDPV+dvcWnu3UnJ\nYk7FT+Zu5utZzlHVVd/qT8tFyt09wN5A2cFBX8flQea5O1u5SU3N92RYzmNPwkPpvzfBzjnE\n2T/BVljIRMBKQbw/Zb1I7rxaadrbbVfW+1F3zltOzWzvaunUSszsUttqbO1YbfxY32xc32r+\n7Vfa9F3r4WFy0V584n3aXOHaUNTvWN5j3fZc1m/8e+lvX9pg8u9u7vv1d3D9eGXsfmTqbHbr\nY/fvcXz/+Wls821g/O5ide1levVvdXvu/fvg9O/f6/Lj5ezf5uXm7d/u6u196O/v8nf69XFk\ncXxrbHdpYnVoX3B//PntVDtCWkI/SUxg5szO1727wsPGzNXoeU9JU05MV2jl2M3Jz8zL1+h8\nbmBbXl1h9Ono39rY4OHj83VjZF1VW2JfakEtQmQyRENL3926386wvr3Dysnvy/5FXVtWTVBv\nXN/N4dzPzeJt+ltaZ1xba9jY38/Q1M/Z8nDudlpiamZofG9t6d/gWjAvWjc0PjpjdbzF4rG1\nt73HxnDO+kNLTV5LUXln1MrN2NHK4m1hVFNbYVZr1M/Sz83T09f1YWh9WVVkZ3v79Xf03d76\nOyw9RS87OkvvxLnXubK1uszGdOnlSUZJc1tZ/vfQzsnc5tDma1FSUVh1XG/Zy8zQzNbY2e9e\nWHBmXmFl9OLe5+/u7OjuTS4sRzYzPUB+0rO/yLKzt8nK7lflWUZFbu1r7OvY1MrXaeLrcFZR\nU1X8+nDkzcrP09jk5u9jVV9+b25v8ODe3vf26X90eF03KTlAMT0+Zd26tdC4tLfHz9tP/29Q\nRmHX5tnq59bS2l9heW5dU1NZ7+V/6NPKzdTZ6uTlbVhZ931v8fXo3NjvZvbsZmNzSS0rRzc0\nQUjpzLHBxbW2vdDNW1fxXkpO397Wzt5z1c9nV1tkWWJYT2Pi3PPb087O1eF76PZmXGD56OTv\n5Nzc5Gp0ZmplW2NUNSk8PTZAQOzbtrrHu7e61NNjV2/1XE/dzszO0nlk22pLTFteX31eYN7Q\n6Xrb19va32zz3e1kaufk3eTx8+TgaGBfW2ptemRDLTNJNz0/X+W+uM3CvbvQ33hXeuF/VejN\nzM3P41vo4UxMVGZf/3lb4tHcbujb3t3fdm/c5Gpm9ejg3uv38uF3VmxvXmJy/0gwL0U7O0NM\n38O4yse8vcre/lNz4nJW9s/NzNPzc9nvTk9YX2h5YF7c1et+5N7a2ux269zvZWh86N3reerc\n6HJeYmxeYWtySC4zTDk8QVPowLrWw7q9z9j+WeniW1Pf0tHO0+991HhLV19hY3teZdjcfHvc\n3tvd6/Xf3XNra/zf43v75enrbl5hcmdff1k/LjpJNT5EX9q/wNS8ur/S1vR33m5QXtnc29be\n6djYWVdwYVtdXln25m183dnb197f2tx/bv1vffv/fOfg8np0eHxnWFpvaD8uO002PkFV3MLG\n3Lu5vs3O39/UX05g43bz5O3g0t5jeOdtYmBbX25nXXbl4tzY29XT3/Ht9mtubmp57X1z8vh6\nfWteb3plVjs3VD42Q0Ra59DqzLm/xsPGzMjVYm/nYVhjXV7wf2bz3+Tt4u/063dia3JlcPt6\n7N7q7N7j9+75bHz+ZGt1ZmtpaG5waWz+fntLRGxMP0xGTl9qW/bL0dHKysnDydTOzt/w9WFc\nZVdPW11bZnp/5trj4dvj9O36bX58aGx8cXL/ff3q7v3p7u9+cPRzc2lqbm99bF5LTm5HR1RK\nXmFfYODQ49TOzcrIztDL0uDi7XJuYVdYXVdYYGVy7Ozv4eHx8uz8/vh3cHv+anf3dPb59evo\n7O7n7vT6d3JzbWVpdv1kSUx4SEFQSVZkXGTfzd/UyszIys7Qzc/w7ulmbV5TXmRYWGhwcPP8\n79/oefPqev57dPh9Zvf47ud93vXj6H3yau9aaOlj6fH85+Hs5dtSPVxbNENGQF5SVejBzdG9\nwcDBytHJ2FlhZFRPU05ab1lq6ODk4t3i3fRqeHJoX2r78fTu4Nze5t/d5u7+dnhoXmVqZWhx\nfXR96+rx4/1CPGZDMEdCRmNV+cq7y8S5vr/FzdLQb0xbWExLVGRy73Lr0tt08+hwZFdWYF9X\nXfDh5t3U0NPc397ne2NqdWReY255dG7u5Ox99+pzbW9+6+9VPD78PTBRSl1e787EuNHCur/K\n287o7ltJXWBTTn7b5OTs3tfrV2D/XlFQX2ZpaHPa0t3d0tLe+vX8b2RcaXluafzl7fn58uj+\nYnF+dFxac3B1buTX70g8ZlszREf/cE/Hzry/zMO+wunn3+paTFVcZV5i49Pb/O/d7VxUWWFY\nUFdv6fP23c7T3t3c3HlkZG1qXmb+6e/069/qeWpue1teXGxqYG918frv5t/e4/lqPTzfOztN\nUsxZx8bEuMXLzsLeW2FcYk9VWXbf6OLez95ddmtWVE1YWGRxa97V1t/W0+Hpd3tpZ2dhfu/s\n7ujh6/twbWphXlheY2JuZ+fp4d9o4erwd3Hgc/1ZOT/WPUFU78jzv9fEus/p9M1xXVdcfHru\nX+HQ2u9z52tcVU9UXWBabd/d4d7d3N/n/njydW1sfu3u6+/o6O19cHhnXV9oXmN4dWnw4nL6\n6PFjbvlueezsf+frSDhkYz1YU8/XxsbyvcXVaPPoYHRYXXTY5Xna2djxaWBXW1VOVWZ9f+/e\n3Nre7Pn072lqdfnv+e3q293t7+/vdWZeX2ViYGx+cnh9/vt3dXd8a/p89ebt73TtVTpDfEFS\nW+POyr7vycbS+GD+WvJzY2vY0uPb4d7h7l1OV1lOUVpj+t/g7d7b6nlycm/7/Hfp3d7n5OTt\n6vNzd352bm1sbntua3F2a2xubW91fm76+ez+fXBqXD5DXEpZXejRysHZzszT5HFxYuntf/7f\n2Nza8PLs9WZaWlFYYFhccOnr6Onz6el4anv68u7p597b4ejp6u/4+Xj/8XZrbm5vd3JlZH9u\nYm1uZ3R8cn/6bFxpVURLXE9mfuDUy8naz9Te6PhtbOfu7+be3Nvc8PTueGViXlVXX1xbanf3\n6+v38On6e317+Oro6+He4eTi7PDo83x6fn12c2hkcnRfZ3Rwcm1oaHJrZWZqcX71bW1vWFlh\nXGdz6uHZ1t3b29/l5/Dr5ejs6+fs7e79cGhfYmJiZm7/9/f2/vTx/nd4/Pbz9u/t6ens7e7u\n7/D7/Hp6dmtva29ycv1taHNsamhnamlqemp793bxfvbv8vLv8/74/Pd6/nl5/Xp5dHx6fXp+\n+vj39/b38PLy8vHx8/P19fj4+Pv/f/79/P79/X5+fHt6eXl2d3Btbm5wb251eHN2dHV5c3N0\nfvf6+Pr07/l5d37++ff9+vDyfnl2/ff+/v748/p8en79/nt4//z7enZ8fX14eX/8+3t6fH78\nfHx9/Pj8fv/+/n16fHz8/Xp8fn98eXt8fv39/vz4/P5//fz+/33//f97ffv9/v5+/Pv+/f3+\n/P1//3/7/vz9//9//n3//v7+f/98//59fn99e319fX9+fn59/318fnx8e3p7enz/fX77+vv7\n+fj3+fz6+vv+/f3//nx8e318eXx7fn1+/3/8/Pn5+Pn7+P38/v7+ff59/359fn1+fHz///3+\n/v79+vv8/Pv7+fv8/3//eXx7e3x7/339/X3//vz9/H58fnt6eXt6fH1/+//9//z7fP37fHz4\neXr+e/94fn55/Hz9fn36fH77fn3/+Xx8/f58fft2fXt8ff37d/x9fv3++Hz6//z+//X//Pv9\n+nn5/3j8e/1+fft9fnt+/v1/+/76+vz7ffd9fvh+//v7fHr+/nl5/H18fX/5e330/f33+vx8\n+3/6+Xp+/H19+ft4//t5/f5+/vv+e/v2e35++vt8/nt8enx+eH7/fHp/+/7+fvd9ev56fH17\nenx8/3v8/nr4/v58fv51/Hd4+3379vr6+vr99v53+/54fHz8d3n9dvv5fvr1/fr+9/v893z/\n/Xt6fv16dvp9/ft7+v39+ft5+/p9efr9dvx3e/57f/55evx3/Ph8/n7+fnp+ffh5fn7/9XT6\nfHz//fd2+np+fnn+/v1///7++n11+nb/e3T5cnt/fPz/fHz6/3f8eX/4+vF5/PT6//52evr/\nenR/+n15cXv8e/p4fPlzfX15e376/vv6/vf4+/f29v97/vT8cft8cf58fPz8+P788X56fXr8\nenh6e/L5fv379XF5/X/8dv35/X9++fj7ffr08Pr+fn5+fHV4fPz9c/97fP/7ef34d377/Xz+\neP97en/9dW/2f//8fPl2fPn1e3b6dn50+u927vz8fXXvdnJ89/xydvl6/fZy+Xl9+2zx+XXz\ndfp6/Pd29nN4+v/5cW/+f/R5ffd28nx+d3T4/n548Pt1fHl9fHT/+vh/fvh+/HT68Hz/b37+\nff5t8/5z/Xb3//z5eHj99HH2+Hvzc/x/b/1u+vN89nP59v5weP52fXh6fv3y9Xp++31zdP14\nfvx4/nf8+fvw+vt8/vJ6e3B7/P7+eHV0e/r+bnx6f/38/Pr1/vLveXz9ffdtenZ4/Xf5dPnu\n+3p++3V/93R2enVxffv+7ft3+vn283f89nn7/vB0dfZ9/X1+fHz9/Xl99v//+n3ze23/+v99\n+vR9df35fPH/efT2fX37//rx8X3+dn98cv7ye3v8dn74f37+evry9X35/X56fPJvfHf4827v\neH73bvxw+PHu+n7q/Pj983d7/XP3eHpvdfX/fHr4+Hx09e16fO71fX197nx58nn0fX/3fO9w\ndf1+fnd7cf389fT+9n5x++92a/rvf3py/f79fPrx8+38+/X4fvx++/hyevh0b353/XZufnr9\ne3z2//z9fXd2/X3yfHvre3l2e/h+/HD++W559e79d/d2//13fXb5+XZ9/Pz9//FzdfZ1+XJq\n+P5t9e/7/n7qb2/zevl4fvf99Hh6+n92ePx5fm3++Hv5/u99e/P+eXh/fHp+enD59HX+bvn4\ncfpu+3l6fXjwevF/+Odt9/11/Hxybv3/bv33+Pf/7PN2ev76em7y+HN1eXlz/mx5e3H5e/d9\n/Pj+/Hvvf/r89fdy7fr5dm/p/nP+ffX8dHz08XZ37/x2/n59f3129v76e2347nt67vvzfnl+\nf3py+Pr4fPbx/Pp4/Xnye3L/+u11/3j8/nr4dv19+Xx6+vl6e/v8fvv5fPN6+/X2/nz5+vN3\n+v978XV87v76+XZ7cnp4cnx8/G3//nf9/PL9fnv3d332df3zev798vF2en30bnV9d/Z4eHb1\n/3P3+/t4d/Z4fnBwef/u9Pp78vdwdvPy9G799Wt4enn99Hx76f5td331a2j8/Px7/nzu63b+\n8PBvePL8bXL5f/tx/P/5fGn49354b/b7fHdz7/N5fPv++3N59nT+fv73c/t3+e7+9XH+7m96\n++9vZfbwbW/8fvh6dfZ7cOx7fftv8Xb5fHjxfP58e3z+8/J2+Ox1/vVv9X1w83f7/vl3fvpr\n6HP9/W7rZ3v8dvb69/n0ffvrcfbub/HufnDyeXT6eO//bnv0/m59fm159H13/O3wfvXf823x\n+nJue3n+dXHse3Tz/W706Hj79Pn8cnZ57e9x9/5r8nZ783Pt/Xr593B/+H9+cu/v7HD56+57\neXlu9XBqdHl57Htv7/p1ffz683r9ffX78/d8/Pf4d//ybPTpa/h+/vh9d3nxdPJ5c+77fvTy\nfm/6+Ht7evTvdXf3fn99fXl5fvdufO5t8XD06W3u9Hx48Pd5/PJ3/etqcfb8f3d67vR8dv3+\ndv7u+Wz/72317mz+4XV962r17HJvePz/+/N1dPN3fnh7evn7aurrdPHr9u/x/ffwePZrb/pr\nbWh+/Hdw7/l7/Hx4/Pv/d3z/fO577/d49u7/dfN1ce5uZfr//Wr7/X3ucfl5+fdu9vt69G/+\n7Xx19f979XH7+XBt/Xx573Z49fR8b3rzeHl4+Xb97mv/73h982968mzu6Wtz7/Z5eHj3+Hb5\nf3j8b/1+/Xl+d2zmb3Dxfuz2cffyem56dHnmZW7veX19//T8e+v7dnr2bv7ub/7v9n9vc/37\neGrz/3V9/m1z63F67PZp6/9w8HDz8n109fz1e3H1+PJ3e3b19f5v+e10en3rfnZ3evX8/3d7\n8H55/fj+dvfv+HXyevn/avj7fX3+ee5+ePZ69Hl4cH7ua3Xq/vzvf/z48Hj45m156HRtfHhu\n7nRr6/z473p19e52eH51+vpxbPTq+3b88vZ9+fd57XN38n50f/f072918fhzdX79/Gp8eP3z\nfnn+53J27f709Hb69W558fp/+Pn8/vv++3ly//zzdP7ueXp++X5+73Rw9vlz+3py8n/+e/X6\n/fd98Pd7+/R6eHt4fvlyeH579nV+e/n7cv7/+PV9ePz1/318dfB6dX7++nR2dfJ8fn1y8f5v\nefv1ffr5eO3senD8+Hn9b3l/enZsfHn0+3b89vh5+/l9/Pp1fvRudPP/fPr7e356d/l2dH35\n/Hv5+//0fnn9fvt1ffh5dnj383Z5dv/vc2/98//+dnf09X97+O/7bnx2c3x2/P56fnj++Pn/\n+PP79HZze/Z5cvX28/p8e/v6/Hv4+n19eX17fP/x/fTwfvz+fnt5/n52enl7fXb/fvz8+fJ8\n+vX58vT5+u/0e3h++3p7enj+fXn9///5/Ht8//58//l6+/n6/fv3efv6e31+fX/4/n18f/3+\n//38+PJ9/fX19/v/evv9fHp8f3z8/XZ5+vp6eX399/58/fP0e3759vr+enn+eHR2dXz8/fv3\n8/r7fXl//3t1enr/e3v/e3p7/f76/f36fH9+9/t79vf6/fx8fP58enN3dHV8e318ff/8+/79\n/fz5fnv+fnp6e318fn98//1+/v3+//36fnx7fPz+fX/7+/3/ffz8fn3/+v98d3l9fHx5/v7+\nfXl9f/77fnp+/P/+/Pv++/j89/Z8fvn4//r7fv59enj9/X1//f5+/3t9//5+ff7++fz9+Pv5\n+/z6f/99e3l9/f35+/v8/X18fX38/f3++/j9/v3+/3x7ent+e3p8fH3//31/fv1/ff/8+/r6\n/fx+fX95fX7/f35/enx6en5+/f/+/33/fn5+fn59fn1+fH5/f/7+/f79/f9/fn5+/319ent7\nen96e/99fn/+fv79/Pr6+fj3+vr5/v5+fXx9fXv/fn3+fv1/fv7//f38/Pv9+/j6+v79/35/\nfH19fnz/fnz//f78+vv+/Pz9/v9+fn3+/379/v78/vv+fXx8fH17ent7ent+/n1+/n39/vv/\nf/5+/3/+///9ff1/fn59fHx9fn5+fXz//X5+fXz/fnt9//9/f/79/v39/Pv8/Pz+/fv9/f9/\n/37+/n7+f/5+/v1+//79/v79/P7+/P7//Xx8en19fX5//378//79/////f///nt7fHt9fHt8\nf35+f35+/fv++v3+/P9/fHx+fHp8fXt9fHx9f/3/+vz9/f36/f3+f//+/f3+/f/+/f7+fnt+\nfHz/ff7+/Pr6+vz5+vv8/v59fX9+f35+fX59f/96enh7fH7+fX1+fn5/f33+/vr7/Pt+/35/\n////fH99fn59end9///+/n79+Xz7fHb7d37+eXx9fX58+vz99f37f379fvv9fX17ff359vz9\n/f77/v3//3//fnt+/v19f/9+fnz/ff35+vj3+Pr4+/j5/n14e3t9fXl4eHz/ff58fXt5fH3/\n/v3//fv9+/3+/Pn3+f19eXl6eHl8e/99ent5e37+//7+fH1+//z7/P7+/Pj29vl/fX3+/P36\nfn18/f38/Hz/fv7+//r9/X9/fn7+//78+v99///9+/7+/vz+f316fH3+/v1+eXx6ff//fX59\nfv9//nt+e3p+e/9+/fz+/nh8e339+vv9+35+f379/fn89vj+fXt7eP18dXlzcn7//v38e3l/\n//v5+37++/38/Hp6fX18fXp3e/5+/ft+fHt++vj6+P56fHp8//59ef7+/fz//376+Pb6/3p4\nenz7f357eHt+/X9/f3l8fn58fHt3/fv39PT5/Pj7+Pr5/f78/fj+fXl7/fv4+vp++/r5+f77\n+/f29vv7/n36+vr8f3Z6c29tZ2lobG9vbWpram1ub3Nwdnn79O7t7uvq6Orp6+zq6+rp6+zr\n7e3u8vP18vHw+3dxbnJ6e3Nvb3B4d2tmZWRpbmZXUEtCQFVg6MXWytXa4ezfXuj+59TQ1uvx\nXl56bf3u9vvr5//3bWFpc3Z78XJxfnz68fXz5+Xg3ul1e3j+6+jq+vRqaXNnbF9KQj06Tlrc\nyNLL3tbr6vNbdHLd0MrO23xdX2T9fu/t7eHj5n1sZWV2+vX5f3F4+/jx+/z+8+nm4uz+dX32\n4+Ln7XBta3VtX0c4NTpKbcjKzM7k2eXlX19ifs/Jx83ZcVxdY2X8/vXh4Ob3dF9iaGl6+v/+\n9f/89H9++X759fb37evu6vH27uvm5+f3aGxqd/NiQjU0OUnqys3K19zW3fBbXVnmzMfHzeNe\nZWZleGpx6t7e4fBiY2ZqeX5zbn59+/N/dXZ4ffT8fvv4+fL2+fft5OTl7vlvbGty+GtGNTM4\nRvDMzMzQ3dXa+V1bXOnLx8jN32RhZ19ram7n3Nzk9GVja256dnRz+/d//XBxff35+nx1e37/\n+Pr16+bg4O59b2Z8/vj7eW0/MzQ5SeHNzMjP1tHdZ1paXdnKycjO6mZsY15pZHve2d3jfWNr\na2xta2h09/rzf3Nz/vn59Hl2fv707/j17+3s8vl0am929fr27edsOzA0OlTUzcvLz9PO4VpU\nVWjRx8nL1PdsdWJcY2X12tjj7m5jc3JmYWRjeez0/Xtye/D7enZvdPPt+Pl5+ent8X5veHVt\nfn1xc/nv6Gg7MjQ7V9rO0MrPz8/pWlVccM/Lzc7U6Xd5XVpfaOra2+jufG58bV9fZG727X13\nd3T/+nNudnr28PV+c3n67OXx7e1vfXZteGx19u/o7lU7MzdAW9nU0s3PztXuWlxp5s/Mzc/S\n4f9qWlpib+rf4Orq9nx2ZF5fanL39P/6/v97dW14+/z6fHr9+O7s+fP4++j6enhpcXTv9ezo\n8l49MzY+UN7Y183Mzc/mW1pq79LN0M/P2OR5W1ZfcPvj7fDu8Pp1ZFleZG56/f787ff7fW92\n/Pp/+f599fH0/vx6++n2921ibnN4fHvv3+RYODI5QGfi6dbOy8zOdldfaOLS0tjP0NjbdlpZ\nY3H38XP57Ojtdl5aX2dvdHJ48+zy+XFsd/77/f9+9e3z7vZ69uf39/lofWpkZm179trZdj4z\nNj1Qbn7fzcnGy+NeXGb33Nzb0c3P1eVmXl9qc3Fydevo5vpnXl1kamxsdPfs7fd7dX7693tz\nevbt8/x3e/X18e72e2toam1sd/713n9GNjc9SW9l59LNyMvVZ2pqfN3e3djP0tHY+21jX2xv\nZWlz/e3tbmBfXmVuamt/8+zp83R9/Pr2en327Orq8P9+7+ry8f5tbnFta2pneuTgeT82Oz1P\nW13n3MvKx9Xu7Xbn5uXw49vb0tni9HlvbG9fY2Vr+v90ZGhqbnptaWpudvD5en/+9vbw+/Tz\n+u7w9Pz58fP7bmtqZmRoZmdwcu3keks9P0FLUVRyfdrOysvU1N3Y2OHqfn986uHl7H769O75\neG5oa2poYF9jant7eXZ6+fPx+311dHt++vj3+/X3/f52dXV4c2xsaWtrbW5wev3w/F1MSUxO\nT1FbX2vp3tna19XSz9XY3+nv8vJ/d2tqdf/49/T59u/8eGxpaGhnY2NjZ250eHl5/vz69fT4\n+v38+/r7+Pn6/3RwdG9wdG9wdHF2e2taVFpZVVVaWVtna3H37eXa1dfW19vb3N/m8Xt0dW5s\nbm1tdH95e/16ffx3cW5samxtbGxtcHb+/PXv7+zs7e/v9Pb0/HpycHBubm1wdXZ6bFtXXVpU\nV1xaXWhpcPbq4NrX2djY29rb3+js+Hl4cW1ucXZ5fnd3/vz8/Xpyb29tbW1ra291ef338+/r\n7O3u8O/y9fb+eHZ1bmxvcXF1eXRlWlpcWFdcYF1lbGt87eTe2tja2Nnb3N7k7O38d3l0dnj8\n/X/6//76+/19enNubm1ubmxtcXN3/vTy8e7v7u3v7/P3+v55dXRwcHBwcHRvYlpZWlZXW19g\nZXF3/+rf3NvX19jX2t3f4+ry+3hzdXp5ffz8/Pz6+fr6f3hyb25ucW9vcHZ+/PPv7u7r6+3t\n7u/x9f14cW9vbW9vb3J0bF5ZWFdZW11eYmpufO7l3trY19bY2dre4eft+Xx3c3Z5ev79/fz6\n+Pn3+f56dXRwb25tb3J2fP/59fTw7+7t7e7u9Pv+d3BvbW1vcHFvZl5bWlpbXl5ia21z+u7n\n3tza2NjZ2tzf4uju9v94dXd5ev359vj+/Pz7+397dXFubW5tb3R4/vn49vT09PHw8/P2/H56\nc3JycHFwb3NvZ2FeXV1fYWVrbnF88+zl4N7b2tvc3d7g4+ru+H11dHV1eXr/+vj4+vf6/P17\neHVvbW5ubm5wdXl9/vz6+Pj5+P3/fHh6eHl6eHp3fHx9/n3/d29ua2ptcHF5fPXffF/o5tnY\n6+3s39/sfnjy6vNyb//x9Hp3+vD9cG94fHRtb3p7dHF6enl8fPx/ff7/fnz4+/Xs9PHt7fHw\n7fDv7vn++357fn57e3x5enl4d3d3dHd3dXh2d3x+/vnz8e/u7Ozt7e3t7e3v9PT4+fv8/33+\nf//+/319fXp6eXd2d3l2ent7/Xx/+n/5+Pv2+Pz6+n1jWtDgUslkZc5Q2uda12t04mT59m/6\ndXv+e+32dun9eO53de1jTXfPX+heZs5OzvD8x03N9WTPS9v0XOpY3mHr/FrQX2DRUdTfW9dw\n6Otd42pv8F9w7VzpZmjVUdpmaddN2mL763nf+N1p2vZ24ede11/iaOrsVctN0WHy7Gnsb/7x\nYOVzXdJQ11nbW+J8at5i3lzXXtlf63T4/HDiV81P2Gpy5lfZT9hV4WLg53vVaNpt6nnsb+Bp\nfOBd3G765l7SVebsVNBN3mlk3VLZaWbSV9zvc91t3Wzo9uxk3F3m9mneZtdf2mPfdvvrZtpX\n2Ffje1zjVWheWVZXWVReZl3u7OPa0dPSy9bP09jf3Ov66Wh/+W5x5XN23v5p4/Ve7nlcae5g\na/Jpa+H7c95WP1NTPk1GRFnoY3nKzsW+xMq/xM/O3mt7c1BTWVNbaFxe6+555vL86Otpb/1s\n/flz79/m5Nzf3tzj7Ojt/vV6b374dHB6b3bv7et7P0NUPEpCP0Z3eWLNz8m+vsrDw87P1G1j\ne1pVXFZUc29m9Ofu5t7++Od9b/R2c+fw+uXk6d7h7+vsdXT+bXl8cG5rb19hZmFxfW9uV0pU\nUEtWVFdq5+vl1NXSy8/U0tXc3d/6ffdzbnBqd/nt+u/s8O/z/Hzzf3789u/u7/j17O/49Xd4\nemVpa2lkdGVge3FlcPpg+fFo6/Xt7dntbeJra2pjVl9cXF1idm7l7ejf3+Dp5evt4u/46+/m\n6OLn39/j4ejl7O999236aGbxX/Jk9Vx1aGJke15tZX5p7mr9//r8be5a3Gdv7nzt+ur+5u3o\n5m/qbupu31vob2PrWv9r/Gt97nns7G3id+z97fRu2l3bat1w3+p222Pndudv523rbuxwb/Ny\nZvNd/1/4ZHN7XeNZ7H78dOhj2V3SXOfnXOJycfn3dvxz6F/ZZvfm8vV2313aXthZ5+le3m3n\naNxj+up7dP77Xd5g7H349G7jbXjmcP7zdnJ89WDm+Gjk7mfk9m7u6GN++Wdt/GD0cfNy/ele\n2l/m+/fzattZ1VnnbXrnV85U1V7YYOf/cu9i41ncV+Zm/W/vd3bq+2/la+pz9Pdo4Wjz9m//\n517cYelj7HRu+XJ3bu9e5Pdr53Z78WTeWd9m9nz+f/DucfD2ePv1aO3vX9xb3WHgaup68n1o\n6l3fVuFd/35u8mHdXuF9dexo3V7faupt3mPz5mHaWttd3lzhafb+fmXeWd1e6m9p4FvkYd5c\n313dW9dY1FbYXeZv93Zp3FPWWt1j7e9b0k/QVt59Z9dY2l3STMxP3n1c1EvNUeN3bu9f2E7S\nWfb8cvFu6Wn28G/362zja+npWNBfbtVQ1F729GPnWtRP1lx82krDQcpcYtBLzVPh/mfeZex5\n/vJ1+PZred9Y3/Zc1Vjl71vTWXnVTddrXNFN1mhu9Pps7fhj2FTSXO7pYN1h6f1l32H09GTk\nav//fnf8ePh2+Px0727ze3vta+x1fvR1/nx8enl+eH7+dvZ3fvl5f/x0+Hp5+nL7e3z4e/37\ne/v+e/p++/78/P79fv19fnt6fnt+ev56e316+n37/vv7//z+f3z9eXt8eHp7fHv+fv/+/f7/\n/X78fvt+/X9+/nv9e355fXt7f339fH98/v59//z8//v9/Pr+f/x+/X58//79fn5+///+/P38\n/f38/vz7/f19fn19fn5/ff96/X98f/99fH58fnx9/n3/fX59fH3/f/78fn9+fn58/3//fH18\nff37+/38+/v8+/z+/f58fn57fH1/e31+//39+/z69vn4/P38/f1//Xt7fX3/e399fX19/3z9\nfP3+fv7/fn/+fX58e316e3t6fX5//fv9+/j6+vv6+fr6/fz8/v7/fH9+fHx7fHl8fX5+/f3+\n+/36/f79/vz//f5/fv3+//z+//3/fv5+/v18f3x7e3x8e319fXz9fnz+fv5/fn17fHt8e3/+\n/P3+/X78/v7+e316fnt8f31+fn/9/f78/3/+//7/fX19fHx+/n/9/v77//3+f/5/f/7+ff39\n/f3//n79f//7//7+/f7+f/9/ff5+/f7++fz6+/v7+/t+/v98fn59fH18en18fX99ff7+fv7+\nf/7+fX57f31+fX58fX7//f/8/H5/f/79/vv7/Pn8/vt+/v59/37//35+/n7+/n/9ff7//v38\n+vz6/Pr8+/5+fnt6eHt7eHt4eX1+/vz9+vv9+/78/nt8eXl5dXd5ff16//Lz6H3v62niX+dt\nbfJo5l/XeUfZ1TS4TU25PL9Y4277d/vSW9BWxVdZwkHKUv1tauNR7vFi/XRo52LiUtpoZ+BY\n3WfmZX3tdPZu3FjPVdpk5fZf11PSUudvS+xe71zCWMzZXs1p/HFu91bqaWvu/GPUYtxf1l96\n9l3pVd5J5kXqY1jKWcrt3Nvh3VjRU+df+l3r51nZd+Z352Tkf2R2dnRa6VXxb2l1fX32feRt\n4Hxs2k/OVt1s8v/x+33uZtNNzVLTXeZ28vNv9H3oZu1g4WXnX+bu8vPx7G7XVddc52J6+VTT\nUNlV2lvs6V3UV9BZ5O5e01LXbnPaVtRa4eNV1GH+62TzY95acd5X3V7ZVdNrY9hb2l3XUtVp\natxe7X3uX9lvdd72aePkXdzxXenpYWjiX2ngW2baaWDibmfedGHf6mjt6mnw52Z14HB16etz\n6+9s5vhr/ORre/BxdvB3aOr6bn7l+fbr++zu/nl+/3x0/nL6e23+em9y9m1xdm1fZV1WX1xa\nY2pr/u3n5dfb29bX2dvb397j5+Xl5uji4+Pq8u31cmhjZ2VcXGZfYmpiZvjx6dPdUT9mTThE\nP0hPX07ew8vNv7/Bv8rTytJbV19ST1NPX93v7tHP19vh9e59XF93a2v38+Tb5Orb3ejp+2x+\nZFticnPt10w2X08zQzxFT/NH7r7JzL+/w7vK38vLXVxlVFNgUFbb43vc09zd62Z09FxYbnF5\n7e/h1tnj3N3n7Hpua2xeXmRgaHPh3WY4TGg1QT1GTe5PYsDDycK+w73G3tXOaVdWUldfUVvd\n3N/Z19fX62hx/GBeZmz26fzl2N3j5eby63lecmJaW2NZaOd03sxWOeRKOEtAQ1jeR+3Czc6+\ny8i9zfPR1VtlW09b8FVq1Nbh0trh1+xda3xbX2Vi+eD47dvf9O54Z3hsWFhbW1xmaWrt4fLq\n2NJqSGBUQ0pDSVRjVnPR0MzJzsvFz97i5XhxZF555evt2tjW193q6O9oX2RjY2plbfL0/fh5\nfvJfWmxqXFVia3BuY/Pk735+7efs7ntd/WdPXVRUXGFccuHu49nd4drd79vl5ODk7+bf5t/f\n3d3f6+nqePxvZGxkaV1ybF/vXGtuYmdcd1xoZ2x3bnD++eZq+u5s52ryder86P7m52fjcu/x\nZXH3aWV0ZXP5b2v96/rp5/Ts3/zx433r4XPy42/z6H9q4G5v+XptdOxfcOlhYt9dYN1XX+Rf\nanLlXHHXV/ffX/ffZnjgcGPjc2vh5V3Z7Wrh93v28m93935a3l13+3R0/npu/3B4effs/+jv\neel/+Pzobuj6b+Bg2mLu/nF/b+pm5mD4cWHzcnl3futp73dx8mt+b3xrZd1W2mb17PZ5fOf+\n+vB7b+Vn9e1282zra+t4aux2/vDwZ+n7c/r5727kauD67PHzffVt7lzjX+93e339b3blX+R1\n7nLu+nXrbfJy413eY+17cfZm52d9dmjub2nlafZ/7/p33GLc7vvu6WjfbOpu5/pm3WDwauVf\n7Xtu6WLiW95g+Hxxcu9t8nzvcOxu6WfoaehwefHyeeRq6G/tbutp9flt3l/cXd17buJn7G7+\neXL4aPN4ZNxe3l7XXd53617XW+/vY9xZ3F/q5F3mdvd5ad5b217jXOV5cer4btld4Wv96WDj\nYd94e//7efh6+3Pmdv/+9//z9mvt+m/1a+9o9Xhj4lzdZ+z98etv7vzqZOR2a95e42Xja3zj\nXNtf4WLfY+Vk5GR5207MTthrcNtUz1rla+Fl5nl392vfX/jqXtZZ3/pr32jne3/392fhX+Vt\nb+9q6F7aWNxqe+lj21naZ/nnYeJveedo6f517XH1/n78d/Z2+H17/fJr63xu52bpeH3wbfJ9\ndPV9dvF5//V59P/79H76+X/8/v57+355+318/H34e/z5fvr9fvb9ffl5+/99/n1/fnn4fv/+\nfPZz83z+93/4/P/4/nz1dvx9/f94/Ht9/338/f39+338f/z8//79//38/vt8e317e3p5fXh7\nfHt8e/z9f/v5/P78/v5+fnt8fnt9fHr/fHz7fP98fv97/vx7fn99/f/9/f5+fv19fnt+enr/\n/3x+f//8f/z9/fx//v9+en9+eX17fHl7/318ff7/+/7+9vv99vv6+vv9fn/9ff39/v1+fX5/\nfn7//Xz8fn/5f/v5f/t9+vp9/Hx8fn7/enx/enx///19/v79/f38/37//Xx8fn17fHt7fHt9\nfX59fvx/fv9+fv/9/n/9fPz8fv5//X7+fnx7fnp9f3p//3z+fn3+f//+/H18/35++/59/f57\n/vx///v8+/z8/P38+/z6+n9+/nv//33+fHv///78/v39+/v9+vr9/P99fn16e359fX19/3r9\n/nx+//7+/35/fX//fv39eH3/enr+fHn/fH79fv37fP78/vr+/n7//nh8fHh6ff56fP5/+/z9\n/Pz8+/7+/X5/fHp5c3F0dW9u4eLq3mzSXWzdUe5L3PJ/1enl3+9f2V/1Y3l+XeBQ3W9i62Xg\nXthY3ff361/cYvD7ZONvauhi2Vzu7vNy8W3eWdld32778WzhXtpged5k4WPgcuz1adte427+\n42LfYuN07Xru42/sXFlIY1BMz1rU19/S1Ovc5vd973Zz7vx7duJj6flr32v1en13ZfpoYfpg\naf9sb/h7cvB39nzse3Hpau1r6XJ28Gzea99s4+5++Oj3+vT48/vvaeT/b+1x+X3ycffwbepy\n727ubm3zaP9sbGl6aWT8bm15/W/0fHTwf3h28nJ1+XP98Xj86fj44+jv4eTq3uru4e749vlv\neHNvcm5ybXxrcnl0bfd1bPBu/fHy6NzdYkny8jlNY0FLTVV1f2nRxNPMvsTIxsrN1Pptb1VK\nTlFKTVVcaWr22dzj1NDd39vm7/9uem5icfhueujt7+nu6ex28+xs/+RfPkrfNDfuPUBcWN/Z\n4Mm8y8y6w8/Jz9/zX1xpUk9lX19g+Of96ufd9Gvtflxeb2Vgdu7t6uLc3eLe3eft8fdwbm1r\nc216/vPm/tvbU0R6Wy5JYDRLXF3r387Dws+/vNPMyeByal9YWVFod1v73fTz2ubt7npvaFtb\nZVxedX39697f4d3d4ezo8XZzbXBvbPb7durt9Orq9OLjek5F6T4w7UM4cmlw687Jx8nJvcvX\nydhoZ3NZWF1kcF/94H7w2+b17/loX2BfXV9nc3H+5+vl4OHi6u7tfm5+dGt2dfR8eefue/Xj\ncW7v7PteSVh9MkTWM1DbWm/YyNjKy8bF3crPb3juZVZ4amBxbfL7feLm/fjuaV1uYVtoamhu\n/u3v6N7i6Obk8fX493Br/Gtsdnl7cO76bO7zZe/h/mNPbVc3Vmg3XuJSZdLP6crJzMvQy9z1\n5PJfaPVgYnxwb/jt8u7393pnaGpgX2tmZ3N+9fTl4+rm5er18fZ5dW96d2p89nb6+Pj5d3X0\n/2rj6lZT7Uc67Us753dN+87n48fOz8zN0eDe5Hls+3Bfdm9ke/d98e/7/3ZtbGxlaGtlaHJ5\nfPLr7u3p6+/r7ff3+3l0b3l6cPzycXnxcmfu+WTt7GdTcls8XWE9ZedQX9HhdcrN2c7M1t/X\n5vvy+HBnem1hdn1ufPJ0dPxza3dxY2txZ2n+/Hns6fLt5+vu6e348fx6fXd+dXR8cnF4fHF7\n+W7/6XFgb2FHT3BGUOlZV9/eadTN4NLL19/U3/7k63B3+2lo/29t7/t19vdwdfxsanFpZW1x\nbXn5+/fv7+/s6ers7ff7+n17e3x6e3h5eHl3eP92evp9bGhaTV1aS2Z3WGLf+W3U2OLTz97d\n1efq3el+8Pdocn5udvx2dfx3cf58cHV5bW14dnZ+/f348vDs7Ozt7O72+vr5/f3+fXZ0e3d1\nev96ePj1/mhaV1tWU15lW2D4eXbf297X0trc2N3k3+L08PNvbndzb3t+dXt8d3x9dHV8cG10\nc3F4fH399/Xw7Ozs6+7v8PX3+fv8/ntzdHVzdnd3e/z39W5aWFxXVF1nXV5+/nnj297Z09nc\n2N3m3+P19vltbHVzdX59e/9+fPv/dnl6b21yc3R4eXz8+Pbv7Ozq6u3v8PL2+v3+fXt5e3hz\nff94f/f49fRpV1tdVVdjYVto/Hfz3dzc1Nba19ng4d/t9PR0bHBycHv+fP34//n0/H//em9x\ncXF0d3t8/f307u3q6uzt7/X3+f9/fHp2dXt5fH7//376+fLveV5ZXFdUWl9dXnB2eufe3djV\n2NnY3N/e4+70f21rb250e3x9+/59+f18e3hxb3FucnV4fv358+/t6+rs7u71+/r9e37/eXl9\ne3Z8/n3//v779fB3XVteWldgamBl/f79497e2dfc3Nrh5ePr9Pp0bXJyc/33+/Tu9/bv+3t9\ndW5tbW1wcnN6ffv37+7s6u3w8fj+/n58enh2ent6fH5/fX7//fv6+HhfW1xaWF1lYGN1/vbm\n3d3Z19rb297j4un2/nlub3J0//v9+PT59/T5fnx4b25ubnFydnx9/fXx7+zr7e7v9vv6/X58\nfHRzdHBzeHZzdXd4/vj1+mpeX19cX2hmZG99f+vh4tza3Nzc3uLh6PP6e3BudHn++f338/v4\n9fn7/nlxb29ucnR0en799/Du7u3u8PT3+vr9/354c3N0c3Z2d3d6e3r8+ffzc2NfX11dZGlm\nanh9+ejh3tvc3Nze4OPm7/l8c3BzeHv5+Prz9PTy8vZ/eXJubm5vcXN1e//68e/t6+vu8PT6\n/X17d3Z1cXNxc3h5d3d9/3v99vn+cGRfX19fZGtpbnv87+bf3tvb3d3e4ebq8v55cGxvdnv9\n9vPy8O/v8Pb8fnVycm5vc3V4fvv38e3t7e7w8vj8/nx3dXVycHh4c3z//f74+P73+XtuZl9e\nX19hZmpud/Xt5d/e3dzd3t/j6e72fndyb3J5/vr07+/u7u7y+H98eXNxcG5wc3d8f/f08fDv\n7/b5//98eHh1c3F2eHl/f3p8/31++/n/b2hkX15gZWhsdX747eji3t3d3d7g4+ft9X95c29x\ndXv99vP28/Hv7/L2/H13dXNwc3V5fv779PDv7+/x9Pj7/X17eHNwcHR1d3h5fH79/Pz5+n5v\naWNgYGJnaWx0e/fs5+Df3t7f4OPm7fL6e3hzcnN6/fXv7u3t7e/x8/x+eHNvcXJyeHh8/Pz3\n9fj39/5+e3p8enl1dHZzd31//v77+Pr6+H9xZ2JfX2FlaWxyffbu5+Lf3t7f4OLn6vD6/3Rz\ndHV7/Pb17+7u7u/y9/t+eHRxb3BxdHl7/fby7+7w9fr+f3x6eHdzcXBvcnd4fP79+/n5+Pl8\nbmdkYmFlaGxudXz77uji3t/e3+Lk5uvy9352dXR2ev369/Hw7+/x8/b8fHp3cnFzc3V6ff36\n9/Hx8vH3+vv8fXl5dXRwb3N2eHz9/f77+/t/bmdiX19gZWlrb3j37+rj397e3t/j5unv+H53\ncXF0eH759PLv7/Hy8/j9fXZzb25ub3ByeH758/Dv7e7y9Pb7f35/e3Z0c3R3d3h6eXz//fr5\n/HFnYl9eX2JnbG93+/Dq5N/d3t7f4OTo7vT8eHJvcXZ7/vn18fT08fX6+353cXBvb3Fzdnv+\n+vTw7e3t7/j6/nt5enZzc3Bxdnl7fv78+/n5/HptZV9eXl9iaGxwffft5+Le3d3e3+Pn6vD4\nfHdzcHJ4//r08O/w8PDy9/97dW9ubW9vcXd7/Pjx7u/u7vL1+///fXh3c29xcXZ5fH79/Pz6\n+PxyaGBeXl5gZmpuefvv6OLf3tzd3+Hl6u7z+nhzb3J1ffj08/Hw9fb6/H13c29tbW5zd3z+\n+PTv7e3s7vP3/np1dHh5enp6eXl8fvz/+vf9+n50aGNfWllcYWNqe/Xv6uLd3tzb3N/l6e34\nfvx2cnRxe/718e3s9Pf0fHd5d3JvcnByef/8+PX28/P29Pf/fn13d3r9f/nx+/n6/Xr+/Hv/\n+/t/dWJdXFhUVWFjZv7r5uTf29na29zc5Ozu831weXFreG9+9PPx7ev2fvt9cnZ0dXF4e3r9\n+fX18fX18/f5+f5ydXluamH79m737/r773b663t36PFtYVtaUk9PW2Vld+Xe39vY19nc3+Hn\n+Xz6/HZw/Hx0+nby7/b39f5ubWttbG9x/v5/9e7v8O7u8fTz+Pbz+Pv7fXr8+/949vlzamt1\naWNy+PH58WxQVVNJSFFaX/vt2dHR1s/P2d3g6vX+aXjx/G/26Xvvfv7v/G1udmZkZGtvfXr6\n7fH39O/19/78+f5/9vTv9f36fn17e3z+dHJraHNrZXX+eOnsZ01NUktFS1xs7uzazMvU1dHV\n3+75+PNvaPnn9vju+uvzZ3T9dGNoam1taHT38X317/L5/X378v579erw8+7s8/19d3x1cnB4\nc2xtaW5qa/338997S0pQS0NGVGjg4t3Nx83X19fb5XFr6/Judebh6ep9fehsX2lwamZmZX18\nb3r08vX7evrw/Xb68u/w8PHp6PD6fvd9bm9ubnpvaGlv+HN0fe3k3/9JRE1LQUJPaNfa387E\nydfb3tvgb1755PX96+Da3vpo+fZcXF5oa2xibOvwen328u14a3ru9Hv87unn7Pfu5/ZwcHR3\nd25wfft6am9z9nFjb+vh3mxAQ1RIP0dR9s3W4czCzNfk79/ca1zv4efn6+bX2npoaWVkWlVd\ncHlpb/7q6X5tfO7ufG375+j4/O7l5/v+8uzydWtvfXVzbXF/f29nc33xfX7p3uBMO0VQQEVK\nW9LG09vFxs3Ye2be3mBf7+Pc2e3s2NxsXlpdYV1XXfjw+Xv37OXzbHTz83hycvPl6/rv5+fs\n+Ht993RscnVvfvpsa3pxam9vaX3r6uZmPz1WRUJOT+nMx+HMx87R32Nv2fFo/+rl09v46dv2\nYl9TXWFfWmjx9e3//fLqdW14fvj5/v/o5uru7uvo6/12/X10cWZq9vdsaXLvemFldHv+f+r7\nRDxKSEVOT23NxdPPys/P2Wlf5Ol6+Pjv1tPq7uLvamFVVF1kXWJ6/evxfHn3/3FzcXr48/vw\n6OXo6uz17/R9dHh3d3lwc3r2eGdocm5rbGN77+DnUDxAUENKTFjaxcnZy83N0etadd7u9/T6\n3s7Z7+nmdWdcUFZiYl5vdPjo73N5/W90c2537u7v6Oro5Oj47+v3+31vam97bnV6bP57Y2tz\namd1+eXcXjw9T0RJT07ixsTWzM/Rzt9bYuPp5+r+6c/R4vPwdGhgUlFcaWdydXzs5/ZxenV+\n/Hx09Obp6Ozr5+Xs/n36/31/dHP8+nJwa21rcW9vbW/u99/nTDlBTkBSTFjYwcnUydTPz+dW\ndOXr4OJ74c3W5u39a3JbTVJcXmdvbH/h5vh8b279/mx27enl4u7q4ufv9fP88/Vwb3t0dfZw\ncnpzdndmYnp3eejmWT87S0VLU0/izMHQy9DU0NtqXuzu4d/r79XR3ej3cW5qUk9aXWVwb3Pr\n4vP9c2t393Ju++7p4+ru5uTp7vP58/B8b3dxcXl4/npqbP5wZWtveujmaUo5QkxEV0571cDI\n0MzZ0tjtWG7u6d7g8uHQ2OLwdmhuW1FWWmNte3X25ur2d25q/3t1efLp5OHt7Orr8fX4+O7z\nd3Z/ent0dmprbGt6bmpzfv3o7FU+PE1ET1dV3crB0MvX2tTfZ170+dzb6OzX1N3k/2poZVRV\nV1tneXd58O3u/nRqc/58ffnt6N/k6ujn7PP5/vX3dnn+dXZ4dnNqam5tbGpwdvjs6nVLO0FM\nRVlQadbFyM/N3dfX6V9u8+za2+rj09je6XNjZ11UVllda31vf/Hu9v1vaHd+//3v7ebg6Ojp\n6+/v8/n8+nd0fm54+XVvenJtbGdkc3hz8/ZuVUA+S0ZVWmLfzcXPy9nc2998a/T93tvi6N3a\n4eH5Z15dWVhbW2V48vT18vn3em1sb3n68+7q6Ofn6Ovv8e7z+n1xeHx1ff16/nhuaWxqaWxn\nbX3j81o/PU5FWVRY5s7E0Mvd29TcfGb8e9za5u/c2d3d+mBdZFtZWlhjfPV9fvr67fZsann6\n9e3y7+Hg5ezx9vX0/nz+fvr4dnF9eXNsaG5va2Vnbnjz9HBWQEFOR1hWYeDOyNLM2trX3/9v\n7/zf3OXo3Nvg3/deXWRaXF5bY331dPt3c/j8cG97fu/p7/To5+fm7ffy7ff3f292+XlvdHBx\ndWtlamlkanNn/OTvaks/TEtOW1P938rNztHe1Nnfffr+89zm7Ovg4eDtXVthX2JjXmN+7/f4\ne3Xz7np1fHv37PD97+rr6e74+PD2fXpyef7/c3J5cG5taGRtbWxrcffn61dCRUxJXVNc79XL\nz8rc2NTb4PXzbOjj7ezq5ejefWJmX2FkZF5mcnT8/H558PH79n97+vL68e/47erp7e7yfnt5\ndXBxcHNybGxpZmdubmlrcn/v72hMRExKUltWeOzQz8zP2tLZ2eLre23u/PDv7+7s7Ht6bmtp\na2xkZ2ZscHv5+O7z7+/z+n76fvn5+vX07u3s8f56dXd1b2trc3FraWRoa29tbHj+6PZZTE5O\nUV1XaXvk1tHO2dbY2tnf6Xl+d3f1/Pr/+3r69Xh3b3ZvbmpnaGp4ffx+fvb27vHz9/r3+vX6\n+/v7+fz7e3Z2dHZzbmxqa2hqbW5vcHj68fpqWFJVVlxaYWty6N/Z2tjY2dXY3OLt9nn9fHl0\nbG1ve33+/X/4+355dW9udXl8enh5f/z69/r+f/v6+Pn+/v/8fnx9eX1//v97end3enp2dXJ0\ne3x5bmFdYWJfYWlmanr79O3n5eDb3Nvc3+Pl5uzw+XJubm9ucXhydXl7/v5/ff5/ff96dnV5\nfX76/vv59e/u7u/v8Pb29fv+fnh4eXJ0dnR1d359//x7a19hYl5eYGNfbHR78ezm4dva29rd\n3+Dj5urwem9sbG9vcHN4fP74/Pv6/Pz+/3dzc3Byd3l7fH/68e3s7e3u7u3y9fn+fXl4dnZy\ndXp2dHZ7fX5+b2FgYl5eX2NhanR69ezo4d3b29jb3t7g4+fs/XVzb29wc29weHv9/P759/79\n/nl4dXR2en9//fjz7uvq6u3u7u/z9Pj8/3p4dXJvb3F2cnJ4e334+XFnaGhkZGhoZ3B0//Lu\n6OLe3dzc3+Dj5efs93l1cm53eXd9/v34+Pn39vf6/Xx3dnZyd3d2fv358e/s7O/v7/X49/n9\nfXl4d3V1dXd4enx6fP34+n1sZmljYWVnZWx1//Pt6+Xf3d3c3uHk5+rs93t2b2x0d3p8/vr4\n9PTy8vX3+f57eXVzdnV5enz8+fPw7u3u7/P1+vv/eXx4d3d1d3V2e398ffz69vP6cGtraGdq\namhrcXT/8e/s5+Lf3uDg4ufq6+/8fHV1dnh8/f5++fb08fH09Pn9/3t6d3V3d3r+/Pj08e/w\n8vX4/v9/e3hycXV2dXZ6fH5++/769/by9fx0b25taWtqam10en/58O3o5OHg4uXn6+71+315\neHp+/fz49/Tv7ezr7/P3/nl4dHFxb29ydXh+/v34+Pn3+n/+e3d5dnR1dXZ4enl6fH7++vj0\n8/f08/p9e3NvcG5sb29veHz68/Du6+nr6+z0+Pf+fv1+ffv29O/u6+vr6uvu8PT7/3p1dHBw\ncXR2eXl5eXh7fn56fHp3dnp9ent8fv57ef1+e3/8+Pr59vTy8PT4+/t8d3Z0cW9zdXh5ffz4\n9PL09vf29vb29fLy8vDu7+3t6+zt7e/y9fn7/nx6enV4d3Z3eHZ2d3Z3eHZ4dHFydnZ3dnh5\ne3p8/f38+vj08vPx7Ozu7e7z9vn9/nt5c21sa2prbW9vc3r/+Pbw7u3r7O3t7u/v7u/v9PXy\n9PTz9PT19/n+/n56eHRwcm9ub29wbnFycXR1fnz//f7+/v//+/r6+Pr3+PXz8/Lx8fT4/Pv+\nfHx6eHh4d3V2dHBwcnFydnV4fH1///r49fHv7O3u7O3u7e/u8vT1+Pn6+v3+f3x2dHNwb3Bu\nb29vb3F0dXd7eXr+/Pz7+/v6+vv8/fr5+fb4+Pn3+fr4+vv8/v98fHp5eXh2d3RzdXZ1dXh6\neHl9f/76+vr3+Pf39vT29vX6+fr7+/7+/f////9/fn59enl7fHx5d3d2d3d1dnh4eHl4fHp+\nfv74+vf1+fn6/P39f3x9fX18fXt8f3/+/3l9f3l7/n59fn7+/v/8/f37+vn7/Pr8+vv8+fv9\n+fr7/Pz9+/v9/P98fHl6e3x8fHt4dnl5eXt8fH59ff5////+/39//318f3t+/f79/f5//35+\n/v7+fXx8fHx9/vz7+/z8/f/9/n9+ff////39/P39/H9//v3++/v7+/3///9+fP3/fX5+fX7/\n//5/fn1+fnp6fHt7e3l4eXl8e31/ff79+vj49/f6+fn/f/5+f3x8/v5/+/z//vz9/v/9/f79\n/fz8fn79fn1+ff99fX19fn1+/31//v/9/Pv6///9fXx7fnl7fXx+fHt9fH5+/n5+fn5//v5+\n/v1+fH19fHz//f7++fv9+fv6+vz8/vz+/nx7fX1+fH1/f/9+/v3/fn/+/P38+/77+v36+/z9\n/n59fnx+fHx6e3t6fn59fv7///5//n7//n5+fv78/Pz/f358fn//f31//n1//37+fXx9fnx7\nfn19fv//fH7/f31+fn///vz9/fv6+Pf4+vn6/v/+/31+/31+e3t+f35+/P38/v38fn7/fv7+\n/fz///78+fr8/X///31/fX78fnx//358e3x8fHx9fXt9//99fn99f358///9+/z9/Pz9/v79\nfnx7fHx8fHp6eXl9fP3+f/z8+/z8+/v8/vv9f/39/35+fv78f/39/vz8f/79/Pv//359fv//\nfnx7eXl6eHp6fH98//79/P36+vr5+fj4+317fn15e3x5d3V5eXp7ff9/ff78//7+/v1//v7+\n/v/9/P39/f9+//59e3x7en58fXx+fnv+/33/enx+fH/+f37+/f79/fr4+/r5+fv7+v7+fn1+\nfX19/n3+/Px/ff7//v79/P/9+/z9/vv8/v5//X97fX1+f/x/f/9+//59fX59f///fn9/fH59\nfH59fX1/fXx/ff3+/v7+/f3+/v7+fn9/f3t5fXt7fH7/fP/9/v7//Pz9/v3+//78///+/f5/\n//z9/fz7/fv5+/38/n18e3t9enp9e3x8fX//fH5/fP99/v1//v/9/v37+////359fXt8fXp9\n//78/Pv/fX57ff9+/vv///v8/fz8+/r7+/3/f3z++/z8/f79/f78/n1+e3t9e3x7enx8fH1+\n/nx//f38+vn7+/v7/X98fH58enh5eHl6eXz//v3+/v3//Pv8/Px/f35+/318fX57fn56e3v+\nfn3+f/3+f/58ff79/Pz7/fv+//3/fn/+/3x8fv9+f//+f33+/Pv7+ff4+/v6/P1/fn17fn1/\nfn7/fv3+/Pn8+v7+f319fXx9f31+/35+f399/f3//n/9/f/+fn5/f/99ff99fn3/fX59fH17\ne359fP7//X59+v39+/v8f398enp7e3x/fH5/fv1++/f8/vv9fH18fHt6eX39f35+e31//vv9\n/f/+/fz+/f3+/Pz8/v39f/z8/v9+fH5/fH/+//z8+/z++/r9fv5+/3x6fXt6eXx+ff7++vz9\n/P79fn5+f3t4fXx7eX79//7//f7+/X19fX5/fn19fX16e3/+/fv7/P7+/v19fv58fn57fv5/\n//37/H59fXx9fnx/fX19fH19fP9+/vr+/vv+/vv7+/19/n59/n7+/Pz7/f38fn/8/Pr6/f5+\nfv99e37+/f/9/P7+/n99ff///v39/f79/v79+/39/39+f35/fH3+/v79f3x8fHx8fHv//33+\n/35/fX59fn59fnt+/v3//vr9/vv9/37+fn//fX9+fH1+fnp5eXx9fXx//n79/Pn6/fn6+/n5\n+vv9/f5/fv//fv9+fXt6fXx9fv/9/Pv8+vv7+/r5f/5+fXx5e359fX///n19//7+/v///n9+\nfHt8fHt/f/7/fH99fH5+//99//z//v78+/7+/f7+/v79/v38/f38/f7+/v/+fv39/f3//f99\nfn19fXx9fHt8fXz//H/6+Pz8/f3+f37/fHx+e358e318fn5+fXx9/3///3/////8/P7+/H5+\nfXt/e3t8e////vz9f/79+/v7+/38+/39/v/+/X59fXt5ent9fv/+/fv8+/j7+Pf6+vz8fn17\nfHp6fHl8f/99fv58e31+fn3+fv77+/n6+/v/f399e317enx6fXt7fP/9fv3+/f3+/f/8+fv5\n+/v9/v1/fv5+//3+//5+//3+/f39/n19/359/35+fX3+/f/+/35+e31+fP////9+f/7+/v99\nfXx8/n59fn18fn18fn1//f38/fz9//z7/f3+/v3+fv9+fv9/fXx//P39+/v6+vr+fn5+fHp8\nenx9fHx8fX3///79/v/+f3/+/v5//39+/39///5+fnx+fHx9enp6en1//fz+/Pv7+vr5+fr8\n/Pz8/v3/fX18f35+fXx8fn5//v7+/f39+/r8+/v8+/5+fX9+f/99fn5+fn5+fn5+fn1+fv/+\nfn18fX99f39//v/+//3+fv59fX5+/318e3x7ent8fn/+/f77/P78/v3+fX5+fX5+fnp5e3x+\n/vz9/Pv+/v///f78/P/+/fz+/f3//f5//n///f//fn3+//37/f79+ff1635X6ORS1VHQ/UzL\nR87XUmnXVdVd8eZd42B3wlNIzUTF6Fxj/N5rYOh59u5c52Ld31hl4/r67WL0f+hzeuNY5eNd\n7XrxeW389n90dHl+83F9c/z9ePh6//x3+fp1/H78+n/+//v4dvz4fHx/eXl6en54+Xx9/Hz+\neXr9evz/ev59f357/n58/X38/Hv8/nn6fH1/efx9f/x8ff99f3x+fnt8fX19f3v+f35//f3/\n+v37+f38/n5+fXt7eXl6enp4d3p8fX1++v38/Pz29vj38/X6+fj8//38e3t2eHd1c3F3d3l7\nd3p8f/39/v36+fj69/j49vr5+fn7fvz/fHp5eXV0dnR3eXV3eXV3eHp+fX99fv39+vj49vXw\n8O/u8O/w9Pb7f316d3NycW9tbm1vb3F0d3p4ff7/+vj59fj19fXx8fHv7+/u7+/y9/j8/nx3\nd3NwcG5tbW5tb3NzdXZ0d3h6fH7+/vr5+fTw7u3t7Ovr6+rs7O/1+P99enZzb25tbWtra2ts\nbHBwcnV4en1//fv8+/n08/Du7u7s7Ovq6urr6+7v9v1+enhzb25sa2ppaGhpaWprbG1ucXJ6\n/v328vHv7ezq6urp6err6uvs6+3t7fH1+396dHJyb3V0bmtoamZiY2FiYmNnam50efzy7uzr\n5+bl4+Tl5OXm5ujp6+7v8/X8fHZvcG9sa21rbf5savtuaGZjXGRhX252bP75+fDs7uTg6eTf\n6u7q7e7o7O7o7u7r8PT1/3t4b2pta2Zoa2ptb292cmZkZmJjZ2lqbW5z+/Pv6OTk4+Hj4+Po\n6Ojs7vDv8vLv8fL2/f1+eHZybW1raWhoamttb29zb25va2tqaGlqbG91f/nw7Orm4uPi4eTl\n5ujr7O7z9PX69vb09PX5/f5+enh5dnBzcHFtYlxdWFVaXFteZ2lv9e7l3dzc29vf39/l5urw\n/XpybnV2evr/enl5ev35/X58cm1vcXF5enZ5d3p9/fv38vb6+v39+/v6/nt3b21raWloZ2Zn\naGtwdv/28O3r6ejn5ufm6Orr6+zu7+/v8fTy9fn7fXx5dnJwcm9uc3F4//v6cVlSWlVQXWZb\nXm5oed7d2dHT2trZ4d/d6PD7aWBnam367PX29Hv97u7t7vxuaWdianNxeHt2dfz07+bj5ufr\n8/Xy9/L4fnFfVVBTVVNcX15faXb539vZ1djc39/k6ur2/W9kaGxwfevn6ubq7uvr7u/weG1q\nZGVpbXJzdnR8/fTs7ezr7fX6+3/6d2deWFFTVldaYGNgcnzv3trX1tXZ3Nvh4uPt/G9qYmVp\nb/z49/v8+/ju7u/y/HJsa2ltcXN6fX5/+/Lv5+Pl5uv0fHNuaWpra2pjWlBKSk1RYXff3t3a\n39ra19jd3/t2cXD68+32+3x49u3l5e3+bmllam9yeXJ1evzx7Onu9vt/+fjx8vn/cnN1eH58\nfHpwb3J2fXxmUUZCQkdUdNjPz8/V1tfV19zkdmlla/zq3uPp/G96cPv3/XZpa2ly/fbv+vx6\nfvnx7fb5enf88ujl5+7+dG1xd/36e3Vqa25teHV4dWBPR0JDSlbv1M3N0Nbc3t/i5fB6dXvw\n5N3b3up8aWlpbX11e3VxdX38//10cHJyf/ny+P57efrx6ebn6/L6f/36+fj/d3FvcHd5dG9u\ncHh5Xk5GQkRLYN/Nys7S3+bs5+Tk6f33++vf3Nne539uY2JpaHlvdHhve3R6b25taXN69/Xx\n8vr2+/Lu6+ru8/r49O3q7fF9dW9wc3N2b29vcf32+19NQz5ARlnfz8fMz9rk5uvi6+/8efLq\n3tva3efwd3BqYGFeX2ps/fP3/nJuaW90evp7f//89fDu+fh+fvXu6enq7/X4fn56dHJvbnV2\neXxxcnB3fXtlU0ZBQUVZddDJzczZ3e3r8/zuee3n4drb2+HofnJuX2FdXWdtevTx/Xhuam51\nfPf3+vX09O7u9Pt9ePz48uzt7/t9dHN2dnx7enNtc3R/9/Tq4+JpRz06O0dY1sPFxs/a7Ov0\nd+9sd+rh2NbY4Oj8e/F+fWxeWVlfafz3e3hoaXB4f/14bXN49OXk6PB+d3/y6uTn7e/z9PD2\ne25nYmNtevPx//9vb3p593JcTT9AQkl468zLz8/c2u7pem73ft/a1dnd5v3vfPp9ZF1VWV9u\n6+vs+WtsbHV2eXJuf/Ln4ebvfHJy+u3r6u739vb1931vaGdsd/n3/nRrb3l+59/cbT87OzpT\netLCzMzY0d/n61hgYf3Zzc7b3fz/6e3veGZaYmhhbWtdZGZr9vd/bnFqdO3x6uru8ezr9ez3\n//X06+nm7PP6b2pmZmVufX7+dm5ob3j/8/RuWk4/P0dJfODUzdLP3NTpc3difOnY1dbY5efo\n7/p4amFlW1dlYm7xfvN7/W5x/2x///Tp5uLs6vh5+n/7/fTx8O31e25ranB+cWtsaXf5f3xt\ndnTu2t5yPzY+PlbZ6s/azMzKy2VkVV3t29Tk2t/e093yYGFeZ+92aFpcXmn8YmZlb/fu7213\nffLn6vF8+O/r6fZ3efPq5uXvfHRva2tnY2htdvV9d/3//X55a3FjUUw/Q1BT7+/d1tPK2Nnv\naP995uzi3d3V2d3r+31vfG5mXVdZYnRocW938PDybnR5+uzy8fLm4+jt/f757/X8+Pv5+vtt\nbHdscW1oamtvb250d3Xv5/RjRjlIUUt8XN7PxcTf0fDw4W9rXefc29Pj393b6mtqXWZrX1pZ\nZWpteGdu+vL/a3Z0+Ov58u3i5uzr/O7s7vT67e3r8nRwcm5lZmhpbHRtZ21xfW9zbnrucF5R\nSUZYVVRt/tHTzNTf1OLkd25//N/r6+Tf3OTpeHFrWVpfX2Ru/Hvz6v/7fXl4df929u3x7ezr\n8+/y/vr8+3/38nz/fHd0bmhpcnNpZW1wc3Bwb+/g/GpMQVZWSFFZ3NbP0eDKz9jsduv96W9n\n7ePd7ebm5+RiWmJiYFxjaXjqfX3x6/F2fHd+/HR3fe3w8+3w6evv+/7v/npxb/x6bm51dm1u\na2ZvcGppbnl6+/Dwd1lMVVtMVFt84t/X3s/Q2dzm3OTr+W/z+fH9+/x79mtubHX/cf9yen90\ndnjz+Pr1+PL3+Pr58PX49vb3+vl+eXpyb21vbGx1b29qbHBscGxzcXd7dfHw6vJbVWRaVFVa\ne/zj6eLV2Nbb3Nvf4fp8fnNuaG1udv579u7p7O/1fX1zbnJ0fHt8//719Pb09fX5+/17e3l2\ndXJub3R0cnl+dm9tbmpqa2twdXx8fPz57u3t7O3v/3lvZ2hnaG1vfPbw7ezn5ubk6Oz0/Xx5\nenv8+PHt7ezs6+zt7vb9fXRxcXFydHN1d3h6fn/++vv7/nx7eHd3dXRzcnNzc3R2e3p8/P78\n9/X5+/b18vDx7/Hw8vL0+Pn//3l0dG5vbm1wbnF1dn1//Pn08O/w8PDy7+/w8fb19Pf49fb3\n9Pb4+Pn6/X58eHRxb25tbm9vcHBwcHN2e317fX58//v5+fn4+fz7+/r7/P1/f/9+ff/+fXt9\nff/6+v59fX99e3p4d3Z3eHl6fH/+//z8+/z7+fj29vb29/X39vb5+fn4+f38fn19enp4enh2\neHd4eXp4eHp6enp7fHl7enp7ff9//fr6+fj29vj49fj6+fn6+vv8+/1+fX17d3l7ff9+fv99\nf/z+/n99/3p8f3/+/fv7/Pz6+Pf49/T39vj8/Pz/fn58fXx8fHp5d3l3d3p5e3t8e/7/ff5/\nfn55dnp6fv/9/v/9//35+fb09/b19/z7+v9+fn16eHl4eHh5e3x9fn79/fr6+Pb6+Pf4+Pr5\n+/7/fn5/fX5/fn59f358fX3/fv9+f35+fnp6ent9fP97enx7fX3+/v7/+/j7+vr6+/z7+/5+\nfH3/fn1+fn7/f3/8+fr7+Pz8+f38/Xx8e3t8fH19fn7//fz+/f5+/v5/fXx8ent8fH7//v3+\n/359fX1/fX19e35+f39+/fz9/fz9/Pz9/P///n59/H///X78/f79//79/f7//P3//fx+ff99\n/357fHh7fHt8fH7//Pz8/Pz9/f3+/n5+fHt+fXp7e3x+fXt8fX5+//z7+/r8/fn8/f58fXt6\neXd4eXp5fn19/339+/39/f19//58fv//f359fn19/X1+fnz/f31+/3t+fv/8/v3+/fz//X7+\n/X7/f35+fX5+/v/9+fv7+vv6+vz8/v7+fX18fHp8fX7+//3+/P39+fx//v9+/v1+/fx//n/+\n/n/9/n5+fX18fn1+/319ff/9/f7+fX5+fXx7fnx+f3/+f//8/f39/v39/35+fX18e3x8e3l6\nent+ff///v9+/X9+/f7+/fv9/v9+fn59fH1+e3x9fH1+fn59fn7//v36+/z8/Pv8+/18/X19\nfXx9fH1+/v/+/fz5+fj4+fr+/P39/n9+fn58f3x9/35+e31+ff39//z7+vz9/Pz7+/39/v39\nfH5//vz9/X7/fH19fH18e3p9e3x7fH17fH19fH1/ff7+/vz7+/v8+/r+//58fH5+fnt7enp7\ne3x7fXt+///9/vv5/fz8/fv8+/n6/v3+fv59fn99fXx+fX/9f/79/f/8/P7+//z///7//v7+\n/fz+/v39/fx//35+f3x9fX7//35/fX3+fX17e3x9fn9/fX19f31+f//8f//7//7+//7/fX19\nf/7+/v59fX19/v79/v7+f359fH/+fv/+//7/fvz8/Pn7+/r6+fv9/P79/n5/fHp8fXt9fXz/\n/v/6+vz6/Pv7/f3+//99f39+f37//v39/Pv7/Pv7/P39/n5+fX18enp6enl6enl6en1+fn7+\n/v38/Pv8+/z8+//+/Pz+/f7//39+fnx7enl6enp7eXp5eXh3eXp5en79//n6+/r8/Pv9+/r9\n+fv79vb5+Pn49fX09vj6/f97d3Zzb29vb29ubmxtbm9zeHx+/f36+fj18/L09fT19PPx8fDu\n7u3u7e3w8fb8fnlzbWxqaWlqaWdlY2JgYWVobHN8+/Tv7Orp5+fo6u3w9/19fHl4eXZ3e3z7\n+fXx8/T4/nx3c3BxcXFwcHBxcXJ2ef/9/f3//nt8enh3eXh1c3JxcXd5//j08vLv7+/u7/H0\n8/f5/P5///5//n58e3l4eXh7eXd6eXh6e3p8//z6/Pp8eHNsaGJfXl5eYWdtffLo4t7b2tnZ\n2tzf5evy/X53dnl7/fn4+PX3+Pf9+357eHNuYlhRTElISk5WaunZ0s7Mzc7Ozs/S1t3ubF5W\nUVFUWWBx+O3r6u3y7+/r7ezu/nVraWVobnnz7OTl5+nt9Pv39vf3/H12dG5wcnd//Pl+f3Ry\ncnRwaWleWVZTVVVcZ3rq39nY19ja3d/j6e37fG9sbWx0/u/m393c3eLo8n5ybWtrbG10ePnu\n59/b19jkb1BCPjg4Oz5NXd3MycLDwsLAwcHFy9N1WElCQUFITlpw7ebf3dza2dXY2uL2alxc\nWV1ld+3q4ePj5eXj5+Pn6/V/eW12e/bt6ODsZU1EPjc5PEBSds3JxL/EwsXBwsbFzt5fTkY/\nP0BHTFr85tfRzc7Oztbd7HpkXV9faHrv5+Xe3d3b29vh6vxnXltcX2hdSEE8Nzg7RlnlyMXC\nwsTEyMHCxMfQ5lVLRUJHTFpfbvp1+e7c1tLP2ORvX1pZa/nh3dze7uvr597c2uX7aFpYV19p\nd/T49HlZRkA9OTtAS1r90s/MxsK+vru8w8rbblJNTkxPU1NOTldbddzPzdDW6mlkaHr35N/s\n9vvy6t/W2N3ofmhfZmtsbGVeWlpfbP3m+Uw/PTg4P0xn89fP1cvBvLm5usLU8F5XU1lbT0tI\nRUlV/9jRzdTm7vHq5OPhfGVlafDd1NPd6fp4+Ovl8WlcVFFXX291dXNqcPRrST8+OTtDTmBm\n49PQxLy4ub2+ydfd5P9ZT0pERUlOVl909ObZ09LW3el9c/v39fj78/Ll3Nvb3ubs9/p9al9Z\nVllbX2ZjX2V87X1LPD49PElPVVJX18rBurq8wsK+xcvVbFFJTFRNSURETlvn09vf39rS09bf\nbGd87OXs/HNw69nY3+728O/t92BUVV1iYFxYWF58c0Y4P01ESE5MUWXQwcbMwr29vb/Fz+Lb\n22tPTE1MR0ZQVk9d59/o4tnQz9bY193p7e3+ZWBsc21hXmNqZ2BfY2prZmhpa3B1dnl+/PZ0\nW09V7uZcV3be3vZt+dza633v3t7l6unp6ez0+X17//v+d3n8/nVzdHr+e3F29/55fHl4eXp3\ncHZ2dv1zbXh/cnn29O7n4+PnaU9c7kw/WGlNWXRWbdDtX9XL3dvO09TN09/c1eNrcvpfWFxU\nU1xYU197d//k2trd3dze3fLx4ml/bGZ1Xnpda+lZ/O9p62723P/t3eb3U1bmUj5VX0VKU1Zb\na3D80svVzcDEy8fGy9DX4e15Wk9RT0ZITkxMUlxn/u3d0s/Rz8vP1NTb5PN3a2NfXV1gYF9u\nbGx+/vt89//6fXnx72BLXPVFQHZPRFJXXWx3+9DM1sy/xsvExcvO19vedVtcVExMSUxMTE9Y\nXWX749va08/O0dLR2OPp6nloZ2VfXGJmaGp1/Hp47vds735+fHn2dVFOb1Q+TmRDTVdYbHR4\n0cvSy8DCyMTDyMzV2d1vXl5XTEhOTUZLUlRWX33l5t3SztLSz8/Y3d7j921xcmZhaWxsbnXz\n9/74+vF1eftzaXp8b1FKW1w+QHdERlhdfPbqzsTLyL69xsTByM7Z5OpiUVRRS0hKS05MTWRm\nYu3a2tnUz9HW2NfY6u/m8mtsfXlsce/w9O/s5O799vl0YW9zYV9td2xcRkz3QzptUEJPZ+3r\n383CwsfCusHKxcjU7nJvWExMTk5LTFdZVl7u9n3g3Nzg39ze6vLt6fx96+ft7ufg4+rn4un8\ne3prZmFfYmZgaf1teO7q++XwSUz1RzxIX0dFYuHv3srFwMHCwL/I1NbYbFNVVE1KT1VZYm7/\n4eF55tr5Y3z6Ylxnb2lz+Ojd29rW0tXe3t/wbW9xY15gaWRkb3Z/9/3p7XX37n9u+N9ySD9V\nbDk6X/lLTM/Hy8y/v77Ays/N1GJQXF9LSFJmYWL33Nnf4O7v+GBVV15bVFz+6+rg1tDQ1dfY\n3Od6bGtmYV9meXp49+zr7vL2+n1vY2hxaWJs7ePrcVhCTftCPUflZlLqzcXKwcbHxMPSeevj\nYktQWVdVX3J+49nj+ejrcFlcX1xbYGlv6d3c3tbR1t7f4fJ6bWxkZ3Nzc/zq7vbw7X1veXxn\nX2pua2789uvl+lVATWJJREZoZvXb087JvsLKzsjO4P9rWlRaWVJRavPt9evq6ur1bl9iaGdf\nY2z+7uHf4N3Z2N/h6e/9eXtubnX9+v/99/5++P53b3NuZ2lqaGv46/FnTUVRUk5LTlld4dXQ\n1cvFxMjKzdne5PFdV1ZYV1xlZWt07O3v8/T8d3tzbGdud3357Orn4N3d39/j5+zx93l2dnJx\ncHBwdHd6dnd4enp0e37493FXRUdNS01MVVJj3s/NzcjGxcTEytTd4flmXFZPT1ZdXltka3nv\n5eXw8Ovp7u76eHjx6e3u6ebn393g6evq7PT6dGlmaW9ubm5qbHr//f7z92JNR0xKS0tOTlN1\n3tTRysfFxMHEy8/T2+9uXlNPUlRST1VcYXDx6u3m3tzf4OTr8e7s+nx+9fPr5ebq5eDj6u7w\n/nh4cWpoamtpbXf9flpIR05MSUdKTFV+4d7azMXCwcHFycnL1e9tZFtVVE9LTFRaWl5rf+7e\n2+Dj29nd5ufu+fHu/HP+7eru6+rs5t/o9/jyeWttbGZoemxMP0pUR0BDTE9cff7y0MLDyca/\nwMXJztzh4XFSTlNPSktOUFhqfHTs1tTc2tXZ3t7j+nrz/Gtt9/V88+bn59/h5+jq9XVwdXdo\nTD5HWUA6P1ZQRlPv2dHJysa+u8PLw8DQfvTxXExLSUxOTExa7/9x5M/T3dzZ3Ojzefz1f2p7\n5ur86tve5OLd5PX2e2VhZGBNPUZcOzhHX0lE5c7Y2cXDxMLFycnJ42zv91BMWF1RUGV6+vTj\n3dXb6+Tf82Fte2tibf/58+/m39vf4dzf7nr+d15eZFxEPmxCNUpZS0Hm2PvZy8jKxMvJxs3p\n4dxmVV1mVFheZXX779/W4eLe33xw+29panB1+n384t7r49je8+znb2JlYltNQUtWOEBYSkpX\n3HHY09DIycvMw87a2d13YW5aW19YYnt7/93Z5N3c6OzxfXV0aGdya2Z69H3z4+fp5Ovt8W9u\na1hLTFU+QFdDTVdafv7Z387I08jHzc7T1+bs+V9nZFhgaWV97e3l4N/o5eP4+vptamxlYWtr\nZ3R9fvj08/n5fnx/Z1pYWk1KWlZOW2hfaPfu5djX1tDR1Nfc3ODv+/J9bWx0fX1++u/u7vDt\n6u73+/p9b2xtbmtqam50bm52enVycGFYWldPUVlZWlxea/z7797Z1tTV1dXY3N3i6+/3/X57\ne/z29vbz8PHy8vL0+v58cW1raWdqa2tvbWxvb293fG9gXFxZVllaXF5fYWl1++zg3NnX19jZ\n3N7f5Ojt9fr5+/r29PDw7u3t7e3s7/l8dm5paGZlZ2dmZWZoaGpucW5lXV1aWFpcXmFkZW19\n9+zg3NrZ2Nna3N7g5Ojt8/j8/v349PDw7+7u7/Dv8vx4cG1oZWRiYmJjZWVmaGhsbnJ5dm9o\nZGNhY2Voamtuc3v78enj397e3d/g4OHk5unr7/j5+PXx7ezv7/T3+n9+dW1ramRiY2FhYGNj\nY2ZmaGtvdHZ7f/779vT19/r9fn57e3/8fn77/vv29fLu6+nq6ejp6+zs7e/u7/T5/Xx4c3Nw\nbm1pZmZkY2NjY2VoaWtucHN2ev/59/Tx7+7t6unq6uvv9fr5/P7+fn54d3d1dHF1cnB0dG5t\nbW1wcHd6fHd6fn59/vf18/P29Pf6+vj39/X19/v9/n16env+fv7/fX19fHl8fH97eHRubGlo\na25xev779vTy8fDu7uzs7O3z9/92dnNydnx9fXp7end5enV0d3h2d3l3dXt8fv/69/j29PX2\n9fT19/X4+v37+/38+vr8/P58fHt5d3Z1c3RxdHZ2eHh7enx+ff37+fb3+Pn59/n7/X5+e3p7\ne3p7fn18///+f/79/n7/f37+f39+/35/f3t9/3t8fHx8f/5//vz9/H/+/X3/fX7+fn/+fn79\n//77+/n6+/z9+/3+/f39/f39fX9+fn5+fHx/fXx+fX1//nx9fXp7fHhaXNB4b95r5fzx7X34\nbnX/c3v89vH2/v/4+v78+Pp9/np2fXx3//x8/nx8/379+v7/eX5+dHd6eH13c/5/fP1/+v17\n9f738v/29/z9eHp++evp6O73+01I1eHf2WPu/OPW2t3saWlpbfv8fW1lY29+8/LxfXF1b3Bx\na2B0fW52c3R4d37z6uz9d3H08O3t+fttbvj27vZvc2Zo/PLr/GxsbXns6Ofq+H7/9/jo7fn4\nb3v07uvs7/Xy+P58e3VxenFvamhsbnFycW9zcXV29fH38fX9e/Lw8/787vbv7Xx0dv/5enl+\nfP5/cXz09+3s/n/29/D48/b6+Pnq83d3cm55fXd4b3Vwa3T8f/NvX/9ycPb88/h++fvv73x7\na2Nv9O3v9Hz/+PPx+e7u/Hhxcmtte3R3c3d/efvt8fZ9cnF3dn39/fZ+dXv16+bm6vP+enJ0\ndm1sa2ltcv3y9/Xz9PT3/Xl6dW9xcG1yc3r8fPXw7u709//6+/97d3F1fPnw9vl++/fy7/f5\nfHZzcnZydXNwbnJ5dHNzeHx++PPv8e3u8u7y9P9/fXd7/vX3+P5waGNjYWBgXl5eYmp77uPd\n3NnX1dXW2d7i6evv9vl+fXh6fv/7f3x0b25qZWNlY2JlbHf++PHz7+fd0c3oRD08OT9IaFhU\n9t/Gv7a3vsTMz9/Z5ltIQEVGUW7j5u7b1M/Oz95dTEpLTFJZW1pu3dDKyMnS29vd5f1vW1NW\nYf7v5Oj1++ve4et7ZVxcbPrv49/0Ykc6PT4/SU1fWO3Lwbu7ur/Iy87XdFxMRkVMWl907d3X\nzsjL0utvW1JQTkxHR0lOWHXd2tPRzM3O0N3sbG9ydfp993zq39zc5OX3enVpY1tcXGN559zX\n1d91Tzs3Pjw/REtaWsq+urm7usPFyNB5S0pERklSW1Z72crHx8jT4Pt5XUxJRUVIUWFo+Ono\n5tfQ1+Hq7Xz/9/ttbO7h3NnX2uLf3ub+bWdfYGltamh/597Y2vBcTklCPz9BQkZRdN3OxcC/\nv7/Dy9bna1hST05OU2B359rSz8/Q1N/8ZVtSTUxMS0tUav7l2tPQz8zR2+fx+WllY15haP70\n+e3p5OLj4+/79PX3//Tq7X1lWkI5TU8+S0hZ+f6+x8/Cxr3H18xvXmpbWUdJW1hm/Obb4s/K\n0tzr4/ddX1dOTVFfWllq/eTe2dXd3trb5nJnYFtbW1tZWmL+6/Hi3NrX2dre6+vufmxkZWZj\nZWhpa3P69vn9+fL7+/90dW9zeG5uc3h+//38/fbx9Pj4/f7++/93e359enZ4fv/+/P37+vv8\n/X/9/39+enZ3enl7env9//78/vz8+vv//P1+f317fP9+e3/+f/7+f398eXh4enZ1dG92eHd5\neHr/+vf29PHw7u3t7fHz9PX29/f7/v1/fP78/vz/fXRsZ2JgX15fYWZqbnV4fP738u3o6OXl\n5+jp6evt7vL2+Xt4dHF0cG9vb25vb3Bwc3Z3eXp9/35+fn18fHt6e3l6e3v//f78+fj4+vf3\n+fj5/H9+fn1+/n18fnx8fHl5eHh6eXh8fn7+/v3///38/v3+fv59fX98/v/8/Pz6/v39/P7+\n/319enp6eXd8fHp+fn7+/v/+/P39/v78/v79/vz6+vr9/f39/P7++vz++/9+fXt+fXx8fH16\ne317enp5fn1//37///v8+/n+/P1//n59fX57fX7/fXz+/n58ff5+/v/+/v/9/f9+/319fv79\n/vz+/vz8+/z6/Pv6/vv+//59fHt8fHp6fv///Pv4+fr6/v77+v38/v/9f//+ff9+fn7//v/9\n/Pz5+/x9fXx9/n9+f31/f3x9fXx7e358fv5//n5+f37/f/3+//3//v99//5+f39+/35+fHt9\nfH79/319fX1+/n/+fnx9///+/fv7+fn9+/7+/Xx9fn3/fHx9fH1//v3//fz+/f39/f37/f/+\n+/n6+Pr8/f3+fn97eXp4enl7fXx8fP//f/3+//z8/f3/fXx6fHt8f35+f////v/9/f39/398\nfX97eXt9ff//f/9//v38/v7+fX59fX98fHz/f379/f38+/r8/Pv8/X//fnt9fH3/fv36/fz7\n/v38/P79/n3+/H/+/f/+/v/9/v38/v3+fn5/fH5+fXp7enx8ent+fX5+/v9+/v/8/v/9f//+\nff///v39f/9+e3x8eXt9fH59fH3///79/v7/f3x+fn1/fnt9///9+/v7+vv8/Pv8/v7+/v9/\nfn1+fn1+fH1//X5+/v78+vv7+/v4+fr4+/3///x/f359fXt7fHp6fHh4fHt8e319/vr6+vz7\n//5/fH17fH19fX1+/vv8/X9+/nn/+//8/f38+fr7+fv6+vz8/H1//3t6e3p8fHx6fX5+f33/\nff/+/318fnx/fnx+fXx/fn/9//78/v78/Pz8/Pr7/P39/P5+/v9+/v57c/j8ffL89Ph6dXJ3\nfPr3/X9+e//49PPz9vz+/fn5+Pp/fHx6fH56eXd2ent6enp6e3t9fnt9fv77/Pz/fn3//39+\nfX15fnt8/339+/z6+/n6+vj5+fn7/H57fX58enp6e3p7fH7//vz7+/v9+/r7/P7+/fv7+/z/\n/nx+/3x6eXl4e3t8f35///5//fv8/f1+fX18fXx6fHp9fX3+//n+/fv9/f7+//7+fHx7enx8\nfn3//3//fv///3//fX3+f//+//3+//1//fz9+/39/P38/v7+/v7//H///n//fX1///37/v39\n/vz+/vjn4XL26Wj6a2v3Z/htcvFy73n+925/bnB2a3h1//t99vjw8/by+Pb6/358fHt6en15\nfn57fHl8enh9en5+/fj8+Pr59vj4+/v7fXp3dnp4ent+f33+/n/9/n/9/3z+fnt6d3p7fX99\nf/v9/fv8/P7+/P9/+/n8/Pr7+vr9/H1//nx7d3h6e3p6fX59ff/+/n5//v/+/f1+f3//f37/\nfv7/fn56fn///X7//v7/ff99eH96eXt8fn39/v37//v7/Pv9+/v7/P78//37ff3/e3x+fv/7\nfHv8f//+/39+/fv8/Px9/v99fnx8f/9+fP7++/t4/v9+/Hx+//3+fn54+v55f3R7/nv/fH57\n/fv+/H74+/3+fH58enx4//7/fX5/d/x8/X3/9nz6ev78ef15fn1++3p9fnt+e/7+e3t8/P3+\n+fn4f/72ffr7//96/X1+/Hz//X/9/H7/fHt7//t9+v7/+376ff/5//r7e/x/f/x8/Hl5/f/8\n/vvz+fz7+/j/fn39ff94dPp6fv1++Hp7/3l9dnv9d31+fvv9fXl7/nx8ef38evn9+v369vj9\n//l+f///e3r+e3n+eHZ4d3p2e/9+fH35//7+/fx+9v1//fz6fH96fX53fnz8/nz7/vl5ef95\neXr/e/n9evz8+Px4fn97d3Z6e/7++vr8+fx/fn59eHt6ent/+np+fX78fv3//vn4//5+e3x8\n+Hx4//T9fvj7/H77+/n6f/56//94fv7+fPv2fXz8+Pz9+f3+fXv/fXv7fH7/evt9e3/8+vj1\n+/r5//78f372fnn39339+n17eXp7ev18e3z9+f/9fvt5cv5+e357fH99/378+3x9/P7693t/\n/Xz9/nt8+/x8eXR7eXt1d/14/vx/+fz79fz//359/Hh5fHl7ef3+f/v////9/X1/e3V4/376\n/3/ye315e/d9/nv//HZ+/P/7+vP5/vr8fHz7+H9+/P75/f9/fn1+e3n7/f17/v18/3/6fn77\n+/j6fn768vp/9/r8eXx6dH57e317eX73/Hx+9/v/e336fnd7eXx3ef5/fXP++/z7ff33+f3+\n/P78/Xz6/3R3ef1+ff77/np3fft7eH3+fXp+9nn6/3j0e/99efj/fn99/H1+eXl8//Z6dn5/\n+n5++vz49fn6/H7/+/t6/vz+/v7+//r8f/17ffx3evz/eHh9+3979/r89fT2+vj5/333fnn/\n+f11ef7/f3r9fnn4enz/fXh0f/57evj3/vr4+/79/Hx0/n11fXh5+v/+fvv4ev59eHx6eHX9\ndnv3evzz+Xv6fnz+/vh7fX7+/X9+dv78f313eH9+dnP9/H/6+/v7/f3+/Pv6/X199n15+H/+\n/3j4/H/9f/j7fnv4/Xd2/vn/fv34//v6ffV7b/9/+P95fvX5eHn8f3v8ef/+/nx5fXh6fH77\nePv8ePl++vz483l79fp8/3r7eH79df5+fH78dnN3//x7dnz5f3/+fPn2/3r5/Hz///7+eHd6\n+ndv/H/9+35/9fx8+fv7dX/2eHN6ff/7/P54fX59/P5zdvh1en14enz4/H78ffn4/vz+/nj/\n/Hb7en1+d3p7+ft8dn79+X54fPv3/Pj8/n1//XR7fnl8/n9+9Xz+evv4eX51enlze/p+evz7\n+fl39/n883z4/fr4ef35//j1env9fnZ3/n34+n7/c/v7fvn/9/37+/t/e/J2dnt0/fz+df72\nfPz9efjydn3/ev13eHt+fvr2fPz7en18f3F9/3X9/n189fd4f/j9+XR5fXj2//14ePh4/vx5\nfHR++XJ4+/z7e/v+//x4e/j5/P/3fHD1/XX9/Xj9/HF4/n51+374+nz4+vx5+v38/np/fP1+\nd375eHj/d3h+d3d8/Hp/+f75/Xx8+XR5/vrzdf59+vF+ffh6fvB4b3t+eHt3fHx/fHb+/vz/\n/vj7/fd8+vx69fh+fPt8//Z7env88X79+P/3/PX6cXp3fH7/b2/49Xd9+frw/v779/tzfff6\nevzu+Px/9vz983x9eXl8eHd/fnP8+3l8fv9+eft7dPT1fnR4/3h8+XT69Xf9+ff3+HNz+Htz\n/v7+fP/7fv37fn35/3h8e3F3/X769v988vj4+377/P9zd3lzbnt7dXV6/3p8d373+Xz99vb4\n+vZ/ff///H18f3p/+nh3/3x3en3//Pv++Pl2+fl3+vp7+ndw/Xp5dP96c/n9fHv/fXr9/X32\n+nv09/j49/j6+Pj4+v/+enP7ev/8d3j8+3V6eX3//Pv++Pj+eP34e3v4+nz5/n338/r69v35\nfnl7+nx8/Hp4c3h7fXd7/Xv8enj7e3z6/3z293z+/n34/H36ff37dXr7/f18e3v7eXZ7evj/\nfX59/vz+en99/nt2f3t8+f/4/PP5ffV//nz8/nz6e/r+fH17+nt4f377f336/nz6+/33+/33\n+Pn8/P37f3z7eH98ev19fnv6/v/5/X78+v59/fz/en73ff5//PZ+fvv7/X57fH//env6fHr/\nf339+H7/9/57/3l9f/5+dvz7ff/8+f7+/35+enp9/3x7ef7/ff96e355fX59/v//fvz6fvz8\n/n3+fHr/fH7+/n/7/n18enz9//t9/vz++v37/H39fnx+fPx+fXx6//9//Pv7+Pr99/v//P1/\nff59fvx9ffz8fv/8ff38/fx/fv37/Xz/+37//n7/f3t8fHt//vn+/v3/+vv/ff7/eHl+enl7\nenl8e3h9/358/P19/fv8/f3//n/+/vx9/Px//H7/fX1+e316e3x8eXl9e31+fn/9+/3++P38\n+337/Pv9fv7+/fz+/P1+fHt7fv9/f//9+//++Pv+/P1+fnx/fH59fv3/fn7/f37//35+/399\nfv59f//+/35/fH7+fnt8e///fHx+fn18fn7//f39f/9/e/97ff//fn1+//3+/v78/H5/fXx/\ne3l/fnx7e35+ff9+fv1+//z59vr59/n7/v7+/n1+fXx9fP9+/X58f3/+/v38+vz8/X/+f35/\n/f39/v7/f////vz8/v37/P78/v58fP98fX18fH5/fv7+fn1+fn1+fnp+fX1+fn9//n9+/v3+\n//9+fv7+/399fX18fP/+/356fv5+fnx//P39/vz8/P///P39fX3/ff9+//z9/Pv7/Pv+/fv7\n/H1+//58e3x6ent+//9+fH7+/fv+f3/+f33/fX17eXp5eXp8fH77/Pz6+vf3+vn6/Pz+fn99\nfX58fH9/fX5///37+/v+/fz+/P38/3p+fX1+fX5/fnx+fn5/fX5+/v9////9/Pv+/399fnt8\nfXt6ent9fX7+//79//3/fn7/f3x//n/+/v7/f/3+/v5/fn16fH19e39///5/f319/37/f/36\n+/r8/fv7/fv7/Pz+fn7+/f/8/P78f/9+fH59e33+/f7//fz7+vn7//9/fHt7eHh5enx9fn5+\n/f37+/37/f38/f59fXx+fHt9e357fH58/X58/X5+fX9+ff7+f/99fv5+fX9///1/fv9+fX9+\nfnx8fXx9fH7/fv/8//7+/vz8/Pz8/P38/P78/P39/Pz9/318e319fXx7fn1//v/9/319/399\nf37//35//v9+fn/9//3+fn18fHt7fHt9/37+/v39/Pz+/n/9/f37//5/fv7+fn1/fX5+f/z+\n/Pr6+fn5+f3/f39+/n19f3t+e319fv39+/39/Pv7+v//fn18fX58fnt7fXt6fXx9/v/+/f/7\n+/z7/fz9//9+fnx8fHp5enp7e3p6fn///vv5+vr8+/9+/v//fXt6eHl6e3z///z8/Pr8/P/+\n/3/+//3//v5//vz8/Pr6/f79/X5+/v77f318e318e3t9/n19ff/+/Pz//n3+/v//ff9+fX1/\nfv99e319/f9/fXp+fn5+fn79+/r7/P38/f77+vz7+379///9/fj+/n99fXx7e37+/n/8+vn7\n+/x//f77/X9+eXx+fX5+fXx+fn7//v5//f5//f59fX59e3x7e3t9fX19fX7+////f39//v7+\n/f3+/f3+/399//z/fHt7e358e3p6/X/9/n79/H99/n////39/f78/v35+vn8/fz8/f39/n18\nfH56enp6enp6fX5+/n7///38ff1+ff39/v7+fX79/n99/31/fnp8fX1+fP9+f/79/37+f/78\nfH1+fXt8fH1//f5+/f7+/Pz6+fn3+fv8/fv+fn59fX18fnx9fXt9e//8/vv7/vv9/v7//v39\n+vj6+vz9/v1//v1+/v36/37+fH5/fn5+fHt8fX58e3t7f33+fHz/fn79f3z9/f7+fn5+fXt7\ne3d4eX5+//3+/Pn3+fb3+fj4+fr7/Pz8/H9+/v9//35+fH1+e3x6e3l5eHh4d3l4enh1eXp5\ne31+eX3///v8+fn29vj39PLz8PDz8PT09fT09vb3+fr6/v3+fvv8+vx+eHl8enhyb2lkYV1c\nW1xdXmZwfu/p5uXm5urq6efl4+Lk5efp7fL09/j2+vr6/f7/ff/78/P0+3p3d35uZFVSUk5X\nUEpIaP7wzd/Z19XU+/poXe/o6d7k2Nra3HhrZWJpaWVla/31+3Jua2xvbWxqdXzy8fTz/PT6\n/Xt2fvz08vLy9PP6/XhvbXBwb25xcXR4cnRvb25ucW9yeXx8ef3x9O7v9PHx7/f5+vj18vL4\n9vf5+v94dnl0dXl3dnh4dnl4eXh3d3Z4fv33+f37+/d7dWpgXlxeXWNqdvTt5+np7vHz+fXx\n6+jm5ebp6u3x9fj19ff2+/v/eHdveHp6enZ2fPT+ev17fXp+fvTyX1VFND5dR9XU28fIvdnb\nbktWX3V04NbRy8nY9l9WUlhdW3H03tzb721sYGNfZWRv7unq6vd3fHNybXdzffX27vXt9PTv\n+/96e3V2+/L06Ons7X94bGVRSUlDSVhf+N/W1NLT5v5tZmZ67ubc19bZ3Op+dnNxd/389u7v\n+npwbnR1d3r++fTv8PLy7u35eW5naHBtbW9wYFRNPjpNUV/W2s/OxMza3WBdZPf86Nzc19LZ\n9WtfWV1tZ2/26unk7mpmZWprc3J28ejq7e5+/vb4/PPr7Ofn6e3r+HT1/W1oZV1dZF9PQz5D\nT2Ht4NzSzczT33hkaXzs6eDe2Nnk629obGx2ePj67ufs9nVva3F1dnV2fvrx+f7///Ps6+vs\n7e7v8vPx8P13al5eX1lIPDxDT2Xh3djNy8vV4mdfan/t5d7b1NLY721gXGdma2x59/To9Xdt\nbW1ze3R4+vPv7/V9evn19O/u7e3v+/j09/z7emppZWdiVUA7P0hXfd/i08vLztn9XWNv+Ong\n39jR0t78alxha2pub/jz6O15bWlqbnVvbXX68Ozv/P739fTz+vft7O3v8PL49vt3bGRrZmJY\nQjs9RlBu4eDUy8nN1exfYG7+7OPg29TS3PVsXV5taGtv/vDn53ptamtudG9rcv717/D8/fby\n8/L19+/o6O3u9vbx/HFqZl9hZmdQPjtASlnt6+LTzMvP2mxdZHH46OPh2dPV3vloXWJsaG9u\nfe7m63xyamttbmlmbXj58fV8//X18O7v8O7u7uvv/fv3/HNuaWZpa1pBOT1ETXrr49fLyM3Q\n8l9eaXfu5+fe1dLX3nBeXmBpZWxqeujl7XduaG5xb2ttd/vs6fZ9fXz59PL08e/u8Pf8fP3+\nenVqamtsbFdHPz5HTlv979nPy83U429nbXv57ejf2tfd7nllZ25vb296++vs+XVtbXF3c2xv\nevvz8Pb89/Hu7/P4/PH1fHN2fXV4c2plaXB0XEA6QEVR/ezk2MvKzNH0YWFs/ejm5t7W1dns\nb19ebGlvam7/6+j7em1scXlzbG10/e7t9fv27+zq7u/u7ez59/999vd3bWphX2NiTj48P0la\n7ube08zLztl5YWFv8ubk4tvX1dvwa19faGlsam/56+z6dWxrb3RvbW1z/e/u9/3+9/Lv8fn+\n9+7t7/T59vR+bmpnaGtlTT07P0hZ7ujc0czKztlxYF9s8+nk4tzW1dvzal1faWttanP76ur9\ncWprc3h0bW539Ovt+Pz48u3u8/j18Pf6+v378/h3aWVjZmxOPTo+RlXt5dzTzMrM1X5gXWr3\n5uLi3NjU1uVsXlpiZmhnZnb15+//bGhtdndubG/87uzx+Pv58e7u/Hz+8e/2+3z9+352bWlq\nbFpBODs/SWjx39jNyMrO42lbYXLv5+Tf29XU3P1lW15naWtndPbq6vlvZ2ttbmtmaHL58PX+\n/vjv7e3v9fnz6+3v8vj29n1nY2NnbltCODs/Smrx5NnOycnN4m1dYv7u5ubi29bU3v1jW19o\naGhlbvns6/hwaW13eHFqa3X16+/9fn/17+7z/P368O/z/H/29H9uZ2doalQ9OD1AT/3w3NbL\nycrR72RaY33t5+Pf2tPU3v1kW2BpZ2hkbvbr7n1tZmhvbmlnanXy7vP7fvv07+7x+P748vHw\n/Xh/fW9ramVrcVpAOTxAS2n64tnOycnP521cYnju6urj3dbV3fZoXmBmZWZian3v7/twaGtv\ncWxobHXz7O72+/j27+309vf39/n/dXt7//R5bWRpZ11KPDpBRlz37tfXyszM231mXm/56+vn\n39rW2+hyYGdpbG1pbHrv7vh0aWlscG1raW589vP5+Pfy7uvu8/T7+/n0+Pn5eW1qa2trblxC\nOz1ATV906NzQy8rO4H5kZnjv7u/n4NrY3e9uaGxtbWtmanrv7vV7b291c2xoaW19+Pj5/fvz\n7Ovs8/j8+/97dnd6c3FrZmRkaWFPQT5DRlZnft7czs3L1ODxb3j+7/by7uvm5ej8fnd2e3Zv\nbXB4fv95cG90d3VybGxvdn///v327+7u8fx6fnx7f3p0b25saGlrb2NLQENETFdg9OrY0cvM\n0tjm7/Xw9nhzb3vt5uTo7e/3+X9xa2ppaWxsbG1wenz+/nh1dnl8fH19/Pbx7/X2/P/9e3py\ncG5qa2xramlraF5VT09PVVphc//m3tjY2Nnb3N/i6vF/b2xtcXZ4fv337+vq7fH7enNwbmtr\nbG5weHl4e3t9//9/enl5dXZ4e3l4eXp6eXp6fn59fXRoYF9fXVthZWRqc3h+7+rj3t3c3d7h\n5ufq8fh9cm9ucHd+/Pj29vj5+f5/fnVycW1ubm9vdHz+9/Hw7uzr6+vu9Pn9f3l2d3BvcnFv\nY1xdW1hZX2FianR3/ezm4Nzb29vd4eXn7PH4e3Jxb3B5/fn29fj49/n8fXh0cG5ubW5wdXz7\n9vHv7u3t7u/1/X17dnN0cHJ0cm9iXV5cWVtiYWRtcnb36+Xf3Nzb3N7g5Ojs7/p9dnBwdv/6\n9/Lz9fTz9/z+eXJvbWxtbnB2e/348u7t7O3u7/T3+f95dXBvbnFzbmVdXVxZW19gY2xydfnt\n6d/c3Nvc3+Lm6Oru9Px7eHn++vj09fj6+fz+/Xt4dG5tbWxtc3d7/fz59PHv7+/z9vj7/Hp5\ndXFycnFybV9eX1tbX2Jiam9xfPbw6N/e3t3g4uXp6e3y+X14dnt++fby7/Lx8/n5/H53cW5r\na21tb3R2fP369/T09PL3+vr+fHl7dnZ2cm9pY15eXl5jaWtudHn78+zl4+Li5ejq6+3t8/n+\nfHp9+/n18fXy9fb5+fb7/XlycW9vb3Bxdnl6//759vX18/f3+37/e3h3dXV1dHZ4d29pZmVg\nYWVmaGxvcnv58ern5OLj5enr7+/z/P57eHz7+vTu7uzr7e3v8fb8e3RwbmxtbW5vb3B0eX79\n/Pz7+/37/nt9fHl5fHp6fXx1bmxnZGRlaGpsbnJ4fvbu6ubk5+jp7e7v8/P1+Pv49fPu7+/t\n7O/u7/X2+316dnBxcW9xcnBvcnN3ent8fnt7eXh3d3p3eHp4en79/vz/endxcG1ub29ub29y\ndv/58+/s7evt7uzt7+/x9PT08/Hv7e7t7e/v7/L2+f96dnJ0cnFwb25vcHB1d3V2d3d4eHh6\neXl9fHx+eXZ2e3V59/v38/Ty9fX09vf2+vx/fn14fH9/+/j38/Ly7u/y8vP0+Pb4+fj6+/j4\n+Pf4+fr6/n16dnZ1dHRzcXBxcnJ1dHV3eXl5en5+/v38/Pz6/vv3+/r5+/z7/v/+e3t7e3x6\ne3x7fX9+/v/8/Pv4+fj49fb48/X39vn5+/j3+Pv5+fr5/f1/fX55enl2dXV2cnNzcnJzdnh7\nd3h3eHx7fv78/fn6+vj5+Pj6/vz8fX58en18e3x9fn/+/n/+/X58ent7ff7+fn79/Pv39/b1\n+Pj5+vz9/X59e3p5d3h5eHp5eXh5eXl7fX59fX19fX9/fv5+fv9/+/z5+/n6+vr8+f37fXp9\nfv/+/Pv+/fv7/vz6+fx+e3Z7en39/vz/fH19/f38+/v9fn96enl8fHt9e3t7f359/H39/3t+\nfH/+f/9//v9+ff9+f/59f3t//P/+ff5+fv7/fv38/v5/fn9/fX59fnt3eXx8fn/8/Pz6+vr7\n/Pv8/fv7fv/+ff99fHt+/n/9/v7+//z8+vv5+33/fXt9fX3//v3+/fv++vr7+/z7+/3//n98\ne3p7e3p6eXp9fX/+//7+/Pv9//z//f9+/3p9e3l9e/99fn59fX1/fv7/fn18fH9/ff39/fv+\n/fv6+vv5+f36+3x8e3t9/v1+fn7/fn78+/37+/7//vz8+/n9fv98fn18/v/+/31+e3t9/v3+\n//9+eXl5eXx+fX7/fH3/fv77+/r3+fv+fX56enp8end5d3h9/Pn5+fn7/P37/Pz7/v39/n1/\n/n18fHt+fn/+/33//v///vz7+/76+vn6/Pn+/n18fXl6enx6fX19f3x+fn1//319///+fn1/\nf/z7+vf59/v+/f59ev7/fv59/v/++/v8////+/99/v3/ff3/fn/+/fz9fv79/fn9fn57fHt6\nfHx+fv5+fH39/v7+//7+/fz8+/z9//59fH56eXx7enh7e3p5fX5/ff/+//r6+fr8+fz7/Ht9\nenh4d3p8fHx8f35+//n6+vj6/P37/f7+/n///n5+fX5+fn3/fX79/v37+vr7/Pv7/vz8/359\nf/5//n5/fn19ent8eXt9fX/+f/7+/v7/ff//ff//fn//ff9///7//n3//v/+fn19fP/9//5+\nfv99fn5/fn5+fH19f//+/vz6+vj5+fr6/f38/v5+//7+/v78/P7+/P1/f35+/3x9fn//ff//\nfn//f/7///38/f77+vz6/fz+fv3/fX18fHx+fH17fv5//f39///+fXx9fn1/fn5/fP///v3/\nfn1+fHx9fH19/v7//P3/fH58fX16fHt7fX////79/Pr5+fn6+fj6+Pn9+37//n5+fHx6eXl6\ne3v+f/38/fz7+/r7/Pz//fz+/n///f36+/z+//5+fXx8fX16e318e359fn7/fn5+//x+f398\nfX5+fn5/f/39/P1+/v19/39+f319fX1+fHx8fH1+/319//7+/vz8+/z+/f3+/v7+/f3//vz8\n+/r7+/3//f7//39/fv3+fX99fHp9fXx+fnt9f31+/f7//n/+/n//fn5/f37//v/+f/9/fv5+\n/P5+/n19/n9+fH99fHx6fnt6/3/+///9/fz9/v7/f/v8/v9/f/79//5///3+/Pv9/f39//79\n/P3+/n/9/f//fHx8fHx8fH19fH1+fn58fn5//P37/f7+fX//fHx9e318ff9+fn1////8/H5+\nfXx9f/78/P3+//z+/fx9fX5+fv9+/37+/f/8/Pz5/Pj6/fv/el9e5Gjq4PDh/ur4//d5/nR3\neHR9fHd3dnh3e3t4/n99//57/v5+/n5+/f3+/vz7fP3+e/7/e31+fn79fH1+e3t+f37/fX79\n/X/6+/77/v37/f7+/X3//n19fn/+/f/++fv8+fn+bHLueO3y8On0+Pn8e/11dHh3c3B7b3lx\nfXh7/nb8e3z+/nb9fnj5eP99+fz69ff28PLv7fnv+Pr8/3b//HB+cndxent2e/V9/vT4+Pn+\n+3z6/fT8+/j8eHt6eH5u7Wbvbn5zfX1w+Pl27v1473159vxv6mzyenrya+9zeu9u+fNs6mzy\ndv70bO15cetr9Xf7eXf2aft+c/76/Xfy/2/oa/nybOtr62jscnnubvF193959nl57mXmbft7\n+nLzfHPwbe1t7G/6fPxv735r4F3eY+/3beVk5mv6e/dn6Wv/9mrpae77beZq73v9dfJ2b+1q\n+/tr72/6fnTxeXzoZeJu+Pl/en5+9Wnoa3noXt5c4GX17V7cXeRo62z39Xx57XB+62flY99d\n3mPvfm/qXtdP0Vfkb3zxYtlX1ljXWuP0Wc5LzE7WXO7xYN5a2VPQT9FY4Xlt4VzYVtlc313f\nZXzqYOJo7GXlbO//+HL0+HT572XeYudu+XzyaeZh6Wx07mPnZOlm5mLgYd9j31/fZ+9z7m59\n7l3dV9ZS0lTXUc5N0V3ja+ds73vy8WfbWdxb31veXuhk5V3cVtVV2l/lbe96/elf1VDOTc1P\n1VfbW+Vmfn1v7mnrbu9s6GXeXt1b3GDteHl972Piau99ceRe3Wb69GfkYN5kfepd2Vni/WHY\nUc5LzE3XZW7cU89U4fZi3VzZXeN2evX9b/n5au9tfn5t7GbjZOZp7G/19HH49Htx513eXdtZ\n329u5VzcW+Fo+/Vw8Pl37HT88v/uaeJi6216eP9r+298fXDrZOZ0/u1r7Grqavz9a2pQ5V37\n2XDO8t/e+t5l42D9cm96c/h48Pz39/xt/m5vaHNjc2V6aHpr92/tcO1173v+8W/vbOdk5XN+\n7XTncOX3f95s6Pj+8P/vee3/fvf5ePh0cv13cm9+cHl+dHb2e3rzfn72/3j6+nn1/Hz483j5\n7X3z8f787/r+8ff18vD86/f08fZ5/HhscWdkZGRiYWZhZ2dmamtwcHJ++/r17uzl5OPe3Nva\n2drZ2Nrd3N3f6/p+fHFpaGtvbnP9b09FPDtIOT5DRX3fzdC/vb6+x87T22hbVlBdZmr42M/L\nyMrLys/e7XlnZF9davju4uFNNj1FMzs5NUt37nzDv721vcjIyOpoVUJMV1JV99nNwcXKxcfP\n1+BpavZqYvro39LSajU4WC84OC9EW91Qxb2+s7rEysTlWlVARFNVUnrUzcDBy8rI0uTsa2Xz\n/HLl39bPztdCL046LUIuPlbV2+i1ybi7y9rd3EtYRkRUdnfzysrCv8jR0dN9bWheau/v79zW\n08/P3Ec0QjwvPDM8VerO67rDvbrKzezaVlBKQ05a8XvRysjBx8vU0N5rbl1eY3l89drZ1NPT\n/0I8Qjo3OzhFT/ra3sPIvr/GyNvXbl1PSU9UZm3m18/IycrNz9Xo/V9dXFxkZnn67eXj4P9V\nSUtHQkJES05c/n3o3dHPzsvQ19nf7nR6dm5++f597Onn3t3f4uHm7+7t9vXz+3378/TvclhP\nTkxGR0xMTFRdWF/24t/Uz9bV0tbf3t7u8ez4d//s7ujf3ubl4ujs5+318/n/fvf7b1dMTUtE\nQ0tMSFNdV13x3uDRzNHTz9Ld3t31e/pyZWz+d+/g4+Th3uXm4+3v9fp2b3Z5+nxdTUxOR0RL\nT0lOXllaeN3g2MzP1NLQ3OXe9W53bmVm/f/34uDj5d/k6OXs9H7+d21yd/30/F5NTU5IREpP\nSk1eWll23N3Yzc/V09Pb6OP2bXRtZ2j+8PDj4Obp5ebu6+/9end8cXP++e/s+1pMTU9HRUxP\nSk9eXF392tvYztHX1dXd6uP0cHd0bWr49PTl4+fs5+fx7/D8eHp4cG92eP719m5WTE5OSEZO\nUUxRYV5e+9vc2c/R1dTU2uPi8XZ1cGpmc3t88Ozt8ezo7u/2/Xx1e3hxdX369+/tfFxOT1FK\nR01RTE9fX1513drZz8/T1dPY4uXzbmtnZ2RqdXvw7evs7err7fH+dnN3d3J2en737erp7G1U\nTU9PR0VNTUxZYF9p38/U0s7Q09fd9G9zal5cXmn86efg2tja4+bq9XdoZGRmZmdz9+vm3tvZ\n2n1MSE9AOD1KT0VO6NvV1MvExcXR1tPmX1BbXU9NV2t4++DTztDY3N3raF5fXlVUXmlv/N/X\n1NLU1NXY4HlPQ0Y+NzdDSUNR+M/bzcTDwMnJz9X0VllVUk1PXmZq9dnP0dHP0999bGFbVFJW\nWlxi+t/a19DN0tbV2uT7UkFFQTg0QUw/TvbP3dHBxsDJyczU5lZdWk9MVFxdY3/b19LSzs/f\n8nhtWFJXV1dYZHvv39nQ0NLU1djm6vFeREBJPjM7U0JHX9DV5cPIw8jLzNfVXVpfWU1Pa1xl\nc+DZ2dDVz9ntf2xkUVVaWFhdeXns39jQ1dPU197p5/VxUEFESTsyQ1RASW3H6NnCx8HNx83R\n11liX1tJT3JaX2/c297R1tDb7fxsZlJVW1paW3r77ePZ0dbW1dXe6enrdVdDP0hBMzlWSEVP\nzMvpxcW/x8vJ185vVFhbVEVZbF9q+tPZ19LX0uP8ZmJgT1JZYl1f6+ji3tfT2NbZ3OTw831t\nXkY8Rks2NFBTTEncv93KycHBz8nj1t5VUE9pTkljdut05c/W0d3e3PRrVVtdUVNYbGxr7+Lb\n293Y2dvh7Oj0fHJtXkM7SE82Nk9bV0fawdHHzcPDzMn87NtfT0hbX0xWZt/d7NfVz9Pu7/x4\nXE1VW1pZWnzs6uXh1dXa3t/b5P13f/5tX0k6P1k8M0FZ6UxYw8jEyszBy8jUXH38YUxFWmpa\nXWjZ0tza3NbV9mddYWVST1hjdWVq6d7b4ebc297ofvXp8nNs+/NYPjtOTzg5RnDxT+bJx8LJ\ny8nOytZeXGBjV0dNa3Nvd+jT1NfY5+roc15UVl9ZVl5o++vp397c2N7m5+ru/XZ6e3B1X0M6\nQ1RAOT5W2m9o0cfDxcrLz9XQ3V1SVmJdTE5m8+bp6NvY2NnvaWprZVlQVmNqbG7439zc3d/f\n3+TueGx493traG1ZQTtHT0E9QVrd8/PRycbGyMnN2t3b+ldPU11cU1Zq6+Dh4d3a3ePya2Bg\nYl9ZWWN89O7p5N3c3N/p7vH8dHJvbWxra1hEPUNOSUBATe/b5N7PycbHy83U3+PncllPT1xm\nXFpo7Nzc3+Hh6fD8bF9aW19lYmJu9ubh5eTf4ujp8HZucH73cWBqb1NDPkVNSkVFUu3Z3NjN\nycjJy83T6Xp9dF5QTVRiZ2Rt9OLb29ze7np0bmddV1hgaWx49uvh3d7e4unu8f90eG9sa21v\nXks/P0lOS0ZGWODT1tXOysjJy87Y7Xl7dGRTTVNlc3Fxfeje3d7l+2xoaWphWlpid/Xu7Ong\n3dze5Oz5dXZ2cGxlZXJ7clRBPUJOT0pGTHnTz8/OzMnIycvQ5G5laWhaTU1Xafrv8und2trb\n53lkX2RnX1lbZn/q5uTj393c3uj1e3J0eXNvcnV1blhEPT9JTElGSmvWzs3LyMfHyszO3XJe\nXWFcUE1UYn/r6+Td3d3d5H1mXl5lYl1daPjk3+Pf3d3e4en2dmxrdn55dHJ4ZEs9PENMTEZF\nVN3OzcvJxsXIysrR7WRdYmdYTU9ZbOvo6d/e397f7m1fXGRrZmBjcund3t7d3t7e4+z5bmlv\n/vl+d3VqTT06QEpMR0NO6tDMycfFxMjJx8zfZ1lcY1lNTFJdfunk3d3h3dzj+WRbYWxoZGZt\n8OPg3dvc3d7f4ux3a295fntsbGhMOzg+SE1IQ0/r0cvGxMLDycnFy9tpV1tiWE5OUVhn+d/Z\n3ubf3N7sal9lZ2ZoanP68+fc29zd39/h7H5xa2ttam5zc15EOTtCSUxHSV7t2crDwMHJy8XG\nzd5pXV1VUFNSUFRc+dvb3d3c2t3q9XdmYGFoeXp49urf3d/i6PN8c21nX1tdXmFobm9XREBG\nTFJPT11pfN3Px8TJy8rKy9Dc5ndcV1hbW1hbaPvp4N7e5O729Pl3a2hscHV6fXp1dHp+dXFr\nZ2lmZmdmamhqbG1xcHJ5/fv69vT4enV3/vn28e7u8O/t6uns7/Dv8PDw8Pb+fn19e3Z3dG9w\ncHFydHZ6fXx8/vv8/X17e3h2d3d1dnh5eXl8fH1+fv7//vt///9+/v98fn59f31/fnt9/vz4\n+fv8+fr7/P/+/358e3p3enl6///8+vn39Pb39/z8/f77/P7+fn9/fH18e3h5fXx//n3++/n4\n9/n6+vv7+/5+eXh3e318fv37+fX3+Pn7+/1/fnt5eHd1e3x8fXp+f////v7+/P/8/X/7/Pz9\n//5+fnx8e3p5e3x9/3/8/fz8fH59fX57e3p+fv/9f/z9/fz9/X16enp6enl4eXh6fvz7/v34\n+fr6/X58e3x9fH19fXx9f39+ff///398//z8+/n4+fj8/Pz9//59e3x8fXt8fX77/fz5+vr5\n+Pr6/f78fnx8fH19fH9+ff5///z7+fv4+Pv4+vn7/X59enp8eHp5eX17e3t+/3x9ff9+fn1+\n/f77+fr7+/n6+/78fX3/eXx5eHh5e3t+en19f/7//P/++/78/v79/P7++/38/P5/f35+/n7/\n//////z8/P1//v5//n98fH1+//7+/fz6+ff4+vj9/P59fXt7e3t8eXl5e3x9/35//f/8+/z7\n+/z9/317e3h8fXt9e3x9fH1/ff/7/fz+/fz+/f///P/8/Pr7+/n8+v/9f3t+e3p6fHp7fXz+\nfn9+//3+/359fX19/n7//X7+f33+f3xdVuJuZ2dIZl7iztTJ0dXT4HpqZmNhb3748Pzn5eTe\n4env+3l+a2FiWlthYGdrbnJnZ3lsY2NvbGBwe3RvffT/9fHy7+ju6d/n6O3l5Ofn3Od55eT5\ndHzv++zpb3n4Y1/7bFx0cXH7fP57d+nsYfN5Xvx4fXtu5+r95d3ldfjxb3fp62rw5n159vFr\naP9sW2rreXTp6W/33vdn//JgeP1p9nh86/Ht++vqc+3uaGbuYV1uXOzy5dXh2un+/l9hZGBn\n+3Fo4f3t13ve23nk7+3raelkXO5ccuhp6O7u/m3qXGJzXW57amr9fn7s/vT89eZ06ut97XP+\n83Hs8XrjfP7fa3X2YP52b/F08vL86fT97vp9/+3xcvhsfv109n78efx4/fF67X3xeXl+afpp\naXJeZV9dXlxoY23/eujh3d3a2d3a3OHf3+bp4+jn4ujs5uj1+nJwZ2hmYWhlaGdpaGtsbnL+\n5eDiWklGOTxDQFh459XOx8nCwMjGzd/ra1pWWlhee+7d0s7P0NXn+29eWlxbXm/+7eDe4eHn\n9Pb5e319dHnz7/RPPz81NT89U+PbzcrFycS/y8nN63xpWVZdXl567OTUzs/Q1elxaVtXXl9n\n9uTc1tPT2uLoaHlubefs4d7bVTs8MS48PVLRxcbFv87Mx9bh32BQXF1e5tXd1tPh39ni9+5r\nW2RubOvd5N7a3t7b5n78bmVy9u/d2tvY20o0NiwsPEjdvra/v8Tc69V0XGpSTmXe3MjFz9vi\nXlpubGnv7Xjk3Orm5HRu+vby3d/u7PRw/eTh3Njc3/c7LzIpMUh5wra2xcbXY2TjWFphVVza\nzMvEyeRpXk9Zee7v3eLw4+J8e3pmafHl4tnc7fnxfPfh4eHe3eBQMjItKj5Xyrq0vs7XZVV2\n/FdrY2Dqy8nIyNhfW1RSa+jq5Nzo8OX1Zm1nZHXj4d/c5/L89/fo3uHi3+F9PS8yKzJS3L23\nt8/ZfFdZ5mpbb2X/1MfLy9VqU1hWZ+Hc4uDi/u/ub2hrZnDq3t/c5Pj4+fTw5+718efgTzM1\nLy1MdMS7uc3s+FRc8/hYeWj50MbLztpbT1VdcdbW29/mdHR6YF9pan/j4OPn8HH+9u3r6fd9\n7u/e3kUxNi0zYN++u73n7W1Wa+5iUndk28jEztZtTVBccN7P3N/oeWl4Zl1paXTr5Ozt9Hr4\n6ezr7f5v+/fz3uFONDYxMV//xb7C3ejnWe92XFJ3adfGydHfY01bYfLZ0d/f7GpxcGhhcWt8\n6Ov07vr96eju7v5tbnn58ODfTzQ3MjJjd8a+xNzl41jsa1lSeG7TxMvT5F9OX2Xu2dXh4exq\ndm9nZHVr/Or2/fb/++br8fF1a3R69+7k4W87NDgvRnjbvsPN7tZecf9ZU2P75cbK0N96UFxp\nd9zY3ObhbXNvZmVvcG/s/H/3/frm5e/t/mlud3vz6OXmVTY2NTJbdMu/xtbm21vvZFhVee7T\nxc3X719PZGrt2tvj5+xqeWplZG9ufux++/j37ebq8v9sZGpvefTr5uZKMzkyN3xwxMHH4N3l\nW+paVlXw7svG0N1vWVBwbeHb3ebl7mt9ZGRicWz+73J+fvns3+z5fmpobm/06evk3m05NDcv\nS/bYv8fR+9hhcm5VUmbh18LK1vdiUl369d3e4e3meG5pX15kdnLs+nB4+uzi3vB9bmZtefv2\n9O/r2/s5MTcuR+bVvsbOfdV/dnNZTl3c1MHH1mlbUlf/8+jk4Ovi7XFgXV1j7/Lye2lp/efk\n3+xzbnR1efxzevzr3tbZQi40MDjV2sLGzefg0XlrV0xO3c7Dw9JuVVlYdO/3+OHe3N9/X1hd\nX3vzfHRpbHzs6e7v+v73+Hx2bWr96+nj3Nt0Niw3MUjM18LNzd7Sz2BVT0llz8nCzN9eX2Nb\nZmBgedzW2uVtWl1kZW9oZm/+7+/xeXJ9fPf2dmtw//v07vfx6uzf2m01Kjc2SMLcyNHMzdfK\nUUlOS+vMx8nT2HLvflJRT2Hv09Dj9GpkaGdcWV5r+ezt/nNwb3ZxbnB49u7o7P5waXLs6+bn\n9+zfdzcpNT5Bw9vUzcm/5M5OQVdW3dfMztLH2+5gTU1Pb37o2ubm6vpeWFhVX2x1bnjx/ev7\naWJlbXD3+fHk4ejr7P5+dW94dW13+O/1UjswNk1HavT8yMe+3X1rT3dp/HHfy83L1vZlX19Q\nVVhh6uTm/vf/Z2NYWV1sdG3//ezu83lmcW5udfzv7OLq7+70/XZvb3B1eWx49u/oXUU1LlBN\nQ+dbw8e9y1fPZvtaVmhvyc/U19jX7nZTUl1lZ11mbu7oZ19da2lfZ2D+6u5+b/F1dndvdnf1\n//v88O306Oru+3ltYWhsbHV+cPfqdflhSUQ/O0RLTF/oy83KzdzY7XVeY/zw393W1dPX5/V3\nal9ZUk9eb2Jqden2+Xdjcm5kXmv3/PL47uvv/XL+fHRz+ezp5+7z83prZGVmY3J6a2/weW7v\nbVNPSzk/XEROaNPNzsPXzs7kZFzwaWz469zW1OHl3/BqXlxZWlxXWV9hbWdufXh9Z3Z2endv\n/P3t7+jm6er48/r7fXP99O/v9np3eWpmbWpicPpodnz/aXDxWE1USj9HUU1X9trYzcnS0NPh\nd3R+aG/26uXc2t/f4fBvZ15VT1BZWlxq+ujo6uzv93BnZ25ucvju6ufq7Ovvfnj+/Hl3d3Jx\neHR3bnD//WxfdXpobXPsd3NdV1g/QFVISVjo1tfJzsvJ0+P95m9iY2/08eLn29nf6Pf7YFlV\nUVBSX1pn7uzo7ODz8/hrbGx3cfvt7Ofl4+7s7fx7c3p0c3NubXl4bnF0/2hqdHFwbHZt8/1e\nWmdUQklVTU1e7t7VztHNy9Lk6OD7a2x7/vTt7eTe4fl0cV9XWFZXXWVpcevp7+nq8/f6eHN+\n/Xl98u7v6+ft8PT4eW1sZ2Zqbmhp/Xd0dHp6b3VkcXVpZXrlYF1ZRk9aSU1Z3/LrztHLzs/d\n39Xvdm3zcWl7cPXy9m5v+3RoYGhmaGloc/zz/Pru7fH5+n7//Hl99+/u7+3t7vL/d3FuaGls\nZmZtbGpuam12fWphen1ybG/27ed6cGlVXF1RV1j8c/Tf49XY1d7g2eTn/PN7dnhia2p0c2/6\n++zx8vp/93p6dXz7/fD17uzv9Pz3/n9+eXZ6fmxsb21pZWtsaWpmaHRoZm5udnX/d//3/vP2\n6/Du6e3p7n5hXmVdXFxhaG/19+3k3d7k3+Hi5u9+cXhvampudv/w9O/u6+3+8/v8/X14cf/8\nfHl2fvT/anFpY2xiY2lucXL8bXj093h0cW56e3Nwbvjt9vv98e7y8PP87e748P36+Ht6dHBz\nc3Rxbnd3eXR0env8+v388vD38vH08fb57/N+fvz7+P18/vh8cHd0enlzcn1/bnFwcv16bHdu\nf3pvcXP+cnt//Pj293zxevzxe/bzb3r3+/J0e/r//nv99Xp6/HH8fPz0/vH5eXt9c3t5dHV1\n/Hl9/257fHb/c/7z+vb/+fP2/vv4ffx+d//5eHV8em5973f/+Xt6+n51/Pt/9Hx6e/53c3t8\ne/j2fXj//H/8/Xb8/3v3/nP+8/5+/n9zf3p5enZ8+ez38e/6fvx5fvdxf/N1fX16//9+fX39\neP30d/Pye35//Hl+e/r9evl5/X1+fP31fff39373/3j7+PV4/fj3fPx7dP19enb7fX/6//R6\nc+98evl59/t//vv1/Pz3/f37ffv9eX59+Xl99n7+fv59e/14d/99/H99+vh/f/T1fPz0/fn5\n/3j1+XZ+ef75e3Z5fXh4e3P3eXX1dXr6+P58e333enl8efz493l+9X72+3z++v94fX55//z+\nfHn9e3P2e3b6fH7+fP72f2/9eXB8efl/d/f/+vp8+fr4+Pv19P57f/j9e3p8+H77/Xr3e3b+\nffv+fvV++/D6+fz4/nf3eHB9ePd8dnz98nd7/H71+nv+9fb8e/Z///R2e/d7e3509/R6/f37\n+/3y/Xj/fvh7f3h8+H59d/h3ffp2fXZ8+f96+fty/Pl8eXr5+fv7e/h5f/Z2e3j9/nR3b/n5\nbH74eHz39Hf283P7+Xt8ev97ffx+evR+dfZ7ePp8/fr8/XV9d3x9c318enp4/np79vr79P72\n93/v//74/v799vh/d/39eXp2c3l7fXb+9Pr5/n78+vn7/P99+fV/cfTydHr6/X5y8fd6+3Z/\n9Hl++P35efv8ffz8+nV88nNz+39+eXx/fn93f3n89/31+/X+9/d5eHx6c/92cXx7/W12/272\n/nV++fP7//v5e/h/+/j3+Pvvenr29H11e/pvcXFreHt8bn57dft2ff38/n/z/fru8vn4/fb0\ne/37fPz7ff7/cnhzdXVwe3L+e/98eX5u//h4fv35+H737vr8/fr+/H188nx+9vd8ePN6eX50\ndXV3cHR4cnt2ePt4+/t5/fLv+e/w/fvwfnp+f/h5/Pp9ff14aXP8cnp7d3dvfnZvfvZ/e+7/\n/Pb7+Pj2eff4e/T7/Hx3+f72f3f5f3t5eHNueG9we2xz/Xx2/vPz9/n27u/5ffj4+fz28nx7\nfHx7eHR0d3Jzd3Rzfnh5/Hz5/fby+u7v/vj6fvh3+PZu9Pp7+X18c//7+/h6ev70+HL5ePr6\nb3t+/Ppy+/lz+fj+9Pv88vP1e+76bfv9dnV+dP11e/9wf3t8cXj4ev///nz38nX08Hx79PV8\n/vz8d/98cnp9fG53/nd7fnZ28/h8+vx7fPL5dfr0eX7/ePP4/Xd09vd3dn77ef5+cXp9d/13\nfHd+9PX2/fB7//59e3v5dn71+P/5eX59+ff693jz+3J4fnJ4+Xx88Ph5+fb79fX+/fn3/Hl3\n/P5y8/Nvf/h4f3p5+3X5fHDye//8f33+8f/29/b2evv3/vT+efL/e/h+fH1+enZ8fHf+/nt7\n/f57+XR9+3v59PV/7/B79fb1/v36fvt5fn54+nl4/3V193x6//13fPp5//n8fvH1+fr29n32\n/Xt+e358/H16fvx3d/z7fHj5dX1+cfp++W95/X39fXv//nz2/Hz99fd89nf98XR/ef18d312\nfX10ff33/nz5dnj5fHr8fnP9/Xb8fPv4f3z69ft9c///fvj9/nb78HlzeP99fXlx/HhyeHt4\nev5+fPv2fPL2+vft8H35//n6eP/+fHT4+X/2cPXtb3Z79HJ8/Hj5d318/Pn88v7+9fX5fv33\ne31+d3h6/H94//n2/Pb6/vH+fv37e3V3fnd7f3r+/vx8/Pn/+fv0+Pvufv3z/f54+P99+n7/\n/nv/cX77cfp8b332enT7+Hp3f3J8dXV+fP57/v3++vh/+3/8+Hv5/np4dXd0cnXz9vXz8fj5\n6vj9/397cnt8//97/Pn8/XlvbnN3b212eXd/eXz5/vf+e/3+/f738/Xz+P/+e3p9fX17dnz/\ne3h3fXx+/vz8//78//309vf08/f3+PP0+394eHt5e317/P18/nxze3l0d3dzb3Bxb3Fzen77\n9fXy8u/y8vDz9PHz8+7v8O7u7O7u7u/w8/r8/n3+/X39fHVzcnNxbWptb3Nzdnd+8+/n6GtR\nSEtPTVZXW3Tazs/MzM/Pz9bseW5jZmxqY3Dv6+Lj6vf9fG5mX11eZnF6++/p5OHi7PT2/3p2\ncm969fLt6+rp6Ojs7+/8eHp+eXl9e/x/+nZiVkk/Rk1LXmH138zGzcrP2d7i819jaGr24+Po\n29nf6PJmWl5dWVxiZ3bl4ejj5u71+XNmbHBv/u/u6uDh6Ovs8fXzfnZ7eXZ9+fz//Hp0eHxo\nVUw/QU5MW2b738/Gzc7T4Ofs8mdkevzk3Nvh3t7t9nFcWV1eX2hwb/Pl5err83z+em1rdnn+\n7O3t6ebr7vF+/e/w+Pr4/vv0fW95/3x2dW5uaFdPQj9OTVt39t7Tx83Q0+bu7/Btavf54Nna\n3+Hi/f9tW1deYmJ3eHD16e7893ZqfHxvc/r/9ubq8O3t+fXu+frv9nz59HZ1e3lzdW1kbXRv\ncHNdVUxBTFFSb3Ti3M3M1NLe7O3u/XDu7uXb3ODl5Pxvbl1WXmRicX50/ervfPt7bHp/cnf6\n+vTp6u7u7vX17/f9+Pf89vF9cnV2dX56amdubW5+Z1ZVSUJSUFh0+N/Zy9HY1ufz7fBxdOvu\n39rf5eXm+3dqXlldZ2Vue3L87+95enlteX52ePn09Ofq9PLx9Prx+v/z9/r39n59/3j8fG9t\nbGxrbWxfVU9DSldPbnDr3tDN29bg8eju+3Lt7OTb4OTm4O3y+WZfZF9bYmhjePl9/Pb+cfx7\nbXx9//bu9fTr8vHu8fHu6e7w9H14enlucndweHNpbHJvb3BeVFRISVZQYXXo3dTN2tjc6+31\n/W7y6evg4OTl3+j7/WxgY2JZXWtmdvb8++7ueH16b3V7eHf38/Xr6e7v7PT57/Hx7vt7/n53\ne3JqdnFrbmpqbnNiVlZMSVdTWGr339rO2dvX4Obv9HD66PLr5uXm3+P38/xvYl9eVl5oY259\n+fvr7nV/enJwdnF08PT48e3u7Oz39vLz8vD6d396dHNwc3N6cmlsam1ta19WWk5NWlJdavfk\n3dHb19ne5PDvdff2+/Lu5eni5u3wc21pXlxeaGVqfHvv7O37+vJ7e3h2df38fPbv6+/u9Pv0\n+n98f3p99Xt1+PJ5ev9wa2hvZWdpW1pUT1hXWmFt6ejZ29rX2tzo5u7x9Xj9/ezy7+35+Pd0\nZmRnaGJpanT8+/v46/D0+fv+fX1vfvv8/vjx8e33+fx3eHJwbnR5dHZzbmxubmZqeXhuZWJW\nVGBSV11ufvfd49jW2d7f2+zs9f55e3xt/Ph8evZ+bXxzamt0bW19eXr37fjz6/L48/Z4fft6\nd/r3//j1+fn2f3l6dHFrbm5obGxtbnR1c/38/XVsXVtnV1lcZmtu6+7e29zd3djg5ent8357\nb3Jvb3Fv+Xt8/vb5fvf//P7//3z3+vz48fb18fXy9fb8/398d3BxbW9ra2xubWtwb25xcG90\nfXF3+vX2/PNxaXVtYWNsbmZ2ff3t6eno397k5OPn7vd7d25saWtzdHt+8O/u7O7s8PH19/p9\nfHh7dXFyd3p7/Xh4eHB0cnFyb25sb3htb3l+en/4+/P39Pr37/Pz9vH19/j7e359cnFzc25w\nc292e3z99fDw7Ovs6+vr7u/x9/f59vb8/31+fHx5d359eH90c35ub25rcW9vd3t9fnx+9Px6\n8PV9+vX+fP79/3t9+33/+39+/P56/Pb8+/r7+PT2/f75/Xp3fX91d3x7fHp5/Pb0+Pfu7/f0\n9fp++/78/Hp4ef58e/n0fX7+/X15eXd+dW93en1xf3539X16+v5+/fT3efz6fv77/3X/fHT4\nfm399Xh8+v3+//r5fv97enx9eHB9e3R8fH17f3/9/Pr5evv8eP31+Hn79Hb7+Pp/9Ppw9/V+\nd/f2+/1+9PT0+/zy/f/zfvx/dvx9dn59fHl3eXJ6eW96cXV4b3d1cXp5evr69/j89vf1/X7u\n+vrt8vf0+Pb5/P37+Xd7fX75ff9//nX+9W/+dHV/b3Jzc3dzeHT2eGnw/Hl693v78Hbs9vnz\n9Oz89H/8+P55fvxseHxtfnJ1ffp1cfN6fH529f79dX78bvp8+/R3/X3ub/vtdPf0/njven/0\ncvr8b/Z8ee9ufP1ycHx+cfV29/f++f/6+nd7+Hd2eX53//d09/J6fvP8dPj0e3v8enR5f213\nd3Bycntwefh5ePX8d+/rcPPoffny7XR17nP47n707O/+7ux69u59+/fyevT7dvZ0+3N0+nr2\n+vb9+uz3evT3bnVvXFteU1ZdVl1pZWn9/Hnq5ene2Nze1dnh2t3g4N/p8ef1d/tza2loZWNn\nYmRnY2ZoaGNrbWh4d3r++vD56O7v6vXt+fH6fO34/PvyeXz0b/z+evz+/3d7dnR1enpv/n9y\nff//f3x7ef5+efv6e3n8e3V8e3z9fH37/Hz78/z78vf5/PPu8u/17+z38+/y+vj6fH39fP78\neHL+f27993Z97/7++W1tYm1cU2tTWVxZYl1wbO/k7Nna2NfU1N3b3u37/mxfZ11cYl5jaHN6\n8ejq3t7f3N3f4eHt7e58fXJub25ubXl3cv35/e/zcGtiV2ZNTGRIUlRWXVrycd7c3MzSzs3N\nz9bQ3d/o/39kX1pbVFRVUVpUXGNnfHvl6eHc39vi3eHl5Ozp+PHy+fT67vj27vL1+PL9en5z\nbmpfY15OWl5JVlxOWVtoY3rr5tfd0s7Sz8/O19bX3+b49mpfZFxXWlhZW11iZmx59+/q4+Di\n4N/j5efr7/j8fnhycnNvcnR0enR6fHN2dnZpa2xaX2pVXGdZXmNvZ3nu7+Ln29nb2NjX3Nvb\n4+Xs7/5rbG9hXmpgXmNsamn7fv307uPw5+Pt6uvv8/p9fndzdnNvcndv/W958mn1+2nzbHt7\na/9xbXlubnhubXxwcnh9fXj19fTt7unr5+Tn5+jn7+/v9/t1+3dsdnRvb3l1eHz9+3v39n73\n/P/9/3h9/W74dXT5Z+xvc+xu/f/0df3tbvjwcPP6efj4eX31b3Z+cHB1cnJ1eX579/jz7uzp\n6uro6uju7O339/l9fXlv/GpzfWX6cWz9cnb5dvx7+/h8+Pr8d+xu+PJv8/79fPZ//P19+XXz\nc3r8bXtxdXR2cXZ4c31+/vvz9e/u8Ovu5+7p6ffo9vX2fn54enhzcntucX5seHd0/3T4/3fv\nb/J/dfFv9HRu62T28mfseP5//fpz7mz9em18aH1pbnFub3N4dn/79/Ts6+zp5ujo5ufs6+z3\n8vl+/XZ9dHl6cHl2dnV/eHd+/vx7+Hz59nLrbvv1evv9+//x9f32d3heZW5TXmNbXV99aHzs\n6d/f19bX1djW3OHk9HtqZl9bW1pcW19nann26+Xf3t7c39/m6+z7+3t5f3r+9vfu7ujv6eTy\n7e/3eFtZVkROTD5OS0tSYOx5z87KxMfCxcfM0db0b19XUE5PTk9TWV5t+Xzc3ePa29zq5Ox7\nfW15cXTz7OXk3Nrc3d7e5O3u8XV6dmhmTERGQUg3QFtAVGzWz86/wL2/xsHJ2PlxXk1LS01P\nU1/63trSzdDV3exxWlhPS1FRUl58693Uz8/O0tfa5/dzaGRnbHT/6tzd2dPY2eBdR0Q7PD0w\nQktGYtzGwLy7u7m+ztLhW0pGRUVIS1bu1tLKw8PHzdXoZlFIR0VDRE1WXvPe0MvNzs3Q3/lx\nY1xZWV5tfvLh2dna3N/k7nJma2tobfft5d7f2t1lU1JEOkZDOE5UV93MysO7v8bDyeX2Zk9O\nUExOYXn12c7Oy8vU3eVrVE9NSktOUVx76t3U0dTZ3fluXVVYUldeafjk2tTPz9LW2ub9bWNc\nXFxcYm987ebh4d3e4eXn5OLeXEtRPz5ROz5cVW7fzc3CvcfKxc3h8mZSV1hMT2BrduDb2c7O\n2d7e9mReVE5TVFFWZHTx4N3a1tXc4+j7bmNcWFtdWlpeanv09ujd29ze4eDh7Px+fX17c3N+\n9/r8//r0+X11dHZya2hra2xsam91dHp+/fDs+V1e+1xcX1ldcXpnf+Tj39ze39vY4OTj6+7u\nf21uc2tpaWZjZ2tkanNwdvfw9Ozr7ezr8PHt8Pr39//+/3x2enp2e3t9ff/5d250b2lmZF9e\nYl9eYWltdPz17uXf397d3d3c3uPl6e/4/3VubmxpaGlpa2xsbG9wdHN5eXj9+fn49Pf19Pn5\n+/r5fnx6enp7eHZ9e//7+fT08/Py9Pj0+Pr8//5/fX//e33/fn5+fn16d3d0dXNzdHR1d3p6\ne378+/38+vn5+Pj4/Pr7/v3+e3x9e35+fn/+/v34+vn29vPz9fT09vj5+/r+fX55enp5eHh4\nd3p7eXt+f/36/vt9dXl3cGhtbmhua2hrb3BvfPz77OTj4eDf4+Tm6+zt8Pn9fnZ3cm1rbW5t\nb3Bvdn17e/7+//39fHv9/H1+fn59f/59/fn7+Pb59/Lz9PTz9fX4/Pv5/nt8fXx4eHh2d3h1\nc3Z0dHl7en9+f/z7/Pr8+/r8+/7+/v9+f/78/Pv4+fb4+vr+/P58e3l4eXl7//7+/fv7+Pj7\n+/58fX57e3t7e3x+fX//f39+/3x9e3p+e359ff1+/vz9/f//fn18enp6eHd9e3p9fX7++P1f\nWOVnbdr+3Nvv6+LnffJ+bff6a3DydXX0d3Pw/HT99HZ7fW53/XZzeXp4+fd1/vD59/Dz7/T7\ncf5/amtnZGhraWt3/vzz7ezo5Ojp6erv8fp9+v16en5++vf99vH08/fz9Pf6//18fnl1enh9\ndH5/efR2/H97/Xf2e336eH3+fX7wfW97Zl1iY1tgZGRv9fbw39/f29vd3N3k6OjzfntlX2hh\nX2lqbf3z+Ozk6Ofm6ujn7vPx+P72eXd5/nJ2d3Fvb3NoanNxaHl7cnl4/m/7e/7y8fH4/Hxq\nZ2tgZGRmbHz7+Ofh4d3c3d3c4+3yeW9sZmdtdHn48uvm5uXp5uft8fx5c3ZvcGxpbXVqeXZp\neG9ta3BsaHVwbX15b/z4//bu+e3p6uvq5+3q9XFvfG5tbGtufH16+fDs6Onv7u3q7u/v7Ovv\n8e7u6+7y7frw9nd3eHV1bHNubW5vaW5ubm14Z297bf92fW399Xrv9O7y6/Pr6vXu+u/08PX9\n93198Xd9+W77enhy/nN1/3J3+v/+/PP7/Ot37fT49+998PL4ffnyc/F59nbwdnr2cP12fm7+\nbntzdHd3e3D0ae17/e/57Hrp/fntdO39/nx7/HD2eH979XL1e/72+vr+93nweext8Hl79HP5\ncO9v8Hb9/P119Xz873ToZux8c+53eedo7vBf2FjbbHriY+Bsf+tt/vpm9Gxt6GPlav7rbet7\n/e948/Bj3V/s82bhX+VxbetteO1t8uhl3Gns72zfY+h2dff1aONuadxa5mh/cPZu7GTcYvD4\n/nnr+mzeY+Jp5F3eYeNf3F/j+HbgbN9h3Wt4cudV2Vr3bmjeT81V5OVh22beaez5/2/ma3Ti\nWd5m8vlq3Vzh/2jke/v473T693z/+vZqdvhg8fxr6nT0ePfyb+/0bud37Hbrdu57fXP0d/55\n/3fy/e1w7X/5/vt8dvBw9XD4cfh/fvp59HP5cfZ7evRw7HHvcX/1ee54fXn7d/55c3r79//t\n+PHu7/J07nR3/Hd5/fV7+/f+dff+cf70efj1d330cXL8dnnyfXbu8fr29H388f57/Xt8+f9v\n/vp8+/d7/O7+e3p6c/v+fPv5+fn5dnd6e258dW5++3t6/XF9+Xp2/n54/v53dH92c3x/e/z6\nffr0+fjv8fPw7+zs6uvt7fD4/Xh8fn37/n58eG95enlxcXRzcXlwb3BzcXv99Pjs4eHY22hN\nU01LUk5PYN7e1M7Qz83Q4Oj8bGtuYGN2+uzh4Ojm63RhYFtaX2Nme+jj3dzd39/m9n56cnV9\nff3u6+vq7Pp5fGtnamhoa3z89Onp7m1lSkJUSE9cXnncyNLLzM/W1ONnbWZjZn5v/N7d3tzf\n7+3+aF5fXFxhX2FnePXt7O3t7O33enr/+u3p5uPi4uPq8Pb3+n52cnZ2cm9zdXx+d3d2+3p8\nbllaVkxMV1Rbe+/l2M7W1NTc5ujyanR/e/no5uje3+bs8nlral9cW1tfYHJ+8ejj3+nm7vv+\nfHx+8e/r6Ofq6+3z+n5+cnRub3V4cW9++fl3/v/78XZfX1BCT1ZMYGjn4szN2s7R1+vna152\nbmpq6+zj2+Hq6eN/a2hgXmJlXmBpbGpsenb+7PHv7efu7Ont6ufl6eXn7vT7fXn7/X73+fx4\ndXdsb3dua3h1evD+XVhiUUVLWU9ffuzfzsnVz8/U4ur2YW5vamV96uzh4ubq5+9taGZgXllY\nWltlcnrz5t7f4eTq7O/8d/nt7Ovo5ufp7fD2/v5yb21pbGlsbnf/ePt4f/13XVhjT0VMX09Z\nauPe1MvWzszO4e7fdm1laGNu8Xf56N3l6+Xx/mxcV1VYWVddd+7n4t3a2t7o7fLy/3R89vP1\n8Ovm6e3v7vpqaWpqZl5kbnVxbnrv63toZHVmT0ZcZ05RYNv33tnVzc7Q49XV5Wts7mtiYW9z\nffx79fL6aWd2a19fbXRtfPTq5uLk4t/i6vDq73tveXp1b2/+9ntte/h6amh6cmhreXlxdnt6\ndXl6c3JdVnFkVVl172J/4djh29XW2Nrb4d/m9nf//GpiaW1nZmhzeHp8+Ozt7e/o5+vv7Ory\n9PLy+/36/X9+eXZ0fHFscW5ubW9vanZzbnJ3/HF2+Pj9/fL08fP07u71d3/ufW5z7/5revDy\nevfq7PXs6Ort7u/0+vv9d3h8fHl6fv96//j6+/n5/v3+fXl5fXl2enp6eH39e/z8/f7//H58\n/f1/fn/8eXz9fnp+/H3++/v5/fz69vz69vn7f/n8fvp+fv9+/f/8f//+/ft+e3p7en14fX1+\n///5//n8/fz++P/+/319en19fX9+f3t9fX/9fP58fXx5e3Z8e3z+//v7+vj4+/389//++vx9\n/f/+fnl9fnx9/fz//Pn9/fj6fvv9/H59fnz8eXz+fHt9/f/+fff5f/r29v5/9vp7/33+fXn+\n/vx8fH99dnx6+3h7/nx/ef36fHz5//96/n1+f3z8e/f+//j//H3+/v7+e3x+fXf9fXx//3v+\n+HT5/X34evn2ePx69n57+Hv4/372//379/x99n1++3/9e31+dPl9fnr59nL8+Pp19vt0+f12\nXu3iY33k8Xjz5/h05/Z3//t4b/h3b/X5eHvv9XH2+nt1e/5zdnj9fHz+9Pr7+u929fP9fvnz\nc3p99G9893/9/f79+n5+/Ht7/nr/ef19+fx++vP9fPZ6f3R+/nZ8/n50eH/7dHv7/XZ++nN6\n/Hxzfvt8//z39n/48//6+vl3e/9yfnp0fvt9dvT5cX30+3H+73h4/f12c/l9dHb5/XL4fnX0\n+XT57314+PVtfH92dn78d312+v17fvv1+vt9+f52c/z9cnT8+Xr++/P0+H3/9f16d3v/fXFv\nf/t2d/j78/f0/Pb5eHV5/Hj5cnh2/Xhudnb8eH15+vt5cn1/a3Ftamhsam79+vj36unq7Ojl\n5ejo5+nn7e3s7vD7+Pp9fXRyem5nbWxqcG17cWx6+XZ08mxufnNzc93l3OZdTFxlR0hXfmb9\n39nNy9Dc0dDmbXp/aWRlan7s8fPl4/VuY2VkW1lec/v87ePd3N/p6unxdnT4/P347uvq6u3u\n9Xdtb2VfZm5qeH/77Ofzd/7r+FlaWURGZEpPZt7d28jUzc3Q7u/ibWZkdWzx6u/m3d7v8Ph1\nY19YU1pcXWX+6uPe4uXo6ft0ff/08uvp5t/l7fHp73VsbGloal5jbX/9/fF98vT+bfj4YF1i\nV0FMfUxdbNzb0Mzk0NDWb/3xcH90fXve3ubr4ub5fWdmX19aVldgbm56697f4er57+7/bn7r\n5+fn5+Xn8Xv6935tbWxrb2ppb/h0d+/0a37vbXf8XV12YU1Ba21Q9G7X2Mvh99Db7mXvdenh\n9/Xf2e3u8vr9/Gdhc3NnXmZgW2ZtYXjs8Pnq6/zr7v325erw6enu8/d2/fD8cn55b3Jsa29z\nbHR7dv5vdvT+b2hlYmRdTUVxblLy+NbVzunu0ON9bPL+5uZ37dzf/PH1/fZ4ZWv5eG5tbGZt\nZFNa8Gdo/e/m5ets7Ob7dfnq6uX19OTj9fvv8/V7aGRva2Ft9Xt4eXT9/WZg+nxtX2B2Z15L\nVPFcam3n2Nfd/tnb7nV68u3ofPbf4O/38PL0dmhufW9sb3N6amRgYVlld1719u3s6ez34fn7\n7enu7On56+3+fPn4enp4bnJ1a21zcnRudXxxfWlv/nd0aWVobl5PWPVaaXvw2tzf7tXe8fL1\n7vPyb+7h8fju6/L0dnP3e2tueHZyZ2BsaF5oa299/Pvu5+/z7O3z7+/x6ejv7Ovt9Pr+eH11\nbnN1bmxwcWxs+2t/+mv0e3Jsc3pra2VvbV5XbG5fd3To4ebr3tzr7e3r7fH+9+nv+e/r7vn9\neH18a2ttZ2FlaGdvbnj39Pj47vTz+Pvz7/f67vH28vP08fb69/p/fn52eHdtc29sbG5ubndv\ncnt1d3Z5df76c/t/d2dfb2Vga2718O/t4eHs6Ons7/X+9fN//PTx9PX4+fp6bm5xZmxsand1\nen32+/zy9/X1+vn3/f/7/Pr5+ff19v36+X16eHV0c21xb290bnd9+3x4/P92dHN5eXF4/Pty\neXViaG5haHNx/vPx7uLo7eXq7u/1/fn6ef/4/f78+v/9fnJ+e29ydXV4enV6+n189vf7+Pn8\n+ft8/vx9/3/+9/f2+Pn9ff19d3h4c3N1cXl3dHx6/Xh7fXT7eHv7//x1fHVna2llbG54/Pjz\n7+js6+nq6ezt8fX3fv99end2fXd4dnf/c3Z2en51fXn9+nv6+fb6/Pf9+fv//X/9fXl5eX18\nfv79/Hx7/nx6eXp9e3p3eXx4enh4enZ+en1/fPr+//z8+3x/e3Z8dnV8fvz++fXz8vTx8PPy\n9fT09vX09PX19vj3+/r7/v96fXx2eHZ3eHh6e3p7fHx8e3x7fXx6/v9///76+/n5+fn6+f39\n/Hx+f319e3x6en7/fvv8/v5+/3t8fXv+f3///Pn49/L09PH08/f4+Pr5/P39/37//n7+/31/\n/3///n9+fX18e3x8fHt6enx9fv/9/X/8+/35+vr6/P5//35+fX59eH5+fH//f37+/X7+fX/9\nfvv+/fr6+f77/Pv7/Pn//vr7/f36/P38f/7+fn5//fv7+Pj5+vx+end3d3Z0dXV2dnN2dXV3\neXt5e3x8fHt9fn7//v38/v79/f7/f/79/Pz9/f7+/v79fn5/e3p7enp7ent9e31+/3/+/v39\n//78/f78+/39/fv7//v8fv3+/31+fXx+fXx+fHp9e3d3eHZ2eHd3eXh4e318/Pf4+ff2+fby\n9/X0+fj7//5+fXl7eXZ6e35//37/+/79/P38/f3+//78/f38//7//v1//fz9/vz9//38/n9/\n/39/fXx7eXp5eXl2d3p5e319f/99f3/+fv/8///8/v37//7+//19/35+/3z/fv//fnx9/379\nfnx+enx8fH16e358fX///Pv+/vz9fv///399/v1+ff9+fH57fHx7e379/vz8/Pv9+/38+/v6\n/f3+/n5+f3x+fnt9fXz+/3///v7++/v79/j5+vv5f39+en17e3x8fn7+///+fv9+f37/fXx+\nfX59/n1/fXt8e3x7fH1+/v78/Pv7+vn6/Pv6/f39//9+fv////1//v9+fn1+//3+f/3+//78\n/f/9/n7+/n7//v7+/v7+/35+/359fn5/fXx9fHx9fHz/fHt9fn57ff99fX/8+/38/fv8+/n6\n/Pn7/Pr9fn58en58e3t8ent8fH17fH5//n//fn5+//98/X9//n7+fv3//vv7+v36/X5+fH14\neXh5eXl5enp+f/38+vv7+/z8/Pz9/v77+/37/vv7/n99f319enp4d3x7fHt9/f7+fn//fv/8\n/v7/fP/9f/7///99f/9+f31+fXx8e339////f/9//fx//37///79/fv7+ff6/Pz9/f1//v3/\n/31/fnx+eHt+e33//f/6+/r6/Pj7/f3/fv98fn58fn19f31+f/9+//3/f33/fH1/e/9+ff1+\n/398fn58ff99fH5+fX5+ff7+f/78/fz8/f3//357fHl8fXx9fHx7fX/+/Pz8/vz8/fz//P3+\n//79/P39+/7//f/+/v7//f5+/n59fX59f31//n7+/f39+/r7/P9//39+ff/+fv/+/n//fHx7\ne316ent7f35+fv79/vz8+/z++39+fHt9e3p7fX59f33//f79/f7/fn98fH17f3x9fXx/f//9\n+/78/P37/P3+/P5+/n3//378/f39/f19f319fn79/3//fv9+//7+/Pz7+vr9///9fnx8enx9\ne379/v79///9fn5+fHp8fH1/fn5//35+/35+/39//n59fXx8e3x8fH5+f/z+//38/f7//fv+\n/X59/3x+e3t8eXx7e3x7fn//ff37+/z8/P35+/z5+vn6/Pr8/v1/e3x7e3t7eXp7eXt8fP9/\n/////P79/f////9//f1///79f35/fH19e3t8fv97ff5+/f59fn18f35+/379/n78//78/fv9\n/f79/Pz9/v5+///+/n9+f35+//9+/378+/77+/z9/v39/v5/f/99e3x+fXt9fXx8fn9+f/5/\n//v8+/v+/v3//n19e3h3eXp5enp9fX7+/f39/f39+/z+///+fv9+fH1+fXx+fXz/fv7/fX18\nf35//P1//v59/35/fn9/fn57enl9e3x///v+/Pv++/z9/Pz9+/z+/v3+f39///3+/v79/n7+\n+/z8+/z+f399fX57fn19/f/9//77/fr6/P19fn99f3x9ff5//vz+//9+fv99fX58fn57fH7/\nfX//f/7+/f5+fX5+fH1+fX58fX1+/n5///7+/f7+fX3/fnt9/f7+//9+fX5///39/P37/P36\n/P3+/Pv9/P79f//9fnt9fHt+/n7//vz7+/v7/X98fH17fH57f359/n7+/v78/Pz+/fz8/f99\ne3t4e3t3eX16fP5///5+fv7+//z+//79/n57/318fnx8f35+/3//f/9/fX5+/n9+fn5+f/9+\nf31+fHx9f//+//z+/v3+/f36/Pv6/Pv8/Pz+/v7/fXx9e3x/f//+/vz9/vz8/P1+/P7+/v7+\n/vt//v5+f////f5//v9//f1/f/7+/P1+/Xx7fX59fn99fH17fP5+fv5+/399/X79/f79fn18\nfXx8fn7+/35+/v97fX59/X58/f3//358e3t9fnx+/31+///+fn//f35+/X5+/31+//5+fv59\nfv9/fn5+fX1+//7//vz7/vv7/Pn9/Px//398fHt9fnx+f/3///39+vv8+/37/fz6/vv8fn9+\nfX59fH17e3t7fnt8/37+fv38//1+f397fnt6fHx9fP/+/v5+//39/Pz6+/z6fv98enp4enh5\neHh7fHz+/f78/Pz8+/z7+v38+v3+/fz+fv59f/1//v9//n/+/3////9+//7//v78/vz9/f5+\n/31+fv9/fn99fn59/31//X39/379fX9/fH19ent8e319fn5+/f79/P/8/v///n59fX19fHx9\ne3l6fH7//fv7+vv8+/n9+vv+/X5/fn1+fHz/fv7/ff3//v79/P79/Pv7/P37/f/9fXt8e3x8\nfH18fX18fH58e/5///z8/f38/vz9f///fnx/fn5+fX58f318fn59//1+ff9//359fX19fH19\nfnx+/P79+fv6+fr5+vz7/P39f/9+fn19fHx8en1+fv7+/f/++/r7+vz++/v8/vz9//1/f398\n/n7/fnx+fnx7/n59fn3+f319fHx8fnx6fXt8/v///P/7+vv5+vr6+f38+v3+f359fXx+/359\n//9+/f/9/v3+/v99f//+//3+//7//P/9/P78+/z9+39+/n5+e35/fHx8fnl8fX19e//+/v37\n/v/+//5+/n9+/3p9f319fH18fH1+fn79ff38fv3//3/+/358fX16/318fX///v38+/z6/P39\n/v7+/v7+fn5/f/7++/59/X7+/n/9/v/+f3//f/1//fx//n7+/vr9/fz/f39+/39+fn9//3x+\nfn5///3+/v7//n98fH17en5+e39+fH5+///9/P78/f/+f359fHt6ent8fHx7fX58fn///fz7\n+fn7+Pr9/P79fnx8enh5eXZ2d3h7fv/++/z7/P/8/v79/358fHp7fn//f/7+/Pz//n1+fn39\nf/5+f318/3x9fP5+e318fv/+/v78/f3//f39+fv7/P7//fz9/f7+/3/9/n7/fn9/f/7//n5/\n/P3//P9+/v/+fv7+/f39/v37f/78fv//////fH5+e3x8fn19eXt7eH98ffz//Pz7/H/6/fz9\nf/99fX1+fnx9enx6fHp4fnh8fn19fv3/+/r8/Pv8/v3+f37/fn79/n7+fn7/fX58fHt9fHx7\nfH19ff//fv79fv/+/v78/n79//7+/f77+Pn2+vz9//3+//7//n5/fnx9/39//X/+/n7/+/99\n/n///37+fX/+/Pz+/f77/fr6/Pr8/Pz7/379fXt8fHp8eHp8eXt5fH19/v/7fvz8/vv7+/v8\n/X97eXh7eHp7fHx+f//+/fz//f3+/f/+f37+f318e3p7e3x+fP9/fn99f3/8//79/f19/3t8\nfHx9fXz/+33+//78/vr9/v59fv39fv79fv79/P3+/379/P/9///+//7/fv/9f/3+/v1+/v/+\nf3/9/v39/v78/P/8/3//fn17fnt+fXt8fHx8fX7//f7/f35+/v7/+//+/37/fHx8fH19f/79\n/3/+/v99fn59fv9/fH5+e3t/fn/9e319fP5//n3//vz7/fr9+/r8+v78/v76/f9/fH9/fX1+\nfX///v58fn////79/Pv6/Pz6/fz8/vv+f317fnp8fnx9fv3/f39///7+fv9+fHx8fX19e318\nev9+ff78/Pv7+/v9/P1//vz+/f99//5+//3+/f39f/z9//98fX58fH1///7///38/P7/fnt9\nfnt+fnz/fn3+fn18/n99f318fHp6fH5//v39/v38/fj3+fn5+fv5+/v/fXx6e3p6fHp6fX3/\n//v6/fr5+vn6/f3+/f39/v5///99fX59fHx9enp8eXx/f3/+/vz7/vz+fXz/f35+fHp6fX17\nfX3+/P37+/z9+/v6+fj5+/r/fv97fHx6eXt6e31+/f78+/v5/Pr8/f37+vv8/v/+fn5+fn16\nfH1+fn1+fn5/fv79/f79fn59fX59fHt+e3x/fH////9/f398fP9+fX3+f/79fv7+/v3+/f7+\nfn5/fHt6e3p8fHx+fn9+/vz8/Pv8/Pz8/P3+//5//v59fv5//f5+/X7+/f//fn5/fv99/vz6\n+fj6+/l//v5+f318e3x7enp6fHp9fXx/fH19/v7+/Pz6+fn8/vv+/n99fHt7enl5eXt+fn7+\n////f/38+vn4+/v8//1+f/7//v///v/9///+/37+/P78/f/+//3+//7+f398//99/f/9/P78\nf39+fn79+/3+f/5///9+fX3+ff7+fv7+/317fHp5fH1+/319/37/fH1/fX7/f35//35+fXz/\nfn///n/9/f78/X//fnN9fX19ev5//v1//f39/v9//v79+//+/v/9fn7/fv7///3+/fv8/Pl/\n/vr8+/7+/f19fnx6e3t8fX99fX9+/f38+f3/f359fH19fn5+/n17fHx9e3p7fH3+/f3+/vz+\n+/v9+/v7/fz//v19//59fn7/fP7/fvz9/f38//3+fv9//f7//v79/n19fv5//f3+/fz+/v5+\nfnx7fHt8fX58f3z+/H7+fn7+f/98fn5///9/fv98fn58/35+/f7+/v7/f////37/fn59fXx9\ne319fP99fH99fn7+/v79/fz7+vv6+vz7+/v9/358fXp8e3x9e/z///77+fj4+Pf6+/z9+/9+\n/v99fnx7e3x7fHx+fn39f/37/fr7+/v6+fv+f/59f358fXt8fX56fHx+fv/+/vz///5/fnx9\nfXx+fn99/v///39+fX59//5+fn1+fX3+/f7+/f3+/fz//v7///7//v/+/v/9f31//3//f/5/\n/f38/Pz8+/z9/v79//7+fn/9f/38fv7+/v1//317e3l5eHp4ent8fn78/vv5+/r+/f///f39\n//98e357fXx5enp7fHp7fnx/f//8/P39/P7+fn9/fX18fH58fn19fn3++/z++vz8+/9+ff5+\nfv3//fr9/P3/f39//P1//X59fn9+fv78+/38fn1/ff5/fXx//P/7/37+ff98/31+/n7+fXx8\nfH59fn18fX5+fn5//v7//f39/fz9//99fXt7e3x8fHx7fP3+/v79/Pz8+fz++33//nz+/v7/\n/f//+3/+/f79//38f359fn9//v7++vz9+37+/vz8/P98fnv//3/9/vv8/X98fnx8fH1+ent8\nfHp6eXd7e33//fz8+v79/P37/f5+/39+/3//fX5+/398fX18fHx9en//f/7+/339/f7/fH57\nfn19fHz+f/38/f78/f76/fz9/Pv8+35+/359fnt7fnt//339//36+vb6+/r9+/x/fX19en58\ne3x6fX98fv98/n///X3/fv3/f359/3x+fHx8e399fv7++//9/P3+/Px//n1+f/7+f/19/v3/\n+/z9/fv8+/7//v//fX5+ff3+/P3+/fz5/f7+ff3///98fX59fH97fXt5e3t/fHz///79//78\n//7+/vz+/f5+fn5/fHp6fHx8/3t9fXt/ff/+//z8+/n7+vv9+/v8/H78/v79fn18fn1+fX5/\nff3///z+/f38/f79fv9+f/7//P///33/fn5+/f39/Pv5/fr9/v19fHx6eHd2d3h5eXt8fn7+\n/v37/Pv6/Pz+/3//fn58fn5+f33/fv9/e359fn7+fnz+f//9f359e31+e359ff5+/3x+fnx+\nfv79//z9/P7+/n9/fn16e3l5e3t8fH5//v79/n/8/n/8/v7+/n59fXt9fn9//f7+/X7/fHx/\nfnx8/37+/3//fv/+/v79//3+/vz+//3+//38/Pv7/Pr+/P3//f/+/v99fv9/f319ent9fP/8\n/Pr6+Pn5+f39/H18fH58fH9+fP////7//n5/fn19fXx8f37/f33/fX59fnt8fX39//79/fz7\n+/v7/vz8+/n++/x+/n18fn1//n9+fnx//3/+/vz8/Pz+/f3+/Px+/35+fnx+fXt9fH59/v3/\n/P/+fnx+fP5+fH59fn7/fv99f3t8/3z+/n7+/v38/X/9fnx+fHx7fn18fXx9fv39/fz8/P78\n/f37fv5+f/1+/P39/f////9+/P9//37+fX1/f33/fXz/fH1/fH7+fv7+fn7+fP/+fv3++/v7\n/f7+e3x8e3t6eHl6eHx6fv3//P78+vv6+/n7/P39+//+fn79ff78/v38/f5/f358fXt7fn17\nfHp7e3t8fHt9fv7+//39/fz+/f3+/P38/ft/fX99fHx8eXp4eXp5ent+/fv7+vn9/f3//v7+\n/vz//v/+/f79/f7+/v39/v38/35+fv19f318/Xx9e3t6ev97//7//n39fX/+//v9/Pz+/f1+\n/fx/f3x8e3h3eHl6fHt8fX39fv3//vz8+v36/P77fH58e3x4e3l7fH1+///+/X79fn5+fP5+\n/v59f3t8fv9+//9//P/9/X7+//z6/Pv8/v7/f/3//n9+/359f//9/f39/f39+fz7/35/fX58\ne3x7fX5+ff7///1//v7+//9/fn5+f31/fH19fHt6eXt7fHz9/Pz5+vf4+fn7+vr7/v3+f398\nfHp8fn19fn7+/v79/v3+/vt///9+/3/+//78/v38/v/++/38/H7+f//+f37+/n9+fn98fXt8\nfHl9enx9fHx9/37+f//+/Pr8/P7/+///fnx5e3l3fHl6e3v+/vv6+vr5+vj5/fr7/Px9fX17\nff99fv56f359/vz5/Pr4+/v8/f77/f3/fX18fX18fXx+fX5+ev9///5//X7+/31/fXx9fX57\nfHx+/f3++/39+/v7/f3+/H5//X37/f3+//z/+/39fn1+fX58fHt9f31/fHp7fH5+/n5///3/\nf/9/f37/fX5+f/7+/fx//v7//X7+f37+fn18e3l7ent7e//+/v3//fz9/fv7+fv8+f7+////\n/v78/P3/ff9+fn9+//7+fv5+//5+/f78+v3+/n7+/37/fXx9f3z+f/5/ff19fX5+/399f39+\nfn58f3x+ff38//57fXx7fHt7fHx//fv8/vz7/Pz9/Pz+/P7+/f79//5+ff5+fv99/3///v3/\n/P5+/n7/fn79//z8/P7+/P7//3/+fn99fXx7e3x8en16ff7//f3+/v1//n59fX19fP/8/Pv9\n/v59fHx7e317fP99/v9//3/+fv3///5+fv78/vr8+/r9/f3+/vz7/f3+/v99fn19fn19fn5/\n/vz8/fz7+/r9/358/n7//33/fn7/fX1+fP7+fv98fH19fn3/fn/+/n98fn1+fnx/fX9///99\nfX3//f39/X/+/fz9/n5+fn1/fv5+/vz8+vv6+fr5+vv9/316eXp8ent5ent5eXp8fP/8/Pr6\n+vr6/Pv8/P9+/3x7e3x7enx8e35+fH1/fv9/f319/n/+/f37/Pr5+/v8+/3+fnx8f35+/n9+\n//79/v38/Pv8/f7+/f3/fXx8/359/n1+fXz/fnx+fX1+fXt9fH59fH19fv/+/v37+vn5+fn7\n+vr9/P5+f39+fX58e359fv9/f37/f/9+/vv9+/v9/Pv7/Px9e3x9fH5+fv5//fv9/Pz9/v19\nfnx8fHt9fn19fn19fXl8fXt9fnz/f/79/vt//f3//f39/v9+fv9+fnx8fXp8fHp7fH1+f/3+\n/vx//vz++/z7+//9fX7///v9/Pz9/P39/f79/nt7fnt7fHx9fX3//v///v7+/n5+fX7/fn//\nfnx9/n1+/3x/f3t+fn9+ff78+/v9/Pv9//x//35+fn58fn5+/P3+/P1+/f77/Pv7+/v8/f7+\ne3x8enp7e31+fn99/359/f99/n/+///+fn79fn39fnx/fP98f396fHl6enx9//37+vz7/f/9\n/v9+fn19fHt+e319fv9+/n59f/79/35+/n99/nz/fn79f/3++/v7+/v6+/j+/fx/fv78//3+\nfv59f/5//v/9//5/f37/f3x+f//9/f39/fz+/v7/fX7/f3x9/37+ff79fvv/+/x+/31/e3x+\nfH17fXx8enp8fX99fv///vz6/f37/v3+/v59fXx9e317fXx5fH1+/v37+fr6+Pn7/P79f/99\ne3x7e3p6fX3//f37+fr7+fn4+Pr6/P5+fHt5eX18f/7+/v/+f/79/Pv8+vz7+/78/v3+fn17\nfXt+fn1/fv9+fnp5fXl9e3x8e37//Pv6/P38f/7+/fz6/P38fn57e3x6fXx8fHp6enx8fnx7\nfn78/v39/vz++vn5+fr5/P3+/fz8/vz8/316e3p4enl6en1+fP5//vv+/n////3+f/57f3t8\nfHl9fH3+f/37+vv7+vn7+vv9/v9+fHx+fn19f3z//v78/fz8/v7//n5+/37+/vz9/f3//n/+\n/n/+f/5//v7//n/8/P3+ff9+/v7//v5//v1+fXx9f37/fXt8en58fv7+/fr+fv97fn58fn58\nfn59/319///+/n9+f359f317e3z9//v+/fv++/38/P39/fv+/P7+/n1/fX5+/37+f37+fH5+\n//3++/z8+fn5+vz+/v99fXx6eHh6eXx6e318/v7//n/+/fz9/f78/v39fv1+fX18fHl5fXt8\ne3x9fH79/f39/Pz8/P38/Pz6+/z8/318fXt6e3p9e/99ff/8/f7+fv9+fn9//35+/v//fn9+\nfv9//v9+fv59e318fv9+f37/fn9+fn5+///+f33/fn7//n5+fXx9fn9+fH3//37+///8fvz/\n///8+fr4/fr6/Pz9/359fn5+fX5+fv5+f379/v78/Pz+/P7+/n7/fv7//n///v/7/f39/31/\n/359fn3+f359fH59fXt+fXx/f31+f//+/f3/f/z+/P79/X/+/318eXt7e318eXt7fP7//v39\n/fz7+/z7+vv8+//9/n3+fnx9ff//f3/+/v78//79/v38/P79/3/+/33/f//9//z9fn99/39+\n/v37+/z+/v9+fnl7enl8fnx8fX/8fv7+fn5+f359fHx9fP9/fv7+/v79/35//v7+/v7/f3/+\nfnz+f359fHp5eHt7fP5+/v/9/P77+/n6+/r9/f/+/v39/v1/f318fnz//v7+/fz8+3/9/P38\nfn58fHt8f/5+fn9+//7//n5//318fX19/359fn1+/v7+/v/+/319fHx6en18/31+/P78/Pv7\n+Pn8+v/+//7+ff5+fv99fn59/v/+/f/9/v78/P78/f38/P39/fz9fX18fH9/fv7+/35+fn19\nfn56fHx6e3l9e/39/fz9/Pv8/vz9/fv+/v56fXp6end5d3t9fX9+//78/Pz+/v7/f33+/3z9\nev98dv1+/Xr/+Xh7/Pj9enz8/nz4+3l3fH57/v59f3//fXz7f31+fH19+Pl9fvn9ffz6+vv9\n/f7+/v7//H58//19//3+/3v+f/38+/z///79/v79/f78+3/+/v///P7//P3+ff//fH19ff9+\nfX57fX5+/318fX/+/fz8+/z4/P5/fHx9eXl+e3x8e3t4fHp+/v37+/v5+Pn5+vz8f3/+fX7+\n/v/+/n/9/f/+//v+/Pz9/3//fX5+/359/v9//v3//Pz9/v/9/X59fX59/v5+f319/31+/3z/\nf318fH58f358/31+/f///35+/n5//35/fn18fv9+/v5+e3p7fX19/f7+/f38/v38/v79+/7+\n/f3+/X/+fnx/fH///vz5+fj7+/v7/H5+f3x7fHp6e3t9fXx+fH1/ff79//3/f/1+//98ff5/\n/v9+fn5+fX1+/v39f3//fX59fnx8fX5/fn59f33//3/8//79/vz8+fv6/P//e39+//5//f/9\n/v/+/vz9/Pv+/vz9/P3+f/58fX58enl9ff5//vz9+Pr5+Pv5+v1//3t8fnh+enx9ev99fv9/\n/v3+/v98/n///n1+//79/n59fHx+fX19ff99fv59e3x9//5/+/7+/P38/P36+fz7/v//f/5+\nfX5+//3//v/+///9fv/7/fz8/P1+fn17/31+/X7/fv/9f/z8/P7//v78/v5//358fXx7e319\nfX99fX9//3//f31/fXx9fHx9fX/+/Pz9+/79/fz8/vr+/vz//P58fXx7fX5+/n79/P38/fz9\n/Pv7/X7+/f5///5/f3x9fXl4eHp5en5+//76/P35/f36/3//f31/fXp9e3p7e3t9f/7+f/59\n/35//X3//359fH//f359fHx9fv9/fv79/P/8/f77//v7+/j7/Pz+/f19/n5+fn19e3t7e359\n///7+/z5+vf6/Pv8/P5+fH19fHx8fH17fX57fn5+f35+//7//v9+/n5+fXt8enx9fv3+/f39\n+/78/fv7+vn7+/39fn3/en3/f/5+/v/+/3/+/vz7+/v7/n59fX5+fHx9fnx9fn79//5//v7/\n/X5//35+fX5+fnt9fXz+f3x8e3x8fn5/fn19/v38/P37/fz7+////n78/f79/v3//n59fX/+\nfv/+/Pz+/f1//v/+//7+/f5++359fn38/v5+fn5+fnx9fX59fX1+f31/fH18e399f/9+///9\n/f7+/fv5+/z9fHx8eXl3enl5fH59f/v8+vv8+vz7/P78/f3+fX59fnx//n78/fz9+vv8/H5+\nfX19fnt9fHp7e3x8fn59///9//78/v3+/n/+/n5/fHx9fH59fn7///9+f358fnt6fH5+/vz+\n/P5+/n7+f3/8f/78/f37+vv6/f39/v5/fv9+f/9+//59/v//+3/8/v/8//3+/f99fXt+fX19\nf////P78/f3+fn17fXt7fHx+fX98fP7//P79/v9/fX59fXt+f37/fv9/fv//f359///+/n5+\nfnt7fnx7fH5+/fz9+vv8/v3+/vv9+vv9+/z8///+fX18fXt8ff99ff7//P78/f77//v7/fv9\n/f7+f39/fX19fn9+/fz6+fn5+/v/fnt8fHt9e3p7eXp9fX7+/vv9/f1//v/+//39/v5/fX59\nfHp6fH18fnx8fn7/fn7+f//+fXx+/3/9//5/fX59f3/++/z7+vr6+vv8+vv7//7/fH18fXx+\nfH1+ev7//f3+/P78/vz8//v7+/v9/f3+//7//35//3x+f37//vz//P5+/37+fv5+fn58fXx8\nfn5+fHx8/3///f/6/f37/f3+fnt8e3p6eHt4e3x7fHx+///+/n//+/37/P38+/v//n59fHl7\nent7e3p7e3z+/v38/Pr6+fz7/X78/35+fn97/31+///9fv37/fz8/Pv7/f59fX18fXx8e3x8\nen5+f/39/P78/P/9/f7+f31+fXt9e3p5enp6e3p8fv/9/fz9+vz8+v37+/z8/n7+f33/fn5+\nfXx9/n/8/Pr6/Pj8/P9/f319fX59fXt5enx7e3x9fv79/f38+/z8f379fX59fn18enp+eXx7\nfHx6fn78/fz7+fj7+v3+/H79/f5/f3///37+fv79/f39+n7//n3+fHx7e3x7fn1/fX1/fn9+\n/v7//3x/fnx9fn///f77/v1+fH56fHx7fXt7fX7//Pz9+/38/f38/vz+/vz9/f39ff59fH5/\n/P79/v///f5//f7+/v//fv99fv3//f3+fX5+ff7///z8/P5/fX19ff9+fv5/f/9+fX19e356\nfHr/eXv6c/r/d/d9+/5++Hx8/fv9fXn/fn78+/55/n56+ft///1+fH77eHd8d3p5/X96en76\ne/36/fz9ff/+/vt9/352fX14eXt+e/78f/v6+fj5+fr7fP7+fXx8fn3+fn18fH1+/f77/Pr4\n+vj5+vv8/X9+fH16eXt4en58/vz+/Pv7/Pj8+/r7+/z9/399/v9+fn1/fv7+/vz++/z7fn5+\ne31+/39/f37/fn58fH59fn5+fH1+ff7+/fz9/v79f3/+/3x7fXt7enx8eft/ffx/fnz9/f/9\n/n7/f31+fX1+fnx9fHp8fn5+ff5/e/9+/fv6+Pv6+vj8/fv+fn5+f/19/n5+f37/fX/8/v78\n/Pv8+vx/f399e3t7fH9//n///vz9/vv8+fj4+fz7f35+fH58fX18e318fHx9/31+f31+fX3+\n/f79/f9/f398fH19fX18e37/f//8+vr5+Pn5+/z7/n99fXx5e3p8fn1+fv///v78/Pz6+/v6\n/Pz9/v//fv3/f/3/f39//v7//fz+/f7//X5+fn5+fX59fX3+f3x9fXp6fX1+fX7/fv39fvz9\n/f3//n98fX15e316fXx///39/v59f37//v7///5+//98fX19/f5+/3x8fHx9fn7+/Pz8+/v7\n+Pz5+v37//39/Pz9f35+fH18fv/+/fz9/fv7+/1+fnl7e3t7fH5+fn7/fn////3/f/9+/n7+\n/vx9+Hx59Hh//Xv8ePt9c355fv93fXx+f/76eXz8dv32/X1+/nt5+Px4/Xx8/f37+357/H56\n/f98fX15fX3/fXh8dnp+f/59/f39+vn7/Pv8/Pz6+/38+/r//ft+fv98enl7eHt6en59fn19\nfX7+/f5//H7+/n78f35//37/fn5/fX1+/X9+ff59f/9+fn3/fnx//n//fX59e35/f31//P78\n/vz7/v7+fn/9/v7///3+/vz9/fz/fn9+/3/+/v3+/v1+//9+///9/Pv6/Pz8fn59fX17enp7\nenp4e35+fv7//fz+/f78+vz8+/17fX58fnt+fHt9e3t5fP98fX/+fv38//19fn19fv//ff//\nf35/fn1//v7+/v5///39/P79+f78/P5/e/99fH1+f/79/fz8/fz9/f3///7+/n/+/3/+/f3+\n/P78/31+fH99fX1+fH1+fn///n79fn19e3x9fn99fXx8fn///v39/vz9/n7+/n7+fn1+fXt7\neXp7fX59fv///fz6+vv7+fv9/P9/fn7+ff/9fv7+/v3+/Pz9/fz6+/v8+39+f3x7enl6e3x6\nfHx/fX//fv/+/v/9//38/v3/f319fnx7fHt7/37//nx/fH3//fv8+/z7+v38/v79/v7//X59\nfnx+e3p7fX57fn79+/v5+vr7/vv+//1+ff//f/9+fv3+/vr++vn4+/78/f1+fnx4eXh3d3l6\nent7fH5+f37++/38/P78/H///n7+/37+fn59fXx9fXx9fX5+fv//f/39/v7/fv//fX18fHp9\nfnt8fH7//f39+/z9/Pv9/P/9/X39/X3//n7//39//3///P3+/v/+/f7+f3/9fn99f3///37+\nf/1/fn9+fnx9fH5//v3+f///fX5+fXx9fHp8e3t9fn3+fv/+fn9+f35/fX5+fn5+/3x9/v//\n/vz9+/z7/P77/P38/f78/P79/X99fn59fnx+ff7/fv5+fn5+fn/+/f37/Pv5/P37/v79f/9+\nfn1+fX//fv9+fX58enx9fX1/fnx9fX5+f37//n39/n7/fnx9fX1+fn//fn/+f//9//39//5+\nfXx8e3p7fHt8f/79/f37/f77/f37+v79/H/9//////5+/v7+//3/f359/319/3z+/P/8/f77\n/P39/n7/fn58fH17ff////7+/P7+/X7//379/3x7fXp6e3l7enp/fv5//v37/P38/f3+fX5+\nfn79//79//9//358fHx7e3t9e3t7fH3//v37/f38/v7//v/9/f78/f5//37+/379/f3+/P39\n/n/+ff9+fv7+/v78/fz///7///5+f/99fX5+fXx8fn18fHt7e3t8fHt+fn3+//79+/z9/P3+\n/fz+fX58e3t7fHt9fn7+//7+/Pz8/v7+fXx7enp7e358e3///f78/Pz5+vn5+vn6+/r8/f/+\nfn7/fn19fn5+fH1+fv/9f/z+/vz9+vn4/Pz9fn17eXt6e3t7fH59//1+/P38+vz6+v39/n58\neXp3dnp5e358fn9///9///5+f/9+/3///33+fX1+fH17e3t8f//+/X/9/Pv6+vj7+fz//f99\n/n99/n/+/35+fv59/3/+/f78/fz7/Pz//n9+f3//f3//fn///v38+/39/vz+f/7//P/+/n9+\nfXx8fHt5e3p7enx7enx7ff/+/fr5+vv7+/38fH5+e317fHp7e3t9fH////7//n5//v///n5+\nfnx7fX98fH58fv7++/v5+Pr7+v79/f79/359fnx9fn5/fv1//v7//f79/fz8+v38/P7+fn9+\n//7+/v3+/f5+f/9+//7+//3+/v7//X7+f31/fX5+fH//fn1+fn5+ff9+/n5/fv/+//7/f319\nfX1+fH1/fX19fH1+f31+/n/+/v/9/v39//z6+/n9f399fX7+/P38/P79/f/+/3t9fnx8fv//\n/fz8+v79/v78f//8/Pv8/v39fv98e3h4enl7ent+fX1//f7+/3//f/z8/f3+/v5+fXx9/31/\n/3t7enp6fH59///9/P7////9/n7+f37+fn16e3p8fX1+///+/P39/v/7/vz6/Pv7+vr9+/9+\n/319fH5+f37/fn7//v7/f/3+f/z8/f39/fv8/Px+/319/31+f39+f/9+fXx9eXt6eXx8fH7+\n/X9+fn5+/v3//Pz+/35+fX59f3x9/nt+e3t7ff98/35//v/+/f39/f3+f/99fXt4fXt8/3z+\n//3+f/v+/vz9/P78/Pz8/Pt///59fX19/n1//v37/Pv7+/v4+fr5/vz9fnx6fHt3eXl3enl6\nfH3/fv7++vv7+vv5/Pz9fn19fX19f35+fnx9fX5+/v//f399fX17e3p6fHx6fX7+/Pv6+Pj6\n+fz9/Pz9/vz8/f3//v9+fP99f/3//3//fn5+fn99fX9+fv7//fv8+vv7+/37/f79/P3//359\ne3t9e35+fX5+fn5+fn19fX5+fXx/f33/f319fX5+//7//fz9/v7+f/9/f31+fH19e357fn19\n/f3+/P3+/v39/P7///////7+/f9////+/v1+/vz9/P38/v7+fv5+fHx7fXx+fv/++/n7+/v5\n+vz8/////f5+f35+fX19fHp7enh4e3p9/////v3+f//8/P5/fnt8e316fH99fv9//v39/vv+\n/fz9/n7/fH17fXx6e3t7e35//v/+/v36/Pv7+vr8/P39/v7/f3///v7+/n79f//+fv9/f/79\n/f39//7+/f59fn1+fn3/fn9/ff9+/vz9/f7/fXx8fHt8fXt8fX5/fX7//v////3+fX19fX58\nfv7//f37/Pz6+/39/f7+/35/fn9+//9+fX5+f///+/z9/P39/X59f3t+f3/+fn5///5/fv9+\nf35+f///fP99e359fX7+f/7+fX5//X5//n19fn19fH1/fXv/fX38/fr9/fz9/f78/f7+///9\n/v9/ff99fH58fv/9+vv7+vn6+/r8/n5/fnp8enx6eXx7e31+ff9+//79/f37+/t+//9+f/9/\nfXt+e3t9e3t8enl8ff//f/9//fz7/Pr+/f3//P3+/P38/P37/P3+fn7//P/8/f/8fH5+ent4\ne3h5fHp6eXt8fH7//v3//P3++/z9/v79f/7+fX9+fn7//35+fn5+/318fn18f37//X79f359\nfHx8fHt9e3l9fH78/Pj5+vn7+vz7/f3+fn18fHx9fX1//v/9/fz7/Pv7+vn7+vz8e357eX16\ne3x8en19e358fn5+/v7+/f7+/3///35+fXp7fHx8fX5+/v3+/vz6+vj4+fr6/P1+fH59e3x7\ne358fv99f378/f34+vj6+/j6+/v8/P5//399fn59fX19/359/n7//n/8+/38/fz9/v//fn5+\nfnx7fH1+f//+/P79/Pz8/P3+/nx9fHt6eHp4eHl4eX19ff1+/v38+Pv6/P/+/v59fn18fHt7\neXt6en17//7//fz7+/r6+Pr6/f/+//5/fn57en17fH1+/v78+/38+vv6+vv9/n1+fX1/fn/+\n/v79/vz8/Pv8+n7+/3z/fX59fXx9fv//fX9+fn//f3t8fn//fv7/fn7/fnt8e3x8fX1+/n19\n/37//P36+fv5+vr7/fz9/n7+f35/fH18ent9fn/+/P37/Pr7+vr6+v/+/f99fXt9fHt7ent7\nfH1+fv3+ff5+//7+/f39/f1/fH18fn58fX18e3x//vr8/Pv9+/z8/v9+/319fHx7e317/v79\n+fz5+/j4+fn7/P38/P7+/v/+fn1+fX19fX9+/f/9//39fvz+/vz+/P59fX19fHp9fH3///9/\n/3/9/f78/v1/f/9+/35+fnt7ent8fHx9fHt7e3///v39/fv7/fv//fz//v7///39/f39/f5+\nf3/+/v9//v7//f7+/f5/fn5+fv//fX5/fH19fn1/fn59fn99f31//35+f39+ff99fX5//f/9\nfv37/Pv+/P98fH17enx6fHt7fXt9/37+/v/9/v/8/v77/Pz6/f79/f3+/v//f/9///9+//3/\n//v+/f3++/39/3x9e31+fXx9fX5/ff7//v7//v7+f/7+fX9+ent7e3x8ff/9/vz9/fz8/fz8\n/f39/f7//f7+/n5/fX1+fX79/v7+//7//fz7+vv8/P/+f31+fH18fXx8fXx+fH//fX9+f/3+\n/fz8/v9+fXt8fXt7fH18fX58fn//f//9//39/Pz9/fv7/fz8/Pz8/f1+fHx9e3x9fHx8fn3/\nf//9/399fXt9e3x/ff5///9+/n7//////v9+/f9+fn19fn7/ff/+/vr8/P39/P79/fz9/v9+\nfXx9fH18fH3//fz7+/38/P38/v/+//7+/fv+/P39/P//fX19e318fX58fH5//f9+/n9//v7/\n+/78/3t9fXx9fX18fX5+fn59ffz//v1//v///f7+/f99f//+/v38/f38+/v8+vr5/P9//n5+\n//////3+f359fX19fX19f/5+/f39+/z7+/v9/v3+/X59fX58fnx7fX18f/5+/37//v79f35+\nfn58fXt7e3l6enp+fv/+/v38/Pn8/fl5f/p8/H19/nb+enV+dv7/fP7//Pz7/n7+/n1+/n95\neXp2en9+//1+/Pv79vr8/P78/fz+/v1/fn/+/f5+/31+/v/+/379/v78/Pr8/P19/X55fX17\ne3p7fXx/fX1+e33/fv9+fv97/v7+/v/6f/79/v9+fXx8e358//7//n9+fn7/fnx/fHt/fv7+\n/v3+//79//3+/f1//P1/fv7+/f38/P///v/+/P39/v7////+///8/f1/ff///v/+/39+fn57\nfH9/fn59fX1+f359/3/+/33+fv5/fv1//X//f35+fH19fH5/fn59fn1+f//9/f39fn19enx7\nfHt8fH7+/fz7/Pz9/P38+//+f/5+fv9+/vz7/f7//n7//n77+/z8/n5/fX5+fXt6enx7fQ==\n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.26.txt",
    "content": "* 26 FETCH (UID 26 MODSEQ (29707) BODY[] {1457}\nReturn-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA24448> for nsb; Sat, 18 Jan 92 01:20:08 EST\nReceived: from joyce.cs.su.oz.au by thumper.bellcore.com (4.1/4.7)\n\tid <AA17087> for nsb@greenbush; Sat, 18 Jan 92 01:20:04 EST\nMessage-Id: <9201180620.AA17087@thumper.bellcore.com>\nDate: 18 Jan 1992 17:19 (Saturday)\nFrom: bob@cs.su.oz.au (Bob Kummerfeld)\nTo: nsb@thumper.bellcore.com\nSubject: another Hebrew test\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"partsep28042\"\n\n\n--partsep28042\nContent-type:  text/plain\n\nThe next part of the message is the last few verses of Bereshit.\n\nBob\n\n\n--partsep28042\nContent-type:  text/plain; charset=iso-8859-8\nContent-Transfer-Encoding: base64\n\n4fjg5SDt6fD5IPLh+SDl6ennIOnw+SDh9/LpIOnu6SDp5OnlIOTw+SDk+PnyIPLh+SDt6fj2\n7iD1+ODhIOH38ukg6efp5SAyOCA0NyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOuTw+SD64O7lIO3p8gog6unw\n6fLhIO/nIOn64PbuIODwIO3gIOXsIPju4OnlIPPx5ensIOXw4ewg4Pj36eUg+uXu7CDs4Pj5\n6SDp7ukg5eH49+nlIDI5IDQ3IDEKICAgICAgICAgICAgICAgICAgOu3p+Pbu4SDp8Pjh9/og\n4PAg7OAg+u7g5SDj8ecg6ePu8iD66fny5SDp6/jpIPrn+iDq4+kg4PAg7en5CiAgIDrq+OHj\n6yDk+fLgIOnr8OAg+O7g6eUg7fr44ffhIOnw+vjh9+Ug7en49u7uIOnw+uD58OUg6frh4CDt\n8iDp+uHr+eUgMzAgNDcgMQogICAgICAgICAgICAgICAgICAgUCA65Oju5CD54Pgg7PIg7OD4\n+ekg5ef6+enlIOXsIPLh+enlIOnsIOTy4fnkIPju4OnlIDMxIDQ3IDEK\n\n--partsep28042--\n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.27.txt",
    "content": "* 27 FETCH (UID 27 MODSEQ (29724) BODY[] {42865}\nReturn-Path: <dag%gorgon.UUCP@cs.wisc.edu>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA17171> for nsb; Sun, 7 Jun 92 16:17:25 EDT\nReceived: from spool.cs.wisc.edu by thumper.bellcore.com (4.1/4.7)\n\tid <AA11873> for nsb@greenbush; Sun, 7 Jun 92 16:17:09 EDT\nReceived: from gorgon.UUCP by spool.cs.wisc.edu; Sun, 7 Jun 92 15:16:14 -0500\nReceived: by gorgon.uucp (/¥=-/¥ Smail3.1.18.1 #18.1)\n\tid <m0luSVj-0000UWC@gorgon.uucp>; Sun, 7 Jun 92 14:02 CDT\nMessage-Id: <m0luSVj-0000UWC@gorgon.uucp>\nDate: Sun, 7 Jun 92 14:02 CDT\nFrom: dag%gorgon.UUCP@cs.wisc.edu (Daniel A. Glasser)\nTo: nsb@thumper.bellcore.com\nSubject:  makeitso.gif\nCc: \nMime-Version: 1.0\nContent-Type:  image/gif\nContent-Transfer-Encoding:  base64\n\n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\n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.28.txt",
    "content": "* 28 FETCH (UID 28 MODSEQ (29758) BODY[] {9606}\nReturn-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA21993> for nsb; Mon, 8 Jun 92 14:45:42 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA21726> for nsb@greenbush; Mon, 8 Jun 92 14:45:35 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA20284; Tue, 9 Jun 92 03:45:40 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA02052; Tue, 9 Jun 92 03:45:27 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA11392; Tue, 9 Jun 92 03:45:24 JST\nDate: Tue, 9 Jun 92 03:45:24 JST\nReturn-Path: <ysato@etl.go.jp>\nTo: nsb@thumper.bellcore.com\nCc: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?= )\nSubject: Re: How to see Japanese characters (Re: malformed message)\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nOrganization: Electrotechnical Laboratory, Tsukuba Science City\nMessage-Id: <gCvvx.ysato@etl.go.jp>\nContent-Type: multipart/mixed; boundary=\"==\"\nReferences: \n\t<geADt3q0M2Yt4hhNRb@thumper.bellcore.com> \n\t<gCG7l.ysato@etl.go.jp> \n\t<keAshCG0M2Yt5A32xi@thumper.bellcore.com>\nMIME-Version: 1.0\n\n--==\n\nIn message <keAshCG0M2Yt5A32xi@thumper.bellcore.com> on 06/09/92(01:31:10)\nyou Nathaniel Borenstein <nsb@thumper.bellcore.com> wrote:\n |This is using vanilla metamail, with MM_CHARSET set to iso-2022-jp.  Any\n |idea what's wrong?  I'd love to actually see your name properly...  --\n |Nathaniel\n\nISO-2022-JP does not correspond to any single character set in X,\nbut is a sum of US-ASCII and Japanese JIS.\nSo you must specify two font sets for kterm, like this;\n\n   kterm -fn iso8859/1-font-name -fk kanji-font-name\n\nI our site, following kanji-font is available:\n\n% xlsfonts | grep jis\n-jis-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0\n-jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0\n-jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0\n-jis-fixed-medium-r-normal--24-170-100-100-c-240-jisx0208.1983-0\n-jis-fixed-medium-r-normal--24-230-75-75-c-240-jisx0208.1983-0\n-misc-fixed-medium-r-normal--0-0-75-75-c-0-jisx0201.1976-0\n-misc-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0\n-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0\n-misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0\n-sony-fixed-medium-r-normal--0-0-100-100-c-0-jisx0201.1976-0\n-sony-fixed-medium-r-normal--16-120-100-100-c-80-jisx0201.1976-0\n-sony-fixed-medium-r-normal--16-150-75-75-c-80-jisx0201.1976-0\n-sony-fixed-medium-r-normal--24-170-100-100-c-120-jisx0201.1976-0\n-sony-fixed-medium-r-normal--24-230-75-75-c-120-jisx0201.1976-0\n\nIn our site, we can use kterm like this: \n\n   kterm -fk -misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0\n\nOf cource, kanji font names are usually aliased to shorter names.\nUnfortunately, I don't know which fonts are public and available for you.\nI enclosed the picture shows how README.jp looks like using kterm.\n\n--\nYutaka Sato <ysato@etl.go.jp>\nInformation Base Section\nELECTROTECHNICAL LABORATORY\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan\n\n--==\nContent-type: image/gif\nContent-transfer-encoding: base64\nContent-description: README.jp shown in kterm\n\n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\nW2cnfaoGUAAAOw==\n\n--==--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.29.txt",
    "content": "* 29 FETCH (UID 29 MODSEQ (29767) BODY[] {109878}\nReturn-Path: <oester@vnet.ibm.com>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA22720> for nsb; Mon, 8 Jun 92 15:59:26 EDT\nReceived: from vnet.ibm.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA02268> for nsb@greenbush; Mon, 8 Jun 92 15:58:59 EDT\nReceived: from RCHLAND by vnet.ibm.com (IBM VM SMTP V2R2) with BSMTP id 2847;\n   Mon, 08 Jun 92 15:58:30 EDT\nReply-To: \"Bob Oesterlin\" <oester@vnet.ibm.com>\nReceived: by po1.rchland.ibm.com (5.51/4.7) id <AA02602> for nsb@thumper.bellcore.com; Mon, 8 Jun 92 14:51:36 CDT\nReceived: via switchmail; Mon,  8 Jun 1992 14:51:35 -0500 (CDT)\nReceived: from terminator.rchland.ibm.com via qmail\n          ID </afs/rchland.ibm.com/service/mailqs/q001/QF.4eAvcfc91JbyQegH1e>;\n          Mon,  8 Jun 1992 14:51:08 -0500 (CDT)\nReceived: from terminator.rchland.ibm.com via qmail\n          ID </afs/rchland.ibm.com/usr1/oester/.Outgoing/QF.ceAvcbY91Jby0wDlR6>;\n          Mon,  8 Jun 1992 14:51:03 -0500 (CDT)\nReceived: from Messages.8.5.N.CUILIB.3.45.SNAP.NOT.LINKED.terminator.rchland.ibm.com.rs.aix32\n          via MS.5.6.terminator.rchland.ibm.com.rs_aix32;\n          Mon,  8 Jun 1992 14:51:02 -0500 (CDT)\nMessage-Id: <seAvcao91JbyQwDlE=@rchland.ibm.com>\nDate: Mon,  8 Jun 1992 14:51:02 -0500 (CDT)\nFrom: Bob Oesterlin <oester+@rchland.ibm.com>\nX-Andrew-Message-Size: 388+1\nContent-Type: X-BE2; 12\nIf-Type-Unsupported: send\nTo: nsb@thumper.bellcore.com\nSubject: /usr/sbin/sfplay\nMIME-Version: 1.0\n\n¥begindata{text,538724776}\n¥textdsversion{12}\n¥template{messages}\nI notice this in the new showaudio... what system type does it run on? I'm\nlooking for something that runs a little better on the  RS/6000 than my local\nhack....\n\n\nHere is some audio:\n\n\n¥begindata{mailobj,539461880}\nContent-type: audio/basic\nContent-Description: Bundle of Kicks\nContent-Transfer-Encoding: base64\n\nLnNuZAAAABgAATJAAAAAAQAAH0AAAAAB////////fXx8fX18fH18fX18fH19fH19fX19\nfXZvcHR2c3R5eXl2cXZ5cHB2dHN5eXN6bFtXV1RWW1ZZc3RdXmhfXltQW/1eUeZRN21p\nN01ULTFMMC0+PjtATe1gPj9TTTg0OT1FPDQ/eUo/X0g7SU1ARVNNT3BJSFs+M0lcPUVL\nP/1aMEXGPDbRSDZdQjZxXjNR2T5DTUBFPDZLZT9F2d7cZTdK2T40QkNG0W9I4/xLTT43\nPj80PGxlWWVmbtt2SG/G5Uzf0E9ieklXeUM9dlc7Vt5QV97KVjFC90M7Pj9zv1E/ztlI\nU006QkU4SlxKc9faw8XGxuj90VFFTj5Ibz1IvvFNvszlwzMuvuAuer7uymVJvk8s0Mkq\nM0UxTVAmQ6tbUaqwu63aX8Y0K0k0K0BCQ767RturudqxsL6/0XraPis0NyQjQ+gvKuK2\n3s+ura6/6LxdKj/dNzM5NrzMHjOqQjGttrajs62g2zu2PiE3KBotPy1Fwr6usL+wsGn0\ns8k+fck2ICvPQCdUscrQtKinxs+s4CczOSkqJDqguTCnoz/6aDRfMyy0xSpIs+hmt8/Z\nuNTPt3Nsu143QDEjJzk3QruorNq/qMM468ZfOCg20TEzq69LvKquSCBaqykkt8VA3sW0\nvTb9rV40+U0+u8wxSMVZX8XGvbO2r6/PVvw3IR8mLy8x4LfIvbe+r6razrkpH0w8JDy2\npKSxqKDARs88IBwdKi0qVK2vrKS4w66tsTgjRjsfMNY2P6+ppKGnoas0TdMbGS0mJzk7\nTci/tpuVUDufbhokLyovPLOgqaeapObCzSopJCAnJ0XsLTippN7Koa0+063rLT3PPSc6\nts9Ivq3NQ9zTPE7IPDjLTR1DnzEqmp9Fram00yRAtBocqkgktrG9uWK+Sym2pCEZr7sd\nQqZ8N76eoVu8ntwhWc4hHTziKi+7TUidwCagnCk7p0snML6wOVagrkbAp7cnNL0tIzw0\nPKneJsU6TZdGI5ezIJ+xKMgkK78ZPp0pRZ3lSUpLpDMdp0gdoLkdoaYsoaTepjcsqicd\nwC8dOOndPK+aOj+YSh2fpzleJrGdGy6bJiOov8zGV6RxGtTMMSggs60eTZdeQJvCxpwx\nLKohG74+MbFKz7EqPp22GDuhKhq7oDE0mq4o37GnPh2qoR5UoSwpMybIwCe7o8VPzp6q\nJ76bKjivIci2FcWdHfyeMT47H622GFCnKyatmr47nZwvv7Yf174muS8noSwcqjMdoa0o\nvq3eQkmu1j6tQk2oKSue6y2hbi2mSBvLNx6vuS+uuzanpj22m0ohrb8cMahGQqhTKl0v\nV9cd655F46gtKrfGL/SszVO0yki51zaxriQ4ux4x2x1Wpi2wnC87qXnPuTFUrUgqrZ5N\nPaStKjvgJDHvN9dALqnJK7p8OKapPki2ujRItF5Twj7tvSorrs0stMYtvF4hz04gt6NM\nz7pNrrwt1Kc9INOuKyqwuFawxT/TPkO+LTi2SUauPy3GtHdMvrBTY79Tz8A9vKdFMbFN\nLcs+M7PXNKq/J0W+UWM/McXJL0amrjbJo88v91Yw9HZbvD/mrz88yDdDtFkwTchmO2XD\nTuvIQs7MLkqtV0Oq1km0RjPAMSyxvDl0bT+/czS+tjsxvrgxQKzD/7zNS2NF788/3L1K\n6MwwS7jLSOC+yENeb0PRW0y0vTxbvjQ/w1RXu0XXsDQ4vddf1E7mt1o3u65DQrDKMFpe\nNk/JU9bbULdZM+lOPsDPQkbL1klZyN9p10h8yDw8wt07yetF1007xWg2t7ZT3d1axVs7\nzb0/N8jAQk60zGjI4kxsTE7eSXzFaNnGQFTI11Ppytled+VczeJGyMhDSs88RtdF7b5K\nz7NAQ8b99N9DWcpNP8u2Y0i+zzlNUDxW2V7W2VvGZUrlSUjF7VNezdRO88XtXtxNVtY+\nQM78S8XaTdNpStFiQsLFTvHoV9vvSN3FU07KxlFRwuNgz95Pet/u017WyF3zyElR09Fr\nbNb0TU5eVnFxTdTNTkzaS0boS1fKU1e+UT7X3m3QWWLGaUPxyl1Gd9NMRVxQVuPR38/i\nzc9i7fZI285RXePbXl7e4lFXVFDbaErey1vmz1f56E7rylvWvNpz5l7240tizPRLWs96\nSOLN8dbX9+7jZehpWu1jVtp0RXzjbVZp41dKZWNb81Nrzt5T1s1RfOtZ2+5Q2ddKXN5m\nbGBLb9tXYs3Kb1/T3kJWYlHp1tnR4u3TXFlwVFPZ3F321nNdZehtXulZ7NFl893jX+z5\nWe9pT9/9UdHRYNvtad9oTm/oV0923mlR1N1m3Gtbbmxjb1xXa1dWeVFZ6Nb26dFzZV9b\nYuj0aMvW9N/eYk1lcFnf7WXQ5Vrb2Wzgd3Ha81vm3uNba95iTuhgYM9w/dle8WlpW+hX\netn/eu3xcOVv/HPdaGDO23Tm1l5R41NNa05r7/npzuBwZW9fc1Ni6+hXY/HwXlT67Xbt\nTd/WSeLfdF5X6WnwU1nf82VffN7vTW/Gd0rWylBmWetpRuN0z/95w9RNeuXrT0ne6VtO\n3dBsTOjKVE7c3lHX3WDNTezX+fzi3+Xb19dda/DoUVnpy0hbv+VK195ZY05jUVZCbdFN\nZtHZaE9at2wsVrdJPsW+xmXZs8o50cpFS0L8VDpO4ltaz9Tb2szTZU2zwiZKqzY0s8Ze\nxcqzxTy7wDtGXj00NDtDPk5ZXrCzSMW0VlHWu0Am17gsXrD0wLy+tNZGxVkvVEovPD87\nbzs5pqszs6RFRcVKTXZQPk3JRVuxz1u0ufnbfcrGLTmwOSrAXzE7S6u7K7GpME+8RkNg\nw7AvN6FKJKq3LL27W7gtLqc2KapaL7ZCMFxAwEw4r9kxtsYzxrzDtDHfnysnoFAfu7E4\nLUinzyytpzFDsTwmKlu8JjOgVCqmsTu5uqqeKD6cKB2nPB60uzZOwLTPQrawNFC3MCc2\nPloqM6Z6LaSnMduhqfc0w60mI6x8HcOjOyyzpls2rKwrObE9JCQ2uzgopK0rrqM8a6Ss\nXD7KuSoqtkAkt60/SrisZi20sSM5qC8dTf1DRkCstiyxpC08n60qRqPeIcKpKi+suF88\naao+KKrrH7q7IDDWPmY+fK09PqheLq2kaTCupCstod8du6M3QMj2yC46qi0mqd8gRrn6\nLzqq8CazqjA+rKpeO6aqJ9mhKyqn5SzsSev6L7i7J8OrLjPaylsmaKoqLJ/IJq2hwtnC\npr4muKofMadCLlvZuzAzp0kjsbcuQErGUR/Nsx9ToDQ2oLDAvtqk6CSouRrjqyo2Ws67\nK1egLyaj1CD8cUY9JLu0H8OcLz6drbzbY6FOHai0GkupNjdwtLQt0aMqK6NKIfBOTDYm\nts8fsKEq65+xxca/uD07sEgmxrk+ONetVDSotifPrTQxPkrZKy2xPyeurjvKp6zZyqPp\nJqy4HUyzMEhGVq0xN55JJqa6J1B8OzQ0aDwp3r07cb6xsU2sozu9qi9Tyi7XRiDCviS+\nrDPKrd7MUUzIKS2vKB2wTyTDwNGz3ayhQrydXTbCzE0tNtcwMbTiOLS0wLdRv7QsTb8j\nRb0kPtYqwrQxr6ZFqqFdvrNfwjYnvi0drksfrLczrcVXqz9GrissvTAuSDNdcz6/y1qr\ntPSttsC3WcbKNswzI7tGJ7ddL7DgQqdpPqjOOtE4NtYrM7sqOqo+RarJ0LHOur9IusYz\nVl5RQiZDzS1LuEDQrm23s0+0wEXDN0qtJy2vLzaxPtatN7akONOtaMnrL8pGJMrMKVvM\nSNP0ZrvWybflurTxwtk7v2sqWUYrd0wvzl9AwO39vm2+0DC7vi3bzDDx3jG3yy+zsUW7\nvtesylupdje3Tzd5MzNNLjNDMFl3NtvAVr3sQLfRP7vpQ7rLTbnbabzgy8zgrbs3trc0\nz9cx60Aqw00pWUw0Szs5wzs7sWBIu+jXuOjGtMi7v/S7vWLJzEDPbzvdUT7AU0y73kbb\nZlDlPXw/LMrWLczFN9rRTLPNUK+5ab7I68ZNSMU5NNs/OE0+QGg7SPRiv9HzvslUzVlJ\nyE5pvlBbvFnp3kjgyknccM+xTUW2UELPV0ZlOk7UN0XNTWNcTMDFSbi2abq728LTWspu\nU104VNRFTM1MQtBFacpK18JA5tc/W00+b09ZzUXFsUrmu13010/J00LTyFP2c1fPTz/F\nbT/MY0PeSUjvRUr2Sc3USOPGZdvJbNDMaNFtRelmSV5ITd9r6c/PsNBKu89J7VRKXT9C\n2khK42PUyGnPvXHGu/3WyEho3UVXYENZQ1nD1k/d1ubXduzeWfR8TFdQP15rTXZp/ddA\n0L5GXM9PT1FKzcpN0b95Xlpe+mtDW1dL6XRP3uz94+3byHnGzXzZ8WDs/VHx7WvN6FvN\n0GbgdtfbZmntXshjQOL3SFlcW9dXTczfXPTm7uNUV+bscdHv3s3eXm1c81xJY19Ma1NX\n+lFNc3D/61f0zXdNaHN8U1Te0N7XYmu+bVbP3+DTXt/FWVrgb2NURmbgU0/5W97bVmbg\naVtKS+trUdff0c7p1sXa7d3ezdNRZs3rWVP33GVWb9/P10hd201OWVTe9lDj3GNwXnTW\nZVDl2ezP+WPU4lZZU2B2SEZoTUtW/9fdc9nP3F1KTWxbSUtl1/9b0cjT1HxbzW1Fa2VT\n62X3xtPgy978bE1X6Vxc42/f0WZa8fTmembNxdPKzMztUF7sWlto5cjPZunN3lxTaPNP\nSlRZaPdNX9tZYvxTeXRNYu9X8O5u199Red5c8HlQ9+tRV1tX8GVP8P1lY2D0dlNb9u9w\nW1vc2mNb6NPfY9bK1+JoT3pmRmXiedHT3snPa+liVGBWU9va/dbb5tHoW3Z6ZWVUZdrw\n7d7a5lZWc2BXV2vZ12tt6fZXSU1oUE126NvK3+3L62PlaG3eXlvgZWj0c+bR6ffT4v/v\nV1p9XlZmbOPiXmj8XltZbvBrbOPe6WJd//FgVmLm3mNt2+t972Bj3l9XfV5f9F9s2/xt\n5f3w6Ghz1t954/Dt6F9Xa3F09PfZz+Dg5vFpU1RjYl9s49blXV1oXU5KVGZWWf307d5p\nZt5rYPNfY/RZX+hz7+7839twbd7o6eN66Nz6fOPj2+Bt9vFrZWjw6Pzi0drTdGbwaFZN\nXWXvaPnZ6Xl5XF98VF3tbu7d9+bgaF9bW19cWvze/Xfu8ePwZm19aGlmaevt/fr6+WVi\nd31dZXx03lRKXmtUYmhj8WZx2eXZvlk+yuBA69Bwa1xu71lb4+/p1OPgzNT27VdLaWlW\nY+LT5XPT0V5e3Gtb13RNzctI7cpXSmn56c/Xys5UX3o+PtNxPs++Xt/D0NfsX1tpXj5W\n/DFbuEJMw/dPTFbpVF3KvMI3S7BZO7i+S+vRQj9FPld98crF383XQ07vTl7G7VfLYDxT\nUT5Xzc27uFdcu8w/2bg7NNFWOEBr4ElPwspTSL+sPjSw0Tm/vV7O3V7NPjFWrsgg655O\nRae2RT9T7C8qxs8x27BlPls/SM5GPrnGRbOxRmXGUz844qcrHKGqIcudrk7OtkMfLmAv\nM8OwurneL7OnIyuvOS+7vdnWzblPRbQmG6rIJ6Od3bSoXDQsJCovOL22wK6tMTuc6xfG\npyEprLdOu6enxhompyYdpKSutlOrwxow9h0rsMZwuKi9LrudJx2sNx2+vVOmnZ8zIKpD\nGb2mXrecvxs+uh0d1LRG3qavMTRGqrga154nJMaqsb2mLR2pPx6rqcint9C+GhW2MBqo\np1+hqDgsHUikISuZ6SSqs0OZqBW2oBU6oEi+qLiq3iodHj4qMKabp3fQPhlZqxo4nDst\nrqeaShmenxXumR0snUY9utmzIRikzx2knD/DvRUmmioamqoexp6hORqmnSBXm742WS8s\nRTu+uhsvmkw0na88RhwopiEZmrcZqZWjLSGetxmwlyg3mmMcMDstvtckrptU46fQLBsd\npLEXRaEjKJWeH7GULCenoaooN6geF8U0Ka3etpTRLpzWGhwdq7EbrKEZ9pE3HZegHaie\nKqe9GEwtGuk7Rpq7PJyhKsKkIRE7qSAmn9QcsZwnPJW2O52uOLY5FyY0IzvOp5fQSZpa\n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\nfSehyR+f0x2k1h2t0R67wCexvDS2w95g0bw2XrNAULvF9muxQ0K0NzHGOjfrQF7lykhO\ntDNKrSn9sDBvrc05pr0qpHMnqEIosV4qu80qv08ztDBjvS6x3z6t7km6uUVgqj5LpzNG\nrDM6uzM9fDg3Xcsw468ot64msLQtxao+XaA5XZ4xXqYtPa8uLbYuOMIvWdxGdlnFTEqz\nS163esbTwNZbtEtKuUBewjrb0z1iQElKNMk+PLRWSK3NNKrZLalWLa1RMa/AM7OxMLjF\nMdFZMUBuODbPYDbMyjzNytrzfbY8bK4x1LM8vrtm0b7IRsrNMd7iLWjUND6zOjSoNDmk\nNEOoPDapXy2o3zOw1z/Quj1GrzszrUgtsU8vw1Q5YNdGQr5NSrs/+bhDa75TTL7UPrm9\nQr66VEq6US22QiewQC2v6S+2wC27xjTA0U3TutY9rr4urbgttLw02705PrdCNrZDMbQ7\nLbtNLcXGLciwL8mvP+WxyDq/tCzWrSpZqy83qj4tqkwws30+yMI8Sq83LKs4J6pOKq+8\nM7qqOdGsMNG5Lc3DL1q7OD6sSjioZjGw3izeyCxGxS8+vkVLtsBdtLFguLboV0u/Oi+z\nPSqt2yewsyrIqzRCrzcuvDY00S1NzS/esEjwpM1CoL0wqLEqMa82HbfdIMypPU6jxUqt\nyELUVDY8SjssQ0styMtCrq7Cr6q/yrhlTszmLCBCZSEzqEotn6BGrJ3bT6w4KUYsJyEs\nOCpGvMW+np20p6j9S147LTYuL9cmHarXIKukOrCbtq2kSGC2Jhk0NyAfQ8Us5Zur2Z2g\nPr24JjdtIytPRSxDpEUdtqQtNp2qv5qkv6a3JjNuFxy+IRyqyiinndevo1y+tis6tkMe\nMbczIcC4LrShJiadrSu8q9mhnzw9uL0hFUWwIx+98UOquE+qqEnIuyw0sC0fpLYkyMog\nNqdXy6OtuTYhMK+uRcahnaazcCAqtyoRGi1AaE3loJWdbFOjZRQqVho+pCw2o+1Xo7bf\noLMkz8MdI8pcvpigYK6oayoXH8pLHRc0q7y8q7itmqoZJqs+OL5XuaQ7HTeuySfjma0r\n1K9COjQo16Ceo7s3RaveGSlAGyZCJi2mpLOcnaS2IxtArOkqSrtXQzogJ6GdNzbbLzOw\npLvRSzDRnJdGHc20T0kmGyEuO17Urp2fvrugWxgnMDGpnXotPSQkO2OspNssQ7djxpqf\nOUBKJE2ens5Uwz8oJiEeJlQ5M52PpDjIu9e4RR4mZa22NCMsPzaslatebioj6aSalbgj\nHiFgo5qpO97GHxw+JhdUsCQ+mJ1J0anA3rwzHk6hQhgz1y5UtOtjs8I6ME2olZWzKBgX\nT6Sgn65GKx0XL2koPrlFQqCVsEWtrTE+zRwbrKYpKNk8NK6uPM6qUS2ump+dpycVGjaw\noJyrPyofFy2040hFOTfUnZ6+tKFWGyoqHc2bux0vtysrpLsks50xKqeen5vGGxUnt6Sd\nnWYaJzAb9Kc0J0ZoQK6bo6ymrSoUGDHFqaBuHCc9I1GfyVShripLn52epC8UF0qtqpyk\nKSFWKR/R1iYqyGBIoJijraZdFRU5yLimxR4dNj0+rqCkts87I0Kkm5mrIBEeu6qjnV8a\nNrkhHeBFIUOrQk2fm56griMRIba6vrMsGjbPL1ahn67RNyY7qJ2aoTAVFzupp6qrRS1P\nKhckt7tITzExqpqYnbAwGi2q1x8zxT83MCEuoJSjPysqPqacrayqJxIZeaauqKw3MToh\nI+yx9DsrJvmfmp2nr/ctLCwdJ7bZJCQqTZ6RnykqrbDvXEPFn6EuEhflmp52Iymtrx8h\nrapALCEfTp+XnaqvuUgmJzzwTyQcITnApJ+vvKGgOiu6qam2LRcVO6GtOy3en6QmFD6a\nozgdFSefnUlOpp+3Ky/NsLctGxws+dfJppuhtmXRp6CuVjEkJiceHs6dtC1Nu8i4pKo0\nGxosvVknUJ2Uuh45tKSjNBgeW1QrNLSco/NDw6Sdo8pCQjQjHSEwytstKVSroaGvva+3\nIxUusds3TV42Ta2mp+YpSrs9ICC+na48KkOjlZ3Pxae9KBsnW9xGJx0nW7u7uK2pq7o+\nQ7OzRScfJDs/M1Sknt0tUMZb7rPWLTBAvae3xqudnzkdL7On8B8XI9NdLUimnrReVu2w\nqsA/LCktLCsuQrjDNzq8pqavxei5vSkhxanK18hFN2WxpLE7PVBNQiQjt6G9OCw+ppqw\nRtt8XjQaJr5GNzsmM7+7tqyzuKizNki8zu0uHzNmQm3DrqCtLT6zNj6qQi1FL8WoVPq3\nsaxUISa0rEo2Hx60yizWr6ak0Eq6yLauMCtAKDHQLzunwDnW/Oufqiq+ty9JNCe6qzrb\nsS8/p7vDxSo31EomJ7TAsKYnN56qra8uN8o2Gy65Q0a9QCutpzmxpzTfpywquT5tXSMq\nwrFDwKfJt8UrTT4xwt7oTTi5rb666OymRiHUOz2nUB07127J1F+3oNYqtsg6sbsmL7wn\nLqguN507Pq0vvqNDLrDCKHnjMKzuM6otM6Mxw6MhPKoxP0Y3urDAPvFTw6FULdw8RUok\nVKs8WqozPaveSbTMPs7INlS0U81AKt7IUEXDvOm2PyynOCqcPSamMy2evia7rU055T4x\nsLtANzP6tDtesVqqyCmsyjatfChKxS02qzA5njRDpzO9pEUvs88hysMjraofrqYav6Ah\nuq8fQ6pAH7CqKau8JsOr+XDFKU2rJy+zzji9tySssymjxSuq4y3TzDhQsS40t3leV7TT\nSK02KahQKafRJ83IPM7FWUXIrSo7rSpIoScppjtAp885r7MrV7Y0xt0tulEwuL4vwKYq\n+aQmTaA5I6qzGrGrGqygHvedJjihKlOzIdOvJL6tLaynI7uxIafDHbO4IbexIaqvJ61o\nMKxjO6/fL7TeKbDPLsC4KjyjQyajzCSgQyCgViSpySa45S+r2ySqvSStSiOkTDesLS+k\nvCGmqh2nqxeuqR5Xqis5pi/ZsS+sPjSnODqo0x+rqxqksBWfphWpoRetoBWtnRW/mhs+\nmh55lxrWpxq0nx0vnCQzny44plkryLo4Y602P63rM0KxTy25wC7iozEzmys0mx00micp\nnUYmrL0turAmb6YqRqkj168u7bEvQp4oZaQnRbEwM6tILKveKafFNM/Jti1buzxMvr4t\nzakjyaAavp0ZUZsgOZ4pZacoc7A991vWbL9fObAvxr862fpuz+07sXQ2sTk6pzo7qjcx\nsbkjd6YkYqQuLKb5Jqe4HKeuFaajFbyfHcCmIMCoI8W0L8a4KcipKrzDNtO2Pc7ZNrE/\nObZNTrBGRrNNWbw+N6wzLqZFKqu7J7avH82hG82dGU+aHzuhKkaqK0iqM+a7P/mxPVfD\nQLtNRspeOrBGPas36LRA/bFWTsJFSLxGLKxmKa29Lb6zLWmrKzmhKzOcNyijQCevRSiv\naSiq4CO5tim5sFO5wrCtTU+5Kjv2Jzs7Mz2zwx5UpEAzraO2Y6aaWTen9x1CyB0t1yHO\nbiybvhqknh02m0g7p7equjfUvxorwCEs7j90rJ/UJKimIUOgXzPZo50nJqZlEimjKhun\noTOxlzEjn+sayrc7tjhNlUgXqqwXK6otOdbjpJpNKqS3HS2p3yfISWCYNBymYhdIoz4o\nZaaYqB/QmiEXprYYS64gs5oeLJ8qIK6+t7Aks49rFaqdGhugrB82v7upSBzIsRwrncPe\nozGolB8dm7ESJ5zMGzq7r6scJp89Gq+aPrqjLaiaGh6c5hIqq7Q+HzuXnhwnm70ZPpq5\nNsC+nqEYJpteETSvVL4hKpSkGTCZzhlQmro4XrucuBQxnSwVRX3NpiQskqEaMJq7HCer\nnMwjxZnNFUKdLRhgxlbOJOKSwBm2mi4qbq+cPSCqnCsSvaEgHFTGvjMmnpQtKJ2tKT4z\nvJ0nHaieLxfoqDcdKqyvJC6Zmic5mqwtYHy2qiEqnrAdPq4+LR0sp+4eSZSmIMWXqzY3\nyqR0GlCgNCDa2UI7GDCdShs9m6YuTKSf7SqumzcXwp0pHMLGOUIj+aAuHaujNmivpp9D\nLaaeJhiwqh8eY75uLTSgqChQoLRIy9mrpCcnqakoHPy6MCEzsOkgQ5qtIc2buT/A07a0\nIzaj1x5AvDgrIDyrPx3blbYjsJu6P0zIrToew6osJ83jVD0hzaA6I82esznLqapPNq2n\nJxy0rh4kw1tJTTOtpykvo7Y0zreprTE8pq4cH61sHSvQwuI4zJ+9Lr6n10zb1Ke7JF+h\nyCAut1QrL9OxPCyrnT8sqalARvz9tzsptq4qLMtIMSsxtroqN56jLUimtz44Sr7bKECt\nWSpO2kZNLT6kvyp5oapDXLa3Sy7PrTghyqozKtfNTnE+zKdUMa6qUf29tro2MLSwJiC5\nvicwzcDJTVeqsDlmr9FAUVPCxik2rb8rLc3ZOjn9ttY3w6G+Lr+qXjpUWs1KK9auPzHN\n3j84OsC3ODSqpENDrbdKPEPU3y45uuY0T9N2XzhGrsYwXquzSFm+xkg377s+KtSzPjbR\nzmlvRcywSje2s010w8DWNzu7zSkxtNA0W8DAzkvxs9o43LrtU//ZvlowebhNL0bGeUVb\nxsNKQ7m2Oz26wkVNZnrjODjG1zRFyulPSNa22jjgrMk327bZSktrz0w2b8VORt3Kyu5L\nw7NWO9S52z9dyddGQs/OODbMzztD3NPZcVq/vkNGws1MW9nI7j5PwOgzPsPjQlzNwMhl\n473eQmbQ+VlW7cBzOWXFWzlA3ttXV82+7k3NvE89289ZT1fzylpDzcNOSt7g9llew8VQ\nV7zASU7R4FZITN7rQFDPaEti7NnXVvS80UVmxdRPU+XRZkZv0Eg5bdxGTPbdzc5uzb5j\nTdPXVlxp4NpNS8/UP0XT9E1f7tHL/W3G0FNv1+1pXV/U3kVTzOJKTuXdcV7szd5T+sxg\nRmnoX19gbNTzTfbUVkxjYm1rX9TMY1PRzlZX297r7XDe0WBT4+ZZXXfr311bz9tNVtvl\nVlNm8W5RXeBtTWnacF/55tfXcOPN+Vfz5mlub+3ebWPZ2lRU6/ZcZffe2XRj33xOVFpW\nV09U7m1NY9ttT1rr4v9p4tHpa93TfXbZ3d/Z9unP5XrU2n3r5uvd/HnW3l9913BTXmJc\nXlZX/XBXa+9rYF1caV1OY+1ZU2/ocV5r7eb8dODbd+/R2eDa297ZfFzpelZo5fDx7fzp\nfVZbblZKWm1cX3D94u5aYP1XUFxfYGBbaOxeWe/oaWD54Ob9fd7ebW3d4mZ66e3p8XDr\n3m7/2t7t5d/b3Xz64O9cY+j9aPfl5u39fOv5Xm3s7e705dvpYG35WlBXa2hdX3PzbF9p\nb15ZaG5oa2tw+XNcbXxcXnB58+90fX1mYGZoW2jo5uLf5ePlbmB9c2J26+Lf6fDtdF5j\na15bbejd297Z1+h38etteejm3d3l5eVxZW9tZWVufP92cXRmWVlfW1ZbZWhmXltbV09T\nWltfbPTr8Xb98G1eZf3w8enb1tvg3t/o9OPb3tvb3Nnd7enoeXZxbndxZWttX2VpaGlt\na2x2cGhoa2NbWlpaW1507e/r3+Lt7Ovs7/fr397l6On8bWhoZWl0bvrl6/bt+W1ta21z\naWBlY1tdXFdebWlrfXxp+nxRXvn562t00crR1vFlZV5UVF9gb/Hw5dva3t3e4uz6+XNt\na2JeW1dXWVtfaWx2fW1maWl3283Oyu88Ozg3ba2jp6y8SS8qKSoxNzo8Vryqo6SqvVM0\nLC0xOU3Gt7Oxvt1TSlbgvrTXLyomJlCmnZ2hrEsgGhshN8LGaNC/xriqrcBQMCo43MW8\nt7i+2TonJCtaq56do699LCEhLGatn6Y+JiAbKa6dnZymQB4YFRs9raGktMz0T95oLyEf\nISzMo5mXn8MuJiczU8Cpo6GjsTkgHR8ww6qkqLRaOy0mJCu/oJqap08kFxQjw6Ocn7Qw\nHh4u3dbKfTdWrqGfnqk/IRobKb6kn6CovDQhGxom0KOanKpAIxwdNKeqwrRRKS9MQOmk\npLaxvysdHx0mWbSjnaCsrcI6LigmKUPCq52cobTrMy03PEJD/cq3q7hZMSYmLUB8vbaw\nvjAuJx0wsJ+dnaNWJBoSGkmsoJqmYjEuL0zKSkA/Q76mnaGmty0eHiM7rqOgo6xiJx0c\nIVmnnZ2maycdHSR9oKOwvi4eITe+pJ2fqsAtGRcdJ8+np6qstrmwxjoqISAobaealZmq\nPiEbIz67qqeqts0+JyMnM+WxrrbXPDAkPrNKTuYwLc2qsKijwzAoIB0208mst05GTUXM\nrbCzvk8zN/zLt6qzVD4vL9awq629QCwqMDvsu7u7vWI4LC0vJmmepLdzKRwj3qSdnJ6t\nOxwSFyb0o5qgrb83M19RRltAMEC7q6Odob03HxkfPrCgnaO6NyAaHi7TqqGktzksIBoj\n3qOYm74mHBcdyJ2cm5y2JxkVGz6pnZ2rZj1Wxbu8SygjJjO+n5qan8gkGhkhY6adnaO6\nLx4aHCrIp6amp3wmHRkdeqGYmbsnIBobXaOenJqtLh0YHD6upKnPRk+/rKSsViofHSRX\np52anb4qHRohSqyfnaGxOx8ZHSpjqJ2coWYgGhUczaCYlaoqIBwXL6aenZqnNhwXGz+o\noKtrMV6xqqOoTSEdGh1app2ZnLkuHhodM7ahm5uo5iocGR06q5+bm70mHRgaW6OemJxg\nIR8cGjymn56dqj8hHSQ8Xk89ONCpoaCeqjofGxcdaKadmp23Lh4aHC67pJ2bn7wrHBca\nPqafm5rKIx8aGlSjn5qbyCYgIR0jWaednqaqsGApHRwfICjToJqbmqF0Ix0aHC+vnZub\npNcnGxgdMLCempqmPR8YFymtn5yYpjQhHRcf0aSempy7LCAfJyonO6ibnaSnqXogGhwa\nHUOnnZ+go74qHR0dI9mjnZudsTEeGh03rZ6bnbMuHxocRaaenZyuLR0cGiBRp52dn6O5\nKRobISYk4p2anqGjwCQbHSEgLq+dnaOhqzMdHRog46Sdmp/DLR4cJE+uo52dsTcgGhw5\nq6Cfn6psJh0fHyRMppyenp7FJB0dGh3WoZ+jp6e2LR0dIx8pr52enZ3DJyEeH0CxpJ+j\nrMM7IxsdO6ygm6BfKCEfIz2uoKGgo8IpHR8gHjOrnZqasC4fGiA8QMqjoKenqUIdGxwb\nK6+enp2fuSwfHRwpvqOcmp67MB8ZHlapn5ygvy4jHx8p4qefoKCmayMdHyEgNK2dm6Cr\nw0AxKCAdHz+qn5ud2SQjJi3Ku8yzpqS/LSEcKbShoaev2ywhHRwts5+doau+PCQeHiE3\nsJ6hraSk8CYaGzG2naY9Ta+qYiAcGR7InZqhqbpPSi4fHCS6nZmZsyknNi8tXa2hobYz\nIB8nN1e3p5+dtiggJiowKjCsnJuerVEnKzQjGx0uu6GXlbQjITdFvqrjPbihqjEcGiTA\nnp6rs67DLRwbLcWqpqu7zj8nISQzwKuwubisrEYgGyFCtKGqV8Wnq00nIR8hW5+aoai3\nPUbFSyYk3qOdpk0gHi08Nj+6pJ+uPCckKDdCUbamp74zKjM5Oi4uxqOdpMM5JyvRYCgs\nyaqmoKHIKSMsOV23t3TMp6DCKCEr26qqxV3faTEgHy3Mray2xs30NCgqPrSrvM/GuLRW\nKCEq7LOorVdgraxrLS0pJ9mko6qzxkI/Yk4tKXGqp7BOKCc2Pz5Nw6yryDgrKzRISVS7\nrbT3MC1CXk08SLako61iNC08zk4xPrytraSpUy4vO0nPuMhz0LG0OygrPbytt/RbWz4u\nJyxZuLG0yX39SC4rNn22tszZzL7POi0uS72xr8NOzbjQOzM3MT63qq25ymU+S+BeOjvA\nrbTJOywzS1RQ/8W2um86NDdFXmzWuLO+ZTg3TW1fTlPAsLHGSDs3Rc7xQ168sbaxtFYz\nMDpIa8zWVl3Dt+k4O0rLtr9eRkpIPjQ2TsW4ucPbeVk+Nj5jw77Zae/TzlQ9PFHDurrF\nVmjGzVA+RkJDyra5yv9RP0VpaUZC07a5yU84O09gV1/awsLpQzs7Q1Rt38K6wOBGQFr9\nX1BUzLi3wltDQEve/Epbybu+vr5bOztDUGLX1mv8yr/pQENR2sDJdlRWUEhARvfGwMjc\nZmBZRUBO5sXF5ml37fFKPUJlyL6+ymZ513ZJQk1NU8q+w9ZpTUNKX15MT9HAzXBFPENa\nbWzr0cjOZUZCSVnz39rKydlrTE529nBx3sa/w9dgVlnu12VW5sjGzMjZTUVIT1n83PZp\n3MjMXElPadbXaVBTW1lQUG3WztpxVlBZWlNg6M/K229z6+xdTU1d283N2l1Z6+ldT1ZZ\nV9nGzNr8XU5NWVxRT/fN1PxTSVBv+nrw3tHT5l5TVl3/TVDFxuZx2cpCRcLOTV/FzldT\nd2VU9M3tUePFzt7aVEJDVvzw5ejc3tzRbkxLTdDGP+u+TWnRTkr87fz0c2nozVtIW3zP\nXlS//TxeyXFDY8rZaN3afFBo1mVDUObT0dfP605T7ttrcfR80dfcfT5fwElQxcpbPkzP\nzVtDTtdp1s1KXWb/bTxMys9gQ+O/YFvZXU/99mJ623pW2txpc9va2dBdUHTZ5WBZ71pQ\nvdBJw9lOfO/JzUo+W8nDfGh0WdTiV0pUw91KXuPT00ZN5ltrY05s21lb3u1IW9k+VL/8\nSLm2Xlp8RUBGPkM8Te1K18LMyN/Wu7nK4sPLLSu9uDc3s6rLxbbD1E0uOF80Jy1Fa15O\n07e70L+zwNnWSj/6ST63zic7p7g4y6anrq3ZPF46HyAsJyMxz8qtnKo/zav5JznZPz15\n1LOktCYgvqsxJteno6vPU8jILx0n1mI0673Ip6NGIzzbMyhFv7eqq6+koDcZN7ctICs3\nrZqtN8ijvSgnNks+JyZJp5uxJjqnyicu1K+nsWbApMkbGjQ0LT4+tJeXr9yxrVEjHCEt\nKycns5KfLFefqr4vHnydvh06ocAkHSi+qmYnQ6OYpDdGrK03HBsnPTsmO5qRrUOvt7TF\nGhfUoWIp2qexWy09s6tQHTGgnUYqSLuoVhkayLErJr6bm8AqPq2jRRojsKNcKV2nr0gr\nMb+vLho7o6zT6UusndQbJsL/KiY+raxQNOydnD8j1qevViQurbQoH1ur4ygq3KCjXizT\no6ozHzbA7SwrYrrARjetl6Y3Q8LDtzAaOKvbLTTTscU2M8astyskw6nPMTA/v8YuKsqu\nejfbp6OzPjPcrcIrLOm7yEk8wLHZRVHGt0ojLru35VM+zam7LjPQ30U7S76zzUNAuqbe\nK0jK28o/M8OxSC5ut+UwLD68sOAxPrSv8TtN685NN1fFw2lDvaGoUz7fU2BCIy27uz5I\nw8LuPzdpu8A7KVutwj9KSn28SzDir8g77qqns0ozcbr8LSk7v79aQMq3W0JIbbv0JyzF\nttvlW/2xtzYx1r/XV8q0s8lCO8ipYyQ81kLU0DFwrU4tX7jPPTQ7zLHeNFmxt9s+Pmu/\n3j7NuMDPSuysrWwxNj5CNCk4xsXgYum5wl/5z8bARihbp804ekI8wnwzzKrAUcizsLhN\nNEr3NikrMe/CZk3Dt+39zsy0wjM02cPG1kBMvf0vOuvRvs7xubTRWVBeu8gnKvRAO3pD\nSLfFO2Owt+xu67+00zxRxdZdPjQ/1HA+07fDymxfs67rPj04QkYtMN/NWWvgwLbK7sC7\nxdY8Pba2RU1sPUpLLjjM9ztKzL/A90l3zFk6PkvUv8xpzbz8VtPNvsVGSMi+wr/b5bvI\nPj9bS0s/OUxbPjtASN7bNjvFzd/Cz9C3wFHpvMJuVFrRwNNjzrrAymtDUOJXPVRuQz42\nNmLvQDs/Q153Q1q8vs3Dxr++5mPW0NnmT2i3u1tw7FR0Xj9TyuhKWdvZ60o9S11GPEhX\n3cXN99TC4/fLyr7GVGPGwsnOYF7QVjc9RkJGP0BeaExNVGXO3T9Oydnf02b9yetO3sXN\n7XPx0MriadrGytF3T1d5VD5KUENFPkPb1FZNV1ve02Pjvb7KytDOyvRd5uL9c09NzcZW\nV+9ddPZKTdvtTVD03+xeSlD3b05a48y+vsvWxc5i697dz2lMd9Pe91tKX/FGPktMTEw/\nRVlOSFFo3MngT9zK5d7ib9bMfWXWz/pUUV3r8F5i18rX7V9UWWJNRVZXSU5OZsrK5eja\n29DXY+bGy9bR1tHUY1FgaV9eVl3NymBcaFRZW0xR3t9gad7W3m1TWuvvWWDg0crP7Wnj\nelFj8+nbY1Bw3vZoW05edE1GVl9lemJ61N15+vDg13BP8NT07etp8eBdV+vfc15dYG5m\nU1Fu5vpsW1Zea1pW/ens3d3Nwszl8H184/Ro28vW4N7x8WxOTVtcVldWZdrtUFNUU2Bd\nU23Z5mn019ne9F730dl53N3Pydb0YmxmaWBt7fRzbN7XfFZQVGllSkxfY3l8X1Rp/F7u\nWW3C2VPRzejKX1TNSF3IQkO98TfJu0hZyc1fTsnGPDTIujkx27tTO9e520VWysZaOdGv\nVDTFsUIz08NCNmLF/DNIs3o06cpJY9DL0T/NtEo7vcMz8LNTULvD5c70vb87Rba+OUjC\n2j5Ga97uPELFvjdFtt47V8D0N0rD1khCurE2PbPLP1ztfVdOwPM9wr48TrlRNs3UNlO+\nQD99S/fK9z7PtmhG3NBpRj7KvzhGq8Izxq5UO9nOZkVO7NNCO7PFMW28/F19xstI0MBC\nSMBtOci+QFy28DzF0UZKWUJGyFc61LhNQ8rN0VFNu743aa18Os++Sj9NTEk8OkppLS7K\nYDjWvM2/vsrIu77WvbbG07y88VfX3jo+TT02P0UtO9BKQL6swjrAp9o7rKZF9KS5QuPN\nV0A9Qz8xLjY5LSwxPEp9vfFcqK0+vaDXPaimU+OwxT47T0AsKz4wKTszKEPObzM+oLAt\ns5tXNp+pOL+t3NlWP+g/KkJdKi1MPDzNuTsxpKEu45i4LaeeSGatxehaTOw9Kj1QKjQ/\nLVOt6yRMobQkzpr8LKSjQs24YtljNl5oLTZKMC07MDy3RiRtqa89QKCkNEqdrC/Lqko/\n7jszPC8tNi0uNs+2NCrKpq04MZ6cKzyariuzsTbOdCdO3yg9bSs24GV2SC3tn600OKOd\nMDOdqy3TrVFG5T5CRTQ+Oy04Y+jFRiq5nbstPqegOCqnpzNerUA5wzowVjQuTTkuVsrR\nSzHRpLgxTaegzzSnozZIp2Aq19k7TTczUDgtQFdrUC/Go1AqwKrAQ0iqrTBlpFsrw2Uz\n3jwt20wuZWI/bkD8r0MurqdWTcutqztDpsMnxrssRtowTlYuS200X+1KtlMtqqM7N7Gw\nzVZurrY08a86NMw5N9Y2M88+NsjKWv1Qv6jMOLenwEbIr888XbpRMFzbPUhMOkJIN0Nb\nYvZFwq8/PLGt3EDTqrNA363ZPspdNE5CM09AL0hQOkJlysNQOsKqxUjWr75Fw7NiQMO/\nTUA/P0o+OTs7PUhCSbvmO7O2NEy0ud1N762vTcqvW2W+OjFTMzfUNzDw+kVDerOt/TnI\nsbz3yrduWbGvYFfCzd5iNDQ9Oz5FOUNPONq/PdmowjlbwrS5SG2xz/m07TzCzkbXPCpR\nXzM6Qz4+MzS8r9rFtMJs5r67YEPDvHzUyu7Mw21OSjY8RUVeMy1xPylesMjjwrez0Eje\nzFv2007jusi9t+Ptym07N0BgVCsnQk0+W73C2sa3rbhGVsZfbcZLSbq8vbbKad2+zUA7\nUEUnJz07NjtdvsnlwMLUu7TUSkZ0yMvZUNuzwF9ZyrPFUFQ/Ki0/NDA3OvO+4+LC4r6v\nys7Dzbq34kXpxelUU762W07UVEI9MzY+NDRCPk3Gu8J839fOzUBJwsPiW+PDwMW3tmVL\n3nBJNyszSj1IZU3IuLqzu9zKtNozO0k/ODBIxu3et7e/u8PgzN1UUDsuOFlKVP1OwLPd\n4r63u9FzdEg3T+BIRmnTuLfT0Mpz2m48Pjs7VF07PsbF9uDOvMNNXuJFPks/PVFTXM7K\nvrCxyNHaTWhKMD5dSD4+Svzo3sDMUebI1/lKP3fcXuJ9ZcPCxsDU+cnRS0JwUDtXP1O+\nUd+6+cbGSNP5QulKOEJNXXrbbuK503272da2ZUrlQEDW1DlZtLvI3M/KSFDeSEg+Q+La\nVEnRw/BL1spU5UY+1j8/bz7T00K9yl63xdTWTUZXYDc7zEY6xkpKvebOw0xMzMxPPmDD\n03nTymDez8/GcV/Z1lxNXE06V9ZOz77mvbtcxtY+4EgzTTctPk9U6MbXt63bw63e3rxA\nTWk3Tck/Pb3Jzc3p0N7FXyE0vi1Cxj6+q9xKt74+OzQtNjEnNMJe1Kuzp52uq6TDdEUu\nNDYrK17XQsm4yLO8yrrNRUXxPC9XRh0rrTstrKC7qaout7MdIz0jHz4uTJ+zxp6h8Lfb\nIz44HjZWN7amq52cr7GsQDBCJCc+Jy1IN2C3xsOtscpRs7sZHr0oHsa7tpejS6iqLCc7\nHR03IS6nt8+amqSaqEW3yScoKiMvPje9rcm5rszCw0B5yllNQDY7QDc7bb82JqSbKDGk\nwj4nF0KdNiemoKmkVya7wxcaOyozwzq0lKdAtq3WST1FuLPTwq6twzYxNyomJirXrK2s\nqLPjNEDNHRm5yihRTraVzRi+oyooRSqznEyzmC8do7MhvrQ0qqEuKLzdIyZO68u0yNGh\nnk05rbdKX0A8yukzTLO3KSOssSRXrsqsPBVeoCggtrbJrTAd2zQauJstLKnQUbA/Lqmd\nyTO3rTsmMbe+Ix3Kmq03w7GoqS0abKQ5IEagnUApyu47KhvWlLskraNCOyga76EzRp9X\nLKatLdvIJzfPKCHAptRQtLjTPSq3mbsZKqpDKz1FqpetJFCqQBwguaq8q5+e0Roct74o\n3KOfnK4eI8ojF8ahPsCkXsaoLRzOpzMmxbDK0DQvyywVLp2mSbCuU1MnFCOsvzusmaBP\nMS8nKyAzl5kmKqDTJjcu2ZWaNMCdKhpeOC2otDernT8gs6MkGcadue2xqqG/FQ8vUCAv\nrZ2VoykmZioVH7Ogo6aqpk0VHc5GNLmzqaBPHDa8LT+jrdmptzTr6CYouq47MaaYzRwj\n9jkkNrOYlKkxPmkmGhs3pp6wtJ6mMRwcJMhQHsuXoEpt6D/CMRw/prs9TztlsVQnPrjP\n6MrDxr6rYBkqnaMxPqao5iMYJru4N+2gnK02LTxLKR43qqeusda+qj8bJ8i+wq6sqKpW\nJyQ4zug7z6mtv1czOHBGMTmtnToZRaa+LTHsoZtIGza4MB0hUaSmbTetn1YdKtlAWVEw\nvJuuLVa7QjM4PsituPlc3snrRVrK1NvaVkxowr4mJ52eJh+7qLvmIy+jpyohuKS7MzFb\nr7sgI7GmSTutpGYdJL6rxlbTq6BpGiDQSC3btrCs6CtAvT4u+a+3Rr6mKxy7qkI+11ut\npDMfSrk0KDfDqKntPa6qNiA3yfw7MaqXvx4us73uPjummsAkPs07PD5Rs6jZL2PGNDSv\nPRU7lKYh7qTCuy0PIJ+zH16eprwvHCmsUR1NnJ3KWW+44BoerZq2PfS8uzYcIL6t3caq\nprQ7JjHMbTvWp9ktn6MaGq2sMMO7yJmgIBu+wyQtzaqdoy4trWwkLSEdsJ2zpJ39Kzof\nGC908K2frtpLKiAqP1O+qqq0yD8mRcodI52V2zesyzs2Fxupm2bNnaR2Khwd0bE6w52s\n26PAGx4zPrefsbeesCkjMS0t/K6mpqbFLztTJBcqpJ231KGdPRQaOEI3RbeamN4cL1sj\nHjSum5q+N71fHiAuJumboa2vTyEnKx8xraSpp63ZMyQjKki0qsC2mqQkFzuvKyqjlJyz\nSDE+NBscv5ypuqanzykaIM9cJMuaocOnzB0hIyD8prjDp7E0JicmMHC+samnvDkvQzAc\nLaOau0KnqiQZJDvJtsawm583Hy80Jy16p5qkPFapQxojSDuwm6SkpkAgLS4mPrCnpqe3\nZTcuKipGtLTbr6H3HSBiSyRGn56uYzY4QycbM6qovbevuz4hHj66OzOnnLbQwyokLSg9\nqqa3r6rINi0sNlvMu7StsFcwPE8sLLaeqV/IrEIfIzR8uLnCqaHIKSo5MTNJv6ekyzfG\nviceOkpPqqi0r8ssKj0xMduzsbO9X+VIJyc6W7+5w6umQiE21zYtvqaqvFQ6RUUqKs+r\nsby3vds7Ki7Pu0b2pKbR3lQpLDc336utu7O7SDMwMDzg5dSsqug7Ozg6LzO2o7ZNwLcz\nJC5XvrfKyquvOys4PTc+V76ttFZDydQuKkhl27C0vrvmNjRFO0DWxbewzE3pZTMxV8i/\nvr+0tEApN95GNMaqtNdJPE1RMTHNscDNvcbjSDE31stCX7Cz7VdFMTlDSs2ztMDAylpF\nPzpjwl5ptrpeSklQTjdGtLB6TMDLNjBAfcnWYM671zs2QkJCWtm7s8ZQ7887LT5Zab63\nvsDRTkZTRk/NzNO8xUpw2Ts6XuXLzeO9uz8vReBUQ8uzvulNSGxdOT7TwNf91NPfVD9T\nxtFM6LjDbV5IQElNXcq9wtDW7UlGQjzrxWjLtspRSEBOSzhltr5jYsrtPTtJ6c3eXtPF\ncEZFV+5tfMnDzfdNbnY9O17e4MLC0ddpRT5NWlDp2eXM2U5e4EpU3lrAxj67yTpbPvy+\nS8Ctwz04wN42+sBIuLEs16w2UF5Lxk05y7fZOON2PC9KrW7X0EbAS1RmNs3aT83AvjZA\nwEVM/NDGyL1pUNPoYj5JyN/d7tDFT0ZXT0JPxszNvkpI5UpQSEXPzWvb+VB6XEZGSn3L\n1OjO9jnLyEZJRb/XV8/N4z53zUrKvlpg1sVLP9DeZldoxtbP4m3jO03CU1TCwNDCyFtR\nSjc/v3dGxrzLVlR8TU/Xz+zIv+XpbE1LVDxGtrvp5kpKQy9W1ki7yixcvjj3N1OkeifJ\n5T7NzcMmMKc0LaOtvrHFbFsmKsxPPLi812lewnZQRjy+qs3DyzrKwzTUtmnpvUPDtC7I\nQi2zPECqN8KpMyTo7UjQWqA+ErCjHkik09evLTifKR2k1izQSDtQ4NbrcU/8wsrJbbqt\nPUCtrzlKwk9r0V9tdG3FSTlaV0tMvc8cHp6kIFyXnyEhwDshLsOgsy/ZujQmN8jFvszN\nqvwvSk/Cz3qgqjR2wz4oNLqtW02kujy+LhUwnck2n5/ILTSuPBQcp+8co5fs4sY2PCgh\nuLs5qqPRZk85dMo5t7TC2Sdptirumr4XLZinIc6b7ixDMyEkwpvIF1CwGzShV0izobYh\nUKE+Ghw8tOK4n57PJMOtME3GISGdnSzCl6vz1ignPicg8J2jIxq9/yNrsaebq7z9FyCj\nSiSspzs8vD4p07s9IU+RnECkmrsxISc0JB3GpDS8mDwVQD8aP6Onnp1cLsMqEh6nmmb5\no8AtJxwatKHIoJqkqjgaLNkjL5ytLMKftx0SLEgjTJ6XoL6/zCcbSD0kr5mhrTcUK68h\nJJ2Yq6mftx8UH8XDQruooZtlFB0+HySuoJ+oXsjPHSC7Qyeonyu/lGAkpN4sszkntvod\nt5oqHbTgZpSjGD6fIBy7NCytoKarTSpMLRwaJp6ntpqfqUkdHC8tHc2cuO+jnTAdrugU\nJ6c+OKu4qZ87LqO/HhgjqawjKp6SwDScrCo8KysoIO+dqsq6qZ60FByvJhU+q6GdrKCs\nGhXIzhktnKnCpJ7aLTQaI7o6M62s3u++rqYsFLuZKBm0vzifrhchn6ApUKfCqL0dFTah\nt0Ohnbc2ICouISqfjzYcmaEbJ623UTcb25I8G6+gyO67VD0dEeiaLB+nnUVAtyYknpw3\nHeuzI1uaq0qrnT8bLDwvvq2tpsk5zSYP1pooJJqeKlFeLqOmGiSfwzu9JyScmt2cnB7u\noBoVeicgoJwsKq+kUCZNbSgfNMM+K66VoSkbrZ8nPKOqn6MbGq8wEjSfsMLRID+dPyOp\nbSifpCMhOSwkv6yvmZqqoaoaGMBDGSOvp7O7vqe8JE6tKhcppp1bJywqNM1NzpiVraec\nSBocGjOe0CCnoS29vhcnn6tDqp5ZJB0cOFApwJmVo7umryAUHD5zWb6tt0nerfcaGcCu\n6Z2eKh4zKSBFwq2Xmq6qZRQesCcvn0VCmKocH+MoH8WklJFWH3pIHh1Gp56dpqS2HR0t\nK0q6VDvNza62Hyf3HSSXmCdInK7DMRU7nbrDm7odei0do2UX6J2xO6qtLigXF6SfIzCX\nl3MwP7+jXSeutDZROzutqD8uMTOwzUKgqRwfwDQgJzemkac0p6MnNMInTb4dNpqxGims\nNyu5s52VLB2qRRocPaq7yLSrmqovMS064CgfW6yzwjQ0wy0jo5lAXpymPx4VKqnfNqGb\nuq2+IEy4HRuzo0K/qi05KBRdnclCn5WnJiBZbc4oJp2gwJ9eJ6+xKicnObPe8ac+GC/t\nLileppeeLSuu3iBUtjemnSrtmjAay0YqSju5nrseI633GB6qnMJoQ62pLkwuI62nQEWq\np8m0PCRJJDGh3CfWprgtHiyqpjZspsm3tic3pNontKTLYLvNQicaLabMI7aZtCcoQ7+6\nMSi7p6+0TTe7rds0M1Ozu2W5yiEmw24kNq6qqV4mu7MrP0IstJ9JOKGpNivU1yddt7im\nOh2+uBwZ36rCVD6usdpGKi5JtsI926qprOYvQD4q3adPL6+2Mz8tNrpbSLGwurDXJj6x\nwy09nao+s60kLC03oMAqtqO8LB1LvUAzLLiep7wjN6rUOz/cvMO+u7k2Ht6tLylUuKjG\nKy1cSCo447+0zE/2sMgvRWU+v769p7ovQLM0Gy+rrdwvMM+2PjBQfbSxTUu3t9BoPVnA\nYtStuj7dr3QzLTHGv0U/yHNK3T5Js9ZLVLy3XspDQ1oz4qqxXsKnwzQwM1ldMTjCxebR\nSj6wtjAxS97FW1DQTjnMs1tDwq+z0Tw55l83P0VRyeM4bbfgUG9FT8rUu7ZGLGaxMzPP\nsbC9xU68/y47WWW6XzRju1w7VEhe3krUuEM/trpJNkPWvr3507S/7Uk7abheQl1j9Hpb\nPlZIPr67QFGvxTg4X1NJ2lbNtMXsXUb8vvQ5XcxX7tc+a/0+uFstwrbxvPMtPdk7ZcDG\n39G+N922Oz07wK7vW6qwKTC+Lz000KEwaadLv1Y/OnqqQDRWwq4wRbE+NkKtuFPKSsu5\nLeA5Hr7QSbTQTVTIxtAuNrbRSLY+QLZGQ7/Tr7dgMS7Fu7pPLuu/vD049lO2rzFDSDvA\nQz/d0U15yENFvtlovr3IwEo0NjA+v6yvsa7jTUIsO9vcvLTjTkg0N0XIwlpu3rizPjDm\nvsbeMSdQt7v8Ok7Jv8PZzsjK40AxMEjjYmNeyLG97zc2T1dGbdHIt8XtTEA4OMu9wLe8\nTjAxPry2SuOxwk02MEi2sHFDS97DXz00QODAvllbyMbJ601WzdNGNz/XuchW/Mj0QkNt\nxbi7z81mOjw5P9O3scJXMTrg+l/Du7jFRi8wUdFtUXbtzMPbXjw+195JNjvMtLTDbdrI\nZjkzPtHJUV7pV1R8TU3TyMjG3NfP4jw4Zr2020pWels4N9uvrcVIN1q8v8ZjNz7fyFk4\nabvAu0IrPFPJyeLayrd9LkbF6GDp8GDJXzNJXk/xXmjCvbxZLU66tLTO4lpNQzE3N/Su\nXTEtM7astNFAz818QjTGrbbJPj981+g9b7TG1NZUaObWUSkqSqqcpF0hJnA5LaqtSjw2\nMyvPrKmduzY3MUK/wsbWLipLusXov8XISC00Pciz16m+HCbXrJ6jUBgj/DG7p0pJTSks\nSrGnpqRRIyMq0KimszsnJC3Io6CwTzA70batrDwttK7NHRS+oKCXShcvIymXsCu/OdZx\nxq0ewqEmwzohqJ6xQiwdHKmdqrAtKzxPvaagtzskIUmgpyYYIfmal60qFECdvDYUF7Cc\nl6MzFyCmnbYhKizGmT4cTVu7mZ8nG9C0tJrAHycmQKyhrVE5Ixwqu5qXoC0VSZ6rMBce\nvJiVTBght5edNhcZ86Gaqh0b16Sgtyoj06O2+SgbPqakuTEhIbiatyojJ7mapkr8vlku\nGhoxpJSvISROpJlKFB27mqM7GiSumpq/IBs7naQ/KR1Zra25JjHGrKG3OB0bRqycnTcj\nPb7IMB0c3aS7vrm8p6YtFTOus7M5H1GcmMMhJmadnTwdHT6qn6wkJM+tqL4/NC42M0vF\nybO+yLY9IRwbU5+drUZNxqvAKjE0MEpISKeXrTQ8OMik7x0e0KOo3B8nsKGh0SsqN/oz\nJzu2naFNM0NJNConMK6ju8bAtKpaIyEucLvIQ8Kwv7Guu7vRIR/ItsbFMSu2naYzKffi\nQCgeNKqapjwqLWi/OB0ht5ukSic2uKatLSE51sJjO9aqpq/MZWXNTz5bPzpCRcyhoEVR\nxh4dSGbFnZ0+KS0pv60uITe0qq1WJkaupq0uGiexo7BKJy6zp7G+bda7SiwtOVzAvlzC\nobcfHUummp4rGj03ZakrHL6jWsiuKzO3U2ituyQk2bamrDAfLa+dpj8uYLityicr4NdL\nWbBpHSe5n5mdOx4mJrqzHBrfoZudOB04V76k3S4/OzetpGk7MSvQnalWSD7pra5NKCpK\ntq1GHBzdnJefQC3RLSo8ISRTzcOhq8a3JCann8kkGCSrm6s7JjGtrL2+vkk0S2W8reYk\nMLDDIxowpJidwjQ8NjjlRScdJ+Wqp7CmVibDqdZJPiT9sDvbwys8sKSaoTQgLtyjpzQz\nQt7DJxk3m5npNrertice4LcsGh5IoJqhPh08qa5WMS7W1yNCqsxNTvyzo7o84FbXrNYx\nKyraTSBAnao6wK+qqCwhwGkcGzqvp63XV11cRVfFvc03JCmwm7YnKtaxrmDQoMgzaNvK\n9zA3Ph0kpKM746eknVMdTUocHTDXrbfeu7HM375iNDs2NFC9q75GRVlo17Sko0MjSqit\nSjA+uzQVLZ6nOEmvoKE3Pq0vGCBI4j00w6CkurtOMToqLFvWvr5JO9Cwxcuzu3E3O9G+\n0dzxaEAdH6yhMyPCnp58M6atHhImuE0jL6eft7SnvzgpLOxNLztR8LewvK+x1O96bMnP\nQDpRXNdGI1am/SlOqqiwxbSqKBQqsT4dKKakPrqcndAgK7TbJjDL3ki+rKu7Sr6uv+BD\nN0g/M9vFKDGuXyv3p6u86Feq3BkhyF0gIWW3Zs2dmsYnRajJHiq4ViQss5+vO8Khrmtp\nzUgwLU2+KiPMu0xms6at7Du5syYjSkYmIDS7u0avm6lDPbG0MyxWViQqraTKN7OdtE67\nqLsqIz63PCEzvsNT5rStwFG2rjEqSkIqITDAuz5upKrP3rexUyo3zzEmWa22RVesqr6+\npq8wKkrMLyRbzjYsUaqpwlO9qbQ+MT8+LSpD3TM5ra3w7Lav6zAx2u4tN9HITka8p6/j\nrqbXLjTbVCsuU0stO7e2aEW4quxFva95JydDaTgvRb6+zta/tN5Gvr43NuDbOzP6s6/J\nyKqtyHnb0z4tNPY9LFuxse1WvbfM27a4PDBFcTwqQspWOUu2rb1U6LrFRTY+SkM4QMbK\nU7+ruN7KutQ4M0jdPTNT4F1CV8K8XU25yDkxQ9FPN0ZpQDbcs8hZ3rO6SFnDyEAtNGPl\nQkXJs7G3vbu67WK/3zY+5V48QNS+z1bFttRQT2tKMzBIbj5LvLbFbdS8yl7cvvY6RePw\nOzrZ2U9ZwLG52v3Fu9NKS1teT0p95U1WxcZcT+bdPjM8V0U0PFz3UU3Tv9ZQ4spTPkrT\nzVNJb+5Tb7y4y9u+uNBr1sXcQj5Z1+xXccPAzc3U2XdQcOg/N0hZTEJgyMleW8PQTUpW\naUw7QON3VMq7vnlTzMN9V83OVk1i6F5N+tljTezCyvRQ5sjmRj5KUElKetv6a8/Ga1l2\n6V9CQPDeRU/Wz+Zj4MjNTfm730tPbs3/SmnWW2bGxdl9yrvdW/nwZUM7UNroXnnL0N7g\n3+JXUGlvUE9p6N5OaL/NTU/P1FdQV1ZPSk3d7Urmw9ZUS17cWUPezlFT/+BbVNfm/W/T\nxs18SnrgW0pTb3T9+s7K/VvQ13bjX3FPQl30WU1w095m4s3O205b1mtNWdTUYmPXxuPa\nxc3l79bsQk/tX05RdNvb+mB012VRVF3gTU1xaVNLW2ZsdO7P6VHj22xXVuNlUF7byuJi\n1tPxd1/U2WZz62tUfetvX+zZ91/u0c92UVptbU1MWWDpY2POcXPeXWleUGhpS1fOynT8\n0+Dt5dPXzdtg/HZo5u35eWLm1Plj7m9v/GVpW3Hc7FtZaevjbU1R5XBmXU7oYlzKXFDc\nWXD/VNnWZllg3WJTbXZob21l3tTX82hx7/H5/WjXytFt/3Fx3uZbV2/b13xbUE1WdFxR\nYGnT22LUXlHgTU3lTV7wS3nDytPr69t5ZutXbdNvV9vT6ePoX3f65u5Tffdi3WNIW9DU\nZVlo9NDsUF93625ueVZfXEXm5k16W0/X7uvLZk/e7PNvbNveY2hpW+vXa1/m49vN5mtj\nesvgTHlrXtB8RVTg0+BbTVdpcF5WcPPMz2/U5U3uW07Q5WDN6VnK10r/5lvzevTP093W\nX1Hg+l7uVk3m2dpxUWjW5mVoT2nPW1FdUf3uX1ZW/GBz5Uh880vQZkbjVkrwZnHU4lvp\n11tRaOvo7mzrz+XM01rrbV7N11dv39vW7FZX7X1zYFDozGtacFxw7eN06e5ey+NO1FlU\nzFNwylD60Uplxm1fz9/e2u3o0+Be4vFx3FdUaUlK6+ZjVl5reXdNTlZp3kxIZm39X1Z8\nZdnZZtZRWXdN7mtN3Ppext5oyuVK7W1M49Ti3dZ338v64ula1NZZ2ehMWnBiY/BZZsrt\n7O1Wzcp3d+ji4utrTN7TZdBgdNBTWexc4/BR0elMa29Jc+JPadHra85fTelNWnlMVN72\nbNvpZndbUOteSnBu5eVOV+3lXlB2XVTZTUjrY+L9fdlw4OBe4NlX4tZi499Qb9/ocOng\nXt3gVHBta9/e3tvl69/rW/D/TeDUZtplZsjXcWX812b/2l3XzOv3etnm99Zo9sZ3Xc5v\nUc/8WdbwaF5oSkzjS0ZaTVdlV1lOXtz0X199XlTZXklmbeJiUE9KXmVZ62390ezi4+nR\nb2zp7ubgY3Pb3evQ29/ZW+vW2Whtdk7/30xT5mjg1/pgY2vw7FBj3Vnl0dn6S+bWdn1R\nVHRU8+hZ3tb85vBf7ddfdt9g/9dja2xUSM/FeXZe3e9P02hL0+tR3+tfYmhuTmvcaeDW\n61zWyvPTa0ll7U5QW2n5Y/3zafbU7WjX+mni9+3iXFHZ3k3530BZ09ncd+J3cdboUejb\nW21zSEpZW0NDX+Dv3MvpfHzd2+VdVN7ZYnncbd5xXdl6XuPZ9vPW3mja32JfYlBbyOhK\nSl7b/GD5X/DeU1vR7VvZ4lvf2VNd62Bfa+Bt22lT8fff2vPUxdfQ12jtfVtlcGnt/+bt\n8VxTfehU+uM/W83uXk1U7GZUUfzcaUta099e5u1Q389UTVdwbGBGbsvuW2Ds1u5f7XB3\n5m9fWVf29FTbzW1b29NfSFdwWs/WVFHtzcrLxsW+ylBJVkw+WfMnK7rUL9OtybOtzrGk\na0a2WzZINixGWTYoO9FaUbuzuqyurau7TtDcLjY5Kiw/NNs+IM2vMEKescOfqr6uQy2q\nLhdZ9xot1zZRRVSurV6joMiqpNY/RjjaJB1ANCA/31n8ObGkaG2asUWhqjvFXCaxNxlD\n4h0q6Dw4UK2pyvGao86pqfDOSyfXNBokSCYnztYvs5zbWZ2dvaqoxcrIKjDXHRg4Lhw+\nuTQ+na1MoKfDoKZrtLg0LlQ7HBo0QhwusDM/m8hNlLFMlZ5FrbcmNL0qGCs7Ix5W2S6x\noTaqlzuslMDtpj8kzsocHTMoISRFPUOquT6ZnTudl97JpjcjyMoXJm4bHjstLLOtN7SU\nxsyUpHyqsCw2tCsXXTAYLjQmPa3QPZybO6GVu8aozShWyR0g1hwdRigh5rA6xZStP5Wb\n3aioSj3OLh06MRcqMSQ3/MXjsJ+2t5qjuquxX0XgMSQ0JBstKCZMSnmzt7Sjqaeepri0\nwj1CNC4nHSYuIyviPVakvk+YoEqcnE6writDyyMhMCEfKSY50zS7oTyqlMmtmdfIpy83\nuB0h3hodXiEorU43nadGoJizr6a7xUhQ2xskvxcZuSEko/k7pqqzqqSfsMiqwzBCuykc\n+SwVMUUk1rtGo61TlZ40nKQmrq8cQ6wfINwpHS9MRUO+p9O4mL9Nmrcpp9sduz4jwych\nViAtui1LoLw5o5zWxqOzMVfCKis/KjkuI8o/J6/AK6GhKqeZS62dMECqICbTISovNrkq\nP5w8O5dWM57K3KPCvbM+Q1MoI0gwHzrIPD6qsdeoq8W2yruxSsq3MTi3KxxzOhw6WSe8\npDutm2nDnLYvwKs3KrZOIPFPJE43IUJePNy7uLSss6ynsb+9vjEtWSohTUwzPENRRvTo\nPO+zxsOuraqxs7FCTs0qLE4kH8L5INShNDaj60KhUSykqjx5tMw2RmVFVjQ0yOsn/a8z\nTLBN/bfduLnGrNY0xT4nSDQqaNtIzayturG2z8zALSa63iBrpjtFrTk3qugfNP8xRb/t\nwq69qqbF1LS8ODdJKig/OC8+WUhI3MzCtrC2v7a+SMy5OzRRPlnXQ0basdEt1LYkLLc2\nO61CNKOmTbqzN1DKKjM9IUW3MUWt07Shvb2vYL67Nv3sLD88JDlGMODCVvq7sbe+v8q/\nvVM0TrbQN7evNNm2L1GwKya9Pim71DSzzUanvy66tDHa0SpIxk7C2Tu/1jN2VjC9ujrG\nwju9rWJR4kbr3TMzSFBOMypAVjfIsfOuoLatn7b2tlQrPi0jOi4mZeIusapKpqDGp6tZ\nttEzaT4jLy0dMEMqxrQ7saG3p6bPtrBNOzcuPzMoUTsm3c47u8I26au+xqm5wqe7375I\nMdo7HSstITxINMW4t6mwuaqsu7bMO21IJz47IzhLM8a866ykrqjAVrQwOawzNrguRqdN\nM+86Ntw+KUhCOL7PNMiovbGuXMa4SVs/LE5TMEBDOMu30baqt7euy2jXPDhCJykrJuW9\nN76tQrGjPsqtKju+LT66PkO8Xu+2SDa82jNwSkCxtNazs7GnvFnFzVfzOy0/NygzOTFd\n2lazqlllr7er3iq+ulTNLS2/NihIRjxDQkDDtNnDtrzDxfFixd/XuddZwL/TUDM6TDcw\nO03CsLm3q7nUyEg2QC4nNEowISbAtjuxpqyaplatbSExIxw3NzS2rqycp8KqujQ3LSM0\nPz68s7ihobO3yVloMyctMC40Pk5a28rOtrDaYL+nryo+ORr5ZhrAnlaqoOmvwx4zPRsq\nSyvIqb6jnbSqpzk6RiQtOylUusarrcOts1ReV0BFP0NGPj43O+VzMSnUqT+7nTROoDEw\nzxw4pCRCl7jlnb5dtCQhQhwfxi43n62tmrC0oT4w6ygu5i9GsdvAr9rIwEVQ90M+N0Oz\nwyhUySBNsSZppze3nSwsrSYfwEo4Q8OcqcWepFG9tyckKh4oMCrFucijpsOnrj5cUzBF\nRTrZ1lnFyNC7VC3utjforDNGrTAvvickqNcto6k0tsZMux8fvyghqcU2mqM/mqgjqLQX\nTcMaPsIkyq82trEvubEvw6tA1rPgsbEx7sokW70odq03vKMrMKwpJLRDRcI9p6MuvKMo\nLbkhH74qJKl0L56m3KGnvmk41y8gzusmyK02fa9gWdc2Sr9Jxa9IwqpGba4xMKjNMaqw\nNM3rSOUjK7cpKKrLPKOrNq6xI1DWGilDITZTZqpU6Z5WMaHGKayxN1E+yMopbbMkSaAx\nM5/tLaG7Ici6KFOz6brJuZ2+P6PCI9ddHUW7I12kOcqf4PSuSko8JGY6Hs3KIOKtLE2x\nS7rsLqu/KqeuJLCnKMq+I829Lri0OLC5K62xHdymITufPj6dyi2nwia97SNj6DHX99as\nP1CmPi2rVie63ClpNzS3Ly6uLympRier4Cukyyenxiepti2nuy+hxSiq1iO+YCazuSqv\nqjGvpzS5sDDI4ie/0Se3sCy/qjBxrkbRejS7XS2z5Se7xifIcyO5vye4uynGzCnCWiax\nvSqopzSppCu/pCc6qigorD4tr8hOttBovGZOwl88y9k+RlnIWTy9yTe5szbRsznPsC1D\nuSs6ujRDtDdQqzM0qzMntzYmt14otrY2vKpt07DZX3R57VT332vazdHD1GC+wjfusDpF\nrUY2r+A2s+8urbszr7cxwNEry94mw7goyq0xz60zQLQ0Lss8LWhXOHDW5fRpy3BMzHxK\n0etQwO06tL4zsa0zv6wtS7EtQ7AsOrAzQ6tDXqpD66k6Tak4NrA4M7BJM7PXO7zDPu3a\nP0VDTU5AeWlD5eZM7WM/1tc23r03aLY+a63s2612a63rT7NpO8pAMdM+Nrh5Pa64Wa20\nRby4Ol7DPkDOUEL5XExFSVQ/RnNISWxNSnlGPsh9Or7CO8a/N05xM1DIPtuzVtex18qz\n3/C8ST7KQDbuRTjTzlG9sL63rrnDvsv2XGNmRk1bQEhZQkJKPjxRPTZ6UTfd3DzQwFDF\nyTh32zTju0L0vUBfvkndt1D0uVBbvk1Fzk1C1+9vw7/Cu76+vczCwt7LzlNoYENLSzpF\nXzs/3EU+4EU4Vj4/wlc+u2M4u8VIur9KvcZCvsk70eA2bNs688hJ4MVl2cXezcvdw8rW\nv8zpyulRaE1DZk08a2I+ee1C+tlJ7/E6TWU3Tdk9TdBIX8Jl3bnx7bxrVMxMQNdRQNbo\nYMbGzb/FysDT08bXz81z8fpLUVY/TvNIUNdQTtxKQmNFSchcQsJsO8LLSMPGSdPQQ9vb\nPWBrO1fwQHPKW+LI69nI2tDIzsXKzsLO3szoWWlPSFxKQ3BOP2ZXP19zTeLmS9PQRs3G\nQv3KSunDWde+W9y/XvTNRkjuQ0BtTErmc2vT19DIz8nI2dDRdv36VlZXSlRoTlz6SU92\nSEhbRkrjVE3KcUXP7ELc3krNxWbGv3bLw3zTyl1901ZZ6FdPa19f6d7W0M3K0drZ/2Nj\nW1pfVk1cWkpjd0pc6E1T5VNc0F9jyHBUz21R0ehZztZoztFm2dF32s3g3dPrfPFfU1ZU\nU1Zoa2Lr4m/9+V5eZllZcV1QWlFDTFFGSlZTXfdb/NFjZs59XtHodMzZ8MvXd87XbtbX\nc9/Z+u3d6e/l6e96fPF58+b59PNtbW9obfZved3m9NbsXu/8XvPuYuL5UHZlQ1BeRVT9\nU2bZa3bU/HndfXze6+/j6fF8c3x3YHbxaXN8bnd2cHlvcHpoa+1zWV5jUVt3XnPZ3tbL\n2tfM9mXgX090XlH9/Vv5fFFdW09eW1rm73Dj9mxpXFtcW15jaeni997c7+vl+uxZd91F\n0ehGzWBbz3Hp1OXX1Ovez+jrzN7py93p0N593f9g61NczUJWvj5rxjtZYj1lUEjbVlna\nXlZ2ZlteaXPoW97fTdT0Xtxr6eXo1Gzm2159aVTg7VTO01nP5mvOT2PJWnDJ4Nvs3utN\n3l1G+kpC1kZGzz/t30jfYlneYmX0X95bUNZRVNlR4NlQwstCz81O2cn668jRaNnDUVPI\nXO1Od8NF6btaWsZlaWDt20xi0NBI385Ca3BT/F1P3V5X11lX5XxoZdBjTbxGO69LMLxm\nQOL8xXlCvso/aM5lPem/SlnQ2WZG2d07SsBAOcDgQubdbGVCY+JDY+ls1v/Qy23K2Vr8\n1OlTVly+bzG9vzvexm3TU/y7V0rvwN4+s006rUtFudBJT7rjN8i8Q0rF9EZzT1bZSlvI\nVOy95mvI00zx001fXkX0wzw5s+wwv7YzKba5KjyuzzDLtms/7rE9MNlILzNRSDbTxdy2\ntLuttNO3vT5N2jY2TTk8/19WxcLgwL/KwspM46wpGq29Gi2dqh/emMoqvq06KkU+KjRI\nOcm3cLmordS/rV4632k4SPFFybbiu63Iz7nfP08+LT5FPl8jKqO+I1aVnifOm8MaL6sj\nGkU2Ley8yauftM+uvSsoMCwqM867rZ+hpKa3UF4+JCkzKjBDPla3saesJjee1COwpCg3\npC0SbbEYHqCqIHOYuzuruTQzMyMsxVs+rJydoKOquEssHh8nJi67rbmrprOvqq65IRdI\nzR0dpJ4wvq8pXq4jG6efIzebriNZqiQd+kMo7aanoZ2jr67eIRwfHiE+raSfnKOuvD0t\nPDwjGR1dxixUl5W3t6QoGuUkFbmkMemc7iDASxcjsdkqq5ejrqanViYeGiA0Os+dl52k\nqrk2IyMjLUg3JzyoqrGgmp22zl4bESQnGkiZpMmeqi0wLxgds803ppijwK23IR0nIyfp\npqCen6vAUCkdICowWqq3MMWdprOqprNQKhwVGCkzQKSVmquqrSkaJBwb/ayxoZeqab4w\nGB87NE+gmqavsNsmHyMmPc2xn7Mzv6OzUFmvp1YfHR4dKlO0npmaq8rTJhcaHR43oJyk\nmpq+LScdGi9b6KGXocnGeSAcKjlKvJ2nLEOwymY+PaeeNxsqMyAp16qdnJ+wYy4cGRoh\nNMadlZqenbQfGSMcHeymn5qcyUNmIxgqw9O4mrEkQMlQQDy3nKgxKjcrIStjq6Sno602\nISAcHC3ZqpuZnKGtQx0VHCEovpqao5+pNCMhGiC7t76eriktcEktSqijuz5NPyQpScWw\nsbOntyggJyYkPK6empqdqGwnHBcaKUC7nZedpqw4GxwkIS+toaShrSgjVjAsqqpC1q1O\nJys2va2/sKpxKikqKywztp2doJ6pSigfGxwqX66gm5qjwEgnGhwoK06jnauusUYoIyQp\nzKfFV67rLcmxO0KttuZDKC07LTuwqq6mpKu/LiEoKCdXq6mkoKz0NiceHSZRva2fnq3N\nXCgbJDEvbq2uq63rKjDXQEW30zvrtz8tSNqwr7qtrWUwMTEtLki3oaStqro2LCkhKWu6\nq6Ofp8g7LCMfKjZPuKSqtrfMQDEvLT63tk/UyjpCxmU5xqy+30A0TDs65bO8u7q9cTYq\nKjc3V7OtqqavazMtJiQsXr2zqqSz6Ns7JjA+O9y0tLC35jYtRUA5xsJKbbHUN0jfy7vU\n1shQMzM8OEXxt6uotLnCOjE0Ki1OvrOup63ASDstKTBC5sCsrL6+1z00MC5Cw7PCz759\nQ/TlO0jAxn1WO0hPQPPAxcvCw8hGODY+PkbCu7mxvVNFNjAtMVO+trGrttNUPi0tRkZc\nwra6t8pGN0VpS+DC6E/OzT9CfN7CydG7zUxASj9GTc+4trvIz0I2NjQzU8/At6+zz0U6\nNC4+Ue3Ft7DQ3GtANzw+VMW2wNnD3kle5UVF5crmZVdP3Vn8xb3O1s70STs3O05Nz72+\nu7vcSEA9OThK0L68t8J6WUI7M0JMWf3IyMrKWT9N2XHXwMv538xXSlfozsXbys1uT01j\nTV7TwsC/zt9ePUNCQFnPyr/AyN9CODo3NE180cO9vt/tS0M9Q0hWzb3W4tljUVR8SUzX\n12NmVm3ZXt7IwtTm6FtLSEpT2d3CvcPCzlZGSUM/SeXGxczD015USEZDZfrd0c3O2+tW\nSGPcZtvabU1efFBR49fNy9/eY1NCRlRMadPRz8/28FpJTU1Z6dHZ1NDUWkVFSkpNeePM\nyMXO4vRlW1BTUV/a11T/6WLz2dpz695zVlxRdHdc4uLdcGPu+WxvaezT39befe1pV1Bd\nZWNo2srP3NfgbmxWV09gbWt8d+357/NdVON3bX1fVmDe72jr2eXT6P99Xl5a/3N63tnf\n4G1eYE5TU1R319fd087cXlBTUU1aY/DZz9Hj3vdrWlxcZenR6ebefX18d1tcc/dod3p8\n9mNsYmNXVGZjXl9la+136+l86XpeW2BfXWDr19rt4+toXFRaU2Z5/ezc1Nfb3vnT1k1K\nW9xtV2lfV/nX6d7tdmNra1dt5dbT09TZ8eLeWVNi7ube19TX1t5jV1lXTFPX1t7N1uje\ncVdTWldb+vBbbfxzc15XWmhoW1nxXlvd6WJmaV70+Wvl219ra2DLQ1rGW+PZX1xlV33b\n7nDm0+JZXE725VxtYmj6c19bU2VxZW1ga/3u3mlNzPlixtNN3sxK/Mpx2ctj787z3nFe\nyVRX3tO+eWvmSV5eTl9vVtba0MpTXV9lbV5ZevH0Zn3xWk9lWVRda9R6Wc5UTtvZRfze\nTePTSWvbXNvp4vFfytlizUntzVPexVtI6dzNZVdNXuBQQ1feTHZlV9vQ4FbgZVdMTkvz\nW97MSG/N23bR2+3T3mvW4NvrSHZp491M0M/UzetdyGtWWmXIV0ZN3tN6UWL60+xJ4kzF\nX01X7uVD3Ozb7txt7dll+n1PXVfmXWjN2fTp0ENt+VdpWdnT39dO6HFFdtxeU1Nvyuzj\nSF5fTm5pUPF301dvyV5bXtdZWl1UfOvQbfTNeeXi6Ff53k5s3OhmzN5l9ndwVnT3/8pt\n4s1cUWjU0eZU5evUbVprX1Ht7uBty99G+XdlRm/c39Po4nnf709tXFlb5u9gzddpbuJW\nXmZcZlx3Y2vvTXbzUfHj7V1ZYNHm7Vpr819fdFZdZeVcZsh2XlngYE5fXOXg2elv2Wll\nbP9ibNZo/Nzfad7d8OL53+nc617ia1N9VExQdOzeW2b61tlr7+9x9HZiYPTWT3He2/zr\n0OPb6fRveeJebWtbY3HvbdHT5enfYlZiW2NbbfTz229m9lZt7eN29/TU3vdeUFZMTVZT\nVGJpaFPebVRW+nZWZVlu9/ptXuj/7dbb4u7T4+3e4nnr42tta/lt9+Lu1Nd93W1bXHf8\n9F9w6+XgaXBuaWvt/+3vzfFm7+x5Xe56d2tdXlliW1d9dujb1Nba0eN693pZbnFw8f/l\n5ex2VFxXT1tXU01PVGtZV09aa2BlbG9wfOnoc9bsd/rm5nPp7t/W19nt3tfe2d7i5tff\na2leVlNZU1lgeubb09fb13z3/1lXXnf09mz5/OxraHNoXF5eaWb9bVl99HpZXG5292tp\nafnrcOnf4ODc1NvT23d8fGJmdvri5tvd8XFXVldNUFNXWmNt7fRrZWh9bWVgX11paVxO\nY2xmaXntfeXj3dve5nD69mJbVlleb21u39fZ1tPZ19vU1tvb4ubmcfZ2Xl5t8+nx7N7f\n4mtz7e3v93d8YGhZU1laXmPp3+h2Y15XWVROU1lieezv9ujv7ejpbm1mYmNZV1RXW1lo\neW3e1NbX1tnU2+P8cXZrdHn54t7b2+zZ2d7saV1mfW9uXlteVlldXWZuffnrcVtUUU5N\nTU1WV2Jxd3xwd+3l19rg4N7j/WVfX2X/febb3dnT1t7x72hibWVmbvDj19TR0Nna3OLm\n7d/a3ff33uJzV01LU1NZXWj25t7f6/xjYm1pWlFPU1ROTk1UW2J2/G1zaVxTVllXXXDo\n3tTR09PT09rl8Pz8cW1lX2JlcPl6d/D28/bv4NbN0ePp49vmWlBZa/Pr697Xz83Q2ebs\n5u1jU1NUVF5p6d7a1tfeaVFLS0tISE1cbWtiYG9mV1RbXmZrfO/w3tfa3+vi29vifW1p\nZmVfV1du2dxdTln8fVNLT1//dPDe1s/IyNDg7uLtXVFa7dvb2dHP2etzXFBQW3z/bfPc\n2e9maXp6XlRcY2BiXllbaPF2XlleZmVdWVlo9t3W2t3b0cjJ71BUZmVOSE9j7dvT19vW\nztlcSlBtYFRZ68vGy87OzdHa7mZj/ODma2nw4OhfVFdcWVBNTFd6cW1wcPR8XVFPU1tZ\nVltt/2lgXlpUTk5c4Nb2XPfX2n1bYvne1t3l08jI2m193uhiVm3d1NPd6NvX8VZLTFZp\n/Xl33c/WdlpjdGheY/fm3dzj/GlfV09NUVldYnB6ffd8aG36c2Jm4svMfVz381pNRkpe\n1srO29bXZUpMYt7d+fze1Nfodt7Kytn2/HliVE5RaNnQ29bL2WBWWVZKSlpeU1bpz9Te\nd1NIRUVNWejF20I5QuC/uLe7001IPjc2OVe+ucxNRenI09fN2lZJTlxXUHzJwsbIz+9l\nbet3XWXi1trazcjK3nHb0VA3ND7bt62uzzovMz1Xwra4w9fuTTYzSMO5y1lFRVRrWUA6\nPU3t3ldDa7++ys3UVEVNW1RO+c3aev/v+XleYM6+yEYxOmzFtq63fDwxLy83T+PJt7S/\naGDJvsPQ6F5NVu7tW01Z0bu+UUP22WZz1+tJSGhdTfzNzNDZYEpIQDpGxre90+tWQ1fW\nxb7DzeVdTz84OD9r2ndUVvHb5uXf5uPNwstjTVbdy31GPzw/TF5sT2/I9j9IW2Xu1MW/\nvsZjQlHZ29fCy21fWl1bb8/DvLa0wF5FQkA/PT1JWWBra3Piyru0ucPRzcPDyu5KOzQ3\nPTc8Vl5dVENDSU1R4Lmxvko4Pz088bu3vMjU+lZFODg9Rk1LTmDszcDAw8nDure5vMbR\nz9doSkBASHnX1Nbr1NNWTvz5WUY8RVZ6fVz6v7z0U11AMzE3Ozw+SPPAu7q7wsjKxsDA\ny9njZUY7PEVW18C+v726trPDPi0tLztL47mwvPZNXO5TOzExNDAqLmDAva+oqa2zvsjZ\nPyomKC06Wc27trGuqaatxVY+OT5GRlHf/DwvLTbXtLrpPzQwLS9Gu6inra6vt8VoQD9G\nMScsMzdC+sCvqa23sKurrbTG9043KiQjISMqMz5KTEprvauhnp+kq8stIyQqLzhN81Q7\nNEPAuMDIwrOnpKenp7DiQzs2MCceHSAjJy4+1q6gnZ2eprbTUzkvLS0vOzktJyguOkXW\nqZqXmqGx4z4zNDtALx8dJzvowMDDvcpKV76zsbO4u7S2w91KMCkrNFO+s7GwtMpbfM92\nPi8qLUW+q6SmrMstHRofK027raiptkYrLTlD/cC8tq2ttLe5zU0uHxweJC1GwrOrqq2z\nt7/X3c7AsLBGHxwqxaajt0UuJB4n16mhp8JMSkY8PUVDSs28xcx8PD7At2I6Ly3Wo52h\np622y004LyQdHSZNu7O0trjXPUqtoK08KS5FQzb5o5qarSkgPM3oOScgICY2zLe+zcCt\np7s4N8OqqnYjHiYoKVuhmqOwqaSkqk8dFBcjPci3w1v2ua2tvl7LuzQdHiMgNJ+Upka/\no6OgqTcZFSPLuzghLaqZpC0aLqqenZ27JBgSH6SfNB5DoJeVpDMeIzjZ1D0u36aqPh4h\nv6GhnaM9HBEcpJw/HSqtmZejaSAZOKaxJhxZnZrGIB8kJkOhkpo0FSegm7krHiu3oKFW\nGB24sTQ7vrCwtr49IRsdMLOZmugkLMOdlbEkNrHNOy4jICZZnp0vHGukq8DDvjQaGjS7\nzTst352Xmp+rMR0tNx4aLaadsVtKPVmwpqexTyYZFzmkyiYurZqSms0sNGs+JChAzqOa\nvB4pQCQnu5iXaRQknKc4MSM+nKBP3tkxKihGt8q4rVbttioXHT2kmt4kua4nxp7X27Mq\nHs+sLhceqpqwLyFUmKEhNqfILBsVs5L2HVOjmpStHCyraBsVaZu8TONZpK4dMKCgvC0U\nF6ekHjupyp+aUMibvxUVxptTGjGnnKwbGbe0Nto3MJumFyOcnbtGHDCaoCEVPZquHC2p\nqLc3LLOzKigkHaiO0Rm0nreqPiStvBcVwJp2GjianzAhOKee60M3GDqkJyCckkImtqSb\nqxcSzaBXGy2dpjc9Sb+r+T0rK6akJBjAkbwqqbm+rSYhqqMrGUybuB4rs6asWR0dTszm\n4j2mlzEnnZ5GJhgcp5ssG8Kcth8wsL+vwBwvsS03dCiujq4dqZ07ayobt7kaI6ee+h8/\nn52+HSGnv0OkQxfGnC8pnZ0uI2Cup8YfG1ufvB0rnZ8kL7AoRpjeI7GhsDEaS5tWJL/O\n/LAtI6qnJCOqqC45PiemlS4grEUunK8cu50jHqapOCoeJ6usNDZLt6EzGqmXNGWgJCaf\nuR4sqp9OJ8u3S0AsKb+xOy7bobQeXptXw6gdNpi+MbwtKqfDIc2fPB05vLO8Qyw0rLMs\nQK2mvilUsEbDqjgk1qpKGi6j0yzK3E6uyDdc1sg5I7CfJjSmP7aZMCGtRi6pOR2xuR5F\no846PCzOp/b55jG0qiQnn6orsbEh96FGKP+uqkUny74tOUIt8b/Wz0mppyHZmjtKqiE2\nm/AurEUqqcIjv6onJ+tczcMtMb7KvMYzuKE2Jr79L7e3N1utrFEqea1DLls+Rcg2M846\n/b4qrZ0jPao3ya0pK7POTa3IPqy0LMumYC07Nka7Ri5T7LbOJ7uhOEmuODuvvjE7rK5F\nSNPO2l8+Q7/bTL88bqwhLaAzMLcjRqBKQ7NCSq3TOLe2Lzzm2bN3MGLf+rZUKrqtJi+0\nPUitcE3AxrdIKcm3MD7TPsqxP/awSr65LLCsHUazK7u2I06wPMuuOEqvRS+4uUNZPDi2\nvkB5V0qv2Se5qjPxsTRTtE1FSVa0by3swEbb0zjItkLWzTu6WSitszG64zOvtDp86TFe\nyjA+uEUxzc3NtF07ytdW0zs8r1wqw8U6u7g/38LT2ThCuPc70+tRueA4y2U6zTtArT0x\nsVlWrkA0vOVGveA+vsI71rNtV3Q+27pWT9tTxrw4cKxiRbtNO8prQkxWv8o+aMZd79NC\ndL9GV9NAxukvubc4xt40xckzRWU2TshFW7dtQsjQ7MVNPd7xY91ASrtWN8jPRcnQQvTW\n4uVCaLz5Xcn5/L9gQs10Tc1GX7c9Prpe7LtDQMhiSspxRcjLSM28aGl2RuDDYlzmX8zN\nO2i7SUnLRkPOXklcXszPTd7FfN/TSl/KU2DQV8/bPsW/Qt32Ps3OPlPvQ2nKU3G+b07N\n6GzXSED5a1vtTF7AUz/N/UjO90nb3fFzTPPTU2DeU27WSE3bTFv5TcjRQ83OWcxvQt7P\nW9fIfNvGZmjI9k9dT2XRZlnf7NTLTWi/Y0jlUEjeaVbm1sbLfNfNc3nvUffRVl7iXNpp\nQ8zQTdtoTNDlRl7sVHnUXmnQVkNeWlvjVk7Z1+vZaGbJZj/w5k3o/Un923n5Xn3P717t\naW3Tb1bX5XrbXeDLSk/bT2beSFDaYlvbdlvceU76+U5XU0zf1Gjo1OPP5Urizk5e2mLf\nyun0397T9Ffr4mnxaFHf11zl3PTRX1PM9FHeW1PZ9E5l8Wjg2Wnp0XFp4n3l2lpe2/N0\n/Flw11dR3m1c3mhX3u5jaFRc81tTbHTr2XBp325pblTj3E1p3l7xfU5f6WZr/V1t3GJR\n/HlbbmBe2+BbYnd35V5X1ule1+Je5uNfdOvm32tb8ejt3O3uz9f37mVgek5W3Gxr3F9e\n2m1PYGJm2+Ve8dpzdOb03tb57u1w2t1cZt5238p2XtPjbd90W2NbXv9lXWxjfN5gV2lX\nV15OXPdXa93/6OBeY+lrXndmXfftYmh6YGt9aPDe+ubxWfPfZfDlWffO5vzlX17uemVg\nW2n0bXn6YGh6W1xjW25lXt/mfeD/bN/pZnbzcO/f8O3b4/br7O3e4Obb4NvN2/He7nnZ\n6F3x4vDe7V1cWVdpYlv88W33a1RZWlFbXV/l+WvraFxrV1RzbFpv/V9pemJl8XNmfGtl\nemZt6Glz2dze2flj4952931m9u9zb11b9ujs3N7373BZXl1ZZWZ33OXu6G9o9nRm8+Pt\n3tvr6OV2a3pzef9jaPpoduhpaO18+t7vZm1paXliWl5baetwYHxwYGhcU15pY21x+uDo\n69/l4+L/bfbt+e/r6Nzb5ejf6H1xcevd5ube9P/2YGBsW172d272bmNxcHrtcGnp7XBp\nW158Zlxodu3za3RvXF9iW2j6+v99d3b6b19ja2NcW1tobmBs7/z68WZdYllWYF9iffHt\n4+l8eXF919DW3Ovv9GZld2hlefDc1t3e5XR8/2JfdOjZ09rd2t7p7vFzdG1g8dzvfPRp\naPl6Y2NbXPn/aPTl6eXtcGliW2BpZmtpbuz6ZmtjXF9dXnnv7fliX2tocPb3+ube5e3w\na1xgbffm7nb8dGNlWlBUWlpiZlxcW1liZltWWWNpaW9xaGh3bGvl3ubc197e2d/m4uDj\n6ebd1M7N0NDQ1Nvd3+Db3nPt3Xp603c79sY+W8ZFT8hQReVZPmBmQl/oUXTdb3Dg6Gz6\n+nre3nF93W5Z6exXadZWSPDrXnN6be1bY9tQSMviRtbdRVbDTTPJyj7TvWbovtlW4uVN\nYN75XmbPel7N2VPlxXBlyNpR189b+dlib+np2fpRWuhXS3HeQzm+wzRpyj9K60o+a833\nPjrNvubKxenv3XBf61lCys0+0L5IVLhzPrvDQM27S0zFbD5o10hN1t5x7+vj4mj3xu49\n0clJZvpOUelrSG7KucNKRkVs4E1z4lbm399vSdHbPl2+WUW5uk0/xbk7SrZjN8a/PFzD\nRTtuTDhFVkhD3LvWzbvKxs1rY1FOTTsxPubm9+LX1MvCyd3cUEhWNjvZUzvNvlPpwLy8\nUdu7SszRIGajLTedqE6vqko/QC0nJik5W9++p6Oop63AzdY3KywtPE1du7e9rbT0VEY/\nNC88XkpI2/FCOD35Rj7CXzOqsx5Tpysrp1sbsJpLyp2ov7dDKCccGixAPbegoKCgqsg3\nLCoqOu/Irqept+lbPSonOenGsKiqzTpDLSNDUCbCoTAuq+Ymt502HU9AITuttjf/nZim\nvrOxPh4ZHCctQKiamqGzzT4nIShWr6qno6bJMCcjJC/FqaqoqjYnUSQdsaZgw7AjF9qn\nSM2htzAqOFEnGi22dEWmmJWaLhRTpycaO6imtkUt67FKLULJ0OXNxbGnrUY7yUYsZc07\nsacxN7B3LbOnJx5NOSy9rsBfSq2dtjNtcyEZGSCqlcwjtpqqNz/QwMU/SCkaNp+aprRf\nLiomITSumpuz1+UnI1lO36OfPiezuS5lvm7DvM5TIxgsyGu+oZ2griQPJqe7KS0+OE7T\n7bG336zOHRk4rqemqru/aCYZH7GkKCijmJ23Ix2voyQdw6Omrj4nNsWmo7y7uDYdGR48\noJe2Pr+0dEJgUUU/MEtAIDajncIqJjM/Ni5Up5qgNyC/pzEaH8adnEIksKFMIyRAraSp\nuzYbHeuknpugveYnEhvIp6q4PCM5y1fAtK6hwx0XK7anrb23tFcjGCC7nbop0aGnRh8h\nwqY5IFaoo64+Li875aaZrSgdHSRZsK2cmsMkIS3UpqZKN81UHBU0n5KZRRkpvjQeQKaZ\nm00XHa+rLyzZqqdDHTifoG0vLT/Cvs7FbSQqt6mtrbpUTzQkLtC6uLfRO0bRaUPRnZ42\nFxc6n5ixNMOxMx0aLqGVsSAxsb1AaNErLFu9pKDWLEjRLSZCrZypLRofN83Fu6mnziok\nL82pretGUG0mGlCblKQrFyC7wjvAoZ2rKhcjqqDCNzhPOmumtDAjKc6jp0BQr9QpIDem\nmp/DNDk3KjfDraCoIxU4n5mmKiyp2xoVMKSVnS0cNP1CNluqn7ggHkOxqrvPMB07qqGp\nYCcqcT0q46ahuCcdJ9Gz1LejrTchIS+nlbQeGi+prD7pn5vCIBkmraTAWWjF3jYw3qat\nv1AaG9eclKMkEiOtp9RGvKTKHRcrp5ieTSQ4NyEttqCdrx4UP56dviczvkUdH8qemaos\nJjdd4z5TrqfcIypUxp6ePBoZPp2Uni4eOt5AMV2gmaspGSDbpqy7sbc8JDTWTr63c83A\nOyEqsZ2jTR4fRcNKQ8KwsNEtITmrqsLQLB1Mo5ywJxomr6TGQ26+xi4hN62fp2MtNjct\nQ6+mrkAz2dA7MT+6n6Q0HCq7pKPUNOLaNy8zd6qhuysuPkinoUUuJBpInZqnTB8cOb7g\nt63ZPS0jLcqtoKDWIR43s7Tu07a0eSkeO6CZqTcgJFfGU82trLpFKCnbprD9SSowtrHT\nrcMfHC3CoJuwNjc7NnO6vLO4STAmJmCnobc3NlZLOzxpr5+wHBIsppebNxUmv0ssOMWj\nnkYbJNOknLMjIzs02Z+erVchHC+3q6mwSTAzMEO7q6OsPiQqzq7D3L631y8jK66Uni4Y\nHdSbnl8v175KLydCo6DWKh0qraCwwEYjITfPqqGovCMUJq2bm78dHUxILVSwpKY2HCRN\ntq25zMVUHB62m5quIRgqu7G+vbu2vi0kTa6goz8eJzZip52tQCYfLmW/m5s/Gxw2pJmt\nN2bNNy0tT6ejvzgsME3i16ie4x4bKrCdn7MfFC+nnac+IzHQMR84q5+jYx4ZKbGenrM4\nPi4dPaGboFsdGj2ut7uxucA+Ji/Iqae3UT40JC2tnKHbIR4wRauatiQgMLegqT4+sMgt\nJypToJqxLB4kS7C9sKDZHhwrtJ2etiEUJK2epOsmKuA7IzHFrKGtLRoh1qOdrlNTIx3F\nnp6xLB0qub5ctKmstjceJ7yenrMzKi4kN6ecpE0dHTTGoJraHyA4sJ6sPGC2/zYtKGaf\nnsonHyfbvr6jrS0gKeanprrZKhcnraOrwD4+QyMbMKygpLcqGiTRp56n2jcdHcadnLAt\nHS2900XNsaqsQB4jyqOgsTs3NCEvrJ2mSiEgPuC4mqQrIS1UrarGu6zvJyYrT6GbrzEj\nIzfLsJ+nMx4mTq2ms7k0FSaqqMrxacnfIxcqraGktjEgJj65pKCuXScZL6Odrdw3Mz4x\nMMCfoK5WJCA8sKenukktISzIqKGvOSYqMGCdnzAmQk18w8uwobMoHiMxsJ6nXSojJDjM\npJixIB0u0bC2yKa7FxjasbepsOk3HhcqrZ6csy0pLC3gpJ6hyRsdt6jT07q7zS4gOKeg\np7Y+Ki1OuKqsxk0tIUKwrK3AOC47LSynl78rNi83vrezo6o0HRsssKOntE4pICM7oJrN\nJzNIQEhTvKCkIxEqs7axsMVTKBgey6Sdrjs3NikzuKikozwcQLZZxq7FVjwqMbqppq1b\nNzlGy6+tuHokINOqu8O/3Es2JyevlKomJztNxrqxpKozHB09r6+0sdAxKCYxpp3xN1cz\nLkPitqSvHRdirsK7r7ZFIBkmuaCuU9C/Py03zrGqrDAjxqq+03FASk87Y62kqWUvOUhW\nwrCurs8jIFnWdK+u30YzKC2xmrEpN/NJQ9uupK0tGyzD20/DsbxJLSgxrqZPNk1L68pd\nc7u2JxU0pLPbubRXKh8jeaqzzbC3My1fv7+5sUYn6aexzO9RQDQtQ6ecrWLW0TkuPcav\nrL4vNs1FSL5pQsbNPDe6n9seLsDaTcOuq7cqHj7XNE2ts1s6NjdGs6tKLT1r4NzRvqpQ\nFyivXkqxrL1MKCQrLdCstLa0zs/LOzzGvzMptJ2zS+jQPS8wSq2kuMOuyTE6buPZyNE8\nPr2321NFPkJFNladoSovxT4tQ8Osp7tTNy40O1bL6Ga+yzY0vKg7Hz+61mjIrLQgJsgv\nLcazs8BZNjsqJNCzQEmwsLzGxc7tTyEnqqvPtK2+SjQsM1q7rK6wtNZ56T0xUMxNL12o\nqdA+XVowJ02gvTGxrjsuVsnIwsm2byg9wDwtTs3ebWjgqKosKls7M1rLr6owQLEkIc3o\nQNTb9sM3LMi4NzjOz7e0xr6zPiFewzfer6221FFURTfGrtp5s7HD7F5jbj4nNre7xb67\nxkUuLMbGL7ynbkXGy0tMS9e+Oi7At0VDRTpAPjm+pvw+vmIwNj5mtDcxoWwcyq0uM8pK\nTkg2267fO8ZbRbvCybCq7zq+WitFy8nUxraz0UbGtE0xbcDIv8LAvlctOFdKUXy3vFtC\nRbRAJLCtLUuqu1DK1H1gKirKWT64zkbjUzBUtFZltMpKQkJZ2igtodYhwqlGPs45NDsx\nT7fZz69eZcJCSre3N9GjQCy5xTM7083L08WqrUlN0Tk+1ubZub4/Wd07QFvl0W9Nyqs4\nKqrAJlGxfM+wv8DcLjlNLULNSNe/TT+xzSu9rzk+yV1K2ic4piohprAwt605O0MrM1k+\n0bPUt7PszLFrLbOsKj6scDRbY03m5ruqtMWxy0BdSDlP2UVKvPNIz9NrUFNNbrtCO63M\nLOa9PFS0xs29U0VXMzZLO0jXVFOuvi/Frzc00FZfdCjWrx8tqTosqr42wNMtRWUqUMBD\nwrTLs67gP7O2KEqrRji90z1oz9O5trett8nGVD9TRSxDu0VDsbTjz9dUtkwqrbgm3rAu\nP69sYK/0U7c9MXkzLkY3Mb+wNtmgbS6+wzQnX7kqL7tDKtu7OVO7Vj5c10gvVsJNRbuu\nv7jGyK5DL7t5K/m9PlC6692xxr6sv8q84FvcPihIwy04rcVQvrq3VjO5wi7prUA7sd89\nxsZDQ8vbP0Bj7jszSFrfQ0uuwFS6P0C7LzO0SyfCuylLuzc/0z9IysZNXrjRT9vAu3FN\nrLgzyLgxOb5GOMbO8L62uMLDur5UStRtQDc/0Twxxds8rr4vtLcs460zPqxiQrjPVsNo\nNl3XND3MTEvfVsnNOba8J7ysJ0WqLSytQynObjFOQjd3OjbZX3S+xrevvrvLT75pMNnT\nLEa3Nzy33k28vc2xsNHDt1tG+lBKRUXJZjS0sSrNpjNAplwzq7c9xr5U2VdAzVA5U2ZC\nSm5UT8q4Qy26wiRaqzM2quIwym4wPzcpRT0s38ZAwrbltrZet7svyK8oP60uLa5XLb3A\nRsO+2rbNfbbGaMPIVnH0SDtM0+A4cLM9Q63MPrOxY8C888jcOu9WLk3iPu/MW7/O3sI2\nSLc2L7PQML+2RkJgSjguNFE2NtRiScbI39DOvL5IU7DeMLe+LFe7NzvNUV7QW82328Cu\nz/m97UZrRkprN8q0Lt2qOTes1za6ueXDwszARkDKPjPeXDrt20/t3j/NyTTKwDfcvTdI\nvjc3zzoz2zw43EBDw2JQt8j5u8PC1zy4xS3rsTc2tuA+0dZT2XrRu3TZs89PwtxFbV4+\nT2lAYu3ovtPXt8JZvbxNXM5bVmVP6GVDVvNFSP/r3kBfrkg7tOsz08wxT9Q8Q+xCS0w3\na/M3XrtKVrnZV8LT4rfeV8NUSPM8PclLPcLGc7/A0cDe1r70VsXbUFtLa/8zUco8Zrhv\n+a2+Yru8TWveZndDSs1NNGL9OUneT9fFVsW9X1duWVdCO+V0PUzoUUpIUHlFQPbtWeVo\n69FR0cBJ0bhRULtZPcxtPnbQbt3t1LzQ/LvAZsnFXu3WS+nWRVva8/lRVsLNWsa7xcPI\nyshlTfFNPldXQ1ZNTNlCScZIRcDdP8LKQPzTQENZS15DN0tGMUBjP1HF3t2+b/zNS0pO\nXdv8Tc29ZV3X8e1vV8bD3r24yL67zM/oW8xfRs7uQNbRP+vMTGzJ7e3XbNDbVs/PSFTP\nV1HxUFffSU35eWtbWdDPYObgW2lQS11IQ2lUQFNmTllaV95XVs5TTsrjTM3NUN/USVBr\nW2b9a8jKWdHDefzI5d7Nfe3N43dietloUN3Nd/ba6d5sWeBpU+PXcODN7+58Vt5eU+NO\nPmBxP1nebfbK4ujdaGhmRlnfS0t8YlBoV1HmYlv24+D/aNTQXu3OZmJvV/NlXtrU7+jP\n427tbXxpVN75Ys7Ibs/GfXrWfFRsbGBlXPnRXX3I4N7IeV3XW095W2b//Pf2WVbiVkxo\nY2BjT+bpUW1mW0xcV0hUTFFrU+XdX+3MUU5vVElda2jr6dnP7uDI9lbb7F7e8HPN3vnF\n6Ela29PW/GLFu9Rt2sLMUFNiU2xTSmXW2/HW1MXNY+jO/FfoVFfxYE1gY2xuVlTrWUb9\nc1vvZlDebUpsXktl4O9XTlfb4EpJc9/bT0rKvmkzNM6+eU13z7/DOj3KYj1cWUjI0UjZ\nt83izM/PzGVZ5ltWY2nUxtvQwNHe31lMWtTX3uPi09leSk13bVFMW720UDRettYtLEm3\ntuVju7C+TjM2Pz0zNELmy83Fu76/wv1XYko+SExT3s3Fv8blQjs9Ozo9UN7O1m1r5d9U\nN0a+vlw9XK2max8nwLzw1tGrnKo+StBQPi0kN77PZr+zrq/Ab9HJWzo7TnTa0ci2umlF\nTkw+ODlGfVA6PE/WeTg3X8ZoMTnKyj9F7tfCwuXau8VNP0Y9QllfzbS6v7S3w9FlSm7N\n3N+/tri+xenrz3FNWVtLTUxFUfx5dE9AU+1NMzbexddIJibKtExQwLGprE4tRXEuJCg3\n6LnC6LSotFtGRk5mRTvcrbHMv7TCY0ZDWW5GPuzC4ElO0b3aPj/cxkAtPtuzpD4aOajJ\nPE7jq528JzS+6DQtNNStwD3erbZaPk7At89Ic7O0SjrZv+5NV9nGaTQ82vY+O2zAxU82\nRsJZNj0mQpqxGiqotMbZNLucsyEnUz43LifNoLNCy7G77S8q+rPUSM6rp7dFQHpaNzNT\nubdjSMq8YjY3YL7aMzvMdL2wJiCjmUgdJkqutCoxoZmtQzxI01EdG96vSD/NsKOtLy29\nvDstPbuquk/evmM0M06+yUhZvLxiNjTlvkxCSDS6oTsbQKOjtywfyKFLI0aqoKffN76t\nPSEqPUpCMz6wprrovrbGRjQ8cV9K17e73Ulaxtw6OmjIzUA0W9rgvjskzaHOJCY3vadt\nJmamvDYwN9mv0zbKqrlgW13czTsqPdZRQF7Ju77i2b7OSkvavr75U8a63UA+67vMTk0+\nfKzZIzCvq8I7KECtvi02u662aDFDvN03QODNwttfva67ellNPTEsLz5CP/S6tr7f3729\nW0XtxsDbRmLG08V6LEKtzSopO82w2y5Tr8I8NDhsuMo9W7zFVkVT3tdOQF7GwsnFu77d\nTUxZSzk3RfDbb+W/usLW5cq9yuvsT962aS5LtrjxOC5NvlAvQ8W+y045T8ZePlnb23FR\nXsy/zW9v12JCTvP8Yltb3tZWQ0pRSD5I4sC+zcy+wMPAUz7CtFk3QuW8uk43b8ZNNzhN\nyr73StPGa0pN89RiQjxG29Rrw7TDzcXe69tLP1tlQ0ZXW2hXP0Lj1PrW3m27tFtGwLS6\n0EI93stDN07WznxFQ/3WUEVUd2JIRWbZzdFRSuZIMU3QT+K+18q23UjJy0VIWU3020ND\n4mhd01FOtLDdfcm/tLZzTsnJUUZKaMrKXlvicExFRlddRkVKVNncXM+/Y0veZkhUTUZ5\n31Be1NTZ7l7m12BXXkVFfUo2RtnU2f9U1rm+3s2+vcPjUGbT3lZNbnpsTEre1tZpSFx5\nPz7xdEzf2e3DzVHxxUg0Q0lfvshU073Ivsg8PtxONz5AQtfKZte/0/fIydPK1mjOv8ru\ndHTXylBFWfTZ713d1FFNYlNOV0NG5W1I7L7R9MZKJyg+zq2pvN+6vlk4JB4xxcXO22i9\nqcYwM0jGrrlGSLu702M5XrOwvtTUUz07O0jcytvo2XBMRkZDPkhrXVe0qbgxGxw7ppum\nYkyurD0cFSOtna42NLiovCofO6merjw3zK28Ni1ItrDD6PfW00g3RdbXYldUa9bwSUVu\n4zYsN9Okn7ssGRUuoJytyM+sqi0UFzejmrYqNLOwPiEmwpyd1yw5uq3UMTfOs7n/Tc65\nykU7RWjvTz5P0NtDU7m51y4dKc+omqE+JyQaIcCno5uhzzcmGR7ttK2juz5IMycx16+n\nre43Q3390dbrxb7T4NnTzddURlFmW+LDUDM3SrGnwjggGjemqaqfuy0qGxUuqJuYoUAr\nQCoaKL2mmqEtIzE6X9fDrqm7My5W0cDNTs64y1lQ883USDBDu7vNOyo64rChsTAtLSA0\nrLOtmqcxHRIbt5qdvsmxbicXF0+dmKQ3Jz9ZNCzto5+vRi1FyEg4ebiwykJIu6zbMDFN\ntLNoOyswwLS/qqo8KzMfHtajl5lFFRhbprc/RbGdtBsSIL+bozM0t7suHS22oKNKM8XT\nOzdKtKrKLS67qrk+KzrRs63iO1EzKPywu6mg1iwdGL6SvR9OqaapShoqnaA0JiM6qrM2\nNrOsRS8zSK+xTErT1Eg6TcKsuTMnNsKvvFwvLe+0vbOvQy08KSTeqpyaWhobMcy72c6m\nmaQoFSB6qr4tT6aqPCAqzbC8Nj+qqto8PM3DUDpirbBXMC1A1Lau0EU9LTTAtMqzrE0q\nHh6rlVodYqq/zskx15yvKykjJEq7vr2qreU/LSg6wL3Fu7u7z0lN6M5KN3S3t/Y7NjnT\nucW3tz4sNjQtXbSmoNwfFyqktCdLpJ2fNhkxtM8qJu6stFE+vrbeTT5CUG/MtLO+vcZX\nQ1fFw082TcK+yFpFVEI717rR1sBTNiorrbw9qlcgyKTZOEq2o7weGD68NzDQo57KN1fe\nSDM708Nty7G838vCSjQ/z8NQO0BlyMrNvu84O0g3Ocuzqr8bJK1FO6u4zaezRkMmJLSu\nJinFrro8TaanYDRQ9E0+W6++bbuz7z7Xwl0vM2zTYlR93lBC08BfSO1pOyots65CW/o/\nybS/9NuwrvwuIypePy5frq22xua6sVc4T2tmRWbCv9rNu9Zg5sX2NzA8bU9Wv7tOPVdP\nQEzRuMIvKlHsZe3g1LerwlfpUNmzPyQ4YEY4Nsyqs86/s7vPXtbTPD1QT07Zv7vPVs3L\nXj4zNjo3VL/NbNbpQjcxV66+fEM56GBDSlC5rb66xUDMuz40Q1DrTTFNt8j3vbCuvMi2\nvPZdUTw4P3bXTUvzzeVTb95MO01rS0lX8eI0L0hLt7xDzcxbWjQ40eK8sOPbsb5bWk32\nykA4fWNIUVPZ2VbbwMjLvL3KW07pbEU+RU1JSOnM+mbiY0Y/QM7TT143VL5o6c3mu8ZC\n61pCurhQ273Gv95FyLxRVttmZUpDY1ZDUP9g5sW5u8vTy8vvXmhcRkBKSD9GVl5NNz9L\nUMBeQONw7ew8VslW1MNP27fRbOJazcJJUcZ5T2hbbGNMX95j+c3X7/Tp3ddoZtv9es7J\n3Hfz81Q+PmbXUWVIQsz2TWtX18NUY99NzbrsbcPFyc9U7b7pUOnza1dFTldFRltUVt7F\nv8rRzcjXZXPpW0hPVEpMVl5pSD9iXtvPS1nwXlxCPvpcZb7PXsK/3Nf8Y8jfP1nsTVpm\nXdvuV+bU5dDO299zd+PuXGj2a3bj1tn09HRQSEhWfU9ZVErZbUlfUGDKXl/KXmW+0GLI\ny/TWV0nN4EVefU9bV1vNzvrKyvHOyczL1vbZ4lReZU5MTVBbVFFt4GlFSmJveVvuztPZ\ndk5w8F/Ky1p02mBPTkr51k1bztbRzdTKzOLeztfWzeNgVE9QVFRWZmNdYF1KRUlAP09R\nU9nUb25bYGBJSVZXdnBc91lX0dDr1snN0eJ9xsLZzcbMztvo1tlr8dt26dtoWmNKRmle\nV+ZuTvbaUFFgRktZP0n2a2ZjZd3O1NPNyMbNw8Xi89zmdHH80cbZ3sXPW192UVFoV1t6\nUEpeWUxcTkNPQjhCTUhicEv06UvfztTDyNx3cXBLSk1N98LTReLAzcbG17qx4F/bTvpj\nLTf9OC9CTXbNfM2wvd3I19TF8+m9ylxWRkbpw1sqL9/WV/y+p56xUMbOOC4nJkJbNlm9\nw8roRkJQSWXFzr+tsMrK20Zcy9YwHi+3w/S3qp+jSC5dPycmKT7MSNGhqj09QC4vIySx\nq++6rLCucCzIvCEcSLGwp6qmmq0rLS4kKCYnraHNwKmepCoaMT8pJzerna18t6m6LBUb\nSC8tsKGbl61a2SwdISAwrK+0pLhoqq4kHSstO0A2rpudnakgHfc7K77D9rmttG1ANj5G\nLixrtM9FPkC3nbQ2xtMqLCcwnqkgJ62fobQmPqOzMR4aKqmvRbmmoK0tHyckJLejxr6+\nOrOZsx0aSqyovSpZo6wzKS82wEgePrNdwqzKwMYgK6GnLh0upqYuIN2flZS7I0/CKBsV\nHrScoaSqOTbcKyZPLyB6mp1pPzcmNFZtqZmetrvbW1shFSFev7bIaa6xKiFgrrs4L6qh\nNiEgHDmgnqahoZ6oLhoXFySwn6SmrdO7rzMVFTO7sJ2kNyEeHTCjob2+tKOg0R8VHd6n\nt/m7scg7M0hAJzCqmJWoJxcjvLczJ9GgmpurLhUaP7m67isttJ2qKx0gKcars76+0c2t\nsd4wJD6ro7QvHzOtq0IpNsatud29cC0mHyuxo62ooaGfxh8XHCbepLfGrbG+u18fFye3\nqq2oVyMmJyfPo7C4qq6nry0aHTexqNc9w7DNOzQ7PDjCq66sdyEqt7lGMSvKnZurTCMa\nQq3bQzwuSKeevikvOSQ0vsOrnapjv980Nyko6bPLc/fiuM0tKV62u8W0vzEnJii+mp25\nu7axrjYYFR87p527acxNWb9DHya3qkg7aDNIrbtmtLPltLDc4jghLMWzttYxPbu7TUDW\n2S0nS8itnrQzXr5IQz40vqe8790uML19NElCOL+gpjwgKiorsJ6op6k7LV4wKTEqN62p\nw8jwRu1AKje5p7M+SE4pLVTDp5qmTXf0T2wtGyRL36qhyk/sOz3LUDM71rc+MO7iwKmm\nu73FLTFeTlRpNDG7sb7KPzduxkZCzr1eLDZDW6ymr62kuzEoIS+7s9PXTzHXtN5jTTM7\nv620Uzg9KilAyKqdnam3XiMdIClTrbZe3s2+tuYtKjtFQsakrT0tJiA2r6Sem6GvSh0V\nHjBOr7HXuK22tsYrHR8uxq+ko9AuJyMjTqadmp2qXycaHC1P08PAsaemtE0xKR8fV6qg\nmqQ/JCEeIEinmpeaql8mGiE0N0vLxbGkpK1XKiQeI2KroJ2kZiMdHR8xs52Zm6e+RS0m\nIR8jN8CwrKSjwDcoHibNqaagqUokHRsfMemrnZ6hpKzPOyMZGSA/s6SdpMoxJiY3u6qm\nqLo+Jh4dKvezp6mur66zy1NFNiYnTMCup70zKCYmTqefnZ2sOyMdHSs+abOko6Sktjom\nIyYxvKajpLBDJB0dITbIp5+gqbx3NCcjICQtaLCmnZ2myjAhHipQvqmnukotJiv6uq6s\nvltDOzE2OzpNzbe3xchaPUNfy7etq63AOSYfHyExuqGcnaGqt0skHBsdIzuxn5mapHkn\nHRsn2aednKbCOCQhKi45Y9bGt62srq+xvdlTMyQfHyErOdSonpydoLA4IxwdJjTtsaSk\nqrTITjAsKCYuP8atpKOruEYqKSotN1nawq2ts75QNCwtMTRGzbOqpqewvkstKicrNkPj\nvrCvt77Nv7GwtsxILSMgJjbGpJ+ktkAnISY5wqimqq2/RjAqJiYuQMCqpqass849LSQk\nJixDtJ+dnqOz3zAjHSAtPcrNW13Rs6yop629OyQbHCY+saCdo7FZLCorLT/NsaifpLxG\nJyAjNr6up63XSzs9PW5sNz42N/++sLOz1DY3N+Cvq7BPLycjK02wpJ2gtlMuJiY09rGk\ntPxGMTvzu89PZTs7RUxKN1ZUaLOwscNXMSYzRbqkpKpxLiYmT7iqrdo9M1fDt6yuwzwo\nICE3sKm95jYt87Ckn7A4Ix0eQKymo6/ZVkpKMyckIy7FoZyeqj8mISQ5xq2nqbBRMSov\n17evvkg0Ki0/saCu9y8mQ6ieo7gqGRgjxqafoK1DKSohJzQ5v6adnaOuNiYfJjnFpKam\nr1QxJyov3rCwrt83LzZe2rCn2SkfH1SgmqBPHRcjxqGdo740KiopJzfbsZ+dpLY8Ixwj\nKkutpJ+nuEInKS1Qv7CqtrdjLy0sPNq8vLrTJxwnt5qVoS4XG+6gnawqGRw0vq+9RsWr\nqq1cJx8mO7+no6evuUwtJio9v6aqtNBIQjtAOUjDubPLU81DIB/wnZekLRUhr5ujMxUV\nM6OXn0seIXSxaSssRq2dnbBCLSQpNjNJs6Sgp8MvJC1C0MXCyMm7czctQ7BFHSunmqs4\nHy2rnLAgFSGvmJnWGhUmrpykPi67p6rgJBwpyaqmq7e9s8ozJCY3w6eoumU7OjtFQDhW\ntKRvGiCtnbtIO0CsqCwXIcCcmt8aFzefl6QzGyiqpFQmJ1mknKo7LjhAb0AtP7iqqbZW\nLi09V8rA0VNWvbQzGCGjl7QzLzC5ozcaOKOhyiMZOZ2ZwB4YKqeVoCwg26akxSQeQK6t\nucvZyLbPOjQ2P9u3s7/pPjQ71LgzGyigkrcfLb2npDcVJ6OnLyAqtJqtHxc2oZejLRgr\nqaRKJjG+oaHQLzE8QE9ZT863ubzKTzQuN0jOrb8hHsOXnCcY25qhOxoduZrCGyarob4n\nHD+dmsAfHTqomq0sLb6psVQnK8mxvdbZ0MbGTDc8Pj9lyL6zOxsnwKGcxRohn5o3GijN\np59CGjaqtjcqMLSaqSoeN6acqjQgM66mvDc35rSu4jg5TvxjU0NNzMDZ084mHU7Gtp6r\nLCBAr6FfFCGmo2AqIC2jnzQmxaq34ywnvp6oRikr06OjXSs6wK7KPDNNv7/LaGnpaMN3\nISa+9D+fnc4+IyHApPEkKD2koS4eN8awp0sfWaGuNy9bsKbRKDDAp6a0NiQ+s7F0N0a+\nscBMPl3eKSu9SS69nqdUVj4kKTu/p80jI8mkvS0jVqqxXD44RamjQyjXqbhJLz2rps46\nMTN2q7E/MEW/vNs3I02zPz3FqbM7cbEzHUzAW7e+RkYnHs2gxSw7uKGwLDHDvruvcypN\nrLY9MW6vr1AvULu3vtM3LlNKYMIxMb2uquUxxboqI9m8P/2tu0M3Ki1GScanrz0/r6a8\nMS7Cq8w/SkJGtrM+NMquuUwxS7O7Ri8sQMC20FHD6EPF9C4qSbfQQ82svjc5QikkP+6/\nrrvCw0hDs6n5LkO2rmYtPNbd1MhIO8W09zc+3sjzNjbRt7G3UDFG3j1Rxkv8t7PKNjtu\nOScz6+Xusae512tJ4MbDs7BUMG22zTcvVLnDW2NdUcW9QjRM2dBKPW2+vH08OUbivtk+\nem069/EzMEjJz03UrrpT+dFDNmbCubTA0elCO86x9DNAy8BdOkLa1G3cTjvOvlxKUOW9\nykhP18rGYDg3RnNRX85bdrq20Ex6zV8+fLzFyra33VdAPk9NVtl3NzTjyk08Pdy903zi\n9nTN8z1N19HXVE3t0F8/OThK08xt88jbz77eT27AvMvOu7trSFdGN0jt6czfVm5NPGXA\neUBey8DKTUZtXVniXkr2zW5MSVHl/0lFXs7Dye9UdMjO1r/Jzry6yk5IWUg5RdveedHL\nWkI+PkxXVu3KXj/aw1lMTlfIxmv3d0108UBGef3xUUZr2d75XWPPv73CzcLI3snWTUhc\n3vdW+tFdRk9aSk3s19Ti/XFlXFrRxlFNzs3XfUpR5mVr5VZg1G1UVk7t02Nd3tDIyNrl\n3tDO6NncWXDbcElDSkxCQ2zjXlvzWkhGRU1aZvzZ401dzXlISk3rytvezd3m31BKZWh9\n4mX0zM3b6/3ezMrP29DN6NzXYE5d3tz54s/mU1RZTE1ga3luYGVeVlF021ZK6dHX12xj\n1Nng0N/oy9Zpc2Bm4nBaa+3a2nBfZv/c6+jT72/e4mNRVGVfVGbjfVdXTUJAQEVOVl5z\n71dMfOVZV2D60NPs3d3x29xu4NDX09t3693ocF5p19bs9nN5evrd5vPc0M3P3d7bbFZX\nV09QVllcV1piYl5d6eVTT296dmtXbdvc297s3tn9Znr23tre3eDb0d1eXG9tYGJvaV5u\n63NZV15lW1dsbWJr/W1eXF9la/1v+etXV29eVk9Z5dDU8MzNXdRwSOXx89li3dRv3eNR\nbcri6c3U4MvZdtBbS9RbVNNTcetGVFtUa3bg4950XtlOTe1PU1tozO1u2U7v7El0Vlpr\nW1tcYNzpcN1reeb3T13mXMj338Vb1PZp5UjtdFfTadfKW1/ZTV7eT97bafDrYFbN9N3T\nS7zaWcNKYm5GY3xj3ctr2l/W40rQT1flYN1N21Nj10PITUjDS99CRb5GRl7pZVTp3s9X\n5c1x3U/e1j5rdEjT/UbZ2U/LzWLOvlvevF7RwO9T3lFAzkg811NO22VF1vc8zs48cdpf\nyEgsw7YvQrDPPL/DfblUUbTrNs/FO0pL9s1X6d6+z+23w77Cw7zKd1zMRT5ZPEVTTVZm\na1TQUE3zS0ZI40lDvi84rzYxu80/wrxTs8A6ycI3OelANO5LN8BtSK+027etwL+328bO\nQ0J6PDFcST1uaOjK4k7PdjtTTUJb3iYpqMsm/are7cBrsLsrS7A6JkVwPkVI4K2zTaue\nytSxt9ReXcrFN0K7zz5gvuVvYu/AUTlUzUBC38k4Hsa9NqpQLaGnJD6oMCdFLUDmJC2k\nvijApsC+wEqwuyZMq0o4u7bAvlzQsz0qadExP9do3k9Nv7nrXicntz9ar0DXvMrFST1g\n7Csvxl82OMusvj1eqLA7Rr63vlzgp6xCW7daKyw8/1A9u6a2WcbCVFtQxesdIMJRN6fI\nVKTCUOy0PCRJMChG2TNIs7u0vjnWo74pUKi0dNvOuv8jKsxaL96pp7Te3sM6JDfT0D4f\nJL3KPKef66+qIyfiLys7MSa4oD9Kqr9Ktvos2b7euLpbt6C/KjxlNjE+vqOtXr6vQyMn\nPsvA6DAqWrnN26ypwrjJGhneLSmxUECnqGj9rTwn01At1q/WsZ2pubtRP1YuIDysr72v\nrrlOJyvzST6zxS893Gzr08K2vkUrHSFKQD6qp1e3ticwYi8sTdlZqZ63saO2PlA6JC9J\nTcmzu6+mzC07TDg+cbOqTCdC6S1DtM5X11AxMzk/17GnvEh8Nh4sQydeqrernqa2rbwp\nLkgqLcu+v6iqxtpQNzc7LTexrcjCu9Q+JyrKzS9cwzNAtsPbtrHJ20UpIStTTtekpLin\nrTpGXDEzTlRNsKa9vrHMOz43LDRPXM/Dyb2zzjA0SD47Svy5zTA3w0s5vcU9RlA2M0ZP\n17CnrtrdXistTTc5s7a+qqu8ysNCLTtMN0m5u7uttszpWT5CPjRAvrnTzsbwUzc24Mo+\nUb4+QsXNXs3A+VpWNCo03M7UrarAubc7NkszMEBbRcOtv9m7xUtNUTlIa+nNws3NvcBG\nOkpXTUpxwr5PN2jXQtzATUhpTTtDVl7KsbTaW+Y5LEVCOcq41Lm2zfDWUTNDa0JWvrzC\nuL7Pa0g+RUw/TMK8xc3W61k9PtnFYl7Dd03N0WPf0GlTUT4xPebKzrev2dHLPDRJPjxa\n5mbLscLdxdFJRVA8QF701s/e1sLQQ0NeW1FUa8/NTD9p2k3by1Za3mxNcdfRxbfAb1RZ\nPjZXU0jGvM7Au8vZ1GU7P1lGSPDN28nI9GhTRkhORUPs0fx0/WlQRUJezttZz81b5dlv\nbtvwWmJlSknaxcrIvMvbyO5O+nlPeeP/+cXC7NvWaE9bV1D2fenc92Nx6UxCS1RcbPzR\nyd9ZXeBeXtNsTFZWRkZTa/rMvuZb72tCSmtMY8zb5cjWXWJcSkNXbV7Wys3c0etOTEVI\nT0xN68nO2dPZ93BXbc7R4vfWXU16eXP51N3g2eBvd8vN283KZWLsTUhjYlbm0+jizNtg\nd3NUXmleW3fwd+9mY+XrWVlu83zwffrgW01WZVZd6GNPXmZlcd7b1MvKfFFbTkBMYFTr\nys7UytR0b3NNSmBoX93Z29nX7F9gVlZdV1vg097p631iWUtUfXBbce9r6NPj6N/pa3B0\nXVb/2ujj09tp6fFZXv1iZv9vYPDb8WjsfHP/9/bp2+Lr82V09GBTVltdXWhm9PFmbeXg\n7t7beXn6aGX/7PTp2d1tc/xeV3xrZuXm+uvvX1RbU01Xa2n23tfb3vBeXVxbaWh25dPQ\n2d7a3uDzc+Pb7Hb0ZllmY1dicW9x9PljXPZ9YGVoVldiVlNgXVp393Nt4OD04u556evs\n7fZ3X2ltZn3u6eju7evl6PPpeWv56Pbw4/F86fZ57+bven39WU9RUU1c6+vW0N7b0e5U\nTlRWW25jcNbX4/prXGJ2Y11r+dvX4OXoellUUU1WY2395uno3eJ3evZtbfn29+7Z1tnU\n0N3m3OLo3vpda+jta3Bpbd78V1debmNbVFFdcXFlWV9mX1tTWmlub2hmfe1wYmNeX2li\nXXrg3ujl3N/l8GlecHNu9vZr/+t9W1RcafnpfO3U1N39aWh58H1ibO3FxUhJ8MXD7D47\nY8nJ+klM2crX72lDU8i+wug+SsxiYl1KZsj9U31m383Za/Fo+tnmUU9v611PX/fc7V5e\nYGzW1EpW1l5Q4NbQ9E5GSVvX3VNWXs7F/VBl27+/Rj1JVNbtRlPQzsbQdldwevdvTU/o\n1vNmbuhoYmZ81tHZ01tD0d1IV+ZPV17uzcO+UDEvT8PF1M/Fwr3CRTE7P0VGTOjP3Mm+\nzdPZfE5e6d7NztfXzsv/TVZz39vraV1P49NGT+BZSObx88ZgLycxuKyxwvNgStTbQzE3\nPz3/xsPP91ffycjI9GB9zMW7vuBNTV/908rF32VPSk9cY1tWQFl6RkJKRkj8vr9ISEg6\nNsiqqrfPv1xFXj0kJDdQ2b6xw9nXvcDQyGBFUMzFxch8TXrGwNZgUEZPYvN2a2Xe/FDv\n901PXva+WS4qLdSoo63mPkhNUGU0KTRTz7u7zT4+6cDAy91DRsC0trzvQkvGu8LXUUVK\n/NxpXFdm719xY0I+S1D8tnwoK0i2r7vNPj7Qt7jsLicwQ8K74jw52rCtuX0+Pc6wtNZC\nN0u8rrpoSE3pxcZcPkJlz85bRjs7Ud3b27tGIy1guba8vkLtr6/mJx8nW7etzS80zaio\nxTcsP7Omr0UvPMasr3AwN820ttk7NkrNyWA+OEBNbdfzfNE/JCi7pqu+PDf8raxAICNZ\nrKxeKSQ/qqO+MSxiqJ+tOyg0uqixVC43ybC0UzY4V8PD9Ds3P1fid3lj1EsnKlahnWsj\nJ8ymp8ggHuOnrDkeIdGhoLwqJ+2jpMoxK1Crqb9FNknCs75NNzrUub7jOjE/39N5TldJ\nKTDfyqahzSYkxaiuPiEuTbOsNyArwKemvTEtXq6oujgtV7asrNc0Qsa7vOg6O+K8t8g+\nNDtK3t5PNCct6Mq7prlWSigtyq3ALio3vrZPOCozt6e3QDlesKSqzTo80a2tfTk3Qr+x\nyUpFTde+1j4zNErP1E06LzBKz73KRUk2NL6+uKvdLSxTw8w+KjvivrF6ND+4p6e3TUrK\nr6q0WT1wv7vDUzY97c3OdkZK27+/UTY3Nz7o0GBTQzvNvMiuxTM0KCdPud88RmO0rdRP\nQk28sdE5PFe+rbDNW1niu8JMPj5A48ZfSFNQXs7/OzY7U9rgX01DRd6/vstKQzAtZvzN\nsdQ5PdC7vnk7aMC6scxId7avtspIRuvDwt4+NkNg9uNXRWvR083bXVvx19RWP0tZbsvJ\nX0M+P/HZ3sNQO0Y4Rb6xvdbOxra45U09RtzXRjc+X8W+1kk+QmLN7khFSlvT21ZUUUtX\nbVBAQlfXztHmUEha3NDWSjxAO2i+wLa01EnKu8LAXkbavs1621HXu7/CTTxF69HW9zE3\nxtFmzWVauMVKxcNATm1DUUUuOeNzfMv9ZszczrG0a1RfPEpa5cpCOlbGydleSMDCa9Ra\nTk/ms1spP/EwT698XLr9yq1DKs1QJjY+LlNROrSn6+Kvw8y+aV3eNC/NzVm2ttfNd9S8\n0EZXb1bAY17ALD6qXirPu7+syG23NCfITyY7STTU2T/AvFa/tlzIvjhRsHxDy2vwvNzJ\nrW8230YwRl5TTtRMM762MT+nzTCnqic8rkAsLCdASS2+qD9Cp7FDYOxiTTtQy1r2s7a8\nqrNN5cxDOz04PTo7xbe5vlO7uDBOrUpIujo7tDQsuTQqqrcr06/T0W4+TjovesU/Rbav\ntravrrjP3W89MzAtM0ZGSO3Fvry9trdZTU0xXEwqSso0OMC6zc23rc1lrdMoRtotLTAw\nW/xTr6rLvqexa2NWQjk0PlBQ7sLCv7nWUd3/RkpGQEtDRdDT3sJZY79XQ8jGTz5N4kkz\n9+Au/K1bSLS6v71XS18xL2lZNEvAvr68t7fF08zeUU1IPlfjU1vW0M3GycPIVk1KPnBT\nO3fWQ0vQxuNQ48BORrxOLVfbOUBQUcnFzrS2Xmu+8zs/RkVCSGnZ3sy+wsO9z2Dtc05O\nTk5eV2LIy9TMTk/fRT/i5klCU+9KO/PrONmwz/G5vsbJTUNRNzRm+j9awL/Cvr6+xd7s\n9kxDRT9IaWho3dPTzdTX11RLVEZt90jryltbzcPQfOnKZUDfWzFC3UxKb3zLwNPGvOZU\n0NRKSFdRSU1ZY/ne1tzbzuhUXGBXWVteZl5e29vu111Z0PBZ19tXT1t9WUV610jluNRu\nvsPW0V5LVEM+WWhLY8vKz8zIz+ZzaFtQVFRMY976893e29fe2d5XU1dOY1NIdvpQbNPT\n6Wvi2k5Zz04/6eBQX2hz0OBxys1abtB8Vmltbm1lbe39fN7g3tHefOjpa19dWVZPVnFo\nbW5Tfdxc+c3deunj6F9Q+WBK2slr7cnU3uhUWmZKTd/rW9/M3e3i91xZUF5UO87NN8+7\nRVbGV0jlbElca1dX+sbO8My+ekLIw0pe3FFO6OVcdH3gzmNoytxm09NsfPrv5uBfTmVe\nWfz0ZVvTyUDZvjtTxkZF+VNNXV7t/HPWZUrR10hoxmY+VH1TYtl3UdfF29Di6c1l/U00\nechU3sbO2s/A7Ff8VE1WWXFu8VxXwOM+1s1T799Tb+hWUVdtzN1U18JgSM7WW+/pW1ne\n21pWeeXQa2zKZtm7TTzR6U1e2ulGTtb6RmDK62PUy8NjQtnoNkNZPVDWWenG091tTF7p\nUFDNz27X3vbw83RM09QqRq4+LbetOzyusTtUvT8tPUo4O1frzL27s660w8O53kDxXDlO\nXDtK1mBry8PCxdHa11ZATltLW7s5H8CpJDCasCaunTMmtt0dJmszMc23vbm3ubr/QF1R\nOTzsyGPRr7bXu79PaN5JRnxlT0tISk5MVs7Z380qIOKkVCGwmjwmpqogKapvHT6wRjjN\nv8jU7dC+22i7tM/Gs7TK2c0/Lzk7OWbGxbSzwt1uVFFWTVZJSEsjIbCfUSvInKofQ54z\nFE6tIB6zsDjjra23Wly5wjk7xds+6brUPk7U3M64ubi78U9NNi9CXWl6U0Y/ecgqI6uX\nQx66maseKaC/FCSgVxpznsVAtq637zPssEUqca/Gbbyxw2LGtMpIPj8/MS9RyN7FtMJU\nPjpAS87KHSSbthdPla4kUaauJB2/0xwrqslAqanQtr9I1lAtTbjj27S2urvI1lA4PEpZ\n4NnOxdRbWUs/S2VWT0lK6S4tuz9Gnb8hsJ03H8qzLB0xsdor2aGu5bi74mw5NPzrO9Sq\nr7GsuOXiYz08Pjc3RUxrzdPQvcBbQDw6OzxP2zArs80h2Z3CM7qozSo7uTsdKrjbL9an\nqK20vLG5PTFTUTtK2b6vrbS+v/k+Pk1GSUtDS0o5OFba4PRt91o0V7cwMK1IIMqoPDGx\nqVc2vKfZKUi0Vi8+/b+93sitr9TPwuhQQjc7d9brwrfJZm9KQk0/Q938QEZNSk1MWs46\nN7RtLbasMDC3zC02t7c6Nran1D68r7/lUHbIdjtJ03BObtfAt77X1tdKPEZNSE9TYNx6\nUOPF0O1vUUo+OdPeMda2NDivvDtrs8U8QMC+OzHrw0w+W9fIzf/WvMNpaPFlWUhAV87R\n3MjC60VPSEBRTW2/1lnR82PbcG/OSFS4/T69tjg9v3kxPb7NPkq9tnlIxbvmW1dZXk09\nReNoaM3JvsLT61pNQj5IaVlR2trx7VttymjxvkY0V//JzT/ittBaxtE6WrhxL0y0zT5T\nxsL3SFzKylxjycbeYGhfUU0+RWZiXP3zfGBIS11PTXDRvs0wLUj5vLDNScaquzY3RkJC\nQjk6erStwGu0pro8P9vfVkJIyLjG5cvF5mtWTvB0S0pRUEg/RVpeW2v9ZlFDSbezMSAp\nQsmruT62na07NDQrPk8qJummqbbCt6SmUy1C6Eo7QuW3s8rxz8paPENQX3ZMRl9aPj5K\nUFt69ndbNC+7pkYdK922o7wq0Z6sMSosLcKwMSm2nafJQkC6rVAnO7S3ysrGuq/IOUrN\nVDs+RU1tT0Z5yt1ZWk0/O0XeeiwmuJ1eHSNQqJqsKlSjqUgjGx/aq0Aqy52ap08uRbrN\nKyZKsa62vcO2uUYzPltTSlB51tZzW+vQ1vNbQi8sVLRKIDmdnkYcHEKgmsYoYKehtiYX\nH8itRiY3p5qfyjM+wrtIKzDit7a3t7vKaT86P0hJY9fW5fpZRkVM48NfKyu+rTEdQp2d\n3x4aNKOauyMrs5+kPhwdU6zGLCj6p6Grylbev9o+OkNDTcizr7O92WtWQzs9SFrm131G\nNzrUtF4qTaSqLhstp529Ixotp5utLiu+oaPOJydgu2ItKj7Dt77UzLezvMvRXD45O0Vz\n1M/Ny9F0TUA+QFnMz0IwTLG/LS24oa8tHSqzo7kqIDasobsxLeKrrV4wQL+2xkg7Rm5j\nPztN5dfGure7xu5NRkJAQkp50cvK11tZxbC/OTu7sz4hKr+msTMkNrCkszcqT7Ct2zEv\nY7zPPztZwLe8ysm9v3lFQj47Oz5I8c7MycjM211GQkhe1tFOPPm0xTk9u6vKLCQ+r6nI\nLy7zrrNILDH6u8ZKQOu+xVs+QE1cT0ZW1MvOysLAws1uU05IRU1e69HO2mZOW8rAWz3e\ns8A6Md+trHwtMdOsrdQ4P8a2yD8xO/rM90xU18jUaVlg/GhMSFFQSENGVt7R1NPU42BP\nSk1e4s3RWUrcv/M7RcO47Tc2dLa3fTs95rq89kpczL/J/F3u1+VdTU1OS0hLW+zc29TT\n2e5WRkBCRkpRY+bX2ehlV2Dl6VNO3sjeS1HJt7roRlfFu8hRP1bKwtZaVuPL0W9ZadvX\n4/Hr4O9ZTVFWVlZWW/rpbV5dXltWUU9WbePtVEVT1/FGS8291khCdr272UlGd8XF71N0\nxr3D3Xrp3vZZTVBjdHPw2dHZ7m9oX1dPSktPUVRZbejf431USlTp+UhFbtdbPkbXwtdG\nPlHNwtZRSnDNznlPVt/P2vn339TT2d3Uzs/W29re8WNbX3bo5eLe4On9ZmBs8eLiZlBe\n3fZMS+7N5UtDXc3MbUZGZs/Obk9W69PbY1dr7XRcUE9ZX2No8Nvb393d5n1lV1pldO7m\n3t3meltOTVRx3npZ9MzPYE5t1NFsSEhm1ttmUFbezdZxV1/o5Whbaevc3ebp6/dtYF5b\nVFNbYGb66Ojg3Nzj7fF8cXn/bV5i38zQ7uLKyN5UT3TT03dTWuzW3mlXW/zg+VdQXWxl\nX19o/ezs7u90XlRUVFRUWWBp/e3s6On6b2ZdW11fduj5aPHW13pacdPN3mNm2sjG1Hxr\n7OL6WU1QY/xpXmh59PN9d3ZzbWJgXlNPVFteX2Vtbm1mXFpZV1toefTv8ebc7F5d99//\nWl7gysrT4t7NxsrZ83rt4OxpZfri5ezv6ejo5uvz9HxxeXRmXl5iX19iX15dXFxaV1ZX\nW2n5bmJu/WJOSlZ0/WJXY9vNz9vo4NPP1+10fOvod2lt/+vt8+zwem1rbGtoaW/58ff9\n/21fWlNPTk1QV1teYF9rc19UVl5iVE5X89HN1N7b1Nbb6P3p2tfe4t7W0Nbd5eXe3uPe\n3Nve4t/e2tbZ3ej5dmheVE9PUVZaXml0cWhbXGVdVlNZY2ZbUVNedG5bT09ZaHz39OPW\n0dTb3dvc3+bm4+Lj5uXi4vBuaGVt+vRxX1pXVldbY21zbWNZVFtQSk9PV11d6dDNy9Pp\nbX3e7XNoaHfgz7u030k+NDfZtLawvFw/TWtZ30gtJyw4VravtsPDzHTlRjo8ZdnDucjX\nUcqvfTAtKCu/nZqboMgmICgtPkYzLkytoZ+m3igdHSdRtq2uvlBAQ96opEMgHBoup5mX\nnsokIDvXRTorLsWjnbE6Ky1Rs8oxKCo2xaajpKCtKxwaHluhnK3eP2O2q9YhGx/Wnpqs\nLxsZOaGanbYnGRottJqUqigXGlGdl6gqHSzNpLckIU2qnZ7IJBsfOlS5oKSw7TMjNqGd\n0ycaH76bl6QwFxvFnZ2wJBcmzbanprxdNBsYPaGdqi4ZMKan3z5Os5ydwycXFy+up6St\nt603Gx43wKatJxorqpmdbCQdHEKgl5W2HRxApqHTIxsk5aensafGIyQvS6SkLSjcvUYt\nISDDnZeVoy8gLy8rJ1Shmp5pHyDKo64oFRxeppuawyQaFy6jl6RFJjyqo8omJC/K0VG4\nqqu4NB4/ulY+v6muxSoeHSbWo5uhqrFbKRwdLrOmp30mLrCfrUUjHiY9rZqarTEcIL6j\npr8mIFaut8zoNDlNPFG3tkozSr1KIx4tqpiUpjQsJ0M+ICysmpqoKh1Gr6/oHhkzqpmf\nQB4fJ1O0qp6frkAjIWCquzgpLVeop7v6OypLqd4jH0KdkqAvFxVxna9jOrufpysUGz+k\nn3chKr6cozQdGSqmmqa5bVffLR0qwKeh4CEtvq+zzycourZCNy4stJmavh4aOqCZnj4f\nOn3MMR4tq5qkYC86VEo3My3fo52dtiYcISdTr6yjoLM3ISFJs9FKUTEqU7y5ra2/ubY4\nGxk7oJirIRkqq6dpNjSxnbApGh1Tn6C+zbmvqT4aGiS+nJ2prukrJBwdWaOfuikfQ6qt\nram+ymUmHy4/2amfn8YeGTGppK03Jy4990k/1KOaoMUnHSY0TmlPr5+fqjEbHzRLztfQ\nrKjAMypap6HIJx8jMMO3t6mks/ctHBspsZ2mSiY0w6quu77GvmYvHR03saOjqrn6QD0m\nHR8quJ2gqrP5Xm0xKjfWttEzNr6oqa2+OS8zKSYuP7+jnqZRJyreqK3uMTFFXcnUzbyt\nqL42IyAqNkbbZragoapoJyc0QNm+wLSttPc0Nt/QPioqLjNwvL6vp7HFVi0pL9aqrOIu\nN923u95ROT0+OC0pRbaqp67C20peQywtPbump7G7ZkA8LSs3fbvfNkDLr6qwu3E9RTcw\nSuW3qKqxSi032b3wNy07P1PF5c+3rq7RNC0tNk7bvr6xqq6+OSQoND3s0V/Ku+xMQ1a2\nwEZAOT1iyLS0sbHLbTsqKjbbuMU7M03ow9Hpz/nZyF4+Sduzr7O51FlFPjAqLT6/sMDZ\nVztIcHPow7O300hNwLu+v/ZFOzgxMEVXzra80UYzQL+7zWJN5u3ays7Qxra+VjMtMTtT\n3svMvrvCYjEtOlbUvri+u7rWT0Z0w9FIOz1CV9/Nz9DNTkhANED6va+23U/zzcjT3NR6\nc25LOjtM3cbP3l9CQkw9PEZOv6+3vsXjW/f2WW3U0XZCPVD67vBZTEA+Rj5Uys63tMXP\nT0PrydDjU1NjTmb5Yl7r1HZOPjpAUPm/wMW3v83ePD1TZsrAyNbj5lFCQkpgW0ZGVFTp\nz9HKzMjWbHlMVNDIvcBdSlNd7ltPW09PW1ZKUHPRxsrR3+xe7v1O/+XNucDT21ZJSk5O\nTmBoU0VDWdzb7+L8Xl1ZTU3jzsW8yvNcSFHra15UVHRcVmBfXvfeaFNMTl7j3NHN48/W\na/9JRfDb08jO3u98VklNad3gXE5ZY3na09fWzt/3+VZt0crCylpXVkLGyEDJv0P/zT1F\nz19rxXFUzWNT+UpQ2cvGyNNodmxNX29P7eVRWmld2dtLVFFASVBGU+Pjy8bcd1lTfN5m\n+d9DVMpMUcBPRspZPvdWQNTUcMvQ5tDUXVd0cNTF09PQZWJlQkleUWN3V2nb5d7ec/nX\n2tvjeebXyMvtXWNXWcPiP/noO1N9PkbPyt7Z91f6yNnr0U3eutfL6DxbWUjlXE7iaVxe\nV19d0M1ISj87ys/Lt2bNu9m87ztROkbKOkjNRmPDa0NUzdpDTTs9wsq+u27LvcK7005K\nTVxlXk9CWWVQ/E1Nxc9ORj5ev7m513zbyri+4ks5P0pNVz5p0Uje0ThWu1tDPzvavbe7\nXPbc0bbMZV43SmVAa0s9fFtR/UzivdlTOjnQxru7S+nDxa26eVQxO1BDa0o/01BbwFPj\nsMs+Ozv3xr7CYtm/vrS+V0Y3OEpGT1pGW/RUV1PmucZKP0DpytHI6Nu7vr3CWUw/O0I9\nQE1J69xaz3Bct8g5SExD7ujLwsW7w8nC72lMNzw7PlxU789o+u7eu89DXktN2fG9vNC+\n4N680c9wNzYzOVNPcfFZy93ts8JD00otU2nIsc7G0226yt/oNjg7O2hZb9FTdN1Wyr1x\n1/wwP1d0tsnFvO25vt3LPjc3M0lKVNNu0cplyMLiz+UxNlQ+07/NtL2/uujaVDg6MDRA\nQ/3i783e+szFxc1UPktGRt7UwL7KwtDLxnpUOTE2OU59/9bi2czZvr9cVlk9PXfLu7e/\nxc3KwtZ9Rjc7O0huedHT48/Xz77T79lAO0pPz8bUv8vIuMzUbTo7NDRAPk72dszW8MDQ\nWdlIMEpNTcXUw7fFusLs1kpAPzQ7PUBdW/TQ99nD0NflPkVZQ+DPz7nFw7/ZyNRcUTs3\nOTtNYObNz8bAwsLWS0NIO0vNyru7w8LNztRtVj87Oz1JUWPr8+DQysPN63FPQENU4sbC\nvr7Gws35ekI4NzE6QEju287Cz8jC/2ZtPDtRTty+vrS3v8DlZlk/Pjg0PD5N9+vLyt7N\nzN7UbUJNS0rbzb+3v8LN6NxeTUI3Nzo/XenNydDU4tzXbU9KQDxO17+3ub7K19ttYkw8\nOzg9TV3bztPN09bIzdTNTTtCSNy8vbm+z8rX3OlGOzQ2SP3Kv8bK4Ftd987ZVjs0O0nJ\nr6+3wPdb8G1OPi0qMUW/sba840hFQEbGvkpCNitA07OmrrvAXNvKTDgrJCo/xayrsb5v\nRkM9Os2+TUUzLFDJsaOvu7be1MY6Ly0mM1PXrq+2tPBCQjEwv7s/Qy0mRt+zoa+0sNDU\n9C8qKic3+casqrC3XjdANy+7sE1vNinbw7ekusau09TJLiovKkPNza6uu7xGMEs+K8mv\nPVk+J967wqa01K242c8tJDEvQMjmtqq2t08oOGAv2qpISEUkSr3XqbPjq7HNwjMkLSwz\nXnS2qq6xUyc4bS5jrEg7QidAuL+qrduxr8rIOSMqLTFi7b6qrK3NKTHZOk6qzz1NKS3I\nxbCpxbiquMVZKicvLzdO5bCmprMxKEpDN72vV0U3JjfNvquuxq+rt75KKCkuLjdD4q+j\npMwtN0w6YK+0TjgqJ0u7s6u3wqqtvdYtIS4xLjs94Kefrz4tLjM62au0QjEkJvy2s6/C\nv6msuNorIzAvLTc2xp2esNYzKC86xai0PyskLcWsr7q7tKemtFYuJiwvJyY8qp6jrdcz\nKjB6sKm2MSQkL8Otu7ywraapykk2Ki4nHCm9qaOmvFsvJi3Lq6euOCMqMD7I8eCrp6qq\nvkXdVCcdGyfPraektD8vKS22pq+7Oyc7TzlDOz6xqK+wws+suyshISdevLOrtjwsLTe7\npq/D3DtM4zo3Rj52u9zar6ipuDstMC4+w7q2tzkqN0q7qbbPwtPM1jMsOT/l0TZOraen\nrNk+Myov47y9wjsoMUZevspaw77Uy142SFExKi5Ks6iqq7dUOS0t5bfI1kAwSt5UW0tP\nu7TJy2Net9stKyw2xrGqpq1wPDpFva6+110+ZfA9PkY/5cj6yrOwuVMwLzQ7aMC6ts0z\nMUBft7PMzcbPzE8vMDc+WkI9w7C2u+s5NDE397e3v1kvMEVTxb7avrbGxvA4O0g3Mz70\ntK2ztMVNPTc5zrbF3kw2QPxi+ujWuLC6xeJQ13M2NDxA17y7tLn/QEhRzbjIXFY+QG1N\nSvll277P8MjAzGA+Oz9CU9/bzctKPFb0zb7gS05LT007OUpg3NdQaL+8wstZQj8+P/PC\nxtBeRVbb3czfVuLbWXpZRf3pSklW2r6+wsbtS0U+SMi/zdNjTfnvXWZl1r+/ytDd18h6\nPjo+SNq+uri9cT9CTenM4GZeTWbeWVrvYnnZbfzGyNxROzo8P1vNyMXNTUhl69DNa1RR\nS1BKQEt65dDdYNG/xtRfPjs+SHbDvcboSkBMX+nU8X3Z6G39XFNrXEhKX9PDyNDoUEpb\n/NC9wtplS0lbce/l4s3DxcrP7X1wSDw/S2LOxsrQ7kxKXvHX32ZsY13j8VlpaFNrfWbX\nyM/gYk9TU1t88215W05u183Iz/p3b11bT0hNaN7Q4/zQy9biW0ZIU1z0zM3f71xNVFtv\n911p7e7a2XR0c1FKTVRs29PT1uZz6N3W03xUTUZKXnri08/Q1O9cTUZFRUhMZWvPucXI\n5nBCRVRc49nL1NzQ2V1xZUpK3/p3zcva6+liT0tl9/bf4n3XxsrM1m1ZU01WY2jgzc3R\n0+B5Wk1ITFNDUWXf0NDQVlBMVl1p72hwzt5aXldGSV5UXfPTy8jIz3dKSU1NV15Z+tnZ\nzc3Rztt0ZllNTU9Z/dfJyM3W7M3mV05CTVrRzMXI1t9fT0tCQ1peYt7Q8NTTb1dQTk1R\nYtzNzdPlcHluYl9WU1xgdNnT1Nb9ZWZPTE9QcNPL1+vQ4uV2XExKU1HbzMXCxc3aXEtL\nSkJM+XTdxsLL091rTkhGSlvp2tvZ293e/1xRTVBcXF7z5uPX33FpYFRRdl5RX2D2bO1s\nbu1aUU5Waffz5d3c3tdoTlNQSkpZZuzNwsPJ0/1bV1RQW23p0czLyc3X3XBWXmVi5tfW\nzcbQduhlXmNmWVf28dTLz976a1xTUVRfY+vL0d3a5llQTkpGTV7829Pb7ulrSnQ3QrMx\nRbA3PrdjXMVmTUXgPTi7Qzu8TEzDXmXCyUbZaSq7uzC0yFa9J2KqLXa2Lcm0NMq7Pr++\nOMrwPr7jfcW9W0ytVkCwZjfNPEPF0cLKt/pDulY5v0NAvkJIxtlpt8Yx69xAw2O/tCxR\nuTbTvzHRwC/f2TDFzTfAYzvA1jm/uS3Kuy1gvzdNvjo52W02vr03071F/btG3rxNS9k0\nPbhIdsU/xVs/q8U+u1Q9u19AuOBNt1A+vE1KxUhKvFQ/tFQ/sd8+w2tAzMtKZsM7SMJD\nUcJaYMlOZclo77lNQ8NG68tJt08vylZCvmNCwt9CvtY/w/Y/2lNI1vdOu9w/vFk2zWs7\n3uhFX8NWTbZbRsVNSspXVMxJRtlFO8L8Tr9Q680+u71Dyt5FxtBG08xF29lA3dNzzNr9\nzdBNz81A1MNGaMpMa7/cSsjwNtHtOejsQ9bbTdDQV8rNPWhtQtZNT8s2QNs9XtBG5sJl\n1r5o1MNb5dxT2tRF5tM03MA23LNgyrZcT9RGNlk/M05KRtfX2bzJ17/ZTr/MYMZedLtD\nMMXOLXqva9GtveLc3TstPzYqPUo95rbJtq3Pu7ZNXt48StNMfLYrKqo5JqS3LaukXM65\nYDsrLjYhLdM0S6OnWbOhRTG2Qip61kjuszQkrmkjq6otuaNX0LRiQj4+NCowOzowt5rA\nb5q0JrfCIz6+UV62VjC2vyzCqkNit7y4a9uwOy7KLR87OyNDoatWpJ09SKgzJsVWNtPW\nJy+wOy2nuE+7XrmwPretLUPAIx85KyTppr5znaM0vqo5LU7DSjPfKSe0NjCmsOjIt6jU\nSKfUI810GiY7Iy2tpv+0mrY8sbBpM1u5MC6uKhyoYB6opjHgoKdbyKFQI9FUHSE8MSmm\nnTGvlU0xoawtN65GHuWtKR3IsyM/nT4onKYxq6FTMEVlIxo6Px2/mi9NlcIunp4sN6NJ\nGmatJyqrOR67wh1cm0tLmqRIzK9MHy9eHB3rSjhWtqTGqpfWTKFDIExcNi1jrUZCtyAk\nqDMqna1FqKG6UMW0KyE8LR0/qjM+lKoonJ0ja6Y8KFq+Niq3vCs5wL0oJqs8HaOqJKia\nSk+tzSgn8zAfqKsbyp0gM5rZJ62kOzituzFwrTEevW4XSqErI6OhJ+yVwCafnyNOoE8t\nV8a+Iy2sJiCuPSGuocOun6nN0L4dG8whGbveJLyevMabtCaw0R3XrDlcpqZbSL5mLyEt\nPhwmsTQqo6lNsKqt2SqzzRnKqB04nzwmtLQzWaaza52ZMC+fPRe0rRcwnDQnmsAdpqoV\nLbAcGrbMKMihoa2tnawzubgcJE0jKkVcqsDDmq89pK4qYrQ3NNkqKUwpIEhWY6S6z53I\nMKHJHbNIFcW8HL2cOd2Zwim90y0qLGY6Jq+qOKybzcWq21A3LFAnI79AKrGzPdStxkaw\nrTrGoz8tzU0tPr7aLvGvLD2nLCevNyC+vyq/nbu0nqSqvMy2MyRCKB07SDfWuKqswqev\nNObFJytrOClG7zRDvz00uLfGyci2TDS3ZibCyCS+pza+ndZGqNEjNzwnKS9UbTuvo8at\nnbbTtNk/My0+KyfmTDC9sfDArbfFtLj91LpDMTYzPC84vkI0rtQzqr4rubcpVq80N6y8\nTbi6yNdK1GksPlcrNtFUb722rbu/rNk+xVYtRew8POhXPXfbOle8xsDLyb5GSrs+M7hJ\nL7HFNLawN/qxNy/XQjdMWc3X5q+z27a2Tln3Qjk0QkwzXL5L7bDFb76/VP/NQjzbRjFF\nSFZ2W73GQ7+/Ns69L02+NDy2ZT6xsem+uMjeTF5PLjpNMT3O6ezCvbzTzr5OQNtINlZ9\nQk/MbFTCzkzDu9TO1s3tQtrWN+7FNt6zTeCu90C+/C9IYDtAXtnUdL+77c27+VPXekxF\nS1w8P9dRRcnKaNDF4m7W7U191khFUE1USWjQTVu/VlS6XUK+6T3KwEjou/Zfz972V1Px\nSD/xVj/cynHZxsbUfc3rQlv9Qk7Za1na4lFv4kpTz+LZ0OLNeU/WYEPQdkDJyknPw0JR\ny0I+4F1Kfd3Z39rF0e7M3FBdYE5JSWNWRt7QWdnD4vzL11f55kxU21RLbfrlfPDMfVnM\nbEvI40vL00rXxlRrxutg3eLxXVroVkZ6bEvlzfDezdHgZu10SFFpSU32Y1NrfVdl4l1b\n2ePo5mXoZkpxbkjx21HXyGvdyldP6U9CZXdZ7dzUzdrW2m3o5lFRaV5WV2l2U2vTemjQ\n0e3a0+/x2v9l3uZecW1mbl3w31vx0WPpy2Jmz2hU2vZR69pjc+Pp9mNpb09Z9FBXz9b3\n2tTbelttX05edlde63NbaF5NVm1UVuDe3eJ64HpTcWZKbfdN/NpbedtbXeNbVt7vb9fb\n4Nfo7u9ga21WWXb5+fne2Xzv2vB04PFs5utdXvb0dvDi3dv29+tgZWVNZdtb6c30z9BM\nVMrXSErl0+NaVNfNa05d09NiZtPR+mNx4N5WTmvm7dnpOkDKyO1RS+nQX0tWaevfUUZT\ndN5sS23R7eZ3WdTPTEJe5u9gVunK01tb5t5gT+/aW1br3PBUVPH6T1Hmze90yu9GTmPj\n3l1i4N3j9nNx2cniSlzIzXRxb9/MWkX0yOVRX9rN1GVe3tZwUFne6FnozNHb8PbQ7FF3\n0OBRbs9jcNpjUE1DSl9o/HNs/OljTE7g001GXWN2Wz9T12NLVtbL1txo081rUW56U1nm\ndl534tD0Ymzd3lxUbNvbZu1zVHFvW+De7Xds2c3U5fPg3lFFadP25eluzc5UV9HRb1Z0\n49ndW15rbEto12VjzM15YGj86GZNXubfXV7ZdmjWdmvbdFtoX/xpT1tu92lOXc53Smjo\nYnZeSlzwW0hW3tP/fePI1GBc7fpTYNv9Y+nm1/9mZXHxc3Dw0d7t1O1OZWlW6O362XDl\n199obetpWVFj6/dtd3fR22Xo4Nf5Xl50415IV/RfTm3ZdOzP2d7vZm99X1BbYnr3bevz\neuPeYmZ8VHx0aeBrXGtwWU5b4P9ccPbm3uJl5tbaeV3b1OtrY93wXmht7W7r3ujz7PPa\ndFpe3O9l4Obg73Hob1Fo7Vl8fGnbevnx6GhOXl5NUGnl7e3s49nsW2xdbF1NZWhvW1B5\n42tc6+Js/fBgbl5PYG1rUWh83eLj12x32nRdWWtt/P/w3Obxc97cbO3a3fxt3uPmeV7m\n7WtzaN7aee/gz+VeZm1xY3nt49vvdtliZXx57dng7ehgZelXSl7/c/ZeZehscXn9a15e\nWlZ39+nwYHHjY1NfYl7pVk/i8GZZb97j5uVl+dP8Wu3vUel3TWDraH3gc9baVGnlYmVg\nXunO4HRlTUhe82nWwsnNzvFeWUhFWmJX7vTcy9rp1sjL19fZ73r2Tk3o9FvfXt6+OSQ3\nwruxuErlrcYxLSspP2AzOLutrbDNSF1aQkrdysC6vtHX6FBM6+LszeBUUVBLU/fTzdTL\n1El57yQeOc+tmqY5PNE/LCQbKqyksbC0u7N8Ix0qSsa2r6aeqFM0Pk1bW1navtY3OGDK\nu7zG0PA/LzE8TrtLHSe7nJemMR0mysYrIV+knZ/tHypFLCcrUKSVmK3I+S4nHx9snpyp\nyz4vNzk+t6m3Sy0qNEn3yLvC22DIujEkLy8zvKeqpKPiKCMkJzA7SLOnra+2yuhTOy0u\nPkbQqqSps9F5QzMtPr6wul4vOdzNu7a+3D4sKjtbT01mrbMnJt2to6svJGazSycqSKqd\ntDAmIy5LQtqpnZym3iceIzjQs6ukpr4tIzHPra/0QEg3Mz7btrDDSF3FxUYjTaDIHxgk\nsJeUsyY6wEAgGCavmpWnNigwQjAgLbCcmaNLIylMXD1fr6e4Piw2vrT9QE7W10I0PN/J\nQi83vKZUIzyjnb0nGRhFn5eeVEOzyScYFSisl5ezMUV5SjQmM66do8orKTxo0Lext8ow\nKjvryNdXb25aT1HFt8Y4J0+swiggPqmXmtwkGxgxrKOepKqqViAaGCmwnpyoSzc0LDFQ\nv6ejq780Hh0rzqShtlQ3PEI+V9TTfDcvSbapzi9Frq5iKx0jvqGbm8MoHxocN62al56z\nOSEeGyHvp5uatCodHC3KuaqfoK07Gxckz6ajrb5MNjA5w7C7QC5TvksrOL+knKouHhom\ntKijmqRIJxsYLa2bl6C8RiwjGx09qpqXpzwkHR4u/ayenql8Jx8fLM+sp63uOz953j07\nw7DQNiMfPqignaovJCEcMLinmJi3Kx4YGzqsnZqdrD4jGhcjWq2cmaHMKBobK86poaGm\nwDgmIDBru7S+s63xLS1Gt6SwMSQjMLSrqqGzQy0cGjytn5efSCQfHRwvrJyYmKc8JhoV\nIDy7nZmguzQfGyNLs6ekultbQjcvLFGtqbNNLkC+sbB6LzYzMc+3rZ2mQCofGi20o5+d\noGYgHRwaLa2empeh+icaFyReva2gpr5RLSQzUezMvrfFPjA727CqwkA5NlC+wrewdjct\nIS29rKafrT4mIB4gVqaenJ2tMB0cGh07qJyZmq1DLSEcJkLct6+94+PpRkXKtr7lSDZI\nvbu8wlBISztTvbOpq1ArJyEqzamhoaOzMCAdHCTQpJ+dn7cwHRscJG+so5+kt1YzLCwv\nPUrju8VLStzCt75LOj9K07/KwsZWRjYuXbGtqqzwLicoKjS5pqOgptMnHx0eLcaknZ2k\nxS8kHyEuV7uvr7S/0OtDPFneYk0+O2PFw8LTVltQSuXKwrbFQjYvM+C0qKatr3wpJCQk\nP62ko6Cr+isfHiM6vKynqbHcPjMwNjtATt3K3k5N1MzNy0ZAVEje1O3MXklGOD/Mtra4\nxUM5PD1CaLOqrau4MyQnJy1xrqOgo7BPNCsoLz/ZurO6yNP9T0JDT11bSEVo38nJ/F5C\nPj8+fNvNvmw/PTxN4Ly40c3CWT9NQjvGqq6ur1suJyYrPLutq6atvuZCNzc+Rk3fyNl5\nZW3OzOtQQEVKUW9PXOlMTkk+ds3Lw/1JPzxgc0jKuGP8u1k7ytBKva2zt7hfLCouLz7A\nsbGsrb3M00s3QFlRYl5LXtDI2vxpQkNIP0xQWeZRSUxDVtzb3VdQeUo8a9Bg3mA7T8C3\nub3Nbcy+0Nv9RTg3PT9ew8C8t7fA0dHv/M/oWlFPUFTe2dvL7V1bSFRaUF9PSk1JXlpD\nU+hLQt5f1K1pKS44aK2hrV7O7DhKZk08UOk/Zr3Oz726zdbGZVrU3Hff0Gxe6Vtr1M/Q\nZVFKPD9GQkhIV9vsXe7tRlNILmunuTw0Kinbo6e4scZAQFA8Lj5GPdCzuMC6ucvIyU1A\nTlZez8XNzc7pU1H8ZmnZc1lt931TTVlcVG3tUM++PCpXtMXUaC4q8bTDvbfUTWvtOzY9\nNjNOxcLAu8XWw7/XdltGQlbe19nO11xlZlFo3uZrZfR5XFFPSUVmTz7Mscg8PmLewrpW\nMD3jysW+xldo0Nvg3GhDPlPs1s7Z+fnUyMXDxtNlW1tNWWZca3lv6d3T3XTp619UX1BM\n3Fs2Psy7zOZUQla9vllAP0JMzsPb9GBRX9HG3VdOTVNla1pKSllt4s7LztFuW2Jbae39\n/e3d1N/0+mhbeWBFcL7URUNWbdTL+kNUzsXGz+1KTXfi1NHoTUhW/dzX433s2czN4GNT\nSEpQUGl3fd7e6ODa2el0fXRsfOP85cpxQ1/K0XdaRkVry95bVmvdzsPN815MTWLg4GJP\nTVFbcO39XVtm7+Ld6W5oUVNZV1xeXF9p7+hraHd3et7tWdnD21BRaX3b119Kbs3FyMva\nXm3zc/ZzVk1Xdt7X425eX3fj3ullV1RTUVNjaHfr+Xrw4+b5aGZpZWtzZXrR5Vrwzc7X\n3W1r3czWbVtj8N7M0O59bFtu3vFeV1NWcOv6aFtZYPbe3u16ZVRUU05TWVtbW2h3bHnx\ndm759GLoyt1WV2Jg6NxuVmvaz9v27F9e8e7r2u1daPTp5e5sX2Z8/P1jWVdXYnNw5t7z\n/XFmZmhmXlNWYGj33+Pp2dxgZdvU6flwYO3Ozdn2ae3m897rdvd0aOPX5vD9aWNraGBd\nXmh29O3zbm10ZWNmX15dWVlWXXR59u56cfp6ZnTrdlto3t7j4+1seejp/F5iZVtmdvTb\n22VUXm38721eduDe+nR5ffdvXllgb2ZrbW/zdl5cXGZ6c3Dr293e4G1l8+htZenc19DR\n3vFoZWJaZWtt8N7c08nM3mhQS1BZXVpo29PW3Olt//lPSE9OW9/6XubZ/XB2aencbVz3\n2druXWDe5V5m9Hnx6fzv6PdrfPdtZWZmW1RZ/9nd9HN28O1eUFRZU1lXUF7x9vTpbWbj\n6F1ebWZtbF1x19Z3Zfz36PRj8NTf6d3m/HRiW3fo/eDW3NfN09z5T01bWmDp69zJy9zi\nb1FTTENNZWnf0el35e9tX1Ze9vpiY+DN1npmaO3sW1z0bmnw9Hb3aF7x8W7p42xpev3f\n32xmbFtjcV1g93pv9Gti+W1bcG9f5tbzbnZeX2BUVGPt+WJeZdbPXlvibGBgS2jeVuPC\nz9DFz9PWaP/6SEteWfnX3tbW6dvwVFpeWmZibtzm7tv/XVtUW/9rYubjevZ68e9USExl\n+mzbzdHDy1Hp0zs+20xJ1Ovm01Nv0ExIdFBU4v3l1/3f0fde+dnldt7U3tnX7+D8S1pw\nRVDuac3NX8a6YOPoNE3rOk3M1snNyb9aQmNGO0xibO/cysLN1tRzYGJadlxP5tpWSGD0\nUO2/Pzu730i8xWjDcEVaNDR5ODe/2detyWC3ZjRTSjtO6c/IzcrNbVZdTkNQu88vxatM\n2q7T185FW003Tlo+Vnm+ukj3vj5A0FfXv9C+zkjQWzRWPDCxyiHDpjbepr/NzE/bNypb\nSDDQu+1Pya1DKXRgM13IwrfKyLhvQtZ6QDomO7dD46OsubHKUzcsNjQ2X8i0uUa9pi4m\nwjEm3dDNt8Cxt0bTv0UsKNdILaugvq2ry2YrKkAqLMXKYLyxvazIKkhIJjnXXrqwu7O3\ny3EmIEY2PcW8np/AqrAqLzEhLjM+t9vNq7Ot0zpXKiA4PkC5rKSf2yjCSh1NukK/xrSj\n/UqvPic7Lyw7SsO9vqOecD7WQCchPM5FsK87r7Azv7s6v8tDTipDyDTPr1te+UA+LS7Q\nq+86r7svbLO7vEUmfdMo1KvAra+7tEAwMB0t6D1NuaiqycLLLXPKITrCMMmut6NNyJ05\nL7o0PPBNsb9NrLkmLL8+Kde9Uzxcxbu0RUDMMy/cxkMxsaS3p6e9zT44Kh0qNzfFTUuh\ntj+wzy02JDdgID+rdrGpOuy2S8q/1qOnO829KCg0QkY2PEO7uOatrVtQ5bpFIDBCODE6\nrqmuoJ6jr0jCyB0mPyMzXVGtyWujt0PIPS7X2TM4UVA2JjSss9mhmqS+aONeOyMjPC0r\n6Lm3Xsikt+3a3ro5IzEvJy07t7booJy3rLc0PykrXiQutlfTrWA7zdRNQE+qqjMuUTMr\nMEm5t7Stp6G2xrdlMSs0OyMnPkVUQ8CmrrOqrr43KjknIz89dKispqbDqqlJX1ArOk4v\nLz5OTCgmv63NsaOs3DEwMTM2Ns2207mtra+/tLDXVkNGOyQmKyMmMPSwtqiftLzGLS82\nMMpvPrGvt6q3dsrLUUA+xbE6JjEtISlLuLq6sLazxVDG2zk7SuBPSsm/v+Pit7/Qwspp\nMygwKiY7PlG0u7Suz7SuZmVfPVfdWV3ezdc4NMa33tO4wkgvMDc6Oz3Wu8m5ra2wvru5\n8FRKTEozNDwzMT7Rs763qs3cyC8xSjb93j7As7+xt+LPzVBGQ2PCQCgwOi8vSsW9u7/G\nt8BU4HA+SFHrcErRxdbt6cXLYGnzZT0tNDQsRVtItKu0r8XFsNNO8UlX0GJPa9vXPC1Z\nsdZAzMVXOjdF69ZW876+wMK9u8vN115MQ0I9MT7UOC7ez8zI162xTdPORk9DV79QPsjD\n0NtCV8s9S+Y8yMgqOcJK2rfDq6ppc9NISjgzSkM9aUZKysZWPMvAQ0jKrrZdzbxNNDw+\nSt3uzb3IzfxXfFYrK8JrLNGz8Mi8wLC04NdXOFBDLt+xU03O4MIzNK40LaxTML2uwEjJ\nrVAqTXA/cNa7tMjfzkksRU8rXb9CyK6ruU2wuytbay3rPS+9zUa0uzHRtyMttDw6wL2q\nys6oTTu3RSs/290/Za2zMD6/LSZNNzm0vq+nwLS7QGlGMy5FtEVFqrQ0Wbg3Ntc5M81z\n6LTFtrFMStbwMS6zYi6ssSRtpiottz0x8E2+rNnCqM1F10UwM3xaOLSzLb2qL0rNNkXw\nPNerTT+q3jauzjDlyTkzv8YsxcAws3Qwtv8xrrMq0KY2MavKMH3uP0jdTTGzwzCmwCqq\nxiewtiFNqjQ2quA6tFRGttk4Pso8MK5cM6S/KqytKW26N0W7WkjXX9DZYElK1C04qEIx\npMIxqL4pu2YtvtM6yNs/v8U+O3b3LUqvOzmuYD6jyDCqaTG2SDe3Sje+vlQ339EpWa4q\nOqZFQKHKV6xAPrc3NM08Tczdwjo/ty02rTQvqd09pMVIrEg5r0I2yTdFzFG/TTquOi2p\nViq0yzuqv1CxS1uxOErAOEpoVrxpLbTNKrbKKs3CO7O/S7ZXSK5LO7s6Sds9070tQrAw\nPrA9NLdjXcLrv15Ats44vkY8zUhZ0Eg3ztE0d64xOLBwSMK+5d66tE3jyjtJXU0+WeU2\n1q4v4qorPqd5OrS3V22wuzbduzA3uUMrwtckuLEjwrAs2al2QLOuNmumUyuzvibltiot\ns1Ejt7ckZqo7Oqa3KqqoLcCnNC208yjtuSwus+Mg3KwjOqNAL56/K6G0MLO+L028PC27\nZSdUtkUty7cxXqdKN6TFLaesK7epJz2mKy2wMS3AUz3MVjvxysxIQKu2LbChMe2hLDyk\nKS+vLjOxRS+6tjBAtFA708562r67UfyxTju2PiazyiO/rSRprSpati87zUhNuLlPab2x\ndzexxSvFsTDbqixKrTA+uzE4uG42y7ZcXLrFWszAdEvCwEDRvTpcrzgvtEonutoows4u\nxbhL1MJDQMLCW0bOtkNcrVQ4tEors04pv1swvco34rhUPtDXQ1PWaWjWxmJOwGtAwN40\nwrQ48K09RbA/PrtDOtZdVMC+bVzbxtM+17s6U7FXSq1OOq9iO75XOM3XOkrMVj5g4ktP\n5vpKdL5aVrptQrbTL8u+L1y2Nk23Qle68FvMYj5W0V1CRdDiPM++P129Okq2PUO6UFe2\n1kvFw0hI6U5AUFxZZeLQVl/KVlTCdka4vUi/tEPduEJUyEBC6VNR09NRVODUY0bR0T/j\nvk/vuEhPu09IyFBAzdxAXMpXSeLrVubZ+m/Zy2N6yl1PxXY8y8053cU5Y8g+XsVXY81c\nTN3bXFZc0fFNydBF5dw769Q6Y9FG/chUV8jeTejWYGjl9v322+ZQ7uZIYtpDVsBZTLzr\nQ8LsQ83rSN/Wc9TK6F/64u1OacxXXsPoU8NtP899SNnoTO3WUE/f/VF32fbt1+N2ZvBp\nT2tlTG/aTVrJaVDD4kzN5U7a3lnx41Rb3fFmXXTXXF7M/VHUfEjT9kXm41Tb0GD6zv1R\nefZZX+t3+t/gaFn3W03s/1DQxl3jxlZZzlda02Ne2vxj3u1TW21zcVnw3lv002bszVRi\n01tZ+lZU82lUdOlibu16fPZ092t56F5r32Jg215W12lK9GhK9P9X2tTx3NluYPZtW152\n3vz60Nn961RL6WJN5t501Nt52eJl8eVmXfnpXmXo+VdZ3uBe7uN62dTt08xbbcz69NdZ\nadRjX91vW1lIV/ROVu1fa+Zb4uZKW+1w/eh9fNn6Yu1WUfHb6F9ea+twXXFRUODe22tT\nztxNfd5TU2bt1uDr6HBrWV3U909ed9fWZXzUZlli/F5o0fb91tbu89bf69v/UExw3nfo\n913s3utiV3D5y8tdYGhLadBpZVZJ08jr6V5RYlts09pbX+brXv3e9FdJY09L6+1bZu5t\nWl9ZXPTg9lFTeV5daVti4tDuXEtpwttZ1/BKX9/Rw9lX/fz64HDo2ezp19n9aeDmW1l3\n21td3nZ91NRoYtzZ5W9aVmbZ0N7j4Oji81tCPEDmubu+u9FRWUg6NzE3T1ld/1tu4ujU\nxsLCvr/ZV19oW1Fa5fDTvMI/Kigvzammrb/XYz83NjQxLSw22bOzu9td5W9pyMjt1MbD\nxls/Slv8z823rukrICPwn5ih0Uzj3D4uLSojHiyvnaNcJzC9q7tmW2br1+1dRTMsMUXe\ntKqmptkmHSTDnJqwTt68vuY4Jx0YH8KZmc8dHW6dnfYsSL67w87NSCYdI2anoKrFtrg8\nJh4ns5qbrbu0s7hLIxoVGUWdmL4eHeOcmLMpJzd0uK28LxoaSp2ZsyovsKOzQCojHie2\nmpSdzTk7Q04uHR0uu6a7KSFMqaGpzVnX3N5TKh0eRaCasSQeX6GftzcrKiQnzp2ZqnrQ\nrbQ2Ji4uJzHDrXQjHTOnmpymvehbNigkJ02onqxMMDdwzVtCODe8n6o0HSS2mpWmNCQt\n9rfRMSAcHSfKoaCutqemw0AvIR0gTaCXoT4kJzNMSlS9t76/zTkkIDinmpykrnEwNDcg\nGCrC0TMnSJ6Xn63JLyQrSbu01F5TSOt3MCtD1LmqqK5OJCZeu8/OsKaho7Y0ISdATU9L\nLyMfLbejpqutu8izyiQbLq2fvicpPkP8ubbbMSpCyMasnq43Lj3Qr6uzSSk/rLMvISEf\nHyQ6rJ2amqdRNjEtN+DUQzxdwNQ9OTQ0yKaqYCs0r5ubsSwcHT2pnZ2tTjosJCssJCAh\nL7GclJW6KkvAQDRGPy0nMV/2yrCzwMPfPDvZuL/ds52mPicfI9GjnZ/tIR4hQro9JyYj\nQKGXl523QjArNk4sHB0qxp2VoEMtPD40Ua6pub2wra5QIx0hQ6yjpq5gIxoqwNEzLSgg\nPaCXl57FKiEwv7Y3HBokTaebo9FDOUOzoKG2NCEqvaCqMCMmJjutnqd0MS5QsdknIR4f\nPqebl5y7PDs8zbY2HBkbLLGalJ/eLC++o6fXMSstWq2ktDAeHCTDnpmjRSYuzLlXLSQd\nIVqjmp2xTkh3u7suGxwdIVCgmJ2uPTDFpJ+vMR4bKMakn74nHSA0t6CftjovXKyo2SQa\nGB1doJuhsMXpyrPmIxsdIDavoaSvu66ko6OsORsZJmutqMgtHyZNu6egrU053K+ruTgg\nGhwqy6aqzde3sKmmxSYbHCQ35sC9tqednqGodCcfJz99PCckKTS+oKO+bGXuu6uosz4m\nIB8nO/ZZMzbFpp6dnq84JCMvRUI6LS7FnZiaoK/iOTE0KyEfICnIpqSqy0bDqKSnsEoh\nHSk6QEI0Kic6s6SgoKrMPUXdTS8nJicwyaadobHCxsCzwywdHB8u1rawtsK2qKSntzck\nJCo6RjMrLTrXrKGnvczU0bemnZyUjIqNjIiHiIuMi4yOkp9OHRQSEhESFBktuKakrd8t\nHxwaGhoVFxon78bRVykfHxsYEgsHBwsPFBscHB0jOl9XQiofHBofJCAdHyEpZqyjoaew\nsKyqsVErJyxMsaCbnaGnpqOjqt0uKy8/291KPkjiu6utz0A3NDxMUDEgGxwgKT6/sbaz\nqaemo6ewu76wo5uamp2dl5KRlJ2tzm3NurS85UxavrO4yk0zLzMzKyQeGhsjLTM0MCkm\nLT9RTkg3LCYnLzg3Njk/YL6uqqy0vr27uL5QMC029K6jo6itu7+5u943KywxQnR9U1Ht\nxrivtNRRSEZT3NNRNzQ3PV6/sa+2ube3u8PmPzEuM0Vt9nZaY8Kxr7bzNioqMT5UWU1Q\n77uvsbnG4N/Kw8rmUT8/bsbCu7jN8MO9tLC2vM/izbu+vsBrTFM/QF4+MTY0NlbMaUlN\nV8ivqqyzu83r5dluSkNATdnDwL++urSxr7HA8F5QTmjrd1lUY9nCu7Sxu8XFxs3Zb0w/\nPkJU7et3Y2XTvba61Eo8OT5NY3leWfrLvb7K3VtQWV1RRj87PE7i0M3aYlBa2sXDyNdc\nRT5DTFBUWnTZysPD0V9IRUpUXU0/Oz9jyb6/zHZTUF32419GRU1b49TtXlxt7dTL3k9I\nRUNOcG5TRkJDTmvj1t9eVFpbVlFNRkJDSVBQSkNCTvHTz3NDOzs8Q1ZmVE9g8NnO21pJ\nRklKUVtOSUpOWv/idldaY2Lu095eV1ZISF79a+/U0dPP0+1iU0lIUVxTTlFc38O+xs7X\nb1d05llPX1pX28jXaPr0YOjGyN59bVRNY+tmaObl9NnLztTP13pgaWhaVldWU1ZdXV1w\n+t3DzkZG8FQ/+chKQsO74sy51Ez230hFV0U+V/xZ48XJvrO4ysPD5dnG3FBNSkBFVGjm\n0MnGyuVlecW8RikwzchJ07lIObiq1Dvw0ElO6EkwNOa+21fQvb22sb/u3cW+2UNIfWB6\nw9s+Wr2/ysLMW1Nc4+IwIDCxvjtNvrCordtDMC3d0yAaMVlIubFowKOhrus3OE5FNC8v\nRru3vby+t627aFlLPUpFLjd0Mx4up65IwLCtoKgwITQ+LR8aJ327o6tItpugWTY0KC85\nKygxtp6kraekrbfKNicsMS0rLzvNsHwqYJ6n18a8raHcGR43KyYbGs+fqaqqsKSgWiAe\nHys2JCbWo5uZnqiqrcI3HRojLSwzYMCtnZnQHVecySZCa7ag9Bcf20UjGiufm6mprqyf\nvRsYJiguLSq3mJWZobGrqD4cGxwhOD0/vaiemp2nLhdLqCgaL8CbmyMXvrAuHh3NmJ2z\nubGkuxsUHyQtLi2wlZSbpq2rtikXFR02SS9loZudnaaw0BsVOzQaKL2fj6AdNp7GIBck\noZq30LSkrCgVGikvKi+ul5WdpKqtzSAVGSY4ODa5nZuep8DKzykYFyYuJEunmZKtL7bD\nIxUVVpqqWrujo0AZGSk3KSyumZWds7SrUBwUHDBKQEqqmp2qwM2/TSAbHiQhM7SuoJia\np667JhcXGjS+sKOem6cmHCYkISNmn5mcpqyuSh4XFyZp18immpqwSELR2ycaHS3ccSlK\nnJeeo6GrPB4YFSE0L66bm5qsPiofHRohtJufpqGh1CAaGiMxT62dmZqxNzBFOh4eRsXQ\n0LGtTc2ep1awpzQcHBwbLbijnJqes3QmGh0cJ7aenJ2bozcdHB4gKrqdmpihykAxIxka\nPK2syN+omq4cG7SoLzSvXictJCHFnp2goKRfIBoaHChop5qanKHKJx0cHSHXnpqcn6fL\nKRoVHTu2qqqknKdtLRcaydEqzpqa4h4pOjywpq+npEIbGhsaJL+gm5mbs0spGxodMK6d\nnJ6fqjcaFx4oOLujmpmmVjMnHRokxrCtnpyxNCsnHy20qa2ouyYfKCAkuJ6enJ23LB8d\nGyPZqqCcnaPGJxsdJCc9qJiaprdiKh0YHOarraqhmqkjGSchJsCqpJukOiAjJiZGpJ2k\npK8tHR8cIMihnpybqUYqHhoeLMagm56mrUMcFB9Q1rann5egJxkqMSAg45uXqLPALiQg\nGiqrnqq2rmghICcvyaOgpqGtLyAjHx9PqKOdmacoHCovMEVmrJiXvCYtMTQkGTubma/X\nr604GBcza22xqaegri0hMD464Kmkrr1oLSQqJy6nm1A7oaFtMyYgMcOxyFB9wL/NLBo4\no6vOa86jriAZLnQ7Lmufl6jz4Ek3MCcrv6atvbfAQzcjGzaooamqqbwoIzcpHjTDr52f\nRizX/zYzKzannM4nMUNdSCQ9nZuuwrewWR0ZLXP9rqDDM8O2PztDQraqTEKouyQcIC1t\nwK2jrK2n6SoxJhw9q75cy8axqkMdNqiqyEtaqqc4JCAdN8nLp5ykrsMrHiZCazMxu6ex\nxUBFujchz56muc08My0tNDRLr6qupqg+MNrPyeUeHamcPy3tr6Q/Gj6mw7y4NDYzHSe/\nz7uhpMNIRVdXLyo7vLZc3qi3KyQzXb6soa0uSa1ZLTk3Y6zFOVlQLOmjdh0ru7HLLTug\noTcqLze+xUuto9lASjQvQ9Db3cCqszY7zb7NT9qko9xFSCodH1q2Ni29p6y7Pv2qvjrT\nXB0zp787SEO0syQnr62wqU0oQDss8LOvoaPNTO02KSMg3LAzLL6zay0sv63Ct6GqMyzj\nzT4qKluzzDhUw9toyms2SL+wrLnJrqtNKicmM+W/3mJRSDg2N/yqr8i4rbBLKTy0vjM7\ns6nbLztWOSc/q7ZmzLCnrWg+ycVDQEwvNOJMOD00P8VNN8Kts6y3RTQ2QGBd+r271zQ2\n8+4+Nu2tt0NGtrFDLvaxwtnCsMAuLUhDLyoz3shUV8PIya67V82+y8V2QsjINi45NkPM\ntrS+0b/CZmXGs8ZbbdnNRi071FwvN8a+SDdIZUs+y6uwxr+2tMo/PltLOUVMN0jUYk9T\nVMC67tO0tr29dj43MTdIQj9u20M0RuZtYOi+rbRlervDODFZcUtQ28N6OT5oYkxG4La6\nysW/1/bG/UhXTEhXPDRKTTY3Q0rUuLCusbi9zltM5stQQFfrXj43V8PXSP20t9nZxsPj\nTOK9xk1KZlY7LTM/PD9TVkjfv8rAvsq5vWt30+le8Ug4Oz5KbfrWycNuS9C+v8/Uu7je\nPlDrQjE0RUNCRlPRW0Jfys7507uzvtDM/UlabkNGaFNj5k7bu8p23dnZv7y9vs7tVD89\nPlNIOz5CTU0+RtHKUE3JvM/2zM7fYE3z1ldDWdTpS0rez+bUytHPw8veytb3zls/SlZG\nRVNFP0lLa/f23N/aU1TT2tfo68nNXUr56ElCTuzg2c3Au8rdycDG33fJwHFKUUk8PUI7\nQFFTaPBf7Nd0Xl9WYNfR0MbZZXNNQ0Zfdlfp1szF5XnCu9TbvLzFzeNz3kYzVEYxRkY5\nXtk8Wb1gbr/RXs3ZUG1UXGxASu9QSddmSOlwTdDC1sO6wtfNw8/Nz/zp4k07UFc6Q0ZU\n1Ehv0fFXRchpSsLPYsa7Q07PQkVoaEl819/lU8rJW+LIbfa3yOC7xld03klN3F5GW11M\nWVZOZs3WQ83CP81RPs0+SFdbU0PRVl7R/FfZyEzg2VZo/e9e6Gba6U3e5l7tzVlfymZs\n0NTp1s1u8NH/Y/FuXGJtPz7OQzfTVFTUWc/N3tPPxdnJ0VnQzU5C7E4+93lUbs7c/Ojb\nzenZyt7cv8XoxcZjdH1MRllTQ0pXSUxbS15taPNAztNCykje2z/NWWJWaPdI3WNPac1e\nV81eaX3i6P/W09/23+nt6NRuYM1zaNTgeeD6T1deW1NUZVRZW05XSd5aQMZf39lXvWNm\nyM/X377U4svoS0tmSEhWWW5r7M3g2sXU0NDNzdnC09zTaF1ZTkhRSkVZSU9lTltl9Fz3\n6TfA3THCSVr3Pb9ZTc3R/GK/7lPU2lpM5fBObe/pX17UXVl83tZtv8LfvcLNzc3bcXpW\nVE5JU0pCTk9ASGNA4tYwt8w0s17wxk3DdlzWyF1au2lN2vNPSPRsTWvr11nowuXTzr/G\n37TDbb/UTldgQkNMRUZDSVBFSlNUSmLaQ9n9Rr0+Xb4228hJ78nv7cZd0MhN5dtNT3ZU\nSf9eXtpxzM3XwsLF2cK+YtTIUE7lTj9UTUJGRUNFRkVMV0a5SjGjSTaoa2NXvb48xb/U\nRc++OEjgUT1G0VdK6MbgTb3C6ca7vfm7uVzK0VFXXEZGTT5FSD5MTkhDYmVr0C3ppiw8\np+YuTqdKKa+zNj2w2TB53E07QNb2Rly3xU27tsnRu7TLxcPKykZa2zs4aE82TXlKTVRU\nV1/GRi3RrFcjrqMjPqa4Jz6hTSq+uDcx3Ek+OzfI4DvZr8BOrq3QvrS55c3cW/E6RUo0\nO0Y/P3xmT9fo1LtFMMbFV307XqpKKK6sLS2rriM+qFMpWrxAPf3gy9fXvbi7wLS3yL6/\n1FDp/T5GQ0w+PWxNS2ZdXHTGzTQ80Epf2UY7XbPaK8ukNyi3sDEmv7kuN9fdWVdxwrzj\nvq6+vq654sK9TUZQTUY+QkhbSErcUFTcyMw6Rs1KTsB0N3fQTGK7Tjit1iPPqS8gw6ou\nLbO+YL/G0K+01Le027q3SE3FUzZIST5KTVBgcFbW1Nz0PVRmRdvDO0LNPkPX3UPpxTZi\nxi0/sy8hva0xKa2pSsKtvbetyNe53mDJRjjibTRD80NP7Vpg2s3CYz1oZVHD3jf6bUPQ\n3kpov2w/Y0Y+00043EA4s7Y0O6SmRsOnvsWz5krQVz7xRTflXjx51D9QzG/PyEhOekrP\nv0NCSj7w0VFNXXrwX0A6Tf1OVz4+12PTtms+s6G9QLaq2evCTT5oSjtaSj/e9EvQzUri\nwNRgVkhIyn1uSi1Db93Q/T5U1+bdSUhN3lZASEBfyNnmvXrGqbZG66q7QOPIS1PiQ0Vr\nVFTL8GnF11vQ10JafVDd20JAWkXMxj9AQ1fbxutfY+nOZk1CXvzp3E9v1unRvFZDwLN2\nO8a9WVnPX1PM7Vnmek3r80ZZZkBJ405IVEpP09Zi6z9G2dzWfVRT29HO71vez8rza15b\n09xe7W1Dz71ZPtSx3U3Jw+PRymbtzev3z2JP71NDWVc+TWZZ691PTW5W0ddLT0xe2c35\nevrfzOVeT/zr6d9XX+ti/8pNQs2/XkLMwuvpz+z/ze9d9mVMaWNFUWBKT+lgWXZbWdvt\nU1A+SG786XBgedTR0O1t5dfXYGleZdvo89rzacLDYFu/vGJuydHv1+BXaXdUVFxLTl5Q\nUXxxYOPd2dTwVFlaVuVdTE5T+tnec3NdaHZdT1D37d3d9+Xi7NvaT1vNz1dZys527+Br\nbelbUWNZT2ZeV/bxaObX+Xd6Xm3gbWZpTGvX1tbmfHfo6e1eWWnp5mj08OLR2+3gdlzW\n31BZ0dFWXOVuWmlfVnDza3ntZnH0XltrXldtbGn3eV5pd/3P3mhuafrueVtcV173emJs\n19rX0d7g4PPs6VFPfe5UUN3XdnDreWvtbV5ubV9tZVdiaFZcd2Jg/W1r4N/o6V5019re\n5nFib2Vpa2V63tHc29vj3eV5bmNX+uJlYN/Ub1/x5nprZlpdZl5ea2Z94/p38fxla2xg\nbHFcXnBl5uBlbPnp5eL5bWJfenlvcOnf39xzXmJeW2VbVPrZ427r23pfZmJecH1reuLp\n5dng6OX5bXFlW15fX3rl6N7p9Nvb4vprY2tz/PBtcPnr/G1rYmtrX1xgXnfg+XDp23db\nX1tTV11aaOjl5tzd6e1vX19eWmBtaG79aWn28Nvc7Ont5eLm8Pr89Ojtem38/Hd9a2v8\n7+Xd7Pfp7WlcaGVbWV1eYHNvdOng6/R6ZmNeWWBzbPDc3N7Z3vZ2W1xoZWVfYF9rc3p5\nduvg4PN5bWVpZWJreXzm6W5r8Oxra+/o7uPjffHsd2tza2BpaG7w9v3g2t3a2u15+nZw\nXldbXWl6+nx9+vfs/Wtw7e30/2ZgZmlobWlv7uz/bHp8aGBob3Tt6//07mleX1tcX15m\n9/f87fN69/dtW11zQtzWOr63Ll6xP1S9TVDJU07UYFvG31/T0dlRcMnv5sxJUMNKTcpL\nY8ZQYs1TZtBeY9b0ce/uaHF3V1/9aF/T6Uq+6Di2tzRsyDtP00ZU0WNly1tezmNUWeJp\nPl5oRsrMQ8zMSc7jRdT2Rd7oSt/fYNTb8+L5a15ga1dX11douVbwsT87s2I/xXNG1uNX\n4t5p/M12bs3UX1zN/VDTXkDG6ULNa0XNYEjO8E/X207pYkprWVdpZltbcXpT49pKztZA\nyb49Tc1aTsvacMvac9f9VPz0TV3N61PQ11HK0D7U2T3gcD7iekPo6VDp02Pb12P9bVtb\nZWVXaOhO19BNw9A7zcZQ6+ViZvB9duX0duLda23N7U3Rzkt23z1c0z/0yk/OxV/Nxe/P\nyN/l1mlpd1pbX1tbeejWzjgvttAnyKk3SK7TPlt6QjQ3Pjo2Rvz91r6zs7u3uePzyj44\n6z873GVfw83RwM/czVbQvSMtqjghrqo23afOQLFcJjwwHzQ/Ns2zr6enrK637UY9Lyov\nPD9Gw7S3raq2tLT0Ym43OcYwHMiwIziguzfKq6stJrs+Fyi/LSits8agprGpxT5RLyMs\nLy9Qxr6spKerq7PPbEw0LCs+Nx04qDwznp9XvqmqPh4+Qhgc0GUhUJih1KSd1C7QPhwh\nKic4Yrmjo6Gep7e45jMtKCcxICG0xi2nl6+xnbczsUYVJzYaJ7zGWbadnbi8qMofJ2sn\nGDO7NjehnLGroLHOyV4zLS4dHdRFI7Sct66dp1n0rjAXJjAcIdrMvqGtsJy3MLbKHCFN\nPCcxtLdPvJ+kdsifti2+RRcvzR4wocNIo6nNym2t0xgvsCEdr7cxr6BKbaPQLuJmLT1C\nLr6xKm+gTTakrFnIMSe+Vye2qjG7oywptycjo08bqqMnw5rNRrG6Nx85sC0kqqox26hX\nQqnKLcW9Q8YvHa+mJHaUrTSnqiQgLiAjRjEtvLbbpKbOqqY+XsUaIa0tHqq2JtCny/mv\noLZIcywozldIpqCtu7y+PCEmJiPMxh/rnTEnn7cosKTp2bswPLE+J+NDI3TQLfSz2rRu\nLK2kVq+apru7djYdFCkwH6ydOMCdWSjU+i49wL69sdY3va0pKqnLJ72tLTA7HjOnQzma\nl6qeoFtNPhoeKxp9nTExnL4fQuA2fLSmocjDuSAk0Csvqq/ZsbotHCZGLUaepKiXqjrD\nNhUmTSnLmt4to74bKjsj9qvIpJzItMYYLqwtOJ6ku7woGigtJtuhmpejqrMqGR8mITyf\nmK29rTggIxwsrb2zmaM7Pi4VJ7Y22Zebqs8dIDkeH6ukq5WdTF40FRokJsCamqepsTAZ\nGis2d6Sboa/QOR0VJlZmpJeewDQvLSEhVqagpJ2jNyctGxcnTaOYsbegPxwvISaqo6yd\nn2I7KhcXLeK7n5+zrLAuJzc22ba/qp1eIDcnGi3Oo53Dy6o7HCg4LHSdoK+qr2w0GhvM\nvCcsr6Ooz1+3xistvddWuK5bLz4xN7ZtJve0RnrN0a9oK7SrM9moWzk2TVsgKKan4Kec\nrTc0PSogI0imq1a7oapIHxszSDS6nZ+vvUomIS1Aa6qmLyarrS5prLC3XdCxLR40Lyjt\nqqOut6PAGhouJCawnJ6hp7G9LRgtySsaKaucpKqgofAdIzMkKriryru018qxwC8hKj00\nPLetw8Kwu9m+wj0dFzlXJ7SXm56fty4dGBwqM/OjmaTFuaO7GhIpMyd6ppqfvr+3VCcZ\nGUy+LU2kmpqwdLFGGh9XST3Qt7PORqaaQCnALBspKjeqoaSZmjEbPi0aMbCw0NCjnNMo\nNjMoKDa/rLvdwKOeLx63uCMcKM24r53AJk68OkXUt6DLFSatKCCtpqiqYzhCJBgpn6E+\ntp7ONtbUvmkaHba2Tq6uqZ3eLMMxFCNvQM2sppukQ0YjGrarJD6rZVu+TqydQ06hQBor\nPkW7u7eeniwXP1seLLCtuc9Iy6S+ICQ2PrY8IK+bt6SdSuuwJh0kHjbARaSfKTuj8UKz\nXD4+Iy3MLCmjl7otU7e2TyM2mpk8Nrw0JzovTLBFLLemt7DRLrStJyYxIDOvTtednqOh\n1zQzHCe9NCi9yEm7s7Cr5kK02x0aP7BrLz60obYfKqe2V62uXs1OK+29LSpTOs6oPkCh\nq76kwyr8Qh0jJyfWubadrze3rTtKzzw4My1b1jFpoJ/KONCzxjYmOqSuKjrIOzvKWdqx\nUz6wrdvDVCzQyicvTS1xqsu9o663szcvLx00uzszuLxsvr7Ct2M+v+snJlC32T5Lvq2+\nKi6utvq6uF1tVDBNwDkvWV/XsWs/rq/es74xQlQqKjcx2624pqhM0LNDNFZFNzs6UcVJ\nVK6qyzdPxsVFLDiurTs7aUJKytDNtuY+zb9LTkwzbL84N+Y6RbPJ3qyqxs9ILjsuNMj9\nWba03u3jzcVPOOnNNC0/y+1AQ+musTo6rrtIz8pO3M04TrP5O+JrS7/eONG8Ws3FMzds\nNCxF6MCzu6ywO0m+WUjGZkLUY1e+6TfLsMlDPG/IzjkqX7NlMGu/TNGxRTPWaUizr0b5\nr8LF6C4vSjw6V2jGq6zbQDtANCZFvlO6sy0pxbfFrtQxr5/ZMUVCO1Y0JlC07L6mwkW+\nwisvxeW7vCQdV6q5udBFqpqpSDMuNEgrGyPAo6iwrds7fDEfRqOoSSMdNqetTU27o52k\nXCw5RTkzJB5lnaG7ub5ATDAfY52hQB4gRqqwOytUppyk4jluvkshGh0vrZ2swK3DLSo2\nxqOnNhoePcbK2krro5ukwDcwcE0fGiE2t52jtKxKHSZPtqSqOh8kWbHlPsq7sKSpyM/L\nPjAmHCEx6KOan7A0HSfCqq/FTT4tKVvROd6orbSsrLC5UywjHiMrLcWbmqlUJyRTsLHe\nLkO6OCE+vFq9pMo+t6apyD0uIRwjL+uknal8NjhUTeyrwC1zszAdLbzO/Kqms62jqdNF\nJxUXJnepo7dlzbuuySc4p7QtNnY2LTpCQmarnqSppqy9Px0UGjTAuMO9ykO8pMItTq6+\nNDBFSD43KyY3r6OdmJ23QiskLS8mKC/dpLA0UKqsu75oO0plQy4tRVQxKTawmpWasDMq\nNjtPxTQcK7nPNlSzr7e0t8C3s0MgISYgM7Sut7azqJ+ktzcgLMbPOjMtKDNzzMa8rqq2\nyLSu7CYaGSBbpJ2kvjYrxZ2g5kP9Pi43SEZCNyckRa6rqKG0OjZLTDgoICdWp52p32Jg\nWr6srr32QjYqLVPiOzbpq6CgtzMnLUPetrgwHyzdybuopKq7TDNAv7ZQLCwoJju7r62t\nr6yvbCsdGy3Gv8bFSjNA1rquq6mqttPpRSsgHSQ+t6entM9LWrCkszgrJyEkMV+8sL4+\nNteuqqamuko6NC0oIyY9t6Ogsf3l5vzDucP2QDErKSo2QEzDqZ+frWAzMUD3yLr/KCZI\nwsi+tLvfSDg+xq63STQxLjzPvsLNz7yxvkguJy/OtLm3vlA/V9vFura+VDY2OjcwMEW+\nrauz0VFAOWi3zTQtNDpCdsm+trteP3m8u7u78zs7Q0Y7Li1Gu6mkr95ZT0JP0c3iVj40\nLzNI/ePItququVM7PU7s39bpOS9OvLnD200+P0lgyra20UpFPkDjyN5ZTWXDvmA5LzBP\nwL2+vdRNUG3WwLu4vvBNSz4wKys5y6+srra+22XAtMxCOTYzNjk6QFprXP2/sK+xueBA\nPUBAOzAvQNm6sb5OPUBJ2rOttL7WSjg3Q2N2aHHc4EUxMDpjv7m2tM1DSu/rc2ZRTVRR\nRk3bv8LsTkhZvq6us7a7vtNJODAuNENMRj43OGW4rKqqrrhsODMwLS00W8C8yPRa+c3C\nvMVrUG7NurCzwGU+Ojo3Nz5DQDcsLD7Ds7G2urvAzuVLNzQ/Ys/G4kpDSFvOtq25VDg/\nz7Gsrrz2PTQ3OjMrKzAzN1e7r66vs7jG3utcPTc8U8a7zUg7Rsy0s7m+wuU7Kyo72rSn\npK7NS0A2JiErNjAzb7qzrKmsuN5KRkY7P9vK/0o7ND7ZurS3y1RJRVm90S0hMbakn56r\nPCgtMzxMOCcfJtaqqqaq11C3rM0uLErvUFdFMDe+qqu4Vz1QV1m+r6ikzR8dNM2rna0x\nLjYwZb43Hh42uKujocU77fw4T8jWbT8xMzrOrcY0Pc2+xtTNwrqvrbdNIRcgzqecmrwk\nJigxrrAnHS1KuJ6k5lZwQki8sNo+QjAjLdS2ur3FRka3ra2utshFNO2r3hwYLMihlaYs\nKDlOsLomFx4vzZyZts3OKSu+yEjWWyotRUjIrcM+QMCqrK2qvU5aX0ZvruYcGi3Nnpmz\nMygmXaGzIx8zTqSXtjMxJC6urXffSiMmQDjMob5FvLu6qavKZWU7Pr+3uU4dGCBCnZWu\nPUk/O6yoJyE2KGioxb67Kii8rci+Qxwk/c6oqDcwyr6toKjGwtwsO8t60SwYHUmklZzC\nMzNNSvRtPkItJDrNvammPh07sbqt3SEpSMqmpE03wsPGqbZCSTcut57IIRwdSZqd3Mjo\nN+wqHb6fzDMjHcybnrNIHiHCwL6zNzHLPi+0ob5fTCY2qq60zDbIvi0hNreordNWvrNK\nHRc9n5yuJhpGqqeoRS3WUS1NxsKqsywmM2akmsU0MSzGqbCotiQcO6qfocMnKD5MPiQd\n6J2jPyEpwKCuMC27oK4mFx+4mqgzJCfKrddovsxlvdAqM8WvoKkzQr/LtDcYGiA0nZfF\nJCAnsJy26MrCpKQoFSTApLAuJlutti4fVJqYviEc35uXpEMxyr8uHx0kdqazNyoqy56z\nNzM+rZ2jrkgZG9Gpq7cqIU3bWk4mI76fpK7LvqOmyTotUMoqFxk/oJ1OHR04qaS/+beq\nr9EvHibKqqe+Kja3sMsqHCE2tJeVti82S62k8zQ6PruqOB0hLU3JQ0m2razCSL2mrTMc\nH86hobs2N3xUMCowXq+msVc7Qremvjo0SLGnuzsfFR7MrLHNMTm+v99PLD2ooavCQD5Z\nPi4vSLu8Py/ppJ2wLCM2t6q+Ud6+v3cxJCdKvbO/O0W0r7dIJi3sr6ChxSwtOFTISjp6\nwK2ndCoxPk1iPkXNu79POuW2wzMjKr2mq982Pt/vOjRF67esxUI8Psq2VjY7VK+pxUUp\nIDG/s75iO1a+v9BXN3asq7jPYNbRTD40PstzOTzIqKC0Ni49yLnmSFTby20+MC1Dxb7F\nUEDKusVdMTTbua+qvTMvPELR0FHoycO21jE3TFPgV0be1t9mNjzPzUYxLmiqqrdpPFRo\nSVFLYr64vMtTRVvKzllMaL6wu3M5LC08yr/sXUpa0d5mSkDWtr/X903icz5GRlbF3krd\nt6+wbzZCac/PS0rmdmxtRUNr2c/RWkjxzcvePztWzby7xk8zO13ixs933dPNyE83RVBN\n6F1Uz9d8aUlZ0XZCQ1TAsLxrRUJZTz5FSmjAu8bP7F3Xxu1WWWLFvNRcPDZCer++fFZX\nes3PZk1K9sDG29xe9+BIQktMcXlKZb65vOs+RuXb5k9J39HU1FRCWuPb0GZDX9nb5kU/\na9bAvttOQEjrz9HsaP3Xy9NQPkVQXtPb7MzP6XFOUej3S0lO68jaT0ZIV1dITVpizsPZ\n92xX9s/vX2hozcLtWkpAWdnLyvlWW/fb2/1XWdvGzOn5WWPpT0lUadPM+XrFvbzFXVD2\n3txzU/noa/FbQ01tcdzcVl7Z2dPuSVT0/NTgTUNFWdvU5WBl8drO31lZbWl6eUxTa01K\nSUNW61dKU13Tw9tfbHbW215lcHPWzfBjbV/l0XZi/fnLxd7/X1Bm4t90UEpNY3xmXFdg\n08jN1t9u795cW/Pp0M7s7czM0+BPTfzm4u9l6+h5+WBNTlZf7ltGTV5l8GZQd9PMxtFr\nVFfv19beee7f5u1bSU1ic9vX/9veW1ZJQ1FXSUpTXeDiW09Wa+Li3tfR1tDZ9O1eXtfc\n/Nzj2s3mZVdJVOjj3tlxW2L8eXNiTHTp8O5pa3bb62vp4NDL097OxcrU61lm5XNjV05t\nfWVwVk9gWV5iTU5saWNpTU1m9OzvXVdud/DX23FbXF7zdF7letfD1nrtemtPRUtTYG5l\nYm7Z1Oj9XWXo4ulg99vm2en07Vv85ltr3OvWz/du/W1s3t/06G1fXnxpVk1NXlbp1mPg\nzd7md17o8V7u49rga15NZf9r7Xbi3tvX+vBiX/xiXmlZcNt8aentfd/Xc3ZmVmb63uPl\nXlNbb19R3ungytPt729pX1NPaGtUXvx94sn2TfpgaP1eXll85eZ3evNcceZeT2NgXVxi\nYGbi39bI2m9dZXFeVk9NYt3szuDjytdt9G1Z5nZi6OLZ61RdSlrzSlBZaOzeztve2eJ8\nXul6V/fjbfN0ae3bzdvP2WnW19TWXm1vYNt2adle4+hKU1dRVGBx3uNgX21X+dp9UU3u\nX2vx7u/w19lpXn32T13dV1B06FtUc11NV1ts7ltuaF7b33NvXuVjX9NZadNaVnrb1N7Z\n0drTem5bSE/M4FHO1+3Q0NDiV3frTVDZ5m/TyOD25fZlduP/Xldp3vBg7fFp+vltU3Rs\nVOtUW9dseltJaeNbXltTTnneQ0jX19TlzdNj+ltmW1b5WVZiVuBsX89rStbW+dbb2+jt\naF1zX/T/VHbiT+vNfcrKb9Hc5c/xYl1ocV13T0PZ30jo8c/jX85taF5bV07u+dzKW/D3\nRvbPUFNwYtfcfdfRb2LWYF3OXlbTaU5KPlziWeDMdvfUye1RY2/o2kZzylPlVnzTT11b\nVGh93mBr5W3N21ziZUBi91vtVk/X3Vfp1F/r0VDlzVFm3ffUaEv9ee7c1NdKZetZU0pX\nw8t9xs3MdF59VOtdSFTzfGjM3lHf2l/oxX1dYlva4F9sZVNeWUhR115R09Zpa+bL0d7T\n9OXpW9lWSlRj20Y+2etsyN7N0/nfVGDZZll9/E1ea01RW1NFbMzR3t3ffXre4mzr3GVI\neflLXvb9XU5j6XHW0NvjaeV5ZVlF3shMYNRr93b97eXmZll61unaynZz2X1TbN5tV1bf\n5lTx7FNu1mv8w8pl3dlWXm1eXmBrc1lw3t50XPBs7M9QXtBl2t5m7FRGSmbpaGNeUUVI\nd9nIw83s7ejla0tUTT5GTU1TXvFf78rUzsXX6e3l3tvL20M6Pt69u7/U6dBiUNtlTUY2\nNk1wV2DNvry7vcj5STs7SOPbefDTu7npPjZA1Lu2vMXK4u7ma1tDMystPUtP1sC/wr69\nvr/bQklmSk1TSmzO1004NDlUv7a+w727u73DbEM3LSwxPEnwzuXtxrmwsMB8XmNWSEhN\nVnRePjArMWKxq7G9vrexuc5zOismJy9CUeLDvbi0s7Cxzz00O0BQXmLWvbnZNyoqQLer\nscjOt66ttNc9LSYnNE5PUci2tri9u7jDTzc9TUNFXObFv2kwJic3xq6z0/a4qqityDop\nJictMzM54raxucLCt7C+XkM7OEBexrq+/TgqJi76s7Ta+bSmoKS3UTQqKCotLDD/sKu0\n0/2+rbRRLyswT72xs73RUTAmKUO9t9BZxaqkp7H9OS8pKC0vNtqsp7RaQ8utsVQsJzN2\nvbS60O9sOScmMG64uNbPr6ajp7dQLSQkKiwqPbmtul1Ru6iq1zQtM0rWyMbjYtlPKiEn\nSrOwb0y4pJ6grl8vJik0MCg0uaq3XkXGqqrKOy8zUL60t9ZL1N8qHSNNrq7/SbOhn6Ct\nVi0kKDo5KTaxpLNGL0+vrcw9LS5NwrS24j1evkgjHizQr71K3qujoKGzOyYkMU0vJ2Kq\nsF4zO7uqunNIOUPMvbrJPjlxbS8hITu3tNbZsaSgoafCLyMqODYpMLqt0zs3VLu+ZldJ\nRcqwrbPbPllTLCgtL1DNTuitqKemq7DKNDNFNC5FzLxuLStC4s7ZT1fGuK2qsNNCSmwx\nICvoczw+Rcuqpqetyt/NZXlNKjPKYjg0Ki5OQD5cUM2vsKunt/HXVi4jITTR4zczWb6t\noaS2z9e/s7tpSmbjNyYwUDcvMTFA0bGnp6mosLa7NyYsLzhGMzzIWVS999evy82rtL+w\ntLfiKiMpOEwwJy0tPLSprK+3sau3Y0ZUQCkmNkVP28PdPk7rTb6vyLOot8bNQEBQLSY0\nNy9GQDfPxt+xsc3Qxq+ntFYuLUhrZuU7KzvRzMDAfLSks762w/dINzk5L0DNSU7bMzd0\nNj65vbSqvrurwFRsNjBCMzNWSkXDsLtZPjvjqq3DzUU9zrq+bDo7PTw2Ki1CPD3bvrOt\nray24NFvQHlXNEVPNDk+N0z6TWW8vsixsbqtu1rWVjM0UNdcQCogM01atr9O172vqq2x\nure38ExUNyopKC48RsKzuaqqyLi+Rc271L3LP0hFNjg3MTMxMTtW18vDuLfoc728sK1e\nPz8rNms+ODY0SODL0Mq3uLqtrba3bUNNMDRJLzRpPk+33kjZQ0PIaG+90d7GyL+3vOJe\nSTk3PuvbTEg5Pr63s6q848DDxsDWQz0/LSw3NzxGTPHDw8CzvM+85j1lQzTt1HbDej5c\nTT5OSkJGSE/Ut7Ctqq245m3b38jbNzEtKjY7Njc2RfC8q66rp73RwuDi1EU6NikrNi07\n2U3Rs97dvNq/scjFu8/FuLy+wl07NzAwNz95fU1QQ2a2uLe0X1TL17q9Ylc3NDozSVk9\nPTs7TWjZvbvAusV0ys1mvrrRyus/S0U5RkZATFNjzru7vb7K7UY/VF7z4j0xNjE8a0pN\n9mW+ra2sr7bGUFFNRUg6NDQuM0lZzbGxsa251srgbcp6RlZISOXbz8jfVklCQEJNfd5j\nUUxK27/Ixc1NXt5p6WhMSkhQTE7T4mLjXnfN39rOV01WPUBxYNe2u8C92XfK3vnWWklM\nQ0rszsbG0etWRk1mfN5rPjo5NkNXRktRXc3FysnP4+9r19bby+784lFd133zzlpN+kxD\nXltpxsrQwMbFuLu+vtxTRj07P0he6GZlaV/XyNPW4kpJVEpNTkBASU1RZuLtd9TU38XF\n0MXQ/elRTmhed83Q9GxLQEhDQ1NTT1ZQcM/Gvry9vsjUzs3b22NAPz48TF1PX3p0187d\n+fRjTU5eU1RrVk9aT1RzZdnK1MbKd9bL0b64yM7MZVfdc+/bSj49NztKXNvKzc7KxsC+\nw8nWa2Z2YllPSkhKTU1e/1185mLx419paU5TTUNPTk3e2V99XEVZ5vPRxtrj0eztysrU\nytFeSkpNSnz/UVxRSFF2dOPO0c3I1t3R6Hns4OLm2+tz8F5UW01U+WV05k9IXFRb0+Be\nb15OXndcYFdKQ0VPV+jKwsjFxtHFwsrDyWlTXkhGXVlPZXFW5svWyMLW18zb39B5WlpG\nSl5d3MroYlpFSGNtbt70Xv1xX2v6X1FPRkBFVFFZY0hKV1Boy8jNxsbX09Tl5dni/9nm\n787R4mU7PVRfxb7QzMXKy8liTXpWUE06O17Z3dZoTeXWc2JWXNvQ61xf79PWX01FRVNP\nP0JOV2D3aXzDyNDAzdzJ3tTCY0xNP1vJ09rQ7tPDaU/3YN/Gb01jbt/AQzu/4+DD7+XA\n00NUPzA6OzpeaEPew+PW3UrzzUNF4FP0yFZtzFluyM3LzktF7VxLXFfiw8rQzMrJy9H6\neUrRvkBGTUVjeUVct8bFudTp6EA+c0U+8XfrvuD/r80uxb8628Bz0Mo3Rds4Puk7NF5I\nQ3dGRrzAStbKTXHcSkbNz8ixy+PD00Y9PjhQbPm7tsjKvuBZUzxA/D0x27lXXMLXXFfz\n3L3IesPJW97IS0rb62/IzOm9zFPiXELdyiwrvlw2u7dNvrxeaDctMS0nOmNI2bG0sa3F\nua85MMhGNF3Zbc7vTMLRQ+7NOV23UWjAV1DFTzdIRjtCXk/ltKyxuLi7yk1AQjs8S+LJ\n+ci361zKZjpDw8pG1rHFRXPlPTNAQ/pTPra+SLuuWui+Q0BTMS9FNzfzUFO7vtnedL3D\n/M7KYlbcZjtCSDNAZVnIuL6xq7rFvt1GODM7PTdK4PfKWdatSlat2zi/vj3lzjtIdC03\naDRLu9rGq62us83o9jYvNzAxWm3vub7WuLo60bstP8M0MW1COzs3Q1ZA/LewvLqnsevF\nvD4zSzoxV2xdt7bMrqriu7BJPj0xNC8uQDtDzMDNuLC8vbfNWclfMElKMzluVEXZvcbb\ntLbbv1tG6DAsQC4qQ05Gv7u/ray8tLRxcNw4NEM7PDk0U18728Ljs7C7uLlpRUowIS0z\nJkC+5rekpqanrrO+UUY/PDAwSko6aLrtTLat+ryx//NXOz0tKjktLUU+W7C3tKanrbG2\n0Eg6MCsoKTE+Qve9tqywrbPFw1NGPigqMyYoSFFAv62ur6amsLTZSkwrJDAoJEjlP8Wj\nqK+ksci/Pjo2Ji02KDnTS9Cqs7ekp7OusdlIQjQqKCosNkBLu6e2sKGtyr/KNCcsJiEt\nLDTw/LuqramjqbC420VGLSMsJyQ3P+22s62oq7O0s2gzQC4gKi8oNvTtuaeprKipxe2/\nPic2NCAp3k1Kr7e8r7+2uErKxi87YC472Thar8a2pLC2rbvR40g3LC0xLDxNUM/FwrrI\n181LUGM/TUg6UFM927tmwKrO0LHd71o3cDcrbDopa9074MNf2sJt07z278pKRmtIRVtt\nQvmz28u0yuDG1EtOSjc6PjY0SlFG2b7Fwq6qt7Cpus3IZUA3Pkg5Q9bI1sKxvMrJS0VA\nKzE2KzdJPXzFzLy0ra+7sbs/WdQqMfMqMLpGTaq+X7rLQDtDNys7RjNMxs/Iu7C0wK+z\nWt7MODlbLC6/NDOuzTuztErdyD42SDsvTfpL0be9v62twreuzOW5VjHPXi180TZM10NG\nZWtFPGhNNvPPQ9O20Ne2wE/OxjY+wjEzrWIzrLc4yLs4PVYwLkNDPWnQ3r6xu7itt8C4\n0UtZSTg3UUo71Mbm49e/RjjWOShuSizUv0DFsO6/qr7WscA+69kvOb5DN7TFUbe32dPc\nS0I5NDc3Oj5W29+/sba3s7fG095LOT1KNyxoUC3QvD3GtEzUvkNI4DkzUUs55rfNwK22\n0bu7TVnZQz5dQ0JQQFDzSF7bSOvWQvHZPN+9RtGxzM60vVN6uDszuT4ttO00sb8+usU5\n0cM+UcpLPt7ZS+2929691+vQbGVwTXZsPlNlRVvfSmB6PE5zPknXXk7vzNnit8VXuslD\nyGs06Uo32lQ/1NZc28rQXWjgS0VNQkA5O2VJ47O+uam0w7PFQltMLTZfMzrAZVm5v9nI\nwsrt1N9D1nAw28Y+va/bvrbZ3+xAQD82QkhFX1zdzlbU0FduTn1aPGNXNFDTUNO0v8Ow\nvuC/Yj9fOy9OUTdZ0fPXw8rmz+hGXl43Q144TOhbvch8t8BouMhK0PQ9TVdCSdBKQ7fu\nPrbINtDFP3fIVu690dm3wPrFyV/p201GW009WVFG13BI18xWXdtNTW4+Zt49ZspNaM7Z\n4NbWXsjUP8vdO93mPmXpQ1nfP1PMUUvO4F3l2/D8cF9Rcfw97b09Y7dWbrfZ67jtZrto\nQttIQF9DU9tb28LMw8DGzb/QTdviOnfUP/noWdPL/97C3VbbXkNFRjg9T1Fl9sXCcMLD\nSnzePkNrOjtlPE3gU8nQzbfN1LvTSeZMQk5LSUPWd0q8ylDI9Er8XkVQ1kg61kUx1Fc7\nu8hRsLfQuMLO7WDXTUP6dkjN0Fa9wnG+yWzK7F7WbFzoXVBMS0hafU731k33zGve13zg\n3etg7MpLRdlCO/FPPc7pQtPRRUrQTj7obUP33kvty1Raymxe0N/dyG/t0VPuZVTlVE3/\nbUb60ED9xUPTvU7Xvmj5yN1mfd5xWd7eWenL9uLLzfTjv9xswulZyOxG6WY+cFZCXVZF\nWWxTY/Nl7t5cad9PV9tIRdZIQNlgStPPWc67+W++90rQ40LazUJs3Vtr2+1OY+VZXNZg\nVOj3TWVcRVd6UOnLWfDTYMzGVla+4kK/ykXJyU72elTZxlTOyUPZw1RCRsLRT7TGTsLZ\nT2lTSVdNRUNZTUPfW0nU4k3pzE1PyPBlytBKX8pTXs5PXs5OV8PocNtTV+ZaSlntV2zj\nT0rc1+vN3ebCyFZbeU/c5VBQaNPoUczwV85NU8VUQ2xmXsVa4tbAUUixN+BzS2n9y0zX\n0HbZY/3GWdPP6bzuWVdPbWPv10ZCU1RdVF/oSPDGb+Xg68rbXUlJT05WXkLlyz5N0FZP\nzUxJwldLv3pFwtlivulm6dTjz9lu9tfK2dzxZdnQV/PrSWL6RWjzbV1040poxV5ZxltO\nw3dKy9tN3NNN6co+VM1FWspe4r/Uds/bV+NZUGhfZk5MVE9UVk1UU0pz033oZlHsaVf2\n1/pM9NZZXOZbXs1NWb/NW8a/8Mh5SMtwQ+P3Q2bfVO3dfdTr69njduL0be757XpLZeBj\nXm351/Rtztlb6Nf0ysroycxW18pN0GtFZUDx1D/dylFIQ2Xd21vFPlawNGa3PVstN7NA\nMbaxPC6/zOA6Q6xFUL400L7KSjy471BJT7E4KbfjMTTAtGjKTE2vPlqtJlGtMdnKPe7P\n07u7Q96+SNG+TNTKzMM+aLfUxTlAtzrRtDBOu2vFwE3p2dHg9jxMwmNbXjRNz9NIP8ve\nYMbbUPngvtc9Rl7N2U1FO9HzO/FPRtTvTdF8Sl9gS01TTlbi1GxWZehra01eU2bA9HnF\n1NbF12/M00953lPX7F/Gd0Dmw8/K1FvXzFzb3FT8ZVlZaF58bV5tz2BG0WnZXNnCfNl9\nV/zX3U3/3Ejd101m1GB31k1M1Nxt02lGU0tQw00+2VvWQ0VMU9dOYnRR5l3zyuDR81fP\n1m5mUXbcc8ve0c1RW/3W7EBN3mBW02ltxmBIeuBFTexQ49NMXNPe4MjPadzXfNZua9dl\n3tZl4tnW1/DXY1ve+vPv8+nt29f6XE5XTDvb7T7GTUPvTNRASrdaQ3nfT1Diyno2vKo7\nOcJoStnI2e/Z+ndTaFnDyz69aEXxOk7pV0/uyOJJXuBIV9PmSFPGUNG300Y+xb0+Ta+7\nO0xwzrQv6axX+sZfQF7KadfQTFzOyjhPyE/uODq9vlYrebs+zt9oYjjFv0U8Q8vfVOVg\n97/0aNFj8GJZ6NtRcM/N4Gvb41noY0xwemNzWU1ba+PeXlTl9lreW1bXaFv/XO3RaeDb\n9trj7eNsYPz3//zl1NHic+vN1jhIqnBD6D6+1FDgPrvCV0ZDcEWz2TttPLbZJsi7OGy4\n80rIQ9S7Q75aOuUz5ro+V95TXM399G3CYD3NzDh9uytIqz7IzS3RXEtx/bfjQjnpxmXC\nTsI84qswObFbOcq3SEisPDusRU+zbFFfw8lDUeLN3mbA3z7ZWz5e1EJGz2jWz+LJUVvM\nXkhT18/3+uxdbszPb9zTSkLWyk9W6HlKdsXzVFdWSEhL4uLuVF30YG1cdGVRYl5KVlpc\n6Gtb29r01NvW5Vt2+mhf+dnezcrTzf3XyO5i92/p11T80OL3TlnT2VNKSUxWdOb/W1Ze\nz9NmZVBQWWLwY/zTbGnoadTI6N/mdu1g/ONreujmXv3Xd2JQVuleUGZv+dPmWl5TV2Nj\nYF5gW2vrWVbrfejO7OjDVkrI0Onf3N501t5ia3beX3fR229taNviXllWaPb5Yl5fTktd\nbG9faO3l1+1m8Whe4Hbx3mblzX1mdk9efFde615NVmBXW+nbbW3vV27mY1ZNU2lf79Te\n3tna3dvX39TL4Gjo2/pl6dTrXmBPU9f8Q1fp+tvx9M7WUEpiU01KSO3K3NnZ0cjN7dDI\n4PPe72NWWWJp7VRWws5LYNr6WkpD3t09SVpLVFFI/c/o2cvLzM/Tztf9dFxMRkNIV1k9\nRr7O8MLO2tNlSvFRN01MQFZFXr7leb69wLvJ18DOXllQSElOV047UcB5cMXLw8BZZcVL\nPlNAQ0Y3VsDXzbi7t7rJvsLxWUY9ODtDTD9AwsjtvcPa0X1N7UU2SD45Q0BNy9feu7nA\nvL3L2ltOTT47Q0U/PkbLyl7Ctr/Fzl/L9DE8QDM7Pk/O2cqzsLO2tr3L61Q+ODo5OT49\nTb7F1rexu8PK5dw/NkA3MDk/VNPayLGvtrS3wNBrRj4+NjY3PzRCrVG/treuxrlQVzs4\nNys0MTRba8a6t6yus7bGSkZKODQ0MTMwOcq727yxsbbCXtddKjk+LzEzPu29sa2xtqy3\nw77a30UuPj4tNDFAysjQuq+ztLfN4mMxMTgtLjY7Y97DsbCtqrC7ynZtOy80MDQ3NE7T\nu7e7r625yc1xSTMwLyovOEPayLuur7SztLrF7VQ7NDQvMzs7SGvKvL6xq7PG22tGMC0w\nLi45QF3Xv66qra6vt9NUUDctMzEzOz/lxc+zs7uttNHJ4kA2LS8xLTNIWc2+t6yxrrPC\ntP0+WzcxNDYxN/fa28qtu7enW7u6K1k3KlQrK1dTPtuqra2/qqdJu1ks2SsjPjc7xU1R\nrcM5rapcfNTRRTY3Kj46LNROVqnFzqSr3rG8cdAxMDsvSzw7xt7Gu0+4rEPAt0jGPzNF\nNC5JYkDLyde0s6+9WbbMRtw5NFdDRUBKz9dmzNHDXc67SEhiTVdLP0hW30rw1unNyMXI\n0ObP405MTkpm82lpcNHR2shcU9lWU2JMTE1NWtbeY83Gvsn2015aSEzdU+hdU9nTbmvD\n+fDFYmjT/01GVGVuU2lo9MzgaHz/48XbVmZrTFtKSFlTb21gadbU+s++1kxbQ11wPD/p\n/Vfpxr7e1sjdVllNSODoTVDp7XPrTePcW97r3uVZbm36W0tP0MpzTXzC1F3g5XDs0d3P\n3k1QTOjXVu7fee92etHLV0Xl00n9XUXPyfrT5mvIa1vMZUNIZmld42lr1tTe3uBtc032\nw0tNRjfTU17LQL3JP9nXYm1b3sU6TrRNP9pZU1FlzHfPxfxpzV5U00DLzzvmYEDfwlzg\nvc7a3npiTuPWQz75SuXGTdpJVrA/Sq7LTu1NU80t6L4trrAnzcZMuV/X1EPevjlKvnfN\nQDfO2s87TsL95srIWTdzyP07NOjZTexKV7fjU8LlZtnpaV5GQuZgXFdO1uDW02LXzeb0\nb1RFV9Rta/9r82hp62jl193l7dbQ5uLxVk7maElt/3DiaejNd97bZXPRV1lPUb/xzzk2\nqsguuMrXt08/0VQ4zUnK1Cyxvie3tCzJsTNtwi/Isz1oV2i7NlTIN9HaO7m/Ospa7b5D\nXfFIZsVGO7N8YrwwzsUzvm/TsTY227s+22bIxS2uySzIzDFgvdlAv9Y4vtQ3xshMRVHN\nXkhayb9T+spfb1BdVn3ZSN7madxr5VdKbWBXU3Pb21bjyWBPzc1a3s5fT17gcEJf6Uja\nw8rUevBzTPfLUU1p1GhAZsDORk3DfFfGzl594lvp/VTaUM3dRcXtUVz8y9nT31lWd9n9\nTU/o6OPtTU7cfVbd1m3p6OLbTT9tcGL86OPX11pU7WJPZu/ocfPt6V9f5mNs+ktGZt7Z\nWkLNfEnGTMxKU+1r1FP3ScW9S07K32ZKv94+ZWDUUFBiQM6+2sbKdk1QbONxaVRw2nDW\nV+nXaOncTFfbY8zObs9eY9HIzffLeUr9aWJdfOXf3nNaV2Bv3+1xX0tO7d7T+k9W6F1c\nWllQTVZTXVP0zNZrbHpPTdPbT3D/c8rNfM/Kd3TtV0peaGjmTVNWaGxN/NTc419p9Gvv\neW9l7+t59OhdWdn8Vndgd9bp39DU39bOXlnt6OvtbHHj2c784M35aehca3bt22xt92Vd\nXmlZV1Fm7XBw7N7u7HZbXE1LWlpOTWJrWnrZ7W3c3mtlW2BsZnzp9uDj3t/l4t10WVxo\nYmh5XmPm6W5u93n2Zl7lV23KZtHeQM3wPcvtTr7cQGnKXnxz2kpbtDxZtEBXT0XF+UW+\nu14zycLrSz6wSEOzMOuwPkNpuVrOY0OpTimwxjc807NFSO02u9suuT47qj42rbc4VNpI\nvVBIuENNyTzxzFbTWVqz/Uq8QkPDP1nAP0O7T17IPVrQTdxKQ7bQYmhO18r3aUj00Etb\n11pa68rRbl5g0NNlT0hjXEnT3kl24FTp6N7I8UBKVltvd97M4mvM2fHwTj5ZznRaaGNx\n3mtN3/xJyNM/1MNg+b5Z3stQ0+tcQEzNV0pWW/HRzcvWXevUbWVjbfb52cPabMnK/crb\nYNBobVxTYG9cS1ZNQl5RPlZQd9dFV8bU3c7G2UJGaVNgZWVt7Nbe0NPRytTZ6ejKblPX\n1mtWSVtoU0hIcG5NT2tUX9RQWcp8VFtscE901Ghf4/Z219nXyu3s19nfXnpxVkxPXkhN\n7eJ2Vlbzy9Zg4tlt0dbv1OVfa2haXn1W4sVfw9NFu87bwFC3yT3c81NPUFvWNECzVzhN\n3/dUc93v0N9oXk9I+c4+uus2vEs5vsI8yrppfVxeeU5j104+V1neT0reMUqvP0mtvkNP\nXMu+L7nFJKuxILTCLa/TSs5Kb7lG1r5svjZIt0teRjpeXU/a7mhCXMLMSki8yEn5TU++\nfVfi7dTa+uzG3lfFy33Z+c3Na9f2Y/FuVmNFO1Z2W23mYGjoc+hZ+uNbbVlgzu5W4/Nw\n1/px1H18bmjU6GDc5mbe6UtsW0PUytcsMavuJrhlSq08O8hCSL70xTsvrNktuLc7xrZF\n3to3wrpRzT3CvTDb0DpQSUjTbEpecMPrPcnGS8/NNmOwS8ZgPK9NRrt8ubw+PsvfSLw8\ny103q0Uqu8g3Y7vbOM5ePbtcPL7UQzz/u973X8zGXL/ePMXCUU3KxUJRa/n9TeDibdz6\nVEJC5utDT+JLPvZ2VO3RyV9e01tX6Hpb2s3dzdPv095teWhiW1H93lFp7Upg0Fxf2m33\nb1RabHN2Y1Zx6GB65Xbl4u/e2dTJ0Nbe29HZZmNTdmgzUEXN4lvGSs3OfGhobOlc/Wvr\nfFZp+cpcPVdWS9bIv8rbydbZzN7tSz5TPkJWU+3eS9nKQ9RON7fsTL47WrlObr3fVD5W\nYsn5O7633tDTu7nXRUXePDjTQ0NuTczKUFnpzk1DRlDIfFTFeXbFTVTzSHnQU1fGw87N\nv8jb+VBPS0ZFU3br63ZudmZQXltP/GVd1u/rzmti2WVDSmDs3tvdyMbKw83p9uZeSlBe\nXvbb09lcXWBTSz5AWeDW49TIyNNiUE1DRV5WV9zKvru/wsvmc05NUFRdY9fJ0+1rW0Y9\nPj9CTejQycLAxd9RQkI+OD9RXuDDu8DK09l8WVpUTlF3183Iz/HtTz8+RUZCW9fNxsXD\nw99USkNDQEZ22dDJwr7Fzc76WWZiVFvj2dDN4+ZrSj8+TFdRVs/K1MPNydlDXjs/0DdF\nrm19s8pdcdZt21Pi5ne8TshwP7YtJrg9Kbi8VD6/uMZAO6w6Pcopv9lAtkJWscY3xaxC\nMbG9WVnKs+NUSDjlMzm7KDymMVmg/0K4PGmwKzu+LVq7NFG4wvFmRt+720L8vum3t03X\n4zs/9z4xNmK7zlnL1OnMzclFQ9tIPuLNVlO+21vd0MLNS1bFzdHLc8rD829FRkY0POjx\nVuDO4NRuXO1NXFtPVEZK399WXszD6ejD08vt3cZoZXfN4GPwQjs6Q1dCXL7Uc8va8OlP\nVF9NSltvXOvU5uPW2t3TzcnO0VBdt1BeuztpSDbGPk22ykBCw1vUbWjdPL/vLcjIMMi3\nSLhZ9MM7utvvq2g/T8DPT0I/wCp9ryM7qj88tLZD6L4zfLc798lGQkq+v05N0cLb0cZT\ndtFWW/n9THFlPlBsTVDry+9OWXfoYExbfFZ80+hXY+Vm4MrPc9fA0enZ1PxuXkpdU0rO\nT07GQE3tUNlO18ZJXOBfXFNiwlkzw7RARcbbWcnIer7FTlri20b0S17bPNRZMM3GP+LC\nc2bzSlHO12L6YunURtm80TtDsNk9u7ZxQFtWfTtu3DO3win5yg==\n¥enddata{mailobj,539461880}\n¥view{mailobjv,539461880,30,0,0}\n\nBob\n\n¥typewriter{¥smaller{\n---\n\nBob Oesterlin  IBM Application Business Systems, Dept 53Z, Rochester MN 55901\n\nIBM IPNET: oester@rchland.ibm.com                Internet:oester@vnet.ibm.com\n\nPhone: (507)-253-4528 (tie) 553-4528\n\n}}¥enddata{text,538724776}\n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.3.txt",
    "content": "* 3 FETCH (UID 3 MODSEQ (29268) BODY[] {679}\nDate: Thu,  6 Feb 1992 11:51:37 -0500 (EST)\nFrom: Nathaniel Borenstein <nsb>\nReply-To: Nathaniel Borenstein <nsb@thumper.bellcore.com>  (=?iso-8859-8?q?=ED=E5=EC=F9 =EF=E1 =E9=EC=E8=F4=F0?=)\nTo: Nathaniel Borenstein <nsb>\nSubject: test of =?iso-8859-8?q?=FA=E9=F8=E1=F2?= in mail headers\nContent-type:  text/plain; charset=iso-8859-8\nContent-Transfer-Encoding: quoted-printable\nMessage-Id: <635263343696801420.20772.0@Jeffreys-MacBook-Air.local>\nMIME-Version: 1.0\n\nThis is an ordinary text message in which my name (=ED=E5=EC=F9 =EF=E1 =E9=EC=E8=F4=F0) \nis in Hebrew (=FA=E9=F8=E1=F2).  \n\nThere is Hebrew in the Subject and Reply-to headers, if viewed with metamail.)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.31.txt",
    "content": "* 31 FETCH (UID 31 MODSEQ (29801) BODY[] {264394}\nReturn-Path: <sau@sleepy.bellcore.com>\nReceived: from thumper.bellcore.com (thumper.ARPA) by greenbush.bellcore.com (4.12/4.7)\n\tid <AA05576> for nsb; Wed, 15 May 91 15:24:32 edt\nReceived: from sleepy.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA12267> for nsb@greenbush; Wed, 15 May 91 15:20:34 EDT\nReceived: by sleepy.bellcore.com (4.1/1.34)\n\tid AA01548; Wed, 15 May 91 15:20:25 EDT\nDate: Wed, 15 May 91 15:20:25 EDT\nFrom: sau@sleepy.bellcore.com (Stephen A Uhler)\nMessage-Id: <9105151920.AA01548@sleepy.bellcore.com>\nTo: nsb@sleepy.bellcore.com\nSubject: A Multi-media test\nCc: sau@sleepy.bellcore.com\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"mail.sleepy.sau.135.1476\"\n\n--mail.sleepy.sau.135.1476\n\n\nHere are some icons, aren't they pretty?\n--mail.sleepy.sau.135.1476\nContent-type: image/pbm\nContent-Transfer-encoding: base64\nSubject: Image wrapped by /usr/sau/bin/fetch_image\nDate: Wed May 15 15:17:30 EDT 1991\n\nUDQKOTYwIDQ4MAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAYAAAAHAAAAADgA4AAAAAcAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAA\nAAwAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAkAAAAIwAAAAMQBGAAAABiAAABwAAAD/AAAAA+AAAAD//4AAAAAAAAAAAwAAAB//gAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAABCAAAAQIAAAAQICBAAAACBAAfCPAAAEAgAAAHBAAAAP/4AAAAAAADgAAAwAAAH//4AAAAAAAD////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAACBAAAAgEAAAAgEEAgHjwEAgAg+AgAP///wAAICAgAAf+AAAAAAAAEQAH//+AAP4H8AAAAAAACAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAA\nAAAAAAAAAEAgAAAgCAAABAEEAQIUIIAgA+B8gAQAAAIAAQENQAA/4AAAAAAAAIQAIAABAAfAA+AAAAAAACAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDgAAAAAAAAAAAIAQAABACAAABACIAQTJkIAQ\n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\nAAB5AAAAAAAAAA8gAAAAAAAAAeQAAAAAAAAAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAYAAAAAAAAAAMAAAAAA\nAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAP//////////////////////////////////wAAAAH/4AAAAADwB4AAAPAHgAAA8AeAAAAAAAAAAAAAAAAA\nAAAAAAAB/wAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA4AHAAAAAP8H+AAA/wc4AADnB/gAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAH/+AAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//+AAn//////////////////////////////////sAAAHATg4AAAAf+P/AABvY88AAHnjewAAAi97zj3vAAAARe95x73gABGQAEXvece94AAAf//gAAHwAAAAB+AAAAD8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD///AAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAYA0wGAAAA//f/gADGN/+AAP/2MYAAA2hCEUUIAAAAbQhCKKEAABGQAG0IQiihAAAA/gfwAAIIAAAACBAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///AAt3d3d3d3d3d3d3d3d3\nd3d3d3d3d3d3d3d3d8AABgBwwBgAAA//f/gADvd/+AAP/3e4AAAqhCEUEIAAAAVQhCKCEAABAQAFUIQighAAAB8AD4AAQEAAAAEAgAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///AAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AACAAxgAQAAA//\nf/gAD/9PyAAJ+X/4AAAi57303PAAAARc976bngABAQAEXPe+m54AADwAA8AAQCAAAAEAgAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////AAvd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cAANCAzABMAAA//f/gAD/9PyAAJ+X/4AAAigIUUUBAAAARQ\nEKKKAgABAQAEUBCiigIAAHgAB+AAQPwAAAMAwAAAcDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+AAu///////////////u///////////u/////u0AATGB2QDCAAA//f/gADvd/+AAP/3e4AAAigIUUUBAAAARQEKKKAgACAgAEUBCiigIAAPAAD/AAQQoA\nAAUAoAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///8AAt4AAAAAAAAAAAAADdAAAAAAAAAABdgAAAA98AAnOD7wHBAAI//f/gAjGN/+ACP/2MYAAAi970TnvAAAARe96Jz3gAD/gAEXveic94AAOAAH3AAQ/4AAAoAUAAB/P4AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAP///4AArz/////////////56f/////////97P///+b0ABDGH8ADAgAIf+P/AAhvY88ACHnjewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAPngAQjoAAAoAUAABNLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///wAAvUAAAAAAAAAAAAAH2g\nAAAAAAAAAC3QAAAB3cACDGH8ADAQAMP8H+AAw/wc4ADDnB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAfDgAQjkAAAwAMAABNLIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8Au0AAAAAAAAAAAAAFugAAAAAAAfgDvQAAABe0AEDHH8ADAIAPjw\nB4AA+PAHgAD48AeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdxn+bgAQRCAAAQAIAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAB////4Dwt0AAAAAAAAAAAAAHegAAAAAABp4C9QAAAB98AIHvj4AHgEAP///+AA////4AD////gAH/////////+D///\n///////AAA//////////w9KR+nwAQOBAAAgAEAABcDoAAAAAAAAAAAAAAAAAAAAAAAAAAAD////4EIr0AAAAAAAAAAAAAF6gAAAAAAH5eD7QAAABb0AQAf38AAACAP6qqrAA/qqqsAD+qqqwAH/////////+D//////////AAA//////////w5KT6hwAQAAg\n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\nAAAAAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAru7u7u7u7u7u7u7u6gAAAAAAAAAD7QFAUBb0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf/////////////92gAAAAAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu4AAAAAAAAAAAAADugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz/////////////5ef/////////+9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAr0AAAAAAAAAAAAAH7VVVVVVVVVVV7QFAUBb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF3/\n//////////3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu0AAAAAAAAOAAAAHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAAARgAAAFd3d3d3d3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0AAAAAAAAgQAAAH7u7u7u7u7u7u7QFAUBb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAABBQAAAF3d3d3d3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAu0AAAAAAACCgAAAHu///////////vQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAACEAAAAFdA\nAAAAAAAAABdQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0AAAAAAAMEAAAAH6f/////////97QFAUBb0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAeAwIAAAAF2gAAAAAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu0AAAAAhjAEAAAAHugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAABAUACAAAAFegAAAA+AAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\n3d3d3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu0FTAABtUAgAAeiHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0F/AABq0AgAAOiFd3d3d3d3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0FXAABtUAgBAPCH7//////////+7QFAUBb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAAB60AgBAHCF3AAAAAAAAAAB3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAu0FXAAB1UAgghHkHuf/////////9vQFAUBe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0FrAABq0AQghDkFeg\nAAAAAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0FXAAB1UAQggh0H6vgAAAAAAAD77QFAUBb0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAABq0AQgQg0F2v8AAA+AAAf63QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0H/////8D8AA+AFev/gCkESgD/69QAAAB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0B8AAAHwAAAAAAH6v8AD///gAf77QAAABb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF2vgAAAAAAAD63QAAAB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAu0AAAAAAAAAAAAAHugAAAAAAAAADvQAAABe0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz/////////////9ef\n/////////+9P////98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArqqqqqqqqqqqqqqq7VVVVVVVVVVV7lVVVV70AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf/////////////93///////////3f////3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvd3d3d3d3d3d3d3d3d\n3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn//////////////////////////////////0AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAADwB8AAAAAAAB4AAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAA\nBEAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAOrq6urq6u\nrqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAKqqqqqqqqqqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVwNVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqq\nqqqqq5+qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1dXV81XUAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqqqu6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVX1VUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqqqr6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAccAAAAAAAAADzwAAP///wAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAIIAAAAAAAAAMMMAAwAAAMAAAAf/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAAfwAAAQACA\nBAAAACAAAB//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoLAAADgOAAAg/BACAAAABAAAD///AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEQwAAMABgABAAAgCIr6PBAAAP///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgIAAQAAQABAzAgCIqCIhAAAf///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBAEAAgAAIACJMkQCFKCIhAAB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAgAACABAAAEACVAqQBCLiIiAAD///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAKoBACAAFSAClMpQ\nBCKCIiAAH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAVUBACAAKqACk/JQAiKCIkAAP///4AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAqqAgE44VVACkAJQASL7vIAAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBX1AQEQQr7AClAJQAQAAAIAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECvagQEQRXtAClfJQAIAAAQAB////4DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAIhftCIEQQv3AClgJQAEAAAgAD////4EIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCv6hIEQRX9AClAJQ\nAEAAAgAH/w//8AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBf9BIEQQv/ACUAKQACAABAAP8A//8PAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiv6iQEIhX9AEMAMIABAACAAPAA//+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRX1EgEFAr7AIKAUEABAACAAcAA///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQqqEgCCAVWAIJMkEAAgAEAAwAA//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABIVUJACAAKqAERSiIAAQAIAAgAAf/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEKoQgBAAFUADhShw\nAAQAIAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAQgAgAAIAABSgAAAIAQAAAAAf/gAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAQgAQAAQAABSgAAAEAgAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAPAAMABgAACSQAAAEAgAAAAB/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDhwAACAOAAAChQAAACBAAAAAD/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAkSAAABDwAAAChQAAABCAAAAAH/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAkgAAAChQA\nAAA8AAAAAP++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAkgAAAChQAAAAAAAAAAf88AAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAn2AAA8hPAAAAAAAAAA/48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABChAAAAoNgADChQwAAAAAAAAB/w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAgAABACQAMASAMAAAAAAAAD/gHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAB+/AAAD/+wAP/z/8AAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAwGCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4OHDMAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8eHDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA++NjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA32NjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzmfzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAxGfzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwG4bP4AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGwbP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAA/////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAA=\n--mail.sleepy.sau.135.1476\n\n\n\nHere is a snippett of audio:\n\n--mail.sleepy.sau.135.1476\nContent-type: audio/basic\nContent-Transfer-encoding: base64\nSubject: Image wrapped by /usr/sau/bin/fetch_audio\nDate: Wed May 15 15:18:08 EDT 1991\n\n+v9yfv99e3h9fft7YV1ob+nefGZzdv96eff38/j+f/n18/17+Pn7+f96ff74/XV6/v5+eHF5/356bnZ+fv94c3h/f35zeP99/np4dXn+/nl0fv/9/Xdz/3/+dXP//vz+fXZ8fn95dHx6/Xx7d3v6/P94/vrm2+j3a2zvc//n+Pz6fXR1+fxzbnF3bPR7efT+\n+X1zfPru+n53evb79/n/8/n3/Hf+/fL6/fbt+Hb9+/36+Pj+evv37+78dfv59H7+8vnzb2dlZHFzdnP7+vX1/vn58und3+Xk7e32ePvz+nhtdXn++m9v/W9eYHbw8Pry/vj4+vn5d3z1+/l7e3z47fD+/vz6/Hp2eH/69fj6efnueHR++vb4+fd8c/j2f337\n+PV/dnV69/389Hn/8/lzfmpfa2hwdv/6fn758/Py+v308/P6fPf28vl9en77+3938/12fnN2c3l+fXR2fnz9e3J2fX9+cnn9f/x9dnj//f91dXt5+314en37/nx2/fz7/nd0fvz/dXf8//t9dXN7/v54cX1+/396eX/8+fx4fvj0+Xl2ff78e3X+/v3+eHR3\nf/x9dH3+/ft8eX38/Pt7efn9/X90ev7+/nV6+/v6fnh6/fn8eHz7//p+enl8/ft9d/z8/Pt4d378/HZz+fv5+vd8efh9fHJ///7/enl9+vr9ePz6+fh8d3z6+n51/fv7/Hl2ef79fXR6/v79fXt++fj6e3359/f/enz8+/51ffz9+nx2eH78/Hd9+n76/nt7\n+Pv9/nb++/v+d3j+/ft6ePv7+Px7ef/6+X15/fz5/Xx6e31/+nh/+/v5fHd8/fl9dv38+vp9eH37+/51e/3+/Xx6fPz5+3t++fj3/Xl6+/n4dXz7//p6dnd+/P13d/7/+/58ffz5+H96+vj3+3t6/fr9enx//fp9eHd9/Pp9d/39+vt9fH/6+Pt5ffz8+3p2\nfv/7fnX++/n6fHV59fn7evn8//l8e3l++vx4e/v8+v93evz9/Hh8+/r4/nh8+vn7d3j9/vt/e3v++vn+e/v6+Pp6eH/5+nZ5+fv6/3d0fP38fHR+/vz7fHz++ff3en73593m6vD0fHZ+//l++29ucXhycPx68nlhYmZsdXv5ev/09PT3+Pbv7/D89vHx8Pf9\n/vf19318+/r5/np4e/78e3Z//fv8eXV+/v16d/z8+fn6eX37/3tyfn3+/3p5fPv6/Xj9+vn5fXZ8+vt9ev76+/15dHr/+v5xev7+/X16fvr5+nt8+Pn5/Xp8/Pz+dX37/fp9eHh+/Px4eHz/9v9+fvD4fv5y/v77/nd4f/38enb8+/n8enh/+fl/ef79+vx9\neXv9+v15fvr7+312e/z8f3jo3ufo8Pn18X9+cXr7eHtxdm95+vhudu7z7vV9/fjydmp4f/rx8fv69vH0fn/59Pb5/f58Yl9nZnh7+/j++vLu7/r27O7s8Pn7+PLy+335+vf5f3x8/fp+dnn//v94c3p+fXpze//9/nl3ev37/nX3/Hr8d3d1e/7/eHf///x+\ndXf//v52evz7+H13ev77/Hh2fv/+fnp6/f37fXb7/Pr8eXd++/15eP39+353dXv++3tyff/9/Xt7fn33+Hr9+O73d3d5/P99df/9/P15dXn++/51fP39+f97e/v5+nt6+/36/3Z6/v39d3v8+/l/eHn6+fl6dvv8+/97env7+X14/v37+3l2/v38fHf8/Pn9\nf3z//ft8c37//f98en37+fx5//n5+P94ffv7fnf9/fz7eXB8+f38dXr+/Px+fXz7+Ph8e/r69vx4e/z8/nh7/P77fXZ3fvr6eXr7/Pn8fXv5+fr/df79+/14eP/9/Hp3/Pz5/Hx6f/n4fnb9/Pn8fHx7/Pr+eHz7+/l/eXv9/H92//r6+Xx6ffn7/Xh8/P77\nfXx8/fj6fH35+vz6e3n9+ufi6e/06vt2b/72fXVqcPx+/29s+n167H3zcWNtZ252//l7//Tz8PL7+/fy7/L69fP09/55fPn7+3l8+Pj1/Xr++/p9dHz//f56dnr++v136t7l5u92bfj2+Xx3eXd6dGV4+H7zYF1paXRzdXn69vX7fvnw7/L2+PTw7/f89PPz\n9f57/fr7fHj8/ft/d3V6//56cnp///57en37+vt5fPnu+Xh3dvz9e3V+/f38eXV4fvr+dnz9/fl/enn7+vl+eP3++v52evz8/Xd6+vv3/nd8f/r8eHr7/fv9eXl8+/p+d//8+/p5dn78fnd7/Pr4+vR8efp+fXF9/v/+ent8+/n8eX/5+fh+eXv9+v93/vz7\n/Hl2ev38/nV4//78fHp++/j4fXv7+ff8e3r8+/56fPv8+X53en37+3p4/fz6/Xp8+vr6fnV++/j+eXj//ft8d/z7+fx6ef/5+X53/fz7+3x7dn3z/Hx++vn4/3Z9/fv+d3/7+/p+eX37+/11efz9/H17e/z5+nt6+fr4/Hl6/vnveXT7fvp8dnd//Px4df3+\n/P58fP35+P15/ff4+Ht5/vz7e3n7/fr9eHh6/vp8dv76+/t8eH77+ft4fPv8/H52fvv7/nV++/v7eHb9/Pf9e/r8f/x6enl8+vt8efv7+v53eP78/Hl7+/z6/nl6/fr7enb+f/v/fHz/+vr+efv5+Pl8d376+3t3/f37/nd2ff37fXR8/fz+fH1/+fj5enz3\n9fh8eHv8+352+/r8+Xl4eH76/Xd8/Pz6fnx8/fj9fnn76d3h7Ozv8/T5f/b+/nlyc3Z+enBzfHx+fXl5fPr5f3N5fGlfZWh0ffv8/fDv7Ozr8vLs7/L+9fTy9fr8/Pb2+Xz/+vn4fnV5fvx8dHz//v95dHd++310d31//3x6e/76+X14/fz7f3Z5f/7+dXr7\n/vt8d3d8/f14cv/6+v15fPT4fX5yff79/HZ3/v78enb+/Pr+enp9/fp+dn/9/P55env++/t4e/r++X11ff78fnb+/v37e3h9/Pv+dnn9/v5+fHv9+vt7e/r69/13eH756uLo5/B/eP57/vz6dW11eGx9/nf0amBoZHB5f/x7fvnz9/f48O/v8Pv7+PXy+n35\n+fj7/n3/+/v8eHv9+/t5dH79/n90ffz7+3x5e/38/Xj4+nn9eHh3ff38enn7/Pr9d3n9/Pt5e/78+n54ef38/Hl2//78fXx8f/n5fnn8+fj5fHd8+/l7df3++v94d338/H12fv3+/Hx7efn2/Xx+9+33dXl3/P5+dX78/Pp5eHt++vx4e/v9/H18e/z5+n55\n+/36/nd8/Pv7eHv7+vj/enz++/t8eP3++/97e3z7+/55/vr6+np4/vz7fHf8/vn6fXt8+/x+dH79/Px8fX/3+Px8f/n5+H53ff37/3V+/Pv9dHp8//n8eHr7/fv/fH35+Ph8evr69/15fP37/Hd8+vv6fnl6fvr6fHr8+/v+fnr7+f3/dn38+/x6df37/H52\n/Pr6+Xt6//v5/Xj/+/v8fHt7/fr7e337+vf/eHv9/P54e/r6+n15ffj8/Xd4/P77fX19/Pf5fXv7f/X5eHr+9+vzbP55/nt0d3z8/Ht1/fz7/Xx8+/j4/Hr8+fj5fHh/+/t9efv6+f16eHz9+f93/vz7/X17fPr6/Ht6/Pz6fnh++/v9eXz6+vv/enr9+Pp5\n/v1++3t6eH76+/96+/v3+nh9f/36enr++/r+fHr//Pt3cPv9+/19fX73+Px6+/j4+Hp4/vv7/Xf7+fb6e318+fv+dnz9//16e3z7+f54evr2+Ht3e/38/3Z++/v4e3h7//n8eX36/fj7fn/++Pn/ef36+ft4evz8/Xp5/fz6f3l4fP76e3b+f/z+f3t5+vv9\ne/75+vh9eP////14//v5+e7n7Od5ZmhqdXR4dnZ4/vr7fH739/T+eH36+v13fvr7+n93ev76+nZ4/f36f358+/j5/3r7/Pr+eHh+/fx3efv8+n54eH39+Xt3+/37/Xx6697i6Plx+/L3fnd8fXd3aXDw/vBuXGJpb3Ftef77+Pr//u/u7vX37vDw83/99vj4\nfHz6+vp+d3n++v12d/3+/H58ev75+n56+/v4/3h3ffzxeHD9evt7dnZ7/v17dfnv5ODr6u/r9fr8+fn5/3VwdXp8dG56fP58dnZ6/fn+fnx6enVhX2ltfX9+f/Lu7PD48O7t7vf17vDx+Pf++fH3fvH1dP12d3Z4/v97dn7+/f51d3///XZ1/f79fXd1fP7+\neHN8//5/fXh++/v8ef75+vh7dHv//Xp0ff/9fnl1ef79fnR6/v77fnp++/n6e3r79/p8d3h//n93fP38/Ht4eHv6/Hl6/Pz7fnp5f/v8fXZ6/vf8e3r++vp8ePz69/x7eH35+np2fv/6/3p6eP36fnl9+/v6e3d//Pr+dXz7/Pn+dnr8/H5zfPz++318e/r6\n+n18+Pj3fnh4/vz+d3z9/fx9eHd//fx4d/3+/P7/fv74+v94//r5+3l4//v8eXj6+fr+enh8+/h4dfv++f59ef39/v11ev379O7y7+z0/nB46uHq5+3x735sYmFgYmJfY2RrdHp4d/779ff69e3q6+7s6Orr7vL39PP3+v94/ft7eHN4fX12c3///H54dHv+\n7OXm4u3v+nll+N/m3eLd3OTtemxqaGdgXV5hZGllZGJhZmhiaWptb254/vPr6eri4eDf5ebm5ubo7/Pw8vP5en7++ft2d3x5eHRtbHB1eHN9/3v8en11eHt8enR++/v+eXh+/ft2bnd2fXdubnZ8enlxe379/H96//j393z+9vb3+np8+fh+dn78/f16dnj8\n+v16e/79+313f/f69n9+9+/2e3l3/fz9d375+vn+env++fp4en3++f57eXz7+P53fP75+Xp6+/z6/X34/Pn5fnt9+Pn+eH79/P98fHr5+/t8fPn6+Xx3e/n8fnn/+Pn56+Lo6O3+bX33+/p+dXR3+3Bz9P7vdF9hZW13e3Z1+Pb69Pn68O7u9fzz8fH2+/34\n8/X6fPz4+Pl6dnz9/Hd3/P78/Hx4fPz3/nn8/vv7e3z4+nt/cnh+/vp4eP79+H11/fn393t7//v0+nr+/v73fnZ3ef79e3j++/n9eHn/+vt1ev35+n55ePr6/Hx6/v34+/9+/Pbzf3d++vj5fHV9+ufh6+Tu9fl3cnr8fXpyeH159vx6fH58/XN5+/P4fHl8\n+f58cX77/fbx+f31+n74++3z7e/8+3b47/5v8Orv8n5xYmlva3B++Pb3/f307+/57vF+9f79e3z6+/56fPv6+np3/vv8e3n+/Pr+eXV++f54dv79/ft8eXz9/Px6ffv8+312eHt+fG96fn7+eXV39+ru+fPv7u/2+3z6+Pn/dP74/n91cnh2d21udXB1b25t\nc33+enj7+PX3/v/69vb7fP749vb9/ffy8fp+9vT1+Xx5e/z+enJ8fv79enp4/vr9eHj+fvx5cnd7/Hx2fv/8+/Pt5ebp6n5+9Pf7+ndv//56f29venR5dHr/6+/0+e9+9fd4ffz3+H97+/f49/76+fHz+Hz6//L2/P718vD6/fTy/G9sb3P36e/+9e/t7vn7\nefHs+Ph99PLz+XlyXl5lYm94/fn8+/nv7e739u/w7/r+9P319P96//37/3R0e359c3F7e314cXF5fHx0cXp7fnt4dnv9+/54//z9/Xl0eH7q7mh5c3l6cnFyfH16cHh9ff57e376+f55e/38/Ht1ev/8fnN9/f79eXV2fPv+dnd/fvt+enl++vx9dX/9/v90\neP7+/Xh4+f77+X98f/n5ffv8evp7e3Z5fn9+dXz+/vt5dv77/X53/vn7+3p3ffv6f3J8/vz6/319+fj5fX76+vh9dXn+/X51evv+/nl1eH78fnR3fn/8f3x6+/f6/nv45t3j6/H4eX98ePn+/HFxbnZwffp18XJhZWZqc3z+/nd+8PTu+P3z8e/2/PPv7/L7\nfvv5+P52fX/+/Xp4eH75+Xt8+/34f3h7f/37eHr9/fr2enT7fv11dv//+357ev76+X55+vr1+3p4fvn+eHj//ft8dnV6+/p8d/77+fp9e/z4+f15fPv4+X14ffv5fnj7+/v8enh7/vz+fP76+PR9fvP6fvxzdn3//nx2ev79/Xd++fr5/X19+/j7eXz7//v/\nfHp9+fj9efz5+Pp5ef/9/Hp3/vv6/Xp3/fr7e3T9/fv7fnz9+fj6ev74+Ph9d3v99n1zfn/7/3l0efv5/XZ9/fr6/nt99vj5enn7+Pl+eHX+9/96//n2+H56ef75+nl9+/z5/3p3fv38fnd/+/n8enr7+fl8evr7+Pt7ev34+H5/+v78fXp7eP77/np/+vz3\nfnl+/Pj/eH78+ft7eXz7+/51ev38+v99fPj3+H7/+Pf1fnp7//x/dnz8/Pt8d3j/+/14eP78+3t8/fn19vt79/H6/nl4//38eHn9+/n/eXh9+fh7ePz8+ft8eH38/Pt3efv9+n54/Pz5/nf8+vj4fnh9+/j8dXz8+/t9enn++vl9evr79vx4ff76+nl7/Pv5\n+3h3/f38dnj+/vv/fHv7+Pf9evv59/p8eX37/Xp6/nz4/Xh5fPn7fHf8/vz6fHv8+Pf5eX37+/l+eX78+X53/P34+nt5evr6/3l8/Pv7fnv//Pr4eXn8/Pn+dnv8+/t3fvr5+f17ev75+nd5/P36fnx7fvj7/3n9+vj6e3l++fp8ef37+fx7eP76+Xx1/v39\n/X17f/j4/Hb89Pb1fnt7+fJ8d/98+X97dnj8+352fP38+35+//j49318+vr5/nt8+/v8eH77/Pl9eHl++/t5fP3++v57e/76+P54//j5/Hp8593j6O7v8uzq+v5+/X51aGVtbm5rZnL++vf//ff28Xd57PHo6fDt7O/w+Pz+9fv1enx6cnx9bl1mbXR0dfT3\n7/X59vHt7/j17u7u9fz++PX3fXv8/Pv+ent//fx8c37y/Xl4cn1/fnZ1/n7+fXd2ev78fXZ9f/3+e3h7/fv8eHz8/ft6d3z9+311f/n9/H13ev38fnR6/378fHl3fvr7fHj7+vj/cnb5+fx5e/v9+vF7b/5/+nJ2fn/8fn17/fn3/nf8+Pn7eXh9+/t5ePv9\n+/93dXz7+351ff36/H18//n6+3l9+Pn5fnl+/Pt+eP76+vp6eHz8+f55fPv8/n16fv39/Xp4/vv7/nd7+/n6d3z8+fb9e3j9+ft4ePz9f3v9e375+fx5/fr493x4fvf7end9/Pv8e3d++/p8c379/v1+e3759vt6/fj59312ev72fnR+fvr9fHZ5/vr9dnv9\n/ft9fX769vh9efr59/x5evz5/Xd8+vv4fnl3fPr6enr+/fv+e3n++fv9d3/5+/t6eP75+X54fn7z+n15fvr5fn3+ffv+fnp++/v5eX34+fd+dXv7+/12fP37+f54e/r6+3d6/v77/n59+vf4fXz5+vj9eXj++f14e/v8+X94eH/6+nt4/v37/H57/vn4/nf+\n9fr9fHb/+vl7ePr79/t8en77+v14//38+316e/z5fnh9/Pj4fXd++/v8eP/7+Pf+e33++f11fP39+n57e3/5+X97/Pr4+3h4/Pr8eXn8/Pr3eHf9+/p4dv/++/5+ev/49/x8+vn4+nt4fP38enf8/Pr9e3h9+fh/dn79+/t+en76+fh6e/r5+P95evz4/3f/\n+vv6fnh4evv3eH79+/n/fP7+/Pd+ef/5+vp9eP76/Xp6+/v3/Hl3//v6enf+/vn+enl9+ff7eP759/p6e3/7+Xx4//77/Xx4fvr5fnR+/Pr7fXt9+vj7e376+fh+dnr96eHq5+33d35/evf8fG9veW1693r5ZmFqZ2x1fvz8d/3w8e/59e/v7vP5+/n08/59\n+fn5+X14f/v6/Xd8/fr6eXh+/fx6dX78+vt6dnv9+33+/3n7fXx3ef/5+np8+/r5fnV7/fz9dnz+/fl8d3r9+v12evz9/P96fPz5+n17+/v5/Xd3ffv+dnn+/Pr/eHb/+/t7d3//fP3+evv5+f13/u33fH1yfv38enb+/fn6d3d5/Pp+eH3+/vx9eXr7+/p7\nevn9+/94ffr6/Xh8+/j4fnh5/fr8d3v9/vt9fXl++fh+efv7+P53ev/7/Hh3/fz5+Hl2/Pv4e3b//vn7fXv9+Pj+e/35+ft7eHz8+3x2e/n3/Xt2fPv5/3h9/vz6fnt9+ebd6Ojp7vDy+v/6/XpweHx8e3NzcHv8fXV4/P39/nVve35mX2dtff/5/vru7uz1\n9ezs7O/2+fLw7/t+9vj3+n56fPv6/Xh++/v9eXV5//55dH5+/f15dX37/H50fP78+358ff38/nx9/Pr6fHV3/u3+bn55/f56dHZ//Px3efr+/v15fP37+Xx3/Pz5+3p5/vn7env4+vj9eXl9+fp7dv/+/P56eH36+P14fPr6+nx5/fj5f3f++vr7e3V8/fr/\nen3//P9+eXn8+fl9ffn59395e/37/Xd7/Pv5fnh4fvf5d3v7+/r8fnz6+Pn+evr5+ft4d378/Ht7+//6/3h4fvv5fHj+f/r8fnr/+fj+eP70+Px+d336+nx4/Pz2+Xx4efv4f3d9/vz8fXt7+/r5enn6+/j+eH75+fx3fvr6+X54d/35/Hh5/fv7/356//j4\n/3n4+fh+dHz+/P14ef/9+PZ5dPz8+Ht3/fz7/f18/fj3+H79+fj7end7/fp6d/39+/55dnr9+/54/v78/Xt5efz593x8+Pj3/Ht8+vf7ev76+Pb8e377+v52d338+v9+7d/k6vZud/L19Hx7d3t9b2j78/LwYlxland0dvj49/P9/vbt6u359O/w9X51fvX6\nfXV/+/n+cXP/fvv8b33z/Xz9+frv7/j8+nt1/nJz+/nq7nV+eXp1eHJtcXZ2d/79//v49/z/enl8fPP08/d7e399+37+9+/u8/Zvbv3/cXp8d+/zdW1xcX70dHJ99O7u+v97eHZ0+vDv8n52e3z+fv5zevT+/XZsePT1+fz9++/+bnp9f/N+c/z1fPj2b/7v\nfHz5fn33+f35+Pz09H70+Xdsampy+PP8/X97fnl1ePv49vl89vP3+v59/PX1/X318e/0fnd9f356dHz89vt6d3V7f3Ztb3F3+/1+/f96+vp8+Pv7+3707/X4e/z07vH1+vnv6ev6+fTw7vHx+/nu8/b++39+eWpraGhmYF9gYWBfXFxfYWZjZGxwffv69u7o\n4N7e2tnZ2NnX087LysjHyMrN0dbX2dztaVVIPzo2MzEzNztEU33c1dXb3eLveWzv49jMy8nHxsfIzNDS09fY1dXW1NXY1tLQ0NDV0s3Kx8O/xV02KiAfIikyQ+rMvbW0tr7YSTw6PE7dw7y5uLq7wM9oSkJCT/PPx8bL1Nzb2trf7Xp67N7V0c7MyMS/vLm0\ntOAxJxwaHyQxSMu+va2xr7PKTzExLjhn0Lu4tLm8u8vRaU5GTHLexcXIztTZ3NLb3e5tZG/e0MW+u7eyrq66TSseGBcbIjJew7ewrKysr8FWNSwqMUbcurGwtLi8w8ndV0ZAQk/mzcPAxs7V29zX2+r58O3Yyb+5s6+sq67EPScbFRYZHy5Mxbesq6morbTS\nSjIrLjFH1Ly0srG4ur/L12dTSklOX9jMxcfHzs7R2Nfb3Obe1ce8ta6rqq2/PigbFhYXHig64L+uramoqqu4x0IzLiw2Pv3IvLa4trq6vcTN+2tQV11y3dTMz83T0c/QysnHxcG9urOurrhlMCEYFhYZHytH4ri0sKmqp6uvvV1CLy8wOE7ywsC5ubm4vL3I\nzvlbVlJq/dfW0dDSzs3JxsC+vry7ta+vuV8yIRgWFBgeKkLlt7Kuqammqau220wwLi0zP1fLxbq5ubm7usPH32ZVUFtm3d3Qzs/MzcbEvry8uriyr6+6XzMgGBUUFx0pP+22sqyoqKWoqbTOTjAtLDQ+TtDIvLq5ubm5v8LbalZPVFvq4tLOzszKw7+7ubi1\nsq6tsMhBKhsWExQZIC9Gx7SwqaikpaeswPc4LSwtOEHozcK7vLm5trq+yPNcTlBVdt/XzMzJxb+7t7Oyr62srLdjMh8XFBIVGyY3XLq2q6ekoqWnt9ZALiwsNT5mz8m+vbq5tri8w99aTU5RdN7UzMnHxb+7trGvraupqrVbLx0VExEWGyc2Wrq3qaWhoKWp\nxVo0KysuPEbZzcq/vbi1sbi9y2RMRk1U49XQysXBvbi3s6+tq6inq843IRQRERMaJDZBv7WtoqCfp63mNC0nLDVU88q8wrq2srS1v3pPQD9Ibe3RxsfBvLi2sK+uramnpaW5NiIVDhASGSAxP3Svq6CdnqnETykoKi4+ZsbNtrCuq6233lk7OUJKW+XS2MW9\nu7e2u8C+vLOppKKfpNIsHhEPExQaIC85vaSim56myEkyJC4tMz5yxbmlpqesvVQ8PzVDT09f1cW/sbS4uru8tayqpKGgoLEzHxUNEBIXHitJ3qSfnZ2pwTMwJCcvL0Jvs62jnqev1EgvNTk5Tlfrz7e2tbO9vr24t6+rp6KfnaVPIxgNDhIVHSU9T6qcnZqm\nvDQsKCIvLzpYuaqknKSuy0AwMDw3R1Rvy7ixtrO8w7y4s66opaKenac/IBYMDhIVHidEX6acnZuqyi4qJyI0MD7utKijnKe04jwxNEE7T2rlxrezuLS9xLy4sa2npKKena0wHhILEBMYHyxO2Z+dnZ2ueisqIyQzMUTcr6ihnqq6XjwzOkhCXnzWxbaxt7W8\nv7iwrKiiop+eqjsfFwwOExUeKE73qZyfnanGMCkpIi82PnW2qaefp7fYRjk2SUhP/N3NvbK3t7i+urKsqKOgn56oPyAXDQ4SFRwlRfisnJ6dpr03KisjKzM6Ub2qp6Glsc5cPzpHTUpX5dO/tLW4uLm4sKqmop+fn64yHhUNDxIWHSlP06WcnZ2pxTMsKiUr\nMDhOuaumo6i3z+9GSU9LR0/p4763ubm5t7Osp6Shn56hxCccEA0RExkeLlO/npydoK5mMC8qKCsvNmSxqaWkq77M5UtOSEM/YdTHuLi7vrm2sKuppqOfnqLVJBsPDhIUGBwrQ7uem5yjrvY5PS0pJyowUbGrqKiuurzC3VdKPDta5Mi/vL66rqyopqSjoZ6g\nuCkcEw4SFBcZIjnaopydoqy6TVc6KSUmLTy+rq+srrGztL9hS0A8Tm7f3Mi/u6+tq6qnpKKenqdEIRsSEhUUFRkqP7Ofn6CoqbbH2S8nIykwRcbJvrKurK2wx+n0VFdTUE1oy8O4sq6sqKOhnp6gui0iGRMVFBMVHS5Lq6Sko6Okr7XvLyspLS88SkbOt6+r\nrK+7u73P4F1LT23b08e8tq6opqShoqjiLCYbGBsYFxwjMV22r7StrLO1umg/Pj1AT15PWs/BvLW2vr68wcbJ1+fc1NPMxsTAvbu4uLi7ZDUyLigpKyYlLDM4Sufh2sK7vbq4v8rKzdPS22tZW2T13t/f2M/LyMrO0tjb3N/l5t/d2M7IxcTI8khDQTs5OTUy\nNjs/Slxgb9zQysPCyc7P0c/R42xiXF1senL139zUz8/R09jd29rf3t3f1s7KxL/Cz1xHRUA9PDo2NDk+SVtlYfXY0cnDx87S1djY2uZyYlpccO/o4OHb0s7Nz9bf4N7g3tja2tbSzcW/wdJWRkhDPjw7NjY7PktWXGbt3+TNwsjM0+fj3tjg/mRcYXvq597b\n39/PzNvVzeD62Nbm3dTY1cnCwMPOW0VGQjw8Ozg2OT5MXmZrfObdzcXIzdHW3t3Y3ep8Ylpn7ebj3+Li1s/P1d3p7+rr+3759eTY0MrEv8HUWExLRD48Ozg3Oj9MWl1r6eLaysPGzc/V3NbW5v1pWl5vfvTq3uPg1M/U19vo6uLk6ero39bOzMfBwc1qS0hD\nPj06NjY4PEdWWWDv29rMwsXKzNDc19Lb63VdW2/ufv7m5eHW0tna2+Ps5+n28fX+5dfSzcjDurTLRkxCND0+Li0xMTlh3nrUxsS+t7nH2vJeWnxtT0tLTFve1eLYzMvIw83k5e5xfftpbOnb1crAvry4tbGtrLdLKiglIiknIigxPuu6u8K/urm9vtpGQkxb\n79Hb9drIwMDE13vdztThbldadOjo59/XzcfFxcC9u7m1sK6tsNwsIyMeISciJS0+/L+2vczCusDM3Ek8R/PSzcbIzcS7vsrR4n3c0OFvcHZu8d7m7drT1c/O0M7FwL66tbCtqqzJLCAfHR4kISArRNG6tLjHxLa70l9IO0LlyszPyse/t7rL/urc1M/aaVzo\n19XU3evfz83U3dXPy8bFxb62r6upq8oqHx4cHB4hHypTxLa0tcLDtrzUSEI/R9TFyubLvbm1ucTi0srP5m5lYd/V3nV65N/Y19ve0MvMzMrGxL65s66qqLkvHx0aGhweHiRJv7CurbfBtbrRRD09P/vX2PvIt7Szu8LRysnZaFdme9nZ4uTUy8vLz83Lx8rO\nzszJytlWVtrXamfgSzMvKycoLC0tOEZU68fKz8TAytDP3vrq4Xz81M3Jw8LGxcTL0NLU2NHP19fOzc/Nzc7Mys3T1NTa4eXt+fb3/Hl3/njv4/xHNy4rKSgpKSwyO0Za2cnBv7/Jzs7V1NPSz8nCvbu4uLi4ur3CxMjKyszNz9TX2d3j7vJ1XlZPSkhFRURD\nREREREZISkxOUVRYYWJaUEtKSUZGR0pSXGJ06NrZ1tPRzMrMzsnGxsXCxcPBwsTEyMvOzs/Z3Hdqa2ZdUk9KR0hJRklLSU5TVFhfZGRdXmJncmpscfn38fP17ejm6unq5uHm9e/r7u35+f/07u7x7t7n7OTm49zb293d3N3d4+rr6Orr+nZ7eXRsZ2drbm9r\nZ2hubmlqamxyb3B2/fr47O7v6uXj5+vo6Ojp6enw6+fs7e7x9/L7/Pn+enRsc29wdWpqbG92dG1we3l9fnl2eHt+e3Z+9/d//Xp+9fR/9+/27/l9fP76/XZye3z//nl7+vr5/HX59PX1/f787+/7/fn7/HxwbXBvcGpkbWxrbm1vefn49vH59Ovz/Ht7enJ1\nbWpvdnVvcXN6+395fvfy8fj6+vr08Pl++vrz+n7++/T1/H379/T8dXR8+/l8eHt1fXxxcf35+vp3/vv5fnBvcfb2bXJ2fvz+e3j79fr+fn379fZ8/Pfy7+z5++/4/H1xc/95enZ2e3p2cW5xen5+eHf78vX8+n738/t8dv55enlvb3d9d3B2dnr5+3l78vLv\n7vj36+/v7H/58PT2d3j7e3Vva3F1b29ueHR9fXZzevj4/3V5+vT/dnB4/Pr6f3v+9/P9eX31+3n8/vXx9Pv4+fT6fP92e/h9eHl88/f983z58n58eHF0enhqb3hufXZ0eXX683t0+vP57u988+7y7n797/j7cXV6bXN6cnF2+vl9cX7w/nR4ff/6/Pt6/PX6\n9nx8/vnv8Pn98e/t/Xf39PN4bXr793hsbnF5dW1vcHF3eHj98PDx7+np6Ovq6Ph7/f1zaWhpYWRlXmFlZ2ptamv8fnv/ffXu6Obs6ePoe1tkfnd3e/r2dGVlYWFfX2BkbnN97+rp7ujn4N7n6OXj6/p9/nt+e2hlbXJoZGRpbWRjZ2NgZm9vcGtpdXZsb/n6\ncn19//zu7v5y8unt/n7y6n7q3Orm7vH2ePpzcWpoZ2h1fXt3evr1cG5q9+nw4u595PDk9vL28vd8cnBxb2traG50c3R3/vPw6Ong4NzY09LNyMXEwcTCwL++v8C/v8DNXUE2LysoJygsMzxHXc/AvsTO1uJeUVFb/tzOxr66ubq6u77CyM3O09PPyMK+u7i2\ns7Cvr62t2y0oJx4YGBsfLDpA2K2nrK+zvtRZNy4zQEFJ1Lu1sbK4uLrNX1xeVVFVatbHyMzFwMfT6Hdybl5c6MzGv7mzr6upqb4uKCseFhYaHik7RsqnoKiurbXTSjIsMkJDScGsqautsrzHXTc1Pj89Se3LwL/Gxb/JcVlmXVFRVnDTy8e8tbOxraqoq20l\nKCwaFBceJDFRYLSfoK+3r8BGNi0tPFxP766kqK2uuM1VNi0zPTtB3768vL3AwMhtTVliUU1a+tnPzsm9ubq4sq6srL4tJC4jFxgfKC9NbcqppbbUv8NIOjk7WsfGy7GnrLi+xftJPDM6TldP5cLByc7W3Nj7Wmjl+G/x4d7d2NbLwsG/ubOvrKu+LSUuIhca\nIy44dc/AqajAXdfZPTY7QuC+vsKvqLC/w8pgRT07RVhRU9HAy9bOztfmZFp65HJn6Nng4t7b0s7MxLy3tK6qrG0kJi8eGB4rOlHIz7mosV5I22M5PEdwwbvDwa2tv87JzV9MQEBYaE1Yy8XU3tjc6HJWWevgcO/W1+Xw8OLb39vKv7y4sq6rsTsfKi8cGiU4\nS+HC3birxj5LyV89T27Qvb7Rxa6zztDEzVpLQ0Vo7U5TyMbuauXscmNTXdvZaPnT3WpofN/T1tTDurq6sq2stUAjJjQhHCY5Vl/ad8ywxkJIzNRGS17jxMTUy7GvwMzKy+NRQ0Vv5FVezsznamFp9nxdbdjW92zz73pr/trP0M3Evbm3s62twTAgKzEeHys+\nYmzeVMKz3kJPyu5IT0/cwMPPw66xws/Z3mNOQ03azvVd4NHmXFdn4t5xZujW71xm7+Xt7d7QzMzIvri3s62uxDMgKTIgISs9dHbZTc+200hH0N5RWE7uwr3HyLKxvdD08mlhT03rzN1b/Nvnbl9f9dTpXGrf7V5eafjr7v3g0M3Lxby4t7Wwr8U2IyY0JyMr\nOff63k9kusdZRHXRZmhRX8m7vcu8s7rLbmJdYFxOXdbL6Wvu4/hhX2je1u9kfeD3Z2R74dnc4tHFv727uLKusdMuHygzJCMsP+bp1Ex9uchRQPvVY2ZSase4usm7tLrOXVlWdvhYZdLM+llefv5pX2fe0uxcbuLodGl65Nne7trFv7+8ubWvrr05ICQ5KSEp\nNvPl1U9Hur1pP1TMbv9XTtO6tcnEtLfDb1hTYtpbTvbLz+/66N7je1/80ttfWn7rfmFeft3c+u7PxcG/vbmzr7PMNSElMyYjKzvwfdlZX7rBc0Zsy21vVmDMu7jJvrW5ymJbU2fzU1ncydxq+ujl/Wlf7tX+WGHyfmJgZ/jd4fDWxL6/vbm1r6+/QygkMCoh\nKDJYaXrxWL299UpTzG1SVFbPwbzFwbO3xm1ncVxaTV/WzuBs39jiYmD33NtyYvfieFtf9OPk49vNxMG/u7eyr7XgLiMuLh8jLUFWVdtbv7XRWlPI/EZQTt/Lw8nEsLTF3NfSYlVKWdzeamPT0eZue+De5Wps5edkW279eXTu2MzIx8K9uLe2tLxbLCcyKB8m\nLj5DWvfotrvf9s7HT0xVWdXOy8q4sL3Lz83iVUtQ8P5haNzS5/zs29vuderd/V5fdnZfXm/f09fQxb+9vLq2tb7+Nis0Kx8nLTY6P3r4ubvXyL+/YVb4We1ua9vBusrIvcHN5OTr3+5gduLlZnri4ef05tnb+3H07mpdYWn18PTr3Njc2tXT0dTtUz8+PjUy\nNjU7P0VNWNbPzsbDwcTDxsrJzdTZ2drm5eTm3+Dm4tzb4evxf355Z19kZWJgXV5jaGRhYmhrcXV79Ozm4N3b19XX2+5oX1JMSkVISUhKTlpgb+3i3dnT0c/O0dXX297p6/v573l2/Ovn5uvt6uns9fN/dXRtZmRqaWhpZ2t3fvXx6uPf3Nva19TU1+pvYFNO\nSEZHRUZKTlNaafvq4N3X0c7O0tPV2Nvk7vLx+Xdz+e3t6uzt6+rr7vj/fHRyZ2RkbGplZ2t2fvHu7eff3dzd2tbU1dzyaVxRTEdGR0ZHSk5UXW/06uDZ08/Oz9LT1djf6urw9ntye/Pt6unu6+nr6/L/f3t1a2NnaWpoZmdte/fm2tnZ2tvb2tnW1dnmemVV\nTUhDRkVFSEtTWGX88ure2NDNzs7P0NjZ3+Ln7e36///y5urw6OLk5fJ+Y2VoZGJfZ2ZqaGlye/Lv7Obf3tva3NTR0sTNYdVuQUVAPj48PkdKUlzsz9TQycbGzM3O1Nh8Z2dhVlJkY2H63NnZ1dbU1+T97vppZmRgY2ZkaWxrb/Lr7+rf2tjY087LxsjN2GpO\nUTwxOjc0ODtFR1zd38XCxr6+v8zKyN/m/mVdWGtWWeZv7NPW29HP293ifm15YVpiYV5re2hy8f337f7u393c2NDNx8K/wcrYT0pLLS06LS4zPUdC09HIuMC7ub3H2cXiVWhfX09f+F/j1tXOzc3PzdXv8X5eW15bXGZue/Dz8Obm9nru6+fg19TOxsG9u7y/\nzU88Qi4kLS0pLDROSenAxLO0u7y+vvV13lZOUmNf+Nn5ycDNzMXE1drabmtgU1heXWXd1eDe2eDi6mpjb/R37c/Oyb27t7O3w2M4OTEfIyknLC1DW+O3wLeutr3axdVMXU9W/uTY2b6+zcPAyNLZ3nDzak9cbWddbOfj2dvr5+H7X1haXnvk3c7Evrq1s7Gz\nwE4tKywfHyUkLz3j09SutLe3ystp8VI8WmD6zcO7v7q3wszdfVdNWE1RaGfv5N/o59Xd39zv73JlXFpiZ+fPyL+8ubaxrq+13S4jJiAeJiQqO9+4xba3ybnH40w/VEVvz+XGvLOyt7nN6ORVSEBFT13R1d7W3dzf4uts7eTu/nNlXWxy6NTLw726uLSwr6+9\nPyMeHh0nKy07RsC4sq/W5lZO7U9oTEzVzLWzt7W/vsXS30lDPj9d8s7N3Nfn3d17/V1k8+za63pqWmhz5NDNxsS/ubaxrq+7QCQeHB0oMUVbWcrIu7PB0Ug9Q0HfzcrE1MXBu7G2u81bT0VLU09gY+/V1MzV7G5WXW7p1dvg92Ruanfs5tTOyMK/urWvrLDe\nLiAbGyAtTcrGwtbcysvD02VLO0BP3L26uL7My8rAvb/Jb0c/Pkdc387T3Hpham/z7vHm7Ofm7+58a2x538/HwcC/vbixrrpMLSAbHSMz5ruyvc/sTF3o0s/7ZUlDVefAuLW5xM3d6djR0+RcST8/TGvUycvX/l1XXH3bz8/Z9mJdYX3f08nEwsC+u7SwwE4y\nIR4fIzRuurG4vHVKUE3p19DZWldITtzHura3vs/hYlxqZ2xeUkxLWX3YzM/X6WlfYn7f08/Z8Wlia+fRyMG9vLq3t8hXNyYhISQvSca5trfNflBKWnHV3O92T1Ng3sa8trm+zW9TS0xPVWZv+Oz05N3c3eXr9u3l4d/e3unx+Pff0cnCvry5u81UNiomJSkx\nR9O/ur3L5GFeYffh4OVpV1Rb7c2/u7u+y+9TSERJVW3k2NPW2+T2+erf2tja2dvf6e7t5tnOysa/vb7OWzotKScqMEF8yr7By9z9bHTo3dbc/lxRVGTbx7+8vcXZX0tFSlFp4NTO1Nzybm7339fV1tfe7X1vd+jZz8nFv7u6w+0/LyomJyw6W869vsTS9Gdi\n/d/T0uJnU09UfM/Evb3E1l5KRkta6dDJyc7cdV9gdOPW0c/Q2OD0eP3i0snEv72+zlg6LSopKzJDeM/IzN9uX2fs183KzdxuVlFb7c7Dv7/I22NOS1Bl4tTPz9bldmZldOLX09HT2OP7aWNr+ePb29rd6O93Z1tQSEI/P0JITldeaXN6dW1y+vHq5uXj4OHh\n5enj4N7e4eHe3dzd29fY19nd3t7e3+bp6Ojr7vV8eXVxa2ZsbnFuaWRlZWReWVdSUE1LTE9YX2dse/r4+X378ufc1+Dl7Ozo6N3Z1NLR19fW2tzd2t7k3uTk5u3o7vZ/eX94e2dmZGRhX15gZ2trZWZoaGdpZ2tqcW5lY2hpbW1sbPx3bnZoc/Px8Ovj29na\n293a2tjX2tra4/nz+O7s7Ort7vHx8v5ubW9vbmtnaGpoZV9iZ2hpaGZqcXBtZ2hrand0cXv9+P10bnh6ff98/Ojq/P939vfv7/Pw6ufp7O/s6+rr7u/u7O/5eHl9d3lvbXJzcmtobGxubm1scXp9dG5vc3Fwbmxvc3p6bnN7fv5+d3/5+35xev778/f79u7s\n8P778+/u7/Ly9O/yfnr7/fz+d3p//3xubHp7/n1yc379/nd0fHz+fnt5/vv5fHJ5ff5+e3V9/vx4c3/8+fl+eX/7+351ffr39Pt++/j3+X379ff0/Ht7/f96cnr7+/x8dXV8/31xdHx9+v18fvv593x0fv36/Hp5/f1+dXN+//r+enz59PV+fP5/+f1+fP34\n+fR5fvj9/Xd0ef9+enN++/P3dXh7+/18c3r+//x9enz59/h7ffn39/16fPj4+nn++Pn6fnd5+vr6enr7+/j7fv/28/P7e/f4+Ph5ev37/Hh5/f39fXd2ffv3fXn7+vn5+n7+9fT3eX76+Ph8eP76+/54fvr5+XxzevT2/Hj+9/r4/3x++fX4en36+vh+eHz7\n+vt5fPr59fx3fvn3/HZ6/f76fnl7/vn3fXr6+Pb8fXzr53V3dH77/v53dn77+3x1/v36+n18+fb1+Hv69/f2/nn9+Pp9eP77+vx6d3v7+P93fvz6+v18ffj19Ht5+/p/ent6+vv9dnz6+vb/d3n7+PN6df3//H56eHz7+nlyff79fnd3/Pn4fnv39vD2///2\n8fX+evr6+Pp7en/6+f91e/38/nl0ev37enT//fz+eHN6/ft/c3v+/fp+eX759/Z9/fj69P17fvf5/Xv/+fj4/nl7/PX5dnp8/vf+fnv89vb+ev36+vt5efz8/Xl3+/r4+3h3/vj3fHf9+/j6fXp7+/X7d377+fp8eH77+P52/vjz9Xh3f/j4/nZ8/vz5fnt9\n+vf4e3v6+vr9enz7+fh3/vj6+P94evv5+3h4/f75/Xt9/Pr5fXj7+vn5eXf6+Px1ePX79v54dn38+314/fv6+vd9fvP293r++fz+eXd9/Pt+dn79/P54c3v69vt3fPz9+/1+fvr09H17+/z7/3d5/f78dnz5+vh+d3n+/Xxyc3z++f59f/jv8fl8+/f5/nZ2\n/fv8fHn5+/p+dW96+vt5cnx/+/h+ffp/+Pd1/vv39Pt++PL1fnX9+vr+dnF0fvx9cXr8+ff/eXZ++vh+evn39/x4e/38+3h6+vjy+H1++PX17uXo6er5/fz39vd8c3z/fX1ycnh7/nh69vPz8Xp5eXF4Z1tnam94dHz57uzt9e/q6ujr7uvq6u348e/y9H1x\neH5+e21tcXB0b2tudHV3b378c/t6enz08PL69+7v7/P59+/u7vv++vz9fXZyfP79d21yd3h6cnF8fn11c/79+fx2cXj9/nl0/vv7+n17ffv4/3Z++vn5fHv9+PX5ePz49fp4eXz5+391ev379vx+f/n6+nh5+/1/+3p0//7/dnp//v18dnj7+fl9efv9+Pl8\nfP79/H52//z8+3l3//v8dnV+fvz+eXj/+PP+efv7+Pb2fnz4+Ph5fvf5+X13ff39eHF8+/j5e3R5/fr+c3d8/Pn9fHp/9/d6efv5/H54ev38/Hd7+Pf0+3h8+PX3e3d89/L4fHn9+Pf/eP79+/16e/X5enRteXp//np2/vj6/3Z9/fn7fn399fT2e339/fl9\nfPz3+H93/vr7+f17fP37/nZ++/35fnh2fv37enf8+vj+d3v6+vp5evn69Px2ePz39Ht1+v78/3h6f/j1/Hn++fv9dXN8/v12ev368/j/e/z2+f96/fv6/P9+/Pf0+Xz79fj5f3h7/Px9c3x9fX53cHZ8/3xyePv7+P19/vn2933/+Pv1/Ht8+Pj9eHv6+vp+\neXn/+Ph9ef39/P59e/v49f51fvz4+X16/Pr5f3f7+vT5d3V8+Ph+eH/7+/58dXR+8/p4//X3/X52fP39fnJ+/fT5enl5+vz7d336+vb+e3z58/V9fPr6+fx7evz5+Hp8/vz6/Xl4/vz7eXX7+vb5fHv9+Pf7ef339vd6dXz8/Xt3/Pv8/Xdze/n4f3Z++/r6\n/Ht9+Pf5c3r6/vl/eP/7/P91/fX08nx2+/j1+nj99/z5fnl4//f4/3n7/v7+dHd//fl6e/n79/x4d/38/Hh0fX75+319/fXz/3j++fb3/Xz4+Pp+d/z8+vx7dn739vt4ffr5+X56ffv5/HZ4+/37fXV9+vp+dv76+/l9eHz9+Pp4fP36+vx6evr49n54/X/7\n+Hh8+/v5e/76+fb+eHj9+PZ5dP1//f96d3r79311//r7/Xp1/vz6fXT9+/n7fXj++Pl/dv79+fl+en76+fl3fvf5+X53efz4/3R9/f38e3V4/vv8d3r+/Pn+fHz6+PV9fvr89/56ePz5+nl8+fn2/Xh4f/n5fHF++v39eXd++vf5eHv5/vx5dv77+nx2+/n3\n+Hx5/PX1/nj++/v7/3t8+fX2e/72+vj+ef/6+f53ffz29nt3d/z8fnZ3/vz3/nt7/fj2fXr4+fj7enn9+fl5fPr++n92d/z5+Xx2/v36+n18+vb2+3f/9vb1/3r9/H57fefd4eLv8+/w7vp2enx8em5teHr6fHR2///8fXX//3p3bV9kb3J4dv3z7/D28+3t\n7e/09fDt7fX78/Py+Xx9/fj6eHr8/fz+dXb//f14c3x+/f95eP76+f92/vr5+nx47eL9bW1yent7dHF5/f59c3v+/ft9eXn38fl9evn4+P52fPv4fHN9fv78fHV5/fv5eHv7+/n+fHz89/Z9d/38+ft2efz7/Hh5/Pv3/Xh4/vj4e3T+ff5+eXh7+/j/dn/6\n/Px8dn75+n53//v6+Hx3//r7fnV8+/77fXp++fb4eH73+ff+eXv/+f52ff38/Xd2e/76/Hd3/Pz6/nt/9/b4fn74/Pj+eXj9+vt4evv7+f15eH769314/Pr6+nt5/fr0/Xd++vv5fXf9+vp+ef359/h9dn35+n51ffz9+n55ev33+np9+Pn3/3h9+vn8dn35\n9/d9dnn6+/13d/79+n57fPr19v57+/71+Xl3f/n6enb+//t8dXf//vt8df79+ft9ffv08/l5//j493x4fvv9enV+/vz9eXV4/Pp9c339+/v/enj7+ft3eP7++n11ffr7/Xp99/j3/nd8+vf8eHr9/fz+eXl++fh9ePr7+/16ef76+np5/P32/Hh4//r8d3D9\n+/v7e3v++fX7ev75+Pz/evv1fXtyfv/+/HZ3evv5f3Z8+/v3f3t+9/b5eXv6+/d/dnn8+352ffv69355ev34+Xh8+/n4f3p6/fj3fXb//fz+dnj+/vx4efv69f16evv39H51/f79/3p3fPn2/Hj++fv5fnb//n/6efv5+vh6d377+310fP77+v98fPf2+Hp7\n9/n3/Hh4/Pn+dXv+/v16c3Z/+/x5ePv8+Px8f/ny8vx9+fr3+nl3/Pv9eHf+/fv9eHd9/Pl4c33+/P3/eHz8/H1zev39+X14/Pj4/nr59O/x/H369Pb4fvn19vX4/33x8fP+/vX3+Xx0dHl6eGxvcnZ4bGdpb29vamtvcHZ0dXn88/T4+e3t6+ru7unk4+jp\n5eTg39/d29rb3uPf3uDp+nBoXVBIRERGTVJVVlhZWVtcYW386uLd29rZ29zX0tHQ0tfa2NjW1tXT0tHU1NDNzMvNzthsTD42Ly80O0h25+9vVUxLVF552s/JxcfO2+To3dLOzczR2+xpXF1p/u3j5vpvZmBme/Dm4+vs7/l0bm/97+jl5+Po7vl0amhoZmFd\nXl1dWlVQTk5OT1FXYmp3fHz06eLe3dfU09LT1NLPzs7Q0tPW19fY2djZ297s+nZ1aV1dXFdUTUdAOzo7PkdVY3N1aXJ98/Lx+fXh0szLys3Pz8/OzMzP09XW1dXX3Nza2dnc4N3b19HQz8/OzeBBLiQiKTRywcDKY0tLT2RbXvbVvrm8xupWWODDvL3G51FJ\nSE5q2c3JytVvVk1U8tHKzNTta2tzeezh2dHPz8/X4vV9e+jq8V0+MzExOlHy1dl2WFRfZnTu8d3QzcvP4mJPTFRv28nGy9Lf7+TVz83O09nd6P7t49jS0dfY1tXPzMa/urW13i4gGx0qRsG6yWE+RE9ZcFNV68W4ucL/SlTYvLK1wOtRT1r1d19cWXzf7WNP\nSlbnzcrQ62Rfcffv7PPu3tPR0c/Qz9HS0dPX18/OUTAsKCk/ZNvLaU1HWe1o23Zc2MzExMzmX+PPx8HSW0tIUeLKycrO3untb2d78eTX193ucWVs9O3p6uvi08vGwcC/u7e/NyEfHCbmxbe7WD89Zn571UlQz8S5vM5STNXDtbPJVD06QmvKyMnP7XprX1pn\n/tvLy9TvX1df7+Pf5Ovk2tPPysbDvry4t1wmHx0fScG7tW0/OUvZb8xfROHQv7vG+knyyruvvOhDOD1XzsfK0vhwbmtnanLs1c7P23ZbWGzl2trqe/7fz8rJyMXCvbe27igfHh4/wb209T44Rs/nyPZBbt3Cu8TcSnjMvq+52Uc4O03Pw8fTcV5gent59vDa\n0tTc+GJbZfzl3+f4+9/Ty8fJyMS/ubTDMSEfHS3NwrTGRTk74+HNzURR6sy7v8xUV9PGs7THWTs5QPLHxsnfZWVxdm5//d/Q0NjtaVtj/evc3u/78N7PycjIxL64s7w3IB8cKc2/tL1IOjds3dfFSErq0ru9yFhL18i1scRiOzk/Y8PBxtRfVl92bvPv7dXQ\n1uxrXFv55ODf7H3239LKx8fFwbu2t1AkHx0hXb65tlk9NkrV6MJuRHzlv7zE6Uf1zbuvu99COD1PzcHEz3NZWfnqee7/39TT3XhfWGns4t/m7vDh1M7KycnFv7m1yi4hHx00xr60zUM4PODry81HW/bNu7/KUlbXx7O0yVA6OkDqwsPG21xTXHR64OTp2NTY\n5m5ZXvXk3d/yc/fe1MzKysjDvbe2WScgHSBRv7i1YT02SdPqwvpEcuzBvMDZSXDTvrC62UE4O0nMwcPK9VpXZGl75Ove1dLc8GpZZ+rh3OP49d7Py8jHxL24tLo8IR8cJd6/srlPPDVc3eHDTUrw1ru+w21I38+4sL7sPDg9VcbCxtNvXF53YG/t69TP0+Vs\nXVht6N7d6nt539DLx8nHwLq0tOEoHx0eO8K6s9pANkDZ7sriQmHdwLrA1Uhb08CxtstKOjo+5MTGxtpoWmlgXe3l18vM2/5qVmDv6t3b4u/n1s/KxsS9t7C0TSQeHB9Kwba18UE3S+Z8y1pFbde8ur/tRWzTu6+50EU6O0XYxcTJ1+lsfmVhdu3RycrVflpQ\nW/nt5OPu793VzsjFv7u1r7g9IB0aIU7BtLbwRDtc4/HNT0d3z7q5ve5Jati6sLjSRTs7SNnLyMzd+21sWlphcdnLyNDnXE9bbe3g3+Dd0c3Lx8O9t7GvxC8fHRsoYsezvWlCQ+Zp4vA+SmfKurm9bF/f1Lezu9hHPDpP3s7J1u90fWtdWVto3c/LzuxdVFZc\ne+fj4NbNysXEwr23sq++NSUeGyY+abu+11dT0PXW6D1AR3nDu7nO3d/twbu8yl5GPUpk9NXS1c/N1PhiWFFk8N3O09vldGJWXGJt49bMxcG+vLm0tNI1KR8eKS499fHa3cO9v7jPWUo+SVnX0NrL1cq9vLvD1F1JSkZMVldh79XMyc3Z5Oj9935vcG1uam98\n/Orf3trRzMrHxcPD1V1GOTc3NTg4Nzo+Sln209LNzc7Jx8XIzNDZ1dXV1d3j5ebn6OPl7/dxbG92fHhsam50dvl6bH13e3Btenv7+3p/9PP29/Lo4uLua2Fpa2NeW1dSU1ZbX2VqbW1t79/b2tze3tvY2dvb4ufr9fz08nxvaGtye355en/27u/7+fT6+3tu\nd3VqcGpz//rz9Ozl3tze8Xb9/HBlX1hSU1VXWV1cXmFhdOri3uHh3djV1dfb3+Di6e/u+3duZ2ZscXJzbnn7+PL9/fby9P50fH7//Hl1fffx8/nr5uLi7XhvfndpXllVU1ZXWl1eX2VkdOri3+Ll4tvY2Nvd3+Ph5ezv8/p/cm99/f7+e3j68vR8eX12fXVr\naWtwdG9vffrv6+rn4d7d5v56fG5kXFVSU1VXWF1dYGhrfOrg3t3f29jV1tne5OPj6PX/fXN0cG1zeXl9dn3x7+/6enr9/nVramxtcm9uc37x6+zs5ODf5ft2/3FnXVlXV1lYWVtdYWhrc+3m4+Dg3trX2Nri4eLl5/D6fH7/eXP+/v78e3b99/p+cHJ3dXJt\namxxdnpzdvn07e7x6+fj5e98enlsYVxaWFlbWVxiYml0c/3q5OHi497c3N3j5+jo6vX58fbw9X/+9fLy+X349vj+dm9udHBrZmhsbXBtbnn79PP37Onm5ery/X10cGJfYF1dXF1fZmptbnfy6+fn5+Lf39/o5uXo6O31+O/v8fv89fbz9/1/+/f5dWxxcG9t\naGhtcXRvcP/69PX5+/Tu7fX8+Pr/eG1oaWppZ2Fkamxwbm99+PLw9Ozp5+ft7+3q6O767+7t7O/y8uzr7PT78vf4e25teXVvaWpvb3Nua213eXxxcH18+395ef35+3p0/n7+fnV0ev78eHb+/Pb6fH368O/5/fbx7+7z9fDu7fD2+fXy9v53fv39e3F7fH18\nc/Pk6efyeHn5+f12bnR4enZub3h8/nx3fff29v778vT3/m9gaHBxc3P7/Pf7+Pr17u70+vHu7/L6+/Ty8vr+9Orsfv12+/j6f3T9/fv9enp8+vr+dHn9fH53cHh9fXdveX19f3Zydv/7fnR5/fz4f3x9+fb3fHj8+vn9eHv9+/t1fPv79354ev3593l3//37\n+nt1fvv4fHZ9/Pv8eXb9/Px8d33+8v57eH74+nxzf/79/Xp7e/j3+3d8+fv6fHZ8+/x9dHz++vp6dnr7+/92e/v7+P99/fn49np7+/v4/Xj17nR+bnB6eP54dXZ//ft6evr7+P1+fPv2+f54/vj3+nl5/vv5e3f7/Pf7fHh8+Pd+dP/+/v16eXz8+Xx1/vz5\n+n13fvv7f3b/+fb4e3V8+vH+b3l8fv59eHj99vd9evb5+Px6f/v5+3h7+vn3f3l4ffp9d3V//fn9e3379fX9efv5+/l6eH77+3h1fv7+/3d2ffz5fnj/+/f2/X758vHy+Pr29/h+dHl+fnlveH19fXd0dnn6+XV/+Pf19/z78Ozr7/Lt7e7yf/77fnxub3l3\neG5ram91cGtpcXV6eXd5f/Py+f/48u/v9Pvx7+/0/O7l3OHl/mx+dXdvf/v7+Xl9/fn2+nt++vf3/P/+9O3x9u7t7e72fP/7/nhtcHl7/3t3eX15cWlnbW5vbmhsfP74fP719vP6fn738fH7/e/u7uzyf/Lv7/Z8+vX19n9++fT0/H739vb6eHV3d3tzbG9v\nef91b3R9+39wdH55d29tc3d7e3J8+fr7enV9/Pr8cXh9//V/d3v79Pd+/vL7+X9xd3b+5Ov17/Xr93Vxff38cm5+/fr4+nj8fHdwanJ7d3p0c/5/+3t7+vj4/Ht9/Pjw+nv48vP1/H7+8/L1fHz7+vb8dnz6+v10fPr3/HZyd/v1fG58/f39/n1++vj2/nj8\n+vr9eHl+/f9ydnp+/nlzdXx+/3Z0ff35/Xx9+/Pz/Xj9+vj6enZ7/fx6c3v79Pt8efz29fp7f/v4+f19ff76/H18e/37fXZ8/H99cn77/392dn3y8/x2fPv+/ndydP309nt3+vn6/3d4//39dnr69+/6fH349fd6ePz7+3t4dn73+P52/vn9+3l4/P78fXj5\n9vl9eHR9/Px+dnp++/f9fv729vl+fvj29f15ev37fXN4f/79eXN6f/v7eHj//vd/en739vd9dv779Pp6fvn09nt++Pr5fHd5/fX5fHv2/Pn3e3h++vv7eX38/vx5eP/9/nlz/v34+3l6/vj4/nb/+/r8enh4/ff7eX34+fj+eH36+ft4e/37+X13ef30+Xl9\n9vTw9Pz+9/P1fXn9+/r/dPrj6Ozv+PP08fx4eH78/3Ry/Xp7/nZ4/vzqc2h1d+/59+vx6fT39/Pv8PH4/vnz8fl7/Pr3+f3+fvP78fj/7vHw+nz78/X7bWx6+vvx8/Tx9PT39/L08/f6/ftrXWJjb3h+/Xf48u7u9/jw7/H3/3/4+vp8evX09Pt9fvj09nx0\nfv79/3dydHp8cW12eHp7dnJ1e316c3p8fv95dXv++vjx4uPk6/V8aGBjZmNtb3Z9d3h8/vj5eXz7+vX+fH77+fh8d3779/x4ef39/Hp4+/v7fXh2fH7/eHf+ev75fHp5/vn+ef38/fp9eHv9+n53fu/vdHlvd35+e3F8/vj4fHl8+fX5eHn8/Pt9dHj9+35y\nev78+3x4fPn09Xd6+Pv4f3p6+vj7fHT++/r+dXZ9/n5wc359/X94ev3x8Pt9+fz49H56//z6e3R6/fv5enh//v55b3z2+/x6dn76+X92/vn5+X9+fvr3+Hx7+fr6/Xd8/f7+c3n+//16dnr++/11efz59P58//jz8Pt8+ff1+nr9/f35cXZ//vx9d3Z7/vt6\ndXz/+vx8e/z5+v11e/z9+3x2fPr3fnj59PDz/3p+9fH8dn/8+/p9eHb+/vz/dvr89/l4/fj5+3j/+fn7fXV3/vj9bnN8fP17eHd+9PX9e/n39ff+fvv693t3f378f3d3/vr5fHj9/fn/eXv89/n8ePz1+Pl9d3v9+3ly//v6+Xp1ffr6/3R5/vv6/Ht8+fn2\n79/g5ursfXb/e3txdn3//nlsbXB++W9+8P70evx6+/5iYmRten76fPzy7u74+O3t7e/8+/fy8v59+fr7fnt8//Xz+nd++n39eHZ9/fx9dHzv9Hh4b3l8/n5weH39/nh3ef739319+/n6/3p5/vj/cnZ+//x6c3r8/H1xcn/48/h9ffnz9X12/Pr7fHN3fP7+\ne3f7/vt/dHl++fR6eP7/+/X/cH1++3pyefz6+np0fv36/nb8+PT3fXZ8//z+dXz+/Pj8fnz69vp8ef5//P5+fH76/Xh8+/r5fHV4/397cXP9+fP3/v348vP/d/37+vp5+O13+XR1fXd+d3NyfP7+e3b8/PXx/X779/f7eH37+/l9ef/5/Htz//j3+314fvf4\nf3R7//v4end7+vj6eHf59/j+eHn9+P12fPv6+H53ePv1+nN2///9/X12/vf3/nf+/vj4fXv++fb9fPr4+Px3d/7++3t0ff77/Xp5/vj2/HR5+/r4fnV8+fl+cX35+/d8eH38+fp5fvn5+3x8fvj2+Px8/vn6fXV3/fj7dXr8+/j/enp/+Pt3efz9+395e/v3\n9352/Pj4+nl3/Pz6fXn7+fT2enr9/Pt2cXt7fn59fX/z493q5+bx7u7y9fT7d25xcnx7bW5xen15b3b7+/p+c3j8amJnaX/99Pj79e/r7fTv7e3t8vv68+/x/H359/X5fn769vZ9dXx9+/13dnv+/nl3//78fnZ1e/z6fHf+/fz0fnB8/fn9dHX+/fx5cnv8\n/f11fvr79396f/n3+Xh++/z6enZ1ffv9d3d+fvj5fnz5+Pt7fPv6+3xxcfv9/3ZyfX79fXp6+/P0/Xj++vz8ev38fPh5efn7+P53dnv9/Xx1ff35+X17/vj2+3h5/f38e3f/9vb9efn39vZ8eHv8+H51fPr6/H15evz6/Xhz///+fXV5/v3+dXj9/Pf+eXz5\n8/l1eH/8+fv+/ffx8vx4+/j8/355fvr7fHb8+/n9d3V+/n53b3Z9+/57eXr8+f53fvb393xzevz4fnb9+fb3/3v/+vn9dXd+fv19evv19v15dH349/9yd/v193t7/H77fXh3fvz7enr6fv1+en38+ft8c337+ft5ef35+Xl0fv35+np4/vr6fnf+ffn/eXl6\n/P38fPr1+/x7eH749/92//L3/Xtyev37/nd6/v39fHv+9vP2fHv39/f7env8+39ydX59/XpydHz6+H17+vf3+35/9/Pz/nl8/vt/d3X/+/16e/X28/p7e/73+Xlye379+npyePz4/HZ6+v35fnj79/X9d/b38/L+fP75+nxxeP36+H55dv74+Xt3/X7+enF4\n+/b7dnn59fL8d3r8+vl4c3t9/f7/ff339ft9+Pj29338+3z/dXP+/Pp+dXJ7/vv9eH739vZ+e/z49/t5e/v8+Xx3ff37/3d//f36fHl9+fn9d3r9/Pr/enz++PN8efz69/13e/z7/Hl8+//7/37++PP6dnz8/Pt+fXt8/nt2dPv5/n11ePf093p2+/by93p3\nf/z7/3d+//z7fnt++/X3en74+fh+en/49f5x//z+/nVydv/7f3R3/vn5fnx5/fj2+3t+/fn4e3z8+vx4fvr5+H5yevn5+nh2/fv6/nt8/fX3/nd9+/n6eXf++/p8dXz+9v16d376+Xx1//z5+317evv4+3x++f76f3p+/Pt+dXz2+P17dX349/t3efr59/98\nffr0+nd2/P35/nh4ffz+dXr7+/n/d3f++/p7efz69/19fvr29v14/vr//X53/fv6e3j7/Pn7e3Z8/Ph/dn7+/Pd+dXz++ft5efv6+X12fvn4+3n++fj5fHZ8/fv+dnv9/ft+e3v99vh8efr7+fx5efz6+nl5+/v3f3d4+vr9fHb9/Pn9e3399fX9ePz5+vl7\ne31+/Hd0fv34+nt5//v3/nR4+/X7/Hz++Pj7eHz8+/l8dnz8+/92/vv6+H15ffr39+vf4uPr8PH49PP6d3F5eHt3bnR5fH10eP769Xx4cHb7bF1ibHH//v378+zr7vXu7O3s8/Xw7+/3//b08vl9ef78+31ze/78/Xx5fPn4/HZ9+vv7fHd4//12c37/+vp7\ndnn+/X51ePv7+317fvv4+vh9ePv+fnR2/vz8d3n7+/f/eXl9+vl7d/3++396eX73+P54fvv7+3p2/vz8fHb9+/n5enh/+/l9dH39/P19/3v69f15evr9+n52ffn7/XV6+Pn8fHV7/fz+dXj8/Pr+fnz+8vN9e/f5+Pt5ef75+3l5/Pz6/nh4fv39d3J8//z+\nfHz89vl+dX/6+Ph6eP/4+H14/fv4+nt6fvr3/Xn8+/v2/3h++vf7eHj8+/t9dX39/P11fPz39/53ePr6/Xd6/Pv4fn1+/vX4f3j7+/v8eHj++vx4eP35939zffv593p4/fr5/X16/vf2/nb7+/r6efXtdn51cH59+v54dnz8+v51ffv6+318ffr2/Hp6+/j4\n/nh++vn8eH76+vl9eXr/+Pl2e/7++355efz4+X13//z3+3Z7/fr7eXr7+fb9d3j+9fl3dn39/Px9eH739v14/fx+9nx4/vv6fHV++vj7e3d9+vl9dn78+ft+fH759fl5fPr7+H52ef36/3Z9/Pv5fXh6+/n7enn+/fv9e3v7+Pn9d336+vt4ef78+3p5+vz4\n/3h4ffv7fXb+/fj9fHt/9vj7dn38+/p7eP76+n13/vr1+3t2fPz6fm94+vv8fnx8+fX5fHv4+/j9d3n8+v92efb4/n10fP36/HV4/fr6/3x9+/X4fXv6+vn8eXl++vx4eP78+X52ef77+Xx2/vr6/317/ff4/Hd++vn5e3f++vt8d/34+f18eHz9+P51fv39\n+H53fPv4+3l4/fv5f3d9/H9/e3z59/b+eHr8+ft2ev78+v97ev/39354+/v5/Hh5/fr6eXf++/f8enf9+/l6dv/89/1/e/329f13/vr6+Xx7fP76eXV+/vn8e3Z8+fn8dnz6+/t+fH759/l5e/n99vXv7XF4dm56fPv8fXd6/vn4eXv7/Pn+e3X+8vj9d/z5\n+ft7e/z5+nt3+/f1/Hl4/vX3d3Z+f/39fHp9+Pb7ef/5+fl8d376+351fvn5+Xt1fvv6/nZ8/fr4/nz/+fT6enz6+/n+d3n++f51e/z7+X13efv4+nt7/vv6/nx7+vf5/Hr++vr6eHn++/t6efr59n16/3709X95/Pv6+316fPn4/nd6/fv7enZ//Px+d377\n9vl8d337+f10ffv9+318e/r1+Xt9+Pv4/nd8+vr9d3r29/t/dXv9+vx3ePz8+vx8fPv293x5/fv5/nl3fvv6fHno3ePk8Pjt7/H+dXl9fHdvdXZz/3luff7semtvde377uzw6fDt//T49fD3ffr693d5/Pny8PP6f/b48/5+9vT39/n98e/we2xqfH338/Lz\n8u3w9Pn07fD1fmpcZGdnbXj8+31+8fDt7/f58e/v+H739fP5/n399/j7dHt/fv53/X5xfnBudnp8fHVwdnz/e253/X3+end5/vl+dnR+/v18dHd+/n11ef/++3t2d3r7/nV1fX3+e3d2ffn9fHV7/fv+d3b+/P57dP77+f93dXv4/HVzen3+fXp3e/j7/HV8\n+/z7eXZ8/fx8cnr+/Pt6dHz7+X10ev36/H57ffn2/Hp7/P37f3V2fXv9eHj9/fh8d3j/+vx4d/39+/x6e/z7+vt5evv7/Hd3/vv7eXf8/Pb+e3l8+/l9dv9+/P57eXv5+ft2e/n8+Ht3fvz5/XR99/j5fHV7+/t+dHr9/fp9e3v89Pp8evr6+P52fPr8/nV4\n+fr7fXZ4/fv7eXf8+/n+e3b48/j9efv8+ft4d3z7/Hl2/fv5/nh3ffn7fnh++/z7fnn++fv9d3r8+fl9eH77+v91/vr5+n15efv3/XZ8/v/4/3Z6/Pj7e3f/+/n9eH36/Pp4evr39394ef77+3h3/v37/nt8/fn3f3n++/n7enl/+/17dP/7/Hx7eH/4+350\n//r6+357/fT1+3l++vv5fHt8fPp7c33//Pt7dnv7+Pt3e/z7+P58e/r4+3p2/fv5/nd5/fv8d3z6+vd/ent++Pl4eP3++/55eP74+X92fvz6+nl5/vv6fXj9+fX9e3h89/l4c33+/v57eXv49/t5ev/293x5fPv5f3R9+/r6fHl6/Pv9dXn9+/p+fP/59vl+\nefv7+H53eX36/XZ6/f35fXh5/vn6e3j9/Pn8e3v9+Pn9eHv7+f15eH76+3t3/Pv2+3x5fPn3fnZ9f/3+enl9+fn8eXr7+Pj8d3z4+/13ffn3+3x3ev37fXF//vz3fXx7+/b3fnv6+vn9enn9+/53dvf5/v51eP77+nh3/Pz5+359/Pb3/nj8+/r7eXd6+f17\ndf/7+vx6dnz6+P51fv37+H17fvj5/Hh7/Pr3fHd8+vn+d3/59/l+eXr+9vt1en7/9f5zeH/5/Hx2//v5/Hh7fv72eXv29fX9eXj/+fp2dn7++358eH/39/t4/fn5+3p5fvr7fHL/+/v8eHZ9+/x+dHz6+vp/fP/2+Pp8ffn8+X316H5zdmx4e/7+eXV4/Pr7\neHv7/Pf8fH359/l8eP379/54ev35/Hl7+/f1fXp4fvb6e3d+/vt/dnT69/j9d378+fl8eP38+n51/ff2+3t3fvb3eHN6//78fHl8+vf5eX345t3p6uzx7+9/ffP2+3ZydX18em5xe3t6c3V6/fh8cnVwX2hra3R89PP89+3t6u7y8+/s7fX78/Pv9fv/+PT3\n9Xp1+n3+dXN6//x3dH7+f/59d3v89351fX//f3p2ePv7/HZ2/vv8fXd7/Pr+dHv6+Pl8dHn+/P5zeX5//Xt5ef74+Xx4/Pz4/3V5//r9d3X6+v5+dXh+/Pt5dn78+/18e/349v54/fv6+3p2e/77e3R+/fr9eHV7/Pl+dv78/ft9e376+Pt2cvz3+X53fPz5\nf3Z++vn5f3l6/ff9d3n9/vP7cXl8+Pt5dn39+v15e/z6+Xl5+fb2/Xh5f/v6eHX9fv38e3l9+Pj9eP/6+vt8eX/8+3x0f/v6/Xt0ffr5fXR9/fr6/nx+9ff5fHz7+vl9/X55+3p2e378/Ht1ef76fHl8/vr4/Hp9+vb5fHj++fn9e3n++/x5efz6+P56eH73\n+nt2//77/nl4fvn5/nV8+/r8fHh9+vp+d/r5+Pp7d372+nt1ef79/X14e/n3+nt7+fv4fnl7/Pr/dXn7+/p8dnr9+v52ef76+v18fPn19v14/vz6/nd1d/n6eHn++fz/eXb/+fh7dvz8+vt7evz4+fh5ePz8+nd2fPz7e3b9+vj5fHh8+fb/dn39/ft8d3v5\n+/t5dvz8+X54fPv5/Hd99/b4fnl6/Pn+dnn+/vt+e3n+9/h+ePv6+P56ev35/Xl3+fj9/Hd1/vz4e3P/+/v+eH/59vX7ev75+fl8eHz7+nx0fv37+3p2evv6/nd7/Pn5fnt++vf7eHv7+vh+d3v8+/92ffv49356ePz3+nh4/P72/Xh5//j6fXb+/Pn9eHv7\n+vp5efn49/15d/76+np1fn/8f3x5f/b3+3n9+vn7eXl++fp7dX79//l8dX78+v90fPz5+/58//f393p9+fv5fv59e/p6dXn+/Px7dnn9+Pt5ef78+P57fPv3+n55/vr5/Hh3/Pv7enn7+fn8end++Ph8dv5/+/x6eHz4+v12evv7+Xx5f/v6fnX++Pb6e3h+\n9/d7dXv//v58eX34+fl4dfb8+f14fPv6/3V7+vn5fHd5/Pr9d3j8+vn/fH359/h+efv7+f56d376/Hh3/fv6f3l4f/j6fXd+/Pr8fHv9+Pr4eHn6+/t6d337+nt3/Pn4+315fPv2/nd9/vz7fHl7+vn7eXj8/fd+eH37+P53fvj3+H94ff7/fnl5/v38f3t7\n+/f4fnn7+/j+eHr++/x4dfj3/v52d/78/Xl2f/v5/n19/Pf4+3r9+Pr6eXZ8+/l6df/9+/16d3v7+f92ff37+318fvn5+nl5/fn6fHZ6/fv+dn36+vd9d3v7+Pp4ev7+9+ji5+Tr6u399/j5eHNzev97b2t6fHt6cXZ7/PtvbXhqXmZobnf58vT58Ozs7PLz\n7+3u8/308e/0/n3++fn9dn37/Pp8en36+v14eP7//Xl9e3X9d3B2fn/+eHN2fP3/dXV8/v16d3Z8/312cHp//3hsaGpoaWlw8ufe3d7e397g5uvp6u77dGxmZWJfXV5hYV9cW1xeX19faXB4end3/ern6ePd19TR0dLS0tHS1djZ3eP0c2ljX1tWVVRST0tJ\nR0ZGRkZITVRea/vo3tnW1dPPzs3NzczJxcTDwcC/vr69uri3usPpSDYsKCUlJyksLjI4RGfJuK+sq6ywucLXblJFPjs6Oz5Lbs2/urm7vsPHx8TAv76+v766tLGzveNBLiYiICIkJykqLjRG17isqKaorLG5vcbWXjwwKykqMEB1x726uri1s7K1vMnndPnW\nv7ewrqyrrK+8ejkoHxwbGxweISYvP9W2qaOioqWprra/7kU0KyclKS88W9S/ubKurq2wt8HU92B/1se8tq+rp6Sjp7ZgMiMcGhkZGBkbHyxMu6yloKGhoaOnsMFOMSsoKCcqLTJE2rmvrKqtr7K2vMfWYE5Y5sS5sKuopKCgqMFDLB8bGRgVFBcbIjbWtK2m\nn56dnaCrv+dENS4pJCAkLDpkw7i0r6qoqay0wdnd2N/s5tfGtqumpKKltP4/LyQcGRYTFRsfJi9UvK2inZyen6GnscJfNSkmJSMkKjE+d7ywrqupqqyus73KzczS2c3AuK+qp6iw0lpBLiQcGhgXGx0fJTByvK6nop+enp+nsr/jPi4pJiQmLDI6Tsu3sK2q\nqqysrrK6vsHGyMW9ubWvrbhaSFQ4Jx4dHhwcHiAlLUnkzbupoaOlpKOnr7vVTTw2LysqLzg7QXPFuraxrq6urrC2u7y+xs/Mx8nP5Eg6RD4uJykuLCcnLTo5OEJvzMzGvbeztba3t7i8wMnKzNXj5+bp9HZ0cm5pZ2psZ2Rnb3NpanH17fPy7m5ZYGBRTk5V\nVkxLTlhaTk9bbW1jbe7b3ePd1M/U1dPR0dXb0NLm197c3PXq7+7weHF2enZ0b23//HVoY21lXltVVVVTU1FSVFVYWl5fY2/97fPr3NvY2dnV09TW19bX19nd4ebm6u99b3BvbGhlZmprbGhqd3h7dnVxbGxrYWBjX19dXFxeYmRjZGpyfvn78ufl4eHk39ze\n3tvm39rq3u7n5u/qfHd5e3pvaW1vb3BtbnV99/p2dv3/dG9nZ2plYF5fYmNlYWBnbnFzcXr27urp5+bg3t/i4N/f3+Xq6+js7n5++f1+d29tc3V1bWtzeHl5fH76+PT7cXd4b2tmYmRmZWJhZ2ltbm314eHg5+nk4+Hj5ero5OTrd/jx9fX7eHpz/fp4/fj3\n/nhwem/87/749enr9vny7+/48XFmbGhvZ2h8dH5rbnT8+v98f/jw6+/z6ern6Onq5+Tn7e7x5+3t9Pn39vh8c29nb2xlaHb87vn++/3s6+7yefntd373eft7c2lu+v54bXR+/Ht1dHr2fHp4d3xkc3V79/Dr7e7y7Ozr7/j69fL3fXv7+vp+dXNvavJ0aO1u\n7PNs+3f4fHhubXdubmllbW5wa2pzdnx8c3b9+Pb4fPXy7/D49/fx7vT++/f0+fp8d/Z4Xl93ZPL1b+128un8+vP28fH7fP/8eXpwZm5samttaGZvamlsc3b9fHh/9O3s+PDs9ubv9ev17Of99Pb77vV7cvl+d/5ud/14/nZwdPv4eXd7e3t6d3RrendqbGlp\ndnJscG/9f2/0d/zm+PTu+unp7fv76fnt8fnoc+frZ+RydOtr/Gl9+WbwYnvvav36cnHn/3jucn7vcXZxaHZ3ZGpwZnd2aHl9avDsZ+3lcN7rbtzz7undae3WW+PYVO3VVfvdV/bcU+b7Zej+c2ngbn7hWvvnU+B5TuRpWHRqXWDkYmbeX/Peaerl99lu1vV7\nyVPU6l3JTdvVTdv7YN1f5utPzV5Xyk76zk7y01Xq51n9YXBiTuxXUOJYVH5m+nBr3GLh5W/X7+Xo6td579Nk1fFZzGzz6nLOTNHYSM/iX9jzdtvyc878Wd5oXV5RXElZWUJ1UkjpV2JmbtX34dXsz9vl1uPW+unUce/259xe491p3tZe3M9b09tey/HaztvJ\nfu/NWlNWT0w/QEQ+P0BBTUpMeXTs2tvEydXDydDM2NXd59t59+Re7d5q3eHV3PfE0+zFyuLKwczMweVTxVk1UEwzLzY/Li4+OjtCS3Lvz8fAt7u+uLbCz7/HX/voWlJUZV9ZfHndzNTQxMbMxL7Ewra6wdvZvEYyTT0uJy02JSc0MTU1TO/3vr+4rbGwsa+z\nxsPJ/ldES0g9QEVNWVzszsXBv7m3tbOwrayxz8OvRiw9OikdJC0eHyktMjFW8syutrCppqm3rKzH3u/1QDY+OTs+PUle0dTLtbS2r62srKmmr9u/sjgoLy0iGh8jHCIlKjRGyvW2pampp6Cmsay30f5LPjE2Ny44QUZM57++uK+vrKqpqaejreLHtzYmJycf\nGR0dGyQmKTFztsyxo6OjpqKprqzHVUxFOSsxNTE9Q1L0wre6sKusq6mnpqWoyXa6SCgjISEaHB0ZIiosL0eytq6kpaGjoaq5sMNNOzU0LDAzL0BY9Ni/srGtq6ypqKanp6vX68w2KCIfHRoeHBslLDU74LS2p6KlpKWjrrq8XUI4NC8sNjQ4TWfRxbeysKus\nrKqqqKinsmLeZTAqIx8cHSIdHygtPEy+ubWlpaanqKu7u85CPDQwLjE4NURg4sW8tbSvra+urq6sqqm68t1GNjIqJB8jJiQsLzNBbsDGubK4s7a4xuXxRT9AOz0/T1vkwb+7ubq7u7i7u7i4tK+tssfcTzk4MCwoJygnLTY4Q01718i7vby8wsfS22tWVElL\nUmvb0snJxb+/v8HDwsPCxMTDwb2+zF5EPTs4NDU0MzQ4PD5KU1xseuTVzMnLycrOz9XZ3d7g6u3q4tvZ2drZ1dPPzs/NzczMy8rJ1GpVVEtDQ0E7ODk8PUFHS1FaXX/b0MzJyM7Pz9LU2uLr7O3069vT1dPZ5tjU0M/RzszKx8jWYFtdTENEQjs5Ojs+RUpN\nU1le59PQzMnJzs7Q19Xb5+/3fvzk5eng3dnU0NDPzc3LysnGxtZcWVxLRUZAOTk6PD9ER0xXWV7j1tHLyczOzdDV1OLt5+v09evu5tzd2tTR0M7Oz8zJyMbH2lpbX0xFRUE6OTo7QEVHTVRWX9/W1s3Ly8zN0dbT3efp9/Ps5+7q4uLX09XSz8/Oy8vKxsXU\nXFZfT0hHQzs5Ojs/QkRNVVhc69nVzczNzMzO0dPf7Obp7fLt7+zf4drV0s/O0NHMycjGxdVdWmNPSEhFPDk6OkBEREtQVVzp2djPzMvMzdDS0dvm6fHv6+rx9OPf2NTV0s/PzszLyMTE1VxZYVFKSkQ7Ojo7P0FES1NUWOza1c3Nzc3MztDT3uTl7O/w7+7q\n4eLc1NLPz9HOy8jHxcXZWmBeTklKRDs5ODs/QkVLUFNd5tvXzczMzM3Qz8/b5Onr7evt+fHn4dnX1tHPz83LycfCxeJXX11OTEtBOzo5Oz9BR01SUVzp29LMzs3Lzc7O0dzg4ez08/Ly6uvm29bSz9DPzMnHxMLLb1tnVExNSz87OTg9P0JITU9Vb+Dc0M3N\ny83Pzs3R2uHs8+zu/Pvv693Z2NPPzs3LysfCwdNfXV5STk1HPjs5Oj4+QktPT1d74NbNzs3Mzc3Mztba4evu9H/38Pju4NnRz8/PzcnGwsDJ+l9lVk5OTUM9OTc8Pj9GTE9PYuzf0s7Ny83Pzs3O09zn6+zx9vr889/b1dHQzcvJx8XAwtpeXVhPTk9GPjo3\nOjw8QUpNVGDq2c3Jy8vN0c/R2+dvZWt47fvr3t/a2M/HxcO/vrm0s7t5SUI6OTM2ODM3NTg/QU1k9NTLv7u8u8DJznNXTUJAPT1CS3DUxry9u7m8uru8ubeyrqytvlwxJiMeICcoMj1Mz8rBu727wcbMW1NEPENBS+/nz8/Pxsi/vsXC09/ccdXGvrSxrqup\npam7TSccGxgdKjJoy8rDzc/Nx8LY5VE4ODQ7bc68t7vE3G5Zac3GwL/P2NrTv7iwrauqqaes2jggGBoaIDxNycPf5GfgzcO97U07LjU+Z765uL3NelNi786+wMXM4tzOwrmzr6+vrqyos0wtGxccHTLnz8L3TUdZyL63xEE1LS5H1bmzuctbUk10x8S/w9be\n3NPHvbi3tba3sKynq/AvHhccIC/VzdhOPkFfvLW4xzstLjJXwra3x/xIVeLNv8XY7vnbyr++v77Avri1r6uoqs0yIxkdJSxb41xDPk7mubbD7DsvNED1w77I7Xhm2cLI029TXtS/vL3H2tXIvLOvr7CvrbhGLh8bIyg64+1SQU5eyLjB2Us1Mz5az8LF4fnq\n38fH22dXWuLCvb/I3uDLvraxsra0rqzGOSgbHigwYtpeP0FX2rm6zlM5MTpb0cfK+Fzo1MXE3VhNXti/ub/M5vTMu7OxtLq6r6u9PSkcHikzYtxaOz1X1be40Uo3Mj36zMzVaFjbxsPI70pIZ869uMLZeu/Ht7G0ub66r6m5OykcHSw4bt1PNjpkyLS45z41\nNUXTydxtVV3KvL7NWD9BeMG2tsd1XeC/tLG4vr+5rKa0OiYbHS4/6vJEMTfkvbG6Wjc1PFbKy19KT/C/t73gRjxGz7i2v+VWWM+6s7O6wryvqKbDLiEbIztVe0k4LkjAtrXRPjE5U9/MeUNF/cW3uNRGPkN6vrnB3Flez7q0trzDv7Sqpaw/Jh4dL01eSDkx\nN8q1tspHNTlX5dxhQD5mwbi3zEg9Q27CusPeZXPPvrm7vcS/tq6pqL8tIx8kPEtFOTc3Vrm3xlc+O07efE9EPk7Ft7rKWEBF8crDx9r03cnCvr/Dv7q1r6ypsDsmIiAwSEQ6ODtEwrjGXEY/SuP9SkFCTcy5u8xfR0dvzcjL097Vx8TEwcC9uLSxrqqtRiYj\nIC1KRjk1PkTJtsZRREZN4OlFO0Jbx7a721VMTu/O1ePd0svDxc7Kv7q2srOxq6rdJyQgKUdNOjE9R9a3wE8+S1bu40Y2PnrIu7veTVl4+Nzd99nEw8nLz8q8tbW2s6+qqGcjISEsTU01LT9fyLjKPzpe3ONePTNDyry+yW5M+c/qXmPqzby+0uLPv7eytrm0\nrKarNh4hJDlWPi0tVsy8wFc3QsvIXD00N/a5u9puaPPKzlFDZce9vMt/6L+1tri6t66no7kkHSUsREAwKDnBvcdmPzvlut44MjpXw7vdTerHxtZPPk7DuL/S5ta/tLa9vLOtqKSuLBwnLjc3Lyszv7niRUhO7b7VNS9E3tHQ21d8vb5tQkZcyrq/3uLBu7u6\nu7qxq6inqzscJC8xLiwvNcu300BJ2c7R+joxR8/ZT1Xhxr/HaUFL3MrO08vFv72/v7ixr6yppqdPHSIvMCwpLjfMuN49RdDF4Uw7OE/U40RNzL/Cz3RLWtDM3NXFv76/vbm0r66tqaWpNBsoMywkJi4/v8FOOXW8x1I8PUv47Ek+Ybu62Wr+6eHd7XrJur3J\nxrizs7Ovq6eksyQdMzMmHik6ab5fPEy8u1M6PlZ6Tz89XcW/3FjSwtNUU9vGv8fOxLawt7qxq6inp9IfKD4oHh8xPv/zP1LBt+4+RmJzSDo+VdnU527Mvc5kadLMzcvMwLq3uLexrauqp6k8Hzw3HhwmOzhZQ0fAttI/X9FfQTg/X/FKTc/FxNj+0sTMbdnA\nvsPCuLOwsK+rp6SuKiXeKRodLTYzRznZsr9IXLziQDs9U1w/O9vD2ejSwsTJ4tW+w87FtbO3tK6qqaenbiNePBkcKC8pOzlPtcFS47bYQklCSEs8N+vMSeS+xc3Dx8m7ytK8tLi5sq6rqqmmuidBdRwbJCwlMTU+ucVZ07LUS2JLSUg8NWvWPmG9wc/FwMG7\nycy8uLu5sq+trKmlrDEzvSEaIykjKjExv8tRy6/HVtdXUE08OFJTP1TczMrHvru7wr+8vby6t7Kur6unpt8vvjYbISckIywqfs5G16+75cXmamM9N0pLNUvhb9DGw7i4wb23wb25vLixsa2pp689dcohHyYlISclNdxFTrm1zL/E2dNOOkVMNzdPVGXUzLy2\nurq0ubm1t7mys7Otq637P780ISYnJCcmKEtJPOC4xsO/zMTOSUxnQDdGRElxfM67vLy0tbm0tbm1tbm0sq+v7UXIOSgpKSUqKCc6QjtSyMvEv8zBvdpi4WtMTEJGW1lhz8XAurm6t7i7u7u/wL+/vL19UelFNjMuLTMwLTU+P0hWZNjK1dTGyM7Q1t3c/l5s\n7+3m2tXMycrJyMjJyc3Pz9DS0NPd7/heUEpCP0A/PD0+QEdMTVRlfO3h4djOzdHV2tze7XZ96+nj3t3Vzs7NzM7NzdLV1NXT1OL1bVxUSkVDQ0A/P0JGTE9UXWr+6eLb09DQ0tbZ3uP0+/Tu7Onh2tLP0NDQ0NHX2tra2trc5Pd+ZFhPSkVHRkJCREdMUVJa\nav7k3d3Y0s/Q1Nrf3+b4eXzu4+Dl3NjU0dPX19jY2uDl4t/b3PBxaWBaTklHR0dFREVITlZcZHXs2tXW1dLQz9Xd5uzw8/l2/uje3dvb2dXV2dze3t/k6ufo497j+25gXVhNSUdHRkdHSEtQWmn27uDa1tHR1NXW2tzi8/z4/vLq7OXf3dnb3d3d3d3k6u7q\n5ujn6+rtf2tdV1RQTElHR0lMTlBUXXbq4t/d2dLR09nb1NDX3Or47uTl6evn4d7f4eTj4+jo8PDv7+3v7ufqe2ZcUk5OS0lISUxOUFJYY/3m393Y1NLP0tLU2Nrd4+br9vx98+zt6+7v6uTl6e3s5+Dj8uzu5uDf4Ox7Y1tWUU1KR0ZGSU1RV1tk/ODY1dbX\n0tDP0dfd5uzy/GxoZmdtbnJ6cl9i9e/239nd2M3NzsrJyMbI1OxjVExHQTs5OTs9QklJVWvn1s3JycnLzc/V4P5hXF5fZWlv+ufc1tfX0tHQ0dPV1dHPzcnDx9PhYFFNSUE8OTg6PUFGTFhq4NDLx8bIysvO0t13WU5NTE9SVV1s7d3X1M7NzcvLy8vKysjF\nwb7AzNxeTUhCPTk3NTY6PkRNWWfm18vDwMDDx83Q2vJfT0pJS01UXWz14tzTy8nJyczLycjIx8bBvsLO3lhJQz86NjUyMzY6QExYcN3Sxb68u73AxsrT5mdTS0hHSU9ZZ/rr39bNysjKzMvLy8rJxsG/ydf1TEVAOzg2MzA0NjtFT1/i1Mu+u7m4u7/Cytfo\nYU9JRUNITlhq9+3azsvHx8nKysvLy8vHw8LN3mpJRD86NzYzMjU2PEdSZN7Wyb27ubm8v8LL1+xdTklDQkZMVmn459XNysfHyMnKysvNy8nFv8DO2mFFQjs3NjQvMDI0PUdTbtvPwru6t7i7vsLO1+taTEY/QUdNWmz73dDLx8bIyMnKy83LycnGwMPR2VhC\nPzk3NTIuMDI2QEtY8NHMvrq5t7i8v8bR2HxTSkI/Q0ZLVF732M/LxcfHxsjKycrKyMfDvb7Oy/46PTkyMS4pKy80SmnpzL++s6+0tb3S3+dRTUI3Oj5CXe7wzcjGvr/HxszUycvLxMbEvLiwrb5mSS4tLigkJSUpPkjsw8C8r6+0s8f8bVNHUkY8SU5ozMnP\nx8rKwszq+F9e4uTp0cvFu7m5tbOvrLZLPS0jKiUhIykrSMnMtrW4tK/Bz3o8PklHR2VP78C/vb3N2s3qdWlMTG915NHZzL68u7i6ubOwra9MMS8hJyggICw0TrK9ubKzuLTPOz82OUhVROLAvbC1wczPX2JOPUNTYdnO3MvAv7y7v725ubWwrrk5MiwhKiUf\nJDZAzbHEt7OzwcRDMz87QExjXbmytrS/1troQkA+Plzb5tfHysC+ycrBv726vLeuqsAxNSkjLCIfJ0VOurPJtK+11eYyNEU+P0/nz6yut7vG935VMzc+R+rM48y8wcDF28++wMC8urKqqfQtOCclKh4eLfVdtbrDrqy+T00uOkg7OWTFuqmxvbu+cE89LTlK\nTWfP0b62w83M0cu/ysq6tq+pqkstRScjJx4fN9dLt7m6rK3WQFgwOz81N8+6uquyuba3UT8+LzxKRVjCwr65ytTHydjJyMa3s6+orjM1RSEkJB8hSVpMsbm0ra9PTlgxOjs5Pry9uqywubi+P0M+MzpFRmq+x8G7xMvCzeLFxsO4sq+oui0/PSIkIyEpZkJa\nr7C1s7ZP5E0vMj0+Q8TLuaytvb/ISUs8MTdMTW3Iyr66v83DyM/HxcC4sK2sWS5dMSMiIiU0WTfTsa61tsR+y0AxMkNAUNvStK6yw7zLb0w6OD9MRmHZx76+x8e+xcnJw762sq6wPjVnLSMjJSc7SDfKsLC6tMfWykAzOEk7T/PSurG5xLnI71FCPEZKQljZ\nzcfAxsG8v8fAvby2sK/PMklEJiMkKCxDOkK7r7m7tMXK3j81QUU5SuLOv7e9vrrFf1tPRUVJR1jb1M/Ev7+9vb+9ubi1r7k7NmIuIiUnKTU+N3+wtL+2tsDH6zs8UD44S+viyL3Ev7jD7OD0TU1OSFjn9eLGv8G8uru2srOxt0M3Wy8kJSgoLjszTbu1v7iw\nurrFWkRdSjk9Sk5cz+LVvL7LyMba2t5dX+fudNXNzsXAw765urzdR19KNjEvLy42NDU/VGh9zczDvL3Dw8DIzNPnaHRpT01VVFVjZm7e0dPQzc3Mys3Uz87SzszKyuRc+1pHQDw6OT46OT5GS1V0dNnHx8nEwsTCxc7Y0eBjXlZPT1BLTl9ufuXa08zKzs3I\nytDM0c/Hw89dbfhLRj44OD48NjxCSFBxa+vGw8jEv8PBwc3WztdqWE5PT0tIS1ttd+/ezsnLz87JyszPzsnEv8R4UNhcPjw4Nzk9MjRETE1b6uHCvcbIvbzFxM7f2dtTSU9MSUpLT3Htft7Ny8zMzcvFzNLKx8XBvrzOUtxyOTc0MS81Li5CTElVysi+t76+\nt7jOzs7rXlNHP05HP01qZfLU1crCy8/Ew8zLyMjCvr+7tL9I5dE0Li8uKS0sKj9NQU67ur6ztre1t93ayVo+Q0s9QkJBX9p73L7AysLDx8PF1se+x8S4tbbHTsrcLywwLyYpKi07PT9ttr3AsK60u7nIy+ZFPkhEMztMTlTt0se+w8K7vsvGv8jKxL+8uLa6\nfPTBOywzMyckLSsvNzxOyr/Osq20u7O2zs9uTkVAOTpEPUNu2d7Lvb+9vb+/vcTFvb/Cu7S311G/XywxOSwiLC4rLzdIbczWuq23urGvx8vD5Ug/Rzw6PEBMVWzVxMbDu7q+vbu+vby/vbm4v1zoyDMtPTIkKDUrLDhESm7Mx7e6vbS0xNG+2U1PU0Q+SExT\nXPbOx8rHvsHGv8LJwr/Fv7u7v/HexjcvQjYmKzwtLUFRRmbFyMLCwr7D09zMZEpcXUFEaF5V3cvOyb+/xMK/wMfBvcDEvbu9xnvS1zI0Qy8mMjoqL01KPvXE1cq/wMnKyMzZbG9pT0xUVlh+09TNxMHCwb7Bw8W/w8fFvr+/zGrNZzI9Qy0qPDcrNk4+P9nL\n+s29xM7FwtLd5l5NTFFXUVnw2tvKw8XGv77ExMLCyMXBwsjBzWrWXTc9QjEsOjktNk1APfzOYuXCx9nHwNjh0+VdXGFbWW3369vPy8rJyMbJycjJy8rJyMnHzOrdd0A9QzsxNzs0NEBIQEzo7n7Wy8/Nx8vX19v7dXBjXm78+uPY08/KyszLyMrMy8jMzMvJ\nyNPp+1xJPz06OTk4ODxARUtVZ3jj19PQzMvN0Nrh6O9xaWt3+OXa2NHNzMzLy8zLyszP0NDR0dHb9GFSTEI/Pz48Oz0/QkhOUlhr/Ojb08/NzM7V2tvg6ez8evTm4t/a1tXT0tTSzs7Oz9DQz87N0eNrXVNHQEA/PDw9PkFHTVBWY3Pr2tTRzszP19vd5Ovt\nfHz059/b2tnV0tDRz87Nzc7Q0M7NzNTuY1pORUA/Pjs8Pj9BSU5TWGD+49bQz83N0NXa3uPp7vn+9Oje2tna1dLR0c7Ozs3Nz9LPzczU9F9XTUVAPz47PD4/QUhOUllh/OLWz87NzdDV2N7o6+7w9vTm3trY2dbRz87Ozs7Ozs/Rz83N2P5eVUxDQT89Ozw/\nQUNIT1RcaPrf1M7Nzc/R1tje7e3v9Pjw59/a19bY1M/Pzc7Pzs7P0NHOztfuX1VNRkJBPTw8Pj9BR01TW2h86dfQzs3P0tXX2ufs6/P08evg29jX2NbRz87Nzs7Ozs/R0M7R42tYT0lDQT88Oz0/QERKT1Zfbfbd087NzM7R1Nbd5+zv9PXz7OHc2tra1dLP\nzs7Pz87P0NPPztPkaFlRSURDPjw7PT9AREtRVl9s7tzTzs7NztHU1t3p6/L6/vbq4Nza2dnV0s/Ozs/Ozs/S0s/O0uJoWFJLREE/PTs9P0BES1FWXmvw3dTOzs7Oz9PW2+Dq7/l+/e3k3dvc2NXT0c/Ozs7Pz9PTz8/R3XNcVk5FQT8+PDw+P0JJT1RYZfXh\n1s/Ozc3O0dba3ubt9H3+6uHe3tzY1dLS0M/Ozs7R1NPR0NHZ9GJYUUhBQD88PD0/QUdNUlZh/+Xa08/NzM3Q19ja4+31fX3u5N/f3djX1NPTz87OztLS0dLQ0dXgdF1US0RCQD47PD5AREpPU1ts7t7X0c3MzM/U09fc6fZ7ef7v7Onk393c19HOzczKycjF\nxMK/wNN96lM9OTk1MDMzMjlDRUjz0dzNv7/Hv73J1tLoV1pWSElVVFfr2tfLw8fHvr/DwL/Fx8TGx8XBymve4zk3PzcrLzguLjtCPEzf5tzJwL+9vMTFyNfv61tMW1dSYe7m2cjIyMTAwcC/xcPEx8rLy8rD42bQQzVBPCwtOi8tOEA7RPLl4M/DwMLBwMHO\n1Nb2WFRgVU9k+e/cycnKw8DBwr/EwsPGxsfJx8HQWtBfM0BBLSs5MCs0PDo+Wnjm3Mq/w8e/vc7TyelTYm5PTWx7aN/MzM/EwcPGv8HFwsLJysTIx8TvbMw+N0s2KzM5LC86PDtKX37n2MPCysO8xtbI0mJkfFpOV3RrftfM0MvBxMjDv8bEwcjMx8bJxsxn\n1e42QUUvLjoxLDU8Oz5RYOnpzcLJyL6+z8zK62f4ZlFWZG1s5NTOz8bDyMe/w8fCxcvJxMrJxd//zEE5TDgtNDgtMDo8O0ha+erbxcbKwrzGzsrWam12U1Vca2d+3M/PzMTHx8O/x8XDx8nGx8vF0m3QVjdGQC8vOzAuOD46QVZu6OXLxcfIvsDQzszfYWpp\nWVBq+WXsz8vUyMTFyMDDyMXFyczKzMfNeeviPDxJOC42Oy8yPT89TWjt7tjKxcbJwsXP1c/lZGz9Zl735dzVy8vLzMrLzM7Sz9PX3Nvc2tfeampcR0dFPz0/Pj5AREhNWF5ja+7h2tbTzs3O0dXZ297k8vn18+zk4+Xd29va2NbT0dLU19bW1dTX2+Z1YlZL\nSUZEPz4/QUVITE9XXmr75NrUzs3O0tPV2dzm8/Py8e3p4eDc3N3c19TT09bV1NbV1dXU2edzX1RMSEdDPz5AQ0VITVNaYGv44NjTzs/R0NTX2+Ho7/L19/bp4t7d393Z1tXU1dPU1NbZ2NbS2OptYVlNSEZDPz9BQ0RJTVJbXmP33tnU0c7P0NPZ3eDl7fZ6\n+urn49/e3tvY1tbV1NTU1tra19bV2ul9Z1tOSEdFQD8/QUZJTFFZXWn14NvWz87Pz9Ta297k8nn58Ovo6eTf3drb3NfT1NTW2NjY19bX1933bV5QSklGQj8/QkVJS05WXWV67t7W0M/Pz9DU19vj7vH3+fL27uTi3+De2tjW1tjX1tfY3NzY1dbf/GpfVEtI\nRkNAQENFSExPWFxffOfc1dPQ0M/Q1tvc4ent+X706+ni5ePc29rb2dfW1tnd2tnb2NfY3vNvYVNLSEdEQEBCRkpNTlRdZnnr4drQz8/S09PX2uPs8/b79/f05+Pi397c2tfV19nY2NjZ3NvW1drubGZZTUhGREFAQkRHS09VXGFv7d/Z0s/Pz8/T19vg5+31\ne/z38ero6urf3Nvc2tjY2Nrc29rZ19fY3O51ZFZLSEhFQEBDRUpNT1RcZ37q4trTzs7R09TW2N/u8/T7+Pt+8ubi5uXe3NjW29vX19nY2trOwst42N9MVUg6P0Y8OkBFRVpmVOzK2tbEzc/H0HLi5k5OX0lLaVJcztPbxMLMxcPPysHP08TJy769vrW2ZkDZ\nPikvKicyLik1cF5VxL+9r7fPv7rrVl9LTWRMP2vWauzS0cbA1NfDy+fk5+PLzNTFurq6t7WyrrFkM0s3ICMgICwuKzLSv865t7ixundk1VY/RUdN3txgz77DxsjNysTaXe7qcXJq+8q+wb+3tLOytLSvsU8pNi4eIh4fLTo3Ob+4vbC+yL3BUT5PQkhnUmDD\nu8K9vcbAx/hdcl9ZYVNc3Njbzca/urq9ure4t7W0tFsqMSwgJiAhLkNIQMbDvLHE2evNW0hOPVXbz9LFu7+4wN3f7mxRWE1V4/Tv3dHMxMHAu7q7uLm4tbOxuEMpLSYiJiAjL09cb8PPu7fD6k9lSlxVRVjdvr+5u8G+xc9YT0lIZFxn99bOzMjTz87Mx8bE\nxL+9ura0r6/sLCwnISkjIytB+d671Mi9vsdYXj9R915yY8nGtrXEyNzVdmpNQFJf2tba3tvJzczW5dbLxMXEw763s6+utT0qKyAmKSMoL17bvLrjx8/B2V5OOmBo1dbdycmzuLvRVmhPbE9HTFXPzcjU3tfVydHX2tjKxr/Avrq0rquzOSgnHigrJisvZdKy\n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\nJzZvva+sqqmrqqutrrfHZT4yLCssMj5az7+7ubu+xMzR19znc2FXVFZbfNTGvLezsa+urq+1veU8LCEcGRgaHiUxUsCyq6enpqeqrK+2v9VSPDQuLC0vNkRdz7+7t7e5vcPO2ultZF9eb+jZzsa+urazsK6wtb9mOyshHRsaHB8oM1DJtayqqKepqquusrnC\n21Y/NS8tLC4xOUhxzb66t7e5vMHM2uR5bnFv7NrQyMO+urazs7S8zWI6LCUfHR0fIyo2Tsy4sKyqqqusr7G1u8HM7FVEOjQwLy8yNz9U38e8uLa3ub3Ez9zrdXj959TLxMC+u7q5u7/N9Ek4LigjISEjJiw1SNq+tK6sq6utr7S4vcTN2/dbTEM8OTc2Nzk+\nTW/Qwr26urzAydXf7PTv5tvRzcrJxsPBw8bN32tKPTQtKykoKSsuNkNuyruzr62ur7K3vMHL1d3pfGpbUExIQ0A+P0VLWf/c0czLy8zMzM7O0trb29vc3tvX08/Q0dTb6mJMQjs2MS8uLjA1PEhkzb64tLO0tbi8v8bL0Nrk8HBpYl1UTk1LSklKTlRfdu7m\n29PQzs/T09bZ3efp6+70+vvw7uvs+31yYllQS0ZDQD8+PkJHT2Lq0MjCwMDBwMLEyM3R193nfWxqYl5bWFZWVldYWF5mbn778ubg3+Lk4eTm7Pp6eXd1bmpwdnz+//727/d9bmhqZ19cWVpbXF5gbvvr4+De3NrY2NvZ29zd4+js7fT7cGlrZ2ViXl5iZGZk\na+/i5uTt8erk5/Hv7u/x9vv//ff3+3r49Pb1f338fnRqZ21cWFxaXmNpbm9z++/q5uXj393c3N/e3d/f6O3x8/l3a2xsamlkY2VqbWxrdn749fL07+vr6/L27vDx9X7+9/b7fn3+f3t0bGpqa2liYGtsYmdnanT+9PLw6eXi3+Tk4eLj6e3r7fH8cmtsbGpk\nX2RlZ2lqa257+vf89ezr6evt6+rr7vby8PP2/3V5fn16bnN5eHlzb29ydHNsanFxfHprb3T8+Hz27uzq7O/u6+rr8/jy9vP7enl8f/56bnp9fv53d3z9/Hp4+fr3+Hx6/vn3/Xf+/fz9e3Z4e3p4bW1zb3RvbHJ7fv1+9O3r6ezs6+rp6/X08PX2fnh0dnl2\nbWtzc3h2cXX/+/l9/fP08PZ/fvf193x4/Pz6/nR9+/v3fHR//n5/dXF2e3xzcHl8f354eP308fh+9fHv8PX49O3v+Hx9+Pv5fXZ6/v98dX38/ft8eHr/+/x3e/v7+H59ffz5+npxfH18eW9veHh5cnR+/vn9fP/28fD4+e/v7u/z9vfw8fl5/fr9/nZzeXt9\neXV6fXj7e3P//Pl9dv37+fj+fvz2+Pp4e/v+/HlzdH59dm51fXx+dXR4/fn7fH719PH1+Pbw7+/5/PTy8/d8e/7+/XR3/33+e3N2ev39d3b6+/39fnz9+vp+df78/Pt6eHz+fndyenx9enRweP/7fXT7+fXy9/f38O/w/33x9fb9en39/n10e/7+/Ht1efz4\n+nj/9/fx9/n18PLy/Hz5+/f/bW9wc3BrbHNwdHRucXz8+X598fDv7/Pz7u3t8fr39PT4fXh8fn51b318fHxzcnR9fXhze/77+fr/+e/v7vf5+Pfze3V3d3Vxa29vcnZubnV6fH19fu/v7+/x8u/s6/D77/H09Hx6/359cHR6dndxbW5wdXJqa3X/+vX17Ojk\n4uPr6+vu93ZubGppZF9nZmdpaGxv/vv5+O/n6OTn6enn5+75+vL4/nhudnt6enN+9/Py9PTy8e7w/vTr7e3y8PDq6fH7dG5oZl5aWltdXFxfZ2t3f/rx6ODf4d/a2dra297i4+z9cW1ua2pfWVhWVVlecuHY1NbX2Nvg5ubc1s7Kx8bHy9d8UkU+Ojk5Oz5G\nTVZaXl9dXmjnzsC5tra4vMTO3ftoX1pUTEdDPz4/QUhXf9vQzMnIxsXFw8PDxMfJxsPAwcTL8E49My0sLC0vMjY8QktZ7Mm9t7GvsLK1ur/Iztz9Wkk+OTY1OD1HXOPSzs3My8jEwsDAxczT2dbLv7q1sLC4w+1ANS4rKScnJiYpLTNB9ci7s6+urKqqrK62\nw9dhSkE9OTMxMTU8TGrizcjEv728vb2/ys3My8a/vr24sq+1w95BMy4qKCQjIiIoLjlO2r+7r6inpqirsrm+11xEOzEuLzA0O0BLaM3CvLm6vb29vsLGzM3JwL67tbCussXsTzoxKyYfHiAgJSwyP2a7sKynp6epqq27ymtIPjo2Li80O0RW6t7Hu7m6vb7F\nxMTP4N7NyL+6t7Cts83sXTwvKSQfHyQkJiw7WNG1sK2ppqetsLjJ608/MjI0MjU6RVHix8O+ure7vr/Iys3P1dPFvbezr7jX091ALikoJCMlJSgwRVP/u6+trKqssbO60VdNRzg1Njc6P05a38fBvr26vcHDx8rOzc3Kvri0tcLey+Y5LS4uJiUoKi43Rk/W\nuLS0sKyvuLrB2FdOQzs9Ozs/TldY2cfFxL6+xMTGy9DPz9LKwr25uM5/w3Y2MTkzJyovLzA5SlHNvr+6sa+8u7nD52BvSkFCPj5KUEVaz9Hay77FyMPGycrL0MvJzcm/wXJgz1I6OkA2LjQ3NzpASl3S086+ur7CvL/N19n6WVdOSEpSSUhifGd50c/Sy8vK\nx8XHxcHDwLy+0unQYz48PDYvMTM1ODtCWOvlzr68vr27vsPJ0N77XFJUUUxNV1xfbHbn3Nza19bb29vg6+bm4+Tp6uDf5e7t6vV+ZFxfWlFSUk5OUVNVV1pean/99+be3dzd3tzd3d/n5+bo6ezv7+rp7u/z6+vp6/Lu6+rt/nv7/m9mZGNgYWBcXmBgZWZo\naXF+f3999O/s6+/w6urq7e3q6ufr8vHt7u/4fvX3+fz/fnj+/Httb3RydmtpcG9zc3B0ePz3/3358fD2//Tx8PT4+fz29fl6fPr8+P16e/r4/Xh++v35fXl7f/79dnJ8c//+bX59//h5ffv18PL2+vHw7n1+6njr+3n6dvR9fXD+fnh8dHh3/v58cXV/ff94\ndHz8/H95+vb19Pt9+/X0+Hv69vb1+vv89vT4d376/fd9dnh+/31yeH99/Hxzef38/Ht5/fr6/n7/+vf3/Xn59e/wdnv/9vd4e/r6+vt4ef77+nx1fv79/3t6ff37fXR8/fv4fXn/+Pd/evj49/Z+fH/89vt3f/z8+f9/fvn3+Ht2+v36/nZ7/v7+eH35+ff+\nfnx6/vl4evr8+v78fv349v13/Pr7/Hl5/f39eXj7+/j7e3j8+Pl8eP39+fx+ff73+f15fPn5+X96fvn5f3f7+vr6fHh6+/r+d3v7/Pp/fP/39f55ePv7+f16fPz6/nJkdOBn9Pt17vry/f789vX7f//89vV9c/n7/f5zcf1//nl8/v71/Xt1+/n7/nP8+ff8\n/npk9etw7/v47u369vbyfVxrb1x+dnP/8e7j8Pji9O3u5Nzq3fXp8Xz283h7dmn9eHht+nN0/XFze3D/+HlldPtnXWtle+968+7x9+Du7+d/3/Hv73bfeev5cup59PRn5nn9+3TpZ+Z0fPtl5nV58nR3+elp6nzz8+74d/Hq/u33Z+R8b/p4bXL+d2J7bWv4\neWPub3n7bPZm5nT9927q7G/pbnxaaf9q7erk6OP42+7r6vJsb95U2lzz7GfbXNln+d5n6GfoYt1tX9lk4nPtfuV1/N9b5XXxef/3YN1tZXz9YXv4VOhoXf7tX2rkZvX4/W3p5V3eaXLsbPtv9/j37Hzo32rbZ+7kZuZs7Xt9Z+PyXd906Hjv+vzo6f3j+e3g\nZ+xQZ+lW9W/leXB+5m5peW9g+VVo/fNce+Ju7uv/7vHz92nzX3TvW/d8X+du7PFy1fbw2nTh6XnkaO18XtpZce5gbm5vVn3ycGnr7fDYYNvo7Pfo5u1y9+v7e13qbPtiZu78ZXXeWPT9Xe1ual/uXX7/Wt//eelv6tp24Pff5G/Z/vL3fOHmWXzTfmV12PB7\nbO7ZXF/r415jdmB9ZlFw9m1X7P5d82t6YOhg4/Zv4u3jeNvt6efl3+vuat35bGJjflhie2Zuavndbu/50eZn2t7fdN7p93LhbG/fTd7uWf1r3ll15F7jc2ro+HRl5Xlub13kYFX2+mBa6u1jdXH12XZs09j65tzW2u3l2fdjf3dobmlWd3NaaPpjbd94aNvd\nec7ha9v6bOfcXHrXcFbe6VnwY2Vf+lhY1FppdvfaWXd+5Gtl333c6ebc1udky/Va7vJgcmxg7eNbV8lcVNRx+Gh+aPnVRuXPUmHu323kbHbUanD6zWRq02beZfnqZdpY8dlgYurYaGDi+v3vVnvfXFnw+lJoaVV1XVJ97Fpe9/1v8vlr2t5k1tfy3OLb5+vc\n6+3pbuV+bd5x83lp/e93Zvfd/Wz15X/s8VziflX+c2Vh/ulo7/hd4/JZ/X3rbWrYfO70+uBybXb5+WZm/f7xbHXj/fZrbftzaW/o7Pvv3uDc8uvp//Vlffxrf3F5eGh5dXBnaXj8bmH79HN98fP67+/t6OTs5Nnm8ePm7fX7e2/4cVtt/2FiaGhjYnNxZ3Nt\nbOr6bXzs8W7+fXN8b3j1/f3/4t3t39jX2tjg5t3h93R/c2BcW1hVVVVSUVJPT1RRTlFYXF5jeevd2NbQzMrJx8XExMXEw8fJyMjKzM7OzcvO1VlBTEEwLS4uLS0vNDxNV3zIu7m6uLe7wcrbdFhPS01YWmjp0MnGw7++vr/ExsbKz9HS0M3Lx8hbQGBNMC0u\nLy0rLzA2SlJb1by2ubiztbq/y+BfVkg+QUlLTmHay8rIw8K+vsPHyMfJz9LOy8jGw72/YUz9RjIuLi8sLC8vN0lVX9q+tbi4tLa5vcjeW1VOPTo/Rk5Ze9nMw7/CwL6/wcfLzMzNz9HOyMPAvsdWTWdENC4uLy0uMC82Rlpw58e6ubi3uru9wM5uW1dLRUNH\nTlp+5tvNxsXGyMfIy8zS2dfU1tnW0c3Kxcf8S1JOPTYxMS8wNTU0PU1r69jEvry4uLu9vr/J331eU05MTE1Xe+be2dLNzc/R19TQ2eLn3t3j5uXf2NTPzdxaUlZIPjo4NjU4Ozs9R1n03MvDwL27u73AwsbP2u1hWVRXV1Vfb3fs4t/d39rZ3dze4uPp6u71\n7e7z6ube2dPhWlNVTEdAPTs6PkFARE5o4dTKxcTAvr/Dx8jL093sbmFeX1tYYWRpdXr79u7o5url5efn7/jv6u/39e/q497a1+RiXFpPSkZDQD1ARUdMU2vk1srIycfFxMfKzM/W3OX+a2RoY2BhZGtueHZz+/P38/jv5/Ts7O/x8Orv9+7o6uHc3fdeXVtQ\nTEpHQ0JIS05VYP3f0s3NzMvKyszOz9fb4Oj7b2xpZGdoYWVtenlzfe3w8u397unq7Pfz8O7x7e/y6uLd3e5hXV1WT0tKR0dMTk9WYvjo3dPR0c/OztDR0tne4ent/nVyb29vbWp1eP98fXT57/f5/u/v7vP19ffq7fP17enj3+R4YWBcVk9NTEpLT09VXW35\n69zX19TS09TR0tjf39/o8/36dHN5dm1rd3v9fnj+/O7v/v7v7uvyde/r8/X69+3q5+Tub2FgXVVPT05NT1NVW2Z1+uvd29rW2NjV19jb5N/i5+76/fn1/nxucvn6/Ht/9/PveX3w9PT4+X3++vL3efrv8+zs8HdiY2FYVFJSUFFVWFxkbX/v497c29vY19na\n3+Dh5eLr7/rz7vr/eHz99X59/Hzv9nh7+/r2931yePr0+3n1++/u8e18aWZlWldVVVNSWFleZG119ujg4N/d2trc3N/i4OLl6u/v7u3u+H307fD3e3z3+/t1evh9fHVuc3N9/XB/9vnx7uzu6nhmaWBeWllYVFhdXWBkb/nx5+jl4N7a3N7k4d/f5err6urt\n8nn79/f+e3Z5937+c//4+fH7/vvs7317fPr0+X76+PLyb15iZF5cWVZWW19eXmdw+u3s7OXe3dvh4N/g3uHl7ebm7e1/+fDx8n17/Pf1eXZ7fvZ+dnt6+/L9fvz98/H+dfr69u5yZ2hsZl1ZWFlbXlxdZG5+//7y6OPf4uDf4N/f4+bo6OPs8e737e79/vL3\n9Px//fzw/3Z1//Z9eHf9fH13dm91/X5+fPP0bmprZGFhXlpbYmBhZmpv+/Py6+ni39/f4uTf4eXm6efp6uz0/vXk3eDq8Ojr931zdHh1b2xtcXlwbHB6d3V8c3Pu9PPm+Gdsbm9pZHhtc2xpaHT+/v757Ovp4eXl6eXf4evn5+To7fnn6ejs9u3p7e78cWt9\nfnf+7vf8+XtpW15lZ2ZufPDf+Xry8fR2dnZzbWxpZWdra2trbnh79vPz7unq6uvr5ubl6+/u6+7x8vPv8/B+fnh9/Xh1cXZtdG5vcnR8d395e3n593Zzef5+eHV8bm5tZWJgYWRiXWZoaW9ven777uvv7+rm5Ojr6OTm5+jo5+no9fPx/vH5cnJ1dHx0c3h9\n+P98eP38fXxxcHl+eHFye3f7em5sbnJuZGRnZ2lmZWhxenV3d/nu6+zv7Onn5e3q4+fp5+zy7uvt8f768fH4+Ht69H9+d3V7eX1+bnb//3Rtd3d3eHNydnx8dm5xb29xbWtoa29wa210df3+//v17urw8+vt5+jt7+zo5/L27erq8fDw7/b493d1fHl1d3R2\ndvp5bnV5eXxxbnZ8/X1zen18d25ub3RvbWttcHF3bmx3/fr3+fDs6Ons6+3r6Ov39e3t8fPt+e3s9fT1+PTz/Xd1dnh7bG95fH56dXT8fnp8d3x+/X5zb21wcGpna21ubmtsb3d+en308u/s7u7n4uDh5Obi3+Xs7Ozv9H1uc3Zycmtra21wbmlsbW9zdHN6\n9e3s9fHr5+ju8vnz9v5ybG9ubWpnaG1ta2pzffn6//789vX2dnj8/fDu6uni4N/i7evt9v55dH72+Ht5/n96dW9pZ2ppaGlxeHz9+/769O/u//nu8/X6eHR3dG9rcHZ1eHJscXz8fnR8+/Pw9fXw7uzt9PPt7err6+3s5+r29/D3+3dtbW5tbGdkaGtvbm92\ne/bv9fft7ezs8vX29f5zb3NzdXNtbXF4fXh1//7+/P39+vHu7vbw6uro7PHu7O/3fv78/Pj9fvv07/X/+/36/Xp5c3l8fW9tdHJybmpqb3N6eHj19e/z/Pv28/h6d/98/X56ff749v159/Ly8vb48+7t9Pfv7u/2fHv+/vx4cXh4fHp3fv338/h8fvv9f3Ju\ncXR3c255/vv3+vv59fH1ffv2e/96eHZ4ent1b3l7fHl0dv/6+vz37uvo6+/t6+vr8/Xw+Pb7fHp8eXpza3N1eHVvb3N5eXRyfv79/Hhxffr5/nr59fXz+fr6+fj6dXp/+t/j7O307/p0cHb8/H53fv78fnt1f+ru6u3tfGh0bXT9+vn+e3v9/X91dX59/nlz\ndnv9/Hp4/v35+/3++vT2+X738/Pz/P/39PtlX29scfvu29vh5eXm4efp9Xvyfn1ybG9rcfh7dF9bZmZrZ214en54d3349/d9ffL18vL59nz94t7n3+Ll6evr7On0+vn2fHh0aGltbW1obHB0dWxsaXJ9aGBncvv18fPw6ujp6u7r6Ors8vj59/h7efj6+PT6\nfnt+fntxcHN2eG9sbnZ4d291e//8fXz99+/zfvn49/j+/Xz6+Pl9d/19+355e/36+vj89PTy9X17fn3+c2xxdHFubG92/fv/eP328/T+///7+Hp39vn4+X13e319enN6//75fnr79O3t+O/q7e/1/f76+31ye3t3dnJvcvzy93/59377/Xx+f3z/em55fX9+\neHz9+X9zdX57//93ffr39fz8+fbw9Pb9++7w+Hj89Pb3+vz37+/w+PTu7u59ZF/3c19y/nd+e/Xr8/7x6ntz/fV9bGlna25nYmtvbHZ4dH349Pf9/vv38vb27Ojn4+d4e97p9t/h6OTp6+Tq++ruamp2fHFuamtsaWFhYl1cXl5ZW19hZWVkbnz8e/zs6+jl\n6eXj393d397c2tvb3N7d3t/l6ujr6/T78+/s6u/yfvxxWlZRTEpIRENFRkhMT1Zm++Pc1M3LyMjJyMnMztTc3+f1dm9laG1saWx3d/Px8+7h4t3a3dnU1tXS083LyuJ913JHSkk8ODg5NzY3O0NESGff3c/Bv7+9vLu8wcTG0Ob2Z1VSUk5OUVhn/v3i0tHP\nysnLycnJyszHwsK/wdDYz2c/Qj4xLy8tLC0uMjc3QGZ/2sG6ubWxsbK0t7e8y9jpWkhBPz48PkRIS1zj2M/GwL++vb2+v7++v769v83jz145QTwuLS0sLCstMjc2SuJ+zLq2tLGurq+ztLXD0NNpQz49NzU3OTo9Rlps7MzAv7u5ubm4uLq7u7q7vs7ozUs2\nRDUrLCwqKiotNDU4XPh+v7e0sq6sra+xr7fHxtVPRD87ODM1OTc8Sk9Y28rFv7u5uLm3uLu6t7q8wN/U1zk8QSwsLSoqKSswNDND81zMuri0sK2srrCvsr/Bx2dORD46MzQ6NThDR0t51MzFvrm4ube2urq3uLy8w+DOfDdDOysvKyorKS0xMTVNXV/Fvbiy\nsK2tr6+vtr++0GJWQj06NDc5NTpERVD13c3Evrq7u7e4urm5uru8wd3R4jpEPi0vLCssKS0xMTVJWVXKv7m1tK2ur66vtr68ym5fRz88Njc4NTpBQUtq68/GwLy7ube4uri4ubm7wuDN6TlFOy0vKywsKC4xMDZJVFzIv7m2s6yurq2utb69zWxWS0E4Nzk2\nNTs+P0tn6djLv769ubi6uri5urq7vtTXyz49Sy8vLisuKSwyLzJAV07bwry3tq6usq6us7y8v99pWEY7OTo4NDk+PkRYb+rPw7++u7i6uri6urq6u8njx1g5TzYtMCsuKyo0MzI7U05sxL+5uLCtsq+usrq7vNN2X01AOTo5NDc9PT9PZfHWx7/AvLi5u7i4\nuri5u7/XzM47RkktMi4rLSkuMS4zSE9Ny8C8t7Str7Gtr7W6usPiel1FOjw7NTY7PDxHV2T5zcTDvrm6u7i3u7y6u7zF18VeOlQ0LDErLSsqMS8wO05IZcPBurevrbKurbG5ubvO8GxNPzs7ODQ4PTw+TFll3MrHxL26u7u5ury5uby/z9PHQD9SLjAwKy0p\nLTIuMj9MR9nEwrq2rq+yra6zurjC2fpeTTs7PDU1Ozo7Q1JebtXHxcC6u7y5uLq6uLq8v9XL2DpOQy0yLSwsKS4vLzZKSU3JxL23s66xr62vt7m6y9p8TUU7Ozk0Njs6PkpPY+HNxcS+uru7ubq7urm6vMLZx+I5Uz4tNC0sKykvLy82TElTxcS9uLGusa+u\nsLi5utPddEpEOzk5NTc8Oz5MVmzczcS/vbq7u7m5u7q5u7zG3MRVOVw2LTEsLCorLy8vOlJGdsDBubWvrrCurrK6ub7Y5VlLPTk8NjM5PDtET1t808fDwbu5vLq5vL26ury9yt3EVTlfNS00LCwqKzAyMDlRRXbAxLu1r66xrq+yuri95O13Rzs+OjU3Ojs7\nQ1JeddDIx7+6vLy5uru7u7q8vMbhyWA5UjktMSwsKysuMDE5VUpiwL+6ta+ur6+vsLq7vdn1XUk9Ozs2NTk8PENPXHvTx8TBvLu8u7q8vby6vL7C28vbOkpCLTEvLCsrLjAxNUxPUcW/vbevrrCvr6+4vLvQ+WlOPzo7ODU4PDw/Tl5x3MnEwby7vLy6u72+\nu7y9vtDeyUU8VTEtMS0rKy0vMjM+XUrivb25sq6vr6+vs727wexiWEU6Ozo0Njs9PkhabeTMxMS/u7u9vb2/v7++vr/A0NzKRTxVNC0xLisrLi8zND1jUe2+u7qzrrCvr7Czvb7D6FtXQjk8ODU4OjxES1jr2s3Av7+7u728vcDAwL++wMPU5ctHOEw1LC8u\nKyouLzQ2O2h65r62uLStrrCvsrS8xszZUURLOjQ6OjY7P0RPYuLNysW8vL68vMDAv8XIw8HBwc59zfU4Q0ItLTEtKi0vMjk4St7pz7izubCsrq+ws7i/0e9jQz4/OTU3Ojs+RE9s8tPEw8O9vL6/wMTGyMnJycfCv89vz+s6PkMwLS8vLC0vMzw7Rd3Qz7ux\ntbOur7C0ubq+0PTrTT1DPDc6OjpCSEpw293JwMXCvsLFxM7OzNXWz9DNxcTWdNHjPj9ENS8wMS8vMDVAP0Toy8u/tbW0sbKytLy/v81mXldEPj48Ozw/R09SbdbPzsnFxcTIy8vS29fV3+Ha087My9nrzd5HR0g8Njc1NDc1OENHSGvNy8W7ube2ubq5vcnL\n0W9WTUlEQT9CSEhNXnzu2tHNzNDLy83W09Ha3eHg3uTf2eDa1s7RfGjeXERIQzw6OTg6PDk+TlJY5s3Iwb/AvLzAw8LI09jhb2NWTlVUTVNfX2v4/eDX4NrV2t3Y2dzf7Obf63b38/z5/Hn18fbi9ltYYVBGRkZDRENDSk9PW/ju6dnSzszPz8vLz9HV2Nrg\n7/TteX72/Pl+8+rm8e/k4uTn5+nm7fz09Xf0fHpqaWdmaF9eZGRiZWRmcm5ual9kZvt5aGpgZGdiYXT++u/q4t/e3uHf3uDf3eHl4N7f6err6uLn6+/z8evn7+jt4+7vdm/vfWZsc29nYWZTVFpeX15ha3VxcHR5enX/cnhv+n33//367fp89vDu5+vk8uXj\n7N3z5OLp5fL99Pv1cm3xbvt1b31we3j9dH7+8vz7cHL2anBpbn1w+XN9c3f4cHZ0eW9wamVpbmxta2f8efl/8e/q6+7r7+7q5+v16/Hq8PF9+fl+dmtqcmxoZ2pybXd9+3v+7PXwd+/s7vB69fny+P30+vR/8nZ9fPN9fHV0/3J7c2xy//12cf128nX09Xvz\n7+xv6/Xv7/l39/1+eHB3d/9+dfpt9XP8b23+bP5sd3Bt8Pnx8+rp7O768fPp/fL//fP+9Xd2fXv9a3B1//9y8Hf28fTwf+746/x++HH27nh2eP3ydnl8+X56/H93fP7y+Xn68fPycPn58/17+3zyd/Vr83Xye/V4+Pzs8m30b+tsfnNt+GLta3lv/v92dmnu\n/Pd76fHn7ufo7e7q629v/nJ+bHdnbnlne2r2/fl59W9x9n35Zf/4de5r9Ph99PX7eef75+388Ovr5vbw7v7uZHZpZm9hb3Fsam93Ymhp+f1rfvvo8uvt4erg5+3o7fP5fXV2dP1qcWh6avFsfGpw8mxpbnN4cPl6e/X06ez05+nn33bo++ftfvd39W9v+Gb6\nb/3/ae9n6HH382zha+Bh5GjndPvyX99d2l7ne/PoZuhi2mHsYHptbHJhflz1W/xtY+xj4nN4ffvmd3B7+3z2/u/sfOTz6X/s7XV+917rZnb4ZeR83ejn23jb4efq8Nrp4OLx5+33eHJqa2tkZF5kYWFkXWFiZWVjYmNpbW1rcnj+9vX28Ovp6O3q5ePj5Ofo\n4+Pl6+vo6eru9/j38vV+evz6+vx9ff35+3t2fP5+fHFudHd1b252eXx5dnF2d3x+dP59/f9+e373+Pp5fPv5+n14ffj7+nv89vT0/H7+9/f3ev77/Pj9f3n/+vt5dv7++/13efv7+n17+Pf0+Xx8+/j5fHn8+/n7/3z8+Pn7eP7y4t3m7Ozu8vf8+vn7fHNw\ndXt6dnF6ev7+fHv98fb7dnN+cGNjZG3+/vt/8+7s7O/x8ezr7vjz7/Dv9fj79vP2fnn9/Pt+dXZ+/v94evz9+vX3b3t/fnZ2/378fn14fPv5e3R+//z9enZ9/fx9d//8+ft6eH78/H1zfv78+/58fvj5/Hd8+/v4f3h6/Pp+dn79+/t7d3n9+/54efz7/33+\n//X6+np4/fv3/Xd4/vz/d3r8+/n/fHt++Pp7ePz8+vr/fP72+n52fPz8+3d3/vz7fnn8+fj4fXr++/p+d/7++/z+e3v7+Px3e/37+n54fv34+Hd9/Pf5fnx5+/v+eHr9/Pr+fn35+Pp7e/v59vt5evz5+3h5fPn5fHp2/vr7e3j+/Pr8f3379vn9e/75+fl7\nd377/Ht3/vv5+3x6fPz4fnz6fvr+/Xx9+fn7d3v++/p9dnv9/f14f/n39/17ffv3+3h7/Pz6/Hx7//n7enj+/fn+eXj8+fl8fPv59f54eP/6+3t2fv37/H97/fj5enr39vL7fnp++vx6dv78+/15dnv8+392fP37+v59/vf3+3x9+vn3f3h8/ft+dX/6+fl+\nenr9+Px4fPv9+fl+fPz5+Xx3/vz5/nd6/vz7fHr6+Pb4fnj++ft6eH/9+/z/en36+P52fvz6+Xx4//r5/Xj7+Pf5end7fvn9eP5++vv/e335+ft5ffr49/16fPv6/nZ++/v6fHd5/Pv9eHj9/Pn9ffz0+vp9ef769/55ef38/nl7/Pv5/Xp5fvn5e3n9+vr7\n/nv++/n9dnr9+/l5dH/8+395/Pn19357fPf3/nd+/v36/Xt7/Pn7dnr++/l8c3769/R6e/v5+X93efz7/Xh5+/36/Hx7+vn5fXn7+PX7fXr++fp4efz79/56dn76+3x1//z6+357+/f5/Xp++fj5fXf+/Pt8dv38+Pp9eXz6+P97/H36+v18fPr6+nh5/Pv6\nfnZ8+/z7eX769/X9enr99/t4ev5+fvd+fP359Hp1/fz6/Xx4/fr6fXj7+ff7eXh/+vl8df79+/v/ev/5+f13/vDj/WxvbXpzcG5xcXZybmtsdHdya3B4ef37/PXz9Oz7/Pb793t3c375dWtxenBranN1/u/w/O/5b356bG1udXJsbW52c3L4aW38fm5w9XJv\ncm1iamdmZWNzbWZyfnZra/pvbXFy+nJubXh6bnd+fHZ6/W1qam7p9WdvdW9v7vzq5HJlZmxsYGJwY13/4O7t49rd3NbRzt3bz9Xo39Lf29793N/u8+d4Zf5bV15fVFtnS1BXUVJUV1ZhVV7vaWfu12pr1d3c1tHMy8/ExNHKx8/X3t/oYGTnal7e4V1u7Gpo\na/Ph7uno7vH+dWpdX1xcWXh2beLf3eni6+fp397l42/f8XPx9Gtea1tpfH582ejq2u7l6Njp3M/a2ubu7/Z8du/m+33sXlvyZmzreujbdPDgaFr/X1r95tbU193e1trS0tPRzs/P0tHd6OFtXGZfVlhOUE9IS0dGTEtPVVNPbFxh/mDu8X7g2PDb0uTe4+je\n19jMzMnExcfIyNPN0+nn7G12allkXltVUU1KRkJFP0FDRUdKR1FTT3xi/tTa3MjQ1sfL0NHa3N9odupkfdzr6u7pfWRnZ2VeaVxiWFdfVVNWUVNmWGj7ZfDr93l/c3D+d37x5tnW1s3IzcjI0s/K1NjS7uLxZmxaT1tXTFpPTVRUUFRTUltRV1pVY/5jZO7t\n+vfv9/Xx7eL56tnf1M/YzM7MzdPSztLVz9vd5OR2a2RcV1NNS0xJTVRQVmlp/vn44ePh29rb2dDY6ulmW1xLTU1HSEtKT1Ra6tzgz8zKycnIyMrGyc3Mz9DY2fJuYVpPTUtGRkdERkVHTk5SYmhy2dje09PX0tbZ0NvVy9LTztXb4HtvYV1cUU5PTk9VT1da\nXHRtZfD77+Hz793d3tLX1tPX1t7+63pcXVVSWVpiX2Jy/Xn16X748Ovv8+jo6Orq9Ovj4Ofl3OXp63xsZGFjWldeVFhcV1poa//j6OHa29vY6eHf7fL5enf7bWxkXmVjY2NscPzj4uLW1drS2N3c3eTs/HVubmRiX1ZbWVFRT05PTk1PUFJcW2F2d+vb29nP\nzszMzcvLy8nMz87Q1tbc6OTr8vVqamxjZGJeZGdwfm5eXmVOSUlBPz8+PT4/QklLTWnu4M3HxsC+vb2+vr7BwsTKy8rO1dbY2trb3d/e2dvg3d7d2l9JbEAzPjMsLi4sLi4zOjtO6ePHubi0sLGys7a5wMnN3H7+Ylpmbnvs3tTOy8jIycjKztHZ3eHl4+zf\n2U9H2jkvSi8rMS0tLi43Ozlc3u3CuLizr6+vs7W3wczOdVVZS0ZKS05ZZPPc0sjFxMHAwcLFyMvNzM7Pzs1dSc48Lk8wKjAsKywtNDc0TeVlyLi5tK+ur7Kys73IyuZTT0w/PkRGRk1fbujOyMfCvb6/v8DFxsbJzcvIylpRyjcwVy0qMSwsLC01NzZW41/G\nt7i0r66vsbGyvsfIaVJPPz0+PT9BRldk787Kx768vLy8vr/Bw8bKyMfIbEvLPS5WLygwLCssLDM3NEviW8u3uLWvra6wsLG7xcffTkxEOzs9PD1DTFlu2cvHv7u8vLu7vr/AxMjGxcXTS9nlLEJAJy4uKisrLzY0Ofpudbu2ubKtra+xsbTDy8daRE4/OD09\nO0BKV2P3zcXGvbq9vLm8wMC+wMLBw8VkVME5LlkuKC8sKSssMjczR9tjzbW3t66tr7K1trzL1eBLQ0c9OT4/QEpYcd7Pw76+u7i8u7q/w8DFycjKyexJ1EotQjkoLS8qKy4wNzk/69rbu7O4sa2wsrO3vcndf09DRD87P0VGTmfu08rEv769u73AwMfNztTe\n3dzc21RM7j41RDcsMjQtMDU2PUFM4NbQu7e6tbO4ubvCytd7aFdJS05MU2Rn7tbPysfHxMXJys7e4t97dfZ37N/X32Jt90hARjw2OTg1Nzk8Q0VP9N7Uw7/Cvr2/wsbN0Nvr9W9lbn5v9ODf1tLP0dLOztXZ09/b5N/g7u/s5Hzy+XBfXk5KSUM/Pjw6PT0+\nQkZMVmBw8eDV1NLOzs/MyszOy8vJzM7JysvLzM7V2Nje6nX96fFk+HlbXmBRUVJTXVpUWllRWl1WW1pYW09PWFJMVVBPWF5oaXrt29rXz87Mx8jLzM/Oys3P0c/X5v715W/893NtcGlpYE1SVlZZVlZiXl9peF9uY1tpW2JlZH/6Ytrf9/Lj7u3z3+ppbePn\n9+7i2+Ht+N9tcvPk9Pn32eFs7dfi7fDgbm5o+/Ra/vXu9GHl3vl17vlkZlv6XVdsa/ZjZ2fs/2l77v3ydO7deHvf331o++lsXGjuZGVv4Hdo5+HrbXvg43/06/X58PHjeuX86vDv5eng2Orl2N/W7fXte2xvamFtVlpdV1RZXWNlY2vqbvt0+vLx/e3eauHk\n7/Tt7P3u/Pxv7/fudO3f7OTm8PL2/Xv8dnVu93tvZXXwX3Zs6WXpcv7rfufdcubw+3vvbP/3Zudu+G3p7/Vrb+53am3rafv16vp9fvR9bWz9e3hxXnVibGx0dXbo6erl6PPy4Oht7eXtb+z3e3r0eXpp6v/2aO97cP187WZ3ed/1bHbtcnZk6u15e35uYPhs\n6XB2bnfv/fpt6e7rcu907vb78//kc+D08vFp6/Js+G3rd2tvX/tadl11XGhxc+ds3/X0/GXse+z6bObr6ebg2+3j7t7553zme3pqY3Vub2JrdG5r+HT2bnf9cmxp6Wx+bH76+3v9cXj3cuvr6eb63u/x8m/mbWtrfWx9cPH8+u53+2J9b//3dOrt3v3p7P16\nZ+1lamHubndfaXVia3pw7e356Ovx5ubde+7+4nx8d/B/8fh38vDv6Oh39WTqdvt7fex4fWFha2ljdHdr8295anFpaXVkcG746Xj28+vr6OHr5N3l5Ojv6W/v/m5hb2n5YGH8bP529Pbuc3t2bWzz9+Tu2+bd6+hsfXr3+11uYmFpYWvqfXnr7Xts8+/tdHTf\n5ON45Ob06WXudWPvaPtscGdv7VxrX/t6Xv715Hbs6n3r7Nrb9OVs3v3tennj9e1s8vj3eHP3+Pxx7fD6eG97cVpcXmNqYXFt53DwfOHh5t/k3PHg9ebu+eno4OP93frjf/Jn7OZ2fW/s/m9m/fhidHJla2Bl/nptePPv4edr7Oj6+vHz4Pd97O9u+XFvamhh\nbfphZWtvcvR37O7o3d3q9d7i8fhxde1+b3j9dHdsaPtvbHL+bHT99+Dw7f307vZtaXhtdm9k/e77d3p5e3J8+vdvc2xvfG1v/OXs6/Lu4uj9/vjycG5penx2c3d0bGdnY15aXl1rbW1t9Ozo8Hz16e58++zo7+vi5urm5ODf6Onm6u1+cene4eXb3Njb4+bl\n7nFqWllXT05RTUxNT1FRT1JYWFdZWl9uev3o3NbQz87MysrFw8XDwcK/wcPCwMTHyszL1lBDQzcvLSoqKyorMTk+TunHubW1sK+0usLN32BLRklMTl3z0cjCvbm4uLm6u73EysfHyMXBwXtLWT0uLCglJiMhKC4vOUvkvbOzrqmqrK2yuL/7RUM7MzQ2O0pT\nYsm8u7i2tbK1vLy8wMbJysO+vrq+WWFuNS0qJCMkHx8oKiw7SuK6srGqpqmqq6+yuuFORjs0MDA2PkJO3si+uri2srW5uLu/v8XGwMHCu7a2207jQC4qJCEjHx0iKioyP2K9srKspaWoqa2vs8lYTkA2Mi4wOjw+W9TJvru4s7S6uLi8wcTHwsHGwLq2s75Q\n+HcwKiYhISAcHicpKzpOzbSvr6aip6ipra+57k9POzAvLzI6OkDszsu9ureyuLy3ucDEx8jBxsy/urizt+1h1DorKSIgIR4cIykoM0Z6u6+vqaKlp6errrLHX1hCMTAvLjU5OVLY08K6urS0urm4v8PFzcvJ0cu/vry2s79i7VIwLCYgIR8dHiYoLDpMzLSv\nraaipaaorK632lpOOzIvLzE4OT9r1szAu7ezuLy5u8HHztLMztrPx8S/u7e6bWXrOi0qIyIjHx0kKSs0QXi7sK+qo6SmpqqtsMB8XEU2MS8vNjg6TOPQw726tLS6u7u/xs3Z2Nn579fQzMS+ubjfVt1ELywmIyUhHiMqKjE+Vsa0sa2lpKamqaytuNX7VT02\nMi81OTlBYN7MwL25trq8vL/Hz+b77Xhdet3Wz8rHvbjCXHLxPDEsJygnIiEoLC03QnO+trWsp6eoqaytr77b71E+OjU1PD0+T+vTxsG/u7zBwsfW2+RiaX5gV/d33tbZy8K/wMhVaHQ9MS8sLCsnJy0xMzxM7sG5t6+rq6ysr7C2xNvsWkY/PT9JSk1z2dLP\nz8vHy9LX1OnnbG1saWNh6e/s6d7d0tbXzcrcWl1TQjs3MTEwLi4zNztDUufGvru0r6+vsbS4vMja6G9ZUlFTYF9edO3q3ujZ2d7i6d7sa2txdPlkbHdhZmN2b97i4t3Y19PaW2FbSEA/Ozo6ODg/REZR89PHwsC8ubu+v8HGytjc3flpem/r7vZree9w4+zj\n8Op+/u97a2j9cHdpaGdoZ2NkY2NxbW18c+zo3+d1aHteU05KSUhIRUlNT1lq/uLW0c7Ozs7Oz9HS29nY2t3i3+TW5t3g2+3e+/h7fG5ubl9jY2VeXllmY2RdZWFoZW5gcmd5c/t8+vFqbmpfW1xdWVdWV11gX2fv6+Dc3dvY1drX2tzb3d3f4uLb4Nr13+Xq\n5nH1e/1mbl1qX3Ngdl5yX21mXGRmZnxpb/Zz6m7vc+zr/Oj27/z4/25iZmFlXVZdYGFnX3V++fXr6eTs297d5dzb2tvi3d/c4eTm3+vp9XR+aPZi/1/0cmNlX2NhaWRpZ2f9a/xva/px/Wr6b/fy6/Xt7vrteGppbGphZWJicWn8dPz+6+rr6OXe39vj3tvb\n3tzq5Pfk8fR493T7ZGVtYm1pdV95Y29qal9rd2Rvdf/09fT4/u785/b47eju6/J693t3amZmZWdgZF9nZ217Znzy9ef+5PHh6OLn4d/e2uXe5d7r3fDv6+h4+Gx9Zv9lYnxcc2PxWW5/ZPJc8mj0ZXnyYO174njzfPXtaH5jel9qX2RnXnVpb2Dx8ffu7uTd\n59zb3unc1P7g4OPv4ef36/fn/G5v5W1j6WB5a+pk+HRh3V58Z+9e+P1m8G3s+O5i9nBfXWFTVllVWlRfXP9vdOPn3djb29Tc2NrY8drd7t746+/ldOnsX9xy+e1t7nrwZe/5X+b+aev2btx07O3eftvaYe3udU1iT0pNSEdGSUVSU09h5+3Zzs7Lx8fKx8zP\n0dTt9f1qbGZjXX9raOxj7/X53Xfecdjy69t12+7f7N7e29Lb1NvTbOF+TFBMRTw/Ozs8PD5BR0tk/efPxsK/vLy8vb2+xc/O3HZgVVRMTU1OTk9ka3X239zX09nU1Nrc0+Xy1uDj2trd0Mzk/drqR1JdPj49Ojg2Nzk9PUNbX3LOw8K9ube1tri4usjQ0Ppb\nVE9HQUNERUdLVVtn5dbW1cvKz8rL0czO0tbQ2dLIzsnPftTVQUVXOjQ3NjAvNTQ4Oj9bY2TUv72+tLK2s7KyuL/BxNlWZFU5O0A6OD5FRE1de9zVy8TDx8K+xcnHyc7PzMvNycTRcNHtPUZKNS8zMy0tMjA0OTxPW3vOvbm7sq6vr6+wuLu8y+RjTkY9Ozk6\nOjtBRUpa7tnQyMTCv7/BwsbIx8rOy8bFwsPc5MpaPERBLywxLikrLy8xOD9RfdPEt7O0rqutr66utr7C03FOPj09NjQ7Ozc9T1dj1cnHwLy7vL2+v7/GzMfHycS/wdp/z2s3Nj0vKSsuKSgtLzI4Q1zaw763ra2urKqssa+0vszaYUQ/NzI2MzE1PT9CZd/a\nyL28vLq6vLy+xMfFyszFw8K+x+3a2UA2PDcqJywrJiouLzQ+UWzJvLmxrKytrKqvtLa6yetoTDw4NzMzNTc6QkxT+87IxL27vLu8vcHEx8rKy8zJw76/1/LNdjs5OzIqKS0pKCwuMjlGT+q+ubixq6uurKywtbi+0nxbRDw5NzQ0ODo9RE9m4s3Iw768vL2+\nwMPGys7Rz83Jx8PB0OnU+EE7OzYtKy0rKy0vMjlIUWrIvLq2r62vrq6wtLi/zdt6TD89PDk3Ojw+Rk9b9NXMx8C+v7+/wcbKztPU1Nnc1M3Kze9r41xBPDw4MTAxLzAzNjpAT1r9y7+9u7Wys7Kztri7wM3Y7lpLRkM+Pj9CRUpSXvPY083Ix8fJzNDV2eJ9\nbm5paWVka3f+8n1jYWdaT0tKSEVFRURIS05SW2/u3tDMysfEw8TExsjKzdDb5+v5bF5bWVhaWVZbYmdoa251+vp+ff78fH93bm5xdHFubXh9/Px5//Pv7vP07Ozv+3ZwcG1qYl9jYmZmZWhuef37++nc5Ojn6+Pi4Obp5ebn6u/4+vf5fG5zcnFxbGpscHFv\na212eHt2b3f+/n53/vf18/19fvr1/Xh+/v77/np5/vv7fHf7+fX3fXv57/H8/PLx7vR6e/v6+3d1fHz/fHZ0d///eHF7/vz8fHn++Pb7e/fz8ff9ffv29/12/fv8/X94ef9+enF2fX/7fnZ6/Pr9evz19PP6fvz19fd8fPr7/H98e3x9fHVvfX7+fXR4/fv5\nfP329/H3/3z69vh+efz7+H94fX/6/H5ye/3+/Xh1f/36fXj7+fX5fnr99vf+eP37+Pf/fHz6+P9zefx//nlzeffj5u/wa25zb3Bzfv37eHz49vL6ff759vp6d/38+/12d379+3d7+vn2+358+vX0/3r6+Pf6fnv8+fn+d337/Pt7dX38/Xp4/Pr69v58/vr4\n+vx8/vz1/Hz9+vbt9HhraP1xXlldaWxq9uLnY2/d3uTp3Nzf7/Dk5Pt0fPP6ZFZfeHlmYXLx+HJx+u76e3v3+31/9PR+d1lVevJ6b+3d3e7t4t/o/Hf29f9xbn7+/Hx2ef9/fnZ6/XZ5/v1ybnh+/mxu+vPydnP99fppT01eXVJIWNrU4tzLxMza1tHV5+ff\n2+1tcf78a2Zmb25nV1JiXlVVX2x2bnN0aGlmcl1KVfvwb2Fa39Lf5tjLz9bc19Pb7Orc6m996urs/GBQVGtrUldkcXJcZHnhfWn4fflod37u5+rc1+N87OHo7H7s8+t7Xlpp9/pqYers+nR19WtodPn9bGn+7Pf9/N7b6vne0uLo5+79dXpdX2lZVXnwX2l4\n6/5cZOna9Wt72ntUa/n1YW7m3eti+d3pXV746v1YYebna2L76P5yc/58fu965uTx6+7d3fHn1Nhu/eZqZFtdWVlZV3JnXFZdZl9kVmHz8G1j49/Z7n3W2ed+39n0bPje52ds+Oh4Wl/7e2Fp+uXv8+ze3ePd5O326+dpcnNxbmtpXWBsbmFhZWhqX2l+eOzi\n2tzp3Nfe8OPb5Pb57P9qaW9samNjefn0dO/p7uf4/evc4vLk2+1kef1iWV1qbmthduLn8nZy6+bsfuvb3N/n5utuZGVsaWBaYnlmXWdobe7v/Ojd3+Xf3Obn3eTl2tfc39jY3Nza3eno7OxwaGZfXVhUU1VbWlpdYWhpfXBjbHJlX1lSU1RUUE9TVVlfYGh9\n7eDa1c/LyMfGxcPCwcLEw8PDxMjHxcjLzc/O0dvn735rZ1tTQDQzMCwpKCorLTE0PVB93MzCv8bNycXP08zIw8C/v7u2uLm3tri6vL/EyM3V19fX1dTPzs3KydHW0NhbNCstKCAfHyMmKi4zR9vOxbiysrO1uLu/yuHu63tu7tjLxMC/vry8wMbHy9Td6O/p\n4eTi2tLQ0M3Nzc3Nz9HW2dlVNS82LSUmKiksMDI5U+njz764uru6ury+w83U0M/f6dXKycnIxsTFys/V2N3tdmpnYl5aWFdZWFpbW11gaXj28ezj3+ZdSUpUSj49REdEREZLWmls+N7Uz8zMzMnIzNDS2tzd5/Hs4+rv6uLf5Ojr4+Ht9/Xy83ZoaW1taWNl\nb/3y9e7e2tnY2uByX2NbSkVHR0ZCQURNV1dZa+vc1dXUzcnKztTV1Nbd7e7m5e/09+vh6e3r6OXn7PL59HxtbmxpZWhrdXh/8ejf29va1tLX+F5iXk5GREVHRUNDSlVZYf3o29DR0dXVz9TW2NnY3eXs7u/t7vHs6evs6ebm6urv8/Z4a2prbGtlZ27+8+/t\n5t7Z19nX0tTjaF5bT0lGRERFRUVJTldcZG7029PSz83MzM/S1Nbb3+ft8ff39vT0+PTs7Onq8fr6+Xxva2tpaGlsbHr47urr4N3a19fW09Tga15dUUpHRUNERkZITFNcZ3H23tXRzs3Nzs3P09bb3t/l9/728/Dx9vry7Ozs+H75/nluaGZnaGdlaHT97+vp\n5N7a2NfW0tDS4WpeXFJLRkNDREZGSExTXmty/N/V0M7Ozs7Oz9LW2N7j6fF9fPf38/3/9fDt8/j8/v93amdraGhlYmp3/fXw5d7b2dnX1NPS1N14X1tYTkhEQ0RGRkdLT2Hu7ujd1tDOzczMztDV2Njc4+/+/H78+359+fby+/30/vf2/m5scP1pXWZne/X3\n59va1djX1s/Qz9HT3HxbVlBMSEZDREVISk5TW2bu59vW0s/My8vP1NrZ29/h+mJpbHB2+fHu6+/u6urq8vz4fv7p8Hz5cnVub/ft5eLe3NnW1tba19be/VtWUUtHQj9BQ0ZJTU9baXvy39bPzsvLzM3T09Xc5t/h6/t8bGJvcXL+8O/v8fn6+/56a2loaGho\na3Ju/u/t6uDb2dfY1tPU1Nnkc1xZUElEQkFCREVITVNdav/p29TR0M3LzM7S2Nrd4+x+enh+/H1++O/t7vrz7/H0e29sbGllX19laW90evbm393d2tXT0dPW1959XlZQS0ZDQUFDRUhMUFho++bc2dPOy8rMzs/S1dvk7e/8eXFvfPn28/Hz7+zr7vp+fXRu\nZV9hYmRlZG/87+nm4t3Z1NHR09LU2/lfWlVMR0JAQkRFRklPWWj97d/V0c3Ly8vMzc/V29/m7f5ta3F7/nx87+3u7/T39fb8cGlqZ2hmYGFocf719OXe3NfV09DPz9Pd9mddWUxFQUBCQ0NFSU9YY3Tt3dbRz8vIysvNz9HW3ubuf3dvdXhyefXs7fr77uzs\n93hxcm1pYmJlZGludv3v493b29XQzs3P1N5wXltVTURAQEFCQkNITlhq+eXb1s/MyMjKy8vMz9fi6ujueWxnbX7+/ft99+3r7v5+/v52aGFhY2NiYGVz/e3m493Y09DPzcvLz+lbVVhPRT4+QUNBQEVNVV9v7t/Vz8zIycrJyMrP19zf5PFqYmhudG5sffDs\n7O7v7uvt8XRsa2lmXltfZm1yde3g29jX1dHPzsvK1H9fX09BPT4/Pjw8Q01PUF3o1tLPy8XDxcTDxszP1NrrbWRfXlpaX2Zz8ujo4+Pf3ut+e35uYFxeYF9fY2397eLc2tTQzcvKx8bN6nxxUD46PDw3NDg/RkJIatfV1su/vb/Avr3CycrM2nlrbl1OTVlb\nVltx7enk2NXb3t7d8mVgZGBZWF5nan/l3dzXz8zLy8fCxNJ28PpFOTs8NS8zOjs5PVTp+ebGvb29u7m5vcDAxtHffmpcTkhNV09NXvvz7uHV0dfZ09z4e3BjXFhYYmps/ODb1s3MzMbCw8LO7eluRTk6OTEuMTU0Nj1NXW7Ww727uri2t7q9v8TP4vltVUhK\nUU1HTmJub+3X0dXSztTf6+59ZFhaYmBibO3d3tTKysnBvb7H2tfeSTs7OS8tLzAvMThETFjfxr27ubWztbi4u8HL0dxhT09LRUdLSk9bbPrl2tbRz9PZ2d3r+W9iY2x4dPPc08/Lx8O+u7vM2s9ePjw8NS0uLy0tMjtBSWHSw767tLK0tbS2vcTHzedfVEtH\nSD4+TkRH//tj583R2M3M19bS3+n4/Onk6uTTz87GwsG+vMfWy38/Pz0yLC0vLC0xNjtBVd3Mxby1tLa0srW7vL/J2v5pV0lDR0lCQ09WUGTj6u3Wztbc1NLc4uPo8u7f2trUzMbDv7zAz8nNT0JFOy8uLy0sLjM3OUFc5dfKu7i4tbKzt7i4vcfP2HxbUEdH\nRkFGSUhNW2tt8NnX1dHR1dfV193l3tva1c/MyMO+vs3OxnhGS0I0MDMwLS4yNjc6SV5u2cG9vbmzs7a3tbm/w8bZb2hZRkNEQUBDRklOWm/16tvSz87Oz9DQ0NPW1dDOzcjGwcDL0sn8Rk1HNjI1Mi4vMjU2OkdYWefFv766tLS2tbS4vr/B0O56WElGQz8+\nP0RGSU9ebPDZ1dLNysrMzM3Oz87Oz8vGxMHC1M/IWEVSPjQ1NDAtLzU1NjtMVlnTxMK/uLO3t7S1ur6+xNTteVtIQEREOj5GQkVWZl3y08/Py8fJy8jIzs/KyszIxMLBytbK5ERTTDU0NTIuLjIzNDhEU03vx8TAu7S2t7O0uL68v9Ti8FtJRkU+PD5DREVQ\nXmbr1NHQycbIycnJzMzLzMzIwsC/y9fG4EJSSDQ0NDEtLTIyNDdDUE3fxcO/uLG1tbKzt7y8wtfo8VtBQkU7O0BAPkhXXGnh0c/MxcTJx8TJzczMzsvGxcK/zdTAYj9pQTM0MzAsLjIxMzdMTE7TxsK+tLK3s7Gyub27xdzx9Uw+R0A5O0BAP01aXm3Vy87K\nwb/IxsTNzcrKzsrEwb7G28XTP1RSMjI0MSwsMTAyNUNPR+HDwb+3sLW0sLK3vLrA3P51Uj1BRDc6QEE+Sl5f/tPJzci/wcbGxMrNycvPysPAvcnjwdM9WU4wMjQxKywxLzI0RU9I2MG/v7WutbOwsbe9ucTnb2xOPD4/ODhAQj5Lamzvz8jJxL6/xcTBx8rI\nyMnFv77F3cvHQkJaNC8yLywpLzAvMz1XS/e/vr23rrC0r6+1vLu/52djTTs7Pzc3PkA+SWVu6M/HxsO9vsLBv8TIxsXFwr2+zOHE3DlOSC4vMC4pKjAvMTVIV0zLvb27sK2zsa+xuL67zWNeVkE3PTs1OkE/QVh8/NfHxMS+vL/Dv8DHx8TFxb68w+fLwz5A\nXzEuMC8rKC8vLzI+XUnhvby8taywsq6vtb68xXtdT0c6OTw3OD1DQk375tjJwsK/vb7CwsHGycjGxcG8v+3Ovj1A9jAuMC8rKC8uMDE9XkXmvry8tqyxsq6vtL67w2xfV0A7PDg3OTxBRE1s5NrJwsO/vb3AwcHFxsXFw767xe7CyTtWXS4vMi8pKS8tMDJG\nVUbOvby7sKyzr66wuL68z1tPRzs4Ozg3Oz9ES13u2c3CvsC9u76/v8LFxMLBwLu/38fBPEFuMC0vLyooLy4vMT5fSN29u7uzq7Kxra+2v73KbVZMQTc6Ozc4PkVGWejb08a+wb+9vsLBwMjJw8C/vL/ryL46Q/8uLjEvKSgwLS8yP19G1Ly7u7KrsrGusLe/\nvc5hT0tANjk5Nzk/Rkdb39HOxL2/vru9wb++wcK/vLu+282/PDz5LysvLiknLy0vMz90Sta5uLmyqrCyrbC4xL7LU0hIPzE5PTM3RUtGbtXTy7+8v767vMHAv8TDvry7v+LJvTk89y4rLy4nJi8tLzE/+EzPuba5samvsq6vuMbF11VAQEIxND07N0VbTm7M\nxsrBu72/vr3FyMLDyMO8ur7iyrs5O+UuKS4vJyUvLS8yP+RS0biwtrKorrGvr7jNy9xRPDs/MjI8PThFe2P3ysDDvrq8v8C+wsvIw8XDu7jE977DMUJXKyktLSQnLi0zMUrV9ce0rbWup62xsrG81eBcSzk2PTUvO0c9SOTZ2MS8vr69u77IxsTNz8bDxLy3\nwn68yTBGTCooLCwkKCwtNzVNzs/Fs6qxr6issLW1v9tvTEM5NTM4NzVETU50ysrGvby7vb/Aw8vNy9DPxb+9uLzsxbs3N1cuJyotJSUsLDc5P9TAwLuqq7Gqq6+3ub7SekJBQjQxOjs1QFlWa9LGwb/BvLzEx8XO4dnU2tfLw724udPPuEszTTcpKCwpJSsr\nND88X8C5vq+prq2srbO6wdPTTz1AOjU3Nzo/RU/s2NjFvb/Bvr7FyMzS197e0tDPx767v+LYxUY3QDYsKiwrKy4tOUpIV8i5vbavr6+xs7a5wdjR5E5DRUM9PT5BS0xV79zbzsfFyMnKysza4dzk9+rg6NzTzsjI2mzV50I/Qjw1NDQzOTg4Q1NYZM7DxL27\nure4vb68ws3Q1+1qW05MSkZFSUtKUV9z6+Pd1M7S19TX3d7l7/Tt+O3k7eTWz8zM4OnR80tJSUE8Ozk5Pjw9RlRXY9TLx8G/vbq6v8C+xMzU3e9uWklMTUJCSUpIT1lm6ejn08zS1NDS2dvf7ejzdubh6t/TzcjAv8nnzM5EP0I7NC8wLzY4NEFcdvbFubu1\ntbSytbzDvsttXlVNRUQ+PkpEQlJfWm3b2NTP1M7J0t3U1+vs63vx6uvb0tHMwr27t7bK/MVcLjIyKiYnKSo0NDfnxMO7rKuuq66wtL7fbfNDOD0+Oz1IS1jd4NbExc/JxNXn53FnZFJTbmhe7tze1MzKx8LCvri2t7jHZm5MLSgrJyIjJysyP0rUtLGwq6er\nr6+2wNRQQUE/NzhFUFhr0cHCyMfCy3lpbVdJRUpSVlFd5Nva0sjFycnIxsbIw7q3trjC6FlRMiYqJyIiJiwvQFfbta6urKipsLW8zW5IPTo/PDpJe9rWxLu9vcDN1OpOQ0dDPD9LUl372cvExsvHyNLd3ePn3NHIvri1srbFZ1NDKiUmIiAhKC03WO27raqq\nqqartL3PcUg9NTY9PUJaz8e/uLi6vsjX7VZAPD8+PUJOXu7Uy8bCxcrJzuJ6+PPv3NDFu7WxsbfBZkk+KSIkISAhKC476c24q6ipq6muusXxUT87ODlHTFfawLu9vLu/zvRUSEA8Oz9ESVbpzsnGxMHDy9jl72pgZf7dzcO8t7GvtLzdQTsvIiEjIiMoMz/t\nv7quqauvs7TH9k9CPz5AQlzPysC5tLi8vcncXUU+PT06PEhTZt/QysXGy87U7mVeWFFXYvPTycK8t7OysrfEaj40LiQjJigrLj1bzru8ta+0u8jL6FVMRElPXHnQvr27urq8xdV6W09DPj9DRktWbt3Sz83Nz9rp/GJVUlRbYWzhzsa/vbq4tra5weFKNzMt\nJicqLTE3SnvIvb+5uLzF0dhpWlJNW2/p2ci9vb/AwMPN7WBiUUZGRkpPVV353NrZ0tXg629lYVlSVmJ28eHRyMK/vry6urzC2l4/NDMsKSwtMjc/Vu/GwMG8vb/J0N5vbl1Zaeze08fDxcTHycnY/W1eVk5KS1FZXGT04t3b3N7h6W9qZ15bX3Lv5dnNyMLB\nv76+vsfnVUA4Ni4sLi81OkFQ/8zGw769wMbL0+Lpc2Zv8Off0c3MzMrKztLY73JsWlVVU1deaG996ubk4e34+XxvaWJibHv78eXf2dXW09XU0dr+YE9FRD87PD0/RElOW/Pb1tDMy8rJy87OztLW2t3e3t/m7+3u8fF+dHZ6eG5qcXJwa2lmZWpqZ19laGpu\nbnB1/Pjv9fHn4+Dg4t/c29vh5+9zZVpSTk1OTUxOU1lgaW/86uDc2dnW1NTW293d4ef0/fn8+/59ffnz7vT57/Dy+Xpzb21raGFkZ2hta25+8+/t6+Te3dzd3dva2t/zemhcV09MS0xNTk5TWmR4/u/m3dnW19bV1dfb3+Pm6u96dX17/Pv9+/Xv7vL59Pf6\nem1rbGppZGNpa29vcHj77efn6+He3Nvd3dza3eZ5aV5YUk1KS0xNTlFYYW/57+nf2dbU1tXW19nd4Oru8fp4dXx8+Pf79/Du8fj39Pt6b2lnaGhlXmNrbXV3e/vr6eTk4tvd2trc3Nzc4f5oX1lUTktKS01PUVVcavzq5d/c2NTT1tbY2tzg6e30+n55+v37\ncl9edPh4bnfp5/J4cnFsa2r+8vzo5eDf3trX0c/U0czN0dDS0tp0T0ZBPjs6OTk9Qk1ZcOXRysTDxMfJzc/Y4+79cWdlbmz45t/d1tXV2N3x+3ptaGtpZ2lsbm9z/ff4/fLt7ejn5d3Z1dbi2dDNycjL32BJPjo3Nzc4OT1EUv7YzsfDwsDDx8zT3e1vaWxq\nbG5vfuXb1tTW1tnd5vpxamRfXV1kam5vbW11e/16efLt5N/c2dHOy8rJx8bK2WJIPTg0NDM1ODs/SVrmzsfDw8PDxcnO2OT2cWxqbfzx6eLc19DP0dfc4u79aV9eXV5fXmJsdXt5dXJ8+fHv7eDb1tHQzcrIxsbK1G5KPTczMzQ2ODo/SlzizsbAv8DDyMvO\n1uD6aWZobnj75dvY1NHT0tTa4P5wZ2FfXVxdZGtxcnr3+Ph9dHr36uHd18/MycfFw8LH2FlCOjQyMjM2OT1FT2/Ux7++v8LGy9Db6PVtZF9hbPjf2NfU0dDP09vi7XdmXlpaX2RqbnP+8u/3ev58enl3/und1s/Mx8K/vb7I6U08NC8vMDQ3Oj9KZtjGvry8\nv8XN2eL0b19WVl1y4dXOzczN0Nfc4e5yX1dTVVlhanXt5N7d3t/j6vttZm1+697Xz8nBvbq4vt1OOi8uLi8zNTk9S/HOv7q6vcLL2ODncllRTU1e5c/IxMLHy8/b5O9mU0pJSU1ZY3Dv49zX1NDS1t/3b2167uDb2M7Iwr25ucpdQjEuLy8zNDc7QHbNwru7\nv8nN0d3wdVVJS1Fz2MnFx8TBxMnR5V5OSkdHTFBTWWP23dHNz9TX2tzc4enl4tzVz8vIx8nTb1NHPjo5ODk7P0ZPcdzTz87O0dXZ7WdjYGFr/+fc08zKycfL0+B5XFNUU09QWWJz7OLe3Nna297e3+Li4uDZ0c/OzcvLzeJURT07Ozs7PUBKXPTZ0tDS1Nfd\n5n1lW1pieuzi3dfQzs7T3u99ZlhUV1tifOrl3dXS09LPyszNy8zIwr69xN5RPjk2MTAvMjlDV+rUzMbGw8fP5mZaWFlYXF97287JyMjGx8rN2vBsZF9aVVddZn7x6ufi3+HucWleWVZSUlRRT1Rfam/27efi4+js8O3l5+fk3tvY1NPS08/R1Nfd4ubq92VS\nTU5MSEZGSU1UWVtlfunl6uvr6+73bm95fvby7ubd2djY1dPU09PW1NLS1djY2Nrc3+TwcFZNTUpFQ0VGR0pPU1hfcvbt4+Hg3tvb29zc2tva293e3d3e4ejo6evv/Xh7enZuaW1ubm1oZmhrbGhmbG1zdnNzd/37+Xz98/Lv+P/57/T4e372+vh+dXr8+/11\nev79+n55ef79+3dw+fj5+np5/fn5eHn5+/j9eXf++vf87d7j4+n08+vt8fludX16dW5tdHd7d3F6/Pl8eHt3cn1yXmBscX17/vju7ezz8ezt6/D28+7u8vz38vLx+3d7/Pv/c3d+/vt+eXh//P16df39+/50d/79/HZ1/f/8fXV1ff59end9/Pn9e3t++vp+\nePj9+vx4d3v9+Xlx/v37fnh0ef37fnN7/f35fnl+/Pr7d3r6+vl9dnz8+/92fvr6+H54en/8/HR4/vz7fnl5/fz5fXX9/Pv9dnv8+fl7e/r28392dn7+/Hhz/f74/Xx6ffv6/nV++/n5enV59/d+eP75+ft7d336+n51fvz7+n57f/b5/Ht7+Pn3fnd5/vv/\ndXz+/vt7dnf++vx4ePz7+/j6ef76+nt1/n5kZ99ya+L3evby9O9uXPzucu79fvH69PD+ff339395d/76+3ZxdP/t/3X18fP3fnV9+/t5cv57+39ven39evd1eP/9+Xf/d/b7fHv6fPjudH96fPp4bG51bmxufXn65uTv6uPu4+B99vT16HN27Xb56mZt63ho\nfG9oc3J0aWb2b236fW386X118/P+futq9edy+Pr6/Gvo7GnrbOvpauJreuj6d3Fx7uZpaup0d+Jhf+Zu++5ybXr+6GNg4f1se2vxdnXtZPffaHzl9HJw6O1k++ty7Pnt/W7p+Pb4eGv733BkdO1wY/5/Wu/6XW949/ZxaOX4bePtcG3h6nr59nv76/Fq+Oh5\n7vpp//n8bnP2bXLn83R66ul0cXx86vFoZ2rg7V38fm7yfmhh++/wcmjr5v7//Hf8+fD8/u3z/PPl7np78/xvbW5xa25rdWRm6v1ka/j0dm13+u3u9vLk5ebpefnp6/dzb/95fX5gYGx+d2hmaXL68Gxu7eP7dn/+7Xl5amj3eGlx+Hx79fxxZmFrenJ3b3bk\n3+137u3e3+7q7uPzbmVlfPD3/PJ+b+7f5vj++fh5dHVoYGFgZW/+cGNpeHzt53hy9+/z7+zw+vn+duvf6/Z3/uDS1eN7++/s8W5vbvP7dW9r9O7+6PL7aWB0aW12cv37b2prcHRyefPu7Or7/+fl5efv7ezl5+zy/vx6d/zy8Xd59/Tr4ur9eu7m6en2b2xt\ndfppZWRhYmRsampscvv39e/u9P13e3V3cHbv7Oz4/nd3+vz++u/r7///9uri5/xueP7w7Ph6eX57dn7v9HZva2577+9+e39+//v9+PH8dW5venb9eG1sbX7z9f/2/Xz7+v757/P3/3vy7fZ/dnF4cXFsbHZ69/Z9ef737/zx7fLv8/r7+fn6cXB6/vp6dXF6\n/fPw+vPw7+/09ezm6ers7OrsfG9udnlzbmtzcm5ubGZnaGhlX2Roam1oZGdscXZz+OPb3+Pr7Obi5O3p6ufh4N7c2trZ2tjU1NXb4ufl5u38+2lbX11haHN7aFdLRD89Pj9CSU9YX2nu3tXQ0NTY29/m5NvY19bY19PPzs7Pz9DT1dfX1tXU1djW0tHPzs7L\nycrfSzswLCstMDlASUxRYu7Sx8TGzdr3ZGFt7dzU09PV19bW1tTV2d3rfHX+9/j69evl39zZ2NTS09XU0M7MysfFwsDPTTkuKisuMz5HTU9UZunOw8LK2mtWT1Vm69bPzs3LycXJzdjo63t3dG1kZ3BgXG7r39jX2dvd3d3e2NDMyMXEv7y7wl06LykqLTE9\nRkpLTWjcyr2+yd5cT01UbOjY0tTPy8fFyM7e/XNscvz+fW1pZWnr2tXS1dzf4+bl4dXW083Mx8G8ubfFSTIqJikuNkRIRkVO28i9usTfWkxNVXHj6+Pg2ca8ur3L+1ZPXvrp53JaVFhz28/M0dvf39rX2+Lj3tbNx8G+u7q4vWg3LSgoLS43PTw+S9vBvrzE\n5l9WWmBrbV1i5c6+t7i+zN7+du39YllRT1Zj9+Xd3N3Y1NPX4Hpr+uHVzMnIw767uLW1xj8tKCYrMDI2ODtI3727wMjjX2ducFxPS0/kxLu4usLM0dLa62RPTFFaafTxf/ff1M7N1eX99+PZ09TUzcfBvbu5t7nHSC4pKCkuLy82O0rewrzEzNPo6uhjTkdK\nXs29u7u9v8LAyu9XTUpQWVhbWV123tLQ0dPc39vg6/X14tDIw8G/vLm1s7j5NCooKCwuLC41Q/nEvcfRzs3O219FP0pm18jGxL65uL3H2W5jZVRPUE9Xa+rj3tnW1dXa7XhpZG/u5drPysO9u7i1srPIPiwpKiosKSoyQXnLw8nLwb7H4VNGRk9daejSxbu3\nuL7Izdfqa09JTFBXXGJs6tXMzdHX3d7i6/r05dLLx8K+u7aysr9NMy0tKiknKC48TmjczMS7ucLadF5aVU9OW97JwL28vL2/yNP6W1VPTEtMT1t759zTz8/Q09vk6/Dn3NXPysS/u7e1tb5eOTEvKyknKC43QEx5z8K7u8DM0d3/XU5NWfnbzsfBv76+xMvT\n4fdoV09PUlhdbPrj29jV1dnc3OLj3tvY0MvGwL25uL3ZSDo3MCwqKS0yODxJZtLDvsDDwcPJ1fRobXv7++fXzcvMy8vLzdLb6PlvZWFeXml3+Ozn29bV1NbX19bY2t7c19TR2PlUR0I+Ojc3OTs+P0ZPXfzk29TPzMrKy8vLzc/U1NXW2N3f3+Dj6Ovt8ff8\neXV4eXtuaW1ucHBubnf78/Lv6OPe2tjW1dnncGJZTkpJRkRFR0lMT1ZeZ27549vVz87S0NDS1NbY3N3h5+z39vbn4e/r6uzt8Pv0+HJubmdseWxrbX3t4+Pc1tPPztDg6f5pVkxJSUdGRkdKT1NaXGNx5dzZ187NzM7Q0tHS1NnjfvHv9/t49/P4+n707O3u\n/HN7/P7+d37z7unq7ujx/uTk29XX3/FzXlRPTElISElLTU9TWl9ocfPg29TQ0NDQ0NHT2Nrb3uHs+fr/eW9qbnP4cm1vbnl3cmpudH19e/v/7enn6OPe3NnZ297p+W1ZUE5MSkdGSEpNT1FXXml88end1tDPz9DPz8/T2Nzd4en6cXx5cm5pa3B5f3x5+Pb3\n/Xt0dnd2cG50//fx8/Pq5ePi49/l7f1qXFdVUU5MTE5PUlNWXGRtffjr3djT0tLPzs7P1NXW2t3n8ft+fHJoaWlbZW1idnL9fG9qcnBubGhteHn9ffnr6ubo7Onm4OHt+/V4bGFaVlVST1BPVFldZGx68ebf3t3Y19bW19ra2dre4+bo6+5/d3Z1dm5oZ2pr\na2lmaG1xamtucHZ8bm9wfP72enfu+Orx7vTr6uns7+zv8/p1a2xnZV5dX19iYmBla3n6ffbt5eLk4uXf4eDm6+np7e37f/7//XpydP18fnRucfz5enV4+X9+fHN2fHp6ef51e/t3dHZ89X59/vXw8/j8fvv3/nJsdm1vamhnbW5xb23//fX38fjp6+nq7+fr\n5ezy8vDr7v34/fL0ffpyf319/XB4eP50eWx+efdvdPt69vlu93Dve/l2du157/13fv59+m12cHx3ZXRtb3ZxcG97/P189m/q8+70/eXr7uX76+l/3nvt9e7v8fhs9PNwfHhp7HH8a/Z3ad5i62jjcv3Z/tn25HXvWmRrZmZkbGZzYm1ib25sbWlsd/p3dvXv\n7ub45e/q4ejs7ubz3/b96vvmfO72eeF++fv8df3oYvN8cu5q7mp+51/ga2rgdXr+7nLu7278fPlnfmhWal5aWlxcXGVmZG/8eubi7t/d293d39/d39715uvv9339avN+cXlvfWz0dm/9eu57fPn/8Xbmbf7m/ufy5u3e3+nh5+/76V1aXlBSTUxKS09NUFVc\nZX7k5trSz83Pzs3Mz9LV4d3n73Bna11tXWJiYXFlfGhv73Xr+vfs7ePu8ejx4ebv6ebb49ra29LY5P3oYk1ST0JCQj8/QENFTlRa+9vVzcXDxMLAwcPHzM/T5W1rXE9PUU1LT1VYXmFu7eTg29bX1tHX2t3e3+Pl7+rd4N3Z1dHPzuPu3VpJTEY7OTs6Nzk8\nPkZLUnPZz8i+vL27uLm8vr/EytPmcV9OR0xDPUZHRUZRXV74493U0M7MzNHSztHc3t7i6ePj6dzZ18/OzNFy49RFQU5AODM7ODM7Oj9HTGTnxcXDuLe5u7i3vr/CytTi/mBPSURCRz8+R05MT2f7fd7T0c/MzMzN1t3U1+Dj3t/i29zc1NDPycbN9ffOTz5H\nQToxNzoyNztASEx06cnAxLy4tbq8uLzEx8nVe2ZUS0lDQ0NHSURMXFxf89vd2c7Nz9DR0tTX5eTe5e7s5OTj2dXV1NDNzMvSb2nfTTw+PzowNTo1OD1GS1jf2se+vr26trm/vb7H0tnjYlhVT0xIRUdMTklOZmpqfODc3NfY19ja2tva4+be3N/j29fZ1dDR\nz87MyszrWetiPjs8PTMwOTY4O0JOUOXWzL68u724t73AwcTP5OdrV1RQT01OTEtZW09Yd+5w/eHk4d7f4t/d5uDd4ujf2d7i39za2dnb19TV2NfU2HVYblQ/Pj8/NzU8PD0/SVZf3tLLxL69vry8v8PDx9Tr7n5dUE5OS0xMTVBTW19+9+7h2tba2tnW2Nzg\n4t7n6urt6uTf3tza19TRzs7P3GzrbkZAQEI5NDo7OztBTE9f49LNx7++vbu9v8DAxdHZ2+5kXFpRTU5QTk1RV1xfZnrz5N/g39za2tve3d7e4OTp6+rr6vL58/Pz+nZud3FtaGdoXVpcVE5OUVJMTlZYWl5u//Lg2dfX0s/P0NLT09bY3OLi5Ojw/nd3dnNt\nZmlqa2hkZGRlaWpkaW5xdW9vcnz7/3v78+/v+vr68e70/3/29vX7fn759vl9e/v79/53d35+e3B0fHx9dm9vdn78b3J6//r7/3j59vL3fvj08fP+fvf09v58+vf3+Xt2fPz6fHN++/v7f3t6fvv/dXf//v17dXr6+v53fvf39350/PP29Xt89/f3/Xx6/fn7\nfH58/vp8eHZ+/f16evn59v55e/74+Xt2/fv5/Xx6f/j6fnb/+/r4e3j/+/p9ePr49fl4eHv9+X50fP36/H58fPz4+np8/Pz4fnZ/+Pr8eH728vl9dXr9+v11e/z5+Pt9ev74+3l3/f5+/Hl3+/n5eXv5+/f9eXv79/h8d/v5+fl8e/77+X53//r5+nt3e/v6\nfHb7+vn9end8+fl+d378+vj5eHz5+fl4fPn2+nx5fPv7fnR8+/j5fXl5/vn6eHz49/b9fX769vd+d/79+v93eH///nh6+fv4/nl5fvv7eHV98/L5/Hx/+vh/d338+fl7efn8+Xt3/fv4+3t4fvj5fnf/+vn6fXp8/fv+eHr7+/l/eX379/x4//n2+nx5evv4\n/Xd5+Pz7/nh++/j5fHr7+Pb8e339/Px5evz7+Ht4fnn483Z1/Pr6+357/Pf4/XVaSujpTO7P+nTO4XTb13v64vxw6vNn++9ze/dxb354cm5vb3R3bW1v/Hl8ffzu5ulrSVHLZl3S22/Wz1xl2WJd4vZd59z56d307N3o/uvtcP14Z1pRSup6TtrgY+PYcenc\n6P/u9HXsfFhN52lR3HlX09tM1d5X39la49lf6Gxg6fd42tx/497y9d5vc+h8c3j/bul8aHtsZWdPeHtO8Oxm+9536ON3a/3qYvNxXmPqa1/84HXs1HXm2+Ho2t1m9+lYWW9obNzf5Nrbftneb9nn7HzsbmB2WVlfZF1ofFNfZFZVTlliWl37a2ff5O3c1+fU\n2N7a3tna2N/a4N3b5u3p8e7q92x5emh0Yl5tYVxxXlheUVdgV1zrcGvecfzh8e304Ork4O7o6ur65PZ47XpobGlhZ11dX11lbGtjaP5zb+95furs5+Xc5trV3NPY1NfW4+nfefjub2bt/2fn7frf4e9rXlJKRz89PTw8Pj8/RktQWnbq2szJx8O/wL+/wsPF\nxMjNzNXW0+Dl6/R4d19cXFZaWFFQU1NPUlRUWVlYWVdUXF5bXGNoaWhmcGlrffH89NvY2tXO0M7Mz9Da29fhefH1a3pxaWptZ256Z2bx82555Pdm+PN6bPPpd/33d37pf33g6eTY3OPX1t7a3O/r6GpudVxbY1xTWWVfaG939nrzfnl7bHB3amNrcfp+bvPo\n+ObY3N3Uz9He4Nvj+/j0Zmb7Z1dZW1RSU1BOVl9dYvn4fuLg7ufa4N/a5efj3OHk4trX3tXX4NrY5e39/m9tb19mZGthampaYW9mUl1rWFtvaGB4dWtzbmZ3639p9Ox+b/T+benm5+Td5OTZ4+3m2+Ht5uTw/Ov1em9/9nNqa/9tbXRubGxvbm1mendtf/f9\n897l7NvZ7OXefWv79Gp0+2157nxhanxydHZ1+H5udnpeX3NpZW718fnr8nx7/Pj7//zl4+3s7fD15OT25tjm8drebfrZ8WLu4H57729se3FhZG9bWnJjVV1vXmBuY2RoZV5hbGNnfv556t7f39nY29bU2tzY1tXT0tPQz9LV1tnf2dXl6t/g7PTn53BPPz87\nMzM3OTg9R01Va+rf0M7P0+Dh3fD43djXzMjKysfHysrLzs3N1t3a3OTd2t/e1tfc3Nna2tfX19bU7zszPTEpLTc0MT9PUlzn1M3IzdDLzdrcz9PWzsjJzdjVzuLs3tjh49rqfX739vTz9eTe4+fh4Obi3d7c2dTPzszFwL++zjg0Uy4jLTszLkdgWPHQycnE\n1ezV3VtT597m0MbHyMPJ08/V4+Xb6W/z6/5zf/Hr4eTp6Ony+fF//+rd2djPzMzGv8C/u79ELUY7Iic5Oy455nLu08rJxstfbN5hTFzX3NjFvsLPzcDUX97T+Gfe5G7v6vPo3u/w2N9teOb6bvTr7NzNycnCv768urrHOS1NMx8oPDstO9f73czIysfNWGvm\nV0heztLWwLzBys/J0nXm3eP3+97m4e/r3tni8ODe+Hz5/HJ56t/c1s3Iw8C+u7m4yjEuXiweKz85LEjM6NTKxcjE10te5FpFXc/c1cS8v8TGzt3obl5+421j5tvr8d7b3uDi7fp5Zml9cXzl2NHOysW/vby6t7tDKj9AHyE1RzAx4dDXz83PzshXQl/rT0bd\nw8rHvbi8ws5eZNhPQGfQeFTaz+jt3drf2/Vq7vNdWurd/OnPycnHwb27ube5SCc8SSEfL082MO7PzMzM0NnEYD5P411Bdb+/x7+4vMXO6Hb1Y09X7vJcctnf/ufZ3en0fP/4bV1n5uDn2s3IxcC8u7m0ssorKV0uHSVBWTA/z8rF0dfuys0/PF7UUEbOu7zB\nvbq9wtJlSlzcR0Hs0GxT2M7k4t7c2ttmWO/hYVbnz9fVysTAvbu5tLC7NCNBPR8fMu08NnnOvsjcX+LAWDhC291Lb7+5u769v8LOX1Jx61NMb9vzXnvc2dzy++Ddclhi9Hdlft7Z19LKxMG+urazsLo0Ijw+IR8v6Uc8X+W/wNlNW8NxOz36017txLu4ur/K\nx8lwT1rq8Vtcdez1bmT/2dn3bu/qcl5ide7q6d/VzcnFv7y5trOwujkjMT0mIStSWkdZXcm+zVBK0uJDPlLc49THv7m3vM3UytxUS2HlbV1m7dzgcmze0951cfH6amJlfuDd3NPKxcK/u7i2s7PNLSQ0MyUlMVRYW19eyb/VSk7abUZEWePTxcPAure909/a\n7GFXXvjo9mFdduXzbP7f2uN9Z23x7/3s2M7Oy8fEvry5trSzxDUkKzUqJixCbGppUOrByFpEXvNWSkxl1sC9w764ucbi593a3l1FWs3vTk9t3+PwXm7R1GtZfOLr7ujZzcXFxL66uLazsLs0ISw1KiYrPlvg6kdswsNlRFdbVlZOT+2+usHBu7rD1fhcb+Z7\nZG/l5O/0ev/o4ftu8/dnXV9pb/nu6NnOy8nDvbq4tbKvvjAiLTQqKCw+X9DhR3jDxl9IVE9ZZlFP6b26wb+9vsXRblN33m5ed+zt6/xieNze+X/q8G9qYmb35u7q1czHw7+8t7Kvr74yIy0yKCgsPF3Q4kfwvsdfS1NNWGVKSeK8vMG+vb7Bz2hY+99+X3fu\n7up1Xmni4H3+6vB3al9feOrr7dzPycO+vLizr623NyMuMykoKjdWzNhC777FfE1PRl77R0T5vr2/vb++vstkWOnrc3Br++fmZ1p16efx9urt821fbHx7/u7e08zJxb64s6+utzokNTQoKys5TcvWPtG+yHFRXURvcUFG9r/Gw73Cu7rIamzXfWtwbe3d41pX\n/O15aXD44t9jXvbl4+vo3s/Izc7Fvbq4t+8uND8uLi02RXLMSHPDxNNZfExg6EpHUszMy8PJwL7D5mjd7WlgaWJ03PZhc/B7c/N2cej0ZWvz+Pvh2tPMycjFwL/DxtdENzw5NTY6P0z9Zl3f0ttvbltZYVlPU+fX1M3LyMbH1OjudmdfXVZf8PH+8OTe3eLr\n5tvc5d/Wz8zJxr+4tLviRT05NC4tMTxLT1Nn0MnM3H7x73RQS1Bl6N/a0cXAxMzU1dbd8m936OLzffvs5OXu8u7q8mldWVhTUE1JTFRcannq4d3f7vP48/n77efi3dnW0M7Q0NHT19zm9fb+bVhNTE1LSkhKT1hbV15s/fx8bmh6+WpgbPzv6OTi3NXU1dXS\nzszJyMjGw8LDxMPIekhHPzs4Nzk8S0tPW+vd3Nfz9PrvYltdYW/55enYz8zNzc7R0tfd6u37dnJua214e3t6/X79cW1pZWNeXmBiYWBobG5zd3r47uvs8Ovq6uvu8vLu7vL9fPf29/11dnz+em90e33/eHJzfPv/dnj++vZ5dX3+9/t9dX76+vx4e/jz8/77\n7evt7/P07Ors8vfu7e/y+v96eHZtZ2dnZGRiX2RqbG5ue/749vt++/P1+Xz68u7t7u3r5d/f4d/c3Nze4uTm7PxsaGNeXFlXVllbXF1fa29//3328Orq7fDs6+vu+Pjw7e308Orq6Oft7ezr7PV++/p/dG1qamxqaWNnbG1vbW12fv3+fPXv7ezz9e/r6Ort\n6OTg4OLk6u3w/mtjY2BfXFtdX2JmZmx2ffX3+PTs6uvx9u7v7vH19vDt7O7v6ujo6e7y7+zvfnv+fHhtaGVoa2ppZWpvc3Z1dX759PZ8+Ozv7vX9+PLz+X749PL1f3p9+fN+dnz7+v1+eHh9/n5zcHl9fntzePr7+nr+8/Ty+f7/+fX3fXr3+vn/eXVzc3Fs\nZ25wd317//Hq6Ors5+fm6vH28fDz/nV8fnt6c3FyeXt3c293c3JtaWxuc25qc3h+/nl7++/v7e3u6Obk5urq6Ojr7/j09Pj+dHN3enJqb29wb2pnZWhpaWNla21wc3Z4+e7s7O7p5OLh5eXh4OHm6eTl6e73fvz7/nJscG9ubGdlZWZnZF9gY2RlY2Job3J1\ncX747+3u7+ni4eHk4N7f3+Pl5uXl6O727vL4fm9tcnZtaWlsbG1oZmdsbm1raHBwdHVtb3Z9fXd0/vjz9Pr58ezs7+7q6ejr7/Hw7O3x9/Hv8vL5/vz5+X1yc3l5eXBscnh2cWx0e3x5c290e398dXr7+fv+fn359vb9ffb19vn++vby8vv99vP1+3p7/Pf7\neeze4+Pz7+/z6/h7bXJ3dnRsbnJ6eXJxf/35+393d/x9Y19scv//+/ny7e3t9/Ls7u71/Pjz9Px7+vb1+X16e/frfXR5f/19fHp8/vn9eXR8fn96cXX//nx1evn29v93d/37/Xlzfv7+fnx5evv2/3T/+/n9e3z59ff9efv+8vh6eH78fnlveHx9e3Z1d//7\n/H17+ff3/Xp9+vp9cnt+f/92cnf//f90d/39+357fvj29/18+Pbz+n19+vn9d3n6+vl+enl++fl8efv39vl9fPv49/15/vr7/Ht3/fr7e3f79vt+eHN4/f12cXz+/P56d3Z7fXdtdn19/Ht3fvXz9v7x7ezr8Pbz7vH2fX36+/59end++/t7ePr19/x/fPr3\n/Xp6/37+d29vdnl3b2xzd3t7bm52fP19evry7u/1+vHt7fP27e3r7vb7+PT2/Xh9/v57dG9ud3l1bm93eHp0b3R9eHNwdf77+Px7+fTz7fnz7Ozs8PT6+vP4eHV8fX15cnd5fXlucXp6fnl2ePv29Pr98e/v8vj5+PP2/nd8/nx8c25yeXhyb3p9/P53d//z\n9Pd+9/Pz8vr9//v7+3l8+/3+fHN4//7+efv18/X+fX759H5zdv77+f5+/ff38/96+/z6/nFw+v//dXb9/Pf+dnb++fl8evn08/b4/Pz19vx5/fn+fnVvdXx6dnN7/vv6e3v48/H0//Xw8fP4/f73+PfueHZ9dHpvc33+e3J8/v37fXh7+fb3fn/2+Pb7//35\n9PT/ffb19fp8fPv4+X3/9vTx+v7+/fX3fXZ++3t4fHF2e3h1bXJ1dnZvb3h8eXdy//b6+X1++fHv9v3y7u7v9PX38u/y+/7z9vf+dnv8/npwdHt5enNuc37//3Z5+ffz9vv89vHz+/71+Pn9d3V3fXhvb3p8fXhwdP/7+315+/bx8v79+vPx+H389PX3/nt+\n+f18eH7+9f54dXd+fXpveH5/fnp4evn18fn37u7t7/fz7vL4fP/6+v50bnF5enZtb3p7e3l2dHn9/Xl2/fz5+H76+vj6e3739/T5f3739fV9ePr5+354dXr/fXdweX7+/Hh2fvf2/H739O/z+X7+9fb5d/75+/n+eH35/Xdyen76+n15ffj3/Hv89/T1/v9+\n+/h5b3T7+fx9dnd+/f52b3v9+Ph+fvn6+3x99vX1+397+/f5fHf69/j+fHp8+/p9cnz8/vt5dn/5/X15/Pj39n59+vP3+3x/9/j7fnl6/P38enX9/fl+dXh+/Xxzev379Xt3fH3493h8+vr5/H19+fT2/Xv39PP1/v728/Z+ffn4+f92dHd8fHFue39/fnp5\nfvb2+nv+9vf4fXr59vn+evbh3OLm8vHs8PNxcv1wc3Rscn7zcWRqc/R+8+716fLuevHz7+/6fv308/l+fff29vp++/r3+fn89Ozv9X5+8fX7Z216/urq8vzx7Ovy/vfz8f/5+/ny9XdbW2docm1wevn4+n/z7u7u9fj27ezv/PXv7/D3f//39/l6d35+/npx\ndn59eXB1e3t9d29xen57cXX+/Pp/e3l9+/p8dn79+v5+/nr+/3Z1/v3+fHR0fv7/d3H+f3j+fHh9/ft9dHr7+vx7dnn7+n15/vr4+314ffr7fnJ5/v7/enV6/Pz+dnb9+/n/dnn7+/54f/n59/57e/jtfnd6/Pr9/3l4fvv+enJ7ffx9cnN9f354c/z8/P52\ndnz8/Xd0/fn29vr8//n3/Hr89/j5/np/9/n9en749vl9dX37/X9zefv5+X14fPj3+PZyfPv9/Hd4fvx+c3n+/v15dHn+/f15ePr5+fx/ffn2+f54+vT1+H56+/n7e3n7+vn9eHd9+/18df36+/x8en35+fx4ffr6+X56/PX4/Xn59fr4e3Z7+vl/c3z4+fp9\nenh++35/eP/8/P53ev38/nZ6/Pv7fXd4+/v7env5+fj7/3369fh+fPb09Pd+e/z3+H16+/n4/Xh2fvz6fHJ7/vv6dXd6/Px+eHz6+vl9eH74+X95+vb19358fvr5+3d++fr4/nt7+vj6enf+/Pt/d3z5/P15fPv7+X13dHv4+3h2+vr5/Hx7fvj4/nn8+Pf5\n/ube4+Xv+ff7dXF1dH7+/nZtenx1cvh6+PH2bV1lbHJ7d3V98/L1+/Lv7e7z+fXu7/P++vL09vt/f/n5+3h3/f37f3V3/f5+dnz6+fl+eHr54d/v//j28fF+dWz7+Xtwan14b/x++G9hZ2d0fPz9e3768fH3/PLu7/H2+fny8fZ+/PX49353f/n9fHR9/f38\neXR6/Pz/d3z6+/x+e3v8+vjydHv9e3txdnv8fnR5/fv7fnl4/vv6enj8+/t+e3r9+/18dv/6+f15ePz5+3t5+fn2+3t6fPr3fnh///73fXt/9vr+eXr7/f16dv75/X53/ff7/HhyeP/9fHJ7/Pv7f3x6/vj6fHn5+vn9d335+fx6evv4+f54e/r4/Hp4+vn6\n/n18/Pb6fHj9+fj8end9+/t6ePv59vp7evz3+P15/Pj49Xx4fvv8fnV5+/37e3Z9/P18cv/1+Ph/fP79+fx1fPv7+317fPv4+n15/Pr5/Hl9+Pf5fH739vf/eHn/+/52d/z8+398eX36+nx2/vv6/Hn//P38enf9/Pn8enj9+Pp+ePv3+Pv/fv34+ft4fvj6\n+3x2evz8fXb++/v6e3d8+vn7eHz4+/j+e375/v1/dvn55t7p5+vv8/Pw8+/7/25vcXV5b3L/fP98e3v+9fj+c3Z+dl9gaHH9/Pz97+3r7fP07+zt8/rw7u/z+Pv+9vT6fH74+fp+dnz7/X10fP/+/nl0e/3+f3N7+vv7fnx++vn36Ptv/nZ7cXJ8/35zd/79\n/Hx1c/73/Hx4+/36/X55/vn7fXb/+vr9eHZ/+/x6evz5+f97d3r7+3t1fvz8/Xx5fPr8/nd5/vz6e3f++fv+ePvx/P95cnn+/H11fPr7+359e/73+3x5+/n6fnh6+/v+d3j8/Pp+dnj7+/x5ePn5+Px+fv75+f94/fn7fHp6ffj9enf9+vn7enR/+/r+dv/7\n+Pd7eXz5+/53e/n7+Xx3ffv6/3n89/X4fXh9+/n+dnz8+/x+e3r7+fx9d/z7+v14fff6+nh9+Pn4f3h3/fr7eHj6+/n8fXx++fj+ef35/Pz96+Po62llb256dHFwe/39fHf+//T0/Pz99fX4ff329fZ8eHz8+n52fvv5+3t5fPn4+3l6+fv5/nt7+vn8fHf8\n+/r+eHr7+/x5fff39/55evvx/XZ2f/39/3p4fvn6f3Z++/r6enr5+Pl8evn49vt7eH76+310/fr7+358e/v4+3l++fv7/nh9+ft9cP76+/l6d3z6+vx3e/b2+/1+fPv3+P14+vv6/Hd3f/v+eHr7+/n/eXr8+Pl8eP75+fx9e/35+352fvr6+3l1fvv8fXj6\n9/b6enp9+/h9dv76+/19enz6+vt5efz6+Hx4/fj6/nj99Pn6fHZ4/vx+dHr7/Pr/fHt9/vd/efn79/x5e/r6/Hh4+f38f3V4/vr7enj7+fn8f33/+Pn+eX/4+vt5dnlpX2tte/fx7/T48u7u8H769fbze3h7f/98c3N+//17c3n8+/94/vj19X57fvz1+H3/\n9/f2+3x7/Pr9fHR7/395cHN9en1zc3x+/nhxb377+X159vPz9fn9/vXz+fz39/H+/Pv88Ph9efd8/fd2cH78+nt2+3369v96fvf4+nR4/n7+dHF1dn59df389vP9fPr58/Z5evr4/P53fPv+/3pxev7+/Ht9+/x3X2X5+P3s5uvk4ent6vJwfvZ1c//8+fp4\nevv3+fxrXWhvZGN3fvz1e2xq7vZzdXt9+vVvanTr6+/q4tza297h397l7vj3+f99cm51eHJtaGhqaGRjYF9lZ2p4bGlycf9++O3m4+Xi3t7c3N3f3tzc3t/c2NLOzs7MzM3Oz9LbflRBNS4tLCssMDpIeMzCvLm4vcjT9lpMSkpS99LKw728vb/FzNHW3+ru\n3tnc2NfVzsrHxcXAvr26t7rlOCghIB4cHSMwTcu7tK2rr730S0Q/Pz9N07mvra2ur7XFRjM1NjQ3SN/Du77GyMfdT01Z/uvf2s7EwcfLwbu8vLq2r6ysySgdIyAZGR4rSrqut6+nqss7NTU2P0lRwqmiqK6vtsdXOS4uMzlDVs28ub7J1XRXSUhPddTMx8LA\nxsvNy8bGxMC7s62rqbE1HB0iGRYbKEa+qq21q6vLMCovMjxW1bemnqKutr59Oy4tMEPr4ty/tL3mWFdSTk5OaMzE0OLPytPq5dDGwsXFvbeyraiouywZHSIZGR81zLSquMm2vz0oKj1Q1r23rKWks/5671Q/P1vOusVHSOPdST9d0crbYVTx1WtY5sTF1N/a\nz8zOzb+1sq+rpqi+KBYcJhsbJEm2sa7VSsffNigw2ca9ur+1rq/NStK/yvpd5NjP6kxP4MrlXWvtb1JPV+/S0djWz99cVGfZysW/urWzsq2pq70tFxstHx0nSre9uXo429E/LjjAvsnH1MG4tchdwLXA+1fz/fxsUHTLx/hSavddT1znzszb6uPdbk9d1sfD\nwr64tbGtqau4MhcbLyAcJ0e5x7/uOc/KRS85vcTt3OG/uLXA57mxxFZL/fDvaFjhxcNuT2vsZ09Z8tPR6nD2421VYtvKx8S/vLezrquprm4eFyosGyAyxr/TyjxYvGo2MdS8aGh5y7q2uda/r7piQmvhYXx/3MfEckdb8FpLZdTQztbq4drxVFnYyszLwbq2\nsa6rqrBAGRozJRskPrvSztk9zMBMMTm9zExc5L27uL3NtLDGSkfR7FNY8szHymRX4+JWSnjV33xv9O38Xlf51dTSyL69vbawrKutvC8aHzUfHCpcwFrV/0y91D41V7tYQWvKu8C8wL6vt9xObs5tVWDYy9p2Wmr7XE5Y39x8au/e/V1de9zb3c7BvLy6ta6r\nq67PJBouLxseM8niRsxX0LxQOTrDyjlH3L7Eyru+srDHfvbGfERhzsfZ5P5ZX1ZJSu/TcF/m229aXW3t3uLfzcTEwLm1sa6rrLY3GyVAHhsqa8s95OD8uX49Otq+OTvlwsf7vrq1sMLX1r/VP0/UyH1Z2drqU0xScOxYXt7Vb1Zu92hf/tzSz87Fvbq5tq+s\nrbVGHyVKIRooUNg3VcXdvOxER9zDODnRxdlXwLW4tsTGwsHkQGzL2ltdz9ldTVV0a1xa69b8WF/salBZ693q7dnKxcTBu7a0sq+xyTIjNjYcIDZeQzXNzM3HUWH9ylg2aMzlUui2u729vrrBz1xi0HBNXNbgWl5nd2RdYvvgcV5z815RYPD0deTRzcvHwby5\nuLOvs8U/KTY4HiA0RjsvzcHazG3P2N1WO+/bUU3cucXJubW2w8rQ19pWVl/rfFFhbmVRXPJramvqdl1aWmJhXmXi09nVzsjJxL26t7Wxt9Y2MU8qHi48OS5Iv2/Y0snD4OlKadpJSWXGzeu/u73Bw77JzuHs2VpJbm1LUvFmVn7ebmLu9mFlYlpcZ2Z45dva\nz8rKzMbAvry4uL/rQkNIKSc5NjAwWthM3c3CydzQ7dxmTGvuflR6yM7Nxb+/y8nO2d9oZV1TTVJdWFpo6+/15eX0aW5uYVpfdPrx59rT0M7Lyca/vLzHYlbnOSs5OzAuPl8+TNjKzuLKytTrZej2W1v23Pzoy8fKzsXDzNPg2u5WV11SSFFkWlRp5fp76OX+\ndvz8cmr16+vr5d7b2dXT0s3Kzmb62T49T0U5OFVNPU3v32Lny9Tl38/R7O7c2u5u5tvj6tnQ29/V0Nrv6OV0YmNnW1lcXVpaX2NoZ2lv//n5/vXt6+zt6unk397e3dnZ2NzqeWhhWlBOT1BPT1RaX2Z3/Hr47OXo7eri4+zq6+rp5N/j5d7a3eHj4er4fG5k\nYGRiXlpeZWVnam5zfvXu9fHn5eXm5t/c29jY09LY5HdiW1FNTUxLTFFcXF5t8vP97+fm6+Pe6vzt6O3/8+Li4+Dc3d3b2t/r6enxdmxpYVxbXFZXWl9kYGZ1+ff38uvq6Ors6uff4ePm4+Hh4eXp6enu+m1mZV9dWldZWlxcXGFnbHFwcHn27O3w7Ono6+7y\n8+7s6uvt5uPh4ebl4+bq8vXu+ft7b21yeHRucX7++fj5+vjv8nlnZGBcWVdWWVteYmVy+uzp6+vj4eLl6ebm6ent8u/p5+fr6efl5Ovx+fX6d2ttbWxqZGBhZGZmY2ZtdHt2dX339O/3++/t6+3w7unq7fDw7Ozu9P97fv57cW90dHRzbmxxd3dybXJ4eHt1\ndf/6+vt/9PLw7/n++PHw9f7z8PLz9/x+9/f7eHh/fn56dnV+fXtzeP3+/X11e/z6/HN79fn2/X57+/j6fnf5+fj8end/+vx5efz5+X13eP/8/Hp1/v78/nt7+/v7/nf/9/f4fnn++Pt9efz5+ft6dn33/nxzfPz9+3x7fPr5+Xt4/Pn5fXZ++vv9d3z7+fl/\ndnr7+vt4ffn7+P18e335+nt2/f/8/nZ6f335fHj4+vf8e3r8+Pj/ePn6+ft8env7+/tzffr7+nt4fvn6f3f7+vn8e3x++/n/dXr8/v19eXz5+vp5e/r69/16ffv6+3j++fr7enV4/vv+d334+vn+fXz7+fn9eP79+vx4ef3+/Xl69/37/Xd3fvv6e3n6+vf7\nfHf99/j5dv/8/P17eH76+/92/vr7+np3fvn5f3b/+fr5fnp7+/z8eHr5+/j8eXf+/nx1ffb5+n96ffr7/3V0f/v3e3h5fv90W09Zc+3v/fXg08/a3tvc2uD7ePbr9m5lb3Jvb2ZkZWhscvrm43tgXWhaTlRWW2Jte+je3t7c2Nnc4+7+7+jq7uzj3+nu6uzp\n8fZvaGBeWltdXWtgZ3ny+33s5+v17O358+vweOfo/ffo4Pv96fL8dW74enZlbGdrc2x3am72eWpt+fF/b2539XNjd/T9/3n+9OfqfHvr5Hlv6+Xp7vLj5+zu8O54fPP9bWb+7ndjavJ+bGRp7+5kZ3l09Htsbu/qcmx96Hho+/F+c3x58/h19/J+7/Xz+vTo\n+vLs/X/k7PL4efnj/F1ofPvrcmD/cHlmYu94e3xv8/b7dmzz+3Ly9Xn173D163hve/v1em367/Dy+/v+7ut57/189HxqcO/v9//9ePb3bm99b//+aXt7bXj7dHntevh1++9r+Xn6f//7//fx5W9/4/j7dm7s8m5ueP5/d3H9fHv2bW/z8fv5cnd8+/tqf3j4\n+/bz8u7o8XX/fn72+m/+9X13eXD7+nZ9/X17/H5ybnR79Hx5fG/v+e55fOl9/Hl8dffpcHz87fb1eXV49vxwev31fO98bX98/fp0efbx/XJ17/l++3r8/H79enxzdvh1cn317vP09v7y/H7/cXr8bvn+c/f89Hn/dO76dX525W7w+3X0/v587Xp++PN1a/1u\neGx1aHb6fvN17f328v/+ffPv9Pr16Pv3fn59+v/8cP3ufe1zcmr5d3B5bv5/+2ly/Xf5cXx+7vLx7v727fJ++nr8e/t8bvr+/fB77PH+7v/3dvj2fvV0931+eWxsa3Bwb2t6f3r7ePb38/f/+fju/Pj8/vD0fu1/+Pt+7vT/c+/u9Ht4fXP+dG1ud/VtdXNy\ndvx4bfv/eu77fuz27fR/8X3v+f369f35dWx3e/n6eXZ77/9+c3L9+vhwbfb2+fb2/vTuf/9udPv89m35ePt+b/P76/p5fHL4+Pbz9fH4cftwc/129Pz++X3+93h6fv7++2l783n383b3/Pb9cu70/vZ+/nr6eH38cXZ89/36/Hd86G18+H76+Xlv8P769nz3\n9+/0fHbv/PHxafZ1/n1pfXX6+Xh0+Pp87m17fvzxe353ff1+cn129/R9d/rvf+/7cfj2+3t1/PL/7Xv8+fPu+nxx+3t7dXz8/u52/vf4d/NxdX9reGv8dHnzdO10fXZ67nj99er+7O547PLx9256eHX+d2t683x2/n/27XX1b3j1fXV4e/z0efr7+v30+257\nevt5/W919n72eX3t8fP4dfjxffp89v7693p+e375e3ptenZ8d3v8bfL9cPx27fX7+Xr+8v99c/zwfvZ7/vv7+vh3fPtzenZxfXn5f/7+/vn1fnn6+PP4fPz1+f58d3R//uLj6eDu4u188Hvvfmn3b3Xybnh7fnx+d3f0eO92bG9nX19jZ3F/7Pv3fPfd9uft\n9OPq9vr98+ru+vl97f57d3Fv8/pve3r28Hr9c+z19nh57XrqcnV+e/X+fGf0eX51cXH/9nZ9ff5073b+e2r0f3xzbvh1+Ptu+/z27W7w/nzpfvd9fPD1/W5573x9emz/+Xpu+3X37Hd+b3Fx/G9t/P3n+f5ubO34+3N/63/s+mzu9PP7b3jx/Pt4avx9f310\ncvj0df5p9v31621t7Pt3/GH+6374fn717v3+dH3zdntreX33+3v4+f74+nP//ft6dfl1/vj5fPr7/fL2eXb/731x/m97+Xl/bu347/r7dPfybPZub33+/219/O77/Hp+/vL9c/h97vXye33u8vxucW76e3J0d/t7/3d59e/5+H148m/3fHP77/T38/73+e58\na/z39XX1f3v6/3psff75eGx9fXn5d27yee/3evj38frzev578ft1fX75efl1dnz4e357c/3/9XN+ff70+Xhw8fLrdHnu+u/5fHj48fd5+3338nx5b337+nN2/f5+fHN2fXV+cXN8+/14fHx+fvZ5+vn37vP7d/347/t+9Pr5/np6eXr+/nf9+n77/nr68f17\nfvT3+/x4fXz4/n18/vV+/P58dn79+3V2fXj+eX16/ff8/X/+8/L5eP/8/fZ3//b17/j79/Dz9Pr58/Lz9nt+8Pf5/fzz+vf8dW95eXVtbXZ6fHN1dXj+fH50/fX+8/V6+vL6+3r3/vr4eXh7ffr9cn5+fv96eXZ8/vt5ef1+/H18/PX2+n379ff1/HR7+/j5\nc3X++/p9d3N2eX96cHh9fXt2cv/8e3h5/Pn8d3V6/Pj8e3P6+vr6eHd5/vt+b3z++fp7ePz29vt99PL19vt89fLy+Hl++Pv/f/9++fz5dnT7/fp/dnv6+n54//b09fp+/fP3+H5/+fr6e3l1fPz/enP/+vv7dXv8+vp5d/359vp4d/77+Xp4+ff4+fx8f/n1\n/Hv8+fn2fn759PV+dnz9/npyb3h8/310ffr7+v1//PXw4+tx/Ht+eG9yd3t2bnN1fPp4dnt++fh9fvj18/j8+vTy9Pv/9vb2+Xd4/P99cnF7fH14c3F4fv55d/n69/j9f/j08/R99/Hy8fj68/Hx+P3t8/j3e3l9+/16b3l8eXhzcW93eXlxc/9++/58/Pb0\n9n399fT3/H389/f6fH75+ft+eHZ8f3xvcv7++n95efv5+n1+9vfy+H1++PX2/Hv79/T9fHp+/P1+c3v8f35zb3h7eXVve317fHRzd338fnT++Pj2/H3/9vj3/376+/t9d377/f15//f39n15ffz4/Hro3OLh7PDx9Pf6fHZxdHpuand3b/D6anFxffh09O7w\n7Pt++e749//9/fX2/Hz48/Hv9/ry8O/2evHs7u/3/Pny8fp/d29wd3l77O7y8/r47/T0+n769vb8a1xfaWxycPzq8vfy9+vr6+3x8O7u7/l6/f3+fW9yeXh3b296e3t3cHN4fn1zdP5//n54dnd//n1zev5//Xhx/fn8/nf9/P37d3Z6f/96b3l/fH53eHV9\n+fR0c/19/Hx2d379fnR6/v7+enV3//7+dnf9/ft/e3z7+fp9dP78/f50dv7++3d2/P39fHd2e/78e3b7+vj5/3779vn6eHz6/Px5d/7//X14+vz6/nl2evz+fnX//H17f3t4/vv7eXn6/fl+eH77+Pp6ffn7+/93fPv7+nh8+fv7/3x7/fv8e3f8/Pr+d3Z9\n/f52dP5+/H53eH/5+X55/Pbz/X58/fX0/Xn+9/j6fXd+/Pt9df36+fx7eXr++/x2fvr9/n18e/z9/Hd1/v77fXZ++/r9enn88/b8e3v6+vx6e/v9/P96eHz8/Hx3f/z8/H14/vr8fXn8+fb+env9+/l7d/v7+f1/e/75+fx4/vf39395fvr8fXR+/P79eXZ9\n+/x/dXn7/fz/en75+ft7fvv6+X13ef77fnd9+Pr6fnd8+vz8enr3+/z9e3r9+/54eX37+/56evr7+317+vj3+nx6/Pv6f3n7/Pz9fHh6/fv+dH39/vt7eH78+f54/vv5+nt3fP37fnV8+vr5/3t8+vXxeHr5+/X/eHv7/fx3evr9+312eP78/Hp4+/v5/Ht9\n+vX3fnn6+Pf5enj/+/x7evr5+ft7eHh+9n15+/n6/H55fvv7/nV3//78e3V9/Pz/evr6+Pl+ev/9+f13/fr5+/57eP76/Hl3/P36/3h8+/n5fHn5+fj9d3z9+/55efz8/f99fX76+nx4/fr4+Xl3fvv6eXf++/v+eXd+/Pp9df/59/18e/34+/14ffr5+Xd0\n/v75f3f9+vn5fHh8/Pr7ef/6+/v/fX38+ft5dX/9/n50e/38/Hl9+fj2/Hl6+/j6env5+/v+fHh8+/t9dn78+vn+ef76/P54/fr6+nx3fv3+e3R//vz+fHp9+fr7ePz4+Pd9e3z7+v52//v7/Hh2fP77+3Z7+n38+Xv++ff6fHr7+fr+d3r9/v93fPr6+n95\nevn6+nt7+fv4/H95/fj7/nV7/P79eXj++/19efv59/t7d336+X14+/r6+v56evz6/Xh+/vr2f3j/+/r8d376+vp8d338+v11e/r7+/98e/v49Xx3+fv4/Xt5/P37eHP7+Pp/d3n9+vp9ePz6+Pt8ffz59/54/fv6+np2f/z9fHj65t3l5+/27enwf/n+/P14\ncnR6entubHZ3fHZ1+/t5c3hwYmhubnJ79fLw+PDs6+vv8PXv7u/3+/L18vV9fvf4+Xx4+/v7fXV6ff79eHX+/v1/end9+3x+ev/4+/t7d37+/nh1//78fnh2ef36fXR++Pf9fHd++/36eH37/Pp+dnv9/v50fvj7+Xx3eP75/Xl8/fz6fnt8/P37fHX//fz+\neHv8+/t6e/f19/15ePz5+Xp6+/v7/n53fPz7fnR9/Pz6fXb+/P18eP77+/x6c3f89313f/r7+357fvn5+3n/9vn5/nl8/Pt/dnz8/ft7dXz9/Px2efv++f57fv36+H14+/v6/nZ5//3/d3r7/Pp/eXn2/v16dvz9+f19ef77+f13//3++3h5/vz7f3f7+PX5\nenl++fj+d/z7/Pr/e3v9+vt3e/3+/Xh8/vv4/Xp++Pj6fnh9+/r7eHz6+/r+e3v89ef7bvl5+f94eH78/nh3+/z5fnh5fvn6fHb8+vn6fn38+ff8ef/4+/t7d//8/H15+vn6/Xx4fPv5/nj8+/n7fXp7+/r9eHn9/ft+d378/P57+vz4+Ht2fP36/XZ8/nz5\n/Xx8fvn7fHf9/vz8eXv7+/x7efv8+f53ev78+3x4+/z8/Ht6//v5/3n9+vr4fHd+/ft6dX/7+/16eH39+n51ffn1+3x6fPb6+Xl6+f36f3V8+/v7e3z6+fp9eHr++vp4e/n7+v97ev36+3x3//36/nZ7/fv7eHb29/X7e3v++fp9ePr7+v19env7+v92fv38\n+f12/vr9/nd++vr7fHh++/r9d/77/Pl+e3z6+fp7fPn59v15ef38/nZ8+/z5fnd7/fr6eHn7/Pn8fnz79/Z+d/z7+P14eP/7/Hl6+/r4/Xp4+/v6fHb6/fn8fXh+/f74dXz6/Pp7eX/8+v95+/j2+Xt5fPr5f3f++/v6/3x4/fr7eHn8/fn/eX77+ft7fPn6\n+X53fPz4/Hh7+vr6/Xx5/PfzfHj8/vf9enh9+/x5ePz7+f56eP74+Ht2f/z7+Xx5/fn5/Xh++fn5fXn//Pt9efr59/t9dHf2+P12/vr9+X15e/z6+nt3/vz6f3h9+/v7fPz6+fr/eHj+/Pt2e/r9+v18eX/5+X12/fz6/Xt7/Pv6fnf7+/v+eHl++/t6d/v7\n/Pt9eP37+Pt4f/n4+X14fvr9fHZ//fv9eHh9/Pr+dn369vp9eX35+vl6evr5/X57e/r7+3n/9/r5f3l6/vr8enz7/fv+eXn++vt9dn38+/17e/z6+356+fj6+nt5f/v6fHj7+/v7/3p8+vn7d378+vf7eHr8/P11fvr9+313evj7/nh++fr6/nz++/v6eXr8\n+eXe6uft6+z9+vn8/3VxdHp4e29veXr7ent8+/j/dW57ZmBqZ297+Pb79+3s6+zw8Oru7/T98fLz9fv//fn4/Hd5/P78e3V8/vx8dX79/ft5dHp+/X10fP7+/X15ef/9/Hl5/P76fnh7/vz9eHn9/Pt8eXt+/P53ePz9/P57ef737Hpv/Xv5fHh2ev7/cnX6\n/vn/eXh/+vn/dv77+/18e/75+fx5fPv7+nt3ffz8fnb8+fn6e3h8/vv+eH38/Pz/eHr8+vx5d//9/H14fv37+3z5+f75fnh5/fv+eXr7/Pr+fHp+/Pl/d/79/Pp7dv39+3x2/Pv7/Xh4//v7fXf7/Pn6f3p+//j5dfz5+Pp8eHr7/f91fvv8/Ht4fPv6/Xh8\n+ff9fHp8+vv6eXf8/Pn/d3r8/Px4fvj69/96e//8+np6+v37/3t5//r6f3V+/Pz7env8+/p+efv59/t5en37+3t4/fz6+H15fPz5/nh++/v3+3h8+/z8dX36+/p5cn/5+vt3/vn7+v56ffr5+Xl8+fr3/3d6//v8eHr7+vl+enr++fp8efv7+v59ffv5+f53\n/vr5+3p5/vv5fnj5+fj7en7n3uPo+fH5/3RveHn9//1tc3p7b3b6fe70fmRga295cXR7+vP3/fTv7+7x9ffy7/D6/PT3+fd+fvj6+Xl5/fz7fXd4/vv7eHn7/fv/e3r/9eLi7vP59PP3eHxufH1ye257emv4+vx3XmRqcHd8e3v79fP0/fnw8e/3/vfz9PZ9\n+PT39fx7fP/5/XZ8/v77fHh5/vz7e3T9/X5/dXr+/Pt++P3++3x2dH7+/nd2fPv5/v94ffr6/nf++/r6eHr9/fx7dX/+/P52d378+n52/fv6+358//n6+3p++vv6fHd6//1+dX77/Pt8eHz8+f15fPbv/Xp4eP3+/Hl2/fz6/nh5/fv7en74+ff7enp++vl5\nevl//P56en76+f11fvz7+3p7/Pz9e337+Pf8end9/Pt8eP77+v1+enr9+vt4e/n7+vt4ff39/nR8/P37e3d8//v9eH36+/n9e3v4+Pt8e/r6+f54eP/9/Xh5+/37fnd6/vr6e3n5/Pr8fHz9+vr+d3/7+fp5d//8+3x7+Pr3/X58/v37fnT+/f38fHl5/vf8\neXr8+/p9eP37+Pt4/Pn5+X12ev37/nf/+/v7/Xx7/fr5e3r7+/f+eXz9+vx5ePv8+v54ev36+np5+vv5+n18+/bo92z9eft+d3V6/fx7df37+vx6en75+P15f/v7+Xx6fvv6+Xp3+f36fHZ8/Pr+eP339/d6dv36+Px5fvz9+/95evz8+312//v7/nl9+/r5\nfP75+vn/d3d+/Px5evv++/vq4Oji6fL67/D3+Hp1eXZ1eWtvfHt8fnjwc25zbvH77ebx7frs7+/7+O/19P17/vv0/nr79fn0fnx49PLufPv1/vLwfPJ+d29xcv/t6u78+fLx8Pz58PDx9n5pXWRpaW56fvn2/fr07+7y/Pbx8fL5+/f29f55+fr7/XdyeH19\neHF6fH19eXR0ff5+dXd/ffvp6vHn8v1oX2lobmxsbnd8enR6/Pz5/H58+vf3f3r6+/r+eXd9+v50d/7+/X13d379+3pxfPz9/Hl5//37fHV7/f3+eXV8/fx8d/v6+vt5ePv//ntyfH5+fnp3ev78/nd2/v78fXh9/Pv+d376+vl8dXj//H93e/z8+/56eX77\n+Xt4/P77/nl6f/37eHX+/vx/d3j//Pp6ePr8+/x8e/z4+P92f/37/nd2en97enh/+vv7fHd++vn8d378/Pt9eX78/P13ePz8+3x3fP37/nj/+Pn4fnh8/vr8eHz9/vx9eHn++/x8dP79/P55fPv7+//9+vv5/3Z3fv38eXj8/fv8fnp8+/n9eP/7+/p8ef77\n+350fvv7/Hl4//76/3X++/v6fnl4+vT8fH36+/h9d3n/+391ffv8+n53e/z5+Xl4+vj8/3l8/fz7fHb++/v9eXn9/Px6fPf6+Px7en76+Xt3/f39/Xt4//z7/HV7+/v8fXn9+vt/efz4+fl7dnz8+3x2f/37+n56e/36+nt8+/33+Xx5/vz+dXn9/P12eXz9\n+Pt6fPn7+Px9ff349313/Pv5/Hl4ff38eHj7/fr+eHr/+fl7d/v7+/18ev/7+/52ffv6+Xt3fvv7fnr79/j6fHv7/v1+dX/+/ft9eHz9+v16d//8+355fvv7+np++fr5fnd5/vr9eXv6/Pv7fHd++vl9ef979fl6fP/6+nx3/fz7/nl5fvz7fHj8+/r6fXr9\n9ebta3l5fv93dXd//Xx0//z7+3x5fff4/Xn/+vv4fnp++vr5eXj7+/l+d3r9+/14fvf6+X96ef/6/Hd8/f37/np6/fv6fXR//Pv8e3z9+/h+/vv89/x2dX39+3lz+/r7+355fPv4+3d9+vv6fXl8/ft/dn78+/p5d3z8+v14f/r7+P54ffr5+np7+/r4fnl5\n/vv+dnv7/Pl9d3v8+fp6efn1/X56d/v8+312/v36/Xl4//r6fHv3+Pf8e3p++/l8dv7+/Px8eHz7/Px2evr6+3x7fv3/+Xn99/r6fHd7+/p+d379/Pl/enr++fh7ev37+Pl3evz+/Hd5+/v7fnd5/vr7eXv6+vf8enz9+fl9d/z7+/p6eXz7+3l3/Pz6/Xl5\n/vr6fXf+/fv8e3r++/n7dnz6/Pl8d377+n93+fn593196N7l5fH08O7xfnZ0fn17cm55ent4c3h+/fx4fPj3+3RvdmZhamhx//z09Pf18Ozq7/ju7e7v9/n18/P9ffj6+Pp6d378/Hl2f/78/Xh3e/rp/Wt7eP9+eHN4fv57dH59+vx5eHv9/P12e/3+/X15\ne/37+3h3/vz7/3Z5/vz8eP/3//56enh++/x5ev5/+357eH/8+350fP37/Hp4/vz7fnz+/Pn+enV+/fx+dv39+v19e3v8+ft1fPv9+nx4fvv8f3R9+vz6end8/Pv+eHz7+v1/e338/Pt4evv7+X55ef/7/Xh7+/v4f3h6/fr8e3n7+f19e3r++/t+enl/9vt5\neP75+3x8+fz3/Hp3fP37fHf+/vv7fXl9+/v8dnr7/Pl+eX36+f54//n5+nt3e/37/nh+/Pz6fnl7f/n5eHr8/fn5d3j9//x3d/z8+v53ev36+np6+/r5/nx7/Pr4/3j++/n8end++/x6d/z9+v16eH79+nx1/P77+3x5fvv6/Hh8+vr6fHd9/Pz/eP36+fl8\nfOje5Ob59PtlYmVlanB2eXNwfv35+3v+9fX1//zz9PT6e3z6+Pd8fvv69/59eX77+X52/f77/Xp4fvz8fHX9/fr7eXj++vt+d/z7+/t+e3/45fBqe3f9fnl0dnv6+3H9/fr7fXl9+/v6eHz7/Pt+e337+fp7d/z6+P14ev37/Hl8+Pn3/nh5fPv9eXn9/fv/\nfHv++fr/c339/Pp5eP75+v/+//z5/np1//z8fXr+/fr8fXp8+/r9d3z7/Pt8eX38+v52fvv9+nx3fPz6/Xl9+fv8fnV+9/j5eHz7+/n+enn/+/t1e/r9+X54eX/5+3t3/fj9fnl6/fv5fnf9+Pr7enj++vt9evv5+Pp5d3z9+nx3/v36/nx6fvn6+3h6+vz5\nenj+/fr+dv76+vl7dnz9+v15//z7+v98e/76+nl5+/75+3Z6/v38eHr7/H/+eXz4+/x7evn++fp8fP/7+X52/Pv5+nl6fvz5e3b7/Pv9eXl8+vp/dn/7/vx7ev77+fp5fPr6+X55fPv7/nf++vn4e3r9ff7+eHz+/Pt+enz8+vl7d/77+n55ffz8/Hl7+vv5\nfnl7/vn8env6+/r9fnp+/Pn9dHr7+/57ev39+3p2/fz7/Hp5/vr7f3n7+v37fXp++/b+dXz9+/p8eHz++/93/vr7+n54evv6/nd5/v38fXl9/fn5fHf8+vn8d3z8+vt6fPn6+f94eX37/Hp5/fz7/nt7/vv6/nV++/z9e3v++/r/6d7j5fD+fH7//294+/75\neHZwb3x6fnP8+/75fHB4/n729vry9H97+vTu8fD9+Pl18vZ3eOzu7/v+bWJua21zfebd6OTl6urt7vny9fh8dn1zfX93en39/X51/fr5/Hp0c356XV9rbXx5env68+/z+O/u7u/z9/bw8PP//vn3+Xx6eHz6fnV7/fz9e3J2e359dHt+/v59enh6//x3dX1+\n/fhzcn58fnR1fn/9fHZ4fvz8enf+//1+eXl9/vx9dn7+/f54dnz9/Xp1/vz6/XZ3ff38fXZ6//7+e3h7/fv+dnz7/fp9d337+311/vv8+3t2fnz+/XV7/v79enT//vr6fXf9+/v8d3o=\n--mail.sleepy.sau.135.1476\n\n\n\nHere is a new type, I don't expect you will be able to read it at the\nmoment, but it shouldn't mess up anything else.  I'm working on the\nX viewer for it Now.\n--mail.sleepy.sau.135.1476\nContent-Type:application/x-annotate\nSubject: Wrapped by /usr/sau/mgr/demo/misc/annotate\n\neXovICdAISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA\nAAAAAAYAAAAHAAAAADgA4AAAAAcAAAAAAAAAAAAAAAAAAAAAP-AAAAAAAAAAAAwA\nAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAkAAAAIwAAAAMQBGAAAABiAAABw\nAAAD-AAAAA+AAAAD--4AAAAAAAAAAAwAAAB--gAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP-AAAAAAA\nAAAAABCAAAAQIAAAAQICBAAAACBAAfCPAAAEAgAAAHBAAAAP-4AAAAAAADgAAAwA\nAAH--4AAAAAAAD----wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAf-gAAAAAAAAAAACBAAAAgEAAAAgEEAgHjwEAgAg+A\ngAP---wAAICAgAAf+AAAAAAAAEQAH--+AAP4H8AAAAAAACAAAAQAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP-gAAAAAA\nAAAAAEAgAAAgCAAABAEEAQIUIIAgA+B8gAQAAAIAAQENQAA-4AAAAAAAAIQAIAAB\nAAfAA+AAAAAAACAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAGDgAAAAAAAAAAAIAQAABACAAABACIAQTJkIAQAB8D\n4AQAAAIAAQISQAB-4AAAAAAAAIQAIAABAA8AAPAAAAAAACfvvwQAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAChgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDgAAAAAA\nAAAAAQAIAABABB48CACIAIWrUQAQH--4HAf---4AAgIIgAD-wAAAAAAAAQgAIwwx\nAB4AAfgAAAAAACAAAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACgQAAAAAAAAAAA\nAAAAAAAAAAAAAAP4AAAAfwAADg-gAAAAAAAAAgAEAABAAiFCEACIAEXr0gAQEAAH\nwgIAAAQAAokEYAH-wAAAAAAAARAAJJJJADwAA-wAAAAAAC---8QAAABAAAAAAAAA\nAAAAAAAAAAAAAAAAAAChgAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAgIAADhAQAAAA\nAMAAA8A+AABAAkyZEACIAFzJkgAQEkkkvAJJJJQBBFEEEAH-wAAAAAAAARAAJJJJ\nADgAB9wAAAAAACgAAGQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAAAAAAAAAA\nAAAAAAAAAAAAAAgCAAABAEAADiAIAA3-3+AAAcA-AABAAVq1IACIAGIULAAQEkkk\noAJJJJQCpNkE4AH-wAAAAB---ggAJJJJAHgAD54AAAAAACgAAHQA---8AAAAAAAA\nAAAAAAAAAAAAAAAAAAC4AAAAAAAAAAAAAAAAAAAAAAAD----wH----gP7sAHAP2q\n3-AAAMA-AABAB969IACIAIHjwgAQEkkkoAJJJJQCVAEJAAH-wAAAACAAAQgAJI5J\nAHAAHw4P----wCn8AFwAQAEIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA\nAAAAAAAAAAAEAAAAIIUAAUQQDgAAgfv-v-AAAEA4AABAGEyZ4ACIAwAAAQAQEkkk\noAJJJJQBFAESAAH-4AAAACAAAAfAJJFJAHAAPg4IAAAAQOgAAEwAP--wAAAAAAAA\nAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAEAAAAIIiAAiQQAAAAgH1V\nf+AAAEA4AAAg4CFCH4EEHAAAAPAgEkkkoAJJJJQDInDiABP-8AAAAB---AAAJJFJ\ngPAAfA8KwAAFQKn2AEYAEAQgAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA\nAAAAAAAAAAAEAAAAIIUAAUQ----4gH---+AAAEA4AAAhAB48AGEEIB--+AwgEkkk\noAJJJJQEEjCCAD--+AAAAAAgAgAAJKJKQOAA+AcIAAAPwagAAEMACBxAAAAAAAAA\nAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAEAAAAIIKgCoRAAAAEgH--\n-gAAAEA4AAAmEAAACBEE0P---xIgEkkkoAJJJJQDiQAEAH---AAAAAAgAwAAJKJM\nQOAB8AcLQAAHQ6gAAH8ABDqAAAAAP-----gAAAAH-----wAAAAD-----4AAAAB--\n---8AAAAAAAEAAAAIIBQFARAAAAEgP--8AADgH-4DAAoIAAABAkFH-----EgEkkk\noAJJJJQARoAEAP-D8gAAAAAf-MAAcyI4QOAD4AcIAAAPwqnvvwEAAj8AAAAAQAAA\nAAwAAAAIAAAAAYAAAAGAAAAAMAAAACAAAAAGAAAAAAAEcAAAIICIIgRAAAAEgP9E\nAAAFgD-4CgAocAAACgkFH-4IP-EgEkkkoAJJJJQAIEAIAH+B4QAAAAAIBAAAiEIQ\ngOAHwAcIAW0FQqgAAAEAAT4AAAAAvAAAAAQAAAATgAAAAIAAAANwAAAAEAAAAE4A\nAAACAAAAAAAEiAAAIIBQFARAAAAEgNdEAAAJgB-4CQAoT-AAMgkFD-wAH+EgEkkk\noAJJJJQAEAAIAD+AwIAAAAAIBAAAiEQhAOAPgAcIAAAAQqn79-EAAJwAAAAA1gAA\nAAIAAAAWwAAAAEAAAAL4AAAACAAAAFEAAAABAAAAAAAEiAAAIIAoKARAAAAEgask\nAAAR-gAH+IAYAA--wAoDB-8Af8FAEkkkoAJJJJQADgAIAB-AQEAAAAAH+AAAiERC\nAOAfAAcIAdcAQqgAAAEAAEgAAAA4qjjgAAIAAAAdRxwAAEAAAAf444AACAAAAGCc\ncAABAAAAAAAFj---oIAHwARAAAAEgdcIAAAgAwAEAEAXAAAAADIC4D--+AZAEkkk\noAJJJJQAAQAIAA+AICAAAAAEEA-BEISFgPA+AA8IAAAAQqm-feEAADAAAAAk1RjB\nAAMAAAAaoxggAGAAA--8YwQADAAAAECMYIABgAAAAAAEiAAfIIAGwAQgAAACgavw\nAABAA4AEACAQ-AAAAMICH4AAABhAEkkkoAJJJJQAAQAEEAcAEBAAAAAEEDABEIUJ\nQHB8AA4IABoAQqgAAAEAADAAAAAiqxVCjkEAAAAdYqhRyCAAAgAEVQo5BAAAAECK\noUcggAAAAAAEiAANIIAEQAQgAAACg1YAAACAA4AEABAIA4AAAwQBAHAAAGCAEkkk\noAJJJJQAAIAECAIACAgAAAAD4cABEQYSQHD4AA4IAAAAQqn79-EAADAAAAAj1RJE\nREEAAAAaokiIiCAAAmQcSRERBAAAAHiJIiIggAAAAAAEcAANIIAEQAQgAAACg64A\nAAEAA4AEAAgEAGAAPAgAgAwAB4EAEkkkoAJJJJQAAIADCAAABAQAAAAAHgABEQAk\nQHnwAB4IAAAAQrgAAAEAADAAAAARqxJEREEAAAAdYkiIiCAAAgq0SRERBAAAAHiJ\nIiIggAAAAAAEAAAdoIAP4AQgAAACg1YAAAEAA4AEAAwCBB--wBAAQIP-+AIAEkkk\noAJJJJQAAEAA2AAAAgIAAAAAAAABDgBIgDvgABwIAAAAQonf-eEAADAAAAAQ1RBH\nxEEAAAAaogj4iCAAAQHMQR8RBAAAAciII+IggAAAAAAEAAAAIIAP4AQgAAAChqwA\nAACAA4AEABwBBAAAGCAAIIAAAwQAEkkkoAJJJJQAAEAAKAAAAQEAAAAAAAAAgAAx\nAD-AADwP----wogAAAEAADAAAAAOaxBEREkAAAAdYgiIiSAAAT4MQRERJAAAAciI\nIiIkgAAAAAAEAAAAIIAP4AQgAAACh1wAAABAA4AEADwB4gQIEeAAPECBAjwAEkkk\noAJJJJQAACAACAAAAICAAAAAAAAAgAADAB+AAHgAAAAAAom-f3EAADAAAAAfVRBE\nRHEAAAAaogiIjiAAB8AUQRERxAAAAEiIIiI4gAAAAAAEAAAAIIAO4AQQAAABh-wA\nAAAgA4AEAHgGHgQIHhgAw8CBA8MAEkkkoAJJJJQAABAAEAAAAEBAAAAAAAAAgAAF\nAA8AAPAAAAAAAogAAAEAADAAAAAVSxBETgEAAAAdYgiJwCAABgAkQRE4BAAAAEiI\nIicAgAAAAAAEAAAAIIAO4AQQAAABg-gAAAAR-4AH+PAYAwQIEAYDAGCBAgDAEkkk\noAJJJJQAAAwAIAAAACAgAAAAAAAAQAAJAAfAA+AAAAAAAogAAAEAADAAAAAUNRBE\n4AcAAAAaogicAOAAB--EQROAHAAAAEiIInADgAAAAAAEAAAAIIAMYAQQAAABgAAA\nAAAJ-4AD+eAlIoQIESkEpFCBAiUgEkkkoAJJJJQAAAMAQAAAABAQAAAAAAAAQAAR\nAAP4H8AAAAAAAo----8AADAAAAASKxBOADwAAAAdYgnAB4AABAAEQTgA8AAAAEiI\nJwAeAAAAAAAEAAAAIIAP4AQQAAABgAAAAAAF-4AB+8BJJIf4OSSJJJD-BySQHDDD\nIAOGGGQAAADhgAAAAAgIAAAAAAAAIAAlAAH--4AAAAAAAoAAABAAAMwAAAAKNRDg\nAcAAAAAaohwAOAAABgAEQ4AHAAAAAGCIcADgAAAAAAAEAAAAIIAAAAQQAAABgAAA\nAAADwH-gD4A22EEgRtsG2wgkCNtgEAAAIAIAAAQAAAAeAAAAAAQEAAAAAAAAIABA\nAAB--gAAAAAAAoAAABAAAwMAAAAJGzgAHgAAAAANZwADwAAAAgA84AB4AAAAADCc\nAA8AAAAAAAAH----4P----wf----gAAAAAABwEAwDwAAAIkkQAAAABEkiAAAD---\nwAH---gAAAAAAAAAAAICAAAAAAAAEACAAAAP8AAAAAAAAoAAABAAD--AAAABFQAB\n4AAAAAAmoAA8AAAAAgDkAAeAAAAAABiAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAwEA4DgAAASYZIAAAACTDJAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAA\nAAAAAAAAAAAAAv----AAAAAAAAAAkwA-AAAAAABzYAfgAAAAAg9kAPwAAAAAAAyA\nH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA4DAAAANgGwAAAABsA2AAAAAAA\nAAAAAAAAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAgAAAEAAAAAAAAAAzQHh\nAAAAAABZoDwgAAAAAng0B4QAAAAAAAaA8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAEA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAA\nAAAAAAAAAAAAA----8AAAAAAAAAAawcRAAAAAADM4OIgAAAAA4AcHEQAAAAAAAOD\niIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA4AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPRiR\nAAAAAACGQxIgAAAAAAAMYkQAAAAAAAEMSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAEA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+CRAAAAAAGDPBIgAAAAAAAHgkQAAAAAAADw\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8A-gAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACR\nAAAAAAEBgBIgAAAAAAAAAkQAAAAAAAAASIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAgAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAAAAMAwBIgAAAAAAAAAkQAAAAAAAAA\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAPAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACR\nAAAAAAIAwBIgAAAAAAAAAkQAAAAAAAAASIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAIAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAAAAYAwBIgAAAAAAAAAkQAAAAAAAAA\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA8AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACR\nAAAAAAQAgBIgAAAAAAAAAkQAAAAAAAAASIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAACB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAAAAQBgBIgAAAAAAAAAkQAAAAAAAAA\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDwAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaR\nAAAAAAYBFNIgAAAAAAACmkQAAAAAAABTSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSRAAAAAAIDDJIgAAAAAAABkkQAAAAAAAAy\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALSR\nAAAAAAMGFpIgAAAAAAAC0kQAAAAAAABaSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdyRAAAAAAGcO5IgAAAAAAAHckQAAAAAAADu\nSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADyR\nDAAAAADwB5IhgAAAAAAA8kQwAAAAAAAeSIYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaReAAAAAAAAtIvAAAAAAAAWkXgAAAAAAAL\nSLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPuR\nswAAAAAAH3I2YAAAAAAD7kbMAAAAAAB9yNmAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOGTwQAAAAAAHDJ4IAAAAAADhk8EAAAAAABw\nyeCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGT\nQAAAAAAAEDJoAAAAAAACBk0AAAAAAABAyaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXgAAAAAAAABLwAAAAAAAAAl4AAAAAAAAA\nS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACW\nAAAAAAAAABLAAAAAAAAAAlgAAAAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVAAAAAAAAABqgAAAAAAAAA1QAAAAAAAAA\naoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5\nAAAAAAAAAA8gAAAAAAAAAeQAAAAAAAAAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAYAAAAAAAAAAMAAAAAAAAAA\nGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB-gAAP---------------------\n-------------wAAAAH-4AAAAADwB4AAAPAHgAAA8AeAAAAAAAAAAAAAAAAAAAAA\nAAAB-wAAAAAAAAAAAAA-wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAf-8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA4AHAAAAAP8H+AA\nA-wc4AADnB-gAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAH-+AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB--+AAn---------------------\n-------------sAAAHATg4AAAAf+P-AABvY88AAHnjewAAAi97zj3vAAAARe95x7\n3gABGQAEXvece94AAAf--gAAHwAAAAB+AAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAD---AAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAYA0wGAAAA--f-gA\nDGN-+AAP-2MYAAA2hCEUUIAAAAbQhCKKEAABGQAG0IQiihAAAA-gfwAAIIAAAACB\nAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP---AAt3d3d3d3d3d3d3d3d3d3d3\nd3d3d3d3d3d3d8AABgBwwBgAAA--f-gADvd-+AAP-3e4AAAqhCEUEIAAAAVQhCKC\nEAABAQAFUIQighAAAB8AD4AAQEAAAAEAgAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAf---AAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AACAAxgAQAAA--f-gA\nD-9PyAAJ+X-4AAAi57303PAAAARc976bngABAQAEXPe+m54AADwAA8AAQCAAAAEA\ngAAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB----AAvd3d3d3d3d3d3d3d3d3d3d\n3d3d3d3d3d3d3cAANCAzABMAAA--f-gAD-9PyAAJ+X-4AAAigIUUUBAAAARQEKKK\nAgABAQAEUBCiigIAAHgAB+AAQPwAAAMAwAAAcDgAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAD---+AAu---------------u-----------u-----u0AATGB2QDCAAA--f-gA\nDvd-+AAP-3e4AAAigIUUUBAAAARQEKKKAgACAgAEUBCiigIAAPAAD-AAQQoAAAUA\noAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAH---8AAt4AAAAAAAAAAAAADdAAAAA\nAAAAABdgAAAA98AAnOD7wHBAAI--f-gAjGN-+ACP-2MYAAAi970TnvAAAARe96Jz\n3gAD-gAEXveic94AAOAAH3AAQ-4AAAoAUAAB-P4AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP---4AArz-------------56f---------97P---+b0ABDGH8ADAgAIf+P-AA\nhvY88ACHnjewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAPngAQjoAAAoA\nUAABNLIAAAAAAAAAAAAAAAAAAAAAAAAAAAAf---wAAvUAAAAAAAAAAAAAH2gAAAA\nAAAAAC3QAAAB3cACDGH8ADAQAMP8H+AAw-wc4ADDnB-gAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAcAAfDgAQjkAAAwAMAABNLIAAAAAAAAAAAAAAAAAAAAAAAAA\nAAA-----8Au0AAAAAAAAAAAAAFugAAAAAAAfgDvQAAABe0AEDHH8ADAIAPjwB4AA\n+PAHgAD48AeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdxn+bgAQRCAAAQA\nIAAAiEQAAAAAAAAAAAAAAAAAAAAAAAAAAAB----4Dwt0AAAAAAAAAAAAAHegAAAA\nAABp4C9QAAAB98AIHvj4AHgEAP---+AA----4AD----gAH---------+D-------\n---AAA----------w9KR+nwAQOBAAAgAEAABcDoAAAAAAAAAAAAAAAAAAAAAAAAA\nAAD----4EIr0AAAAAAAAAAAAAF6gAAAAAAH5eD7QAAABb0AQAf38AAACAP6qqrAA\n-qqqsAD+qqqwAH---------+D----------AAA----------w5KT6hwAQAAgAAgA\nEAABAAIAAAAAAAH-----wAAAAD-----4AAH-w--8AwvUAAAAAAAAAAAAAH2gAAAA\nAAKprC3QAAQB3cAQAf--AAACAMVVVVAYxVVVUBjFVVVQGGAAAAAAAAAGDAAAAAAA\nAADAAAwAAAAAAAAAw5KXyRwATAAQABAACAACAAEAAAAAAAMAAAAAYAAAAEAAAAAM\nAAP8A--8PAu0AAAAAAAAAAAAAFugAAAAD-3Z3jvQAAIBe0AgAf--gAABAIaqqrA4\nhqqqsDiGqqqwOGAAAAAAAAAGDAAABAAAAADAAAwAAABAAAAAw5yfyJwAUAAQABAA\nCAACgAUAAAAAAAbgAAAAIAAAAJwAAAAEAAPAA--+wAt0AAAAAAAAAAAAAHegAAD-\n8A6pqi9QABEB98BI4P+EgAA4gIVVVV-4hVfVX-iFV9Vf+GAAAAAAAAAGDAPOBAAA\nAADAAAwAAABA4AAAw5KfSFwAIAAIACAABAAEAACAAAAAAAXwAAAAEAAAALYAAAAC\nAAcAA---AAr0AAAAAAAAAAAAAF6gAf8AAA95dz7QAQkBb0BZMHczQABMgAaqqr-4\nBvq+v-gG+r6-+GAAAAAAAAAGDAwzggAAAADAAAwAAACDh4AAw5K+SFwAIAAIACAA\nBAAFAAKAAAAAAA-xxwAAEAAAAOo44AACAAwAA--+AAvUAAAAAAAAAAAAAH2gVQAA\nAA6pqy3QAySB3cC5MA9MwAAMQAVVVV-4BVdVX-gFV1Vf+GAAAAAAAAAGDBAMwAAA\nAADAAAwAAAAGGf8Aw5L8SlwAQAAIAEAAAgAIAABAAAAAB--4xggAGAAAANUYwQAD\nAAAAAf-4AAu0AAAAAAAAAAAAAFug-wAAAA3Z3bvQHRSBe0CZMA9dwAAYQAaqqr-4\nBuq+v-gG6r6-+GAAAAAAAAAGDAACIwAAAADAAAwAAAGIYSEAw9z-MbwAQAAIAEAA\nAgAIAABAAAAABAAIqhRyCAAAAOsVQo5BAAAAAP-wAAt0AAAAAAAAAAAAAHevVQAA\nAA6pqq9QFVSB98EZMA9d4AAwIAVVVVA4BVfVUDgFV9VQOGAAAAAAAAAGDAADEQAA\nAADAAAwAAAEQgRkAwcHwADgAQAAIAIAAAQASAAEgAAAABMg4kiIiCAAAANUSRERB\nAAAAAf-gAAr0AAAAAAAAAAAAAF6vVQAAAA95d77QFVSBb0EZMA8zOABkIAaqqrAY\nBvq6sBgG+rqwGGAAAAAAAAAGDAAAiQAAAADAAAwAAAEhgRkAwcPgADgAQAAQAIAA\nAQAQAAAgAAAABBVokiIiCAAAAOsSRERBAAAAA--AAAvUAAAAAAAAAAAAAH2vVQAA\nAA6pqq3QFVSB3cE84AaIOAB8IAVVVVAABVVXUAAFVVdQAGAAAAAAAAAGDAAASQAA\nAADAAAwAAAEiAQEAwefAAHgAQAAQAIAAAQARAAAgAAAAAgOYgj4iCAAAANUQR8RB\nAAAAB-+AAAu0AAAAAAAAAAAAAFuvVQAAAA3Z3bvQHRSBe0IAAAYQOAAAEAaqqrAA\nBqqqsAAGqqqwAGAAAAAAAAAGDAAAaQAAAADAAAwAP+EkAQEAwO+AAHAAI4AgAIAA\nAQAQgAQgAAAAAnwYgiIiSAAAAOsQRERJAAAAD-+AAAt0AAAAAAAAAAAAAHeg-wAA\nAA6pqq9QAySB98IAAAIoEAAAEAf---AAB---8AAH---wAGAAAAAAAAAGDAAAKQAA\nAADAAAwAICEoAQEAwP8AAPAAHuDAAH88-gAPYBvAAAAAD4AogiIjiAAAANUQRERx\nAAAAH-+AAAr0AAAAAAAAAAAAAF6gVQAAAA95dz7QAQkBb0IAAAEOYAAAEAABwAAA\nAAHAAAAAAcAAAGAAAAAAAAAGDAAAP+AAAADAAAwAIz-oAgIAwH4AAeAABJ8AAAJC\nQAAAX+gAAAAADABIgiJwCAAAAOsQRE4BAAAAP++AAAvUAAAAAAAAAAAAAH2gAf8A\nAA6pqy3QABEB3cQACADPgAAACAAD4AAAAAPgAAAAA+AAAGAAAAAAAAAGDAAA8DgA\nAADAAAwAI-I4A-4AwDwAA8AABJAAAAJCQAAASEgAAAAAD-+IgicAOAAAANUQROAH\nAAAAf88AAAu0AAAAAAAAAAAAAFugAAD-8A3Z3jvQAAIBe0QABAB-AAAACAAGMAAA\nAAYwAAAABjAAAGAAAAAAAAAGDAABAAwAAADAAAwAIwBMAAAAwB8AD4AABJAAAAJC\nQAAASEgAAAAACAAIgnAB4AAAAOsQTgA8AAAA-48AAAt0AAAAAAAAAAAAAHegAAAA\nD-6pqi9QAAQB98QABADqgAAACAAMGAAAAAwYAAAADBgAAGAAAAAAAAAGDAAGAAIA\nAADAAAwAJgACAAAAwA-gfwAABH2AAB5CeAADyE8AAAAADAAIhwAOAAAAANUQ4AHA\nAAAB-w0AAAr0eDwAAAGAAAecAF6gAAAAAAN5dD7QAAABb0TgCAH-wAAByAAYDAAA\nABgMAAAAGAwAAGAAAAAAAAAGDAAIAAEAAADAAAwAKAABAAAAwAf--gAACINgAGQk\nJgAMJJDAAAAABAB5wADwAAAAAGs4AB4AAAAD-gHwAAvUODgAAAOAAAOcAH2gAAAA\nAAGpuC3QAAAB3cUwEAH-wAACaAAwBgAAADAGAAAAMAYAAGAAAAAAAAAGDAAQAeCA\nAADAAAwAUAAAgAAAwAH-+AAAEACQAIAYAQAQAwAgAAAABAHIAA8AAAAAATUAAeAA\nAAAAAAP4AAu0OHgAAAOAAAMAAFugAAAAAAB54DvQB-wBe0UwEAP-4AAAaABgAwAA\nAGADAAAAYAMAAGAAAAAAAAAGDDgxgjDAAADAAAw4cAACwAAAwAA-wAAAH--wAP--\n-wAf---gAAAABB7IAfgAAAAAA5sAPwAAAAAAAAAIAAt0fPH32AXDnB94PHegAAAA\nAAAfgC9QCAIB98TwIAP-4AAByADAAYAAAMABgAAAwAGAAGAAAAAAAAAGDEQjwhhD\n8ADAAAxEIAAAw-AAwAAAAAAAAAAAAAAAAAAAAAAAAAAABPBoDwgAAAAAAs0B4QAA\nAAAAAAAAAAr0XXO5+AnHnGc47l6gAAAAAAAAAD7QE-kBb0QwIAP-4AAAaAGAAMAA\nAYAAwAABgADAAGAAAAAAAAAGDIZiYsgkCADAAAyGYAAAJAgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAABwA4OIgAAAAABmcHEQAAAAA-----4AvUXnM5wAnDnOY5zn2f----\n-----+3QFAcB3cUwIAP-4AACaAMAAGAAAwAAYAADAABgAGAAAAAAAAAGDQJkIsgk\nBADAAA0CcAAAJAQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYxIgAAAAABDIYkQAA\nAAA-----4Au0XmMxgB-jGc4xzlvVVVVVVVVVVVvQFAUBe0TgMAX-0AAByAYAADAA\nBgAAMAAGAAAwAGAAAAAAAAAGDQFE4QgUBgDAAA0BQAAAFAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAPBIgAAAAADBngkQAAAAA-----4At0jOHjgCDnOc5xznd-----\n------dQFAcB98QAHBw8EAAACAwAABgADAAAGAAMAAAYAGAAAAAAAAAGDQHE0QgY\nAgDAAA0AwAAAGAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAACAwAkQAA\nAAAAAAAAAAr0iOGDgGDned993F7u7u7u7u7u7u7QFAUBb0QAD-wAkAAACBgAAAwA\nGAAADAAYAAAMAGAAAAAAAAAGDQHCFNAIAgDAAA0AwAAACAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABIgAAAAAGAYAkQAAAAAwGCDMAAvVyfHDgPPzvOZw8H3d3d3d\n3d3d3d3QFAcB3cIAA-QJUAAAEHAAAAcAcAAABwBwAAAHAGAAAAAAAAAGDQCDNHAJ\nggDAAA0AgAAAKAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAAEAYAkQAA\nABA4OHDMAgu0AAbgAAAAAAAAAFu7u7u7u7u7u7vQFAUBe0IAAAQVUAAAEGAAAAMA\nYAAAAwBgAAADAGAAAAAAAAAGDR6B5gAFQgDAAA0AgAAAFAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABIgAAAAAMAYAkQAAABA8eHDMAgt0AAxwAAAAAAAAAHd3d3d3\nd3d3d3dQFAcB98IAAAJUoAAAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDTMAAgAC\nYgDAAA0AgAAADAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIgAAAAAIAQAkQAA\nAHw++NjMD4r0AA5wAAAAAAAAAF7----------+7QFAUBb0EHAALoIAAEIAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDTGEAgABIgDAAA0AgAAADAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABIgAAAAAIAwAkQAAADg32NjMBwvUAAfgAAAAAAAAAH3AAAAA\nAAAAAB3QFAcB3cEMgAHgwAAMIAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDQ2CAQED\nIgDAAA0AgAAABAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNIgAAAAAMAimkQAA\nACgzmfzMBQu0AAAAAAAAAAAAAFuf---------9vQFAUBe0EOgAD-wAAcIAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDYPCAYMBYgDAAA2AwAAABAIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAADJIgAAAAAEBhkkQAAAEQxGfzMCIt0AAAAAAAAAAAAAHegAAAA\nAAAAAC9QFAcB98CHAADhwAAsQAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDIBBAIIA\nggDAAAyAQAAABAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpIgAAAAAGDC0kQAA\nAAAwG4bP4Ar0AAAAAAAAAAAAAF6gAAAAAAAAAD7QFAUBb0CLgADhwABMQAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDIBBgIICAgDAAAyAQAAAAgIAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAO5IgAAAAADOHckQAAAAAwGwbP4AvUAAAAAAAAAAAAAH2gAAAA\nAAAAAC3QFAcB3cBJgADhwAB+gAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDIDAhwYC\nBgDAAAyAwAAABgIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5IhgAAAAB4A8kQwA\nAAAAAAAAAAu0AAAAAAAAAAAAAFugAAAAAAAAADvQFAUBe0BHAADhwAAMgAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDECgwAQCBADAAAxAoAAABgQAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAtIvAAAAAAAAWkXgAAAAAAAAAAAt0AAAAAAAAAAAAAHegAAAA\nAAAAAC9QFAcB98AgAADh-AABAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDEGgYAwF\nDADAAAxBoAAABQQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3I2YAAAAAAD7kbMA\nAAA-----4Ar0AAAAAAAAAAAAAF6gAAAAAAAAAD7QFAUBb0AQAAH90gACAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDGIQMBgE+ADAAAxiEAAABPgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAHDJ4IAAAAAADhk8EAAAA-----4AvUAAAAAAAAAAAAAH2gOqv4\nAAAAAC3QFAcB3cAQD4LqoXwCAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDDwYHHAI\nAADAAAw8GAAACAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDJoAAAAAAACBk0AA\nAAA-----4Au0AAAAAAAAAAAAAFugRVQIAAAAADvQFAUBe0AIDYJRAWAEAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAMB8AQAADAAAwADAAAF-gAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABLwAAAAAAAAAl4AAAAAAAAAAAAt0AAAAAAAAAAAAAHeghVQP\n---wwC9QFAcB98AEAYIBAXgIAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAGAAAg\nAADAAAwABgAAKAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAAAAAAAAlgAA\nAAAAAAAAAAr0AAAAAAAAAAAAAF6ghVQIAADLID7QFAUBb0ACAwEBggwQAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAABgADAAADAAAwAAYAAyMgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAABqgAAAAAAAAA1QAAAAAAAAAAAAvUAAAAAAAAAAAAAH2hBVQI\nAADEEC3QFAcB3cABBgCCfAwgAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAYAMA\nAADAAAwAAGADCMgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8gAAAAAAAAAeQAA\nAAAAAAAAAAu0AAAAAAAAAAAAAFuhjVUYAADACDvQFAUBe0AAhgB+AExAAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAAGBwAAADAAAwAABgcCAgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAYAAAAAAAAAAMAAAAAAAAAAAAAt0AAAAAAAAAAAAAHehBVQI\nAADeKC9QFAcB98AARgAZADiAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAF+wA\nAADAAAwAABfsCAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAAAAAAAF6hVVav---k0D7QFAUBb0AAMAAYAAMAAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAAEAQAAADAAAwAABAECAgAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAH2ghVQI\nAADLIC3QFAcB3cAACAAeAAQAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAEAQA\nAADAAAwAABAEEBAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAuz-------------9ugrVVf---wwDvQFAUBe0AABgAbABgAAAAAAAAA\nAAAAAAAAAAAAAGAAAAAAAAAGDAAAIAIAAADAAAwAACACH-AAwAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt6qqqqqqqqqqqqqregVVao\nAAAAAC9QFAcB98AAAYAbAGAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAGDAAAIAMA\nAADAAAwAACADAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAArv-------------+6gOqv4AAAAAD7QFAUBb0AAAHAOA4AAAAAAAAAA\nAAAAAAAAAAAAAH---------+D----------AAA----------wAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvd3d3d3d3d3d3d3d2gAAAA\nAAAAAC3QFAcB3cAAAA4AHAAAAAAAAAAAAAAAAAAAAAAAAH---------+D-------\n---AAA----------wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu7u7u7u7u7u7u7u7ugAAAAAAAAADvQFAUBe0AAAAH-4AAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3d3d3d3d3d3d3d3egAAAA\nAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAru7u7u7u7u7u7u7u6gAAAAAAAAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf-------------92gAAAA\nAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu4AAAAAAAAAAAAADugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz-------------5ef----\n-----+9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAAAAAAAH7VVVVVVVVVVV7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF3-----\n------3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAAAOAAAAHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAAARgAAAFd3d3d3\nd3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAAgQAAAH7u7u7u7u7u7u7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAABBQAAAF3d3d3d\n3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAACCgAAAHu-----------vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAACEAAAAFdAAAAA\nAAAAABdQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAMEAAAAH6f---------97QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAeAwIAAAAF2gAAAA\nAAAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAhjAEAAAAHugAAAAAAAAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAABAUACAAAAFegAAAA\n+AAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAABAcBhAAAAH6gAAAD-gAAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAACcABhAAAAF2gAAAP\n-4AAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAACiAAAgAAAHuv---------7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAADBgAAQAAAFetSAgA\nQACAla9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAQwAQAAAH6qoiIQAQIiKr7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAQwAIAAAF2v----\n-----63QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAIAAIAAAHuhwAAAAAAADDvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAAIAGEAAAFegMP4H\n-wP4cC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAIAPEAADH6gDn+P-4-zgD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAEAPEAAEl2gAY-P\n-5+MAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAACAHIAAEnugAHPH-x5wADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0AAAAAABgAyAAElegAAxj\n-jGAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0AAAAAAAeAhgAEn6gAAOB-A4AAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAABxAQAIl2gAABp\nJLAAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAAAOAIAInugAAD---gAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0D-----4CAAEAJFegAACk\ngSgAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0EAAAAAECAACAJH6gAADQAFgAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUF-----0CAADARF2gAACk\nESgAAC3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FVVVVVUBAABgRHugAAD---gAADvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0F--v-60BAABgRFegAAAA\nAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FQBUANUBAABwRH6gAAAAAAAAAD7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFwBsAK0BAABwRF2f----\n-----+3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FQBUANUBAAAwRHvVVVVVVVVVVVvQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0Fz---q0BAAA4SFd-----\n------dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FT---tUBAAA8iH7u7u7u7u7u7u7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFzAABq0AgAAciF3d3d3d\n3d3d3d3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FTAABtUAgAAeiHu7u7u7u7u7u7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0F-AABq0AgAAOiFd3d3d3\nd3d3d3dQFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FXAABtUAgBAPCH7----------+7QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAAB60AgBAHCF3AAAAA\nAAAAAB3QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FXAAB1UAgghHkHuf---------9vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0FrAABq0AQghDkFegAAAA\nAAAAAC9QFAcB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FXAAB1UAQggh0H6vgAAAAAAAD77QFAUBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFrAABq0AQgQg0F2v8AAA\n+AAAf63QFAcB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FXAAB1UAQgQgUHuv-gAD-gAD-7vQFAUBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0FrAABq0AQwQgIFev-8AP\n-4Af-69QE-sB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0FXAAB1UAQwQQIH6j--j---j--j7QCVYBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUFr---q0AQoIQIF2sf-8A\nQAf-8a3QB-wB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0FX---1UARIIQIHuqj--gAD--irvQAAABe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0Fqqqqq0AREIQEFev8f-8\ncf-8f69QAAAB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0F-----0ARCEQEH6hwD--j--gDD7QAAABb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUEAAAAAEARCEIEF2gMMf-\n--8YcC3QAAAB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0D-----4ARBEIEHugDnj---jzgDvQAQgBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0ACAAAIAARBEIEFegAYj-\n--iMAC9QAyQB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0ABAAAQAARCCIEH6gAEf---8QAD7QHRQBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUH-----8AhEGEEF2gAD--\nj--gAC3QFVQB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0EAAAAAEAhIKEIHugAf-8cf-8ADvQFVQBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0EgggggkBBQRCwFegD--h\nJD--gC9QFVQB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0EAAAAAECCVRBAH6gf-8f-8f-8D7QHRQBb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUEEEEEEEECPhBAF2j--ik\ngSj--i3QAyQB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0EAAAAAEFKABVAHuv-8DQAFgf-7vQAQgBe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt0H-----8D8AA+AFev-gCk\nESgD-69QAAAB98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAr0B8AAAHwAAAAAAH6v8AD---gAf77QAAABb0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvUAAAAAAAAAAAAAF2vgAAA\nAAAAD63QAAAB3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu0AAAAAAAAAAAAAHugAAAAAAAAADvQAAABe0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz-------------9ef----\n-----+9P----98AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAArqqqqqqqqqqqqqqq7VVVVVVVVVVV7lVVVV70AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvf-------------93-----\n------3f----3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3d3d3d3d3d3d3d3d3d3d3\nd3d3d3d3d3d3d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAru7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u70AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvd3d3d3d3d3d3d3d3d3d3d\n3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAn----------------------------------0AAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqqqqqqqqqqqqqqqqqqqqq\nqqqqqqqqqqqqqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAP----------------------------------wAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAHAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH---wK6urq6urq6uA8\nAHgA8AHgD-gAAGAAAADAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAgOcBAB+APiABA\nAAAAAAAAAAAAD--AAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAMAABQVVVVVVVVVVUD-Af4D-Ac4EAQAAZgAAAC+AAAA-8AAAAA-\n8AAAB9AAP---------+gRiBAD-AQVAGwAAAAAAAAAAAAP--wAAPgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABwKqqqqqqqqqqH5\ngnkGfg88IAIABgYAAAEB8AAAgD-wAP-AEAAA+AgAQAAAAAAAAABAhhDgH-gTJ-4M\nAAAAAAAAAAAAfwP4AAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAB----AA8AABQVVVVVVVVVVUJ5xnmOeR-+IiIAGAGAAAIAD4AAgAAwAMAA\nEAAfAAQAQAAAAAAAAABj+f1QP-wQBAAEAAAAAAAAAAAA+AB8AAMwAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB----ABUAABwOrr+urq6urqJ-\nx-+P+R-+JVIAYABgAAQAAGAAgAAwAMAAEABgAAIAQAAAAAAAAABAhhJIf-4TJ-4M\nAAAAAAAAAAAB4EAeAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAABgAADAD8AABQVVWDVVVVVVUP-x-+P-xPyJVIBgAAYAAQAAGABAAAwAMAA\nCABgAAEAQAAAAAAAAABgRiJI0bMYdgGwAAAAAAAAAAADwKA-AAIwAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEI3YABoRuzADgAABwKqsBuqqqqqqP-\nx-+P-xPyJVIGAAAGAAgAAOABAABQAOAACABQAAEAQAAAAAAAAABAOcJIu1UP7ABA\nAAAAAAAAAAAHgBB-gAIwAAYAAAAAAAAAAAAAAAAAAAAAAAAB-4AAAAAAAAA-8AAA\nAAEVEUABoqIrACuqlJQVVUAxVVVVVUP+R-+J-x-+JVIYAAABgBAAAaABAABQAKAA\nCAB4AACAQAAAAAAAAABgAAGwu1UAAAAAAAAAAAAAAAAHAED7g---------------\n-----AAAAAAAAAAeqvgAAAAAAAPVXwAAAAEcmYABo5MzADkq1RwK+oAg6urq6uOe\nRnmJ5x-+JVIeAAAGgCAAAyABAABwAOAACAB0AABAQHVX8AAAAABAAAGw21MAAAAA\nAAAAAAAAAAAPAhHzwAJwAAXAAAAAAYAAAAAAbAAAAAAAAABwEBYAAAAAAA4CAsAA\nAAEUUUABooorACk6thQVZ4AA1VVVVUGfgnkH5g88JVIbgAAdgEAAAqACAABQAOAA\nBAB+AAAgQIqoEAAAAABgAAJI21cAAAAAAAAAAAAAAAAOCSPhwAPgAAQ4AAAEAYAA\nAAAAbAAAAAAAAAGqqquAAAAAADVVVXAAAAHVnUABurOrADkqlRwKgYAA6qqqqqD-\nAf4D-Ac4JVIf4ABqgMAABGACAACQAPAABAB+AAAwQQqoH---4YBAAAJIu7cAAAAA\nAAAAAAAAAAAOEgfBwAPgAAQHAAAEAYAAAAAAbAAAAAAAAAZERERgAAAAAMiIiIwA\nAAAAAAABgAADACkqlJQVAQAAFVVVVUA8AHgA8AHgIRIe+AHVgL4ACqACAADQALAA\nBABtAAfQQQqoEAABlkBgAAJIf-4AAAAAAAAAAAAAAAAeKA+B4APAAAQA4AAEAYAA\nAAAAbAAAAAAAAAqqqqqwAAAAAVVVVVYAAAAAAAAB----ADgAABwPAQAADqqurqAA\nAAAAAAAAIAYf-gaqgN3wESAH-gCwANAH-gB-gPuwQgqoEAABiCBAAAFQP-wAAAAA\nAAAAAAAAAAAcAB8A4AfAAAQAIAAEAYAAAAAAbAAAAAAAABAQEBAYAAAAAgICAgMA\nAAAAAAAAAAAAACgLuBQWAAAABVVVVUAAAAAAAAAAGAwbu51VgKqvqqAG7-+QAP-7\nqgB-31VwQxqqMAABgBBgAADgH-gAAAAAAAAAAAAAAAAcV--44---------------\n-----AAAAAAAACqqqqqsAAAABVVVVVWAAB---+AD---8ADgKEBwKAAAABr6r6qAA\nAAAAAAAACBgf-+qqgP--ZGAFVVWQAPVVVgBberqwQgqoEAABvFBAAABAD-AAAAAA\nAAAAAAAAAAAcLHwI4D8AAAQAIAAEAYAAAAAAbAAAAAAAAERERERGAAAACIiIiIjA\nABAAACACAAAEACgLEBQWAAABBcNcHUAAAAAAAAAABDAe7tVVgKqqqqAHu7vQAL7u\n7gB-1VVQQqqtX---yaBgAABAB+AAAAAAAAAAAAAAAAAcVPgI4H8AAAQAIAAEAYAA\nAAAAbAAAAAAAAKqqqqqrAAAAFVVVVVVgABAAACACAAAEADgqEBwMAAABCwCwBuAA\nAAAAAAAABDAf-+qqgN3d8SAFVVWwANVVVgB-66uwQQqoEAABlkBAAAAAAAAAAAAA\nAAAAAAAAAAAcLfAI4PkAAAQAIAAEAYAAAAAAbAAAAAAAARAQEBAQgAAAIgICAgIQ\nABAAACACAAEkACgTkBQUAAAD9gBgA0AAAAAAAAAABDAbu9VVgKqqqqAG7u6QAPq6\nugB21VVwQVqqv---4YBgAAAAAAAAAAAAAAAAAAAAAAAcV--44eEAAAQAIAAEAYAA\nAAAAbAAAAAAAAaqqqqqqgAAANVVVVVVQABAABiACAADEADgAABwMCBACqgAgAqAA\nAAAAAAAACBgf-+qqgP--5GAFVVWgAHVVVgB-+rqwQKqtUAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAeB8AB4cHAAAQAIAAEAYAAAAAAbAAAAAAAAkREREREQAAASIiIiIiI\nABfwBiDC-gDEGCgAABQWMBAFVBBAAUAAAAAAAAAAGAwe7tVVgKqqqqAHu7vgAH7u\n7gB-1VVQQHVX8AAAAABgAAAAAAAAAAAAAAAAAAAAAAAOD4ABw---------------\n-----AAAAAAAAqqqqqqqwAAAVVVVVVVYABAAACOCAAEkcP----8L0BgLqBAAAaAA\nAAAAAAAAD-gf-+qqgN3d8SAFVVWgAFVVVgBt66uwQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAOHwABw4-4AHwAIAAEAYAAAAAAbAAAAAAABBAQEBAQIAAAggICAgIE\nABfwAC4C-gAFwKAAAAUVUBR1+BAAAUAAAAAAAAAAAiAbu9VVgKqqqsAG7u6gAHur\nqgA-1VVwQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAPPgADwx-4APwAIAAEAYAA\nAAAAbAAAAAAABqqqqqqqoAAA1VVVVVVUADAAADgGAAAHAK3uwAUKqCurCCgAAKAA\nAAAAAAAAAiAf-+qqgP--5IAFVVWgAHVVVgAberqwQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAHfAADgxycAfwAIAAEAYAAAAAAbAAAAAAADEREREREUAABiIiIiIiK\nADfwACAG-gAEAKHgAAUVVFVUCCgAAMAAAAAAAAAAAiAe7tVVgKqqqwAHu7vAAD7u\n7gAP1VVQQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAH+AAHgxiMAfgAIAB8AYAA\nAAAAbAAAAAAACqqqqqqqsAABVVVVVVVWABAAACACAAAEAKAAAAUOq66oBEQAAOAA\nAAAAAAAAAiAH-+quAN3d8gAFVVXAADVVVgAH66uwQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAD8AAPAxiMAPAAIADMAYAAAAAAbAAAAAAACBAQEBAQGAABAgICAgIC\nAB---+AD---8AKAAAAUVVVVYAEQAAMAAAAAAAAAAAiABu9VYAOqqqgAG7u7AADq6\nugAG1VVwQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAB4AAeA---------------\n-----AAAAAAACqqqqqqqqfABVVVVVVVWAAQAAIAAgAAQAL----0Kqq-4AIIAAKAA\nAAAAAAAAAiAAf+rgAD--5AAFVVXAADVVVgAD+r-AP----------AAAAAAAAAAAAA\nAAAAAAAAAAAA+AB8AxiMAAAD4AGYAYAAAAAAbAAAAAAAFERERERETgACiIiIiIiJ\nAAQAAIAAgAAQAIAAAAEVVVgIAIoAAMAAAAAAAAAAAiAAHtWAAAH6qAAH-7uAAB7v\n-gAB1fgAKqqqqqqqqqqgAAAAAAAAAAAAAAAAAAAAAAAAfwP4AYyMAAAH4ADwAYAA\nAAAAbAAAAAAAGqqqqqqqqAADVVVVVVVVAAf--4AA---wAIAAAAEK6vAEAIoABqAA\nAAAAAAAAAiAAB+4AAAAP8AAAAf+AAB-4AAAA-wAAf----------gAAAAAAAAAAAA\nAAAAAAAAAAAAP--wAYSYAAAP4AAAAYAAAAAAbAAAAAAAEBAQEBA8EAACAgICAgID\nAAAAAAAAAAAAAH----4VVWACAJIAAUAAAAAAAAAAAiAAAdgAAAAAYAAAAAAAAAAA\nAAAAYAAAd3d3d3d3d3dgAAAAAAAAAAAAAAAAAAAAAAAAD--AAMCYAAAPwAAAAYAA\nAAAAbAAAAAAAGqqqqqrDoAADVVVVVVVVAAAAAAAAAAAAADAAAAwKqsAAAEQCAKAA\nAAAAAAAAAiAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAbu7u7u7u7u7gAAAAAAAAAAAA\nAAAAAAAAAAAAAf4AAHDwAAAHgAAAAYAAAAAAbAAAAAAAFERERESAoAACiIiIiIiJ\nAAAAAAAAAAAAAAAAAAAVVUAAADgCAMAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAXd3d3d3d3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------------\n-----AAAAAAAGqqqqvkAQAADVVVVVVVVAAAAAAAAAAAAAAAAAAAO-sAAAAACAGAA\nAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO7u7u7u7u7ugAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAD+BAQEQcAIAB-AgICAgID\nAAAAAAAAAAAAAAAAAAAVgeAQAAAFAEAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAf----------gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAEDqqqqgIAIACB1VVVVVVVAAAAAAAAAAAAAAAAAAAOABgQAAAFAGAA\nAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADhAAAAAAAAAAAAH8AAAAAAAAAAIAkRERgQAIAEASIiIiIiJ\nAAAAAAAAAAAAAAAAAAAUAAAQAAAJAEAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAP---------+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxAAAAAAAAAAAAM\neAAAAAAAAAAAASqqrAgAAAAAJVVVVVVWAAAAAAAAAAAAAAAAAAAMAAAoAAAIgGAA\nAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAHxAAAAAAAAAAAAcPAAAAAAAAAAAALwQFAgAAAAAF4ICAgIC\nAAAAAAAAAAAAAAAAAAAYAAAoAAAIgEAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxAAAAAAAAAAAB-\n-wAAAAAAAAAAAMOqrAgAAAAAGHVVVVVWAAAAAAAAAAAAAAAAAAAIAABIAAAUQGAA\nAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAfAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADiAAAAAAAAAAAAeHAAAAAAAAAAAAIDERAgAAAAAEBiIiIiK\nAAAAAAAAAAAAAAAAAAAYAACIAEAUQEAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAAB-wAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAP\n+AAAAAAAAAAAAAA6rAAAAAAAAAdVVVVWAAAAAAAAAAAAAAAAAAAQAACIAEASQGAA\nAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAH-8AAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEgAAAAAAAAECAgIE\nAAAAAAAAAAAAAAAAAAAQAAEEAEAIgEAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAX---------9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAGqgAAAAAAAADVVVVUAAAAAAAAAAAAAAAAAAAQAAFEAKAHAGAA\nAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWpAQAIABAStAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQQAAAAAAAABIiIiI\nAAAAAAAAAAAAAAAAAAAQAAJCAKAAAEAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAVUREIAIERFVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAACqoAAAAAAAABVVVVYAAAAAAAAAAAAAAAAAAAIAAKCASAAEKAA\nAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX---------9AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAiAgIQ\nAAAAAAAAAAAAAAAAAAAYAAKCARAAEMAAAAAAAAAACAgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQ4AAAAAAABhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAABrAAAAAAAAAA1VVVQAAAAAAAAAAAAAAAAAAAMgAJiARAAEaAA\nAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGH8D-4H8OBAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAQAAAAAoiIig\nAAAAAAAAAAAAAAAAAAAXAAEEAigAC0AAAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQBz-H-8f5wBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAD6AAAAIAAAAB9VVVAAAAAAAAAAAAAAAAAAAALAAD4AigADuAA\nAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAMfn-8-GABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGAAAAIAAAACDAgKA\nAAAAAAAAAAAAAAAAAAAVAAAAAkgADUAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQADnj-484ABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAACAAAAIAAAAAB1VUAAAAAAAAAAAAAAAAAAAALAAgAARAACqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAYx-xjAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAIAAAAAAyIoA\nAAAAAAAAAAAAAAAAAAAVgAgAAOBADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAHA-gcAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAgAAAIAAAAAAVVwAAAAAAAAAAAAAAAAAAAAOgAgAAABADqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA0klgAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAIjAA\nAAAAAAAAAAAAAAAAAAAVQAgAIAGADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAB---wAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAIAAAQAAAAAAFcAAAAAAAAAAAAAAAAAAAAAKsDwAcAaAGqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABSQJQAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAgAAAAAADwAA\nAAAAAAAAAAAAAAAAAAAVXFQB3j1gFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAABoACwAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAACAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAK7+sC6+rwKuAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABSCJQAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACCAAAAAAABAAA\nAAAAAAAAAAAAAAAAAAAVVVX9VVVf1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAB---wAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAADwB8AAAAAAAB4AAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAABEAA\nAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAEEAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAOrq6urq6urqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP----------AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAA\nAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAKqqqqqqqqqqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKqqqqqqqqqqAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAACAA\nAAAAAAAAAAAAAAAAAAAVVVVVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD58AAAAAAAAAAAAAA\nAAAAAAAAAA---1VV---8AB-+AAV1dXV1dXV1cAADAAAAAAAAAAAAAAHwAAAAA-wA\nAAf-----+AAAAACAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAfAAGPGAAAAAAAAAAAAAAAAAAAAAAAA---+7u---8ACABAAqqqqqq\nqqqqoAADAAAAAAAAAAAAAAP4AAAAHAOAAAgAAAAABAAAAACAAAAAAACgAAAAAAAA\nAAAAAAAAAAAAAAAAA-wAAAAAAhgAAAAAAAAAAAAD4AABgwAMGDA---4AB---wAD-\n--gAH---AA--3VVVX--8AF-+gAVVVVVVVVVVUAADAAAAAAAAAAAAAAI8AAAAYABg\nAAv-----9AAAAA-4AAAAAAFQAAAAAAAAAB-AAAAAAAAAAAAAHAOAAAAABSRAAAAA\nAAAfAAAMGAACAIAYmRhAAAEACAAAIAEAAAQAIAAAgA----qqv--8AL--QAqqqqqq\nqqqqoAADAAAAAAAAAAAAAAUcAAAAgAAQABf-----+gAAAH--AAAAAAKoAAAAAAAA\nAOA4AAAAAAAAAAAAZDBgAAAABUmAAAD4AABgwAAQBAAEAEAZAhhAAAEACAAAIAEA\nAAQAIAAAgA--VVVVVX-8AX--oAdXX9dXV1dXUAADAAAAAAAAAAAAAAQcAAABAAAI\nABf-----+gAAAf--wAAAAAVUAAAAAAAAAwAGAAAAAAAAAAABikiYAAAAFIoAAAMG\nAACAIAAgAgAIVCAZgxhOHDkACcOHIAE4cOQAJw4cgA--7qiIrv-8Av--0AqqsGqq\nqqqqoAf--4AAAAAAAAAAAAIOAAACAAAEABYAAAAAGgAAA---4AAAAA-+AAAAAAAA\nBAABAAAAAAAAAAACCpMEAAAACoDgAAQBAAEAEABCoQA4qjgYABhRIkUAC+RIoAFE\n+RQAKJE+gA-9VVVVVV-8Bf--6AVVYDdVVVVVUAgAAEAAAAAAAAAAAAEFgAAEAAAC\nABYAAAAAGgAAB---8AAAAAAAAAAAAAAACAAAgAAAAAAAAAAEKRQCAAAANQCAAAgA\ngAIVCABFUQBBcQQYABhRIkUAC+RIoAFE+RQAKJE+gA--6qAAAr-8C---9AqqoBiq\nqqqqoAgAAEAAAAAH-gAAAAPgQAAEAAACABZE7gAAGgAAD---+AAAAAP-AAAAAAAA\nEAAAQAAAAAAAAAAIFQHBAAAAGv-AABCoQAIqiAGLiMBc8mQMgjBRIkUAC+RIoAFE\n+RQAKJE+gA-1VVVVVVf8F---+gV9QBB1dXV1cAjDDEAAAAB6q+AAAASgIAAI+GPh\nAC5tKQAAHQAAD---+AAVUD1V8AAAAAAAIBVAIAAAAAAAAAAQagEAgAAAH--AABFU\nQARcRAIHkCBJfSQMRDBRIkUAC+RIoAFE+RQAKJE+gA-+6IAAAK-8L----QqzwABq\nqqqqoAkkkkAAAAHAQFgAAASikAAIzGMxACxtKUAADQAAH----AAaoOAgLDVAAAAA\nICqgIAAAAAAAAAAgNf+AQAAAMszAACLiIAg8ggIL6CBI-iQGOGBRIkUAC+RIoAFE\n+RQAKJE+gA-VVVVERVX8XGDGHoVAwAB1VVVVUAkkkkAAAAaqqq4AAAJSSAAIzGMx\nACxVDwAADQAAH----AAVQ1VVVxqAAAAAQFVQEAAAAAAAAABAP-+AIAAAEP-AACHk\nIBBfQQLH8aBxfRwDAMBRIkUAC+RIoAFE+RQAKJE+gA--qgAAACv8W7u67oqAgAAK\nqqqqoAkkkkAAABkRERGAAAExDAAQ+GPggCxVbgAADQAAGOHDjAAajIiIiM1AAAAH\ngK+oCAAAAAAAAABAZZmAIAAAEvnAAEL6EBI-iQLL6aCIqiIBgYBRIkUAC+RIoAFE\n+RQAKJE+gA91VVUQFVV8W-u67oeAgAAHVVdXUAkkkkAAACqqqqrAAACXigAQzGMA\ngCxFKkAADQAAEECBBAAVFVVVVWaAAAAIAV7UCAAAAAAAAACAIf+AEAAADAEAAFH8\nUBZfTQLFUaCIVCIAwwBRIkUAC+RIoAFE+RQAKJE+gA-+qAAAAAr8W-u67osAAAAC\nqqqqoAkkkkAAAEBAQEBgAAD8CQAQzGMAgFxFKwAADoAAAACAAAAaICAgIDNAA4B4\nAL9oRAAAAAAAAACAJfOAEAAAAgaAAJL6SBYqjQRCoRB0AFwARgBRIkUAC+RIoAFE\n+RQAKJE+gA-VVUREBFV8Xfu67oUAAAADX1X1UAkkkkAAAKqqqqqwAAEAEQAQzWsQ\ngFhF6QAABoAAAACAAAAUVVVVVVmAA4B44V-UJAAAAAAAAAEAGAIACAAAAkCAAJFU\nSBYVDQRgAxACAIAAZABRIkUAC+RIoAFE+RQAKJE+gA-7oAAAAAL8Xvu6HosAAACC\n4a4OoAkkkkAAAREREREYAAEf4QAQAAAAgFgAAAAABoAAAACAAAAYiIiIiIzAA4B0\ngL-oJAAAAAAAAAEABA0ACAAADz0AALCoaCMAGIOQBOABOQAALABRIkUAC+RIoAFE\n+RQAKJE+gA9VVVAAAFVcX3u6-oYAAACFgFgDcAkkkkAAAqqqqqqsAADgAQAQAAAA\ngFgAAAAABoAAAACAAAARVVVVVVZAA4B0gV-USAAAAAAAAAEB-IEACAAAEf4AQKgA\nqCKAKIAJyAByRJwAOABRIkUAC+RIoAFE+RQAKJE+gA-uiAAAAAD8X7u6-ooAAAH7\nADABoAjDDEAABEBAQEBCAACAAgAQP--AgFgAAAAABoAAAACAAAACICAgICEAAcDi\nQK+okAAAAAAAAAICJnoYBAAAMwF+gRQBRBxkxwASJAAsgmgAMABRIkUAC+RIoAFE\n+RQAKJE+gA-VVUQAAEVcX7u6-oYECAFVABABUAgAAEAABqqqqqqqAAEAHYAQAAAA\ngFgAAAAABoAAAACAAAADVVVVVVUAAcDiQFVQkAAAAAAAAAICC-w4BAAANIL-4RMm\nRAAqgAAKKAARARAAIABOHDkACcOHIAE4cOQAJw4cgA-+oAAAAAC8X7u6-osYCAKq\nACAAoAgAAEAACRERERERAAEM6uAQP--AgFgAAAAABoAAAACAAAAEiIiIiIiAAcDk\nICqhIAAAAAAAAAIElgJwBAAAMn7+gOFUOAAqgAAZTAAKAKAAAABAAAEACAAAIAEA\nAAQAIAAAgA9VVVAAABVcW7u6-oXoDAXUAAAA0A1rWsAACqqqqqqrAACDVVAQAAAA\ngFgAAAAABoAAAACAAAAFVVVVVVWAAOHEIBVCEAAAAAAAAAIEGQXgBAAAPQAUQAZT\nAADKYABggwAGAMAAAABAAAEACAAAIAEAAAQAIAAAgA-+iAAAAACsXHvG-oqoCjr8\nAAAAoAgAAEAAEEBAQEBAgABBqrgQP--AgFgAAAAABoAAAACAAAAIICAgICBAAOHE\nMAACEAAAAAAAAAIGNP3QBAAAPvhkABggwAMEGAD-f4AAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA-VVEQAAEVcL----QVUFdWEAAAAUAgAAEAAGqqqqqqqgADxVVgQAAAA\ngFgAAAAABoAAAACAAAANVVVVVVVAAOHDyAACEAAAAAAD8AIEEgA4BAAAAgRYAD-f\n4Af7-AAAAAAAAAAAAABAAAEACAAAIAEAAAQAIAAAgA-6oAAAAAA8F---+gqqKqoE\nAAAAYAgAAEAAMRERERERQAGoqqwQAAAAgFgAAAAABoAAAACAAAAYiIiIiIigAHOA\nBgAB4AAAAAABDwIEl-DcBAAAAgPAAAAAAAAAAAAAAAAAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA9VVVAAACqsC---9AdV11QCAAAAcAgAAEAAKqqqqqqqwANUVVQQAAAA\ngFgAAAAABoAAAACAAAAVVVVVVVVgAHOAAYcOAAAAAAAAgP-------AAAAh-AAAAA\nAAAAAAAAAAAAAAAAAABAAAEACAAAIAEAAAQAIAAAgA-uiAAAAAFcBf--6AqqqqwA\nAAAAYAgAAEAAIEBAQEBAQAKrCqwQAAAAgFwAAAAADoAAAACAAAAQICAgICAgAHOA\nAEiQAAAAAAAAh8AAAAAAA+AAA-MAAAAAAAAAAAAAAAAAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA-VVUQAAIqsAv--0AVVV-wAAAAAUAgjVkAAKqqqqqqqwANVhVYQAAAA\ngCwAAAAADQAAAAHAAAAVVVVVVVVmAD8AAEf4AAAAAAAAuAAQfEAAABwAAh8AAAAA\nAAAAAAAAAAAAAAAAAABADVkACAGrIAEANWQAIAasgA-+oAAAAABcAX--oAqqrAQA\nAAAAYAhWVUAAURERERERIAKrOqoQAAAAgCwAAAAADQAAAAHIAACoiIiIiIiVAD8A\nACAIAAAAAAAAwAAGxoAQAAMAAgEAAAAAAAAAAAAAAAAAAAAAAABACVUACAEqoAEA\nJVQAIASqgA9VVVQAACqsAL--QAV1eAIAAAgDUAgjVUAAaqqqqqqqoANWVVYQAAAA\ngCwAAAAADQAAAAHcAAE1VVVVVVVWgD8AACAIAAAAAAADAAAAfAAAAADAAQIAAAAA\nAAAAAAAAAAAAAAAAAABAGNUACAMaoAEAY1QAIAxqgA-+qAAAAAFcAF-+gAqqsAEA\nAAgAoAgGNUAAQEBAQEBAYAKrqqwQAAAAgC4AAAAADQAAAAH8AAKgICAgICA1QB4A\nAB+MAAAAAAAH-----------gARIAAAAAAAAAAAAAAAAAAAAAAABAAAEACAAAIAEA\nAAQAIAAAgA-VVVRAAIqsACABAAVVYAAAABgAUAgAAEAAaqqqqqqqoANVVXgQAAAA\ngC4AAAAAHQeAAAH8AAU1VVVVVVVWoB4AAAJKAAAAAAAA1VVVVVVVVVcAAhIAAAAA\nAAAAAAAAAAAAAAAAAAA---4AB---wAD---gAH---AA--qoAAAABcAB-+AAqqoAAA\nADAAYAf--4AAURERERERIAH--8Af----gBYAAAAAGhjAAAD4ABqoiIiIiIiVYB4A\nAAH0AAAAAAAAPqqqqqqqqvwADCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-1VVUAACqsAAAAAAd-YAAAIDAAMAAAAAAAaqqqqqqqoAAAAAAAAAAA\nABYAAAAAGmBAAAAAAA01VVVVVVVWwAAAAAAAAAAAAAAAAf9VVVVVf4AAEkgAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-+6IAAAAFcAAAAAArA8AAA\nGPACIAAAAAAAQEBAQEBAYAAAAAAAAAAAABYAAAAAGoBAAAAAAAagICAgICA1gAAA\nAAAAAAAAAAAAAAH-----gAAAEbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-dVVRIiKqsAAAAAAcADAAAFzACMAAAAAAAaqqqqqqqoAAAAAAAAAAA\nABf-----+oBAAAAAAAM1VVVVVVVXAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEgAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--oAAAAAF8AAAAAAoAAAEA\nIBgCIAAAAAAAURERERERIAAAAAAAAAAAABf-----+wBAAAAAAAGoiIiIiIiWAAAA\nAAAAAAAAAAAAAAAAAAAAAAAADCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-1VVUUAqqsAAAAAAYAAADDwBgEMAAAAAAAaqqqqqqqwAAAAAAAAAAA\nAAv-----9ABAAAAAAAC1VVVVVVVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--7IgAABH8AAAAAAwAAAA+\nABgIIAAAAAAAYEBAQEBAQAAAAAAAAAAAAAgAAAAABACAAAAAAAAwICAgICAgAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-9VVVUSqq8AAAAAAQAAAADAAwwMAAAAAAAKqqqqqqqwAAAAAAAAAAA\nAA-------ACAAAAAAAAVVVVVVVVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--+qIAAAVcAAAAAAwAAAAB\ngA3AIAAAAAAAMRERERERQAAAAAAAAAAAAAHAAAAA4AEAAAAAAAAYiIiIiIigAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--VVVVSqq8AAAAAAgAAAAAwAwAMAAAAAAAKqqqqqqqwAAAAAAAAAAA\nAAHAAAAA4AEAAAAAAAAVVVVVVVVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA--7uiICJJ8AAAAAAgAAAAA\n4AYAIAAAAAAAMEBAQEBAgAAAAAAAAAAAAA-------AEAAAAAAAAYICAgICBAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-91VVVVVVcAAAAAAgAAAHDMAYAMAAAAAAAGqqqqqqqgAAAAAAAAAAA\nABAAAAAAAgEAAAAAAAANVVVVVVVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---6ogiK-8AAAAAAgAAAA8\nGAYAIAAAAAAAGRERERERAAAAAAAAAAAAABAAAAAH8gIAAAAAAAAMiIiIiIiAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--dVVVVVV8AAAAAAQAAAAADAMAUAAAAAAACqqqqqqrAAAAAAAAAAAA\nACTMzMzFUQIAAAAAAAAFVVVVVVWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---u6oiK78AAAAAAwAAAAA\nBgMAYAAAAAAADEBAQEBCAAAAAAAAAAAAACAAAAASqQQAAAAAAAAGICAgICEAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--3VVVVVX8AAAAAAZAAAAAAwMA0AAAAAAABqqqqqqqAAAAAAAAAAAA\nAEmZmZmyqPgAAAAAAAADVVVVVVUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA----qqqr-8AAAAAAuAAAAA\nAYGBoAAAAAAAAxEREREUAAAAAAAAAAAAAEAAAAABVIAAAAAAAAARiIiIiIoAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA--9VVVVVX8AAAAAAWAAAAAf8GBcAAAAAAAAaqqqqqoAAAAAAAAAAAA\nAJnMzMzB-EAAAAAAAAAo1VVVVVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA----7u7v-8AAAAAAqAAAAA\nMAGeoAAAAAAAAMBAQEBQAAAAAAAAAAAAAIAAAAAAAEAAAAAAAAA0YCAgICiAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA---dVVVV38AAAAAAWABAAAGADNUAAAAAAAAGqqqqqgAAAAAAAAAAAA\nAP-------8AAAAAAAAAqNVVVVVEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAArABAAA\nDADaoAAAAAAAADERERFAAAAAAAAAAAAAAQAAAAAAACAAAAAAAAA1GIiIiKKAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA---3VVVX-8AAAAAAdABAAABh-1UAAAAAAAABqqqquAAAAAAAAAAAAA\nAQAAAAAAACAAAAAAAAAqjVVVVcUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAAqgBAAQ\nAwyqoAAAAAAAAA5AQEYAAAAAAAAAAAAAAP-------8AAAAAAAAA1RyAgIwqAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA----3d3f-8AAAAAAVYHgA4MY1VUAAAAAAAAAOqqrgAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAqodVVXBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAAquKgDs\naMaqoAAAAAAAAAD5EeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1UHyI8GqAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAA-----3---8AAAAAAV39YF33+Z1cAAAAAAAAAA--gAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAA-4B--AP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------8AAAAAAqqqv6q\nvgOqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVwNVUAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqq\nq5+qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaoAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1dXV81XUAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqq\nqu6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAVVVVVVVX1VUAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqqq\nqr6qoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAccAAAAAAAAADzwAAP--\n-wAAAAB-gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIIAAAAAAAAAMMMAAwAAAMAAAAf-8AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAAfwAAAQACABAAA\nACAAAB--+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAABoLAAADgOAAAg-BACAAAABAAAD---AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEQwAAMABgABAAAgCIr6\nPBAAAP---AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAICgIAAQAAQABAzAgCIqCIhAAAf---AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBAEAAgAAIACJMkQCFKC\nIhAAB----AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAgAACABAAAEACVAqQBCLiIiAAD---+AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAKoBACAAFSAClMpQBCKC\nIiAAH---8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABAVUBACAAKqACk-JQAiKCIkAAP---4AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAqqAgE44VVACkAJQASL7\nvIAAf---wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAEBX1AQEQQr7AClAJQAQAAAIAA-----8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECvagQEQRXtAClfJQAIAA\nAQAB----4DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAIhftCIEQQv3AClgJQAEAAAgAD----4EIAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCv6hIEQRX9AClAJQAEAA\nAgAH-w--8AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAJBf9BIEQQv-ACUAKQACAABAAP8A--8PAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiv6iQEIhX9AEMAMIABAA\nCAAPAA--+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAACRX1EgEFAr7AIKAUEABAACAAcAA---AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQqqEgCCAVWAIJMkEAAgA\nEAAwAA--+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAABIVUJACAAKqAERSiIAAQAIAAgAAf-4AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEKoQgBAAFUADhShwAAQA\nIAAAAAP-wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAACEAAQgAgAAIAABSgAAAIAQAAAAAf-gAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAQgAQAAQAABSgAAAEA\ngAAAAA--AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAB4AAPAAMABgAACSQAAAEAgAAAAB-+AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDhwAACAOAAAChQAAACB\nAAAAAD-+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAkSAAABDwAAAChQAAABCAAAAAH-+AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAkgAAAChQAAAA8\nAAAAAP++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAkSAAAAkgAAAChQAAAAAAAAAAf88AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkSAAAAn2AAA8hPAAAAA\nAAAAA-48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAABChAAAAoNgADChQwAAAAAAAAB-w0AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAgAABACQAMASAMAAAA\nAAAAD-gHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAB+-AAAD-+wAP-z-8AAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA-----4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-----4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA-----4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAwGCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4OHDMAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA8eHDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA++NjMAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA32NjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzmfzMAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAxGfzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwG4bP4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAwGwbP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-----4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAA-----4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-----4AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAA.\n_>:LCpA1BCnA3CCxA9BC5BDBC-BLBDLBTCDRBZBDZBhBDpBnBD\ntBtCD-B3BEJB7BERCBBEPCHCEbCLBEpCXBEzCdBE5CjCFHClBFLCrBFdCzBFpC5C\nFxC9BFxDBBGBDJBGPDNCGVDTBGZDVBGZDXBGZDXCGZDXBGZDX<BGZDHBGJDR>XCr\nDLBCvDLCC3DHBDHCzCDRCnBDfCXBDtCNCD7CDBEBB7BELBzBEdBjCEpBdBE5BZBF\nJBVBFRBRCFhBNBFhBNBFtBJBFxBHCF5BFBF-BDBGBBDBGHBD<CGZBDBGpBR.>:MA\nvDBBAvDBBA1C-CA9C9BBFC7BBHC7CBHC7BBHC7BBHC9BBHC9CBHDBBBHDBBBHDBB\nBHDBCBHDBBBRDBBBlDBBBxDBCB-DBBCHDFBCHDJBCPDPCCTDVBCXDbBCfDlCCnDz\nBCrD5BCvD9BCtEFCCtEJBChERBCbEVCCPEZBCNEdBBvEfBBnEhCBnEhBBnEfBBnE\ndBBPEZCBHEVBBDERBA1ENCAtEHBAlEDBAhEBBAbD7CAVD3BALDtBAHDnCAHDhBAH\nDbBAHDRBAHDPCAHDNBANDLBAPDHBAVDBCAVC9BAfC5CArC3BA3C1BA3C1BA3C1CA\n3Cz<BA7C1BA7DL>1FvG3BFvG3CFvG1BFzGzBF7GxCGRGnBGbGhBGfGdBGpGXCG3G\nRBHJGBBHPF7CHPF1BHNFxBHRFnBHTFhCHTFbBHVFZBHTFVBHRFTCHPFRBHNFRBHH\nFRBHHFRCHHFRBHHFVBHDFhBHBFnCHBFtBHBFzBG-F7BG-GLCG-GRBG-GZBG9GhCG\n9GtBG7GzBG5G7BG7HBCG5HBBG5HBBG5HBBG7G7CG9GxBG-GlBG-GhBHBGdCHBGZB\nHDGVBHHGRCHLGNBHPGLBHbGJCHhGJBHlGNBHnGPCHlGTBHnGXBHnGdBHnGhCHlGl\nBHlGpBHlGvCHlG3BHnG5BHrG5BHvG5CHvG5BHzG3BH3GzBH-GrCIDGnBIHGhBIJG\ndCINGZBIPGPBIRGPBIRGPCIRGPBIRGP<BIVGPBIVGP>ZIXFtBIXFtBIRFpCINFpB\nIPFrBIPFtBINFxCINF1BILF5BINF7BIPF9CITF9BIXF7BIbF5BIdF3CIdF3BIdFx\nBIbFvCIbFvBIbFvBIbFv<BIdFtCIfFp>kIrGRCIvGPBJBF9BJJF3BJLFxCJNFtBJ\nRFnBJTFhCJTFhBJTFhBJRFlBJLFrCJBF5BI-F-BI7GDBI5GJCIzGVBIxGbBItGhC\nIrGpBIpGxBIrG1CItG5BIrG7BIxG7CJFGzBJPGtBJRGpBJbGjCJtGTBJ3GJBJ9GB\nCKDF5BKJFnBKJFfBKJFbCKHFZBKHFZBKFFZBKBFfCJ9FlBJ3F1BJ1F9CJzGFBJxG\nLBJrGTBJnGhCJlGnBJjGrBJhGxCJhG1BJhG5BJfG5BJfG5CJhGzBJjGtBJlGlBJn\nGhCJtGXBJxGTBJ3GNCJ7GLBKFGLBKJGNBKLGPCKLGRBKLGVBKJGZBKDGnCKDGtBK\nDGzBKBG9CKDG-BKBHBBKDG-BKHG7CKPG1BKZGpBKhGjCKlGdBKpGZBKtGNBKrGJC\nKnGJBKjGJBKfGJBKbGNCKTGVBKTGZBKTGfCKTGlBKTGtBKZGxBKdGzCKjG3BKjG5\nBKtG1BK7GtCK-GnBLJGhCLLGVBLRGPBLTGJBLTGFCLTGFBLTGFBLTGFBLRGJCLNG\nRBLNGVBLNGZBLNGZCLNGZBLNGZBLRGbBLTGdCLbGdBLjGdBLrGdCLpGfBLrGfBLr\nGfCLrGfBLpGhBLlGjBLjGnCLjGpBLhGrBLdGxBLfG1CLhG3BLjG5BLjG5CL1G5BL\n-G3BMDGzCMLGxBMTGtBMbGnBMbGjCMZGfBMZGZBMVGXBMPGVCMLGZBMHGdBMDGhC\nMBGnBL-GxBMBG5BMFG9CMLG-BMLHBBMPHBCMjG5BMxGzBM7GpBM9GhCNJGNBNJGL\nBNJGLBNJGLCNJGLBNHGD<BNHGBBNFGB>hIrFpBItFrBIzFtBI7FxCI7FzBJBF1BJ\nHF3CJNF5BJLF7BJJF9CJLF9BJNF9BJRF-BJTF-CJXGBBJZGBBJbGBCJbGBBJbGBB\nJbGBBJbGBCJbGBBJbGBBJbGBBJbGBCJbGB<BJhF9BJhF9\n--mail.sleepy.sau.135.1476\n\n\n\nThats all for now.\n--mail.sleepy.sau.135.1476--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.34.txt",
    "content": "* 34 FETCH (UID 34 MODSEQ (29860) BODY[] {6155}\nReturn-Path: <bob@sarad.cs.su.oz.au>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA01437> for nsb; Thu, 4 Feb 93 17:27:17 EST\nReceived: from joyce.cs.su.OZ.AU by thumper.bellcore.com (4.1/4.7)\n\tid <AA17392> for nsb@greenbush; Thu, 4 Feb 93 17:27:12 EST\nDate: Thu, 4 Feb 93 17:27:10 EST\nFrom: bob@sarad.cs.su.oz.au\nMessage-Id: <9302042227.AA17392@thumper.bellcore.com>\nReceived: from sarad.cs.su.oz.au (for thumper.bellcore.com) with MHSnet;\n\tFri, 05 Feb 1993 09:27:08 +1100\nTo: ggm@cc.uq.oz.au, nsb@thumper.bellcore.com\nCc: bob\nSubject:  sending files via email\nMime-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"qwertyuiop123\"\n\n--qwertyuiop123\nContent-type:  text/plain\n\n\nThis sums up my feeling about using (non-MIME) email to carry files!\n\nBob.\n\n\n\n--qwertyuiop123\nContent-type:  image/gif\nContent-Transfer-Encoding: base64\n\n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\ndlIIb0zUJir4dkJIaomnbA2Ye16YdGvoVC43hpM3XiwoeqOHedUEhr7AU1ZIhmkYhzOYU5hG\nhftmiPKne4WYeFzYhWWIOIwIb1rHfFKHhJaIhX44hUF4eqckXCn/+IlvSGmSOImNyIebmIUR\nWIqQeIqtt4N7GFZheIU8x4bQh4momIpwuIp/qFi1yIpFyGGyOIuYaIZ0eGfDSIxMZozHuFd5\nqEbM2IyLxYv9RouuqHM5CHfAeIskdo1fp4qZOI6cSI2AB47PCE6vmIyal4VuOIivE47YiIxK\nOEftGIpbNlbzSI/RyIEIJmzqiIbVmH/+NWjmCI9Qhojk2G3bo3jvh2MLaWQ50FXCaITimH0T\n2T92Y5GLp5DOh49WJTa35nXBJZEdCVcj2URx6H8n+ZAN2TlnFgwQaVhlh5I6YD8ySYp3iF0g\nqYcQlJPfRIJ+xVg+kD1EUzTdaIs9WVkF/1QdkqSRGVlRbfCSHjkikCaCGlht2uiOvRGSCVlb\n2vdxF1kjXAmWWimGuRWFBJWVaMmIX+mNbDmUbll673KW/9SWdCkjcNl2n8GPeumInUVhcziX\ngHmTgKWM9SSQhmmW0ZSN1PGXjAmFlCh0MCiZCPmYR0h1nciYw8eZ95Q7NGmY1nSPeXaIrueT\nGTSZgwmaDOmLfumSRbWarJlNp3kl9XhE77iU6xiaNwiZuIlSs/mI66iFn6krmRmcurmbqGmZ\nAKSIuamc+SiKckmWeHGOLiec13lX1GmVihmX8padz4mS3CmarKINOmOKtHmT5OmbDIKcG5ee\nw1mVqZlI3UmYsf/JLrAon4dpkyHWnOyJnvH5nSlonXkJGvgJNj+ZmA+TUIV5nKPoUgpKmb+I\noP5ZnZvyVDUloexoQBPloPMBbXwVmK8onShzoTEohyu5oVwljQexmO4JnOAyonbZlSZqn+zW\nl01DkGF0hvV3o4mYokA4o9nVoxh4oigqRBmZmpj3n0XZpOghgxX6k425nD5anppZPRJEn03F\nn0XagT+KoxQipWlpoPr4oUi6oHxVbM5Zpr8pni4lCg71pJuSpgtnlAc6p3Q6oW1YLxwKYVdq\nfO8ZnRLzd3J6pNInqPMJlInKf3lqIXs6qM8piN/VoGd6m+WoqH6Kf/aIqWbqqDD6mgvK2KkF\nWKVO+qn3GaQ/9ouACKgAeagyFaqiCjXj0aivGqY5mp0U2gOzZauXOqbmuJMwaaq9WnGuCnAX\n5EeWqoEW90H1Caad2XdbOqQ1eplUaoDTqKwQ6JSJZaHE+nPECUI4KUVt2pOTGlnB+qLh2aLN\ngaqQWpeXJJbeqoD7qZ8UuYzySoD3dkUB54DPSpcuklK62qzc2KqjmWoCK3J4eKpfpaXkE1js\n2Z7VKrGYSYgTa7F8WaoXK0PRurBsyrEfC7IhK7IjS7IlSwgFAAA7\n\n--qwertyuiop123--\n\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.41.txt",
    "content": "* 41 FETCH (UID 41 MODSEQ (29988) BODY[] {73873}\nReturn-Path: <sau@sleepy.bellcore.com>\nReceived: from thumper.bellcore.com (thumper.ARPA) by greenbush.bellcore.com (4.12/4.7)\n\tid <AA00228> for nsb; Fri, 7 Jun 91 09:13:07 edt\nReceived: from sleepy.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA21187> for nsb@greenbush; Fri, 7 Jun 91 09:09:08 EDT\nReceived: by sleepy.bellcore.com (4.1/1.34)\n\tid AA00574; Fri, 7 Jun 91 09:09:05 EDT\nDate: Fri, 7 Jun 91 09:09:05 EDT\nFrom: sau@sleepy.bellcore.com (Stephen A Uhler)\nMessage-Id: <9106071309.AA00574@sleepy.bellcore.com>\nTo: nsb@sleepy.bellcore.com\nSubject: meta-mail\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"mail.sleepy.sau.158.532\"\n\n--mail.sleepy.sau.158.532\n\n2 Questions:\n\n1) MM_QUIET doesn't seem to work in the 212 version of metamail.\n\n2) I've been pondering how I am going to send you this 40mb mail message.\n   I was going to split it up using the \"parts\" mechanism, but then it occurred to me.\n   My software has no business worrying about message size.  Its up to the mail\n   delivery agent to do that form me.  I should be able to compose a very\n   long message, and pass it off to sendmail (well, a pre-processor to sendmail).\n   if the message is too long, based upon the src/dst etc, then sendmail should\n   break it into multiple parts for me, and send it as multiple messages.  As the\n   user (sender) I should be unaware this is happening.\n\n   Similarly, on the receiving end, the separate parts should be assembled as they\n   arrive; I shouldn't have do deal with them at all as multiple messages.\n\n   I guess what I am proposing are two utility programs:\n\n       msplit <max_lines> <max_bytes>\n\n   that takes 1 mail message and splits it into N messages and\n\n       mcombine <parts...>\n       mcombine <partially_assembled_thingy> <parts...>\n\n   that any mail system can call to achieve a uniform mechanism of splitting\n   and recombining messages,  Kind of like:\n--mail.sleepy.sau.158.532\nContent-type: image/pbm\nContent-Transfer-encoding: base64\nSubject: Image wrapped by /usr/sau/bin/fetch_image\nDate: Fri Jun  7 09:08:57 EDT 1991\n\nUDQKNzk4IDUzMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAB////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAP///////////AAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////wAAAD////gAAAAAAAAAAAAAAAAAAAAAAAAAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///gAAAAAAH///gAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wAAAAAAAAA///AAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAf//AAAAAAAAAAA\nAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAA\nAAAAf/4AAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAP/gAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAfAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABwAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAeAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAHgC4AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAABcAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAA/4\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAXATgHgdB0DwDwB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAF4E4GMIwjBGB\nHxjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAABOCODBmEYQwwwwwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAA\nAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAATwjggZgGAMMMMIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAEcQ4f+eB4ADDDH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAABHkOGAD4PgHwwxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAQ6DhgAPA8HMGIYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAEPg4YAA4DjDA8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABBwOHAUGQZgwQBwEAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAQcDg4JBkGYMMAOCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAECA4P8YRhHPz/j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAHwg/g8F4Xg+Yf8PAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAA/wAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAABgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+\nAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAQEAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAfwAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAwBwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAHQRwME/v4HgJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAACM9/DPDAwGMe8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAABhDgwwwwMDBhyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAYAwOMMMDAgYYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAHgMBjDDAwf+GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAA+DAYwwwMGABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAADwwGMMMDBgAYAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAOMBjDDAwYAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAPwAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAABBjAwwwwMHARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAQYwMMMMDA4IY\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAGEOGDDDIyP8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAABeDeD/8cHA8H4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAD8AAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAIkAAAAAAAAA////////////4AAAAAD////////////gAAAAAB////////////wAAAAAAAAAAAAAAB+\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAjAAAAAAAAAf////////////AAAAAB////////////8AAAAAA////////////+AAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAEAA\nAAAAAAAH////////////wAAAAAf////////////AAAAAAP////////////gAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAEUAAAAAAAAB////////////8AAAAAH////////////wAAAAAD////////////4\nAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAPwAAAAAAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAA\nAADwAAAAAAAAAAB4AAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAB8AAAAAAAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAH\ngAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAAA+AAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAARQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAIkAAAAAAAAB4AA\nAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAA\nAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAA\nAAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAA\nAAAAeAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAfgAAAAABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAA\nA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAQAAAAAAAAAeAAAAAAAAAAAPA\nAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAARQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAA+AAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAIkAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAjAAAAAAA\nAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAA\nAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAHwAAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAA\nAAAAAAAAAHgAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAB8AAAABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAA\nAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAARQAAAAAAAAHgAAAAAAA\nAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAIkAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAAAfAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAEAA\nAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4\nAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAA8AAAAIwAAAAAAAAHgAAAAAAAAAADwADwAAeAAAAAAAAAAAPAAB4AAPAAAAAAAAAAAHgAAAAAAeAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAABAAAAAAAAAB4AAAAAAAAAAA8AB/AAHgAAAAAAAAAADwAA/\ngADwAAAAAAAAAAB4AAAAAAP4AAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAABFAAAAAAAAAeAAAAAAAAAAAPAAf+AB4AAAAAAAAAAA8AAP/AA8AAAAAAAAAAAeAAAAAAD/wAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAfAAAAiQAAAAAAAAHgAAAAAAAAAADwAH/4AeAAAAAAAAAAAPAAD/8APAAAAAAAAAAAHgAAAAAA//AAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAACMAAAAAAAAB4AAAAAAAAAAA8AA//wH\ngAAAAAAAAAADwAAf/4DwAAAAAAAAAAB4AAAAAAH/+AHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAQAAAAAAAAAeAAAAAAAAAAAPAAD//B4AAAAAAAAAAA8AAB//g8AAAAAAAAAAAeAAAAAAAf/4B4AAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAARQAAAAAAAAHgAAAAAAAAAADwAAP/+eAAAAAAAAAAAPAAAH//PAAAAAAAAAAAHgAAAAAAB//w+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAIkAAAAAAAAB4AA\nAAAAAAAAA8AAAf//gAAAAAAAAAADwAAAP//wAAAAAAAAAAB4AAAAAAAD//PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAjAAAAAAAAAeAAAAAAAAAAAP//////4AAAAAAAAAAA///////8AAAAAAAAAAAf///////////\nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAEAAAAAAAAAHgAAAAAAAAAAD//////+AAAAAAAAAAAP///////AAAAAAAAAAAH///////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeA\nAAEUAAAAAAAAB4AAAAAAAAAAA///////gAAAAAAAAAAD///////wAAAAAAAAAAB///////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAACJAAAAAAAAAeAAAAAAAAAAAP//////4AAAAAAAAAAA///////8AAAAAAA\nAAAAf///////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAIwAAAAAAAAHgAAAAAAAAAADwAAA//+AAAAAAAAAAAPAAAAf//AAAAAAAAAAAHgAAAAAAAH//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAPAAABAAAAAAAAAB4AAAAAAAAAAA8AAB///gAAAAAAAAAADwAAA///wAAAAAAAAAAB4AAAAAAAP//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AABFAAAAAAAAAeAAAAAAAAAAAPAAD//x4AAAAAAAAAA\nA8AAB//48AAAAAAAAAAAeAAAAAAAf/+eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAiQAAAAAAAAHgAAAAAAAAAADwAD//geAAAAAAAAAAAPAAB//wPAAAAAAAAAAAHgAAAAAAf/8HgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAACMAAAAAAAAB4AAAAAAAAAAA8AB//gHgAAAAAAAAAADwAA//wDwAAAAAAAAAAB4AAAAAAP/8D4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAQAAAAAAAAAeAAAAAAAAAAAPA\nAf/AB4AAAAAAAAAAA8AAP/gA8AAAAAAAAAAAeAAAAAAD/4A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAARQAAAAAAAAHgAAAAAAAAAADwAH+AAeAAAAAAAAAAAPAAD/AAPAAAAAAAAAAAHgAAAAAA/wAPAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAIkAAAAAAAAB4AAAAAAAAAAA8AA8AAHgAAAAAAAAAADwAAeAADwAAAAAAAAAAB4AAAAAAHgAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAjAAAAAAA\nAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAA\nAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAPAACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAA\nAAAAAAAAAHgAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAHgABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAA\nAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AARQAAAAAAAAHgAAAAAAA\nAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAIkAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAB8AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAEAA\nAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4\nAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8ACJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAPAAIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAA\nAADwAAAAAAAAAAB4AAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ABFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAHgAiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4ACMAAAAAAAAB4AAAAAAAAAAA8AAAAAH\ngAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAQAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAD4AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwARQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AIkAAAAAAAAB4AA\nAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAjAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAADwA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAEAAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n+AEUAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgCJAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAA\nAAAAeAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AIwAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAeABAAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgBFAAAAAAAAAeAAAAAAAAAAAPAAAAAB4AAAAAAAAAA\nA8AAAAAA8AAAAAAAAAAAeAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AiQAAAAAAAAHgAAAAAAAAAADwAAAAAeAAAAAAAAAAAPAAAAAAPAAAAAAAAAAAHgAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPACMAAAAAAAAB4AAAAAAAAAAA8AAAAAHgAAAAAAAAAADwAAAAADwAAAAAAAAAAB4AAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAQAAAAAAAAAeAAAAAAAAAAAPA\nAAAAB4AAAAAAAAAAA8AAAAAA8AAAAAAAAAAAeAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ARQAAAAAAAAH////////////wAAAAAf////////////AAAAAAP////////////gAAAAAAAHwAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgIkAAAAAAAAB////////////8AAAAAH////////////wAAAAAD////////////4AAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AjAAAAAAA\nAAf////////////AAAAAB////////////8AAAAAA////////////+AAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAEAAAAAAAAAD////////////gAAAAAP///////////+AAAAAAH////////////AAAAAA\nAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAB4CJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAA8BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4IkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAwQAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEAA\nAAA/gfAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPkAAAAADwAAAAAM8AAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4EUAAAADgBAAAAAAAACAAAAAAAAQAAAAAAAAAAAAAAAAAAAAOHAAAAAAMAAAAAA\nDAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCJAAAAA4AQAAAAAAABwAAAAAAAEAAAAAAAAAAAAAAAAAAAADAwAAAAADAAAAAAAwAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAHgIwAAAAOAEAAAAAAAAcAAAAAAADAAAAAAAAAAAAAAAAAAAABwEAAAAAAwAAAAAAMAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4BAAAAADgBAAAAAAAALgAAAAAABwAAAAAAAAAAAAAAAAAAA\nAcBAAAAAAMAAAAAADAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeBFAAAAA4AQOgPATAAC4APAHgTw/gAAAAAAAAAAAAAAAAAAAHgAHgTwB7BOHAPAQwAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAHwiQAAAAOAEEYMY94ABHAEfGM9+DAAAAAAAAAAAAAAAAAAAAA+AGM9+Bhz334EY8MAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8CMAAAADgBDCGDDkAARwDDDBjhwwAAA\nAAAAAAAAAAAAAAAAAH4DBjhwwMOPHDDDDAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAQAAAAA4AQwBAwwAAIOAwwgYwMMAAAAAAAAAAAAAAAAAAAAAfggYwMMDDBgwwwwwAAAAADwAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwRQAAAAOAEPA/8MAACDgMMf+MDDAAAAAAAAAAAAAAAAAAAAAB8f+MDGAwwYMAMMMAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8IkAAAADgBB8MAD\nAAB/8DDGADAwwAAAAAAAAAAAAAAAAAAAAAHmADAxgMMGDAfDDAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAjAAAAA4AQHjAAwAAQHAYhgAwMMAAAAAAAAAAAAAAAAAAAAAA5gAwMYDDBgwcwwwAAAAADwAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwEAAAAAOAMAcwAMAAIA4DwYAMDDAAAAAAAAAAAAAAAAAAAABAOYAMDGAwwYMMMMMAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nA8EUAAAABwCCDOAjAACAOBAHATAwwAAAAAAAAAAAAAAAAAAAAYDnATAxwMMGDGDDDAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCJAAAAAcBggxwQwABABwwA4IwMMAAAAAAAAAAAAAAAAAAAAGAw4IwMMHD\nBgxgwwwAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIwAAAADxwMIf4MAAQAcP+P8MDDIAAAAAAAAAAAAAAAAAAAA4cP8MDD+8wYMc/MMAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAA8BAAAAAAPwC8B4PwAfAfx/w8Pz4cAAAAAAAAAAAAAAAAAAAAL8A8Pz4PI/fvj5v/wAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhFAAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4iQAAAAAAAAAAAAAAAAAYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCMAAAAAAAAAAAAAAAAAGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgQAAAAAAAAAAAAAAAAABwwAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4RQAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAHiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAHhFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAB/gA/wAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAeCMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAH4ADwAA\nAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAHgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAA/AAYAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAB4RQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAH4AGAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAeIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAA\nAAAAAAAAAB/ABgAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAHgjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAfwAYAAAAQAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAB4EAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAG+AGAAAAEAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAeEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAeAAAAAAAAAAAAAAAAABnwBgAAADAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAHiJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAY+AYAAABwAAAAAAAAAADgAAAAAAAAAAAA\nAAAAAAAAAAAB4IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAGHwGAD4A8AAAAAB+ABjg4AAAAAAAAAAAAAAAAAAAAAAAAeBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAABh8BgDjg/9+P4fhx4H58OH8AAAAAAAAAAAAAAAAAAAAAAHhFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAYPgYBgcBwPB4Bw4HA\nOnDgcAAAAAAAAAAAAAAAAAAAAAAB4iQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAGB8GAYDAcBwOAYcB4Dxg4MAAAAAAAAAAAAAAAAAAAAAAAeCMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAABgPhgMA4HAeDwEHAOA8AOGAAAAAAAAAAAAAAAAAAAAAAAHgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAY\nB8YDAOBwDgcDDgDwOADjAAAAAAAAAAAAAAAAAAAAAAAB4RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAGAfGB//gcA4HAg4AcDgA5gAAAAAAAAAAAAAAAAAAAAAAAeIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAABgD5gcAAHAPD4YOAHA4AOwAAAAAAAAAAAAAAAAAAAAAAAHgjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAA\nAAAAAAAAAAAAAAAYAfYHAABwBwuEDgBwOAD8AAAAAAAAAAAAAAAAAAAAAAAD4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAGAD+BwAAcAcbjA4AcDgA/gAAAAAAAAAAAAAAAAAAAAAA\nA8EUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAABgAfgcAAHAHk8gOAHA4AO8AAAAAAAAAAAAAAAAAAAAAAAPCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAYAH4HAABwA7HYDgBwOADngAAAAAAAAAAAAAAAAAAAAAADwIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAGAA+B4AgcAOh0A8AcDgA48AAAAAA\nAAAAAAAAAAAAAAAAA8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAABgAHgOAIHAD4fAHAOA4AOHgAAAAAAAAAAAAAAAAAAAAAAPBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAYAA4DwEBwgcDgB4DgOADg8AAAAAAAAAAAAAAAAAAAAAADwiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAGAAGAfHAeIHA\n4AOBwDgA4HgAAAAAAAAAAAAAAAAAAAAAA8CMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAADwABgD/gD8BgMAB44B8AfA8AAAAAAAAAAAAAAAAAAAAAAPAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAD/AAIAPgAeAIBAAH4B/wf8/wAAAAAAAAAAAAAAAAAAAAADwRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8IkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4EUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAeCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAeBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4CMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAeAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4BFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAeAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgCMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\neAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAA+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAA8ACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAB4ABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADwAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAPgAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAeAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAIkAAAAAAAAA//////////////////8AAAAAAAAAP//////////////////AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAjAAAAAAA\nAAf//////////////////gAAAAAAAAH//////////////////4AAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAEAAAAAAAAAH//////////////////4AAAAAAAAB//////////////////+AAAAAAAAA\nAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAEUAAAAAAAAB//////////////////+AAAAAAAAAf//////////////////gAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAADwAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAA\nAAAAAAeAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAHgAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAA\nAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAARQAAAAAAAAHgAAAAAAA\nAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAH4AAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAEAA\nAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAA\nAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAB8AAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAA\nAAAAAAAAAAAHgAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAD4AAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAe\nAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAB8AAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAIkAAAAAAAAB4AA\nAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAA\nAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAA\nAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAA\nB4AAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAB+AAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHg\nAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAQAAAAAAAAAeAAAAAAAAAAAAA\nAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAH4AAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAjAAAAAAA\nAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAA\nAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/\nAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAA\nAAAAAAeAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAHgAAAAAeAAAAAAAAAAAAAAAAAHgAADwAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAD8AAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAH8AAAAAHgAAAAAAAAAAAAAAAAB4AAD+AAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AP/AA\nAAAB4AAAAAAAAAAAAAAAAAeAAH/gAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAP/wAAAAAeAAAAAAAAAAAAAAAAAHgAH/4AAAAAAAAAAAAAAfAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgf/4AAAAAHgAAAAAAAAAAAAAAAAB4AP/8AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAARQAAAAAAAAHgAAAAAAA\nAAAAAAAAAB4f/4AAAAAB4AAAAAAAAAAAAAAAAAeAP/8AAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAe//4AAAAAAeAAAAAAAAAAAAAAAAAHgf/8AAAAAAAAAAAAAAAH\n4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAH//wAAAAAAHgAAAAAAAAAAAAAAAAB4f/4AAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAEAA\nAAAAAAAHgAAAAAAAAAAAAAAAAB//////////4AAAAAAAAAAAAAAAAAf////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAf/////////+AAAAAAAAAAAAAAAAAH////\n////////////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAH//////////gAAAAAAAAAAAAAAAAB/////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAD8AAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB//////////4AAAAAAAAAAAAAAAAAf///////////////////9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAf/8AAAAAAAeAAAAAA\nAAAAAAAAAAAHn/+AAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAH//wAAAAAAHgAAAAAAAAAAAAAAAAB4f/4AAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAfgAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB7//gAAAAAB4AAAAAAAAAAAAAAAAAeB//wAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAe\nH/+AAAAAAeAAAAAAAAAAAAAAAAAHgD//AAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgf/4AAAAAHgAAAAAAAAAAAAAAAAB4AP/8AAAAAAAAAAAAAAAAPwAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4A//AAAAAB4AAAAAAAAAAAAAAAAAeAAf/gAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAIkAAAAAAAAB4AA\nAAAAAAAAAAAAAAAeAD/wAAAAAeAAAAAAAAAAAAAAAAAHgAB/4AAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAH8AAAAAHgAAAAAAAAAAAAAAAAB4AAD+AAAAAAAAAA\nAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAeAAAAAB4AAAAAAAAAAAAAAAAAeAAAPAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAA\nAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAA\nB4AAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAB+AAAAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHg\nAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAA\nAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAARQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAB+A\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAjAAAAAAA\nAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAEAAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAA\nAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAA\nAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAA\nAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAD+AAAAAAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAA\nAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAARQAAAAAAAAHgAAAAAAA\nAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAIkAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAA\nAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAjAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAEAA\nAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAEUAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAA\nAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAACJAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAA\nAAAAAAAAAAAAAIwAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAABAAAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAeAAAAAA\nAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAABFAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAA\nAAAAAAAAAAD/gAAAAAAAAAAAAAAAAiQAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAB4AAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAACMAAAAAAAAB4AAAAAAAAAAAAAAAAAe\nAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAQAAAAAAAAAeAAAAAAAAAAAAAAAAAHgAAAAAAAAHgAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAD/g\nAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAARQAAAAAAAAH//////////////////4AAAAAAAAB//////////////////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAIkAAAAAAAAB///\n///////////////+AAAAAAAAAf//////////////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAjAAAAAAAAAf//////////////////gAAAAAAAAH//////////////////4AAAAAAAAAAAAAA\nAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAEAAAAAAAAAD//////////////////wAAAAAAAAA//////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAAAB/4A\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAAAAAAA\nAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAH/4AAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/4AAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4AAAAAAAAAAB//8AAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///gAAAAAAH///gAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH////AAAAP///+AA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4APAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////wAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAPADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/////////+AAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwBcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAP///////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAALgJwDwOg6B4B4A8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAD+B8AAAAAAAAgAAAAAAAAAAAAAAAAAAAC8CcDGEYRgjAj4xgAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAOAEAAAAAAAAIAAAAAAABAAAAAAAAAAAAnBHBgzCMIYYYYYMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAA\nAAAAAADgBAAAAAAAAHAAAAAAAAQAAAAAAAAAAAJ4RwQMwDAGGGGEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAA4AQAAAAAAABwAAAAAAAMAAAAAAAAAAACOIcP/PA8ABhhj/wAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAOAEAAAAAAAAuAAAAAAAHAAAAAAAAAAAAjyHDAB8HwD4YYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIwAAAAAAADgBA6A8BMAALgA8AeBPD+AAAAAAAAAAAIdBwwAHgeDmDEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAA4AQRgxj3gAEcAR8Yz34MAAAAAAAAAAACHwcM\nAAcBxhgeDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAOAEMIYMOQABHAMMMGOHDAAAAAAAAAAAAg4HDgKDIMwYIA4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAADgBDAEDDAAAg4DDCBjAwwAAAAAAAAAAAIOBwcEgyDMGGAHBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAA4AQ8D/wwAAIOAwx/4wMM\nAAAAAAAAAAACBAcH+MIwjn5/x/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAOAEHwwAMAAH/wMMYAMDDAAAAAAAAAAAD4QfweC8LwfMP+HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAADgBAeMADAABAcBiGADAwwAAAAAAAAAAAAAAAAAAAAAAGBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAA4AwB\nzAAwAAgDgPBgAwMMAAAAAAAAAAAAAAAAAAAAAADAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAHAIIM4CMAAIA4EAcBMDDAAAAAAAAAAAAAAAAAAAAAAAwEAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABwGCDHBDAAEAHDADgjAwwAAAAAAAAAAAAAAAAAAAAAAOGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAPHAwh/gwABABw/4/wwMMgAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAA/ALwHg/AB8B/H/Dw/PhwAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAYCAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAHDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAAAAAAABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAfwPgAAAAAAADwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAgAAAAAAAAMAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIAAAAAAAADABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHACAAAAAAAAAwAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAgAAAAAAAAMAcHAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIE8AAB0EcDBP7+B4CYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHACPfgAAjPfwzwwMBjHvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAg4cAAYQ4MM\nMMDAwYcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIMDAAGAMDjDDAwIGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHACDAwAB4DAYwwwMH/hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAABwAgwMf+PgwGMMMDBgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAIMDH/g8MBjDDAwYAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAGDAwAADjAYwwwMGABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAA4BAwMAAQYwMMMMDBwEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAwMDAAEGMDDDDAwOCGAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB44DAwABhDhgwwyMj/BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4D8+AAXg3g//HBwPB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACM\n--mail.sleepy.sau.158.532\n\n\n--mail.sleepy.sau.158.532--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.42.txt",
    "content": "* 42 FETCH (UID 42 MODSEQ (29997) BODY[] {253424}\nReturn-Path: <raman@cs.cornell.edu>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA24680> for nsb; Wed, 28 Oct 92 11:48:41 EST\nReceived: from thialfi.cs.cornell.edu by thumper.bellcore.com (4.1/4.7)\n\tid <AA28329> for nsb@greenbush; Wed, 28 Oct 92 11:47:46 EST\nReceived: from CLOYD.CS.CORNELL.EDU by thialfi.cs.cornell.edu (5.67/I-1.99C)\n\tid AA28892; Wed, 28 Oct 92 11:47:35 -0500\nReceived: from FREYR.CS.CORNELL.EDU by cloyd.cs.cornell.edu (5.67/I-1.99D)\n\tid AA24797; Wed, 28 Oct 92 11:47:08 -0500\nFrom: raman@cs.cornell.edu (T. V. Raman)\nDate: Wed, 28 Oct 92 11:46:54 -0500\nMessage-Id: <9210281646.AA23424@freyr.cs.cornell.edu>\nReceived: by freyr.cs.cornell.edu (5.67/N-0.13)\n\tid AA23424; Wed, 28 Oct 92 11:46:54 -0500\nTo: nsb@thumper.bellcore.com\nCc: raman@cs.cornell.edu\nSubject:  Thanks! (part 1 of several)\nMime-Version: 1.0\nContent-Type: message/partial; id=703.23422.720290813.freyr; number=1\n\nMIME-Version: 1.0\nTo: nsb@thumper.bellcore.com\nSubject: Thanks!\nCc: raman\nContent-type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.703.23396.freyr.720290812.1\"\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.703.23396.freyr.720290812.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nHi!\n<nl><nl>\n\nThanks for helping me get metamail working. =\n\n<nl><nl>\n\nHere is my first attempt at multimedia email:\n\n--PART.BOUNDARY.703.23396.freyr.720290812.1\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\n\nWWx++GPlcmTt4N16+P7o7trV2vXezdrqXlxiWk9Mc97sdfv+5ejh29/kZGZfW1JLaOvs9Ot7\nbunY09jW3d3f4Nvnb11LWF9mYVv6XFlWUVhdYvBrYW7qzs/T0c/N19HOzMni6F1Ya1XvXUtJ\nSUtLTEpOS11YWOLEztjG09/PyM3pfFxy6f59b3J6XFxdcOPqfNz+6Onx0c/uWF1P0lpJ+1JU\nS9l497/O1n1r5v/g2NZtU11UWlV48eh9Y25ZXlJQWktGU97Z4v3MvL7B4Mm/y+9yXUBCRllM\nTVxR9ebP3ePWy2Jc9d/T3trr2Mhc/e/g2VJOTEJEPUhKVGRd18zU29PX1NPPzt34bmteZmxh\n9V5OYvlhYHnjXVpjV+THwsnT6s7Ree/ZW0hGSFpd7uZsZ1lTVu3fTlnffNz62enVy+Le39Hb\nXWxbT0haWVFIWl9c28u+xs3Dy3df2PHzztn36PhaUVJMP0FUbF9U/tJoVuna7l/23ena7+fK\nwcbg3uViSlhsVFLh3Gdd/Plh2W1YTGzydNx25+3pXF9vZHnnV014YVzP5frm2ebMz1/Wv95p\n22px31pNZ1lbbE1demjay81+5eRNUGRZWddtVeHN9tzaT1c+SV5nVnjLzMO7wczI2Hnde1RB\nWl5JSF5ZT2xuatleWdrP4+rV7WrL5Oze2vVbyMXi783OTG1WTEvtVUbwbD9591lGX2VX1mF+\n48z6d+NefczC6NTD0dfS3HZvbFhdTGtrZGNN60xDRFJFcVpCUtHbbsTnTtrAX8LI3Ma7zFjn\nz8zU6UFBvN5dxNZIXX1OTedNOdZtPHTbUUzNTkLV9DzP30bRy2vnxlDby9nGur9kvsrJyd5c\n6mpMPTIqT1YyXsdH+L7tab+6wrnAXNi15zzPRTVm0L/MVtvL6VXsSXRPc9dJSsS8TsZvMVCw\nvEw0QfJJX+c6TLvKQ9W3bFfCvjd4ym/LxNlXzs7lYvo9OLxeMEddVkZdzWnOxLrAfM/ExtTY\ne/49VfVFPENfYEs/Qu/Mv8Jh0MdPdcBLN8G/SFdfalfHtULStEtc1T45285BU/X7/MrGQFzS\nW/1U51lK3sbPP83Rc8BjPT1STV/cUEbTTUfiflHPyXXBzdzNwsnqz/7P0VnTRkdIST1E0k5O\n6/RIXL7rZLzDWlNXYE/s0mBz00xSyGtmzc9MZ9hfUExJScvV79P3UUxz3/XwzsdO7dHozNzq\nfElezMx4V9fqXev4Sm5gTkRx71Bm09nl7W9n0NzQ3M/LbGvS2+ZLc/A/SPtrSObrWf7a3f7Y\n3drL48zH9/jbcPrmX0pP7U1AXmNo63jv63Lq1OV/3MnN2dXhztfl5vpo+NnYW0tJS1JMRlp+\nZu547974eNzH2vjVyM7R3X9sWVZYTkRHTl5cXNzcz8rS2W7k2tjPy9frZmblfk9OUFFQQ0hP\nU1BVW2jn39LN7dnN0dDVz9LX2t79alpdeFhTT1paT1Jg+PDU0tR6eHppZ09SXWvn5dvU7H1s\nUVVYaX7t3ubY793Z0s3X3d1sXk5DVmdqWkxRUU5TZW7l3MvK3tnOztfPz9PmZPFkW1pd925T\nRUdMT11YVWFr1s3RycvJ2Of+adXT0dXzam5gY2x0WVFOTlNbbvrx5NXP2dPY9O5wfmxVXk9K\nV2L36tnN1NfK1N/q7dna6Nh3eOxi7V1Sbl9aXVZPU09TUlBVXt7g1c/Oz9THydTS2ez7XXJ6\nWmRfTU5ZWm1VaOXtdtnNy8vOyuLgfHd1XHtdVE9NVFBHSUxUb3z8cmJ+ysXLycnM09XbZ1tf\nXGpXU2FRVlFYbWndzuV77dbMzvdja2Hr7V1RT19YVltp8VNOZVpt58zHztLTzuHl7e58XGxu\nXlVOaGtw+nXgeWdfX2lncmjz59zh6eV63dvq5tn+ZlxccmZaaF1Se/3e4Wn859XY6Nze5dt6\n72Bf72VYTldQV1dPWV9yZmX32dLY2nljav3T2eTa29bn9NLg3dTb1M3k52xTSkpQVFxTTk9W\n+enh2Nbb5+D47+7a2u7h5XNiWVv/ZVVlfOLnYvH6XWBiYGF75mV1bWro08nQ19bUzdHe793p\n5udte1tcYWJMTVxvbU9NRlht/XFk3Nja1tXLyMnGzN79ZHPc4+XjXVNXSk9dXWZWT1Jc6d7o\n39XP0N3W/X595d9eWV9kVGvw3tPr3dXldWVh9n7u5WxbZ+vxaubsV1ZPUEpPcmPv9enO0tjf\nz97r39/vfeLsb+TW3O7f/VlOUVlbVF9paF996+fi6vptdvbjYF9tXFlRVm9la+zj9mz43G1l\n+3pnaeLb93vv7F1OUFxRU09WW/TKxMzLyMrN59fW4OPsYVROTE9bWFBWVFNXXFdef+zdX2js\n4ebY1+nVzNXc6e/r7l5SWlJSTFRkd+7e2ePv6ODd7NjQ5vPa19/revNub2RXWmV26ORm5XHu\n1OXr6Ofk7XLs2+liUVJYV19kTk5RXdnQ4m7o7tbM1eZle+re19rX/Fp253BdYW1dV/nP397X\n2eLZ6tzgXGJTTl5ORk1RUFpm+/P1/n757+nfy9LvaF7o2e3N09bP1Njf3Obk2ONnVFR7ZlBN\nY2JO+GJpT2Th5/pezs/Pz+5oSk1NPUZFXWnXz9LP18zdfvtr7c5c9/hFUNbOX2fo2u9patXK\n48/N4+zUXU5ga87z8nT2Zf7ZfXt461VLW2JZSFZQZnBvYXHlUlH7zufc6mlgY+P33NLT19zN\n6H7f9eHYzdHQZlDfbVVs31xcYFJHUVZp1WBVY11ma1lUTVto0NF+bsjLacC4w8K4v9HQ21lI\nVkVAR0k9Q0g8S1pRS174Umbh5Ovuy8nYzcXWzMHG2Xjf29rV+Hb58Nzt1u1fWmVJQmBwXlRY\nWklLSVlNP0pdaUlc08jByMPGxcW/wNnNz93j1dxhZ/tLP0RHS09KRD5W+fPd4N1jXHZhXmBT\nUWRhYtvOz8nKxsnMy8nT0NHt397kZ0xPVEtBR09HSU5QS23/TNbTcs26vbu/vsvQzNXvZWtP\nUVtARFJWSkdVQkhnQEl5f2jx2OLq4NDP0PLNwMjPz9TZ2ePo9uDvWkdNR0zgWV3s2lhk1mru\n29fP1m5yztVP6+B4b9h3WGRLTUdDUVBY5W9jWuzc2eFj287UeHfcfVxT7m/f1eluXNrSztPX\nxN9c1OZOWvb9UltSS+pZS1fwTWXSWVvW4kfrzVpmxtRkysbn0M/c81dXVkxMU1c+SebWYsW+\nT27F21dg8Pvh3kM8VlxF1c/e0M7J/e3c4OLSyOFdz8bOYkhaWVdNVlVLUk5hbGdp8d3ZbHzo\n13lvztLLdu/VYuXOWkj9/t1cZnlUTVnYXPjX3911fN/qRkrV40pTzkRVxMjr3b/L2efTXdzd\nWOXdWkpvSzlCaGDkzdZjXNpkTN/NX+e/2+jF0kvVy2JZzddZX1ZcVFfseklRXmlOWcp4YszI\n3mbRaXlWTuH11OTLyHtRXd9GTGrta2fE32LLwN1q3NzJ3tfW8mdVYlv7VV9LQ0VMYExv7Wpp\n7/Np5tXY6tfXfmHm2N1eZ/JX7uJq0NPY2+TL1X79dFBaXFBpZ1ZZXmtPR/p+a+hlV/Dj3tLY\n5v3g09xo73nr0OpTXGBNZ3xmYPXsVGfq+e/X5HX15+nb5ubOc3hcXl9v3+VrWXlaY2NaXW3p\n9exWWd/cY3/c2t/w3mNZaE9JXlZP3eza6NrN3cfBzM/P3ubX0XdUQk9UTFhKXGZa43lT9Onm\n2P5XVtzKbFB63+rgWVNZVnBZWsnS+s7ScWTe08q/yWHs5c91cmVAUE1GWFda3s7Q5snI1MjO\nwMx8195NU1RFP0RxS0/bTkTv1vDfxcLS4trPxsju0dhN5Oli0ddmXtxtRkVFQFVaU0xMYWfK\n2uPHx8rn7+vt32FSRkFRZt7byczPvb3B5tXN2ntMZ2fT5X1TTlpNTj09O0JBPUxaWNzExMDA\n2MvCyd9reM+8xfvP0VFLVk9ZZk1Z6/RSU9fP51xi0tnZ8XxRSk1PW05y5vRNVHN86efT4XFq\n5M3T7Wb43NPO9uPu+vbc3mTl3Pbx91/9zMtORGf3S0l2ZFdSYN9hR0tTXlpuZNDO7N3W3lnd\nxNLOzsvPde9v819PTlxlXE1q1vRr4/RfU3vHztTMysrVy/F+6U9LRk5QTk5IS2Xob2lcU3t5\nX3Lh2+jV293se+hnXftpa+Xu7ufMyMHf5tTu1N39UfbrZ+lcTk5d/XTp4PdmYn5pXWVQW19R\nUVFYUVJQcnPwysnezcLEy8/obGRZ7/VRT2BnXE1YU13R3OfY2+XZ3O3j3OXp2+5iXfBmTEtO\nU1ROX9l8dtDM91p62c7W0dpyfHHm7mJh6F1KSVVfUFRv7N3V587J2tvud/d27W5OU2lpYmvY\nzt3p2+H8dXpYVk5LTlJ07Hbr2fBfY3Xqde/b3NXPzM3T0tHe93ZVTlFQW2RWU2X+WEhZ4OH8\n3tjb3u/329ng19jW3nR25+fqXVVaWWZ6YVdRWPBuWE1PS0lTeebf0MjN183Mz9HNzdfl2dPf\nbVZQVFhWVEpGTFlaTWbe497Py9bRzdd9YX3scl5hX3Po8/92eOTedm776+Pn29xsZ/b3X1dN\nTE1MXGju6PPp3uHr29XT2+hcWN3Y7e3a/1VaZlVb9uLa2OPm89bO3+/61uH4a2ldVmFhUUxS\nXXZoWPPoc+zfbVRf5uHo59/U2NrKzOJofGxQS1dgW/tsXE5TdnJZbdnk6dLO1/Lc2d7a39TP\ny+dyV09TXVtKUW1nVFpmbm3j1t/7XnHt9l/u8Wt76uH6Xe/V2tXP0dnb5uxvbHpcTkdGS1hQ\nWFp06d/n187dztHa13Vh+NTqdGP6+FdPVGVdaGJiXl912Nl+beDW4Hz32+Tc0tTh8X9iX19R\nVlpmalxeVWlv3Nrd39Xb0/nu2N/q5XtiWF/d3XVQXG1WVVJYX25wfHpZbdT2cNTe6+/s2NHe\n++9+WW3Z7+/a2OlqbmnvW01SXmtldl5t39jY3uhmY15tcfnfztjjdONZW25WT05yYvl+/X7m\nytLk2th2YO/n8G136WNeWOx6+PHl31v1bN14X/b2d1tPWujn4OPrZnFu3eVibNrwau5lU2z6\nUlX+6u/9dnXo4mBo3N/vau7p7O3g1s3Mys/P2+rrX1RbUUxVaVpLW1BXV29ZWnptZFlY7mHm\n1NXoz8XP2dTSxsbN3d3qYF1PVlNcVUpARElOTmpad+fn3Obs2M7O0tbL09XM0+nj7tvo82lO\nTU9UTVdRTVlaVGFod+vl8OfP6OfxcuTr/ezU1uDg2fn8cm5cUFNaWU9cVFBd/u1xbfDa3d7U\n1+Dl9udtXv/va2JiXW7p5ePT1uLrb1RRZH9ifdjn92rrbeTU1+r+a1xvZGhWXFleV1bt4vvk\n0NTY5+V0cGZXce51Y2JlZFnuburj2+NocHjo6HdkZG91VF7q2NDX0NXHze7a7VdZbNreZmdt\n+f1PSlV8VEpJQUhJTlVqeuvked3Ixr69xMfS3NjU2F5VWlFaWWVhUFZb8XFs5dzgZXbtdPzP\n1fRUYO1iWFlrY+vj6nzv4W136HFp8/fuf3b079/cViungwoApICeACmfjzDL0bw5wrWhMCCo\nK62cIBnEn8AlLT20qGgjN6+qQS5K1bS6OjXNttNARlR+2VZDU8bB39vR4MrH3vrY32VdWlNT\nTllqZO9rbuHR5fHZ19zc7XRabGtMTVRRVfne6vza1M7O2s7R0Nnhb19jWGRqVEpQZF5PWV5S\nWP9/befZ2dz32O/WycnQ3NPn2+L2TkhPUlpnbNbo9MPWWvXO5fT/VlTj7eFxXFZnX1ZQXGZd\n8F9eXu/b8Vhe8n3s2v5w+OPd1eDXz8rK1tJpbHJ8VlBaXVxhUl705vF06O72bvF3a/XczNXX\n2d19Xu9WW3ZeW19eW01XWlP4993b6enfZUVTb93g0u1l3Mvd4c7n3M9rUmX3z9tfX1lq6+JW\nWVpeUWJtWvnR3mhu59fo8uhpcnnjXv/zW1hxU1RN3Mzf3fdu18ja19PrY/hiXXrpXk9tTltg\n7eht7EpWYe3j+tvoa3vT3dXl2N/gfU9nW2zuW2Hw3NvY0eTY1dhiWFRgY1hOTkhVXtt8WVxc\nzejX5trK2npub97P0dtfXPVt7WNoeev3+GfvXlbvW1te6nL6a/J5+N/Xy9Z63lxT0+ZURllJ\nUHjv2m7N2eLNzs3b+2NPT1lWc1hNSnhra8/V28/Q3WxSzdPd9PtRXWd2YVvcZ3Zi7Fvj/dZi\nWO7t1c3Na+lt5GRfXlROUklFRFPVe1nfyNTadV+PuAYyoo3PFBSdqcmtMjXKpPNtNXYzzKo1\nIUnBvv0xLdSrwjY547G2Tz9Xu7BXOWS/2NJkRFrZ/EY8W+nu69nZ3NrLyc7a3f5LVEzp3dfE\ncOht+NxsVEheTDxHS1r9091by87abmZeT1xlX/vm1s7kcmbddtXPzMXO0NRWTlrvfWfpzeBq\n6+/wY3n290xET0tJeOf+V/73ZF1ed9DKzmrz09vgatTfz+bhT0Vyx1Zl2W7Z8VldZejdfFpL\n3+Xna2fwamZQxNzo21tg39PmfORQXlnfcmbe/drje3Fw7u3R+uVoU1/l1GNkalpPak7T21zk\nV1pmc2Xp59TT28vN1lZoZElLS0hTXV1U38Xbxs3Iw9Pv48xuWGnlYU9eU1hzZUtVakflZU3j\n72vf0N/r5OXVzNrZ0+f+ZE1QXEpRUFRoWfxaU13rzM/V+tDK09/tXG/9+lpNSUFDSUJIXGfk\nzc3VzL7GyMjJztzU0M3czsXN0NrsfntVTFhNSEZGSUZDR0tFT1VtdGBaZ/fb69zk3t7e0MrV\n0dZc4fhv4mzm4HXva1hn5/Dv3tnMzNzY3ePea1ZgS1VMUXVtXml57P13bvl+39np6mfldfPw\n5OHz7/jxc2ZhV1JaT2zo4fpfYml0ZV1OU1dqdOrezsXKztnj3djleGpc/ffxeOPeY2BmX1NN\nTlpNR0lNVvzm1dfc3NjNzNLT09XZ32/64dbV92fPW8mm2R0RpIwcDb+mwKo1J+miV1m/b0O0\ntFZBUF7ozXE4RMPAU1Bc3b3AWERo0OlbTVRp72lJTtvP5G703s7XX1773/ZbYl964O9sWfLd\n5vJiZXdvaf7q4/budV9WWXrtfGri6NPJzdrYztnwYFRPUUtNSVh+2NHPzM7Dy9psWVJMVFRL\nUWhsYOlfXnBjbPfm4vl+3Wzi0+zq3t3h3tja6c/fdOVqbWNbTUlmWlNVWmtge2Re6+DWzc7J\nzMfFzM/W3/xvXU9HRk5FREZHT1NYUWXv39PN1ezS1dDVztrb1uR0/uFjbWNfWlheWGT5WV7q\n3ex/Zu3d4t/b187ScXbq+Xln71lbWltZW/pXYFBRWFZbW+vOzdPm7et4499ZZWVaXH/h7s7M\nzsrLy9DR2WBVWFlRS0dCTVdhY1NfU2br19XSz9HX19lvcl9s7VtqXFxf7udy3+jf6Ot1dPJs\n935v8NjY5c/b19PZYldbU1FNTkhGTFdTVVb20t3X0MrHy9jOz9TU0OVXYlpeY1tXU1JQVVdT\nUV9/a2hnZd7QzczR0dTpbVVXXlJTVWFkZvTb2s7Ny8rSzOT6a2p6c2lTTlphYG9pXuv3aWXr\n8fni6O/7+Ofs9V1PTldXVVZd89jV3Ofi0czQ3PJxdH5yYXHf2Ot+c2R14dze9Whral9XUFJh\nanlpfNve3efo7Pfh5f5ZSU5YXPXf8O70emrz7+zu5OLl19rY2dzj6e7T3XrubeV/7/ZnZVxV\nUk1JSlRZTk1OWmt5YXvs2tLOy8vHxMbM0uN0Z2ViWltp7eP5WV9xeXNnWFZfXVFPV1xlcv1/\nfu7e3t7c1NLPyMnO2Ov78WJYTkxOTU5LTU5WZv766dvd08nIxcnP1n1cWl9cWllQVGFrcP1w\ndN/a2OJ2/fLxaVlaY2l66O5t/d7k9Pnm4O55YmFhbPl/+Orc3fNvaV9icurefXj08d/vbmRf\nZ2Zvb3V5/d7a5npvYFVVWFts59ja7mhe+N/h3OPd09frc+7h3udqXmVt/XhcV1hZVVBOTVhv\n7OPe2dfU1Nvg497S1fF89Obe4ebtaVtWVlNTWGVsW05PWFlbYmzu1cvHxsfO2+Hj3uXz/HRo\nW1dSXej0ZF5band7dXDi293s8O92Z1tRUlZp597m/fnl2Nrj8O31/W9hbu7v83NdaXD782ps\nfu7g7fxfW2l18evn5eDY3d7e2tPT2/5cVlhdXGF4Y1RUWVZXX2hiZ2py7eLU0NPY1tHPztfc\n3/5mYlhTVlhWTktX8NfP2+jo29HY4fDufWZnYl1jYVZNSEpWX3B97t7SzMzN0tzY2+3+d2pv\n7+h+e3x1a3JkUlJTWF1aXWPw7frx5dPP0NPa5fLs7vxoW1picHVuX11cXV9qannf29rr6Nvb\n42lfY3h/YVZXa+3te3Pn7Ph9cW5u7uPo+Xjl4+1+ZF5qd3xnY3Ps39jb7N/Z09fm9mRfWlVV\nVllnaV9bXWlpa3fw+XDq3ed+c3Pu3tXW2trV1NpxZWVob2tqZ2vv7GlaX2t2Z1pZWnzo6uh1\nb3v9+2RbY/faz9nUzszO3uzl39nnZkxGSUhISEtbf+fc3NjOzMvR2PNaT09VW3Tt493o6/v3\n6Oj3ZmH43tra6eHn/Ph4amJUVlpYcPbs++7j9fns3uZzZl9lXVFcbF5l5dLkUnHO0nrtztT2\nZWN4W1Ds0uNnc+rzZmB3bGpyeG7+6NfN1OPg29Xb6WdhWFBQWGFaUFRaUk9Z8NvmbHD56tnR\n19zW0M7Q2ejo28/ZYl9zZ1hMSlRMTuHpT01272ln3MnP29LTalvb1Xtdbt7pXGr5XWfn3u9t\n6tbga3N2ZHLo/1VIRk1PXO3f2tnOz93f3Nn3bffl5era0+9daW9fX2xZTFj8YVpg9dbr387a\n69zmXF5hXFNRV1dSWeXa/ejV0tDedXFhYXz17d/j7tvpXn7a3vPp4uHrdutsWWhiZm5VU117\n7/v37ftmaHNoduDa2eLk29/r/uDlaWhqZldOVmJdX3RsXWrd33nk2NLOyM3o69rmYF5sf3di\na/9iV2NeT05Xcend2+Pp5+5oX2dfb/9zc/LXzcvM2Or4c/xeUFVUWGVeWVhfYVdUWvjRy8zT\n3dHM09nb7v99aV1ZVlpdWlhYX2ReYWRdYPPb1dLS2ufp7O369dnQ7V9YU2FubXdkYv5sYmBe\nWV/y7HN19ODa3f1o4s7M1+vtempxbnt2eW5aUEtQYnvq9/bf4t3b2u5tfe3q3974bGtpZ2F1\neXV5/fbr9m5mY2doXVZTWuPU0dPS2uzs7HBfWl/9cG5lW3Dr5X5mfPLh3ul6+9bQ4XddW1pc\nYFhVXGz28u7f187O2dvq/GpWTEtPWGV3fm1tbebZ3+Xqd2NbWmzi08rGyNns4Obj5HdXSEdN\nVFlSUlJcbWdifubo0c3OztXg39vb0tLd49rc2+VaTkpLV2hlWlFOVFxaZ25w7et2anfc3N7n\n5d3c2eX7+NrQ0tnc4e7p7WpaUUtOXGzl7G5cVVll5tbW71pt3t3uY1hj3c3Kz+BoV1x6cWZo\nd/b3Z1RVXGJ9/G9sfPdrWlx1euXb2tbT3XpiZune2dvqffXh3+Z4WFllYl5daXBbTktU6s/J\nz+xwW2Tp3Nj+bmtt8+/6aWFx2s3O2uno+WpqVlZn/ufuaU5HTFh05OXt9P7p1M3O0N9/bW5w\nWEtPX/Lb1NHT1NbY61pUXFtcWVZcZ+zl8l1a8d3a4ejmemhz6exvdur4dvLzZ1leZnX16+Hg\n1M7M0vxpXWR8bmRXWGrf2uliVF1n9t/u/m3q09X6X2R9bFNMSU9bbOPt69vNzub69PVxZWt5\n3t5mW+/a5HP729vq7+PzYlrzz9N7Ulhn8HlbUlZp7nhbU05QXefVz83P0tzmdl9cXl5ZYfXq\n3NXPyczV3+77Wk9RVVdfbW/o3+xeUVv7bE1MUl5aV1ZY6czDwsjU597Tz918aGrf3elmXPLp\ncFdKS1pdWlNY59XV2dzd3t3nal1eXmJ/dm3v3M/T5vNsaG1tXlFPWGdhXWjf2NzZ0NTi39HQ\n3/D9/3JdU1ZTXv3v+WptdfdqWVtl5NzqaVlq9Ov/d/Xq3uhoVktOZ3X169vQ1upp7s3Jx8vZ\nb1loblxdd+z7XVdf79/ta1lNTWLqfXP55uxuX15dXl9havL6ftbP2Nve3dj7fd5vWHrd2djb\n5GxTTFJm+9/k/vNyXFtTTE9Va+3n1c3JyMnO2tz2YmJcVlRX9upicnRpYF1eX273bV9o7Nre\n7uPY2eLc3HNdbWtYTlNw/+rq5Nrf3dvm8+x6X2htYlVSXGVrbHhgUltiZXvd0s3O09X0a+/j\n4Obx5tP2Xml09GdZUk5NXvtpaGvv2dTY4+ri5Pb2amD95OVuaHFrWFBNSFDs4dTP08rIzc7b\n7drfZ1pPSURJVmVfWG/8dHLy7uLUzszU2c3Q29vd5upuXVxYW370blhLTVVTT0tMV3blz83V\n1Nzi3+Pd3dra3NrneG1wZ1dibV9qbWdtbuHcf/vzb3J6ZVNTWmVka+Xf5+bY4O/sd3hu9eTb\n7V5UVnF+8eDtZ2r04urw4Ob35uFvV1Vofnl3/N/X3e5lWVxfYmdldOHT0+H889/Y9lhVX2hk\nX1RPXXHo6e7s5tjac158295rU09ab9/Y297l29PU2ODc4u/q6+ppXWJSS0dDSU5YW1pl69XS\nzsnHycrO2ez4629cVE1RXnZ3Xlhcd+78ZnvY0t9uctXHyc7abVhWW1BFQ0lXYFFSbd/g7dvO\n1szDwsrp+ejjd1teW1tZXWRnam3m9FlPXf1qW1py3tjY0OBkbW98bmp1/t3b3/Nz7uLe6eLh\n8n3f0eZgW3P/SUFf4FxGUu7+WV7ieVRgzMHN08/N02lffmRYae/taWfo0dtqa+neY1FUWlpO\nVG91W17z4enm3NLMy8zU3N34cn5hUE9XWlhWbt7ZfFFs2+Vya9/mS0f23FBH88fL7d/Jy/lm\n5+FYVeHN2l9d8HdVT1x1WVZbaGZm4OhoUk951tfj4tLLzNfZ3PVtZ2RaT05TU1FXZOjX1+bl\n3u/m2MzR+Fln2VxGS2XT8mXa0ltM385fS1Tg0V1N89hqU2Lc297Wys5sZ/7lWUNIS0ZHZ83F\nzMS/xsrhdeLQ11NW9GdZWU9KS0lJX3pTTUlEPU3aytBxx7iwq6+7r7rYWUJHNTQ8PDU7QT8/\nR1xPWWlo48vAwb+9vsLEytHd2NfceXj5XV1OR01TUUhJTEdOcez2zbu+x726yn3a0Hnpcu5Z\nWVtASj47Nzw6OVRbWuTLz9HDwMnJ29Xa4MTV1sTKz/Hf1szW7NZ6XtvmV0xFQUpTXnJYXHdY\nQUBGXFxm39XUz9Xc4N7Y3eRo6drW2tlqW/75+F9bT05g2theaOXU2NLVfvfp0+5XW+PnYFtL\nU3vf3NrW5tvQ22dXWVlZW1xZc93P3WlrXmJuX1FPX/z+6tjU09t8YFZd7uPc4Ozp1MzN1t3f\n6HhuXlZed/5bXFZTX+rbbWtufVlLVltcXm/8ZO3V1t/q5u393t3t7erwdPbu5uDe2ud6aGFl\nXmZ4YVZXen5dY1hZ+9TY08/PztXvX270aVNQX3Tc4nZ75uXf4F9NT2R1aGVXWF9gbWZe7tTP\n1NDR1NjkcllcaF5WU15jceHX71NU79DeY1ri3Wdv6tfW7d3Q7PrTzNh2XGTxaFpr6/hfX2dW\nT1NpcF5obGdkafXc3ej6ZW58dt/R3O/i3eH0bWRhXlhaWV5YTlZs283NysbM6PjW32Jk49ph\nSVrT70RJ4edPSWLabFDjydT37t3fXl7k1+Zoaed4W2zt7lhPYfFiVHna3uDVy8TD0ePe+ldM\nUVxNRklTWGH9727w2NDQ3N7Vz87cYVbi705KWt5jSl7uZFvgwc9ZVdvJ/lDfytZvZ25VS0/s\n6VVV7tTcbv7h0tnm42JTWGFjW1pq08fYcenc5OxsWFdWTlNZ9dza1Nrld3FoaWFl+eXfbX/O\n2l1d4M58S1zab01rxsbsWn/fT0Jb2/tbXW7tXlz/8+934t7qafrOyd992s/b9u7pZGFnZWBd\nVU5QTk1OWX7r7evu3NDMzNv7XlRa6+Jw283R3N/i6+jkbVVNSkxWV05ece3q497Z29/Y2+l9\n8OX3Z2/l2tXge2tqXGReUVt47/lsb+jm5eluXFRqc2Fh793mcV/67eTc2utjXe/U7mNx4tXY\n7fpydn18cG9ueer+XFpcav9t+fNxZXDl3Od95tr2X1hqe3nf3ObyZmp5W05KVOzq9Ovl3+nh\n3uLe39/d82z63Nbkd1xWaXJqbmxw5ux7cl9nbXZdUVZu+evl+mhz5NfpauxuU01RbuXa0s3J\nz97b3OF+aWpv/2xsbv/4cWpuXV5pXFdZb3F95fHs79jT3Xde7eXg62VYUltmcXJp7Nnd7njk\n3dvb5Hly595qVlVVXlxbXlxdY19vefzZzsvMx8jQ2OVlT0lISkxKTlt25OV9/t/Z2dvW09TR\nz83S19LV4flxZ15XU05JR0hNTk5ISk9aXVpt3szFw8LCwsTI1mtXT1tjaG1tfuvsblpXWl59\nd2l34t7n9vr9a11XXGNsc3Pv/Wv6/vbp4Njc6O/09njg3OHieWh//nliY2RiXlZWYmVj89rX\n+Gln/fTt2M7P197qYVhQWWdcT1JdZ2xiY/PrdHn569jOy8vQ1tDO3F9WU1NTS0dNXnnx7X7/\n39bN0tzU0NHf5Obp625aUEtNWHBpVUtLUVdedufg29Xa7/Th19TW09zc19vi925leu10Zl5c\nWltdY/3obVpgbHj74dznbFtr8G9fXfbf29DZ4Nra1dTZ4PZ2aFNIRUlNUVROTldm9dzS0NDP\nzdbm4t7m6972avng5WRe9ut+b3ZqZW7v1tb4X2JaTk5MSlNXXl9XWO3T2djSy8rLz9vr58/N\n42lmaHB5ZFlbYmVXTU5fe/fm7Ovb1tn3Y2Vv915WV1zr2Nba293Wz9rv9uTd4XpfW1lZWlxZ\nW1VLTlNbXmzx/eTUz9PPx8TS7t7dbU9PXX7m29ba1M7Y919OSUlLT1BOT1/86t3Z2dPa63P3\n3tzha2Foc/X07ePp287Q2m5dV1daW1dZZmRaV2l66d/X2uTj3Nrv9tnV4e34dV1Sa+BfRkJV\nb2JcauTTzcvN0tPZ3dzqdWL+6WNOSU1YW1dXXHjf29vk8e3ue19hauzQzNxw9+XodF1dXmrv\n8Gx43Nfn9+z1+en4X1VQVvd+V1lr4Otw5tjZ3tnZblpv1tV7ZHXz9PF1aftlVVtUSkVPau77\n/NzUz9HV1N3dz8/gbmtxdWZbXWBq+mRQWfbv9u91X15uaWRcYf/s3+LqaWBsZmp4d/nczdfm\n39TT6ubZ7V1ZXV1abN/U32Vq7nxhaXRaUlx27mtVUGvt+ffz/urZ1d7k2NnzZllXbuTe/XPc\n2e5iZHnt3t7ofHl9c11VUE9XX2xkbuTa1t7o3tzd5XVmc+TW22xWVFlcUU5RauXe3N/c19HS\n2+Xz6uTf6GZbanxtXVlbYGxsZl5y4Nzm6+rq6O//b2txcn16XVlSWnTr9/3p39nc3ubq2M7X\n73Vx9n9iW2zp0tf8W1VbXV5aUlRdZmhkdODOy83U3+nk/WRZXF1gX15pX2rx9npdX+zd4tzc\n6djNx8nT3OxxYlZOS0xTTkhIT2Hm293ncuvX1dx4aOvY1tzi3drX4WRbX1pRTU5SW+ri8eXd\n0tPk7+Xa2uLucmFt+GxeX2FcXm5eU1hrdvVoa/D/ee7p39TT1Nz2bW/3dm1v/P9qd2345v51\n+uv77t3c2d/l6/ju43tZSkxPS09XWV5z5NLP2NfY3t/f5fz66u53XlxbWFlZZO/g53Zq2cvM\n0d/k5fX692lmWVJRUl5v5eHudnJzdG5gZH1qdubb1dvh8m5taFxcYGdmY2x0+ujh4+Xn3dnZ\n29ra1tzzemRTTUlGRkpW+fprYGP95NXPzszJy9H9aXri2dXZ2N7tcVJKR0tMSkhFUm/p2c/I\nxMLG1W9bU1FWW2FSVG/s283Izdl5WVFOUV5gW23mz9HV1trd3Njeb1lRU15pZ2/v4dzoaWZj\nX15mZF5bau7f3uXa2t7raWBqcmlcW2rcz8/d/25w7nxXUl1o6evn09fd82JUT1NadXzr3dvd\n3tjj5d97bWJaW195ZldQVmfm3d7q7t3X3X1p7djTz9bZ2+VsVElER0xRT09b7tPO2ODc4+X5\nWk5Se93a5uPSxsLL6HX9eGNWS0lTbGpifeLOzN1sVVFUVlRQUV7m2djPy8zS3PZtXVheav7u\n6N3b2N3za19cWldRU1/26d/m7eDc3WxNSlNp/O3f3dff39XV0tPdbFJLSk5UXml47vf939PM\ny9DiW05SXn738uLa2eZvYFxTWFlSVmfn4On+e+Xd3+Dub2lwferc2tDP1NjrbWBbYWhjU09T\nXWhdX2fm1NrX2eftZE9GSVvn2trSzMjI0ehmWlpfW05MV/HW3OPb2NLXbFhbYW9tWlBZ6NPP\n2N/m39zqbVhdaGhjaPPb1NThbV5XV11WUU9SYWNheezUycXH2e/7/H1dUlhj8OLv7m5ua11a\nW19icfTy+u/ZzszO1dnb5nJXVVZXVlJWVmXu7nNyb/Hh4t3e29LMy9DfdmtkWE1KSkdGTFNb\n7NXX4uvf1czEw8fN2d71Y1lOSkdGRUVKWmXx4+Xb29LO0tDOzMnHxcjXZ1FMREFDR05PSktc\n/ePb3dvRyMnW6eXf3dfee2hrYF9cXXL38fliXP/d5H5mVVBu0Mzdf3hkVVJr4fRgX15WVmvi\n7nT95uff2dXU1d3rZFlm+Ojl/l1ZXXftbV1dXmJxZ1pe++DYzcvKz9rb62daX2haUFNdaPt9\nZmNx/OX5ee/g2e776tzb7W9jZ/3rem1pZWBfanBycurY2OXz8drW7GxsbWRy9G9dU1dr/WVV\nVV506Nng3dDMy9fl2tvg6ndrX1tTTlZga3F4a1lWXPnra1xRW/nk4fvi0M/Pzc7OzcrP6ltR\nT1NaVlVg7+bq62FWWFdUUVNc79zkfHzu3930ZWLz3NfW1tXhdGBWUF1raWp72s/LytXef2V8\n8mleW1lVWV9vYF728GNUWF952tHV3+jo4N7k5N3V1drnfXltW09PVWL172dXXW1pX2b55+Db\n3+Lh3dLS6mNeWlVTW2d6fd/Wz8/U4OPldmlcWlVTVVdv+m9ufHR55NPV4PV0bWlobG9x/Pn7\ndX7p7Px4bG16fV5KT/be52/z29/j0tp1Z2/m8mJr3tftX11mY2N+73Bz7NTN3G775GZXY1ZJ\nUXxoaO7rzMTUUkla8vvy5PXq7tzV4dzb3dzlaWL+6G9pYU9NU15WWGFr4szK2/97aFNSYvHt\nzcHH2+7V1epWT1FaVWRkVFxt0MrU19bdcGNeUE5QXm5ZU1tiZ3Dv3djU197r59HX2Nvl5+js\na25iXVlOTk1KTFJaXmZ65uD0+fPv3s7Hyc3MztjmZ2BYTVRuVEJJXWZVVGr16eXR0uPcz8nT\n9W3valBOUVdc+dva7uPV1vFSVVRQUFBddezXz9Xd4t/Z5Hvs2+j74tjX29HR6GlaWlVPTUxN\nTlJSUk5NdtTU1tbO0djMwM5UVuv0WE9eeF9f4tXo+OLc4/7nzs51bHBVTl13ZFhc3tvt49bY\n4n1gUlFYaWNdb/Hd4v9kaF5fbnBfXv3Y09Xc7trNz9Ld5+bl3931W1pdU0pISklJU3X97d3Z\n329dauvk2M/R1tHLzdPkfO5qU09OVV5wZlZUW/nt5Ppn6dna5Oze2t/fcVdZdNTbe2hofWxo\nW09UX2VeX33o1tHc3vZsZWl+cfHZysrP29nd82piWFNhX15ZWVteW1xbVF177fb47+rk7uHa\n2c7Iydno5uHzYlZQS0tPUFJTVF/x2M/MyczP0tnl8+3wZFtVXGp09m5YVF5rc25y3tnd7XVk\nW1hbWk1OYOHXzcrLztff7O30enx+ZF5q/+jscF5VV1ZWVlVdXFxc7dLMxsnQz8/Nzc7V/V1T\nT1VRSk1WXF9iX1teXm18dN3Q1d3w8d3c/mxdZPfk3N7e6uLc5WtWWlxocGNm7dvb+WNu6+zr\nfFpd/+TobV9WY35qY2Z479jR4OPk5Odxbfrw/P/7XltbX11XXWFs6uLh3NjNzNHjbGpyb2Zc\nVltaWFdVW2l9eW/5f37v4Nva1dTRzdXpbWtuYV1cXF9lbmJaYmxpY1tdZnTr4NnZ4t/a1tXc\n79zS1uB6b2ZhWFBLTFBQVVJXe9/i3Nri4tfPztLa3uXm425bXGZvaWJbW2P0f3RcWnX3bGBu\n+Of3Z3rx8PR+anvi29HU1tjd3O1oXmZv9Ptwb37f3W5davdvXVdbZXZqZ3NpbvP27O3u8fDq\n6G9aWXBvWk5UZ+TR0dLVztLU6l5gZV9mYF5fc9/a62x95eN4WVBZbn73++nY2dnT4G5z5uT/\nX1tdaWdqdmRgduns8O7l3PJdW3Xg6PfpcV9dWldfZF9ZZ/z4/fzf0tHW2dPS2tnfb1leZFVL\nTVNde+Xj4djR2X1gZGFee+3q39bP19ve4+XneVJISU1RTUtKUHrUzdTU0M7KzeVvb+fj7nr7\n9e3h7npubmtOS0xLTVdgbnbo2dXW0tfj5tzV2d7n9nlkVVBVWGdgWF1l5tnV2tXS3tnW43z0\n7V9PTU9bZ2Nfc+zZ09zxYPrz+/F8a+zb5XNfX2BfXl5r+N/c7eve2dfd63lu+t/Y4+xuZGz3\nfWdaWlhXWGJ4bGdkYF1k/enl/Wz48+rg2tHZ5ODb3+Do8er3fGZn9+NuU01Va3bx+X3m2M/O\n2e18aVtPSklXZVtYUk9bbu7t4tfUys1c6cLJyfbcz+FkXvFxTEtVbWJST2JrXVhf8nJfW3Td\n29HIxMnX39HT6nlZT0xLTFRn8OTf7HJjZ25aUVBd/vfw69za3NfR2+/f193q9efb4OnpZ2Hw\n3f9bWV1fWFBKTFdx7F5PUlt793r76NDMyMTGxMfN1nljWV9XUlRHSUhMU1do+9fW3uLs3d3Z\n3dbidOvl7mRaZGjy7+tvXF585ndqa+bqenpm+uPn715WZ/P76HBe4+jtW1NYWm/k2ebXz83T\n5HxnXmFkWVNWb9fa6NjTzthvbFdLUlpdVU1bbWxtf9rV3drZ3e/08/ZrWX3i5+3e1dr9cd/l\n7eLS2mNVWV1XTk9JSVhjcGBv3fPo6Orb0M/R833i3954YGRVX3B7d1pt5Pp3+OHid2FoXWl3\n1M7a3ePY2u/n7H1uVWZPTVhPW1RXXlv+3c7R2dTSys3aeFlicHxqWFx9cN3qcuHi2eZjXlVi\nZV/4X23p8djrYuZ3/GJNWVR0e1z09dnKy8fP5dzu4mRSb196dVhaXVhjWVx/dd3c4tfl19La\n1O1672r/XlpdUmzp5OL09tp9YVhPbVtWV1FcVWzp7eXfzcnQ3uz04v3s8lVeduTZ6N7c4Xhg\nZl9zbVleTU5pavP77NvXz9Xa2n3y9FtYV1ldUE5WatjR1ej8cnXf3N7b1dneeWhqXGRlWFxe\nbvnd3dHW09Hc6mlbXlpea1RbW/p2bmZVfnJlXFRcWmplbWf50MfJ1/3m3d/f6/Ps2c7eam9m\n//VkVl16d/L25+zy3d3oaGltZlRUW2B1WVNPVl9te1lcX2zs2s3Lz8vHy9j54t3e6HfrZVxf\nVUxEQ1RWYPP31dvTysvL2OVqTEpHSWZ+b/lr4s3M0t3e5O38XVBQV21cT1J03+vf6OTb5N/j\n91ZayWZZ7trD3fnWfVZP89h5W9/mXFFeWExNYXBTWd3P2ubT0tTe2dZeWO/U1Nfe1+Vz/ndX\nTk9QTEhRU0xZdHzsdtzKztPPztbV2N3hd/XnX15bW2VdW1tbbPfn19/04uXsZlZYWfDa6Pnt\n19Xh7Ofo5u9vX1BZVltSSE5bbv3r/unV1tza5ej0bvDrbvrp/utubX5u5t/6aFpZbP5pb/t+\n8Xjv39zV0uN3cP786OlpWVlgWlVaX2FlYW9928vP3utuXVxrZFpdWmv789bMyMjKztXW3Obs\naVhVVFlcUk1NUVBOS0tXXFthft7Py8nM1OXs4Nvp+una1Nne3/P9eWhSS0tNaP1sXGH33tnd\n6uze393sbnX+b21lat/Y2+L0enJybVpaV09PVV7x1NDV2eN8Ymnr9Wdi9tzk9GdbYF9kdmVj\n6+Xf4Nva3efv5OlwcPV+YWBhbvtvaW/639bge21kbu37alVUYvjh4Onc0dng6nZtWl9dWFpd\n+uPd4+DXztpqYV9ieW1dX1985v5iX27t2d/cztn+bGJk493k/11TSEdGSlJm4tXS1Nna29vQ\nzc/a4d/wZmv67/vt6m1aT1NYXFxkZmJ+eGRr89jY4ujw8eDsX1pf793kW0pRa+3r4ufs2M7T\n4uXe3dzzXV9sX1ZQXv3h3Onz+Pp3amZXT09UXGhz5NPMy8rJys7X61tJRkZFTE9XY2b54djY\n4+vi5mxeb+bQydDd4dnT1+RrZV9hYVlYXnvvcVtbZ1tZWFNTYP9wbW913NrV09PKxsXK1eF4\nYV1STlBZXVxofvDk4urzX1VaZ2Z77Ovt3+FxbW9/3+FyZ3BrZ37g6u/YzMrY9vvh8WFTS09U\nVVNNT15+8/rp1c/Mzdfrdex/ZV9ZVVhpYFZTYubQz9Ta6eXi4W5p+uNxaXt+3efod2RgYXV7\naGRvZ2Jk8GJd/ut7bGJZaPxjZHx87ujVzNLZ3uB2XldfZmNodejh0tHV3mRr+OpnX3Flbflo\naefWz9/9/GZkZV5VTlplZV1QVWvv7HVncHru4N7v6M7Jys7N0djL2mpt63RYXVZVWVRRTU5Q\nV2FdV2lfZvLt39fR1dXR09Xb2OVva2JYWl9WTlFdZO7Z5erOycrbemJgfG9TTmNt5Nja3eDe\neVVdYlhUXGdbXnDm3Nff4NrV2v31eeXrdGpeVFVjY2t5YHDe2tnvbmzu2vRhW19r5+vsfezW\n42lr5eDf3mpbXHlwY15XZ37e6vN8aubhfmJ25tXR2+ls3uRfX2V27nhaZ3D65d3iaVJZVlRZ\nVlde4tnpcH7l693Y2uHW1NvwfN7f3+TwZV9x+/5iW2R1X1FMSk5remdja+Tn/9rS0t/p1uLn\n39bb629ubV12dndbavnu7ef9XFxUTk907uPnc27e4urc4O9YWGtsa2Pq4fT1fHbm5vVr7+bv\n4f1dUFhr//Pu7Xj8+tzR2+Db1Nbh6dzT3fhnVExZZ1tNSUhQaWtbXH/ZycrQ3dvPx838V05O\nVFdcXFhrd/V2c93a3+Pf0c/N2OX5Zvr0aFxfZWdqZ2VcW1tZT1Fee+ja09rc2ubf4dvOzttn\nXGr1/W9lWF94emhoXFFYZXdkX27n3+b67uXq3+F3WFxr9fF79//l3+Xe6/rq329XX2ri1912\nauDT225jWVJRW2tUTVzt8mRkdune3uDt4t7Z6+Ld3OPh8VpVWnfwa2Z83M7Hy+Rs5dfh+lpU\nTEdLS01LTmru6GRu8vPc6N3cztXd43Tv5eHez9v1/fN8+m9VYXBkV1Re6OBvduXf321r7uzq\n+2JTX+bxXXPg7V1j09FxW13o7mxe8uTzbPL+Y1pccnloZ93mYuro19B88una8H3w+8TRY17a\n01pHWG5USk9+3tnhZF9Z5ehq7FhZT1Rf1c7O5fHI0PBvyr/QZU5l21hPbtpsTVZp0V1ITVls\nRUh+ychu0crYaFXh1llS2OpRUGPOzP1V6s9iYmTW1/h8+9LL0XxyfVJmYU5qalNNXEQ+2m9I\nZdzE2uts3tdjwr/U0cfGZkpNbmY9Tk5c5lTv397W5PXg/WNT0tdfWOvW4nXq4txYYtnG70hr\n7m5QX9za90x74jxO7Mvq4/Pf2VlR3v7/z09Md8fJ9MbL4s5q1N/n+U5dQuVQMjlCckY+c762\nzd/Iycxgwr3QdFzTz+LwcOZWSU9VW09JVlVOTVjr7nlM1sTQ+VZnZnh8eOR03dDMy9vf08fG\n7kjt00tAU9BUQVbMyU5Vw8RIOXbH2j8+ys4/PVa/70BI7b9XOEnIwM/CsbW+2OXHy8jHwca/\nv879W0I9V15FOz05LCQnLy0tOl3rRztIWN7rxrWxr7arpZ+bmpqdpbXgPjlAXe/LxflCKx8b\nGhoZGh4jIx8kLi8xOU3PvbO0r6m2qIuAgImcqc0fCwwcOseumZCb1B4XFhAVHC7MVUIsHxgS\nFBYcLjz5zdmqpLDOuo6AgISWnJwlBwUP0q2ok4+Tqx0SEBMQFSxJPy8lKCIXERIXHSI2zbOk\npaapnIOAgIidoa4YAwQT0K+mk42RrxoPEg8NESnI3zkzRDMYDxIYGhstuq2ppqOnm4GAgIuY\nnqUVAwQTRVS5lIuNpBwTFA8LDR9b2nvQrcYiFRESEBQgRL6vopqgupeAgICOkpieFwMEDiIp\nVZqKiJNXIRwPCAYNGy1UvKeoPRsTEA8PFSi8o5yXkY+GgICLlJiXrygXFRsaHBoePcu+zm7R\ny3EwIR4dHiIhJCksLy8vPG54duNq20osNc6cjY6Mi4OBiZO6tzYZDAUIDQ8VFi2rnJeampWX\nqEchHRcOCwoNEhcfM8uvsa61ya2YjImKi4SBh4yxsjkaDwQHDA0UFR+5pJycopuZorw2KSQZ\nEg8PFBUUHCZyvMW9v77CoZKJiIuIg4OJl8jnJRcKBAgMEhgZLLSelpqal5qlwzIpIBUQDA0P\nDhATHj7jyMWtqJ2PiYSHiYSCh423xz0dFQYHDQ8WFBg8wKmlqJuXl5+7TzMhEQsICQwNEhwz\ns62opqKfmo2KhoqJiIWJkq9PPh0VCAYKDRAQFCy5n56fm5eXoLlENCkYEAsLDQ4SGSfrua2k\nqp+YjoiHioeJg4uUsDcvFQ4GBgsOFRcaPMCoqa2fm5ecrLjQ3RoODgsPDQ0aJzvIt6ylo5CH\ng4WOjIqDjqchFx4PCAEGEik9ON6XjIuVn6aqaRkNDRETEBEcKC4rJCYpIB8aHCycgICAgICD\nipwBAAAABgUXl4CAhYeaxB4CAAAOP7Ohi4OInRYIBwAABAscnpqcm5++J5mAgICAi5WKHAAA\nABE2K8OKgYSOLgYNCQUBE5iEhY2UmskNAAAFDQ4ZfZuQoi4cExcf3YCAgICAhI8OAAAAAcWP\njYCFiJAXAAAABAk1iICAhIjPEggAAAMbvqqhnZ+/GQoNFBowgoCAgICFmRIAAAAAMoCCgIOM\njSoAAAAAGbmMgICDiLYGBAQBBRWskpWt6TMcDAkQFh6ngICAgICWFQkAAAAFmYCAgoWNlwsA\nAAACsYiEgISIjxkAAAEMEimskpOoKxsPDQ4QHCKTgICAgIJCCwoAAAALjYCAgYaUPw0AAAAG\nl4KAhIiLrw8AAAERLMrMqau9JxMODg8VHSidgICAgICnCRcDAgADvYCAgoWmIRQJAAAALouA\ngIyXsDkQAgAIG7itfjYoLyQXDw0PFx80i4CAgICAVQoMAgUAC2+AgICElBkJCAAABB2bg4CE\niaMcDQUDBAsfwqKm2jUoHxkPDBMbKY2AgICAgKQKAgAAAAUjhYCAgIeqBgMAAQcRu4qAgIaL\nrQoCAAAEDi6klJmuLBgVEA0PGCGWgICAgICRCQAAAAMHGZmAgICEjg8AAAELE0eYhoCEipcO\nAAAABhEynY6NlsYaDgwLDREgn4KAgICAhC8AAAAGCRMwj4CAgIaRDQAAARErrZ6PiIaOug4A\nAAEPKK+cmZmfvyUXERIPEyWhiYCAgICCoAkAAAAGESmdh4CAhYm8AgAABhYusZeMh4mYKQoC\nAgoXQayclpeasTMZDAcKE8CLgICAgIGUDQAAAAIOO5ODgICEiawGAAABES2plYyKjp8oDgYF\nCxhdqJ2anKLVJBMKBw0Xp4eAgICAgp8IAAAABhW8joKAgIaMNwEAAAEQMKKQioiNnDUSCgkM\nGTivn5ydrTgaDggIDhqbgoCAgICEwQUAAAAMJZ+LgoCEipIZAAAAAhFOmI2JiY6fKw4GBQoY\nPqOWkpWlQRwOCAoQLY+CgICAgIgwAQAAAg0jp42EgIOKmw8AAAAHG7aWjYuNl70aCgUHDiO1\nmpKSm7srGA4KCxqwjICAgICBjhgCAAADDjSaioSCho89CwAAAAsjrZOMjJOnMhYNCg0ZR6GV\nkpel0CsYDQsPIaaLgICAgIfTCgAAAw0mrpKKhoaOtBYHAAEIGM6Zj5CYqz8dEQ0OFiu2npiX\nnq5uKhkTEx3DkYSAgICJvhEFAQQLHEmdj4uKkKQoDgYECRhxnZOSmKbYJxYPDRIdPaydmZqe\np9YmFxIXNpyJgICAiq8ZCAQGCxgvqZaNio2XTxQIBQoWPKeamJypzS8cEg0OFyvBopmVlJmp\nRicmLlusmo6JiY6eUBsSEBMbJlG8qqSlrfctHRkbIjJN9tfNyMpfNiEZFxwtbqqdmZmdp8Q+\nKCIrqouEhpO6Kx8rLT4nGxodR7aforXNNzYpJR4aHB4sR7+zxUwuKCgrNfeun5ycnaCrzzYl\nICuukYqLlqtKNTUvKh4bHjK4pZ6ovT8qIxwaFxgbJkrHvOg/My80PFXErqWfnJ6jqbRnKx8u\nqpKMjpm0Pi8wPDUsJCY0Xrq+00Y2LykmHx4dHyUrNkDSvbe5xM/bw7muqaSgoKKqyDMkIic9\nv6WdnqOqrLnSRzEsKjE+XtzPzexTOC8qKyolIyAnNcquq7DMYVhaS0vvvK2npKu7ejw6O1a9\nsaysq6uyvnZBNS4rKThbvcHQ0vBaOj5BSEM9QEJHTvDHv85WOTQ4Sc+9trW+v8fsVj84OFTI\ns6ysrLPHbDkvMTlv4srGurK7zzgvKyosMkT0u7q6vtDS4mpLT+fQwbm0ssRMPjQ6My04RcWw\nqaeuzzcvL0I+QEFKvLCmrsFELCssSmzJz1howK2tt1lCODE+Usq6ucHB5lc/Nj01P0fcua6o\nsb9JOTMzQkPc1cK2uLbAbTowKS8+6ry/vlvXf8/PSkI1SOK9trOzu8tbRzk+P0JO2LOxt8HO\nSTgrKzxDyM28vsi9WE85Mz1B4L+2usvM3NJfPj1H2b/Dz72zuMk+MS8yQkhjybuxt7/TW0cy\nLi0xUsu1utJp28raSjI7a7m0vMbPy9PnSjo1PN67sLrL0urtW0g9PTxGaNG9vL7Hye5bPTQ3\nQmbn13fU/m1daXBmWVFdTdfIxs76Uk9MY8/EvsDFw7u4u89JODlBUf9bVFfdwMPLV0g/Q0Q8\nOTxdzNZNTP2/xN9QSWXm2+fuas7Lzv5Ybcu4tbTCuLW74T8+PkA3Okb21+9VRkdDP0U9QUZM\nX2rEvb7L0c/HyNB4afdkeGd+aWFNSk/Wwru4u73KY0dBSU1BRl+7vbvF9Us1PkBVRTk5S3Fr\n8t/NyeZOXs65w0w/aL+9117sw8bddd26vcN0TFZW913qYUtCP0FJYHPoXlrf1d1VPj1CU1dd\nc9fL1+PKvMFWR0rmx9vo17/BytPOv77LX09NUfbcWkdDSlRHRF/J0l9b/uBePTtCT1xl99XD\nzPZaXtXEyNXcxb7HZVvs3+VmXlhWTk7m1fpYXO33YExM/dnOxb+/z9fX4VxBSFtySj9UbH1J\nP07u1VxMVm7P2dfPz8bP1uDMwNdZ5cjJV0dm6WtHR933XdLSyN9YUlpcP0ZVZm1LXNDNenXc\n0t5RV+Pcdltb8OFaTvHKyNFz8snMcO73bGdcY0xISGnl6t3Z187Kz/pndnxjQjEhHyw6V82u\npqalqq+uuLjHyeNOO3LfNDA2+ldGO13tZUM5SV5VSj/t1M7f1dbMz0/j0s/fRlNhyM1baWpi\n7N7T1vXT1+RNP1pcWWz3xL/Cw8fHa05v0NN4duJrXVpRT0tOT0dDXMnF2f7lzsbXV1RoY1dP\nec/WW0pUST04PFtcTFJj2ORe+djEwtfiwrCsr66vtMZEOTxCSU7Xu7a4w+JNOzAoJSYnKCgr\nMzk8R1RcU8ixv87GrqOel5WZps5TPDUvN+mxrbe7sc8xIR4pLioqLjo2LCosMy8uPuvCxlhB\n5cvdY8y5tLS3p5iRlJedqbxVLyoyWFtLx7S0QiYhICQiKzjLu7hHNTMoISVDNzw/NkNXOE/K\nvTtSr6iuNDd9qpqNipiYqrMiFxwszE+5pJ2nTSQpJiIdML+/PjhBPyohJzAsIi08TUtL4b7c\nx7KstL6uvU45n4uJlaKdqS4QEx89NlWjmahCKi0kGxsvzsj6zbPNMR4dHRocKU9bbr2xuElA\nxLLE1aiqy2eOgIWnvZqfEQgRrFkbvJSPtyEtQiQNFGC4ZC/OrToVER0cGRo4qK9mu6a8My++\nocI3e6aYgICMlJyaKQsHHj8ZSJmPm75DOCYNDB0qOTrdvXkhFxsYFhknV8CrqaisrrS9fdq3\n1k/BiYCDm5aPrgwCDT8RGqSNkpyp/kESCxIXHivf17pZJiEZFRMZHznCrqqrnZ+8V7OxLSym\n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\nSEhHPUdjzLSwq6Wfnp6jsa+10O/J4lJHQ0xtY088NCsuLS45Ojw1OjQ4ODY3NTY3W+C4qquv\ntq6yvrK7r6+srrSvsrjB0u5aTkhGQTo7OzkyLSknJSIjJS49SFXMwMezuc7OysLFuK+vqKWk\np6iqr7e96FhPQkM8QDs4OTEzLi0sMDQ3QEVwYuhUQEU+PUA/QEnfycC0sK2qq62srrKxtbi1\ntbG2v+1SOjc1ODcxMiwyMzoyMjMuMTc2OURHXfjq0sm/wL/EvrSwr6+tqqmoq66wuLq+wdxO\nRTk2Ly0qKy8vLi8uMy84ODg+OTw7RlXXvbe5r6yqqqiprKuxrquksM9HzsZKLzI+Lyw0Py0u\nU85OMC5Ot8EvJB4cHBkjJ3K4qqWYlJaVl5SdpKO5y3c7Qzg2MDM9LS81NTRDPjw0LighHRwb\nGx0eJCw5T62elIyLi4yNjpah4DUhGxYVFxwqO9u+ta6tsuo/LycgHRoaHh8gISsyNzRNr56W\njIqKiYqLk6A1IhQPCwsOFi3rqZ6YlJef0y8eFhEODxIYHCEtQ+vvVdWomo6FhYWGh4qVthwT\nCwkGCAwc6KealpCQmK4vHA8MCgsPGSo6TnK/r78yJ0+nlYWCg4GCgoueHBIKBQEBBxNLq5mR\njoyPoi0ZDwsJCAsTJj7Qu6+ntj4nKVCfjICAgICBg42oEAsEAQAABhq8nZGOi4uSryQSDAoI\nCA4bL9iyr6ijr0UrKS0yso2AgICDhISPzQ4HAwQBAgodrZaNjIuMlLgeDwkHBwcKFSpgt62h\nnKO6T0lRXWauioCAgoiIiZEwDAUEBgUGDCyjkI2PkJOfMRMJBgcIChAm2qiempiZoa/CUT9O\nUjxukoSEh46Qj5hbGQ0LDg4PFyy5npugp65nJRUNDREVGR0vvqekqKipseFNRUJPRzrBjIOC\nhYuMjJXpHA0JCgoKDx49qZ2enqLCLRoSEhUTFiA6vainpqKnrLjI+ejEvLe+zMSvnZSTl5eU\nlqDEMCMeGhYWGR4oMD1gx8bUVzQpIR4dHyYxQuvFuLCxr6+usLSysrW3sK+qqKOenqKst8Hj\nOiomJiwwN0Jk2M7Jp44SAA4TnDqPrfGfkJmdr9KtqaWu30qvraq23/26vTguJC4+QjlLvK2u\ntsjI03w4MTU9S+/Rx7K0r6yurrO3u8PKvb67y9PN0d/oy+LOxsiwrK+urq24v8nWzc1gUlTh\nu8XNwr++zOZeUfNt7OPmvtPq4tHC0U1IPz5WT8y4ub68vL7Jek89N0JN3svDvLmyr662vMdC\nPD9W1PzLxb680c9dSWE/OkE7b95+z8jXwszt7UFGPT88366vtc5cx62v3WpE+EcsP0hN3ce+\ntq61v8P01WE0Njg+0E86RVLeUV/P4NxDS0pFcMvGx8i0r7G4vsN5VUtEQzw3QlPZaVHBw8jX\nP2tWOj46PFTOxr+6vb64vc94S0o6Nj5b5WnLur+83s7iOlA1MkE8y9/qzMmut8zhb15GODRA\nRVPT1cq5xcTI1s5lSEZEPD9JXnfWvbm63lze1FpLQkz8c1xLRl3O1+lu29HV3rarrq2zrq20\nsrS819plW9xmVGJI7vdJVT08RUM+ODxBT0pETk9ERz0yLCwnICYhHyEfLz06872opKKfnpub\nmpiamZmanqSps7vbSUVFOzo6NzIyMSwqJSUiHh8gIygpLjdManvLxL61sK6qraytrrK0sre2\nu7i8xrq3vs34Vk85MCwmJR4cHR8kJCQsMkdlyLqvrauppqamp6+trKyzxczMxs72z83cb0dO\nVE1WUW//Xd3S1WdIQj05ND05Nj5CSlBGXv1gW1jzaPNfSN/Kx8za1/tIUE9nWlt8YWfbzPJQ\nS1bS5mlv0728z+3N0HVVTl3zc/HUw7m+ytrO22ZgSkhBQj5JT/hpTlFPTFLp2GVJXc/Fvrq4\nuLy+v+XqZFlSTVnNxsTDyMzY+eBPP0pFPTs7QEpGRUdHSVNw3uXj7NrL3fZv387T1Nf4ffJe\nXGrt4Nvr2uHT1M+/zNvV6tjY7FxNVl1QQElo5WN93drZ2dd2TlNf7fdUV13nzNF9S0RFQUdN\nX93MxMTLycfI3f1kbOvR1ftr5vNoX+TYYXhaYVtcYmBUTlJOVFRr09zxb/pwZU5o3tj0Xd/T\nz9zc2/RaRUde3Nbm5s3FvsXNz3FTPzU0PFHh3dnUxsDF1mhaXWlrZk9q287f+G7mbl5JQkJD\nTU5bX/fQwb68wMPDw832Z/DxbFROXfjZa2dVU1BNS0dLTl1+7mXl1s3P3PJsWlFdT1ZqcuPY\n1t7z3tvd7Wzt2tbR0dTSy7++ydfu4NpuUUM9PURKSUha5NPV1ODwX1RLSUI+REZAPUxgbO3Y\nyszXzcvNzsK7trKvrKqqq621vt1QPTQwLC0wNDk6OTczMTExLiwuNT9FQ2HtzMTExL24uLy8\nsqWdmZaXmJqfq/0tHhoZGhwgLEu9s7bD2EwzJx8eHyIoLDNAX9nJxL/AubKwsLq8wMG1pZqU\nlJaZnJ+vTiIZFBUYGx8qVK6hoam20j4rHhoaHSUuNDlK1b/B1uvGvbu8vMHFzuhZxKOXj5SV\nmpqdrzkaFBEVGB0kNcOjnJyeqbs/JxoWFRgfKztg08jCy91cTklYcG7h38fDz/tcqpWLjJGW\nmpil7x0RDhAXGh4p26WampykuzsiGRQUFx4sP9++uLzTWEE+R0xYY9q+vLvGYkvKnI6KjpOa\nm6DFJxEODhcdJzfIoZiUmKCzWSgZEQ8SGSQuPVDTxuk9NTM3UM/KzGG+rq6/Q0y8koiFi5KX\nl5x7GQsLDRYcJDHEnpeZp8o+LR8XEhMbJz7txbqxsss8LSsxQmTKy8jNv77PUzIvtYyCg4yV\nmZulLQ0GBw8cKTb6o5SPlqw+KR8ZExATGy7YvLq5tL9JLiYnL0bLs72+y8O/zkMpNZuDgISP\nl5ifuxMGAgkXKEZ+q5aOkqM1HhkWEw8THDiypqmutsBFKB0cIzFruayqsbfCxcs3Kj2PgICG\nlZufrDELAgIMIk++spyPj5tlGhISFRUWH0WmnJ6qu94/JhkVGChTt6mlpK68xk0qGyKriYCA\niZOam+MYBQAHFT/Fqp6RjpO5HRAOEBIXHl+imJikv0MuHxcSFh9ZrqiloZyh0yUeIiQmu42A\ngIONqLAyEgYABhO3nJaUkY+XyhYLCQ4TIDurlpKVqEggGhUQEBcpwKSfn6Cjvi8cGh0mPKSH\ngICAi6ZPIwsEAAkcppSRkZOXryILBgcPHTK2mYuNmcErHBQUFBgkxKKdq7WwuEslHBwoS8zu\nt4+AgIGaPikuGAsEDC2bj5edoZ2wIwwHCxoy2q2blJeuLRwaGxweJTu7rK6/Ys3FdiceMPux\n4UFvj4CAh6VP9OgfDAYQOp6eq66hnLIgDw0XJiw0z52WnlwfGyAhHBkjaKyqwUpQvq/MMSdb\nq7FMJ+KJgICNwjy1PhcDAxW6lZ6rsZyb6xMJCxgtLDW9mJCb5iIlKiQdHCy7qbE/M0ja3jIj\nK9OjrdI7L5WAgIiybrK7IgcDD+uXnbGznZa7FgkKFicrJ1CajpXKHx4sJh0aLbKjrUQ9yq6/\nLyIvtaa4WjM9SpqDgImgsK3ZGQoGFkKepK+hmppoFQoLFiEiLciXj5WzKSMkIx0dLL+rrsHP\nycxoMiwtTrmtrcDuRqWLgIefuXysHQ4FDS6vnrqjmZStHQsLEh8kKb6bjZKmNCUnIBcUHT6x\nrq+1tMxhPTg6Oka+nJu0W8SViIKVtjy17RILBx5JpsDOn5mfKxAMEhwnKNubj4+fRSMjJxsW\nHlijn6a4w8dCKiMpND7Ap5yhtl/KnYuKorvFnc0aDg0oPMQuX6GaqCkXFx8iHyTDnpup/Dc0\nLyMbH0utpK6vqqW1Pi8+0tHe66+fqjsxtpiPma69pqsfDgsWHyorOKOTl683KikiHBkrtZ6g\nrrK8zS0dHStY2cq9qaGnv087PkZCMkOvrb1KsqCZlqK1u7RGGxUWHCQqPsefnKS640oxJiEn\nYLa/y8W9VjQoJCw9V0vSsKips8jSyHEzPty/vc7QrZ6coaqpqsM0HxobHB0hPM6rpZ+jrtQ3\nLCstLCw83MfO+/FTTE49Ojw7V8G3uLi2s6681Dg4O0m/rp+cnJ6hsestJBgVEx0sQcyvnpye\nrL9LMiwiIio6RFBpysfmTU1SQzY81d/atK7FxLPNLi49YdzKr6ScmZumpKzONx8jHx0ubci3\npKKpr70uLCEdHBskLD08X7W01c4/MVM4NS/FsLW5qqWqr6+ysaytyLenrcG4utQ+JiIgGyMo\nLe5wvaSpuK2yfkE8KCtBNyUzRf3vv7zEqMDkPF49Sd/9b7+xuq+1tcC+Y+W/287QxNJ8QC4r\nKiwrNUNP7r7Eur/H6F5NQElMREBPec7Mz8e+v8TYWVJgZFxi17+0sbW5vsXdVUpFPj1AQUlb\nU0I9PURPX2fqzsjLzt9veuXT0eNqXVpaWHD3aXDYzMrXbF3271dPbca7ur/L0c/cWUtLS0xM\nRkhUW01ITlBTXHvs6ODe3u3t4Ojh08bFzNTT1tzb6mv+zMXVXk1ZW0Y/RVDmz85dRk1VSjs6\nQ0hNXtzKxby7yt/VwcLO38/M72Xi5WBTWv7f3OFtUEVJVVROTlllaHRdW2xYX+jPzcrBvcDJ\n3VhJQj8+QlPgz9HX0sbL415NUHjX125iY2vtfO3SytRpT0tVe930YGz77fVeWlNZcGNb7s2/\nv8rd63hNREJDTGLc3e3c09jsW11k5dfZ2NbJx8nP187N61VIQUBBQkhSXu7Y0dJ8WEpKT1zp\nzsXDvr6/ws9fSEFCSUxu3NLHytn7aXhgTkhCT319cXBv7NvuW01XfeluV13tz8bCxMzV2u5j\nV2Dx3Nje5efn3WREOjpBUWfq6/bv4NXUzs3Jy8vI1OHv6uR4UUxJSU5GQj4+R1Jlc9jNzM3a\n2tXO0d/o08jAwsrLzOVWS0ZISkxRXlpZX/Dpfm50avzd5GFQXW/h43dvcl93a1543t3b2+nv\n6Ofk2H5iXn3f18vM2OTs+WRbT0xPS05cWVldavZ75djU1XJWX3Xq83rayc/fcWteX1xNVWfh\n1NPWz8vO4V5YUExWXWzf287PzeBXV1xy+mhVTmbi3tro4tDP2mtURUVFSUhQ/dnQ1t3q393a\n4/ni09Td3dff8njxbWvhzcxtVfbR3m72cVRPYW5RTlReWGRaTlBbXV9JU2zW3NDGwsTEyM3J\n2mFp5dZq59LS3XNQQT48Pz9JXurQytbZzNHra1hcXNzL49/n4+d2X/HZydBILiw/yLjIZU1p\nvLO62VNYeuJnT0tQZuNmaOPl8fDh5dvY1+DcYlBNTkxRXlZi6NfP099uXU9IRk1bX1p5187Q\n1c3DxsfM2OTd1fpYVFvW0fpSSk5Zam5QSE5k7X3vUkpXdfDh9Hrk083N2NnS0Nnd2u1taHfb\n5mVkU0lJSkZWXGvhelxZbvpo7O3Ux8bK3vj00sjGz3Fc2MvmPDA0T8fMUUjuvbrL6O79cU9G\nOTI+ZPLW4tjEvrnNdmz47EhNUeHNzMzc1drX5m1NTlHvXmNQSePE8kFFX8zWUfLM2tDLZtDK\nTFZKVXbf/GFg43hYbuRvX1ZUbUlp5D/oy77B3Fq5ws/QTsfBajxPxuBWQltWSUZNfj9MzMDF\n1tfDT/1qP0xVYdPUT+7c2b/QSWHnzMw1Scfc1Ejiv77Y68ffylReVj91Q0BiRFNWW05I08fY\nycbGvz/Tv+FNOjXFvEniXd7Ga0pU7V+9Ujjccse/3EjcxcNXPmy6uF44TdVKPTzdzs1WTvPP\nyl9S0llkXUdv9Gl5y9jf5MW7wENHevjXTEJEzbtbUNrBzkZBSnFMT9LWXGjBdV7oSO3dS9dZ\n1m7BuuvK7FDI0UtbyvVXXUNYXFFKSWtSOVF731vUwLjQcMnM2W9bXF5eZ27mxMxlT3r7WjzR\ny+hXOcRySFh9wdlmw8Pa1lj2U/VgO0M91chhx7zn7N1P1thI5c5P2fjN0k1oWt49QG1V7crU\nPnftztD361lbSdzqeOfJ3MvLy095WVdhYuDX7FfVuOPgbfNpSUtEVFbPTmHKz1xjwWrYS0z9\nUUJk2VlkdM/LyGb2wfZhPGfbUefWz2Tdc83OTT/P+VNXd8rhzsBrzVlqVkU0Xs9XZepX4srP\nzt7MV+pY12pS+cPRR014t+I3LGC3sttLyO3HSEfiTPhWdsTS52NoYFxGPlHVW85n5E41aNZA\n1cT0wVtIecHG2tXD0LzY11vP4FN208vG3TQ69U5ia2vKy9xM1s/W6zUuOT0+Qdrg48vow8df\n4L/AXFTZyO3S+1rv0dZSyL65y09LznU5SjlLUFZi51f9y1JE5cZ082dpx+rlVu7CvvxBSH6/\n7kQ9385c0lrT2nS3dNnFU17dRkdSU0g9Q9m8xsXVc8rKXdxUUt7Ty+89QVdeREXryL/2YFnk\nydxMQEPf0VlLX7/EzuNZvn1k9Vjhx9LY79pjU97t8kZH/0pCY2BrSt/MQ1ZNw8tOWGC8zNrh\n47/DwN3UVu7T+j85TUxuSlJNVNJ86ujc3tJY+sPR31Fs8djSU37f38jZUlfnRExwTmVqbFZN\nU2XDz25k077NznzV2ODI4Fhh0ONVW1bz+l5JTN1XUkpCSkddTV5qath/2cHCzM3Bzd3i3sfO\nyN9Z4uxqTE5PTVI/Tl7tUEttb2lYWt/HzcrJzdvs1vbe6GrhS2bw3XNdW2BSTV1YY2tvTVzc\n2c7z3NDbe3b939t4cnbm3fVLU+TfUk9b0831/snF+WHMyc5eXutXR1JUVERIaNJrUuTZ12px\ny9R/9NbeXVHmzNBfTn3RY0pldWdXT3zU7+3WzvNRW+nS3uXo/WJs02PtcGxv4lxaXlzR0Nrq\n1MfcV+3r8ltE529RSlpPRz5L9fb28M/N0dO/yMnF0tPbXlxhaVZaWF5jVVBeX3tmZ+3v82p3\n4/Hq4dry6uZzWVFm+9rmZHLTz8zp929v5NRXR0ZWYlpeVNTR3FZh1d/4dE9qZFfh1uTl0dPd\nztLu3uxl91pgUVdiWV9ZT1tu9lxf3s7U1vrTzOXsVFdPX1p+YWPp0c3a7PHQ9fxjXvX9YH/w\n2PxvcGRYU2L1bdteTVtPeOzq0N7Sy7AlBoqAHQgcmLCnKyxIvdHdtjw7Urndv0EswK/MOkDZ\nzclJMz/Y1E49WMbHyt7Wu7zdVnZ7UkdJVGHq3F9Z49ve4m3l0crtX19Z8vjlW23dbenp5XNd\nVVJYTVxUXuLr7+7p4dLd9HrO1W93/tfTzdXpYVZra1lXWlFTbmhYVFN90dxtXe3YycnP4d/U\n1+teTVJhTEhFSFbh0Nbs2NTQz9XW6u9cVFZVWlxye3Dw29vd815actXZ1t/oef1nX1BbZWJn\nU1hv3dXc5vLt1eB6ZG3w79zeZlf73NzZ2ezh13hQQz5BQ0pPW3bYysnBw8LEy9LqcV9lXVNU\nVVZSVVhYTVhxbnxq39bb0s3LyMvS09jX7V5RWXprXFhcY2j892RTUUxMSkhc/3h33M7IztDM\n2+Th19nS0dfacWJw/vx1Zl9adndLR0lSUFBNU+vVycrR2dza5fv9ZV5+5d/OzsnIy9hdTVFR\nQkhKT09YWmf47PtedHNn39rkzcC/v7/G1OdZSUhYbXX17+NqV09EP0A+SVVi6MnCw8rpW2J7\nXE5S4MvBvsfXz8fYWENGSWJXWm3Y3uHa82RNR0pVXGne1c3OyM/c9t56T09RWGb47mv+5VgZ\nLoyfGx+4qLbXPFtF6nzMPUZbY93M6UBiv9JncN9bbf1JT9/UX1le3t99WFrax8/v/+Lf9llK\nUu/k49969+be1udz4uZ0WldReuHe6Ozf3uVuXl5ZXWNgX1lwdWB+7fvj3tvtbV1ZYWl18/To\n1svO1NXe6vtdWV/selxhYmRhXWxeXWh2/mls+N/X1Nzm9eDc2OHg9Gn44+ZuXGN4bVpSTFFa\nVlJbaOnTz9Xb2d9t79/b0NLW1OfrdmhdVlpSVFpkemlZWWB66+n44Nfb2Nnf3N3vamBeV19n\nX/TYz83W8XNeWFVaU01VaXVlZWtt4NDO2NvZ1NXtYmDp6WteUk9dYVlSXfHPzdnv+Pd57mho\nbW75dFxTa97U0dPY4t3f/lhOTlRQV2jj1ubs6/Dt6dra5mx+aWH77Nvg/nlrX1pYXWVuc/D7\n735vdW12fund3ed8a2x6eGvg1tPU7nvr2tTX4HtmYG9cT1z86Nz4ZFhPUE5NTVJj69bS2t7V\n09n0dt/e63r3bW317NrV7O/lemZmcHnh1OFoW15hfnVaU2l87WRYaO3a3vVnY+/sZ1pfYW/z\n8Wr75O1ncm9x8ujyY17r39fR3ezj1dXn+uLd3dzjb1thX15cVE5QXlxZYOfX1NzwZnHk5vz5\na3niJx+dkT0efLfGTlpENzpfzVZLz97OycVwaMLF8tXP1d/UWEti6FBHSU5LTkxKV9nQ5eTQ\nztnb4eXf0NXm8e9rXW3l4Oz37V9NvEoySb+8OTVSst1U2ctfXby/4DU/2MNBNUbTw3xRZcrH\nzNDbee3YytxRT/nM21dKaOJ0S075t7lcNipQwLlSNk7FsnI8PtS73zs8W9DI5WniyMbWSjxl\ny85eLTCkm3ou0rztU+vOXD82Oz9H50pR1bi+Szs/zbbBSTzSsLS+V0ZO5u1JQD7VwNo9Pm6+\nvlhLVMm+20M7SX3S2fLH09jFxslNSkreaEdPdsDA01xv5NFdPUBPev1icuPh3G5eWFt9XF1Y\n3tHKxcrL3t/oX11e4cHIz0VERkdLP1ZJT1FMcsu9y0RB1q2uaUN9rqvHQThwvrxhOT3mvts4\nM0vAv2IzMkX75TszPF96W+3GwFs9Rsa1w1ZE3rGzTDqsnqy5uc7+zMjcTUlZ0cxMNy0xNzIr\nKS42OTU1O2bE2U5awK+vv3Livqytt8POsKyqu9K1pZ6tRSstQlk1KCtOtb1JLiw8QS8gHig/\nTTkvMEFOSURQybi7xuTTuaaZkI2LlKc8JiwgJh0u2q2mwEMtJh8gHSY4vKqzxVVCOysoKTXP\nvr5kPUZHTj8yPvLDwN/EvqaakIuPndEqMSsnICBOu6Wu+DouKiYfIi5WrqyqtNpXMikkJDVY\n2GIzLC89V0E3PmfAuclSR7idjoaKlckqWDQzGxs5rpqjyy8qJygbHCRapqizTzUyJx4cHTHl\nucBBOTtSWT9LuaurucHJ2dKtm4+JjZnkKTIpKhwdLsKjrWIuKiYmHR4oSq6tq6/K1zgtHSHA\nuDorMzM7RVs3LT3js7PF6jdBqZWEgYqdIzZINykQHTqgm7AwJyUwJRcYHMOho69qT1kuJBwf\nQMu7XTEwO/zmOz1cuqqrrrdcP8OejIaJl8c5VTorGBYl8KWyUispKScbFhkrsqemtLy1vcwv\nJio6zGczKy9P10cvK0Kzq6u6TTNDrYyDiZQwRM/mzhUbHrydpN4rJDA+HxkRIHGoobbHv71t\nLR0kNsDBOy4sTcTZPC5DuKmsv+NuV0LSopKIiZKsMzsvLh0XHzetpK5eMygmHRgVGCy+m5OY\npmk3OS4pHyQ/079WNTpDS0MyMj7Eqqy3WD3voYqCip0sL+PLPxYUHcednrgzKjU9IBUOFi6z\nnZmZn68+JhoYHCpYe2JGYszHUDQrMO61qaq6+Uyzm4+JjZi3Rco/MBoWHjerpa71PS8uIBcS\nFCJIqJuXm6jbNywhIB4nMkbVzr69zkQ5NTZNybW/ytncrJeIho6qKzhJaSoXFx3NoZ6uRy8w\nMSAXEBUj0aGbmJ2mvTwnGhcaJkDv1MO0rbDfNCcrQtK5v+zHq5aLiI6gTzni1kUeGRssuq2s\ny089Oy4hGRUZID+0pKGoqbDJOCEaGiE1UmTUuayrsc5CRdW7uMlIaq+ajouPnLW5uFcvGBMS\nGjXduL/MVlFALiMcGh0uxK2mqaurrr89KiQmKy0zQcCurq2vt7rL60s2MjnEoZSRl52mpKu7\nOR8bFhwoNFZb4lnMzN9UMygfJy09VeTPx7ayvtE8Nzc0P0NW4Lqwrq60r7rEcj85PeOvpKCl\nrK+lqLNHLScmKyo4SkA9UcC8w0EtJSMnLjk2PUXZu7GytrampQ0blSeyU1W4raiopVzVRVyv\n3M+xqb2pr8WnzVdKJC1LwCt0KS81Nz4oIx4fIywyMjA/4LStr6uvtaypqK+3r620srbe4XpB\nMy01OFq/zN1V0rKoq7fecU9zw7zPRD49QDo3NCwrKTA7Pzk5P0xszsbL3/jVvL67xM3BwMLv\nZE9GOzw9Q9rEr66zwcWzq6msr7a9uLnE10c4Mzc6NjsxLCouMTc/QT9HX/BtXE9O6crBv7u6\nuMHI30dHPj06OUZoy721uszVvauopquyt7qyucVdRzs3Pz43NzEtLC8xMjo3NzU+TExCVk/v\nvbe2urrPzNfaZEVLWVVl/2hgdcK/xMK4qKiprK6vurnH3mlAPzc3NDIxLy8yMzFAQjkvMzo9\nUHllYmbJt6+3urm9vtFdQEVHUkE7P0jhvbS+uraooqesrbO/usHJ3mtLPDM0MzArKSsrMDM8\nNDE4QExS9eXMyb23vczNys7V329mXeVROz9kXN61s7e3raWlqa28y8fP1uJlSz88Nzw9OS8u\nLiw5ODs4MjxP9tzR1NzIvbzN3ehZU1RYSERJTk08PU7SvLCyt7atpaKmrLe0u7vDzl9JPTY3\nPz45My8tKy4sLCoxNzpZTlVZ18K3s7/O2dDIvLvLx8HG3E9HTVhW28TNyMy9sK+utLW7wsbF\nzvVkTkdGSUY9Mi0yMDE1My4tMzdDYfrm9NzNyL+3ubq5vMPIy9vlWEpFRUtcz8vLy8a0qqmr\nsrfI3Njc0G1LRT9KREQ/NTEuLzQ4OzgyMjo/TUxXcNHBuLW5vLm4uLrAy+/p4V9DODY7VsXG\n2e/KsKyprrjDzcrF0OxNSURISk1HOzk0NDY3NDAuMjlCVG/e2sq7tLO3usK+wL7LY0xEPzs5\nMjE1QOq/v7u3r6qloqWqs7vIzOJfPzk6Ojs6Ni4sKisvMjIxMjhR8sG8u8HBtLKxt7/GyMLQ\n6UNCQT87NTcsLTZRx7y8uK6jnp+jqbG7vsLM3HhDOTg5NjAtKicnKi0xNT0+Q1rJv7u9vraw\ntLu5x8rF2eI9Pzs0OT04My4zTr+vta6xp5+hoqqxusDKzsxXSD8wMDg5NCwpJystLzEyMz5M\n0cDHwb24tK6uu8S6vsppV0Q6NTs7NTMvN0jFsbK3xq+ln56jprOzvszNZEA2LjItLSwpKioq\nLjM0OTdEWNjSvL3KvLm2t7rOzNTY3vJcRERJQT89OkFZta+1uLOqpqGmqa6650pIST41Ni8t\nMTcyMC4vLy81PjpIfNjKxL69xsm/v8HU5vDodkxGVldSUEZDPUhvxLevrKqppqGjpK7EWkQ7\nOkI5Mi4uListLSsuMDc5P1xf9M/CvMrCvLa9wMfDwuDsXXdKPzo+PTtES0E7T9GtpKm1t6qf\nnaSxyfRSU0Q/ODEvLCsrLS8uLCkuP0dEY8fDurKzucPIxby8z/Fq0uVtUUU+Pjk4R1lURV7Z\nzcGuqKqvr6unpqu631ZKPTMuLCwsLS8vMTI5QEVMRVBlZtvP0crFv8G9u7vAxsrmZmbqY0w9\nQUxPTFNc+NPJuruyrK2vs7O6v8dmTTo2MS4vMjo5PD0+Pj9OYmrW2N3c1NLa2OHo49vb+WB5\n49x9Zk1Pd93e3tTOz8rBwcTBu7u+v8TP7HRfS0lIPz49Qj49SE1SX23o19nV6t/Uz+VmWGFl\nT09NSEJAQ09dU0tNYezY0c7Fw76+uri2tbm5u7y7w9JjUEtFPzgzMjAyMTQ8SXR68NfHwsXB\nv8PFxMjN1tTY5mVPRkBDPz9ARktHSVF52czIwb68ubazs7vG2eDmXUk+Ojc5PT9BRElLVnLz\n697WysbIyszJyc3T2N3s6WxUT1FRSEVESEVKV2X75dfKvLq8wcjGzcnO7VRHREhMUVFHRj9D\nS1ZbX2JefdjP0c/Sz8rFytLP0dPZ3Nze8lNMSUpKSEpUXmbt3tfPysvNys3d9efm6PdbXE5K\nR0RFRUtLVmFs5dfc1tzsz9La4ebi3dvQ1vFt6OTc31xb3s/U+lFQbmJw7N/T0dXQ0NjWZ1pP\nRElDQkZKTl9seNrZ2uTu/XFdXWns3NXOz9ba1c/R2t94bHp8+FxNTVZXc/rjztp2bFtZ/ubf\n3NTLwr7Ezt7gYU1CPTs5Oz5DQkVP9NHN29bMxcnPzNzYzdbX1N/R0N/c33FmaFxUR0BOXlxc\nXV5w7dzi0MnOy87Ox87e3+1nUUlCQkNCSEhUXmpm+9zLy9vZ2NDIzMvV7uP1b2BNR0pFR0lN\nV3h+7+rZx8jMx8nDvr3Bzs/c8WpcR0BFQ0BAREhRUFlkX2JebPvq2NPPyc3W3OHg5+704318\n5drb3XNaZFpRTVV0dOvl/Ojd2N3u6Nne6GdkXXrdeGZkenHmc21xZnzlfmdmaGFoc2BZW1lO\nSkhhZHB6+vXo0tDSzc7Wzc7MzNPT1+1t8fTobFpSS0dJTVpnUlFXXeXp7OXu8dzX2c3Mys7e\nfF/y4u5rXlVWbl1NSUpcX1JPT1n61df2/tzRytLv39/f197d1dzRztDa08/X4G1STkhFREZE\nRkxi6efd29vc4t/X09DQ9ftoWFpKRUVNVWbq2dLW2dTMzNTXzcrP1O3+e3N0X0tBRktLS09p\n3eFtXW3d18/N097g1Nbf7unv9XVqbF5oXV9VU2dfT0xPWHri3Obh4tjPz9zazcfGzNbleGpp\nW01MTEpMTU9OT1dlZvnf2Nfd2eDm293g3t3z7t7V2N71+nV99mRZXl9o/WVy+v/vbVldbe/+\nXlpfcXJbWGXw49/6Xmvm2tfa2NbLxMzfdGTt9G5aVVlVTlNeaW9rbXx2dX7t7Xr+4NfW09vs\nevHm/l9PSU1RUlVcZn70dezW0MrLy8/7fn1oXkxOXerj9G7/6t3X73B859ri9OvZz87Y+GBZ\nXFhSTk5fdXdjavXq53RbUlVk82hccP7h3Ofqfmx0avvZ1NjX0NDTz8zN1N7t+2dYXFhNS01O\nS0lHS1Z5+fLU3d/QysPby8nA1epbVVVYYE1GRktMTk5ZWvbe3tvZ18/Ky8vJys/n+Hn//+Tw\nXFNXWlFOTE1RWGJvfPPc3ePn3+Ph2uLo3dPW3OX3YVZRT05NS0pNWWRx9+HZzcjFw8LFys7b\n+GVrb15NRkhKSUdHSU9k6+/r387ExMnO0dvl9ldQTlNVWmNbbfL09u3r2NTe43vm0dbtaGtq\n//1kVlFYV1VaWVVTXura3NnMy9Xf6uvf0szP2utxaGRgV1RXX2NfXl9h9d/7XVp/9HvycGd5\n9fllVE9cenxtbfnc2dvb08vNz9zxe/Pi6ez29ez5aVxRVGVyZGluZWBn9e3b0dzzbFtXWmT6\ncG/u6X1hX3z06OPl72VTV15249XV09Hc5H397+fe3d7t/vDn9nFsbWRaVlZs89zZ2NXe3epc\nT0dIVl9cWVp19HZx/NzS1dr3ZWh2ef9sZfHby8bHy8vK0flWS0dDQD9BSVh839rPzdHQ2eTm\n5Ona1d3l6t3k9GReYV1XTkpJTlBbXFts7tnb2s3Jyc7e7nBken5ocmRaYXl/YVxeYGZvaOrO\nys7V1tvX2+L/UFJdWVhXW1JLTFJh5dvY1NDV393Xz9rw9vXnemJZUVt37u/w7O3o7XxsV09U\nWmJfYnHt39PMyszO3WVRUmJmXE5LVWri2OL879nT2drY3NnW29va2uVxX1lUV1hPR0RKT1Nd\nZV9x9+rj5tzVzszN1dvW2d/qe2JUVVpaXFlndnV97tvT1eHu6fxpZGdlXl5heOnl5d/b3+tr\nYXnv8P5fWWdtYVlYa+3r5+d1ZW19amp0f3n4e2Js69jZ2tnXz8nI0e1qXllZVE1LUltWVG/Y\n1Nfc293n5PtmVE9VX3r6fnfl2djT1eV2aV5VUE9SXGx75dDLzM7Q09XW1t1sVE1UXl9WSkpP\nY2xZXmtvfOPU1dHO0NPp/evc2+xmW1pbX1tcZHjtemJcZfLo7PHd19PR3XliaHBmWFdXXmh6\n7f7x9fDd0dn06+TrZGnv9u/1Z2JfX2ViZl5naG/1Y1dWXPjl2dLX1tLV5fjv7/leTk5UX2Re\nXnLn5uXy7NzTzc7Lzdja2+9XTlJYWk9OWGx6bF9aXFpZXV18183Lzc7T08nIztPm82xhaWFU\nSk1PTExMT1BXXGzz39XW2Nzo28/MzM/Z3N7qZFFPUFhfW19q/eXl6/3r3d/fbVleaXpjX2r2\n393q793U1NLZ5fFtXlRKSE1TVk5NU2Lz59zZz87OzdDX3dvl6fDq9/bqemhgXWpnX2FVU1ZZ\nYVpm5tPQ2+LuZV984+Pp6vD0amZmZP7h7Wlla21aUlhfe9TO1tnVz8vMz9TZ5PV3YVhST1NX\nUlRTTU1WXmjz393ybXno4+HW2dzW193p8OHe3/leW1xWaOfY0M/O1+ZvaV5bWE9KQ0RTb/Bu\nZPXe2t7h4OTl3eXu/X3+cGhgZ3br6f5yZGP98uPY2NPV32xh7tfX5XZkX2Zr9nFy3tvnd15V\nTk1KSlBe/OLf5urv7Xx64vPt2c/O19TY1eB2X1dXVV1eUEdKWXry6Ojr39fVzsbDw8nW/HNw\nWkxMUldjbWpbVVVaYGBs+Ovh811Zat/a2Nzu8+Le2cvIzNPiXmFzcFxUXVpaWWB7XlZcZHfq\n725cbfDv7ebc19fT0Nfb2+TsaV9eXmdcV1RNV11mcWp58eTr+W5x3dHU19jWztTd/WdhXF9S\nTE1Ze3JjZP3q3/hpZl5ufPrk4eTs83lmb/zp2t9dVWl4/2Jrbl9fb+19cvbq7HZz6NPN2uzs\n4+xvf3VmZn9tbPzm3ut0WlNUdt9rT0xKUmDw3d3Y3/B94+LYzc7Z+nn56PxnXVxgcu3p/m15\n++v1dXn19G5dV2jp3Nno5OV4XF9iY2JkaF9bXmNt7uTb2dzQ0NXY4et9XlNPT1Zi8fN+4tfT\n2up0cWhqZ1pjdfrl6PVzbPLqfnBiYl5cXFhn9+fQzuR05N3rb2166utpVU9UYW98/efUz9Tj\nd2Ro4Nba4uzp6nVbWmlgWl1VUVJdaGP96drZ2dzg5+7k6uHtaVtfaHXf2dbX2N7tdmJt+P1v\naWVcXlhPVF396+rZ2trS2exmWFJQU1lffN7b4t/YzcnL1e1cb/5iV1hob3FvaWjk09ni5+7/\na2NhWlZZWF5ze2ht/ev2d2ldW2bn3+Pc1MKvxkJJTM/8RFd+++3vb+/a5/LqeFpdYWlxwrFr\nRjpI6EpLWPh+XfzNxMt2X2B89lRXv6qu0EA8TUE6PkdlV+bR2r7CybOrxkMvKS0nJz1m4b6v\nqqertr7OWzw2OD9NaefQx8LE2VtPS0VOe1hhePpmRzw9Q0VHUOPJ3/7Nwr/HxLu2uL/Fv8HO\nXEZGTEhDTu/Y1eppcmlLPjk3MCwqKzM0Mz1NZGVgctq/tayimo+Mj5mmuUgiFxIXIS5NtJ+Y\nnrBLKh4UDw8SGR4lOMmxu3ZCNi8sNKeNgICDiI6SuBMHBAsVHDmhjYeLmbMvGg0HCA4cLUa7\nr7dFIBcWGRsaI1yon5CAgICKnKOsIAcBCyuvqaaUio2xGxEVGBMSH76jrFoxKB0TDQ8YIjfu\ns6anru5NlYCAhJmclJsZBQYc09U0s4+JmScWHB4WDhdwo6nbRD8nFg0OFx0kO66enai8WylL\ni4CAjpqYkTkGAQ1ByznPlImRLRMaHxsQGL+an8lDPCESDQ8eJiQ9rJ+rXzktIy2RgICJl52S\nWgMADciq2LCOiJAhDRYcFQwUqJGaw2HOIw0JDh4jH0OimaXJVjseF66AgIWepI2cBgAMq6Ex\nNZaJkh0KGS0fDRSejJllRq8tDAgSLywfO6ifvC8mHBgXpYCAgJqVkp8EAA+upDHMjoaXIQ4j\nLxgMGJ2Oo0/NrSQJCRYkGhY6qatHLjsqGhyTgICJn4+OpwAHJJq+ILKMjNcSEkEfDgwyk5jL\nyKeuFAgQIB4SHq2lyS45OxoSP4SAgKCQjI0LABm3nhnTjoekHxZbKw8NH5qe6s2orhMIDxsY\nDhq7pu4tV7I9HquIgIOfjZKSEwslRMobt5ORyTc1tisVGDetNCI/tDkQDyIiEQ0c4UkgLL9+\ntomAgJeTi5YpAzgy1xbGjYyrROHaHgwWH9woM9rFOx8eJBcQEiQrHyQ40V6lioSAjJONqL0L\nOyRILdGPmKu9rEUdECIZJR0+xjcuISAdGhsWHCItOC4/dpeIgoCTi5CmIA/LHTgdnJSbpqCr\nMhwjJBYWHDQhHyszJhcYFhQZHx8dOqWKhYCAiYadqBInHRwqSpGgnJ+cZiMbIBARFCwuKUFW\nMBoXGRQTFxocJ6aKiYCAhIedphkpFB0lSZ2klpqbzDwxHRIUGiEdJjtAKB0eGRQTFBESJp+R\nioCAgYqPriUoGSQaraOcm5eeXz0mFhARGBgfL0hBKB8cFhYWFRMhsJyPgYWChYqmR84jHRet\nra6ikpi5xksbEA4QDRIeLDMuNycdGhsYEBrtpZGGhIGDh5uqxzQcGjw+vZ+Um6WkvScYEA0L\nDhMZHiYqKiolIR8iJz6ulI2MhoWLmZmndio5NitNqaKmnpusPigbDwsMDg8VHB4gJyglJyo0\n0qGQjouJiI6WmKhOLT8uLGmop6yin7U+LSAVERMSERYaGhsfIR4hKTRTqJiRjYuKj5GYoL/m\n5kI40KWnqaCer0MpGg8NDQ0OFBkcHykrJygzXr+il5GOjI2RlJqkvLzHUDlmsa6uqqWu4C8d\nEw8NCwwQFhsgLD1EOjRTuqWdlY6LjpOVm6e9v8pXRtS0raqkpa/UOx8WEQ4NDA4SFxwgKDZB\nPE+5pJ2YkIyNk5SUmaWvvF86NkjswLOurr1YLR8ZEg4OEBQXHCcxO0JDPzhMuKGcmZCMjpSV\nlp20y8K+ydK+trnORzMnHRYTEhISExccIyw64sXTeE85PrSfnJiOioqOkpWcuDQsLjg7Q8Wu\nuzsnHxoTDg4SFxgbJUDV0c7Mz3pa+nzNr6GblI+Mi42RmaKzWC8pKSspJyoxNiogHBoXFBMV\nHCQtP929tLKzt7q5tK2inJqZl5eanqWuu9lKPTg0NTg2NDEuKygmIyAhJCcoKi0xPEdm0sO5\nsaqoqqeloZ+fpaqrrbreSD89R1VdWlRKPzgrIiAlLS4rKS0+TkBI1sLAvbyxqaajpaq8fMeq\npbk/Pcy2vEoxMDRK9U88MC83NDQuIiEtSV46N9q6tb7Graagn6qspqmpu/LKbltES309RD46\nNSsrKy8zMi8pND45OTxKxb+3urWrr7KxsbWztrO6xr+utPdY389XPjc8Pz06KywtKS8yLDE3\nTcrfvb7Wy7evt7m4rqyvwbWvyMpqWMfnV1hHTVM5N0JJMS00Ozk+ND1kQUxd2rrBycO7usK3\nvriytru8wtXQ/2XlXO/fR0r3PjYvKzk7OjE0WPxsRFK6uvRUw62rtsC/v73L587L+1zf2UpB\nSsPWOU1kXUU1Pj07MzlQRlfl+s/s2srMvr+5sK+uuba2vt1MdmxLNzY/T11f9Ec5NjI3MTQ2\nRlJhY827wMvDw7q3uLzIxcC/vbu+vNbaakk/QEZHTFHuTU5JPzc2Mzc4Pz9K4r/O2sbMw8fK\nwcjBvbS8y8G8u8DSceze22RLXV9ENz4/OTE4Nj44Nj1P2e7ewL3Mycq9wW/Nxb67vcC8ubrQ\n18veXEtj3HtFTkA7MDc2NDIvPmVOXMnTx8zb29XHub3ezL++uLe5u7vI0E9OTk9ESDg6TvRq\nSUNJSU0vNklcUj5Pyr6+xb7O5+Xc1s+9tbi81NPXZOZbaNDjX1FMU09EQDxKTkU/Q1v6VWZp\n1Mp95crFxNtMbHnjxMnGuMbczs36Xk1MV2lRUllP7mhMUWFMTkpHW1BfU2XTcde9vd5ZXrq/\n/VBhydZea2Pf1N5STuL4ycTR09Rs5UY6P0pAREpJUlRp3MTEe0z0zMfL1NW/vcHS3tjcVEVF\nTExNSkRaZODudOLiaVNP/elZWV5d69dfV9/f2+/5zMLJycO+vMzd3nxPPjg8S2nV09Rva25l\nSDo8Pz8+RFz72HLPxMjj6Me2t8DOx8PBwMa+xM71UEhSXkxDT0tQRTowLC0tLjA1Okb91su6\nuLe4sK6ppqKgpa23ubu8v7/BxOtBLiUgHhsaGRkcIyopJysvLykoN+ujjIGAgIiYq78mGQ4W\nKbafnJyhtDwbEA0NDxASFh0rNzkqHyAgHxweu4CAgICSl5S3EQAADqmRjoyKjJRFBwEGDA8N\nDxs4SCUZHiUfFQ4VID6fgICAgIuYnioKAAEWm4+MiIeOlTQCAQcLDQ4aMGgyGxMXGxoTEBci\nPFiUgICAgJuZniwFAAdOjI6Oi4iRmxQABg0ODA8nv8IfDw4ZHRUOECLPv/TEiICAgIqtjKAa\nAAEam5KckYmNmCwBBw0MCQwdRz0cEhUbHRkaGiRAvkhR25SAgICAl46iGAAAEDyloI2IjJVD\nCAoIBQYOIzwvICMmHxoUGR0fKTvU86+tkYCAgICakrkQAAIWXJyajImOmiEHCQMGDBsuOjE1\nRR4QEBgdGRUdw6m7raSfgICAgKmTlikFABrumKeol4uUVQwJCgwPDRMfMi8mGRcfHhMSHTW/\nq6uil52tgICAgqePkcgHABAYOSFCmIiPzyEaDQoHCxUeGybGzi4fGR0rJR41q6Soq6uuhICA\ngJiYkjQGAA0SLjPHkIiPrj4iCwkHCxYaHD+nwysoJSsjFho9t7ann6aqo4CAgIWslpcfAQAO\nFC4xwJCKjqQ4Gg4NCAoUHkC5rK+5cyAXFRspLTq4m5eepq6NgICLzrWUPgkADSbeZimni43K\nFxofIBEOJWbYysPG5S0ZGh8dKD/KraKdqbwmJJSAgJDHnYnMBgAPJzwkJZuFip1EQj4iDwsa\nMTU0R6+vSSUgIh0aHS/o4sW+xs0z2oWAhJzEj5skBQkiOj8zro2Jkrg71ykSDA8dJjZssall\nKBsaGhQUHDbvw62wvz4quIOAiJmWhZFHDhMlJB8bPZiOla3FvEkfExQeJCIhJSolHRkZHR0e\nKU7FwLu2rq23xZSBgoqQiomUuxoWEhAODx3boJueoqe1RR4SDg8SEhUcNMzCxsfSzvM5L0u5\nxb+32dWijYiIjoyIjZsvFhERDwsMFzG5s7SunpmmzkYwIhQNDREYHy1Ot6Siqa2uuFI5MS8z\nL6SMioiMh4aNniQXEA4LBwoSKrSupJyVj5q2PCwkGBAOFB4mKjR8q6asrrjEXjwvIiAj24+K\niYuOh4uU+SAXERALCRAeWq2pn5eQkqHANygcDw0OGSIlLkezpqy3vMjVRTYvKi0uXZeNi46R\niouPtyceHBsSDREdNFt2uKWYmKGwweEtGg8OERYYHS7frq62ta6ptWo+PVBFWKKWkZCVj4+O\nmr42Ih8ZEA8UHjVAXLadmJ2x0081JBYQExgaGSA13by4raSen6u2ytxMOMCclpWblo+Ql7RF\nKSQfGBMUGB8kKTfBoqCjqq6w1SwdGxwcHB8oQGdp4sG0ra6trq219VmynZ+prZuVl56+eTw+\nJRgVGic1PDZIx6quxmFexFZEMy4vLCkfHiIsOUz+v6uqqKurq62pr66utsb5xLi7v9rCu8fV\n/HR9c1JEPzw1Mi8tMDk9PUVKQzo3NDIzNT1N18vVyr2ys7u8uLGyuMbLw726ur6/u7u7vL/C\nvcnm9lxANi8rKisuMjg4ODo8ODIwNTs+RE5d1723sKqlpKWprrC71Pr02M3Bxdbc1szlSjk3\nPDwzLC40Ojs5O0h/5l5cXufV701ESVrPxcG4ramqrK61v9tMPz0+Pj9EQ0I/QE776Hn83M3I\n1mpUYm9VV+XX4lVIPzo7PlPNw8fEvbu6u7+8vddNSlJRQzs8Q0pBRld/7v3Sv7i2usPM1etX\nTlBPS0tVT01OTklKTEte19jY0dHKw8LHxcXP7FVDPUFISVht6s3Fxs/rZvbX2l5ZbPf+XVFR\nW1pYU09LSVFbetbNxLy5usDN0M3N4k89P0tPSUNLZOTjdO7e1Nrm3t3Y0dluVExHQz9ESEZD\nSVZ31cW/vru6u7/FysrWel1UT0M7O0RTVm7Pv7zB0vhwZVJMS05TYGr97nR0eFx55npRQkVL\nTEdDTdu8sa6yuLrA2lhIT+7a4PLt3OtPPz5CRURERT8+Rl7ZzMvIxcPAws58YV1PT1JXftrM\nxMXIw8j2TU1dVVRORUdOTVJs7Xz/3tLO1eDe19v7X1hp5OLrcOvW2PpWT2Le2e/x3NLP3llH\nRU1VWVtcWVddWFJWZ3Hw6t7Ow8bV2NnWy8TDyNHhcWhZUFFYaH9tYe7a41lLSUZHR0VLU1tZ\nUl1y+3Hx7N7X2dnQycvLy8O/v8TNz9/9d2pdUVBZdN3X3fbq3eN4UUhAQTs4NTg/Td7X1M++\nw9XTZF9TWVNNe+bHxL68vbq5xM7N32RNUlNJRUdPX2ZW987KzNV6V05AOz0/PkFTW2ZfWnHq\n+E5KSUZPXN/Jwbi4sru2rq21wsG8tsRnRExbRzg8R3/ecdjH1jwuKykjHh0jKi0yP9PMzLqv\nxVjJvKynnJGNkZaZn7suHx8lHig9sKuqrcpQJRsWFRQTFxsjLDRBTtvzPk9J+s63nZGKiIyK\nj5W+MSgcHhUzYbCvo6Gsxi4hHRMRExgcIi00TDkzLzIvLSkuTsK5vpqLiI6PiZGfMWYuIhci\nzMS1rZ6juUg2KRkQFRYYGikyOzo0MS4sKSwwPtvnrq6bjYyPj4mXounFLh4cKUA3u6ikra69\nTS0dFxcUFxshKDs8ODowKissKzNaf7eupJOLkY6JkZ+ptjQnHSUqLGWvsLCjsORhLR4aFxUZ\nGyAtMzk5Ny8yMywyPEI8XsSdj5KNh4yVlp/PPjQlIiA0PULersVZyUooIh8bGh8hJikyMzMx\nNDU0RU0/UF949a+cmpWLjZORmaq8yjYpIyosLDTd9/rFdTg0KiAhIh8iKS4uMTk3NTs6ODs/\nPklhbrmknZSOkpWUmqWyvHs+MzEsLjxQTu7Gaz4+OzArKickJCQjJCcpLzo4OURAOjw8ODtv\nr5yVkY+Oj5Sboam9VDYtKi87SEpZd1tVRjQsKSQhHh0dHiInKy8wMTdBRD48PTw+yaGVj46N\njY+WnKKuzz4uJyoxOD5ITktFPTUsKCUiHx4eICUoKywuMDY+SE1bY2RdT8WhlpGPjo+Sl52k\nrcJMNSooKy0zNzg1NDozMC8sJiEgISMlKi8xMzc8QFBuYVpYSkHjp5iUkY+PkZadpqzAPi0n\nJSk3Pj8/P0JCOjMvLCclIiAiKCwxNTE1PUZKTD88Pj44OsSelZGPjpCUmqCquV03LiktOUNL\nXVRBPzszLiokIiIhIicqLjMyLzI3PEVJTElBQEVwq5iSkZCQlZmfrLbFTjkwLDRMXF94TT88\nNy0oJyUjIyEjKS4wMzEwMzc8P0E8PkpMV9epmJGQj5CUmJ2lqrR2OzArLTQ6OTo1MTU2Mi0r\nKCUjIiUqLS8uLjI3Oj9IT05dUU1a+LOck5KSkJKWm6GkrMNKNisrMTU0NTIuMTMuKysoJycj\nIiYqLC0rKzA8SlhVTFXvXGvYvqSWk5OSkJOWm5+otu85KiYoLS8yNjMyNzczMC4qJSAeHyIl\nKCwuLzY7Q19l6MzL0czIu6GWk5KRj5OXnKKtzTwsJScsMzg9OzIvMzcwLiskHx4eIScpLC4z\nODxKc+bRz9nt48zKvqWZlZOSkJSZnaauwk03LCsrLzEyOTg1ODYuLSwqJiMgHyUoLC8uMTU8\nRVjn7dTM32pW3quZk5KSkJKXmp2lrshNLigpKy8yMS0tMTUxLCglIiAfHyIlJycnKzA7VH7+\n2MS+v7++vaaXko+Pj5CVmZ6mrdo4KSAiIyksLC0rLS8uKygmJiIfISUpLS4vLzM9TPTVyMfR\n0svJvJ+UkI6Pj5Kam6Sz1y0oJiMnJzIzNTw9STkwLicmHx4hIyorLS8sLi83NDRCRGNdVb/G\nn4yUj4SMj5KWpUw8LSkbGD8mJ8XBRe29LjAlHB0ZGiAfHzE7LEM3LDwyL0IzPtRcu7CbjpSH\nhI+LkpumQDQsGBgnHR9OPlTP61QxKSsfGCIbHCgrNDo+UzsySjcuc0RSy1fGtJ6RmIqGkIyU\nm6g9OCoXGyMcKk5L7dfSWzAxLB4bHxsdKC01O01gOTpNMTRDNEdL8MHKnJOXi4ePjJScozk4\nLBgcIxsoPkbiysXcNTctIB4eHR4nLjQ+Z1BDPTo2MjY/PE1X27+pl5mRiY+PkJ2ev0Y/Hxwj\nHSQ6PVzYdedGNDEoJSYhHyQoLjtFREA/PDYyNzw+XtnNvq6ampSOj5KRmJ+wRDwnHiAfHy44\nQOnW29JfXTwsKyYkJycqLTNEPjk4NjEzNjA/PUnm46mgnI+Pjo+QmJ2txUcoJCEfJSwxO05e\n299IQjMtKSckIyQnKy81OTw5PD0/UFp9bH7cvKmlm5STkJKVm6KvxD0sJSAgJy02P1vn09pY\nSDcuLCYhIiMpMTU3Ozs9RUFDT01F7V9Oy7qvnZeWkZKTmZ6quPs/LiUjJSguPE9mz8voUjsz\nLiopJyUnKSsvNjY0Nz4/RU1ITFjv38KwqJ2amJaXmZqfqLDEZUMyLC0wNj0/P0dLUEg9NjAu\nLConJiUmJiUmKi4yO0ZV6czFw7u4s6mgnJiWlpeZnJ+lrb7vRTgyLy0tLi4uLi0tLzAuLSsp\nJyYlIyQmJysxOlPNurW1sK2trK2tpqGenZycnZ6gpqyzwmg/NC0sKysrKissLS8uLy8xNDEq\nJyUjJigqLztP0r+2r62sq6yus7KuqaWhn5+enqCkqq+8zlI5Ly0qKSkmJyotMzIvLi4sKSUj\nIiMpLTM/Zcq9tK6tqqioq6+1urizr6qmop+foKKmq7O+30M0KyYjICAiJSgsLi0uLS4xNDQ0\nNDg7Qlbz1sS8t7a3sbCys7i7vLq6ubavq6qopqWlp6qyxl08LysnIiMkJScnKSwuMDM2Njo9\nSVlZb+Xf0snFvbm3t7e4uba2uLi5vb25urq4ubWxtLm/xdZZRDsyLispKCgpLC83PEBOYOvV\nztXm29vuZ1xfbu3c0c3Cu7m8vr+/vry+xMjL0drX2eDVycrfelpLTEk9OTo9P0BJTFBbWFRU\nTUxQU1VOT1Rjc3v15u7f5PbbzMnGwLy7u7u6v8vSz9b6aV1YWmR15eTk7mNMQ0A+PD4/QUJK\n8e66qXnORyxKJyhPRS2zRMijWqer2LG/WLXnR7xK3cDn1unHr7zOwmfnTDo6Oi81OzVGPUZt\nXeXIv8HD+/xLODY+MzFJOebrVMDTTb7J1LG+r6StoJ6koqq9yEAtKyIiKScnN0DWvL60t8e+\n4zw4LiknJCMlJzRAWuS/t7uwvLvOuaqrnKWclJ2an7C4PyUnGBcZHB0uN8mxqaSiqqqy5UMs\nIh4dHSEiKC88SO+8xsO9aM1ePWm/tpqWmoyPkZafvXIaGRYODhYaI2u5n5ual5mrtuQpHxoY\nGBseLzg80r2+w8TNZzw2Ny0sNFWlnI+UiouNlpy2MxkPEAsNEiMtuaCWkpSVmqo/Lh0UERIX\nHCU6xcO9srbpQUhMMy4xQUw78ayYl46PioyTnq8+GxUNDw0THT/HpJeVk5mfsz0gGxUQExki\nMVa6qKy1ss04LC4vLCw2TeFex7Sal4+Pj4yWnbfNHBoOExMXHz+1q5uZmJ6rzTUeFhYTFhwp\nQtW2qam5zNQ6Kyw5OCw5wbnX1c6klpSWlY6Unb+9OhoQFxkWHTGzp6KclZutvUoiGBQVFxkf\nOf7LtK+2xvlHNS0uNDM0P8rI4dWtlo+SlYyNlaq86ikSDxcWFhw4uquto5uftvg+LB4YGBwe\nIC5jxMO7s66ywdDJym5OTu3qVum+u720q6mutLGusLa6vsbU4NpjPzU1OjYxMjg7Oz1DR0pb\n6ehbVmVTSD47Ojg3Njc3PEpx0sG5r6ysrbK5vsPBv725s6+ur7K3vtN6U0E4NDc6Ojo5PT9A\nPz46OT0+PDY2Ojk4Nzk+TGrQwLy7tbOwtLi6u7y7u7i3t7O1uLy+wcrcXUc8Ojk7PD1BRklI\nQz4+PDo6OTo8P0RCQUdSZujazcfEw8C/w8bFwsC+vbu4tbO3ury8wc7gYVBMS0tHRExKQzs3\nNjQyNDI0OUFNVlpj3czEv8DEwb2+w9rh2drmb19z3c7CwL69vb6+wMjS3uVWSUE/Pz49PT8/\nQUdOVE9VW11cZ3Fs8tzS0tnRyM7jcldPTktPUG/Sx7+8vbu4ub3Fz+HzXVJJSUtOWFxcXFlZ\nWE9RUEtJRUBCRFT55NnLvrm5vcXbYEpCQT09R17bxb+vmswquS51JTOnZSw3qb08eK+55Tji\nr0s2YbtPMkFzbT89vbBd2a+9V0pNVUEtPOJCRcjM3tztyM9OTftTU9zP2Htzxcdmz73O6fns\n0EdE/nxKV+e9v8m3r7zTx9BSOD9fUj5Vy99PRj40KSYpJCAoMDZE3721trKqqKzMubbufrab\nmKKWj5istL8vFxceGRQhRT1ZtKvAPzcuHBggIR0mRuR6xq+uy8KxzmnLuba7v6+qnJSTl4+T\nn6rIOh4XFxsVHzVP97e4yGo+LyAbHR4bIzI+7Ly0uM3a5UJjxti7tKuqra6svKebo56Tmp+j\ntNwtICYfGSMrJzjkTk5nSjgsJSIfICsvOVzOyby/3WtZZuf8xMjCsrK6r7Oon56dl5mfnay/\nWDQpKSAkKCkwQDc9Uz02NSskIyMnKy48R1Hj3nnmanHJx8G0tK+rrrS1t7Cnp6CcoKGdqbW/\nTDEsJSUlJS05OD1MSEhBNSwqJyYoKSouOD9b2s7Iwbq3vLu9w7zCysHIybmupZ6dnJufp626\n2F0/NC8tLi8uLTAzMjEtKispJicnJiguNzxJY9zMwbeysrKysbi+wcPGv66kn52cnJ6kq7G/\ndz4zLisrLC0uMjo8ODIuLSwpJiQlKS0vNTs+RFZt0cG6sKytsbK1uL66rKGenJqbnJ+nrr9P\nNi0oKCosLS0yNzc2MCsoJiUmJykuNjk9QkRVbt/Gvbi1tbm7v8TEyL+topyZmJmanqewxEYy\nKykrLzI1Oj4/PDMtKCQjIB8hJCkvNj1IUl/jzcvDvLi7wMC8urmysrClnJmXmJqcoay21D4x\nKyYmJycqLCwsLS4tLSspKSosLzI1OD1KX+nTysS8trfAy87Lv72+wbmonZuZmZqbn6u20Ug7\nLigpKiotLi0vLS0uLCkoKCgpKi01PUpefX3h0NHLxMXFyMO9vru6u7irn5yampyeoay1xF9D\nNSsqLC0xMzM0ODUvLCgmJSQlJykuOEBPXu7Jv8PEyMzR3dHU08W+trawop2amJmbnKWttvM7\nMismJygrLzE1PTs1MCwpJyYlJyw0QU56z8rFx9btZ1dWUlVe8sK5trS2raGdm5qcnp+nr7xb\nPTYsKisrLjg8P0I+PDYvKicmKCstMDg/SVJZVFBWWVJXW/TQyLy5u7q6vrOknp2ampqcoaiv\ny004LCkqKiswMDM6ODIsJyUlJScqLTQ+TWBnb+3yb2NZUVhocnrOx8G7u7uqnpqYl5iZm6Co\nsdlEOCwoJyYoKywuMTMxMS0sLSsqKSgrLS83PEFITWTfzb+7u72+vby7vsK+qpyZmJeYmZui\nqrPjQTcsJycjJCcnKi80NjUuKigmJCYoKzE6RE1RUmfZyL/Gys3NyMfIzM3Buaeal5aVmJqd\noqmwxkY3KiQmJSYtMDM3NzAtKiYkIyAhIyUqLzY+TWfSv7++ur7CwMHExcPBvLejl5WWmJqb\nnZ6iqbdLNSceHyEjJykpKisqKyooJycmJykrLjU9TGvcy767u73J2dXJwb+/vby6qJqXl5iZ\nm52fpKm1TjEoHyEkJikpKSouMTIwLispJyYmJiksLi41RfnEu7q2tLe6vLu7u7zBxrCdmJiZ\nm5qbnJ6irvEzKiEhJiUmJiUkJiwuLy0pJycnKCgpKi01RGPTwbu3tbW5vr67ubvAx8u9o5mY\nmpybmpqcn6S2RiohHiAhISEgICMrLzAwLCopKywvMC8uMzhD3ci/v7+4tbW4urm+wcnX3Lyh\nmZmcnpubmZqep8o5KCIgJCYlJSMkJSovMC4pJSUoKy4uLCstNUV/z8G/vbm2ubu1sre6ubm5\nq5mUl5uempuanaKtWC8jHh0fIR8eHR4iKC8vLywqKywyNzs3Nzo+XtfCu7+/ubS0uMPGytXn\naO6umZOVm5yZmZebna43IRgZHSs8Mi0oKjM/SS4dExAWHzdGPz5H2M7sOCorPb6spqaqqqas\nvT83noCAgJUeKi2pNhQNC76ZjZwmGRUhHxUNDya2qMsmGydQzjQfHzqvqsRB5K+iq9c4Lrmk\nn8A1OeyQgICFaBHHwqEZCxMij5uxHhYrMCMOChTCoK4oHSk5eiohKdiqtUMvT66lyT0yxKy9\nu+O75E5InYCAgtURvMOnEwwc6IycWR0iPi0SCQwfp6nmJSdKLiEaJMKruDww6K+txjA5v6uu\nNU+uqKsvKNKCgIChDGqfpx0GHcCMlzIeMbVGEwgOJqrCLR8sYywcFiy8p1slLV6sv046xKms\nvkLFqqOxMixMh4CAkhQ2lrUiAxS2lpshH0+uNw8HDyXFXiZOrqQqEhMwrrk8KGO8s2lMyt28\nvbqwz7qv2GUkLK6AgIeoEZ2bLBAGvKGVziO+n7QXCQwnNkEgI93NOxYTJlm6SicyXbS5dM7F\nsq/CurytqMBdO/LUjoCAjShKljYbBx6xsL8g4qW6GgwMHCIiKD2hosUfGys8LiouS+JDdMWu\nuFvRtq7GV7autj811YyAg5UlqI0cEgXzoVo0G6KbXxENFy8aFyTQod8vJyo8IyNIv7E2NcKq\nqGg96Lm2VDqwrbY3Lr6MgIiZ4ZiPGA4Nq7ofJz+UoSUVHCseDRU6rs8t4uJWHhsqVtg0MUqz\nr7nNyc/P60rCtrdXZM68joCLlq6TlBcWFKIsGy3eldQlIjAoEw8cNU4lKN/pOB0lWchbN1ff\nfGTAqLJKQs+xumRTtb8/v4eAj5ueibASEz6uEh02m6slL2lPEg0WJCYcNq3CUC9TSCorQsYv\nLkG0qcDfyq3nLcm6tkQ4rI2AkZSSjZgZHilaDhzjrbIqsa/2GRgfGhYZN/gnLe3ANiIqRF4p\nMjpvw7OkrrG8tr7NvWr1SJaFj5SPjpo1JTksDh9EdUldrbw+Iy8fFhQZIiYtOV7MzUkvMDw7\nLCc/b7exq6e1s9m5tXJf05SLlJGLj5/HXn0bFCgtIynCsfEwS1YkHBsaGBwtNSs+yV8/PEIw\nLDZWSOCxpqi5rLVrw8lhqZWSlI6Nkqi6rzsZHiomHy/OzztEZTAsKh8bGR8oJSzX1kH+Y0Mt\nLTc6L1fMsLC2qrKyub+tl5iWj4+Tpauw1iElJCUlNUNDPlNmLy4zKCEgISIeJC47RuTmWk5K\nODs3TFHfub+4v7Cv1ruZmpyRkZCgp6m/KzUyKyk9bUQ9ZPsvLC8rICkoJCAjJyYrPUc6QmZG\nMjNFPkm/y86zr6u0vJqZnI+Sjpador4vNS4hIyk4OzxOZDg1NyskLSgoJicsKyw8OzlXSUA9\nPUA+OFfnSsu4uLa3ppuek5GSk5iYob49OConJigsMThPSTwvLywrJiwqKS4sLzQyNT85PD88\nPEJERl1IWs3rt7GunZqYk5CSmJieqNM6NCofIicrL0NJVU1AOC8qJScjJyssLTdKS0A/PD9D\nQEBFPz1JZ+3cvK2im5mWlJSVmp6krLltOi0oJSEmKzE2P1hGNzErKCYnJykuNDtHV1VGRVdr\nZl925OZobnHxz72vqKWgnZ2cnZ6hpquxwGw+OC4sKywyPD8+OjQvLi0rKCcpLS4sLC80OT1I\nWe7Tzs7d1srIxL+3q6Sdm5qZmpueo6m0wf5AMisoJygsLzAzMzUyMDAuLCsvLy0tMDQ0Njs8\nQU9m4u7c1ci+ube0qaGdnJuamJmbnqWtt/c5LCckIyEjJiktLi8xMTU1MC8wMzM0Njk7PT5E\nUmn93c3Kw8K/vr+9tKukn56cmpqdoqeqs8xDMisrKysoKi4yMjExMTY4MC4sKywtLi8vMTdB\nUmfexr64ubm2tre9yL6yrKahnJqbnJ6kqrTOQjArKikoKCswNDMyMzUzMC4uLSwsLC0tLzhC\nS1Zyy7u3uru5uLzCxMnJtaqloZ6Zl5mepauxzUAxKikqKissLjA1My0rLC0sKykoKSoqKy0y\nPE7jwruzr66ura+yt76+v722r6qkoJ+en6GlrbbKTTsxLSkqKCgvNDIwNDMyMSsoJyYoJykr\nLDxSSODLv7Wur66qrbCvraytrq2jn6Kfn6GlqK+vt+47LywnJiAfJCUkJSkqLDAtLC4zNTM2\nNDlKSmXo3L62ubKtqKupqaqrrKqtrrGzsrm5urq5xMpmRj81MjEvLS0uLzQ2NTo8OTEzNjg8\nOz1CWXXe3dfMys/JysjBvbq4uLm1trm6v8HGxsvAzels9U9TRklQTUtKSUpPTEtAQkU/QT9D\nSD5BR01RTX3xfXlr7tHLx8HK38vPvcjOxr+6vry8tLW9wtrl40/nX3lJSUNYT0ZGPT86NTQ0\nNzs+RUlB6s7Edc/10uzbxci8xrzBvsi+z8G/zcnUxMC8ydtdTOnrWUJUWktDPF9cRkBBRzg9\nN0FXR0U+V9R84VrPvc7L1sK+vsvVy7/IeeTT59fd2MTP49zd0993T+PXVNDH21VCUmZNOURN\nPTM5OVNFPk1TWHvt39Pr49HK2dvRzce/xMm9vsDCycG+zMe/z9x4V2nmaFVSRkhuXEQ+Nzw/\nNzI3SEE+O0fuZ2tdz7/Exs3Iu7u7ubnAx9TPwszHzs3+Zd/i6XBfXkRCTk5WU1RtW1thUFRO\nPUJEPD4+TGJPZvX919fJv8PL1M/Iw8XI1tLO/Vb73ePX09rr2drOz87Ez+7d1GlZUG1fSjk6\nPTc0Nzc7Q0FVX01f9cvK3uTBvb24ury9wL2/tsBlbkZ+XULWwdbP2M3F3FNJSD03Nzc7RDdF\nQ0ZPS/hPbW1t7fXj3sTM2sS7u8C/vb2908/X6/V63HBeWFH7+2HzXmnga1tZeO5kU0xOVVxa\nTlpPRk5PTllMRVNJVEVFXfW/zczDwbfDxsPGyc7Pz8/a3M7my8zr2WVnfFlHYO59Wz7vyV9M\nR0JKQD1CQkk+UUNPVUTny/vjYNPFz7+7wMzUv7rN8tO9t9xZ39TN7VJVTV9+39hFVfJbcltB\nRUQ+PUVPS+pGUNpR2Mfo11lPZF7X6dXe6tvNzsm3z87wV8rJ1P3Xx83bzNXE2FJOV149TlRH\nVj48PUA7Pk9JU05GavZ65d3Bxu7O58C5wLazvtHEyGl8S0RYzmxI4G/Pc0rp51tW7UlMTk5b\nSz1AQltnTVVo2N7nb+rh03Reae7K0ezNwL++x8XAy996VnxjXu9bec/qXlP73nhuUUREO0lP\nQlpnSmpqSltMZN9eVnHQv73LzczLzdZve9tsz9/T1nDIysliTHRhW2tJcW7s32Vna1dKPj1H\nUm7g2tPb+VZM/1tGRU3i3eXYysHO6d3UfXhe/trTyry2vc/l0snNY0lNS01JUVROQkBKT0E/\nRE1jXVVr9+Xd79DMz8/GxsrNzsrfVkld4d3r7dLJ0t3PyM3X8uPqYFNXf1tJQD9OT0lJWl1U\nXFh08m9XVGtz6t3dy7690+D11thuW/TPzNnt4+HR6npuV27q+v7p7/vrfGZbXWtfT1NOWV5l\na1jr5d9eT1v309552dnlaGVl/2tO5N1STVby7udPV/Zd39rd3O3Vxr7HyLq1sMDp7916PDo8\nQ0I4StTAwsG7wtBLODEvLSgnLDU/SGLavr7WfePBxc/kzsXL4N2tnpucm5eZqU0sJx8bGiAy\n5b6wrK69PywhHRsaHiUrM0zCuc9Y6vlQTVi7sbO7ta/IpY2Hi5SWl6wiDw8SEBMdWaObmpqf\nvikbFRASFiJB0sS2rrtILCUnJSpDr6Sinp6lvjstOJ+MjZCSjpK5HRASDgsPHcifnZiTl7Er\nHRcUERYnVO7rvLPeMCIhJiQoSa+fnZ2dn69HLCbWjYmRlJCMpiIPERQLDRprnZqXlpiwJyIb\nEhEUJlPCv7Oq8C0kHR4eITmwop6bmqGoyyseHM+KiZGQi4mrHA4QEggMH7GYl5GPlrggGhoS\nDRIj2M7PsanIIhscHBocPKWcnJqWlqpFIx8cMoyFjYuMhpsfDQwOBAYVTpmSko6PpSoXFxEQ\nER+/rK6qpLUvHBYYGRkjxqShm5qYn9UvIB8tkoiPjYqGkT4ZERMIBg8lrp6clJGZwCslGxgV\nFicxSvi8stVJLSYnHx8s6riuo6SiqLxMMEyckZqflo6UrzsrLR8aGyVCXGVe2tdaRTszLjE2\nOzg7S2taSj5DSkVMZszAv8XHx2k+PkxZXvHGtK2usrnBy87LxLqyrqusr7jLX0c8My4vNDs9\nOTk6OTc1MjM6RFFWZdTN6lhXSDgyOEb1w7OqpquwusXN5Vp+wbGsqKWprr9wQTEsLTI3OkJW\nd/lPQjozLi80PEd2zcn0TktEPDg3QVPWua6qrLC4x91kWX3Tw7mzsK+wucnwTT49PkVV+d7T\n21VBOzQxMjQ3P1nn9VVDR0Y6Nzk/Uf7PurCxtLSzuL/Nzr+2tba3ur7QX0o+Ojk8RU1aXVZN\nRj48PD9LUlFSa9va5VpPU0tHSGPXxby5t77R8m1sXlT0yby2t7vE115JQEBFUGrr1s7S3XZN\nPjs5Pk551svCwMTdT0M/PDw/UdG/uLe92VVLPzg2PE7hx7y3tba82F9cXWjgysfAvMHPb0Y4\nMzU+TnrYyL/E2lZCOzs6OT9azru1uLrC21JCPTk5QFvNwsK+vcDTZEtCRU5s3cjAxczZ3nJQ\nUWPj0MjAvcHWUEE9PkA+P0lY9N3Z2v5aS0NBP0ZV6s3Gv8G+vcjhZmd5/H3dxK+nLUVOUJ1s\nPzAtVuDaTdZDPUZg5O3f0s/E1+DX+9rVr7sqLCosOildvb/Jva6wvtxUV/FQUmB52NrPxsm5\nurm3vrrG6ks8QDo4NTRBUl9ncOh2W1BDREdMUE0/PExMRD48YNjRzca4trm9v8LGwKufmZ2l\npKquPCQaGx4cHy7QpZuYnrJYKxkPDQ0QFh4tw6qnpqesxTkjP6WGg46KjoSYSQ8KEw4ODyaf\njY+Snp7UJhILDA8THCzJp52drOQvIh0bGyNLs6WcmZqiYk+vm4+cnZuXllQjEhgcGRsnx5yc\noK+9wDQjHBgeJTbfvay0yD0kHxkXHSU5vaijq6Kkyi8lrY2CjpWZkpgiDgUSGh8k5puLj53v\nLicaEg4WOryqoKCdrkEcFxcVFh4vvKiinqGwRD4/KSElqI+Cg46PoKMfDAYJHSy5o5WNjJ9B\nFxMQDxAYQaGZlpyozScYDxIXHzq9p52cnq3FNh8hJiwwQp+KgIGPn23BFAkBCyy2nJyUjY+0\nHQ0PEBkbLK2Wkpen4jMhGRMYIT2+uLKttL1LMikkKU26utS0nIuCi5/cXL4iEwoWWquktaue\nntMfEhUaKCsuy6iamaK/OjUsJSUlPsi6zVlXU0QuJis5Q8Kxxew2ZKOIhZOcv5/BJg0LID6r\nu7WjlZ7rGRIQFx4bMb2el5efuOI1HxsaHzFuzL+ztLbHOy0sOztNu7/ASNmqj4WPncLErykY\nChcxrqGsoJqYsyIPDhIeIi3Ko5eXoNsqJh4bGh0zvqinqa686jolICY/v6aen6S9/rORipev\nRMG2NBoMFym1ttu8qp+xLhUSFyIpMUavnZudrMo8OiwoJzNrtq65yOnoSDEnK0/YWOnGsMIv\nO6yJiJKi2Z/FSw4KEyWpu6yynpusKhIPEx0eJjWpmZecrslCOiYfIS/Iq6mtr7K5fTQkJjll\n083Ltso2McmPi5Cex6zaXxgNDhRCe66upJmbpDYcFhgbHR8usJeQlJ2x3zgoGxYcLcmupqSh\noq5LJB4eICIqSsbFxaiRiY6d1VHXWC8WExcwuK6psqqlpbYuHRYZHiQpL3CuoZ2hrbi9xU82\nLjBE37/Ly8i+vNJbNCwqKisrKy5LqZeSlZuen6a3MBwVGSEsOUTqtqinr9BBNC4rKCcrM0+7\nrKirtbq+wcvhaWDv22pJPDw/QT87PUNb3uF9W1bfxLKrq6qtrbC2vslpOjE5P0Y/NC8wNTc8\nPkJOf8/Bury+vr/G41dNWt7PyMfS+VtENCwqKy86RHXTTpSJEAyrj6MtUkK9r6OuvMS6tr9u\nOyofPtAtKTxLXr7KPV3DX0NPZk1azru6tbhoSFA9LiwuLztWU1bkxMLEwb69vLzBw728wL65\nu8DFyeZbSTw9Q0tQX11MRkdMV1xOS1V429h7UEdBP0pNRkJHTU9SXnbi3c/Du7SzsLCztrzH\nzcvN5V1QTVZWSjw3O0NMSD8/SFpbUkxMU97L0N3jy8TG0m1ZY+Dmemdt6XVmefDr18C5trfA\n193h7VRHQk5w/P588HpcSj45ODk7PT5Ia9bLxMHHytHY3N3PysLDw8HFzOJrZ1ZPSUhJT0xL\nTlhx3tDJxcXJ1ud86vJ+7/zm4ONlTUZEQz07PUJJV1tcc9rNzdXd3NTNzcjCvr/DydXc3t3k\nX1VeYlhJSExTa97MysvT2d9fSD8+PT9ERkld2svN1uh2Z19YWWzZysrQ0MvJycvO0Nzb5XJh\nU0hHTU9ZYuzj2txtVlpsd2tfXVd208zY3tnW0tfd39/c9FRISE5cYFNHS1lvaVZXX2Xu4OXd\n1s3KxcXJyc7Q2XddU1dXUE9WWlz76fTn39Td5uZ++fvt3NrX19PjWElCQENIS0xZ7NvZ3+Dr\n7uTe39/Xy8PFz938Z1xOREVMUVxfWW3Qwcfd+W3o7ufd0szMzdfb3XZnXV5RR0NCREVFRU1b\n/urY0NLVz9LW0c/LyMzk+d/V1n5NSEZKTElKTVht+PhfX+rTzNHZ29LOzs7OzcrN0OlfVU5G\nQEJKVF1rbuXPztfa08vFzd5tTk1KRkI/QEdXY/fe29DS1dtxbOHMzdDV5OvefP/v6dfLzNTe\nemtfYFxXVWB+6ntebdzT23NgW2rf32xWTk5XU0hHS1diYFtZdOPl6efZyMPH0dPM1tf0ZHHj\nzsrP3/H6fmVYTExOTVdVV2Px6O90bXPv525jX3Pvffff6ePc3+b8eHxLR0tOcV342NjaeHr+\n3dTc3tLIwMDEydh4X01DQUlKS0tIWfPW1NXW7vTc4eTf28jMwMhZX0pYTD5BPl9aWFZR3Pbc\n9V3u7tPX29bPx9R63+Pg38PE5WtOS1tLPj8/S0FBRG3L2uLQs62/vbavuL+9zbS7zExGbUIs\nJzI9Oi8yPExOQz9lbmjlxcTM1c/Y/fxf1cPO2epqz8nNyMDJzMnR6l9OP01tZ+1uY8O/wNdV\nQz5FRjs/TmTWXnnQurvZy8jZTT5W4/hMX9DH7lU+PUE+RE7VwczY7llTaMPAxsfM1FxiVtbM\nytHa2NfUZFZZTEpPTEdHSEL928zDyuBbX1VeXmpg19Le73hPP0lQaOjq2cfHyL/E12Jje9TO\nyMTFv8rLyPtOQkg6PUI8P0RCXtfs2+TS9WlXce7H3WzTzN7c7W/OzU9O2c/N2un521dYVEhW\nT0JDVN3d4NW+x3Rk99LM9lDXz3xOTvPO9k362OtWffRTW0NMaV5cSftjW1Paw8TKV8m5uurI\nv8vTSU/tUDg2RWVWPknh3lRk8eT7ce3L0c7MxN78WN2+1kVKXt7xTd3n31pYVFzq+9ps4fv7\nbOP4aVxXb2FqYl1RY/rb5cnJzs3V1VFPdcntRkzyam1VUPh9Q03hztLKyM3lf21mVEdj7FBc\nzt3eTUxU005O2+r1XtzKynfNvMreXWRc3VBa2ctoR0JNZkJC7c35fsjJ1GxH91VCSlL8zefS\ntr7XzsPRz9vI0HxSY3VPSD9RS0ZGTVxlUktdcEhAWGJR/dy8xePNu8vrbXPs51PNz+XTzsO+\nyNzAwuhSVlRjXt29tby/ydZDLyssLionKTE5RV7ueu7daNjE0NzKv8LLw66kn5udp6i/XCsp\nJCwpNH6+t72zvlozLCwnJiYyO0Tr0MTp61VvPjxnzcrGtLa8zL/E91JJPk1MyK2lo5ycp7Jb\nPSkfHiw6Xbyzqam1z1EsIh8gJi00Wsq9vsr3QzQsLTA9X76trK6trMdfV0EvLv+fl5mYlZev\nPiQhGRUZLWC7raGdpr46MSYdGx8qPGm6q67CaUk0KCImNk5du6qorq6ttkk0Pjw3Kfedkpea\nlJWoNCUmGxQXLezGtaObo8A2MiIYFh4xPF6wn6W+VEQzIBwhLTlXtKKfqa2psE4tNDIqJ16a\nkZSXj4+kOyMnGRAPIT1fuJ+YnKxpRSUTEBcjLVGsnJuoss03HxwcHiQyvqWfn6KeqMXuOSIc\nISjIl46Qj4yQpDAfGhALDh0sX6uZlZmozkIgFhQaIjHTq56dobHkKhwYFxofNs+qnpyanJ+2\nPzUnHRgrm42Vl4qIk/crKhcKBxAfKDWnkZGdr7VVHQ8QJDkfOaSWpL+3sUEXFRokHSB0n52i\nm5SbtVZKKxsfqpKZpJOKjqw3PSkWCgwWJCQtsZqap66wyicYGDBFJi+0nrPVyrFnJh4fLSwr\nN7qqpqWfo7TUPisnx5ibqaKQjZmyZk8uHA8OFyQpJj6vpKazvcrXRy8yMysoLjs3QE9wPjxO\nWvpV3Ma9t7m6ra3fOz1Vr52ao6WYk5muzD80JBkSERokKSxJuauqr7zExd7C2TErOdNAJiUx\nSj8xMl+8u+j3w7a7x8W+x1g5L8yZlaWsm4+Sosc/RzwiEg8ZJyQfJkO3q6zH0bm2r8cyLT/i\nMR8lMjkwMEfHs7G/u7CyuLy5u8pPOTU8yKGdp6aakZeoxF9FMB0UEhgfHyEtTLyvr7rDuK2q\ns0Q1Rko3KSgtNERGOkjVuLe+t66ur7zgeEkwJCa+m6G3pZSOlaW5cEE0Gw8SHSonJDXMsKy7\nVXW/t7rlODZMZz4pKTQ3Njo6ULqur7Gvqqq5y+1NNCspKkOkmaWrmY+TosfiUC4fFhIZKCkk\nLH62vtndzb2xsd5J2sdZLycrMDM3SU/Sr6y0sq64vVJBOy4vLS5L0bqjnqSlnJedrb+6yDsp\nJiUjJignKTI/PDU+6r+7vMLe3+tDMTFCSUE+cLrEs7e4qsfMTEZGMzs6NjU+Qua0qqaoop2c\nnqSqsMpMNi0qJSAfJCksLS4+ctfJy83deVNJR0BFaVlCYq/C0bDFT/+9US1f5z8zNlg8S6um\nta+dmZ2goqWruUktKSsnHR0mLi0vOkne0ltkz85MOkhNTUs+z9kzv9k7uUVOsUi2xTa4zzVH\nND6uq62uopeXnailqL03Ix8iHhscICs0O0/Asa+1ta605T41MisjJCkyOz1K3LPEvq+3q9Hq\nekBKKzipm5+om5KSmq63r1UgGBkcGhgcKE9nY76on6m7t7XaLyUoKB4bHio0OVS6q6ywrau4\nxtJEMy8rvZOWp5iNjJetd784FQsPGBcXHEuroqygl5uuz09DLRkVHSQfHyxF/k9LwK+6z7ux\nutJq2Fc0S5uMlZyRi4+nRD4/GAoKExkaHUyel5ydlZetRCwkHBMPGCMkJ0i6tr/bvr1ALj7g\nSEjAqKnAz56Ji5yZjo+lNiIuHAwJEhwcHzanmp6pnZquPSkqJh4YHjY9Nviyt9BQY3M3KC0+\nPDlRvrG+/aeOjZmZj46ZyTRCLhUOERocHSXfpaWsqJ6lzTYrKiMbGiQuNULDsbO+yLy+Vzs9\nRj04PEpIP1+nl5abl5CQmqy+yEEeFhYbHBsdLdW4uraqpazOQzguJR4eJS0uPeW8tbKura+8\n0ubvW1FZYOr3bb2srbS2q6inq6+0vNBNPDIuLS4vNTQ0P0s/PD8+P0I/RlZe38rGx8rFwsx2\nTEhLRUVd39LOx8fCzG/g2t506Mm6srOysbS6vcLMYkM+P0JBQURGR0E7Nzk6O0A/PkRTbfDp\n4tvS7Wfjz9Pa0s3DxN3XwcPX39fMydLbzsXHz9fn9XZXV2Jec9HM4+zyXlJENzU2Ly4xOT5J\natzMxMO+ub3IztPOxsbNxr3Ay8/X1M/d6959VFlcVExDPDw/QUZTduDNyMTBzO3tYEg9Oz1I\nWFJPY3fx2dTe39vdfGx50r24t7m7u7u/0OZ9WE9LSkZFQz4+QUBCSE9cWVZne/vk19XP0uHz\n5eTe2ODk5+tgTlNaW2JidN3QzMjCwsnO19jY39nW1NLV3O1yUkxNRT06OTg5PktRW/TXzczK\nwby9v8ba72lPRkVKSkxNW/Z+W3DNxsbHwry7vsLIzdXZ52FbWFNUS0VCPDs4Nzc3PUlY+M7D\nvbSysrW6vsnkT0M+PT9Rwy1UZyrKMefNTsLCvLu1tri7vsvSz9tiR0VJSVdVRj06PUdE+L4/\nQL+hrU9IOTkjIj9UPkS9qqixvra38EBIZ0tHQXW8yc/Bt7jBy8rIfUU+S1BMRVJeTjw8S0Q+\nPkpMQ1fj4tzPz8vL0b/G19jDvc3Z2svG3Pr52+VrW2RrW1ptaV9wXVlKQ0lJTUpVXFVY9+Jj\nVk9W6nhPU01c7GBR9tTKzNfi2N72w7azr6upqrC8v9NeRkNFT2f52txUOi0oJB8dHSAmLDZM\n7eDIuLO+ysu50UNtxKaTk5ePj5aobzMsGRMbKCk0xqeeqrm4biUbGBgZGiE0R0zYws9NOTlD\nQErWt6qmqKyrrZ2RmqSanKdiND81GhotNSw9u6uvY9S+PyUqKiYiJj1nP07FWDIyOTMqLErO\n6c2srbSxvMvQppyfn5SWobfBxC0eIS4mJznDwfXhvt4xLTcuJS09UVDyv81BPD0tJScuMjZW\nubi4rK2+Xzz0pqKqmZCYnaSovC8mPSwgL31YT+bKbS8vNiceJiwsMk7bcFrLzzovNzQwPWbM\nu7avrbLIX0NNs6WpnpOan6CqxDkvOywgMlY/RMzZWktOPComKigkLDg4RdrbTD9AOTM5Rkz2\nv7/BtLC9xNG4qqujmZienp+txFFCNSssNC8zT1Q/SE08LiwsKCUoKysxQEpZ4+JcU+1dRmDM\nzd3OxcfOxsvGraajmpicn5+ruNRNOC8tLi0wQ0tBU1k+NzUuKyoqKy4zNjhEXVRQa1ZHSF1f\n7Oxuz9fCvcbBtqmlnpuanZ6gqrfPUT83Ly0vMTc5Ozw8PDw6MC0rKiksLzU9SU5RVU5SX1tb\nWfnb8M7GwLm1tK+tq6KfoKGgoqessL9iPjMtKSorLS4zOjo9QjgyLissLS0vOUJKWmnjzdLd\n1M7NzNff2dzcy8rTx7mtpqKhn56fpKivwF5BNi4tLzM1NTY2Nzo6NjQyMC4tKiouMzc7PkJN\naNrJwr6+v8PHx8fJxsK5raOem5qbnaGmrLbaPy8rKCYoKCktMDEzNTM2Oz04NC8tLi8xOD9L\nbdnVxru3usHJ0M3Mx8TFwL+5q6Shn52en6OorrrSSDMrJyUlJyouNDY4NjIwMjAtLCsrLTM7\nSe/RzMK+wMPDwMTJzMzHv7u7vsPHuaumo5+dnqGkrLnLcD4uKikoKCotLzAxMjAuLC0tLi8v\nLjE5PklXaODO09LKwsG8uLm6u7ewsrm6tqyinZ2cnJ+lrbvQTzYsJiEhIiIlKCwwNTc2MzQ0\nMDAzNDU4PkdUavDRwby6t7m8wMTCwcG9urSztLKuqKKgn5+ipKixzEg1KyUgHh0fIiYsMjpB\nSEdBPDs8Ozg0NDhBUvLPw767u7/ExcXHysfBvriysbO0t7Wuqaelo6Snq7PAcTwuJyIfHh8i\nJiouNzxBSkhEPzk1MS8xNz9Q68/Bt6+traytra+wsrm9vsLJzszLz8/Gvri0r66xuMDXX0Mz\nKygnJicqLTY/S09OTEhHRD01MjM1PfK9vuZW0rCprLnJy7uxsrnCxb29yOZ07dS+tbKwsLCy\nt7/vPi8qKCcnKCsvOUJPXEw/Pj03MC4vNTxGYt/Muq6rrK6urayssbe7vb7G221ZUE1HSU9l\nzr66ur3AxdlWPjMtKyoqLC83R/fU1tzfZ0o+Oj0/SFZ+6d/HwcG/vbizra+0t7y9xszqTkVA\nQUJFRkxq3c3IyMXDwMPK2mpVRD07Nzk7Ozo9RU9qX135Y2T3cnXgedjGw8LDvsDE3HPr2M/s\nY1NSUm3sW09TaGZk69fSzsfCv769v8jSWUhHR0Y9O0FKUldWTmD4ZGf63eHTy8znWmffdFhb\nZu7O4GpiWVlRQT5FZGn5X03eyr2+x8i/u7u+xsnJzM7a5/NZT1FSTVJIQkdASkZKS0lFV+l7\n9XzVzdxh+9zaZ2RfT1Bf9ld2+N7L19LMzMXAzsnOz+T24Vfbz9rT1dxx0uxVRktTT0xAOz48\nTmpSX2Phy8pa2M3i0Otby8bP20xOWVVddGBTYtfEzuBxy7zP0c/Lwdfr01xXZGfdWUVXREdN\nRWJhR09TPlZNT25Z3dLUzcnD1OxcZefe1vzYx8vt4dfZ/H7W23FWVsXF1HDqxdRgT1pLZ01S\nUEXlTFtCWk1ITT9hTEx8zt7ZxstscFDNxWxn1sLJv93NvL/F6U5Z5s/qYWdm3dtxTUNI+VJI\nR0xPVW/gUVjm2u5IP05+3mBCQ+jGzVRo0r/CztbJvb3F315o1cbP+FlWdlpPT13q8nXmZGto\nZGpgUkZLVvHseN/9+HpZT0hMU1tTTURLedhlWO/Eu8bLysC4ub/Iw8fK2n1XW0tESUpCQ05Y\nVU1NTkxTZ996Yd7Oy9fl59zU3OlSVVVRTEA7P1zk2NbTysjJx8PJyMfLztnO6vn38mlfTF5z\neWdNR0ZOTU5HTFNfalp61M7b4e7y4GlZWGFZUU9ZfdXQ29DUw7u+v8C/v8THydLhXE9QRj49\nQ0xJRUBBSFJdTURHS0NCQkpcVU5g4tLDvr+7vb7Cv77EytDRzLyzraywt73B2ks5MjAzNDY3\nNztAQz04MzQ0MS8uLzlIWGRryr28vru4tK+wuL26rqKem5qeoKau2DQjHRoZHB8oM2C8r66v\nutdKMyomIyQnLDI9S19v7M/Tz8O/v8PCvba4ur7R18ernpmYm52fn6vmKx0ZGRwdHyU03rav\nsra8ykctJCAhJSgtNUj6zMfKxMW/wb/ExcjBt8D9SEFMvp+Xl5mbmpuftzIfGRkaGxsfL9yu\nqKqtrrXaMSEcHiAlKC07VNHR417jz83K3dfJvLm8xtttVL2flJCTlpqborgtGhQUGBodIzi8\npqCmrrzFXy8eFxccJi45Tsi5tshPR1hhWFRX28S1r7C2wv9zqpKMjpednZ2oLxUNDhUbHh8v\nuJ2an7lMOzcwJh8eJTrVvsPCyc5FKyMlLDI8ZLuxrqywtr/+Sl+fjIiMlZydod0ZCwoOGiYu\nPLSblJmvNR8eHRseIS5mt62xtn1ILSIcHCIrRMGnnp6lprDN8jcqJ6CFg4iWnJ2lSgwFAw4f\nMFXcm4+OnD0aExcZFhknxaCepLe64DIeFRYcL0zMrJuWnLJ9Qjo7KiM0kICAhZWhqLoaBgAF\nEza+rZ+TjpjaGQ4NDxMcvZqTlp+sai8YEhAXJDFp3a6inJ+wOCQrO0cuLlyNgICAl1O0TRcA\nAAUgopyen5CNmygMBwoVHCA+mY2RoUEpJiAYFBko3bi4t6+nprY6HyZDv8BmQ66FgICMvc20\nSA8AAQ5uoam7pZKVwhUJCxQfICyjjoyY3CgkIRgTFR9Hxr6/r6KepUsqKThiNjxosJmCgICR\ntLnsHgcABhfKqayklI+cNxMNDxUbIEKil5mtPC0tJBsZHCU0SsCqoqCfp94wLDtJYNTHxpWA\ngIWkZb09EQIACy+usa2YjZCvGw0NDxMYKrCXlZ67RjQlGxgZHCU6y6qenJ2irstDNjYzNULD\nkoCAh52ppjgOAAIMHzI6r5SLkq8lGBUQDhIlvZycoqyx0CwcGBscHydLqpyanJ+uzj81Nysr\nL8OOgICMmZeaLwoABQ8bGh+uj4yZtj0xHw8NEh9OtaqmoKK4NSIhIB0bHz2uoqGcmqC/Pj9F\nLR8m44yAg4+Ti5IsCQYMDg0LGa2Sl6Cfn6wpExEXGhskRqmeoKiyxzsjHBweJTfIo52dpKmr\ns+o0Ky/amYiLk5GKkMIcFhUPCgkQJ1vjuJ+cpcNXST8lGh8tNS8/0cFRODdITjctPb+sra+s\npaessK2283a4pJqfpJ6ZnsE+OjQhGBccHh0eJzhLXsu5uMHIyfw9NTYvKCQrR9PZ57+ro6Wo\nq7C80PfoaU9XxLKztrSvr7zuQjs8Ozs+SO/HxfFIPTs2LisuO05m68e5tcFROjk+OzMyN07K\nu7Wxs7zDwcbTdOS9r66wsK6yvvU5KykrLTI+W8u8vctlRDo2NTU5QGHHtq+vuc5mTkY9Oz5F\nXc28trO0u8bZUT9AT/fQxr25t7zUUj4yKyotNUFb0r22uMhnRD8/Pj9Wy7u2s6+xv+5LPzw2\nMzU+YsW9vb+9vMPbZVhRaNXIv7y5vMh7RTYuLC83Oz5SzrzE701EREQ9O03Tvbmyr7K6ymRN\nR0RJWnPtxry/xMbO03RLPz5DSmTTv7zDy9thPzMyNz5ARl7Rwr/NeExHRkVLXdnFurSzu8LZ\nTDw4Oz4/SH7Atre5ury/zF1EQD9ATXLTxr68uLzdSjs3NDAzO0piaXdfUE5PTEpV3cm/uri4\nt7nJ/GVp9N5US1/UxMPHxc5tVUxBPD5DS0hO98rAwcXbWVNPQz9Fdd996fZnZ/7PrU4uazZu\nejzMuX/Ft862tsPTXubnXEhMVF/YxMMxR8s6Rz80c9JEvcdQyVlH5X9Y2+xf2Vvvz0944OLN\nyrfH1svW/lJIXsbef9FH6PxNaUtHQFNUUWhaycjPzurQ2s7ZWU9jellpW1pQU15HRUdYX1Zq\n08K9tL28v8nKcFhKXlxaZlbW0fj832Bk5E5HSkdSVv7P1+3EzV1nRD5FVVppWXJ6X9lcTVnx\nZe/Iw7+/x77YZXlYS1VcRkpFT+PPw7e5t7S9ubfO1cfRWkVFOz44NDU4OzdESFxhcGvaRGPl\nOfvvVtPVxcLFzMbJyczZ6uXe2fLQ3/fZ+NLLz+rQ1MHeUcPP9V9HP05OOjo9Z0k/UUhDRVxF\nPkVO3M27wsbIubzIvM3XvL7NwsLP2sDI4nNo9FE/Rk1LT0c8Tkg1Ly4xLS02OTlI9dFxyrbM\n0sjFucTLu7eopqSenZ6fp7nMSDc1LCsvNztANUguJCkgHx8hHicwOD9Vx76+xr6908i5vLSn\noJqXkZKam56u5TorKCUnLDE/SVhnPS8tJx0aGx0gJS49QFnk3s/HydO+xb+1uLm8s7Son6GX\nl5+dobC/QzEuKCcvLTNaW9rPXUo9LiYjHyEkKC4yOVhRPVNSSFtKZujLvb6+u6uhnpiUl5ue\nn6zNQjgvLC0qLT4cno8VERuU5RM1IxzIux8luzYl0sgmMe9vQbm/SM2vr8ennJuXlZufnqXJ\nXUo4KywuKTRITDxETDgvMC0qKiwuMDxBQ0BJRjo6O0lObsbCwbqws7+7rKWgn5yfoaivtsfz\nRDYuMUUwKDJX0Us5MS8tMi0pLDE1OEdPVGLo+UZJX1lFT9/ZzcC5uLKooJ+fn5+lq62zvNdg\nRjcsLzU2PT0/Pzw0LzAsKikiJCgtND5HTsu3tr/H2763y1XqycrHs6afnZydoaKpsLz/RzUr\nKi81ODA0OTo1NDgyMjozLTE0LjxHPz5XXO7nyu1vz+nV2OLuycC5rp+enZydnqGrtc5YRzos\nJjA4OzY5P0E7Ni8sLygoKystNj5GSU1Z3M/pZ8q3uLi3vLy7w2nUtq2no52doqSqr8hbSTUr\nKCUsMz01P1de3j00Li0oJyYlLD9BZcjJ0c7Fv7+zv9nIv7/i4c26t7Gro6KjoJ+msbva5Dou\nKykoLTM8PTxLQEE4MSYpKyYsKjE+WGDZ1MjHv8TLwrK6y766vLi1uMC+rKuprqWoqKmwv9NL\nMDwrJCUtNi8uNTQ/PjIuKzArKiw0Lzrn58q7tbWqq6uyuK66xbmxsb21tbu8vbi5vW5kyutf\nXUg/NCktLy4tKDZTVUp01F3x8Do3S1o+S29eyM3oYsWywtmyw72wxsK1s8fG399iU9G81MLf\n/bvOP07bSTgvNT1UTD07y7nTPktMPtZiPOnJPFxOSlbO0s7T18+5wdjA1l7S4UpWSXVCUdRu\nxba2tbfsT133aUA6QUhcSkL0u7HHzcvA0MpATNvGbj9USEA/LC42OD8+PFLXxuLMu7+9zc3J\nubnKvb24vdbJXURMP2DfXHzr0Nj3/N7OWklNPTM9PkNgW+jN2ltUY9bSUl9srM8fxLqhNFFa\nx8Xa8/O//0Vw0OZQe8fhzNa+0+v8QWNWSTk/+E5GP0NHQkFBTNpoWVi+ve64ubvDzdXLz9fP\n/l+/3FJlfOJxXOzt3tjm7dzrSO5NOlVPSUZWOTlXWG9TzmnK0eXHYt1uUd/jTFnNWWHG13je\nzdX32dnZ1sa/zcS4vtfJzetJSUdJPT89PVtGO0JASvxUU+fX5Wrqycfm79XbXvfe48bo2sDd\nzMjAxsjSz9b1U03i11/V19vtRUxNVD88OVFfRGpi4XNO49BbZtlwc1xOTE1dWkxPX1RN1MfK\nyr60tb27trTMzdPMwcn6T2F6Z0VDOjw1OkZBPU9HTPf5T0lfVOdfT0xK+tfWzs7R0MjOyczT\n2Mi+xNHN2cnO3NXN0cjP91pt3lpaRUM/NkM9MzpBT1M+U0dKylRNcMG2vr7JvbjJv+J33nzl\nddhP5M/MzNrRaVBOb/9rzVpLSn/4VnNVT0Z5Yll6T05LQlRWTFZL173O23LuzsHKdkrTx+ps\nXGTWydTyasy7zl7tzdTcSUXd1Mjd885aW+NqQkA5PTtFREQ/TM3Q2czDw73Fw0RUW+LqXWfa\ny8q93EnY3/d4V0lWatTI/VH0zL/OTVlc6upeSUtvXeBMQExIXedSRU5R3cJw1cnFvb65yf7O\nvu1OPU1CQXtXy8xZZOvBv9NRYdPwSDw+XmFMO0hk61hH8WDP6evm5szjyNrzxcvCysi/y2Bz\nXGbYPjw9XsvXWUnd7+ddXeLuxs1vT2Pj/0fo605qUu9j3N/UPU/pWdpETGpU1kJx39rH1L/L\n4N/UzWnhxlloTdixvLe5urtMKSQrKC1BP9ytvLm8x7zH01xuy/j5SkBk51c8UmPrX01jYchv\n0tPCwctdWeff1eJVeON230f00mnO0Xf/TkxKaGpNTmDoYF1Oc1zk7OvsXmHJ0tTGx9BNedTP\n7D7uWfPNZMzV+t7ox99s7E9oeWtU18PXZUfqxNtHRE5vRj8/Qj1PTU1XRuu+yMfY58rJ0snG\nyL7FvcHhW0/o1eTN0nNoTkxZTUdPS0hZS0U9S01dbWHj2uLl9djNY9Z92vtRzuzT5VBPVs/C\nwc/IvsHLZOHi0M9idUtc4WBEOkJNVVJPSkk/X3RsZE7Zxs/TaNnZxrfBts/T1e9tSe1q29Ra\n6MzbXz84PURqS0AzNjg8PEHsxMTdYkhL5t7cY82uqayzr6ifnJ+uzFVKQjIpL1HEw0cuKCYj\nIR4eJC4yLzEyNz9PXOjMyL21uLm3rZyIgIOUOyovOCAVFSCunZ/IPUtLMxoRFCVx3TYnKjQ2\nJhweLd/E1OHSt6mhq750UmrOmoGAhJ8fJC89HREWLZuZoVEuLCklGxUaMb2+OysmNSwlHyE0\nT8tQccavqLT+bMi3uM7Dn4GAg6wRHzTUHg4WNpKUpSwfLi8nFhYsrqC5KR8jMi0eHCRY0Uow\nNcGrr9BV06+prmpB2ZGAgI0mGD2/ShMQIKeSn1wnNkQnFQ4azp6kQSYpPjohHCNfvNAwLGm3\nvTwnOrSkrWpNRNTMlICAjT0n78U/FhcrpJan4DI8OR4RDhr4ra7Uxs83JxwhJjpKRD825szR\nWj1s2lV31Ke3ZytNi4CAlyIks7gsDRVHmJS8RjDXNhYMDSK9qq+orvEkGRkfPzzkSVXZ68FO\nOzBAtqy82sqvsz0jM4yAgJkXJKu7IQkYv5GXSTI8tjESDRRMqK5V2bbXKxYdKrCzVDMoYE9b\nNjbova3NP+jFskYoLqqHgIOjIy6vTBkOHqaYnz491c4qFRQeUby/ur/LNyciIi4xQzk5RV/Z\nWk47PEdfzlt/uaulvD4s0YeAhLQWW561GgopqZetJTe/ricODRc44TNYtpugLRsWXL3LNiVd\nTMc+Mjk8e9zcxritrelHNDW9hYCIsBupolcQCjazm0Eow6ewGw0SIko0JWuhlKsgHCurzCod\nKddKOy/gvHFaUtO628HNwsxCLiWlgICLOx+fqy0KD8mooSlBpZ5bEA0UJSseKKmXmaQ9KScq\nNh4uLsPDQ8rcuUMvQFrMP0TKs7F4Qju1g4CM5B2XnzwMDaysox4voJ/yDw8ZKSUcJ6+anU0s\nOsRZIyI4vt4zK1K01Tg2zbrIPla7ur3Byjs9rIaAjrMxnLAcDA+308YjxJufbhcYGyEbGjiq\nnZquQSsuQisvJjMxMl3PrGtAQfnbOTlJvq+sprF9Sq6FgJdAPZOrHgwfqUUtGq2cryMXJiIa\nEx7CoqCyXNNpTyslLTU/LknHusFYTPvlNjE4xqmvsa2zSj6lgYelzZ+OTBQM4j8dGCyWodsd\nNzgcDg8uzXhEopStLx9tTyEcOq99NzmkqE4tdLDSQkawr8m5tMVNxIiDnruqklwSDlvRGhkv\nl6tFKL1yGQ8XTjssQ6mj7S8+xzghJ0RjLzLGoa9ou6SmSjdpq7HGusLQ9j2nhpDDqJyeIhMs\nwhcSIKyoPEOppSUYGSkjGiLLn65QvKi6JSNCTCQl36at37CepUFCy7q/dsKswVn97pyJn6+e\npb4dHDYhDh4/vkFKrZ9CHiw3JRskSrtmpZ6xrb1iMyEjNSw176+trrC0v+5ORjVBW0lCUfu2\njoynoJeebyAvQxgZQsFMPbCfwig5Oh4XHiwxJT6qqbu6uM06MTg1LUm5ubesoqrKdN07Jilf\n5j5EttWwlZygmp+mzT1WLx8sPzQzWrezytBIJh0jJiEjNszKT8+vwU5ISjsyOm/KurGuv8G9\n+ld/e2ds4zk1SquYo5yRm6m210goIiooJ0PAwcPF0jsrJyUgISlDUDvBs8DP6NFQNzMyOT9f\ndOm1r7fDwbZPS+MuN1PZoJqdlJGaoKe8RykjIx8eJTA6XNbYaEI7NCkoLSwxPkvxx8G5v91e\nPzg3LzhZwr7BsLi2sb7d4ls+WtSlnKWXlqChpblGLywlHR4oKzFN9VhPSj86LCkqKTE+PU/L\nt7O/0dNZXXNHP2fOxMLhy7vU7mjkPzPRwaumn5eanp2outROMCwqKicpMTw/Rkk6NzksJSgp\nLC8778i/uL2/v9Ja8VhO6mDt0eTJvbjExr9GPlbNqcGemKWdnqu24+8/KCYqIi1EP01c/Uw+\nOS4kJyomLDtMysPJxMLCb0psTkr22srHw7Ozr7O2x+7pQGS7vaynqKSlp6u4zkstKiglKi83\nQEZYUEhNPi0uLCgtLztX2bO5y8fO0dNt99/8dmPWx8a3ur3M1Gxo8cOvvqajpqGnp6/E4z0s\nKigoLSwzNDo9NzQ1Myw2Ly9DQP3h0rvAtLC8vb7Ev3pp2Flp1dLJyu5MSTw5SWu9tamioqCi\npqu401c6Mi4pKS44Oj1BRUA6MSsvKis1NkVr1L+9t6+zvb/L3O5qfWVp0Mrh18zV2NNgVs7D\nvq+qqaqpp628y109NC4uMDE0NDk9NjI4Ni4wLzM9RFZ5yrm6vLW0ur3EzGtO3dhp2+zLy+XR\nSkJCPkjcx7CqrKKnrq+5wWpAODk0NTs5OTk6PUM7NzEyOzY2QFRVbsm/ubm5uL7K19727v76\n5tbR1dtfTUlJSERN88/AurWxsLOyuL7CztThaFJLRkZKQT05OTw6OT1DREZPUFRqcf1pWFxc\nXPbh4+TtalhXU1ZRTVBPXfPLvLKuraqnpqeorK+0u+JIPjo3NTMwMDAxMS8wMC8vNDg9TF3z\n1cnJysjEv8XP1tXZ3nZWUk9RXv7w3tHHxL+7t7CsrK6urq+yvNVbRjw8OzY0NTc0MTIxMTAv\nMjg+T/3c0dvYzMbJzMjEx9Hf3u5jWlVSSktXWWRr/Na/s62ppaOkp62yusnnUkE3MS8uLi4t\nLSssLjI1Oj9LXfjm2szDvsHL1MvIzcvXe2pj9+xUTF779PLv3My/urWwsK+trq+zur/L5lJF\nPzs0LywrKysrLS82Pktv0MvLysnO19/dzs/Q1NLOzNHkZVhUXE9KUWXv6M/Ev7u3sbG1tba2\nt7q+yN9hTz85MzEvLi8yNzxESkdMW3z4/e5qXF1VTlRjal5fYGz039zUz83Kw8K/u7u6vLu2\ntbS1urq7xtLl7mtLPDQwLy4tLzU6PEBMV15bWXn5Xk9LUFplb/PdzsrGx8zMx8XM2u/r5tfW\n2c7KxsC8ubi4uLq9wc/Z31hBOTY0MzI1Nzk9Pz4+P0NKT09MV2ZvbO3SysjLxsjLx8nKzNfY\nzszIwcHExcPExcTFxcXHyMzLy+BlT0I7NjExMzMxMTU4PEVQbOrq4drl49fOysfGw729vsDF\nwMLRZVNSWm1hXnHez83W39DKztfX09PY393jYk5MRj88Nzc4OTo+S13/2tjV1tDKx8fEwMPH\nxs7d7O3saV1bWl9oYFhVW2FsfW5y79/Uz9Lb2tbU0Nt88dbV5HRWTUhEPz5ARk1ZXFxdc9rU\n1tfU0Nnj/eHOycrP1tzo5Nzf/VxcXl5WU1teXFz43M3Nzs3Z6eDnenJgc21OSUtTTUpKUF9e\na3zg1dnX2d3c5dXa7e526uJ9ZGXt6OJ5cGRdZnt2dePW1dna3uTaztDUzs3L0/RdUUY/Pzw9\nQU5eVk9dfvlvaXrp3tvYzMfMy8nM2fr57N/1XVVUUVJf+u3q3dbT1+jj3Nnj+OnP0Nvd7HNh\nVlVPR0dJQz89P0tRW3zd0svIwsLJz8/Pysvd3dnb519RVV5bXFpYanJpaW1sbfl4evXt5uTa\n0trg297f/m5tbG1cV1tdX1hNTU5QTVJq3tTX0s/Kzd7n1uBz6trbcVlbWWNqaXLn7HXt6fR8\ndG5249bZ6+ve3tvtenlnXFBNS0hMWmRhX/ve3djX29rf6uzx9OTh8fd5Y/Pv8XlzbmllX1xc\nZmh55urr5NrT3t/d3tzg8n1iWllgY1106O32a2Fx7NzS6mVqa2zy621jaXn+bnNzfvPo7Gpb\naHRYTUxPUlVUWmRq3c3MzcrBvLq7vbu8vsPM7m1gTUU/PTw7Ojo8P0VKTFJdbe/Yys3T4nf+\n/HZnXFtfbOfh3M/MxcLGyMnJzs/Y3NbOys7daFxUS0hDQEhRVlhWW3JuYFVZdu97dnF57eff\n+Hr+8Pzu7P7r5+9sXFldXm1oaWJk9Ofh4NbJxcTRWmG7qc4+4LxmPT5jQTg5Y2BCS2ZQTW9a\nSl3M2urT3PnPvsfJxs3e4ONsWXbj8HZmWlx65eT35OD2aGhaTlZWVVdZWlVfblxe993P0918\n/9/X1uHf39XO1dz1bGNXT1VeX3Xv6fFz7tnc6Orl3+/4XlJVWV1eWltt7Of1/fT73tzwb2Jo\nYlhgYVhj8dzT2drU1Nja2tXPzM3efHz992pYUE1TV01IS1Zm9ef28uLf4+Hm3tva3GpeV1pf\nZHz+59XS2/f75vbwdF5iZ352beza1NHPzdTe71xPS0lQXVtQUHDNa0FV1OZj6MvJ293Mxs7e\n3HFUXl9PSldfbuDtamVyaVhWXV//5vdsfenq3NPUz8vM0eTvcVxYXV9sdGZjZnFsanh8ZVdP\nU3bd2N7i73/x5uR1Xl956ufo7trU3Otra1tldWBdWFxkYmR269/g9PTo5NfOzdPX2djqaVdT\nYnFuZWvz7e5vVU1NWXx7bmBeZVxbV1v04+58fuPY1dPW2NbO0tvd4OXl3NfV4XltbmZZUEtO\nV1peW1pXV1dOUvje29rY2+Li3uTx4uvu5eLd29bhZlpcXWFeXV1dX/bd3Nzc2+VtbWZZXV5d\nX2R1697Xz83Q3d70Z15WV1lbXGLw3Nra3N/v3tPc+FpPTk9OT13728zIzdLW3Od3XlBOVF1Y\nV2bj1tbZ5/b7XlhTTk9Xb/d87uTYzdDY29PS09Hf6fZraltRVGbg2t/0bGRdVFZdVlRWWFhX\naujf3OXh2tbffmJe/efh3uzo8Xb39fnd2tji6/5rY2FnX1pYZXteWFxy7fB4Z23o2NDW6PP2\ncl9WUVhcW2N849bOzc7O2+r7bWJZYGn9e1xaW2F27/Pt19XY2+9pY3XwfW90enxmbPLy/25r\nZXRsWVFSaHzw3NPY43p2/e7c0M/V3v3s5+n47eH5ZE5LTE9YW1dbbdzQ0M/Y19nZ3Pbs7+1s\nUVNZY25fV1FacuPa7npu9d37YXbc1tXQ1NbRzM/nZWZmXVlWU1dqdmtaVldVRjHcpdg2b7fM\nYG3gZk1RXG1WT2rm7c/J/WzR0d7U1N3Wy93u52pPR0lNTk9ZX1xlW1Fi6NrSz+V55OLucXXb\n33ZuY2by0s3S3OTl+GVdVlFUW37t7+zo53xydP/i3N/b6uztfXdpV0xLSktPUVti8NTPzczK\nzdrodXHx3+1gVVdjb/Lj3+DdzsvP3u70aFpVUVpubWtRS1Z66vD67+Xn8GxmaOjY4ubp6+jk\n4O1ybGFaVlhZVltjaWBx6d3V3Obq2M7Oz9LX4fDp7G5rcV1UUU5NSlNdVFNdc+HPysrNzdnu\n/nn37vVpYlxi8ftxY1tmbmFfZ3H++vN5Znbz7Ovu9+3p6Otqa+7f6m/u2dnY3fRrXmFdZnBw\n/ejh8X7ueXP76ujp5+5iWE9VWmZ5eHdpe+fg3Nrd6evqdWlaWWPx7XJ57e78ZWB8+ebh4eHh\n29vsc37o8fp7XVtm7O9nU1Vaae36/urf3uFsYP/n2tvk3dba4vVnXV1bY1lPV1xfZfLs6Nbb\n6PdaUVZeZWtqbP7b087S1M7Q5Xd7evn5dmpibvt6ZmRcYW38elVUYm5vd3Pp1crK09vj5uj8\nZVhUU1xaUVjx29Ta6X1lYWNrZGd56N7Y1Nvi3O5sYFxtbWFldGtpe+Li3tzj2dXc3eXr7WhZ\nUVlbWmVVWHDu4etmXWluee1+/uPj39fX3+Ti4XReaOXd5ujs5dze6nhv+vDu8nF4/XJmUEU/\nQ0pMTU5h7d7a0M/TzszP1tTUz8/c/l5k/t99Zm1lbXzucWhpXlxUWGRfX/19bXLjzcza+Gpd\nZHl5cWluZ1NQU1f63N5uX/Td2Nrr5dbZ2+x+d2lhX3By3dPV2en0/evk/VpPUVphY2v34+v7\ncHZkZf1mWVNfdHn3/35mYvvk2dTS0dPd7fjf2NXS2eR+cmlbTUtMUGX7fWZt9HJtYl12ce3s\n+Hv84uHqbGdtb2tv+O3c3eXg3tzTzNTnZFldbuzu+mlu6fhbU1FPUVhTWWpuefDw39TS3eX+\nbenl3+hpXmnt4t/s5tnP1+9rXnRoXFhWY/7c3Nvc4uL5/F9STU1NTlJk2M3KzdrmbXloW1hl\na3Zua9/TzM3Q2f1xbnNqY253al9iY/3h3ejn5nxqXl5UU1BXaGtvXWd67tzZ0NTi3OR6dWN4\n39Xc6tze4e3n7vl3YmBSUFdYXGJ4+ufP0OJrZ/ne2+Tt7HtwYFBKTV5p//797eHb3u7/29Xa\n6HNw/+Xs8X1bZH1+ZU5VcOfpb2Be9+nd3ere2tnh+ltYX15ma/ff3dzb7G546uPsfV5n7eff\n7Oji2d/2XVFaXV9bVlZOTk9QWGb89Ovq19DOy87O0dLMz9fo7ubX1/J5WU9PS0tKVl5vck9O\nWl9ofezg3dTPzMvNzNHWbVNPTU9TXHz/efr/fXX28ODZ3+Hp3tzc5HZpZHF6Y15fY2xsYml4\nb2ZdYGRk/NfT2dvc3ujt5ubi4eXzZmz6dWZUTlZx39bS3eXm5/1hZV5ZVU5OS01befLu6fLe\n239ufPLVy8nM09bU0t3k5eLuYFFMS05OT1RWX29+4+Df1c7Ly9jy7ulzYV5dW2V4WUtKUl1a\nVlpj5dPR2djPx8fL0+Lxe3xvYVhVVltYYvvw9mRiX3ji2+Rrbfbz5u929+vv/n5lYV9dZ3bp\n29zleF9neP3t3tLX7HNrbXhtbG9pa2hbW2B26ez0dvLf2txyXGL46nxx8urg6vZxZGZxcF5a\nXWz273r56Orf3+Ll2NDW33p0ePH7WE5LTU5NVWV46Nrb2NXO0tXe39vi3djY7mJfXVxaVFte\nV1BOTlZgc+54Z3nl2M/MzM7R19va5Xf6/WxdYGR4fltVV1U3O9jo0Ezfwbu8znNf6M/oYlVa\n5+XN3VZQX2pdT1Rt7eF8amFl8v1+Zl916efs8uvb1Nnq9Xp44+zy6nd/+HFjW2l5fm1safvm\nemRYa+jg9V5gb+/1c+3Zz87d7fXp6m9bVl1o+XxmXV/p7X9u/NPO0uhmWVtoal5dXWL19Xvz\n4tfY6XJkW1ttb2Bh7NvX0NHS1uDoaltkX11dY3bn2N/e7F9TWWl+c2ddW3F5dGny29zj5+vq\n4ud9W2L98Oh+6e9x7N7b2+PucmFeWF5w49vkYFpncWRga375ZmVu+9zW1NLY2+5mXWprWVFT\nXW5iXmR739nT1N7j3+//7fr+fHbl5Xh6enlsWlRVYGlr6tvk+2phc+3d+l1i/N7f+X7z9Org\n8WdYVmXi3vjw493jeF1ecvXe5e7j5OT47+RvYFhOTUxTbeDY393b2NvyX3Dg19Pi9Onj8XBg\ne/tjW1hcUlzo3d359eP6YldaXFhjYmz6+t7S0NHb5dzV2vdp6eTb51xVVXhwXmbt9nFhWmJP\nVO/Z7Ftf5uLl+tnQ9HLsd2BOWfP85+XQyNvi+vfhX2plbVlGTVheXVxt4Pz5z83ZYGjd5WBP\nd9HO2eXUyN1fZ+9qVFh+8WBVWH3yb1/n1etZS1ZaVl1ja+vc0+7o09zV1dfeX+rUfnL9fmVb\n5OhxX3fN1HNZWG1fS1JbYlpk/3L67snE0vp0+ttcTF7t22l0ztn+a9zPXUtX7uF48NriZlxw\n2F9Tcdv+S03jy9dcXtTgc2Xdzeh19uv3Xlje3HlaV2NeTVdjdPxW3M7m29HEx1tS79rcXl7u\n7FtZ3czOXFd4/k49SN/7X3rdzOJfZmtbT2bj8+ly3Nzl2tnMzeTZ1NTvSlDxb1RU7u7wWVnr\n+33+YFFRWWt0bfna1td1+dfQ1+Xf2e9KWdbcXkxj3GhNTlHf4/7N4+Xa08n9TlZa7N5v8u/m\n9Fh7VFBfXdR5/9rw1vXW2HZlaVljZu/S3M7+Zc/d01xMWk1jV1F4XNvnT9zr8eZry9NXXtDL\n+Uh22ORQSuzzVmTb23FZ0cvafHdv4HFnd1ricU5Xft1iTvje+FlV1thjXN7CzuXg5W1LR25g\nVlNX6vHOycvI3eLZ4elZ6dFiQkBXZExN5XFW9Gfbc3zK0eri1MraX97T2F5H+H1QSURr11JW\nUL7EZtj5ydNa1OZqXlfM0VV16d1UR1pUT09s6ndf4fNeaubNzWXEv9bg5MXWSlt440k7VVJE\nQV/LyXpZ2c/Qa1XLydD0bWV829peVOLaelJG4nZT6E92TkrTa9t0Tb3SfnLhxfdK38PMQUbN\n31hGzcdnYV9rX1Jx6+z8Z31n3u/r1s7O0d/rX2p1Vmb7XF1i30tObVdeSVLSaOvqzMxX39Dd\naE12ztngUGXG2Vrx5+NZW8T8Rlv112JQzMvTfXZpRltPXdhb69vV19zU+uzmdE3q1GxrW+zg\nSkdV/HBeZOBi7s3Y927ZzlNga3fwdM7s78LY3U7s2UtMYsxhT271W19X6V/xxOlf2uDR2PPP\n3fP7+khJXWvdWGNXU/dlXNnPytZkztJ2dODZ3k3yY0JOVGVeXMzPaG3U3UdC9GdyRczF5svL\nu/FczNp+Q1fMTUTa2mVGcsdYSfvJyFHe1uNQRNHsXVNPZ2DoU2Nk1tNeWtDlaOxnyNtpz2Tb\n63XeWuTY60r419xvUtJ4VNfm7Fhj1vP16HptT09eeV1OTevQR23f2dJa0slRau3J61bW9uHc\nz9pIZM1ZU1nW1mbOzdxY4s9rWEtSTFJj5XVa3d7rT1HV7FZxTFB7eb/z+L7Nu+Vlz1HOUT1M\nQ+LgP2pY2ctp48/q3nDe4E5mW37YXVvPXG/O9dR76dFe2fR46HP6U1VeTV5+zdxP391T58hU\nSmLY8EhWwWVRW99cVNXN91fAzt997MrtXk3wdVZhUt1qSu5zx81U3u/I/1HW5dFVVOLxT01/\n3ndV/cZ8Z1zK80JUVNLQ7lVu3dfXVczUd9lP51Xu73nsTe9PXfFv9HH73vjWy8nLU8zqWl9F\nfElI/u5YStvsYvLaz+fpv29dWeReS9Da21jTwGNnduJqTPfsUU7da1ZRatRPT9hZYVjg1lbN\nzd7r7MlXatXa1kPO2E77W+BPY9Xf91hV9M3ba97aXkta3lxFWsnRVW3R0lBX7F1eZ9Hj4t3Y\n0e3HymBV6WRHSU5LVWlbzufNzXXCy1n+1dtEQ25dWFTIvfnPwcvlRPZ7TPRMTEtTxGN6/1/C\nTM7KO2Zt7lY+zm1k99DCROjdatLmxtfTvL/qVtreOz5HfFxLydhZYk9lZVVjSVlQXedO2GzM\nw9zZz73JVtvJ8tfV2FxB1Fk9T2TgVkvRdUhh5NtbTM1QTmpOzubUze7laGJ73cjNY8vM+N5f\nWmJ1235NeO9qUk7gT2Da6N14atJp3tPwWXPZc1/0a9fYV9ZVbs9d4FJHZ9v332VnfF1w9FBc\n0Hhyas7TTOXY4nVpztLjyuH0ft/mWVx+WVVR8FBJ0NhUa93Q7/jE32XY6t5+bWxfS2lSTldN\n31VaYUzz0+/acc/I2cnQ4M7Z0fdKWVpcbW5qX1H3ZHVeW9FbdOnq23TZxuzSfEhXcFVYS25o\nSfvlVG/V2M3eyuRf1nthX3jP1dPb3dBf33hoeEhWVEJRUWLi52ppz875bd1sX9nLcV3f4Vdu\nymBbzNRyTfd2SUbP0krexdDtY9fpZe7YXVdUXm1R2N5r5t7sU1t61mlX8nVfXWB403Lq7tzm\nTVPU1Gns2edg09bY1c/B53bNdllKXng/RVT4UE/+XFh80+1PTfHtZmHifMvN1tlkz9vf3WXl\n5ePZWVhmW/zu2u5u3ezjcWBgV1BOU13w6N9U/OXj7GDnbGvd7OHPeOTe1+Bd3djYa9nUYF3f\n3mRhX19SUedZRVBsbUZs0eDs7cTXXdvZzexg5lvl3X7oUt/jTWFnWmlWzND1zM7D1VnjX0tX\nWGtPS93sZ1xv7WZl7PRbaO137/TZ0M/Iz+pZW19WT3zvanp+zNl43O73X1FkWFjl6PX3cODm\nX2xpdeVe7nZe2tHx7FZo/lPqaFzk4exsWeLO0djh7+zk3lVMUl1qZ2RvU1PrfWZndM/L2ddr\n38rg3HVvdVXtfVVf/9/rX/jl59vL32X+3d9dZWFNR09iUU5YbFxy2dfpzs7S3PnY4e7c6mRT\nVehXUXlm/Vbk2Vlf5s3bbePPy8fGzNpqaPVRSU1WV0tJV2Pg3eTuWFFcW2378ed02tHee2jc\n1uLc3uHt6+JvW/TncGhw6X963ep1XGR3ZW1lXm/f2uX6b2z8fV1YYPPa29nT2ODtbl5s49t4\nXVpdX3PvXU1NZnhRT2t76Ovk52jhxsDS1dHU1tnO6VheXU1HSFFQS1FdWGTk1NTh0cfLy8zS\n325oWldcWVheWmZxX29qZmhWVlhZf9zY1dTNzdTb6NjW4HhaWl9fX1xcXl5o9m1kfOLfdm7u\n4dzc5+rw4dvtY1hbY/Hc2PNafezsYFzo72v3+mRVV2prXFlk+O/y5+N66NTa3tzQzdrf497Y\n2tTqVExOVFBJSlRn6+H7c2pvcXVlZXzdzs7Pz83Mz9v+WVNaV0xOVltiYlZOTVtxb25v7tjP\nzdDSzc3O2u3z6vLz7vHs5u5sWFBPUFFSWlpbZHF5eXNv8eDh5Ork3djU1+Th3N/oaVhaW1dY\nU1Nl8eDk63Vw2Nbh4uTr593e9W1wful6X1xYW2n19+jX0d/3e37zaVtVUFtv//R3/vDo6PLp\n5OTxb2Zhamxw9/Hr4+T8a3P/f+ry7PZ87enY1dTZ4OxpWE9NTk9UWVFTXurb7frv4dfT19zZ\n2drgemZm9O50XFlp6uz+eXVu9eRvW15r+XtoWVFaaHhwdvDf4evu4eH+fHNv+eDZ3trY187N\n0ud9Z15ZUk9PWGd99GpaXWB2eG1tbvL06+r77NzV0dba4e92YVlabPr3Z11UUF/w6eXd0M/a\n5PD1cvrucFtbYWVpZP3h1M3a/Hh3fW5xbGFnYV5cW15r8vP16uTez8nO33FfWVZVWV9u8u7o\nc2x4aWpzcHbr3d7s8vf15d/t7ODr5nhfXFt1+mBTVVVg++ng3NHV3e1y7eLq7ujs69va7VtS\nWFZPSk1RWGv86drW1s7X4+ru3NfW5fF8a3X5f2FpfPLe3NrS0truW1RZYV1RTUpMT1pgbn52\n6vrc1NTKx8nP2N3d3etuZ1tWWl1eWFRVU1RWZ//c0dLU29rX0tl8V1JVXGppbHf7bWpoZvTv\neP7t5+La1Nrm597a3OdyYFtVUU9MTldl8PV/6u3/dHH339zi4uPe0tXd39/c9WRbUEdLWWRl\nWWjd19vZ1t35+ePr/t3Qz9l1WU9UXl9fW1pXX/jm3dXW2+bu8PVnXltOTFni0Nnl5NvW3ufv\n53hlWFJdYvDb7vB2bPTq2OFuevltWU5UbPne0c3O39/f3OJuX2FjWlhaY3RsdeHjfO/9Z2NZ\nYm15ZV1lXmXd2/rs0cPK3d3g91haYVtfaHBmWVxoam7p/2977ep5fuvg2tzkX1/9dWNgc2tt\nZ+/c3vf15/Zlae7vX15nauPV0NLoYV9sfXj4aWR49n1fW231W1ZfeHNl9tvb5NjN1O127+Zo\nXVtlanrya2Vqa+jO2fVs0snZXVhsblhTXexwWGXd2/no3eRkaXfe5+ZwXWBgTUdUWmVl+9nT\n5fzQxs/a3tXT1NTK2mpOS1lPTE5ZaHZdfdnPy9tgYl5RVk9PXF955NXMz9jPy9ZyaXd9XFRR\nXFZPTFT55nbs5Pvz687S5OTT4OTxYfD8X+rbde7n3txc5crpTPXc9VNKX2hVVVBBSExJTENC\nQEf3xL/FvLy+0NjGv767s7O/wb3RTz1VytJ00b/aOyooJR4aHiotLk29v/DcubDAbMqqo56b\nko+fvlNeLSIfS8C9xri42jYsMCgkIigtOz81Mz1BNjA4VltN8tVJSsKutMfosaejmJOQlaCw\nXikbHSQzONe1qLpMMC4pICYuTlps38BRNzIwNjcyMz4/PzQ86NVAN7qsyUSrmJebjoqYsjxL\nHxgXPt++vKenuzckLiUhJEdbTUhPUTUuKCwsOTAvMTxQTkRKvbrZ06qitlymlpOMi5ifwzQX\nEhAjKjm5nZ2qvT5AHhcbMjQ43a6sYTItLx8fJywuLj9owLGuYETPQt2vqa6Zj4iCkqWtWxYO\nDhk1L7mdk6e0OC0ZFRYfLjHOrKd2RTMuJB0fKS8tSs6usdNG89rFPTXGqpiOgICNmZ+0EgcH\nFx0f7pSMmaTeQRQMCxYdJ9mem67SPjEcFRYfKio/rJucqr++1DEzRWdenYmBgIyPmMINBgYM\nERfelYuVl6bMGAwKERgcZZqRnKi5Th4SEBYaGyu6oJ2ana9NJCUsKCe6jYOAgImLmiQJBgUJ\nCx6ujo6OjpfjFQwJCwsVQZ6Yl5edwiIVEA8OEyVyrJqSkpzPLSwsGhcnm4eBgIKCi6IbDQcF\nBAoby5uVjIySsDAYDggHDBzvt5+WlJ66OCcaDw8XIza7oZOTnrm8zjEbGrKNh4mKgYOPOhwU\nDQIBCRosTaKPipCdtGQdDAkMFRog35yWm6CkrTgbFRgYGSa8oKaom5WjRiY8m46WpI6GiZ/T\n+zwVBwYOFxcezZeSmaGgqDUVEBYcGRgstaq0sKWpWyYmLyoiKNWrsL2sn64zJjegjpKdjoSG\nlrPgTx0KBAoTFRgprpuapqqmtzAfICkqHR44v94/TMzJQS48zctly62msvxszVItLDnNnZGV\nmI+Mj5+8RzUgEg4TGx4hLtGsrLu/t71ELy82MCkpMj86MjVMakg+eMK9xb61usXewb9iODRD\nvKGbnJqSjpGcrcRLJBYRFBoeIi5Zxb/K0/RFNDhwyftO5dBYNSooKSgnLkrjy7Gnp6277vdY\nPTcwN8yfl5WZlJCTnrlkSjQfGRkeIyMjLURoaGXBs7bMfk4yJh8eHh4gJzNauqypp6aots5k\nTlN5UFdsw6CUkpmalpactko+OSIXExcbHB0mQcS7uq6mp7PcQjEnHx0fIigtO0/hxby2tLfB\nxcrd2MjUXe+qlI2SmZOOlK8zKCgbDwwQGyEoQ62dnqmsrMMuHx4gHRseLEFBQ+2/wvtNUVxs\nam/ew7Gyv8+0l4mKk5GMjJ8vHBoUCwcLGS9fvKCVlaLGWjgfExAXHyQrWaukq8HeSSwfHyg5\nTNa+rqKeq9ytkYqMlZCLjaknGxwVCwkPJj9Vx6GZn9stKiQWDhIgOkvLo5mdsNlNLR0YHSs9\nZ7alo6OouEqymY2Ol5KOj6kwHx8ZDw4XNdK8uamktjAfHx0UERgrV8+5pqGs4jw4KyEgLXW8\nvbuwqrD2M22dkIiOj42Ony4cFRkREhtrqKShoqbZIxUUFhISGzLJsq6opL0xJScmIyg9taOj\no6m0uGUgHM6Yi4iNiomRRBcPEA8MFD2bmZiZm68nEg4QDw4WLr6uq6KerTMiIiIfJUS0pp6d\noLBXOiYaKaqOgoiLiYynGAwLEA0QJZ2PkpacpTQUDA4QDxQstaqyr6izLx0cICMlPq2dnJ6j\nqzojISQ1r5OEgYmLkZ8eDQgOExgtpo+QlKOyNhcNDRMWHC+4pqy5vtcnGRgfKjLsqp2ep6y+\nLx0iJjKqj4KCiYyQohwNChEXHDudjo+XqMEqEwwOFhgeOa+nud1YPyEYGB8sOs+rn56mruEs\nHyAky5mIgIWIjZNJEQsMFBAfx5GPk5yq+BoNCxAXHCjDoKSvv8Y8HRcaIigyZ62gorHkOjEo\nIB61j4OAiYiNmB8ODA8SDyiqj5OWnaY/Fg8PFhcbN6ugr7a71ikYGB8mJDW+p6Stt2M2KSQd\nJK+QhYCIhouWKBENDhAOLa2QlpSdpUMXDw8WExkutaeyr6+3LBwcHyEfLHuuqqqvvj0mJB4d\na5WGgIiFiY5TFxAQFgweUpWamZ6htx0TDxYSFR9Lq7OysKphJB4iJx8kNrmpq7e6ajUsJyFI\nmYmDjIqLjasdGRIdDxskqZ2kpbmrPikZGhsaHiI9VdbM0NFGOTEwNDVDdcG6vcxCOkVRPDev\nlo2OlpOUlq80IiQ2LS4pScK59zMyPU9CLiw1RDsqJSQqKistOfXFu7i4u8DiQS8oKCw5Trad\nk5Kam52dqshNSb63uMnOyM1PLyYmKzM0NzxMXEIvJSAgISIoNVTPvrvD1008NC4uMTpqqpqV\nlpiVlpiksMC3rrLHYWVzRC4iHR4gJSouNkv+SjUrKCgrKi05S9jAvL/NVkA3Li4yQeWun5qa\nm5iXmaCps7Gsrr9uT1NJOCghJCcpLS0vN0A4LSclJiksMj5Z1726wM5dQzgzMTk/WLeim52e\nm5mZnqasq6mtv1FAPjkvKSYnKSwxNTpAVEo4KyQkJigsMTtIbtPqYE5LSkU/RlnbtaCanJ6c\nmpmep62sqq6/Tjw6Ny0nIyQoLDQ3Oj9EQjsxKysuMjU8SV3YzmxLQEE6NzY5SF/TsaOfoqGd\nmpqgpqqnqK/HVUNJPjAsLC0uMjg0MC8vNDErKS46QUpJUVxeTDo0ODw8OTdHberCqZ2cpKGd\nmpqjqKyorLlWOzw/PDUyMC8vMTk4Mi4vLy4vLC45Tl9r5+V/SDw5PT83MDA4VEQ8vp6VmZ6a\nl5aftOXrz3M5LjJLw8faad/UfT8sJigqKCIkLDlFPTs/PjQrKC03R0hGPkrPfkqykouOmZOP\nj6E/KzA1HhofTq+w0NC5vDYfHSMfGh0oSW7ewLKz0TsvKyUhIz3Gwu1zwrFYLTiajo2XlYqQ\nnyg5NCUTFDPOv0K0pKs1ISs2JxkcPdNEOcCqvTQwPy4eHS5i9t+8tmk0VT4nIKmNiZKUho6d\nHjUsHw0T1L2vR5ubqiciNSUaESVZTj3Npq9eLDo0IRsfODxCy6iryC04OikesJCLiZaDjpcj\nLx8XDw+7PKdplJyrKyQ7GxsSKTlGQb2mwd01RCwdHCM5L1C4prTFPXUyICGskIyLkYOQnCY6\nHxcNFNc3uMyUn7MqNS8ZGRgtNUF8rqe4xzxHKh8dIy8xV8SvvGtHPisgMJ6NjI6MhJKmJT4Z\nEgsfOkXLqJSnyypKIhsYHSwuQsaqsLbDekIjISMnKkTCsL6+1e4yHh7CmYyTkYWNmC12Jh0K\nGS5ETL+Vm6cwyyweFBgeJCc/r7a1wL3eMiQlJiEsba+xusO62ioh7JqUj5mIjZbI1DocDw4p\nIDw4nZ+h89PvKx8aICApK9i4t7i8wEEuJyspKjzPu8Ppu783LMGdl5ebjJCXv7w9KRUWJSc0\nO6Wko8/AUjAfHR8iJCU667/Qz8XUQi8wNjM0/bq8zbevyDfQo52fpJSUmK+wyUYfGyElJiFB\nzLHMztXZOiopLTIwOE3ZWUtV29tMRFXa5ubVvsXcXks5NTxMyLaqoZ2cnqCmrsZRPDkyMThI\nT04/PT06ODc7PUNLYFFBNS8vMS4uN0to5c3Gw9ZvSU1P672soZyZmZibn6q8WzYuKCkuPUpO\nQjs3Ly0tMDMxMjg7Ojc5PDo7Nz1GdM2+t7S4xdlpeeTEsqScmZiam6CpvWw5LiglJSowNjo8\nOjEtLC0sLC42PklKTl3h3mddcdvJwb65u8ngYEVJaMGxpZ6bmpudpKzHVTgtKCcpLTI2OTs8\nNS4tLCwtMz5OU1RLS0Y+OjxIWd7Euba5vL3J6t6+s6qfnJudnqCms9JTOi0nJicsLjE2Ojcw\nLzAyMDE0QU1MREZCPDY0O0de2by2srW0uMPk2ryuqJ+bm5udn6eyz0w5KSQlJyktMTc/PDc0\nNTIvLS4zNDMvLy8vMjZG3MKzrKqqrKussLe9u7GsqKGdnp6jrLpsOjYvKSYmKSosKy80MC0v\nMjM0OEZLQzk6Pz5BSWzPvrqyra2vsLW6vcO9t7e3rqqqqqmstcPY3/hKOzw2Ly4uMDEvLi8y\nLy0uMTMxLzE0NztFXcq5sq6sqqmpqq62trKzt7m5uby+v8PSYl54VkE/PTs2Ly4yNjY5Pj8/\nRU5XT0lNXVtLVmve0tPEvrzBwL++xsvLyMTKxsbTybyzPDxDR7472ltYxlzHTU9iQU0+Pj9A\nTUxYVlnf183Kz8nP4Nvp3m50zc9mYH7RzevNztViYWpUU1RNXFRNVG5nTElWYe5eW9lfbO9m\nzdS4naEu3zYwwSK8bzKxbbjB0bRP3XFD5jdCTz1jTEPbQV/iTnb7WczaR8xC5FxGyD282Eer\nU/CpcaO5Lqg05rUkrDUspSKvUCukJ93gObk1yj1GOWruQ70wtV5Wvl3IQLna7E++1jOsP7p1\n86hqs74oOa80rTfyykfTzVc/tTCvMk23KbAsYrEl3kFxYztGv9M3sS7HvTzDRrTeTM+vyMW0\nQKU5v8TJrjO1NsxFQtdEdinHzCa6SiycG7jZGJUTo94fmxmeWTavLbbRL6lP37IvmynJqS2a\nMT+cGps+OJkur04aWj8fqSO9wCKfN7FOPrgeriPNvi25NsPT20mzSHG8K6baP57Jp90ktFyw\nQy6nTjuzO8a6KLY2wiXR0TKgHacwRsElriHETMRLRKgmnCHKtj+5LLNLujy8P6RGUqEmny/s\nxTKjIqXXPKwrqy7ZQDizKcIvz8omtDNYxianP+StKqAwzb8mqyvuuy62OG7CdNHFWq1meKw0\noju2wlasJr1DQ9A30Err9ltHU0NBNUJLVVnu8d+/TdfSb9o8wVpqvz653ry/VrBTxcdnvEO8\nT8zGPshUxzhSVEHOLW5KWUg1ulFX6lDKxWLe42TtP9FQSck9w1hO0F+zSsbP0rLuucLBuF+9\nw0rVNUphONw8TdhDVjs+PkhDTFJJYEbOU1rV1LtlyNXRwNm5wLq/2cPq0tpr0P7Uz8zJ0sHK\nXlxJPDQuLCwxMDM1PktD+ujY437U0MrOtra0rK2prauss7TAyczHz+dbUU46MSorKSkrKSoo\nKi0tMzA4OEFEStzPqqKjnZyalZmeoqmuzEs4Ly8xMDxr2sreT0MuJhsZHB0hISYyPk/hy9jR\n2eTZ1ciun56ZlZaXnKGsuMVsRzYxMTc2P1BPalVJOC8nHiEjIyQlKCsuLzU8P0hST118xqee\nnJqal5ianaKkqbfJ/kVCNjEzNzozNTU2MywmJSkoJiMjIyYnKi43RlDg3eDDtqCbnJ6blpeY\nn6CkqrXoQzs2NC0uMTw/Ojc0MywnKCgnJyUlKCosLjU+TnF+fenStqSipJ6cmJebnp+mqbfL\nbkA9PDM3Nz5CPjgyLysrKyknJCgnKSgpKy42PkNCTW3Mvq2lpJ6cmJaWmZufpK3A/D0zMCko\nKzM9QD89Ozc1LywqKSkoJiYrLjE1OT8+QURQab+sqaKfm5aWlpqeo6ewvV1FPDQvLi83Nzk3\nODk1Ly0rLSooJSYqLC8tMDs/S0lMXd20qaehn5mUlJacoaeqtNRANzQwLy8zQkFANTAuKign\nJykqLSstMDM1NztDT11NTlfnuqWioZ6clpiZoaesr7j0PjQ2ODMzOf/S6U5EPy8pHxweIScq\nKiwuNTY5PkRISUVBRmmmlI+Oko6PkaV2PSw5HiAeN9fFv8yztMNAKyYgHBkaHiYxN0VORDgu\nLjc9MjI70L6xpY+IhoyPjpejIBwSHBQWHD6mo6KtqK9rJhsZGBgaITfZu7GvtFQsIyEfIyo2\n0720r6ufjoiKlpWWnFIbFRogGR8trJ+gra+s0y0eGxwbHCA63cvFwcdDJBwdHx8pQcyyr6+s\nraKPiIuVlJSaUBoWHSAWHC+ooaKuqanLLR8cHBkbHzI/TdfC2DUhHB0eICtJw6+orKmmoJGI\niJKWlZm4HhYbJBsdKralpbW+vlAoHhobGxwfN9zUzs/hOyYcHiEnLmS6sKinpqutmouIj5mV\nmKgkGBkhGhgha6emrrOquTcgISEfHSAydnXlv8dJKR4cHx4fL+jEyK2ppK+vlouKlJeTlqgk\nHh0qGhojzKWqs7arvTokISIbGRwpNjlGz75bLyIiJiIiL+zGua+moaqllYuLkpiUmKcoHhsj\nGBkdQbivsbGsvlIvKSUfHR0mLzxezLvAbS8lIiAhJzVm3LWrq66vopOOj5mVlpi2NCMnJRwc\nI0fSvse1rbLKQy4lHhoZHSUvP/fHydw+MzEvND5Xb9O+tri1uq+dmZedm5mbosvjPUMuJyYn\nMDRCQ01sZ29COTAyNTQ1OklOQDg3OTczNDtFWmFm7ODr+Ozky7yzrKiinpuanJ+hpau45U1A\nNS4sLCwrKikrMTU1NjQwLSsoJygsMDg7P1TOwL28urW1vcS5rqmmop2ampyeoaewv1g8Lyso\nJiYnKSwyNTU6OjYyLzAvLiwtMjo+QklVcOXazcC/v77CwLasqqiinpubnqKnq7LFVjwzMC4s\nLC4vMC8uLzExLy8uLS0tLzU5Oz5DS2jUzcTAv72/xtHgy7mvqaGdmpucoKSqscNpPjMuLCwt\nLjA0NDIxMC8tLSwtLi8xNTpCRUhMWuzRy8fL0M3qUVnJsKiinpuZmp2gpKu210s6NC4uMDI1\nNzYzLy0qKissLC4wMjQ3Oz49Qk1Y+tza2dTQzd3nyLSqpaGdm5qcnqSprbbhPzY0MzQyMjAw\nLy4sLjI1NTU3ODYyLS0uLjE0N0Ba0srU1ca9ws/Dsqmln5yZl5qeo6asuOk/NDEtKyorLC4u\nLi8wNDo5NjEuLCwuLzE1OD9MX+PLxsnHxcjV6Mq0qqWfmpiYmp2jqK/CSDEqKikqLDA1Ozs6\nOTg1MzEtLCooKCsuMzQ5P01q0sC6urzBwcC/uKykop+dmpian6mzxOFGMispKSotMjIyMTU1\nMy8tLjAwLy4vMTU5QlFt2dDKwb29v8DD0OHFrqakp6KdnJ2hrLjG02g/Ly0tLi4vLy8wNDU3\nNDExMjIyMTEyNjxFXtHAvL28usDN5XRhYuzCr6mlpqKfnZ6mrrrOZ0Y1Ly4uLi8zMjAxMjQ2\nODc0MjQ2OTw/R17WxMPGy8vFw9RXSk9LSE3PsaimpqGfnqGptL/K4VA8NjM0MzU3NTQvLzAz\nODUyNDpKTk5PVefNyc7f7dbL11o+Oj4+Qk7Rsqqqqqein6Klrba8yuhKOzU1OTw/Ozc1Njg5\nNC8xOEFBPz9DTV139mRVWWnoZUM8Oj9FVM6zqKSnqaWgnqKnsr7NY0s9NDA0OT1GRUY/Ozc1\nNTY7PT0/TPvka1pTTEpBOjc5OzYyLCwzO9emmJCUmZufn7RuLCkvOuxhzr+wrLXfMykkJykr\nLC82Q93X7EY/OzQsJyotOjxXyb/aRkxNTj+ylYqJlJqgnK8lFhIoN+s+WqmgokUjHiUpIyUz\nyK21dFZd4TorJCk5P0c8VF/O/kc4JyozXD7blomDjpykqq0aFhE2vr+2v5qfqygcHiEhHCrC\nqrRWNlVDLyImM0dbPE7yz046UllGKy9APkw8npCHip2btJ0sGxcjq12qc52gsi4bIB8eGinL\nsd5QSNM2KCY1VUQ/P87qSDlE3upxODJLysUyVZiJhpmno6G4ExccsPU7WKqXsT0gMzIiGSFt\nqrpkTc7XLCYmRks6NU3LQDAuQ+k7LCxK0N8/V5WNiJGdlqOoGh8iWtotuLSbxjgmKyocGiA6\nw73Tynz9NC4sMTY4R1p8UD1BS2lMNTpLvdVHQLqSjIuenZui0BUkI8soO8ano0lAMkglGxwu\nTuXUtrvJSTdAMzQtPEU/NDdqT0dO9FcuOWZaNC2ljYmWpZaYnxwdJ9o1Is2ml7jqVrw6HBgj\nNy4sTb/ZOjlnQi4oMTs+Lzfk+0xLwL86Lj/IOiZAlomLnJiQmHwVJixgGzGxmp3QtsDDHhcZ\nJCUfMr22bkHdzTslJy45Ly1FydhLyL7LNipC6zkiyo+HjZ6TkZgrGic7OBxOrJiu1Mq4TBkV\nGysnJC3DtNNA/MpCKSY0Oi8uRcnxUfzD3iwzflcrKaOMiZOcjpGeICEuOCMaZKycubqvr0Ib\nGx8mHx8t285BOHrVPiknNjMsKkbF1HLWrrkzM9zQOjCvj4mPm5KQlzgeJDUtGSjkordle7u6\nKRsaIyYgHy7Uw+T8w8VqMi0vMy0sOmTGv7vC1Mu5dTEuxZmQk52ZkZSmOi4xOykfIDLewtHU\nvrzKOCciHx4dICc4W9LIxL3XUjs5P05r4cjCu73F0ndTQ0fOr6OipqKhnp+otMXG4UEuKy9C\nZ3tq/nlHNSwoKCgpLTI5PUlQSEZJR0A8PkxVVld56uprYmB2zbapo6Gem5eYm6GorblmMSkp\nLTA4QUU+NC8rJyQnLDEvLzM9Pjw8P0xTSU1339Tazs3VdGV1UHC9q6ajnZqWmJyjqa24eDQt\nLTE1Ojw9PDMvLCYkJScpKy81PD5BRUtUUk1KTVheZOzTzNTNw8bJuqukpaSfm5mcn6ettchO\nODE0Oj09OTUvLi0oJiUoKiorLTU5ODY3Oj5JUF1r5s7Fvbu9vbu8xLqtp6anoZ2Zm56kqa69\nXzkwLS4vLy4tLSsrKSkoKSkrLTQ5Nzg+SVJqY19qbOf36NXKxs3HxMS/sKmkpKSfnJqcn6mv\ntcJeNy8vMjMxLConJSYlJCIjJSowNzo7SPjOx8XGx8jM1tnbzcjL0tPLxca9saysqZ+cm52g\np621yU84Ly0tLS0tLCsrKysqKSgpLC4uMTpJbc7DwcnQ2Nvd5t/e0tHV0c/Z0Lmrp6mknpua\nnKCqrrO9ZzcsKSoqKCUlJykqKiknKSsvMDEzO1vHvL2+v7/Dys/Z2tzq+G7c1tjMva6oqKSh\nnZyfoqqstL9eNy0qKSgqKicmJissKykqLC81O0RX0r+/xMzV2t7X1+D26NHX1dbX4Ni3q6es\nqqGdnaGlrK6xvl80LCoqKignJikrLSwrKy4vMThCUGrZx729v8rT3WhgT1Fm/G5q5tjm5ruq\no6Woo52bnaGrsbfHUTMqJyktLy4rKSoqKSclJCYrMz1IUNS6s7S7vr++v8voZPrbz+heUF5x\n1rapqKynn5ydn6avucR6NiklJScqLSwrKyssLCsrLDE+UHnu3MS5t7zH0c/Q7Uo8ODc6ODs/\nP06nkoyPmpiYl7YvGx4wLSsjTqyhrDgrKCkbEhQeNUpEa66osEU5ODosJC1Avruwq6m37X5c\nSSY5lYaHlZSPkb8TEhkrGBouo5mtXjpPIRAMFCozJ0CooL47Xr9nJydLyFxGvKWouMnOXDYu\nMTg3o4yFipmSnqcUExUmKh7brJSrwjk+IxMPFidLOPCuq24qLi8vIShFvsPNuqurttbzSDUx\nVFA0XJCDh5ialJ0kDRYoPx04qZKdzT1ULxUMEic3Kiq7rvIlKz45JynbtMtMvaWvZvm16y83\n2t4qPpOEhpqckpkzDBYhSRsuq5KawHXLSxgOEyg7KiTKr9wgJzM3IiJNut4+16is2Ga2u1A+\nUf40c5CEhpaXkp4sDBYcLhkvrJSbt9nOOxgOFCUuJibJsNMpMExDJyM/xmQ80K62z8iy0TUv\nzsctYI+ChpeWkZomDRUfKxYos5WdvGnFQhsQFik2Jiu/qdwqLlE5Hhss7z4uR7Kz0MKwuWRA\n4s5L45KEg4+TkJk7DxMaJRcf6Zqcrt/QRB0PER0rKyZJsbJXO+ZPMR4kLTEuQbqzsKyuvdrZ\nVDwzRZOGhZCPjZZLFBQaHRMbU52dp7KtwSgTEhsiHRwytK5gZsjQKh0eJCclM7+noqSlqKrA\n7EQzLrKLh46UjYykJhMaGxUPG8Kioq6sqMMmGR0iHRcbNuNNNHHITiggJiwoJ0Wto6GioaOl\nrss+N0KcipSdmYuUwyUfMB4WESXfuNbfr6m9MyktJBwYHiYsLTt17j4yMTUuKzTft62sq6mh\npKu4ydJfSrOQjZKZkpGe7yAeHRcPEyE6SknTranCOjErIBkXHCYsL0y4r7jMXE9OSVTgwq+p\npKGgn6Osucfa82nZwrStra+vr79NNzMsJB8lMEZb2sXF1FM9MyslJCYtNEJHVWP5Y1dpXm/L\nurSwr6mlpqyyr7C8xb+3ucvNwsh9TEhJPTEtKi41OT9IU1tXSEI8OTpDTnbez9XY2fReb1hY\n7s/Gyrq8vcTAtbnI3c3n2ejbzdDJ3s/UdExESUZJTVze41hZUkM7MzA2M0Zf2t7O2d/X2c3d\n6eLdxMzHxLy4t8LU32ZidPxT28e+v8XJeUxBNDo9QUhs+dfod/hjRDs8PD4+Rm3Pz9Xazcvr\n6elr6OXPycW+ubq+y8rael5Yd2HV19HNzeJLPTw/P0ZKXlvd2d7ZUF5UUU9NTkto/vBTTVNY\n/lFq6NPZ48jMw8PIytHJ13fg1MzDy7+9yM7tXVpRTlRPTExFQDs6QT9BQlJLUHFx+Pjm08zM\nx8jEzcTHzd5zzd3b70lddFFWXXTk3M7e4tTLyczS1PFz/uHpWUhIW09GSF5YSk1SWE9VVFBN\nSWJp6dji2u/n3NfY0svBvb6+xsLCz9JvUEpIS0xfYu3e09V4ZEpJQ0VCPkRQW2P7cfhvcuXe\n1svN0ePfvsjjZW1ZP0ZW3fxt1cXF19Tq52Jl3+jmztDGycO92HdRQj85Nz5GQVBNSHtpUkZS\n6GdPZezEwb+/ysTR/eVvZM9o38O/vMbGwctoUnRdUWtWT1J17nZNTlVIPzxAREtGUF1PYE5f\nT0zd09POv7m7v8DQfGDnzt3b0+HL28vL3s/iZWjOwsxQR+Xfbj5G6ks6NTNBRDlLYdv02eZf\nfepTed3jfs/Avce+xL7cyrzC6Epjw3FT+OfW2Wnews1tc0FJPzdASVBKO0NRVHno4tzZx89x\nXlLS+EdW+93oztHSZOvMwsfew8HHylZOXeZ6bWHxbfx25vFWS1bfW1xq3flNVPP1YfjR9F7s\n2NfvWF7YydHtZfTc51hn2czNxs7FvcbP0cTG4/5dbnhLQUBLSUpNTU9WUElMS0BGS0lS5tTM\nyczp1crEv76+vb3Fx8nCvL/MzcHH6G7j505FUntzWlxefV5ITkY+Oz1APjw6PUlcVlFlfPph\nZ3NtalZQSUQ6PT8/P0Z63se+tK2rq6yqqrG9xLq5vcvLvcDhREE+OS8pJyYmJSUmJyoxNTU3\nP01pX1NZ7szDuLa0r66urq2utb7Yyr+9z9nU9kMvKiooIyIkKDA5P1LbxsXOalNXTM2sm5SU\nlpeWn8otIB4ZFhkq27Sspp+hrkMqHxoUFRkfKDRpubCzvcLOTjw9bcxoQMmflY+RlJOWn2ws\nHx4ZFhoqx6yjoJ2eqM86KB8ZGBwoNE/Arq673FhFOiwuP+m+rK/Jxq2bmpegnZyivysnHSAY\nGyFAy72spqiu1UY1LCAcIC1Q58GvqK/MVz4uKiozRO/KsqairLW/01y/nZeiop2Xp0soJSsZ\nFRYrRdvJq5+erdRSPScdHig4O0y9r7d5RDkwKSIpNkJcvqqnqrC83DwsW5yVop6Uj5rNNS8v\nFhEVLD9L5qqbnbPq7UMiGBojLS9Ksqm23lhJLiIiLTM0Psiuq6yrqrpaPSwqt5ScpZePj6xZ\nLUUeDw8bLSw7yZ6ap8vN2SwYFx4qKTK9oqOwuLfcLyAiKi0rPbqqp6ypprU7LCgeLaWXo5qQ\njJa4PC4uEw8SJjVSuaCWmqzA1jUcFRchLSpOp5ygqq63Qx8YHSMiKVqrp6WhoqasbCUmJSMv\nnZWcmI+Ml7k3LSIPDREfLUO7oJidrbzGPSEbHCMpJzqzoaissbDSMScoKigtQsTAwLOprrm/\nX083KCi8mqOpmY+Qpr9SaSEREhomISxLqaGqr6yvbywmJSonIzPBrbSuqqzBPDAvLScqMz5E\nXr64srGy13M+LzqqnKqil4+VpLC/xiMZFx4fHyMvxrzS1Le27DsxLi0rLjzuy762r7G+W0M/\nPDk6P0zcwby8u7q5wWlRSEP+v6+3rqOhn6uvy9BELispLSswMj5EPTg2OTg2OT9RdM3Gw8PF\nydHb0Mq/vLu5u77CzPlMQjw6ODg7QEpYcN7VzszPzsm+uLKxr7Gztr/PaE5EOzQwLzE0Njk5\nOTo/Slli38y/u77Ev73Dys3Kx8/e2tj8WU1PTklCPkFAPEBU28zKycK+v8bEwsXMy87Jx9jo\n291dTExFPTw9QUBBTXja0NDe0c7fXE9camphat/la2jvaEpDRElMTVnt0c3Jy9DNz+RlZPjY\nxLu7vLy8vcLYa2tcTU5b8d7mefZoSj04NTIyNTtLe9bS1dvna1dRUVr70MrHvrq5ur/K7VdM\nQD09Pktm49LKwcDIztfu3NDKwry5ubq7wdXtX09EOjQxMTQ2NDM2PT49Pz9FS1Nh28W8trS0\ns7K0t7e3usDHyM7d725cTkZFP0FDRUtQT09adOjuZ1poeF5aX1tRSUdLSUdKUVNQU1Vg3NPV\nzcS9u7u8urm8wMbN2NLU5OxtWFdfZFlOSUZAQD9AR0xMSkhOVFx3b2VXWmXy6Ovo39nT2dnP\nyc/Yzc7KxsnLztPZ29fh+Oj9befg7efo7nZXS0pNVllMR0ZKSUtNQ0FGSklGSlzYz83LxL+/\nwMG/wcG/wcbHy93r/2BZZXt1/Hht20sz3UBKaTPHO1NoPdpG42x20O3X7drcd+zh715aV/ng\naXX+7+Zye9zZ0srBwcXDwcHK22tfW1ROTVJRVVRRUkxMVFFORUlPTVdMTlRY7urk3dTNx8rN\nzMvBwMvL1NbQ1eZdVFROVEtHTUdSWF1pYvvs1uq+rEk81ku3TP68ZNjlztxPT0xES0JOSVtp\nTfHxaFd8/dLK5dLZ3NXk39DRz8fP7V9VZ318vGpfySnlLTXXPL/tzb66yry/z8/a7dlSaEhB\nPUE9V0piz0W+YMrL8tRnUVT0W8VN1cxNz+FzZ9lWwz2+VWC9QcDXPa842borrDXKvS2zMt/Q\nQdDINrrfPKsntkNHtjG7Pr/cfMRL0Mk7vmU2tTbJvC21P2TFPNbNScBRwG9ari2lHqtBKqUd\noihLpB6eKrixKqdIyW/HyOXKMLE8zslEzFLbbkTTT0FGN7UryzrKvyqlJ7TBIZsfq8wpnyip\nVU28QrtQRK1Ay8Y2rzXCzzy/Oj63PvjrOqwvrDk+piWlKK0+TbYqpy3AT05G1ki+TvO/K64u\nuFRqxiqtIbZBU71Drei60K1FsnG/bz21KbxHQrU18bsuvjk3rimzM8faXLsvpi3N0D62QEtq\nW03DPLt0KqImrUgzpCGoLqxfWrFGoi23zcnOPNDOLbwku7cgpx6vyiitKqlJyjm8sh+cHKJw\nKJ8fpS2vLrq2IqMorOAqrTW+YiyoPc97OqUlqEdjt0i6K7w5zls4qDW9yDuvQP097jdZ4u1l\nwimxyjWhI6oxvVtb3/S3Mqksqkm7XV7OO7c1xE5PwjK/SEDaNr9sPslAvTrPPGysMrI4rPc9\nxVGxL68519RAtzOnMa4/9LAvrTbkYS7BPj79T+TeRb1LyULkzFa9Lq44vk4vrDS7fUyvMKM5\nydhSuTnmXMRb5jPVPMNDVNFBuzGtOLBb7so0rCuvO7Ne+lNJ7z/EUN9JxEDU7U3LR7xFyTGv\nOsncRq0urym5Nb0+zktdyk22Ys/ou1K2P7pVT79ByUvLRtM/TVQ3yku/QGjXR75FyFXR197d\nW9NKzk7OWt/X2c1P3U70TlFOTnBW827X0cbMus681Oe/Ud9KPVpGTFc78UZ87FbWW+FV3ODy\n41vVa9xm2tvW5NjY7dxZ6U/a3ePOYcZM1VjsZ3L6WOJZX0tlTVtXXlpPZGNa4+vf0szOw8jF\nw8jNd+plWUlJR0pLVmxXXlpdZWzs4PDu2dfM1M3OzMvW3e3l3l9MTk1QTUdJR0hUa11ffO7S\ny7/GwL6/xNndXXdlUE1HTkZNS1V6Z9ff+mNuefDm4u/o4d7t9vT86W1cdGFSUlFKVXHn0c7J\nzM3Rz87Q1fb5aPntbHXoc1tPSEVHWldXSlBte9nY09vf4+zyaXLu6ufZ39jR1dLq9mv7bVpo\ncu5na1ZhdXPscmVren5x+n58b25n6eTm6vji6ORm9+Pd4fzuaPbt/mJd8uzW4m1cZPRvX1ZN\nVFhp+G7k6uvo8+n9zNXX6W3e18v1aVdZYl9eU2rn29rZe+Df5e5UWlNjW2ZfWeHd1dbW3Nzt\n/2JYeXb4X1pcT1FdVlBUXF/83NnU0crIyMXR3PXy5WX+bGP1eV9iZW1+Znh8bul+63v76vz5\nWFBKT2Fr62dha17u/Gzx/dzk7uj+8O35a2vq3tnn6trc0s7Ozt3p2dvqb1pbVU5JSEpIUFNK\nUlx1+Ozb2NXQzcvMztLd7XtoWlpjdWxcYHnh5PljVl136mxv693nePN49+Hv+GFibOXc8PNo\nWltgYVxq4dXZ7mtv4tvRzuX2dHjyYXRral1PUlN08fhpYv7ez87a2vLh421iYG/+7Oni4t/j\nbldVTktOTlRbX2rrz8zJxsbIz93v7fz2fmpmW1xZXWdhXFhYXFhaW1ZfY29tcdnR1O/r187H\nzNXo5+Tk919eZ19eYl1qZHZ8YWZaWmRpb2Vnfuri3ujY0dDOva3NxTItOTZDPENsu63F705U\nTTo4S+zJvs29s7K21FhWZ1tMPz9NbuJOTFfMz+FUUvdn/G3v8drP3lhd72FXUFdf9dfPzNjU\nxcLM4l9oTEpKTl5tV17abfJo6O7UcldcYVxhaV/s3+z39uTw68/b2dzMzdrhWnjf591lXmde\n62ll63tpW1BRWF1pefXx7O91XW3p/GZcYuPne2tmX3fu1NfSyc3b8e3l3c/Pfur33mdgTFln\nY2RUXmBoWE9KTE5WYP3o7GTs835cb9rS5PDezMK9wc/d3dLWytDy/2JdW1BNTVRn3dzb2tna\n61Y/NzY2Ly4yO0dc5czAu7u+v8rZ5ePUzb6toqCnr7W0v00uJCQqLzU7Tc22srjOUD02LScl\nKC83Q1XVxLy7wM/pYn3X09PNubCrqKOfoaWuuNVNOCwnJCYoLzhDWPLa1sfL5VBCPzs6ODk/\nTmf46NPFwMC/vb3Bx8vfaF1WTEZGSEdKccy+u7iwra2vtLvJ7lRCODQzNDc8Q0xX9OtyX1de\nZl5UTUlLVFlSTlBVavrqfWdiZ+jf5+vn2dXb0cW8tbK2urq4t7i9zetpXE5BPj9CQT8+Pz9B\nQD0+P0ZMTlFk7ufg2tbT1+Ptc2x+emhbX/zf1tPU2trRxsTIx8G8urm7vb/Cx9HgYFBLR0I9\nOzs9QERITE5UVU9JQUJFSUtIR0lNWn7r62x62M3Gwby6ubq7vr69v8LJzMzOz83P2N9+a1dN\nSEVDQUNFQkNJRkNFQkJEQ0dKTE9OTk1QW3ja2dLPy8jCv7+8vr+/w8PDv76+xNXh6PZ+ZGBf\nWVpRTktGRkZCPz0+QUZOVV5laW1samVnbW1yb/Ld0czQ08/S1c7Oy8bGxc3X2d7lfmVaXu3g\n5XhrbmlcT09PVlhYWFxpfO79b2VaVVBYWE1NUGHo6eDUz83Lzs/Q087P0s7Qzc3O0uj19F9V\nTERBPz9DR01dderZ2tzb1NLk/GtnbnD24uzu8ffy/m14cFxUTlJg+N7X0s7OzsnLycrU4vH5\n+WpqemNSS0lJSUhKTE1d8+jbzs3R2OHq+ePb3/VpXV1hZWFRT1hp7+fx6dnf625j2MfGzuLf\n39fW5+np+P53aV1jZWBWT05PU15nafDl29zrdGr9/mNWT1JcdW5ob/vd3d/Z3uPc1s/Mzdnl\n6ePe497b5mBQWF1jYlpVU19p8HRebP348up++vrq5vRpaPX+cl9ZWVxubWhlb+5tbevay8TC\nyM7O19zg/mZSVWJbVVFaa2FcV1ZTT09aXWjn4N3W197l/e3q39nl49fU2+ng1s7V/l1ia2ta\nUFJXXmVlZVtfZGFnYnR069/m7f3k1+X+c2h2+/dwaePPytjq//X4b1tVW3b+a2Rh++Lf5uPm\n19Pa4WthZvjkdFlLS09UWlxieH1wXV3g19DI4fvr7dN2Z+5ocXrv5ub5b/t41ba1STI7XcxR\nQOBz48/Gvbu13k5PWlJMWnxFMjtIU23g3FFZ2cfJ2dVzXOfeZWl+03ZZ7NLP19xl9se/xdla\naM/V5k5FU2JXREVY7/BeX0pwyddhTN7HxMDPzuvXv0ssLUble+5cP1/AtcrLqcYjPMNPP1i8\n1VrFrb3fpJ7MLCglIyQoLTy9r7C+t6W2WfpIPXxKQUDRvMrAy7u+e8JpO9/XR1lIVFpLXVs9\nSHJaY21oT/Fb/8lNd3Zew9rjzs3Kw9zbyd7Jy9bO085wWEpa400/UetdS0FGUUtq/lp1ZFph\nQz1SPkRJPU/excrfxbOusLS5t6unrLK7yszRTTMqLTUyMjc6YcPE2Uc1LSomIyQmMkZMS0fH\nr6+3vMfEu7mmm5aRkZSbpLZLJRoVExcdJzq+pZ2dp70+KB0XExMXHis8WcyzrrnSSkVSad7K\nvL2wmYiAgoyetMk0FggEBxAsr6GclY6OmfwcFBEPDg8ZL76qq71UPDQnHBgdOa+hm5qcnqOX\nhoKKn1A+Qi8WCgoQLaeanKijnag6FQ4PGik8es62qKnkIhgXGx0gKtWinJqdoKjLOyEfsIaA\ng5Owu18qDAIDDDyajI6YmJulKAwHCx5QrJ+kpau/KBINDRgmMD+7nJaYptg4LzItK/KLgICC\nnioYFQ8GBQszkoWDjqlDKRkMBggZrJCLjZnFJxcNCgsTKcCrp6GenqtJHxwrXcRLS5KAgICP\nGw8UEg8JDSqUhISPTRoVFA8KDBi6k4yNjJVuEAMGCyRNtaeunquxOSMmLUe/vl9KPqyLgICF\nuw8VEBgOCw9HjISGnSkTERUTDxAlooyLj57YJxgVDxMeea22zUZJQ0Y9LSczvKOlsU8qL5KA\ngITWEBAUKh8WEjeQh4meIA4OGR0WFB+9lY+RoXYlHB0bHB8+vLnnNTQ+585ZP0e8pq9NIxzK\nhYCAhjYMFBIgEQwOv4qEiKMcDRAdGxQTHsSTi5ClPy0jKB8ZGynDxu85Ki5Avsxu17Cjpbku\nGx+VgICBmw8ODyEdDwsYnYuFj0oRDx0hHRYZK5+LiY6oNx0aGhQRFy/DuLxtQErHvj4qLmm1\n0i0faoqAgICSDw0NFxsODhubiYOKrBsPEhMRDhAdr46IipWzJhkXERATIk2xpKi21G85KSMm\nOWHK1VSxjYCAgZsfEg4WGhAOE+CWiomVuSchHRcRDhAbxJmOjI6ayigWDw0PFRor5KifnqO4\nWENELR8bHUCUgICAi5urSzEdDQUEDh/BnJiYm5qfuDYcEQ4RHTHIqJ6iqrbPOSQeHB8sQ8q7\ntLe+v8XWPy4uQ7CbkpKYnaClrsVKMS8zPEFDUU5EMygiIictMzpOz7mus+Y0KzFF/un8W/rE\nuLnbPTE0PU1RREBhva6qq7C6y87GvrWqop6eo6y64ko6LysrLjU5ODczLy0qJiAfIi1EdOh0\nYNe4r7XPU01f2snGyLmrpKSorLK4wNHy372uq7HA3F1oYUc2Li80Oz87NTE2RVZKNy4uNTw8\nNjA0Q9C5u8p3XnPZzcvQy7quq6mqrLG2uLzAvrq3t7e8v8nZWzwwKykqLC4wNkX531k8MS4v\nMjMzNj9cxrm7w93rcGVo7s2/ta+urq6xuL3BwMjFv7myr66wuMPzQzMsKisuNjw/REhHOzEs\nKiosLzU9R1Xfx77AyM96c9zEubSvrKmoqq+6v8TNa1Z31r+4tLW6vs1ONS0sLTE4PkhUYlhF\nOS8tLS4uMDc/S2ve7evb3WVMTfzEt66rqqimpaissrq/w8HCw762srjHWjkrIx8eHyMqM0T6\nz9LdZUU6ODxEUVlZZtjAvcbuT01f+vZv8c7Evbauqqmoqa2wsrSysbK3vcbXTDMoIh8hJisu\nMzo/RkpEPTg7RU1VTDw5Pkvuz8fJyb+3srO5vr+4rqmnpaSmqK21wc3T31xIPzkwKygmJiov\nMzMyNz0/SEc9Oj1MXF5ORUNHZdfb6fXVx726u7izrailop+enqCmrbfK8VtJPjYvKicnJiQi\nIycsLzI2NztGSkZAPkRJVmNNS2jMurKxtrq1rqmoqKiloJ6foaWprrrdRDYyMC0oJSQlKCop\nJycqLzQ3Nzc5OTo6Ozw9QEz7zsTCvbmzraehnp2cmpmXl5yntr/EUiodHSQlHx4hLz45LSw1\nPjouKisxNjMvLTA7RktU6MrDvru4tamclZecmpOSmae2tcHhOCgfICksKScrOT46LSsuNTMn\nHx8nLS4tLzlM7eXf18i8vb3CvKqcmJybmJOTmaKzt8DZNCQfIysrLCkrOEJINS8xOTkuKScs\nLysmJSs2Q0pLXc69tbe8uqqenJ2em5eVmqCsrK61RyojJi0uLSorNk1nOi4tMDAqJCIkJysr\nLDI6QDw6PVrMvrm4rp+ZmJuamJOXm6evr8HHNiwmLTMxLSgrLzYuKCgsSrdDISgeLyMdJSM2\nOExRbd3Qw9i2nY+MjpCSj5OfZycnJy0fHh88v7K9cOnPvz0iGxsfIB4fKkTu5T80Mzo5List\nPnfSzLSejoeIjpOUkpzNHhgaHx8aHCfFq6i8zcS/biccGyEqJyQnOu7aPy4uMjMqJik1S/bD\ns6aZjIeKjpKRk59THhsaHxwbHTDIsrfb9l9YLh4bHCEkJCc31rzNQjg4OzYvLC47aMi7sqSU\ni4mNkpWTmKk8IiAgIBkYHC5ZyehtyLq/QyoiJCUhHx8mLzY2NTtKVUxCPU3jxb+7s6majouN\nkpWUl6DVLSQkIx0bHCY3WlxY/c7YRi0jISEhHx8lLjg9Ojo/SUpHS13Sy8fDv7Kej4yOkZCN\njpmzRi8uJhwUFR0oNzk/Xr+/7zImIB8cGBgcIysvOU/RvbrBysO+xdXLvramlI2OkJCNjZWq\naDYvKh0VExsmMzAxPOfK7zYoJCQfGxocIiosLjdVzb7Axb6zr7e/xruunY+OkZKPjpGcvj8x\nLiIaFRgfLDMxOFq8v08sJCUlHxsbHSQsLSwwP/3JzMu+sq+1tbe3r5+Sj5KUkI6Qma7YST0p\nHRYYHyksKi092t1BLCgmIx4aGh0lKCgqMU3Kur3Gvq+tsLa0r66tnpSSk5OQkZOcrctPNikd\nFxkcISQoLTtDPjcvKSclHx0cHSInKzJK1ruzs7Gura6vr7Czt7aimJeYmJORkpyrvuhCLx8Z\nGR0iJSgrM0FNPC0mIyEeHBscISguNUvPubWwr62rra6vr7a5uaucl5aXlJOSl6Gx0UUvJBsa\nGh0fIiYsOUE8LSYhIB4bGhwiLTY6S926raurqqakpaqusLG7wK+fmZiZmJaVm6a6cjsrIBkX\nGR0iJictPUs9LSYjIyIfHyQrMzs/Wcy0q6iqrKmoq7C+w77C1cGnnZqamJaUlp6szUcwJhwZ\nGBseIiQoLC8yLykmJScoKCkuNz1J/tO7sK2srKyrqq20u7y4u8K6pZ2bm5uamZ2ovFs+LyUb\nGBgaHiEkKDA9RDovLCstKysqLTlO6tXEuK2rra6vra6yuLm3trWwtrSooaGkpaOgo63KRTIq\nJB0aGx4jKi0uNTo8OTAsLTIzNjY8TfjQw767s7GutLi6sK+zsrOytLa7ureuq6qsra+vs73p\nQzUrJiEgISUrLjE1ODo7OTQxNDY7SlZRT2nKwr2+v7u4tbGwr66urbK5v8vMzs7Lxbu2srG3\nur/cSTovKykoKCktMDY6OkRNTktY0d1PNzk6TlVLXPjNx72ysLKxt7vGxb69w8jMzMbEvbmw\nr7G6v896UUE5MS0sKy41OEtZSkFGS0I5P0ZBSkZVVl1SUU1p+9DLys3Vvrawubu3tLS6wMPA\nu7q1ube+yM/naldQR0hMP0A5ODcvLi8wMjEyNDc/RVR5YF5FSnbW613tw73Kybuxr66vsbOy\nr6+2wb25vMDDxsXF2WtMQTw3MC4tKy0wNTAvMj1AOTg/VlRpTl1fxsDCzt7CxsfRzL+6tLe6\nt7OutL64sbS4wsLI2t7mXUM/Rj88NTQ0MjEyMC8xMDZARk5NbHza1dlnUm51bF1hz8y8trq3\nsquts7OvrrO8vMLHx9BqS0NTSEU8PDw7Ozg3Njo5NDEyP0dOS1Zc6/RPTVvU3VhV1MDO2tu9\nurq1vbq2sbCws7u7vL7J8UdFUUlIR1BWS0Y+PTg4NDU3Ojw/UE9f+tp47/dudk5OWk1MSVH/\nxsfFy8O7ubm4uLi4vMHJzMjKxcXEura4w9RXTEU+OC8tLC8xMzY3OD1ISD8+TmNaR0FPfdvf\n3M7CuLi4ur23tre+xc3Cwb29vq+qp6uwvcrbSDMoJSUmJyctMz9NS01ES0dSST85PE5LU0VJ\nWNnEyMm9sq2utri3u7y/uq2joJ+gpKm31jkpHx0eHyEnLT/aytHq815MOy0qLjE2Oz5EUlVV\n6NrZyby3srWura6yusjgYdCmmpianqGkqcktHRgZGx4eICtGvrG23FlSXEs0LCovODk3Nz5e\n3dl5a9K9tLC4vbu3s7fOW2qulpCSmZ6eoaw3GhERGBscHilNtaanssLgSS8nHyAmLTQ6QU7b\n0d5aSlXdvsjMx7y1uLzK08urkIuMj5mbnaY4FwwLDhUaGyU+s6SfqbfC8DEjGxofKjM7SOG+\nu8l3T1HbzMDKvbK0rri+1me4l4qLj5ugoadPFwsIDRUfJS/0p5uYnrN3RTQgGRQZJThXevLO\nvsJYNzM4R1rmzL+4sq2susvNmoeFiZWgoaO8GgsFChMlLS5KrpqXn+YsJikjGRMWJW60ts/n\nx7tkKyElNO23t7e3rqSkrv5EoIWChpOoq6m1HAkDBxMtRTpgrJmUnUEfHiIgGhIVKbynrMJq\ny8g8IR4nSb+6u7WuqaauzlBDsouBhIybpKq0IQsDBhAncna+ppeVoTgaGBseHBgbN62gqs9D\nSEwtHBceO7uvsK2lo6iwv0w3QJSAgIWWpKatLAkBAA4ptsO9oZSQnyoPDhMaGxog/p6Zo802\nODooGhUcSaulqaqopqq7OyknNqOBgIKLoJ+3NwsAAQwss6SqmJCQpCMMCQ0QEh7Xm5CbqmI9\nJRwVEhciVq6jop2fp8k9ODw7OLaFgICHnrn9Lg0AAAkroZqdmZKRoiILBwwYHR8rr5WTpEAm\nJSYeFRQfcKijqamip8czJTbiYE+kgICAirFnPCcLAAAOzpeWnpyWl78WBwcOGh4vpJOMlN4h\nGx0ZFhMbO7Goq6ylp8MsHCtzwMvGj4CAgJdBRTMbBQAGKJmPl6Ccl6ElCwQKHDcxM7+bkp0v\nGBkiKB4XGjuqoKu3vLK3Pic30bvAr4yAgIWfSEMxGgUBCjebk5ulnZmsHgsGDSE7Ly/AnJam\nLBsfLCseGB79o6K1xLuuvC8kMc2+zaiGgICKqVA/MBIFAw/clpKcop2cuBsKCA8nOzU1yqCd\nuCUbHisqHRgh26Oitcmvqbg6JzHdtryghYCAi6dROysRBgUQ3pmVnqegn78cCwkPHS1Gq56e\nn+ApGxkaHR8iK024qqSlrM4+LTta+9fLpISAgIutTkQtEgMCDl6Yk5yjnZiuIAwHDB00MTfO\npZ2sMRwbISUmISVIqaCnrrjA0U4zOE/jwcicgICAj71LNywRBQYRV5yYoqyhnLAoDgkMGiIj\nPZ6Okq4kGBwfHRgWIs6ioa6ysKy2UzQ0T8q/vJaAgIKQtVAyKxEGBg4upZqcop2cpkwXDA0Y\nHiMkKl+wrsc3KSgrKyMjMdGtn56nq6upsL/vQjo4YZ+HgIWNnKe+Sx0MBwkPH0a0qqCcoLIw\nGxMTGBwfJzTRrqe1TzIuNDk5N0q5pZ2epauqqrnXRT5Lvq2rpqKYkpWeu0YtKCUeGx4mND0/\nNjExLTA2PDg3PURiW0I3LzU9OTY94L6urK2traqsr8rqx7itraupp6Wv30BDTlFiW07yy8pi\nNSslIyQlJy01Qf/KvcB5PDk9TVtPbm7ewLq5wsK6u72/2Me6vLu8t7W+vepVPj07RuPbv+3N\n18xALjAvPzFERkPM0rvFVGNK9l1GPzdGXbvDub/Mt87hVktQ2ca/vbm0rrvT2VH5RUQ/QO9W\nYUc+RDgzNDRMSVROfsfHzWu9zfJfRmfp2NHMzcrCt8VmbsfpystG7c+4ttPOyb/Kbl9IP0JG\nZVI1MjdAREs+T0tdbE3bY8/Lydxd2d/eTEfv5MrPcL/BxLrF0+rRxNLYzsLBv9PSvMDmOjg1\nNjovPTc7TErf2/Ze81tORUJf4c7Rvrq2ynlRfMlZPz3Hw7e4ydX9vHlGRzrOW1jPv6uvv8rg\ne1w4LjIxNTtBVPf0aGxGRUM/S0rawrKtsbXC021HP0NEZ37m39S6vLlrSEZautZe/k68wsTF\nTby2VC8qPUxART1ZTlRVTFQ+TT1D1tvIv7a2vdS/ub7G+E/g7N94QkR69M3mYlVtvtpdVP3F\n28fG1k5BXTstKjtMT0t1z9vD1dRWS+r3zcvIuMi8ucddSunVXVd2Zk17xcVdzLtpSOjBXzI1\nx+dESMS3O1k2yUEuZk/KPWHJalVn79VOPNfOvcnCtsPIu+1sYb/NS8XOYcfHvEI6/9hMOU1U\nt2JySzRp6MY+MEDW1lpGOcNezs1B8FDdWHXFu8tRz7qwUThMwb5FVc7DV8p50cdSvb+9vkVL\n2MBOPD1RbzxJSj5DRuZMQD7qyk9PSsxZ6clrWui5vOPMv9Hayr7fTfFax8Byy1nJxlFfw+05\nTDxORzteycn300HI+0bYOGs9OVxB1l0+0cC+YEy+v8jP3sW+1Fjq5r5SPtS/701uzth0X7/P\nXcg4amk2STzevz5BybppT1XtTD7KVUVAy85P2HrFU83C883NXsrP0dzIu+BkTM49P11V3krN\nzfE8TL9cYENp1t1oxt/90T3Cvzc9zt1IMs3FOE3Avi05v7TFRrC3w9P6tk9J9r+3Lzq52dBE\nbVk0VuA+NUHL2ExaSM68VdFibnlKw3M0cbvAU13HyVfevj5Yxf7ERNy+UL10ScvMxUZJS3nN\n+bxWWsW9RytcTTk8OOhJSrxsUs7ezOTpzVTavtLOxMxS5M5tcdfEVW61xkvMwlJB38c3NWPe\nWUnK60DJwFpWXE5GSlVLPe201V/ffFdc6U87Pm3Gx9DDzu/Kzldb68DB27/E3czJzs7+TEVN\nTEFOaWJdXlJOSUx3UD9ATOXVee/Zy9J+Wu3Vz8/c3tXO1eR+bVv81crM2tfk3c9zSkxYe1ZJ\nXWVST2d1W2lOSFVX2c3S2dLP4e5QTV3azlVJe9/W3UhE+c/HzXjW29W7wP5r48/OamZqT2/l\ncGZTTmFdTktMZ2heb15fYEtHTkpGTE5NS3O+t7jF5+tl1NVf3se9ta6ur7PB1V5QQT5KSkti\n39HN0001LCspKSonKjdJST9C5cO6s8DGu7WvsbbF833DsqWWjY+fdSgkJSMeHi3Eop6n6C8q\nIh0YGR8vWl1ENzI0NDExOlHcvbKsq6iiqsZLRr+YioiPocQ9NCQaFhszvKantc9ONigfGxwl\nM1T3bk5BPDErJiYrNlJbwrSyt821ra2/dsbKopKKiZSrNicoHx8cKu2tnqm7OyooJisoKDBC\nTz8vKSsuNDAtLDVrxcLZ2PHCtLOutrLC++fOmoyHjqlJIzQuKyAeOr+hp747KCspLCouNFjG\n2j8qKSctListMEdb3eDX1Me1sq29yc3Nwlvvy5uJhYyuKR0pOS8jITytnqf6JR0gJiwuPNfG\nzUQxKSQpKzI0OVJc097g5FddzL63srm82tvT3ca6lomGjrgpHSo1LyYiO7eiq2gmHSAoLywu\nP8m01jciHyxH0ks5MjxeZF5CRH67sbO5xLu+urtdP0qki4SImzEeJDc7Jx8hTKmirjkhHyUr\nLCkrP7mqvjQeHitF4EE0MD7ZzuQ9MUS3p6q9z8a3r7XbMjueh4CHpB8YIEpIKRwdQ6icqy8b\nGR8qLSgnM7ajq10hIC5yyTkqKDrJu7tPOk63pqrYOj3OsbPXOjyniICEmx8VGkjLPyMbNa6b\nozkaExonOTw5RNa3uloqICQ0dWxANDdeyr/XTEX+trbXTfGupJ+pxzg6oIuEi6keFiNKvjYg\nHCu3oqg8HRYbJzk/OD/GrLFaJiEqX73lOSkzWLq10EE6z66pvFFHzbG11DU/rI6EhpQ2GBoq\n0VwtICT+qKC2LBkUGSQuMThXsp6YpToXEx81vVE+MEqvqqtBKzBis7TE2/m1q6+9Y6aRiYmZ\neB0dK0V5MyUhLsessUQfFxceNfDF4tbFwNY6Ly02PkRHPj5BcsjIZUpvxby9vK6rrbjQzr+g\nj4mKlt4hGx8nJiIdITDEp6rPKBkWGidGzdRU1qykrEcfHSA+ysfpPHm+q63MW0nix7u4v8vP\nw8S7opGKjJlzIRsfKzY3KykvabKtwC8cFxonSMrWSkpqyt9JNi0vNEttbfXUt7Cyvr+/ysnO\nvcS9vc3ZbaWQiouZdh8ZHigwLSMfJk2upqxPJBoZHzNY72Fj1MG9yW9FNzQ0NjpIxrCsr7S7\nzvNOX3zTyuz05KiWjoyTo0IkHx8oJiQgJTfEqaaudisdHCEtQEdLXc+7uLvMUzkuLCwwPmTK\nvbaxr7S+yM/WU0VJUcGomI+Ok6DDPC0oJyIfHR8rTrasrsRBLCMhJCcrNmOxqKitvMtHOiwm\nJig4WsG0raqprLjLTDgvLTJCtZ2UkZefr77MYz8tIx4eJzvbvcDYVERBRkE4Ly0tMD1ayLzA\n3UY5OT5MetnNyr+6u8hWQ01cWEtEbbWjnZ6msLu8ube3yVY4MjZF+ufsVUQ9Oz07NTIwMC8z\nOEVfX1NGPT9JZtzPz9TLxsXRbVNXXVdt8M28r6yrrrGwramnqKy2z09FS1lpXUI0Ly0tLCop\nKSw1Ojg4PUdOTkpDRlDz0cTCys/OwsLJ1u779NjNvK+srbK1tq6npKOpr770SUJEPzovKygn\nJygpKi0yOUdYSkRHX9zNys/Kz9Hffmxu7ujd61lITv7g5c25r62wtbOtpKGipq260VlJSElH\nPjYvLSsoJicoKy4zPkpPUVtlbn7219TUzcrIxsfO6F5bUk5NUW3ly7qvqqqtra2opqaqsb7f\nT0BAPjo1MCwqKi0vMjQ1NTlASERAP0VPbNjS0NbU0snHz+1caHrVys7rbOzWvravr7Szsaqn\nqayvtshxUFJSST81LisrLCwtLi8wMDM6Pjw9QU532czLzszGwsTN2ObUy87U2Nfk6dLFtq+s\nr6+xsK6urK63zFhGRklGPzcvLi8vLzAxMTAuLjI2OT5JV+zU0MzKw76/xMnMzcfI0vJfZ+Xb\n6dvFubKztrWvqKWkqrC93FpJQzw3MzEuLCopKCksLi4vO0lLRE7sxbm3u8TP0crCw8jT8W1c\nT0xKTFBcbsy4rauxtbKsp6eqrrjJb0lFR0lKQzswLCsrLC0tLC0vNj0+Qk/y0cjHx8rMzM3O\nzMrGyMzT0tjrZFpjZ9S8srC4t7OqpqSnrrnSW0I8PT47NTAuLCorLS8zNTQ2PERHT3fOx8bI\nx8TFx8fL09706WpWU1hdVVdzyrqzsbi6uq+qqKessb/cWlZeXE0/OTUyLy4sKywsKyotND5H\nVXbUxsG/vb6+vr7I2XBcYVxVRkNIVF12y7uxr7Cvrqmopqess8HpTUVCPjo4NTIxMC8tLS8v\nLS0vO0lSX2Trz8XDxMK+vL7G3GVxf/tbSkhNWFRe58Czrq6vsKympKarsr3bWElDPzs6ODUy\nLywrKywtLS0uNkFMYfjczMnKxsC6tbe8xdLc1tpyS0NIRUQ/T8+8tLe3sKqko6WorLXC8lxW\nT0c7MCspKSkpKi0tLS0uND5VaWpf883Au7e1tbW2usHM1+ZgTUdDPj4+SN7BtLOzsK2oqKer\nr7rJ/lZVU0tCOTMvLi0tLC0tLS0tMDpNcfl73Me+vLu5ubm7xONYXF9ZUUdITk5SWNq8sa+0\ns6+qpqWpr7i/1G5RRz85NzYxLSsqKystLSwtLzhGU3/XzMW8uLa1t7e7xdDb4vVcT0xKTE5M\nUn7Ivbq8uLWtqaiprLC4xuBeS0Q9OjUwLi4vLy4sKyssLjM8RExb6NXIvrexsLe8vr/H1t5x\nW1BKTVDbwLm5vLizrauqrK+1wdb9UUU8ODQyMC4uLzEyLy0uMDM3Oj9HVffOv7q1srK0tbm+\nv8HUWUM8P0BDSWjQwsDCvLGsqaipra+2vs9sTkc9OTUzMjMyLy4uLS4vLzA0OkBHT/7VysO8\nuLOzt7m6ur7EzmBSTk5NUOXIwMC8trCrqqqutbzPY0s/Pz47OTY3Nzg6ODIvLi8wMDM6PUNL\nXPrYxL69vLi0s7O3u8bYZUlBRUtQXNTAvLu3rqqpqqqss8F/Sz87NzU3NzU2ODg1NDY2NjMz\nNDc7PkVGT3PVxsK/vLe0uL6+vsDCyuhfV0tHRmXMw8C/v7qvq6imqq+6ytxxV0o9ODEuLCsq\nKioqKy0wNTk7P0/pysG/v726uLW3u8HFw830T0xMSkhGTGfGt7K0trGtqKWlqa+5zGFBPDs3\nMS4sKissLi4tLS8zOT0+P0pk2MjDw8C/v8HFyce+v8rdeXN3/XpuYvLMua+trK2ura2ur7XC\n4Eo+Ojc1NDIvLi0uLy4vMDE0OUFKTVVl5tjOw8LExsG/xsvLx8nX3eLoeHDc3O5858S2r62y\ntrOura2vucxvSjw0MjQzMS4sKywuLi4xOz9GTE5ZfuDTzs7PzMG+wcTCv8PK0s7KyczmY1Zu\n3M/Kwby5trOvra2utL3H70w9NjUyMS8tKysrLC4zPlFOTlFu1MnJz9/i2tDJy8zNzMrHzdXZ\n5XxcTlP/183HvLSvsLSyrquqq7C/6kw/ODQvLCoqKikqLC80NTg8QUVOYHfhzsW9vcG+urq6\nvsHJ0dLT+FtRTVVi89bBt66sra6vrq+yusTdU0A5NjMxLy4tKysrLjAxMjU4PElWXWji0szF\nwLu2tbW2urq6vL7EztbX5eLm0MG6ubu5uLWys7jG8Uw9ODUxMDIxLy4uLi4uLzA0OTxET2nc\n0szIx8XBvbWxsra6uLa3u8XP1t3e0Me/v8DBwL+8urzD21RCPj48OTUwLy4uLi4uMTQ0NDU6\nRU1YaunOyL+6ube0s7Gxs7W5vLy9vsfNzMTDx83RzMnHy87Y/l5PREFBRUlEPjo4OTo4ODc1\nMy4tLS4zOT9KVHLPv7izr62tra2us7S1tbi9u7e2usDBwb28w9RkRjo1MjI0OT5DQTw5Ojs5\nODc3OTYxMjQ6QktOTE1X6ci/u7Swrq2tra2usLKxr6+yt7u/xsLFzOJNPDQvLi4vLzI2ODw9\nPD9PXlVNRDw6Ojo8Pj9DR1Rt38zBu7m5u7q3tra3uby7t7Kys7W0tLS2usLXWj84MzI0MzEy\nNTc4Ojk6PEBFSUVAP0JHRD8+QkpNUl/p1snDvLi1tbSws7W0r6yur7O0tLKytrrD2FQ5MCwq\nKSkqKy40ODo5Oj9Lbel5YF5w4OJ4W1FSTktKU3bbyMTGwb28v8C8uK6srq+yr6+tr7W+3GJA\nNTAuLi4tLSwuMjU5PUBJUWro4Oru6X96dV5YVFj+9mxXWP9vX3vc0cfCvLevq6mqr6+uqqmr\ntMf8RjowLCwsLSwrKy0zOj49PEBMXG9qX15leuve3NbR3u/t2crN1N/l29fMxbqura6zs6+u\nq6yuttNWQTs2NDQyMTE0NTY1NDQ0NDY7Qk5kZV1x6dvV3+Ln8/bl3NfV08/LzMvHwrqvq6ut\nsbOzr7Cwt8l7SDw5OTo2MS4uLi4vMTU5PUZOZ+v1Y1NKSFBRVV1jeWdg99bQ0MvBvsHCxcK4\nrKmttLizr6ytrrTC30o7NjQzMC4sLC40ODYzMzY6P0pab2V3aWjz4NHZ4+rUy8/P0c3KycbP\n52te/tG4tbi9ua6ppaanrbvSTD89PjsxLSspKi0uLi0uND9RZO73ZGRbaX5sZ2Pu183Ky8jC\nxcjLzNTp2dfMua6vuMC7sqypqqu1ynFKRD4+Ni4rKiosMDQ1ODs+P0NIVmxvWU9LVP3f3Wzp\nzsrR2MrJ3WltbFhNXb+qoJ+kqaiop6ist2k2KiYpLjc8PDk9T8vCbDMhHh8oMDtWaM/Hyu9E\nNi41WM3FvbKurrTE0VI9NzW0j4OCjbwfFx4uLCMYHTymlZq6IBQVHjPpzu9sb9DlPi0nLkPe\n2Ug8R925t9s8NEnRx9hf0bOrwF9NqomBhZ4ZFBzRuyobFDGjmaIrFRUiODgpLtipobNIJyYv\nTtVKMzA/V1g9OU/vy8nS2FHOraquQio2noCAhdcLFimoSxQUG5+Umz4XGi7xKhoZSJ2XqCsg\nLnNBKCMtaMFOKicw07f+PFqto7DQXbytvT0ymYCAiCoKGTquHg4UQZOVtR0ZLHsyFhEkoJKb\nRBwnUsgtHinUq88qHyrouV0sNLifrFEx5auwPSmygoCAnAkT4cIsCBFYj4/IHRgxSSMPDyak\nl6hhQPLMLyAlSKu6QycqRkA5MTj4vbbUO/auobcxJMuHgIChDx6wWhwIGaySmDoqM8o2Fg4X\nPq2xVFWrpUAXFC22vTwu1rfaMChLvb5UOEm6r7zCP004youAgJkcKK03FwgdqJaeLjvPvigP\nEB5Cyne/tKvPKiEjOz44Ok7YQzMvOcm/53bexHzYt7PVMDethoCEpyWvpRkLCWyep0czqK0w\nEw8bKiUnyZ2cszYqNCojIzDs1VMyP1BgX167wG01R62irk82SqOEgI2x7ZnXDggUrbjzNaeb\n0B4WHiIZFyuorObSuL8rHSQ+PysvXLvsNULFs77SUEM/0KimsTnVkICHoK+Xnh4MEzYuIS6k\nndUjKTMhFBUsu8w6u56pLyI5/SogLsjlMy5A4D9Gwrs+ME6wprTLXJ2Igo+blZNLFRUnHhUh\ntKHUOt7FIhMWJzUuKNGkrVNMvmsnICszLzNJS05Vwq6+Pz1XTs++qrPMkIKKmpWPqB0YMyAP\nGMOl+zytqigUGB0dHCDZveHEra/GSzosIiYvNzU8Xse8usDGzsHbSlm0rZ2HiJGPj503IDEd\nDhcuWjpoqawuIC0eFRYeLjVXs6+8tbbCNSgoKCIrUNnXsqzQvLG2z/5b0M2cjI6QjI2dwE9F\nGBAdJBskz6rIOWplJBsaFxofO+n8wa24zWNGNSknMztIz7Sqsc67rLPmUtqzmJWUjYyUnqit\nLxQbHxkXJUHYdcfDQCopHhcXHCg5fMaxtLm2wz0rKzAqK1q3uMasp62zwLu+qJWelo2PmaWl\nrSkcJyAZHyoqKznGXDc2LB8cHB4gLEPdx7qxuN5JQzYyLSxAd7u1rKeoq6mtn5ifmJSWm6Kk\nsjktLR4cIyspKCw3Mzo9MykoIyEfJi0zQsmztba/1k1KOzQvPWZLvq2kprqpn5memJWXmp+f\nsD8uNyciISsrKyoyLC0vLykrLSciJzM3PU/sZ72wwVJERTgvPkZAX7ivrKuoopaYlpSUl6Kg\nps0rLSwkHSMpKyYyOSwpLSsmKS8vKCo2OjdX3XTUyN9NT2ZbREb008i3ra2yqJmYnpmWmKCo\npqxFMDctIiMvLiknODwxLjQtJiUpLisrLjg+RktV08vR62jv18zI0tC8trKvramgm52eoZ+k\nrrS4vedNPjUvLCcpKiorKy8yLy4uNjY5ODxETEI5QU/l2tvPxr3I62xZS1FX78m8urCnp6Sh\nn5+foKWnp626/kI5LyspJigoKCclIyUsMy8tLzg6MS0uND9MUmnKvbu7vLy+vLm3sq6qpKGf\nnZydnqGmrLPGez8xLCcmJyclISMkJicnKzE3PD8/P0ZAQk1NUVhu79PBwsTHxru4vbyyrqqr\nq6Odmpyfo6itu9VFODIrKSwrKSYmKCopJygsMjU4PTw5Nzs9O0JOX+rby8G3srW2uLq9wL+z\nqaSin5+dnqGjp6/HWj40LCoqKiopKCYoKikpKCovNDxGRD8+S0pJRkvh3N7czcXJxr66xMrH\nw6+mo6OgnJqcn6OmqrPePS8qKCsrKCgpJyMiICUpKiwxODw+RE9ccO94d+7b0cbGw77Ix7y3\nuby+uaynpKCfnJyfo6mtudhHLigoKCcmKCcnJCQlJSgsMDxBR0xNVGfj8PXn5+XazcjEwcG/\nu7m9xMi7rauqpZ6bm56mq666zUs1LS0uLCkmIyEiIyEhJSs2Nzc9T3tqVlXmy8vY39vKwb/D\nzca/usHLxreqpKKgnZucn6Wut8d6Pi4oJygnJSIhISMmKCYpLS42Rldicca+u73JwsnHxdL5\n6M/P6Fpa0M7oxa+noaKinpydpa/DxctcPSwnLDA0LyonKCw3NygjJjM/MjM5TmtKOjM9VVxK\nQ9+zr85fv6mpwrmUhoaRpKCZnjwVDxs6SikgMbapUxwRFR4gGxsoxKamtMu3rb0zIyczQ0VP\ny62jpLc0KDXW1js2p4mAhZitrqHJHA0PJ7Sq6D1Sr7grEQwQHTI3N0q0pKa/NSwzSDwuKzjK\nr7DDwrW4TzU2UcncxKCLhIaWsU3R/SwZFCTQn6nPLi43KxoODxg2t7DBfdrIzDsoJzfVxtZh\nasy9vm1HTktASd26ub2vkoaEj7YvM29LKhoeSaOcqzceHiMiGhMUH9iorWUrJTLmwlw9VLms\ns+Q5M0TYwM5KMDq/qarZYp2JgoulJiJEztceHSK0m5y/HxkbJiUbFRgss6StPyQjN87CXkNK\nzbe66Dw8TbqusmI7ULmqt+Krj4WHmFwcJC/uLh8fNqWeozocFhsmKSAdKN2qp7UvICE6w73Q\nOT5kwdk7MjfasK7MQ9W7snFBpoyAhZM+HCIxySseGzGnm6E2GRMaJSohHSbapJ+0Lx4fNMK5\nyUI1V9jKSjM9U7OzvVpZ0u1cQp+IgISXSBwhNU4tHh8+p5ymNRkTGSUsJR4o86imuyobHS7B\ntbpzSG/Pxlo7O3uzrrve78DZU8abiYSLoS0dJy46HyIttp2ftSUYGB4pKSUoSK6mskkiHCQ+\nube1v9LiSz0uLDFXvL7yeO95RzWrjoKElMweLjzQMSAtv5qYpi8YFx4lIhscL7OjuS0dGiAw\nT9vOta2x7i4qMuO5s7vMt66txTlJmoaAj98aHj1ONhkeaJyTpDsaGiYsJx0eM6yfrjMfHiAq\nLTZbs6avUyooN823vtFYxq2tyzDIkIGBmDcZMFlBIBQtqZKa2SMcKSwgGBo2rZ+n5y0mIhsZ\nHj2uoqziQTk8OC0x9quoucDM8NmijYaKnsY75jYeGh6+oJuwRj46LxkQEyTOtbfAyX83IxgZ\nKMWtssrY12M8LCtAvK2yvsLT3cecjoiLosU42iUYGB+2pZyvzrW6RBsUGChXYtK9s8I2IRob\nIzhNS2LMxGs+ODpBbsjDua2vzdGfjYqNnq2xsDoZFRpEybzOwKmjsyobHSMmIykxScnGPiYn\nNTotKzvUxc3Mtqmlp663vbu8z0M2Qriqq6+wq6mpt9tMSEY6MC0yPUtfftjLw8hcOS8rLDA3\nOj5NVE5FPzg0ODxEU9vFv7u8wMrO1+zVvbCvsq2loKGkqrO4uLrMTj88Ozc2NDAvLCkoKSos\nM0BPa21MPTMxNDg7PkZkwLGtrrCxsra9wMS/vbqzr6+xr6+urbC3u7/VUzwzMTI0Mi0sLCwr\nKiwyQGjpUkM9P0dCOz1L2L+6vsa9uLa5wMW+uLO0vcfT3eHYzMS6tba4v8XFyMjGydxZQjgv\nKyosLzQ3ODg1NDQzMS4uOVDXzM7Mwrq5uLexrqysrbC3urm8vb28u8XbXU1LUVlYVl1eTD4w\nKykrMDc8PkVRWFhKRElTeN/VyLy2t73Gx8a/xs7Jwr/I71hvyLu4vcvqWEhFR0tNVvTZ6k88\nNDEyOEJKWuLPzdjvXllWWFn/18i+vsHDxcfO1Nzn3NLhW0lP3cm/wsGstzFBMrmwKzI9RUoq\nOU5D2q3OVULStbSq6S0rKUZJ0Ly90863srr8PzVVREI/TV15zb2usLzQ2l7lcFf1xcXSytZn\nQDw6OTw9PUBXa2NL2NBtTl3FbW/Yw7rG2+LdbeFjTepie+bgR+POwsbofca92NjUzs5pRl1F\nQEg+PUpGT01RVUlPSuZSSmDV1ubevK6yWHq/vVNA7bO66sq+TTA89MdXSr3A+Tw9XMnvTEp4\nbkk+18DU+E7e21Q7QGva6Un73m5Ix8DIb+fAyVbmy9pF4sS8U0jPyE5Az13XWHLLzk5P5s3b\nR0hPYT8+1dbAXlxITUBc3P3dSFVJ4ObG3Odpvb3Ovru7xVRIVV9M19vAzM5V+upMT0tKRFRA\nZU9HR1lLTlZL7XPzz3k9yLnJx8nByWFDxcRt0sy/zT9AtbxNQuvlaDZIzGhLTtzEzT5b8E5P\n/M2+6UNS+U1KSFp3V+G+2U1hzcjL/92+zj1P3eDwVHi6vHF6TUxSQ0nl2mbu5fnoYM7CyNjX\n2v1NZ0dFTFPZXWdoZ2BQ4N5YP07Yz9BaX9t4ZvDNvMPHzN7PT0RFfvJPeEteTjk+ZcbfxcHG\n1lple0hR7cS+wri1sc5tPz5FS0VT2dS7ubKvwD0tLCkoJSk5Rz49SU5bZGbiy8LIvL2+ucLa\n1822pZqVl52rukMrIh4lKjE9x7m7xFY/PTkkIyYrLi86STopKy86SEnYybqvr6m2t9XS1LuO\ng4qXpZ3CGwwPJB0kOKOZoMRCRCwbGB82PTfntbw7JSMjIB0n1L2+rqijtNnArsU5Vfi9rYyE\njJuuokoXDBElJixaoJqo1j44JRcWIUR2vKimsEUqJyIdHCY5y7uzp6Op3UhURT4wV+3HrYqE\nj5yonTcVDBkuIy3AlpShxVk4HBEUHi835Kyir0QtKicdGSE52s2zo6GhsLW7Oi432D02Q6CE\nhpaempkoEg0hKBgk0ZmhuNzIXB4TFyAvK02onqjM4lg1HhofJi48b6+mpamrtr5GOz1LQD/G\nmISLlJyUniwVDyEZFhc8qKu1wKyuOx4bHx4aLbuorMWxsdEoHiQlJidGuqyrpZ6ouL3CUDQt\nLT2gjI+YmZOZyCYbIhkUFCFWxq+vpKKtRCYiHxsiMT1nybOvrvM5LyYiHyYuVsG5qqSipqy4\nfEwzLkyajpiZlo+auiwjJBoTEx864du+rKe1QCglIiMsLDFOu7jEzl1DMCsqLzpF37qtp6uy\ns66/Ojo8TLebmJuamJmm3C4sKR8aHCg5THTIs6/DTTw2LC4vLDE6PkhZX1JJOjU4PD9BWMi3\ntbq4tL5nSX7c/K+Zl5ucmJiizTMvLB8aHCUzOUnPs7LTRUhFLycmKjQ3Mzth5VVQSDo1N07Z\nzcm8uLe1u8fc03R2zqeWmJuZlZqyTzk0KBwaHy00MkfOvM5EOTkxKjQ9ODg6RkVFQj5APDpE\nWuvXwcbIvb+8urrJyrq5s52Um6GenaXOP0ZDLh8fKSsnJjrs11xN09k5LTI4KiMmLz05N0vb\nbU7szdvs58C4vcmyrLC1tK61p5mepp+cob7L2EMqHyAkIR8nQkZKd8i+XUE9NisqLS4qLz5L\nRT9H99Xz+MjK6cW/vba2tbO1ubmomZ2kmZefs7a0PCIhJiMcIC40LzbXz049OzksLDAuLzdJ\nRjhI9mZHWNN20cnMv+LRwby9x66stKOXm56Vl6KusOYsKCkjHx8oKiwzQ04+Sj8zLy8vLjI0\nLzI7PkBASU9e9Mi/wb62sruvtbe6s7C+o5+fmZicpKq4bjctKSMhJCMmLTQ7RFRFPDcxMC4t\nMDM1ODc7QT0/W3Rlyb27s7K5srG2t7y0sK2op52cnZ+kqbrcRTYqJyMlJicoLTE0NDM3Ni0s\nMTM1Oz9BS1Zl4MvK0Me+vbi4ubm9wsG9vcTJubGro5+en6Kor71dNy8pJCEjJiovOD5AOzY5\nOzM1Okc3Ojk1Tr82PbVNzz66zrnUqcO3sbaxv7KtqqWinZ6io6u69EIxKB8fIiMmKy41P0hJ\nRTw8PDo4NjpFQ0lYZ01MTWBd9tHEvL+/v7m3tLy/tqukoZ6dnZ+iqbPWQS8lHx0dHyQoLC83\nP0RBQj49PDo9RUhLW/Lhe27t9c7azcvNwL+8ubi3uby2rKimop+fpKmuvd9HNCojICAhJysu\nNT5FREA9QENBPT5BQ0ROUU1Tavh67uHUyMLCvry6t7a5vLevqKWioKChpaqzyE02LCUhHyAl\nKCsvNjo9Q0I8Pj0+Qj89OzxASVZh7c7Cvr69vLq2tbW6vLm4urmyq6ikoqOmqK651EIyKyck\nIR8hJiouLzM6PkREQT0+P0JFQD9IX9fKxLm1trm6vLy6ur3AwMC8u7u3sa2rqaiprLK960M3\nLiglJSUnKS0yO0BDSExVTEVDPzw7Ojw/SVLuzcfFvrazsbKzub/DwL7Cw767uLSwrq2usLnE\nz/tNPjUuKissKywwOT5DR0ZGQjs2MjAxMTU9SV72zb62sbCurKytr66trKyytbe8vsHG0dTa\n9WtYQjw5Mi0qKikrLjA1OkBOZ9/b7XFoalhPUV/z3t/Nxbq3tri+vry5uL2/vsDFzcvKycrO\n31xUT05HPz49PDo3MzM3OkNMT1df4tPS29vd3Nnz6HB/3NzNy8zLy8fHxMfNy83Nx8PExMvO\n1nhZUk9KPzs7Ozw9P0RKSElPTExOVPfc0cvFwL7DyszR1tjg+OLS2uvl79vLys/X19PZ5enp\n2NV+XlNMQz89Pj9ES0xMSUZISlVucnJ+3M/KysfCwL6/x9ri2M/P2NnOztXd7O/1ZGBaS0ZI\nU2JncPdwbmdeTUpNWFpPUE9SX2tv6dbP0dje5dvRztXg3M/S4fZcV1lWWFVbb3Lw39bT087R\n1tbb2tLIy9r9ZltNRkRDQkNITU1OT09cb37k5erq5dzTzcXByc/W43j+dFlYatnMzNLZ3OT8\nW1NVWltpaGP6ffdxWk5PXmRbVVdh7urscmXw3t59Zm9/39DKz9bZ5ebr5ujx9vr0Ylppdnz6\nePx79H9+dm776ef/Y1hdWlJRVWH58HJu+OXZ1c/Z3ejqdVRPW//l5Hp+4s3Cr64qYEkvtDBv\ncj7GvE2+u0u36k+3v0dyQypKODg6Qy/0QnOouae81r1PTy9FLt9UUcU+uL2our63VsRUTz5P\nN/s1c+s+veO/aO3Q0dNx619QXelPSUx5eElbWD9XVXrZO8353NfhzcDM08NR09352GL/ZM/v\nwsXax17lW15qVVpKSUteZeXZc2FPXVpdYFNsdmf65dpe6ObU7nT7+ult73Fobc/Y7fBg2Ojf\nydjM0dHNZ9nh0d/t6UG8WzU+ZdI1PlvWzTVdxnZePdnHTUFYZ3VKT8jHadrDw8zgxrK97dXJ\nzt5p4cxNUf5c+U1PX0xGTF9MTlx9elxYX0xZX0pKQ0V9SkPY+N/cf76+y7WwtLOzsbC1wsHO\nTFpJOTg1MjQzOT31TExFOEcwMSw0MjU5QtC8ubKwsqutsamkn52gpp+ozEw4LSUeHiQpLUXv\nzby+0FU2KiQcGh0gJi5BxrWvqqKor7C0rJ6bmpial5qny0MoHRcUFxwjN8+ypqCgqLtKNCke\nGRoeIygvRNnO3tTQy9BPXcW5usK/o5OPl5eWlZ/SLCkcFhIUGiY4vqqln52itUsvKR4XFx4n\nLS9Dv7zL0ubN4T4+Uee9v8S0pZCNkZuamZ5GHhwbGBIUHTrHtayfm52r9z0tIxwaHSYsLzZI\n28XbX2Bfcu3fysC4ta+3u7ypnJuhq6ago747LC8vJiAiLkBPRU7avsHbTT9DPTYvLjM2Njk+\nSFBpyG1VvtG4u+bD3XLNTEZkv6qkqaefnpuis8ffTDspHyAoLS4vNmHFv8za6+FkPC0mJScp\nJicvRd3KxLSsqamwtLvBxuJquamgoaahnZynxj88MysgHB0hJiouNV28sbS8x8XNRjErLi8u\nKiowQFv728CxrKy1wcHCx2xOzK2io6mnn5yfq8tXPzsqIBwfJy4uMDrkv7/K2tnOYzsuKyws\nKSgpMUFR7M66r62vtLG4uu9N4K2jnqWgn5qbordqSj0uHxwbIScrKSw/z7/J1tHI1UUxKSss\nLCkqLz5q0srCs66us7q5vbzLxrKln5+kn56dpbN5SDYzJyEdHiMmKCoyTdrOzcfDwvJGNS8u\nLi0qKS44QF3PuK2qqayus7XHzb2soqOmpaKdoKjEaD05KR8aHB8nKi04TszEydfZzulEMS0r\nKyooKi89VtrEtq2qqKyvsLW8xb+xqaWopaWeoqi+Xzw3LicgHyMoLC4yPEpbYFtf6dvXXEQ8\nOTgzLi0sLTI7Us64rauqqqqsrrCsqKapqqmkpq2+clROQzEoJSgqKigpMD9RVEpL+s3Ne09N\nST0yKykrLzU7S9q6rqytr6+vtL7Bu7Otr66rp6Wnsb3NzedENSwrLC0rKiswODk3OkZk+VdH\nRERBPTg3PEBGTGDWwLWps927ucBvYMnGuK+uq6Ken6Oss7zFWjgrKCcnJSUmLDc/QD5HZt/n\nWUdEQz45NTY6Q1lsa8+/urm7urm5u7u+v765uLq1r6uqq66yusTRZkA0Ly4tLi8wMzc5NjM3\nQEtLRUVJRkBAQUNJXN/RztHKy8nFxsS+vMXPzcC6uLezr62rq6yusLbB3089NTEuLSwtLy8y\nMjI0Nzw+PkJJTUhIS09h+9zQzMrIyMvEwMHBxsXExcG+vLu7uLOvrq6wtLi/zPFPRD88NjEx\nMTIzMS8wN9SyOSglLT8yND9LYvn7zse/wr+9wb69uLW3urSuq6mrra2srK21vtVoTTwvKCgo\nKCgoLDE9SElFTFphUEJERUxOTU9WU+6vrdlVOUNANUppyrevsbGvqJ6bnaOioKCqyzotKCEc\nGRsfKTA4QGa8r6682vNhQC4nKS0yNTU2O05p8tbRvLO1uLq7ubq+zNaznZaTl5iZmaLFKRwX\nFBEPEhoqS8W1q6emqL9PMiokIB8kLjtV5Mi9u8LecV/r71xX3ru4tbu/q5SMjJKZmpmnNhkQ\nDxIREBYl2Kuoqqqpr84xIB4fIiQoN8mvrrO9z1s3KiUqOFzZ07+wq62vvbGXjIuPlpmXn0wa\nEA8SExAVIuaopaqtrLJ8KxwbHyYoKjfIrKy7bUtANCgjJjvCu7m0rKenrL28mo2LkJqdmZ7d\nHRERFhkVFiLMpKKrubzFTCcYFhskKy02xqimsuZEPDYtKCg01bSurqqlpKi9aK2Ri46XnZuY\nqCwVEBMZFxMYLrajqLzEvcg8HxgaIywtLDy8qa7WQz09OTAsNc+sqrCxraamrNROrpOMj5qe\nnJelOxgQERUVDxMf3qilrrivrb82HhoeKConLluyrr7o5tPsTjo5UL62vLy0rq2xwl1XrZiU\nlpucmZeh6SIXFRUTERMbLdu7vbqyrLPTNSkrLzAvOEjay8rX3+t9VlnryLy3sri2ur/K4FNF\nXqyZl5menpyfsDQfGRcZGBcZIzvJv8fJtKquwz81O0g7LCs3WO5lRz9M0snR4sa4tba7x9LM\nvulPTOisnZqcoKKhoa9VLSMfHh4bHCQyRFh6/sG2u8Z3TkpCPTczNjlBQT1KY9jPxr+/ubrK\n7NrFxcfM2t3b07qloKClpaKjqcBRNComIh0cHiMrMzpJ376xsbnHa1k8My8uND1LU2fs48u+\nvLe5vs3O6lbd3c7kTj860KmgnqKlop+hrco+NC0mHx0fKDA8P0L4urXORDY1OTYsLDM/Uk9V\n6MXBw7+/u7i5w8q8vb3Kak9GYU9D1qyioaOloqCouVI3LislICIoMDlFR0NSd1Y7Njg8Pz8+\nQU7x6H1tXPnNycrLyL23ury9xNrd1lA6Oj1Mt6SjpKShnqGuz04/Ny4mISYuMC4vNEJfZkE4\nOD1ORjs6Su3jY1XmyMO6ur++trfC0l9XSktGRD04Nz7Hpp+eoKCenqOwxPBOOSwjISUpLCos\nN0hOQDk2O0ZEPT5PcGZWRmLQvbW5uru3sbrPUUZJTlM+PT5ITdSto6Kgnpybn6m42EkvJh0e\nIyYmJis4bNhXP0NLUEQ2MTpUZGT8zL28wb7E2uHH0mlhYvtp6XpPV1VWz6mhn56cmZuiss5O\nOCkeGhofKS42ROW/vNhEOTg0KiYpMDlEV9rFvry/vL++vsLCz9rPz83k82Rldc6on5ycm5ud\nqMlLNCsdGRcbJC47ULyqpqu9ZTwsIRwdISktOErfv8LFwLa6xMjFusb7ysO5wsbpzq6cmJuc\nm5eetDcqIRwXFRghMkPOrqKgprDBTSwdFxUYGx8rRMy7s7m9vcfncXXGwr/JubKvr7O2uZuP\nlp2dmpuuKyAkGxQQGCVCSsOknp6qwlM7IBgYGRwcITJuztq9xNNINjM4PlHHr6mknp6fqK+2\nnYyVnp6YmLQkHSkWEA0ZKEEw7aOkqMDW4TUbGB4eIB8qzLXY373NSS0pNj41SbyvoKCdnqWr\ntbKVjp2cmJGbyCAsIRMOEB0oLC27qKu7WlpVLhwfJScnJTq8uGPMxNM8JSk8PztpzrKpqqOi\nqbe7rI6QnZuVjpzTKuonGQ8THCAfIE/UxU9E+lssHygqLSgqTMG6urSyrsHKvbq9wMLNzG3r\n709JSUpd49jDuK+ooJ+hpKmprcD9QzUyLi4wMTIzLiwuMTY7PUBCPDY5OTEtLS4zOD9T/8i6\nsK+uq620t7a4s6unpJ+foaGlq6+73U86LiopKCosLComJCUoKiwzRE9OS2Z5UkU+REY/P1Pc\nwbi0tK6wub/Bu73Etqyqpp+fpKivsbnNX0c4ODgyLy4sKCkmJiQnLTQ/TGRTWWBHOzc8SEM+\nRnHMubO0sK+0tre8v87Eta+uqaSlpayzr7S9wvZJPzcwLy0pJycoJyUjKjE4PEROUU5GQ0JB\nQEhP+dK+sK6usbGyt7zEys22q6uppKOnqq6vtMn9U0I8NS4rLCwsKigqKygrMTY9Q0ZJTEI9\nQ0BEUEtP582/t7S1srC3uLi3sq2qp6amo6OorLC5zVxAOS8sJycqKywtLzIwKyktNz5IS01f\nWk9CPj5ARU/Xxb65ury9vby8vL+/tqyppaCenp+mrrjNUEA3LCsqKS4wLSsrLi4tKy89REpN\nUVxeU0U9PDs9P1dvcNLEt7S3t7Kvr66vraqjn6Cip6yyuMlWPjAqKSYoLC4vMzEuLjEzNDY9\nSlzs815QQz5BP0E/R13yzcG7s7CurrO3ure0squloaCiqa20wfdHOzIuKigmJicoKistLzA1\nPE5e/O3t3PBTSEde4/J249XWyr25u8vLyMLCvrayq6emp6utr7a9zHhORz82LiwsLi8uLS4v\nLS4vOkFJV2PgalZgXvnu8+vVw8jIv72+v8PJx8jGv7+8tK6tra+zt7e1vMv6YEg2LywsKysq\nKywuMDc/SV1428/QaVJWTE9q6tvPxcLAxL++vr/DwcO/vr2/wsTBwsDCycK/v8LOdk1DPjo4\nNzc2MjIxND1BR0pUdutmV1FWVl378Ozl1s3Oy8nKxcTDwcbFwb67u7u6vsTMy8zT5F9VTEE6\nOkFHRERCQ0dOW9Cn8B/eIM03I70qzT3DnqE6PS/8zyTXPbdBycGrqq+ps6Srqry5tb3ITzw2\nMzMqKis4Wk9e7MPMb1DcTi0kHiAcGyErMD3mta66uKyqu8aYjYeNkI2NkncjExoODAkRK3a1\nsp6Ym6VKKRwXEhEVHC9Lv6ymp8VJNy8qIiQvz8CqoKCWiYSFj5Wdnk4VDQwUExgbYZ6Wl52e\npMQtGBEPEBYaKD69rKy0aDQiHhwcKEm9vauclpiemIyGipqhraQ5FwsOFxoeIdCckJSeqrHN\nNBgQERcaHSY8ta7EOy0lHhgVGi3LsKuemZOam42GhI6cpqGoIw8IDxYeGyO7mJGZqr3bSSYT\nDxEdJCs1u6CkuTclHhwXFh89xbappZmWm5WKhIqVpLClTRsLDBAdJCNAo5GSnLj5TD8cEA4W\nIi48R7Ckp9MsHh0cGRghRLiupp+bnaaVioWNm6CmnV4eDRAXHyEfPKiUlp++ck9GHhEOFiEr\nLze6paW9Nx8eHx8dIjrctKymoZ+bj4mIkJifoaszGQ0QEhobIT+plZSYoaqrsjEZEhYdIyIh\nM8+48TAlKC0qJyw/1Lqwr62ppJKNjJSYmp2eyDMZGBgZGhggN7OqqKqtp6e4NiUhJCMeHB4t\nQVNGSPi+tr7Lyru+wtHV20o94LenpaWen5aanavJfTEsHhscHigtNkDKrquvvt5DOi4mIiMs\nLzlEWM29u7m4ur/GyephRzgzLz3VtaupoZ+cnKGmtrvNcU42MC4zOz86Njg6OjIsKy81MTVA\nZ9XgXUNJT1NOUlry/mFQS1t74ui3pp+fpqakn6GpsLu7ydlWPz49OjIsKignJyorLTE9as/I\n6l1GP0A7Ojo+TVBQRUFETFnizb+vqKKgoKCfoKCkqbK3ubzBfkI0MTItJyIiJSstMDZAVnBR\nPTk7PDcxMDA3Ozw9Rmxt7sy8tbOupp+en56dnJyhrLGytsRONCsrKygmJSgrLzQ5Pj47OUFI\nRDs4ODc2NjExNj9JUVBZ18fAwbqupqKlpqCcmpyfpaits79uOSwqKiosKyoqKy4vLjAzNTxA\nSURAPTo7ODQyMzY+V+3pybu1tLe1raimqKainpyepautrLPMRTIvMTEuKigoKCcnKCwyQUpK\nVO/eZllAPTs5Njc9PUZWaNfZ3WFuuKyqr66hmpaZnqWmqa27YT01OTY3NC0pJykqKyosNj1D\nQD07Ojk4MzM1OUBNft/e2OHi3XxOQVeypqitppqWlZmgp6iqtmg3LTI6OjkxLCkqKysqKCcu\nPDYuLzY+RUI8P0FMZtnedvl2d1tNSEhaxaifpKmkmpaXnqqsrq207TwvNDw9Oy8sLS0sKygk\nJS45PDczPUVPRj8+OT48PT09SVRYST1DSlG3mI2OlZ2blpmjXi4sM0o9NS5AwrW+Si4qLC4u\nJh4fJzpMPDY6WWU8KiAkLDY/QV/NurXQycC50zjalIKEjJ+ckpu5ExIYMc0tNUOknrEpGBUZ\nGhobHz3LtLrWz+1PLiEhJC06S7+xqavAXjxJ2OdPNzqtioCEjaqblrsfCRkky0Yoy6mdvh8T\nFhkbGCI0zrzl0EBFOC4sJy0tNk/es7a+utDkODjYv69sUceOgICLsaeUuyEIGDHPSR/Ln55P\nFxIZGRUSKMiy+jJXzEApIzBCOjI4yL/F2+Wur8g7ObGrqkw8vaOGgIiTt5qgLBQNMDE9KC+k\nosYgFxsbExAc8cJeNkaz5C8oL146Ly1awN7Nz7GruF48xK6u1kHJupGAg4usrZpAHAkdO0c/\nKqacrCgVGBsTDRI5sr0/YqmoQCcqWU8sKj61v93Msqy5bDxHccrJ7V5xr4qAhpO+naAvEg41\nREkrUZ6gVRwYHBgPDRzGs8rPqZ/bJB4uPSklLr+zvb68tL3ZPCg83qivxMGuioCEk7ifmioR\nCzNBLSIsn6JKGxcfGxAOHqujtES0or8jHTfNOiEo2rdfTsqtvUhB99xfvbWwa2yVgICNqKiR\naBUIHlIqHh2nnMMfGSMfEQwTVK+0zKmZpi8fKUUtHiRrsb6/sKOq6zQvPVdc2L+wzZ2CgIih\nt5m5GAkVSjcpHq+bsyIWHiIVDBFGrqzYyJ+qRiAtWE8pIkPG21/Dp6fHOTXgysnrzK6vooiA\nhpSvna0fDA4qKygdUKKyLRocHxkPDy6vqr/Qn524KSpNVywcKdbFXnqon6paNWT7yUbvuLOa\nh4GJl6SevBsLEh8nISDGoq8wHyAgGA4SKMGpu7Gfm6w9LjdNKx8pTNFSXLCgq+0sOGFlPjXH\nuZ6KgoeSnpupKg8RHCElHkappcsrJichFRAbLGRVVaydn8s+Okk2ICErR2hosKOdqthb67PX\nTT7yq5aLjZGamZ/MIBcYGh0bHy9U11A6Mi8tJCAhLDtNya6mqa6xr7DBWEQ+PTs/XPBZQDk3\nOTtDXNG+uLaqn56ip6eop6+6tK+4ykkxLSooJCQmKy4uMjM6T29XPTQ5SlZKUWzZ3NvLxMXd\n6eXf2+HVxri3xM25p6OuurGsrbfBtbCxxloxLC4tKiosNTw7NjlCW045MjU/TEtDSm/f0srJ\nwsvW6vN88N7Wxrq8w83PysbNWGu+q6emqqalqr1SMi4tLSsuOElPQ0FLUj0wLS81NTI1QnjR\nx8nO411XbmhcVejFvcTJv7u9zk1K3MfBtKijoKOpqay6/jwvNDg6Oz9AR0Q2KygpKy4uMj5K\nWfLYy8bQ3XhaUFhJTXfLwMPLz8XGc0o8Pd27uLCmnp2epqmqr8NUOjY8QTk5PUI9LyckJigq\nLTE6SmVtcu/qeE1DS3XfzsO9ubm7vMDM6U9APTtD2bWwrKWioqatsLC2yNtYW2tdQj88NS4q\nJicqLCssNDxDRUZAREdUW1Va4Ma+vr23sbO93WJfVUZLdcOvrrSvqKSnrbayr7TI2unm4Es0\nMDIvKyYlKCsrKjVJRzw3RWrYU01o52ZIV9m/tKyzvM1kTToyPUTdoZaYnJuXm6lDPTosIB0l\nM09E8LivuUAtLComHiItTVx2u66sxWU/OSkfJC5DR1u9r6qztra720xDN9+aj5SYlY+YtSsu\nKhsTFSQ4TFW1pq3VNTAsIhwcJS04RsCtscdeSy8kIio4OUy+q6uxqqOjuNH5fq+dl5iWlJWd\nxTsrHxQRFR4qLky0qa7AfUEvJiYpKSw68r22sbC5XTYrJSMjKDFJ3bqtqqywsbbVSEi1mZOY\nlpGPm7c9PSoXEhcfJSg4vKy1xetRMyckKCwrMkrFusjVzWs2KycmJSg12bq5tKikqK6yudDB\np5qbnJmUl6XJYkAkGBYbISElNdfK72rhcT0yMjgwLzZR+vjwz8NnQjs8OjY3SOzez8+8t7q4\nuLnHvqmen6KdmJqltLzUMSAeHx8fIi9LW0xV5HFJPT0/OTg4Pj4/RlJYS0pOWFFNb8i8vLm7\nvcPM0NP9WGrFrainop2cn6mwuNM6LSonJCUoLjU4PEdLQ0dSalU9Ojs5NjxGTEBDYs/GxL65\ntrvG0dHmX19EQT4+RFG+sKyoop6en6SnrbzpSDo0LyopKiorLS8zODo5Oz5CUV9sYVtNWu/h\n3vzqz8/V2c/GytPrYGls/FhQTlffxbqvqKGgoKOnrLTKeko8NC4tLCwrKywsLy8xOD5GU97Q\ny9TnbF1hXXzbw7q5vb++x9JnS0I+Pj09P0RR0L23r6ynpKKlpqerssDiRTgtKCcmJSUoKzA3\nPlVlalNQS1VdXfvh1MnGv7u7uMnM32RcSk5IS0hLT1RYX2nQyr+wqqalo6Smrbe/8Es4Lykn\nKSktLzg/Qz89P0NKT05UdO3Pw7/GxMbM2GdZQlJE1ktu1kzBUtVeStVAzOC+tLWnqKOnqKqw\nu+tTOzIuLS0uLzI4PUA6Nj0+SklJ837P3tDN6+n0Xd77ZXBI209M3knT/uvI3cvFz7fDta+z\nq7CtsLW2x9d3TEM7MzAvMC8sLjQ/Qz9QVl3a2svJy+DR2XhtWUJVWT9eO9VTSb06yHL4xma5\n3bu4wbK7srK0rbatuLe56Fs9Oy4sLy0zLjFDT1ZJV0pCVkFLXkPaaWzfUMxSy7dBv0p+wDmw\nNcbAQrI/vsTtteuyr7Kkrqiqs67KZ0ItLSYkJiYvLjE2QFp01s/GwsvqwuplalFXTuRIT9xf\n0eJNx3FdTEzPP0TYe8LOyb+3qK+qo6Ofqqm0vd4vMicfHhwfJSgtN3u8t6+vsrfH7UxEQTc/\nQ0RPPF9aXdxBXN85ZGlAxk23vVyvca2yy52kn5yfm6asvDs3IhsZFxobHyQuWci4rKanrbjK\n2EoyLzU4NzdAS3Bh5cbRytfd8k1uWVVyTlPpzszEq5yamZeYmJ+vfDEkGhUUFBkdIzJvuK+t\nqquuvlU/OTQvLzdIbudmXGdhZ1xZWHBySVjh2cnOxsHX6OKxm5aYnJqYna1HLiYcFREVHCUt\nPsuuqq+9zcfIPCorMD08RWq9sr/O2dFqPTg2ODxGUuXP19XMvMhcSNyklJOampWUnr8vJCEa\nEg8WIy0+XrupqLZjQkZIMSgrOe3cx7mtqblqPT07Li0uMkV10MvKvre/bEhJXM2ilpaYl5aY\no8cvIh4ZFBQbKkHmzbusrcBGLScqNi8sOM2urrG1srPYPC4uLCstM0vPxczTvbC2Xk5aYs2s\nl5GUlZeYnrkxHBoXFBMXIz7Gu7qytMY8KCMoLiwyTbqpo6GmqrPoOComJSgqL0Xavry7v7av\nTjM1SN94oY+Pj5SXmKPPHxUUFBQUGSZZsK+xtbjWOCghJisuNVawqaOhpqy+Wy8oKSorLDlO\nx7W6uK6rvT07O0fYpJWYl5aXmqlzIxkYFBQUHCpgtbKvrrLDQysjKjE1R8elnqCjqrDMNyQf\nISQnLDjev77AysvhenY7NDlbp5SPlZaUlZqyMh0aGhcVGSRDw7i/vrvMQigfIiouOVm/p56f\npau6/ToqIyIoMj1Mzbqys8Xs0cV5OC9E0LKgmJeXlpier0MlGxcWFhkeLEjDtbSytsVaOC4w\nODpI06+hoqywttA+KiEgJysvOEXjw73B297Lx9xGPWy4pZmXmpuYm6O5NyYiHhwZGh8rOUll\n3MW/2kw6NTtGTFDNrqKeoKu6x08sIiImLz08PFbVx81XQkx8zG1Nz7Snnp2fn5+iqbtLMSon\nJCEgJCsyPEtr0L+6u7++vcDF2VlJSkM8Ozs8QUZBQEdMT0lBRlhPUeTYwrW2xryurqyioKSl\npKivuvE3LCciICAhJCo1RVncxr28vr2+y+Vv79biTDxAUU9HPz1HXlhJRERFRlJZW+XEu7nA\nxL61p6Olpaanqaq3YzsyLCcjISInLjc+Su7Ivbm7vcjeZ0Y/SU4+OD5FSU5NS1b17vd5bdzU\nz8K/yci5uM7s28u4rrCyrayrrLhfPDYtJyUiJCw5TX/Pw7u2ucLUZEpAOzhBxqyyYU7fWTky\nKys9W0lCVsu0sL/FvMbNe0E7Tbyrp6eloqOosfo1LSklIiIlL0vRvre1tLbFZUdDPjkzMDtU\naHD5aF9XQTk6PUpy3tDBu7/BwcvSx8xkYHV5xKmipKWmqay6PikjICQnJys517WurrW5v+JF\nOTQvMDM7XsXBxMHZTDwtKSwuMkvQwLavrq2ts73ITz9GRMOhnaCgo6mtxi0eGhodIic1zqui\no6muv1s1JSMpLjtT+bioqrfLQzEtJiImLkTWvreyrauzzM7HY0U1L02olpOYnqWntDccFBUb\nJC8+v6WdoLRJLSchHBskSrKio6Sfn61NKSAiJSQrP8exrbLHW0E2LzRRv77Lu7utmI+VoLHB\nzEIiGBkjPdDAu6+lq2soHBsfIyQuxaSbnbDUz8o6JiInSPdiWdezssFHLy88REfZurKttF1E\nw5qOl6a/u69FIRUZLua2y7+sqa80HBgbIycrQK+hn6nJUkdgPS8wP8G9y3v3wMxILSgvQUtD\n1a+qtOpFPKmRj5esrrC8NRgWHT2/vr66qa5SIRcZHyouObyhnKHAMiswP0lLWMSzu2M+RnXL\nYzcvNWNbX8m1rtBHMTynkI6Uo620dyoWFR5BtrS0say4OB0WGCExPFavnZ2qTicnMUxLT821\nrr5JPERsZDguL1zN/ne7qq/5LyxYmo6Rma6rxEAeExomwbS0sLGuYicZFx0rO0y9o5uiwTAl\nLDpfX2zKubxfOTU+WVc+O1rKzdS9rLRaMzE/r5OOkJ2vvEUsGRceO62sr8DF5S8eFhggOPfN\nuaSfq98oKTXSv82/v6/AVjcvRu5eOC4+4NFkVOPaZEE505uNjZSqut1HJRgbKbmnqrnxdTcj\nGBQaLH3Buaujp7I7KSg9vbu7zb69bjgqL0XoXjw3TcrS7tC4vNo+NNmej5GZsb3JPyoZHy22\npK29Sk0xIxkXHjTJurKroqnCLyIpP7S0s72+wkEuJSw9Tk44RN/IXUjBr7hZND+sko2Snre7\n8TcfGB88rKi02FNFLR4XGCNJvLWxqqesvTQmJ0q2srjQxc1RLyYqO2dRPjxJXU5Z3rqvvj02\n2JaKi5S7yEpXKhcbJbOmqsc6OS8mGRYbLsOvrq6stME/KSc8tqqtx2lWTD4zLzVK5/tNZu3s\n6Mq9xVA1MdmYjYyavlRBTSgcHC6snqK9PzEtJRoXGy+9qqqrrrvSOikkNcOrp6++XT8xKigo\nNEFbWFVec8SzrbDKR0DCl4uMlrZdNTAjGBkhy6emuzotKiYdGhwr2aufnqW0zDsrJTDlsau4\nykI5ODIzMT9OS0hOfNm9vLXAUTg2xJuMjJWr5EI3KBoaIFmro6jSPC0nHhobIj63op6msdc9\nLSkyPNnEwcdaUz5ESEVLQzw7Xcq2trrAz8dbVe6lkI2PnsE5KiQbGBghRbGmrcg6LCQgHyIu\n36ifnaGstWA4KCYrLDtJ/dXhaEpPRDo4OUnqva6moqezzmRoz72sm5SXo9YtISAhHx4iLl+7\nuM5HOjo+QkVO5r+6vdZORkNGPjs6PVjOwszr39bf8/FbXsu5uby+xsvLzsjIvbe0sri2u8v9\nTD86NDU3Nzg1OkJX4NrgY1lVYlA+Pj0+PDs7QXvMvr7Bw8nGy+Hbzbqytrm9vr7M3nDfysHD\ny87pYkc5MS4yO0dOT09GRT4+RUlk0sjDvbvAxsna5uj7YWdXTfviycjfXEZEPj9M58a/ubW+\n0fP66OjY1O/99e9IOjo+S0pRZNzW2OVVT1Rk69vfysLEx9d5dOTG6FtGRldW62F2711RTVRO\nb8rCyszKv8TL8/DydW5f6lNLQEBCQT8/T07sb3hYV+THvtLTy7a4v8VzdcrJbVxqWlpLRm/m\n795QRUA8SVXZx8HKxcnU3NnPcXTh3t1XSFRKP0NER1BARHVk29jMx8rM38jHx8HWxs9Z6U5k\nWkpQUt15aOz6zHxdSD7r78q8wbnd3OpX4UVWV0lORV5MVVVCUExFU09d4uvKwLvAwM/aY/h0\n5+tL39fK5FPhfWxTSvlhVeBv3utvwc3IzFrZXlvS0GdeW1hvTU8+R1pQRURV9F/i3cvN2N5p\nxtTcymXNzXJ9avbcX1dtZVrccPW7z8tfWsxhTTtM2XzP1u/NU/PuP0vmVW/bT11ORMroU8Zd\nyXXn8V3Sz8rVUtjqbMpiU/Ja8OZAUlA+U9Jf7cvkVkjDRXHxxbVSwby/2te7zU1DX3JRXkk8\nRkllWz5M+Fbj3lpIarXNYmTmyd1fX9VY3t3a1WDxZ2tXVMvY+WD4zdL3ecXGzOho7NpyTlbq\n2lxObmtPUFJJTFFa4tzZ3n7j3m9v1c7N4G367t3i22tMSk5RSUdNZuTc4trWzcrKzNTJxMnR\n4eltXVVNSkpebF1YV15i4ftYVVlzavbf2NXh6/Hl1d1uWVVYZd/W3OF3VVZeZWr169rY4OZv\nY19kc+zc2+H0fnFdXWPx49vd6Of07ndu7Nfbe1xVZenp7d//6vldW1NRTlVeX2/3/Hv6altk\n99vc3dTLx83U19na6Pv882pfeGdo/mBZT0lGT2JbcN7a09rc3ehuX/jTzM7b2N5oWFZbXFtc\nXmReUk9j3tTd4tTKzexcbPvq4H5uW15hVFFSYvLi2NnT2N3P3XBv+uTv+W1kafPc8/Hc2eRp\nT0RCR1Fha1593+z73Njb2/nr29vefm/z4uTm4OnxY1poZ1tgaWttcmts7+Tc2Nbc5/NWV/HZ\n1N3Z2eT7X2hlXFZYW2z+Z2VjWl5+7/doaX7j3+7rz8rN33FpYl1bZmJgb+bf5vRcX/Pc3t/N\nwrisWB1BqrrQOyVFvmJeT3zMWciwNSt2Tz1L899jw7jIt7KytkEvPfxtPje9wS7FwWi/SFdG\nWsoz57kzu7Q+unq+vklbr1hSvzXKN05ILsA14H40vUvvv1bIxfXhuslSXrw9a7cut2E2tDjJ\n0kXF0U5ByTJexDTHw0a/YUiwNMC8K65bUK44wLhA1so5y282v0FKtke/vj+6dznMTE3RSvHw\nOtFRQM0/R80/3LxOxdVfuEt6uT7Kx1fDZ+zLbdvvSHZNT2E8SGb21ePVWtPKfsxOzMrau0zj\n1UrbPkJQRH1Pc8LyUudm2t5H39fFy0zt7uHdWl5OSmvf+Vdp1MTK31xV7uXXZ1TUzsnNc/Ty\ne/RNSU9Tf0pKZlvgatrI2sbhds/e3Ffm71VXT1Z52/Xl59/01M1fTlNwa2FpZftoXV3s81PT\nycrS2cvUzOdOUlDd70k6Pf/aWERI9dLqXEzv7fbVfszIvry8t7u5wt9hSUU/P0VnvrGvr7XK\nSTMpIB4eISktO2Ppx726u8zGy8bFzrzFxLqup6CYlp2qveU/JhwWGiMpOE7FrKSkttVXNCgf\nHSEuR+rBuL3G30cyLS46edDawaefprG5vtFKN0itlZaepKqjxi0ZERobICY1sKCbpbe42T4n\nHh8lMDpE+r+vs9c9NDIvLCo3zLGusaynqLhYST4wLkCsl42Smp+lrjEdEhIZHCcuv6Kdnq7H\nTjUoHBoeLl/BtaqkqLY7JyEhIR8qPrqnpaetqKWtxzIoKjA85aGRi4+YoK/PIBQNDhggOtKm\nmpieuz8qIB4bGx85sqWfoaCkvDkfGxocJCtHu6KdpK2+ydtYRCoqNlm5r5qOjJCfrss6HxMP\nEh010q2hnZ6q/iseGhofISlLuKKdnqazzTcmHRofKku+tKylo6vEPT1XZEkyO0zKsaOVkJKc\nq75FKRoUFR0tTbyro6OqxTQjHBkbJjdOuKmgm5um0TsqIx4dHyznsq2urauvyjsvPk1IMDFa\nuaCXlJWcoa3ONR8aGh4mMW22qKWtyzspHxwbHS3YtauqrKuoqsJALi4xMTU9yK+utcfX9Es1\nLzZJW0NE9sGvoJuYm6Ssxk4sHx0eKDZgx7ywsLtXMCgkJSYzab2rrK+vsK+7VjMuMTg/R3TO\nys1lYE1HRDY2QNzFw9PpvK+onpebqK7Bei4fGxwmLjlPv66ts2Y7NC8sKS1FvK2rrK+vsLPS\nOi0qMDc7Ss67ushKPT4/NywtSMS9xce4rayrraOdq8RPQkg6LSUsQN7oUOLUvsxBMy82ODlB\n8Li1ucPO08bCYD05Ql1dU1zfz/JQSjw4QklAVM3FurvCvr6+uqufqcDFz9tUNSYoMz1APFHO\nuLLNWFZdT0A4OWHQxb/Cwb/DeT45ODs8Pj5EYN3V1dxiW29eS1Fta+7Nz866sauhnaq8xeNP\nNyohJzVIW+W+tq+030c/OzY0NkTx1Mi/vsDJ8D8xLSwuMTpK1rmxr7nJ0NBuQj9O6sjAcly8\ntLOroqi1vPxMPTImJS01T9bEvLavvuRQPTUwLzE+TWHOx8e/x1ZFRT8+QE7fwbi0tLrTVlFB\nNj5IWcvJ+XHIvLm4sqmtt77iUj8yKi0vPPzgy763tL3fSzowMTY4REddysbEwMxcTENCTlf7\n2si9v87Z4exnQzpL3W1BQVTu09zbt6KhrrK1u8FQKyYqMD5GSuS5r7bMXEk+PDgwNkNm1+jr\nvrK501RNX1pJQ0dc1NlXTGbcbkVHYntrXkhEUV/pvaygn6asrrPBSy0oKy42ODxWxbe2wNPf\nYFJANDE0OUBsyb69wtDtUD86Oj9HS13Xy8HA1fnc1OdjTEpTUFFh1rWmn6GqsLG5z0gtJiku\nMjQ4Rc+7ur7O3PhoRTQtL0HbxsK/uri+5kI7PT45NjtEYOXf4+HPxtZx5dfP0lVLWVratKah\npaipq7C/SC4qKSkqKi5B383Jyu5r7Vk9NTjprbDpXc3GzEssLEdnUEc9R9HF0NPY9tDB1WJn\n59bV4GFsz8bFvbqzq6uzv8/lfVY/NDE2PEBJR0hq293l7+nKykk1NjY5Qj8+UXtmYWV31czO\nycvHxsS6vcG8ws3L3FlVY2XfyMjKxcPKeUhBPz0+Pz9EU+HU3tHHx8ttRD9CQ0hWXHLf9Wxm\nUkv86unF7Vxh9+Fn1szKxcnSx8PZ19Jfdc5wUU9KS2rjY11abNDR91JVZmftY1/n39PMxtJX\ncOBQSk1HTV/wX2jpVNDOaG1qakts22HdzPj51OJu13Bg0mVLaXZncevpzb7H3XDn5F7lf0/S\nyHd061145lxLSElOe9/f3OTdz+NgdW5k+1ZRfm97ztxbXnTv9HthTlf8aF3n3WHY7mfY5dTT\n5fJsVUxZV/bQ4Ojh6frn1uvXztzvU0zq5t3JdlTe2udzW0pY2F5FUmpdWVBPYNrV69TXYeHb\nWElUflhkzc3Zz8nM09Pq7+1fYGp3/G7d5nTze3ZlTklfYF/02XxqycTL0HRm+3ZfSkJFVWJm\nWFLey9nT4FRYaX57T0pl0s/ZzsjJzs7OeVrV0G9OR0to7F1PV21xfeZeXdbOyszi3sjD1Nrg\nUFdYQ0c/PUZNU0pKbdjNyc3RzMfLy+Vdbu7t3vRQU3jk72JbUlZzZVBg+OHO3fLkz8vM1XBj\n2s/d29hp3c1kSEVg7mFhU1JpaVFXfWZ4b2B25dvpb2x6dGzh6lZVXXbvX1Vn4NfXzMza0cXD\nxdXW3XjqX0hMVFvq5uDa6vP0ZE9NSU5eTk9gYe7P2vhrU2Db52p3YGF29Gv96N/M2//8eOPd\n1txvYn/r3d3a0MzO611ZXvNhSEpb8mxYdNjOz+ZeXmJhZ2dge2xSafdoXFtv6fxy4NHYcWze\n1s3X8PRvfNfa/mVjXmlgUFLs19ptT1bd0Ohu7Ojw3+n37+tkfONpWV9x4vhrW1jmclBW+NvW\nzczKzellZ11ZW05OY+54UkxPYHnm1M7O6/nt7dDHytJ8W+ziZ2p4fmRNSFN9ce7jZ+Td/Wno\nzcrpU1f51Nv3W3bV3F1BOkJMTFpr1sfLz9T4btHO4Glla87Hz99ecPJZX2p3YUxN+NzU0NZz\nT2ro4/xaWVL46uf07NZ/af3Z7Ec/S9/SbEFG1bzC4nfYvbzRY+vYXExGe8bcUUxP79NeU0lW\nb2JLSHlw8uts5dXMzMjYfGFeaFhNVPnK5FZZU+DX3enX7GZlW9XH5mXn08TOVVBe2c13U1ff\n0fxKR1Jh509RVe/je1FNVnvX4MzMxMrla/nOx99YYtP6cG5cXEpPXF9JR/TWbVFHWObv333j\n0cbI2XFz0M7f3s3K03JLUN/pXk9YZWrZ4d9OR/fde1Fu6N7sbuHKytva5lhKWFrc3k5EQ1Zd\n7Gfw9OTgaN/m19vVz9B6R0znyc5XUGXdyeNx1cp8fmB6ytZdSlRlXPHWzMbYXEBFTF9KR+rX\n20hN8NFKR27Pxe5f1r7h/lLu485aT/PbzFh7ac33TW3Y0HhlY9fd3e/qZ05aZ9nke+jMz+rd\n31pKS2b5W2Tm03dMS/XS205W3szMVFvc1FU/S3vMU0jYvbrbVPrVbUJDYMXJTUJP2cxyZOPN\n7GXdy8Z059/YaFzu8OBj5/rmfnBZT1Rc4nxMTk1efkZES+rQ1tz70e1abNS8v95c48rfYmnV\n1v181s3i31he1951T2JaVExFTk7ua1hRTt3aXE7d3trf7tfCxFhV5cnLbEhn3uNPVODPzE5J\nYcnMYl/fx+pa6s7V329j3M/dWlx7Xl9GTFpKREBFRklFQlr3X2jEvsHt+c3GyMu7w8nIvri9\ny9DGvtdKQk7nblRL8fRbVmJjT0Q6ODQvLC4xMzhATmF098rFz9nLvbWvtL7Lt6umpKOfnqls\nMC81LysqOmbP9lNNTz0rKzM4O0FYZ0Y4NTo6NzU9b8bLyravvL+5t8T3b2m8rp+amZyqxD4u\nKiUqMFzEvsDhTjctJygvP1jYy81TOC8uMDY9Pk1ZX+Xf0dXV1uXVvbOzusS9uK+pn5ubpr1O\nPC0lKTH60MTEy+NCMycnMTtHTk3v3kkvKzE2NzQ3TN3xUG3Du8HPybS4ym3qubmtn5eWnae3\n9DUiICc5b9fJxslmOC0qKi43XszP2fdLMikuODw8QWdoSEjax2RIUty/tK64wb/AwcuvmpSU\noLHERy0cHCM3TlrCsrLEPCwpJygqO9m9sbr7QTk7MC4tMT9IT/y6tuF2z+J177m6wcLCxVy7\nnY+Rn7G7vy4cGSE2PUHQq6SwTCwpKSMlLlLLv7i920Q8MConKjQ7Req5tbi+u7phRsmxuVpa\nvq+xsZ2SkZ660f8uHBYZJjA8YbKmq9A6LyokJC9JybKst8zbUjIjICcvOD39uK2wvLzA+UZP\nzLvC1uO8s6yel5Seq7jJPyIcGyUsMUq7qam4UjIoJB8jKjrUurjDuLXSNSorLCwtPMmurbSz\nrK7UOz7Mvko6TLiuppyYl56ntdY9Ix4cHyYuT8OvrK7DSzQsJSIiKDZJ9MGtrLldQDwvLCkw\nRtC/urCtr7nDxcLHakJT3cy6o5mXmqCnrr8zHxkZHB0gKUy3qqqyucN6Oy0pKCouN1HJvLq+\n0kg6NTU8W82+tK+urrG6ym9PRTk4PU6/o5uboqWhpbw1KCMkIB4gLFrGvb68ucFaMy0qKiw0\nXL62u7/E0005NThDUln5yb29xMHBw8pzTD9KRke5n5qdoJ6epbw6KiYlHhseLVHfz8G2t89B\nMCwrKikvVrWxu7mwtXc+OkE/OTpNzr69wL7AyVVCRlREOEq3oZ6foJycorpIOC4mHRwfKzlB\na7yvtNJORDguLDFMy9vVvbO+Y0hKRDYuLjpFQU/Hube5ub9fSUhKUrafm5ycmpukvE00KB0Z\nGyApME+/sLTA23xGLCMnLzXutrStq6y+8Ek0LCkmJy88Zcm+v7Ktv0hUTjhFpJminZKPm6yv\nuDweGRwfGhwuzNzdtKzAQDg4KyYmKj1Nc76wu8fB0z01NzYzPVzRuKyoq7u2t1w5Psyrsa2c\nm6OvqKzZMC4sHxwhLTM827S6zNbeOSgqLjQsOsbbSfrEWD5GUT47SWxLWb+7vLi1usjiwsnD\npKKknpueqKmxxzcsKCIeIysrL0nXZVddUjgyMy4sMT9DRGTh9f3KxtVz7WthX+zOw8HIv8fR\nz8psxKOrppudoaSot887PDAlIiopKTdCQEFKQjowNDQtPV48fuBVXttWWlxOUEtY9df0y8/G\nurzNwcf6ybWxqZ+gn6Gmqa+7wvc6MS0qKzAvLjA1MywpKi0vLzg7Rk5TX2VjcfXx1djOx7y8\nu7m4ur/DxNBbWe7St7iqp6mnqK2yuM73SDw1MjI5NzU9Qz03My0rLC4yNDc6O0BKTFJ61cq/\nubWysLK2vsbL3HtbWU1GUs6+tqynpqioq62zvdBdQDk2NTc4NzQ0Mi4sKystMjtCSU5PXmdS\nUlVS6s3Hwb67vLu8v8TFzfdORkZeyruyramlpqmsrrG5yl9JRD47OTYyMi4rKScnKi00Oz9I\nTl/t3eby9ev5eN7Hvbu7urq/ytrf5vRratvHt66rqKenqqywu85ePzcwLi4uLy8xMTIxMDM1\nNDpEWPbPwsDL6HVrYGFv6tnNzM/Q0dflY1NRVVzv07+1rqupqKmqq6yyvdBMPTo1MC8vMTEv\nLSwuLjE5QE1bf+LwdmVmau/n5+XczsS6trrDyc3bZVhQS0tNeMS4r6upqqqrrbG71FhFPTk3\nNTY4ODg1Ly4vMDI2O0JHSE1RVVthbWd/1dDPyL++vry8vcPFytPd/mxke8/AubOwsK6trrC0\nvdFfRTw5NzY1Nzc3NDMzNTc5Ojs6NzQ1OD1GTVb1z8O8uLOzs7KztrvBzdzuY1Nb58zEu7ax\nrq6vsre9zF5BNzQ2NzUzNTc3NzY2Nzk9P0FERElQUlBaetfLxMC9vLq5urzA13pmUk1MVVtt\n28m9tK+sqqutr7C1wtxYQjc3Mi0sLS4tLzA0OD5KSkNCREpHQkdVW1T2y8O7s7CzuLq9xs/c\n7/Pe52JZ3sPBu66pq62rrLO+zGhHOzIuLSspKy8wMDQ5PUjAvzw3Uu5CMjx6XEZyvLzIu6+1\n3H3M3ExMZ2laadXNx7erqKaioKGkqa+750AxKiUiIiQlJiktMjpGVGVeZ2xiXVho8Obgz8nJ\nxcC8uru7v8PHztfzVUpHR0hJT1po8c3BvLawr7Cys7W9xdHyTj44My8uLzAwMTY4Oj9HTlFr\n3dXNycS+vL3G0dnrXU5KTFRia19e/+Hj5fx95t7d1c3Gvrezr62tr7C0ucl2STwwLCoqKiwu\nMTY7RFFv3tnPyMK/v8LHy9bt8fpfUE1NSUlKTFNeYW3vz8nIyMXBwr23tLSzs7O1u8LR6mBL\nPTczLy8vMTM3Oz9ESlBl39HJxsK/ws3nbFxWVU9JRT8+QENOcejUycPExL68vcHCv729vby7\nvb+/wcfV71lHPjw3NTU4Oz07Oz9DSVdv7e/r8ejs+uxsXVBPWVpZUllcYebUxMC/vb6+vby9\nv727wMnEwMPK2nRaUUxEPTo2NDQ2PUpr1tHLv8K+vLmqvTLxSjYiHCoqIR4rV01IvqmuwLmr\nrcLDqZ+lp5yYnaOhorZJOC8iGhgaGRgcJisvTb63s6mlqK2xuu0+OTUrJCcsLC4+/d3QuKyy\nwriyzebL2s+poauimZygnZ6sw1w0JBsXGBYWGyMlKknKuqyop6eorbjSSzcsJiQkJyovO0zL\nubmtqK+5tb3+XMSyua6fm5ybmJylrLw/KSEcFxQVGBoeKTM6d7Stramnqq+40Eg0LiokJCkt\nMkPNu7Oqqa+ssMnIZT3NxsyqpJ6bmZqcoa24Uy0mHhkYGBgcHyMrNEbHt7Ctq7C5vM9LPTIr\nKiosLzhNzbizrKisrbDA2FNgw73Cq6eknp2dn6Oqt1k0KyEcHBsaHR8jKS49ctC8trOvsbm+\nz007MS4tKysxO0zKurGsr7CwuMDT4ri5u6iqpJ+en6CnrbhbNysgHh4cGx4gKC0yQF5uwri/\ntrjP31g3LywqLCwvQlzJrq6ppKirqrDLzMbA2b60s6mqoqarrbZnPjMmIiEhISQnLDA5VNTJ\nw7q5wMPPUkc5Ly0qKissND5KzLKtq6irrKu3v7++xbystKimp6CmrbDJRjsqIiEeHiEjJS0z\nQezNw7y3uLq+zd1dPjEsKCYnKjM/acO3rqqnpqqrrr3Pvr/Is7mrra6oq7a7y0Q3LickICAk\nJio4Plq+vLuutby3xVU+MSsoIiAjJS09TcWvqqWfoKSoqrTJ8GrOctu+tLKup6mttL53PC8p\nIh8gJCctPVvXvrCvtbK1ymZGMSkkICAfISgtOHu+sqiin5+go6exw85XSte+1bSoraqlpqu1\nzVYyJSMhHR0jJSo++dm7rq2vs7jFSDYvJh4fIh8jLz5yva+opKCdnqSnqLTOzfg7Nz9APFXB\nubOsqamsra/AVEAzKSYnJiYqLjI2QlFMSk1KOzU1NTEwNDk+S9y6rqmjnp6kpKKnsbW8Zzw6\nOzc0OUtfU+bAw8q8vc35VE9FNS0vLSsvOT49P2/O1snJ3933Z1FNTGbkU9e8uru4sq611bmy\nzvDYW0c7NTxGSEHsek3T2Mm/xt/Qxmjv5Hp+UEZbdUhMX09DR0lLRkj5yl5S98nOcNPAvs/Z\nxdPx6dltSkr92VxS3OBTVvDRz1RQ30hLfW3Y4e5ed81M2ltYxP1Y2svq3W/NxslYfcteQUh0\nWVFP7Mt0P1twXWV22cjWaGZ32Ghx3W10Uf7h335a3d5iTVX42eDQysxeUN7E1lZO1upGReTB\n/mXX39j6dNDfVlT42NVjbORZVUFZXmJfeM/vXlfn3k9T3Mza3NXL0enOyr/S69piW09ITEBI\nPjxHRGTRz8vM4c3X3NTRydnl5F1WZNvKz+To0uFXXu5uSEVQWWRMRF/T+WRv7cTGXOa/3WNW\naNLuT0hN909Vb1/SU0p/2cvb4+F5zNnf5+PJ1MrQ4NRfZltYb1FVUdlaQUE+XupeXvzNz+/e\nzcjWe+LI7G/V3cjbTXDfTD1GTkxXVkpmXX5lafjiws/Mx8vCwLrFytJvfXdhUEo+P0RHTHBj\nT2b76PXcxcju3eNSX1dodVxg3tTa28/O6dFPSmNJSlFaYlpSYt/S4nHZys7K397N5XZiYPFs\nZXZxes7Z2sjc4t7d72VbUkxLUU9nWVVaaE5SWFdp1fFkXm/zZ2h12+Xn0NXO3tzP2NHVduPR\n7nZufGtPfWhR017mx+/r1OjQ2dXb2d9fV05AQEpKUE1EU0xOUk3+z9fr3e7e093Iy9bEw8LE\nysPeblRQSklXSlZrdtnP0OfX8P3hXmVrT29oc/NjYW9vau1URVZYR1BdTm/Y0+DV3s3U1unU\nz37Q2erz299jX1tPW2Jf3dBcbdPS2W9k7/r/T0JcZ/jvWWXV11f01d7obnHr3OlkVe/PTExa\nXuBJRmrO3HjTx8HF3Xbt6P5sZnDj4HNg4tt8YllLU2JTU1dkYfj08s3N39zU0M7lXFfv9GRq\nYnzqYFNe72BeaOXLx+pi59HnXUpNX2ZYXeLP1tvV0NPmW1ZjY1FPXvLnWk1d09Ju+9vP2WxY\neOh0eN/W5Vhc3MfK1erk7mtoX2f4aVVJSE9faVFNSEFASHXXd2zawsDDzcm/vcHO08e8wcvO\nz9lfT0dCQz47PUFM5svCv8fXZks/NzAsKy02Qk1T7MS5t7q2srjOffve07+sn56lqaiquT8n\nICAfHiArTrWpqKemqr1BKyIeHRsdJCs3S9q3ra62tbO6201KZ820nZeXmZqcn64/Jh4bGBcZ\nHzXqvK+oo6KrxUY3LiglJiw3QEVQ69fcX0M9QD86PlTVubC0tK+ur6ugnZ6jrK+zyToqJiQi\nIyQsPvzOxLu4ucNuRTs1MTIzOT5GTFRcVEhAQkto6W/wz763vMS+wczNuqigoqalo6evz0g4\nLycgHyIoLjhNz7u0tLzM81tGNy8tLi8wNTxJVujOxsrNxb+/xsO8uL3D1d/Oxr64sa6ura2v\nuMbgTzwwKyoqLTI2O0JLTldhZXHm4ef0Y1NXWl1kV1BSWF5jburWzczW1s/PztPd4eDa2tPK\nw726ube0s7W7x9f0WEQ8OTQxMzg6PT5DSk5NTldkY1tTVVZPWVpZbtzMy8rM1uby2tff5uze\nzs7O0M/GwcbKxL67ubq9xs3X7mhPRkRAPj09PD09PDo3Nzk8Q0hReNfLycrKycrP1dba297b\n2NPY29vh4O9wY19peN3Nwby6uLe2t7vDy+JURkJAPj0+PT09PTs6Oz4/PT1ASVd/2Mm+ubq7\nvsfN23peUlFSW3v95tzWycjO09POztXT0MrBvbu9wMTM22pOQjw7ODMyNjo+QEZMVWTp2dve\n29bX1M7IxMTGy9PpZlZMRUVGRk1Ybnnm2tXY7+bQycG7uLWztLe7xdD/TkI9Ozs6OTc2Nzk9\nQEdRW2/e0MjAu7e1u8PO335cTUVFRURCQkRISUVJV3jaysG/wMLDw7++vb7GzdHNysrR4W9i\nYFhNSEVDRURERUdLU1ZWTU1VYVtZaezne2dfZfztaVVk4trd5+vn3dLOzs3LyMnKycjCv7/D\nxsbJz9fnWUhFQj89PDs8PUFFR0ZMVV767dXEvru7wMrQ2HRQRDw6Ojg5PEFMZt/UycXAvr/D\nxcTGw8TIxcG/v7/GycjHytRtTkU9OTc2NjY6PkJLUV5qbXxm/N3U2fPy5Nfedv3l6HZeWVNa\naePPzM3JycvIycrKyszPzMnHyNHefFlLSUpLTE1RWWtmW1BPWltdWE5OT1pUT01LSUZJTlr8\n3d3p4tTJwL/BxsjIy8W/wL6/wsfN1dfP1PhYTElCPDs7Ozw8PUFLV2r+9ubd2NTV53t0X11c\nW2lta3h38NzTzc/OzNHT2NHLy8zOztfY0s7P4H5rU0pIS1FMR0lMUVZWT01OT1ddY2JlbXXw\n8OXSzs/S0M3N1trc4eLf09Ld4d/e3efvfW/9bl5fYGZnb3dlWVJUVE9OSkNCRktRX/bb0c/R\nz8zFxczS2dra09TY6OXpc/F2cG9+8nRfbf7i3W1jaXnz+3pxcvX2YlZST1RUTk94q64yOStI\n7z1MTFZvyby7vb/Fwb+9ucPX72HsyrxONSswOjE5St/b0s/DusC/zup/auDhT+HMraxHKyY0\nR7tk0rRidzo0Y9VHRU5W1sLD0c/PxcZiSG7T0NXayb++yvh+5t1oTEZMZ1pqbWfy625tfmpP\nRj1AS0k/QUhNWG/lzr/CwMXM1czXb23p6mpaWM66s7e6vr27vdBZTWvBvMz2WlZCLiUhIyMj\nIygzTdfMzL64usHKxr+9yu7nuaGXlZicnqCqZiUaFxkbHB8t9q+oqa2vs8s6KSIkJyksPcmy\nr7rVc09AOTI4RmTXy8K1qqast8ZeTlbOu62mo6WprbjJSi8pJSQlJygtPFfh1M/U1s3V71lN\nWGFiZ3L37/xjWGPi2tTV2d3d6W5bTk5MTFBVZ9/SysW+vL2/wcHBv8DBwcDBx8zYfVdGQUE9\nOTc0Mzg9Q0pLT1lpefx5XF/e19jc3tnb3/hufunY4flvXnbb09rs2szJxMPEx8jIyMjHxsbO\n5V5STkhDPTs8PD8+P0dd/Xrm28/X335SSUpUYGr85N7f4tbPzszHwsTKzdLRzcvQ5OPX3PhZ\nS0hGRUhJTVhdYmR6/m5v+3NoXFpeXl5bWWfp3uTo2s/P1dfTzcvP1tnf1c/PzM3P099wZWNf\nW1JIQD09P0hNSUpSaH5p//fz5d3Wz8zJys3V19rY2d7Z29vr49bc6mtUS0lITFFWYnnv7uLX\nzsjM1et6fG9iYWBbXWh3bl1YUk5KS1VXUE9PUl/q187Lwr28vsPKz83I0l5WYPvj53doXU5J\nRkRHRkpRWV1oet3Rz8/X2+DpfmllW1127eDP0NLZ72heaGdrYFleX2p3b3358Xd1cO7c1tnc\n2tjUysbN1elwV0lDPj9GV+3d2MzHyM7b3dzrfGVaW1dORD9CSU1OTlNfY9/Py8nCvry+w8rQ\n19XW297yaGRaUUpHR0dJSUtIS05TWWrk2M3Ev8LGycjJzNPd3e5iTktNSklKRUVKVl9r6Ojs\nfffr6N/h4eXr29PXz8/R1PZu7t/ndHRrcPtqb3tz7N3i4Ojy9mdPSEhJTUxLVvbXz87Jx8rN\n1eJnXWn62dbe3tjY3XpZS0M+QUVIS1JYYXffy8C9wMjKzNTf7nbxbmBdWWJveu19amhr+O7+\nX2BfXHbp3+Xs8GxYTkxZcW1fXV5kb3vn19LPzdPb72loanh4dHlvcW168eTg2dXW2+jweWhp\nXmnv+npfXl5gef1nYmfu5vphWlxeXlxZWGZ2/fx8eWzr4eHcz8rP297b3d7e4d7sbvd5X1RR\nV15bZvft7efW3OLh4fZhWlVQUFlaVVJYZW7v4tvV2NXU2+Dv8ev08+3z7/VrZl1f9+Dj8PTi\n1djt69vb3uh2bmVhX1VRUF1fWFFPT1Vo6+Dj2dHNy87V2NPR1uDe4P9yYVpUVmBaV1NLTExN\nVFlh5M/Fw8bL1Nfa3dHP3+N+eNrXTVJHR0tAbF1FS1HDvepi7cvIz97J1b6/VUUtLjZEW3b/\nctbHws158uXSyd3k1sO6vcfUzM1ZQT1JTUQ/O0pU+eff2t7O3ltOTU9NT0hEV/fIxthv9MzA\nvOg+P8+3t8HVy723u8tkRkZZ09RrUE7TuK+35zkqJyMfHyIpOVFYYFnrzcnfYNK/rq22rpyO\niY2dRx4dHh8aGyXNnZiduEMuKiYeHB4pZLOxzkg/ST8tIh8mRbisrK6vr66+YDoxP8ufko2N\nlqdMKBwWFhkpz6Kbn61OLCAbGyZ2r6WpuVk4Mi0nICApOVzrZFHmvcR9Pj/Ps8JKOsaThISO\ntSAfKiwdGB7Mlo+aXx8bHiAZFyOslZSkNCEkLy4nHiM/zMdDMDvOsrj8Q2WyrLRXLTuri4OI\nmiwcHickGiFBmo+XuB8ZGR8fHCH0mZGbYx4bJDMvKy1ftsM5Jy3tsLdNMTreraa3Rywts46B\nhZU0FRsfKR0iW5yNl7kcExkkLicrYZ+Tm8AeFx46z0k3L0pYOCYhMNyzx0VBz62jqts5Lz2w\njoOGkzsZHCUzJS5PopajRRYSGSg0Ki08rp6ozS0oO7+vw+1U0N4tHhws0bh8Li1DuqiqxUg6\nPlKmjIWKnCkZHiw4Lz/InZyqMxkaJD89LSg2r6i4OCIusp6wLRkcP8xJJyQ8r6rYMC/bpZ+4\nLSYuSaiNgoeTMRgdITgtTNufmqxBFxcdLDYqKjK1oarmLCvcpao0HBkvub07JS7VrdkvKjW5\no6XDPUtqxKiPhIqZJRQdLNM5SE2mnLQzFBUfPE8uKjO2qbVCJirPkYuxFQYPxJqnKiYrq7Yr\nICPApKHVMTTfrK6biYePuxUYJvHfUEnNnKOyKhshMkknHR01rqWxOigvvKrFLCEtyb08JShm\ns7w5KTS+qrLbXMSuwDsxs4mAibYQEC+zzSIhPpaSqx8PGjjKKhodY5qavh8YI++kkps3FA8j\nvqjNYl3TuTwpJjq5pKO0vGA9OzS1jYaPrB4fRtgzHyVMmpyxLR4pPEEgHSm9n6w8Hx8y2bWb\nmL0kERk7rrG/bkm+SjMuQ7eqrsbQT1g/LC63i4KLqhoZK0stHii/kpSsJhgeKy8cHCm8oKw8\nK026smI6QsCvxDotP/rG301PWEo3O3a4sL/IbEE4KSg8pYuFjakjHCUvKSc9rZiarjEhIigm\nHR4s17C9+GvdyVE1Lz3Uu73bxbm8cjo5Ss3TTDtHvbblQEBdXzklMKmMiJK/HyZAWyskN6qY\nnsYpJi4xIhgaLbeotPVxxbtaKSY8r6Kkrra/bDcpKDb97UY7RtTIZ0U8OT89Nz63mIuMmsst\nLS4pIy/Cn5ypVC0rKiIbHChstbfFvK6tyTMoOLyop7LNak82KCUvTN9ONzM7SFNMRFnT0u9H\nXrGZjIyYxC8uNSwjKVOqnqTINikjHhobJ++uq6ysq67KOy0xPmbe4czAxWo1JiIlKC89fbyv\ntsXV3dXW+c+3raKblZObuDkqKzIwLjZTxMJkNS4uLywnJi/graSntczyTDMqKzlwzuNaSVVk\nSzoyOEV9x7Wvsra7ydPW0M75WO+3n5eZqMloV0UsHx0mRsjG/1jv8EItKDN1w8xcVeLGz085\nNT5OT0hIUXj6fOHLx8HGzMTAw8fJw7u0sbK2vc7wTj08SvPT3GRkalpGNzI3S9vU32JWXFxJ\nPj1KdvNlT1zYxsfSd1NNS0pHTV/Xw7u4vc7b3M3Jw7y2srW4y1hDP0NGSUxKRT49ODY4Oj5J\nYNPMy8fHw7/BytbX2ndYXPTZ2uRcS0xOVlJadd7Mwb3E0N/q6ufc3NPUz87dVkE8PEJHSEpE\nQEVHTWD+7+Lb0cjExMbFwsLEzNrteGxocW7n8F9PRERMdsq+ubzH4l5hWmJq+uX8Y01HQ0NB\nPDk6PUZSX2hneNnMxsjKxb+9vb2+v8LGyttqWV3+cWxfVk0/Ozo8SGXg3trZysTGzNbY19Xi\naFZdZ2lPQj5ASE9SVFt20Mza4+nt6N3Y5Ojb0MnFwL6/x9tmWE1HRk9aWVpXX15WW2H45Nvc\n8/jYzc/Y3XRaV1VaVFRo+GBVTVBo6+Lf6Hji0c7S2NXLxsznamhobGNeXFZZWFBQSkdLTl35\n1MjFxsrOz9HU19bRz9nn7nhlUkpITFpYUE5TUFVYT1ps3tDY19bPy8vLzdZhTUlIT1pYUFVs\n19Xd7/ft79rX1tPKx8rR3eTq6d7qb2FYUk9MUF1ZS0dHREVPad/Mw72+z3z59Gxqf/D98Or+\nX1FQUlNOTFZ63tXW3d7a09XSzcvKy8zV4ubr9HteVlFOT1RbUktFSE9QUlh55dnPz9bUzszV\neFlWVVlZUVNk5tbXzcrIyt1vW2jt1uJ9a2l58e7/cO/se2pea2xZUU9SWuvV1uDj5unf29ja\n7HVrV1tfZXr072ZZUFZeZ/r97OPU0+Z8c/Li3eDi7+vr8nL+3djge11VXHBpZmh55+NxXVVd\n697c3dTPzc7Z8mJdWllNSUxVV01KT1ty49/a2tTMz9nY0s/MztvtdnVlWlZbYV9eXWNeW2n9\n4+LvbGFeXGjo2Nrg6P9mbOTc2t7xeP3f2NxuWFVVVlJXXFpdZ/n458/KzNLe3Nvo2tHcwq5l\nNzM3b0s/TlFNWdzOz9HMycvOz9DhcWzz2+lfT0xSWEtJV2rtdm/n3tp899rb3dzZ5ePU1ur+\n7ufb+Nvs6Xdb7VVQS05aXul0YVd+XWZ/3tTV79xdV+zg5V5a5Mi6ts3eT0RIVuXScUM+REtW\nbdLNzvVbW09NVG7i3Nvd2NrWzMbM22BcYmJhXvzZztfZ4PJnY2ZMR0pVVl5oeOvaz8vM0t3o\nbWdXYvLr1tjp9urqcldOUU9RV2JebvHl9Wjq2NzZ2ubm6eXa2OLZz9LT4XptYFZaZV9cXFdw\n8nv+au/U1N/sbWv88HRiWl1yX1JNVF1v933q2OFtY3DayMjKytp8cfDe92dzeO58Z2FcUFJT\nU2rr19Ta4+jX2t/i+nxsV09RTVttemtXT13g7nZzeefi5enq6/7u39/o2M7S43xz7t7e8mVX\nW15dUlZhcuXd19jd5X5rYVtYU1Vu9/Lm3d3c8OvX1NLW5V5VYH19aF5XUlxiWVBWZPrz79zQ\n09bf3NbRzMzvWFdhZF5fXFljfXpkZX7z7+vj5eff4Ot0b/zf5PXzemxr/W9cVFBUV2b87eX3\n+fj26fLo535fW1995+7s7ePU09/wePzk3+Xp5OzzfV5XXnFyYVdXXlxob23q39ztaWpj89jQ\n1Nl4YWptamRsdmZdWVtnfOrl8eLUz9Ld6PPt4tryY19q+Hlu6+Ds4+Z0XFBba2dhZ2t95vtn\nZXd8ZV9qfebc2dvc293W1ur/7uvo+f5qXF1XVVFXY2ZlWlJYZO3e3+ru3uLm4drT19na2d3o\n3Nrf4u/zb2BaU1JOUFlddX9oVVpu5Ofw5dvd2dbf5+jyX1NPU19kamls4tnd3+bl3tvj5d7b\n1tnmdmZ55OlrVlNdYVlaXXLe5/ty/N7f62tdWmF/6vDo19PR2u5lZmNhX1595fp7b19pamb3\n6XljaPfq8O/f2NXX5un37+Xo6fN7+vl9bWVtZmVra25mW+FnX1FUaXXt4OPd3uPg3dfc1+bs\n7NvU0dDYcVpWUEpMUlVXWFdecO3X0t7m6d7a2d3p4t/taV787nJoa3Ftbfb373f7e2hwcWpq\nefbp3+L9bfXp6fL0//Lc2ul09d/Z4m5cXmheXVtWVVdaYmv74dzo7urg2tbkZFVZdev6aube\n1tbe7Hzs7HxfU2L23dvp69/g6eHj7ujrd2JdYGRiYWVhZV9r6uxpXVhSVlhaV11s9NnUz8rJ\nytDc3+H1d3ViYmNveunqb2FeWl5eXGVxfvX38NLM0Nvq4OHj/VtbX1lWV1JZW15lYmJtbWNb\netjb2+jf2OH359nV3O39/O99cWBva3Tm6fFzaXNsWWBoandeXGNbXnR3+Gv93N3b4tzLyc7g\n8PXo6f9qbHPu4N/2WllVUE1LUllaYVxWYOXV3N7i29fc3d3x7OTe2+r5ZWBnYu7h183N1/Nu\ncG5pVE1MTV9ubWN63tjd29bW2et5b1xdam7z7l9PXOvedVVl6vZ+b2Fec+bpbmvn0NHv9tzc\n6VVZfevm/fDucGL61Mva921jal9q+npuUk5fYuPlemNOVXP//V5j7OP6ZfDMw83U19HY9mhV\nVmNsYUxOWHro7OTY411iYPvd79bMz9z54+lmb232eUxITlV1Zd3a6+R05eVr49bR2OrQ1vNe\nTE9dfexhWWR93u9zffrk1fPp7OTX9urn8mtOSk9R9+xw71p33+3b2srTZV5Z39ht+uLe32Za\nZ97W/WxQedd962hY8/fp4Vz97lp28ung/mt2U1v538bJ0Mrd6XxX81hXVE5OTGRcZmBg93vu\n4Hbc735xdOrg3mrt6fxsWd7G5+/fy7zoeGhd5EZGUll3Uk9g3+x+dt3M1Gje33ZhS2vpfux1\n1c7ndGJp+3hZclt08194bnvb3dnY/ulo2NHi2+XS0WlXU2z+SkdSc1dMU1zu19TK1Vzsb+Du\naNbJ3vdi2dZiUuzO9E9L0d7ZVk7d6OpMT9bJ21BP6dxr8eXYY03k2eRkWedgTVVaytdlZlrN\ny8zS32JdXVleTFhxX3fPztpeSWxtXlxb3eL9X82/x97ZytZfRmDje1ZPUO3efE1RT/3dWtHv\n08rg6U5VfW1kUm3XTOPc3NLnxNp2Ruvcb/dLXnf20cZq2Fnq5Ub2SXllP2VeTU9az8jcy8i7\n2dzfxsXtXmFj7VhG33F8S0Rf6dPoU+tt3t5lWUVaXV7pR1LDxN5N1L7J0ePqaWtcU0ll5OBK\nT8zeVPHWwNg/SOHQ3V9V2Mx8UvHP3M5N0tlezeHV+z9eXmRROmR0V29l12FI7dTG7lbN3M19\n9brVznduzk/M2lrcO0ZMO+1KRuhP2d7cyMvVZt/B4djL2MTu38g+PD5GUDtO5dRSUMi8y87c\n6ftHVMvVevvjzNB8519220NLUVS+/fR1VMjP3XpHUdrb7EZ66czcSv3fT3xyVM9Y4dTNwnZz\nXc98f0ti309ZP0bLzsn7eGxNa+JpZu7gztzEvPrGclhFN0j4bFjQ3sj+7MbvSk9F2987atPE\nvlTFtMpiPlBoP1dN61FOv+jcaczDbkJI/k82SkLe1mO8yNy+yrrCZchH1exYxj9DTjdaQEy7\nRz036L909te/xV7Ot7rE78m9505Q6dw3PVNMST5f2c3e/NLpRNhd7dtE6lrMw9rz32NuR9Xt\nQkpSwdh1zcrO2kruzWFbcWfXYvvF21Be3s/jQVNNcFpa2tlgdde9y2hl99tLQ1VmzGVZx8N1\nQnDZTD/nv3g8U7zAPT++vno2WL92UFp+1fLT2P9WVcfmvm3Ov9rHSGbYaE45Ot5eXnxS3kdR\n3GXZVUPRyk1WYbe8fcTExnXzw1ptWEthP+3oUnNXzsldzuHsdkxDQeJTUklPx8VDSsu+vz9V\nvcpaeMO1Q1zI0XhEZXFMQ77TUEBTuFA4RFtPS0zwwc7Ow768xszQ9U7CYl1BQMjZYEhIXXU/\nS01e20VV0dZT6t/Kfc67yszSvtpKcbtYVULbyDBObGP3PdLtR1paxGY4yLu5yErT3lxwUlxU\nW3tt18LacGrZSD9hxss7OMDJyNRZr+bSYFPPTXZCTHVWV0RLVM/zz1r3tFVISeu79TlqwMJP\nXcTB6FRiTklOQl3k48vhw8DSTF7h9kxMwrt9St+7t1hOVfdLMUBLSUlE4b1E0c1+xE3Iv3P0\nVb7KTtHPvEo439N8N0FVeU5ft7r3WOC/zTxd/FxIPtjDeljPvmY+VtNsQkTf11fEvr/C3M77\n7VZTQ0dDTMfgTtXP1uo7xNc+T2153uljwMvow+TH10FNTFtYMU/w0ulOzLnYdePQzT/R2fPh\nPMLFVc13aNM9f1c12dDK4D7Ky1d0ZM9fXcHMTF1NzGo9T9lxfllI1s9+eNLBwN9IycXny2z9\n623oTGZMS1NG30JsTUXfQsvpY9/GvrrBwMnV7jvOSkc/P8P1PmrCsVg013feNjRoSsrM09m7\nrL5o/bzJSUZKS1tvUuNOUupR0154U3TNe9pDUWPwzlHR4/HH1M3mYtJnTM3NwkhOxGBTRMbw\nSlNATUZW4mB9vPTL1dLG3lW+3l1dT8nlYEhLXPhdXkR72mLIb9/qeNrOT1RIbMRYVNazvUr5\nzsRKNWbZRkZO2r1K5+pB2kRleEm/01fb2rvMN9284m1M4s9CTOjey8fN935O2mRF3kNjUj9V\nUNLT2tJjy9hn6EfvXVq9xs/JzMjLVH5pQ/FIcj5LUOpoa7/S6VbRz1Jc0cvcPEHaRd9xWsNP\nb8rz1N9XzlpGUnG/b9B8ysji19vYTtFeT0hcbVBQTsthQnNc5dD25t94yd/t9FzbztTkbNTM\nXuZ2TFVDVk5CREnY2GTa1s/A9f25bU9oSr5ZUMTr0NVOzWZC8UdRdG/Cb0jjz9lNTOf2W+Rh\nz2Rdy3PFYt7IVV1Q721HUFjo7XbDyfnJ2NPuW9XYTUdCQ2Je3etO1s9eSdnVyn5QftLdfM3B\n621348xXQ8/nVE1IXetqU1dDSnXW1Mzdvs/21Ne/1lTfzOhHP1Hn+jxmx/tRSl/8REbRzez+\n07/g4s3R51z30FY6c9TYUlLF3FheYddkQn7sfuxtzc/cyMn82NhyVEFHW0FI7PTjam3R+U/+\n3s7/WU3R18/YXMnM6nBd39FOb3Zt61TYzHVtaufZV1R6/HFkW3hnVPjb6nxWXe17WlZU++ls\n3c/c3OXczeHlz/LiZWrjVlV96ltFTtjjV3ngzNTrz31Y7N7S2m/hfWF7f/lXVV5MSUxi7GF1\n19zZzdbZ9/7T18/259Haz9bwX1tjU0NISVFv8W9ZVm/hftfV6mtg4dDa5O3f2Oz10M/mVltf\nSUNd33ZWWczK3urPxtt68ftZSFvt3HtdaPnr+VxSVVd8ZVBq3MvQbuHN0eFfYG5eYV7j2O18\nfOXn62tr3WxXW1Bs6d/V4vDk2ezw7eLtWVxvXVZVX2laUmLt49fW0tXd29TU2/Xmc25hUlZ9\n92FQSVddXmzt8u7mzMrZ29bN1O10ZGNs/GVefHZpXFBPTVNo/+366fPs7d/T09PQysfR2dTZ\n/FhOU1FJRUJMXPr0bWBv4fv9dWt89+bZ3dbTzdDU1d7V2uduWlto6tvf/nh963JVS0lNUU5L\nTVt549XX5evUy9Pidmx1593n19PO1G1dWVhiXFBMTU9TXHnYzMzM0NTW2Nfr+vt47OZ2bGNa\nU05OTUxUXGpod9/Y2tTO19/zbG9sXWzv4d3Z2/T84+Df8PXqb2pnbF9bY1tTUWFo79zi5PH3\n5/NdXG3v49/l/Pvm3uhqYGvt4uR8cGlrau7f8eHc2N/X2c7O5WNVV1BJTVpORkpf39v5/O7d\n3Op05Njc5uzl2uro1M/X7/vi2eHt4tjdXEtLWWBfV0tT/t7qaltgbvp0UE5h3cnGxMjdeHRe\nVE9c7PNtdvFUTElGSk5v1M7Mx76/wMLGy9DT9XdtVk5IS01KSklUTFdh79XQ3lpcTUdDUPTZ\nycO/wMHK1uLd23dgeu3v4urraVxhWl9m+u/e22loX09JREJBRkxYa+PMzs3J0s3Jy9lnWVBX\nZOTb/Pj44tfT22/h3tPbY2dz3flbb9zV7WFbTlBZZuftZl5ub+Th6HNjaWxlSlR4cvnZ3M7I\nzM/V19XjbFJNT1FcVk9MT3n0+Pfi2NbLy9HUcPvg/Ghed/VWTEhP7czL0vlsYlRiVFBj7+DR\nysrdc2jq5t3aY93c7t16clFYaGhfW2hPTlVd8Xrf6v55bNtgVFZb59jez8/Z0dbP23vg2Fxe\nY/fYftvmcWFcZu7eXVxZYlVOWuHpYXXt7uNg5NHSbWPnbl5TZ3Ps7nPXz9lmVX5dTuLP0N1n\neN7c3NXP2f7k6WROR15mT0ZdVll8Y9fn3MrKzNfKzsvOWk9LTU5KZl5aYW3R9mJh4dRSUlt6\nxNPe+HXqek1KVn7Yz9LOzNx+5OFh8Pnd/eXTbFlMTlplZl7Z4n3oTfrUTU9XYc585MDq3sbN\n3/pP9lVBRFx4aFNZxcjfWE/vUEJT0M25v+dvUl9Q08XMUkzXyWRJ6tBXWu7Q2M3CUkZE3HxM\nSP1uQE12ztZs+9hyWmVV9dvP7GNizs58eePO215VYFhGWunI3ejdzcHYdk9S0OFbXurfUFJ5\nXshyRFNa9u1GR+r0auBu7dh1XdPi0MLqacjC01xKXG1VS2Ta4eLS70lGUF1WT23i32X6z+bi\n7W/q3mzz3Vv83/nnTktsz/1YatLK3Vl2z9ru82RlX2RbYGN42ula7fRzdGvm4N3s3tzT62N2\n51hYTUdWWk5MT3j8eX7lZF752Of4387DwcnLyb7E1dvQy9hw8MzSdlNUZE4/Ni4rJSQoKigq\nNO+/vb61rbC7uKujn5uYko+UnKa5/TglHh0cHBscHh8cGBUXGBcUEhgeIyl1qI6AgICAhYqN\nUg4CBg0RHjiVhYKJk6pfGQcAAggMDhcuzvI1Li8gFREWI1iqioCAgICAhY03BQAACAwXQ42E\niY6ToB8HAAAABgwQHnywv1A0IBUXIixlh4CAgICAhI8PAAMDAwYoiYCGjI+Yni0BAAQBBAot\nsLZUTksjDwYKERgk9YCAgICAgYa2AAAGAgUKm4CAgoeLkzoAAAAAAAMcpaG6yq5LFw4VHSQy\nT4KAgICAg4a6AAANAAADl4CChYyPmEQAAAcAAAU1lrBGu6kkCgcNFBsmPYCAgICAgoW5AAAc\n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\ngICHqdC6HwUFHBkPKZiTmaSWmU4aJRsPDhciKyzHoKzT/zodFhIXFxQaNkNGnYaAhISAgIql\nrUsOAAMLCwodqJeblIuMnuxKJQ8ICw8QFCi0qrOsp8UxKSoqIihFz7+nk42KjIyNk6HoNCgj\nGhokNjI6Ybm/SjlnUy0jKzYwLDZURzo5ODIuMjpL+8m9tK+2u769vMjOv7u4r6mlpaiqrLPF\n1OxPRU9fST04PjgtKy4tKiw1Ni8zPUI8QEpIPENa8vK+raqqqq23v8b1QD5O3cC3rqqoqams\nuc3wUzsvLi4xNz9HU2FVTkQ5LywsKykrMz5U3si+vri5vsC+02Jryr69s6ikqKuqrLvadEw6\nN0VQRlfVzlxCSUI0LC4xMTA7UEpH6PZEQUlFPjtE6dPEsKqpqaipssrPzlpMaOzh0cK4u8fL\nymE6MDExLi46PkBb0NLoW0dAOjtGRkRd1MrEtK+ys6+vutXd90tETUc9R05OVN/N2Pvk5kxB\nR0k+Qf+/ureztb/K5k07Nzo/Pj1HdszJvrm+x8rRTjo5Ozo6QFTszcG8wc/SzOBYUWrr3MG3\nuLm3tbzbS0I8ODMzPVDCSzVDQtVXc8bsVnjY8Hhf8djd29TLzMnVyMO8rEQtVkhSOuu13U29\nrtFJU1NBOFSmqk04LzYrJTo2KTLYvrizp6CqtLW2urbJ7DErLCwyPmPJyre1vMLObE9IODc3\nNj1KTVZYV2FYTPjS2se1sLWur6y72+5VOz5YXkdIT01MQ0ZYTEBJT1P208a7wsm9vdZaTURA\nNTc/PDQ5QUlf7M/Jvru6uLaurKusq66zus5oS0JCREI/RE5MOzAvKSUjJCMjKTU4LTFMR0B5\nu6ecm4+Lj4+RmaTaKCMaFxogK3y9r6mrvGg1JB0YFhYYGyEqM0rm6FlpUz4+t5mbjomJhoyP\nm8MfHxANDxgeScmkmp+prOYpHhcWFRYcJys/62dadGE7Lio1NNuZl46JioeMk525Hh0SDg8W\nH03Jp5eeqKzaJhwUFBQVHzQzVra5ycraQi0nLCs6nZySiouIjZKcth4eFA8QGB9A6aeZnaSj\nui4hGBUSFB4pLG23ub63ukozNiwfJ66kn42MiI2PlaMyKRwPEBQZJkivmpybnKpSMR0VEhMY\nHSU5UGbNxWw8OSkoJiLGn56Mi4aHi4+Wxy0lExAUGh81bKelpaWtQC8fFhMUFxwiLD1U5eZs\n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\nBggRKcGuopyVk5vKHRANDxMZHzLIrKm4SisiHx8kME7DrKWmrKiRg4CEjqGx1DYWCQUJFzqt\nopybmJmmNhQNDRQcJS5krKCkzygcGhocIC5cuaiiqK+fiYCAh5atvlUkDAQEDy+ro6Kdl5Wh\nRRYNDRMaHy3rqJ+l1ycaFxkaGyNFrqOgpa+qkICAgI2hsOwqDgQCCyPGpqqfmJOeOBQMDhYe\nICvfo5mg1icfHhsUEhtJqKChpKemloSAgIyhvdgmEAMCCSPKp6ObkZGcLxQNERkdITC1oZ6s\nfSseGhQREx1Krqelo6Kon4mAgIaXtb0sFQQABRnLqqGdkZCbORUOEBkdJDmsnqG2PyogGxMP\nEx9StauknZ+yuY+AgIWVra1TGQYABRRJv6ecjo2W2BsVFRkYHC2yoqzNPDUnGxEOFSNBvq6o\nnqCtxqCHgICLm6WoKAwAAAgdLu6lkYqOnjglHBgTFB5Pqau50uFDIxgTFhwoPcWtpp+oxk2e\ng4CEkp2Zqh0HAAYQICXNmomJj6dWLhoQDRIgb8TNzsC8SiUXFBccIS/psKWmqLS1joCAkJuT\nkU0PBAkPGRUfp42Kk56tvCYQDBEdKC0157e8RislIB0aGyZUvLWspazAxI2AgZGXjJA7DQcN\nDw8MH6OOkpSUmKsoGBYbGBgdME5PRUpoNB4ZGR8mKjLbrq3GQtCHgISWjYCLJg0TGAwFBimn\norCRi5G9MTMtFQsPHSQdJO2uwi0nLy8hITXLwcuyqazNZ4+Aip2Qg4w3GywrDQgNIjM84ZiR\nnLu9xy8WDxETExcjNT85ZLnEOUO/s7e/r6eiqKqioLS3mpCfsJ6YqUFEeTojICktJiAuaE0y\nNT0wJiEiIR4eKDQ4OEq9rKeop6ajp7Csp6uvraWuy/na40Y8Ss7P2+DG0l9GQ0pMOi0sOjw1\nO0E/ODk2MS49atDEvb7Bwr3B4tC7uby0sLfOz8pQOD/Sym7nv77M92D3WkU9O1T8YlpfYE47\nPTo8S9i7wcrE29/eU09ITU5evba2yca97EY/TmZJV9nO2nbqzeRIMy9TZPFoxbzKfFZkSs70\nxMrcx2bO0W1HPXBa4c7X9tPZ/2zyzNG/yN7ebm4/WFo/PjdAQU/gz37S8UFNS3jPyby9uLS1\nwsK4skEwx0FDWTVEPCtRUUq7vm/Ivd3dWUdWQzVNTVvFy73B3UPg5UV9P8vCwbqwt7e1bdNe\nQ1c/VlJNPT9OPVZLSG5V5t5Z799b8+g4QltSYtzm09tgteNPy/jSuvDXycy5x/O4w1/MYVhn\nSD5KPFzYT+bTWM/iSE5KTk9AMEBAPlc/UX/LwLi6vK+3r7TS7tnqTld4eO36S08/WFU+TkpE\nVtzuycK/ye/Fy37ZUD5MOTtCOktLSPX+1sXBt7m8yMzP7NN239LeyNjZ41dPTD46OThGSezL\nz8bCxMTFTEE9Q1FCWV3iy7rAz73H5fHY8mVr6Pdd21BP8N1hT1VTTEdUS0FV/mXez+3SvsbC\n0/RrTnNMTlZf3dLMzr+/v9B0XEJDT0w+XeNnZ8/RXuvQ0tnVSElUWf/vysHEzsndTkxDPUZG\nNzpETmPpwsK8sr7Pv85dzt9OXXHkd3j56Ezcy1BPYkU7Rjw6V9jRz8e9wcm/71JvWk5e233v\nxb7JzMzN2+TUT09sRT9ORj0+Pjs5OklFTNpv9tfUzMO+x3zQxrm6uK+xrrW6vMTT7ultalVa\nZFRDPTYxLykmKCUoLCs0O0FTT09TSmW0q6qclpaWlpierbfNPTk5N0BUW0Y8PCwiHx0cHR0e\nISUnLTxHR2ll9cnLurOim5qOjpKOlJ+o2D4xKS0uLUBHNT9CKiUhHBwbGRwgKC4zOkld2MPF\nzMbGwrKypJ2djpGUj5qfpr0+NSgrLCcyNjVHQC4sJx8dHBwfIycuNT0+PUVOX23n0b+3r6uh\nnZyPkpSRm5+ovE9HLS4tKi4wMT1BMSsnIyAeHR4hJyorMjk+Unz/3cTCvra4tK2hn5iRl5OX\nnKKt5EQ3LS0qKy85O0I+MC0qIiAfHyIoLS82OkRb9WVYWFz82tPLwbqrp5yUlpSWmZ6nt8lV\nOTEqKCwvMzs8NTYyKiclICAlJygsMjpGU1Vi4c7N0Ol+zcbCsKecl5WUlpmcoa2+WTktKCks\nLzY9QD05MSkmJSIhIyYoLDA5QUNETVRiaF5/9/v93bihmJKQkJCUmqGswkgzKSMlKjA7SU9F\nPDEpJCAdHBweIikuN0NOV3bcy8XJztXi3NvAqJuTj4+PkpefqrxMMScgHyMnKzA8RUM8Lygl\nIR4eHyIpMTtCTVlx2NHTzc3Kv72/wrqmmZOQkZSWnKexzD4uKCEfIiYtNz1CPzYvKSMfHR0f\nJSguOk7hysfBvLy9vsHIy8a+u6+dlpOQk5aZo669Ry0nHx0fIyYtNDg6NjAtKicmJygrMDtP\nbX7VzMvGx9Xv63l+z8G4ubakm5qXlpian6u0zEAyKyIhJCcuNzk7OzUwLCcoKCYmKS04SVzl\nzczMxsjW2tHNyszLw8bAqJ2bl5aYmJymr8FFMSskIiUmKS41PkU/OzMrJyUjIyUoLjhEac/N\nzMvLzcrIxL6+xcXKzrOgm5eUlZaXn6u1eTMqIBwdIiYuNjY7PjgxKyUjJCUmKi86Tm7p08a+\nu7i6vLu/wsjLzNPVxa2inZmYmZqdqLLGRzUtJyUmKCswNjY3MzAwLSkpKCcmKSw0Qk1tzsW/\nvL7Cv767t7vDv7/Kx7GlnpqYmZqcoau20EMuJiEfHyInLDI3ODUxLyonJSQiJSkuOk/Tvrm2\ns7Cvr6+1ubi6u7i6wL2vqqSfnZ6foKi3zk82LCkoJiUqMzs8PTw3MCw7MhcUHisfHDa2zVms\noKu5qaa1yrersr+2rbO4ppyio5mXnqiosT8pJyMbGRwjJSc0XVw+Pz0uJCAgHx4kM03PtKqn\nqausr7S5ubu9urvAvbq7x+TTtaapqJ2anaqvuEwpIB8cGBccJzE8Vr63vM1WOiwlISMoLj30\nvbe1s7O5wMXN39fOwrq5uri1uc5fvJ+dop+al52s0josHxoWFhoeKTRJ1r68z1lCNSwnJCUq\nMUBlzr6zsLGvr6yurKuvsLW4wt9pTUQ9OTxcwLauq6ilpKi2+TwxLCcjICQsN0FPX2V8+mVQ\nRD09QEdEQ1xrZvFe69rmwsjCv8bCzsrP0s7wXFLqua2pqKSfnp+lse1DOS0kHx4fJy4vNUJd\n5VZDQURIPz9OTEr3X0d8X9128MnNvb7Av8PBvsjJd1Lo4rmsrKuln56gpa6/bDUlHh0cHSIn\nKzrqv7u/y8vbSzYvMjAuLzQ+UWTXzL+2tLK4tre4ydrYYP9KSsyonqOgm5eZoLLcSC8eFxca\nGx4lM26+tLKzvVY5LyomJCguODMw6s3Jw9m2trqtsKuvs7O8vmVFTa+bnKKckZCbrtBWKhYO\nDhMVFBkvva+vqZ+frz4tKyAXFRwpMDbpraitr7Gzuv9fzsnVx7Wtt76nioWamoyInCYoLhsI\nBAkSExAatpmgqp+WoEwhJCQWDhUrOjNKqZ+purKtyEZCTEtu3bCrs7uqiICTnYeHjygZSREA\nAAgTDA4pm5WlnJGRvSgmJxMMDxwsJ1ShmKGtpKXOLy5AOScr3q+8UM6YgIC8iYOHsBfaNgAA\nCBYOCCeYjbWei4zaHC8qDwYPHSYeRZyVn6qfpV0qKCgtLCw2w6mt7biqloCLpYeFiykvsBcA\nBREQBxK7n6a5kI6gK0VDFgoPIhsaPZ+dqJ6Ynu1F2DIdIjowKk+vxFzMwpmAjayIg44huKgY\nAAwWDQgdsLO0pY2Wt0qvNhAPGxoTHears6qZma9VzeIlGyU5KiJLoK4+vKm7kYGbm4eEqTOp\n6g8FFBMNCy25s7aakaO/x+MbFBobFRw93LionKCzysE9Hx8qJyY52q+yrqCoVcaMhamehYi/\nQpvsDAcdFAcLQeQsxpSUt7SjyBwdKR4VIPxSXK2fpre5xzIhKCggLFttzbSlp7rF252PmJ2O\niJmmqKceEBIWCgoaLy1HnJihqqO/KyEjHBccL0dCsZ+pvK22LiYuKiMz9lZYu6mxvb/MnI6V\nn46Im7CppxgOExcJCx85L8qYmKCrob8lHigbFCI8PDuunKexqrIuIigmHSA8VzvEq6y/uKmT\nkpaUio6hoqfmExYVEQoVJiwyqpqhpqCnNyYjHxUXKDAzdaifrbKt0CkoKiAgMEtWyq2mrbK+\nrZiUm5uLkaCooVEYGRwUDBotMjGon6u0rL4oHB4dFhoxQ0K0nZykrLDfLygjICQuPfq9sain\nsMXSpZycn4+OnqGjrh4dGxoOFicyL7uerLessy8iJR8XGipJSLmgoKmrtU4pJCQhIC1Sdbep\nrKust9S4n5qcnI6RnaKi0B4cGBMMFyArLLWmr7WsyywoKCEdKkLz4qmfp66rvTsmJSMgIzNh\nXrutqLXEt8a/n5iaoo2Rna2j5xsYGRYNGSQ1MqyiqLKsvy4iIyMeJDfNyrKmpaqzzzovKyIj\nMDlA3a+zv8G2ujLmpZuZnoyOmqahvRoXFxgNGSZIO6mdpba7wikeHSEbHzHQv7Ofn6qy0jos\nKCIjKTJR0rCorK6uqso6rZ+gnZyOnKGurSkZGRYSDyEqSnKgpKuwrNEsKiomICw/xrWxq6q2\n3kYuKCUkJy87VsCwsrKsuNJvv6SklJuRkZqlxtwbGQ8YERkjdsu5oKOpy7tPKh4kJB8pR7y7\nr6qstNVQOi8pKTE8Sc61sLC0srR3RLGsqZ2ol5yisrtCHh4YHRcoMLvKqaSmrr3FOiweIiAl\nJzdY1cu+tsT+5F03MzpKSPm3sbeyqrDPVamhtqGfnqGuq3c+HyYbHBsjLT/Bu6iurLrCQDgt\nJiUpLzBE9MC5vMDF1V1PSDg9St/Tx8PGwMnVtq6unJqqnZ+qTU08IRsYJR4nLbm4sa2lrNJR\nSz0mIicvLjZSzM3Rvb3fbN5rPjk/Q1Bl1sLE0byqqaWYmqKapKo+TScfGBsfHiYvyte4u6qv\nt/1uWTgtKzc1NTrdx8/Qv7nE1fHmWkRAYk5CTNbGwrq1qKKmrqmpssjdcz4vLC4sKywyPU1h\nYHLJxM/q2/1cWllMPT1DSEdNb9be3s/W2+XX2X9h99fJwr67uri6vMLK1djW0+lkWktRaVdH\nSVZQTEZOS1FaXl1VWElCOzcyMzo+P0lf2ci/u7u/wr++vru5ta6tsLa1ucLbWkxFPTk5ODo+\nSUlKSklDRkA/Q0ZOXfliXFROQ0BDSlRaedTAvbu4uLu/v769vbq1sbCxtLe93E5GOzMtLS0u\nLzY5Oj9JTUxNTEhPYebmz8K6u7y/xsXEzu1u8+De2NXf2c7a4O/bzMjDydbV0OZmWlE/PT47\nNzc7PEpX59vXz8/a+PLg2s3KysnDxcbIzdV0WE5OSkpSVltRXGB95ujv69rLxsTGzuVjWUg9\nPEBASU1Xd9nKxsnR1dTW7+1t+fnt4dnXzsfFz2lbUU1GR0dGTFFbY/bk1+XYy8XHycbJys3V\n7WRPSUdHQ0VIT1trX1tpcGlfbuPb73Jy3dfJxcnLzM3rWlZbW2nj7O9vcndrYmVrc23q42Nl\n39HY93f0ZFRZ/Wp+5/dwdH7y5+nu7Xx9cVhgX2Rmc2ldUVlm/W9kcN7Q0dza2dbY0tjp29TO\nz9ba3dnecFhORz8+SE5TVWnf/vHo2tXd8mdlcVtQVlli69fS3+ff2t7o9N/Z19Tg8fvu6+xo\nZfna2uLvb1xYV1FPUlVm9Glkct3k4dTO2PD+3vx4cWFbV1xaX3Ry8Ofa19bP0dt2W25t69rr\nY1Nc++nr7d/ief74cGNubV5XUk9UT1dr7d7U2N3X2dzl5O1qYubW2+jk4e92XlNPV3h+Y23m\n4ODh6mRf59fd2s/W4+jk625fVlBFPUNHS1ViXl/szcjHy83KzM7X293Z3t7nbWNiX1VMSVNU\nVmZeZG/cztHTzsrLzNTf/WRgWktHSU9RT1JXaPb/cWH23NfZ3t7z5Nff5+re19XL0d7nf2de\nXWBnbe7o4NTNxbJgIcjJLss/S75AULhOPs5CQdREQuBQbMbTyr/QxL7SydFp3HVv/mnf1WNd\nVUNUXlFz9U9zxFHOvkK+zFDDSWvOUV39T0J2UExiRVlVTWHa49O/1d3R2eziettS5cpY18je\nw9lJzc1J3fFhtUsrVT9TxUjAyEfBWk7BRE/YP2BSOblsSmNdwmzBWca+SL7eObNhMqsz2LMq\nqsIvqThavjHPSkbcTMpaa6wzra46rSMySBvRTTe8Ts2kOcmsOLNIPrVOy95M1bvcxjdPfT+4\nMlO5SsNfa7s9yGlNvX5Mw+zPwzbLzk63LVa/LO08S70txV1QuEZputm7uzSv8kOtQ9nOOthM\nP1zDL7bMOKwstbsyuS/A4DG9O73ANa4yvb86uTjSzEB6yjjYQjiyQ9DOR7NEwsBkwjvNVFNl\nZls/0drJT8fOZbxFxtI4uS7HSz22LLc+7rdDrkj35X1yZ0pKxUu8O83KV8M+u9ne2lbURFo+\n2tpCTknE2z3YVtjJS8jR0chNx9RT2T3i6ErTW+dPVV1JZeHLv+Dtzj/XXsq6TcnTx+xJUlPU\nSkBI2MtH/FnSwWfnbWNsTvZX8tPz3mns3VZZTmzod+Zc7UzOx0/YXdvOSO7Wwtpb3051UkRf\n8drP1NLaZ8xO+MrQzkxUTldLZOD4XEzs7Mj439XYyk9GT+pWXWp3fP/8R3nT48jgblzqxd12\nXe/M815cTk/uv9RJXdXB2k1Txr5aUXDTz0FAa+Z0QEdT9GBM4s3J7lFy//Tyx8bj4uvfe1jh\n197rUklk59XaXfPbWjk92sjZS9e9ytxX3s3nR01d79LKznpVUllq5Vo/S9rZ40r2y8vhS8TC\n3VA98tD3TEz40WBG1rnGTkz9xr3fSXrc20I7W21STmNlWFvoxOlR28fMV0P4vsL2Usy5wFtJ\nWv9IPFvJwM5tZ+LIXUFFX+dt7VZeWU9OQkZN28bS8lfxzsfS3svAydbl1HFLS3rT2HV349xr\nTklm1VRVVuhpT0xa23laXtHO6FNM79XH4FLYyNJYWGxtcFlq2OBz2n5USmPCwddhW+HdcmNb\nWvHqX0xf7tp+Tmnr0djS1Nn74+P+amhw1tXf3lZLVV1QS0ZMfN3w2tvy/mJe7tLY0se+xeRz\nbOldPkBRWFtl/NV5WVnX3GNp4ce/zd7Dxs7jXE5cWkpBPUzg4k5LT3F4ZmHizMa+yNz5aXZf\nXuHd2eZbXfxWTVBmXefPycXT29fS4XRaTFlrSj5GTlhX58q8ympi883fbF52fWVfYOnbeWB8\n0MXOaVnk6GNRTFZvdVxVVtvT71Vc1snM2N7YzNHnWVdr7exYS01ZXU9Z5NTg4+r4dWF48+nk\n725z935wVWFlXl93zr67wc3b5W9RSEhKT2Bv8d3vdl1XV1lUXtrO1WljbOfkZGTgy83ebmx9\ncGrt0tX9f9/acP7u6nJbYmJtV1lcXVJTWOPc5drf1MrO/Ftp7fJsWE9SWGJtX27l1M3Y4d7g\n5+XZ19jU1+xZUVFUU05PU09PWFxf5dDP0NPS0dTW3dja4Ptp8e59a11PTkxNX1lZdM7XXVD9\n0+Bhbc3CxuleXWNYT1V07vv1Zltb6tbU1NfW3Nnb1dXb7fxpXVlPUVZZWEtMXWpoUVH819To\n2cPE1W5u5+F43c3N19HL8E5CRUZGSmrR0eZe/d3V2/Rq9+djTUVPW15bVXLXzdf679DDwc/o\n49XrOUyxtMZOwbrOLiw7T0s0PXu17z084spbO0PBtrnFvLS58kpe4OleSlnb1l1JZu5eQ0Zq\n3lpKTlROTW3n0s7c/N/Iw8jP0tHM19XQ18vWTkZIR1JLSE1XWVVd+u1sauHQ2X9cZ9fO6mji\nz83tX9vHythzYNnJbmBHTFNMW03y7M75TGvQx3RJTHTWy9l87d5tTW3DwtVdXfb6VFRk9OBj\nXU9RX2puZVPpxcxYSVva9FrTzM5ue2xi5tHG1svHyPlXUFNPTmnhzNdtQz9CREhBTFjfxdNn\nS/u8vNBK78K9Xj5hvrjr9NC91EpBV+NIPT332lw/SNfHfEL0wcBvQk/kwcNaQ+6/zGpH4L/C\n90LuvbvQV0xESj09PFLoeMjBv1VZX8hcPELTvOBOY8XqWFzDw9BMzNleVH7Hflg84+/Pdl7x\n1MJKQDvky047Q8jB3U9D38i/c2/DsNg7R8S511BIyWRrR2NGTllpxuTz8v5SWWhaUVL7vdRN\nPezFzDs5xMRNOs2yslY+1LTEST1Fx85TP9W+x0xLyNXiTHRgamFUVEf1+2FCStvRVT71xXM9\nRMLBU0jJtb/33beuu+z5z8j2TWfb1G9IQV3lfUUzMTg2LCouOT5BRVXYWP/IyrO/sp+Zmaas\nnqLrISRCUUErzLemujQ2MUYnIiY9zEhJPUs8Jx8eKS89TMy1tbO3qK1ILl+fjoyMlaizNDMV\nHSDnubypvak/KR8eHx8vTPdoPFg/MS4tPzQ3PEZFOl7Pt7/Ms7XCv7XM3qqRioqkv9BbMxEZ\nI6e3v729pjUjGh4kJjhF19pb60E+OTM7OU5ANi484WreQNvZx8O/qvFnvo+Fh5xiv7tCERMf\nqrLM0refXiYYHicuRUm+usFrLysqKikqMT87KSo6zrbP/Lyqtr3CtLZKsZSEg5rSN7c8ERIb\nn62vVcylPiMQGSY5QjDNs7FOJiYnKyswVOlILzXiv8Q8O7qrumnAqKjBtZSFgpZDLc3AFRMX\nqqm6OjCuPiEPFzDk8DTrra9MIyYvOC8sRWdPLStOvrf8O0S4qb2+T8yrrpKGgJHmKFDDFxEY\nqqOmREOt2yUPFCbeRio8uK5hIyAqNTErOFRoODLwuLbOMUG5qLU9u66jrpeEg48wKUK8HBEa\nr5usVzC3dyMPESjtzi47t61sHx4oODArPF3NTDhA0bpJNEqws1a/qJun4ZqIgI8zJTyjHhUY\nt5evWyW7ySUQDibVyjMswrHIJR0oOEItL0nXRS40+brdKyy7o6xNxaWWlaeTiYeaJiFFqikc\nIsWhvScfMDEfExgsx9s6S9OyWConNXw/NjhlTC8tO8fHWzlD2q+tqrPHvJ6JhYmp81zKPBYd\nKai+ej1JszMeExsvYGc6Zr2+ZS8qLS8uKzA9PTMsMmbDv1k+SeqhoKTT4biZiImKqrXgyDEW\nHyKu7+5N3a8zHhMaKT5ENkzBtss8LTAvLikqOkU9LjVfva/rTnlSw7Kip8jCnoaFjcEwybo7\nExgrqqzYVsOvORwPFyru5UFsvazLNygpLi4sLTtRQTIvRtLM5UH4waaquMtavKWMg4eaQe+2\nWxcOGsuktUjYr8YkEBIdSNtJSsqkqc0lHiYtMyIqOU1BOEhhYkQ/zbi0p6qv3724mYaDjLg3\ntK02ERMrqp9cNUbBcBwREydoYjsyvKq/KhsjOD4oJC9GYj8+b73CR1LCr6uxr6+rrJ6Mhoqi\nQfi8WRsVHuOowDcwQn4uGhQdUMHQN0u2vEghIi9OPCgrMkM/OE1q6GBR1na5q6Wt39+0i4CG\nmSrrn6wnDBo+nKspMD6naRwPFDHvTiQlxKO0KhkjRkwmGyQ+vOVC+buvW1j2tZ+lqOe8t5uI\nhYqmSsCszhoPFzSv4jE2661bIBQWJjlHLjuyqK05JCgyNyMeHjDn7d9mvrxSX166q66qs62o\nkYaIja61rbdPGBkcT8ZUWDbfazYdExMaKTk4Q8e2rns2LCwwJygnOeLDvtnGw93cyMPAUvK1\np52SiYeLmbC9wzkeFRckSbm+xd5jRScaEhMaJjdDY8e2sLxWLiMiJSwuLzzar6istMbDuLm6\n7t28qZqPiYuSn6mrxS4aFRggLTtERkhIPSwgGxseJiwuOFq4q6y+TTg4OzUuLTfbsKiqr7W0\nr7LA7VTCrZ+Zl5ecnaKotGQyJCEjJickIyUoLC4uKyotLzEzOD9c4tfQ0cnAv81kXefHvL/E\n0NXh39907drAsKikpKaloqCjqa22vMxeRDMrJiUkIyMhICElKi81Njk/TnPr6vJcTFns1tjX\nxr29y9LJvbm3tq6mn5+go6SjpKmvu8rsSzsuKCQiIiQnJycoKSwyOD5LU2NgXltNQDs7Pkhm\n0cO/wMbGura2t7StqaOgoKKmpKOlrLO/zu1INCsoJyYjIiMkJiQkKS42PENV3MvO1/BdTUpY\n+tPOzsrL0ObdzcfBv7mxqKKfoaaioJ6lrbfJbT8zKygnJiUlJycmJicrMjg+SWXU2vpbVU9T\nWWnc3dXUzc/h6dnOzsO8s7Cup6KhpquppqWrt83+RzkwLSspJyYmJignJykwRF5lZeXPythp\nXVV/3uV2Zvvl2+3y7dXNysHCu7axrKilqKilpKSrt8l6Qjo1LionJycnJygqKy02QUxWWWfr\n3Odqc2zr3evy69fNzM7Mzdbe0MS+vby3r6ekqa+uq6qwxv5vX00+NC4rKikpKissLS8zO0RN\nV2/39Gd+4tnO2dfU0NHMysW/wc7m28vHy9nWvrCtrrSzr62vusTS9Es/Ni8tLC0vNDg2MzZD\nXmlSSEZMWVZbZ3XteHd6/uHW1NTY4tvc2tXSzsu+tq6qq66vsK+yt7zMa0pCOjQvLS8zMy8w\nND5Ubl1MRkhMSEpKR0lMXmdx5NzOzd7y/dLHxsjKycO6sK2rra6tq6qvtsDaW0s+NS4sLS0u\nLS81Oj5ES01MS1VPSklIRUJARFFpaV7iy8fFys/KvsG+uLaxrKiprK6trK2yv9ByUkI3Liso\nKCosLjI5Qk9QTU9KREJBQ0VDREZPU1Ve+tHJxL2/wL24tLK1uLSwr6+ytLKvr7O1vuBMOi8t\nLCsqKi82PD47PUBFRUFCQ0JHSUJARENJV1RdfNTIu7e4tbCura6wrq2usbOzs7a/ycvR60w9\nODUyMCwrLC4vMzlBR0xPWFtQS0xZWE9PT1RdYGRub/bczMa/vbm0sq+vr7W5ubi4uLm6v8/g\n7E88NDAwMC8xMjc6Oz5JXF5hb+7u5/lxcnl6bFxOTllj/tzf8OnUxsDBxb23t7u9vL67u77B\nzNXT31pKQT9HQjo7Ozo5OT1FSkhOWVFb/uvm6Wdg5Nbt/fp85OBydtrRy8PAy8vCxMvEw8i/\nvr/DzdPP+VBKSEBART48PD5GSk1LWlt9evd0YVpmYVhzWE5YW1Jb7ePOxsLAvsDFw8G/v8DI\n0trc3NroZFRPT01LQkZHR01HSEBBREdKTVBq0c3R2d7Yy9Hj7Wz409Xm7NrOxcXNztHR0crM\n1NXT1N78aldPVFBFQkREQEFDSU5NUFlUWPfd08zM0dPU1MjGydXf4N5gV1ZaYvHs8tXMzc7Q\n28/ecm5XT1NsbGZWU15oY0tSWl3q4ft07dzd6WNlbXZoYlZObd/f3unsdm9mZvjY1trNyNXP\nzszO1Nbq8OpnXVVXVE9OUVRRVVRWUllfdOv05t3f1NLubWlaY3lr6t3c0t9qZmVfb9z/b27v\n09naz8zZ19bj7eXuZ3RhbtzeX1BUVE9QU1BPTlZs/v7Zzc7nbGZq+tjX33RufPH8dW9t8mxe\nX2jt9+Xy5tbS0s/N3d/X1NfY3ntaX1tNTEtNZFxNSUpQYfvu5e5sZGFtcf/q3tjb3NHKyczU\nysjMyttnVlxt7XJvbGRZWFZNVfXgfVhRUVRWY1xOS05edHri2dbW1tDNz8/N1dTrfH7l3vD9\ncvnzcGx773xz+vdzf93U5fd8Z2JYTUdGSklLUmvu5tje7t7a3OTs8OjUy83Oz9Xe4+x2YltZ\nXlFKS1py8nBu5tzW19/f1NLZ4N/f5XFjZmJfWU5NS0hKTVhldu7h4u/p4N7a3eDk3NLQ0c/Y\n1djr7nb77unn/2BeZGhcWGl5e1xSau3l/V9VYHn7eWVxaWltXl1m7PZubnvb0czUf2VkYF1d\naP7h0dHc4tnX0dLf7fjv59/g3Obm7W5iWFNNSk1QT09VUEtOUVNacdvWz8/OzMzS3NrU0tj4\n9XBufG7x6urf2Nz0d3968unr9nRjVlNSaPBwYltaXW5rXE9OUFljXmrt1tHV19XM09rc9f9w\nYmB43dfP1uHb3dvY3+VwV09ZW19lXldXc+PpcXtyZ1xbWFRbZnh2aXL67+Pm39POztjY59rP\n0NLe3NvuZFlNSEtXXlhUYOjYztHVz9PccFZPUVtUTk1UXmJlXWr58Ozh39vX2djSz8zMzsnO\n3djr+m9gWU1JTFRaWmr0bV9bWVhc/N3c7mt+39jS1+Hk625PSUlTYm/u9n7z5drU3dfOzM/Y\n2+jz7+Xuem9oaVtWWF1ufmJeWl5ranJ08+rl29zl5+Te7HRkZmZbWlZSYV9iaF1ecePQzcjF\nysrMztzn6u92X1BNUVxfU1VXW11jYlvtz8nIztjk8H5eV1VUUVBaWVds3+Duf/Pv5t/n3+Pb\n2NfnePzr5+378OPj6GZZVlxnY2Rkfezd0dHW5ndqYV1PTk9Ycvp4bmR56uvp8O3s7nxs7d/V\nz9np8ezf42dacH30Z1tWV2by3uHs49jb5H5wfm9dT09ZX2ZiWFNo4NPV2NXl7tvNzM7T22BO\nT09QV2Xy4d7a2Nve8vn2bWdkam1+9/d5bG9tZmxwYVpcZGhueXdwX11oYWzf2NjW0tLO0N79\nbXDp5vLm3uHub1tXYHnrdnP08uTd4XJbV1NRT01PT1ddYnvt2tDR2d/b1tfb5/r06NrW1t3v\n8enc4u36bG9uY11aVlpXT05OT1hsf/1zc3507NzSzMnO09be5O1qU05afeHj6Pf87eHg4OHq\n+2ReWF95b3VwaGFseXJwc/Tf2dzpfe/n3extbWZuc2RiaWddXmzw/2Vtd3bt7Ojk6/j/4tLP\nz9HZ73VrXVtbX19maV1abuLa2d7e4uzq9XR8b2ZsaVxVXGFfVFNl5NjY2d/f1NDX4n5xcl1S\nT1lve/58eH/r29XZ3dzi4Ox+e3118+59f/V7aVlVYXTv8mRbU1dkeXlqcnBwYV5pdu7v7vPe\n1NPR1drd2NTS2/tqX19saFldavXoaFxba+/i6mVYX3T9dHLq5/ZeVlx34tzc29rY19XV3OZ3\nbXRoYlxbXmJaW2BubV9bU11e/eno6N7V3NbS0c7Q1dre92hZT09RU1hdYm5lXlhf693e3NrX\n2+pqa3b99HFzcePX1Nne1dXS1epuYFhUT1RYWFxlaVhUW2nk4vTx5On+b2hp7uHi8PXYz9Ta\n3NXQz9x5X1BRW2VoYmFdXVlVWFhk6+duXWjg1dXb2M/R1NTZ3ent63BaVFJPVVVWWmzi3tne\n+/7s5O/8/Ovc2N7f4N3d5uLk5/D3aFRNS05LSk5OV3Pa2Nvf5tvc4PJrZ11mbmprbO3f29je\n3Nrb39zW1NLT2u18f/hyb3NoZ19dVVRWVFlfW11ZWltUXGVdY2Z37uLPycnJzM/KydHZbF1i\nVlhaX/rr+HtlbOXV2fteW1ZRT1ZWWl1m7uTc19ba3eLw7OjwY1hcXWhnYF5pbn3w7NzU1Nfb\n2tPU19frbmV3b19hYF1aW11iXFZWa+PkcGFnamltaGfy3NHN097z9/d+/vrg3+Pvbm993fRW\nUVNcZG9yaml74tjU09nZ1tfc3/xiXlpPSkxTXFpcaXPe2dbU0M3P0t/reXjy7uhqWE9LUFhY\nV1NZaXPn2NPY4+7j09DN0/Dz3dPfffVtamFaVlhdZV9aWFddWVRa8+HV0c3M2tbN0955XmVp\nYlFKVuTZ7v529/tfYWXw6/RlXeHZ7l9dc9/2X1xo6Nvc4tvRzNT9bOrd4u3k3O5zeHZOPTlC\nV05FRGbOyc7Vvr7O4NS9vNxKVtvZW0NR7X9OPkNb7k5DRuXE3E9O0sTK09DAxdnZzM35Vlb3\n7VA/PkJx32tyYd/Z2nNk28/L287PaF1U22w6MkPI1nhTzLG/XTxdyL5aNlbJwE49XsjXPzZF\nzr9pV8iutFtNwrRcNDfKtNg+RMHBRTVE3vpKStbC6E5aXtd2TUXfx+rS7r7I2F5LYU3gTFnQ\n3utivM5YVlbd91dFT9HP12TkxXJbVPDTWld2zc1VSm/DbztL0cBSSMvF1E3o0MxvUdTcTkFf\nx89SSvbiUEhCV19XYPnb6s7P3tfGvsjV3cfD7UtczM9AMULoRzExSdxtREHLtrjFxLizt8jT\nwLvA9UxtzddFNj9yUzYtNEY/MjI+W+1UQk/Sy3Lk37m9wcG9rrq1vbGuuL/iuLGzzFLr1GM8\nPFVqTjYuLCkoJSAfIiswOUNARlDZdNjS3u9UqpWJho+WmpijKxwVIyQrOT6urafANiUdHRkX\nGB0qOTo4PEQ/NCkinq0936yYoaysrK2bjo+epqCjqbk8HCAsJyMhIil8ve89ODItLCUhISw2\nOkt9VFrq3H5a+fLSyMXHzMG/saSgpKafnJudoKmzu8VbNyspKS0wLzAuLi8vLysoJyYnJyYn\nKCouNT1MeOLBt66tsKadmJmZlpOUmJuhqbfMSzEpJSEgIiUmJSYoLC4sJiMlJiYlJSUoLzpB\nUWntxbSur7KomZOUlpWQkZWaoq271UQsIyEgIiMlJSMmKiwtLS4uLSwpIyEgISQnLjc+Vsq1\nrKurp5qRkZSVkY+SlpuksMpDLSAeHhweHyMjIiYqLjEuLSoqLCgmJSQoLDI9Q1PXwri1ta6g\nlZKTlJKPkJWaoay35zwpHyEgICEiJCMkKCopKCUnJycmIiEhJSowPElpx7Ssq6mknpiSk5OU\nkpGWnaWvv9s/KyQeHyEgISQhJCUoLC0sLiwqKCYjIyMnLS81QV7MvbK2r5+WkpCPjo2Ok5ic\nqbxcLiYjIB4eHiAlIiAjJyouKycoKSUjIiAgIycxP0/Pu7OvrquemJaQjY2Oj5KVmaO64jAh\nHRwbHh8dHSAfISQoLjcuKigrKSUjJSkrKy8+T+fIwbenm5iUjoyNjY+TlZynt+kzJiAfHyEe\nHR8jIiMjJSsqJSEfHx8eHiAkKS89bM29tq6km5aSjYqJi42PlJqmvGgyJR4cGhwcGx0jIiAg\nIyYpJyMjIR8eHR8kLDZbvbOsqqmknJiVj42MjY6Slpumt+o4KB8cGx0eHBweISIjJSgrKSYm\nJycgHR4kLjtWyrm2tbWpnZeUkY6Ojo+RlZulu/I8LCMeHB0fHyAjJSYlJicoJyQfHx8fICIp\nMjtL1riurKynnZiWk4+Ojo+VmZ2lt1IyKycgHB0iJCAfISosJSInLCcfHiImJCQpN1Ve0LOq\nq66on52dmpOPkZSVmJyjsM9HMSkkHh4fIB8gJSgoJycnKSglIyQlKCstOExt0b6wq6qnpqKf\nnpuXlZaWmJuepbHUPS4pIh0cHiAhIiYoLS8tLC0sKi0uLzY7O0BS6cu+tK+tr7Gvq6imo56c\nnJ2fpKeru/VDNy8sKCgrLS4uLy8uLSooKikoKiwwNTU4Pl3cyb27sbGwr6+tqaWlpKOgoaOm\nq663zGVMPjc1MTEzMi8tLCwqKCcnJyosLC0vND5JVu3Pwbm0sK6tr66sq6ypqKakpqqtsLfF\n7lRKQD48OjY4ODUvKysrLSwrLS0vLzM2Nz1FT3zSw7myr6+urrKxs7a4srCwrKyvsLG0u8DM\n3dpfUT84MC8rJSYnJykrLC4yNTc9R07s39LHvrm5tbKyub28u727t7WzsK2vr6+zu8HM3e5f\nRz47NC4sLC0uLCwsLS0vNjo/QElU7tvKvLu2s7a2r66vsbGvrKyfmbCflybPSSyeFhxIEBoW\nGE0gKVdSuElBbE9IHxwdHCYlK12ZiYCAg4CAhI7GGRIKAwACDRwvxJeMi4+ewigQBgAAAQQJ\nDxxasaOemomAgICBgICFjysFDgYAAAAVt5+ah4aJj5S1FwoAAAAAAQcQIs62sK6nn4mAgICA\n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\nJCctO7ypoqCgo6Wlq7jPb8izubavsa2z3Ug0JygjIiUqMUM7RE9QPzEvPUFcxLOjn56gpaWr\ntMtJOT1LVPpozsDMTTouLSkmKywuOjg/9N/VTkVN6s69ra+sqKWpsbS4w8rX7N9V5tHTurvx\nPC8yMCQeICgqLS8ySlhJ3tjGtrGno6imp6qmq6669VhdSz5EQlxzTEtEMC8wKishIy00P0Fa\n1L66tLyztriysKqvrKyrqK+00EA5LycrLjlOPExf3cbfQzIqLSwrKzhw9L+8r6yztLa+r6qr\nqq2urrbG3EQ0KSAiLDI3Ru7RvsXhSTs4MzU2O1BB67+ypbvIw965wL+vvL26r7TeN0RLNDcw\nO+ta2bKxs8tUOjgtKyYkJzBQyb+1ra+xvubDz7a94N3Gta+3ur1cSzQvOS5LRezMv7//TFJA\nNy8wPTVDyMbAu8W9zWbdybzFvsG1ssHfUkk+RUQ5Ol3PvrrLutPW13U8PDMuQDNN0mvJwMvL\nvuvEzOZ2auz+yNy8vFxM9W1LODh2usfRy7+/7EQ6QDM1Wj8/We7MwE/y0r21y09QeVl3Q01W\nTWF9yLq8xbmxvtpBPj47TNHOYVVc4dzVfsniaFk5PWF4VlJqz73OYcO8yr/U3m5D3tfaSuXy\n411LQuHQzMnayrrExreytMNwYt1NPjY/aFA/PD84NSkrKSEjLS8qKypWbX/Bt7CzwrmtuLK6\nuLO1tK2oraqsqq21uLC10tvTYD0vKisqJCAjJicoLC9LQ0RHPUQ/TEtIPU3tys/GubGuvbCs\nqqurra6ytrjoSjxKPTY4OkQ5RzU3Ly4vLzEuPjVCLzk/bs9cxci2w7e0rKeurLe2vL/N699k\n2NLZavZw8tXr7cfM1My/w8nJ7M/g3t3tTkhPSWVJa05MQT1JPl9IPjtHTvZGR15NXD9bTFVY\nWsvUzt3Hxr68ybu8v8XYwsK8zs250MPL6t9NTVxK4ln6yXHLT0tWOkM9O0RMRktOcc/bzsTR\n3Nf6WczKwbPOub2/sd1TTE1JY0NXX1a9SlHr0lg7vjo++NvxWN3h1dKs31XSy7I1ULzn0UG9\nUy6+2zlEwbwySrZ1OGKvTi692T8717ZKSmOv3F6/VbXGfa/YwcK/t01bRd9LNt1ORj5gy0VN\nyMtHXsrkNVCzUD5ay8o5wcs5Tk/KWj/MaPlZzbk9S8DVPUXOYkpZvc41urRGUc7gNDfISytA\ntGs1xL9aQb+uQFiywElquMBKTsVmP1LPVy1+1EFMSN1NOVZKMT9LRNm/yX68ts+9ranYSLG5\naknUvT47w9QzMu1ULz/Tbj9Vs8szY7ZPMPrXUDpatOJPv7G+27+6xVRN/kA9P9rgP2HLz1fz\nyOBZWNf3TEva2XF9+WtFSM/RRD3Nu2jqwcpjz7d8P+/JWlXB1VHTx+tOZWU9Q2ZEPFffTktt\n39to289g6+lTzMTKuMLPzPhOWu5tZGR0c1FTfk1bz+z532NPXHj9ZU9RVVVTTURM49HIy/vU\nvr/FyM7GxsnJ3HLl6m5wV0xQVfFYP0pkVU5FNzo2Lzg7Oj5FTE9bbsu2ramnop+XnDXFpa5O\nT7vLfrO4PCkuJBoaHBgYIComKSghIiouLzqvjICAgJHJLCk5YzQoL8eZjI2aPxYPDxAUFhoh\nKiskHRkcIiYkHx8iMEmphICAgJEjJBvOxywmILmUiIiZPgwJCw0ZGx4pLi4fGRIUHCU1LiUk\nL86vrpaAgICA3iEVLLHqOxtMso2JmboPCgsOGyEoKS43Jx4VExsfLTw0MjrjycFbUY2AgICJ\nLBQS9G9cKBrRq4uOoTMMDBEbKiQfIyg4NSIcFxseJjUtN0TYr7rDUkyMgICAiy4TF8tFvx8W\nK0mQlJ0+Dw0NFyk6MS8rPOE/LBsZGh4rNWe6r6ervmAtJGOJgICAnkcaHz0jLRAXJL+PkZG0\nHRQOFh4iICEt4bO0dygfHR8kJS012a+rpaiy+C0/k4SBhp2s4r2lUzcVDhYetKalrjQtKCo2\nJh4dHSgzPU1NVe3Pvsz1523iRjQ2ODoxLlCajIuRqKuppaLGXSokMDTOvsDGST87Rl5CPDUv\nMC4sLDAvLSspKicoLTY/SUpEU/nAtbSompmepaabmJSXnqS460QxOS8tLCcrL0BiPi8mJCco\nKiciIiYrLCwsLzlL89DAtqyno6avqZ6jqKmhmJaWm6KpvOo+KicfICUmLDE1Ozg2LSsnIyYl\nJyosLjM6R1RffdvAtrGvs73DwK+cl5yho56YmZ+sx3NbcT8wJx4dHyEnKiktM0JWWEJETk9F\nOi4qKjBL/d/o07y3vMlVSUNFzamlqqWfmZaaoay7wsfKY2U/Ojw5MzArKCszOjIsJywwNDEq\nJiUoMDtBOzk9Sdm9trKxu7uon6anoZqUk5ifqa+xsNRGMCYlJigqKSgsLzk6Oi0qKCYlIiEk\nKzY+QUVJXN2/vr23sa6tqKClqKCalJKYn6ersLttLyojJCgpKSYlJys2OzkwLCwtLCspKS4y\nPT9FWte8tLjGyb21sK2oqa+sn5mWmJ6mrrjC6zktKioxNzAtKikpLjAzODlFTUQ1LCgoKy4y\nPEFNeNTExMbHx8zRvKympKGem5manqSpqq23ZzgrJistLCsoKSosLCsqKi43PkRHQjkzMDA4\nPlLmx7/EwsPBvsrJurKvqp+ZlZabo6qtsrp+Ny0pKi0tLCooKCkqKy0tLzI3Nzo9Pj4+Pj5E\nUe7KwL2+v8HI3WLevK+rpp+bmJibn6atuMxMODEvLyskHx4fJikqKy86TGBhSj07Oz5DQ0hO\nX/LW1NHMzcOst3Rux6uqsKWem5qfpquzvNRCMC4tLCwpJyorLS4vMTg9Q0pWZV1WTUI8PUNC\nSlVc5N/Z1NTQzdLPxL20rqminp2fpqipq7bOTDw8OjEqJioxOjoyMTAzXnYoKydLLCAgJTQ5\nTv/Jua6zwcPb8dOrmpSVlJKPkpu3OikjHxgUFiE7z8m9r6itzjUlHh0aGRokOmns1cS9wNpT\nS1VOQTtRzc/HnomGipGYkpjJFA4NFxsWGjeimJistK26NhgRFiIiHidPq6WsymY3JR8dJTFK\n8rmwqqauu6SIhIyYoJWYSA8MEBweEx68lpaexsauTR4SEhsmICP+qqCv3X3eKhkYHDJW3ruo\noaCls2VboIeJlZuXjp4fCw8UGBAPL5+Wn6KroLEkFRUbHR0cOaystruxzy0bGiElLtyso6Gm\npKTDLDebhYuZmY+LqxYKKy8AACufp7SnnaKarxsTGx4WFh7OtN+on6/GNh0mKh4jzaapo6We\npMsuK5qCjp2YjoqxEQ0aEA0GD3CdrK6ZlpV9HR0nFw8TI8HdRLacnro/MV01ICxesKqvpqKv\nx0AqOouHopOejJYiDRkVDAwIJ6yk2JmTkJs/PG4nDxIZJSoiPqSft7/DylAqLG7bPEfFvsE7\nMjgr4YGHnYyViJQcEywUDgkLKbVkyJOUkpzSXEEUDA8RFhcbPqiqrqeho7VI0MA9UNPHxvD0\nu8RZQESShJmnlpWS5RYtMRcPDhs+NCLInqKv6eGxPhcWHB0bHjC5sLmqnp6ow8rFXjk4WMO+\nuayrqa3SU89iMzrgsKyto52est9jOSkbFx4oLDvrt6+81dhLKyMkLTU0PNazwcbGvLdFOj7O\nt+7GrqansL65vWk4RdzHyFy1r9TF8kxUMy9PSjtKW05qSkNe4Uzez/63y+/KzFdcajE3PS1O\naUTKwOztWl/M/jw+xs9fvcm3uGRjyMRq03zLutZf+czE+1dXvUU8qZcaC6CWPRlpcD5Vsjw4\nu2NksGA1zz1HtnIlsLcvqlk+uFM9tUpAuXzNuT5VqE5QbG6su9XPXsnoMEQ+TTpCP9+8Pq3Q\nP+ZwTTU8Nl94LtGxUL7MzbpN07vmVc+7stHWys2vLzC+RL44wNPPtCOt1iPFO0JD09hDqtxo\nozIuzyjdLiLLOqxJNZ06xcIlqOdLyr+nzLfbvqM027ZA0j9Oujg+Yji9MSG+Rie4O9WvP9q9\nvzjeZkxONPcvqrclqWhFoSgznx7HpSeezUifPLmvOD6yzFdVRk7RWS5L2T8qujLqth6nrCr3\nvb1H7D8tuD8y9jyqbianaja8yda6wjfDqT/2t8jft/1NqcY3uPgyzjxmwT1dtzpesy1FTiTU\n6itDLc6/MvTXe9zP+2qu1ea6LqqhI6euMK+1LtWrMXatO2+/PL9SJ75T3jkytUtSQco6sFIj\npTkxwS5IrCpepC69uzPIvzYxq0vCsVGkZOa18La/Ndq4Vjj1uztdPFe0MVzVNM3sLWO3QnMy\nOb49MMjCKtCuLkKtW0bETs7B2Ks/qavupl3PskfozzxCqDInoCHgzTGwHzSuVyNfsCw+4dNO\nK7SqLy+o+j3EvD233UalMbqoKrynOrqtKsSqLW+xMr63HrDPIKw1O64oYLkr41jZey2nOi+g\nNjnFyGs2Xcm8MEemOiun2TGrwyutqz6vVM/G6v7uxUTHNbtYO7hL6DqwVSzHzzUt0eUpVqs7\nMbDOTkK/vySztS02otspo65UXbi2L8CwPEE/uz4kqWkvsmVBQa6vIt2saTPXsUpN3r4u6KxC\nL9m1Kky+RzRKv68rX58n2sRseDam8ivHyEbnzcQ23asvrqZEtnVEYc3bMkC/7zAzq2Qor05p\ntSeuPTC4KDuxJ8m5Nqk+WaZMVKti5dW6N1GrKMCzKqzOKp/pMqY+vbgiv7wgQq8qPbgvs0ku\nqTQ5qiRDrFAqe7IorEQ9nVFftbu3vDxNqj1SvTCwyzm2Sk63Ryq4+ySuYDTALLXZV8Yzv8I8\nPlm+SEbK6Uq5Ly6jK1OxZrgwrt9NsEzF1KwuNZ89NKk4yrwsws7MOj3M2j0uszuyLi2gLb8v\nP6YsUu5nwkNtPL3KN8TIscZEv6tvPsxouj9P0z2+VUbT0LY6d7ZC9VVRdllFXFM0x2Y9sz7L\nUUPEKehOPr84ssttrNe/u9XNRc9qOLpN07RF0l1MwT5VzDXce0K/UNxVMtNNSsHSyGi5vfny\n37RYR2420Ek3vVHYW0a3X0LrRe3KRmPSwL9qXMdyVkBl9k1KSM/H0td8yL5P99VE5fdIaktd\n/UZ56//resjhWsDYccpST09X70pzx9XGwcfeeFNo3E5IcGplZknkyupr2L3oW+VaVUtX2+LZ\n21LVy95XUHg/QD4+Szw5OUFLTElY49vsx7u+trOrqaikp6akqbvM1UIvLCssNDk8Pj41Kicj\nHhwcHiMpLj13ybuys7fAzZSChI2Oi4ugHxQXEgwMF0yloJyXmKsuHBYOCwsPGiUvZ66osts+\nKiopKzxIvpyAgICWkIC2FAAAFgADFFePjoaNiI24GAsaDgMOPrK4tqCiviAYHRcODiG9tsWb\ngICAjJqNoA8AARgODBiciIuRmo6bIQoLFQ8NFciZn7myrS0UDhMaFh3om5ibnJuDgIWgoZea\nFQMHOBkPGK+Nk6a9mqscDQ8fGxUerZu8Sca5JxAPGR4bJc6em6Cmrq2KgIqgno6VGwoNOxUO\nFreOmquokqceEBQgFw8erJ/4V6+3Hw4QHB0XJK+fpKGdp8mTgIGcn4+MLgsLLRwNEk6Qmba8\nmqkeFBUlHxclq6DOSb3HKBUVGxkcL7a2rqaksysuioCHm5CIjxkHDSMLBhWjjpmhlY61GBYc\nHhMVT5+vRMCqahcOGBgOEDSvvcWlnbYjP4CAhpuMgo8RAw0mCQUclYubo5KPOQ0RGBgOF8aj\nwkKnpTkSEBoUDRTKorCzn5e4IiqHgISejIKLEgEMJwcBHZeJmZ2OjDsJEB0QDBG0nLw6o5sp\nEw8aFAsRyZivtJaTqyAdmoCAn46FhjsEBx8PAA+ujZSfk4ukDQ0bGxEMNZ6lNbmdvx0PGxoQ\nDi6do7nCnqcmFyeAgIeVioKOCgAOHgAEJY6Im5iIiB4KFxYbDxiolK1ym6dOFg8XDwkParK9\nPa2RsBoZj4CAnpWFhx8ABTYNABqYhZCfkIa7CA8bGQwM45OqNZ2W6xUNGBoKCjafpLiulJk0\nFh2SgICljYaEJwAHQAoAGaeHk6SXiNoLEhYXDQw1l6o3mpi2GxMbGgsJLK26T7WXmDsbK5qA\ngJWOwoOJBQAbLwAek5ygj5aPlhoKDTkUCyqgu/eZrU8vExIeDgohsKGvv5ua+iUsXoCAj5mL\nhJAKABwtAAgcmo+nsoqJHxUXJyEND7GaNk+so9IZFiMXCRIu28JmrpeePz+7iYCFqIyHih0D\nD84FARa6lafCk4ZvFx0sLxAKIqIzJrygoTMcJCsPDRw2Sy5vnZmpuKuUgICXl42KrgsLNBcE\nDiGhn8evjZ4pJStWHQ0Rx0geMKuXrCcn1CEPERsxKyPEl563t6CIgIujjoyPJxAcTg4KFjCs\nvl6nj6hsRNlOHA4UMiIaJ62evDdMziISEyMrISuymZulpZmOjJGdmpWTq1g6TiscFhklKygl\nXbOr1t3QxE4lJS01LC890GgyLjAuJCIpc8NIZrq8t87YnpSRmJiPjY+jq8dOIBkUGhkYHSQ1\nPGpgurS5wsbL0207OSwjHRwaGiIzO0y8t7O1uqymqJuVj46SkJGVptIrJBoUDRAVHyYoV7Oi\noqOkpK+zciwrHRYUExUXGSU6U7uopqeqvLS2uqSaj5CPjo6OnLExKRoUDQ8SHyIpTq2dnp+o\np7HoKR8cGBQSFxwhJjy+rKmrp6u2U1rZ0tOpl42Oj46Nj6pVKSMWDgkPFR4iN7edmZuanqG7\nOiMcFRESFBogLkS9qqKmrrWxyj8zOUVIu5+PjY+Oj42bvCgkGBMLDBMhLUyun5aZm5+oxTEe\nFRMPDxIbJEe0pp6foKi260cqJSIkMdaklIuMiouNkKFEHBcODQoPGjvir5+Yk5mcqb4tGhMO\nDg4UHDXcrKGcm6Cr1T4rJiAfJS5Mu56VjIuMio6UqFoeGRIRDxEbL8KwoZ2Xmqe+RSsZEQ8P\nExkgO7qpn56fp71MMSoqJyYqO13JppiOi46Nj5adujYfGBQVFRwlRL+qpaKepbw8KiEaExIU\nGiEtXbKlo6apq7tbMSwsJigqO+K6rZ2TjYyOjpSXqVwnHBYUExYdKF6/r66mp7ddLCcfGRYZ\nHygvS7mmnqCmqrPZOyonKC4sMDzouKqelo6NjpCXnLI0HxkWFhYZIC7Tt66tqq/GRiogHBoZ\nGh8vWL2tpp+gp6y3ykgtKCstLy0/0bSjm5SPkJKVnKjZKiEZFBQYHCc2fLqqp6uxyUkuJCEf\nHyIqO1XGsqejpKqvvW43KSYoKyw5Vby0rKGclZaXm6Cnsz0nHh4fHx4pPM+/w768v205LSsl\nJCUoNEvFtKmnpamvvNpIOy4rKi83OT9I08W0rJ+cmpqdn6O4SS8lIx4eHyo39sOzrauyxGE+\nOi8tKSwwPUtg2s68u7zG41A/PjAyMDk8O0Q/98qwop2ampabnK7IPisoICIfLDFnzLu4t7PD\n0U9BNCwoJywxR1rN08fHy+FUSzozKistLzY1VknPuKabmZaYlpucqrx+NDAkIiAqN0xxxbe3\nvvpOPjkvJiQlKy01PFvqycbKzXtWRDgwMjg/REtq58u2rp6WlpqYmZquNjgqNSQkLnWxrrK2\nt9ozIx4fHyElLzZBVWpiWUI6RTpDRVzk3mpcysHGy8FQN+ufkI6TmpebtS8dIiguJnywoqnE\nWz0rGRcbIjQ9T82+QDMxMTIvOtmwu7u6v2w1JihNWV7HqqOtv6OSlJqfn52tNyouNS8vOLi9\ndD06LiYcGiQqLT/Yv8ZOND9FPz087bu98sbObkM4RNS7xbirqck0QaWdn5+Xl5q7SkIvIxwl\nMtg5Ts7BPSUeJSsiJ0XCwPVa2tk+MTxewsjJtq20yfE/ODg9TXzNtb/ea6yclJWcn5+vOiEe\nJiYjLNbDvmRSUDMgHSEuOD/Ktq7ITUdINzNC57rN0LqvyEA7O0dCW7e7tKqx0dOuopqpoaGi\nwzgrKC4dJS1XTmvpytwqIyMqLy1Wu6y4vsXEZTVCRl9Pbdi5vehzQz46OENH6rq2zVGvnZui\nn5ydp0VMMi8hICZEXkHFw8A/LicqKCkvR8zbx8/I7kUwOUpSbVnIt7rAvMhsaFHy9FDNvcHS\nuqehn6CfpKnURy0kJiIlLkNJzc/XZ0EvLy8vNT1S2dRe3dX0U0pc1XROyLi93vfW00c1WdrZ\nwb641ea4o5+mpqiftVwtLy4iHx84Q95tvre9XDc5ODIsLTdTT3nKt8PRcu5bOzhI43TOvLS0\nt7O4vcvpRTc/2ri2sKqnpa/BZkc5LCgoLi85QX7OyMrOzflQQj8+Ozc2O0BNWG3d1MfAwsi/\nuru9zdzyYlVJRD9BRFpkddjGvbq2sK+vrq+3xdr05ubweuxvV0E8OjYxLSsrLC0uNT9HRUdP\ndt7WzcG9v7+6ury9v81mSlDnzb22tK2pq66zurnB12FQTVJMPzk6ODEvLS0uLi8zOj9LU131\n7mRk8crDxsfDvb7Bw7/BxdZtV1FacvLOycG5t7m+v7+6vMbMz+HvX0lFRj03NTM0NzU5PkFA\nPj9GTU5KTmLj0MvKxL6+xM/e5uzj7FtMU9/RyMC6sa6uraytrLG7x29HPjs5ODo5NTEvMDMz\nNTxMTkpLTldUREZJWHLg0Me/wsXFyNZ8W1xVSlvRw7y3s6yqrKyrrq+zvMvpTz85NTU4NDAw\nMDE1NTY/UWBaRUNJSkRBQE1Wau/q2+Pfz9Tb2tnKytjTy8W6tK+sqKamqKuutcZ3Tj87OTY5\nOzcwMS8uLy8vMjg6Oz9GTlROTE5ZcNzRxcHCyMnJy9LY2+l+4svHwLmvqaSkpaaprbbJX0tD\nOjQxNDc0MCwrKysrKy01PkdJS1ltbPTj2M3M0tbSycTCytDb6u7n4dLCuLSyraikpaeqq6+5\nz049NzEuLC0vLy0sLC4xMTA0PENJTlBk2M7Jxr/Cx8zR2Nvq3+fk6+zi2dfMwbq5taylo6ap\nra+4ylo9NjQyLy4vNDcyLy4zNDMyN0dNVr+puN5KOlYrKi0uNTfzvq23z8i/yMWml4+WmZmX\nneIpHCUdHBgiVbqxzcbqSCkaGhsqNzveq52kssbDzC8lJTJAPkjTrK283elCR+c6NShNlYiK\nlJqboTgODxYpJi/OnJWsXS4sHRMRHFyuqaihorksHyUrKSlatK7H9MjMPys63V89XKGmTSZK\njoaMqqOZoygMFy93Iy25nKEwICssGxMaPq2qta6szy8hKDNSUtGvtMs4PEc9LT+6uspruKqw\nNSdCmoiKmp+bpy8PESJAKDu4np9XJiUmGRUcOLivtq6nuyoiK089NuuqsT00Q/E7L06xsD1H\nq6K9LCjCj4eMoaCirRoNFi5XK8apmKsuIiMeFBMfTrXLqJylaCYxNT4tRbazukxiXl4xLuTn\nVD+znbsuJjnLkomLm6GttRoPGipaNresmKoyJyMeFBUg9a26rZ6bsiQeLzsmIuGlrDszx78z\nJDvDzzp2paa6MSmqi4aYr6GdyQ8PJOsuJb6fm04kLTMdERkxvMfJo5uqLyQuQjAqR6upczhL\n1T0sNr67Sj5ssKzEKSVhjYWNpZ+WtBwLHjIyHkmfnLUnLzgeEBUuyt1Prpqbti0pNjMhJUup\ntlxev94tKi9NOy14qaGt00K0jomPpqqctCAPIjEzIz2kn7UuREAiFBYpU0perJ2jUSksNSof\nLvix00z2wuIvMV/NREjIqKKqs0A4noaLorafmTMPFEEwGh/cnq0sMMREFxMeSlwtS6eiqqTT\nRzQpKCE2+qw/d7bWcjEvP8JeX7ipujgzjYCRz8uVnxgLHqYpGSmiks8lNq8nDhEouj83rJih\nOC5D1ikdKsa2REbKsU8qNtf8NDK7q63JR9idioqXqJye1xgXKi4fGkyuqEs63FMhFBsqNy9D\nqJydoL7XTiwiHSg49jRBzOXoPklBOD/8yMzTsZeIhpOfnJ/jFBUjLx0cSa6iRDRFUCQVGSdH\nRtKonaK33uE+KiQoNTM3PODTX1VcQDc0SMbF1c6smIuJkp6aocMdGSIvJhwvzqvTP0ZUMRwY\nHCUxPd6qnp+zwM9qMCAkLTIrOc25u8vf6Ek9Pv9dSNqai4qRnJWarCMaHiYjGyM+t8X2XtPg\nMiEbHiYvMD3EqKSxwcTASCskJyouOvO3r7C4v8XoWtfP/LackpWfoJ2esDkpKS0tJR4iLkBG\nP0Nf304yKy46Pzo8Wd/S1drc2vTs3W/uzsjJ4mFPUU1KU9jFzr+uqau0urGtrrW2sq+vvF5A\nNjUzLi8vLzAvMDM2OTg3PEpdS05t1+VXVvzIvcTeVE5dVD47Q9XCx7uupqiwrqqkp62urrC2\nzUY2LS8tLC4uNDo7Ozo9PTw5NDc6PURHS1tr3szBwt/q9W128V9c2724u7Osqay1trCtrre5\ntbq+3j84MC8vLzE2PDw8PUFKST89PD9LSUdER0hLVF1o6+bm/k5ITGTnzby4tq+srKyxrKmp\nq7O1sLG3zUA0LispKi81Ozs2Nj5IQDY1NjY4OTg5PD9O7drm0MO8xs/Mxb++vLq4s6yqqq+u\nqqussrq2uL/rOzIsKCUlJyswOTg6RE1ZSj9FRz9ARlZaTUlR8OPr8d/x//lu1sW+u7qxraqn\np6Wmqauutri+0mY/Ny8qKCkqLC4vMTZBTElCPz0/Pz8/SlxdUlBZ99rs69bMytHmzcbJwbWs\np6GfoKCmqq24v9VZRTUuLiopKikqKy4wMzdCQU1YUlFTUkxWTF9aWv9u6t3Tybq9zt/Ry9Xm\nzr2uqKWlpaeorba/0v5IOzQvLi8uLSwoLTs7OD1CT11eWVlc/vBz+OxdWmDf4Vf73tXV/U9R\nVffSvq6oo5+hoqSorbfF6Eo6NDEuLzAtLC0vMC4wLzZEPT1HUWLm7eLfev7OvtLwztPe5uvz\nV1hvw7y7rqihoKCjqamttsv6STk5MS4rLS8rJygqKi4vNzk7Pj1HRUtb2s3Iw8fBxtjfzdLe\n09Dazbi1tK2opKOjpKSor7a+/kMzLCwpKionKyksLC4uLjY6Ojk7PEJVUdjKw8K+yMzCwMXC\nyczD0MC+vbCup6SjpqWoq665u89KPi8pKikqKSwoKSsqLS8vNDk8PktNVlrh8d3Vyc3Eu7q9\nzMXAvMfMzdO3sKyrpaimpaqsrLPEzkw0KSwvJyYmIiYnKykuMzNDU1lm3F7Fuc7BurrCx83M\nWdFWTPVqbmG/t7WmpqaqoqStorW3z1FJKygeGxkbHB4gKDYpMrStn5KOjJSUmayin6+hySo5\nJiUWExUPDxEYGi4ququclZeZm5mXkqnAR+rEM0Yx1KcCDxkfMx7DJjldt1vnRGhT8q63r6Sj\no6Kuu7e3xd1LUubWcPhY1sO5t7q2tba/z8fEbUM3LiopJyMgHyAhHhop7TMqN251Xvzi4M/K\n0Mu/vLm2sq+vvLuzt7q6ubW0r6+trauvs7W+1V9IODMxLy8tKystLS4vLzE1OTs9PkVU7MzD\nurm4tbm5tLK1tbi8v8C9vsXAvLm2tLK0tbW7xt1cT0pEOzU1ODk5ODUzNTk5NjU3OkA+PD5I\nVm/n3tnPxLy2treyr7G3u7e1ubm3tbOztrjD2+1vTkM7NjMvMC8wMzQ0MjIzOT9GTVVefPvg\n18/S4t3W197o187JxMfCvr+8urq7t7a3ur2+w8fLztluW1FFPDk2NTY0LiwtLS8yNjk+R09R\nVmna0ce9u7u5trOys7a4ubm5ub3DxsfIz9bZ7mlaS0pNTUpCOzUzNDg2Njk8Q0VFRk5d+dXL\nycO6usDAxMnHxMbO3d7Y4nVo687GxsjIzc/M0fdpXWloXFZPXVpOQjw+SEk/Pj5CQUBDR1Zi\n7tjMxcO9u7q8vr/GwMLU53duZWNqYF1gbG9lX15ra3To92/y4Hl1a2lgYEhPy+g9O1VZSk5P\nTkxPXmvq6/fl2M/KxcHAw8TGys/f5PNpem595N/b3eDnam10YmplTUpSSklWX19XYGZVXVNN\nSkpSX2Ji8+Xz39XU1M7R287L0tp/9dvR4tTJ3ufY4Wz+3trl41xSY+/rYFVNQz80Li84OjxF\nUmLUzM1q9NbMz8a+vbS1s7mxtby6vsDY225LWE1ATzw+XjtHS0FLamdsZXBTVExMS05kXW1R\nTk1ITk5QXfnc1s7KxMG+vcG+vb7AyMrOz8nJ0+J7amRYVVddeHx4Z2NeV1RNSENDR0pOT1Jc\naXp4b37o3dTS0dHSzs3V6Obj3dbX1d/f19PTz9DecVxWTktRV1paXWh/4N7l+GRUU1FMSktN\nU15cV13y7Gtq9eXj18zO0s/IwsLIztDV3mpWW+Hgcl1TVlhjX1pdW15eU09Vav50Xlp829HW\n6erwa2dfWFRdavr1c2J74+Lc29bY2NTZ2Nrb4eXp4+Xj3evwemxjXl9aU1FWY2FUXH7p829e\nYltOUFVYVll3+W/02s3JxcTLycvP0t7p825lW01JTmJ9c2pt/tnecWBvbHX15tnf7f18WU1O\nWm1+Z19fYPXd3OLxcGrp3OHs8P1jW1/02cvI0ung3N7V7F5eanRkXFFd6dzf3+Hk4npkTUhP\nWVVPTlNf+flrcvfdzs/d8PLj2Nvb2dTPzdXb5/V0//9kZm/r8/Tj2NPO2l5UVmBoVUxHQUJD\nSU5WZ3/9duPQy8TFy8/W0MzN1dnu4+h3b11r9u3+YGJtfvP4bmZw59/nfHD7ZV1STE9bXFte\nVFBfbO/u5dPR2+/r5ObZ1tnu6uLZ0+Dw++veee7rbvlsf+Xf3trVztx56uj+aVdPTEE/PTs8\nQUpZ+mtm/fDdz8LCwcDEv8jRz9DOztppWlRSTUxNT1h973zk29Tb7/jx4H9fT05TW21laH1z\n7n1eVlh5eH3v7t7X09TY4fXf2sTJXvt4XWVFRE1LVfP09+jf49np6tTU3dvm69vT0Odk72dU\nU0xMTE9fZV5kZXTc2eje1s/U1eTm6+nf5eZ6eF5rcnnm3e7f52T15NryXlRTZk5KWVZQTFV6\nX1VUcGln29HNzs/MzMvW+tHP2+Ha1tzM0Orj7/hxbFlXWU5JSkxNW2VnVmrT3dXfVXJh/vZq\nYltuYllbX15x1tfZ0+jO1N3ua+ny2N372tbL1ejhZnLrWGLh/n59XuZecvxkTEldTk5jXmx8\n+Fhgc19tfmh4alFdaWfo8t7LzsrHyMjHzs/U3dbd0ejtbmvra19aTElPSkpGSE5YXUtVUkxi\nVmV+Y97S0NrW1NLPzNR5ZOTq1OP7287Iys/n2MvmbFtnaldRR1JeWFlaVVxcTl1uc/TX2uXQ\n6HHza/tt5HFdU1JnW1thc//k5dTPxcXGzPRyVGDiaFpRTl95ZujbzM/oZn3f187a2Odp0thi\nWUpFTVFQTl9/ddvf287Ex83uevhdW1lZ6fDffHpr/NXiZ01WU1dbU9RMQkJF5OXuXkk9QmdP\nUeDN4NHEv760x73Dw8bRusrFvsTA2cbV6mk1MS8xNTM7Oklp7fBQ2sdo2F5GUeZxUN3t7dbI\nzd3d1d7HZVZeYs/TyMnSucXPw8/28O9KUtnNR0pOP1pVTj06PjxF02TPv9PJetrFzN1X8k9P\n3fZs18rJzeXGvMO3vMbMzd1OalZTWftHP0hLXt9WbmpEPzs8QD1BWU1r4OrpysvBw93Kx8Jp\nTM3l6tZn1cXS79BxWcHnaWpiXvdRTl9NXfn58/Pg4fvw1eLNz09izGtsU27hytBWW3tPUUhD\nOURMSF9ecGV+0t/Mzs3Dv73PuLxoye1MQ0Y+OExQQlj/22/f297BxdXx39Hk8HlSYmthVl/i\n2eze7/1PWFZWZ+Ro9drh283Y8tfP19DbYeba/lRZREtUTUj66/PM0nhm+XVmTVJsalFPUl/T\n2chewEm7+mm9NrY/b9texF3C69Pg387+115RUlZVYnlFXf/qXldha//u+1NrXW1i+O7u0Ozc\n3Oh2+Ptv+21z7+nf1M/c19b66PP5+t5y73n5ZVhRT1taUFBbZlvq28y6vdfIY9tPPDxLQ0RN\nSGXW3s3MyMrO3u3ubPPkaVld999u7nVa6+7k03bPzdvP4vbLzM9vUUdJPDxKY0HrYvHNy7m8\n32tPTkNKUGHJ2sC1vLja9FRVykfPRkM/NE5LS0FUWO7zXd2/4NPF5fbw0HrV4/7MzeHGxNDC\nyt5mWUlfPVJCQj8/RERgV9fMy8q/zsrk0H5eVVvZfk5pWd1YX9Xd/vDX+M3O4trKd3v1ZGN5\nUk1TT0xW7FtRa/nMzd5cz+/fytPN19LT5/dreVFiZHxRW+ry4/Xf8ltSQjs9OTYzLzREPE39\nztjBtbizr6aloZ6dp6isrslCKykrISctOEBPSj4/KSEfHBoaGRwkLDVLsqCZlYyFgoyNk5W6\nJxMVFg0SFkKuo6Sdl5/TMB0XDw0OFSAvz7Kop7VTLiwiHh4gNbqekIqEgIGIkKHJGg0FCgsO\nHDeclJCWlp7zIRQNDQ8TGze3p5yfsFwoHBgVGh0mSa2akomFgICMksqxFw4FBxQPMkSckI6X\nprc/HBQNDxkgNsWjnaStPiweEhIVHynKt7amnZWMjYeGkpG+thYUDAocFkTZm5WPmKxFPRwY\nFBMjL0zFq6q94S4eGBQVFyJFwKqqraetmY6HgJKNnKLBExABExIYK7SZjpOdxn7pIB0THjRY\nx/q7uUQqGRcUFBkfPrqtpa2suNadiIKCkY+fmjcMCQYUFCcwqY6LlJ/nKiIYFRQiOkOxtLxs\nMikaFhYZHy7YrrGroaSzQbCGgIOPpJmZPg0BCA8kNT6ejouTqU0iHBQNDxgoOkTgU1s7KSIf\nHyIxzqadmpSYnq/FPyWtjomPo6CYnFQYEhAWGxokyaSfoKrPUUQvIhwYGyIkJSw7R0FNREJa\n2LOsra2qo6arrsbgs5mRk5ylo6POJBoYHB4eJUW2tb/VYEYxJR8fHh8kKzVZyMK8vLjA1s/S\nv7Sqop+fpK26zL/Byd2+sLG40E43LSknJyUsR8G0uL7L010xJyMjKS41QFXJurfMycbEu8/E\nvbW5vbi8tLW5u8TFx83vXW1RRD88Qj1AV9vI7kIyNz09NjhZvra+yM3K8DsuMTo9SF/YvLe8\nsq+3vsLH1PxPUORk7My/2E5ffdzv1fFYRDtESDs9Xu7U0szDwPVLQ0RFQDtJ/cHTfvflcOne\n0sDVycjtyM7NVGTtysrUxbu3TEM/QUNCPWTo4eq/z+FLUD5JVi9aUc9nzXfD3mt0zdpwxcG+\nv81M904/OjhW5cTEyrfNxs/VQ0FFR/Prvdrcb8x8W1JPV0g/Sj9c3Ti/Ss/KPLrVtbVZuTu+\nQHtMSFU7vEGvQ7FOtVhZ3j/jOcg0vTi+V7xFv1JdYUVUXFU+XGnUvU/Kv+S72OZv50vyWkdI\nWjnGPk+/Ranksc25zN3JSXlTQEzbR0f4NNo6Qz4vSj3EWLzFt7O9re3LV3N4OuIyuk/ovjuv\nT0y4NLFlZbREtj7ZXzLDLUpYN75KW9Q+1UpE4E3TxMu5uby54s9ZXUNOTD3gVufOXtm8WF++\nPfjBTLzg4blb4ltJ1jRDPzdaO3I+Q8Bmv8FRs77UveXlz2hmTkNHU1Z44ebHvbfM2dVL6WhD\nUHNZ7+dx085PaH88RUg8Pj1Gbn3NxLm61dPQ0H1UaPNtU2ndS1Pjx85o0sbCytHca+1UR15d\nZNxc3s1odkdKTktMPEZ4xsZ768rN1FlGP01ZTkxd0MHVy727vLzBxMbVztpXRkdHRUVJSUBF\nSERLbG19TEzKxeLf3sjJxcXY1N/bSURbc2ZeZW1ke/x3Zn7h4NvNv8HN08/X7OBdWNhMSzw6\nYWNROUZsafJc7sjU3eFebunYzs/Q3W1mUVlsVEtbYmh3Xsy+xcbDu7vJz8/j+UxXWVpXTUpW\nWU9XSVE+QlZIQ0dbycty4Mm7utNjVHje9UVHYte+yuzQvr3LXE/nz9LMz39y7cHN7Us4bE87\nMy8+SD06U37MwsrIx8PM0vZY2+3Kz2vh18bV+OHP0NzZ2n7J7FrZ5VxbTlbUWEFEamhUQEZw\nRUZXXNS9uttFMT9PS0lY6m3Zvra2u8C6x87W3m528GtccfBdXtx3SHlMauxdUGBJV1o/Wkt+\n/drcSd3obHBNXuRr2HnPw8S+x8vMxeNe0uHgbUvc5UpHQDpHTE9lX2756d3y38nXxsXWyOXu\n3lJWVkZMUlhJTfnc1mf959rVzMXTzMy/xtDHydNWTUxAPD9IS0BDZthucnbWxdbh1OXf4mj+\nZUtPXmPz4s7Excng3uZbaHLjXk9e2s1bUGLn3P9bU2NnUktBQ01d79HV7dfPz8nFxMjO3tXt\nUkpl1GdtW2F04eJbVF5xek1JVFBxVGr7dtHY299p1djU3trP6dvp3uNl2+V7XktMTVV7cv56\n8N7z62Rje2JTR0phfPxt/dzYz8W+wszO1tjNzMzT5HpbZGtlW1FGPjxBRDk0MjpATfJia3Xb\n09bb3NzezMCzqaOfnp6gqLXPQSwlIyUpLjg/T29kQzMrKCcmJycnLDI8R07pz8/f06qWi4eK\nkJyorsk/JBgVGCNPuK+ws7W9Yy8fFxUXHCEnLjtzx9ZVPDo8PEf60cvAvLiijYKAiJezSTEr\nIRYPER1in5ibrk4uJyclIBwaITBb5FpBNDAtKSUiKD24p6qtra2v1kWih4CDlUgjHyszHxUR\nIayVj5peHxkcHh0bHkWkmaROHxofJiwmHyY7sqWosOFOPzs5LSxJjoCAgJ8ODxYsORsVHaiL\niI9PDgsPGx8eHzWejoyaJQ4LEykwNSw4xrCq1S4sLkM/PE/t1MGMgICDTgkOHMG8Jx4snYqM\nnxsJChQnMignO6mWjo9iDQYLJ8254zdR57e9MiooM0szLzRQeKiDgICOHAwc3apwHyHPkouU\nVA8KER4oIR8tsZiUoyYODRgtRDw6RMu+0VhHPj5S6O9Is6k1S1mQgICENQQPPqy7HxknmIiP\nuxEHDiA9MiAlTqKbn6NJHBMPIWG2tGZNPU/YNy42OUJDP2boPzGhgICAqAsNSaOnKRQjoYuN\nqRsLEScwJRkd5p2Zuh4SGTuxuDssRLu8QysrN1/aRi0mKEvLVzErmoCAgKoKGLGh0xYQKpeJ\nktMXDyJBJRMNF0mlpda8qrkuEQ8d+6q1VC81zMjvOCUqM0K2q7dDxomAgI8ZDzGfrCEPGLeQ\nj6kmFhsuKhYPFUCdm68tIS7z2zIfJ86oui4kM8C03jIqLz9ZxGwrI06KgICRJhuumb4VCA/v\nkI+lOSMxuTgUCw0c8KqoqqamuDYdGh8sNSopPLuoqr1GMjIuLzo5Ly6jgICBnio8n6YiDAsa\nqpCXr19Ht7UnDwsPH0TYw725rq7cKhwdJiojJDq4oqGsuMlWQEVAMCYk0YuAhpezrJieNRMO\nFC6utE1Lba2huiocGh8xeioXJ62mykA9MjZANi4yUMW8wdlpQkLV9y4jK7KPjJmtrJyWnLJF\nMka/v0MqJi3OrblTNi4vLygdHiwzNjU96MDkPz1BQkY0LjY9Ql7m3lQ8OVmmmZ2opZmQkZqn\nsbOvtEonHyEw3stLMzI1MysfGh4mLDdGXuLcbFFBMi4zN0zoWVTtyMliOTi/oZ+nqp+Uj5KZ\noaaqscovHx0oRV1JOTY4OjIjGxsgL0JJOjM/X/RPNCwrMD9aTT1Ab8S6xOTEqZ+foZ+YkZCV\nnKGhpLVFJh4eJCkoJCQoLS8pIB4lM0ZZTkVJ7cXYSzg0PVbsWj44PVrgX0RQu6egoqOelpKU\nm6GlparAOScjJy0uKykrMTk6LSUlLDg6LyoqLjY4NjIzOklkY15QS/XFu7y7r6Oen5+bmJeY\nnaCjoqa0TC4oJyYlISAkKy8tKCMlLDIxLSosMzg2NjtKaeLIwL/D0el94s69rainpZ+alZaa\nn6Slp63KPS8sLColICAmKy4uLC0wNzo4MS4uLiomKC46TufLvrm5vcna8efLt62ppJyXlJWZ\nnqOnrLXPSDo3NTItKiorLCklIiIkJSYmJygqKyoqLzhDUnfLu7Ctq6yusa+sp6akn5uZmp2h\nqKuz00o3MjAwLywqKiwtLi8vMDEuKygnKCoqKSkqLjhHbOLUw7qxrKuurailoqCfnZqZm5+l\nrbXE/D0wLSwpJiUlJystLjE1Ojk4MiwpJyouNjo6Pkz508vOyr+1r7C1tq2npaWlop+en6Sq\nr7a7x000KikpKisqLC81OTY2ODY0NC0nJiouMzg6Q13cyMTEw7myra2usq+rqaqqq6ijo6is\nr7nF70s5MC8vMDEwMTIyMDAwMDQ4OjguLCwsMDQ6PUrgxry6ubaxr6+xsa+urq2qqKenqa6x\nuMT0TEM+Ozk5NjMzNTg5NjEvMTY7Ozo1NDU3PkZV2b0/JkjKzs1lt6mvraSnqqSpqqSpr6+3\ny3xIPDs3MzU0NTY7Ozg7P0E+Pjs7RFQ8PkRDSVVrR0U8OykoNUzW6K+enJqZmpqaoLLMT0ZK\nOzAwMTU4NTI1SFFBQTUxPjUwNTcsKi8vNjU779zLxb/D28qtnZaUmpqZmp63LR4cHB8jKzZL\nxby6wNpSQTw1MjUyLzVASVlHPT89cs8xNEVLwlBDxMWsmZaYmpydnKlLKx4dHx4fK127r7K2\nsrLJPy8pKS0tLTA4RkplXy4xQkVoPD+4rcLQxbCak5ecn6CepWsnHRwfHxwcLta1s7y7rq3J\nQjEvLy4sKzNHS1pBPENKX/nh38e2u+b0vqaampucnJuctDcgGhsbGBkgO8K2ubGqqLV3OTIz\nKyYpMkJqTTk4OktgTUFQ07+9xL2/rpqTkpeamJefwyobGBgVERQdOb69u6yfnq5HLCkpJR4f\nLU7ZW0dTZ2BZQ1XAzdnb6L6vnpCNkJWTlJqyKxoXFRAPEBowvq+vqaCfrT4nJiMeGRkkQs/l\nX9/H9D85RcvMbdO5sq2ekIqKjo+PlaguFhIPDQsMFS2/raujm5moPyMhIhoUFyVIwc9TzLxs\nNS8zPDstOb2vrJ2NgoSMjo2PoSUREA8MCw0bbLCtpJyXneYiHh0YDw4ZLD5BYrav4TExOjMq\nK0O5rbOqjoCAi46HiJofDhMUCQQLIsG6vp6PlKj4OSgYDQsSHB0jbKmrzUtTOiQdICgrNsKp\nqJuGgIGMiYWPaxYWGgwFDSjU2LOYjZe9yr0lDwwQFBMVJ765QUHFWh8XHCkgHDSon6yliYCA\nj4mAi2QdLigKAxI9KB+tkJavv6CrGw0aHA0NIk4zMMep2CUkLyEYHikqMMmrqpyIgIiMgoWd\n6c5BEgkSKR0aw5mmtJ+e0CIdIhkPFigmIlCy8jRIRSMbHyUdHDXLR1ilj4iLi4OElZ6dwxoV\nHBwVG2yvza+dq+DBQhwbHBgWHSo5T9O6zzYwLiAeJSMfLUE/Z62Uj46LhoqWk5rEKS0nHRwm\nND/2srK/u70vJC0hGBwoJSk6Rzo+Sj0sKy8pIio/MTPFr6SXkI+Mi5CTm6zTWS8jHyMoKy5G\nz2tb1FI0NCsiJSslJjE8PlBHOjk4NzEyMzU2PWBduZ+bl5GOkpWYn6zFSi8qJCIjKzhGTOW/\nyVddQS4qKicmKCcoNTs2PEE9Ojs8Oz9GTGLJt6igmJOQk5SVnKa3zTspIB4fHyUzQE/1x8rn\nTD06MiolKS4tLj5ORTo4PD03ODs8RnjYzrKkm5eUkpSXnKCru2M4KyYmKi4zOE3c6kxJRjMr\nKSckJCkuNTw8PkA8NzM1PUZPV2XPvLGmnZeVk5OVm6GrueQ/LSckJScuO0NBR09ANC8vLiwr\nLTI1NDU4NzY1NTk7PERr1tTEu7qypZyYlpaXmJugqrTTPzIqIyUsLi82Nzk7NzMvLSwvMzAu\nMTQ0NDAwMjQ7SVdizrq4ta6srKSdm5uampuepayzykc1LCgnKy8xMjY7PDUvNjYwLisqKisr\nLTM3Nzo/SFTbyce+t7Gvrq2ro52cm5qbnaGpr7xyOy8pJykrLzY3NTo9PDkzLiwrKCYkIyUp\nLjY+RmfOycG2s7KvsLe5t6+lnpybmpucn6WtvHA+MSsoKiorLC0vMzMwLy0qKSgmJSUmKi89\nWtnMvrWztre5vMLLfWLSt6eempeWlZicoaq6ejopIR8gIyUmKS0wMi4tLCkpKScpLDE8SnvO\nv7i3tri9wsjP4ej56sy9raGbmJeXmp2irb9TOzAqJygqKysuMDQxLSglIyImKSkrN03kz8rG\nzNHBub3aPjc+WG/wzrqil5CPkJOWnanFRy8pJSMkJy40OD5BPDQtJR8fHyQoKy46TGPt2M7O\n0t/t1tHPy8K+v7+/urGglJKUlZWVnataLiYgIB4gIyYuN0hAOzo1LCUiHyAkKjRL+tS/t7a6\nxsze89nOzt7339rW2MWpl5CTlpiWm6tzKyEfICAfJC0/6dpqPT07MCcfHB0kKjE8Vse4tLrF\nyc3Kzd3cw8LYz8vS0uu+n5KQl5qcnKXXKx0cHyUiICtMvrfKWD9NSC8iHB4mLCwyWcCwsr/K\nzcbTWUxS5szSXnHb4GJNtpeOk5qcm5yxMR0cHiIfHirdsauyytrcUisfGx0hJigv366qrrW4\nu81ALi04UE9LSt28vd1LRa2UjpadmZeb3yYdIyMfHCZNt7O+v77ERSshHx8fIy1BybCsrK61\ncTEpJiUpLT/Yw8u5rrTOUUewlo+VnZWUmNkoHiQfGRkky6+wvqutvDQnJiUfHCE3d9XEsq2w\n0zotLCgiJSxCz8rqy6+59D47vZSLkpiQjZPJIR4qGRETKb+sv7uen7wtKismGhUePllBzqqp\nsFw0LzEhHCMyRlzXxrCvxFlhSjytkYuPk5COmFkeHSEXFRYvvaiuo5yftjkrIxsTEhsmLTXO\ns624UjYuJx4fJjZdyraqn6OwvrjV956Oj5aXkpCfOyQqHhcRFyrLx8apn6W9QCwoHhUUGyAl\nNG67rbHJXkgwJyUlLUJSbrWmpqyvtbuhkY6Ul5OPlrI3LiodFRAYJzg69rGnqr9IOSwdFxca\nHiQuSMS0try+yWE9MS83RExgyLeurrG/s52UlZqZlJGZqtPxPCUYFRoiJykvSMXAb0I9Nysj\nHh4jKi81Pk3exLu3tbm/vrm4vLq5uby+1FtQ4L62sK2jnZyfpKu0y0k1LS4tLS0uLS41ODUx\nLy8zNDI3Oz45ODg9S1FSTmbYxry2s7Cvs7S4uru/v7mvq6inpKKjqK+9zmRAMSooKCsqKSkr\nLCwrKy4zO0RMUlz6fujuXFBQZ3vmyry1sLCztbvAw8fX39C9sK2urailqK+1u73YQC8rKicm\nIyQnKisuNj9PWFFb7eBnTkxJRklMZM+/u7e3tLC2vL7CwcbMysvHycW/u7u3r6usr7jFz186\nLSokIiIhJCo0QWTJwcTNz83uPi8uNTtBTXXNvri4ubS5vLq+wMvGvr7UY9i6sq+xrqikp6+6\n01w0Jh0bGxsdICs97cO2rKipsL9uSDMqJyo0Qlf30MHH0djYzs/U2s7NzsHDy76spJ+dnZyc\nnqq9PyweGBMTFRgeJzzIraejnp6ku0s1MCgfISg1Q13OurrI70xCPTc0O0BB1rSypJSPi46R\nlJapNx4UEQ0MDBgmSLuonJiap7jyMyEXFhkhJTDoq6OlqbS7TisjIikvO+7FuKadnp6TjouP\nmp2ftCMXDhEODg4dNsauqp+dpMk8OC0mGhsjSW3WtaWhrL9NPi0fHSM9U13Pr6ioq7irlI+O\nk5eWmK0pHhUXDg4OHzjbt6qen6pKMS4kHRccJUxbyqygoK28YUctIR8oNkfAxcGuqKu+qpeO\ni5GUlZatKxgSFQ0NDyRDtrGqnZ+vOiogHhsUGils1q2inJ2pv2NBJh4dJjtYxsCppaSru7CY\nkY6Wl5eXrCsaFBgODg8hOMu+q56gsjksKCQeFh0r3sixppuaprdaPisfHB8vPPHKtqenqrit\nm5KMl5mal6kzGhUaDw4OHjK/vbCfn6lOLiUkIxoeLNHCr6edmqW3ZkYpHxscJjNszLS6sKiq\nr6GakY+YmpudxywXFhQRDxUkPL2xo56erWE3KSYfGx0uWM2xqJ6fqsNmOiYfHiItSdi9vL6t\np7ixnpaPlZmal6ZTHxcXEg4OGijmuKufm562YzIpJR0aHzh2va+jm56rzl01Jh0aHis7R2Ta\nt6qzvqealI+XlpaXrGIgHBkTDxIeLdm9qJ6cpLpTLikhGhgfLkDHt6ifn6q33TgpHxweJjJE\nUWy4rK+yopmQj5eXl5eoaCEfHBYQEhsrTtSxop6hrucxKyUcFxsiMkzfsKGfp6y01zsoHyIp\nLDY+TryxucSmnZWTl5aTk5yrPyogGBAPFRomLU20paWrr8HZQy4hICYpLjBDy7KxsrnF12xG\nOT9LSlBOUmhxS1PGrqSdm5eTlJidqsZGKBwYGBgbHiU0T35w+W577VA8PENEVk5Pzr7H3N/s\n1NLJw72/wb7D0GBMR1NSTVnfv7e1trWztbW3vcLN2WpPR0E9Ojg6PD1BQURFSlJPV1tXRjw5\nPEFEQ0pa687HxcfHx8rJyczBvLe0tLW7w87qUUlFRktUZtbGx8rV335iUUQ+QUtba3j63Ota\nRTs5ODg6PEBDS1Fc497c0MjEwry5tbGvtbi8wsvZX0hAPkJNZX719t7W3m1VU1VUWVteb/71\nalFLQz89Ojg4PkVQburPx7+9ure0s7GxtLrCyM32TUhEPjk0Njs/SExUcNrdel5dceDNxcPC\nyMvV5mtMQT8+P0FDR1Ru3szJxcLAv8S/v769vb3AydR0Sjw1MjE0Njc5PkxjfeXXzMrHw8HE\nwL6+wszc8/ZbTERAREdKTlJaYGhu/tjJwb+/wr+7urzBx8/qT0RBPjw5ODk5ODk8QkhOW/fX\nx727t7Gys7e/zfhdT0o/PT0+RU5cX/jUy8bK09vb3tnd29Tg/ltNSU1bdfh8/2r9cU9IR0dM\nUlFe/dDGxsfIwMLK03tOS0hJT1j+1c3Ix8jFytPY+11dXlxNSUdFSU5RSk9SV1xaXW7o6+bj\n4dbKxcPFyMjHysbH0N3vdldIPT4/QkVFTVvpzcjK1enf3N9u79LR0+VkcXVgWlVPS1RbX2Vq\n49bV0NPW6Gx+c1dTU1r55eLm5OTg6OTWzszOz9XdelZNSkhHSlVZXn7t59/V1/JgWmv4e2Nc\neebh3s+yvzPdR87WO9JrUVNnf+rcXVZyYnnc18/Jya6tOj49c8k2Pl1X89nW29LpX/xYT1RY\nXU9DUmr73t332s3TxsvLyNXQ1/lbTEpUWFxaZ15q6u3UzNHWfXTa0cjL0+br52lp82JJQUBC\nRT5AS1Vg627ZztfO0c3M0tDZeWrnemhYTWvf1dbT6NHExsnSeHxcWlhKSVNTTlBf1tvQ3t/N\n12ZJUU9KUEzQsK/ZWDI6NSYpO+K1sK2hoarLIByvnasuIzvjPEjBy0dcPPm+x7Kx3Uo1Pzw4\nMTjez9U+97ewvlfVxb/Nbk9SzWjA11dCTXRN3ODJcuTRy+R1101OP11LSTdW4MnPy926x9rP\nX/loafG/zlxIN0JKVVLwW01N69vR58a4xMde5OVc1evY6ODcVW1Jz2haQ15PS2U/YV/jcs/H\n7X5PbcLKzN3PatvWeWTsbOjlZubV6FXPVlvdTXVfTlVLU1zl0uPNze3MZGBQTVpFWDtNS9vb\n28b6wObQz9rF7Xlk29V3f13C5mbnXsX5YFb45lzlQEbu4WVXY8zN+npo5W9ZXlVdaGlr9WzY\n7tduWtJQ9mNU80/24s7I09Hk4OBf//VXWVp73Nl8bevm1dbqX1lcU09bcd7b7HL19WdhWmBk\naXfn4fFrZ/Lbz9r4curuZWXv6+rvZ37dztJxWGD6d1lNT1tlWVJZbOjp6OLb2Nrh3tfc3ufq\ndmNhZFxYaXtqYGf46u5mYnvc0tDU3Nvd4PNz6uz27XxdWF579HxueWxfa25WX+3u3dn9cf16\n/1lgbd7mallVb9vU0Nfu8mtcXmzt3uTp3NXP0c/eXVpbZW9icVtOU2tvbmh8ePt5Zmp66/jx\nW1Zq9t3Z53FgYXvf4t3OzdDa5Off1N30XU1bYFxYT15o7+t32c/LzN5jV2BdW05ISVFc/nvb\n09ri8HRp6OLe4uBsa3Nlb3Xn39rZ6HRr3dHe5nhw9WRWUFx0ePDf3+f0/25XXO3Y3vT3e3/v\n5d/pdV5TUllu+nzy7dvZ2918bGpvX1VT+utzd9/O1fhbXWt45N/8avrp6WVVVlv86uN+cXzh\n19HPy8zO2nhsXF5YUlFOT1VnaVtbWm7x5OZ05NfNy9Lc6O7d41ZWWVNeT1JeX+Tb19fWztTj\n3uxz++Hf+mlneuf1WE9WYW/9d/bpb97beGl05dzzXl1ebGhOTk9o6+LZ1dTNz95sX2no2d95\nau3m39DKztHfd2RdTU5YW8PjT1RI1k1KTEpZ98/V81Pu7951fdLk6/Hw2M/Jx87b4NvMzOTS\nfFBKQU5bbUREQfbLVE5d1chTSV1jWG3awr3mT3DLw8PieWZmcvj9SURO8M3Ozc3b4+vvZE1K\nTU9OSk5b6eLs2+n6+uzq6tzieFpXVVl7bV1PREpszs3S1uzx2MjAuLS2usnsXV9yXlBOWNq8\nsa2xykEoHhwcHyQpLTpnxLi5xFpHXczG0Nu8nY2Ih46mKhMQERsnNV/srqKcmqfoHxUTFyIt\nP0xZfMq4ud03KSMnL2Cxp6GmrLTLTi0t2JyMiouXxh8TFRcfKDJTzKaem6DFKRcUFyRE08Zu\nTkrtydlMLyYkLUy8qqWlscdyRjgyX6ySiYqOqCwSDRAVKju+rqebnaDCJxYPFiLEnpmdruE4\nLispJyUpNmvGxOFUSU5tV0pNZHfMrp6RioyTriYWDxkgT7itoq2msNAyGxQPGTSumZmfwy4i\nHiQoLj5vt6ypr+Y6LjdPbU05NDhksp6RioyTqycYERohQr2ypqunsn0rGBIRHDevm5mcqvUu\nICAlME3OuravsrtnMygmLz1KRT9PwLGrn5GNj5n7HxMWIjiysam1ubhxTiYdGBsrY6uin6m8\nSisoKDNQu7K5zFVIR0k/OzQyNjo9OD7ouLGtnZCOj5xLHxMbH1S0r6q8q7i9TyIaFBwp7q2p\npKy4XS0nIitIt6Wnsk0wLzhQXl9PRj9CSkY9Ojz3t5mNjI2oPRgUGyHS5qqroZyotScYDxEd\nNq2hnZ2otEMkGhceNLKgn6tdOzc9RUJBPEJFR0A/cb+0r62dkY6PoDsaEBcdRdyzra2lrb8s\nGxMWI3mnnp6fqrhFJBoWHjernZqdsGIrIyAkKTBPv6+yzUszMTlLyq6WjYqOpj4ZGBkfKC3v\nuZ6cnLgtGBMYIkeyp6Oiqbg7JR0fKT3Cr6yuu9tAMCkrNFjP2c/Ltra/70M65KKUj5WfaS8l\nKCUiJCrerZ2frE8rIiIkJy1Fwamhpr42JygvODYxNUjGubzcUEVO8sm/v766t8BaNy81QLGU\njY2WrEIqIR0dHCI1wKmjqbzjPCslHx8pPFLNwb7J4j8tJiMoNdKxpqGhoaeuyktGWvvcz8a8\nu7/KUT4/SVdrZ+XJw8LFytfeXkE/QEVOVUdCQURRTj41MTQ7Pzc1P2TGurq4t7SzsbC1vsnG\nxL7F0WxLPUVVXuViV+vOWz87NT5Z4u7mesu8w9xSQDg+RklLPEJH59HBv8G8vMbN1tzIwb+/\n09NJTVdNWGpodFI9REJDSE1OatvJw8e5v9hLPj9GUUlPc/bO0cu9y9P/3c/Fv7zGwq65tLXa\nVUZPODxHPUtHTUA+Ni8wLS48VWrLyb3FvMDM0MrJyMLL1MbL/eXi7NLc+1hNSWVtYtPIv8bK\n72zNx37w+efN32JMWk9HSD06OT5FQTtCUm/v3szEv8nKyLy8vMPabmFjaWdNQ0xdTVJWXmbY\nzb3D7Nl1YUlFSk/8aWlefeHyVU5WX8/RzsnV719UUE5RbOTQyce/33ZZTEhR7tjR0s3a4tXH\nzfBnWnXv9d9jV0pHRUc+Smnm1NDT/OtkZO3Lv7zC09B4X00+Q0tOWWni8fbZ29ble87S0dp5\n+Nnd3eb9XVdOPU5MTfrsys1u6dXV9FJJUXJxaOpm8NT34u3yd/lt2dLMzdZ4Xfbe2ezY+eNt\nWtXY6Otr53RZTUtIR0xU7XjeyMzbXUxc6mxtYFtLXOfGxtnUzPhrW1NTVfPM1s/Z8WZVUl1p\n4+3bZll93NTX1NPLytlocV/ZfFZPTUpVWv9TWE5ZXFdOWVl8ydHP2szM0G5d9nbf7upv+vdP\nTE5XYOZva+PQx8bJxcXKz9TX3c/66mhRRT0+QkVBREROTV9b9c++ydDV7ejU2NbR0Pjbc1ZV\nVvdeV0xY5t3gxr/H0dXTy87mb2RwZmtlc2JYS0NHP0NF+uXN6mpw3tXuW1Fq28/LzdHP0Opc\nUU1Y+OFs1dnZe2Nm6ujr4u/f2/9rZ/Xk2OBdT0tWZWFub2NUU2razc3X193c4vdWUFRMTFZp\n+erT1Nvcbuz5/Xh268rAwMnV3H3zWVlUZeTpYlRkWU1EPz9GP0FJSklKadO/xM7RysTGyc/a\n08rCv767uLe8w91cT05UddvP0/BgRjkvLjAxLy4vMTE2PEVMR01c2cW/w8a7r6efnZydn6Op\ns85GOTQuKyotNj9NUEk+OTc1Mi4tLjI2NTtCSGNfYnDtx7q0trzDxruyq6inqKmpqqmttshY\nPjkxLSstLzI1Oj5DRkdGQ0NCPz4+PDw8PT09QUdNWevNw727urizrKusrq+urausrrO7yN1b\nTUM+NzIxMzMyMzQ1Nzw+Ozk8RUpHQT9ESEtPVF1w2M3KyMO8tbCura6urKqpq6+2v8fN0t9k\nTD02MTEwMTAvLzAzNjg6PD1AQz88Oz0/QUNOZ9S9s7G2uLexraytrq2ppqaorbO6xNlOQjw3\nMi0rLC0tLSwtLjI5PT9FT1dZTkdFSlBZXm3x3MvCv8DAvbavrq2sqqempqertMLZbFNFPDcz\nMTAuLSwrKy4zOTw+P0dSZHFTSERFTVhYXHbcyb+9vLy+vbq3tbSxrquqq6yus7vJ1O9bRjs2\nNDQzLywqKSwxOkBESU5ZWVldVkxHQ0ZMTU5W9dTOx8TFycW+ubOwsLCrpqOjqK22vcPK7Es3\nLiwsLi4tLCwsLjA1OT5FS1ppampZT01a8OxwWl7h0tbb1MzKv7u4uLexrKilpKaqr7a7v8no\nSjkxLi8uLCkmJiktMDM3P1Fu39nafV1cXmRnXnTp3dfV09XPzsvQ0MS6tLKyrqmlpaessbm+\nxdlbQzoyLiwqKSkqKy0wNTg+Qk7x09XvXu1dQ1Ja1Eg6PUVrWlf919HMuqedm52hpKakpqy/\nSzYyMi4rJiUnLDY/SkzfsqenuE42MDAqIR0eJS44O0BWyrzBxc76Zk9KRjx+nIqHjJOYlpmm\nNxQMDRQdISUyvZ6Xm6xXN0A/KBkUGitOYEhhvbC8QywpLzAvM0bCtLGxvNZcRL+ShYaQn5+a\noj8WDAwYKjEwSKuZl6JPIx0hJR0YGy6+r79f+cbQNCEfKT5HPkjEqqeuaDg8PzMrsYuAhY+X\nlZSoJA0JDhwoJy/BnJWdxCogHhsWFx4tRM65sbS4wlIuJyYqMDU/2rWsrbW4wOpaRTTLlIiK\nl5+alJ9IHBQYHh8bHS7Bqq7EUk5MOy0jICQrMD1GWM7Dw83Y3+hhU0k+ScjGS1nH0+PDWUBf\nt6Sdnp+Zl5SYoLvvRC0lHBobISMlJycwQvP8eGfhvb3OUkc/PjgsKCguOk7vyb26tK+zwtLz\n/Hbft6ObnZyamJadqcd1Oi4iHBseIiAhHyg3SFVbyritt9ROSk06LSUkJiotO1jMurWvr62w\nuL29vM3HrZ+eoKOem5ujsMveRzYkHhwdHhwcHigzQ0/qw7u2xdl4ZF5ENy0tMDhBTWLWvrav\nra+0s7Kyuc/uxKyoqriupZydqrrkzU03IB0cHx8eHh8rNkZO78e8tre0usHmUUE4Ojg3ND1T\n28jCvbu3u7y+wby8v7yvrK6zrKmjqK+6xMtJNyYkIiQhHx8jKy87QmbWwr28u77B2OdtX1tN\nSUNJTFZu4szAuLKurbCzu8zI0vLJ+967tq2utsvMWD0vKSgnKSkvOEx86tXa0exqYmdqXVlc\n59l+UEk/QUdFVdrFuq+ttrKwvLXOT21KX/ddz8C+vsLH0NXfUkdCQExPTklHTEM9Ozg5Ojs6\nODxCN1qtzMm7vb3exsPHzsvJysS+u76+yfZvVUNFSklLV2lvysXNzMrP4v5mZW1pYFtiXF9v\nWE9EP0U8PD89PUlET25KX2J81M67sK6rqrW6usrD0FBda1nd6lHvdElFPDc+PTxJX3nXy9fL\n2k1NUda/NUPjN78oKfrJtymswyyny9yswKuo0ces1kO39zXMTzBJPjlXTUZeVlhWXf5zX1pa\nS2vX589rY+9OUUIzUa+6M8+uMEm/Rr/gQqy4RqusTr7CSMpsOe58Qn5QPk1ERU08P0lATFjf\n3GXZxcXby8VTqKMotbYvqz0nsTQorS4jodEsvNXiukVKq988q7c/wN9H2T8zTT876EQ6alpR\n0dTwvsPGvdbJzV3NyV9u71Vs831m0+VO3VJVbzxOyz88w0E1pqw3s9pKu0RHxWg5z98w5to8\n0948281Efcvx3srL3ube2dXa3u/cyNTZwM1SzNlF1kc4ZUs+TkdC9XZQ3V5Iatxb4sLS0c33\nX9bV0szk4tTw9nlUdtxp6PBO39xf197+5e7O8WPT1d5VSmBNO0xtSkFm1ff/79rT7kpU1HNJ\nUnbS3k7Ju83awLx9Yd/k4/tvcOrsXktT9GVWXGrs7dnH4FZzbGhmQkjjST9daHlzeM/QZurI\n3PLkbHXc3+vKzmPez/f6ZVra2V3vWE/nX2DuU0pg1G1U32p60OHgz9/Wz01X0G/91GdeWUpW\n5VlDW11Vbl5b18jS09jax8/21M7Yclzx6HL86VlJSD9EWE5M/uvfysW/wcXEy9XfZXZ1XE9K\nX9ZINE3TUz5AX8j5TOrY187S3MfF6M3G49XFzNTdXE1TTEA/Qj9CSll24N3NwMbZ1sTAxczO\nzs/Z1uxRTUxHRkVER1NdYWRm3M+8qzwqxDIzqK8toKsbrkYhnicdny8kn0Y4nkpGoUlKpznX\nrCKqTiygMUSnJG2uHqvMJaQtPK8k8c04vuffx9rVtq0/sVwruCJA3im8W1W93r260MXMVtVd\nWcd2wcjdxVPl7ELtR0BZSE1UVVtkTFhPTlpNaEVF7GTncVzXw7fMyLu8r7G4vL/B3fN+SlJV\nQ0dObMK8yddQOi4pJSEgJCwzNz9fu7C0s7q+wc7Nxa6fmJabn6auvEEkHBoeJzJSv6ympKq6\nTCkfHBsbHCI48Lq5z+1MRUI7P0BewLWqp6qtqqOblJafpre6zzEfGRkeKjtX1LSqp67QOSoq\nJR8eICtM7tS7uLq/bjQrKys1TOm+u66nqa/RZrSckJObqLGrxDUbExYfNWlv0reooq7hLiYp\nKiYgJC9VxLq8wsLbPisjIyg1Vsi3raqoq7tLOzq2l46Ql5+kqLkvGBARHTLOyLyxpJ+r5ycd\nHR8fHiMvWr6wrrrN4044LSwtPM+4r660ubS+SjErTKGOjY+bqKmz7R8UDhYndrS3sq+lqr8t\nHBgaISYrMlbArKarv040LConJy9Sv62rrK6rqrlQLixKno2Lj5uqrrs/HBAMEB5Du7Otq6Wn\nui8cGRshKS49+L6ooKOxZjQrKSoqLTvptK2utr+8x+g4Iyq2kIiKkaSwvcouGA4NGDarpqar\nrKevUh4SERklND1Lza6horFIKyUqLiwsMvOuoqKqvsa2w04tISi6komIj56vwegxGQ4MEie6\npKOoq6q1XiQVERUfMFjJu6+mpq3ULyUkKC89QuOzqaOotdRSWdpVNDBgn46JjJeu7TwtHxQO\nDxo6qZ2eqLXA7zskGBQbLc6ooaKkpau+OCEZGR4qNjpVyrCprr5NPUly019HYKWPiIiPocND\nOiwdFRAWKMGinqe43UQ2KB0WFRwqXbKppKasufM5Jx8hLEXJt7Suq6yxwmFGQkxTZWTmrZqQ\nkJSgwUEtKyEdGRkeNLinoq7IT0VBMyYdHB8u3q+mpaarttg7LCckKTM/csq7sayuucz3WE9A\nMysyuZmOjZCdrMtNNycbFRUaMbukoKaxxvk7Kx4YFRYeNcGqoqOmq7PJRS8pKjFOwbKtq6mn\nq7jaOy4nJSYyuJyTkpaeqsBPLyIbFhceM8OooqSwzmE/NCceGx0nRbeppKastsVfPDErLDFB\n0L2yrq6xvtxOOzMvLSw3upuSj5WertJaQjQkHBkcJ0m0qay9Xjo2LysoIiMoOd22rqysra2u\ntb7YTD86O0hZeGxvcnzc7Fs8My0tRbqgmZiboaqxu9g8KB4bHilAzLm1vc5eSzouKiYmKTFM\nuqmgnqGnr7/hRjAoIyQqN1fMu77UUjw4OTkzL0KznpWSk5ieqrtUMiYeHR4iLlK7ra68ez0w\nLCwtLi4yO2C8raqrsLvLa01DOjc5P1BeX1JIQDo9RURCRVHJraGcmZian6rDSjozLispKzVF\n599iRzo0MjEvNjpGXlZh4ce/wcXV5eDb71dXTT8+Pz9FUFVaY2fhycLDv7qwqKGfn6Kpr8Du\nUEQ4MSwpJyktNj1LT0xJQUA+P0xcWVBPWfXLubS6wtPR1NnqT0k/PDxETlJhaePbzMK8uLq+\nv7qwqqiorLXA11E+NjEtKigoKy89Ue7T09zv4tnedFJFPj9P3czBv8THxsXI1l9FPD0+R09l\n1c/MycnIxcfEwb+7trS0uMDLbElAODYzMzY1OD1S0cO/yNPZe3P9WktGRkxdd+bf4XhQQ0dL\nTVphYnrXzMfHx8nQ1tLNysbBvLq5tLS6yO1bRT8+OjYzNj1IYnxrZ3Te0NPeeltNTU1LT1ps\ncmtrXFVUUVFPXm733tHLycLBv7+/vb+/vbm5ur3K7U5FPTkyLzE0PU5pd+TMwL68wcnbXUxE\nQT08P0dMT1tpcHRcTlZm4+Lb0MrEvb6/vb68u7q4ubu+yuBrST06NTEvMzk+UeXUzs7X8m1g\nS0FDRkhPZuXZz9Pf625raFtPTFfgysW/uba2tri5uLm5vcXV6/lVSz86NzMzNDY6QUlQVE5M\nR0A/Pj4/SF/lz8K3sbCvsLS6wsfP2d5qUk1PUFBVXnlvcu7YzMXFy8/U2upZSUdIR0I+PD9J\nXfrodWNx7m5ZWFlXV11u7d/b9l9TTlx03dLKwry8vLu2trvE4XZze+rtXE5OUlRUVElGQD48\nOTw/Pj9ESV3Xxr/ByMbFxMDCzuRsW2Fqblpr6OXg73Nzeezh7XJle+Htcnnj09Do+19f4NTM\nzc3V2/lXUEdCQUA/Q0hOT1rw3NTOztrj7HFs/ePl2c3P0M/P3t7m8X96dGljYF9bZXBx6ex5\n8+fc0svJzM7O2eprVVNLRj89P0RLSkVKUHDe19LW0c3Nz8zHw8HEz+Pe5fNoUkpISUtLTU5W\nX3ncz8rIxsTGxcbFx871V0pCQD4+Pj4/Q0hMVmz24dPU08nJyMTGxcTHzdfvZ1dRVE9PTk9W\nXHbw29DR0dnz/n3u5v5nW1tfV0tIUGfr4fp15tPR19fQ1N/tYk9MT1pz+/H659fX3dzW2t3Z\n4npeW1xTWGDq0tzsbV5eXWRZT05QU1Vj8u7t3dTU2tvRy87V2uL+fuDnZFdh9u1waO3e0M3T\n1tvtc2RVTUdIT1FUW25ybXh54NvreGFdXl1tXlVm7dnMzNbd1szJysvLy87O0uzi3m9US0dH\nSkhJSEdMUVddYVhdY2X15eDc09DU1t3Wy8rKzNjff3x8fe98/H5sal9cV2Z8ffHt7W9lZ2D1\n2tbl+eDW2v1ZUVBOU1pSVldWXnbw6uDc7GR67/vd3OpsaH12efXqzsbEwsfMycjN1eNdTUlH\nRUlKTlZYWlVPT1JUVFpide3e1NDNysvP6m195NzX2/Lq18vQfGNlbWlhX19s+PDwXVJXYFxS\nV2X7ZWbv5dXN0N5rYGh28O3j3tnk/21sY2b5+XVsXFplbvL57drW1OB6bGFYU118+/3t29XV\n1NHSztl8XFRVWlVPU1JPWVxhbvbc1Njn5dPQ33VmeXhrZmZeYfzn7Xv6+u/t/eDPx8nM1+5g\nUlVUU0xGR0lQU19v9t7f19DOzNLc5d7Xz9rtfGX43tri6HRcTk1TTVX+8GtZXlpeX21++Onf\nzsvLzM3S19vv4+15/2FPT1psbWhaTktLUVpcbHd492ru2dLW3NjSzs7Q3nz99Nzg7/Pt7WZb\nU1x87+/6cf548ebm8W5zaVdPTk9ee2VeXWvo8e7p4+XZ0c/W6mxv+PHh3Nva6F9SV2Ht2OLy\nX1ZdWVxfaH18fOvk3dnX1OF8aO/f6HlTU1Bc8+53a3b+7uXV1NnX6/5ZTVZab25rdHLm4t36\nb+zy3uPqdWH3+OHW29TV6/RXTlNYdfT372hcW1dZZWzreV5r/+Dh5+TY19jS2uvo39vc6fL7\n5N3ocGh0eXpOQktaa11OUFtifmtZZvba0M7Lzc7Lyc/Z3u3kfmNdWV1UU1lbXFFeW0xRV/Tc\n0sjKzNDP0dfNz+PoZVhPSUpLRUdITE9TZd3OzsO/wsjO3N95Y3Jde+buY1hj6uHmemX4b2pn\n/PD5fvZjVmFkblpOVGPr5/p4cuPu4N7w2/vl4evievDa5l9jXPn0W2lt+nzu6e7v/uve5erx\n49TOytXn+3fvYE1HRFNVT01NbeDc2Nvq82p25G5q//Lg6fPb2Nv4X2d03N/sZmLz3uTo4+Xi\n2Nnd3d7pfGljVFJORUZGSFpa9NfWzNHU1+Dc7Hh+/M7O2fZm929rZFZnV1plXXZ0y8DHz+fh\n62BcWmxfU1FHTVRXYV5j7nvk5O/a92j4z8nN3tzNzM7c1M/hZlZPUkxDTFVmXlV0+eHs1c/M\n19vscm/409jfXl5v+V5PUV7uX1BUbtbPb2NdWGf079r6btrjz9jy4tjT3WJ239jP1vNbWuXZ\naFFQY21lTU5YZV5bTlV0aGlebtvS6d7MyMbT2c/V5m9dflVSUFJZVF7r3s7SbXVV3u74dFPo\n3tHMzfFpTVn5VlpfYHxyXuHjbORx6uxSV+jW4GhY5+bf5dPj42Rdc2Xj+l9qdd7UaHBmX+9e\n6N1mXPDSzeZleebmbOZmY33n4G1g7NDYVkNNWltPTnZnXVvqztbeeG3Tzs3Y69nP4+xiaN7j\nZGBYV3Vc3M/P2ltqae1SPkdc3O9OZdLJz1ja5et3SF9ebtnd29LUzM7d++n83e9da2h4Y+lk\nT0lEWlJLUvT7cvnSw8nY3NLS/XT61/dTavfc/u9sUE1OZmhd72F78d7Nzc/I0MzS3thcXlt3\naVFT9F9WP0d4V0xKUNTm+MXBxM/CxcXeWdtmblFJXURIR0ZkW3BmUGzexMXW0e3N2FTb8n3y\nYujs3HhXedr1b1Nv0Fpj7NjPaVJfVGJbYNN+W1ZU0M355Vfl21rU09rZV+nNXvt7Wm1WWu5d\n5+XN0VLX7snPTubybWJBZW1n/ljd/W9LedfY/kpaydHeY1bW7/BSQvfe19FQ0cHT1lhkynRg\nSVbXYU9ZddNiTFvhy+5j0MfE1v706l7pZlJMUXJpaknu2tveUljvUuhy4d5qfe/X3Nrb625v\n6eRXcPPMyVzL1MjIRmNXVlxDTVNITkNcbW3qY2r8ftDOysfOyNH57uzn3WN2Y9tnXWda5F1T\nbf7OztrpSUxWe95u+3ZwXElS3t5YU+TQ6trEuNxUaN3SbUtvWVNbTH9EUNTOdU1PysBy787K\nw+Xu1GJYVk98Z1pcUHpcXPBl3OVtVkN34uxOT9rW1WJbzc7aynTTyGfqWmbg7NPabt1ldFpK\nc+hh9t/ixGfx5khtT1zuSVpN6utP29LP00xlbkdgUvh3UMnZW9N8zcVK4dj52nPkxdrT0uLP\ne97aZtZfVW1Tb08+UEJJT0tlYmHj7FhaatDQ08rSwd3dx769zHtPdlA+TUpSYWF57vX5d8zy\n+E1VxPHdXtq+Z97SW9RSU05LXEtNcs1qVlVw/kNNXtXSaubAv83hyMLJ6GjKfl9CRObo8UVI\nZOPpVU5v1dpY8Vx+3Ezu4eTH4+nF7FhFcc9bXk3k2mjpysfD2uje+ONTV1VLYUpWYFDdac7n\nVmblYU5XbsTdee53yNBPW1l4ckl758/o38nOzfBl5ttlflfe9G1YWN5iblbd635uXGtTT133\n+e732FdXW+/ZVti/vczy59bRWWJGUOJKT3dm0fvpxGRiZl3QX1HPXM/u6tPf3lX8al9kXt3j\nVv1ZWFhgc1VLTE/W/uG70sfteNV4Xt/uUVTbcljTz7/cXt3U2UxdzPNUSEJT1kdX5PLMXVXR\n6VDvzMZaS2zV1UhLW978VsrUwdTtxdDge2RnXT8+UF1mbF7q4Oa+0s1u88FLSmNh6lNd9P9n\na3Fr/c5gW1F/1fBK88DL53DSytv+315dW2DmWF56ct5RSdnde1Jw+G9ZT8px3ej2z9jTZlzP\n3M10WM9PR35O51lJ2elYQ2HZ1G1czNHf1OHBztz4Zmjr/U5TVF1JTO57dFJZ1t7V2vbv4efq\nR03r7NRd0uli19LC7WPF8U5NYMjMTV/ncNtHYVtJdVLQzuPc2vVR8+Jv60bdzF1uVXrua9PZ\n235O6dlUV11azVRgzuba12tYbE3u+NpvV+rM1dH63dJ96ebPWGxe4WJPSmPpYOB5cNpOXNXZ\n2UZsyfRJV/dlRnHN0lv4x85kVM3K3mx86mNBT+PN21P++Wtfa95fZFda3OjLz+bV4P5dU2RN\nVOHby2rex9/QfUZaQ/36Tnjj7PtP+uJj92nvYlXYvt5q4NHYUVvcVUfyzdJR/dnGV1DoTV9y\ndNXUyr7Va/TWXl9vbUtCSHt1Tu5sbWBfz8vlXevL3vls1+dZV17rXVrl2tdjedbWzF956ebY\n6V5ef+T6e0tP5FBWTmzcTvrdZGdS0MZZ29zLyOzV51drb1ZbUtbQcWn0XVJOT1p3UnHq0r/I\nxcfX6N57ZllEVdpZV1dd1fToy9/nWldlTvrU3XdZ+utlVFdbWlNdc1/s4uDNyM7p6nDP1Upe\n2czP7dzMyX5RTlVOSkpUTVlQ7Mzu28rL2Wju6e/rUdTbX9hxZexceelrbmjua1pQV/no2ere\nzNvxVk9uW01YZ01L88rZbefHzvL73cLHysjQ1Hxc7llLUE9MS0hTTUxn4v5pbv7f7mTT2c/J\n3s/V5F5X+956bPdrT0tv52NZe+50WVrwf2V928rFxs3a3ebv5On4XvtrW11naPT+WEhCS1JU\nUUxs29PM3s/M3n3dz/5539TaT1n5VFzq19pYVnpXeOrWytjd3dvY2Ojs/l9iWGj1YkpETG9U\nVFFceFdecNXKycjL0drV2NdoYV9lbFtvc+L5c35ad+pw431b7tfM2WNz4mpbTEhVWFp26tvU\n3dHJ3fB4ZnVPVmFp3+D36m5o6O1nYWLg2+7g2dTh6d/x6WJPTU9oWF5oYl9YZfB57ujufHHi\n2eXq7Pvb0tfU3uPd5dnfdXr44d/2dO9rZV1bWE5OT1FPVl/r5GZZZNvQ4OjZ3tzX1N7ueuTb\ndmf449jq735YW2Btf2NaXF5s6np659zX29bS0NTT3PlqXWZcSkFARk5OWHH24Nva2NrQysfH\n0+nxd2VbVlZabuz9ZXvX0t3m7P51cm5fW1tfe/Rwb35qWVxv+NXY2Oln4tje5HdibHx083D3\n6Oj5a1xcdHhzZGZ+fOzazc7a3dv0Vk5cXFhXVVZYWmr5dmJf5NPO1+fn4NXOzc/QzdLgemRm\nbm5dUlJWT1ZTTkxSdPD17N/ZzszP2+Pd3vhgWVpnbHz3+/H3bWdoa2teWllTV1/61dTV0s7O\nzs/X5Wtibvp6YF1cYVxYX3l2aFtTVF555ub27/Hqe3Xd19HP2ejz5dXZb1laZm93Z1ZTVlpm\nbnT47OLmcWF33tfc6+na29/a3unu9WtZYGhr7uT2amNbXl1cbffv6d7a7nZ57O9uZV9haGVd\nZ2547Nvb5fP37Ozq5+Hsf/N6YVtidWVcaOTj7vTn2tbKytLg5Nrcbk9UX/x+VElJUF9uXVhY\nX/3p/3Ti08nM0tPU4eje3/Bpa3dqWlNYYnF+a25zamBbWVlicXNvfHN18eba29HOzc7U2+Di\n6uVvUEhISEpLTlz40tHa3uDa1tLa49va2eLsdnHz53tmZ3NpW1dYXF5fXVVXb+Le5m9sfu/d\n3N3m4dTW2NLT3uTreG1dWFBNUU9OT1vx5e3o3NfUz9Ha4O3373Zu+uDfelZUWFFUVlZjcfnf\n4e7m1dHL0Ot569vy59zb0eh2aVdoXFRRTl9vcfFqZuX+6+xZV2Fu4vly3+7s8m/z2NDO0djp\nfFhOVldXWmHx6GVbbefT0uVrX2X/f33dz8fKzdDkd1pNSk1JSVRXanzx3dzX42hx2t7i32Vl\naHbf9l/i39jO3+Lp7vFZVFro7vl8bODeem12fGdTVFpeYuTf3+Ds/ub0e2Vgfdrb0MzM13/z\nblRKR09NRkhNU2zm79rU0c3NxMDHzsvOemRLTVFJXFtQVmdv8nVn6O/t+OpuaN3c09zi3tbe\nblNPWe50W1VY4+hsXlze8GPl3d/86eHT1dv3/eZtbFpbcufU32/q/GxeVmN95F9dUkxi++nd\n5WXiz9TW62To2+PzX/fj4Oxt2+fv4G1VXFNeaFBefXhvWFtmaPrV0c7V5tLO4eBoad9mb35g\n/WZfb2LncuNyU/RXbvHb0OVXXuVXX3jt1mBo2ehfcuvq4nPv3+p+YXVr5u5n82/z6G1mV3fq\n59Zt+H5n2+Rj5WdmfmjzW27429xvXWBo69twZP7P0ubh0tfdX19vWlNPVV9WS1j/29fn9djq\n8uvt3N3v5ed8ePx3c1951uNq1Nfm02VXYFNycFFfVFJlWmvs3/BiX9zHzt790MbNcVLkfFr+\nWmhdX9X+YG5kZFJQXU9o7urc4NHM5M3P4+946fvkX3Da8urwet/uYE9dZNzZTk5PXWBMUmNn\n/tLQ0tTZ0sbLwMpvX+zqV0VJTVRIUO9fbnVsfNvsz/jty3Jc1GVk607bz8/Gz8xb5VlX01pW\n52VRTklY7ef68NjOxMZqbVJOW+/NxVFASWLy/d3a00xJ4ebY5l/TWeLC2+JWbN9ST9vT2+hQ\neUtH1NvQ5ljafEtrzcTfV1Np0OZVW0xy5W74X1jZz+njWezLy9NL7WBTU0nE5UhVZM/O087W\nx071Ze7AWVVj6FFBcV7NyGNfR0lcSD/XzN1pV8y/3lhc027L10f+V2LI8urKXklRYN64wM/K\nU9DtSDxa2E1PTNHUS0vQwMjWW0xdUW1tRdPUceZR5sFdTlhd38vdzOFgR1tLev5W0MK+12Vt\n6N/fV0lbVtReTb7eUV8+XUo3TenP+9vS4tFa0tVpZW5fW2Hk2OxeW01SXk9PTNbBz+DRwcnz\nXl5/SjxH7s9fPlDLw8Xu1L7VV1jh2X3wy7reOTtt71I4SsXKc1TLt7nIwrS1vsjMv77Z08nM\n8j8vLiwkHhwbGxscJSktOFPAtrq4rKisu7ilnp2Vi4aHj5eZozwYEBUaHSd8qqOrw0EnGQ8N\nDA0OEhkkPFdMPD02JyYtPdSwkoCAgIGFhZATAAoLCQsWtIaKmJaUnykIBA8OCQ0nrafiWK5h\nGg4QGiEbLKObmpicl4CAgY6aj5EfAg8hGBUasYuOPEy7aB4LCRwjFRxArLQqJmEtFRIXISwn\nQqCeqa+utbyHgICMkYeJLwAOJQ4NFKuKjymvnzoQChVMHw42oqslGT3IGgwZJyYZIbOj/TG3\nsGAjyICAiY2JgI0JADMfCQs2jIamKJSuEwUHGzcUHpuarygp5ioNDyQkHhxcn7Q0t7I6Hxzk\nh4CAh4OFhSAADCkDCRyYipDLkZEeDAgPHBUSppWgrlG95xEMGRUTGCKwpT7lnq0sGB1rioCD\niYSEhCkFHVwCDSWXkJ5sjJQWDQ0ZFwwVnaRmw7yvHwwVJA8OGz+tz0SfnNI3JjE+j4CAiYOD\ngTMFJNMACBmfl7lDjJIVDg4hFggRmZ/fvaWYNg8eORMPFS3NOe2epz9gPi0fIYyAg5GAgIMt\nB0k9AAQhm502uImSEhMcHw0HHpvHQ56WnSgXLCAKDBgoNUCnmaf1uzgaFUyAgJeGgICMERqj\nCgARQ6gtVo6EXhYtMxUFC1e6IraZlbcmPlUSCREZHhw7qKc/a887JSGRgISVgoCC9RLBtgQE\nJK+0Ka2JkBsdMCoNBha0QCaul5o3HS8rDQoVJSgicp+pXb6zuWs7mYCJloeHhKgfT6cPDBQ3\n2iomo5g9LCk/JxgRKTMuLC/UZyokMSsrL0S+tL67rrWyuMPe07ejp66fnJyeoqKercPvQS8u\nKCpCU0o5NEF6Oi40PjcrJCUoJCAjLTAvND5HXGRK2rzO1ayhnJyYk5OVmJiYoK/GSjYuJik2\nPzMsKCwuKigrLi4mISMjHx0fKjM0Nklt3+V/1bu2qZ+cmZORkZaYmZieq7v9MyolJicmKSsp\nJyksMDMvLS8qIyEjIyAkKzQ/U9HG3GXcys28p5yXlZOSlpudnqOrtMVXOC0qKyooJyYlJys2\nP0BHTDYpIyEfHyIqLzI9ddXbRzE1RuK0oZiQjo6Pk5mdo7XPVUk6NC05QjQrKyknISIvPTk7\nQjswJyIkHx8kKS05Re/VWExK37SnnZSOjIyOkZieqsFKNykkIiQqMC0pKCooJCcwQEhVT0I5\nLywqIh4jKC03PE7Y3E9cv6uempKOjY6QlZeerug+KyIfHyQqLCwtLi0qKS4yNzlDTTw0MC0q\nKCIjJygsNTxETu62qJ+alI+Njo6PlJujsdU2Ix4eHyIlKTA3MCsrLjQvKyssLzI0MC8uKyUj\nKCgqMDpVybKknJWQjo6Pj5OYnaKtv04tIB4cHR4fJS0vMz9CRj80LSwqKi0rKiwsKysrLS4s\nLjdftqOalI+NjI6RlpmfqbjQSzMqIyEgHx8jKCwuMj1DQDw4MiwoKiwnJSosLS0uMzo5PX+1\nppyWj42Nj5GXnaOsvdRJMysoJiYlIyMmKSsvMj1VSz08OC4pIyMmIyIlKjE5OUXZv62hmpWQ\njo6PlJmeprHDYTsvLSspJyUmJyotLzI5REZEQToxLSkkIiMlJSQmKzU8RNq3qJ6YlI+PkJCT\nmJ2lsshDMSsmJCcnJicpLTI1Nj1KRT07OzguKSglIB4gKCopMEjZv6+hmZaUkpGRlpqdoKq4\n3EI1LiopJiMkJywuLzU6Ojs7OjczMzQuKistLCwsMzk8Sdi3raWem5iXl5eZnaClrLz9RDYv\nLCoqKywtLzEyNzo5NTIzNTEtLjI1NDI2Ozc1PEtne8CtpqOhnJmanJ6foqessL1nQT49Mioq\nLzAsKSosKysqKiorLjM3OUFNU0dASFJk3cG0q6WfnZ2dnJ2fpZuZysYnLy4ZHyQvL0tN88Bh\nMC8oHx8bGh0bFhofHB9jno+FgICAhZacJwsAAgYRLLuRhYKMltAbEAgDCBQf356XkZa5JRoO\nCQcMGTW7o46DgICAgJHOGBAIBwEiP5qWj5SWrRcPDQ4WL8+mlZmfqTgdGxkVHB0cHyosOjYl\nL6iMgoCAgInbLQoDAAUkvZOTio+PIQoFCA4f+ZaLh5KfPxwODQ8WKjMzOTcrKiQVDyCZg4CA\ngICNPg8CAAAXN5GNh4yPuAwDAAQR25qIgomeRBUKCg0WMrayxF0nHRoXEQ4cmoCAgICAkiIN\nAAAAFrmJhoSLmjwJAAACDrONgYCGnSgPBwcLGWagnrFDHxUUDgoOFkeBgICAgIcyDgAAAAAl\niICAgZKqFAIAAAMpjoGAgYu8FwgCBw8qtqew/i4aFBAPDQ8cnICAgICAkRUJAAAACquDgICE\nmywMAAAACbWIgICGli4TBQIGEzuupb09JRkYFhMOEyaPgICAgICeDgkAAAAMq4GAgYSaHQoA\nAAAItYiAgIecLBMHBQcUNqukxy8hHx4YFA4QI5KAgICAgJsQCQIBAApKhYCAg5clDQQAAAUt\njoCAiJ09Gw0ICBEosqTEKx0fKCYaEBIhm4CAgICAjxcLAwAAByWPgICCj1oTCQAAAxaehoGH\nk7EqEggFCxc1vtw/NEzW2ywVEBRLiICAgICG4BYKBAAACjqHgoCNmkoZCgABCTOViYmOl6s4\nFQsKDxsoJyEhNsKwOhsVFSmRgICAgICYJxEKAAADEpmJgIiNnTcUBAICEUuckpKUna4rFA0N\nEBcaGh8+tKOr1i8mKqOEgICAgIy9Jw8DAAAELJyLio2Nok8OCAMKGjG2pZaTlKQ5HhYTEhEP\nEh/foZymv11Kp4qAgICGlK3vEwoAAAMespKMjYuXqBoMBgkTH0K4mpKPmtojFxQRDg0OGjqt\noqOrt82ujoaAgIWOoqofEQEBBRXjoZCQi5OdKg8JCBAUIDSqmJKXsj8jHBUOCwsVKrSioqGh\npZyNiYCAiY+ltyETBwUKFDexmJWOkp1THBANDw8WH0urmpukt1Y0GhELCxUfSMyuoZ2SioSE\ngYaPmbkyFw4KDBEeN7qnm5ecqzofGBcWExYePa+ioaWqtUIgFQ4PFRsgMr2nm4uCgICDjpeh\n8ykVDQ4TFyYuRrupqK2+QzIqIh0bHiU1Tkxhz72po6nYRW5CMjA0P9ywp6WmrcFl4NjNw7y6\ntauqrr7sOzAvMTZIy7q4wP5BNzEwMzE4SebbaD8vKiUjIiUrQ7inn5+jqa6yvs7e0MG0qqmr\nr7jWTT8/TVnizMxySTszMDEzNTlFXGtPPjMtKicnKCw7zK+op6qwtra6vMbFvrStr6+ytrzD\n50xOVOrf608/Ozk2MzAvNj5Nc9vqUkc+Ni4sLTdpvbGwsbGvr7W+zeRmX+bZwLy8xdJ8VGJ/\nzc7XXlJMR0RBPT9NeMzDwM1eSD82LywrMlDJuba5urm3vcxsUE9Tcmt96NXP1Olca9fEw9NZ\nTlhdc11Z5ci6trrIdktBPTUuLS85Vcq9u7u7v8TJz9fmW0dHP0VPU0pGRkld7NXRzdPZ1MzG\nwr29vLq1ub/VXFRMPzcxLjE7TmpdVV/XxMHG0XRWUlRLTl/ueWx1+tLGxszSzMnMz9ju8eLZ\nyMTK0WtHPj5APz09Q05c3s7OysC4rK3XMy03ODI1P0lEWs6+u7u8urm9xtLf3ON07tjJycTL\nZUI8QUlHOzY2Pktc391w38rCwcvOys7ceGxWTlZPUFny293c7t7b0MzR2uHt2cnKwczndUdE\nREA9NzY4Q2Tt9uHZy77AvczcYFh9a2Vf2NDLyc7V3PH93t/m6PJsbF9c6NnLz/ZcWV1SSD49\nPEJNTFBg4szHxsXI4mhTU09GSFfdz8HCx8/Xz9bMxsPGydLk5NXIydHlbFVGPDc2NTU2OUFM\nYWv76NLAv8HO2W1paVVadtrOxcTCwsLBy8/a19DQ1nBdX/7qb0w/Ozw9PT0/REpe4d7g293k\n58/N0+X6aFxTTl7xzsfAv7y4ub/U+3bn4elaS1FdZF9YUU5JSklEQUNISktOWW57Zmzbx8TI\n0NDO0txfUk1a68/Jy8e9vb7GzcW/xdpqeNzV8lBAOjk4NzQ1OkVPXH3d2ehubW7s3tPKw8HD\nzuxgTUpRXvXSxb25ur3GzdHjYFdoee/7c2JWTkpCPkVPVVt6eG5XRTw4Oj1FSlLiwLy/zNnh\n387Nx762r66wucDHxsvlZH/h2epSQTgxLSopJyksLzI1O0BMWldVV9q5rKWgn6GmqKenqKyx\nvc7Z2udnVkAxKystMjU2NC4rKCYjIiIkJyouOUrty8m/sqacmZqamZaWlpmeqspCLScpKy8v\nKygoKywsLCwuND9NUEY9PDo4NTU6RU5c2MjG1e/+fsq3qZ+foKGin6ChqLDIQjYxNDs8OzQu\nLC0zOT09PkFESUI8NjMzNjk5Oz1ESEpMUWj36+zlwK2jnZ+lqq2mpKGlq7LRckVBSD09MSws\nLzxBQzwzLy4vLy4tLC0vNz5IVGZ8+Hlr6Nzc6Fda0q6cj4uNkqG/Si4vJiQfHzXJop2isjYn\nHh0dGx0hNN61rLK/WDsvLC0yQmXLvrm7zt9WRzguMDRYrJmLhomSySUcHDEwWT/+qqSbsDca\nDxQZKj7szF9PNjArKis38rutr7bYVEk/Pz93vLS7095mXKyYjYqSoTIgIiI+K0lDv6OtsSoe\nGx0rLkVXxbvJPSgiJzZGzL6trbPBSDYuNj1Oa1tIUc7UPytGnYuEi54xGyst+SwvWK6Xo7wf\nGh8pPC0uRrav2CgeHy1HRFfor6y3QSQjKktZQU/Er7e+zlU7Tp6PiouarTo5KiYmJG+3oazY\nMikrKyckKkm2wz4iISozOS4+yKmq0zgsPk5FOTNssKa2QzhXye24l4uGjaE9Hy8mKBwm0aeb\nrlArLDQmHh0sxbTMLyszQjUnKUe1sc47NENXRTQzcru7zMu9wMtIdKeRi4uWpLvePSAbGCzp\nrbG8vL7KNB8bHictLSw558RhNi01Q0A4N1S/trnLW1f5ZEE5T8K2vL+1n5SPkZqepqbFOR8c\nHyQrKjdKvrW/XjkxKSIeHiIsNz9RzLm5yVRMVVpJOjc8ar21ur63ra68WtapmpWan56dnbBE\nIB8fJCIiKz+8tr3ZZlo5KB4dICYpKjdpvbjC3eLfZT4vLzZH18W6t62qrbWxn5eUmZubm562\nPyUjHx4cHik8WV5TTFFHMicjJikqKi06XdLZd27e0vBMPjxK8dnSv7Kur6+uqp2amZyenJ6j\nvUotKyYiISg1QElETUtFOC4qJykoKSotNz9KT17159v0Wk5XbWhuyrO5tbq8qqeenZ2enJuf\npbvMTzsoIyYrNDQxND07OzYuLCswPCcoNCg5OTJ+YlrExNu+z0/b0d7Av7uwrrCrpKGenZ2b\nnJ+ouH4/MSoqKCkpKy0tLzI1OTozLisoJSUlKC9BQ0rOx77Gw7vCyruyr66urrGtrq2rq6el\nop+ip620v/0/LyglIiIhIiYqLjAwLSoqKiopKi04RF7ev7S3sq6zsK+uqKurp6ytsbG0vbq4\nsrKytLfEzt9MOTEuKygnJycmKSsvMTEzNzg1Nz5P1cnAv7q0srS7t7O2tbWztba3ubi6ubzD\nzNXV2+J8U0dCRUdJR0M/ODMvLSwwOkVKUU9SUElLT1nq0MrHwL+9vLq4u72+wcbP3tnPzcjH\nztLP09rie29lX2FOS01MRT04NTExNDtHTmt3aXFu+/zl39bQxb69vL29wMLEysrM0uFrUExT\nZX303+Hp5ODa+FtaX3NqcOzxZE5EPTo6PkhNUVRUWVxjXmDnyr67vL/Fwr/Ezt/0YltRS0ZK\n+dPP1dvSzMvO3fXh0tB+UElRXFRMREhQWlhNTmLp3uR6X2989/jv8O3e6nRjYWNpefXez8vO\n1d7h7eHc5+v45t/m1s/OycXFyNHe53twaFNIQUFFQTw7PD9APz49RVR+2sSyb7Chzz46RKvj\nNJnPLckvo0QrvLTaOLi4wNdLzb5EP1XIO0JGRWU1LTxBMzJiXVtS7rvH0NzHyF3vvbi/ubLF\nu8bQyF7bbsxW3rhX/uR1SVM/PlQ+RVo/PEpTUEtDRf5aTOf8XcfBzuBXXMjO38Lp59faT21R\nXtLS5tnNzr69ydfI1szLWVPe/lpqc1tNS09RPzhHWENBTVtqcllsWUpLTFJU8MvKxcC7wM/M\nxs9XSGbO5N7X3OHIz8bKZ+XPzeDX+NDP5c/aXFJOTEVESFdnbF1SWU0/NzExMDAuMzs8T9PI\nvcC8tbnMzszM1/DMrqWel5mWl5+ovjgoHhkbHB0pOT7ux9ncTTMtJR4cHB0iLT7ZuK6opqyu\nr7m6wM7RzMChlJmWjo+WnanKKxkXGxQSHC02TruxssVNPSgaGBsbGyMvPHm7ra+0rqqzy7+5\nwWvZtr2umJablo+TpLew4h8YHiEbHSpE3MvEv7vNNiklHxsZHCQtNEHbvr7H0N/X086/vL26\ntLCzrp+am56enaCorsJbPDc0LiwrLDA0OTs7OzYzMjAvLy4sLCwsLS80Okpq1L+8ube0tLi4\nu7y5rqagnp6dnp6gpay++D4xLy0qKSoqKisuLi4tLSomJyoqKSotLzlDWtHAta+ur7Cws7vC\nwLOqop+dm5qcnZ+ms85IMSomJSYlJygpKiwsLzEuLCstLCssLTA2PljXxb23tLW3tbe6ucG+\nr6ignp2cnJ2fp67AYkAvKykpKiosLi8xNDU3MzAvLiwqKisvODxCSk/oyLy2tbW6vb7GzNrN\ntqmhnp+dnZ6fpKq11EgyKygoKSksLS4wNDc2ODkzMC4sLCsvNTk/RUtj08G9u7u9v8bP4mTZ\nsaOdnZybmpueoqm54z0sJyYpKy0vLzAyMC8sKioqKicnKCwzPkVd08C5trm5trvI0dfV29O7\nq6GdnJucnqOmqrLFUjUsKywuLi4uLCsrKiorLS8vLzE0Nz1ETFr82cnHxce+ubzF1eXa7Hzf\nu6qjn5+en6Kkpaq1z0s3LywsLTE3NTEuLS0uLi4uLy8vLzM3OD5JUWHg08/Lys7S0tjb09fW\nuaeem5qZmp2gpamzzUkxKicmJykyPT87My8uLi8vJyMlJi0yPEZKSVnTxL2+xc3Rz9LW1OHd\nr52YmpqVk5ihsMbdPywgHyUrLi43TtjQUj02LyghIiQmJys2Rl9ueNfP42N44fZXetPK2OjK\nvKmcn52SkZmfm5/rO0AvHB0wKyo51+Zn2l02KCkmHh4kKSgxQUlZzczg7k9Re09SfvfjzLzY\nfrymnKeWjpuVlpypwlcvLBsjKx4rWUM1vtc3SDQmIyQeICQmLzVF79zWxclf6tRnTdzgeb7I\nxb/HqZmkmI2bkZifoEU4NiAYJCEcMDE/TsO5zURAMCEnIR4fIysxP1rLybq50vjuWUxXSElT\nbdnGyqOWpY6Omo2fl59B0ywdHB8dHiM0PDe+2G5ETTAnJiIhHyUnLj31zb21vcDS01xHOj5J\nP2JZ9saomKiQjpiLn5OgRLYyJB0eHx4jPDpAucrTRUMqJCIfHR0iJi06YnTIub/P6dtWTEJL\nQU3v2te4m5yfi5KOjpuPtMvNJh4aHR0bJTcrS9HWZUJHKSUmIB4fIikuQFlhyL6/zs3WXF9B\nSj9E7F3MrpyflYySjJKSla6z+ykfHR0aGSUnKT9LXEhTPisrKCEgHh8jJzRCV8m/vLa5v8r4\nYlNPWVjYzqmbpZGQko2XkJmyrXYtIxwdGBklISc6SF9XbEAtLikgHx0dHiQtMULVurWxrbC2\nubvB6dHd6NOxoqqYkZWPlpKXqKq/MSghHBkYHR4fLDM2Oz09Mi8xKiYmJicoLDE4Wr+4sqmp\nra6wucXIw9Br1a+trZuZmZaXlZuoq7s0KiYdGhsdHR4jKysuNjEuMjUwLi0vMTJATubCtq6t\nq6uur7CxuLy6vczRztTcybewrqulpairsbvD3Eo8NC4tLCwqKSgoJyYqLS40Ojk5O0FLUmbz\n2svFvr28u7WxsbK1s7S2ubq7urGsrKuqqqyttMV9TD81LiwqKispKSgqLS4wMzU4PD0+QUNN\nWF5eYOPWzcK9u7eysbCur6+urq+vr7G0tra4urq+ydbmWkQ6MC4tKikpKy0uMC8xNjs9PD5D\nT1dUV1pu8OnVzcO5tbWysrOxr7G1tbS3urvBx765vMPHytLvX0w/Ojc1Ly4vMDIzNTAwNTY3\nOTs/REdPU1/d0c7Iw7++ure3s7Kzs7KwsrKys7S4uLu+vMDXWktCPjw3Ly4uLi4tLy8xODs6\nPENIVFdQU2Dh6+jd0MW/vcDBvLa0tLa3p6q7p9u+wF3C3EfNwFz21FJDQjA0LigtLCcsNS83\nPUro376+wMK9u8S6wcjPXspCS1Y1QTkz3U5iuM7EsrespKqgnKCeoKusvUw9Jh4eGRsdHCMm\nKz1BSM/J0Mjg+2pKTUQ8Pj4/Rkruy76xsq2tr6ixrqKgpJ+Xlpqcn6dOLSgbEhEUExQaJC81\n47e9uq+2yVxAOi0sNy8xQVLfycW4tbivtLi4xb++0aqcn5mQlZKcoKFFJCMXEBARFxccN07t\nt6utt8DZOSYjIx8fKjc/37ivsLCrrb7Cyl1WXk1Bq5Sal4uMjZeemj8XGxULDA8XHB5fqbao\nn6m6STMqGBgeGx0tRMa7raGrta616Uc8Ojw/TmHLmY2UjIeMjp6lqhwOFQ8KDhcoMjqnnK2r\nqWsrHRoaERYoKjS4qqepraq7P0ZCNTs8Xbq6urGoloyVkomSlarcyx4NGBoQGClVueK1odYz\nQygYFRMbGhk4veesnqOvzMC+NSpu1UnTrqyztq62o5CYl4+RlKw5uzURFiIaGiNFtvRHq7gs\nKyodGRcdKCIwsq60qKezbDpLPSgv6s5ryLCssm7EopWZmI+MkqK1r0oYFyIfGSRDwHJTvbst\nIicfGBccJicuwau4t62y2jo6TTk03rXIza+qss7HvqCTlZaPkJepUt0rExQjHh8uW7i7UdDO\nKR8fGxobHS1Hb7Knra6wxk4wLD07NW68zMOur7d51a+clZiWkZOcuUJRJxgaKScqOuK6zDhE\nYCodHR0hJClLv7y0q6+9/z83KyctNT9JzcO9t7W303e5mZOWmJGQnLP5xzMcGygxLCtGvMcy\nL0QyHhoeJiclNsa4xMW6vk0wLS8uLjvrvLvAtKurs7+9t52WmJqalJqsTT08KR4fJzMzMj1r\nfjo1MC0nHx4iKS4xRNfFvr7H22dy39bb38W8vsnMvcPY2mZeuKOdnqCcm56ou3ZAODErKScr\nMjg/R0Y7ODUvLSwqLC4yOD1ES/3f597se+N0VVVfbnvv0srHxb2tpJ+enZqYmJqfqbXQTjMq\nJSIiJywuKyknJSYnKSgnKSwyNTxMYdzHvLu6vr68vL/My8PAvr/Bvq2hnZ6fnZyepKy+Xj81\nLSglKCwvNDIvLCsqKiknJicsNDk/TGzMv729wcfFyM7LxcnMysbFxczLuKumpaOenJ2epK/B\nf0kzKykoKSwtLi0tLCopKisqKy0yPERa6eDWy8jK03Bm4M7Gx8K9vr++xdDKs6afn5+cm5yh\nrb5mPjEqJyYpKi4zMzMwLiwqKysrLC81PkdYce7c3t3QysfIyMXDyc3O4OzPz+TLrKCdnpya\nmpyhqrxiOy4qJSIkJysuLy4rKCgpKissMDU9SFvg2M/NzsvIw8LGyczFvsjk9NHBvLqzqaGe\nnp+foaWsuNFKOi8sKigmJyosLi4rKSkqLzY5OTg9Q0lWZGnp3MvAu7q8vb/L43zayb+7wL+w\npqCfn52dnaCps89GMiokICAhIyQkJisrKiktNTw/Pz5EVtTGyMjIwb2+xM/Z1c7KzMzIxL2/\nxbiso5+hn5+fn6WuykMyKCUjIiMiJSgqLS8vLi80Njk+Q0tOZdfVz8XFyMvLxsfHy8vMzdLU\nz8vFva+nn52dnJ2gpay8Vy8mIR8gIiQmKC0wNjc2Njg6PUNKTlBUVFl25dLS3NzOy8nFys7N\nz9HQysjMuKignZ2dnZ+lqrbXPzApIiEjJCcpKioqLzQ2Njg/SVBmfvPu1s7aaWX172ZSS05a\ndN7ez8G4sra0qqKenZ2dn6Glrb9PMSQeHiAlJyktNEtfQTMsLjIwLiotSc3G19LEwuM+PEpX\ncVr8w7qytbe6tZyTlpqZkpmv3F1EIhodICQhKEJmPis1RisgIicqKTVoxb63q6q0v9ZhPzk3\nOD1Rzt/LycO52te/spudm5OTlqSirD8qHyEcGSQoMDFb1UNCNS4qIiUoJytD3ty6r6+yu9RO\nPDg9Sj9pz9PDw7DA2Liumpyej5GYn6CzPCggIBgVIykoM+dBPGo6KigiJiomM1tkvqutr7G6\n0WJCOz06YMVY1bu0xs+32s6hn5yZlpSfo6/HJh4kGxgiKi0vbW9dUUY9LSQoKiIyVVW/sK+r\nrrjORDM2Myw63UpfubvLzsDNuZ2gmJGSkp6jrWkjISIXGScoLTh/WFlQOi0kICQlJTxu87Wr\nra2zx+1FNTY5OEbiT9m3v76/wl69np6blJOWnKSvZyIlIxgaKSotSdZjU0Q9LiUgISAkOEnt\ntKysqrC+4EE5OjY0PUxWx8jHucXT3b2dnpySkpWboa/aKSQfGBsnIytQ21VWTEAtJSUmJCg5\nSdaxrbGvttpFLy8tKjE+R8/Fuqq6tblVvJyXpJORl5SrrL4lHyMYGSslKV3R4D5ETS4eHiMe\nIS87Wr6uqKyss9NFPTctMzxRZMuuuruwydDqppmjmZGTmZ6quzIiIBoXISYiM93fXWl7Pykj\nJSIeKDlBz66ys7K40TgwMjIvOerNxbSttba60LqZlZ+UkpOVr7TBJhoeGBYhISZNT/ZhYGdD\nJh0lIyMtP/q7rqmorrvNRTMvLSw0S15ws7W4r8axppqampaUlJ+4vEskHB0dHyIkNVZPTmxJ\nOy8nIyckJS9I3L63tK2vxt9eQj1DRFraXMe1uMDTzsiroqOenZeYna65wT0nHyEfHh4mOEI+\nS87NSDAvOjEqLD1NT2PFtbe/zM/zRT1CVU9IW9vAxsS/v7uupqSkop2cnquxu806KicpKCMm\nMjo0MDtJQjUvNTw6MzM8REhX7N50T05z3eXkzcXAxc3KxcfFysGrop6enZmZnKuwvVwoHh4j\nIh8hKzQ1MTM3PD43OktWQz9FSD8+QU5mYfHOvbq4tre4tri9xs7Lxsm/pp+jpaSfo6/7S0Ev\nIh4hKCsnJzJOSz4/THX6TEhXZEw9PEZKSvxtTlNJRUFG4Li7TOe8ura/vL6+qpeXm5aXmJyt\nPy0mGhIPFBoeJDvLta6vv8XLPigpKyQlKzBA59rMurrExMO7tL7Curm4ube6vMi3mpScnJ2Z\nma41JyYcFRERGR4hL2e/t665xcRgMywtKiouMz/6zc2/vLy5ubu5uL/Avb64vMPGyry4rZya\nn6GknqV2MikkHRgYGR8nKjNhyMLHy9xeSTk0LywxNzQ4StjIzsO2ra2ur66sr66ytLG8urm9\nv868vs3M19VtTlpGNS40MismKj06MjlS7VBM1tlZUk1YUDxCQDw+WdTowbWzsbGsqrO5s7nA\nwbvC2cW+zU5A99ZMOT1NRzs9Pj86P1I/MzZP7kY3WMrI2vvFzdPGU1b758987cjPxsbJxMDP\n0ry+0Na5u8Zv7883OlBOPS00U2lHN1jOUVxRTvdf7WRI17XB6OPI0ub50s9NYc+8aduxxeBn\n+LtJO/3Hxl9b3dpRTUhDPDgzPDtJbVLh9sDJzsrl0sS+V9zBz8pFP9BpV0BkyFn81su7zdPL\n0sZnWFFQ1HbR4dDI709NTFJXW04zLD1CLkDUyc/YwcG7yurDTdDKytZI2cq43GfBasH5RcjQ\na2tIVtdDQ0NEUfvTRee5zr/RUuzSzEE7SPtMSVpAVVfdS0LOzc3DvcVht83jcUy1Wk7LS25f\n48xSQzy/yT3nSki2V8nQNru/aU1Q1N3w8j5GZE3KPU7Sc1HV4UHRU2K6TWS3fMnMR1jO7kXo\n3O7ZZMTSPN6+12Ff8sbQzH1+00TJTDTRWEfVLz/MMEe/Oji/2bnYarHTs7rPek23wEo80L1K\n78hCT+083Gcsvlw1usxC1rfmO9xXz8Y8u248UcDHOVpD2EM/v03rfLWtO17NvlVGdUP0Zl1N\nbf25tV3ZvczCu+9QblTtYC47wlM5V95bcmfK/jhJ9UQ4eHbu2nTN7966x0X8vLfJUr630tZX\nVFBHx08/z2pJX/1c5m1g3FdPy21Sv+dg3GBMU01KfmRS4m5F3+xj2ldhXWnaxMbj0MjPyb/b\ndtH4Zn1WSVn9V0BK6Mx4Umpc1cXOd//azMvNdlpSa+pSS0g9RVJPZVZV6u37ztph68nGzXLu\nvL3hXnnRzW9LV+Z3XklCUGNUQkdkz9RqVWnDus78zszCusNxUF1v4ftRTmPf22pl1OFWUkdF\nXmJGPDg1NDc8RlBsx7y8yWzmw7/O297TwLizsK+qoqOnrr/iTzgqJis1RlBKSEY3LCMfICQn\nKzZKaNPK0efZxcb6edHR06qOhIiWoaq0QBkPEx1FsK2lnaGxPh4YFhcbHSM64dl7PTQ3LCUp\nL02vpaSjo6Wr2S8owYyFkqWtpp7lFw8UJMbRWbKkoK4vGxodIR4fLE69vFY9PzovKiYvSdGx\nqaalqbLPNyk9mIiNnKqqnrAhExQfacP9w6yfos8mHB0jIRwfLN+1zEhHT0YwJiMrTcvIu6mg\no7VUO09UzZuNjpmen6G8KxsVGik5T8mxp6OuSichHxwbHSM05sLCxMtlOiwmKDA/Xceuop+j\nqrxdOSxCpZeXm5uamqPILR0cHyUrNFS+sLHBTDkvKCAeHyYxPk7x1c3aSzk4Qlvez8W2ra24\n2nzvTTo9u56Zm5+joKCovjspKC84NjExN0hfSDo2O0E+OTU0NTU2OUBKVlxp1s3R509NYXZx\nXWLRwsXP2bqnoaatrKWipKevwNN9VTwwKygsNDw9Q0M8OTYzLiwsMT1IRz8/PkVd4c3MzcvL\nztDa9ubMwMXe1rClqK2vpp+en6m5z95+RS8qKywvMC8tLjEyNjo1LzA1Oj5MYuPSz9Pbek0/\nP0df08C6vL27u8teS9KtqaurpJuanKGvx1g/NSkjJSgwOj48NDEuLCwqKi8/XuxeUF/e21hG\nSF3Zxb7CwLy5v+J+e/J7W+i5pKGqr6yfn6ayy21cVT0tKi80OTo3ODIyMzY8PDg1Nz1EREVK\nXu92bFtbZ/Hk6Gdc7NHLzc3R3d/QuKKbo6uuoJyhq75aRDwyLSguOkVSQzwzLy4pKCgmKS9F\n5u/b1cG8zNhzXl9i3c3OzMfGz2hNREZjc09ypJWbpKuknKfEPjY/Sj80LD3YzWo0MTExLiUh\nJSw5QXnO1cLGyepERkhAOjtmysHHz7ivu21GVVY5LS2+k5CcnpqQl8QqKDApHxsjba+8y87B\n1C8eGR4kJiUsXbOyyc3E0T8tKzA3O03Ar6mrrq62v9tbNi4zto+Ol5iWj501HSckFxQXMr7H\nTLqqtj8gHiIiHh8tbLzDv7OyzzsyNDYtMEbNubexqqm1u7ayvU48SaSPl5ydlpOwJB4rGxUR\nHj3TRtOnqboxKCooHh0mPGNc2a+ruV5PSDoqKT11w7qtpqi0wbq72zUsNUmrl5mYmJSWqi8q\nLh0YFSA34E/Dra6/PS0oIx4dISw7Q+e7r7XHblVJOz9KbMi0q6eqsLe1ustEODxCvaOipqSc\nnKlaOjYpHxwfKTxCXca2usxjRzkuKiksMDQ7StjFw87m1c3Hy8vDu7i7yNDP13lrTENBQl/J\nv8i9rKaor7m1sL/kX0lRXEdARD4/Pzo2NjMzNjY3OzxBTVRPUVZ1z8/d3+Xi9Wxxed/3ZXLn\n3eZn6721uq+no5+jqqmqs8RWOz8/MCstMz08LywxNjMyLzY8PUBHVf3n19PZ29fTycnP39zM\n1GdRWE9IQjxF2L2+tKegnqCmpqSru9ViW1k+LzM3MCwpKCssKiwuNT1DSElQUU9y0cTGy8e/\nvL7Fzc3Q+1FMTEVKT0dM17+5rKSgn6Snpaq2vtdNQTw4ODYwMTArKCosLS0uMzk7Oj9MbNTI\nwsO9ubi5u73Ez974Z1hTTU5TRzxD4cTBtauloqKmp6mvtcLrWEQ2Li8vLSwsLS8uLTA4ODUy\nMTpIX+rPxLu4uLi4u8bQ5HFfXmlq9fFmT0hHUerYxK+noZ+ho6Knsb/mST04ListLi8sLSwu\nLCorKy85RUv9ycHCv7+9ucLRzcrJxcrS1Nh3TkhGPz87Nz1wv7WrpJ+dnp+gpq+90VI/NzAs\nLConJiQiIyUlKCw1RnvVxbi0srK1uru9vb3EzM3W3+9wX09FQT49PUNJTF/Ov7mspKCho6Wn\nq7XC4E0/Ny0pKCcnKSkoKzA0ODs8Rl59dePJvru7vLy7uru9w83V2dbuWVdiX09DQEdPYHvh\n08C1r62rqaiprLK+1Fk/NzAsKSkoKSoqKy42RWPayr67u8DK1+3+em1rbu7W0c/ncunt7uzr\n087NxcG9ure2tLa6vcPM2uhsU0pDPDcyLy4tLzQ5PUde49HHv7u8wcnO087KzNno5HtcUk1G\nQ0NNVlZce9rIwr++ura2usDM2uJtWE1KTU5GPTc3OTk5OkBNaNHIy87MxLy9v662T76zwkEx\nQc5FNkdhUUtRSVVgTk9o7NTHwL6+wL++wtF75vlQRkFISz89Pj48QUhITFHhysrMxMS+vbu+\nw8DCwcvee11dWlVSTEZGRklLRUFERlJd3s7LxsS9v8O/w8PK5O5fV1VHPzY0ODs9PkBOd+Da\nz8LAvbq7vb29wMTKys/e9F9cTUVGQD49PEJPXVl628/P0MfHwsPFxsbpWU9KRUk/PEBDTUlI\nS1rs/9ra3tXU09HMzMK/wL/L1cbGye9bXV1YTlVMXU9PW1lOT2Za6XRd09rZ123h0rvI7lQ5\nOzo/QkBOXm3848vGwNfl2P/a3dvKx8XQ2dna1v7VtLxGMy5GZUBBaOLczce+xdbOsa7PPTcw\nPTczREdIV8/Gxc9RP0pJPenKxtXTu7jMcb+120zTzbit7kVGSEMtLTrvTUzMysjWzsnJxMrV\n8O/NyMHrTk9LRz5CQGRDQUdIWVntb+fX4uXTyMG5t7tr4uTUwWxrSz5DSEl33k5HTUxOfsnI\n39rGwcHOz8rXzMHc02bf0mE8NkNEOz0/Vk1KQUDT7sC9btPFz7/GvcLM1FFcTVX0WkZGVn5r\nzN9Mf1Diaf/qzNDFu7m3vcpLOUJIQTo6brrVT0dOw9RBQVBcV1HHvb7Mxb3F9URRTD0+Qkrt\n/1XJxMXvTl351fnov87Wz8XM3thvaGg/SfpLT+HazV5Q7cVzPkFRXm/0b8vT+9PT3HBfdF5P\nRE5o+/jW1NnL0WpbZV9d/ti+u9XWxcXZUEJDUWFQR0RHXWVZU1db3crS18vGvMHYbuHf8lJM\nXXLl5XhgTkZKSk1LS1l6cWP35t7c2c/V1c/J09vf39PHzW1PS1BgTk1Vafjd2ennzc/q7d7w\naVBq0MLF1NbY+FVLSEQ+P0RHRD8+R0lGTFdUXtvMycfHvr/K7s/J6HTfxr7HvaykoKOnrrfI\nOigmLDU9Q0RKOi0oJiQkJCYtND5J5cW+vcrX4tXj9u5cecqznIuGiZKcqMElEQ8RGiQ1VKyc\nm6G4OCQdGBQWHChJzsvCu+E8LSopLTnYrqWgoaWv2EEuJ/GMg4qUnpijMwsKDRMcIz+mkZWf\ntjkmIBkVGzBps663ubw6Ih8fHycsTq2jpKOlsbxoRi8oKDXqmYGCi5miqDEPBA0SHzO9nY+O\no9IsGhMQEhxNtqmdn67POR4cGxslQsuxpKShpL9NQj0vMTI6Uj/+i4CHla6fqiIHBR4ZJyqv\nl4yW18Y0Gw8PFSnO7recnq5mOSgpHhcfLz7vsq2rrM9gXk5YUMXEvjxYj4CDmKScmiEIAxsY\nFB3Ako6Wx67lGQsLEiM+yJuQmKzIQCMZFRkfLTfHo56lsK7MOCgqNjp5477Jp4SAjJyemLAR\nBAsoDRQxmpGTpa2cLQ0MExkkN8GYk6i9vzgdGBYcKCc1raKnpaSy2S4nPDw26rjOqoqAiJeY\nlqIVCAwkDg4pn5Wep6aaNQ8OFhUWJM6dnKajn7guHhsbHB0qzaqlpKGjvjcvMz48OOzOwqOI\ngJKXk5TLEQsaGgUOTKGrn5ePmiYbJRcKDyVDuqmfk5i/TzkcGBkXHzbqrpufoajPPy8mJDcu\nNdOgh4OQjYmRwBkVHg0DEEE2QJyRj57lvVYRChMaFRvtmpaknpisKyEhGhIYM9bRrJqcqrC1\n1DMrJykj1YyKkoqFi5wuKSUKAg4ZER+mlJKZmZWyGhcaDw0SIjzxrZyapau5NR4cHh8iO62h\npJ+eoLe+TCgiKJ6RnpOJjJWp32QZCQ4VDBE6tqmfmZWfVEE3GREYHRso266npJ6i5C0xKBwg\nLDNtuKqlqqinskItOqeTppuLjpWfr7glDhUaCw4qNj2zn5uiyb3GIBsjHxsdM2lPu6Wnt8rW\nVDMqNjk6Ycq7tqutrrpcRa+XoaOOj5ifr7I5EhQcDgweKyvVpJygs6+rPyUnIx4eJjM8+rGu\ntrTA/U43NUU/VtL1xbnFzc1NTfmck6aQjJSaq77YHA8cFwsWLCg+r6GeqbWpzCcpKx8fJiw9\nSM20w8mzy0hfT0ViXXH4bsXPT2rUOz65m5ufkY6Unaeu7h0YHRUOGCYmM9GuqK+vp7k6PUAr\nIys/TknvusJd3MxONjpORTxS4lVYVlLeXlljabmanaOWkZihqqm8KCEtHxYdKScnNN+/fm+9\n1jU9Xj46Suz0X2bzUj0+RkdOyLKur7CwtMbS3kw9NTk4NzdAcNHLxbasqqqrq62wtbrDysju\nS0I6LyspKScmKSwwOlTm48/FyM3GvsXLwLy/w8TM115LRz88REpBP01sW1Xhys/Nwbezsq2p\nqqutr7Cwu+lIPjgxLisrKystLCstMzg8RljfxLq2tLK1tbS91HhaS0pGPT5NWVRTU2NtXl3u\nak/pwbmzraijpa2ytb7P71I+ODUyMjExMi4uMjQ1Okdi0r23t7m5vcvrUEVDQD09QkVIWO7a\n3t7OyuTwxbq4t7i4ub/Hx9djZHNq6dvYzsbL32ZRW1VIR0hDQUtPR0RISkRAREhLT1daZnNT\nT19qVEdOev5q18vJv7m2sbfExMPVXU9c6NLSz8jIw8HCxcjO3+1wVEpXWUlBQD47Ozk7Pj1E\nVl5OTVZweE1BR1NPX93QyMS/vL3GzcnK0+PXxMXV2MzUY1dt4trRwby+wsfFxdL5Yk0/Pj4/\nP0RITFBLQz8/RkI8PUZNVfPhfHfo1NTr8PX22MjCwr+/wsHCyMzJxsfDwb25vMTT3HNLQUI8\nOEXVTS81Q1ZKQFf5VPbXZVxZWUzxb0FJU05HSEPu2krFvdLCz8O5ys3Hv7i7trCvr7W1srvn\nS0c9LiopKSsuMDU+Sl/gzsnP0snK3m1bWFhXTExSXm756XzozsXEztbVycPP18/a3s3Gx87H\nvrq7v729yuBcST46OTk4ODc7P0VKSlP7a1ZUWFtUUV91ZF9d/3Nm4NHc3c3Lyb/K0svLyMXH\nysjGzcvGvru8vMHL8VRMRD89Ojc1OkBKT0xSbFxVWlBYVlNNS0tITVNqbV126djTz8zXxsHE\nxcS8v8THzNLOyM7Qv7q/yMXBz1hGQzs3NTdBV2VlcO1sXl1KPjk4PT07P0tSVGNq7+DTy8vS\n1srBvsC/wL69yNpxbmNo1dDYx7KssLi6vMh3TkA6NjIzMzc8QEtNR0FERUhMTFNf/ODh2dfr\n5eHs5uhvcHbj1+vu6ejZ3NvQ087Ozr+5uLSvrbK3t7rIZ0tDPTgyMTI1Nzg5PT9BRkhQXmj9\n6Ox8YGNkX1pQTFl0aGjf1s3NzsfMzMbI0dje28O4uruyrq2vrq+3x2tLQTkxLi8xMC8wMTM2\nOj0/SEtWZmL049LK0NPRzsvN1+1u7+Xg297e5uPMy9XPy8m9vMG3raiqrq6xt89JPjYyLCsr\nKiwvMTU5RFBfaGVobX5zaF5ZXFxqf3V95dPl/uLdz8zHu7m/v8TR3nTRydG9r6emqairs8tP\nPjArJyUnKCwxOj8/Tl5ZVlVbY2RWSkhPWFtfaGJq6NzYzMfMxb++w8rF5G1ZXcO9vbGpoaSh\noKaux+xALCciIh8gJSgtND1RW/LrztTk2HNhSURKR0hHT1BQ89DN0b67uLjMxMtqSVy7ycCm\nop6fm5qhqLbQOyglHRsZGyAgKjZDW9LH0sfO1sd+Qzg1MjM8OT9LXdXGuLq2tru7w87b10/O\nsMminp+YnJmfoa7XWyYmHhoaGhwcJSoxPFHZ78LFyM7c8UM+NjMzOD9Je9W4sbKut8Oy0/7a\nSEhBvNWoo6KTnpaaoKW53i8sHh4bGh8dJSgzMkNUTM5a229gXT87NDUvMTdK88i8ubCvrriv\ntse+aTtsxNSqqaSXn5WaoKO02jcpHhwZHR4cJCYvOEtzadDPyt9tTT46MC8sLDA3QmHNtq6s\nqLGsr82xU0/AzbWqo5+an5aepabPaiwlHxsaHh0dJyYxNU3f+73HycljTz0yLywsLy84R3zB\nsLatqr2twcy8XNnAsryfoZuXnZaioq7uPiYhHRsZHBsgKS8+R9DJv7zBzeVJPzYuLSsrKSoy\nPW29ua+qsKqvs7XNw86tt6ieoZifmZ6lq85OLCQdGhgcHB8lKzo/1ce7tbi8wn0+Ny4sKSgp\nKy87TNS9u7Gvua/BwbZeyLCzqZyelJqYl6KhvnwyIx8ZFxkaHCMnNjNK+HrAxc3afUhAOjg2\nMDIwMzpK4sO6uLW6vsTG0s/StKmvmpyWlJmUoqOy7jciHRgXFxoZICQuNjzvZcC6vr/OY1dH\nOjgyNTY4QkhP4MzKvbrJw8z1zFfCqq6empeVlpWcn63GPyogGxkYGxsfISozO1RPXHNbWm5K\nSUtAPzo5PkdMbnLjx9q6xO68Ymu+UsCprZ6Xl5CWlJifqOE4IxoYFhYZGx8qLj4/U/d62nhO\nVldGTEA7PUNTSkRUUV3Y/F7iaMj0075Vvaurn5qWkJaRmJ+pzkslHRoWFxocICoxTU1tT0A/\nPDc5PDY7PkZJWXxteOXTVs7N3M5e2VH1yevDt6OjmJKTk5WXnqbOPCUdGhcYGR4hLDI8P0ZI\nPT82OTY7QD9aUu7M083n4NFs1vNO0z9u5DzQ8+GvoaSXkpOQlZafrOA1IxsZFxkaISUuQVD0\naVlDOTY0LzE4O0lVZ3Tv3lZJUj4/XUh8dmXB1bu6vaqfnZWSj5STmKKvRzAeGRcWFhsjKDlC\nV0hMPjEyLzI1OExh8rzA0sdtWk49PDhGP01238PcuLPSnqCfkZiPlZiZp79JLB0bFxkZHScl\nNURLQD86Li4vLTQ+Wb+9s7C+vclKOjUvMUY2QmvSw7m2wrGunJ6XlJKUmZisvjosHxkbGh0h\nLy87R0U8MS4nJSYoMEP2uq6vrbrHyD84My0tND9YwcW1srKut7+ln6WTmJGWm5us2DMlGhkZ\nGhweLS03Qkg3Ly0pJScuRdS6raqopq29/jkuKyksNj1dzcy3uby7wearoJ+UlI+UmJ6rYyoi\nGxcXHB8lO0hNP0Q1Jh8fHyEv3ryvnZ+jpbK+SjEuIiMtLkpdv73Mq8PNyTe7nqaWkZKPmaCj\n3SUkHBYXHCYsN+rYSFBIKSAfIiAoOdG7rqChq668WDYuKSosL83GzLG8sLzGulM2qpyilZSP\nlqassyUYHRoUGic6QduuuUY/OyYeIy0rNM2ssLGmpcBQSDQlISowLUyusK+wsrLJ1s86QKGU\nm5iPlJy7yModER0eFx4+vsbYtbwtJywiGyIuPle/pKWyrKvmOTEvKiUv6lvPrq2y097AVThs\nZuGfl5WSlZWdwzY8GhIXISQuTbOsyr/JOSEhHx8eLNzRu6enudLO7zUjLDQtN7+2saysru5s\ntnYyVljCnJmYkpeZojssMxkSHiUqPtatqdHo3C4fHx8oLy7ju727s8faQjA4LisxXti1sqml\nt87Dvew8RW56rZqVlJyXn7UnKSQYFhoyL2ncpa7OUkg0Hh8gLC9Ys7atsrjeWTcxMCk6Pk/b\ntq+uusDYTURMXjc9u5SSl5uUmLIvJDQaExk9R0bgqaLPNjo8IRwfMVE4562rzWzA3D8pOT8z\nL0vFzby0r8FVXsVNQUhQcK2Xl5adl526KSgwGxweTV7e3qml3zo0NSAcHzhbNfKur3lL2d1I\nKzhCNjZevb3B1r7KRk5UxsxOPsuZlJabmJarPyI+JRoZLOJDReGhr0EwQDUfHiVHRze/p7Jx\nXcbQNyc4PS00TsfK8v22tF5Fwq/ONja7mZacm5eWqU0qPCoZGitMOUPKpqpZNDovIB0hLkBE\nULGktOHOwVcvKC89Ly9UubvUx7a3XkjGzTw2TKuVl5yblZqvOC9DJxsdL05cZcetskYpJygf\nGh0pO03Oraersba+ZTkvLzU6RfHDvbu4ucDSyt1BOTU5xp+boaWemqHHOzg3MSkmLU/P1erW\nydg+KyUlJiYpLz/1v72/wsXIzOhZd8e7wcrEyNjselJFRD87OzxEc72xsrGqoqCnrq6vtsPd\nTT89P0E+Ny8vLysnJysuLzQ8SenO1N3Nura5u7+/vch9SkpSTEU/P0NMUE9HVb6xtLaso6Gn\nq66vr7fKT0BITT00Mzc3NDAuLCwtLi0tMVDc8+TArq63u7zBydpTPDtMT0VCSVZRSklDSOm6\nsbKuqaGgpKapqq652Us7Ojo3MS8wMC8tKSYmJykqLkfWxsC3q6itsbi/0GpLP0JISENBRkpJ\nSEU+P0PruraxqJ+bnaGlp6q03UU2MTI0Ly0tMDEsKSYnKissLz7NwL+1ramrtr7G0OVTTFZV\nemlMQkBCOzc6OztD1bevraSenJ+mp6uyvtxOQ0JEPDAtLiwlIB8kKS82PFDXv7q4tri7vcTJ\nycXGyNPwUUdFPzs5Ojo9QUhLYbytrKyqo56gqaqttb3OUz87NTIvKSgrLS4tLC0vNT1FTfnU\nzcG8vLu5t7rG09nmdnRlUUZBQD8+QUBBRk5yx7y2rqiloqSlpKavvszeVjwxMDEuLC0sKSos\nLCwuNDxM9M3Dvbq4ucDHzd9oeflgTlJdWk5ITF5lYFdP672xq6Wfn5+ipaqxwfM/My4tKiks\nKiknKSosLzE3P1zWzMS6t7m8wb/Cx83O2Plla3FfTUVERUdLR0ZN7s/KvLKrpaKipKeqrrG7\n40k6MS0pJSUnJyYoLDA5QlX+2NbSyszIxcrMyMnLycjL1PJbVVNi8HhYTlh72NfPw724s6+s\nqaeoq6+6xeNJNCsoJycmJykrLjQ6P0pQatnEvby4tLW5wMvVak9ISUpKSEpRWe7TzMvS0s/L\nysfDvbmzsLCusLW6wc5yTT0zLi0tLCwvNDk8PT5IXOHQy8S/v8PJy9bmZUo/P0taafbn3dDK\nyMvN0tnU0c3Lwby7ubq5uLu+xc97UUg8NjMxMzI1OTxCTVphbubX1tfV3vBeVVxcWlxr7NfX\n0dTc3+Dh/HP42c3Dw8C9u7m7vcDDxcnXfFtPSkI6NDEwMDExMjZATmjZz8a9uru9vLm7vsXK\n0NfY3PRwU0xMPzk+PEBjbN1xYtHDvr29vby7xMzV0850Rzk6QEE4MzU7QENLXNzOzM3MxL/D\nyMXDw8jOzMrR9GBVVk9JR0RLTFJhWm3dzcXFys7Lx8jN09/9VUhEQj89Pz4+P0NJT1tg9tTN\nyMnHxMK/vbu9wcXM1m5RS0tMTE1NTE9YbPNqX15fa/HVzsrGx8rM1uL5aE5CPj9GREJGU2j4\n5t/b2tbSz9Lf4t/d6G1y5trc4+r5evPl5Ozn29Pd4tXb4HtiVUtLTVZt7ubd1tPY3t/rblVL\nS0xLTlFUW1pYW29nYfrczcjJy8zLx8nR4fDp6P9qWlROUFJVVVNZX2lr7dLJx8nKy9PW1dvw\namVXTkxJRUNJSklLTU9PV2ffysTCx8nOz9HT1+f2bV9fX3Xo4t3V3m9US05UUExW6s7FxMjL\n0NLV5W5zd25mYlxgYmRgU0xJSEhJTlZc9NDQ29/RyMva6+3w9fHvcWJoe29dW3Hq+XZz7tjO\ny87Z29fZ1+dwX2BpZ2JgZmdnXFRRUVljZ2h38u/l1c7OwKnFWpsSOUsUkx+r3TnFLJ0hrcIp\n+kttVLTzra2pnzZZIz3AG9o1PtAyp76uuzu82lc/3TbWfj3g/8hbwsP4vuZqvszefllQOzlA\nRVY+Z0hyWPvN0dXSwU7N8sDL3cNavN1ay0PIT0r3NOY+W1RAy02/6MzF58b31+FPTWvo6WF3\n6NDHdmpQVlJIRlHp5lhVTnTi2HLrvs/F0M7D08Vu4dN52VBkXWNPP1xUY09KUF7s09p352P4\n4m3d2e7pU1lIRmRbe2b63mVW711lTVvGyb3EtrKyrrm7y+5bRj06PT5ATX7t6Pfu3Fc7NC4u\nLCcrM0h+07+4r7G1tMB0XONpYXHMrJyXnqKlpq86HxkbHB4hLGKsoJ6fpa/PNCEbGBgbHyk4\n4bixrq+vtcV+Qk3fyMxW3bidj5GYnJ2drjwbFRUWFhYeOq+hoKGioqzgLCIiJCYmLlC6sLjE\nzm48LSYlKjVK78C0ramoqrbgeOG1n5qdoqWgpcctHRwdHRwfLuOuqayws7TCQS4sLDA2Nz71\nwMxoQjs4Mi4sMUB7wbm8u7GvtsPdSUJWr5eUmp6fm6G+JxoYGh0bHS3Bp6SptrzMRi0jHyEs\nPmjHs6ustcpFMywnJyoySdq9tK+usK65bEQwOdepmJWXm52dqmIiGBYYGx0jO7qmoaexw2s4\nJyIiJC9Qvq6sqq+85DgrJicpLTplvLSvsbS0u8VhPzc7R3qumZKVnKSlrmYoGRUYICoyTb6p\npKm6SDAqJSQiJTDurqioq6+57TktKS00Okbtwrq3ucXZW01RRzw+S96znJGSmaWqr9I0HRcY\nIDBAZsWzq6vFLh4bHCIsMT7IpZubobLKaUMyKCYtP37Jw8bFw9tBNDA2PUJPYOrApZSPlJ6u\ntsB8LhwYHC7dt7a9vbi8SSYbGBsnO09uv6een6vURD9GPzIvNU3Atr3ZYFxSTEQ/Qklq2tDS\n0rCblZeguc1860AnHRwq/LGuvmZLUU4zJR0dKla9uby3rqutv0w6Okr+6GNLc8nG10o7NDg/\nQ0hGT+PJzNrWrpqVl6G30/vlQy0iHylIvLC79TwyMC0qJSYuUbirqKuyub3IbT0yMjlMaGZa\nT1RRTU5KQUBJZtvPyMPHxr2tnZeYoLhnQj05LygjJzRfvLbITjUvLy8xNj/6vrCtsre+zHtE\nOzo5ODo9SFRXTUVDQkNFSlzZwru4t7W5ubGpnpmcpr9JOzs9MyolJS0/7M/7Sz89QVnZ3PVo\nUk9d6tnyTz87QVr7XkhAQEhOV2ZiY/rMvby5t7S1ur7M597Brqajpq684Uk7MS4sKyssM0vU\nxMfN32NaTj80MTE1PUthbHbh2eZdU1RSXv/56tW/tLCxtru9w8TEwry6t7zJ51BHQ0hKSU1M\nSUpOU1tpdnRsZVVOTEdFSUZFRUlNRkQ/OzxGbtLN0+Xg1sm9v724s7O5vLy5ub2/yNHefGhS\nSkY9Ozk3NzY6P0RGRUpX+MrExcrOz8vEwczlXE9Udtzib1RKRkZMUlJcaN/LwL/Dxs3Pzs7P\n3fF64c3Jy9hfSUE9P0A/PkBLW//1X1FT6s3MzsrIyMPCx87qX09RTU5UTlFh5dLU1NPTzMbJ\nztXqX1ZhW09NS1Ff4tlkT01QS0JAREdQadzMy8/W0M/Y0crGyc7S2N/e2u9aUVhr7PZt8dPL\n1fVZVWbs62dbW3ja2/BhXVpUUUxMT1ZRRT9ET+zTz8/NxcPGyc/Ozs/U8W/x8mdaVFlmc2hk\ncW9bX3ZzXVhf8N7b1dHSz8jEyM/faFxTT09MS0tHQ0RKUV9vfn7m09TZ3tvTzs/X1dDY5mhd\nZ3vl529bVmH9+O3v/Xrz6fdx9t7TztHNy8vM1Nh8VUY8ODc6QUtTWGTi2NHKxMPO0tjobXfn\n1dLd4v98bWlhWVRQWPDu6/F+5uXi7erhz8zael9v3NHU3vNyYVVJRUxMUFBbanHz4drub/3o\n29/+ZGT77/nt3tjT235n/ubX0dzx+21hbHF4+vNoWVdle+fb4eDq5tfgY1ZZZXnv5npsaHL1\n/fzi1Nze/ldSUV5iWFVVWF1gXWtub/Lq4d7W1tXd3dvg6vLq/nfw493e2c/My9dzXmNzbFxM\nTlpcXlZXVlFYZfrc0M3T5fPn4+PjcFhTVVZVWFpQTFBZYGr54NLIxcrT0czJz9nZ29XT1+Zh\nWVtnbllMT1hu8fPo5ef/YE9JTl9rbnJhX2JsYV1tbXRr5dzo6O/x/fXWzMvP1dvb1dDMz9fo\naF1PS0xQVFdVT05Xa3vo3uDc4+50bnNlZnHv18nHwsbO3PFwal5SSkZHSUlIS05PVWj//dTH\nw8bIxMLEzNrtbG5rW1lZXF5eYGJveW9kY1lWV179+uLW09Dk+vLk3O9oWVhjb/n6+u/h3O7o\n8+zmbGxw8+79b2lrWV1p/vBiW2P66NvV1NXY0dHa82RaVlRUVWnh3drh8eXf29nuWk9PVlZP\nT1Vr6+9hXunQztHU1dXb6vP2cWVkbWFd893jemZbWV54/l9gaW7969jNy8zQ3Ox56trjbGRd\nXmJcWU1LUmB77PJ/793Z7ezt6tbefVlUYG7d1Nrw+u95X1RWUk9QUl/84NrX2dPGvsDJ1eF6\nZ1taZGthW1FNWGxqZGN4+vTj3uPez83c+nrucFhQUFhXY3tsX1VSTktOXn/65+Po6dXMysvM\ny8za283Kzd/7/et6X1VOTlBXVUtMUFxubmRaVWTg1tvh3NbV2un49/xtXFpfZ2lhW1553NTY\n4OHa2tze7vlzfu3q39jP3G9ZUU9MT01LUF3p1dDPz9be2t16XVhlal5caefRysrT19LT3W1T\nTk9LSEVDSVVkZ2Nr4NTT1NXU09DS3OXn4dHP7m13ZFlNTl5w39LT0M3Lys3ed2ZsX05GP0BA\nQEFHUWTk1s/Pz8zLx8PJ1/N4+2Njev1ycGFaVk9VYWJia/fq3tzl/XBx4M/NzcrHxs3b5Pp7\ncVhKQkBHTlZdbvzs+GlicW1eY2JmcHV27tvn4dPOztjd29fb6vhy+u3j/mNkeG1eX15ZWmZ3\nfHt1/O3s53R93tDMz9roYVxZUFRZd+F4XmVz9N/f7Xr65+Tf7mdv7fdoZGFqaGZkcubf3+Rk\nUlJdX1paduHYzc3Nz9TW1s3M0tPc9mFRTUtISUlLVFdTVl/829bT2d7b3eHm3+lqbu/h3tre\n6fNz+X1hXmBkW1BUX3L+b3Hv49bY1M7U2dnd4OHi3/hfT05WWF1PTUtNV1xgaXbj09LPysnL\nz9LV4/xtZGNkV1VSVFNUW1tfYm7p3dfPxsXL3Ojk4ux3YlxSSk5RUVZk+N7f3d7g4HBiZ+3X\n0N3v/fXtemdna2xrXldVYebY4Hplb3xsYldg7er4du3i3dne5uLd29PT1tvn3Nvh92xdUE1P\nVFFRU1heYWR+3Nfc3ufj1svN4nlqXWVpY2JcXWZnYmR1497i5vJucP1yZmRo9OLn+enc5+/q\n49fNytPk5uf4a3p9ZllYV1JQUFVOTlJbanza3OTaz9La1tPa4/pqbl5dau7o7OdsV1pgaWVk\nfePVz9rp7OPd5O75bm1lW1NY6dXb5/xp9unteFtaZWxdUk9Y/NzS3t/Vy8fab19XU05RU1pr\n6ujo3dbT2OPzc+7e3eNvd+jV2OLxYllVVE9NW2NjYWl6+ODW1tjd2trb4tza/m1fXl5VX2Jf\nX1FPVFln49zb28/N09ne/nvu+v9vdP95YVlq+3NdXlpdcufX3O3v497e63t3++Lf9PXp8nJt\naV5VUE5SX3P17ODc4t7X2Nrn/e3r39zgdVpdWlteZfp5eXl1c2hvdH509/Hk2tra5eLc09jx\nXlxqXVZYW2f4fl9TVVxtY1hfaN7N0dzd2NLP2+Hf4fJxVUxY+eX2aGD31tHV43toamddV1de\ndfj8cW51ZV9qfOHf4N/e6efq8ePy6OxvXltdVE9QX/HxeHJldt3Y2NPNys7f+vp1ceDsb3b2\n8mJVUVpbV1hWXn3m5fjf4uXd+m1neOXWzs/V3ufuZVhNSUxWYWl+7ODZ19XT1N/rZ1hbYF9i\n8u/se+/ne2Zo/Orf2djh39/t/O92aWBbW1xmbffofWdiX1tbbG795Ot8XmL73dre3tfT1NHW\n3OPf3PJ2X1daXFtia3BwXlhYUGHl9WpufO7p3tfY0MvP2Ojz6uVuWFVYUU9UV1tZX3Rx/uvq\n5uPs6OLq39zRy8/f59/icV5cU1VYV2du59LP0uH3/2pyaVFNU19wbmBhePrv+vjc7OPwde/h\n0uJ7bG/33OTy5/hrbW9vX2n9fPXvcnft5eVvafbrfPtfWlhZaW7v7+3g5ODe4/ft5fNsa2hz\n69/b4un49nleZmx2bFpRXHDm7efj49zY529kXGx/bmj33tTS3XlnZmNeXVJYbGFjbG5+69nV\n3+Td4efl5Nze3Nfrb21ibnL33ud8/nlcUlNYa2xlXFxgfeTsZlZUX3167unq59DKyMTEyNb7\nXVJXW19RSkVKWWJ87N7h5OLu597XzdHc63x7cl9VV2d17e5xae/g7/zs3dfX1u12W1peVlRP\nTk1MT1Zs/urh3+Hl3tbV4Ozr5tvOzdvw/uzm5d7m7PT1dmNrauvn9fJ2fvHvbl9qbP/XbklO\nSkpBPTw9Q0pTWHfXy8fFwb6/wb6+vb6/v8fX4dra3/JjUU5QU1NQTlBOS0xRWFZTVF1aXWx3\ndHJqaHDr739vbGdsa11k+97Z6P7p1s7MxcTGy83R3OLt4+bo9l5fYl1fVlVSS0lKTFFbYfjl\n6N/UzM/d6Onj2NXh+GBZXnb85ftoc/f0Zmxycv3vel5aV2hmXF1kZmRYUlRh8dnZ19rX09zp\n7+Da2uh8Y2RwaX5nZu3m2dvh3d3f62hZWFthXVJKTmH03+V+dOrsdmlfcfD2d/jj5OTo5+Lj\n6+fk4ev5/3Jv//Hq4d3k/15dZWtubF1XXHXe6nz7fXby6eDn7ex9bGVrbm91bGNdZ3x98Xx7\n3+/6+PHl731+8+Pa2dvqbm1mY3f07fL07OTj3+nxdFlTUlFXXHPt29HOzdPh92xcWmJrb2xl\n93Zmafjf5evo/W1qZGNf++nr9XH7durZ3OHn29fd63FiZ3b1alVNVGVhZGL639nV2Nvc2+70\ne2776t/4ZVxkZ2VqYGnw2trnfHD26+Xlb3r6+3VmZ2dfYHtrZ/t3YWJo+N3Tz9jg3uDX09fa\n335wb1VNSUVFSExPV2zf1dLPysnL1Nzc4uDs+vn17e56XlxXWVteaWJiZ3n8Zl1faf3s3tHM\nys7U6GtiXVVPTlZaX3fm3N3V0dLW6Ojwb2VjXVtaWFtUXFxk7tXR3dzc19bZ2uz66uFvT0pM\nVFtmbfXl2tvd3uHd2t13Wk9a+ujq6+fh2OT3enx1bXNiXGn1emZqd+Xf729nZ+7vaVdaW2Fg\nWWB46N/T0Nrq8t7V3NvS3PJpaXju4dzZ7vn2bWpsbWJXUk9PT1JVU09YXGd7493d2tLHyMfI\nys3b7O1tW1lZWVNTU1ZkfndtYF9sZnLn7Xx67d/k3dzf7fd89uLi2dzs7OZ9amNjbXRvdWhl\nZmhiXFZdb273/eXxX21vbGtmbHTq4ufs6OPb183Mzc3W2+fw/Op9Wk9KSlBVUU5RWF5ocufb\n1tfe7+bUz9LuYlxdbPn77/nv3t75ZXrg3utubnXt3uZ5XFpXW2JjYFxaXmj34NjLydr8b/Lb\n3dzf9/d+9+f3bfXj7mdUV1hWV1JRV1z85nJgZfrvfn/q3NXR0tzdzsnJzNPd/G9mXVlSWFlO\nS09TVFZZZ31+d3fr39/h2tfS0M/Q1dXY4n5fV09OT09e9eLZ6HN0bObifl5UWV9uaGFs79/f\n4d/a2dPW0tXSz9nuX1NOT1NOS1FTV15559XLxMjQ1d3pemVefWtZUk1NUVppa2N58/vv5NzZ\n3drU19zl3dbmd3ZlX3Buenl5fXb+cW57a21mXmRree/q4N/v6OXnbF1e/d3fZVNaZnnd3eff\n5ufpbmVtemVcX2T34H5ZVFrg2dbO1NXY5XNkb3Xo5nBdWWNjW15qbGdw/ung09Lf3N7g5eru\ndGZXUVRdZmFfWlNWaHZfa+3e1dHPzcjHx8vP2XlibW5VS0xLS0xOU2T4cPnv4c7IydDb6+5o\nXFdZW19sWk9SW2b08ejYz9PTz8/Nz9n0YV1eX19YUlxcWVxh9nhwdPzo7d3OxsbO3vd0bG5g\nWF5fXVlOS05WYVxdaHbg1tHQ2NTMys7W7nnz9HtkaWh0/2hfYXfy5utoaF1aV1VSWWny3NrY\n297ra1tWWmZaT1n83c/MycjQ1dDV421va1xYWVpfYmlpVVVfbvjxf3Z2Z3J4dGp63NXW5HJn\n7NbQ093u/2x0dFdXam5xbF1o7t/d5ePa1tnh5/h59GRPS0xPXV5SXW/e0NnX1tnU2ePt+354\neP55aGhmamBYVFhnZ2Rn+v354NrY2dXQ1uDe49zY3+xta1pOS0xUa+fm53v9cl9gX2t3/tnR\n1trg7unxbWz76uvr6e3l3+peTlRXVVdPWHbi2+Dp597f7Gpw4tPKz+t8Znn9XllZV1FRUm70\n49vb5m586ODn3ePsa2FoYV5WW2N62tbUz8vO3uv53dPU1N3i5fF2aWleV1dZV1FaZndqWVNU\nZ/5uZWVhXFpjZGRjZmhpXl9y69nRysjJy87OztPY2uLh5+5zX2NfWFJaaWdZVFhZW2hla252\n5NbT2drm5Ozq92t0bHhwYVxz7XhZUVv1729cYe7q39/m73H029zj39nX2u3+fvvmbFNSXHZn\nXltef/J4fHf99Pl4eXvm1dfl+/tvX2fv4OP+feXa7mZp5dr1ZW9iZFxZaG/g3Oj36ODo6+jo\nelVNTlliX2Vncund7271383IycjKztjifGJeVk9NTkxTZm1eWWnu+lxQV+3SytDS1d7Y5HZj\nVmBnWmh43dtqb+3zem9t9mpq5dzc4OXo6v737/p7XG18fX5ZWmdlXVdZ9+fj2drUz9vfdm75\n7t7nZVdZcHxfXGB55n1eXV9p9/Lm4drW19XSz9PP19xnTU5PTk1RV2VZamZc8/nd3ub07eDW\n3dfabXx88NxsbX5xe2V4dXFnXFpmddvT09Lv6e7i6vxvamZv13tVUlRyWVlm/NbP3XxrZW5Y\nXd3Oy9vd2eft3+zt4nNaTVFbYV9p6drabVxq8P5sWl5lYuvx+29fePRrXm363dbb39zMydfT\n1Nrme/VeSkVDTFVTV1Nm0czR4HPa09TV5+DVz9jiY1pfWlNLT09cWlJsaGBZZ97d39bNys5+\n79LIzOXm2uJjTVJTXFdNT1tsTlj50dbu09LcbG7c3mjp5uT0dNra1/dtWkxXW1Zrdt/W39Xt\n3t3hek5YY+5sTFpv3eZVWFb58VNbYevf5NDM08jO1MjWzdLv2+tkU154W0xKV1VMSElJXGjr\n7WXT9N3fdsvf2OXc0eZeXGBjelbz6GxdVmTxf9rPz8rI1dz328f34Gnc40xERU1LT0pcVtbe\nXGhg6vDfzc3d1NjTaF5bfvVWUkhoZHFvb8vOwt/z4e/IW/vc++dWWWdObGJOY/3U01fe737q\nTt7g8ttT3cnTdehncEFFUk51Rvftzr7Ixc3VztVpaFXa6mFfY9PyTUdJXFtOV11rXFrcal/j\n08ty3MLU0+Dd1F96y35bTGjYYlpnz85Tb9339j5TU1BYW+rcZtvUz8r3w9FbYm/pX2Lh61VX\nb/NZU2TnX0pzXNfl2MbPyuFu2fNWXEn3d1TyWntdbeDpWufg19VS4Mntb0bOyXlwWN9PQfzT\nY0lL0Mju/m/M2FFPWM7lbNrEzVR+4OJXRljeXVfd5uJT/M5SeGxkZkdp2mHq3svLY8vd8+NF\nWvXy2Gl33N3uWe3S2nvu3NVOV1BeXlZa+FVc2dfbZ1LQ3VxVa8TzXVnbvsrp6ODOW2DVStXv\nZWNTVkpHPUhGaVNJ1MnLy9C5x9XpxMjf0ti7z19b10JCOmlIOE9Yx0dR5l7nb+fdXVXaytth\n2MPZ0lng4Fju71vNW81688np7M7rv9lqw1nKY0FXa9BMOz12VD46WMblYU3v1N915MTZSMva\nWVXY1dRLfMxe1m/UT9/I21dby73L2cvNvOfvX+/NQD9MPEVJSXhIUdlTV8tm7krO3NzLT1vR\nT3PoUdBcUM9zSLzJT2Fbz/Y16LDMwV69r03W3tFaP13bTkNOTP1FS/U/dNo+YelvzGROynXI\neFHD4unYvs3BP+q4aMo5dsdRSFTpTDpBQj3/28/L3rqx+9m+y+M92rlwL0K2xDlIR8NPONU6\nz19m12nOx1J5x1vqR82+YlPHyL5K3sZbT2Zj7D4/101WS+6/TEm9zs1dacDZ1+pY2WdPZlNk\nbkBc08pQ7ebLTFtlxuJVaF23Xfzc4dJEX8Xd5+Pq0+DkU0hw3tTPP2hQSEBGxzvq7FX1QPvZ\nPNe+2OvLucDcfr7M1XzadF9CSr0/Q9y+vUhnyMlSPuC52kdG1Oo4PFRuPzddakRbsmf4ys+9\n3G685FvD5+RmYVTXSf5JRUBR39PRScXC0XbttsjkX9Lbaz5RdD1GREfTaEvZacTNTXe/s1Pu\naOXcRWjRTeJNas9kWGfVYUdBz1pDbsbL1vTAv0VfzNzXPNnJUFY+ybrYPlfc0G47Vs3aSV26\nu/ZHzvteQVzBQT/fTufTUcZEws5XUVXpXDzobV7dZ7fB4r3FwL5I1cpIzmdxblVtXmw3VdhM\nOV1YwU9KyMlVTd/cyUrgeenXZdVRdstfb+ha5z5Tz1HNZmbF2enIT0m6SGt3Uss+W8j3Y+i6\nyNvXveJe21zlRlPcWDlqN11oaWY+YdvFSdzN1dx05Mlt5t5XxtTIeG7j12Rc/V1SRNzUZf/q\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.43.txt",
    "content": "* 43 FETCH (UID 43 MODSEQ (30014) BODY[] {56550}\nReturn-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA09081> for nsb; Fri, 5 Jun 92 17:21:58 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA09528> for nsb@greenbush; Fri, 5 Jun 92 17:21:39 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA11685; Sat, 6 Jun 92 06:21:42 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA13505; Sat, 6 Jun 92 06:21:25 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA02633; Sat, 6 Jun 92 06:21:22 JST\nDate: Sat, 6 Jun 92 06:21:22 JST\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nReturn-Path: <ysato@etl.go.jp>\nMessage-Id: <9206052121.AA02633@etlibs.etl.go.jp>\nMime-Version: 1.0\nTo: nsb@thumper.bellcore.com\nSubject: MIME example in VIN\nContent-Type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.8715.2229.etlibs.707775096.1\"\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nI will show you how the <bold>Metamail</bold> and <bold>MMS</bold> is\nused in my news&mail reader (<bold>VIN</bold>)  First, this is\nan example of default display image of vin for MIME.\nCurrently I call this view as the <underline>expanded view</underline>\nwhere text type parts are processed and merged into a text window,\nwhile non-text type parts are embedded into the text as a hyper-text\nlike <bold>link</bold> label as <italic>[<lt>section>]</italic>.\n<nl>\n\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nYou can view the section by selecting a <bold>[<lt>section>]</bold>\nlabel.  Selection can be done using either keyborad cursor or mouse\npointer. <nl>\n\nThere is another view called the <underline>holophrastic view</underline>\nwhere sections are listed in one line per section.  You can switch these\nviews by selecting the links labeled <bold>[<lt>shrink>]</bold> and\n<bold>[<lt>expand>]</bold>.\nThe following is an exaple of holophrastic view.\n<nl>\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nOther labels <bold>[<lt>metamail>]</bold> and [<lt>mms-view>] are shown\nin the above image. You can escape to metamail, or raw message viewer\nby selecting these labels.<nl>\nIn the display of vin, a content of non-text parts can be shown by\nselecting a <bold>[<lt>viewpart>]</bold> label, like this:\n<nl>\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\nkeq66y5x6L4774eSrlEAADs=\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nI feel the holophrastic view is yet useful for a message which does not\ninclude any non-text part, that is, large text message can be\nread efficiently by representing it as a multipart MIME message, then\nread it randomly selecting sections in the holophrastic view.\n<nl><nl>\nI should say that VIN's view image could be easily defined or customized\nby end users. Verbose explanation like  <bold>This is a message in\n<italic>MIME</italic> format</bold> will be cut first when a user\nbecome familier to MIME.\n<nl>\n--<nl>\nysato@etl.go.jp (Yutaka Sato)<nl>\nInformation Base Section<nl>\nELECTROTECHNICAL LABORATORY<nl>\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan<nl>\n\n--PART.BOUNDARY.8715.2229.etlibs.707775096.1--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.5.txt",
    "content": "* 5 FETCH (UID 5 MODSEQ (29302) BODY[] {24391}\nReturn-Path: <beatty@COSMOS.VLSI.CS.CMU.EDU>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA15292> for nsb; Fri, 28 Aug 92 15:13:14 EDT\nReceived: from flash.bellcore.com by thumper.bellcore.com (4.1/4.7)\n\tid <AA15320> for nsb@greenbush; Fri, 28 Aug 92 15:13:12 EDT\nReceived: from COSMOS.VLSI.CS.CMU.EDU by flash.bellcore.com (5.65/1.34)\n\tid AA24840; Fri, 28 Aug 92 15:13:07 -0400\nMessage-Id: <9208281913.AA24840@flash.bellcore.com>\nMime-Version: 1.0\nTo: nsb@flash.bellcore.com\nSubject: mew-law encoding?\nContent-Type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\"\nDate: Fri, 28 Aug 92 15:12:35 EDT\nFrom: beatty@COSMOS.VLSI.CS.CMU.EDU\nSender: beatty@COSMOS.VLSI.CS.CMU.EDU\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\nI recently got hold of a filter that davecb@nexus.yorku.ca wrote, and whi=\nle\nit's not perfect, at least I've been able to take the \"No NeXTmail!\" slog=\nan\nout of my .signature.  And now that I just thought of such a terrible pun=\n,\nas is in the Subject: above, I couldn't resist inflicting it on someone,\nand you seem to be the most appropriate victim.  Anyhow, I guess this is =\na\n\"fan letter:\" thanks for MIME.\n<nl><nl>\n\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\nContent-type: message/rfc822\n\nReceived: from po3.andrew.cmu.edu by COSMOS.VLSI.CS.CMU.EDU id aa13358;\n          26 Aug 92 22:14:26 EDT\nReceived: from sqhilton.pc.cs.cmu.edu by po3.andrew.cmu.edu (5.54/3.15) id <AA21478> for beatty@cosmos.vlsi.cs.cmu.edu; Wed, 26 Aug 92 22:14:07 EDT\nReceived: by sqhilton.pc.cs.cmu.edu (NeXT-1.0 (From Sendmail 5.52)/NeXT-2.0)\n\tid AA21178; Wed, 26 Aug 92 22:13:24 EDT\nDate: Wed, 26 Aug 92 22:13:24 EDT\nFrom: beatty@sqhilton.pc.cs.cmu.edu (Derek Beatty)\nMessage-Id: <9208270213.AA21178@sqhilton.pc.cs.cmu.edu>\nReceived: by NeXT Mailer (1.63)\nTo: dragel@sqhilton.pc.cs.cmu.edu, beatty@sqhilton.pc.cs.cmu.edu\nSubject: mail from Wacky\nX-Next-Attachment: .tar.192.mail_from_Wacky.attach, 23976, 1/1, 33000, 0\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=n2m-MIME-boundary----------\n\nThe following is NeXT mail translated to\nMIME format with n2m. This always starts\nwith a file called index.rtf, which is\nthe actual mail message in Microsoft's\nproprietary rtf, containing references\nof the form \"\\attachment<number> <name>\"\nreferring to the other components.\n\n--n2m-MIME-boundary----------\nContent-Type: text/plain; type=microsoft-rtf; name=index.rtf\nContent-Transfer-Encoding: 7bit\n\n{\\rtf0\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\n\\margl120\n\\margr120\n{{\\attachment0 VoiceMail_beatty0.vox\n}\n}\n\n--n2m-MIME-boundary----------\nContent-Type: audio/basic; name=VoiceMail_beatty0.vox\nContent-Transfer-Encoding: base64\n\nLnNuZAAAAJgAADsAAAAAAQAAH0wAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+cW9ze/Lg09XT\n09/d7W/56e30+HH29/vybf/x5eP6dm11b2FeW1dXV1xjZXR5b23+dmBaXmRoa2psb/9wcXLy\n6OTZ3ev+WFNYW3zk3dPNzs7N2uj0aWxqXmNjWlxfcOrk2tjW0djqfWFUTkpKSktOV2NgW198\n/Pfp4Nfb3+Hz+2piYFpt/Pbr9f1uZ3P23tTY09HT2PF0bGJmbXLv4Nza3+j8b2pfW1po+vDk\n82plY15ZXFxeXFpoaGRsXVVXXGFibO7f1NTc7Gx4fGrw39rX3dnd83dtcv/m3t7h9vrn72ln\nYWFdXW57cmhpY2VkaftybW9lbnBoYldYYWf67f9nX19lfHJ89fD6cG59++Xe4d7b2tvc5OPi\n3+Ht5OPo7Pzx9PnzeG5xa2FhW1haXV9YWllYXV9tfXJraGllZWFt9+XZ19bb2d/veGRfWltl\nc+ji6/b9b2hoaP3c19fY4Pj15+Pd09HU0tjlbF9ZS0lJS1VhZmZhY2RdX2ReZV9ibG3+d2df\nXWVte/r983z7eWZmX2d+7tvV087O0c/P0trj/3ZtaXNx6+z68Pv6d3b28e/m7HphU05LTE5R\nXGd0697W1+Hn7/ZsXFZST0xOUVZcc+3k29fX2Njd4up8bv3s4t/d3tnZ3Nvg4vn8+WpxfmJc\nVlVYWWlv69zb2+NsXF1eX1RRWltfWVhdVlFTWGrs3tbW3N7i5u18/Hb/7Oze2d3j4O94eHR6\n++vv8erv5+ni5e/s7//w3uXv/2deWVhYWVVYYWRiZWNr+nFxY15jVVlfW11kX1/939na39rT\n0NLX2+TpfmNud/vxd/Tq2s/S1tnjemlgV1FQU1pjbHJ18vDq6v50ZFxVVVdQUFBNU1lXYXXk\n2NjZ2t77YF1iaW9w+ODe2dTR0dzh7fx79urm3d/r5fL09m/0/XdybGxqYl1nbfTp5t3c3eV5\nXVdNS0xLUldcb3j5/+7n7HlkaWddX2xyem53/3NzduPW0M7P2+t3fv1tfvzs39rZ2d3v7vdv\nZ11ganL4+3JlW1tfX1tebG5sZ1xQSk1QV2br3NrZ1tTj7u9oX19j++rh4fv07Ore2tva2tve\naVlZVVdcavnp2tLO1eh7YlhVVVZaXF5eYm/89Hx1en7s4t7n6PNpYl5XVFxu/PXi3ur1/Xxv\nZGVmXV1lbu3a1trY0dHV2dnf9vbu83FlYVtlfHL07uvnfXNkVVBMTU9SYWlxbWZqZl1XUFBb\nZ+ve9Oze3dXZ4eXj3NPW3uh9/2x37u3h4ufp6+z2dWxgbHhpb373+fHve3FpZWxscfbvfW9f\nUk1NUVNbbmtpfHh+7eng63vv8Xt7a2Ztbe/h4N3e2t3f3N7o6vbq6vz07e3yeP3qdm/57/T3\n/n309nZtZlhWWFdYXGRjW1ZbXlhSUFRdeefh2tTU197d2uXufW9tZF1YXmd99nfw8ebf7e/s\n6ejr8vH9+urp5N3W1+Dt83dsXVlfXl5hXFZVTk9QU2VvbnJy/ezr6Ojl5ffv7/Dq+OXl3tri\n6O7x7+rm3dLT5X5lX15cbXZ3/v7s7HJfWFZVX37r5vrv3ud5aGFjX15dWFdWU1NRVlpbYWFs\n/e7l7vdybXBqaf3n29LS0c3O1t/Z1dbZ2NjY229mZmBpZGNdX2tiYmNbW1xgaGVqZGFgX2Jt\nfWttaGl0eW1pZ2jq39nceGRZVVhbY3zx5N7b2Nzi7eXe2dLP0tfe4/X79XH6/Ovi5OLl43dc\nV1lYTUpLT1FPUlBTXWVqbnbt5O14cWtmX1NUXvjb0s/OzdDW5/94ZGBlcvZ2dHl57OTf3+je\n5Ozs9fZ89H1tal9lZ3Dx/25nbHt4evxybGtqbmNfXVlZXF5fY1tTXHrr6Orf3uXn6ur3aXN7\n/d7d1s/RzdLV1+Dk5uHl9v/9bmVfW1ZTV1VTVVJQWFRPWGJ95t/h4eXu+v31/v96cG5jXl5o\nZ2p19ev8cmplZmhsdfTr5Nvc2dbU0dve4+no8/j2+Ozk3N/vbmdlW2JfVlZWVFRUUlZcY299\nbHrudW5iXGNeX2NvbXrk29HR0tbb5ubk693Z19Xj6OL4e2tfWFZbXWZ5bGZjXV9ocfTr4dbe\n49/5a19j+ent7n3s/V5ZTUtMSk5UXmJhdO7g4ejf6ezg5t3Z4ud8/+3n4u/p593c6eLm4Oh4\ndl9rfHrweXBsY19scmxtXFhZVVVOTVFTX23y4d3e7fTr4t/f5/jy7vZrWl1u9NnV0dDZ3fho\nXmV6d3RjdOl7dGtkX1xnfuzWz9HV3+XzamJcW2FXVVtcZmlmaGBibfHp9HhiXV5ZVFNZZ23h\n1NPP0Nj0Z11kePTq3tna3u93bXN77Onq5efubWFiaWxpamdvemtlXF1eYGBhYlxoaWRsa3j9\nfW937Ojm7+7l5+v07+7/ff979vju7H5vanv9dfLi3+X77+De4fbt4er/efr/fPjk4eDe3up5\nYFFLR0ZISkxPVmP96+jn3dzd5u36cP78fPvud29+9vHt4+ne19rlbFpQVVlbaXfq7unV0tzh\n9XTx+vdyXl9XWGBeWl9zdPbm5OpybnppbGlnY2d3fOrj5ezz+HtlX2Zpam997+zl3NbV3OXv\neG5tb+/s6dva19fV3PL/eG5iU01LSEhIT1pqevjc1NfW1dvqeGJsaF5gXFpcX2FgXV1p69fS\nz9fn9Wty/P3u7N7X3ePq8HhpbmlhZ25++HFhV09NT1VaX2d0ePvq3+Dk6ufo6ubf3+95cWZZ\nVFVXWlxYW2Fo89vV2NTPztXg7vbl5O/q39ve5Obp63z97f95//11bmJaVlBYYmZ78fHm4fNj\nWVhcX19eW1tbV1RUV1haZWv04eDm+/jq5ePj29jQzMvN0d7u6ndfW1xic/1uZ3F2aGpva/Pt\n5N3l7mNbVFNeXWRsfd/j82NXVFBOUVVZWlx1ePvw/ejo29DMzM7R2d7vcl9bZvfh3OD1dGl0\nZV5jYn7z7eXt5+Pr4uf7+XhtY19kYGFbXWtwdPj9fvrx82NSTExLTVpefeLh3tzZ3NbP2t/e\n625nb3d6fvv16+Hf4ux1aGZjZ2pzc3Pq7Pf7dnD9+XxwZGNhVVRUUFVaX2Rrb25rbW5oZWV5\n7N/Y2dzl5efc19zi7OTs+nj68fDv6OLn7u/1fu37bGJUXmds7u/l5np+8fp5/P7792tcX11W\nT05UWFtncnVxbG13/3vq5+/s7+zxdG58/Hv/9e3r4d7Y2dvX3+rtfmtsbHXt3t3f3+Df7Hpn\nX2FbWVVPV09OVVNUWl1jXVNXV11oX2Vlb93U0M/OzdDNz9PX3eZ5dm9kXFtZXWhraGVy+uzf\n3+Xk6OTu9nx0/Wxufu33ePT073t093txZ19dWVlYXmBZXWBrfv/+/Xr+831++nX+7PD7fOvf\n2dPY3ub16tzb3eLn5nppaGBlW1xdVVhUT1JPUVlbYmh9/m95a2xrfOvg2tvj5+n9/3Jo+319\n+Pzu/Xj/efj+aHHu6ert3t3f3dzb3uTs7OXi3+ri3+fr/mdfXVtdXWFeXFxdX2BeXFZRUFRX\nUVZdYWhv8ebh397d1dDY2Nbe5/dtaW3t4t/d4+Dg8/T15+vf2flkXltYWVxfX2dob+7p421Y\nV1FTUlRbYG1v//T+bGVoZWht8+Pr9v9pXmRofOjf1NLb3N7zev57fPHu6eTp5ezp397l4ebq\n5OLi4Nzna15YVVxaWF5lY1hYWVBRV1lcbPLp5uLf6PHv5enq93ZgV1ZVWF5gft7b1tfc4N/l\n8+jo4dXV1dTU2On2+2dfXFpXV1dPTlFbX1laYHB0c3dtZ1tdZGJk9e/46eLj7HpqZmZibe/k\n297t9XR99/7p4dnRz9Lf6+13ZGR373FfYV9eanF97u/b0tTb7+7+X1hTU1peY37/9GpdXVdX\nWFtkdX53ZGFcWFxhanH139nU1dvW1tzY0s/U1tLT19zo/3tdUltaXWJkdX11ZFpaWltdW11l\nYV5aWV9aW19p+nj/7/t0eO75anRvefFoZnVmaGdr+fLp5+TWz87P09TT1ePr93lmXWRdXmx3\n79/d3+fz8356fmddXWNdWFlXXmFdXVpZWVpjc/Xo8fLw9+Pe19DQ0dvsbV1gYV5cXW/t7Ovg\n3epzdfvm3+vs7v59fWRfZXb/9/NvdP13bGNcWFZYYGhsa2dhX19ZVllbXlxpenH97+fd2dTU\n3e3/5Nzt9vj44tjV1tna3uXtaWjz83doZ19ZVlNXZXNoaHbr3ehybG1u/ejyfHhqXFdcW1tq\ncujd5uzv7/X8a2NjX2VrZG91b+3j2M/Nzs/P3ev1amJz+//u9HR5dWxrZltYVltibfVyYmNe\nVlRUW3VsX2JZU1hUU1dbeeng3eLc297h4tnY0s7R1Nvne19fXVtq//Pt7OPj5uPv7+n9//dz\ne3dvbWVgZGV47OXf6u52X2BhXlxbWlxfZFxaWFleZ3p5/unu/HhlYmp149rW2N3Uz9XZ3Xxv\nfe7h4enzdfnp7+7r393l7HZWU01JSkdKTk5RW2N1/f3u7u7n5Ofq6PNvbGpjaXD74t7d2NDS\n2ufue2ZwaV9eXGRuYmb66Orn393e2tzg5ern821iXWNnaGNqbXP9bntzX1tVVVhXXW567eLb\n2ujzamVvZHHz/vfs5t/g93VsbOrn7/VoYmz23dvb2dzb3Nvb2NvtcmRcVU9NTExPWmdrYFdV\nU1xeW2Vrcmxq9XRlY2P88+vZzsvKy87Q1OF3ZFtVVFNYYm70397p6PN98fTv5une2+Hp7/j4\n9GxdaGNhblhRUk9OT1ZfaGv67uro7uzh5O7x9+/t6u5+fv729n3p5ufr6u58ZVxXU2Pu593Q\nysbIz9Tf5exrc2hlXlNRT1ZcYV5XV1xfW11fXV9aWGJjau34bPt7b3doX1hYXGfx7uTY19vn\n9uzm8/rt69na2drk3dva1tznfWlfYVhWW1xgWV1zamt17eHi4+n89vRuYmN3Z19nZWxfXGhg\nW11ibnl7dnf1+fbi2tDQzczSz87S2Oh5al9eXWRtcHBpamNfXGJfXG3+/29kZV1aWFRUWWBp\nbXN0eHz+em1dV1lYXGp2b/T+/Ofk3djUzs/U2d/5//NveGpibnvy7eLX1tfa6vd7/f1vemNc\nYlhYWFpcXWBkbmNlZFlgaXJqWl1XVldVXHjl18zGxMXH0e59altWVFVcaHL15dza2dfX1tLa\n3dzv/2NcXV5z6t7q6u96clxXVllXU1dVU1RRT05PUl1cXHL87n59eX3x/vXr39rY3Obt/nty\nbnrk2tfc3Nnt6tzd3tvb2tvkdF1VT1RXVl1cWltbZG1lZW1+6eHb19ra2uHmb1lST1NWVlJV\nWXHm5dzX1dTX1tnf5X1yZ19gW1tv7NvV0M/T2Nnfffx+aGReV1RPWGBaW1xneHd6eGxsZ2Nm\nXVpaXWNubGRaVVZYavHe1tLR1t3e3O365t7c4fHs6uzw7/J2dGtufGxtcW1xdHNpX11gYnLn\n5PRvZV9cWFhm/+Ti5fFweW9sZWlkX2JqdW747vDd3d3T2+vs4NjX3uXub3Vlb/N88O94cv9y\nbPj8+Hhsc37p/19bW1pgXFpZVVpYX29m++ji3eLj4fRtXVZRU11ZX296fvrn6N/c3Nne6u3p\n6PHx6N7c3eLo5+7i2+Lj83Ryb2Nea2RhXF1eVE5PVFhga3JsbGVrbV5pb2lubG729Px78d7e\n6Onf3tjT0Nvo5e7t+ntvaPr05eDs7u7i4+31fPtxYmhcXF1ZWVteaXn+/Xz8bWFbU1BSWVxg\naXjv+21rdnF0c//+5trf29na3eba2Nne7/R2/WVeY1xcY3rs5+Hc3uv6dmZgX19pbmRteG9o\nZ2djbHhwYV1cWVlTV1team156dzi39/i2+Dv7urh39XX3d7e3Nzh7vL092xobnv/eurl4t3h\n5uxxa2NaWFZaWFhZV1pfXlxXWWVw7urreGRrffv88+v8/WZkamRkYG748ere3d/p5PdldVxk\na151eXT97t3W1dDS09DY5WtlZGVqZF9hamhobG1pXFdcV1NZXmZiYmJfWl1qb3n94NvV1tnY\n393z8eLs4d3b3/Hf6O/1ZGZ3bfzu9uLk/GhcX15p7Ovl73NtYV1gZGJufHF89X399fPlbV9p\ncndfZFZQVVBba354YV5gYWn86d7Sy8rLztze6nZlZXdsdff4fX11bfbn5/D7dmRZVE5MTktM\nV2f593pkZG17/nTu3NPO22xdbO7o7N3Pzc7X1dTa7Whu/+19aW1cWmdeWFNRYmlk/fTf1t3m\n6+Pe5Hrm3uTkam5nWllQTE1NTmdrYmlu5etzaGFjZ2Nq7m/x52/s9ffc0srL1d7f/HV2bvJ7\n9ebe3+Lrb/5hXFlaaFJOWVlaW01XcltmX2DseG/t5ej7Z/fb5d/v7t5xeenn5+j95t996295\nc1Zlef3/+OvT1eHeam/vaHTv5eHpdOPvYnJd+/Jd9e/5bF9cWFVQaXDq3XnscGNnXltjWk9h\nXmplTllYX3lv6M7MzMbP0tTm1dfa09vse2tbXk9PVk1bY2zs93T193Xva2piWWpwYV1eW2xl\nYO324d/s2+ns61xOVU9PWlj24+/Ry8rKzc/N2vR8XWdmWmZqZmds+eJ+/e3t5HdmYmJeXVxf\nb1xx6+jg5dnX321na2x+WV9tamhRUFlbWVtd/OJ05vJ2dV9kcuHV0trR1e7Z3dbc+frv3vP7\nbX1eVFtYal9cafXd7uv++F5TW1RcVE9cbn1lZmpyV1t0b9zf29HQ2vTm93leaPz82+Lc6HBp\nVltq/mbr3O3Z3tjT2N3u3+znbnV5aHVTXW9sYllsYWJcZm5o6WRk+m9yanZcU1BUW1v8+ezm\n49zt2Oj06vvb6t3gdP1x7ufb2tnb39vs6XJXV1lgZHFpbfh0+11mYVZkZf1pffxtZlNVT15l\nXX545vLvfHJ5ZeP14Odl697Y6un3ce5z8Xju39/b29Ti3t/p6fbg9u5vWl1ZXU5SW2dvXfr2\nfHJfW2BgWG7v6W5q7WFnYllt9+D/7edxW1p9+uTm4dPKyNna5fxta3JfbGR14NTP5+f2enhv\n7Ork4fdyYllNTExMS1d7YXduWldRTElf83n34dff4eTt/nh+bdra/HZod15jbF9ndN7ZzcbO\n0tTT6O7b7uTf3+975l5OU1pZYuH1fvH7YFFeUFlmaW9k7GFXV1RYUmdcYOfs91xuYFp1b31r\n29TWzNDU5djZ3tHa2OzZ319uaPV27OHy2el9X2BuW19dWlpZYFVST05SXm9fa3n7aV9pZnJh\nXm357OnudfDvb3Tw4dzd393m4O5gdW136dfLztTf2djV1e78Zl9TTFlZV1lZbunf6X5vam9u\n9n5bYWFfaWVmVVJVWFtd+m9ka2l8/+Xd2tXa2eTm3eLl6N/2/uPe2ebq/nXe4PNsZn1u893h\neWzyZmR5ZVlbW1ZUXlZNTlFYUVxpW2dqZ3bq2vDz3dvd6t7xbXhncejY3+ni9+bs6Ofs3/b+\n6eHj49/m6ubr9O3feF5jaWRmbG5eXl5UYHF6Zl1eXGV3c19fZldfbH5+eftsavbm93n5c2v6\n4dnc5nV66+v493pr6t/b1tXY4vTs397Uz915bnBdW19VU1VUW1tnXlFWVl5obW9eZGZdXFlg\nWVJYYurj4+Hj1dXTzs/L1+Dd4N/r7uxuaG7u59/f825kYF1kbGhaUVJYW2dnYGx+6/7v2ufs\n9XJ+ZHBfVVdXXVvr1+jk39zxdup1aGNzZGff5v3w3N3o29Hd9PVqa/3sfmVvem923djee3dz\ndvVqV09XXVpodmhbWWVqaXBoVFReXlxbbnxfYP3te/n7W2fu6+/XyMrOz8zQ1c/c6Ozs8nPb\n23NdXGVXU2FfTk9UUlpjZllRX2ll79nZ4N7d3/jt/Vdd8+lwZnZrYWViXF/5cmBj/uV49OZu\naf/t9uPP1uLi0MzXz8vV7Pd0XX3id15h/2FYanNdVFlaWGRtXFFNV1JQanx0Yl9vY/n6W1dd\n5e1y3uFwfN/Z3tbT2+rr3+vp39vm/u/0fN/Z6nt+9l5Zef9dWWVlbOnyfX11b2dq+PNdWGZm\nXm/+Zl1cYFtm/WVVV3NgauHc3+7f2dzb2dv7at/e49nk+Pnx9e3l2tfscndcW3Roa2Vo5tfe\n4+RvXGlrY/NqXV9MSElLVVROTFhfYevv+unt3dXf3tve7+bZ3NLX7G9h8eHm4t/ucf5pWm1u\nZXho++J49+94bP35dt/h7HpaX2VicmheXGZqX+zm+HFXXGZfZ21dWmpnZ+ff4/9p9eze3uL4\n59bf6dvX5vjx5Nba2tnm397vYmhvXV5UWF9ZVlxZV2psaeLsd/9cXW5kXWFSTVJPTV9taHl2\n6dzd5djW6dnU39TW5v9faur+au7s9+jh9N3fdvZmY/DufOzj6e/yYnjuX2xWVW9qanJra2Vi\nW334XV5WVGNmWltdY27r8d3Z79/rcefe9+ff293b3dnX9OfwX/bq7OPs8WX+9nF6XP7tVnzc\nbGpobV9dZW75X2ZfSk1RSU9aZ2v42dXW693fW2zfbnHx6f128P31aWn8XXzT4Ord2+Xm09LO\n29nO6PzlWU1OUE5KVV/3eHHoWVnrY1pud29eY19eXFdkWF3Ny9nR0eJ0+n3v/2n0a1/Y21tk\nbGNccOHb2tTL3Xva4F//3Oxpeuf5/29yV0ZSZVRab3ds6Nfe6vjyWEdXZE5RX1RPWmV5++/Y\n1uPVyt7p1uVra/n/e/Pq6WBj1uX70dji5t3e7vxwYU5W9V9UbnhqePPq3+jo4mtZcFNET05O\nUllfZH3s5WBb5uZm4Nnm493V0NXRz+T22NZu+21dYGZya/n68G1d5etZ5+B0+3Zvd+Pe331W\nae5bdvBgXVxbVltVWlhQcfJo3dPu9vX99uzu7GpX+uVp+upmXF1h7dfc3Opq39R689746NjT\n1NTf4nZXZWtOUlxPUVlSTVVRUlFNb+5n7tPa4t3j8+3z4uB63tlxd9t+ZvL/b+7w6vxYZvdZ\nYdvd2tDP2Nvf4vldat92etTd7Ox3XWNfZmRQUlxTUmtaU11jZPvo5eVoXnFfVuvqcPbxbn3/\nZV5XY+PffNPY8fP55t7Y2Nro9tbUeuTpZGJaW2BoX1xVUV12W3fsXm348/9samthXXjfaWjn\nb3b2dfbt9nddV27hXlb0/e3j4eDf2tvpbnPf6fPT5vXd4OXf4drl/O7t/GTpemNr/3N4d11X\nTVBcU09naGNmc3r17GZmWVRfbmD37m1seG1o7G/959zQz9ve3+t5evt33+Lj6X3/cVZWYGd3\n/PTv3P5eVk5NUVlh5NzS1d777OxfWE9QXHH02d7b2Ptj8+Zzcv1wbv1teWdrdmZq39LU1NTa\n8/xt/2peZVlY/9jmevX3bPDq5ubu5fJreN7vX15ZUVZYTU5XZGhYZ9rd/H1rVlZpbGNy5t7v\n69jb6t3X4PXZ0+7q2uJqW/niamNrZFdu8l9eeXZPU2f8emvo8Wbj1Hd43u9XTFn0aVljcWNs\n3Hxe99/scOvZ3ujm9WFm4WxZ7tjrdOXW1+fg6FtPbu1l79rnc+jb1+Px625n5uVbWV9XTFBd\nZmRicVxSXX5jaOfoamtreOn09Whn7tba4dTY6fz8fevvZVxYV2JmZu3q/nrh1dDP1N7/Y2Zq\nWFdXVlp29t7b7WtXUU1TW2z2fnt4X1/x9XNpfO7j2NjS3Ph3b3Lk3vlveOji6O53ZWFeXWTl\nz9fua19XW2Fo7t7d3+fUzd9dT1BQX3zv3uPvb1FPY1pMTmFvb9vd3tvs+l9c/fldWGlfV2n0\n6ufXysrNxb/M3uHxW11nXFpfZ11XdedgVVVZT01cVFJaXlNLVvPq6+DU1drW3+Z7YmBRXNva\ne19mYVltb2L83dXU0snH2fr+bFpkcGv8/O1tX3ni72ru43ru2uLq6/ViWXbc52tZUVNPXWtm\ncW5hVlZw83BiYHp0c3loaX78aWjj0d3q593T0MzN09TY5mxo5vBeU1VZTE1SVl1s6/z32Nbe\nZGZlT01NTE5QWV5h6N7e5ObU2t7W19/o7GlVUmJcTk1bZ17z0tPX1Njd3trQ1ejl3t/s4995\nev3u39vT1O9kX1NQW15RT11cV1pbW09LUVNPXuXf3tfY4Xt09nBYXWtlceXh6t7a2dTS1dHV\n2dLW7OrZ7fDqcGFZVVlVUFVYWFxvZlZTU1FefeTlZFpWU1Rn+vXk3trd4t7Y521fXFhp/Ftd\nYWN0c//o4eTb0Nba0+rv7/na1tHLyszS2+1eZ15XWFBaX15faGJYU1hXYuDh72hvXk1LTk1M\nTFRdadrb1dva09TR1dLS2uLn7drc4fNj8ufv+e7n5m5tZ11pXlxVU1pgbW7/9WlfYWby7nRq\nbu/e33F3bV1OTE9RY1xaX11ucmRrbvX9Z+zc09Dh39vOytLY3dTN49zT3Nh7WVdPXGBaan7k\nblpxa/36dfhiZ3dgXVpdUk1YX219Z15fddvZ7mx+/FtbZmro5fvf2tTP2d3b2Od4aF5eXVZe\n7NzN0ePd1tjkfndqbGBPUFBf+2dne3j7bWh4ZnxiTU5LTVVTXnPs53Fvbnf6YWTy4t7ydvbk\n2NbUzszN1tXP1NHW6O1sWVRRV1575nr67vtrWV5gZWxpaml1/WVaZlxUV1FVXnj/Xmvm29ns\n7npzeWddWV9gXF12593a3dXW083b59jS3XV2/HF3YWbj3dfX7+vk5vtlevr/aVFSTk1TTUpN\nVVVLTVlr5eHc4/Xm7mdv8uxdT2Fw6t/+/3P63d/n3dDP4uLc4NnsZWxu8OP3/e3j73Ll4dnS\n73Z3YWVQS1RYXVxea2/r5Pp5aWZkWVZZXmJi/erc1d/n5eXk9W1ye3L5d2R36+tya/5v7eXW\nysrM0tfe3vNqYWB4cW5la19YVUxMS0xIR0tXaW57evV5fXJfWVlaZOno2+d9e+jY3NPO1dHV\n9Pr1bv5jbOTg3eTP0+Te3/BrZXxnWnv4fW5kZ1xdZF9hc3D0al979+hmWF1ZWFpSW+7h33f6\n3+fobmZrfu33bXPvfmFXbN3PztLPzs3L1ODi7PlZTllYZ3Fr8Xls//r363xkVE9YYWBZX1tc\nZFtkbWFcVFFid/D6YWhoZFleanL9/drd1tDRzM7R29/zbXrs7Pbv/+TtbnZqeunvev/+6ejo\n9OrcfXBcXVtOUlhtb25gWllZX2RlZ3ZqaWVvbnL2bPbo5urt/XHu5fLo2trS0s7P5NjW3e9w\n7nBdY2Zz+mZiYVpnXlVMSFhiZ/Pn4+94bGRcXmVuZWR5bmRoaV7+cHz7fd3f3G905Pf0/GJf\n9m5lXmbe29LV1dHSzNba2Nng/llSXFpcVF5la+rv7Ozj+2pWUltaV05WWWNsdHHr2up7XGP1\nallQW3Vpde3r2NDOzM/My9Pna2deV1NNTvXUztHY0tXV8G5sZmpdWV72c1xSWPbm71xlb2FX\nT0xIUUxITljy7ODq3c3R2vNl99vs+3X64utwX/3f2s/OzM3T/ldMTlhgZHPcz8/X5Pve3Gxd\nUlhcWE9IT1NYXWJv39ffenrc1tnxXWjzeV9SVODX6vls3+T4bE9WbGlkY/PKyNDS2crJ1elZ\nb/V0W0tMXf1ZU1/j0M/W6d3fZU0+P01RS05a69bY5mjy83dfXPvl8F5RWPTZ1ujqy8jR53Lu\n5/1WUFv02tfZ3NLT9Wtabtr8XVhdbmZeU05q9mZfZPDfelpNT2p5/W5w2NTdcltv5edZVGXs\n23xZW/71bW51zsPGyc/Oy9f+Wk1cd1xcW2bk3OPu2tLf9VVRb2tdVU9QXGNkaW7b2uX2WWtp\nVVBGR1RobWlf8t96Z1nu23ttXmTt1M/T1czHz99v5dLT3F9VbHjvaV5fYnpvYH3V2HhbWXfo\na1xPWmxnZmZs+mlUTEtf69nkeeTV1OxjXejxb2lPcdPO2fve2tnsZGXq71ZRT2nU0dt4dODY\n5Xxr5djn/Vln4udwVVhga2tsb+fcYUxERlNoY1FWZeff+m753nRhWl3fzs/zXG/j5OXu3M/X\n2e372M/SbVpk69HY9evedVdLR1N832RQVmzpZFdQYXZbUlH5zcvbZ2H37PxlXe3kdlhMV+vf\nZ1Nc38zL1dvNydVuU1rj1ulPSllu/mRt69bXfmFf0sjTfVntzthvXWvZ5k5DQ1d5YU1HVfrl\nbV9lfPtNQkRZ3dvsa+bMzNLe2c7L41hZd87N3Wxz6vZmVVlp6vVXVF7bztxtW+rZ3fBtZmdc\nRkBEWd3jd2Bq4NHY2NHUz+1cYmXp6mBXT1/oe3Hr3tniZl1aY+ttXF1cZWNr6NzR0N3m4M7J\nzdfk/Ojkfm9iX2BYTUpOUlNTTk9PWWVo8dra5Xpz+eHS1tzta3tuY3FiW2VqX2Vn+dfX1dvp\n3eTo3ubr9GpkV1hxe3RoWGX9593saFxiWlJPWPz6a1lUZ+3h3eXx3u39bm/k3e1gWGrb1+R4\nXGv8Z2Vq7dXRz9vkzszO32VrdGJbWGHb2eHrZWx7cV9WW3L6/15QXmNVTUlP6dHW6Hd9aFpN\nUmLv2+1zaXH3aFdXYvXa5fTk2tHc5/bq29bf7+/h1eH2fW5vY1xmev10ZVxWXWzw9WRtbGpm\nWl5aVFRUVmB37+Hx5+f79nBuef766uXV0d3e73XtcPXd3NLb6fNdbuvz63v+fWhdWV1eZ3Lz\n19LMys/V6GxbTEtOTU5NSk1TV19oa3B0+ur4+Pfx72hcXGh+29bb1tbb6Off19HT3PD58N7g\n+GtpY1ZNTFVUWVtVVVRde+v47NvY2uTm5ejk/1lcXGnu8Orr7N/tbmpbXmZbW19i8+Tk4t3m\n8Wxr6trO2GhaWlple2Z05NrQ1tXQ0tt+WFNabvb+693b6l5PS01UU01JT118/FxXWWJmVlr9\n2NDW6/zs7Ozr8trMycze6tza4WRXXmzs29jj4/NeUUxPXXZtXFxn7ODkem/m3+J7av7792JW\nV1dnc3X7/nljXlhVX292X1ZWZfHu5d7Xz9DY5+ff1tr9bHDs7ndsdujf3vP629LR4GNdXWFm\nZmRtd35xV1FYWllNS05TYGBdcOLV1uZ67t3c5vZsYfjf3N3o3dPY5X15dPP4W1RVYGhteW74\n6ud89+bl4vhoa3X4//vuePxrYmNbX21zYV9mZfzvenfv5P1dUk5YeGxsenJ+eHFtcH7u29nk\n4tvW2eDa29ze39/i5/N9ZFxbZvfm3OHi33JcUkpKTFFVV1dbYFpZWmD05dvZ1NHc6W1fXF1f\nau/c08/b5eT48eTh19ne6/v2b2ZfXWNp/+Xf6X1vYFhYWW3x8Ojg5fhyYGFfWlZQVlRUXV1j\nbGxqbGpu/nVrYmFlZGZgZ+vc087PztHW09rj7unr6+76evvu9f9u+Ojm7nd2fXvt5+316u/x\neV1dW1pWTUpISVBWX2VrfW1sc/De3dne4u3t5//0fP/17vR649vQ0dzf7fLu6un87v5tbGhj\nYGT5eV5eX2luYldWWFtgXl5namJXTk5Xc+nj2tnf4OTc0dXZ4u5vXFxZWWBkaWt46tnPzszQ\n3ODn/vDi+W5gW2FiY3zj5OV4aWdf+nT9emj9Y1dXWmt4bGZrb3V2Zl9eYWFiYmVw7+t2aVxZ\nX+/h4dXN0M7NzM3S1ON2aWd18XpsamhkXVVSX3Rsb21kYV5eYl1dY15bXm703+Dtbl1fWl1s\nYl5ibfVzdfJ6fHl27uve3eLj4t7r8vD16eHo7Pz47Ovf4efl4NvRz8/P0Nn1W09JSEtPUFFY\nW1tbWlxrdG1dW15haHJ98ez9fe7u6NTS1+5qZFxu/e/e2tfY2dbc29nsbFpYY2BmX11sa37i\n3NbZ2upqXFhYVFRRTUxNUltu/vXl9nJrdd7d6uz7fnpdXGj14NnZ4ujydejh7dve7/h6fnNq\ndm535ujf2NXc3+v9aVpbV1pfaG5sbXBnbnzzfnnn7nBlXVtWTUtMV2ppa//t6nRhdPj07fLv\n6t3Szs/Oz9fe4dzf6Oj4+X1jXV9ibfz/93Zud2lkX2dvZl1gbW7x+W17b15WUFFVWF9oV1RZ\nWV5fd+Te293j3tnf397Wzs7P1NnucW1gXllcZXjr3d/k7Wpqanvn6eTZ3+328nBgXVZWV1pW\nW1tbaWVhV1Nda29tZ15YVldq6uff3NfS2NjY3t/qffro2drh5vF8YmhsbuTd2N7e3+7sbG1r\nbu7p7G9cWV9dWVFLTFBQUldZWVdbYmX73tLS1tzl3eHc2t/o6uvz6vRvaVtVVVxtfuTn7OF8\na2pfbOXW09ba6PP07u50bmlma3ZnU09OTU5VY3zj2M/O2t/vcnP+5+t+bnL+cWdnbXdnZmth\nZ11eaGJx9uTa19TV09XX2u54bHjs6/h3bmRkZF1jYl5hXVdWW1ldXV1eWmV97+fh4/dmVlNP\nV3r74t7f3ePi5t7e3tra0dTa3ObifGxsaOvo393v9V5VU01NTVFUWWlvbXj69vprb2hq+eXT\n0NnffXnu7vPz/2tnXlxcXF5aYWpu7O/o4d3Y1trf3+jq7+/u+H1rcvt67drZ3OHx+W5582ld\nZGJbXlxbYGFrb15ZUU5XWlZXWE5NUFv23NXNyc7X3uz18uv9aV1TUGDn3NTS09bk5t/f3d/v\nZ11daXBz6+Xh2t7q731udGJZVk5NUF1rc3dyeG1mZmxtfO7tb19fbXZx9/91Z11kcPzv9Pn1\n9unn6eTe18/Nz9PV1tnmfGlfZWx74uDv4eh5ZlhWT01NSkpMUllgZVxfbv7n6OXme25oZFpb\naXjv29XS09bb5+/zbl9kePPn39/u+vD/8eT18u3r7nX5+W9kXV9od/Ts6/jt9XprWldUU19m\nY2dxdmdoXl9iZWtmeOzs3drg4/Z7d3Xo4t/rdG9obWp95OTb1NPW4eHX2dvpeWlZW1hYXlZn\n+X3t8PV1dmVZVk1JSUtSXGhx/+745ut7fGRreWn/8vHm7+Ln7OTv3dPTz8zN0NLe+2pdYmVh\n+/n77v7yZV5hWVZPU1dYU1NaXP3s5dvb2dTd6vpnWlNRWGNieHdy8nr15uPc3+Z6ZXNkX2Nm\nffbm1c3P19/k3+To3d7g7XL373f9c25wWltVT1dfb2xmXlhbZnj+4fNsbVZYUUtUWGhvYnRo\nb3313tfQ19TO2uJ8Y25v8OLk2tPS2N3ubGVaXmdmZltdbX19bO/rdndoZG9lYn7i4N/hbWVf\nW1pWWVNOSkxZXG/l7u3o39rm39nd09Xa2d/l/3N5cnN479/d1s/P1NrY2u99/mxmYFtVT1ZZ\nXndsbXx3cnpkWVROTkpKSklRXWnz4evc19zZ5eLj9+Ph3tnc0tPY2Off5+/9Z2ldW19jbvnz\nfHp1bmRfcur7d3tmYFVRWGD79OTc3eL7ZlxeWVBVW11jYWZna3Xt2Nvm7ujc5vDy++jm4N3m\n3dnc2+Hi4/T+cGt1e3rzfO7f5d/b4vtnWVlZXFlbZWvybF1dU01MTE5PUlVWV1xreO3f39fQ\ny8nP2OL7dXzu5+715NzS0NTX1tz9bmFaUU1PT1RTT1NbcuLZ19rg9Hl5ZWRjYF9ibWhdW19b\nW2NebHhvfe3g3eZ8/fzr4uXk4tnY3uTy+uvi1M7Pz8/S1+dvbWZWVFZka19fWl9lZmz98fxl\nVU9UU0xQVmBobfl+bXX4+O/n4X15+Ph4ae3v69TQzM/g43BaTUZJSE5j+9DP1dbn5+Le3t/f\n3t7e4nxlX1xjbG5nZF9dX1xZTk5NS1ZgdPji2Nna2dXT1dnq5PtjXE5LSE1hcurU0M3JyMvU\n2vlud2dvdXB0Xmjc2d7l29joe/ZsUlBSS0xMTlVNWGD89O/c6Xd25ebq8/ns9PxqdGxjcm18\n/Pvj8+x9Yfp96d3j3u/s//7f6PNsaG1+7/R2d2RgbWFYXWFgXnjb4elzamhZXlZVYWz/ZGz9\nbnl5durd1NPT1Nvl+v/+/vL99+Xl7uvxdHhmW2N0amnp3Nzd1tfd3t7deGRhU05OSkhHSk9X\nW3jm4+Xs6+5mZ2dfbX3k3NvW2NXX3+H+bGNcZmVmW1lqZGjz+O/2/N/X0NPd2tfY2vRvaFxY\nYGppcH70b11ZU0xHSE1XX1lYZ/zs39/q8era1tfe2dno/XJjXV9dbt/Z2eT86NfN0NXd8ubs\n9fVydv72fm1lXVJQUU9YW2JjXGpjZGdx73f59Pbp6d3pfXJmcnBkYF5q9ufg631cV1tcZ2/x\n3dTR09PY2uHk3tvd6vJnYlxUWFNZW2F8ampiXl9ZY2Rr/mx2+X1uZ2tqdPB4fuv4e2NaV1Vf\neuvo6ens6ejx6+ns2NXSz9XZ3+Pb2Nzg5u/7+fJ+b2FVTUpMTE5ZZHTu6ubd3+Xc2+l3aWNm\nXlhRTE1TX3Tl19vd4/VzZWRsc3X0/216em9z39fSztHY5/R1amFgXV9mYGh+/u349+3n4/dz\naV9lX1diZWJueX5xbV9XVlVVWVtndfvf4d3a9HZ2+PJ54dnY197h6mpqaf/p4N7e3+bpenvv\n5Nzb29/9YlxcXV1eaGtsfOvqc213ZFxXUlZcXm3z7un8cG1candpYmnv7vj/Z2JeaHlw5t3a\n09PV2eTvffl99+Td2Nvn9/9iWltWW3P5c2ZbWllQWFpUWF5laHN0Y21yamdhZ21+4t7b2uLv\n+Pn0597Z2t3e4Nze4ebn3t3Z2uV7aVxeX15dXWNqbGdkZF5cWl5x8fl+9+/t7u/v83z86vxq\nYmBeWlVSUE5adera1t3a29/c5ejk393mfm1qbXr+5uPb29fT3epsXFJOTlFUWFlaXV5kdXp+\n6uTh6P3zalRMS09WVlxo9+Tl3dnd2dfc2Nzxfmlsc3f2eGxvePrl29bV1dPS0dLb7np3b2lj\nWlRYWFhWV1xoen3n6OnrcXBfWlZZXl5nYmBsdmRfZWr86ePf7Ovl6uXo7nJreHb49n11eevs\n6Ob06unl3ejk3Nfb7N/k8vZpX1lVVVRWWVpcWVNXXmJaWFxca2Znc2767+Pe4eHh3d/p8/p7\nb29qZ29xcufd1s7Q2uf7/Ht79Hf7e2dyc2tyc3fr5+vn7Pb59ff/Z19gXV1cYl9gamZeXGBk\nb/v/b2pnaWdy+vny9+rh4dra3Nvb2Nvd8H54ffJ4bmNs+vN9/urs9v94bWxhWVxbVVJPTU1P\nUlpbYPnp5ebw4t/t8ezo7P1uYF9z6uTg3dnc3u/6c2FjYXD6+O3j4+/u7OPj6ejp4tzb3u18\neGpuZGny+vn9aVxUTUpKUF1z7OPj8u/ybm9laf1t+vhoalhSVFZldt3Py8rLys/g9f57aXXt\n+uh+aWteaO/c1+De2t3feWRaVlJMS0xPV11ibmZfXV1cZvjo5+vwd2ZaWFlj/uzr9vPn5+zq\n3dva2t3f4+nr5evj3Nnb5e53Yl1fXVldX2/yYFxt/fHv9Ozq7+/9amZdWFNPVV1jfOnt9fn7\nbnzo5uXj5uPf3+To93JxbWxr8urf19/r+nRmY2R23t3c3+zu/nhqZm5yaGBeVE1MTExOVlte\nZ2xtcWtvcWJoZWl19un+897l+f91++Pe1s/S0dXZ297lbmt2aH56bf3v49/h3N7m6O3p4uD0\naF1XXF5mcWxwbl9TTk1OTVFXXWtmXVdaX11gZ/7d19XQ09bb4eLs4tva1tXV1t3pbWhjYGFl\n+vH4fXFsfOjs8e94fPR4bmNZV05NT1ZeW2n75Nje7XxmXFdXWVJPVVpcX2j36+zq4t7d3NvZ\n1NbZ1trd3+rx//97d+rf6vp9dnx4/Ph77+no9nFiW1tTTk5TVlZi7d/h42xfZ3h8+PP+6uPx\na2VcXvnu7dzS0Nnh7G9paVli+//p6fHu7en9Z238//rq7eTc5+fi6XRleOzp/mVfXFFOTktH\nSExPVF1iYGFhbO/l5d3V1tbT2eDo8e3t39ze2eLp6Px7cG1fXmNp9fbg3NnV2dne3+9ybF5Z\nUE1QTlFYV2x98N/f4e1vYFtnePnp7f1mX2RdXF1da/ng3d7m7OP1ZXv++uTu7Ovn3+7x49PN\nzMrP09Tie2BWUExNTktNUlZbWl9hXGJ76tzh6+v7dmVYUFBSXXF2/u3n6ez2+Pd989/X2N/u\n7t3a3Ovv5eHd6nFkXltbYv/l29vr5t/me1tXXFxbWFlgXWL98/x19O77dGRhYGFdW15fZf3h\n4Off39/c3ud3Z2hga2dw7+7j5tzZ0c/T1tba9P5mXF9cZmFZXWdYU1lXZ2dgdm1naVxYVFll\ncvXu72lcXVteee7i2NzY2dvX4Ont6flvbmpvdPLt6dvf4uXo5/ZzZmtzbnH56vT5cmRpaGJt\ncWZcXmNaYHRsaWxsYV5jfe3r4ux+9nlqZWpwbG92/fHo7e7s7+/69vXq3uTj4+nl4u3r3eHb\n1t3ieWZeU01NU1tt9d/X2d/v/m5ZWVdYXWNlX1xbV1FUXGh38u7q9l9VUFJcaHbj1s7Oz9Pb\n2t/f2dvk9/rr5e7i5Pj39fT7+/tuY2JiX1lZXVpkbXPv+nFrZWVcUlNUUFZea/rj2NbW2Njc\n7mhdV1li/+Pd2Njb1dHPz9bd8fv4dmdiXVZQT1pmb+vi3N3v+fh+8fh9eGptaGBdXFxaW19f\nZmRfaGRrbGltcv3x8X3/9u/f1dvg8n74dm1sa2RdX2p98Ozp39ze4u34eXby6vh07O9+/2lk\naGFZVVRST05PUldXZnzk1c7O1dTZ3t7m4+bc3t7a5+jm82Zhal5aXGZtb25q/ebb197k6Orf\n4t7a4+f2ZWBcV1RQVFheZGdfXVtYX2lnXlpgX2FqZW5zae3s8Ot6bm3x7/ry8+vp5tjX2Nfa\n3d/q593d5ezycnn0/nlta29dVllaWVRTVVZbX2JeXWptbG1cWl5s4tbX087S2Nzf3ufu9X1v\nYl9dWVlice3i29LU2t7f4vd2d3RpX2htem9y7d7W1dje6flxYFZPS0VESExPWGn9++ne4O9y\nX19qaV9j/uHl3dzs7Pft7O/g4t7c2tjj73x0dvjv3trk6W9hYlxmb2pv++//d3RzXlRNSE5W\nXGNp6uf1/mxw8OXf3dXS3OL4aGNaWVRTYHvv7W9kbW5t8N7V0tXW1dfY193c19nd3NzoeGBV\nUlRWWVdTWGJeWV9rdnJsbV9hZl5aW19jd+3m5Ofs7/Xu8W9fYWRdWV5rcevh4OPg6N3Y2tze\n2tfhfPnvfWplcPjq5/l7Yl1dW2lhW11aW2lsbG9sbGx1bmReXWBueXd8fXP+8u3q8+vf2dPU\n1tru/HZ28HlybnBzYV9jdP7+3Nfc4Ojo+mpkZXP89/pzfuvp3+l5bmlrZGdfVlFTVFhfcfbx\n6+x8bWdeWFhbYnz36uvr297Z09jZ7HF5Z3J5bnl8dvt4bGtud/La1dzl6/9mV1JYXF5pc3fx\n/nJeVFRPU19hcu7g2t/ecmN9fvHa0dHR09rrZ1xbWV/45t7V3O30fXRjZ37v3NbX2OdqW1hX\nTlJSaGhobWloYlpZW19t++fc5flzZ2x0ZHN3e+7d397f5+5qYl9dYl1j/OXc19vj5Onb29jR\n1d/zYWNgWltYYV9dYGVdW19dZWR68XRwbWdkYmRpeOni3e79dGJXU1Zn++Prfu/u6Ol4fO35\n6+Hd1dPY3N7c2+Tw6u7s6+nkd2NYT09RWWd489/d5PpvX1hdXmF393luZ1xRWVtTWl1kXmV5\n6+bu+P/z5+jg3trT2t3la2VfYmpo79/c19fSz9bueG1iYl5bWVlo7OHj9mhkbW98eHNiWFta\nT0pFRUpOXmx+49bPz9LX7ff++uvl2Nre3+Df/2549OTf3eT0cF9l/+Lc2tTR19zral1YWFZO\nT1FXZm1raW92bGZnXVJUXHv2cG974tvc2tzk8P7ydGBbXnD67uf//O357O32+PH+++rb2tnP\n2Njb7vxnX1pSUU9RUU9QWWJq5dzY2PVoW1BOTk9UV2Jy9N3d3t/p29rX1t/d3+/6Z1tjePDk\n5+Xj4Of6cWhtX2x4/HX2/2966edybmRyefvf5trZ3uF+aV9VXGVrXVdbVl5hXWJcWV9pc3rq\n3uXd3tja73b3493d29zh3N/i82x17evz9GtfW2FfYGprYF1fXFxeXmRfW1xcW1ZVXl9q9nvj\n4e7i6vPq5+12am1xeHvp5+zy7Nzb3dfY393zZg==\n\n--n2m-MIME-boundary----------\n\n\n--n2m-MIME-boundary------------\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2\nContent-type: text/richtext\nContent-Transfer-Encoding: quoted-printable\n\n<nl>\n<signature>Derek_Beatty@cmu.edu   ABD   Comp Sci, CMU, 5000 Forbes, Pgh, =\nPA 15213 USA\n</signature>=\n\n--PART.BOUNDARY.2418.16114.COSMOS.VLSI.CS.CMU.EDU.715029153.2--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.50.txt",
    "content": "* 50 FETCH (UID 50 MODSEQ (30145) BODY[] {91057}\nReturn-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA19468> for nsb; Tue, 29 Sep 92 10:19:23 EDT\nDate: Tue, 29 Sep 92 10:19:23 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9209291419.AA19468@greenbush.bellcore.com>\nMime-Version: 1.0\nTo: dnd\nSubject: Re: Happy New Year\nCc: nsb\nContent-Type: multipart/mixed;\n\tboundary=\"PART.BOUNDARY.4099.19398.greenbush.717776361.2\"\n\n> THIS IS A MESSAGE IN 'MIME' FORMAT.  Your mail reader does not support MIME.\n> Some parts of this will be readable as plain text.\n> To see the rest, you will need to upgrade your mail reader.\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2\nContent-type: text/richtext; charset=\"iso-8859-8\"\nContent-Transfer-Encoding: quoted-printable\n\n=E4=EB=EC =ED=E2 =E4=E1=E8 =E4=F0=F9=EC\n!\n<nl><nl>\n\n(I guess there are several ways to express Hebrew in email.  You used the=\n\nlow-tech way.  Above was the medium-tech way.  Here's High-tech:\n<nl><nl>\n\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\n\nW1Zj4Ovfbl9pXlFaeXNZZdLe9c3O093z3vf/69nc29l+5W9XdntvcGd603Zja19qTlRaXmpi\n8/Lg3d3+c9rV3V/gZGjxX/tpaPr4c2n2X3jm+G/l3+DW/mfkbfNrXNPj+up52ttqYeZvT2F5\n+eX2/+pxWV99aWT/6ejv3/ls3+F83drlbXH1bl5u5Or2YW1sYXzs7WleZWF4/nDn2+tfbefn\ndGHk4vPtbefn5vdr9WNp6HdoWl/i6/pW9edYWmRr+Gdjbu1x49x04uDz193n+n/c73Nh5udg\n8mZjet7f+lp08mxgWWxhZlNeY2vwbeD7eOLn8+xudO304HL06G3jeVp89Gvq8Gtg4ehffXrb\n1nNl5+frb2ne9Gr78GpdWfPiWlhz3th3Z9vfb3VsbnBx7/FjVV7u5uN3+dHc7+pvb+5lUVpk\n/HddZHbo3eTn33/w3+pkW3Zh7/1Y4+Hp5fbZ52rz+2JZ8OT6a2Xl2vF8ePf46XRl7l1m6fts\nZ2Tlbln3fdvwXvvYem366d1yYuF3V/7k7u1eX+X8ZuPmbOD36/Rd6/53bV3871pV9PVa8Pn2\n4l3t3d/xadfkZ2Zi3fRX8OXk+WXt4/Ji3Of3+Fzg8l/+anF6YVBk72VybWjy8t/g6djg3t/2\n+fTb5OV8WOdxVvNza/dgb/ZjWPvxaf5u5d3+/ORuefZs8vxv725fb3h0d2dp2t9w5tzn7G79\n8WlobXVweHF9/XJm9OdscGx33vtg9ffq3mj37OfU3N3Y8/TefltccXR1VFzz5u157G9uXWdv\nZ3P25f93b/9vaGJp93fy5utt39jw4/T1+XR98PFlaHbubGVv/N/yfe7kee/h4nxt6nNp/e7w\n7FNZ4nj0aG3gd/lvfnpk+PJubv7l6Xd9eO9ra2Vr7nVy9ebyduv6X2xkct56XW746ex78nls\n7Nnv7evr3/t07XRZZGFlbnrxeWhebHxoev1z7fV5/u/q9fvi5vbj3dv3aX1q+nZcdXdec3hs\n83xkamRrb2zyfmx3dvju/OjX63bj7ePybff+eGx3bGJzZ2vt7+Tm72xx6PFsa/Hm3/Js7/p+\n+3x4d2/v5/N+fGd17mhq+W5+8mpzbffgbmDp/XLeeHDp7nf0bXLrb3t7eev1bd7rWXH2bnZd\nXOvo5etz5urn4/Tz7vX+b19xePDvbPLc4vL4+/3s/Fp68FpddXr07nh74uxub/Pze2Ff7mlh\n83r23X7t2PHq5mnr3HdpbGd+ZWT89PlfXG9+ZW3c6mH75d7jYvXX3ulvbejf9O7rcnlvdejo\nbHbm9GdkXm/pZFxhcXf3aWr4fXft6Ovs7/ppb+rscWdj9uN2+93r8d3l7ehcT3R3XmVgefFn\nZmv8/XJvdO74/Hbt4Xjx8/nz/e7j62152uLpfGDv9n1yefPqbVpwemprZn7vc2r4cXn+X/nk\nXGHj6+j+a+Pm9vz36OB2W2r+c3X48HdrcO3c3/hw6uTz7f7/+3Ri7+ZteWxrdWRjcWp0aGjo\n8O9oavd1e2zv19zr7OTc6nvu33laanr38Wby33nx7f78+mdfc310afh+bGl6+nttafDie+je\n5nrm/mP3b2Fse2x1a3nsb+3j3+px7Of992hw4/tt6e/+8Xvz8OFqXuNvWmpqY2pgX3zl+290\n4Nnf9nPe2+rveHN4buTnXll+4eJxX2zy9mBi8vJfYWv75fl+4+LzbnHv92doYXJ4bd/q6exo\n7N9nY+p89XVk7eN4bHt7+W1t/nt9bXTr4/Zfbfhr8X1i5Xdf++/k1eV56efq5Wv93uxpcWly\n/m10WVVgXmL5ZVvqe3jd73z7a2lpYGXx7unxcOPc/fHp+Ojtfen+591vY2p48l1dcvz6b3bz\n+3J7+W5seXjr5nFg6trwePP34vT+3eHw5udqav5nXlpXYV9ffHNo8fJ08N/k6e3m3+XedV55\n+fzh/mJiffllWVxr/G5vYnjp7Nvga+/d19bu+djddV1b9OZbZu5v+Hnz6HR4amjr+2laXXd1\naGp62u5i6OPsbmXv425ZXuv2ZWl+2+t63d/feWXf22ZbduvnaVpk6OluXvvh7W937PZ56358\n93Bp+v5q5e/27WFsdfTqaW53fu9mZ3dnaWNfeW933eL07t/d4Pr0anrxX27wbPx4Y3H5ZGv2\n73deZO7m/vd++97W4n3j7H5pbG5uffZ4+fNm7uX67992ZflqcuVzZWxu3+toaGb36Ptbavvz\n82H8e3Te7Pvm+Pzb53f7d/nsZmJ16XhhY158bnJtYPPg6/196+Pf8uPh8+Xxeujv/mxmcm96\ndPD5Y2T7flZb8+XzZmF97vJ18urr8ufj+vT75uNxbeftd/NjX+nqeWxfdvNlXm507PRnfunq\n5O733ut27eltZ2VuaV5j9OLr9njw7e55X2n1eXjo6Hv64+nu6OXg6W1caeDiXWDs6WxZXe9t\nUlp7dW9nedxuWH3e72l22M/Za33W2O1g+O1v7/5r9O9w5+Nrb/ju72JbXlxhX2/9aWP63Opv\naefY9WFp5d3+Xm3w6Wtl7P1vc+vnbFhf3NlkWnPo3+pt7Nzwfmtt+WxteWBpfOfe7m1y3d3t\ncPHd4fFha+nvamNjZmZ36PdrdPLkal5wdmtcWmF4/3H37uDidmzq6nh0dOrd5ejn6+fx39vv\nb//qdl9dZH51X2599fPz7/j/7e1ubmNndHr7ZGro7eTtfO/s6X556Xhi8uJoZmdg7u1xav3l\n/e/u8+9mcunl4eh8+Xtr7G5oc/Xua2l+9fzm+vD2Yvfi7W5v5+t58v34/25sXWtyc/BsfO56\nc//z6X5i9u9u/G9f+uDr9u3j7HLn4PD37ejhdF5r7eR6X19fdvlsXm7s3N3n9Obf7ePc82p3\n9W1cV1lrXF1sXWhoYvXt7efx7O/76err6+Ti5Pv86vXs6vPr+PN+Z3H+dnBt7+/0e1xfd25l\nYXnta3bj6ev7buPc8Wpvbn1uXnH1dW3+dG92/u5zbXzr7Wtge+Pe4PL149zfdXPx5uxhXmdb\nYnbs+2Rx49vrf/be3/pqfv307W1n7utv/P92Ym1tb2laY3hyZWFe+O338Hnt4Pzr4Ojh8u/h\n3uzv3eNueO3k8F/742lQWv7qX1to7+BnX+LnbHBt9/1va3jpcGHs2en+cf3y5/hhbfDp5Pb5\n29ze7HvsdWZxa1dcX3lzYVzt6Gh1fHXye2rq7m7y4vt09eXo7/zh2NTcevv28u9uW1xlY/Z8\nXG7jeG9u/vlkfHFaYuXd8VtYbt3r/H1+5fDv9vx6+PByZWfo6/teY/PoZWr27etv/PHwe234\n6H1x8dx3auXi3PFrZfDec2Vha271f15efnP3e3Jiburr6HPs3OR/Zn7g6G5nf/9+enH8efVr\nY3Rt7+pmaW10eHLs/mtu7ubwcPra3+vn8+rrZWBnZHzw+mt+fOjveWxmefnubWtqefJ8bmVu\n7+bs+evncfp4++9sa/3za11m3+1t6Nvi6vTd6W3xfuTtZfXsc+zm/GFbZGxjXVxnbWZlevX3\n7fr1fP7qenvu7N3f5Ox65ufy+ero8+5/dnJxd29gYf7ral1z+GVj8/htY/fh6fls4ODy+PLq\n/HX462Vbb/hkX2/j93p7fu7/fOPq7uvt9v137vZneuvr9HZwf+L2a298e/Hu+3tw8XRta1t2\n4Hpvf3dyaWzm92x27PVr+97X72X75uP0ZHHj+GVaYWRq83lvdW10aHhvaGhtbmn23unn5OXj\n4NfZ7OXt5fNjdm5savz4ZFpqfmdbYPj5+mxx/XxoW2ptX3fl/WXr3uvl3Nzq3/x+8Wj992xj\naHBsbOvjcXfzfHXv8X7v+GJ5/mN8cP3h7vP0+/hzcG9xeG16fmVpdf7ifVxw4+plZfn2cHRy\nbvbu9vLy8uja3nJv6+Z7bH7n3+5ue21z4e5kYnZsbHv+7Xt96O1pa/Hm9Gtt6OH0dePd5/pr\neHNyXl5YXmpfc3h+ee3qdX/16t56eN/d6Hvs6OPm6urq6nJ8/31tberkcWNbcfJcWFrp5Xxr\ndObweHxufXF2eHR1fvXy93poe/R9e/L49+Xf4O3q7P31+G9oZ2hvbHF27+N5+P54alxeYnds\ndPL26d7V1ujs5eDr+3NjcXdvaWNr9XZcWWFjdW5aYWNw49/ueufb29vk5ebr6ffyb2/s6elv\nZnr+amVbXGl+dGj5e3R1cfb+aXXt4+917+Ls+Xl48uHqbWtzb/5yZV5v7PJwd+v2fvhwYnr5\n5u1vbPDsev/97+brfPDb3Obz/+3w6O5mXl9eaWRfX2nvfG5ycuTg7Wpp7e9xYWNvdmRi8et8\ndePa8Wvr2+f/feLifm5873N5eXj58ep+ZmJlfPN6aWt2//72b2v07n5wffP5/mx98PDh9+7j\n9Pfz+WNgYF5fYWFxfGJrd+bh59/q8enj5+vx6N/d3fDs6/1rfG5hZm1vZmNmX2h/bnV8cnNr\n9ex28+zw+Pjx6+f3c+ztfvD1+mhlaWJo/X1xeu3s6ubn6O1uanZxYW5rZG9xbHH57Pz57u74\ndfH7fnT23dzuc/Ln9vrn+Xv+ePt/ffPl7nlmefpqamJeYGJwd2Jfb/h6e3vu5vJ29+fm5uXt\n9PH46+10Z3fo/Wl3cGdzcGtpfujq8nvz5O5wd3pye/pvaHPs4+Hk8Ozi6+vq/Xp4b29lY2lf\nXGV8/Xp4dXZ3ffr37PDi3urf4fZv9/dxfvJ2YGFyffT9b23+7Hd1cXT+cGVi8uHf5u309OXk\n9Pz8cvx2YWh1+HBuaGh+6uL9e3H273FtaXfv9nVvfH17dmxtcP7r7Hrw7/Z27+Lu7eXxdPv1\nfv90aHLt9Hx19Htxc2RhZm54b37s+e7l6/p6b3j38Xr/eXB2f3p88/H27+l6amxw/ndraWx7\n/m53+/Dl4fxx9tzc8PH29vz+cHR95+V5/Wx0emdiXmRkbv9paffp9nX67uvv9HH/fnp+/PHv\n7O3q3eHk4OHp+/v7dGFXYG5qYmNs+u3n7Ph8/e55aGv38nh4/Orj6vHvfm/z8f9tZ21oZmVm\neOvp8eXs9+jo7fp/bnPz8vDv/2lnbfH78upvYm348/Dn4+b39enp4ftv+/P1+G1iX19kYl1b\nWmp+/XXz7nX6+3B46Ofp3+Pj2dzf3Nva4N3sd3t5bVxfX15gXFxocGdbam5gcfDr+/Pt8+n+\nc+/w7vh16+vs7Hl+d2hka/b9/+vue3rp7e3n/vvm5Prz6Xl1c2pjZPfx+PV6//T5eXh+bXx9\nYmvu+2VjaX3w+PPy7PHx/Gx46N/reX3m4/j7emhkafD3Z2R7d2FmamloZvn5/e/07Onv+ujg\n63397e777+rz6fNqfvpybmFgZWlwamlncvDy9Pv86fp/7Pl96uPp+/j0fGllfPf+a2FocvL6\nbv3o4+L2+Pv293RmY2t/e3xxbXJqaHn7ee/p7/L26OH3/u/28Ob/a3vx5OdybPz7aFxhb3Rv\ncWpyc3ju6vV1b3bvdmrs3+t98fN2evNxYmj54Xtt5dzh6eLa5njv7m5lZmxmZGppb2hpcHRy\nce/9cnF87eXg4uvv5Onq8Obt8urscml+b25vbHZpX2r4f19tcmZwd3589+3y7ezl3+b0cPf5\nbHJ+a2Fv5ur0++rocGj95vJtbGtfYnJ2dnBzdfz/bmzu5/5pa/Dh3t/q7d7f531vaW53cmhk\nav32bmd09Oj2+Pj1fn7q+XJscOj0XWzh723//H1sdvlvaWdqbHR2eW9pdevqd3z6b3jn6v7+\n5N3e5Xvv5ettXmn98XNt/nl9fXHr5/tv/HdfaX5pXFhu5e1uZnLq5HBtbf7vbmlw5u1+4OZ6\n/fnr7H565eHyaGRvbWl5cmhx+Ht/6n7w5+j9e+/q4t/n6vVnZ25pavJ3XFhc9PdjYW1kavf0\n+/j36+/48+zh//Pxdm107PN7/+bn/u3f5+bu6+v4/HpoY15cY2FlaWh98e58/er2bW91aGjw\n737v8erq+vDe2d/k6u3+c39oYGJtdWtlZX/8dHb89/j26vD28Xh67e7u4+lvbXlwdnZobGpu\n7ev4/u7lfGFo8+9nbHv/bm3x8ftxc/Lv7OHs7dxrXM7fV2L+5+VcaNbd9f506OtXWO7dbU5Y\n7e5/cHXs5F1a7ut+ZWbn4m928d7e7e3c5H/s+GptfPvq6+r1cX3u/3NrYmxtXF5vZmVxdnpz\n8fN3ZnHn3N94+unp5+Hqfnzq6Onsfvf37Hdq7/xsXWF0aF9hbXJsfvv4+O/o5evo3ujq4+Dq\n9fj1eF9fbW9jXmB0ZGn/ZmZkaHxzbGxz7OPh3N/j5t7a5PB37uDvbn7rfnjzb21w7t3oaF1o\naWloXF1mbm929/nv+nb9/Xt3cnxxdfPs83Tv7ndx+nzv9Xr17+n/7+bt83X03uh8bm7z+Xdn\nbH70cn/s8Xh3cGVhZ292/v13dv5oc+bp83Z1bv75eWt0bF5t7uv79eLn9Pf6fXjx/XV7bWr6\n5d/m7/nv4+94/O7z/XlpYWZ48vB5cWj/7G9pcmhy/3Ntanjx7fds+uHv929t//Pm6+/o53x7\n+fz6e2Vgam9m+ub4bvPl7/H/8+rq+Pnl3+n3fGdt9fV9d/rzdmNdXGVoXmNub3zu+/3o4uLn\n6+Tm9Hh6+Ovs7fR9dXnw9nplZv52ZGL54/h64t97f+jsdXrt6+zs+O/reHp0b2tpaGBfXF9m\nX2Fw/fb26uns6N7b5erh4u55d+rs9X196enp+PZ7a2pzb1lXbX1oXm95+vdu8Pt7+PfycWl8\neejh4n358+1iZt5l43No0ubv4HHd3v3p5+Rw8e5iZ3BrdFxWdOdyW17+7XD6+HFpeXr8Z2jp\nfnFtdefqdu7ycXvu7W5lbvX1dm95b/v68Obs6eXe6O326+vx//Pve3369/V9ce3+/uv3fnZp\nZmZgXlxkY21va2ttf3hsYmZ97/jt5uHf497c5Pf5/Hx3bHDze2nx4vfn4d/v9vL++W5xe2tq\nePj7dnr29vHn92hpbv5tb2xs/XhjY21293ZqZnN46fJv93d6+Hn53+Xt7ejw9Onv6ODl+Ofq\n6uTh7XV/9nZfZmlmYmv3c2BeZHVxYnVvanR++3hubXrt7ezi297o4N7h83X88u51d/54c/Tj\n9Gl26e1ra25rbnp3/XZqbH1lXF93cWF46vh95+Pe63/56+jx7ePta+zmf2Rre3ZtYv7+dnB0\nevH69/tsYmlzfP9lafPn5+7j5e7v8/977uXpe2nv5Ox3a2xkZ25oYmru5/9qavb3emxt7397\n9Oj2a235bm787uvt8u7p9//88vt97fT66/F7aHF4b25nbXV2anz6ffF5+fv05vPq6//p5eHr\n+Xx2cmdxaV9iZl1dYmVkZm1tc+7d3t3n69zf5d/i7+7k6n76/XloaWdr6fBvYGNlZHdgXG5s\nb3x3dvrj3uvm5+rm9/10b3lvcm92fnl1eHn683t/+Hh2+/Hv/O36cHV2+fR0ffD+aGZ0eO3r\n7u/r8Xbx9GxvdHVtZGt4d/j2fX12b3j76vH1f2/78+3x+Pj7b2lvc29sc/DueX746ff5fnF1\nfuvt9nZ58Oz3d+/zdezqeu3z7fj6+/bra15pcWhrZF5caX17YGT86Or87u7d2uzu4eHe5O/t\ndHF0cmVvenZ2cHTw5/b3fXV7+mlsf29uaG5zf+rqdGxsfO7xe3987+v0+3Xv4eH9c+7l7H78\ncnJ48v139/ryemz26m1lcGllb3ZpbG969/9rYm7t7/fq6uvj3ujr7ODfcG5++2xp/m5udv5w\nan54bn98bWzz431jY3H6+fh88Obu5uno5ez3ZGd09vJwdnl8fXv+6vNybG1ra2loXV9tbm92\n9O/t5u7r4+7v8vx/d+3p6vPy7vjt5+rvcfrvcmxpc/z5bXD5+XVebHBmbXJwaWNv+P5y/PTv\n5vj19erm3d/v/Xvx6ud3bW9qa3r+d2xvdGlmY216e/rv+/v38unzeefj6uju9PT+9urq/G/2\nfmNganFoZmtrefx1d3Z7+e7ufvLf6f91dP3w73z6b2z49Hl/937ycXPq5vP/enFmee56b279\nfHhscX3v7/P4+N7f4vxy7vP3eGdjZ2xvZl9faftsZvnn6ezs+2zt5/5yfn1x+/Hp7evn7O71\ncnB7cn17d3h0aWlueHR5/PHu9/tsc/xzcn56bHz9b/35dW92dm9+9f1wfuzz8u7o6PPu8vv0\n7vtpbnD672psfnny5+12/Pd8fmZv//J4aXX4ffPx/fRucf5rcW5+4+Ln7ef0evN7dHZpZW11\ne/P0+HR18/N1bGtoeP50bHf6/nFxa2/97/99evz88e7u5X/68ejn6N7j+nf69u14bXJ4el9h\naGZyfnb7evv0+/p8b2xnZGlra379fvDt6+fo6ejh3+j5enB/dmxy+n5qbWVt8fx+bmZr+vD9\ncWZqeu9wa2567uz7++vf6Whq7t/l5+bu/Xb0//9ranViXGX+eGReZ/Dp7vDk8erh53xqe/ht\nbf7w8vz9bW51/vP1dmv9eW1kcPPp/P19ffjp4uX0ee/r7+Xsfv3y73h5/WxibPZ6b2pmYXH4\n6/htfX52Z3Dx53t5fHFv+ejp7e3s7efn3d7p8HBqfPrr+mVlaG5taF5hbmVfZXl7fPzv8vfo\n3un1/O7u7/L37vb+7u756OX5cf12dvVycHN7a3bv/Wdpc3Bq8u13aGR3+/b8ffTrfvn68/Pp\n4/Lm6eXlfGdtevfo5nV0/3r+YmFjZ3xuZWl87Pp3f/rn6PLv6e3w8HJwfOPj+nx5bXd7dXFs\neOrn7vjv6vh++/f+/21ufXD87vZoY3j/d3X+8HxsaXXr73p7fPTs6N/u+Ojj7P305+13+/do\nYXvvd3xpaPt9amtsZGFpc3Ztam1/++7h4+Pq6ep6d/72+Pz07Xt+83t5cnP15v5w9/T9b2dq\nbWZpfvZ7+O3zal9qc3t+eHr5+PP2+P756fxsZG/ufnb+7/X+7eTj7/57cG9ye/10bv7v//bv\n+XxubnL08/zu6f5t9ux/am/++v1xb/l4bWxqXmbx+Gpx7PNzeHX99vd+9+/y9Ozq/vTxc3T6\n7Ojf3fVufXb78/h2evV4aWVueXl7amx1c3V6bGr05PDt6+vm6PVrYWh6bmxzaffp8P55d291\n/e/3e3l69Pz77OxxbO3n9nlwfuvvfHj26t/e53v59XtsaG1kZ2VkaGltaW//efvv8nV67+3k\n6n747PHo5PP59O7u/ff3fVxfenRvbG158nNvd376b3Zqbvfn4uz0fe/tfHj89Ofj7/7ycPz4\nX19j9O13YWDr4v95aXDs63dfc3vm3u9mbPd17ep3aHj9be36fvLp5N7dfvN5ePH772poZmlt\nbmtle/Lmal1Y/tnzdVlf89zlXF9z3M7eZf3a4OBnZ3bd2l9fWmb+7Whaav/l/2Bk4eTf63ve\n2dTqanD53XlaW2JsfP1rcmRhaG9zaO3g9+vv3t/n1trfa2BrbN53bW5j9f1jWlxy9+jd/3L6\n8OlvcWVq63ne2N3mXWj13txzXWT31dH5YFTgzulMOT5jxMdnSk7dzd1NSGfLw9pbV+XJz/tU\nc8/U809V69DPe11f7NvyW01Yc+NqUVNa395oW1/m3uP97tff7ebxffr68drP5F1u7eTuZPl9\n7Gk8MDvgtrpkPkTJxeBJPfC9ts1LSFbGvdpWS2DbdU5LesPL0V5kw9LgUVLtRjZrtLLNODdJ\nu8Y9NjP+7j1F3rOuyEw698zh5U7EuLvGSmTSwMZMTU7ax8pUHx86r6K9NSljrbluKi7Cqqtf\nNjvSrbtmQkrQyvc3Oj5RrrfLST5MWcdK2re6tMfl0ry/RT88OkchG0Oyn7c6LD2o4T4wL7Cr\nrFc207+t8TE/V7nbRkVLutjWzsm3x8PXxbrEyFlZcGM/LCUWKKusqi4yOLKuKD45t6PDSyvI\ntMXBNNixwGUw4sO2tTrpx7mwxc5gvctLbD9QzVwtFg8/nZq9ISzQnXwhKFCdo9MsM7i72kdD\nsrHfOzPAuLLQRL/BtMrdwcnZMknAxkcpJhgmq7PpOE23pNseK8WqrV47aLO9Qjtcta5KMU+0\nsdZm+6us3OvLQeOx5ezCvkY0Hg8YurrFzs6+qMkmPEHmx830v6zPTN/bsrQ/LUq9vcPFvKiv\nZ+++vtVLMD/Kt9UuJy0mGyU4uq7FUcjPSU7b1ci528+9v/JV1MC3v8vUfFvSuK639EZMZeZO\nQD8oKS0kLjpA6LboT+1wzt/uTMTD0Vnjvba6y87Ow8viy7y8vsDCvLfCxMTcRDc1YFwsJSks\nMDAnPrvB2/7nvrJzS2S/xWM/4Lm8zO3CvsxX78e4ury4s7W3v8q+eDw9TC4pKiAlLjBS3k/O\nvtPuY2nQyGBcys7TycG6wV/8zu3T0cWurbSysq+20evQSzYuLDQrICIpMzIwX727yPfPu8Tq\nUNO/xtPGvr3J08zB41loxLW0sa+uuMLGzXlZPiwpKCYpKykzPz5M/M+7u8rFwdjsZk/eyNLF\nxNC/w9PLy9a+uriwtLq2ucvmc0o4Ni0qLCgnLzU3QT9M0d3dvre2srvIwc5faGNn2ebv6PTd\nzs7HxsrGx8jAv8XN0cnI4VJCOjYwLjAxMDU3PEVT887Fwb2+wcXU4OL38u/w7dnJxMLCv7y7\nvb27vsPN1e9aT0pCNy8uLS4vMDc+Q0xq7s/Av8DCwsfJ1Oji4Ojb2trKwLy5uLm6ury/yNHp\nW05AOzczMC8uLS40Oj9LXuPNyMjGv7/Iy8zU1NPX0s/Py7+9vr26uru9wsjM2mtSRDszMC8v\nLzAwMjk+RlDzzsjFxsTHzc3Jyc3T09LPy8zHwL28u7q6v8bK0+VuUkA7ODU0MC8xNjs/Qkpb\n6dvRzc7Nzs7O0NbOztLOzMrDv7+9u7q7vcHJ0OBiRzw5NTQzMzQ3Oz9GTVZ029fW1M/P0M/U\n3NrV29nPzMfAwL++vLy/yMrL3HRXRT47NzY1NDc7P0hPV3Td2trW2dbZ6ebf7Oze2dHMx8TC\nwb26u77Bxs7c/1ZJQz05OTc3Oj5ARU1d8eDl2tHc5u/u7fx06+vs0cnFwr++vb2/xMrP3/Va\nSkM+PDs5ODs/Q0lUYvrYz8/Mzc7R2uTf29zg7N/V08nFxMPFxsjN2+5cSD88Ojk6Ozw+RU5b\nZ+nd2dPPzM3Q1dbU2NrT0NXSzsfCwcXGxMjM2PFlTkI8ODc3OTg5PT9MXXjf0MzFwcXHyczQ\nz9jo3tfPzczGwcC/w8vR2u1dST07ODM0NTU4PkZPXu3XzcjEw8XEys7MyszPzs/OysbCw8LB\nxsvO3XZbSTw3NDEzMjI1OD1JVnzbz83HwMDDx8nKycnGx8fCvb29vL6/wsjSdldMPjgzMDAy\nMjM2O0VTW2Xf0c3Hx8jIx8bJy8rHxsK+vr68u77DyM3fcE9BOTMyLy8vMjg8QUpUauDaz83J\nwsjJzGldtrq+sbq5t7OvvMTF5VxHPTksKCssKi84OEVU28TLzru8/8PIXdLZ18TDvLO7r6qy\nsa+vyGPsPikrJyAkJCksLUD8aMWwwr+uv9XB1/V1ZsvZzq+vsaWkq6qoul1xOSgnIB4dHiUm\nKENcT7uwwK+qv7S238ft9MTav7K7raapqKqsv/V+MCgnHh4eHSIkK0E+cbTBvqm/uq3awb34\nwMG/srivpqmpqau85c45LCwgHx8eJCQpPDlIwc/MrbzUr8HSvMnHvbi3tK2pp6eqq7Tow0kr\nMSMeIR4hJSQzMznK1360udmyttO7vcm+uLS0raqpqKurscXCWzE1Jh8jHyEkJS4yNuTd6L27\nvsC4vtq6vti1tbysq6mnramuzL7XMDgtHyUhHyMkLC8xXuruv8a/v76118O3+rqvu6ytraOs\nqqXOwbguNzUeJiIeJiAsMyxmZkXAx9K6yr6/0bnJv6y6rKiuoayrpMu/vS8+Mh4pIR8oISw0\nLGpbSb3h5rzvxM1pu9TDrruqqayfqaejvrm9Mz8vHykfHyghLTIu7F9XuePPt17L0lW/38qv\nvqupq52pqKDFubovRDAeJx8fKB8uNCzuUkm65M2/asB65rlmu6+/qKmqnquloM+3uS1GLh4p\nHyEoITMzLtZMTr1iz89UxE31uU66r76lqqmdqqSjzq/ALEoqHigeIScgMjEz0kxquW/DxU6/\nUly5T8Cvv6Wppp2roaHNsL8rPiwdJB8gJSAzMDLPTmC7d9DX+Mo/2r5Nt7S+pKmmnamfo+Sr\nxCdNKR0nHiMnIjoyNsBnZbjn8tNqbEN6ykm9trqmp6SeqZ6n6qnmJlYlHSgeJSckPTQ6uWZh\ns9nl5GXoPevBTb+1uaino6Cqn6Rcs70hNi8cIiIkJic9PjrGvVTKuW5FyOM17b9kwrOtqaie\nn6ygolrTvCYmLB8eHiYqIzZ8SF+xv02/tzxJvz49ysS/v6yhqqGbqaemy8VDKjUeHiodIi8u\nMkvY6MLB6s3WTk1bQ03T1Li3r6OloaCpp63eW1QuKiciJiYoLTZCQ/zS08PUWu3jXFFOacbB\nxL+5tbm4srO2t7u7vdpmbEE7NzU3NDI0Ozo8QUNKRUFOXlda8trLxsG6t7ezrqyvsrCyusPZ\nVUE4NDUxLS0vMzM3PkFJSU5vYVv+/unTy725uLKtqamsrK2xt7/kTj01My4qKSssLzM0OkBE\nSld0c3rg6OrXwbq+uLCuq6qqq66wtr7VTTw3MiwrLCwsLjE1OD1IYFxm5djO3+rKwcC/ubSx\nraqqra+vtb3aTD86MC0rKystLzM5OUZdY2Fdc+RxX/jaz8W9uLGvrKiqra+vsrzZXEk6MC4t\nKikrLi8xN0JLV2lu2+X03N7Yyb+4tbOuq6qqrK+xt8XnUD01MC4sKistLi80Oj9JUGjj5+LS\nzczNyL24t7Wwrqysrq+yuL/ZVD40MS4qKiwtMTQ4PUJNY3BnbnrZ0OLcxcC8trSysKyqrbCz\nuLzLW0A5My0pKiorLC81OTxKYHFx8tXLy9LKw7+6tbGwr6ysrrK1trzQUUA4Mi4sKyorLTE0\nNzxLW2J449bNzM7LycG6tbS1sa2srrS1uL7PWEY7NC4tLCorLzI1Oj9NXfnq59XMyM3PzMi8\nubi1sq2srrGzub7MWkQ2Ly4pJycrMC86Q0z5/u9fcNZm3N3Vubexr6ulo5+lrrK03zIqJCch\nGx8pOjM53r+wx860vUsuSEgyPz/Crbetn5yfnJyotbdKJyUYGiAXHSxCQc+yt6W12rLOLyU3\nMSpHR66jr6KZmp+cna7CwTMpGxIiHhYhP3DmwLqnrU7kuzciJTEyLUa7oaepmpqdoJydr13b\nTR4YGSMdGCp+w03DqK/eQvDVKx4qPjAwx6ujqKSZnaWhnKTEf8I/HRsbJR0ZNs/jULesuW06\n4+AnIC88Nj68qaOpopyipqSiqLRfw04dHx4fIR0u685Lu63QfExIUS4jKj07PLWspqGjn6Gn\nqaOrv7ncPyghHx4jHi9JTMu6t83VVUBFNSwpKUBf6rCjoaWjpaSqsamrsch5UScnHh0lIyw/\n0+DAvtjqRzc/NicoM0tRuqiko6akp6uwraeusK7DRC8pIhwdIy0uPc7CzeLNZ0JIMi0wKFDI\nwq2lpaeoraqrtq6orqqqSy83JRkdHyIsMUDTz1fMu1JKVC8tOEhYwbKppKytqayyr6yrqKin\nqUcmLiIXGRwhJSk50dBvuLjPy1ExTuA5XLa2rquurKy1rKqsqaWpsK22MB4oIRcXHCIiJDBv\n1XnDsLjOz73BztXWtbG+sq2xsKypqqyyr7HLSktVLyEmKyEcHigrJixG49XNtq6zt7m3trm7\nuLC3vr3N2sO4xnHpzs9mT9fbRURIR0E4ODoxKzE2ODtMZtzkz8nAvry7u7rCz7+uvdbHxsXG\n0c9qREtGQTxCQTo3PUlSVVFq2tLMys7Lzmpi7G5fbNfj9MC7xN7cy8pqQ09YPjo5TOtVQE9g\n3s9X4767yPXZvsdoX8/OeHTXyMNlRrzHWkk+YU03QURCUFRTRm3c+ldOaPjazevoxb6/2vjC\nucrSzL/OcFnYzFZDPk5RPj5BTktETlnf6f7e4+PbzMjSzsvJ6fHQ3nJi2s3g5tvT8VJk/k9N\nY0o9RmxcQUJfcVhS6c3c6M/Bw8XBxdzc1dfnYVvWz1dKXO5cREl5401FZehpXO3Mz2pk19pf\nVtnKfUrXv9NPR9bH011Rb3pwTkRHVFBj2d5f6M/b+u3R4fXu09bu9+HX6vDl3t9+Zvbe6V1T\nWl9eUz08ZNVZQlrLzlZQ28vpW9a9vth+0sTOVln75P9KW9noWVNfUkdiz9xTT+HwTExVZFVg\n29DfV+jFyuJd2b7MZN2/xfpPWcfPSU3V6DcyU8xLM0i8vUo6xLDUSlrAwF08Td3lVUNRa+DV\n3t3O277LQ/SusU4zTbrRLy9vyk8977/FYWPFuNVJX9JrNzvXxD40SbbUPs2vr08/yrhdOkbI\n3UFCeNRHOEi5t+hmu7TqNjZa8Ptlxr/F0uxg7vRTTk7fd14/RtnvSWq6sEUqRrzGOT/It105\n1bK/R0i+rb1PTc3NPDVgw1MuOs/FTj1cy77f1MfIWk1i0+tObN7QYdva8Wtd3OB6SmL0+1xg\n1szP38bAymNw29TaZ91tUEA1ODUvKy9BSk7mv7u/w7q0tcG7s767uL7GwcOxs7+4rUYcJTAd\nFxgjT9I9faWhtdNay7NfNtettcbFvKutvrqtrbCzwL+yPhEWKhsUFyTAobXHn5qtWS8x0Eko\nNLOusbC2p6KwvrCutcNp7b27JA4YLh4ZHzWnmrLWqaTGLyIn/tsvTqiko6e4r6Sx6cC9yb7Z\nabCpPhIRIyQdGR+5maPVvaasVCMgNGnMbb2opJ6nxcK3wczFacaps7aprkQTDRkfGxYfsZea\ns8evsE0eGSvTsrm4qJyaps9cyrjGSVOxp6qutK2uIwsOGBoZGi+gkpu6x7vSMxwaNLGvr6un\nm5y8P0fr2NH6zKihqq2sr7JMDwkRGRseKbyWkKTf19VDJhodX6u1q6GhnaT6OFHezLnDuaWl\nr7Gssb8kCQkTGR8oQaeSkqfLYD84JhwgTK+nnqKmoarJQkZS0bTEw6+qqautus8mCwkQGCIt\nRa2VkJ2yVS8zKRwdNbWjnJ6in6S3RzY4Ts1iza2op6apsLw1DgcNFB4tOsWbj5WkwTIuLiId\nIjy1m5ien6Gpuz8pKT5T47SwrKChrLTOHQoKEBkqMTmrko+ZqNU4MSQdHiU7sJyZmZqkt+8w\nJSktNsWsq6ajp6uyShgMDhQeNDlcqZmWm6npOTMrKCgsPbOdmpujvfFLNSwtNE+8t7eppq22\nxkcgFRYdLkNCTc2vqqyz3D86QVlVVdSwpaWrvVVCOjc4OD9Yx7evqquvveRWRjInJjBMck4y\nLT3axtlPRU9r3Ma4srS2t8LuTD48PUZn3tDFs66yust1UU9W3tpeT2L+TjcrJyguOEJGS326\nra2vsrvS2c/qTz9GYs++vLzBzNHQ4l5QS0tqxbi950xIUT8tJicuO1VlWt66rq650fH+XFBe\nfPbXyMC7vcrhXlVdcV9PXM+2ra/BZ0hCQD0wJycvRn32b9C+u7/cTj5AWenYyL+7u7q6vt5J\nQkZc7+bfz762sLXSTEdKRjoxLS45WthuT1vj2fNOS1T61szEw8O/vcPU2OBsXFTtyc3a0sXC\nwcTiS0BDST80MDhP4epTS05k4uRrYXfPydTbyMTL1eT8c2118/DSyMLFycO/vctbRUFDPz05\nMzhU211AQVvMy+n13t7d2OHhy8zR3ejbz8vmfNbExcfKxb68xF06Mjk9Ny8tOGbP5VZb1cPD\n0W1p2dFuVO/Dxd9i5cTEz9PIvb6+uLm6us45JyEnLisnLVW2rrG7wb7E2Uk7QVZmRkfPs7PG\nzcS+v9Xlv7W1sq6usuIrGxcaHyIlM76inaGqr7ncOionLThKd9GqnqWzwcfeSjhDuq6tqaeq\nvDMaEBIZHSMyu52XnKatt10rHx4qN0TJr6CZnKzD1G4+MTbTq6WlpKXDJhUPEhgcIUKom5id\nqrnQOyEcITA/VMCflpqmsLfJPiwv36+qpKSlrzcYDhAZHB4xrpiVn7G5wzceGB41Vmy6o5mY\no77LxWYzN86rpKOlo64yFw0PFxseL62YlZyty2oyHRcdO8a9rqGamqv6WWlAO2m6qaKioaGw\nMBkODRQcHi+rlpKarc1PJxcVHj67saebmZ6uWzg8OTjXq6CenZ+krS4UDQ0RFx01ppSSmaXD\nNh8VEx1IuK2hmJWcuDo9Pi8v6KacnZ+cnbUkEw0MERceQqGUkZmq4C8bERMfZa2km5SWoMA5\nMC4sN72knZ2dnJ67JRMMCxEYHkmfk5CYqmwrGBETHt+jnpmTmKfPLSQsMDm1n5ycnJyguiUT\nDAsPGiVKoJKPlqhVKBgPDxzqpJ2YlJik1iokKS9EsqGcmpuepLYuFg0LDxkhO6aTj5anTiYZ\nEA8bXKKbmZaYoMgnISw1QLuhmpmfoJ+tMBcNCg0XHjGqlY+To08oGxEPGVCfmJeUl6duKR4l\nNFWxnZqcnZ+mtTwbDwwNFiAvupmPkp/fKRwTEBc4pJiWl5umwSwdIjZut6Kcm52nqavYJxYN\nDRQeJ0+fko+ZuC4fGBASJK6Ylpian7M2Hh4w9LqpnZmcpaytuT8cDwwPGiIvt5ePlahKJRsT\nERtxnZaXmp6ndSMdK267rqGamqKvrrRSJBQNDhYfK86dkZGd2CkeFRAXL6aXlpmdpcUsHiI/\nva6jnJuhrbS2xzQaDw0UHyQxrJWPl7I0JRwTEx+6mpeanKGyPiIfNMyypp2bnqiusL4+HxIN\nDxkfK8mbkJKiWiseFREaSqCampqco8wnHy1SyrCgm5ykrrS65CUSDQ8ZHiVdnZCRn8k0JBcR\nFjGnm5ybmZuxLSAtQ0/ZqJuaoainrN8iEAwNFh4lTJ+Pj53BOSYYDxMqqZ2em5aYrC4jLTw/\n86mamZ6hpK9iHQ0KDxkeJFicj5Ggy0IqGA8SK6yjopqTlqg5KzY6MkesnJqeoKGnVRgMCxEZ\nHCDPmI+VpL3rLRgPFS+6sqeZkZWnSzxDMSo+r56cnZ2dpj8WCwsSGBkfyJmRmaa0vTcaERk1\nWGWymo+Vp7/D/DQoO6+goZ+bnag3FQwNExcYIMablp2oqq5PHxkgMjA02J+Umqasrb48LD60\nqaukn6CrPxsPDxcZGh9Lp5yjrq2rvDojLEUxKze6n5+oqqaqwE1OuKyzsKqosk8jFxUaHR0e\nLM+trri1ra28UUvOYDQtMtOzuryvp6aturOoqa60w9dfNyIYGB4lJSMqScXG2861q6uztq+x\nyzwuOmVfSe+zp6iurqmnsNBOSUc8LywsLjUxKykpLC8wNETKtq+qpaSqt8n7VEtDTdfAt7Oy\nsbnPUT89NTA1UsnAw8PBzFk6Ly0vNDU5SNrAxtTR3FtCPEZ1zbyzrKmrssHWaUY6N0F+18u+\nuL3H1V9DNzAuMTk+SlZm7G1OPjtCTFffv7KtrrG3ucHkU0hRX19d4cXAv8PG0XZNQT9CREdJ\nUWBaQjg2OTk4PVnMwL6+vby/0mJeeH1p+NTBuru9vLzA0XRka2176ujq91Q+ODc5OTk9Rk1P\nXH/j3n9dXWj19+Xc0sC9vr6+v8DByNLV0c/Kzc/aYUxIQj0+Q0RBQj9BSU1HQkRNW2Tr2MzG\nxcnMzc3Pz83MysTBwsPCxNV8Z2NfYP7l7WpTS0lAOjc2ODo/Rktk19LP0NDS3OTa2NHOzcfB\nv8bN0Nzj+WJp5tTQ193X2G1WT0pCP0BBR1dhWVRXV09TVlhgbOre08zLzMvU3d7l3tXO093a\nzMnN2N7p5dve+/zuc1hLTEZCPz0+QEJITl3q4OPZ0tnU09zb09DT0s/U397a2unc3NrQz8rG\nyMrP5WlRS0U/Pj49Pj9BRktSVVphb+nf29fQz9DPys7Xzs/Xz8vLycjJy8rLz9vY6l9eU0xH\nR0hBPj0/QEVISE1XbH11bN/R2tPQ2NLNzMzLx8XKzM3OzczOzc3V5OfyZVRKSkI+Pj09QEJE\nS0xYbVxadO3X2NjJyMjGyczNzNHb3NTLzM3HydDQ2dxqT09GPz8/Pz9BQEVHR01RXG951M/N\nzM3I1NnP29rPyM3JvsO+vL+9x8nWcFdLRDU2Mi4yMDI4PkVH9NPNwL24vr++xsLK083M0MW4\nwr61u7rAxmdJQDYsJyooKSgqMjxE/8G6tK6srq2xtrrG1+Tb5OTf1cnDu72+vMRpSD01KyUo\nJyQlKy42QVjBubOrq6yqq6+vub/Ay8zOzsrBx8C8z8nvOzw3KSMnISAlJysvOkvKvrSqqaqp\nqK2usLi/ysjM0tXDwsS7v8jJUDk9MCImJR4iJiQqNTdfx7+vqquno6qrq7C5v8fGzOXBvtG+\nus7Kzzw/OygnKiEhJiEmLjA9dOq7r66ppquqqq+1vL3Ezs7Kyca8t77Hu80+ST4qJykgICIi\nKCwtPGlltq6xqKWqqqmwsLrAxOHezMnOvry9w8DIRk5GLScpIh8jIiYpKzl8XL2tr6mjp6qn\nrq+0wcLO3trG1869vsjEv0VGRTAoKiUfJCIlJys0UU/MrbOupKWrpqqusbq7wM3VyMzSv73C\nzcblPE46KSYoHx4iIScpLkL+XrSqr6ahp6ikrq+0xsbX79jX78a+xbu/ydxBQTgmJCYfHyAh\nJiwwR9LQraaqo6Cop6WxsrvOz+hd7+Vrw8XLucjIzD4/OiQlKB0eIiAlLi9NxcurpKmjnqWl\npbC0vM/hZFH+WFjLx8u9tsbdTEQ+JyMmHxwfIiMrMkvWw6+kp6Seo6ikq7u4wl5bXEpLUuzF\ny8u2uNVmTkIvJCYjHR4jJCgvPt3Gtammpp+gqqartr3F6ExKWHZKZ8jGz763vMRXSUkuIycm\nHh8kJikyRdG/tKinqqOhqaqqs8DG3VFGS1NCU8/15b/BxbzDPjtNLiQoKCEkKCwxOmC9wLqo\nq6ynpautrbTD2dp0RUdjUVj+zezez87X1OcwOlkpJy4pKS4rOFY937nMvqqvsKqtr6+4vbRS\nfsBN7kXS3D3aRcdXP788y0Y/Ok/8KEdHMTs6PXI5Ru1pcdO2xrS2uK28vbi83MrEXNFQWdZQ\nTN9K/VdZ22LTRlhPSUM8QTxIPT0/ST5MX93V3LTIubW7vb67xdPK2r9HVeRI7zHzY0PuR7Zd\n41vNwz5K4Vo/PDnMOztST8E81M3K1my1xW3BarzGOLN66s1KuV9LyUy9P0C7OL4+Oq04Rb8/\nzUhS53NlPM3DMclIX9I+1lPHUOzAzU+5bc2/QLnOR8f6Wsc/8M/eTkS9TW/eP7lpPbk5x+dM\n4UPEOt1POcQ8UtJSZlzbzstq2LtOyPzOzl9Ox8c5xHtizEbOuFBGwsfKOua8S+80yHk6QUS/\nPD5p3t49U77b/FDIsj7NzVm0NcnN3U9vv27byT6y2T22Pbs3zF40tSfHYjPCNNZKbco2tVFi\nvEy/4VTLWr0/ys5awEzK+sRp171MxFrY5z3KP+g/ZO1KS/JsVV5Dx1Z0Pbg7zO1AuEG9O7ft\nRrk/xb09vGTA+2e7ObNDUrk23mo+zElB2ETMQ2Z70WZc79NbXNA9tD1Dujy2W0a1Z9HU4cX1\ny0XM2UTFUEvRR/ZOZsU0w149xUg8tz5dxT+8RcreP7lWTrY/xfFdvju2OsvDOLRC6L43sjS8\naTm2MM7fPL5eS8JOyEzS7mx8TMxI2EV9xDnG7EO1Pm3CXNVH2s1FzWZNuD1kzWz9Z8RNy/BO\n0c9F3O5462HIP8xa4dY7yU9l1z3G8EXMzkfd702+UTvMzUtJ1NtYxkPOu0jzxcjwZuvR01RB\n3b1BRe7Q2kdJ4sppP+PETOtPS7hEQ8r0zkhS1ch0W8tiw99ExdL3e0PGy0Z2Tb7ZPOpu4WNW\nVs9dZEbH3z3Nc2pX1eFv1+tMycg92N/tb1n/xutFwGnhbE7G80VaecheSuDJZknt185ISubX\n8kxL0MxeU83LZd7c+27fZ2HtXmvr7GNS6efVTlrLz1/85kbu7mlUXWff51bY2ezZ2Wxb1nFX\n4/5S+d5lZnXx/XPc91tt1ulf7HB+6mjp4N/0ZNRiY2526U9f5OFsT3zN1F/w7eLabk7zbk14\n5mZaYOTj4N9559b5b9nobl9o721e5fHk8Wl65nBr907hdUz35Oxvb9zkdtpiXNtwUV9t7Hdf\n6s/8Zs/R3eje0tp/T1lZWVtX+WVl6nxsffZ97npTeGZjaFrqb1/94t7f49TafeLZ6fN4497u\n7d3kbu9/3HhRet1pU1df50tZ6mhxSG/bfWJf3d9dZuNiZnfh3ePj6dLd193z19XldO3ZXVPT\n+WZ/8PhY/HtOVWj3X0xWWF5VT99ZZtPy7ebe2s3X98zM0txp2c3gbevT2Gvm3GhjbfJUUVNP\nU01GSk5XV1Ribe5bXuHi4t3X1OHPzOTc1MzW3cbF0efez9/79/Hqc1VVXVNMSE9PREZJT0xL\nWWN1Yd/W4ufaz87X1dPf0N/fzMrr1M/QxdPz2dLfYlReVlhNQkdLS0tESlVWTlrwcmPyzd1s\n2tTF03rLzc/L39bN3MrN1d33zM7ZZmT5X0tARUU+Oz5BQERRVl/u7dTPzsnO08rL0djd29PR\nzs7XzMbVycLOzsrdXEZMUT03Nzo8OjlBUmJeddPLy8vGwMra293b2d3Z09PUzczHysa/xca+\nxmtNRkA4MS4tMTQ2O0Blz8zCv7u3ur7Ez9luTFl3Xlj+yLvAx7q4uru9vMDuSTkwLismJSou\nND1N4L+2tLGurbC8yM/pRDg/S0NIa8+6tbq3rq+2uLq63DsxKSUlIR8jLDlK8MCvqaqtqqmv\nwNRlTTwuLjg/UnLMtq6usa+tr7S6wM9CLyUfISEeHyk8+ca4rqWjqq6vtL9kPTg3MCsxUuHD\nu7erp6yyr6+3v8nXUTQkHR8iHx8pOPO3sa6mo6ivvMrOUzUvNzk3O0+/r7S5sayutb6+vLzJ\n1OA+MSUcHyckJi9Hva2usauor8DpYV9IMzE+SV/rzLausLm+urS7yc7AubzMVTswIx4gJCYr\nM1e1qq2vra+5zU0+Qj45PErfvr7Atq+1xNDHvr2+v725s7tjOCwiHiEjJCs64rKrrKyvuMZh\nPDlCPTxN5sa3usS8t8LlcmfKu7++t7OvsN42Kh8dHiImLkXGrKSpra+820k4Nj1GTOvLwba4\nyMzJ3mFOTs66u7uyrq2wzTknHRwdICYuRb+poqWssb7sQTIvNUJuzsW4sLDCbmZiVFBN5Lau\nra2vsq+6QCceGRofJSo806yfn6iyxG1JMy0vQPC+uLi1tr3dUURGS1jfvK+trK+vtb3hOCMb\nGBojLjVUuKadnqvASDc2My4yXbyvra62wvZBNi89WNnGtKuqq6+5wb/NTywfGhofLz5NyK2f\nnqa+PjAvMTY5Q9O1ra256URCSU10cdq+squttr2+wMfJ3lAxHxobIDFJ2L6vo6CqyzkrKzE+\nVPfVtquuuH5BPk/cycbUyrqwtr7L0MzBt7vCWyobFxojPH7Kuaigoa9IJyMqM03x4cCtqKu2\nVD9GT9XI3lLfvLa3ucPYxruztMNpMx4ZGiA278a6rainsk8pISMtUMa4sq2rqazCVDg3QVld\nT1PXtauptMfP1MbDzOJmMR8bHCU91NjHu7KvvEEpJitMu62sqquusshNOzc6VO101MS5s6+0\nwuhPYt7T28vDwv0lHRweM1VNTuPcvcD8PjpK1K6qrbrFdlh4T3Npccu8urq8v8DO2Nve+273\n7eJv18vSaDgmHx8hNllo18nGvbrM3ldIW8zDx8zjaOe/u7q/zsO9u77MX0lLSWfbz8bYXU1d\nXF1XQjk9QT46Njc+18bDz1tUZ/pea09YzLm1u8fa0dHIv8fV2Mnc2uVc+1tkaGNaUU4+Qz9N\nbd38WE9JYU7eXFJVWOzQvu7lU2rY0tvof0vY0s7Pzs7fycnAzWhMS0z+0893XnNRXEs/QUlL\ncldMY97Gx81dfGd7zt5qT01V4NjK2f3l0b7FzlpLSG3Fx9xaREvizMLeSDc8R3vufUpD6s60\nutFDPEJ1u8nzUk13v7vTY0BMzcrM7Wc/QUPFsbDNOTk/xcBZMTtH0L5dRlHOvbxNPDVJz8nY\nT0hbxcG92Ght4MnByGRVUOfLzttoS2vMzPRLP0Vd8dtZRVLx1tNbVFPvx8LtWlRg3tvLdFtY\ndtTG/lpf3drj2tvkajs6O+TzxGHm8tRnSkhL+f7MWnlG3NvKys52btHPxt/pW2jZwdXnWV7b\nz8/RWT9R5db2WExPXernW0xMaP7lWF9VX3zy4/zq4enx1tLW6ubidlpOZufdbmLjX9Df4NDy\nZkY/RVTuz+12X9jX8+P119TY5Fdy59TNz+NhXe3eztt5+F3s/F5SXutwUVFSYF5SWmFk52xS\nZs7N0m943dXT51xeyuVVNz5hw72/70RY7b7MdD06d725zE9GZMG2vVxVR1lIWfdzRDQwM7iq\nq+EuLEmxsdc0Lju9tLtrOknLrrXWPD54y8DNakhK3sfPblln0s/cVTxK7OfiaUpQW33G681a\nT1JfzdP6YN9pY/0/OlThzcLazulvzNnOVkJFV3vWzm7f2cvAz15nX93P4mRQZ+bi2HVXWGNj\nXlZXUk957O5XX1By7svd6etfSUdMyLnCb0pQ5cPT7EhOaufKx15JX+i/6E9TVX3N2/5eT9bN\nzt/3+HH56mleTUlJePbfVFFObs7BzVNNVc7Izk5AT8zBzU1CVtzDyP9GWmvc1+RxUUtqzN7Z\n6n5+z9VwTU/bycfpaVdbftvdTEl65uJaU1BZc9F+WE1x4ftqUlXny8fcVE5ix73VR0rTx8Lr\nfFxs4s3ga0xKTHnPyXdURUJjx8NjS0rfzs5zTUv3w8pdP1TcxL7OTzxH58PG+kxFScy8zVA/\nRtrHz+FJTF7Z39pkTkpt19vKXFtR7NPgS1nh2tzeYE/i09/4+W3U3MnJ1mbX4+p/3eBp7Whh\nUVhZXURObG1LPj4/R0xQa+/gydh34s/MxcPLyb25vsbOz8nAws1oWtjLz1ZEOSQhLC08/klb\nusPM2DwzR07Nsrq5sLvEusna1cm4ts9Wau7Mv8HR18i6vywRER43r606Tq+vrfwhIT7HrLFr\nza+urLVn3sDJydZV2sbLwLzBzcu/vLk4Dw0bLbKjRzyqqqq+Hxox9LSpylizra+tyU3LxGxo\n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\n39jTs6WvurW0yzs7v6ervlPYxUhJUMWxxDMpO2tKP0csV7s5JicpMshjNcO462xNX6+svsnt\nz7m+xdG6rK222F5c1upNUNu4zjI12cHCzDU7Ti8+PCQrQFFFMzFiuOPodV69z3b1va+zzcKw\ntLC00eHHvsBcS01Sr6nUVjMmQ8tLOzYtT+VTUCwoOk8/PCs5rsFJ+L6yttZfwbG3zMS0ra3Q\nzrS32E9LWsTwWu1jy94yJzlfekY7TTIxOz3WUD9IKDOqtDpAyrGtzDJPs7e7vMy/vM68t769\nyfvD50BAfM903zw91jw8PC5LvEVFSShM1UfaSDu910jI0+LSScGvVse63by5bPHD4edX0LnP\n7F5MxME8PVzeXD4nNtbBsMo6PvlG4EQwr7o+RD+9ru08QX7AZDfPtX5QW7e1PzBct7PDO32+\nw/Y0NrnFU9nozelPQzdUy+7YPESyx3s/N0xz1b3KOcm6OW11xss8Md7A39lI+rDKPEZO0Mjd\nycHr6sFL1lw76NjE6TxIXFa1yj9ON0W4yNG2RzpKP9e+S0TD4MLGSTdJUsPSST4+x7zmTr7I\n3HlL6NzN1+G3vEk6VNG35i49zbzNPEu8wVA5LsuozDErPK62PzxR6LzezM46NUi+sk8+fWG/\nw2/UtsN5PD+1yuzbVsrUREdqWFhMP763Rj1E5r7qNUnGTznHu8TpL1vLzWVQccZCa8HCvE5A\n27XFWDZYu7nDbFjsbFz+2+79PzZXSGzrUerE39NgOzJI5tzPWdXPT99gcsfETjw+bbW0ydHM\n09ZAXVXZvtLQw35OWVbLyfJSRjxDWuHXXkJI0so9MVjFs1o14L/STzlHv8fpYmTcZsqzzGJJ\nUsG5ztz71cTVQD9i7mpqSd3CTjw5XL/aPERE3MD0SkvTw21qWXG/xdDk01BnWd7K6kR0y2Be\nTujD0FJS29fNdk/g3PRP7dvoTENTz8veTz9d2lpo78/H6l1+91M8TsjC0O7kelHiycRnTE9T\n/ODX0cfP0W8/O1bobPh55sfT+mBNaXRGTOPV82ZVx7/331xK3nNOV+7JzzxHxLzER0r+eG/U\n28tkWdtgX9b6WmR4/UNl9uXW9tPaT0Jf9/To1s7P2k9KWMjcVkDpv9VTUOvNaT9Fa2j/797H\n1ndbTMe7eFTlv8ZdRtvNz+9M4dFTQj5qzE9LYuzHX1jH60xDUt9OO1PIws3b3dtxUFJc195i\nWNvIzOLsysTgUGH5eWJeatbY711c1/n0TVTeSjtaeOfrXcrFaV9JTP1fZlFWx7zYZHPWyHtO\ncV5g6tnp1eNia3Du31vvyct3VnzX2VxSWt73YFhMWlxMSmzU2l5j1vVdXOnY6VJO2MnN1fLX\nwf9MTXfbZO7O29528thYQ0773nZYWHLW2f5PS2ThfXbi1tPzVl/u3NDN4PXs1OxVWV1zfmnw\n5PXm7XV8UU5cV1le697V3e5UTVVl083Uz9zk3+Dg5e1fYv1oVVftztpnXXfj3nxc+e3iWUdP\n/ndo+OtuV1f2z+Jpat7fZ93p0svW62RTWVR+2tvV1+zj+VBf9X5dUkxddtHsb+Hr7mxPbM7q\n/9z37+5e7eps7Ofn6mZdWvPU61xt3tljWmH+7VhV6tnU32Ff4td0ZWruWlJo/evX/1hsfm75\n7+DP0u7lztpiX+z+a1lLXnth8uH063ZTT1rW225qX3rlX2TX0dXkZmrb62Zz28rhWE9Q9upb\nY/Pd5mZmbN7b5XtsX3bdc1z4/mvg6n90du/ed15g6+JubmZi8updWWhwePtdZdrret/d+X5e\n/8/U+WLfzvlYYObM1l5w82xnZl9f6/1mUVD183Bqd8/gXWJPWdjZ52r43t1sWGbm51pX9/Ph\n3G/u3uFya2Bbae/3535p3M7Y79jW2+hpUWDiYk9Wb9vbWE/s2OVZWXzv9F9Wb99sZ1xt42tZ\naXX14d3OytX1ae7Xak5j2d/fZVHb0P37a23ibFdg591qVWlw8OJTX9Tzcexh7N5+dv3vfGJi\ncGP47XPd3mzp7O3n7G1cYltbW2t6fHRpbuXr6tjg6N/f/vDa3fnq2+Hbz93l71NcelROXVNX\ncWVfX11cW19UVH1fU+jd5dDP2NfS2dvSz8vFzN3f7FxVXllQVlxZYmhbW1dVUFBPTVtjetbP\n3uPM037n6fTazczOztba2WdZal5TWV5WX/tuZlhQWmBOS11hXuXb3dnQ0uxkaufe6/XOv8PM\ny97h3VlJTFxfYFZs1tN7TktXT0hLTX7P0ubd0t7nYkpPaG1i/+LZy9Dd0dR1afjo4dbf29bm\n6ephVmFeREBNYH1wetnS3ux8ZGRu+V5d2svP2d/h6mxaWFpTW3rn5+bR0Nvd83nx51JGTE1f\n+FNV1svN41tc19ZfV2Dk3Onl/tzL5V5VT2nmY2Dk3dPN2tzi9+xfWGN38vxuad3vb0w6RVRm\n+Fpvx8LMcVFfbE9HTVHgz9fTzsrI1H1z897c3d7Lx8jI2ubqYEY8OkJNRUJR1s/Zamdtb15S\nUF7i0NTnz8jMfVpVYGVr7/jay8PFyMrK0edgemxk9l9LREhOSURDU+TtYFttbOfT+u3h7Njc\n7Gds2t3q7NnP29/u2M7e2M3i39Hd7XF1/nNOS0tEPzo+RE3s3m7j1dDjWljk3nXX2dXO1cnO\n9dTQfllSXu3j0snIy8fJ2GFg42Nn7Gj87F1HODA1QUNJS2rHxtHjXdvSVlZaYOfV0srCycDE\n6Xru89/q0sbN0MbG22xs7VtOWGllTlNnXU1MQTc1O0VISWHKw87e4N9TSFX00MPDxMG+v8Xo\n58na39jazMvW33B/bFNNUlxVRkpgW09ITmbrflpNTWBSS0dMd21Ra8/a3t7c1tzaxs/VxsXN\n19LR2Xzp2c7ffuDlZnb6XHLxaltRV3lTRlp8WldNU9N/XGZNUnhPSW/n1+xd589uZ/Puy8/z\n4N3Xy/JY6N9/YFrfy+Xu0dbc2uV+fGvwblX332xtdeTsWVZuZlddaXJzcm1vW1loZmdzbWNc\nefFXTWHf39jj+9/c2eT6+NvUb+vX1tnw4Nfm39zeeGhrZPlo5NtZ6dz9ZWTlX1hVb1hGVm1M\nUFbY6ERU3stiUWzWznBQ1OXNXFbNfsZj3s3c5mTf7tRe2tV70e9Z+OFh0VJn7WlaUeFxWnJY\n4GNNzE1/YO7PP+RY0kpIw1XkanHuxU/Yb9Hs1/BeyknLRdrLTl9972rvXlvX3V3dV8zZUdjv\n0dZk6d/vZVn500nsbFvyWnH/UGbPROBMyltcamrPS2PeY+j2T8zrVchM0tpp5f7b5OVozObb\nX9de6OJf4/HjWNdOyFf+eFL0/lXrXE/kTOtQ4fTZbv/OYdNcXc5L5vtj7Gtv5dZNzFrLTdNM\nzVXVbvx65mVfzk/n527Z2krCdmrb3EvESedyWWx1V/h8ZWho7m54a17JTM7qZNBEz07WWGHZ\nWNfgb81Z4u5ayFzadOraS8hM3tpLykndcW/jTt9d8O9V3GDiWM9M2+9v1VxPy0TJau3cXNzl\n5N3q9eLvWm1sbulT/E/XWXHqa/F+7Onf6N/eWNlL02H852ta9d9Y0EzId/hh3O7cUO7lYVf1\n6EvMRd11b+99W+R01GHS7X7GWclcbNNH2HhsdVVpaOlf0UrDRNR8W+lT3lJm+2HjeVze2+xe\nyVr6z1LBYl3IScZR3PvXT8xSXvFO/W1T5u9l2UrJTerPS8FpWsRGylNFwUdtyzu/WljJUc5q\n7HDX2EzeWFrJQO7JP71C293Sb+/abM1S2Gd240vaX2dre2rdTcE9xVbaz0zbYNdUzlPPdlVa\nvj/XXkm5RPLNSrxB1WXvzD7P5k97VubOTufp6dVT2lTKStJM4dlf3EzPfkzCRr/pTcpYaGL0\n6GBldutlTMRIz2JWy1jrTt7oZsdXZMhCuj3JTc9mQr88vlRSvj7M1E7PU2Htau/P495az13O\nQs9FylZK1jvPROO/+tDd681mZPTfXUbbaHrvSsJb01fp0uBzUGbh40zCPcBRX99M3W37WubW\nVcxV4dNV21zb3WjYUO7LXs9K3G7oVF7wWtVPV3Jk51L+7tLUWvfXX8xV5uJn+Wz6ftbpTNdw\n/M9N8+/+TFnwXd5QcO1fzkr5eOjPcNzW1cxZztbQz/DP8n9pV+fpb09eWlRHREVKTT1NVVxs\n3+3T2M7OzdTOwMjBv7+/xsjL2uvU18zMczElJyozMTA+v7GxtdjY3lZBNzJQvri6ubKvs89i\n6djN2t7Ox7+/xshsNCQeIikwOkfArqquwt5RQz4yMDl2uq+usa61wW8/Um7c0MO4sa2stLhu\nKx4VGSAtRmW5paGls0g2MC0uLjfVr6akrK/A2FU3PUjawL63rampsL7XOCMcFhomNeG9rqah\nqLo/KyUnKzldvaijo6i+e1A5NTc+0buxq6uqrbjIXD0uIh8cHyw7w7esqKmwxzcnJCYvTsGw\np6Kirr1LNDUxPl7Vs6+trLK2vltNQzkwKScfJS9Wvbeyr669ZzIpJy5Quqynp6msyVcxKjA7\nT9zBuLCytLvO5WheZ3hLNC8kJS40yry1ra23ykkvKy9B0b2zsbqyw0w9LTNP7Mm7u7q4vrzG\nzr+/wcz8Ni8nHiUrS8G3sa2wudU0KiszUL66t7u9u8VYPzg/ZP340NC8r6+vt729vdjmRCss\nIigxOdHGt7a8y1c3LC00P9W4t7e6vcTnaEU/R1j9283Esq+trrq+xM7VfTYsKiMtNj/Jzri3\ny21CLi0vOE/Fu7OyvbzF7X5CPEdY5srOva+urLTAx8/Y41cvLCopPjtMys+/x2pNPjIzOED8\nv7Wtr73I309LPDxNT97I0Lq0sbC8x9bm2M5+PDswMEI2RV5Ny9T11UU7Pj9IcM/Dub3J0Ofo\neEdHUFPj2My4urezwszQ2MLA1FxEODY+OT1EO2btc8piRUlCR15e98nR3dDb7vtTWu5Z4crO\nxsjJvcTOxsy/ur691GZJQz02OTM1QENZe1nxflrf2tXQ71hQSk9qe3Jv2NDTyc7NzcnBy87B\nw762u8DMTjw/NzE7OD1VTv3XVFdNSWt/ZN/tU19u39LkYvn95NHaz7+8uLK8vrrEu7zsTTot\nLS8uP0tK0dXVyVE8PDlDft/Ox9zPv8bHzUxNZlF+19e6tratsr26wcTIQjQwJis2LlTWZb3e\nWN08Njw2R87DvLnX3sPTzM5FTGlnysnOurq3rru+vMe5xUM7LiUvMjbRceDETVlPMDY5PF/J\nvbjEWdjO37/zP1FXzbvOybm9tLPFvL7Btcw4MSsnOjQyxdTOuz89QS89WD9hv8K1tu951e3C\n1TxLT/e8yc3Axrq1wL+8vbfAQy8nIy87Nsa8y7pjP0YwMk9GUcfEu7bP8855f9k8OVJvwLjI\nvby9sb3EusG0sUguKiUvSDpNvda6wDYzMC5KVkrazL+vu2TqXE7ZSj5LT8S0vb+9xLm8zL65\ntLHFOSwqJDU8PrTG0Mc5MToxO2ZazbnAvMBTWeReXE47PvTAs7DEzcjJubrGv7SvsV4uKyAq\nSTzIt9bHVS41ODBEYfm8uc3M3FbPxGpiRDppyb+0vNrMx8G5wL6ysrxKNi8lKTo4066+wkEr\nNjw5TlJIyra4ud1D7dbY8UZFUvDFuL7DwdS/tr68t7Ox7jQtJCIuN0avsL7PLyo6PUvoVuu6\nurrBQUzS2sV8QEtNbbu4w7/L2Ly9w7OzsLk9LicfKzxCuq24vj8nLTE689LZu7bDz11J7cHA\n5UE3PWjDtrvIysW7vcG0q63wNS4kJjU0PrGsrLc2KS4tPXNQ37u5v9JDQV/CutJFNTvzvba3\nu7y4u8S+squ0OygpJC9DLVqxr6e8KiUnK1HYXMK4xbfGPEHXvbfIPjlA47a6vLe3trrAuKyx\nUygjJSxGODrltKetTCkiJDRq4NS8ubS36T9J7MC75kZEYMi8ta2vsrbEvLbLQCceHSpCZLvE\nxLK26zolIis/zba7w7q/w8ZeU83tcNBt38rFr6yvr7jBu8XePh8aGR8/vLevr7WxvzYjHiM6\n0Levr7KutcVbP0JNSuzOzMjIuq6rrrfNcG7cZSsdFhkvz7avua+nrcE1IyQtPf7TzrWqpqe1\ne0E1NT5H2L29uLCvsb5eRkRow8RBIyAlMWRKPEx5uLbLcEhP2eZn/dXAuba7yOFaR0VO+dDX\n0cfDv9ZPQz9O5cjDz+r76+nv4vVfVlJaV01KSUFBQ0pZ2tXCyn5gSUdJUGnu2MW+u73H5FtT\nVVza4PbgVs/Ny8ro319TW1VTUE5fVG751MXHx9v3VEc/PUVDSl911c7MzNre7XV2bWBu8erS\nx8PH1uhtW09TZFZRVmDu3dLa4Pp7cWZYRkhQYmb63+jb09Pr+HJd+O/n08vJzcvN2vVfW09T\nXVtWTE9RZOv2eHhva25oWFJp8vd++O555tbX3ffr6e3Rzs/OyszY4/1kVlVYTlBWW2ZjfXX5\n7HRZTU9WWltaZ/7u6un6+drP0+Xs39bX09rr6eXd5Ojj6ON8al9cXVZcXmXk1trrX1hgY/hv\nY/hxYF1eV114cGFUbffn2NfU5uLffHBtd/Z7/eXh6ev97e/p3OnuYGBbWVhbYF1v/+nm1dbk\n3+7u5+7p+fL66+Lo5/35X2RfaGZbbVhTW//q/eja7F9veGVeY3dbZfHs7n3y9Pfl3NzW1t3d\n39/f6nhbXmpsal5fXm7s39/o4+/ubm1tXWFcXFNb7ubi3Njc4ebpbGN5bGxjXmh27On5fO7x\n+Gttc2Fp8ezz+Ot9ce3t6OTofFDcXk3H4u/D0fdhSlTkYG9dZFXd49bc6/R3+O3tWkdZ1ebU\nfFtu2NPjU/B5duP4cVz9d+vt5dxl5vlfWmpNc1Pv3ufv8GN24eryWXzw3+ve3eTu+3vj2n5l\n43jv7M78dmVaXF5ral5RYklJ7vD+b+jMx8vdQU3MYlPbTePp39jH7uRfa2NrX97I0cHrzePu\nbVZPVvpUTVZcXd9V92B71kxv5GBrVDjcYuvUyM/Izu/U2eZaSlfPW97uZMHR5/HUTUJMUs/c\n8l3MW9tIUM7nSWLN7s9h6fDRTfFz6u9mas39ZPPpT2pRVPRnZlt/09NJ6NPO1mHi3clQ2VXl\n4l1p2/Hn5knKU9hr5l3R9VvTRftNWk/nY9vr6mzl1VDPT/NdTVhmftvP1c/f19D4aF5MaVZU\nYF9acWFq2Olv6GnrzN7v5tTJyejL0s7J6mXe2n3o3dTt71I9Ni8sKSwvN1nPyby+v7y+w8O6\nurq7vbS5xL67vbzUYu/q+d69Xh0bHR82KiAqTryvv1m+srKxyNS2r7bAwLuuqrq+v8O3wVdJ\n8+ZoXkk3GxoiHywqJi3Gq7TGbdS0r7zmebisq7rEt7SsrrnKy73kWU1O3MTMX9E3FxocGy4x\nJDO4ramtTUq6urDASt2zq66xxcWutbW818zYy+Fk0eXV09NYGxQYGSk5LipNrqSerGNO1ra6\nw1hJuq2prL/Jybe2xMVlYNbYzcbJ99jYOR0UExcnPz04X7Khm6C6aENF2N1JQfm8qaKrts1u\n1L691t3yeLy9v7/X2VMjFRMVHzZMTd6zp52dqsRHNzAyPTxavq6hn6a5YD5J2cvP0nX/xby6\nv8PfOx8WFBgjO1Vqw62hnJ2pwkUzNS8sOUjFp6GjqbxMOzw/bszPxcTIvri3ubvcKRcSFB49\n1dzgwK2em6K9Py4wQj8zNj/Ho52hrW0xNEnkv8J18sK4sK23vrtlIhcUFSJEbVvix66enaa8\nQy84U0E0MzLfpZ6isEovPN68tMJdb8e1rK24vsBIIRkVFiI6UVvgy66fnqSxYzU3SEQ0LSxL\nrJ+frVw2RMm1s8hMVMy2rbG+xcPYLBwWFB0vS1hk7buinJ6pyzo1RUA0LSg4tqOepcNGTMq5\ntcRMSeq/srC5v7m4SSIYEhckNUFASM6pnZygtFA4Ojw0Likt46qfn6rRSmTJur39TlzevrK3\nvbexuTwfFxQbKjxDRVzBqJ6ep7xONzg5MS0rNMKmnqCyWD9RzbzHT0l30r6ytbi2src/IBkW\nHCxBR0RL46+ioKi6TDY5Ozk5NT69qKOmt08+T+bHymxe27+2sLK5ubOv+ScbFxsqQUE4MzbU\nq6Wpt1c5Q1hYdVhQvayoqbhYPUFK7c94bNLGvLOyt7i5uLdcKB8cIC88NC0tMu6uqq++Xkne\nxsfE0OO8sLO43Ds0PFDTxtnbwbqytLvFxsK8t8w5JyQlLToxKyotPM+6vcXgcMa2tLi9w7+4\nuMZYOTY9Rl3m0se7s7W7vsLJysjFvsZLMisoLDQvLCoqLkvNwbq/yb60s7S5ydHMz9ZsQzxC\nWNa/vb69w8vJ1N3Z1tDIvrrHUjctLTMzLiooKjb+wsDI0NG+tbS5xNjPzM/P6VdSZ9jIwcXO\n19/a2NfRzcrKysrI30o8Ly0yNjQxMTE6/s/c2OPaxL69urzDvb7ByORTU1pX7dTd5d/n3MvI\nwr/KzNLt3N5UOzgxMjw/Ojc4OEjv8O9vauLIvbq6wczO0dfb92b7083Ew8bHztDOzNHc6V9X\nWnHZ3lA9Ojc6Q0M6NTY3Qlll8d3XzcK9vcDL2dve2c/V0s7Lxr++wMTR72Rqe2hmWFdcYe77\nSjw8PUNTVkk9QEFN8/t6eHzrz8rLz9XXzszMytbTy8nGys3Y7fT54efp4O13dG9gYlRIPUBC\nRFFOTEtMTlxpX15ZXXvVzc3Ly8/Nx8rHy8zI0dLT3+L/a/bt5u7u7Hrd6Oz5Rzs6OkFYVkZA\nQT5S7PP3a3HmzMO+w8XLysnLzNrm8tnLy8rQ6vHvbevnb3r94tXuPTQyMUfzWD05Oj7fzOdd\nUV7Pv7y9v8LAusLM2U9q4s/IytvY183Pzcvcyr+8yzsqJCQvSkk2MDJNubC76z888sfEzl3g\nuq2uuHVCSurAvbvIy8O/u7/Gyby2yy8eGBsoR/5IOkHGqaSvXi4qNVTmW0NksZ+dp8g3Mk/A\ntrjExbevq6y4vbo8GQ8NEiu9tbu/tqGaoMokGBkoRm7gWbKbkpSkPyEkOMG1s721p6GdpK/L\nIAwHCA8xrKaooZ2WlKcpEg0RJma8raebkpCbziIZHjnArq2vqJ+cnKO3MRMGBQsaupybnpqZ\nl545FAwNF0etpJ2alZOaxiUXGSr7saqrraGbm56rUB0MBQcOKqOXlpeXmZ/QGw0LESayn5uZ\nl5WZrCwaFx4/urSvrKmcmpuizC0WCwYJFkObkpGXmJ+1LxMMDBg9opmXl5iaockgGhsn2ri4\ntrCmm5ibp34iEgsGChhVmI6PlpusbSURDA4dWpuVlJSYnahTHBocKuK8zL+ro5eVnK0+HxIL\nBgkYypSNjZmhvTkgEAwPIbqVj5GXnaa7Px0bHzLEs8W9qp+Wlp68LRwRDQgKGdmSi42cq24v\nIRINDiaxkY2RmKW85j0eISc2wbPJyqmelpWezC0dEw8ICRi+j4mMn8A8Kh8UDA4po4yLkaK2\n1ktCHx0nSLqvynitnpaYol8pKBwSCgcSx4+JjKNSPjcpFQ0MJ56MipOp62BHTiUiK0i5uM9m\nrp2UlqBgJyUeFAsHD3KOh4yiPTAxKhYMDCWciomVsT9bZFgoHy3nsLtiP66ak5anTikrJhYK\nBg/MjYeNqDMvLygTCwwql4mKmbw9UE1MKSVHwLXIR0OrmJGYq0srLCkXCQQO042GjqwuLTgr\nFAoNMpKHip17Mz9TSyopXLe0czY6q5eRmKxDLC0wGQoFDVONhY6oLi07MhYLDSyTiIqeYCxH\n4kstKXG4sk4vNK2YkpixSi8yNR8MBQs3kYaMpjMuPDUZCwwml4mJnGYzQklNMizLs7xELi+z\nmZSYq0Q1PzstEAUHIZuIip07LD88HwwKG5+KiJZcLDRv6DwsSrO0+S8tv5qTlqdNMDdIOhcJ\nBRaqi4iW3Ck6PykQChO0jIiPvS8vPj1EMEStsuE0LmGelpefzDM5P1gnCwYLPZCGj7UoJz47\nGgsOMZGHi6MvKTNiXTk2uqu8Ryw8qZiWnL86OT/eSBUHBxijiYqfNCAuSSkQDBqhiYeUWyYp\nSdlEL3mtr9MuLcidl5mqPi49478oCwUMTY6GkdYgKERBGgwPT46Gja4oJTE6OjU/qKC9Nyo6\nqZmZoMU5OVu/zhkHBRWkh4edKhsrZjERDBiiiIaUQx4iOFFCNsmkqM4tKfOfmJmpQi8+XbJb\nDwUIIZWEjLcfHTjHKQ4OJpiGiaErHiU2Pjw+rJ+tTygtt5yZnbM+NlfKsFkPBQgkk4SO2hwd\nP7wrDg4qlYaJpiUcJEBPNkSroapbJi6znZufxjM8a7+s3RMGBx2Yho28HR0+tTUQDSKZh4if\nKR0gL0M7W6OerEIiKrWdnKLBPlXIzLbMGgkGFKiIiqYjGzGwyhkOG6iJh5gzGhssV0lpq6Gs\nWyUmw6CdoLlRX9G/tLwuDQULQ46IljIaK7axJg4PRo+HjsMdGyZH+syuoqpuJyZkpp6iq8Do\n2/HEulkWBggfmYiP5hwly6w5EQ4nmomMrCEcKE7GyLmprN8rJUGrnp+pt8rb3fDTySMKBhHA\njYqhKydLsdoZDRm0joubNx8iL9a8tKas3zQrOLKhoaOrvu1OO12+dhkHCR6fjJLaJTm9si4R\nDymejZCuLiczz7W9uLHGRzEzzqqioKe0yeY+Odq8OBAGDDiWjZo/K/q01B8PFGuWjpe/KSQ3\n5rCttL5gODZUwK2kpamvz0VDUujeHgcJHqqNjrktXsrHNBMQLKKRkK0rKj90rbDSvck7NT/5\nq5+kqq/TX2pBWb4tDAcRTZGNoD48cMNFGA8dupaPojctPP2vsfHGxEY4PFSrnaGpssvZyFJM\n2DwPBg4rmYuXSDFL51MeERrKmpGdXDJUwrm7Z8+88zc5e6qdoK/EzuzeV0TzShAFDSmaipZJ\nNkhcUR0PG72bkZxfPrzAy8w7+7HRNDvwqJqescjlWHxGP+l6EgUOKpiLlzovTd95HQ8buZuT\no9K2qb9KMizEr2c2P82hm6S0x1Q/QkBay9wRBA4xl4mYMz/O3VYZDR20m5Oju6in2jAoK760\nTD1Jvp+dp629WT8/L0+vXgwGEkaOiqQpP1TQPhIOKaiZlaSqpbM6Kys/uMFET8+uoKSop7s/\nLyo0zKs5BwcWy42Oxyne1rwsEBNDrZuTpKqlwS4+NEO2yF7RwLCipKWqdTIxMkW5thUDDiSg\njJktSLhXPxkOILutlJmpnqQ7PVMuz71B873Qq6Sno646LDMs7KstBgkaz46QZjPAXP4kEBnp\nrpiWqKKfv01VMkHWV0/KzrKkpqSq3zYyLTlyRxEHEyudkJ9AxcBHLhgWKbWimJ+io6nIY043\nTlVMfc+9rKWgpLc7Jyg1Rc9vFQoWL6GUqjXPxU4yGhY1q6Saoqukp+JbZEXO2TxTxM2tpqan\nuzckKETV0NEjDRYsv6KzMlm34T4dGzyyrJ+kqKGr3V5rdsTM8tXN17WrqKvcLS01PUo6TL09\nFRcgaaqvOD+/wV0jJEWtqaKusKy6UUnEtLDFZPPPx7m7trxHNTQ/zl85P1K8zCIbHSu7wDdO\n127ZQDjRs7WvwtXB52y3ra6tvt3EzdjmWnW+1FpWOULfcv3SUUU1LCcmL93BxV8zO9TD9kc/\n1b3LSlTIsq+2s660yH1M8MrQf9fPXUHrubS7SiwuR/ZSOkzkztxzMiosLDvX4lfd+77NSkfL\ntKyw0/TIy9jHw7a0x9TmWNNNN1TGv7xtOkBbe/JCNj9sVkVNNy47PDxl2tfEyVTY3O/Gy2zA\nwMW718y+xMzF7s6/0tHN62HlTHbgY01FPko/PDo1QWfOekdK2uxaSU7Oyfph53TdxsrKv2VW\n1L66yE5cvr7GcUt3y3p34XRZQ0jqyF9LOjhLPzpszsDCUkA/R2ffw7bGSzxDbL6xt724zkpD\nPVjZ0cS+xEg6O0pqztN3bWRHRVlP1ttYU0tIT2be1tPN2tDJ3ffDxsDM/+VYS15j5svb3epW\nTUVRWk5SaHxXcfvg6N/oV09mb2VUWPXNzc3VbONlWWF32tLVvslxeFxw32tYXVzj+kpKWdXO\n2X1faXVUVV9jbmVxf2tq79rZ09lncftVX23i0MzR5V9s+VNPYH1sYt3O09TP32hRQ0JSVFlk\n5MvQ7Njd7+NkXXllWVX60srIzNPtXmFXVmhdX+vd1N9bb/JhY1RaXU9edPTn63fu2d326vZ2\ncE9QctzRz93X1fJ5ZmduVWPg5OtmduXh429o6/9YT1BV9dje6+j2cm5953Jr8vbwbm/d6+ft\nX/pvZf567OPz5trh4X17fHFhW1/+/fp59uP5XmD7+Gx45HpuXV/+6/VjX/r2bPPt4Nrv/G73\n4fbk5OXkePTn+P91fvJ6X11hWVtpXW3f49/vcPrr6fh4dP5savPv4+Pm7WdgeHVpa2xrX2v9\ne/j5/O/l8vdpdPd059zc7Pr1/m9udf7+7nR3fXzv9flua2tnXmXy9fh87dzl8+np6Xp97mpx\ncGdmc+/t5N/b8HlsavT1Zl5sfl5dZ2/zeeXof35veuvq6u188ntubHB7d/ft+efc6Off2991\naWtcaebobmR4ffz++/j2+Hpvbnn9+Wpz9e7t/X1xeHT3+P77ZWZvZ23/f3jo6nN48O3w9uzq\ncmhkbfju6t3h4dvj4eHf3fplYV9eWmFnanRhZv1raH7+eGxqc/f99+3m8vnr3tzg5vTw+W5t\nfmJeaWNoXl9zfOTi6/v14OPi5vZrZGh5c3Xk5Off8+7m7vtvbmhdXF5hZ2RhZnbw+ezr9+zq\n7Or6c/vt629rd/bp7XFsdOz4fmx2fXFueWpt7e7m3ubm4OPq8v3+dWRdZGRnenVx8fDu9ftu\ne3hydmZv+ft5fvNyd/J6/vhxdGtncu7p8nzu8Ofq6+h7bnhuXWNsePt8fnd+ZWZ9fPLl4+vt\n4OPo/XDx/XH37uvr9ejtbmf9/mn39XFgenZdYWdrYF9zcX3z6/lvePB5bXzo7vnl397b5+Dv\n/fVxbGRgYnR5Y2B75mrt+Hvo6PP27vR3amleXm3/+fP54OTl7erxeOPpY2d+9ud3amxp8elw\naX7x7Hx1a/vh4v18Y3vr6ud6bWB26v5hY3LseGlvZ/Dqcffv7e117v34Y27vfXxu++nl8uXo\n4uV++fJzc3Br/V5iaGNuY27j7ezhfW3+fOvt6vJ08F119+9/aHt7bm343vX7+W/g5HNZW/rv\namRef+jx43lnct/53tVs5+Xn339ub/L3efri3Wlkd1xfUldUa+31d3zW2nVe7fP+XXXx6+R4\n7tzX6/P32+peWmt57WBeZWdpWH56a3bo2+nZ3vVo8/r+7Hn4/+vo927q7vxz5uddZm5laVdw\n6ePjVHnh7d1na/Ft//ps6nT17mP79HNu135rYF7j5XtmdX7+Yl7j3P1i3tLr6m172/NeZPvg\n7mtm4uf9fnjrfv/r711eYO5rX19q1OJdYfNtd2J37Gvd4O1vY3DR4mx3+uXo5N3gbOvn9Ppb\nXutxWV1f4txpXWDq9uxcXGz+4eRt8+Fp8eXt+nj13O1aZGvkeHPp39fc7+rfaGRna15wemRs\nZV9w//zdcfN66+jk6e/UZ/ry6HFqYenr9m9oaGBg5vJXXGd73HFiatvf+Xpc9Nx5d+fe2+du\ndO19X3Xsa3f6cXT4b/rz6vF4d+fvaHjp4/97cuHrZO94e2/w+WdaZGj36mJXYGz33/zz+/Ld\n4eZ62N1nddXvdm374/jw5Wj37V5sZWdvaGh4ZXBodu56+dzZ7Olp7Nf4eWFp4XFbdHh2Y136\n4/rwZH53c19t5nvvfP713mv34N3raH3n6tztZfLeemx+aG5pbu/0alpe3d1fZWl09GpVauX9\n5N/69W1k5dxodPHt42j85ebq+mn0c2hvffd2cXZrdGpv/vTn6OVqcGnp42JvcOvlcv/z59N5\nXnB+83r0c15n8eRzX2b4/15VY9nYc1pr2eZ6fXzf2en36+je8fXscG549XhaXV7371tZbejt\nb/7f4O91aXNuc/Lm+l1o7N/5Z2/j5HVmd9vl8XtveuDxbPNp9eR83+987NzpbmVu8Gh5Y235\n7G9ubH9qd+54/l9gc2tub2hrZ+jn7+nv8vj5bG1vf/F19/179ubk1uju5+TifGp2d2xpYH7+\nbWvo3OZsde7n7Whja3hwXmx6bVxf6eltZmzl4un3/ub9ce7q8vx2ffLk8u7ud3zybV/87vdx\nZmnp8O177+Ll6PJ95HxofGlte31rbPxubHtqc3ViY2pt7/557Obi5+Xn4tzf4OTn92trYGhk\nXWf5a3lw/OT1bW7l7mdgbvfj8HNk9OPj6PP/7fT49G9qZ/12cF5w7/7m835+5tvoZWry5+1x\n/u5qee/+/Xn1eHlxa3zq7HVfZWtxcu/q/n7s4ej09nVvd2z7dXLv+334a/rq9erk92Vq8elt\na2hsZ1tk8evpfHT48ejr8+Xr6d7l6e/79/Vqa2dv7/ttYW/+c2NjXWF2eHp79PX09nr+fPDt\n8/r43ufu5/7u+fn7e2n+8G1kX1xea3FqZnb19+vx49/q6Plt9fTs6/z2d3Lq6OpvbvNuZGls\nc3RnZWJjbP5xbH36+O358/d6fu7s8/vu5N7g5uHd3eLsb1tcW11fXFpcZnn8cW/x6u378u/s\n5e10+/vs5+rt6fHz9uzmfXh9+2VebmNbXmpsbXx+bnjv6+/s7+7e3+r06uXp5npv9u3ycmZt\na2JlaHL9fnP/fXz78vbu4PD09vXo63xsXmNjaW9janL28e7r+Pfs6uXl7Xt0eWtx/Odza/Xv\nfG9x7vV++//u933u6319+ejqcmtubGZ2+Gxo/vbv+Pbj4e99cm5r/P1taGp3/HFr/Or67t/k\n7PT4+P5vbnF3aV9m9PTu73199vD5+PPq9Hptd+/m6Ozy7ujv9/v3Z2lsY2BfaGRhaGly++ji\n9vr8dnfv6vj47Onl49/f5efu6+vvfWxoZGViX2lpbWds+Xr48+/l6X538uzt6eDrfHxtbG5v\ncPr6aWVvbW5u/ndxb31+/f50/vnu7u717N/f6eLd6OXg8nr0fGxvbGNteG1oX19nb2thYmp1\ncv31+Pp+ePHs+n/x8/Tp4u398uztfPrr9/L2b25rbW96bWv7/PX2ffr49e/0fu/r7PF6b272\n9/j0fvX1+P12e25oanJ4cm5maXp5ePNyfu3t7vzu7vLv9vr56/r27/x19vX9//18bWNhZGpu\ndfb39u7i5P128Ojv597uZ2pqZmleXf7pbmBrXVZpWlJdbnXgz9Hg2dHZ2tzQ03Zv8nFaUExO\nX3lpbubr8fp77+f9cPXze3r56+pzWv7a6WF4fllh8v9u2szU4nVu6un97fBeUFdkYF1WW/bn\n5NfV1s7Kzd7p4+x6X1VOVVtSVVxnY3Lm4ufc0trf2Nfpbn78al1ieHVv9+Pe3N/r/u7qYGPp\n715n62pfcHBpXmJoaHvk5ff+5+B1Z/Pp8/9qcefc3djLx8/X09DV3fFtX1lcXFFPWFJLTVJN\nSlBZXGp0e37u5fXc0dvk4dzc29va4ez3bXF0ZWNvX1hm+evu4t/t7eni8XZwcl1bZG5uaG9f\nae7k629taW5waWVkb25pXF7+/Wllevl67+fg3+bl7u/v5fL+9W5kZGhmdvZ4fPvq7GppcGlj\naWdjXVlWVWBjampt6+Lg6OTn4Nrd5vXx/Hzw/Wx1+XNqZGhtdXtvb3F18m9s8OTj73l3Zmhz\naGNqc352fe7t7uXf7O7m3+Xo4OTe4PtlXWhybnJoZWhsaWp87eT+ZG3t6uftfn7+6+x7bnL8\n+Pb78+p9ffft83Dv5vVz8OTk4d3a3uro5Ovv5ez79f79anZrYWlmbWpq+npoZvv8+ep7YGD+\n6fj98+Ld4efm3t3o7e/2f/jt6+zo5ePzeX13ZF1lYV5fXl9rffjs9Pju29LT2t3a2tvfdmNn\nYmJhVE9WVFRYXmrx8e3e5eXuaWttdOjZ4uLZ2d3l8+3s+/5qX+/i9PpjYf57aWdfa+zy+Obq\n3uldXF1g6WtYbnbv82RlfW/9d11n39zc5Xh57vLudWj37frt6uDb3O3v3Nja3uDp7enyYl9r\n/v9/YUw4MT9T1MvsfMnEz2lCRWPb0Nbo0b/F1nlq+uL8Y1hh0cvY/Wzx1OVeW2Xu0c/f6vfy\nfmNgaVE3LS9A5snX9su7vM9MPknv0tbbz8C9yNlkVlROREZSaOfbz8vKzuNgXGzp2c/JxsXK\n0+P7eWNXU0I5Ni43TeTGwtXPyv1NPz1O2czIyM7DwM/3VEhITUtd79rLxMjP1+lza11YbNPE\nwsfKzdHU5FNHR0JDPi0sPP+8utZi4Od8TDg6WM++vczKvsDLekA9SFpnb+vLxMPJ9Hj6Wldc\naN7IwMPHz918V1pca/FKPDQrLkRnw7zKzcpyTkM6QvfMv73Hx8LP4E89P09m7e3nyrq8yOtX\nXvtlW3DVwLvC0t/d4mhNS15eUD8yKi1C6L2+093O1PZNPEFoyry6xMfCzOFOOzxJWPX57My/\nv8zrVlx8+H1w2MG9v8bdemdWW/nn529KQD4xLjtWxrzPan94als/PV3PwL3HzcXH5UtCTe7a\nc1nuw73E8llf7fddW+XCvcHP2dbWeFNX6edTQz1EPjE1Qui9v/ZUYXvpVj5F6Ma8wdbSyc1m\nQkJX1tB1atjFvcTvW1x843lc78u/v854b+57Yl572fBSSkVAODE5Tsu9ym976HtiRD5P3MjD\nzdXM02pbXGXY1vvv2cvDzePp8uTeaFnuz8jG1+3e5Pv67t3W+0pGQToxLztaxsDOd11vX05B\nRVzMvb7ExsfL7k1PWe/ha2/Ty9DQ/mrk6nH6c/fLx8zP6XHtdGrj19PWX0lGPzgwNEfav8hk\nUWl8Xkw+SO/HwMDJycTaXVdafetjYOLNwsbY6t3b3XFTXtfJydhuaunj9+nV2+pcRURDOjAy\nP+6+wuxVa+v/UEBDZsq/ws3NydlnXlh932Rg39HMy+dj7ub/bmT3z8fGzNfk6eDgavHW3GJK\nRkVFOS81Ss28y1pQa3VmTD9M5sW/xcvO1O1pZWx/d37o2cnK0Nnh6/N2V1Zx2cvO3/H77eLc\n1M/P4U49Pj06NTVD2L7F3VdZbVRMRkr/y8LBx8rN3mZVW2Fs8d7TysrS1drzbWxbW/nTx8Xa\nb/Tm6+bj5dvebEY+PT07NDlUzsbPY05mbVZOSlHYwb6/xc3V33Zudm9s+OTYzs7P1d/s7mxd\nZXPcztXp7nrk09bc4en8XkI/QDk1NkJ1yczjaF5jXE5KUn3Mw8TKz9jd9Hru+/Hc09LLysvO\n1eT7b3b3+d7V1dre7vDl3+Pp6GNIP0BAOzMyQePEx+tYYnVkUUlM7ca+v8bI0N3h+fX9fv/c\n0c7Kzdbc5vx2Zmbl18zK3fpvYeTU1uxsX0pGQTwzLzhQz8PSZGP6bVdGQU7Vwr/BxcTI1e9u\neuzrevfVyMHL2tzk8XxfUFXv1M7O4u/wZl7v329hVEZKTTwyMz77wMjpa3Ph5lRASWfOwcXN\nzczQ4WRfb3z+4t3MxcfM197m63ZnZHHs3uDr6Ozb1tzd321NRUNCPTMxP3HLyeBceuVcUkVJ\n+szFxMXJysvkZ2xqZXDx38rHzc7U3ebra2T139HP2u1x9uXo3fpqZlBAQUY8ODtO3MPV/nNy\ndl5KQEllzsHDycLI4PdrWml1VX3Ty8fO3uPa5/L6burU0cvN19re6d7Y5vhcRT4/Pjk1N0X3\nytD0bf5tXUtGTnnOx8PGw8ja6G5teHJ+383Hw8vd3975Ylxda+bZ2drX1+vzdXvd1eJPQj9C\nRj42Ok/bzdZpXuTvYE5IWNPHyMzOz87bb2ZdYvvv5s/Jy8zQ4N/a7P1rZuLa4+NvcOXn7uxj\nUkxGSUs+NjlK5sbJ3/be5XRNP0Zc2MrHycjM3+lqXF9bVXnYzsvL19zb5+9td+fX09LQ1dbY\n3uPX4lxMPzw9OTA1RXbIxc/d0+RtUT9DVuvNxMPAxNPl8VpXVk9s39fKxcbMz+Bla2h45eTc\nzcjKz+L18uDrZ0k9PT45NTtL7szR5Of9Y1pKRk5z2c3KysjEyt9uU09e+/DYzcXBydnk4+11\nbP3dzMvQ4+nf5OpuX15OPz46NDdBUd7J0s/P6WVSR0hUZNzOz8zFxsvWXk5QWVhed9XFw8fM\n0NHW4+fy18/X1t3u6/Zs6ftfaEU1Njg9Sk1P3M3O0G1UU1NPVlhx29/dzcnKzeZtf3361MvM\nxMHHycnP3OB9c3P06Obf43x3Z1peWVlhVzkvMTlETk5Z1sjM2XJi9HZl/G9q18vNx7/DyM14\nXHrv3tDQz8fIzdTm3eRgYmxmf/xmaHJbVV9XX+pwXlE3Mz89RVRL7cXb5OJOXOBaXd/vzsTR\nx7y/w8ne3Nzs3NXYzdTr2tPh7mJUXXtpX15eelVJTFhwXurscOB9TEZLQ0RPSkxvXPxpWfXs\n3fRs7M7Nz8jHxMHK0svK1ONvf9vl3dPv5eRhY29TXmVoY0pObH7t729h8vFtXVZUS05UT0xc\nVEtYWl5lW2by7ePWztjNztDGysvI0szPz8/e1+Xfa1xeVGROS1FTVWhqYvb15N90Wvh3Xulg\nVGJbXH5YWX1aWn1WU3P8btx35tHP2e/Z3N7d6df51tzV4eneWGhdXVz+XW12cdtp4Nfr7nni\n62JZXWBObHVi8Gxb8/pfZmVZbVxVefFh4mhv8Xvg38/Z2dnX5mLd2HruWnfu9+XY7trl79zz\nYHT9XXd0XWRYX1dYbf9sW2hcb/1f5vR43+rh62Hd8u/k4vvk4nfr8m1+4t31be34aGt7bXLl\nc3NybXjy8OPybu5rXmxrWm/78/b49+ptfOTr7uFo8P1z73Bu9m9m+G94/GLy3+7o7XHe8Hvp\nenn87ul7Z3t+c+nseONnZGxcWXTu+O//39x59mlkeuryd/Nt+/n66H766Hj77PXnd27u8210\n93j5e/Hu5uvr93H0Y353ZXFv72j6+/lqePl9cXjz72l0+Glw6vJ+eHZp6uP+debvenxq+t/h\ndfpuderx/u7q+m5q+fBw8W5fcvvs4/lkY/dzaGlmXfrye3Zp7PHu4+Ds5e9ueOf37+Z15OHt\nbnhnY35iavn7a3h39ODjfHr3fn51/ux7ZHhzb+lpXmf1bm7j63b683zq5mV06X397nlu6+h4\nbXr4effw825oaXXs/HNocuR86ezwfnfu5urt7/x3e+Pr7+b2b3j1emxmZmNobWdca2JpZmt1\n+33r5ebg2d7n5Xv27/HxdXrv+Pv6+W9tbmd7cmj0ZWhibH55+Xj68fPu4+36+uzv+3Jm+/b3\n8Ory+f9q8OhqaWVub3Jzd+zr/fRzaO/seWprauz6fml5/e7s+m1yff769vHwc3Nu9Wt4bF55\nbHrt7P7+6OHi3eDc4N/h9OXvdnRlalxobFpYXm9xdl9m8/Xv+3Bt/+vtbV/24vTk5uPp9Pl4\n5/f5/G9xZWxxc2x47uV2fv1+4+999/T689zp7et0fuX5YX1pYWv+eH7z/Xdx+2xtemZofu99\ndOnu+Grr4u7h4Xdheejg5W1la29+aVx1dPLp7vnx7PnvaO7e6u3y7ep0/N3/aGxjaXNjce12\nZ3J7fvtq8f1w52lebW7x7nxheOff6//35fdqbvh8cmz2dHn73+jy+3Li3O9v+v9obnP5+vHq\n5vfn7nVoXWFobnxeYWRlbtrwdnP46/X8bG3/cuHt8Pr45fz05/tuffbvamV+7X5pdt3i82Li\n3/1r7m3x927y623ybmlqamtrbG17dmjpfft9aOzt8Xv/5t3xePXefOxp3NrrZuVj5/7/6+h8\nd35cWF1bXm9a5nb7bHBt8vvvffts5Oje4v3b2N7nZOriYPn/8enyXP9lX2/tdGpmZX7bae14\nbNz7dfj2fHBkafzadXds7m1pd/J+X2jg7/N95+DscHnt6O17e2pp8+rm7Hj15PVybW5meGJe\n7V1ldnvl+XRn13nr2fLg6+L15Vz9eGZe9mpsY2/j9uh9dGRoX1tsYVhbaHFo+XDg+9jP09zP\nz8rHzdjKzdDU1NHY5FxMPUE7NjU2NjxATezWzcC7vsHJztH+Y/Zfants5dPVysPFxsPDwsjP\n1dnPbFliRTg6OTIyNDY+P0ntyc/Dv8LBys7U6F5oYVdaaPfb3M/IxsK9vb2+wsDDzc3M+VZK\nODYzLy0vMDM+R/HXx8e8vcHBxc9/fGxlU15mYFv018zMy8K/wMHBxMXGw8TN1vRYPTYwMC4s\nMjQ6PmLwy8i/ur7Dx8To8m1eVk9SbWpk187Jxr69vr6+vcTGxL/F0mv7SDAyMC0oLC40OEHb\n1MfEtbi8wb/B+Vt19klLXm9Ub87Fxsq6vcHEvsLNzsXBzcjQ4Fw7NTQtKyktLjM5TOHZv7u2\nuLvAwc1dal1MSFFeeHnbwr7Bvrm8v8C/ws3Iv8jTxHhMWTguMS0oKi4uOEFLzsHBubK6wMHN\n1lxNYV1ITefe2su/u73Bu7rCxsLHzNHJxNzV21FQOC8yLyooLjE5QkzPxb+8uLnEys7YXEhQ\nXltQ7crKx8K7ur/Fvr7M08zN1tbNztLkXFVENS8uLSwrLzg9RmnJvry+vbnAztHeeFxfbPzd\n3s7ExcLAv8HIz9fU2P7t3trW19jY+k5DODUxLjAvMjo+TG/NwL26vLy/zNTg+GxncXf83NfN\nx8a/wsfJ0tjZ8mtnefRo/O3z+11XST8+Ozk4NztCS1vw18nDwsDGy87X625mbH9r79nV1NPV\n09LX2Njl+vfp7XF449rd4N/o729US0ZAPz09P0NLV2R74tnPy8/W3dzX1dPW2dbP09jW3uXd\n7P12+/RuZl9od3p+7d3V1NzwaFtTTEdFQEFHRk5YZvbg1dLNysvN0dTW3u/y9O13Z2ZpbG/s\n737s5ODc3d3b1tnY2dXR1952WVNPSD49Pj9CSU9acOPTzMrMzMrN1Nzf6mlcWF9sZv7sd+zb\n19zi29rX2NTV1dHP19ne6n5dT0hEQD49PUFIUF3839nQysfLz9Lf8XJjXl5mZ2hv6+Ld2dnT\n1dHU3NjW1tfa1tLZ2uL0Y09KRENBPz5ARU1cb+vd1c/Q0NLY4Prz/nx29ujq7Onk39/j4OPg\n3N3d3Nja2tne3NPV5XNeT0hHR0NAQ0lMUV988+jj29bX2+Hg4ezq6O7v8Ofi39/d3eDc3ePe\n3d3b29/b1dbd5e39aFFKSUpLSklGRUdOVlpgbfvo4NvY1tve3NfY1t7p5uXg3+Th29nW293a\n2drd4+rf2eDxc2lsZ1RHQkZLSkpIRUpQWF5ibunZ1dHO0NnW1dja3OL25OHq3uDk39va3+Lg\n6ePob2dqa25wZm5tePt+blZTVFRYTk5PT1Fdb3H03N3k4+Ld3uPr5eTg5uTf5+Lc1tfZ2t3l\n9m97bG34b31y/Pzm8vTpZl5ybl1PTFJaYVtSWnLy8HxkWnfd3eT17trc3Nja3ufp+X/p4ODx\nc2Vs5ex58Hd83u7u/W3j6W/85nvo4mZub1ZVUktOVltbV1lseHH+aG/e3+nv6tzU1Nbb3+Pa\n19vh3tbf7erm5fV2b3ztXE9afHdqY1RSXlpVUlFRTk9d7eXm6/Dm4Nzl597n5t3c5d/b1tLX\n2dff8u/28n3//u3j6vtsYFlNUVVZbGlZWF/v+lNRXXD05/Vr8+1we9rc4t5uVWbp39fOzs/Z\naFFd69fR4XpgWmtsZd3Z/fVlU1FZc+3i5v3eyG04PUV8urrFWDo4Rte9u8ZrRUJP5MTG2U9L\n5M/R4k9NYOnX3WlXWPTUz8jP+VxOW/Tz6GNKTltXXt/MzdxmUV/j2M7UblZMTejO0NZaOTn0\nvrS8bEo+Tc3K1ldETkla19XK5lJcaNbIz+RNR2fYwsVxWlNX18fI5ktCR+3N0t9LPlLfx8Ts\nVU5R7s3PdFNNTnzOytFeTV/yz8vpTkVFVMe9y14/QFrLvcX5TktO6sjK01ZET/7LweRQSUpu\nysjZTT9N7sK/4k9ET9zZ2uVXWmr52eH2V01aa9fR7e1e7cvS5l1NUVNe5/Hq3NrLz866ziQh\nW62frTgoLMSoqcgrJzPUrLL+Ni1GuKqwTi0tSrGqu0EqL3e5sspFPD/Wvb/FSj1KbMjSaVtM\nXuLUzvRdYFjhz87UW1JTW93T4+hlVlx/1NXo81tj6+nb09brXF5w/vpkVVZZft/zf11j3+Pm\n9ltbft7b6H1qbWVm7H5x7t/O2GZnbl93+3b9aVpl8vF+4ex4fXrq3tzgfW5faO5tZlxWa+DT\n0u5bWP/Z2v5WT17r1tzifWZ47edscWRcfenkcFtWadPS12dPU/7U1u5eWF312ubvZmtp2crd\na0pLbNPK1FZETe3R3GdbVlr31NDkZ1146eXpdWRo5tTP2nJkb+/4cWpcZure2PRv8eXj53Nm\nZ2BVVG3j3flda+rPzOhpS1rd1s5fQkNOzsXK2k9PZO7L5nlOPmDs1spgVFToytXXe1x+5tTH\n1v1NTFzv0s36V1F6+NDRfl5MTnTm8F9PV2Xh1eZmT2zXzslmV+jfzNJnbW9xem1fcHZ/8HxY\nfuBz6Xxd+15r7/be/VlmZfrN3lpLTd/JyO1VVVvp3uRmWGzl0s/vXFZfc3t9WVdu2tvf4HJz\n3d/i4n356fr67ODZ4nVnYXzh6W1sbGf6fmNVUG7o/V9JRk9o9l5WU1ve2N3e5c/O087Rz83N\nzMjFxMrZ59DJydHc1t0vHB4jMsXMTMa3sazSNTpCW9RKP8i1r6y/3L/N+lc7SM2/ubzNxb2/\nwcjLwlweEhcfSK2747asqKxfJyUuP8O6yr+3ua6yzNtqRkZFQ3bDvLSvtrm91tTN08NJGxEV\nIuKqr8+5qaWpXiAcJDq6rbKvra6ttmI5Mi46ZOHHvcTBuLWyueBNTtq3slYfFBMg1ayuv8mw\npKleIxseOrKoqqyvr7G/Ti8qLz/mxcvTxbu3tbW+0tfOv66wPx4SER/Vq625v66iqz8dFxw8\nq6Gmqq2trdwuJycuecDKxMLJu7W8t7HC2tjYtKxbJRcRHNWsrrLFvqWrOBwWGTumnqOrsbS1\nWSglKji/tcK9u762sr27tMbt1cy0rNsqGRIbT6+vttDMq681GxYbQaOcn6u2t7xHJyUvVrOv\nw8i9vbq6yse3wXjwxa+s2ikYEBtSsKyy1sKptC8bFx7Ynpufrbu3vTwjIjDUrrDQ78e8usPX\nzLu+3Na7rKt4IhIPH76pqrl2vKe/JhcWJK2YmqO2z73FNSEgMrqpsdlc1Laxv87Fvr7K17mq\nr00fEA8lt6iqv1i2qO0gFhYspZicqcTYus8vIylPs6u+U/G+tbbAyby5yeXIsquzOhgOFD2p\noqvreK2sPRwTGVqcmaC4WNW5WCgkL9essFxG1bqyuMjDtbvXzripqN4gDw4hsKGluVW+qMof\nFBMlp5abq9RTyr88JitHuqy/SFfCtLC6xb24x3nWtKatOhsODyyqpKm8ZLOmUBwUFjWdlZ2v\n6Fy/xjElL2q2r9o9Zry2t8DLvrvZbb6qprMzFw0TOaqhqMLNra8zGRIZV5yXnrVUXMVeLSg0\n0a+zfkf2vLG3wMS+v9Xbu6mksi4YDhI6qKSpuciurjEYEhlPm5aguVpWz1EpJDPMra7bR9W3\nsra/xLq50tK3qqS2LBYNEjiqpKe4zK+xLBYSGm2alZ6yb1nQUSgkPrysrnM94bq5u7/Iubnc\n6b2spLEvGQ4QL62lprDHsK4xGBMZQZyWna3VW91JKCQ2vqqqyUJUyLq7wcG5tsfcvayotDAW\nDREtrqGmuMaxsjQZEhhGnJSbrdxl4EcpIzS8qKvLQU7Dub/DwLmywOjCraq0QRoNECe4oaO4\nzbKyOxwSFjudlJmp12DmQicjNMKpq80/TMq+wMS9s7PH+cWtp645Gg8RKrGjp7XEsq4+GxMY\nPZ6Vm6zOXGw/JyEvxaqqw0VL0sDCw7uzs7/bx62nskAdDxAmvaajr8y1sD0dFRYvoZaZpcRa\ndkInJDPMqqfGQk/exr7Gvq+wxeLauKmvRyITEB/draeswbyxTyAYGSqrmJmitu9kQiomMd+u\nqbxMT+rPwcW/srHC5eS/ravYJhQOG+KnpK3Ix6/HJhcUIbOYlp+44vpKLCIq+auksGpJ7MfH\nzMGyr7zhd8KtrO8mFxAbUq6prb/IscknGRcgwpuYnq/OZ0ouIylbrqev4Ex+zMzVzLaut899\nyq6puzAbEBQtvKmos8GztjQcFxs/oJebpbvfWDMlJTe+qKnCUkxo2Nnau6yvvtLzvq2zXisY\nDxxHsqSpyMywzysdFh+4mZeer1xSSisiLFeupLBXSF/lz9fQsaq3yNDKr6zhKhoQFz+zqam4\n0LW9LBwYHeOalpyozElPLyAmQremqt4/Ue/Oyte9rK+/zNS6rbhBIxQRJNespq7OvrFNJBoY\nKamYmaG5UU06JCIv2qqlt1RPbNrO2ceuq7fI2sOyr98uHxMZN8OrqLLSucEuIBobQ6GanajP\nREQuJClAuKepyFRg/tTQzraqrrrP5LituEIlFRIlXLCmr9O/tEYkGxcorJqZn7RtYz0nJi/o\nq6W0+lZc387bxa2sucj61bW3XTAiFhoz9a+ossy8yDEmHR0+p5ydpsRPSjAnLkG/qqrA8nFf\n19Diva2wvMLaxbTHPSUXFCVjr6WvyL21UyodGSmunJqfteL9PCYkK0uuqLXeX1fmzuzJrayz\nus/PsrReMSEVGTBOsam5y7S/NigcHD6qnp2ku89+MScqNcerqrnR6G/f7Pm9rq+4wcy5ss4z\nJRoVIjvJqKm4vbhMLCEaJcWinJ2qyec/JyQrR7SnrcPM2+HU9dezrbK2v8C1vEssHhMYL+yq\nprXJt8czJBkaPKmcm6G2x+wvJCUv3K2qtsbN2N/69ryusbW/zrewyT4nFxMmQrins824sFst\nHBclv6Gcn664vUopIyU6tamuucLJx+lL37mysrvJuK+8RisbEh024amquLet0TIhFx1HrJ6c\npK605ywjJCv+r62wtr/N3GDou7a2uL65s75MLR8VGSo/sqevubO9PyscGiu/opudp66+PSkm\nJzu9sK6wvdDbamy/u7u3wMW3vE8xJRkZKTnIq7K7tLlQMiEcKP6sn5+nrLRaLSgmMsu1r6+2\nvcfiVdrEvrvBvrS36zkmFxckNL6psbiusdk5HhkiSa6enqWnrdc1Jh8qS8WvrLK1u+JObc/A\nub6/tri+Yy8fFxwoS7GvtLOtt3ErHBwq2KifoqWosVctIyIvZruura60v95d383Jwb22tLrv\nOigaGSIvxa2vtLC10z0iGyE6uKShpaasxz4qISg8zbGtra61xd7n3NXJx723vdNHLyEbHihC\nuK6wsrK8ajIgHipSr6OjqKu15zopJCxEw7Gur7O3ws7P39bGxby0w1FDJxodJS/Esry2rrnK\nQyIeKDm/qKipp6zDUy8mLThduq+urbG/xcfr4s/fybfA5lgtHRsfKV+3vbevsLfSLR8iLnWu\nqqqnqa/HOignLj/MurSurrO5w9Xb1dHPw7vaUD8jGx8lM8C6vrKxu8FEJiIpPL6rq6mnr718\nMCgsM1e9trGtr7e7yfPq29e9usv2SSweHiArbb+8tbGyt+ssIiQubbStq6ipr8E/KyouPtS9\nta6tr7W82WJocNC9wmtLNyQfIyY3zcS8srO7xzwpKC1Bvq6sqKistuw0KiwxSs69s66usLbD\n4/7q0cjE4Uk/Kh8gJC36v7+2sre89i4nKTFytq+tqauvvE0vLC88bMi7sq2tr7nQ6vvsx8Da\nUUEuIyIkKD3qzbqztLnMOi0tL0TKuLCrq62z0D4vLjRG8si7sq6tsb3O5+/NwM1XQTYoIiMk\nL1/PvLOytbtpNi4uNmbDu7GtrrC6ZDozMDxR+Me4sa+ut8fQ4M6+weBFOSskJCQoOFXNta+x\ntL5UOjIvOljRvbWwsLG8c0M6OT9JY8u6tK+vuMHFysbBz1ZCNSgiIyMrPlTNtK+ur75eRDs4\nQk5R7Mm9trO912tLTV9q9dLCu7S3wMjMxbu6xHVJNCglIyIqMTlhv7Wvr7rL3l5QUEhDSWjU\nwLu/w8bMzc7T2dPNxcLR+P/nzb67v9JwRjErKCQnLC46Ws+8srO2t7q9wNRYR0RFSmh359TN\nx7++v8HGy8rWcWVbaNDHwsLJ2VE7MSwqKywtMTtW08K7uLSysLO9z2JMREZLRkpb587Dv8G/\nw8rN1epxduzbzMnMyszoSDkxLS4uLC40PljOwr65tLGxuMXnW1FPWlhQXOLMxL/FycrOzdHp\nYmNq7tzW1dPU3l9BODIxMzEvMjhK68m/vbu4tLW9yN9/amJuZlxabN/Z1tjX19fNy87U2eXf\n1NfV09z+Uj44NDI1MzEzOUnvzMbDwL24t7rC19rb2dxxXVhe6tjY2tHNzMbI0N/w/uXp9ujm\n8XdPPTc0NDUzNDU9VNjKyMbBvLW0u8XQ2NrW7lNNT1lsdm/y28/HxMvR1tbWz8/c4uTnb0g7\nNjQ3NjQ0OUJW49LOyL25uLm+xcfR3eJnT09YX23r5drOx7/BzN/s7ufd+nRxXl9PPTc1NTg2\nNjlAU/TPycS+ubW1usHN2OjpY0tITVZt4unmz83Mxs3e39zg39vy7epuVUM5NTU3ODc6P07l\ny8TBvbu5t7jC3OpoXFpKR0tSYurc3tPJxcHEz9fV2djZ4OzsbFI9NDMyNTY1Nz1R3MnFv7y5\nt7i8xNHffFpYVkhNX/3f1dXOxsW/v8nQ1dbQztfya1NDNS8tKy8vMTtO2MC6urq2t7W3v9Fi\nVE5NUE1SYezPyMfPyMDCvsPN0djTz9tpU0c7LioqKS4vNUJ0wriztLi2t7m/znpSUE5WUldj\n7s/R2dLRy8nEvsDGy8vFxcrrUEEwKikoKi4yPF3HuLGzubq+xcrrT0VGTV/x7NbNzMXG0eTf\nz8q/wMnIxr+8wNhVRTMqJiQlLC83ZMK0ra63u8DO1upPTU9UZ87IysLFy83hXl191MW/xsnG\nvre6yl9FMiglIiQqLjhkvrCsr7q+w9XsV0NDT2TbyMrHwsDI3nVfZuXTxL+/v7+8t7jA6Egz\nKCQhIyksM1e+sq2uucLM52lOQEJRbNa/vr++xc/aYlFYatvAur2/wL24ushlSzYoJSIkKy86\nbLyxrK27yd5WTEhBRlrqzL26u7zE2XZUSk1g2r+5uby/vLa5zFhBNiolIyEqND/vvbCsrLrW\nbEtISD8+Td/Fu7e7vcDZb1dMT/rNvrS2ubm8ubnKWD0xKSIiIigzPuG5rqytud1VQDo9PkZn\nzL22sLW6v99TS0VLbtS+srS5ur66ucJcPDIpIyEhJjNB3ritq6u10F4/Nzk6PFbOv7ixtbzC\n7kpCQEZf076ysLW2urm2ve5ANiskISAjLz1mvK6qqrLSUD42OT09U8e5s66yvMHrST89QV3W\nw7iztbe7v7y+0Uk4LiUhIiMtPU/Brqqqr8hVPzY1Oz1OzLu1sbO5wdhLPD1DXM+/ta+wt73D\nwr3FWjw2KyQiIig3Rty1rayuvlI+NzM4Pkbmu7KvrrW+0k0/P0FUzb62r6+1u8LIvsNfPTUs\nJiEgJC9D/ruvq6qw1kY6NDc/Rm/AtK6utcPZXEE8O0bxxLq0r7G5vsXDwc1UOzQqIiEjKTtQ\n2Lasq629TTs3NDpET9K4sK6vutHqSzw9RFjLurOvsLm8v83GzWI/OS0lIiImNErvvLCsrLZi\nPjczOENM67yyra65zv9LOztAUtC7tK+us7u9yMfD4Ek6NCojICIrQFvKtq6ts81BNTAzP0tm\nv7GtrbLB8FhCOz5K5761r62vusDLzcXNUDg0LCQiIyg8WNK4rq2vvUk2MjA7Tl/NtK2tr73r\nWEU6PUhewrWyrq60vMLPyMtaPTctJSMjJjVOab2vrq66Uzo2MjhNYs+2rayut85pSzs6QlnO\nubSwrrO+y9TJvsxPOjQoHyAiKT9fybKtrK/JPzg1ND9VcsCvra60yHdaRDk8TOi/trOvsLrB\nyMzCxG0/NSoiICMmN03hsqmprLtOOjYyNUNF7rmxr7G73XhNOjxIasa4tK+ut769wr2+100/\nMCMeICIuPUy/raursu0/PDUzPD5WvrGvr7bG0exEP0pd07+5tK+2v8TGv7zLUj0yJx8gISg7\nR86vqamtvldBOjU5Oj77vre2tsDP0mtKTVrtxLmyr7S9wMC9u8VfPjcrIyMgJi87bbutrKy4\n3lpBOTs8P07SwLezur7A0m5fW2fPv7u3u8XFwr++xf5JOCkiIyInLjVTu62qqrPEzm9KQDs5\nQ+3Xzb6/w7zK6OLw683Avrq8zczFwL3Hd0s4KicmIygsMUy/sq+tsLe7yO5XS0BDS0hQ7OrV\nw8rKwsHGvrq7u8PW09DOzdtZSzksLSwsLS0wQdXAu7m9vLm8xdXzVk9KPjs/SFTf1cq9uLGs\nrbC0vc7a3fNaTEk/Mi0uMDEuLjE9X9nT1s7Buba2uLvByNRZQjo2O0JJU9i9sqyqrK60vcrf\nW09EOjk2LzE0NDY1NTtNVFlz/tO/t7SysbW4u8ttSjo0Njk8UNvJuLGxs7i/xMnZ+F5OSlBM\nPjs8PkE8NzU6PkBGSE/0yLmxsbOxs7q/1lVDPT4+Qk9f5s3Gw8THxsXL0Nnq6tvY9FpOS0tD\nPjo2ODk4ODtAU9/Nwb27ubrBytT0Z2FgaubWy8fDwMG/xMvO3O/m73RraFROTElHPzs5Nzk6\nOz5CTHXYzcPCxMLFzt/m/nr66tjRycbKyMXFwsjW09Xh3eXu7OTlaFlNR0E7OTU0Nzk7QEtg\n39LKxcXFydPc49jQ1tbMysvGxMnMzM7T39/f5/P+c2/q8GpcTk1JPjs6ODo9P0ROZNvQzMnL\nzc3S19PV09HUzMnNzMzS3d3h72pk7Hl63OX17/fv721dU0lERT8+P0BHTU5YZfvb2dXOztDP\nzs7O0tTMztHM0dzY4N/o+fdyb3f+b2pjV1hWT1ZUV2ZeWFlOTE9UXWBfX/r39Nfc29LV0dbv\n5NnZ19nc5d/W1Nva0Nz66mln/V5ZWFVZXFxaYmNgb1xVUU9bXFRcXlp16+nt6N3U09LO3d3S\n1dbR1tjS2NzY5u95W1hXVlVfXl9dVnNqX3JaXWtZVFtZVFxoXXvs8Nzf1dHVz9nq6Obi4dzc\n2Nnf2d306eluaFlWZGRs+GZ17/l0YGNvblVPTkxUW1VeWl3h3eTc2d/X0eXr4+7f1+ze2Nnb\n5ezs7+Xn6+Xr59jU2NzmY0xFR0U+Ozo+QkxWXfvTx8HJzsjLzMvd3tnp2N565+bi3Nvb18/W\n3drg297ycVdGPDw+OzY0OT5IY+LbzsG7uLm+xMPH13FXUmJqXVhc7NDGyM/Jy83Ky87Q5XRi\nQzY0NjYzLi02SGPz4s2+ta+yub6/vcPnT0hOUlFPS1rPwsLAvr27vsnO0upfTTouLjAyLikr\nOFTz48++t6+sr7jAwcDPWkhJSkxTS0/4zb6+vrq5ubzJzc7vUj4vKi0uLysnL1Du5NjFtK6s\nrba/w7/IUjw9S1ZIRUztysXBvrq3tbvJy8bN7kU0LiwuLionKzp571/Stq2tr7O4u77J/kdD\nSUVCRE1t18zBvLmys7u+wMXD5kc7LiouLConJzdfWmfIt62tsbO5v7zPSj9BTEU4P2/az8jE\nu7Gtsb2+u77KZUk9LikrKygoKzdMWs67tq2sr7O7w81YRkM7PkA9TnDjxsK/tbKzs7i7v8jM\ncUg6LiotKygpLTtKWc++ta2wsbK4wNlbT0c7OjxGXmrqxr68trOvsri6v8XKX0Q4KyksKSUn\nLz5GYsm5r62vr7C4v9pdVD84OjpBSkvxzL65urGwtba8vb3VY0o0LC0sKSYqMztM7Me0rq+u\nrbK6xfhWSjs6Oj0/P13ez8C+trCzsrS3u8vYWDctLS8oIykuND1N2LqvsK2orbO6wsdPPUA8\nOzk7TGrdzsS3trays7nCysl6OC8vLiklKjA2OUXQvLqzra2vtLi5ymVTT0c8PUJEWe3Pwry2\nt7W1vc7RZTs4MS0sKCwuMTtD4svBtK+tra+xt8DI3lJGQz8+QE5UbtbHvLy9vb3LVVFEOjIs\nLy0uNDtOWtzAubixrrC0t7vCzH9aV0pFTU5e4dXNwsfKxWFMTTszLy8vLy82Q0Zizb23trKv\nrrS2tb/KznhbSktTTU5f4unLx8TJX/FqOjQ0LywsLjY6O2bUyr+2sbCwsq+2u7vDz+X+d1dM\nUm1eXd7e5mdrcEo9OTcyMTE1OTtIYN3Pxry5uLi3uLq6v77Dy8PM2N3c42Xo7k9ITkk9NTc0\nLy8yOzo9WNfXy767u7u4ub6/vsbKzs7JztLNx8/Ly9lqVU5ANDAvLCwsNDg6TenVxru2s7a1\ntbu9v8PN3N/Z3vTMzdbKz9rwbVJENTYvLCwtMzI6SGfiyLu2tbOvs7a4uL3G0M3aYdfeddlv\ne2lUTEE6OjMxMDM2OD9BSm3YxcC+ubO3tLO6u7y9vczJxOLP21BKTEI3NjMyMTI6PDdKb1zj\n2M/ExL+9xsW8wsXAwsHCvMHFvs3ea04+NTUvLi4vOzpEeXrewbzAvLzBwsfKzt3UzeXYvsvL\nv9Pq5Fo/OjUxMC40OzxO997Pv7+8t728v8jJ0dnM1/zEzefByl5cW0E4ODMvLzQ9P0pq0sa/\nuri9vby/zdPb18Z9zr7bzsLnS1dLOTYyLzI1N0NOWc/Dvbu3ube6w8XM193SX3TN3NvZdElP\nRzk3NTI2OztK69zLvLu4uLy5vMjNx9be3uvS3/nd9UlERzcvLzAyNTlCctjJu7O0t7Ozub/I\nycnWZ/nP4G3m7ks9PzcxLi0xMzY+ccvFvLSwtbi5usDR08bM5tHBxdDYY0pDPDIuLSwuMzhC\na9PEuLW0s7W6vMHQzMTe4cfEys7XVkhBNzEuKy0zNzpP1cq/uba1uL2/ws7VyczXzcrIx89t\nTElANjEuLzU8PUjux7y6uri2vcHE0ezQ0Hjf1dXU3F1EQj82MzIvNUJLYNvIubK0ubW5wsnl\nd93O5+/e2MnI8kI8PDczLiouO0hT5Mq6r6+1tbe9vMl098vT7dzm1srdRjc2NDMxKio1SWrd\n0cKxra+3vcC9vtZffdLOztXXy8PVRzUyMTQvKSw1TNjMzMG0ra+3x9nLzOlgcdvKvcPMxcLP\nUTgvLi4tKywzS9G/vLqyrq+1wu99d19ZVWfZw7y8vcLNWzszLSwsKiwzRt6+trKvrq6zv91d\nTkpNTFztzby5uLa8y1c4LywpKSgqMUjVurGvrq6vuMpnSkFDS1Br0sK4sLGyt8hpPi8rKCgp\nKzBFzLivra+xtbvLWD04OD9JVNrDvLGur7C3yVY3KykoKCksNFbAsaurra+1wNdOOjQyOUdZ\n1sC5sqytrbC/cz8tJiUmJysuPN65ramqr7a6yGZDNjIzPEpk2sK0rqyrrrK60EozJyMlJysv\nN0zHs6yqrK+3wc1OOTMuMj1MbMm9tq2srbC6v8t7RjInJCYpLzQ4S8+4ramssLa9yP1ANC8x\nOlDZzMbBurGvs7zG0tXdYz4tJicsMTQyOE3IsaqqrrO1t73yOCwsL0RufOXUxLavs7m+yMO/\nyNhrRDQtLC0vLy0xQN68sa6xsbK2vN9CNjIzPkZJX/bQu7e5vcLBuba4vcPL0mo2KiclKSsp\nKzn1t6mmqqyus7vWQTMvLzdHSk9v07y0tLm9vrq0usrsVFt2Sy4kIyYtNTAxQ8Gtpaaus7O1\nvO06LjU8SVNEQ2jAuLW6yszExs/tUEtp39rOy9pNODk6OzouLDVL2MC+xbyvrK+86k1TU0o8\nNTZC9N7a19vKu7i/z+XlzcjS2tHIvb/pNi0wLzItKCxIyL66ubWrqKq3z1NPTj0vLTE5SVVX\n4L23trrIzsDAz+5bT/Pd6NvOz8/TSDc+PTQuKys7a+/WvrSsqay4wtZfSTowMTc/TWXdwrW0\nur/FycjXTkdJV2dpaunKxsjX62tOREQ8NDY5Oj9JT3vUycC/yM/Hzdvh4t3X0dLV0c/O0tfb\n2tz2XVVZXFZNTVJcaPv04d3w4N7n8GxbVl1bV1dSWnzq/GtgXm53cG5qbd/S2+PUysjM2Ox6\ndmpeVk9SYnb99erp49zW1dbW3OX0cmNUTUpNU11mfPfq2M/Kztrd5PFxaVVPUllcXl1fcnLz\n8m9laPt9anF5+/Xu7/37+OHf4uTd1tLT2+n19PZ6ZmVjaGpz7unt7vVyam/6fWBaW1ZYWVFW\nWFtma2xp6OPo3tvV0tTa5e7p5vB9bXX18/X7+vf9fvpnXWFraXH7ePPx7+nqf19u9/307/pt\n9e93fmtjcOr2bGdjXWZjXWlv7Oz17t/T3N7b3+Pk3+ltaG1oY19n+/Ltd2Zj/vT2633/8O76\nevjr6ezn6+PffmtyW1NbW1dcaX/q7+3a193u+35qbW1jXV5yf/Ps6t3c5ur49Ozo5ur26ePg\n3+pubfttbWVhZWJcYmxna2185+rw5u9ud/r9c2NeZmhsfPjy3+Dk5n748Plwbnb87fjt6PLk\n5uz3cPr0/XVmYmdoanF7bWNpanfq/Xvs+3jl6uvh397g6vX2/WxpZ2Vga3x2bmhpZ2Vsam9x\nbm/47OPf6u715uPm4Of3+Pp7b2JqfP51fvf45uHp+/p27/RnYF1dX2p3anH37OPm6ODn5fpt\nd/JtbXnxbW9zfXj8d3tfZmlyfWxv7OLm7eTd3dzg4+l1cnlrZFxmY2JhZ2xvdO/04/7w2t/t\n8el6bV9n5fNpbXl8dG/sa1rg3e73/+vh7Wr6aGpgZmBYUHdq5Nva1dDT2N3ec2BaU1xWXlxl\naeL89u/j/NjU1tvd5vf2b/VrZ2JdbXr772tdXGdjZ19abfVraml4dWn38evt5ubd8ezk5u3k\n39jlTVnva29q5+jt6PvVcXBvdutfVVvv/urp6ePo4N9+6O/0aVlhanluYXFkXHhkZmJo/PVq\n39/e2Oz9cf5zdOft3Orj/XZj7GZ3Y3df92fmcvHo9X5ud2bv7OVo8eLYZOJj7l/t/ttv8G9y\nc3tpWlxWZGL5X9/y3+zbZdxe5nHbbNh1+nr0eXty+95qamnd6/f+7fBzXet4dXx6X+Fq7GB1\n62Frc+9oZf1n8Pd2bWfn8Ot/8vr093n18Wl56Hnocuv+6nvqZufubuLlc2rh8u1reXbpWPdY\nWF1jWGHf+flk7dDxY3D73uZs3tXbd+zr7d54Yf5i4n18XPBYZGxm+mFX6P5f2ubVXtPz02F0\n8tdyc2bb8G10+979XFrj+Vb4Vv7efOHcXe3vdF9sXvv1Wu7n33Zre9r38fXa4XReYvBkdVVs\n5+Rt6F3Z1+bne3v4/FL+cPhqYmLXb/N4cGnYZP1jeOPeXv/L8fRcbHP5ZlT/+fH4XPTZ3fJq\n5tr1X1xg32hnVtXSY19c3ej0Stffz090293eWM9z1GHNVdtqdPRcY1nlXO9V1G5hW/3P+mRU\n2eNdT1jOd01k3Nxzbu3b6+t219prU+bi3WxP4NFm5X3S2txb69TsX13raGhXZHHoTllZ8l5l\nXl3+7GjlcdrT4G/s5+LzYvzv2vj0ftXdX17rdfH6YPP5/2hqcV9dUU/nX3dl6d3o5tfi589q\nbWnr5GtUb9na8mrZ431p3X55T+h1emBj217eTNr1Z1xZc19+Xvjt937m6fnpce91+WLr2GRs\n49bX4V7Q315YXe/jYk5r3uHjXuTe2WdP81/vS01s7Hpm7M3J3uXd2OplbH1yZk5qbWZd9+ng\nX1jvfddTcH/q1PRs4udaemZ1fV5eY3zue+7vb9h5fPfc3HXd4eVwbV793uluXWrs32Ro5dfz\ndl1idE5dZWRcWnnl52du4uZ17uLn3vDubu3c8dzh+XHi6GBuWHtpZGdZ52vpY3LheO7g1Xbq\nZXP4X+Zr9W199+XkfPbr2u7oZ2//8WtaZ2hxW2d3fvj8+vFx7O39/W3e92h89vJmYG7za2Br\n5Nvp9+rZ3/Zk3tZ9Ym/n03pubN7vaGFZ7HTuXnVfZnNd8mZmWVnv6fVlYejf9W9u6unn+N/a\n3d3x7s/he1lTcmBdW1luZWdZZd/23fPY2+HU9+Tv2vh14VpmVV/o7t1sbXp0+GxmXFxvb3hq\nXt3n6XNs2/XsdmPu5ujx72164+j73Oh7a1tgWG9qY3Rl5Gbh1ePYd+Z67fVl6/dkZvDo+Wxy\n6u3xbHzmZ3xv92hgeWHa4Oju7N/861h6+nncX3J+4fLx6PbhdWNbXlhUX3FlYmjs0djh593b\n6+Pf53vp3nFoZG/4ZWZaZOzq8XJ79vT1aXh5a+bo5XV+6HDxdmRkWfR+a2lr3eDoZ/bX7fdp\ndO35ZGdudfP8eO/n/ffh7utna/X8XlhZceTvYV9x5N3i9X7i7dXbdO3p5/l2ZG/pbFRVYHbx\nZlpof3R8Y2rz7fZubXfvae/f/f3q2tHd9+Xk3etyXVlmaHRtZe1rd3xrdXZ5/u/p7+Z+8tzt\ndV/tfW1eZ9jm62Nl7vtgXFxha2xue/Tj6ebpeurf7XppZmt3ePPn7Hnt2+Dj93bv6fFfaujz\nYGNi6eleY2jl3+9z4t/zemNoaW1kav5z53lq7/H2/Hh05/3tdu7ccv5x7vFjXFzu7GdVXOTY\n7F5i3N3ld2r34+B4fu7U3mpmbPF8am1uZ2929vJub2N7eu3rZG/s3/Zu7+Pl9V/v8uv7Yfx8\n6e7z9Ph9aXJccGlmY1txdPBfWv7p6Wl4fubj6ers4f7r7uTn+/zs6+z+e/nu4nB7YW1z9e5v\n6Pji9GlsWVdVYWpWVnDi2dx96Nr2bW33b19YYXV6bmrc29fbcOTi3Plr6efb6Glve/L7aW12\n6ntdXXl4emf+52tgX3P03+ny6/hsdfHr9PJzX2ru8Xd3b/xtbXh/e/L+afr7+mtpcu14bPbj\n9P7u7eDj5fPf6e7tbGph/ut+fHl89enuffTm9HReYff0b1tuZGdkWmZpevZncOrt7Ojv4eJv\naW5tX2VmbGv06v7m3tvg6fHf4fXs+Nzse+nf4XX47uxjWXR882BbXFvq/FpOVfvo72vt5Ohr\nXGLv3H15Z37l8+vt4OB9ZvTq8/Xq+HZkZvTh72RqdurvaFb93uTk7vbz293u8ffj4XlvaV1l\nbH9qZWp472Vgcfx3XWBsYvzm69zjfdzc73ru3+169Hr0bXL9+OpvcG1lYmJ2d/L62t3z9/nU\n53Z89+tmaXBobGBpZ25rYW975d96bt/u5Wxg5+/oavh47nlf7XH/YWF05t9zfnX1fvvu8e3l\n3/x4b9/ddXN36W56dm9ffPRbaHrtfGldbu9nfXzucmr45OteamXy7fv86eDu7efz+fPr6HV1\n69zj6v79b1tvbHVtXXRvanHy6HtfX3Pl7fT+++/qf2ju6nlhYF/p8GX39uj0+vdzenfv4d3q\n993X6nps7P5qXWL9b2ZzY2xmbO1yc3h46vz26vf7ffV6bnT4+epvaPjq+GVueOr6fft28eni\n6/l5ZXFy4eJpYG3e5WVdbd3tZXbj6Xzj7HVxb+v3Y1tid3z9aXB+6+j1c374f+t9YGL36ejw\nc/d26/5qevvu5PTs5u/9amRwc2NbXV9t/3BxfO7k7mTy29ba2Nfc3ejX6WJeaHZnYl1daGdc\nZWrp5fT78v1rcnBvb3trbGt9/ubl7ePn+e3m6Htkc21lYmZqavfm535t59nb29/o5+LocW9n\nZ2NfXl9iaPd6c/7u6f1zfXV5+mxoaPbsfWxraHP46v5q/Ofa3Ozo1dfmcP7r73JtYVxcX35q\nXFhjaHFsWV5eb+be19na1NPke/n67m9p6urtb2tvamRebXJm7+7+cXN8/Pfy9W5z5trwb/fc\n2+5vam9mYldYXGZ48Nzc4ujc2ef/Y2hwaXBfW1JdY1148NjR0NHX6mxmXV1SUl1t5d/c3+He\n4+fg19x+ZmxqY21meuLn29ji5H1oX11bWVxdXFtcY/no7tzj3Nbe5GVZZvttX3D+bvft3ud2\nbvHgfmxoamxeaWpgdfbi4vLi3eP4fe9sc/Pv9eze5uDyefXk3+1sf+x4W1RXXFxcb/Ho6uPf\n9P7zevN2ZWFjfP7uefzi4Od8fOfq+mxjY2FxZ2dnZfHs/GtgX25tYVxtemx3+drTzsvMzdLV\n3HRgVlZfa3FgX215bvd+5NXX1dre43ppV0xJSlJTVFBWZHBz/uze2dHNzdPq7e5sWFNXWVdV\nW3b/5trd29nX1dvj4NzfZ15fZXBfVlZefHju7dvS19LT1tvr6Ohxa11fYFVYWFxZUk5SXFtY\nXG/d09rRzs7W29jscmhmalteav50anzx5ujp4tzl5Ol5a3h3ZGVVT1Rm++7s8OPV193l6eLk\n+mloa2JdZW1gZnzz/W/16ujy6t/h5mxjYF5ma/Hy/Org7mliX2hvYmZ1fPf25t/l5evu9uzr\n/H9u9+fl/vHe4Obv+nRveP1ubXJ6b11ZY2hcXGdoZmvv6Xt89Ofi3+To7P7x8n9rY2V283py\ne/l46+x8+O/o9Xp2aGhjZWxpcfHc2t/v59LW4e/r3uX+c2deXm93Zmtmbf/ybF5s/HxkbHv6\n9Hl1dG3w83NwdG5vZ2Nocnj3dvvp4+T0cW1lbu/z6+bn5N3Uzs/S1tzk7PFtX19mXFtZXmNe\nYl1jXF5s7Ot+7NvU3OLd4t7a4/V0ZGNeU05TXm95bWBofvDvfXd5/PN9dmxycWpwZ3Tp3+Du\n6uHZ1tfa3+rv8vhsaGluam1vbnFublxbX2FmdvLp7O7k5un+/Ojf5u7q5X5wc2NhcPp5aGr3\n+3JlY15bV1liYWFg9eXj4NzX29ze3ujt6up7Z2xnZGNeXWVodvfw7Ove2djY297o6urm3N75\ne3toX1pWXGT8+GhhZmNsZV9w+vzk4vLq4O1u/mtbY2dpZ275effr9PRv+uPi6/b6dnl1cXJs\nfefd2+He2+Pm9m5qcv1xZFtf8+Tm+n/u7uzsem73dmdhZmp88W1scO3m+fZ6a2VhYlxgcnNr\nY2FqZ25tdu3m4u/66vD3f/Z4cenk39vd3vHq4fFuYGFdXGtvfe7m6O7+8/L37ubk6O7x+nT4\n8314c2Rldf72dW1pZmtmaXpxa3J5cWhkfXt0Y2Z65tzl5+bi3N7s7+3s6t/p8Ojp8WxjZGVn\nZ19dWWn1fW575ebucn3i3Nzj8353b2dmbm/56eLf3tjX2+Do+3P0dWFbYXhsZV9q+WtlaGxo\nZnpkW11jfPTp4+vi3t3g/v3t39ze3d/b2d33cGtfXl1aXF9fY2Nlamd5+vT6cfvp83v5+XNs\nan/zfX52fPPt7t/d3d3f3N7i8Pzv6eZ9ZVxXW11cW2J/9XV7+3x1dG9pZ3N8bGhqeH78/fjx\n7+rf4Ozi2Nnj7O3s9HBjXFpYWFpXV1xue2xt8d7d29XX2Nvm5un1dv9zevhva2NqaG19fndz\nbGZiZWxwcW9tY2Nqb2959f53+O3j5+vc4+3r6uzq3uTr6+Lual5YWV5gY2p+ff7tfvrp6f5g\nXV5kbnxxe+rp4+jv5d3gffzs5ur3fXh8d/j3a2BgZXF6a3H67f138fH47/VvamV6fmpteujt\n9unx8ufz9/3zfPru9ujk4efn7WxsYWdydWljcvhy++b6+/57bG5rZWxrdvrs4Obq5+z2eXJm\namppbm5ta3f2fnNxcXnw8Xd3//3q5eXm49/m7fh58Ozyc23u6OrtcnB3dnJzb2lvfHt1dPbv\n5ux9/n1vZmBjbG1ze3Lv5uPs+mpobV5cX2zp4Ob1+uzv9nn/cXXv6/lv79/l9u/x/v51dnP5\n8vbxff38dm1kcPT/bXx7ffx09+Xf3t7e+/nm7XVjaWpoY2r4+33o5+71amFeWVlfZG5wduzd\n2dre5+ru6vF/9Ojh8XH+bmZoam1oa3d2bmJp7/N+9u/+c3RubH3u39/sev/r7vL78/L183pz\nd3hubGZt+P1+b3BscvxvYmlsbHHu9Xf38PZ+f/t0cP5wXl5qaGn46ufe2tva2+Dl3+zyfn33\n9/5qbW9yYmBcV19pbGVz8/bm4er5/Or5+3lqdnF5dHJwc/f4bGz8++7l7PHh5PXv8fD8/2lb\nXmdrZGF56+Hj5+bl6uzk7nx59O/r6ezq4ebt6un9dvpzaGFgYVxeYV9iXlpdaGVfb3ny5Nze\n6ePY3vp3bGxvbnrr4t/o7PXu4d3g7Ony7eXh6Ht2b2RubGNqaGRaXWNjZWpuevn07ebl49zf\n6Onp6e/7eGtoaGBdZGdv9nJrc/j5+3x1aGdxdXR8+HZ0/nRseO7t8vx6/vx+7urq7u/k3d7b\n4ebs+fz+ff//7u3zfP3+dXt2dmtqbWNdX2NiYGFfanx6dPXi3OHm7Pr5/XVvfft/Z2BeXWRp\na2tobnv+cXbu6+vd3drY2Nvd39/b3urt93z97/RkantzevT2eu36b2tqcXFucXBtdm9tb3J0\nbGNiaWZbV1tpefHm7Ofp9Pj19nFpaGJgaWtv+ujl6+Lc4d/a2Nzi6nrv7vjz6uru5ez56+ru\nf/9sYG9va3Rua2lgWlZZZGhfZm1pcvDwdHb+/v9tZHD9fXx/9e7o7fX67+Xp8XZuaXh9bf7n\n4+rs8Xz37/p8emxs+/r78uXd3OX66u/s6vTyb2lkY2lkcm1scW/4e2xu/e35f/5vY2p8b3vx\n8nhz+np9+3puam5lbvZ9ffnm6Pfn5+bk7vp7enBwb2z77enq5OHn6u39fvTw/2xoaWxx7/d2\neOLg7PhrefPyeGZra290bWdmcW1nX2BoYmFtbm938+Xp7uXld2Bt+/btfn/n5ODg5+np3eLq\n7Pj45up+dWlv/3BgY2FmcGJcYnT9fn397+3o5fH69O/49Pj0/3T79vX49HdqZ2hoZmZcWl1f\nanR0b37w7erl5O3m6+fh6evm4d3g6O3o4Ofq8ezxe/13bGl1cWd2fG1udW5ia/n4bmBmcGhi\nZmRhZvru9O7r6e33eG795+nx6evt6+/8cG5xcXV77/LwfW17b2hud3FtenJv/Hrs5uLm7eTm\n4t7k497d5nd5/HRmYWBdY19cWl9hYV9ZXHbr6/Z9/fvw+25sf3hzcHnu59/h5Ojd2d/6efXw\n+mZiY2h3dHByc3V3f3X88O3q7ev+d/Xm3OHh39vd8Xhx+XFoc2ZbYG9ta3n+bmtod31tbWpu\naF1dYmlhYWljaPvj3N3f3drc4OHl+X3t7erv7Ovu+X14bWptfuvzfXdvaGNseWpfaXd49vPu\n6u7m6Ovj7/N6bn3x92pmbHjs/3BxcPB3bW95c2pwY2Jsb3f47vTz6vPw9vrl6O/67ePe5nFp\ndX3+bF1mb3T1/3L+9vDs4PL36Obe6u/y9XtxdGxzb3D/fXT7cGVobW1seWxhcf5pbX/+d3T6\n+f/w6/bw3ubyf/7r6e/86OT8fe78euzsb2hkZ+7ofG5tb//2dGpv6ePzfu3j4ej7a2v/7vNs\nZWz7/m9vaHP3c2VjZ2dseXtv/env9fj37uv28fd98/Pw9n7r7fPx6t/c3+j57+DseG9wcW5p\nXlxcX2Zs/Xl1dHb57N7nfHxrYWrv9Xru8fV8evz57/pzbn73e3h8e/98+XpvePj6bmp1/Xp0\n/ffw5ux0a2Z88PNxdvb07O3o497g5+jq9PL1/mtren7+9OfzffX0bG76al1dW1hbX1pfanfy\n8+/v5ePm6vP88vd7bF5fdHhzanfo4+bh3+Xk5Ot4bXJ1/21ue/r17fLy4OP86+99//dxZnBu\nb3x77/Xv7+zs8vf6eWpraWlnZGdodvl8aGpten50cP/v9/Pt8PD0d2pnd375/P75//Hp5ebm\n6/j38vP46Onv7ejp4+bp721vcmZnaGVlZGRtdn5uY2Ntb/jtdXf58fx55dnc39/h7/v39vxu\nZ15gXV5ucGpkb/5vdG5s+fLy7u3s8uPa5eLi4OHo6u/u/vp+Z2pwbWdeYWhuY11jbGxnZm1u\ncPzx9/rl3dzg6OHe5evw/vz0/mxjXGV0cGVpeXH36+nt5uDn6Hx1+3hsaGx49O70+3N+83Nv\nbmJrb2hiXV1eZGt38O7l3trc5d/k7fH4e3d2cmxma2lv7ujr8u3q8ejr/vPt7PV98+74+3hr\navb7e+98dnh4X1leYmhkaGhof+nt/H7w7P5tZ/nv+fx49+vh5/bp3+Hi5n37735taGtnam9s\namtsdfR+cXt88vP18vfx7fN+fP17cf/47+jvfOzg4+34cWZva2ducG9vb356+ez0eW91a2ls\naXZraGRqe3z59e74797l7unp+O/lfWhodHB1dnrn5eXn5vlq/Pf7fnpsZW5oYmRkX2d++eff\n6e7w6+Pk6uvx7+7re21+93NrYF9pampuc3p9+u/x7/vy83hveP5zeXx3ffL8bmdseu/y/X5+\n7vr97Ofg6fl+8Ovt6uzx9Off5+ru+HZ2bm5uaG9nXl5ia2hhY2RqdfPq6fn+/vL28u/2bnbr\n/3v5fv3o5uju+fbs7O/3935yb3VuanRtbXx+eXF6efvu8Pl+8ntyc2pueG1ubXr79evw/mZx\n7urn/v3r5u3y/XX97HhreXRxfnpnZ317aG5ubmpv7v5+7t/g7+zr9X15+/D8+3dza3ns7vD2\n/PXx7m9wdWNfXl1pamheX21teH1sevHt5Ofs49vd5+3t7/71bWhqb/zz7+fm39zj9Xh8cHn0\nfWdocWZrZ2JkZnTx6Ory8+fm7e30dH3s7/PzdmJiamVjcG1kbG9tcnlsaHD5enn1+H/+8/Tu\n8Prw6fr16+fl4ODo5d7k9+bk7/luZ2prb2hfW19uf/h8f+7t7Ozu5N3ybG1pdXZpZF5s+P5v\nePz37vF7fvTv8H1oZ3T++3Z/fuzj5uji5/vs/GpvePR5eHdpdHj/aWr/eu/6b27v5/Xo5ePf\n4+Hm7e75c2ppeft7cXLv8313bnLz/mNoYWRrbG1paWhoa2VqcG5uffr55OTn6u/r5+1/b/f5\nd3b27fD27uvq5O30eP3x9Pfz6OHm/P50b3NjWVldYW/8eHz06+Pq6/7x7vP4bGv66O1xbPx/\nc25ta2tx/n9mY29/dm9ubmZkYmV1b3r7/Ona2t3c2tfX2uTzffLufHJnbXFpcPX8+319aWZ4\ndmRjbnb56PJycWdiaWtpdnX8+3j27Ov7aGN5+X34a2h78+/s6ejo4+Lv8eXo/nZ0eW9qcXZt\ndHF1dW1oevd1c+ff393c3+nt73tpZWZqa2Zxfvd5d29ocnFxaWZmX2l5cPftfXV49+/z9+vp\n6PX27Oz6+Or7ampraHR4fPLv6/Pu7+7s6/b+6+bu73Zx8fZ8dvt1a2NaV1tgcHN09u/e4OPq\n6d/o7XVjd/Hu+m/68/FzZ2dy/m1xa2h6fHFobu/x+P9ve+7r9/Ho7eXe6vH473RtbG5zamhp\n9uTq7/t89+vp7H5xfXjw9nHw9u/q6uh5dG5jYVxfZV9eYW1+/+7+ffvr4O18ffHp7PD1+/jv\n+/55b3h1eXp6/v/17Ov8bGhs9ef5b37v7Ovp/nFxfn51bW5+/P5+8uzi5fF/dv51X19mZ3Z/\ncmx5/O/wem10d29ubmxwefT7/e7r6/N3fe7q9v349eXh5+/n4er0em1z/mllb3JvbWViZW/9\nd3Jtcfnx7+7u8fDu7+7y/u/vfXr68Hxydf53/XFmamlza2txbnd8b2757fHv6e396OLu8ufh\n3+X4fe7m73xuam1rbWhy/vn5cWht8ur7ent6eXd7cmhjaXR0dPny/e3q7ubo9Xr893Rta2pp\naGxuaW/yfH3w6d3b3t/f3uDl8PX5+vf4bW10bGViaGZla310aGd07uvq7Pr7+nx97efm6ubh\n6+zvd3p0cWVfZ293bmpkZ3dtdn7+7+bn+O/3+Ovt9vzt/P17cPDq4On9/H3s5+9vbfr6+Hh0\n/vbt8v5//Xdvb2tudWpob+3n5Ob3fHR0fG9nZG18/254/nr+9/n17Ont6ero7X1zcfh2cnlx\nb2tocHnw6ePk8vp4/u56cvru/PLl7/x58v169ezl7X1rbWxvdmRfZmhpbGRgaGRrefLl3+fs\n+Xj9ff1wbX37+HZ7ffHp7+zy8OPtfXJ5/vn7d3hx++h7bnR3eHhsbvZ+/Xz7eHjp7nn9/HBr\ncHd2fnhv9urp5ejq8vfu/vp2amlrY1xjamZscGxubv71fP/78O188Ofs6e32fvf39e346+vt\n7Xx2dnFnZnh9bWdmaHH/6u18f/Dq7fzt5Obh6v/1fnR3a19bX21sZmhlZm5raXD37Or7+e7n\n5evq6unl6OjucW5pZGhlaXP9c2hwd3x79O7n4uTk5Oz1f/r8b3x0Z2du/XRocH11d3N0Y2Zt\nbmVgcfp+8+7y9/jt6Obh5urs7e3z8vF4b//5d2djZ3N1dG9reu/u/nZudnFubm16+vp9fvr7\n/Ph+dvHl6ff5fO7l7v598+zp92dobmx8cG52dffx6+bk5uv5dnh4eXpwYWdyc21yfvf09/br\n7O3w+vVx9vtramVqaHjufXH99/148/T+7/X65+jw7/j693Ztb3R3e3t4fvHu+2xpa3Z4bGVn\nb3n6fnXt6+fn5uDd29vm8ebk7XxraGFeaWVoZWNzeHJ/8fHzcnH+fX52bG9vdHr8ffny/Pd2\ndPv//v73c2n+5uXt8Ozq8Xd/9n98+v5qdPj6cWd1eXV+9/F59/dzeHRxb2ltamx3ffp5fO7v\n8Oju9Pn5+35vbHBub/h4c/Lu4t7j7n37fPn6c/Xu7u5tZ298b2JqbWtxaF9o9/J8fW5v8O3v\n+ent8eLj5OHs8u7+bnX9cWZpc2xrd3JpZnRxbXVx/PTyd37m4d3e7Ong5+fj7n357/b5bGdi\nZF9cXl9eW15rd/Xt5Oru7+3s+Xj66vdx9e7r7Obw/Ph5/PDt9fJ+dvr4f3Fubm5+e29pdPl5\n/P99/3X+fnJ8b3J6bmp+7/7u/H7g5O3x8/N9eHR3/H93//t3ePr9fejofnD9em/v+nZzb/r3\n6n9obXX15+f7cPXx+f5sa2pvbGp1/vTw9+7v6+/37vT9b2RlaWlubXl8dP/5/vbt7P3x7+rz\nfPf7/f/+7ezq5ubo7ebn5uHw7/rz+XVnYmJfX2NdWl9nbWRhZmhtbXV69OLk7O3r4ujm6PDv\n7uTh6+7s7uvuaWRmX1xdZ293dnN29+778np55OTv6ebp3+D2ffl9Z2hzX1VYYGRmbnN0fXNu\n/uzq7fn4/vfu693c3t/s9+nd6nT08vl8+ntudnFiXGVtZmhvb2x6/XJxeHj58u94dXv75ebu\n6un2dP90cnx3b2lxfX52fnb87/V8/PPy6Or1+X727vDq6+vq6/L7dG7/b2t9dW9naWluaWxv\nbnT/+nh++Ph6dnx6b3h6d37y6e/t7O736N3i6ubm5ufu+e7q7er7a3J+839rZmZpYmFqY2Bh\nYXH5dG7+fffu6+Ps5+Hk5fv++/P+cGRfa3ppam1tenz38+/j3Nzm6+fr6u3x6u72//h6evHx\n8nZ7+3ZsWllfYF1dW15mcu/o7/31/3199Ovvev7z7/vs83/+bvr3dG577vZ+7Ovw/H1xampl\nbWdmZ2x6eXp5+PR2b//u6fj68/Hl4OX07+Lm7Hx7+Pl3bnJgXGhuaWltbvv8dWtsc2dsfvR8\nc3ZvdHr3+P/56Ori3efi3uP7a2ZpbWRkZ27y4uPx7+jl39/rfW969XtmanJpfG92ePfudvvy\n7/777u3o8G94dP76bmdt+W/37PP18Ojt921saWZlZ2lrfX50+Pz66fB+7ePu6+nt7Ozv6+zv\n7ubp7u3283ZpZGlraHhqdPd2Y11fZG19bnV8eejtfXN3dnF0b33t6vL9/3/x5en38vP08vfu\n7ebp7O3p/Gx5d2/47/1xbndzfHFlY2dpcnZ7+Xb3+Pfx7Onn8e3n7Ovv9f37e2tmaHb47m50\neXj+fW1rZWJsb2169fHy7vz05Od7aW388X52dn/29vZ7/O/8/G9xd/bwcvr28vX79PTxfXh4\ncnZ89ndoee/k6fPy+Xp2amdwb+/qbmlu+Ph9eGloam9vZ25yc3ZobfLufvfz+PDl3ePs8vb+\n7Hxy/Wxqcevr9e7s5eru5+z08/j+bHn+eW55dGZlXmljX2htbm1ram7w+292cv5+7+3t3+Pf\n397a3d7h5eh2dWlnaWz+a2NfbXtod3Vhbe7/c3h+fn10dXbq5Ofs8uXn6Or1/Hl9eG1oZGx6\nbWZobnX573N4bGl5/H5uf3Zqdf59+PV3c/jv7Pb++Pvp7fnxe3p7cHz8fG5sfvP/cHv3+3d6\neHR2/PpraWn/6On3en3r7uz4d3N69/t7cXn/+3dzdu3q9X5yfvtuaWlwbnB0c/b38+jo93v3\n+Pnq8Hr47PL67+7yeW58dfT3dnZ++n58amdycnD8+Wxt6+b9b/fneP3n7vbu5OTvcWx7/Gho\n/3BkZnZ7aGnt5ebn3+t1/ubqZWV19+Xu+PX58G9gX2Vx9P1wdG/w3ef7bWZo/PF+eP/29n3+\n8vL2e/Xr7OTj6f35/Hv+bmhreGtlcPb9bG5x+nZrbWlpbvP1+vnt5+rq6fn18vf1635od/16\nbGx0cGz99/jw9u3u8e73+uzh6nR593d5fnZgYXZ1au/Z42RcYF1SWnfv5t7Oz9bwWU5MUmHc\nztrk3uxvYWVYW3Xt1NTX321gdODo7/FzaWhucGlyeGljbGt293xu9OTl5X52Z2Z7/vLs3+Lq\n/fje3+DrbGFcYGhfXGBeXl5fXF5se/Tm3t/a3urk5err9Hp6bm98c23+6Ob2fHFsc/v7+vl4\namt3c2psdXP14ub6/PbxeG95a2tuZWRz8OLh8Px4dvTm+25+dWRhX2R86+18Z2/89/5rbG1v\n9Obg7HR0cP738ejufv7o5vt3dnhsaWdn/PL1e3hsbOne5ufi5+vl8nJ8eXFvbF5nfXpmXnL4\nef31/3z2+Pn7dnz8fnZ47ft7f3fw6u/u7u/78uzv9nvt7Xr37X58eGxqefvwfW999u/u+Xd1\nbHFwcfHm6Pf68/v492pfZ/r49vV4+PV9ZWtucfb9/vrm6ePl8vXs3u7t3+n9furw/ff+cWhx\n/WxpYF1re3tpbH/27ujreW767u31cWlqZXZ+d/zr5uno5vD073h4+nNvbfv3++zp7e7j6/np\n5ur3fG536n1ubGltdXdoa/To/W1wavz1dGhhbW5udm5oann79vT35uHzeG/t4ebu/PHw6ej5\n//7r/WxsavN7Z2pt/PR9bWxqan58bm77+H14cnn49nJw9u7l4vJ+/ujh4/L39/P9e/73+3Zt\nbWNncGpvbGxx/ndy/fV+dm9tcHRybHBscffu7vru6enp4+Hm7O/v6+Xl7ntrbnhubm9oY2Nw\n+e79e/55ePHi5/xt++z7f+vu7uzt+XNoaW5kYWFkbXBpbW5nb/zl8u/n7uvt6ODe3/Tv/mps\nc/5za3B/93398m9neW5ob3zu7/Pr6N3d6f52furn7Xxvb3BxalM/V8fJWky+w0FB7MlQMljL\n2sboe3Pv0k9HaF5e8se3u/5GU/5qP0ftc+LMxsXOcVVfeFpLbMrVdl9JVnBWW1FfcP7RzdJm\nWN/X++vrWl5VVW/s2dP5dfpXYNPN08/Z2u5l82lSWv5+eOh7aV5bZufp8+70WE1PUm3f7PH+\n7ux03tHZ6NrQ3Ot47m9aU23tXVZdYX31/u3kc2t0am/q8O/f7vd6/eDhf/LceFj44F9de/hj\nVnPa+m7k3ONpbvtzbOhzXPntffZfW3dcZO3i3ubr3/9bfujs6m11dlpZae7o+e/i39zf6+3s\n5OLi725tX2lpXGxvbWdmaGJu7uh4ZWpmfOxubX/o7njs7Ovq7ujf39/l5/l2fW55e/T8b29p\nXV1rb3Jtefvk5efj9P9qZ3Xz3vNydml1cX1tXGrw6uzn3+v9dWheXGh/6+rq597a6vh5ZGbw\n8PXu6P50e/H8bHRsbfXz7f9zYmn2bmdxefx88fF8fvZ9c/Jxb2hq9f7+b/vo9fLv8XhnanLv\n/nN5enpze/fy8ez5bXzl53N19n10fP3q8efj7/zv4ej3d21qc25iZWtoaWlnbf3p5/Hy6Ovx\n9v5nbvH3eHb/fPH9cGxx/uzl6v51aWr29nzu6n54+Orn+ft1anF1/2939PHx/fj69n117v5+\n9G51+fVyaXJyenV99Pvw7ejk9fbxfnNmd/1nZ2phYf3t9nB2//Hs9v39/G547+rm5evu9u3n\n6ev++vn7bWdtZmhoZ2Vtb3BuaWh87efv+Pvy6OTv9vpy/+/68ujp9H9vbm9vamlx/P1/ePt4\n/e/+e3Z9+vPw7vf/7/Dz9vfw/2z57fz2dmt0enn9alxiaXNpYmFkbX/s7eXp7Orl7PLl8Pb3\n9u789e7r+/39fevu/HpvbnNsZ2Vla/b7/+re3OHo7v73/25iW19scGRhW1hrbW96cn/393j9\n4uDf6nty9t/k6u7z+vXl73rw9HxyaWJicG9qaGNmc/v77uvx5N7g5t7g9/vy/O/leGtsZ11d\nYGFhXl5gZGRoZWxtdOjq7+fh4+fe3+Pi29/49/br4nh2c/7+Z2dra3F+dWFm+vH0eW/56OHx\n8+3p5/L6dWlnaW5sbHp9eGxudXNvaW1pbft2cXH66OX0+Obf3+Dg5u/07H5udv3t9nRudHFl\nXmVoYV9pa29teujj8/3r4dzc3+Pf4ubg5Ov7eGtpbWtlXl9lbGhjYmZx/fJ7eP3v6ezs6/F2\nb334+3x3/HB29//78/z76+n+fOvp8ff8eu/q7O/37Ozn72tqb/rxb2lja2xgXWRjYmVmb+3l\n5+7r6efs6eTo8fnx+Xd+7+1+aWZpfHdoYmdtfOrn+P/x6+Tr7e32b2/v/3d9dmxmbXJ17/Dm\n6Oji5+x4bG9xaWdsY2Rtb3Nxa2t99/P3++zv7Ph28+fr9f378u/u5ul8fuzwb2NtbmxraWti\nZ3d5c3T26Ofu7+jj3+Po83n17XZnam9uaWdqcnVpY2hmaXJtaXv18eXr+une4e706e729/b7\n/u/u/nZz/nx4bW50cHx1b3Xz7erp+/zo5PP4em1ufGlramh0e/ttbnpxcXj1/H398fR/b2r5\n7vLr7/vx5+bv+HVzf3hzd/n+c29vc3R79fdta/n3+XJ26ebv7PD59359bGxtbnVvcX78c3Pz\n7uzo7O3s7/X0fnz17+x6dnRrev58bnN6bnVzampve3Rv+/Hy6e3w7+rd3+r9+3pwcHD+/m5v\ncXhxbW5namZhafl9bXNvb/ro5u7u73x97Orw+/Lp5ufr6+3n+2xt/vluamtra3b0eGJnfHds\nb3z68+v2bnr39/11bPbs6up8bXf29nZ99fx7bGxq8erv5u33fPn6c37+cXFpcXzv+XB5d3v6\ne3R4fPb6+3N+9/x+df7r6evo7Pn5fXJnaWhjbXf7cmp5e3BtbXh7dfPh3uPq6uTteGttc3Fr\nc21kb+vp8PL15eDt7vPt5ez7b2tvenRqaHP+bWlvcXry7Pf69fLm7nr68/X/fH7+6OLm8P/8\n/+n0Zl9jYGJfZnh5dnlzbvtwannu3vr42tnn2tbcW8rPPGny6v9Rt8U+QdJpQXvO09pQbE1c\n6T5ebK+qtr0zLBUcvquWoFFju2wlGzS6n5u4UixJKDq068NPVno+VHrPtdksLr+svmUuLlS7\nrsFuTEdCRETNr7K6321HQ15mPTjmubK0zzQrM/nl9bO1zUQ7S0Jyytt5Sv7Hx8xMRFzHv9Pt\nU05CRUVcv7rCS0hFPmdtx7+5ztRPODw83cK82l9mQlFp6vzM2s/ZZ2RFT2vs183kbvVPZFZd\nfMvB4uZd7/xcXEtPZeVdXlxUzszg0lFGSEzVv7y/2mxIT1bjyd7a3s3PdktAU2bdwc7vTUVU\nXPbv9U1J893O2OP7XE9j2eLr4dXV/VNY4evvaXd8eeT/fFhZ48fHzmBITVzmxcfhb2TWy9ft\nWlHtz83hX01CTVzg0Nh7VFxXYvrr4t/c099uXlFW4M3L2V9ZV1tXVVhl5mtnZFtjV2Zp287v\n3N7i2+P88+R34Nfm4GFn6Ofa5+ruV1dVZWhr+WzpZ3Hk8PBvb3x6enFiaW/7Z1ttfPPj1Npd\nWFNm1NXb/V1ZWfre5d92X3F9fPrlb2hmft/vfG1hdvJ9e3l+8+b5aWhp++v/b3VzdujpaG9u\ndHFncnjr8ujs+uz0/PTj4u93bHN3aHpwYV5ma3P3a//f39/8aWnw7Hxtb/z+9Obp7Xhodffv\n8ep0YnJ/9fdtYFp149/d63leZm5te3Hr63N1a217fHpqcujg6XRte3rr2ez9f2Vu5+Lt/vf7\n6d/j4OxpZ/Pb2u9rYF5i/OXr+3Bmd+73dGJkZvfj7OTn6fdz//zf8WJjXHt29Oj56/JyYFxf\nZ3Xy7f71+vn59W9tbXry9nlv8O7u7O/5bnzt4+Pj3d3u7N/kem3/eW1lXmdgY2xqaWl3bGVl\nbG5lbHLz5ebvfvXs6+Pl93b68fPp5u7+eWZfY2Rse2ldb/L08/d4d3JnZWRs7+Lp8O7r5uTu\n7+rk6Xdpaf/4/fp1+vX/fG9vd3t1ampua2Zsc3v++v1tZnD1+flt/ejb3fZ+f2734+Tza316\ndnXt5+ziW1Hr7M1wTtDmV9HadmhL3NJp2sxuXVtEPU1Ya8nNZ+ZvZ19i+dzX4+xZV2/f0czN\n1PpdVVt2/tbW2c9+UlxRT1B+6vF4bWNbeNfS3dLb63JbWXL77Nne2Nh7WlhTVWB53N17bvhq\nXWBbYu3v6ens7Ofm393t9uVzXFZfbfvs+WdeZGlvcn3n39zV1eHs4397ef3lb213a3Rq/ubj\n5uLpbmxbXFtXX/1zaG9u+3dtf/zm1tvl5OLt53Rke2lxbWVj++fs7eX0X1RbX2b99uv4fXT9\n7njt3ujk3Ojt9XTd3OTm+nz0dFxlZF1ubWp08O9ufftocnru63l5fe/o5O5xb2pjbnFubHZ8\n8+bp4er08fV0dXx47+/t7H5pcHtv+u/3a2Vubmr68Oz89/9fYGJ25/F++vHm4Ot69np49nf1\n7vv3a2/3+/p4bF9j7uLu/u3x5trlfXxqZGt8/X7waWBramr+8P72/2lt+XRqeXdzdnpte+f1\n9eXc3d7ienl9bm5ubmxqdnp19ed58+779fL9e/D8evh8ZWVtcWViaHT6enb6e2v06fTt7uz3\n/PDw8G9ydvvtfWtncf39++7u/u34a2hp//F1av7q6On06fft6O/z8X1w+XZs9unj6O3q+Hdw\nYGFhXmNlY3T6dW1od+/19+7l5OPj7PH9f/B9dGt0fvbp4+rn59/p+29vfXN+cXl7aWhlYmBk\nX11eZ3vq6ejs6unj2tnb3d7q8e7w+/N4bW1qeXlyamRiYGBlaWtz+Xp+8Pj7cvrh6ev2d/P9\n7vr98Ojf6/5/8+98dH1x/XlqcW1mbPf9dvjr/nFtZ2huaWpydfjz93z77fTq4+jj393n7e3z\n9fPw7f12ZWX9d25mZWRcZ2phYWd2dvn5dPx1+PX79vjv7eru5t7k6fP28vL6/G/+5ej9bWVq\ne3F0b2N3dGVrbWxrcXp97ePf4Ovq59/d6+/69vN2dHF0eGpoX2BmZWBbXWV1/3lsbnzy39/o\n4+Dd3uz57P5u/X16fvL+Z2Vkdv1tb3FzcG588Orv8ft88uvteWt1bW53eXhy+P1+8nz3dXX8\nd290eHL49H37en9+anz/8ujh3/pvePjz73lmaW90cGdsfvbq7nJ28Oz59fV+8fvx7fn5evv2\nd/vq3+l6dmxwa2lsZWpqa2hob3d8e3j26e78ePj76+frfnF3fvX17/L39/bv6Oj9/PVvaXJ7\ndm5ucXZ1fPf49/x48unu5+Do7e3yfnJ7/XVoam1uYFplaGhz9Hd78e3xfvnw9ntvamNr//ry\n9Onq7Ojm6/jr5e938/ZvaGleaHJka3Bqc/X0cnv08P19/H33/nJzefvs6ePyfuLf3d/o6ejj\n83xoXlxfYV1YXGJkaWh2dP3v9u3u+O/m3uDa3/x4e/H5fP7173l8+HhscG5zffvy7/V6cWpn\ncHbw5ufo6Ojz7+5+dv7q6vJtX2RsZGNpde/k7H5+8fFzdGxna2hiWVpcZO7q4d/c1dje6/jz\nb2ZjfOjl3t7k4ujh3ez17PtmX1lTWl1eam11/eLpc3lnXVthaHx/dXb25eXb2drb3dra63ds\ndmJfZWdzcXBmam5+8XhoYGVpbW1obXRrcvLi393a3unu4Oj3/Hv8+Xdz/vPwfn52/PL5bGdk\nX2NhXmH+5ujd3N7e297s9vDz929fWV1mXl5eX2V883t9+H1qYm5++vXx+P717+z4bnz2eHL8\n7O3t397e2NTT1Nbe6n1qaWthXFhQUlpdX2lz9eDY2d7l6nxuZlhYWlleYmFp/efm7uvt7uvj\n3+nk4Ono6PlzcG9v/3t5bXR1/Oz17u7v729ubGtvcmZZXF5jbGp0+Oje29nV1dfY4e7q93Zl\nXVdVXV9kYl9gaGluevDk3trY2Nrf7Pl7fHh8bV9lfOjt9XlsfOzr/nN1eP5qX2BjaGBeZ21x\n7+bh3tzf3drd3uDs8/t9bmRlbGxnX1xhZ2tvcnF+8e/q6d/d3OLr4d3f6XRqaGVdWllbZHZv\nZGJs9/Lx7v3/5+x4e/vq4uT76tzZ2tzm6+b2cHVzd/33c19bZGlcVVRYXXP7X2B5/v3y8O7o\n6e3n4+Te5uzs8untfHd77+30fvP0eGxtc2t/9vd6/Xzz6P5nY3Tv6ufvfvt8b2xv+PN8cXrp\n7vrx7/5xaV9cYnfyeW9tb3z7cm5xb3vyef7p3dzqeP7r4ut/+v356+xsaHr+cG149e/v5ujt\n7flubGJkcPT+fu98+Ox//vN6cfz3/+vo+P95fvX17n76cmttXmJlcPP29/Tz+e/5aWVhYmdp\nbWt4bW755uTq7enn7e3x7vDr7P/47e7m6fJuaXVvdW5pYmVjYGRu9d/h393b3PH4/vT3cmxi\naHr5c2Fiaf79Z3N9amx4/nz37/399vnz5uPzffX6ffh9eHt5e3Fqbf/zcWViZmBcY3f08Ofh\n5ODj4N7x/uXj6+jk7/VvZGloa/zp+21ycWpqaGdram/46/Bsf/374efteW365OPs6ubg6Obq\nfGpmbmpfYWd1dGx28+/t/G1mbe7t/3dqbm9sb2566OXu6uLY19vj+nBwamdt+vj76vfv5Ob2\nen12Yl1tdW5jae9uaPn5amz8eXT1+np8e/Lm4/n74N37cPZ2dvn4bWpqa2dqZl1t9ebl7ez7\n/u7d5W1ocvJ5e/D9bm7u5vd79+jj5ehxa//xbFtebWxna2ldafLreWN45/Zz+vb+8e58+PLv\n5vdx/HJvffr1/OblcGzx7/l9bGt4fGlkZG9z+vtvbffl4+T5+ezo5urpfW53+vRxcGxkZ2z+\n7/5qamdv+fJ6bHT7eXJ/+PHu/vrv7+vr7v59en3m2tnc3Nvf3+ltaWVdX1pVWFdeYlpdZ2Jg\neP579+7d2+b3+u/p3t75dv7n4vD56dvd5ujr8e3x93RkZGltbGhpZmBiavZ3ZV9mbnL+/GVc\nZHrwfm787Ovs6d/e3N7n6Ojn4+X0+uzzb2tqZ2RnYV1ibG57eGp35d/j4d/g4ujo6/579mxi\naGtraWtv//519Xhsc25mZnX7f2lnbXL58nN86+Pg6fLw6Obz/nH06ObmfWt79/5sYW5+a2do\nZ2t5+vl76+bp6PX///j6ef/s5+zu9Gxvfn77bW53bW/5e29vdnT9dvbzY2n+7fHtfG707e96\nZmptdvp+cnx68+rs6+Xd3+Ls+f3++HJuc2lnbW1pZ2dkYm//7u767Obe4fXp3t3c3+598u9v\nbWVgbGRhX19mbXhna3fq6vVyYm5//vh9fn796ex8+Ofl6uni4tzd6O78cW54dnz9d3J2/PH6\ncf9/aWRmYmd0cnJue29tfv377+3x9Orl4OXr7/fs6/fud2FlbWdkX2dtbWpzaXf06ebw7enp\ndXL9dv387+vsfvv8fP1vdXp19+3m7fr+/vn47+52cnzv829sefLm6v91cPpuX15hZGFfXmFo\nc3Zwe/Xo5+Tm7PHp3+bp5u/2bvzo6+Xs6/Ls3+x0a2lgY2VgXmVsa29vZWV3f3dwf+vu7u3v\n6vbw7nn78PR1e/T1++vt6+3x8G579/96fHBt9v5pbm5ubGNpZm53/+7v7+3q93L++Hv49Xls\n8ef8+ft7eHd1cvbu+G9xbmhya2xiX3Lt4+zv6ujo7vj26t/k6uTl7vX2bGhkWlhaWl1kcG5p\nbvXp8/56/ezm8/Ln7+ri5/fs9W/v8m/5+3hzdvP2cWlqa2l+9X3z8W9scHX+7XhscPzzfXFl\nYm37/nF8ev3v+PX16+vu8HJt/+7u7Ob59e/wfH3xe2tmamlqcnj9+Ozv+fPs4OHn7nz98Or+\nbWloanh2am969v5rZ2zw6Xtvd3vt6O/v6efj7HF8/Hdnam5ubWhfX19sbnBzaXnm6/P26Ofg\n3unq5ufr5+b3/u/6dv77cWh9+n7u9ezt7urt/Wpu8+ft+n5vdG1lYF9obX56a23++3z+9/D3\n5+R+bXd2c/f0dHNsb/72dGdiYmv0/Xt1/Onn3+P8fejd6PH0ffPf5Pz07u/m6u39dnRvcGpu\neWlmb2xrdHl2dX7u8m52c2lqaWZoeHdre/Tq6er489/f5n566+jnd2tqbf7w8XpxeW9rbW1o\nbvnr7/3u/Pfl9vLze23+8+7+dmpmc3j7c3zz9Ph99Onr9nJ6fvv0cmRebvz29nx6/u7q93Ju\neO/4cGlw+XV1fm9xd356dXz19P389vf++O3p7/5zb3htaXP/9/R9+fZ2dv3y7/h46+ns6nl4\n+vnl62tma3Rramxwb21xdHttZ2dvcnpvbf307/Hyfn7u4eTr5+Xz+v5va3D4+Wlt+vL3/Xh0\n+P56fHlxefT6c21y7+7q6+fienn/dnFu8f9vdW9tZm1vfP9tenVpbPn8d3z/7env+/Xw9PPy\n/3Fyevb5bnJ2efjs8PPl3uLv+vvw6+/9eHdsb/d4c3l2f/v3/vX5bmp7fnRwcWpkbn78d/Tz\nd/Pm4+bu8e3vdmdra3JwbGJn9X5z7+/159/q+O7l5ODkfWry6/Vub3FveHp4bm9tb3NpbHR1\ncnh0bHju+nr08e7u9e/u+P5tfuHj5eXvdHH383xsb/b6cnb9bXT+//729H5ra29vc3x6dvPq\n8P/8dm5rc3j47u73//l8+e3t7/H8d3R4ef37bW5udXr/fnN6evf8b21yeHJ67+/w7O7t6d7f\n5Xxqan/6fnlraGlwa29wc3n7+vHh4+z09e/1+nt97vD07u9/8unm93Nxa/v6bGJgY2ZraF1f\na21uePfs8/vj3d7v9evo6Pz+bW3q5vd1aWx45+9vc3nv7e3+bWt97XttcnT6+mpeYmZt+Hpu\nbvbk6Ofu//fo5ez6cXjx+HJx7Ozz6fRpYWpub2lfYHj6e3xqXmB0/PDq8O7u7vvv397xdnZ1\neu/4aWf4fnL/8/t4/39+fX707e347vptfv55+vXu8O3k7f5+eXh8eWNeZnnw93VsbPfz/Xxz\n9efsenft/e17Zm1yc2tpbXv+8Ozs597o8PX3+vPv+W1pfP9/cnz5839teXv76e/49fny7PH/\nbnn5fmtqcX3t6/Bw8eXq+Xvv9nluYV1kZWl1bWj/9PT18uri3+707/r+cmpoYWBma2387/v0\n/fvf3O19d/n7c3lvaX36cW/58uzzcHf35OTl7W9teH56a2l2/3FeYmdra2tsbXnv6eXz6uLi\n5/17+PV8evP27/T+Z2T+7XpfZX56+/hzbW3v83Fobu98a2f68fTpeHv6/e93evbe5Hv/9+Hq\ne3119+zr7/d7++38d/vyfu/3al9neGhfYWNmcP34+PLe/WF56Ofz8v3z4Orm8W7w6e7z8H1t\ndHloX2V2dGFobG9ybmlv83dtf+vs5+Pr9e/e2+nx7+j2evR5/n1vbGprbGlhX2xubfjsd2zr\n4Ozx6OXtdHd9bm3x8nf16/V+cX73cXx2Ymdy9/t3b2lyeXF++3X76+57eODl7ubrfnLzdmpz\ncHZqYmp4cGFu7erp4eDm7dzZ7X525t/l7WtnevNsZGlsffj8+vR0dn5iXm/+7vX5+f52fnZf\nbnj2eHT5+fnw6vD57e7v9vP49O737Wxs7er2cfvw9/d7cmt1d3ByeOvn7uzx/3Vyd3n38+vn\nfXxsb3v9/nP2fu/n6er1bGFkZl9iYWx9evr6/O3p6O37//ft8/z66uzq6nZoaW1ycWp09/pp\ncHl5//d1anft8/Z6/+3wenZ+9fHo5Plw+PNoXGp5a3FtZnp9+P1taG38dXv5/ure3OV2cPR+\ncvP0cGxocf5lY3dvbP3p7fV78+51evz9bWhuc21+8G9ndfr+9u7g4uvy7ut/fH98cGVnbvP1\nb3T4e2d0fXF47Ol0ee7s+Pjt6erv6npraXNwXl5vfv31enl56+b3dv3p6ODe7e3s7+95/v55\nfHVwdXR2a2ZiYnJ3b3Z+fXp8ePXn9XJranfs5u7s6PPx+vbybGRqaGn37vl5dXl57+rv6+jo\n6/b8+Xx6+ntvbnt/dG7x7n13+fj49vV7aGpyf3r29ezmdXj5cHvs+Glqe3p9cmZw9nz7cm51\ncPtvaWz37e3p7Hh0/3ry6vPy7ntt+uLf/m/5+/rn7fZmYGh7ZWD+ev54ePpte+3n7X7/fvr2\n/v3z+evr8unt7fXz+HNxd3dmaHFua3X3eW958PdraHp3am3y5/L86Oxyee/p8fxuefL05ujt\n+W9t/vhwcHBrdffl7//v/n7+fGxwc3zvbGVhbvXyfXP+7/r97fRwbfrrfnB8eXRy8dzj7+zo\n6333+XJ4b/n1aV5pdmpnbnFrZn/qd2/56uHv+vr05+zg5n3+fO/m7e58bnn78uz+d25pYml+\nfW9yaGhta3N4fWhs7fn36uvh5+fq/e/o6/5tcP38+mt0dHbz625ed+/ydm55ev1uavry8eXt\nfHp+9/z/+PXp8fbq5vH78vxsbPfwe3B5aF1gZF9fbHr+b2tq9O12euzf4uvi4On4++5pc+/1\n+PXq5Ojv+nlnYXV5amNv+evr5er0+e7vZl9rbGr+eW5saXV3/fdpbn39fXD4dHXs/P768nx7\n3/BveHB4eXF68/X3fG/x39/r+/Hn6Obm8X3s83l373lrX19wbm1rfHVt+/b0a2VzaGloaXV2\n9vLqb2b0fmx/6eX46uPf393b6P78e39xZnRzc25sZF9qbWl77vptb3xlb3Rqevns7+7w5uPp\n6fTv7PH393j9dvvydG9qfe9vb3r46urq+vry6XldW2FtbG1oaft6cHFxdn75enNz/vt+e3R7\neu3t8Onn2t7r6e54bu39a/709XJ58e12a+nzcHN57+79e3tfWm/pcn7scWR87/Rwafb8fG77\nfWlpdHX/fXX8fXv17fP57+rt6vTu5d7n5u1y+mh4bFxdZGls/uvu9u/6/PHz4uT8+P3//vhz\nZ/Tld2p85etrbn5fam5kYWb88vD5+v35bnT96vD73+ZwcfDte/18/+rw8ezi4u/p8Hx/fGNc\nWV7+bmNobmRdaW7xfH7l/vfl6e7w/Orl3uTd4PX2+PtubWpiYnNubXJucWpu8vt1/enya/73\neXdo/fVvfebd8Hb08N7vc+1ycf/tdl5q9Ot3bXf96t3b3u93d+5vWlpqXlRe9+x6c+f0aHjo\n92Ru3uF8+N3c+/z0c3br2dzubW7i92ls+25t7vB+825famNaZH1+cO3g8Hdw7Otscebje//e\n4nX/9XFhZWz9dWn48PHp8PxtZHnva11t9PZ69vNv/PDw5Ori297ubn5++3Znemphc3h0aGn8\n92lz5t787t/u7+npfGZlYXFxY2/5fP59emppeW5qefLt7evv+uno7+7q93Xz9H7r+vfydPjr\n7W9fX15oaFtdXmJqduv37uf99vl77uff5O3q6n357/duYH7ueOrg53Jq+W1naeb2Yvvv/3Lu\n9WhiaP1gXvrs8vPp+Gxffud2fnxu9/vveWh89fH59PVteul8a3v5dnjm3OPu4/R56e/m/V1m\n9unz6+9tZ2hldWlffHZqaHji6vL2a19p7+755uRvaW9rdfZwb29se/Dq6OPn7PDx7eTd3Xpv\n9nRwf3Zoa2v673d76+pyX2lrZHvo63J583dwb350Y3f0/u/i4uzj/GxqZGxw6eHmfGP5emb6\n9vhpceR0bH1tcWFm+vZyb97b7+/l7m9t7fNta3Xv8uL7fOhjYXj/aGR4d2NpcfBoWXHn9G/j\n2+vw7Nzheevd5Xhu8H1fW2b7ZF/v6WVn6drlb/Ln/GtyfHhibHVvefvt72pl89/o7t7k7Hdq\nfnBdaev2ce7m4+1rc3ZqdOnj3N7k3+9kXGJfW2Z4fnNq+Hx68+/u/Gt96nxpc3l7bXPm4Ojm\n7f72/Obl3+Xq5O/memR6b29oX2ZnZF5vcW3r4/Fzb3drbmtw8mxgcPbn/v7n7Oni+fny+un4\ndWp4fe7v8X9mb+/za3F+9u/+9vHt5u/m72/7fmxrbXZ5c2loaf33d3J3+XBxdnv07nZucvb7\ndf347+/z7PhrYXXt/vT1e+/kcmVoaGdu++r4eO/x+3176tvx893mb37o6P1xfXlhY21/eWtr\n6+v46W1s+HPs3/5tbmtiXXHp9Wns3ety/ft7amT4ZFZg6eT0+vDi7GVp8n166d3j5t3e7W1q\n/Ovx9vH3dG90b3B77ed8aWl2eWNd+O5sb3119X1673NtdXZsW2Lv3uv93N7n5PLneWvj6X36\nfvDtcnZ6cn7vbFxaZm13Z23983xnb3X+6Nbc+3R8d35t9+Vybu30cX53cm1z//9pZ/R4/m9x\n+Xf67Oj4cHr4+/t55+f+efj4e3n++GJccfv1dvff7mVp/vVqbf50b/Xd7WhfX25vZX/u9XX5\n5XVu7+1kV2zp629y3uR8+/97bW/o4/l73d3s5/d98G1s+nNlb/V7d+/6/3V5fGZlaGxnZnz7\ncGNn9+73cuve+O3r+PR+7vD+fuvf+WRzcHZvb+96eO38dl9ldnRv/vD/b2tmbnH04fL/febT\n1+Dm39jj7P77dHH5b2JhZGBkZm7+bXJ6e/Ts6/B2bHZ1am5zc/Pt+vzu/v51b3tp+dnj++vo\n5vxpefJ3cvXp9Pp6725faWpv+/jx6vXt+Gz373xwb25taXb5cmZtbnR0d+3o7P735ejydWp8\n6fr77vLwcXNqb+7o+fP+ZGz3cVlYbPpsbuXo9PTh3OTv3N5zcm968Ovz6nVeX2d7b/Hq6mZr\n7O97ZW/1cGrr7nBudnn2ZX3f+nT77HR29vHr5u3o7P/v8eXye/P9dHX5bV9q9/5tX2b15Pb4\n6e1+8+91eGhebnlkYPfv9/T86+rn7+bi8nb83N5vaXpnWV1sc15d/e/9bHzx9mz47/ff3eTm\n6v50cvt5/258enn67up8fGx07u/u9vl88fN8a2ZkY2dfYWz69unhe/7rf2lpcWdjavd+bnTv\n6+bo7O3vfPz2+nxyfWhxevnreWhu6O50cPl5YXDm8frk3N/u7nz4cvnw8XRt9H11XmV0fGhk\naHD0dfb+ZXLv8PJ5Z3Lp7+/t8N/t7+/9/G1jXv77/nvv/F9qavl+fOjv7Xvy5uLn5OR17+j+\n93Nqa3ju6vlmanhpaWpsYmdo7Oj+bmx3/+r+/2poeeHa4+Tg4uno7evsa219bvzz+evwfGZk\nW1hjenlob2tr7unk+uvh3OD14eff43lgZW763Or8eWltcl9dW1tgXm329+7w+v7r3+xtdePn\ndfLh5Oju+3d4auTd8u/x7vF6cGxvZmRpbHBncPppXm96/nNpfPro8/bw+/z53efp5OD4cf9z\nc29v/PL17erob2R6aV5ca3FjaHXp6ejxcm1xc+rs8t3Z2ufq8O70bGdfXV1p/nR86ud5a2Nk\nZWdrbHzr7PN7evPj3+r79/Tn4n9q8+1ubfXu+/X7/3f/6n5eXmj9c2NmdHf97PZ2Z/Tr9fl9\na/Hm5/D88vlvbPru/HZrZ2FlcPjt9u/w7Onw9PhvfXVy8untdPPu7env/l9mdnp7duz0e/v0\neXv3fHJiZGtoamj57Xt5c//7+O55aGvz8nJmb+zh3OTq/Wlw5e5qbvXo8HLq5vRy7eN7c3jy\n83t+7Ov7ce3uaGJraV9cXWhlXmb+9/L34tzw7+Da5ebm9Hj07+v3dvt6dmdtbGRibPFwc/32\nf2/36+56cPB+a3rt5e927O7z8O3kfGds5eN4/u3te21saG5pfG9gXWL25PZr+eDf39/4ZGx1\nZGpwa/3vdGp48+3v+fzi3urv3+l8+WVlY2308/R3b3L4+HR38v/m7Pd+9PdybWv7YFpeYWJh\nc35ucO7h6+zh4Ol89uzu8ezt7uLb3t3l+fn6cnJmXGd0Zl1uampoZ2pYXGlqZmj06/ny7N7V\n3OLz7e7y6/x99Ojs+2tdYnhxbWx2fWl4eGlfbO9taWRt+uXh397i3t3o7/XqfmZode36eXB9\nenns7mllcGNgW19scm9q/e7q397e5uvk7H93+3Z7aFxj+evuen13bPTh7Pz48+368/Do7Pzu\nfPpuaWZkXFtdYG9qam5v/uXX1tni497h3+x9/X39fvXn+G5qYl9h+v1kZWn87fJ4aWtmeXTx\n4O/x6Ofx+eri5Pb59vXqeWdqfnhkZmJid2pianH78OTx7fbq5+be4vN+8fXz8PlsZGRt8+3/\n9e34c3b0cF9gamFgcXpybPvo8+rm4uv58e/rd3T4bGV2eHztfv70efvz/3z4eHZ0ZXr3/vF+\naGRobf9wanLu+fHt7er59Pv24dri9OnrfG5uc2ZfamlofP398nVncnhsYmh49/Fvcvz15Ofx\n7vr87Ob2fvb173x1/v12fuz4cnRwd3Vz+fdteXZs8+/s6Pb6+nb77/h3cnj3fnP4cWxrcHlt\nbHl4aWFscG1y9ev67t7Y3evx+e7o7f55+u3v7vr4+u/1bGJqe3x8bmdvdfrx/nb/b2p88PNs\naXNtcWtzfnt79evs7/Pq4/1pdvd8/fz97+f06O1s8uXybmdqe/ZpZGt45+Ho6vZtcH12b2Zl\na2VqdO3t9P/28PLu7HpnbnlwbHh3+O91a/rr9Hf79vL4+Pz/f3vv8/3s7Pryf3fr7vF5aF9l\ndG9naG57+/Zvde7u6ez38u3o6e3z8+jucnt4ZmFqaGvzdm98bHjq3+924t/pfPx9eXR0cGx5\nffn4/XF26u1maX3293V1/nNs8/h1bHnvfn3s6fz67/Lv/m7/93nv7u/9dPTsdGlr7+7u6fP+\nZ3P9fGt75PdzfX7783x/b2xx7fF1am3ueWJq8u3l7f727OLd4nNqdfftdW30bGz36u5/9/Dx\na2lob3Vwb2xyaGpqcvXp9mxt9/J7cvT29Ot67+bl4ur+dnhybnd1fOv2em1scGR7639pb+vt\n9+7lfX7z9urxc3b5+3Vwd3Z1c29nXV1t/XBucHv18uzvdnB35d3m5vF5b3TzeGVmbGppbftu\nbn3o4PTt7Ovy9Ozv9Xf75vlr++7zd/jybWl1fHVnaXhzZmRydmxodHpub/fudm/t7/bv7Orw\nfHvv6evg7n10/OXyfHhmavj57+Xq++fk8O3s9WxlfHdobW5tc/V8Z2twd3R++nB8bGtxY2V7\nenj75ejf2d7f5t/e5+fs6n5zefPu+W9raXlpXl1YV1lv53FobXX69ePn7+767+/w8O7wcn7u\n7f159v315O3y9PP2bWlx+3NlYGpx/OjteGx58vHv7/fq7/Hl9vF4a29mZW1rdHd59Op9bPf+\ndXp9b3Dp5+97dPT5dnj3eH33d214+Hxvamty+3traWl2enF2e37m3/Hv597X5mlj++b27/x3\nd3B8/GZhb21mZ37wfXVvcnN+/vnt9Xrx9PD28ezq+mh89/p8cPru7uLnfGlncWxsaGZpaG/6\n/nv57ePf3OXu9v31+PxvaHh5ZGdwZF9v7/pvevPr7evn6+tx/G9revPzbfbtdnj47vT39O70\n8fl5emtoZ2p3cW1ud+3/dezg5e709u559/ByaGv6/mtp7u95/Hrq7PHxa2lhd/htbGpqcfvz\n+Xjx6/X15N/s8/fj19rf73twbPdybF9dYWRrXV15e3jx/v3j5fppeXdnb+rrbHHt9fPj7fbz\n/vfw7O3x/fTr5f5peW1nbHt8bHN093ZteXh+b2Fhfu57bml7/v53fO71fvHn9+zp8fX37+3o\n+/ru8uv0b3V9/v56cO/yYm15amp95Ovt9nHv9m1lb/n+dmVrbGh7+v/2/nZ5c3x9bnb6d3vv\n8X1rfe559+vi3OLk5dfY6fP4dmZmdnNiXWdzdWFfYWltXGh///Ds7eno7e7t6vbu7u/3aXrk\n7+ry+vd9+nBkaHz/eXV5d2z/+P13dXt4b3fu3+psZX3n5Hd46/Rx+fT9cP7+b29t++LteWdv\nfGt2cXV7+XJr/3b77uv3+H3y6PVvdv188e7s7e7vfuri6/l99PJz/3twZGVfY2djb/nyb2dy\n8+z9ZGp1bX/983ltdv/u7+vc2+Dl8eLc7Wtr/XxmY2xua2RubWBp8ffw6OXl39jj9Pbw7nN4\n7PbweXn4fHRhbHBcW3F8YVdWWl9haPn2cfzy6eHe3Ovl2ufx497q9fju5+ntfHZpXmpsb25j\navjw+/3i2/X+7Oru7/BxYWJmd+9vX2zs72188ex2YWRmanB2enBq7ebg3/H8dunqaWl27Hpm\nb/Lf4vXv5vPq3+Hi7/rseWRrcu3tZ19k+mxZXmBgbHH++Gpr/Pr7fu/o8ev9/uDh7P9v++v7\nbvz6e2z45n55fvDs/n/g2d76buzrbW1tbGRdX2h7aV9m/Hlvdezzb+/m7HP/7t7j+/tt+t7g\n6vZ+d3h6emlkZXH0alxodf50ae7peHd+4tzs6uTk7fz57Hdvb27vbWlr/G9hW2js9vzq3Ont\n4XtvfPn77f9v83rv53d19Oz7bfXn/WFka3xtZ2ZrcmFifG1eae3u8vPq3eDl6uTa3N/o7O7s\n/GptY2JhaGdVXH7scVxl++vo7vrl8nPs4+Dtb3Pz+2xkdXlfZ3n6/Xt3a/J/aX7t8PbpeW/x\n9PHv5uP38N/sbWl6dGJeX2llYGNqZWf97nVrcXnq2+t76N/k5+b06/Tyefzw7u/s7XX79m9y\nbWttb2BoaV5lbG9tfnx2fe/f5+/06PVucHX5efTh7O18eObf+mns5Ph1+ezl+P7o9Hd8a2xq\nYG56bWBjbO7wcH3r8+nh4/L/fnxoamtnaWf87fHy4t706uPf5G595e1lZmVuY11pcXR69OV1\nYHbt4uppa+3r7ubp7/bv4+n8e3l9bWh4emhubnR9/3N4+WtpaW12f+t8an3l4+vt7+/w9Htz\neGpt8floa3zwcmd18PH97urg537s3t/47uZ1W15/b2NlX2xtbn1zaPt2cvJ7cXN/dWheb25p\nfurl5dfZ6Ofd3+Hr8d7rbGp2/Glv5vdhY2T/9mtvdHBrZvnu9Xls9mts7uPl6Ojzfuvl8uf7\n9vTt+/h6YmZoaXFxYWtuZn758+ZtZnpvbm5uZWFid93t/w==\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2\nContent-type: text/plain\n\nHappy New Year!  -- Nathaniel\n\n--PART.BOUNDARY.4099.19398.greenbush.717776361.2--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.7.txt",
    "content": "* 7 FETCH (UID 7 MODSEQ (29369) BODY[] {2220}\nReturn-Path: <ysato@etl.go.jp>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA05435> for nsb; Fri, 12 Jun 92 22:23:28 EDT\nReceived: from etlpost.etl.go.jp by thumper.bellcore.com (4.1/4.7)\n\tid <AA16354> for nsb@greenbush; Fri, 12 Jun 92 22:23:23 EDT\nReceived: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)\n\tid AA10002; Sat, 13 Jun 92 11:23:16 JST\nReceived: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)\n\tid AA00452; Sat, 13 Jun 92 11:23:13 JST\nReceived: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)\n\tid AA13778; Sat, 13 Jun 92 11:23:08 JST\nDate: Sat, 13 Jun 92 11:23:08 JST\nReturn-Path: <ysato@etl.go.jp>\nTo: nsb@thumper.bellcore.com\nSubject: Re: [95:taka@fxis.fujix] MIME and Header encoding RFC.\nFrom: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)\nOrganization: Electrotechnical Laboratory, Tsukuba Science City\nMessage-Id: <gELh6.ysato@etl.go.jp>\nReferences: <9206120510.AA06898@atrai.sala.sony.co.jp>\nContent-Type: text/plain; charset=ISO-2022-JP\nMIME-Version: 1.0\n\nHi.  I received a message from a member of i-headers mainling list,\nas follows:\n\nIn message <9206120510.AA06898@atrai.sala.sony.co.jp> on 06/12/92(14:07:02)\nyou taka@fxis.fujixerox.co.jp wrote:\n |FXISの神戸です。MIMEとヘッダのエンコードに関するRFCが出ました。\n |RFC1343は、ほとんどmetamailみたい...。\n |\n |RFC1341(.txt/.ps)\n |\n |\tMIME (Multipurpose Internet Mail Extensions):\n |\tMechanisms for Specifying and Describing the Format of\n |\tInternet Message Bodies\n |\n |RFC1342(.txt)\n |\n |\tRepresentation of Non-ASCII Text in Internet Message Headers\n |\n |RFC1343(.txt/.ps)\n |\n |\tA User Agent Configuration Mechanism\n |\t\tFor Multimedia Mail Format Information\n |\n |RFC1344(.txt/.ps)\n |\n |\tImplications of MIME for Internet Mail Gateways\n |\n |--\n |神戸　隆博（かんべ　たかひろ）\t\tFXIS / Network Team.\n |\t\t\t\t\ttaka@fxis.fujixerox.co.jp\n\nHe says that MIME has got RFC numbers and RFC1343 is almost about\nMetamail.  Where can I get these official RFCs?\n\n--\nYutaka Sato <ysato@etl.go.jp>\nInformation Base Section\nELECTROTECHNICAL LABORATORY\n1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.8.txt",
    "content": "* 8 FETCH (UID 8 MODSEQ (29378) BODY[] {165976}\nReturn-Path: <nsb>\nDate: Fri, 29 Nov 91 07:13:33 EST\nFrom: Nathaniel S. Borenstein <nsb@thumper.bellcore.com>\nSubject: Testing Multipart messaging\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=foobarbazola\nTo: nsb\nStatus: RO\nMessage-Id: <635263343751062380.20772.1@Jeffreys-MacBook-Air.local>\n\n--foobarbazola\n\nThis is a text prefix.  You should be able to read this, no matter where you are.\n\nOnce you've had a chance to  read this, interesting things should start to happen.\nIn particular, a picture and audio should appear more or less *in parallel*.\n\nFinally, a magicmail message should sort out the pieces.\n--foobarbazola\nMIME-Version: 1.0\nContent-type: multipart/parallel; boundary=seconddivider\n\n--seconddivider\nMIME-Version: 1.0\nContent-type: image/gif\nContent-Transfer-Encoding: base64\n\n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\n--seconddivider\nMIME-Version: 1.0\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\nSubject: TV Theme songs\n\n8vp7cnRvc29ubWxcUebUX0tM1N5bauLZ5ejv2N5772hiX1lVVFdZWWPm0dDU1+LubmZhW1VXXVlfdOnZ0tHPz9TY3/ZgV1VUV2Lw7e/0cmRcV1FPUFZeb+7g2dLOzc7U5HJfYFxYWF/66uni3el0Zl5ZXFtdZnPx4djOyMXGz3FJPkzjXFVf/NfX2dzf5vj2\nfXn39OLe9k46N1zAwM1maM7wVkxLW+bQ1dzi49zW0NDX4mBAOVfHyNDcdHfe4mdbUUtHTnXYz8/U09Ta2dTQ7UhJ1cvnT0VP//fd2O9WRkI+PEVlzsC/yM7PycG+vcpFOO69zF9PbOx+YFJJOzY2MzM8X8i7u7y7uLOxtsRLQ8m+2U5KXurcWVNRRTs3My0q\nLkDZv7+8tq+trrHGU9i5vtxUVW3ldFJPRzszMi4qKS9Oxbu8tq6qqay31Me3v9tRT2p3X05IPzwxLi8tKSk0aMO/vrSurKuvvb+ysr/mWGH1Z0tFPz01LS4vLiwvTcO5v8K6tK+wt7evr7nJ6+7qa05DPjs4ListLS0uO9C2tsDBvbm1trKur7W9zeF8Xk1F\nPjo3MSsrLSwtL027rrK9vbq1sa+trrK4v8vacVZORT88OTAqLCsrLDFnubK9wLixraysrrG4vszkaVtaW1tbXllDQlBd7GJLQj04NTg9RlJgeuna0tDV2dfQzczJxcPL6M2+u8VZPDQxMDM4P0pQWmfu3dbb4ePc0czIw7+/zta+t7rdRDg0MzM3PkhPVl58\n4Nra3t/b0szIw7++w9jNu7W67EM5NjY4PEFITFVgde/k3+br4tnPy8XBwdJq28a5uc9SPzk2OD1FTVRn+Ofb2Nbe3tXOysbExMjn787FurnFbEE5PTw4Nj1aU09f4dbZ29nLzc3IysnReOrWzsXBxd1NOzU0NzxBT23h1cvL2e9pX15u8drO1tvN0c/Gv8LU\nfltMRkM/Pj08PT9HU23s3dbPycS+vsnMy8vBvsV3RDkxLi4zOj5FSU/XubS0srKys7S2ucJhPzQyPkc5MzAwMC8xOd2qqauqrK6xtLvLTzUxRfpMOjI5UkY6MzNdr7K2sLS1u8TdYExGPjIySeXc63xQPT7PrbPFzMjE2mlNRklOREJKbdTV5djFy7usu9No\nSGzb/E5EOS8qLj7nx7/DzNi9paSrtEgzPWDyUz8/PC4wOkZ76lI/SrSpr620vs5RP2DK7z88Uezc1NPV3XTCr8htSzw0KSQkLlXi139R6b2sp6y3ppicqLfhSzcnHR0jKikpIx0dJEq1qqOYkZWXnaq9xHArJztMQTstHxoaHy05b6uorKeoqbG72i86p6m8\nv8s7Jyg38MG1pqm7zkU1LSceFhEorautyllGxqikn5yWmaKpuMZWNiccEw0bNC0eGB03rqGfn5eUmZqfpaiwyz4qHBcoRiQgKC09Rz47YcLHr6Whpq+5x1gsJXGtbU+8vMi4w+G4sdZeRDUtIx0bGxoisaO6v6edn6OjpJ6Yoayyy1UvIh0XDg8pLRwYIEW8\npJ2dmJGVmZykrMBlPCkaHOndKh0eKCg0RztHwcy+qKOhqa+zzi4uq6fSODhvbLevytO3x0Q9LiojHRscHB6/n7G3qZyfnZ2mp6CmtLrOVDYpHxoVDxcgGh8u5K6kn6KdlpWam5+ntc1FLiQbHicocM/qOygrKCxJW8+rpqu0s7nLTC46XsiioaSwYlZKSr/Q\nOjYuKSMeGxodJFN41p2Xk5ijpqmpn6Kzvuw/LiciHBQQGx0YK1Gwo6alqqeZmJydpK24yVY0IhwrLx8rab7IRDw2MzAyXL69zNrOz+o/M1TyPGquop+lqrC+3E5PRzo3NS8tLSorOT452qugnqSqrrrMYVhZT0xBNzQyLisuKy/ptauorK+1vcra19R2WlBA\nPj85LiouX7mvrK+1vM1XQT9LWFdeX0pHU2VGLzq+r62vtbq7yVA/P0VAOzk5ODY6REo3Pbyspqessba7zmpLQj04Nzc2NjY+Tzs317aurK61urrCzuDreUtLcFU+MDlKNC5NvbOwtLi9y9J9VFZST1Rk6eh+7+pnT1RcUklITVNVVFlb69LPzczN0+NfVFRT\nYebc5+PQy9V9Tz8/QUBBSVNq4NXW29TFv8LKzczS9XJgTlVkYFZPU1xeWVJJQUpia+jIt7O3uLvJ1vVOPDY6UVtPT0Y+PD88OtKnqa2tsrrCzWxFNS82S0o9NC43QGmsqq6ts7nG12tJPDg0MDE0Liw1WK+en5+pub/rW0Q3Mi0qKywsKzA/r5udo7XMyLmy\nu95EOTIsKSgoKD61tbndW8m8uLu5wcv2SEg/Li25oqeuPzVETE1HPzguJiMnMdqinZ+fs97NxctNKiQzVEw6PLCdoaOseDMuLConHx0fKCwsUJ2Sko6TrkVV2MTORi4mIh4aH0tsWL21JB9Vwaiip6+3ub/UrqWuqqmlvRweIyQuMjI1NTEwOE3NtKujnKo0\nPklNTTEtMUJX07mvrqytr6u9MjhEQTUsLC88OjM+3rmup6Kr32vYzb/eTktGQjcxOU1KPWLNZM63tLS1wOZj9tzg53teSkw+KiktR7musbi7yd3i3t/Px8TXPDU4Nj5GMzXmvbW0tra5v8LBWz9Z3s3ZRDUyMDEuOtK2r7GxtcrWw73E4U5JSkpDOzY1NzI5\n5sO+tLG1u8PN0971eG1eVEY/PDY1Nzvit7KxtLi+xcjS29vwYE9FQTs2OkA+O0nNu7i4urq/xM3o1NF+b/5PPjY2Ozc2RM+7t7rBwcnT0dLS315TVEc9OT9NRkltxLq4uby8xdHkdmtcT09iWUc9PTw3RN7Curq7vsHNbU9e3+lVSU5QSkQ/OT3rwrq3ur7F\nxcXM3X5uWElHS01HPkBDTdjHycu7vsy+v83T5uP9WElHSkc7NjU9a9PEvr27vcfSz8ra6eBeV1VJPjg0LS5D4sO7vL67t7m+w9j5Vz84NzU1Oz86PVzOt66xtri7wdlXOzIxLzI7Qk/jwN9S1sW4rq+6zFY+OzYvLTZGx6qwsLfZ4Fp1Tz40LS4vLzBFpJSd\np7G4v95JNSwgHBwcHDKmk5mbn6Wnv1xNNyQbFRIdapyboqOnpamtu10uIB0YEzucrKmiqq/E0EAxKiUhHCmgmaqfoq6tqLM9Jh0aFRTVnb3IzK2oqqmlsOc6Gxyfla6+LiwvKSMgHxwsNs2LiJGWq1c0RDMoHBURDxDOj5idqb6oqK23xkMqHS0mtpK3sD1J\nYy0mIB0aLKOnNJaModREqq/VQSsdHMlcHhlFqigpX7Osnpmdp5edXSQznz0ZEBMVDxgptI+LlKipi5arQxwgHRgREtCdrkYkm6RPyDK2rrr+O7OqKy0vmYytzhoZHxgXFiqdnqw0OI6RlKVduzMlHyTMwyYaCyTCITy8kY6Ynqygma88HR2j0B0RDRIRHzuo\njImSoUuVjarvGx4ZEhAVxJejbBospOinra2lv1kuM8m7s8y0jqVYIBEcFxQRFryWqzHFhYWPmjQ7OSAeHSTcKhQMFD3kl5mUj5ums8CioDUbGLQ9EwwX0jkuKTWljJGfspOOujQWFQ8aXmi6np80GSasQrexsq0+LBkkmY2YsbeTsS0dEx0XEQ4UQ5+voY+C\nhZepJywpGhoaHTUrDwwZtpmMjpCTqMBSMuenNBstxB0PFzuwTSQpQaiNlLehjprbIxEYLs3KzjvCxhgYS8i7qrmqxRwfr5+Zj6ZmoqZKKxcZHhALCgwui4mTiIWPnz0tVysZFREPHRMKZpOcl5KVk5u2bz0pP8MbH14hSq7IttMnFxQgsZGdqo+atzISJaKg\nr/4tI0w5Fi9fJ3Dfy7I1LKqZnJaTuradzS0bFBoTDAkJFZuBh4qEjZ3BJSksIRwWDw4VGSeamJqSm5+irb5JLSJIyBoiuq2gvTpbIhQTHUSfkaWfkr0mN06lobnELBsbTi0dPS01ukIrsp6XlqaqnKNNqaw1IRMPEgwFDTKbhYWNiouYqkIkJyEWEg4ID1TL\nnJarop2fn6PDXk8mH0EdGaealZ7wNyQWDxEb4JSWqJmrL2ipl5arSycbFik0HDc3HScrLquUjo6ar7WlScGpQCgZEw8IBQ0jo4uEio+MlZ/DMzAkGg4IDBy8pK2hrbuon5uisFkvLR0cSr6elpqsPiwfFQ4PGzSllKq+nZWZnZqfvDIeGRYaOyYaHxwbMpmS\nko+YpLTWo6d4tPooGQ8LCA0VIKSQiIaRj5Ccqc81HxQLBQse9Jefs7ZOtp2YnKXRLiQZFEKopJGSotopGxcQDQ8dwpKcPKSRkI+PnbUxGxoXFio5GxwPDDiXj42Lk6K0Q7OdutBOKxwLCRYcFxcvp5GEi4+PmqT+MSMPDBgcGyOdltHSL02pnJyqxzkaDySf\nk6KalavTLB8aEg4OEyG3n5qNjY+QkKC5TSIaExIYMiAPCRG2l42Oi5KfrlhZopu8RyAXCggXIh8eSLuji4iPk5SbrjgaDAwdJyIksJe8Py1Bs5uYpbgrFBo5s5SYmZi5Xi8hGBgRDA4PG5SHjI2Tjo+hyUQsHxsTDx4eDRsmLq2WjIuRnaKvzLWr1zUaDhwt\nJR0aJE3dtZiTl5yoy0InFh4+P0s8Sa6pu7LC676yvzkiGSDBt8V3zqOhvLjCYVI5LSgqJSTfr6mwvqScrLPIRl9fRyseGRs6yLm3uamftbOst7hmSEQyHxwuVFhFNm+lq6usxbi6w9c8KCw8Pz9CRv2xy9WzyMXRzsA/IyxV2MLGZFCrqcK52dNNNzUpIDDV\nz+rTwM2ooq6sv9FDMjIrICQ1Slla19Gqn66xvbu5zEQuKCw+RUpNRzlau8KyrbO3vdNIMjFgyM9uPDFJsbnXzM/K1WNHPjZARkJc3tvXraq0uNdnWkg4KiEvatbZ6uXYr6mzrrO9zT0vKCUvOz5W7F1OuqSqp6/Q3GFPNC88V0c6Nzg5XK+/vLK7vsz4TE5P\nXubX1FY1OMfP18dcTE9ANkPZu7rXYlVMZq+vvrr2RDUwM0FORExd8fTj46qktLjOxsVoODI0NDQ0NzxOUbirsqqtt8hUOztFS0ZFRDcsLNOptbq8w8nhXERdzNNNQljuTd2uwVNIRkdESkZT89bDv9L0TPStrbjA1Fg5LCYvWHZYYllcWM2qp7G61EdFUElF\nRzwzODw6PE21qbu9uLe84lRT8ONPT1A/Nis3yMe6vcbL18zGv8Pb6Gs8NjvhtuNNTlZMPEJa29JZVsa7x2PVsLa6vuFSNi0pKjdLbNzrZ92zo6iurrz9NTI7SVY7LjA6OTtnr622uMPCzdtiW9nE1lZJPDIzV3pS1MvUalLPurvCy+tVSTk43rbJ3UI6TkdE\nZdTd09bjd1dXw6+6tLfZSz04ODYzPklQXk1GvKOmrbPG3lQ+R0c6OzgxMjo9U7mysay7zn9d295MUM7HbD02O87F481PQENATcO7x9fp+G585L27xb12NDM/R0pCR3bIxs/19r+0v7yyxVc5NTw+Ojs+PkdbY82pqKuy21pIRlRNPj8/OC41QVW6tbSvuL/Z\nVunac1ppz19FPj7Sv9fuSD9GT3jwxb6/xllBT+S2sMLIYj4xMz08SElX19997+W5q7G7035SUk45OTtIXkM7SGXDrqywu95BPkdNbWxkfk47OUTkta+6zGts2dbpX1FLRUNHR0pXxrm9vdtPRkpUU2F/XVBKREBPs6qxudNSPkFKQkFEPj9AaMrPuKyvuM5s\nT0ZYW0w+PU9EQUZcvK6zudFUUUxFP2X9YFZER0laxbi9xNRVS/nvWv5r4O1HRkhOzrrA9/RxUldJTevaz+NNTFxs4buwvclmTlVGQkRGTEI7PEbsw6+rs7S/1+tPRkJAOzQ0O0NJUb2rr7jJaWRaUkVDT1xoaWXy276zxX9MPkVCRExh693Vy8TJ1Me2vMpm\nPj5AP0BNa9LfTkdNb825uL2+zvJYSldfQjk0OD5JZNC1rbC1v8LGW0xKTE04LjA6S3LFtbe1wu1eTeXR3OllX313ee3Cu/BFPERJPkhf7uZeWeHJvr+6tLvUS0NCODk9P0xVbGFSUdm3sLa+xtftTUhSZE88ODhLaN2/srPAzt7Y39zkZ0hDRz9BRUtjz8K/\nwcrdVkti3PxiXVRWVVTexLrBdkE8Slnt5FpKSUt/zb+1tbO+zO1KPzw8PDs8RlHi1eLZv7Cwub/Pb09IUU5CPzk2OU7TyL7BzMnT3c/IvcVePzw/PT5LWtjP587V9nla+dfY4/vrbvrS0sW/0dhQOTk/WupuZGlqb9G6uLGxzl5JPT4/Q0Y+PkNPTmrJysO3\nt7rB08zZ/VlMRTo7NzQ8Tty8vMDM5cu/vcTL6UY+PUNUZ97CyvpvTU3n1GxWTEhe7dTEx8i6udJlRzxBR0ZNTkteaXjJv7+3s8dgQzpAWF1OQjk9RUjrw7+9t7zHzdDLyNZnTTo3OTo/Uu7QwMHKzdvVvsDM0vNQPj5KWmP21+BPUFlOW3T38/ztbGTVw7/G\nxL7cUEtDQ0RLT0FARFHozbqzs7O/3W1gZUU+QTk3NkXt7tLAuLO8xtLYxdlfRz5GPDo/QU/qycJ/UmfZyM2+w31oT09ZW2xfbtpnR0Bezn5282T8du3YzsK+v8HE0FJLWklISEFDOzxK9cy/trW3vNN452ZfTz86NDQ7XOXnzsjBwcnLx8fHz3lLREM/R0pN\nbdvK0Xvx08nIxsn0Vko/RVfy1N7l6mBr2M/pZGFORVb8283Hvsbb5XpYVFVNQT5BQEZHWdnHurS3vcbR325tU0I9PD88PFDfysbLx8rDur29xtxPOTs+PkVQZ3T4zt/szsa7x9PRf1NNR0ZKXV9Y8mhkYl7Kyu9oW1JV28fJwsfV21lVa1ZfXE1JRUhJXd/M\nvr++t7vEzXhtWVJMQj8+SU1R2NLs2NnLvcbLwXde70ZDTl9PUU5DT2rb4Xj179rgz8fW3HtUYGFRTkZKd9jb2Np7fOt83MnEvsthUEVDZsm/yOpKQEZBQ09X2cjKv75n4sDL121NQD42NELYuM5fz1VE8ca5vL/Ob1Q/P3RGP9njWEdMVdzGxsPCvcDKzEg/\n+ExBRUFJQE/m1sO4tsta2Ng4etlIT0NIP0Bcyru2t87sw080dUs7R01ifObj2MK4tsTnz0cuU/9HXF1ZWlV7yLWsrbnS2TorOzw2RWnv7P9u3Mm8tLS3tvo0PDYvP3FrUkE6S8S0rquts3E5Pjg3Rtj7Sz4zOP26sq6srsBqRzw1MUvg+lc9Nk/Ata2ts8Ru\nPjc5MT3h3l46LTbMqqGkq7t7Oy8vKi5MUFA+Lix3opyfpLHKSjUwKClHWEczJyA4n5aZn67KRS8rKDPO0U0wJh4mrZmbn63CbjYpLVvBy08xKB8fWp2bnqjEUi4iNrOst2oxJh8eL6qam5+xezUiLbyzvN04KyQgLr6inZ6mvkclIGOyt8M/KyEdJdShm5qf\nuE0pHS66rrJgKx8bHTmnnJqdrdE4JivPrK7LMCIcGS2km5yers06JibuqKe3OSUbFSWgmZyertwwHyTIqqq+NyYeFx+klpqfr8ovHTCxrrDXMyIdGRu6lZabprkuHPimr7tfPyccGBkxnZecpLc4H9GgqK3JVy0eGBgmuZ2coro3HT+eoKW00TghGRcidKad\nn630HyGqoKOt2zsmHRgeSaKXm6jMKBxqoqKnyzgjGxgcRJ+WmqXELhwwqJ+kxDsmHBcVL56Ym6bBNR02pZ6fskkmHRkVJqCbnqfFLBxKnpyerlEnGxkXIKaanqLMJB+5nqCltk4qHBsdH7ydn560JiS4n6KswT8sHxoaH2Khnp6pLCK9n5+nsWItHxoXHT2v\npKCkTiDjnJugsN41JBwYGzSyp6erySQvo5qcpb8/JRwZGSm3oqGrzSUhtZuaoLtEJRsbGiiunqKszCshyZybn7s6IhscGx+0m56kyiYivJybn69KJBkZGx7Fnp+k6iEurpyaoa1LJRsbHR9IqqOlWx8+qp2bpKtxKh8bGh9Dv62juypDrJ+bo6rlLCMeGhw8\n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\nrLv1Pjk2M1erqmQiGx4ntaCmqa685c2mn7A2Hh0aGxwmup6eoKCbl5/HKCQgHRwbHB4qt5qSjI+ddC4sIyMgHx4dHyREl4qOnbHEOy4qKScmKCYrzauzr6agqrHFTDcuLy80yam4Ox0eNq6iqau62UxEwqOlxiYbHBkcLayeo6OpqJycqj4hIRwaGhweLaqa\nmZCOl64vKyUfHx4dHB4iOpqJjJSr6D0qKSYmJCMiIzWypJuapqq8dj0yLSwsLDm6rs4sH1CopquuxFI/O0qyoq4+HBsbHDumnqWmrriqnJ+7Kh4dGRobHzamm52YkJShViYmHx0cGxscIj2djIuPnl45KyYlJCIfHx8o5Z6RkKKst0s4Ly0oKisrQ7OzcS7b\noKmus8tBNzk3aKmnxigaHB5GpKGorbbOyKWdqU8eHBkYGh9IpJ2fnpmVnK8uIyEcGxobGyBOno+MjZe6MS8mIyIhHh0fITeejYyZrrpGLywsKCUoJirarrnFtqGosrtiPC8zNDi/p7VGHhok+6KlqbHG5Vi3n6K2KxkaGBog+6CfoaOimZmi3yIhHRoZGhsf\n+52Wj4yTpDcrKCAgHx0bHSArp4uKkabYSS0rKigjIyQjN7Ospp+lqbXNTjovLjAvRa+txTAbJ76kp6u151tJ7qqfq14cGBkZIsifpaWor6Kanq0uHR0ZGBocIdOcm5aOkpzJKCghHx4dGxsfKa2Mio6Z2T0vKSgmJCAhICjLppyTnq+w7EE0LysrLC/frbfy\nJyevpayuvFU+Pj/Fo6a8KxcZGiW6oKerrbuxnZym1h8bGRgaHCe/nJ6ckpGapzYjIx0dGxsbHiuwj4qNk68xLiglJCEeHR8hPKeWjZaytmM3Ly0qJykoNLmuvGQ5rKWysctLNjc4R62ks1seGB0qrqKprbbIzqicoq4vGRoXGBwrsp+hoZqUmJ/DIh8dGxoa\nGx0trJSNjZGePSkqISEfHhsdHyyskIuPo8dpMy0sKSUkJCdirrKvraqosrzhRjUwMTLWqbHGMxkcNqymrK/I71W7n6Cqzx4WGBccMqmipqWkmZiepzcdHRkYGhsdMqaYkI2RmbgpJyIeHh0bGx4mto6Kjpa+PTEoKCYjICEgMLeuppidsrLLSzkvLCwsObWu\nv9onHVOprK+260hCYaqfqbI0GBcZHUWmpquprqGZnaK8IhoaFxkaHjyinJiOkpmiPiEhHRwbGRodJL6Oio6QpjUtKSQkIB4dHibVqp+Pkq681ToyLSooKS3ur7u+ZCzZprK1wUw5OT6/o6iy2SEWGR9+payws7+xnZ2kqzwaGBcXGh9foqGdkpKbnrUnHR0a\n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\nKz2qmJyfprDA1VY/OSkeJykkKjGympqdoK3F60AqMD0sKiQjJi+2mZieoa9NQNlIPTQsKCQmKTHInJmkq6m43mZAOTEuKyglJSxLp5mcoKm+8E9IPjkwKSYiHidkopidoaq6z/hWPTYvJSEnJio/p5mcn6Wwy2ZROC4yLSYkIyY1q5ianqay0UVKRTYvKiQi\nJCc2r5qanqazv31NPjQuLCcmJiYuuZubnqKuxV5IPzk1LygkJScsyZuZn6Ovw/hWTTwyLiomJCUrX5+an6GrudVRRj84LiglISMnQaKZnZ+pus7kTjk1LSciICMnQaOYnJ6irtRfSjgyLCklJCYoOamWmJ6nst5OPjcyLiwmIyQqRqybmqCnt99URT84MCwp\nLCokL7mcnKGlscPvTD86QD0mIiQiKtKdm56grb/q18o8LS0kISAiKd+cmZ6gp6nDP0MzLSkkISElKlqfmJearrz9PjowLiooJSIkKsqZmZ6grb5bRj05Ni4rJis8KzWlmp6jqrvhX0c7NjdQLx8kIy6wm52ipbLOXVfF2SoqJB8fISy5mpqfo62trEk2Nioo\nIR8fIy67m5mZlqfh9Dw2LisoJCQjJCy4kpOioa/PSjw3Ly8sJyQmPVxPn5qhpbHITUdANjAvPE4jHyg6pZyfpau55ExHark9IiUfICE2qZucn6ezuqq4LzMrJSAeHyE2qpmcnZmd8kU/LiwnJiAgIyQwrJKOnaqvY0M2MiwrKyYiJDG5qJ+aoqi56kU8PDUv\nLC5aQB8q1J+do6a0wmlKPj/CvSYfIh4kQqKcn6Grvde1p0ooLSEfHR8hP6KanaCemq02Py4pJiIfHiIlPaWVj5Ksuuo6Ni0rKCgjIiMqtpWYn5+tv089NTMwLComN8YvJ7Cdn6WrvvZQPzs0SrNMHSEgJc6fnqOlsMRm4qquLCclHR4eJF+em56hqZ+d7y81\nKCUgHh0gJ2OemZWOnfVwOS8rKCUiISAjJ8aPjqGjrd9ENjAtLSooJCjpvTytmqKnr8tMRD43NDPbti0dJCu5nZ+mqrbXWk3Fps4jIh4cHibJnpyhpa+vn6c1LCshHh0dHinInJqbkpS2Pj8uKScjHx8gIirFkoqWqK7ePDQvKiopJiMkN6+opJugqrbgQDk5\nMy8tNsLLJCA4rp6jqbHCa0lBSbOpNh4fHR0qt56foqi2w6yevCopIx0cHR4qtZubnpqUnU44MSglIh4dHyEsu5aMjp+84jgvLCgmJiIhIinDmJWdoqrBWzszMy8tLCpAtFYkQ6Wfpqq52k9BPzpyqrclHh8eL6yeo6Stu9nJpKFOJiQdGx0eLK6bnZ+jnJiu\nNi8pIh8dHB4gLa+Zko2UtVI8LSsoJCMgHyElRZeMl6Wpykk5MC8uKyonKs+vTFufn6qswllDPDk4N8ysUx8eITGon6eossx7W7ygrDAfHhscHy+qnKCiqKucncgtKiMeHRwdITGrmZmRjp9eOTIoJyMgHx4gJTqcio6frsk8My8rKykmIyQzs6utn5+qs85E\nOzg0MDA5vbM2HiNJp6CprLvlT0tgr6HDJR0dGx85p52ipa24qpukRCckHRscHCA3ppqdmZKXtDcvKSMiHh0dHyQ7n4yLlazuQS4tKigmIyEhKN+fl5mjqLf9PzY1Ly4tLEOxvi4mz6GlqrDGWURCP+moqjweHB0fTKOfpqq2ycSjnbUtIB4aGxwhQ6Kcn5+a\nlZ/4LCoiHx0cHR4lTp6QjI6ffjwwKikmJCAfICQ3oI6Poay6RzkvLywqKSgq2q3POrueqa247UY6Ojk6w6a+KxweI9ygpKiuwdtouJ6j9CMdGxocI9yfnqKkppqarDkmJB0cGxweJeicmJCNmLkyMCglIyEeHR4iLaiLi5mtxEIwLiwqJyYkJDOyrK+noKiy\nv1M+NjU0ND+xrV8kHS27oKertdpYTnarn7AxGxsaGye9nqOmqbKlmp/EJyIeGhsbHie9m5uYj5SjQysrIiEfHRweIi6rjIqQoXNHLiwqKCUiISEo0aSclqKqs+5DNTEtLi0vXa67PiExqqWrr79SQT9Cy6Sn3SEZHBstrp+nqq+/uJ6cqkEeHhoZGx4tr5ue\nnZWTnLcsKCMeHhwcHCAxqI+LjpnNNDAnKCUjHx4fIzyjko6bsbVOODEuKykqKS+9rsRASqOmr7PRRzY6OUKxpLg5GxsfOKahqa+70eOsnKO9JhobGBsfO6eeoaOelpqmTCIjHRsaGxwfP6KUjY2VqjAsKCMiIB4cHiEtpY2Lk6rGTi8uLColJiYmSq2vrqql\nqLS/WDsvLzEyZ6qv2igaJN+kp6y13llNyqKfrUUbGRkaIeSho6anqp2Zn7MpHx4aGhocIeedmZKNk55XJyggHx4dGxwfLKiLio+dfD4tKSgmIyAgIS64qJ2Voq616kAyLiorLDa8rr5YICmxpquvvVc+Pk+voKm9JRgaGii2n6errrepm56nUx4cGRgaHCe8\nnZ2ZkJOcrisjIB0dGxobHi2mjIqOlb0xLSYkIyEeHR4n3aKWjZmyuFQ2LiwoJygsT7G2vkc7qaexttFDMzQ416eot0MbGBwtraOqsLvPvaCdprUoGRkXGRwvrZ+inpaUnKJcICAdGxoaGx40oo6LjZKjNSonISAgHx4hKd6cko+Yvj4yJycpKyouNfqknqGi\nyzxJOzYwLSwzRsSqo6OqaigtNTxRXVRMXc+5rqqqwyomKy07VNrAta+wtrOwwS4lLCsuOUf6vK6opqapujIgJyouOT9EbMKzq6ejpcQrJycoMDtHZs3BuLCrqLJBNz02NDU7SN/At7Syr7o8LjxCWezzUVDtyLy2sLg/JiwxPWjMvru3u8K/urtdKiktLjpN\n2r6xq6qrrrfmKyUsLjc/SGXJta2qp6evRCcqKy45RFTnybu1rqqrwDc3NzE2O0FQ2MG7ubSzxzg1SEpZXk1KXtnHvbi2yjQqNT5Wz8XFwcHEwr67wT8pLTE5T9bEuK+ur7S7xEYnKS8xOkBO3bqvq6mqrcktJistNT5IUPXGua6rqaxtMjUwMjo+R2LPxL+7\ntLDMPEpVUltJREtvz8S+vL9rLzRMXcnFyM3Y1tDMxsHcMSkwOE7Pxbq2tLW9x8reNSgtMjZAT96+tK2srrC8RCgqLjM/R0xfzrqvrKqquD8vMS84PURT99HHv7eusu9BTUpFPz1BTPzNx8S/wFc4RV3ez9jxWF3n1szBv2cvMT5L6dDBvry7w8zKxl9i5snL\n3XllZu/b3n5fVk5LTWNy78zGz9/p7m9idO/3WU9PTFZv38i/xdtfXWn/9u/iX0xOUV3t1snK0OB5amT48m75a1JTWl9cXtrLzeVxallj6eXd4mNORkpTZuPPzexjcnXt1NDXcVROTlFXduDPyM/f3Nvf7O/p9GBOTU1OYdzJw8vfZFZbbuXq9F9JSE1WddbH\nyN5nXWtu9tzs+XNYU1llcnXZzdHtXm1obtzW2N9sWU5PYOjMys/7VF1269bT1nlOTFBkeOfQ09nvYm/z6ehramRaVFJfYm3XzM7be2pVU2ju5G9dTkpXet/NxMffXF9z7eng6WNZVVhp5dvY1dDY5/x1bV9mcW5gWFhXVWTfysjV9ltXW2j37eptUE5Z+NrX\ny8zhbF5kZmp6Y15ma/f87OHp0svO42ZhVU9f/d3feG9faujazMnQckxOVWXr7ef9W1tk/evn2tvmcl1mXmBzaXL9Z1pZXl1h3svI2WReWVp84uLvZlBNWuzRyMTH3VlWX2Ns/mlXUlRj7uTb1c/P3GhXWVVRW2z182FdZWrw1cjJ2GRNT1p82drrblNQXu/d\n2M3S911b/uft3+xubGZmZ3n3et3Q1OdfYmpm7t/h/11XT1Z23szL2W5PVGnz5e15Wk1PW/bd4NbT335hY2JjaWBfbHBxannl4c/Fx9pjWFRWbt/d9GBaWWfcz83Kz3VNTVxrdnR0ZVtfevPq4OHd2eJyYFtdZ3ro3+1mYF5eetvLyNlkV1Zf79nd621TUV/o\n0M/Ny91jW2RkZXxoXGFn+e3w29jTzdJ8UlJPTV355eZlX2Vm59TOzttfSUpWauLl9fVeWmzv39rU1NzwZW52aPH4cu32aGVz8OXSyMjVX1ZWT115a2FdU1Be48/IyMvdU0xVWFljYltbX3be1tLNztHcZU9QVVNaavTkf2nw5d7QyczdZU5NVmnn431zXlRk\n4tfWzs7jZFddbmZsc1xcXlxfft/h1szQ4V5UW1VYZ2lfWVdWX+PTysfS6llOWWNpbnJoXF504M7Py8jU6GdYV1teXWJyfvN8+tve2M3T/FhPT1JcbvDvcXRoaOTX2NLU9ltYXmx+ee/3aWpuanzj4NfR2ev8bHJ6am98bltbX2nn2MzHzuD2ZF9jZV5ZWVNU\nYfzXz83Hz+9oXlZPU1ZYX19len7b1tfO0/lWUlNTXW196nds/m/o2dXS1+tiYXf+5d7m4m5bX2Boe+ba1t3+cX9v/v1maV1PTVNd/trOy8/rd3RfZGxhWFZRU2bk0srIyc/6XmJdVVlcW2NpceXY0s3Nz9b4WFRWVF1udPX6a/rm4NnS1eVuWVplZm1+Z2Vf\nVFpu7urd19vje236bGFmWFdZVVRc/uPRycvP3v7zbV9nYFlWVlt62tHMx8vR5GdqZVlTUlJVXGN63djTy8/Z7V9WU1FWXmJob3F94Nzazs/eb1xcZGZrfH1ubGZn8+Hk3NTZ3+379fZ6em1fXFpZXvji08rM1N3s+25eW1hVT09XZt7UzsfJ1ORuYllRTk1P\nUFdl/dnOzcjL23ZdV1FSV11qbHHp39XP0M3P42BZXmVud3b2fWlvbvvq7uTf63Ft+fn17XtvXlNTVVtq79fNz9vl297q/WNZU01MU2Ho183JytHe4O5tYltTUlBWafDbz8rIy9r9cG5eWlxbXltba+vc19PQ1+plXGFgZGtjYWdhZm787ujc4/hqbPd6b/Z8\nbGZcXWB48ebW0dXf6d7f7+95Zl1ZV1lp69vPztPc8fl1ZF5bVlFRVmB+49rOzdbmdnFsY11bWl5iZGvx3dvSztXpb2ViYGl5b2prb27+5N3Wz9bvaWz3fXN6e29nY2Nm++nl2Nbd7Pz09/51aWJaVVZWYfzez9DZ5/R9bGZjXVxXUVVd/eHZzcrR4fh+bWlq\nX2FmaG1z6NbRzs3X9GdnXVtndHlqXmRqdOnh2tnhaVljbXB8ff79Z2Fka/jn3tvd6f309X7v+m5qXVZZX2zr1MvN1+jk5n15cV9cV09SYurZ0MvL0+v7/2JdXllWW11hbPPd08/S3W5dYFtWX2xvaV5fa/7q3dbb6mdYX2119fPy7nptcfTs5djZ3+j79v50\n7+rw/mpdWV9pcd/V2ettcP5zePh0YlpUUFz65djR1Nvs9/N3a25qXlxfYmzs39PN0Nrqdm5mX2f99XJlYGrs4NrR2OxrXl9r++vo7XRlYV908u/g6HBob399ffTr7HNgXFVZYWTx3eP/cXr+9uzq7mpXU1BZ9t7Vz9fg5+Pn6uv4e2JWWmFs7ODY0Nbm+3lk\nXl9eanVkXmBn8eHc2N10Xl5bYfjl4+h3am9v+unp5OpqXm/28uff3t/wZ2RiaHz159ze7+7s9ejh6O9tWlhYXfzc1dbefXj0fXb8cmZdUlVifebd2dnffmZpX1peXV9ramhufunb1dfe/19gXl1/4N7g83j159/c2NzwZFlgfffp4eXp+2pmaWxrevx9/3F0\n+3j75OPycWFcXGNy39LW3vdy/fp/7/BuXlhYaOXa0s7U3vJ0cG1maW1maHX+7t/d2tHU4XhfWlhXY+3m7PN6cfXj4NredFpSVGB3693h/G1sZ2x/fPPvbmZpb/Xv7uLd6XVsY2N4893P1N3rfn306unsb1pWV17r2tLP235lZ2Zna2hmXlhdcPTd2trV2e5q\nZF9eYmh+7fv7f3Lu3dnW3HtcWl1n7d7a3vptcnvy4d/g7WdaYXns39/i5/BuaWhmb3nx5Ot4dHJv/Ojn8nRdWFhbb+XZ1eFtX2ZwdvT8aV1YXG7v2tPR0trrb21uamxydPf69Ojr49zU1eB5W1ZYW2zt6up7am977Obf4XdcU1hqfuXe4uz8d3F1/v726e78\na239/fHk3uh+aF5eaPbc09TefWpv+/Hs7HBdV1tq69zSz9frbmNgZWRiZmJkZ2z25t7a1df1YFdSVFhi+/Z+c2xy9eDd2t5zW1ZceOzi3OLveX348OHg4N/wdm9v+fj79PV4ZWNgX27x3tbd72teX2VwdHBlWVZecODW0M7a8mhiY2VraGBeX2vy5NfT0tDX\n6WleWlhcavju9/Lu7eLX1Nbc/FtTVl5t++nteGx08ere3ODwaFxbXWVzev54cmdnbXL57uPf7HNnYGJpf+71/WpiZ37e1dDP2vJta3d4+/ttYV1je+rZ09TW4v5gW1xaWl1jamtv9Ozf2dTU4HxcVVVda/fs6/5ve+3f29nb7mddX2/25uLn7v51b3rz6+nh\n3+n8fPz89e7q+mxfW1tl7dzU09v3a2hub29xZFpUWGby29TT2ed2Y15gYF9fYWVmbPHk29bT1N/+ZF5fZnjs5eTueP/t3tra2+5lW11p/u3o93BjXWJr9unn5Ot6bG/6/Hx9dm1gXF9n+t/W0NPd/GdobHJzbmhgXWT/39LNzdXpbGJkZ2tsZ2VmZnvl29bU\n1druZVtaXWJrcnZ4bmx18eDa2uD8X1ldZXT8+m9iXV5s/Orj4ebzdG7/7erv9XhybGdv++fb1dPY4vN3dnN3empfW1pfcefZ1NPc9GlkamhiYV1bXF5x69zV1NXc6HZmYGBfZWhqbm/+8eLa08/Y7WpfYWpx+fT9bWZr/uTb2trf9G5qefXyfGxlXl9ka3rs\n4tva4vF6dW1rZmZgWlZXXm7p29XV3fhrZGZpZWBcW1xo9N/Vz8/S3PF2bGhmZ2prbXB27+be2tra5GxcWl1lbXp7b2piaW/z4uHk8G5laXzu6ev9bGJeZm157efi4ury9Ozp7fhya2VeYGr84NnU1dzrfHh0endqYF1cZHjr3NjX2+lwZ2traWViX2JlbH3w\n5eHi5+9tX19iZ21zcWxoZmpy9N/b3OP7cn/u5uXo83ZpYmz97eTf3uPv+vLu7PJ6Zl5dWlxjcu/i3N7p/H3/fHd8bWFdW2Fu8N7Z19rl/HX7+XZyamRjZnju5drX19vk8nNxc3N1d29saG7569/b2d3ubGNpb3v8f3JqZGRv+ern5un3bWlve/7/e2tgXV1g\naH/p4d/n9Hn87e3v735oX15r9ODY1NTa5PX69vZ4bGVfXl9s+une29vj+21paGhna2xlZGRs/+rf3Nvg+mtqdPv9+fd0a2hqdfTk4eHi6vb+8ejq7e58a2ZpbW/x4t3e6O728unq8f1uY1pbY3br4dzd6fx1c3r9dmddW1teZ33m397f7XFrbmtpaWtrZWZ0\n9erd2NnZ3vFucH3y9Pfxe21uevrr39/o8ndrbHH8/Hp4bmdgZWxtfu3m5/b+8e7q6ez5c21fXGJw7OXf3efw7urq6er0bWVhaG/+4t3c3OPy/fLyfXd2dnBobXp/7eTi6PF2aWlw/ff8fnVmZWxxffPu+m1mZnF++fH6eG9nX2Rqb3vw5+Tp8enl5OHj7H5x\nZmJoeujg3+Ht//zu7fX2d2FcW19qee3k5enydmpvfXBtb25uaGt78+be3ef7cGZlb33183tza2/16eTj4eh9bm/56enq6/p4cW1uefPz7ejr73p68vT07vpqX19eY3bu4uLtfm9x+/N6cWpeWFpic/Tq5OXu/3dxd/d+c3p3efry6uXe29rf9nJsaG998uv2\nenZ5/e/q7O58YVtfavjv8vB+cnF6enn4+Pr4enl+/Ozs7urvemtpZ2d96d7c5e739+zn6/N7amBkcPLg3Nze6vr+/H7+eW1pZ2l3+PHo4t/h63NnYmBkanP/fG9tcXz05+XseWJcXmn/7/D3eW9w+u7r5OPp8fz87Ofk5ent9XxtbW1u/Ojh4u18cnT9+/p4\na2JdXml+5t3e5vpvbnr5+n9waGlu/u3o5N/g6vluaGtwdf3u7evu9PDt6ODe6n9pYWV57ufl7PT/fPjv7u3ue2pmaXfv7vL1/HRvbW1ubHX58vh8b213/H//emtlX19neerf3ufu8/Pr5uvw/21qbvzq4uDe3ub3fHZ2fG9qbnJzd3Z5+ezn6PNvZF5fanr2\n7fN7e/rz7efl6X5nYmh77ery8/T5/PTu7u7t7e72+/z67uvr7O31em9uc/nk3d/se3V3ffj9e29mYGJy8+jh5Oj1b2prbWtmYWJma3b79+/l4uj4bGNfYGdz8ejo7vHr5N7b2+L2al9ldPLs7/j+/n337ezr8n1sZ2Zpbm9zeXx5dnNwcn3z5eTr/mtobn/4\n8/J7bGts/+rh3eHwfHJyffT2e3Zycv7v5+Tl3+Dr/G5qZ2pucvvz+3hzfO/o4uDsb19dX2l7+/h4a2xuefbt7PdxZF9janF1cXR3cXF5/vXt5uDh6PR/eP7v7e3t/G9scP3p39zh829sbm51eG1oYWBneO/o5OPn73lucG1sbm93fHv7+fHq4t7h6n5mYmRs\n//Hq7f599urm4N7l9HVrcn7x7PH09fl9/vLx7+3w9fp5eXV5+/n5enFpYmZt+efj6f1qZ2tyen12amNiZXL26ePl6vJ+eH/4+n9+/fn18O3p5N7c4ez+a2ZocX75+PxvaXD97+rl729lYGRu//b8e3VycXP47u3p6vP8e379+vT5+ndvbmt17+Xd3OHsfXl9\n9fL4+HVpaW7559/b3ebyfXd3fXdta2tqbXX57urk5Ox9cmxnZ2xtb3Jtampv/e3o5ut3ZmZpbv709/n+/vfu5t/e4Ojv+vn19vX5+/l/d3x///Tr5+vyem5tbXJ1b29tZGRree7j3uLr+nx7c3h8bmpqaW/87OTg3+Dl7/34e29zcnV7fv/47ebf3d/j73Bs\nbXL99vj+enV4+O/p4+n0e29xeHl8eHBubGlqcXN3+PLx9X1zbm1xc21qamVja37p3dja3+ny+vz79n5uamxy9ubg3t7i7Pp0b21oZmZma3B1ffTu6ujr9XpsaGpufvj4fnZ5e/bt6ePo9Xt1e/rv7vT6fnl5fu/r7Ofn6+vt7/Dy8v53cW1ubnn27ePf5+76\nenV1dm5qZWFjaHbx6uXl6/l1b2tqaGVjYmNqc3v37+3q7fX9/Xt7+/v38fX48+/q5+Ti5fB9enn/9PR9eXJsbm53/vz7/3l1ff58fnxxbW1pbG9zfvfs6Ons8PT6/v50bWpkZGt67eLc3N/l7vD4fHltaGdobn7u5+He3+Pr+X51bmxpa25ydXz38+7p7PR8\nbGhpa3V4cnJuampwd3z3+n10b3J1d3v+e3d6eXz17+vl4ODj6O3u8Pb5em9tamtx/e7m4eXt+Xlxb2tqaGNjYmh19+3n4+bu+Xl3dnN3cm5zdXv57evp5+ny/np++PXv7/b4+3/98+3s6ent8Pf18fLw8Ph6dHJyc3727Ont8vj5+v55b2tpZmVobXn67uru\n9P55dG9ua2dmZmdtd/Hn4N3f5+vu8vj5+316ff738Orn5+Xn7/19enp6dW9xbm5xcXl++fTy/Xp8f/379vv+eW9vb3X99u3r7/Tz7/Hy9Px4eHd3ef707efk5urt7vP7/H53dXByd//v6ubj6fV+eXRvb3JwcnN0dnr78+/u9npvbWxsbnFzdXRxcnN4e/35\nfHVyevnv6+jp6uzx9fb08e7r6+7x8e7w7uzz+3x0bmpqcHr58vf+f314eXp2b21qam53+e7q5+vx+P9+e318dXV3eX367+nl4ebs8vr9/vTx9PT6/Pj17+7s6+71/f349fH1/n96dXRxdnl/9/j7fXz/fH39eHFsaWhnam96+PX5fnwuc25kAAAAIAAA9RIA\nAAABAAAfQAAAAAEAAAAAAAAAAP//////////////////////////////////////9//////////////////////////////////////////////3//////////f/////////////////////////////////////////////////////////////////////\n////9/////////////////////////////////////////////////////////////////////////////////////////////f/////////9/////////////////////////f/////////9///////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9//////////3////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////f39/f////////////////////////////////////////////////39/f39/////////////////////////////f39/f///f/////////////////////9/f3/////3d3d3d3d//3\n6+fr7/f///93d3d3d29va2/d1dXd5+93b29vb29rb29vd3f/9+/v7+/v9/93b29vb///////d3d3b3f379PT33dnY2NnZ2dra2dnZ2dr//fv7+vv7+//d3d39//r/+fr593b59vv62tr729jX1tZX2drZ2drb19dY+/3zsTN2dXr4+v3b29fWV3LvsjP0edn\nWU9ITUtGP0ZAPkJMSkzn79vXzs7Lx8fKzMjHxcC6uLm8vsDHyNVda0m0vlk+PDw1Ozs6Pj4+PkQ9OD9NTEtJTlVPTl1fVWv//+/b9+vCyL6/vMO7u7y6urq8vbu2t8W/xL29z8Vn06i4Z2dJQDUxLzAmZ0g/LSssLC8zMjg9O0E+T3dv38rNysjZ69PN2dXr\n193M28vL0ca7s7Kztba2tbWztsSloau2vbvNb2dTTUo+ODc2OTQxNTI2LzU0Njc7ND9DPUxPUznd4/drXcbBy8Hb511d/8jJy9HO39nCzdvGT6OrucXDt9vFzctPqry91ztCNjg6NThAODk4OD1HQUVES0w8OWNLV0VRSl1d49Nva8vMurqut7q8tLi7vsF3\np6a1v8a/T1v//2NLPEdCPzM6NTw8PUNDS1NX7/9f/1tZTkk6R0NKQUv/V1NbU01Ta+vjv7u/wb20uru7vbefrcHM2WtR7909rsJjb005Mj04ND1LQ0xMX1XVzNnLvtHra01L92tKR11LZ05NPknbX8LLxsbMxL7Vzs1LtqrCvdXJQFFOUeddSUpfSTw9U0NB\nSFFna+dvY83L3dPBz+dnREFPQ/dba1FKRU9DOV1K23fDzMbBvcLGwmO1p7bJxsVr69fXX6m7xN9PYzZBNztMQz1ZSURZ691j68vJ53dCV05DSUFEREZPPTpIV0Zr39vR2efF1dPP37KqvNfLv1vFyc/M42tn1U1PVWt3SlHvd2NjW1lvY2Pb5+NXWVE9Se9b\nU0dKSj85ODpBPvfRz8e7vry/vcD3oqq+y8DGXdfPY7WmycjnTz5BQ0U9/2NKU1lJVWdvX2/R92dRUVFJS0dLRD89Pj05PUVN69nLy73Fv8m/vcetp7PJxsr348bTxs1fS1tMP0U7REBJTWdMRkJATEpRVWNbV1lESU3n691dT1VTSzhFSkhv38jIvrW5xLW0\nw7yhrsu/zvdb3VNCpsXTd1cyODk4Nz9AOkxFPkR3TE7/3f/vZ1ljY1Ff71tdVU1PPUdnRsnTz8m3u8y+vrrEsaWxx9HZTULO3c7bTkhdQzY8OzY7PkNDRFM+QFFMTXfrb2fnd2dvxs7A2dnfY11HTWtZZ8nTvb+6wcnDvMZDobDK31vvOl//OanLZ19bNi46\nNTVEP0lNSUNN6/9Ozs7f2+t322/N18rLb9njZ09DW1l3yO+8y83PyczHyDursMZXTVcwX2tf70ZATkA4Mjk3NUM/X1tJUVXr53fJz8zLzc/Z17vBu7rX281RSEREb07nw8jAytnNxczD782sw1tXTTg+Pry8XVtjQS0yNzI0PWtIZ11XZ87I78jGxsjJzczJ\nyMzKwN3bzltERELfWd3Ly87b1c7X281rU6vLR0w8NzTnSlNMPz89NTU4NjdCTe9v6+fXzsjLwb++xsnP0b27ur28289dS0U5P05CzffXzuPd3cfNyvdFqrldT0s6Ojmux+tZSTgwMjM5N2tGZ9X/6/++xsbDv8HLyNvNvsHCw7/TxVdRQjpKUUXXa/9jU+/j\nX9/bbzWrr+M9QUs0SmddX1VPUUU9Nz88093vzcPN18PAy8fCxtHb79u6vcjIx8ljW0I+N0VCX3dv12Nvd9vd59vZNMeu50RNWyurw+fNS0c4Pj02Pk9Z99XVwcHOvsLBysHEx9vvxcvE49nX0U9FRzw3O0HrWWNrXVtvZ3dv498/N6nJPGNVQUxZ68prX1FK\nPTs83f/d58bAy9fFw8vJzMbL52/TvcPP79/fVT5APjI+RMpD99Xj69vX1+/X/0g1pclN9zy6vsrP30o6REI3NldX3/fVwr2/wr7Evc3Gztnd1dfX71HbUV08QDo6O0BnV2dd52PX3f/fd9lvYzeoyVvn909HxtfL61FLQjxAR+/rXc3Kxs3bzs/T79vra9Xd\nxs3TXWtPa0E/PTxAT0vMa+PR38/T483f5+trPKnJZ+84rb7EzedjOEA+PD9Lb//rzsvEwdnRys7d3e/Z591nU0tVTUtNPTo8PU1ESclra9HXzdnbytPX1903pbPG7+frT+vE529LO0FEQD/RVevV18/Ta9/v2fdnb9f3wM7d205PTUlCOz1JSE9R0WPN38rI\nydHJy83T20y9qb1PPKvDxMdjTjg9SzxGQT7M3/fVycrn/2vj91tb1/dnXUxKU0ZLR0k/RE5VV1frwuvTvs3Iy8bHy9vfVTCnvVXb991Vx/dNR0VFPkdESmvf3d/b19tV/+t3XXfZ39vj01VdTEhJR0pCUVtbd+vTwdfIyMPLysjI3d//PLyx0UKut3fH/0M4\nPT87R09AZ87n09fNze9r2d9vb9fn6+9MU0tdS0NFXUVja9tr593dycXIzc7Gys5j42dNOKu9Y87XTUxvQkw/PTxHTkxOZ8hnb9fv22t36+vv53fC0etfX2dHRUR3Rltv99ff1cbIzcHEz8jO01v3b0wxpq/TRKu8Y19MRTM5NjxNSUVdb9vT2dXL9+9v5+Pv\n1ePdUVlfUVdIS1FnZ+PRyu/Nxtm9y8vZ1cvvWUtfRlkwq7vr2WdnPkhMPj49P05vTV3rwm/f1d3MZ1vX12tvvc/V/3dfS0hLR2P3/8zFzczHv73Mxb/by+drTU1ZU1M0qOdTsNtMOj42NTw4SHdTTmPM4+fbz8fRUdXVwGvI1edfV01LTU9AWdnf1cjJyt3X\nwNfL49/bZ1NFUU9dVzettcZTTT9EO1U6R0VXa+9nWcnf3d/d0c5Td8vnz8jF19dnWUxET0dG583rzcnIx928zdvF4+djVVdJTV1fT0GlXa/OZ1s2QS4+S09n3WNXyc7VzdvLzf/R08TNzs/T909LQ0hTREj3zdHZx8jT18fKb+dvUVFNSk1RWV1XNLq0Y0c+\nUzNJSk3nW+Pf4/fT1ff32eP/x3f328TOzNXjXUhIQUxKT//Ix93EwsfOzL7Z791OTFNTSU9ZX19bNLSub3dNPT08Rmtjb9lr18vX0dXX48PLzc/JztHb2VdbPUZDUUdV48/NzMXNz8drzs9RT1NPWUpMXVlbY1kvqMpHOV1FOVnv39nv2f/F62/M5/fdys3O\nX8nM0ddvd1tFPz9VQXdf28vH1cfMv8zfyV3vY1tRX1tXY11n/z/VvqpVd01DRm9dd3fP39vL/9nfx+/G1cXX1c/j21lVQj45P05Ia+fb2cHb28Pd413vX0xKW2t3X/93Y/dfTy6s70JRTXdRz9vf7+vXd91nV+dj69PPzOPP29vjU1FKSjlNRVvd4+vNwdHd\nvsPd32fOS2PvY+vf9+9dZ19RKc+qyetb00dV2W/r2dPbXXdX3ffXzcnK1et3/29OREM6OkpM/93d3c3KxOPNz29rb+tXVf/V5+Pb/2tjU0c4R77LR+vVTu/MY+/TV+NvV/9fZ+Pn1e+/3XdnWVVDR0JJTVXn687X183MxsXV39lja9t339Xb1d3/X09RRzon\np7DfxtnrRedfzuffUVffUV3L1c/d1dfjU1VKSz88PEhPzdfrz87b57zP3dvf91lfz3fdzs3f5/dZTD89OSiot2vT48pK3+/rd0hT409V/9vb99PHyN9XTE5LQUFRS+vd0d/O0//CzdHn79Pj9//J09vMytPrb05DPz47J6yfvMnTzT9d21lfSV9XWUvZ28rd\n1dnr2U9JRE1CPlNNz8XI49fTym/JyV3b92f398rT983Na/dXSEA4OjQzU63EZ9vVRdPXVVFLTVtZW3fV2XfGz8/fUURBT0ZJV9fL2crb28bX69nR3//j1c7nwsvXz9HrWU1DPjs9PytCn7Bvy9FLWWdNXUtDTF1n493Oz+Pn43dVP0NRSkxPxMfFzePLy+dn\n48FbWdvZ393Hxeff319MRDs8NTdNSjWlt0/Zx3dR9+dPSUVb39//583H19vdWW8+QU1jWdvGx9PdxNHjZ0rv62/nyszFzci819tv/0ZBPD05QkJHMZ+svMbMXTrrXUxPQUnd09/XxM3fZ2Nr/0dEWW9b1dHI0czXZ1tfXVn372vjys3V18rv/19TPj4+Oj83\n5/dCsbCyWc/bSGv3R0hIa9fV78/HyNlR/1VTUUNVX83X08vPz89bTuNJTmfO2cO/v9XPwuNrS08+Pj1DPz9TQUvTn63PxWf/R0dTS01b29HO58rJ31dbXXf/TlNfw2P/57/b/11rWVtNd9HK07zGz9XV605OQz0/PkVBOP9f9zWxrcz3ye88TVM/b3fd/8LV\n1ePnU0xRd+drSNPR12vD0d9f60xTU0z/yrzDvMDG1c/rXz9BRj5DR0FHTEY3rsylvc/PSTxBTEz3V93Rzdfd7/ddTl/34+dLzu/nX9/R319fU0lXXefJvsK+v8fZ91VTP0pDRURKTEdPa8tvNaa42etXSTpKX2vdb9XKy/9Zd2NPUffr71HX3+vI3+fn3VtZ\nTldj28O+u8TAxuvrXU5BQ0VGREVXTEtMO6tPp7K5R09EOE7Va1fd49vX505b405P79P/1VN32Wtva9vrVU5bX93Lwr63yMTLX1lCTUdGR0tGTv9BV+Nnaz+9qb1HW0pFVd/348zV1W9fR0prUVXv32/dY+/f0Wdn299Zb11vzsrFvra/zNNrWU5MRUNFTEJZ\nTE7nP3ey11+juj9RSU1fzs9fzW93V+9GSXdbV+vXb9Nb73dXTv/R919n5+/HwcO9vb7rb1dOQ0ZTRkhLY09K11vvZ2tnP8W3/0Rr91fj0dPO22NVb0dFZ2f3Wdd33cxXa29r7/fd93fn2dPJxcG/v1vrb1lMR09KSltXUVPnSzyvx85M67JnRGvZd9vjZ19O\nXVVrUUhn9//Vb3fN51dZTmfX293b98zMyrzEzMrKRV1RS0ZJTFtOTldJ79nb/1tnYzr/s8VLz87Td83fZ3dMTFNPSHdv11VX487bTFnv/+vZz9Hb08fVxs3N2c9OTm9dSEtTWVFOU+NvT0SxxdNrRlWzx1XHxtVnd1VPTlFRVU9RY9NvY0nba2dGQ2t349HR\ny83Hx8TF0e/390lFVVlKVVPZSVdTd8jX2eNMSk4xsrLHd8S/9/dj3XdNR1NVTFfr1WdPVW/nX0ZO59/308/LzdPIz9fv72NnW0x3Z01Zb19jT9vj/1HBu/9vRkqxvt/NwsVrb1VfTUdLWUxNb9lnZ0ldS11XRUtn19fOwMfIysfK2XdnTFlPS11VX1fjb19N\nz+//ynfvQk06t7XH1cjFzuNjY3dVP0hTTUfdd19ZSVNOW1dNV+PX0c/HxsnPzszdV2tVWWNv/2tZa/dda2PV2Wf3d93/TMG4vt/Mw8/d911bSUtESE1RXd9nVVf3TGtVUU9X39HOyr/EyMrPy+NPWUtRVWNbXW9f3fdb1//3Z3dTSVVdu8Xb48THzd3jb2NK\nT0lITU53a09bT19Ib19bY2vPz8zIw8XJ1dPnY0xPTVf/42Nvb2Pn72/P62d3619X37q+xt3Kxs3RY+ddVUFLUUJKU3ddUU9T611HY11d39PTysO/xM3J4/dnU0pMW2v3XVXd9/fd79/fVWNdTVvVwc/j783Ly93fb2dPRFNVSUxO91NNSUx3701ZV3fO0cvG\nxcbDy8n/XVlPSVNn/+vvW+fj/+/PY+tOWVNZXcu9xtnPycbT391da01DSltMTVVnU1VEY2dnW1Vb49HTzcvDwsjMz3dbVVdJSf9jd1tj39vfd85jX1lOTVdbyL/G49PTydPV3/9rT0xRU1dKTlFPUUbna2f/WWvT187Kzc3Mzc/da0tLTklR92drb+fn3eff\n129ZWU1Ra+PKycrR0czN3d3va1lXUVlRXVVfT1lJU2vfa3dfd9Pr0c7OzMbJ3+9rSktRS1Ffd19r3+vZ98vj71tOS0dr09nMy8vN59nT6/d3TGNVV01Ra0dNU0vvY93r6+Pd1dHPx8zJzczja19JR0tTW1dfWd3vd+9322tvU0lGV2fR083JwMjRztnn/29f\nd2NVTVt3R0hPW2933efr59Pf2dfRysjK1eNbTkdHTF1ZVV/nd9/v98nd/29OREZja9fRzcTFzevT09/v/2dnX1tTa1dLSUv/72ff4/f/2Xfny8vLztvd/1VJTUZMW11ZXefn5+/P591bX09MTXfn48nNw8TLztfj929va19dTG9VU0lOb2P3d+/j/+/T5+vP\ny8/M1+t3UUVMTU5rV1t37+vv09/d42NVTklOWffdzsbExc3b59vj7+v/Y1XnW09MU3dOY+Pf4/f/293v483M0dHva11OR0pOTlt3XV3369Pd/3drX1VTT2tn3dfIw8LCx9Pn9+tnb2td91NVTU3/W09r5993d//Z49vbzs3O0eN3WU1LSlVO7+dVY2fX3Xd3\nd/9bTE1Na2Pfz8vAwcnP2+fn5+//b3dbW1lOX2dZU2vd4+tn59ff39XPzs/fb1tPS0xLX1lnZ1tdb93ja/9rY09VTFvr39XJxb/AxMzX43drb2tjY1NPUWtOV19ja+/jd1v329Pf29XN2ffjVU5NTE9vX2NfX+tr5/drd3djXVFL7+/d18jDvsHO0dnnZ3dr\na1lVS1d3XVdf/2dn9+NnZ93n2dfR0c/jb2dOTE1PU/93W13jb2f3d+9jX1dRV1Hf1dPMx8LBv87X0+NVV29fV1NOXWdXW2v/Z2Nv611d3dXZ29XP2e9vY05NS1Fr9+tf9+9nY/93b29jXVtdX9vT0c7IxsbG3efjZ1NVY11VUVNnZ193b+9rY2v3/2/b09vX\nztff519TUU1PV2d3711db2djY3fnXV1XX+930cvLzMnIysrj7913TU5nWVdPY2drb//rb2dbY+vvb8/V59nX5+t3W1lRTlNr72/jZ2dva2Nrd/dvY2937+vbztHP087R2eP/a11ZV2NXUVVjb/937/f/Z19n7+Pn19nb09vr62tXXV1TX3fv9+93XWf/Y2dv\nd11fZ/fn39/Tztvb0+vj3/fvb19XW2Nba3dv6+/n92dZY2v/69nX29vn5+t3X1tbWVdr7/fr6/93Y3dnb2drd2/37+/Z49fX2evbd+/va2Njb19ZX11na/fn69/rd19n///j29/b2+Pj63ddWV1jb2d36+d3/2djb2drXWdna/d33d/d2d3Z6/dnb+/3d3dn\nW1lf/3f/7+vj3+trX2vvb93b3d/v7+/vZ2tdXWN3a+/n7+vrb2NrZ2dfZ29393fv29vf3df/b/93b/9vZ29nWV13b3fn793j6/9fY3dr69vj3+Pn5/drX2NjZ/9v9+Pv7+9va2tvZ29ra///7+/f3ePd3/dfX2tv5+dv92tjZ+v/9//32/f//19nb3fr29/n\n6/f//2tjb11ja//36+vj7+9rb19nb2Nvd+/r/93f39/n71//b2v3/2v//29nd///7+vf3+frY11vd/ff3+Pr5+//b2NjY2N362/v/+/3d29rY2dra2dv7+/r49vZ4+P3Y11nb/fr6/fvb2//9+v/6+Pn/+9jZ3dv7+vn6/f39/93b2tnX2P/9//r6/fr92Nd\nZ19rY2/n7+Pr3dnj5+93a2tfZ/93b+v3a29v6+v37+Pr929n/2f/9+fj5+/37/9nY2dja//39//r9/93Z2Nna3drb/f34+fj1+Pv92dfX2f/5+P37/d3a2vv7///9/d3a/9va/f/6+Pv9////29nZ19na+vn9+fn5/9rZ2Nja29369/n59/b5+/3/2djX2v/\n92/r529rb+/r//fv5/93b2dvb2/n3+f//+//b2tra2//6///6+v39/9vY2d3d2937+fr59vr//93XV1n/+Pj5+vj929n7+P/d3fvd2//d3dvb+vn93d393dvZ2dnXWv35+vn5+fvd2tdZ293d+/f6+/j2+fvd/drW2Nv/+/v5+t3b2vv6+v/9+Pr929rb2P/\n9+vn6//vd2tnX2tjd29v9///9/93a2Nv6+v//9/f7+PZ6+93/19Za3fn3+fr6+93Y+/r/2Nv/3f/d3dra+//4+fr/+//a2tdZ19n9+vj//fnb2trd+/j3evv6/f/9+Prd19vZ1ldY2//5+vv92d339nb9/fv/29na2dv73fr5+93/3d3b2vvb3d36+v/9/d3\nd29rd/fv///r93f34+tvZ2NjWV9v9+/v7/f/a+/f2+dv//////fvd//v//f392tn/+/j3dPf7+v//2tv/2djX1tdX/939+vr5+fn429n3ef/Y11nZ//r/29nb2f/6+vd3d/j6/dv//93/2t3X11ra2trd/9n///3/293/2N3Z2tvd/935+fn49/j/2/f53dr\nb29n//drb2tjTlfAub7M2fdnY11dX1lTV2NfVWdjX2f//3fn5+/3b3d3Xdnd29/b39/Z293j729dU1VbU1vOyP/Pz99v5+/n/29ZU1NRTVFRUVNZW1NXX3f/79/r1dPP08/IzM3V09nj/+fra11PT0pMR0dNxNNJd7jG3XddT1lrXV/va11v6+fr19vf2dfZ\nzt/n7/9vb3f349fnd+9jY2dbW05MSkJDRURBTFXBwNfn29/Z02/Ny8z37+/v39PJzM/P2d/d79vv73dnXWtRb19ZX1tvY29VTF1VW0pFSURLST88TaKpy9XvR0FXU/fZd1tXU09T99PZzM3Tys7Z08/3/2PvY1fR3c/OzdfZb+dra1dRT0dJRUQ/Qjs/rrfZ\n729jRlt3d9Vj5+/3d2PK1crRy+vj611fXevTW1Nbd2Nf72f/5+frTvf/709OTE1fVUo1vramwW9NRjRPXUtZR0tPRkRO4+vdyca/zL/CwMvPz8PPx7zO1dXZ2efrd2dKS0tGS0k/Q09ORT5Aq85ZX1UuO0M7PElIQltLa1fJ28q9vcW9vLrDu7rDtbrVwMXN\nycXLzuNO429RTTs+Ozw4LrfbNsauXT7XSy7fXz4/Qzk1PTs/TldRz9X/08zf28/nur+1ur+8trnAvL7AwNt3Y+dRSldITltDRTkuo9NJR0kzRcx3UeNVRHdjVU/RTllTZ2NRQV33Tedn10vv18jLzb3CzLe7vc/d3WtZOtm011c4K7Hrb0FIPkzfzVlva2d3\n69nRz8n328hrRUVJTVNdT8xn7+e+yszB0cnXwcTd9853//dfX0NBPiyqzuNRP0E9wc1b/9VRT1lTWd/T28nL3/9NREc+QDs/SUdfX8n/yc3Gxr+7vr3JxsW+z8b/VUYvq61vO0lnQ1+/S1fnSmvvZ2Nnz+//d1lBPDs+TjpEXVXvysjVs7q7u760vL7Oxc1d\nY1VOST9EN++vyVFGV0rr6+9R2Vljd1FJU+/rS0hIP0A9OTw9PkNOTHfDwsmyuLS1t7q+wcS/ztdMS0hCPiuurNtBRkxFxM/bwcf/09dnS+/v91tTTD0/QTk5Pjk+TVtP1d3NvLmwr7C0s7rCzd3rU0hPSzUuU79ZSUZFSsfXy9XOxnfbWWfd2+dj918/Qj46\nNz06Pz9ATltv18a6squtr7G6xsvv/0xNRj84R1lKSUQ/SUvZZ9vN1d3DysvZ28rP993ZWUxXS0RNSUVHPkdXTv/T18i7tbGzur3Cz2dbRDw3OkI/PjxBQUNMzu/MwcjJyci7x7+8xtPZd2NIQz8+QUFKSkhMSuN3z8zPv7q+sru7wdPvUU1XRDo1NTQ1Oj1F\nTe/V2cbAwcC8u764vMPK0/9fV09MQEk9RkRBRk13TO/fz8a8urO3ssDDyVtBOjo1NDEzOEI/SU1X1+vLusS/urq+vbq7wMrX2VlNRERMPUVFTU5RSE/3Z1fXxb68u7/GwW9ORj83R0BBPDxBRUdNUf/n57mur7S8xczLzd/D13dOTVFJS0ZVTE9PV0R3T+9f\nb+/Lv7q9zctXU1FTPkVKTU9OV01LS1dPxNHDzs/Myc7Hys7X219TWfdZWWNfZ1dXZ11VTGtPXU132dPFyb2wuct3X0k5QkI8PD5DOzrZrq6xvMTL79nd98//TF1vW2dvY/9bWf9RP2dXZ09NZ1NZY1nKyc7NvsLZ78rPWV9ORUBB/1NbW2tv2dXVy8vLz//Z\nztv/V1NfW1NVVUlTS0xd72Nra09IzFvL78brvqu12UxFPDo6QEo7xqy0wt/fWWf3X1VrVdld42fZ09nrd8/rd1Hdd3dZRUtAPtvbWVNTVU6vrLDO02tfRU13//9KTUhKQ0Hr4+PT19vO3eP///9jW01jUVdvV2P3y87j51nOW28909vPP8Wqz2djXUA8V0RX\nO7qstsBba0NrSmNfd0tAR0tOWetj19fNzePftru/xWvJ1/9GZz9nXUs4orxGTlU/RD9rWf9OS1lNPURvZ03dyse7zr69zM3Rd+f/d11VT1tj087nyr3PTUxIOeM/NajFQEQ8ODE0S0RTRDequdVX984+48Hnt9HFvry+u726vb7EwcfH473K58Zfbzk0Njw4\nNCinvjs9OzUtNkFBV1Nd5/9rZ9dZx8rGubi2vLm7vcS7vbq8v7/LxMPHyde/zVc/UTk2OCwrRcU2LSwqJCwrMzU4PDY7q+fLa29fW8m12bWutq+vqaytqaiop6ijp6WsoaypxtdPRP8xOSOlXS4sKh8hISEkJigjJSMiJygvLi40SUA6T//Vzr66tLeztK6v\nraqmqaSmqKeurq+ttsWvn6rBvdE6PDMvNjo1NTMtNMtKRiw7JSoqKiovMDBJRO9R49nIvLu6r66sq72xv8XNvdHZPJ+uvrq9413rb/fRb1dv3T9IUT5LNDczLzgsLjcuNzI3PUVARUZRb9+/uri7x8TOv75ryE3Mprjbwb9O3cZrxL7Gv7jAVaWlrLLvvjE8\nNDkzMjs0OTA1Nzk4PD5T3bnX70c/QjpJQDs9I6DjTM9jRl3Fy7+srrWvsLW2sba9vsO9ycVb5/drUd1bSVFjVU1BRndvY1E5Ni0oLTgqLR+2uTw8Sj1r08r/w7u/t7a70dWfp6yusLnfy9XdyltPx2/v18zL58i9srjCY087KysuKSMoH7Y5LjI2PTM+SFHD\n47rCuby1sLa8vrnF1dnVycO/xcS6zb+9v7u+xK21tsHfUTQ1Kj0qJyJOUzIsMy0uOVc9Sc7nzsTT1VO1obC2uGNV72/Nd8TZ97/TvMS9sLiqq6qvtshnPzQ+Li4kLb41Nzw1LkZKNU3nVV3/Tf9r09d3Z+tjRUTb49tZ09tny8K+u7axrKyura+7z1M9Pj0r\nKbq16ztdSTVIW0/3zsbJyUpnb0M3qshd3TAwLjpAOT49OD3fVdnCvK6pqayos7/d4z/vKjVnt9lKZ1lKWcPnysDFyL3T99tT919LOe86MTFAPTk4QzY3R0Jda9PGs7O1tr6/XVk82TkzRbL/3W/j78vXurS2vbuwvMW9z+c1vsfC4y01Mzo5OUU8MzFTPmNb\n38TJvLvLzE0/Nj45K9271+dn18nJvbG3rrGysLG9usHJ4/drPGc1NDtLPE5GQj46XTxVWWPG09/d60ZFOTcxOSg/1chJZ+PT2cSyva2zubOvube2w+9nvdvHRTg5SEFBP1VJOE132dHPu77Gx9tNRjYzLjIpLjxfZ01X99nVvb+0s72ztbe4ub7Dz9VORV1H\nPkZda2tRX0hnzv/v68XAycPJ/1FAOjcuLzQ7Pkc/SENdX3e/vri+wrvAw73D1dnva1PLSVNMW29nT3dfXevVzdO+ur22u8TN40c9MTcsOTs/S1NjV1njxcS/wcG/xsjF0f9fV0g9VTdAQERjV2vZ/2vEycfMxbq4uLjL2+9HQTQ3P05ZVedd72fvzcXFwsXO\nztHL2XdbUUw6ODM1ODo/R11XUVnTzM3PycG6uLa2vczG40NEO0o+V1dj2WfZ28LHwLW4xcvLx85vTUtHOTMyOzE6PD9LV01VyevPycS/vbu5uL7P4008PUBESu9f1c/Jz+e7xry/u7zJy+tva04/RD00MzA0NjxAP1VNV8n3zcnOy8W7v72+ydXbTUFIQl/f\na+/VzsbZuce7uri4v8rF719VPj48NjQxOzc6R0VKSEzP593Mz8jFxsHAwMnXb0U7RD9FY1njy8nHxL26ura1trvIxfdrV0lBQzg2NTU5N0VBSU1ja9frzMrGysjJzc/nb09EPkRARedb9+vZ2cDHvsC3uba7wsXR/29OSkk8PTs5PkFLUW9r593N28rGyNHP\n2+ff619PQjs+Qz9XY1nj08rMyMLEv7y6usfMd1NVWUpGRk9DSU5TTVdr4+fPy87Ry8jO2d//93dPRUc+RkRFR2dZZ/fT19HLzcLJvcTT091rW11TXVlVR05na2Pr18/Zz8rLysfAxM3TY2v/U0ZJQz5EQkNGS1VbX+ff49PKzMfMzv9nY0tNSk5PSEtbb2/j\n3dHGx83Av8LGw8PIz8/f3/dLU0hDT1VTT11XY05r/3fn0dfb529OR0pJSUNMTUtdXVFn5//b2cjMy8HCxcXBx8zM0e/V/2dvVV9bXVtjW11j7+vj993vY993Y05PUU9KSExLS0tPZ3f349Xj583JzczMydHV3eP/1+P3/19vU19v32Nb29/n39PV49/Xd/9v\nT05RT0lOXVNXTlVj99/d3/dv4+f/09Xb2dfn999rXf9n/+vv7+frb93r39nd69/343djV1dZX19ZUWdjd29j39//29vf49vf7/ff62dr919rY1lfU0xd72Pn0ePn3dHT5+fV5+Pfb2NnXVdvX1lvd//v/9vd69vn/2/r7/9r//9dV2NbY2dbWVlOZ2Nb/+/j\nd93Z2d3Z2d/f329j///r/+d339XV5+vd19nVz/f///9vV/dvd1VOTExTTU5bU1lbXWNvd2/f39fX2+Pn7/fvb+f/6+/v79XRzN3/2dn/1czX3evnd2f/a3dTV1NZW1dLUU5PX2tbb2djb2//9+fv0ePv92dvd/9v92tv2dfn3evX3dPN0c/V3ffvb/fn52td\nV1tnTlFOVVlXU2tf/+vv6/f3d///Z/f/9+/j39/r7+fT6+vr2dXj693ba11j4/fj1+NrX2NvWVNRUV9fZ1nvZ2djb19bY293b29vb/fn293r729349//6+fX493O3dv//99359nj73drX19dUVdZ7+v/a29vX/9fd//n3+t3XU1ZX2trd/f/d//n4//v5+Pv\n4+fX7+//59/X3+f/62f/d2NnX2NrWVnj2+ff3ff3b3fvZ2NbZ19v/2/////35+9vW3f3b+/r7/d3b+v33+vnb2tjb2tnb+fv6/dv/2/v39/r79nj3eNvY2/3//93a2tna29r93fv62ff7293a19jW/f/429fY2NXa13/Y2vf4+/f593X3dHZ3dvX72Nra2f/\n6+fvXWt3/3f/7/f/7/9vb3d39+vj/+93b19bZ05XY1Nj7+Pj2dfn5//j3+fv2d3d9/fv62t3b29na/9rX2dvd//n5+/3W3frZ3fr3W9dWV1bX+t369v/d+Pn59nX6+/va93n7/9v6/9jZ/9jY13r3////2tn/+9v93dn72t34+N3/2tdZ11fZ/93/+vZ4+/f\n29vj3ef392NrXWPn/+Pr92tvZ+9nY2f/b+fj9+fvb///d29nd2dfXVtbV/f379vX39/3193n6+vna2tvY1tr7/f//+9va11rb11v73fn3fff92N3d//v5993Z2NjX11vZ//n5+vf6+Pf7+fv9+vv629fY//v9+t3/2dn7+drW2dnX+//5+9r///34/9vb29j\nZ29bWWf/3dvd1dfd193j6+/392djVV9rd+/n7/fva193b2f/b2d3b+/vb3f339vr9+9vZ19nZ2dra//3b/fr5+fn9+fn//fv411j9+fv63f3/29n6+9rb/9r/2Nj92dna+/d5+drd29va3f/d+/j2+//92fv6//j3+Pr7+9fVV93Z//3/2/39+/rY2tna/f3\n9+Pv92//9+v/d/fvd2v/93fv39/r9///9+N3d2939/d3b19d//fr9/f/b11vb2Nr6/9v/+vn4/d39/93d29ja2/v4+/r593n69vd3+/f/2dnb2/va/d3X293b/9jd2tb/+9nY//v/+v37+/3d+v37+93b/9rY2djd+vd3d/r4+fd4+939/df/29vZ2dvd+v/\na2/3d2frd19ja2f/b2/v5+/v3+Pfd29vW1ddb//n69nb4+Pn3ePr7+/3d3f/d2tnX/93/2Nr/3ddd+NnY2v/b3fv59//9+9j/3dvb2Njb29n6+//d+vf493r3+/d493j93d3Y1tr/2/3a+/rb+fvd2N3b/93/2/v7293a2vra29nZ19fY/fr6/fv6/fv4+Pd\n3+fr93d363dv/+vv929nb2NfZ3d3b2fv6/d33dvv63f3/2Nnb2Nj///39+vv7/fvd3f37/fn4+vvd/9rX3f3a2d3b2d3Y2/3d/9v5+fnd+f/d2v/a3d36+trb29rZ//n7+vn7+fv7+fv5+/r93f/63f//+/37+93/19jd2v3d2dnZ2t373f/72tva2ddXV9d\nZ3fr493j6+/v///v9/d369/v9/f39+v3/+f/6+t3d/f///dvd+9vb/f/93d393dfXWdfXWNnb//r//d3Z2dr63f3393v7/93Z2t3/+vf5+Pn4+/r6+/r5+Pj///rd3f/7+/rb2drX1lr7/fv5+//d2NfY3dfWV9nY2dvZ2Nv9/fn7/fr6+d39+fj2+Pd2efn\n3+fj3+fv7/93b29nY2dfa3f3/293Y2Nvb2d3d3dvb11nZ29rb/f/a2vv79/f69PX3dvrZ19jY2dra3dnY2t3a2/v993Z1dvn5+t37+Pnd/9vZ2/f3edra2dna19nXVdXXV9r73fj6293b+fv7+/r7/9vd11j/+/f3d/f293jd+v/3+vn93dva/d3Z2v3d29r\nb2dja2dnZ2t3d99r5/fv/+fV4+vd6/ddTe9fWV1v/29dY29ra+vNzMrLzNHX193n699ja09RUU9VWVlTVW/nY19fV11ZV29ra//3///n49vb0czMz8rOy8/L1dfd2df/9+9dZ1dbWVdTTFNMTU1NS0RDU1VKR0xVY1v319nOzdXNztPKysrIyMbLytnR0dXZ\n6//3Uc+1uMVnV0k7Pj0+PD07P0lIY1v/6+vV2dPZ9+djY0xrTk9Zb2tjyM/N1czLzs/RyMnPvsjJ0dfvX1tvZ0dTQUfRb1VXVWtXd11351/3291r5+9nV09NR0xHRj1HS1FHT+tf/9XLxr6/vsG8vL27u7q5wsPb4//va1NGMdGnr+tLOzguNTQ6Njk4MzQ8\nTEz/293X3XdrW19VT09jd1v3/2dn08LCv766ube2tbexsK+vr6+vuLi8xrvIsK/JQTYqJCsqKSoqJigsKzEzNENIW1dbW2NTRtfDzevVU1FCQ0ZBSf9r1ee8vbu0s66wra+vsrezt66345+fn6q50TM6MjM0OSsuLysrLjc5MjpDPTs3LjQ3NUTZb1lr40pj\nSs3Az8S8wsnA1b68vLu4vce7zuf/W2tJoayuvM3fREtRTUZHRTxEOT09Pz5RU0xGST07MzY5PeNL/+dOQ0BDQU7V59O1s7a0trCxr7WxurzH1dvRPt2fn7a690EuNS4vQjk1Pjo4P01ISv/fzsPfX1tTY0lMyu//70VDNzBDT0FGRtn/59XCvsO9u7y9w9Xf\n72tDrKey173LT0lMPkNORkRNQzpFRkJH79fRz93vX1/v1dnjvM7JY1k9OjtHSkVMxMHP2cLOxcK8yufI2VdV6z5frZ+8u81KPjU3QUFDTklZQkZR41fXzMzKw83/19v351fnXWdZSDk7Qk5RSdnv503rwNHJwLzEyc3ZXUxrNqKpw9/bxz5n/0zf72/N70xE\nb1U/X9NV72NRT0hLU1vvw9HvTlc+Ojo/T0jvb83V29PCvcXHwsbb3fdrWVMyuMKlt7jEPWc+TmdL18/dWWP/a1X/69PVZ2dVT0tRT07/UVFIPzwsOTxGQVnj2d//ucXIvru6vsnT1+fP5+9Do7tO50RBT1NGZ8bd2/dbU0xvTm/j719fSj9CX0FIUetVWUg7\nRzUvOz9N19PGy8G1trWus7W8v8TN2czZ0TWfR6my328/TDHO/0NXTEQ/RUo/Q+9jU1FHS09OSVFLa0lVQUA2Pjo/5+PKycjVzLu6xbW5vsPT0dPj/8/ZS622v0lVSz1G22vXT29jRz4+QU1Oa1NbT0VIUWtX/8a+53dNSD4+M01ZStPFyse/uLS/s6+7y8HR\nx9/b08xnTq1HtcFTQlNOL09JPEc/PDlBSl1NV/9ZT1//b+Ndus/bSExCTkVBVW/Jx7/Cu8G/v7i8vr7T71vnd11R61E3pNs6PTc/P1Vf319jWUdAOT4+XVNVX01nY/fV62fAxsb3a00/SUhL18PJu7q4t7a4sb23ws3r3+Nrb0//SjynZya+uUdCRks2Pzcw\nNTk2OldZb3fR2c7TvsC9wrO4zv9dTVFIQlNjycTGwsK+vsa0xcnZ32Pfa2dOVUo9LaldLjs4NTZET1tPPURBOj1BV0/v13fX09HFxcm7tbrDzU7vQUZGTdHfy9O4ubu5v7LBv8zLd///Z1VHSi05uzwuOia6W1/nSz43Qj43PVlT19Pb18XAwr21va2vuczf\na2s+TD1C/1nV58rGzOfCvOP3b+9j/2PjWUZXM7/LQzdANjA9W053S0BbTztIX1/d2dHbwcC/vcO/s72+zcpTVUZMTUdbym/Pzb3K3b+91W/f4+t3b19OSDgvrkozODYuMTiqu75fX0pIQ0XX1+PdyufR277JwcS3v8fVVUtEPztERE13/8/OwM3nvsXPd+/d\n62tnX05FRTWyZzk2OzZKTmfXa01J519FX9XP68vbyb7Lvci+trvHztFXRDxJRD9FXev/18jZa+fF49f36/d369VZW2dNMqtnQjg2QkBJNKiqzuvK40hX0efZze/FwN3N3ce4ytvIZ0o8Nk04Oz5XW1nOzuf31cXZ0+Pj/+ff93dVX0dntVM4Nz9BU/fnzMxb\nZ93d52/Kysjfz8nDzczMysnZ0edXQTw4PTk9P05OY9PX3XfZxM/V999v39vj1d/MU7W4z0VDRj3v9//XOqu/u8/fb1Xr9+9v43dra29fzt3GT0xEQTs8R0FFTmtV19Hb79PEz8rZxN3X3+tv78td97nRTkI6Qm/v5+PK/1XR583v2+fn3993//9n52/ZV9dV\nQkNBOj4+REdM5+PMxtPTz8HRy8/N69PZ087Tv9FXV8nLY01HTXfr218xyrTD09/dUV1XX+NdV1FT71VV61dESU5ISENHTffdX+fPa///0cXT49fbydfNx8TC02Pr591dX1FP29XL03f32Wv/U/9na1//a1tXT07vX1dXT1NHS0E+P0lOY2//38nZ18jM09Pf\nzMvMzM7Kx83N0dvj0ePrXXdd///nSUG5u87b/1lMXV9ZUVtRT2tTSk1GQkFGSUFHUU/n/+/n2d/bzc7N0dfKy8jOxsTHx8fN02PV92dvZ19r4/djXdNdZ01XTk5PV0pOT1NTX1tXd0pMTklLTFFd/9/Zzc3VzMrKzc3b/+PNx8/My8vN09vbd3fvZ1tfXVFd\nXVNXV11jX2/3W2tvd/djXWt372ddWU9fT01ZT1fn79fNzNvbzdXn09Xn793J38/R0c/Zb29bWVtXW2tnY2trY1d37/9dZ/9bV2drXV1vWWdnXWdbX3dfW3dr9+fZz8/J483Rz9XV6+d358zd2+fn3ev/W1lXW2dfa2tv/1tdU1dfd//n7+tfa29v92d372tj\nY1NVW1lbXW9j9/fb3c/Xz9XZzdXV2c7VxNXT2+Pfb/9XXV9bW1dXVV1ZV19ZV2dvb2trd29v/3f36/fra29TTmN3Z1dZ6+fn1dvd1+PX39vf6+Pf49/b3d/3d+P/X01bVVv34+fnd2tnd2NXa2Njd2ddW1td9+/n9+d37+9r62/na+vj9+v37+vb4+Pn2/f3\n/3fr29Xn3W93/2dZV1tZW133b3frV1trX1Vrb3f/d+/ja+fX2dfjz9/r//936+P3/2/n92fv//fn92/3Y11nb2/v5+9ra2v3Y1lZT1tVZ+fr699v7+v3d+vf693f4+d3693b3+vn52tfb1n3Z3fr/+dva3dr9+Pr4/9vY3dvWWNr7+t3d2dZUVljd11n5+fr\n2+fv43f/79fb4+vd4+vn2dnr1+vja19nZ/dn5/93//fr92NbW19jX3dbb2Nr7+vrd2tn73dZY2tnX+/d5+vj7+ff/3ff7+fv7+vvd+Pd2d/j4/dvY//vd1//72v3b2N3X1tbb2d3b2/3Y2dr/9vvY+vra1dZb11n7///69/3//9vb9nZ49/j3+Pf29Xf3d/d\n5+f/a3dj52//a2NjY2tnW1FVVVNZW19dXf/v73ddb/fr5//j7+/f19PX29nX1ePv5+/v6+Prb///3ef/d29va2tna3frb2//Z2dvY1tZV1dbU1dfX29fZ/fv91/j59//793d7+Pf39vVztnj693b9+/r//f/6+Pb6/9vd19bW19ZY2tvY29fY19jX2NZV2Nj\nX///6/fj2dnrXe/r7+/r29/v1dfb09vP2+Pj3+Pvb2tj//9vd/9nZ1tbXWdfa2NrY2dnd3d3d3dva2NdZ1tbX2d329/r6/9vd+Pr3+fn3dfX2evb39Xbb2/rd2trY2Nfb/fn3+frd2tvZ11na2trd29jW1tbZ2NjX1lXX2dvd/ff59XO4+Pr4+Pr3+Pj3d/d\n3evf3dtv//dv/2dvW2Nv6293729nY2NnY293/3dv//9va/9rd2dfa19rZ2fvd+fd3eNv7/d34+vn2+/d3d/b59nb5/9rb19nXWtRV19n/+/jd2tvd11ZY2vr5+vn7/d373f/a2tvZ2/39/f36+fX19vn7/fn7//r6+vf4+Pv/3djX19na29jY11bb2/r7+/3\nb//vXW//d//37//372/3d+93a2tvd//j9+f33dnr4+v3/2dvb3fv5+v35+fvd29jY2NrZ2tna19v/3d35+Nra/drZ1///+P39+P36+fv92djb/93//f3//fn3+Pna2//92dfa2P/6+fv5+/vZ19va3f/929jZ//v5+PZ3e/373d3a/fr6+fv9/d3d2dra2tn\nd29va3d39+Pv4+t3a/fvY2P/7+vr7+vr//93Y2Nja+t3d/93b/d39//n5+/r/2Nvd+fn3+Pf49/n63djY2tvZ3d3a1/3d//3d2trb3djXV9jZ/fn6+vjd/93d2//7+Pv7/f36+vn5+Pnb/93a2v39+/j4+Pv6//v/29v7+//9/9fZ3dr5+9vb2drX11dY/93\na29rd/93Z2dfX/f/7+/v6+/v3ePj3d/f7+fv7+Pd2+Pn3+Pn7+v/Y11ZX2Nrb2drd293Z2NfX293b2dnZ2t3/3f/9/d3b19j7+vr4+Pn7+fd39/r4+P/7/f37+/36+fn7+v39/9na2dnb29rZ2v39/d3b29nb19jX113//93b+/r//93a3f34+vr4+vj493j\n4/f/d2N3/+/j3+Pf7+937/9392dfY1tfY19rb///d2dnb+/37/dva//v5+fr5+f393dva3d3d2/rd3fr7//r62tra/93d//n7/936+fr5+fn/2dnY2/v6+/v5+vv93d3/29va2NnZ2//b3f/b/9vXWtr7+/r5+f/7+vv7+Pnb29vY2f379/r7+/v9/fn6+fn\n93dra29va3f/6+v/a2dv//f/a2tvd///a/93//9rZ2Nvb+//92//6+/v6+93b/fr7+fv7+v/7/fv5+f3929vZ2tn/+v/d//f93drd3dr/3dnZ2f/729nd3dra11fd/f/7+vf6//f5+vv3e/3d+9va/f36+/////v//fv73drd2d3/2tvd+fv7/f//2/v72dv\nb+/f929ra2drZ293b29v//dvb+/n7/fv/29vd/f34+vr63fv6+fr6+/v/3d3b3f39+//7/f/d/9rY3f3a29v7+frZ2/3a2NnZ2f/7+v/929vd3f39/f/b2trZ2/37+vv4+Pr7+fr4+vr7+/n///39/f/7/dv72tnb3djX2f/5/d3/29nXW93b29v/293/3dv\n7+fv6+9vb/d37+vv6/fv9//39/f39+v/d/9v////5+f3/3f3d2t3d3dn//f/b2trb29ra2tn7+vv7/93/+/n5/fv7/f/d2d37+//6+/n92/3////9/93//93/3f////3//93/2tra2f37+vn6//vd2tnb/fr6+fn/293///v/+/37/9rb/9vb///b29vb///\nd+/vd3dvb3f/9/fr63dr/3f/9+/rd+fn7///d3dv////7/fv9/f/d293//f/d/f/b2d3d2t36///////d2936/f/9////+v3/+v3d////29vb3f/9+/v9+/3d293b2/n6+/393dvb/f/7+/36/93a2tva//v9/dv9/d3d/f//293b29v/2dr9+//b3fr6+/v\n7/fr7+f3d293d/93/+Pvd293b293d//v//d3/29v7+v3//fv63fv/3d3d3d3a29vb/f/b2/v92t39+93d3f/9/f35/fr5+/3d2/35+v3/+/////39/93/3f/a2dra29vb29vZ2939/f39/9vd///b29v7+v3d3fv5+vv9+/3/+vn/3f/9/9v7+fv73f39+//\nb/93Z29vb2dj/3dv/2Nna/93a/////f/b2t3/+/j3+/v5+Pv7+Pr7//r92937+vv/+/v/2tvd29r///v/29vd3djb///b3d3d2//d2tnb2937/f3b//3d////+vr7/fn92//6+vn5+/3//fn6+936+93b2tvb2v/b/d3d3drb2dvZ2drb/fv6/f3d2/3/+/3\n6+v/d/93d2//7+/37+v/a3f36/fv6+//b+vv9//r9/d3d3d3d///93d3/2drb3dvb//37/fv9/9vb/f///fr9293//d3d+/37+/v6/dv///39+vv93f36+/vb+/v/2trb2t3////a3d3b2tra2dnd//v5+fv/293d/f37+v39/fv9////+/v5+vn9293a3f/\n/+//a3f/b2//7/9vd///b/////939/dvb///Z2v////r5+vvd293//fv7+/3/+vr/+/r6+/v7/9nb/f/d/93d3dvd/9rb//3b2//d/9vb3d3d3fv/2937/drd/f3/+vn5+/39/93/+/vd///9/dv9+/39//v7/////f/9/93d2///2t3//f/d29r//fv//9v\n//f/d3f37//37+//6+vn93dvb2tv6+f///f393d37+/3//d3b/93d///d3dvb//vb3f/93d3d/f37+f/d3f//29vd//3d/9vd3fv5+v//+//b//v73d39/f/b2/3d3dvd3dv9/f39////3d3//f/9+/3///////v6/9va293a3f/7+/37+/v//fn7+/v7/93\n/+/39//373d3d29v/3dvb293d/////93a2t3/3f/d3dvd/fv7+fn73d3//dv///37/f3d293/+vv//fr7+//9/dvb3f3d3f37/f/d29nb2//////b2t3b/9ra293///37/f36+v3a2//////6+vn4+fr9///7/f///f/b3f3929vd/9rd/9rb293b293b293\n/+//d/f/93d373dvd///9+vn5+///+/37/fv7////3d3d/f3b293///3//93b2t3//939////29vb3f/9/f//3d3/3f/b2/39+/v6+//7+vv/3f/7+/v7/fv9/f3//939/93d3d3b293d3d3b29vd2///3d3b29vb3f/7+/v9/f3//f37+/39+/v7/fv7/d3\nb//39///////9/f/b//v/3d3d/93/+/3/29vb29vb3f//3dvb2tvd//3//fv6+/3///39/f37+//9+vn7/f//29v////9/fv7/93//9vb29va29v/3dvd29vb29vd//3///3//f//+/v6+vv9///9+/3/+/v9/fv6+v3/3f/d3f//29vb3d3/3d3d29ra29v\nb//37/f39/f///////f///93d3f39/fv7+/v9/f39//37+/v7+/v7/d3b3dva29vb29v/3d3b3d3d3d3d29v/2939/f///f3//fv6+/39/f39+/r6+/39/f////3/////3dv//f/d293b2tvd3d3//f3//93////d2trb//37+vr7/f39/f////r7///7+/v\n9+/v9+/3/3d3d29vb3d3/3f3///3d2trb2tvb293d//3//////f////39///7+/v7/fv/+//9+/v9/////fv7//3//9vd////3d3b29vb//3//9vb29vd/////fv7/d3d3d3//9vb//v7+/r5+//9/d3d3f39/f3///v7+/v93dvb29vd29vb29vb3f///f3\n7/9rb2//b3f3//f/////////9///9/f///fv9/f////39+/39/////////f3//9vb3d3d3f//3d3d/93//f3b29vd////+/v9/f3/2939+/3///v6+/v9/f/7/f/d3d3//f//3f///f3/////3dvb293b3f/d3dv////93dvb2939//37+vv9/f/d/fr7+//\n9+/v7+/393f/9/93d//v9/93b29vd3d3d2tvb29vb3d3//93d//39/fr/3d3//fv7+/r7+/v9/f/d/f3///36+/v5+vv/3f3/3f/d/f/d29vb29vb2//d293b29v//d3//////f/9/9vd///9+/37+vv7+/////v5+v///fv//f3/3dvb3dva29v//9vb3d3\nd///9/93b///d3d3////////93f393d3d//37+/v6+vv7+/3///393d39//37/f3929vb3d3d////29vd29vd//////3/3dvb3f/9//39+/v7/fv///39/fv7+/v6/f///93d///b3f/9/f39/93b29vb29rd///d29vd3d3d/f3/3d3//939+/39/f39/f3\n9/f3/3f//+/v7+/v9+/v93dvd3dvb3d3///393dvb29vb2//d3d3b2////fv7+vv93f/9//v7/f39+/v9+/39///9/////////f/9/93/////29vd//39/93d29vb29rb3d3//93b3d3/+/v7/f////3/+/v7+vv9////+/3//93d3f/9/f3//f3//93b2tr\nb293//fv9/f/d3dvb293////d/////fv6+/v7/f/d//39/f///93//f39/f3////d3d3d/f3/+/39///d2tv///39/f//3d3b29rb//37/f39/939/f37/f3////////9/f39/d3d//39////29v////9/f37/f/b29va2t3d//37+/3////d3f///fv////\n///37/f39///d3d3//f39/f3//////f3////d3d3d3f////39///d3d3d3f/9+/v9/f/d3d3d3f/9/f///////fv7/f39///d3d3d//3////d3f//////3d3d////////////3dvb29vd3f/9+/39/93d3d3//fv7+/39/f/9/f39/f/d29vb3d3////d3f/\n////9/f//3f/9/f/9/fv9/f3/3f/d3f/9/fv9+///3dvb3d3d///9///////9/f39/f//3f/////9/d3d/93d////3d3//f3///39/f39/f///////////f3////d29vb2///////3d3d////3f/9/93d3d3d/f37/f37+/39/f3////9/f39/f//3d3////\n///////39/f3/3d3////d///d//39////3d3d3f//3d3////9+/v9///9//39/93d3f39/f3///39/f///93//f////39/////////////////////93d3d3d///d3dvb293d3f///////f////v7+/v6+vv9/f3//93////9/f3/////3d3//93b3f////3\n////////d3d3d3d3d293d///////////9/////fv7+/v7+/39+/3//f3//////93//93d3d3d293d293d3dvd///d///d///d3f/////////////////////9/fv7+/v7/f/////9/f39/f/9/f3//93d3dvb293d////29vd/93d///////d/////f39/f3\n9/f///f/////9+/v7/f/////d3f///f//////3f///////93d/////f3/////3d3/////3d3d3f//3d3////////9/f///f39+/v9/f///93d3f/9/f/9/f/9/f/d3d3d3d3//fv9/////////93d3d3d3d3/3f/d//////3//////93//f37/f/9/f39//3\n7/f39/f3///39/////9vb3f//////3d3//9vb3d3d3f/////9/93d3d3d3d3d//////3//fv7/f///93d/f3////////9+/3/3f//3d3d3f/d/////////93d3d3d3f/d//3//////f/////9/f/d/////f3/3f///////////f39/f39/f/////////9/fv\n7/f3/3f///93d//3//93d/93d3d3d3d3d3d3d///////9+/3//////////93d/////fv9/////////////fv9/f39/////f///////93/3dvd3dvb293//93d3d3d//3//////f39/f39/f37+/v7+/v9/f//3d3d//39/f3////d//////////////3////\n/3d3d3d3d3d3d3d3////////d//////39///9+/37+/39/f393f////39///d3d3/3d3d3d3d//////////39///d3f//////////////3d3///////////39//39//39/93///39+/v9/f39/f//////////3d3////////d3f/d/////////f/////////\n/3d3///////39/f39/////////f39+/39/////////////93d3d3d3d3d3f//3d3d/93d///9/f3///////////39/f39//////39/f//3d3//f39/f39/f3/3d3//////////////93d/93d3d3d3d3/3d3//f////////////39/f39/f39/f3////d3d3\n//93/3d3d///d3f//3d3////9/f///f/////////////////9/93d3f/d//////3////////////////d///////9/////93/////3f////39///////9//3//////////f39/f//3dvd3f/////d3f////////////////3///////3///39///d//////3\n////////////////////9/f3///////////3/////////////////3f////////////////3//////////f3//f///////////f////39///////d///9/////////////////////////93d////3d3/////3d3///39/f/////////////////////////\n////9///////9/f3//93d/////////////////////////////////////////f////////39//37/f/////d3f/////////d//////////////39/f39////////////3d3d///////d3f/////////////d////3f///93d3f////////////3/3f///93\n////9/f39/////////f///////////////93d///////d3d3///////3//////////f3//////f39/f/////9/f3///39///d////////////////3d3d///////////////9///////d///////////////////////d///9+/39/f/////////////////\n//93d///////9/////93///39///////////////////////9/f///////f39/f39/f////39/////////f//////3f/9//////////3/////3d3d/////f39////////////////3d3///39/f39/////////////////////93d3d3///v//93////////\n//////////f3////////////////////////9/f3////////////////////////////////////////////////////9/f/////////9/93d3d3d3f/////////////////////////////////////9/////////f3/////////////3d3d3d3//////93\nd/////f3///39/f/////////////////////9///////////9/f39////////3f///////93d////////3d3///////3///3////9/f39/f///////////f//////////////////3d3d////////////3d3d3f/////d3d3d/////////f3////9/f///f3\n///3//////f3//////////////f3//////93d////////3d3//93d3d3d3f///////////////f39/f39/f39//////39////////////3f///93d3f/d3f/////////d3f///////93d/////////f///////f39///////9/f////////////3////////\n9/f///93d///////////////////////////////////////9/////f/////////////////////////////////////////////////////9//////////3////////////////////////////9/////////////////////f////////////////39/f3\n///////39/////////////////////////////93d/////////93///39////3f////////3//93//////f/////9///////d////////+///3d3///////////////////////3//f3////////////////9///////9//3//////////93d///////////\n/////////////////////////3f/////////////d//////////////////////3////d3f/////////d3d3d3f//////3d3///////////////39/f3//////f///f/////////9/f39//3//////93d/////////93d3d3///////////3//////f/////\n/////////////3f//////////////////////////3d3//////////93d3f////////////////////////////3//////////////////////////////////////////////f/////////9//////////3//////////////f////////////////////3\n9////////////////////////////3f/////////////9/f////////////3////////////////////////////////////////////////////////////////////////////////9////////////////3d3///////3//////////f/////////////\n////////////////////////////////////d3f/////////d3d3d///////////////9/////////////////////////////////////////////f///93/////////////3f///////////////////f///////f39/////////////////////93d///\nd3f///////93//////////////////f///////////////////////////////////////////////93/3f///////////////////////////f39///////////////////////////////////////////////d3d3d///////////////////////////\n///////////////////////////////////////////////////////////////////////////////////39+/////////39/f///////////////93d3d3//////////////////////f/////////////////////////////////////////////////\n////d3d3d///////////////////////9///9///9//3//////////////f3////////////9/////////////////93///////////////////////39/f///////////////////////////////////////////////////93d///////////////////\n///////////////////////////3//f39/f///93d//////////////////3//////////////f39///////9//3//////////////////////////////////////////////////////93d3f/////////////////////////////////////////////\n////9/f3////////////////////////////////////////9/f39///////9//////////3/////////////////////3f//////////////////////////////////////////////////////////////////3d3d///////////////d/////f/////\n//////////////////////////////////////////////////////////f///f////////////////////3////////////////////////////////d///////////////////////////////////////////////////////9///////////////////\n///////////////////////////////39/f///////////////////////////////////f/////////9///////d///////////////////////////////////////////////////////////////////////////////////////////////////////\n//////f39///////////////9//////////////////////////////////////////////////////////////39//////////////////////////////////////////////////////////////////////////////39//3////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9///////////////////////////////////\n///////////////////////////////////////////////////////////////////////////3///////////////////////////////////////////////////////////////////3////////////////////////9///////////////////////\n////////////////////////d/////////////////////////////////////f/////////////////////////////////////////////9/////////////////////////f/////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////9/////////////////////f/////////9///////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////////////////////////////////3//////////////f/////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////3////////////////////////////////////////////////////9//////////3////////////////////////9///////////////////////////////////////////////\n//////////////////////////////f39/////////f////////////////////////////////////////////////////3///39/f///////////////////////////fv9///d/////93///3/////////////3d3d3d3d///////9/f39/f39/f3////\n////////d3d3d3d3d3d3d3d3////9/f39/f3//93d29vb29vb3d3d///9+/v7+vr4+Pj5+vr7+/v9/93b2tnZ2NfX2Nr/+/r6+/v9+/v7+/r7+/v9+/n6+v3d29nY19fX11dX19ja2939+/n49/f3d3f49/j5+fr5+v3d29nXVlXV1fr1dn/Y19dXWNn49/b\n69nb2dvT0dPX1+9vWVFJRENDQ0dPT13/39vTyr++vb7BxMPHzc/T5/dXUUhCPDs6NDzTwOdfW11VU1nTztXLzNHd38zKzs7R219jVU9IUU5Zb+vX19fNzM3IxsfKz9vvX1FOSkVFPz07OzUxMjUzNjXvur/N3cfBvLm5t6+0tra3vby5vr+/xtF3S0VBPz9E\nP0BLTEpARVPb21VNV0tDOjo8Pj0+OUe7zedHOzo2NzastN3/49vPxbavp62wr6y5ubmxt7vFxNvvV0dRRUpPR0VGPT5APjg4PUM9ODgyMjA8OkBbW1dZUUlDR01ANq6pwl9r2dndxciwtL65ubvBura5s7m3u87L2dV329//0/frUVNXQ+NdUU5CPTAvLzEs\nO87VX0c6PDYxOTc0t7bIZ11r/8jFwLS/xs3L1WfRys7R0dvX31nvz8HJvru5t7vFwsTn2b/G409PSD01OTk2ODg9PDk5Mzk+OTBTsdNIW1VJ1Wu+sL3Jw8LKv7+5vMDCxd/3d1X37/fZycPCyuPX0+9Xys/3Rz09LjCv0UxESkEzOjc2QkQ/Pi6px2/nd/d3\n58fCttPZ2cTFyrq5uMDDys7f/1/L1cvR0ctv/93Z/8zO399KSUVDP0JGPENGQjlFSUZJWWtPTarEW1FPT1N3ysfBWdfOyMTEurrD3dvva0VFR01v38/K1cr3587jb83L3WNdXy+ux9dGRTktNDQ0PUo+UWc4qLPX2//fSMjb58prd9HbzcC6vMrX29/ba1tN\n39/KzdHLz9vTys3N693NT1lTRkBDST46Ozs2NkpETF3/6z3BqMVJ/1tXyNfvy3fj387Cz8C/yc9fb2dOR1ndy7/D1b7L1c3GxtXO0cDOZ0vGrV/bOjUsLS4sL0BCO1VnLE+nwU/j3V+/yM/C78nFw72/ub7EzXdfb1lCVVnP0c/nzdXX0cvL1+/fd/dTa1FL\nRFE9MTMwLzEyRUZLV+tHLKW/S1lfY8vK3fe/38DFvL+7u7/O1VXnVU9j2bjBwMq9wsPRz9Ff13df90U8qudCRD8tJSwrKy9AO0XdVddDxKrB987L08fK58HDxsO4u8fKxdn3VW9vRE5M0dfZy8/K2eff2W9OTEdNW/dZTj1ERjUuLzM0NF9Lb+vX10w3pLlv\nwOu7z8jZyri7u7u4vLy+0/9ZUU1FTVvn02vIxtvf92tbY0hnTFM9X7DvS0c+LywvLS45TUZv5+u81VGir9G/zb3Kx//fzrnJv8HBy7/jUUFERDY7PkpbY1Xby93/a/ffU1NJVVnJb+tXX0dFNzIzNTpZWefjvt93Obyqxd/Cy9nLwtvHscm+vsnNzudNRTtJ\nPjtGQ9dR78zX2f9rT19O42t3a8+rz8FTSTQyMi42OEZLy1/IxMZTRaG577/N2cfVW+fCu8++0/fXb01EQD89Oj87UVdVd9nN729rW2NPU3fN/8Lrv1VJa1M1Oj9AT2PRz8jP0WM2n7bLyePHzcjX1b26zL7H13frR0Q4Pzw/PT5PW9tfzc/VZ1njVV/v789J\nor251Ug7OjYvODtOV81vy8jD3zmktL1338930efvZ7zrws7va+9VQT9BO0E+OUbdW1XFzNFfX2tVX19fzee51cjJW1lVPjg7QlXb1dXbwd1rP6ukuWvTz+PF4//Tws3VyltVTUY9Nz46SEBAP+PDY8HFydvf12fXyNfXvqayvdFVPTs+KzI7QmNrX8zTyVkz\nn6u/19/3/91XX9/R0d3OY1tdSj48QTtBRTc7791rzcLMy9vr0+PZ28XMw7zJxedfTkM4NzhTSN9P0d/ZQzOhtsjjd+9nzl1r19fT281PXVlLPztIO0xTTEz3vtnHvsHD09vV3cXRPqGtvb3/bzRGNzIyNjlCYz++X9VbMK2uvs3fY2PZ2U/Xzu+/619Id05B\nPz48P0U+U/fZ2c6+ysfN787f09/L2b/Ru83nS1E/Ozo7TEfjSdNLT0kvtLa//+NV78fT48rHd+vFW1lPUT8/P0pVVVXfxLrRwb2/y8hr42/M69+hscnO50E0PjgwOTQ7Q0tMv9drTDSftszK62fv0dnn1cld0W9dUWdJSEI/SEhDSVvI0cvCwMPDyf/V2+vX\ny9XFz9VdZz9CPDU4OkJCSVfjTkdHMam1v+fOa//Ax83IvdnM1WfdT1tCTURMY1ndW8DEysDAxdHNVWNT9zqttb7I40swQD8wMTAyPEI6RtPn7102oq+7z9N3UcnZz8vH2czd51P3T1NFREpRSFt3w8PRv8DCxNXfX29fW93R78rdU0M6Pzg3Mj07RD1VU1dO\nTzKgsrvby+dnxci+u8nNwsVZT+NPQEdER/dO2c++xtO/vsXI21tdSlk6obPOxsxDMDU4MjUvOkM9Odnr711LQ6GuwcfX3Vff08C778/F3VlPXVE/RD5ISD/fXc/G0cDFvsfRb29ZWdvM0V/D1UY/OTs6MjBJTEVB/01OVUM8oa69ydfL582/urfTy77vWT9L\nOkA6Q1VfTtfZvsbbvsfJzeNbV0k7vKm6zr53Mjc0Miw4Mz9JPEDj59X/Vzqfr7rJzNVnz8m7us7Kx8xLQkk6QTk/TEtIW93By9u/xsPMa1dXT2PXy87v1e9KPzc8Lzg+RElNRl1f32tGxp+vyL7RyszDwrG31+u7T006PzM1Pz9vY09MucTX68LE1dFZVV1H\nN6SwtcvR4zI+MTEsOTlGU0xMW8V331dHn7C9wMPT18nLtLnOZ79OXT5FODRCQVVNR07EzMfVy8vH/19MX1fj0cLGzGPVSzg3PC88S0prTllJX+PR7zilrLzKy8f/v7+yu8RvzlE3PDM3N0RP6+td586/yePK3df3U09ZOa6us7vEa0FBNDE1NjFCRVVZ729r\nyddLPp+z18PK48/KyrW7z1n3UTc1STE1SEpfVVVd/77P18bT1etVV+Pd18y/xcxvX1k2NDo/PkxF3V9RT+vf3eNKobfFz7/X07++urrVd0xLLzI2NDVGY/dja+fPzMPL2dXZ51tXZ1WmsrrDwFs+QS4rPjwwSk5vV3d3a2vHX0ejtcTJz8Xrv8O/t+ddTUI6\nLzcyOExAXU5fVf/Hxd/Z2WffXffJztHCv8PKz0s6QS9XPElNU+NKY/93d9X/OJ+zws7BwNG+ybm660dEODgrPTE9TF9rZ8t30crDa8bvZ99vTc+ksbm6xOdCQTI2Mz81ONNIY13/b13/d/+/qrrX0cLDyL/EwrxXVUk4NDI5NDhrP3fr7+vXxdXVyF1b1+fP\nvcLGxbzf11tNNzVJSEVAd0tdQVv/b1tbQ6apv9vOu8G+wr2/y0hHPzAsPTk9PtlfzszZ1cjJ68TKb+vn90Kfqbi8v8s9QjwvLzs5OjjvUdtVVe9n52dOp6i938zGxb2+x853U0RBNC8vQzdISff379HZzcr/wd33/87Lw7y7ysbJz29HPzc1P05EQUlvSVFT\n22vrVUalqLvfvb3Ht7vHxVs+PTsxLjQ3V1V3/8jbydvAyVvE5+P/zkeun667xMNFPj43Lzs2NDHdQWtnX1nv79lvO66tvd/JvM64vMjLTD0+PDcxNTk81T7Z03fT2cbVY8Zvd9vNx723v83JvUtVQDs6O0VLN1FKU0tOX+f/90lEo7S7xru6vru2x8VENT04\nLjI6QE732+u8zs3XxtdLy1/r299Fn6m0wsfKNz44NDo1NDo+RE/P61VZ3d/JRUCisr/Xv7vAvL/dzUk0PD02NDlEX1dbytPf0d/R20z/92vLx8W+ucPM08xPQkI5OjtDPE09S0Nv3+//5+NPPZ+ywL66ubu3w8j3QC41NC84P093Vdd3vd3b49NrSGd3a9FI\nraGttMLGXTw/OTo1MC9GTTtFXV/bVdHO61VEn7C8vrzDvbvf12s8MDg9ODVISWNHz+/bx3ff0V9dWWPjyb3Ht77Fz8hvSj09Pjc5PURBP0xVU8vNb9Vj42elsLy2ury4usvOVzMtMDc7OlPnTFvPztlry0zjSVVrZ+Pn36Klr7++30o+Pjo8Mi4/Pkg+4+tf\nW8Vv0dVMvaavvbm8vr3CXeNVLzM1PTs9Tv9FTs/v3VP//+vfPGdn2b+8u7fExcnTTkU/RDw3O0w/RUlV3ffV687nvUS0p6q5tLm1vcNnWzooLi09O0Nn609byMj3U0LdY1dRW+vZTcykqLa6wllDPTk5OTAvW0FCT/fX2/93v+/JO6ekrr69uLvB60x3Ni4x\nPEVBTGf3Q93vy11JRuPNP0Z328u8vrq8v9XOd0I4Rjo5ODpLTkRbY9fN39vKw+c5oqGru7q3u8rVSUMtKi40PkdP69FEzMrTa0FC7+dZR+/Z40GfrLOzxetMPTs3NjYuOD1GQOv/38/Z68LLykzZn6bAuLi7601JPzctL0BKR0z/d01V3dlfTD7Pb11NY8jF\nur/BvsFd42M9Rjw3OztBPz9MY2Pdy+fbvN3IVzafp7q4t7tvbz44MiwsPklPT99fd/fN129NPtXZZ1Xfx+fboLW4tedRSj06Njg1LkpEP1lb3d/V78O53dPVSqmisr+4vkNEQDc7MDRKW19ZXVdv31nV/0dvb+NOZ93Vvr29xsHNW1VPQkI2OT06Qk9JQctb\nxdvTx8HNztXT05+mvLPL/0Y3MjE4MEZbb/df92vBX+d3d09I429Z091Co6y1ybtRQD5LPjU1MTlKRk9Ezsznzsm/48zOxMREoZ+uxONPODw5N0BCR1trd01N/9Vdb2fPUV9nX2/Vyb+8w8bO208+Sz5END08Qz9Mb0zrd7/KvMTRyc2+vFHTn6/L1VE4NDYy\nPT1IU1PXW1fXxF1X51NnQGtby99XvKSuvtnEUzpCO0MzOS0+Qkpf28/f17rTt+vbwcDE/0WfreNvOjo1Pj9NXVVJT/dXUevba1XLTuNLVe/Tzci7u77K21tKPDs9Qzk7OUZGT1fZ19nPwcHB0dO9vL/F/6Wrv1dJNzY6QUFVU0pNb+dR293vVV//50hRZ93d\nQqCsscn3XTxBOjtAOTQxP0xVa86/0cTGxr/d0cO+x85nq6y8RD46OkVXXetNS09B71Vf52ffTGvNWVF398fCvbzB6+dMOEU4PTtHPDpFXVFV277IvcTOutnDv73Ex+OvrbtPPzc6PUdMTFVEU0drZ1/r99tBQvfvWVvdQqimrbfv1TxARD07QzY4Mkhd9//I\nvr6+z7rjys/Cys7R36uw0UY/O0NMWXdXS0dIQlVv/13TXVFfU8lZ39O/wbq6xuP/Qz85OThCPT09S11X58rFvMjHx3fByb3GxsS+s8DPQzs8PElNUVdIPllAd+/fV85PSVl3yV/j72ezp62/2103Szo7PD85OD1CXePjv8G40cvHW8rKw8/OxsG80+tCPENE\n79tXTkxFSEVj4+Pra293Wf/E99fNvry+wet3Qz07Nzo8Qj5ET1tK99W9vcPBv9HjusO9w8XCvsTrX0Q7QERPU0pJSEBLRefb99lTW2dnd8/jyc/CtbO3xXdJPEA8Pz9FQj9TTkxjy76+xsy+4/+9zszJ38vB3VdMRD5FW/9jT01bT0tV48rbY+tj3+PnxsvH\nw7y9v9HjST8zNzw+RUZFU2NVR9nGu83JycLj18HFxcPNxr7ra01ESEZXVWtLSU1XSllVzM9TW0/f3+Pby8vJv7vAzN9TQDo8PkJHS0Vrb1NT48C71czGvf/JzcnMzNPDz19KVT1KSmNjW0dFX01ZT1nK3Vv/b+fXxtO/w8K/wsz/TUA4NDg9QUtKWef/WVHT\nuLzNzcK+zsnExMnJ08bnW01NRUZDTVNOS0RPV1VNT8/nTmPr18/Hyby6wLy+yNtLQzg3O0JDR1FO6+/vX86+vtfXzMDM29PLx9XR02tNTktBU1NVVU5ISFFrU0pjzudf9+PVxefDwbrExtHfVT46NzQ8QEVPV2/n/3fnyb/BzePLwMTLycu/zNPTZ09JS0RL\nY0lVTE5IW2dfVWffUVtv28vG18a/wMrK7+NMQj0+PUdLTV1Z393f3dXRv8vZ487E4+vbycrM42NTSUtHSFfdW1tMU1Nd/1lfZ83dX3fdxM/PzMfIzutZd0xCQD5CSVNfa3fn2evZ4+PE0ff31cPj29nVys/vVV9MT1NLU99va1dfW+/j/19n2W9OZ8zCzdnC\nycrPb1NbR0RAP0tKT1Nrb+/O787T27//d+fK1dnd1c/HzP9nTltfVV9nz/dZWWNZ7/9vU1vdX1lnztnNd9nZ3WtbT1FLSEVBV1db5+ff287Zz9Xjw/db68fR1ePf09XZa1NTT1tMT1n//11fZ29v52tjT99L/+/K1c7b19Hn6/dXV1FPS01fW2/v9+/T293T\n0f/Kd//V69vj993X09VvW0xbX19rb9n/Y29jd193Z1NO51Xvz+/J1d3n329nW1tdU1FOU1lv79fn49fX1+ff/91rVdPj1ePr69vd32d3TlVnWWNn4/93//93//93V3dbV9XX69HP5+tva2dZXU9jT1ldWWNn2dvj3dPV32/NXf/j/93n593d387jd/dVXf/3\nb+vd9+dr72f3WV9O31dd993n2dH/91/3WVf/U2NTWWtdd+vd1dnn09133fdvY2tn3dXj39/n0+9r/1NZZ19fX+9r72//Z+9dd91bV1vr5+/X0+PrX1v3WWNj/2dn72Nr6+fV0+fX29//a2P/Z//332vX4//Z52djU1t3Y/f/5/fna+//52P/Z2dvd//b39vV\n3e9vX11jZ2NrZ2N3Z1/d59/X7+v/d/9f91tna+fb7/fZ693f7/9bY/ddZ2dr5//jd+f/b/dda1lf/+fr387n929nW2Nja/93a3dna9/r2d/j9+N3a19fZ2d39+v/5+vv3d//a11j92drd/fj9+f/7993Y2/3Z2fn2Xfn0/d392NZb29na1lnX/9369/b5+fn\nY/9rZ1tvY3fb5+v/3efZ2+PnWW//Y2df9/fn52P342tjX3dXX3fvd+fV9/fvX1tb/3fn9//ja9/n2dvv699va2dbY29db+tvY//rd+Pr93dZY/dvb2ff6+fn9+ffb2dr73dr2+dv59vv63dnX/dr//9rXfdn6+vf2ffn/1tZY19rY1//4/dj9+Nv2e/n73df\nb2drY+fb49135+Prd1/rb2fr43fr1+9va2NVZ2tvd29n73fn69vj7/fvZ1tdXf//Xf/j52v35+Pb//f3Z2ff/29r593j3evv6+trY/dna+P3b//r52f/XVv/b/dva1//6/fj29fvd2dnWWNfb/djb+PfY+v359/n69/3Z3fva2vd19vj6/f/62tbZ2tbd/f/\n9///b2djW2dv9/dv/+/n693Z2ff372ddWWf/72Nr/+9j6+fr729vb2tv//d3b+fX393v9/fva2drb2//b+///+t3b2N3Z/ffb2f//+/v39vb/2d3Y1lfY2/vXf//63f/49/f/+vnb19v/2v/3dnX4+93d+t3W2t3b3d373f/b2d3Z2f//+N3Z/fv7/fn3d93\nd29jWV1n9/9v73fv59/f4+t3929n9+9v93ff5+fva/dr729fZ29vb2//9+f//293///v529j9+P34+ff42tva2NZX2P/b2/v9+/3593n5//jb1tn92fv793d5+dr72//b2dn///3a//rb2v//2d3b//rb2f/4//n393372trY1tdd/d3///v/+/f4/f/Z29n\nY3f3/3d35+v37////+t3Z2d3b3dnd+Pr//frd2//6/9na+/v/+vn4+9rb29nW11vb2936+t3993n5/f/919bd3drb+ff4+t39/9rd+9na3fv/2f/4+////dr9//r62t39+f/99/n7/9na11fY3dvb2/343fn3+/3d19vW13352935/f373f393f3b3drZ///\nZ/fd5+9372f/5+t3a///63f/6+Nn/3dvY1v/b29rd+v/b9/f6+v/b19VVf/r79/T3+v/d/9nZ29ra2tvb3dvd+fn////d//v3f9v///v9+fn5/fv/2tnZ/93d2/34/933efv93dvZ11Z7/9399/v/29rd293b2NrX2NnZ3fv493v63dr63fr//fr6+/37+dv\nY/dnX1ln993Z18/V3e/j/29nX19bVVVrZ/fn3e/3d/9ja29jXWdrY293d93OztXb2+Pn4933Z2dva2Nvb29rd+f3a/fv//9jd3dnY+/X62drZ1FTa2dnb1137/937/fn3+fn29POz9PP29nvd01FPzY8ycvfa9/R43ddV2dba19f393d4+vHz7+/wcfb53dZ\nTUlTXV//79/b29PN083XZ1VR/0dHPj4/PTw+Ozs7177H62Pv79vKxsLCw8THyby7uLu8ur7Av83X41FMR0ZBOjs+Q0tHSUtNSkdMVUs2M1m9y19ZVdfZb2tdRj5KTkpPW1tMY19jzMO5vru8vru5s7W2uby8v8XRyM/dZ0s8R0hET01MSD9KUT1LTD46r669\n71FHQ0JCR0c8O0tITEl3b8HBvby0tbu3ur/Ay83bZ1VPQzs2MDs8NTE3Niq4vd9JUUA2UVdCoKe0zsfZ0+ddZ1nvSe9BRXdvxc7AvLi5ure3ub/Da1VVW0g3N1FJ20NOQUz3Pf9KWU1ZT01PRN2ftl/fUUM+Rjw4b0g+REA6TE3Ty729vriyt6+/vMvd60lb\nWz9DSsfjX1NrTKG8xd/3PzRGSUFPM62p0TzvVztHPE1JT0n/SU1Md9W/ubivsriyuLTA5+M/bzs7PklIQl1n/2tJwUZHXU5fWWdCSfdFL6PIQD83Ly5FNUtNWU9DV11X1bu4r6ytrrWvsrrGW0o4LDI4V0pRWVtHob20x+9RRsjjU2tZR1csn8ZGWz4vT91A\nPlE9Sk9LUdXJuriwrq+1urm61V9BVTdENlM2PDg8U1U+19O9X8vZz1PR4+dP/y6hyU9XSz9FUT1GS0NGPk9Pa+u0u7CqrLO6t8HjSUouOjpIOVtCPbesu+/DWURfwndKZ1tf929HLZ+5Y+db2Tr3Pz/I/0hva0j/zL22u7S6u9Pn30ZVRDY4NTozQjpdVVNr\n18DR08nf7+9Xd+9PRy5dpsZHZ7w3b99JT11jTldPTOOxwLyyu7fT3VE+Pj04OEF3OTmmtLTb0//vzs7vsG9A4+vnWfdOMKC6TkjnPjjMSl1nTkPrW0s+xrbIvsm/wc9TRFc/RTcvRzM8QE9fzc2+vbu4z7+13VPX32dMPTOit11fTMJIa+9KSkE9Q0tBW1HB\nt7u+xt3VXVNnQ1lXQVvNV8fCvsjEybzHyMfTytPIZ+fOW13bunfnSUBjR0bb2UljREhDS1NI0dPP09fvXVs8/0ZVPkFBX0/Z99fXxsHEv8rI273H7+PN51dn27/H00pMY01PS9VFU0VHSllZUUvD3e/jZ1NIQUpVz9Nn/75LznddXdHH1cDKzefjxt/n0+s+\n/8/VUUNEPUl3Z83P4//3UUdn59F32c/V59tnZ0tnX1NOU0/XVdN3z9vRwc/O19nIa+fr49vdWU1LREVIRTxDa01fZ3fv2ePXb9Hb7+PV6+/nz+fXd9H/999r59HrTHdZXf//b+/Hb//d0Wdd3WtER05HV1VNSv9f1+fjzdvV7+tj3dXb1dHP49/322/32+vr\n69Nvzdtra913X//jXWP/5/frXe9dW0tZV0tITkZXWeffd9l339137/f/4+fb09n/63fj/2/j4+/NZ+vLa1NTX0pda93b3/drX9/T1dN3Sj9OT0FKa1Xvd+PM39vKzc/X0dPV09nO/+drWUFGS1dOd3dPS1FMSUdKW93v4+vT29vLz9/r3cvMwMO+zsrNzMLD\nw8PCw8HKztHd12tfS0Q/ODI0MjI4NTU4Ojc8OTc4ODc8OT5JP0JjuLG0uL67vLmvuLe1ubWurqypqaimpKWprLG+zv9ZR0U+OzZXMjMvMSwrKSssKiYjIiEfHy8yLywtLjFBRNG8wL68r7Gvq6eipKajpaapq6iqrLK3ubvJycDL0/f3V04/Qj05MSssKbas\nwVU0KyEoJycpLS8uNS83RW/GwLGzqquxub7Va1lPY9fT59nAtbS6sLi1uruysr/A69td97673Ts7MjMuLCkrLScxLzc8U//n1/dra9lVSefv69fj0WfTvsO+r7OtrK2yuMO5vdf/QUmfoa/XXS8rNi4uMiwmMy4wMllfZ0/Iu9lLVUlAMzAzNDQ/Y0vJwbWu\nqbCssLmxtbO+2d01pafC0b7rOdfPT2dHREzrOkTr38hZ00pJODAuLygmJCYsLTE5QlNrwri/w7/Fur68ubzETqqfn6e10U1N611C3zZNX8HfuraysLCvvrTjTTQ2IiEiICksLSozPj7PzLzC0cHZtb7VX9cqn66wyUhjX8LNycP/58DCuLeyr6+zsrvCZz85\nMCsvLScsNSwxLz00SUxXymdvX3dd601fSSyfn7G2wjBvQmtGXfdVu8a1sqqmqaqoqL+tyGM7KjUoKzsvOTc5R0TTV+fDRVM7Y0c/MiwhoOs2Okw4Z0drd+tj28LLvbqsqKmqqq65229dPS8yOzQ6W1dMTVfDxLXEvsVjW09GPzcwHz+1odvvQyv3KTlCLzpB\nTnfGv6alo6SrqLHDz1c8Ni45M/863W/3xruuq7DIr8RXwudAMiohoNMuLyswNyw7NEgzOjxG/1nVra6xsbzfU0BFOjg+Pv/DvbvIvbi2r6autba0ysXOSDcuJ6VO57LvRTBnMDQ7LTE1QTRVXc61tK69ve//SP85PjwwQNlb0+O+sqispqivr8XHr8VJPUMu\nqPc+OiwvPjA+Oj80OkE6OU/PzrXTyEI6My03Li42PU7LzrvAt7CqpqSqr7O1v8vOTz9CKp9vrLr/VT5IND5NLjk1PztJ48O+rtdXRzk8NjYxLjM2RG9Pb925taqmrKy8ucbDyk5DOiahuF9NSzM92TzvXUhJSe9HS867v8Oz51EvLi4tMCw6MWfZb8vGvrav\nr7Gyx8njb09bP0gtr7BJu6nOS8NVRkXVOlVV70vItri9urVRQj47Oi48PTs561FO68PGuLWpuLXA3UxK9zZNMSus9zg9QC5rxkrj71fTd8BvwL+zwMPOzDw4Li44OTpFY2uvwLi7t7CurrO9a/89QDQuOirbrMMpvqln38JfW0dOPF13Y/fGvr3Du+fZPDs+\nVTXva1lNw87Iw7Wzr7Krvs5vQjs1Kzo1NLzKOzU7QTxbU1v362Pb377JvsK2xsHbV1cvPD03SVFr/7vCrruyvKu0tLXNRzw0NS0sMDLdwXcwLK68wMfL61Fb1/fvz1/jx8LD1+9NRDw9X0PH48F3usi5urixrrOuw+tVOy80LjAw3ddPNzQvPkDXNsXRZ9fK\n18e/x8y/1+dOUzRCNEc8W9fZxrC9rLStrq2wtctvTzYyMjMzLDvA9z0wLLvCtO/Z21VOz13fy29j51VdU1s5O1dTa2/3vcC7wbi6sbivtLi7WVdDNDY8NjI+5+ffQUo+RFddP7vj78TPa8nN0dHTW0xfOz0+W0xGT//j0bXHrbeztbrHz2NKQjg4SDg8Pl3j\nz1tXX9FfuuO1ytPM12djd1lZW1FFVUY+QkZNW2vr11m+77rnzcHKxtXPXU9OTmtRW0nn09Pv5+Nfb8BRt8LDzMbZb9Vv/293QkZFQD5JT08/S1ld29m7z8TG09dnd0ZNPTxOTTtH/9/n23fP18Xbzr6+y9XFztnRy+9rVUxVTVNOd293V3fT12PjzONZW2dV\nSz9JSEhISV9Va+vv19V3//dr/9nMvL3Ry7vExMrF2dPvd1NXV1dva1dMZ2tTXf/M2ffZ729RTUZKRklLU0xdVf/f3e/b291Xa8vfZ2PM59f/63fn91nf59935+dnd9nP4+/rxd3r92vnb1dbW0tfVU9Xz9vf69/r52tZV2Nfydf399/b1+vvY29jY+/32ef3\n7/9P92fr79Pbd2tbd2//WWv/d1lvY19bWV/r3+/r691359fvXV/vX2tVUVVVa1H/69nRy87X5+fP493j3/9bVU9jW1t3Z1fj99fjzufZ1dn39/9jXevv42fvb+fna11jVVFVWW9d//d37/fv3ffX39XOU/dTd2d3a/dn/+/j59fV48/P1XdvX+dZ92//a2Pv\n/3dVU0xTSFNf72fj7+NbY+fv3e/j3+9fW2Pnb3fZ5+/f2dnf09Hbzsrj9+ddU/93b2djY1H3X1tfX1Vbb29f7+Nja13ja+vb59nZa29na19d/3dj6/fjzNvv3c3N0dnb62Nr92dZXV1rb2dTXU9XT01dX/ff4+djY+tn99/X32//Vef/9//X5+fV3dff5+fd\n1efj69frVWvb629v92dVTV1fV0pOa3drb/d3Y13j///349v/XW9v62dr0Wtr7+vr3+Pf39PV793v73fr//fr/2f/52Nr91tdUVNnZ2tva91fZ2f/7+Pva1tfW/drY3fr59v/79fn3+f309vra/fvVV3rd+t33f9bZ9/ra29n39vn1+Pd/3ff99vb4+djW19j\n/11rb1lfa3fja11jY+/jb+fn/3dra1//Y2//Z1vn7/dn/+/n6+fn2dvr42tv99/f59trb/fvb2tn72/v7+N3593//+Pv72tjWVVd/1tdY1Vd9+NfY2Nv6+ff3c/d69/Z7+/Z/2tnX//v52935+9j92/n73fv7+/3W/f3Z13r4//n//9vWV1v/1lVWfdv9+fb\n5+fj29//3+/j//f/7+v39/9j9+v/3+v/72/vb+Pj2f9rXVVrY1Vn71dXd+//W2Nn7/ff29/v793Z39vb6+/3V2//d11r6+fr79nf5+drW3dnY93vX19da2Nnb3dnX/ffb2tdXedv6+Pb193f52v3///nd2Pv6+/vZ/9j7+t3393j62/vZ+tv6193b29r/2dd\na1Vb/+//a+//a+/b2ePn/+ff793f72drZ2dnW11nb3djZ+fv6/dr793v9+/3Z1trb3f/d3dna2/j919fa+9v3dnn3e/j4//f39Vnb2f/d2tvd2tnX+/r/2vvZ2//X/fj92vrd//3a11ra1tv5+//Xet3Y93d3+dv6/f/7+vf6+/3/+vnd3dn5/9vd3fn7+Nj\na2/3b+v/719372tnY2NXZ+Pn/+f3Z29j//f3Z3fr6//v93dna2//5+/v7+fv9+vb3evvd+/v9/fv63dr5+P392djW1lfd+frd+dbW2/33/dn73dj/3frXWddX11n73fb3dnn63f33eP39+/b3+PV7///319ja19jZ+vX93djXWP37//vY2///2NjY1tnY2N3\nd2f//+///+Pb4+frZ2//7/fn///r2dvd3ffrZ2/r//dvd+tbXWtv33f/7//3629rW11nWWtda11r39fn6+Pj4+P/Z2/33+Prd+vn7+/3/29jb+fn69/n72/vd+t3b+P3/29fb19jX2NZX2dnb///d+vv4+v3b2/34+/j93d37/f/Z2vn9/fn5+f/59//X2d3\n72/v6+fr5+d3b2NvY19dX1tdd3fn4//n5/f3a+/n2+//5/93/19na2dn9+N37+Prb/f39+fr92/f4+f/b2Nja2dva+f/3+f3a2/v4///d//r99/jY1336+N3b2drXf/3/193b3fnX2f3b2t3/+//7+Prd+/363fn9/93/+/v///va//n52v/23dj7+/vd2vv\n9/dj6/93a+frb2d39/9vZ+/j3ed3Z2drZ2t3d+936/939+Pj2+PvZ19fY/drZ3fr49/va2tv7+fda2/3b+/ra2drY2d359n35+vva3dd99/n4+Pn///rd2/3///n42tf/1Vjd///a19jZ2N36+/3/+djY1t3/2NjX3fn5+/n7/f33+/v293b3+P/3+vj2ePf\n3ev3d/9XT1tVb29fd2dbY/9rd29nb29na3dvXWv39+9d7+v//+vr49nX2ePr9+/n6+vr4+/v5+/r92t319vrd2dvXVlrb/9n//fra2NrY19fY3dvY19rW11vZ+/v69/d3+fn6/fr3+PZ39/f5/dna+f/6+9n529ra+fvd2t3/29va29nXWNn929fb2trZ2tn\nZ/fv5+vn5+vv3d1vb3fv//f/b2/v393f4+Prb2/va/93b3d3b3fvd3f3b293a2tjW1lnZ3d3/+937+9v7+fr7+fn529vd2tn9+936+//9/9r/+vr593d6/9373djd/fv73drd2drb2djZ2vr92Nva3fv6+fr6/f/7/dvZ2tr9//r9+Prd+/n72f/5+P/7+fj\n7+/n6+vr/29jZ2tfa3dvZ/f/b/93//9n/+/nb29jb3f/9/fv9//j729j92//d+fb3+vj3+v3d/fr33dv////b//vb2v39/dvX2fvZ2trb29v//93a3f/6+Pvb/9va/93a/9379/36+ff6/fd5+/39/9vb2tdY2//d293/2dr7/fv5+t3b2tfd2//7+/r93fr\n93d39293b//v//fr5/f3593f7+v/Z2drZ2tv//9v//9vZ2v/b+/v//dvb///d+///+/v//9nb/f3d2/v7+9r9+/v5+ff3+/v6/dna29v/+vv/3drX1lja19n5+Pn4/drZ2dv7/f/b/9vZ2t3d2Nvd//r93dv7+939+/v9+v/d3f//+vf4+fn3ef36+Pr9+fr\n/29fX3drb+/r7/93/2Nna3d3Y19ja2dfd/f//+/3629vb2tra/f/79/f6/fv92dv4/fn4+/nb29rY93b2+//Z2NfX2Nnd+9va/93a2fv69/3/3drY29va2drb3fr4+/v4+/v4+vr49nf4+tjZ29rb3f//+vr6+/r5/f3d2NrZ1tZWV1jY3dd/2tZb2/b5+PT\n2dfVb9v/b2dnW1dZWV9ZVWdrX+ff09vR2c7T2dfOzs/Z23djWdn/Y11NVVVNR0ZFQEBF3b7G2fdrV1dZa3fX19PMzdvN0dnTzcrNzNPb52t3a//n//9vWVVXV01IRklLRT1DXf9JR05VZ2///93TztXFxMjDxcHHycrX3efj9+/3///j69lj2c3n2XdnZ09T\nUXdHZ05CUUxLTkdITVNTzbi/yf/n91tPW1ldS0I4Qrvr12tXSVdJTFXv92P/083GvsfBvrqysrW2vcHIvl3dZ1VMS0M/STw7PEFIRkRZwNtASVU/Q0FNSk9FT0JDSUpIZ1Nb32fdb2Nna1/HxsG9sbSyramrrqappKuqsbu2tsu8uG9POy4tJCcpJW8tKiEj\nJyAoKy81NzZEr7/H29lfPkxLPUJBNzdCQ0pnwLu9r6mrqqempaipoqSoqKuprKirqrS4w+dXPjUlTLlGKCgpISEnKygnJyUtLSctQT4zTuNNV07/2W9T38rKsrSsra2ssKytq6q2scjPyuPvxb/Kw8XZwdHNXzGsujxVOTkqLyssMSkkxd88Kzs9JS8+Q0lP\nTT9PX0Lrx7+7rayrp6yvrKKqrrevsMpf311d329Ob+9rTT0xK6fbPUJjQywzMDg9TlFAS3dN9/9COUVLTTo3OTw2MjU6Rf9vvaits6uqqKmxrq6528f/xudrb2vG729NPD0sJ6jLNUk8Rj1MRFFEOKO1yUlZP0JVPllvRTJMQzgvOkJGS9vIvbyzrKaqr6+y\nwr5PyFtZS0ZOSuNNS009bzkrn7JbytdNTdU/Sc5HTk5TSWNZPD9APz9LNDc5Ni4yMTxDW8y+wL6srKqlq7K0sve2vetXY1XD087Z2UZrXyyiv79NQfc4SWdNL6TB/2NTPTI2NjZHPjk7Nj45PDQ5RUVfzcXHvruvo6+ssbuw78/JZ2PIyMDG2dtdTFlfXTKf\nrc277+M8R0z/PjkxNT0vLjIyMi46NjMxODU8Nj5DVffLu7a3rqmmo6qssrm3u8bJ71m8zsHZ70s/V1NrKq6uz99vWS9MOSaqSDwvZywoMzsxMzc3PS84REVAQ//Jx765ubGmqaqop7K7uKvbwb7f78PJz8pVW1tLRkMrb63XPkk0NjdFNjY+LTM+LzY6PzY+\nQU4/PkVNVVvv18/Lt8C9saurrKiqr8Svr8LPy+v/x93V605PQ0dHTz0vq9s3P1MvPT0kql9ZM004LD86REdDRl1bTWv/01+9wcC7v7qzr7Cvr6e2t769t9/FxtPLyd9RTEE+Pzs5NDCsYzRdNygvOTc2NzE3SP9CU0tP91vr1edP2dHPY7/EwbzKubu0sLCu\nr66/vcDOS11R99tv/1dHQD9GOD4zJabOTEI7My86Kay2Tj87QkNVW1NXXVfr0WPTy8jAube7uK61uri0t7m5vd9nv05JSVFETktTQT9BNjg2OTwkp77nQzo9N1NPT0Q+PldZymfZ1cbT48bE5+vOyMa/yMq4yb/Jx77K0bK6yV3/V0dETU5XTEk8Pz04Qjk4\nNSOnsv87Sz8+QjkwpsHZzMTGd8DPy8Pf27zP99vD193Ay7m8ycvIwMLVyNvjRVc7SzpPPDw+Pjo8Njo2MDo7J7euyU/n70/ny87Ld2vG27zJxsLF2+PfzVlNU/drZ2/T389ra9fdWb29xttnd1U4vlP3PkZVREhNRTw+PEEta6y7S05nV29HTqm/ytHNW+/D\n68zN/13Lym9rzstVzMxr529Ma2f3U01ZZ0NES0BI2U1ZUVtrTVVNUU33/09XrLDL0/fv/2Nd6+93W9tMUcTP293ra1HfT1tX611nvmfZ929r3+PGzcnVb2NCPz/TSVFHTm9V/0lIWV1nT9W2tbvH08/ZX0qqtLvT39c/vT2/SGdRVV9PTFVRTkvOT1VXTkdT\nW19KZ2NdUUrnVUxvxU1nd+vvb2/v/+tPyLquuLzN39vO2+f/11tT509HSlfbTEhPSEZATUJXTc5nUU9RU113b+Pjzd93b+NjVcl3/9XZ/+PrV99b/89TZ8W2u8PXz1XfsbW7ztlOQkTGSltHPkVJUT9LRUb/SFlZUVVvUWNMX1XK0ePj09fvusHEzsrf19fX\n2dnZxdXby8/I411jT0xTUV1XZ05NRudJW01fW1NdT1FPZ+v3b9/rVWv/b3fb99HXZ+vjb3fE48ndztPR0+Pv683f1+vMzMbM2fdZU+tZWVtfTktHa0pRPkNHV1lLRUtnUWdnd2//3e/Vd/fVzcPGxcXD0by8yc/d1dXf619r1+dva9nXa2djWVFRW05HT01I\nRT1VZ01OU05PTU1TW2Nd43fv4+PZ7//R19fRzMjByMrXw7zJyM7P2dHVztHV39nb39/3X05CRkBKUUdLS0REQUxvSUNGT1dXZ1VVX19vb/fX1dvT49fTz8nFxcnCx8vDusXM38/d3dHX72fra3dd619XSEpHS0RJRkhMT1FTT1VVRFVNVUtvW1Vn6+ff987f\n1dfXysjExMTHy8XFzs7O0cjV7/d3919ZX1VPXV1bX11LUURNSVNRR0xKWWNXa2drXV9ra9F379nV19fN3dfZ09n3z9nRxsbK0dXR1dPV23djY11jY1tRWVdPTk9ZVUhOSV9LTllba/9312/v4//r/2vv79/369/j493d2+fj4+ffz9vb1c/R2dnd1+Pd5/dX\nY1dbX01OW1ddUV1ZTFVOY19b/1tjW2f/7//363dr7+Pd49/f2dnT093V0d/b6+/f6+PZ3+fn6+vn93fvXVVZY2NdW1VfWW9bZ2dRTk5jW0trb3dv793nW2/f3+93693f39fN09HZ1dXX3dfr593d99vdb+P/d/9vb+ddVU9ZTkxLSFlRT1lbd19nZ2tjd+Pr\n/93d49/r19Hb2//v39vv/+/n2efX4933Z///687n0+trb/dfa19jY1lRV1VnWV9XX2Nna2tj/1VdXev39+/j29fP2ePn39vd6/9v3//f6+/f49/n2fdrb2Nf72trd2dfZ1tnZ11nb2dZV19XZ13362tj72vr///v63fd39fX39vd1dXd19fd693Zb2P/9//3\nb13/XU1TVVNZY2t3b2N3d3drb/fvb2Nn//f3Z2/36+/j9+v3X+/Za//vz9/b49/v9+vd3+tja//jb/fv5+tv9+Nva2djXWNfY2NnVVtdV1VbWV9fX2Nj7+Pv993f39XX09v/d9/d3c7R4+vZ5+vj5+vr//dr93d3/2f//+tj/1tTT09ZV11bW1lXV2NnW29n\n63fr59/Z69vj5+fb3evd3+/n2dv349fj39/d5+/f5+vfd1t3/2dnY2drZ2NVXVlPVVVXV19nd2Nda11bd2N3b+9v6+fb29vf39fd0c7O0d/Ly9nPztXr3/dvd3djX19ZT1NbWVdVWWdfW1FbT1NPU11rd+/v6//r3+9359/n99vj0dnZ09vd2dfb3efj7+Pr\nZ2ff62tv/2tnZ3drZ11VV29jY2ddY19fb/9nX19bWVlra3f/7//v5+/b3dnT1c7Tz8/P09vr59/n9/dj9+9j929vY2Nna11ZVVVfX1Vba2NbZ2f3b29jWWdfd3f/6+vr49/d99vb59ff293f3d/n49PR5/fr7+vr9///d11ZV2ddd+93W1tv/1trXVdj/3f3\nd/d37/9352Njb19rX//r4+tv7/d35+fj3ePb2dXb09fvY//v59/v//93b19rZ11dZ3djZ2NfZ/93V2Nrb2v/63f/d2fv/3fr9+Pf6//j39/n3efr5+9372/369/d5/9fb29jb3djd293a3fr9//n7+9r93dnb2NRW19rW2//d/fr/+tva+P/9//r5+vn3dvj\n4+Pn5+vn6+vr9/fv/2Nbb193b2djb293b2dvZ3d363df72//42tv/9//39/3//9vd/f3/+/35+fv5//r5+vn5/93a29vZ/fv7+9rZ11ra2drb2Nna2djb+/r9+vf9+fn9///Z1t36+/r6+Pn7/9va2tvd/dvd+vr7+/n7+Pj/+vr9+/////v92djXV1na3f/\nY2vn7+9nd+939/f/a+v3d+9vX2vv5+/f6+Pv63f3b29vb/d3///373dva/9na29r93f36+Pv79/3b/939/f/9933d3fn629v6+93d/dra19bWWf//+tv7/fvd/d3////d+//9+vj9//3/3fv7/93/2/v3/9vd2dfY29vd2dv6+Pn7//j9//n5+vn6/fj33dn\nb2/r73d3Z2ddZ2NdY2//5+v///f//293b293b3fv/+/r9/fj/29392/v/2//7/f/9+/v9+/d3efv9//3/2drb/fn9+/f63dv929ra2//b29vb2tjX2tdW2dvZ293d+frZ3drY/fn7/f37+fb4+v35+vj7+Pj5+vn39/vd3fv/+/3/2trX2NjWVljZ3dva2tv\n/29r9/dna3drb3f34+vr5/9nd/93//f//+/v59/n4+vv39vj5+fj9/9va3d3//9vd2tfb3dra/93d3dvd///Z13//2tnb2tja2//72dnb2/v9+/39+/n39/n4+fn5/f35+//7+vj6+/v6+/v73d3b2Nvb2dZW1tdXV1v79/b393j6//v/2tnd//vd11dX1td\nZ3fn6+ff3dnb2ePn/2/3d19dX2dnX2935+Pf2dfZ4+vf4/9jX1tXU1dfa2trd/f3b+fd39XX2dHb7/dnX05XV1dfZ/f3///j39/r3ePr911ZT05OUVdn693Tzs/RzcLFzM/T2XdbSktIQ0dIS1Vf/+Pf59/Vy9Pf3XdfUU9VUU9Vd+fr1czMycjLycHEzd3/\nZ01DQ0NFR0tOT11r69/f4+Pd29v35+v/XV1r93fv3dnRzdPTz83V2+P/Y1lOTEpLTk5RV1tbb3fn29HRzc/b1dn3Z19OU1lb7+/3493Z09HRycvP3/d3W0VAQUJHT09fY2tr493ZzsfJz9ff7+9XTk1VX1/r7+ff3czPyMfHys/rX0xFRD4+QE5bZ2dv49PL\nx8S/wsjP71dKQElFQ0tba+vb0c/JxcrMxs3dd19MPzw7RUlOV2vf49vMw7+/vb/GzN1rT0E+QU5JTFFbb+//39HPz9fX2+9fb11MTlNZ39/b2dnM08nDx8zZ52tdSUU/Oz5BRGddXf/v29fRzsXO29Xd519bW1VXW2vdys3bzsjCytXX71dbWUlNRD9JRkhK\nW+P3b93Nx8zNzs/f2+/r/19LT09rb+vFz8rGy9vN7/9ZU0hPS09OQT9BSUxX28zNyc7Vz93MysTHzu9dTENGTEtNZ+fr17i91dff51vvZ09RSUI9PENXb93PwsLIy9XVz87j4+9rW09dT0dJa1VO/7vR3d3vb1VRUWtvT01IRD9BWe/Rz8W9vcS+wr+/2dXO\n1+v/419FR1F3TevFw7tPY1lXTkhTT0tIPzw+PkNT79vnysDRa1NVa1VO3fd3991jWWdd1+fvvqywu83F087Rzc7j4/9TS0ZIT/dr3WNnv6+6yOfvTFdvY3fdRTs9Pm9DQ0PGqrJXO0M9Ozo8PUA4NjM1NztPd2/fz+N3TUZLV9/ZyMLCuMDR48W/v8q0qKOs\nvtvjv8q/tbm+xsz3TUlfd3dCMkapsMxOPjk8QUZOWfdXNi8vPEU2Ok63uFk5MUg5NUtOSUg/PTk5Pmvb62fj2ed3T1Vnzcy7t7OusL/VY73F5+esoafTz1nP3czAub3J1dtLP0NLd1c4O6axwF9CNDZEQk1r0e89NjE7QTUzOK21xWc2PD8+R+fj91FPPDw8\nStXM2dnZ3+9j/1dZz9fVv7u2zVlK39NnQ8ChrbhVb0zj09vGu7jN0WM/PkBVy9HrP8antddTSTo7VVXfy1sxOTA9ODcvq8m+sUo/PlVFTdlvW1dRQD5IQvfI1//Mzutv42NnyMXNx7G0xd1vStFnO6Otvr5IUVXHXW/Cutvbb084Oj1G529FMqOtx0I+QzJd\nZ0zMvzlBOTk4RjHGrcS9ukc7QFVCb2tTSmtLOj5APs/V2c3G391n4+POvLq8rKu0vM/jW8BV75+vvstjTENjSevF2UpKQz8xMzU8Sz88Pi6jvkY6RUw9PVe8zko5QT9NVS+hrr/HrVs7Z0pr0/dNV0pZSExKSMHG08y9z9NvXczj18Tnr63ZzufjRGsyzKrG\n38tdOkVjRlvB41FRPTo9NTg/Yz5OWT66rXdP62syOte70WM+Rkg+d02ir+evtclP90tF2eNn31VTWd1BU8zIXb/Z0dVvRtvX61dduLPR40fZOz84zKx363dIOTxCOktH4/dnPzg8PDo9/0lj1Ui+pbxfzs1jO8Wuts1KTsxR3Uihrr6rtcvOa0RC2U1H22NM\nTVFNW9fP78tv2VlRPkxdV0JTxLrNdz9TQzwsvq3n21NKPT4+OWc+OV3EXT5KPUpR21vvyGs5t6i/y87FOsSyxb5fXULHXTGisrmpzd3I31tC1UxCVWc6SUQ7X+Nfb8nN//9XPkpVSUpLvtfI1UtGPUEsvqzO0VdLNkNIPk5OOUlP3dtZRUFba1n3yff/RZ+6\nwnfZTFO6xb/H6z+5VTWlrqmu08fJvU5N59tI/19bT0VITWdVa9FrW19NPkE+RT1XyWPrX0w+PUIotqzD50ZZOUI3O11vO0r/705TY9XRze/Lyc/dOJ+uwFX/zc/DycXZ513KYzKjo6zfwt9VwEZOUW8+U13vOE9LSu//Y8vX21NRSj5BQEXNxW9310dERUUl\nQKy9U0d3NkA4M0FORz5Z91U5QO/Tys7Tws3ZOJ+oumPbv7/Nv8HIyVHVRT2fpLjruudXwVdGS1NDQWNrNTk6XU1r/8vR3VVrVzg9PEfO01t33f9ERUYoya69a0ZjP1U6N0lPRD7Vz2dPREnLzr3Hus33N6apulvvu87/193F11VLPMmfsr13y19r42tLbz47\nQO8/Qz09R1NZV3fX40H/TkE+Ql3R213j3cxdZz0rq7G702P/QeM/SFVdR013zV/dSlPnY9HIvsn3QFOjv81Tx9NHU1nA0V83NVufwL7Pyf9d6+d3TzpEWU4/WT1R/1tV383j42PJ/0hFT1vGz/fv38/d/zQprqnAa1f/U28+S1FNR1tRa033S1ffU0rFusnZ\nSUyft8Jnwb5ISL/bd/8vUT2osr1f103OXd/bRjlPV0hRRTpLX1tPU7zZ0+PM3VlFUc2933fny8vdWTUrqre1W1VbR2NAPEtIS1FMTVFRRUxdUUnjur1v7zpfo7vZxr9AW+9NR1vPL2OqucVvy0/Rd9HX6z9nWVVRTkFC71NTXcnGytXD0/dT27nL2eNn2Xdr\nRi86q8LDd29HTmtESU1BP0c9PUY+SFVrTktnzb7v3ec4obe+12PTRVNFT7BCJrWru8/Fz1W/ztXB70FR3U1Ob1FE41NVX9/KwsLB09l3zsHbd2/V90jvQi0sqc3b5+dAWd9XXUFPPk8/Pz89R0NdT1lZWce/2f8toa+4Rc5ZN0hNuucwJ6mqwcPrw/+9ze+8\n7z9J11dPY09B111r79nEwLfEys/MvcfvZ+vHQEzbPC42p8vnzt87RXdOWUM/O1E/PDg7OkJNSlFZSMC7x0wroqK7d2PrN1m7RU41LLSsvM3bym/H09vD2WdG2VVLV1FP11/Vzc7PvbbB2869vN/n291jQlnbTixXqblb2V9LS2tdW0I/PlM9ODg5O09OSlFX\nRL68zj4quKG1RkzrOL87RV8vJqqtxcnP2ffP292+yFdf21VJQ2NVZ1vXx8jBuLi8ysm0um/B2etfTktjSinKpbtv4+tBX+dTT047Pko7MzU2N1s/Qk1nW9e450kzd5/F50b3x10xR0o4Jaitv8PP23e/29W8v2tj/1c/SE1fa+fZy8q+t7e/w72xvdvN291T\nS0rrRCixp7/b59lHV+dEa0k2PUs6Li4zOkk8RU1ZVeu920M51Z+33UTFsS48XUM1Kqevv7nP2ePNzsjJvt9ZX01FPD5jVU3TysnDvLfEzbmyvU93yv9KSk5XPif3qr3X79trU093z04+QU48NDA1PD49QWfN2f/PvUw8z5+400O3xi49O0QsL62zvr3XW8/v\ny8K/vtfnV0NJOjxfW0LZxLu5v7W8yriwwV/ny1dASUNLNSq8sMV3zedO30zvzuM/QkVJMTM5PkQ/S//Ly87Zz9Hf95+vyVe/Uy86OzwoS6230b69TWvjXc7Bze9nPkM9M0VZU0jVyL+7ube8trSzwOvN119PSz5FNyqrs73nxN1Pa+/XztFAQENAMjQ6P0Y+\nS9vLytHX5923PrCpxNnHRy05OS8nL6zG18W7T+dn0cbHx+P3O0A0O0BrUVPjxsa7vbe7uK/Mw9fVb09TR0A/Mi6ossHvu81Ha+PK2dlPP0E7Ojg5Q0lDTM/EzsvVX8euO66qwbY7QjE9Ni0p3bTf58K6SGdVxsRjyMjnNjM6PUBvRFfbxr/Bt7fCr7PCy7/P\nWUlCQFE3MTqqtd/IudNT/+vD11VvSz42OzQ8Rk9AW9fHxcvHV8u5TLahs688MDU0NC0p37RdTse1SlFZyb/vXbpvPS89PD1TRUPnwb7AvLu8rbe+ysrHWUI/QUs5Mmuls1+9vM/r482/xVdB3UMyMTk7Qk1GTtvOxsvJd7zNRz2fuatFLzMxMisrsblPTL66\n71trx8vOWcPIRiw7OkQ+TUJvu8C+wLm3rrnKusrvb047PUQ9LTqjtmfZtd/v/8u/2c9RX0Y2Lz86RkZJTWvRzsvJU7HfYzWlr6tIMjkuLywrrrNdRM6350xn69lr79F3RSstPUBDTkJXu7vGurqyqre8v7XR/0pHP0lFMz6jtM7Rtc7Z68LDy1vbT0kwLzo6\nP0dCRHfvX9PTZ7fbTzWrpaZDMDYxLSsqvrFrR/+0zFlX1cpjTb7nUzAuPkJLSUh3vLrFubq1rrW8w7/GT01IOz8/LeensN3dvMvR99m+yU1r3UEzMjs9QUtESs3Zb9/F0bfR/1UxoZ9bNzU4KioqrrZdQFHCw+tM0cjfSdPHQTYuPT1HREvfxr7BvryvtLG5\nwMnV3UhEOzo7L6qrutfvxP/LY2vAzFNn90UwNjk7P0lCWc/rZ9/Rv7PJz28vtJ/MRzc5KSc2rb53S1fOvNFXz8nRXdfO/zszPEhGQk1v08TCwL6vt7m1wsrZWUg/OzM0LrixvuP/zt/ZY//Cyktdb0IyNz09SEpGb9Hj/8zXyrHFxMk/Tp+u2zw5LyI+rd1f\nUVN3xs1Vzc3RY/dVXzw6NzpGO0d348bJv7+ttLa3wc3vW0s+PzQtNq2xznfR98nn/8/Bymv/Wz02Nz49OktL/9/v3cbVybPCxc9IPp+uxj84MCDCt99bTV1Iw8z30c7n9+tKWUdCOjdLPkXv38/Bu7qstrK1v8n/Vz8+PDAlPqvA993ZUb//X8/Iz03vTzs5\nOz4/OUhKd9ff0cPNuri7vstZa+Oou1U3NCOyt2tbT/9HyNPT29ddd29LSExIOjo/PUbd9+u/vryturK1v83/V0I6Oi8mvq/nd9vdUch3Z8vK3U7dVz08Nz9FPj3n2d/b08nbs7y6vdHXvz2nvk89Lz28w0lRWVlP69fJ69NZa1dEPl09PEE/OGvb2+e9v7+r\ntbO1vsx3XVc8OjMqrrjRV9dbTsvr79vZ60pbRjs5MzlAQDpFz2/v79Hfs7a9v9nbuy+ksWs1L0q51V9N91n3682+2etb/1dHP2NIPjw9N07r12PEx7+usri3vclvX1E5Ni0rrbXn59fbUcnZ3c/X52f3RkM7OzY8OztCze/f1+vVuLa7x93Fvyuyrd0uK8G+\nVUROZ1NRX9G+31db905BPUxbRTs6REl3zf/Oz7qvrrS0ub3vV2NDOyw9r7j//9HZXd3Vzs3b5/f3RERDODw4OjdN/2vv3V9jubW3vOPIvC7Lqdk/Ka7MT0RIa1lTTcu9xmNv71NDPkNVVzc3O1dZ1d/V2bi0rrK3t73XV2NINi13uMnvV+/v4+PVw8vXb+Nr\nR0lIPkQ+OjhK/+fZ391vuba0uXfEuD0rpMc+K63OPEpBXUt3PtHEyFNTY0lEPT5ZXTcyOEzj48nfzbu1rq+4trrKW29TNC7ZvWNb9+933d/nvc/Z7+P/RUxETEQ9PDU7Z9HjyuPfvLq0umPLrkMnq6s6OK6+MEdTQFtfQVfFxVlNd0pGRDxnU1E1Okf319XT\n07i8rq63ubfEVWNLMCmywUFE19tTxl/XvMd3d+PXS0pJVUk6PTs+TdXLzczrtrywuf9rrkouKadFzbfONDVKPkpPPVvX2d9OVz9DPj9Mb0Y/OkhP0cnI1bm4r6qxuLK6z2tXOje2wj9FY29V2VnbxMROW2NnRUBDTkc4Nz09RVPXy8/nubyuvcvRr0tFLsy7\nrrrfSDg+P1lTRM5f3+93W0VFRURJW0M9OUZRW87I08C+uK21vbe+z29fNPfBzTtCW09n09/MxMtjWff3TkFHX0Y2MjtESkhn09HZwcCzts7Is3dHOC+qpsZXV0g2Pl9Ta8xRXc3Pa1FVSFdTTUw9P05dV2PDwcLGt6+0vL3Lz2s/M7ndRDtBSUJHX9Xjz///\nXWvvV0tJ/0s6NDlRWU7v38u/vb+2ssXGre9VPymmp85IXVMwO0lNztNfTtPZb01LS1NTQFlEPU9jXVnjvbrGtrGutsLHyuM0y8lZOjlAR05KQde/21vfV19rV05VZ103NjhFXVv3zv+/t8G5tb7Lr/dnRCmuo8hPTmc1OEg8yr5rPtXO1UpMRFVMPD5FPUBO\nT0/b29O9ubmzssfRxdc1sbtGOzs/R2dVT2O9zXfXZ+PTXVtVZ1c3NTlEU1fdyNHrsrK+urzXs9tPPj+/pcJfSVVCNz1MTOvdP1/vzE9DQltLRjpMRT5NWf/fx9fBtby0sc3Xx2NKr8U8OkU+R2NnXdnT48HnUWfXX1lRa0s9NDhDVWfrw8nbv766uLr3tc1K\nObtCpMDrSElbN0VZV1df20Jf0fc/QklJPTlPRj9DXefjzcHfxbC2tsbXyEdMrN07NEk/RVtd99vM52/EV+vfXW9rVV1CPT5Ka1fLv8TZuMnEr713ssE+P7REu7XnV0RNMkJVSlFLPVFn3V0/R0lEQDr/S09A39PRzrnMyrmuucbZ00e1tlc8OUBEQkxX1d/L\n2WPPy+9bVXdfSkpGQT9D61HGyL/dtM3XvrNXwsc4yaw9b67DVVNHNkZVSF33PD3P210/TElKQD5ZY1NGb9HTy77Dy768r8z360+oxUE+O0JISz7j1f/rzV1Pd8dPUWNvTEs/RT1DVWvXx87RvMHZyb7Gy80zra89K6i2409BPUxOTkfXTDdGwONDRk5XRT9V\n63dT3d/L073Eyr6/t7v/TMWqz0c+QDxHSTxdzF1j091NWdXfV0tVQUg+RD1HV3fZ48fGy77LzM7R57k3tLZAJ++syu9JQD9fU0bbZ0I/3czVP05LW0dL49dv59Hvx7vCzL+/vr3ETb2rvkZBPTxATDhFb99V/9dLY2NjWWtdQ0lNSURFV+vd3dG81bvE08zI\nWbv3sLtEOiuovr9GR0w/U01ja1NBV+/JRElFTEpEa93n2dvn777C08bBwLrTSrKowkdGQTo+SjtHd1dr5+dOW99jU1tOU0dNTUJLVXfV38rFw8S+09HA7//MsLz3Pyqssb5NR1lAPmdPX1lFTl3RTT5PRE5IS87f29vf58u+zNPAwb3JR7euv1NISzZBSD5L\nXUlO22dRY9lrXU9KRlNJR0hKU1vn283Aw8W779HDyUCrssnbSS09q7pbSWNCPuNdTGdOR13VVzpLSUxCT9Pn3evZ6+PFvXfXwMPRT6q75/dJQTg8P0JRXUVf1W93W9fn609KSUxMT0dXTVl3683Ixs7A2dfIzUGuodNTZzMuqrfPZ2dIP11vT99vS/fP50NK\nQUpMSe/N32vn22/Xv9FvyMrXWam7W05bQzY5OkJJSkBrd2df7+fX11U/V09IZ19nTufZ0c2+vsPFxMrLz0GqoMdHT0syqrvFWVU4Nk9XSFdvPnfj40BZTD1TVVnTznf/3ePNy8tnxsb/b6e90VdKUTo7NUZIRjlZ41Fb91vj3VNERm9FP+vvU03X18jBvLvT\nu8HFz0PDorVTV0guqa2+119MM1lrR013PkNrY0Y/Wz48T1//5+9f3V/d0c5rzchP96ax59tTQ0JAOztVTEBJ0+9M3/ff2+tKTlP/SkzJW1Nf187Hx77V477Pbz/AqLFOY0ko2am9d+9GOEhnTUjvV0Fnb2NKSlNFSPfXyd//29//zsdd3cdVW6etz+/bSDpG\nTjlETT1K4/9jWd3d32NHVUxVU09XX2tZ/9vLxcDG68LM7z69rqvHRU8yQaq3yVk8OjtVS1lIX0pXX2trSE1RU03du9dv98vf1cvH38NfR6atwtN3V0M+PE5FRTpK72djZ1vT03dLXW9OSWNnUUfdWf/nxcbK98LDbzy3rr6xSzs5Na27tVM6Nz5MSllPTFNN\nX13dUU1N12dV1bjnVd3F187FxdHPS6arssPbT1lMPTzvQjs92/93UVlr42dLSFtLSE/jV0ZF519nd8fR2e/CXznnrb7Dvz0yNqy3yds5MjlRTl9RT01LWVnbY1lf59VZzs/H32/LzdfCxdHj96ats7/LRUlrQj9BSEE6Vef3Y1dv9+NjVV1KU1NdX01LQ3fV\nV9vX39f/YzO9r8/buEItNq61x0Y9OjlMVW9nVVlXZ9nTb1/R593rwsXV783Vz92/vs9TvqiuuL7dT0hKR0dANzxHRmtnb1tfd/9Pa1NRU3dXUWtfSUpfzWPX3cfrZzqysc/rvVkvLa6yxE02NEFETl1rV0pNSmPPWWPn3WdbvcHbX9/L3+fBxMZNraiztrzK\nXVFGQVdBNDY9VVNTU1tVZ1VHX1VKTfddTFvjTUtr39vTz8rrW+ett8fRt3c1NquxtU44MzhLVVt3VUdMR2PZXVt361VP18T/V1Nj9+vVz91Xr6y9u7bMXUpGR09JOTk8S2fdV+9r72dVV2djb+f/W2/341Xnb13jxc/jSL+vudvjuMU0NauzwFM4NzQ+TG9v\nUUNKR13v62fj91NjzdHR51tX79vK1W9dq63CyrjCb19EU04/OzlBQ1Xv9/93b1tdWVtX1d93a9nfXWPr/1X/1c7vRLKwu+djy783PquyxkQ6ODU5RUx3TD5AR1n/d1nV/1tnzNv/92NZW/fO1/fjqa+5ybe+0+tHX2tGPD5JRVfv61fNX2Nfd/9R69Fr7+vZ\nWU9n/05d78xJS7i2x+9Z9749Q6+zyj84Nzc1PUPnQkY6TVd37//T2W/nysn3Z2NrXePVy0OurLS/wLfBzeNG//9COz1ESkzvZ+dn51f3Z+tZ3dPr4+PT/2dTY1lV6/9Vd6q+1edrU75FN6+03Uc7NTQ3O0ZOTjg9RlFf/+vb4+Pf1cb/Z1FR7+/XXU6srLfD\nwre6xN9Vd29DP0Y/Q1n/413ZZ1nv9+9f29/r0dXT51tdVVdZ42c7/63F3+trS8TZW6633UM7NTE0O05PQzg5Pedf//fN59XVzsjvX1lMY9XHVU2pq8S8xLq5vl9V71tAQkJAPUT/0XdjTV9b02vv29f3ys/M1WddVVdO22c9vrHBWdX3R13K0a2150JCPTI2\nO0hjRTU1RFHbY+PO2d/Nys5vZ1NIX2fXSuOtsMbOyby7v9VT30xFQ0VDO0NX09lnR1H/4+/309Hb08nF0Xf3WVFTX2dEs7vE///Xa1HMs624Z0RBPzY0PkVZSzU1QWdrXc7T09fOwc7rY1FLVf9vP/etuM/VxMO6v99rY0tFRUFBPD1X791dSk5R7/fnytvX\nytO/zev/W1lXW1FRr7bN/2PfTl/Hqa3AWUdDQjk3OkpPQDU7QGNn793H187Lycn/X05NX/dnQr+yv8rfysPAvO/ZX0pFSkI+PkFT499NSFdX/1v/38Xby8rGxdt3W2PvVUjEscLNZ1tPWUCxpa/NRUtFQzs4QU1OQTE6SFldWdPVytPLxdf3X05Td99OVbO9\nzsXdyMfByc3Pb0lCV0tDP0pX3+NIQ07vX19n487L1cfJy9t3U13/SkayuP/f51NLTTvFpLHjSkhLRT87R1VNPzM5Q/9nd+vXyMjJw9n/71td9+9X67LD3cvOzsbH2c7E70RCTElDP0JZ4/9NQEtr/2f/59fXyMbKzs/rY2dvSlG3uF3j32dHTTvIo6/PRkVE\nPkY9R1VLPTU3Q1fvb/fX1cu9yd1360//52tPvLS+/9HPzMHH19/VxkZIR00/SkVZ9+NOP0hbW/fn59nd47vL0dXnY91nQVOxvU5T3U9NTzm+pLDBRkVAQj5LRU1HPDY3RE9n6+PXzs7Iu+fr62NvzWtVr7bIW8/V2b/I293bb2dNRUZGQkxXW11LREFOTWPX\n09XZ18fGzszX92frS821y29R0UlLTjrBpa7bd0Y9QUFDTk9AODY6P1FTa9vVz8zDzdvLd2v/12/fsLjZd9vR3b/BzNPX/2tOU0RKR0rvY09LREdGT05v1dXf2crj077vd29dRbm80VdV3VdMRT27qq3RW0pPP0ZHV1lBOTY9QklZb+PVzMjCyev30V/v50zb\nrr9fW+vT2crNytHd/+tXRWdHT1f/WVNLS0tGV1330c3Mys/V2dfFZ/9KUbTAZ0tZX11NPjpfra3Ra0w7U0NFVU8/OzU8P0dd/93Xz7+9zNndd9nb50jEsLtZV9vTz8fL083Md+9vTUFVWVdrU0hXTEhDSWP/1dfOxtHb19Hr0dlFY7G950xfW1tjQDtPrq61\nb08+PEVPVV89Njw7PUZOY+/d58m60+fb51/X30e6tMfZV+vRz8nKzNPP3//vV0hCTttrT0ZPb0pDSV/d09fPyMzbzs/T3+tVb7S/X1lZV09fRD7vsreyd0xDPz9H/1M7Njg+PkRNa+/j4829zuvf52/3/121tsj/92/nzdPKy83f49v/X0tKUffZWURZVU9D\nSGPZ19nJys3OzdfR2/9G77HFW05vUUxjRkDjsb22z1NEQkZGT1c9Njw7RUJHWffd28vE09nn729vV0+vsd1vY2v/yt/Pys7V7/f/X0tLX+9XV01ZX0xMSF3d087Lx8/Px83Oz/dPzLHFX1ldZ1dPRUbbsL+/301EQ0hKUz49Ojs6PkVGT2Pn2c7H1+fn729v\nTtG1uNtn51PVzuPTx8vZ1Wtfb1tO9+tfQlH/XUpFTVPr483Jy8vTzsvNzddXuLvG711XU3dKTEvEsL7GyE9JSUlTTEA5OUE5Oz9GTU9v1crJ03df52tjS9+yx3ff207ny9PZys/Ty/9VWW9d7+NPSEdNb0xCR0/n59fJzMzP1c/O0d9nsrzPVeNbU2dLWU66\nr7zGzllHU1lfSkQ7Oz5EQUJETV932c3M12NXZ2dVR8q10U1J3U5n79XZ1dvVz19OUVfn5+9KSlFXUW9VSlXjz83HxsfE1cvTzP/fr7nbV1Vra1VBSv+2tLrPd1tBR3dbSj48Oz09Rk9HTl/XzcfKyu9X//9jS7u11V1OW2/nY93Z1efd1fdVR01n2VlAQU9P\nSERLU0lZ59PTzM7F08/R1XfArrvna2NX6/dMStWwsLbRd81MS93nSD4+PT5AQUtVTVHnzsnMz9VjXV1bTrm4yVtNV1td3+/b79/X0f//S0dr011HQFVTTElKRmdVa9fTy83JzMvX713Tr73vY19VWU5dR9W4sbfOa9n/S+fvSz4/P0FHS0hHb1ln18bIzt3/\nZ2tRU7W0yl9OU2djWd3NZ2vb1+f/SUZn61FJQklNTUhKQENn9/f3ysvJy87R90/jrrrVX2NfY1VIWWe4tbbJ52vZWW//SkdCPUNKVU9JT//f48vH09/vd3dTScKxxlNOT1//W1/T2VVj093rV0hv52dITkpHU01JRkZMb+d318nLy83X3U33r7POT19dW1lM\nS061tb6+2Vvv2193T0VJPUBIX1tLTmf/zcbMyd/n5+9fS8S0v11OUWP/b2//2+tn79HXWUtfZ2dIS0xGT0xMREdRUVXn29/Kz83V30rvr7fNV1dbV1NOVVm6sbrLzldJ2e9nb01GPD9NXWdXT29r78XG19Xj4+NdS7uyx+9ZV1v39+//d2dr29/TX1NfY19R\nT0hBWVFFRkdNV09r3c/dzs/Z70rbsrjfVV1bTVFPV2+9trrG93dM3+tXY1lJPDtjX1VbU+tn48zJzf/X299rU7Wzv2dVd1lr39/jb29b28t391tdV2NnX0o+SGNFQkpNW1Fnb9HK387Tb0VjsLr/VVNnTEZRV92/ucHO3VNP69VOXWdRPDld91VTWf/3483V\ny9lv0ddrY6+vwW9Vb3dn79Xf72dnY8jRd29vWU9f/04/P1tOQ0ZOV1lda//Jz93TZ0jPsb/jV05ZXUVJXe+7vMHZ2WNFd81RTXddPTtR711XU29r2dHZ/9Xd6+NnzrCzymtdd3fv79XZb19v99/M3//vX1Nd31lIQ09RTUpMW1VnX/frytnvb07Ftb/vU1dR\nTUdITv+9vL/OW/9PU+d3SllfQzxFa2NdW2dv2c7b92/X6+9X2a+2z+9j72/3287jd1nr59vjztv3V2dX72tPRU5RTE5MTFdjY2vf583d/0a6tsRdV1lTTUZOUf+9v7/PXU1ZU9tbV01XRT9IX29fa2dn49Hd////42dn1ay61f//6+9n58nda1nj29nd28zO\n/0/3Z2dZTE5OT09RTVVfZ2fb3d9vW1G7ts1XUVlPS0VKWd+9v8DZXU5OV3fnTldJR0VTX3d3//dv39Pd//f3Z2NnvLC60W/v599n48zTXVPn1evZ29ff92ddd1tfV1VRV1NVT11bXf/n091rS9u3v9VNTllRR0NIXdO/v83fV09PVVHZX0VHQUhZX29v/+/3\n29vr72/nZ1dTtq+702/f3df/2c/VW1vn19/f19XXa+/3WVtXW11VWVVRU19bW2vn39ljSFe1vV1XU1NRTEVLW86/wdfnWUtXXVlva1VAQktvZ//3d2vd2evna/djZ09bta++d+/f79nn2c/nZ1/j0+fb28vPd13f70pNY19VXVdOTV9ZUfd33etbSdO6xudJ\nV05RTUtRXcq+xNXrT1FXZ113Z1tGPVN3/+fva2vb0+drb11nU03Zt7rF32Pv79/n19djVe/j49nf1c/L22/va2dLd29vd1tPU1tfXW/d599XTL28yvdZS05RSkhVd8i/y+tVWUhTVVtv90hBREVn79vna2/XztlvXfddV0fZsr7T1+tj3+vn191TTtvj5+fb\n79HX1f9rW1lZTmP371lTV1//d/fn1edbWbS4zmtZX0pZSUxfzcXAxmtPUU5MWVdd50ZAQk5O69vrY2Pv09trW19nSETKscLv/+v3a+Pf1edbUdfb69/r2dvP2d/nW1lPY03d329ZV1dj6+/n391La7S3zldnW1lKT05rycXCx29NV01bVVtX20w+QE5nU9PZ\na1/v1dVrWVtbSz/Ls8DZW+9f71vd2+NRU+PX4+Pv59Pb1d/bb0xOX2Nn0d9jV1ln3ePf5+tOZ7a4yl9RW09RQ1F3xcfCzG9PU09XX1dX629DPk9Xa2/N919v1dPfX1dbTELKtL3ZY1tjb3dr2+tNU+vb393n59nR29fb61NKXVVnd9N3U09v49/Z4+9KTri4\nze9VTFlTS0nfxcXIze9VT1NXWV1P7+tLQklVX+PVzv/33czZ/11fT0DCtb7ba19T/1/3a/dLS2Pf39/369nj2+fb92tRTWNX39vfZ1Nb3dXV3/9RUbW6xvdbTklVRVFXxsPHz/9VTVNdWVNTU+9NSEtOa2vO19/n59XT3WtdT0bVtMHX729fa+9r21tMT3fv\n39nr/9nZ69/r72tZTElVXddva1VZY93N63dLWbS4zu9ZVU5LTUvjzMTGzmdVVVVja1lRV2dbTExRU2frzOvf39fd3etdS0bHtsPV43dr/3fnd29KT+ff693X493T2+PZ/+9jV01OY/fnW1VTZ2/b2V1Ha7m73VtbUUtLSEpdxcvL02tNT2NvZ2NbU11jXVlV\nWWfZ39Pj28/P49lrTEfBtsfX9+9n//f3/1lVS2/d2//Z0d/b193j9//3XU5RV/dna1NVd//d02tIZ7m5311XXUtJR0ldycDT3f9ZR13/W19XV1FdY19VUWfr2+vR2dvO1+t3XUjGtLzX6//v7+fr61VKUVXn2et319vf39/Ta/f/Y09LU2t3WWtfX/fj319K\nS7i432NfVU1MSVH/zcfP72NbS1n//19RXVNf73djU1/v3//Z09vZ0+djW0nDtb7X/3dn4/fv709HSGN37+/369nX69/R63fvX1VVV2trVWf/Y2/V3V1RUbi8y29fVU5NSk5ryM7N419NT1tb92tVV1df599dWV9r72//ztnd5+N3TUjVtb/X52dv5+/n91tM\nR/f/513f49/Z3d/X22vvWV1ZY1tnY0/da3fv32NHa7a5z/dbW1NTU0z/xdX/21tJTl1Z6+9fW1dr49dVW2tv9+vr2c3d4+93UUjMtsXb//93d+P3Z1VJP13vd2//2ePfb9fb6+///1FnY2//b1dd43fvX2tMWby0xfdnWVlTU07jxtf/a11PTFVv//dXV1Nb\n99n/W29va2vr79PM33dbWUrTtrvP92tj//fvd2tLTGP3d2tZa9Xd7/fn9/ff72Nn62tZX1NM59/X/11NX762xnf/Z1lPTEvTw87ZXV9MTE1XXW93V2tnW9vnZ1nvb2/f5+/T091fWUrbt73Rb2d33dHR32NFS19b511dXd/j3d3f3evna1FZ92tZY19Va9Xr\nZ1FHSLq3y+drY19bTlfTxdVrWU1VT2dfXe9vV1lbY+/Tb2NjY//R1/fjy91rSETrtrvL5+d3b83X21dPUVljWXdj6+fn39vfd3fnY1132fdTT1VRWXfbd05GRsC1wd1jd1dNSkvjyc//71lPWUlZW3d3611R7+/T3+v/69/T01v/zc//V0lVuLvZ/2fv387R\nd1VTVVljV113a+f///fN29vbZ2Nj311TVWNfT2Pj/11JR8G3v/9TV1VLTVndydX3XVFJTUxdX1tjX2NXd+PR2133a9vN193V09X/TEZTubnA/1vd3cnP6/fvV05XTU9nb93R42/f2f9rb+/j/2tMXXdbW1/b21tKRWO8vtnn/1VPTk9rzNHZb01HQ0xXX2Nn\nXVdXX2v37+vf1+PV3+PnZ9ffZ0lIvLfBZ+/dysnZ5+9jTVtj/11Tb+vjb+vVzuNj99vjd11db91XWVtZX2NXS1u5vsprUUxfY1ddzsfZZ1VLRUtbV1tPSk5V79/v29v3a//ZztXrd+vrXUtEv7PE73fb49XR1dHrY1FbW01NXdH/693R13fj38/V719ZZ1lf\nZ/fv7+9VRUG7vchrU1lTX0xvy8PPb29FP0BLX19ZV29XW2Nf78/b7+vXzuf3Z/f/91s/TLvGb+vRzszK23fvX1VZa1dNW+/n78/O1+ff3efvZ2/vb9/nX19dZ+v/Skq8tsddVWtrXVdVzcbf/1lJREVOW0tHSl1RU1133dPX93fRxt3nb1Ndb1tGVbi8ymPb\n3c3Izu/n901bW1lLZ+/v2evnb+f/0c3d611dUe9vV/9dd3djS0zRucBbV2tZV1NnyLvD41tJRkNPT1NXUVtZVVvj2c/J92/nz+tra1nv629GQsG+y2vb1c/J2+f//1VZa0xJTF9r29fbz+P/793r9/9d/2f3Z29bXWtjY0pfvMrrV29v52djyL/Ha11MS0pL\nT1NfV2N3Y2/v18/R6+fLxs93XVlfX2dNRN29yvd368zEzXdfX05LTElPW2v/4+/r6//v3e/X3WtfX2ff2/9fVVFdX0trub/bY1tbZ133vr7JY1tXSklKU1dXU1VdVWfvzMfM09fRz89ra19bW3dTQeO7ws9r587I22Nd6+9OTU5MTFdr593f4+v/b+vd0edn\nW13nb3dbX/9vZ05Tw8DZa29bW2PXxb3M//9PSUJDSlNOT2dnb2fvz9nd0c3X0d1vd11db/9RRVu9xut308jE0Wv/71lITU1ZTlVr993Z2dPdY2/V72dfWffLzu9dU11bU1dTz8TOXV1jW+PVv8fM709MQUpEVU1RV0hTV/f30eP3ydfX383j91VNd09PRuO5\nvM3vytPP49/T611GUU1VWVvf69Pf2eNbWevJ3+t3b2vd129fV1tbVUxFzL7K91dZU2fnxMLB3VdVR0Q/SEtXWUlVb3f/29PRyM/d/933U01f72tdUV/ExM/b0dPb2+vd/2dbW1dVX05X/+fVzNX32dnX/13352vfyP9TU133Y1NHzsDNV0xZV2/XvLvGY01V\nQEJAQ05MSkxv6+t3389v39Hd/87N62dbU1dXS0nGu8rf59nTzdnX319NR1NVXVN30c/O3dnn693V02/v/2/TyNPrZ1tdTkNF/8DC31trW1Pvzr7H709OQj5FRk5PUUpZb1Nd49fj18nV3+vZZ09VY19TTELGtr7N19vj3Xf/61lTY/dvV05b6+fV0dPX/+fT\nz+PR19vZ09V3W1NnV1lRTb7Fd1NZXV/bzb7J61lPR0RCPURDREtf///n3dfvb9vj4+PdWVNPXXdfVUfGu8HnY+vj09vR2f9VT19VWVFd/93b1crL1d/V1+fd4+/bycvX529nUUpFVb/F/1FXWWPPvL3N/0lDQDw+Q0lMT19vX1Nj499vY9vT4+PZ729ZW1tV\nRj/LuLzZ59fR3293//dbUVFZVVVf183b19XZ92/32c3NztHKw893Y2NbV0pGTcK/yu9nU1PbwsTNb1FNSkhDRkNFR1drXWNd9+Pr48rG099rX09TV19dU0trtr73Wevn7+drZ2drX2d3Z09RX2Nj49fV3+vVzs/X3dfLyM7jZ11ba11dT8e7zlVMTFPLvbzA\n1VlMQkJEQURJTExXX9/X2d139//Z2efj9//v62dVTkdPvL3NX/9fb9vZ2d/nT01JTUdNXWvd29Pdb1Nj3dPP993N08vO1efvW0xMPVG+wuNrZ2/Ixb7L2d1OSUJDP0dVZ+9dd2Nra19r79PNv8nf62NnZ19ZZ0tHw77H29vj9+9dZ19rTlVfa11OU1Ffb2/n\nd1tR/9vX08i/ztPjZ19VT1FVSPe5v9NNUVvbxL3I1+NLT09OSUtXTk5MX2/n293P09ndz8fn5//fZ1NbX2dT07zE91dTTf9r39vba05RTEpGS1Vb91lfX1v/2dXn2dfP03fd3dXv/1tNREO/v85bW19vxL+9v85ZRkxAQUNMX1vr79Xfa2tv1+PVzMbb99nZ\n1ef/Z1dHS8HJ2+/3d9/Z/+tbXVdRU0hERllfd+drZ09RXWdf68rFxtvT1edZUVFNRkHJvM9db/fbxcXBx+9NRE1PU09nb1VbVd3jY2fn19/Ty7y+09nj62NZV29dU729x2tTU13bd/93a1dOWVFVS01XU05KT09na2fXzsjH0Xfb2/9vVU1NS0zZuc1jU05b\n48i+v9f3WUpMRUpTV1NNXWv3Xf/Pz9fby8nK3+fZ2d3n29tdT8O6yF1PVXfn49/R0f9dV0xDQUpbXVtV/3dZUVn318/O03fn993f/1tLTUJPy8zfU1dd3cK8ydP3SkdIS0pMT11jb+Pnb2t3a//bysTCx9HX09nn/29VT9++zGtjd9nR0ev/b2NXT05RV1Vf\nV1VTXV9VU1l3683Hz9HN1+d3UUpITEhOwLvVV09Md8S9yNdfR0dLVVFdX11LSUtVXW/j69vRy8bFzdfV2d3nZ1tjU9G3wdtjWV//69fR09l3W09VTllbU05TY1dRW+vTzMrL1Xf/d//fd1dbWURI177TT0hJb8vEyc7bW09OSkJETVFTT1f/d19nb+fZzcrL\nzdvj087T3+frUWPBzetr59vZ08/V199fWVdVSk1RU1tj3+tfV1tr99/Zy87R2e/jd2NTU0dH78DPTklN58G9w9d3T0VGSVlbXVFMSkxfV11ZW2v3z83MzcXL0dNvW1ddTHe7vc5v7+vn18/O1+dZWWNbV1fvd2dfV1lPUWfVz9XMzM3X62/d42NTTEhFZ73H\n70lITmfP1c/R909HSFFZTk5MR0xOW1dZW+/NyMXOysvf39vT393/V1vNvdX3Y2dn2dHX1+v/b29dTkpMT05b/2tvXW/r3ePRy9XX6/fR0+tnd2tRXcLHY0ZMWePKyMfL3U5FS1tOTExJSElRY2NRV2d32+fjx8DN59vb3f9fV0t3wsvba11v18vO193/VVNT\nV1dfX2NnY/9rXWtrZ+vO1dPd49/VzeNbTlVIUc3A41NPTnfNx8XK31dKVW9bVVNTU09VTUxLV+vd09nTzcbJ3+Pj32ddU0hbv73X/1tnd//v99Xjb1ldVU5jZ29TW2djXVtra9PNy83d71/v19fnZ2tOSW/Az3dTSFX3ysbI22dVb+dvU0hFS01ZWVdPXff/\n39nMyszR5+vj3/f/a1NRz73jU1dv39/v69f3X11rX09TW2NPU29362///9/d99nb19nX1dffY/9jSVfHyvdPQU7vyL7Dy11RUVVfUVtPUUtOUUpdX/dvb+fXzN3Oz9XM1d1jW0RM2brDb29nd2dr19HbXV9fXVVV9293b+dnW09T693X3dPX7+/d08/Z929Z\nQkLOv9FZR0tn1cvL1f9rZ3dfSkpNU09PUU9dW11ba/fNxc3M1ePn2+Pn51dPa77G0etv/2Nv39/rZ13/529vd1lVX3f/d19f/2dr59fN09fd29vfd2dnRkn3v9NJQET/zcTG1/ddV2NrVVFRTEpGSk1fa2tr9+fj3+PTzNHV299rZ1tZZ7+7xOtVV1X/0dPd\n229jb11v/2f/43ddX1V343d349vd3+Pd2dHM1e9VQj9NxcjrSEdVd8jJz9PvX1tXS09JSU1MU19nV1tVY+fd193f19Pd39Pd32tTSv+6wuNva1/r2+vn6+/r3/dnY2fr6//v72djZ1ljb9/Rz9Hd39vX32dTTUVIzsdnR0dR28vN1d9bV1NXX1VNSktITlt3\nd19dZ/d359XTycnT3d/b9+tnWf+7vM5nTmN36+fv6///Y9/j/93n711bV2tvX29r9+PV1dfZ1dHP229VTENHY8HNTkNGZ9vMy9vnV1FTW0tJTEZOSU9dXVtVd/fn5+/f69fX19fP0d/3XWfDusDjY19n9+/33c/R1dv3Z+/na3f/d/djXV9jY+/X1dfv69nb\n5+f3WUk9QdfRV0dKY9nNzdf/X1FbY1FHSEdGS1vd2XdjV1dZa+/b1d3Vz9fV0dnfa1/TvcP/WVv/59/r6+dvb+vj9/fjd2tnb+tjXVdnZ3f369fZzsvN6+9dTUtARu/F21NMXevPyt3jZ1FRV1FJVVlXT1NnY1tdWV9nX//f5+vb2dPV29/rXVdfxbvN/1dV\nUVtd/9fV6+vd3d//b2N3d/9nV1dZ493Lztfb1d3n3evnY1FGS2vNzVlVV3fXz913X1///1dISEpHTFf/529fW2NbXXfn6//n2dnn38/P1f9f1cPRW1lRV1Vr793d///r33dnX1NZY/f3/2tv93fv69/O09fZ1d/f/1FMSlPOyGNTUefKycrbd1dXU1FRT09P\nWWfn3fdnV1VXWWdja2/rzMzP0dnn/1NH3b+/409KSUxVb+/n/2v/b1tbb2v3719TTU1V793Xz8rBy83N19vj905EP0PVub7v79HP1dX3X1lNVVNTT1NMTFn/1+9VR0ZJWffj19vn29Xd187N0WtNVcG801lERElTW///b//O0W9bSklKT1VZVVFj987R283K\nztfR4+Pvb29rY1XbvcH/b9XRyMvV5/9bW1tRUUxMSk3/5+9r/1lPUUlPVW/3187X19HBzltHROPB11FEP0pZ08fb/1//Y1lRUV9RWWvn71tf59Pd49PR0dvRysfb/19PTENRx7vT3dnRx83b/1dNTU1PT0pVa+fO0f9RSkNGVVFja+fXzsfX3dPH41FHPF/D\nw91bSUFPW+NjX//v519jV2tZWW9v91Vj99nZzsDCwNfX2f9ja+drW0xPx77K4+Pd2eNfV0ZJT1v3/1tNTUpf/2P/VUlNY19j7+/Ry8rva9PKy+NvT2PLyO9GRUFV19n/a93372NRUVFMR1FbY2/j0cvN59nf3///ztnj79ffa2tP98DC3+/X49fd52tdVU9d\nUU1JTV/j4+/jVUpMVVdbW1fd0crN08jAw+9PQT9rxc3vVUdd3edv9+9va01MT01XXf/j32trX2Pv993X19/v0d//a93na1dHTdnD0c7N09f3W0xHSl9v92NPVe/v39nvVUtLUW9v/9/GwMLJ09fRzN1rV0tjwcDXV0tRa1tXX19fXVtfX09VT0tPV19rY2vv\n3+Pf5+/v4+NbX+/j7/ddT9/DyNHfY/fnX1tPXWPv52tXUW9db93/W1dba9/n7+fXztHOzszJxcvna09dzsbTXU1NW13v9//na2NPSkRNTUtj99//Y2PX72tjXWNjb/fvb//T0+dLQE3X0dPX393nXVdVVVtj/2NKTm9v59fd32tRW2tr/+/TxsbExsjGwM7X\n/01Pb8PG129jY2vna1tdUU9bV09VV01b/+djT1Fja2NbW2trb+dra2Nr711NRU33zMvX19//W1FIS2dv3/9dZ/fv3dnd72NRY9nT3dPLx8bEx9PPz87M62NRXcu/yPdbRU5bV1drW1FjVVtXUUtOXW9vY2/r6+v/Z2tnZ29jXWvXzt1XU0pK18nT12tVY1tN\nUV3/52NRVU5OXWfd2WNXZ9nX19/X19fMx8fMzMTDzN9nV93Jyc/3XVdnb2trW2NjUUpJSk5RW+/3Y2dr929LSVNja+9v/+/fztX3U0Y/Y8bDxtfr92NXVV1jY1dnZ1NdZ2vf1/dra2Pr6+vd39PKx87Mz8zK2e9dW1vVv8bXVWNbY1tOU1ddW29VU1VXb+9r\nW11b9+tjXV1ja+vn92/32ef3Y01DSe+/vc/rV0xLS1PvY11jV05bXVfv/2tdZ+/d2d/Z3c7Mz9PZ2c7FydPrY13Zvb7NXVNTV2dbb2tv9+9vTk5OV2f37///729jZ2djY2tra//f3efnZ05GQ1HOxdPfXVFNS1FXV2P/TkdJTFNr//dvZ2/V2d3/Z93MzM7O\n08rKycjV71fvwL3J52Nbb2dr//dja/djWVlda13//2/v3/9XXVlnZ2v//+fn2+fnWUdBPUvNv8XdW0hOTlFMSFlbU0lISVlra99nWVvr1dvf/9PPz8/TzMnHz8jN62//yL3C1fdrW2dTb//32e//V1ldb29n31vr529nZ2tn713r3+vrb+vv909JPT/fyL/P\nZ0xGT0xJRlNbV0xER0tRWWtrWW/v2d1r/93R0dPf08rPysvM1d/nzL3DzO9va2/39+v3393r62tvWWP37//r3f/va29vXVdd59nda2vva1tLQD5M28bL71NKV1dKRk9jU0o+P05TXWdrV2vr3dX3///b29vr28fMy8zIz9n368G+wd9ra1dv/+vf5/fr32dn\nT13r7+vv3f9rXWvvY11n3dnd7+fZ529KREJM2cbD1W9ZWV1FR0xZWUpCP0pMXV1nb2f39/dnb2/33/fn383N2dvPyNXfb9W+xttvb11vb2/n//f32+djXV3f//fr39v392/3b2P31cvf5+vf629PRUlK2cjG0f9jWV1FSU5OU0hFRU9OU1lZb2/39//39+vr\n3//329XO2dfXytXnb9m9yN9jVVNnb133b2/32/dZTl33///369//9/ff62/329Xf29vZ329XVU9N38rGzd/3b1NISVNjXU5FSUdHTVNd9/f39////29v92dv59vf69vPxs33X9/DyddnV11jb/f3//fn29lZTGdvb//f383jZ/f3b2/329fj29HV42dZV1NK\nVdfJz9nb91dTSEpVTUZHSEZHR1Nj9/f//2f3b2/3Y2Pr2dXR3+POzNfjb+PDws7nZ2///29v/+vb3/dVX/f/6//349v3//9n9//n2+fj29n3929dU0dGT9HLx8zVb09NTE9PS0tPT0dKS09nb+P/Z2Nv/+fjb9/f6+v35+PO0dHr99vOwdH3XW9nX2NZ99vV\n1edfWV9db2/319fn9/fn2ePj3+fb2+f3/2f/b11NT+fRztHb611TSE1TTExLS0VBQ0pZX29j9+P3//9vY2dv6+Pj69vKyc7n49vTyc7nZ2dvb+fj29vX511fY19jZ2Pjztvb9//n5/f392/b39vV5/9vXU1JSl3OzNHb4/dfTU1PTUtIRkY/QVP34/dfZ/dn\nZ/9v9/dv69fb29XOyd/36+ffzMvR1fdnX2Nv9+fb919jZ19jZ2Pj19/rb2f/5/ff39XR3+f3b//3Y1VOTWPOxMrV3+NZTk1ISk9ITVFIQkpRW11Vb/dfX2//6/dvb+vr69/V1efb1dHTzMjP62Nnb/fr99vR62/nb11dVWf36/ff5+vV1d33Y2/d3/f3b/f3\nZ1lbVVXdx8jb4/dnXVVZY2NJRklERElRZ19j/+Nv/29n92dbXW9v69/OytPb5/dvb9fN2/9jY/fn39vb52//X1VVT2/n18/P3W/j6+f//9vX3ePj6+PrZ19ZTUxj28rNzM3Xb05JTk9JR0xLREdVb2dn//f3X19fb2Nf9+PT293X39/j4+vnb/fKzd1vY2P/\n9/fnb19vZ29nX19v//fn6/fj3eP/39PO09////d3b2dZV1t3z8XKzNf/b1lRW1dOTVFMS0dOWVFZX29fZ1/32+t3Z29n/+vb2d3Z39vd/+vTzONnW1139+Pd2d//b11NTFVn/+vr493T0933693f3+tnZ//34+NvW1lXd9fNyc/r/19db19ZUU1KSEhMUVFf\n99vZ/2dvd2dnZ2//993X09PT2+v3W1vr0933Z3fb3d/3/29fXVlTS1Vf99/r39/d3/93/+Pr2dnf3+v3/3dVV11dZ//KwsbX42ddXVVVTkxMSk5XW1tnZ2d3W2dv/29vb//d49/f39vb4/93W2fry8rZb13///f3491vb19bWVldX/9n/+vf3f/32dHX2etn\n/2dv//9bWWdnb//KxMvVX1tZW1dbX1tfUVFKSFFZZ2f/X2/r69v3///d4//r69HV09vj62d399PjZ2dn63fj49frZ1tNUUhNU1tvb9fP0eP/4+vd9+v/9///3evjb3dnV1/XwsnR///j/3dZW01TTkxMSFdXX2dv/3f/Z3dfX2/34+vbzs7R43dfd19n69PX\n9+vr2evr2et3WVVRV1VX/3f//+Pd63f/4+Pr6+Pj6/f/9/9nW19fUV/OwsDP/2dnW1tVW1tXVVVPUVtbX1tXW2dnZ3d369nZ3f//493j4/dv/2dn68/T3fdvb2fr3ePrd29vb1dXW1tfd93Z3ffj2d3Z493db19v////d///W2fvzM3jb29rW19bX2tfX1dN\nTE5NU1FTb+Pv7+//9//v7//r2d3d3e/36/9rZ+PZ43dnb//V0dnjb1dTV05XW1tr993Z2d3d6///9+Pr/+/j493d63dXU1dr0crR3e9rZ3d3a19bV09KTVNXW1tb//9nW2N3/+/j3efr1dXV2ff//2dXX//Rzt3n//fj5+f/a19rW1NXU2t39+vn7/f/Z///\n99nZ5/fvd///a29dW1df38zM1edjX11fY2NvZ19fY1dXV01PZ2t3/3f/4+PZ1d3b29/r6//36/93d//VzudvW2fv39/3/2tnW11ZVVdXW2t399/r/+/369//a3f37+Pj6/9nZ11d69XR2/9nXWv//+/n/2ddU01NT1Fda2v///fr4+Pj5//n49/d493b3/9n\nXVvn1dfrb3f339vj7/dnV1VPVVtjZ//r493/Z11jb+/r9/f359/f53dnW01NV+PO0d//b293/3dvZ1tnX1VTU1dfd////2v/69/b39vZ1dXX3ePn/3dvb2vf09Prd///7/f/b3dfW19XW19vb2dfa/9ja2dn//f/7+Pr4+/v/2tnW1dRVevKyd1vV11nd+vr\n92dvY11ZT1dZW193/+/j49nV29vd5+fn693b5/d3a2/v1dXvb2Nn9+vr5/f/d2tbWVVba2P/6/d3d2d36////3d36+Pn6///Y1lNTFn/1+f/Z19f/+vv/3drW1FMTFNbX3f359/d29vr7+Pb2dvd3dfX293vb2dr49fb73f/7+vj3/9rXVtfX19rZ19v6/fv\nd1lfa2t37/fn39vX3/drW1FMTFH32dv/b2Njd/9rX2NfWVVMTFVZXWNrZ//v3dnj39/d29fb19PZ29/n9+/r39PX1+f3/2vv39vr/29rZ2N3a2NjY2tvY1tja2///+vn6/fv/+//Z1lRTVF319Pba1tfY/93d/9rX1lRTE1NUVtnd//r3+//59/f3//3393d\n29vf3+fj6+/j3+fv7//f29vj5+vv729vY19rd/f//2v/d29rZ//v39/j9/f/Z2NTTk5Z9+Pfd2dda2//73dfVVNMT1FRWVlfY+fb2+//7/fj5+/j29fX0dvf6/frd/fb29//Z2vr39vn//93//9vXWt3b+93Y2Nna3f//+Pf39/j29/ja11VU1ld/9vZ7/93\nX1lZ/2tnX1FOTU1NWVldZ2vrd293////6//f3+ff39vf2efnd2vn29Xrb2P/79/b9+fn39///293Z/9r/+9nd2dnb+ff3+tv7///Z1tVU11Va+vn72Pfb2NjY1VZXf/vZ11dV1dda+fn/11r59/f69/f59fR0dfZzs3R62tj/9PT2e9jXWt3b29jY2dZU1NT\nWVld//9na2v/d1tPW2dr/3f///fb3+9nT0lV2c7R3+//Z2dja29vZ29vY2dvd/fr93d3b////+/3593b39/n49vr/3drZ+vV1+tnb2tvZ19nZ2tnb2djZ2N3/3dvZ2f//3dra29v//f////v9/9vX1VX/9XR3f9nXVtbY/93a29nY2drZ3f/d2tr//fr9+/3\n493n5+/r59vd5+9va+/Z0+NrY2Nrb2tvd3d3/3dfY19rb3f//////29vd29vd3dv//f39/dvX1lVY+Pb3/dvZ11dY2trb/9rW11dY2///3dvd+vv6/9v9+fj4+Pr39/f2+P/Z2/f0d/3d2t3d2///3dv/29ra293b3f/d////2dva29vd//////v//9rW1lR\nXe/Z2/dvW2NjY2Nba29nXVtbX3d39/9ra//v7/f/7+fn5+/j393f3+P//2/f1dnf/3dvb2N3/3fv//9va293/2/3a///d29vd2//b//3//d3////a11RUW/f193/X1tfX11bX29nX1dbXWdrb3drd//v93d39+vr6/fr3+Pj4+Pr9//j19fj/3d3d//////3\n9///d3drb//////3//93d3dva2//9+93d/93a19ZU1/v393/Z11fa11bX29nXVdXX2dvb3drb//37////+/v7//v3+fj5+ff7///39Xb93d3a3f///f////3d3dnb//////3/3dvd/93b3f/7/f//+//d2dZWV/v39vrd29rb1tZXWtrY1tXXV1na3d3d///\n/3d3d3f3///36+fv9+/f6/f/79fd63d3a2//d//////393drb///////7///d/93b//35/f///f/d2tbX19339/r/3dra19dY2NnX11dX2dna2d3d///d//////3///37+fv7+/j7/f/79fb729nZ293b///d//3/2tjZ///////9/93//f/d//37/f39+/3\n/29nZ19349/j7/93b19fZ2tvY11dX11jZ2v/////////d3f/d3f/9/f//+vf4/dv99/f73dra293///////372tjb3d3//f35/d3//93///37/f36+/3/2tra2Nr7+Pr7/f3b2dfX2djXV1fXV1dY2//////d/93d/9vb//v7+vv/+vn6/93/+Pd6/d3d/93\n/3f///f3/2tr////////9/93/3f////39//39///d29rY11n/+fj5+v/Z2NjY2djY2NnX19jZ3d3//93b3f///93//f//////+vr6////+vd4/9vd3dvb2v//+/v/3drb29vd//v7/f////3///3//f39///d3f/b2djd+vr6+//b2tjZ2tjY2NjXVtbY2tv\nd2////////93d////////+vn7///9+/n5/93d3f/////9/f/d293d3d3d//v9/////////////////f///9vZ2Njb+/r6/f///9rZ2trZ2NfX11da////3dv/3d3////////9/f/9+vn///////v6+/3//93d/////f/d3d3d3d3d//3////d///////9+/3\n//////93b2tnd+/n4/f///9nZ2Nja2Nna2NdX2dvb293/3d3//////////////f3///37+/v5+/3d3f/////9/f/////d3dvb/////////f39/93//////////93d29va//r5/f//3d3b293d2tfY19fY2t3d2///////3f//293/3f//+/r7///////9+/v\n/3d3//////f/////b29rd//37+////////////f///////93d29nZ2//6+/v7/f/b2drb2djZ2djY2///3f///93d3d3/3f///f//////////////+/v//93d///////d/93/3d3d///////////////9+/3////////d29vb//v5+vv9///b2tvb2tra2tn\nY2tva293/3d3d/////93d3f////3//////////fv//9vd///////////d29nb3f///////f3//////////////////93b2///+/r9///d3d3d29ra2dnZ2dra3f/////////d3f///////f39+////93d//39////////////3d3d29nb3f/////////////\n/////////////29vd3f//+/n6/f//3d3b29va2tna293d3f/d/93d/////////////////////93d//36///d///////////d3dvb3d3////////////9/f//3f/d////3d3d3f//+/r7/d3d3d3b293d3dva2tra293d/93////////////////9/f3////\n////9/////////////93d2tva2tvd/////f3//////////////////////9vd//r7/f//////3d3a2tva2trb293d3f//////3d3///////39/f//3f//3f/9/f///////////93b29vb2///////////////////////////3d3d3dvd//r6+////93d293\nd3dvb29vd3d3d3d3//////////////////////////////f/////////////////b293d3f///////////////////////////93d//39/////93d3d3//93d29vb29vb2/////////////////////////////////////////3////d293b293d///////\n/////////////////////3dvd///9/f//////////3d3b29vb3d3d3f///93d////////////////////3d3///3////////////d/93d3d3/////////////////////////////3d3d3f///f///93d3d3/////3f/d3d3b293////////////////////\n///////////3//93d/////////93d3d3d3d3////////////////////////////d3f///////93/////////3d3b29vd3f///////////////////////////93d/////////////////93d293d///////////d/////////////////93d293////////\n////////d///d3d3d/////////////////////////////////////////////////93/3d3////////////////////////////////d3d3//////93d///////////d3d3d3d3//////////////////////////////////////////////////93d3f/\n////////////////////////////d3d3d/////////////////93d3d3d///////////////////////////////////////////////////////////////////////////////////////d3d3d///////////////////d3d3d3f/////////////////\n/////////////////////////////////////////////////////////////////////3d3d////////////////////3d3d3d3//////////////////////////////////////////////////////////////////////////////////////93d///\n/////////////////3d3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////LnNuZAAAACAAAHDqAAAAAQAAH0AAAAABAAAA\nAAAAAADT087My8rM1W9369/j493b4+tvVVFVZ3djXUpVVVlfa2v/39/Z19vb3ePj5+/n3dvNxsLCwL+/wMXIyMzf93dnVVNVTktGQkNAPz9ERUlKV+/r7+/fzczLyMjAv7/Bw8TGycvOztXn/1dIQj89PT9DSU5TWV1j/+PbzsnLysjJxsPDwr/CxMPHy8/P\n19/n19XfX1lTTElKS0pJSkpNU1FbZ//r3dfT0dXV19/3Y+u/s7vFy9t358SysLnMa0U/S+/HydtOOTIxOERv901BOTQ3R93Au8TX91X3x7qurrW91V9j6761uMF3PzUzOU3f72tKPDk9Tc67u8TdTkZT1bmytL3Ob0xjzcG3u9VnQz5La8a9xt9KOTc7TNnE\n12dIOTg/a8C4uslnQ0NO17qztsLfZ1nTubCtssTdS0FP/8W+3Vc9MDA5R+fjVUI3Mjg/27u3vc13T1Xbvqumsr/rXVfvwbi5yF9HNzU9T//vSjs1LzhI97++1e9LRE3rvLCxt8brX+/Eta6wvttJPkR3v7m6zk05NThH3czNU0A9PTdZ9+fLXe/rY8XTvb/R\n003Z49Ovsa2z3ds+Tc3ArbnESzUwKj13zbp3RCwpLCtVysS5X2M7O+PZr6mvrtPdT1W4tq2vx9c2RENOw9vbUTk2KjlE373bzk88Y0PIv7y41873U7/CtbHCwU9VT1XFxL7XXXc6U3dfu+//SjM4NE3Oz8JPTDk1TOe4rrm9WVFDTMG4rqi2vv9NS//AtLS7\n40QuNTtDz8xnTjMwLTFBY9PJ499V793Gtre4usfByru8v71jd1dL2efOzU4/MTAwP3fby1lBPzI7S9uytrrMWUo+/7+vqKy250tLRdO6urHPbz46TlXVvtPRSDw1PU1Z2e9OSTlFSO+7yMfTY2d3xrq0ssDD/+vDxa+wubxMRDk+2efEyk45Ky0uPPdj9z84\nNi5EZ8KqtbfK/+vrvq2tp7fEQklnVcG7x8A/OS4zSknn/09ONkA9XcbLwdln90nN0cCxysbbX8nZvbjDy0pKOEjOybW5z+c0OTdEv8u/3UQ1KjI767a9u2NNQjrbvLWntbfRW9vfvK+xrb/RPUBTRtnvU/c1OjQ2TD9KQTo/NUlbzrbDvtXXxcqwrrCvzNVM\nV8fKubvNTTYzLUDvd79ZRjQpMjZjssa63Ug9PGfPuKu6u19vXV23tLGu1Wc7RFfjvru+x0pKOE/X78ZXTkMzQDpM2WPvS0lNVc7HubfEyVPPvr2ssLG562tM37vBt8xrNy4zMU3NXWs1MCkoNDz3uMq/b1NP77+yq6iztm/Zzcu3u728T0g5QVVb3VVTPjM8\nOVfn/91GUU9Lxsy8uc3rRlHdzLextMHdWT1d09O3v8rjRkVD777HvN9OMjI4Om/L99k/PDQ4W9e9sr+763ffxLWwray9wl3Xx8+5xszNOj80O0tJUzw4MS46OlN3TndDWd/ZtbKwr77C6866ua+uu9NMRDdP093FW0g5LDEyQs3/11M8NDVHY7+xurxrU1VO\nw723rL3C92PO177ByMRNW1njwsq+71VON0VJTs9XTzcyODRJ3cm+19dCTefTtKyvrsDF/+O5tq6tvMZFRTpF2e93WTo1KC4vNU9ISkQ0Oj53w7qtr7vJ27+/sa6xr8jrVU7PzsDKXU0yNj0+9/fjRDo5MkBv973FxWtKW2/NtsC8zdFHU9nJt7S+wEpKP1O+\nu7e1zGs4QEFZzdXjVTUyLTxDTcnr/19Aa+/EubWuwcXIyLS2rrK7u/9f71/J3+dLNzUtLz0/Z0tBMy4yOFG+vrG8vs1nxLiuqa+vztVRX8HAwLlvVzM4NTlnd2PnOTYsND1Lycrr40JRTc28vrbB31tNzMi2sLi451ldTsLBurvP0UxJ32PI391XOjkyNE5L\n71dLOTVAVdm1u7fFzGPru7KtqK+z6+vv17q2wMZFPiswMjVNST4/LC4qNEZdwMvVz1vFwrOusq+2zMrZvLy3t83bRD5RTN/rb008OjU6U0rjY2NNOUdVz7q6t8/fRkH31cSzubrZb05Rz72+uL/MSEpra8G7y9VAPTU6RD5XWUE+Mjg/Z87LvcHV0+e+tLKt\ns7W5zsG+vbK1uetJNjI7P0pRPzwsLS4ySF932/9VPlnIu7CqrrLCx+fAuLe0t8fvP0lGXc/f91E5Mi8+P1FrSkM2ND1F08m/vdX/X1PRxLm/w8hvd87FuLe4zedjSffIwre9v18/OzxI1/f3S0AtLzU8V8vRyGdVRWu/ubSstLnLxr+4r66xtMjvRUtGSFdE\nOTQqLS82PERJQjs8PFPPurW2tb7JwcSxra+2wcz/Tdnby8fMX0I7OTx3Z29nSjwzNz1H1dvGx9lfY+vX2cLLx/fv79vJw8i6w8rT39PXysbZxef3/1dNRktIP0k7Pz9EPT5LUU7f68q9vL/CvLq/t7ezsbi3wMjM28tXTko9OTExNjM7NjdDP0BHTf9ny8rD\nubq0tbe1vrW4xLzGwszd90z/W0dZSldDREk5Qjk4Rz1LSUlrTGfj3cDMydXVz//d29nAy72/wMPTy9fVv8i+zdfTd+tRTudVS0JAQTxBPjtXSUpTXePdxcG+t766u7e3urC5vLW9ucff70dJOzU8NzgvLzIwNjk7T0xda/fT18i7uK+zs7a7w8jAwL66ztNv\nV05JWU9P61FPRD4+PEFCS29VTVNf6+PJxc7E2+dv69/Xz8vIvMLEzs7V3czPz8LKzf9VS0VLREpXSkk/Ozk6QUVN09fKycvPxbq5uLK2tbq+xsW7u72+y2tHPzY2My42d1M9NzEsLjv/s7LKxmdNa7+rqKitum9Ob8W1r7jNXTsxO1vbxdNIQTAuNTtn3/9X\nOzI5QtO4sb/Kdzk/XcyxsrrNb0VE/7eurLfMTj5FZ7+ztcVVPSwuPUzOxVNEMCouSdG8tsTIV+vbvauqrLe9WePCuKirrsxGMyo4O+/ZRTQjJCMtRee1/182Lzt3rqiirLvJPEvjsaOhr9VMKDA6a6ysrVk6JiQ0R7KvvGsvKSQwW7Cnr7hAPTI52bustbpd\nO0VB2baqtLrCOFFJ2bq3tu9fLzI8PdVRY0U5Ly1BRM3Mz87j1/e5r62yvLzfycu8rrC10c9OR/dK51M7OS8tKkBDTuc/RTpBP3e1sq68wM/Xv7irq6y7a289Vde6tMr3NDMuOPfMs8dILSgoLVXMs7d3Vy4wO9mvp67Nay8uOF+tp6W01zwuP12wp6ev1zwr\nMkTJt7fNNi8mJjJAwMrFXTc6PGO8pqirr1vvZ9WwqKavtE1CTVW/vMBMPickKyw+R05BOzcrO0jfuLi5xsZrx7SvqrCwxtffU83Ew9PbSztVTOvR2+9OSjM/RkX3T0dBTUFdvsO4yHdHRFtvtra6y19nR+vItqyzwUtEN03ZwK27/z0rJy1AXbnGUTgqKSpP\nuKeisbtIPkzNraiirb9CNT5Xta2ruVE7JiovPd/dUzUvJyw0V7W2tNNPR0XKsqOjq7FVY1nNtqyux+8vMjQ9zb6461U3Ljg5V9/NSUc7LUFEz7u4uff/OkHjybnDwV3Z9++/ure+vVnvyeO+vcRjWz0yS0j/50E4LTErRd/ZuczZZ1vfuKmmqLPGa1Xjv6yn\nrcJVOy09PeO+b0osJR8kNE23vdtDMS8127eqorC8W1VPva+oprjXPjU3W8S8s91rOy44QL67vs46MSkwPsC2u71DPjw/17mvuLtDPD5Jwq6psLhnOEZFx7uwtdt3Lzg5PdPO30Q9Ki02O9nMxd3f71vMu62wsLnMyP/FvLe5x8xGY2tryl1GNzgrMkA/WVNH\nOjo5RMC9trjH1ffvy6ypq67E2UFXTs6wucVZOyw1RHe1uMNXNSorOUq6tM9bNS8vU8uvqrzfODY0X72yqbO/7zpI47uvrLfRWzI4Pdm9ur5ENSkrMEXLyMVLPTg3Vb6rqqqz09Ndzrqtq6+4/0xESOvDuc3jOCwtKjVEa1NIQC43OkrRvbvOyevrxcKzs6++\nyMPdxsrHx9NrPltZZ83T3UlPPD/3W99vTzs6NzrPxr23z+dHTD/3uLixvdNLVf/nr66vu3c/ND9IwLS+zj8zKzE8Z77G/zwzLTRv3bGst75NTlXGs6yossBKPUNfurSuvE86LTA0Z9fX7zQvKS4707m6ulVDPTzjw6ioq693X0Zrvq6qsbpCNzg2d8W3vsxB\nLzc1T9nCyk9DMDM5Rt3EuevnT0JvWcjGv8df1WPNu7e3vb1P5+Njw8XIa1M1O0hB42tZRjkuLEpRybvJzPfvTL+urqmvuMrn/8uzsrK+3Vk3PkD/zv9INC0nLzNDytvnQToxOu/Pr7C6x1VZV7yzraq9yFM/R9G8u7HbTjowOlfEu7nfQDErNT3RvLm9UUE0\nO2+8rrOzXTw8PNu5rKuwxUdIQGPBuLjJdzc4OD5Xz81RVzU0Oz1j2cPRb1tI18y3tLi519X/zry7u7/TRFFbY8vP0VtBLC06P29v71dFOjNd58q5w8t3X0nHtrSutcLZWVnMvLe6yOdKPD5Byr2/ykk4MTc8/8TO6z82MDpvxrS1v188Nzznuq+uu8xVRF2+\nt66uxfc1MDdEzsK82z8sKi8928i/0UU9ND7ZtayqrctrV+u+sKurst9NP0jdx7q+z1kuMC0yRndZRUEvODxE38fC21s/Q+PPubS1vMzvZ7+8ube/50lVT/fR18vrTjo8S13b7/dVQzQ4Z/+/usbRb01Az8W/uMLMWU9Zz7OysbrTSz0+RcjBwM5INzE1Ot+/\nyddAOC45U8W2t7zjSz5RxrisrrrEST1K37yysL73ODM1SNnKyFU/Lis2TNPLv8NVPjQ9b8K5trTXZ2Nvybuvr7fDV09HX8i7xc3vPD8/Rd/V11lMNjQ7Q3fT08znTElnb9PGy83Xd2PJxMG5uL7J2Wtv91dvd2NKQkJBSEJIZ1VGP0VFUWfvz8DGzcbFwby7\nuLW5vL/FzcrOzL/I1+9nRUBCPkJGQz5CPjpASlFb//9jUUhZZ+vMv7q7wNPZxsrHvrzF2eNXVVVV993Zd1dMREM/TP/va1dPT2Nn58W+xd3j72/j38/DvsXGytHNysTGzt1rVURGWWfj/2dKSkA9SE9ra+9VTk1N69HPxcXGz9130cPJwsDA3+//b9vO1d93\nUz47ODznwMZbRjQ2OmO9u8rnUzc5WcO1rbG6zE9L0cC2sLi+Yz06V93Kv83rRzQzOF3v0+dZPTg/Tc29u7/vST9L38C5ub3Ob1F3wLqyu9NTPDY6U9vIy1FGMTQ9SO/T02dbNj1HZ7u7t7XDyl3JvrewvLvT9+Pju7/ByFVAMTtf587vQjkuMDdXw7y+UT42\nKz9Vy662u+NMPj69r6ututk1PENZuba4zEA1LTlTzLu87z8tNDNXwLixv8pMNUxXw7C5uNVdQ13KvLC3vchBSE9XzcrJ2U5EOknf69FTVz0yR0XnzN/dTlFGa8G8ubzTW0VM5760sb7bXz84S/fBt9tZOy42OVu+wL5ZSTAxP1nFusfGXVFH9721r7HAxW9b\n68q+vsfdU0hDXdvdzElJPjRDSufG599ORkBI18O4vNX3RD5OzbKws71vQTlD28S2wv8/NTA0XcnIuGdNMzE2Ot+/xr/vST9j076vsrm9X2//zrS4ur3VY0zf48y+b2M7Njs+493fb0BBMj1jZ8rTXUU7PEPXtrWxv8xfQ//Ovq7Cw29FNzhdz72472cyNTk8\n28jKzFtNOk/Vzr28xtFOTVPTvcC8z9XdTsnAwLnO0UhBTkvOvb++WU41OFFdv81vRjQxMT/LvbS/2082PVvGsa6xyHdDOWfKt6u8wVs3MzJJ0cC390svMzpFzcLNxz84NDvvy7yzvcJra93Js7a6xm9fTtnPy7j/Z0o5QkFjzd1vQzsxPl/XurTO2UhISlu4\nuLi441M8SN/GtLbIbz85M0fn1b/P/0g4Qz9Xxt/XXT81Plvrx73Mx1lf2+O7uL2909lf47i8tbfNX0NPW9u8ytlBOjExQmfbvfdROTAzPWO8vcX/YzhFd8qvrre9Vz44SsW7srfTUTU6PmPFyMdMPzYxQ2/LuMjIXUFMZ8m5ub7T/z9O48aztr3BU0dIW8a9\ntsH/Rz1Ea9G5vMtJNC4uPmfbvN1dPjI4SNe3urfMYz1JY9Gzrbe3a09GVcfBubv/RDU4OknVb+tbPjw3SlVv0Vt3TE3X0bu4vcDV3XfPu723xdlvRlv30bzP50s6LzlN78zD72c6PD1jt7S2ueNKOUt3xrW3xOtGQT9vycm95048OklnzrzP204/OD5Nb9Hf\na009R0zvvLu+zfdLTXe/t7C2we9ZX+u8r7O3zko4O05nz8TdTDo0MD9j18bXZz4yPEDnt7q6xWtKS2PNvrbAxk1JUVnNwsXHUUI5PExd2e9vTDxCR2/KvrzV3V1J/9PBusfPX1Vn38O4uL7PYz5M/864t73GTT07S/fv2VVGODI1PP/M0c5XRj1Da8u9t8bG\n/1/nxrq4s7nL60hf587B92NCNTk6Tevj40Q+MzVFWcK8xNFbTk/Zt7WwuMpXRU73xLS3ve9NNjdN98++32s7NzU73b29uMX/P1Fd27i4wsxIQj9bzsO8v+dGOkZJ48bFxdljTUTr18/XV006OT9H78vPZ01FQE/dx7u/w99Pa9/DsLO1u8NrWdPBvLfB00Q7\nNjxb5+PdSjsvND5M78zZ601BP2vNvbW6ye9HWV/KvL2/ylVEPk3rycf/WTo1PEL/x8jZW0tAS9PHvLjE/0lAR92+tLW+yFtDVefDtre7yV1CQuO9u7i/ZzUxMjZI3+/vSjkyNT9f0cDO2VdJU+fHuba3vcfv08K7t7vC00lFQ0vf1+NRQDUxOEVV193/RDw8\nQuu8urW6yF1O98/AtLm+z19FWf/TxMHZazs9P0vj0c/RWUxGWdnHvMDN40dFT9/Mx8bdW0tFXdXFxNXjW0VJWca7t7/jXz09TVnV21VFOjQ4P//jz9XjRT5Da9G6uba9y+fdx7q3rbO81WtOW9nNz8pdSTk7PENRV05dRTw+Q1Pn08vV0f/n18nEyszN729v\n18/T3+tvSkVMTWtvX1NLSUZT3efT19frW2drd9Xbz8nK7+fXys7BysfDytPV0c/RxMPAydHdU01JQEU/Pz9BRD89PURTU11jb+/349XdyMa5tbq9wcLFz8DCyMnnb1lTQ0NVTU5KQTw6PUVHXVljb+Pnb9fCyb/CxMrR1+vRydHL1dXZb3dXWV1j519bU1lv\nb93X48r/d+Pj/2v/b2ffX2fv59vr1+9n3d/b19vR2dHK2cjOz9//d01FPjtBQEpLSEZCR0tMWVnvydHV187Hwru6uLW7vsHGxc/GzNfT711TTVNMT0Y9REVGQ0RMSllnd9/by9HRyNfOz9vN29PT29n/3et3d1FZU01MSllRTf9dW11j/2vr//fdZ19n2dHd\nyMvNxdPMzcS8x8PD0cvNx8fFvs3ZW0hHQkRCPkI/Pjs4RkZPT09ZV29r2cfNx769vcC6vL69v8HE0e9r42dTU1NMQ0VAPD5CREVHSUdbZ2/r08nGyMzLycnTz9HLxtHVzNn36+dvX///W2djXfd3a2vb0e/39+dnX1tVa/djZ+/3Z+/V2dnLy8/Z39XPyc/V\n18mzuetfPzM2O0rX50hBMS42PPfDz9l3PztH1butrbW8zv/fw6+ur7rTU0BHW8q9yvdMOC82RWfXa01FNzRDW8O0ucHfTEdTyLe1uMf/PTtT57m2xGM+MC8668G3yVM2LTI967qtusx3NDVIY7+wvcjXR073u6+ts85vOzpfuaurrsFDMS40Uc3O51U4MTA1\nSGdjX0Q6Ok/VvK61zNFDQdfArqeossZVO0V3yb3Rd0w6NDpN1dXvPzctLDVdtrK7yE8+PEHRvK+0vsxTT2PRu73M01E6R3fZvLfdZ0gzOkvZu7O621c5Ok5fy8X/VUc+ScyzsLXOTz86P8ivqaq1008+OUTjwchvRjIyODhOyFdDOiwtNkrGr67Cz0A6Sve1\nqaissMN348nEu8FnW00+U8nBwvc5MCsqM0fHurzHUT5DROu8uL7Nd0vnyr6vts9ONS00RsmxrsNbNSssNkfTusDM2UdBb+PNyW9TRT9Vw7Kur73RTEBHb7yurrK4329vY8/F21NFOThHX93PUTcwKis4Ucq1utlfPzZH276vr7e7w9nIuLK1w+tHODhGzbS2\nv1cxKSksO+fEws1TPDxFU8m+ydNfTnfEuLGxw/9INT1b2bSuvs9bOTY9U9XF1fdZUVPZvrzHVzw0MjnrtK6wv103Mzpbuq6stb7dTWvRw7e4z2c6OEdV073dSDImJjA6a7u7zlc7NjhG0bu7vr/DxLqvrK28/0tGS+e2ra69XzssKzQ/3cPPd0g3PE33ysrj\nd0Y8d8O1q628WzgtMkPMsay02z80MDZBX9l3U0tFSd+/vMVvPzg3P+e6ra+8y0U5Pk/CsrC0ut/318W8t77TVz08X8C6t79KLyYlKzrZvrrVSzoyN0Xvv77P52/rybmsqrS/XT0+T8qvrbDBTjEtLzxv1d3vRjg5P1Pv32dNPzxHzravrrzjRTY9Wc61rrrI\n40FFSWfKzfdTPj5P17m0xO9AMi41TLyvsLz/OjMzQ9O+t7jA22vZwry3ucjdTUnnv7ivu2c9LCovM0XZ3VtJODY5QUVRr2tOUWfOtKqqtMlbR0fjta2rsL5NPDc/d8/L31tENTtT783MX0k3M0X3va+ss81DNjtN37qyuM1bRkRKXdvjT0E5OkNfxrvEZz04\nNTtrxLa5w89JPkdXzb3Bxs9r68+5tLS+yls+Tdu4rq2xy0AtLTI+d9HRWz01NTtEY8zrTEM8RefDsa62wv9ISvfDr62yuddGPUJrz9fbXz07P1Hn2WdLPi8vO++/trXCZ0A6R2/RubXA011K99XKu8FbRzw+U9u7t7/fPzQyOFe+tLjHWTs2OUnOxsbKX0hP\n4762tLvHW0RNyLavrLHDbzk5QEVn029LOzE1O0hV/1k+Nzg9VcO0tr7bR0JL57asrLC961FNZ8i9vMjvSTlBXdnAy2dMNC44Rte4srnMRzlCVdu7t73MXUhR48/Exe9DODc+Z8S/x1U7NTM7W8y8vMjnRj5FWcm/zttfQ03bwba1vcdXPkrnvq6qrbjfPDxM\n/87BxWdANzQ7RVfdY0M5NTpXzL23xGdJP0Vnx7SytbrRX13/yL3Dze9KQUvrxsXTW0AvLTdO0b28y107NjtZ0b+4xedPSG/LxLq4zl9APUZvv7i3v1E2MTM5yLy7wttPQUJJ48zR31c9QVPXvLjB1WNIQWvAuK6vtL1nS2Pjyb6/0088OD9TZ19VQzMuMjlX\nw7m81UY1Nj9vu7SzutVnW+fKvba/yutDRm/Nu7rMVT80NkNdxrzGz2M/Q1Hr0cLH23dPXdHCwsfPXT8+Rl/XzcDKUT82NjxT483Ob1FHUf/Xw89vXUVDT+u+uL7Haz89R+fCtrO1u9Hn58zJycLJ71NPW3f342NEOTc3PVF31cnTa0pIRkrn1c3Gys7Oy8XC\nytXbb11308bBydfrSTw9TFNZX2v3WU9XX11VXVtZW1fXw8fNy87jW1vv38/Ry8XN519VTUpMUVVfd9vX5+fnXVFbS09r79/V2dvZ71dfb3ff2ce+vr+6vcXR1+vn793OyONfWU0+OTk/RUdTW2dfY2tbV1tXY/f33cjEycjJ09nva+fVzsvKzMzbY1tMTFtn\nZ+vb4+ff92vv//9vb+/b08/TzuNvW1dfa2v31+93Z1tTT0xJSktKV//f3dvn43dXX11d69HT09tvb/9fXffr39PTx8G/wcHCx9Pn/+fX2dfN62NbRj49PkVVY11v929vZ1tvb1lf49XOys/LxtHf3+Pv19Xdzs/d29t3V01JS01NW9v/d+drVVNKT2vn79fN\n2d3f7+fj/+fb3+fZ29nX3W9jTEVKT1fv3ffj929jZ11nZ2/r5/fv29vj42tn92/jzsHCv7y/xsvO0dPV19njb2NdX1VGP0FCQkVNWXfZ4+tnTExVX+fTzc3V/2t338O/yNv/UU9ryL68zWNJP0RZ18bDy9tVTFPbxr3G3WdCQ093xb7P71FAPUVdzcDF2Vc+\nOj1N387L71dIP0vVyL/C2VlNT0PVzNXJX29MTNt3wczOy1vT19O5urfF/1k6TePOtrzPPjY1LkfbwLfP20E6Pz/NwL6+XW89Pm/3uri/wEdRP0zAvbe711kyPT//vsnD2Uw/NU5Zyr/bzEtCW0/NysfMVV8/S9PjwcfT20pXS1HN681rTU0+a+vOv3fnSENL\nSsu9vsBXXTk8TPe5uL7OV2NF58S7srfAyUdLRv/Au73XXTsvPkBnys7VZ0k+PE9rzcbR61NNY1vZ2d3vX19d58nNy9P/WU933cvAzN9fTUxrzcG9wv9rS0lb3ca1wNNNQjM4SdXAt8pbPDo3Q9/FxMFrQDc+Tt3Nw83vU0dI983CwsTXTkdGRHfNzNXfXVf3\n18vCyNvnY+PJwry9xGtTQEFMz8vE2Wc/Pz1V0b7DzF9VP0JXz7660W8/Oz1N07u4vs1RPUNJ47vEw8lJQD1R69XC53dPRFNrycHLyFdRS0X/78nKd/dOUUZr1dXOX09HTPfMwb7V/0M7Pk/Lubm82U86Oj9vvL3I209DPVHRvbS7yVNLS2/EuLa0yu8+QEVX\n3cbO01lEPEdj39HR/2NPW2/Ryc//T0FCSXfXys/jS0RHV+PDw8v3V0VO2726tMTfS0E+58WwtrrRWTk9Qt/Bu89rQDk4QGfNxctdOj5BR9m8vb/dRjg+UdnAu8HJ/1FEWffV0+tnVUpjb9fI129RTVP3yr+9w833SVv/zb7AxetMQkJjx8LB1f8+OUFfybO5\nwl9FNDdC78u4xuNIRD1NY8zFxOtTQVFrz73ByNNLRUNf0cXBy9dXU1Vdzs7R91NOTFvn1ct3Uz49RF3Pv8XGY1M/RWfVyL/MzUtISF/NwMXnZ0M5R0zRubzE70o9PGfIu7S5zFVOTE/Vx8S/32NGTWfvzcjna05LTG/MxcjXb1FHTU1v22ddTENKUf/Rz91R\nTT9I58a6t77OW1NN47y6uMzIV0VPW9O+vsLvUz48Stu/v89rPzU3OUnXzMXTVT5ATFvOwszPa1NPd8zIx85dTUdFT9vHzM5rTENIW9/IvMvOb05n387AxcTvW01X18K9wM3vQkFDb8LAw8b/ST5JX9/Gxt1KPz4+XdXIv91XPT1HSdO7xMHZUT9O68+9usbM\nW01NX8rOyspdV0ZHZ9/IzedMPz5EVePfze9rSkn339HKzttTT1V3x72+0fdNPEVT/77Cy2tLPjxP08u8wc9VTlVfzL7Fv+NXQ0xvzsG7x8tjSkJd1c7ByNn/Sk9X/8zr3Vs/QkZNZ9/RX0w9PElrzcvJyGNMTV/Jv7i6wNFvW/fPu7y93WNEPkpd37vP2Uw9\nNDdHd9/I6088RUVryMXMxmtTRmvXwr290f9NTUvf08/O/05GQU5T3c/fd1dKb+PKx8Tf90lNX8rGvsPBd1VLWee8v73Pd0RJUd/BusXjS0E5RGPXycXrRDs7P2PVw8TbXUVBT1vPvcbF2Wdjd8zExcLvd0xKb9vO23dvQERJV+vn319HPjxR78vEzNVRRktj\nwcG8wdPrS0Vn977Aw9tNPj9D/+u/yd9NSENO2cHBvNVbQkdT3by7ychfT0hjzsq9vczPSFNr38LKxcpPS0FVX2/jXVFAOkVHb+fT2VVKR03OzcHKy3dbVd3Ds7e2x+NTSFvRyrfE20M9Nj5d69HJY0s3OTpF68/J2UE9PkNExri6u8Lb29vEvby6xM93T1v3\n4+t3Z0VFSFf359l3WU1FTuvXyszRa0hGV9vEwcPL209MWeu/vb/Ld0ZGUWvZv8fvSj05PU3b18jfWUU+P1njxc3K51tLY+PGvLm/xmtfY9vLz8rGb1VFS1Nv//d3T0BJSFNb/+9XTFFX0c7JyszjX1P/17+/w9PnW01Rb+vG1/dRRkNHV9vZydH/V1fdY2Pd\n68jXb1lXb/ffzc3AztfV4+fvzMjMxdXT92NdV+NnTndOTUJDRURRUW/XW11OW19d18/EvcrJ29fTzb+/ur7P219XV0/rb//3Skc9PUFMa09bY0xIPlVn38DNxcd3X2Pf08a6wcTRb/9fb2//zF9jVUNNSVNfb+tb/19Xa1/n3dnM3dHfa//vzs/Tyc/Jzd/X\n18zbz8jZ0d3vd2dnV1ldSlFXTExKTVFfWU1jZ2N3b9/b1dHRyM7XzMrHxsrK1dvn/+N3Y11dXU5PTklMS0tJS0xGT11bXf/X1c/P49Pb49nOyMvLzNPX42NvXf937/9jW1FPWVNjd9vna3djV19r59XO2+//d2Pj08XJxcfT19ffzszFys3V629ZV1tOUUhF\nR0FCQ0RRSldPUVdv39ndzdHOy8XDw72/xL/Ex83NytnX91VTSUpFU1dKR0c+OztT5+NrUUpJSuvCub3K12td58W6t7bE11lHWe/Rw9f/Qzw6PVfV2d1bRTxBS2/GwMrbWUdIU82/urzRb05Xb8a5tbrLd1NK59W/usfnRTg7PUzbzutNPjc4Pk3OxMfdTktL\nV8i6tr7E42vny8K7v8TvX0tJZ9/Z21VEOjk/Sm/d/0g+OzxVzbq5xndTOv/bua21t29JOjvXxq+zwlU0NDJT37m10Us0MzJPzL2122M7OD5Zvbmw0f9MM05dua6srd9vOD/jvK2xsV0+Ly07U77CzEYwMCo6Ssq6w908QjxTzbustrXbWW9Ovrasr8DRP1E+\nT9nJy11LMjQ5OElM50tXSTpMSevfxMfXw13M0c7Hy7/NvsbRxWPjVetv19dbaz5APkJV68Vv20s6QjZMTM+81b9HTz1E0cGutLrZSV1DxLusrbnNPT86Y8e7s99nNy4uOWfVuOtRQCs4Ndm6ra/v9zU6XcSuraq/0z81S+u0srTRPjwqNjz3vcHdNjQrL0Bn\ntLu3/z5ANWvKr623vD9XP0zGsq24vj88STvZz7jJ0WMxQDRCa8rD79E4Qkc71dm80c9rPe9IzMm8u8u+487Pz7/Iu+PH0Vt3RVk/U0w/3zpKPjw8NV9CxMXdy0z/RtnOuK64td3f/++8wa66vtU9PTNKU8jKUVkuMiwyW+u613c9Lzs5wL+vsMT3PUJJvrCu\nqr/NQjhDS7m2r79LOCs3N9HIvcE+PjEyP+e5wrhNSEU0Tm+5u7jIUWtAb9e5sLW032NTR9XNt8jKXztENktMb91KWTU9P0X348Nb0/9P2d2/wbXKy7/vxcu/xMbGTtdNU11NV0BTN0trPltCTj9GS03M2cfbd2tL2WO8uLq73+dHZ9/Hsbu/d04+PF9jv8LV\nSDg4L19VyLvRYzs4M1fNwrDGzU08PT+9u6yuwdlBTVG9trSw2003MjlPy93ATTk0LDY808q9z0tHOE1dvLGzstPnV1/FuK2ztddNU0Fn68TTZ0IzODQ/S2fvSUxNQkpN49W/99//RufryMi5vd3DX+fRzcnRyE/P609jU2NJYztd401rS1NDT0hDydXO019V\nSutLwr3Dvtv/Su/RvrCyuM/vRkXrY76+0U08Ni5HQ9/E/2s6NjE93cyyusZdR0lOvLasrL3ZS0pLxby2sd1LNzEwQv/nv11AMy0yNdvHubtdTTpBTMC2t7DP411M78a2urfXTVVDY+vDx81bOj46Rk3Zy2d3PD5DQHfnvtfd/0dnUdXOv73OwN/ZzMm+vrjX\nwc9ba0xfSnc/RF08Rj49OkRKPNV3/9lId13L57SvubXEyPfOy8mvtr3ZVz87VUnM1V1RNDArND5Xx9v3QDg2O9/JsrK9201OTMG6r6q5yldDQOvEvrLMd0E2Nznj18DJSz4vNTr3z8++Tkg9PE3dvsi641NVR93FtrK0xF3rY8/DubrM0Ts6PDtP/8dfSjgv\nOjhP58XN73dCWf/LvLWzxb/f/8rGvLy439v/SVlNWU1bRDpKOD9GQUVGVTrd1/fN79lj0WPft8G7x8vj4+d3u8LAw2NMRVlOyMTV3UQ8Mz5Ga8Xb10U7OTpbWby9yudHQ0PRy7etvL7vX1Pvu7ivuNdHOTk9a1/T3UU7LzE0Xf/vxU9MQkVjwra2sMPT2f/I\nvrGxsbljY0pT58HK4281MTMzPE/nTUs3Lzw5V+u/w8/rS2/bx720tMK91ePMz8jJwN1rb05nW19r309FZ0dNTUtPV189UW9R42trVf9KV8nZyc7R39XP2be7u7nG3XfjVcrG7+tKQTY+PT1vS1dEPDo+U1PCxsfE92fvyce3srm7y9vrz8PIvcXZTD8+PUk+\nTE5DRzg5O01OT81n73ddd+PK27y9zMjTy8vDzse749fjb2/b12PJX01ZSUZFY0x3W0VVRUlHV2930Wfv91tv3cjOvrzHvszVzcO9w7zH02dHQkdRRFdPRUM6ODlIP07bW+9jX2PRyM63u73AxsjJvsO4tr/C2+trZ09Lb0lIPDk4OD44RkdFTUZOTln338rR\nycjMysvDx76+v73FztXZ72vj59vva19jVUdRSlVVT1tTU0lPU0tfVV3j72dX/1/r39HGvr7IxMfLwcO/vb7T/1NGS0ZOVVdPPD85OUFFVXfrd1lbVXfbyL27vcfM08/Cwb62uMfO/1VjWV1jb0Q6OzU6PERTV11GSUpJZ+vMx8jT49vrzcTBvb2+zdXX3c/V\nztXZa09RS1VVY19VTUNJQ0hXXWdrd0hMV1H349PLysrn1dHNw766vb7L1ePr3f93Z11FPT48QENJU01TRklGT2Pvx8bGyNHV3cfCvbm6usXGzM7KysTLz19MQT09PEJAREM8PTk/QU3/d+Nj7+//09PHwcLHy8XKwcXFvsbXd/dd7/f32fdnR0hDQVVT/3dZ\nTUNNRVljZ9n/b1dVVWvOyr/BxcfMycu/v7/AwL/Xa2dBOj5NX19AOzcyO0Bbzs/ZUUxDTtvAtLW703dZZ8e3rK63b1VKPNnHvrjnQy0rKzJP58PjSD4tNjpVvLi2xFNJPU/Rua6vtstd613Lv8K42edJPU5K3dffZz9HOENTU89n/1lGW0tb09fO3f/nd8rH\nwb7Nxt/Kv825x85nQUo6TFtd70M/NTM+P+vL1eNJTEdMzMC4s8PJX2fNybe0srvP00jjyMi8ytdHOzkwPEVRWUE9NDc/Sffb1+9TWV9vx8LIvdHTa+PDv7a0v91TWUjfyMa+2V9ANjs+Y8vJ00s9NjY+/8a6xONAPkE+3by5scDMXVHZxrixtrzZd0BITl3j\na1tEOTs4PEhOWVVKS0xd99fK18vb08nIu729vt/O18e9vLq/00xBSEhbZ2NXPDg1MjpIXcrva0hAS0r3yL66x8hZ49PXvLm5us3fT2/Z283Ob1lISUdTW09fR0BEPV3v689nY0lJb/fFvsLLZ29N18S/srG7zk1OS//FxsfdRTovMjpMz8/3RDs8Mkfnzra/\nyPdX///Ct7Owu8Rfb9fLu7i6v/9fTUZfWV9bQjwyODo7S0hZTEVNR+fd2cV30e/vysu+u7vC2dP31crDwMbnZ0JGSl/O2d9fPj41O0ZryNfbS0NMP3fby73O0V9b29XDu7u4vszbzcbJxM1nY0JFSEZRRUxAOD04RV9f31dZQ1H/37y3urzb713bxLu1s77P\nT1VX2b68wutFPC42OkXj72NGODk1RWfKuMDXT0tfZ8S8uLXDzuNrz8m9u8LRTk5PS+ff22dJSTlCRURfT/dnQU1IY87Cv8/fTVFv2cW4vL7jb05dyry6t8r/Ojw8Ru/j61k8PC85PUXb09P3Rk9H78u9tLa/zNnM2cG9u7rEzM/dz9vKzl93Q0VKP0k9QTo4\nQDtNZ1XfUVtLTffNwbnCyV9vV928tra2yNFIU1Nrv8LI0Uo/NkBKX8/fX0A4PTlV38+/02tORGNvxLy9vdvf7+vEvri1wsZna1tV0d/fXz48NDpKTu9VTjs5PkJnx8O+zdtPV8u/uLO5v/9vW/e+u7u4zd89RkRJ7/93Wzs5MTs+TNvjb1NJU0znzca+y9Xr\na87OvbvCv+Pn2+vK08vZW11GTllV/05VRDtAQ0/r69Nrd05P39PHvsjIb2dZa8TCv7zO2Vdv/9nIzttnQT82QkdM/1tNQTo/QOPT08Pnb2P30de5tb2+3+/n2726trnO60pNd+vIy+dEODcxPFVX91lJNzdAS9PBxcP/Z0pP0cO+tLu9b29nd8a+vbzTYz9H\nT1fRzedZPTo1P0pj1+ddTUNVTtnNx77V3+NnzMrBvMPC0dvLzsHGy89PT0VCU09fSEo/Nz1BSWtf91VTSUR3ysC6vL3Z5+/jwby9t8nNY2vn48nH0dFMQTg/R0v3X0tCOT48TNnZzdtXU0dIXbirvb/P9+vfwLy+vNvrUUlv79XP31M9PjpBV1/db1dEOkhV\n68HEws5vVUjnyMC6u8ZXTl9XyL69vNlbQT5ISGPdd19CPTc8S07r3V9fRFVrd8XHvr7PytPKv8G7w8bXd87NxcfOzlNRS0VfU11jTEM1O0NGX/frX0tPP13f2cLHydNn52/Ovr68w85nXefjz8rV401IQ0BdU1trSEY8PUhj2d3T51NbWdfFwbvBxdNj3c/C\nuru6yv9XTmfn09N3WTo6PD1PW2/3RkA3PE93z8bI2Wd3Wc6/vLi8yd9b993Gur+/01tGS19j499fVzw6PEFfW3fnTEc/S2fbyMnJ3V9r98rDv7nBz29b49XKxszZU0tHSltf73dTSjpBSEvn29PdWU9Hb87JwsfL3e/v98nHysfN1/9Z2f/n2f9nR0NDSl1M\nVV9LRj5GTlnd/+fnXf/r08PAvMLG19vOzMHAwL7X5/9d3+fd42NOQUREQ05RVU5JSj1MVVfn/9/vb/f308vNx8fF19HO2c/Lzc/v/1tjY1VZWVVMREZDSk1JXV9nXVdja+PXz8rMysrIzNPFx8bGx8zPz9v35+9vXVlTS0xLREdLS0pKSUdIU1dfb+vd09nb\n0czKx8nIyM3Tz8/RysvP2evvb2NfVVVdU0lHTkxMTVFRWVtbXff/Z/ff3dnNz9POy83LzM/NztPf3+vn429bV1dNS05OUVlTUVVXW2f39+ff2+vr49vPy83Pz9Xd49vZ0c/X33dfTlNbVV1jW05HRkNITU9fX1lTVVlV3c/PycrM0dPRz8a/wsHGy9HR0ePP\n093rX1VNS01MZ19TT0pKR0lPVe9nZ/93b2vr09PLzM3L19vb1dHXztfd3W9dWVtTRlNOS0xISkhPXWff5/f3d/fv18zJw8nMyM7PzsnGysnP2dv/a2NvW1VbU01LSUlHS0tIW1NPWWdnWWvv79XRzsrP19/V0dXMyMjFztPb43df9/frb11VTVFLSVldX2NV\nT0xVW2/j6+vd3+d359HMyMfP12dV/8rCztdrXVtj3+dVS0E4QFnfxb7M60w5PUlnxrq5y99VTGfTyb/A32dvZ+/Fu8DdRDk4OkbrwLnJWT40NDdE28TK01lIUVfrwr3G1VdOZ9HBta+4zWNBSffPv7q/b01BO0dn69v/SURCQ1vbxcp3STs8QFPItbS5zE5G\nSU7RurrB0UxKVVvdwMhZQDQxPUrjwLzfUUQ2PVXjv7jEztVvZ9/LwMTV7+vrzb24vMXdQzs7PF/Hyc7XRzo8PkVr91tjRT5T283Bvt1PPTZD2761rbfPZz8/Tf/Ct77O71NKWWfn510+Pz9Dd769wM9KOTY5QtG7vLvGZ2t399fN2+v/U//Fvr293Uc8MzdM\n78S8xOdNPjxDV9nCwvdbWVfrxsPI1U9ASU/ZuK+xvm8+Ojo+/8m/w9lPQkVFS2dfVU9CRF/dysLKa008PVf/w7K2vMr3U13n08G+zufj69/KydNdPzg4PVvGu7rHVzo2OD13ycDDze9VX+PRxcjna0ZK682+tr7VSzYyOklnw73RVUM8PUljz8jd/+vv48vA\nxM5TRktX3bixsLnOVT9ASnfHwsbTVUZMUWPfZ09IOzpX18W6v99FNjI7Vcm3s7vZV0pKU//Nv8vf493bx8HG30U7OTtI67y4wONMOzc6SdvNycj3VW/f3czV62tLSFnEube0vl87MzpJ3cO4vetJPzxFT//Iz2dZXXfTxbzFZ0U7OkFdvrGxts5NPzxA68XC\nwtFZS05d//9dTD85PVPRwr/G/z82NUVn07q2xuNTTF/rz8HD0f9348y8t7zCVzo4OD/Zu7a70Ug5ODlM0cfEzWNRV1vXzs/nW0dFX8u+t7XG7z82PERdyrzF41E/QURHWf9bTFNj3cO6u7/jRj07Rtu6s7K5119MRW/Tx8HF41lPY//b1WtRQTU7U+fFu8DZ\nSDY3PEnrvrnE3VtOU1v/z8znY1/30765u8FjRT89R93GvsLXWUQ/QlXb69vfV0tv38/I2fdbPjtF2762srrZQzg9TG/DvLzTWUxIUVdv1W9JR0lV1cC6vNVVQD0/S8+9u7zOW05IT9vOzMnTX2/dzcrR71NANzlN3cjBwd9FNzZAUWPKwNV3V0pv5+PMzV9N\nT2vPvrW0vNdKQz9I3b27vMdXRkI+WdHP1ddbS1P/z8zZ611FPUfnyb+6vtlRPEBVXdvBxdtdTU5ZWWPvW0M/RE33xL27yFFBQkZfw7i4vddRS0ZZysDAw9drV2/XxL/P4109O0df0cC+yf8+OD1HW9HGzfdTTFlnZ93XXUlLTmvJv76+20xGR1PRwbzAz19L\nSEhX18/X31FHWW/Vw8n3WUA4Q13Ovrm8zk88Pkrvy769zWdPTv/v48/fTUZHSG/Rx8LOa0tDRV/TxMHD011RSEv319HNz2v/283ExMzfUT8/S93LwsLVTDw4Pktd08PbVUtEVevfzctjSkZJXc69u7vLU0JBRuu/ury+901HQ1fn2dPM/1Nb2cvJztdrQT1E\n683HvsPdVz9FX/ffyMfdW01X99vf2/dCOT5DW8rDxs9OPDw/Ucq6ur3TV0xKW9nNz87ZZ1fjyL+9wc/vSD5K983CvL/fRj5DTl3vzM1rTk5d29XV2WdAPkRV58bAwetHQT5K/8zBwsrfX1lf48vR91tOQ07bw7q9x9tFNztH787AwMlbPj9O993TxN9TS1XZ\nysfBxmNIPENX28y/v+9RRURJXdfOzddfVU7nz83ba1dGT2PPvbi7xOtHQEZj2cfByeNOR0tn6+vbd0pBPk3by8bJ51U+Oj9O3c3DwdNZTU1T99HLyN1vZ+vRyMfL41NFSFvTw8C9w9tfSU1da+PR0/dVXW/v3+vrZ05ITmfZz8zO60tCP0NVa+/j3WdXV2N3\n///f92dr78/GyM7T905GU3fZz8rDw91r/3ddWWPd1/fnzszv7+//Y1tZb93r59nP62tjV1NNTFdn9//n299rW11bWWPr28/N1d/dd1Vba3ff3dPP0ePd1etdU1VbV1Nd29/v4+drW1ddb+/3383T3d/3b1dXXWdrb/fj3dv/Z/djXWvn4+Pd393Z/2NfY2Nr\n7+PZ29PMz9vvY11bXV/v1dnZ1etdVU5VXWN3593nd2Nrd11VY29fXWNn693v6+trV1tv/+vb1czX//9nY2t32c7M087K19/f93dnZ2d3b2v/4/drY2Pr92f/7/f//2tva1NRVVtVX3dv7+fr92tbXf/d1dnZ19fvd+d3Z2/359vd08Xv20xVTUPRyMG+/9dH\nSVFOyMXJvf/XSFH/XdvIzNFNSjk/SErP0dHLU04+Rmdjz8fPzll3R2PbRNPn68lZzOfdxtnI2/fnTetR/9f/zf/n3T5rS1fT78HF18tPd0pOZ0/P09/RSW9KT+9TzNvjyVHjVWPV78PRa2c9TT9N/8yutdX/Mjo5Rrmvt8dnOi49S824ucTrPT07d8e/udFd\nPzhMW867x9tXPjpDd92/v8tHOUnr27jL02c/PD/fr7Ouw+c7NUB3uKq1vEI5LTFXzbyrzF80MTVLx7KyvFU7KTQ/Z7K0wMQ+My893ciuuc1XPUtNzLnIxlM+PD7Vxr2x71k9O1FjwLa/40U9N1m+xLDIbz4jNLusp66vzUUyLj1rwau7zDw0MTFrysmw/1c5\nM0VXx7TJxj48MEbKzbG7zdM4Skl3uMG9zk9APXf3xsBbUzs/WWu1uLnERT0wQM3GrrvOTTI1ON+6vbVfWT4xT+e9qr3GQzguO3fCr6/GzDM6P0i+u7m7V0I0Q2/dtsXdSzpEQdXBxLpnY0k632PMvWtvQT5FWcTKwFc+PzRN08ewwc1RNjU877a0rsTVPDdA\nXbmss7VnRDY5Z927r9FjNTI1RdG+sb9vSi9GQ1+5yMTjPj08Xd3HwGtdOkNvd7i6xMtHPzpOysW30fdBOExbxbfAxEg+N0LCw7i13VM2NDvbt7GvyWM/MErdyqq950M2MjRXzLy061EuOURVvLi8v0k9NEL3zbrAyt04SVHRvsPFXVNDRcbEvbrvWTY4QFe+\nu7jZUT00TtXIsb7HSzczOee4ubTXTS4vPF25rba5TkAzPWfXt7LNZzc8PnfDubfKX0U1T2vHtcbOVzg9O2vFvLnvXTw6Xe+6uczjPz4/Tr/BvNlGMi06Vc21ur5NOzA1/8W9rsnVPTY+Sb+tsbLjSzI8a8quqbzTODYyQdPBuLlnQDE9SNW8wsRjPz4599PF\nvndfOzhMTcW6wMlRRDxVyMO0w99FND9O57a6ue9DLi5TzLuuuso8NzQ7y7q4s9f3Nj5KXbuwvM5IPzlj08m3yXdEMT5B773Dwv9CODVZ27663e86OEpVwLy7yVNIOUfJwLK0wk87PEBvwb230Wc6NEpr07a9wVk9NDn/wb231VcyNTtJw7e8vk8/N0n3yrm2\nym88QUrbw76+11FAOFvnw7bHz1M5Pj/jwr2/b044Pl/Xu7vC40JAQVW7ubfBYzYtOU3jvL3BVz4xMU7dybbHzj04PUXRt7i87001TevNtK+7yD9BPl/Iv7m8Z0Y2Q0/Ov8bJWT1APuPNv73rXzs1SlfMvsDXTEA7SdvKt8HLZzpCVeu7vrvnTDMwSNnDt73I\nQTo4PtnBvLXVVzg9SvfAtb3FT0M5a86/tLjLXzU+Pm/CwL/RRjs2TVnIvNPfQDlDSszLwc1OQjk92826u8BdQEBF5768t83jQjdOd824wcJTPTU3b8O7tsn/MTc6Rsi7vb9OPTBBY867uMbrQEdFzL69uc9dQjdja8S5w8dZPD9J28+9xvdROD5b773Cwuc/\nPDxRwbuzuslBNj5M376/vWdJNDVNZ9m8z3c9OjtL3b2/wetIM0tf2bi0vslHQj3nwL23vN9HOk5fwbrDykw8Ozzfyr2701U7OEhVzsK+304+OEnnz7vBxU88Slvdurq311kzNEjvy7m/zj89OT/jw8K+50w3QU7bw7rE20c+Of/NwLe8yv89TVfHvcC+1UU6\nPl/nwcXbazo3P07Oyr3LTDs0OU3Mvr6+XUE/SOPDvbTH0UU+V+/JuL3GW0Y2Q1/Nwb7Pazk+Pk7LxszOSzszS1/Pv8TTUT1ETsK7u7fJXUM9Y9/Du8PRWz4+TtvKvc3rTTtDUffHxcTZSj4/UePLv7/HUURNZ9W/vcTjVz9CVd/Z0eNPQz4+WefN093/SD5J\nW+POytHvV0pN48rIxr/XXVdd48zBzcbOT01VU+/b087bb1FVZ/9rVe/rV1tbY1lVXffdd2vZ1d3j59/N1d/bz2dVWVdjZ2/f2+9dT1VTUW/Vztv3U19bU1nZzdXf4/9nWWPTx8jTzs7vXffd2c3P2+9fSEhOY2fr3W9dT0lNTVVVa+tnX1trY2/d38zL29PX\n09/f1d/K2dvR429bXedf6+dv91lPS1VbTG/db2tXVVFTX1fR09nT1d3vd9PTy8nX1+drVV3r69fR399dUU9R///f0e//X1NTWeN308vn4/9nb+/T28vM/9vn/2tj3e93W1VbUU9TU+tVV2ddZ1lbW1VnUWvfd9nb3ef/3+fNzdXJz9nvb9v/39PdzttvVWPv\nX+/d9/9TTk1Td2Pj1/dnV1lfX+fjzcjX09vZ/2/Z49/3Y+9nXVVn52tnd2v3Z19ba2NT53dv929vXV9vb9nR2cTJ3WP/2d/Ixs3O22tVV2tj9+fr91tMRk1XT2/3Z1tNTUxTX1/Rz+Pb3evn2c7RyszXztPd///jd9/b39tvX05NWV/d2V1NRkNHW+fbzmtT\nTkxj58y9v9HdSGNj27u8ue9dPzpVX8DCwNtCRDxMb8W/zd09QD1K48+6x85XREtO08a0wsxnPk9Cd8a5t9nvNkI/QNXKvN3jPDhIOmvny93j2T1XR03rzsPbv//d22PXa8bPx8b3y1tXR1HR3bvN21VBQzpn98i+13c+PjhR78a0xMJNRT1E0cCussJ3Ozo1\n79e4s89vMzo2VcK/ttddNzE6Ssy8tdN3TDFGRcK4sbNnWTM9d8ivsbB3UTcyXd+4trtfOjwuP1nKub/jODguOlvdtLq+S0E9Nd/Er662zztPPVXEtrG/yTs/RD7n27zP11c6SjhGXc/db9U7V0lI/9W/97/d99FfyefI1crG/9VIY11Zd//D69VdSFVF/1HL\nyufVSE89T9/NuMvFZ1NDQMvRtbvN1UJJPdnKxLnn/z06OUzNy7rrZ0ExOjjfzby9TU0vNj/jtrivze86NlPvsrKvu2dPMURTyLS2uWNJMjZIV7i9uu88Ni0/TL60usBATTtC58CvtLdbS009a2e9wMfOPUo6QVXZwt/MRE9NP2tZzW/ja0jrSd9v087dwuPL\n3d3L58lbzcrTy2/RW+dZU81f41VZSURbQNPnW1lDRTpdScq+78xTd0jry8yzxMPVXVdTysq5w9vrPEQ8/8rBuXdbMzQ2PtHRvM9bOTE9PsC8t7PR3TtJT9OytK/BXzg0Pkq8u7i+UTwuO0HJu7q6SkMzN0TXu7u2X0tIOm9rube3u0pXPkn/xrjCwk1NTENr\nd8bV21M+Tj5ZT+t3TFM7S0hb4+/HUd3vb9F3xse+zOvH98/V09Hb30vT3/fZ7+tRdz5r51X3UW9GU0tHyOPN1WNvW9fju7jDxGdVQlFjzL7O20tDOkBrz77L40c7OTrv576/4282OThdxLuvucpFQUNru7exttVCOT5Lwby4vV9CMzk8z8W/vU5EMTI4QMnH\nu8lTRzpLb728uLp3b1Fj3765vr9ZSkhLX9/BytFLP0U9UUzX52tnPExER2fTyOvRd+vT68jEucrN2Wf3UXd31+9r11tvT1VZV99P29dvXUldR/9r/8Pb1V1fVVvV0be7yt9TUUnd27m3zdtFQDhT3cy4zONHODQ6W3fBz2tONDU0W8q6ssPbQD4/77q3rrfK\nSD0/S8LDtbvjWTc7PmfMxb33TDc3PEzKyb3OU0Y8Tuu8uri592tLXevBvcXISUZARV1rwc/dVTtFP1Pvx8z3XzlBR0rnyL3T21NHd//NwLm/091XX/fd1cTHZ+tPU1VM7+/PX1NjRE9DSk9TV0/P62trW29329+7uMfJ3+dZ09nLucnN60s/SGtvv8nraz04\nNUZdz7/d/0A6N0Pvzbq7x/dLR07GwLe2ydFHPj1Vycm7xW9DNztFz83DvF9JOztH183LvWdMQkBTyL2+utdbUUz30bq7vslJSkJKd8a/ydFAPUA/TuvL3V9CNjs/TuPFyd9rR05j29G8uMjL62ff79fKvsvr31FjVV333+9Nd2dVWU1PZ1tFa9339///Z9tf\n977AwcjRZ2/3Z8bDz89vSD5HSv/K1dtnSDxASVnNyttjTDw/V1/GvMbIb0tEY8y+tLrI70Y/SdvOw73jV0I6QHfj18RvTDw3Om/j3cbfX0k/S2/Cw7u62+9VWePBvr2541tVTFPXycnKd0RDQEZv193fXUBAQUZL38/bz2dV///vzLzAycxv5+tf99PT99N3\nV1tFSP//VdnXX2NNR1n3VXfL5+9jS1nf39m+xM/R/2fj19m/vdnvY05PX2fny+tXUUxATUZO61dPTktASVlb39fv2dvvZ9/MzsbHx8jT69nV3d/V7+P3XW9vW09jX19dVVdjWUtVWV/r/+fN2+//2dnJxszDydt3/3dn49nT2WNNS0tJU2vn23dOTUtDTv/n\n393/W1NOXd3OyMHFzvdfW93OzcTD3VdOSlHv99/L50xJQ0NdW1ff/1dKRUZOa+/Jxc/3/2Nv18rGvL/T2+dn69XRxtH3X1tNV2Nr5+9dSEk/P1drd/fvX1NXTvfP0cjFx9Pj/+vP19PI0etfX1Nfd2Pf52NMT05ZX2P/3+tXV1dX93f/ys/X7933483RyMjN\n2dvvd+/f0c/fZ11bTVFZY/dfU0pMP0NLT2drd2tXVU//39fLz83d7+/Px87Gyc//b19r193d099rTU1MV1ld/2dfSUxMWfdv29Hbd2fd3cjLycLN42vr79vV18n3XU5VT093Z+PrV0dJTUhj3+fZX1VJTFd3zczEzNnrX1tn2c7BtLnZTEA8Re/Iu7/fQDk2\nO2vXwsH/STU1OkzJwrjJ7z8+SF2/trW4z09MV//Fu7q990c/R1nVxMjPTz83PExb0cz3WUA/Q2vZxL/N11VT/9XFvb3L/09PW9/Iys3nTkRAVV/b1dtfQkVCWdnPzudjQ0NT68e/vsvvZ1dd18XFvdnfZ0zOzs3N628+SUFEzNHNb0Q5LzhE673HzUc7Ojhf\nxLe0vstHPU5nurCyuW9ZNzxn57q2wc08OjI8/9G703c+Mjs/58O8utlXRT7/z7y1vcFTS1tRyMnCv2trQExdV8332V9ARkJv3dfRWVc/PVlrz8LP0V1NTU/Gwr271+NFSv/Mvb7G70lIO1Xj08rRXTo5Oj9f3c/NX0o9P1/jxr7JzVdZa//Hv7m7zudRa9nb\nx8rVZ05MT3f///dJQD8/Ud3R1W9VPT9Lb7u4u8TrXz9P3cm2usTdSTs+Vc6/uc9vPTY4Qu/CwL53QzU3SWvHvMXVTElEZ8nJurvP51Nr782+xMTdUUlP39nN1V9MPD1HSd3f428/OzpG59O9xtVPQ0ZPyru7t8zfTUdr18a5w9lNRz9O2d3MyGNOPEBGTd3v\n0eNLS0lj59HEzchv49HdwMvMyuN3WePH0cjdW0hDSmPdztvfRT88PPfPzsXjUTw8QGfBu7zG41U8TWfGtLm/2Uc9P1HLvbnB6zw3OkBdysvMWUQ3OUpb18TM705MSu/PyL7Hze9Z48vCvcHL71NOVe/GyM33Sjo9SFvNzdlnPTc0Qt3Fu7/TTD1AU8m6t7fO\nWUI/V9nGtr/PUT48Rl/Txb/3Uzo+RE3OzMrTSkk/Ue/VwsPOb1N378nBx8LTb19Z2dXLxe9nSEZXXdvr71dCPjhR73fN929LP0NKz7/GwtddR1Hrxry2vsdXSklXy8bFv/9OPEBNY8/T3VNAPjpRd+fH2eNPQ1vryLu9xdlrS1PZv7y7xfdFR0pfwsPCzE07\nNT9f18LJ0Ug8ODpb0ce+zmc/PEnvyre5u9NRPklr1b65wMtERUNM39fJzFVGOD1DV+Pj01tFSklv79nI3+djUdvPwsHFyOv//9vHycLP41lEUV/fzd3bW0U6PE1r3913XURFRV3PxMTE22dJVffNw77H12NRR2/Xz8fN51NCS073ztfdZ0ZGSWfV19PnX0dI\nY93DvsXLW1dRX8HAvrzZUT5HX9vCv8PvSzozRFvvydNvQzo6PlnIxr3LZz5ATWfHury9911OW8/EvrzJ50pJUXfXzMzjU0U9S1dr32tfSj1IVd/Tycrnb1NZ2cm/v8LOU1ld68bIw8dvSD9MY+PI0dVXQT4/X+ffyPddRUFMY9fHy8ffW0xvz8zBv8/dTU9b\n28bOzs1PS0JO/+Pjd1tDPEFI69Xf3VtNQkXr0cfByt1PUV/bv7m5vctbQFHv076/x+dHOztL49XF0Vs6ODo/98nKwutPQUFnz8O6v8ZrTEtj2cbCv9VjQkhZa8/Tz91HRUJR993R53dLP0tj18/MzGNZT1XMycO8x+tRU2fbwsXDzllJQFXr58zb/0c9O0NX\n4+PVb089SVf/y8fO01VPS+vGwr6/z/dNXefJxMnL901LQ2/b2dlvTz88R1Hn29tvT0lBUd/Jv8LF409Xa9G9vb3J90NEW9nKv8fXSj87Q/fPzsb/TT09Q2PdyszTWUc/Ue/OwL7G1VNXa9HDxL/Ea1FIVePNy9HnTT0/RF/v4+NVQzw7TffXyMzrT0ZHb8XC\nu7rJ909j3dG+v77Jb0ZJXdvdyc9vQUE/RWvj999XRT5JX+/XydHbVVljzcbHxsz/W0r/08zK0edXRUlR587O1XdOPUJX/9PO0WtJRERVzMjFy9VRTV3Xyb6/wdFjSUzv0czEz+9LRkJRd93n/1NHPUVKZ+Pf3+9LSlf32dXJy9XrY+fNx9HOye939//V1dXv\nb1lJS11ja1ljU0xIR1dnZ//34/9v59vRzMzJys/j3dvf1dvbz91rW2drU2fv7/9fX1FXU0pjd2dnd29TV2Nn4+Pf083T7+fT2dfVzcvX629v72Pf3+f/W1VNTEtJX11VT1FOTVljY9fj6+/j7+fXyc7JzM/T193f0czf1+frZ1lZWWNrV19TUU1VV1FXW1dv\nVWv/3dvd29Pd2evZz9HX39//a+f36+fj629nV1VvZ2tv62NZU1NZd/f/6+P/X19r99fRzcrP3+fn3+PV0dHb52trZ2dn6/9nX1VOUVFXV2NdU1tfW11n7/fj6+vb2dvX1c7Zz8/Z19XX29/j/+//XV9fWVdRU09ZVU5RUU9VV2v/4+Pf3d/n2c7KzMrM09nr\n99/Z2efj42dfW1trb2dbZ1dNU1tbX19vXV9dW3f36+vf2ePb29PNzs/X3d/3393n3ev/a11ZU1tdU1VTS05n62dfTUlMWf/XyNPj91Vr18vAvcTOb11r2czDwM/vTURNVXfPzudOQz4/TGvXz91RQkRJW8/Fv8jZXUxj59G/vcr3V0tP99nJw9dvR0FGTvfN\nzdNbRT5EV+vKyNtrSUVM98rDvMXvXVNb48K9vclnTEhNZ+vGxutbRD5GTf/T0fdGPj9Hd9/JzG9OP0V3yr23t8h3RkFf28u9t8f3Z1FOX2Nj909FRFFr683XWUg3Oz9M07q5v9NNRE1O3by5vsTjZ//Z2cnJZ1dCPU3XzMfA60M/NjtRb8/Ax3dNS0hO79XK\n1etjd9nMvrzFz1VHTVPrwru/0107PERCa9njY1VDQFdnY9HvTUxDQ+/Cvrq742tTRmPZxbu6wNn3WVXn79/dXUxNTVvPxc7nTDY2Oz5ryMbFx1NCV1ld2crPy9tjzsPJyMprU0E8W93Ov73LV0Q4OUlT38nNd/9jU/fva3dXRE9n476ztLvJSj4/R2vNvLy/\nzE5LSUhTXVlbTUNZ29nO0VNGPDVAWdfAtrjN90dHW/fTw7/Mz8vTy8bP710/PUNP38e8x+9LODQ3QV/Px8nTUVNfVf/P1dndX+fHvr65vu9MOztN78y+uc1jTDs9Q0tf3f9ja3fv19PnY0RCREz327e1u8VfTEpJ58XDvr7XW2dvW/9dT01AP0zZz8bH90U3\nMjlL98i4u9d3TUhTW9vDx8/Z29XNwcPH1U1ESUlrxL3Bx2c8Ojg8U+fr091RTFNRd/dja2dRWcu8u7m803c+PE1n0b25v9tNPkFFRm/fZ1dnX2/Ryc/bSj09QE3Ot7W4xVlKPz9j0cG9vMf/d2tdd1lPUUdBXc3HwsLnVzswOkZT172+1WdJRlVOa9HL49/X\nzsS8vsPdSEVESOu8t7rDY0Q8NjtM79/O1VtRX1Vnd1NdY0ZT3cO9t7nK60E+TO/Zv7m+3VlJS0pGUf9VT1NX/8/M091EPT1BT9u8ub3BY0pEQ2/HwL+902fr59/R911bRT5K487Ev9NRODA1Qk/fv7/P50pITERV3//32dnRvry/w2tPTExT3by6vL3vTEA7\nQWNnd8/rTFFfW/drTE9BPEvVw765vM5TPT9Z98+5tcXOX0hTT03j/1NRVVFZ3dHO1Us/QT5H28C/vsdnVUZCd9PVxr7T59fXz8zvZ2tHQFvRy8XB0e9CNj1HSu/FxdtrSEdOSl3v/1tjb/fOwb/Az2NVTUr3wLu7vs/3TT5BT1//1dlnX1FTa19RW1NBSXfb\nx73Bxt9HR1dv2b+5vsv3X29ZU2f3TU5PT//T0dXvQjw+PEnrwsHD2WNOQ0Zj1dPHw9XZ0dPJw93v3UdBT9vMv73M/z41O0ZLa8TG2W9IS09ETe9dVVlfd8zGxsh3T01MWdm8uLq802dMQ1Hb3+PO61FTY2/b90xOPjg+Y9XFv8PPTjw/W+/TurfAyndVb/9r\nz9V3XVlRX9/X1d1IPz08RtvHxsHOVUtFRG/Z287I63fb0crJ2d9nSUj/zsu/wNH3QDpHU2PTwdf/VUZNVU5361tMT0tZ08fIyXdKR0NKzrm6u7zdX0xFZ93Zz8rdT1tnd+NbV1E/Okvr28y/zt9NPUpd/8u6usbPd2/f/93O3VNZV1XfyMvTYz07OjpPysLF\nxOdRRTxL99vTwsRva9/VyMnZ1e9FTO/MyL2+zlc6PUdNX8vC0/dTSVdXUWvjTk5TU3fMyczbSkJCQlvPvL28wOtjTE3nzNXLyHdf59/X1W9bTTk8R3fbycbXXTw4QFF3zbvCy9N37/9Jwcvd//dv98/LzdFdRz87Pk7Xz8rH91FJRE13Z/fP22/j0czL0+fr\nT0hb08fDwMjVU0JFTllj18rb52dfY19TWVlTUVFb78zX3+dbSkVDS+fO0cO9zN/3b29dX93G1dvNz+dnTlVbTEtn92d37+/3WVFZV09Z7+PVycfGydXvZ11j993XyMfV52dVSEdIT19bWe/f719j/19RUWPvb+vMxcfV3dv/Y2Pf19nOx8XV/29jT09VX2v3\n39nZ/2tfTkxNUVld593V7293V0tOU1lbb9PKytPOzOdna+vr79XLxMzf4+9RS0xbWV1r7+dbU1dPTExVY2v348/KzsrN3/dvY2fv3czIz9XnV0tKSk1TXe/rd2v3Z1dXW2tjb/fX09XTz9fn7+vr//ff08/T0d33Z1lVV1db/93X2d3va1VNTE5Vd9/n3+Nj\nWVtXV11na3f3693Rz9PX3e9rX3fn49XKz9vrY09RVVNnd2//5+9nX1VTWVlj49/TzdXPzdv/9+t39+vr1df3d+t3WU9NTEtKU+vj5+P/U1NTVWvv387Kz9XV2+fZ29/b3+vf593X3etvW09PVVn35+PX2f9XV1VRUVn/4+vv3+NrW1NRV1Vf39XZ1c7V6+Pn\n69/r49vX393X1993Z11RTVFVW+vd4/dbTUlMVXfdzMnGy93r/+//99vP2e/j2/9rZ2dnU01OWVNRZ+vjd2drZ1Vbd+ff1c7Jye/dX19nWczIycb/909b/1nZ6/f3U9X3X1tNY0//1+vMTlVXRF1b3b/R301NRUNvzb6+09tFS0xOw7+/vv9bPUZV977CyGdF\nSTtP69W/4+9LPktI67++v9PfSElfZ8TFzMlfX0tK5//bY1tVQVNb991n/0lNUUnP0czJ/+dZX9vXwcPJ21tnY9/NxcR3XUM9SVXdusHPX0k7PEfvv7rO20hGREfjy8zOY1E+RV3dxL/M1VdNQF/Mz77G0dVVX01f22/X3//vW+v391lJTURV5+/EzN/vTlVP\nZ8jIv87rV0lT/8y8ydtIRz48V9PJu+NfPz08QmfGv7/X70tNVWfKyMrD5+9bd8/Tzev/WU9dVd3T691dZ19R53fd/1djS13f2cXV50dBQULvycm72eNKP0VO3b7DwOtvRktb/8HC1dtMVUhO0crByGtMPUZDY8vNxMzra0hjW//L48vZd+Nv09v/Y05bR13d\n/85nV09CVU1dzN/VX1lRTtvRw7vT3UhTWW+/ury+d1E7P0lrxb/K41dNPUdd67/R2/9IT0lfzM/F319GP05R3czZy2NnW0v3b+PT687v39Pjze9nU0xvY9HCy8lRTURFXWfRwePvSEhJX87Jv833XUFMV926wMTVTz86R1/OvcnZTkVDPlf328n/d05RZ3fR\nzNPTZ29Pd9HPwtPX2VNrW3fP/+dXX2NO2dXZ11FTQUt3/76+zuNKRD1R39O/yt9OP0lK38bMxmNZRUNfd8m4ysxXTD9Cb9G+uc7PTUpJT93f085nd0tX293V7+NjTndf1cXR0W9nVU7v79nba2tITVVX29/jb0xFQl/f0b3Hz1VNR0rjwr+6xuNMSk1dysHM\nzVVPQEhn48bI3e9BRkJb1c7EzutnSVdRd9fr2e9fd1nf49/vVWtMUdvjxsjdXU1XUf/JzMbdb0xKZ+vMwdXfSkpESd/NxsHfbz9FRU3MvsLA31lCSlf3xMXV2U1OSFf33c9nX0xFW1fdz9nZXWdjW9XVztfv31v/29nEz91fTFlMX8vKyONjPkBRTuPBystr\nVT9Gd+fGv9PfSk1JVc/Myc5rXUBMUV3Ly87ZVU9GZ+/bxNnd61lva9PR2dFdXV1X59fO12tnRktda8nKz+ddWUtd3dvF0+9KRk5R48/OzVtPPUFZXdfCzdNXTkFI38/Dvc/fWV9Td8bJy85vZ01fb9vN3+dTS09L99vn0W9rWVN3Y93d699VY3dn09nV/1VZ\nR1fb28bM3U1MU0hvzMvF2/9ITGdnzMTO0VtdR1HXz8nI3/9CS0VOz8rJyvdbR1tf78nV1eNVWVH/39vRb19KRltf29Pd3U1RVVPf383T5+NbZ+fjxc7RX1djU/fNycff70dFT073ydHRa1FARl33zcnb505TTWPPy8rTa1dAU1nfzM7TX01JRGdv28nd32tX\nX2PR0c7Lb3dfY9vOxs3Z/0lRUWPT089vY1FLX//Ry+PrS1FdY9PKzONbVT5MZ//Nzdl3T0g/T+PVxsvXX1lbWdXKzcvvZ09Z59fJyNXjS1FNX9/j2d1fX0tbW//V9+trTl1j3c7L11lbSEtv58vFzedKTENJ79nKy99ZSlNd58XLzfdjU0l3zsu/y9VfU09O\n39HVzXdnSVdfXdvX5+dVWVdv0dXO2V9RRVFf28vT21dLTEdn69fR/3dMT2/rx8XK51VZS1vTysHH0W9JTk9fzs7M2WdHRU9n58/b41NVTFPfzcrH419GT1Vvz8vX21dVR1dnZ9/vZ19NW1/bzNfZd1dTW+vNw8bP3V1XX//PyM3bZ05LT2vZz9HfUUpKV2/R\nyc7VX0tFTv/vzc3ra09ITGvd3dVvWU9TZ+vPx9PbX05VX9nJxcfdZ1FOXd/Iyc3nU0tJTffVztf/TUdKU/fPycvb/1dLV2vjysvRa1lOT1tr6+Pra1VbX11r/9/nd2dn9+vn39vj49/Z3dPf9+dnX/ff3+vvWVdVU13f1dXnb11XU1n31czd93dPT1lv39nd\nd19VTFNn3dfT1etrXVl349/by9nvb2trb/fj183bb/9fV1Vdb2/n93d3Z1tjd+/n09Hf92ddXW/n39Xbd2dRSkxRY/fT13drV05RW+fTydXf3/9dZ+PVzsnN0d1vXWP/7+fZ22dbU1FXZ3fr1e9rZ11XXXfr49Xn72tbV1lrd//d7+f3XV1f9+fr29/f73dn\nb+vv99Xd5//3d2fv9+/Z//d3Y1VVXV134+vn73dnXWt379fX3+/v/3fvd//n/3ddW1tfb11n72//d/9na+9v69vf2dvn7/fb393P2dfjd2NdX11d/2v3d2NXVV1da+/r2+v3a2N3a+vT29nrb1NTXV/v2dnd72dZWWv3383X3e9jX2t3993R3d//Y2dn9/9v\n6/frb1tZXWtfb93f3efn92/vd/fZ3dfd91lZX1/v11v/Rkg+SNHCusr/QjtDQsq5t7//UzpJWce4u7xbZ0E/a9u+xsdLPkY6Z9m+v9PbOUA6Q9e/t8TMQD9EPtvFucDPUThJPXfLv7vV3T9HSE/PzLzR2VdBX0zj0cbG3dlDU1lTY1/PY9HrV/dLV0zd58/B\n381MTE9X2d+9xs3jP0E9Tl/FvMjRPkA5QW/Et73FQjs9P9PHtLXCUzk5Rcm7tbDP7zc2OD/DurnBTTcwOUDMs7a8U0AzOUzItLK6U0U1MkrZubK3WTw7Lkvvu668xD8+ND3ju660yUE7OzzTvLO300g2PDd3y7y61185QD5byb+3zd1JQUxF0cW/yOtVO0hE\na9vVzP/rSk1RXfdvyevL12vnW+tbz9fTvdfN71dJV+vvws7nY0E/PFlvxsDX5z9DPVfdzLjG0UM+PkfPzbzC1WM8QUPbw7q5z2s6Pj5dvLm1x1U3NDxNvLa0v01BLzpDv7a1vUs/MDZH3bSzt9VENzVG57Ovtck/ODA9W72yu8o/OzU5Xdm1u8RMPT06d9e5\nuMPLRklFWcy+usfOSkhKR+fbyN/nT0JPSGdf5+dv21/vd9/Xa9lf3dHj32/rT/9d68XZ0/9nSExjY8PJz+NXTT9bV8+9zdFXTj5RX+e8y9NfRDxCZ2+9xM93Q0M+3c28tsvnQUNByFfXudVfQTY6SMXCtsJbSTQ9R868tbnvTjY8R8+0srDNTjo1R2u3tbnL\nQD4zPU3Tub/LPz45PlvXtr7C70FFQl3dusXK1z5LRVHdwbzXzkRHV03j3cXv22NJa2PV28/3a9tTb//r1///Sut3a99351FnSWPL48rO42tRVVHTys7La1VETUjnw9XMa04+TVHru83K/0k9Qf/duLfG1UdIPuvNv7PL40g7OU7VybfMY0U0Nkbfxra85002\nOz7TvLWx01c3NT53vLizx1FEND5TyLm5wEhCNT1O1by7vl9HPkBP2bq+vN1GSj9R77/DzNE+SUpN69G/3cpIR19R39fEd9/vQldLXe/Ra1PXT2v/a+Pr1U3d71/R79Pr12vnx+PN1ePra29Vz9Xj21lRRVdJb8j/3WNKP0Vfd7y/y9lLSj//68a50dlPQz5b\n0cq3yd1POzlH38q4vddbOTo868e4ss//Ozg9Z8S/s8NbSTU8SdG+uLtdTzc8SeO8ubjTTj07QVfDwr3TRkM6RlPBv8PJQ0pDSmfXvcrGS0ldV9nOu87M40djV+/ZxudZZz9VV13f19FHZ0ZK53fN0chXZ+NN3ePOz9NvTd9v59Xd13d3SGvjY9n/71NjWVnJ\n49vfZ1tM91vPxdvTXVNDXf/Zv9PTa0dCTffZvL/O40U/PmvVv7rOdz46OU7NzbrF7084O0bdyLu8/188PUrrv7q2xP9EQElvw725yVtEO0RRzMnFzkdHPD9P78HJxU9JS0r338HJy9tFVU5r08HI3eNFT1Vf28rGY29HRWdd1dPIb193Rvdv2c/V6073XWff\n99Xn509X22PZ29Xv72dPztPV0e9vTVdEY83jzOddR0pOV8bNyc9VS0JPXce9x8djTUZR68m7vstbRz5E792/vtX3Pjo6S93LvNnjRTw/S8zDuLzfTz0/Ts7CvLrjWUA+S93JxL13U0I9SlXLycHvTEs/T13PxMnJTktJS+/Ows3OWUtTT/fVxs/da0lbW+vT\nzMtra0dPW2ff3dFXWVVO72/f2dl3T3db59vZ0d3rTtvT083T0XdvSVXN0czb91NJRkXb29PZWU0/SEnVwMbLa1dJSVvXwcHF51tJQ19rxb/Iz0xBPEZv07/P01lCP0Xr08DC029FREXv08nB0e9ORUpv0dfG1eNdSFlf0dfLzv9vS19r6+Pj0WNfVU///9n/\n2+9bX1nr79vj5+9b///Xz9HN499VY2vv19fO/3dPS1tVd+/n71VOR1Nb/9nVzndvV13//9nOyeN3a1v/Z+PMzd9nX0xbVVnd62tZd1FTZ//R08vv/3dPa2vjz9F3zt9TX2dv19XP93dXVWNf393Z2W9fTVdXb+Pv12dfT1dnZ9/f1eNjY1V3b9/R189371/v\n393O0893a2db///f2dtvVVdNVVdv5+vjV1lTWWvvz87P229rV2/rzcfNz/93VVljZ/fn2/dTS0lVa9vX2dlbVU5Zd9vT1c5jX1db9+fR1dNvVVtV//fb0dvbVVtXX+vd1dvnVU5VV+/r19Pfb05ZVffn2c3b3VtbX2/n18zV2+dfZ1/v29PO5+9XW11f6+/f\nd2dXTFFTZ+/n4/f/V2Njd9fZ1d3bZ2d3b9vX19Xb91dbV2tvb9/r411VU1N3a+fd29NOY29TZ03ryM7D1ddMSVFI38PIvdV3STxJRme+xLzZVz06SUzVvMbBTlNJPuf/w7vT2z5KSVfIxr/Da+9DV//rv7/M00RXQE3Rz7/Oa1M8UUhvzNvRS1FGQdvvxsLj\nd0NLa2vEwcbTT1VDW87Tv8jjWTpIQFfEy7/fVUE7VVXNusnLR0c9Qu/GvLrTaz1AQ1fLvcHCa107RUxfyL/JzVNVPk1r48rn52NRX0v349vXd/fj/9tj5+9Zd2fnw9XI/2dLSmPfxbvKy0ZLPkD318G821s7Pz1Oz8jEw2NXPUld/8a/v8VXT0JT49e+xM9r\nSVFDb9nn0V1bRkzvd8/Xd19JT3fjyc/Md1NRRvfN077X60pDSFHVvsbCY1U6QlFdwcHG0UdEOkR307q80VtBSUNbxsm8zndRQVtR773Mv+NdTk93/8/I3dNPXVdT42v3d1d3UW/bb9ddU1NT29vKy+fbREtRWcLKxcZrUz1GWe+8w8lnS0Q7TefbvM3ZWURE\nRV3Ny7vb90dKXVnZx8/GU2dNT9lv285390tnY+vPd/9TTl9T18/VyllTSUbf48m9zt9KRkBVy8e9v99fPT9GX7u+usBbRDg9Udm2u8JrRD43SN/TucbbUT5CRF/CxrjJY0ZDUVXTvcvEWVNLSHfvz8p390ZMY1nT0+9vUVtVd9Xnz+tbV03v2dXE0dlbS0tT\nz8fLxvdfP0RRXcnCzM1RSD1HZ+O/wdn3RUlIW9XXwc7vd0RbWWvO18lvW/9V2+vn02frY2vT583r929KX1tnytnPd09CQVfX073L10xGQEfXwcO722s+P0hvwLrEw1FLO0Jj48O80d8/QDpG3c6/vfdZPURJd8TIw8tXT0BZ787Az9FTRltK48/TzVtdTkfv\nb9nP629GTVtVy83GyFlPP13Z37/KzmdJR0Frxsy+zedDQExOz77Kwl1TQkZdZ86+2dVJS0VKd/fMyu/3S2tna9Xv2dNb42ff4+PZW29bT9nnztNrXUFLXWPGzM/3UUU8VdnTv8nOUUlGQ9nEy73b60dFS03Tv8vGW1E9RGN3x77f60NIRVnO1cnKZ1FBWWvR\nw87NY0xTS9nTzMX3/01GZ2POx8rNUVNGR9/bwsXZWUBOTl3Jz8bbY0U+Wf/TwMnLUU1GSd3Lzr7d50hLU0/ZyNHLWVdETG9ry9X3d0hZTm/d69PnX11O6+/Xz//dVVPrb87X2+dTY1Nj0ePP729KRFld48fZzFldSEbr1dHB09VNUUhLzsnKw/9ZQEtZ98LD\n0dlNT0Fd39XDzudNQ05M38/VxmNbSUj/b87J19FTU1FT09nIy293SE/v78nT1V9LWUtrz9PH7/9CQmdb08XTzFVXQ03X3cvA1ddHUUhTzNPGxWtVP05Xb8TV0f9OST9nZ9fE3d9RSl9P1dfXx2dvZ1fjZ9Pb49VRa29d0XfVXVlvUd/T585j701N92fVztvR\nTltBStnjycXr/0VRS1/FzM3OY2c/X2PXws7NY0pXSNvd3cT/91FHZ1PZ2dvPU1NJStn/yMvv70VOa3fH08fvV1FCWd/TxNfXSEVPR+PL08X//0JFX1vVwszHXV1DSdvZyL/X50ZRT13L083NY1NBX2/nyc7ZY0tXSePX38jrY1lHX13dzuPTZ1FZTevrztN3\n705V/2fO29PVVV9TWdvfzNvjW0hfa2/R389bXVFG59vjx+fZT19ZXdfN185vZ0lb73fO0e/nSU9KW9Pr1dlXU0VTX9nI3ddnTFdM29HNw+/vVUhnb87LydNZU0hM79vHzNfvRExRV8zPyNNvSz9N/+PK1c1jU01Hd9vbx9fnT01VV+PN283rZ0pZ93fXz9/b\nTT1RyNXv2c5vd1Nna+/na91vV/9d32v332/f/1/Z/+dr999jd/dr32N3XWfrU3fdZ+dZd3fv51vv2WfjZ+Nv69v31+dr3Xfna/fXd+/vX+tfd2/j12d3/133W9/n699f9/dZ/2vb7+d3W3dnX+fv22d371drb2fX699v/29VZ+fv1+/fa3dnUevj99v352Nn\nW13r4+vX6+tXd29n4+fv1XdnU2drY+/f5+tja1d3X13d5+/vY3dbd3d30dvv4+/vXefv79fv6913b1v392vd7+/vZ3dd52t34//j/2/3Xe9nZ913//f//1vvd//b/+Pr/3dd5/9r3Xfr/29rW+dvd93/92tv92vja/ffY3d3/+f/5/dr62Nv39vb5+NbRlNX\n/+/n72/nWV//b9/f2/9j/1Nn7/fV2dfnY3dbY+Pn1c7Xd1t3V2fd69Pf92dZb1dj2/fX43dfXf9b/9133/f3b1v/WV/fb9/j629f/19n43fn9/f/b99fd99nb1ln08TJb1NNRFH3x7/L/0ZBREvTwb/Hb0w9P2PVwrvEb0xFPVnHxLzJa0o9RU7vvsPK70w+\nQFPfxL3N609GRlHLw8XHW1FIR2PTvb7dXT8+RWvGwr3dSUc8Ru/NvcHVVT5ARWPCvb7TVz48SG/Dur3MTT46PufFubjOUz09QFu9ur3NT0M6SPfPuL/fW0E9RGPGv7zKTz87PU/JvsXDZ0xTWe/Pw89VSD1H38y7uMhLODY4S9PFsrzfVz0/SV3JvcP/XU9J\n18TGxvdJPUBEU7m1u71fPDc5Rue5vMXPTEdHXd3Vyf9TSkNn18i5w/dAPDtH2cu6uO9fRz5JXc/KwdVJV0tPyr/EzV8+Oj9L1bW4v99COTlFZ7+6xdFMRkpVzsbG11dHO0rn07m4zW9ANTlK2cS0u9VdPz1Jb93OzltRTFHOvr6/3Uo8Oz9vvLu4vldJPT5O\n98rIx+dKWWNvxsTXX0Y4PvfRvbC7zEs4NTx3Vb22xd1LQkpX39fTa1FLRuO+v7zFWUQ6N0Tnv7221V9IQERP3dnX209b59nHxMt3QTo6Rtm/srTBVTs3N0vbyrvJ401DT3fTzc5rR0c+V766ubnbSjg2O0/AvLW330c+QElrzM3Pa01TY9XGx8lbPzo8TeO6\ns7rIU0E8QE//xMLb3VFO79nOz+NRPz9AVb24t7vfPjQ2Pf+9urbDWz89SGPXycz3Q0JNa8W8vsVVPjU8TWu9s73GVzw5PlHfvsfV51FOW9/O2d9RR0RI3by5uMpbPDc7T8i/u7nrV0VCW/fb09tOP01v0b67w2tENTRGZ8ixsrrjQTc3Q3fJvcXXWUxX99HL\n3WtGQTxNxby5t89RPTU4Wc/GuL3ZXUlJUWfn399OR2fjzL7AxVk8NTdL37y0t8RRPjw9U9vHxdV3S03r08jG40lCPDt3wLmzuc1HNjQ6b8K5tLvjS0RLWf/V2etKSVf3ycXGzUo5Nz5R0763vtdNP0BIVdvB0dvrTGfbzsnTY0Y/PUvXubm5wl86NDhLzcC8\nuNlPRURda+fP10tATF3Tv76/3Uo2N0RfzbS4vs5KPT5GXc/K29tjU2PdzNXnVUE9PFHFvbq601M9OUXnzse6x2tZSWPd3dvVZ0JBa+PIu7zJbz0zO0dnv7S5yFM/PT5T2cnF129LU//TxcvfWUU8PPfCwbm/21k8OEr318e6yGtXUWfr59/fXz5Ka9vDvr/M\nSTk4P1fVubi+3UdDP0r31cfj519Hb9XMw81dSD43Rd2+vbe97z83PEzTz7652VlKUffr2dfbTkJMZ8++v77fQjs8SFnVub7E40lFSUxnzdV3601O2czHyd9RQj08TsG9u7zRSTo4QuvLyb3IZ01Ga93f089nQUFT/8K/wcRZPTY+S2O/ub/FY0RCSFfjx9Xj\n71Fb38vHze9MQT1B28K+u8l3Pzk+X9HVxb53XUlR29PX1dlVPU9n2769wc5JNzpDW8u4u8JrRz9DWefIx9//Rkpn18XF1WNJPzpZyMe8vtldPzpHb9fOvcpdUVNr39fZ2f8+RmPrxb+/yFU8OEBX17y8wttIRENP79PI6+9XQmPXzcTK/0lAOEfJw8C5xu9B\nOj5L1dnCveNPSlHr59PZ301BS2PVv8G/40Y9PU1jx7q/xmNLSU9378vd9+9NU9fKw8rbX0M8PE7Gv7y9zE86OkBr087AyV9JRmPd187P6z09TWfHvb/Ab0Y2PU5dxbnAxmdGQUhv38TL519HS//PxMrNV0M7PWPOx76/0Uk+QUz399fA53dba9nb3fd3Vz9R\n69fBvsLVTjw6TmfVvsLLd0lHSe/bzs3vWUVFb8m9wMz/RTw5SsnAvLrL/0A8QWvZ0cHRX01Nd9/VytfnRD1MX9vBvb5vUT09SWfMwsXRWVNNV+vd2etjTUVZ1cbDy9FvTD1B59PRw8PPU0VPY+sf\n--seconddivider--\n\n--foobarbazola\nMIME-Version: 1.0\nContent-type: application/atomicmail\n\n; This is a a ATOMICMAIL message that contains a survey.\n; If you are reading this after receiving it in the mail, that\n; means that your mail-reading program needs to be upgraded\n; to know how to run ATOMICMAIL programs.\n;\n; If you are reading this in the hope of editing your survey\n; before sending it, you should start at the END of the message,\n; which is where you'll find the parts you're likely to want \n; to try to edit.\n\n(setq newline \"¥n\")\n\n(setq global-survey-qid-ctr 0)\n(setq total-questions 0)\n\n(defun nextctr ()\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1)))\n\n; USAGE:  (survey-multiple-choice \"Which is best? \" '(\"bar\" \"baz\" \"ola\"))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" of \"\n   (int-to-str total-questions)\n   \": \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (car\n    (car\n     (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n   newline))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (getstring (informative prompt) \"\")\n   newline))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (int-to-str (getinteger (informative prompt)))\n   newline))\n\n; USAGE:  (survey-boolean-answer \"Do you think I'm sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (strcat\n   (int-to-str (nextctr))\n   \" (\"\n   prompt\n   \"): \"\n   (cond ((getboolean (informative prompt)) \"Yes\")\n\t (T \"No\"))\n   newline))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun surv-pkg\t(q)\n  (list\t(strcat\t(int-to-str (nextctr))\n\t\t\" (\"\n\t\tq\n\t\t\"): \")\n\t(informative q) \"\" \"s\"))\n\n(defun surv-pkg2 (q)\n  (list\t(strcat\t(int-to-str (nextctr))\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (sexp-to-str (car (cdr (car lis))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n; USAGE: (survey-simple-form \"preface\" '(\"foo\" \"bar\" \"baz\")))\n\n(defun survey-simple-form (preface qlist)\n  (formatfillinlist\n   (fillindata\n    (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n\t  (mapcar 'surv-pkg qlist)))))\n\n; USAGE: (survey-complex-form \"preface\" '('(\"foo\" \"i\") '(\"bar\" \"s\")  '(\"baz\" \"b\")))\n\n(defun survey-complex-form (preface qlist)\n  (formatfillinlist\n   (fillindata\n    (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n\t  (mapcar 'surv-pkg2 qlist)))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval\n\t(cons\n\t (car (car qlist))\n\t (cdr (car qlist))))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((eq 'survey-simple-form (car (cdr (car (car l)))))\n    (plus (dcount (car (cdr (car (cdr (cdr (car l)))))))\n\t  (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to cc subject qlist)\n  (progn\n   (setq total-questions (qcount qlist))\n   (sendmessage\n    to\n    cc\n    subject\n    (ask-question-set qlist)\n    NIL\n    0\n    T)))\n\n(defun maybe-displaytext (t)\n  (cond\n   ((equal t NIL) NIL)\n   ((equal t \"\") NIL)\n   (T (displaytext t))))\n\n; This is the user-generated portion of the survey\n; Be careful in editing this, because you don't want to \n; mess up the LISP syntax.  (Be especially careful if you\n; don't know how to program in LISP!)\n; Note that lines that begin with semicolons are COMMENTS.\n\n(maybe-displaytext \"Thank you for your patience.  I would now like to ask you four questions about what this message did when you tried to read it.\")\n(handle-survey  \n     \"nsb\"  NIL\n     \"Re: blah\"\n     '(\n       ('survey-multiple-choice \"Were you able to read the introductory text?\"\n      '(\n        \"Yes\"\n        \"No\"\n        \"I don't know\"\n      ))\n       ('survey-multiple-choice \"What happened with the audio part?\"\n      '(\n        \"I heard it fine on my SPARC.\"\n        \"I saw a message saying I can't read it because I'm not on a SPARC\"\n        \"I saw garbage\"\n        \"I don't know\"\n      ))\n       ('survey-multiple-choice \"What happened with the picture?\"\n      '(\n        \"I saw the picture just fine\"\n        \"I saw a message saying I can't see it unless I run X.\"\n        \"I saw garbage\"\n        \"I don't know.\"\n      ))\n     ('survey-short-answer \"Do you have any other comments?\")\n  ))\n(maybe-displaytext \"\")\n\n--foobarbazola--\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/fetch.9.txt",
    "content": "* 9 FETCH (UID 9 MODSEQ (29395) BODY[] {348483}\nReturn-Path: <dbc.mtview.ca.us!mrose@dbc.mtview.ca.us>\nReceived: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)\n\tid <AA10321> for nsb; Sat, 5 Oct 91 19:14:36 EDT\nReceived: from fernwood.mpk.ca.us by thumper.bellcore.com (4.1/4.7)\n\tid <AA29702> for nsb@greenbush; Sat, 5 Oct 91 19:13:19 EDT\nReceived: by fernwood.mpk.ca.us; id AA09802; Sat, 5 Oct 91 16:12:20 -0700\nReceived: from localhost by dbc.mtview.ca.us (4.1/Anterior/SMI-4.0)\n\tid AA22354; Sat, 5 Oct 91 16:00:42 PDT\nTo: Nathaniel Borenstein <nsb@thumper.bellcore.com>\nCc: \"Stephen A. Uhler\" <sau@thumper.bellcore.com>\nSubject: Re: near closure on audio stuff \nIn-Reply-To: Your message of \"Fri, 04 Oct 91 23:13:17 PDT.\"\n             <14836.686643197@dbc.mtview.ca.us> \nMIME-Version: 1.0\nContent-type: audio/basic\nContent-Transfer-Encoding: base64\nDate: Sat, 05 Oct 91 16:00:40 -0700\nMessage-Id: <22353.686703640@dbc.mtview.ca.us>\nFrom: Marshall Rose <mrose@dbc.mtview.ca.us>\n\n+vt26mvx613r4Xh2+mTt3Wxk3edkXN7fae3v62Bl/m5xYu54am3+7nFwb/N3a+N2X9xf1W5v1UnK\nXmffTMxcaW1x3fRv29rY2vHl4vF1al5/XWpeX/Bjamx76Wpz9OjnbXv7ZHleXXJt9X7u6uzn5+r/\n4vP2dWd+ZXRr/O987X303fzu8vrdfet++u569253+O3venJsZ2Vvb39rZ3NufG54em12bXJ5dvx+\n+//z7vH07vPn6Ozu7fHp7vT2a29pZ3B/6fvx6/L09vp9bXF5cPno6vh8dvT4dWRoenNuamttd3h2\nbnJub2948PLzeXj4cm398efl7+Xm6+P0+fPz7PnvbHVxZ3x7fPLp4+jt7XtsaWJocnh3df5rcHh/\nfnVrbG5x93t9bX328u3z8Pnt9Pjs7vTw6e36fXx5+v1tbm5nfHf5e+/v6+z173ZuaPfvdffy+H5z\n+f14bn70fvz8bG9hZHJy8HZzcGh1bW789uLn6ubj4+3tev5vbGxobmpteu7y8+Xp6eZ1d+//fnv+\n/nR+dG5yfXvy+vjq7Xx+fGxramt2+vt+fPbs8fV9/29jZGhvbWdtf+zs7+ji5uPp6v7t7Ozte3Vs\neXVrfPH7ev//7vtnbmxr/nl8dXJ4cu/t6/X+7nl5aGl8evv5eWpy++rse3pz+O77bG1wd/Hv9e7u\n6/X87e7Nw0kxPf60tH8/PGu/uMBQOT/jxstNOkDfvr78P0Pevv9Uc0949+LI22FtzNdZT2Dg8VZY\naM3O5OxXV2f/6/FrWWNw59jb3fD36+zl919kafx88v1jbPTk62tdW2RtaGBt79zsY2v83dvo7m5o\ndm/m5WtnaOnj+2Zz3NvuaXjx7v57dXv0eN/peGlYaXzg42pi7ONeaWBXaGzs2OZxZmvg5O5+belq\nV1p5zcvtY25p4u5nbF1dftrfaW334ebt71ttdGh9+uz29Wni3/p6Zuj/bfRna1xe/fPu5v32ZmX7\ne/9vbGp56+X+c/Di1+XsX130aufidvx2831sZ/fsd+jq+Ghh++Dvbl9t6eRoW2zp7HD+dm/l7+7v\naW/s8N7tV2Nx9ebmdG7v/ufmbF5geuprcnJh9PTs7+Xq+93/bPBpe3l2cG5wb97X3//89ezxYHJp\nY2VneGFiXPTc5/Vf5Nrf6WL4+fr89vph8955+mtqXVz+b2ZbaODc6vvt+Obk5Nh0Wm5v9Ppu6e/u\n/W5u9/R17m5n82Rr/HPg2u7882bm9lzsX19uXN3zX2t+6nV9+t/pd+F6fvl89HngZmVvZO/i3nFm\ndX7X9GJl8tly9/5r+m7k9m5qc9pwYnJr5elsW2RvbOf1/mpw7vnoallo+uDi6vbe2/75/+LxaPdu\nZWpu6uxjZWRb6dt1aWPz2nv0/mt/+uXpaGv2a+rh+N9rb/fx61xbWHD69/xy+PzT33X2b996b/5l\ncH1g4dpZa+bl3nRdbd/xanr+ffbv72VibfLr9u3r5llo+mftZXZwevl46/Tpd+/gandfYPFz7+fi\n32/+7dz6Z2xr3/n3bF5/Z2387OJqY3R1ZmrwaPrp7u5p6eHf6/rzff516m938G/7am1/fXv5fmRd\nX23ve2t7d+Tzb+no3d/t7Hfr7XFue/748npubP/x4PhfZWXy+G1cXXTo3/H6ceDf5eb97mZu/P7n\nZmdsb2xie//7+nbx5PVwfX75dG/59enj9Oze9v5oZ21scl1s935saux47Oh1ZWfc3d7rY2365enu\nX1jx7tzsZlpj4vDb/F1qauzfcVto6eh9bvjp4N/t+V9u8HT6a273+PH8eGRt9+zqf3j+a210++n2\n/nHy73JiXHLp3d7f6XZ4bfbsc2xcZu9tbm552dfe7/9+Z11e/u7qa3rxY/Xw/e/36XdqWWTx/+Lw\n7+trcWpsaGr679/s/Hp94ed4Zl588+/4Z2b43d3i8mn35N/wbl5f9XJucWBke3x3ev729X376/Hs\n5uXnbWRu9WxfX2fd5/76d+Lh6n1sYmj37/RvdHrs3t3sam7r7W5gXG78bXV79fh4+erk/mleXvXe\n7297/ODd82dlZPng5vFdZ+7i52xtbW5hYHRscH3/5+x2en5x6+V3cXfs3+t4+efb2u9za2dqZmL4\n6OnqaXN6XV525u5wanTt/mZp/OHr9eZxdHRp8f56eWdw5t3z+Xlv8Xzp7Pr6YWr05XtqZmj06+t6\n+mto6+z8amNv5eLna/3e4uRzZHrycvrtbW1dYO79Zl9q797ucmpg+OP17ev2b23n3ejzfujqd2Rg\nXmJvd/X8fnt+7vjt4/Hl7n15an1vbWpv6fh8bm11++jt8/dtanns5u78+t/j+XJhZGn28P5vXmh7\n7PN2bmVs+v/18vzv6ejrdXP98ODufXh55uVvbXf4/GxpZl9sfeze7PXp7O7wb2djX2ViYG50ennu\n3OLvb2367vh39/Po8fv5/ebs8u39bGdiaPF+ZWdq8uPn7vN66OP9dmdmd33p7ntpXmvv6vtubXl9\n69/td3f77PRwaWp28ubk6fRz93xtZmdvbH77/fZ3evrs5evvfXRvbW93/fP1eG999Pn6//v4/u96\neuzr8nx6a21sam1vdHv2fnf/c29veerq+Pzv6N/e5ez/8/pqaGBhb3X8+3Jt/fr9d2tta3J9+Ovt\n5+Xk7n75d/f7a3F2dXh8d/H0d+z9cGxrdvjn9fd4+vJt9PTyfmpvdPN0bXP86/P1/u3rfPN+6ud8\ndGp7/fn8enxwdv36eXN4c/f5a2ltevj7cm97//13evbp4ePl6e16aW9sa21pc/x6dHt/7+zy7v9/\nfnFxbv7r7Pl1cPvz//v27+799vf1e29sbunsenZvcmxqaW56end6+Pd9++zg3+L1dHd69fr6fnh4\neXJpaG52dX/5e3B27eno5u3p7fx3aWx7cHR9dvT3+fT8+Px8bmhla3R3eHX15OHgfWpsbXj+c3zx\nf/tve/9naWv4/mz86d7m6Ofr5/N6b3N79+7z7/p6eHh1bmplbH/3/Pz/d3Zzb217/HZyePLt7uXt\n7uh5+/F6c2NlbWhv9e3td2/17O/8dvDsfHhwfu708vdwdHr76+rxfXP68HhqZWn58X1qanf36uvn\n9m5uc/f+cmpu7Ovv/3Nz++zy93ZrbGpyb2x69O7r6urw8PV7e/Tn6/ptbXn4735zc3Z+enhta2dn\nfPX6/vrx6+//d21vdff3+u3t6/L9e3d2fez0f/j29vLxc2tvcHRzb29rcX74/O/p5ej59vf19/v9\n/np7enZ2dW5sd/n2+v57+3VmaG/7/Xdzd//y5+Xs7/r27fN5ZWBqfvf6fvr27uzu9m9tb3dzd3Vv\n9Ovu+3J5+n/89fX4/X7u7/xtY3J3dH19d3z9fP7x8/v37/d8/vX19/V7cW5x+/Lz+3hvaGl0dXf5\n6uftfmtoav7v7vP/7/Hr6Ovxffz58vl6d3T/fXtwbXJyc3Jvbnb6+HtpZm58+O3n6Ort7vD9d2xu\nenr9fHZwcXj+9/v37ezq7/XvfnZ+fXRqbH72835rb378dG91bXT++e/s7vx5/vLt9/Xz+Pr07+3y\nfnx5+HxxamdrbHBtbnp4+uzn6/fv7fl5//z1+vj6bnf49/bt6/T/d/p9aGloZV1bYWZve/jt7+vm\n4ODg5u/3dnr29fp3e/bq7PZ7cXJ6/2peYWJodnz9cnPx6ebq+Xn+7/P5fHh2b/zu8vZ8/Pbx7/x7\ncnZ6dG5oanv19vv88enr6On4+3x0dX10aWtw/Pt8cm5vbvz59ff6+PPr6+fq9vj+f3BscnL98Pj8\n/nl/d29sZGx89fL6+vr5+fl7/vr9+vz7/3Z69/Hu8fb4+nV4dnh9d3R8/Xx4cG99/f14c3l4/ffx\n7e7/d/779f13cHV+fv/+8O7t6/R4bWx5+/bz8vb3fXJ2dnp2amVt+vb47/H49P1/f3Ftee/r7u7t\n7ero7fr8bmZnaWttb3l4cnFpam777fj27Obk5+zv+nz3+3Z2dvvx7u79eH54aW12/PRwZmpv+fh7\neHFubHT67vH9++7l5ujq8vZ1bmxnb3Z9fXVzdPXv7vX5/nzs6eXg6H1saGNeXmZrc3d0fPn2+fbv\n7/P8/fv3fXJ+7ePo7/Ht8P758/L5enVvc25nam1tbGlrdnp0eP7x6+Xn7vPx7u7u8fj19X9zdnx6\nbWxubXz+cWdjaXzy+337f3/9/vX2+fbv6Ojv9/T1+3FpcHZ2eX35/nt++/Lu8XVpZWV6+PLz+fp4\n/fL0fHj+9Pf8+Pv29vTu7n9ra2pqd/71/XZzdvnu8H13ePXv+Xx0e/Ls9Hd3fXx8+nt4eHp+fvvv\n6+vyfnv/fnhzc29rZmlu/vbz7Ozr7vH5f3pxbXB8/nx2/e3q6/t4enn/dnH+9/P8fnlxbnJ4c3Zy\ndHR9/fnt7Onm5e52eHdze3dxamx+9/X3/Xl89/d+ev75/P747/D2/Xl9cmxwe315dnrx6/D9fvf4\ndm1tdvp+/u/t7e73/fx4amRjaG54fe/n6+nq5+j5b2//fW9tcXv07vN9eP73fXz/+PT+cW1ycXV1\neH55b2xtd/15+unh5fB9eXd1b2559/P8d/zx7+/z7fD6fHB49/Z7fH/6/21teX17d25uc3R89u7r\n7fHy8/j2/nZ7eHRzdHl1d3z89PX49/b3eXF69PD0dm14+npyfvDv8/T49fv5+P16aWJnbG9vcPrs\n6+zs8/32+3j36fJ4c//y8vX3emthYm379Hpua3J4/PLu7O30fn/3/Hh2+PL9fnFv+vDz9PPv7fh+\nfHZ2eH/+eHVzcXZ9/nhxd3v9+31+/vn4/f758fTu7fH8dHB1/PT4d21tcnV6fvrx7vDv8ft9fPbz\nfnFtbGxy/Px+/vX1fX5+eHp++/Ds5unq6/p+cm9rbnBvb3FycHZtbXB2+fDy9O/6fHt98/Tu6+70\n/n58+vn/d2xoa3FwcXn57u3n5+30/Xp6/nh5eHV69/f8/P/8+/v59/56dG9sbXV8+/Ds7fd4d3d7\ncXF8//f7dnR3/v779vf29vLu7evu8/j9fXV0d3l2bGptcX59cXJzffTv6ujr8X53fH1/d25uev96\neXj9/3JxeX7++fr29PXx7u3z+fz/cW5ua3JzfP12c3749vz9+vXy9Ozu9/3+/f/593tzdH5+cm5w\nbnjv7vp8dnV8eXf8+Pb08e7x+P5wbGttc3J49fLx8e3t9fb4+Prv8nl2b216/Xtvbnf//np1d3r2\n7+7q6uv9dHJvbnF7fH18d3b69fP7fn1ze/7/9/h+cnr5+H17+vLv9e9+dnlvb3R3df3ye3Z2cm5w\nfPfp6vHz7e3t7/n9/X16fHp4eXFpa294/vr/e/359/n2+f3z7O/x9vnz8H10eXJtbm5sbXJ+/v95\ndXh6enn9+fn18ezs7vX68/f8+f/9/fP6dXd89/tyamlqbnd97+3v+399+vX3+3Vsa250eG9vfPv0\n6+zu6+rx/P94cG10ff/+9PH59e7x9vp3amhufH19+Pj9/nR88ff7d3l5d315+/l9d2tnfu3o5+7z\n9/LzfXh3dm51fnl5bXrw5eHxdGhpffnw/3X1eP17dXx8/vju8ftzb3b59HB3/Xr4fm9xeX3w5ePl\n+WtvcPjpfWRfaHV+f3n48/Dn73RiafR45uJ5+nZ27/H5fmtu7OTofW5o++h0Ym1nW2rv9OnzbvLf\n2+br8mn59P18a2Zu7m1r7Plrd+7m7H5+Y2zybv52YGFrb3Tc1+3t6v774eNrZ1lv1+/y8F1feu7i\n72ppa/n1ff1VU2Ry2uT56Nvb69f5WGBoZWP75d/98dl6afxZX25o5H1sce3ic9vsXe5kZ9zZYVlm\nYt/S3WFz+k9x1+3852hs293g7H5dXtloZt5VW251aOniVW336Wxh/W/j9frZ6/3f9vv93tpt7PFe\nb/P853lcXl5tX15eX+3h3NL+8Hj6zuPr41NVW3HX8HvrZuLk7exfaPhaWF9cbW5u+vD0bW3m3unc\n6ODM3ehrVU9S+vjs2vB+/ePn+v5cVOxzYXNYYOfZ3uvtaGjx39nW5FdcWVLpz8zac1hPWlVt8m3X\n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\ns6afuzMiIB8mJh0q3cC2q6CfqnUrKzUrISVBtamin6CluDcqNEMuJDfGrqmpqK/MPCwrJR4gLvSv\nqKenqLRcOjQvLzlzwLWyxUxMc0Y+5dI/TOpc4NXPzruor86rsFo9KzEqKy8sbcbKta2uxWFJMzg0\nKzJXxL2uqbDGcv9ZS09AO0/Ms7nAu7a+U0o9Mi0rNGS9uLe7weJbT0E9NjQ/17y7ub7xXFBCO0Bc\nYsaztcH7dHrIyNi3xcm0y9FQOTgsNjY4X0VFUV5TRfPwfcfWzL7HXDtJ67+urrTCvrxXRkNTYUvf\n0cd8RjwyMjE9SEZK07m4usnUU0j3z7/S69zHy25oR0tQXF9t0V1kZPnmX1xV2cnUv6rGXLvX5kR4\n9jg9LDBFOztUx8fMvMN3TD9N3M3p3MTDvLm8z9nOWd/jbUQ/8E9IPURNV2pswddVTUpEQeC/t7i5\nucHaRj89Nzo/V9nIyc3K1llJTU5e5O7uz8TO1cfmOtyoaFWz4eJA8G4yWjJK1DIyRtRGS7/M18rI\ny8LLXtHI5NjLwNP940lkSEHP4GtH8MlVWUdNUERR6NdOStvIxb66yc7PaV5GPT1Ib2bpzMLG9WZS\nTEtFTl3Wz8i8wsbLz9naUjJHyT/gssLNQXroPj8tRWE3PlfCwr26zsfNYFjZyvJaZ93S7WB+1OD7\n3OpKRE5eX1pgW2l6aXV7bHzV0+Te29HP2PttbGnx3dxlT1JYXVpfYH3Y2dzT4v566NHZfVVOXmhu\n83xlWlhSSlvg5+Pbx77Cze9tZV/u6XJdfups7n1VS0JDUuncfvtlZPv0593V6WX96fb45tTNycrQ\n1G9aZVpMRklNVGvw49nY8+3d7mz62d/q4uzn5PhzaFpSUFpuafXk4dvb3uVfVllZbl785d/Teezb\n5Oxi8el+6mxv/Pne3dvuZl1ZYWZy/fNzWnB7eGhdbF94393c+erd3d19bW9id/l5Z1xtcuzd4+Ph\n3Nzf3OxXTU5Rc9za/WFu+97kb2RhdvH57/356fXhdVNOUmtu7uvd1NjLzdLa7nddWVNMUl5md+3k\n4+lxaGNXVl7l3tzZ2tPX1+hgV1NbafLm3d3m7ePoamNaX1tXXmzc1t/m3OR4Xldmb/lveN/k9n3s\n9vfrdmVkcf11am9y8eHd2e38c2/9cHFt8+3k3uXrc19TUlxdXGXq1trd4Oftefns4v9dZ2RdX337\nZGp47d7h7n746fLu7vvt5NjjdmdXX2pla2dyaGbt397h4ulza21t+PXv7G5nY2N1/OXf6O18anF+\neHhseeno8vLn6e/8eG5uamFqbmx37ujr5+f4bWlqa2957eTpeG1zbV5m+erf4t7d7PX97OJ+bWtp\nY1dZYW73/Ovr9vjw5en7f3/9+G9pZGNu/uro7ebm5+16bWhpdu7d3e5tYmJeYWhw9/ru4u7s7vX3\ndXVqbXH+f3zz8ezi3uh8bmtlanFueuzp5+nyeG1jXGX06+7s9vr6fW9maG9y8uvt6+Tt+fLs9H/p\n6/HvbWVgXFxdbHbx3d7e4uzz83hlYGllaXNubvzr7fZ7dfzr6+/q5+3s/WZhaXT/8fl97OPsdmto\nbHp/dH7z7+33/u/l5O3ueV5bYGRsbWtzfuru8+ju+u3k7Ofm83lybWJhbHXv5vHv9Pn5fXpmZHX+\n7unzfHh3b3Xx8u/u+nz7fG548Ov3enhvbGZnbXFzbWx39uXf3+Tt7u/48O7x+3h6bnB6dG1seH99\nemxrbm93fPv5+3/77O35dWRseHvv6ubm7Ofu+n5tbGht9/Pp6vl+dfr3fmtcXm337vb19vbv7u7y\n/H1vdH/4fnZ7+PPx7vL07/D57fJzbWlsbG9ta3JsZGNx+Ozn7e7n4ubr7v10fHpvd/bs6+94c3hx\nbm5oZ2tw/vPu7/r37/B0bHdxe/j17ezt7f52fHdtbXZ1bWltffl9/vLr6+7x7ebu+vp4bWtudXh9\nd3L57e3t6uXzb2xnZm1vb33y7fR+e/jq6uTh6f9ubGRjYmRrcvjk4uXr9/Z7cXBze3Z0+/Lt6fF+\nc3N+eXdxc3d0+/n693VpbHP68Ovr7Ovr83J2dHR6b2drb3z7+/f27e7z9ff68enxdHd4fPju7vX2\n/29tbGtrcnhze3p5fXZ4/3h2dXzu6+Pf4er0/mtqbGtvfXpv+uvs93psa3R2eH/x6+bl6Oj9b2pq\nd33+dnJ0fPj8/ff1735td3739/78e/r4fft+/vXx9nR0fnh7fndtZ2x0/PDz8/Ps7vX4+3ZtbHBp\nY2t29u7m3t3d3+fr9HNtb25pZGdlZmhvd33z9Pn483tsbnf++O71+fbs6vD8e3738fHv8fLr8P10\naWdteXZ6dm50ePbt8e/0+PD7fnx8e/75+Pn7/nRqZmptePf08/f4+PLu7/Z2ePn5+vTy9PxtaWdm\naWltc/br5+To6uz1/nl7+PD1fXl7dnF7cW9tbWxraXP+9ezp5uvzem9zeXV9/fx/9ure2t3i+nx5\nbWpfX2NhYmpv/PN9b250dX748+rl5efn5uru9n/79n17dnX58n5taWprb29veXh6fPDl4+Pq9nh3\nc3FzcXN3dvLu+nh2//p9e29sbnr8enj7fnf7+PPq4erv7Onm6n5wb21pXl5fZWhv+PTv8/X++vx9\n9+vn5OTr6er0enp0eX9vbGlw+Pp2bmpscnZ4fXd2dv3u7Ofi3+r8dG9zc21rbXf86Obp9P7/+/L3\nc2pvcn3u7/50cHBnbfv48/Hx+XtzeP77eHBxd3x6/fLp6u3v7+7zeXBwdW95fPzu6+z8cm1ubG5u\ndG13/PXu+fXy7+zs8vxwbXH/enJyfv3u7u3tfnlsbHN8e/36eXF2e3px/Xl18Ovm4+Tm5u3v+XRw\naGd+e2pmaWt28+99dG1zcPjr+/58dfjr6Ont7vf59vr58Xdz9XZuc25rb3z28XtzffXz8f15cXv/\ncX39ffvx9fPz/Xr58HhxbGdv9nh4enh8/Pr29/5/9e73evHn6u/6+Pb+b2tpcm90dnnt7fZ9fv32\n/Xlza29xfe/s7P3s7O/4fPPtfV9hZWRpYWrv5+Pk6Ozq4Od7eHFsafn7fHRmbPLr93358Orj8Pr/\n+f78/W5mYWdv+XNtb3N29H3v7Pz/cH/48PV7fnj66+vt7/N5fuv+Z/rt3VlMeer4XVn529fpbvzW\n1tjt+/5oVlNj+XdZYXjb5vb+bfbucV9v8Pf2dfnv69/q7vfs5Ofr9e/8eW5ialtfaGRmaP776+Dh\n7O/v8eL3+fx09HBsd370bfny9HR5cnP1Y19te/h5+/Pye3J47+Z9+O/f2+fs9O97bHhpaGtcXGts\n6uzy5N/ndWT06nBdXXrq/+t07O1q9vXs+3FueNvofm3/2/pnZn19fGz46ehqXvn/bXRo8ejedfre\n+XVqePpsam37bnt5//L35vV+6Hx1c2n67O7vc/h5ffD16+n7ZHn262dg3WR46Wz1ZXPrbHl0/Pxm\nbeZ49u/u7ujp6O/q8nt4cF1qafdwXXHv9Vtf6Op6ZPPldnj539r2+e3r+2H72uxrY/bmbF1k3OZr\nZfntbVxc7OFjb//t7mln69z9f/Lj8F373vLx5ervdWR5b2j4eGxua3H0/nz7+fP9cOzk6/v95Xpv\ndWnu9WFienVr8fjsbW3w7OT6X2jb2Ox0bu7sY236bl1x5u5scu7xa290d3Zwb+/o73p77ebw+nTp\n5Wn9e3pvWu7hb11s3nRpcunbeG7p5u1saufmY3Vz/OFud+ZzaHF+c25paHTp/l9/4eb/7t/rdPbn\n911e/O5kZeXf5Whx2/f6fP/jeWpp9/pocGfw/W1zcOrqbXXq4v1scernb25pa/9sbPvjd2L25+xn\nbePj9l5z4u31+O7rcnt4fmlu7fBvZfNuXWr363bu5/Xp+XTr9/z0/e149HD43/TnanPqbXZjbPh2\nZGNxcnts8uL5a2N+6/F7cOLX7X736O1ubf55eGRx6fv7c293fOX+cPjf4XdveujwaWh66GlmamL9\naGZnfe527fDp5uj3fuv0eFxg//798d/b3ujz5uTod1tib2taWHb4bG/073b4b27h6/vw7ebj4Wx6\n6296+u96Zm11b3FkbO5tam10/PTi9nZ5+Pvx9Obh4uDz9+vu8nR2/XVgX214bWphaPn28fPp7/30\neP78fWp39/n7+uv2/+/x8fxtb/71bW50eHJs937t/Hf69uvr5G1x4ej1bW55b2ZeYXbv6/576unz\nfP9yeWz94PX5euPfeXZx93dsbHN5aHl+8vhxeGr95/NpafTt9XZ1+u79aHrvdv3n8ufb5/Hq4/1m\nd25qZWx08nZeaWprX3Ls/uzw5N/xbm7q7Plv/OLq/23/5uZybXFtaGBq5+RxcPDpf2J84Of9a/Dr\ndWZodm1randvaGZq6OT5fnzp6e998Odwdv346+/v7+bl8/vy7nRna2l2ZV9tcf1tevt37u7q7e/5\nc+fp+fb6+G55d29qaPl2b3P38Wtvfunr+Xv66e/x6uj6dnT27/NuXfPg+2Nh9Pf3cW7xfv179m9f\nY2z7/e7q7u/9evXv9e3t8v9ufPn4cW52fH5pfu37dnjt7vRqaPzr5n5s7uH1bHXu7W1i+ujzcGVn\naGpta3zs83738Pfq7/ftfPnz8PhvdH7t7PX99uvv9Hp57nVlZm1wamxmcu70/Pft6/F28ev8/mp4\n7/Tu9Xt2+HtxZl9qaG329O3m4uvu8Hfu7/v29u5y9ebo72ZlbfpsYXNsampufv19/Ozj6nJqbn74\nd2z76Or39/Hy9n77+XBqc/Hp/nV0cHrs7Xh+9Ozz/vXu7+7u/PB8a3JrbWhs+Xhvdv1ubfPyfHN+\n9fX7cW335ez3ev/r6O3q6/Tv9XNtbGtfZ3hs//h69vZ+7Pj+7/rr9nBtaXh29Ozv6urk5nJocm7+\nbGNvd3htcHB6/vt2/eh5eP7w6Px99/Pv+nD86/V4dvvv7ff6+v/8dnN7fW9lb/R4cn7x83/3+n/y\n+n/t7nVhXGf1fmlndfHu8vHm5+3p4+DveXp+/W1fZWxwevvy5ODo7vj8b2lqamhqbn72+v9+9O3p\n83vz731ra3X+d21t8+jy/Xx++n9vbnj8cW1sdvj+/uje3t/o5+buf2Zrb2hjX2vw+mxlaG10/nh7\n7OTp5+jy9fz06+x5bXNxePh2am9+dm5we/ry9Xjt5e3u9fXn5+fl7/50Zl9obGZnZmNob3VzfO/n\n4N7j7+zj4ux2cnd2cXh7dnBvfvx1aWpqbXh6e2pre3FscvXl4u7z7uPg5uzv8H1tbXBubW1rdu7q\n7/Tt6e12b/749n1tbnN9c2xxdXz49/x9eG9ta23+7Oz47+vwfX349vx6/Xn98/F1dOrpfmtub2xy\n+vP+8ebp8356bnBvbWxtev378uno9f7p5unvd2xrdn9waGlseHp2/vv79vDt9Pjz9vZ8b3d4efTy\nfXb37vVzcvP6fnJpanrt6/V5eXZxdHj0fnByd/Tw9O/r6/N4bGt3e//5+f//+u/u9Pbv7/pxbGtm\nanZ7fv99/n716u3u6+bo9nBmZWpvdX18+u/4/Pru6O3v7O73cGlve3twamlveXRve+7r6e58dXh+\n9fh3b3ZzbnJ2++7m4+bt9vJ8bWxraW51b2329f/59O3v7uvx+XRva2hwb3Xs6/f39fv46/l0+Xb9\n7ft++vxweHNibO/0+O7y8Oh+aHRrZnz2eX35/P3v7evl5ezs93JtcnNrbm1rb29wdnl6eXz07/H0\n7+7x/nh4dHj++/jv7u3w8PV++f5ybm13e21pbHr6+vp/e/bu8vf9/H539/j/7/v6+X97d/l8c21l\nb29pdHdvb+3k5unn6Oji6vDv+HpvbWxsa2dmZWVvffnz7uv0/Xv//XV1evf2fv3w5+fq6u7w7ff9\nen13d/57bGhkYWRpcXp0evLw7eXk5ejs9Pf0fnr6enn+evv3+/V7cXBwd3RuampscHFzeffv7+3w\n+H18+fDv+XpvaW51b3Bz7+Pm6uvq7O/s7fv5+vx7eX5/fnhuam1qZ2ZjZGx9/Hl3+PPz7Ojo7u/t\n8Pj49vbv7v5zef1zb21qcnBxd/3u6+rs6u/8enBycXBweXdyfv/6//vu7+3p6O/7fW9pa2ppbm11\n9PX7/Pj09/Xw+H50bG9zbGxueXz58+7o5eHh5er5f3Vvbmt1//d+bmxudG9yfH5+9vP+fX11cXz6\n+fXx6uPn7vj6/XR0bWtvcG5tdHp9/Pj79/Lz/P33+fPv7vLx9fXz9/dzcXRpZWRmaG50++7v9/fz\n9/z77ezr6/P6+vT2+Hp6eHN6dnd2efv7/HdtcXRxeHv68fbw8vHs8PP9/f95b2xxbm1y+Pb6+n5w\nbG5zdnr78/Pw7e/u7vDw9ft+/vb4enF2cm1ycnJubnV6+vf39/fz+Pj29vLy+Hv98Ozp7fLz9Hds\naWVoaG51d3378fDx8/b48+/6fXV7fvjt9vv4cWxsbXB1dWtqd/Ht6vHy7vf09fb7e3N19vD/fvx6\nfv14d3Fze3p0bG97//Ts7u3t+f37d3B6/Xz9/X1/f3l1fPTv6ujr7vp9e3VtZmlubmpqcH748Ovr\n6+7v7e37/PN5bGtudnz+fnn49vTz+XZzeHt8cXB1+e3q5ujq6e329n5vbGdiYmdtcnpzb/zv9H36\n8fLs7e/u7O/z9Xz98vf7enF+/HhzcG5nZmZlaHBxcXh8/fDp5eru7Orr6ujq7+3q8X58/3RtaGZv\ndXJvb25tefLu7vH2+nt3dnv+fXt+/fvz7/d/dnR4e291f3v8+vr48e7u6ev0+v39+3NwdXV7fn3/\n/v7+fnl5d3d6dnBrbnxzefHw7Orn5efs+nx6dnJ2dXVzdnh8fHd3eG9udXz4+nZzdHd87u758uzn\n4enu9PDx+HhvbmdmZ2xyd3j8+/vx9ffw7vj38vT17+z7dGpoamt0b3F0c3b+/Pr4fvLx+fTv7vjz\n8/ru7e72e3h2/vh/fnZvb2tuefvz7Ovr8n56+vZ9dm9ubnV8fHhtamxteHr79PT4+fny7fN3cnZ8\n8Ozs5+bv8/H3/n51bWltcnP++/z3e2pnanBzf/b5fXz/+Hpwc3zu5d/h5e3z/f71fnRtZmxyeXt4\nfX1wb3N7/n78+vz+9u7t7fL27/Ly9/v0+Pt4cHJycnFucnl5eX5+/fTr5+rv+338/3ducH52enhq\nYWVtdfx1b3f+9/Ht7Ozk5Ojn6+7x8/tydnV1fHt0cHFzd25pa3t6dHd8+X5zb3X+9/Lx8/j58/n5\n//rs5ebr7PP8+X94d3z++/5vaWZqamtra2xwf+/u7ezw8Ph4dXx9e//28uzp6uvp6ejp+XtzbGxo\nZWdsb253+ff0/X/7fXt+9vP8enx8e/fs6+/1+Pt+ff19enhubnR6eXh1cG9sbX338/X4+X739Pn3\n6+jt7Ozt7u3ze25rbG5tbXVzb29ub3v28+/y/3v8e/zy+P7y7Ozx+Pp4bWxwcXNxcHl9fv95+vDv\n9frv9PPvfX3/fff2/np3+O7t8f9+fHRvbm91dHj69O7r6/H5fHhvbGtrbnBzdHRzffHt9vju7/Dw\n+X99cWtucXj19H377Ozo5e37/ff9b210e3BoZWRrevXv7O/6fHx/efv7ffv29e3t7/b18Pd9ef/5\n8PHx9XtuaGpubm93dnp3/vf5/vvz+/z39/t7/fn+/Xt1dn3+fv18eHr5/vny/Xj77O7p7P39/fn+\n+fr//nt0aGZkaGpvc/7t6uLp9/Pv8vx1dGxrbWhpb3f9/PLs7Ovn4+vv+HB3/X55b29sb3V8+nx4\nf/f08fH4+vn5fnNucXN3enJ2/fr28e7s7u/z+356dG93b3B8/v/48fPw7+73enh7dG91cnJ4ffXs\n8ff+cnB4/vHs9X5+fnz+fHb+/n17d3v09Pr8cmtra2pxe3337Ovr7fPz7Ors7/V+b2xtcGxv//98\nfv/48Pp+fHz7+fb5eXd/f3FsbW5ye/37/Pzx7Ojo7vd7f/Z+dnX58O7s8PX4/v56dm5paWZmcf59\ne/7z9fv+dXd2dHH66u3s7+/t8fLu7vDy8/Ly+HVtaWdsbGhlaG50ff7y5ufq6uno8ff9+n1ubWxt\nb3b3fm1ubnT+9Ovq7PR9/3pubW93c254+/Py7u3u9XZ9+ffyfXBvcXd/eG939vDz9+/v+/Xu7/b+\n/Xz98fr1+3Z1bGpxcG92dXp4dnb78+/p7O/v7evyf378fHV1dnn//nVtZmZqbXN4+ezu9fn89PTx\n7u7q6ert+Pf/dXdwc3Nxd3p3eXz+/Xv7d2pqbnN3e/v07O7s6+3v7vxtampsdXBtcnR29uzr5ufs\n8PD7fP92dn58fvv7/3V2efvz8fd+eXV1dHJ5/X19enn67+3t7vDz9vp6b25ta2trbnF6/vx9fvju\n6/L+XUndtbjB6UA4PFTfzeZMRVbu4s/dUlN43NbZ6GZ21cnH6ExUfNHHynhJSUhd3d54XVhRbete\nT1d41sO/xc/qXFhm/XFeW1xbXl1aWVNVaene5ftwfX3x49/T0eL059fLz950W2Tw2W9STE95cEMv\nPbausK7DOzlFPD1HTdSyrLfTRS8yV9xeSDs4TMq8vtJWS2HOxMrY/H7Rv8XvdmNl1lMmJLCcqqal\nNCE7LyI6RC/Do7DCwjAlQ9xXzLrIva228E04MkrP3008NT7hvLfHXkY9TMq9xetZWNe9w+07JTCb\nj6Ouvh8f4UgnLSUkwKOuvk4oLNm+60VAW7SkqsJCLjrmxsdQLi9Zxru8YD9dz8O800U+RVRZWFMo\nGK+FjKKbOQ8mUh4gKh9dnZ+1Ox8hPLWvOiIut52dqmcjLcC+0ncvKtqutLnfNzv60V9KT1ZLTVJG\nQjkiHJ6AiJ6dNBUqMxsXGSWunKC5KSEwT7ZvHBo3o5igsFAu5K7JMS41VKypyGjf1cvfPi4uRdDP\nRisoRcBZIyOPgIudqx4cMicbERI3oZ2j5CsuPb36GBMexZOTpMNS28hcJiBEtKapyVnLuMFPLik1\nTe9dNCsuRMrVLBy2gICWq0YoXCoYDwocop2pzD3Aw3xfFw0WMJqTpq+vq7k4JB4/rKiswMaxr7hK\nLC4yPE1AMCwsN31TLh8siICNp6pDvS4REAoUrKu6usyfqTo8Gg8VGVydn52cn7k8MyMp2reurKuu\nt7XCPC4sKzlBLyEeNcLVNiEjj4CKoJytn10SDQgVXC08yq+Rm19IIRkPCyC7q56Zl6SuuiEcOcG0\nuLmvpp+qQCwtNT8tIh4dKmZrLyQ6ioCUm46eoSsRDwsgIQ4xqJqTubin0yIICh8vPGWgkpObtjA/\nfTk7P7+tqaSstHwsLks8JBgXJENfJxqggIutiYmWaRQWEx0XBBOqoJ65qo+UwBENGxkPFj+dl6Gf\nnJy0Ji7nvz8swp2ewT9Yvs4uHBkfJiMfIaiHkqiGhI+xHyMiHQoDFisgUq6ajJKlu78iDAwRGzI+\n3paRoa2oqcrMVTv338jEzk4/ys82KyIjKx0knpGzooeKkaJFRjsbCw8aDg8o5p6YppmMmzYiHhcS\nGBw7uuaqn6evrKesvMK+ssszP0MxLSwvOigYIpWOUp+Kjo+jzrhIEgkcIQ0PHS+vprCdk56oosQg\nGh0eHx4su67XwqWlscO/q6i6xbK7PCwpJiwkFBmdnjuNiJGOl5mfSBALGQ4FDx0eP7ymlpamoZef\nVFs0Gh8dHSwsNcOpq7Cop7PP4bOsz928+y8nKysWG6JmMIyMkI6SlJiwFhQaCQQNFBIpz8uXlqie\nmaOspEsrOCYgJSAiTsvGrKSqp6fFua/MUdtuPDUvNj80JiDdmq67lZKanqKuzSsWFRsVER4mK8Gv\nuse4s7KuX+K26kQ9NjlAP1PItLWrqbGvt73EzMVUNDJNaTgtM01aZ8uyq7GysbXIXDUnLzQvNj/J\ns7a1y2BSOzovKjhIOz1KSPnH1NC4tbaur7K5ysi9v85YSe30Vk89Oj1ETXZdadPBtb7UXE5NPzU4\nOj/Nvbu5zltZbDsuOlFrZWTVy+N6yb/q4L+8uc/ywL7Oy838XEVP/UwvLUFTUT48Zce5t729x8/B\n1lU9PlJ5zunf5ElgXz0+QlrW2dHp+tfqX1pb7dPSysjI3cWxuMloWM3OVTcvNzhEOi87RunAvby7\nu728v9xVR0Vl2mlPWW3jalRiauTYx8Xv7et4eVE+Pld1Y2Rvz7q3usv50svPUzw8QEs/OkU+PWvT\nvL7ZzMnFxvFLRVFf7+diatHCvsPe6s/O7FdQTtfqSUU8P1ZfUlfqxLu8y+DMzOnrXkQ+PUJLUkVF\n/tDKx83T0tPMzmxLRlX/eGB/z8fLxcfMy9vU70tJV+JpPj5RbVZDTf7b3ubIxdDq38fcV01ESFVf\nWF9RUtTM1Opd7uVvZOrbftrS3d/Z08a+z+jU3n5lRkdbW01CSUpLbtx8c29q1dff0tPX3Obo62JJ\nUuDl8F5QYvHsYWR3WFhbWVtv287EwsfJwsbP3evwXlxQRUNEU1dTUlrg1OD43u1paPne931s+9Hl\naFNLVu19X2zz7One18zR5m9+fF9kXm7v4dnWz87O2+To6HNWSUldYFFMXuhqatPU825TW/Ll+PjT\n19nPZElMSUpMS1z8dejPwMHPy8/i2PJZXfLn59zY1dryXllYUVBUUlx9ZW3g3O1+7dTN5E5OX1hl\nZGfo3N5v1+5JUF9TT2vXz87OzcrP9u9dX/hcVVZ969fL1evc7Vb9X1n9YU5d6vf0avfj6Ph+Z1xU\nV2Zs/Xzo2dfQ81JaYE9QYvz429fZyc3b22ZW3u1PXWnu4nL/1eXu6W3q5mZQYNfmbt7a9GpkXGFY\nSUtfUlHf393Qzs3O4WztYk5PTmfzaufPzdri2d9sa1Vs2WJf3N/s4XVZaPTiaGnkbPPq3uDdcGbe\nYFBQU0dOWF117d7bzNPW1tTn52lUblhYcNfd4ntl2+VWT+LfXnJw/dzW/uzubd7Y9eji7vt8bV/l\naVn0aVJPT0pjbVhb2dfy2dbO1W1q4XVQWufW3/jezdP689nybGfy5GJSXutjVlBdfG1nd996YezR\n42FifuL+Xm7r73nr2NPU2s7G1eTp6mVNRkhKQj4/S1VVTnTQ7vve1s3X1e9Yysi8rrWuqKy4wMw/\nNy4pKSopKj0+O0JpZ0ZSRUlsPyg9qJ+srJKRmqCvrMomFhYjJBkf0KqnuLqpuS0hLi4gJTE9Vcq1\nXDyjkq7Ak5efrLq3WTMWFSckGiHarKazv621Nig7NCYtMzlITUxMd6eXuKORm5qwrL0tJhUcJSIn\nTK6uq8jueDMpKDgpLko6Y9pTNVGwoNqskZ6ZoKChUDkbHyAaJzLEurDI2/AtMywyKzFDLE95TTdj\nrqDerJGhnKOdpD5UJC8pHyxG3D3SPzUvIzA4OixKxjZEyU4zTq+lVZ+Un5efl6VOVCMxISQqNms1\nXCstKiUuL0EtWuk/2sJjT8WkqmuXnKGbpppoTzMmPyErPcg7RnsoLCArLC0uLM5NS7zN2cW7n7yu\nlquboqSlN8UpPC8f8D5GOG4zJishQSoqODxqL8vARcfhpaRomZ2jnKmaSUvsOEAc1GU6O1nJHygj\nMyYfRS8+L1zAO+u7saawopemnJ6erTOzXioqOj80OTTnKiEqKygjQjguPlvcO0uztr+loJ2anpmf\npr3tzyQvNCYrOTowOyktKyUqLj0uOUtCW+/iuLOzop2fnJWeqKOwaTwuLyskLTYyKjEvJSktLjRC\nQDxERGbq57yvrbChmaSamKKmtLg5LS4pKCYtLSopLCkpLTg+R1JaTEnd0cXOuq+0raafn5+coqyy\nxUpBMi4tKCYiJh8jKSk4RmBka1RR4NzDvLq6r6+zq6enpqOpsLS1yVFSOC8oJCQfICEoLjRKS2Fm\nZtPUx8O1srCvra67tLO9uLC3ubW2x1pfPDQrJyskJCctMDZDSG3cysjCtrKvsrCwvcHM1d11zcXF\nu8zM3VlfREA/Pz86OTg4Nzk5PkpN1s3Cubq1ube4z+xfa2f5ztLQ3mn+XkpZV33L2Pri7ENEPj4/\nQExM3enNxcq+ztfj7GxJXOTrd9HdcPvebF/OyMrc0eJaUUlTRFr2ft9izGxjZF1wSvr4det9+11h\nXnlcZNDJxsG9v8zec04/OkJNTOjR09Pa52xkXVlYWF3a6HLs8FpMUVbh29PEvr/MzNJmTUhNS0tm\n3Oz03+VbV1JUXlT92+D8ZWpWU19v4OfJwMDGycToVlFUW1Jg7tbqbeFiT1RKREhZZE/u399/VF9o\nd+LLzb+5wMzGzmFQUlNJWmhv82zd7V9VWFtLU2NTU1NZUkdX/fvby769vLzAysnaWlVOUVNRVltq\nW1ZUUU1UWlnY2PV/7H1aX1ddd+bW3M/Dx8zNytPm2flXSFBhRUtfY1xNbdbbWO7Oa1lmWUxaUmzL\n3+TKwMzRy9L1cexqZ1JOWFpUVXFiXmd9/eZn7Mt+VtzSYE5o0nRTbcvPXu3J1m/r3XtVbeFRSFrn\ndlpq095PXuRnVnPY/OjQ1M7S8MvPaP3vYUlUX0xNTVtQV2Vh6Xvt3NDV3tfl5/7j5nDYzc3Oy8jG\n0ujmXk9GSkM8PTo9PkJHVuzizcfDxcXK0c70a+bfZnm+ub63ra+6vcNpRTgvLSkmKCwqLT9RWNa6\nsrS0s7K8z9pLQeNeRL6nrq+enqmtrck/MiMeHhkXHiEfLGXXvKqlo6Knr66+S01AMSkfObHAVaeU\nm56amZ+3TykkGhAPEhMUHy1Crp+bl5SXm56u5z0sIR8eHiYzPlfH4tqgmKi1mZWltK+1PyUaFxsV\nEBkqM2K4pJqXmpyaoLlYPSceHh4kKS8/vbGzqqmwv1ElILy5HTChnamsm52grTM6aSYTFCMrJSU8\nvKWosqCco7/BuEgsJyckJSUrOnLXy7SwtLzFMj+YtSaumpq5rJ65rEwcIi8iERUqKTJnUHChna+s\nop+6xOM9+jUmKkdDNk3rfcXEXsrITS8uLx5Oo0nZopiXoJmgrKdYJh8jHhMUHR8uPMe8rJucn6Of\nrsBLMi0kJR8oLTrax7q0q622wM1qRC0oLiovv8X1rqWcn5+fraes6DgsLCQeHh4gJCs6PVbHra2s\nqqumrLPO7NxBODQxMTIyOUBSaN2+xsG8wcnK0+vx+VtazL6+urm1rq+92d5fPjo3MC40Ojk8Rz5C\nbHhvbs7ZVl9OSUpKWlVkzsK4tq+srq+yvM35SzwyMDAvMjQ0RerQxL6uq6uoq6+0ustUPDQqKCkp\nKy86PE3m4PPczdjQztLc0/HhxsLCxb67vcLJztlsVVJFQEFMUEta683Mx9XmxsrgfHntXFpVTFxe\nZF952mR77374XlFJSEY9PEA/QUtYb+PIvry4sbS5t7a/2dbrUkxJQEBITElNdlVNVVPn8WNh6sHG\ny8TBwsvQ5HNcQjs7PDg1OT4/UOrYy8G5t7i5vcTL52pkVU9PT01XZ2Fo5NZs7O/n3nbsV3fc5P70\n1M7X6tvv91tFSk5ISlZVY+bf+H3h6Gf9elhYU1lf6srFw8G9vsHG1M7R/FpHRUM8PDs/RU1IUtnL\nyszFwsHGz9Dd5WlVSU5fYU5Pb2VwcPZ+z83ufHfi/2liYWPvfVtx5c7O29vc0OdYT1rb8FlVWl5a\nTWXt6dpfYXrm32Xv3MjeUldUaFpc1b/Ezuj35NzX+lVVc3NCR/JhU1/obW3Py3l08tvd/lpUVtVu\nWPzm0cPS/WHsaURKdVdGSVhg68vCwcPExeba0NliRz5Nc0c5TNtpUnHb0NPBydbZ0t1YXGj79VVf\ndmRkVGV0WWFnSGRfXljr2M3P2sjxydXvzXnX5WtcWFv6XGjca29fW19X9HV+a/FtZ19l3tzj4urb\n4O/e22PpVVRaVFhPdlxfzubYe9Xf2tHg4vvd6WX3Zttpff1o6ltiZmTtZm5633roZWXu9+hc5Xll\nbl59YvL8X+xSe2Lr5XrQ7d3Q5dHmzu1zXV3zWVheUfFOcFji7NjY59ng2Hjtc35ZaWxUXXR4+Gzv\n5+3a3Fzy6XJycGFZ9G9mXm7UaODe+N/09Ht172h+bupo4XDr39/m4+3dbnNTbGZcWVllamDPaPrf\n1eh47N/1615gYm5eVF9adWTfa/vP98zo0M/q5Vf+V2tkT/vwzlfv+mB4TFVY2XDf0tPK5sv/3d1V\nVVFfTk1YV35uemHP9N/b2tfs4Wtq8Gdbb3Rn3Odq7tnec9Xu7Gfv5t7V5lNUWEpOS0pcY8/fzsjL\nzsjQT1taTUpUT1Lf/9/cz8/czdXg3+pYWV1MTlhdZe7v6NvXftfc5HZxb3L26GZg9W5kd294ZHVn\n7mxoX/Lkbuzz8Hno3N3hfGvu4O5cdGn+9tzd2szN0tLV1nxiTktGRENBQkZOUFxp5+TPy8/U3NnX\n4O1u8/zoaX18X+LE3zi6o76tsce0vrI3JDIkJCghISo/7cytqKegoqevtNBANC0rJy8tM0JcvcS2\nuby30e5APD82MTg/zaKlpJ6gmp+jtS4uIxwZFBYYHzVAVrOknJqbn6iqtUstJSQkJykrOfnEt7Ct\nrbC3wV45MC4sKzVvs6mmnp2cmJ2nxzsvIRsXExUYHiwxRL6snpudnaOkq8tKLCcpJykqL0dpx7i3\nsLKyutnvRzw4MzY4P1i+r62no6Cipauy2kQxJyMfHh0eJi48Vs69s66ur7K5yNPuT0dGQURPb9/c\nycC9u7m+yOJRRDs6NzY7QF/d08G3sa6ur7G4vcvrWEA8OjY0NDc5OD5GS1pdZlVJSkVJS0hXX+fE\nurSyr62vsbbC1mJPRj07OTY6PkhWddTIvr28vLy8xM7e7mFSTkZJS09IRkxLT0pDQDw9PTw/P01y\n3MfCu7WzsLK2ur/G02ZQSUdIRUlNSlh0//px6vl6blxedeDe0szJxcO+wcbN8GZOQj03MjEzOjs9\nSFFf38vEw728v8C+wcvLzM3V1dr27mNcVlBRSktGQ0dKUnHl19PMwMHBwsXLz9lwT0ZBP0VISk1R\nY23k1eXl7PzzZmdVTlhYa/Pf2NbPzczOzdfc7W1oWVZSVF5gae/VzdDO0dbZ3OdoWVNQT09PUVNb\nefHr4t7d3eD6fn7+9Hp6a2vo6eHf3tvb1NzvbF1STE1JRERHTVx+4djPyMnGxsrN1NnrfXhrYmVu\naXnt4+bs6vH+eWNWVE9NTUxQUVtld97WzcrJx8nO1Of1aVxfWVZQT1VUWF1ncWtyZVxcXGBmcXTu\n1cjFw8HCxcbL1u9nVk9MS0lJTExNU1xibPLi3dnY3el+bXF++3d5693b2N7l6npuX1xZUlFVWGHz\n3tPSzcrMztLhfmteWVFPUVBXV1Zfduve3NTPzs7a6P1qbGZfXl5na2pwdXz/bGVfXl9dXF1dbPTk\n29nTzcrJztbd5ezs8XVlYl5XUVBQVFlbXmFodPPs6u7n4eri39/h5u3z7/d+dXtye2xiZGducmxz\n/O7f49/lev3++XFibHz27u/07ezk4urr4+bp7X13b29vbWxgX2lsY2FiYFpbXlhbX2Rtce7k28/Q\nz83P193naXvXX1lpdXxj6/t18Xz85u5bW1tbXV1VUmd0f9/W09HQzcrK1PT/eG9vX1ROTlBWXVRP\nUl32fW1gXmhs7PRu+ODT1dnV1tbV0dZ9Wk9RVUY+S83MSbygqK+ura/hWDwfHSElIh8tR161oJ6l\npqOqwlYzJyUqKyowVse7tLCur7XBZ0lBOS4sLC0sI8GRmJ6YlI+ZpM8ZFBgRDAoOITHAm5yYk4+T\n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\nn6q7NCYnHxsPG46GioibpsUbLQ8CCg5NlJiMmzimrsYmCQwPH5mQkJzPo619vCUYHDaamqzCLTLU\nsaZYISIiKzxawcm3qbTuSlN0PC4zLyccH4+BjY2Xq6seHA4ABRbOk56amMKalWEWAwYXMJuVnJua\njpDAHxgVGTKspcrjr6qqsrdPKScnJR4nTtW8qqi2vrW9WjMtKyIgGyeKgY6Pn6e5Hh0IAAsgp6Ov\nmJmdk58nCgYRHkitopWQjI+3IR0iHxwn3KqjnJyisM5NJRwfISMlMc+wqq3IeNPH2jkxPDozMigg\nloGPl5idnS4bCgAJGThLUJqMjY6dLRANExITHuSUi4qMmrJSNh4RFiQ/4q+dmJutzDQuKxsXGCnh\n8dbEppujq788OCkhJCMuJjmFgpiRm5itFhUFBhcWHR+2i42Xn6/KKR0UDhgqz6SckY6TnrfRPBsS\nGShJxbepoZmcyicaHB0cIjyvp6mqsq6s6jovMzgqLDg4T4yJ05uPk6AZGw8OGwwMGOuYo5+Tj5VS\nIB0bIxsYLbWbmZyYlZ67RS0uIhsbJruwrLGtoLNOJyImHx8mPb6wqKSlpbZaOSwwKCgvPIyLRpqR\nnKsfNRgVGgcXPzA8N6CXmZzOuKXNKx0wSCsqQquiqa+xoLI+Qb+8Sz4vUe02Kyo1Jixczb/CsK21\nwHZYSDo1OkvXwK+k5EiWuB+do8rST60zVCkSLxwTHzdCNqGbo5WdsK63MR8qJCEvOvjdtKSkoqqo\nqbXHVEgnHR8hKCcoO9a3q6eiqsLAfEpHNzw+d8dg0l0nvJoq3I+lurKksy4yGR8nERgzMyPPobur\nn6iop7O7p9wjNjUjHB827LKrm5SZnqapPx8fGRYVHDI14K2joa6qorDbWOFnN0hMNzowNjkiXZ47\nro+sr6KfsFnCISQsExksHxYtvTy9m52bmZ6nqkAfLCUaHilDyK2fnZ2ip6vXODo+KCEoLComLjle\n1M6tpKqvra3C3bz+KCgyLS80KzauuT6Xkqqgm5++4jcgIxQPHCQZJK68/KSeqKmtwbG0O0+8Si5L\nw0NRv+C/rbDHucdI7DsoKjQxKy44RMrEYbestbiysL7J2Dc6RzVBRkpmXvi7qMnYqbTIxbfVO1Y3\nLTgsJi08NDpy2dLCt8W/r8JnXMq61NfX1cC/vtDTyF9LSkhNTD89QEhGQF91YE09TODX/vrFu7W1\nusXP2vh+U0Vb4Hn8fXf7VEdHQUFFRF7Yy8nHvMG/u+NSUE9iTVX43NZv8FtBPz9FPDw8RNPQyLa5\nwbixu8/V2Nzfa0o+S1FCPz5AR2d4687OxsXI2HhvUl9oR0lVad7Jv7/BwsjJ3z44PDw8O0hdcsm7\nu766t7/DzFpLSkJBRT87O0tTRD9F7s7Gv8PBw8TExMXfWVhVX0xa1d3JzNjOd2dpVEk5Pj83Pkpx\n29vMxr3Dw77Gzc/W7u/tXEtBRE9PT0VCVnvc4NTKx73BzNpzZlFOV1dg7NzP1O3ueFlTS05dUU5W\naXdYY+7q09/azNTV7eXceODS3O703d1ndF1SX1hcZVxr6NbV5XdXWFZOU27oZmze2s3K0NzZ32BT\nVlhXZ2NbZtXO1dPv2c9vX+/c8Wf/a2tzXVRKSUdHT1Fn6uHa0cbO2uhlYlrr3ebQzsXBx8bN3mdH\nRklDQklaUlbxcGVkWl984/p12c/KxcjN3urse/v07mVYVVvv7mJn5vdfVlp8X1ldauz22szN0Ofj\n3mtXSUtNTm3q+W3e0drl5+l1/v3k19/b4enncG5y6XBOWl1Vb/FtdeboX15ybGt+aV/h2ujj29bP\nz9rh9ndwZ1tOT1lXU3HY33jk5nN46ez8/V1r3eXu4/Jlb+Pqa253+95s8LvmUfBSWlVFS3pfRU/e\ny+Hh2czCzm920+F2dGj6YntbYejh919ra1paaX1jaWfw1c54YvDVdGNd8m1h6tzjz8jU6910a1RG\nQEteWnDe1dfg29ndYP1ec21NXnzeXmLn/vdb7uX2YnvT2nPv1NbcadzS9lxf8VJQa9jrfubt0WpK\nU2ZaRWjI3dO9vsHLzNptV0JISj85QUxCS1BQW+rb2sbHysG8v8DBztrl4G9ZVElOSD9DS1ZIT27z\n3OTS2uHi6tbW+mvO1PLa6PRYTcXVRcG8yMfAut3UeE1SOi8wOS0uPj87R9/ay8K/tbS7tba+wbrG\n18PeXV5bQT9COUA/Pz5PS0BiaVVtzdnYxsjMxszZyM91/GFA4q8wZaNfwrivvle1RvVKKjA0JSA6\nNSk3z2VpurmvrbGvp7LQs7JlVbpaOk0/Pjo/QU5JN1nrPj3/Yj9b23dtztrWx8XDxdNNua0yv59U\nvq6yuV+3UFM8IzQqHCE3LCI8zj1fubavrq2lpbmzqbBnx65DO1I7MS87Ozw3PG9NOV/PSE3NzUhc\nyv7238bNTMCs69egsLWprqzXxHFCPiMrJxwdKCkiM2BMfbq1rK2vpaK4vKazUsWvWULcVTUvOjw4\nLjxjOjNe3D5Lwc1Vz8jazuVyx7LYbKO00Keus764xEhoLy4uHx8pJiArQTg+xca7r6+sqK20qazK\nvK7QTsp6NTk5NDQzOj1AOEV1QUPY017vx8nvb8yswEmeqe+jqq/Vz7wzPCwoLx8fLywlMuNRQLi1\nvrKvrq++vqvLUL68VEm5Uj9bTk49SktbOz12STlI50BFbttwWvGvtT6goNWipau/zrg3OCwkKx0c\nKSohK874Ra+psayoqqm1wKzTQXtfPC1RQi5CR1NYesrJ2NHLyVBQ20I9SlhHOsmwOa+c6aWiq6zV\nrz03NR0sIRkkKSUlUL9CtaatqKSnp6e4t7VjPkhIKi09LS06SERP4uDJyN/Ew1p8ynlL0ulNrr1M\nnazOn6uu4L/VJTUiHCUbGicsJzO3wdujoqmho6mmrcO4y0I4TTgmODgvNkBSSm5m39NXZNnpRl3Z\nXmnO47qlaquVw6qdqrZJuTAiKRccHhQbKiolTKnEr52foKCip6W62b15MTBULio8Ojs7Sk/sZEL0\n0kQ74Xs8VMzY7cbFu5+0z5efv6eisDZHPB8fGRceGhklTTs6qaOto56jpKW6srJKP09ULjZdP0NK\n2OLrY1vTPzM+STAwTk9O3cm6s7u9wqSeTbCXrvSwrVIqLiQfHxYaLCQfRK3Gx5+epqWoq63AOkva\nKipFQDXrxM+st8m4uUozXzknLjYxO0xpvbG8t6ey1MNUPqjHIaqgZOGzrEM7PiY1KBclPSYlyanN\nsJ6oqKe4wb1OJyxBJiBPeU60r62mqLrGsEwsPDMoLDc0R9Prx622wbLJUVU6I9ChIz6Xprevoqtj\n7CMkORgUJC4sMbuqp52oqJ2wRDs/LB0fKjkwPqqeoJ+bnqC8Pj4rHxcfJSEsPsSwqa6poavUd+M1\nKCIcNp85K5KSnKKcm7neHBQmFwsRJDIvxqKilpirpaLKJScrHx4mL9+kq6WSl56qqtEqJRkaHRwc\nL+fNtamhpaa/xbo9KCk5LicvJjiRnDCUipOrrKIwKBoJEBoQDx+0pqOampSTp347PCYXFx4wP163\nnpSWnZ+crEMpHyEeGRsoSFzirqSmr7rH3UYvKjI+NzpOzsf6L8yOnTCakJivV88sLxkJFCUaGii0\nnpqbr56YuygfLiwdHyrLpKOpoZearedkYi0jHSdEPTdFtLXD51lXVDwnM1RSPk25rre9ur/E3EQn\nKJmXK7GQkqdQ7CMlIAoLHCYgJsSalJOgq5ykSBsbKyYjJDmqm5+qoZmgvkE5RTUlIjBJRDM4Rt9V\nL0RnytTovLWuwNq7ud1bTEFEOzUvKCqdksOtl5GbUjEeHx0MDBciPmfEnI+Nn7WmtkEfFRooNC43\nrpqXnaejpMQtIyUpJik2TsDK1dfrzE4/S0zZ29TDvri9vb/P2U4wLjAxLjA4H6+Lnq2YkZO+ORkR\nHg8KDx35qKOdk4iOtfQ9LBoPDhIry82vmI6PmKW6yDscFBkkK0BJwKikr0vTw+Q7LkTpx+1fyL/I\n1kM8SDUuLDNH6bvHP7uKjbCfnpy6IhMLGRoOFSrOnJWeopWRwh8dHSAdGh1fnJmenZeWn+wmIiQd\nFhs6w6yjoJ6lrGApJyMlJCk6YLOssLGrrr5FOT0uLC9C6M+vr+3blI+3zsOy0SYaDhwuICAyxZ+Y\npbuomcYgHx8pLi4pW5+bn6SkparMKiMsKyAjRrisq660t7w8JiYoLzY8Xs2sqbK1trvdTD4vLzgy\nPl7mw7i3Pa+Onsi/uq1HLxcTLCcfJDLbpp6suJ+e6TksLC0xMidDraettK6pqLdCLj9HLCUxu7G8\n1Fm/vTwmKD/fZVx7uqCnzf/JxTopJSg8Q0Bdv6ypqbBBVJudYz5LscBDJxotPC0kJ0q6qa+8q6Sz\nRi0rLC4yLj3EqaSloaaqsNc6JiEjIic4u6urqautuUssKiovNjZJx6qsvr69zD4wLS9O12vqxK+u\nsbk1K6ac9zVwqa67VhwlPTEeGytXsqy3tJ+ftEYxNzIxKiU6sKSoqaChqbRDJyUpJh8jTq2srrOu\nrro/JistNDI45LWjq7i+u79ILiw5S09DbLuwrso/L9qivTlesaeuuD8kLjcmHB0qSLqqrqyfnqnH\nTzUqKiUgKmm2raSfoaOpwTsqIRwcIiw/waqgnqCntN06JyUkKzhNy8ewqqy4z99sTD0zLj1k521X\n1+Fsfb+zvbiwsa2zxkAsMTIrISEuQtq9ta6np6/IbEw3Li42TObNxbuxsbvOVlBFPTYxPV/WzsvA\nubnDfVzv/VJCUG/y6uTb49fTbUJDSz49TmFQWtjKxbzD62rVzG1OS1ndzN12yrq7xdHT8F5KPTtC\nUE5GU9jR111ITE9RRUZUX9zN0s++vcbc187NyNfh2srL4WxUVFNLQ0Y+QFNPTEv/9XLl7vjpz8/R\nzcbGzuFpZVpNSEdK1L7Bvb23ub/BVD06OjoyODk9XN3T6OPg+t/qcmftzc3Izt/X39jwXFpvzc72\nc8a8u8DX+lldPzMyOT06QUNl1cnI0cjEyN7c3uXtak5GVmJWWvFrxKqtt7W2s8LRPykvLSsmKTQ3\n9se+ua+ttre6yvFfRzUzOzg8S23LuKytrq60xVA9LywwMTRCz7y8tbrAy29GOD1APT9O6NPLzdjf\n12NNVE9Z3MTTfrafrbyuy7VoTCsdNiQmJi5Xcq25s6imrdX9QTk4LCgqQM7Lt6ynoaSrw+laMSkh\nISgxPu2zq6Wkq7jRUC8pKSsyPlHZta61vMbcUkU7OEFR7cW5uL/Ksqzp49N6y0lNLzNRMTo2Sm53\nv/e8tb7USnpIPz00Q1/BvsCvrK23y31GQzYsLjM5TdDBsq+rr8PYRTkuLC0zQ2jIvLOyuMbkZUY9\nODxVbu7cvrjDPluiuEjZwK3OzDQr3TgpITNUSspcvqinu1LGx1Q1LDFD5XhXuaequMjEy2E2KS07\nQDQ8vLaur7eyuco0LzUvMDNR27W5xLu8w09DPjxGPkZX1r67vdlS/6uzP+K5rsdSSDRvOCYoN/A/\nV265p63HTsHDRTAtPVZ+Y/iyqrDBz8fjPzAtO0Q+PcWuw7ersb/rTjc5MygxV+17x7m5ssNeYGxF\nMjxBR+9q07myxDtNqatGTrmstVs6NnQ8ISU5ZEVL6bejq9Z/usA4KixvdTJHyqquvr/Er3Y1MT5K\nLjZjtbfMxK+sz0RFUUMvLj1u223svLbFU1naXT41QO3dYVbAsLLHWknox0z7a76vvMJuwFIyLS0x\nLzo3abavs7iyvdZLOTU1Oz1J2r+vr7i3vM1ZPzc4OzU+2bq6wLa+zvk9OTk/OkfX0cnKydTc41da\nVk1MZ9zs3snAu8VMSc/fPkDtwr3M6sm6zz8+Rz41MzZJztDOwre3xtZeTEA+Pz1LYs28vL++vc7n\nZktTY0tHcNv69fr17XRPRVxZQUpi6eTd0Me/wsjP1+pvTklQX/RlcvHd2FVCT11LUHPezb+9z8jB\ndlRUTktPXGTdzMvP21xNUEc+PUxfanzmx8XH1dvMxdRSZOZwTlD75OdfZ+lrUU5TePFeXN/ObVJ0\n0t/ey9fMws1fW31DTGxK8czR3crMVU9OTlZVT+7D2XHg5nZwT0Vh4llY2upw2nFNXNtfUtPKy8fO\n3dvUbExda1JWbFtOXl5f0MrOysnaWl1fSlRcTOnL5efIzVRo0m5eW01Z31tH/NpjXtzbzsLn4cfi\nS1zvSUnu6+3cYmDe+UxY2m5OWuLr79182s3wXOrcWWDsW01f6mfq1N/d3XBp11dO0s5r8dHj3vLX\n6Gh5WmxNZtpgW2F4XmZRXdHvW9zD3lV5293a5nzNzVlLYF1LTVdq7XxWb8rRc2ri22VWV3d0VfjQ\n4W3bzNp5f+fP31leb2FOXWNv2Obp3NTfaO/iV1fP4U7qw9B0Uj5Ubjo9zMlO37zN6t1/cdHmU9HP\nUlzM/0VYTkp57F/Zwdxb4upNU2pZa+FbVe9gUOvLzMrL0crQZl5vTkZa711i29nNx+FO78xJROdv\nTVzcbE9UZdH5TOu+0E/WwMpmZNHUV0NXZ1hOYejs4vXm3+Nv+udgXFxiX2hdXOfe/2vpfW908eDp\n5eXc3Nr5ad3ZbFrn3mJf4fVPas/l+9Z7S1LsUkhh2srN3cy90ExT+E8/RlZs/19oztBXVNnYXW/N\n1NzefGzuY01afV5QVldm8O3Zz8/Kv8X2U15jS0xLUcvPV9DB3F9+8lRTVePAxuPLu8tYVkw9Oz07\nSWdVX87F2+rgZFhcX1TgxdXkwsHqf+LodVpOXOpaR1Te6VZb3c5tWuXc2edZe89bRt3FcEV7u663\nw7uzvEc4OjUrKTA+U1jhwbu/yNj+V0pDRFXu2cy8srvJwsPkSUpRUUtGS1tdTlzpe1ldd3Tl1+77\n9dPRd2dURF+ro7i6qKnWMy4sKSQiLVrYeMOwsLzTTz06NTE6Xse8t7OvsbW81mhWS0E+QEdOW2rn\n0dhmT1deRz9J5tRcf7+2wvtWST+3nrhwq6O6Ly4rJyYiJjy8vMu6rqu8Py0yQzQvSLquuLmxrrPH\nZl7dYT8/Sk5KSVb+2uxdWVpaTk5OUOTG2GrDuNM/RFE7rpu65aiguCwrJyIoIyI6ta27uqyrxTUq\nLjM3OEK4p6mzube92EI4S9NyRVbRz3Jbbt3mWEpOSj9BTWldZN7KxsW/40U+MzSpmLXXopyqMCQe\nHSchHTSwoqq5q6i5NR0dKDY8PruenKKuubjNOykqRvhLRd+6ucXT29DvPjEyOT4+TM+7ur69x/h+\nUzgrKS2nkaOyn5mfNRwXFR4hHjKzm5uvr6y/LRgYHy/Sv7GfmJmpcFNGMCopOt+/vdHBtrjMSkNA\nOjAsLj3wy8a+trK1zEc9P1BGMComUJKNo62gnbMgFQ0QKjUoO6aTmLDMTjQnGhceWaahnpycnao+\nJSAlKTHLr6yoq7toVEk0KywvOENFS+e+u77Av7/STDs+T1NITm3XXryTj6fQ279GHhcQFC/DyMqr\nm5+/QCokIyYsObaempymtcRuMyMgJzu8oaGuubbBNyonKSwzOz1fv73Nz760u9tbU09GSk1s0MbK\nTDatj5a9UNW7QB8VDxpNtLnCrZ6mzD0mHyEuS9quoJ6fp75ENjUwJio9z6SdqMr8xUorIiQrPehy\nWs6yt8jUz9Pa3Ew+UM7JzsvTWS8ovZWXrs++rnMkFw4VL7euu6qeprhqKx0dL/jBrKOho6u6PyUn\nMzc3T72voqCySDlJPS4oKjBD1s7b576zvtV37t9rXFJvz8fL+Fk5ISmikJmvuLPEOSIVDhhDraqp\npKu7vHQlGR0yxKqfpK2vt+ssHiQ50LauqqWfqnAtKCkpLzQ5P/C+wM3q4OHT1Ofe0b++zWlX2thM\nNSQePJiNmKiuw1AtIBINF0Gonp6ludC98CUZGSnAn5ujsbq+3TQlJDa+qqWstLW5djAoKTVKVT43\nSHfh7fPMvbu9w8nP/Uc/TGzl/E09NSkup5CTnq/dXjovHQ4RI7ufoam/Ts28TiQaH0+kmZ6ydUhn\nTzcpK+ionqCvy15JOC0tMkFVVkY9OTxQz7q7wcnAuMhLPVDY2d3+Rj09Kh4/lYyTna3LOi0lEAoP\nJqubl52+abeyORgSHEielZutc9bLUjQlKUGvnqGvy1s+PEM8Ly42OTc4O0rJr6mtuMXRX0E+QVTy\ny8TrQDQpHi+bjZGZpLs+KyoVCw0Z0p6Vlqrbv7ZKHRMVI7GWk5y39U88PjInLNejnJ+r+DAwPkUz\nLCwuNT9j6dm9r6yxyGhBOjtG7srCxNtSQDEiJqePkJWftUkqLBkMDBEtrZiRm7G9udIoGBQYOZ6S\nk6C9WTc5NyghLrefm52sPigrOTwvKyUrRb+61c64ra262EY6PUbuxsDHfkk9OCseNZmOj5enwy0n\nJBAMDRdToJCPnbHDx0EeFREZapmPkqG9PjAzLyQeLbedlpmsMSMrOzotJyUv4rKxvsK9trO2zjou\nL0TLvL3cT0M+RzEfM52Qj5OfxykkIxUODRU1pY+Omq7L3DYfFxMYO56Qj5mwPCwvNSokLeWmmpim\nSiklKi80LyksVLSrr7/T18K3xFI6NkPivbvMZT4yMC8oMqORjpGdsy4fHhUODRIsq5OOk6C2zT0i\nGBMUJLGWj5Wiyj43MiogIji2n5mdskApKSwzNCwuP8+1sLXD39/PyMttQjtA6b285TkrKzk0MayT\nj4+ZpzweHhcQDhAg+ZyOj5muyEsoHBQSG1Cdk5OapsJEMisiIS1fs6Wdn7FEKSUnMDg3Nzp6va+u\nve1M5bm2xkQzNlLFyFw3LjU3Mb+Yj4+Xp1sjIB0TDg4YM6iRj5eltL89JhoTFiS6nZaXnKfASzMo\nIiUtPsmnnZ+1QCwqNEM+LykvW7SprMRNVryvuGQyLjduwtZGNTY4KTSekI+RnrAvJCoWDwwPH0Cb\nkJOYo6fJMCIVEhYny6WYlZifsM0/LCMhIitqrJ6hrs9BP0U9LiMhKku3q6u0wMC9wdlKNzAyQerM\n1FA/OCszpZSSk5ynVSYlFxEPER8ruJyXlJmbrDwoHBkZHi98rp+amp2jtEspJycoMjt0xritr7LJ\nQzMqKiwyT821rbK70+jU63pQQkpKXWNAODI/3H7Gp5yZmZ2uMR4dHB8kKi0rP72soZ+jtU86MTA0\nOjw4P+C3rKqstcPLy9J/UUhEQ0dFPz1AREFEVtW+ubnE+k5FSExi0sO9v81WPzs6QVjbx8O9wMy9\nub7J4+daSWVsX0w6Ny8uOUNZd9zR7eXHuK+sr75SNi8tMjxMzbqsp6usuOJFNDAsKzE7Vc/CvsbO\n3VdZ7djP6OfiXWZdWVhY4t/XydXuW2rW1dDe7PdfanvXv7q8zG1mXE0/LygmLEPIsq61vsjO31ZE\nPDxOz7uys7nJb15h+31YTUZIUltaSUJCS3fYzt9mbuXPy83W/f37amFcbPfZycS/w8vfSzovMT1f\ny7+9urWzu+JGPkBMX1tNQj09QE1OS1Jsy724tr3K6mNWTl9s/NrNxcjS8EtCRU1eaGpbWGrb1PRs\naWRZU1hOTl3exr64trzK/k0+PUldanvv7mpZUUZDSmXPv7e0u8nV7VhHPTg6P1PfycHJ3l1OS0tQ\nVmThzcXIzdryd/jr+3N29e317O/76uHiY1JKQ0dLYOPUysTG1XdcWWvi3dnV2vBaUk9LT1hy2s7L\n0+RyV05NWH3x4s/Kwr7DzvpYSD49PkJUfdfU6vJq/t7c5GBfZ3Dk5Or1eebXzs7a6GhdaPLe1tlx\nVE5RVmR+dnP729PY6V5PTE1Zeuvl5N/Uz9Pb9GpeXmFpeW1pY/fPysXK2XxaZXJpWU5KR1H10MrP\n32VOS01OU11z+enZ0dDU3+328dnT1tnyeH7o4HhkWFhkeO74dGludWlhW1dYWWDz29bS19/k5d/v\nX1ph7NjS0+9mcm1qYVZTT13q28/Oyszfa1RMSUxRVFdk/+jf393j7O/t/m5pbuzd1NbX1dfb6Xpf\nVlVUXXX4821qbWRt+/L+bG547t/l9nV37u30fnru5dza5e/7amJjYFlcZPLb1dLW3e50bmZjWk9N\nUV/02dHS3XdeW1dRUFVec9rNycbKz93ucGZlXl5cXnf58P5kX11kaF9fYXza0M7X6mRXWmR49+3m\n4N/d2+H/bGFYVVtndO7l3NbU1Nv9YFpecH/q5vVtXllSUFRTWmN/3dfV1t3o7Ore3/P4dH756tze\n3+X1aVhWWlZaaWptanX07uLh39/c3OXq7/HsenVwZnBqZF5YWV5q8efy9e3g1c/P2N7l6e9uXlRP\nTU9ZY3nw/X51b3ry7PLu8m5lZu3b2dHP1tzt+Whpb2BdWVpfY2929ezo6O/99evu+f3u7Ofo83Fr\nbXN8e29kXmBs7uDd3ODo6ubf3uP2a215/HBfWVJRVF5mZWNkbm90//Tk2tbT0tTb4env8Ojn6u1x\nX1pcZHJzamRhZG94b/Xt8Pb28310bXb76eHi4u94bWVmaWRdW23r2dDR0tna3eXyal5dZWtjX1lV\nUlRYWmzv7Ozm2d7r8nF5e+/l4d7l4t7c4en5c2xfXV1gYGNz7+Lf7PhuZGlufenh5+708u3t7nlj\nWlpia3Lt49/Z19fb4OTu8/10amNfWVlXV1lYXGBgZnbz7u3q3tjb29/p6u3q597f6u3r7XdlXVpZ\nWFpcXm14ePLx7N7a293f6O7x+HZnZl9hbHZ++P/98eze2NfY3ODl93BjWFRQU1ZcZ2558/9nZ255\ndvrk4N/f5e/y5enm4N/f3N/r/G9ucvlvXllWVVheX15ga/Xh3t3a2Nfb3+Xwfm9saF9fZGVz8+DW\n0crM09rza1VPTEpNTVJVWV9x+3v27eve2tvk6OL28ePj4ODa2Nbb7Pp7a2BqX1heYmRjaG1lZGRs\n/ern6Ojq5d/d3+10bWllY2ZpbG/z6N/Y0cvO0trxb19aUk5OTk9PVFtj8+Hd4uLi7O93df/t6e3i\n29fS0NTe6+56b2NfW1lYVlZTV15fam7+7ufb2djY3N7h4uxyX11dW19lafjf0czJx8nLz+BuVExH\nRERESEhNVl774Nnd3t3j4ejh39zW1dPV2drb4ufi+GphWVlaW1hSU1hdX2tw9+Pl5N3b29jY297n\n9m5jXlxaV1xhbe7f1M7Jx8XGzNlrT0Y/PDw9Q0xd8t3Y1dbW1tff6+7t49rY1NTb3d/l6e1+bmdm\nYFhUUVJUVldaXWt+7d3Uz8/R09Xc4et7Z1pZWVZVWFpdZvLazcjCv7/DythrTD87OTo8P0dSa9/P\nzMvLzdLZ3+fn5eLg3NbT1dnb3+t9al9bU01NT1FSVFhZXGRy5t3a2NbR0NLU0tXd621cVU5LS01X\nftjIwL69vr/Gz/NKPTY0NDY6P0te4tDLyMfGyMvP197n39zZ19bW2tvf5+z+aVhOSkhGRkhKT1hh\n9t3W08/Ozc3Oz9HU3Oh7X1RNSkpKTl7t0Ma/vLu7vsfUdEs7NDAwNDk/Smbay8XDwcTIzNLX4ujp\n5NnV0NPW2d3h9G5dU01JRkVGRUhNUl9x6tvVzcvLycjIy8/b7mdUTEhJSU1f5s7EvLm5ub3H3VVA\nNzAtLS40PEt4zsG8urq9wcjO2ejv9+Xa1M7NzNTfeVxUTEhDQkJDRklPVmX24dnW0s/MycfGyc3T\n4H5aTUlITFRu2su/ure3ur7KdEY4LyspKSwxO07fw7q1s7S3u7/Gz9nf39vWz87S3fpcTUdDQUFA\nQEFESEtQWGFw6djOyMO/vr/Bx87ealFJSUpSc9XGvLe2uL3J80o6MCwqKisuND5W17+4s7CvsbW6\nv8rW5O16b3d0aFtSTUxMTExNTE1NTE1OT1RYXXDm08nCv7/DzOH+fmf408W+ubS1tbvLaz4vKSUj\nIycsOVTMubGurq+zu8LP3v1rZ2ft49zb3t75Y1lYVFNVUE9MSkpISElMT1Zs6M7EwL7Cy+Dv7PjP\nv7evrayuscFbOyohHRwdHyg0cbqtpqSlqa25z2ZCPjw/TW7NxLu6vcDU/FNFPjs7Oj0+QEdLWXPb\n0cvFycXH0O5OTl70yLisqKajqK2+Qy0gGhgYGyAtTruqpKKkqrXFakA9OT5JX83BtrSxr7W4xepS\nPTYvLSwsLjE7S+nFurS0tb3I60Q2NkprvaujnZ2dpbLuKx8YFRYZIjLZr6aipau87TsyLy87QPvJ\nvK+uqqqrrLW62kw8Ly0pKCotNkPqxLeztLrL+j4wLDb+vaWdl5eboL0+IRYUEBQbKturnpucorFh\nMichJio2UOa4tq+usK2zsLS9vu1UPjQxLS8xOENb2si/xs5qTzssMVG8pZuUkpadtzQdEA4OERwv\nuqGamJymxTglHx4jLku+r6eipaauvd1AOjQ5PUZ3+dTY73dQTURFRkhVVF5RPTJHt6ialJGSnrQr\nGRAMDxQeR7Oem5ufq9g0JB4eHyxEwaehmpmdo8BAKSAhJDROyba3uMToTz82Mzc7Slrk3UY9xaWb\nk5GRmbY8GxMQDhccKF/BqaOlpa7fOCIdHB44xaWYmJSZpbk2KiEhKS1AT3fIyr6+yus/LysqLj/v\nubfRbbeknJSTkJm2OhgRDw4ZITe6sqmqu75YMCsfHyEm1K6clJaUnK3SLCcjJjA0Tl5gx8/Gw2VP\nNistLThQ0LvhOl2rnJCOjpGtNBkOEBAaKzjeyb6vr6+u3jEeFhgaMKmbkJOZnsdPOTZRRl5BMjgy\nSdfPvd8+MigpMj/LuLnKLzqsnY6Mj5K9JxgOFRYdMStDWNenpaWpRCQXERskv5qXk52ttVPk6vvP\nOzg0MFX0wbtuTDIrLCs2P1DUy8NFMq2ZkYuQlKMpIhUWGxUfISRjz6eerrI6HRwWIUHJnJybna+o\ntb+9Q0U4M0JH92JKTjw/RDpCNi41MkDfzdEx3ZuUiouSlT8fFw8aGB0tJ07EvqGueUEZFxcZQL2d\nlpuZpayr0tNCMUE+17zFvkMwLig0NTM6MjtCVr3ATSlPm5OJi5OZNB8ZEx0aHSkiUK+unKtZORYW\nFxk6f6Wdn5men6G85z4wUNm8vO5KMDExLz8vKiopOXe+sL83J7iWjoeNl6oiHhobIBgcHyDJq6Kb\nyTslFh4dKk9PsK6jmp6cpclmOUbIvLr4TD0yQDYxLyEkKDLYu664PyrvmI+Kjp2pLycxJScbFB0e\nRKaupeQkLRwlMihOPVGwr52dqKO7vbLLrbrY2jVIOzJGKionHyopMnXNv1Q3pJCNipanvyYtNi0p\nGhkjMbijtscuHScgJzMqP+a/qq2rrcyzsq+isrGzzLveXT0oKiosNywrKSQ498d5NaWPjYqWpcEk\nKi4qJRobKkqtobLsLB0jIiEpLT+1qaWpxN1N0a6tpqu4rrCys1UwJiErLzIyKCooNM3KUzCsjoyJ\nk63KJCczKiEZGizRp56vViodISEfHypBtJ+jqsFIV7+sqau1uLKnqLduJR8kK0E3LCklLUnO2C4u\nno2KipqtSScxMSwaFR0ut6Glvj4qJygjHBspU6mdp8BXPN+rqay0vq6jnqTCNh8gLDIzKSAlLkvA\n1zMfQ5KKiI+swi84UzAjExcs0aOhvz8xLzkoHRYaP66cnsFDPW24qrXcz7Shm52vVzEqLzErIx8j\nLk7X8TknJayNi4ybubL0zzMbFhImv62puT9N1k4uGBMWKbCiorpHW7y0vtpNzKudnKKsyMxVNike\nHiIrNzY1Q09PPTekkI+PnKqsflonGBYWLMCyq7Lav8c8IRQUGzK2rKu4yLa20m9Z0LCpoqanprC4\nOyYlICcpJiksOdXI+jYtoI6PkKayprrBJxURFjm0u7nH2quuSB4RExw+u7u3u7msr+Nh9cGuraqt\npqOwvzUnKSkqJiMoNl7A7josMpqNk5evrJ2t3B0SFR18xDpPz7OfrDYbFBokQE9XwbSvrLDRxsG9\nuLOrrKWpu+k3LS4uKSQjKjhe2lg8Mjygj5aZoKibqmYgFRkfOFUuOry0pK04IBofJS45NWy2tK6u\nv7ays7K2rK6prMhiOTAxMCwlJC06TWdFOztGu5iVnJmgnqDJNRsbICY8Mizvu7KvYy4kJSorMC80\n3769r7Cwq6urrausrrPfQjcwLzAwKiw5QkdDPj0/SkmymZmZmqSirMQ/JCAeIzItM1FM3M1hRy8v\nMTM6MTJDUcqwrquqpqKkpq6/ZTszLy4vNjg7Sk9YUU9RRUVCTtaxoaKqrayrr7x3Ojk8Pz81Kycs\nLjtIPT5BSUVDRUFizce8s62mpKert8pNPTo0Nz07PlFOV1hNQDk5Ok7m1Lmsr7Ooo6errbW7uc9I\nMychIyUjKC0yPFdJOjlEZ83Bxr6xqKSkp7G6yGBPRTw9PT9S+HRJPTQuMzg+R0rWtbayqKSmpqKl\nq6/JTjgrJSIgHyItMzdGQDw/T+Ppa/7Yuqunp6u0uLu+xdpcQ0BMX2FJOTAuLzM4PUZP3K+ttrCq\nqKaipKuvvd5ZNCYhHyAjKi4vOjw+S1d7ZlJX2r+zrayssbS3uLe+y/VWZO98SzgvKysuMDY+UnDN\ns660sqmlpqaorLC51EcvJiQmJiUoLDE4PUBETFlaXW3Yv7eyr7G0t7Svs7rH3fPc1WdENi0sLS4z\nO0ZYYfa/r7CyqaepqKessbnsQTQqJyclIyguLzM4O0JRXWH56dXCuLOys7W0rq2wucTO087zTT0x\nLS0uMTQ6QEJFTcmvsbCppqakpaqxut1FNyomJiUmKi0uMjg7QUpRZODm38m9t7a3ta+rq6+2vr/D\n1lo9My8uLjAyNTs/R0pLf7utraynp6inqa63y085LiknKSgoLC4vMzY5PUr6z8bP1L+9vLavra6v\nsrSytL3YQzg5NTEuLi81PUNGRkpaz7Str62opqepq7K+1Uc3LyspKSgoKi4vMDQ2P2DTx8zV0L6z\nsa+xtrSvra+3wuRaTkI6MSwuMjY6OztFW+zf4r6urq2oqKurq6+7zU47MysoKSgnKSwsLzc+TG3k\n0sS/vLe2t7WxsbKytrq9xtZnSD47ODQyMzU4PkVLWm195MexrbGtqaqrq622weZCNi4pJyYkJCku\nLzQ6QVnUwr28vr63sbCvsbW3t7q/yuJbTUQ8NjMzNjk8QUlMWuji49vBsrKwqqmrrK2wvM5YPC8p\nJSYnJygsLS86RVfexb28vb22srGwsba7vLzCy91mTkA7Ojc3ODs+RE9ZXPjl7urdv7CxsKurra2u\ntcTmRzcuKSYmJSYrLzI2P0tc18G6trq6tbKzs7W6v8DF0O1bTEdFQD89OTtCTE5VWFRh5NbS2ti8\nsLCuq66ztLa/z188MCwpKCkpKSwyNjpFVeq/tbi6uLi4tLa7vL7IzNRwXWFXTU1LRUVGRUhMTU9X\nXGbf2Ob22Lu1ubSvsbWztL7UZj80LispKSgpLTU4PE1f2ruztbm6vLu4u8LI0dzX2vtmd2xm+VxH\nRUlLT1VSTVVge9nU5Xp9z7q5vru4u7m1us7oWz42MSwpKiwuNTw9RWjaxrq5vLy7vLy7wMvO1+vi\n8WJcX2//8mhUT1RcY1tOTE5Yaeza2PNZb8e9xMC6u7q2t8DT51Q+OTIsKy0uMzk8PEVo2MW8vb27\nubu+wtDq7N7d6OXf3NPS0dtrV1daVE9OSkdLVV5ieuzzaVf0xMLHvLe8wr2+ztjcXUY9NzAwMjE2\nOzw+TvLZyL6+wsXGyMvMz9PTz8rM1djY297Z2fFfWE9MS0pIRklOUFv35OvvaFjXwMvIurzEvba9\nzMrjTEY+NC8wLzE6PjxBWPjXwb3FysjGxsbN3drQysbGztnQztjhcU9MTElHR0lJTFNXXfDd5+rt\nX1nQwtDMvL7Ivri+ycfQVUdANS8vMDI5PT5DVf3Rv77Gx8fLzMvQ3drOysfHztTS0dnb6ldMTUtJ\nTU1JSlBRWG5qWVxfX9TAx8a7u8G+uLzGyNZVR0A3MTIzNDo/QEdZfdrFws3X09ve0NDd2s3HxMHI\n09nW2ufwX0xNUk5PUU1MVV5aXnBz79bU7E9WzcTOxbrB0MC3v8zOckI+PzgyMjM4RlVMSlFXfcjA\nz+ba1dfKxMvUzcbDw8fO1dra2udbSkhKSkxLRkZJTlpz7/Tj19PaZ/jFyNjDvMnTv7zHyMtoRUY/\nNzY3NThDSkRIU1Zm0srU5Onh08jFxcTDwb6+xcrP4PHuclVMSUZHT1VMS09VX/jh5Orj3tvZ6lxL\nVuHn8s/FyMm+u7/FyttVSUM7Nzc4Oj0/QENLVvjQzM3LxcTCwMDDxsfIzNPc3eR0Z3FlWVtiXVNR\nUk5NTU1PVl9hb+fd3N3b2dve4Ot8d2/73tjb2M/Pz8/T4m5fWk5GQ0JBQUZMTlFf9uDVzMjIyszM\nz9XW2ebr3Nzi493f4el0ZF1WUVJQTElJS05SW27p3NbOysvLy87T1dz2aGddUlBTUE9WXF5v937t\n4Nzf4+Pr8+rk5+33/O7i3+Hf5nxjbdPPb1RRUFZSSk1dau/p8NvQ2NfY2ttoXvd8detq/+//63zl\n4+Xn9G5ea19TV2NaWn1zeXjz3/DZ197e2ux54H784nny5PHu7H586mFiaFdST1taWV997Pfa2drX\n2djde1//Ym7vXG133u5g4djj/ubf+Wnz91pffWVcYF1fXXvl49zl3urk4+fd39f8c/BeYGhhen1f\nXVlUV1/r6fna1/Hz39Xf8u7/e1hacWNkYXXf4+/e19/d1uTrbmheT1hYWlpbZnDscPHt4Nrh3+LZ\n3Nnb2t5v//NYY/xZX19eZF1hbHz892p8/Hrue+Lb+93c39jk7e9q6WRe8V1q/nF3ZmF27nR3Yu3g\n/n905ej1YV/ialtldeDh3Nvi29DsZ+ViWl5QWFpkdft6euDa2d/x6O3d52Fyfl1gb21oavbmaO/e\n7u3+6fH6d3L1amleavxtZXp/3eD56Gvn6lvfcm/u6917+N5yY+VpZv1n5m35fvTecHhsY3nxX3Bn\n/vhh5uLm8Pji4vD883du5eJwcHFuaWdkYX77++h0au/q7W3x92b7b33o5WR63ffd7mX04Hb2/V72\nd+tvbuj89G5mW3Fnce1laXftcv/m7u3p4e/o2G1r89/w/3hhX2zrYm7tZe1mWvN0aHfv5//f1d/m\n7OzfbFtybW1ebNfn6Wxv2+/t7mhne/1iWW5gXWtldvVjbN/b6d3c5Ovp7OP8beB8bXJveXJucWdh\ncu7vZfrxc29y/XzsfWnq3exfaeLscPfd/vrh9flq7uR+829q6l5Q+Gxab2tpc+Tva+Xi7N7zdu/V\n3XRp5ex23F1cfWzrW138e3xbbuLc7mfs+3vq6+tsdfny92zv9Xjm+uzubd/8XHTocmF9b+z8e3Jv\n7Wz55f7r9+f8X/T0bmZr/P7vbu54aHTr3njx72719+1vaOXvXWZ86/938Gb31vJc+el9b2/03uBu\nWHfj6edtYd7j6m1ffmx0ZGb3/mhm+Nza5Wlv5OttZfn/eXj+4/1zbXzr7mhmenZoau3j8uvf7ers\n5uhfad94W3jz835ne3lyb/txZW359WR44vZk99bc3vt4bG/ue3hx8WRf6Ohz9/P69/rweWV9+mZ/\n//v3av796O3u7mb87mxl7G5kdv1xbu7s7Xru7fbw++XsePnnaW1rYOH8aO9yev/7cnNz6upp7uht\nZu/nfPr0e+b6YX108+/h8HHh5/1y6P9eb237bGJz7+f7Ymh34+H56/d3e3luWHbfeube63507P1x\ne3dnev5p93j29Gx3dmd+7vDw+u72b+/pemn2+vXnbfr6+eZ1a3H77GZlbPXg4ext7fPw/F9obuzy\nfm378XhlXujicmpv7uDc9v/x4/B/9Fxk/nxvc+10X2jk5HNgdt7g5Xty9ux0+2Zp+fTd+W1/bGj5\n3/VxYPb679jg7G53a3t9amtsYW/c711pfW57e293+fL67/X4/ejq49j9eeXt9nL36/VcWvv2bWJn\nbXjmal744+F7Z3ft3Ov462X65vPu82xfc+bobnNZXd/6X2X/6+/x3drpdWv28expaHJn8/Px8/1u\n99/zdvHw/mHw7mpqbOjo83lu6/v+6fVlbXX3bl5z7eF3a2py7PdpZfHf3OX6+fZ6b+9+cf7/X23j\n+X3ufOflYWV47v5oePby7HZtdu/5eWtofW/o2+379eptcO9rfel2ZW3r4/V6b373+nj96nx8bWT3\nb2Ft7+jtfHHp3X9x//vq8Pd5dHh4am7x6fN29/H6c3D0f2nq6Wlxdfv36u509fd7/floZWpmYWfv\n6u198t7f7ezr6O99f3XweP3yfu/2aGB+a2hqZHxzbGt8/n7q7Pb87OHr+fv0em5xbWhfeejx7f7z\n+nrp6vp6//D8bHru6+r4/Pfu7vhue21c8PVta2lqdv9t9Obs5+frfn7zenpyZHh6d/d+9e3n+P11\nbXV183dqb29u6+f08+Pb3+Xl72dnaGVuaGhjb37q6/vt7fh6a2Z1dG547+/18Pbt7+7/aP/w+3N7\n/fX9/HRtdXT09nz+d3p77eLu+fx5fG909/p77f7w+XL6ann4d/fw9/Ptc3x95OhvdWhra3329Ozz\n7Ofq8fL5bWZrZ15fZWp7fvzv7evy79/m6e/+6ef18fx3fGtxd2t38vVoa3V6cGNwZ29wa/r1493a\n3OPe5OlubPlpXWJrcXRz+/d69/1wfHh0fnh3/Pn3+fv06+j3+/VzfHJ6fm3r6XNue+/t6en3/X52\naGdudfh99Pn7+nV1cXptb/jv8vn3evTl6ur49ux7bGZqdXv6fGt2+ffw5ePm6e3t/HlwZGZmaGRo\nc3xrb+/u7PL27+/18Ovq5eby6/Tu+G5+amdwbm1teW9qbWloZnD++Obr6uv77Ozl6XR6cW1w+/59\n7fDx/v9+dXdyfPjs8nVudm9z8/Ps5uLj9vr2bWhzcXFsdnn29H94a3T4/m9ubmV27vXp4OLof/bu\n+e/0/vf+8G5r9fx29v12dnBtcXxvfO/5/e3mfG93a2d0cnt5b3r0/PLm6urw+u3vfnl0/+18dGpf\na2xp7Obr6fL2fvrp7vn7/XVqc3J9//z39372+Hhxbfzq7PPr9/pvbf1yfnlzdHj+fPd3/vhzb/78\n9/Hy8Pnt5Oft7+z7aG5vanFxbW1zamx98Ojt6u72e2198/jx6OXo7floaWxveXp6dHZtb3p77/t8\n+330+O/0d/V+dvX+ff528/v27urq7O78fWVxfnV6anl3dG1sfv3v/fXv+PH1/Ht1dvt8dX53c/f3\n7unu+XB89/j99P15c2V+9frp7f58fvn9eHZtefd++fLr6ez5dHJzbGx0/f/y7nZ69nx5//f9fm1z\n8O3r9PLw+e/t7O35cWhnY2dnbHV3dXZxdXt/+Xvy7vDm6ujg5vj5+f52bnlzbnR5+/tva3f5+fDr\n+/P8fPD9fff5/nT+/WhnbG798PLs5e7u9vl+e/V7c3Nub3p8+/j79e3xeHN4//nx9/5y/fb9f3F1\neHV9ffnz9/Tq7fp9e354ff1z/vX38f10eHd8dnR4d/336/L/9vD2/nJobWpueXnv8ff7/vDp6fL7\n8e3w/H/6eWhvbm54fHhwe3v3+nv8ef1+fvHt7Ozt8O7z/vL+eP1tbm5scm1ocvb4/X3/evTt7Ort\n7O3v/X13/XR68XzzcnF7cm5tfHJ1/Xt4ePn++vX87ezu7u7u9P7+/nhxb310c/72+X51ffpydH1z\n+/z87vD0+e3u+Pz+eXV5c/n4/Pfw+Gxwb2d4+XhudHhpdPT08enm6+n3+uPl6vVyamZmZnPt9O/7\neHt893rs6vj4dWlrdWlmanP09uzv7uro5+vv+fx0/3137/N5cn7/9/N9evPuemhpbHVua3z29fz7\n/fv9/vLq6/V6fHN48Pd+efz4+/n17PD78PN7cWpmamhjaWtsaW739fX76+Dl7O/v6+nt5OXw7Pj/\nfnN5cmZqb2xsaGVma3NlZfru59/n7uru+fTp4eXm9Xf89ntzfHRybWJmffV5enBtcGx2bG/48+/o\n7e3l7e/08u96dXN8+3dvaG307nr27Xp+fnz/7uXs7/97eWhzd3J0dWpu/X55ev9wa/rye+3z7uP2\n7fR18Obv9+v7+fV9fmxreG5qb2toZWh4dXju6ePo8O3z62978fTzePTm4fb182hz+fZrY2ZiaWv2\n7vd1/+bx7Ozv7vf4bm1qbPJ9d+72/Onq+n15fvdz+vf8fHR9anP2dv7y/u/u+3t99nPy6vX4X2Jh\nY25p9vbn6vDd6PHu6H1t5+/593Jrdmt18W9u7vxv93xza2hxd+5wde396un47H/v4+rd821vYHTo\nZXluWe3t+3Jrd2Xr42pl+fzr3fh36eHc7Gv4fGZpXvXeZl/1b27h5nzb0e5nXF964mxMV2p25Nvp\n59beftzbal9WWGb3Z2Le09jaeWBpaVxXaVte9HTb1M/X7OH6ffdfX11eferpeW7u9ujg+XlpXlZR\nWVleaG3m2NLLzNHf73FWTEE7QFfJt66rrbG4yG0+MSsnKC06W8+/vcTP6GJRSU9YaufWy8rJxcbG\nzNbZfl9hUU1KPS8iIMWbl42NnL4iFhIPEx0iLM2km5OPkqE1GA4MFCe4npqaoKuzvt06LScmMErV\n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\niIyNoSwcDhAXGTc/76aekY2Oj6U7Gw0OFR9SuqikqaWsvd03KyMfJis4y7Wsqa6wvHxGIRo/v6uO\njZCVtmkjExkPDBIPHz+sjo2KjJ/OHA8QDhsrL8GsnI+NjJGhVRoPDQ8bMbynoqCossL+TzQoIh4f\nKFKuoJucn61gMx0SGj3BmoqMjZCqPxgODQgJDxIkrZaKhomOpSsaDgsRGCHaqJmRjo2TnrUoFhAP\nFSNNs6ajpa7DYTQoKSgpMkbDqZ+dn6zHPCckHBUpuKeOiI2OnNYrEw0LBwsRGlKflY2LjpOmQyAU\nEhcbJEm9qJmVk5ScqPwhHRcUHig9u7Cqr7/HRDxVRUlKP0dcz7yyrrO/9kAyLSgpVrSrlo+TkZ3n\nJxIMCwoPGSPCoZqRkJOXorlAHxcVFBw1x6OYl5abqrw4JiYgJCotRezGtLa5wU4zKSUqPMyvpKOo\nrL5rTz06ODc9NCk6vbmej5SXnVokFg8REBYpM060sKmenZubo6vJLywnHicsLUZs0LKtpZ6kpafH\nSjckHx8fIigvQl3BrKijn6Stvl08NDY/UPPPy+pOPTUvKik6y7efl5mZnLFJIxkXExUcIza/q5+b\nmpugrLlOKyIeHCEqNdSuo52doKi62EszLCglJSgxRHDPxb67ta2srrC/ZDwzNzhAaWNXSj06O0rk\nyruvrbS3w0k9Rj09bMm+uLW63klNTUBHSDQsLCwuOe69s6uprK+3yGxOPjk7QFDt1tDNyL67wcrZ\nSD06Mjc8RGDzz83v2cng2tB8W11s/dO+urq3uspgRz40NDc4RV7axMXFxdLT31VKPjk9RV7Pv7m0\ntLi8xt9mXU9IRTo2OT9c2czKz87T8PpeVlxUWGf6a1FcWGTSxr66vsfY69zc5v5QPzIvNT5hyLq2\ns7e/0FtFPDo8Pkpm18nHysPL1cTJy89URD06P0BGXFvfz8/Fwb2+xM3/aFNDREM/PTk/V2jDur25\nvr6+0c7dZV1LRUNDR01PXFt25PLM0tbXddtxWXRjbmhUXVFe0c/HxsjE0M/RXEk/ODk8RFTxycLA\nvb/GydL3U0xORj9JUmns0sC+wczfaVJNRkRJX9/b7WNNSE9KTvDaxbq5ur/U4/peT0RNSUVfXmzd\n08zV2NHvU05GP0NZ/uXNyM3L3PvnaHXm+9ri5/9hblhpek5u6eTV29vdaunmZVlKPzw/S2Xa0726\nv7y+yeBcT25LO0JHSF/Sxry7v85iPjg9PkBM9MzFwsTW8d9xVGPcfVTj3uDb9OxtdVpg7mN79Wdf\n5tDSzth8a2lHQk9KU+LkzcnS1+5zX1JXZfTbzdPa3d3rW1vc2mhWWU1Pa1VPXurq1cTN1f1UVGpw\natvQ0tzeeVNaZ2jt1d7U/1/na3ZsSElMTVl24Ovo0NHg0sjV1NDucllYWUdLZe/i4t/X2N38V1dm\nWlZr5dfnZe3r2t107uhyWVlcVGh7etrY1M7P3PpZVlJOWlr42NPI0uhpUE9UU1xTWNve18rJy+Hm\n3OZbUVVTTlv/cvnr3NPdef5dVlBe9ejV0tDQ1+lrZVpRWXb84/Dq3n55bGZabe5fVFnv8+nPzdjZ\n5/p7X1xOUlpd6NbPy8/k+GJWT09WXGnm4NvU297meHltX19q9+p+5flh7+je5mlhV1d77njm5Orn\n6Op5YmNudHv67nNv3Ojk6W5zcH5xbHFgbO3p7d/a2/JdZXZtfG5sZWF3+mp27/jrem//5efl3d7f\n4PPz92htYFxhX25sY/HueOnn5+fu+WFt/2hyanr0+/7r4eze29vtZGNea/X0aGJbWuXY1tXg72lb\nX19YZ2tu+2xp+OPd3up57Pb6fXVwdPvr3Njl/Pn9ZV1gbfZ08/b49W3q7O/r+mpXVVtp9ube2Nfd\n5/L3/GprXVNrb3nu59/t5+Z1aWdpbvDn+HB97uL1b2NpdHnf3+nU1+z4eXpkV1JTWmNode3n4eDl\n5+DceXB7a2ltanHw8u/w5dr5c3tydWFibmpv6Ox94uTv/n3q3+lnX3VobHZeZG/8fOre7uzk8fvt\nfGFiYmh193z04Ojp3+j8b2589HRn7+z87u9zb/x7cHh3X1pt6Ojt397q63BgY2V+eG95+n1mfdzh\n3tb1aXDw8Hzl8PZ2Xm1vZmBhbG/+6Pf13fH76v91/u33fPteZXzyffDe5e9bYG9p7W1icuvs/dbk\n5932fGJvfV9nXWrw9/515OXf8m7s1d9q7OVtZGlmXG1hY+z4+3hved7YfWNq/vn3dfTq+X9v4OHn\n5W9nbXlpbnT18V9n5Nj999/p7XlqZHLq9m1/93BtamfxcV5eZ3B88+Xa1ttma9vtb3xz7en3YGPv\n52lifP3uX1Rw99/dbnf773Nfdn189/zt4N3f6ODb5fhmYmdhaG5paG/17PN5Z2Px5n369+/v5N3o\n831rbWx5+nJvdvh/aWhyeunk6X1z/Glw8nxxfufl8/fw83trYGRv/XFs8+bn+fLyePvj3+Pn7/Z5\ncm5raW/+9XBeUUVDTl/dwLexsLW92E0+NjMzNjxFTWrg1MjGx83fdmBWVl5ibG518/ni2NPMzNDZ\n72laTEddzL6yqqipr79sMyciHh8iKTZM07WtqqeprbXF6Ek6NTIzOUd1y724tri7wtdbQzkzMTE1\nPEv+z8O9u7m6vL/J13hRQj5Uzb6up6ansclPKyIeHBwfJTRHzK+rqKWoqbHC3Ek5NjQ3PErZwruy\nsLK3w95KODAtLS81P1rYw7y7uLm9xNh5VkY8OEvNu6qhn5+qul0pHhoYGhwkOFO9qqaipKeosshs\nOy4pJysxQ8Ovp6Kipa3AXjcqJSMkKC5A47+yrq6wucDM+F9LPTo2Li9PvKufm5mcrMk4HhkWFhod\nKlLOrqWgnaGmqr9RNSgjHyArOtGrn5uanKKwXTIlHh0eIy091LavrK60vttcUk1PTkZBPTo1MmKv\npZyYl5mq6DIdFhMUGh4r3bWnn52corLLOiUeGx4mMdWqnpqYmZymulsuIR0dHyQvW7yxra+50kk7\nNzU6QlPlz8TCxsnWVzxMuqyinZuaqPg0HxcUExsjLO2wpZ6foafKPCkfHh8nRL6onZqZnaax3zYr\nJSQoKzdkwbSwtr7+Oi8rLTQ8UtbMwry4s7bA4EQyJiRFq5uTkpKZxCcZERAQFSU46a2knJqgprs0\nIxkXHShlp5yWlp2owUAyKycpLDdXxq+oqK7MNicgHyUuSsm+vLm6trOytMhHMyonJSrEm5GOkpqk\nPhsUERUYGCQ9yaifmpWcrj4dFxYYKcejmZqeoa3HYkFBOikmKDe9p56dqPEqGxkeJzx62sfBva+p\npqi47j0sJictTNVe0KaYkpSdp8wiEw8RGh8nS7elnp+gorQ+HxgaIjLJpZuZnKm0yD0tJyYuNkW+\nqp+frvwxJCEjKTlKSlDmuauqrrnUSTg4StzN61pZRy4p2pyRkJy1WCYaGBojLyssPryin6Klslsm\nGhwpTLispaGmrs1KPi4pLDzAq6mmp625WzMrIx8fIi5Xv62prLPB0Nfl/Pff2HRMPzk2NSwkOqSS\njZGiuz8kHRscIyMhKUKtnZyfq9cuHhsiNsi1t7e5ubW4uLvP5uHfzdNledTP3UgzLi4uMz9ky8fH\nwr++wc98VFBg3szYTTgvMDIvLt+cjoySpt86Jh0aGBodIC3NpZybo7hVLyMfISxKwbatp6OlrL5b\nOjExQM+6trm4tbreOSkkJikvP/2/ub3EyMTDzOH/3c3dTzovLjQ9SEB6o5KNj5y9PSgbFhMUGiMx\nzqOZmJ2tUSwfGh0nO8KsqKSipKmyz0c2LzRSv7S0vczdXj8yLSssLTJIyrWyuszc393qb/zr5HpM\nQkNDQ0pdZ8Sjl5OYq0UsJB4eISUtMjM90K+nqLR3PTIrLDp2ua61vr++u7i9zN9aSl7Sxcp7SUdY\nWExHPDUzNDxpyMXXX17awbu7vMHUXkU+P0JET+DXauKwop6jt3dJOS8vMzc4MSoqOH7Bu7zAyPRJ\nTPTJwMPeUUhHTe3Fu7i9zM2/urq/11Q/NzIyNDg9R1flyMPHzNHS1djh9nZjWlJMRkZNVF14fnPE\nrqmqs9D77F5ZeujmXT80ND9OTkQ3Mjc8RvfCuLa+7kpJWODKxcrW1sa4r662vs9lSTw4OT5AQkdN\nUU9IP0JW+N3V1s/M2HRaUVNcfdPHyM29r62wv97b2HxeaNzbVzwxMTk5MC0uNkNd2cC3t8DbX1hq\n28q9uLzGyL2zs8B4VlxeT0hJTUxBPDs+Pjw4OUJb5M7Cu7i5vcTaVUVBR1Vretq7rrG7xb+1tr7M\n6lU5KygqMDk6ODtCT2vXxr/D0+91eeTOwby8xNHPv7i5wc/U1NntY1VJPTYwMDI3O0BLV//VysO/\nv8HI1+9jWWT628/P5mbLubzFyb2yuMPK3F8/LissLzU3Nz1HTl3eycDEzNPc4tjSzMfKzc/SyL25\nucDP4u1gTUdIRj86OTs+QUVHS1bnyMLEzNbj7u3q+2574t3c52r8v7K0urm1uM7t6lk/My0uMDQ8\nQUJBQ1Hi1M/L0uLm3NTSz8a+vsHIzczJzNbd1M3Mzc3fUD84MzAwNDk/TGzYycbIx8rP2+Dk6O7w\n5/VlXlpRd7Snqq6ytr5aSEs0KyYlLDE7V3zdzMvGyfxo927s4d3V3c++uru/ytLfetjHzN1dXd3Z\n9Ek3MzE0PD9ESk95zMC/yMzLycXK32VSU1VNTmrX30vQoJ2orsC+xkQ7IRwgHy4xMHDTr6mvr9dP\nWkFLPTv92ryvsa6yt7nYXks7PTo9b8fEzOZlSjw2LzA6P05vzLqvrbS9yO1MPjw7PUtl7t/Pw8nJ\nvcs+MLier73FxrZePCQfMC87OjPZtquzzMVYPzoyOD/4v7y5s7CwuMfpXVtHPkZITlnLwmB35XdR\nOzg3SfH51MrKxL7MZmFyT0BJTmPVzcnGwMJ6SkdJQiwypJ+zs7OnrvEtHCguKy8uQ7ypsNC9vFs5\nLi08adrSu62sr77abWdePDxLadp03d3cwdpuV05WSj44Qmbca9zAvbvU7vRzVUJDSGvb62nTw9pT\nQDxESzYuqpilq62prUopGyIzKi4+6q2otdPKuT0nJypH2dbLs6asu9dLVlQ8MzzTv8DA12HAvFk/\nQvVoUDw91czbWtbGur1gTmn4QD0+QlhuV1nNy2tPXllNSEZMOLWUna2usKhDJx0cOi8uRlyvqbDP\nRM9NKCUnQ8jAu7SpqrplPUdIPz9dvrSyw+7Q4kM8z1A77svVaGRNYdxVRdS/6VxIQ0xnRTlH1c3W\n7trCyd5QTEtFTE4+XJuTqLK6r8QoHxkkPS8/bsCprLtQQ1stIyc3v7Gvr7GttHM4Mz9V9dTKtK23\nz1tLQjQvUfTdx9DM+mFIQk5GY8rSXWXT8VFnSEr57m1d587KzN1aZldLUlhZTaiWo7zKzdUtJR8k\nUUtL4cq1uco/Lz01Kiw/vKyrrbS3vl8+O0rdw77Du7fFXkI8NDFuyE1pw8hMOTk9fdZd3bm6zPBd\nTV9uREfs0trd7uPZ4FlEPj1FZWBHtJaatNTixz0qHx8/22zj9c63ulguMjovMD7csaqstsXG3kND\nSnvCurnBy9ZMRkQ3Nkq8xUtp+VpIPD9jvrvYyMXwYEtGS9zI3Ojd3ntUSEdGWF1FP0Lnxsxespid\nulddy0AyJiM+5tTcTe7GwlovMTk8P1fFtK6yxmJQTEtOXtW8tbjE3WhaWk5JREzOuHc5XNdeP0JM\n4sHN3t/cXWL6T1jW7E5OblRFaM/NztpURUpdYGb3XqmYor1l1vExLiIjNXW9x87R1MtbNC0vN0nN\ntrW6tLjWS0ZPWs7EysK+xexebVxPRj1Kv8Y3Mmm7xWZLUM3A7kNCTP7M1l/lxdBWTE1ESm/V0dLg\nV09wXE1YfWrInJms0ENVOzEqHShXtrC/eVjh1EguLS9Ay7izuri52FdFPkbfurm9ub3M3VtCOj9J\nOz3g2UxLw7bD5kQ+S3hbSGXJu7W7e05aTj03PUn0wsnT19bcVEQ7QuXP4quZoL1ZSToxLyclOr60\nt8Z2Wk9HNC4vOF+9rq+6vsRkQ0REWcW2srS2x1dFPTs6PUdLTeK+y2LXv8xQPTc8WczIxLu8v9Zc\nRjw8PkBO7dLY28zUX0o/Rl7gy8K5pZ6ty046OjQ3LixI1Lq83FQ/Rkc8OTVD27ywtL7Na1NOWFz+\nwbeytMP+SkZCPDo9RV/OfUdnxbnE7kg8UeTV5NXHw8LXWkI/R05YVldRWm/649/iWk1f2ci/w7Sp\nrLHRQDctPTw4QEbGxsTWQj85Pj8+TFHPua+0y29NXHllfNu8s7S79UlAPj89REpKWevT19DHzN9u\nXExLZt/RycjYbWJZVE5NSUpSTUxZ38rT5OfU0+bV1dGzqay7d0c5Njs4Oj5YycLGX0E7OkdKSEFO\n0r6zucj+Um374trVwbu4vt5OPz5ASElQVkVT2cG9zOZZa+NdTEdmzsTI+Fpee3FVTU1KRUpa9NzY\n1c3Iy1srN6OepLhq0TfZPCUlJby6rbZTXzW/ejwuJD1LrK2/u3e63u9IL0/srq62vFN6Tk8+Mj5G\n1dDwVzxN3bm2zehb1NVnTDpEXcO5x+VJSk5RTjo5SdTAytx37M7C0ywps56frsrKR87ZNyQdMV+0\nsr9nOM67xTUkJy+/sLC+0727uMlbPztUy77I2/zTy857PjgyNz9HYd6/uLq+209DSV/gzMXEw7/F\n3Es4LzRO2snJxL7Gz2k+MC45Uda/u8HQ2N9bRkZRctDDvLzF2DstRb+3vt3IyMS/20ctKi87VM27\nvL+4sb19OzEuLj1q1+nmyry2sLbZPzY5PD9JaMq6sK60wn1ENzI0O0RY5c6/ure9z3lKQj9FS0xZ\n683Dv8LL2dPTfVpPSD49R1P51NXkZXznfm1OSUxd0MXBxsrHys3jWEpGVP3n72/o7unsb1dMWF5i\nXFZaZM3CydPa2OL0b1FIU+vU3nZaSkdIU1xXXHjYzcjK09/f3mlUUXPYzcjOzsjFzfJkU1Fg/F5J\nR05LT1pWVFF93drdbWZbe+Da2vfZzsjN72hPVl9q/mvb19HS5O1XWl9rfV5uXWre0szW2uf4d1tV\nTlJkcXNje+bf5mhkYfne/WFSWPfZ0Nzp6ejk4+xpW2F77O5uZF1dfN7W2d/e3Nzi6WleZfnj7/J1\nem9cVUtLUFxlYn33cf7t4evr2tfU2+Po7ODRzc7U1tPedFlRU1RZU1NZWllRUlNWWVtpdt3RycXK\nzNz1b3ng5efi2tPa7V1PRkZNWWdpeXp773JeV1xt8tnNxsXJ0d/j8XFmYmVs4970Z1xWTUlHRkdL\nVu/c19jY1NPQ1t/n8Orf2dXPzM3S3u5xXVdZXGdoX15iYFRNTE1PXHn39+rf3Nzg5vd58OPZz9Ld\n9mppbm5mZ3bo3NfS2/dnXmf78f5qYV1dZF1VUVlo/9/c5XhrdvPo6O7q4djS1dji8HdvaWBpcvjo\n7fhtb/r0/WleXF5kX1hYX210cnb86uDi6/Xu5d7a2djY2tzk93B28efk/GhbWVpUTklLVGR5bmt5\n5dnc4/Du5d3Q09jZ19TZ4vZ2bHX17Obt6+Xe4e94XE9KR0hHSExVXF9kam/45NnW1M/Ny8vLyMfH\nyc3a/lxRTEdBQENHTE9WXHHp2c/V3u755+Xp8fLq5NvX1dTVzcfGxcTEydHgWUU8NzU1Nzg8P0VO\nX9vLwr27ury+xczR2/FhV1daaOna0s/S2OphT0dDQkFAQUNHTmbf0szIxMPEyMrQ3OPubWJfbXRs\natzHv7i4vtBeSz46Ni8tLC0yPFbTvraysLGytbrE31BAOzg5RGDlyr65tbW3wu1IODEvLzAzOUNb\n1cK7ubq7vcLK1n9WTUxOT1hfbNvKx9/1uLO0ssHNTUlTNi4oJyYrOUdbdLuvqqaqr8bP3lBFNjAt\nM0FluLGxsq+rsbx0Oi4rMC4tKy89V8K5uLi2sbS2weJYSU1DQT89Q0vpz8zGwb/aR8Ksvbv4ccxN\nzTwxLSlCMzU2PurRr663vbq0vc9JQUE/R0RBTty/wL+5u7jD1mQ/Pzk5NzI6P1vhzsC/ubvBxc7W\nflVIR0dFSkhNbtDJysTGv7q8vU0x0cJNajZDw8fAPEn+Teo3Mzc9R0bzTtq4uLi7uMC8v2NxZFdP\nSlBIfOld5ujg3PJUS1tWSEZFR1PxaHrPzcS9vsLL1Ofj6XpaWm9bbmlj4G1pXVRjWlpQRmNeUF/c\n5+fZeM/LyMzc0NTV03ZPX1xPT0xPTVtgXd/m39Tb29/Z5mrveGJkYldZ9ePb2tLTz9T16nFgcllO\nTVRfWGJpbdvUzdjcz9bU62ZYUFRMTU9PXe/b1dPOzMzT5m5gXFNTT1JidtfV08zMydHZ5GNkX01N\nSkpPTlpcXGT32dfT19XV0dTw6G5rfV5qY2Pzaf/j5efd3e3xbflkW2ZXX2JeaXfw5dre1s/Sztr3\naVhZU05OV15e7ene1dvP2O3ff3TsXVNdWWztXf5xe9vy4u51b+tkaexTbWp43vDr39vg1NLe4+bm\n7m9kZ1JTXk9WbFVpYFPWeuHOYdTcadHn4ONh6ttp6eVd537v21/acU/nTVHoR17nVc7sesddz85M\n3V5P/VZv+/Pud9Pd1tfqzerc41niW0ZXTFdoadRN4r9Oz9ROxU5YyD3izT7BaVPASMzXScFvUNZN\ncM9H695N0fFdz2br1lLl5UbOTUjFPcvKN7naP7JMPq9BW7cvu7ors8ssq0strD08qypLpyXDsiOo\nxyWmcSykOi2jND2oJMOsI67iK6dHNK9G6bo1vuRCtS7Sui24SzysL8e8KqdMN6grwrYprj89sC/b\nxjzETOTeVr5IzM5Euj98ujXK6ju0PVe7Nb/xPMBPa/RVxUi+VEatN829Lqw7Ra0pscQnrUVFsy/M\nvzK1RDutNtfNNq9LUL88u99AzUrNyj1o0WzPTW7BXc1ZTL9U/k1Mv01K4FfN1kPIZdPCOc/fWMZC\nU8RZ3n49uPpJzj29yz/UT8vNP1Ld1NNOTdHQ2UlMz+9qVlXZ2Wxf3tbVblfX1//gU/3QW2JtatZV\nWe9q5FPt0mHfTmfIUOdaS8BfZdtNxdlL2XPY1Unh9ebYS+Pcb9xPZNVjaWle029b32HgfWnqbOVh\nYufz821r4et8537k3vlv4+Zffmpy5VZq5ljq8VzYaPfUZ+VqXdp3X/x23e5i5e7s4mn52l/s8Vvc\nWVrfVfBoVdVgc9Zi1N1f5lpt6Ff4bGToXtna/NR18dVl3uds7GZtZmX4Xm96fO5qeeZ14/lm6F74\nd1zi/Pv5Y/7q9/t28PDn73zXe+PxW+drbPNd9d1e7/Jj311+21rfdVvgZ+f6YNr2fudk+Pxo4+/z\n43B98W5ucfdtcPpr3u5u33L46lZs+lv2Y1rqZX7bZuDaY9zkcdxyfO507W149+h+du3u5v9ddvJo\n7Wp3321xeF7ub1/zY/PrZ+314ept7Pfg7XB2Y+v3X//oePb8dex+9f5u8Xbw9m7q8P57aOXqafl0\nfuZfaPF/7nB+6efufN75/fdj52lk+Wb5ZmH4bFx26XfpfPbqd+np+uPqcO77499mfuj5dl153vdo\nf+rqamN1XWZzbv5t5etuc+3bcVrr5m5je+hfdOXq4fro6/bs7er4X+7hXnr6/fxbdeb2dGZ2+W30\nde5qZtp5eOtv4v9e4OL2/V/t/WZ66N5fZPPq8V/17np07ehL5cbsVmPP5GRba91eWWPdb2rs53d9\n3ez17OTp9G5r9XJfWGxVYsfpYdnd7lpl+mhUX3vv+Vfb123V1uz+btv1XuZ3aPldZn1qc+fs+vDr\n8WZl4OldadvkZl192/dh8eFdXuru9F1z6vh68Obp5e906n1s621b+mxt6vbldl7d7Fzzb2jsW+vc\nYXPu7OHk6uB8e+Zx9m9caW9l/W122ujq5/Xd+V/8Z217XHR7eHVq/3lydGR87Xfx6ersZ/PudO1w\n7t7y6+Xz3/jy52R7YV1lVXFzeOf/dOvve35x6ex/7nry5Oni2tLP1NDT09fz/GNQS0FDQ0BHSEtW\nXfzs5dHU09Lf3en86Hnw3+fZ4Vxc2NNROcujvNypqKnD7eA2PiccKComKTHpvLittKypyX9PTD8t\nNThDyMa9raaqtbrEZEI1LTQ7MjZGdGfo0+XHx/783NTyWWb+1dJzPEWfpVirqaWtP2QuNzUaIiwq\nODlJv7Ct4k67bEI+Nmz5ycnVrKqvtL24vdlFOkpdQj9NV3xfSkZNVT46RkxVUHTKxcHJyM1wZVxB\nMOugr7eosaGt9EAmOCoeKCAs7tzBw7Wu2/RMMj8/RlRTuriyqrSvr8btRktNQlFPc8vQ2XFOTEU6\nMzI3OEZWZce9vL+9v+56dU1TVEQ8v5+sr6qwp7rgRSUrKScuJSxARse+wsZczMnu1UZRz9i+zd/G\nzL29xMjWwcHLyuZ3aUpMPjQzLzw6OFBR/NrTvMPDwdLAy9/uSWRXRkozP62stK64r628vj8vNCsz\nLyQtN0u8v8Pfbb7Fzu5CTH1v+1dc6ty4sLi3vL64wM9bR1lGPzwvLzQ8REFJYHLMysnLybq/xMr0\nVEZDRD46MnyhpqynrqSovnEnJysjKyMgOli/tMHA3s6+XE49Ot3S2OPzvba0vvu/tL3LZ+TX2nVC\nPz07OzMtNkZWbeLKzr26xsnKyMnUTjY3Pz1APy5Pm5mqpKujofU4HR0rHigmHu+xrqzFu9VN8S0t\nOzzFxcm5uamsvr5fRs61zErlv7zOSTQ7QzgwLzU+9OhP3cTCx+Tt38fLXmNJRE4/Q1BWR7OUnaqh\nrqLEKiQXJCkdLSM3q7OtvceyT0k3KD5J1rzXtrOxrMXHzF3J1F9i7L/MY31MSUM2NTI4P0VVVtDF\n08fPz8TLz/p3ez8+RUJOYORAtJOfrqa1p2YqJxcoKyA2KU2ssanDwbQ9OCknPT/Hvcqsq6uvz8zP\n1s1KQU3ew+puXFnuRzUvMj5GS1BVyMTJx8+/wMvKbOT0Pz88Q1dL6NtHyZuctq6yrsIvKxsjMiYw\nLT62t667xLTuPzQuPERmzNnGsrK8ubu9vsp2P+XYT+dMX9hvVS80SDxJPjlm077Y7bvCvsJ37Vli\nXDs9RXjT2cTMx+7Jnq35vsKt8jk8JkI4Ki4mQFxI1X22r8DKUdrEST5BRFXay8a8rq22tLzM20lG\nQD1ANjk+PE9bU1Vl0+xbc/jUyszJ0tPS32lKTGrd5u3OxL64vtphVDsx5PU7+r+vv9PKYfhEOC8w\nOj0+QdHIvLrNyNTH4khgU+TS3c7YwsPNxdruaFNURUVPS1FVT2RUVmJT5Nvp1drGy3Hd3tvWzsLM\n2d7b61ZUTkdUWEtFSlZaXG1rZPLd3Gtm1tre4//c6uLf4MnMy83c2uLdc0pUamZfSUxWat5OS11d\n7WNlW1jS19jJzs3X4G1RX15bUF3X1tDS39zj2t9bXlpdZVtnWVpmZe7l7u/k2dDkd+j53v1TZmjr\n7Fdqd9zSb/fl9/Nr6PNZ/WZq6WzlX1VhVGFVT3f91NTnztzc3G/sct7d/9Xn39PrblVi91lgYWT3\namJVU19YUllt3Nnc5+zQ0dnddPbr8XlUXPPiz9TsfPd8XVxkW1l93ef46N/p6vxkYV1iZGFxdeze\nfHxrY2th8m1n3dzU19ja9+rs/fru3+1jYV9bW1paWmnn7+/m6N3reXxjeP10+Wr77uzV3+/m4+Nt\na15TY2ZoYmze39zjcv1xcG9gbF9s9mR5/PPi6Nnhe/T36eHr5Pv53el5XV73+fD+bXbvfmFiYWZb\nXmNb/O326PPc2N3g/vHk5+Hj5d3i8HNaUk5OT09n9enY0c7R2uh2aF5cW19fbuDu8ezi3Xr793Ts\n9/bl5Of26/dld3FqZ1xgam57e3Jtam5lXm3t39/j7uXY2eR+fXZ+/G176tbQ3vZtX19XT09Ybn/5\n++fb2eF8a19lZVps8t7V2tPb4N9rYFpXW1hje+fZ4N3a4+X+a25oZmZs/291/W1qa25sbP/z4trf\n6d7h6/NebdlrVl7s095nY+jf52Jba2R9YVp46/Rpa+rtfmNi697l6urb2+9wY2hlXWNnbuvf4ubk\n5OrufVxbXmZ56PPx4Nze7PxtZHNoXV5mbWRu8/fZ2lY52aazRDVOur5AL0jL10RAdcTBXkXXucpG\nPWTGzUxJ6czValbzz9RiTfTN5mZd6tr0XV7l6lFMbubseH7k5l9d3df/XmTUz3Fcaebl+WVr2Nlk\nVG3Z3WlXfOJvV1X22/1STvjV2m5W5MrcdP7n7+1pWWNq58rP8/jc0uZbUVFbXUlKXGPm2fbtzs3l\nbnrs7u1ZTWjf1ebv3eTe2e1sfdjrXFFQU/PdXldt2enu6GZx3eXz5O9c+e17bXJzX3LX621h/drT\n4mpd9OFvZV9vZ15fVl/lzM19WG7Nzf5KS33bbU5azcj4WO3Y2+hSU+rcXU9/0czkX1ne2U5H9c3j\nXlfh3fX3au/f+1lZd+Zt6+Ft5Nb42NZbaOndXVFRXujp329vZ+Xu+Vt12eB1XOrn+l1qeurgVE1r\nztTeaX7QyOJLU17V11dJVtXT4Ghx2OHuVFNebf1o6H3T3G963tlmXFxhV21vZtrW3Pzz7Wtt6t/y\nY1n91uV0Z3no3+VoV1Pp7Vlj5dpzaG/74dj9VfP939bdX2vX5uN4dVZs8F5dTF/57mlw1drR1N1l\nfNp5WEdc4NRfTPzS1WNVVN7B001Kcs7Peldvzc75WU5l6t/9b3js4Hhw73x5Zl9cZmJZbufUcVjp\n8ff0X/DY6VRVbHHy4d/23uTd1ujucGJbcOb5bG7p4e1obOLbUDZCwrOzw9vNv8hPNy8zRc/N7O7q\n1czWUz89Qk9oXVFh6dXOztfZ19vrcWZu5NPO1X1aXGhdTVvzQy1bm5mjr1/fzT0uJB8pQLeuWUFP\nRs3POiwlMcivrb/p2c/Ozmdpzr2wtsTzSk9ZW19USkhDPz49RE1o1cnEytPIws17TjsqO5yUnaLQ\nRdI0KSQbIDF5qcw++jDZvD08JSZCvaWmtbvCvLPI70I8zrqvuU8+PE7ZztVNOTk8REA5Pk/OvLq/\n0PNw8M7TSywfS5iVmqJcY0wqLiQcHybaqrK52ULHunY6Ih4yxKmkrbrKxru90UU2QtW3t9tHPlrH\nv8ZNNTA0OD1KTmvMvry9xGlMVlxVOyElpJSVlqx6SSosLCMgITmuq7HCPEDLaT8qHSRGsqOnr7zR\nx8TAzlBP97692GlKTuPLxtBJMy4uMztP48/Fv8jWd1dpaEUpIruVlJWf2eo9Li4lIB4m47GxtE4y\nVExCRyghL26roai8WXbEtK69bWDkwLvWSDg6XMO92DstLTA6TGnq6NK+ur/fTUtRRy4pupiXl5/L\n6jQpLikmISZFxbSw6TxHQENBKygzbq2jpbNhXc+2rr7kTk7Py856REVbyb/XPSwrLjpc49bQ08/F\nxuZUSkc/LyrbmpSWnLhzNSgtKSckJEO8sq/JRUc+PDcnJSxHsaShqsPa1720wM9aUszKzeRMS1Tc\ny+JCLikqMkjvzM7Sz8jHzuhcTUYzJ0eclJOYq8Y6JismJiIcLuq6qLHM+TUxMCYnLT+7qqOlr8D8\n0brDzW99wb69zG9TQU1wa001LCsuOlPl3eLZz7+4vtB0QToyJTWglZKUnqxIISMfICMcKD9arqqq\nrlU5JRofJ0KvqqSmrrC9tq2/ezg0VNu7tLq/WkRMQD0wKy0sOV/tycnWx7y0uM5lTEhCNjJCsqCi\npKSrvlVCPDQyLCgoKjBI17y++kE2OE3w0L+7vMbPxr+4uMx+99LJysO+wcv6TD86ODY3ODQ6QkpP\nW93KwsTL0H5caW13TlS0p624uLzLz721uchONS0pKjA2MSssNDpCa8i3s7i+zOHNvLS2wMa/xMfF\nx8jcZnhlV08/Ni4tLzhDSkxJRVXUxr++vMHO7lTIqqq6vba6ysC2vdFOMywpKCwzNjc6PjYwPmLO\nvrq5wtzOuqyor7vA1mh7zs3va2tTTExMSz85ODs+Ozg5OkjZv72+vsDO61xYv6ywv7ius8C9t8tU\nQTUtKCcuNj08Njg5Qu/Mw8HL0XpjzruvrLK+xsXDycHC50tFS0pNZmZOQDk3NTY6PENW58zHyMrI\nydd2VHy3rrWzrrLBxbnA9l1EMSkrNjk0Mi8vND1W28jFycbFysK4srfEz87Gvbi5xvVZVFVLRktK\nQTs4ODo8REZGUfvRzMzFxMrYb2XOtbG5ubG1xL+0vO9JPTMsLjYxLS4vLjE+aODMvrm4urm5vL3A\nzNfNvru9vsHN/ltNPzw8PTk3OTxBSEtQVVvw1dfVx76+w9pCYLizsrS1uL6tqrxaNC0qJCkpJCYs\nQvnfxMnMuK6qr8xOPFW9u8lbYca1qqy9XD5ITEA1LCsuO1RjXFjvzsvO4n145tjXVjVYpqGnpauq\nqa2zLR8gHSMgHSEkdamqqrXCuLi4Yy82OD5dTVTMqZ6mqquuschDKiMpKikqLTzvwcDEvLzG2mlY\nUlxlUF3s2cpUN+eio7Gmq66ltMwqHiwdHSIZIzXbp7q1qrqnqcVsMD5NMk9DP7etra6uqq+2vzsu\nMC4rLTA1RGve09nP0dXJ9HTM0L6/y8X7VVxKTktHTUzev7+8uLu7vcvvTz8/QTo1MTQ9RnDcbOjN\nycvNytDYz91rWGve89rOzMTDwMDHydtZSj46NzU2NDpCVdbJwr++vcrNyMzFx9PpW29nTVlZWGBZ\nYlz91OPa09XW6vleSEVHTVdSWGbmzsvL2mZnWE1JQUVOadnSv7i4t7zCydvlVEE+PURMS0pLYOHd\n1+X56N/R2XxoX/jf9GRRW2VPV31+2cS9v8fEv8jL01RGQT9EREtPTVpsan5zV01KUlRLTlnrzMO+\nv8O8vr62vcnJd09HPTU6QD9IRFph6M7kbWrpee5nXV1z1t/T3Wz0xb3Hxb+7t7m/515yWEU5Ly0u\nMzc1PUld0cK/xL64ur7Cz+j02tPq9+Xe3uJz9ubfdExLSk9TSEdGTVJSVGTt7+9y2MzLytzf6vZG\nOL6r3L6utaersGc61jMjJR4hLS81Nduwu6+vtq2uuFw9aEU9RTc5XLqxvbOpray4WktPOCcjKCwz\nPDZMubO+w7W2vMdWTGdRPDdAUUk3wpmqspqkn6PLNh8wHg8YGhswOUqwnJako56vtE4nJSgwJSNG\nx6+qqJ2boa693EstIh4gKycqN2W/ura5r6/A3O9eTEhEQVrhUU5dW0HMmqjVmaKoqE48ICsdDhof\nHjM+1KKYmKunnbjtLR8pKy0jK7itrayum5m1W2jXOiUiJDtJLC7ZvdVp8MS1uT5UuMRWTs/HyuE6\nQetGOTA2pZxgqJuindlFLywsDxMhHSUyWKiYmKanmqlUNiorLCQeKsy7yrammpmy07a3PiMgKDIr\nIynQw03Yv6uotd/Frs43TOxSRzY3RlI8MTxPnpw8npekn1vKOywnDRgmGh4uzKaenKWdlrU/QjEp\nHx4fMN1qx6acmJ2uq6znLCIoKCIiJzX2T3q1raqvubm+xUs7S0c+Nj9aRkRGTmM/sZrMqJepnbvK\nQyQsEBUgGB0r5q6gm6GemKvedTsoIB8eKj5LwqmhnJimrKnONiUlIh8jJC524uSuqqupr73XzUsv\nPDoyOz5AT/beY9jM0J6h6pyeqKtHzSomHRAfHRsmSrOrn56gnKC+0G0tISYkJS4+2rSnqZ2ar66v\nzDYnLCIkJiQ5YUvYrq2xs7LBy904P041ND1TUkns6cm2XMGXruCaqK7RTVweLBoWKxweL8S9wJ6e\nop+survsKSkzKScuU8m5rqyeoLOxs9UyLDMkJikqPD1Dz62ywrGruuLUUU1JOj4/WkNE2011x8/F\nsKC/r562sv7qPCUqGyMkHSk/7Wuspaqmpay5vk05Pi4qMUJFSMm3rqutrravwz5DRTgoKzAvNDlP\n3MrFuLe7v7u/d+loTkw9PT5BRT7txtu4paqvpKazxsxNKykhHx8fJSxGXMirp6ikpq25yuhHODIw\nNjc7XNjXuqu1vK2vyNzdQDk0LSsuMi9MWVO8sLa6sbPEysxcQjszODMwPV/h+7moqKqpoaW/wMtC\nLCIlHx4hJzE3VL6ur66nqa+5u8ReQzw6ODM8Tk1fwa+2w66pv/LB1DUvNi8rKzE/RkjPtry8rK28\nxLvLQj46NzQxOk1XZM62pq6wn6e0vLflKzAsJB8hKikuMl++yrWpqK6tqbXK4flHNTU5PjpD+9C2\nu72xtLzZx+86PDowLTE1NT9W3b27ubCwu7y82VRQPjM3ODc7Tu7NvsCkqM+kqcHUysspNzQmKCUw\nKjM1S7juvK6rtburvMnZ8Oc/Tk5YTUzG5n7CuVn6uF1B/mQ3Oks+O0VQU9pl3L6+zMC319rTWEdF\nTT1GVU3Z2tfMvbDNv62+zMW9Uz5VPDAuMjAvMzdSXWDKu77Ctri/v8HM2dPs8HJ7/Wt+TW/PQUTV\naz/+yE9a3P5PW2RIYVVR6e5Y8cTWe87Pb+zWelp//FJf3utt0rzI0LPB0L3I6kT9SjQ5NDYvNjpB\nS0nXzcTHuLW+uLm9w8rN9+9mTVZMQz5YZDljxExMvspH3cBdR+J1RE5WWmZm7cjN2cbA3PPMYE1f\nU0hK/FhIbLrFRLCy18K4ukLN8jk6OD4qODQ4RTt+78HLvLC/t7e4ys7C6nVae1BHUkRNTVNETNpS\nc9Ta/NvMVFngZlJo4+9v3evc0e/h3OdmZ25UU2dnVUb0vEjotsDSya3c4r3fTUF4NDg1MTs1PT3Y\n8P68vbq+tLjEvsfOZH5tU09IWEdERFpPSNpcY97O4dXH39PX41TvbElmdVhX3nZa7en0Yuzodf5e\nWkjLzj69vcfRuq9pwcvaRUFSMjotPDs2P0vMUcq7vr++tcHHyMXSXOP6cElNX0dISldKQ0lZ5mzs\nxr7Ox7rI+9bOW01gUUVHT0xOUVRganLnbOzb5+Xg3FK/vkC/u79wvLBPyvfOP0lINk0tPjhQNj7H\nUt3xtsrIuby8zr3M1XpjX0pJP09EQ0tWXlrj8N3QzM3OxtDc19vtXWl5WE5t32Zm39Xs6ehyZl5c\nS0xPS0RLVE1PaOPn3MjBx/bNtsFozbrE3NHG399kSk1WQDU9QD48R05Y7+naz8TOz87R0dbf6uHV\n2+LZ2dlucP5fW1hUTVVXSlFn9mvn2eTS1NHm2NHi6fLmeXNpX2ReWV1x8v7w5ebx+XNtbHhhYmlx\n+XHq5+vg4OR8+v9iW11xVlFZYGdp4ejc18/Oz8zMy9LZ3eR1W1pVTk9PT09VUFVaYGpfdvHi3d7W\n1Nfd2tre5tjY6t/q/2loYVlaWlRPWFJQZe/f6NPS1tDP1Nze3+X6cmxqXGJfX1pUXlVYW1lpZmx9\n7fXp29jf1dPU1dXW49/s92JeZVlaVV5ZXWpkbWH//fn77t/o49XY3Nrf5/j+X2VuW19gZF1dcGL+\n7u3u7OPq3d7j7O37aGlpcWpw93Dz9ff/79/r6evb6u718W1WX1laWWZjaPdpeu/g5t3a39nc2+rm\n9G5hX19eY2T7a2pna2505vj7+ejzffHq5Obk+Onp6ul2cmxrYFxhYmFdX2589+vc2NXS1trc3/pt\ncmlbWVtaXV9mZnP89vjw6vnv+Orv9e/57fjm5OTg5Ons/HL8YV5faVpXX1xqbuzw6dzj3tvb4Obo\n7PT6fWxpa2lob/lsamdkY2draHp4dfjk5ufc2dvd1tzl5up0ZmRaYFxXVFZaWmFqcn/r5OLZ29/a\n19zm5+5/dm9mZWZiaHD9e/Ho9fn+dG9xdm979Pvr6/Hp6uL4/O3z/W91/3Rsa2VfZ3lxc3d2dfPq\n8Ozy7/b/dW1/dmlu+u/o5eDi4+n2+P/99/htcG92cWh1bHB3/Px3cnb9dv10eXls9fh6fO7n7ujr\n6O707e/q/XNvbmpjYl9fZWttaXvv7+Pl29bd3uTqe3Z7aV9iaGZmbXjx9ez+c+/u7ezq/Hb0+29/\n+HD++/1vcu199npsa211bXJ0+fT08vDj3dzd6OzxemxkY2FhZ2ptd3vy+3j+9/Z7d255+Ozs7erq\n6PDx7PN7dXj//m9paWtvcnVubm9t/e3t7/Hq8+zh5unn7HpvbXB3fG9mZ2du+/vv6ePp+vl3aWVm\nY2Fqdf3uXF/Ex+d3X+fe401J//nR1Ob2185lZlBITVhbUfH438nO3OHZcXrsV1d27fTd5H/a2/Ns\na11YZVZTY3zn2c/V1tXe7mRPSk5XYPLk2czIy9XvWk9MSktPXGr539jZ3fBiZHBq8e/23dPM0d/x\n/+jd6WpyfG1fXG3z+19RXWleZF9s7tTO09Le5OX0ZVNNTFlta3z139TU41tfXllTT2P00tPX4P/e\n3dr9ev5o397e5djT2dJ+XltWT0NGTWfQzcfOzsvjbElCQEFOU27fysLCxNf7XFJOSUxOXHro19vY\n3N5+WlVVcefW1s/FxcTU/2hfVk5RUlh6391vXNbEwsxqXVNhWUA7OUNZ4tfo08vDwthTSlBUa/Pe\nz8fCzeBkU1lXUlRu39HO2u10XVRSTklSbuna3djT0d34ePDa3//93NHO1W9WTFLLyejpVefeYU02\nPEBMb1JaZs3Fxsj0XVrr3OfRzsC+xtVfZFZPTENLXeXl9+l6bFlOS0lUYOnb2tba09zi8uTV2tvh\n2tvVzuPg1nhHP+q9z8z3T9BlTDcxOzv33lb93MrCvstcU1lYXGZ20Lq3usLf/l1WQz1HTGfu8m5q\n/XJnVUpIU2Bl6d/VxsbN2dze6edybuTc2dvb8XDo4NlaPUjJxM/RTld0dWk/Pzs//F9kfHjYw73I\nc09KT9/V/tbPyL3Dy+t4cl96UEVHSk9ZXFZVbOz25Pxo49XS0djt7dfP19jd+3ZuX09KSExabO3c\n2Nxg58LWZ27o3mjSydHDy+x3U0lGQD06QFJUeNvh29HN0951WmXb08/L083Jy9fwbVRVW1RSVl9w\n+WVVWVhXV1NUYuza1NTd4dXZ3eLj3drT1uhmTf3G2HDVzNvdzNZ/6FtHRT88PkA+QVtuWuzf9+LU\n0NLZ3+DPys/Ly9HPysrS09jtb15WT01FREVITE5XVV947NXY2tXZ0tPX3frt+/zvd29rfnh1XVDV\nx+7txMbYyr/M4eNcSkI6OD0+PEVeXmPY3O3Z0c/Q2vHezc7Mx8zUy8vY2d9tZnVhVVZLQkNGRUlP\nU13w6t/S1dLNz9fVz9zo5ux0bX5rbnBYSmbGzd/Lxc3NxsrgfVZKS0E8PkE9P1BUTVzr6OPPzdPV\n3OXd2NTOy8/OxcXKys/kbWZcT0xIRUVFR0pNT1NeeOjW0s/OzszP2uz3eWhneHBgYFZZysDYzr7H\n1crI4/Z0SEJEPTtAQD5JXFJW5OLfzczd4N3t5dfW1MrJy8PCy83N4HtxXU1MRz9AQkFFTE1PYPHi\n1s7NysfL0dXkfevl9HpmW1BO1L/R1MHBzMq/yuruTz88OTU3OjtBVFpa6tzg08vP3OTu6NHKysrL\nzMbAw8rP29/gcFpORD4/Pz4+REpQaOfd1M/MxsbN0NnpeHpoWV9lVEdOyLzMxry/yse/znZiTD87\nNzc6OzxHY19c7ODp1cvO2OV3/djP0MrIysK9vsHI1PNvaVZKQT08Pz9AQUFDS1363NLMxb++v8jT\n53NfW11YTUNuu73Buru+yMTD9FBAOTk0NDk3OT9U7fne3uHRysXN8WVt8M/Hy9PWx7+6ub/M3XdR\nWdlLOD04P0g4OTg8WfDV5vTFvbu5wc/qUlh+RTO5oK6jqdWpxmFLICUdJkMiNEc2r666zzpHPtW+\nPfbBwKurtLjBysnZ9T8/51nY1FRXVVlDOzkyOD47SGB81cK9wr++09zR2dxMRFA9LLuYpaKlZqW+\nNywXIR8tzyQ6vMmnrtk7LTsxPXY3x6eqpa3FyryzWTpESLyy5lNy3dtVOSosOTQ5OzpuwL3KyLzH\nvsFPT1TQx2ZTPTs9qJWlpq/QpesvHhYkIjVZKE64sqi4WDMsOzc+5E20paypv+vSzrhNRNjRsbfy\nT05uUDoyKy09OT5HSNLEvsfNt8HIzlN5587oQ1M7LK6Xoqe2+qvGNiIaIyI7zC0+xr2rs+03Ljo9\nXcRayqqtrrtCPGrEz2TTxLivv29PQEVFOi8sNj4/X1Vczs3CxL+92uNYZ8nkXElLPUmcmaqnbcat\nNzceGycjynAu0Fe+rdBaLC08RLW607CzsK2+1kpEYm/Ayda9y8/JVz82MTQyOTc2S09owcLFwbq0\nwM5qTO5zalguMaSYoKHHR8U8Wy8aHhs1tV+45z21w8ZfJSgub6qvq6/Ss765rPZENDPa1r7A/dNd\n38dKNyonMz5bak1OUsm0r6/A3dnQ2FVPOi3Zop+iqrXFQjg/NisgHiUrPrixtbXbU004OT5O39C4\ntsG4t7Ktu9hcS01HXdXQ0fFdUUdKQjg2Nj9PXutbZtzOv8zY09/P2+/qTm28s7rIw73GysC8z1M+\nMjE3PktLPzQuMzc4Q2fLvLq7vr62sLTD4FQ/Tsu7tri8x39kTj04MTEyNDs6Qk1a0s3Q3+zQz8zL\nzLGpsri3ub/fyb3K3UQ5LictND1DOjszMTlJ083W3vHv3L2vrauttL/X5mNi43De3l5WR1pvSD80\nLzAyP1n+49jGv8bUZU1nt6qxu7awsL7Ht757TTsuKSgqLDAxNDs9U9bCub6/wtjoZnLJurG0u72+\nvsDAxV07Njc7PkROYHVeVUc9RE1Z+3Lk2NvYcdu8ur/Kw7a4vLWusctUPzQuLC4yLy4wNTg7TdS/\nvsPGx8jJxLu4usPUzMPDwLu911dEOzo5PURDRExRTUhb4Nve/VtbZ3B107y4vMXBuLvCt66yw2lH\nOzIuLzAuLSwvMTU/b8vGxcfCvr64tLCutb3Ex8jMx8jhSz0/QT49PTo1OT4/R1HjyszOzcvN2dvb\nzL27vsnGv8bCuLW83E5JQDQvMTQ0MC8vMThBX9bO1d7Ju7awr6yssrzEw8bV33JPPzo8PDw9QktJ\nQj9DSlrm3t3b3NLKxsTN0cnDws3bzMTFycfEyc7uST03NDc6Ozs2Njk+SkpPcu7k2cy9tK+vrq+0\nub2/xtllUUk/Ozk8Q0ZBPDo+QUdPXmZk/dTLzMvIvrvAy9fe19PKy9TY2djb3t/l9FpKQj07Ojs+\nQ0VISElOUWjXz8rIx8C8ubi4u7/FyM7Y619RTktEPz8/Pj5AQ0lMTFpr/drW1NDNx8G+wMXM1uDg\n3N7l629lbXB7dHx+b2FKPz9ASU5PVVZeYl517NnOy8vT2NHMyc/RzdPa5/V9W2XZz9tZR0NCRkRC\nQEJKV3TQyMvJxcHDy8/Y7mdQTF/Wwbq8w8TGzNl+Zk44LCcnLDQ+SWLr2su/sauqq7G9zdjRzNJn\nQjYvMj5LT1JTYmB3yL/G7UlAQ0xieX/s2MvDvrzBzN5oSzQuSrSmpLHMwLi1vU0uJRwYGiAyWu/i\nvq2inZ6fo63JQDIyNjErJipDx7q4trKvtsrkXD8xKiozP0RES8+zra6vr7K5yedcQjEqKCorKTuw\nnZaZpqupqKxSIBgSERQZIzzSvK6hmZSTmqfFQzQsJSIfHyIqQbimn56go6awzz8rIh4cHiYuPGy+\nraOgoaWst8tMODAuLCooKCcvuZyTkZqnqqurvygWDw0PExsnSLqpnZeSj5Obq3c2LCUfGhcaIjnC\nqqOenJudo7NdLiAcGxwfJCo51a+inp+ipquyx003LSknJiYmJz2smpKVn6mrqavdIhQODhMZIC1S\nuKSblpOUmaK5Qi4oIh4aGRwoYqufnZycm5yhs0AkGxkZGx4hKDfarJ+dnqGlqa/BVjctKyknJiUl\nL7ydk5CZpq2sqLAwFw4MDxgeJjLyq5yWk5OXnavYOCoiHhsZGyM/r56ampydnZ6raSYaFxcaHB4h\nLGKsnZqbnqOnq7fuOismIyIiJCgsNMaeko2QnKmtrK5DGQ0JDBMdJS1NrpqRj5KYnqrFOCUeGxoa\nHChTrp6amJibnqW0SicaFBQXGx8mNsamm5eZnaOrtclLMSghHyEjJy02Q9eol46Mkp+vvL5dHw4I\nCA0ZJTRsrpuQjo+WnqvJNiIbGRocHylRrp+amZqbnajHMyEbGBcZHSQxU7mlm5iZn6280V0+LSQi\nIykvNTc/Wd2/pJaOjZeu8VXgRR0MBwoTJkBkv6WXj46UnKrHOSIbGRsdHyQ0uZ6Xl5udnqGzPCAZ\nGBocISgzU7+qn5uborPfT0g+MCciJjFO1dpUSvi9trOmm5aYqGA+S1YxGQ4OFSM9ZtCunZaUmKCu\n3DIkHh0gIyQpP66blpmiq6ijrTocFBchLTM1P9ewp6Kfo69iMjA9QzUqKDL+vLi8wcfO3NbKXjzs\nq5yZp2Y/Ycl4KBcTFx8uT8Oto6Cfn6Ot7SwiJCouLSs0yqednJ+nrbXAXTAiHR4nOlZnati5qqeu\nxkc4OUBNTj87Ss60r7jdRj9HTUU8Ny86rJiTmbJM1LC4NRgOERonPc62rKainJqhxiwhJzU2KSIo\nSqyenJ6krr3N0M5AIhkbL721XTZGtaSov006NDRD1L3PPzvesbDmMy9C4+lVTnnPeuCjlpepOi/L\nrlIeFRQbIStYram3sqKXla0sHyg1LyUeKkzAp5yYnavBv7VPJRwdKTAxMV25sayrqq/YPDhHRT0+\nSdfQ4NHDyko2NUnS0t/szrivulbss6uty05MXEg2NikiIypWvbjGu6qoqbxROy0qKjc9PE/Kp56f\npq+3ymI2KCUjJi5E3Ma+vLWsq7DMQTtBRkA9PkFGVdO9v9pv/dbN2nRb9sCzvSse9qOivD1aera3\nue8aGSfhuFI/OOWsn5y3KyM19NxLNDE4vqGbpeZIRvHmRS8fHSnOra+1s7Cuq6/fLCInLztP2tHb\nvqqnsdxHOzU6SlNLR17MyMfF2Vg9KiNnqKOksq7Cu6q/PhkWHCY+37/NtJ6Wm7I8JSUlLzMoKDix\nn5yerdpPbHg8JR8fLcyrp665v7qvu+g0JSs4+cvS1Ny9r666VzEvMjg8Pz9G57murLXaY356XEQ3\nN0jUw8JHL8KsqanP8TpivNtQJCUuPdXGz0fcrqquvUkvLDdLXkA3V7urqay66HtubFo+LysyT8e4\nx8u9s7TZQS8yQEBAPVXPuq6utc9OS1R2TzkuMVu+sre/yMzEzHM7Liw0bsDCzMq9sK3DMCc7drvB\nUkpMw7m43i8rLkDSusbzyK+qrsY5Ky42TGlMTee5sK2zTzc5OklEPjtFwbSutb7IdedjVD0zPlXT\nzc/pWXTWzOpbS0JNbdPP2crGxcfN11JDR01CMTTfv62ruMdk0ttXOCcoLkfOuLa8sbCzvPo1Ki02\nStva3Me2s7K7VTw6P0xQTkBJf8Kxss9DPk147ldASNrGv8XzTkVPZ+baW05vxba41UVl3PJWNjhO\nwLe3v39eWuRdPzArN2m7tLrP0MfB0VI5LTNC37+7v8m8t7bBTTQyPEtiWk1S2MC9v9xLTl596XNP\nQEhMY9jSyMC9w7/I3F1GQTk4Sry0rbDH1EI/LywqJzNBvq2oq7OwvtNHLiclLj7Frq2qra+2yE0u\nKSguR+HMyMLCvr7TVD02OU3a1tLNyL27vc75SjtDT1xy6+B+Sduqray4SUowPjYqKiE3V7anra/L\nvMPhXC4pKDr+vq2yra2wsMlQLSkuNXjf19zeyszHWDw0M0FcztXOv763ub3QVko9RE7z1/DU08jD\n2U0487i5sOI+OjFLPDowK0JUt620v9bEy8PkOy4uR8OsrLfE2dTL20MzMDhhvr/fRzxH8M3sSz9D\nfMO9w9L95NDLz3tXTmnay9lnWU9dbs+93zRbrb2stzs8Kj4+MTwoO12+pam0zND6WEcxKCxGyamn\nsLzBv8LCTzEsLz/ixvhfVW7Lx9NLQD1F3cnHztDd2MjL2lVERFNsV1RMUOfKurm7xNDZOzm8use6\nSDs8P9VDPjAtTui4sMdRWOHdz1Y5NU68tKu2f2JQz8TTTzZBXM6+3kM7Qm7IzF8+PVL6x85ZWlPY\nxb2+7HBYWuzo7ko/Rl3GvL3H7eja7z8w0be/qb9dZjpOMi4sJTRJy66ttre4vspNMyktPW62r7S5\nusfHzVU/N0BRy8V6Vz9Lc9PdTEU+RmrZ4F5s5MK3uL3aTkxOTlZLREth2si7tr7N5kk5JzOrsqil\ncclXWUskJBsgSsqopLG6sLG8ay8fHi1Gu6iusK2urrhMKyQpOtu3vszOz8rK3UA0NDpY19X9c9fN\nubXC6klERU5eXGdcfO5s2cq/wsznSUczJtekrp2o7b85Qi0hIhorUcylo7Kuq7jGPCkcHzdGrqit\nqaqrsr86IyEoNdKzuri+xLy/1jguLS1I7+vc28e6r6++Zzs2PUVSbXhtXt3Fu7bGXkhASFQ7KXij\np5qfytotLiogIRokQMGfnKmsrsDJPywdHSw3s6Spp6mrsLtGJB4jLW6zsrK3vLm8zjcsKik9c9nU\nzb66rq2+7kE0NTlDTEpf7M6+ure/1uxMQj8tJsKgppmk0sIzOyceHBUmP76enainp7jJOCIYGyk2\nr6SooqOnqrBBIx0eKUa2u7OwsqmtvDgnJCM1Sl7ix7qyqay+VDUuMz1EUlHgvLa2vcDrXvhGPjot\nIr+cppek7bwzSSgdGxIiN8idnKeko7C6PiUWGSYsr6SnoaOlqKtdJR4cIDu6u6+vtKmpsUkrIR4t\nRVnOzMu7qqq41TgsMz9bfVFLb760tLfmS2JOU1Y6KiavnaOVq9nHLU0mHRoSIzW2mpyjoqewvjgf\nFBgiL6ulpJ+joaSrRR8bGiA9vryvrauipLE9Jx4eL0Nc39LKtKaquO40LjdRb1RDO1W6ra63az9P\nUHFaPC8gNZ+fmZa+yUMzOh0dEhUtWp+XnKOkrMJeJxgSGyZdn5+enaCjqb0rHRsdJlu5u6epqKKv\n1ysiHh84SXzDvbevqbHHUDM0P0lPTkVNzbOus8BLQktIUEI2MzU3vJuem57V3jEsKBsfGSJWwJ+c\noamuvE41KB0cKDe+paKgpKivvWotJCIkL1y/ta2rrrK9Ty8oJCs3UMy+t7ezrrnMZD06PEBGQ1H2\nxba5wf9CUG9aT0A7P0E9r56mnKd/0i80Kh8mGylHZKmlq6+xuNNKNiUjLi/ms7CoqqmtsLxEMCso\nLT1S2L22sLC1zUEzKikxP1nMvr65r7K80kw6NjxGVd/p0sHHwtJfW0lLSEpWWfZIQ7GprKC14/kz\nUjcyMR4rLDe5t7G2tLG7ts45MC0tPuzJw724ta2uvNtANS43Wlbf337MzctgPzczQ2/IvsXL1sfC\nzN5NPz9T2dDCyN32X15LV05ATlJt1s/Lz9D5UtXFyb3Ez8zXz+tWQDAxMTQ+TGPsx8G+u8PF0PX1\nVGFSSFhO/dnRwsa+vL+/0WdKOzg3Mzg+S9zCubm+wdt7UUNGQU9s0r+8uL3I8kc+Ojk6PU77zL+6\nvMHTZlhKPjo+Sfa8tq+ts7fE6VM5NjAsMDE5TFrZysjBxsHF291heOLoyM3Lw8fN2+BsTkNAP0NU\nW/zo4dzn5GVaS0JJS/nKxL29vcDJ0HpaUEE/QUZRWt7T0sza5uPteVBHSE/uycvJxc3BwcbIb1tI\nPkA7PD4+Rk1a9dvNzc/Kzs3GyMnOz8/b2PBeU1BQUV9fXlpTVVFcZmRrWltcb9jW09bZzs3KzNvp\n/O3ofnRlVlJQUVVWV1z86N/T7F5gX2Di1fLf18i9vr7VYlpJS0xDQD0/TmLn71pgXnvU0cvP1s7M\nw8TO3mp+7e7mbFFJS1Zq+mJTVlpo4+5dU1Zs3c/N19/i387M1Nbtc21ja1BMSkVVXF/v9e/u++Xq\n99TP08bGycPP6GJKSkhCSk1LZPry4GdfYVJWXWb439nYzsjJycvP1ufn7mRtXFFYV1ljZVpSTUpV\neNzP09rY09Db8GdcY3Ta0dLS5efvcm9QSEVGS05eZmNt+9/SyMXIys3W3OJ1X15ndOrf7/pvX1xS\nTklKTlVq+fDs5eft7e3t8Ofi4dfW0czNztPh8mBRS0dJS1JeZG704Nvg6/dsd/P55d3a1tfW2d7h\ncF5eV1VdW1pZXGp43tjc2/B08u7i3trY3tfb7H5ZTUtITE5SYG3r3tzc3u57+/fn7e7t6tbR0dLX\n3Onv6/l0YlVSU1hbWVlYYW1tdHR8/u7o39jZ1tPZ3eLseGVnZmZ1bWlpaXFudG5naGlrcXV299/T\nzsvO3O9tYV5dWVZYYW/57PlyYlxeXF1iYG7r2dPS0tje2tja3ed8aVxXWV9jZG9udvD/dHFnYWJy\nfvvn49rX1tPY5Ppza2VeYl9eZ2xwamdgW19jdezf29rS0M/Q2ut3ZWNhX1xaXmVr+ez9dF5ZWmZv\na3T7+vLj3uPh3t/d2tvl7nljZGdiZ2xsfu3zdXZuaGptbHfv7ebj4+fs+HFtcXf48ujn7eXk7Ptr\nZl9cZGtvbnH26OPe2Nbfzs10V01NQj9KRVN5VNjNzr7KysvQz3pYyXBXzUfZVkRuQetPY9l+2MvZ\n59V73VtWYExjVlbb39bZ1srazdr16/9rXFpRWk9WU1FZVlRuZdzZasr+z8p90e3U+115XvX6Xt/f\n2M5c5Gxf3kxFbUxK9Uvj2v3MeMvKb91kX+DfbWXqUnDO6ujVwcnWwNXbwW5PSkg9NDgwM0BBSG/I\nwLy4u7a0u8LS0uNqUUNLTVFLSVlndVxe59rtYVZfaGJXTV7+dnD/3szJzNrPyt3sVVhPNEurZ0Wo\n2qyl27Y9vXcePCIfOCInMF64erKprZ+jtbC1vPcyOTQvOy0wWenI2L6wtq6+9dRqQzMvMzE1OTle\nxLq3t6+usrfL6mM+NS4yNTM7Q0VMoZzpn56wm8rUPSHrGRQgFSYtKOPIoZulnJyfn7lfPCguJRwj\nKUFU5rSznp2qqrCz0jAoHx8mHx8sSL20r6agnaGvvL7POyomJSosKyxByeLLmZWtnpymoWFBJxUm\nGw8YGCpKQKufnpWXnZ+rsMcpJR8cJCEpOUWwpKGfoZ6js8w3KCMeGxogLDrvt6mfnp6iqK7NVTks\nKCMkJSk4Sta+saqsqKKboL683+diJiQfGyMhJy4pX66tpKKmpqurrlgyMS8vLCszRci1s7GtqKyx\nw1ZBMi0qJScsM057xbOvq66vsLvE5UU+PDw5NTdGV/DGyMG5t7W+zexLRDosKzxh2sTKvrGvrbXK\ndD42OTYvLzE7WOPMzci4vL65ub/T7PdkYVFHRkxRU1lgbfvjf/vn2NxLT11Y5H542+7O4vDG3uHZ\n3dHs69j7V15aS0hGTUhLXlz+2c3N2NLKx8nN1+7d4WJYVWpiY/RnbmZlf25qaV9YTE9bT1326npu\n3Nzczc/f5s/P19/Xz9nX7FhOTU1CQElTX2pt3cvGwsjNys7WfFlXTUpIR0xSWXnb28/LzcvO2OVi\nVEtLSUZNUF342cjGwsHFxdHf6FVPR0JHP0ZLSWfr187bzcjDxdnT2Ot9XGFYUFlf++/5cV1u5Oj9\nYFZoaVdPTlVc+t/f18vKzMbL1M/a6G1PTkVCTVRfYWvt2MvM0t7W2XjwZ1ZYWl1Xbfj37+LW3d7l\nd25qXFJMVFha92h52tbT2M/N1dLT3Oni6WFaVU1KSUxSUmvo6djS09Xo3t3n8GRs+GlfXm/f39/n\n5dvc7GNaWVtRTVlnb+/v4tnWz9ju5+bxYlhhX1phYP7c3tzY0tXa4Pb5dF5QTlJVWmtxbObX3uPi\n4tt+bmtq629v7Xrk5f3lfm1t/u9v7vJmYnNrXGdqYfHtfubZ2+Li7tzcemdeY2hhX1FQW2Fufe7g\n4NnNy83W2tnsa21eTkxXV1FdemZe7+Pq2+rs8evU4+Pe8ejfd1xddXpzcWFy++ngb2tobf1fXm5m\nfOXo7Off3u3p7XD1/Gltcu73bvj5bnVrfup1bWH49XHu7u1vau7h3+H5ae7vfuXqemRiaGxpYmNr\nc+fk6fZ4f+/+Zvb9Z+/e3ur73Hpf7v5fYWtqZljt3d3tZt3f7tzh6vNsXmbqa09db3Lra2z17vf7\n495pXere4XVccfHo+Xjn+ezi9uVvXv7r8/3t+W955+1fYuvvenVq9+tiX2/77HpsaWN17Oft9mzt\n3uPsbnLg2N/q+W7m/2VkVmFaU1xea+Tq59vd2+Xd3372b2dfbl9i8Or/eeXu5N/i5Gr+b3NsW1lf\neWZf8N3n5dXb5/p48/9hV1lyb2Rib/Lb3+zc3+fs6e1s/3d7ZWJtafduZHXd0Od0a3ju8fVfWl5g\nXGnp2d9paNzP1+bv7+nd8GNcW1RaZm14X1xu49XW3+vl293p6mlVU1hs8HRaWW/p29vld+7a3/Rv\nbWlpcGdke+zg29rb2+Tr5d/raWZrXFROVV5dW1dl8Onn6Ovs7fHp6u74eHR66/B8fOHS1ed49NnX\nc01GTF5ybWr5fGD4vqyqs95HW8vXPCklKzlJS0pjzLqwrrC74UZCTl1NOzZB1rm1vMrRxr/G5ko7\nOD1KX2NOR03qysrZbXXWyMfWaVtp59xwRC8r6qCcqGo8u56hTBwZITQ8Jx4nRremn6O00WLErbky\nHiA9ta3LPFyvpai6Uj9IWl5WSzg0P/rN+EE7X76+bUBLyrjCY0/kyNBcQUJOU05X8fNeRz/AoZ+0\nUFiyp7E5ICU6QzIpJzNZxLizr7vTybe27DYtOO/OVD1fuKyvvMXEv9dOQkVGOzQ0O0RITF3RydPc\n2Ma/ws3Yy8rjWk1MTFBWUkxNXd3G1ni0qbliS9K+2Uw4Q2xNQENoSDpN1sjxPj/lvsdMS/3m1n/7\ncu/IxL3D1+zjzNXqW1Nm4N1bTkhRbWZTSlNTT1ru3/JaTmbf22xm5NLN3tfNz9pbPvOpsM3BzbK3\n6kYsNy8tQyorTtq4v8XC3bjRQEw6Q3xvYlXEtLq0uc3ByN1+Rz43S9tWX2Rh0tRZRkhYUU9YUM2/\n0uTr7Of1XkdHWFTy+WPkz77F915BV6uszra8tat0PCkvRio6LSdr3MLAysLov9o3PjxKz83dzbWt\nsbu/y9rMUjw5OkVEV157xudh7HNeRz9CVcvK3NHaybzLbE5ca1JVRkppZvJs4NhidEQ+uaa6t7G+\nqLxKMypILS8xIkDSyL7JucfC0Dk9PzxJanjPuba5ubm8xM9bTUtGVE1X3dbF3lZQRktAOj1Datvz\ny8fEvsfL3/5vR0hKRmJgXWvgx9DO4kFAxKe1vLjUrLxMOCk8MTU4Jz/44b/CucLPdjlDTEFPbefC\nsrS7vMLa4OJCUFhHZE5Xzrq/4eVuW0w2MDtKYmNg5c27w9XP3trvREBGVGV+0XPdwvV88k5WxKu4\nwbC+r7lBOTE6MS0vJzfN0Ma/vru7zkA7REBKa05rvru7vMPT48nuYONIcc/azu7a7nf4Rjw+PURh\nVl7q09bm3XL03PFkVlxnad/f3NXWzdfe92BnVOG1u8S7v7rIYE45OTkyNzQ3TWrRxcHK729ZUkxF\nTPnU1NPOxL6+zdzR08zeeObp09nu81dYTkdGQU9OTVdVcHLp2era3t7Wd2pgaH128nvm/PXb7uXp\n8WxX8sfDzcjEx8bP1vhRVUxJRj1HWlJdUEtNS1BMTVph3dvn2NTMzczI1MzN0sjRz8vU0dzg7V5c\nSkZIQ0JFR0dNW2L17erc2N7t5eDf4tvU1NLd4Nnc419bWk5vzcjPxr7L09Pd/2NYSEE9PUhTS0hO\nTE9rfW1hYG3w293m1NLOzdLOysfIxcTNy9Le3XxhUUpGQkNAP0dISE1abuva2Nvf3NnX3NzS09jg\n6uHr7XZj+/1nWnrIyc7Ex9DX2uxkYVZNST8+RUpOUlZTWXNoZ3R279zm/eze1NDMzc3LzMXEzdbg\n2tzj/lhTU1FKQj9DSk5NTlJk6NrV1tjW19ja3+3+6+16fO3j3eT3YlDyxsnOxcLJzM3b429PUEQ6\nODs+PkpVUF556tvY3N7Y3/Lm5efa1NDPzcnKysjM09rf5HxvXFFORkdGQUNFSlVp/vvh2NPP1uvv\n4vD2cmb06+fe19vf1etT5sjW0r+/y8fL3tt0TEg/NzQ7OztMVVl53+HczdXOyuX37Xxs5dHd08fN\nzs7Yz8/h5dbia1xRSkxMSEdERU1XXn7j2dTPz9bW3d/iampqXWh46+Dd4eXtXGrU397GwcjHxM/R\n1GNMQjs0Nj8/QUpGU9rOzNDf79jP0dLfZGPTxcTI2O7azc3T52154+xqXkpCR0pLSURFTWLu2c7T\n0s/S1dPV3uj2++fe4ejr9Xv0e19ZVFNXVmD35tve2tPW0dPg7PHv7W9aT05PTU1MSExUWF9z59zW\nztHU0tLV3t/d3NTU1dTX1djmdmJbUE1NTEtKTFFZXWFtcvTb1tDNzMnKys/b6WRdX1ZQTlFXXGZo\n+er8d3x8cHdzbHjn2tvf4ePc3N7d6/Xy8fT+fG9qZ2hhXV5cW1xeYGZod+re2dzc3eTi4OxsYV9e\nZGxmY2Vpa2x1/unm59va2d3e2+js9v71c218d21vfntoaW1mX1xeZGNrePTu7+vn5uLh4ub++v14\n8+jo/HVyam1uZl9gZWJhZGh87N7Z2Nrc19TX2+Dt9H5qX1pXW1xbW1xna3d7dW537Ovr8O/m5eft\n9u7r5+Pn8Pv4+v97bGpsaGhnb3Bsa2p4fnN7+/Hp6+Xg3t3g5u3s6O79cW1kW1hYW15kZ3D97+jq\n6eLh5ejs/3n46ejt8nd4fHh2b3NxefD3d2149HhlYmx49vL17Ork4eLt++32dWdka2ppaXF7d2x1\nd2978vXo3dvb3+vy9Hp7+/xvZ2ZhZG1oaXp9/nZ9+fTg4eXreH1ycPv593Jrd3h4/ff7cW559vb1\n6+rzd3jy6+14WuTIW0dd2d1UW+HbZ1rp0d5o6ODqfH/1d21qXEJ8wf1W2LnEREnZzkw/VddqRlvc\n1e/o1NXtTmraUl3Fu+s+T7q8PzptxFA6UMvPTVrHvNtY+s7fV1Zx+1dNXuB5Z2/j3v9r6tz/XV7n\n53H3399rauHcfFdc9+d9aPHW3Wpr7+t6ZW/7dGRs+Ovt7erh7mhicXdcX/jucmHz2+xx6uLlaGT9\nZmtw/OTud9va5/bz6u1sYW7ve1tebWpceeDe72bh2957bOdsbP5uWG/o6edmbOVvXe/R1lpZ+uHc\nWFt72tX69lVc4un4X1Nj38/c19jffnriXFZHRU9id2J249TLydnc2Ox57/RcV1RvcmR6/fH+49Du\nV2rRzO1OV9nYcEZAX+HhbGnZzc3e/GLv39laUVxt4WJUXuzS12Bs8svF7U5T79hsR0FT1dF7XmbZ\nzs7d/fXb1vZgW1JX4dtiUFJq3+hhWXva0dTb4uLa42pRR01Y629dXd/L0dbg2dTc+k5KV3Z2TkdU\n5c3J1e/WycbPW0dEW/5fTUtV5tPS2N3O0dvi9nhaU1BYbF9jX+vY0tPl7+7c1eZiT1dld2lRTlbq\n09npcevWz9juZmR8bnJ4bWhk7N7rdmFp7t33YWhu9+zic1pp79nvdGZp+fHc9np+ef7v91tYW2dp\nfO5u7urcz9LU9V9edNXW8VFGSl7Y19zv+NnLvsbZYVlrY11JQUNNYV9cWWJ929Td82dpe/fp/XRj\nbu3h1tfb19rd2tbcZlZcYmFYWWhkPDLNqqSjq7TjddpNLyEdHCEuW8e+saqkpKi6RS8sLC0wNz1P\nv6mgn6WvzU9AODArJygvTM6/v8nNyr69xXg/OT1V6NfKRz+mmpeZpLQyLDQmHRQUFRs9raCloqCj\nqK2+LR4cHygzx7KsopyanaO2PCYgICEoLzpZvq2srrjVTj5BPj4+Oj9bw7e3ucpORUc7KTiooJqX\nnaHo/0IeGg8ODRMwt56WkJKXnKnpJBwUERcfRbqfl5aTlpupXCobFhcbIzbHrKelpa7FWDgrJiov\nOGbAuLOur73hSTgvKil9opuUlJuiwdMxHRcODA4WK8KhmJWVlpymyzAhFxYZHzfGp56al5qepLhF\nKR8dHCAtOlLJvLi/v8tNREFDTF3Nycq+xc7+VGhMPDjTop6Xl6CsaEUrGxkQDg8YLM+lmZeYmZ2l\nuEktHRscHy5XsqagnZ2ip6/MPislISIpLzdJXtLNxL7L0drf3NrR0dTcfk9HRENKPzjjo5yXlp2q\n3182HxoQDg4XKn2rn5ubmpmeqdIyHxscISo4+MKtoZ6dn6i40VM8LiklIiUqNkRWeevIwrSutLnH\ny9Pf6Ek3LzI8QDhnpJ2ZlpuiusFeJBsRDg4TIzTPr6KcmJSXnrBiLSMkJSQjKjRUs6Gen6Cmq6+2\n6C8mHx4eJCgqM0LEtKejqKuwrrjH7zYrJywwNDMtzJ+Zk5acpbq2SSMYDg0OFyY167ujmZSRlp+5\nWjoyKiMdGx8sULmopqOfnJqeqW8sJB4eGhobHSxQtamloaOhoKSv+zorJScpKiopLbmbmJWZnp6n\nps0fFg4PExUeHib0pZWSlZeiqKOu2ikbGxohLio1TL2fm5SVnqSwzEMmGxQRFhsiL1C9qp2YmZqe\nqLpaOigfHh0hJSY+opmcmJibmqCqVxwZGBMSERQYHk+loZ+ZlJOSlaDJNSsnHRYUFR0zzKufnJiT\nlJun1CwdGBQUFRcdLc2pnpqYlJadqLjgOCogHR4gJCo2Zcy1rKqmqKmrtsFZOC8tLCgnKi9DzLOs\nqaipqq24eTkqJCUmKi87fL6tpaOkqKy20FA2LCckJigzVsu4r6ypq663zV9ANjItLS4wOj9Tz8G4\nrqyrr7K1vchbRDQsKysuM0jPvbSuq66ytsxBMi0rLDA0N0bYwLWvsbq8t73YZ0c4Njg8RFzMxr20\ntbW0v9thQjYzNDEvNDc4SMzFu62vtLO2vMTVUj4yLjs+OEzZyrasrbKvss5fQC4sLisoKzM7cL67\nurW1tbW2uddUTUlNUnTq6crFycO+xmlKSjcyNzEtMTo4R8y9tbGrrK6rt8PERTkzLC8rKDXLtcux\npaegp7LA3V0rIykkISQlLk/IytCzp6esr7S6yG9CPUk9MEPjV9S5vru1uc7h10k2Ny4qLzEzQvnS\nxLOtsrGvtrrLUTw3OzQsNUU7RKip26GfqazCrk8+Tx4lKB4gIDc8OMjIs6mrrK6orMzYz0s8OzZA\nXFN+0cC9w7zEw8xWTjw5NDQ7NzxBTu7lx72+vsK9xNfOYU1bST4/Rzw9rLQ7p6Cqr76l7klnJzko\nHh4gMSgw5Oe9ua6prKyzubnJWFxfRUxcVt3j5OHHv2bGwvZeT084PDkyPDk5PF3oXcW6urW2ub7E\n4kxSQzo+NzXbq9fKnaeyr6q2OFY2KSwfHyYtKzLH2GK+sLC6sbO7u9zk0mpJScvrR7/Az72/wcbC\n5ElWNywzMiswPkJL2MbHtLnEtLnP+e5VPUdFQFBbWVy2qsetn7C1trdgNkUsKikgJistLlXHc7+u\nsryyrr/H+1f0SEVM6dh7u7y7u7266tbxSkU3NTc4MTxFSlVl1+PBxdjFxcfe1dlPVE5XalV+3Vn7\nubHNr6jEuLzFWD9RLTAtKDAxMzjR207FvczZu8pczfVg693OzsPKvrnHu8fq0NloUO9QQk1COzw/\nOT1IP0t06fjIvcy/vsLIX2xjTk1OaFJXdNOzvbyrtba8wcVGUjk1NyktLzY0QGdJe8/JyMfGzcPp\nZM9rWmnN0dG3xLuyxb7IynRVXT1BOzc2PD06Sk5PX9fPy8XGy83V9vVdWV9kbWr33tXc0La0vrS0\nuMLt1ldENS82LCwvN0JK6vfMvcnK2Njue+tZ+uvjzsG8vri7vb7I1WlbTktGPkA9PD4/T0tT8GTg\n59nQ3c/g3u5n+mf04uPR09fTzcnd8sW90+/XzfNh9lRTTkZKQz8+R0tGV2NVVHR7eNbU1NTW2d/V\n1MrG1cm/zNLQ1mBc809XYk1PT1hPUGdUV1xPVVZea3Pm59LZ287Q0t3c3d7vbXJbRk/P2m7IvMbJ\nvb3L0N5bTD84Ozs6OT9HRFtq79LNzdPV4+zk69nQ29jGxc7FxNTT0uHt/1hSUElIS01IR0xJUGBi\n7O/g19ja4Nna3dnka234d+zlXk9cy8nVvbvBwr7B1tl2SEI8Njk6NztMS0pr5nrm1Obj3e/s0MvN\nyMnJxcbLyMxxbu9iW2hfWl9XT1pbTk9ZTU1nZmP+7efb29/a3HF76GVfe2FRa25XT/LCwsW9trvA\nu7/P315HPTo1NDs6OkVOUFvv+vrW2+Db3uLby9HVy8vFyMjG0Nje5H1u7V5YZVhQSk5RUlRMT1RT\nXXX67Nre7e/r8W96cml38u3n3+V5Y9O8w869usPGwMzr52lLQTw3Nzo4O0dHRlrl8eXP1+Hg3d/n\n3NnTy8fFxsXGzs7Q4+bn9GNpZFNOTEpKS0hHTVZWXHP++Ovm5ut0fPxv693d39rS2d7pbV/bv8XS\nvrjGzMHHcGNjQzk4NTI4PUBMXF5l393v1cvX5dXP4uXU0NPPzczOz9fY19vc2tve4m9WTk1KSEhG\nRkxOUFdx7/DZ2t/g29vi29727fT+8/d++e59ae3MxcrLwcHLzMzaa11MQDs6OzxES0xRW15l+OTi\n3t/v9/bv5djPzMrIycvJyMvP1dfd63hhVU9OSkdGR0VESU5aY23i08/Rz9Hb3Nnf39/o6N/c3t/h\n925oXlhYW2FeWvPW3d3PzNjf09bn3tfrZVhNSEhIRkZHRklXXWnn1NLTztLZ1dLU1tLS1tDNzc3P\n1eD9WlVQSkVGSUZHT1ZWZvPx593Y0cvLzczN09vofmZdW1xcXV5v/XD57v9rdfd6amtxeGpz7+7o\n6OPh8u3pf3NvY1xbYF9jb3f89ufd29rY1tvf2trp9vl5YFdXU1BRVltbX2989/Hp6e3l39vc3+Th\n4efe2+Tr5ur6et95VGFcWl5dYGV28fDx5e/l5PT4d3Rsbm5rcXZsfO3r7fnzdHX8d3JveGVgbGH+\n++bi3NnZ09LV3+XydfxlbGNeWllfX2J4afz5cG1q+3xtfvt96/b86+rt3eHh4+jy+nnxb+r79vZv\nfGRkYWNqXG1lcG523+DY2+Xe5e3mdHv3+v1qfV9hWmJlYG1yffB16ffb29zZ5Nv06mpkXVtsXGp0\neP1pfGj4bO3o9fX2+uTm6exs7ub34nrh3/ngYuxfX2FXYlhrWmxrbOn+3tnQ0tTb5Ox1/mZt92P1\nYWlhaWhyavX2X/tp9/Zo6nzu5uvt/evp3+fj6PvzbmhdXlxyZG1t/Oxv4u7q5fHae+Np6Xz59WXk\nb3j2ZeNe6nB3bW58a2RtYV9qZHp4+u7t29ve2djW4t5y/XFhXl9dZV5rXmjy9Ozn9OH86Pjj7vVi\nX29sa2xr7Ofp3eDf4enh7P9obGNsYW9ea3X7+HNw8W/n/Ovu9XNya/7/7u/f/PT/e21wev3393h3\n8HzvdPr/699o8OX24233b/dpYGZjb2pzd2Xue2r3b9/r8OZ+2njgd+/48ul97XV57mnpa+xgbWtv\nbXVr/WZobnlf/HXt4PfQ7Njb397u+3NcaFhmZ/xrbPN13Oz363rseO9uZPpw92pk6WPwbWzd+t3z\n3uhu7WNtc2puX/t58ud95O7jbeDmfORhZnJz7Wl4Zt/n89xW3Vpwdl1ke2jxauT22e/+4HXWfels\nfPdvfF3tZ33pat5fevZfeu5v61Ds9eDidG/+5PXaYXbmeNhs5WX6cl7s++R6dWLldf1yZfdZ03rg\nYe1g7uTf73NvY+lt6nFf9WDXZHj4ZN/47+Bs/Xj67eN34WvqYttp4Ftma1/2bn5nbNpx5/Vs8/d+\n6m/gWfJ19uNe3WbY/2t2b/R95nlt8GjvYfpt8G/+8u113mfmat7sauzjZNFPz3Vv7VVl8WB6YFri\neGLdWupq79pt+erqz3jqbGnbbd9a5l/bdOxfW+Vw3Fv9W9tr995O0GfV9lXb/eVzVuRc5FTbT+Tx\n8eZZ3ujl2U7NWMxR4Pdky1DgUt7j6mlM3lvObFnTS81dXNlFy2L9+VHW+tVfc2Xa1Pz0StzR4O9M\n8uvd5k5l59/TWF3Z6d1YW2/t8eh/bvT+3Hrubm15cuVmdVlz9Ojw6ub36l3l8+xsXXLt6/JW52/e\nYm/w2+Fqbfbo4W1zY9/qdWlf4Hbna2vo+OdgfuvieWF88eVqYOrj42J5+t93aGZq+FpeXHLvdXPs\n4+TqfuPk3uX+7fDm6Hr/9Wl9XGdle3r6cfx89uT97PRx7Gpza2xzdPfweO/s5/Z79PXmeXlvb3l8\n/m7teu5ucu596Hp+emdwZHnxfvHt6u7s7N/z+Or373J2eW5taXn4b+r0+2lvbnh3aPht8GlvaXv2\n7evg2vvm4vn+aO5nbGd2dGr/4en09uRv/WdzbWl9dn/t5vT78fL97fZ5bnJy9ml7bv1y6uZ83u/l\n7fR2bP5vYHv0cXb1bmt16XZ0e/V4e+7we2Tu6P3i5+Hv/+f9bG768mn0e2hobP5gdnH56uT96eJ8\n733ueXVrX/l4+3/rc/nfdm3/8Gds82r2d+/25d5+5+JUbMJeS9NsTuPeZXbfXFfsa13r7l3m2F99\n2vdm2uJr391h9Nt4b+V+XOp5Wmh9Ymf59nrq52z26Xb94Xl0/W9n6uB9ePl9/uryd293aW96evlw\nfPvt7OTievX9727m7WnzaXL89G/rbm7qb2d+8fz++3x8bW9u/3V4efP27uzo9ubk+ePoa3/vYXRy\nYF5wbWT2dm3173Z96X543et68OP6eeVq8+n3bvByYO1pYXb8dPLwc/zfe/Xv+u5ueH3v+evf4tzY\n1tjR1dvjfWNUTktJRUJFSUlRXGhz6NnW0MzOzMvQz9ne9mz/YVp1UT/KvTa/qk2/r7Tl1bFFRls7\nOS4wNDIvNE9APMzKcMmyusCxtr3AxsTT3/zWekbtXEpPV05AVE9KS1JTTmZjZHbd3tzR1c7PztHj\n3l5aSXu2P+Gk28erscVZs1g1RC8vJiYsLSwtY2JFv6+6uairtK+zusr+6fdOPHlmN2PWUU7OzlHk\n4lhJREg/PT1HSkdk1tfRvbzCvsTK5GBQRTw8w2w7qbHKqqusz7jBPEYqKyggIyovKT/H78muqbKs\nqLGwv8nOT0E9U0I5VtxpTr+83sa9y2pdTT40MjY0MzdTY12/tri2sLC7wsxqTD47OzE0aMdCuqK9\nrqWpuce3PjUtJSggIiYwLjPEyMOwqauvqLG4vn/aVz49TUk4ZtlJ27rN1LnG791fQz06NTc6NUVf\nX9G9uLy1tL7D4WRNPDk4NzU8R0LNrL60nayvpq69+c81LSwfJiMhKTo9Or63vq6prLGuvc/NRUpN\nPj5S6UrWvszDvrrPzs5US0I8ODo3OkBGUPzJycO8v8DH1edgSkRIQj5QYVvZyM3RrbHep63JtsDJ\nO0s/KzMoLSwrMT5uSb+2vLa4tczGz1f3QkpSUmfrvMfDs7q9ysLMR15ROzk7Ozc6PkdKZ+fNxMu9\nwMnG1+ZeYU5EUkVOYlvt0c/r37q4d7Wszr22wFBV7jU1Mi4vLTA7TUhevb/JubnHy8XfcOxcfeXj\n2sXD2sfJ1fdh2khIWUhFRFRHTVtX6fTp0MrU6cvZWW57WExYWkpPbenz19HT2N3fY87C5b2xwb23\nvN983Dw6NS0uKy8zQkZcxMfDvbjAwr3S1Plzd13tZ9zS3szS3s7iU8ztUNzaUkr7SEVNSE5JWmfq\n++7J1u7Nzuz36HdPW15KVFhWVmRtZtzqzLXAuKu2t7O601llODEvKywsMTZJXHLAwsHAvsXZyfth\nZUxUV2/71sXOxMDOz8PNT8bWR+TuRUdhQkRVT1Jf3nTY4enPbGH7YUxPYE1S7mFZ2tjlz9HPz9vS\n3ci/ybq3wb7Dz3tNSzg2MzA1MjtDVmlp0NzV09jec954dOL32dHIx7+7w77Ays/O3FD+SzzcQjrW\nSD1yXj5Y90p263lr4Hn5ze7e1+x3ZnFbbuXx9t98XeDl7+XWy8S/vLbBvr3S6FNOOzk5Mjg1O0NG\nTln1X/3efvPa1N3Oys7CwL+9vr/DxNHZ40xXXz5KVkFDTkhFWFVba//m39zgz9XXz9rf5O11bWtZ\nV1JRVE5WXVZl6vbzz8vVyMLBvry3vL/A0/RNRz84NzU3NDhAQk1a6OnXzM/O1s3Q3Nja09bKxMnD\nxMfK2OpdU1BFTUg7U2U/4dNN185t5c/f2svg6+hmZ3VdTFVPSktJUFRq9+fZ3djO0ODNy+nUxsfJ\nvbnLwL3i3GpPQzs7MjY1Nz5CTE5tcfTV38/Qzs3OxcvEvsO/wcbQ2etdWUhGTj9PX0TieF3b9PHy\n7l1obl395d7a09v37WNaUkxSTVNdXHn43t7l2ure3u7Z2t7Yz8W/wbi9yL7V9lpHQzg5NDI1Mz9E\nS11819PHxsXDwsDHxcnOzdXY5/P8aGlbV1lNTVdJXGNY6nXt6vjg2Nvcz9rg1+Dr7mtfW01MUUlI\nT05RYmzv3OPi1Nngz9nczNLbzdDJwcS8x8zHX2BNPz84Ozc3OztNUXbZ0MrJxc7MztjU29nr3tzs\n3evx7Xn+bm5rYVpfaFV9/Xnf3djs3t/k3d7g/u9wZnBXWFNNSEZKTFJdbubg3M7R0MvV29Hj7th+\nZfPWzNS8u9u+x2n4UlA8PD01PTc9TVBg78ze08nTztDN3tjcb9Dc3NTa1+LX5Xt7W1hSTldXWH5o\nZvPn7uvX397T2u3i5Wx7bllOTUtJU1VbfvXf29fV1tTkaPtkUe/va+rZ3c2+xr25xMjP5k5KUDo6\nOjU5O0hMdN/zyczQycnN1sze9Nt7/OnsbezcaunqZ2dfW1NsXV/cWXHHfuPD2+XR4Fpv9FRna05U\nW09QZVJSdXdl6Nbl19Hm3OJZYPlZZNve99fRzMDEv73Hz9feS0hNPDs7Ozs+Slbi3tvLy9fTyt/2\n3/ptbe/t59ro3dbm59rfbXRqVGt2WV5f6Px90OjY2Hze+f7x7vNeZF1OT1ZZVlhkc3t78+rk8vXp\naGBiYnTz2tTU0NXVvr3KvL3M1WFpSj9BOT47N0BLT1ze0tvPzNnU1Pjh3XT+9+zo4Nri1NXs4+f6\nY1xaVmxuaeLf6Ojl5OXs8O7n7nft/GZmWFlcVlhXWFdWZ2jt3OXe3ePs/XlsaXj75Nrj3tPUyb7B\nxcTGy/RaTkdEPzw7PT9JVGXl29bW2tjf4ebt6HFma2n06Ojf2tXb3t7y7vNfZe/2dnxgWN/O09rb\n197j8WNfX1ldW05OVFZcZ25jYGls9ebg2eD+dW98/Glqe+jd3djY28q+v8fJy9j7d2xRSkdAPkBC\nSVVfc+ra3erd5Pf48HZkYmBrdezh4tnX0c7Z3tzi9/vp7n747/tv++59/u73enlpX19dWVdVVVVW\nWmBvevTm6e7q6e/s7nh29fj63tfa3d/f7XDfxsrXzsnU6tnX7WxdTEE+PUJMTVNebWpy3d7r5+tt\nWVhaXGzj2dPNzcvJysvN0uPw4nVfaGhcWWx8bv5sYmliXl9fW11pYWBvdWlnbXJ/7/L16+/+fXp6\n/vDx79/Z3eDl73Fd5cnP2M3IztXLzN76W0k/P0BDSEpKUV9k/9ze7+7zalxl/vzt6OXYz8vIxsrO\n0Nz9avHhZE9afV9TaPZiYm1naP7x8e1zZf75ZmdxY1leaGNpcHDz6P356nR35uv939rr7t7f9efM\nx8zOysrR09DkYVJIQ0FAQUVLS05aYGrv5uno4uLp7Ovr8vn35NzWzcvOz9Xb7PnW1XVjcV9RVmVf\nXVxXWWRndubt/+Xa6vfufV9aXFtdXl5q9eru7+n06d3k9+/i7njq6+nNxs3Ty8nU1tHfa11OREA/\nP0RJSEtZa3be1Nze1dTa4e94bH7x9+fc2tfV1NbU0977Z1xt7WxZW19bWmloYnP6dfTl7+fo/G99\nemRhXVdZYmls/v138+Pj7+zm7+zi4+7k3enRxMvQyszX39rkX1VPR0JCQkJHS09h9vTs3Nvj3trh\nfW52b3rv4d7c19POz8/Q2+Ld2N7ueGJXT09RUVFTV1xs6eDi5ern4e13bmNfX2FrbHP79Hx2+PPt\n49/f3+Hs9nVx++TPys/QzM3T2dvka1VOSUA9PkJFR1JpdO/d1tLRz9Td6vr07fbv5Ono2tLT1NXZ\n3+1zc+v1YmNqXltdW1pdXV92dmh27u7q3uV+e2xiZGVodPh5bnn4e/n6/+zj5Ork4OTq9NnL0dnS\nz9LTz9TicVNKR0M+P0JDSFZmbfTe2tPNztPZ4err8m5pbHT939TU1dTV1NHY63FlW1RTU05PU1Zb\nZ3L97+ri3dnc5Ofn7/18d2xfXmpza2pvdX356+bu+erf4ebf2+Hm2dvk3dnf5dzffW1qWU5MSUVH\nS0xTXmd949vY1NTY3N7o7eXs7dzc/vfb2t7a3eXf3vNxZ1hWV09NTk5RXW506tvc09DZ2Njd+PLp\ncXd1YWFyYGjxZ3zve+j4aezyX3P4aXX67+b7aVNN5s/v3tHczsXO3+R1cXBcUUhFSU9dbmpj893d\n5/b79/jt5u/67eLh2Njo3uDh3/R3ZF9dVGRVVnZbed9g19r7y+Hry3jX2lvbVVXlS2h4S+NbVtBP\n/c9P1OxT01t2z1vv5Vf43F7d42LX6/rXc27bYnDbX+/kdOncbdz7Zt5camNiY19lU29bX/lW3Pp1\nz1rQ/fDNT8lT3O1Yyk7OZe7eWMxXzG3p21fbWG7uTNdL5mBT3EjOXF/GSb9V0t9lzVDOVtxdX+JM\n0FLjel/kYmvbXtZsdM5Jyk3ZeFzLQ8JGym7n013WYOlq729vbXRf7FdtclXPTcpKzmNvz0zFSMhQ\n0Vh1+GDfev/oad7q9tte3W5u4E7MRMpI1mRb11LVZt572GfVauRscGpk31/iXt1c3F3l9mruXu1r\n62vVbNNe3nDu7Wtza19l6lXKTMlZ3Pl5/F7oXelg7mDoZ9hm12TRX9V88+NP007YU3lfZG9vYNhc\n1nD04V3dU9lP2Fr17/Lt6uXt5d9o11baYOJ663xv7WDlav/rZdxS1U/dXuVh21/ZVdVU6ulf0kzN\nVc9OykjITtxvdn3lX9hc2GTn4FrXVuR9c3Nq9G326/z5fO5i213safP94Hvb/H30dnT3WtlTzljX\nYG/sVN5Y7GPyX91Z0E/ST9FX2l7nY+vy4u7j++nv7dtq1VnYV+Fi+FzvYfltefn9Zu9U2VbcXttu\n2WrVaOBk3mTl7GrbX2vqV+dic2lvZ/dj9XHz7dlszVrRXPjwWuRnbtZbzVvdbfttZndi/GZ97X/o\neW3uW+r8cs5YyVDOWub5cPFh7FfbYfH792rZU81OyUvJS9ZR7FptdG3tfONd1EvIR8dMzFTOW+Tt\nZ9FT0FXQWt5rcN5Sz0nPUuF6a+Vv6GfoZ9106G/fYNZfettMzEffak7JQMBAx1De42nMT8lUznL/\n3FjfWu9df3Ju7HHmYefoZtJW3OZXyEHGSuJ2Vs1KzF9+0UvHTNP+Ys5PzVPeaGN8XWD6Vt9j3/n2\n7P7l4+v77e/9ePdn6/tv6F7mWvVb8mXsa/xu523k9PneZ99y3/feZtz1a99c7Xp3auVd62Rxa+lj\n3FTeYu9+fHh38nb96+rs4PrXdNxifW5s/FjyWO9p+2Tpa95t2W7aaeJ66O3vdOhf4l3xbG7oX99f\n9nlh62HrZPR19+/n7eP88fXv63H7aPZy9H5ucWlsZWpmfm3s6/Lj+evv7OHw6XTse+9u73Pv9+r3\n7X56/2huY19mam11bf/se977323n+ffrbOdg5WHgX+Fu7mp+a+fr3+p87GjtXfdeeGn8b+776/rv\n8vHfeeZn5mTjZ+phc/p242TjYOBm52zxf/rxevlq/mzoYuRo53D5fGt9d/XvbOdg6Wrzee/35Xrg\ndebue+Vt32TvXndrd3ZycGt7bOxr53ji/O7lf+Fx5vz/72XpXulr9fV46W3/X3Jw/PJ2cm3/9ff4\n/vvyft/s5vDz5Xntafls+3Zy923zbPpub3Rn727ieu93b+1p83Pxd/D56nbqa+B13nb+bWb8Yftw\nfPRw43zgdO51/vZv8WftX/Fm7Xjk6ufp+ed47mX3ZPlfb15qa/737+/t7+/07+198nr1fu/78fLr\n6+t99v19dmJoYmpwb/Zw7PPq7Obl+u5s/G9pamj1dXhh+mzh/uDz5uns5vf3dv1q+uj/Z+1t53D3\n62P3aPNxfv17/Gl3bXB7dPb0/39u72x6/fvp7ePw5e3m6+7t/nlfbF9qXl9p/u7v8Xfj7e11efnw\nd/v/7ef65N/h83Vp6e/yaGV2ampjaWpy/WtyfPb5++3v4Pnp7+3qeun4+PJr/Wh4/Ht5dvRz8vt8\n/H3l6/nuc/tmZGd46/p2a/fv/3/u//n87/zvcn77dvd6fGxrfXrr6ez/b3736vf4b3L97m1gdPZ9\n+u71439tcvHv/Hd16v758fH4+mZv7/XvbmR2/m/v/vn8dejp8P137u55b2X76W52bu3l/ffq6H5f\nZffm9mRtd+X3fnt4/u94bHXr/nv/9Ozu/m7x/Hpvd/fy7Pvq4+tyXm33b3Rs4vBsYG70cWxgdn3p\n+X3j3tbd6fF1aWRcZm1udvnu4/R38+LrYWTt+/tfbfHq+Wl95t/ubGTw3u1xfnHm83Jx+3hbdGxs\n+2315+zf5vP+bnju+mpqa/z3/3/r6/ns7vF3a2/+dvv0dHfn7ev57+9nd3L/8Wxxc+/sdmNccOrs\nbnTj4N7p9Oro9GhfaHVgXmJyeXZp797h9n7o7nJcY/p79/Lr2ujs4/7x63R1/P3n+2/+7O1sXl9m\nbPN253ry4339aWp3bPb2a2ht5eLvf+bk6e/x/HJqa3vqfHRdYuN9+GRl6u/16fTm3+/7/efsfXpg\ncfR0ZFfi3nHv8X7k6+98am9tbF9y/f18fuzm3Xzz7O3sY2tnY3Ffa3zteG73493v+Ovk5G9t/n79\ndvt74u1jdvDf+V5u8ut5W2Dj8F5xcff3bPTe6erw7/v1625tfeTuZm9laX715HtbZ/546O535t3Y\nd2zy4+ZWXPHpeV9t49dv/vd7bV/h521oZHrn6Wtt7Ozsanzf7W9od+DubVpl4+lsV/vo3+9r2+dz\nanHo8+9qce7873B+ZX92belv92L131/2eW/lc3f99vrm5fL37d9nZftv+Wpua3nZ73763t5gX2vt\nYFj9/uj7/+7t8H7j4+jlcH5s/GhY+3bud1tt6+rzeeL5/uvy++Lpbe7372tV6tvheVVx5uD1WvLl\n62BZ7etnWn/k63hb39nza17Y3Wdk99jg62lo3d5hU2rtaVxsdWz+/Gv+4nv8aXPl6fxq4u7s/3jm\n29zt5+Dq5nxjZWZgWVtuc2fu7nvp7HznefvravNpafRs9G9u7uLmceXa4PppeXbtemdqaGh1fnDs\n6e/b7fnza/1rdG1o/GXv8vVvX/Xs6m5t5+Dc9ODzeXha5t/9YFjv4m9qZH3m8GZoefv9WHzx7+Bp\n6+zh22no9Hp3WX3k8Gbr4O7wX29qf+pd9Hx4e3Hvfuz/8t3peXX5bGZl+eV45u7Z2F1sbGt8ZmNm\neGJ89Gry6u/l927//t/mYv7Y3O9gcubpeOr7+/Jte3JvbV9eZOz+a19723nt2uT2ZO/xflts8evd\na/J8/OVv/F5r7mtkX3Ds7nfd5OFwZ+P3bV/x4+7u7/nv1+5+Xl/vVGPl/m5j6drkYVzx7urucv7n\n3eP2fevfd3F5cXtna2tdfWVpZ2nqZPDo5/b14+fpfPvp5+N1Yfz2+vZnaWlv7vVoburefWnx/Ol8\nYn344u176vH33Nn1dHBxXVpqWmFiXl5x6/3k29zT3O917/NtbF9043pecdPPeWJs+fNoUVx+XWB2\nf+Lhfn3t8uTi3PhkfN/d+X7v5fZe+Gr+9FXz5u1uXWn+4nRsbHZ0ZP7n5/jo+3ze7X3+/+3y7m1m\n7etsY2t1YmXr5NvzbuXf6ntraml9+2t67XV45fV9a2ru7f5uZXH78+X7ZvXf8Xvv6+nv7XRrcmNy\n/3x/dG5793tYZer163H75Or8/N3g8WLq3ePpYX3m72pf+X7wZmFwZmxkdHRt99/u7uf853pq+vzk\n7nNsX3vu+XptcuvbcV7v6eHx9OvxfGn9dfv8d/l66ep+6vDu9/VlXG9nanBf/3Dz+WP58fj16efq\n5+n99PZncurqeHRsYXD0XmPr6ezl7PR7avPpe2Z57u/v9OHo52xk7ml2bGpt++NobHxr8/vr+X1v\nb/P+7mnd2GVqduP4Wv3e8PV27Nvv+21nfO/yaFpiZnfn4Hn+39z/bHZt6GNf6PDqcOz9+On582x2\nWV3we/Ji7uHl4W3v7/7ndW7x+XRt6HludHP4at5kWX557n9vdtzmbfjo3/rx6nf56uTvb3Zw6/xk\nXlpk7fFlbu3j8mNhePB+5uHd4/vx6N1xY+ryf1VTdGp2bt/be/Df3/lkb/F8b3BeYfPmfmN+1epp\nXWzS3PB26+n2dmn1YG1lYO5+fm1w3dv8Xvjd7XF7bGXsXW3i4+584v78cGpm+vVc7ubud3Ll7Ohs\nXu7qfGNd/OLk7Wh7/nT9f2x5cF5+4Otycuzu5urr42lp++TrZOvobHR74O5tc/l6e25k/XJ+ePrh\n8flmde3g4+h2Znpn+1tYefHY/lz+63t6fvDj6/596+RtdOft6Wlj7OjwWXHjem5f6Nr6Wl/f5Xp3\nXHzZ42lg6uvvY27m5OpZ+uR7919k9eb4cvrxdWhmber3YXrb+mJs+d/5eXDs2fhzeunqeWpm4/dk\nat7UaGft1t9kbmf5Zll83PZU7d7p+2F49O5pW2Bx/mxed9vubvjh3eV6+ePm+Hnn+O7n5OJlZmtp\nXmjueG9f+/vu62/n8fhuXXb4emNz3t/i93nf63f69fRqamZi839rbHfo8nJha3zu6PHf8+Dg9H1t\n2nZeZ3fi9/N0dvx/7nRqXHvobGRw7evp+Gv97Ovy/vLrc1944fF1Z3/rb2hrau7f4/356uvqdW9/\n/G5l+H1v6+F/f/f58WJt8ub3X/j1+f1uc+jtaXpo8+rtbV3p6Xlye37w8HXv6Hxo/Ph29vF0YG3u\n/vv8/P5t8Orx7+n0fnd9e2T16vL5bfXp9WV36vltZ3n87mlf9ezf7WV7fPRuZW774Or25tvy8PRx\nfGp95+z4dmp6bm5kavDwa2x9+uh1d+vo7GlobPntbm7m4vHk6u/p9Wxzd2Rqfn9ucObi+Hh96nNi\n6ur2X2Lrdm1jcuXt625q3+1nZHjk53Bs7NrsYnDj7GZs7uD1bm1t9PJuZO/obm10499oXH3e7mRl\n7Nzg73nf42Z8+GZeZnRzdOnsc/F+bHVtef53cfx+8OTp6/zp8nJ8cPv5/vbvdWpvdHbt6/Lq/vL/\nd+js/W999m9bYvX3enHu5+7v/Hv3eGpjc3doZ2Ht3+X6bvXg4vxy7+RzY3P45er18+vqeWBedXN0\ncHD1/flz+uTr/ndy/+f1cv/n3u188e34bWRlbGhjanJvanPi3/d8+OPi/Gps+Ob2Y2r0829z69/c\n7P3q8HhrZmFr8+5uaP3v8v9n/ejxdm747fP++un6a2p6eXN3bfzu9Xn+5ev79erqd2prdnpnYnrs\n9vry9PD4c3vy9XRocu1+amJx7PhubvPo6fT15dzkdm/96PFzand+enJ08fLtem308nhwfGtiZWd2\nfXV88N/f6fTu7Pd0b/ptaHV99fj7+OXf72plb/7ye3h8fnn+9/19dXV/7+vt9H7173tqa3Nwc3f1\n8Gx86fFuZG/46+/48Ofj8ffu7HxrbHZ5bWBiaf1/bX3o3uXufv/0/29pdfv89Pby7Ojq9/96dXVz\ncHd0dXr5/H5++fP7f/r6fH349v78eG1vfP5wanJ5fPn+7uvs8Pnt6erv7uz8eHL59Hhvb2hrbm9u\nbG568PLx7OTk6fF8/P18cGpram776+z2enb+c2ltc/77+vXv7/X8/H5+f/96dvz9fHl79fHz8/Ly\n8PJ/fP58fXx0bm78+n3//f7+eH379+3t+X77/Xn+/Htzb3L++/nx6+jq7fF9dnVubm9zbW1x/vn1\n/H39/X12dHn78/Ht6ubn6e3y+XZwcXlybnR7c2tqb3V1eP30fnr37urq7vL6fndxePz+e3Bue35+\n7urn6/Pv8/15ffz8fnJvb3FxbHH69fX59+/v8X5+fHhva3N3dXb+fnp69+vq5urr83x8dXRwbm10\nfnx69+7t7uzxeXZpaG52/vbw7+/z9fn07u7t8Xt99/j6d3JvcXV0c3R8fXf/9f5yd3h++Hp5fv3z\n8/Dp6O18e3xzcmtpb3Fvefv49Px+/fbr5uft9P34/X15cHZ3d2xrcnry7e3v9/1+/fb38/d+fP34\ne3v8enx3eXt4/vx+eXh1c3FvcXzy7vH08u/y7+vo5+z1fHV6d3Nra3JubG52+f378/D1/nl4fHd7\n/Pbz+PDr6+vu7/T8eHR7dGtmaHL7//58b21udfzz8vf09n15d3z48/Ht6+zq8/f4fXd1dG5rbWtz\n/3h+fn3z7+rl4ubt7/b1/Hpvam1yd3RycnF0eXr7+3Rvc3p1c3Rucvrv6+jp5+Tl5+zx+fv8dm9p\nbXRubXX8+/76+vx9fnx4/vz09X5xcXt8f37/7+nr7vh5fnx2dGt2fnz+fHZ5+/Lu9fjz8vn99/P5\n+v3+/ntybW5tbnJ8/3Z4f//7/H/y9Pf47ebt9/Ty7+7x+fz3eG1ybnFvbW1qbXd8fXh39e3z9Pb4\n7/Lx9XV7fvr07efn7/l/dnN1dnh1b29tcv73+H/+fHt2e/f5dnb38Ovu7+rq8Hl5/vn2/nRubWpt\nb29uc3Z8/vvz9X7++/nu7vX7+fn37e3r7fP5b2xsZmlsbW52cnb+7+Xn6e/z7O95e/v+/3l8eHNv\nbXN5fPfw7urp7fh8e352cXFvbnF98Ozo6O3zenZybG5vefl8dXr68erq7u70/HNucnh+d3Z2dHp8\nfHZycXl9fHv66+rw9Ppzdnd/+fjx8Pn39fbz8Pl3dG5x/vP5/ntvamVobvjh3NfSz8/S1eH1bFtT\nTUtJS0xOUlhkbfnq49/e29zd4+Tm4tzd3uHe3d/g4ubq8G5kX1tZWl1faGlrevDi3N3Z1M3P19vg\n3/B2YVRVUVFOS0pKTU5VV15pfuji2tTNycnLz9PX2tzj6O3t8npoY2NhX1hVU1hcXmdocP7y7u3t\n7erq5+Xf3uLu/nlvbWhnX1dWeubs3tnV0s/O1djZ4+9lVU5KSUhISUtQW2Jv6tvQzczLzc7S1tvo\n7/p5dXN1bWViZWZlYFxcXV1cXV5fYGVtdffo4+Pf1s7Oz8/T2d/k7/trWF/1dm9z+9/c0t9+fGdn\nWk9HQ0VHSUpNUmbv2tHPy8rKy8/R1dfc5P198fdrZWZnbmpoZGJmYV1bW11hcHX45d7c2tfU1dre\n5vZ4a2NdWFZYXmRiZ2tietrU1NvVzsvI0t/y6vxaTkZFREdISk9YbPDj3NbQz87P09bY29/m6+7m\n5Oz8b2ZeW1lZV1daXV9iZWRn//Hn29XU09PW29/h7vR6amZhXl5lY2FlX1pbZOzg593YzsnM0NnY\n4X9cTEdFSUlJS1Jjb+ni3tvY1tbT2NjZ3N3f3uLf5+n4c2tfXllaWFteX2BeYGhzbvfm4Nzc1tXb\n2tzn7/ZxZlxdX2FnaHf6emRaV2vh/Xvq1crHyNDR1uRxU0xGSUpLT1dia+jl393i5vLq/H797+78\n8e3j7PPs8PP17Pf86+zq5n5pYFpfam13fu3q4ufq4ePk9XlramplZF9lZ3ry7O78eV512+346NvS\n0s7a393wa1ZRS0xNTVVcbHTr6/Ho6ubt5+l+8u7s8efe3Nvh3+338e/sev/5fG1lXV5iY2Ngbmz9\nfG37+efo6/x67+7v+e3q6+Pj8G9hXFpSX9vs/ejcztLO3+/jeGxaWE5UX1phY/h2+vJ57vT7df5+\ndXdze/js6uLq7uvq5eTc6OTobnb9fW11aGNsamtt8ndueX3w7/Fvevz77vLt8e7/7+n+dWpmV+bS\nf/Du3d3f32R6/mldWVlSX15cannu/Onue/jw8ffq9Ozg8+/p59vc4Or17X9pfnJpZl5obmdcb3to\nanV1/fX+9G/7+fvo7ujk7fbt+/Pw5t/pdWRha9HkbN3aytXa7V/7WU5HR0hMVVNlbN/b2NPf1dnd\n6ebf/+/1+vl8e/PofG5/cmxibGBZ5O1kefttdmtf7u/o5efW4uTr9d7m9mFfaWdfY25tX1Hox8vT\n1cvGxc1sU1RMPjs8PUFISlTYzM3KxsS/wc/h3tp6X19gaX5sa+P4ZXz+XmptWldaW05cbFZn6+zd\n2N3bytDj1tXh92NVXmNZS0xbfs3Vx7i6tbq/yed1PzYzLiwtLzZBV9fIt7Ozs7e7wsv4VUhGRT5F\nTu7PxcG/ur7F2HFOQz01MzU8PUZX4MnFv766vMPLz9lnTENIRkBIVFlcUs6nrLqqrquwzE0vOysd\nHh8jKzA72q2jq6ijpqm56UJBOywpMj9K3dK+r6uttbO3ymU7Li4sKCcuO0ndx7mvrK60ucDXXT83\nOTg2NDpGbszpW6qYpbOgoqa4QykiLR0SGSAmMkDRqZqbqqWfqsk6KykuKR4nZMC7raignKO85Ltj\nKCQjJy0rJTi+vcu+ra2ru2vJwFgzPUY/Pzs4Xc5FTce998Wgn66noK6xzy0jIyMWFyAlMvXGrpyZ\no6ylr2U5JiIoLCYpbLCqqKCfnZ+5Vjk1Kh8fJDA0Ok/ArbG3urG46ExITkdAOkZbak5F9s/aUuu+\nzV2xnKe5o6W0xDQjHyMbEx4tMeO4rZ6Yn7avsD8sJSAnMC4xv6Wlo5+eoqrSNjQqIx4mLDRSUMO0\nrr2/vM1vRT5AblBM3cbQ2NJPWfdMPU7oZFPFn5yvq56ovTwjHx8dFBkwPE+4qZ6YnrS+tkQjHx8m\nMDVCtJ+goaGfor1MLi0lHSYwQUfGu7ayzu5pYjk5S0lq2MzCs7bN1NZLNjc4OEJGYt/Popajspyf\nwD0jHRsbFRUwXk+yoJ2ZnbJxyDscHSImMkvYrJydpKOirFw7KikqIys/xc7Gu8PHXz43Pzw6TfvN\nubK8uLXHXlU9LjI7OT/tx7y/spqYtbChvTwkGxsdHhkmvL+4pKGfn689N0IkHCYtPse6rqCdp62v\ntvs1MSwzMDRcwrvnzO9ZQzM3PExG98fDu7i+ysPPSj5EOjFBX2XKvL7IxaSYrc2mtVEpHB4hJB4m\nvbjBq6qoqMExKjcpITNPxauqrKWkutnpP1NGMD/Ky23AwcbfPDAyOisvSlzUv77FtrfT3+BrT0U+\nQEVb6lnQvL7U8rqfnM3Jp88/Ix0oJykjOLLAva+4r7VCKy49LTBzza+psrOst95gU99zS1fXwn3j\n2dv4OzU0OjYzQFjez83KxbzA1NvT2k9NTUVFcXRQ2MHGTcienLa/qbhPKB0lKiUgNMTJu7K6r7FP\nLTI7MjZQz7OsuLquu+rmZNrNWHTOxF5U5WViPjc6Pzw5Ql5+79TRy8DD0NTOzXBVY0pIU1JT28rR\n+2Wsm6bWsKzoMyEhLCwkJn++1bu7uq7ANi0/PjRH7MOus8O3scjV0VnHvVxUyddVYktQb0MzOlE8\nOkpMZt3yZMi4w8rCyMlsREdJP0RoXta901i5nZ6+v62+RiQeKi0mIznCysC6vbC1Ry43STw8X82y\nrry9sbng4WhWxcdFZsLvaV1LZWI5Mj9HNzxLTNvQddS6usrGyNfWTT9HRUdXdN28u+fVsJ6i38ev\nzDoiIS0uKSU/vMrGwcCyuz8tOVw/P2DMr67DwbK4yenyytF1RWDZYl5Y7GxKOzk/PTg8SmHb2NvF\nubzHzM7YV0RBRkxXcHrQu7rW36yeqkvBtVMyICU0Misr5bnKvsjNts4yLUFfRVzcv6uw0cS6xORM\nW8XCW1DMxeJYTmNkOjE0PT47QVDQv9HZvLjA1vjW2FA9RFtfX137vLfTWbKbpWDIsss2IB8sNCkn\nULm+vcrSuME0KTlWTFvbuqmrv8a5v9tHSsrWamXYw85kS2lYOzIzOj0/PUzUx8nMv7i7y/re0FE+\nP0pccVBYurRvRLudntz0rrtJIh4sNCwlNb29vcTftrY/KS9hXFHixquovNfCv89UPuS9zF1wwsHV\nQ0JuRDMtND9EQj9vv8DUz7y2xHdg5OtLQElZ5/RS2Li8696pm6xOu79pLh0hLTYrK92+u7jt3bfO\nMis/9ejKz7qortNw1MjtQHPEyMXk0sfPWEJNPjgzLzZFSkVhyb7BxMO6u95gfmJKQkZJZdJP57e/\neWuqmqpTwLvVMB0fLDkuK2u9trP9arrFNig2d9LH4sGqrMhYdsvJSD/Jt7zrU8m83D48SUQ3LC9G\nW0tE47+8xt7EusZmSltwWkdDcc76Yci/z1q8m57Fx7vERiMdIjIzKTnUvK6/U826YywsRdu+ytuy\nqrTeXm7VzUdJurfO0uviz1I5OkM7Mzk8QPNnU8y+w8vBv8rHbEtYRklVT1je1uLHwVlcq52ozsi9\nyjwgHis1Ly9Dy7Sux1vHx0IsLT7avs/Usqy4z3pf4cl8Wr24xNNbTu5hOjU9PTtDPj7y0+rZyMnE\nvNRq0/NNSEhMXN9v2b7HxMJWQr2gpcndxbtqKB8nODcvOVjCsLxW7MVxNCw2d7zG27uur7vcVXq+\nykjZvsXOVUR5zkY4PD09RTw2VtTm3c7Pv7nKaOfYXVVNRF/R2uTO2djN90JHsp6p18TBv1AlISk8\nOi9AVL+uyFDqzlMyMj3Yt8PItq+1xGpG379YUci8xPo+RcfrPTlCRERENUDbydXe0su+xl9f0uRY\nUE1Zfn3dwslTXc5rRmGtn6vF2cnFPSckLD0/Oz1MvbHJXVztUjg0PM+3vL6+vb3KeExdxc7fvb3G\n20tAXl06Oz4/R0w+Pt7K1tHb/sS/4m/X3er7TEdw2+vT219tz9xAR7OfqM7gxLlaKiQqOT47OUDK\nsLz3Xn1dPzY69by+xcPDwcDOXFfLv+nJvc3OXj9GYEc9PTxAWWFDW8/P0uBe1bzG9OLUfV1NQkrg\n0ernYXTJ7z9OrZ6uz8zKulQsJyo5ODg9PM2vu9hzZUs9OzhUw8G/v8fCu8P1XszDzLzKbeBbSEJH\nRE5RPz9VW0hYbnvl6XLUvcHIxdVbUk5ERk5n1cxwbMnYRjq/o6m93cKzyDspKC85PTc0Y7Svvuf7\ndE89ND5uzcbKzsK3uMth7MLIzNlQde9+Sj9ITVxDPD5caFRfX+LYz83DvcDNfktDTkhFVNvFyt33\n09NFM9mkprrNwLG5SColLDE0NDBFtqy2ydjuTj4yNUzaycLFw7azv+Rj18545H3u2v1MRXtkV0c9\nQFVaP0zn0dPPz8K4wvNZU0hLRTxPzsrNz3F61vs8L12po6/Auqyv6y0jJy42NzA+vKyxv9tZRj0z\nLzpL2b67ubSwtcLZZmbmXkxYd+bh6FhRXlNEPj0/VHZkdNrNwbzB2OlrT0pIQ0/c0NHV4Pr762JC\nNVuoo6+9vK617DMmJyw1PDU8z7OvutpHOjo6Ojk9dLmvtLi2s7TE30pAYe9+TEhczcpZSEVOU05C\nQFffz+D/7sG9zmpOWHzmVEhu09j6UEpb6t9nR0jLq6m4u7u3vPU/LCouN0Q+OU3JvL/PWD5CUk9J\nRVHXv7m3tr3DvsTjZFhRT05pc1pPWePvW0tJS1hpVU9T5s3IzNzY0M/iZV169mpOSlRadHlvWVnv\nzbe5xsjDv8rK01JLSEZAPD1CS09PWmpWaOXzb29+Y2L64tXLyMnGx8zP0ftZYF9dYXLq3tXb5d19\nVUtEQkZNVV5s7N3S2+rmeFlNTlVf8Nra73rUvr3Iwrm8v7q4xPlOSUQ6MS8zNDQ9SUta3c3O0M/V\n2Ot46dzRycO/wcLBxdV4dmpfb2lZWWhpb21ORD9ARExOTV7b0c7M09TR5mJVTE1a/+zt5uHIub3H\nu7rDw7zC2mZLRD81LzE0MjdGSk3v0M7MzdfV2PTqz8rOxby/xsPEzdna8WBoYVhUTUtNTUVERUBF\nUVtv39XXz8rNztd8Y15QTVRmfejn7cm4vcm9usXKxMvZfkxEQzo0Njg1OUZJS2vW0c7P19jiZ2nb\nzczEvr+/vb7L1eNcV2JZTk5QT1lVQ0BERktSV1rlz9LT1dfPzuNraF1SXHx8/vh61Lu5w7+6wMvE\nyNprT0U/PDU1ODY3QEpKWuPUzcnR5fB+eN/Pz8u9ur2+v8rNzfJPWF5QTk5JSk5GQkdJSldkYO/S\nzs/Q3N3R3mlsc11c/vLx9WBdzLvByr27xcrGzuxkTUA8Ojk6OTg9S0xLY9/XzcrU6evj39fU08e/\nv7++wMvO03BVU0xGSEdGSktJS05RVWNufNzT1dXW19nc39/rZ11rdnn1eGJa37/E3Me6v8jDw9x6\nfk4/PDk3ODo5PUdLWOLV2c7J2v7n2NvVzMW/v76+wszLzepVVVRMR0lHRkdHRklMTlhk793W1dbR\nztLb3drjdmx6fnJyemFXXNnFz9nAu8bKv8Xe4vVMPjs5Nzg4OUFNTmfW09XMzNnc1dXUzszLycnH\nyNDRztf7c/JdTEpJSUdISEdHS1Ne+93T0M/O0NnY1Nvs/n97c29ueXVdVVNd2s/Ux72/w729zNTT\nXEA7ODQzODw9Q0xb+dzUzszLzM7R2dbPz9DQ0NfYz8zU1s7XeGVdTUdIRkFBQ0dOVFj82dTSzMvP\nzs3V4ubvaGJuef799u16Z1xTV+zW4dvIx83IwcjT13VKQj88Oj1DRklOVmrj2NXS0NTU09rl5d7f\n3dfW0MzLz9bV3nlnX1hPTk1JSEpOUk9W/+Dh3tTR1M/P1N3k6fH2+3Nsc351aXH48P5pZGJfX19l\nZ27v3tri4djV1tXT2+PwZlJOT09PUFBPU1lcXW3x7Ofh3dnUz87Pzs/W19XX3eb1aFtTVFhVU1RR\nUFRZY21v/OTb2tbOzc7Q1t/r7HViY2leXF9dXF1ja29mZmxrYWB6+frl3Nza2dfU19nc4O16bWVf\nWlVVVFNXXmVgZfzf29rV1dXX29/u+PbyfGZgX15cW1tbXGBpbHFv/+rh6O3o3tvj4NnU09fZ5Pd/\n+m1jYVxUT1JVWmJv8+jr6ODg6Ozm5un7fmxkbXRydfft9HltbW10+Pfy8/13dXhve+vg4OTl5+Pg\n3N/i7X53Z1xWVVVUVV1mcuzp6uTe3+Lm9XN+/XRxcXb16Ory+Pd9cnd++/b+/vfyfnJ+eXR2eH79\n+u/o6n7ZzE9d3k/Zb1XVXPbuX+ZrX+pm8Nn4809b12ByZX7Pdu/e49fW7PnWavtrT2pqaW9h6X5n\nd3l85m3waHvufer77NzNz3Pu/lFRU1BSVE9d/tvd0MXjz9P0fm3cVmx3Wdxj3/nj1FnkWllfZlRZ\n7mTwcuzV9NJv3ups22bf5V7ZYNte9GlX61L4YFTWVt7tdNf79Nt2a89O3uNezlnZ61fTZ19s7m1e\n/Ere6snnQr5B5+k1vkXc4ka0ULzo6MVewjnPSOJNN748wkRQv0m4Ru/E2s1J1OrjZUZ7V+j2SdLk\n0vJOzOnaS0vQU9VPS83uxkjjxFXDQ2fJWtFGaMlY60tYxUzlT+XPXXdGy+jecW/NYspUdc5XylLT\nT/16WtlU3GRZ/F/6Y+5e4u3hYnreW9vh6N9x2Fnq30vkXFzPVvD6bc9P2NhZ3+1tb/PQSNbtVs9N\n5lDgzUPJXN/fac9M1/ptZFzgW/JVfc9S10/Y0FfTT87TSOhe1fhH7dzSZmTb3t19XVHH8j3VZM9l\nTtpcwU5Pfc7IRWzWw1VV5/HWUE9hzVVH++XdUed15MpQ8+LN1E7aY9DZRvjz0mhOWeq/Pk3P2sxC\n2mVuvkFlZsDLO/HkvkdLStW5RD3vt9E9VMnFXT9My89jPmq42khPxMR1UkXKylZBTbzSRURkuvdQ\nQOe2T0k/v7lBTU65zj9dbbrnPGrKwlFB18vPT0DO5uNNS8zw2UZ9y1zVP+vD2Wo9vM1IZkPDeGRQ\nSrZmVmjZv1ZhTczGPVBfw2pXdkvE6mdybMdK2vtY0HPsUuzke+9PZ9jfXdpfX87PSkvD4kJf49b7\nU2fdv+5L7cbeUF9xZV9LaG/rdVzWzdRbWtXYfftObN7vaU/Z03RuXN7ccVdeztxnVdXUYltv3E9k\n6l/jaVXtyspO3szhbVJeX9j+TOV8bGV51mR1d93pVnvq+PNV8NPWWFHW2WpRT8vSXvntz/Naa+7V\nYE3+1edJdtX0+l3l3eFeWd1pamfbX1LV3GFWb93t+Gnv3OhgXdjab+Nh5N9manHdamxj6dpWT2jW\n6lxw5tvWZF/m0etLaeTrcFJn185iV/LR221ZfdLnbVDq5VZfXNbmcXlqzXbwaW/ZYm1V7NteWmLm\n7mryWebdXm/112h51Gjp7HL2YuFWfeNj7u7de2/f7dxXR8a8S2PBv8Vvx8/t2T4+Sj83MDpJSkxM\n2L+/xcS2t77Uy8r/WUVOTUhIQ1dXVV9v097u2NzT5u9nWHtoVVRMPMaqScaprKnRqq9luzQyNCkm\nHCYuKC02TdzOu7Swpqq1ra2yz8y7WGT8SERITTxEW0s9S1E+T0pKT1zrUN7M3sbDvcLAvtzf0GJB\nNju70DHPs662zKu1ub40PzgtJB4qKiotL1TPvLmzpqSorqypssLdfmZBPzU7Rjo9PFRhSWtT6OBq\nXlV5Y1BSXf3Y337QxMfm7srf+VQ5RLvBN9OpqrS6qa+4uzw3NzIiHCUnJiUsPVa/ubeqoKKqp6ar\ntr/bXFNANS43PTc1PU5ZYlJj+t5UP1xbUkVJ2eTU08y5u7u+wLzK42M8PsPaOPq8tLvAsse5vjk1\nNDUnHygoLS8yPny1sbSro6Spq660uMtMQ0hANzE4PEJKSE5r2mdabHlmV1VIV15XWu/LzcG8wLy6\nv9nc8Uo7MTnmVj3su62tsa60rLhEPDUvJiEkJCwtLThtuLexrKemqqqwtLbA6U1YRTw8Ojs8Pj9B\nTk5KbV5QW1VkVV9+X8/KzMG8tb2/u8vfYkg9NTQsNclTUbutpaqnqbitxD0vKSsgHyEhKy83QuGy\nra2qp6eoq7K5vMVpSUY+Ojw4Oj5BSkRcXU/rYnNna3pQ7/lh1MrLz8K9zM3L91VMRjw5QTcv4LHF\nw6ympaentMu4XSwlJCQdHyEgLTxHSsKqqaijpKenqLXGwdBJPT44Lzg5MD1NT0rtz1fdzOVjdN9T\nV/lTXd/S3dfAx8vJ1v5a+ls/QUVDPtWzy7+ur6yurr5oxUswLCYlIigpJjNCWNy+r62opaqtrbC5\nyt5bPkRCOjU5R0BO82x73dHw9OpXSlJNQENNWWffzsm8uL6/v8TU9VtFPT4+OzZEvbrJtrOtq62w\n1tt4OTEoJSMkKisvPEvPvK+rrKinq7G5vs9mVEA8Pz9APkRXYOLZ39nf32ZWV0pGQUNFR1No1sfB\nu7q4vMLMd11SRDs5PD5GS0X1tLC1r62usLCz1kw8LywoJyIhKjE8SvXLva6qq6ysr7m9wdFtUEtE\nTFtJQUZeZGXgX09dXVNISk1BRU1U/f7Px8W7vL3CyMr+dWlOR0FGRUp4fllR9b65ubW6vbu+v9tZ\nRDIvLy4tLC40P1/Vxr67uLSzs7a9xc/Oz+/ualVRV1hLTFVOTFNWUU1TTUlVWVxicOXmzsPDyMjB\nxsvO2/5eXlROUVNWVFVPSU5OTExR6dfJvLq7vLu6vsbXYkg8ODY2ODw+QExZfOXTxsfCxMvKz87V\n1s/Z4X1rYVhPT1hj/GZlbGR1/fT4et/7Z3z892Jr9fLa2uPq597o6+9iV1NXUlRcV1hn8+Pe2NbU\nzM7Y1dXf6+fvdvXf82N35e5kY2NbWmBbWVdTT0pOUU1OT1hmcvPq18vHwb++vr/CydLe72RUTkpJ\nSEdISUtPT1JcX2h86NrUy8jMzMvKztPZ83t+Y1ZcX1lVXF1TUU9NVF9udfjZ0tHMz9HR0NT0c21a\nVFBPTlJbVlt2/fHfz8zNx8nMztPY5+blXVVPTEtGSEdITkxMUlx58t3T0MjGyMrMys/Y1NXc5fFl\nWlpYUlBSUE5QU1di/u3n3Nze3Nfa4urr6vR3aWlqamZsdmtwdfzs7OHe4d/q92xobmJmanD4//rx\n7u57/u19bGtra210bW/8ff3u6Ovw5t/i4eDj5+nm725tY15bVlRTXm1s9+3n4d/a4ezm5uXo8nNw\nbm9naGlncm967uHc3d3k7e7wc19hYVtYWVpXXmht9uHa4N7a3tzb3Ofz8fV+dnxucfPr6/b3fWZg\nXlxcWltcX2139OXf2dbZ2d7j6ezp9XFmX15aVllcZXn/9efi3tTQ1dvf5vpvbWtiXl1cV1laW2Bo\ne/Lf3d7Z19fZ3+b8eH55+fR+bWdvcW9vamthX2BbXWdxenL37+ro69/c3+Lm5eTn6u7v93JqYmJj\nZWdtc251enx6efDp7e3w7/Lz6Obk4eT3a2hiYF1bXGFobf3u6+ni3N/g3+Hl7vtybXFvbWtlZGNn\naWZseXr97unn4t/d4efo5uj3eW90cmpsampoZ25tev398vh7e3d1dn/7b3rx6Ofo5Ofn7ff7d2tk\nYWZmamlqb3ny6ujp7Ozo5ezy+Pn/fnhvbW5waW1wcHj99PZ+cG/66uXk5+fn5el+dHzy8P39eXJu\naWhkZmloc/P09/3/9vp5b2hrevfv7O/u6+vt8vDy+vXu6uz59u7sf2xqamdv/2xsbl5l2+JobW94\ncW78fnbp4/Lp79zd+trcb2Rkb3Vsc2BfZ1xecO3kb2J77ebx9+ff3uTp397x8X3v6HdoYmVqY15e\nWFdj79re/Ova2uRt+9jb5FZHWt/Sz+9XS1XUzexVUF/l71Rg3M7Wfezb09/U2GViUFBb6vBVT0lW\neeLU0NHadmV73cTXR0dey8ntU0lryMvOdEVARXrI0WxLQ1rFusRSR1Rj7c7Bx/BFPU7LvcZZPD1V\nzsbXWkpXb9fL4+TXd1Fd3+pp5edlY+nM01JZd+fqZW5jWGLZze1NVufazuRgVVJ08tfQYkxXas/L\nfVBMYtrDwdVbSk58yMvZVT9FYc7T6WZNWuXSz9xxTlx+4tTx/vft7W92Zl1ldWZ35XNjYOPW9eVq\ncPdTbunS1lvu9O/R2OlQRU7/091mbFz3y8rXWVFmeNHO9ExKa9TP81pPVG/f1fVcWVdv7d3Y7fNg\natvP0e5dW1xy2dTlaFpi4Nl9XVhNVWjt7mrw4dvU0tXnZ2Jge/nv5+XX2ufg5uptYlxTT09XWVtb\nX3Hp4OHh6HNf++Ls+HP+927l6Hb4//Ds8N/W3+TyY1lVdfp46Onq/D86z7ixq661zOvUSzs2KCMj\nJzZJy7i2rq6vsr/PXkA+Oz1JT/nXxby+vsTU4GhPRz8/PkBNUVxvZ+rNxcTJ0+n73e88MsGzspue\np6nl1jErNRkbGxQhKUqxrp2kqJ+vrbJfUCwpKCU9T9Ovsqyqq6etsMQ7MCYiJiguND5i4buvrauv\nt7/V909FPzg4NjI2MjHdtK2cm52bpq3JOjQcHBoTGxofNXerqJ+dp6CnsK674T02LSkyOj5e0dHE\ns7SvrLO821I1KiokJywrOD9twLSoqaintLjJV0c0LiQkMzTIo6SZmZ+fsLhQLiwZGBYQGBsnQcCn\npp2bn5udoae04TctJCEmKDBE5s26sLOtrbS9fj4sKCUhKCw1TNu6r6mlpaaqsLzzOysnLS1Pu7+m\np62oubvoQjsmJx8bHhwlL0LDuaqopZ+hn6Corb1kOi0oJSgtM0Rq1r+4tbO1vNRTPC4sKiouNUP8\nx7evq6qsrrrRQzxFOcq3vKezuLNo3T8zMSMpISAqJDA9Tb+8ra2spqqoqa6wucpdRDQvLi41OVBt\n2MPMv8HS01BBNjE1LzxCRNXKurCyrbG3vk5HVUPNr7WoqLix2UQ+KysiISMdJiktaPe5r6+oramo\nraius7bXcz83NSwwLy88Pk3Xx7q0tL3PXz04ODY7QEBIXHnLubOvsbndU91avqmvoqW5tU42MSQm\nHh0fGiEoLcm7qaGmoamsqrKvtcLIVEg+OD85PUM3Pj87W9/RvcXOdkZFOkNYW8/W2tR3597n0lRM\n0nK6paadnKWouFI5KiEcGRcUFxsiOsquo56enJ6gn6irtO5TODEwLzk4PkY8PkM+WOHXzdbqUkxD\nQ01c6uHQ0dLNysLXU87TzqutqqKsrK++zE0yJx4bFxYZGiQ4V8KvqaadnJybnqWuxFtLPjgxLiwq\nLi45S0/i4t7z43tu1uXa29/439r2+lhQPEu3tqieqKGlvbfORDcrHxkYGBklOl+3rK6rpKiopbbf\nRzQrNUZFwru3ramqra5mOCwkIiUnJSwtN/K6rKSgpqivykcsJEe8sJmgqaK2t7tVJRcSDg8bJTWx\nqaCWlJeZn+UwIhgWGhweOtGrl5KQkpeoxkUiHRkWFhshLGi/sKiipaSpvuM7LSEjva2kkJ+hmK6o\nyisWDA4MESAjLbOjmI2Nk52oPCgoGxgaGRs/uqiZmpudnKm+ZSEeHiEnLzsxXL2xp6a1Y0gxLywj\n1aqqkZedk6Ok3CUaCg0NDh0oNLGblpCQmKex2SkuIBkcHCdBr6inn5+ioqlZMychJy0xKy88Uq+k\no6WuuuNwSSQlyr6vl6iqnrquOicbDBMTGDI90qudlpaYnbp17S0oJh0eKUTPs6murKOnrLw/KyUr\nLS41LzRTv66pqa64tbCzulEiHD+1rJqluq7PstUtJA4OFxYvSUy4sZ2WlpWessY5PTgqKR0hLDjC\nwLWxuKutsr9HOTU4Pjo7PD5mv7atrbKxuLm5zGY7NDEkJD9nvq3Csbjhsr/YPyMhHhwrPuKzrKWk\npqWprr9INCkjJCUxSO2yrauqrqy/6X43Ly8yQUryzM69vr262GtBOkRX1N/q13Ld4+1uPjw4OUde\ny8C/vbWzusLQW0dUXEs8MS8yO1nx39zPu7OtrrK9bVNAOj40Nj5Jecm1tru/z+Hdd0U8Nzs9TGJu\nxsvCusLKY0tOSU5XX/de0r7EvcTWZUk/NzQ2Plrmz8fJwLu5vMK90VJOS0xIREpHUu9lemZTW09R\nZmzh68u5vLe/zNBr31dEQzs6Oz5KT2fezbu4t7fEy9H9ZUM+ODA7P0RiZM3Cwru6t7/Zz9VnUEVN\nXlZQPUdUVnFTXPJ949Lfv7jDydLJz2tPP0JDRlVOTkhUdu3IycrN1tHOwNBPUkdEadfwXW1wWf3o\nXF5PWt/k6+jMwMXDx/Z4VklHP0JBPlLUwru8x8rOz3VLQDhCR0Ncc9nMxMDIxtLb92Dc4W9IP0xS\nfOHr2dfMyd/uW0pPUllXZ+JqYNrj5u18zvZb5WVjat3Kzs3HzNJcRVNhT0c+P1Nt7ePg8+DDwMzM\nz2Jpau7WV1RUWPdy199eV1pjZl1TWHH459DFzdnT3m5eW1NGXFpMam3oz8rP08fP2NXqVUhFRkt6\n+VteXNrL03h+6vvW1cjE1l9Ra3J3XVFLSWVxa2R7al7Tz9PO0NjT2mVTTlJMTVRbanjt3c7Cy9j4\nadXddFxHTWTl2+je4O3lfVZaTkVW/NvP3d3Sx8zl2HVUV11lTkxgal5j69/P597ZfOL0+21RUGl/\nfHFZ49zn2Nfc3eLg1t5qT1lrW19fYPrj3+Pv/lZNZmjp2VBq0+7S3OLOZ25pW9z4Wmhqetx2dNzY\n+1t9b+nYZE9ibd/1TmlbVtx/0sbd3dvjzPRcW1heSEtg393w5ubZ3OH06m1WXktX3vfb0/Xt4W/m\n7uVfTm9tZG54aW7p6uh+cG/Yyuxwet/pW35a3c7vWVXW3/VcWlxcZEde5fnX3efXzMzcUmh6e3RX\nVV5+3vnm0O1fWO/W3u9aT0te7u9w39pZ+NvKy+9eTF/veGdmX+LM0N/42t9kXkxMT1lr/Pbf5uP6\n6s3I8U9MWuPdY2xcac3Q3d19ZXt4ZWpRU3vyZFRb5dfr3tbp39/m4+3b6ntfZGV+7O/+Uk9X8OH3\naU5r1dja92lfZvnayc7/Zllt8GNu/X1WTnXO2nnd42tqZ+Tja1ZRbObX0flZaX7r3fZhbnzv/eTZ\n9G1z6dz0X2fv7l5TXWX+62pxeuzc5+bn2tzzZl5aU2Tq7Ol8aHffz83XZ1JWa21gW1heZvff3tfR\n0tri4/Z7b2xeY2tiYG/m4NfX72ZcXlxYVlphWVpx5tzv++Xc1tn5a/Dq7V9m8u/e6+3qeGdt8eJn\nQjg6Y7appqu5zdHJz1MzJyIhJCo1Xrqsqquusbe+0046Mi8vNUF21MvHw767u8DN/FdMSUZBPjs5\nMzJbrZ2Ym6i3vbexyy4cFhUZHiUuS72spqeopqKjruUzKywvNTc7Q1vOuq+srLTHXUU/PDkzLzA2\nQ2PRxMDBwcHJ3cyvoJucqtpHT9v+LhwVFBsoOk1kyLWsqKqsra+37DguLzxOU01T3b2wq6qtts1P\nOS8tKykrLjdI372xrKuutcH9OzNLtaGdqcpd07Ku8yUXFBolMDIxOG61qaeoqaquvko4QuHF5zsy\nPcqtqrDD6FlVTT0yLS0zQFZtbe3Ht6+xu83tbEQvLmComZmpYEDSrK06GRASHjU8LSk2uJ6anKKr\nr7jcQDg5OzQpJS1jrqWnr7Owr7pRLigoLTEyMTZE0bOrqq65wcXNWzQiHi+umZioQj2znJq7HBAS\nHi8tHx4ttZuWmqCor7fOSDAkGxgdMbqqrrmtnZWXqUIoKC8vKSIgJzjkuK6wur65srPKPCsqLi8q\nMrqelpyvtJ+Xms8YDhIdIx0XGz2lmJedpamtud04JRsYGirCpKCprKCYl6FbJiEqMi4jHR8vx6mp\nt/Zmv62yXS4qN2J2PzQvLD6nlI+XscikmJ83EAsRHR4ZFyK8mpOUnKu/w7q/MhgPFzippsHHoJGP\nm8Q6OjAjHR4nKygs36qlr8jAtL0/LjRQWjs4UMvPWDwvOKqVkpu1vZ6XqCYRDhUaFhYdNLedlpKX\nqcnGuU8eEhQqzbu/uKGVlJyxXz46LSAcHiteubq/w7y0vGE0LS00PEZW7cu+t7q9y1cuKrCSlKls\nspWUxhkQEhQVFxsjM76Xj5SgsKuqYR4XGSIsOe6vn5uZmZ+w6j81JhwdKlPN6FzMubTEPy0rN0VM\nV8myrrW4srjyODI5Lx4smpKjuqmRk+0aFhoYFBQWGkWgl5ignJae5iYdHR8iKzZQr52Yn66mnq8v\nHyQoKCcvP/6vqrNkb9lAKyv5xVE757Ctr7rE61tcQDIqIyqgk6y1pJaU8SUfHBoYFBMaQ5+lq5uR\nk6ZUOjUkHx4cKVmurbmnnJuiulhGSjYnHiNL2/I8Tre66DhA28pANNmsqcpFyK2vai8sNUo3HRqx\nj6GypZqPqVQ3HRwWDw8ZPH5or5GMlqi0sscoGRUWIC4sRaiWk5ydl5q7Kh8fHBgeIC3Qr6y/t6el\nuPvnTUdDPjo9UuPkzsxYPDY+TjUp45WfvZeXkqQsfioeEQoPFC0+Ma2UjZSfn6a8KxcZHBoeJj+m\nmpqbl5acuzIuLh8TFiQ5PDq+pqCqtq+xvUEpLkFGNzViv73GaV1PPk1DOzS5kqqzkpybzSZWIhkN\nDx4aLkrYnpWXpKKbszYlHiYlHCRLwbGon5yaoLGuuzYiISgkICY0W3vfs6ivwMy2veVNOTc6Oz9G\nWV5R38/Zzr63xkXOlqQsoafBxChUMigdFj0pIjVGsqqls62gtMvJxT80MSxRPzFeu7DAtK2xp89D\nyFs4LTM1Ky03Td9eWLaxusK7td5r6dvONy8/Q0k6Snh7v8vNzKGfL6ac1bg900ojIxo7Khkw2dNm\nsqepprO7qa0/ND4rKy8uPmnbxK2mr66irPbuVT8uIyUvMicu4bu7taysrLHCwss/MzU1LCoyNU3b\n4Lu4rq3EppxCXp/GdT9HViwyJDc+HipGXz3hsMOvrLi1sr1qbTs2Xz43QfXFx729t6+zvk/f1T8x\nLz42NTM+3mTZzr+6trnG09jeQzo4NEFJRUvkv728ucrrpqcrsaJIzd+xPy5EJUAmHzU8Ly24xF2w\nq6y8r7C1uT7t2zs2Ouk+R8pgzszGvcLF0db+RUdELiw4RT8/2r64sba2tcxt+FU2Nkk4N1Rk6NTC\nt8Rcv584NJ1jdtKwsyy3REU3IzUnKyJJdS3Mr6i6q5+wsMi+wTs8OT8zNFs9Pu68xNG/xr7b3Xln\nVj9iPj1BU08+ztXOv8GyvNTcXnJFQEY6QUxf9lNcZsqvTMuizrexq7o9tEU0LCsuIyckOD89zbSu\ns6WnsrG1v1hCSDk7O0RSSWnj4e7tw/JOzcF6UcXXUl54VUNcV1xQS+TYcvDGxe/IxXVrTkM/QUg7\nPlC+ydansLOsqa5Qv209LSkvJSomNTo339O8x7KqurG1s7fIvuReTkBJOzg+QD1BVFtazsXWurrE\nv8XN6V1KOz9DOUFNbOTXwMvJzeDSXl1YQk1OW0VDt9BEq66+v6+vTL7VQDg6PSkvKjc6Mk5lym+4\nrb+wr7G7w7vkZVBCRzw4PDw9SmNdV8rGzb21ucPGxuB8VD9EPj4+RlVL8dr3+tvPblZqamZ732RM\ndqzaL6evX92srTK4vE09Q0wqNCkzNiw5WNBHvay6ta6sv8O31GlATE4+PUJeQUFh5k1fzm7f0b7J\nz7vGxNXS1U1EQkw8O0pVR0fUzmRl1s9u9879fXxSOOKxRVqwrMvLpbrf1MRRNTovNSorMT88M9nC\nzM60rsG6tbm+y8/9UktIREE/RUxMW1/Zy9rPzcrZ6+9cY19bWv3lW+zQ2VnZw9Xn185jYW9WSVRJ\nQVFQSUVdaFzm4s/W2dXZ01dZwMXc5cG2wL6/v8bU3UtAPTswMC80OjxGRu7OyMK7tru9vcPOy8/U\nfvLoXWNUVEtLUkhJTE9JSl1lWnzJztbIw8bIys7S09jkfl1YVExJTU5NT1dYWPbrb+fN1/vSy9re\n49jf+vxod2JYYk1LUGFeTWF8YWzp6ODUzsvNzdHKydHM2Nz8bFVFT0tHRktLRk5ac27s0tPNy8jP\n2tng5e775m9lc3FkT1hbUGRlZF9qbWDk4eTb1NTRzczLzNnr5npdUE5HSlpPTlRfb3Dc4Ord4Nbh\n3u12f3nvafJ4dO/183Li5O30eej4fXxlaF9hW1NqX15u39nmz9bY3d/bdn5vcm1hbF9pe3V6fmZq\n3/Vt8ut4bfNyYGlnaXdocOnh5erg3eLm5N/d++33cHRneWBaZVpXV1tfXXb959bU29nPztTg7PR+\nb1xcWFZXWVZg1mpY7tbT79h7btzsVVLY6+1p39jm2GR//PNaUWNZWlteWGzvc/jay87RztHR1N72\nYmddTExOTU9XW2X07H7g3djX2trh2t/u++3saWVs9vRvYnpvYWRlaV5raWh+9+3f3eXf3N3f3dv9\neHh8X1heV15kbGf86Xvt6Obn6H9t6+P8b/Dg4vj06Orv6fxxeHJqXFNNX2BbXHLd3Nnc2NPS3Xn1\n+W9YVmNxfXRvcPnx8Hhxf251YV/43t3p1s/Q2OrxdmRUT1RaXVxgbfvq4+He2Nnl7PtuYnZ5Z3L9\n+HBu/nRtd3F5evX47+zs5+nn8O7v6vt47XZpZ2VlcPV3dPbn7PH4ev50c2pkcHFz+ezm5d3o5uV8\neGhsX15sYGBg5Nzu5+Tt9Onf8Ghma3/0bnz77+f7dW9qaGBfZ3zm9nj64d3a5vPj63deaW5v/Wtt\nYnRzb25davbm8una29bW3uXrcWNiXVheamtoburh2Nvs8Hv4eGteXG9zdnb+7vf/cmtt7/jy5+bf\n6ODf/G17ZlxdV1FNTXPBw8bNxb/M2EpFPD9IQEdL08q/vsbL6/hOS0JDUGHf3MzIxsja9VlSS0lK\nTWLp1NPa3trZdFtSVWjt1tfXz8nIz+peXFxYTk5NVWV+fm7v5tznZ2FofPLt9e3j297f4fB7cG9f\nX1phbGvn5OXt6XNqbGdnXWd57t/XztTZ3N7z+2hWWFdjYGvu6u/u5u/8Xl9kZWR/4+bZ2ehoc+rs\n/WhnaOzd5H5udfH1WlBOUmTv727m2Nnd6PJpa3/s82hz+dfN2+P07NLL6FFNTEtFSOnDvb2+x83q\nUjwwLzQ+Ut3Hvbi0uMdtQUFASlRVcNzDwsfQ6mFXVk1QU1VZZfX2/eDn49jc33Rp9+rd8OvSz8zO\nz9d5SzQ4vbrDxFDd2sjaMC8qN2Fg1W7Ux7OuxlU4Nj7qzm/Wwrext8lNQT4/SUJCT/LMzM96XWFY\nWlxSS1jcycTJ3m/l083M3Ozdz8nYWkM3QLm0ushFW0pYSSwrKDvawba6vL62ud0/Ly0zZce+t7iv\nrLDCSTMtMD1ETfnWw7q+0VdCOz5ISk5m58zCxsrd7ud+4Wle3s++vMhzT1BjubvV9EZZTEs/LCwu\nP+fIvsfGvbW5z0c2Nj1/1tTPx7GrrLdyPTU5PkA/PkzhxMHQWEJHT1dQTExsyLy6wcvZfGddZ1FM\n7M3GxsbO4V5ARcG1vL9TQkBASzAsKi5RyrS0vb+2srvmOCwrPOzJvcrRvq+rsMtCNjlGTEY5N0fu\nwb/RW0haeOnwVE5c2MS/xdpmWWTt5lxISlzez8zKz87YZ8Sus7rTQTwyODUsLy04Y8KwsLe8vcTX\nSzYtLj9wv7e5trOxtbvMTDw6PD5DQD9GTtzMzOJaWFLv19nqY3LpzsrR5mtlaHFlYE5FUe/OycPD\nyMPMxLa9x+BJQDg6Pjk5NjY8QXPJxb+/v8HEwc5wUkU+P0VU+8y6trKwtbvVVkA2MzAyNz5R+dfK\nxcrM0NjfeGJVXffb0trd6Hzs29rd4Or/e+3t7XFbUExJRVPf2MnCv73GyNFpUERAOjY6PUZr0MbI\nztfl3d/qfmf22cvJzdDf6/RxZVVVXGrv4Nze5+PrXk1EQ0lSZ3h46d7c2NfY3NfS19fa5/9valZL\nSExVau3g3d7TztTjalhRVWX83NTTzsrHzdTa4u1wXVNOSUVCQD9BRUhPauXW087NzcjFxcjNz9TU\n0dPX3vBsV09MSkdGS05WXmhmaHX07evo9u/azcjIy87R1tznbFlPTExLTVNVXGRscPzi3dXQz9PZ\n1dHOz8/T621eWVBMSUM/PkFJUVprfuLVzszNzMzKyMjIzM3M0NfibFRLSklHRkVHS09YW1tja+7d\n1c7Lx8fIyczQ1eH8amJcWVhYWVtgXVhUUVRo6eDh3tjV0c/R2+jj8nJpY2ZdX15bVlJUT05PUldd\ncOzZzsvIyMjIyMjLzdHnaldSTktKSElLTldeaHz7Zl5jcPTg2tjSzcjGxsrU5PZwYltSTk5RVlRW\nWVhbX277f+zh3dTLxcXIy9Hd6XxhVU5OUlNVVFFQVVlaVlRYZezZ0M/R0dHPzdHV2dvX1tjf92VU\nTkxISEdITFRif9/X1tjb3d/f397b2NTQ0NXc4PNpWlFOTUxOT1RZXWZ28ere0s3LysvMz9bgfV9X\nU1BNS0xOVV1dW1pfbnzv49vY1dLQz8/Pz9DU2+fu+nlqXldSUU9OS0tMUVpld+rX0dDQzs/X293g\n6vbv6ufm6flyaF9aU05NT1NYX2777N/VzsvLzNHb4uTq/mxhXFpXUUxKTE5VXGR07d/Y09LU3NvZ\n1dDS1dja3+l8ZltUUFFUUlNXWl9iZWtx/fL7793SzMvO0dbb6P5nXlxdYGBeXFpdZm1wa2dndfLi\n2dfW1tXW3OPvfG9vamVgXFtbX2BfXVpcYW1wc3L/7+Xc29nY19jY1tfb5/l6cmdlYFxaWFhYXGRn\nbXd8+/Pr5OHe3d7e3tzg6vB8bmlnZGVmbG9vcGpkYF9iaXzr5uTf2tbU1dre5fNsXl1aV1hZW1xe\nXl1hY2hse/Do39rT09XX1tbZ2dzh5OXn921fXFdTVFRVWFxdYGv76uXj6u/s7O3r5+De4ebq7/P0\n9fr49u/v/m9tbWhobXNybnh9dW1oZGRuamJmb/fr5er19vbu6OPn6ejl39/s28/g9m9XeNz4Y15c\naV9ZVlFOTlRec/vm393Qz9PX29/q7f9sbnf9+t3Q1NPc4+FxalxTU05QT09WV1lmcWdx6+Pc0s/O\nzc/S2eL3dGtcWlhWVlVaX210bXRyf/n/e2/56+Xh3dfc4/ViXVpeXVA/T7i0qqOvsMxxdjU2Jh4f\nHio+07OtrKqrra+/5TosLCcuPVfGt66uqqqtsMNWNS4rKy4zPEZuz8S5vL3B0d5dWk5KT01qfejV\n7ex5ZWhdVzw5sqWkmqGwxjo8JyQgFxkbI1avn5ubnqa0x0MuJx8fIixevKadnZ2lrrxOOSkjJCUv\nQeC+vL7K0/pmVUpMSFZ42cjLxcrOz3xWRD49P09vyddOsJ2emZu1SiUeGxkfGxwpM7WelpWaosIy\nJyAeICMqPNWonpqYnajLOS0nKCoqMUjOta+xzEY6MDdGS3DlzcO+srjAx/pVQTw9NjpEWOLPw1pa\nn5mblahOJxodFxwfGSk+t5yXlZypxS0iHhsdJDPHqp2Zm56rwlMuKSUmLTveua6stctXOTAwLjI8\nUsW4s7rCyu7h0uVNOjU2P2XT2+XZSkqflJiUpEkqGx8ZGR0WJU2vmZeYorZ8LSMfGh0oSKmdmJmh\nrus/NiwqJixCvqmmp7XoPzY0LCknKDrUrqiuv2x7yru5yT8xMjpl2nNBP0w44pmTlZWzQCccHxcb\nGhpGvaCXm6a+VTgqIx4bKmOql5ecrGI5Ki8uMkVBuqifn63PLyoqLTIrKCk7yqymrsdASOK+uN5S\nPEPb1MhrPC83SDSrkpeUndxPICIdFhsWJ8GunZ6tv+9aRiojHCPNq5eWobM6NTU2PC9C8Liin6W7\nPCstNT04LScnPcSvq7z4SnG6ublqPEVYvr/2PC0rM+5XuZWVlpq66igdHRUbGyPBrqSgr7/iS0Yq\nISAnwqecmai6SDQ+OTQ0Xb2soaCs0UEuNDUyMCgsLEDEw7jGztDivs7rZE/Z0cfDdkw7Mjs4MqmT\nk5Sl2U8mKh4YGRYru6qgqsfuYF9BKB8fOaqemJ2120xZSzgrJU6xpJ+ovU9LRFVAKCMkMkHcylHZ\nx7e0vdBAPkzZvsfqSktKTE5CNC6mkpSWrtljLjUfGBgYOLOtrcZoy7/IOR8dItyhoKCvxLy5tFIr\nIym3o6W477+6sdE8KyInL0I2NTpKvrevw9zO7Mp79371x254VDk9RTs/o5WZnbK5vEAxHBcZHU68\n2tTdv62v4ikdITK5qre4t6yjq783Jy1XrrG/0c60rrhdOTAwLy8sKjVE1L/Fx8m9t8btSFHP0MxV\nQEU8U+lpPcqZl52ozL3hNicaGR0u0GtE0rqtrMwxIig1375d2rOmoKe/QzU9dcnFYe26sa7CUT8/\nQzUtKSkxT37b0MjCx73H3N/42dLzTD9ARk9TRD2ul5uhr7Ss0D0hGx0hMDwuNsmup7FuMis5Qkc7\nONiro6awydbc2O5kUlHJt7i8zmzyUj8zLS0sND5N69jX1MzBwtfU083K5l1NS1ZUTUhA1KOepa62\nrbbdNyUjJCovLCs9w7O1xGlCSlpLPj1evK+wusjTyb/A21n6w7u9y3BXUVdKOjU1PEJKXVdd6vZr\n9+zs1cfGzdxjXnJeUExLWuTt5buvtrivt87Lz1NIRD4/TUo+Qj03PD02MztL37u4vr+/z+faYlr1\n1MO6sri7ucLS/E1ARUE5OTw+PkVBPUlZd9TN1tHLzcjG1PlufHZiTvm8v7usrbi4udNUSTkxNTcz\nOT43OkM9PEFDTdK8vry6w8rKz3Zv6uTFu7u8u77HytthT09IQT45OTo5OT1IZ93Z1tPKyszIz93o\n6uBhSj5Fx7q+ta2vsK656F9LPjs1LSwzNTM5Ojc9T/DOvLu+u7zF2fl7++HQw7q4u7u7wMjRfE5L\nSUI8ODUyNDc6P0lf39TMxMDAv72+yM7P4FJDPz9cycW8sa+2ub3da3RNPTczMDIzMDM8P0rq0s7G\nu7i8wdZyZ3RoftfLvr2/wLy7wM74WVFORTs0MzU5PkJIUF/izsnJysbBvMDN2XpZUFROUWFo3L68\nwb6+ztrK12bm8VFHPTQwNTY2PkpQ/dbRy8HAycfM7e3X0s3Mz8zCwcjLz+b26WNLQj48QEU/QEVL\nT1ZkZnnazcK/wcPHz9zb3e7t4d7d2dzsb1lPU1NTWV1cXF9aWGVqfNjPz9HS1+n3a1dVUE9OTVVd\nbX343NPR1NPT2drU3Pl8/+zq68PnRNVNRH48Sl9L6u9v2e7r2OPR4nXT0dfNz/Hnwtd5zE9PakFJ\nSEBEQlBlWfb75cfO2tXUzc3L1O3V3+rbfPZvcnpedmlZZF5ZT0lfVllpTO/fbNneaep92s7xyfPv\n03TM4GB5YvhaVuxWZ95l2/Tf0vfVUlPdTF7ZY1Ni5u/33OlY49NY5ttO49Ff0FNTzEvT0Ey/51S+\nUFjMP9hxP8xIb8dIcGNX7XDZUfn+TsxV0eJ6wFnKz1Pt2tjka3HZaNfgV1hhSGJOR2xN4FBgxUfQ\n5uzHTr1Q+MBAtkvixTi0RFi7P97ZR971WONM2dU719M/2NND9sVXYshS9+5vyTrB5j63QFvDPMbf\nSr5ZYLxL08dT1PJY1EhLy0lT3VVL+chAdb8/XMVaW9zF6EO4d0C820HBwTnOvz/2zk1OWcU/QLc2\nT7tDX9zNQH+6Qma8aEjAz0TQ71/4XMtZYrhFarY71740xfs/yznMyi652S+sQzytM8THK6pJMqYt\nQ6UlxrApquE0qjxMrCnEqh+tvhyfMy6jH6vCI54yNZ8m2qojr84rpzBrsSmvxSysVkCyPtfEPsRa\nScVrOcfkM7hHQbEwvtgyqjReryy31SuqVDy3QNG+ObdgPKsxTa824NY92W1K0kdcrzB6tDW75jy2\nTFLGQMjLNrxUU7k8W7U5x846tkLa1DO1TkLHU9zoc1bg11j+/t5dXM5PVdLoPb/UR8Va3vFv1/To\netrr6G10f1tfXU732Ftj22Rm3lv7adRD7r9H289jzfF+8FK/WT+80zvL3D7MzkVr/stPRbpGTbc7\n2cg8yEZewDa/ZkG2RNnGUMZCzr5AyfpVvjx7yjvAT0XCS93eQLvfS9RN5fFK3lTfxz3mwl9mZ8Ze\nV75D28RD1vRiy1F4ZePZRvPPTV/QXV3HdD/K0ktg6Nw/1MA6x9RG693KRNm+SejOX1XZ00Jn1+NR\nZ+bv4+ddV9TfS+fuYM9M4mJRwz7Yxkq8UfPDUctH3MM3z9o8ye9Az3Ry4UzAWU+8Q1zIV1999/pv\n6s5afM5H1cc7y81K1HxkaNxwRXnR8GHSa2C8TV/GUljt5UXrzlhN3sI+6L1Gatrn5lPR7k3N9U7L\n/mj5Td7oXPVf3Nz+XVXP8099Zt1t6GJ50ehmZO7mzVxL1s1UTdPoTtziUlnA5zzEzk3d+39e3889\n2cI//dRU+ObYV2vHUVvLS3rYZWxx2WFq01hp3l3TfWLYXtFpWs1P2dpKz2Fj/lP0YW3dVdrSV9j3\n2M9bYnZ49Pv0WEvJ8UjX3t9efttf3NhXWW7nVGTjb9Pgbf3vzGBL1mB57FFyaOzfSm7TXe1k8NRy\n2Nzfz9ba6ePT53draV1VZUlPZVFXZl/y9Ot/Y8/W+drq6tb76n773l5tZmJaVltcblxaeXrze+7P\n3NPOZ099vMffzsW+v8P4XG1oQDM4NDtAO0peyb/Kwr6+wNRuVFFXSUBKWHvR0s7HwcDP2ehhYU1G\nPkRQTV5p68vHwsjLw83S315aUk9IRE1PVXB22/DQyPN+1dlXQ0r/WE/N3E/Ry9nQ1eZY4dJST2xf\ndN72XPTNb2fkcufoeHpi3txd8OTr2evkbVn2WU10VVFXSfPU28ve0b/HzPRaWk9LRz9FT1vez8rK\nw8PL0nJZTEVKP0JVXNzTzcG/wL/N/nFST0hASU1a3vHezM7N0ux1X1lQSkxQU2Ht9trP0tHV0dv2\n6ux7fm5ib/z0/n15XlxdWFteZWl88u3d3tzd3N7t+XdsfGVpd+HX4t/r5t92W0Q9ZOnt2F3ry76/\n/2hWTWNaREJKX8/ExdnVy9DoXEVCS1JTV2vqzMHCzNba5e90SkZMVuLh5+nu09Dm+lpVVk1SWl/2\n1tDR0dLoXmVWSE1eZe/U1tXJxNDub1FVXldNVF9r1MzW3OlOVszO1f5bY9LH/1xKQkxgdU1dffDC\nvc/xemVnblZDQlFu28jP1crJyNhlTUdQUFhtZenXz8/ra15VYVZVZGXq1s7NzdPf721dVVdaXO/m\n4ejl0trYckE4OVXWxcPTzb68wdxKNzZBTldcWHjDtbW/90E+SVNLQ0ZWzrq4vcvkdvFsS0E+Q1/S\nycrT197m+kxDSEpf4One4NnLzMrVanxobGtYXl1t2M7f6E06UMnCwtVdVdvB21o9MTdI2+La2da7\nsrTKVDk2TvbfZU1S37y9yl4+Q1nT5mBUTHvOy/FQSk3uz87qb2zu0tna53zbz9XsXmBaZe5PTj45\n0La1sMLlcldZOTMtK0Hav7m5wcW3udJHMCw55ci9vM3HvL3QTDgvOWTSytFmVtzJ41xCO0n3y8/d\n6GnNv8LJ+15229nc+GB9XUg5VsHGtcVd+UxaRz40KzxM3bu5xM6+wcvjQzY6SnTAtrm/v8jY30g0\nMTpI3cLK19jW29xkPzxCTHLNytPR0tPMyuVfUU1p3tbXz9f43etPPVG/w7i+T1o/SlY8Oy87XOO6\nusvZy8/cZT83Ol/Pua+3uMPQ5l5INzpBVs/F02hXTU9fXk1LT1nYx8vV5d7t59z8e2hk2tTQy/hd\nVVT58s3iOESxs6+tRT41NVI1NyssXMqrp7fP3WpbWDsuLkvMs6ixvMhk69n9RDxBStzB2FNLQE/Y\n2P9JQEFTzMnM1Gp70sTF0W1JWGhfZE1OZe3Mw8bI5djSTDhTtsK2uUVTPlJVNjYqMVXMtLXM39HR\nw9xHNDJS27axwczTy8nOWD0+SPfYzP5PUUxy3t5kTUtMY29oXmLr18K/xtNdT1ldX21n7dDM1OfO\n3W1jSUg1N7OorKXASEk2QS0mJSE7wK2kq7q/ydBwOCokLlq6p6q1usLBy/MzJyw9yLG0zlxTY8/U\nUTs3PVjLz2VadM27tLvgTD9CTVhYVVdc3MXCyMncY1lEOz07MMKeo52k3VAtLiceIx8t0K+hn6y2\nw15GLScgJkTJpZ+kqLbFX0IvIyQvWrSoq7jOZFtdTToxMDZby8TI0MzBubjNTjw4P1nUzuRrcc7F\nyN9LPkxiV10+NLSeoZyvPzYlLiciJiE6uKadobbG+0tGLiggJ0vDpKGprrzJ008zJSMy766mq7PU\n9fpYRy8qKzRsw73Dy8m9uLzgQTUwO1DVydXM0crAy9RbWVA8QzY8p6Kln8daPy82HyAfH060p5+n\ns7jD2D0qIx8tTrynq6yutbXKUy4lJixeua2vur/Gvc1YNSstNGDTyc7cw7qyuNw9Li81RvvY0tbA\nube82ko+Pz0/NjOrn6KZrOg/KS0dHx8bN7yonp6qucd7OSknHiZHv6ajpKq0uc1PMSgiKDvDrKus\nvsfB5ng4KykrP/nFu8O+urW1yUUwLDA+88XEyczGvb/NTzw8OjkuRp6fnJe+zjcqKhkfGBtJuqCa\nnaq1vvMvJx8aKES2oaCgq7W20EoxJyMqOtCtq6y8xcbl3jwtKCk5V7+6v8K+tbG5XzUrKjZWy8G/\nwcS8u8ZXQjc0PkdAR6aeopqvdzgjJxwgIh9DwKmdnqayylYuJiYeKkHIp6KfqLK5YEA2KyYsN1G1\npKq0uuleWkEuJyovRr23uLO+vLe/bTYuKjB5y768xsS+ucZTQDUuNzJFoJ+embjCQS0sGh8aHELL\npZydpa62fi8nHxwmO8moo6GprLnfYjQsJyo1da+qqbbCymnoPC8nJjRJvri5u8e2s7nZPCwpMUrO\nxcDS3r65uc1eOi84PTjJn6efn8vJNi8jGyMaJ3K/qJ6fqau5SisnHh4yQ7ynoqKrrMpERi4oLDA/\n1Lmqqq2x1XY9MS8pLjJOyL2wtrq9yOlJOjAuOGDKurjBxsrBy1dLNjI2L7udoJqh0+AxMSMbHhYk\nVbyfnJ6qrbdHLyccHSxCt6Wgo6qrvvhCLSkqLzzMrqurtsTsaVE2LykrOFi+ubO6yLq8zF48Liw1\nTNO+usbHvr2+cUg2Lzk6NrudoZqexNstLB8bIRkoS76jnJ6nq78+KyYdHS07t6Oen6WqzVI9Kyco\nLTjKqqissMhZ/0IzLCgrMtS5sq29wb7Bz0w5Kys+Z8WzusPGxL3Qe0UuLzUuXaCenZuy0z0wJhsf\nGBw40qacm6SrsVYyKR4bIzHjqJ+eoqa32kwyJyUqMOO0r6qssb7RUjAsJiUuRM29sLW7sbfD60Qu\nLDM9Wse8v7q8vb7dWzwxMywpv5+glp65yDU4Hx0bEh8xwJ+Ym6KktVMyJRkaIi68op2eoae6yEcq\nHx8pNcSqr6+rsrq3TiwkICUw07+3rre3rrLURjUpLEBRdsXFybq0uMH9QTQzOTc0P6ifnZarv0Ip\nKBwgGhorRKybmJyksGowKR4ZHylTqJybnqW12EwuIR0kLFWrqKaqssXV6DUrJSQtVLqzrrK7ubrG\nUzksKzhQ1cPCyMq9vcXjSjozNzk2M7Ken5WfuM8qKh0dHBYmOLecl5qhq885Kh8XGiI0rp2Zm5+p\nv943IhwfKECyp6Gnq7rX5zAoISAqPryzr6+5uLm97TwuKi9F7crBx8O6trjMTTovMTo4L82goJeZ\nr7syKR4ZHBUeNcidlpeeqLw9KyAYFx8svJ6amZ2jtd88JBwcJTO9pqerqKu6uEUnHx4lMMe6tq62\ntLK07TszKi5GXnTPx8O1r7PAWDouLjcwLrWgn5Sdrr4wLBwbGRIfLr6clpedo74/Kx4WGB8st56a\nmZyjtdI1IhwcJDPDqKOlp67CzTspJB8nNNG2sKy1tba+1EAzKyw7Te7FycG6uLO80U00MC8uKfqf\no5aYrq83MB8ZHBEcLHSfmJacoK5XLyEXFR0m0aKamJufrr9AJR0aHyvsrqegpaexwkgoIx0jLk65\ns6mvr7DCykY3LSw5P2nOy7+8t7vB6EY9ODg6LTmno5uUqK5OLioaHhYWJjSrmpeaoKzYNCgcFhsg\nPKyemJqcpLXWLyEcHSY4wqukoqSsuegvJx4fJzPNuK2ssK+7wOs9MyswPU3Lxr66ubi+y1I8NC84\nOS/ro6OZl6mwPCwhGR4VGys9ppqWmaCrTS0kGhkdJUitnpqanKe5XCsiHR8pNcavqKGlqrlWMSMh\nIik/07evra+1uclXPDIuN0Rc1MzBv7u2vsxaOjI2Pzk3v6unmp2ptj8vHx4eFx4oPqyemZueqWM2\nJhwdHiY5waaem5uirvcyKCElJy1K2q2mpKOzzDwrKSUrL0LbvrCvr7XB30k+Oz4/R01d08S6uL7O\nY0k+Qkg5Mme3rp6eqLBZPSklJxwfJS3hrp+en6S7cDstKSkqLTvzu6ylpay42Es+PDs4Oj9P1ry4\nvMn0TEQ/PkJKVXXa0MvFydTc+3RcW1ZNXWDdysXJ19ldWFpJSUNESlbwxLi3sbjCx3tcTEFAPD9B\nP0dLSVBdc9fRycjDvsvI1WRZR0lFUXp1y8PFwszPy9bhaUxIPT9FP0lNVmvz0NHKxcjFztl6T05P\nWfXg8/xxceLa2fVtWkta+t7R0eFWUuzq1cTSz8zOxc3OYT49NTc+QEhMXXLpycbHx83Rz9DW3tvu\na31mXnzt1svHyuVrU0dHQ0E/RU9f1srGyNLlYlZSV2P/2s/HwcDD0PRTRTw6P0dT69DGwr/D13hT\nTFBcaffl693MxMTN6FZKTkxHR0NASE9v39rP4djN087Z5W1t2s/BvcXQ5WVWT0tDPj9ETn3WzMzV\n2HJaU0hOS1Pq08S/u7vCyeVZTUZESE1PWenU19PY/VtOTk9b5+rm1NrJxMfJ535fVmZWUk5LV2Jq\nc1pRT09fXGN7ZdzLwry/v8bV2vNnWkpIS1Roeun4Z1lRVVNXV1VdXP/VzMXIyM/l3+zy7e31anX+\n7OH8WUxFREhOVmNn4czMwcLJyOTf5G3ea19uVlxkWVxVTE9OTlhbZn7t3NLV0tDb297o193j2t7V\n19ba9F5MR0FESkxWVl3y2szMzdH2bnd95t7c3t/d2tPT3HJXUk5NUU9RWFdo3dbW1t3m4N/d39zW\n29PV8m1dU1BOS0lNVlz/3uLh63B0bW14fefk3NHOy8zNz9Tb9WNZU09PT1JVWWd1b2ldV1dg79rQ\nz9bY2djX3eXy/Pj47vhwZl5eXFhcX15bYWZh/N7Xz8zKyc3P3X1eT0xMTVFXYG9vb3BuZltYV1Zj\n+uLW0s7MzM3T2eZ6c25+83p3d25z+H5iUkxLT1p27e3n5+Td2Nnm8XVz6+Tf4e7+eu3x+XxsbHn1\ndXBsam//7erp7XtpX1tbXWZre+/t7OLg7XNfV1pq9ejd2tza19fc4ut7aWhv++rt+n1sZF9dXFdW\nWl9s/fn39PX26ejt8/j38Oro6Orz9e3h3d3f5+zr7fl1bG1nZGZncnFqaV1ZXXtkWnxpdd3t4t5q\n0tNS8XNj2Wrs1vDb3fnc9V/zXGXhZGZwXfl0Z/pfbm1m8/fs6fb25ubi7/3yb+/pfHdqY/zg5N7b\n4tjfeHB5e1lRUVZhYF9kd2xt3WFu6Wnqfv3m2eL51d3e1N3s2ex2blxuWV7R2vNuTFVdRUhpVkx9\nY+fFzc/KyMrU3FRa+09hUVti7NlTzcXmxtLmzdj2TVpYQ0xEPkxaRUv+9dHJztXCxOnZ2ebg3nxd\n6NVmVt/7Y3prVVTuTkloVlxeW/jV4d/p4sp12c5qzPtp3GTaZk9eYl5T18/Xv8PDvcLMYltKOTcy\nMTU5O0Bh1cu9ubi2uMDIzNx4WVBJSVBw22HoysbD0Oj69lhBPT4/Pj9ESejW28bGu77Ev9PO6FBS\nUU0/RUtKXVFAyKe5062zrK7xR0J8LyImJiwtLTBhsLS4r6qlp7TPy9NNMyswNj08Otq+t662sa6w\nvFZFOzEsJygwOj1L1rmwra+yr7LDZ0VBPDQvMT1GUWnnxty6mqTCrbGfty89KjUiGyEaKT41U8qh\nnaepqqGo1z41MC0sJyk25LvFsqilp7mzsn0/LiwpJSgpMDz9ure0rKiqsrvE7UM2MS8uLzpHVnvB\nsra3w9KknbZrTbCpPCkkLi8fJB8oRd60v7Shn6K2vrvQQSspKCs0PU7gtqiipK+0ucPUOysoKC4t\nKi9Lwbq8uLCsr7vF111NOzUxNT5DUO3Ju766s7S76k85Q7W+Uz1IrazFPDFIPDgsKC4vTsC4tr21\nq6u5X0Q+Qjo0Q1F8y76vr7a8w9NMaFU6Ly07TkU6ReDCwc6/vcTCys38REVTWEdHa+LT1c++wMve\n3cvSUTYxOD02MV6wqKy8uq2qt1M1LionJy02QFXYtaustL+/vMZkQD8/Pj9Hc/tu4dvLv77C0efw\n61hUWEtHP0pYXHNSX+HWz9LQ1MnHzcrW7PdoTUhGQ0tLTGL13MrJzuHaysnObUtLTk9HSVx6293U\ny8nIycfLzd1dTEE/REhKTVhmeurg0tPX09nS3vj9ZXzv6etmXk9Uc2Bq/OrQy9Tx+Oj0X1RPUlVM\nV3/gzs3NzsvFytxyYFpbTlFWVmBfbvvv82d85efjaWfl6vBaWtjf+nxt9vLvaFlbZ/X3eGt86ePY\n1uXu4dnT3tfkZ/z26n1eVFVVTlJTVlxcaPjj4OPu08zb3+7t2+lmee989/ViXm137HRqY2V4aOzk\n/HZt4+Xf6WL/7u71Xmr3cfN8fm9u5t/h6OTr7d3ucVtVZFpXWl3r3tXX39rd5f9dWl1WVFtfe/jc\n2eTV19zn7eduaVxmfWH65O3n8HpwZP77bF9o63BjcHXt2u/6d/Pd3P5YXV9samZv8d/c3t7Z1+p7\ncWR4X1drV1Bq8Ox8f/r33N/e6Grt2OdoduV3Ym1wcvVqXe/m4tLtbuT/bHBfVFJkbmFw7XjZzOLn\n4tzW8ntfcGhiX05f6XhUXPFx/N/V5Pnb29jd921za1dcXfTd6vzv3uZhZ27sZWv0Yere5HFfY298\n6OBu6+Pn3+vk2fBaampSSk5mX1Vx3+LR4t7O3triaml//XZvbmRj7eDx/Glv2OlhfWx5YWLlf/pu\nW2/e193c6+r6YtztV1FTWP967+L8aG3TxtPpYFv+3uxcTFBfYeHX72Bad9TN21pVaeXN5WhgWeXa\n0t9YYG373t7mZVb64W1obu/uWlh37N5kW/D6X1d81dfd+mT00M3faGFc7fFfe3Nlb3Jv5+vh3Ghl\nX3zpbmZVVW/b2m5VV93Mztv4Zl3w3N3rWlhu7d5+aXZpZnbY2mpcV3jY3ep+YmJ/5dt5XGP+5uxf\nYvnt+O3a6WdofvV2/Pdud/18+ffn7e/o7/pwevpteXlta2z+6u3y+Hfk3fleX2pfXV5iafji3tnf\n+vXvbm5pWl9p/vxnavje2t3l6fh96ObvdnR2b3/2Tzs5Ubusr8de2bevvUMtLTY+PjY0PV3JurW4\nxN9j9c3OXT89Tc+/xuF638nByvZORERPbvpfS0RP9NXgX1dw1MvN2/xnbePU2ltQ0LWutdlR7b29\nXDEpLDlEOjAyQs21sLnFzs7GxNVPPjs/XNLJzNLRxLm5x15FSF3j1d1gT05b7N5mRT5HaOPwUkte\n1cjL5VNNVWX49Gdd9M/IzFM9abSrrslIUrmrvD0oKTvXfS8oLFuxrL1NStu6t8tHNj1d1tDmZ3zK\nvLm7yXdTXvhuV0tJVnn9XE5PUVZTUll92drc493Oy9BxVFFZ+/xmVEtlxLi7x9Pez8PD7ElGT2Bh\nSTo5Q1/f6VVESXfSzdP7XnzVz95sX3HXysrR4fHl0szQ6F5UVmFrWlBc8NnW2+Xm4ebscVpNSEpK\nTFRbXm/j29vj6dzT0Np4W09X4NPW08rIy8nK09rc7V5UTEdHSEpMVVZTWF1m/t7e92x76tzY3ufi\n2dPT3nNm8+Hobl1baejld2Vnde3l6ndmaGzt4PVscurb1Njxa3j2/2ZXVF16e3N0ZWF64d/vdm5v\n/X9rZmx98+5zX2T25+ftfHnk1tbf9P3n3+5eVmT46d3X29zUz9TZ5mtXV1VOSklMU2JjWV1+4t7r\nd3Dy3d7vd3T149nZ3ujs39bT4HVpbHv4aFlaYm56cXT5597f5vZrb+nd2+Ls+/jsdltPT1VaY11Y\nW2J26eLo7Ork4+Ln8P3t4eTn6ebf29bW19zf5XZeVFFQU1VVWF1t8OTh6O3n393e6v96cnbyfmRe\nZ33y63thX3jj6n1nYG3v4enx9+vd29/q8+zp9XZkX2NiY2Rmb3z27/91cXV/8urq8Xd37d/b2drj\ne29vaWhlXFZXX2h1bm94d/jr7PPz6NzX2eh1dfzu5+p1af7g2d73bGz+9WtbVlpkdnVoZGl/9vb3\n+v98cHLz8/fq5+vm5OXo9vt7enZub3V9/vh6e/z/+vLs6ePg5/D6dm1qZWNpdnd5dm5+5t/mcl9f\nYl1WWGXz5+jk39va5v9wb3t+c3nu5ebv+XxtbG/563l77+Xd3ev37Oz0fW1nbWpfWVleX3Z1bW5v\neXpyc3zs5ejf397d6vt+7+Li5Oz66u7y9mleV1poa2RsZ3zv5tre5PLx6+r0aWZocXV5aWz87uT7\neGxhb21kX2fy7eXr8evq7Ovtc/vu/Pzu6+zk4efu/mlq8XdeXVxkdf51YG336+1+dnr25d7k+Pzv\nfH19eXd493767uHp6eTxc15hbXJnY250/vHn6nx66ufw93h6e238fXF9d3tzcHp68vHv7u3j6Pf6\neXf9e3x2aGh3+vX3c/nu7vRybGr0fHRwZm1/8u/q5u3v8ff0+evocW11am169G5iYnf07/Zuce7s\n5+T5fH166312dG5x9+f3eG5v6fdwbv379/P79fXq6fDw9vT6cXZubX1uZG37a2V6ffjr8vfx6ezw\n+Whrd/n9/f3z7v/3+Pf0eHXx5+7z6eHpfnF1cmtgXGNjbHvx8vLm8vHr5urq/2tqX2Rna/P1e+vn\n4+Dq6uTl+P/9dmJdY15kdGxiY/76/eLj5+3v6nz8/O7l7+zo+Xt6eHr69v78+2158f9xfXJscf3u\ncm5ydnp0cHj3++/ycHtv+uvm6/Huff19+vN2//l+9P1yfXn3e3T7aWvo7fPq6/1tce9uZ/X5eGNr\n7nNv+Oru59/t7G12d2dqbnX76+zrdW/yfPLxeH5ncfF8bGVtanHs6/vv9HHw+Hzk3+766uzj5vtt\na3d1a2dtbX52dfJ8bmlrafx8ZXt/fOzt7OLq7Xzj2+nt7vHm525uc3JqYWhlaW5fbXFy/XTn4/b0\n6uXo4Ht2ffnzdHR9c2hv9v3+e3h1d3lyZ/l5++vx9fPu7uzu7H9v+/rp6nhubnf1dm56bHJ++3tp\nefp69fxz+vb54eXp7u3tb2x2aWn+fmh7dF3v7Hhzcn556erv5+Pmeejub35/6/ZvaXXtfvf4cWFj\nb3JmZfPv+fzp5ubzbOzl5eb/fXT4c3JraW1p7en+bHTz7/7273r/fv/v+X9s8ezu83J3ffJsbWhi\na2t2d2x5e3jl3ez8/vv17uX7fO/r7Pju6/n5+Ox+ZmJhZG3vfGdufurrevvw5Onv7nd9amNnan7u\n9/798frt5Pt0f/V3ePB6b3ry83P9f2xocG55+e/p7fP69O/q5O/x8fB9d3h4/nJqYWl6/ezq9H/+\nbW1yen54eHJv+/v08uvq7vT2+Xb07u93Y2hy/vV1X2Vufuzu8nz08vn5dGlpeOjd4+r+eW9td/v2\n7ufi2tnhZkU9QkdZzLuvra6vvndAMi0pKS0wO1zNuLCtrLG5xmhJOzg4OD9KU37bzcjEv8HHzO5i\nUElMSk1PTlJSWl5Q/sG4raaioaevwUAsIRwbGh0mLknBrqeko6Srsr3uRTcvLiwtNkLrva6opaap\ns8xGMSomJyktNkFkyruzr6+vs7rE22lNQj47ODU0NDVLv66lnpuboq7XLh8ZFRUXHitBv6qhnp6f\npK661Eg3LSopKS43TcGto56dn6i6UC0iHh0fJjBH2Ly0sLG1ucLQ7F9bXV1aTkhBPDo1Od+zpp2a\nl5unujggGBMTFBknPsKpoZ2eoqi33EYzLiwsMzpWxLetqqenq6+77j4vKScnKzA9WOTT0Njd9n3i\n1Ma/vb2/xtP5XEg8NTAuN8usnpmXl6C8Ox8XEhEWGyhWuaifnZ2iq7hXNCsmJyozT8uxqaiprbG7\n1OxdRz44NzU2PUdPVU9KQT9KZM26sa6zvctyTERAPTk2NTEuPLagmZOSlaNkKBkREBIaJDTFrqaf\nn5+mt+wvIx8eJjjcraSgoKm1ymJaWHvW8GNHOzg1ODo4OTY1O0rLs6umqbDAYUQ7OT9BREU+OjY0\nN2emmJOSlp2/JRkTERQZJj1ctaiinZ6irUQoHRkeKl+spJ+krrrlTl/qx8DKxs74Xkc+NiwpKi04\nVsGvra2vvMxeRD87PklPf+n8aEg9OTk+6KOTj5KbrjsZERMXHys71sy7qaSen69RIxcWGyu6oJuc\nqLtwSPnDurfFbUw/Tu5uVD0xLi84VtPGxtb0ZldbZW/m3dLEvr/JXj82MDI9UumsmJGTnsE5HxUX\nGyMvNUu+saafpKvPKhwYGiZVr5+do6q5y8XhSz4xN1fLrqmuvkgwMDY/UUg7NzQ9ccu+v9b5Y3HQ\nxcDDzXZGPj8/P0hHTqyWkZWnQioeGB4pMT82Nuq2p6GtzzUfGx4r0amko6attL3jVjwsKjX5rqSl\nqblVOzk3OzgvLi42S+bPydPj2c/KyMfKxMHD00g5ODY1OztMp5SQlq05LScgJikoKyktabGpqrpi\nRDYtLTNPwbGsqKmy2D0yNDxSyLavrK61vt9FNi4tLi8vMjpI4cO7usDM3uLTxsHH1XRIODY7P0dV\nT0+ul5GVqEIuKyQjJiUnKy5GuKmpstVHOi4qLUHMs6ytr7THZkpFT/jQw721r7C89j82MzAvLi8y\nO1LOu7m/3GFf38vIzdbf6XFXTEQ+PUrp5Mqll5aduDgtLCcpKyosLCw5y62rs9BDODMyQ867tbzM\n08zJyszNy9Hv3r+0tb/6SkQ+PDo0MTI4QF7X1d7j3szAvsDF1NPN4V1KPTg8R2XNw83HraKiq984\nOz89QUZCOCwnKjzRw8rb/djLy8C4u9JKNjVAXc24r7G4v8K9u8lROjU6QkZGTExHREVOX/x9Xmvc\nyr+8u73LXUU8ODpBWtG/uri6xtDCxl5COkDMubq7wtpOOjY6Q0g8NTc/aMzDv8DOYEU/Q1zYycC9\nvL3Axc3PzM3eWkpITFJf8OdWPzs+Rk5RUFlu6NrS0NTrX2HrzL+8vsjxVEc9TMS7v8XRxbvEz9Xf\nbz4vMTg8PTk7Q0pUZ+vQzNje2NLKxsXCxc7lduHIwcTHycrZaGBzc08/Ozw+Pj9DSlZp7N7f5uLj\n5d3Vy8XGy9d/WU5Z821a0LzC1OfMu7/JxNBtSDg8Qjs5ODY7P0f2zsvQ39rJydbtb2987c68t7a8\ny9jZzc1tR0FERz8/RUdISU1gblxbX3Xg0cvMz9DOz9LfZVZXZN7LyNpNXMXD1+3TwcvYyMzqVkE/\nPjk6PTw+Q0zs3OLPzc/S4url+OXT1NPV2MrExMfW7WJo4uhjXnhpT0xPTUhEQ0lRX+rd297d1Nfo\n7OTc19zc3X1gWVJMQULZvL/Hv7a2v8C+1VVFPDo4Njg5O0ls29T0ZWdfa9/Y329i4c3GwcfP2ODY\n09bOz+B4Zm7nellOSUhHSVFZXXp7anbj19zm6Nva7mVod2leUEtNWPPX9HO9rrS+xb++3e/gSDo2\nOU9LQkg/SG7+5VE/Wtza2Wxq6ubHxczL2s3DzNLub+BkTOvAyWpLW+lkSz8/S1xtY1Rf1c7nW1pp\nfuliUFvy18/fZGLs8Fvu4Vi8pam0xcq3xFw2KC8uLjkuO++/ts/X7lRyRTxDTdfFv72/ubfAzuxm\neF5OP0D422NnwLvH2VZRU0s9PVBe29DY3szE8FdSS0w/Oj5c1M7BydTO7lE/SVVj11zGpJ+pr7+9\nyTwrHyYuLT89arewteRvVDs2Lzdew7u7trS1u9NMR1BRTVF8z7/Aztx069xYPzpDV15bWNfG2Gt9\n19LtXFJPXExCS2He5VhX3MrM319m3cnwYNjlxaimvbzHz900LSc2QTBGTOy/vuFM+U42LzRD0LzD\nuq6vucxgYurvTEzPxcTG3OfZZD9FSUVISUpQ4/Jk+eDd2dddfdjpcW3udN/eWFdnYfTpYmNaU13z\n3+zV9dGmpL2+2czMOS4oO0k0S03gvcNYP1VCMTE5Vb+4vbausr3aVFbp4k5ayL6+yu5nXUUwLz5a\nY2buz7zCblNheWJfV/PHxOFl29jvWENFT1NLS+bYfHVVZ9fa187GxcSvq7vCzdntPDItOUM4RElr\n3vVOP1VdSkRN2b+7wsu9u8nhcuvPy9bgy8TUbkw/Pz0yM2nK0dPSyMLSREJecfraycm+xW5eY08/\nPT5KfXNZ6snK319RVt7c/8+9vsi5srzT2d1dUTk0PkVFQkxKS2JKP1BsWFzezsbCy87DwtXr2dDI\nxtDd3NphS0Y+Q0g9POK6wtLg1tN3PzlY1M/PysrCwmtKTk0+PD5Fad3n2MnM1d5VQH6/y9LQy7+2\ntNNfydRcTjk8Slg9OFFMTVBERnLRXk3y08zGz9O/u8jXzsnJzONebnJUR0FCSldTRkndvcj5ZurP\n60tFccbDyM/TztlMPkVKSEpKTP7Nz9/kfV5iWFNt1MW/vb/JdMKyw81m9+BOPy82Pz0/P0tb5Ope\n5NjnZWjjyry/xcLEydHddGJxYFZdWFFMSUxLTENC5bzAztPOy95UR2fTzMfLztfeVD9FRkVER1Vt\n5etv8+r7ZlXby8a+wbu9103iwMzI2up8WUAyNDk8QkhKWujc3tXT7np89c7DwL+/xs3T9mFXZV9X\nYVBOVllWTEBNwrzK9e/R1mI+QFzTzcvLzMfaTkJIS0lKSFXf6fff5HJ29tzMztHDusJAP726t75R\n3tfaPSwyMkpiRkvuxepjbFBfXldiyru8ub7M12VUTl377M7T2ulYTURFRD9E4rm8zW9o3PRSQUvs\nycLP7O3V/EtGSlVeWVFc4uVwbVxz4Nzb0MK+yEVJubK1vuLk1+88LjE1PVtbS2zV6W9mTkxYW3HJ\nvLu6v9J4ZlVQ+NnPycza7W1NPj1BS1dQXc3Ew8rk+XB6WFNn6M7JzNvne11OSkhFS09ZZGvw2tTd\n4dne29TPy+tCZri0uL/OeHpRODMzOETb41hweF9eekxJXvrNwb7BwMXfaFxSXNzOz9LldWpPQz5F\nUmTd33h+0cLO6m1lfmtib9TO09rf7mttU0pJS01QWFNe5tbV09jt+OPb2dPPytxGRd2+ur/I1trc\nSDkxMj1Y7WpjavXTz99eVWrfyMfOztXT5WpdVGNs59nmaFVZU01PUmL518vJydzvaVtcYurjzcnO\n3mlcVVVLSlFVV1tcX2vi1dbZ5unj39jOzuVKRdy/uLvKytLeTjkzMDxP8N/14Gp6+GVaSlF6x73A\nwsvN2W9YTVx/29Ha81pXTUhISFJu3NPIx8nO3XhVVlBceOPW09DmcFtbXllPSkxQXV9e9tHHytLf\n+2703NrbWUrrxrq7zd/w6WVCOTdAYdrZalZPWG9uZE9Uf83FysrP0trubWPu3c/P2+VnV05MTk1Q\nZOflb+fSzc7qW1BbZm7p4tjRy9T3a1JMTlJPTlNVZd3T0MzN2ud/ZHLl19DnTVDgyb7N5eXk2F1D\nOzhFZOx3XV/2zMjVXEdJY9LLztXWzszcZVFQYt/T231fW1tVTUpQedXN2Hjdz8jNdFtZ8t/d7GJm\neud9WklETF7q6/hoaujX1Nzk9+rY7Gh76tLM0WY8Ok/OubvExsnIckM0LzxP2tfe5ubMztVbRERM\n3c3MztXN1OVUSElR59TR2d/h83ZYUllu3dneY1Rb2szS03hpf+T6UVFPXvLqZlldatzU2HlbYX/Z\n1N32enZ99Xhv4txaQkfuvbm6yOraZ1k9NDU95dLH2ufk3MnuY0VIYNPDzM3a2NtsVEdKVuzNzdHd\n6PtcT0dJWubNzdtvXmVaVVRZYuDMwbi7w+FSRj9AP0pq1MjG0HFiWFdTT0pHU2Ln0s3MztNvYfft\n3tZROE28sK+861bj40Q1Li5Gv7rBzv/nxclMODc8b8HB19nRz854RD1HYdrIzNjTzdN2UEZKZ+Dh\n5ezz3NLZ8m5lYnjt+v7l3djS3mxXTk9YdfDy7ef+fuP78fhqZFpdWW/+a2ttbmZvYGb15t/e2ufx\n6vHv3+Pu5t7X51RY07q6xdtdZVxlPDY5PWNu0V7nzMrB51M5P0xk1NPKzr7F2XBRUFJhVmHhzMTF\nz2pWVE9MSkpa3MfGztvs6OPnb11eceLa4353aWZeVExLWGJ+5t7b3N3vZmNnbHbu6PTn5uTn6/xs\n+u3k+fry5N3ybFJRV2B48dnUz8/V42pdWVxeZGdv7vd9aWBeZPP2/WxmfOHZ5Obn8uz8aVtaZ+vZ\n2+bv5+npblRQV2/u5Ozu4dXS3PFgYHTq63NmaH/r72ZbX33l7WpgZnv09nR09+ri7HNkYWpqcnv0\n5d3X3u3+efHs6fZ1efPv+/5mYGRrcnv4+PXt5ujtem95/XpoZWd87/P9bGhlaWtudPHo3+H9a19o\nbWx1/d/W0dbd7HZ2bmtoa2x39Pf9b3JtenNx/vXm6ur+b3B1eGZka3nz7unq5+bn7m1fWlxib/Tt\n6eHj5uzxdW9vcffu7Pfw6+bofG5ufXd4c25yd/Dp6fD3/n1xYl5ebPvt7vnx6+v2cGhqfung3+f7\nd3hvbWJgZnL17u327+/s+3j9/u3q5Oz6dGlpa3t3/vfx6+rudGtoYmNsd/Lx6+3y9XZwdPLj4Obv\n8vN/amttc/718X79dXd3cX3+fHJsbXB6+evp7e/08e/s9H17+OrufG5qam1va3P97efl5u98amVp\nbGVqfO/m4+Pt7/t5bW5zfuvl6e/o7fVzZmBiZWt5evf79/d2amZmbfru5eXn5ObxfnBsevz4+HVu\ncvvn5vB5ffTr8f5tanzv7f54eXt6bmViZm56/vz47+/ze2597ejp5Obl4+fu/mtkZmptbWxv9Ovo\n7PLv+fV6bWZfYWn97O7o4ePr9Pd7cG5vcXF8em9raGx+9Plpe8XPb/VXXGliaF9ncOzm3ubm5eni\n5nRibn7y721jcnF97n3x8fn4bHZxb298/nf6f+r6e3pnc2/y9vHo8enw9f5udm52em/37ezm5ubv\n9vtraWt1dnbtbu7y9fhxdGRoZXn3fedw7e/v4Oh083xw/fv5/efl+/luaWt3bGxsb/76435ubG50\n8fL/+W7r6+7t8ezkfPZeZmRue+vv5Pvs3Xjpdn5tdWRtav1953XqZeppe3Jud/jw+/X4ee/06n53\n9XX+/3Z8d+Rx3mfieed/b/Fc8f9x8G568/pv+2lv6l7ga/V69ffr9u3x6/rm9ez6/u906F9vanL8\nZOpt/Ox592Z+bm7+83zv8nz1eexr7nDr9n7g/fDnce1zavdicm1fb/1j4V3p9Gztdu7e9d1862ri\nau789G/kW/hd7mjhfd535m7ifNt+5f14/V32WfNkc1t6VOJa3WPg+t/089xv33L3+vb1ffJncW5p\n7/X95e/t53XpcXZ9Yu1k/vT67G787GboXvJv/+h+6XHnf91n7GD9bPBs8W/6aPJbe/x96Gffat9o\n3mfqZnNi32vlb9/03uzv/m78dfJt/mnmeepq8GfvXOdj7Wx0b/t29X125vL67HvoeGd3Yfdn+fB9\n4X7o7nPocu968+7v4H10eF7zZv5lcmv8b+t28/rn8+F57WLvZ/Ju6WjtZt/94v7lbuBu6mJqc/tv\n/nnj/e5qb2rpW3Rc8mHlY+By32XpZet78/rg8Oh/6/T14XPfYuZgf2N4Z/p74fv6cvv+5/P0a1xr\nWvN343vbd+B04mvfbORe5l7rWPhj62PeZONr6HPmZ97/7P12bfN3ZuVf22fh8vl0/nvbbOFk4Wzi\na/FsZflieGhe/2zw//Lvc+hq3mroZuv16nD/bvZu42X09up+8W9+f21x6l7fX+9963XtaOPy5nh7\nZ99d32bgaXprefnybOpt21/edu/ybeZj6nRs3mvgaW5s62n4blv2Ynruedxv6OPx2G3sdPJ/9HN1\nam9wZ2dxa/l4cvf65ebk7e384mLiauRe7WbnXeVh3WbkZOdm6WXmZ/Zpemblb+Vz6m3lbepvcW3s\n+//s7un54WTpbXZnaWpkY+lo5frdf9pv5W70fvBj72vndvN3+Pds+3Fm7Wjg/un77Wnsa/N4c/3v\nZOZj52vs/nd6e1/6bfHr9/Pm7PbkX+Zi62r9fnPu7ez9fvZt5V7uZm/ybOlr7W9v62bz+fH2+eT3\n5Oz87GffYfd+beps6GjmXuZbbmlXaGpo7Wju5d3s33fc7Obt+vR372PsXetc7Gjk8/vra+Bb72hg\n5WjdfOn953HhZOVc8WN66F3mZXvcWdZa4nb7+3DhbN9s6vNs2lPPYN/mXdxX4GFq+WTgVtpb+exY\nzU3NWX7pU9hl3+3422TbX+vzZ+Ba2l1+e2DuXd9e5PRr2lraX353YO32+txu33Pr7XXlZex1+Plh\n21fUU91kY95OzU7SWvHiUc9P1GJ23VXOTs9Z895Xy1XUbfTaXtpP2Fzt6mTZXOJk7vpq31vfX/f1\nZNld3mLv/mbaXNZk4f5b7FXyZGjpW9td3mXl4+7d7+jsc+Bj5nV48mbvbfNvd/5m9lnpXuztdddc\n2VbnYm/rad5y2nXw7GnfX+FvduZf5Gb272DiaO77ZeJe4mPob3HmZthd4W386l/oY+X+9O9i5nDq\nfnrr/e7+9/X3+XfudHltZnRse21i92nscPvv7OX95/nlf+h57nb6eXh/enH8a3piem3v8fnwdvN/\n9n7++PV8ef/x9PH38fb88PP79ml7bv1+dntxfXxsfXH8d/T47O566Hjmd/JvcHxu/m597PPude54\n+2d0aHRsbnpw6O/h6uTv6/L5dX5qfnjp/OZ483R0evx1/G7sffhvcXFq/mb+a+rv6uh/6Pnr9Pzq\nbnRga2Juc3zz8vHv9ex89n/78v3yf/Bxb3n26u7p7vv//nduamRiamtsd33u9+7p7/B47Pzq9/v6\neO548mx1bmr9c/p79PD+6H/wb/T9efz583h+/f7vdnpyeXt1f/1++3nt8Ofu8/h1eG1zb/n37O/v\n93hxeH31eH1tb3dw9Hjue/H4/fFz8n7u9Xj3ePZ19/hx/25va3VydPHy7f/27fzu/vF+9u7972z7\n+G5yZXV5dntv9nt2cfz3+O979H3vePn59ep95Phv8PX1/u/uenF2eXhy//95eHL+cnBu+/To7f74\n//Hu/nF+8/j3/vd1/Hl8fGtrbGhnbX7v5+Xr5Obi6Oz9dXj+cmlvfXp1cGtpZ2xt8Ovr83n87eb8\neHh7/fvw+3708Xlr/HzodXD38/xvePx4fP338e38Ym/+6vb17ev0ePn/7/Zsc3HpfnNqcXZqb337\n+fjy7+rze3Bz/u59b3z89W988e52bfDu6fZ2+/Xs/Hnu6eduZWZqaWzs9+/sd2547+5+b3F7+Hfv\n6fN3efzv9G/46ujp8PxzevV2d2xobXr2fmVmbfP4dXd0fvjxdffk7PPw6PDy9P7vfP10avbw+Xtv\ndW10efrxd2pvenF6fH1+dezn5u/19H3s5/X77uP1b25rb35nZW5pcXB9c/ru6N/a53x8+/dtZV9e\navN+aG315ujx8eHf7Px49Ovt/n739WpjcXhpXG3q4uPr9XXp6nNiaHl0b2lo8+l8+vhvff/8/X7o\n6fz0fWts83lvcn35b/X27Ont6vT68P1v/G5idPX6eHF58ujzZ3bq/Hf38+96cn/1+nNv+uT0cXF5\n5+n9Z2zo629sefFtZG3v7n1r/Nzua3Zr7/BhZXPo4Pjy6+3j4+3q6Glka2lqYWV45uH0Yl7+7Xhn\nZH3z7u128t/q4d/m9Hd8/Gxp7f52/m1yaGR7ZWZ76uh2+f3s6eje7W5oaGx7a3l+6tnf/nN8+vVt\nYnZt/HZm8/Tr6vvv7ex5bG7sdmd3bmnr5vv77O1ufu3u9nd7beXrb+vx6WpsaHZ+YX3+635jcW38\nc/jr5fFnfHjp82vs59ftc2167/juffJvcvNrfWv6/nPzbWpm6uhnavnp/GBq73vt8nvi7+37Ze/0\nb+fuaWds4Ohlbfnp5vdq9N/vfGrx5Hxoc/PqZltp/PRYXeXk7357+d3a9v195ux69XR9fPv5dGt6\nfWh58X52aGJxb3n36+3t7/D8durg6H338uXvbXl3alt47HH+a2x89XZ49/Lyefb7fWpp5OZ2+/vq\n3+f3YXR7X1ljbHD37Ob79vDx3/V5ePXnbXzf73D3dmTv9XZs9+h89Xlke395a/fl+/NsYm3p5PJ1\ncvpuePZ73+L18vDh8Vxn7d/qXFJo6/n4Zm/x/nVp+OXpeXjj5fRse9vbfXJzffVsZHFpbPBnavFx\n72n83/ttbOnn/3vc3unqYWJzZWBx6+dw8X789Xj5cOX7YGN3ZvPc7PHx3Xli+Pn+8nv9/Xxx8Nzr\nfGdoYWP0a2hnddzddW/o4uxufeh+aGfy4Xt3dHXyf/xcbeBtbHHk4HpradfX+HV+4Phu9ub7d31f\nbH1mYWVu9fTydmV3+eHmZmLv2nlebf7g5Xtz4/1z8XznfOn9eNxrZmJ65HNsXn3g7Ghu3uF8a2x8\n6ul2YfTdbFzw4PptZvLs/HR2+2X38Hv6b3Nu6vV4dH3nZ3J76tzx6H7s33Rkb+12e/r782lndPbv\nc35pbXrrcmLk5vVveevlbm7j+HZo+N3lcWh7+Pf+eWNu3OxjcfZt6vVdXeff+Ott9fPq72P9ffhn\nYPttZm508ufq6vDn6Pf6+Vlgb3rtfft24uhv7eDuYH3d6OZpZPZ4fP79bmxravtx5fb3+fzqbGt/\n+fri7mh1buV7YXJ13Xt97vDo7nhw725u/m7tdPNldnj63mbybe3pfuN3fmfl4H1oY+hnYHL86nR1\n9Obb6m1dcO1saWpzdvrl7vL17eju6PVobXn5dmF973b78Xb25Hzz5+5sYnxn+uR7c3Tp9nfv8m9e\nZ37wYWHo3d3r6v7c8V5qaOHpZmvj2m5j7+lvY19j+HhjaN/Y7Hpt7dz0Wl3w9P5t7+36Zvnf6PRh\n/NngaGjue399a233e2Lw7Wlfd/x92uN+93vq3eleXnr9b1xZa+Ds/uDjfWzo7P1sYOzz6eZ2/N3f\nZ2J69nVcWGLxZ2Xe6/z6a+Pe4u5s3NjibFz+63lhd3po/2p64PJtZ/R+eG9h4OHk8PLsXWxzbeXv\nefxxaPzvdfn1a17t4m718m7td2h07+1x69/qem723tzsaGb8+334bHNtZWJv9ff7Zevc7X55cHnz\nZ2Bz7uPm9PR5fuvh4fluXGNZWmBb+/b86uHw793X6mt//ODuYW7r4ubv/eLb/GJmZXhdW334fV1u\n29jtWmXp5vpfae3e83Jkfdt6bHzlb2ngePp6YmDs32l2a+nl7Gxr4+3e9Pft6vNi/OttXWFmfOtj\ncuPv8O/58el4W15+4urrY3Hc6v5u/HPw/mRoZnp07u7v5fzt6Gxt9+zoeHr75/5mavbg6ntq+Orz\nX174fXBiV/3gbnvh1tfyX2Le1+xdWu/fdmJebvN6f+7l+25xd+bj/VRp3v1dWunk5e/y2dXieOTt\ncWldampxaW9pffZgd+/2amvw3+h96eDW7l9gcfN4d2Nu6Pr7Z2R37H9sd3fuamz34d34amfn4fhg\nXu3j8ez4eOPa/Hj6eGtfZXbldmf67ezyal/13+pmY+vd4m5fd+3sfm717ev9cXJ2Y2L8++30ePzq\n7H76aHv9++776nz+++51Y3ZmbWl77u/x9vHp6O3t9X/u8Ph7evDp+Wt69G1bY/ZpbmRcduPt9O39\n6fFkbd/hcmzw6Ol5ZX3j3/53b3bpclpx5nprbvvn53v4391uX2d28m9fa/DsdPzr5vNxaHre729m\nbe3qdmb7+f/z6fb35eHscW9s+u1rXmX5fnV7cX707Px5emdpcnbv3uZ+39fi+3lzdfVqY2dpc3J1\nfvru7O19avPo7uzsb2x6cWptX2nv/Xp77e7o6v72/PT08HRq+Oz2e3n7+f17+eHsdXN3d/1oXWBr\nenL1/+/c3un97Ox9c29q+Oz0+vPr8/x772paXWr5c3Z59e3o4fP2f3N8+ff5fGz+5+fsffHt/nR5\ncXf+dXDy63d+fW5qa21t8OLm6/x18fN7+G5hb/xna3J0793g6u5xdPb7//P+efX/b2n/eWz99/12\nb2747/v9fPf1e21v8unyeHzu6/F8+Obt7vxvamv7/P54bWZweW/+8/Dp73ru5vFvbXX+7vpwe/Ju\ncfx69fL8fe7sdn376et3dn7r5/5lY2tqb2x3fXhzbu/p9fX36d/qem7v5O9xdP98a2v7dmdq/N/i\ndmhv7Ov+c/nr72lfcerqdnT99P5tb/Xw9nxpb3lvbHL46O318uPh6+/u5e/+ZmZ7cXB3c3r6dXh/\ndW5w9PR5d/77+/V89u/y6eXq7O37/nh3Zl5lcH51bnPy5O12dPPs9XZv++58c//t7fb29/52a272\n8vl1cPfs7Hdy9ujq8O59c378d3duZG39fnxpYWn+8fTv9P94end7/Xz38/L08uzx9e7v7vb8+/j1\nenF0e/z4/W9sb3N9++/z+/5++v94efvu7vl1fPHs+m97+vD/dHF6/nn97uv0fGxja25rbfzy9v7+\n7eLi7fr99vf3e3j5/nR6eXl++fP8eG9zfnx7endvefnr7uzn6e33/nh7em5oZmtubmtsfe7t7vT9\n+/h/d/nt8ft9+PXy+Hz88O3v8/n++317fnj9enBvdn579vL4fXVvamxudvj28+3r7Ovo6e99bGVn\nb/XzeHRyeG53fnXv7314/O/y6evu93r49ezw9/X47/V+bG9+dXRubmhrb292en77+/n27u7v7/91\nbnf99vP6/Pz5fnZ2dXX++ezn6urs9fx9/n5+eG5raGpra3v07+3u8fH6+X53d3d5fvXv7/t6/3x5\n9ero7Pf+enVybGlpaWpu//Dt7vDr6PL28/51bm5vePv07e3o5ejr8f3//H1zbnBqaGpkZWhvcnbx\n6OXj5urs/m90dv/5+fh++vp6ff76fG9rcPl9b21sa3D78u3w7+3q6uzs8PLx+nVubG1ybWdrdXn8\n+PXw7unm5+zt8/5+cW5xeHz/fnx5d3p5f/50bmpv/fb39fp+/PXs6uzx9PPv7/l2eHr5+nh1cGxt\ncnv/dvzy8/j8eHV1cHBv//L19vLx9vf07e30+H5ydHV4fv74/H36/W9sbHZ++fP3/Hv7/vv4/X5+\n+377/Xz47uzs+PTx/nhtbXBuePj09vj4fXxvcHN79/jt7e3wff75cmpqanl+/vb08O/6+399+vn2\n+PXx7u/w+X92ef357/H+eG5pbnh2b2xscXr47+3s6urvfXz4/Pv9dmxpc+7r7vD58PPzeXL9dHN5\ndHBsZGlxdXh98Ovo6ero8/54+/x0ff17//v59vt8+vXz7vR7bmxoZ2hqdP719e/s6+Pl6e5+cW1v\ndnd4fHt8+PR1cHR97/Dv9Pr/8enxfHVra3by7PD0fXZ1fPh9fX53cHl9emxpcXrw8+7v+e7/7/5+\n7vHq7e58c21pZ2huefju6ujq6/J5dXNuc/r8eX56en18bnL77uPg7Px4b3ZtdGVqbmtzb/J5fvT2\n6erh7/pwa3x96u7t7PLq9e78a3B+8O3vfGlsbWppZmtv7uvm6H958uju8fZ+c3h3+vp5b2VjYWVt\nb3f9+e7h5u91/Ozn3+fy9Ovp+/d7cPL8eHRzZ3n+aG1dXFZMT2XWxb/BydPd82RXTkxVaHjwel5b\nYWJfX1lXXX3q6uh5Z3Hm3Nvb5fHi19LT2uTr9n759WtXXGprb3N6+ubc6n55WUNBSfWurby+Rz1F\nPkQ3Okl6u7XC7Uw9THJkVUhZ3LuwvM9dTWjm1nJRWWbXzeFWSkxZ7Nv+U05Xaejm6+Da1+b38u7n\n7er2cO/4dWNfb3rg7Hl8XV5KOEFeyqiturxOT0o7OC00T8uysMb3VEZaU0ZER865tbxpRj9N3dvg\naVd+2NbrX1lj6djsXVlVXmJZWE5e3c/Jzc/a2uJlYVZb3c7KzmJcZ3zMfTkt2Kmxrso1Nz5dQjM2\nOFy0tMrfREnSytRHP2DNt7XFVz5JbdrPflRt3NDbW0tJX9ra3fxZWFZcXVr85tjQ+F9j59Xc4XRp\n3+ByU1pdU+rJxs/W00wv46S718Q7TPVjPyYtP1mzsu7xfvbEeEg3NdC4tbrhUU7Jv2FXb+vMv9NI\nQkpRWnBfUGXm8V5ZTkpn3NXS1eR32M7oa1pXb9rXfe/d+P5uXvzUydhnTzRWoavWzUBWZkA3ICpd\nzbK6buzezMpDNzY60769wca4w91hR+HO1NLcy9DuSzw+SVJXX1r2e1hbUmNuYuHYz83KzWhVZfLu\n5NXifs/R80tJ4+l1cF772FxdravLy2VqSC8yKTDh28zNy7jG6lM3PUJGbPXAuLq52k9e3WQ/aMa+\nvsjlWm1ZPThJat1+UE1c7VpNZ83G2GD43Xfi5urc3tHtVE9b69zQe1bb0s2/sqy93t9IPzApKi5I\n3mfYxry40GdIQEo8P2TMuLm8vsjRbG9vQ0TevcLZ/tjRcko6P0pOTUpj3Nf9b9fN2vxi/Nt1SEfa\nytpcSmjQwtdLX8e73EtOa7Wpu8+4u9c0JygsOC8v67avttbbyMlGLTA/W/Hlvq6ts8jHt+U0Nkvi\n325jzLnNTUVERT47PVfU/XHLxcbOc+nLekJGV1ds+17Xx87O0dHW92BPU+zMtq69urbHVzQtKSsu\nLTt/yL66uri5yk1DQzo3O0fgvr64qqy+w8dfQT44PU5KT9TK29HoZl5HPD5ST03dycW+zfPY209K\nUVJifmN7zMXIycfR6nte6ry8XcezxOlLOTM4LykwRj9Oz8G5tLzLvcNMPkBFT09M1LW+uayzvsfh\nSUI3LzM8PEfW2M7Ey9PP9kdJWFBa6d3P0Onbzd/96Wth3OFsftPUa1972tS/xWu+tcztWUc/PDQs\nNDw2PFV6z7++vK+yyc/NWENEOj1M+s69t7eytcHaYUA3NjQ2PUNHbNDT0MbGy9N5ad3VYFV93dxr\nXO/Z6m/42tjZ5n7n4uL4U0L9xWf1xsrJ1Otp5HU+PT06Njk3PG7TyLqxs7S6zetgTkpIR1P03+vd\nz9HU42pfXFZOUF1aVlde9OR4duHX0dfW09fd9W5r7vBnXWFv7PpmVVnxffvg09vd1/pqYlhNST1B\n09de3cK9yMvQyMDfVWD+TUM9OkJMSkrt3dnOzsvFy+/+5uZ3X1df/+bm3NDS1+Fve/peWGttXl9l\nYmVwX1Vr397c19Td1NHi82xhZGFXU1hdZGZt+erm6uHa62ljZGhnYmnj1trf5u1x+mxbW11sa3X7\n8+zs7Ofj4urk3dzf6OTf6Ov6ZWFdWVNOTlRbXmtufH7q4d/c3d3d4Off3OL17+rl6/xuaH5rYmVm\ncHRvZVxfa2Vz7+LU1NfX2t/+ZF1XVFNTYHn79Ovb2t3k7PpsZ2VqaWtsb3t77+ro3+Tj29re8W1k\nYGhdWGJtZ2p0dvDo5+Xf3+t++PBwYGBkaXJ89OLY1+Lz73ZmW1hfYmZ87eLd6ejx+vpvaF1ebP/p\n4Obk5/H6/vf5cnfx6e78cHBvb21gYnB9+vH5+Ovr+HR18u/vfH75ffLv6+759u/6aF9fZWFgbvnt\n4d3e5eXk6/P6/W11cWd2b2lqY2ZraGJebPz06ezl2dXa2tzf8HVoXF1dXVteZnXs8vDu6+3w+/fl\n6vL35+fq7m9tanF2++5/9+z/cG5fWVdbYGJmee3d1djY3N3l6u3/cmBebPLt9vrv7Oz/bGVnZl9o\naG53/uvo5eLg5+zt+nv/+XFwbGBfZGRiaG54fu3s7OXn4t/m+PH4eP53fP77/f7p5+vtbl9dWlpj\nb3nt4Nvr7ufo7XD+fW9yeH3s8mpd+dFlVdLPaXhgXutXS1n8W1v73tjT097R0+H27W9zcVpYXnjt\nem/o6e5pWGzqbVpe7fNw9O3b1+R1/O7tZWFs9+xsee318tXd7OxuW1ZTWGtfZe/T2+Dc4tzl+WXf\n7VpddXZfbVtkdWto9uR3+Ov1d+/s7ePx++7i8mpvfuz5Z3jhf2l3efV5amRwX13t6+7v5u7f3vDq\n7PhscWRkdvnv4ubl5PJpXWVpZFpfZGh1dG/w7HDu39/h3tnY1trg7PRxZmpmX19kbWVhY/3we+3i\n3OZ+cmljWllkaGxzb3rvdmBvcWdnbnn35+Li5PL849jh99rP3N3Q0M7Y7VQwQ69mNsC4usXf/u7L\nNic9Ui4uRGO7tc7Gq7FSXOZJQTs2Sd1TRs2/2s3I2NXoPjtTXDs/Sk6hn8Ghmp+pxPo9LCMVGCsf\nHzfzrqerrq6mujQ2OjczLTXYtr+9rKivt8Xu4UMuLTk4MT1LUt/PZtPE5f5yZO27t6qfpqGgqbZM\nNCUdHBocJis6ybaqqquvzng5LjEvLj3WwbWsqquss8nL8j01ODk5PTxEVE5DUVlPWlfOtKago52c\noqvEPy8hGxkbICMtXb2tq66tt102Li0rLDFOvLOuqKSnrLbD7kQ3MDI2Nz1JVF9cS0VZTjtNwqul\noZ2bnKa2z0IoHhwdICMrPcu3vMDA2DwuLC00O0vIrq2sp6ertLzA1VdMSEZAOz88NTMyMDE1PFd/\nxaidnZ2bnaO0YEAuJB4hKCszRei/vutPSzMoKCo0QUvLr62yraqtt8C/v8nW0Mzbak9FOS4sKicn\nLzpC266enJyZm5+qyWI6KCIjKCouP1rZzG5GPTAoKCozPUzFtrCwrquus7m3u8fHxMfeXVRPOS4s\nKykmKzY9WLuknp6am5+mu8ZMLSgnKiYqPEtr4mVXSzYsLS0yNkLPxr2+trC1t7ext7u3tr7N1fRN\nNC4uKignLDs8RcKooqScnKCktLXaOi8sMCgpNz9KUU9OQzAsLzEuMld+3cjAtbm+tK+4vLSur7u6\nushTOjYuKCQnKy0zOeevqaadnKKgqK6/Sj0wLiUnMzA3UHFRS0I6PjYuPEY8R/7Z0Mi/sbO5sq+v\ns7K2vc7lXDwwLy4qKy45PDdXsbKunqKko6aswslROzUoKy4qLj9INz1KQTs1QkA9P1j3TdzFu7y1\nrK2trayxvcnPXzw0MC8uLzQ5Q1ZbVHy+vL2pqKmlpam0t8lJOSwoKCQmLS4vP1JGV+pVTltKTFZM\nbM7EuK6rqqiprrG8zmQ/ODAsLC8yNkFZ79LKycXF5f27vO+uqb6uqLjStsk9QjMoJiUhJywqMj06\nP/b35Lq2uLGusa6usbGyvMbPaU1FOzo8PD9GSk5WXFpk/G/q6NXEwr+7uLu+v9H2Ykg7OTg2NzxE\nSVlkYHhvbWNqee/e69DCwcG7vMXN6VxNSkNCSU1cZWzw6377293Wzc/OxcHJxcTMytDlaVhIPz4+\nPkA9PkJERkpOVG334dLPysS/vbu6vb7Ax9Ltb1hLREFBPj9DREZLV1Zv3NnMyMjIxsTJycrNytPi\n7W9TTVFNRkpORkdKREVLUFpje97PzsrAwMG/wcnN2er5Yl1XUE1MSkdEQ0dKUV/w39PKycfIw8fM\nyszQ1t5/bGJYUFRRSktJRkZGS09WZ3jhz8vFv8DGys7W+2JZVV9aam5dZmBVS1BZVlZt5u7b2uPW\n19jX1NPX3OXb1u7r3nRiY1lMTlBMT1ZVV1xebu/o3M/P0c3V3eDvZvz3ZG93X15pVlNaV1Zn/e/i\n0c7U0NPX1t3g3drX3+XqclxcW01LS0lKTVVfbHzi19zX3eTX3OHf3Ojl6Xbx7Gb/53NkY2BSTFBR\nVmJ569zb2NHPz87Q1dTg6OL2f3F2Y1ZXVlRUUlRfaV9v6/n27m1ldHdveu37/t3b3dbP3uDd62lt\nb1plal1f9n5VfONqed3k59HW4dXa+fbodnBtW11aUFhZV1hofmh/4erk6v/m6fn36efr6+TuaHp9\nYmnuXWjnZXzh4d/f3t357e56dWBt6v7n2+nz6PljaF5XV1xcZGt/fHLddWr8cXR57H/t9N/k6Nff\n6H37/WBpZ3BeZ/plb/V8bXZ04vr03OXb2+HW39nS5/n5Z1RNT1hQUXFkd/Pq+HLi7/Z3bP1edt9v\nddzY6uPZ4X7q7l1q82xj9+/3b2z5fWr43/Hm1OX87Ox7ZvboZnP8YWJdYXRXXez5X/7ebXTq/vd+\n73L3927f/mTj3nrx2v537Hzv9W577/ft6u9bWu1dZOXwdunl4+T87/l8XmTpclr88Fhl8GpfaHv3\n/X3j4Orv5eFoceF0funudvXufXx8cGT27Ov37t5xa9vf7ene7Hd8d3pfWWJjV1RvaltidndfXfdt\nX2h572l14t/u3dXX5NvN1m5PzrxK5rrIydK2xlrOYlc9NTQ1MCk7UDVAv73lua64uLu7xc9bUvE9\nOEZINTxfTkhy1+HT0OpTv6dG7Z21uqujqVSy2zU7ISInHRshMCckzb7msKSjqKOhoq21us9RLDUx\nJygtOS88dtvPz768xe3q1lRGTFNPRuSuu7mdo6KepKK7w0coKhoWGhgXGiUrLtCxraKenZ2eoaeo\ntnVTRS4pLSotLzlIWMzvwrvY2dlgPj9FPUNESN3N3r6gosKdmaqlq6rXNjQcHxsSFxscHSpV77um\nop2bn56fpbPKxUotLy8rLy84S23W7ri46dbfYDw6OzY/RUvixMK4s7O1wdWyolFCoLfQ2drALDUl\nHjIdGiMrLi3dsq+jn6Gbnaastbs8LTErJSQrNDxE9L6vs7usscHfZF89PDQ2Rz5CY8q/xb+9vsH2\nUkAyyLsp1ae6r8GnrWO8KjA7Hh8gLC8vb8u5p6uwqKuw91TuOD0wLztN3VK9sa+ur621s89HQTYt\nJikoKS81P227ubeur664x9D7UC8s1qxNTKGin6iupMXILxsmHBkWFiMpL0HSq6Ggnp+fnam1u891\nOy4qLzs3M0fIxsPIv7nLZD49PjEyMjNHWfLJvK+xsa61tr3R4VtMPDY6NjdGVl9IQmTAssTGvr6v\nvN1PR2c5MTIvPT9BUti5vb67vb3J7VdNTEU/StvHx8G7t7i/zu5ZRjUzNDIwMTxGVOXOvre0r7Cv\nsL7L0V9AOzs3MTU/RUrv0cq/vL7LzMxdVFpKP0FTTE100cbAv8fBv8TN3+hcYFhFRUVHP0VTR0hN\nZ15a3d3b0MjDyMLDw77Hyc3U1mdOSUA8OTg7OzxKT1fWx8C9urS5vb/JzdxmU0ZJTEBGTlBYXnFZ\nbeT3Yl3kX1lzX/Tf3t3PxsrLxsfP3fZUS1JKPkVbUk9b6d7a1N3QzttvY+5zXVlSa+927+TRztLX\n3Nr5/fNdWVlQVVhXdGVie3Tvd+/latbP1dLV0trR2WFg/F9NSU1PSUdOZOff6ubLv8XKxcjL2GJd\nTUVEP0BBREtJWtDOzszFu73BysvQ7nxOTk5KSkZQYG5jaOfW3vPa5uHrZ3Zha2ZeYmL+Y+7f79vi\n0tv0ztnk7Wnta1JSUlhiWVRoaWTe2O/f1Nfl5tnv6uPt49fZ/G/9W1RWTVBST1hXfPFn3trV08/N\n3NTf4+5sa19iTE9eWGxw/NfTztLX2edsYFRLS1JXU1jf1dfMzdDNyd547GpbUVlXVV5hWmzo9+p7\ncGr8d1Fk83737uHd2eHt+N/Z5+v1bm1oZGBrbW78fuzg4ujd5Ov4d2Zed25iZnzramHo6+53am9h\nZWdiam1+8fLd3uLV2+ni3eXs8HZjZ2ZVUltcWVlpdn7f4Ovf3uLY2dfW1t148HtoZlxjYmJfX2Vf\nZl1aX2dvfPDl497a5OHZ5O798PVsdGz95OfvdO/2bnFkX19lXl9sdHl/8Oz1397k6Obd4+Xr+fxu\nbWBiX11kY2p+d21+/O717uX44+D69/Ln/mdvdvn7fXv/6Oz77ep0/H365u93YnXz/Pt4//9qZVpe\nZ1laX2r5/evh2dDU3NfX3OHveHlgXF5bX1hcX2jx6eXe3eDj7+v0dGhgZFxWV1tt7Ovl3tnY2Nre\n3+f4Ym7+W1tfXGX+ZVxobfJndeR83enb0d/o19PtZmTo71lXVm9uZmVq4Hn17PfefF7433Nubfnl\ncmxgbdnbbm3s3d/5fep9YHprUlhseWNt8fDneXzQ22Ty2eto6d1jZNr1aeJ9/nhcYHduUmLidGJt\n8uF5etzcdXTp9f98dOj7YH7i7XVj7u5sd3D77Wdd/OLuaXPh9vd+7up88X7h73Hr/nD6cWlqXl74\n82Ri3911aOfp7uZ07+1v7+br9P5yZlxhYGdxbP3p293e7N7Z8XDy/1hg+l5bb/Js+/Dv4+V9a/R3\nWnnmdllz+Gh2fubzbeXh7XHm33Hn7vXmbmh+dFxbeGtrePl+6dnY0MvJycnL2+xuVkxIQj49Pj9B\nRktRbNzV08zExcjEx83Ozt334HdbW1xcTVRhSEi/1Tu1t9++va3587ZLUUY7QDMxNTs7NjvnUkfM\nysHWwrHHwbm1vtC4vtf+5F4+PTxAODY8QUQ9Xtxo3srAzsy+yczLzNL/b17NzmHLurvNwbbIbG1y\nQzYyMi4pKzE1NDp509bFurK2ta+vtruzvda/wtxeZ1Q8Ozg5Ojg5Pkc/Snl5Zd3E1tDEyszXyMz+\n6u7S29PBw7e4vbe+x+1eVzQvLSkoKCwvMz5O6sa9t6+tq66vrrm9t8hk4OJIOkJAMzc9Pz9CS09t\nZF3b4mt17OxfZd3d5N7R1Xfivb/fsK64rbSuvtrFOz0wJikiJSUnMDQ/b829sq+rqauqsrO60sPr\nTUxJSjw/R0JLVlpm6HZfZF5OSU5JREpOXGzozsfGys/FzFRVtK9AvqOzs8GtskHfLy0yHh8fJyok\nN1jfvrespqelqa2ottV0U2I2MT08Pz5J6NfNz83EzmVQTEQ6NTk+QEZT1sbEvbq3u8fR3OxPNzbI\nrz1uo6qsvLCtSc8uISwhIBofOC85abqppqSkpZ+jvsDGZzgnMS8uMi9lzr+8v6yuuc9jbkAyKykv\nNzU4U720vLmvrK6+x855XjkwMCzkr0TOpKSgs7CzP9AoGx8dIBseM0S8sa2inJqeqayu0D4qJiUh\nKSowZMa2q6CjqKmvvUw1KSEjICQpL1vIuq2oo6mqrLq/6T4vLTIrJiUttKm7paGdmKWrWDU8HBwX\nFBwfL0LIpKCcmZygqbfkMyYiHB8mKz9/rqKgnp6corXcOCgiHRsbHic1aLWwqKGin6q0w1ZOMzIt\nJCosNDsyQa6cnZiboZylrUEgGxAWGRYcITi+n5iam52jqq9GKSAcHyEvPUu5q52Ym52os8o/LR8b\nGhsgKjVGxq+oo6GkrbLFak05NiwtMjI8Nj5fbMTMqpmdl5mrpMpRMxsYDhEWGCw62qqel5WYnq7P\nSSwoIB0iJTXUr6Gem5ygprlQNSYgHx0hJS09XLesqKepq7S/3UM3MzEwMzxFTGfh3sC4u8DVrZ+h\nnKG32TEuIRwbERUbKFGxnp2ZmJufrL0uIh4aHSIuQMqnn5yZm56rzTckIR0cHiUuPtS2qaWjq7a5\n7lU8NDUuOz9TyM69v8jM/WlSWl1GQMiqqZ2gubg8LSgiJhoeISJWsaSdm5+osMY7Li4gISQoP86r\npZ+dpaeuxVIzJh8kKC9LXtq/t7a4tsh0Uzo3PUlT3MLAvsLHzOVdQDk3NT5KSlO2o6WanKmqRDco\nHSAYHB0jP9esoJycn6vCSi8tJSgmJjRHtqefnZ+hq7xkNywqJiQoKzhN0L3Cvb/Gw8rNbV76bNne\n4utYT0FBPz1ETGjLwb23uKaip56vylwnJhweHRspJTnFsKOdm5+mtk0tLCUiKykxSseupJucnaG3\n/zcpIiMiISctO3i3sK2qtLrG0P1QYD5CTEFXXuf169pn1tDVyM7T53m4r7Ojr8fMLCsiIiQgMis4\n1cetoZ+ip7Z5MzEqJjYuOlt1v7Chop+fr8ZHLSYoJSUsKzU/y7mxqLOvvNbQTVxAQEw8UVxr0dDS\n09PZ5tzQ29HYT9m+0LSxxLxgPjQuMCgyLSw/Q+u8raupprO/3kE4OTUwOT5D4Lu1q6isrLfVTTkt\nKCopKjI7TsS3r6utsLzHeEVLPT5CPkFFVW3Nvb68vcfHzt5xRj5JQv6+ybO0wr1TSzYsLyUsMC9O\nWse0rKeoqbHIbEEyMy8xOz1tzbitramuuMZMOS4qKSktMz7tyLeusK6yu8LabE1DPTo8Qk/60cnC\nxczab1tIPDdHY92vr6ykr7DKPzcmJyMiLCo4WNSvqqWkqK29Xj8wLzAuNz5Pyr2yrayssbvYRjYt\nKyssMjtN1cW2sbKxt7zK9E89Pjw7RUlY+dbJxcfM3GxYS0k/Subos6yso667yjUxJiMnIi4vON3N\nr6qppq2ywlZCNTM4OT9Tec7AvLy7ur3Ez2hDPDc1OD1CTHF82cnGvr6/yc/kXV1PTExPWWXyf21Z\nV11h/nx+aGbGwLeprqqszt82KyohJycrOzrfyLutrqqttLrgVUA5Ojw+SWv73srJvra3ub7UUj44\nMjI2Nj9OaszAure4ub7J3l9NRENBQkdKUFNfe/bWz8nKztZd8MnXta+3q7nM4DQwKScrKDI1O3b7\nvLKtqKytvOFOOjQ1ODtGXP7Iu7iwsLS6ylY8NS4uMTU/X+jJv726vL/L12BXS0NJR0pOWHHt3NHU\n0tjl619MS8/LtaespKvC0TQrJB8hHyctNea/rqWioKasv003LCgrLjRJ+8GyramprLXLZjowLisv\nNDpKXNm/uLS0ucTvV0hDSE1UYVdRVVfu5dTW5NtvfXFXSljBwKuiqqKv2FQoIx0cHh8tOGOzqZ+d\nnaOz3DQoJSMmLzxeua6noKKmrMdBLiclJy0ySl7Xv72ztbW81lo/OzxJb97M1ON7VFtp9fT+WVZQ\nUebg2l1PwMCtn6iirk48IR8cHSQkNl/DqZ+dnaO1Si0iHiQqONa7r6aioqKqvkwrIx4kLD3Mxba6\nubvDvuJnQzc4O0jexcS/ytbfal9QVElFTEhp5s6+wMl2PVq9vqGjrqlIPCoiJR0mJCtUx6ygnqKq\nwD4sKycuPEHava+qo6StuEwtJyUnMlTXvLe6u7vF5fs/ODs5S1/bz8jGy8TO2nNPREBITVtu+dzd\n1dPoWztMt7ahm6qlyTUtHh4ZHSEn5bKlnJuhqco3KCUjJTU/zq+moZ+itOQzJiMmKzbnxbOsrrG9\n7Dw2MjVCTvTa0MvCvb/B1lpBPDk7TFHy3+3ZzsvBylk2PLe0npiop28pJRweGh4mKcWnn5iap7Y+\nKB8hJSdG3Liknp6fp9Y2KR4eKS9Ju7Grpaiwwk0uKi0vPezlzcDHvLe9xepIODc5OUdQe8u/u7u/\nyv5DNiooS6iflZWnrzwkHxoaFRwmOaeYl5WbtVoqHxweJCnmr6WamqCq1S4jHx4iOGa3pKSmq7DL\nTDopJiktONi/uK+zs7q//z04LC43O17PvbaytMN4Szo1OC0svZ6bkJatyCkcGBkYFyMyxpuTl5ml\nSy0gGxshKjexop2YnKzLOSMfIiUv0rGonqOtt1s0LyspLDA4R7+3rquxuM1pPzYzLTM8Sce3sayu\nuM9INi0uMTJDPvGdl5ePo0QuFhYXHB8idr2ik5SbomwhHBkZHTRRupycm5usai4jHB8vOcKmpqKi\nsd5ELiwyMzM1Pk7Jrq6vt9xNQjw3ODg5T867r664w+FOPjw2Mj1HU+PaX6mZoJeeMzYeGR8fKCU/\nvK6alqKu7B8cHBwjO8W5npufna1LLSQfITrjxaakq6SwWD0uJigvLzh6zsmurbq3zkpEPz0/Zl9h\ny97Yx8jL2+NUR0g8Oz1ETmja8KyZn5qeNDQfGiQjLio9wLadmqW0TiAdHh8pQ7ivnpqgorg6KCMk\nKEzGvampsqy3RjcsJyk2O0Pe1cW0rre4xU9JRD47RD9F2cW3r7PDbkg2ND01NT9A/sG4uqaZpZ6o\nLDMgHCYlLypOuraenrC/SSQiJCguXLS3n56opsA8LCcpK0zIx6+stK+28j41LisyOzlPzMq0rLK9\n1Uw3PD8+W2fcx725vcRvPTk3N05YTefjz8bNXrigrp+jPFoqIysoLyMzSVujnqWmuzUrJSMiMVhW\np6GmnqvHRi4oJDA9TLaxrKOpss07LCcoKy89asavq6uxxms7ODc6Tk7u0ti+vb/IZ0o/Q05ESExG\nb9nH2Lair56jeMgpJCQgKiA2R2qjoKGgsEwvJSAfLD5Tq6inn6q23zgpJCsvS7y1q6SrrrtLOiom\nJSczR76tqqivwu4/NjQ1OT/ty72wt77ITz87OUFBRk5nzM67pqmioLy+OSYkHCUgLk1MrKujoqqu\nWzwnHyMkL2y8rKOjpKmy6DMrISUvP8Gup6epr8BsNykiIiUy+reqqKu2xnI8OC8vOUbKvrWyuL3W\nakA5NzU8WNnWw62qp5+uvlwpJh8hIyk9Pr2tqqOmqb/cOCcqJCs2TsK5qaqpqLbBTi8rJSo0Wbyx\nqaisscxGMSklKC0747qwrq+5x99EOzc1PlLPwLy6wsx6T0tLZk1IwMi4pLSrtU1PKCojIS4nPl/R\nrq2jqKyvVUk0LTA1PT7p7s61s6+utMj9PzEyMjZF7se7s7q+y1dFOjY2OkZwxby5u8XdVUg+P0NH\naN/KvsC+xtRZQExQ3La3sbHEyWxCPC8sKCgqLj1av6+rp6iutcxOQDo5O0BDSVxtz8O8uLzH2m1V\nVE5NSkhJT3L40NDz61NMVU1n5dbHxcfS7VFDQz0+Q0pw0L64t7i6wcTIycXL1WpKPDg2NDUzMzQ4\nPmPKuK+vr7S6wdL7TkI9Oz5GTnbWzcTDwcHFys/eXlZHPTs2Njk/Ut3Bu7i4vMHN6ltMRkJHTlFd\nWlBUVGTiz8m9t7avsrKzzNhIMjEqKi0rLzc8UNrDua+tra6yvc5dRT46PT8+SU9W18rEu7/DxczX\n2f5PTT85Ojg7PkRRfc7Buba0tbzE5ko/ODY5Oz9PfNDDwb+5vbiyuLC4x8lFPDcrLSooLC0yQ13M\nuLCsqqutsbrK9ko8OTQ0ODdDe9+/ubu3u8DG2mVMPjk2Njk+TVzizcm+v7y7wcPO+WhNQj46ODo8\nRV3fvrSuqaqrrLrIdDo1LSkrKCksLDdHZr22sK2vr7K1ub7D3GpOPTs6OD5ITHHp2MzMxMLIy+VV\nSD05Oj1BUPbXxcC+vb2+wcvfXEhAPDs8P0RIX9LFtK2sqKuxtdZLPy0sKyUpKCgwOU7DubKtr66u\nsrK4v8nuVUg/PD1FRljucNfeYfVfV1lKR0NASE5d2c3HwMHEw8nNyc3U41REPTk7PT1L7tG1rqyn\nq6+01lRCLiwpIygmKDE2Sci9saytrKyusLS8yXhIPTs8QE9d+eL1eGBUVlBMT0pDQD09RE78zcS9\nu7u4uLi4vMfiSzoyKyozOt+zrqWlqaqxxdg/LywjISEfJSwyWcW6rqytq6utq661vdlPPzo3PEBI\nWFJPWFlu19fb4VNDPTY4PT5OYXzNxb22s7GwtbzKakI3NDc+X8q8sbKytr7J6lM+NS0pJyUoLDRH\nbs7AurWvrKqpqq6zvtpdS0I/Pzw8Ozw/RVJp5+rrZFNPSk9YXlVe4szExcPFyNh2XEpEU8e2pqGk\nobLKYSwnHxsZGRshNsunnJqanam14z0zKiIhISY+yKWbmZmfq79RMSkhHh0eJjF3va2srK+6v8/c\nX1M/PTs6Pj89ZaqmmZOdmqtIQB4aFhEREhsly6KYj5GWnbJNMCMdHBkbIzSznJOQk5qs7isfHRoc\nHyc517Sqp6quuM5YQDIuLy87TW7F2Vmxo6GRlp+cZEAvHBwSEg4THSi3o5qUlZmdqcw6IxsZGR44\nvaOYmJiboK/eLxwZFBceJ0nFrqijn6KmtNc7KycmLDJGRTzCop+UkaSduDzHJicZERMPHyU9trWl\nnpuamqK9PSgfISkrMVJ7sKGfnJ+rvUk3KCMfHSEpO8u3rKusra+1ylQ4MC4wMDy5r6icp6ilwrTo\nQi8fJRkeJB4sLknMsqiooqepqbG7bT0wLjQ3REhZxsCvr7jCSz85OD07Pz1Ha9O+u7y+v766yftJ\nPGnqybnd2nxYy93LXz9IMz9ANjs0Oj5Ldlzm28e7trK9wtHeycbIzO1WUlhiXVxJQktN+N7X1enW\n08jH1/lJSk5X621qX1xzfO5zU0pITXbPw7zAwMrTzdzU32ReSEVCPkM+PDk3O0Jo3M2/wrm2s7O7\nv9vf2+7WX05JRVps5XlUTklOYFtSTkRIT2J8+d3czsnGxsfN19jd29vocuvm3tXb+1xSSUk+PT46\nR0hSXFvf1sC8vb7Nzc7Sz+NkWVhf79bU3ul1afRuWU1JRkpPU2JbafLc1M7GycjL2+heWVJRXVdv\n8d7P1dDh+mBTVUZLTExXWmp+3cvIwMDGxdjlYUxNRUhDSE5Q/XzWysvGxsbIy9ToZU5JR0lMT1xj\n/tjPzc/jX09JSExSZ+zWzcO+v7/K1uNfUklEPz5AQktYaNrLyMLEycnV2N7vfVpWT1dfZf7t7+HV\n2tbzW01FR0ZPU1/z3srCwMDL4GlQTkxPTk1VW9/OxL/HyNPY32pcSUBAQUpPWV1dZW7g08zHysrM\ny8jLz+1cTkpVWHXwb2Jd1GA/Pj9scFNNWsK3trzP89PA2UM2Nkzv6V1X58rBzuf92tRsUEhS6exw\nWVVtffZeT2vp18zb1MzL2FxTT2f4dG1e+tPO12JPVFhST0xQ69LQy8jJyMzmXFZLR0dHUGZ2/eLP\nz8/P2drj7evwdWleWlpfYFxaWl9q6trU3Ofg4PNaVGPt4ul54+Lv0czF1FpTW/NZRERUed7+Wfbf\nz9VvW2D+/2Ff9eLa4dbW4Ofn193ubntrV1VKSlBYZ/Xg8Wvd1MzPbGbk0NpoXl763fdfWlvn1/Za\nY9jW9mlg/9h+T05bbl9aXfvR0el72c/U3en8cOV8dtze9FtTWl5hVFBYZmZu393d4fx3fPjz5vRy\nbu7lf/P/7XtrfHbmeOHi6uPh3+XdYU9MXP1TSVe8usjFvbm9x1A9Qj80MTo8SFBJWM3Ezc/My8zO\n7XHeeVFMXXVqe3TpysrT2NjYfFZXWVdPRDko7p7CzqqfnaapWkzOLhwYHBoeIiM2tqevqp+fn6e1\n4VrhOSstLzlIU1LMtbW6vMng0WQ7Mjc2NTk+Ste9v7ywq6yywM9PM8i1TFPTwLy3wjs5YEUtKCQi\nKTA0Omu+tq+vr6ytr7zS4U9NZO5hYd3Xy89qR0NHQkhHQkVTbfDW1dbMxMnOyM7Y1+ji5tvZakc4\nOlfpTlzoz7u5vdL6Zk9EPTczO0RRa9XPy8PByM3O711eZ37y69DMysbLztvf6WRSSU5aW1RaXWNb\nW1VNX1hTW1pv49Lb69PKzdPa2t/rVEVfz8rM2t7YzsnL5VBNTktAPj9CSmvmbGjk19DJy9Xa3N3t\n621fbGX57d/Z29bh29nm8ntcTkhFSUpNTk1abt7NyMbFxcXHyNDv+G9aSUdCQERBRk7/0M7Ixb+6\nvcLO2+J1WkhBQ0dKSk9XYWZnaGV5bmdjcN/W2tvNx8jIxcrU1ej7dl9ORUdMTEhKTF5weOzg0czI\nzdLO095rWVJMTkxNVGzo3M7GydXZ2tfc615QU1NSVFhVaOXg2trb6vDl8m5fV1NWX15XZ+Ha4djV\n2tjf6v/e5mdsbuz9/Ph/6ex0W1heXFZZXV1v8HR/2tji393Z1trd6tvdfG9mbWpoX1tdam9rcnn4\nb11aXWzr637o3dfb4OhsYmlrYV5lbWzi0tXR0dbY1/pUTVFSUVBMWGhyZ2HZ2uXd6+zY2vP32N73\n3eXf3d15WF1RSUtSZNHOzsnCur3J3mVPSUE5NTY8Q0xj7eDLxcfEwcHN1dXd63BeUmZyaGZ73ul9\n/GVlelxNTFxTU1xg7OPXzt7Mvc7Pz91tU1tDS1NTTVp5PEC5r8S/v7+4s7k/Nj49NS4sKjRU233Y\nvbaysrnEzMzsT0tGQkhXVnHAvMXIwMTUbEg+Qkw/OT5GXv9k6tzExtPM08zH0vpfa2ZmTlFXUV9m\naks90KuywcDMt7K7Ui86ODAvKysvPfbKwb+8sa2uuMnV3WVIPDg9R1FPZL6ys77Ny8fvPzMwODw6\nNz5b28S+v7y8u73Lz91mXmlNQENISk1ZYurNv85OfbWtt3lFY7+7fjYvMz1APTo9RFXLvbvC0tjH\nur7pUEtTdO1vWF90eM69u8fvYVdXVEI6O0JMWeXOy8TCxsXK0PNYU05MSk1OTF3h09DOy8zNztxx\nW05FP0JGTWPh0svFxL+9vMDN4GZUSkM+PkFGSU1TV2J+29LS1/F56+P8bX/f0cfBxMjMz9vgflRL\nS0tGQkVKTlRiZVthfOfWzcnJx8XKz8/R4WtVTEtQVVBPT1Ve/uLf2c/Kzc/V3OLf3utlVE9OVVpb\nXF9eXmBjY2ZlXlxp6uPg5eve0cnJzNLW0s/V4ex8a1hTTklHREZLVV1eZHzj1c7Nzc/P0tjk/3Z3\n7+7wcWlu/XpeVFBWW1lVXfvd29jOzs7Mys3V4nheXFtQSEhOTlFVVlps6u3z+vT07uLa1dbRz83N\n1t3b19v5Y1lXXFhQUFZaWllWU1dganDx29XVz87O0NTW2NrldmJfW05KS05VWGfq1szP1dPR0+X8\ne/rycFpVWWZpW1lYXl9dX2JnZmpv+ujp5NvWz83Nz9Xa4/fx8n1tYFxaV1NOT1daWllmfe7j39zW\n09fZ2tzm7/d9fvpoVE9QU1rxy7+8v871bPV9WkpDQD9BR09k5NjU2eDn6N7Y2Nzn/XR97tjNx8rS\n52ldV1BKSElOWmZpd+vi6OLb4ujq4N3i4Nzb52NTT1FXXWVcRTk+0a2jpK7I6t7abz4uKScmJyw9\n1LSusLi8urSzu9RLOjMzOEFb3djq07msp6m7UDk1NzczLi0uNUfTubK0ub6/vLzAzeJdTEQ/P0VK\nTExCNjjaqJycpshLW+5tOSYeHR4iLU24qKKkq62srLHHQCwoJyktNkffvrexrKmmpqzFPy0oKSsr\nKy00Scy2rq2utr/I0uJ4Xk5IQz47PkZPbtnsRUW7n5iaqksvOk1GLiAcHSEoN9Cso6Gmr7SwsLro\nOiwpKisxQei9sq+vraysrrjpOColJiwvLy86aLytqquutL7M2ftiUEA4Njg7PkdY2sW/xepaxKie\nn65NLzRHVj0sIyEkKjbps6qprbe9uba5xlQ1LSssNVDLu7e6u7i0tLjB6EU2Ly4yNjc6RWXNv7u5\nub3Iz87N0P5LQ0VGRUpUZtzEv8LEwr7A1kcxKys1Vcm9vL/CwL28vsppPzUxNT5R79fZ5H5pceXQ\nyszT3ube19nqaV1cY2pqY11mfeni5u3w7f5hWV/v2NPfbFpWU1RaaOXRzdbg3tHKy9pbRj9BS1RX\nVVdi5tHKx8bJztnyYFlbWFVTVV583c/IxsvQ1NnmZk9LTE5NTExOT1Vdae7Z09be6efd0MrJzNbn\nZllUT01MVHPc09Ta4enr497obVVMSk1SWWBu7dzSz87Ly87R19vsYlBJR0pNT1hj897Xz83Q1t7u\n+29dVVFTXGp8aV9n+ebg3vBxb/bq5Nze5erp6ePd2+Hs7PRqXVhXXGl3dWpiXl1eYWRoeuTd293f\n3tvY3OV+ZFtVUlNi6tXOz9n0c3F7/HxuYl1ZWF5u7+jv+fXr5uDm/W1rcf/x7n1pZmd57uLe5+35\ncG1sc/Pp4N7c4P1mX1pWUlFVWm3p29bZ4evq4d3f7XBjXVxfcuTW1Nx+YWBs/HhuYFpcYfvf3eb4\nbGv45N7j8mtfXmNw7eXue2545NnW1t3yaWNmZWRjX11hfeXf4ev6a15cXV9kcerd2tre5u/v7fZ5\nZl9l/OHa2+T9ZmJiYGRjZGJgbevb2dvmeG976+Xm+WtkZF9dX2Joc3F45tfOzM/ddmFiYl9eXFtd\nZHH57OPn8Hp0/uzn6ujw7u719vp6bGZfYW7v3tvc3eb0cWFfX15fYF9ne+re3eDq+3j57+30fXl4\n+O3s8PV2aWhlbP3x9f9waWZoeOnk5+17cfro4Nzh92VeYm/7emls/v367+vk5f1hWmN74NXY43No\ncHFuaWNfXFtjd+vc2Nzo7vDz7O1zY11eaHLz5Oz2cvHo9e7f33Rhav3ybGNvdV1h8Xb/5ODc2d7m\n7PhkW2dfXnNqbHFvfXHs3uLd7d7ceHtsXmRla3Bmduv1+Hno2djc+WBfY2/9aXNqanZs7/dr8/3t\n39/b7mhscOx7X2Fic9zV3P5v8mz9+GpeT1zs7v996OJ1eO14+PLx+l5p6+fo7dnca2ltc/llfflt\n8vH082p7el9rZG3++9ve5fZr8u7u5P9aWG/k6OXp/2tpaP5+bfp893jg0uPi6l5WXXrh2tfdXlBR\nU11l5d73cGnz4+bd7HRzb+nn3NPh/WFhXVhn9uHk4+psbfxoXF3/3OXk3m1XT1JcbtfS2Nff6vDx\n6PpnZltdbWx0efjxbmT06Obc5uhzYWNabGt74eHobX3k3tTU5WpbVFVp7+Hh7Pj78+/x3+Xydl5X\nWGFueX58cF9qb3zycu/+b/T24+fr6nRpaGR94t/s6+t6YWvl3dbP0938XT4yMzzctKefo6m7UzUq\nKCYmJiguPtGvpaGkrL9YOzU3O0FERktezr21tbvKYUc+PkNITU9XaujLxMfPaEpBQC4i16Kejo6U\nn2M0FxMWDxETGyRqn5GMjI+kPh0SEhQjMEK+u6qgmZWXmKhRJRsYGSIsPX7Mx8y6ury7zehKTE1Q\nzM3Mz3xEKiNJqaSQjpicuUUfFhoODRAQGjOqlo6KjJyzNhoZGB8hJk5Ts5yUkJSXqTciGRUYICo4\nzru4tay1xL5SPTY4NTLfzr+wucg2Iy6/spaOlpWnyi8bHw8NDw0SIcmcjoiIj5q/HRgREREUICXD\nmo+JiIuYrywXDw4SFCAvaKqim56fqN1FKyMhISw16bm0sOA416unlJGYmqzFLSIiERAODA8bRqmS\ni4uPmK8xJhwZFBQYGz6plY2Li5OcvywbFBEPFx0t2q+hpJ+kr7PuPiskIiEuQ1r5R7Ken4+Ol5Wp\nujMeIA4ODgoPGjGymY6Nj5Cdt98nHRMQERMo2J+Tjo2Pk5+0Mh0TDhETHi92r62ioqCepq9fMCQf\nIicuLSlvpKCQjJORnqjdKCsQDQwIDRUpxqCTkJOSl6Go9y0ZEBEQHTe2npiQkI+UnrwoGQ8PEhom\nMX3QrqWemp6lzTooISUmLSUhbamgj46UlJ+fvT45EQ0KBw0VL8GkmJiXlZaao8wqGBMVGCI25bCf\nlZCOkZ7FKhsWGBscHiIsS7OhnZ2frMNrPTEnIB0ZNaSekZGcnaieoLt9GwwKCw8bLFrNtKGalZOX\no8MzJiIeHxweJ1ummZCUmKG0yjQsHhkZGiErP2/CsKefnqKuzTYqIBokyKyfmJ2doaCfuVgiFxIP\nExgaI0Swn5uXm6OhrbtsNCYZGh4qSbmsopyamJ+sTykkHiYiISIlPM2rp6errq2uuEEnGhzJsaCb\nrqKnoJu9VxwTGhYcHRgdK7ebmJadq6eurLY9IhgbITFSdtG4opyYnKraNjQqLCUdHiI33bKrraak\npqy7TiQZKbvYqqvLn5+Xn39SGRsmGhsVFBwwp52lnqGgmZue0iwjHCcsLCUpO9Chnp2prK6/tU0v\nIx4hIi83Psyyp6Kgo63CTyonzlBDvz28qaScwcNKJjQiGxgUGydWrLCwpKObmZyoTkUxLjgtJiMu\nRL2ur7vGtLuvtPo+Ky4uLz00PWjHr6umqLW3zT4sPNgvRl8wwLalo7yp2zphJx8cFyEmN75et6uq\nnJ+irPHgSUhWOC8tPOrFvMxXacjAvNFPR0FXaU1KNT722LnAxcjEtLq92j8xKiwuM0ZQx7Gpnp+i\nqcVVNyspIR8iJi1EZc3GvbW3ra+/vr/Av8PeVUxPbU5cUDxicHu80tFaRlRRXlpTPVte4LvRxmDu\n62tjPkY3Ql5sva+usq+7wL/azEQ6Nyo1MzI5Lz1D+sHHw8rTw7m8ub7Jy87L3fBdTUxNTEpKVmV8\nx1x/+ljMft5XTkpO6VfxPz9Oa766t7m7vcTGXUVDQD5JWF77887NzMba915HRDs6OT5BS2/i2tu6\nurWvvbvS0ttaTUU+Q0pSc2xr+uvmzOXd1ztMPj9GW2Tiy9S7xLq+ztXY3V7dSE88NkxO4MnCzMHE\nur3a1D44NjY9NDw/RufJvsS8vsW3wL7c7lpLeExVQkVuT8zc32NH9lXM3dV0WctX111AVD7bcdvT\nX9/Vwr/Wvefp7VxGRvtT2OVe+0vSzdvHVEFJTHXoa2xUWO/wcHdUWfzMxcrT7fnsb1xDS2vnyMLJ\nx+nH2HHYO0k6P05DVUJHSc/Du7PNttTEvebETUI9LVBVSc182cHBsLjazEU/VT09Ni0+PF/I3sLQ\nx7zLvtlc4v3EytLYTG51y9NTVEFJXt1nVzxEQkPFZdPuXcTavbvMvsvL4UxKMS49yMy2scCwuqq1\nTkkoKCgpMCwyRNy6ra20v8W9y87bQD87PtvOvMnmzcm+zOdKPT5HUk1aREJKYc7t3ONt3ci/v8vP\n/lRfWEQwLNuusaKruq69p7w7MxoaHSEvLDBN3q2en5+ruLlq2kgqKiYzRWC4vbGsqamwuVk5LzAw\nLzIvNkDfxsS+ycnRxL/W121ad1/cTjUoQamom56wrLypty0pFRAVGigyO8i3pJWXm6fL5i81MiEj\nHy7fsJ+mqainpq/NNSYiJy02Pzc7Q8ywt7xiREtWw9f7dEjj3r++UC4trqedl6+uwrasMi0ZDhIW\nIj1TvLCpmJaaons7JSQvIigpLfKumZmepLTBytE2KB8jKzrH5tZRTNnVvF86MjFbyLi4yMPEvLze\nSyweP6uhlp+oqbyn6zAfDw8PGS9fvaqjm5ebnsQ6JhwiIi03R72uoJuborLXSTYtLiwsNEDt2czJ\nVkg8PDxGUl7cy7m1sbK8yvdPPjo5KiBUoqCXlJus31QmHhoTEhMcOLSilpaanavDNiggHB4mON+u\noaGfn6i230UtKCwuN07V0MrByVpFOCwzOlXY3ry8tq+2tsPi4UlIPDIvHyTAsZ+Plpyl8kImHSAT\nEh0YNLislpmXmbbENB4mHyc7MN1ryaKnnZyqsUYxLyg5OTRVQVDfUGI/PEU4+snHsbOzusO+7lxp\nS0I5NzMxOTAt67KqmJSXl6faLBsZExQcGSVF76SZlJSbot8sJRsbICQxR8avqJ6bnJykyTQlHh4j\nLTdG7HDoy8C6urfCz+5GSkVNet3Mz9DWWU4/MjU4NjBEr6ubj5SVnM0rGBIODhkdJ8+4p5iWlZeg\nvS0fFxMdIjO9rqWgnqCioau+TiodGx4hN8W3rrDAa9/qZtTfV0VMSlPFwL++0l9GPzo6S1jqwMRf\nVr+8rpufoqdHKx8aGBskKzvEuLihoqSfrMo3Kh8cKCw9ta6roaarq6++aEEsIiMjKU26r6iqvtpQ\nODlDQ0VMUEztvbqvrbzMRzMxNkJY3Mvs39w5OsLMsZugoaLoMCcdGRwhJzDNtbGdnqKfsWgyJBwc\nJC1Hraemnqiur73bRTkqJC0rNcvAsau0yFQ7MjVGXHLEz9K7v7i0xk01KSYsO+a8r6+3tLvXPyk6\nRU+goaSctEo5IBodHCQv5K2vn56ppbsuJB4aHzffrp6dop+qx145KyYtLC1mZta4s7e3tnlSSTw0\nQEA5anfKv7a9z9RCPUFLU8y/v7e+0OnnSD0xGx1EVp+MkpKZQB4XDxAZIDJnpZ+fk5uqry0YGRgc\nPa+jnJqhsbJlLi0oIixPz7KotuE+Oj1vtbvKVTApNEvSrq6wvctdPT44OkNe7cm7u7u8zk8+Likr\nJR5OnpyLiJqmNw8ODxIcLuS8qJWYmJS0Kx4QDhkt7qGXm52dsGU+JhobJjW+n5+lrt44L0tc8cNN\nMzM2OtS2ta6uueFOOiwvPEFfyfJuzM6/ur/TPzQvLTMtdZiYlY6uOikYGRwkJidosaqXmK23OB0b\nHiMmb7Crm5ifqW8pHh0lLfCnpaWks+1HMio1W8nJ2EUqMkrNqqavy0swLjM2PEzTwru2xNXU1s7Z\ncz4uLjREPzqik5yUmj4uHx0aFyIeKqidmZShvFgtKBsaHiLNo5iWpbU8JC4xMDk/vaehn7JNKyUv\nNF+0vu1YT2jOx9JFPExe319GPkHVtrC9ckI5X7/AyU86OknZ0kYm/pOYnJ1CLCQoMRYYHyetm5ia\nt87BQi4bFBkmrJqamamvtFQ6IBkdMLOem6a97+tINC8nLUS/r7vPUj9LZnrr5M7I4VxOR1foXk1L\nbMK4tL9XQj9LTzswIyqajpuft/XLLiwVDRotuKWvpKClnrArGBUdJjPMtKCVl567MiwqJyclQbGs\npKq+49jGPi0sLj5NTltvzbe6wsnCx0AzOz9QelBLza6ors1CMTRAOTYvKESWkKCmsqO0LBsMFR4u\nUzy2m5WbrcJqNCccGR0wtqqro56dorVJKyIlLC01262uuqqpr9suLC42MCoyScOtrrWvr79HMzY2\nNTQ5V76trbfC71lLOjU3LUqbpbelpZq4NiAXJxwaHCuzpKGooZyjzywlKS4mIC7tsKitqJ+erEw6\nMzEvKCYmVra4r7Osq7ftOjcvKy80RcK/yLmwrsVYSjY4My5B17u5zMO81Fw7LL6f7suto5zDZicr\nPRoaGidKyrexnZuouL3oPCwgIjJHSWC4paGjrLa1z080KiYmND5MZ9+8sq2yvdNJP0A6N0BFT9O7\nub++zFVFPkNFRlN7yL/K0ej+L2OjQU+rpp22t1NE/hwYHCMpLkXWpZujr6eoyD0uKS4tJipIsa6y\nsK2ipLZBQmA3KyoxOD5ARMOvtcfDu8hQPT5HVUZI38y/yvXq0+RAPUtP3sHNyrzFOnymXDTQxK24\nvO3mtjIhJCopJyswv6Sns6ylrr3sSEc6MCoyZ05c5r+uq7TPv751R01EQUU5PFHeXlfO19jd/ODi\n23JZ53zz6WL88mBER1pf/tfJzMG5vMLsWUhcWDxnz7u6wMjnbjsxKy40OUdqxsC9wru7x9pSY+Jm\nTklW6/Hv6tbK0Mzb28fN3Of2aldOQ0BKSURBTmNl0MvKwcXJytXvZGRWTlFe92xbVdvOz8XIwtBm\nTERJPT1CSW3d1tLEu77b6t/d12xt7mRRQ0BIUGRd/8/P2nzezNffVlD+731RdNPWytzeyNHmTE9Y\nREw/Rl1943nS0src331f2vLNyNvifV1VXF9WZdrV1d/rWGz9V0lNbPfPzev+69x7e19nbG1hWebX\n5OXtbOlrW1JY4l5o7+fZYOrv6tTl5dPNzt/z+93kYUFKSFJQSlhs6Mfqyt7Z6PrVaHRYTvVebmDr\n2MLSzNrt0VliSklbTHde1Nzed93883tOa09XeGXu3dvt02PZ5NXMY8puy89PZENYTD5IQvLeycvE\nw7/P/FlgcE9EU0ro/Hre/czd2+Rf3FxkUV1veOdfdN7r5dvtxuXOYmJxZmpZbOjye1J8T/5eflNi\n8+7ZbNZ1eM9i1Xnsb/PT+OBp1dfnT0xFU19e6+XLzs3OXtZPYEtKYlra3+ff09fg+v7lZ1BYWXXX\n6mXV69b7XVlc3PD+WP3u9PNj3tzOcu1vW+1J6k9q3l3z7eLh6/t51H/aXOrZettx3Ntuc1FOVkdP\nVvzU0s/M08/e915cU1ZiVm5rZOX3zOLR/mzgdeJcbflm2G7vZmH1b+p5autdXWZVcvFw2HfU+trs\n6/X58W7oeX10aeBd417/XG52Ydho2dzq3m7xVlZJV2Bu2Org1s7O3th54/pgZ2BzTmhf/N1V41/W\n83b4Wtz42u1+311xbWlq8mB7c3P19+Z82n3h8+3ifGXiWfBg8Hru7/f63O/pYF1jVn9ca+7j4tPf\n5HpX61xealncWc9s19ru3lfQZ+rvT+ZZz1bz+3nhZHpZYWtb6vXf6/Z43+rWevvZXe5mWGpjeOp5\n1fnQbuBt+vpm61pqYVvkU91j4ep9f/nvbOj+4Nje9FzlXPFace1c2Fjf6/ndUN1l3F1eXvLs9/H8\n6unX6Or17u5Z7VjgaeRXf/hm2mXoaWX4U+lZ21bd42bQWs9e3dZp0FLcamLlW3P+bV9ud/z3Z/Tg\n+uZqaOV13Vface/fcOh25G11d2vqW+NQ3WZ7aGbcXNx8397s3WDXaOZga+NS3k/tavvld+n/9F/f\nX9xpbNNOzlHc+FvUVspuynbt2lXlSVxHUGJN6V/L28zO1c7c+l5nT15WaGBm3fz23NzZ1+x2avd7\nT2NOW2R3Z2/e6Nji1uno2fTpbnFoX/Vj6WhxZO9+aGt039v09Gzac2xXX3Febmvy6OfU89Xp4nt+\n+2zhXP9f7Pl78GjlbW9qXupn6Wbpfnv1aXVk6fjq6fjv+OFte2l17XR9X/p24ezwcmfraHlpe9zg\n3XL+cm35YXbt1Njb3dnc1uV1aWhXVU5QUFhbW1xmcfbx4vLr63T6bPdz7mZ1feXb397j193kfuz3\nZVpQZGHm83M/UKawwr3Rtb3JQyg1OzI1MTBPzLvHy7nLy+0+PD5ebFPpzMW5uLrDy8v0Y09ISlxX\nXWh/9F99WVdoWlpac3vh0tbl79/6+XhsT0VJRVJUa1M6r52yrbS9rXlmJyA3KjQ2MlG+rrPGwMtV\nXDgzOkfS38zEwLa1wdffyL7sS0vmxOBPSlH8Vjw3Ok5uVE9Y1svN33LPyc/0UVt5cVJERmTk2ENW\noKKuqcO2w008HiotLEgwOt67ssO/0UxPPzQ4QW/HwL2/ure+zH3vysNVSfPNxGBYSFXxPjc5RV/z\nVkzjx8fc1tnWx9xwWmJbS0c+SGHf302xnqmrtMe6VDsoIi4sO0M1dLyzucnPTkhCNTpCXMq8vsW8\nu7/H2mBevsJX+NrBxHdNP2hLNTY2PmB8Tl3Mx87W4vzJxftfV156YUdBXtfL1li3oqewv83D/T0r\nJy4zOzs1SsS6w9jY7l9NPz9P5MvJzMm/wMHN52TVwszdXN/HzHNJSVJJOjo5R2JQXGHPztPP2s3H\nx+5YXmFcQT9FXNre1WC6oaawv8W4yUIsKTA0NDIuP8m9zujP1OtUPj5b4fHf2dHDvr/Fw8jTyr/U\n1tvw0utpR0c/O0A5PkJLT3XV89vQzdHGyOHfaV1ZTk5HWG7ey9HS47yprrvPzbrWSDMwPjY2NDVI\nZ9Pm3srN1FpKVmdcTlRn3MS+wsC9vMHKzfLcZVN6WVZSU01LT0dBQkxNW1pf2s7Gy8rO29dfTUxN\nberi4tvPz8rRU1G7sL3K7MG721Y3PD44Oy4xQGbX7dfIxMh/WF1TU11meNvGvby9wcTCyPdmVk92\nVFVOWV9JWUZLTUlWTe7v3tLa0tfZ7296bWF33OXu79vO1tXib0tKzcDM1tG9ucbYTEVHPT41MjpG\neHXc0NbKzdbvW1hed2hf5crAwMTMy8LL7FJOWVVZUk9g+udnXmJZVktNTlNr9dra0s3N0Oz0fH53\nZXbu/3xwal5SSkZSyL7Iw7y2usXMbmBcQj44Nj1EV1pn6fDr7mhWT1NjaXzw3MXDys7Vz9Lf9Pva\n3ufV1tDZ+mpZUklGSUtTWlhn+One5+r05trzbnNmaGZnXVRi8ejzZurEvsTBvr7Dx8jvX19RTj86\nOj1BP0VLTWD19njs3NTT3PDy397e3tvTzszLw8PM0NPZ63RiUFNTTUxHRkpNTE1aYf3o5ur54+38\ndmdw7OLt6djU09j7fNTEy9fJw8LFxMnX1P9KPjc0NDg6PUpVX9/U2NvW1t7g7Hrw6+Xc0s3Mys3O\nz9DZ3Nfa2OD3dGhZTElGRkpJSU5bbf9/Ymry6u7x5d3U1N/u4dnlc2pxb9vJx8jEvsLIz9nqaVdF\nPjs5Oz9GR01VXWpscPvk1dTW2trW19fW2djV2dPOzM3NzNTa6GlaVFBKRklKT1NOT1VdW11uce3a\n2djU0tPV3ejw6uPo39zd19j/W2btal95e+7azs/a1dp6XE9JR0hKSk5SV2Br+Pt3eXdxbXbp2M/N\nzczL0tjU2uTh29vf5fFxbWVZU0xGREdISlJifdzT1dbX19ja2dPR0tng3uP5bF9XT1JUWFxiePpu\nZGpvZFxfavjl2tbOycjIzNTZ3e16ZlVSVlJRTk5PTkpa51tm3Gz13v3Tz/bj6OTP2tzW29HS6Oh6\nXGNdUlRXVVxeXm9j7dx43Op8zu3pz2vi2lvx8l3obFtwWm33WfLyXub7bflm9H39/2bd9n3N6XLZ\nae7cVuJdTdpcXflgbOxt5Nxd1dZnzev+yXR63Vbx/FljVmFaVm9WbOhV0eRXyFVYx05wzVPd02Pf\n2mbc1F/R+l/RZfbmXlveWlHXSnPZTd7oUt/gVctaT8ZVas5MyM9Avtk8xWBFzUX50j7E9Eu+WGvF\nV+nPU9J6SshmV9ZX7HpG0n9Jy3RVzFhu003M8kjAZEa9U1nESdvUSsrrR7tcPLU8Tbsx2tA4yGxF\nvVFdvEfFyj261UK9a0u9U07ISHXaO9PYPcVTUb5E389Pz1ZZ0lJu31zWZv/XYMltZMx8/eBrZvVc\nV+bqRt3mWslPbslK0809vWlJvULi0TrOaFLLSt3NTNPgY9dwXtfpe/ll8NVcU8NZXdxZ4md1Vdxo\nWG5XzlxdzGh/43Dl1Wvg0lPa4UzZav5Q7cdVT9vdStD+W9hf1VhY3ljjfVvcZ17wXOXbcuTXcXzo\n5P9vzuJO29hUXPvoSszYRsfNdUTQzz7f8E5JzXw+2NVZ2c7vdc7n52jV/lPhSs5YSMZWYd1201LX\nzktvwUxlzu93SsvoQMRjTMVWSsvhW07nwznOxjrEc1xlW7Y8TrlLzlddyD3CzkPJ62NvbMVHTMRS\nXOLfVGbQbFPY1EPQ10XV4P5a69FT1W5DyNtUee3y9NZdS79vPs3TWld5zF1q01p+b+T8Xdxjcnhh\n103izEbk0PnjVd/aW+xSfd7XX0zRwUtMzOxieN7sXuveR9bNSfFt525VzGBT2/TibvncTtzWSevk\nVXhi69Z02ejpy1HY/E7TX13r/fFN+elf1fla195l3mJj3/lfSNPoSd3e5Orc2Fz41GDjb2fXT1zq\nXu/udO9fzu9LzvtTbnvsTOreWNXd/e310/xq0WpY6d9cUGbWUFXNbWrn3dxX485T6t1o+Ftc82/5\n5Hxr8N9tWNfuY2zl01Jn3Wt96/nu9+/tcvJ952dg3Vtj2/heZ9fmT3zlZmL473bY53Xm+tt/aG3b\n3lbz32v8XGhrc9VPXdF3amDm2lFn7n3lan3e2Nxy7NroZ2P73lxe9HBidO5rffZ+bt/fX/vpZ2ti\n6P9i7fn9b2T26PD+ZunlZ25l5ul4/mfX8Vvo6tv8ad526+xu5mROSv6/YEC+uMbY2bPTSndKVDwy\nOThASDxP1c3P1ry3yMnCvsdm3s1vUk9qcExNW1xtU1ft829VafdZUk9hb1pc79DU7s/Hys/5XNaw\n3juxtMPjWKzmOXQ6TjAnNSszPDFJ+cnB0LOrubq4uLti2dxNbEFOXUZrR1HZ7s7fwLzUz9ngVUND\nPT47OkhZXePLvL/Mv8fW9FlhSUJMQEpcTlxk6NS4tsyvr6+y27DRQ04vPCsnLycwOztX5r62vrSt\nubm+ycNr6VhGd0VPWE/dS+7L+9Dnzspb9FNDTjo7Pz9PSG/JzL29vbe+wdPq70pCPz9HPkFWVHfz\nxba8tbe0r7++1WtlNTQvLS4qLjc9UGrNurm0tLa0vcnQc+xLQk9GTEpU6l7Ivs3ExLvJathiST86\nPDc5PTxGZNXVz7u5vsLCwdpgXEpNSEZOSVdpy7zRtq+6s8e9y0dmNTQ1LC8rMDs9TebEu7i0r7S1\ntszM9FRJO0xDQVdTY1nfvszayMXE325uRktGOj5ETUlMzMjLxMS8x9XgWV9NREQ+TU1I9eznyrGz\n1bCruL7RvGA6Ri4tLiwtKjdHQ/i/ubq1ra64usPV0lhEP0lQPkRaaGpj9su+x9bSxs1zT0ZNRz8+\nPlNf9d3XwL7BztnPe1RJRUc/QElOX/La3uy8rbrAta6xwcLlTlo5LystLisuNT5u1ce9ta2wuLm9\nx9xVTkNHSkJKU3zee/rTvcHazMXR611HPkJGOzlGTmzbzcK+uLzHyNP2TkNCP0FCP0lbee3Z1da9\nsbW9u7Syv9JrT047LysqLi4vNUXew7+4s7CvtrvG1txOQz49RUJHT1jc3dbCw7q6v77O0m9EQzg6\nODc+Qld7z8PHvb3Eydf2T0xQR0BGSk9e/+Ld3dnKsrG8trextcjZP0M7LSsmKSwvO0LvwLeysK+v\nsrnB71dLPzw2Oz4/XPzY0Mu+ube6vL7G02hBOzo3NjY9QU3XzsnBv77FydhWVk5JSERMT1rq5NXV\n0Mja5L+1vb27vbzBwVw9PC8uKyoqLDxG3Me+tLKtsbO6zdhZTT87PTtATVvl0Ma/wby2ur3A0nBQ\nSDkyNDM2PUhT+s3Dvbm7wsjTdFVIQ0RGTEtQbN/UzcrIyN/aure+vMTCwMDMQTsxLjMuLiw2Q1nF\nwr++ubW3u87rUk5MRUY9RFzgycfGw8C+wcW/xtf9Vkg8OTQ0NzpBTXnRxL27u73AyuJjTEpHR0tK\nV2Dy4t3P19HZcOC+vby3vr3Av8hSQi8tLC0vLjU2T8q9t7q4u7i4wcxZSkRMWktOUGLXyMDFyM3Y\nz8PBzOdTQj8/PDc2OT5Nd9DFwr++vL7G1lhJSElLSk5PWH713t/f3t3W7NK+vLi2uLu/x9xdQzQt\nLCwuMzY6RXzKv7u6urq7vr/I4mBPTkxQUk5bed7Tz8/PxcDAwc37TT87OTk4Oj5EXtzHwr67vr/E\ny9hyWElGR0hLSEtRWm/vz8zQ0cW7ta+zu8TQ2mVLOy8rKiwvOD5KX9vAu7W0t7q/wszX/lRJQkZL\nU19u6t/d2dbOysTBxs7nWUU8Ojw9Pj9DUO7Iv728v8bKz+BlTklFRUlJUVtoffjk39XS0cK6trOy\ntr3J1GlIOi8sKSosMDpEXN7Gu7eysrO5vcPV7lpKQz5CRElVZ/rs1czBvLu5u8HZUkM4NjQ0Njg/\nSe/Kvre2uLy/yNt7UUY/PT5ARk9WZHHqz8zHw7m0tLC0ucLT+kk+NC0qKSsuNj5P7Mq9uba0tLe7\nv8vYblZKRENESE9ZbeHSzMi9u7u7wNNWQDgzMzI0Nz5KcMi9uLa2uL3C0PhWSEI+Pj5BSVJle+7Z\n0c/KvLS0sLK5v8zXW0Q4LSooKi0zPUhs0b+3s7Cys7i+yeBqS0E+PD0/Sll7287HwLy4uLm+y25F\nOzMxMDE1OkZZ0r+5tbS2u8DL7VRGQT08PUBGTmB169vOzMvBta+vr7S8w9P0RDgvKSkpLC82P07W\nv7aysrG1uLzC1lRGPTs9P0VLXufRwr6+vLi3ubvKWj41Ly4vMDI4QmLMurS0tbW6v8fdT0I+Pz8/\nRERJXevez8/t1biurq6zusHDyEs3LScmKCwsLztVw7OsrrGys7S7yFY7ODk7PD4/SenBuLa6wb22\nt7vMWT85OTIuLS40QvnPw7y3tLS3wdL8VktBQT5BTllke9nR187XXOC4s7i6urm/vM0+MywrKCgr\nKjNRxri0r6+urbHA/FBDPTs5NztJaNjJvbe4u8C+v9HUbU5BOzgyNjk+SVjn0r+8vL/JzvF9Yk1I\nRldq8eZw5dnP1OxvTEu+s8HCv7Kzu75DNzMwLSQnKjFK2r+6r6qrr7bA3m9NPDM0O0BVZu3MuLG3\nv8m+ymlXQkM+Qj04QUd869TQyrzCye9kaFFMPz9CTuzczcrJ0M/F1mVOUT9Pr7fOvLSruL/VODkv\nKyYiKi89YsS2r6upr7u/1k89NjMyPUZP68a5sq6zuszRy1A+Ozw7Oj8/THHa19G/w7/H1vhXTkJE\nQUJOWHPaxr6/wdDf4P5SRUo/Q7au6r2trrLf0jsyNSQnJyw1Pt7Arqusra+81P1BNi8uND5R+M+9\nr6yutru/214/OTc1ODc/UlrfzsHAvsDM0eNdR0FAQUNGVWTjzcK9x8rQ4tpZSEdBPeKpvtuqq6rH\n12suNSUgJCkxM0+8rKmpq6uyxF81MCwqKzZQf8C3raqmqrm960Y6Mi4tNzlBZNfLyL6+wMDT92pS\nR0A/RkxSUmDd1cnGycbP/PnmVUZOQTq9p83BqKqt3d9CLTEfHyUrNTjnr6alq6yruNs7LC4uKyo4\n376yrqunpK3K90o+LCotMkI/WNi9usK+xcTrTkdKSz4/RF/e3OvaysjFytLzY15hT0hTTTpzpLDP\nq6qpv2dMLDIlHSEpND5Ru6ihpa+ttNhBKikqLS0wZbirq6qopKm/UDc5LScqL0lS2MW6r7rB1tVi\nQDw6QkhLRWbNxcvby8rI1PDwY1VVUU1nelU47p+v2a6tqsNdOSg3Jx0hLD5L4rqqnqK4u73TPSon\nKDU8PG2zqKmsrayvyT0uLTAtKzRVwrq6ura1w11CQT48OTxN5tjeyb/Ezet69eh1T0hLfXdVb+XT\nWEiupL+6r7Gw9UYoKjIfHyc4Tsq4tKSfqcfZeT4vJyYtP17Yvqqlp6m1tsdONCgrLDQ8P9O4rbG9\nv8HPRDg4Oz1AREvSvr3K08nY6VJIWWVfTFX56Nbh389wT7GpxrW2ubpWTigrMSMnKj1fwrW0qaWs\nyeJMPDIsLC1H2Me7ramrrrjJd080KystOlfezLuvsLzH9EpGPTUzQmdgadS/uL7RaWLqYE5DQ132\n8GFh4dTG2Evura2/tru3v/pAJy8uKCkrPlO/ubetqa3Cf0c+NS8uL0TYwbyxrayttspPWUMzLi8+\nSPja0767vtdtWF9QPz5K7nFt3cy/ydtYW+L/XUlRcXdrVX/c3t9rSeKtvMa2v7TOzE8tPy4vLS47\nO9TNvLi1sby+4GZISEc6Pkp22M/KxL+6vtjc5OJeTl5PYl9NTkdTT0xRWuzi1czKzc3W6OzxWEZU\nY2BefNjPytHQ3uDkWk9QTlBPUXBW6M7kytHPzN/Mz/brXvnlVFhMR0xNTElTb27u1tDX5erv+fF8\nZWNu6t3SyMvFxsvTeHJQRkZFSk5Xa+/a2OTe1eJkV2VvbG9oeODd6el/8O56f2b98W94+tva6uPr\n9nxdWVRcY1pi89zWzsvMy83X7GxYTkpNS0tPWlxk6t7q7+nq5t7c9+nf7/L47mxdcu/s4drX0dHW\n3/H/W0xLSUxRU15q49XQz9PR2uh1XGJgW1tw6ePa19bW2eVqWllVTkxRWGb17+TZ09Td3trb3nVz\na19vW1teX3xo9+bu1tfZ1uTj/WtlUlJTVVddb/be2tjc2dn3a2lqbmZmaXPm7Obt6dvs6nBr92lt\nXWjy6tzt497j3n1lY19cW2FqaW1vb+3n6Pbw4uPl8Pf7fnFpaGZtZmx1/fTy4uzh4uvqb3FeXWZh\nbnfv5Nvb3d3c2/R7/nNvYGFiY3dqbGVndWx6c3ju73tz7Obt6+zu+fx2bXdtYWF49fPo4uPh3d7n\n5d7pfHNsamRfXF9rZ2lv/Ofp6uXp7H90cmtqbGVhaXXy6d/b3+Tt7ej6Y11kaXDz6vPv8Pp5bHZu\nd3NkZGtsb+/n7Ojm3d3p6fz99W5oYGFmYWpmePHs3tzY19zf6f5sZVpaXF1dZXn96e3s5OPpcnf4\ncWt5c3rv9//13uLs73n/7/dyaW/8/vx4c/bt6v1tb2pwenJsbnvw8nZsa397c/Tx7enn5OHe5e70\n9HxsZ2lqcfx3fXtua2VmYmVwdHP77eni4+Ti3uPx/HhxbGZkav3p9fXr5uljV2Td5VFO7MvVW1/P\nyXtOZs/ZTUVuzu1NVM/D01hT3c9vSEzcxtdOR2/N4U1JecfLelRe3tdrTlnaztb4Vk1d1NNkXNXH\nze5WTmTZ+UxU2M3nUVXh1F1J8sreS07f3FBF97/A3Vdb+ehRRO3AxXdSWmJ27nXhzttaWFhPXurt\n6MzRWVB6/mHu1tnX31xPZOH+etfYa1tlXlRr3Oxt4txbV93bWF/R1lpf1eBWaNHYZerN9UtY3mFG\nX9DyTmbM0FlZ0tNcW9XO73Hhc05dz9FjX9x4SEzr33Df1GZR/NxrZdzcZ3Hd8V1v6mtm499u+d5r\nUnLV5HHc22JSbudnbeZsUV3lbFjly9tm6NLlZvjrYWTk5Vxb4+hYXd3afvrb8Vlj5O5me+5qaerm\nZGTk6V9n4N5//uf3anb19PXq/mJs7fBraPvq+3d9fv5+cGVs9uzv7enyff3u9m986vFhYvvrdW/m\n4v375vRpbPhpXW3t+XH98/pzeXt29ef6ZnLk6Wtv5d71b3X173p2+Pj28H9tbPr+bHHy92386vF1\ncffvfXH08n/16PFy/fj6d3z3e2tqcm1mbnVwc3ry7ejk5t/j+3L67Xtz8PJtZnT9bmRt+35+6+l2\na/z6bG7i2uZ8b29vf/H0fPHlbVxs5utu//H3f/v4bm3792hm/fJuavHtePXp+3Pu3u1v+up1Y21/\n+/r2e2ht+Pxx8uLm8fbtfnv9cWx56+x5fvttZG5/cnrv6/1+8Phz/+bqffru/XJ993Fw6+b3bHT4\ncG/98v756/NtZmtqX2Z++P9+7fB+6+X8e+be8Gt47vduf+v0b3Ftc318+e/l5vlxbG9pX2BodP3x\n7err8fN8c2x58PV4d/Hq5+vw6+fq93b/fnh6a25vbmtsbnV7efz58/1ydnjx6+3p4OL3bW50ff54\ndG96/nz++PPx+nZ99vv3/HR8fnl4+/r38vl0bnv1+Prv7f15em5oaXV8+vLr6+3l4uTxfft3bGpx\ne/X7eHX5+HRuaW9xbWhoevz89e3u8+rm6efs7+3x+nl4b2xqbGlla3Z3bnT+/vjs7PX++/D4+e3m\n5+np7vfz9P//dWhmZWVqb/bu8OzufHz0+H5/9fl7/3xuaGz79X59+/p7fP319vfz7vX5+fLw+Xx1\ncPzm7X189vN9e/1yefd5a2Zqa2dobW949PH8eP/37ens7Onp7/Tw9Pj49Pz6/nVxdnpydG94+v16\ncHFrZWdv+Onj5N/g7Pb/cm5wevr8+3h4/v358/5vdHFoaHP++frx7fn+9Ofk7vj9/3d0b3F0cXx1\nb/3w8fn07uzw9+7q7v5wbnJ8em9mbGxtfHp5/Pf7ff/7eXd3b3707Onq6u3p6/J7e392cXB++fr2\n6ej2cnBta25xcv7x8Pv9/nhuaWtw+O/09PT7fvbv7vb++/r6/n18/n93bmx1/O7u7/b6+nx2fPb5\n9+7u/3v/9u/1+ff+em9sampufvx8cnv9+/Dt8np6fndzdHj/8+7u7Ov4/f9zcG92/Pz97u338vX7\nf3/4ff7v7vpxb3Jvb21ram16+PXx+fz8d3Vy/+/v7err8fXv7fN3aWVpdP748/n69PZ7dnJxe3t+\n+O/s7vT9/PT2+vp9en/6+fr0/Xh1cnRzb3J9/3z89e/o6vJ+fPz4/nNycHFvbXJ4fvn5fP328fH2\n9O/29f17/v7+/vr9/Pv5+nx4/v5+fnp+/PrzfG95e3Z4dH35/H55bmx0+fLz7/Hz8PD2fHpwaGt1\n9vrx5eLk7PH8eXt6dW1rb3d3fv559ft1eHt7fvp7ffTu8vj59vf9/3p9+PX07fX79/j8dGplaHT/\nf3h8dXn38u7q6Ojr7vN7d3t3fvx0evj39X92bW5ubXR79vx5eXd3c3Z5fvj29/747enw+Pfv7PL+\n+vb+cm5zfH/7/frx+/93amhv/Pb+e/58eXz98vDy8fLv+H17eHJybnHz7uzz+fh+enZ9+/358+/x\n+v39/fjx+nNwdnx4dv//dGxtbXJ8/Hz88uzq7O3s7fH1eXl0dm9qbWtscn337u7s6Ojo6u/+fP3+\nem5sbm9xe/j4fXt4dn72+fj7fH12dnRvcv/6+/n9+fb08/x4ef/38O3v7ezr8vf2fH14bmlkZnD9\n8e7u9nt4e/vy7O7z+3Bsb25vfvLw+vr4+PP+//x2dXf+/3Nwb3b57Ors7e/3+PD0/Xlvam12+O7v\n8/P1fHh2dnJtbnf98u729fv99/X1+nNtamVsd3T+7efq9Pjk4Xx46uX0d/RuZGFaXWBiYGV//Pn2\n7dfL0OP7e/fz6n9hWVRdePXr7/Tg29vj9evrfGxdWlpcZGlyc2lx+fnt29nl8X3w3ebv72pdW2zm\n6vJmX+HX2+RgXHfW21tTVllzcOzf8nhhd9LV0uJPV+rb12xRVVJq19ra/Vpfb9jM1fJNUOtnfl1m\n12lMTem/yv5sa+rpX+bR3VRN299iXU5Y38fOV01cfM7F1GhNSlbYzWRSVWjn+ePQ2d/nd31tYV11\n6G9sV0tc487GzGpQWeHP0tTzVVNWTklpzc1URW7Qztvr7vLa1v9VVG1eT2Pl1v5X3cXF2Gxt5tlu\nSUdZ6vRdXXvt3+vm32pmYmb0b25v3s33WFJc3s7S91lVadTI21BP/tDW8FhGT+rO1G1fad/Z5+Pt\n7fBsaGNmaV5ibuvX5lhWaM/I2VVAR+LBxf9LQ0rSvL7dRj5N1L3B7kY+R+/JyN5JP1DOv8fuTEpe\n0cbP81pj5t3f9m1YUFlaWVhk7OPofOvW09Pia15gant2YFpe7ODl6nRq+t3W0+RdU1vu1+FcUVZt\n5dzkb2Ju49TP2XJYVv7a3ndZUlVfdOTY3uxqc9fS319OUl145+p2X2H53c3M3Gpi6tnc+VlQVV7/\n/WJeY37i19bZ5vHy8uju+m9gXVpp7vhqXmL55OHqemhjbXj+fH18/XNlae3d5erz9vV9+/P6b19c\nXX7j6H5reeLdXjw8yqumtz8+uqWqXSYjNGBTMSYpOtSzr7rfYcKrqsE5LDrdy1I4OlLOwsHByuF1\n4M7gRzc3Q0M2R6+gorLOrZydvCwiLT8rGxcdLUVYdMKwraqjn6e+TU3UXS4kKDz7X0vhuLC1vr69\n0Ew9Pz41LzRKaU1CWMW8uKeen6eyrqKnWiQgKzMiFhUfQVhARserpq2wq6y3yt3cYDkwP+9YPkbG\nsbXU+LyzzT0yOD84LTBJfGFsxra2yLuinqzOx6qnyywoSHArHB4vSDMlLM2w0T1Ysam5V3O3r8ZP\n5bavv1paxr3aQzxCSUY9Oz9HRkdc08LH0c7CvsXP087LzOph8tnZdlNLTl52W0lJT1pUSD49RlJg\nYmXv08nEwsHCydPheFxWUk5SXGR159jQztDS0dPW3PJcSEJKZWVOWt7m0sG9wM7Mxcra9llPV0s9\nOTs/UWlNP0FszNBhUs66vN1X4snNX1nv2W5FSfPObkxkxrrKXmDOyu9VVFlNPzI+sLs6xq2prMXN\ntqxWLz87LysgIjdELirYtcXCybGkq728sbjVUDY/X0s2PO3g5VPPwsx8Ws3pSjw/SEZIT1ro0tba\n4vrSp7RIpqm0rO+3ung3JlMtHCYiKS4qMlK2vtauqquuuK6uw9bn5vJDSOxRWmBcY0vq6nBkQVRZ\nPj0/SlRbZnjJxNTNyeRUsa09rqp0pr/Gr1rfOj4tHi0fHiopOEtZ9renraymq6ytyc+8Tj0/P0s/\nSlBZ80/MzEv/3/JHPk5PTkNL52xl3+DNzNdvzKr4VaHSxaxfr85NZUVFICw3IistND9O6cuvuryp\nrMC9r91k3PV5QU9mzvE/zs1UXPTnW1JWTUxCR1lEQ1j64mfhyd3T9VutvTmotWaqwbTF5cxAdyku\nPyQpLzsyOH1bwcbJtLbCxq7HTrzH0+fUycrNZMnvTd/hRjpYUT44OUc9OERp9WHTwcrCvcjZ3K++\nPqm55qzHtsjG0T5vLDA1JCQtNio2Vk3aysG5sbrArsDgsr/Oz7nJY8Tr1WZFYmFHOkhFNTlKPDxU\nYfJk7MnPy8nHwmZOvbM8xaZbt6q0xNu0TVI5KTIqJiU5Linz7Er5sbbPr7u7tN3Hu8Bx0bVn273q\nV1XNUUNNO0pCOT5RRDxu9kv6zNLiyMve3m1ZXrNsRqO5yq2srVyzwDlNKy0pJScnOSov3txW2624\nvLG4vL272Lu+Y8HE2f7Py13t6k9QSzw+RTs6Qj8+SktK/d7dxMjW28/JXO6wvX+vq6+2uq7HyGgw\nOSslJCcuKzM9SdLZzL+7usG9yNbJxMnSwrzCvcHFv8nU9/dTPUI8OTw5OTc7Pz5KVGzLysnBwMHJ\n0szvYMS5u7i3sq+1t85vRjY2KyYoKiwwPEJKZN7MyMG/v7/Gv8XDvb+8wb6+wsTR12NcS0JEPDs7\nPT07QkZEWF5t1NDQzMTO1srN4eHX/OrJv8bDubm+wcXoaFs/OzcxMTMzMzlEQkzf29bBvr+9vcDD\nv8nRy9zi1dTd5NbfcfRdTlhaS0ZIQT9APz9ITlF839bRycjFws7Ryby8xry2v8O/y95iTT02Ni4v\nMjE4PUBLX+DZysHIw8HHz8bBzM3NytPg29XM2dvU72lgcFBESUE+PT5APkdMWX3r1NDExMjByM3I\nur3Iu7zFy83OdmhLPjsyMTM2OTlHTFHt69bSzcfWzdHXzMvHycfS2M/Ny8/N1+Xpa11XVVBJRkE+\nPT5BRUpXaG3az83FxMPJ1dvHvcfFvMLLysnV2OxPSD43NTk5Nz1BRElVam7g3NjVz87OxL/Bw8bL\nzsrM0c3S3OLnZ1VcWk1BPz09PTxGS05catvTycTIxsrO29vAv8nCv8bMxMnS0P1QRz03Njk2Nz0+\nP0hXXu7Q1M3IysrHxMjDydfPz9LRysrT19z5aWJZVktCQ0A9PURMSlFneN7d1s3N0dXcZWTHv8y/\nur/Fv73Fw9BmUz01NDY0Mjo+PUdPWm7g2dPN1M7Gx8jDyM/LzNDFvsHJx9D7fVtRWU9GQT45Oj4/\nRU1XWGH19NjT08rK2HTOur29t7m9v8PJzNDzUEE3MzY2Njo9PkBJTVR07t7Ozs/Ly8rHwsbNzMnH\nxMfKzNLh73tkXlpORT47Ojw+PkZMTl935M7IycbIzdbtz7q9xb+/y9XOzcnI1vhSPTY4OTU3PT0+\nQ0dKXuzZyszPzcrKzMjJx8vMyse+vr68v81lSkNCQDw7NzY4Oz9JVmZ56uPW0NfZ1NpdXLusqKWn\nqLLQczw3LigqJCcuPdPGtrbF3UE8PD1FTm7+2MS6sa2sr7bNYU5GTFvx4e5kVFFQSkI+OTc5P1N3\n0MjLzM/LxsjTXUtEPkI+YK2koJ+prtc/PSorIx8mJ0PHsqmuttRKOzIyMTVA87+vqqyuu9B8ZeVq\nW1BL6cq/uLzUSTYwLzE1OD9NaM7Cvr7L3vTv4N7gY1BQTFFWRlasoaCdrLpfMDsrLCYeKixPuK+t\nt8haQzk0MDdAW7Ouq629wmjt3F/5R2rKw7S5wPVFPDY3MjAvNT5nxcC9z9nS0L/HxM/l02NhSjs5\nNTw51Z+enJ62vEs1MiEgHB85XbOqs7m+ztRHMCgmOm+wpq6xxc/E0udFO0R8wrK1v9lLUE9OPS8u\nLTpfz8bU3ejOvb7C1vtt8tZ3SDo1OEJezuBMrJmbm6lOPSkqKB4fHi3Ot6mrv76+z2owJSIvyLGm\nqbu+v8HYRDMyRryztrjV3cvY+z8wLC47S17iaP7Dw8bP6/nw0NtdXVlaWkc8QvfKxea8nJ6ipkY/\nLCUtHyQmL8C3rqy/y711Ry0kKTW5rq2ptbe70UsvLjtZxLq+trq8v21HNzQ3Njo/RPLEyMDQ72p8\nz/p8W1fj2NtYS0FDWunG5UmonKOfxD5BKTQkHiYn77e9srXGs7tWMCQsMd+zva+xsbHGVDMwPXjH\nw8bHuLa52Dw3NkdANDY5Wcy/yODu+M3Lyu5T5tvN2FA/OTtIZdXGaMqcnaWrQks8MC8dHyY4uL3K\nuby5r8VCKik5QcvEybazrrn0SD1IV17a7OC+r7DLTUNOSD4tKDVJwbzQzNTByNjUVVBb9HFaV0Q/\nPEr5zLu2vLujo6y5PD05MjMmKjFBxv1azsW7wNhMOUVjWFNWd8S8vsz5zsfCwtjd2tveU1VXT35S\nVFZJSkZVX1JSWFNv29fN1c3Hxs5XQjw2O0vuwLi4vqifr7lpQ2Q7MigmLjhNXkd/uL3Dyth0XV5H\nP0jy2s/S1cO/vcHIxcfVb11yak4/RltiXEhDRFXmeU5KZXvX1d7S0snDzPdMREI8SWruyLy/v6Wp\nwsHlxdU/MScvNTI1Mzruvr/Oybm9yeNkVVdrTkdK6M7MxsK4t7y8wt1bSkE4Ozw9PztEasrO23Lv\ny8/Ua2f93M7Q+WReW2ZbbP/ayL27xu7Nw/daRFRtTE5HWGRVUU5UU1tWV1516efc2dLR1NPa3epx\n79XO2+Pd4OltaWdhZWlbXF9hbl9kV1T76+d0XPTVzM51WlNTYVVRX+fMycjJ097lbF1ZVl5YU1hd\nYGduft/Sx8nPztDQ2O9cTVBZTk9ZVVZbaXl7X1hdYmp42dnX0tDT3dXa7PtoZGj16PTp6uPf4+1e\nWE9LTUlLWHPWzcnN3NzZ5unxcPn4fXtoal9YXVtk4+Ln73fr9/l6aujb3dXY4eTt5HhaWFNTTUpN\nVWj74dvZ19rxaGNiY2Nw/drNz8zNys3Z3WRVT01WWGNzcOr47edzZWRoevX/a19famhfY2Lv5+rZ\n1tHY4upxZ11aYWFgb+/azc3S3e/6Z1lZWmR84tzl3N7raFtYT05PWnbu5NzSz9jnbFlTUltm9d7V\nzc3S2eJ1bWZaXVhYWlpcXnT1eXn57efk4dvW2tre6XllZ2Jjce7e2NjZ5Xp0XU9NTlFabO/o4Nre\n5vJjWFlXZvXs3trQ0NPbfmdcXVxbaeja0tPZ3OnzalpYX2JcXF991s7kYFlWWnDteHfr6vVxb/77\n8HhhYWPo3NO+zmrPV1BmRGJ0Zel33dHb2+9f82hcZ1RabOvY29Xfbv1dWmFYZPbi6fLf4/H6ZF1n\naGljbvTj1tzm4ujvcWtuY3nj4+Hx+f5nY1dWX2vn4uTX29ze/G9fX2tu/nd+6eXk8Hd4WFhfXGFg\nc+Ha3ODh9XN1927t53nW2unc6/TzbGtjWV5XWf1rcHxocnh5d1302+vY3One2+B/bm1mc/BlYOrp\n7Oh0dmtxXVtyXvDd/uPlfvhr/vpr315g9v7j5vfufm7dc1voYvjp9dxm2upvz07f703vUt5sX9ld\n5edc8Wr97VbcdFfNZW7bdNZs9c5Y3dtX03Fb32Vt7mT8bV3+/mnhZ2XWY3veWv5taed1Xt99a9x1\n2/pv32vg4fpu3l5e3llv4lnw7mzedOfdT8tiS8tSdNZU1/NXzEpewz7Yzj/CX1rNRszsTdjfb+fy\n4N7z1l/qYPhsSc71Ss9wXslYWtNLy21LwUxozkboz1Hc31rKVlG/Qs3KO75dRsBCeMg8wGVOv0be\nyUbp3UnMZUzFYufx6N9t72R5VtdV9PVf1VLNWVnIQ+nBPuTAQsp3acI6yck2um46u0ZVvkXk0ErS\n6k/WZnzia2LRWWbKSX6+R0y4P/++PcDsVMc8z9Q6zNg+xGtNzGnuXvfPS87eS8ZT2X55z0HIbk/P\nUuRrbPBOymhf2HvcSct+VtBS0nRlzkntxkdbvj7N6VPNU95pT9RmT+fhUcpaW8JT639fykjd007Q\naVzcVtxZd2th4GH78e3mbOjp3F/d3GPScXT44lTX30HIbELGRP7PSvfneW7eTsNySbtF+Lw5xNRO\n1FbffWbdTOlwf+dRYsNlS9hcz15Vy0zW2kzVWtvgU+rWf1bW62J93Wtn1d9ySc/TOMLmOr1ZTcZN\n5NZKzlzd1krP0FfXX3Dx7nRBx9ZB0NhM3s1I02f/zkPTykPly0HLYk29QWnAQuTGP9fWVdNOVsJP\nfNhNwFlP29hQ6cw8zMtF8d3RXtrWT2fGQkzIXEzRdljFe/Lca8RRSbtDU79AX8RAaddO0W5JyFp6\nyUfcykvZ2kq+VVnBS835SMZqUMtCYcU8yn5Hv0Vqwj7Q1D6+WFHFTtrJOr/TOLRCTbo5w+o9uFk/\nu05PxEbj00vPelHJUv/MTdrsTNBqWddP1OpNx1puw0PgykLIT3PsSsRNWsRRVb1JZcNL1PRazT7F\nXUPCckng4+dVyFtZyf5iaM1yblbeblzIS1XHXutY7utyaF5b1exZ3O5qz1Vv43LQSs3SPrxYScRW\n6mdfzFJX2lBqzUbxz0TKc2jJSsvXU8926HBf5eBg/t9K3N9X01bj81DYVnHRWlrqzVF57V/PWt7e\nT8/cTdlq49E6zck6xdg8vnLj5j+yTDqzP0K9TV/vXcBFX7tB8MREz95e11PPU1bcWVr+3kze1Fvc\n2uLnX8vvScv2RfjcW176425hzlZbxF1R1Fnx5WlwacxhTNLyUM7hRtrEV0zN0kvd31ZtynFL3OBb\nXM1OW75PXvrP7kXN7UXO6kvQ2PtqdMxVSb9FRr1JU97dzkTJxUPJxUXqzX5NZMtRSsZtP8zrTlzn\ny0Vvw01vyllv32faXu3VUNXKSMvRR81Y/95FzWRCz2NQ4F3XfVnHaHbMcVrl2mpv8HVg9OdbbM9f\nXOtvX3b+XH3e71vi6mzQaW7V+vRi79tse9tT/dBKZNvu723tbGbU9k/p1V5id/Xx8vpq489waule\n6ORcW1rW9krg8WPydvZ189trXtXl/f//4vF27+dv+/fucmnp6ldp3VRfc11tbOPyftjd89/d4eNy\n7/Zy4350f2LebWZhXmRUXV9cYWh0ZevdbHzd2+9w4HH21nhp793tYOzmZ//pX13m1OJOTc20yuy+\nw7y9elVJT0cuLzQxOzs+Wsq6vcO3s7e82WpXXFQ+OVn78d3cw7+8zHbp22BDPz9DSEZAVtnR29rK\nwr3G5OXZ41xIR0FLXkYv/5292qTHpqVZaiU9UBkkIh1LOknFvZ+kraa0s7JMOS0yPis2Q0u4uLCr\nram3y+M8PDApKyoyPkN+07yxtLe8u77nW0pBQz9EPz1NVWnaZFKqnLSvqreiwjoyHzAiGyUbLcrb\ntK+lnaWmuG/NPS0qIyw0PHZ+r6imn6ittdVnLyomJCwpKz1Zwr24sLawuMzPXV5cREpBSGdOT0xN\n2tfrUbmeqq+qv626Ni8eIyIcJx8rvrWopqKgpqa+PzMpKysmKDTTtrSpoaanqLHUPi8mKSolKzdJ\nW8ayuLGsuMLP22hHRz1EZEdEWVliWlFt2M7P6dSooKutvMWzWywhHiEeJiwr3K6noKGjq7PBOSwp\nICcvMVDFrKSjoKittF85LCEiKzRJQu7EtarJx85t0kpKNkDdWNff/cvL1Pdlc1dNVVzt2tvZ1qui\nrrPS58RALCEgIyQ2SVO+rqegpbPYUTotMColNFy+r6uoqKWu2VY5Ki4yMztGzr61vdrMclBGPzo8\nUmHhxsC+t8TY0WJHPUA9P1dY7Mm/vbe/Vuuuq8RfP1PLWTosKCk0eWND5bqsqK69Rzo/Pj8vL0jN\ntbCwsrO1wepKNC8zP+ja+/rNwthjRDpGZHzkbNm/wLzM3flDTUg+Pj1f0cG8zNLIwMjkRS02sKe3\n13/Ivr/gLR8fLVTpdNrDsKaltjgrLjg/PT5IyauiprLD2kw6NTEsKjbSrqy1xcvLzVc1Ly9M3ePk\nctrEucD8S1JdXWVWTU/Yv7zH+FdLTE5FNi/JoaGnrLjB80cuHBkdJ0TIsKqtpaCoxy4kIiY5Tu7J\nt6ajqbJ2NSwtNDs8Reu4q6mvxlA+ODUyLzVKzbiztbq/w9NjRTo3PEhUZ+jMwb7B6UY8QUdHSDzg\nopuep7xhOjItHhodKmyvpaKpsK+3XisfHiE1wa6qqqmorLZnLiUkKz3Tvbu2tK+utd82LC0yP0pJ\nS+G4srG4zWJJSEg7Nzk+Vc69ury9yV9PST46P1hZTbCbnqWr5TIsMSoeHyc0xaWfqbjE5VI+LCEg\nLsaro6Oyv8XK7DcrJypMtamstsLTx7/dOy4rLT5d2t7cw7y0tsxOODY6QU9XddXDuri5v99GOj0/\nP0NOZNe+rp+jrq1aLy0lJyEkNEK5p6Wnrb1iPS0oIyg5YLaopamvt+hEODQyNU7QtK60uN9UXUpD\nOzg2OVrPx8TG1N7O4VlBPEVY0MnN2OXOyMfR+FRERk9cUVjr+d61p62usEs5LisuKDM3O8myq6uy\nzlc+NjQrLz1wsqqmrLnJTD47Nzc+T8iyr6/HUz8/7FpVQjI4R9nZ0s3Zyb2610xBOD5O6Ode1ca7\ntLnPRzo2NztDSUx+tZ+fpKXjNi4nKiEmLjPEqqWlrMJaPC8tJigzVLCloKWyv14/OC8sMDzzsKqt\nucvtOjtUTU9HQjxC3eLczs3Jwb3oRzw6P1jIz9HIzsnEwfo6ODc6Te3c0b6yqaeor1w5LCgtLTQ2\nPdm9r6yvyWFFNTUxNDhQu6+qq7XPS0E7OjxASuW1r7O8x2Y4QGNgXU0+NEfh79PUz9PEv25NPzpC\nbdDu5tvSwr3DZUtDRFpy3uzkyruvq6u+XTorLS0yNTZIa76xr7fK7Eg/PDUzOFnDsKutt89qRz09\nOzg74ry2rLLMTz9P4cxuPDM2S2nZ3PjJv7m+40IyMz903ubf9Mi3t8JcPTU9ctvuaeS5paSlsT00\nKSovKS8tPsezqq645WleQz0xLjRduauprbjcaFNDPDM1Om21r7TF1vJ711tGOTg+R+v7ZnHgxry3\nx1s+OT5BUlVP7869trfCf0Y8PkVNUlxww6ejpqXBRTIpKiMoKy5xt6qprLp9X0A2LiotOtSup6is\nutttSzwwLjRAxK+wt7vRbc7iTjszNDZc4/jf3c7At7/nTT07QVplW1zhxrixutlHODg8TVpX+c23\nqqanr/I/LisrKiwsOu64qqqvxepSPjovKy5AyK6oqq+9zO1KPDIuNF++s7C3wl910HdWOjEuOml9\n0tzZyru0xvRDODtLemFjaNm/tbLEXz03Oj5QTlTlsqSnoq5hQS0sJicqKDzVsamoq7/QXTovKygs\nQMWsqKeruMdxRTQuLTBHv6+ztru/ydhTNC8vND9c6X3MwL26u81UTkpCQUtPT+vNxL26v95cRDk3\nQE5Y7cyupqShtFs2KSklKCksSMerqKivyttKOzAqKS5NvKqnqK67yXFCMCwrMFW8srWytb3E3kEw\nLS0wQuXIv7y9vr3D90s/Oj5JWF9n2M3AubrKX0hAPkFITWXtyq6np6i8YTktLScpKS5Nyq6trrXJ\n0F1GNS0sMk7Crq2tr7W80k01LSsxTcu9ube1t8RjSUI5Njc8RHjGxb++v8fV7EhAP0FOXXb93Mm/\nwdJkTUZGRUZf3cnLya2nqa7OPi4tLyssLjFMxK6ts7rN2N9UOi4uNU/GuLW5uLe6wOE/MDE+VNPD\nxc3NxbzB7jwvLzlHWWRs0762t8X+RUFNXWFNSE34wLq/zv9SUGRkW1dWQ1Wqp6yu3Fs5QEgnKScs\nSc2uuL24urG72TcpKzRIbM/NxLKrq7XKRzQ6QkE+PUdpvq60vMTdcUhANC41PnPRwry/vsXVXkZE\nQEJIVnnUwb69yuNqU15ycEQ70rKpqrbKRU5dPS8lJSk52sjFx76vrK7EPzIxPExVUE7nvK+ttc1y\nZ+9sSTozOFLc0c3BvcPL8Uw+Oz8/SmDfzcW/ytPe/1lKRUBKfNDKy87f39LO3Ew6WbeurbjL3ejY\nTjIoJSs3RV977sSuqK2+az49RUc9NzxXxrWxtLzFysnOVz85NzpJZe/ZzcnIydZfSkNCRVBa9NHK\nxsnN23JfUkdGSlbrzcnJy87W3GA1Lv2+ta68sr63uFxGJSYnKzgzTUTMrqint7zmd2VKQjAyOVPL\nwrzAwby5uMXtVERCQUpNRUpNavb842n5bu3d49rq3ePl4u72XF1XT1Nc3dnZzMzN2eJwTj0uQs7B\nrr68ub+xyMU+LDErODM7Ojnez7S2vMTMvca9y1RGP05PVlNEVePFvL/Dz9bO29pwTklAQD9FSUZP\nWF7nyb/Ax8jKzs3qXEc/R05nYGjv4cvExtX3ZU48Q+Z7w8jdwc28x8m+TE8/Pko9Sjo8Rkft7eN1\n3srFvb7C3PV0aOtpY1Vc+Hvj9Xz079XP0+hwa1VWVlBPS09UZvbq2M/Kzc/U29/oc1xSWFlc/mBe\nWlx5cNzq/Oj7fGjf7+nc28zb2NfTytXcfl5aU05OTkhKSE9VT15YYv532drPx8jAxs7P29jf/e9f\nX1tQVk9UVFR0fe/t8fNvbXJobHRtfWZw79zN0dfe4t3reGxcVVpaZ2NeZmvl3+r/7err6Ofh/u/9\n/NjX1Nrc2N/kalhQSkdAQURFTVp53dnMy8nExsLM0dnm1eTkblVWTVRUWF9danHt/292bvlmWldb\nbXLp4+Pe39XZ3t3l4ubr7GtfXWv8/fNycfb4bl1ZWFlea+fd19POyMbIztz/XFdOTE1ISUdMWFdn\nZ2zv8djc3dPTzM3Nz9rc4ep7Z11ZW2FycndoXV5bXV5iZWNqb2735efm3tjT0M7V3O55eWVoXFVY\nWWZyfnBpc3X/fn3z5t7c29rV3Onrend0cmZeY15gZF5kYWJeVltcX2v/6ePZ0s/Nz9DY2dje5n9u\nXlpeYGpiYV9faVtaVVRaWm587d7b0dfTz9bT3OPvanBtbGZYWFdXWFVZWmzl2c7NzM/U2d7ubmBY\nXWJmb214/fLt/nVhV1ZVV1hdYWdw/Ove2djU0dDR1NTY2uHn6/prW1hTU1dYWlZYXmZvcnf/9PPx\n5eDf3NfT19re5/B0d25jXFRVW2Vsbv/349rZ2+bu8/Lt6ezv7O3s/HFoXF1bXF1dYmNkam50cWdu\ncP3v6uLj3djSz8/O1N7pemxmYFpVVlteYGNeXV9mcnNzd/bl3dve4+fm5N7d4+rt+XFrb2lmbWZm\naW5zaXJ2e+7o4uTj39/k6O55Z2dnYWJhYWBla29+cHd/+vR6ff788e3d08/Q19nc4up9ZFhUVllY\nWFlXXWlue3R+9vLp6+vq5tza2tvd3uDl7v1xdG9pa2tsbG9pYmVnbW968/Pt6/T7e3F0b293eHd0\n/n597e/2fXBzdvb9+PDw7Ofc2dnb4+ns6u11bmViZWZoX15cX2JjbXJ2dnh2eXt78+nn4d/f5ebk\n5uXt8X1pbW9zd29qY2NlcH/+8e3z7erp7XZ1+u3m5fD29fDs93txZ2ViZmhrb2txbnBpa3l88PLw\n7u3s6+fm6Ovt7e/4+n53enFvbGxyd/v1+ff09ff7/Prw7e/u9nl0dX76/P9tam1tbm52fHb9+/n7\n+/j68e3x8u/n5u/5fHRtZmJfYGVrfPjw9PPx8u7x8+7q5ent7Ovo6urt7Oz8enZxa2JfX2RkZWhq\ncnr8fnv9fvb27uTp6Ont6evs7O3v9nZxbmptbGdnaGpsbWlobXnx6ubh4eLl5+rz/H17/X78+/p9\ncHNzeX18/3z79Pjz8vl2cnZ99X52cm5qaXF9++/t8PX7+nhydvzx8vDv6+7t7vf1+X59d3Zva21v\nfPr8dXB6eXt0e358eG5vefbx9vn6+PDw7Obj5+36dXJvbXj2e2djan/y8fh8/f77+fv3+Pf2/n19\nfHr68u3n7Ovs9P59c25vaGdkY2huePnv7Ozw9fb29+7v+f/8/Xx9+v16eXd2d//19/Hq6ezv8vz7\n+nZydXhwbGxyc3F6/Pfz7u3o5enuf21paGpqZWt7+PH08/x7+vt3b21ucf3v7e3w9P58/3x99u7s\n7ezr6+3z7/v+dWpobHNwdf768PH6/nd8/P76/fHv8/d3en3//fr4/25vb2psdHRwdXz87Orw8Pf7\ndm5zd3d79fXs6OLh5uz59fH5c25+fnd1b2Zpe/z4fW9xeHt7dG5tbnF89uzl4uTl5Obs+XJrZWdo\naW13/vHx8+vz+nlubXR6/vL9fW9ob3d++fr97+bi5vD39fn/e358bW13+vXy+Hx+/Pj4+/Xv8fp5\nffX8dnVtbnt+eHFzcW5ub37x6+nv8Pj79v73+XNvbnBycHn7+vry7u/v7ezr7Ovs9fp2bm1sbG3+\n+3707/Dt8Pf3e29rbG9tc3l/+Pf5e3Jsb3z4/nj87+/v8f15cnZ3e/j8+fj28e/r7vD3+P1+cWtp\nb/3z5Obr7e/xdGxqam91/v379/H0+318dG5zbG1sbHN7+O7r6OTk6vX4e3R0b3Nyefr19/P29/X5\n+3ZzcnFwc3n9+Pr68evq7Ozx/nZ4b294bmlxdnX58e/xffjv7/P/d21pam94/vl/ffv59O/u8PP0\n9Pn3+395dXlzcG90fHj68vDu9vf0+Pv5/Xv/fX74dm1zeXp6+3z77+3r7Oru7/t0cnJ0dnr7+fh5\ndm5sbnB++vl6c3F0fvvx9f31+fXv9fD3/ff+/nx/+/rv7u7y8u7t9XtvaWhmY2Zwb3b4+vf4fv/1\n7/H3ff3z7vDz93z9/nr79/Hu9fj6fnBtaGdpbHd8fff07e/v8X13dnN3+PH08O7z7u/283h3bGZv\nfPj48OzzfPn29fR/eHh6cG5rbHB69fH0/PHu7vb9/3x+evTu7/Dy9f59dXh1d3h6fnZtbnv3+v18\nfP55/vZ9eXZ5/P337u7v+/7+9u7x/XV2e3z9+3xvc3FveH/9+/58eHf36+rp7/n69fHy+v38/v58\nem9ydHFxdndvb21z++zt7+/q6vL6b253fPh+fX59+e/z9PH0e3N7/nlyc3N/9fjv7u3o6efp+Pl4\nbW1qc3RsaWRfY2lwevv69Onr8PH1+Pb16+vv7+/v9O7u7vD8cWp0dm5uamx1bnF8/vn2+e3p7fL9\nffz49/l9e316cnF3fvx9dXF9/fny8/T18/H49/P093RramhnbHZ0fX96cXjt6eTi6Ozv8u/w9Pn1\n+Hhyb3h+/X50dHz/eXRvd317/3x3f3x3enRta252fvju6u7y7u/3+PHu8vTydnP09fX18fF7b2tt\neXx7bWxwa21tbnTx5efn5uvq6/1xamJjbPzu7Onn6enp5+jzcF9WUVFWXWh87eDZ0s/O1/9v/njn\n6evtZGtjavFzbWNYWFZd8Oje3Ofoe/zj5t7xZmJaX3Du29/k6X/49O3vaF1XVV5p697j6v567ufg\n5O3zam3/6+Dg4/ZtaWppb21oZGJvevPr6+9vZ2Vlbfr1fnj77OPb2N3m+W9rcP19d2xra2307fP9\nbmlgXmV16+Dd3Nzb3urzbGRdWFhSUE5W3Me9ur7I9U9JQ0NBQUhO/Mq/u77L8E1DQEFMXerSzMXE\nyczfZ1VOUVZh8evf4+77YFtXUlJUYevZ0dTb3uPc1dnk+mpbWF5tfHR59fzq6fr7ZV5eWVRNTmXb\nx7/CydtqWVBNTFBf8djPz9jvdmxgW1VTVlx+3Nba5PH57uHwZmFt59nc3PNj9evh5PJ1WmNiXG1s\nZVVLUt7Dvr/Lc09MVlhVW09OY9zOz8/L2PRoVE5NXPfj0dDgc1xWVVliXFtlbvPd1d3u397q6+nd\n3vDo/HTo3dddPDlsubKts/U7MjY8QUtIQ13Gt7K500c2NTxGXNnCvLm2vM9YQEBIXeff52xjd+zq\nak9IRkxe89rX19LSzc7V3332cXTucF9bTjhRraytrN02LS46Oj1KP0nLuLO73lI+OklWVXrXwbex\nscJiPztKbNvhWEtJX8/G0FtDPkRaeF1NTWnNvbvA2W/t3NfnWkU/QUjLqKSqsGc1LSw1Mi82PvO3\nrq69W0U+Oz8/PUjcubCtrLrtTUpUZ3VMPDxI7snBy3FPUml0WkM3N0rHtrO621/ozcjkRjk5RERi\nqJ2ip7g8LCYrKyMrNku1qKWt7Eg+Njs6MzhWtqmoq889Q13HuL75OjhGX9znVkZN1sbWTDgzO27A\nvsfS3trAucBiPjo3Q+nO11bLoJugqkgkHx8sLioyNtipoqKxPy0pLDpAWNnAq6WntE00MV+ys8FI\nODxTx81YPT9b3ddPOzM848G/11pb7r62vvk/O0Bh0s/d29DKp5uks0UnKSYvLyQoLtuno6a3Oi0x\nO0g8PlXJqKGltD8tM9+0ts9BP2rBv+U/ND1zx9JFMi8868S/1ldqxba3xVo9O0he4srKzMjD4cmj\no7TLNS0pKC8mJi9Qraapr1YwN0VSPjdFfK+goq1uNi05zsbWT1/GtbPPPS0zSNTTTDw0P/7Kxd7t\n2cvCzM/nW+zW1lZBTW7Mvsx4P0Wqn6mvPyssLUQuJSgp36Whpr8+OUHzUzEvOcypoqTDNi463by8\n2lzbvLnKTTIvOEzt/1NDRmTb2ORcYd7Fvb7A0WdQT0xESE1fz8rM1EnWo6Orr0k6Ly01IB8mLL+o\npKa71OBd/zkpKSxat62puMq+vbu/0EYzPvDO1WtDQVTT0lg+MDM9Vs3Fvr/BvcXR90xLTXjW7/tW\nR0dJW23e1b+joq2t70U3KzgpJS4tR87Hs8LKuMbA0kU9NUR5c87V8NbGt7a/w8fNxsh9PjIvMDxc\n+Onw4e7q2OVZTll23M/GztzKz+lgSUM/RFzuysHJ2li9p7C2u0VKTmH+MS0rJzpdWl1GdbiuqbPu\nRkNXXE0+Mjnluq+vus/PtrfJVDg2PU5PPTo+R+fLytL63OdwXE1a/NrIw8PSXWxeUFxfcUxKS0mo\nnKuqu0/WP0EnGSEmNM/Yy8WyoqexZy8sMElFO0nuvauptcvTyNhPREdGXtHU8uTbXE9COTU5SFP6\ny8vPwbu7wtZfU11fWUc9QkzyzOne2E6smai2vD57OzAoGSo5OslR2Laupbl0TzZCPzc3MVe6uLCy\nuLS0ufBBRjRDwfxoe9PEWEw1LUJMSUxI5svCv82+wtXW/N9iQkI6P/bq2c3HvM7KoKDNxVBD2zE0\nJSBSNjxiOMO4uK3Z3Ns8TDs3X07Ivd+5trWvv8rwS3NvVkU+UXZvUkRHRlFqS0dFUePj19/ZwsTC\nwc7nVFpYRUxMaM7Iub2+xl3Nwf9eREtxSGXaU0Y/RktCSk1BRVvb1dDGwL2+wMhuT0pETF3oyr+6\nvcbK2W5LPjw8RVP04mdbZuznYFFQVeXHydlxX+/q9Oh18tTT2vdjdn9w/tzd6ePt3+Lty8DEzNf3\nVUhBPDU1Oz5JYerW2s/O2tDO3ObdzszX1dzTyc3S2NXT7/VkR0RESEc/S0xN8/nvZFf29tPK2dTO\nzMnNz+1y4ufk2c3O2s7OcWfp6W1gaE0+Pj89Oj5GR1H94tfb2c7PxcPJytnf1tnV4t3P1cbFz8/o\naEw+Pz0+RERFRlhw+OLl7OTPyM3P1uPi4NXa8+p1fNPIytLNxcrRzdB1TkY/Ozg4OTo9Rk5UdOHR\nztPOz87LysTIzc/T0Nnb0M7Oz8/Y6ub4WEg+Ozk4Ojk8RlX50si/vr6+x8zX4dvg4Xhk9X/u0dLa\n18nBz9nN3mVPRTw1ODs6PkZLT1/14NXPzs7KzdfRxsTKy8vP08/Q3+fe5eXe7GdTST86Ojs7PkVM\nWenZ08rDwcnP0dXQz9bb3uH2cNvLzNDLxcnNzdxpVUo+NzU0Njo+REpdeunWzMrKys3V0MvIx8PC\nx8zS09nZ3PL6cWVXTU1HQT87OzxBS05b9dnKxsPCyMnM0tPd4+Dn6t/PztTQycfO0M7nbGtWRz05\nMzE2Ojw/SE9q08jHxL7CxsnQ1s/GwMG+vsXJ0N36VUxHQkNBQEJDRkM/QUVMV23g0cfAvr7CytDa\n7ev3WFzEuL28vLm4wsxPRj8yLyorLjI4N0Zt1c3Kvry4ub/AxMrgeFxe29nZyry5v8PI2fROPzs6\nNTA0OkBKTlZt0s7QzMvMzcrIyM/h5O1/ZVVP7LzPzLKztcW+xlxcNjczLSoqODE4SWXUzLvCurm9\nvMPC8ebZUVra0fbKusbDvs7e3V0/Pz0xMTgyNUROTfLKxr+5vMK9xM/N3V9SXVtSV1fIwey5r7a+\nvrb+VEU2MisrKS8wMEls4NO2srq3t7jDyNBoeEtCc95W7Lu/1MC+1vJyT0NFOTU9OjRAWktYz8nM\nwLq+vsLP1N5ZTllNSVFbU8S93bSttr61s1pLRTYsKispLi81Snjjz7W0u7Swt8fJy29bSlHbX1vP\nvcvTvcTcfnpTRD42OTo2N0dOS3jSzcu/vL2+xMrJ0mdXTkRJWU9JxLd8vqqvxsGz6zxFOi0rKyot\nMTQ/1s7Xuq+zubSyvcfJ4FtIPUr0VljIvcvNvsLdeWBGQjs0Njk3OUlfXuLEwL28u7y/xtPW8lBH\nREZNUEdJv7Lbw6iuv8O9yUM+NCsvKyUrNj0+Y7+7urOwr7C3wdPRdD49RUpKXdDRxby/v8LO+F9N\nPDU4NDA5PkBN5s3Hu7m7uLi+y8/ZVUdKRkRHTWH65+K/r7rGuLu/5E1LOjs0LDE1Ojk7U9nJxb67\nuLW9yMrH4lNZT01QVPDez8rMxsjN52NZTkM6PTw8QkRS/tXJxsTAvMLFydfXaExNTk1IUmRn39vY\n1tTM3GhZUV3ubVvv3dHM2uT03uFVSkpJS0ZBSFhtbPHWy8jCxMbIzt7bxd9Wa/53V1RQTFtiTEtU\nVFJPTFPq2+3m2MnL59zS29Lc59rTzuFp5txkUF1pSD7ku993x8C+2mhSRk9BMzQ8RUdHYc2+ur7D\nvrrF7FpaUkpMQ0JI57zDx7+5tsRyRURIOjIzOkZYX3bNvLzL1szL3WRYWm35Z1JX2dXo6NrT4uHw\nQEWurnrP1La0RD0tMkMpKy43z8zEubCor7/NeVdCOTU2PnTVy8C+tK+0utJpTD04Li40PUtOfs2/\nu77FyMnQ+2ljYmJjaV9ob3l2aFtXVWjuZ/TeQEKqobTWUa2uSzUgLDgqODJJyLynrbrC5tk9LC0x\nO0rYv7euqaqxw1tLTj4zMkHq3Nr34cz2YkxHUElfalNm58bC0dPd1dxYWU9a9WBkYm7fed/gaEY2\nvqCqxkLNqbtDJygsK0VaYFh1rqeu0To2Ozo4NzpMx6+qrrjDv8hJNjc7QFTKtLnI083VRzQyPklQ\nX/vNzcjDv8dbTFZUSD1CXHHUxb/Ay9fb/UY7Pj45Xquho67Csb0/KR8fIic4yLmyrqumr28vKCgt\nMz3YvK+pp6ey40EyLjE7RExN562gp8U8Nk5KNi8uP3zGtLvdXv7Ew1U7OERg9eDUxsLDzfFWREBJ\nU0hLtJ+gp7zhwGguJB0eJiv1r66pr6+qwTwrIicyPdC3sq2sra29STgtKztizs5uz66kqMczKzI3\nNzQyQGXArrC50Vts3Gg/NDVF8szAu73B0uDeXkE3OD7Jp6Gkrc/e3zssIRsgKDe7r6qnr6uu2D4m\nHicvTLqxrKuur7DFRi4mKz3xw7/PybSpqME5KSo1OTc4RNi8sK2wwF1BRExEODdDbMq8t7a8z1tJ\nSERCOi9Hq52dp9Nh4T8wJRweISzJrKSkr66qsuYsHh4nONW3r6ytrquuyDomIi1P1df4yK6orLxO\nNS0rLjtMWn/Ot66wvltBPj5ARE1cbejGubW6z1ZDQEFFST492amen6vOb+tBLiMcHyQu3q+koqqu\nr7jeLyAeJzRbwLasqKqprLpWLCInM0hYSVS4op6lzC8pKzA1NTpJ6bytqq7HQjtLcG1CNz1twre6\nx+BeV1lWT0k/P2q5q6iruMbcVEEyKCMhJzjWsamnqa20xFozJyQoMUjhv7OrqKmvve0/NjQzOD1E\n5bmtq7XhQjk3ODY3Plbcxru4ucToWU5NS0ZHUurLwL7F0elYTUdCPz9NxK6nqLC9x/FBMCkkJCcu\nQtK1qqeqscL4RzkzNDc8RE/dvrSvsbnJ6fHZ3F5DOTxRzr/B2U5CQD9IT1ptYWPjzcG+yd5xWk9K\nRlHiysPL3vtre3xfTURBRmnBsaursr7eTkA6Mi4tLTA6TNa8tLK0u8r2WFdcXVZLSElLXOLMwr/A\nxMfIytFxSkdPeOtVQz5AR0lNWt/LxsTKzc7V5GdTTUQ/RFrQw8XS39vQ2WlTTk5PVH7LvLaztbrI\nY0M8Ojg2MzI3PUlkz765ur7GysvVclNSXV9TS0xh1sjFycvM0dna1MzO6VVDOzg2OD5JXN7Kw7++\nvr7E0H1RQz9BSVZi79fPzMvMz9v3XlZSUl3qxreytL7mTkI+PDcyMDM5Q1nTvbSyt73J3W5ZUE1M\nSUhHTmzRwb7Cy8/Nx8rZcFped2ZKOzY4PUhY7M3Cv8TNz87P41hKRENGTm/Pwr/CzN9pWVlaUUlE\nTdu6rquuuddMPDk2Mi4tLjI+eb6yrq+1v83c8mhTRDw5Oj9P28O+vb/Cw8PFyM3jTz05PUtcVUU9\nQVnRwL7Dzd9mVl5/9F9KQ0hf2cnFx8nO2+xvXVZMS05RW9e6ramuwFpEQ0I6MCsqLTZI2Luxr7O5\nvb2/0Fc8NTQ4P05918zFv7q2t77bTUNITEc/PUNc39PU2NrX1dbX6l5NTFvt2uJqWWN86uX1aVpb\nZP7c2uP/aW99ZFFuvq2qs89RXuR1Qi8qKCwzR8y7ub67sq2zz0U4ODg4OD5P8sy+sq2tuM3tYk5A\nOzk7Qkpq0cfM297a0NlpTEtbbOnj4uvz7u3d7ltKRk1e59nU2+7p2NDebEk4PsaqqbXJ1sK9zFI2\nKSEjLkp3YnXHr6mqscZPOTlAST42OEvMt66utMDLx8fUTzoyMTlFX1tMS2fIvbvD2ltV5tDO/1NN\nVvHr33NTS05s3tTc+mdt5NfcfltUXF5V5se8u766wb/J3F45Ni0yNDlEPVJaxb69vMi/ycHL5VxH\nTEpUXmR5+s/Fvr7H2F1XTUZCPz8/Sl/lz8jIz9HOzcvO22hTVFx5+mpYU1hq/m9gWF3t0MvN1N/q\n5O34XFFMS1Nbee/d2dfSzcrW32RcUU1QTldQXGnm0c7O2drm6fP49W/+/vr7bWRZVlNQVVdeX33a\nzMbHys3U3nBbUE1NTlRi79rPy8nM1P9YTEhJSk9e993U0M3Kzdv7Z2VcVE5PWG3r3NXQ0tXe7mxW\nTUxRW2BcYW/q29rZ29jU09HS09rrd2ZbVFBPT1FSU1do7N3W1dHP1N/1dW1mXlhbZHD57uLc3uf7\n+O14YVxcY2z++uzf4ePw8err73xxbf3t3tvb5XVtZWJbWVZZX2t2++zq729uc/jp6+Pm4+Hg3t/f\n7XNnZmZjXVtaYvLf3OXo6OTk5e1tYl9fZHBycnB57+zm5eXp8nlucn/9cGZlY2JfYWj55d7e29jZ\n19fY3vZoV1BOUVhYXWN+5dzZ3uT4+fzt5/B1Z2xw6eTi8nR2b/Pw731qZWh3/f9tZ3X47unj3uLp\n7uvo+2ZYW2Fpd3f+e/Dp5+Dp7fxtYl9jZWVkbvzt597X09LY3Nve7WtaU1FTVFhYXGV87uni4ODm\n6ejf3uXs93p2/352Y19r9efv/nV77efwfG9nX19qefZ4cHn35d7i7fZ0bmxrcXX++evn5eHp9fnw\n7X5ramxqY2Jja/z3+PLr5OTo6uzs7vlxb29sY2Nrcv7z8X52fv3x7vD39u7v7/f6emxzePn9c3J6\n+/D6e/Pu6uv2/Xt0b3j++PP9fHp5d3Nuamtt/fj7/m9qaG366+zv8PTv7/Pv93Nte+7m4+Lk5/D5\neGhhY2dqbXF2bnz16uXn5ODf6/1wbWdeX15fZG707+7p6Ojs8/337uz0/n/98PTu8vn/b21oampp\naGptcv7v6+nn5unr7u3q7/F+dGtkY217e3pyb33t5eTs8vl/e3p1amZgZm5+7efo7e/z7uvo7XNo\nbmdz7+vh5vBqYl5bYmf+7+Hj7fr26OTf6uj9a2ltbnJ4bnNuenv78Ovz/PT8e2pmZ23+8vTu8Xr9\n9PD89u/m39/i9nFpbW9ubmhmZmdnbXfv6OTl5env+P/2+vd9efz58Pl6ffz8cW1w/3Zw//3z/nx9\nfHVrZWVvfPHr7PHw8u3q6e52d25vbGx0dvnp6+no7Pt0cnVvZVxz4uDc6vZqYWFiem/w9+rm6eD5\n63t7b2ZpZHj24+Xm7np7bXJrZGhw9+zo8ft++/Pu6u3v+29qaXf/fvv8fX767ujr7n54eW5ta256\n+eXp93p+9/X3bl5ZWV1r9+rf3eDe2t/g6PT9amJcWVpcYXDu5drZ3eHl72tmX2FoaW96+erl6uns\n7Pd5/f3z8v56amJfY21rbfLm3dfb4uxxYVlcXmVqd/ju5+3o7d/g5e1xbGJw/fPs7vH5enzu9vfv\n7vtqZmVnZV5cYH3r497f5evr6/Du8X59e/79dnr8b21mZmx1cm/+7uzr7352b3B2e/ju7eTh3uP2\n+3ZocGZeXWRrbPvr6ujn8nd6en17e/nl3dnZ6Hz6b2hlZmxcZW1idHT3//Xtam1yeere3Nzs8/5h\nee7o7Hnx/mpxefh7aG9nZvD9evh363htffTj+Ori4uvw/vXs7PRfYFpVY2z68+7s7PV++mtqdvDo\n4+Df3Oj47X9rZltaXWfn4efi/W1lYWheavXk5/bv4ff25fXv9uz8Zf3x/nh/+mZZaf7v5+zjenfy\naWxy7ON3bnb76vbl2unp9m9zYGJkeOt7d2peY2rv6OjW2d7e929gZXdhVlNTVVv52NLO2Of3Y2/x\ncXN15tzcz9Pf8mxsc3p7d/J1YmpfWFVRUU9VbPvu6d/d29XU2uXzaFhWXmv03dra3+rvfeze3uhl\nUEtKVG7m3Nzmc19RS1XewravrrXGZj84Njk+SU9XVVRbbePc3e9aTEhNXubOyczacWJq6c3Dv8XV\ndldOTFJncvz3eWlGPc6tp6Kmr90tIyMjKjpdzcrJv8LBusRqPSwoKjLusqqnrsP2S1Pgyru+3U47\nOEBP2cnO21dDQkJMXGR38uTPx8PEzmpNPi0vuJ+alZqoZB4ZGRghLDXr772prKanyEEkGh0jPquf\nm5yquOREWUtFPS8/1r2ussdTLy87RNztPzYtMle+rKmxv2FEUGvY1k87LB8kuZePjJSsMBMPFBgn\nPD+/t6qanJ+sLRwVEh89r5qanKC65EM4PCwoKyz/ppyapMo5JSYvO008LSwvULWqqbLdRz9L3dDZ\nYz0zNEBH8Z2RlZiqTzMbGyAaICcutKefmq9TMBodIib7u62eoqGkvPwuIy0vS7Szqqesrc0/Oi0s\nLSoyNTRP/M65v8XPYdfT0L/ZbWVX1NDdVis2o5iXmrBNJRcdIiIzNk2vr6eqSz8tIS8vP7u7qaCn\npbZCMSIhLliupaWqvMO8zFkxJiYqOPPM0Uk4QWy/ucjXVkNf0Lu3w8jP4FEwKCAtn5CPk7Q0JBki\nLCYvJi6zrqeqPTovJkI9QL/Vrp+mpsYtKiEszLKhoK2+RUrSSzouKjpM2MlDMy4xc7yyuXpk18m2\ntcF1PENt92c4KSElp42MkK4qKSAmMR0bHSGynJ2gRSk4M1tpLDc+zJ6eorcrJys8sautse919P67\nzD8yLl24zkMpISpFuaivxV5OxrnBfjo5TtvC10MxKSkp3ZKLjp4+Mj8mJBoRGiPPmZylvipIzj01\nHBo3uZmRnrQzIzM/7cZHeretpa7M4DozOTdKPiwuMEDDvbi6Z1RPZ7/VX+TYu7fOWTgvLy02OfeW\nio2bPyIwIhsYEBs+rpSZrs4oL8g4Kx4abaCYlalQNik9Xjs/PdCinqS9MDZTYFs3MD0+Q0o/T3Pg\nxtJqY1nSvs97WFjLw39MQD5JPzc3rY6MmMghKz8jHRgXNr+nnLdPQi7FuiwjHSyjnZ+oSkPXXs5U\nLTntr5+nyDgnPrO4aDArVs1DMCg0ybm6yktXy764yF5QXtnVTTk8QUvebkCpkJGeRSE6TyMdGB3V\nsqupa0jkTrzHJh8jPqOeq7be6bTDQDAnM7ipp61aQcq+vlwtNFFNPiwoPcm7uuBJYdi/utZPVGrO\nxOtCPkNJTz8uP5uMkKc1Ls1GHRcWJM++uLnRvbS6ujocGyXno6SztK+srF4oJixara25x1a4o6xe\nKSM52EAuKC7TucTfWF7IxcrOfGbPwMr+PDVBTVFWNjWhjo+eRSzGyyAVEhtMwr60v76wu8dDHxsk\nQK+lraukp61lJCIuTLm2vbG1uqmpyy4gJk5cLiksWbO673dZX9b308TQ183Yy8xMREQ3Njgxr5CQ\nnb8+t6kqExAWMct+zb67q629aSkdIDPVsbCwpaGrvzgpNlXfxczHubqyrso6MztPSiwmLkHw11de\nzs/Lwr+/wt9g+2/z9E9GQzc3Nkmdj5WmzNCr0xkPEx9V2kZZwK6orcw7KCEpR8u7uLClpbHqOjla\n2+zl4sq5t73K6mR4STcuLC4yOkRn0sbBv729xvBpWll45M/aWks/OT88RKSSlKHG+7bMHxIUIE3b\nQT7UtK6zzUkxKS5cvrzNybCprdI+QPrCv87t+FNvua61bzs9Wz8pIic/zcru68e8vtTg5ndm7s7G\nz1FIT0k8ODc/rZWQmbY+Tc07HhgbKl3ZTj9EXMO0uNw1KTTBrbXsQ/W3s7vP5cq6t77gT1F22Nhr\nSD8+PjcxNEPs3WBQZ83BxtHSz8fBv7/iQjw9QUtLVcy6tK+tr75PNTQ+TlZtzb7FYjoxOUJEPjtF\n8dDX1MW6u9xJQ0lR7Ma+x93TvLS4xuV36fVPOi81WMXIXz08TGZRQz5DXs68ucLZ39nrXE9d1sLA\nxtXJur/3Sk/LvcrSysbePS4uOT43MThGTUdF4baxvdLd3Nnd28zP7eDIvsDO2sS5u90+NT1e2eNM\nOzc7QEZEQUr2yL/D2e/Uyc73WlrqzsjEz2hQ/sXDztTCtrbH3eFfQTYxMjU3OD1CQkFL5cW/x9nf\nz83Q1NbQycfEwcjPxbm3xlVEWt59Sz07OjY1OTw9Q1XTw8rb28i8v9F3/9DExM3mZ2BZTk3St7nF\nz8zE20pR6W8/MzdES0dCP0ZKR1Lo19DOzc/d+tzIwMrf2c3KyMzPzc3OztTgXkpDPjw7Oj1IUl1l\nZWx48dzX2dzg3tTMx8jR5H1v7dXL13PbydH0btvL2uTS1uhJOj0/PTw8Oj1I+MvQ8n7axcHK3eDZ\n2eT25tjPxr68v83W2vhURkBAQkZJS0tLS05XW2T33c7Q2dDLyszW3ePq5OHt7ebla0tQ1c/l3szA\nx9XQ2vpsSz07PT9CPz8+Q2fPy83c2szM1vhcXubSy8O/vL3I5W3l2WxNS01MTVVkW0tJSElSWVVf\ncN7LzdHY18zP4OtzauXed2hpYltISsu6xMS+vLjN19pLSz4wMTA4R0lkz8zFyd7ddE9XXGtoWO3T\nv7rBwsPH11haYW3sb2x5ZF9USEhCQERCVevd08/Iv7/L/F5tcmJNSFF22Nz9a2bn8UVerq68tcW7\nulxOLi45KzgyNOfTur7BvvnhUz9DPkhd2sS/vLe7xMDO/XJNV0dH6V/e1OveWk9HQkRAU+nn6d/I\nx8vN6/9jVVdTU15uferZ1Orn6VdbXlBNRcupsbm3zLTHVUkuPjUwPS9I98zG2sP3WVU+P0NPYdTF\nv7q3tb/Re1lqS0pNSVjry77AxtFcTUA9Q0FOaPnu7MvLz87U1n1RR0FNWvHZdnzj7+ddTUxO6d7u\n6bGjr7G6zsJGOCwqNy89R0jNw7/Lz9VJPj07SGzpz7+5ur3A0eRiU0tY1uHTzMfLzsn7akU8PTxE\nPVri3svezdHb51ZqWlJYUVhu4+3o2djf4ezq6FdOYuPdaMKnsLi5Yr1QNzQqPzI8UT3Mw73M99ZN\nRDw2Pld13cW9ube6w87U+FRaYFFZz73JzehW41U9OD1ER1pe4cjJ4ubZ7/lrVFDi13Xh3+v3/X9u\n3t12X0xKWn7t52varq67vd2+zVo/LDw7P0Q9Y+i/3Fl8U2FCPj5I3uLKxcK5vcDL3NZpYnRmz9Hg\ny8PMXkhHREE8OURYbevaztbP1W3n3fD9+ePf0NR2b11dXlxaUF1aTlp+3dLeYsWwsrjNyMTQ5Tk4\nOjxBOz8//tHe7GbxXWZIRFpm1N7MxcO5v8TL2tPi7Pt04OlmT2FrSUhBTFNOUE/y9tjU3+LgytvX\n1O/g9PFYVVVKWlpTX3Lq5+Hf5NrZ7FBPwLi4wd2/xcZwPkU7SEE+Pj16c9LgY2lUdlJbVVbW1svQ\n1MbFwcfZ2NrY519hVVhZTktKVGjneXrp5+duaV5n/N/W3dzhz8/d8l5cUVRPTU9QYnTe293e7d3m\n6FZD4sLByNrBv8HE7W5LTlBFPzc+RVR/8ttYYX7g3VxrXPvZ19PZyMTAxM7cevdiWk9ITExRW2Zz\nXmfs4uDx6uzc0c7M1Nfg2tl4a1FOUE1WTUxRXur6d3pv9O92Yllt4NTV3OJ02sS/x9THyM7V53ZY\nVE1LQTw8PEhMae5r5d7Lzc3L1t7s6PP4b2119+bu+2134uDvaGdtZWdmXl5jcuvo+vLd08/PzM7Y\n3XtcTExMTFBQW2Fs+/Pl5OXl9m1ofuz47OLf3N/j7P7z/nNiUU1d7d3j2tXa0NTP2N7W395uWE9P\nVlZfXV9bXF9cYlxfZWr+bGtmZe7g2tvY1NrW1dTT4Ofr9P5qZFxfbnz6c2tna3hta2Nq9/Df293c\n29Lc7nlfVk9UVU9RW2jx6/Vwa3plampn9vDo4d7d3NXQ0dPa5PDp5vf9eH79/nNiY1xXWWFrZGl7\n7d7b5Ozm4+j1a2JfXGRnb3Rpc2VfXl1lY2Zq/vX86d3W19XT1NLX2OLt7v7zaWZ2+HVfYGJiZFxa\nZWhpZWxyd+7v8Pjy7/Z7cHr07u37+f5t+XTz4+nq9ufe3+/+fnjxaWNqaf9/dnd+fvHyfPp0+npo\nbmVx+vn07fp8bXzu8/Tl5ODd3OHuemxjZ19aYlheXmxsXnBk4+Tu1e7U297dct777nd+63Prbu3y\n//RkfmdtYmNcbnTt/HPpeu13c/H77+/x9vX28XF7aGZ7Yvhs8uPk2/vp/HR/XWtfaO/z5OPp2uLh\nemJmXWliaWdr8WDtZe736OXj53fjfPF2/Xz66/7qfPz0aPxo7O306nju+mvyXnZoffly4mH1bHj6\nb+9l6GDZaWviW+l+6fjt4WvebeVp9Pdg3Fjg/vne8ezrdW9vbHz1XO1mdXn+YeToZ9dY3/pj1Fzb\ne/JudG5e207XVeF8aOda6GHk+/16bdpt3Otg3v9w3FfcY/jtX9pk3t1v2Wfnc2vzX3P2d/ZbaVx2\naG7hX9Jo3dhczlXe7V/tXfRb53Nw2W3eeOR1/WnfW+JxYd5i3WT39/Rv8PtseXX1bPvuYO596Gbi\ncWXaZ9n98/F5d1/qXfB+V9FQ3fZX0Ff2403c/1nTZ+/OVc/9ZMpP0f5azk/d50vTbUvLVP/dUdty\nZfvnU9xoVs9a79Vb4d5q6ut67mTqX/5wXONn+uPv6Nr+2nP042te4U/+21Ht30/f3FHPWVrOU9vt\nU8xiWcdUTMFN885U3HFy5XR3enxdaPPnY+jnaOj/6HF66Glq3uVQ3Wld3GZm+95q2/xay21p01l8\n1lN45k/V2krX1k3Y6Ej24Vht8VDd21Lk3F/Q1WDj4d5obt9N8NNQZc9wZHzZfE/IWlXMWO7eWd/m\nXOB3XX3oXu77U+T0Ws1XV8hXbshJ3tBT0vNP231e3P79el/i+m7q71rh6F/lbWDWcW3fXdtaWdti\n79ll5/df2GRj5Vzl+Fro32Df0Whw/e/7YGr4Wm5w42Zi21tp2W9n6Orl837m8+ZqedhY79hl4Hx2\n52To4XX9c3pubOtjXXH4ZvJ55V7k2lXa7mbqZO7qYHF7Xvjnd23t7/bqfN9p6Nlf7/Vr32Zn5WZj\nd3xgdO7gfnTe9lz05Whs6+/1ddruXu3da17993Rn5W9V7OVq7+x7d/7i6l7y7F5u3G9i8ujl9+h5\nc/np5m59715r7mP5f2796/3c7GHma2FuYmlodvZy/+rqcuHdcu386ODt4+1hfvRle3hdZ3/7+fzi\n6vfd6Gf59V9qZlt8bt/4ZuV9/uX9//7h9e/q63pv9mb9dml3amv+9/32bO3v/fJqfer0/Hpr73zq\n52p7+vv29/x3fW/2dnH9Xnd57+X76ffk8PT2aPrp63hl/P5s4WFXfWht9HDy4d3m++N5/XVw+ezp\naffz6en+b2x7aWxna2F59fvtb2z5/3nu9Xx68OPscu385/H263bj9vjk/Wfsbmp5W2Vsa3N2eG/+\n7vHs7/L06+X1fmn8fW98dnN+73r5afx6++h883l3eO38e3pp+nX2cPn68+Z46PH19m3t8XDofHZ9\n9/tu+n7+/HR7cX/8cfH5e+5weXpt/+319/l5eWdsbPt7b+/36+/y7fTv9O3u5/zt5vfx/P5vaW5v\ncXF1bHJqeXX/83fzf/z/d/V5cnZv/u/y6u7u8/v+c3txZm1qcP705+zf4uvsdv/0+X1wc3dubmtt\nc296fvHn5+fu7e33/3VmanBubHb2+/jt7Orv+fhxcHp/enB2bnb9d330/vh+ee/s9/v4/P528Ppx\n8/7z8/Lq+Hp/fHR3/Ptxb3Z7d3v4dHZ9d/zw9f54cm15+O7u6uju+frxev/9fHx4dnZraGppfv72\n7eju8fH37fP1d3F2ef17fn77enV6bXv99Pd+/nX+/Hp2/O/16efr9fb+dHFz8fx+9e3+fG1qaWht\na3vv8/Ln6O7r7fr6/Pz7ePXz+Pd9eWxsaWZna2Vjbml0+O7s7+rr8O/p9+vl5uHt+e3e3u9yXV1j\nY19fZmt8e/l0dvl0+Hxu9fnq2NDOzM3Q3exzWlZOSklMTFNdX+zd3NvZ2d/n8XJmbW52e3Fv9ebu\n5Onr4un/+HtxbHX5b3lrbvh7dnBxde/v79/Wz9fjad/Axc7Xev3n/Ek6PDs9RT4+SvrTx8DFycPD\n0OF2VFVeXltr2NTKwsfHyM75WkxBQ0NERVFbX+fg4NvR2untfW9ub2Bo/O/l7vx4+erybvNqcdPm\nRPqvu7u61sPHvkUuNywwODUwPs7CubK3wrm84ko/OThFSElXxru1sLi7wL7UVkk5OTo8Oj5MXebT\nzdjQzt9/bu188PNm6tzS2ufr8+DuX15ufNzd72ps+FtITsbMyLzSxMzE2URMNzg6Ojk4SFbOvrvE\nxL/GzONfS05YYFlcZvbOzMfPycbQzuluW1RUSklHRUhSVmd67uLpztXY3uzV3tfibW9rdvt2al1d\neu52ZF/959/ldGh0493e6+bZ0M3OzNDO0dzvXFFIQj88PDw+Q01YcdrNy8vJysrJzNPU0NHR0dDT\n1tjkfGVUTEhDRklJSUtSVl1qfOHY1dTU0c/OzM/X3eX/bGJVUlNcX2L23M/QzczKzNfZ7WpaUVJP\nTEpISU5UY2FeaXvy+3diaG7x7PHh28vHxcXJwsLEyNn0aFtWSkZGQkRFSEpLVmJ44+Xp3trb2djZ\n19vh5Ozq7PLv6upuXVpmb2/zycDKwsnTzej0TURFPkNDPEJKWuXWz9zX0drd6WlUXm5mZHP528fO\n0szHwMPG1Orfd1ZLRURHSURCSVFWam742dbW193Y19jgZmx47OtveXfm2tbf7NnuWdS1xM2978/d\nTD8wPzs2SztB4MjDy8HM7tZXQkRNUljd2tC+usDHvNVy4k5laO1dWNZ+cl9NRU9SRkpUXFx8cvPT\n1uvn3Nzb4vxz393l9nVfXubo4X5n2G5ftqzGvLrcykk4KytALjNEP9e6uMLAttJVTDw8TF1V68K7\nurzC79nKRERGSs/XzObIutpgQUFFRj47T93Q3t3SwcT6VFvz/VJIR/PL2mZb18nac2lr6txTP8Gj\nt8SzyLhqNyojPzErPkLMuba+ybTGPjU0O0hbXtS1rK++w8790D0xQ0ni4NDDv7TLT0dFPzg4Ok/X\n0+PXwL3F+E5t7FxHRVfjytzr2MvSYl9hdG5XZklErabJtrS4vzg3JStDKTNH1Lm8tsa+u00yLzk+\nQEzguq+st8a+0+NZNkRRafrtvr66w19PRT00NDpHZu3f0MTEyNZfaXVeTlJp+svJzc/Sz19cYE1R\nTlJRW1FvqKu6ssG3aTg1Jzs4MUBJxsPBwNXC20IzMT5CTmXRubCvvMDAy+JMTElPTU3BvsDH3dFW\nPjUxPURHVnzWzM3Lz8/Pb2tgXm9u4NbLzNza61tVVVpNUVdUbmtUvq62ucW+wkxJNDlCOkU7Rl/o\nzPfVzediSEhLWV1j3s/Cx8jCysXK1nlv2eTX0dvn62pKPz0+P0VMTFru39vWzc7b3N1yaeDW1NjV\n1N7o/1pfe3xfWf1nan9r409E0Mva3tq6vsTJeNhaSj44OjlDRlPu09Tb13TuaF5aXeZo3tLOy9HB\nwMG9xcvP3mhIQD8+Pj5CSln6dvfk6d/h5frx187N0crHzd5nXltgXElOZ+3e4N3k3+pWVVtXWFVf\n+d/P3N7V3+9aYHl43unc1dfZb19eaf5eWVtebl5UV1/o5t3X1tHe6PloZFlcVlVq7dzY1dXX3Opo\nT09SYOz04drT09/Q1uTxX2NaWVVRdeTd4+7uffdoVlVba11aXGfs6OXh2c/W1+Xv72poWVheVWBt\n6t1vbGB33+3d49jJzdTl5+HsdWVfVlNXXXr5dVtc/vlrUU9a79bncvzk3d7f8fXc2ebu/Hlt7ODv\n8F9ZY2RuY278/eTj73V9+f3t7+vr7vT89Obud2Zfefd1Z2dlef1rXltt7Nzb29no7PN0emZfV1t5\n9XN5dP/f6e/n5+fs3dv3/Xp4ZmZpWl5laO3s6eXf4/HnaF5VVnlodG7q5d3b5Of51uDe3l7o5/t0\nZWpSZFZX7lnmam3Z8tj2c2be9/v88u1y7HXketfuZNtpa/pabmBee+vw0lh7523cemrfV+L06Gdx\nYXboYs9b31v5zlrXU1/jY+xm+Vhw9Nfz/WV619zl5N76Ymry6Ff3T2Xabd5W6F/aee5oVN1Y+OH9\n2FjTXdXucnp76X7z7eJ58+Bv3WfgXGtjW/BYZGj4637vc+1u6Xzs7+j++N974vd57WjgZ/dXbVv0\nW/T33dT23HT0+VXhWdha7Wp71WXbaHT39t1VbGDs42j8ZfRn+Glxa33qbujWY+h14d/t4VvsY+/5\nW+lV4m13+WLUWM9j2Xv67GbZWOVu/Ntf32z0e1xoYP1a3Pvh6uFn7vny7l3+am/fV+NY6HTzel/z\n9Pvv4N3s02PQ/OJ8dvJcdV1nYF3xV919dnfu9314W3Ty7+Nf1O3j4/bf4mH1Zmr1X2HmWdVq1nXu\n/mflX2H4WeH5fuj5du1xce9fa/dd5/jk6d1q8uha32n963tq7H7u7uNy7+9v7V5//XB1YnZa6lty\n5W7t7G/Zb+TmXtFr3H748fffVtVP/elPzVRf1lfe21jn1krMXVTPUO1wbNzq6exk/t9b8XZs5evm\nbOl4avxkWdxY4OFV1mft513wcXb93mzu2mvabWfidF59b1zca1fWV3faXuVxb9vf/+h0cN73Udjq\nYdFXeddf2XtS2mht4FHhfl7fWu7eXddZXcpbbNhZ4tRk5Hdt3GV8YHTnYlxe3u73dv7u6+RkYfTu\ne2fqZ9h4WdHrcdJYWdlo/fFYeNVsX9ta5e55a1zbY2zt2/f02lnd3W1yYN7fWH3fVmt4Yu1Z31l+\n2Gjpa1zZbWXPVtjVTsV+XtJV8e9q42VV1V9qfWbtdGd53Vnb5lTNX17LeWnZVGTTXutcVdnyVXpp\n2N5K59Rt4vFIz8BMXMxs3O9Mc9/g7Up+xlxqdmDo/Vpv1WNnfGJ78Xd05dv3VezXYXfcbOLaVt9s\nUdrfY23gd13Q4k323n1WWNZ5V9RuXM3pa2r57VHz0VFzatzJT17Ue+LtXd3VbGxefdBLStBp61lT\n0fLa8FfR0l9l9vVreO5caNzhWGDW7/18Z+jl325fdtvbSWTKb2Ncfurb807d/vzrVe7p39xlb+Pp\nVN5oWtlg/NtP4M1V4u5Tzldf31PYbU/G5Vt6TdHcV/Nk2txi8n772m5Vas/rR2fM7E3vz99PTsvh\nTOrSU2G/80vdxeRG19VYc1l7W2fgUmHT5u5bb8xo995J2slPUt3db2Pb813O7UjN1U9kb33+aWBu\n3M57WNZOVdH4a/PMa0rW2WFwa9ds73VJXndtXend7u5a6s/t29rq6NzkWV/R4E9PbdvqSlXg1fZQ\nXuTT/FP40stYS9bUZlHk1VTx6HTVX1nl52NK3ddWU+PZ5N1aftjtaWnb3n/z+N/xTOPKXk3r2VZe\n5lt3z09Q0ttSU87obtF9a9zeW1LP6k9y6PJPedtb8+r46OrsYXLeZ2P56OP87N9y/Ofr9PvqZ2Dy\nWFr+92Nl4m9j5/tk8dx7btXeXnnc6X7p6OJ+6e9o7uj8cvB+Z2N5a1prY1VkYmNvcmZl6Ot7697a\n+ebZ6O/h4HTu5G5p5fZgaO3sXvj4YnP+d2lzbVvV11jMytrI1L7NZsxbVEs9Rzw7QT1ITU9x7M7H\ny8O/xsPLzs7n1+xr5GlqZGzyX2hoVltTU1tTXltbb2NtbOzZ6d7V2N/l1eL75mZmcWVlZn5nV3dp\nSFfE2VrIvbvVzrjM3fdrbUI9Ozc6PDs+TFxvaM3Cz8XFvsDMwc7Wztzw/N3uT1v1Vk1UX11OXFpQ\nW1JRV2D8W/vP5NbRzc/jztTr5O30Z2drWmRuXFpdXEhav11Wvr+638Wy6s/5WGU6QTcyPTo7PUt5\nWGHLxcfAwru+w77QytPm2O7oWld4XFdXWl9dWVlQU1tNS1RcX1lt3eje2NTW1M7b3tfa4vbl6mJs\nYlpZVl5PSmbL1VnGvcHFzbrJ3tZRWUY/PDQ8Pzw8SF1eW+LN0MTGyMDCvcvNwc3W6uLdXVZVT15Z\nT1VXYFNJVk9PVlNkXH3iaOzY0dLcysvU0NTO3OPgamxpXFRKVlZMUlZbXtPF7cy9vcTavsfv31pa\nRUVHOTxBQzw/V1tXZdbV1szMysrBwsrFx8vPzc3d5uF5X1tSTEhJRkFIR0VLUllZetvh187JyczE\nyM3N0Nbl/npVT1RLS0xQUUtfeVpfz8f0zr+/ws68ydjQZ2tKTUU4PT9AOj1LSk1Z6NzVxMLBv72/\nxsTGzMvV39xt/1laXktPRUZFP0RCRUlOWlpz2tPMyMLBw8HEyc/Z2uptW09PTUlHSlBVWFt4Zu3I\nztvBvb/JyL7Q3+tcWkVCPDk9Ozs7QkxNWvLZ0czDv8C+v8HAxcnPytT02OVnVGFcSUpHR0FDSEFI\nTFBZaNzk3M3Mx8jFxsnGz9re5m9TVVFRT0lPU1JVVV1fVti/4c+7u73Oubvm2Wf9Sz9EOTs5OTo8\nR0VObunk1sXFx8G8vcG/v8jGxtvj3uNOS2xLQURNRz1KTElMVWNY/ezq1c/LzMbFzcnJztvj415U\nU1NOSU5QTk5UWVlubm/ExGa9t77Ix7DZbsv+WDpIPzQ5Nzs4PEBHWWzs0L3BwLi1ur+6vMnNyupf\nZl5NQk1GP0lFREZPUUxgalxo7+Tl2tTPx8HIx8PK0dnbb11fTUtLSUlJVVJOXW36XGm9yFm6tcrJ\nu7J2775dSj5IOTE5NDo6O0BNbVjbv7/DurK6wbm4ydLG0FdhX09JRktCSUpJUU1RVnlgVfr9bXzX\n0uzSyMrRzMPO2t7ra1JST01MSFNTTlpfdnPwWsy4TMOux8XCrc5LumFDPEE9LjYzNjk2P1poXNG9\nwca5tLq/uLnGzMnEY1n1VFA+TlY/RUpiR0ZuV09N4elW9tzefNrKztDPx8vZ1tPhY2VdTktHTEtN\nUU1mav5w87zAVrOv1ru7s21ivT1FNzk4LTUxPzs5YO1l7r27w7y0tr2+u8DUz9f0VFZhUkhDaU8/\nT19QQVtvSktYdU1W4ePj48nEzMa+v8/Mx9tqXGtLQkpHSkdKVFFiWFW7vEqzrcq7uq59Z71AQzM4\nNC0wLUE5NV3a5mi6tcS7tbW9xbvB0trj1FVLbGdWQ3fcSU9n/UZCXEk/P1JPR17b0dvIvb7GwrvG\n09PW+k9SSUNDPEhLSE5Y22ZTt7VHtarHvr+s5km8QEI0NzcsMi0/PTZI0s1evbW6wLqwv8zGxc54\natdiTWTw7Eb8z1pfXf9KQ0lEQzw/SU5NY8zKxr63ur67w8jdfGlLTD09Sj1CTFNbTmTLsOrUpby/\nv7C3OcldPDctNy0wLjlUQUjNu87KuLTAzLu92W3e72NZW3r5/PrK09/GzMzqbG9EQTw6Ojc8PkZc\n6NLIvbm+vbrDzNPZdU1OSUVJQ09dTndOcbHGSq6rwcy7q0g72jo1KTEyLDQyXPley7mxvbyztMbc\nxdBPREZJRkJCWNnV1cS3t8LAuMddT0w+MDA3MzI5U+Tt0bu2vL+4ucrl1+hHP0tIQUhMXV5G9Ky8\nTqupsNXIqEg6PTg3ICgsLC4wYdDEva+qqrC0rrrRVl9VNTM2QDs3UOPJ0suzrrnCubzbQERFMS4u\nOTw5TtjFyMGzt77AxspnSkxLRz0+WXNab1/5r614vKWqwlevujIvMDwlHiosLi5LysC1sKuqqK+4\ns7zoPkVGNC46Pzo+W7/Izru0sMrJxN1WNz46NDU1UVFvyMK7vbm+z8fTTUNHQDo8UFRJ28jMWs+h\nsVOvrKnaS7dHPislMiYnIytFQ/rEr6qrq6uttsD4VEs5NjM4REZLa8m3tru5urbHXVZCPC4sMzI5\nPVDNwreysrS2uM5XT0g6LzI+Pj9R18S/uLjPv6Otbsu4p2srV1RGISE4LCsnOnzZtbexraepvs3D\nwz4sN0M9LzjYvtHXu6usvr2/vuA7Oi4yLysuM1/ffsavqrC4ubzOUzw5OzcxLz76fdjJurK3x1au\noMNOaKmoODQ/2zweIywxKik8Xr2vrrOvpKa9TdzEQi0tPEk5O1y4scS/s6mu02no1EcsKDE9NS42\n7MPLzryurrrX289pPDQ8Qz4+UNvKxL6+v8DbQsOnul9RraHZODfPWyMfIy8qJy9Hu66qrq+no61i\nPm1vNSgrR1Q/SMessr26rqzCZUdfTzQqKzg5PTpOxb66vrq1u8xqXlNFPDtARVPn18zFvL/PytM/\nR6yr0kPKn6lHLEXILx8cKC4qLzzIraanq62qprs/Mz1JMCYsR+twZ7yrrba0q7XlSE5YNCosNTg1\nPmPLzLu2uLq9v29JR0hDOT1FTm3ZwsLIw77I80c9zqewZVa2n648LEbbLR0aJS8tM0u5qKKkpqut\nrL9ALS02MikqO+PCw7irqbC6r7beOjlVNSkoNEQ6RHW/u7mztLjDy91UOzlEQDk3TcnH19i9t8d5\nZG8/Uqypv0bPoKNlJzLgPB8YIDE3N0a9qKOkpquyt79aMykqNTQtME+4sbavqau1ur/fQTE3OC4p\nLD9cXFPHsLG4vLe71lZQRjs5PEJETeLJy8vBusBtTGbZPzHOq63OU7KgqUYqM0MuHRwmNkRNyKql\nqKmprL5nRz8yJycvQVxT3rOnpaq0u8jHxU4rJzI9NikrV8C808ixrbTFzOJZRT8+ODhCa+Tu4si2\nu8/j+9pqTDwvSK6ltPLOpp60LyQtOyscGyVBz8e4qqanqau3cTg4PS4lJzrOxM+8qqOmr7zMVjpC\nTDUoKD7aUDVAva236t68uMtRRktQSElEP0rkwr/O28e9v+ZMRz8/Qz42Q66forbYrKCrOB4fKy4g\nHCI9vbWuqKanq664XjItMjUuKjH+uLCysKuorr1yPTs9Oi8rL0X6dv3Uu7W7wdTo6PBPPzxCWFpP\nTuzBvc3x3MrKaEZNWU5ARGvXekzGo56r1mayqckpHSEvLyQgK2m1sbCtqqqxvcxoPC8wOTs3O9qx\nrbK5r6244UQ9OjU1Ojw3PGq/vdXjw7vHWEZq1ftUUPLU2udpanNuXFRVX3pzWVnfzN5bW9nI7kja\nqqWyXFC1rM8rHyY4OCkkLtqys7Wvra+7x8loNCwyTF89OtitqbTCua603j0zNDc4NjQ4SNa/w8/N\nwL3E41Vm1NRgRkh10d1USVTf03ZRU/zW0+ZqX1xg/Ph4WU91u6qsvN3Nr7FVKiQuPDAnKTnNvb63\nsa+2vsnhQzMzOkVIStuyqquzvLe3yz8sKy0sLjlO6t3Brqu02G/Lx1A1OFTcWkR5vrrH9nDnZUxF\nQkZIWObf/mzfy8zvafvkfmy6rK253MOvu0kqJS42LSYoPMi+wruvrrXN2MtnPjc+79Rv3b2xssre\ny81iNy4yOD1GVt/Mw7i0vdhg/etOPD5a391p5cnGz2FLTVJNSEJGWOfLxcnT29nV32ZbWl9s88y0\nrq+1wsDIXzkqJykrKi00Tc+/sqyrr7nAv8tOOjhBUVRPaNLBvsfO1t5qTD48RVl2Y17cxcLVZHnc\n5GJYcdve9OvVzt9eVFZSR0FHUlxp4cnDyuD73dj/S0hh1c7ZzravsrzVzdFNNSsqLS4tMDtcxrqv\nrK2yub7H8EA4OkFNS03tyL6/x8fH0HBJPz5DTl1TTF7RvsLiXG/PzvJRWOLQ22pn++9kS0RGTFVc\nWmbizcXJ09nOy9NnT2Hf5FRJ2LWzv97ZvL9cNS4zOTQuMj9g1c67s7O4vr6+zk9BR1JSQkBa2M7c\n58zByPFSTlNOTVteWlzpxsbtUnDIwdpYdM3MdUdMaGNJPT9KUE9e3srEwLy9yuTm3W5BOD5c7FpJ\n57Gqrr3KurnnNy0vMi8qLTpK+d29r6+yuLe4xVY+QkdDOzpK79fa08O7vMvd8WFOQkdZWExN/szK\n3e7Lw8j3Wf/1WkZFTlJMRk9o/ffozcbKzszGz3ZZXmdUSERNeep77s2/vry4t793S1JeQS8rLz9F\nPT1Wwre5ura0ucTZ+1lCPD0/Qz9Id8zDyMa/vcd6Vl56W0hFU2pjWV3f0dHW1tHa7XdvXkxESFFU\nTk/4zMXKzMTAyOhYUVVPRT4/SmDezszFwsC5s7bEZ0xUWkEwLDA8RkNGXcu7ubq6ur3Fz+dYRz8/\nQD9BS2rXz87Hv7/I4fvl5FZESF/fbVRj2s3Z+n3q5/hvbmJWVl5xXlZad97h5+Ha1tvk71tSXXlg\nS0te1M3W0M3SwrS1vXdO1tRTMiw1PD84N03szce/tra7vsHG5VFKSEM/Pkhgdency7/ByNbj5Wxs\nVUpSX+5sT1Xt0N1fX9zR2mpf7uHoZ1hXWGBsXlZb7dPU4X3j3+t4XFZab+3m8e3Vy9LSvbq/3Fbe\n1F0/NDxFPTo3QF3s1cm/vby9vsTY8WpiT0FCRU5cWW7l1c3KyNDkc3na5llQVXDtXFNi7tbbe/7y\n1c/oY1hkdWRTTVNefPbu6O7o29LZ+Wdy7nRbUVj/5+De083X7trL0d57X+feZFtVWF9VVE5MU2Fm\na3Zq3tPW19zb4OjualdPVF9hXltm5dbPzNHSysjJz3tcYmNOQ0BIWF5kcdvKzNfg29bbaktSXFlW\nVl/w3+DZ5t3O3vFyXvnvbGxoaGj62NtpW+vU2Nh5adTN0fhdW1NTTUdDSFJafO3l187JzdLX5erl\ndVFPVV7q3N7n3c/Mz9jpanFkT0dHTVBXWFtx4c/p18rUw9Lj1mrcbFVXU21MYl9O+2n9233c0u/Q\n22jvW2TtXGBXWdLj18rfyczMy2NhTEVLRUI/R1N+3tnRzsPBydfl5G9lUUlNU15g+9/r1M/Py9Lj\n+WdtXk1KTVZPYGxd29zbzs7JzszZ4utfYE1MUU1NUWBZ+uRmz9rjy+faz2bn1l/7X1DqX+7YcNjY\n4NThfmxXW1JQU0tTW2bo++PS3cvO6NPz5ndabVJqXG50ZOBo397e2+Dc4+9wZ15dX1tWYW1e3P3c\n4uLIX87kb9tR6lFeT2RVWu9h3F/JZM3p5s1OyU3UXGj6TdBI0lPm7VjOT8pc4+9Z2lXnY+l03ubd\n2m/TYNpu+Wpjb13sTehRbOBO0Fjj2FTJX3vMSM19TsVF78w+vER/xD65RtLXS79FzmlOzE3g51Xl\nXeBg2WBYyD++TF7CPLxE29lNxk3QbXz4b3d5anhc7Fxc0UDCUd7KTL5QymzdbO/vVd5E3kXVS91h\ndd1Zy0/IUMto2dpe3FbQU81O00/e9EvIQc1RXNNO3P3+1G3OdOTeWMdExE5z0T/JQutuWNVW0V/f\n0FDGTdJ0V89IzlNozUe+RtLKQ7U7xnRGvzvOUVDOQcREzWVcy0LAT9rPTcNM0ehax0nKWF/IP71C\nz2xRz0TTTXxzUctJzfpXxEfBWd7US8ZG0/hGwju/RdpyUcVHwU3W3lvVWeNs7Ota21l8cnHl/enm\nbthf33Bl4l7bWehoWd1Z63V772j57VzhY+j75+306GrkfPzdZNpW2mdv3VXSVePqUs5S1XRf003V\nWu1++vpr9v7y+/L8eeJpbW1n8Xh57V/lYd7/9eRr5Pj9/m3qV89Mzlr72ljZaXPrYHHsUtVQ2/Nn\n013cdvnub+pd1Fbea2Pcae/dX+V5Zd9f4171eHTcU9NQ0FfW+P7fZe3sWtlY6m9p7mBzfmjhYeJr\n6+Z94mXi9t7+5HHdYeBh72L1XXhfamtrbOta21vc+fXbfN3r4e/kbtx36Wlmblj6XX9fcf1t3mLT\nXeJ0be1rfPF5ffRi4GTbZ91e217eb+fka9pf31/va2/sWNlP0lDYW93wX9FVzVjd82rWWNNc7HNg\n6l7uZ3p//XPvcfdt9W3pbOT88ORf2l7meHrecen0a9pc5VpnfmDmdFnUWdl5Y9FX0l548FnnWd9p\n6upoz1XMWt5ucOprZ/Rj7ml4/Vvead/qe9Zg3HPz3FraVO90Wt9c4H90dHR3cvxrceZo4e1j2V7P\nbdzt+OBs9W1rbW9pcmJzYX5n93J/7m308/fda9lm3Xbw6m/nZfZv7/X8d/B28mpxd/D18Xn5YvFk\n7G3ree519nF28Xb0fW/sYn5taO5k43Dk8/L54+/Yet9u8Hxs7FzrXvt9aOte6Gr1+275aflvdHbs\n++hs63Ds+/7q9+fs/vVl9G759mz3ZPV47/JzfG33/XZ4Z/D+5eze/t9w7Hh/93r7cnRuf3r2cfZt\nb/5593J3cm9r73DtbO587/bp7ejp6evs+nhwcHJl9l77YPd78+xz7Xru9379d/v1b/lu63t79nTv\nfXr2eHVvY3dm+X/96fvn8PHy/+h73nrn9XXtZ+5rc3Jme21udfrr7fv8b31ubfZ67Hbp+e/n9eHq\n5vlxdm/79XZ0X/54bW9ja23reGpsaute7epu4fbk2+De4uHf625pbHbqbmdrX3ZnanBh7mvn9319\naXHr5991b3vv3vHuX/19ePhu8Wlncnze6X1udfT1eWd07efm8338/vL49PP+cm5/6ntpZnH4Ymjs\nd+fva+384/d8b/Hw7nBv7+/+fPvu7vhzaPvydmxdc/H7+3t4d+Le4Ppu/Ovn6nt2aG3z/vNkXWF+\n2PFmXXXc3nhc9ujmbE5d5eb7a/Hj4ejz7NdyX2Ht6fVlWOHif/zu+fHnb2ht9eXxXmtw+P1f/HV2\nd3Bo9OzvcnTv93zo0u73d3z2bXts7ed26HFx43Z47Ob+WVtr/PZ6a25v7uLi6d3g6m5ifHRkZmtr\ncF1o7Pno5drb7fVmfuzveWR69XJ16tz5bG/t+19oXfj/ZmlkYfHq9O/o2+3p4uL+ffn99nJ0c3Nt\ncvZ4+Oh+Y2pnbOzp/2ls4/Zub2H65Ghk7Onj6e3f3+9ua3VucmJ65/N++ejc3/V9bmprX2Jke+x6\nb/ru8Wxu7Op8Y3ztentme+bmenX4593f5/Lkbmjx829eb+/ybV9mevVoaHLo3uxp+trseWdm5PRk\nbWd78Xps7+rq82Fo897feVZh3933YW/q83j2fe7h8mvp7Pb9a25vbGxu9uL9dHV+3/tfV1/s9e37\nfOzp3t7hb15oa97zeu1v7N/w7n50XV9seu5kZ3Dv7fzx79xz/t1nd2t94Hhr/t/pZlln6/5qbfrq\nbGHq3Nt1Z+nh2/FaV+fcdl5c7vbu5+zhdGNy7H5wXWrc73ZdXujm7m507ezvY+Li9u1db+fvbv1p\n8dhgevT1415jc+npYWzvbHFr79/ebXX6YPhqYPDp4OR8+9zl7el38m5e/G1jamZ86WNv4fnrYF3q\n++rt7N/m/md68N/7Xmrq6nBi+O3q2eVgZ2Vqbmt+fl5h3t/n7OXccXVu625hbVl67vdo8fL03l1q\n7mp7bend++936t7f+n7eZVtnXfvnaGju8uHveO3udnFkbnVfbvbl7v7o3djkcP9yX29kYPluYujp\nce9x7PVp2upxbXjY7mT1d2RgaH1x5Ojd7lve4+P7XPdt7XtTfXvs72rz5vRzd1/v3nR/XOnobtxi\nbepw9eLgfW3r63JyaWhzZ1pyd//sfObb2t7xbXP29npvblRt5+ZxYunmdmbm82RfYfX52uD64X5+\neW/p5WtXW9/m9fZt797qeu73bmNh/ftjU3Tb18/seOTl33FeYltzW2T0buro6/Vn/Onm5mZgdXDX\n3VdvdGjncf51Z+7s6u/rfO7ven1ZdP1qd3n44uXe7X7t6fFma2Tm+WD8Y/X0b29z7vh1d259dmj4\n/t3vd9vz6+/udvzxXWtr5d36ZVts++95a37r3vD5b3Xl5mhmfn7rbHrXfXnxbX1k6eReW2/veF3/\n+PLU43T+furnbf3wXnh8buJvbHh36mxoafXe/n7o4+r/eeNqZvxZbubx+2nq3O/6eWFd9fp4emXq\n4+Po9P3/5mBibnlzUl/k5nZw593vX+7U+2/w4N3xaGpu+ulicXnpallx7ONg9HNm42vreeno/et8\n4WBe+u9y8/vv6Pfn7u/raFx37G1dWO3c/2j71t5q2d9qXl7+/ORtW3Hf1mxidO3t4uBvclVV997h\nVlrv0dpYWuvcbl9+8e165efo6XPgeF5haeX492br2N7gXWHtcl5eal9raf3t+e3b1dfubHvh4Xhc\nbOtkX3XwYVlbetdse2n61mxuXebZ6Opq3+Z4/OXdZfx+6d9RY33n3WBvZf14X2l16HPodfrgavPu\n3nJl8frs5HJlbXt78PLhbVZyddX9XHJs5uxlbefpX2Tpzt9cX/La73N5dWZw/H3j5Fta99rcbFpf\n6O9t7trfW1r92dl2Xlrpf2Tp4OZzWuTb5mxd8930bF5t6l5a3tHdZWnt5Ptia+tyVmBz3+NmYF7V\n2n3pd+Tsc+3s72d+6/BnW3Zk6+5sYWnS31xa6M3tWFx37+x9buDi9f7ye/7xZWTpdF98bnt0YXf0\n6+Fo/tLm3H5QYm7q9Gv46fHn4d/nXmZnfuxeYWB85e7f2Xlkfu7ubWn3+ersZvDgeWto9nzuZGN0\nXu/t2edc+d7eXFNvdt7vZHLp7XDx09p0ceT7ft9yb2Fh9WHo8Gx3WuHbXl1u9P3kc2Xy2upV+dl8\nYGh75Nt2++XmbFZueuhvWGPb1mVkad3S+m723+dfYul6cnBj++Z6XGpv5t1ycWz24/r2+fH3a+vv\naO3t4u35/ujvW/D46/1NXl586FVgZXLm1dbi2eHfcWxtXXxc/Nj19mzx8XvfeWhq7nJqc2rg7ev0\ndH3z4WBz5mpv3OdmZ1302d5ZW2rv3lpq9evu7t7uZFj49uPaXmL6bvFqdf/p2m9y/Xp6bPrd3X9f\nYt/odOhmfdxfY2d+7vLg6OxqYPfj/Fl4cXfbbWNgdHt41u9Zdfv87uHm+e154N3qfGP672h7bHZj\nXPP38PPd6GP142Jj43BY+n7859zlY3Fr/d3oZGb6ZXzq5PVc5u3ybVbo7nRdbODn6F5+3dXYXWBl\nb+jwZP7taulvb21d3tpiWWTy2uNqcOvqePl79+Pu5W5m6/H07X5e6fBrb274Yu/6W2Vu5ODheHVu\n9NTsWmTw3u16X2ff6OztYVv33XFTUWXt49vg8fR08dn4cljjyOReVu/a+Wpo7/ZmUWt2futZa/H/\n+PDd33v14uTmbm9xbPdpWlj2199pXmTbzXJYXvfe82db/eXk3+btYV903+1eaXDc6fvuatvtZXV+\nfl99cennZuHt+/5t73FrXV1hXvX56Oft23Xq3Ofq5/Vcd2/5eFVz7N3mZ+1oXm72+upvXPPg3Od5\n3uXt4V5cX1rp6nR7fdnaZndnXextWmVxYejf2/di0+v0719gXuTxaFxc7dnR593jXP/e4XNaXX7i\nZGz4ce3lblVt9WtgZOTZ2m3u8evlXmRt1vJWde3xbXz83Nryb3TvdmFf2tX5Xl5+c2RcX+jnXnzj\n5NThZvDf43lfWGFu+d7w6+Hn525jYGv5eVxffejkbnd23tj+7W9kYO7Z+GJn7+vb4Vhm+O7xbPps\navVpfPlo7d3k9Gz+9W1nfuh7bHRqYWno7O9+c/bge1tg6N3s+Gxp3tz9593h+W3s9nhkT3rednZv\n/G9w6+p1XGlzbmBt3+fg2udpe+jf8V9lcvT9ZV9059rZamhpbG1g/W1fbOre6H7o3Nzj8OtpZWb+\n4WphberY/V9eWn3i+WJhd+Pc63xrbux+62phbH7rfd3n+mrm225tZmtt8fRnaG/m6Nze7elqevlf\nZerra2pn7ed0fPbd5/98b2r+7VzzcFl+efx+ePfu6Gxp7tzn7ul+4/ZtffV9avBzd/ZtW2bh5+t9\nXWp57G1b9PT97OHofH7f1N/zZvx8aO5dW27n7Wx8bH70+Wlgenbh6237dOvr6P755Hd/bmB27uV4\nal5z7P19X+/f5etqb+fu8PR06+vnd2t3dO3v7mBoZmX4amxj8+rv7Gh039LX42xgfu95Ymdu+uDv\nYWHy5ed+YV1i+Xd0b+7c4u/96e3u+e3ucHBpeftw93Zy73tfbHjr5nR3b+rf/258ffV6a+3v8P91\n6eN4aGRs/Whu+nr5cHLn3/RhbPLh5fp+cXH7/374df7y8/R5bv717v7++Pv4+/1n+u5wc2tu6t7o\n/Wdv+WxzeW159ubvc/l3ee/tef39/u95+/p/dWZv+vTq7/Ls4d7j6PtvZ2doZF9eZWX/7O3u9+nz\n8G9odH79e/b37/5+7Orn+G9jbnP/5vL+/uvp+/fu63ZzZXLqcXBuanfu9Wts++t6e3l83u1+7/vw\n9XJoZ2R68P73bvne4u72b2p7/vp6eP/q5vB7/ev3cm1oam509u17euXi4u9yan/0bF9ea/vx9e/+\na3Ts4/JtbH/s8Hh57uXreWVye25tbm/v4uvzevTs/O58bG1v/nv09fnz7fZybm9+/3dweu7k7H31\n7+zueWVnfvv6ef56ffL3+n58b2x5b2Npf/PvfHbq3t/w/ezk7HtxbHp5bmpv7/Vtb3J5fvl9+urz\neGd2/vfvdG959fPy7Orv8O7493x5enZ4fPvy929vdHr6fnxuevR3c3n16Oh7b3Z1b3Pu6urrfvTp\n8G5ofPt2bmVjdP7/c3L97+ru/XB3+fb9eHr+7+7x7/r68vHu8nFrf/Ls9n99/fX/em9sbnN4dn53\ncHb9/nl8e/ny8vTt6url5u93bHT8fW1tbHf9f/Px+Pv77/F4b21vefz9/P7v7/j7d//79398enV6\neH79/Pvx7u7w7vb59H1wZmJnam1tcXV1ffXr6u/1+Pn09nn47+vs9Pr37+3o7XtzfX54cW1rbWtn\na21xfuvk5+Pn7fD6enBvbGxrcXj+8Pb27uzp7vV9b21pbXNycXf88e7x/v34/e/u9O9/9e3r93F4\nb3Z6dnh2eH31+v9zbm9rcvny7vD48err7+/q8XlybnZ9enNpZ2tsdXV1c3B5+/Hv9vDx+u/s6Ofp\n7vf7f3/8fHRybnd9evnw8Pb9bmVpanB4eff07unn5+zu831za3FxamlrcX3y8uzp6vD38/n6fXp4\ncWxqbG5yevPs7Ori3eHu/Hpzb2pjZGhqbXb+9vH6+e/t7fL28u7s8nx5d3d5fHRzc3p4eX1+e336\n/H78+Pf6/Hx5/f199vD29fP+/vX9fnJvdXR8/nVtdXV2fvHq6+vu7uvv6+73+Hl3e3Z2cW9ubW1s\na3v8c2ttc3Z++e/n4uLk5ubr93Vrbm5xb3d9enz/+e/u7+3u9vn3fv58dmxlamptdnl8d3F5+O7t\n6ufp6+/2/HV7eXh4c3/x6/V3cHR9eHt6em9pa2pufe7t9PHu7fD49PX7+Pf+eHNxfvHw8PHv8vj8\nenRveXZubW16+n7//fry8+3n7/v5fXVtb25teP7+8/X39fz6/X749fV+f/t4d3n98fD8dHB1eP30\n7vDt6vF8evv3/Xt1b21ue/h5cnV49+7x+Prz8vD2+310bW56d3x9cXV7/PD4/fh6cHF0eXN7/37x\n7unq7uzt9Hx0cXn+d3x7+/n48/59/vXw7u35eHp97en6/nVvePp0bHRxbmlveXl5dHN1dHT/7+jm\n6unk5unm6O93bWhoamhsc318enRzeXxzePn+7ujo7ezt7u329vl4d3x8eXxzbXf99fh5cXJwaGxu\nbndveXNy+vjs5eDk5eTp5uvx/HBoaGlteHV5+ndubnB0/+/2/Pj18/v+/Xz88u/v9/T+b2ptendx\n/P15b2tv+u/1cW9x69/l4uTh5f5fVl3z1s/MztPR2OhfSUFDSlFca2/y4Nnefl1QVmfy4N7b2NbV\n3fNrY2n66+/xfHX7/fZ7cW5oaGpnbe/v7u/k5OHb2M7LyOlAR3zPtcN8WDxaSkpCMD5H3L/H3Fhr\n3MzaUz0+Yc24u8fX7NHN0mxIR2TKv8LWXVJZX1lRRkVX/tjZ62lj7v9pXVVk997e8f1ha3Vqdnfo\n2dLT2efu8W5rXmj89+jm1dDeYE9SWmp5bG957tfW2ON7amB2c2JobOrc2+VsX1pVV1dYX37l3+b/\nYl5jXWVkavXs3ePo4tnNzdPh7utzcfnp2+Z0bm3l5P53TTZBubGtsm9KQUpDOTQrNe+/trnVTVvW\n5Vc/MzrVt6+ww1xS3tPhYz9C4ry3vdtDRF/xc1ZFP1Tf1t1hSkzp1drVbFRq5eR9clts19n6X1dZ\ndOHa6HtcU1dRO+OjqqWoR1gyNjQoNSY9vbuss8ZMW/g+NTAsOriuqarE7ktnTz9AN0LBqaqxzzs8\nQlNBQDs2/MzD02dRTcfG0ddVTGnO1N7eWljb0N3abU1PU3ns5WZPaWzo50fbpKqyrzo7OTY/Kzgt\nPLO1r7fVQkFaOy8xM0mtqKqtzF5ET1A8Skn4ua+vuMRQPz07Ojc8OlbMy7/N1m1s7U9fVlLjzcfN\nzdHx5v1PTVNQWefT3XXoXVdsWnH+abKgrLXNNTw2PDAqMzLYra64y0g4Qkw5LjhBxKeorcBVS0Jf\nU0BOX8Gys7rKb1xRQz82Oz5F3t/MzNHTc2RLTGpr3tLW0tHLzu1iTENLXPztYmRp8Obu5Wx3b/t9\n5qiluLRiO0U6OyssNTm6r7zAaUFEVEwyLzxXtKmtudlwXvraSkBJ37qzuMfcaWpNPTgyN0L4zsrK\n2OpsYlFKW+LLwMXN0dbbdlpJQkpV587lfe7u3vhPSUda1dDDp6S4t1U0PTE1Ky48Pbmut73fQjtD\nQDIxQli3qK20zHJmXOJVS2bdvre/5mViW1lNQjg9RE3oct/d1dPt3Vdh3NfP5ell+NHf6l9QS1Rs\ne+/q3/HlZk1MUt/c0tC9oqi4uDs3OjI7KjE5QLO0vMhDPEJRTTY4Q1+zrbG42tjc08tYUE9uxMHN\n39ro7VxCOTQ7QVjw6c7VzM/Y7lD229ndbXVyz8vsX0lFUnje7G/q5ubrTkhRX9vLvsOtorq8ejA7\nMj8yLD841bO+xXFHRUdVPTFDTsatr6+9ysnr2VlDSE7QxMvRy8bO9UQ3MDg+RmNi08a+xOVsRU/g\nz9Dr4+3Ows9eRj9DXXro9mzZ7WteXnhg79rRuqSmur9BNT48OyosND66r77aWUFNakkxLDpatait\ntMTLxMrdQzlCa8G3wlpfy8/tSjUuOE9e6Gx76cbA8nJKSt3HxNze7/HK0XVSR0le6XxVVG1ZZH5T\nXHbrysqtn62wwTk+MzguJjIxUrOzucZ0T0pKNikuO9+vqqy1u7/Q2k47O03NvbnAX1DDxW1HMC84\nV3xPXF7iwLzWVE1O4MXKYFJe/8vM6FdTb+jT/kxHTmjf2mRRXdvAwK+isbq+PkA2Mi4nNztTub/F\nyvJnTEE2LDRLzLGwr7e7utLySz1FX8fDxcxS2rfD+D4wMDpKSUhY3ce6xexdTGnf0OVZZXLMx9v0\nXFxqbFdPUVNZduV1bv946czDqaS3tmc8RjU6KSk3O8W4vsPO1thpPC0qNEy+s7m1t7Ozv3w8PENu\nyc7eYGC9s8BgNS41QEdDRFrHtrfRZ01K69riU1fp38HKbGdccXFlWkxc4nvt619XXdzP0bymq7q0\nTUVFMzEmLjY7v8XOv77E1103Ki49TMe9vbOtq7XIaD9ET1VNV19mvK620E45Mzw3MTdG0L+1weDN\n6O5sWU1N2ervztzf4d5nTl1QUPlvWfjfe+LtZ+2voLG2vETmSDkpIDIxT8h00sCxs796MisxOjxO\nacexqaewu8vzV0Y7NT5KTs21tbu+5kY+Ni4vO1Ljwb7Hv7zJ9l9PSFdXVGL019LY7Wh4ZlNZU05y\n71xsZFnPp6S3r8LWxU44ISYtLEZAQeK1rK+wxEtAPjAuMTdNy7Wyrqmsr7vPSj49LzA+cc/Mws3L\ny1U9O0NHTlJKWs6/ydHS0crL6k1QZ3FvT0VMaujb3Gl3zM7xWlNSTb+rvsS3wbS70j0tPDEuMCot\nPeDHv7W2vra7c1dFPj5EV0zuwr64uLm/ycvedVY/O0FFSElFTXfX0M7Q4d7md3ZZWl1f7Xn33+7f\n5W9iZ+Hl7Nnj18zR3WZeW0xMS0dGTF7u1Ma/vbu+xM7kXkxKR0pTXnTm539gVU5HSUhKU1rv39LN\nz8nQ2uV+5/Lf2N3Q19bO09n2b15PTUc/QEhRYnng3tDLztDa63ntcV9hX3Lm0tXUzdjpd19NR0xJ\nRUhRcNbJw8PBv8bL411YV1lRUlZQV19VT0xKU2Dy4dvT083O2d/r7efu6u3l2Nna1dTX3+9rVlBM\nSEdIT1FZXV5nYvHk18/Sy87My9Pa5+3t+/H2aWxgWVRPVVBPU1n44+Df49bR0dXe3Nvb1tjb6W9m\nVU1KRkhNVFldZXvy3+H76ezs5ufg39bY29PRz9Tc6e7qdmZbVlJRV1NXVFNZXv3z6dvb0s/U3ufg\n7vrt/Xju7fxvcGhZXV1bZG1wduLk+PX/ePjm4ufZ09nc3uxyZ2ZeXF1VUVZYXF1ibGzx6/bh3dvY\n3OLi2NLW2N7j4Or6aFtXVFlZWVpVUVBcZGj64tTOztHa2dvf5PVuZnNsaXJvb2lufvvu9XFqb/5t\nZmhle+306+/t19TyZurqbvP5cXNsb2VaWlpcWFpudm3o2+Xh2dXPzNDZ1tt8b3JdW2FjYWNfXFhV\nZV1RaHX96OXY2Nbi4tPy59Zv9+JraGRdaejpeXpudHz7cVlqfFd931ll4NHH41dfVl3yTU3N1Unt\nyW/61tj2adxqWuBaceJP8sRvW89w/s5vUtnxSs9VQcfjRnfQelrR71Df1GnwZGnSZFvxYebSbnNu\nbd944u1X0tJa8+JYZODsUXFuTN/RV2XObWPYzepQ2dXZT03ITD/N1URN3s3TPu+4VUzXz2ZM29dt\nZebSeFReyt5B6sZUT9ZdTtjwfWbr2OrcXvTf8d9nelxh9PlwUW/dz/5O49vW2uPzfd77YGdnX2Fs\nal3w4Fvk71jf7VtUWWB6Xe/bUHjKz15YysnV6nLOztjVXENGVvR3Q0N7z8TT3tdr1cvhVklJZNb0\nWlVNa9LXzsvPzNPOyN5ZSEpSRz4/Pz9T7d3Qzsa/wcLI1+v8bFhHQ0ROWldhX+jKx8zW1dbb4PpW\nQ0hf8lZU99rS08/K0HRXV1xs0b++xc7HurnUSzo1NzQvLC41OkvTvru8ubGvtL3XXmJjV1dcd3Fh\n3MXG4F5jX1NGPz5DQz9JXG/h1M/Kx8bDwcnV5/dvcHFNPjoxKTStnJ+y0q+dnbUvHxwdHRweJSQo\n6p6Wm6y/q56ixi8kIygsNkxSSuaqmpmhvFpXakErHx0eJDJqw8fUu6mjqLXP+vtfSj04NzUxLiky\nqJORmqqvnpyzKRUODg4TGys7PbiWjIyWsXrGyDsiGRgdKEWtn6Sro5mVnl0gHiAiISEkKjNNtaWo\nvm/UtrPKVktXYtPMxs4+Jx0lqo+Om7zPoZuxJxALCw0WKNKxuauVjI2bPh4fJSMfICdDu6CTj5ix\nT3O9XSMXGSQ9zLWywVQ9W7zFMyElO7+xr66usLW3tscvGhEdn4uMmLzKn5/aHgwGBgoerJeXoJ6S\njplLFQ4PFR9Tqp+cmZGNlMUdFBkjJys4W8Crn5yoPx8eJzEvJic02auemZunzk5NSCwZERiui4eL\nmbS15CYaDAQDCCaWiomOmJupPBwPCgsSNpqNjI6TmqT2HRANEyjGo56lrravq7I5HhgZIi88P2a6\no5uan7dALzY6LhsPF5yCgIaZXCgVDhEMBAUPqYWAhI6tLRwVFA4LDyqeioWIka0yLCUXDhErpJqb\noL1BPb+krCsVEhQj8Kqjq7eso6i8Py8yNS4fFRidgICCjkETCQkUDwkNGa+NhIGNxxwVFBEWHB88\nrI6Fjpq8JCEcHSgq06ejprbaPDrHsbE3GhYUILqdmKDJSE3Br7pPLCEcHBwxjICDh5grEwgLEAwQ\nGy6qkoeJnNMrGw4PHiZRqpuOkJqkLx4gHicqSZ+anq5OLCpVu7LTLRwVGjmtnp+rxUtOxbjBTSgc\nHR4eooOEhIm7HgwLEgoOHCLNmo+NmbtQHQ8VHCHgn5aQlpytMSchHigtS7uil6C/OCIqWbSyQiUd\nGiXKpqCovVtE2bi+dTspGxEYlYSJgo08IQ8VEgoVFRmhko6NskspER8aGldUopOUkKDwPR4jLio9\nOlSsqJyg6TQgLGvtwDIfISZcrKSfsz9LSVq+3j4lERGfiYuBjTklEx8dDxwND6qajYur0xgVMBci\nLSerno2Nq641HT9qumAlLil7naGrWS41M73AMCccI16unabIRjjOvWtAKBwWv4mNio41JxglMhMp\nGxDdqpWPr7geGEElOS8gS0qdj52gSSA696ifutInIDpBx83wxlfAvEMwIR8rTqeirLpKRXXSzzgc\nE3WQkIiOxzIVLCsXNhQVTceTl6asHR8vJUAwLz03opefnb4rJy+vrKupTTk9RU8yOTg7s6qwXyYg\nITm0qq/HT1nOta/fNi0tNC82p5uckpqvQiAoGRclHC3KrZulpqg9MyoaHB82tK6cm6agr8VVJSom\nLL21qqm9w1FRZjUvKCQtSLmrrr1cSEbqv99+STtJS82/zrq5uuxts8nJwNu9V05pLCwuKy4xPmTt\nv7S3r6++YkA/P269vcna1t7Vw8txSU/vzry+7j4vMDM1SGVPfM29srO26Tw8OD5L/b+/uK+0u9w/\nNC86Wd3PznRASOLTzvpLRDxtwL+5w9dxX765xe47PEVbwdVdQi83QO+5vb/SS0dBP0VN176zsr7C\n5ExSVVtNRVr7zrW5zVw/Qj9Y9EpKPjxFVcfI2MrMwLu8wmhWRzxHR1PawLW2t73bUz45ODMwMj3Q\nurSvwFs6MDg7Xry+wb/HzcW9xW9BOjlNvrS5zV5QX9HKWj85NDtJ4dhhc/TMwMjXaVhOU3F5XnLd\nzb23t8P9S0RPXFJFPD5M17u80U89PEnRw87ZX0/vy7y7zNxTP0JHUlNe1s3CvMHKcUQ7NDU7SWzf\nx7y5vcreTkVOTmLmeOzcxru/x2w9PD9T3M7N7V390cjTaFFHUvXl5mVOTm3TxL/Ez1VCPjtAQkZp\nzrq5v8PsXW5fYk1DQUbkvbm+zHxMSk5KR0tLWdrGuri/yVdBPzk/TnzSyr25uLrKcEY5Njk/SnHK\nwsC+wthVRD08QE7pzszFys7TXk1CQV/cxb/V6F1S/V1ZVElbWmL1XO3j28G+ur3Mz2BMSENNUWLY\nyr+/zNxlT01JR0A/S1Je/GRaVVBb/NzT0s3KzMjIzs3c+WpPUV5r6l5OT0tUfm3d1nXubl1dU2h4\n3cPAvsDFyd/i3vfpde3Y1srjSj00Mzo9RENBQUp61crK0NDW1MjCv76/wcnP2WtOR0RHSE9WU1hb\nYXlfXGb52M7EyNrmXm7Px7y/w8DNycfa6kk5NjQ6Qz8/PDg+QUhWZOTLvbe3uLu+v8rjYFhs+ufk\n6+llXVVFREdMV1dbWlJddOze187Nwa+vuLW9v8X9+UlNQS0tKiswNDtDbc7Lvra7xc5vcOXi5uLI\nv7+/x8/P0uxuX0w/Oz5LTklCQU1d383RysnTy8nIw91xu7rNtre6x1FoPEU4KjguLy82Rjvp+9u3\nurq/ucbeyH743H3/zL7Tyb3P53lbREE/OEFIQE5kfe7Oz+vL0nXfze9ezl1Ft7VTsqy6ucm+QUg+\nKDstJio4QDm9xNC8w8PHtulfx0JFS/9s4LbHurfAvcTIUVRQNz89OD1FSEvX1+PO2H1p3nlp3m5g\nWELWq8/MprO0vbe8RVosNjwkKTA7L02938rKz+rQ70nIUTtOVcu/uLCsrbq2udheR0I6OTk5SUFD\naGtaV2dRSUxa6vv+z8Pa4M5IQbKyV6ejtq2ytFZXOSY3Ih4qMjA8unldwM7Ox8tJ28872sDZv7az\nta+4v7fcUFxJOzlEP0JKREpKRENMSUBKTHbWx7u9v9LV3VBDSa65ZaGprau6sEQ+KSU2HiIvNjE6\nverKvtXJ2vlLwMVMv8LHvLq5trTax7x1W1ZLREdFTF8/OEFCOTtBPz9JasrCw769yNHP2c7cPHWm\nu8+gqa6618U7NSInNR0jNzs3UbvcwcDnvslaUr3NTbvFxba9vbm249i/a3ZsVU0/PDxEPzY6PTc6\nTmDz2tPHxL+/vL7Oz9jg6EM6r65Eqqavr+PBRzknHzwjHy9ARUy6zcO3Y9zJYD3ev2e6ucW0u8fN\nuMl2w3PqcVBhU1E7QEc3Ozk3PUA/SvvQyMC6ubnFzcBlSW5JMlqjxsqerai6+M84OR0oOB8qNkpV\nw77zts9JaOZWT8HszbTQxbS759a9ec3B+73Cd2BkUjY7Ni80LjI/T1Pbwry7wL29vOJi0lRDRFo9\nOqms26Opq6xi2EFPKR45KygtOkvWumXYu81KWVhLyedUwLfP0rvFzrq+zrm+2NHTZUhLNjI7MjA5\nQj9O8HPOvr/FwsfJx+xv5FZGSkw0OKeoxqapo6nl8TlaKx0rJiovMTzXrsRlysXL+khG1cBlXczC\nubnIzbe0yszJ0MbtRERbTTYxMDI4PDtO1NjQx8TFwb/N0cjY7GtLSEFISkFesKmvrq2qtM37NzIt\nKisoKTFI+tbFv8nN1M/Vb/1fXnz1evnGv8K6uby6v8vdfl5GTT43RD48QkhWU2R1Ztb1/9Hf2tzY\n4mx7TUxaVGHe1XnHrq+5trK7z9DtSUNAPDg4ODg9QD1GT0tJWXBs0sjT0MfI1crGzcnKy8jDxczH\nzu97eFtOS0JDQUA/PkZHTU9d7eDW2c/Lz9Hb195s3+DrfF/Gub/Nv7jGzMTLYFVXQDo1MjM4OzpE\nS0RY2dLSxcDNy8vS2NXR3M3Pz8nFv8bBx9LP52pIRT84Ozo6PEFHQ17n4c7JxsbHydbM3VRhVFhR\nTHfEu8a7r7O5trnXflY7Mi4sLTM2Nz9OT1/WzcrCws3c1tXi7+jUzs3Oyb25vb++wcvpU0I+PjUy\nNzc5PUVMWdzX0sfGwMHEx87aVUpKT1lKX8K2uriusLi8v9tQSj00Ly4uMjk7QFJXXfjNzdDM2t/f\n2uP20s3LxsG8vLu9wb7I0fNPQj0+OTU6Ozs+SVFUaOvez8vExMjM1d9nWFNTZFZSy7a4urKvtrq9\nxu5OQTcvLSsuMDM5Q1Nbfc/Hx8PDy9Pe5PLn09DJxL+6ury/v8fU6FZGPz89OTc3Oj0/SVNcd97W\nzcXCxsfL2Or+W1pmTk6/r8fCr7m0rbrI2UU2Oy4mKCotM0leRuvIyry/33XV6GjRztXEury6s7m6\nt7vN52ZFPjw1MTU1Mzk/PkRZWfjO1MzGwru+wcva7E5QVD3TpKmwpq+vq+Q2KyYnJCgmIjnX2Ly6\n19jI/EpKTlXKucK/srOxssZ+3tLraHNv787dSUZAODo1LzM9RE3t+Nm7vMfHyNHZ1mpMWW1ITO1J\nSK2boampuK69MSQdJCcoMiYzwbmwvdFlT1U5OEBOwrC0t7O3trfLXk7nz8/E0M/F1lk8Mi4uMS81\nPUfwy8jQx7vBys/o6X17cWp0WEtbZUW+nJyhpbq1yjkmGR0eJD4xPdu2qaqvWDg3Lzc8QE+6q6uq\ntb/ExNVKUFTdvL2+zOteRTwvKy4vO0xOXt/FwcK+y9zY5OH9VEtGYXBHR0M68Z2WmZ6xuMRNLRoY\nFx02V+Fsva2mpbk7IyAoOF97zbenn6KszE5JTOplWmLbt7e83kE4LzMwLi40TOLDxcnNxL7Kzfpf\nXFpmU1ZLSFBHRXaklpiaqb15MSsdGBYZKk25rq2urau2aiwdHCU/wKyoqqimqbTZOysvR9q9u7u+\nwcHXUjUrKSswPnnt4tfMwbm31FVKT3Xee0lGRFPoe14/w5yXlZyyXyopJB0bGB0req2mpay2w9RI\nLSIfJj22pKChqbC7v9s/MC44fLuvrrnVXUdDOjArJyw73by8xnvkv7q+01ZCS3ba51NCOkJcTWuk\nmJeWn7Q7JSQaGxoaIjC/qZ+ep7PTQywlICMrRLannp6irb7xQTc0NzxT1bmusLjfSDgwMCwsLTpu\nxLa9ysvCw8fMZEY/S05QUz8/SWBIu5qYlJekwCgkGxkbGBwhOMKonJyfrc00JiEhJy5Pw62gnZ+m\ns2Y6MTg5P1FTxLy0tcPvODQtKy0yQlrEvr/Avb7IxNxaRURIQ09DPz5FUEmrmpeTmaTRLCQaGBkZ\nGyI6xqacm5+pvTsoIR8jLD7ataagoKCouPtEPDY7OkBLW83LvstoSTQvLzhIX9fd3s7Ewr/Azu5b\nV0c/QD46O1Fwa62bmJaYosQvJhwXGRgaHzHVrJ2bnaKt2jQoJSImMEDStaqlpaWqs77VTTs6Ozg7\nQD9KeOF3Tkc/RXPv6uxiXFnky8bAydffYkxFPjYzQ0k/rpuXlZmeuzkwHhoXFBUZKXuvoJ2dn6Ss\n0jUrIiAoNVnjvbKup6GgqLbjRz4+PC8sKS05XMtyXk5gzMC4ymNLQ1zSwsftZGVia3hUPDA3Wm3H\noZqbnJ+p0DsvHhgWFxofM/S6q5+cnaCs2DcuListLy0yTbmro52iq6+xuN1CKyAfJy85PTo+d7et\nrbTRXE5k1OtSQkFj0cPNT0Q7Ql7d00m9npuanqq/OzsvHxkUFxskRNO6rJ+anKGubzo1NzEoJCcx\nfrKnpaanpqans08uJSUoKiwpLDjgtq+vt76/xMrjST07SGdpdVVKTUxrem3awby/qJugqa/P6j4y\nLx0bHB0oLDjPwq6hoaWvurzUbUguKCowR/TLvLaspKOpuMzZSjMuKykqKzE4Qdq8tri8u7/DvcV0\nQkNLREVFPjxC3b63sbW1sbK+7OXgQjI2QkxNTElIXNjecFhFPT9QaVxQVOLIvrzDwsbDvcPI3m7v\nalxKPz9EXPtjVkxvycLNT0JHTv7i+mV50MHCzvRSS0xUYW3l0cjEwcPM2O9dRz04NDQ3PUt/ybas\nrK+4uLjB1Eo5NzY2Nzw/Pkvs0MrJycnLznlUXF5cUk5SYc3Avr7I5Pndz/FPSkthe1hKR0pa+F9G\nStvI1+PQx7/AycrO71lNRDs4PkxOTEnrs6ept7mvrrlyOSspKiopJSc2zbKvr62urKy2+D03ODo3\nMzlM1cnHw7y4v7uyuN1PemhBNzE1Oz1GU2rZv7e9xsPI0+tgTD48PUJOS0ha2sbHxr68yVzOq6rE\ndcW3w1M0KikqLzkyL0O/sbCusrq8wdVKMSw1RD07S9K3r7C1tbS7z1FIRj03N0BFRljky8XFwb/F\nzdPrTD07PDo5PUNLbsy/vb27vtho6OtFONikpr/JtKuv3jYqIh8nKSMlO7qrqKioq7S71zcnJi44\nNjtntaikpaqus8BWLiIqR0IzPt27tr/HzV182kozNU3pWkr8zc7Ox9RgT/7K4lBo4nxhVkY5/6Gd\nr7+ypqfNLycfHSElHx4uvqakp6SkqbLMOSYjKzMvMEy2pqKlqauttOUxKCksLjI5Vsu8t73Kzc7o\nTT09Ul1MSFrbycjO1nZm499qXFJf5vDr71U+P7Gerdu7qae7RDUrIycpIBwkTby6r6WkqKesyT42\nOzYnJjRN5r61sq+pp67VQk/TSy4vOTxDST88TczJ72LUu7rM2M/Y4+NXPD1Oa2Nn/drMzM3W3lk/\nPcSsyEu7qqy3xOJBOj4tHx8pMzpA7Lq0rqqvv7y4y1ZIRTw8SExEUNfJz9fDur3Fvb3O12FBOzo3\nMjI6SWjiz8S9urq9x9TO50xBQEJLUVFUXmLsz9dnV3W+td1Zt6u3x77LXPteLiczOS4uOUftztbW\nyLy2us3r08zo/+R6aNjM6Xfk93N+593c9XZ9b11OQj9GTUpES2Hl19PPysPBw8vY2NbjY1pmVklK\nTEtSX1ZHStfB0dK3r7q9uMjp0fk8O0s6LzhBOThCQkX94WL2wbq9vr/Bvb3BytXbz9FnUmxtUU9V\nVFhYR0BHSkVFSUtVbezXzci+ur3Cv8PU295kUExEP0dRTkdGSk5a48/i2L26x8a3vMfAymNu9EA3\nPjkxOj44PU5FStDK78y6v8S6vcrBvcjLyc7U1e1peGpYUUc8PD05Njo9P0pd7dPIvrm4ubi7w8LC\n0mVXTUZKTEA8Q01KT1lVXd/Q2dDGwsbFvb7CxcvP31ZFQz84ODs5OEFRTFDq1dDMydPSxsXMy7++\nwcfHxMTI0ehlVko/OjU0NjY2OkFJYNHFwLy4t7i4ub/Q7e3vXk5OT1NUTUdJTEpISVFcYPDXzsi+\nuru8vL/I125PSEU+PT09PT1BSlBTWv3f4tzQzse/wb+8vb28vMXO1d5nS0A/PjYzNTQ1P0lKWtrN\nx769vbu9xsfGy9HQ2t7jd1ZLS0hCPDw/VllHfsXGy724vr+7wdb0WEhCPjs+Qj4+SU5IU/bu49bQ\n1M7IycnJyMDBx8XBxszP6l9bT0I+PDU1Ozs7RFFb6M/OycHAv77BycnL0dze6H79XU1ORT4+7ds7\n0rS/0MCwzt/B6FNJPTY2Ny84T0JEX9bt2L6+vLy6vsHBz9Lb6VtWX0VLVFNPX+l73tnjZnVhWlVN\nSUdTUFBZb/Dh08rIzcrIzNnZ2WFTblc+PEG9yTmzqLS+tqjL6u85PS4mIykrJTNQS9+7srWuqq6t\nr7XH3cxOPT1DPTlFQE/w59LGvcvKxeZNREE6PUA/R/nO0ce+vsbDv9NXV1BHPz4/OUz6SD1ooa1A\nn56otr6qR0ovHywhHRsmMC1XvbarpqOnqKq8zF9YNS05OTo69MnLv66rvbW4ymM+MS0uKSgsPUBs\nwLerqquur7XbU0c6My8tMDc4PuG+0kmml8W2nqWkTthULjQXHSMgIiBAzrOurKGgpK6/y203JiYv\nKzQ9Zq2uqKaloa61XEo9KCciKCksN0XBv7ayrqyvtszVXEI0LzY2OztF1czHxbiuylatnv3zrb+t\nP0M/LkYdIikqPi4/w6qqsq6srbhfMTw+LCozTd3Cs6yooa67sctYLi0sJy8oMEFbxMa1tq+vwcDM\n6UtCOjhBOjxJ7mxwwcTAyMTCSkymrEGxuLatS9gzO0IeKycnPTVP57KqtrCzvL7iODY4PD43acy4\nrK+rrLS7y1E6MDEuKjMxPHRlxby2t7+4xMzNTE1EPEA+S0VO1G/cx83IyL7WPN2pv1q2w7m96r41\nOUIpOiwqNS910mbCvbq0vr7IVdxMRv1B/eTMtcK1us270etLNz41NToyQEpQzdC+v8m7wsHJdOtU\nSUo/SUtS62rl1s/D0c3OXE5FXvBa1d/Puru3u8fJdVhLMDE2Ly80Rk9P2MTAv7+9vsPD0Onf+OJm\nW/5id2Bf/G1mZOzg3e1n/OziWUlaXVhPVv5SYdnr4tjHytbR2ul6elpNSEZJRUpf18jFubCxtrm3\nwetTPDgxLzIwNzpGWmLXysjKy8jN3vh4693k49vU087MyszPzW3v2Xz2TWBcQklHTElBTUtJcfTr\n18/BycvL6u1rW1xUWllPVOC/u7/At7a+xMXMaUo9NTM0NjQ2PT9LXN/O1MjHzMbJy9Xcz9bU0dzT\n1c3Q/OfnfVpfa11aXHRZVFZQVE5PTk5aXPvT1NnPzc/oamRSU1FQW2No4r63vL+7tr/Fv893T0s8\nMjU3OTU5QD9MVOnO3c3PzcbOycrQzc3Jyc/MzdPW4v58bl9dW1pNT1ZOS0hPT0xSXXvs28/MzMzN\n2+J5XFVPTk1PV1hY5b+8wL22ucLDvcn1YE09NTk9ODU7PT9JT33r6M/SzcvPy8vP08/MzMnGyt3Y\nx8zlcX1tT0xOSkpLSUZDRU1TWWb92tHPzczS0tfpcFple2P03ONeWce8ztPEvsnZwcHgdV9LOjY7\nOzc3Oz5IWvHY0MzPzMrP1M/Q5dzNz9PMxcvY0s/k7e1zYFVVTkhKS05LS1FUYXR16erg4fXl6fHv\nfvjt6Ofh19bsZ2T5zcjQzMPBy8u+xetqU0I4Njo3NTg/SlFp2sfMz9Dr29nPzn7rz8HC087Ex8jQ\n4+1z81pISERISUFFTVdVUG3c1Nns29Xg5e527en+W1vp33Z83/pX+LKv0L2wsr9Lc148NyovOC83\nOV7N1cjZy7/jW1Ft3GBe3ce8w8zAt7vf9fj36EdLZG1YQUxUT0pETl5dUWfNys3Yz8za/lhoXk5T\nUVhabdnzfuPPzWtR5LSx08GtsctSbXc8MS00PjIyQuHK1s/Nz9pNRlVqY13YwL6/v77Axst0XFFD\nVW1QWtjR7W96YVZORE75W0/7y8/f1uT58FlOV15YWm91+Phz//jka1VlT9atsL+yqq7VY35DNiwp\nMTUwMVG/xMrIydBuRj9NY2dgzr29vL/Ax9PQV09kU2Ff18zNyN3gdEw/PUFCSE5b/tbS39LW5HRl\nalJaXmryedvb8XtdZO/+bl9ayauvwa+ss31DTTcwKSk4PDs+0Le8wNxvY008NkZ45+XNt7W6wsvJ\n1N9PSvzp+OPHwcTVb2FOPzQ6Q0RLWOXfzMjY0trkWk1YVF1iZOLT2nTy2e1bVunWZEtWsqa+xrCu\nujk6PDc3KC9LaG9UxLe60EE+QEE1M0vSwMi+s7S2yNnY2ddJUeroyczNzszYST88OTc3Pk3h4/LM\nwMje3NrtY1daZ+Hj3dDS1/Jr7WhNSljoZFZfXsWts8S/uLhcPz04Qjo7P0trX9rh5eZWRDo/S09c\n/sW+vr/FwMTL5nHP327vz8nOytPlXEk/Ozs5QE1YdPDf3NHR3drc5u/q2d/h3dzcbmNgXVxVXl5R\nU2Xn7vXe2d7DtcDDvrvCW2hFPz46PjlCRU1sbuL02v5VW1RjVvDT3sbFwsDIwMfEy+9wYGtWUFBV\nVk5QTU9PVl1bXFxgZ27k1tXU1M3Lzdbr735eUU1bY2no2dbf5vlfXlxdWmPt5+jj1tva5X7Vzs7Y\n2crR2nZOSENBOzo+Q0pT+djPyszOysfM1s/S5fPp4X9ueXdoanf3dnd4+/9eU0tPUk5ZYeHb1dbR\ny87V4PB4bXt1ae/d5PH/b2NbVE9XXVdTWGb4+Ozf2dLT1dfb5vtrZ2Zuc2l7fnJkYF9dXl9t6NnT\nzcnJy87U5PprV05LTE5NTU9WXVxjffB4cvTl3ubc1dLP0NPe4ODr8X159fR8bW9+el9cXlxbWVpa\nYPvz8Onj3NfT2uLj6fJ2bWFcX2lrcWxpZF5rX1toeO7v5tra2dji4efq6/XufH379vlvbGdpaF5c\nYHxtZm/75ev07+3k/Wv39en+e/F69Xpsb259bWpycn51fP3x4ufu8Onb2t7m735sYV1cX215fu7i\n4ex5cXB2b3B4d/x9dWxsfXj57ube5/tvfvD9bGt88+73+PD7dmtsdHb+cPj7fvNsc/zm3+vl5Ov/\nbG5pZGNla21w/nVsbm5+6ubh3tjW3OTr/WdfYl9fZmpodfN7cG5xefb0fO3j5Oz29X1++XN7939+\n9vjx6+vx7OXucWJmY2JfZW109Pfu+Pz38+rv7+vs7Pry+Pvw/nN4c2pobHV+eW9rfejx7N/c3vT2\n9fl2Zmhue3dtb3hyaGZsdHNud+3r7fb27e/xenT6/PT18ert6evr6O35c35+Zl9cXmVmbnzu6u3q\n7O/z+vj8/PHv8/h6cnpxa2xyenz79v/47u7q6e/0+HNrbf379enp7enq9HNsZ19lZ2t2eHz88+3w\n+/L7evf06+/36+jl6u3rfm1iXWZmX2Rrffr68vH1+Pd9fnT/7+3s6OHg4eXt+ntubGlfX2NqcX9/\ndm9wb3f+/vbs5+ji3eXw8u/7b2xscH76enF0cXRxbW/89P53fujk6e/+7urw8ft8e3t0b3V4cWtp\naGp2fnv/8eru/Xt+fXJ89fPr6uvr5+ru+Xt1dXVud31iY8fMX0VBWtPLb0hJ/sfDy2VbfdHO2l1L\nTvfV2G5OVGfh5Ec56bSwxzowQ7620TsyQcq2wl1CWce2vWE8OlvEv+dHPUzRxM9YS1rWx81uTlL2\n1dxhTVDv19t1W2PhztluV1dr4dz6UU9s3svTZlZh2s/T9Fpe5tjhZ1RYXOjedV9efd947F9h9NTT\n8mlYXXTi6npyXv578tvY4ePf6fJuXVFWWW/q9F9XYO3VztXuaV93399uW1Vc4NXcb/p07tzc8/z7\n+GtZUVZ/6utnU17xy87hbWNq287mVVVg3tDVXkdLZc3H11xJUerHzOlQTFXnzdpyVlN3zs7vS0lb\n1sTgTUBO2r+/309GXNfCzVtJRlrUwdJkVVT12dfsTkpX5dXY9VdV89PW9GVnXHDobWNv7fDm2uTo\n9W9fZW3e2fhqWFv11dT2ZWnr5ulmZGzn2fxZUlVu7NPaYFlbduTS13X95fFtX2Ps7exrVvvb1drr\n61lN+e73aFJRZs7N9Ftw4N/S81tWbdzq+HpaYtrO0NtYUXJx3G9eaFjsZGXo4uJs7WT52VZgd2fg\ne+juc3Ns2tfY3mFMWdzhe+x7V+LN1OVsT0ha5NJzSVNa2snL2UxX4dbM2E0/YdbP1ufvQ2vY1Mzs\nbUNP6ubZ49Zv+nlnb1rcdHF3bN1c5uplXXLOZuLyUV1l0vDa2n5/T3Lr0NFnUkBK483N0eZGTuv5\n08/QalDeVFXL1Pj54FhN0+t2+uZkSuBTfs183lXXTl3PVc3K1UlJbUzHyd1fTW5U7MfaXF5gVF/t\n/Gre1fDz39x29GdPU9fO699bRmbMyNLXU0ZR8t7q4u7m6GFUYuxn0s3qcE1NUWTS1NjRV09xX2Dr\n4d3o2t5tTmzf3tLTckFJ4tnTydtZTXDya9zcXHbqVGPOXmtmVm9cy9Vq3FhjYf/f9+L021pL4dvf\n5eNyVH3x59nfbmBZYGXP2nrmXVhs2W5edlpy18555eZOXuDY5+3fSEvW4tXS3vhXWVRa9Xvp2Ofd\nZExe+NvPzNtgXVlXZ/jZ2WP3e1rw89vnet9OWOxVb/fk3Obcf//bZmruZFvz4edrc2Nmzc7q7VJD\nRHrNzMLPVUhMVnXWzN1zak9O3M3TztdUTlJVZNLM1+9PRUlp29rLzWxv8Wvf2PfkcmNdTlZZYd7m\nz8zO0evu7XH+bFtaYV5aX2JbdOP6b2RbWmbs4XJwb+3b2+Hybf9pb+3g2tjb+Xns7nb8/1NaZV36\n4+DWydNFP9DFsaOqt+MxJSEoLTJJVFPCtrGsrrpcOC0oLkTKr6mrtslwUFRkXFJMQUBLWuXV0t3z\neVpQUFFXcdrMwsPKzNl6XFNYT0U7MzbBpZ+Ym7VZJRwcHSgsNXJbv6imoKGxTyceHCJBvqmiqLHA\n08jHwdBGOjAuO1nGuri841JFOTo8PkdW18zAur6+wM7daUo+ODQ1QHvmT0K5oaGUk6uyLxUVEBYe\nK7uyp5mhop67RCsbGBkp5KyZl56lwzwwLjM3TuFyxL3Nz/dIPj9CPD5AOUFi2Lmvr7S+3UdASU3z\nyuFRRj06TdPJ5UTWrK2dlKWu7BkVExMfKtGtr5yep52sUjkdGBogR7ugmqKmr1xVTUZLQkw8PF1N\nbsvk6N9bSEpMP0NWX9m/vb26vs/P02JRSj0zLzM3VLyxr79quKusmpzB0CQSFxUeN06qq66er7Cj\n+z4vGxwgMrunmpumquQ5QDI3Pz9PRnTNbMjOT1tJPkZNYG352+7Vw8W+vs/c+VhMRkY8Njs/Wr+2\nrq7QOUO+vaOYq7XoGxsbGywx4b14qK6+nq3bzCgeHyM+yaeeqaaub8trOkM+P0FP1PLMwlpRSzpC\nTU1UTExIYcfBta+5v8lgR0JAOzg+PVC/uLKvvWItLMvBqJWlsrgeHB0YKS1EulutqLicoLu5LRwc\nGypRr52ipKfP09JIR0I/NTdUSXi+3PnYVUpSXElAVkFFxMS8rbK7xmk+MDExMEbl17atsrO5+TIk\nMs7KnZeqpc0fJBsbJCFBSVuiq6SXqbXnHhsZHTbfopyjnqvOwVU9ODMxKjpSULm0wst9SztHY0JT\n+UhzzMy9trfBze49OTw0Olv60Ly4ury/cC8jK2/FnpOfn60mJBsXHh0tREWlpaWVobG+IxoYGitH\nqpyinqS9udpDOi0tKjB93buvxO5ZPTtMbGlwbEQ/T3jHsayvtcpCNi8uNkrUwbe2vL3J7UMoHCZV\ny5qOmpekKCAUEBcXM/3LmZ6flKO21h8YEhUjN6WXmpaduco7LSomKygx386vp7C3z0k+OkZCPUc2\nOWbRr6Wlq8BHLSUrM0G+u7+83/79/s5UOCYbNLiojYyYl1gYFAwQGCC6uaWWo5yYtMQvFxMQGS+9\nl5KVlafsQCYjJCMpLE25rJ+grbpBLSsrNz5PZEZq2sqtqq6y3TstKzM9b8HP28/51sG9veJGMB8d\nOa+fjoyZnkAVEw0RHSa9uK+aqaGZsbk9GxcSGjLGmJOXl6tHNCQjKCsyNHu4tKOirrZ+My0tLjI7\nR0Bcwbytpqy60zgpKS41UMrIw7q2trW3x0s1KSMgI3aim46NnaM5ExMOEB0mxK+ol5+dmLDKNxYT\nEhcvtpiRk5WqSC8cHCIoOmO5rayfpK+uVy0oICEnM0/cr6mrpa3IWS4lJCo86rOssK+5z81rREQ2\nMTU3OzrCn5+WkKmxQRMVEREhLLmkpJegqZ/eQzkZGRocN7mblJeXqz4yHBonLFy2rqqtq7DKv0Ur\nLCMlMUPHtq+uv8XTSFxOPUpHS+fj0MvRy83Ix9jSZkBHPDEuL8qsoJKZoaUpGhgOFh8ttaydmqSc\npd3YJBcYFRw7r5mUkZet2CkZHR4o6ryuqqqstbPDRDwqIicpNvzDsrOztcLA0U9WQDY8Oj5p0Luv\nr7C96k42Li4tLzI0dKidlY+YqOwYDw8OHDa9np6bn6+r2Tg2HRkbGy+1nZKSl6VKKBwaJC1VsK6t\nrLG3ub9vPi8mIykvRr6wrq2xwMx1RUE/Oj5ETtq/tLK3vPhBOC4vNz5X2ca/ysmvq6mfqMzjKBwi\nHidCTry7uK/Es7Ng3TYiJiQr3q+gnaCoy0Q0KTE8QtXLz8C4trKyy000JiMmLkq/rquutdVYS0FP\nVk9bV1v22srHyM9kVEtDRk5cX2vy6+hq3rmvq6Kntbs5JSYcHSgtXbutpaqosF9OLSIoJy/fuami\npKe3100uLzEwWc6+sbS2v9hiOC8tKC49dLisqq/BVjcxOUXZvb2+yu1sWGRpWFpNSlFZ2svKx+pO\nSD0/SnW1rKmfqre6LyonGyQpLtfFrKeuqr9dUy0sLys8UtmzsqyqtLDDfOc9PT47TktVeVvn29vO\n3N10TE1BP0dFUu/Nu7WwsbzHWTk0Li85QnrJv7a3ubnMW0AvLS40Sta9tKuoqqSpt7w5KiUcHyQt\necetqbCuwH5kOjIwKzJA7rOqoqGorcpDNikqLTFIbs+9urm6xd1QOzYxMzxSy7ivrbG7z09CQEFM\nVE9NREFJW9C/u7jB1F89NzU3Q13Nv7u7vLOwraawtdYuKh4cISU767mssa+51tVZR00/P0xN3si8\nsLOvuNLjOzU0Lz5IXcrUxcTPv8fP0lFAOTM4RPm9tbCxuslnRzw4NzY5P07nyLq0tLrG9kY3MS8z\nPmDEsqysrq+5v7/c4l06NSsoKSo0QPnCvLi5vL2+zNVqRkU8Pk1owLmxrre950M6MTE6PlTn3MnG\nw8HJ0GdFPDg7R/jBtrCzvMxeSUA9Pz5AQkRPfcu9ubrAz2hKPj0+RVd/z8bGvri3r621tc9DMyYi\nICQtPc+4r62wt77G4PVcRkQ+P0Ze1MO3tre8yGtLQTc7PjxLUnHOxb++v9RgTkBBTVzcxb6+v8np\nWkg9Ojg6Pkt0zLy3tbe+z2NAOTc4QE7vyMO/uLS0rbG4vE08LCUlJC0zTsvIuLm5uru+ysxlS0Y+\nP0lo3MG6urzD0m5ZR0dFQ0dCSk9qz8a+wMjWXVFMTl544N7d5njj4N3eZU1BPTxAWdnBubm8xNRn\nSz86Oz9IadPHu6+uqqmytno5LiQjIyoxRtfHubq2u7u5yMHuUEU2OztL38i4t7m7y9n7TUpAPT47\nPUZiy724u7/OX0xIR1Ju5tXSz9vnflRRS0ZHRU5i6czGv7/Ize1YRz8/P0pX5sXAvra0ta62vcdD\nOSsoKCgwNU31yL65s7ewvMPVTkw8QUBHX1vc0su+vr7Az3NNQjs5Oz1N7cu9urq+w9x1UEREQk1Q\nedvZydbeaU9LQUZJW+fRxMHDyNZkUkQ9QkRS5c7BvLzDvbq/tsHSeDs2Li8vNDw6SUzp07qysqy4\nvNhOQzg+Oj9MU9XCura2vc9rQDw8OT4/TPHLvLi1vsfzTU1DTEpPWmzSzcbN5lpFPz9CTHzZx8TF\ny9neZl1ORUpKUW/czb+8vb+9ucW8z0tNNjY3Ozk6PzdMWs+8ubO6uMfZ9klBPDw8SGLZwL+9vcLI\n3PlLPjw5PkFQ37+1sbK8zmhGPj48QEdW6cvFyc99WExJR0lOVPbVysbG0tvlbV9dTUhOVOrKwcG/\nzce0vrXBTkwzOTI1NCw4N2TDtLC3scG9yV9GNTUxP1n0vr+9u7u8z91DPDw7Q0hbTmnJuK6ut9RX\nQ0FEQjw5QFXNvbvJ6FVTbV9TRD9GZczJydh+49jM204+OUncwrrCxsfLs668vEw6RDY/Mi4sL1Jj\nur3CwcO2vLxfPzw4TFRmVVTYyre4xtZLTU9ZTUBAPO/Mwr3SxsO4v89eO0FCT09PS1HRzsLNb1lT\nX15gSkZRadrOzOPf5G34V0VCTN7EvsHTx73Ctbbdzl09TTY2MDY9PdhY2dDOwMG7285uTlZMVkhf\naXbKzc/M2tvi/FxLUkxd8Vx24ObYysXLx8ng2mpRTEVFS35u93hbXn7mffFeVWFq/fT4bXjc2uN8\nW1BTV+vFx8bHy8PHy8nh3N9LXT08QThNPl5iXM52xtHHxs/IcP5PTUtJUU/v3NbO1N3Z5eT1Zl5P\nZlFUZ2zz3cbJvr/L0OVwUk5EQUdOVWP079PPz9xtW1BSUlFTXXDu2tfh/ezx69963szIxsfYXca6\n0dDqQFBqSD45OTVIckVm5dm9tLbJx9pUdk87O0JFWdXd5MS+xL7KbF1mUElMQET569rKycC9vMnk\n+01JSD89P01c3szSz9Db6WlYS05NT2f68Orc4evk2+jh3Ona1c/X0dhoTVa+yc3ITeLX2Wk6PDE5\nTUVNV9/HtrC5ydppTVo9Njg6UWnNzMm4uba7yfJQTENAOjlEd8vGxcXBvcDWXUdFSU9ORk1c3cvK\n0Or5ZmVjT01OV2p9/v/z1dPSzeTo6/r0aG5jX+7e3tXxU/zGycvJ39rU1WBFQzk8R0ZETFp9z8PD\nzs3a6upbTkpQX27e0c7GxMrO3vheWVRNS0tSX+zY0NHS0trb5PllWFxeXllbW114ff5rbGp05vPz\nevri1M/Y3ef3eHJfXlxdYGrlbvfuc/Nx9WRw4/bc0dHR221l4tnm92FXXHJ9X1pQVGZoWVBNUXDb\nz9fd6ffb1d1uV1pn//nq39vWz83N1/L6ev5rXV5SWF1XWldYVmXs693c3Nva1vT95X7vfFtfYWxn\nanV85u7u5P9sWVpna/N8eOnd1c/T3NHT8HtnXVxlYVplbXBteGRf53p3+VpaX2/s6+rr5eHc3mtq\nZHfl7Px6d/Xv7OLkcG7pd2Z2XlJl9/fp6Ons4+Ho5dn7V/3v9+9kWl95+m1qa2r93uf9eGds69vp\n5ebq6uPsXGn/bXlqam5yc1r36V9wb+Bqd9Dr3tf13NhgXXtdW3lnanVnbPTx2eBcaXl+2eZgWvjo\n7dx/XWzh3fbrbFFi7X11Ymxz2tnr6mvx7+Tqb2VXYXPn93n98+Ln3Ohx9Oj1cWtpcWX86nVoZmdh\nbvT18el99d74a23v3t3kcHjz7u5u++v8aVtk/29mW2Du1+xebX/c2NbrcG1pcOX0WGj36mzz7lz1\n6u3Z5WtYbGr2+mZjeeDk4Obt+O3k3/dwc3znbV9xYuLda2Bwb3RdVGBt92Vo7Ofi/+jk2dnv7/Hq\n9/d7YOvie2V59GZuenNycGxcaf75b+Hqcdfc7ur0Xm34XXboaHD3fOzs8v186e7+e21nY27+9nVt\nfG/j2/Du3uT95+9ma2d97/1kW15h4frv6Ozf597u5OVhemlefWxqaWtrauP6cnz17XxtYG1vZ+zm\n8+rq9vPi1uP572xo/XteXm9q+Oj09nDt7fHn7GZrfHv9/HFx4uZ5bG96cHpsXWR0/enn4ePp5/j0\n9XZwfW9yeHz97Hn13u72/G9z+etuZGp++3H4amn+e3py9ux5euzj7Od4Zfbn8Hp3eHd9d/j/fX5s\n7+dzbWx6//z6c/Hq4ettZl9sd2r95+Xr73v/ePfk+2/18uvr9/xs+/VpY2dkX2d2//vw/3fs6eTh\n4+Pu8u5xaf77dHnvdnn0cHh3eHv973H65/dpbW9l+/5sfXhvefj09uzh5+ji9XJ/+Xx5bm1z9uz2\n4eRue35pYWJeZXptf3758G7u4erk8/fl5PD0+3vybWZqZXvy+fP79u7+9Xx483BoYmVqb2987/zm\n5uTf+frycXF5dGxlev7y7vzz9e3k7O5tdvBye/z5b/DyePls+nf2+Gt6a3l9+nVu7358bmr/8eTm\n5+Tu7vR/bHT5dX50evpsanD28Xl3cPD17ux+7nz+9mxuc3/++Xx1b/3z8+X2dvjv3+D3dXh5bXlq\nZ/jxenT4Z19rbn5+fXn57vL55ex68ebp+3tzbvDq8/3xdnbyaWn6dnjz5Ot4enL+9/h2aWtseHV6\n9/fs/Pn58X596eLsav/3c3ty9u/u7/TufXNob2xn/G9fZnF8+/537uXp6+jj5PPy9Ovu+2tkf/Dt\n7/x5b25iY2xubXf3dPT0dO77/fpw/ml59frvfufr+Pt57X/p7W/4ev7y/vd2/e587352d2v/am5j\nYux6bH3n5Ozq/+7hfW7q+G789m5453hobXFxbe5r/d/89enrd3D8ZfXm/vbv5/zv8GZudnZsc/5l\n+fF79/3p+e57Y3Vse/73+3zn9Pfv8f/46P77+XlrZmJebP58//VvcO3r7ufn7uXm6+7t4+nf6O7i\n8O/yeWFaXFZVWFleXV9faf367enp7ezh+Pz5+eTl4+vv5e3q7P/7evt58Opxdm//6urpbU9Ky7u8\ntMTk5PjgSD8xKC41P2DZ1824r6+zv1NCRT5BQD49Tc2/s7C2u7/A1XhKNjI1PUlieG/ZzcPAxtlY\nT0xTZl5cVmfp2s3fb2NdYF5bUE1j79THz1/srq6vqtlaVEZFLC4iITdBz7m3u7KorbbNOiouNTdF\nR03esaeoqLd/TVE/ODssLTtyv7izztDI3dpTQDM8WFzExtnZ0snbzmg+R0hNYOPg89vf2M3M6FhV\nS1Jrxaqusa3jy9pDOiMlHyU/Ps6/tq2opLLKRi8uNTg0P0rTsqmpr7TK5Gg/MisqM07PtLa4t7/B\n+ko3Lzc8S2vUycC5vL/QXkdBQD9HSkxY8svIv8jdzvj3/ltrTnizq7Owv3zaWT8pJSUkN0pkz7iw\nraiw0k1ANjg9MzlPyreurLGytcRnRDArNjY1TNvQuK67xsplSk5ENz5PT9i9ys7E0/v3XkJGVENP\n9lpw1MvU0t5O+9nv3n9aULanurm95MLIWysoKyc1PDQ50beyqq/Gy8P8RUEyLz9nfM25tq+sssHL\n+z46Oy4tNj1Y69TKt7K8v8zvUE8+OU5RZ+XQzca93Pj1TkhDQj1JY2re18/Av8/Z2ODlWc2xz8u3\ny7rMYDovPiopKyo4UM3duqqurq+92NxRNjg9PEJd2cGyrri6vdttVTUsMzUuROTrxLu5urK9YvpO\nQ0ROQ0bcaPrIxd1t+UdO/EpDUub8zsbdy8jH1/jtTM63Ynmyxr3D3nVHfCoqMyouLT5Cx7XIsqqq\ntrzB9tZVNjhESUVX2NzKxdzLwdpf/GZXZlpJT11JTF9VT/rw5cjCyMXAzuDgWkxHPz0/QURS/NzP\nw7+8vMXQ6HpSSMlvO8a7xb7AwM3LTjhGNCktMzAxREpruru5r62zsq69x9BnXE8+ND08NkVMVFBt\nwcXIxMDF1uNj7kxCSUxMTHHr8ODTy9LS2dfoXlpdU0hITlBMWOXV0s3ExL/E0cnDVtu8UNXtYt1P\n+z9fPjVLOT02R0E/Y0/Mzce8uLS7tLO9usfP11lQPkc8M0E6PURNWv3S48bN0c/U2mnebGdpauj6\n2NzUztLW4ftUWlhIQ0tMSmJ+293fz9HRw8Blvr/fvuPP8WRpTV87Q0Q9PT5IPkFGVF9q38/Cw8G6\nu7y6u77JxMlhdU9IRzg8Qj48R1NMXHzY3djNztLn09jb4ufT6N/Z3uhw7XdgUUxQSkpOWV9jcN/Q\n0MrL0r/P6Lvg28j1y2ru9mtbP1Q/PDw7Qjs+Q01SWtXUzsO+uL27t7q7xb7J5NdZXUU7Qj82Oks+\nQk9e5Hbbz9Lb0sjY29DS0NzSzNx29udeVVtNRURITkZNW/nj4sjIy77E07fD1Lvpydto/UhQO0I7\nOD47RT1EUVJpV+7e2cfGvb6/uLu6vL6/x9V25UdBQTk/ODxAP0VKeFdz5NbN28jKxczNxtDO1tPf\navteUlJQT01ITklLW0v8aXDY28e8w8evxb251L1X8ExGPjRDNDo1Oz86TEpmWe7IxMHEvbm+vbe8\nvsPDxttQX3E6Qkc8PjtAR0ZCVfpe9NjO2s/EyMfOxcfQ0NzP8lxkXlRIR0tLQ0xLS1dR9ezt1dO5\nvOyvtse1ybrP7ntFVS82Ny8vMD02PUZZ2+LIvLe6urG1u7m8vcje0PVISE49O0M+PUBAQkxOT33i\n8tbHzs7Fy87Hys7Q0+Lo32BmXEtRSEdISlBGUXpbcNbb68iz0s+sxLy5xr3k1URMTC00NDAsMjo2\nRVBkz8bFubC3ubC2vbu/xM7Td1ZTREM9PDw6PT5ITVF16tfV0MvSz9jU1N/R1trW0dTa2n1mX09O\nSkZESElETWB3Z93I1seyvdKuucC6ycFc3T83TC4uLjMuLkA6R2zdy7y3u7Svtre1u77Ezf/h7EFJ\nTUc8OkBFTTxG/nRbV83X4+P90tfl8c7H4NTQ19fh3frqXFBuU0tER09KUU5n0N/Ty8jLvLnju73G\nx/nEUlxROkY7PTM3PTpDRU5Z2NbTxsK8v7++wb/FzcnMz95zdVxWTUVCP0I/QUlLUVlj7OHVz8vF\nwMbIyc/P6uD9YWVRVU1NTUdPT09dYHP+4NPQ0tTO1trZ3uvt4m597npxZ/h/aHllbWldbmL+dH7j\n9utwbf7+cHPm6vjyd2r/al1YVltXWmRgfeXf29nPzs3Kz9DV1+NlcGNdXVVdU1JQT1dSVFdeaf7b\n2dbT1M7O0NTa3u9vZ2BkX1paW15ZXWBhbHXt4t3Z1eDe4Pnp+ex0aHRv9O7l5u/vf2VlX1xdXl9d\nXF1mZ3T87Ong1dTR1NTc29rn5PdtXFZXVlRUVlddXGRufeXn2tvZ19jX39PW2d7q625+ZWFeWFlR\nVFZXUlhdY3R539jU0M3Rz8zP1ubjemdlWF5TVllVW1VZWFpdXHh+++ff2eHZ1tbR2Nbk6N/56vj3\nfWJlWVpYU1lUXWll+/zt5OHa4d7d3d/t5uXo4+bl6/duZWJaV1RSTlJXV19v7ufd19LQ0c7MzdDS\n2eHvemRVUU5NTk9PVl5dZHjx8efh4uDe19bZ2d3f7frud29mZWdhY2Nvcnx3a29qbWltcHD99Ovt\n6eHj3t/e29zc6vl6b2pqYmFgWlxcYF1ZYGNqffTd2tvX19fX19vg5vL1c29pXl1cW1tdZGtvevfr\n7fD/9+358H59dm/5dnZ1cvLq6O3t6/L07vH3+/75/vd6ePv8fnX67fL07fh5e3dtampmaG9yV1/F\n0m3nTnL+TF5PZ+tf7eLZw8zd1N3M9VleTPdeXmJ01d3lat9VVU9DT0/dT+/L6cXL1NHQ33Be6Fhl\n51DxX/N0UuljcOhsfOTsavDd4PLrfm5qX1ZbWXFhXeja0nHHv/HFytXG2tJITnQ7Rj08P0JOP1/c\n2dXDwMe6ur/Ex890dlxES09FSE5PTGJtVmzkdF/wd2bp4Gxu2Nzi09XS1dHcZd7leXxNSHuzvW+2\nwLi152EyRD0nKiYrMT5OU76tq62tr7O3zFs8OTw2PDo/fsq+vLq3uLm7y/VSRDs0MTE2PklX8crA\nvLm9yMzdZkxEQj1ETE1g38nHx8jEwsnVckHbqbjEut+5xto8IS0qKC4pLjnNrq+rq6+ur8dMNTM1\nMz46Qcu4rKytrri62DsvLS4yNTg8UszEwb+/vr3D7FhUV1RQTUxTaW1ZX+rc0svLfmrT5l1aU0BL\nraauqbrAu8foKCIfHCYsMTlbs6ifnqvA4UtEOi4oJzh2va2ur6ypqrXTOSsrKDBPU9XKvrW6vVQ6\nOTU9Pz9Ka8q+uLa/yNdfUUdHSUxYX2vazc/cY3NIUq+qrKu6vtTd8ywnHx0iK0hdv66so6KnvEQw\nKSowNzhB5LeooqOuvsf2TjUrJSI137SorbO/yNlIPS8qLDhR2r7ByMK8u8LXQzU3P1zgz99wyr6/\nxvZPPj3FrKqpscvUWVE7KyUdIC09xa+sq6qrschKLSUoKzvoxLayrayus8pOQTQxODpOSs+urqmy\n4UUtLC0yPT1X2Mq2sLS81WdFQEI6QUxTz8S9vcDH7WdQP0A+Z7Gqpqe0vlU9OiwqIyEqMHm2rKis\ntMtHOS8sMTREzbutqqqtvNBLOD89PkNC9dC9r7Cvv2JAMS4vMztJb87Fvb3GzPtVTUNFRk9/1sDC\nyMzqZ1pZTEFISFTBraalqLXSRDIvLCwrKzM93LaurLPJTzYuLC89WMm7t7Gvr7G960U4PURU293O\n2tW6t7fLRjcsLDI6Ufrf1tTHx8vNdFtTS1Fg3cjExMzjeFxZaFxVT0lOxaumpqy+fjoxMC0uLCwz\nPdm3rq2600w3MjE2P0/Qvbiur7CyyfNAOD9CZuHYy9HOxb690E07MS0yPlD32M3IwsDH22lMSE5R\nXW3t3c/GydbbeE1KSVJWR9euqaequMtMODMvLSssMkBmv7G1u8ZdQzozNztJ2r6xrq+zu8nyTD87\nOkJp18S9xcW/ztB7PToyLztFfcvOycvPx9DvY0hETE9a3NrbzNXZ0PNbXE1W82rszbapqq64+0o9\nMzM0Li43QF7CvL7C0ltGPjo6QlPYvra1urvAz99uS0ZHSFrOxMjJyM3JzmZHOzU3PUhTfeDm1MjH\ny9hlUFf25eDd6dzPy8rVXU5NSExQS0pOXtzOxb7Cys7Kys3KzdnsXFNOS0pGQz89QUpOX/vq4f5w\nZ2Zva3v05tTLw8LEwcHBwcjX2t5dSUpEQUlMTlhUTlJVU1lqZmL+5drNy8/Q0+h3b19ibV1XZ+ja\n09fp6tHLzszKzczIy9PjVkRAPz9DRD8+RExc6+trYmBw5Nnb4d/f1srDw8PFysrFxc3tYmdcT0xH\nRkhIUGFmX1ZSU1pgYWhq+dvOx8bK2fNzZV9cUk9XaeTT1ODi3uPq6evy3+HbycjLzc/Y3+heSkE9\nPUFISU1UVllp9PP2bVpcaX3p08rGv7+/v8PL2dv4VVNdXVtiZ2VfWVJPTUpJTlJdf9/Uz8/Y3e9j\nZ2hfZ3J7/Ont39DW6fp8b2x6797P0NnPyczOz+BgWlNNUVJLS0tJSk9UUVVVUlVfc+zY0tLLycnJ\ny8zOztPc5v9p/vZkeuR9XmRmVVZTS01VV3Db91hd39ne3+rmdlJYZ1pf3u5XctXY3Nfl5dbd+9/H\nvsW+vdnl3GNMSUE3Oz47QU5PX9nZ/PNgV/3m8uba3My+wMHCy83P3GlkWU5QS09r4+B7allSTkxO\nT19yd+7h2s7Jzt56Z15ZXWhs897k93praWpcVVRZfdbpb9e7r7W+vsXIzU83NDM2Pj06RW3Nxsrd\nVU5aV0tQXefCvsHCwb/Byt1gU1xeU1haUnXU3ubrZHfxWU1KS1hn59fc0NPd3nFbXVhPT1BTZe3n\n7vfv7dzhYlxYX9PY7tDQwa6xvrvL0tJFPjUzOjQ4QT9U3WV432vn7mZ1ZuDX1cfFwr6+wsjO33tb\nVEtGSE1mc+r5aef9Y1xSVFhcZ2nz0c/NztbT2ul1UU1MS1RWVmFo6N3m52lv2ujz8H7s2cG2u7u6\nvrnNaEk5OjExMC45Pk9s4sbGwMTN1d/u/PBs89nMxsjFyczL0/tZTUlJRUhNVXnv5unh4H1zXlpe\nbens5tva0c/T4XBWS0tNTE5YbOfVz9jc3+z2cG5z8ODp1b/AxL7Hw8bZbEZHPTs9ODk4Pz5DYWDf\nz8bDv7u/vsDEys/Tc35cTkxLVE1WXVNe69jc1eDt2OJvWVpOUGBhX/zj9NrS3drZ5259aVpmZVte\nb25z7O/j3+Ht5+h96uv79O56bXP07u/e+Xfk597l4+1092taUU5NSk5PUl5239bQ1NHP1dfb4PX3\nd2FwenL93uT48W566O9tZmNaVVdQT1xo+uDb2NTU29nW3+73aGl4bGj7f2369nR97n5qbWhkbnVv\nbG139fxyb3n95t/e3OLZ2dribmRZWVpXWlxfbe/k4t3f4ex8cGVfXFtfaWr/6eLe2tTS09fd5+/9\ncGlhWlVUV1VWWltjd+nb19TT0s/U1tji9HhrZGBcWlpbWVdXV19rfvLv5uPk4Obp6vDx7unq6d7b\n2tnc3+Pj+2VbVlRTWVxcY2lxcnZ7+/psbGxtb/rt6+Hf3d/a1dvZ3e3/cWZbV1NSU1VZZfjm3djU\n0tHQ1Nbd6vltZ1xaV1ZaXF9bXGJocHr59/fr49/e3N3f4+vy8/B+bm1qaXp7e/rx7Ovr8PXycnRx\ncP3z7vX0//19bmljZmJlb21wbnF5fn55/vTs6uvu7ejl5uvs6ury+v50d3p8fnF0f3t3bXR8dnhs\namlrcnzw6e3r5+nn7n5ubnZ58/v27vJ7bWxveXZ3cXf9/fX3+vj07fD48fD2/v17+/Pz+XhtZGFj\nZGl09ezn5Ojs9fr5fvt9fPn06u59fv7z/Pv3/vr39/t3cX39fnZtbm1pamFfYWN57uTi4uHe3uPp\n8vp+dWhgaHT69/X18/By7dHP1WlNTFVy721SS09y2dHV7W/02tPX9GRgeOji6XFeXm/m29znbVBu\n39LTZk9NV/bf8VpPT3fkzM7dcW/t3NnfcmBmbOjh9GZaWmjp3OBvYGV07fJuXl1m5tXV3fJkZX7h\n2+F6XFtq8ej1bGBocvjz+nj87uPh8nVrbPXq83toZvzg2+f6b3Dw+e35aF5XVltocXVyfHN36t3Z\n2dnd5Orv7/X1cWNaW2D96+ftc3P97O71937x7/J7bnT67Pp4b21zbm1yf/l3bm5v/fLo9n5+9+/u\n7vpwcH757vxzbnr48u74ffjx4tnb72xhZWn57m1cWV/14N3q7vz06ut8d/j6amFgaXJyYF1le+bf\n4Oz+fOjb1N33bGBga/v7bGpr/u30e3d6fHJ2++rvemhkevXn4Onz8/9y7d3e/GNpcvPw8fdzaFxf\nbGpsY15l68/HwsDBxs/b/F5NQz46ODk9Qk5ffeTUyMC9vcHJ0+Xp6mxZUVJXX+/a1tfY2eX4eGpe\nU01LSkxTWWBeTWm/ubCvtLC+yMXcXDstKygmLDE5SEvcxb+2sK6vtru+zuhxW01CQEdRZtnMx8nN\nz9rvX1RFPDg4PEFNYebXzsG6t7m9xNDrZVdNQjw7PD5DTl5OYrmuqqywrrXH2vFSNSkjJCUmLjz0\nzcK4r6ysq62wvm9IPjw7PUJFRkld2s/BtrCyvMnfUjsxMC8vLjE9T/HKubCusbS3vs9oTUQ8ODo/\nSE1a3czH1mnDr6utt76/yvJRUTwuJR8jKTA5TM+9t7avq6mstsDQYUQ7PUVCPkBP69PP1cq/vLu/\nws9rPzY0MjY1OkVX38m5s7G2vcbeXklGQj07PERW+dfJyMz3WceuqKq2xMXBy2pNOi4lHh4kLzlF\ncMGwrq2sqaqwweduX0Y7Oj0/PUFczcDM3tK8s7S6yu5HNS4vNTg3OELowbm3s7O5xNzrYko8Nzk+\nS2Hj0dXc7lZSxa2mprHBxby8y1o1KyIeHSEsNz9H27Wqpqeoqq660m1YSDoxLzdAUGzezMrU2sGz\nrrXSTkQ+ODMyNTk6P/S8sbK4vLu6w95PPzkyMTZGdOX2beHOz2/csqaiqr7Ju7W9Vy8nIyAfICcv\nPkzWsqahpayxsrW+7EA3MS8vNT9X7NnLwLy5tbGwutZNQ0A5LyoqLzxR3cS6tre2tLS86UI8Pj07\nODxJb9nOysfRVt6vo6Gs4lXFs7dMJh8gJCYmKC46XLqon56msbq2sblTLigqMTw+P0pY1LqwrK64\nxsnHx+c8LysrLzY+T3ncwrWtrLTG331fTjszMDI7TtrIxc3PyM7cvKumqb5hybKx3SkeICkuKiAh\nLVqzpqKiqK+wrK25QicmLT1IOS82YbqsrbO5u7q2uclTNC4yODgwLTVZw7e3urm5vcPUXEM3NDk9\nQkVL88S7u8HNaVC+p6Kr6kC/qatVHxslNzglHB80w6ulqKqurqekrfErJDFQTy8kKl+xrLTEvbKx\ns7jFZzkvOEQ5Kycud77I3syzq7HG3+z0TDs5PDs8Qnu/v8/cy7zBSlGzpqjDRMGnrFUiHzJBLB0Z\nJU/IwbmupqSqqam3XTMzTEktJSlJub565rioqbnJxMHTSzk7Ny4sLzxNSlPItrC0vL6/0GVPSEI5\nNDxQ+NnY2szGwcRNP7umqb9BxqClZyUjRuQoGRgnWWI/36yio6usqLHeSURFNCYpO1NQQmG0qq+7\nu7Cvv2lbaVM4KysxODk4P967tLW8u7m7x2lEPTw7OzxHe9XZ3su8ucpEOriisFM/tJ6vMCpKwzkb\nGik+Nyw7uKaqsa2qp67MUj06RTorKjFYzXHruqysub62scFsUEU8MS4uLS45WOLNvbCvuLu4ud5A\nPEFBNzY9Tmn028e7u8x3WdisrE5MuqepOzPn1j4iICw0Ly83ULWus7WyqavYTN/HTispPPNPOUHP\ntbO6vcO1ssHeas1bNC41PDEuOWXa4si5srO6xM7Q1ko1ND9GPDlnyNPn0L2+wl9LsKtbzrGvqkBN\nuUg7ICQ5KCwpLMq4uMS9qaixwdDC0jY1PT5LNTzwybbH0Lq0t8/JwMlzP0JANi8xOUA/Stm/uL6/\nuri92lNORD48QExETWnev8XTztXEekW4rUPKqMirxk24Mj4uIjgkJjM08+xXvK+ursW6sMPMQlTT\nPEM7TclQWnXHuc3Kzcq51OnSUlE+ODs1OkNDUGfLu8LBwb7F4PhUV05BTEtGTVz6Zm7Px8v+6c++\nrMnzp73Dtj2+WCwxKDsrJTUxU95Tzri1uLmytMbB0e/PP0VZQUdJa+1v6tnBycu+x8fPYFtUPzc4\nOTpCSVzk18y9ub3AxMXU7l5HRD06P0NZV0ngy8XIxL7Lwq+6WrC1XbxPXe8yNC45Lik3NUBOct+8\ntL6wsri8v8FodlpCWT86V2RcUW7ExMzMy7q/XOFtTEo8PDk8QEhoauPGur7GvbrIXkpjX0E3OUpP\nS1Ff1sbF0M29vc3eyb+4Wu+uXNjdR884Ozk8PSs9Pjw/TtPNwc+5s73AyL3W++VKVExP+F9kdM3D\n1vba0GzzVz9hUkxQUmRb51/w0NTa28bXzcx9+llbUUVKP09TPVZt58zQzdG9v87M6Nq/v0XTsWTb\nzeTRS0E7QDgrOTgzPFlmXcW+uLnCure73ODD6l51W3VdW2xYUEpob0JIWG/cXtzGz9vf0e599OXx\nUWjW3Vdj6HBWT1hVTEdUXVz04dfb1cbU7s3V/srcaNbtzc7pt8navWLPWT9EMzwuNDcwQEdiWsu8\nu7W4s7S2vMLB32FWQz44OT08Q0ROemzfwsrDtc7PusPibHFMUUhHS0lLSvhbZtDh6ffZ31hfXlxn\nW3Pu9/TV0XrF22fK2dpsvsZKsMZduPfVTklHL0AsMDkyOD7KV8S1ua+zr7i4vO/PXT9IOTc5QEc8\nTmHbzM2/w8bOwc9exNZIYc9kS+r9XFxd7WpUVupsRFdzTkVY4Vdf2u7r2s3Q0NPUydzeytpZ4dVK\nVslmYs/qzfXU41byQVpDOz0/RzhW5d/fxbm+ur29v9nX21FJRU4/PEtIS0584uHMysXHzsrDZnzG\nZljh3VZR/mZWTl9aW09Pf1BLZOticNTf18nK1NnZbO5qSlRcVnBjXNfY68W/67rF1r9qw0dYTTlV\nMkQ3QEdB2lXMxb++vbjFwcrzb1JIQj9GP0hLUOfz0NXPxsjEztDYbdRsS+fiTk7dZ0776WZc3m5q\n/mvg71xn1+hVeetWXW5oXWRsXmlqf+vo2s3V2sbJ19XaV8nbOMnSTFndyDrU0EtvTdhFU0tP2UFp\n295d78Vb8s/h+F3S8X77Xsxwa+Ld1l/V7GFhW/RV6epixublzs7wXM9TWWleTUz2TFxbVW1gX2N/\nX2ns5HPg3O3Q1tLYys/i0uPeWl3SWEvQ7Vne0ORty+peYV1PS05CUE5NWHt0XNLT2czM0d/c6XBw\nZ2toX1/26nbo7u96duXx32Xw2OHZ2czf4tv0YldeTlNPVlxUWl5nWGL9Y33gdf7d5e3Y3H3azOLl\nzdbjf2Pc507Z1V3g3s5W69dSW0liRkpISGtIaG3i9d7E39POztLj1+5u+WFnW1thYW5y7O/x5PHj\nb9TVYtTZ32rb41bocWxXcF5RYFFlYl5gaGphbW95eePp59/k5+rWbOrM293TyOvv1k/s6E3qX/Vc\n9c1P1ndvWk9zQGRIUltT+1rOb9bO49blz93o4nf5Z/70bHpu5HRu4u95cXRi2PJZ0+Ns3s7tbtn8\nWlx6VVdiVlpdXlJzZ1nv8nHt1eTb2ezb3/jv1vtz1dvp7dL8UdTbTuV8+P7w0lzdXnD3VFVOd0RO\nWk9UXd343M/PztHU09z5dfpcVVxaVV30ffPp3/lezc1R0cHrfcjKT3fhXU1UW0laTV3yYWbo0l1r\n32tYbt9lbXfr9nH219rw1s7S2c3P42Xw11FO/V9uU+fiWORk21xbbVVZSe1eWG7p22ba1t/g3dft\n/eFsZVxkaVxvavv+397q7vDQ/NnP5tTd3PpzZlFXT09PWlhafP3q6ufr8vF7fG5nY29+a+jp9t/Y\n1ejSzt7f0txOcNRMTeRWX3ng2G7OaNvrT19OWD9WW0xie9d60czPzc/O1eRraWhST1tQVF9zc3Ha\n3Nze0M7hztvb3PXsX2RTVlhLT1NoZe3Z4dra1/Z39GJcWldVWl9ebuzk39DP19fS1uXc2HVdffZS\naWxu2PXR3dbeXeZWU05VT0ZWUF9b/eDb1N3O0d/f2uteV2dcU2Fu/27n2dz43cJ5+cHUY+7PWE1r\nUktMV09pfF/YzujmydBf8O5UT1ZUVVtVbOnq6djI1NPEyd3q0u1TUF1iTltb++xc1NbU6PjTY1xS\nV1BHUVd1avXX09Lcz8/b/mpoVU5RT1RieuHWzdDV08fP79rZ5F5XX1lRSEtRT05i4d7bz8rO2eHt\ncVhOT1BMT2P16dXR1djSytnc0Nr0++T9ZFhMS2VuVFnfzPHWy9DTZm1TT0g+SUxTWt/Oz8bHyMvP\n615dT0dHTE9abOHPycvTw77P5tzTb0tMSE5JQ0pf4V/z0cvP3uDr4mxRVFlbVllrdvTs39PQ4uDM\n0HDfydlvfN/lY1Y+SepidVTbzuu+z91eTl5HUT88Rn7P3crHwcPI3XzwU0NCTEhQXf3VzcHIyNHs\n1+nsbOTaceltW05JW19RQELUx+T3ftvQztZSW/5YVl9vY1ta6MfN6nzZyNbr3+/y+XdgVEtIYu/P\n5nC/ysbUXV1ATz06SUZm7sW+vbrI1vFhRj4/RE5e7d3IwMXN09hfSUhLZs/l6c7Gxe5bSUVLRktP\nbeTRxszN0+hxaWpPT1poaV508t/Yzdbu3tfdaltWY3zx4tvcVU1x1cXQ+dj4z9lORzg/RE3+U+vP\nvrm/y2xSS0xKSk5d2sjCzdXc6nhOSlHgycjK09/obVNDPkVRd+z37Ovl5/Du7eTo3tji+HhwWFJj\nbfvv19DQz93nZl5jUFFVfN5kUHXKvr3UflZU7k5EODlO/MTHzNDayc3bTj9CUdPLy97l19XYXkxF\nSV/m1/f/xrvAym1GQ0tSSklRYN/L0nFeYO/W1uhjZvzr5HldW1373tjd4tba3uT+XldbaO/n19na\n3FU/Qte9v81kU1huekc9PkXvxcTObV3q1MzrTEZT08fI2FdOVW3m5nlZVN27ucJ9Q0RO9ulaU01n\n1dXvUkxW+M/S43RhfuHY7l1UWHvc3uzq29PV1XlNUGXf1N10Xe3S2lNG4s7Hv19MQEjkVX1RRPjn\nytRfVERuz87O9+rk1MvcYEtITvrRz+JWVs26vtdOQkVa+F5XU17hzc/7V0xQ88/R7ltZcNnU6F1O\nUWXi09d6aW/VwMjtUk1W4c7hYfvEw87vTERDUFdaZ1JYfNLQ63pST1JXX17l0cjBwsruXU9NXuza\n4ODec1VT4srJ1WNXVlRUTlBd6dDO3nRdVl1k/flkYV3z3ero/m9nZOzf1df38nzk2+nf/HLezs3j\nzc36WEtbTFZkTGFYcW5ZX0dUZHvfaP5dd87Lx8/T2uTY4fRjXGN36GlUes3J1/tgV11cU01OWnTi\n3+/08/jo3d9hVl53497b7vTrblxu2XhOae3t3d7d3c/N09fm09Hc7k1OTUpSSlBOVeXf31xRT1nd\n4+pja9/TxMzX4O/Y4NriX15YWFj1y83ga1laW1tPSU9h5NTa9nLu4eDn7mVYZvXi3t7pb3Pt8Hlu\ndXbu1+ZseOnf3s/R3srC1FhFSEpOXktKTmHd3dhfVFVacFtaU/7NxcHP2u/n2uDlZmvh2/rszsLJ\n7VpIR0VDQ0NU89XY5vJ/7XtnXV976tzXz83T4HZqa15VVm3h1tTU0Nvf6nPVv8X7U1dYT01GQktu\n6WJjXV55+fZdVldi5Nvb+enMycnP4unr2tpnU1fgwbrGfVNUWkQ8Nz1Y49jr49XN03VYT1ZaavDl\nz8nI1PZ1bf5dTElaz8fKz97lyrW7Wkpbc1VBOjdA7s3faGDf2PxXSVBn629cdOTKxs/r/t3f23FX\n+9rZ497Cu8fxVFZQQjw5Qljl4e3Yz89uVVlfXlFYYN3Jy9PZ1dTbaElK98zV/enPyM7dxsN3zM9W\nTzw/ODpMRvXq28/S0mbidVRTUGNc69/bzc7Fys/VbWJVV01N2su9xNTP3f5BOzxCTE1VZMrDyNLc\n1XpPREplb3d62MjJzepubldLSV7cy8jQzsG/wslo2NVISDc8PjxQPWXc2c/7zuTQ3F9sX3ZTVlp2\n0MzHysnGzd5jTEpd3M/Z6c/K111HQUNIRUVM6NLY2NLJz+1eXmZbWFps283U7erg4lxWb2nn3NDQ\nz8jKxPfKx05oP0lDPEs1SUtYdWLH3L/Fz87m0FZXS0dZVPP13MPFwMbMz2BXTXLXWldm3edwZlFc\nWk1KUm9pdXDt1M7Xavl+c/Zv7HX3+GdnbWtj6tjMyMrLzsjMx8tj711VSDtBOkNFQEtN3N3Oycq/\nyczlcmJST0hPV2Tf1cfExcTJytT7TkniYEhJVuRs8FlT5/BvTVxmZO5m9PDZ3mnq5Njh7+l53+hs\nWE9qaG/k3tLPydBrzL3Q53r6+VljQjtGRko+RVVX7+XPy8fByc3N2PVcWVdUVl9pc+nX1dbQ0N/e\n0Nr4XVxXTlhOS1JcZmXw4enYz9Dc6udnXmBcXV/7/vbu7/Ns7uXl3tvZ5+bpdGRoakxL8dDR1tHO\nzsfI31tTUUhAPzw7P05s+N7QysK/wMrT2enzcGZfWVpbX/XY1t/m4u77d2dfXFlUWGRuYF5r/urr\n5N3e2dfa3Ob5amBbU1ZUY/Dq1tHR3OPe/XFvZFBOWmPm3dnS2cnGzth4b1lOTEBCRkhMUHT27tzZ\n0M/Ky9HS0dPe7G9fZF1eaWdoaHvp7fJuZmpqbV5cXWBjWVhd+97b19bT0dDV3/t6anJ8aWNcam5q\nb3FuZX71Z1ZWXm/Wz9PU18rKztLvd15XWUtLS0xPTllbXWNu6t/SzczNz9PX3OT6Ym1vbHlocXP+\n6vt4empoXV5lXmRocGl09f3j7fP+8N3b3eHe3+Hd+GdqYmFhZWhjanp8dfn0X1tmbOXX39/t5NPc\n1Njf5Gv7ZVhSS05PVVZXXGp+9t/e2Nvc2tzX2tzn7tza2eL69215aWFiWllRV19na2VkY2v+93nv\n39jV0NXd2+3zbG1tW19YWmlu9+7t7+Xf7v5jZWppe33q8Obd29fc1+Pq7GpvXl5eW1lVXFpaWl5h\nZnnx5dzU0tTS09fc3+r8bWdlYmhpXV9p/HlnaGVhYmZbXGnu6d/Z3dTT1t3o6X5ram5qa3FyfvHx\n9fnz83hrX11kcm1mannt59/g4NrW29/v+mlcZV1aWlZXVVtjbPj97dzZ2dnb3eDf39/g5Ojs/np7\nZmNiZGFbYVxaXWRrZvz1+ebi3d3c2tve3uh6/m1pYl1dXmhqbXp2dWpiau7k4+fw5Nra19jb3/D7\ndGljW1hWVVlhXmBobXz87e3q6PPo5efe493V1dnd4vZubmNbXmRiWV1hW19qbW/+bXH27ebu5+Tb\n2NzZ397j7u5lbGxgZmBpXk9UX2/aycvM0tTP2tZuSUdCRElPX2V73t3W1N/tdXrwb/hvXW185tzb\n2N3i4eDc2+jt9Hl4ZWFYVFRRV1xidnhv+OHh3uZxZWr09+zd39/mfmt+8+3nY1zozL27vcHne15N\nSjo1MDE7S+jLxsC8urq/0mZFP0BCTE1b7dLAvLu9ytxmU05HQj89RHrGu7i9ydjrdFZHPjs/T/PR\n0uL4fejjeVRFREx6zMTGz+fq4Nva6fxgSkzGtLKwvuJYR089NC8pLDZXxLu3ury4uMP0PzMzOFXi\n0MTHvrm3us5SPDQ2O0JNUF3gvq+vsr1rRj9DQj9APkjXvrm9zl1HTE9LRz4+SOrAu7rA1+XWzd07\nMHq+sKWuvGhIVTk7LiIlLEfBr62zube821IzKysyXMm1r7W0tLa/dz4vLTM+Tezay8G6tr7WSzUw\nND1aybm3tbG1vdNNODE0OD5TbenRx8PJz3tKQ0RGSldz3ci8ur3E0/w8K0S/tqmvvM7owWFCLx8e\nJjXmurG0tqyrttE1KCguVM27tsK7sq6y0UEuKjI9TF5VbM23rbPFTTIwOElt1cfJuK6tsMVNNS83\nOj1APkjrv7a6xOBWT05OST8/SmjLu7m7wtDsWltJLy5avKulq7XS2GA4LiIeIzXIrqeprq6vvlcv\nJCMpRM6+tru4srG3dTktKzVL4MvJwr24tMFTNi4zSde/ury9vbvDXTsvLjdK7NzV1s/BvsXsSUFE\nT2NkWlNh2MfAxtPl7e9tVEk1MNOvq6m0x/ne2jcrIx8rVLivr6+yr67EOichJzb1v8XFubGsrb5H\nLi40QVleYt+9r620yUg0NTtFS09c+cW5t7vMX0ZDQj5AQkRW2sG8u73I2OhiS0VCPj1M3sW8ucg/\nU7K1usZFPUDT5Dg4LTBUx73gfN/Is7PNPjU9WNHI4k1qv7a4x041N05yX0dFaL6yuMtfVVhZTDw5\nQGLOx8bOzcbI3FNDQ1Ls7mFWYuDX1edz99vcZ2hjUFzczeJISLersbP9TVFO2TEqKytN37/Fbsu/\ntLjmQjQ5Utvm/ujNubW1w+9dS1BAU21N53jk5XTiUFdTTFJZbl598F1u5tXV1c/Vzs3M2lFFPkJP\nb87Pyr/CyNt4TT5ARlFy5fdO3rO2vL978WD5XTI1NTtaXfJXXce9u8PcYWbd1GVGREzg1tjc28K/\nvcbgelRWSDw7PEVMX/Lw0crHzt7ecHjn4t3v3+bm097kfmJYTltYWXn43M7IydTeeFRNSUNFUXdV\nQM+2ycPP79PavW0/WEtVTT4/QVD46+HTyr+8wM3d23tPUE9PYXnm5NzK1+vjbl9LSElKVU5PU1/Q\nyszR1szOztDm9mnr2e54WV1lZelXTFpr8dvYYFR62uD2dFVb6PFbTVt2XGHsy8DFx9LUy87aXlhY\nT0xCPj5CSVBv3ce/wsTNyr7La0xGSkxORkFY6NvRztHS0Nrm4ntPSEhMZ9jT1s/N0s/Kzt/6+3Vl\nZVJISUtNT1xtcOTW1tTT2e1pYWpnZWxv9Gd95u/a5uTsad9vbPpTZl9q8vrS39rS3t316PRkel1f\nX3ne7upvc1hdd1VVTVhqft387+Xa1NPW5nFrdGX83+Lf3dDV2+ZeT09TVWVmd2T94m3q9ntzZeru\n5t/pcud74dfs5F5afVjubWDgb9ndYPVPVVZPdGR53erZz9zP5+byb3x8eHnZ/tLc5eRMWEpNT1b8\nV97RzcjK1ON9althVV1Pbfx+1nPcc3z7ZHlWbm3v5N7j2/Bsbmpf5l3p6n7Z9+ry2XDdY3TmV9JO\n5G5g20/aTN1jYt5Tz21/3WN55VjuX/zp7n5+327TaeVpee3u9Hj9dG15d3PrXvvca85o3+B14nRa\na2p3/2T5W+th4F35XHpm9Od94evj2+nXfPFlb31ZYVxq6nrW7dzd7uBw8GVsZlpmXu9m1tzb5etp\n7mdtXlxkbmfZetjY9thu+V9RYlT2X97s6/H53Xjuff5baNp42tzz9fPsamBcbF546Gnjdm38Y9pu\n9+pv2e/e+ehx9mZw/2L2XWjiV89g1v5/4GHpWGJbbnJr3Wbce27abuf5/+3kdNlj32l28Hl18mFq\ndu5f6GH24Wbee3nnWd5t+dz77fXf6WrsVmBoe2Fue1jgbX7id+3s8fvYYN3hY9ltaN1n7PxXaHpT\n4m9f42Pn12bTYV58XOvn/OP97tJ06e9X3Pdj6Fpc02N90FLh/GDeWGptXuX+W+lrZNb14+P9avXn\navj7Zm7+fflmbm/62M/Rzd7x725qX1JUT09ZU2h059rd1Nzd4nvm8eR2cm9seft2bnRld2lsb178\nc+rp6uXz3u7nb3v+6/Xu/OLu631kY11gYWBkZHx46vXu6evp7+7p7vbzb/Py9Xx2a2lvb//q/OPx\n5+j9+mltb2psZGlqcHj59Ozm6d7q4fD6bf94/WhiaWj1+uv++uv57fL0+/z+eHdq/XL6dvl86u/k\n5fHp/vj1aGFjX2RtbPr6+Onm6+Ry/HB153bu6nHucvDybXNqb297c3FvbHd1+PTx7+zr9P5+7/vq\n8Onr7+59+nB0cG1rbW97f/d49G937/HteX9+dfd9fG5sb3n57uzu6u3s7vPzbW1nZXhtd3B88u3l\n7+br6ert6+/9bW1gaGp7d/7u9uv18f1tbWprdHX/bHJtcHP26fbm7Obr6uby7vr1end5bmRfZmZv\ndvHz7+zy8313/v7y6O/i6eXu8nBwcXFtYmZq++vm7/T88m5sbG13fvX5+ft+9/nq7/ttbHRvbvvy\n6/Z5cW/3/PDu7Pz+b37n4+n8/ndvb/736+74+mRnbHnr9e35eHZtcf778vf5cnlwbW10+fx6cnZ3\nePfn5uXj4ubp8Pt2aWZvevt9c3Jva11Uec7M2vptXFVaamt27+h/cXHq2trZ2+ZyXFxeXV9u8fpu\namf+6d3bdOnFvs9jUVleY1VJR0xm3s7O0Nx199/aeEdESl3f0s3Y4tvVz9j7XFZf7eX/WU5X9NfS\n3PNfYm1pfGtcXHna2ORvWV594OB4ZF5l6d7d5+bt+PNtXVROVE9JSlDru62sr7a8xdddOCsnJy05\nRVDXs6qmqrlvPjo4NjU1PFXIubm9x87P1XBGPj5IW+nS1NXa7v9iWkMpO5+cnZ6+tsfUzSEeGBUq\nPOrU36+ooJ+5MyIfKjhEVEPOrKWep81JU8fGbEIxNU3tw9VQQkXvXEY+NjtO18XCubq4tLnIUDw6\nNy8sz6GdmqO5tn5BKRsaFRw54bCtsa+vrskzJyEpT7ytrKypqqixSS8uN1ni5urawL27wlo7Ly4v\nNTc5RVjavbe0trm8y/JFOj07LSy7nZuaqb/HQUkuIh8ZIj7BqK68v8rBXjElHihGuqakqa2ura/L\nNyQmPMu0tsLIzMLB4j8sJiovQ1JKT0/Ou7Ovv9xm7srmWE9PWD12qaKjrLm+XUU8KyklJC04br+8\nwexgW0M+Pj9X3sW4sa+0trjA1k44NkrSwL26xNHrS0I7My4vOj9Rf+vVw72+wMza5trd8Gdd4+JU\nPEm+sa6srbjfRz5BQjQsLS0zT9DHx858VlVVUWVhX9XDvr6+w87RcVdc58C6tri/1Uw8Ojw2MzM1\nNj/6zszo4c/Jv8XIztLIxtLtSjctNrmmo6Kpu1g9MzE1LyssLzzfvLa8ylA3NztK1MC9t7a7wdJc\nVnZgT1VP7batrbbZPDQ0Mjo9PD9IUlrm19vKv8LDy9fX4+Te9U5KQTYxPrainpymxlwrJC4sLTw3\nPGVk18DDyfRCNDI877itrLXLfUZDVFjfwc7mv7Wzsr5dQTIsMjtBTEE9Q0txzsS9vsbU7u/o3tjV\n9ExFPDQwRKyfm5iktWAjJSUhLiwvSz3avb2tusnVLCsyLdOvq6KtvXo3OztG0s7Nzc66s7S/Yz8v\nKy0yRWBj6fT+3NLHxcvUdFlg483Jz1Y6Mi8xM1mom5eWnqpiIx4aGyMmP27bs7eurLvARCsmICtH\nvaSfoKnNSzUvOkvIu767vLm8y+BINCwnKzA8es3BvcjM1N/a6dbX4tXre29STUZAQUBJvqafm52l\nsjgjHRkeIjHjzrW1vbfCwstMOSwqLTjLrqWiqrbcPTY6QmzHwcLAyc7V4XBRQjQvLS49bMG7vcjd\n52jn1tDL2OFcTEk/QUVW0X/Ysaqin6WqzDQoHR8iKEJM3MLRvcHEvMzaTDk2MTxWzbWwr7O/0vbs\n2NLmZ2RVXV7v0djaU0A1LjA1RGnLvb27xMfK5O117O1hY05ES09h5mpazbewqKeprcxKLyQkICYu\nN3fLuK+ysrvYWT42NjZAV9zBwby6vLm6vsXlT0dNWnbg1+ZqTkA/OTs9PVFb39PLv8W/xs7P/GZa\nWU1EREZQ8d/7z7ewqqWmp7VaNCMfHh8oMUvKt6+us7jLY08+QkA8QUVZ5cq5tK6vs7jGckZGQUtg\nWvdWU01GT0FFPj5FRFvuxb26uL3C1OZdTUc+Pj5EXc7GysO2sq+qra25Uz4pIh8eJi1AzLmtq66v\nu87+PjcxLzk9a8a5rayrrbbDd0MzNDhE79fFz3lLPDw2Oj9KZnLPzb+7u7nAzG9NQT5CRVBj8dXH\nzWTnu7WqoqentzwrHRkbHitDv62qqKqyt9NCOS0qKS9H2q+opaSsut5FODc7PFnQv7e6zFE7LSsv\nM0jzzsvJydDBwMC/zG9SSD5BSU1g5ujgWjNeq6aWlJ6lOBsVDxUdLcu9raWupaKqrV4pGxgbJMih\nm5ecrc8/Li42OT1IRN2wp6SrzDIkHyMuSNna3mfow7Wtr7nnRDs7RU5YX0tJSU3dfjy4nZ6Qk628\nHxMUExoiL2Pfrp6fmZ22XB4VFBovvp2Ympuo0UguJigsNu61sKqnrsB5NCorJisyOk9jysW5sba0\nvM3uWk9PVVFBPUA/UvPMPzSfmpeLn/QvEhMWGh4eOfW4lJScnOYlHRkaHUPIqpaXm57IJR0cHzK0\nqKejteS+0kxGMSkrNjs7TURBxrOyr7pgRGHUzL9aNTc5QGnP7VrWVjqlkZiSnComGRccHCAcLLWo\nmJGlzD0gISEpKDyqoZaVpXMnHB0wx7atqrOxsW9CMyoxSsvgQzUmLmy+rbDUQ0jFurCyWj08Olpc\nQTw5VMKrsi7Kl52Sli8lFxUfHi0jK7KsmpOtPS0eIys/O02lpZ2buDckICdOs7SwrK2ureEmJCcz\nyLK+PTgwNsnM5lRSVM+ttMTQVktefkc1Ly9BtaakrXAmHaiVnZLFHCUdOD0mJRYkr6iWmkI4MUvD\n11IfJ0q9nZ6tWjhJbLS8PjA/88KqyTY1P8W6tE4rKixAzcNtWFPOr6epxlc3LTI6MzZK06+npKvV\nMiQ6pqqnpT4/RUrZMSgcGCQ5vaOpqqmrqb5kKBwfITjDs6ikpaKkrco6KiIjJzNN066rq7DEbTgu\nLCw0SuLEvriwr6657D8sKS40R820rayxyWldRDUsKkvBvKqqt7Sztr1MLSAbHy5Vvre7t7Cwr7xR\nNiwxPk7yb13zuqurqrJeP0A5NDtFO0rKxb3G+kk8TmRucEZDYeDIu8Pc6dbOwcVbQjo5RM2+5UMv\nWKWprKr3X9fSvD4kIB0lQ9y5xcutpqay6DQpLjtBPTY+3bKhoKzGPkXta1U3Ky9Ws7C/YEJmzLzF\nQC8sM03sxsDEwr65xfVQOjQ6Pk/Wu7jMzz/bnqm3uz5Z1m7aLRsbIjrAtbC3wq6lrlgtIyY5UeDf\nUs2soqKt00Q6QFtFLyksQLenrcFbWNDJWjApKj3KubW0urm9zF00MDE0Q+3Kys/HvsPhOEunpbG7\n2tva9VQxIR4qRt3R82p3vKaowzwvOU78Szo2Pr6qpam2vcXK5TImJi5CWMm6ubi3ucNNLy4yPVp8\n0srBurm/6EVGTkhKTUtFTOXPx72+dzzoqqm3znXbzcbqOCsiKj9DQj9iv62kq8NNO0hSQC4qMUq4\nqqqvu7awscQ5LS0uMTZLZdDCuq+2xf9XRzs6ODlJ6si/yMXDys/qaE5APEJW6NfNyM9PTK6mtsr5\n2szI2zkvKCpGUjssM03IqqixxM++vMo8KSotPtvAvr+wq6ipvk83LSsuNTI5+LqtrLK+zl0/OzYw\nOE/42ce8vL7CyupIPTs/Te/JvLzDzOdmTTgxRce+vr66u7m4000yKy0yNzU/U862ra2/1Whw6FtM\nQkdP98S/2VpUdfFveF/fz8jBxM56WEI/RklIRExS9MXByNhy7+Xp3fd582jn6lVSXeTb0tFeV/bY\nzt5pWV16am5aTFRs5up1X2nWycnOzdPX2W5STkxNWmBbUFBdY+bd6fTx19bZ5mhnZW7u7eff2tva\n1/tobGNybX1oV1lTWm9sZXbn29LLzdftb/34bVRRWmrhz9R/XlxkdGZYTlL82cvL7fzn4tzde15m\neOzt+mZaXF9fV1hbXXD679zUz9Xc2+Pg7H59av7m3N31ZlZPTlVZVldWc9LKyNDsalxiX1dbXXbZ\ny8XEy91nUU1NTU5Wc+Pe4d3R1t3peWliZmJaV1946uLe3ub+cX1tcHvx5OjzamptY1lO6L5oT9ff\n1+bablX7W1l+blXr2eXO0nVXWlXiv15R/F3tVV5aW2RLVuza6cbLzsHTdU7f4k7vWFJq5+lf3fxr\n6ltXV1pYT+HaZ8/a4NrZ3+/V8Hxp6Pvu7V/uXW9WX95FVvN35m7bWsXEYNBZUU1WXk7c2G/3y87L\n0W55Y2lnXEla7m5eyN781lbjV+vWYNn78dv4ZHBSV1tOYGZvb2jX597D+ezr02xo111OXdhLzNxO\n01L+aN7QWdxeT8z94fld91XWXWTr7eX6zl/a0mBpUV9pXvJfWO7U1Wbg2+fe6mdVbmJW+G3v3OVt\nXe/i/Xhu8uvncWN5cl/z4+bk5vns3dLpXvJfT2N4Vl/Ycf3sz9nx21pUaux9VGtgYPrp4H3i5OLd\n/3VedOprfmtp/+DxXG7w9vDf9+rV5HD9Zk5f7mZn6Gld49TwXulb+M9/Z+/V8P3ffGL7Z2VnX19k\n6eTg5+vd2enh0OVr8eFzYWRhYHZwW11cWlleZ2BZWGP32+jz/enZ2dDv/dne2tva4FZPeuf6bWRz\nbGzo7npSSVpv49HiOjmroKuu1j477VwqKyYpVLq0zdThzbS8UiwoL07AvL3KwbK1usJ5R0zb4G1k\nREdc6udnXUxKTEhDRlBq1sfGzMfCyd3xcVBo2FZKSkc4PaGZqqvBPU1MNR0bISRsrLe9vrqrrsQ3\nHyIy7bS3s7OupK/rNictQO6/x9LLyLe4zkU0PUM/QTo8X8/Dwc9v38rSXkxLRE92aGDk1+3WxetH\nVMnAXDJNn52orT83/0cvICEmOq6v1c3v2bfERSsmNm28tMm+s66tzk4/O11jWNv50cXFzTktRry9\nZEA/TdjjPErYw7S0zE1RXEM9QkNJXODQxbu8xN1OPTk3OjgvvJSYpandb2suIBolND+3z06zsbS6\nRS4mKj08+b+4pqiywUhRTkVLO1i+t7PA5lxFV9JxSD0/WE5FPUDmxcjOztTe52NNVe/zVU1V38bE\n0fbzZllIQD8z3Zydra/dvb8yKR4nQTjUUTi3tbS6QUQyLz0uRN3DqKuutn7P/UQ/MkXQv7PDysPr\n229QSjxES0hQP0T63cnN1vBY7e50dVxgaFpbXv3XzcXRVkxa9GBBOcGgpay13L9vOTYjKjMuXlhj\nub6ztdleNC00NUZb47exsbTCz+9PS0hQ7NrOxcO9vcr1TUQ/Pz06PVTYztpvduba1uVmWWzeY1FO\nS/bOztf77dnj/FVNZGBZ3r66ura4v9Pd12xGPTw+Rkpc/kxGPz0/Pkpga+fYycvNwc7hcWvd7s3I\ny7/IxL7GzPlf/U9KRz9ITElJP0BKU3lv7tfMyuD4+ezV19LWfu7t7eJsWFhi7su9wsvEvcHV/mNN\nSE1IQkFDVVdGPztDTWDb397Qx8jk/W5n39XMzMvDxcbL0tDd3tTa2+5pWklCPzs5Oz5IVX3Z0tnf\n5XBlbvPb1MvBxMXN5ehlU09NTktkxb/BwL7AztLeW01OUkxEQUFBQUFGSEpVa9/Sz8vP5OPj3unk\n1t3UzMrJz8zN3d3e08/b52pVU0pAPDg6P0ZUZe3c183L1NnWzszNz+Jzfenb33b93t34X15raVxY\nX2llfN7X1tTS0t12Y1lXV1RWVVdaV1dTT09WbO/h1NLY2Nrd3uPs5+Le2dDJyczN1ulrT0hEREpK\nTVtibnd2/2t26urW0NLP1M/Nz9hwaW5eU0tOX3Xu/m10a2hqX15cbud+cW/y4tzT2N/d2NDP1N3q\n7PluZllRTU1PU1hVVGRyevPl2NnVzdPY3OPj6/VvZGpxf3lobWxoaFxZV1phYGFjdd3X19PX3d/f\n1+H17OPd4fJpXWJlX15TUltiamFm/vDk3+Tl6uLc3uHx8efm9GNeYF9mXVdYXnBx/Ong0c3Q19/f\n2dzif3F2Zm5kV1hZWVhVVlVcd3X86d7Tz9jd5e/6+erw9ufn5uXv7fJsZF9eYmRqaWZ4/X1waW91\nbHD78ePc2drf3uHr7Pt2bWJhXl1jYGt9b25t/PF69fj/6uPd3OLp7/LsbF1dWmj09+jt8+je2uV3\nb2hobGFgav7q6efq6ubwefR9/u5zcG148vH5alhYXVxmZWzt4dfV2dna2d71cGNkbmtxc3f3+f9q\nXGRqaWpodvfo3N/n8294fHx1bX7p39ve6/P8+/xoYmJs9vd3d3r89nFoZGloaH10+O7p4ODm7/v5\n/HZsbWxvbm9zcOzm5N/e3+br7/h7bWx1cX5xY2ZiY3BpX15fcufd2tvb19zk7fp2dW1wbF5fZXf2\n9f3z5eLd53xrb3RnXVlaaPH2bn3v5uTl9Ort+vHn8vbu7e339W5sef31fvro5ujvbmRdXVtbX2Zt\n/uvh3t7i7Pf37Ozvb21sfH16fnv9aW35+Xhy/Hp06+949+rf3+xx/3dqdvvv6ehv68/pa3duYFtP\nS2NiVPrb0sjF09LTeFdJRUdLT0x0xsLJzcjM13JlaVhQT0pGTVlx3s/Nz9ng3Nzh6+prW1taYXn8\n7uXf8u3m8Ono7nLza2ViV1dSWldjdXzr2tbZ19vT2+tsZHFfYGV9aP58au/kdXDhd+7pYF9tX1Zn\nb//se37i0NXV3fjd1utNWs9LWbpv2LbLycTJVUtUNTM7Ni5FS0TIw8e8sb3JvfRXZ0o7TVJFXN3v\n5cfj3cfgXXNlTldSTFJYRy06na40nKGlmry8ycAwFCUmFR4eHtuzwMyfmbOrsmy9RyUnQjMuX7+w\nqaGxpqLWXz87KyoqIzc6MkvAzcm2vL67wV/Xzko6Msmd0vqbqaKt+rlGTBwZMx0ZIytFxbvMuKG5\nV77YW0ZFTMfHZbaoqLWrrMbGOjM6MC0vSkc9VE9g0GRO4mpDP2b/R+DbXey6nra6ma6qrly5NDUl\nHzUcIDQvRfi/vbiw59PHRT9LPTzKYlGvrLCupayxs11xWDEvNzgvN0A/Rlpj7dhOV3dQTUp0X0xW\ncayv1J+jrKa2q715SCw+JB0pKCsyQVbczWvQzFhR+Vs9bsn+v7eyq62trq/HedlPOjpJPTw9QEE8\nPz9OSD5FTmJT6sbY1c7CscW3prSsrrKvy8RgRTkmKyklKS41N0VEVNhb587K19zDyL66s7Czr7O3\nvNPa40RHS0NAPEU8Nzs+RUNBSE5qdGPN0MzD6Ou7vr6utK6tsbi/uOlHPS8vKigqLzQyOkdQZ23l\n583X4svsv7u8trSutrG1v7/Yd09BPkA+Pz08P0FGRUZGSk1JTmT8797e8uvGwr2rr66qra22u95Q\nUDErKikpLS8uQUVBXWzc+c7L98rezL3FuLmztLawuru/zvxYRT1AOTo7ODU2Pj0+Rklj8t/Pz83J\n0mDau8u7r7aqqq2zs7LrZEIuKiYmJCstLT0+RnjW0s67zMu71cq8v7+7u8Cysr24us/r/Eg+PDcz\nMTAvMzY4RFxu18XGwcDFycztVPHR0bSvuaqptLS1wU5GOCooJiUqLy00TEtt1tDUv7vdw8Lbx73D\nwLO7v7C3xrvD5uteRT8/NDM1Li83Oj9TW+zR0c7Kyc7Iyt/i69G+xbGstqurs73Dzjs2LycmJSUp\nMzM39+XYwLzCxrfL08LUzcW+yby3ybq3wsjH6k1OPDg6NTY9Pjk9RUNHXHz82M/LyMrDxcjI2Obe\nur7Nqq6/rrPEWVw/KzEoJCsqLDtbR/i3ztK8xPLKv/rHxN3Fu8Dqu7z1w8DW1tZgZW0/PUo5Mjw3\nMjtGRFPX08i9xMa9xMzKzNluYUXssF3Bob67r7zZP10tLTMfKTItLl6+Sr6vxMC+xOu/6Eq97kv3\nw8ZovrrBv8jLydtJS1Q7NTs8OTo/P0tYVdjBxse9u8fNzd34Y0pFPzZFsr7do6etq768X0ctIzgn\nIiw1Qkm+18euxMzazWdS1D1o0Fzq27rCub38uLTI7NjVZ1k+ND4+MjY+PkfwV2u/v83Jw9jMz1tS\nX19HREVJSNSssLKprKeuwM86PjEoKCInLDdEWcrHu73Cwc/eZWFcTVFN/M/LwL2zuLq5vr/U2mhN\nQjk6NDQ4PkVIXnre3s7JyMnTzdzvXkxJRkhFSFd0cL+qqq2qq6y11XQ3MjArLSctMzxPTtnXys3d\n0Wxx925mVOrZzr/EvLixtMvEwL/RWkZATT4yLzc9QkY/R+7N9eLNyMrN2Vjz23RbWX7dz9VTzqOn\nu62srLpvPyguLyAfIiowO1louKmwvby2v99rREn93kpMv7m3vL26wbrLRE9YTD46OjhLQjlI9mxM\n5e3lxchq5r3L6eR3VvVlQ0tWePBFRaeevbKmpq9cRCcsNB0bIjE5PebCqKCvyrqyzzs1NENRRD1v\nrq21vLOps+c5S8k+NzJBbEI8Mk3XVD5F0s3eV/++u8jXz8bJbzw9WVI8PFz2TrGaqrOgpat4QCwe\nKh4ZHixCSsqwp52ju83C3zUpKS88TElnsqWmrrGtrco7Ojk6OzY2R+9YTlrh2W5fTWjeZGzv5c7M\n2VVc4Uc9PUhv/+PMur3CnZu5tLawyC8xHiItHh8kOc7ZvbKpoq3GbWjePSwuNUXh0sS1qaOts7K4\nfy83PzEyMDVFWt5RU8zI02JWWm/3YFlvzM7vf2lpaGFx5c7d18HPdq6err+9vLVXOiwfJygoJiAx\n2ti9saysr6mt0HNoSzovOTk2XsG6ubKrrK641l1BODQtKiwuNkRU5si/ube2t77FzmhgVUJDRk5W\n/8bHzMC9vMLI7UU9PDIsMDo+WMvEwLSusre6wND1XEZBRUNLQ0ZST1VNV15ldV3z1NzZ3vTX0dpd\nVdXa3drSxsS9w9HM2FhDP0M+OTc5P01ectnAu72/vbq9xNddTEtEPTw+SVRm4NLJw8fJzs/eY1tS\nXl9aZfXSzM7R1NboVUhGSEc/QkRCTmpxbunLys3Iy8fCwb7BxcnX1up2WUZIR0Y+PkpLT1dt9Pfb\n32ll8OhvceTc287KyMLEytjj8VdOSENGS09NWeXX2NPJwsXQ4+De81VPW15vdGBbaO1VREVHR0RH\nUFtz99jKxr29vr6/v8LIztbY7FhKRUdHQz89P0VISEtOVl/v1M3Ev8PEw7/GztXq6OFqTk5cYVla\nbPB0ZmVWWWly9/bY0+Tu9uLpZV5UU1xYVVV36e/17ODg4nVobXT99O7d09LRzsjEyM3U4HJXTURB\nQT1FT0tOT1vp3dzc2drc1NLX0czNycLJ2+vleFlZTUJDSVr949Hd5t7Xyd9RSEFKT1dlVVr808zO\nztft6tTP1t1r69LO0GRYVE5gY1lNR1Vr8N9pW1790+JncHn47uxmU2Lzf9/ffu7VyM5k17GrrbjF\nxebgXy8lHyMqLDlDVMmuoqOtus5tTD4xJyYxWsS0rqqrqKWovEAzLi4vLSwuPd3FwsfKyMjI1VlN\nUGbveHH2eefU3GdLT23t4eLaTj6qmqCpz1jaNlEoFRgaMWv4rrisnZqcwS8nICgvLCsu0KGcm5+v\nvN13NyMlIyNGrqess7XPUVAwJiYzWOXJv7+5s7XIZU5APD4+PUPpvbi3v8lXNqeXp69EM0Et+SMV\nHiHetrKq0LKkprIxIB0iQ8/eyrOmnZ2n5zAvLS40MS9NtbWtq7naPz81ND07T23Dv8rP5sHE3ltE\nOzU9R0VP4MG7urS5xMXqLkWfqbnJMWtOwtUdHyAvucS92FG1r6/wJSgtXKyzvtDCrq+8Ti4yRNy9\n1GxcvLJMWEw5YV1rRT55YfrkVW/eybe9z089Pz5LSj5mz8q8vb/J1OtHQi8o0J+dnqnO7lREKBgY\nHDG3ramuta2qsUIlHh8z37y4tq+ppK3dOi0tPFj9V/XfVMW5vb/pWUFBQzk8OkvEuri8vNRHVUk/\nQUVz5crAzMvTyNU7Nz04L0qkm56esUZFMSwfGR8nV6yopbK/u81rNiYhKfiuqamywby91kkuKzJK\nv7+7uk5VyL24y/Y+OEo+Ozg4Z8m8usDHb2RdSlFQTE9s2u3QxsrWUEVLTT43vpydnKFMOywpLR0f\nHiu0qJ6lx+Fb2GgzJyAtyquiqb/eyr/GUi4oLW+1sbXbTEBOsrO9ZzQ7OExGOTxNu7KvtttHNTxI\nSVNJS2vRwLq9yd5NTFFKOjeunJ2crkQ2Ki0iHB8gR6+jn67LX23eRi8jJEC2pqOtxd/DyfU+Kyky\nzrSxrMJM8Gfh1WhHNkFIS11ITe/AubK26UU1MThBXVzZztzDu7e87UlHSVRNNDa7n5ubqFozJyko\nIiIfMsutn6W34ODFXD0qHyU+uKakqLO6vN1FLiUmL3auqq+9ScuwtLw7KycsQlLieuK/r6243TIq\nMD5v2c737Lu2s7fjOS44RF/lTznen5qantQxJCQrJScfI0e9pp+hrMC/UDUsIx8hOcOmnZ+ntLzi\nSTQjIy1Huauru8aysrfZNCUjLDhq0MvKxLi9v9hEOzxK7NvxUEfoxby6yd77YlJUW0o/P0pe5bWp\nqqqvvPlBNSkmJCcwVbmwqau1xVU+Ly4wN0zowrqzsri/zNzs5m1XSEVOZsjCy99STUtGR0RDSVrd\n1tLR2dTTx8XfWEdMYNjBxNlnVl555WpJQ0ZY79bQ2d3YycrrSTs/Vsu8u8LP+vppTEI7PkruzszF\n0dnW3ntLQkJHat/c2djNzM/Xa15raGxuf2lRTVHuzcjK1Nvq+WxYTUdMXujXysXMys/tTj49PERb\n7s/Du7q9xH5IQD9ES2Fv68TKzdjxfFVNTU5ZZGxte/ve2ef36N7Z2977ePPp2eL4Z/nc1MnPeE5M\nT0xMTE5IXM/My9ZuXV567mNYWn7Tzc3b+mt79enraWBz6N7o92ZffeLX2uDnbG14Z1lLRkdW8NXP\n1dnYzs/V6lxTW/f8YFhcaH7k7HhjYmxv6tXX1tXb4PD+ZFJRUldl793e3trd5n5mV1RddX1tdPXd\nzsvP6W5iZX5rX1dRXvba2/BxXmvo4utpW1li7ujve3Pk18/R4O5qZWxlYl9cZvjf2+b7YFdaXWp4\n7tvTz9Dc72ZVVlZcZnzj4tjf6eT1+3NjWFBSYuXQzdjg6nz+cWdcV2Ru5Njb3f9zcWhvXlpYWm55\n593l4eLb2eV5Z2t/8ej1cWRo9Onk73JrcXdsa2FiZXzq49ra4Ptua29qZFxj+OTX1+B0Y2BgaGNZ\nWXXc0M7S3ex4a2RcVVJbbe7r7OHd29ne7WFZYWttb3P+6uDc4vRoW1tfb/bl3drb3+P1bV5ZWVdc\nefHp3+Pe4ezya2draXVvbP7q39/r+nx39vpqZGBv6+Lf5Obr7e1uXVhYXnDu4Nvd3t3g+mBZWVtl\neXjv597W2eZtXFlZZGxnbXD039TR3e76dXJvZ2Vjbu7i297ueWZdXFxiaW797d7a2+b6bGBgZW1w\n++DY1NjidmNpc/H/YVxfb/Tu+Wpmb/fl7HVpbu7i3N/m5Orp6vFuXFleZHR9amZr9+vf3unwfH7x\n7vtvbWxt9Ovu/XJ1evTxdmpv/erf3+z89/r8e2xgZG176Or8b2dpbfrx9fpvaOPX4P1rZ2hqX2Zt\nbXhs/+XU0dXb39/tbVdTWVpbaGx65+Pf3trf5O9ycWRcWl50+efb297n7PD7/m1lZ2ZlaF9kcffw\nf/R7+e/99fD5eu3l6+3u9/X19O7t7u9+bvzl6/hnY2pua2xtbG5maGlufPz39Orf3efn4e/r5er3\n9f1vbmNYU1lYW21x+93Y2NPT3ft1bG3w6mdofml84u1r/PRjbvlrYX1xfuhtZ/jne/97bHTxfGvs\n3t3d3v5sbWtoY2pz39bNy8nHyszW9VZLQj08PD5DTVd62s7Ly83R09ba7392bG5nYWd3duvm6OXr\n5+Xobl13az9Es7HNsry3q7LcN0o5KywiHys6Mj3Jt7Cmq7Wrq79XTTM0PTAtOu3zyLKvrq2wvLzF\nSjk2LS4zMDRG6dy/uLizsr3N02ZGPjozOEI8QlT/0MC+0WK3nrG1rMuos/AuJzsiIR8cKUZsTLai\noZ+isray1i0pKSUyMDBEuKitpKiuqKvlLDMvKywkIzbRYOa7sayquXS6ul05NDQ8TzMuSsXJzc/J\ntLC9+9LmPr+qWsWwxqy62S0xSiAmIyAsSVY+rqGnpam5vLdIJiwtLD49Rsyop7CmrbS+WD8qKCkq\nNzlK07Our7C6uMbtPjo+NTg0O0rozNzKwLu/2MjSZkw9RVVIKzqiqrajs6OgtD0jPiQcHhcfPM5K\nuZ2dnZ+24b5cJB8lJTdPRcynnqalqbm4aSkfLiUfODtsr6exraS2xtc7Kz84KDdNUeS1yNSyxO3X\nbDtJUzhEZ05cxXZAqZuzqae9rLpDHiIqGh8gIDeyrbeenKKltD8xOygdJywzwbKvqp+iraviOzcq\nIB85OzS2r66jpr7OvjksLykoQ+M+yq60s67GRt5JLjc5NkXWR1uvu8q9Wfyco8yuyLa8dSoYLSYf\nKiczwaGqrJ6ksbw+IyUrIiQyP7+ln6Sjn6yz3C0nJicgJj7rsqWnqqitzkcyJyksLTNbxb2urre7\nwE44OzY8TVBVyLfF7MbQ59s2LrWgtqy02Ky6aR8fJx0uKipHrKWon6ezu9csJCcjKT1q2a2ioaKl\ns+XdNyklJSkset28n6Sqr8VJNDEjIy0zVL+1t6uotcD0NzI+NzFGWtG6ucfVvNNVTC8vr6C2qa/G\nrbxaHyAjHCwuLkuupqSdp8LdSiolJiIqWb61paChoqa9QTorJCUlKDHKuamcpqu23ToqKR4mMT3R\nsauvqK26xU0vKTYxOGB/yLeywMXNSUU/MTeupK6hrLyww0UhIB4ZKC0y362mn5ukveo7JyUlISpL\nwLCjn6KiqsVCNioiIyQrPrqrqZ+lrLpbLyQlIig2T8Gupqqrrr5vPjEpLTI4V9K8u7W7yb9XPToy\nNLqjrqOpu6+63yYfHhkjLy9Ds6efm5+2b0kqJiciJjfIs6eho6WntVo6LCYmKCw2w62ln6mwwVo0\nJiQjKThXxK+qqquxv106LysvND9o0rm3s7vGwV5QPiwyvKiupa7KtLXOLSQeGiUyMj/EsaSbnrL/\nRS8wMCcmL/+2qKatrqyuv1kwJyktLzvRxLGmq7C/XjIsLSotOU7Usa2ys7vJW0Y2Ljk/Tu3Lvby5\nw8jLT0M/MjS6qq+nrr+2uM0uJSAbJS8vOtS1qJ2erMn8PTY4KiYpPs6zq7G1r6yvv1YxLS80PF57\nz7Wys774PTQ2NTg9SWq/uLq6v8r6VkM5Qk5e1MfGy8jO3PRKQT05OWquraumtra0xE0rJx4eKSww\nS8y0pZ+isL/3P0k7LSksPHi8try9s66vuttGPERJSUhHTFvj6VdHQ0ls19vm2cfHxs1tWktHSEtf\ncdbJxr7CzN5hW0tCPjpEXW//e7mssKy22c7j6z4wMCkwQUFEQUzVvLG5z87VxMDLaT4/RFNMUUxM\n2r+0u7i8w7zI3Uo9NS4xMjhAXdnFury9v7/I12xMUFheX2ZqdeXg6XP2X2thWGl23nfk2+/c5vNT\nUVlZZ3Xt8dLIx87T5GVcWFVOSU9NXt/Vz9POzdnS8FlWV1hZbu5o+/J0+edzUU5PV/nh4d/Uz87S\n1HlYXVFl633t6c7Ly8jjX29VUUZGPUhb2t7Izsi/wNfiWFNESEVASVzr18/M0cbJydDuXVJOS05F\nTEpd9O/T1NHEysrOzdLc3WlQU1NOVVJVV3Lfbvbv7+/Y71hVVl3c3ul69+Tg2d9+7dzS2d9ZXVRs\nbVtzWeLi3OVqbV7v/HhqY2J/5f7i3tjO1s/v8WtkWllQVVVVbW9veu/gfuTp7NvY2uXY3uvt9m5d\n+l1aVlxPZGZpX+z629HL0drh/HZiT05Ueufc33Pc+8/p4mluXvJ5Y15dV+pk43bj3+Hf6mbp3dbd\n9llmV21fUlBSaPff2OrU2tDf82pbZf31XOv9+dfr3fre22T5VFZYUl1SZHbh083P1Nd4f2ZeWlNX\nbOre5+nu3+XadGJse+R281pZcW1fYFFlZezr6uLR0s3S2+PzcGhXT09MVlt079/S09Le2e/5cnxY\n7V74ZeX++X3va/nqZ2v9bfdp/fft3er4aV5ebWRobPfY4tDm2f3rfPdeW1Vzaer2de375e1w7Fx2\nbWRhYeLg0NXZ19ni4VlcTVZMWVpt7uDV1d/bcGz4dG5i/GTh6uXx5O/gZPFSa1lzWd953uDT5dZj\nfVNvWF1U93Xe19zo0//bbvlbWWBm+vHsa+fq6/h+XPp2513jXtp51+vdX/N25mdwYm1d6Xrcb9rp\n/PRiamVlZ27geOLv13Dpe3v0Z2tiXfVf4+Xw09vW6/JeXlddXVxoZ27Y99nn493d43NrZ2p8fG92\ned316Gljal5uYmhzetzu7eTu9O1/8ml7XvL+7u9+9uXo5ml8YvRY+mT27evv4uvi7fhpbmF6aWbz\na9/v39/q3+1zbVxeXGVg/mPl8+Du5+7ec/dgd3Z8/e775Ozl8O/4+2df9mbuct/13WjzbG11/1z7\nW+51237Ved9v7GL8W/pd4WjzbuX+6PZ6/fz1dW9+Xvx5/+jz9ex/42v8Yul55P5uc27982XpbOZ4\n9v516f3d7PT2/379Ze1l6GT9buVw5XbsYu9k7FfoWfdg/n7f8dZ22mfdZ9//6m/7ffdk513YZehj\nemz0bv9f9l3oZt9869zv++9673v5a2t7dPh483Z/bu9ue/V++fJtfHB0e37j4ubi9vl6a2x+e2zs\ndn56Zv1s/nR6+fL28Pb+enrp/Ph67v798vT6cvVz+/fyduZx7mt4bHB8fGLjXtlg5Hn8/+1le2Hs\nfNv54+l94HHo6GN6Y2F0Yetkff725XHs9/hx7vB55+9r6m/v9XfiafT9/fZo7W5nfm73aPBm8Wfo\ne+N97HLybv1n7nDfb+Z9+/t3du5z43rnYudr72//83zu5Grfaehv8n5yb3RddGz4bW/6++tw7Gze\n893032/nduth7mTyXvddfnfv+/B6eel33m//cHVv/Wvua9xs3PPv5fvu7mn9+/ZydWl172v/X3Zp\ndPX27Xnr6v7b9/L9fPp8ZG9n/m3w7HjfXutrfX5o72/rZOr1fu3p9+bw6X7leXp8X+Be+Xpa7lvi\ncm3wXN1g3G/v933qX9xm5/305n3pe+h/7nL47GDfXuNn6WV75mjgWONf9uxu6vvtem58aOBe3mPu\nf3bocOVm7nJw72DxX+N36Opo3l7WbeT+X+do53r87mriX99k8+1c3mP27F3jVt5i3/P132LaW+n3\nbeRn4v59+l3eUNhTd25W1mTvcPTgfdVv3+P+2FrVWOdvcHNs62n/7V3XWdto8O5f7Gn8cXlv/X58\n72vu/m3f+eTs7/vfa+77Xn1k/Wz7+nDf++9ze3N0/XPm7ntwemlr9fX16Onnf/x2Zd9t9m9x/mbm\nW+j4fPD/7G7ucml7bfdn8udq5mnuduDw6Ort5vL8amB+X/1jbnn59+7v7O/v7v70e/Zs+3bueXp0\nb3d56nbq+vfu+/51bv1q827ub/z8dOt77/356/Pp+e77/X1zaW1nbWx5+Pry9eXy3/TueHRqaWhu\nb3d87/Dm6vP5/n92+3XwePp0+/fv7Pnue3h3dnh69XnzffJvdXV7/nH7cfhvff106/np7vbyfe1t\n727+ant9/X38+/b7+3ducHx+8O76+3N9bvX76O3k7ef+8HT6dfF8fHH/bW5tfG/+dfT4/f//+W53\na3dxfnX7/fDu6OXj5eTv63F+bGluenZtbXB1+XT4b/93e/5y8n/r9evs7Oru9f7//HD4anZpeW9y\n/nv++Orr+/9qdnZ2b3Lz++378/D26fju+PHtfu5temtsZ2F7dvTu6uju6/bu+f98cfx+/P15/P70\n7uzzfXRwb2tuam9vdXtsbeLj5vxr/ufn8m527OXk+2997e5+eWx5d3B0eu98eHtkXmpxfep0ffXs\n6OTo6Ovr6Pz2bGFfbvrzbmx17efv+vj1+3RubWlua/3v+fP76+jg5vN7/vHv9ftyZmlv/nFkYWlo\n9ezl4+Le4urk9HplZmtkZ2psd3nv8+zu+PPm8Pj8/Of8f333bnxuePT/+f5xd/1+c3Nrc/n4em17\n+3Xv6nxx9Obk6/f//Ozn621mbfTj6XhlXmbv7nlfWWjz3t9vdX3e3+r3bf17/OfrclZbcd/dZ1x7\n6uXs/fXteXrx9m1fdujf7G1mft/3c2hh/Ovq7Hb37vDv8W9fXmrs7mxcX+vb5f3859/h9HZy6/j7\n/u/5ZHnp3ulnWl/o6mBaXe3h5f9pavzv/+3u83Bp5untYWTl19ppWWF5/nFlb+v99uzj4mth8eN9\naWFs4uHudGP82uHn9Ghlbf7l3mldX+vd7fFhX2nt3vhnX2nx2OZqbnDu6n58bnnv+fju++n7ZmVj\ncern9PhmX+zW23dga+7i3f5nZG7f6/l+dGxu7PV9Y2Ts8+V9ZPv/8nJlamrn7vTr7ubu6W5ha/Pq\n8/5yfHVv7OL2Xljs2e5vWnfg5ut5/vFvbvDgcVtc+u7zeWnq5ezb7l9eaXLucW9v8+7w5+bf6X59\n9/Z78OLrb2xt9e7zbmRka2tqZGvr6OPvfWlob+ve82dgc+7n8G7i3+ftce/0a33l8Wp+bnH1bG1s\nf/freO98Ye946uX2b27y+Od1aPl083P06mpoaPD68vNj+ODl7Whu6t7ncHP4bFt9/GljXfri7O7s\n3Otv7nv39WP9/f/5Z/9+b/Tu5+ty8un9425p+XfxX2V68N55avXr93VnbO7u7e5tbmBq9HbtY259\n59ry9Grv1+HoaWPs5uTv+W11ePPoWFnx9fdtW1/+7eX9b+dw9+xeb2li7ebj9nrc3erc5upsTmni\n8F9T6Nvx9Hbz8mFi+fV8dvDc9mp9+d58Y2Vj4/Frb2N04eh74+Xy/W7d3GZoYe/dbmhs9W1dfN7d\nX25+6N5bXH/e5mJs9efj+2zoe2L+6eB9XuTf6OpbZH1xbnBgZ+313/H4dvPrZuV2Zu7/5P1t7/1y\n/nR743f76Ojw9ep+ZV9h/mthZ2bv3/3y7Xp+2d14a2V8//Z+b2Zj/Obi7O3r5+xtZ2J76lxr8HH0\nbObW5efp6GZPZdjha2Bx6eVnfO5973TtcvF1af1e3+Vvdf7pa2Vo7vb06P7cbfXdY+P2Z+hvX19j\naO31b/Rx3+b88X/e/GTl3fxaXuPiaF/y4Xxs8OPsdV5cedziXll/5HJm7d9+893/fXBs33Vg5+5V\nXdDXelti1fJeee/tc+tya2Ft2vH9eGvc+vjebWR77+1fa974YGf47Hpv2upnZWvgfV7w4+rw5XZ6\n9frX7FpibfVvbGpu4fZvb3T44Wli4+x7f/Ht5env6+n7aPz4dGBac3pkV3Xa7mt73N/uenHuYevg\nc3bx+l/q7vDqWPvg3/de+eD0c2Vo7l9q6G9iau3v8e/2393lcHl+Z/56ZfHnfORxY2b71Od0/3Vu\nX2Dn52x2ZevjfWBb/dnuY37s8env49/wZmfod+/eZmTm5XNZWunj/GBw/mBy9+Lk7Oju2+9ocnZy\ndGhVcfNg92jf3HT093Lr2vvfcV/hXunlb/Jy6352cm5q8OZ6efrxZV5d8+tTYPnY3Wj33M/gavDd\n5XZybmhfXXPldlhi4d/pb/rwXmhyavxq4/pf3vXl3ep89eXv9nfvX+/oavt0aWFs4eHq4Gfs3vx+\naHpfY29v43hsbfXmb/Tral5h4v1rYF/f5n3+/+vr4NhuZnfv53Vv6tnma15m3/JvYGh3bnBqYWls\n79vp/+Pwc2vd1uj/bHzk6HRdWmb6Xmds/Ov53tj7ZG197Gxq9m7e6e/c/fV4+N9wWm/qe2Vj3+Rl\nXG7i72ljeebo+Hrj3+L25t3o9lZr7mZaW2ld/GJi6efi5tzsfOZ7bPDb+/vsfePvbVxe4+dlW3b2\nbWN433tlYVj96nhhe8zW9Xri0OBp8tn1XV9q/2psb97uX11o3Gp05W9kb9tlXmF23+Hn9uRs9ejb\n3Fxu/fHe9WNffvPtYFj46O9jaulsb2/j4ll2393daV553OD3/3XjbfrxaN9yX2Td6Vz5benh3vxV\nYV7n5nTr8vp9flx9725wYdzkYvn74ttdatb0amRn6X7sd/na92zubPXXeW1mam9kZmJ25nhVatvi\n5Pbf2nd52uRmZn1kb9pvXfPk9fv9bWNd+ufm+G/reWdsZ37k+Pno4OPhfXF1aPTtbVNdanfc7On6\n5uFf/O5oeH1t7W139G7n4ufo8evwaP7b/HFkXflmWlVu4+77dert4Wxe3uLhfPJ8fORja3Zu/Hny\nan3pfO/h/e3fW27ufP1j6+9ta+7fb2ld9+l2X27f+ePk6N/+62dq8/TxaWrw8m/ufGVoeGtm6X1a\n6+n3/3Jz7eLt5+pv5udjb3zzaVj+4H9je93aeGfu5ebval9z+9vqa/hqa+nuaWRu7nFndW7y+Wzs\n32l+fGN/9Nzsbvrp6fduW3T6cm5u59t3bNfqcWl06fvxYmnn5ltX/u7o9Pbt6uD08+VxaulmXODj\nd2Fh7/ju5XZz919b+v7q7uvt5u5lbO7n+O3o73z8+f/rZ2hdZ9pwWmrf5G5eZN7g6Gpe5uvk2f5h\nfPp8+vl07uj7bl/x8PN5fGZY9Pt37GpbeNzt9Pze2fZiZfXgY1/yb2xu/3rreenlafp05OH1bGXk\ncXTi63ft5enmbf57bmhX/HFk+nz1fXlx/+Lf8ff3/eh4bnp+4Xvr5HBp+/RjdG/59GNlcPFlef5n\n7f1tfN3pbWx9eO7le+3m3/nu4d37Wfh0efRg5+hiWXN03vFW9t/fY17+6Oxqbf7jcPTwbuVx+3Py\n7mF6evl2dm545Pjm8+/mbP3z6mp4cmDg6W9i6dv5aWDd3G9Wbd1rc3xpfe9zae7/6e1/evHx9u9u\n9Xp77n57dm537Xtw7/nz7+h3X2ln+OPz82Xk3Wb/7d73ae/u7mJn4/hlX2xpb/9w6nb5fvjzXP3f\n5O1lb+7zc23+4t3xdffb22py5/lsa15sc15dYXzkeXXofO3w/u755+n9cvPl9PHv7+x7XVt26m9d\nZ+Xfc/bs/f16bfjocevo+2to2OVkZGLx32Ns3fdrennn6F9r9ujuZW5y8PFkb+npZe7c5vlp6+X+\nW1328Gpk+WRteW/q5uf19H3u5mv7+vP3a3p57m748erd933/dnz8ZWh3bmpkavHqd3Lu8+vf53Tu\n73HweHb5ZWP67ntuet7ffP3w2v5n9GZpdXB9cmn8dXT6avXt+u558f5cb2ps525s4OLk6OnZ23Rx\ndej3XH5wcntcde9tYG3n6HFr6u/x/Xfd9W31dW5seu/ta2nt4u724ef++XD27WRWW2xnYGjq3+Nq\nYdrY72715n5vZnzzfvzn6e/m93r36+9sZHpzZGZmaXz8fvTl4t/lePbf6ndxeWRkb2lucW3/fHXy\n6/X+9PL37+3t9XR+5+nrb3Xh8vtsdGhlfv/5ZWtmbPd07fni4+Dmc+98/vd6cWNhcHl09u/5bm7n\n62xu/v9xdnzy5P735uxyaXbs+X56ae/4dPPw/3H6/HprdvHr7m577OTsdXzs7Xd3/W9jbf3+d25x\n+uru9+/3fOr1bnFsanh4eu3o83n07+//+Ozyem9vdGllb3Vzam17+PTs4+Xs7ezs6/d9/vlsanf5\n+X72/vx+a2Zt++ru7vR5dWtua2pxdnBudObg/Ong6Ojt63Rr+f18cG1/eWVlcHP38+vq+e/4b3Jy\nbXVycnPz6+Xf4+15b3Rrdnhqc/Ts+HP55ev27vTs/G16e/z5c2x9fWhmcnp+/nl29+13dvXs6uns\n6+Txen5wa3B3aWxz//t/+PXs6/d+enn89nf+9P71/HV68/d6dXR0c3Rqe/BsbXR2//177ur0+Pzq\n5+/v+Hx2cndxbXXv7X1uc357fvv17Pb76+1+/PHy+Pp+/nl6+Pj4d2pgZXN1bm337/nv7+rq/Hvz\n/fr6cHh3+/Hx8u/y/fT++fV/e25veXhvbHJvb375839x/Ozz+/Hu6/b/dnl8cnd2fnh+8/d2cv/3\n/fn3fv58f/v0+fT39PT+fP7z9u7r73h3eWtkYmZobXD66u7x5/H68fL5eXz+7e/y7+rq7flvb3d3\ne3tvamxyend4fHp5+fp1dH1+fPfu9Pfr6/D9/u/s7nptcHh/df/1+fz7+3xvb3N6eG91++/09+/t\n6ubl7fT/dnhvbGdqa2lrdffr6+zt7uzv+v/3c2xtb3p6d3V2e//+9vr48fh6/fd4cm9tcnn17enq\n+Pj79+3t7f10evt+d3Ntb3Fve/vy6+74eHRzcX7v7u3r6+fo8Pl+dW5sbGtrd3lveH318vl8eXz6\n8O3y/vv68/N+enJxcHh98u70+Pv9enZ2b251evfw8+7s7u74enF1d3V7eHBtdPvz/X57eHd3/fHx\n/Xh8/P54fPj37ujk5+vu/nNxeHdub3F4fXZ2//n28PP19P15fX///PT4eX3+fH15cnF4eXFtdvr3\n+vnx9/fu7Ovt6uvyem9rbG55+ntzcXFz/n15/fX2+e/v8fL0/P/97+719/ny7fVwbGxzbmt0dHR4\ndXZ2b2hpbG559e3k5+fj5ebu8u3x+fp4cnJub3X88/p1cHR2dXZ2fH9/enP76+nv7+/t6fL+eHZ9\neHJ6fG9udXxzcXp++vHz9vHr7PP9enJtbnn+/np9fe/p7/H5eHp4cHB0fPr18/T8ePn1/n57+O7v\n+X798+/+dXd2en14eXn+/v73e3FvcW9sbHJ6/vrx8vbt7e7n4ePt8/Tw+n11a2ZjZmtzb2xvdHh8\n/vb09vz69u7u8e7t7PF9+vDr6e/193t2bWpoaHF0bGpsdnp1/u3t7ujl6fJ+enVydnj58/z17/d9\nfvx+d3t8fHd1eXh6ffbv7O/v9n78/Hpvb21w/fz08vx6/3x6e/z7+vry7PZ+dHN2ePp2c3t0fnRy\n+Pbv9Pj4+3l5cWxye/Pt6uXp7evs8/p3cGxwenz7ff77/P77+/f/cm9ueHFrbG187uzs7/Tz7/L7\n/nl6+f56/Pz7f/3y8/f3+Xx9dXJ4fXlzcm16+/T29ez2+PPx7vD7eHZtb/52bm1vcnn+dHj6+318\n+fPr4+fr5e55eW5oa2htcXJ/9vR4/u/4d/rs8+7t9/bz9/n9e3l9fnZ49u75/XRrdXVvdm9sc3Bv\ncX7t6Ovu6/T7fvt4b3N6+vrz9+rl6ezm7HZvcm5vff39+/19+3prZWViX2x27uft49vb3t7g7Xt0\nb3RtZmdnZGRpa2tqZ21oZG93d/bz8e3u7Ont+vPv6eDu7drr7NxvYdf1YO3tenjz9eVmPjbXuT3m\nsby/1875WDgtRUM2QsvIyLm7wsleRElDOD350MvDubW+z+/6WD49SFBRXdbKytPe62BNRkpOTWPc\n3dHHy8/K02djbFpTXFpv5XPv193o5/xmdl9PWmBbWlBAa7fW+7a0vtLhXUw8MTtRR0fVxsbCw9Lv\nVT9AUE9Vz8jIx8/a3/1OTV1YVfre08/c4+dhSkxVWl1v2M/R3Pzc0nth3u/l1Nba893zX1I+NFTH\n2My+sLzUVj9GNCw0Tk1Oz7y3tb3M2lQ/PUlMacvFvr3H3d5nSUdNVm3m39DO3nfrc1RPTk1SWlr3\n4P128/fueW3f3d/a2ODbakjk2lLp1dPF0ufrRzbDtDzbt8XLSk9ITDstSOFKVsTIwrzcWlVTPUNx\nZ8e/xsG+0m/oXUtPfWFw2/389mxgYltUV1tUXXdr7Nfa4NTP6u3pTljfel7twub01WTl3v1QW2Bu\nOTWlr0yvwrzMMC4xTS4sX87mx7zotLhBP0JIPkjs0LG0zL6//E9SS1Hf7djJx9ZlU0xSTkVEUltN\nUmRt6uLe1MfK+PPp7mxVZ19+6PXMzFxZysJoRUBfzkgvr5zWvLfgvTIrJDtTKkjew7i03U+4Yi4y\nO0vXv9O4qLrZ/ldbTD45z7XFyMjL220+OUxNP0RbWW3vXPHP1+3d2Hnk5lboyNlsblxa2utp11JJ\nzL9mQmPbfEyqpN+y4E/ILSsnO0c3xeP0ubnrT/U/NDg4T721vrSvzMzYQURLb1XMtbu1xl1PSTwz\nOkJKWl5N7Mtyc9nkeOh5U+/S39HQ2drX0GzsV0vM9kphxMn25ElJ05+rWLk92ngnKCVISkTFU9yz\nvWNMTj06Qjxkt7S0tLzXzGpCTk3o6My4t7XPVk1GSDk3Pkr4YVhtaXHm52ld6/5QV+nUzcjQ3tXd\nbHH1WUtU48/cX3ZdPMCdpLbJP+VTLSggLjzfsOxfx8C+/T8tLT9Nyry+uK+vxuRJPFBf39jPxse0\nttBPOzpHSzw6PU5g6OFPX+jf0cfUZ1xk69LMc2biy8PLYkdPZd1mUVjv01VM2amjr7ZTPTovOzQv\nLzfQu8G95U39+nA/MzE8xLWwssHc08nI7UU/TM7AyMjGx8z2aFM9Ojc6QEZkdnTc2NHY1dl2bF34\n08rM/9jP0ddbWFJKRU9yZnRmTEnDqKastvNTQTk+NzEtM1nOu7jSUF5cXEo2LzdWw7Gwu9Lc0snE\n3U1J/czDtrjL2ldSXUk6MTI4SeVkTmH62MfDzvZjVPbIytrj49XIy+hbT05UV2lMPDjInp2ltzw8\nRjEvJyIqQbKrtr1ZVsv6Sy8nLVOvqq+7ennJxdlIOz3Zta62Yk97z8doQjw9RVRSRkNNbXPv393R\nzNz6XEhIaNXf7OPTx7/IfGBJSEtdSTTrn5uirUM1PywrKCUtQLOpubz8Sc9oPS4pM+OtqbW/2u/N\n21ZEPk3Qt7XDfElqyMZjPz9Mc1tEPERh18reT1TVytJ5SknvysnUclh5zcjSWUJKVEp0Ui/+nJif\nrjYySi4pIyQxSq2pzM5bRcxvOS0qQMKsqb7Hz37MXUVIT83Fv8Dq835Y9t/uW1NUSkdFQk/y3cvU\nY2Ds22JOV2XWytDs7+j03uRXU1VHT+PObz84wpaar78vPEgrLB8jUsqqrFTbb0rNPy4rLNO1razK\nwcDr4z1D7d69y9DG285bRl3h0WdLPz0/RU5c19DKy+j+ZFVLSVzhycPO3d91bdXcWT87Vt5qYz4u\nwZWXrs093tosIhofVL+utm23s9LrLicsMPbMuq64r7lOQThPx8rG58a1wc5nOTn8vMZTPjpHVUNE\nTfPIxcvn5uRBPlR73trV3MrG+unN2FM7SMrMWUU9NHmZmby6xr7UJB4aIltSx7u/pajdQy8tLCgw\nPrWhp6q8altCPTU768OvrbjJ0VY+U35qRD9IUuZNPUNfzMjeUVjY3lNJTvDGznDZ0PfVx9VRQ1Fa\nysQ+QUdEpJi0v665vioeGx4+Lje2rqWmxVpdTygdJje/qq+vpqW2TjQvOD9GXrqts7jN0sdYOC03\nVUxAOULHvexu483OeFZFR1tl3c3Oz9TKw8hvQT5V6EdTytr4WO+fns+2wcjsIyQfLDsoS7y1rrXD\nvrpOJCc4QUpNyqqgq7y+wdI4MDZG5E9myK+tw87W5ksvKSw4QU9WzLe1usLFbj89RkpJW/LLvb28\nyFg9P+vhOG/FXkMwoJ5LqbGuqTcuKDUrGi0yOcfOwqufsXi+VDIsKCtG0EC5pamor7THxl8rNjU0\nRVjVvq67x9ZGOjQ1LThc/dO+ur6+1N/vVkZIYOLW2NXf8l/t6FX909v3aFR6TM2s17+ttrnk7zs/\nMiMrKi4pQvHKqrKur67CauY6PUU6QFxT2ra1v7+6vsHdX9jPTT4+OTgyMTlH/86+ube5wMv+UUxA\nQ0JM1cTG5drJ1F5IW9btaPjQzdnW4vFv+FU/Ol3HU9m9ubfE1/7PSDg5OTY4PzpffHbFvMDGvMXN\nzGJV2V9DacnUzsPQw9RPT1JENz5IR1nezsrU6t9rTExba9nJwLu9v8rL/khMPT1EQU382mnPvsXK\n1GJRZklGSElPat7rysDJz8vbfe5RTVVUSlpuV3f33c7d1N7a3W3a7e3X1tT6aGhTT0ZBR0ZPbM/N\n08nM1/FgVlFSb+Hn6NrHyeB8am7w7vfc5mtfXVxbXVBd3M7V3PHm2/5aVF97a1pr9n76fGbny9dr\nX3dsWlROXWZl/eXd9Xzj39bV1czNz9DfallLTU9OWV/az+f9a/9oVFVQWu/c0Nbo7fPtd2lq49nq\n3uZ4+V5qWVj7W2rl8O7y9+f7bnP56Pb093ft3tbX6uzoa15ZVldYd+bc4PT3amhoal1r9u3Szs/S\n321eVlVfc35fa/LtflpcX2ri2dTW3+x072VYXl5869zf49fo5O1v+WdmaVxWUVtibHxv89/b397i\n69nP197g6PRjUUpNT1Fo7N3c3e3s7vZ0Xv1359Xd3+ltYWNhYmfv5ebf7PHtbl9qfv9rdHR69/zs\n++fr9+Xt5XVoYVxkZHz29ufi4d7m6/9cWmFpYl1dafnf19nSz8/Z9HJgWFRSXXh5amhz7vFzbWJz\n7erd2N3f3e56a19ea+/l6vl4/urwfnBrZnf9amtrbmpmXmP/+uPf5OXs6PN+/HZrcvro7u/p+e9+\nb29kaHr38fb/7ebk6Xj/bmz58et893Jt/WpoYGBjaX747OXl5Nrk+m1gZ2v36u967ePp6XFqc3R+\ncf30c3xxaGZibHzt5+nj7P7q4e19+O/17/tx6Otubm9rX2BfXmp4d3rs7e3t9H7v7f969+Po6er7\n8flmY2FfZWRt8N/b3d/n/Hp0aHz3fX527/5ra2pw+f3z4+Dg5vxsY1xYW2Vz+P3x4+n68Ozs7u7m\n6unn6uHh7vpgXWFdXVxmd/Lo7/Pg63F7am33fG3t4vr8/uzo6G1v0+5o6ed4Z2BdfmBUXuzmbebv\n/Hnc1mT64OL+YlZh6lxhcOvm6tvn3eLmcXB3XmJiamTz7/He9fje3mf44HFuX2F78mJf/nNoafb5\n7ed5/Nrece3n+Oz7eeLn/P3f8mz683BrbGd6ZFtfcl5c+/Ls6uPm5nxr8fdxbHX44X9u6fPz/Wli\nbvlqbOf0cejc4t5iTV59aFR1xLq+vbq5v95URkE2LzA5PT9Pb9PP093Ozfhq697082B00tnp18vP\nztTe325OSk9LOi2/oFPKnqWmucrrPj0eGi8qHi9Dw62rr7uksTg+STgwMTFNxMDIsaWwtLPI5U06\nLjg+MjtYVFfW1tPL1Pvm4lF6a0lr9DM6mKA1nJulrF3eKjIkDx84HSRLzqqoqdCypy0pNDQ9OES9\nrqqrq5+purtfPzcvLS9EREDkaFluXllOTEdVaE5qyMts4O0syJPCUJaipr9A7y08GhdZJxw6V8Gt\nt/VtrUAkY0ZEzMvVrqTOuKm20r/DPr9ONFVaQTHhQDxmPUZSYEHv1UbpxmVfx99qSi0vm6ErnJyo\npEC8zUkhFk4tGS9L066z39G2NyU6MC9K+tavprKopbG/vso7Xzw33D9o4cjEU+lEOzovMzlBRz3O\ntc/Dx8nNRCsrn6cynJ2fnkSsuDciGkYiGS82yrnJ4d7iLS03MT5XzrOoq6qkq7Xv1+o+TD/Mvl/C\nys1uOTkwLywrO0JHWOm7u87HvMhMQUA0WKSxtpiin6nyrTwoHyMwGSE6Ts18wNTtQS0/OjVF7rW1\nrqino7DEvslQRFLizVNfzdN7Pz89NS8rMTtAPkvHv8/Du73VSlM6Oqutup6koKPOstc5KyYyHR8w\nMU1TzddXPzRUPDQ/7Lm9t66pqa+/wrdvXM/Pw2Fc29FZPVU/LywuMy8yQVrWzdK6uL3Ia9NIL8+v\nxKejpqGup7pSOSo3HhsnLjU019duTzrsQTk9XMBvv7Kura+vtLPKzL3I5G7kU0xPS0k9NTU0MjM6\nVExn2N3DysrEz3hYQz3Jsrapo6SlrK/DTj0uKiAfKyotTfBsU19kRUREStvc3bm3ta6tsrq8ycrM\n393WeFZrXl9DNzs3MjA6TEVNbuvn8s7HzdTX4G9QSb+xuamlqKqzs81SOi0sIyEmKy86T0rz02vN\n8PXR19d1vbzBtbi2uL27vcjS019LUElGQUFFPjs7P0M9QEI/Ufnaxb26ury/1vtiR3vIyLGsrq21\ntMBTQTAuKSUoKjM6RE7xz9nP4s3U2cbGusO+v8vI1czQytDWx8zTc3n1UUU9ODYyMzg5QEr8y8G6\nu7m7wMLK1dbW3trcXVNXTW5ccMjLyNjKy/rySkE6MS4xMzhIase8ubu2uMXGz+VVVE5OZFDZyc7J\nz83V3PBYXVhTTUFBSUVJVGH0+NjMycTCvrzAxMva5U1FQD5IQ0FLW1hYe/HqdF9sbG5159DPy8fM\nyM3S0M3S5M/nWVtKRD4+P0BMTnHZ183Lxs7X2Obg5vh2fe3zdOrs+N7t6+F9bW5qXVNRUk9MTVBa\nYl/849nNysPDw8LLzdt9YlNNSU9ST2Jx7+X18vteT1FZWFdfbPDW1t3V29vS19zW1d7sdG1vXmFi\nZ29YXWFkcV9g/vtuf+zza25wZ2libHD23dzPy83Lzd57YVxTT11n/Pl29G9eVFVeW1dibn3q3tXX\n3tjY19jk2drd53Hpfl5hXV1iX2Jt9Gto3P1caVtbX1dUWVpRY+fk2tDPycbIzMvN5vFpV1taX2Fj\nYl5bVVZcU01ZXmLz4NfU2t7b2+Hj2Nzp3+Hg1eP49mJZTE1OTFpbaO3n2t/g6Xbv/mdoa+/q8+3l\n3d/i0tnq7n3r8HZlbvJkZV5STk9RVGh4+t3U0s/N0t/j9WRdZm1jaXJ9497f3+P0bGdVTk9RWmdu\n8eno593U29/l7d/xd2dr8/Hj4uju6OVt/2/YzNR0SkZIUlxZS0NLXc3Lx9Lc3dTR2ONZXnzb3tx5\nX2h92tbfalhTWGNoYFpaXHP6bWhlaPHb087R29rY3d/vcGNeW19+c2xhbX7c1NjuYVtXXFlWVVVY\nZ+zc2djT1dLX4dzf7fV3Zm768uz4clxcV1p28/B8a2doaHD09P58cv75+eji3eLm3Orl6ezk+G9l\nYmBrc31paG1pdm77enhtWl1k9f3g6ure3dfi5m1ueXb3+H5w6ery8HZzY25fYmVdZ2zv8urg7d/n\n4e7/fWZsandy8vnm3uvf6ud5cnFncmRqbWlucmtfXFtheuPd2tPd3+rw7+/r+uX2aGJdam/07Ojk\nb15ZW19fXnLs5vfu4eLd4uvn5+3w9/f5d3F7evh0eGtvaGdpXF5mev7o4N3n/Xpnamr+5t7e3uHl\n7ntzYV5manX58PLp5H1uaWBkbHF+9/bw5uHj6fd78/V4eG9uaW99dXx1c3/p3ubj4+PpfnN0c25w\namdrbm1nZ25rbm1tb/Tx7N3b29/i7PBuYGBfZGt4+ern6+/p3+fj7HV8ff9wbmxtb3BmbHdycXb1\n/3xvdn51f/bu/f12fXNu8Pbq5+/s9Pv+ePZ+dP54e/f09/v18Ort7+v2b2tpbW5qb2//7319f3Z7\nfH75fH9+ffnv5+ft8XdpbXZ4++3t7e/9ffd9a3l1b19p8fvg4eri7v55X2NkZHzp39rZ29vmdV5W\nVVJTV1pndu7f1dHa3On8bV9dYXF46t7f3dve4O1tZF1YV1tleX3x6ejp6urq/m9vevp3dX7x7ezi\n4+bo+H1oXWBre3j2+XT99nZqYl9jZ2t37uPf3d/m5+fm7+/t9/z+enx9fnRqaGl3cWx4/Xd2en19\n/vH08/T8eu3r5ufq7PlvYmhlYmtydW1xfPr8fvfw+XR/9n388u/t7efq7/x4+3xxfPX29/L7b2ts\na2VhZmhy8uTZ2djX2tzlfmpkX1xdX2RoZ2tsbnBwefrq6fT19fLy8uvq7/L09/P2fHhua2Zldnp3\n/3D48Pf29+zv8/b79/Ls7fF+++/0b2FcWl5nedzOx8K/wcnT71VFPTo5OjxCTGbey8O/vsHGzNj9\nW09LSEpNVWbz2M/Q1tbZ3ud0XlheX2B1euro5N/d3+nu6utuXnXfz8a+uLm7wNpYPDItKystMztL\n8sm9uri4ur7Ey9nvWEtLT2HhzMC9u73F2lxIPzw5OTs/SFBh7NnPzMvMy8rKy9La5/xgU05JR0VA\nQVrUva6ppKaqs+Y9KSEeHR8kL0Haua6pqKerr7nLdj83MC8yNUBlw7StqKiqr778PS8pJygqMDlI\nes7Cvbu8vb7Ey9buXVBNSUpMT1ZibVdOy7etoZ6doa3HMiUbFxgYHSQ0XL2qop2cnaGrvkIuJSEh\nJC482rerpKKgoqatx0MsIh4dHyUwSta9t7KysbCytr3SU0A5NzxAS1ZZTUpMQj3arqabmJmdr3sn\nHRkVGBoeJDBcvaSbl5aZo8Q5Ix0cHycuSNq7raaenJudpro9JBwZGx8qOUrizb+3rqqpqrPNSDUv\nMTxN7NbpVEE8O0ZjX86pn5yWmZ6tXysaGBQTFxohLdqrnZWRlJuqTCYdGhwfKjZIyLGlnZmXm6K4\nNyQcGh0iLTdOfNPAtKysq7XOTzo2NT9ObdHb2ftqVk5PSlx9WE+0oZ2WmJ+yPSgZGBcUFxogLr+f\nl5CQl6jdKh0cHSIlLjxPtKCYlJWaq1gsHh0fIiguO0jct66urbjlST88PU5iUGPr0cC5tr7gQjQw\nLzhb8FS8oJ2YlJyuQCIYERYWGB8pRLCak5CSm7wuHxcZHSUvO8m1pZmVlpypSycfHR8nNDxtwLm1\nt71XRDw0PUpvXGrV3L+yrq+72j4uLCwvPUbfxlC/m5WSkJ7KJBoWEBkZFx4s06STj5Oaqz0gHhob\nHyk746icmZeapcBALCEfJCcy47isqq7OOjMsLjpESFHZy76vrbO5w3lGPjktKy8zQ+27r826mJSV\nk6g5HBcYEhocGCNKqpqQkZqr3CwcHBkaIji2pJmVm5+qzDgrKB8fMEq7pqSsxe82Ki0sKTBGXrys\nrLm+vOPLv/U7LS4sNmLq2dPBssDZm5ObmbI1HxsmFhkbFiFgn5mVmKO87j0fGxgbKc6fmpqdpbS5\nyzIjHiUu86yoqbG+ZElEKyMiJzfJrK63wd/Otq++VzsuLUBoUUZCTd+4qq9OT52XnJzLJxocJxof\nHhwruZmXmJ+7RjUsHxweL/qomp2irrbWTUQqIilNvqymrL7q+T4wKiIkLuK2sbDE19XHt8DUTDtB\nPUJKQkVL98PDvrbHO7mTl5+xLyMaLC4YGxsm3KCVnKu6ymBJLR4aIsqqnpyqus6+zEAzKCtgr6+x\nsMpfR1U0KCooOF22sMjI9NDYzr/e71dmTz5VTklEQWjRxLOxRTuckZqpQCgdIkIgFxgfVKuYmavF\nwsFPLR4ZHl+jn56ru8LAu0kvKCpRsaqyvszS6Vk7KScrPefNwd1n0MXG1MnJ4NvZX0M+RUA/SE7M\nuru0vzzZlpShvysnJDA0GRcaKq2dnKO3yci8aR8ZHTCyoqGrxLuvrsM4LCkx062tzlvbztVbPCwq\nNUdQWenfyru7zdvCvr/K9kAwNDs+SVfqv7SysbxELq+XpK5MKzg78yYZGxw5qKKpsb6xr6x8Hhof\nOL+zs76/pJ2itDckIS/mfFlKV7alp747KSYsQUc8PlO/r6yzvL/F0mI7KysvPl7Gubevr7nG9DUp\nw6W3tclqztm/QiQcGiEzZL20taqenKjLMh8eIy8+Ree1qJ6anatvNCsrKCMjLETEqqWrvM3/Sjs1\nLy07+Luvr6+5ydD8Sz02Nz57vry+xcvJxvw8LSooKz1Pza+moaKmr9ZMPzMuLC0uO9TCvb7GzfJy\nRDQ2Q/XDt7a/xb3K4l9CODI/Ve/Cvr+/vLzM8U43LzI4QFDYx8i/ubq9wc9LPD9DVOPYdVFTTEZK\nTkNK4svFtqyxtLO7xNHjSTUwLiwyPD9JUHPpw7W6vMLP9GHvRzU2OD9byby6sK+2trS41Es6Ly0v\nMzg+XMm8u7/Dz2xqaUxGSVZt59HkcFNPYlxTbtTLXjezmJ+gpEk5MzQyGxoZH+atoqCywbOsuzsn\nHBw0vKqrs7Cvqqe/NB8cKl23rbXCu6+svzknIitZwb7ecs69uMHgRDxHUlJBOjc3S9vDvLy6vsa9\nykQrL6Oap6C7PUw5RSUWGRwxrKOfqvq9tNQ+JB0fNq2ipKq9xbq8x0QrJzW+rrrMVD5az8ngQz48\nTvBTTT1EybSvr7bKSTcvKSw2Sde9sq+tq7TvNSwnIB/PlJeZmbTLSy4lEQ8aIb2fn523wKnGWSgY\nGyPGoaSktMSttLpXJCIszqqyxmZLy7y/2zUyNT5eSUU6Rr+vr7jURDs/S0VFTdu9tbG7zNX8Qy4t\nMS0tPZ2Ol5qmLy4kHx4QGSpHmpmboElqWDAwHBsmTp2ZnKPyS009SiwkLWKmn6a1TzxDWm5ENTI3\nTtrW7lp8xMDHzltEQ0taatvIwMLD2E1NUVlTPT0/SlI3tZKWnqNDKiEfJBcbL0Gjmp2hZTY+MDUr\nIixNqZufptYyOjdNTTQ8YK6jq8Y6MzlG3MTiUlNMUUhMTUrIvr293nlGP0tAS27Zz9fS08vDxNdC\nNzo+RTw2r5WXnag8Jx8iJhsfMlKnnJ6rUTlJOjYsJS9lp52kqtY5PTo/PTdE37CpsPc4NTZavbrF\nXUlBP0xXWvDKvbzO8ko3PEJP6dLF3OTIyb7FZUM3OkxUU0cxV5qRm6LMKCIkLSAaIy7FnZuftUZF\nOjUyJSU0vqCeorY6MzE3Tk1LX7eorLhuNi8/yrzLUT4yOFfgx87BvdnbYT42OEdZ1728zevb3dr3\nWk05OkzryNc/RZ+UnabdKiMlNCgeJy5upJyer0M8ODg8KSYs+qSfn649Ly047eV7Wcmqp6zLMigt\nV7q2xkUxOlfRydrvU1vW5FpDPk5tybzB6U1KTHzIwcdzS05v41o2J2OamZ+jdzErLjEdHCMouJyb\nn75EQDU7Kh4kNa+enqLTMjU55MdsSUq1pqu+NyYoS66ruU4vLkHv3lpDU9G+vdhGOD5f1cnM/kRK\n5cW3vMv9QUZFPkQ3KC+dj5iarT0pJSwaExwl0ZuWmapQQjAsJxsdLLibmZuuPTYzPks9Oz6/paSu\nbzEpMcyyum46Mj16zl1GbN/Cu89PNzxX5MHC2ldMeNHIxNRfSUxPPj9BNCfFkJSboFkuIysmFBol\nOaOYmaN4QTksLh8cKGqempykTzY0NkU7QEfcqqKmvTgnKES+tcZOODtddl1ES+nGuMHzPzpFXdTY\n4WxX3NTKws7N7UpBPEBHRDY6npKcoL05KiQuHBcmM7ednKC+S1QzLSQcIzuqnJ+ju0hDOz44OU/h\nsqiotUowKzbww73VU0dUeVJDR2XhyMjvSzxGVejJycjyWVxd0cTE2UU+QkVr3GUyOJ2SnKbUMCYo\nNB0ZJzmxnZ2o3EhGNS8kHinto52hqsxHPTs5MT1uv6qmruQ/OTA8VeDP4t5VUlZISU793MrK52Ra\nWFrs2NTXaVNNYc7IzF9AP0zf2H9NNUuclKK1UzgvLzMaGCp0p56isn72YzYmHR4vvKCfqK+73kI3\nLi1FwrGtrK/NSjU0Oj7s0tfq+vNQSUZIVNzM0vZYXlxt4eXSzd9VS3PNwMZSOz1U5u9dQzBrl5Sk\nukFNPDErFBguxKOnrLTDudYvHxwkSrioqq6qrsU9LCw1YsS7t7KutmI5LzFA5sPV7dnbWEA8PFXO\nwMnp6WxTSUtcZN3gVGfNvLvOU0VZT0ZOSkoxR5eUprBXzUopJxIYOtGrt6+kravxKSEeKjZHuayj\nnqe/PDAzMzpBaLaprLbZPj89OzxPxcPG2kk/REhNb8zHx8jpU0hFR0/o1W5h2L68zlM7QlleWU1R\nWDzClJiyw2DBQicfFSBdz7nDrqGsvD0qKSUoKjm0o5+hscnnRzQqLD3Pr665sLxZTzc7TtjNSVFP\nRU9MS97BwdDMx1k+OD9e6dxeWM+4t+dBRExZ/k9ESN7LPMmWmry/z7tBJyAXKF9U3c+toavLPTc3\nJyUpOLmqqKutrblTMS0yQ2zZzLaqu11KX8l7Tjo7UEk8O0vfvMHMxrvCRDc9X/5MSVbLtrnTTEtr\nWllMP0NX399U5J2Yt8C9u9kpIRspZTU4+LKosMpa89UuHyQ6yr67tKqjqMRDPD08NT1nyri7xraw\nufNGODA3LSs4WcvDtbS8u88+PEZJRkZg3Ly1xNr3c2lHPD88QFDVvtncpJqyy7a95SolICtJLitd\nr7C3vsC7xTgjKT8/OVm2pqOptMvNYzMtMTxEYLu0rK28wcpLLSsqLTc+db+sssK8wO4+NzY+Tk5c\nwbW8wcLH2Uc1NTxFR17O0cbdrJy5zrS1xDAvKis3JShTu8PLtK+wuEAsND8uLE7FtbCvr7Cv0T0/\nQD44SNVrvbW9t757PD8zKy04R12+wrqwuOBWeFdFQEhaysvUysnsUEc/VWhYVGTZZEauouHApqnD\nS3wwLSwfJT1INO+srK2tw1tpRSorODc/77q3r6mvtrrHbEU8MTZUTHW+u7+/wlw8NDI0PklSzMG+\nxc3X2uVMTOrS4N7bb1paSUdj4lpn3uXV9V2xq9y3qa7VVtszLiomLDAwN8W2x7yvtsDK+0BJQjM6\nTmdSzbW1s7G3wczVT0RMQEdV/l9pWj5JWFNM/NTe183cW2pfVU1a58u/zdbT3VZLR0VRVVVg09da\nTsClv9Spq7pPzVAvMSgrLzIvScJy7rGtv8m6y3daPD1CQDlIxsjLu7W4vcHFympi/uhPPkQ/NTQ+\nS1hryrq8xMfJfEpDSEVIXd/N2tXFxu5NWt3rT0x7dE5TV2evr/Svp7Dr1b06My8sLi8uLkphScez\nvci3ttjgYE1VUEhIz+FP5cbG3MS6x725v8nQfj46Mi0vNDpEz8XHv7e9ys/xWlhcXvNSTWPtUkrk\n3trV3unY5lJX9UrPreTNrK3LX7jtODozMjEwLDdfR0zCusrPucLNzNPV4NpSW3xPSlTpcd3Dx7u2\nu8S/x0s+OzQuMzo9SmTfy7zBzc7Fw8vT62xOTE5NREd57/3a33Hj0upe18xeSLetTNyust1gwF5M\nSjQzPTYrOFxCPXvR6si9yb24wdfIv05Le29OROncz8bOxru/937uU0A9Pjo/PT1MYVpny7/AvLvC\nx9l9amlMRFtrU1dVWvl6XWjMzePNx9bu2u1fWkU/e9VXd8G3vsHAw8hwQDpAODAwNj1GTk7Vw8LJ\nv7e7vr/Bw8fhXVFQSURMSk5VZO3h6PHY3vpkbmlSUFBVVVhp3M3Lxr6+yMzcYlJMSERNUE1d5eDo\n2dpwY3pnXP3jbd/Q2PLcz93/a39vbV5PXutyV1tgU0xVXlt82MzKxb/BxMfR321bSUpOR0JASllS\nUu7V0dXRytLP6GHs63BWYujseu947er77PXc2nv6c3loYk5PSVZfWOPky8LN0M/F0GdbYV9ZVEtT\nbOtdTHrq7lNf/Vvzbext287Z0dvO1drf6c/mal5cW1dTTVFhWWJlcvn2b3fp1uXo39Li3uBs7mnt\nYWlyaujc4X7k3mxfX09OXW3zYdfp3tvU6NrZ72RnWmJQcV599Htv3N/u8dhy5udqd+nsZWNdcO1k\n+V772nPkfd3d7m9zeuj0eV1fa2RdcWv05O3j4O/uYHruXm/78tTp1+Xg3F5kWm1VT1tSX1j49tnP\n3M/Uz9ze1untXW5bWlpSTVZYWFpd5tbOzdXP1Nl6WmpZWFlZbnLk39/U1dva4d3vYGRUWlRkUld2\nb/N33+b91nPf9O787trlcul4+m38YF1kZGPy9fz17O/pa2tv4e7madnj1/bo4ORrYl1ZVFxdcWdv\n+O3r39vu3nLcbOtcYmFdWGJc5/PY3dTa0+Tr6e1rZF14X2dcfnXue3H9ff7y7X5yev/39W5ufXZ/\nd+vu/N7g3uHs8Xf6Xl9qY2lr9Ozi3/bleuxrb2L7XmNvZvRt8e/93/rhe+Zy7v1X/WHfanvf/eJ8\n7Oly9XT0e+Bk5HXvdm5kYmNoav1x/vvr7+B133LpdPprY+h32t3o3WfnX3xYc1h6e2r9ft5v9uvy\n6vL59/f47mp5bGHvX+r56ut14u/te2D2bOZf+Frld334ZN197utq1m7r931zae1bdWxt8mfu3HjZ\nY+Jv7H5y+Wp832j2/u96dXXteOzs5mTqeWvpXHnvZ3ty5mz3eu59/m1qaW7+dmXy7uzldeHj3eBh\n32rybXt6af5bb3Jr+F7qbO7q8uFs0HPvf2/bZvJW/V92dV/ia91t5Ntx0lvuZetie25u5l7l82TO\nYOdm53Vsa2nffu97ZeVseO50bP9weHd96HLtb/l58/J6+ODs4t74415ubl5mZvtd6Gdy613ccur0\ncdpp6W725XHja+xt+fp283XuaPDmd+l2Ym9z//pib2H4+2Xu9Xfx8fTt7+rmdt71/OZ4bvVo7uxe\n3V7s9Wn8bHxvbXptbGPcY+Bs4u5x63zq2nbbfdpsc3FtZ19taHd6bvpr7O7ucPtu6X1xdHboeelo\n2fDfd+nfa3ZtZ+dcaWL5Zvb66+bj+uV99Hzr+XNkYXZsb/hv9/fu+nHuZPfmd+hn6u18Z+v0buJl\n7udj33Xc7vBs615ebV5u6ljib+fiZ9r57txk33Pt9Wbpem1s/W3tbXT27mzhWvxoYXtc9el95Ozh\n6+N88N9s7n3v++vveXp0Z35eYlPuW+Fe6HF81FjMat7pW9Baz197fWzeW+peaW9f5WHaZ+74euNm\n7Hjvfvjqe+Xu/PXn+upZaexb9Gln6F35eWLXcuvl7XXobm7j5ORl9f5pc13vXt344HZ+e3J3X+Nq\n4l7p6XTi8fB743pt+WVve/Rr+V9pav3o597d4eLs5WH0UW5xXmZqb/Fs5W7+5eRx42rn7dvab+dk\nfmFcfWHdYfpqePFR6Vzra2b7+9vode7k4Obhed3X1l5z3PhmeFpvYGtcaHn/bFtf9vrn/l3V/Hro\nWdxn9G3Yz99defb6Xk9mduhdZejhzfjQ2NfbWdxP219N/FvbYf1u5dZt7GvqeGtd9eRg/VjlYfl+\nZ/J7ZmnzbvPf7dhw4nJ772x023L7Vm54XONkdtTafFLb0nZa0eFry1N40l1abutP6NtNTtt5R9H0\nc/LodF/GYnLT4flj2VXe5W9p7c1VYVl3b+lWVt/pZmXv4dXp3WXiyk/tXOpvY29Zzn/+We/gaNlV\nfuvo31jWff38Xmbt6XRo8Ol3dXld53h5bPt3eW9v++956uP15+ne63nu+etyaGFidHF1WPVk+mph\ndf3eZmd6fPNk+uLROy6wq0TJtresuMw/3ckrKTIvM0A2PLaxztW0uM3NPzzyWTg28tvl0m7Xt7fr\n7cfaT0g8PGdMOC4sops+qZ2gmbbRPzjqGhMmISMyJ9+noKlgpqfUXywwPjorKf6zt7qsraan8FPw\n7TApNi9AQjJCzL3a5sPM53xBSV0uPpeibZeen57tcCQvKg4YKBwvQU2poJ6+X6hzLy0lNT89O+6m\noK2opain0Dk3PTQjLDQ4Xz8/zbrE5cvKe1Q/PUMsd5SuzZShnKNEWyM2Hg4gJSJPPu2korQ4ccAr\nMCottrrMxKieprO5w7q7Ky5MTU4uSnT9/S48YUs/Ok7uytpN07w2U5Oh3JmjpKU6MyAwJBElKibI\n5lCqor4uPVkvPS0srKS+ua2oprtMPMe5Lj3n4bhPP1TOWyouNjxDNDrWt7rMuL7rNVeTreWaup2r\nKEIjPikVMCUsui5MqbHIL0n1Ps8rRJ6uyMDNtrJnMEm3yVTbcbqvPjzZ1UQtMTRM/C86xbe90tvo\nfC06l6PLnK+eoStBJzYuFS4lKLo0Sq+utjo/XUjnLjirts3JasWux0/SuK+9yGrzwD0vN0VAMjc8\neMVhXMi3vHVeU0U2JMmWsK2esZe0LVUoSSAcMBw+2Cv3uLC8PVNNd/Ipa67LwFz7u7W+6bqur7vd\nQmjXMjdAQ0w9PT/l0kFT0O5n699XPz0v2pWov5u1n6sseyk8Mhw1HyfbLU68uK9VWV5N1jc+zfJm\n3mdsubGtrq6ss7pEOj81QDQ4SkFoV0ftac56P15W01U29VM/qZy0q6u5oVtCbCxxLyswHjBHNFTe\nysZvztFe7mre+j9VV0G/v7yqtaqvysg+bUA0Vj5lSz/yW9xaRmJGVkM97WrXzNTwUbOs28nGybv5\nuLVtvF1MbSszNzdQOERJSd5PUvVNaE04SlDkx8S1s6+wur7Hzsre8f5MWE9CQT1GQTg/R0teVd7D\nztpKPsq12OO4tritrbu+tclfTC0sOzIrMEI3OlpPSFbuTVb1SWnn4r64tbavrrSzucPL6Vk/OjU4\nPzg5P0fy6XNi0cX9/U87O/qzz8+qrbWzr7HGwddGRzApMTIuMTg2NF/jP17X+NfyV17Uxse6uLqs\nrri4ubx4U0g7RTw2PT9DSktZ++H5bMzjUXNbTT7SrtDRr7G9w7W0y7/KTEM0LC8xLy42Pz9fbk9s\nztZk5VxdycvDura2ubi5wMfO/uhZPEhFQ0pDSkZYd09na2veWHnaZGhKbr3E3tm6usO4t729v/I7\nOTgwNDU5PkdcRU7yUe1jV+1NdXntv8i8uMS6vb670crdWm9LS1FYYU5MWlFETVVXX1Vw535uW0s8\nSdLQx7avr7GwtL7M7VVIOC4vNDY4PUI9R1dJU37b3W7c1eDVzr+8vL2/vcDAxdHP3d9cUGJBQ0c/\nRj9ESkt4e2fre/v7ctrPys3M0PrY2vXrz8bMxr7HztjyW0U/OjY4ODg7QEtMWGtt1szJxMC+w8LA\nyMTEysnL1n5sclRaa17q9VBSXEE5Pzw9TVLrzMbBxMfFztLYXfviYnZuXm97+mpiYWpgVG/6eup7\na1tiZE5j/lnz3tnM0MnHz8vnX1ZMT073amzI19LVYXJpSEtcR2VyZM/y4dtv7HVbald60/XVzNrQ\ny9d393FWW2RMbOtaWmhlZn5VVv58//bW1NrM2tB1ad9j6exiznPd0lTi80xdSk5NTVxzcdDlb8Bl\nWcVqWvboaG7rX9Ze1dpTxuFZxOta03xVf01/SUjrSU7uXuLc39zXxm7gyVnQ9GHET2rIX/BWXN5E\nXfE/7dY9ztVPv0ncyEDM5FLPXN7ZU9/W3d9U2drmyk7dxz/n4ET0VUxwRO58P8JdSLpPY71V2836\nv1rsvEPdvEN81lNS8nxB8VNaUkzJRXLESeTKTM7bXN396WZ011nV9Oxyd8NMcsJNaL9JTbhFR79H\nYE/ZYT3JWEnJ2Erl1F3kz9pNz7g9bblHVsZbTN3bT3BR0mZbv0TtzkrTTlvOVk/Kcm9Uzc9L1M1b\nZL1HXLxHb1Xe1DTEyTTGzza/xEDP4s9NVcZH8+di2v7TX2W9bkPE90HTYnZp9vFY0HTfS9vNPcFH\n29A2unhKylrXUfXPRNrGSdbI8ldizUlg0EfmU8/VScBsSMJL3F9HwFVGv11byVDh1V7RVNbVStbY\ncutX3t9dS0a/Qz/AQtBjUb49v8Y4uGBcvmJ7w37UaVS/QlLPT0rVXTzV3DxXw+c+3sBZbtnMVNa/\nQtTARt/FRM1R8sg4vt02uFBR407TTd/kPcrePvbZ6l1eydldx/3M5N/bWcViQ8zjTmli6FZL3EXy\n1j/E0Enty9hF/8leYc9WcrtSP8LZXk3d1Uja3FXeb3tYvnk9zspMS+jYU2HcV9n76M9r+c9zbHV9\nUfrnY2/w2WzR60u/5EJQyc08Z9NUbNpLXLpHQMTEP0+zUj6/2kvs0kXcvENEuNc71dFW/9NLT8Ht\nO9zGSl5v12P60D/OyErVfM/WP9PIR2vTz1Rfy0zj2E1LzexBdtdjTMrZSr5kTOjDUkGxS0K+3eRP\nznI/vWg3w8o/YeLmW97pSs7VPNG9RkzG2EfZ1kzI3EHhwF4/2L5PTdnVX0zL5Ux5Zm9d80xcv19J\n8sPlTdTDe17NZlfPVEPxxVs9yb9GX9ftWuTVQ83KQObFVk3j1E1a0N7pT3zUe9hLZNHyYk/v125P\n4t3T70vH0HJe/8tMX/5ncVVs9fNrbVbR2kzi1ddhe9/V6Ev72t5faNNuXmrOfk3O7k3pY1brdE1c\n0d5N5NPnfnrh2+RndN7jV17cb15Z6NJPWNLraWXd8V/WaG/WeG996/5y3vpi9n3r5lps4e9iYfpw\ndupZ+dR8ZVzb2lx7cNrdWmz93OBRctbm+1z63+1oYN1yXfv87FdY2GFm4F3q7Wf53tRf8czsauru\n82v7Xml4Umjr6/l94OHgc/Lm9fVi3vJc/vnwXm/mZ/13a+BuX2pq91tedWVe+mxu5Gzn9/Pffdrb\n9WXe4mTo++J07u5p4Ot+blTW3F3Absq4X7nZ6r498E04RjI4PDJAQ0Ttf9HEyb27t7fHubza2Pr9\nR0ZSQEZNRk9UYXJY3Nhl5uXzdVvpenDmbtTa6N9QTbS1Nb2qxL1lrbM0yUk+RCcyLioyKzZURV7b\nvK/Euau1tb+/tdbPb2PFUEhcXlA5R31CQk5eZUZXbl/4XGTT3d5x3r/f1NXNzFnjXDlCst8qr6zH\nyN6f2zyyP2k0KzsmMDAqP0hOX9qzuciurbiywbnHYMJDVexEVURwYD/xfVZeXd9aR1pKR05GT1N9\n21LSxMzIzrvJ/8b4TDlJrDs0pr+2yr6gPcLHMtYrLykjNyQqPURcVrytt7KorK2vu7no3Ww7Vz9A\nTEZfSlDeYHLxe/lPSklGRj9GTlzt79DCvb2/ubjH2tjjTzs6M0q8Lk2rwa9jq6NEtVRmVyQ2Jiwv\nJzc7U3/rt665sKyzrsPHx1LcPlJrPntPb+5J0Nnh31TjTj5HOz5CPE5Eds1uv724tcazvNLMS1VH\nOTwqNbBNL66oqr65ncTNyjdbKSsiHzMnKjFWwWW6rKysrK2ysrvvVOlNOEFbQD3251L9zMzs2NhK\nVHM9PUBOTTrp1tLHzbi+xMLczX1MRDxIPjtCQkW4rU+zpaqqz6m5TdQqNC0nJR0uLi41QLm7ua6r\nqKqttrm6z01LST4+PUU/T9RV38fGznPS8E1PPjxGPUA/VtZe0MK9uce/vs7VVHBcQEdES1BRSVCr\ntky0r6q//bFP+0QrNSs0JiU1O0xB27qzrbOvsa222s9sb0s5Pz9cbEFYy7/H/8fF2dtFSUo+PzE9\nRkNYTMi/xre8trzDvFZcXUJBOERHQGlfV1jEqc7Mq7Otx8LNPM43KissMyctNjznz8vAsauvubW1\nwcp4V0tSTDtKUlL88uHdysfybNN2TUlJQz5IR0Vb4N3Qw729xr/K3e5ZX0NGSkRQTVx+29dgWL2v\nz8O6vq+7v05Jyzo0LSstKzQuOlnoxMOzsrCts7nAvshdWUs+PkhHPkVS8OLUzuDJws1lVGJQST8+\nPkxbYM/QyL69vcjLyt3wXUhESE1IQU1NTFBJzLjHtrS2rbGwzFvoOTouKCcoMS03RnLJwq2xrq6y\nrr270lR7QEc9N0I8SElK1d3Iv8e+ycLXUVJFRj89Q0Vi69jHycXBwcDR9nNOTUg+RD9FUUpzZkxf\nva+8tLKyrLC13+FwNTIpKSQlLCw+R23Cu66yrq2xsLjA03JVRD4+OzpBQEdo2dvPvrq5vcLOc2pH\nPTs3PT5FWu/Nzse+xMPJ3GxkWk9IRURBUFVReGFYyLW1rq+0srWwxdxVMjAqKiYmKik4SdnEvrS2\nraytsL6/0NRtREM4Ojs/T0hQTXTFvLe8u7/NyN9ZQDc4NTtCP1Fh9s/Hvb3GwdLg2fh3T0hHRVtU\nTllNU8i7tq60tLm5ts7MRzQvKi4pLCosPUzMw7m6uq+1r7S5wfraVVRNPkI9SkxQ71h72sq8u7fC\n1txeWUlBOjQ4OD9UYfDmysC/u73F1nz3/m1URkhMT1Ba/21Z38G8s7O2t7u6ysxdPTUtLSkuLy86\nPWjexbq8tLm2t7y7y8zoV2tZX1FIS0lTX1t+3tfJx8fP3OpUTUlBPzw9Qkxp68/FxMXFw8XL0997\nYWRWTk1JSkRISkvgzL63s662trjByV5HNi8uKy4tMDg9WunJwr25uba2uL3CydfpY19PTk9IS0lQ\nVVVtd9nTysjW0O5nW1NSRUtHRFBr3+TNzNHJy83W3etWWFZNSkRHRkpP+M3GtbOxr7Gwv8LsST0y\nMSosKyw0N05Uy8nEt7iwtrS4wL/W3V9RSkJKS0xPT05X6dXP1d7j19nj3/VcVFddV1xSSlBf+d7U\n1d7X09Xc5V9PVE9TUU5XVEdE0MG9tLe1ua+xvL5hSzY8MSotJi0vR05N0OG8uq+xuLO9vcHC1kxN\nRkJIRkQ+Sltt19LO18vN2NnbfVBpUEZTXl1b497dyMXMz83mXGlUSEJEREJVUVFa/9zdz8vHx9hS\nz73Qw86+yr66ftFbXz09QC45MDo2RF5L2s68vbi1wL2+x9h890RHS0tQTWxPcd3j3uLSaX7yaVhU\nXE5RaF1t5dHSz8DDxsTJ1f3h61NMS0FASk9DSW5nftrK0s3F1Nzg6VpMT0VKTVJWW9vbzcrFzM7M\n2Nfvfl9k7mr18dzh39DV0N3lbk9WS0hFREVCTU1PXm/n7s7LzcjMzdXP1d/f7fVpfnn3+/tpZGJY\nVk1MTlNfceTk29PNx8rIzdPY3N5/bWlYUE9MUmNSU1l/bl1lV1tXT01NU05UZ9zOx8K+vLy6v8/R\nvdpVaOptQ1JLSlBKSEFaRkVOZPR00dzXzMrN1c3a7O95YU9fU09RXWxp39/i29ja6Njc6+7sb2ty\nbWFkcG386nDsz9Xc18vT6uJmWk1MSkdWTVFXamvz3d3r8uPo+XBvaV5sbXFt79vv187KzuHvw75m\n7sfE73TI5HJQUUhHQTc+Pj88TG1c7dHHxcO/xsXH2d7g3F5be11ZVWhcWXB2affW8Pzd3Ovm2m9n\n+2had35h/dnufdfYcGr7WlBYVEpLW1VVdNnm4svMzcvUUey4aUjKvuBNwspiblZaSFc5PVFAPkTQ\nXF7MycbQwMfLxdjf4+RZT+BpT17+9l15dvjgamp86VdSc1hPUF5VWejt49nP19LN297h5WhhZFlW\nefdx39nT5WrJt21kvMXeR8duQEo7Rzg+NTxZPlbqwNXOub++xsTI2dleWe5bR1fa4HnUys3U2tvq\na0lKTj89PUhHRVpn29TNw7+9x8PFzfFnZEtIR0xVWnHfz+BvucFVwsLLVu3JQlRFQ0E+QDVSSklt\nzsfdvL3AxMnK4t1iTFRJS1RXe2zOy83By8fW3nVXVkZKQUVHSU1M8Xnr3tHM28zP1t998mJmXWjt\n9t3czc3NynpVwL069r/eWkbFSUZNOU4/PjVLZj9cy8PRvrq/vsXPz9lfSk9fR0V7z2Lfv8nKz9bo\n51lESVRAO09RT1vi4NjG187H0vnq3GFPTlNWX1Ntytjfw8HU18tdTLfOOsLA6Ux5yjtYRjVGPzcz\nY2hC277Ew7m8wb3H69jdT0FNTkdXTOfN0dPNvdrp3X5iRUY/Rz88T2BxfczCwb/GwsXWY2VeQj9G\nTkRUf2vQyc7exMNZTq68Obi7w9N4wz/oPCs+Oi0qP0tF48PFtq+/vLS/ae/wSz5FR0BPVs3hxbXB\ntr7Ay+piPT45NDE3Oj5b8tXDuLu9uL/H2HleS0Y7PkpJUWPqysPOzL7ASd2p60+3v8VR51I8Zi0q\nOjotL01m9L29vq2xw8a6y09NR0I+Qj5e7W3Gwbe6t7nCu9tQQj41LjIwNT5JXc2/vLm3ur/E2GNa\nSD9BQ0JI7Nny1Ly+ysnI00LFrz7ct8XAX8tHRF8oLDkzLC9LUs+3x7uqr8HEuNVSTTs9RUg1RcDx\n4by2s7O40L3FRDo6PC01MjJOV1p+trm+ur/EzNpIUVNBPkRXT1/Z1M67vtXKx0direxMuLu62chf\nO+IxJi0xLSw6Rua0t8KuqbG/wcpuXj80O1Q+OFXRwcm5ureuxMzW40k1Ny00NDM4VMzuxLmyt7m/\n3MtqST1EQztKTmDdztfBu8TN0NNB369gZLm+vtDMSDt/LyctMS8vP0fbr7a/sKyzw8fvWnFDNTtb\nSj7lx+a8sr67tb/l1lM5OjguLz45PezP3L2yvr25ymHtXD1CSD5CWmF0ycbWwr3I2NZNSLHFScK+\ntMHD4zl6PyopLC4uOT1Hu666uK6ttL3aS2BhPDA/TkRW1c3Ss7bAt7vC2OhINzw1LjI5PE3e59C5\ntb69v9Tde0tASEw/Rlhf1snd1L291d/aSPOw1k++u73JxVQ4YjsqKy8uM0hKT7iuubiztb2/3EBL\nVD02P0lI3sPPxbm5t7m/0tniRzs2NjQ3OTtO69fOv7y8u8Te9elcREJGTGJoYdvLzM7Nzc7YZltM\nQMK9c8DKu7XA0TpOSTIvKy0zRkhF3Lu6uLW7vbq/41dPVkdFQT1W+tfZ1cS+trrNzNDWZUE7Mzw9\nOjlC7d3PzcO/v8bT3vHhV1NQUlpabm383dfTzd7b3+/dYVrHx9HA3szL1M8/Rzs7PjY3NEVRWX7d\nzsC8v8PHwcjO7HVeX+pSX1Ne+WzY58jIzs7a3V9XR0A9P0E8SU/31s3Kyb/BxM7Q1+PiW1BLT1JP\nUU9k/dnj3tTc19vV539d6c/qz/Tb0MzHa2VSUU9CPDc8QEhKUV/pycS+v8C9vcLL5vF0YF5BQu3Z\n4+3z39POV0JHSEhFRj5MbOzZ18vKvb7IxszM0dhlT1ROTk9JR03pc+nq+tbVzeR8dll10dnx29nO\ny8nWZW5dUExFPTs+QEVLUVZ908jJx8G/vb/IztfS2ObZ9u/+W1hNSUdARURDSUhZ/OfUzM7GzsnM\n6cdv0exy213RUN5eYfBI3UhiWFDmUdRf6txjzVbkdu3G2tHp2M7Mz9v8a21bVUVEPj9GSEpKUmPk\n0c3SycK9v8G/zcTQ3nNZVERFQT9BQ0pLV2vm5dPW1szZzd7nzXDLfPfRbMlq1PRp0kXaRlFUQ2JH\nX1Jd+2rT6eHg9sPMzM3WyM3F1d55aVVMST4+PUFETEpNWPrcysrIxMe8y77K1M1m0050V05fR1JJ\nVk9VVlJeX/j1cODc8Mj10sVlv/vmy1vO7+lobGdKe0dPUkZhTmb5Zdzw2e7u1+3Nxs7My9LJ1dfk\nUFtKRkk/PT9HTVhd+3zYxszKyc/Pzc/R3NzZ7fvjbFrdUld2TFhMW0RQZkfwW2rh0+XVyW/B1efG\n4tjP3+Bw/2JQXEhOT0ldVV1qcnvY5dbd5dHS3czH6s3N+dnjXmJVS1FESktAT09NbmD3+OjI4cbK\n78jSysvy0eh82vhZbHxMbmRKS1VPTWBWW+/ibdjSWMXibrp8arhnfbhL9Mg94mg53Eg74E5F6/RY\ny8plytdcxXFtu19rweTeyuRLaGZKTU1KQE9kTlptX3XdzdPUytrMyd/Lz2bM2k7P/0Lr9z1Tdz9K\naFpWWu3bc2fPynLTyMzc/MLOWNjJ60f430RKVVRERXBwV1jVz3Pvz+Nq7MrI5tDLzM/dzOBMSmNT\nRENMSENOZ+9PV9bP39zL09/hx8vW2NnR2s/wU9trSVtaT0VIVVxWUVrU7mvRz8/W3M/O2O1y2tFk\nauJvXFJYYVtIUPxqZlpe2Orq3/7h1dfjz8nO3ujZ2+BoYF9VWElJSkRJUlNp5X1169HM1t7Y187K\n0dDO3nnc2vRqWE9YVEpLRkpWTnnsYPHl4tXQ09bTz9LQ1djY3O7vbGZaS05NUVJNWWNrZffi3tfn\n8dnR1MzP2dbWz9Pk9V9QSExMREVITE9X6vVw4eXX0c3K2dbNzdTa1978fn18blRbWk9VVlBLUltc\nXm3mbvTSztPUzM7Qz9PY3Ol+aWdZU1NRUEtMXWNdaPfqa2zt49HPzc3NycjIz9ftYVJJR0dEREhM\nTVtpZ3Xt3dvPz8/Pz8zN0tfU2Ory8f1mWFxXTU5OTU1NT1hbbOfZ1NHT0c/Nz9PU29zl4ed2YFlX\nUFFNTk5QU1Rkd3523s/IxcjIxsjLzNfyaFZHQkFERUJHTlJaaHH219DP0dbX1M/Mys7T1t7e3fNv\nZlZPVlNOTU9WV1VVW2R04d7Z2OPY08/MztLc3+nwbmFjW1paWlVUW15WV1tt3dLJzM3Hys3U2Nnu\nW0tEQkNGSU9bY19iftrU1NTY29va29PP1Nvp+vru9m9uaGNeWl5gXFxXVVldXl589Pzs59rPzczP\n1Nnj7H1uYlxbV1daWVhWX+jYzMvLyMjJ0tvfaVFGPjw8PUBKVXnj2tPPycfGyc7S3/j78uPo/ndz\nbm52enhrXltcX19hbXZsY15hb/7w6uPf5d/Z19nZ3ud7aWpgXl5bW2RkVlrpzsXEysjJzM7c3uxX\nRjs2Nzc5PUVa8eTZzMG8u7q8v8nc9+7o7WZXUU5NTlhjcWVcW1tiY3Xp7nxgXXng2dbU1trn5tvV\n1+N4XVZTUFVcY2ZfXFlRW9jDurq+v8TJztjcfE48MS8wMjg9SWfv5NTGu7e2tbq/zOp56d3pXU9M\nSkpMXHl1XU1KTlNYafnubV5b/8/IxcjN09vc0szP4l1NSklMUlhbWUpBT9G7s7e6u7/I3eLdWj4v\nKiwuMjpFadvd1se3r6+yucHMbFJZbPRXSUlPZHvez8/dYU5SVE9LRUhKSU5f2cjJycfCv8TGy9pk\nS0ZGS0tJS09TSkRsvK6ss7y9vr/Z/28+LyUiKjE7Q0nsy8K8tKqorbfP6u9TSkVERTw7RW7EwcfL\n0tDpYF5YSjs0N0BTb+3Sy8bBvbi2usXealVHPz0/Pz5BR1JTZrurpai2vsK+wltFMygiHSEsOlVU\n6b2wqquppqy46UZGQDw0MDc9Tt3Asq+zu8bM3VI9Mi4tLTA7UtzKvrmzrq6vtb3OVUM9OTYzNTo/\nTFdz7HDErKKfq8XU1MDdPjAkIR4fLD7k1fG+rqShqa26zWA5NjU1Mi00S8q1sKyqrLC9zW0+Lygm\nKCsvNkXZu7Curayus7vJ4lE9NTExNTtIVnbi0cvXxKyjoK14T13AzDYqHyAkJTE+5cXKs6mgn63B\nfF35QDMrKi82S825s7avqKKmvkAuMC8sJiIoLT1uu6ysrri2ray08Dw5Oj88Njc0P1TNub7XT76j\nnJ27PzhHv08uHxofIS5Mzbi+t6ufnaO7Rjg9QzUqJygzUciuqqqsrqelrOUsJCcsLignKznfv66q\nrLG/vLe2xEMzNUFUQzUzOmzHwMF1SL6imputZTxC3jkqHBgaHCxrsK6uqaGanKXNNSonJyQnJy0+\nwaaenaCpsa+25jIhHh8nMDs+R+rBr6yss8r1eNnO5kk8O03Uzmw/OUNc2t46PqadmpeltDwrOSYd\nGREUHC6popyXnJugp7UzIRsXHCMuYsiqn5yZnaW2TDgsJiciJiw928u9vMO+wcbPbmFLTWr32NbX\n3N7O20c5NDhFafo7uZ6flJemtygpHRcfFBYaHuOpl5KVl6C03zUlHxsbHSRIv6ObmZieprw/Misn\nIiMnLT/Zvr66vce+wcjZUUI8SWPuzcvPz87V7Fc+NzY+YN9qtaOlmJmprzQlHRgfGB0lIE+8pJqZ\nmJ+pvjosKCAkKykzTsaupJufo6jjTjsuLSkpJys7PmO8u7Svu77H3HFPX05Kck1q2PrR41VGP0dH\n6tbPra6mnaintjYvHh0eHCYiLEpPraWinqWqudJeNzs2Ljc2OUx3v7Ovqq+ytM/dUDo7LyoqKS81\nSsu9r62ur7W4wN9PQTw5ODk/REpTTGHPvr61rK6mpq6ryTsxHh4eHiYmM0Ffsa6knqOlrsNfPjcu\nLjEvNkVnv6+tqamur75uRjUvLCopKS41RdG9sKutra+5v99XRzs7Nzg+PUZKSW7Ywb+zq62hpaun\n5kw0HR8bHCEhMT3dr62fnqGfrb1vNi8pJyosNkz3t62po6eprcDrPC0pJiYnKjE7ZMq6raysrbW8\nx+xUQTs6OTo8P0RHT3HXy7usrKKdpaGzTEMgHhwYHh0lND63raGbnZuitMs2LCkkKCksN0zGrqSf\nnqKpueY8LCYiIiQpLzxYzLmvqqmssb/Xb05KRT4+PUBBQkREUXzOxrWpq5+eqKXEOjEfHR0aHh8k\nN1Swop2Zm5+ozUcxKCsmKCwpM227o5ybnKaz7TwxKSckIiQoMErPt6+trLCyvMnUXVFHQ0JCSEtG\nRD8/UOjCv6+mq6CirK7KOyojHB0dHCMnOMWuoJudn6a2y1w3LywmJyctPciro52eo6y52z81KiQi\nIyUuPl/Fu7Wxra+yvuBYR01NWFVLRUI/REpQ6dXBx7+pqqOhrbRqPS0pJRweGx4qRr6toaOhn6es\numE2KikkKSwtP9quo5udo6rA6kI2JiIfHyg0TOrAvrKrqa235ENHSmxaVD49TnLreFFIXM65yNyv\nraufr7zTTTwoKRsbHiEuPMvAqZ+dnae2y3R0Oy8jHyctc76zraafoqOw10U4LiknIiQqM03OvLiv\nra+wvtL5X1dDQD08S0xMUUxny7u4u79ta6iturM/esXFPyYqHyw3LCs60M2trLytqK22wFIySTst\nNTQ/67a3ua6ytK+6a1E/Ly8vKi03O0HszcWzsri1tLrBylE/Qzo0MzdAWs/PvrO2tcVWsarvz05P\nx9pQKkFFMjgsLzjqPzbAubWvuL61qs9N30tVTz8zP+BS8dPbvrO7yr7EfFc+MjM4Ly48R/XFwbyv\nq7C4wvZaSzw2OD4+SF9iyMLBvsX+u61D3sTrwdzHS87lLjk1LyowLy/r+FrBrq6wqK+0rMR1TUg0\nMT80PEpPeMK9z7y6zMzKUzw+Ojc/PTpUztbHuLy8t73Ext1JSk45OT5CWG9na9diQ7i0R7u1trS4\ntuq5bjdENCghKycoPDxNwq+vqaGurqy5zG1LMjxJLzVMR0fc0O2/wtnDwmRa5Ew9TUQ5SUtP1sTR\nzLe7wb/H3eh4TlNMPj9DPT5KT0BRtM7eqq6sra20y8c7PUAoJCctJi5JQt7Gv7uvr72utMjBwdtX\n1FNAbU9ASllESm9QfMvWfdTRZfP2SEtcTExrdFvP0efKwMXIx9pna1VIST9FSEpNWVjKtlm8q7u6\nvrXI1OY9Uj0vLzovKDs+OUzbxse5vbmruLu3u9bgz0VKRT0/QUtMZ2Rd18na1Mne4eZvUE5GQ1BU\nWPzV2tPOy8zW1evuXFFfVFRvY2V8YHZMeLpdWLO7wsC2utHKTkpJMi0yNisxTEFL2sjKv7vBtbnL\nw77GbNzoTFlXWU1ZVmHU+ufVyun851FNSktGR0lMYnv+29XO1c7Iz8rP0tTf/1xbVlBPVlZXYmj9\nddnN39TIx8rTy9Pm6lheTkhBREU6P0ZKTVN99c/J1snHxcfNyMrP09TN1+bj4WxXWFFYTE5KT05J\nTU5TTFx45d3Wz87Jzs7R1N/c42/39ebw+n3rfWZbUU5KTE1PSFTU1dbPxLzDv7+/wd37YGBHPD03\nODc6PUBWYOzOw7++vcHCxM3d1Mvc5tTk7eX8b1taT0lKRUNDRkVHUllkedzQzsbExMHBwMHEz93e\naVpNQ0FCQ0FFTVReb21y2s7UyszFwsfFzcfP8l1YU0dEPkBDR0hHU2B1bN7P2NPNztLNyszExszN\n0tzv4lxWV1BLSExGTE9OTU9UVWNo79rMysnDxMTLzMzW43l2XFRRTEtKS1BYWlZbYWrb1ODWz8/M\nycnNzc3f6PJVTk5JQUdJSEtaY2Pq6Ovj2+nw9+7x49TVzsvGyMjL0tfqe1pPSUVBQEBCSExcXv3m\n29DPycvJyMjJzc3b5+1uXlNRTk5PTU5RWFpbcfJwcebQ1tvNy8bKzc7R0uFxXlZMSUpIS0xMTEtW\nV1Nk7dja18/SyMPExsfIzc7X5P5nVU1LRkZGRUVJT1ZfZP7u39nXzczLzcvLzdDW2elvaF9WUk9O\nTk1LSk1ZZmn118nNzMLCw8fGzNfkWFVORz9ARUNGS1BWX2n97ejW0NHOy83RzsrM0M3P2OP4/WpZ\nS0tKRERHRkZNUV/q2M/KxsjIyM3W3eHu+25obWpbXmBWV2NkUFTc5VjXzNnNzMjKy9lx3V1HSko9\nOkVDRFJbct3Q1svF1dLEzdvL0+7d23ds3+JacOdkbXNkYFxOUlxMR1RcTlzp7/Pc19fS19TU4OPY\n327q7mt6XlddSVm+W1S2xsbCur/tylNWSjY4OzctPkw5SNzP2MO7v7jAxLnJ3N3NWFHiTlZUUlhV\nSEnJdkbKwmnywOBf711dWEtKb1BE6dxWfMzX7tHR3tz69tdrVeN0TV31X0psv/lwuL/DxL7A691X\nW0I3PTk0MEJHO0/h2ezKvcW/wby9zcnHzGPj009bbF5HRmlSSGPcXGfV9PX2+fFcWl5uU07p81zu\nzt/5zM3p2tnf9mBwZlJQWV5VVHDL2ui8vsa/usDd0fJURT49ODQ0PT07SWddYM7IzcG9vb+/v8TJ\n2NfV+V58XkhNTF1TSentWmfeX052YVVTW2FeZm3a3evOzNPQytPn295rXV1PTlFOVFlZbljeul3G\nruK+ur7U5cVFVUE8PTM4NkU5QP5LXebF1s+5xsG/xcPPy87O1vfT/1RTd19BbutLVd9eRFtVRkpU\nV1BqZfDc3szKzc/KzdvQ2Ojf42lfWk1LSlJWV0/Jyke0vfm4vb9qw9lGZjxEODk4O0U2WFlNbtjN\n/7+/y7u/v8THx9fR3+h4WlhrW0l1dExa6lVIZFZGTWVXTGtvY3Hn1d7VycjQzsXV3M/WbGHrTUlU\nTkhLUk3O+GC5ydC9u83jvu1SYU5APEE7Pz8+Tk5RX9jhfMXG0MXEyM3JzdjO5tPc/9R+aG98XVZp\nTU1MSEhJTUhPU1ZsauDYzs/OxdDKxsrT1M3obXFfS0xTTk9TTm7RVti+0c7BvOHZxl5SUVE+P0M7\nQ0FFTVxfXNDW5MXGycnDwdLLztDafNXv+XZ04l1zfGdST11GR0xIRUdQTV5sd97c0NDKy8vHysvP\nz9fi+G9bS09QS0tZV0zQ117Fv8fSwr1u59RoSUNPPzw+QkhETVl0cPfU0c/SzMXJy83JzuPO0N7h\n3tTx6vpfZFJTTUtGR0xCRk1NTVj+dOLUy8jJv8HGxcbO5NrkXmNdUUtMT0lLUlpeX97Y2tLNzc3K\nzNbf5GlYVU5LSkxNTVhZWmhmbn7u6e3h6Png39zX2dHU0czMzs/L1+3rclhNUEpCRkhHR09UVGPz\n3+bSys3KycbN0M3X63ptXlhbWVFQT09XWlx+9P/t6+Tk19TRztHP09TV1dbh5HxdUk9JR0hDQ0NK\nSUtWXH72287NyMO/wsK/xMnMzdt1a1lOSUhHQkRHR0ZLUldq5trRzsvKzMnLzM3X3OTwa2BgXFta\nWVhXVllZVldYX27159zS09DMzM3My8/W3etlXFFKSEVGRUZKTFBWY3rv2c/MzMvIyMfGyMvO0+F+\nal5TTk9LSEhISUpSWl5qe/Pu3dTV1M/MzM/Q0tnc4Oj9cG1gWVdXWFZRU1hYWFteZnzj29bPzc3L\nycvO0tx9ZlxTTktMSEdJTE5PX2176NzY1s/Pzs/Pzs7S1Nrf4Ob4bmddWVNPTk5PT1FSV19pe/Xf\n2dfQz8/R0tTZ297uf21nX1tWVVNOUVpaXm378Onf49rW1NHQzs/Q0dLZ4/hlWVFPTUtLS0tOUFZc\nYm547t/c1NPSzs/Qzs7R1tjh8f1zb2BbWVRPTk9PUFZWXGBy6+Ta1M/Nzs/P0Nfg6XZkZGNcWVlV\nVVZYWV1sdfbn4ubi29na2NLQ0tTZ4e98a19XVFNRUE5SVFddZWhq//Ln3uDc3NnV0s/R0tbY3efl\n8W1fWlhTUU9PUVRYWFhfZXXr3dfX1dPSz9DY2dnd4ep3Zl5cXFdYXFxaW1tbX2hv/uje29jT0tLT\n1tri7X1pXlxbW1pYWFVVVVhcYGxy+ebe19PUz87O0dLX4eXm8XBnXldVU1FQUVdaXmBkbf/v5t/f\n3Nra1dPY1tbe6/h+a2FeXFxcXFxcXWJpaGtw++3j3t3X19jU1Nfb3ef6b2pjWlRPTk1OU1dZXWdv\nfung3NjX1tbT09PW2dne5/f+dGdgWVJTVVZVVlVWXGFv9+Te2dbY1dTV1dXX3uTk6ntrZV1aWlpb\nWltdXV9kbP/p49/b2tbW19rb3ejzeGZgX1tYV1ZXWVtaW15lb/Xs6+fh29bR0dLS0tTa3eLvdWdf\nW1lWVFNSVVdaXF1hb/zu4NrV1NLW2drb3+v3+313bWtoX1pWWFpcYG339O/r6eLc19fa3t3e4+r0\nfG5jX15aXF1fXVtaWFpfaHHv5uXg3tvY2drY19bZ3eLu+3lva2RfXFpZWFZWV1xfZGv5593Z19bZ\n2NjY2t7k5+/5d2hkXVpeYV9fXl9hZG52fH757Ofh3dnZ2tba3uTu/m1kYV1ZV1ZXWFtdZWlub33u\n4t3b1tbY2tnb4Obvend8dmtmY11dY2ZjX2RnZGpvcfnt8Ozo493c4OHj5+fk4+32fHFrY2ZgYGJj\nZWRqb3r06+Lj4N7d3uPp7e/3fXVuaWNjXk5izPpTWFh0fW9kafDd195v0MNnUsy4y0tLT8/ISzM5\n5c1QPkVqycn2V+S+yFlV1MHPcmNOZL67alK7ssHY19l3XUItLTo2Kyo4UW3dzb2uqa65trC3zVdK\nVV09LjdSWkJCadjN6Fv30NpOSFVfXEZJ7snN8cK2ubvI09q/zSYgpJ8j5q2ppGq6Lr62FRsiLR4c\nLDqmpLixl5aqtr+4/C4gHjY7JSzOrqmvtqubpUVkxlApICAmMispVq60uq6npK/YTNRhKykvOT0/\nPl6ts9C0TjeVlym1n6avMTkiSCgMGCcnJTZWqZCXsaCWqGIxJCEsHhovy6+yoJ6cmrXru9MkGiAl\nJiYlOba11bioqbPhbMK8SjFM3lJGSXfE2lZXXc7GJh+SjzuxoZ6iSyURKi0NDhw9yK2rno2MpV3F\nzCgYERYqNDxeopKTl6OlrEkvHBogIScsSb66s7S2r7nyYFlRQEZhSnfgX+3g5FZFSEZL3F4iQ4iR\nw5mnmqojEAgcFgoRIbaUk5yUio/WIRsZGxUQHLicmZuWkpaiMB0aIykZIUqupq7O37npLiUzU+vf\nXMCrpbtp19LZPDEyWdYvLsw5I4+JuJiaraM3GgULHQ0VL1mbjI+bmZO9HRYPFB8tLcKXjpGcorlq\nLhcSHcW/w6qpoqVYHx4sLiApSr+kqb+8p6pjNDFDWkFAZ9lb1/UcIYmKwZetuZ9GGAIKJhch2Uyb\njZKezq83Gx8VGj6uoKCcl52qyiUdHBsruKCmp6Kx1jUgHR4qODXsuLWss8K+ucI8N0JN4NS/x0ZB\nOBkeiomzlK5OomwmBQUjHDmiVqmTk5TNLh8RICMlRsKblJeatEHrMSQbFm2emqDIy/pQMRwcLEhr\naO26s7O808O9v0g1P2/Oz7lPKi4tHs6Hk6aPzsd2JSMGCx8Yr5uvn6qclvY4FQ4oNcPDy5qZm5lr\nLi0eKB48nqidosf2Mi8hHys2SMvOYr+/u8LNwsfDVDs9Z8W8yD8sKScjoIqamphewVwrGAkOGiO1\nnainoKKerT8aDxc1uLOrrqqbmq00IBwkP7GlsKitvMs7KhwiLjzmT03kvbC1yMu0sL89Mj9P2s3f\nPDk6LCs2mY+ck6VpcCw4FQ8VDyK+o56op5yYnMAbEhEfTWa1tqmcmZy5LCEpSbW+1ks0aO7SSzA6\nQe1SOTs/7rq3sq+wsN9OSztETn0/MDs7QS82mpSZkafYRTA6GBYRDBgwsKOdl5OSl6ooFRASHC7U\ntKufmpmcq1szMDA7LyguN3zEvL/vZUxIPzxOVs+ysre3vMzkbUdBW09EQTg5QeXExLaurr1ewrfZ\nSCogHylp4b2xrqurq841KCInPc3PxcK6rbG7Wj0/RMjG1t1Z1M/PWzYxMj9cX9PAvLK2xd1PQzpB\nWGHMxMnR3H5MTVlLT9vIvcDKzvDaWjgsJy5D1Luxrq6utM1ANC47X+7qSkvVvsPIzGzq0dVTP0RB\nT1xOS0HYzMK6urXDzFhGRjg3P9zGz7/P08tvSjg9XFXO5ErGusLbVGFVVVM/QPXIwr2/vdtvW0pO\nT05n7MPsRUVNW3HmXNfAycfsaWRoUD9DPV/Pvbi5uMrTaUQ9Nzo7Su/Xy8rs1c/fdkn669LA1NPO\n02A/QD9JVPNu5MDEvLnVX0BLQ0dGSkvpvsLM8uLeTuZZW8rL0F7X4EhMPztBT9LLurS7y8xyTks7\nPkli1/zP0c/QZF1HVvtg/NfN0tTc+0dKSEFU4vDhysS9tsFxVUVKT0pOU1/Jzt1fZF1cTlxrXcPF\nz9z82kxSTjlNX8a/wb3P3NdfT0RGQ0/cz9/c6NvnbmBEbOHPydhtaebfWlZJXFHz8PTd49rN09pk\nXWtfdnfd6Nzha2ZYXm9NSmdw0MLJ2/FeWnleWzxU+/TK1tfezcze+EDwUmrIbPnsWO9c21ZkztzO\n0uhdUVRJRERYc9PGztPW79RoVlZX2HvP5eXMdOhsWlNW92T3Z1d56NJsfF5b1HLPWmDyU+TaXOZ4\n2N7c4dto7+JQ+U5U5z/QQNrSzb7P1e5gVEdHSlfc3cbQ1c5g0kdfSEnp4cbN1+Dc5N1PTEZ8VODa\nWMdR0ORR3ENn+8/e4+tZ73HlWfZl7t/tzW/Z1u9+U2NSVF1H+lzextvAYNbkWtxOV1tV13fPbWxd\n/m9V7FnY1+LKTchaUOZBaHda08zj2OBn2mVd803e2P7NX1h1SuxM+OZjxPzM3mjbSONIbF5az13F\nePnIXdxrRGluZ8pib8xj2c5L6UlOaFZ/3dXOx9Pc4EfwS03uROrS98vW69BgYeJOaeNY6eFq3GlL\n409y3FnY2NvL7OhqZWVVWVd569nZ7u/eaWl8Wnd27s9f5+Zd629WW1Jb4d3czdnJye76UUtWTlRb\nX3Xc29bW4vh4bG3m7/3zdHL0W2JcaHf+3fnf3f7c+XDpXWHjWO5489jn3nbten5nWXR+3dvyfWxp\ncVpaWF1799zl3Nba125sYFvuX/X6Z+5qdnN18fXt3+vV4d5+ZW5aamFfanvs3/3l+G1qX2vycOn5\nfOjh5+54dGhqa3df7ODa2OL1cV949l1uYWr+7vLm7ezwevNtaPPv/u/+auxodGRy6W7Y4efr6PFo\neltPcuJQW+XZ9+Lie9t8YVbn2/Tmfd7W329fWPF+W1n51t/xcOzjfVtacH9kXnzm3exwaed3d2n4\n6PTtbeTs4mhefG9sZ/Xu4uN75+VvX1Vn93n7ZPTf19xu7H1lWldz6Nj64M7m3v1XXu5dUuzq7t/1\n//HrambfZ1V2X2ty42tv6O32XuTPwsZiW1he3/NDSVtP4s1s0M9Q0svqzl5GZFVi3WpjW1/WyfJY\n8O7ez9ntdVZkW1X3aE5sZXvL19/f/e/i1uJZVvB6bupqWPpwW9hwVWv1z9hn+Fzt011OVF3a1Nff\nXWz2d+HbdV9j6uXl3nze1/JeWVJObtbc/2tfZ/Hm4/d6cf3s7d3cf2ZfaW174dvya1tf/uDc8mNd\nXu7n/Hpl8eXj6GhfbXjb3fp3aPzk7u3xbV9faund3eZmUFdn6trsX1163dDW3P9fYV1fYVpj/Obb\n2uf9/Ojf6H9eW2Bs9d7Z2/1hZ2zf3v50Xmz76ez5ZlpeZXLx7+7l8Pt++/bs8uvuc311dHT37v54\naGZpdO/b3t3kdGtqamlcY29xfX7v7Onl+vT88OLr5ejl5vZ6cWFbVllfZnby6d3i6OXud3BwaGZx\neft7fvj68Orp5+zw+Xt1YWlndPx7e3Lu6eDe29ri82NbVlhgZm316/Hu+Pv68OrpfXBwdXZvbmZl\nZGp3fe/s5Nrd2tzc5fppWVdYW2/n2s7Fv7/Dydt5WUtAPDs6Oz5FTlhv4tLLxcXGx8nN2vRnXF1o\nfP7v6+rs5N/r7v5uYFtZU09PUWvcyr+5tLS1ucTYTj40Li0sLS82Pk160ca+urq6ubq8v8bN3P5a\nTU1MT09SWF91/O7s8vhzaV1WVVNXW2J749TMx8bFx8zQ3f1eT0dEQDs9RVDexbewr660vM5bRDYw\nLSwtLjU+VOHKv7u2tLO0trm9xt1hTEE+PT5FT2rf0MzLzdfoYFJLRUJAQERLUF/o1MrEwL6/wcfO\n221RRT89PD5KX9m8saupqq23xVo8LykmJCYpLThG8cm7tbGurq6vs7e/zl9GOzU2Nz1HWt7NxsTG\ny91wUkY/PTw+RExe48zDvbm4uLq9wc57Tj86NTQ1OD5DVc++sayop6utudFNNCwmJCQmKi48TtK+\nta6sq6ytsbnF7Ew8NjMyNz5N68m9ubi6v8rjVkU8NzQ0NjtDUe7KvLezsbO3vcfqTT84NTQ2PENQ\netzTwLezrKqqrLbBUzouJyUjJicrND75wLCqpqSmqbC+cj40LSwuMjxFZ9HAtrCtrK60w2Q7Liop\nKy42QVjdyLy1r62usbvUTjszLzA1PEhc6NPIv7/Ctq2uqq2zwlFHMy8uKSkkJSUqO+SvpZ+fpKy9\n1U1JPzgzLCstN2y6qqWlqK++3FtLPjcuKCYoLTl2vbKurrC1trrAz1o+My8uMDpFWejJvbm0srbJ\nT37Nzra1usZaYT48Pi8sJygrMmHCsq2srrO2vMtXOy4oKjNNxbOur7CvsrS3x1U2LSkqLzQ8Rlvd\nyLi1tbm/xNDWZkc+ODk9TW3r3NjPyL69v8ftTTcuRMLAtbS1sbOru0kzIyEhKC8sM0bCq6Gep7bL\nfkw+OiwoLD3bu66vsqupq7xZNikrNDo9PD5I3bi0u8PU7+vT30k8PD5M8tTY5djX1MnHy950XUhF\nQDsyN7GpraetqK+ztDQnJB8fHiEnLs2po6Gko6qyvUQqJyorLjlJb7eop6eprsJ5RzMqLTM2P1rU\ny723wMrP01xMTUU/RlVZY9DG0t3hdH7d2mBDTWrx2W5XRG+lqbuusqm4fVYnKSghHRwqPXO6q6Sf\nnqKz2FU5KyUnKDBI476xp6anqrLHQj42Ky43SUxg+PHGwchzWm9oXlNZX15mXVd33+1aeNrNx87b\nYezj3/xXXD+8ptrJsa6pX/FNLjEfHiAkOTtHtaWfqaums75bMissLScrPs6+sqyppqixxlQ2OTsu\nLztKTnrb3MS/y3jR8U1PS0xT/VVT3tPkeuHYzcnRYfHQeFRQXFA/u65OtaqtsvW6TjczHyAkKCgu\nZrqtpaampq2/T0QyKiYoLzdhxLerpKOorblcO0UvJyw2ODxs6tW/vczLxu5tbFhHVFlHXuhpU+/U\n18jI19fFxftNVF08O6+7QK6srb/AsDg5LyMlJSgmNtDDsaanqayvxUg/My4sMDY+3cy5qqmrrrLB\n+lo8LjA3MjdGUV1s1c7Gx9LP0vtdbGhdV15VWW7z0s7Mzs/aydFOSU5OOTO2rjmzpa6uyq5MPD8g\nKSkmIi7nccKvqqmoq7nE0EM2MDIzMUdI27e5sLKtttbL6FQ/PTs6QT89R3NaV/7P1NHEzc3N2O3r\n+11LUVtb7fbmZPfYYuHY519pz/JOxrncx7y6wdTLQj1EOjMvOTc+S1hr3MXJysbDwtDPyNvZ/PzY\n6tpm/eJZXVxgdn3w7+XdaWDrbk9RW1lRWfJu5djMyc/K2N/jaVlKSEZKVVdffOzXzszL0tbg6/lv\nV0tSTlVp49fVyMTHysrM1+V4V0xKR0pFR1RWW1psbGN3ZmVs7u187eLX08zIy8nKzNHpeHVhU09W\nUFBbbF9XaWdob2xpXGJy9erg29fP0NPazszX9GdsX1VUWVRea1xfWWxlXnFo39jOy8/R9NnA0+72\nUllLQzo4RkVPTVFn1r+/vbu6ubzG1OB891RHQD9ISU5JUunc3d/qZHRvV0tUa2Vbbd/OxcvIy8XC\n6ut2ZFZLV05MU1tfWF1qat3k98fMycbIws/J3lRVTEg8PUE9Q09OXeHLzNvQ0tHOz+Hh2eb5/9Hz\ne+Rg483Ta37P4mJaS0pOSz0+UmJeXOLTx8nkz8LC2Gh87uxXSVxvXF9ReNJWS7yy3suzscDQxlNL\nPysoLzIqLEP2zru1sauqtb69xU86Pjk2OT1GZcnKzrq2v8nO6E72fj5CWFJDT2Zf59z43MDKbevS\nZE9PQkBHSkpf1M7Lwb+/xMrV6fBSNz619jTBtLTdxLBq0EQzOzgzJjdKPEj3vsa5try0uL7s08tC\nRUVGRURtUnTqdtTMzvq6tubmyM9JRkM7Qz87QtXeVsu8w87GzvThWkRPU0hIVvx72tTMws/Pxsxn\nTc/QSF3d0+Xn0+vP3VVVb1I6PD89Oj9KS2Xh0cK7ub65t8LNzc9eUk9BQ0lESHPd8NvM3vzieFNU\nW1VRXVtp5+Xh2N3Yz8/Q0dbp7epnT1NWS0xXYXD97+HR1N/Z2WNg6mVuVW3LzM7pyb3Mb2HdV0A5\nPUU6OT5TXVrm18nCv76/vL/FyMvV3uJrX1NHR0c8O1dgSUZkz9PvZuDR42rm3ezz3M3Lx87Vy8/s\nX1VOSUhMTlFQVmz88v/t1NTl3NLX1dnQ1drW3Nro7m1cVU9OSUhGSUhLTUxfZv/n2cvLxMTCv8LE\nzNjleVhOU09OT1NOTFldW2h5+X7n5Hzv6vLy5Nnd2dLW19nd83D8Z1dUV1dUVlJVX2xmb+Lf497c\n3d3Y3drS0tTV0tfb2uVhV1ZORkNFREVITVdffvTdz8nIysjHycvO0tbidl9cVU9LTlNVXFheYmRt\nbn1o8t/e2NvW1dXP1NLW2tzr/mJYTkpNS0pNVFhe/fft4d3a1s3Nzs7P1Nvd5fl0aWNeXFROT1JQ\nVltbYGdrZ/rq9+3m3+PZztLT0M3P1Njm83deT09YT0tOVVpfZW5x5t/t4t7h7uPV1tTT2Nnc5nlr\nalhUV1pUT1paW2Vy9ebY2tzT0dje3Od3bW9pYWlsbHV/7+vn6n/7bGBdXF1YVldlffXs49nY2t3a\n1tnf4+jzcV9dW1VSW2NlaW57c2xz7+vu5NbS2d3c2dvl7fv4dWdmYV5WU1dZWV1o/O3q3trY3ufi\n4ux0bnJuaWr57+zt7ebj5fRsZmRkY11eYWBodvv88Onn39va2+Dg3+LycGlgXFdaYmVsbHr2ef3z\n7uvq7vTn5+zp7e317Oz27/prYWdua2hfTXjI4F5PbNjoXk9o5+Nia9nPzeTczcrTdlxq7/pVTVNX\nV09PX3pcV9vM1Glc383Tblp13eNvavPc3/J68exyXl9u/XtmZWlp9uzs7vvy5dne9/7o42ZdW2n3\nenz+7fn7bl7dzu3j0szO29X4fvVORUZMRkJJSk9bbP3hz8vIyMfGycnR3d9wZFhYWE9VT1NbaG9j\ndPX28XdoXuvkamzk1tvb/OvP1npcfP9+fVVXaXhiaej5ysLfyL+/xdfLX1JPOTY2NzY0PUBK+dbI\nv7e2uLO4vsbQ1npcT0xNSk1MVl5fal9qWlVXTU9OT1JYfO3ez83Ewb/Bys3d6/JuUkdKTEdIPjHG\np9zMrqynuLTvOdkuICAiKCUqOkq4q6+opJ+lsLbeSkIxJykvMjVGyresqaqpqrLJSDUsJiUiJi07\nWM23raimqrC3wOFFNC4tMDc6OUHWv7lUW5WayaOyqKlVWRkiLBUYFxw0R8GuoZWZnJ6wrd0tJBsd\nHykxOruln52cnaKqxTcmIh4bHB4pPN27rqaioqqxucNPOTMvLzE6Nz3dvsLIuLm/W8uWom+ozbG5\nNDQUHSYWHBwswLCfnJ2XnKq8NjYjHCAbITrgqqGcmZyboL5IKCAdGx4fKj9utrCppqusus9XPEE6\nNTo+ZuLt211txrvETU3bzFa3lqW5pcW6PywiDxkdGiUvwaeclJadn7Q9Kx0cFxssL86mnZiWlJ+8\nzz0kHBkZHi/s0r6qq6iuvvA8SzwvNTp5zb+4wri7zlc3PT1GYD0/5r7Lno+pq65azyAnFgwhHytM\nvaCdlZWftN0qHRsaHh4/squbmZmdo6lJJR8cHyowP+ato6q12j8+OTIuK0Hqzbi3rq+xtt1SPTQv\nKy8/zL3jyLW7sZKWvrM/OC0hKA4UKCzTvKupnpebrUkuHh8hJSsvs6efmp6mucNJKikqIy3bvbWy\nrrzibjEoKS45R9i9uLGurrO90E08MS8yLTBH2ba3squ5scM+oZ3Jyi4tOjDvHhkmKN+6s7S4qJ+l\nvDsgISg4TTdnvaudn6m9dF46OTspJzjOr7K10UTeYj0xLjhGwbvKz8a7tbjLRjY8Ojo7PVnVt660\nsre+zDwlIbOmx6vWyLisqCEaGhkoSclexKSanJ/BJiEjLy0tQ0yvnJierL47Ky8uIx8oPrSfnq3C\nzHdNNiwiJ0bfvbq2rrGttlc9MC80OU1KW724sa/C9lE9MiQlsKClmqaussDQHBYUEh89tK6kn5yb\noLgiGhgcKzy/uaiamZylxysfHycqLDtesaKfprx2PC4xKygsPMi3rKuvt8bKXEA1LTI7R/PLv7mz\nsL9TNjA2NzosV5mYmJiz2S8sKBIUFBg4rZmZnJ2hq74rFxIUI0Oxnp+cmp2kwjAcFRklPMizr6ed\nm6PFNB8dIio1PVjKr6Sjqb5JOTQ2MC8yNVK7rqyxvNpS91U/NzE6OeqcmZ6bsU8uJiwYGRwaNLSd\nm52hssnXOiAbGiE/rJyeoaeutsw9HxodJliro6isrKqtukUiHB8nOdm9vLWsqa+4dy8oKC82Stbb\nwbKrq6+/PzU1Mjo9REhRfKuVmJmhPSocHx4WHRsnup6UlZqobzorHhwaHS/LnpmZmqe7RjAoICIl\nLfusoJyhsls4PjEuKyYqPb6sp67JT1jiX1Q+Mzddxr+6w2lT8dXc5eJRREZVbWnLy1ncop+lpE0r\nIiU3JzEtJkG6pKCisFw2Ly0pMC89zq6goaGr4EMzLzEzPj9MxLauqbXxMig1P3DaPkJF2rWyr85Q\nVD5V9V1BNlXjvq2zx0ZGPz5dSTUuO9m5rKy94q2iq6rDLSUjLy0zSSwwWr+up6jASjwyLjlCPl3H\nr66qqcHcSzw3M0hJW7+7urq9xlA4LCgzRsy3ubnFzdnn1lpAPUBQzL/M3GJMQ0VTSVr1dM/Cu8Zd\nWExNanFhYOmuoqWhsUc1JSYkJCspPMa1qKWque8/LSgvMz/Mu6+rqq6/zWU+Pzs5P1DVycPKY01K\nVFRLQU7dv7C0uuo5NTRQ2sW94e5u+t1cTTczNz7evLGwt77+SD04QFRe4dXS2beip6esQjQoJiwp\nOy4vVE+9ramrsL5ELiwtL2TDu6+urLGxuN5JLyglKzlSxr3DysC9wcDPPTAwNVK+rK2wuM5iWFtI\nRD40MjM9VNi8u7y9ycXdb1g7NS85S2u9tK+vs8RXxrzCs75YPC0uKjFCMDxCO3DEsqyrqbprSjAx\nP0vS0cbJ4L7Avr9ePy8tMTlc2Ma4urm71WpTR0dCSFjMsayqrsNKLykoLDZBT1pe1cG2rrK/cj02\nNkNg88/Pz8G/ubrGz0xAOjRE4sOwrbW8Yz4vKi0qMz5PybmsqaapuG81KiYrLz7hxrm5trW5ucl8\nRjUuLjNB3Lyvrq+6+lJFRWb0f1dMT1TXxszZVD47Pkxg3czKysjU4eHl19Z4STw3OEXmxr24u77G\n03ZEPUNL+rm2tLbSYjs1Lys1OkvPvbizr7S5x2Y3LiwpNEbWurGut7rB2m1KOzU0OEL7vbSvr73Z\nUj9DTVZob2JQTVtzzcHAyvNOP0FIUvHq4/ZlZvrQy8zVVUFAQU/cwr2/v8zj+2NVVFpPWm3axrq0\nu8VeOS8sLjM+Zci4tbW4v87kUTw1MDE6TNC8sa2vtcDkSz48OjxCSU9v3c/Dv726vcXeTD87Pklk\n1c/Q0eRvaF9PSkZBQk9w2cO/wsfZ+VVRUk5o69rN0NfqdPLizMvd5mBYcG3a1t7eVE1EPkdKX+Hd\n3uHx7uXh0uHqaEpLRkxg5MfFwr7Exs3nXEQ9OjpBTPvNw7u7vL/I2WRRSEBBSE9v2M7R2+ddVE9J\nS0tRZ+3R0M7P3OJuXV1WYW723tfJxcXI135bUE5SXmVQTnHsyr2+vcjtSjw4NzpIXe3My8zN2N/l\nfGRQTk9S8tXMxMjN2mdSSEdPXNvMyMTO2uLq5un0Z1RPTktSWltt+Ojt9u1pafPm3+12amNmfe3f\n08zKzdX7U0xMTVdj9d/Y0+BpV09QWP3WysDCwsbO315KPjo7PkVSedXHwL7Bzv5PRUNIUmL239zT\nzs7N0tz+XFVOTlr40sjEydbvW09PT09SUFJf8c/IyMvb9l9PTEtNWHjf1M3Iy9LfaFNKRkdLVWne\nz8vMztLc7WFRUFdm+d3PycfK0eZnVk5KSk5VXW3s4t7d5nliXlhaZ2plZXL24NLO0Nbd8XRpaV9p\ne3d+efjr6d7e4+l8b2ZeZGBo+fDj5eLpb2RbWV1q8uHb3d3k/GRdXl9ibPbl4eHi5Obr8HFmXllX\nXW/j19PQ0Nfpa1xWVllicvXn5N3c4fFyZ1lZY2Bm+/p1bnT17eDe5uPu/3dtdWz86u/n5e53X19g\nX2lsd+7i2dfc7GxiX2x+evl+e/L67OTn5vRvYVtdXV9t79vV1trudGVcX2Zsamv/8Ovf4Ov4bmNe\nZXPv5ujo5enn4uXua2RfX2xwevzq5Ov2dWtv/vP3+Pd+fHz48/52bWRsdvj0+fX26+bn72tfWlxl\nZ2x6//Pt7eLe3t7n5OPl5O9vZmNscnX7/Pnu8HBkX11fbHzx5ur2eW9ybW/77+ne4Ojs+PV5bGxu\ncG5t+/Lq4fD6+X56cHZtYGZr9+Lf3+XvfXJvbG50dnZ1eXz76+Pi5v1vaWRoaG9+9/Hz8Ozr5ePi\n5/5tYV9fWl9o/+ri3dzl83hoZmNpe+7g29rf7f91dmthX2doYWJw+u/n63xvamdt/Ojh3d3m6/V1\ndGtoa216/fPq5ebu+v39c3BtbGxudHhxeHr47vX0/Xr98+ns9vfy/G9rbnh5fPny9P/5fnh1/O3u\n7Ovo5vJ2bWNhaH19f/59eHT9+PD1eX77fXl6fnp8+/Lz8+3s6+73/Xl+e3z3+/j4+vl7bWRjZGps\naWd07uPl5urt9Hx8dXz09O3u7vD5dHd8cWxqbHVtbHj88Ozl4+v2dGxsdP3u6+3o6e/0fXRta2tv\ncHr39fR4bG5/9vL1/HtvdPnv7ers8O3u8X5vbWtkY2hw/PLy8evr6/Z9eXV9/vfx+3j97evq7vl+\naWdoamxteW578/Tr7fHy83Vwenr8/3v9cXF8eH368Ozu7/J4eHtzdnz58Ovs9Pj9dm1qcP3w6+96\ndnByb250d/79/Pju5eXp7/1vbG9wdHdzeXr48+vm5+r5/nhsbnN8+/fw+3d2fPjw7/51+vb4eG1p\naGtx8evp7/v+dGxs+/D08v58fHb48O/0e3Rwbn7w6efn7PZzaWtsd/307/r28/h8/3twbWpoa3L5\n7ezv9/f16+94e3l6/vv8+Pb19Pr8+3NvcW92cn707eno7fh8d3NxbnL69n5ydvz/eXV87u33+vj4\n8/H7eW5vdHJ1/PH9/PHw6e3t7PL5fnFsa2tqbXJ0d/ft8/Du+Xl0d33y6vP8/v7+/PX59/t6b294\n+/X+e3t0cH1vY2ptevfw7u709+3s7n11eXz07vH1+vv29O/3eHl+9u7w/Xt7c3VzbG16d3Vwam98\n8+/r6fT1fXR5cHFzfPPv8vjv6eTk7fl3cmtoamxsdHV/9fn3fHl69e3r6fT2/X77/Pt7eHJyefv2\n8/X+/vTz9nttaWZpamx3f/Hz8+7w7evp6e3t8X9wamdtcnr9e3Rvb/z29/R4c3J3+PDy+Pz+/e/q\n6e/v6/h6fn58enhwb3FudP3t6+/u8n5zbGxrbvnz/f/7/fzz+Ph9f/77+nx/f/ju6ujt9Pp+//t9\n/ndub29vbnh6dnRwe3t++/3v7enn7/x0d/vy6uvs8/T8cWxtbG5ub290ffr4fv73+35wcG94+375\n8vLt8fbv6OTk6fdya2dobHV7cm5v++7u8fj4/H9++vd++fp8e3l8dW9vcn1+8+/z7fLx6+nv/m1q\neO/6/PP9dG13dG5z+/l6dn16b3/07uzp6ujq7/p6931ybG95dHp0cW9obHd7dnp8ev379ezr6Ov7\nf3n+/f75d3z48e/t7u7s7enqfW9qZmlnbXlycm5yd3v5fnV0+e/0+vjz8/13ePTt6O718/77+Xx1\nbW579vHz8vf7+375+nn//fx9d21rfff07vH3+nxzbGxteP369Pj47enp7O33b3N4d3Ryb2xsbnR6\n9vP4/P78/Xz7/P74/e/r6ebu7erwe3R5/3lrbnNrZ2dvef7u7e72fXxwb21sbnd2evXq6OHi6+34\n+Pv5fHZ0bHNvdvHr7/ry8Pf8/vp2bGpka295e3N6/PDq6Onj4en2dG1sZ211cXZ79/b6/Hz79PTv\n7ujo7fl1c29xbmhrZ2htfPbu6ezv+vzv7O/2/n36+fv39/z38/1xcXZtbnVyeXd3d2xvbmxuevb1\n7+/q6+zu9O7q8fx1+PL49P17cXJ4eHj68e70d2xsbHH89+75fvz9+3h7fv77e3BrcP99//v27ezv\n7ezt7vf+/Xt2+/j/e/9waWZpb3f+9vn07ers9Ovu9P1vc3d6dnFyc3x6/vb8/Pr5+v329Pn9/Pz9\nff78e3Z7+ff4f3t5cW5qZ2t+/X/38+3p5ePm5ufve3n9e3ZzbWp1/29qbGtqb/3v8fHx/XZ3fXN0\nb3P97ubk4N/m7vT5d3B6f3Zsb3t6fHn+9PDz/P9/eG9ub25tb3J4/ff48ezr6ert6/L8cWxxb3Fu\nbm9xeX5/9e/q6urp7/h5b2tt/315dHF7/fX3/v/7+f52dnf+8/n7+/58/PTu6+np7v17fHdyfHhw\nd3Vxbm50d3NwbW10fPTr7Onp8+7r7Ozp7vb0+3hweHdvdntta2tpam15e312e/Xu6ujj5u3t6+bm\n6/h/cGpqZWJiaX74+/j+8e748vz7/H3+ffj4fHhxc3p9fvXx7fH9e3F0/353b3R9e37++PLy7/Hx\n8fb59/r9enRvbG9+fn12eHxvcHz9+vf15+Xu8Ozo6unu9P56dHJ1cG1tamlmZWVmaGt48/Du6urt\n8ezq6ufu8Orn6vP1+29wenZ0bmxtb255/X16c3F4en/6fvj09ff48+7u+Ht99fh+eG92eHr7/vz+\ne313b21uf/j59fTv7+vq7O98e3/+eXx8bW1ubGxtb2929evm5OPq6+nu+f54bmlnaGpvdXz78err\n7+7y+3hwbmltdnn67Ors9fX38+7v6+ru+fr9/XZzamFka21wc3T78O/t7vn8+v59eHj7/np99e7t\n7+/y/n14cndzbnR5fX19ef76+Pr9+3718evr8vl+eXR0c3NxdvPy/nh5/vv6+PX7dnl+/f58+X7+\n/f7x9/38/Xp1cHZ2eH7//f778+7v8fP08e7x9O/vfXd2cXd1bnF7en17dXZwcHd6//728/j3+Pv3\n8/f3/vv++O7s6Ovu+nJxbml4+3t+/fr1+Xx0dXd4dnz87+vz7vP2+HtxbWxoZ2pubXV1e/bx7vDz\n8u/u6/L27enl6/J+eHNudHd2/Pf47u76c2pnaW5ramlyf3328O3z8+7x8Pf5+fbz+fnw7vfy8/n3\n/nFramprbGxsa3nt6uz0+/Xx7uzq7ezu7+72d2xtbnR3cm9sbnB2e3348/L0fHp8+/Xt7ffy9Pt7\neHVrbnR9/nr8+vnv9v9+enV8fn11e/r39PX17+zv+P58cHN9fnl2e/zw7vL0f3d9fnl8fHZ7c21v\ncHf47erp6evt+XZpaXB29/H2+vr68vX48Px9fnd4e/j7f/5tbXZ49u7s9nr99/T8eW5oa2798+/x\n8/H1+PTy9/93b25xeXx99u7q7OvufHt3cnVxcXJven11eXN4fH718+/z9u7u7Or2dnj9+316c29s\naW1zefPo5ens7u79cX74fnl4/vr8eG92cWxtb3Z3/PTx8/ft7fL5d21vbW9++f718e7n7/Hx+Ht1\ne3n/fnr9eX39/fd9+vzx7fPv8/p2bm92fP/47+/7fXFqZmlnanB4+O7v8fDy8vb07/b++3t2/fXy\n8+70+/t2bW9pZWhue/j7+ero6urv/v76/PT2/nl0cnN6+/n++vjy+3j9/nxzbGlubnF3fvjo5Ojo\n7vPu7fDt9m9qbWtra2n+7ejp7Ovp7Xx3bmZpb29ye3t2/vh6cm9scHn47vL08e7v6evq6er1/31x\ndn/49vZ/+v52b3h4aGZqcHt6b3v38+3q7fJ/dHx5b3n+c2/+/H/39Ork6vT6ff357Ppva2xxdnd5\n+vX18Pl8fft+f3lvbnPv6u71+fT7/vj9+uzr6e57b29wbGppZ2lteP73/Pzw835/+u79c/nn7Xd+\n6uX2e/Xq7f189vN0cnxuamdve2//9X1+cnBzbm529vZ7efjr5uXp7Oz09/nx9vZ8cXZ3e3Z9dG9s\na3Nyc3r5enJ9+/bt7evt8ffz9XtzdH3//Pz19/j5+PP5/H5ze3Z5eWxua3f+8PL47vvx8/Tz739y\nef98ent89e3v+XN2dnh8fX9zevTu8vT9/fv6e3Bx/f/9/nxzeHdqamxvd//r5ebg4eXr9vx9a3Bz\nbGxxbGtqa37z6+3z9/b6fG9xd3Z2/vj68u/r6Ors+XBxevjz9ezyeXdub2xsaWl0+/Xq7/nrXU1j\natXJ9/je1MzVbFpYXmtZVlhWZevo1dl27u3p7WptZnjscmz17d/f/e/n8PdjW2xtbm9r5nZIfPBt\n2mvb2Ong189q6eh26lhucmVhWet9aFzzfmvgZfHuX2L81nru7fLma+/p2OJnZOXec2pp63xvWW3i\nb19c6uFkcdze3+D35+5vcvx6W2lkXHh78/Bz5dbvWGXg5Ftt1939X330bXBz5uNweuzq3v5eYfJy\nXG1sYWzf4ODb7Onkb27+8GFVf/psbOrc3N1bcdnuWlZ792dncnpqbmfk22/s7O595Nxw/mb5cXf9\nZt/1399geulzZvRtd2bv7mJvZe7q/Xjf62977uhvb3Hu835l+25g+WrkfXze8fx+eXbx/mPo8nLd\nbOPacWzt615lZulwV/zv52lu7Pvh/vjjbfZ0a3x++W7/5+H5cOT5emJm3WpnfGzl5fdq+PNfWWTz\nduv28N3nfvrf7vtzYXtscG7053Hr6npxfG/z9Wrs+X3q5+7k/Hvj7vdeWWFlXl/+e/B1Y+rg+vvn\n+NvjeeLk3uft3/NdamdfeVhd+mlseO/t8ezx9+Z7ZG936PFf7+Rr7vTi3fX+/efseW10f3RcYm1r\nb3p85e/85nvudGV5+XPwemf39H155/D57fDq7fR16un7bHp9bG5aeOJ1d+3f6nJ07vJsbmtiX2Tx\n7e927+bi7OzxeOZvdvdt+3p16npydf72ZV786V/36/7g/nnh531u+vd4YGXw7Ojv8d/saW/ta3Zz\nYt/8X337fGxsdvTi533i33Rscu7z+GtiYWdrafzh5t7qc3p06F9dd1/+/e/13tTe337seGRUVnZt\n7XN76Pbj5vf77PFyc/l5bnNu4eJvanLtcm5kaul/9Pfm+27s9uVndftw+Fr13uXyePJ//HR8Z+js\nc+5w7/pv4998b3V36Gxs+WRjbV51/XP6cP7x2/Nz6+7fc+3l9m546fZqXXD96/hhbe7kcnF97n/0\n+W72bvPo8G1efejreWv/7H17/Xhv8tx9Z3Xw//nx6er8eHzh6nZjavz/b1df4/llZX7e6Hx/7OPs\nZfrebP7u53pr+PbycXH95e1n7P1td/trYV1m4vXycu3daXz48WpvcG3fdn7v693+dfPs72RveGxt\n++ttdvHp4vxtePHo7Ht4YWzubPZwbG325V5t5PN2ffHtfnt1aOflc+rp3/ls/X7p+m5vZF5lfv9k\n7up36Ox8cfhs5Odo7G7we3rp79/n3+zw+G9+ZPtlanljdVty7Hd1eGtu8/HebX3v7N9u+d7e6vdz\nbv1vZWXs7mZtdd92avH18/5kbeF76ev55WpeZPptam3n3GxlaO/Y72Vv3uNx+PR29W7z5lx7flpx\ndezm6nns3fX8eeH6XmFoeGdpce3eb+nafvt+aftzZXJ1ffpr/OTo3+fz4N12bGldbWb3c1/re/D4\nZXdo+ubw9Ofm8+j+7Obw/V9t43xmeXDv5nRlX3D58W1t8Gx+bHPkfHju3uP9dGl26HZr6+t4bmhw\n8Hf6/nHt/nrr6ujncfPje3hxe/5gYGpub2zt4+ff8ez0+e9vd3Vqe2Vx6n357vXu6mZt/vnwZ25z\n/upvaHvvbPbd/eZ9c+t+62lw93d99O1q8OTmenzuffZscfHpe2F47Xtoaf3qc/lmYO19eOP7dfh+\n7f5uaXng9/Tk9Hj3ffZ3euNob29q5m5jdubl8XNo93r3devxam5i7PP74njg52p4fXhz7nztaF3k\n+fx09OfvfG9zYO59a9rub2144eR7XP3t+2tr3/Xt72x4+HNicvHr73/+6e97bO3leXh97n7/fW7p\namBsZm1jaOns5eD66O9qZfjqcP7++fppeffc4HDu3PFfdPp9e2xhX3dndP9v5+Dwb3Dp2vH97m7m\nel73+m5qb/HjdmRufOvva/r4ce3++vD55+j9bvt34un+4mRcXnvmbmRgePNv/Xl66uHh8fd+b3nq\n4XL97+juZffwfXFo+eT6aXBnc25t6m9pdnzt4/x1f/fd/O/t9n977HV1Xl988H9md3t29/v6dOXt\nY/Pu5+Zu7d/0/X5ken9peWxveffxd/7x9G175un4+93kdWVk93lsc3bv7Wpm4e1oZGzr7vX08OXy\nfPH49/D1cmZma256dPHq6/Z86fd8+Xf99XFqb2l99G147+bpePjj5ebr+nJ3cWhtc21tb3fpfmd9\n8+36a2X3/3H1eezt+eLk7Pd99O9s/fhl/+z5aWd0+/b7/vxzbmhxdHdzbfr96O3p29/o9vr7dWNl\nffz8cu/menJ5e+/5amt9cHz59P7572pv7n/z7Ofq7vd9amh0bnVtaXvv/3V49ejq9+zx8/R69+/x\n9e/28Ovy9P5ubGpmXWVtdnhx//n4f+/q9fb69XdtevRyfex3/f19fnn/evrr3311c37p9Xdr+ff2\na2fp6e99f+7u/3B4/u7r8vV2bG1uenNwbmhye/Z6f+/p6/P4d/Xy+e757+7+d29saXlxa/7o63vz\n7ebj83hpbW5qam7u6/Ty6eL7bnX5/3lxbe97aGFqdG366u7r6fr67PLr7O/2+XZufu/7am5vdXJs\na2/9enb57Ob3b3J19ex3d+vtenn9/fT1e3z67vh/7vl+/33s6Plvam1udHv57/Ht/HV7f3lw//Tu\n+nl9/vdyb25tbXF8fPXu8/zv7u/2d/v48fLs5+3v+Ht5cmVianN0dfb5+vPt7vp8dXR49flvbnRy\n/fn67ufp6+vq8nl4cX5xaG1rbHNvbHf8+fh4b2lx9/h9+unl6ejk3uDq+/zx9/x9fv51a2VpZmZs\nb3Z5+vH39Pb4+3l3dHl1+uz2+/nv8/D19vtxdHl7e/n09/j9fX38fX58f/x2ev7z9fv9ffp9eHf7\n7O/zfHn29/Tt7/D2c3R1cG1sb2lpcHbs6uzr7+/1e2tocX58fv3583t3fPX0/vt+d37/9fL2+/71\n+f38+vf+eXp/+O71eP/7/nN1d336d3V3ffv18fDt+3VybnN1cm1vd/nt6eXj4ub9eG9scnx+ff/9\n8u7t6/x3d2xqcHNvc/34/ft8fX5zc3717/x9/H379Pj08fZ/cW5wevv9+e7t7PL1fnh+eXJ0fHx/\neXb+9vn7/nz57u31+/f6f3hxdXBubnB5dv319Pbs6Orr6+z0eHNqZ2dmbHJ3e/7t6O5+f/L4+O/2\n+fx/f/n58vHy8/58b21wbm9vdf/1/Pby+vz8+316/fLs6+/w9/rx7vb7/3r9dmxra2xqam1vdvbw\n7/p9/395c/fr6Ofw+XRwe3d2dnh9+O/u7e738O35eHp/enFrZ2pvdP308/Pz+HF2eXn3/Pv38/Hv\n8ff3fHl3/PHx8/T7/vX79fL0+2xlZ2hqbW169vb67+vu7/H2/H769fv88e7v8fB/fvxsaW14e/jz\neHdzb25ydnt/ff92d/307uvo7+/u9H9zcHF19u7t7/bz8Xtxc2hnam1+8u/09/j1/XNva29udPv4\n7Ozy7evz+PHv7u/z+v5+dnh1bnRvbm9vb292dv738e3v7ezv8PT29fTv7PR9cGpubWpvd3Ftdfv5\n++/w/v317vT59fr6/3h7c3d8e3v++/T5+O/s7vf6d21ub25xdHr88/Lr7vH4efHv+/58cW5sbXNu\ncG1qcXp69vXx5eru7PD7fHhvbW91e3757+7u9Pr27ujr9fX7fXZxdnl4b29z/O7v8vlub29scHd8\neHJ0fXv9+/7v6uro5OXu8X14dGtqbG94e3h4/n99e3v+9PZ3cXr68+rm5Ofu7+/+c3V6/v7+d3Nt\nZWJhZmtsefPy7ujn6313ffvv7/r+/vn9fnx4dHv8+fX49/T29fp9cnR0dP19fPfv7vH49/j5+ndw\nbG12eHz7+/fy9nz6+np8dnV0efvz9Pfu8/r7+f19dHj57/X8fXplVdLPV9lfWOFQ8PBl82nl4/vi\n3+nb6np5ZWZkbv10fmtq7G5vfm/se/X39+Jse3166/3p83N1fm9o7Wn0+Hvo//56b2/s93be5/Nx\nd29p8GdmfnB29+7v8nJvf/ZrduJvfe3yaN3yZd5n4+du1GPm61zfX2h183Zw+2XtaHJyfHNd4n96\n+Gju6W/XbnXPVuzdXNRfcdRa2O1T1XVc3F1l1Uvn9E3LTezfS9lc8ehr2mjj9mrZbezsZPn47/31\n/erl6mns5154a+9tXWn/Xm/kVd9xa9V86P3vVc/+Wc5f5e1mylxuzkfT8UzPWF3idlzw/njhY/fp\naPlh9N9S9Pfd8FnT42fc01rw0knaeVrQScxbScFJ7/Tyc07DVVnOXXHYXV/LXk7Lfl7baef0121I\nx+E/yudEx15R3d1nTcl6Sc3wW9zORfLAPdzeaF5kxj7DzjvI1mNLxmBLv1Bf39ZPT7xKWs9YY+p8\nVdv1b/Vg3tz9V+DOTNzwXc9a7Gvg7U/eV9ztXdh933TraGTOSn7mXe9d0Wlo1VjnYeBsXdZk7ufj\nYGnUXFfa2FP4zlHs4Gxj7+Vd9fRl4/Vn5uZeathfWelqXujaWtnZWez572Xm917RaFvi72hd5Fxn\n81l039hf2NJ432V0auptXdhxX+r1cXJwV/bc7mfq2ffr6Wvq3V5affBvX+x2/l96zVxY39dXWc5p\nUN3YWWXLclXXc2H+eHfy5F955P5h+vdh/1tQ49tuX97a4H9z2NzWeHrQ+exubV1AQE7mysbMt6+1\nvM7hTDouKi4vLzVO3Mu8u7u4u8nh3mBIR0JJVGZ61cS9vs7Y2ltFSycel5cgoJerlXAoTSklDg4r\nHCmvLaSLmqWqqawrIxYVOSEiyayamJuenp/dJCUmHB0fKmu9vrinqLi/eExmOy8/12FN1Ma6z+87\nH+KPnDehnZ+cKxwbGx4ODh43oaLCl4+arCsjKSgiFSS3qpqbn5qdsT8qKSckKCxPtLO1usHLVDos\nLTY2PEbPs6urtba+/U8uHxcRooSmuJeXi6kYDgscFwgVPp6KlJ2Yn6AfCQ0XNzw7n5OLjKS3zjEg\nEg8dYLKsq6Can7MzKSknJBwgMWTXYryimqHQWszaLyUoJBkPmICQnpygikIKCAEOIh/m6ZaAj2k+\nJjgOCRgbq5CTlKKZlzgaFx4yKjyqoJ6dq9NC2sslGx8rMis3S8GoqK+7vLrlLy05RsfdMRwZjoCO\nbTFDmy8OCgQWoJutRaWKnDgfEhkbLU85oo+OmN83MSIhJi85vZ+eqcfkReLA9kIrMS4zLilmwsG7\nv9TJzMbBPjg8VrPFPSIbmoGPziIqplclFAcVtpybvcSbquAvFhcVL6Grnp6enMBAJx0mPbazwq+u\nsMlSRjZAdLx6Li4wPkfz2zhNurzEQVy8/d9QeLfQUiu5jZKpPyAzMls0DxAmq5qiqcpOvbg/GRQe\nVKGcoq2yrbFkLSYrNlC5r7K1v8/My1A+PU5cOzQuOk1jy1Xfv7+/TvbWRVblrqrHMSK8lpmqOyks\nPLs+GBMaTaSYmbNAP8i6Nx0YHtWemp+4zsfLzT8uJB84sZ2brsJkSFs6LCUmPNm6ssZMO1G7wGQ+\nNE7LxM3HtbS61C8hQqemoqy+WihBMCIgHjNcppuhsmf9OjQ1KikqR7aonp+sv0Y1LCUqLVGtpp6e\nqNgqIiIoLjp6wrGzx8fMSy4qOdy+usPPu66uy0YzJiRGraKanqxNJywlJywwPDh6s6moq7pSODAv\nKiwzWberp620v+Hfek05LjRgtayzzEU8P17B0WJIPkM8NDQ4Tr+xrLC6u8voRTI1SFxaaVZQaNLG\nx7murLO5xU81MjEpKy80OUe6rKuwvdo/Pk5gW/jK5WPm6NTKyNHq1OdVTfe+yOdsVk02LC03fLu4\nsrO8weZQOzVJ6tXJ3VlcSENERVrmxLGurrG8wvxDPDk9Pkzf70c6OTtDTnpuXHrXw7u0sLPC6ks5\nOkFGWcq6vc3Ixsx3Ozc6R19d6PPu0GFFRUNc1c6+w8nRS0NJWODq7crDzNHRycK/u8PmUEZLQz5A\nODY4Ok5o8dLOyb+7vs3W197V205CRF/M3fDc2cbJ33RXZuZdUU1PWD87Pkfs3t/NycTK23Rr2M3i\n+uXpXV/Furm5u73PeFQ+NS8uLi84R/vn79rQx763tL7ZdVpWWlVMTH3Lv7u9wtL6YFBDPTs0Ok73\n0eheT1rOydHZ39TL1u1cVlxT0bWuq6yxvtnsWj0sIx8gJjFF/c65raemrsROOTpLWUxAR9u7sLC7\nyuZ+5/T0Wz41Mzc+TFJLTu/CubnD2nnlyc55WFb55WZaybKzsbS/ycnNRS4pKCkqKSksOuq4q6qr\nrK2ttspONjQ6Q0xNYdC/usPefWdeTkpDRVJZU1R449jP19jU3ODRxsnJw8xxVVZUUlNTUmfvXe/Q\n6mdWVE9a5m5YT1RUXltNXe/WzMrhcN/g3szIzNLz/nr8cVFOTWXb0NDd2ONqa3Dh4mdZTE5UT05Q\nXnjTx8vZ8efPzM/eYVtfbmlWWWxvaVdMTFRxX1debtrPzc/b69vT1NPpfe7Xz9na9nTs9VdQTEdQ\nYWheZP518Obe5vBfV1BRXvz7f97MycvW9/Tc0dn0em/s4e1WRkZKUU9KS01a682/vL2/xsvhZVxR\nTVBYVV7l0tr9dmRWVFtdYH7f5PXp635sbH74eHt6bWxo9uv36OzdztLg92Jt6ex6X1xYV2BZWV96\n2dzp7uzs+efj5t3Y09Xkd2FeXFxaVlleaGtnbWtp/PLj3eTl7Ozm5+3+7uXd2tfa7WFPTVBfbHnm\n3Nrc8Hn26utlVFNSW2x8am3n1dHhfWv039rb7Hfs293qbV5YWGJlb3dwfX3x7G9jXVdpfuHW29jY\n3HhZXWp47vT49/zk5XJkWl5keO58f/r39O7re2RdXuzW3P/23tvfeWlfbHNs/+Xc2tjm9t9uWE9P\nUEtLUujY5+bUzNre5ebe6edsbvxsWFx+fdfZ/ujZ4FxgWFtgT1744G992tnmY11k3+d1YuDacvDy\n6Fxf/drTZO/V12Fs5HVaT1JTX2Jd79HY5Nzec/N5V2B1fXHc62He1m9u2e/75/lpfOxZV+JoXep+\ncPLo+NnrXl9w8WXV/lJ27Pvu1lze0mR+19xZ+u1fbG5cXftNYtd++tlp6NVcX3lwcNN0bdff5ujQ\nWPbZWVrs/FFmXlp98llv4F3v2d/80dJwb+9m7Np+fu1iW+vmam33YHN8VV/o72Nm1+tpempkfnhm\n39nh1tTObe74ZFNV51RdX+3dXV/33Gttc9rdYvvh3Gtc39d0ZOj57+1hbuVeVt/XZP72XHLb93PZ\n4mLh01xQ8ftPW/lbznFH+NTwWtLd99ffXezmTHHT4Ft02XF3bmxy22hd29xeVN3lcXVdZ/rjZm3c\n83ru7Pfr6W3t2d15+P5u7213X19sWV5vb15fWFf39W9p63t/8/3/4NDb2uHv219V7u14e+jScU7Z\ny9vPyr2+v7/c8+pNOzU2NjIxMDhSWVjgw7eyt7SysrbG1OR+SDk3PUA+PkNe5ddyas/KznlZW/Zq\nXV5yZFNf5bu8vLGspqmywtTVVDAmICAlJCMmL1XPvrWuqKWorbK4xN9YPzo/REBBRVzbycjRztXm\nX0k+PT89PUVPWuPMwLu5vcvBsq6ytb+/trjOQzYvLCwnIiQoLTlY1Me3r62qq6+6wM5wW1BGREVL\naMzHycnJxtdlSkM/Njg9Pj9IWn3Rvrq8wMfN60pJ0ba2tbC0t7a22zwuJyMjJSQnLTzTtKyop6qs\nrrXKVjctKy04QlHtvrGrp6uzv99MPjYuLC0vOEv7z8LBv726u8RsRzw2MTzVvLaqqqymprG86C4l\nIRwdICYsQNO3qqOjqKu0z1U8LCorKjVT37mppqSjqrC9eT80LSknKSwxQ3LXwLy/urm8wddLPDYy\nMD/Nv6+jpaCeqq64RzMoHRsaHCApRti9rayrpaqwuN5BNzIxN0p307avrairsrfWSD0wLCwqKy45\nSWbNv768wMfFzM/hT0M+NTZ3vq+hn6KfqbS3YTcpHRkWGR0lQ827q6urpaessMNPOTIuLjxgzbmy\nr6uprLG9cz4wKigqLC82QFbYxb29wMbP4+LiXEs8NS87zbamnJycnqu0wT0tIhkUExcdLOi2q6Ol\npaOor7hwNywoJy1Gzbauq6qoqKuxykEuKCQnKy84QVngxr68vcftVVdTW1RIQDkxU7OrnZibnaGz\nwWIvJBsUERMaJEOyqaOepKSkrb3yNigmKCs41rqspqSko6iyyT4sJiYkKC0yP17Sxby9xNF+UU9o\n9OFiTkQ1L8+ooZmYn5+ltMY4HhUQDxEbKj25op6Yl5+rxjgnJCQfJC85vqCZl5merLjVNyggGhwl\nLk3IwMe8tre4xkMyMTFA6NthV13qUe2pop6anaGfqsY4HhUQExUXIC9RppeWl563VUIyJCAeHS67\nqJyWmZ+dpLlZKBkYHR8rQUlor6mtq7ZQP0MvLTQzPsa9zMTDQzSsn6ecnamem641IhcQFRcRFSZD\nrZSTnJ6jtchSIBYcIy3Prq6dk5ibnrk9LyQYGR0hMM7Bu6anr7HFNzEyKio4P1K8uMO8yzK6nKio\nn5+em6QxHx8YFBIPEB/YsKCYmJqaodsxJh0cHiUv1qebl5qZnKa/Lx8aHBwdIzPRr6itr6+03D8u\nKCs1Q0ZM6buyfVydnaafoZ2epXQlIhsVEw8SHTT6sZuXlZijuthEIhsaHCpTv62blZaTm6zaMR8Z\nGRYbJjNKs6ippae1z+szJy0xLjI+dsNUrpWdo56cmaG2LicsGBAQERYlOzq1lpSan6atvUAdGhwf\nLDJspZiWlZaYoscuHhkXFxkfK1i5r6qjo66/dT41MyslKT3XPb+Wm5+ZmZektTogJhkSEhIaJz1I\ntZmYnZ+nteM6IhweIScsw6Oel5WVmqG5NCgcFxcbHydH2LWno7TRWEMxJiYvPS82nJennJmUmq67\nJiQfExEPGSYvQNehmZydpK+8YSweHR8jJkK5rJuXlZiepMw+JRwaGR0hKjvYsKyqqKqvy1A5LCor\nLyg7np6qnpuWnqyvKy0qGxYPGiMlPG2vo6Gdo6qtu2ctJiYkKDU7Va+jnZ+gn6yz7S4mIyYiISw5\nXsvFt66prLzC505NS1dXT11USlJ97kz2wcO7t7fB5M57QT03MzA4Qjk9RU9y38/U0cnHvrq7ur/I\nzd/9bl9RWebU0MfHzdPoYUY9PDg1NDY5O07v38e7uMHXzMbAurzQ2Ly1w93ExH1VV0Y3NTQtLC8y\nMDBB+NDFu7GvrqyvtbvB3kxOV1BNT2v7/dTdZGZYQTs9QD47PUVYXl7e0MrK7v+4rb3Asquqr67A\nfNtHMSYgIyMkJyxF5syzrq6vra69zd5YUE5WTErmycXGz8O5x+pcS0g/OjAvPD0+REvXv7q7ycS4\nvM9CPcWyv+HLr6qwul9HRTAtJh8hK0I/QcSyrq2ttcjT41U+NTx8y9nRvLKxu8vY519EPTw4PkxJ\nTFNp/3dsXeLaYk1T7dPtR+Kpo665taqsv0MtKyUlJyQlLly3ra2urKmw1T4vKScoKTRbwa6jnp6f\nqLbLSC4nIyQoMTxWyru4uLzN2vVFMSwtN1NgyqKXmaCqpaa8LRwbGRobHys9x6udmJ2su77YMyAb\nHCMtQcmwp5+amZ6t1VI9LSEfJCo3SHjLu7a4ub3I5z4sKS48ODyxl5GWoaqkpW0dEhAUFxwiNcGp\nnZaTmKxVOjkuHhYXID63qKSfnZqZn7ozJiQlJSEiLEnEuLKxtLO6w8fZQy4qLDAzL/adkZKcrKyj\nri4WDg8VGx4oTrGjmpOSmq4+LTMvHxcWHUGspKKfnZubps4zIx0eJCsuMzzmsKepsb3BwMDuPS8p\nKSwtN7GYkpelu66mtywUDhAZICc00qyfmZWWnbsvJCcpJhwZHj2pmpqen52dpMssHhobHyo5SV3b\ntqWfpbdgPj5GPzMqJys8U+OsmZSWo8jNtbRHHA8PGCQxPmq1opuam5+1NyIdHycnICEytZqSlp2l\np6q+MR0ZGR0oOdK1srexqqewZi0mKjJBWW5rb29WSdGnm5qiv+i1qK0+GxETHCcvOlS6pJybnqnm\nLiMfIigqLTjbppeSl6G3zNBSKx0YGydHvrCwuMbLvbjEQikkK0u+tLrNaWNsRSwuvJyUmKnDtaao\nUxoODRQeKjzerZ2am6CrxD4nHBwiLkPTuqiblpmjwzs1Ny0mIyY027ivr7rkSklba0ErJCpLtKmt\nv+dgXVg+KiVPnpCPmbXOtK/kIA8LDRUhX6ednZ+jo6OxNx0WFyFBwa6ppp+bmqG7Mh8fKUDd6klX\nvayruzolIykwOj89P2W4pp+mvFNASEw5KiIjR5yOjZSmytLrKxcODA4aL7idl5qfo6mzRh0UFh4y\nyKqfmZidpaq3RCQZFx8yxKWeoazAakkyIBocJkS4q6qts7m2s75OLScvWMjRTz47M2qbjY6b3Sgq\nLiMcGhgYImygk5ar9VpJNyogIzFHv5+Ym6h2MDI+Ojc7O0vCr6mlpa95LyIgIyMlMvCzqamuutVO\nU8/AxmY8OUFj2ns+MTQ6LjGkjYyUo9wtHhcaJCQbIVSrnJufreQuJSgrKC5F9bKmo6Wv5EdMS1HD\nsrrFeT88MC1Fys9MRlXyy8PHy29ARlfiw77LVz84ODo8PD9Xv6unrbfHNSW/mpymwTwkHzNTWDkl\nM1j/qa3jMiMuNlq4v7KvuKy13EYqKTBPt62qqrO+z3VrMiUgJ9WsqK9sNy84U3XLz2XY0cbEZzou\nM07EsK+3vs3AwmdCMScfHSqjkY+Qn8QpGx8cIyUdNdurm5+k0DMzJiosL37OsKaop7PZSTY4PU/I\nvsG+z+5vOzYyLTbUrq25WS0tSr6qqLLRPjUyNT1AX9rQycXDycrMU0U9MjM2QTsyrJWUkp5QKxka\nIzXOOlNlS660s8kxMSIpPj62sbOpq63GSjMqMTn5sKqtxl1WUWL0Vk5ePTfNub3QNy42T8m5tM1Z\nZ01e0dBrR01LUNtpXH1w08zeU0JETOpj7KSdnZ7oLSIaKjZ+zkPJ1LqqtsgwJSEgNUe3p6ikrrvs\nNzEnMFXFqKitwEw/NkxuS19EQ0nntLG5YTY5PU7MvsLuUVNo3OlXRT1G68vUe1pLXMvBxm88Nj10\nvsPhq6GmotU3NSQ0OknLQtjgTsJdQTstLzM+Wsy0rbK5zUFFPUHIva+srrPaZj40OjdQ7dnLY1dF\nQlBPZmJdXF/cz8XEy9RnZPbufV9MQkdhy7/B2U5JQz9GUODb59dR36afn6VIMikjNTJJUD++w7ew\nXDopJS435b24rrS3s8XaVDs+Ucu3t7rLUEk8OT88Qz5JzMCzt8vqPTY7RGjaxLezsLnNbkc8NTQ3\nOkRR3cjBwcrdX0pGSGTTy8PBw9VNRc+vq6267kU5Nzw/Ozk6P0po41paX/TP3Nbk383bycPPzu5/\n29zJy8/TVElDPUBFTGve4n3QycrTWU1U+NnLxczS0s/Y3fhGOjU2Pk/6z8nH0MvMeFhEPkhW0cO9\nt7u7xNdeMz+/u6y/P0EuPEg/ZjI2S0PExuzcXMu+vbzr6tfjwMTeUjo4RN2/xeBcTl7j8mFIPT1D\n47WvuOU8O1DHuLzLV0tv5eNONzA4V8y/0E1ES9W/vcRZSExczMnP1tfJwbvDPi490KypvFwyLC82\nTEU/TP3CtbbNfE9S1tjcUk/PxLe+Ykg2O1JszmdQa3DIxdNkP0NV3sjIxb7F6FlOWF/239bL1+pi\nST04Oj9V2M7ea2ru0MXCxs3adFxZUVxpbN/Xx8HcPjl7vK20e0E3Qk5ZWjo5Q+7Av8dz/tHQ0E88\nO0rJurXBZU5FVW1iXU1wzcPA3VpJSFFi5u5+6NfM2Wb10czP61tRW2JjWENCTt3Ex850TU9UY/56\n8e/i293W31tNVGJsbefW21RE17asrclbPUJYREk3NUZpvr/E1mHU3v1OOz1Mybu9ylFNU2JjTElF\nbcnBwNTsav3a6fxWTFZk3Nze4O3e4djQz9ZvWExMVmvk3t/sbnNvZlhPT1NjcGRoY2b27+Hf6eHo\n29Ta3fRubPReRk/Tu7C0w91PTkhISjxIVN7J19xPVFVQcUpIQ0/Yzr7L4P5i1d/pV0df3L+8xNdT\nTElcW19meeLa2tnr/n5s5N/k6Wp46d/h4+VqV1trbX5rZG5hcGFWT0lTXHbb2NrxaXP429jVy8rI\n0u9iUmXs52JNTU580MvK3PP55c7O21hHSktba217XF9ibmpeaVxVV2Bm6dXP1d75bvpkX23f0szI\nzMzJy9N3TkhMWWH4elxYaOje62lZWmFqevxtYlxaamv88nzo7OPja2RiZ/Lh0dPa1/RfTUpe4M/O\nzs7Mx8jL0/ZWSkpMT1JOS09f7uLvc15cX3Xn4+z4e/Xo8nBmX2R559fY2tvk2tXc5m5nbPnm9GFO\nS1Xv1NHb8O3Z1djibl5cX2ZmYml8e3P5f2JUUl1q7+9z/Gttdmp1d+vj5eTn6u7g5vT5e+nd1tbl\n92pp+Orf7PJ2X2RdYHzvdVxqd2/m3NfY2eF2Z1hOT01MTlxv/ens8erq9PPr6/t2b2f61tHMzdXd\n4uHv7u309u32bF9dXVtfY2lzdXd6c2lxb+/Y5ujg73xoZmVfXFNVYmr15O14e+rj8nNqYv3f2tbY\n7e7j3+Xm5/zs4+nue2RnYmlgYH1r/fppYFxWVF9y+/l0bXH23tnc5OPc2M/NzdbqcV5aVExNTk9f\nefl2en5u9+nv7fLn4Nzkbmzp29zb3ubj7Xh8em75a19fXGNcV1JXYHrk5+rt7ufj3+Ts8Off3eV1\nd/v68nViYmNt+fLofGtsc+7p5/br6e/qdGleW2Fu59zieWRdW11hX2Jv/enk6N/p9eft6t3qb/p+\n5d3p3ep/8Oj6e19bWFJgZl9gZm/s393h7+Tc7Hj7cn7yd/h6/ubr929t/vHu73Jna2hu8X5ufmte\nZXzh3uno4Obm4OvnbFllZmXx6vx0bmlqbnru6vlqafL46uDu9vf++vluZ2Fqdfrt5Op7dnN0bGFn\nffvl3urm5OHd4/l6eG1mZWlrcv35dmhnbW71eHtzdO/39f559e3o7Pj+d/7r6+319u/v6fhsbf/q\n7XNiXWJ1eW1mcu/s5uj09vV97O91dWJnd3bo5PLv8/Hu9WtjcW1lYG367enn5d/h8m9u/f14+mt2\n8Pbm6Xh1d2ptamlxZGv66ubm7O7seXZycWtjbWv95eTs735q/fZ/dv705+vy6+rsfX70bmJldG1p\nbX3p7O3m5PF3bWNocWv7e2v06Obo6+z8ee36Zm97bW92fv/29v9uamlv9fvt5eHodfLq7Ozf4O/z\ndG9ZWWNcZG1v8e7x7er2+uzlcGFz9/bu4d3d3eB0YV1fYF9qeunsfXduYWVuem9obe/k6uLu5+Dk\n7Hv68eHh9e//7etucl9WWWVjZPX1+W1weGd1fffs7Ofl2tne3e329O/qamRsYGBwemxoYWZpa3f2\n6uLv8PBvf3hvfOLf3uPy7vpv/3ppY19ua2hoffT16Hzz8fDr7PLq3ejl5Pby+G1iXVlebXh1ZGBv\ncmtrbXH+5+Tf5u3p+fLi6PP8fn3k393gdXp8ZWdqWVdbav75b2lr7t3q7ufxfuvtcvz6+tvW3e72\neV9jYl1eaXzv5ur0bmn0/mNfXWVt8enk597d3dzmb2plY3tv921p7/jk7v77dXRoXFtrbW/039fR\n0eHm815UVl5f+ezpdPXnf999a09QWWj11tPI0OrccE9LSlHp5NjKz8V2TWxLZMB47W1NQkNIRmB9\nvcnfx9DPbF5fUlpOZGPZyNjP3mFHREREXG7a09HMzdLV52zwbWhfWXbhzszLzdfda1BEQUE/QkZK\nTV3t2M/MyM3Y6Hjt49bOzMjEw8bKz95vV1BNSUpHREpNTlZdXmFfa/Hl2NLSzcjKz9bc7OvsaVlO\nTU5SWl1lX2Foanh4/fzu3dbR1NLP09TV3eDd4OPk+ndkWVlZUFRQTU9TW2FtbG1y8uri3N7c5efj\n5eLd5+vh7n1vZWpjZGBudnH2bXH17u7j6+vX3ePm6+vm4OLj8vp1Z2ZcWFNOUVNXWlxj/OPd3N7l\n4OHn5vH68f588Pnr5vH99v1yal5eYmNx7OXh3NnZ4Ovv9vBvZm1oanT4eXb59nxtdW5naGlra3Fs\naW1rf/rv6O3o5u3w7e3p6e3yfGxsb3B79vHt6/Ly8XNwd/7w9HBsbmRlZWv89ejqfnx4c3r7eP16\namx+5ODg6e3o7+vu/H56bWhvcW9ub3Bpa2pnamt59u/q7PTx+379eXNtfe/x6+728+/s8Pz47+jo\n9nf8+3Vvb3FvdnH26ursfW9tcnN1c21uffv3+Xl0d2528/n9//53bmls/PHu7urtfH1+dXd7+uvs\n7enr8uzv8/h5f/vz8PJ8df13c31wd/p7eXlsamtlZWpnaGlw+fX48evl4OPv9vHxfm9zfXtz9vHu\n7PT8/Hpqampyf/jz9fTv5+Xm5ejo7PD3em9pamhqZWVmYWpqbHV2dn/49e7p39/m6+/y9/b2fXF8\n/fX+//n+eG1oZWlnanv37+30+/Dq5eTk4+r09f79fnl+fHr9fHBwa2hrcWlkZGNkanN4+O/t8Prz\n6+Pm6uru8vLv6ebx/3N4fW5ubG1qbXBxef7t6+/18vHx9Pn1+fLz8O72fnJqY2Zna29we/f68Oro\n6ur0/353e/9+dnr+eXl1dnl7/vz9e3p3f/f8+uzt9/b78ezq7fN6eX12fH37+nl5cm1qZWZvd3R2\neffu7Ono7vh8d3d5eHf37vZ7d3z7+312dX/+/fx+/PT3eG1rb33z7e7r7e3r8Pv7+f9zcn39fXt3\ndHZubnZ1b3J5eP3y8PXx7e7ufnZ2fPn4+nx9cHB5fHx1dXt7fH54e3Z87+zs7Ojr7vP59/H2+vr2\n9vLvfmxnZmRkaW9zbm1x/vf29u3r6+vr6u3v7+/6c3F1bGlnZ2dmamtv/vvt6+7v6+nr6+zv+/v6\n/fv2+X1+9/b7+/l8dnd3cm1ubm5tbnf49vf/fvHt7PL9d25we3NyeH789erq9O3p6ens8ndyd/bu\n7+3y7/H3/n59bmtoZ19aWl1ocHx9ent5eXr78u3s6vDv7vDn6erq6+zr6evt8vjz/GdibXduZ2lr\nZ2p5+u98av7k3N7h3t/j5OPf3uxuX1RNTU9SVltfYmd1+ene2trb4Orr6uLk6ung4erq5+76dm9u\nbGtnZWRmaGx2/Xxub2949evm5+Pl6+33/H96dWppc3lxcHFva2VaW+zc7OnY1dvd2tTT3vNzX1JT\nW11XWF1aVlddc+/r6ePk6efn6eDd3Nzd4OjxfXR7+/Z5bWdcWFhfZ294dnNwc3f25t7c3Nzf6Ov0\n8e35b25rbXJzdHN6enl+eXb97XZaVWzs9/jr5efq49nV2d3ge1pTWFtYWl9lZmRv+vDi3N3i7PX6\n+3p+6eHl6e3u8fb9cGxrY19fX2BkZ2lsbXn17u3t6Ofg29jY2Nrf6PJ3bmxlXV5eXmJmbXR8+fxr\nXlhi49XX2dXZ4eDb2d3tZlZQTlBXVVNUWFtgbffn3dra2NjY1tLV19fb4+jub2VmZl9cXF9cWlxe\nYmZlZ25tb/nm3+Hi39zZ2tze6vV7cm5oZWRiW1xmdHB3fP94dfPpdlts1c3U2NbY3ufe1NXtZVdN\nSUpSVE5PVVdZYP3h3Nva19vh29bY2t3e3+Tn6+/9dGZhY19bWVhZXF9maWpoa3jv49zX0c/T19fb\n3+p6bWReX2FdWl1fYGJpa3V0cHzr6fd3Y17pzs/Y2tba4d7X0tl6V0xHSFFZV1RWW11ieuLZ2NnV\n2eXp4t3e3t3f5u/6dGZlb3RsYV5fXV1dX2VlZ21sanzo29fW1tfY2d3g7f5+eWRcX2ZsampudXlz\nbnv37uftf3j6bnDm43pdVVZffObc2ulsafjf1dLZ7WVeYW7+6uft/mtte/Pu6u50Yl5gYV5dYmdl\nYmFofuzl4uDd3d7g4uvs5+Th6ftpYWNkanP8+nz7+nptdvb/dm96/HVue+nl6Onp6e3xfnN4b2dg\nX2Zxc2hgXVtaYnzs5OLf3dnSzs3O0t71aF5gZGBbW1xYXF9kZmVpam1saXP+9+vi4+jn5OHf4d/k\n7vj293pxa19eYGJscX348u/n39va3+rwe3Hs6G1bYP97dHj2+HFmZGxye/l6Z2ZucWxq/fF6X156\n5N3b1dXc3dvc3eHsdV5ZW15dWVtfYWJs9/bz7uvt7eXj5+30fXpzc3p7b2hqcX3z8urm6e39dGho\nbXv+8+np7+3n397h3+t8bGBdZXNya25vbHL18vn+eHR5+uzj3uLvdWpgXFtjcWxocvfr39rW19zo\nfG9tbGhqY15gZ2hu8evt5uHh5e7v73xvamVkaWttbm/67e3q7PR+ff57dm1qY2Bqd+/j5Ojl4eTj\n397h4+T7cG5kZWllXmBqc/3s6Obj6u/6enJxbmBcXlxXW2x89evh3uDe39/e3+Pt7fTw9nVtZmdl\nZ21ydXd3c219+Xp4dXJvfX56eHr39/fv6+vx+Pt9dXV7+PB3bWxue/vv6uzt6+zw7u33/nh88/t4\nfH3u5uv1fnZ1bmReYGRnZmNne/Dz///38vTw7ebj4u5+/H5/eXJ6++/u7ejo6O3+fPx8bWNhY2Jj\naHD97vL17env8u/2+vfv8/z6fW9pZWdre/Xv7vb3fP/2+fr9/H58fPrx8/r98e3v7efv9fr2fW1o\nX2JveXd9/nl2dv70fH11dv78/3h8+e3s7O7r7vT5e/fu93Rta21vdnx8fPz58Ort9P15evv7/XJr\nb3T+9vHv8fn7e3N5fv97ff93cW978Orp7O35cW5tb/79/Xt0bXR+ffbv7Obl6/D29/P9eHNtamhr\na29++PXw8PT5fv37fXv78+/5cGtrcGxtd3h0dnZ4+vLt6evu7vj59vb19ff48vDr8fL9dnZta2lp\nb3J2dHBxcnr27uns7Oz28vf6e3x9dXJucnNva2Zx7+rp6evr7fP+b3N9e3d++/j2937//Hz39/Ty\n9Pd+d29wbmxucWxufPPs7e3y7+rs8vt0cm1naWtud3twdHx++vPz+///fvfy7+zv8+/v9/fy8+76\nd3ZvcXBtb3X4+P35+vfz+Hx8dnV7+vt+dXP++f73/XV0fff09vf7eXl+enp+/vP2fHp7e3d1dP73\n8u7q7vHy8ezr7vP9/vx7cm5tbGtqbGxpaHN8/fz89vby6+ru7e/z/vv6e352//T5+3twcG9qbHv5\n+Xx89vb07/L39fl9eXr7/npxcXp2cnR8d3b48+/s6uz3d3v8f/rv5+br8vn49Ph5bW9oZmVlaGxt\ncnl9fnR2/u/j3uPo6+/2+f39ffz2eXZ7fXl1bW1vef/9f/z3+e/z9fx5/ndveO3s7/D1+Pxya2tp\namtuc3Z99e3n4uft7O70enNwb3lzbm5w//z89fDx+Xdvb3J3b3F+ff72+fLr6+zz7+rs7e3v/nFp\nY2NiaW1ve/zu6ePl6/X2eHBwbnJxdXd8+fL09+vn6/L6+nxua2NgZmpyd/Tt7unl5efo7Xr73t1x\nb2Ns1+ttW1tnZXNdcePtcGFt5uh9dmpzffrzeXTw79/e29np8HJwcmVgXVlifuTc4el5dPLo5Ot8\ncnD67/T5cG1rfPF3aFxXW2Fw9PxtZnPs5+zz9nvy7Pvz6eTe6fh2eWtv49vU2+hKNkPx1rKprK66\n0+dDNiojIR4nQ86upaKmrLLHTjcrJyYqOcmspqSlrLnPTjMrJyguPui9t7e+xthfTkE/RVLiyL6/\nyMnWZk9EPThLt6efn6i3UTUtJB8cGx4pXqqdmpyjtVoxKSQjJi1GwqqfnZ6mtOM5KyYlKjRZva+s\nrrfOTjkvLCwwP+3Bt7S1uLzD1F5HPDY3OkRYcO/lz8K7t62prKqz9UosKiYiKSgtPXqvpqGirc5A\nLywuMTtEYcK2q6mttuRURT5BQUlS5cjEynhFNjE0PE1n2s3Du7u9yN9uaPTj6mtPREFHVGFcU1/5\n/sannqKjsEUvJCUkHyYmLFG0n5udpL84KiMkKS4+ZLyppJ+jr9Y2Li4vOD5N6byura/CTDIrLTI+\nVO3Lu7Oxt8V0RT9BQkI+PT9L0L68vcfP3ndM3quoqqm5WTcuLyklJiInOMmmnp+lvFM2Li4tMDQ6\ndryro6KntdtJOTUzMzMyPNWup6iydDctLS8yOkNZy7esqay7dj83NDU3OkBkx7eztb3O7Ek2Q8S6\nsKmsudZWQC4nJB4dIzPEqZ6bn6e4bDwtKCMgJS5Ur6Cbm56mt285KiMfHiQx+rWppqqvu99GMSsp\nKjRouq2rrbXG4FpGPDg5PEjuxbu5usNsPjEvPFfCrquoq7S73EgzKCMfIis4a7yuqqqrrrjMVj01\nNDhBUfLLv7y8vMn1T0I/QUtdfNnMxsTI11xCOTo/R1/azsi/urm8wNVSPzk4O0FUcebX1dTa39ve\n19LlbPLj39HPzM7h6G1ZXGjo7W93WU1KSktEPj5BSmrXy8rLys7MzNHU5fD7bd7PysbKytHre1pM\nRkFAPj5GUWHr29bW2dLW3uZvX2D+1M3Kyc7V8F9TS0lGQkvozcC8vLnBytVVRjo1NzdAW+nMxsLA\ny9loRUA/RFVf5dzk0cvFwMPH0d/m4tjS095zWU5LSUZFQkJHTmfq3Nbf7m1ob/fXzszIx8bN3nBW\nTk9UV1136+fm4tTNy8bKz9T5bHl1cE4/NzAxNDlJccq6trKytLjE50s6NDI1QFzUw7y2tLO2vs9a\nQjs3OT1GS0xUXWx9f3Zx7NbKw8DBydtoTEE+QUxa5MnDwsLF5Upsysu6s7rA4V5GMzErJiYoL0jG\nq6Sio6u43UI0KygnKC9OvKqin6Gptd8/MSklIyg71bKrq7DB3kw7ODU0N0vNua6vvNxNQjw7QERP\n48i8uLrB21JBOjQsNbSnn5misVgvLR8hIRwiLvOnm5ecrNwsHx4hKjrjsaminaCovD0mHiAnM+O8\ns7Gvtb62vWo7LiosPvTMv8LIzMbE1v5OPTxGXm/j2t7Kv77OXEM0NDxJaNfORmqempuZrzMfGh4b\nJC0nRLGflpScwigbFhgmO9itpJ2dnqXtLh8bIC7Jrquosb/LYD0qL1jdu7jjPT1KW8i9zGjn0d7J\n4DguMUD+vrnWet/LvLjLODI6Qte6tMkxLq6foJqzKyQfKSgtMSZKqaCZm78lGhshMryzuamlpKe5\nPB8dJDa4pKKqr79zWzwsJCMo8qWhp8M+Mj7J3FE4LzvPsLO/Xjc+4Lm+XzwxOs2ytMZMOEXpysLI\nZjo0KlWXmJ2eOSEfIy4oMjYuvqOkorQsICU2asy23d+vrKq6TCwhMG63p6u8VE7B1044JSMubr6s\npLTjXFdIV1YuNP+3ra6+OjJId8vPSi8uQ8yvrLHMREdTRTo9SUfxtK+/RDa7q6ujuz81Ljs0Liwo\nOMKupabCPi8wOTtlbeK1sa60zVg4RmVP4+FaXHV3TtPeRWzhztpZ2L+50UczLz7Mr6+4zUk+PD5A\nPDo6Ss+4sLK96FZcXWFWQTxCUc2xrsFPPTQrM6ubpKWyODAxNCghKCxMq6ets346P37QR0BPX7Sn\nq8E6LCw16sfNxsLCvr9ILjc5TbuvtdnwWUZeS0RPzb+8tsxNQTw5OEFLUtfEwsnLzNbZ23xgUVBU\nUVheddO8tcNmRTkuLPefnqiwQy0zOjYmJTFQrp+nts0+PERHOyw40K+kqcE/LTA4RmJf2buvrr1N\nLy1Vz8i+ze/s2V5CSVLhxcDW38/kYkc3LzVgxLq81mp4z83j7GFj4M/cRzw7PmXGu73CwehDPi0v\nrZ+stMX9W0s5HhwuXa6jrb7HxtRHNiolOL+xrrK+2WNmPi4wP9u5rrPEyN5KPDY9Q8Cqx1trU1Zq\n0UxE1sbEzFU0N1LexbzAYk95YVBMRT5LzL/AzGRNTWr698e/zPxOZ9DdZ0U9PGKppstn31Pv3jgn\nKkzJv7O/1r3GQjU4ODz5x8/Hu8L/V0k8QuzMw7m3xu12TkdMTkVDTHm6uL/dVvdfWkZE9cm9yPtV\nYGtLQUZg3+pNRmDOyND4U1nNyN91ZWjm9G1ZTmBbYMq/wszmXVffZD0216vD0sTWwOVLMS1cSjtE\nTMy0tNxX5Us6NzhIy7a/wrq8v30+ND1t5dPPys5m3ry92lRSVGf+SkNSXWTf3X7g31xZ7WFFSlpZ\n39P31L28zGpMTV9cTUhW58/BxNbKzks6P1vezth2VW3F0MLdeb3M2D8/SD9GOEblvL/j7mrW32M/\nPG3d0M/LxcvNdFRcUUxIXszO3uLbz9DrWVjk52FfVEtf2+RvbFxQ89Pe7m9l89bdb2JfXWVp6c/W\n2+z+3d39VEhMXWfp4+XP1dv2Xl5tX03qw8rfaGh21m5LXNvN2OhkXWhQVH3pdlFNUXTqYWvu5eHo\n8+HfXFJo6NzU0tfMxc/u/29nUktXWVhd6c7P3FtNUlRPUGrq3M/OyMjuTUpUau7y5tnV1O/6bk9O\nWGf+5Nne63tlYPT1bWl/6dzQ7PDd8Xtp++Lp7fPj421WTVBeeXlo8efc2/ldZuH6bm5cWl1dX3Pr\n7ezaz83U615YZWhs9tTR3ep96/tdVltiVtrC0l1dc1JPU09WbdDRzM9o+n5YWldu2N7Pz+7lVmbq\nXd/xTWnV4VJPaOrb2XBr/enfWlFw393n4Obm8XFlZGV03tXV53z9/l5SU1dcZujS3e3id1tVaflk\nctjS0N5hWltZV3Xf3d3j+vT=\n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/get-indexes.txt",
    "content": "* SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21\nA######## OK SEARCH completed (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/go-ahead.txt",
    "content": "+ go ahead\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/greeting.txt",
    "content": "* OK Gimap ready for requests from 127.0.0.1 i9if7359725qay.199\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/headers.1+unsolicited-info.txt",
    "content": "* 1 FETCH (UID 1 MODSEQ (29233) ANNOTATION (/comment (value.priv \"My comment\" value.shared NIL size.priv \"10\" size.shared \"0\")) FLAGS (\\Seen \\Deleted) X-GM-LABELS (\"Trash\") BODY[HEADER] {515}\nReturn-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA12840> for nsb; Thu, 19 Sep 91 12:41:43 EDT\nDate: Thu, 19 Sep 91 12:41:43 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9109191641.AA12840@greenbush.bellcore.com>\nTo: abel, bianchi, braun, cameron, carmen, jfp, jxr, kraut, lamb, lowery, lynn,\n        mlittman, nancyg, sau, shoshi, slr, stornett@flash, tkl\nCc: nsb, trina@flash\nSubject: Star Trek Party!\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=Outermost_Trek\n \n)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/idle-done.txt",
    "content": "A######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/idle.txt",
    "content": "+ okay, go ahead\n* 1 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 1)\n* 2 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 2)\n* 3 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 3)\n* 5 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 5)\n* 7 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 7)\n* 8 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 8)\n* 9 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 9)\n* 11 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 11)\n* 12 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 12)\n* 13 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 13)\n* 14 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 14)\n* 26 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 26)\n* 27 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 27)\n* 28 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 28)\n* 29 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 29)\n* 31 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 31)\n* 34 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 34)\n* 41 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 41)\n* 42 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 42)\n* 43 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 43)\n* 50 FETCH (FLAGS (\\Seen \\Answered \\Deleted) UID 50)\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 0 EXISTS\n* 1 EXISTS\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-all-no-status.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \"/\" \"INBOX\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" +Folder\n* LIST (\\HasChildren \\NonExistent \\Subscribed) \"/\" \"[Gmail]\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/All Mail\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Drafts\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Important\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Sent Mail\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Spam\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Starred\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Trash\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-all.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \"/\" \"INBOX\"\n* STATUS \"INBOX\" (HIGHESTMODSEQ 41234 MESSAGES 60 RECENT 0 UIDNEXT 410 UIDVALIDITY 1 UNSEEN 0 SIZE 1024 MAILBOXID (d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" +Folder\n* STATUS +Folder (HIGHESTMODSEQ 41234 MESSAGES 6 RECENT 0 UIDNEXT 7 UIDVALIDITY 1 UNSEEN 0 SIZE 1024 MAILBOXID (f001Ed6c-ebee-41a5-a65e-9498d3e0aec0))\n* LIST (\\HasChildren \\NonExistent \\Subscribed) \"/\" \"[Gmail]\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/All Mail\"\n* STATUS \"[Gmail]/All Mail\" (HIGHESTMODSEQ 41234 MESSAGES 67 RECENT 0 UIDNEXT 1210 UIDVALIDITY 11 UNSEEN 3 SIZE 1024 MAILBOXID (f668b57d-9f42-453b-b315-a18cd3eb0f85))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Drafts\"\n* STATUS \"[Gmail]/Drafts\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 6 UNSEEN 0 SIZE 1024 MAILBOXID (fdacc3c7-4e20-4ca0-a0d7-4f7267187e48))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Important\"\n* STATUS \"[Gmail]/Important\" (HIGHESTMODSEQ 41234 MESSAGES 58 RECENT 0 UIDNEXT 307 UIDVALIDITY 9 UNSEEN 0 SIZE 1024 MAILBOXID (2a0410e1-252a-4ee8-b48d-30111cda734a))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Sent Mail\"\n* STATUS \"[Gmail]/Sent Mail\" (HIGHESTMODSEQ 41234 MESSAGES 4 RECENT 0 UIDNEXT 7 UIDVALIDITY 5 UNSEEN 0 SIZE 1024 MAILBOXID (79da5ecd-afe4-440e-81ce-64ace69c9fbd))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Spam\"\n* STATUS \"[Gmail]/Spam\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 3 UNSEEN 0 SIZE 1024 MAILBOXID (f5df5af8-5e11-49a5-891d-c3e05591265e))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Starred\"\n* STATUS \"[Gmail]/Starred\" (HIGHESTMODSEQ 41234 MESSAGES 1 RECENT 0 UIDNEXT 7 UIDVALIDITY 4 UNSEEN 0 SIZE 1024 MAILBOXID (93ad849a-2127-4c8e-ac41-594cd0a346a4))\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Trash\"\n* STATUS \"[Gmail]/Trash\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1143 UIDVALIDITY 2 UNSEEN 0 SIZE 1024 MAILBOXID (a663f6ce-4f36-434e-9f0c-7f757046a6d4))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-archived-messages.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"Archived Messages\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-archives.txt",
    "content": "* LIST (\\HasNoChildren \\Archive) \"/\" \"[Gmail]/Archives\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-flagged.txt",
    "content": "* LIST (\\HasNoChildren \\Flagged) \"/\" \"[Gmail]/Flagged\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-gmail-subfolders-no-status.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/All Mail\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Drafts\"\n* LIST (\\HasNoChildren \\Subscribed \\Marked) \"/\" \"[Gmail]/Important\"\n* LIST (\\HasNoChildren \\Subscribed \\Unmarked) \"/\" \"[Gmail]/Sent Mail\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Spam\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Starred\"\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Trash\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-gmail-subfolders.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/All Mail\"\n* STATUS \"[Gmail]/All Mail\" (HIGHESTMODSEQ 41234 MESSAGES 67 RECENT 0 UIDNEXT 1210 UIDVALIDITY 11 UNSEEN 3)\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Drafts\"\n* STATUS \"[Gmail]/Drafts\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 6 UNSEEN 0)\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Important\"\n* STATUS \"[Gmail]/Important\" (HIGHESTMODSEQ 41234 MESSAGES 58 RECENT 0 UIDNEXT 307 UIDVALIDITY 9 UNSEEN 0)\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Sent Mail\"\n* STATUS \"[Gmail]/Sent Mail\" (HIGHESTMODSEQ 41234 MESSAGES 4 RECENT 0 UIDNEXT 7 UIDVALIDITY 5 UNSEEN 0)\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Spam\"\n* STATUS \"[Gmail]/Spam\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 3 UNSEEN 0)\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Starred\"\n* STATUS \"[Gmail]/Starred\" (HIGHESTMODSEQ 41234 MESSAGES 1 RECENT 0 UIDNEXT 7 UIDVALIDITY 4 UNSEEN 0)\n* LIST (\\HasNoChildren \\Subscribed) \"/\" \"[Gmail]/Trash\"\n* STATUS \"[Gmail]/Trash\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1143 UIDVALIDITY 2 UNSEEN 0)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-gmail.txt",
    "content": "* LIST (\\HasChildren \\NonExistent) \"/\" \"[Gmail]\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-inbox.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \"/\" \"INBOX\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-level1.txt",
    "content": "* LIST (\\HasChildren) \"/\" \"Level1\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-level2.txt",
    "content": "* LIST (\\HasChildren) \"/\" \"Level1/Level2\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-level3.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"Level1/Level2/Level3\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-personal-status-appendlimit.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"INBOX\"\n* STATUS \"INBOX\" (APPENDLIMIT 1234567890 MESSAGES 10 UNSEEN 1 SIZE 123456789)\n* LIST (\\Noselect \\HasChildren) \"/\" \"[Gmail]\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-personal.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"INBOX\"\n* LIST (\\Noselect \\HasChildren) \"/\" \"[Gmail]\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-sublevel1.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"TopLevel1/SubLevel1\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-sublevel2.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"TopLevel2/SubLevel2\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-toplevel1.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"TopLevel1\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-toplevel2.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"TopLevel2\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-unittests-dummy.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"UnitTests/Dummy\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/list-unittests.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"UnitTests\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/logout.txt",
    "content": "* BYE LOGOUT Requested\nA######## OK 73 good day (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/lsub-all.txt",
    "content": "* LSUB (\\HasNoChildren) \"/\" \"INBOX\"\n* LSUB (\\HasNoChildren) \"/\" +Folder\n* LSUB (\\HasChildren \\NonExistent) \"/\" \"[Gmail]\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/All Mail\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/Drafts\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/Important\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/Sent Mail\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/Spam\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/Starred\"\n* LSUB (\\HasNoChildren) \"/\" \"[Gmail]/Trash\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/lsub-personal.txt",
    "content": "* LSUB (\\HasNoChildren) \"/\" \"INBOX\"\n* LSUB (\\HasNoChildren) \"/\" \"UnitTests\"\n* LSUB (\\HasChildren \\Noselect) \"/\" \"[Gmail]\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"/\")) NIL NIL\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/precise-pangolin-message.txt",
    "content": "* 270 FETCH (MODSEQ (35295) BODY[] {168457}\nMIME-Version: 1.0\nReceived: by 10.76.22.101 with HTTP; Tue, 1 Apr 2014 02:05:30 -0700 (PDT)\nDate: Tue, 1 Apr 2014 17:05:30 +0800\nDelivered-To: jforad@gmail.com\nMessage-ID: <CAA6hF4LATqyLVR4YhfeOTYvtKEpnwGXOA2mCUk=0ybkpyfNBMA@mail.gmail.com>\nSubject: TEST2\nFrom: ******** <*******@gmail.com>\nTo: me <*******@gmail.com>\nContent-Type: multipart/mixed; boundary=14dae94edd254c7b2a04f5f778ee\n\n--14dae94edd254c7b2a04f5f778ee\nContent-Type: multipart/alternative; boundary=14dae94edd254c7b1504f5f778ec\n\n--14dae94edd254c7b1504f5f778ec\nContent-Type: text/plain; charset=UTF-8\n\nTest send jpg file\n\n--14dae94edd254c7b1504f5f778ec\nContent-Type: text/html; charset=UTF-8\n\n<div dir=\"ltr\">Test send jpg file<br></div>\n\n--14dae94edd254c7b1504f5f778ec--\n--14dae94edd254c7b2a04f5f778ee\nContent-Type: image/jpeg; name=\"Precise_Pangolin_by_Vlad_Gerasimov.jpg\"\nContent-Disposition: attachment; \n\tfilename=\"Precise_Pangolin_by_Vlad_Gerasimov.jpg\"\nContent-Transfer-Encoding: base64\nX-Attachment-Id: f_htgyn5ts0\n\n/9j/4AAQSkZJRgABAQAAAQABAAD/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/bAEMACQYGBgcG\nCQcHCQ0JBwkNDwsJCQsPEg4ODw4OEhEODw4ODw4RERQVFxUUERsbHR0bGycmJiYnLCwsLCwsLCws\nLP/bAEMBCgkJCgsKDAoKDA8NDg0PEw4ODg4TFg4OEA4OFhsUERERERQbGBoXFxcaGB4eGxseHiYm\nJCYmLCwsLCwsLCwsLP/AABEIBQAHgAMBIgACEQEDEQH/xAAbAAEBAQEBAQEBAAAAAAAAAAABAAID\nBAUGB//EAEcQAAIBAwIEBQMDAwIEBAUACwABESExQQJRA2FxgQQSkaGxBcHw0eHxBhMiMkIUI1Ji\nFTNygiRDU5KiB2OyNERzwtIWJYP/xAAaAQEBAQEBAQEAAAAAAAAAAAAAAQMCBAUG/8QANBEBAAIB\nAgQDBwMEAgMBAAAAAAECEQMhEjFBUQRhcSIyQoGRodETscEFFFJicuEjM/CS/9oADAMBAAIRAxEA\nPwD+VIZQDGDzvergNAewFzG32BKohRSblm9Back/xADXqRUKPUCioSP5UrhAQ8iYVZEoKEBcht+p\nZCX2Aat0KYqEFPeALHQkW4q4FM19BLvBdyB5DG9ixckgq55LtQol1sPsgCK36CrB1GVP5cCfJg3V\ni6GcARLYoJLsEKTgogirAUoeYQUx1A0vgn6gpb6jWgVX7DgEv2NfOAEHuwfMnNsEA7wVmXQb0koz\nDTI2l6mXEgUblMubjXahNevIgMRYUuZfJpaXO8AGn3NafcNCWdjbpzXwRVZw+yEzKrzNJ6uwDi/s\nDUUmNyc7V9AhXdADb4RR/JpLcGlnIFaPYGlcVenuXyFZitaB8i4T/GEVTKiqAxNiwAV7YRQ3mRjs\n9iyAZWxpfIQbSQkCiwr1GHgufsRQvaxJP1FWSwxjlcIPgo2tgX/BlzmwUksFzQTgB5sZtsEsqTOC\nBTz6g3bcJFqpRJxT2NTMO+xlI1Z1VQK98ZJ05ooUWLADn5ZVKPQUoICk5jIPKQ6muoqwBH8gnXbc\nUq3oOpVnHIAV6u41TjnKkJwSiwDiRUOklZVsSTzm4C4mfUEnPQXbvYlUKHTAuOu5btXgJmvugFw8\nGUoupNOxOkACjvsCFv2wFZ25gKqTmbV2KCSkCUYJKHN/YfL6i57gWYmVuFnSzJ6l/GQS9AHn2C/a\n49bFW69gMtUzBmMGtT9SiUBL1GJtYlbdKwpdoAErNImMrtuThLpkAjKB3lCEOa0SAEqzNdiqVKr4\nHHMDLSgIaXQ3FKWJJ57oATl88FRoXpgKsASWLlT9hTiWV+4BXerG2kIXUXEcgKYLMlCa2NaUBmHZ\nXYpUqhiGuQ9gOeqrlKNwS3N1swrgCa3orlbqS5ofyQBbO4xPUVzKzgA1JBXsaam/oZbWLWAKrqxb\nUoKL9Sr+4Qy07VJ1KmWFJlWAflg364JO8WLHVgDXckhVicqMUqBGX+MWmTt8AZq3IxsVpZfcoPku\no9bA0BUB0FqlOxZr+IAZJ1oxd6BVgKHS+QfYk+gDOMhPOw9ChXAHMTgFcXE9DMPNNmBUWKg17mon\nqCTgIGqhDwbadwSpSegBCndDDHy22FrAGVWm5ZrU1EBEqcgCUZBwME/3ZRlqip+oG82Bqi6AZmnU\nqSMP9CAkq1GHWBsuQXv+4E7wTaLPwLAJ2QC5B16ADnAISUzyCJVoV2PMLqoA7lQWuQRuAP8AkKwP\nW3MH/BRc/kJdljItRzCJrkAkVUsFHYIorQqiWZgDMFDuael53qFYuAJMIz6DQOtQjMPIuBakGn6l\nA0o5ETFunMAVqoqsehKroyCzzYovsXLAFzyDQ/BQAQ09ySfYc1sUlBDX6FUnH3L4IButAdowLkHs\niol8lUuaFPEAGYkK3GGQBfJEPQAmP0GlyUFVIAIcsgDA0KJshh/ZgHuMAKbAokoZpLJNYwFDqHKy\nNMGmgChIVQJ9ABCnZq4P3FR3YRLcaBYpdwqaoK9twmHyJv1Am/5JA7dSh3A1H7BaDSfruZkAsXsW\nSq+wEWSoKUgSGk0C5c4Am6wUUqMfiKn2AuRRyqWxALUhLwUXFTcgEarQrocgUeowVEMbhRyKsPcm\n8gwKnUlTpgoJ46AVGi+SSmSwBciJzZlLQDJUuC2ZrkAWFevMugVgBXSox2KvrkkgqshUjzLIFdTB\nQShP7FEWrggK2sOlVFKnwMbvFWMjLToTqablcjOpLFgqpPQIGFJfjYRJO+DWOQI1FVsFUUCXv1Gs\nUfqETKVIsQNNrjVciXTqahquACkTdlGTSm3Yoj7hWYpzuPlbXVly2GmQMwoJvAvkGpfwBltz8Gdn\n6DmCn1Kg6DuTUjpQDpTz6lHpk1BfJFZ8tdzSRKYr6FYCjCDFy+RWwBpW2cjavqUR0wUEA+fZFD/Q\nW1AN2XoUFEMdipcoAuZRQlsIAWYyhL8qBK/M0o/kFMtmkooyAgs8jTULtcKS6UAn/BQ7ZGzj1KgG\nY2YxFckkrDf9QMxWNjTcUKHD+CcMKzClQSmRv+5JPzWAYbmeorNAjcaAFGo9xVOhdxiVEAZ1SvQy\nuTNN0+wRW3UCqN6ZkpyLrXIBT0uMelpLTGaseYBF90N+wzSrrgua92FEehOvpsMYJvIGI3KWLQdA\nJ25E2Uc6E1HUIHuKT/coVso1DhxQAig8n6FXJTffAULftBOrkaroUT+4QF5W6moixNY7Ac2n+kjC\njY01jAvTffcDMJ0JNruhgohWoBmvNg1zNugNSBzivwSk3yVAqARWGUTfua06X1RtIDm1y/Q3pmCc\n2VBhJpRAGXDL8YtBC2lADUrkEWjqaaqvkoUADnGbE0rdhhL1uWlUhAUL9QSNoLqjgDLUKtdzLdaG\n3ahlp3YBX82CN/Q1CxgIsARSxTRZ2GMYJJw/UIoitwjK/ccwuxTT7gETUk1MarE59C+AqoDcR9zV\nVW24P1WwRl2gqTX8Q2DcoqDF3cEMAEyRNzct9kAQ5+xdewpJ2yEfwAS8CgaXoICojrYWo6lzKs/f\nqANp0BmoiJMtAFnzyLV7SUIm97gSvXAx+cwU9RbpSwE8g6jIUsBcrotMU35j8Fy2yBP4DA9b/qWa\ngZac/INfya6qjKvZhGAtTJt7UKKTgownv2FTT7FCDnYBX7i4jlsFlzKegC7wZbNU+7LHMDLuSF6Z\nQJIArAS7IfkpqwicA7/Yp5FmvqBTRwBOFYkqX6FAkLUDb+CdQMfOw07iyaryAKFFpJeuCWzyBPcM\nUGHFSgAgOZrIBB3B7LuLvysAQO0CRIoFa4wVWpihKIAMj3J0sFCB32Bsq/uXyAzgO1ME6P4JQBdC\nSt8ktyuBbh1/IF2lhFigrArvUGNIApAqlmgFQLdzXsFeoElsSsPMoAKkxoFbAI4qCozSsAeXcFyN\nTTr6D1o8kGSqMKPsUUApVwoLRdO5QPmELoa/JM0dgCz+BRSAEwnciewEmU1KxRUISoWR3Al8lEWK\nGIURJdBqMIDMZRO3IoHfcgLlEVL8ZFDaxJl+MaYqQVuQdBp+MYVQDJbIluMXAupIpyPUCGv3M4+5\nqFFQorGyKCq8lAF3exVGE1YbQAJRewvSUE2BQCHoSSChIq/ccxJBFGwdhxywMMCo/wBR+wQuwpem\nApREKUKdiAzIrFO5RfkUVqpCtpJqwRznkEuBn1AGqA1tc0p9wcqgGaw0V6IsfqW4Gk313GXH3Mp0\nqhT2wQOleqya8qrSfkytX6GtMN+4DCGP5C7+wtLagUooUcw9ydaY3As88lTBNVi4oDP5IduxqkA/\n5QGGpCG2bcTzBxYAg2qqPXsFDSvUAiiGKXoNLD7ogzC/1YCF1NVBr0AEhjHruUVhCtvQDLouTyUP\n9DSRPTPYDEyvgOhp3le4fncok5VMFlLlkoScYLv3AQllDXcaTYC6+grYtN4HldogzGqTSTzZCOI9\nQLl8FKxYllRJO9LYCpKlKvI5oDVvYG+QGkm8+hRW4Jw5sM3r/AFBPbkOmw3v6gYp3Cn7G2rpBEoA\n0xVMadWDi3clT78wFvUrMpZmd85FWAltJRd+gzUuncKvLyrsge5pXBr1Al6fA2pfJRWWUOteoDyK\n0pl8Mu5AxNCgEjTz8gZachEdWbnK3MubrcIw1yLKNVuD5FCpLJY5blKx2IpnfIKae427k4tHUAhx\nyJKcwouNLqiFS1NEAYU0ZRDi5qkx6IAJp/cqRW4OyqVsgW++GTpS/UpwapWAMKa2L8kXCmAbX6SB\nmPSCSy6FuK/kqNJPHYon7lpcwmPV9yKKua9ihi5uV+qoBnk7jGwunPcFP7hFOaSVPeeQhzeALoUF\nZzsWQqSpQodyjkSnKkool8tgel4JtzzGjAw1FEE12NuJoHlpcIzi0l07SLW18A1ab5AK0L8RJU+U\nUb33AIbS3HG0lG3YnRRZBAE+m5qqgy0+u4CjLRpJ32LyxABVVZflBhepJewA080/Mghp3ks3KKEE\neo3fMpcfeQC/UknHtBcnTYeYDy9wi/yVYlC3sARvgtsDzigQ6V5kGccyg1z9C8qkAhfuMJxBWVcE\ngC/UoNRK+C8qVgMsbD5fQGq8gCSJQhRQV7Famw35cy62AIXQzF9uRvyuQaeAMOI5llp+rGIKVYIz\n1sFKuxqFAFFDbGH1JWmCou4FOGZuaSqUK2AMZpbBRFRrNLZIDL5jBJVQQETSdCjG1RhTUncCdgJr\nYocAJms/mDXX0C6AP0BpC+o0uUDtzB9+5poPcAc2disKnFwYGci1QVH6A6hA5khSuTVeQGcDpXuM\nVjJJO8SgMu1bbg9zTU9wZQUK5Z/QAi5FFvdDaBXvkAXwSsKSJUILL5g/UqxzKQB2ISjnLKCKAatg\nKQBEyikjFN2AIQgWBTdlUo5RzGyoQArYqzzFZAmskQoAyA+5NR8AEVKP5EIwBQwyaVoBx3AIvbuE\neguRKMUA1qrTBmOYRF9h8pRQAXuaKCzYBW2RSBKDSlBVEZIpKhANUfMz7cjdK+kmYgoBxSxc7kkA\n1hEklPyNZ5kQGNhUyXYsMB/KA6L5KXm40kAoT2ViZVVAqyMzihUkoXQBjJFX9iUdQL8gV06klI+V\n3QUxKiaXBrYUrSTxXoBlU5jTFhJXrYAd69iae4w/xkrgHlHn6IlbYoXQgqdypCJLA+W4FdilFSde\nwpXCj77muiM1XQ0vkgFFvccxHQs17lgATqTc8kMJg1/IBX2CFixqtlUop9imB8bir8igfL7ZAO0p\nlEWznYfLBTX7AKlRsbmcRsYVOeJNUf3IrSn79CrYK4qxSqBUB3+/I1+SHN3AIksfIxsGJYA/YIms\nwh+CmwAl+pq36gOKkEvVjW/wSVJICmow1zJLnG0mo2owMwsruih1Nc8O4q/ajCiLrBl8n2NJOOgM\nDDUfqDXQ0164Bp1rXYIIcvYqFOwqdigUt37koGPxlT9wJJ7m1vYxiB0ukMgaSTVfuSdSTjrYCXOw\nqKbbEE0q5kKZTp6EotAfLFTbAD6laxpRioVbAF81El+Ms8twBaqVqxbqCUUjsERzAY2QWFKH0Jqk\nsAfsMJ3pJfcYsFUU/W5VnbkaisClHyQZin6lG+TV+5OmrbIGXCURUvhDjqVYiAMpKOtxUT1GKS+5\nJLvuBKI2Zqm9MGZr7DZAENq+KMmv3YPajgfNQAd+fIzXalxbxgKTcord8DLrQK0fuKjPyAuuJCFB\npD5ZVL7ACV9tx7UwTr1KnrUCapGSVvsabmu1wh3zzIMuM9gy2qi5Ux6lb9eYAlzUi9hhA/4APyEZ\nzX1NA1QoIW5Wc42GKx7hG/YDSe3cvNj5DyuYKi6gMuKjn2BJZZLnZgW7czsHsLpmQ3ggVPcNNuZZ\nJNroA1xcbGVEN9idHfkAzv7FZwUx3JbegF5U4+BKlShxIE4fUxqXyb6+pl+oBy6hgmq0dS62Kg5j\nn5Rfcox7gVZp2J6VV+otfuFu4BGWZadTdX+WLywvkDCXqVdzUpuV6je4GVboH5Q0wrC9GAQ8Cl1K\noxWwRnqLWTaUw9g8ra9wOcUK1TbUSroy0wBT1H4xARWEMVgChyW2Cz9yfPGchU/ncodG/wAQ8/Yo\ndIvswgr+o+VZq3sLVQuBDexJYmxOJp6ACeNgc+xqE69g9vcDPS49Sj9iezpsARIrcqZyU4zsBREB\nvNGqlN0D9igvPsXyTdepS/5AHvbmUKlOgqbyE152YQNFSbjLSBJ39yiTUCnFUE9yTbUbhQ2v4Brb\nqiczBO9QgarYq9eg4QR6ARcrcycplCCCayUfyMVACb5lQp5iqMA90EGrXKF1Az8FnYWosFLepROr\n+Ag1FUxcAZiFUvKh0ocgZi+w1km26wKtM1yARae4QapzkABr8Rlo1FQfsEYgqYGMlDCYZiLil+kM\nna9wrPQo0rUL4JOpfJFHwUc+w8ygICiLWIqTyZQZL8YwQEkQrkPP1ICM3BqL3NUKMgZgljbJqKbh\nCrzKCleg++xfbBcmQQxUOZLYBguZFkAjcHahpGW9rAT29gl4ZXqw7lGsFKsDUcyIDVfbcOYth9io\nY/ELgEWpxaoVVv8AIxn1BTCboNXIDiC+CVhkgpoX5JQ4GnRgFrsHfoamKB7AVM3LFbgIBjmJQLbA\nIbLoWCiUBQySmo1/UrVXYKopIPSa6E0AJCW4xEfLALfcfgqvIpT1AlT9TePgEKgih1RLYm0IAvZZ\nKBhktIBzoS01NLShdGBiN7FFTTywrYCu+ZRkkNrLqFGeYrp0C/7iugFYZxgqrMkr7kEmr4G4RyoS\nlhV9yUTzVita2Rc7ZAFpsUYFr8sWJuwiSgmaa3uZaauFMSzO8GrF0uESUM0lUyoFbWQVqwmfNf3F\ndAJ1DmLulNbFG2AGv8hWLUNQgia72IM+XDuUbj7E5m1wMwbSlXJaTUdgCOyFrGCr2KLBRd0Y7Ek0\naaSqASEKdkU5GGkvgCr+oOpRWpRWudgBrb8ZnU5rnkb1VRmMWm4GKjWR8uHY15cv8QRiw0iwvS1X\nFgiihAE+hLkMbksbsCsy552KGnPuMbgFXsavixnp+ItgqvzqaSpt8hE9zalKlncBSkvygpb2HDf4\nwojKKF+fca/oDe8QQZoVIl4pBaqOMAo7lFFW3dYFKbKg7yUZtsgJKv3GPXJaescivKRBZgVcqRUl\nbfdgVY5g2/i44J86AUJ8+ZmYc5sMV+ArdAMx3uGLg7srlC3XsUua+4Xkpx8gMYVSanr8gnCmK4FX\nqBiK1Q5NvRP3gHw2uYGd+QSopRDCfUksQEaWqppVxfJiIuaTgimn8jHQu1cllgMZ9JLHUE1EGpeY\nAy1syiKQabnahQnIHN2nsVTfljogaWwGVpVV7A/xnSqjcy1+gGMfcpSuMZGGlWpQKldy+OZfYWm3\nhvPQgyoHCQPSolEm5TdyhbyZzcW5xHUopXuBK/Moo9mSXpyG8Y3AlHZ2DUvzAw1QGiASfU0v4CNh\nU9J9SjS+Co49A82lLcJn7MgaRCzcy8tZNUyETUDLvkqzsUNdCpsEXbsWn+Ei57Goi3qATKsKWboy\n3FmyU9vsFLSb+xmq+xMpcdyoJjAp7X2KkF5QJzNVVjChK+wpfsFujAHpp+QPleaCk5pYZAGse5Re\new4qTQGNbV3gzEvmb1bYMNY9ACkcyiRy9io++AgaKtvkXvBYp1Ak3mNhgkkikKbuQSps9hUZ9i1c\npgIEmPWu4T/BKFX2AnTmyjfuUzUEBTsUqI9yzHuU0tyAIiygqdOQT+XHAA3YO4/BdqlGYuRV7l2p\ngAhdJGHNqKxBzgCzWyBxVjlcgaCHnQKLqTSTrYe5RluZeS6moB6WAFRfoVZsDiQJrmCrQVeMYKMQ\nARHUmrjEL9Si9AMsaFCdVfJfkgLB2+xbQSvARNdzMfmDX4yQAlTkJQOAB0+5N3FzYPKACqIkqk0U\nUoPzmTUPEDgDMz6WMmp3cBTuEFJBchzShYlAZKO4pDQAySGK3uSTXQARchDDBhItix0G4QP0JLco\nHqBQUT6CUAWOZUyMKAYFAJ+gwX4go6F5aihje4GYCIobfO5lr+QJbj1BPew9AjOqzhw9wq7uWsmq\n/oZcXYBL74Bj/Jc16FEClfcm6EBVigOo3sMS+YEtIw/4FJJDDZBlEMTYoABS7ElNPg0sABX6kWOg\nFFJKJXwV7FIVmw0/YVzKncCL5J1SKF9gDrcfgpGADNBiV+pQ++4/cCCPTJrBRl15EB5ZGFgUl6ik\nVR5ce4Wpg1FIQxlkAugucj1zYo5AESaWk15Yt7lDi4URShWqMVpcIbv7EGX+IHXqPYUvQoEv3JJJ\nDpmSpG6ICHe5JZszelUUehRCAzXBU9DXlDy0kKMkl6bGomuxl05ALmpdrWBz33NK0ADbiCi1BtXs\nyiWvuBQrlaRFKkdwLHUHpTWRe6Q4fsBmFTYKq/Y0rfcIXbIFUkpu6DaAS9gJJzyGGUNdSUgKbnnu\nZ1ptQqGspjRubEBoUKJbhXNRiS0qu+xqH0AFphbsIigw4bZJTYCj9R6FM/qMfyFDqqjboMFCz3gD\nMN0KJ7GlH7FRU7gCW/Yo9h7FdUsBmJsyaEnsgJuEZiswbdZZeVtbbgYgml0NNVSgoyBn5GOXU0lV\nyi1KiUZA5xv2J8qvJpzCROLr8gDPlal5CJtY11Hy1AzHrsSW1DTVslD+ABb3TNKWoYJLFTalKLhU\nlN0LbnZIMDL/AHIM6m7WMtV5GtVq1sDhKoF5VE0BKrlUYyrB0AXtPWClOYBvOwxT3Aswy5KxYRJQ\n+tgNJ023JQ6YCZt3GPeoEnRw+gtPF9g60L7AUq8/jBqvIWmlsihTVgZazgIzgHqbonTAebn+hUyU\nqL3FP1BapX2djQAqr9Da0rJnTePSDolTdEVJRE1ZNFRW7sa0oBza7hTMJG2qGWqcwMtTS6JJpwbU\n/tyB3iLZAFNxhq9YJSOlKVPoApcmjSp3qU1SV6lVK4FMdCwTpjkGlt3Cm16dQbnrnZjbvQs29gM8\noiaMHNn2Nr3B6ZmQjLSvMkqQPkpS3MPK/egB9ySpTuSTaS9BSitwCNw8ss03eGSU9wBaVsaTlMYp\nSgQ++wA1SVRA1Q1E19gvbIGY9rhSsGocJREZ5g62ogMxL5CvkaIlLn2KBqnIVQkoqLifnuQHmrzR\nS8upeWnJ+gOF+hRNr0JS3+UBuLlOQh+VcHE1KjVKJ0CQivE9AvTYiXUKXb0DlFJFLNnhFE0apcAc\n2HPMoyKtzAVDFWU1mgJNdhlR7BUrv5KafBKOvMtwimkdxUPuZrvQcADU0sY3Xyda12B6VinIDlVK\nGS9jXlmuNiSr9gKkr2M8zXLANqZdQJwrio3ojLkrX60CNVwUb1e4RYnK+4VOnUIouY5+WQBNUEMd\nqFFqQETrbsDoqdxjsG83QB+tSSFO6m9CUR1+wE6RQG9NzWUwelbgDSsCU3NRRwHQAaiQg1G4PYoy\n/gpwN73uPlU+4QeWnMUpXQadhS53AIVoBpdx62xgHFX7BWHvmQ63N1b/ABGfsVGW+8Fu3cc9CqBR\nTqDTQ1mopAZo4oSSmo4K+agUL83GP5KB9UwMtIM2NSD5dgJafYGo55F9Cl7AF24FVfwFjQA5dyGn\nVZBak02rWCKweXb1HFSxUDPllPexiO50c5CG6sowrcg5W5HSKg17gwykxj+RjGRX5IGYu+wZl3Nx\n5gelSBiHG5RF0KVNycRzAy0Q0bvTYoyEPP0BLmMKCqAew1aDNzSfMCX4yipdexqgB5ShFbpuNJAz\nGNi6SMOvqMYmoGewOxrp0BpgZoKiBajmDvCAuUGWqczT9QcsDOCxyGtASCMopqNHe2AibXKFXNJE\nklS40IKFEwV39x2BZ23Aq9xSe4yN52CiECSgXUsfAA+RNegxTmTTACiK7iuorkBmNyyLXrepUACh\nD8ElUAQw4HBRjAFAQaURWxUdiKzD7Go/gWi+Six0HtUooOPkgkSQwkiiKXbAjSUVjoSgcEVfA1it\ngwTh09YAHfmDmiyM8qhSQCJuWW7SMIkm4oBVzYo2Hy4GIkKkkaihkK2fUDXuTRJ05FgCq3XAOXUc\ncibe8MDMV6jG6JLC7l8gUR9xiJ9mFY6iq8gigsip5yWeQVOYn5GqdymnUiAh12KKi2p+xYoAU2li\nrL4Cgu4GWmPt0JClPIDKjJpL1di8v+O0yK/GBpP12JJ5LTMKleYt0pkA33L+JL7g52jYK1bmt0NO\nz3MqYjAprADCwSq7lNngudyCzGCSdeeQbadRVLehQxaf0BzMeozKbzt0Kd+4BDj7kk3XI0mMXgXG\nfQA6jCaqMoqvFMEGYKHHQeioi543AIb6BXFzSa/fqDVJCsOiZRt2NOMoKtc9ioFduS1NpOFOoYRJ\nb9gLTPlTdzSpmXuEb+g17kVNVKBiFE2HNQCkckT04HnuDbSAy1WXRGd8IW+YS7N/mwQGlatwUegq\nqKGmR0xPvJmOXU0r7EVRyCLUF59WUYj+AAdsIkqKRj2Ao3RQh9+pZrYAp3Oet15I6N1pfJy1pptY\nwUkO9uxYtNCTa7DCYRnPudNKbTuZOmlNIEDSmtTodElEenMzNen2GXcjpYBuzK3QlIE3uCj0uUej\nsah1ntIAk74KFEK6FuotUqBz8rS5ikkqrNhaL3m3UIrvYVX9CSJUr+4U3ZKJpTmE+l4JNtPbcI1M\ntheyoYpLvLGX6AacN7+xOFe4LVvA3fMKVFWUXi4QxVgBqbBEOYuas4TDkBl3cGkiWyKIAHe8yVuZ\nMaTuAVd6B7fsadZwzLcsIMSrhNL9Oo4gy/XFQKo1dJkEnP3CV5vLNb8yjbq/aQfuMwntglDXuQZn\ncy7fqa9+bCm9CoH5o+6LzTRbk1ktSUyECf8A1YsTVJKmO4SANP1qNVbJZHmvQCSW3cehQ8WJrZ1Y\nUPl3KHMGohFGFgCl0auSl/clPYssiqdrBPtgoewX5lGpJXgHn5HtQIU3YZm3ck1afQorcCiHTuD6\ndWaS3ZPea7AYapBl4hxubdWZa9AMRTPM0upJLNBhOryAOWySsnVE6WBtYuBPyzyKk8yfIyBfOWMy\nvgrpx7AEXmn9SmHS2SJvuBVzbBNUh+gXH5AlbkzXRAnKTd8DX7qABx1UFFSqnOeRTWcgTSij/EEN\nrqLcObbhDn3AzcnEX9TUcwhSlkok24v3QqUGbCm4Aze/oTVKWm5c/UmmvkDMuLdSF7+5RXmEZ7hO\n5prD/cJVcFErNFTsRKGuQAkxrFSzsUNV9AJWJt9AbICdpxglXFiWckqWvaoA6klyGkFG4A6YFQ5k\noj7Dbr6AKsgilLegg3F6ADVeZWLzS1aC73CKPQsdLhVOhTgC/JLEFyJrBQYhWLJrKjJm7UgKr3C5\nTSkk2rgDjuZ1I1tgmo+AOamSNwUVCMue4zFySKApRNwH5UpCNJVpsKc9TKdd1loXqoFPvsUg3Ngz\nAGluFEwq1UYAcqeoc8lNPkm5CKkBCQtooAy1Yzztsbd+TJpcp3Aw6FkWZ/JCBrY0k5gMmkoW4DH7\nl8TQqyNQoSoKTL8gkvUCFl8lCsAQyoNLMgFbY3BpxXuIYAq2SCg3G1V7AF2Fhik+pJP+ALmUdhvg\nmskBzuFcjy5B7yVSuXY1FA0qk3/Q1FSAuaQV+w/iAlA5e+Qo38G2iKKZpzGlKGdel6tKxG5rTQBg\n1GEZ5x2FrF9wJ+4OfuPyVLbAZSzkplwhuqFUKrqtiW3YHuUdkAsVpbUoEq3qzSpzwATeQ92Lq/ko\nwr7gCqMlWHAUit7gUuSjvP5UlHqNYAklaBumDX4xW5ALOzuQtVgs1AlUp2KNjNf4KG1SpYujL8kB\nn2DoO7joS5kDKaiLFWFCC1hmq+AJ35i/fciTrVhVLQpVpYM8txTcUwEKhVKZpsFn+hq9QqfK5mvQ\n1SFNNyx+oBDeaEtNLCqDWeWAKG2ty5P9CFRlADrO6K4VQYCtTnBBeyjYbKQHSp+47hPdsVKt6kRT\nWfQYJdKsm4e8BQrR9ycwLDIFRO3oVYLnNeXMzOV7lRagijysDNsbE5dOYBiRwElP4wpTXYXSsB+Q\nKtyIFXG7mwKIhDzkBr6GHMw0bxega13jAHPoDWdjTmZBqlLcgDsSmZK/UdNyhhqnwV3zHf3DMIgV\ndFX9ShoozADO7fIYrP8AEBXHuPYAhdVuWbVH75KGFwIpkzq0ziqNz6K4ZewHJppRkUv8o9TpCyua\nFUePQJhlaap6qLY1EOtScum+CUTz3ChX+C5IaSFL4yBU8xTWxU6k0EDq42qa0revPqFayMqKK1gp\na99w1alpU6nGDSxQNejTrUaq5UBJG2xQ06djUUUUwlsFkFFV0xgsxBf7nFCVKXXIIHj3RL3KMWZS\nv4AG06IopPoSS/YvxICSNLUrd0+hjEe5KZ6gdMflCbpJmjVFclWlwNYcF77kt9wV90FL+Mg3bcph\nUMpz+oQpw/xl5tgUTS2xP9+QC6gnf4ByCkDTh/qZvZc4Fp99hah1AIZaU7+rNNJWVAUU2AaQwcP9\nBeVgHGO4GZ2Jt4JqvMyk8XKidXuFGs1yMPoFQirARUqi/cCq7kkUeo8p9QpasySzjmaSxkopAVl8\n7kv4Jqtc5FIiLNLoP8WPf82C3YCTKLlDm09CtfFgoh3ihpJfdhXteDSvfqArTP6lnlyGJWxLZATW\n4TiBeqlPcy24uBU9DFY7mualcgiMSUGz2CeXRGvYGm3YINVP1CHZYGXi+zKta0AH+QZHf4LFUEHV\nVLA7LuDijAp5FtBUmlsFdgSrdE7fcsCq9wBR2NdewL5NKgBmqK1MjM07UBqv3Ayljcug2fQpVmBY\nK1hUTRl5fcDDgkoXzBprEQDn1KB1YWt6C9LSqW8gDuCysSP39yUTDwBmz5lZfA/YgjNJWAquiNL3\nJre4A2r+slMYqVnR/uHUoqvoSnJFTHoBKL7FiLIutSAp5WK7Jx0KG/sA+5L+CGlmBWW/MzSR3yHI\nCpMu4Q7j8svtgICjIulrZDbfIBYVXsWd+gWeyAXnmRfkFmwAEUJpzy3KGBRdP2KKUJzHwRQU/Ylv\ngnJYjmBR35h8CqMnYDLmJI0613M0j8kIqjK9gilB+wFOChbdSXL0GHCAbcyiVczLkpkBG1jJPmA/\nklOTNiT9QNr9g2SMpv1FMArLSLkTVC2hBBpvyNSrTJlUiFUeQDclYuRSFJJQ+ZVwPlrUBmm7KIFU\nvco50AIee5RUc77F8ZAAVRa5ClugoTh2FFHoSUJ88EFF+RQv1GIwWY5WAzNalVKEMF/AGYlVIX7k\nsSUSe9DU03RmoqmCBfI1iCwM1ptAVQrErfBdixHOhA2xSwTglelhVvuAjSz9QlzK9g80OuQNV6ms\nnNObmk5cNwwpaafyjMOVfc15r+4PDnsBjzNRhjzgfgEssBVhmefIIpzGEAP0GG7PBc4XQk8gNuQU\nj5J7FCnnkCVxVbkrivyCChRTcqURKcZwTgArv0Q0K1hsBlpdgx8C8hSQLZiFVIgE0jIwHlUzlZGL\nbXAaUqVCa2tzJKt+chUq13H9hSs7saK37AZWmbm9KgGhuuYFcaNUKqUpUKjoqEBWo9usF5b+5QkB\nNUfuGJGE79h629gC7pcWoUwUYiwanBVDkF17DyKoFdT3GWugbU5WHvYiKswN8+oRWz6CqPkFUuL3\nFuOa6hS5XUgPMqO/cJX6j8ADqrfYy+V9jbqEJ19Soy5sl3KLip3vlk806gTj12L7E7RuTnPaAKLv\nZDSYJRFCntuAzcfyDFI5o0tX8EC7XoUYdEU06A5/OYVlhFLGqQg61Az0saVWC+L0NJexRNqKhNKM\nVUPK+rINTStEVwmbjm8r8uBWwTcR+UJTW/KStgKSb/QL0VeY5qqgTp9iglEl26gUPDKHiiKHCdjU\nfyAR3CPUWtqhZ2qBS39wpAxm4RFQK/yMdgzQVswKt7CtvcUs7DWEAQ0TkfbYlEw7+4GXetCpDaGh\nNOJigGaTRwDSzao8kEuLhA3D5IJKW3Yu4DR5oWMOAXTuEp/lQGqU7lEO1GUtxzsVqRUC0xk1X0M6\nXFGzccofuFhfwUOFNyUWIDLZUafWpqGZheatwgTKvYQcq2LgWIw4qUTe2CjF5Jr1AbKvYXt3My0+\nlxxH5ACkKi89jP8AlgWBP32Jq0epV7BFIwFDdfczWsYsbaW04Br1CMtKk13QQjbh8zMRyKmGUnPy\nK2FqhWiAJKCV3hGodkPVVIosLi2+BonIOvX3APKt6EqC57ZQJLkARP3KK7jEx5S06Em3FdTl9eQA\n08dyic1Y/lNhjcDKVHvkVPKRS02n0F6abbgCneBadd2Eew55gDbqonYHd8xiVHpIPt+bAFU+lCeP\n1Lp6FROpQBMvZi6yv3CK9QihqZ/IC3PIrSyaUAZzYH5o+TWF+WCksIKdGrsnyKQqqAX4yoUMnR/J\nQ3+5JOQNL8ggUo67C8RYlED5ZCsqCi++BpP5cqXwBjU6bGYaXyb1xfGDHYsOZFkmddLnSmc/SYk6\nadMqPQSQmkDURPc05B87SRWWndGbP7m3GLGfLl49gCz+xNUqahg2UYdpKb0GPXJR9ugGcSSVNjUK\nwNW2CBulwemtGbjv1JdI3Aw05KDTVea9Scd8AYfPoUe5uK0XPmZgokjS006DpXqPTHIDPlccmH5D\nN3rIeW7QGYfR7BYYJcsgZjcoY1uWPkIIsDoaAAztHwE1fMaLmx+QMrr3H89CVvknTqAY5AxdLXVA\noBP2YUoazyBfAAugwqkpqTXYChWfYIpLGoZgosfBW6FboVFMADSuXYaOoVYRCmFg+4CxvYyIFUMj\n7oqgAI1F0S0zUCick/xDFic9EBmt6lJqKbR8mYnqAQ5mXGw4yWRgIiVegxmLEuYVKM2wjd1LqY5m\ntO8gMUHnnYqRPwXuuYUSWnBKwkBewqEZbcQiVANQRLl3GmQBXH5LEA3DAIJqDX5AAX5JmaczW2QY\nBnoKf8E6uiL5A0QV6iq0CtUWGSRJr0HqQCvzHoXwyiFf1AtTcSYUxQ1WZCJAk+6Ge3uZat1qOlKJ\nVslG9NbmoxgzpjPaTVskVlpxQUwmvwNAJN4K3Ucz6Mm/bIFe3cGoY55E6WvkCVvuSTbiJgarFCtU\ngrwqE6E/fdFHcCmj+SlxUmilgVPa5WsTp+hNgD53JRPIqTOBtVOmQKfzkUV+Bj0JbYAknO0FEyxr\nP6lAUSFmadYJU9QGYoXU0qutORJSAQoNKxKJhE04j8oAdDXXuGbSMOZ2wRQuhVrkmoX6C0r3AFWZ\n2IbdGKvC9WAK+xlp2RusKKGW4t+IowIVrsKCJDW0BH7GvsRQlH2J0a5k36g9vyQHHMlVdbB8lLWI\nZUa5i2op6mViv4x/O4FSvMoKkUoZeqasK07SvQuQIZ/yr+4ErzTuL3DFVUvNOOckROv5YL9BSdx5\n7BRbvnA77skvTmLpyfQAtezGacpB1Qp1j1AIv8lRKXRGoxn9DOrTpahoApf8gYTdLgsQqKiF7wBE\n5rtkHhmWAqcS9ipJJxXexbRvICuXqK5mW3s4NKH+ZAowUfuN1PsZ22ewDUpsoGn7BH5gKUKfqV2y\npIDPqDVmxxDKG64ChewVu0PUMQEXlpW4pNW7IZo5Bqf1AVtAu3Ip3sK3IC8MvlfArcGvQCbwrBqa\ngWwAzitzLa7mmoo1UzDVLLcqM25FXuWFL6MVtMyBYh1KJURQVNdypZrsAOclLrSmWSuW8K4Er9aG\nq+1ch5d8EBqnYUpfwZWUrM11d6oKr8tgaysbjSaXJ3qQZCJpg1yij9AhV/QoOtyhrI1XQnWuchBX\nfsXuFdpFV/YCh3TJKvJ7kvaxW5bAKaaa2wOLXBNJk5itGBJVj4J6U/ualdA5egVmXsyXTqLacwhj\n3BhiF/t7DC9aSMK+RUWAylDrkbES5+wFRr5K9OVZB3j0QyoluoRRkPLWIFt/mCyouAJORlRWw+ju\nFqu/MCf7SFG+XUmkipe2zAZxvfmPmnrlGKtMVzQDeZZTWcsPNNbErSrfcBx1K8TEE5iMe4fjAnCW\nxi5pyZrM2ApJquyGqXJXBFE125E1+4tsPdhA9lUE90NYBpbXALLqXuuYx2JJhGY3Zcx+Q5ZAuZJQ\n5XUldbCnvcK2p7yFa8g0xk1PKoFtjcoJKj2e4pAZaMeWTauTaf5kIwtDOipBmzcegpwAxWgNfmBb\nMt0fqAOJnGDPI1an7GY3AZM4gXFs0DmUTryKP5G/YPcAc/oUqypuJl/dAVHgk9rlE3LsESmeZpNZ\nsZa9CTbCmFYIU/jNOwJc7AWl9hqEfsM5eAij1CabfcXM+4Pb0ANUA1HwLCk/lygqnJZJO/3KcPIF\n8gpXPkTaj7BUIWg6lj9RUroBbg+lTVjM0hWChoqMYCN2BYCDQWugJOoMY2DuEXehRuMx2K4BAUiE\nLoZvuUIUpuUvuQREVS7ARQiKdwIYtPYpq12L5yA8y+CzQvxMBxRk3AdCwBVoDUsb1HkBijZKvQLd\nBmoDQaWBP3HoBJd8iiSzYUpsgHNCbXrYIpYvLMfcihvdhLF6TL0tFCnBT2JepQ+gRpN+hrpQwvkb\nw1UKZhkq9wfWXkLsDf3yDiaFYkiCSrW+VyBusmgcAZyaSpW24W+436sCjAhlmoopVgozyNdblD2K\nHF6kCluK0qIfUlX9BxW2ArOqE7hDaN+WKu2xmFK9wiisZyyUXGmb7glzlyBJ0+Br63ItosBOzjBp\nPGAiVyL3ClOv2NOIZhXsa5kBjlzLHPYYfRYABeSS9iySht+tAFT+ModP1FQMK/MAaoFO5WbSNViK\nAZgykv5N+2DOagD/ABC0p5gnfdCm0AqZGZr8l+SDaTncKUmuY9bhNOaFbe3MChstLc2GN/QGl0gB\n0zPU2vUwoFbp2IG0dyS9sAm6z8jMthTW9iiL3yToixcDUrNgi/wXKS03zzAW4BRYfs7lXcoHKp3M\nvNbZN13pt0MOW4IM6rdQmeWBfMaSUSj9mKqrFLvuW0XICcX2BuEa/KhCVrMDL29xqV709xTgqC3U\n0tpL3DkrBS1Ed6GWq/BpPcy+XeKkFyx8imHwUveNwh5MU2mZT/GSm6pvkDS5pE2G0lEL4KpVqDW+\n9gSpOUaSdlEsgIi+wrUUe1AorWwA4dAczJJR+qH5WQMw8U6FfmahzS/yUfsgrDp8+gw3W8k1THJF\nFPy4QMkp/YYcx6lfs7gVOcWLE2JU/RF1AkK2BP8AYe8LmFWJRZr7bFMVwXVga3SryFV7WCM4Ww6l\nYKzrWuF5XDm7FPd+hKOxVwET3KKWnYvyhKv3QFCpzFK4KtBTXdhWoreSl9AXK5pP0IMpvb1GF9xi\nXbuG0gDqv0MvU7DqdfsENFBV9d3yDUqQ0a2xtIOv6hHOsLYem9MDq07fjJpztuEMXnYJTcxEbjhV\n6hEuJ5gHmw8jhzexJc6wUOKgNZDalBe8VJdbBVp9hwEbFQDROM3yZq6Cr1AWn3yZoLT37FSVtyAI\nrkYVi5iuYGWuQL3NQwiJ22AIfca3ySiJyWOSAnP6Dd/IXvX7FIGs83YNUqSj0wMrABE4hBmhXNO9\nADmU1CHt1FMAblV9Sd0kPzsES69EBfpYIU17jKfTYpeLBEl677kn/l7zYsqhJSrAVJatJSqfcWtK\nt6MzRJUAbRSVgP8AH9idVdyye4A0ob29yTSJw+RPkBX/AENL8RlRAxlK9ALVlGW33F8zMenMBkHm\nP1LcvugCVbfBrFQrIKvIoWq7TYrdCxV9h3/QgymVI5jGStUoI9KhyQw45bE3tScBA1N8hFEmaptQ\nFmoBCjkS6fwKq4D8gC5mlbZhTsUz9gNql/cHCKaVVhSWAMpQFdhquTLFQBxm+Ao6Gmq/YHtXoBeW\n8X2CyrRk4TIIG+4c/YZwDgC2MtUlGo7Fya6FGdM57GopPZooSU26ko7ATWJMtZuaeX7BAFFJC1Io\nNFTJfwAY3QxZ/BR+nYGqEGlQEKoqAwCi7i1+5UqT9ygjb1Kf4ZN06g3vbIQv2gz5WhyTdfcDNJj0\nQKOppoGl2KByCtuahxyKiCDShZQtufUn+bhQnuX5BYRUkCe4UjYquhWAv5qH3Fg6qHcIvxkgVMiq\nyUXuRdP4KPUih8yirJ7lz3sVBqoWbVKrRPa4BkGL9grAQxH6ESKKbgRrqHlF25gUvqxnfuCrEDyA\nHGCQwoUdywBUgmDUqNyhqPkDLBRQqClIDG1zTBCgKKuR+CSsKIoVvsNyUwKVkApGNXTmacRbqZdW\nBmHV36khLHIqLkS1QUAFWdxmcE1QoV8gaSeMCA1IG9rA08ik3fuUBWWsWFKib/Ga7X+BSUUsTJge\nWtRh5Gr6MlprWoVR/Bryppgqd6G0rLIGUq27DCjkMRSTOp1oAOA5GoeOwY6BAoV8l9jVrWAAu5wK\nSckn/IpN4CrlWGS0sXH5uUW2IDJSOZXoHtuBS553kf8AHuwU2NLDVQClySyMVhj5f8ueQLS0nS5r\n5CF1GiAzFaMqxHqLizDkFTW2DLVKo0CYGeT9TSW4XBLIQzS/Moklf2FulLgKSSXqNP3MLZ0NqnIK\nZ9eZMkTdHsQSQ9oWQ/hioboBUmgpA2ryHmjIVsevqYmtrlLa6AaX5gaqDKoMtuY7gMwvkvN16A37\ngBqdlBnLWSncGgJqk0jYYWxKnYYrOAJe+RiMUK2r8uSs8PIA/wCDM3pbcXiehP2ywCj6YRXtBO9f\n0BqncqFuVOAxLsUrGxfkhU2VsROcDNZzYq5tYIKR+mxQ38Mknii3NNXgCyX5syS9JsV8fsFUJKSm\naXgpaoNvzcgklew0r7GZ/gV8AMKOTGP8YuFr3yWfgCpE4widZj2CZtWLMY39gFRjJYtcVMdS/GFE\nKK/kGWlPT5NtOKmWq9gCHfe4IYqKVb8mAVs/QnPdDFaXNKlWuoGIYpP7dxa2uthhy/yoGehR26mo\nUUJac5AqOaDEClRvIQ0qkA0SXsMwUXALyCWMjMzhMMRjBVT3KK4kLXyM4yBuW0rRZCtsHNcxTd4A\n3/tiZ5A8kpf7k6rk9wMN7k4HyyluFneQIHeVgXuZjN2EOU0Xow2G3cCdeQK9jUKHTogYA4qthdyJ\nQqgFY9qDvJdQ+OQDRMoWI5klbYv4AslXuNexP8ioUN7l1fUa9VuUW2CJesk9xc+hTFCKKPqUbOwS\nq1JW5FRNXnagetMj8oHHcChZ7FmpNwhzQAVbPpI42LMrcYgCdv0CUh7dCQEliQ223HHKCAKW9Sap\n+gxHPmDomvXYDN6wKVOewhXp+XAIeB6LkQgEzKbgrqWyhY7igiVDL/k20oMPTTeAMuWPpGCiItzK\ncADpcpdRlR8MNSS5gU9oZSv2CEFnMegQqt+/Ikv8ablzZK69iqnM/qMVrdhtzdjUbdCA+/sS9had\nM7g+QEuZbSTFqVkDNMdifvgWv8WEsoKxyJrnQ0rOQmO+wQZySyM+heX9wBrH4h8qtmC8qHtT0ANo\nRqGk6kqdrFObyAalFPVmYw9jpZcwaXcDPUmnHMWkoMvZAYx1Bz5HH+OzNWRJOQgU/uUV71JjvDuA\nfkg627obOJhlSAAkqVQ5DcCbsDh8x78ypQoGuUCtPcDSALUKPXnzHFAIEKqUM0r6knX9ADakmbdT\nQakgBpOqwDkY2sXuUZdFuXPAxWQje4Qx/IfGRuiiK3APLK5GdSbhpxubgr1AK3YTlKoujlg4RUFf\n2JCrIrgEE1X4GCahBWeodTUe5RnOyAzlSKRQh9wCGVlQmtihgHW2CiXboVYkppyKg92GRbNaUgMr\nTizMtM6Rcml0CM6VOOQwHQU56kEiuXO25OzAEtncuRRYmBNx0CdyYUKHzSvySQbEAxcoFKScgEml\n6bhDsNPUK1TuSWWC2wKdyBiMEiVZGQMzD6WBy9xaVSpkAiKktsFCnmUFFHoDya5ClhkAlFck1f5F\nrYUk8gZ0p5rubWkVPpU1FoZMqzHtkzNKUNvT6bglT7AF75NJb0JKIrBqrUBRH8lEoY7kl1kCncUt\n/clRtmkp6XAqwZabdfU2DiPxAZczbuQtGfdAWfgNr/Y00wjuQCFRDL4wK0y4AKxAxNjS00FJWm1Q\nM1w7ZCJco09LmgN0sARv+SasoMtW9hT98gNKMcqA3ewNgabVkqZKc7GVapNgE+o6dU80Y1v2DS3M\nYLgy6Jr9g63BNEvSCCrEl9hi7KVgCiWSRKJbsN636gXwU1Kt5qQFOw+bFwUElRwAsdMJ0KsSWJQU\nz6/YKGqOuVgHM/BFS3H3Ke8DR/oBJZRdyzHoZonRgalNyNW6ZCuHWBSvWGgJ322KFLQwm4VXJLdA\nES6knp6+5qKX7hyAWqTYsVsW3oF6egA3vkIpEC9SsZ1XrRAVuZVTLpGzJzFPcovgIVo7j7FVkRQ9\nypUuwpKagWP0Gs8sFd73lAgqsKq7hLpQluA0nnbkT04mxTv6ClHPcA8tvYYUfBLf0SJxdAUq0wUd\n+RS/LDBv0A1Fo/YoU0LcYpsFUq7FOXVgkvyxqvXcACFHIXqScWwwdFR0IohVlwFJjJNpBLKjUGlC\n/JMS2xnn+pFK5KuRrNaBLsrO4p+mAJ2WTSi3dyZT/Y1btMgUw/0BzIqxPcA6WyD7dShpTn7g6gUV\nr6BPqTXYL/Zoos0sTvVklVOSik4ArKLSaTo3IQPWyAVzpsVJ+4Ktxdl7ATat7GXecbl5iWQLUoVA\nQuKNB+RzCGFMYJJoo/cmvYKb3/lFFVAx3VyVfgDMImocmoiQaYGcfMlDuPJ4GszjoBfYIqxjf0K6\noBc8oEqi1uUfwBTNO1CU9IGIUqyoMUqr2AzSAdrGnpKJxYDDU6uZpLYbZlDpiVUgy4WqtHuY7HTV\ncy4tjkBn2FRsgn2GIUbFQ0VPQvcqKBSWUQCdhTWbE4kp7hRFPgc0oHOabjlb/cILW75LnZRBRF7k\n7zYAWR5LBL05op23KBUuVaslUYiwFTYEoNQ/Qo/YCMvn64NNaWzLl2qluBhpJWqU12fuLTMvcIG4\n3GcR0Btcyqq73KixtzRU7ZBPcYcdyCd93uVZvclnPIbdQKMsaYX6DIOgUUGPYtN+YtTazuBlLYaJ\nUyPyESt/1KCk89iht0Nd7hFCAjDuVIhUL7krgSWJ6mnYzGIjmLiZdwij2J3Kc+wJqCqYj9gWqMjf\nksllbAScqtJHZWn1C09AVKkRRFPUNSXpzNS9+5foBzZTgddKBgoK9tgUK4xXldFdhE0tgeNhXK/q\nOYSnqBj73HpsNHnoWXHcDMUCv6GqV9ghQBdL7EpncoxBKgGk06MFlZwSFc7gHTsSvJTVUKMQBXcO\n4NRb3Fr9iAw9MWJtJcjUem4RMFB8L4B9aDO5WsAKMWRUGPUG471AY/V8gcTW3KxNxCa6l1uwB8gW\n3qLqZXvgrk0B2pYfgJA0pijFJXZmKsZnqFThTFUEc4Gn7FHIAiORQGfk1a1gMwt6lSOe4u1bBMqt\ngDp6hXs7F2B8ioMbG0ZaS7kr0A0v2Jugv3MzIBSeQp+gEEKdbXLBVJ+4BFqShqERZDm1AM0B+4vc\noqAYJWp6DYM8gNWL2wTTsCAX7jdKoLp6lEKt2FNRmnwDf7BjmyBWoZpQyNgNSw+xJXFea19wKmBh\ndCW2SS3vhAMQupRgUtxmKRyChKeXLoaSl1KO3MX7EEojoKdVPYHAuH+wE88rhCQtsL0CpXrZGowZ\nlIvMp3m7A1CwK0+xjzKeXQ3pacx6AK0qajKj4KxNvHoBVVSu+ZBP7kA0slDYzN+3IKbgC22GBW/I\nmprPQAja5LTFbVG1fc1HQCmI9gyahVixnVDqFCug1XjPIelivABbnzK29hj+Aj3CCqq7iq9Q1O25\nL1QDDt6Mzqmb3NRNZoGpPsBiExoMTZxBFBinYVcu1QpddGBt9FXmCTzYoX6i1QgoSe40VDNKfI9A\nBKsIZXbkMSUR2qgJTFasJpU1F+dShIKrUwh0rcKqZwaScU7kE6JRf7FSZzIpQovJNUuwoV3zJUfQ\nknjpJOnpBRU3/QXfbBlr9jVunMCk1f8AczDmHnBpJr4IJK5VVsWGmV0KjsBRCW3MnSty1IkoYA+b\n6mdky16dOtRqsMbAZiaukbCzUPuDXPoBltRV9A9DXl/UUnn1AElLJWSwK0UntcrP2WwFDzcrXpzK\nYJuVXGQKXZ1kzKXLmMVpT9CdEBVv6ElVQSpjuS+MgMEp7Am7XFOiVpAp7IZrgneORR32eQCHMTQp\nVrF8olEgOYaqa5OplZVmOJCtf7YJUUAVIoRVF3NQc2dHzNPZv9zLf75Ay1BfyTTmt0SoVykrexqr\nxJJS5waSpaoUREOehPlVHRKtEUaSKxnc1OZp9ydvcE5RQz6k2ZbrKxkgKmO8BNIAfvgClAqyL3gM\n7ASxWxR7CHPCArvkT9kaaUTkLdGAde4vU8IkqxQn7oApgoczcOpS1S4ROrkU67BfkNQFc+40rIVJ\ncwpfIltgpqtngrOnoAzN89wXpzKY5sk3kCaU1Yv8QVdHcYAI3sVYuWbQ/sMV5bgFZrbcobrhVJir\nAXRVHlNgpkaMAflmL/IpP+Rx9ggCV8vkwhX2wMIUlsBjU/TYzCsa1aVHMHaFUDG83ySVTW+5OIrR\nbASFqauYCfQppVkDCu7lNYYdK8xUq0SAVuxdlFRlzIKwE0qbq5PZ+oQp5PJpW3AIxH4gxNzaTqie\n+wRmMbE3gpFqsNFB17hZe5S1QUpvT3AnEcvcHtjCNRLkNSgDk8TKQU7HRrGDDperCMzMBTNthbtu\nFX0yVEsI1py1bJXpAqU7AhJLPUYicjHdvI3d7EVmIzOfQuc0Fc7dBVeYBCvdcxh/wSa/RC1+wVmF\nvCJKlBfQqrtgIzDBu22R1uLGYc7TYCc4rhCt0ZqvsNexQq15dgmpWvTrkfmCAhb9xijJTf1kaJT7\ngFqdwlq3cdU1BR0KKsNDeKdCa9IpJUj2kAn0JvGRhRW4NNV9yDLc5LpkqlaSozfqy5jyLPSoRWSD\nmM1iKIooBn5H8gtptgnK68gBqncoNImudwMw30KlaDCX6Ak4Ad+lQVqjVgmgKj+yL8SJhUBfv1Mu\ns7op5WJfaQKedSvTbJmaQU8uzZQ55g/xbE/coCJtRsPLOzBR+xQFXaSeVlir8i6dwB7hPLqPT3CA\ngTqEQq+g3jmVO5RK9RiLkvxjH+JBYt1BKL2Lrcmo6lEgwMv2C4FP8BCLHuS6BA6hTJtoy1nAGZYx\nNCYSk6WKjWKAybcci6EFWmdgjcn7jWCgQrE+hXoSWcATVJCf2IIyBZJsY9yhAZu9hgYqDhYA1S8B\nWWLzIRuFVcC3Kn1L9wWX6EFtBL32FciXMqK9BVabFCwupRbDyFCVarkaCzdLDUgU19iSJL8Rqkql\neRBRsa+QlzzFbNcwou6upqNu4JPIzWAGIqgdbVJt9fzJJ1AaegQsl7h3/EBNuysjGYzuLWdwU3KF\nN8zWlmW4qPPDIOsqPyTPmu16GZpTYU1FqAa83qyb5WMp6asfuFKdeXIVMxYInkMq9u5BqkLYqRsZ\nT26DP8AaxWxaYil0EvDrkQJsvYqJXD8YAnTqX5Q0qfYopzCs2fWxRy7GoQPkwjOpVl9w5G2ruDNA\nJ/uTVFQY2J/AGCQv1LlcozVuBalSMDn5AknED9yzBJP9iKkooXwSzBRNKgVM7i9LfVlp0r0NKNwJ\nK5QX+KoPQiqE7+pNKInoXJdirDcAM7hCiENEvcsSBNVj3BRyHzVCLLbYCenamxKZp6DOV6lHvYBj\n1uSUXuVYTGqnkBSu5NzEblSLhnmgHl7E31MuZ6FPpsBXrzwKTdc7hzNLpS6ChKSdBo6fkk5inoBl\nN1g0k1XIRWn6CqBFLhbFi9ieF6FCwqsDNrBFJedzdQb3qtgCYW/QJxjIuYtEGW0m9wKU3PsPxkE0\n7WXqKpEgXSvyMLE9CWcdCr0AlfdZZpqEnkIaW5q7lP7gD0ua0WxJbUoWeVxSV2BRCX3BrlC3Fpqm\nCchVPoMTb1DFakr8iKW7maySmOWCplwBfAe48iSKjWlKi6m0q1M6VR7sm7rYitUU8ghRvkzNYFN4\nKFzsC5+gN1qU7AVGo+QdFzLZBd7LcBrkmk7YQ87oAGk1CEUcrWJvfsBJP9dioVZgo/ZkFdfYqIpp\nShJelgBvAfyLow6lFMMXV/lwctzglkIkoe65j1wBK/2A0q9yc7yH4jS00+CKFW9yhtj5dOWK5gZh\nDiBcTREsVoAw1j0KFEfBpWlElPeyAzDhlpxuaahS/UHIGXmLlDyh9ZL4KJeyNRiAU33NRkDMNLng\nuvoPJsqR8AEVWxUzmsj+QEwAaocSzDb7G9XOxh3p3AG3+yKK/BJ0V9imAB+pKZm5ZFKL+gFDrODU\nq0ZB0qSbggicsnWxWvMgWZuMPAL1ZpY5ZAZw7FS6/GSSWHSw1AGHltmTVJgFlfkBGIidh67mopNS\nVwAy/wA6Gr/lQ6qhRl22MNYOjozLlrlIJc1RdMBCobBLTMehXIjHWprSvcYlbdS+dkRSpmN6i1Up\niBpAVmLDGSmr90N6BGfLpbTjp1Hf5JqalzsBdKFCJxhA2BnVehjB0h7dTLSsqcgKKEm3R49SnEcw\nf7gLcqfcMyhpLm2w2UwBRuXX2GJXKwX7gDnFEUNVjmMPHwHz+oB+IuvUXf7lC6MAWrdXKIo7cha7\nvISvQIGttgyO0jOSjNW+W5bi+eAewAFhdq3KsYgIonrYvyhUm4PrUBmahKnaDPQHqKNtqvwD1d6m\nW3YJrsMDWenYqszKnlc0rAO5nd4sUqnPJLmAXcP1BubDz+QrMZCKnYaN0yUplVLkARS5eZ3ZRtfY\nrVClaUD/AHkpsVXdUArPkM7XJFfsANonahTksVVQCN+xJbE36jVhA1tXEDjcrsqQBTRJvmDUdBTf\n7E7TlgFmDUuPgVFJuDpgopKn6hOR+QKEDTrAqtGLXqBzfIoNVJ0xQIzFKegDBQ5+5UBEyyBJZSFO\nH9gmwgHQo9zSSj9SitaAZWRpSRiKb2kLN0AvcLv9RxANYAV1JfyESxikbkVUISo56gHQYc1KG17Q\nWa9QIlHYYtFBSs85APsKXIqNRlCrcwKmBouWYMPzedf9Jv8AERVRpjzXYF7monIFFKdxpF6ldcsk\n1gAlR8QVb5QO5crgNLzYk3YJgaxcDMepPYaV9AgCpFCzRDRYoVZqUUqbln73CzsKtH7ECr0NKxlO\nUza523ClJrFsFmVAOUuexWINNOIkqquAWqKGpl2Aml3Jr9yrSLGdXn1aY00YG6A3XmST6FRv4Cqo\nyiSSTnsQEmV3YauxWbqBmmQWn0Nx0JKaAYc3K9Eu5p6dv2qCm34wBrtBmI6G3W4eXdUCMxeLYNRg\n1Cnl8FE0VgoUT2JTgWlFGH5yAionao5+GHPACm0KnNi8qiLbhpq/gg15c7F8vI2o71K9q7oKLMaX\nQNuCnAFeqoxxGweZXX8E3/lS4ClOyZTvjYMS57jlNdwC17ilve5RDFSphgSVRrzKP2KncKYe1Qaa\nf2NdLk1uEc2mUZNvTXkHIKJUjZfcod+VS2kCr/BdA+ww4bpLAlM1GYRSXVeoRNP+djMbX3NtqbVB\n8u0AZ69Q7UNNZnoFFG2e4A0okFpX2NKtEy/KgZgoVlc2/XDCPUDMtP8AyHS3ZIfKn2JKmzYDKT3e\n5TSPVjeiKHm6AqZKo9+hUCoqb+pXamhR/BFEJMHuNyboBS0Yfmbop6mtmMJ0U8ypIq8dDSWPUkqS\nrClN+oVQlUL9sk5ahKwLewC1P6FzVyRT1kCrTcHeiGJrYvLS/UDKv1uaX70CJsOV7EE4iq7ld8ls\nTecEpSALRvsVPYt8yawml+oGZ5UCfcG9i0ul6FTLXWxbr0Zbt/sFvTBFMS59wa2mLwM0L2Vu4ByL\naRVIbqVMlBtshu6gklqgfK8dyB0qsfIpMFRcrM1AAtLlClEFXuicP9AGsfC5hy5DKY4Tz8AChRTl\nuajKoGlC6LqAS4XMypUpm5S+wKL+wGVE0Ba09T0+VpLJt0XwCvyAW6pOie4ymktsGYmd9uRAamOQ\nN3XsTj9TLfO4FMV9STWX2DTNsP0KHFv1AXEKDGrrUdvuEVi3PkUFKMa2mxJTfpQnYA9nbcU2EPYq\nuVuAr3KwT35jICo9chWLuDTdKerM5sQKnpBUWL4CbRawoBlu41bhWdQsS95AYlpchrfkFnzZfkAP\nwDSzbA0Bp57hB0IWqQi232KrDqo2CP0iTbSB9QOaF6Yt6iob2UjATDMeo/BR67DTIBFb0FK/wwj0\n2FtdPuBS36FfNNiivsTrtO4RekA1iKDSL8yURQAcmYjMs036IAqzHuDU0wL9/wBSisYCMOXTDFaV\nAtV+4fEgVIo5QxKjCB1UWNKZ9gBZ92VPU1yVrmWAR/PMHy7mmnPPYK59QCilwKWRhUko/gozCvtc\nH6GqPpgKfuQHQNUWGYe+xPZFRnmLunhlCzbYnSqAImnoC39TVM9wfsAO/wAmXb5GjUYQS8UCMtwu\ne4Oo88oHV/BUHUqwSKFElFhRclt3LluWfzIDKkfkzW4yiDTn0CJ5bArQacUyRWYdl0L43NNUD8qA\nUyU3LFAr6FFbMFZNwMqemSp3AK/Yp/YmngK12CGalR1VwuudeQ07AECnhorwmE1pYBTUSrop3ZJ4\nySqBXH/at+YR6cilYAIh1QRgXJJKuSjMwZlzVyTq/sCK5ScVOmnVNHmxj8YpqIyRWmljAXXuMyim\nr6AZrCe2CaqpEJAGshyeDTf4wKgzSk3GEuRQMdiCS5wLqoKn6BnnkBecSFn1Km/YgJ0D4Y0oXl5l\nVOv6kupC1ggM8hhxcoToMS6AZ5YNLr/BfOwK9QGKCkn33IafYir7ZLHyhoUV+QCXKGYY0hontTmA\nVT6DNPgp2CIxQBtQXLuFo9yn13AHR1sVFVqWVYm4wpAoonfkDSFLPsSdeQFFK3dwUdZJ77laxRU/\nUphQibdvYMEEl23FUiLFS+UVIizA1HyajP8ABjnk0uYU7lUsCnzICvYUmXUUn3AfzsKjFAqKai/Y\nKopLoSr0w4K9+5TeLATp0K7li/R7AlPuBNr9RVQxXBpNdiChXJp9SSwymy9gJTtQppBQmpJ7Mqjr\n6FmoxHYXEgZpvYY5pIOZT7gTVXDqCiKUNRWlia96ogFNw7Gl+QEhBJUXUtvuXLYB0w7j/t5QSWLD\nTriArP8AA0ruTnuWEBdq/oUolD5QPUCivV1RQ+xT67jKdfgArbBpJz+hh1oaol1pAC/uKQIfgDU2\nRTFlfclUZy6gZeCiDThmXTpyAHMszL6mooZp+XCmmSROJHmgKb+xJQ0W9O0ErdAGjfwVYBzT1JZu\nBOwNb5Kqta8FT90AKVXdEkaiUwi4ROF+5c4qITcKEo7kuY45k7LcClRRVQ/kAoi8RdCoaAob1VHF\nUGK2yOHtYipbNFicKxYuVcYwAV/Un7XHn8g05W0gDXLqOm2xJxLXqBRpuI/QVFZMq9+simwJ2QQb\nU/yV7dQMb17DG5QojIpMgpqibd88yx7wGNkBR3UlOnKqOW7qOxOtb7gEOP1yURVUCKSiX5IFX1FR\nLU0QSmq9htX+AC+QfM001cKRHuAP+SolIv2C1AFNyS6UwwbfZErJgPwS5E5KoEOm1L5KKyPWn3Ar\nug1jnsFbkvTYDUUp0GE7WRlWNabgUYFwp+Q/guW2AJf6nFkLbqglLtcy7cwNfe7YTUOWwOYp2A02\nwlquTMvIt0yuaAswrC24xMhLemPYk1basgXmp0uEVa/JNeVNw/YyrwsgKpZ2K3XITkoXcCzQnEbs\nYLT7WAF5rKv6hDdTcxHLBNU33QGYwrszZm3emWDh3gozFC6WKK26ocgSdXsShety90Ez6ANI+Bjf\nuwrf2JL0ZBrCGX0bCv7PkVqAMFWSTGnYCVOpZLv1KtZ3AIeSe6qhpf3Bqs/AQOLBDci4zgoUucFV\nncp3GKTbcKU5gVJVafYOnoPJFE9wiUVlVFg5/Zk36AUTnuUTnoVZavyJWmIAq3ZYJtQTq4b6MAaS\nsye02FqHKBbAENw/Vi2lG2xU7A3P5sBPpRE9rhMZoXNMIVeFgYSBpVLYBcOsSZafmn1GtJuU7XAk\n6bqCtQG1G24prsBRWhflRl7FONgMtbqiMt1pcdVbGbXoUOPsERXsi577FnoBQrOqB28vYVSvMOeW\nREszfmFaSaapYzmclA61Mu36Gm1FDDm9kEZbpyCqu5NNQvhg1KoVErwUhDuUfwAtQ+oRFfU0lWZk\nKFEr/ditvcIaVM1FKhAqOuxdPQpb6jVEUY+xmhp3DrbkANNKSqifoWLx1KKXuij9xinMsQuwGWUS\nzX23Dy05BBZ2LMjCUlkKK7hFhm81KrcIItvy5V+xRL96ClkAmnsKWQjs1kU61fQAifyTKX5ubeQZ\nRya/yL4NNOZRihUaW5V2r9i5WklL+4CrSTdYFU6BzvyIqvcJ9ci69cBn7hBmlB57BnJK33AYb6u5\nTuWEifdAX2LtIKa7SNVSQFxLQLbBOcClXnbcAgQXsh6YAkqiizG4qgFboX4wpi4pR9wqsVbq49Lm\nYzPMgvcVOeoOv6CrgaXOvMUnMe6D8Q07gVXGxNqRrM5MsBYVVWEt1bo7i2+oA6dDMuTWIYNZKjSY\nqtEzKdOQpq6IrStsFaxcLtLA1X6gVP0J82X3JIKmmUR9xioSrBBUqM1GQ5R1YD6dSmv2CcWbsaUW\nIFPKoVewL02NJKIvkKGPQp0/qihwt/sAqVe4pfoYx0yaVHGQNfjRJVmxVblqmehpPnVYCjy4v9yy\nVAt0INSpBRewJ0HTMy+n8FGletv0Kr5SUNqlhai80Cj5JPOATzglKzYIU7oqvFirXfBJemAopEIo\n2H4QxeSA5Km5aomlIsaiUZbfYIE5o0EKNuYqNqso37AFQU9ieKrlBJevMDSqmnfBe/MLNTYZd/YK\nlQkilJVmWUd/kBTe9wVepfGyGrrzAo9Sl4pBKzXdF/t/LgSXOuRVXQ58PR5JqnNuR1lK3cChWtF5\nNdjLi6qhTcxQDXS4mZr0pW5Yn3A1bsEVmeZMy210CrVRIPbmD1TiBmc7gCX5ca9imP0J1yEXLBNu\neRXQOLXClvYk6wU7ZD8QGocTYqqgJzjsVAG+bCnEQjKaqr8jU5Cir7chqRT32gCin2YSU0jINS5z\nYiF17XKcMoqTpbAU5lOmQarApyr4DsBVkqrHULyKYFR2VduZVoVGluU/ywCXFhrtApJrYGveyKBb\nmlWuVRGapwxVgNKL2FLFwlFq1JOLkDOdtgcSsv0Dz6p23M+etUMJlrKc8w63ZT6cibh0CmYVhmWY\nTrM+rKXLA05lknS4SmpQJv8AcBVaz0Gjl4CYsilRHtsBNz0uXRF5n2JX52AIlwWyiryK6k1VtVAK\n/mSihS+vM1Dwr1AK0JKY52NPS8K2SWnlMUAzVOfU1S6Jr+USTkBu5z9yapuFJGvfHUCrKxyGXFH6\nhRuSQCm5rsU0oXmBrKYCnCjMA23XJXt+xRKsANuYkG+dXksFOY9CgcxEwyV6k1RblSwF87inUFeH\nYn7kGlDfUFTqU3ihJqNwGIc35WBUq8lQaJcrgEW5k3+ovC+QiLgPTJcthilrg56YQDX9AadxTxaF\nDJYlygMcypiyqUVsUxUoue5O1e4TXlko3p1A1n4M9bolRTZbC1tZAUzYa0oFOj5EpdiDS9+gpuju\njNEpwKabqBpt9sApZUlRcrTF9gGLbhPpsDj9iTArVfoEq5NW5WMsqKYW9yd/eQdGM7ICW/oMszNa\nPkWUA9Kophg/YlOEBoMmfUW2luAu9bknlhMupK9QFR0CVjBOZJ0AlH6k7lS15BtREgZ4nEfDUxdi\nrJsfnYbtBA3+chX8Al/Aq27AJrXoMr83B0tYUnEP1AGoUvoSVYKKRBKG/uAp0oLdP1BTQpUUYA7/\nACZfpuaed8hDf3Axvsie+dhhYB16boqJTQat0Dk0UqLdQJr1Bzt0GFb1KnqCWXKdjLv9zWrTv+5m\nnYIy9g3Zq32BJFQRCo5mxNJDDhBenoAx+5B8bFdgNG6epaaW7kr7bIfKArAuYWEUR0LHL9CKzD/Q\nDeAjIGRUZ6lDwL0u7VQBtwowDy2agWpV+xRipV9Ra9TLv9gHFchdUEvsBnnkogc2BtgS2Jaknerw\nSrLr1KnmTarhhGo9NgSp0sUp39hSalMArgy78mdKRyM6tM/oFYicyUYjkVVPtBTQqBJRX1G84LM/\nkF1wBKISLFS55Jv3IBqE6hjqa+LsLlBexIa9wp+oRX6El6jFZ2BOOQFC37koVhKKywCkUGFHPcod\nC3QFCjmTvuUwEgbVptBLkTQoKFLuLdJFJR8DS5BmO5Y3Wwk13pABEdrFuNM3y+RRkBSWAVx9kTXq\n9gGbuzMv2NYqDj1qAQ55bl9tydkwd3zApmoRSncVD7CUZqKROOxR6AVoFhHqO2IIGc4FRgzOPQpY\nGvzuD2Vhq1K9Mi1cASSyXPa4pBHfmBQ5eBSRNVnBR+xFOnlVj0wCW3qhSAueSfOopQ0sFNW0BJLo\nHIaq6HbcCWTSfQz0FWtagVpbN0oMLsCvCRpYtBANKPsZs7mlZ7XLyqKdihlKgTOQl9ydpsAK1Oci\nupKbTe5pJegGf1NRewRklLhZAkprAr1K36l0RFULlzBL25jVAsz6AXN3QroEw1ORXwBhqHDJYNws\nAldZsARNHQrfEmlpX7InpSVgMdTTlunrgKV3LCqANbFplV1do2NxYozM7ADuLdXyuhaXV8ySAFCR\nOkR3GElyJ6VNAJT2J7l5VJNdmAPVT5FalINSuRWo6gbTkxqc6mna08hTMalNV2/YEpwqlpb8z2dA\nkdOmKu4QzHcV+QSU9SiKx2CqOcwNHQCW2ApXMumSp/JL82AvkeWwJ7XFPVt3Ao9BrmwK8jMSFVqK\nqB1fyMhbqRE979Cf52GIzUId7YAn+SD2wT9+YN+oDz9S+4KbfkkUao5gvsCm5KwVrsS5KxXr8lFZ\nsBJPF+ZPCJXrYoj7gTXqEcqfc1dbk1JAN02MJtS/c1q0/wCLUWOTcc0ipLTez7A26fN6BCuu5P4D\nk6W5jc3MOTGmHqTyjS/JDqFjZkpmFYntD7FeMAS59ZLmTieWCpMgM1B/yVBSX7BR/lXZjyNLSTWx\nBmGL0OHFjXleBi1QM+Vfc0lF7blHoNZvcAS5i58vX1JykTly8pQAVt7k1SORqhmKcmBV9LdA+xNx\na32Buqi6pIF3uXnfQG8+xlL1KN+ZwU7GfyTTo+QCnTqTcqewSDgDTc3rkFPcNOvTqUp2nsNNgBxJ\nYjJO1vQqZAkmo9g2GWge0hE3NL7DTsDdFuXPIU7DMfoZXMYTXwQa5zR3JUX3BKse5pRXoAU7k6q9\nCSTdMlDmilRYBmeS3KJVbciiV7E47AZdLBzbHVV7vEglXnaAKc7B0Vxi8dyboUTXcrOrKirkYV2A\nXjYYWFIVSJ6nggqWGZCfYee++4DWbhOX6BmliU2zZAKc9MmnL7grxdinKrVe9AB6WzO2+5twmwdg\njDchNbj6k680UEKNtxp13CKNegtVU3AzEyNntNpFzG8wFe0BAqOt9xlXBwpyU15ASmRp+4OqSdCx\nWqClVeyKdt5KnUFeleQE9yVXT0J73eRSbVfUCm6iFzLkIRS3YCv8Fl7YLPQun4givV+pQ4LG9B+U\nBlVL/chb2sFZ5bAXUnR3uPcmm1sASFnONxLE4yBml5sDXdle1in5sAKXQpjqThMSoKzG5Q7fIqd/\nUIhJe4A6uNjMP0NA6qX6BGYmPgHd73NteoNWdnmQMS/uHI21fYGimGat27jEy2iSccuQq3WoRLcZ\nqSUKPQY9iKq7dRmlLhG9x+AFNV9gelWQQvQ0m2qXQF5fxlbESPQmsAZfSpOki5VZMgD01U+wWiRb\nh7A5yUTcfqZr3FxAMCmaTXYH0G7GKKQMqimSigtLBJLHfYIlpVrGrArvkzUSqhRP5zB2pvIwPX8Y\nHLUoosGVGTpqRluXJUHLJWoFMURVmvcBfuE9lFiKmAJbE2um5V3KmQKq74KIzAtS+QP3AqfuUk5s\ngcx0CFRkq02C1R5AQYpbA0mmChIAj0LtTJOn2LqB1+CS5fwCvU1n2Iqh15FKZaVXKKs1oAIJdtxa\nX6oJzgBpj2JLe5PDyHmioGp7e470gzM1Fx3AYlewKUadVWkA0shWYVCiXGw0T5EggiKXyGI9BXLp\ncPuBLkWAwJQ17BI3ShSCAYGElX0JTYczmxBL8Y0/UFE/cVX9AGzJP1DngQqqWXuSNadNqEElia4Z\nZ5bmnF84Bp02uFENzu7FQ35fQml+wGYT6cxSyhiaFIGc25QI4i2+ATYGtLUFVP8AUkqEnaLECm45\nkEqm5fzyKJutMh5t80KaQFmAzWpqZ6GTSX5gBhdx8v8AIRKe46VTltJFFeyqXU1Daq+ZQsAZdF0s\nVYqo6jCKa0tsANUjO5KcE9+9AVPugJ1v6Anaewq2wN+vMBmXIy4avipjTqjMLkbn/EAuUcgrHU1p\n3fYBSFt/qSkXFsWgAiZbzYQrA2wBQUeoNruXmbsBP7g/bYFVtVCeYFLrCJutSvfqHNgN+2S2KOVN\nsVJdfUBV1RJ3J1sVaFWN2AqvIncrWKkQFDmN19xiLk+VwXWdwGswl2DA1fVFKUgU157k1Yt1QpUz\ngKb2di6CkSlYjoBKl1ew8xcWjmVJkgHL7WC3JGnhr1M2u6zXIBj7GHS3aRevTLSuU7FRRCLldkVV\n2AVW5rqZmKegqLcgqpWfQlzfVhkk+4GqQouCn8sK5kA1SogTeMFMrdkvTBA435HLVpi9jo9VIXqS\nqmEly+4bVqbhOwLSl9yphJQ1qyahDTkjPzuFRUbG4fIFM2LGxR/JqlM0ChKaegxSYFKFQph1xggV\npX3GEreoJrvzuU+/qAqhN39oZTfdYKttwGGl1UslEPcK12G4FTapRSnqVbjGZnoARm/MzLj7GtU4\nsZnABTJNOITncmnNOhmlAKXmnMuo8mgo2VE1SmCm2xFanqAy9gn9yiahEgUJKFTca13KWVJ3eQKd\n3RF2KscyuBSTJP8AgpvAVcrInjbJT7+ocsbgM1FV5TUHajoKrEgPVDpKHQomEQMNw5qNlALr6E3i\nQGKc2DvT0JP85k2oiQM6ox6Bgnqq+eSfyBJehOaZ5FFKl12KJlXuSVJICq+ge0juvUpwBmzjI0zS\nBdbWwTqRCkrEpmfcLpzcc8wpV/kpboi2xyEAc4DVEX5s2YarfoBmmMl+UFpLryB/jKgS2GtxVyq3\ngAfvsVY5IlXIPpfIAqXrFybtW5V7k+dwiUzDuS80SSmw1hQwJvYoh0KGqln7hU/bBfkFdDGfYCr1\nRNfsST+7LC+VyAGlNF0Kt/Yruph6mnSzCN3+WKuvk5efVn0Nadabh0+AZanngH8bC3TluGXCqBDM\nKQnGORJNxS1QFpv8uDXLoaTUcwpfmBjUEVZqGoJ2W5Rl7x3B533NRDezsZ5PsEKmk4D4H2JKoGaj\nDZpacj5U7AYzUmlBvyclQvI1TAHPytXzuYczWh6GlEY+5z1L86AY/ko/kuSROQiTXYVjlgndkm3e\nQJWRc42KIcF79QqUPl1GqS/KBCbQhComN/UK1GqV+qCKxHWAKr6Axa9SpXMbAc3YIdadDTSVr5Zl\nxboUTqg3FO6d1kk+4EqUmmBTDNLwaggIX7lZUqhV/wAyUbVKMqrpZj+MYaKtmAKLsm0N+mNwcbAD\nW+cmNS5G+wOHawRh7EllC9NeYUtvdlBWSjApbehRAA2WK9JZUvgqpfoAql6E6PkUXKNiAcUKktle\nORRt6FRWp8BGX6lMXUi62p0Ati69Cf7FWwF7MP5KPbYFpXn88uQOyVZVWP8AtkMXuM6bkVqKdCaU\n8y81bU3Ca1AGo/YFpneHRDQmBmd63JzT3L+Rp6gVO8knWd7jBTHcBXWSBU7GkFEW5DyV+QR2Hrgg\ny1WvuZaybdb32Mv85lQWZVsxh/oFQJx+w1zYMUmgr7lEOKEqtwWbVIGZa9DVY5bma2YqipawFGEO\nn2kafuScqhFKiDelrHU5xKhmtP8AioVUrAOLZJOCq3MVKM5YVp87BXFip+pltz0A0m5SYRF6Gfxb\njp1YdQZajb8Qw8dkXK/ME11T9SBdpgMbfYHqqo2wMtuXYC/EU1lDfnNzLy0A1iLBD39CnaoqeYVR\nm/ybrCzARSW1zFTPMBv+gObyXZcxaowDU8EnsZs1icFXHoBuUjLrar3QS4Tmotw4eQinYZlxuEl6\nBQ93VlCaif1LEZyxSV9gBJGrqCibW3JVqBXdjXz9zMLYaANsVwh5ZLMZJesWArbmW5mfY24X2MRW\nl9gD2Ca/lhe1lYLzkBioZm7YuZuDlAV6WJ2kHO9x5oApM/A1a2QWdu5pXfKwBM2Hk8E5noyonzwB\nqZcFFazsGCbUe8hUSpW+xU77E3C/MAVSugp6jNN5AoKKSKrcaNBUkaXP3DSqORd+ZESJtdNynFmL\nr1eArHmp9zL6GtWDLUOO0AC06U20oZZrYUp/Qqd0VB1joVGrldjF2BYpSbFFMjb7A0FTjNyGPUqO\n1AKkC/UlC7FeOpBNMrJJ2uSpj1KK9qAXlqS0sVvNcjXsBlxM42CaulfgZ5VMy5sgK3OLFNVShRbA\nRDKibadMk/YlO8FFXyCpO0WQ26bhSeRqUA6bcyhd0XO7VzUvDIBrd0wLzPZBvzqKt0+QJNdZJy6N\nkl3HrvYChKnuUVi/IYUy6RkEmlQg0nEgvxEt8FLS3iklGWzNJpU3q2MOjqrgWHFwF/nczSagTdOZ\nV6lT9Sm03wVA2/3uUqhN+gJapnARquFPUotBUmsliQozzyKTV+xR67k1tbYCW5MplB0uAuC+SrvY\nY/cASoVswaSWQas5AIfYlyqxjnQPmQrcwpwWKsIukWOhBPHPcG/UYsUAVWvkKz+hRaK1Fy1sAcyX\nWxfiYqE0mgCF+4yy/GXMAc9i9lknSuYKWUWKNdSlyWGwz7gMr1D8guVmMUqsgKq5vA9bvJjMs0oh\nbEBp1S3pyjTtQk8XgsTXpgC6+guKfYFLe7KXSvVAGpvEQjMG2zEuu3IInW9rsPcn+5FD87BFCmhA\nHYVPYPkUEH8jCmI7hVXRpLsBJUsEZmg8tiiWmFSb2Bz+pQodS/IAVLkm4FL82DYDnr1QubMJ05s3\nxVScZObVSuZKl71JRFOVwbmHsN2EddLWrTM8jSSmfUzo/wBPV3NpJ2I6DS2sTSUcxe67h17QAdCc\nS4JLGSaq8oA7TzDlgc2gKeuQJTeLE4fJKzJT3FS677gZWnsngfL+cyepK1xWrb3AYVPgoKfZUZNv\nHqBRHQpmPQp5VZl1UhC2uxzerE0Fvcw3tQoujgk7wOKglTmmETigrTzrglPZmlSiuFDWL8yhq5Pm\nW6/IAlWSTq5sXX1K35gCq6epc0it9yVvf0CCUpXoZbqadn7mM8wJxFPUP5FuIyDQGciqVdycwFVk\no3CvuUU+5lP3NTTnsBVrkUUv1K+SCdqgq8xzAZKBx+bimrWB8qIpcgTVpsDqvY06fcHdvIGH0sDX\nzQ0+hlhFtUPylhzswYE0lcvfmSmRW9UAQ3mxfAyn0KKFGaQmIrEr0F+wHNjFL2NNT6ils6AZuUXp\nazNVRdOpBhr02B5wba9fsZ9yo6q7KUySrJR7kUZ5E8Q6k6ugOj5gMuLFNfsWYgFsA7blSZkmmq5e\nRmtQKlPyQhqPga9ihOoUpJp+8lNiSGUwKbMqx8l77EQTgIoOS6oDLjOcFD6rY0wS6wVBEyrilgog\ne8AEMYjqPz9yiQoib3wURaObNeVXVrFDonQgNKNJTb0LTpc7G4UzPQDMOkl8jnkS5hQpvvkXP2L8\noTANUxt+hnpfBp2gy6OHQJImFUp3LCFaZaKNzQp7vCDZT+5cvUiknNVPYOeB3RAr2BqL0kbUjoEv\n1KGa0uSCMWk0vYK0lko2tZirUxFCovyKkGUm6tmm/R7FCV8mW3MAFJjJUu7gpr6CnWYuEWZCzkm6\nxTqUwrgNP0NLTX7syqZ5mk3GzCq9Mkl2KXQqp+6QFSUmMdpBQqpE6K4Eox2NJbRWhlJKGbSoBUQ+\nlNwx1GK09UBVt3BzH2HMlTtgDD3qHzuURVXLnAA9SzbBUdMT3CcTCCWBr5YT7E3glugKsc4GfcJV\nuQpJsCp0wMUqVG9/sNcACatNGTTwN9PyMLpAVlyql1F+0ElQCWfVDRXKCrgKo2FbArjWK32A0oWK\nkpaXqF/sNF+hEUf5Koaqu8M1ZoG+87hQ4hqO5mHY2q3pkzFOmQMxV7FlxCGmcXQNp/YqLnMlyJWy\nUwmsBVkXP7g+dC5gNPypLculIyMY+CCYuOslsr7hHpdgWb2Lk7Ow367fqTm0VAp9yVKPGxL0F8vY\nDDowxVnTUnFfQxZqACvcqPrNApn0HnbYoleMk7YCYe4zUCiBrIQ5fwaVpIHSp6ClGKAs+5pxNO8g\nTUVfYvyvMHO/6iqvmBKn2e5TH7hPq9ipMAMxS7Gar4MLlEigNJSWrEYuiWqvyTb7OzAG/TYxqnc3\nNZmxnaQCNQU9Lmm1aLGbFBStOaJKBr3asHTuET5BS2NxdyhZzYCko/kopkagE/YvkfhFE29wBTWS\nhMYjrnJKJ3kAjcY9OQ3puUNqnUAbpR0LSUR1sUvpzCpVxYVPo77Ako6DFFQgYX6sKL9igZpTuBKY\npfYM2NS19wan8uBU2UA6NwXsTnfIEUKsepWeZuLUgDXowcwa6PsDUAZf5I4Zcim1asompZU7hR0F\nX6gV6FZSTldcVJtQBRfkWaX5jbqHlwiB5IZ2ySfsT5VAKd8E3E/JKIKLAFXUKZpORitbTSA1JpsI\nJcVwWBfLKCqmSiwVblCSeXBNT+WAoKKUpJJSrDpTus4AkmSUI1P8iuoGEUPaOZtpZU8wr9gMxWJR\nJcqC1Nrhmn6gStRBNFN8mr9UZcKdgKE1XuctWjUrVW51u7i280W4SYcFMeXOTWjQ060R18qTKHNK\nBMJSqeyHEwUJORiuwUXqCbY1uW+4Ak/0KK1/IH2IDLiuxlpYxY0q1dXgLX9gCMYkXQFTrkmq7MCS\no7QSTilBhbzDqCw/UBnrQPcnFd9gs63AZ/yCqtkqP8gnUIy6qtHdlFK+rGM+oOisUCi7GFELsUep\nTWfTcCivTc0ssyrTuP5UCalT3DnYX1pkQM9XzJQ6DlBK6bATvzK1MF0JxWAg6WM+m5q6tTcy5rUD\nLfvYHBUq2VShxy3CaF7FCb5AWJKYbKkbyST6sDWmlXmyGGwiFcqkGugUt8lNY3sSkC8qS5BBthBR\nl0VgeJubpUw03QAj2MxRxc0+lrbkokDMT0WAj3w8G4QNKz6hGV7C6UVBjaqC1rBQ+SFLbJbLG/Ue\neAgbptzRXcZJp1KIuBRtkVbkFVQYrvvIFGAtUW/cy6/YAboF6b5F2lWB0KOqadtsFN9iV3uS9SAv\nb9Ct2FKVL6jE6dtgMpOS2hVNJfiMpOb0Aq5FWnJeWkO6Lp3AYmxrkCcjkihJPm+Ywogl7i77gZpB\nbGvLHwZjAF8cy7lG+CXP1AqXY19Aiti6AVRfqCeUMFCtLt8ilHQdOl3NQsEGYpvJQMFtgCQ5j8gF\nH6mulYCidqIE46I1HdGcctwGNnUJT/LF0qilu3qA3fwGpKOqKZ/gkBnyaf1NJJVViVVy2K/UC6Ax\nrXmHQBbVyzV8mEvK6ZECn3LtQaFN+QFFOWB0/YNpXua05QGqE7FJOl7WIo06fKnVw9zLv8oW3VOy\n7gr17AUVn3KE+aJ3kkwBr1KlvYlWm47zn7BEnnLFO1e4fkDEqlZCtc0ZShxFeY2uDy8e4Cq/Ynzp\n0JK7LFb7gSlmtIKrcmoWfQBVIm5SD2TICs6UJzhSTsngMdcgXaj3Kn6yCboDrKAtT0zT0M1fS8mX\nOR55yBJ1llDrsF3cU682AqsNVeTSVYDSpZtJKmdwDTprYmq07GrVxdko77BQ77AJN+1wDYkqXJVd\nPyA1PUl/jV8wNaXQpQaG3pUqJKlPQKZjqS1UdLl+LsEO4SW1qbcZKax8AvY1n5IQ0rcjLm2NhVr9\nQpjsFEdl7i0onsV3Qms3wBh59Ahm3piPcy79QDy0ne7FcrlDCVQoXKDkSq2S/gBURX1HojKtQ0vx\nEDzXoPl5UMqZpgU4Vr2AbqnQG96u0mk7TTYo9KSAXr0qNYme5KIiJ+xOO3IAtmTJqFNcmWs4QBmf\nUHs3PNDdE2oW4A3zryJbvYJpT0JsoaV9thlzzRmaGkp6og0oUv1NfcF7QPywJqH9smeprVmDKn9w\nFTE+6JRcol9EWqfL/hXVidwJLbqMZViuvsTcqJAX0CB2KKT6AHVUM5F0qpRPmBh1Bxk1lRkH1oBc\n+0E6OWU/uWYKg/ILbccE0rsCrPRkqsluKs284ALUyNY9pJqk7F/kq5CiivfmKrYoXoV62A0oKtdt\ngSpUrOxAaoq13M74NPqXlooYAl63oKvE1+RVLX2ZRePQCirKvVElUcv1AFenvgbvebBjYV82gCnm\nCUrA0tnBl3AZhWpQk3lXCbz6GZp0A22u1jL2fqEoVYCrApenwSSpTqMAZik22gvc2/0Dy5iuwBpT\n6E1soNQpSvzKCjKp9hiuy3JqbXyhIMhErlk016mXeI5AUO7fMpm9+Zl4boUBG4pMw7BqV/YM7xYp\n9MgS9w7DRdSfMosVLoM5gI/gCXIZkkn67D+NAS98jp53LARnAD7lFaWJfiCafYC1JxUy1Koqs02F\nIQBLXcIljGS+wFTDoMK8SggUtgL8jIuf4K9M7jioRKkwuwO9b88jRfvUOuQKn6gmiikFAFDKK8yn\nDfYpUgZ1UB2l2F3qqIxSX8gUSvuKlr4LH2JLHuBOZXWxTHSyJ07lfewFZIn7io7A16AHX3GSnclW\nUANqVsDGNrLAVnqEVXS73MzG5qkfAdUiilZLrX5KqVCatNANN7lb5CJt7k+fQAdPQyos16D97gul\nAh5hKTJ1pMMq3mQpmkmHlmo/fYy4a72CBqhULVuCxNShUg+o/YovlAFbir9LBArYDVIBXLSaIKCV\n6jFQdFcBpYIyDa2B6oA1C6GPmBn9yn3KCP2oVaeyGy2XqDnuBRPYMch9+YfAE1F6sCd36EEDtz9i\nxItKaFV1VgKdyimZRfOBivS4B+di1UhSLpbJlpfqgJfATuoROjJ1X3AH6FydCknYqNivLPwTTpHc\noi/uRW+jCFi1hhtfmAXwFMZ9gaFvegOwA1Xkx8sElsaAE3P2FYtBVRTCqp2IF0KXfMUCtmNJvGyA\nJu5ug6UH3CaWmdwJU7lv9hifsDXuBOq6Ap7DyySAulpob0xTDM6Vs+pqId6sDU++SdKTUq0ebj0y\nAcwfM1CsWI/cAmOmR2VjKmiRqVdP0CqKZM3YzlV5BSQKldy6l2pIbVoQS9+ZViLi1NfUHt6lCr0Y\nOI9SUPk+ZAWJ3sVnNFyJQMOKAVZ6YJIrVwU4gBjcsVyS3FPe+aAPlSr2JOHWwQxurkUpxWTL1TL2\nEzDnrQBTLS6c9gfK41URYCfO25Y/Ut8dQq21FchDNKO5TFXYuZP7BVmuRST/ACoSlb1Ka0VsAafS\nETVK4HFq7AuoFDmlNiqnH5BTTmV5gBV6YuNIqZTl1n1FS6sBcWz9ylzboF4GXCYFWsX2DHuily8b\nmc8gFNTsDt1oSa96czLrJUZrKxzJvP5zGlH6g84gCuv1FKoJVqdFS3cilUWTaagwpuaVgpSjmVqq\n3MYXfJRKiwGX8AneotArgOZKHPyiWxRNgDv3KtJ7o1Cz7k5iQoWwuF0Ct6dBiVNsgVU/zA2vXJcj\nK5EG9JZkDXWvMAVblL7k5gnRfcAuDTTlXZoy78gBz1kISNfYLOGUWArbbIzKJKgB9zXtyJJU/JNZ\npkgz8ip3rFihYjqW3KoGopapWdHXBbZ5jiAJ167IPxDKUYi5mZfyBOQ/0p7Ow1iLIy6vkBOxlxE3\nNdeoUrHfYDNevUqNvGxcizTJUkpJoU4f6hjnyLm9iDSeUbWpR1Ocq7mtTSuFNG5ySd/cU1j1DvQC\nW48/QE1MBKdANZ+CSU3lhPdYGke8gNnSf2J1mewYKvoBQpqZuoiRnsUuOQGX5qwzOIOjtZyZmaoA\nrORiz/IMvcpU0KjThWYOZhknuOnTKqBY2QrS6b3gM78zomkr9wrPt8BSaWNxluhmubADhRuSvESU\nV+xpTFPcAUE25/LE6W9ynYAc79hWwaXz9DVJUepAQKTiMyTi+Qban5ALciy4difNdxSouSAFzpAp\n5+Aaisz8gm//AHAM12eIMzkn7KhOJ5AEpST3wEq/sD1MrnJpNO4ozptJq65hWlaadOQ6dsSGm/vc\n3iZIo5RcJbcbGpT7E0qAZo+ewpVjYoaLbqBXYKJJuvLkGdiimoPlgt8BLj7kE7TsSmY3KlsFK/Yq\nKIfQnC72exc+xR68wKYySregZ3KkgaD7hUa3jsApxYb/AJYzkk4uFa6inDMrZXsPQIW916mXV8ti\nnaxaoan2ANxlT7IzSStnoBpy5yCv1Cj6DIFEfcU1LalB3BNAbK9DCb7DIRtuzXRGXM8ye/5Ukk39\ngGay3KLzRf3B6f5JgD1zgm/VmYir9yAnqlfJma2oLnLwCjadgKksa9UVfXBfMgGKDWrrehJ5nqSa\nSVaASjepJ3+R3/GDX6MAiVW03F3+xJt/IxkAU13fsETfua6ULVAGHFsFCgtTck47YKjNJaV2PYs1\nvcnz9gHBNKLdydXzKN6sAxIYkXWnPAN7WAoUIH+dBcBfFwi6GWrGocbdipTmFZa/glHcWv2LHMIH\n+dSG7tzCk3lAVOkBKr6DzKEUGTS2yDmgVINthMTSoFH6lED9hjfAAFWnncVM0BqssudgN42CH/IL\nVuaVqAZfLuDnsLZlv0CCf4LfPMmqwiiALTMV2hGrv7hp/kfjmA8l/ITINpdZFfkADj0wHMb3CVRA\nV6N3uHP0KgN7WAm8PADDq3SSTWLFHbbZlC/cZcV9ESTmO5BVLc1EILp7BQULvk1NCiEAQS6chZWn\nBBP5JXB/wUwgGtIYNzgHBTKU3AutijN2MUfwEgWImiqUsi33AK2gVR8i55Kj+8sDa3F3qZ0jEVA0\n/b4Iy2om+8inZbAarNa7SCsWHUJhU7AXmaeyyLexl1VwceW4VquxezMRqerzTSLGk31AeuScpXJ/\nJXfwAR2eCYxHVBEIC6DHIqetySd2BOvNYZVigexTWjjYIZ2oRKPzJKHZBSnX4GQSosbo1VSiKofV\n5GRtVeoSgKrUfJQvM8lS14KUlPuBm1Uskti1NZsxiXzAIr1Cs9TaSdNvUIkDPs1+QLTUSSKPYAzu\nMNOlQ+B61AVq7JlMKgrSnW8QEJJx6AZwoNTgaKrCM+oCni5Ub2LTRdBo1eN6AUUnFzVKtZoY5QKf\nrIA/Vg04n0NPbcy089gMuNqA22PwUboIzNK35FEVRqE79C8u1igUeX5RtV5SZiseuxpUgirb8uaT\nqFJ9iU+gGthVgqKdAqYKy+DVd0EKKAEYK4pQ47dAftgKI6Fzdx+UgwwNJV5bk3b8RLmDo/y5EapJ\nly4yuZcsC7xgKLdzU0Mt0foSbmc7sDaqFn+vMzPaRqluBqFHXnYKSl6lWJdRTbtcDL0qnl9DMxWD\nTpLZlqShTmZFLD9TL8y1Jq2TaftYgq2NJ+l6mLJKBnlgBcwhrEoE5VaWoaahPLAE3YafYzbYnSzn\n5AXE0BqbdebLzKZeLk3CjYAam4OL2wa+QpSlIAElVKoap756jWHHqETUAihUgYpTJJSEUar/AAST\n67j5aZgYcBQkpW5pUlV5BDVTU+4ClNgaSBOnNi3u45gCpQHDi3c3R9TKvGQJL1GbEst4q8By9wGV\nPyi1S+iK9v5CVHNUYE+5Zl1xsEukFOGBRRuZMvNJNUQRPXYDNKQUR0GI5BLTKL4NKcGV6I3pT6tA\nKVJ9DSTuSKfbIFPLoFVf0Yw2q2uFc2Au81sZdGa81FFgpHUA3YqGqkly7EqutSCpLVtzahy8p4MO\naS5RK/UDTamUEP7Bj2KU3OM1AHRXaJr3JunMsU9QK4NbdxcqF6hTFQBzmgUtYdXq0ZhXkow5mFco\ncG/i5Q53DlnS2qz2HS1NFb0JaadBsAqcHRYb7sx5cmvgjprS3HLBVan3RlXUX2NT73AKmXtc03Mh\nT0wUZcVLniw5+wMAqyvgnemCl45AWd9xxfsDat6C5mt+RBOdp/Um22SfoUU5oIGucoLE135FDmWU\nUQ6EU0lOuxKYe4E6L2ZNbFQm3XkgFOaTXcm7gmmiVY2sAgq0sVkKdaAGOZS82GAh3/IAsyTrYUlF\niapOQjKtGRrVYZN1exc1bAUtPusBplEm/wCRym/YIU3+9y53CdqC3X5QE3BL1Muft2Gs0vuAOrqF\np+ww0rTIeWf3AKBDF7BXFUrANlAcrFz+4uAH4CHEXGFzoW+4BNdkPTFyj1wSWADF6mrL4Bx2KIpv\ngCv1Mt4NS/3Mu9AB2hYCtJpuLjuDXrsVA4s7lmX6FzCJcAa0xM2NKGqOJMKY5DL5AahUW5lxVFfq\nCbArcxonSzsWKdw/3AU4CkLmMLuDteoQVXW4qppKUHldArLUUuXyOrR5qTEPAtTcIzqxKCMbGpVA\ndaJAFHculGN1yuZpNcgUb7FFZyMFFL3KCiuLtWoRObD9wBp9iiMC78iakAUyUtWuUZJukTQC5Bmc\nO6Ka0qV+n3CAnehNduRYKLERUXXoU73QTsQTTKfQnWhl7d2Ay83uZqic95LuUTw8sOY780EfuEX5\nAr5M/nI1p6yB3cNVVSSyu5lauzNKvdEUuZFXBReO40r8kU7e5RNrbk9WwSoAVHYmCbkcP5Ay13M+\nxqXIRnYAQp1CW+RKtcgWH8jZA4Gs8gLHUq2JUXsSVp9gJpT7DEUwUK+HgE+/K9AJzcU2pIo7ZApn\n5KdKjfMhHuD0gdNLbW2xTkxVKNjVJt3AX6N4CuRhqt5DHYCxGRmtCVX2Hy/zyCqdyRNNOtSSsA9f\nUOsoVQYcS30AzZFWDTSmplxPMCb1bhEzJL/LpsMJ3rIBmUKpzQRnc0ojmAj8EuVeRJU5kVqKP4By\n+S+S81JipNz03AEvvYdTXloZn3JuenIAn+CTzdFMroKWEArVNO5aqvkA3VUAUxuTlfDRVnZgA1GI\nqzLo1Hcm+e7gDpC7FVv8igJyjUb2yAPyq1GZat+XLVTmwT50YCtU/cVSmQnNYHStgKKRg15W18im\ns+gulPVsDEBDn2g6NUBKHy5AYhbE1uqm0p+R8qusAYSbX6lqS3Zum0A6fqFc49rjCVvcahnE8giU\nzahKk7jFwj1CpbGunoGlXnOwpU5AKiY9BpfbYKYFfyBQ4XyFOw07GW3+wVVrGQ5yMc65Ci+AJRi9\nhp3RKLsFVq8MiFdOxN0j3Kn+rO4xScBRnkD5dzUW3Ks9QCvQk1ms2GIr3kEm1UBUE3NJMz+5S2Ua\n6ewVCXYetQLbK+wzTbcHNF8WLHOSBmlwmtEVf3LPUBmFaEaWpZMXdBTl/AGtTqD5+iBOgqVe96gS\nWBUqmFks4eweZKUAygbr+pN/xkJpE2AHv3JbrI0pkqOwDnn+UFY5Ako23FJ+oC231CslKlrsgnDA\nXNPd3B1+8GZiCTdI9QNdSaxnZhKzVlnH3AVKLmiorX5BV0YGpROa+6DFbl5v0YFmLE2nOWNmsXBt\nuis6oCtUpUMJmnb0L/Ls8gMbdkWb0ZW6K5mrmOyQE4ChY5r3L7XKHSnfc1p/xe4JUoajcg1FZa7l\nLkFZDErnkAzT0CE3LsLdfyRq3zwALSt8kp77El/lGVg0rgEaZbfItVpXqhzSnUNTWAM+ahRBNV3Q\nJt5qscwGKUBRi7yPX86mXz7gLvehRtgXFtqglV/YCq3Mk3iSj0KiqgC9M2RmHMGobNKvUDEaYnDu\nS0xk3VqH0M5wBmnYYxhZGJmg8sgUfFRhRu1noEx+VLO+EgJbN1KsvEEk6zYfZATf4g5Y2JrN4BLD\nAqbg5wahxywDo6FAlK6BlQNLQUOfuARbYYTYfJViXkga0J7lLrPoVqegE4f2D4HPMHWnsEYb/wBv\nqKLy3FNKm9SoLqd7C6XZUz3KjzX1Cia8hSlzi0BLz6ZGr3n0CGnrclZx3BKXDHAVbLBVnf2JJo0l\nXoAf6b9yx+pqG6ZBr1IM0lQNcBFedhXMos3BqYqLVOfMG8bADT7RgzVPNRbVffuSabj1CKU3uaJJ\ntUoDqBOJWAmb/sLiH+VC3zDsAOIKCr1Dk8gKcC2rhOVQk68+YDKuVYKdvQquvqBVwNJmSUKfgLwv\nyAJtVkrqNqeoQoK9QGKU/GEK9xuneTLmQBXkG3f2FqoZgqKPSxQlX7DzXuS9gCHSAuulRrNciqau\nYBF3gqXxzFMqetwDEjHoSV2ar+pEY8rpgkq7G2pnYoKoh98El+4tVpkzSegFyBrPoLWIjmTVAjPl\nfqZaixqL7k4fYDD5lEGosE+oEm/1Ac2/QuoBXsPYrcouHOaIoXBl0uUvAOQG9ECr0LEZzBQBQqzY\nmyv0JqvNhC92ZULAu82KI+wB0LIy8LuFAKwObi9twapKmAMvcnu67lErlgEm/sVFgOdhzWxOfUCt\n9w+RjaocwOs6k5sbTlzZ/cGqkuZFbn85En6Iks9haIoqnXsCb2J6HEj5XeegEtW9ibmiuDuTSApK\nvYq0ygV/gBhvmXwU0DkwH4wUZyUGk4Ayk2aSorSy6Iods36AFqFtuLlLfczMX9ANJZYKfUqz7FkC\nhPJcsWkdSafULPqBfkkpn7lLyKXflkBXQlN1fY0lZFVc99wrMZNNv1JLJOgFkVmnfmC0ypY0yArv\nQlQs1dgbTpADFaGReqilw7Mn6rBAdqFHdFG34ip2AmqkVV8DEtwAp+nuCeBdnIRtVXQVcvRlLjcG\n6xm5Slykos8iwytS25RuBZrXY1yRJKemQpEEDpSpyyCcC7JBK6xYB82ewPM0DNaocwAJWa7cxhQ4\n9yinSiADWnb0HzPqtjDnJN86gL1Z9WVYrgErT7DRRcBzaV8Gly6GYbXLkKUVXcDp5Yr7i1SJMr8R\nvnPqBmNqivxkpt3Q0vNeQGWmrDZX7C1/iYc3dQGkt+gX5MHnboUfuFDjNeZP3EoTzTDAFIxTmSol\nvsiVlHqBR6FEJdR25i3E7AEXZUjmT3J+wF1Ku1C6X5g/eahVME57k5XXmWPeQJp0qURbBS9ugr0g\niJKbfyWBspQOHyjYKaumCKILLh0yAT3xUlsxVvsUJYXVAZYdRd37mepQym5YWt3GvPmE72yEMkVf\nzBAU+hc/Qp3oU5Ip60fMof8ABJfuahJQAJKRx7olf2ljEXuBW0mW6/AtVlgp9QJJFNa0KZo1VjZT\nToBR6MklvUnMxcklXIDFYihUkzbqMqsV2AazuzMp6ae4t+tjLvUCmvvBZp1KW0ticzQoUrSwJbLq\n2UTSa7EC+pJZ9GSdvsVr+oEvaw0ijBGoSVewBb9AvaguHW/QIrWAJuoTic4F2yZn+QF35W7A2XVh\nPoUMWJVUdy6ugrTNQHTqxvc2lWnYwtP7wbTz6ECp7WUDSfkG+RSkFWSXUKZuxuqVCCaI1DxRszzF\nt5Ap9ScZJ26hioGW5tIUdRmLe5KrhYyBam7q5USiwwEO7wBKY6FajpsTiiH/AByBS8PmTaj4KV+h\natLacUAPsClFpT0pJ1fuxpFAF0+wXG7hvAAWId4B0gZUfLRmUplgKveoyoMvlYrv7gKeYrhDWk9D\nKqltt0Gsz8gaSnpsaola2TCzJqjr7oCpUx5am71+Sdku0lGIfdg1HXa5v5wZxOHcgOisVE23cm21\n2LPICmUov1J364KCjomBLkkHlwaSdYXcsgDTs+tAa2NpYMR7lRmBj3+5qHtDB+wBCwUIYcw6SajA\nGYdhspHEOiFXsBJdyrfsVXmpTzogFfjM6tKbWpTOmmxNxf8AkG/QInaO5TpWDLb2oU0/UKfM55mZ\nrKBuHGN2CcZndhDE/qMOOoS5j5K7+ANJtqtyitgQqJ3TAvgIs9rmtlvgplgZa7wFTVEDskAUlPJU\n/wDbBZv6l1YEvxDNKPsCUqX2JVuAu5RVbKnqVJpY01Nb9AMtSulysqWJqbZKJXWsPcCcwotsCQ0y\nuovnigGYcL8oDUK1U/k1f9TNZcZwUWEicZ9QwSbjcIWv0LpYH+hdeqAqUV2aS1Nmcrb8qaXXoApd\ngrjIqGULJEGINLnV/cyOI9kAUs1RBSkC4ToDmfsVREXKj5Mm6SD39QhlWMuLC6SDvWzAHRsIaYug\nKnMApaxNUKaPbcpyBNTQnatxxGUZc9QKc7WQUeIbwTUqxZqUUQiJX+44t1gCkE9b1PzL/HBO3wM7\nALSSMw5t7jCtgobV4YBks8imnIJgCikTz2Lkypv/ACMRmUEZdP0MxlHSK74QROagYo1JGoXuEFRl\ncsCHUUpdaAdmmx0qHU0lPIakVdAuh713ZWoiKEq/c1EWsBN+m4GXM2KrclK7A1HUCuyc29SRUrAB\nyFerKLYNNKEBLSS5ejJK8kudUgFSlzFygv1J3SwtwBr02Jp9zTqq+hmz3fPmAWVoKaTtnItcqXDE\ngMywfK4v8ZQ4/UANaQiL0FNYtuBpS/1JdaMM9NheNtgp81G5MpzUomnuySVgGlvYtN52wThOhKnP\nfADeZBS43Mt0p0ZTZ+gRu1XUknFfQzK3rzJKLBWlfbcJv7FdKw1iHbJBKFSehRzktsNFTnzCrV+c\nwrb5GFEBiLsoFW3uUNVyXwST3rkIXvtuUsiiFbuwpVe4uaksk6/lCCSoSv0KZ+CmvOL8+YFnYyrW\n6mnG3oDbhp8gDH3KareyKjta4T77ALf8BNXyxuM7eoTnbco0ppWC6V3BNRXGRaX5sQN7qFJvE7XM\nQ9rZNrluAys3Rqcswm33GG18gNGUxcK1rJN59QGaA6/lATXqM1+ADRpSbcy27PApLuXShW/LhT9g\nFNY5BDIFJbhyiCr2RY5FFvFgd4ua/KGXRp7gS6kmk/kn7ZKwC4vfbcIoVJ5F+MKHJabi1WtCCKPy\n5q/dGJ3FO8EGv8bKwpLs7GUqdMGlWm9QoSkf9u4x+Ik5sgCN7MMRtcWTeLxcDLXb9ORmu34jTasZ\nZRTQIrAt1Cv7BCibhE4nmUQ5VwJ0KhflQrT7BWk3FKDNfsZj8Yxq3INr52wFIi4L5FgSVvUFG1Bq\npT6hMdQJPlcbKjoS/EG89wKXcZldAUJ/cbgCdWU1n1KLU/gcpWgAmnJFDxVFS5SAN9eQWnsMz8sI\nrV8iizSwwgUjRrnsAuV0exOqiagpsMbOpBbC7Qy+bgn+lAKXCLMztI17foE7AV1vzMuiUGq59Aac\nwwB7v1KEq+pO1CsrFDdyaiOpnTprOxtIglMyr4NVvgKV5FDuA5hBXJOtd6jzSpkKlVcoJJ1e2CSs\np5C4hhA1+oU/UqtcrlydmBNQv3CI67GlugSeaqAM/HsKbKfTcl7AKUOewRWEhdegSv1QEthnDuCV\nfiCcEDahYeyCv4ho0kUZqkutyzIwp23LVbdcgMvPuLdd4CbFcCfNg5GkE62Az1dUM1TZY+xKNgKv\nclYkvQQHTEr8k0nsrBp6lO9QFPH4ylh179xbKMu7QOJrbBpzWtTLr99yAbJbIoc0LZQBJbYF3S+w\nJw5NJN7NAGlTTKsaSpCuSpUcxPYDMXkzdx8m2l2ZmmACVaxNOajEyK9EUUJLmhyCjBJTDjuEV7XE\nkqboIqBfkhKTF7BS+NgKhmPRmqUbxkNX8gYbhXsZf53FuaY5g4+wRS60/kJXqTaz25BM9KlDM9DS\nSbkytpryGzuEar0KmOZTXlbmVIoqciKa2Kq67BLmfUlPV8gEL2tYNWqsZQf3I9QZamlboJl07MFq\nTV67Mq3VSh5DR2zgynlfyN2iB23HZRXITWneR9gKLKxO/S5R2GrzbIB/Owwn2KVa/UPNtWNgCirg\no5DWOYXAyknf0JIV8FXsVE6KPxlWK0LZEtscyDNZFW64FpTJlwUblNAwTXQ0vYCj9SpmwpPbqwgg\nzzCcoap2oyskUVb2KVPUHkqX2CBp2v8AoWLE5x+IFbmAP92Ze/qjbh3SnkYuAS+45qEfmBRRe3Un\ntE9SZTGZ3IDOwVkXOPyDNChtUp7zcHHUU3HIBdwkZWVISsAKUqXYnCuGxfAFquEQ49BzX1DeQEk4\noVCTq9wKVE87lDj5YOFU0EEUowaotxS5T+hbvIGWuqM0wdWlgxGdgO3N4GgU67iozYioQoSXoA59\nyaebC2DztYDNP2J8vcHasssgLXuSUsmncJ9gGv6IsVJ555KP5Aptg2lKMmo/GBN8i7k5jr9xT9LA\nZjsuZUmvqLeXV7A3FwLpcGtqcyh9ZGsP2CrHMotuX8Fir5MIrFbNMPmO8k7/AGApd4pyNK6r7Gc8\nrCnFq7BS1XmUIZrO9ihZIM0d6bg59TcR2DV6bFGGoYVdGLXqDnowi+RlXuGKe43wA9hUgulBi/IK\nZnkKXwSbS96hXCrgin/UDUKz5lT9giFQCcOuAvWOwu0k7PoVEpjnhGkqpAky1eaP8Gpx0CmsQ9yc\nTPvcuuS3jBALKXYc3kFM16pmsx/IB5XnsDqzblqmUFwMS/QzHbY21Ncgo6ACTUxfmTTm1Bje4uIt\nXCAFSzNSnAV50GafICvY0muxhRlwbtUDUKeoWoVlctVQJ3iKbg07WHEYCNLt0ClbuyJwkHpQpn8o\nBJyaSb+DOKXJPsBpQyVZLv6BNFHZEC3Qnedywl6i3hFGWv0Drc1G1ZMuwE8Mtps8FH7l8oCzDuVP\nQuRTz6hU8IqfrAN0KsbhC6Ln9iBXgkm8UIOipexUpsEPpBpX2wmFXNWJkqX6FDlxQCxW4VX3Y3XU\nnYDD9t2Zhz8G2lMbIwvgorFEuhUyNNwgpP3KHv6F07k1+4B+QP5Ae5dO4DM1KrsUQt8By3A2lWjo\nKvQxNfk1Kdn3Ipcfqia2RVxFaVNUiYuBhylUK4NPn3BrPsgBV+yNOi7hW6sTUS4AZ2K5YKleYA1W\nt7h8ZLUmSyBBjoOenyT6FA6EuRRvbIyopVgXyLpX8Qdh83YgalT83JcsmrqtwMvkGZNXb2xgKQBQ\nlXBPSiaZRnfIGHRxEk9sGtSoZcT3KN6YfSDUQZSdaVFt9yDXMOiaWSTSvXlyFLMyAcxisKxVx6E1\naQpRJ5Dms2HMYCKEC9CpWaJgnCurgSoquhqm5neRcqkgV1yFx32M/JTNgFpRNtzNbchletzP56AW\nl2fohfWvQI9aldfAGsU9SzRxNiw69wSh0rNwG4Qolk2t6Ev9IGWrbegalDo5NNPblJnUmutgJaqi\n/UwkbXPsEELoULsUVkqhTQL02DqhbdkArOwyjHmffcoRRvzZFOVTrJjkqFMP7oDovLP5Qzqax2Co\nUAs09eZbKe5Q1E32FRYgElK9zStHepR+wx2YCohPIYqNreuWFrgX6MGuY5oTXOABwDpm1RbXV8yq\n4V2US2zgksqYQVzQUwhaLp6lmSnaagS3MxyGKhluLAUcpMPM06m3adzm8/IRmwTFB1KZ3ko/QAiI\nC97jVVFJuSokl3KOYpRdWwF31AG3qdPUmouxon8kqdQJKb32JzDebrAtX5hqUp0/gIxLQTNc2CXF\nAb2wUan86G1afc5zPXY6K0OnQkrCp3yx3jehnXpWrTG+TWny6dK09qkCm8jG4RDie5UuqBWlbpuM\n/wA8wl7EosvQBjJTGKl5ovUJvtkCmOwamoLPO5mf5AZwymnJ+oX0vIqZVChx9i5ZJdB/GRBE0MtV\n/Q03MZBqEUFItQV6A5ryBTFANy55lncE2WZnqQGpVXtuTsXmmhl3tQoZSfXJnU13JvbO4S1ReoRN\ng36lOXgGBPU94ZS9yo74KwBifcpGW7+oUKJ+5T22QXtfcXNMgVfQy3XkNc0QOvUCmoq32CWHbrsE\nb1fuzHlyqj8g0pCmVFLZQTW4Z2YBG28hyDnggNk84M0xYY7gXMaF8g6RF3gB6FML9Su57FGWBK/4\ngc7UsMrzTjJdANzPIq3kPsaiF1uRVpa/Y0pClh027gU16g3XdGmqUt0MPpYArIgm7jKt2AvkGlXf\nJS45bknEwgDl7GpdAglut6gKm5qZvWDNnbsNKAauupRKp7Av9Ubmpf7hQ04My7Gop+YM6m5oEKi3\nvJKtAms4FaopkKrfcUkk36l/t6FNXIArFfIvoTabAK4HTaCist9hrZAKtEyKtYHLTiwqcWIHVFJf\noZaWDVHTuzNF1VijMJ9gqnU21Wl/kHpVW8hAsvfIwlNCs49RVrVAKyWJNXXyZpbGERS7QnkfczPq\nKbu3SQFxnuTq7BSPsWQo632Jor4L5KhrCmxY5Myq9xU/tIGtLlVCa0wCikVGX3+CKVusGqQZ07mo\nrHdALpUy6j1KXbG4A4u9jNhc0D9gC6hZNJU2+S5EoXwBK96krVoxUzXuTj1sugFVPfcY1RcLv8wa\nV25AZxATFuxOEqFMsKm6w8ZKJJPf0KszjkBNUr6IrfwVirFX2AM/oaunNypa4tUqBKjnG5LmU+oK\nepAutbsZ37cjOnSk6KG6jzmhRWKKcyrckARv/IPc3ykHMS75Aw6/JMaRzC3MKsVgKl8lKs7q4RJp\nOtDWjD/gwmk/g15qc0B0d1Su446XMSpmDSe0EU0mBSm4PUv13Kf0QGnAZbeYDNSpffIBq0+xh7dk\nba7vLBxMrJRmm1QePg06OtsFEU3wBl8r8iVeQxUmo68yDMEvyDUb3WQ+Cij9iG/TcWnSPxEGYtI6\nU1LGMl0tkBUP9heK0CuX+hXoARuP5IRde5O/OwCstEt1Di6CfxlkDVq3nuXcKqhN6dKnVTFaATTh\nKehmMG4bc7mWnyjcDPyMOnMknSdzSSr7gZVs9US0z+htaV1FK8U+4HOJrNChujNtV59CSVFAAll9\nhbYqZCEAQrueRTODThdFcy7U9wDBamrJEpbqwdXyAUlncqdXnYFErGw3j3AVFt7i20qZCP17F7VA\nVOO8CrzuCX79RXsgFUUehOJ5BNPsXKwDXt9ymUH5JNpurCqZpkMxNRBxDe1EES1Vrgkpouklqf8A\nBS4U/jA1iQ+VVEnEeiBzO75gWJL3sV2mKUN2puBlwNSiZRUhL3ZBKMWGqQU/UvN67lE1WJDpR7FW\n1har0AqxzB6U6saxSzBRUDMKVIr+BWIoU1+UAf8Ab2BumR1R7mawBFD/AHHkOZwBQ7hW8YobUOFm\nxeVOXsBiiYpN6aKRWlflRh3KMY58ylTUnvl/ASp6gakk1bGxaWpqT2RAaP7kvzWwb/KhGSq6AMKp\nTWuATSGwEozYN4yLdaBzYFzpzRNoXCVcmaqsFFLo9yVSlSSSt7BDlb7FHwNJvKCPS4FPdE7fcquY\n7BqcKoGdTpEGZqDd5dC39wiarRhMXVfYYsDogK9LCr/AQ5he4tXeLFBMuBp23JOFOSVHQIonmWEU\nUKy+4A4UOrB5/gHfdoscsBA9KdV7mHpc/DNg1BQaFFTpSmDm/c2nSSSQZrKsKSyjN4RpBSptblyG\nJuSio6SKqRyyMWZNRX0ZJQq3AG+Yd+QxNQc0wAN1i077GXLtc1KnmZq7VKIVCu/3C14vkUlagGpu\nNYTVzMu89CTUcyIeWdicO/Qa3M7PcAisli4r3WQcRyAFKTmzsabXr2MQ19irsUTcuIlhndq7LVPY\nzADqe0BmfYL3FQ+QQ7klP6jNLV+5RsgMxypuGZRt15zky9NQCyJqnyTyZbf6blFiH0KK/qUWd2WV\nIEmTiY2CJdS2CKuCdvsTQTuBN++5PkierGxU9QCWoWSde2C5xyZQBdS/GWmFQUplW5AS2YqLhy9N\nyx8APzUlVzBdMVH5AkTqpKLuYABmoN5wU/pJN+juBtbDtgpr9htQim4pX3BaqcxVvuA7UMam5pnB\n0cLpkxqVe1mBnG+5RNR+CfsAR6lm9SpcscgBTNNhpGwTQXyoAr8bFW6mMvY2t4qAzWtibeKhfNii\nlgFO8z1CnSNyXwadAMtq3uCrOTWZBaax2CmVnG5KHR232KNiilbgKan9B59w8qX5Ub9AilzK9RWc\nzsEe1jUVl9gsBUSl9h5XL4J3oQK9w7Fj7Da3Yoy4q+YuJ5j7IrqoBifQVaXcpW3YJpEWIJ2M77i9\nU/oFqYAqXT7ktwbWf0FRPUoU456hUPk7mUUpAa1Jp4lGXtl2ZpSy8vuRWZaqVXNQja4/cqKEq4GK\n/KLSn+hpemWRR5W3CNpUj4uEJOlqCrbz6gWp3h9TPU01T56GYmadAJwn+UDl6MnJLbOwBHpzL5HK\nr0JSBWfsZd0aWFdk9MXdAJL/ACcGl6lYnzsBO5XtgFMy2MvpzAXKo7IBTpX+ShxAVT+MnE9ShT8h\nqfaGAw6t12HAKWimE/QBpIoFYphyQMpdzM06k5iCuqIoaP5kVQza1TU7+wFnmGpNVEzOLAE1kHKY\n/IOiAHqr9wlpVsWLFM/HYIsdDWl0jfAQupLbYBWrubTiUuphJq1ticLqBtuaqiGsrmc/NU0tUVvQ\niumJyKbwqGE3mjGa9MBS2vW0GaT0oOd+ZQUXWyoZb9hdoZmaz6AM7K5OaFmH6ldrnkgnX4Lclp3F\npRuAKMKWaT/xSeDKmrwN/wBQC8Rkk4tUoFpxHoAJ+pS7+hRl3CvSAF7MrqchSZuhTcQBWV6cslVp\nE2+zKmALej/UtSThaqrZlVVEBTU3koml+ZRuU4AmqrbA6aomnAPbcBU/YVbtAOiGKVAnKVoQNSm4\nk0k5MvUp2ygKXm3Iv0MTPUlanqBukcoMQMtA57ASShcwzUbKPdE4miAEpcdxXKxPU42d2SSn8wBT\nSLjeJBu3O9Si8um4CuVil9GSakIfZWkBlfclWnoy+Sbh879QFQ5msk2m7dDMret2MqKgU/xyCaVX\nQE56mHoerUtXmhK6A60b6lWaFi1SxUBV7VJX55C9rE0kr2Aa5cE4Sp2krY7lW8gVXp5g4/Qu9ChT\n9wKkrfAKv6jWSqBPMe5PrXANLe4u8KwEmqk7RnPRFz3LMx9wKn7BKbvAxNdgmqgChujReV/wWlu6\ndTV7r0AzDmBSquVDXl2JpanTpIAnDFxM7XBNrVbkXmh7yVE4mt2ZbSoLcuTGqa0Am/5C3MiyvgDS\ne/YZMLcvNC+5Bt25Dn7hpt+WEKaY7bhT+CTm3oSahgXzuP5SoL+WUq/4wLAORVUX4ijNhTiwTsXM\nI3TC6ivtcxp1RcplAMY9TGt3W1amp2Maq3YGXb5M0zTYfsb06V7UCMC04rfBvyK67A080AzZzcNU\nx1H5Y6n/AI2AxNbVuLyUZ9UOSom5/cmqTnmVt6k1+rQGHNyhk4lsJcctgiy60CLchkLlE9xT/cJ/\ndCqV/JIHJqtGuwJPJpRm4VKZosjLq4hvAVFNkVKuKYN+XIaZ6FLxVAEVaYbu8vBq17hqUOPQDm2y\nVaMWvT9CiLFQOI3ixUwMbeoV6BVMP4FbWC9cbil6BCvgnLsr3LkUT9iCTyNLvsEbdSc2AvilRSkl\njDFwBlpI5ap7HRtbTc5vSigWzNJSStSi3DP3dwhhJkqsy37WFuf2Aet9gaYp4SBu9AM6lD58zD39\nzTd93UG6yioK3kqOioDl8wn9yjfaoGU1ublJ1ICk/cMSOaVkALoVb9typ6B0KGK8gpUUvcPkgkoq\nSy/cavqEtPcBdeiKshLFNr9AHlYYr1MM0nP5kBr2BtJFRfsHMCbrE0QP2WCdQbcSvUo6po2n7mKr\nqyTiV6kV0t1FP0ZjzOeRN7EHRuapoG3PsY80LcvNIDvN2VlzCZdbsdUMCf5gvySvTZFLAB5ElyLa\ntOgE+ltxSq/QNhpCi+QJxb2FIsqRpmwCtK27jiLME6fcubCqN6IKN9jX5QHnlABR8ykpom/QnV17\nAMrkQdfQZqvgCUJoUCnDuaUZAqdioUtVgGiBTU8im2wSX5ICnDRMzgZgqmKTkzNf1FOOW0Gd5ctf\nciGzJLe5fapc8AFLwMKCT/Og6Un3Atuhlqsvobgor3KJWpd2GaQDpzReZxzIoosWwCVXIzyiQ2ko\n2vXmLvnkScUgqO3uQSomaTkw4bhDPP1yAvlgHXqKd1PcpU1yBlqMyTlWs7l0Juac6IAp0NXoGZ9h\nUAVZpQk6UpjuUJUyVU6V5gTns8or/abkpz3BassCvZe5qEuUXM07GlRwBOP2JpOAfO5S1a1+gVOh\nRWtOg74YVfqBNehbC6XBKsWA1pcKpNFVdWZ1Pn1AWtldEn/ITXsKr1ApiekFNZL4J1o7WAmFY/Us\nlFYAKp/lgbriVgfyTL81l6dQKWW8uSacis/IRJKIgliWEOVuX3A1WZv02LHySan4ZOi58gDO+5pN\nxIOXcUqcgsFbsplt42Cm9RU91VEUyv2Gdr7hiv4yVefyUMBO3cpe38A5rhZkBmm4qmbGaRFk8G1E\nTaCBVIlSEbfjNXCIqBQptyRJRQph9bFOLgTaXUG1HMzq1Oek1CeoG/8AHuZ1UCaepanL6AMwCm2w\nTFqFDdyjUrKoPlrtuzOmF+htRYgvL2JpYsK08xU12AxFVK5DLllHuMb3AFMfJrTHfJQppToUXXuA\nuBh7czOZwSfIA1av9smOeTTTnr7Gf4kCbSUvBL+RVbXNQrMDnL5dR5o09KpsUK9YAJpN0ES5oO8e\nhK1ABLai9iVXL/JHl6F3AorHpJNeiDXperTFuQ+VJJPlcAa9PYm6U/c002nWjMre0XAZpvzQN0+5\nN2ecFDmM5AJfch8uLjpS81apAZfKP5KOwwv0GAJJRGUNElHZBexpOlOwBRuveC5JYFJq/YHQCUr8\noENIW7k1j0Azu4joWrTv2G/UIU8mAypCHyS5FMOfcrQ+oEl/IzCgFevWgzOOgFUJvtUfxFDbiEAp\n0RnUlPIX+QKTd7PYA0r3waSUVUFEjEPIFLnf9gxQ0tpBqyuBl2uDmB1TlUMtVbWblQfczhK8i1T7\nh5YgIqdkXwaWZVyh/wA3CsQ6z6ilg0lvZkrysAFI6GpqV1PaQhEUpuajzZlCkA5+4dVPIWZ80/cB\nnlQm1CcfqExYoXoUDnssg259jV/syh/qEUNuEKSKEqmlWihAD0tdTm9jqYamdwMwar5aqhJVhlNZ\ndYCDDfpsTh3vYq39RiFQDm1uOKQT0zSO5RQAnsWeZNew6WuxUKU4oDSqvZjKVTGpuIAzT1KIqUOj\n9ChKUwg1A9xai4RXnmQJ7CqKuDPI0rV9gNKc1Qq/wChqt9jelxS5FW+4Q/Uv5JQ73wFMtWyaUXSM\nP/VaBTebdQOlFXOQ1JuqBPG9DTc1mlpA4tYL/LubemHOTLXMoLTi5Uz+McdLl0qBlJmt1kqS+lGQ\nEps0P4iU9GVc0CCcljceUBlognFl+QD1tA4Tj1JsoHNXyBzf1KYnYnSuwAt69CpTIuIm0GFMhGl6\nLkVboLX9BmgFaiyEqOYP+A6lBqzYy5/YVf7hVuoch8sIqv7ilUfxootOmtiancegfMXIqh+tQap1\n3Nc1gM/mQDf7Eps8E4p8jAA9wf7GoaVidvgAVkEPsaiKSVawBm6oyibWKJkqx8lE1QU37XJYf8DZ\nVyQTbj5aMt1n1NQX3AzFF+MPg1DiliSwUaae/YprQeasPNepFZh5Gt56jDn4GKU9SAmtLWBo1Feo\nT3Au4grjSkgLtUV5dqhFalTACqJLFwqyVrUK2QJ7inX5RnnbYYdFkBfyXX2JbRyB6tLflV0qoBTc\nxuamnIzWEKVOdoClamqwKjBlfwKiQKzqDuM7hNJApfbYW2uoSu5eawCtVTU1rBmKexJ2A05ihebH\nsSv+UKd7gCNRLWNjLklTmA0qEqlCn3qhlW2sATdYeGTSee4N5KgE6svtgo2GHHIgOZpXVC/xiXYE\nqgbxGRSmnPJlW2ya6WCozFeawafz2J7J0AxDp9wqr9hcLqCuijVUuQ0/QzXehKa7EG1WsUKZjbYy\nprkk4cKoG+nQOTCYaFxfIAtpknaMiqqnYIynXmAy11KgS6Mu/UBrMZBWyLTb5bl5a81iQCqJ+ppa\nZXN2LygZp/BNz9hiywshIE3nHMpbJTf2LEgSvX0EFzfOBy8gMA/QntgrfYKHa/6g3ga5uUPqwis6\nDmnuTffcEmFaVhfPIab7moQGencHk01QGnMYwBmPTYYhtwK0w5yawBjMxG5jVEydHFjDs98BFi8N\n/YlfqPyTloCx+e5YBp2aqN4pQAl/ujSpn+QivU0okLAhK3cp2o+RXXJjWKehBKH2FuK7WBPnKySq\nVVM9ILoSanqS2AlETJtOFEzyMKjeDaebEFUnWs13QKZ5EwJOFOMgtUuinkKqZhJlQuDOJ9C1TXoZ\nSreQhScDFOZpQujJ057gYhkoNP4M/wC6MhWlY0lK5GdKcSbSSVPUDS5DSItODMdlsKmSKXFvUG2/\n2Gv7lEfIAO/8B/ujGBpn8YGXq1S0qzZm0s32MU9LmlqcR6AY1quOQRzp7VFtsIUMDSUM1SVHYxpl\ntbmq5AGmqepL2J3nnYoqBOInPMyo/LGnyqyemKgEbxuivG29ih1WSv0AMuMjyzuXIncCdFW1jPN4\n3NUczYNSrtsBJKmldSvYFRs0quFzAnEil3DyuopTYCis1kz/AJXNNOTL2AqTR126j5mnS5j8gr82\nBuZUFXODCb81KG6J1fUBx+QUU6YMzWlUMt/lCAa3r15ElNr5Q5+ZG3Uoz5W+guU70GliaiG5Ay/L\nkpbpUY5Tkmkk07AXP3DHN+pK+72k1DiqlgZqmaUtcyiF+tSX+mqAVVjCTnOYBfyK/GASq1KVfNoL\nEZKaTYAgGuQwm9gbiqyUZf5ULSaaotwjZoAr3J1n2Y4pLgoUEAqKb8i7DQGBVvtUYrev2DDmgqaS\nAVXSyYx7ZwVYrkkqxkAgru1Bf4we2SiSiSBqozXpgAqxVVVDjmMUrsEZdLGlESUPC6lEx7AFsBO1\njTXINXyBYvyMuIoNHLXuZlTbqEKjL7hHKgS7KuwS3XIGm7r1kE+z9ybUSusg/cClOcwDp9l1LTHY\na2CM+aVE2CSja7yHlclDzDU12yRQ6sILVbBP1NeXDuiVKZKBQlFhTinuZozX8kCr0NS5kynuqmks\n3w0FNJmkjKiY/Uy7jMPkRTNZ33GPWZkyoirqMQkBpcr5gq3YJumF8jf7MAbvUy6oXZhXuATPQsfY\nmmt9VrDaaIqCWvQZWVG3Qp/Lg36LIUtza36kqOX3CJLpXcI1FaWMt1Fum8NVBw3TsQDa6MzqWRle\noVqUD1OOdibxJOUkvQnK6hA57/IOe8WGsdQbv1wBqXFw625FWC5sAZhmtTozL/0lhF1BbohVVEFQ\npY9GTUEr/FRICMQUu8dxr+wxRvGQrBOv2NNcrUDyrpuAZyySr1G1ivT1Cqnp9ycfwUQ79DLmadwF\n9ahTpJqASfWQCiZDHYLr5CJWm4w2r9w03qLuBRkZyEO+CpE/jAly7lBVWrFSTpCAVFh81ORlXGAN\nykS/IMqXQ2vbcijrQoUfqJWAgzTsyVOZAOeQDNIwD+AJ06C9vgOownYCr+pdVTcs0sSquQFzLP3I\nrdALM3H4JWqyq6YAZhVKX7hWV8jZzi4UzPQH8lWuxUj7ATjuCt0GHMzBRcIXMJ7lTtugou4qOwVQ\nkxis7lNeouOqAO5Qp+RCEAVpGBl9XgnuhfLoARKr1IlRx6oVVdakB5ZShcyr/Iw5+5RSjAE6dPUV\n/qUdQaeeowBpOswKW92RW/KBVM9EGKYNJRP4jOqgBM0ZmYoabmuPsZSeacwKM4F42GHt0gFe1MIC\nn3yhd37IrYqDdAGs87iquGZpb0dxzyA0rLfmUewQ+7Gqc12ALlfcenoToAqIU/jFdQ5MU1h1dAJw\ngdo/gnVx7mW+wC0vUF0LbIYA1R1YTF6DepnzN32A0oz3Gv7gvL13YhUlYIh+xVvsDwBUs4mxJ1jY\nv1IBXSv2JPv0DmS59gNSu1hUGaV2FRH7gNmSwCh9qipteANaUr0sNY9gnezGQMtZsY1bHSW6IywY\nYq/0Le2R1JbhGPkIqbWsSVlJJQqDVbBVGxOhTL3J3pPMCfShT6lOPyCjHqAtamm78i+1yVuRUfUK\nv8e2xU2KnIadnYC6mp/MGHMwalEE3NH6ByFpXmplxVoqSX19DM4ZTs+xly73QQa+ItL0zk0/fcE5\n5ivTIGrz98lM4hNklXmVncCjnHIYoUCm8OjAl6YNQgStDojSlLmFhKXyboOwX6qoqZtUitO/MHWY\np0IOhBKxNO/qUOPgsfJQNVrEupnVMxafsba9UYpIDKlU7sq9tiU2umTvVSBKcyVsSt+RRNFf4Grc\ngC2tzNYitQmy9iUpJegD+QUZmWFObFt2fUDNJ5lWIV8DDjZZCv5gA/ETfqVn+gTCAZ3VGDxH4gdb\nE5bTA1S+DMKbIW97BbHRbyBqdnfJebdRcFMRBTvUDU4zky21zjYc03kIoBms/oDkbKpZ+5RLmhTb\nx35BKmRVu1iBrO5fBXtjc1EpJ5AzKiEapJlJ/oPUBv8AcqBT9Qd3HYBmVb0C9v2K7m7sW8YAUrzW\nhqGrVQaY378jSvSqAk3NZKJqvTkUO2yGE3tiGAcvYXTTYveCSYBM1izMvqafKxltTUCeH7EouTo/\nsSu57FA0qRPYIm5pqsg16W9QBpBHsL0zzJ6WvuQHK6DNqimi9ncCjnHMpryBKXHqURTADfmLbhTU\nzMOlRbXcIof5yB1t6EuvMqRyRVMUsSu/ywLYZ7gO3wPSoJqZskTbjb9AhbX5cJWL7FPMgHqZaj7G\nk6RkHW4GHMT3Mvn6mtS2sDtuEFomhlak63TGFHegJRanQBmsb0IP4RdbbgKcO9WHQqKV36FfqBFG\nHa5U9fkabS7FQeSME0qGkgiv3AzGK8gUKd9zQPYDMV/KEl2aqbrEl5agwEt7D8mvLjbApVnPMisw\n0UN2Uc+puMh5agZiPyhpVo+wrnQko6AVbL1BuMRgo/y5bE24/UAbc7IJcexp2nJlz62AG2uQ8gUr\n9xtfJUFWqdiq1cnPQqvmFPJqwRzoUNlaAGsU6SZmOwxRpB7oiBxmwQPJ2wD3dygu3zF6YV+hXU5F\nqeQGWtrg/YWlNwdWEFPsUfsKUXsEADtQzqtBt9Kg1+xUYV/saUmXPwxhPsArca9kXtsVY5YAEqL4\nJOgtLexJRb1AeZKGCNX+5FETLRk01sEqACjRWrJK9ai1WpQUeKYKFFSCyoBXUejCvqalxBmJpkIv\nxbCgiri2BUqPgDS9wV28WLuTtUA2mpTT5XIsczPEUpqY27AbU2dCaUJBVFaeQGkuZpOlzKx6ivYi\ntarUXcqdiWzsOLgFQwNnHuDd7wA3+5fJQQApGaQrbk1nJcrMARq3UIV2uZT2gCzUq2sMJwXpO4E+\nt9izK9QTpX0Gv2kCUJ0t8D0CGK0ygqrI5m25qFcGs3AzfpkXppW2DSXLmSCMvS74BOtjbS/LmXE3\nAYpbkTiCSKu4VOU+RO5OteYw7AFKI1CmlzMWS96lNCDSvUsMksXn3JrGNwqo8F2horRAUxUIlMR9\nhScRko5dyw63AUmVHd9igm9gprFbF0/fqZvW2SbdwLzW+5TN3XIKclzwBOgp0h9P5J2m5OoBvJTi\nLi6V2MzdukgLi1i/ID15GkpVANJtqfYnSuECdEvUml+wFKKW64CklVVtuApuiV8E6/qgzCK1AGZX\nwUU5v5BWjuaVfsALS2q2ViahTyuaona9ZJxAGUCraYwLWR0v25gCT6OtSX4xdgl5AprQXYJznYaR\ncKkuwVTKnVC52AqySbz2DngqAP5GClw4uW7sKWQM8LzeX/O8m1kzalxitb3AZ3yKdKGVGfUrW/UD\naW5YibmZUQM0oFZfYMFy3KaBFtuXJBGSpHMBzUn6Bn5K9XjADcsxZMvSCAWlddULCkElFyKX6sEN\n671nmTUK5RRMZe41tvkypsNNgB+5nU3vQ1FfuZdpyHKlVRmhqWnyBaU30ApNJV5czKjzV7mmlFHQ\nBqSbzAf7fuKS7/qAylz5jmbAqjdbgbVaPsKt1q96GFN8GlV1I6C1epqUlb0CJc3gm4tZ7AVk9oLE\nq+AlKXf9SUR1Ao/ZmsVuFMRGCtf8gBj/ABm+5l3XozStMU2Qb88gCmKkDvjcY9AFVclKmtCVhia3\nAy2xW76AkooKpz+4FTuaxNzMV5biksLpsBKzZml8M3APZK4GKKjuDaanHM004e+5mOwFp0y4dx8q\nX3NaVTmTyBlaHboUVcI04gGmBlSmltgr2qyedymm7Am97k6R0KKS6N5Cs0AHNlkqVWPuSXrYYXWA\nCkcyxBXeOZKr3A0pp7jj7BCdrDSzsAzTkiS9cFXD6k4m87sCwD52FKVPaSfaQC1Y7Elco9StX71A\nKKYXY2nSlGDrcVN1/IG88wlXV6gm0pdkTecXAZ9AnYpcSycY9QLPwZbUC373ACj1GjS22BxKfKBT\noyid5xglVVrsNpkJlPdEBDTRmMX6mtydeWQMQ7WJTbuxaT6kkrq+QBwn3Cmb4Naq132Ca8rUAJ37\nk9/kbKL/AKg3vXeoQO/LfmOwe+xThXKpTi9hxHoZnEDp3XSAhnuWIZTm5VAnPsElLdSigEykK/oX\n+XqBS3jpIRKjYebtuERioBErmCncUnIqAgSmfsDcOEamgR2APZjd/YmrNWwCiQLlYLuj6mlpvklt\nIBGXbkMLFhiFANf43oED2wS3dBSyV42CtQrYJaWkKWMbFZwAR7FF2rjbH7Al64AoatX2KlJVhmQq\nBRWmKklToFFR1kJm3qEPzaSbt0Mt2BtMKnqB6s2Ks0ySj9SiboimlrEpdmubKiQQqguAlxtuXuwq\nSrzRS9wbaSKtfdhDlfLBw3zJ1KZcEGXW5O8CEb2KLSsYyacOzuCXvgbKq7AZiYMxq/c30uEIIz+b\ngoFWtUq9gJxMY3J6L06mktii7XQDm0HOKnSJZlqGUwImOdaCk1msBXqP8BF8A17mmoX5gFHe4VX6\nk1DKaz6spIBvcJrSxrKZX7gEPuTGEVIqUZBk78xhLoAWQZoUzyJXpYIVSjrSoqYM5pWRwBRgphA3\nncaWAKc9wbYxWgVn4AavIqZhsqySjOQNUkdIRGwp9CK0qzvsRJ4QuADASMVuUfiABytyafQYd3UC\npMLowiailBU/OYF+dgcOoqJqVL2Ao9dyv3JxWpZoBOrGElzCH+oqbASUuam8QYmtLm1ML3CrEmlj\n3DZxYlPQCb27kE1qqrI3p67gDm2dwhTLz9xSrPoDe3sET2JQu5YkHNsBTOSUPuEOOvoKm+wDKoW3\n5YVzcApm5BKw0mnclpU5HTDilAoilaIMufY3Wa4M0ioRKvrkkvYcXFt2ACa3o8MVn7BcKy01FaDL\nFoIpQAjen7FNaDFWl2CEBZ6lO1hUE5bTuBl0SXqVW+Q0lyglZ7BFIpppPTVcinDsSjSoVuQCppLk\nZpBKBldgrLmHyJVuX4yV52AblEcyTpshTTvTnsAJRKx63FJqlTSSStfYraniAKFAV96C+Vy54QGY\nqTtKNOnYw9rpWAom/puSaKXE0JRFrYAFGH1G4q24e02CppQUb2FcqzYLvYBx0qU1chmvRlywEKm6\nZfMlVIViQp0u5fOCXILsCbJMnMdQi/OgDQOTZKKzEEroKs3KtRbjsEhFXNyndcwboM+4E12Kn7gv\n5H7kFywXNdEEqRiqKHk+5NRYY75CH/BFPNFCzYE4tQU2pXyUFIp1KYck0t+RXpcAht0uDUPp8mtk\n3YKeYJIBtVwx5oHDx3CKRmm7RmfX7FZ/cDbbcLuN3SxmkDS2HgBiXY1Zt+4SrY2FS19gsFRsKYKr\n+xOSKVTTOAcIJaRl6pf2A1Lit9yXO5laq/bBpZTf6gLbW0Rkp3CVMoVCVc7AaUpwidbWKIfQKzy3\nIBevM0pyZ6YFFDqamlyfXqY1viTGiFVSzSbYCuZLfs2E/wAlWZsBqja3H25mZeKcymsxVgas59ic\nUjczRqlhxOcgK0qrZRmAW9IFtsCSWAa5eg+ZVW4OVVgZUU5g1aprVFzM0eeYA4825PfOwNvtcqtY\nSAsfYofcuf5UaLuATvkppuVFCwKpEWwAY6ZFaaP/AKQfM0ohe4FFBXJ8yh/sXQClRzK9Xd5K/wCw\n9MgQOYiRnOfYFOMbgG82WB57u3QGojM3oKcvkrgV0ire40V8/JLoBUXV5B36lSqkLUsuYGsNsm59\nA81ObLU5QD1swv8AYoxcpcVT6gTddimkhqm/qNlT2KFuAlztko7k7yQKV599ydJtJUyWOdgC6ogX\nvgp00jFybbXIDLlOXsEKiyaapW24R+IAxNuRK3yxSgHtBUDT37k6kk/S0jAUcqyKrQzWUxV38QEb\nbdvUzW3qE0koX8ALvUHyDrkZqAutfdGdqRN0PPCKH16ADyX2Fwl8g4xcBVof4wzyJNrvcVPcAKIq\n6Lkac5oEKeVggi5NT15k4hVGPRZAz8Gom1ihRM9yo3zyBUsUTmxR6LBqIq8IA8qmtUZhzPOuxrPL\n3B74wBQ5F1ruHYfbLgAnbGCWmXTsh5sG30kBTvIR6FSrL4e4GX5k3FTNEpk1q7GXkIHaClz7QVHR\n7FlP3KBus55Djn+oNbklC63AUs4dxp+hIm/y4EnuXdlzVIwTm9kAS53B7YGX+gcuwFUlZ8iW5R75\nAqRzCqfUpzYrdQGGlQcL8kzM5NXuqAU4fsDTVWPeAp1AzRkqz8C1DrkkltPNBCqWUVsHIbKlnuGL\ngDdKA3DjJqs1uYarsgKF15FRKS+C+wDqoZ3kX8A9sFF+chlxGxmfsKn9AHJNKm4KU5yUq+YIJ0oU\n+wFN5KBySYO40jmEEYHyuK3YXqSirdwLU3M4KicstV+hO4E/zJKjknWrCsATfsDdZF3CclGplV9R\nUb2KFPyXmUEGqTKsX5uCdpGf2IrSwOTKoMgM0+xTWncVQknAFSw6fjAOmCqgGNtijqSToX51AohU\nRYrfYGsq4pUT9QDCeYFe2YJKtamu3UBkNWkk1iloLvfABD/io2UlfPMY7fcKq1knfmUxb1Jz3Aqi\nnSlldFOadQr6XAZrkK+gPOxJ7KaBF5bNuCxcrQgzGAqfN9hz1CvdlNKZoAqm7gZlAm89he1kAq/a\nhrLp2M6YpFeRq1u5FDcOcfYopujUKeXIt6dwjKXNVGvoW0quC2Cil8bC05mxP8oKq+YBGcMHD01Q\ntJqvcoaXNAEKnQmuxrn2MumbgUJV9yct/E7FDcRYGneOgA0gx2qa/gK2fqgBLd1FAlX5Kq+4Rpbo\n1S3wZVokZ9wqdKk8mW2x5NXApzI6bwzEy7mk0sgdG4a9Crbcytaa5ZReeejsAt1+4pxMv1CZV/UM\n9fQBc+hnA6mpqZ2T9wFvGeZEomnOpK1gKdymhKH1Jf6QLBVxUegNu+4VTWStVkl/BOAhhXRUVAX7\nGp/cKpx7FVlAREVkBl9iog6Ep9ALk8iqfkkyU/aABX3CfU261f5Bl/IVWVahz9h2juVUETc9PQqL\nmh5TUHMyBclSSzHoXS2xQskDh8xbpzsEUpVqgw+rCpJ7VYQ10NfJPTzlgZcr7GoUV3qySrG9hdFz\nuUY1KIikGaP1OmrbaTDsEkOW616AqXGPQKq3UIooSTjmrjW35QI/RgUcqGo+cAtKr9xhASbsamP0\nM2saTZHTfmoqduZl6qcwb5qDP5ADeYCHguTguSAocCqTLCl3RYgVt+4GlNt/yBrM7GJVmhxUDTdK\n9yfKDNBdQFdOpTWICfxFPfYBmFK9QmKhMEuVwGa8iXInV4JS1DwBpNXwPmz9jKFqlAFOUl8kFZ/I\nGf0AaYFuaMzKxZDW/sBe4anebDDUIzqdagThOxltzLsDaVqcimW/kC+SdOjyVS/GArcJ9sFb9RiG\n38gFGpQ2puCVueSXlVQGSqnv7kvXcHu7gbv8jKyZXU1QA5cxc29ypGz3DKApir9ClR9yo5j1BZ3Y\nFdVZKV0sTiL8oKK0AZf5YVEcjE7sfN+wDV9dxx9glREzJnMTyYDWRDzLL5MqRyAZnAKZ+QmC82bM\nosyxU3mwUmWKSWYA0qUtIdui5lVA7yyBcKdyd3vuVnS2wO3SwGajW6/gUphPBNZQA7ok2Lt0rUzT\nsEV3bqXNexQ0nSpY5VKpldzNJKznf5BuZoBOcBL9R7lWPYImsoqIzxHxEo0dzSsk75AoBzh+ou/I\nL2sBYGXNLhIfyENKN3wVcBdfAyp/QKui5lMoPygptoBn9BjG5lONjU4vzCJpgr3pgZl0fUvuFDai\nlkT1YedgmbU/YK2/KBDLq2aVaGKu3fqas1UDWZnqjL/IGXFb4Mt7ZVwNLr7C5ifcKpFKuAWUYySS\nvnIyZ81KwBqq+WDrmmQl3V8k27xQAdbWMw1Xubdq1eHyMS55YCDn8kN88wSrtzKLPLYlYr9RlRFQ\nKVD2KkSSlOGMSqdyC32AaYsZ8zmLTuUXlhcwpgX7oLKwBX+Su+hRSr6lFKgOX8h8KpL0Dms3SAkv\nXIxfLBTb1FKGEU+lxldWV/grOVYKm02UJdcwUv3FbO4A/mo1Sc3Fql+5mW7hFVVSM6tJqXIP0kDL\npUGkxrSblAGXITU01NdgllA00xV+QW7k6dQGZcexR3BTAqxAQUtOP5JvF9zPRVyVE3MTcHNzV7oz\njqBS4JMqrkZ1a5UIqNYmBOc4mprzsESclmVbJWU7lTBFTVyxywTia9yWJjkUMxcou0qErWuT7kFd\n8zWZBw1uNHzgCvRr0FYCF9jSCtZFLIaafoaILngOubC5ke4BzZeaVL7h0wSveJAU6wSqHcUnEXAq\nTD3NTKAU2lKuANVFqbWyTTKn2AE3+o7PYuecF0VQH2WS5/YK9BCp0DLyDd16sr0sA/kEq9QlKxRD\np0AfzcMRncVHe5PSrdwM9LD/ALYJrKogVa7hColivxGV7GtF0wra0pNe5qErUCU7dYG7IHIUq0Kr\ncVMrYKypdXXmyilRSpVcyUhGbQLc4oXl/WRxLCh+4JeparW7FFJQD8+gQvsUx+o/y5Ay09iuk8e5\nPlSWSjowBww3km3FarJe/QCVFYY3JTHa5JzUBTiklRqsg7xH8EnhgDo/cm+VSbi1sg2/2Ak1m5FC\nrvsDj9UVClXYgUt8ynuFbWpqwvejZiYCXvQI3SYJ1UMxprv1NKiIpilRx9zPUfkCU5uMh+VKf4A1\nM0kKJ5Jum5UczdBU5vcqx+MnyuXSkfcCd5xnA0krv9AnlYBlN1uNY+AXshi4Bzyxn2JqflB3sBRU\nVexX6El+gCquMA055DywTqFYSX5Q1DqkUe2DUegRmMXKsKvPsapV5gzaiIJp7BP6DfLuDUTF0FKT\n9uxTX0JUqEYtzQGlTApqDMtTckr/ACBqkZH4sCdIq08k7Kkcigq0G+5fPsTvTFEAY/YoXoLXcHWj\n7hFsCpYUr4JqvIAVHuao73DvQqhSqdRU/sZkVqc7EFq2z0BU5jfvcy6XpsihyXPJR7FD/cB0uC+I\nKVEwupRd/uQSThLkNs0sGfY1DqALnklKU9pKrVC8rd68wHApKfsUWe1xUSvkDLW1wnC9Dbi/sZen\nGQKa19Ea9krNGYdKwaVodY3AVpVylwpyUKC6EFs9zJpzHUIpP2AFaJcIW716g3Say6BK7lGmqg9U\n2oEsy2553AppJK/wT+LFO4BMin+cwF3t2AX6knsg5Oo717gUpkmo5kuZP23AoTJKKjzshazjIAnD\nVBmY+QilewTN6rYDXwSbq3SAVGShLrgDUypnsK6xsjM8qNFSZm9gGe72K7rSSe2/wZcY7ALcJfNg\n1XvfYFLoqvEVZ24fg/F8RRw+BxdXPTw9Wr7AcZpJOv7Hr0/RvrGpKPA+Jc1X/J1//wBpp/RPrST/\nAPgPE9f7Ou3/ANpMx3geGfb7k3SLHp1/SvqemurwXHS58LWv/wCk4avD+I0f6uFxNP8A6tGpfKLm\nO4yKvVBMZ9x9yjSh9cjFH9zFqm05qQULzR7lTPdBe1uQ1iMICzBdVBKVOxMAVa5JNpk2oK1kBOtf\nQzK7mpdTDUYuBSoKfuUtV+QZQ0/kosTTmbPBZmAgqV52FRRlG4BzeaMqko9SzyYA+zCkVNOpn4z0\nCSoTtuWrnck1YKw5oAylXaBRnETca/oBK1yXv9ynnJfcBSrD/JG75FD9CAJ5fYqehZBzAD1Do6A2\n8EnWQN6bwNTGl1mcnRNJTtuBmZuHRdGaaazVGZQEnygfNVA+Uhq29QNOIkxqkZ6v4BKY+QK36I1m\n9DMTTI2dAJx1Rl8zT390Zj1QRmuXXfIx6q+QbNRfYoH73KncSdQoTpYVIKZoPPAA+WQacD8jCm1Q\njMJBU1FYyEqWBXvcon4K9C/lgTW8GX5YF+5Vqo7gZzS5pb5JranMoXbIQqPxBNBim4N1+ApXQfcp\nbS6ZL/dgCl4cfoTbmHgHDU1LovUIv9zM6nSPcW8Z+5NLuBmNimKj5a/IMAapEBk1G5Rkoziqgr2N\nQoCP2Az8bCo9e5Xp6mYdegDczEKtoF2p6A9gip2K5fjJzZ9gDVHldawYcVZty0Yh80WEkU7EnQp9\nRh2KjaiC3WCS3Fz+hy6ZzNxbiOdyra5cijT/AIRXhZHmslPsQSTJqBTTb3wWZzyClOk/I2tfKBUw\nKhkEqv7HTFzOlR0FxDccqbgRNz1CaukgrSAwi5XDpcmBrm69BUzczo9pNO85Alv6inLe4UfQcUdQ\nLNak/QgmKOqsFPUrNoM8hp7hDNDOBoZpE5QUujJqkYuS9hj1eQCc/BTl1+SbcY5EvgCTnHYplbZC\nWypbHMCdr0CoqJrXCJqgQx6fJJRmhS4oSiVNeYG9LaN6WY0rBquCK1z/AIGmKfsZmEgbqFblfIK8\n2MTW73NJJrrZBD+ouQtkJVP3AqBSHNiTr0FvPqFC29hr+VJq3P8AICc+wE6/eTDk1WYwEQ5i4B/J\nV27jEfDBqsXkBXXFepJUl2JKLqg+WOmwA5UP0Mp5sOqkw++xnVMUApuQ0+xlpVfMIQpfAu4Uz+QU\nKtSjVwtar2JOg3YFEXKj6E61GaUqBKfU0nMJXCKPmLnIDlfBnVsabqZlp8yKmsFX2JuAmgDKi/7j\nLZmtnSNzSVJyArf8RZ22JS+b5k01HugpU5LAZfoPleQLTFZ9TU0BKLDLdcgMU3Dyw/kXX9hcQgMw\nqILOhppVCEnYCgzKlJ3ixtGXpV3dWCmENV+gTCKkRm4F87g9rmrRLKLqCIE8MG0+RO+PMHyFNLYJ\nV/QO8cxiGApOSriiVShzOdicgNlINNqPcmvUpl1pmQJWrCKX+5ddimSgahBE2xk1zCV1fsAOvTcc\nU7lRC4AzTqX8C1vZF+QQFF9yqPlbdRSbAy6ZLNFIxSindla1tgCOZV9zULFApOwAuaqMJzBVuVIt\nXIDDmLmoSJVHd8wCHe4pRqn8qO89CaUXqu4EtLiNgUWfU1vAd8wgDePYnu1QvP8A5LRZuq1C/wBw\nCZFO6BR+4uoBe35BVJt0pYZSuASkrhqbnnUmpRnUsgVJvQXdMxprEelzSbQDDX6mayM/yD6gWQXu\nrC426EwBWH5wiSqpuNlUCVLlEugOexVnvYDVc0CJpWgrmVwJNJJ3SFwFXy6hZtWnIFOSUVhdgtO5\nvh8Li8fiaeFwtGricV0WjQnqb6JAZmGOfk/S/Tv6G+oceOJ47Xp8Hw3/ALH/AJ8V/wDtVF3Z+i8H\n/Tn0T6fGrR4deI4q/wDm8d+dzy0/6V6GN/EadeU8U+X5d107T0fhfBfSfqf1CnhPC8Ti/wDctMaP\n/ucaT7fhf6C+paofjOPwvC6HdKeJr/8Axhe5+x1+I4j0+VNaUrJUXY4PiN3d8Hnt4q8+7ER92tdD\nvL5fA/oj6Bwkv7/H43idV2pXDX/419z6HA+j/QPDv/k/TOE3/wBfF/5j/wDy8xtPUq6XTODa4urV\nSiaeWZzq3nnafq7/AEax0y9vC8R4XhaI4XB4fDdv8OGtMeiOj8Zx4Xl1JLc8L4j/AN+hdW/0Omlp\nLz7bUXuc5yn6dY6PW/EeJ/8AqauyRheN46p52+Z4fF/UfD+E4a4niuLp4bf+nSq6tXTSqnw/Ff1T\n4ni08Lw9HD4U/wCrW1q1f/bZFiJlOGvWIfqeJ9Q43D0+ficV8PQr6tTS0926HyvGf1x9L8LOh+L/\nAOI1r/bwtP8AcXqo0+5+f4v1TV4jSl4nhaOMsf3NPmXaaHHz/S+In/c8BwX0nT8QdViPirM+mCa1\n6cPzh2+o/wBf8LjyuF9M4HEVvN4nRo1e2nT/AP1H5nx3jl4ziLiPw/A8O0/9PhuH/bT/APVVn3df\nhPoHEo/Ba+Hz4fF1fDZlfQPofF0+bR4jj8LlqS1R6o9FNTSryraPv+WU6Vu9fls/NO63FX5n6LX/\nAEjw9T/+H+o8N7LiaHp+NTOHE/o761pU8JcLj6cPh8RT6avKaxr6U/FEeu37uZpaOn03fGTms9xl\ndj0+I+j/AFXwqf8AxHg+NoSz5G166ZR5MxNVRrJ3ExO8TE+jnGGm8egzJhNzyGZZQynJZbmpnncd\nvcBd/mDGOeDX+V8YZnUq/YCUvuTpco50Lyu+WUEvqxVaIWt4o5L8QRRyLKnFiz0KHFb5AnZUqZrJ\nq8QGYAIU/JOYewqZKCDLXKVsCq+Yu/6lFf1KihTPowhzGw16k5n3gKImudhlL4gvblYrP4CJWSfo\nO3uZXp0FRtWwDavqwdKZwXIqzKqtgMtZjuX5QYi1iSc9ADCzsMuOaJpYtyKtK1wAt1ZYCW+9C5va\nKgLpnsDdxomoVfkzF9gKd/YuWQ3Jt7Aa0xFQpllWkXJNyBcgHlZPAWn3CJIJj9jQOk7FGVPYRWeY\ncgGa1XIo2yWJsOnzTy9AoSUS6il63NRH3Re5EZhYqZajqbuwaUfiKMWf2KafYXaoXXKAKkfkhWOY\nzXZFIBVdHcmqcsE2uUQCemZ2uEOY9BgKKoewGk2G8+gSTiYz0A17KhK1QTtWV9xVQDy1mOwwkXeh\nK/LAC0k+VjGvzKIU4g236hmlQCKfklqjcXaNzP4gJOVIOpOOxaougDojNZuNPUsdwCJdf3CN1fco\nm/uUJMoOoTC6oZuCzL6BFVdQaT6sYSsURJUHkrcUlAxbkU9kFMpsPNTkEOKU5F6wQTX7l0yScuH+\nMqdCjaTu+0F0q2ahN7RQzHIgoRpNTyCrFUaCtQv2JKGSsO0sgaV3BwDdwlAP5BLVUOnclAC3SArA\nqJrUy2ouBrS4va5tNHHzVNadVa1YHROG8i9LUO8mZ2ubVgBqF0xYIz6mnhmJvADDi0bk5nkDdaBQ\nBd+YNwwe9uYquegF1saVpVTNsj67oCd+ZNQnJXmvUvjmAVi4aUtKhejNUtkorQAlTehWorGqOXPY\nFanqFCn9DX5IL2vBpJVn1A0mlYZ9TMQo9SVa43AZf7lK5zcO3Y1KipAKIj1GYXN2ZfORSy7sAlRU\nJc06k9MOX7BQDU0KcR0YJtV9Cw+YVpU7EnOrnkFJNw0BJqqx9xzmA6NirUfUDOqoqB55wgiqnsBU\nvjmM6Y6FVV9S6U5gZbq9zLtLsarnANrHcIzPpBVsaU0gG60wUZKsSvUVv7FaQMtbd+g9BVZJpOsg\nEYXYazD9SGXn1A0tydHBKLO5NYSICZVbBKqaibfjMuJ+5VN4Vp9wSU07gav+4QW68xTu55BO3rIq\nV0ClRfJpXrYyvQ0v5INNRX7lCfsSi8NDml0FSl27hdt3NIlMRBBJExmkFFJKM17bk/5ZoKSAQ7AL\ngzMYrcB5TtcJcgpb3Jxj+QrVeqGZVPzcyqsMQELTwqXkkkEP1qKj9yCj2Yx6ciqrMVv6dQqnIUmN\nxur/ALleqsBReXbJJXl0RKpOMWAuc/oF1zwVO01GifLdADhVCLv0NUj7me1Sin9Smt+QtQZsBpp4\nuErGSpZZIgqyox7GlX9Af5BX6AaczGG7BQJa6lLmcAXNEpanP6E2or6g2nUC8yNaUnz6GVJpNTsB\npTEZJ6Xv3JTEDIB19BT2qyXOQlx+gCovsVHXbAXcD1tAEosUQNmSoqAViXlgoRJSANTcN/xVNNtW\nqZmOYGcRlbGXGTTabp0CmGAKsYQuNrVDMElFLUuBOLXLlSS7i6WtkA69yROkzYU2rAFxVqKnUGqb\nwSxaMyBRWgU9LjWVvuMUq+vRASmeTLMBDd/Yaq3YCxsK0atepadKerXqcaUqtvkke/6R9G8Z9T1x\nwdPl4K/8zjav9Gnp/wBT5H7X6b9G+n/StKfh9D4niGo1cfWp1P8A9Mf6UY6uvXT25z2j+WlNK1vK\nO7879K/o3xHGji/UdT8Nwmk/7Sj+7qXPGn5P1vgvBeD+ncPy+D4Wjg6XTVqVderrrdTTepuqTzBl\n8VTEKloPFqa178527RyeiulWvLd2erW7d3dgvKt28ts5eZp4nY0tWtvkZtMDWnN6LnJjzOL05o3q\n1cOyuroG9bX+NAsM+Zux006ohJtanyocnKamr/NjroSal0WXYqy2lq06k9Up2TaX3Pk/Wf6j4fhf\nN4bwmtcbxipqd9Gif+qL6uR8763/AFG9T1eD+ma0tD/x4viZrz08J/LPgpaNMRMqZTVzamn1t9Hn\nvfO0fV6P7vF4nG1cbi69evian/lxNTcv9Ea1LU3z61OGjVDnTpiecM6tatSXmSO5ctrW4SeluecC\ntWqP8dTXIxp1+Wjvho2mnqv5ktyDppUuur/La510f4P/AC013OThUeilk5N6Yad+zkg9OnV51/ip\n3bf6mnq4ml/8vU9GrD0uDip06auFy2N8PS/LPmfle8VA9vC+pfUOFEcZ6lWjqb43i+D4lL/jPB8H\njp51aV5v/uueB6tUwrK6uoNaHqjlsThjny9NkzK4v0f+mvEv/HRxvBa9+G/PoT/9OrzHj439G+Ka\nerwHiuD4rTjRqf8Ab1x3lHvabsk/aprTLdV5XjVZmkX1I5Xn5+1/2kxWen02fl/G/SfqPgZ/4vw3\nE4On/qemdP8A96le55Gtrcj+heE+oeL4Srxf7nDdHp1LzL9Tn4j6Z/TX1HzPj+GfhOM1/wCf4alf\n+7Rb2NK+ImPfr86/hnNO0vwNu4V/Mn6Px/8ARP1DRo1cb6bxNH1DgK+nR/jxUuehuH2fY/PcTRxO\nFxNXC4ml6OLopr4epPS11TqbUvW+9Zz+/wBHMxMc2U4+GatTIVkk5nODsWYJLuT9yn1CJzNyivLc\nqz8Et3cBVoeLBTuslVLraoV6gTuOK4wEqVnoNIh32AvLKMx/BtcwajqBmmxOv6jn7lGVUAalW5k5\nVxjZ1JtgZwS6FzsKlU7oIljATj3GkdCrH3Ay1b1FT2VZwWTVwMNuxLeB++QtmagNuiyX5HMlb9Ci\nlKyATT4By6OhNO19hVJAzhfBQ6X3F5Dm+0ASUiqctjLTbUOP0NSVFOFZXBYToNGuW5PHsiCpipOq\n6bl8Fa2c9CirPwCWyFSX2qFWKZFXW4XS+BUUyQLcVbKdwbSplFpvjqEL5K1jM3NNPPYy1YDNO4S4\nNuP0Zzab/IqUBfBNx3LFchBTIp+gOIoWZugNc4oDTuyTpyJqtFCAtt1YnT9Sdvxg1TlzAVIrU3z5\nGcbVKn7gbh9uRZaBaoKcbgaYPINpuu8lPqBO4RT5Hm6tB0fYAr2DV7WNV6oGtwCE+5aVOBSl8jUU\nldgMPTaLA01TOWdM1dQfWoHPUt0pMJbHZ6Z7nOIdKlQPoVBgIeQFpJGcmrdrmXN/cBXqwr1bJvYm\nqJ7gFa1sX8yRTz7FR1WpVn0Ka7lNfsD+GRTml/1Lr+wTEDLYVpOly8zx3My3NCVHbqAz7CuYRm5K\n/UgVbkSdLFWJIA1anRPJmw6ruewRPyVFE3uaSr0JL92KtGQNp0lzVegy+2waEsUG1WRUwWdtkTbX\nQzKqwFvb3Bv8wE1DuAqkV9RsoiHzCwprEgOa2xBO9gknboAivyQjCoT32Apv8CE05kvNP6AOOZMn\nuVrBVd1FOvMIqS/JA0rzifgG3NCTUS7XqEuU5qBpdZe5pQsmKM3KjqEFUzSdlbmZlKtimaganYzm\nDSVNlckl+YIqSeSikoY9QiXAVTWWpoLSTlWLmTefYAoW5eaWlgU1AB8DF3kUlMl8WAEv1KDSVfuE\nKAMud6MPK3TAxW3XuKulkII9cg1D5GsOOwewGYoD0q+DXJUWSv0dijP4mMEkvWwwqIAgrtVmKGm8\nmXmQpVnuTb1L9wz8A9Kaa+AiTlTflkr84JJJQ7FDz6ACTmLIaYrvI0t6CstACXeCjs8jEUEihRPw\naVMgpUNM07AKff8AMir/AHBWzS4prNcoKclLbj2L3LbmQSagr8y6UJFEm2r2DHTYHmSXoBNsGM0X\nW5l2AuSJcmXQmwJ3L3KPQkrL0AlNI7jEOtQjJpR+cyBxyQUjrYYhxFbFWaBVSs+gUhbK6KEuv3J4\neQFXUUQNuadAn9BVOTAYWCcRJKNyh3QFS4RJqHVlRq4GL5LZo01XdMsuKooy/wAZO7EJURkCTpOS\n33DkNbgVKVKaXq0V/wBSsQXJVKzj8oXzQFurlGulCUd8hO1BUZagg1e9tzUKE0+kmd5f6EnEgamv\nT0GFMZMyoqScz8gOdmHwrIk2+jwTttiQFP8Aka4QQmuWw1/YCpaCW1Cb/wAepapQBKiMmWqR8i3T\nZMHQDMF6k2yu6eoCrczL1JNJ3dFQ03hUKqhdQBduQxSZ3SJNQvgrVArr7Aq0fYWqzYL1AqroDVeS\nl9DUX9upO3zuAbWkUp9CpCPq/QP6f8V9Z8U9Oh/2/C8OHx+O1PlX/Tp31PBJmIjM8h5Ppv0vx31P\nj/2PB8Pz6v8Adqtp0rfVqwj9Zr/obwHhOBwdHiuNr43j9epa+Jp0NaeHp4aukrudz9N4LwXhPpfg\n/wC3wOH/AGvDcJeZ51atX/VqedTPl8Tj6uN4h6tev/LX/lqzCwjxaviLTtTaPu9GlpRM5tyh6PD6\ndHB4WnhaNGnh8PSlp0aUoUckh16nZXyeXV4zw2mX51z1anUOJ4/w7zqWiawqs8/DaejbirEu7fmc\nJpHLVpnU41ylaLFw/HeFVNPC1LaYXyb/AOL8M3Orhd/N+heC3Y/WrHcaYj/FqVds7JvSomuTh/x/\ng9Lf/JnTyZ14HG8H4nTxHo4evh6tGh6tLbpJJraIzMH6tZnG5enQ4iu6HQtO/vU58LX59GnzJaZy\nndnXT/br5a7uHBHc7NaNHCepJTLPif1W/qfCerwejw/F4Xg0v+Z4nyvy8Sf9unUrad9z7q0w40xp\nfI9PB8X4jhvyriPyxD0teY6rOJzjLK/FPuz8pfy+NLUTCVF5YtyZPT/kplzlv5P6V4r6d9A8dp1a\nvF+D06eI/wD5/A/5Wvr/AIQfC8X/AELwdfm4n0rxnndY4Xif8dXRa9K+xtGrXrsx3jnWY/Z+U0f4\n64u38HTS1MHTx/0v6p9M1eXxvheJwtLpp4sLXofTXpnSefTr8iib+p3zjMb+ixMOziWqTsdeFqcJ\nNQ9nQ48PXK/6nfY68PXh+xJV3TnTNuo6G8P7Mw9b8m8UVIHh6mnVRJyO+jztqNTiX/jqR34fnlyt\nNbRscNHl/wBrSaw2d9OpvTPlmMZAtWlO2l9UqIXo1abwwXF0aW0tUvZ0Ya0m5bemvQsI3o0PTL0O\nNlg2m3W2qJexjRxFpo9U9UdVoTVFXPl/QINC1an/AJRTbJ00eV6Um41L/TqzGxaXp0rzaG3GFdPu\nZ0a+I9S08Oq1XlZEyREztEZa0cXi8PiTw9b0NVlSpWx6vE8T6X9W4WnR9W4GniaUvKvE6f8ADjcP\no1/BeG8Jo8yXitT4ejU6+SvyeP6t/Tf9RNa+J9K8Xp8V4dqvB0LTwuKl8avVHMTSbR7UVnpbl9y1\nbVjeJw/P/Xf6d1/TNL8R4fxGnxfgW7prTxeHP/1NFJ6o+POd7HTxPD8Vo4+rheL08TR4nT/q08ZN\na121nJOT30iYrHFbi82M46bGYhiEc4JYdzpC1O8IoUOScXRTS9gKa0QV/Yk+zRPM13IMxyobigN/\nsSm2MlCuhMH1oVd7gUPBU/YJoPL8YFyYWuVP0BugQrlBJqsVAr9ALmPQqR0Jr12ArVuxa2ioQmug\n2rdgFJcYCV+hqHFag5bsAcvYsRE0GN1UgDfM4CYXMqzSklu1StADU1ZupKlbBFWtxmXsBEkr1oF7\nq5r+ACK0JR0Lmimr9UBXcl+SZmvuM86FRp3QJz9yz3BTNQJtqYKapFXPoD+SKZrzX5JrTYxSmxpN\nBGpSVPczevYVLvYG7yuYA6bIzY223HoZemXzKMNZCJ/U208E1QIylWM4BrfJtJXCKVAFe3MsOcFF\nZGy+ACF39wvTY1DendsIAIpVWsUDywWIasBRzKYfWgRshTqndcwKs8gs49BnIOoCm4Vbgr8xWzG3\nQAvyzyLBdA1UYCo7bDOIMpx1NTNwK9XYOWRoVKAGJMPTXl7nSmfQzOwGY7g4NMxCxeyKizbAVt7D\nMQwmL3wBmeVxj1KXvbYpfYArfPIpdvXqVFahWiCjaTVLIXTlyM+8WFNv9SBdaK3Ir3wChdS6XQGk\nm80IK0zI2UBUqd8DChBFBVoILkvyDSfuHJin+gGNWms+pRHxU3HmpAPS05xuVAkq/lBbT/IKHKih\npadV3ZAa02l9gbeCu3ANkUXIrIzzsgFuGFWviC2y2U1AeasTrW/QIJlDPY0sUqjNZGsEDJKoSyiF\n1AXbqUqfsS2ugU9ZA1GIL2CiczUU3kKVy+AXl78yisLoVfTLAm6MynX5NtfsYQJbWpbyan12Oem8\nSamG/kIYT+yYtLaS/wApjKmCmX2A0sbLJcsbjDJrnyIqdc/oKm+NzMPPdDF9gqmapBf8wOr2J+kX\nYBWZgcWtUr818DzkCUO4r2QNJb1KVbuBqyoTuzD1KuyvJTu7gMJ/YHTrYpo9iSRUFqfyLb6EmgIK\nH3CcFzGZ/QKGnM33J/wxUX9CtARYj2YYn3HDeQdr2qVWW1VoUv8Aqky3R/iNKWomgQUkVVF5UrE5\nAVh+w1vzDSm1FhhO5FUYv1J151sTl47mHqqBrndGk0+plOf06GsKKtgaTm9OopbmVheppQo2Cmfc\nofbIZVxoyCxYHhOO4xzMul6gNLBNJJtzuU9Ci26ZBrlGw9Q62AHYuUlH5Yor0AEvZmtN62yZNVnk\nBfaw1RQrFFKhViCdKZpJqloKVLp/JEDcKtglR2uTmFTFQd4QUO1cFMurbRX7lWXgI0maVaGNPWor\nCQVqFK/ES3XXmGHS5ez+wFQHvvgelQbr1AzTtuKiK+pKJCK/BRXXMlToFh+AGY6EpwGy2yMv9AJv\nlzLlgprzz3J7kFnYcvZ7ElRUqTWEBLmOlbgm+lKD5lsBNOpVTjfmTpXsZmQN2oqIkufYytVs0NSn\nkDS3XoXUqXT/AIGL+iAItF7QDvGBlzbrIRvsBb0joFq3F8leyBzPcAdE6VVQido3HrSOYO8qkOAN\nRTfqZa5UFUSwVZrTdgEY2GrSWOhRWFko9gJ3CadrczV/QEqwrAV623FLdVCxvRp1a9S0aNPm1aml\np0pVbbogPX9F+j+J+reP4fhOD/j5q8XiRK0aFfW/sf1XwPgPDfTvCaPCeE0LRweEr31atWdWp51M\n8X9M/QdH0T6ctOtT47jJa/E6lWHjQntpPtcH/mcXTNNN+yPJq34pxHKHUbRl+Y/qv6lr4XE4P0zh\naobS43iO/wDo0/c+Dr43G8rWqW7NTRGfH+L1+M+peK8X/wDV4mryf+lONPsjk/PFf8q02MsQ1rnD\npo16051f68I9GnV/ktMddzzaNWnS3P8AqcV+x0T1eaNLcty3yKr2adSSnU4WW7nRcTR/phNOzZ5U\n1pUOry1U6rXEJP1DiYb1NxaE8I9nhf8Al+D4vEiNXEfk0tu6R49PDepqNaUuIqeziQtXD4Oh/wCP\nBVZqnqOdSdsNNKvFePLd006o/wAYVoVcnXTr0uNLTl0k8/8Ae06Z8zg68PWtSmnWXJg9Ux5PRp8u\nmE6P3OuppJQ65PPo1cPS6R1udHqcRqVNxlnMbtPVpemWpa5mdWuHTRzMaot/k31Dz8ZQlRRSksuV\nw9fC+ocThrya9Xn4Lo9Guqa6M8Hjv6d/p36lqerhaf8Aw7xDtr4ST4ep8+Hb0g1q8TqnytNKZfmp\n8lw9c6tWuW1uoLEzHKcOLaMTvjE94flfqn9N/UvpU8Xi6NPF8J/t8XwU3pj/AL86e58/huHL1Uuo\n+T+h+G8bxOE5U+V/6tGqGoPB9U/pf6b9SWrxH0zy+D8Y6vw7ccDiPkl/pb5U5GldXpf6wytW1Z33\njvH8vyi4jo01PM359TilPc8/ieD4jwPidXhfGcPVwOPpvw9dKb6XbUuaNaddG04W0zBpheb06Uol\nJNPB6NGnTCScPCg8PCjU35X/AJdbnoWvVocuU+ap6oI9KSX/AJtVzhofPwm4VFs4OP8Ad1a3OmOc\nDTVTM1TTQ2jeSKzacRGZddK4dqLrY66NGpwtK/x3TlR8mOFwOC482mW/Q9XD0+StkrGdtT/H7vRX\nw8RveflC4XCS1atWp+bmd9K0p3XlayrBpadXSco6ada/06mmtOeRlMzM7tcREYiMejqlKr/piqdV\n1k7cHS9LWvhao1K3J9UctDUJQnptGH0OvC06tCbUwsPCI4nlLv4jheA+qcL+x9T8Lo8RwlRanTia\nH/2a9NV2PzP1L/8AR3r1rVxfoPiF4lKr8Lx2tPES20cSmnV3g/SaNTbmY54g9HC1+XWnZrKNdPUv\nT3Z27dHm1NKs8tpfyXxXhfE+E4+rw3i+Fr4HH034XE0vTqXrfqckrs/s3jeF9P8Aqnh/+H+q+G0e\nJ8P/ALNT/wBen/u06lXS+h+P+sf/AKOOMtOrxP0Hj/8AF8FV/wCF4rS4y5aNdNOvvDPZTxFbbW9m\nfs80xNfej5vxL5FJvjcHjcDjavD8fRr4PH4dNfC4ml6daf8A3JnPNTdDTNuQTf0HFXQJw77lE9yT\nV5Jc33KV25AMUi5fjSCXI4aAFERJBRqohBTmULqFY/Uk6cgFNzyW5UzTYE5wURyAX+NlLbcdCpPL\nYrJp9gHkUtOiAU4AbKgWqHMfefkCfuwaNO24NcwMr87DTOLInX7ItWzAy/cnKmMYGyl+oZ6AUY9B\nwC9jT/gDN26yiduTF2M5lASZNOOZOlLImkksoqKaPkWb9QU1WBhQ07gEOK3SyTpgslL3AniewrM+\npJNlCsQalYBtKdhygaxXmAfJNzCVsAuVhSrW0lBkmM3pUnf5AMV7E1DdKPKHPUKdUAKdgz8DM1BT\nWGBdewc8ocS7g4kIslKsT5lPtgCcKquiw5tkvkHaAJFtAw7gA0mpTToLxGAAq1gG5+UxbatUzKiq\n7gKY26BEfqMsBhg+VSbRT7ADdLlLq8g/3HrYDLtJl3vzk03DM2qrTQqAnT9i/gHE16QBJUJPkX4g\n3AnR9C29iyVCjch2LkOehBS0VEimehAKFOIBYtJUkK1+e5WBb3Zr8oBIVcLxuMZIIfgUlZ4sKsAd\nZ7C49rE6OL5IDPMq3XcW2um5mYwBNU+TOxrf3MtqZtOwBUaMqoarqAIUn+pJVFTewEl1BIaJ3JVU\nASsVP1JppwTkBM6dWpz/AIwkzTxOClx2Apc/CHlYz+QMgSEp27Iu4U1uGpVoM8ilWvuAKiWEa/2y\nTWIFaUlX9QDlkdK/gUv3GGkAp+hTTZAqWLreSDSopyCvTsMQGVjdgDmeQ0ZXU2Swy5+4VKV0JMed\ngj2yBOQnSqQLcfFDnL/YBbreg6XsYadMpZJOiwVHRO0yVJ7mJY+ZNAbva9oBXe2wTKqVf0INUdwl\nd7VBuzJT3wBTSBdI9wx8qQmANqO4RKpUFqdX7Enb5RVUOVPqUKZNaVP6lFOW4Gauxdc1NJYjqURU\niBb/ACS/NhgJCp1XzJh6Uny5G8fEFFYs8AEZeMDpbkkocdxwBrO2BUZ/JC65i1zqBUSgpU7lSOe5\nL32CmI/QI9RmtKFmb9CASb/KAvaZNN0jJh26WKHmmDm3MiXrAFWduZbyvQopyJJoCZUSK3cotWgU\n7bMVCnIJDzxlAS6vkOJv1BcvcutNwKJ/WAdufMaYCV3vJECyDcGn+Mo7sKyrrmaj1Hy8qZGV3AHE\n2J74+5fGwvp3AzXK9RclDfMmAQoqZaU169zUqGw7ZKM1uvQafoSWRp2AMqe45tmCCKAVZY0nnuEr\ncnIDSZzgcszNazFhcZyA0Tn5Gaz6mJlQ6tD5qRBBP+CnOdy1MIygLEDpcJQCs4NaEmwOipVu4q3K\nAeMvmStS1oAcXow22dJKt8MKLAE07Oqn4CI2mRcztNglOq7YAHXbME5v6IYpOfYEBS74yCeXUZ3X\nYlbkBKrsNPQlSJ9AWAGyeSbhcxiQUwAzTrQ/Xf0F9F/veJf1Xj6Z4XAfl8OnZ8RX1f8Asn1Py/gf\nB8bxvi+F4Xg14vG1LRp2U31Poj+ueD8LwPp/geF4Pw6jhcLStK57t9XUx1r8MYjnP7OqxmXbzeas\n3Zz8d4leG+l+O8TMf2uDqWnV/wB2peVe7Fa9KccvQ+V/VfGfD/p7Vw0/L/xHH0cOmUv83/8Asnkz\nu7tG2POIfkOCvJo09M3Nt2bcSqHOdCTUzqVOg+eLKdTok7laFJeas+ZuiOy1xp6nLRC/0qXu6tSS\n1tNpKHu3LKj0edaVCrqd5ob0cVWUUypg8q4nl589z3+C8Nr8XxVwdDUrTMclgTOIzKYenw2pcLh/\n3tSerVbhrds3w3w9Kb4iXnddTrLZz/4fiadTfG0PT5KadMOhlcRTRqF6+5ha2ZevS04rXznn+Ho8\n+jW40ppY1HTS9em3+n3PPp1a3ValHODom1Gp16XOMtJh6U9ETC8yxUy9Tc+ZqbQzm2/9fltvcxq1\nKfM9PSf3I5iHfzvTV35CuI3W7xb5OWnVKp/ju1U29SxqldMjJga+Lq041Nu/labDRr4ba1PS9OrE\npNszr87UaHpe8Fw1r0tYSi946ouVxGHoWvSm9evRDSjP2LTxKf40b/LHn1alq1R5mtNkrpnV8Nal\nSE8NPIy5mI6vT4rR9P8AqvA0+C+raFxNK/8AK4+mnE4b/wCrSz8d9b+g+L+i8Rf3P+b4LiP/AJPi\n9C/xc2061/t1H6VrXpc6ph5Hj/V/CeD8HxNHj/LxPB8RPTr4XEr5uWlZfQ7pe1ZxG8T8P4Y30se1\nTHnHR+L0cTRpSbr6Hp08drTSqvB4HxfDvxHEfhVr0eGep/2dHFaetaNtTOujWvNOmJX+1yj04Zvu\nfR/+F43F4nB4+ryauLojhcTGnUd+LwuL4TiPw/GXl4iqnfTrX/UmfC0cVLENvnc+74P6pweNwF4L\n6i54cxwuK/8AVofJmOrSc8Ub94/DXR1IrtPKeo0+bzUS5wanUnC0vqqmfFeD4/gta/uNa+Fr/wDK\n4+n/AE6ls9mZXEhPy6q2m/qjL0eznvG718LV56alCisbo7rQqan/AJaYiTy8PXxaanD3yenRxU/8\nWkvNgM7Q7KfKlpdFSv3Omh69C8yb5rHY8uh6tNE4xB14fF1qjyHEw9GnUobi9X15HXhtx/nbHI83\nD1SnDhbarfsdNPHf+lrsyuJh6/PomJ8rjJrTxdWjVK1PS8PJ5dOukaqe6H+658qVfZliXHA9Xj/C\nfSvrfDXh/q3A08Z6acPj6f8ADi6H/wButVPxP1v/APR79T8GtXivpWr/AMR8HpT1PRpSXiNC56F/\nr/8AbXkfr9HE1NNNWzk7cHxHE4LWrha41ZW5rp61qcp27TyYX0Otdv2fx5zMVTTaadGmsMs27n9X\n+q/Qfof9QzxPGaP+F+oWXjeCktTf/wCsVta6+p+C/qD+kvq/0KdfH0Lj+CmNPjeDL4fL+4r6H1pz\nPZp61b7cp7T/AAwmJrOLRh8UuhTKdb5L2NhJzzyKtzV4KcMbTsBmGyzyFSZYE6/cKe4xynnIV2CL\n5GLrcJzuyd4wApRyJvmXKKh7AaTfYsfqU1DvgCV47mkqcwV+Zqy3kA/28wfMrou9MsAfsFzVIpX9\nwde4GeTdMjeZimCh2RQ9uwFHtSn2Kq/cnT7E6t/cAdqBP6j+Ik3ZexRS652CvpccqfYugRQ6RuZf\nuMUKMqj+AJq89wlvqXK5RX5AYpzRZvUXa9EFUyCmaZKw2f2Cc+4FCvllEBuxduSKJXll0uXvQHPc\nD2fSvpfiPqfif+H4D06XD1atettLTpTSrFT6vjf6G/qDw3CfG4PD0eM4KX+Wrw2rz6kv/wCW41ek\nnyPp31Dj/T/FrxPAiYjVp1W1aXfSz+g/Q/r3hfG8P+94XiPh8bSv8+DqcatL7XXM8uvqa2naLViJ\np6NtOlL1xnF/3fzNyp0tNatLhpppp7NMm/Q/qf1f6F9K/qHRqfi1p8N9RiOF47hJJt/9PFX+9dex\n/OfrH0f6h9G8Y/B+P4fl1/6uFxNNeHxdH/Vw9X2ujTR166m3K3+M/wAM70tScWh4ccnQt6dyVmty\ndjZwnFJgOt2ScqMlNb9QKgqENboqzS4A6Z7g6v7GsUB4hVAmD9huzM+oA1kkl+w1r6EmgFqs2BPY\nm+YSv2AadcF2qTuTfbYouQYJzDeR5BGXUzg3R3Rlp9sgZgzH8mu5Q1+gA5vPqHlVfy40noTntgAG\nQpKiuSa9CjSpQn7E7FakECrhMOexJw5FVgBrb3Cn6UGIo/UlYBVe40dcAKdLEVropFRv1Mz/AAKe\nwDYc0D8qUVA1iV0JVQLaOo0iQCMAaac87g1yAy3T7A7QacU6BHsAUwxap0yVaP4BtAUp0GnffcJt\nsU9wGW+ZSpLE15FAFMdR5/JRhXKyqBc9tie2xQ7WQdbAT9xlJA0k+Qw21X1AlDFLl2Czq7iq1sgp\nblEr/qMKJGlt9yB0xFCXKnMIhXhktgGZ5jKncz7wa7hVf9yUQ80KlMp5GgFDnfYnuUbh0sEKrSa9\nC5XJW2QNw3uBXrknqVjM1vR+xNufkKHqdu4Y5QVN5KW6+pUV3yB0wTt39ilfnMCmainzqDnYrd/s\nEaW/7Gk4Mr/F1dxURcKZiK02BUs+4T+40IJvuE4wTazMmaxCqslGpjNbJlKklPdWKFnoBpNRWsio\niO1TMrrsaTW8hTG5KtYLoalKCASnm5KHYqv9g5RDCBz1Qyn0KzrJXp7IKsT8CvbcKRVxApewFlLf\nI0jnsZrPfApqQGYVVYk6rkEqRpAVpXtzRZuFmScAVFUy692arGwEBAfmw3f5gnLyUEwoQpyvhA0i\nAfnCLaSt1G9bgSdFysMxz2BKtSCqPYm82JeXdk3SfygDWCilgcN09SmU1BBNLHqSSrzK9HSNhuvi\nAi29kLieZT6Mp2YVZgMxnJTKuF7eoGvkxNTU749TM7gQ077GZXclLhgai9alDXNGU8WNzKj5AHM7\nRgrFCKl8/qUD/YlWi7DPmMw/3AYcRcGU3LADzCa1KV/JZoAxX9AtW5flRlNRNcgC2ippNIypRpRJ\nB00uUN6Spuc1SPg3Tt9gJ75e5S8KrGkqf3CsOJgDLeWKiXuWJwTvRU3Ay0q5exQua5i5am7C/wAo\nCYVn7mvLLl9wi/yAuaKJ2RJVvfdE3eO0/Yl15eoGpBYWMlmDp4fgcTxHH4fh+Cp4vG1rRo0rOrU4\nA/Y//o/+kSuN9U4umrb4Ph+n/wAzV9j9hxVTyvuZ8D4Xg+A8FwfBcL/RwNC0J7x/q1d3UNerzPVJ\n4dS3FaZ/+w1pDk9SbhUr6Hm/qH6V4j6p9L8PwfDa9C4nC4z18Va9Xl/xemF5aM76oeq1NjGvWtTr\nZXwoMc43aTXOMbY3fG8P/RmtadP9/wAZw9GnGnRpeqfV6Tv/AP4p9O8y06vGcZxfy6NKX3PprUr1\n2SW2w6dWqXp0qN+WxeKe5wT3l85f0r9Ja8ujxvG0xvo0tfBz4n9G+H1R/b+oaW3jicOF7aj688PQ\nk9VWsIW02vLd0iBxSnDPSZfnuN/R31TQ/NwdfA4620a/K/TUvufO8TwPH/TeIv8AiODxOBqdNGvV\nKT/9Opf4v1P2ERrl/wCpYR+f/rL6tr4mng/SNGt6vI1x/EN1hx/ho61ktbTM46GLRjfP2fO4f1fx\n2jSv+dqh28zTO6+t+LaXn4PD4q/7tMHxOG9Lfm1zCsb1cVUWmXHb2OppWekOome773D+s+Ca/wCZ\n4byvfh6vsdNH1D6ZxWvLx3on/bxF90fnfM7Oehz88V00OJ0qzyzDqNS8dfq/W+XXr0zwXo4qw9Gp\nN+5z1t6P/M/wb/6z8zw+NrTerTr/AMllOH7Hv8P9a8fw35Xr/u6F/t4kNfEnE6No5TE/ZpXW7x9H\n11qlUarVYH/TLdeaf6Hl4P1L6fxoXiOE/D63fXw3Onuj2aeG1p/ucDXp8TwXnhr/AC76TOYmOcYa\n1vW3KWP8dSfk02rVjo1a9GpS42cIwuItTfk0w80J6tWmG4W92Hfk66+O5Tmerg1oeiJnyt7HBtuj\njVtg+V9e+uf+HaP+G8LGrx3EV7rh6X/u1RnZHVazaYrXm4vMVrmdnp+ufXeD9PX9nhpcbxrquFML\nSv8Aq4n6H5Hi+M8T4vjvj+J1vicXE2S206cI8uvXr871atT169TnXr1VbbvLNadScUr6HsppRSO8\n9ZeS15tO/KOj0aOJix6OHxPN/qcNWPDpmrmetz1cHVomKpvui2hIezS3SFM0k9GjXp1KNXmSzk8m\nlrSvLLT2Z14b1WmVzUHJh9n6b9W0+H0f8N4jT/e8Dqo+HqrH/p2PXx/B6ODoXivC6v7/AIHVVcRf\n6uHy1n5962lEV3VT1/TfqXiPA61q4WqeE6cTharNGN9PObV59u7TT1ZpOOcPot6lpWrQ4TvsdNDV\nG6zh09A1cLh+I4b8X9Lf+F+N4ZOXp38q+x59PF16pqmnjBj/APeb2Ri0Zh69PFTbVU1fsdXxG9Pm\n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\nX8vn+I8ZzppT62/Dpr4mviatXF4mp8Tiar6tV+hnzJ1djM15yHmSpB7MdIfPme7T1KS82xiafYy9\nU0yUy29T9ah5nVe5iX7YMvVAwmXVunUxq1Uie5l6zL1Sq/klwZaeuMg3pd7ZOb1Bq1cy4TLGleXW\n9OPserg8jzOG18np4F6dTLUjDXTnL3eH0Qlg+vwE2kswfEfjvC+G0zxNao6pf5P0R20f1D4fgaVP\nC16lqS16apU1bnm1NLUvGa1mXr8Pr6eleYtaI236/s/R+Hb83ye7hKNKfr3Px3h/6v8A7nF1aOH4\nVr/HVqT1a6/4qcaQ4n9b+OWnVq4XhuFpezerV+hl/Z6+ccOPWYbW8f4bGYvMx5Vno/d6NU6YzcNe\nqNLnl6o/A8D+s/rOvhcbi/8AK0PR5VpS0T/qn/q1M8vif6v/AKgidPiFpm8cPR90zuPA60zw5rHr\nLGf6joRHFi8xz2iPy/c+KtV1ueHyzxdCmjpD5n5jxP8AUH1bzaF/fcPRodNOi7U/9Jy8H9X+qcZ+\nJ0a+O9XE0aPPw6aU/wDFqbLYR4LVxM8Vfv8AhpH9S0YmK8N9/KPy9P1zxOjj/VePqTnToa4elr/s\nXl+Tw+c4eeZ1N11VbeZHzSvue+lIpStI+GIj6Pl31Jve15+KZn6uy17sVq97HFavQ1JcOcuvnldA\n83dmJ+CTtuhhctt1+wTX7mfMkU5GDLXmrUlqm1DDc55FZjBlvzfnMlqWxh6trbBLKZdPM3aIB6t7\n5gxMB5kMJl11ak5gwpnYy9SSlul32Hhcbha48mtPUk3BxeJ5xEtKWjlMxDpw6tdKI9PBlKHWX/jy\ng82l6E9LlPep6dDrncxs2q9XBnVxLSm7dz7fA8s9ZbPi+Dn+7w11Z9nhdKQeTX5xHk+j4OPYtPeX\nu8P5fMsJn0NOtabVSlKD5/ArrW0Hp06mlLoufM80vRaMuq1qavGWcuNrhLDdGkTWlKE+bZy4urTD\nd2kCI3cdeteVqb7Hn164dXVX6GuJqhulLtnk4utZzc7iHcLXqmYpsjg/8uItCu8ofNiTHiNf/C+G\n18f/AH6v8eEnu8ncROYiOc7R6lrRSs3tyrGZfP8AqXiP7vidSTnRw/8ADT2v7nlbgzLzIrHyfTpW\nK1isdIw/PampN72vPO05L1ULzY/gGqWCd68zpw1JZt6GfMUrAV6OD4rxHCc8LiatOImkd6Hs4f1r\n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\nmQkrBS3OoH//2Q==\n--14dae94edd254c7b2a04f5f778ee--)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/rename-unittests.txt",
    "content": "A######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/search-deleted-not-1-3.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 5,7:9,11:14,26:29,31,34,41:43,50\nA######## OK SEARCH completed (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/search-summary.txt",
    "content": "* 1 FETCH (X-GM-THRID 1592225494819146101 X-GM-MSGID 1592225494819146101 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 1 RFC822.SIZE 181614 MODSEQ (29233) INTERNALDATE \"19-Sep-1991 16:41:43 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 19 Sep 91 12:41:43 EDT\" \"Star Trek Party!\" ((NIL NIL NIL NIL)) ((NIL NIL NIL NIL)) ((NIL NIL NIL NIL)) ((NIL NIL \"abel\" NIL) (NIL NIL \"bianchi\" NIL) (NIL NIL \"braun\" NIL) (NIL NIL \"cameron\" NIL) (NIL NIL \"carmen\" NIL) (NIL NIL \"jfp\" NIL) (NIL NIL \"jxr\" NIL) (NIL NIL \"kraut\" NIL) (NIL NIL \"lamb\" NIL) (NIL NIL \"lowery\" NIL) (NIL NIL \"lynn\" NIL) (NIL NIL \"mlittman\" NIL) (NIL NIL \"nancyg\" NIL) (NIL NIL \"sau\" NIL) (NIL NIL \"shoshi\" NIL) (NIL NIL \"slr\" NIL) (NIL NIL \"stornett\" \"flash\") (NIL NIL \"tkl\" NIL)) ((NIL NIL \"nsb\" NIL) (NIL NIL \"trina\" \"flash\")) NIL NIL \"<9109191641.AA12840@greenbush.bellcore.com>\") BODY (((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 731 16)(\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 31472) \"PARALLEL\")((\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 26000)(\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 18666)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 46125 2436)(\"APPLICATION\" \"ATOMICMAIL\" NIL NIL NIL \"7BIT\" 9203) \"MIXED\")(\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 47822) \"MIXED\"))\n* 2 FETCH (X-GM-THRID 1592225494819146102 X-GM-MSGID 1592225494819146102 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 2 RFC822.SIZE 137687 MODSEQ (29251) INTERNALDATE \"29-Nov-1991 12:13:33 +0000\" FLAGS (\\Seen) ENVELOPE (\"Fri, 29 Nov 91 07:13:33 EST\" \"just testing...\" ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<9111291211.AA11898@thumper.bellcore.com>\") BODY (\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 137124))\n* 3 FETCH (X-GM-THRID 1592225494819146103 X-GM-MSGID 1592225494819146103 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 3 RFC822.SIZE 679 MODSEQ (29268) INTERNALDATE \"06-Feb-1992 16:51:37 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu,  6 Feb 1992 11:51:37 -0500 (EST)\" \"=?UTF-8?Q?test_of_=D7=AA=D7=99=D7=A8=D7=91=D7=A2_in_mail_headers?=\" ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) ((\"Nathaniel Borenstein\" NIL \"nsb\" \"thumper.bellcore.com\")) ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) NIL NIL NIL \"<635267123319097410.36745.0@Jeffreys-MacBook-Air.local>\") BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"iso-8859-8\") NIL NIL \"QUOTED-PRINTABLE\" 204 3))\n* 5 FETCH (X-GM-THRID 1592225494819146105 X-GM-MSGID 1592225494819146105 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 5 RFC822.SIZE 24391 MODSEQ (29302) INTERNALDATE \"28-Aug-1992 19:12:35 +0000\" FLAGS (\\Seen) ENVELOPE (\"Fri, 28 Aug 92 15:12:35 EDT\" \"mew-law encoding?\" ((NIL NIL \"beatty\" \"cosmos.vlsi.cs.cmu.edu\")) ((NIL NIL \"beatty\" \"cosmos.vlsi.cs.cmu.edu\")) ((NIL NIL \"beatty\" \"cosmos.vlsi.cs.cmu.edu\")) ((NIL NIL \"nsb\" \"flash.bellcore.com\")) NIL NIL NIL \"<9208281913.AA24840@flash.bellcore.com>\") BODY ((\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 436 12)(\"MESSAGE\" \"RFC822\" NIL NIL NIL \"7BIT\" 22436 (\"Wed, 26 Aug 92 22:13:24 EDT\" \"mail from Wacky\" ((\"Derek Beatty\" NIL \"beatty\" \"sqhilton.pc.cs.cmu.edu\")) ((\"Derek Beatty\" NIL \"beatty\" \"sqhilton.pc.cs.cmu.edu\")) ((\"Derek Beatty\" NIL \"beatty\" \"sqhilton.pc.cs.cmu.edu\")) ((NIL NIL \"dragel\" \"sqhilton.pc.cs.cmu.edu\") (NIL NIL \"beatty\" \"sqhilton.pc.cs.cmu.edu\")) NIL NIL \"NIL\" \"<9208270213.AA21178@sqhilton.pc.cs.cmu.edu>\") ((\"TEXT\" \"PLAIN\" (\"NAME\" \"index.rtf\" \"TYPE\" \"microsoft-rtf\") NIL NIL \"7BIT\" 110 6)(\"AUDIO\" \"BASIC\" (\"NAME\" \"VoiceMail_beatty0.vox\") NIL NIL \"BASE64\" 20910)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0) \"MIXED\") 326)(\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 111 4) \"MIXED\"))\n* 7 FETCH (X-GM-THRID 1592225494819146107 X-GM-MSGID 1592225494819146107 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 7 RFC822.SIZE 2220 MODSEQ (29369) INTERNALDATE \"13-Jun-1992 11:23:08 +0000\" FLAGS (\\Seen) ENVELOPE (\"Sat, 13 Jun 92 11:23:08 JST\" \"Re: [95:taka@fxis.fujix] MIME and Header encoding RFC.\" ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL \"<9206120510.AA06898@atrai.sala.sony.co.jp>\" \"<gELh6.ysato@etl.go.jp>\") BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"ISO-2022-JP\") NIL NIL \"7BIT\" 1164 39))\n* 8 FETCH (X-GM-THRID 1592225494819146108 X-GM-MSGID 1592225494819146108 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 8 RFC822.SIZE 165976 MODSEQ (29378) INTERNALDATE \"29-Nov-1991 12:13:33 +0000\" FLAGS (\\Seen) ENVELOPE (\"Fri, 29 Nov 91 07:13:33 EST\" \"Testing Multipart messaging\" ((\"Nathaniel S. Borenstein\" NIL \"nsb\" \"thumper.bellcore.com\")) ((\"Nathaniel S. Borenstein\" NIL \"nsb\" \"thumper.bellcore.com\")) ((\"Nathaniel S. Borenstein\" NIL \"nsb\" \"thumper.bellcore.com\")) ((NIL NIL \"nsb\" NIL)) NIL NIL NIL \"<635267123373180360.36745.1@Jeffreys-MacBook-Air.local>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 305 5)((\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 3276)(\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 156706) \"PARALLEL\")(\"APPLICATION\" \"ATOMICMAIL\" NIL NIL NIL \"7BIT\" 4915) \"MIXED\"))\n* 9 FETCH (X-GM-THRID 1592225494819146109 X-GM-MSGID 1592225494819146109 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 9 RFC822.SIZE 348483 MODSEQ (29395) INTERNALDATE \"05-Oct-1991 23:00:40 +0000\" FLAGS (\\Seen) ENVELOPE (\"Sat, 05 Oct 91 16:00:40 -0700\" \"Re: near closure on audio stuff\" ((\"Marshall Rose\" NIL \"mrose\" \"dbc.mtview.ca.us\")) ((\"Marshall Rose\" NIL \"mrose\" \"dbc.mtview.ca.us\")) ((\"Marshall Rose\" NIL \"mrose\" \"dbc.mtview.ca.us\")) ((\"Nathaniel Borenstein\" NIL \"nsb\" \"thumper.bellcore.com\")) ((\"Stephen A. Uhler\" NIL \"sau\" \"thumper.bellcore.com\")) NIL \"Your message of \\\"Fri, 04 Oct 91 23:13:17 PDT.\\\"             <14836.686643197@dbc.mtview.ca.us>\" \"<22353.686703640@dbc.mtview.ca.us>\") BODY (\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 347516))\n* 11 FETCH (X-GM-THRID 1592225494819146111 X-GM-MSGID 1592225494819146111 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 11 RFC822.SIZE 58127 MODSEQ (29429) INTERNALDATE \"26-Dec-1991 20:45:00 +0000\" FLAGS (\\Seen) ENVELOPE (\"26 Dec 1991 20:45 (Thursday)\" \"couldn't resist this\" ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<9112262015.AA13190@thumper.bellcore.com>\") BODY (\"IMAGE\" \"PBM\" NIL NIL NIL \"BASE64\" 57561))\n* 12 FETCH (X-GM-THRID 1592225494819146112 X-GM-MSGID 1592225494819146112 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 12 RFC822.SIZE 32737 MODSEQ (29461) INTERNALDATE \"08-Jan-1992 16:21:00 +0000\" FLAGS (\\Seen) ENVELOPE (\"Wed,  8 Jan 1992 11:21:00 -0500 (EST)\" \"Re: PS -- Re: mailer error\" ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) ((\"Dave Sincoskie\" NIL \"sincos\" NIL)) ((\"Nathaniel Borenstein\" NIL \"nsb\" NIL)) NIL \"<9201062142.AA08914@raven.bellcore.com>\" \"<wdOmHgu0M2Yt4Gzf9t@thumper.bellcore.com>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 566 14)((\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 426 7)(\"IMAGE\" \"XWD\" NIL NIL NIL \"BASE64\" 29662)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"QUOTED-PRINTABLE\" 45 4) \"MIXED\") \"ALTERNATIVE\"))\n* 13 FETCH (X-GM-THRID 1592225494819146113 X-GM-MSGID 1592225494819146113 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 13 RFC822.SIZE 5670 MODSEQ (29486) INTERNALDATE \"07-Feb-1992 03:33:38 +0000\" FLAGS (\\Seen) ENVELOPE (\"Fri, 7 Feb 92 14:33:38 +1100\" \"Test MIME message\" ((NIL NIL \"rhys\" \"cs.uq.oz.au\")) ((NIL NIL \"rhys\" \"cs.uq.oz.au\")) ((NIL NIL \"rhys\" \"cs.uq.oz.au\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<9202070333.AA25077@client>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 848 27)((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 142 5)(\"IMAGE\" \"X-XBITMAP\" NIL NIL NIL \"BASE64\" 1214)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 68 0)(\"IMAGE\" \"X-XBITMAP\" NIL NIL NIL \"BASE64\" 1222)(\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"7BIT\" 559 13) \"MIXED\") \"ALTERNATIVE\"))\n* 14 FETCH (X-GM-THRID 1592225494819146114 X-GM-MSGID 1592225494819146114 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 14 RFC822.SIZE 2430 MODSEQ (29511) INTERNALDATE \"16-Jun-1992 17:34:08 +0000\" FLAGS (\\Seen) ENVELOPE (\"Tue, 16 Jun 92 17:34:08 JST\" \"Re: transparent.el\" ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL \"<AKAHO.92Jun16162622@etlsu5.etl.go.jp>\" \"<gFQJR.ysato@etl.go.jp>\") BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"ISO-2022-JP\") NIL NIL \"7BIT\" 1414 32))\n* 26 FETCH (X-GM-THRID 1592225494819146126 X-GM-MSGID 1592225494819146126 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 26 RFC822.SIZE 1457 MODSEQ (29707) INTERNALDATE \"18-Jan-1992 17:19:00 +0000\" FLAGS (\\Seen) ENVELOPE (\"18 Jan 1992 17:19 (Saturday)\" \"another Hebrew test\" ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((\"Bob Kummerfeld\" NIL \"bob\" \"cs.su.oz.au\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<9201180620.AA17087@thumper.bellcore.com>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 75 4)(\"TEXT\" \"PLAIN\" (\"CHARSET\" \"iso-8859-8\") NIL NIL \"BASE64\" 650 9) \"MIXED\"))\n* 27 FETCH (X-GM-THRID 1592225494819146127 X-GM-MSGID 1592225494819146127 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 27 RFC822.SIZE 42865 MODSEQ (29724) INTERNALDATE \"07-Jun-1992 19:02:00 +0000\" FLAGS (\\Seen) ENVELOPE (\"Sun, 7 Jun 92 14:02 CDT\" \"makeitso.gif\" ((\"Daniel A. Glasser\" NIL \"dag%gorgon.UUCP\" \"cs.wisc.edu\")) ((\"Daniel A. Glasser\" NIL \"dag%gorgon.UUCP\" \"cs.wisc.edu\")) ((\"Daniel A. Glasser\" NIL \"dag%gorgon.UUCP\" \"cs.wisc.edu\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<m0luSVj-0000UWC@gorgon.uucp>\") BODY (\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 42100))\n* 28 FETCH (X-GM-THRID 1592225494819146128 X-GM-MSGID 1592225494819146128 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 28 RFC822.SIZE 9606 MODSEQ (29758) INTERNALDATE \"09-Jun-1992 03:45:24 +0000\" FLAGS (\\Seen) ENVELOPE (\"Tue, 9 Jun 92 03:45:24 JST\" \"Re: How to see Japanese characters (Re: malformed message)\" ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) NIL \"<keAshCG0M2Yt5A32xi@thumper.bellcore.com>\" \"<gCvvx.ysato@etl.go.jp>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 1965 43)(\"IMAGE\" \"GIF\" NIL NIL \"README.jp shown in kterm\" \"BASE64\" 6308) \"MIXED\"))\n* 29 FETCH (X-GM-THRID 1592225494819146129 X-GM-MSGID 1592225494819146129 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 29 RFC822.SIZE 109878 MODSEQ (29767) INTERNALDATE \"08-Jun-1992 19:51:02 +0000\" FLAGS (\\Seen) ENVELOPE (\"Mon,  8 Jun 1992 14:51:02 -0500 (CDT)\" \"/usr/sbin/sfplay\" ((\"Bob Oesterlin\" NIL \"oester+\" \"rchland.ibm.com\")) ((\"Bob Oesterlin\" NIL \"oester+\" \"rchland.ibm.com\")) ((\"Bob Oesterlin\" NIL \"oester\" \"vnet.ibm.com\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<seAvcao91JbyQwDlE=@rchland.ibm.com>\") BODY (\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 108383 1570))\n* 31 FETCH (X-GM-THRID 1592225494819146131 X-GM-MSGID 1592225494819146131 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 31 RFC822.SIZE 264394 MODSEQ (29801) INTERNALDATE \"15-May-1991 19:20:25 +0000\" FLAGS (\\Seen) ENVELOPE (\"Wed, 15 May 91 15:20:25 EDT\" \"A Multi-media test\" ((\"Stephen A Uhler\" NIL \"sau\" \"sleepy.bellcore.com\")) ((\"Stephen A Uhler\" NIL \"sau\" \"sleepy.bellcore.com\")) ((\"Stephen A Uhler\" NIL \"sau\" \"sleepy.bellcore.com\")) ((NIL NIL \"nsb\" \"sleepy.bellcore.com\")) ((NIL NIL \"sau\" \"sleepy.bellcore.com\")) NIL NIL \"<9105151920.AA01548@sleepy.bellcore.com>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 42 1)(\"IMAGE\" \"PBM\" NIL NIL NIL \"BASE64\" 77616)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 34 3)(\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 103736)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 164 4)(\"APPLICATION\" \"X-ANNOTATE\" NIL NIL NIL \"7BIT\" 81424)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 22 2) \"MIXED\"))\n* 34 FETCH (X-GM-THRID 1592225494819146134 X-GM-MSGID 1592225494819146134 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 34 RFC822.SIZE 6155 MODSEQ (29860) INTERNALDATE \"04-Feb-1993 22:27:10 +0000\" FLAGS (\\Seen) ENVELOPE (\"Thu, 4 Feb 93 17:27:10 EST\" \"sending files via email\" ((NIL NIL \"bob\" \"sarad.cs.su.oz.au\")) ((NIL NIL \"bob\" \"sarad.cs.su.oz.au\")) ((NIL NIL \"bob\" \"sarad.cs.su.oz.au\")) ((NIL NIL \"ggm\" \"cc.uq.oz.au\") (NIL NIL \"nsb\" \"thumper.bellcore.com\")) ((NIL NIL \"bob\" NIL)) NIL NIL \"<9302042227.AA17392@thumper.bellcore.com>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 84 6)(\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 5234) \"MIXED\"))\n* 41 FETCH (X-GM-THRID 1592225494819146141 X-GM-MSGID 1592225494819146141 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 41 RFC822.SIZE 73873 MODSEQ (29988) INTERNALDATE \"07-Jun-1991 13:09:05 +0000\" FLAGS (\\Seen) ENVELOPE (\"Fri, 7 Jun 91 09:09:05 EDT\" \"meta-mail\" ((\"Stephen A Uhler\" NIL \"sau\" \"sleepy.bellcore.com\")) ((\"Stephen A Uhler\" NIL \"sau\" \"sleepy.bellcore.com\")) ((\"Stephen A Uhler\" NIL \"sau\" \"sleepy.bellcore.com\")) ((NIL NIL \"nsb\" \"sleepy.bellcore.com\")) NIL NIL NIL \"<9106071309.AA00574@sleepy.bellcore.com>\") BODY ((\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 1246 26)(\"IMAGE\" \"PBM\" NIL NIL NIL \"BASE64\" 71686)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 0 0) \"MIXED\"))\n* 42 FETCH (X-GM-THRID 1592225494819146142 X-GM-MSGID 1592225494819146142 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 42 RFC822.SIZE 253424 MODSEQ (29997) INTERNALDATE \"28-Oct-1992 16:46:54 +0000\" FLAGS (\\Seen) ENVELOPE (\"Wed, 28 Oct 92 11:46:54 -0500\" \"Thanks! (part 1 of several)\" ((\"T. V. Raman\" NIL \"raman\" \"cs.cornell.edu\")) ((\"T. V. Raman\" NIL \"raman\" \"cs.cornell.edu\")) ((\"T. V. Raman\" NIL \"raman\" \"cs.cornell.edu\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) ((NIL NIL \"raman\" \"cs.cornell.edu\")) NIL NIL \"<9210281646.AA23424@freyr.cs.cornell.edu>\") BODY (\"MESSAGE\" \"PARTIAL\" (\"ID\" \"703.23422.720290813.freyr\" \"NUMBER\" \"1\") NIL NIL \"7BIT\" 252471))\n* 43 FETCH (X-GM-THRID 1592225494819146143 X-GM-MSGID 1592225494819146143 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 43 RFC822.SIZE 56550 MODSEQ (30014) INTERNALDATE \"06-Jun-1992 06:21:22 +0000\" FLAGS (\\Seen) ENVELOPE (\"Sat, 6 Jun 92 06:21:22 JST\" \"MIME example in VIN\" ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((\"=?ISO-2022-JP?B?WXV0YWthIFNhdG8gGyRCOjRGI0stGyhC?=\" NIL \"ysato\" \"etl.go.jp\")) ((NIL NIL \"nsb\" \"thumper.bellcore.com\")) NIL NIL NIL \"<9206052121.AA02633@etlibs.etl.go.jp>\") BODY ((\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 473 9)(\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 24568)(\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 458 10)(\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 11368)(\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 310 6)(\"IMAGE\" \"GIF\" NIL NIL NIL \"BASE64\" 16676)(\"TEXT\" \"RICHTEXT\" NIL NIL NIL \"QUOTED-PRINTABLE\" 675 15) \"MIXED\"))\n* 50 FETCH (X-GM-THRID 1592225494819146150 X-GM-MSGID 1592225494819146150 X-GM-LABELS (\"Test Messages\" \"\\\\Important\") UID 50 RFC822.SIZE 91057 MODSEQ (30145) INTERNALDATE \"29-Sep-1992 14:19:23 +0000\" FLAGS (\\Seen) ENVELOPE (\"Tue, 29 Sep 92 10:19:23 EDT\" \"Re: Happy New Year\" ((NIL NIL NIL NIL)) ((NIL NIL NIL NIL)) ((NIL NIL NIL NIL)) ((NIL NIL \"dnd\" NIL)) ((NIL NIL \"nsb\" NIL)) NIL NIL \"<9209291419.AA19468@greenbush.bellcore.com>\") BODY ((\"TEXT\" \"RICHTEXT\" (\"CHARSET\" \"iso-8859-8\") NIL NIL \"QUOTED-PRINTABLE\" 212 9)(\"AUDIO\" \"BASIC\" NIL NIL NIL \"BASE64\" 89812)(\"TEXT\" \"PLAIN\" NIL NIL NIL \"7BIT\" 31 1) \"MIXED\"))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/search.txt",
    "content": "* ESEARCH (TAG \"A########\") UID ALL 1:3,5,7:9,11:14,26:29,31,34,41:43,50\nA######## OK SEARCH completed (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/select-inbox.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded \\*)] Flags permitted.\n* OK [UIDVALIDITY 81] UIDs valid.\n* 0 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 1] Predicted next UID.\n* OK [HIGHESTMODSEQ 126550]\nA######## OK [READ-WRITE] TopLevel1/SubLevel1 selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/select-sublevel1.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded \\*)] Flags permitted.\n* OK [UIDVALIDITY 81] UIDs valid.\n* 0 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 1] Predicted next UID.\n* OK [HIGHESTMODSEQ 126550]\nA######## OK [READ-WRITE] TopLevel1/SubLevel1 selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/select-sublevel2.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded \\*)] Flags permitted.\n* OK [UIDVALIDITY 81] UIDs valid.\n* 0 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 1] Predicted next UID.\n* OK [HIGHESTMODSEQ 126550]\nA######## OK [READ-WRITE] TopLevel2/SubLevel2 selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/select-toplevel.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Junk $MailFlagBit0 $NotJunk $NotPhishing $Phishing JunkRecorded \\*)] Flags permitted.\n* OK [UIDVALIDITY 81] UIDs valid.\n* 0 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 1] Predicted next UID.\n* OK [HIGHESTMODSEQ 126550]\nA######## OK [READ-WRITE] TopLevel selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/select-unittests.txt",
    "content": "* FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Phishing $NotPhishing)\n* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen $Phishing $NotPhishing \\*)] Flags permitted.\n* OK [UIDVALIDITY 26] UIDs valid.\n* 0 EXISTS\n* 0 RECENT\n* OK [UIDNEXT 1] Predicted next UID.\n* OK [HIGHESTMODSEQ 29225]\nA######## OK [READ-WRITE] UnitTests selected. (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/set-flags.txt",
    "content": "* 1 FETCH (FLAGS (\\Seen \\Answered) UID 1)\n* 2 FETCH (FLAGS (\\Seen \\Answered) UID 2)\n* 3 FETCH (FLAGS (\\Seen \\Answered) UID 3)\n* 5 FETCH (FLAGS (\\Seen \\Answered) UID 5)\n* 7 FETCH (FLAGS (\\Seen \\Answered) UID 7)\n* 8 FETCH (FLAGS (\\Seen \\Answered) UID 8)\n* 9 FETCH (FLAGS (\\Seen \\Answered) UID 9)\n* 11 FETCH (FLAGS (\\Seen \\Answered) UID 11)\n* 12 FETCH (FLAGS (\\Seen \\Answered) UID 12)\n* 13 FETCH (FLAGS (\\Seen \\Answered) UID 13)\n* 14 FETCH (FLAGS (\\Seen \\Answered) UID 14)\n* 26 FETCH (FLAGS (\\Seen \\Answered) UID 26)\n* 27 FETCH (FLAGS (\\Seen \\Answered) UID 27)\n* 28 FETCH (FLAGS (\\Seen \\Answered) UID 28)\n* 29 FETCH (FLAGS (\\Seen \\Answered) UID 29)\n* 31 FETCH (FLAGS (\\Seen \\Answered) UID 31)\n* 34 FETCH (FLAGS (\\Seen \\Answered) UID 34)\n* 41 FETCH (FLAGS (\\Seen \\Answered) UID 41)\n* 42 FETCH (FLAGS (\\Seen \\Answered) UID 42)\n* 43 FETCH (FLAGS (\\Seen \\Answered) UID 43)\n* 50 FETCH (FLAGS (\\Seen \\Answered) UID 50)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/set-labels.txt",
    "content": "* 1 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 1)\n* 2 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 2)\n* 3 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 3)\n* 5 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 5)\n* 7 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 7)\n* 8 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 8)\n* 9 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 9)\n* 11 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 11)\n* 12 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 12)\n* 13 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 13)\n* 14 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 14)\n* 26 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 26)\n* 27 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 27)\n* 28 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 28)\n* 29 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 29)\n* 31 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 31)\n* 34 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 34)\n* 41 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 41)\n* 42 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 42)\n* 43 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 43)\n* 50 FETCH (X-GM-LABELS (\\Important \"Custom Label\" NIL) UID 50)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-+folder.txt",
    "content": "* STATUS +Folder (HIGHESTMODSEQ 41234 MESSAGES 6 RECENT 0 UIDNEXT 7 UIDVALIDITY 1 UNSEEN 0 SIZE 1024 MAILBOXID (f001Ed6c-ebee-41a5-a65e-9498d3e0aec0))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-all-mail.txt",
    "content": "* STATUS \"[Gmail]/All Mail\" (HIGHESTMODSEQ 41234 MESSAGES 67 RECENT 0 UIDNEXT 1210 UIDVALIDITY 11 UNSEEN 3 SIZE 1024 MAILBOXID (f668b57d-9f42-453b-b315-a18cd3eb0f85))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-drafts.txt",
    "content": "* STATUS \"[Gmail]/Drafts\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 6 UNSEEN 0 SIZE 1024 MAILBOXID (fdacc3c7-4e20-4ca0-a0d7-4f7267187e48))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-important.txt",
    "content": "* STATUS \"[Gmail]/Important\" (HIGHESTMODSEQ 41234 MESSAGES 58 RECENT 0 UIDNEXT 307 UIDVALIDITY 9 UNSEEN 0 SIZE 1024 MAILBOXID (2a0410e1-252a-4ee8-b48d-30111cda734a))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-inbox-appendlimit-nil.txt",
    "content": "* STATUS \"INBOX\" (APPENDLIMIT NIL)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-inbox-appendlimit.txt",
    "content": "* STATUS \"INBOX\" (APPENDLIMIT 35651584)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-inbox.txt",
    "content": "* STATUS \"INBOX\" (HIGHESTMODSEQ 41234 MESSAGES 60 RECENT 0 UIDNEXT 410 UIDVALIDITY 1 UNSEEN 0 SIZE 1024 MAILBOXID (d0f3b017-d3ec-40aa-9bb9-66c1aeccbb24))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-sent-mail.txt",
    "content": "* STATUS \"[Gmail]/Sent Mail\" (HIGHESTMODSEQ 41234 MESSAGES 4 RECENT 0 UIDNEXT 7 UIDVALIDITY 5 UNSEEN 0 SIZE 1024 MAILBOXID (79da5ecd-afe4-440e-81ce-64ace69c9fbd))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-spam.txt",
    "content": "* STATUS \"[Gmail]/Spam\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1 UIDVALIDITY 3 UNSEEN 0 SIZE 1024 MAILBOXID (f5df5af8-5e11-49a5-891d-c3e05591265e))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-starred.txt",
    "content": "* STATUS \"[Gmail]/Starred\" (HIGHESTMODSEQ 41234 MESSAGES 1 RECENT 0 UIDNEXT 7 UIDVALIDITY 4 UNSEEN 0 SIZE 1024 MAILBOXID (93ad849a-2127-4c8e-ac41-594cd0a346a4))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/status-trash.txt",
    "content": "* STATUS \"[Gmail]/Trash\" (HIGHESTMODSEQ 41234 MESSAGES 0 RECENT 0 UIDNEXT 1143 UIDVALIDITY 2 UNSEEN 0 SIZE 1024 MAILBOXID (a663f6ce-4f36-434e-9f0c-7f757046a6d4))\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/uid-copy.txt",
    "content": "A######## OK [COPYUID 85 1:3,5,7:9,11:14,26:29,31,34,41:43,50 1:21] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/uid-expunge.txt",
    "content": "* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 0 EXISTS\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/uid-move.txt",
    "content": "* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 1 EXPUNGE\n* 0 EXISTS\nA######## OK [COPYUID 85 1:3,5,7:9,11:14,26:29,31,34,41:43,50 1:21] (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/utf8accept.txt",
    "content": "* ENABLED UTF8=ACCEPT\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/gmail/xlist.txt",
    "content": "* XLIST (\\HasNoChildren \\Inbox) \"/\" \"Inbox\"\n* XLIST (\\Noselect \\HasChildren) \"/\" \"[Gmail]\"\n* XLIST (\\HasNoChildren \\AllMail) \"/\" \"[Gmail]/All Mail\"\n* XLIST (\\HasNoChildren \\Drafts) \"/\" \"[Gmail]/Drafts\"\n* XLIST (\\HasNoChildren \\Important) \"/\" \"[Gmail]/Important\"\n* XLIST (\\HasNoChildren \\Sent) \"/\" \"[Gmail]/Sent Mail\"\n* XLIST (\\HasNoChildren \\Spam) \"/\" \"[Gmail]/Spam\"\n* XLIST (\\HasNoChildren \\Starred) \"/\" \"[Gmail]/Starred\"\n* XLIST (\\HasNoChildren \\Trash) \"/\" \"[Gmail]/Trash\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/icloud/authenticate-plain.txt",
    "content": "A######## OK user username authenticated\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/icloud/capability.txt",
    "content": "* CAPABILITY XAPPLEPUSHSERVICE IMAP4 IMAP4rev1 CONDSTORE ENABLE QRESYNC QUOTA XAPPLELITERAL NAMESPACE UIDPLUS CHILDREN BINARY UNSELECT SORT CATENATE URLAUTH LANGUAGE ESEARCH ESORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES CONTEXT=SEARCH CONTEXT=SORT WITHIN SASL-IR SEARCHRES METADATA ID XMSEARCH X-SUN-SORT ANNOTATE-EXPERIMENT-1 X-UNAUTHENTICATE X-SUN-IMAP XUM1 MULTISEARCH IDLE X-APPLE-REMOTE-LINKS LIST-STATUS\nA######## OK Completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/icloud/enable-qresync.txt",
    "content": "A######## OK ENABLE completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/icloud/greeting.txt",
    "content": "* OK [CAPABILITY XAPPLEPUSHSERVICE IMAP4 IMAP4rev1 SASL-IR AUTH=ATOKEN AUTH=PLAIN AUTH=ATOKEN2 AUTH=XOAUTH2] (2428B47-26126cfe23cd) p00-iscream-f9f7bf749-qjr87\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/icloud/list-inbox.txt",
    "content": "* LIST (\\Noinferiors) \"/\" \"INBOX\"\nA######## OK LIST completed (took 0 ms)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/icloud/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"/\")) NIL NIL\nA######## OK NAMESPACE completed (took 0 ms)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/lowercase/authenticate.txt",
    "content": "A######## OK Authenticate\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/lowercase/capability.txt",
    "content": "* capability imap4rev1 starttls login special-use\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/lowercase/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4rev1 STARTTLS SPECIAL-USE] dings imap.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/lowercase/list.txt",
    "content": "* List (\\HasNoChildren) \"/\" \"INBOX\"\n* List (\\HasNoChildren \\Trash) \"/\" \"Trash\"\nA######## OK List\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/authenticate.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- APPENDLIMIT=35651584 METADATA\nA######## OK username authenticated (Success)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN METADATA\nA######## OK Thats all she wrote! i9if7359725qay.199\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/getmetadata-multi.txt",
    "content": "* METADATA \"\" (/private/comment \"this is a private comment\" /shared/comment \"this is a shared comment\")\nA######## OK GETMETADATA complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/getmetadata-options.txt",
    "content": "* METADATA \"\" (/private/comment \"this is a private comment\")\nA######## OK [METADATA LONGENTRIES 2199] GETMETADATA complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/getmetadata.txt",
    "content": "* METADATA \"\" (/private/comment \"this is a comment\")\nA######## OK GETMETADATA complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/inbox-getmetadata-multi.txt",
    "content": "* METADATA \"INBOX\" (/private/comment \"this is a private comment\" /shared/comment \"this is a shared comment\")\nA######## OK GETMETADATA complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/inbox-getmetadata-options.txt",
    "content": "* METADATA \"INBOX\" (/private/comment \"this is a private comment\")\nA######## OK [METADATA LONGENTRIES 2199] GETMETADATA complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/inbox-getmetadata.txt",
    "content": "* METADATA \"INBOX\" (/private/comment \"this is a comment\")\nA######## OK GETMETADATA complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/inbox-setmetadata-maxsize.txt",
    "content": "A######## NO [METADATA MAXSIZE 10] SETMETADATA failed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/inbox-setmetadata-noprivate.txt",
    "content": "A######## NO [METADATA NOPRIVATE] SETMETADATA failed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/inbox-setmetadata-toomany.txt",
    "content": "A######## NO [METADATA TOOMANY] SETMETADATA failed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/setmetadata-maxsize.txt",
    "content": "A######## NO [METADATA MAXSIZE 10] SETMETADATA failed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/setmetadata-noprivate.txt",
    "content": "A######## NO [METADATA NOPRIVATE] SETMETADATA failed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/metadata/setmetadata-toomany.txt",
    "content": "A######## NO [METADATA TOOMANY] SETMETADATA failed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/protonmail/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 AUTH=PLAIN AUTH=LOGIN ID XSTOP APPENDLIMIT\nA######## OK CAPABILITY Complete\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/protonmail/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4rev1 STARTTLS AUTH=PLAIN AUTH=LOGIN ID APPENDLIMIT] IMAP4rev1 Service Ready\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/qqmail/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4 IMAP4rev1 ID AUTH=PLAIN AUTH=LOGIN NAMESPACE] QQMail IMAP4Server ready\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/smartermail/greeting.txt",
    "content": "* OK IMAP4rev1 SmarterMail\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/strato.de/authenticate.txt",
    "content": "A######## OK User logged in (234)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/strato.de/capability.txt",
    "content": "* CAPABILITY IMAP4 IMAP4rev1 APPENDLIMIT=104857600 AUTH=PLAIN AUTH=LOGIN CREATE-SPECIAL-USE QUOTA=RES-MAILBOX CHILDREN CONDSTORE ENABLE ESORT ESEARCH I18NLEVEL=2 ID IDLE MOVE LIST-STATUS LIST-EXTENDED LITERAL+ NAMESPACE PREVIEW=FUZZY QUOTA SEARCH=FUZZY SORT SEARCHRES SNIPPET=FUZZY SPECIAL-USE STATUS=SIZE UIDPLUS UNSELECT WITHIN XLIST\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/strato.de/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4 IMAP4rev1 APPENDLIMIT=104857600 AUTH=PLAIN AUTH=LOGIN ENABLE ID IDLE MOVE LIST-EXTENDED NAMESPACE QUOTA SORT SPECIAL-USE UIDPLUS] IMAP server ready (P2 TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/strato.de/list-inbox.txt",
    "content": "* LIST (\\HasChildren) \".\" \"INBOX\"\nA######## OK LIST completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/strato.de/namespace.txt",
    "content": "* NAMESPACE ((\"\" \".\")) NIL NIL\nA######## OK NAMESPACE completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/strato.de/xlist.txt",
    "content": "A######## OK XLIST completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/uw/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4REV1 I18NLEVEL=1 LITERAL+ SASL-IR LOGIN-REFERRALS AUTH=PLAIN AUTH=LOGIN] xyz.redmond.corp.microsoft.com IMAP4rev1 2007f.404 at Wed, 27 Mar 2019 09:40:23 -0400 (EDT)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/uw/preauth-greeting.txt",
    "content": "* PREAUTH [CAPABILITY IMAP4REV1 I18NLEVEL=1 LITERAL+ IDLE UIDPLUS NAMESPACE CHILDREN MAILBOX-REFERRALS BINARY UNSELECT ESEARCH WITHIN SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND] Pre-authenticated user fejj xyz.redmond.corp.microsoft.com IMAP4rev1 2007f.404 at Wed, 27 Mar 2019 09:40:23 -0400 (EDT)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yahoo/capabilities.txt",
    "content": "* CAPABILITY IMAP4rev1 ID MOVE NAMESPACE XYMHIGHESTMODSEQ UIDPLUS LITERAL+ CHILDREN X-MSG-EXT UNSELECT OBJECTID\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yahoo/examine-inbox.txt",
    "content": "* 1 EXISTS\n* 0 RECENT\n* OK [UIDVALIDITY 1595903349] UIDs valid\n* OK [UIDNEXT 3] Predicted next UID\n* FLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Seen $Forwarded $Junk $NotJunk)\n* OK [PERMANENTFLAGS ()] No permanent flags permitted\n* OK [HIGHESTMODSEQ 7]\n* OK [MAILBOXID (27)] Ok\nA######## OK [READ-ONLY] EXAMINE completed; now in selected state\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yahoo/greeting.txt",
    "content": "* OK [CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN AUTH=XOAUTH2 AUTH=OAUTHBEARER ID MOVE NAMESPACE XYMHIGHESTMODSEQ UIDPLUS LITERAL+ CHILDREN X-MSG-EXT OBJECTID] IMAP4rev1 Hello\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yahoo/list-inbox.txt",
    "content": "* LIST (\\HasNoChildren) \"/\" \"Inbox\"\nA######## OK LIST completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yahoo/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"/\")) NIL NIL\nA######## OK Namespace completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yahoo/search.txt",
    "content": "* SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14\nA######## OK SEARCH completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/authenticate.txt",
    "content": "* CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST UIDPLUS ENABLE ID IDLE MOVE\nA######## OK AUTHENTICATE Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 CHILDREN UNSELECT LITERAL+ NAMESPACE XLIST UIDPLUS ENABLE ID AUTH=PLAIN AUTH=XOAUTH2 IDLE MOVE\nA######## OK CAPABILITY Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/getbodypart-missing-content.txt",
    "content": "* 1 FETCH (UID 3016 BODY[2.MIME] {145}\nContent-Disposition: attachment;\n\tfilename=\"empty.pdf\"\nContent-Transfer-Encoding: base64\nContent-Type: application/pdf;\n\tname=\"empty.pdf\"\n\n BODY[2] )\nA######## OK FETCH Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/greeting.txt",
    "content": "* OK Yandex IMAP4rev1 at mail-imap-production-171.sas.yp-c.yandex.net:993 ready to talk with ::ffff:91.77.169.5:50580, 2024-Feb-13 08:17:42, gHfsEJKZ3Gk0\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/list-inbox.txt",
    "content": "* LIST (\\HasNoChildren \\Marked \\NoInferiors) \"|\" INBOX\nA######## OK LIST Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"|\")) NIL NIL\nA######## OK NAMESPACE Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/select-inbox.txt",
    "content": "* FLAGS (\\Answered \\Seen \\Draft \\Deleted $Forwarded)\n* 49 EXISTS\n* 1 RECENT\n* OK [UNSEEN 8]\n* OK [PERMANENTFLAGS (\\Answered \\Seen \\Draft \\Flagged \\Deleted $Forwarded \\*)] Limited\n* OK [UIDNEXT 3065] Ok\n* OK [UIDVALIDITY 1679853140] Ok\nA######## OK [READ-WRITE] SELECT Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/yandex/xlist.txt",
    "content": "* XLIST (\\HasChildren \\Unmarked \\Drafts \\Drafts) \"|\" Drafts\n* XLIST (\\HasNoChildren \\Unmarked \\Templates) \"|\" \"Drafts|template\"\n* XLIST (\\HasNoChildren \\Marked \\NoInferiors \\Inbox) \"|\" INBOX\n* XLIST (\\HasNoChildren \\Unmarked) \"|\" Outbox\n* XLIST (\\HasNoChildren \\Unmarked \\Sent \\Sent) \"|\" Sent\n* XLIST (\\HasNoChildren \\Unmarked \\Junk \\Spam) \"|\" Spam\n* XLIST (\\HasNoChildren \\Unmarked \\Trash \\Trash) \"|\" Trash\nA######## OK XLIST Completed.\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/authenticate.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT CHILDREN XLIST NAMESPACE IDLE MOVE ID AUTH=PLAIN SASL-IR UIDPLUS ESEARCH LIST-EXTENDED LIST-STATUS WITHIN LITERAL- APPENDLIMIT=26214400 CONDSTORE\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/capability.txt",
    "content": "* CAPABILITY IMAP4rev1 UNSELECT CHILDREN XLIST NAMESPACE IDLE MOVE ID AUTH=PLAIN SASL-IR UIDPLUS ESEARCH LIST-EXTENDED LIST-STATUS WITHIN LITERAL- APPENDLIMIT=10485760 CONDSTORE\nA######## OK CAPABILITY completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/examine-gesendet.txt",
    "content": "* 5348 EXISTS\n* 5333 RECENT\n* OK [UIDVALIDITY 2] UIDs valid \n* OK [UIDNEXT 6212] Predicted next UID \n* OK [HIGHESTMODSEQ 1706092971947030001]\n* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n* OK [PERMANENTFLAGS ()] No permanent flags permitted\nA######## OK [READ-ONLY] EXAMINE completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/fetch-negative-modseq-values.txt",
    "content": "* 1 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 1)\n* 2 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 2)\n* 3 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 23)\n* 4 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 34)\n* 5 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 36)\n* 6 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 37)\n* 7 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 39)\n* 8 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 40)\n* 9 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 41)\n* 10 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 42)\n* 11 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 44)\n* 12 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 45)\n* 13 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 46)\n* 14 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 47)\n* 15 FETCH (MODSEQ (0) FLAGS (\\Seen) UID 49)\n* 16 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 51)\n* 17 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 53)\n* 18 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 56)\n* 19 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 75)\n* 20 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 78)\n* 21 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 84)\n* 22 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 88)\n* 23 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 93)\n* 24 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 96)\n* 25 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 98)\n* 26 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 105)\n* 27 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 115)\n* 28 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 155)\n* 29 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 180)\n* 30 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 181)\n* 31 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 221)\n* 32 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 227)\n* 33 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 229)\n* 34 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 251)\n* 35 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 268)\n* 36 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen $FORWARDED) UID 271)\n* 37 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 272)\n* 38 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 284)\n* 39 FETCH (MODSEQ (0) FLAGS (\\Recent \\Seen) UID 290)\n* 40 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 336)\n* 41 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 350)\n* 42 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 355)\n* 43 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 361)\n* 44 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 388)\n* 45 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 400)\n* 46 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 406)\n* 47 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 496)\n* 48 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 504)\n* 49 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 512)\n* 50 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 525)\n* 51 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 538)\n* 52 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 551)\n* 53 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 554)\n* 54 FETCH (MODSEQ (1538484935027010002) FLAGS (\\Answered \\Recent \\Seen) UID 562)\n* 55 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 564)\n* 56 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 566)\n* 57 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 568)\n* 58 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 570)\n* 59 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 571)\n* 60 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 599)\n* 61 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 602)\n* 62 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 603)\n* 63 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 604)\n* 64 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 622)\n* 65 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 629)\n* 66 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 637)\n* 67 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 647)\n* 68 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 667)\n* 69 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 677)\n* 70 FETCH (MODSEQ (-1) FLAGS (\\Recent \\Seen) UID 680)\n* 71 FETCH (MODSEQ (1) FLAGS (\\Recent \\Seen) UID 697)\n* 72 FETCH (MODSEQ (1534242271555010002) FLAGS (\\Recent \\Seen) UID 714)\n* 73 FETCH (MODSEQ (1535361611473010002) FLAGS (\\Recent \\Seen) UID 735)\n* 74 FETCH (MODSEQ (1535447416753010001) FLAGS (\\Recent \\Seen) UID 742)\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/greeting.txt",
    "content": "* OK svwall.zoho.com IMAP4 Server (Zoho Mail IMAP4rev1 Server version 1.0)\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/list-inbox.txt",
    "content": "* LIST (\\HasNoChildren \\Subscribed) \"/\" \"INBOX\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/namespace.txt",
    "content": "* NAMESPACE ((\"\" \"/\")) NIL NIL\nA######## OK NAMESPACE completed\n"
  },
  {
    "path": "UnitTests/Net/Imap/Resources/zoho/xlist.txt",
    "content": "* XLIST (\\HasNoChildren \\Inbox) \"/\" \"Posteingang\"\n* XLIST (\\Noinferiors \\Drafts) \"/\" \"Entw&APw-rfe\"\n* XLIST (\\Noinferiors \\Templates) \"/\" \"Vorlagen\"\n* XLIST (\\Noinferiors \\Sent) \"/\" \"Gesendet\"\n* XLIST (\\Noinferiors \\Spam) \"/\" \"Spam\"\n* XLIST (\\HasNoChildren \\Trash) \"/\" \"Papierkorb\"\nA######## OK Success\n"
  },
  {
    "path": "UnitTests/Net/NetworkStreamTests.cs",
    "content": "﻿//\n// NetworkStreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net.Sockets;\n\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace UnitTests.Net {\n\t[TestFixture]\n\tpublic class NetworkStreamTests : IDisposable\n\t{\n\t\treadonly Socket socket;\n\n\t\tpublic NetworkStreamTests ()\n\t\t{\n\t\t\tsocket = new Socket (SocketType.Stream, ProtocolType.Tcp);\n\t\t\tsocket.Connect (\"www.google.com\", 80);\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tsocket.Dispose ();\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeekTimeout ()\n\t\t{\n\t\t\tusing (var stream = new NetworkStream (socket, false)) {\n\t\t\t\tAssert.That (stream.CanRead, Is.True, \"CanRead\");\n\t\t\t\tAssert.That (stream.CanWrite, Is.True, \"CanWrite\");\n\t\t\t\tAssert.That (stream.CanSeek, Is.False, \"CanSeek\");\n\t\t\t\tAssert.That (stream.CanTimeout, Is.True, \"CanTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotSupportedExceptions ()\n\t\t{\n\t\t\tusing (var stream = new NetworkStream (socket, false)) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { var x = stream.Length; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (512));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { var x = stream.Position; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => { stream.Position = 512; });\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (512, SeekOrigin.Begin));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new NetworkStream (socket, false)) {\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (Timeout.Infinite), \"ReadTimeout #1\");\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.ReadTimeout = 0);\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.ReadTimeout = -2);\n\t\t\t\tstream.ReadTimeout = 500;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (500), \"ReadTimeout #2\");\n\t\t\t\tstream.ReadTimeout = Timeout.Infinite;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (Timeout.Infinite), \"ReadTimeout #3\");\n\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (Timeout.Infinite), \"WriteTimeout #1\");\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.WriteTimeout = 0);\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.WriteTimeout = -2);\n\t\t\t\tstream.WriteTimeout = 500;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (500), \"WriteTimeout #2\");\n\t\t\t\tstream.WriteTimeout = Timeout.Infinite;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (Timeout.Infinite), \"WriteTimeout #3\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Pop3AuthenticationSecretDetectorTests.cs",
    "content": "﻿//\n// Pop3AuthenticationSecretDetectorTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MailKit;\nusing MailKit.Net.Pop3;\n\nnamespace UnitTests.Net.Pop3 {\n\t[TestFixture]\n\tpublic class Pop3AuthenticationSecretDetectorTests\n\t{\n\t\t[Test]\n\t\tpublic void TestEmptyCommand ()\n\t\t{\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Array.Empty<byte> ();\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNonAuthCommand ()\n\t\t{\n\t\t\tconst string command = \"UIDL 1\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotIsAuthenticating ()\n\t\t{\n\t\t\tconst string command = \"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestApopCommand ()\n\t\t{\n\t\t\tconst string command = \"APOP username AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (2), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (5), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"Length\");\n\t\t\tAssert.That (secrets[1].StartIndex, Is.EqualTo (14), \"StartIndex\");\n\t\t\tAssert.That (secrets[1].Length, Is.EqualTo (24), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestApopCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"APOP username AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= 5 && index != 13 && index < command.Length - 2) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUserPassCommand ()\n\t\t{\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tbyte[] buffer;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"USER user\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"USER # of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (5), \"USER StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (4), \"USER Length\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"PASS p@$$w0rd\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"PASS # of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (5), \"PASS StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (8), \"PASS Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUserPassCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"USER user\\r\\nPASS p@$$w0rd\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif ((index >= 5 && index < 9) || (index >= 16 && index < 24)) {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthCommand ()\n\t\t{\n\t\t\tconst string command = \"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (11), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (24), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tint secretIndex = \"AUTH PLAIN \".Length;\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= secretIndex && command[index] != '\\r' && command[index] != '\\n') {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultiLineSaslAuthCommand ()\n\t\t{\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tbyte[] buffer;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"AUTH LOGIN\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"initial # of secrets\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"dXNlcm5hbWU=\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (12), \"Length\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"cGFzc3dvcmQ=\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (12), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultiLineSaslAuthCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"AUTH LOGIN\\r\\ndXNlcm5hbWU=\\r\\ncGFzc3dvcmQ=\\r\\n\";\n\t\t\tvar detector = new Pop3AuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tint secretIndex = \"AUTH LOGIN\\r\\n\".Length;\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= secretIndex && command[index] != '\\r' && command[index] != '\\n') {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Pop3ClientTests.cs",
    "content": "﻿//\n// Pop3ClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\nusing System.Collections;\nusing System.Net.Security;\nusing System.Security.Cryptography;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MimeKit;\n\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Pop3;\nusing MailKit.Net.Proxy;\n\nusing UnitTests.Security;\nusing UnitTests.Net.Proxy;\n\nusing AuthenticationException = MailKit.Security.AuthenticationException;\n\nnamespace UnitTests.Net.Pop3 {\n\t[TestFixture]\n\tpublic class Pop3ClientTests\n\t{\n\t\tstatic readonly Pop3Capabilities ComcastCapa1 = Pop3Capabilities.Expire | Pop3Capabilities.StartTLS |\n\t\t\tPop3Capabilities.Top | Pop3Capabilities.UIDL | Pop3Capabilities.User;\n\t\tstatic readonly Pop3Capabilities ComcastCapa2 = Pop3Capabilities.Expire | Pop3Capabilities.StartTLS |\n\t\t\tPop3Capabilities.Sasl | Pop3Capabilities.Top | Pop3Capabilities.UIDL | Pop3Capabilities.User;\n\t\tstatic readonly Pop3Capabilities ExchangeCapa = Pop3Capabilities.Sasl | Pop3Capabilities.Top |\n\t\t\tPop3Capabilities.UIDL | Pop3Capabilities.User;\n\t\tstatic readonly Pop3Capabilities GMailCapa1 = Pop3Capabilities.User | Pop3Capabilities.ResponseCodes |\n\t\t\tPop3Capabilities.Expire | Pop3Capabilities.LoginDelay | Pop3Capabilities.Top |\n\t\t\tPop3Capabilities.UIDL | Pop3Capabilities.Sasl;\n\t\tstatic readonly Pop3Capabilities GMailCapa2 = Pop3Capabilities.User | Pop3Capabilities.ResponseCodes |\n\t\t\tPop3Capabilities.Pipelining | Pop3Capabilities.Expire | Pop3Capabilities.LoginDelay |\n\t\t\tPop3Capabilities.Top | Pop3Capabilities.UIDL;\n\t\tstatic readonly Pop3Capabilities LangCapa1 = Pop3Capabilities.User | Pop3Capabilities.ResponseCodes |\n\t\t    Pop3Capabilities.Expire | Pop3Capabilities.LoginDelay | Pop3Capabilities.Top |\n\t\t    Pop3Capabilities.UIDL | Pop3Capabilities.Sasl | Pop3Capabilities.UTF8 |\n\t\t    Pop3Capabilities.UTF8User | Pop3Capabilities.Lang | Pop3Capabilities.Apop;\n\t\tstatic readonly Pop3Capabilities LangCapa2 = Pop3Capabilities.User | Pop3Capabilities.ResponseCodes |\n\t\t    Pop3Capabilities.Pipelining | Pop3Capabilities.Expire | Pop3Capabilities.LoginDelay |\n\t\t    Pop3Capabilities.Top | Pop3Capabilities.UIDL | Pop3Capabilities.Lang | Pop3Capabilities.Apop;\n\t\tconst CipherAlgorithmType GmxDeCipherAlgorithm = CipherAlgorithmType.Aes256;\n\t\tconst int GmxDeCipherStrength = 256;\n#if !MONO\n\t\tconst HashAlgorithmType GmxDeHashAlgorithm = HashAlgorithmType.Sha384;\n#else\n\t\tconst HashAlgorithmType GmxDeHashAlgorithm = HashAlgorithmType.None;\n#endif\n\t\tconst ExchangeAlgorithmType EcdhEphemeral = (ExchangeAlgorithmType) 44550;\n\n\t\tstatic string HexEncode (byte[] digest)\n\t\t{\n\t\t\tvar hex = new StringBuilder ();\n\n\t\t\tfor (int i = 0; i < digest.Length; i++)\n\t\t\t\thex.Append (digest[i].ToString (\"x2\"));\n\n\t\t\treturn hex.ToString ();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\t\t// Connect\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Uri) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Uri) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (new Uri (\"path\", UriKind.Relative)));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (new Uri (\"path\", UriKind.Relative)));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (null, 110, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (null, 110, false));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (string.Empty, 110, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 110, false));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (\"host\", -1, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (\"host\", -1, false));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (null, 110, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (null, 110, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (string.Empty, 110, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 110, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (\"host\", -1, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (\"host\", -1, SecureSocketOptions.None));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Socket) null, \"host\", 110, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Socket) null, \"host\", 110, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Stream) null, \"host\", 110, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Stream) null, \"host\", 110, SecureSocketOptions.None));\n\n\t\t\t\tusing (var socket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {\n\t\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (socket, \"host\", 110, SecureSocketOptions.None));\n\t\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (socket, \"host\", 110, SecureSocketOptions.None));\n\t\t\t\t}\n\n\t\t\t\t// Authenticate\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate ((SaslMechanism) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync ((SaslMechanism) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate ((ICredentials) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync ((ICredentials) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (\"username\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (\"username\", null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, credentials));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, credentials));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, \"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, \"username\", \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null, \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null, \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, \"username\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, \"username\", null));\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertDefaultValues (string host, int port, SecureSocketOptions options, Uri expected)\n\t\t{\n\t\t\tPop3Client.ComputeDefaultValues (host, ref port, ref options, out Uri uri, out bool starttls);\n\n\t\t\tif (expected.PathAndQuery == \"/?starttls=when-available\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.StartTlsWhenAvailable), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.True, $\"{expected}\");\n\t\t\t} else if (expected.PathAndQuery == \"/?starttls=always\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.StartTls), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.True, $\"{expected}\");\n\t\t\t} else if (expected.Scheme == \"pops\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.SslOnConnect), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.False, $\"{expected}\");\n\t\t\t} else {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.None), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.False, $\"{expected}\");\n\t\t\t}\n\n\t\t\tAssert.That (uri.ToString (), Is.EqualTo (expected.ToString ()));\n\t\t\tAssert.That (port, Is.EqualTo (expected.Port), $\"{expected}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComputeDefaultValues ()\n\t\t{\n\t\t\tconst string host = \"pop.skyfall.net\";\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.None, new Uri ($\"pop://{host}:110\"));\n\t\t\tAssertDefaultValues (host, 110, SecureSocketOptions.None, new Uri ($\"pop://{host}:110\"));\n\t\t\tAssertDefaultValues (host, 995, SecureSocketOptions.None, new Uri ($\"pop://{host}:995\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.SslOnConnect, new Uri ($\"pops://{host}:995\"));\n\t\t\tAssertDefaultValues (host, 110, SecureSocketOptions.SslOnConnect, new Uri ($\"pops://{host}:110\"));\n\t\t\tAssertDefaultValues (host, 995, SecureSocketOptions.SslOnConnect, new Uri ($\"pops://{host}:995\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.StartTls, new Uri ($\"pop://{host}:110/?starttls=always\"));\n\t\t\tAssertDefaultValues (host, 110, SecureSocketOptions.StartTls, new Uri ($\"pop://{host}:110/?starttls=always\"));\n\t\t\tAssertDefaultValues (host, 995, SecureSocketOptions.StartTls, new Uri ($\"pop://{host}:995/?starttls=always\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"pop://{host}:110/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 110, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"pop://{host}:110/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 995, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"pop://{host}:995/?starttls=when-available\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.Auto, new Uri ($\"pop://{host}:110/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 110, SecureSocketOptions.Auto, new Uri ($\"pop://{host}:110/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 995, SecureSocketOptions.Auto, new Uri ($\"pops://{host}:995\"));\n\t\t}\n\n\t\tstatic Socket Connect (string host, int port)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\t\t\tSocket socket = null;\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tsocket = new Socket (ipAddresses[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp);\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket.Connect (ipAddresses[i], port);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch {\n\t\t\t\t\tsocket.Dispose ();\n\t\t\t\t\tsocket = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn socket;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSslHandshakeExceptions ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tSocket socket;\n\n\t\t\t\t// 1. Test connecting to a non-SSL port fails with an SslHandshakeException.\n\t\t\t\tAssert.Throws<SslHandshakeException> (() => client.Connect (\"www.gmail.com\", 80, true));\n\n\t\t\t\tsocket = Connect (\"www.gmail.com\", 80);\n\t\t\t\tAssert.Throws<SslHandshakeException> (() => client.Connect (socket, \"www.gmail.com\", 80, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t// 2. Test connecting to a server with a bad SSL certificate fails with an SslHandshakeException.\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = Connect (\"untrusted-root.badssl.com\", 443);\n\t\t\t\t\tclient.Connect (socket, \"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSslHandshakeExceptionsAsync ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tSocket socket;\n\n\t\t\t\t// 1. Test connecting to a non-SSL port fails with an SslHandshakeException.\n\t\t\t\tAssert.ThrowsAsync<SslHandshakeException> (async () => await client.ConnectAsync (\"www.gmail.com\", 80, true));\n\n\t\t\t\tsocket = Connect (\"www.gmail.com\", 80);\n\t\t\t\tAssert.ThrowsAsync<SslHandshakeException> (async () => await client.ConnectAsync (socket, \"www.gmail.com\", 80, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t// 2. Test connecting to a server with a bad SSL certificate fails with an SslHandshakeException.\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = Connect (\"untrusted-root.badssl.com\", 443);\n\t\t\t\t\tawait client.ConnectAsync (socket, \"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSyncRoot ()\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tAssert.That (client.SyncRoot, Is.InstanceOf<Pop3Engine> ());\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestInvalidStateExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Authenticate (\"username\", \"password\"));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Authenticate (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Authenticate (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.EnableUTF8 ());\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetLanguages ());\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.SetLanguage (\"en\"));\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.NoOp ());\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageSizes ());\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageSize (0));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageUids ());\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageUid (0));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessage (0));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessages (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessages (new int[] { 0 }));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageHeaders (0));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageHeaders (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetMessageHeaders (new int[] { 0 }));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetStream (0));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetStreams (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.GetStreams (new int[] { 0 }));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.DeleteMessage (0));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.DeleteMessages (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.DeleteMessages (new int [] { 0 }));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\t\t\t\tAssert.That (client.LoginDelay, Is.EqualTo (0));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= Pop3Capabilities.Apop);\n\t\t\t\tAssert.DoesNotThrow (() => client.Capabilities &= ~Pop3Capabilities.UIDL);\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.SetLanguage (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.SetLanguage (string.Empty));\n\n\t\t\t\tAssert.Throws<AuthenticationException> (() => client.Authenticate (\"username\", \"password\"));\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"AuthenticationException should not cause a disconnect.\");\n\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageSizes ());\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageSize (0));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageUids ());\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageUid (0));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessage (0));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessages (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessages (new int[] { 0 }));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageHeaders (0));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageHeaders (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetMessageHeaders (new int[] { 0 }));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetStream (0));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetStreams (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.GetStreams (new int[] { 0 }));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.DeleteMessage (0));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.DeleteMessages (0, 1));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.DeleteMessages (new int[] { 0 }));\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"ServiceNotAuthenticatedException should not cause a disconnect.\");\n\n\t\t\t\tclient.Authenticate (Encoding.UTF8, \"username\", \"password\");\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.True, \"IsAuthenticated\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Authenticate (\"username\", \"password\"));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Authenticate (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Authenticate (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessageSize (-1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessageUid (-1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessage (-1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessages (-1, 1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessages (0, -1));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetMessages (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.GetMessages (new int[] { -1 }));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessageHeaders (-1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessageHeaders (-1, 1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetMessageHeaders (0, -1));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetMessageHeaders (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.GetMessageHeaders (new int[] { -1 }));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetStream (-1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetStreams (-1, 1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.GetStreams (0, -1));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.GetStreams (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.GetStreams (new int[] { -1 }));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.DeleteMessage (-1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.DeleteMessages (-1, 1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.DeleteMessages (0, -1));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.DeleteMessages (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.DeleteMessages (new int[] { -1 }));\n\n\t\t\t\tAssert.That (client.GetStreams (0, 0), Is.Empty);\n\t\t\t\tAssert.That (client.GetStreams (Array.Empty<int> ()), Is.Empty);\n\t\t\t\tAssert.That (client.GetMessages (0, 0), Is.Empty);\n\t\t\t\tAssert.That (client.GetMessages (Array.Empty<int> ()), Is.Empty);\n\t\t\t\tAssert.That (client.GetMessageHeaders (0, 0), Is.Empty);\n\t\t\t\tAssert.That (client.GetMessageHeaders (Array.Empty<int> ()), Is.Empty);\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestInvalidStateExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.AuthenticateAsync (\"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.EnableUTF8Async ());\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetLanguagesAsync ());\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.SetLanguageAsync (\"en\"));\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.NoOpAsync ());\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageSizesAsync ());\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageSizeAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageUidsAsync ());\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageUidAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessagesAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessagesAsync (new int[] { 0 }));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageHeadersAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageHeadersAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetMessageHeadersAsync (new int[] { 0 }));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetStreamAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetStreamsAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.GetStreamsAsync (new int[] { 0 }));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.DeleteMessageAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.DeleteMessagesAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.DeleteMessagesAsync (new int[] { 0 }));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\t\t\t\tAssert.That (client.LoginDelay, Is.EqualTo (0));\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= Pop3Capabilities.Apop);\n\t\t\t\tAssert.DoesNotThrow (() => client.Capabilities &= ~Pop3Capabilities.UIDL);\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SetLanguageAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.SetLanguageAsync (string.Empty));\n\n\t\t\t\tAssert.ThrowsAsync<AuthenticationException> (async () => await client.AuthenticateAsync (\"username\", \"password\"));\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"AuthenticationException should not cause a disconnect.\");\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageSizesAsync ());\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageSizeAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageUidsAsync ());\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageUidAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessagesAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessagesAsync (new int[] { 0 }));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageHeadersAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageHeadersAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetMessageHeadersAsync (new int[] { 0 }));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetStreamAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetStreamsAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.GetStreamsAsync (new int[] { 0 }));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.DeleteMessageAsync (0));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.DeleteMessagesAsync (0, 1));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.DeleteMessagesAsync (new int[] { 0 }));\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"ServiceNotAuthenticatedException should not cause a disconnect.\");\n\n\t\t\t\tawait client.AuthenticateAsync (Encoding.UTF8, \"username\", \"password\");\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.True, \"IsAuthenticated\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.AuthenticateAsync (\"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessageSizeAsync (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessageUidAsync (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessageAsync (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessagesAsync (-1, 1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessagesAsync (0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.GetMessagesAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.GetMessagesAsync (new int[] { -1 }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessageHeadersAsync (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessageHeadersAsync (-1, 1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetMessageHeadersAsync (0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.GetMessageHeadersAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.GetMessageHeadersAsync (new int[] { -1 }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetStreamAsync (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetStreamsAsync (-1, 1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.GetStreamsAsync (0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.GetStreamsAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.GetStreamsAsync (new int[] { -1 }));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.DeleteMessageAsync (-1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.DeleteMessagesAsync (-1, 1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.DeleteMessagesAsync (0, -1));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.DeleteMessagesAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.DeleteMessagesAsync (new int[] { -1 }));\n\n\t\t\t\tAssert.That ((await client.GetStreamsAsync (0, 0)), Is.Empty);\n\t\t\t\tAssert.That ((await client.GetStreamsAsync (Array.Empty<int> ())), Is.Empty);\n\t\t\t\tAssert.That ((await client.GetMessagesAsync (0, 0)), Is.Empty);\n\t\t\t\tAssert.That ((await client.GetMessagesAsync (Array.Empty<int> ())), Is.Empty);\n\t\t\t\tAssert.That ((await client.GetMessageHeadersAsync (0, 0)), Is.Empty);\n\t\t\t\tAssert.That ((await client.GetMessageHeadersAsync (Array.Empty<int> ())), Is.Empty);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestStartTlsNotSupported ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ())\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.StartTls), \"STLS\");\n\n\t\t\tusing (var client = new Pop3Client ())\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.StartTls), \"STLS Async\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestProtocolLoggerExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogConnect)))\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (Stream.Null, \"pop.gmail.com\", 110, SecureSocketOptions.None), \"LogConnect\");\n\n\t\t\tusing (var client = new Pop3Client (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogConnect)))\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (Stream.Null, \"pop.gmail.com\", 110, SecureSocketOptions.None), \"LogConnect Async\");\n\n\t\t\tusing (var client = new Pop3Client (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogServer)))\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (new Pop3ReplayStream (commands, false), \"pop.gmail.com\", 110, SecureSocketOptions.None), \"LogServer\");\n\n\t\t\tusing (var client = new Pop3Client (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogServer)))\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (new Pop3ReplayStream (commands, true), \"pop.gmail.com\", 110, SecureSocketOptions.None), \"LogServer Async\");\n\n\t\t\tusing (var client = new Pop3Client (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogClient)))\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (new Pop3ReplayStream (commands, false), \"pop.gmail.com\", 110, SecureSocketOptions.None), \"LogClient\");\n\n\t\t\tusing (var client = new Pop3Client (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogClient)))\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (new Pop3ReplayStream (commands, true), \"pop.gmail.com\", 110, SecureSocketOptions.None), \"LogClient Async\");\n\t\t}\n\n\t\tstatic void AssertGMailIsConnected (IMailService client)\n\t\t{\n\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\tAssert.That (client.SslCipherAlgorithm == CipherAlgorithmType.Aes128 || client.SslCipherAlgorithm == CipherAlgorithmType.Aes256, Is.True, $\"Unexpected SslCipherAlgorithm: {client.SslCipherAlgorithm}\");\n\t\t\tAssert.That (client.SslCipherStrength == 128 || client.SslCipherStrength == 256, Is.True, $\"Unexpected SslCipherStrength: {client.SslCipherStrength}\");\n#if !MONO\n\t\t\tAssert.That (client.SslCipherSuite == TlsCipherSuite.TLS_AES_128_GCM_SHA256 || client.SslCipherSuite == TlsCipherSuite.TLS_AES_256_GCM_SHA384, Is.True, $\"Unexpected SslCipherSuite: {client.SslCipherSuite}\");\n\t\t\tAssert.That (client.SslHashAlgorithm == HashAlgorithmType.Sha256 || client.SslHashAlgorithm == HashAlgorithmType.Sha384, Is.True, $\"Unexpected SslHashAlgorithm: {client.SslHashAlgorithm}\");\n#else\n\t\t\tAssert.That (client.SslHashAlgorithm == HashAlgorithmType.None, Is.True, $\"Unexpected SslHashAlgorithm: {client.SslHashAlgorithm}\");\n#endif\n\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t}\n\n\t\tstatic void AssertClientIsDisconnected (IMailService client)\n\t\t{\n\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\t\t\tAssert.That (client.IsSecure, Is.False, \"Expected IsSecure to be false after disconnecting\");\n\t\t\tAssert.That (client.IsEncrypted, Is.False, \"Expected IsEncrypted to be false after disconnecting\");\n\t\t\tAssert.That (client.IsSigned, Is.False, \"Expected IsSigned to be false after disconnecting\");\n\t\t\tAssert.That (client.SslProtocol, Is.EqualTo (SslProtocols.None), \"Expected SslProtocol to be None after disconnecting\");\n\t\t\tAssert.That (client.SslCipherAlgorithm, Is.Null, \"Expected SslCipherAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslCipherStrength, Is.Null, \"Expected SslCipherStrength to be null after disconnecting\");\n\t\t\tAssert.That (client.SslCipherSuite, Is.Null, \"Expected SslCipherSuite to be null after disconnecting\");\n\t\t\tAssert.That (client.SslHashAlgorithm, Is.Null, \"Expected SslHashAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslHashStrength, Is.Null, \"Expected SslHashStrength to be null after disconnecting\");\n\t\t\tAssert.That (client.SslKeyExchangeAlgorithm, Is.Null, \"Expected SslKeyExchangeAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.Null, \"Expected SslKeyExchangeStrength to be null after disconnecting\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMail ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"pop.gmail.com\";\n\t\t\tint port = 995;\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Connect (host, 0, options);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (host, 0, options));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"pop.gmail.com\";\n\t\t\tint port = 995;\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tawait client.ConnectAsync (host, 0, options);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (host, 0, options));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMailViaProxy ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"pop.gmail.com\";\n\t\t\tint port = 995;\n\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.ProxyClient = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\t\tclient.ServerCertificateValidationCallback = (s, c, h, e) => true;\n\t\t\t\t\tclient.ClientCertificates = null;\n\t\t\t\t\tclient.LocalEndPoint = null;\n\t\t\t\t\tclient.Timeout = 20000;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (host, 0, options);\n\t\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t\t}\n\t\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (host, 0, options));\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailViaProxyAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"pop.gmail.com\";\n\t\t\tint port = 995;\n\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.ProxyClient = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\t\tclient.ServerCertificateValidationCallback = (s, c, h, e) => true;\n\t\t\t\t\tclient.ClientCertificates = null;\n\t\t\t\t\tclient.LocalEndPoint = null;\n\t\t\t\t\tclient.Timeout = 20000;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (host, 0, options);\n\t\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t\t}\n\t\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (host, 0, options));\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMailSocket ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"pop.gmail.com\";\n\t\t\tint port = 995;\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tvar socket = Connect (host, port);\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (socket, null, port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (socket, \"\", port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (socket, host, -1, SecureSocketOptions.Auto));\n\n\t\t\t\tclient.Connect (socket, host, port, SecureSocketOptions.Auto);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (socket, \"pop.gmail.com\", 995, SecureSocketOptions.Auto));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailSocketAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"pop.gmail.com\";\n\t\t\tint port = 995;\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tvar socket = Connect (host, port);\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (socket, null, port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (socket, \"\", port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (socket, host, -1, SecureSocketOptions.Auto));\n\n\t\t\t\tawait client.ConnectAsync (socket, host, port, SecureSocketOptions.Auto);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (socket, host, port, SecureSocketOptions.Auto));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGmxDe ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"pop.gmx.de\";\n\t\t\tvar port = 110;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar uri = new Uri ($\"pop://{host}/?starttls=always\");\n\t\t\t\t\tclient.Connect (uri, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGmxDeAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"pop.gmx.de\";\n\t\t\tvar port = 110;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar uri = new Uri ($\"pop://{host}/?starttls=always\");\n\t\t\t\t\tawait client.ConnectAsync (uri, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGmxDeSocket ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"pop.gmx.de\";\n\t\t\tvar port = 110;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar socket = Connect (host, port);\n\t\t\t\t\tclient.Connect (socket, host, port, options, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGmxDeSocketAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"pop.gmx.de\";\n\t\t\tvar port = 110;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar socket = Connect (host, port);\n\t\t\t\t\tawait client.ConnectAsync (socket, host, port, options, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (GmxDeCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (GmxDeCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (GmxDeHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGreetingOk ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"common.ok-greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31), \"ExpirePolicy\");\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGreetingOkAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"common.ok-greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31), \"ExpirePolicy\");\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGreetingErr ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"common.err-greeting.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Expected Connect to fail.\");\n\t\t\t\t} catch (Pop3ProtocolException) {\n\t\t\t\t\tAssert.Pass ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Expected Pop3ProtocolException from Connect: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGreetingErrAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"common.err-greeting.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Expected Connect to fail.\");\n\t\t\t\t} catch (Pop3ProtocolException) {\n\t\t\t\t\tAssert.Pass ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Expected Pop3ProtocolException from Connect: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic IList<Pop3ReplayCommand> CreateBasicPop3ClientCommands ()\n\t\t{\n\t\t\treturn new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"comcast.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicPop3Client ()\n\t\t{\n\t\t\tvar commands = CreateBasicPop3ClientCommands ();\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31), \"ExpirePolicy\");\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar sizes = client.GetMessageSizes ();\n\t\t\t\t\tAssert.That (sizes, Has.Count.EqualTo (7), \"Expected 7 message sizes\");\n\t\t\t\t\tfor (int i = 0; i < sizes.Count; i++)\n\t\t\t\t\t\tAssert.That (sizes[i], Is.EqualTo ((i + 1) * 1024), $\"Unexpected size for message #{i}\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar size = client.GetMessageSize (0);\n\t\t\t\t\tAssert.That (size, Is.EqualTo (1024), \"Unexpected size for 1st message\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = client.GetMessage (0)) {\n\t\t\t\t\t\t// TODO: assert that the message is byte-identical to what we expect\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar count = client.GetMessageCount ();\n\t\t\t\t\tAssert.That (count, Is.EqualTo (7), \"Expected 7 messages again\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageCount: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestBasicPop3ClientAsync ()\n\t\t{\n\t\t\tvar commands = CreateBasicPop3ClientCommands ();\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31), \"ExpirePolicy\");\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar sizes = await client.GetMessageSizesAsync ();\n\t\t\t\t\tAssert.That (sizes, Has.Count.EqualTo (7), \"Expected 7 message sizes\");\n\t\t\t\t\tfor (int i = 0; i < sizes.Count; i++)\n\t\t\t\t\t\tAssert.That (sizes[i], Is.EqualTo ((i + 1) * 1024), $\"Unexpected size for message #{i}\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar size = await client.GetMessageSizeAsync (0);\n\t\t\t\t\tAssert.That (size, Is.EqualTo (1024), \"Unexpected size for 1st message\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = await client.GetMessageAsync (0)) {\n\t\t\t\t\t\t// TODO: assert that the message is byte-identical to what we expect\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar count = await client.GetMessageCountAsync ();\n\t\t\t\t\tAssert.That (count, Is.EqualTo (7), \"Expected 7 messages again\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageCount: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicPop3ClientUnixLineEndings ()\n\t\t{\n\t\t\tvar commands = CreateBasicPop3ClientCommands ();\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar sizes = client.GetMessageSizes ();\n\t\t\t\t\tAssert.That (sizes, Has.Count.EqualTo (7), \"Expected 7 message sizes\");\n\t\t\t\t\tfor (int i = 0; i < sizes.Count; i++)\n\t\t\t\t\t\tAssert.That (sizes[i], Is.EqualTo ((i + 1) * 1024), $\"Unexpected size for message #{i}\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar size = client.GetMessageSize (0);\n\t\t\t\t\tAssert.That (size, Is.EqualTo (1024), \"Unexpected size for 1st message\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = client.GetMessage (0)) {\n\t\t\t\t\t\t// TODO: assert that the message is byte-identical to what we expect\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar count = client.GetMessageCount ();\n\t\t\t\t\tAssert.That (count, Is.EqualTo (7), \"Expected 7 messages again\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageCount: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestBasicPop3ClientUnixLineEndingsAsync ()\n\t\t{\n\t\t\tvar commands = CreateBasicPop3ClientCommands ();\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar sizes = await client.GetMessageSizesAsync ();\n\t\t\t\t\tAssert.That (sizes, Has.Count.EqualTo (7), \"Expected 7 message sizes\");\n\t\t\t\t\tfor (int i = 0; i < sizes.Count; i++)\n\t\t\t\t\t\tAssert.That (sizes[i], Is.EqualTo ((i + 1) * 1024), $\"Unexpected size for message #{i}\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar size = await client.GetMessageSizeAsync (0);\n\t\t\t\t\tAssert.That (size, Is.EqualTo (1024), \"Unexpected size for 1st message\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageSizes: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = await client.GetMessageAsync (0)) {\n\t\t\t\t\t\t// TODO: assert that the message is byte-identical to what we expect\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar count = await client.GetMessageCountAsync ();\n\t\t\t\t\tAssert.That (count, Is.EqualTo (7), \"Expected 7 messages again\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageCount: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestProbedUidlSupport ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User | Pop3Capabilities.UIDL));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tclient.GetMessageUids ();\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestProbedUidlSupportAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User | Pop3Capabilities.UIDL));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tawait client.GetMessageUidsAsync ();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestProbedUidlSupportError ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetMessageUids ());\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetMessageUid (0));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestProbedUidlSupportErrorAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"comcast.err.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (Pop3Capabilities.User));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (0));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.GetMessageUidsAsync ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.GetMessageUidAsync (0));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnableUTF8 ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UTF8\\r\\n\", \"lang.utf8.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"lang.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.EnableUTF8 ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Try to enable UTF8 again even though we've done it. This should just no-op and not send another command.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.EnableUTF8 ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception from second call to EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEnableUTF8Async ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UTF8\\r\\n\", \"lang.utf8.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"lang.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.EnableUTF8Async ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Try to enable UTF8 again even though we've done it. This should just no-op and not send another command.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.EnableUTF8Async ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception from second call to EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnableUTF8AfterAuthenticate ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"APOP username d99894e8445daf54c4ce781ef21331b7\\r\\n\", \"lang.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"lang.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"lang.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.EnableUTF8 ();\n\t\t\t\t\t\tAssert.Fail (\"EnableUTF8() should throw InvalidOperationException.\");\n\t\t\t\t\t} catch (InvalidOperationException) {\n\t\t\t\t\t\tAssert.Pass ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEnableUTF8AfterAuthenticateAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"APOP username d99894e8445daf54c4ce781ef21331b7\\r\\n\", \"lang.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"lang.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"lang.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.EnableUTF8Async ();\n\t\t\t\t\t\tAssert.Fail (\"EnableUTF8Async() should throw InvalidOperationException.\");\n\t\t\t\t\t} catch (InvalidOperationException) {\n\t\t\t\t\t\tAssert.Pass ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by EnableUTF8Async: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnableUTF8NotSupported ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.EnableUTF8 ();\n\t\t\t\t\t\tAssert.Fail (\"EnableUTF8() should throw NotSupportedException.\");\n\t\t\t\t\t} catch (NotSupportedException) {\n\t\t\t\t\t\tAssert.Pass ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEnableUTF8NotSupportedAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.EnableUTF8Async ();\n\t\t\t\t\t\tAssert.Fail (\"EnableUTF8Async() should throw NotSupportedException.\");\n\t\t\t\t\t} catch (NotSupportedException) {\n\t\t\t\t\t\tAssert.Pass ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by EnableUTF8Async: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetMessageCountParseExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat-error3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageCount ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageCount ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageCount ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetMessageCountParseExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat-error3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageCountAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageCountAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageCountAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetMessageSizeParseExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1-error3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageSize (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageSize (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageSize (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetMessageSizeParseExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"comcast.list1-error3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageSizeAsync (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageSizeAsync (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageSizeAsync (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetMessageSizesParseExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list-error3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageSizes ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageSizes ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageSizes ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetMessageSizesParseExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"comcast.list-error3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageSizesAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageSizesAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageSizesAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetMessageUidParseExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageUid (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageUid (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetMessageUidParseExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageUidAsync (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageUidAsync (0));\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetMessageUidsParseExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageUids ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.Throws<Pop3ProtocolException> (() => client.GetMessageUids ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestGetMessageUidsParseExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl-error1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl-error2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageUidsAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\tAssert.ThrowsAsync<Pop3ProtocolException> (async () => await client.GetMessageUidsAsync ());\n\t\t\t\tAssert.That (client.IsConnected, Is.True);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslAuthentication ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertRedacted (MemoryStream stream, string commandPrefix, string nextCommandPrefix)\n\t\t{\n\t\t\tstream.Position = 0;\n\n\t\t\tusing (var reader = new StreamReader (stream, Encoding.ASCII, false, 1024, true)) {\n\t\t\t\tstring secrets;\n\t\t\t\tstring line;\n\n\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\tif (line.StartsWith (commandPrefix, StringComparison.Ordinal))\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tAssert.That (line, Is.Not.Null, $\"Authentication command not found: {commandPrefix}\");\n\n\t\t\t\tif (line.Length > commandPrefix.Length) {\n\t\t\t\t\tsecrets = line.Substring (commandPrefix.Length);\n\n\t\t\t\t\tvar tokens = secrets.Split (' ');\n\t\t\t\t\tvar expectedTokens = new string[tokens.Length];\n\t\t\t\t\tfor (int i = 0; i < tokens.Length; i++)\n\t\t\t\t\t\texpectedTokens[i] = \"********\";\n\n\t\t\t\t\tvar expected = string.Join (\" \", expectedTokens);\n\n\t\t\t\t\tAssert.That (secrets, Is.EqualTo (expected), commandPrefix);\n\t\t\t\t}\n\n\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\tif (line.StartsWith (nextCommandPrefix, StringComparison.Ordinal))\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (!line.StartsWith (\"C: \", StringComparison.Ordinal))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tsecrets = line.Substring (3);\n\n\t\t\t\t\tAssert.That (secrets, Is.EqualTo (\"********\"), \"SASL challenge\");\n\t\t\t\t}\n\n\t\t\t\tAssert.Fail (\"Did not find response.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactApop ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UTF8\\r\\n\", \"lang.utf8.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"APOP username d99894e8445daf54c4ce781ef21331b7\\r\\n\", \"lang.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"lang.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.EnableUTF8 ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: APOP \", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactApopAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UTF8\\r\\n\", \"lang.utf8.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"APOP username d99894e8445daf54c4ce781ef21331b7\\r\\n\", \"lang.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"lang.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.EnableUTF8Async ();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in EnableUTF8: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: APOP \", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactAuthentication ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"GSSAPI\");\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"NTLM\");\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"GSSAPI\");\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"NTLM\");\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactUserPass ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: USER \", \"C: PASS\");\n\t\t\t\tAssertRedacted (stream, \"C: PASS \", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactUserPassAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"comcast.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"USER username\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"PASS password\\r\\n\", \"comcast.ok.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"comcast.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"comcast.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"comcast.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa1));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (31));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ComcastCapa2));\n\t\t\t\t\tAssert.That (client.Implementation, Is.EqualTo (\"ZimbraInc\"));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"X-ZIMBRA\"), \"Expected SASL X-ZIMBRA auth mechanism\");\n\t\t\t\t\tAssert.That (client.ExpirePolicy, Is.EqualTo (-1));\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: USER \", \"C: PASS\");\n\t\t\t\tAssertRedacted (stream, \"C: PASS \", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactSaslAuthentication ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactSaslAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new Pop3Client (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: CAPA\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExchangePop3Client ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"exchange.uidl.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"exchange.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t// Note: remove these auth mechanisms to force LOGIN auth\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"GSSAPI\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"NTLM\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar uids = client.GetMessageUids ();\n\t\t\t\t\tAssert.That (uids, Has.Count.EqualTo (7), \"Expected 7 uids\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageUids: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = client.GetMessage (0)) {\n\t\t\t\t\t\t// TODO: assert that the message is byte-identical to what we expect\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExchangePop3ClientAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"exchange.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH LOGIN\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"exchange.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"exchange.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"exchange.capa.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"exchange.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"exchange.uidl.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"exchange.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"exchange.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\t// Note: remove these auth mechanisms to force LOGIN auth\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"GSSAPI\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"NTLM\");\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (ExchangeCapa));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (4));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"GSSAPI\"), \"Expected SASL GSSAPI auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"NTLM\"), \"Expected SASL NTLM auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Expected SASL LOGIN auth mechanism\");\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (7), \"Expected 7 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (1800662), \"Expected 1800662 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tvar uids = await client.GetMessageUidsAsync ();\n\t\t\t\t\tAssert.That (uids, Has.Count.EqualTo (7), \"Expected 7 uids\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageUids: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = await client.GetMessageAsync (0)) {\n\t\t\t\t\t\t// TODO: assert that the message is byte-identical to what we expect\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<Pop3ReplayCommand> CreateGMailCommands ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 2\\r\\n\", \"gmail.uidl2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 3\\r\\n\", \"gmail.uidl3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"gmail.list.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"gmail.list1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 2\\r\\n\", \"gmail.list2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 3\\r\\n\", \"gmail.list3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\nRETR 2\\r\\nRETR 3\\r\\n\", \"gmail.retr123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\nRETR 2\\r\\nRETR 3\\r\\n\", \"gmail.retr123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\nTOP 2 0\\r\\nTOP 3 0\\r\\n\", \"gmail.top123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\nTOP 2 0\\r\\nTOP 3 0\\r\\n\", \"gmail.top123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\nRETR 2\\r\\nRETR 3\\r\\n\", \"gmail.retr123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\nRETR 2\\r\\nRETR 3\\r\\n\", \"gmail.retr123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"NOOP\\r\\n\", \"gmail.noop.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\nDELE 2\\r\\nDELE 3\\r\\n\", \"gmail.dele123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\nDELE 2\\r\\nDELE 3\\r\\n\", \"gmail.dele123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\nDELE 2\\r\\nDELE 3\\r\\n\", \"gmail.dele123.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\treturn commands;\n\t\t}\n\n\t\tstatic void TestGMailPop3Client (List<Pop3ReplayCommand> commands, bool disablePipelining)\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tif (disablePipelining)\n\t\t\t\t\tclient.Capabilities &= ~Pop3Capabilities.Pipelining;\n\n\t\t\t\tvar uids = client.GetMessageUids ();\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (3));\n\t\t\t\tAssert.That (uids[0], Is.EqualTo (\"101\"));\n\t\t\t\tAssert.That (uids[1], Is.EqualTo (\"102\"));\n\t\t\t\tAssert.That (uids[2], Is.EqualTo (\"103\"));\n\n\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\tvar uid = client.GetMessageUid (i);\n\n\t\t\t\t\tAssert.That (uid, Is.EqualTo (uids[i]));\n\t\t\t\t}\n\n\t\t\t\tvar sizes = client.GetMessageSizes ();\n\t\t\t\tAssert.That (sizes, Has.Count.EqualTo (3));\n\t\t\t\tAssert.That (sizes[0], Is.EqualTo (1024));\n\t\t\t\tAssert.That (sizes[1], Is.EqualTo (1025));\n\t\t\t\tAssert.That (sizes[2], Is.EqualTo (1026));\n\n\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\tvar size = client.GetMessageSize (i);\n\n\t\t\t\t\tAssert.That (size, Is.EqualTo (sizes[i]));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = client.GetMessage (0)) {\n\t\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"5b1b8b2c9300c9cd01099f44e1155e2b\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar messages = client.GetMessages (0, 3);\n\n\t\t\t\t\tforeach (var message in messages) {\n\t\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"5b1b8b2c9300c9cd01099f44e1155e2b\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmessage.Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar messages = client.GetMessages (new [] { 0, 1, 2 });\n\n\t\t\t\t\tforeach (var message in messages) {\n\t\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"5b1b8b2c9300c9cd01099f44e1155e2b\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmessage.Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar header = client.GetMessageHeaders (0);\n\n\t\t\t\t\tAssert.That (header[HeaderId.Subject], Is.EqualTo (\"Test inline image\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar headers = client.GetMessageHeaders (0, 3);\n\n\t\t\t\t\tAssert.That (headers, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < headers.Count; i++)\n\t\t\t\t\t\tAssert.That (headers[i][HeaderId.Subject], Is.EqualTo (\"Test inline image\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar headers = client.GetMessageHeaders (new [] { 0, 1, 2 });\n\n\t\t\t\t\tAssert.That (headers, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < headers.Count; i++)\n\t\t\t\t\t\tAssert.That (headers[i][HeaderId.Subject], Is.EqualTo (\"Test inline image\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var stream = client.GetStream (0)) {\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetStream: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar streams = client.GetStreams (0, 3);\n\n\t\t\t\t\tAssert.That (streams, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\t\tstreams[i].Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetStreams: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar streams = client.GetStreams (new int[] { 0, 1, 2 });\n\n\t\t\t\t\tAssert.That (streams, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\t\tstreams[i].Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetStreams: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.NoOp ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in NoOp: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.DeleteMessage (0);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Reset ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.DeleteMessages (new [] { 0, 1, 2 });\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Reset ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.DeleteMessages (0, 3);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Reset ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.DeleteAllMessages ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteAllMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Reset ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGMailPop3Client ()\n\t\t{\n\t\t\tTestGMailPop3Client (CreateGMailCommands (), false);\n\t\t}\n\n\t\tstatic async Task TestGMailPop3ClientAsync (List<Pop3ReplayCommand> commands, bool disablePipelining)\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tif (disablePipelining)\n\t\t\t\t\tclient.Capabilities &= ~Pop3Capabilities.Pipelining;\n\n\t\t\t\tvar uids = await client.GetMessageUidsAsync ();\n\t\t\t\tAssert.That (uids, Has.Count.EqualTo (3));\n\t\t\t\tAssert.That (uids[0], Is.EqualTo (\"101\"));\n\t\t\t\tAssert.That (uids[1], Is.EqualTo (\"102\"));\n\t\t\t\tAssert.That (uids[2], Is.EqualTo (\"103\"));\n\n\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\tvar uid = await client.GetMessageUidAsync (i);\n\n\t\t\t\t\tAssert.That (uid, Is.EqualTo (uids[i]));\n\t\t\t\t}\n\n\t\t\t\tvar sizes = await client.GetMessageSizesAsync ();\n\t\t\t\tAssert.That (sizes, Has.Count.EqualTo (3));\n\t\t\t\tAssert.That (sizes[0], Is.EqualTo (1024));\n\t\t\t\tAssert.That (sizes[1], Is.EqualTo (1025));\n\t\t\t\tAssert.That (sizes[2], Is.EqualTo (1026));\n\n\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\tvar size = await client.GetMessageSizeAsync (i);\n\n\t\t\t\t\tAssert.That (size, Is.EqualTo (sizes[i]));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar message = await client.GetMessageAsync (0);\n\n\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"5b1b8b2c9300c9cd01099f44e1155e2b\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar messages = await client.GetMessagesAsync (0, 3);\n\n\t\t\t\t\tforeach (var message in messages) {\n\t\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"5b1b8b2c9300c9cd01099f44e1155e2b\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmessage.Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar messages = await client.GetMessagesAsync (new [] { 0, 1, 2 });\n\n\t\t\t\t\tforeach (var message in messages) {\n\t\t\t\t\t\tusing (var jpeg = new MemoryStream ()) {\n\t\t\t\t\t\t\tvar attachment = message.Attachments.OfType<MimePart> ().FirstOrDefault ();\n\n\t\t\t\t\t\t\tattachment.Content.DecodeTo (jpeg);\n\t\t\t\t\t\t\tjpeg.Position = 0;\n\n\t\t\t\t\t\t\tusing (var md5 = MD5.Create ()) {\n\t\t\t\t\t\t\t\tvar md5sum = HexEncode (md5.ComputeHash (jpeg));\n\n\t\t\t\t\t\t\t\tAssert.That (md5sum, Is.EqualTo (\"5b1b8b2c9300c9cd01099f44e1155e2b\"), \"MD5 checksums do not match.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmessage.Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar header = await client.GetMessageHeadersAsync (0);\n\n\t\t\t\t\tAssert.That (header[HeaderId.Subject], Is.EqualTo (\"Test inline image\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar headers = await client.GetMessageHeadersAsync (0, 3);\n\n\t\t\t\t\tAssert.That (headers, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < headers.Count; i++)\n\t\t\t\t\t\tAssert.That (headers[i][HeaderId.Subject], Is.EqualTo (\"Test inline image\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar headers = await client.GetMessageHeadersAsync (new [] { 0, 1, 2 });\n\n\t\t\t\t\tAssert.That (headers, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < headers.Count; i++)\n\t\t\t\t\t\tAssert.That (headers[i][HeaderId.Subject], Is.EqualTo (\"Test inline image\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var stream = await client.GetStreamAsync (0)) {\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetStream: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar streams = await client.GetStreamsAsync (0, 3);\n\n\t\t\t\t\tAssert.That (streams, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\t\tstreams[i].Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetStreams: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar streams = await client.GetStreamsAsync (new int[] { 0, 1, 2 });\n\n\t\t\t\t\tAssert.That (streams, Has.Count.EqualTo (3));\n\t\t\t\t\tfor (int i = 0; i < 3; i++) {\n\t\t\t\t\t\tstreams[i].Dispose ();\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in GetStreams: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.NoOpAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in NoOp: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DeleteMessageAsync (0);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ResetAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DeleteMessagesAsync (new [] { 0, 1, 2 });\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ResetAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DeleteMessagesAsync (0, 3);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ResetAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DeleteAllMessagesAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in DeleteAllMessages: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ResetAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Reset: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestGMailPop3ClientAsync ()\n\t\t{\n\t\t\treturn TestGMailPop3ClientAsync (CreateGMailCommands (), false);\n\t\t}\n\n\t\tstatic List<Pop3ReplayCommand> CreateGMailCommandsNoPipelining ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL\\r\\n\", \"gmail.uidl.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 1\\r\\n\", \"gmail.uidl1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 2\\r\\n\", \"gmail.uidl2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UIDL 3\\r\\n\", \"gmail.uidl3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST\\r\\n\", \"gmail.list.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 1\\r\\n\", \"gmail.list1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 2\\r\\n\", \"gmail.list2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LIST 3\\r\\n\", \"gmail.list3.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 2\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 3\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 2\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 3\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 2 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 3 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 2 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 3 0\\r\\n\", \"gmail.top.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 2\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 3\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 2\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 3\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"NOOP\\r\\n\", \"gmail.noop.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 2\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 3\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 2\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 3\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 1\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 2\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"DELE 3\\r\\n\", \"gmail.dele.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RSET\\r\\n\", \"gmail.rset.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\treturn commands;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGMailPop3ClientNoPipelining ()\n\t\t{\n\t\t\tTestGMailPop3Client (CreateGMailCommandsNoPipelining (), true);\n\t\t}\n\n\t\t[Test]\n\t\tpublic Task TestGMailPop3ClientNoPipeliningAsync ()\n\t\t{\n\t\t\treturn TestGMailPop3ClientAsync (CreateGMailCommandsNoPipelining (), true);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetEnumerator ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 2\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 3\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 2\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 3\\r\\n\", \"gmail.retr1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tint count = 0;\n\t\t\t\tforeach (var message in client)\n\t\t\t\t\tcount++;\n\t\t\t\tAssert.That (count, Is.EqualTo (3));\n\n\t\t\t\tcount = 0;\n\t\t\t\tforeach (var message in (IEnumerable) client)\n\t\t\t\t\tcount++;\n\t\t\t\tAssert.That (count, Is.EqualTo (3));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLangExtension ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UTF8\\r\\n\", \"lang.utf8.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"APOP username d99894e8445daf54c4ce781ef21331b7\\r\\n\", \"lang.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"lang.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LANG\\r\\n\", \"lang.getlang.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LANG en\\r\\n\", \"lang.setlang.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.EnableUTF8 ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in EnableUTF8: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tvar languages = client.GetLanguages ();\n\t\t\t\tAssert.That (languages, Has.Count.EqualTo (6));\n\t\t\t\tAssert.That (languages[0].Language, Is.EqualTo (\"en\"));\n\t\t\t\tAssert.That (languages[0].Description, Is.EqualTo (\"English\"));\n\t\t\t\tAssert.That (languages[1].Language, Is.EqualTo (\"en-boont\"));\n\t\t\t\tAssert.That (languages[1].Description, Is.EqualTo (\"English Boontling dialect\"));\n\t\t\t\tAssert.That (languages[2].Language, Is.EqualTo (\"de\"));\n\t\t\t\tAssert.That (languages[2].Description, Is.EqualTo (\"Deutsch\"));\n\t\t\t\tAssert.That (languages[3].Language, Is.EqualTo (\"it\"));\n\t\t\t\tAssert.That (languages[3].Description, Is.EqualTo (\"Italiano\"));\n\t\t\t\tAssert.That (languages[4].Language, Is.EqualTo (\"es\"));\n\t\t\t\tAssert.That (languages[4].Description, Is.EqualTo (\"Espanol\"));\n\t\t\t\tAssert.That (languages[5].Language, Is.EqualTo (\"sv\"));\n\t\t\t\tAssert.That (languages[5].Description, Is.EqualTo (\"Svenska\"));\n\n\t\t\t\tclient.SetLanguage (\"en\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestLangExtensionAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"lang.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"UTF8\\r\\n\", \"lang.utf8.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"APOP username d99894e8445daf54c4ce781ef21331b7\\r\\n\", \"lang.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"lang.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"lang.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LANG\\r\\n\", \"lang.getlang.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"LANG en\\r\\n\", \"lang.setlang.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.EnableUTF8Async ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in EnableUTF8: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (LangCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tvar languages = await client.GetLanguagesAsync ();\n\t\t\t\tAssert.That (languages, Has.Count.EqualTo (6));\n\t\t\t\tAssert.That (languages[0].Language, Is.EqualTo (\"en\"));\n\t\t\t\tAssert.That (languages[0].Description, Is.EqualTo (\"English\"));\n\t\t\t\tAssert.That (languages[1].Language, Is.EqualTo (\"en-boont\"));\n\t\t\t\tAssert.That (languages[1].Description, Is.EqualTo (\"English Boontling dialect\"));\n\t\t\t\tAssert.That (languages[2].Language, Is.EqualTo (\"de\"));\n\t\t\t\tAssert.That (languages[2].Description, Is.EqualTo (\"Deutsch\"));\n\t\t\t\tAssert.That (languages[3].Language, Is.EqualTo (\"it\"));\n\t\t\t\tAssert.That (languages[3].Description, Is.EqualTo (\"Italiano\"));\n\t\t\t\tAssert.That (languages[4].Language, Is.EqualTo (\"es\"));\n\t\t\t\tAssert.That (languages[4].Description, Is.EqualTo (\"Espanol\"));\n\t\t\t\tAssert.That (languages[5].Language, Is.EqualTo (\"sv\"));\n\t\t\t\tAssert.That (languages[5].Description, Is.EqualTo (\"Svenska\"));\n\n\t\t\t\tawait client.SetLanguageAsync (\"en\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLangNotSupported ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.GetLanguages ());\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.SetLanguage (\"en\"));\n\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.GetLanguagesAsync ());\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.SetLanguageAsync (\"en\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParseExceptions ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1-parse-error.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\n\", \"gmail.retr1-parse-error.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new Pop3ReplayStream (commands, false), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.GetMessage (0);\n\t\t\t\t\tAssert.Fail (\"Expected GetMessage() to throw Pop3ProtocolException\");\n\t\t\t\t} catch (Pop3ProtocolException pex) {\n\t\t\t\t\tAssert.That (pex.InnerException, Is.InstanceOf<FormatException> ());\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by GetMessage: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.GetMessageHeaders (0);\n\t\t\t\t\tAssert.Fail (\"Expected GetMessageHeaders() to throw Pop3ProtocolException\");\n\t\t\t\t} catch (Pop3ProtocolException pex) {\n\t\t\t\t\tAssert.That (pex.InnerException, Is.InstanceOf<FormatException> ());\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by GetMessageHeaders: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestParseExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = new List<Pop3ReplayCommand> {\n\t\t\t\tnew Pop3ReplayCommand (\"\", \"gmail.greeting.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa1.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AUTH PLAIN\\r\\n\", \"gmail.plus.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"gmail.auth.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"CAPA\\r\\n\", \"gmail.capa2.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"STAT\\r\\n\", \"gmail.stat.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"RETR 1\\r\\n\", \"gmail.retr1-parse-error.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"TOP 1 0\\r\\n\", \"gmail.retr1-parse-error.txt\"),\n\t\t\t\tnew Pop3ReplayCommand (\"QUIT\\r\\n\", \"gmail.quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new Pop3ReplayStream (commands, true), \"localhost\", 110, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa1));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Has.Count.EqualTo (2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"XOAUTH2\"), \"Expected SASL XOAUTH2 auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Expected SASL PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (GMailCapa2));\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Is.Empty);\n\t\t\t\tAssert.That (client, Has.Count.EqualTo (3), \"Expected 3 messages\");\n\t\t\t\tAssert.That (client.Size, Is.EqualTo (221409), \"Expected 221409 octets\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.GetMessageAsync (0);\n\t\t\t\t\tAssert.Fail (\"Expected GetMessageAsync() to throw Pop3ProtocolException\");\n\t\t\t\t} catch (Pop3ProtocolException pex) {\n\t\t\t\t\tAssert.That (pex.InnerException, Is.InstanceOf<FormatException> ());\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by GetMessageAsync: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.GetMessageHeadersAsync (0);\n\t\t\t\t\tAssert.Fail (\"Expected GetMessageHeadersAsync() to throw Pop3ProtocolException\");\n\t\t\t\t} catch (Pop3ProtocolException pex) {\n\t\t\t\t\tAssert.That (pex.InnerException, Is.InstanceOf<FormatException> ());\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception thrown by GetMessageHeadersAsync: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Pop3CommandExceptionTests.cs",
    "content": "﻿//\n// Pop3CommandExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit.Net.Pop3;\n\nnamespace UnitTests.Net.Pop3 {\n\t[TestFixture]\n\tpublic class Pop3CommandExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestPop3CommandException ()\n\t\t{\n\t\t\tPop3CommandException expected;\n\n\t\t\texpected = new Pop3CommandException ();\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3CommandException)formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.StatusText, Is.EqualTo (expected.StatusText), \"Unexpected StatusText.\");\n\t\t\t}\n\n\t\t\texpected = new Pop3CommandException (\"This is the error message.\");\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3CommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.StatusText, Is.EqualTo (expected.StatusText), \"Unexpected StatusText.\");\n\t\t\t}\n\n\t\t\texpected = new Pop3CommandException (\"This is the error message.\", new IOException (\"There was an IO error.\"));\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3CommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.StatusText, Is.EqualTo (expected.StatusText), \"Unexpected StatusText.\");\n\t\t\t}\n\n\t\t\texpected = new Pop3CommandException (\"This is the error message.\", \"This is the status text\");\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3CommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.StatusText, Is.EqualTo (expected.StatusText), \"Unexpected StatusText.\");\n\t\t\t}\n\n\t\t\texpected = new Pop3CommandException (\"This is the error message.\", \"This is the status text\", new IOException (\"There was an IO error.\"));\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (Pop3CommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.StatusText, Is.EqualTo (expected.StatusText), \"Unexpected StatusText.\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Pop3ReplayStream.cs",
    "content": "﻿//\n// Pop3ReplayStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MimeKit.IO;\nusing MimeKit.IO.Filters;\n\nnamespace UnitTests.Net.Pop3 {\n\tclass Pop3ReplayCommand\n\t{\n\t\tpublic string Command { get; private set; }\n\t\tpublic string Resource { get; private set; }\n\n\t\tpublic Pop3ReplayCommand (string command, string resource)\n\t\t{\n\t\t\tCommand = command;\n\t\t\tResource = resource;\n\t\t}\n\t}\n\n\tenum Pop3ReplayState {\n\t\tSendResponse,\n\t\tWaitForCommand,\n\t}\n\n\tclass Pop3ReplayStream : Stream\n\t{\n\t\treadonly IList<Pop3ReplayCommand> commands;\n\t\treadonly bool testUnixFormat;\n\t\treadonly bool asyncIO;\n\t\tPop3ReplayState state;\n\t\tint timeout = 100000;\n\t\tStream stream;\n\t\tbool disposed;\n\t\tbool isAsync;\n\t\tint index;\n\n\t\tpublic Pop3ReplayStream (IList<Pop3ReplayCommand> commands, bool asyncIO, bool testUnixFormat = false)\n\t\t{\n\t\t\tstream = GetResourceStream (commands[0].Resource);\n\t\t\tstate = Pop3ReplayState.SendResponse;\n\t\t\tthis.testUnixFormat = testUnixFormat;\n\t\t\tthis.commands = commands;\n\t\t\tthis.asyncIO = asyncIO;\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (\"Pop3ReplayStream\");\n\t\t}\n\n\t\t#region implemented abstract members of Stream\n\n\t\tpublic override bool CanRead {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanWrite {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override long Length {\n\t\t\tget { return stream.Length; }\n\t\t}\n\n\t\tpublic override long Position {\n\t\t\tget { return stream.Position; }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return timeout; }\n\t\t\tset { timeout = value; }\n\t\t}\n\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return timeout; }\n\t\t\tset { timeout = value; }\n\t\t}\n\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (asyncIO) {\n\t\t\t\tAssert.That (isAsync, Is.True, \"Trying to Read in an async unit test.\");\n\t\t\t} else {\n\t\t\t\tAssert.That (isAsync, Is.False, \"Trying to ReadAsync in a non-async unit test.\");\n\t\t\t}\n\n\t\t\tAssert.That (state, Is.EqualTo (Pop3ReplayState.SendResponse), \"Trying to read when no command given.\");\n\t\t\tAssert.That (stream, Is.Not.Null, \"Trying to read when no data available.\");\n\n\t\t\tint nread = stream.Read (buffer, offset, 1);\n\n\t\t\tif (stream.Position == stream.Length) {\n\t\t\t\tstate = Pop3ReplayState.WaitForCommand;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn nread;\n\t\t}\n\n\t\tpublic override Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tisAsync = true;\n\n\t\t\ttry {\n\t\t\t\treturn Task.FromResult (Read (buffer, offset, count));\n\t\t\t} finally {\n\t\t\t\tisAsync = false;\n\t\t\t}\n\t\t}\n\n\t\tStream GetResourceStream (string name)\n\t\t{\n\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.\" + name)) {\n\t\t\t\tvar memory = new MemoryBlockStream ();\n\n\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\tif (testUnixFormat)\n\t\t\t\t\t\tfiltered.Add (new Dos2UnixFilter ());\n\t\t\t\t\telse\n\t\t\t\t\t\tfiltered.Add (new Unix2DosFilter ());\n\t\t\t\t\tresponse.CopyTo (filtered, 4096);\n\t\t\t\t}\n\n\t\t\t\tmemory.Position = 0;\n\t\t\t\treturn memory;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (asyncIO) {\n\t\t\t\tAssert.That (isAsync, Is.True, \"Trying to Write in an async unit test.\");\n\t\t\t} else {\n\t\t\t\tAssert.That (isAsync, Is.False, \"Trying to WriteAsync in a non-async unit test.\");\n\t\t\t}\n\n\t\t\tAssert.That (state, Is.EqualTo (Pop3ReplayState.WaitForCommand), \"Trying to write when a command has already been given.\");\n\n\t\t\tvar command = Encoding.UTF8.GetString (buffer, offset, count);\n\n\t\t\tAssert.That (command, Is.EqualTo (commands[index].Command), \"Commands did not match.\");\n\n\t\t\tstream?.Dispose ();\n\n\t\t\tstream = GetResourceStream (commands[index].Resource);\n\t\t\tstate = Pop3ReplayState.SendResponse;\n\t\t}\n\n\t\tpublic override Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tisAsync = true;\n\n\t\t\ttry {\n\t\t\t\tWrite (buffer, offset, count);\n\t\t\t\treturn Task.FromResult (true);\n\t\t\t} finally {\n\t\t\t\tisAsync = false;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tAssert.That (asyncIO, Is.False, \"Trying to Flush in an async unit test.\");\n\t\t}\n\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tAssert.That (asyncIO, Is.True, \"Trying to FlushAsync in a non-async unit test.\");\n\n\t\t\treturn Task.FromResult (true);\n\t\t}\n\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t#endregion\n\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tstream?.Dispose ();\n\n\t\t\tbase.Dispose (disposing);\n\t\t\tdisposed = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Pop3StreamTests.cs",
    "content": "﻿//\n// Pop3StreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Security.Cryptography;\n\nusing MailKit;\nusing MailKit.Net.Pop3;\n\nnamespace UnitTests.Net.Pop3 {\n\t[TestFixture]\n\tpublic class Pop3StreamTests\n\t{\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeek ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.That (stream.CanRead, Is.True);\n\t\t\t\tAssert.That (stream.CanWrite, Is.True);\n\t\t\t\tAssert.That (stream.CanSeek, Is.False);\n\t\t\t\tAssert.That (stream.CanTimeout, Is.True);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSetTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tstream.ReadTimeout = 5;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (5), \"ReadTimeout\");\n\n\t\t\t\tstream.WriteTimeout = 7;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (7), \"WriteTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRead ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"+OK\\r\\n\");\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Read (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Read (buffer, 0, -1));\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tstream.Mode = Pop3StreamMode.Line;\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => stream.Read (buffer, 0, buffer.Length));\n\n\t\t\t\tstream.Mode = Pop3StreamMode.Data;\n\t\t\t\tvar n = stream.Read (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (data.Length), \"Read\");\n\t\t\t\tAssert.That (Encoding.ASCII.GetString (buffer, 0, n), Is.EqualTo (\"+OK\\r\\n\"), \"Read\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadAsync ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar data = Encoding.ASCII.GetBytes (\"+OK\\r\\n\");\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await stream.ReadAsync (null, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, -1, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await stream.ReadAsync (buffer, 0, -1));\n\n\t\t\t\tstream.Stream.Write (data, 0, data.Length);\n\t\t\t\tstream.Stream.Position = 0;\n\n\t\t\t\tstream.Mode = Pop3StreamMode.Line;\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await stream.ReadAsync (buffer, 0, buffer.Length));\n\n\t\t\t\tstream.Mode = Pop3StreamMode.Data;\n\t\t\t\tvar n = await stream.ReadAsync (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (data.Length), \"Read\");\n\t\t\t\tAssert.That (Encoding.ASCII.GetString (buffer, 0, n), Is.EqualTo (\"+OK\\r\\n\"), \"Read\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSeek ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (0, SeekOrigin.Begin));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Position = 500);\n\t\t\t\tAssert.That (stream.Position, Is.EqualTo (0));\n\t\t\t\tAssert.That (stream.Length, Is.EqualTo (0));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSetLength ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (500));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWrite ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buf1k = RandomNumberGenerator.GetBytes (1024);\n\t\t\t\tvar buf4k = RandomNumberGenerator.GetBytes (4096);\n\t\t\t\tvar buf9k = RandomNumberGenerator.GetBytes (9216);\n\t\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\t\tvar buffer = new byte[8192];\n\t\t\t\tbyte[] mem;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Write (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, 0, -1));\n\n\t\t\t\t// Test #1: write less than 4K to make sure that Pop3Stream buffers it\n\t\t\t\tstream.Write (buf1k, 0, buf1k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (0), \"#1\");\n\n\t\t\t\t// Test #2: make sure that flushing the Pop3Stream flushes the entire buffer out to the network\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length), \"#2\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf1k[i]), $\"#2 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #3: write exactly 4K to make sure it passes through w/o the need to flush\n\t\t\t\tstream.Write (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf4k.Length), \"#3\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf4k[i]), $\"#3 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #4: write 1k and then write 4k, make sure that only 4k passes thru (last 1k gets buffered)\n\t\t\t\tstream.Write (buf1k, 0, buf1k.Length);\n\t\t\t\tstream.Write (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (4096), \"#4\");\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length + buf4k.Length), \"#4\");\n\t\t\t\tArray.Copy (buf1k, 0, buffer, 0, buf1k.Length);\n\t\t\t\tArray.Copy (buf4k, 0, buffer, buf1k.Length, buf4k.Length);\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length + buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buffer[i]), $\"#4 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #5: write 9k and make sure only the first 8k goes thru (last 1k gets buffered)\n\t\t\t\tstream.Write (buf9k, 0, buf9k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (8192), \"#5\");\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf9k.Length), \"#5\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf9k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf9k[i]), $\"#5 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestWriteAsync ()\n\t\t{\n\t\t\tusing (var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buf1k = RandomNumberGenerator.GetBytes (1024);\n\t\t\t\tvar buf4k = RandomNumberGenerator.GetBytes (4096);\n\t\t\t\tvar buf9k = RandomNumberGenerator.GetBytes (9216);\n\t\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\t\tvar buffer = new byte[8192];\n\t\t\t\tbyte[] mem;\n\n\t\t\t\t// Test #1: write less than 4K to make sure that Pop3Stream buffers it\n\t\t\t\tawait stream.WriteAsync (buf1k, 0, buf1k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (0), \"#1\");\n\n\t\t\t\t// Test #2: make sure that flushing the Pop3Stream flushes the entire buffer out to the network\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length), \"#2\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf1k[i]), $\"#2 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #3: write exactly 4K to make sure it passes through w/o the need to flush\n\t\t\t\tawait stream.WriteAsync (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf4k.Length), \"#3\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf4k[i]), $\"#3 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #4: write 1k and then write 4k, make sure that only 4k passes thru (last 1k gets buffered)\n\t\t\t\tawait stream.WriteAsync (buf1k, 0, buf1k.Length);\n\t\t\t\tawait stream.WriteAsync (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (4096), \"#4\");\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length + buf4k.Length), \"#4\");\n\t\t\t\tArray.Copy (buf1k, 0, buffer, 0, buf1k.Length);\n\t\t\t\tArray.Copy (buf4k, 0, buffer, buf1k.Length, buf4k.Length);\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length + buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buffer[i]), $\"#4 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #5: write 9k and make sure only the first 8k goes thru (last 1k gets buffered)\n\t\t\t\tawait stream.WriteAsync (buf9k, 0, buf9k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (8192), \"#5\");\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf9k.Length), \"#5\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf9k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf9k[i]), $\"#5 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQueueReallyLongCommand ()\n\t\t{\n\t\t\tusing var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\tvar command = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096) + \"\\r\\n\";\n\n\t\t\tstream.QueueCommand (Encoding.UTF8, command, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (command));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQueueReallyLongCommandAfterShortCommand ()\n\t\t{\n\t\t\tusing var stream = new Pop3Stream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar shortCommand = \"CAPA\\r\\n\";\n\t\t\tvar longCommand = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096) + \"\\r\\n\";\n\n\t\t\tstream.QueueCommand (Encoding.UTF8, shortCommand, default);\n\t\t\tstream.QueueCommand (Encoding.UTF8, longCommand, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (shortCommand + longCommand));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/capa1.txt",
    "content": "+OK Capability list follows\nTOP\nUSER\nUIDL\nSTLS\nEXPIRE 31 USER\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/capa2.txt",
    "content": "+OK Capability list follows\nTOP\nUSER\nUIDL\nSTLS\nSASL PLAIN X-ZIMBRA\nEXPIRE NEVER\nXOIP\nIMPLEMENTATION ZimbraInc\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/err.txt",
    "content": "-ERR\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/greeting.txt",
    "content": "+OK POP3 ready\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list-error1.txt",
    "content": "+OK\n1 1024\n2 2048\n3 3072\n4 4096\n5 5120\n6 6144\n7\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list-error2.txt",
    "content": "+OK\n1 1024\n2 2048\n3 3072\n4 4096\n5 5120\n6 6144\n8 8192\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list-error3.txt",
    "content": "+OK\n1 1024\n2 2048\n3 3072\n4 4096\n5 5120\n6 6144\n7 ten-twenty-four\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list.txt",
    "content": "+OK\n1 1024\n2 2048\n3 3072\n4 4096\n5 5120\n6 6144\n7 7168\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list1-error1.txt",
    "content": "+OK 1\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list1-error2.txt",
    "content": "+OK 99 1024\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list1-error3.txt",
    "content": "+OK 1 ten-twenty-four\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/list1.txt",
    "content": "+OK 1 1024\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/ok.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/quit.txt",
    "content": "+OK POP3 server closing connection\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/retr1.txt",
    "content": "+OK message follows\nReturn-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA12840> for nsb; Thu, 19 Sep 91 12:41:43 EDT\nDate: Thu, 19 Sep 91 12:41:43 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9109191641.AA12840@greenbush.bellcore.com>\nTo: abel, bianchi, braun, cameron, carmen, jfp, jxr, kraut, lamb, lowery, lynn,\n        mlittman, nancyg, sau, shoshi, slr, stornett@flash, tkl\nCc: nsb, trina@flash\nSubject: Star Trek Party!\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Outermost_Trek\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/parallel; boundary=Where_No_One_Has_Gone_Before\n\n--Where_No_One_Has_Gone_Before\n\nYou are invited to a \n\n*** STAR TREK 25TH ANNIVERSARY PARTY ***\n\nWhen:  September 28, 1991,  4:30 PM until whenever\nWhat:  For those interested, we'll have a rerun of last year's season-ending \n\tcliffhanger, and  then we'll tune in the season opener and the 25th \n\tanniversary TV special.   Prior to that, if you bring some food \n\twe'll have a pot-luck meal, and general merriment before and after.\nWho:  You and your family, including kids of course.\nWhere:  25 Washington Avenue, Morristown.  \n\t(See Nathaniel if you need directions.)\nRSVP:  993-8586\n\nWhat follows is some Star Trek related multimedia mail, the last of which will give you a chance to RSVP on line.  \n\nLive Long and Prosper!  -- Nathaniel & Trina\n--Where_No_One_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAFmUAAAAAQAAH0AAAAABAAAAAAAAAAD////////37+/r7e/z9/f7//93b29z\n//////v37evv7+vr7+/z9/97b2NdVU9OT09RWmFr9+Pd3d3e4+vt/29la21ra2lra3vn3dzn\n9+//YVtaV1tp9/PjzsjHxsbGy87P2ef3c2dz/+vr59/Z09HR1dLR2d7n/2lXTUU+OzY1NTQ1\nOD5ETmXf2dLP1dfb3O9jYWNhX19pb+/ZzsjIzMzP43dfVU1RX2/bybu6u7q7wcjN0+1ra1VR\nY3fv7+fZzsS/v8LEztXW62FPRj03Mi8sLCwsLTVFVffLwL6+v8XFy9b/W1tdV1RVWVtr2srG\nytXj/09LRT4/SVtd2MC0r66trrG2uL3I0/dOSE5WWVxn99nGvby7vsfR4VdKRT03MCwoJSYn\nJyowPURb0cfHz9lrZ2tZRktdd+HazcrGv7iwrrC4usHR5W9VTl1pd8i7tLSztbm/xcrb91dF\nPj9DREhXb+vQv7y7uby/wsr3XUQ7My8pJiYnJiYsOEFK38G9vL7Fzc/R72f/1dXe69/v99/M\nw87v919NSUU+PUVMTme8s66urKyvsrO2vcTNb1JVWVNLTmfr2szKx8HLzs3XY0o9ODQtKCYm\nKCYoLjpHacnIx8fI1W9dU0A9RU5nZf/Zxru2rKuusrK3xM/cb1pvd2PXu7Ovr7O2vtVlS0M9\nODM2Oj1ATVfr1cq/vbu6ur7DyutSPzoxKiUjJCUkJS48T+29trSxt7zCyNNYS1FYb+/t2c/H\nvrq6x9HbW0E9PDg6QE1dxbGtqaenqayxtbnC3FFNS1NeZ//c18/SzM7Pz/ddTktAOTUvLCgl\nJScmKCw3QV3bvru2trzCyMjrT0hTe+fXy767urCsq7G4vcn3WU4/P0NJTs+6tbS1uL3Oa0Y/\nPDcxMjg+SlBb3si8urq4uru+yNnvW0c9OTApJycmIyQpLzdFY8i8uLS2urzC71b/697j2sfC\nvLivr7W9xM1bRT88ODxHSnu8rqyqqquvtsDXd1NGRERKUVphX+HTz9LV2t/3b1tNRDs2MC8p\nJSUlJSUsND1I2MC3srK1urm7xldHRUtLTF7Vyr61rKutsLa8zmdKPjpDRlHPt6+ur7K7x+FZ\nRj86NzU3Pk9cb+/Nvry9wb6/w8jV/1pFOzgzLSssKygoLTQ9SNrHvbi3uLq8xNtMTE9eZWfn\nx8G6r6yttLa9ymdGODQ1PUBHzrWtrauutLrC2VlNPj1BRE1be+/jzMLJzNPjXVtKQDo2NDEu\nKygoKignKjA4QGvIv7u4uLq8v83hY2lvc+/Ovrm2r6utr7O7yetURzs5PUdbyrevrq+zusfP\n91lEPjs5OT5FTFBd98zIzcvKy93ja1lPQzs6Mi4sLCsqKzRFT9a5s7O3ubm9vcPnY1dMS1NN\nXdfMw7y9x8rI0V1VT1M+PUdvz76vq6+vr7zCy9VZTkpKTERhc1lr0d3Sy83azs5rXU5EODMu\nKykmJSQkIygyOkTOuLWzrrG/xbu41s7I1+u9ubmyrKytrbS7uuFCOjY0ODlAc8O+tbbAyM3v\nX11LRkZERV7f69PPz9vZyszKx8DYy8vrUT83Li8pJioqKCs0Oz13u7W0srXHwsXcUVQ9PEZE\nQE/XzsC6uL28xcHhRz9HQD5axbavq6mssbC+z+PTRzI8Ojg700ZFd9dN47nDz7+47cjM7ztD\nQy4qLS0jJygqMDNP38vPu7m8vbq2vsfG19fXzsO1tLOvrbPfu77VO0xFNS9CQEXCzL+3rcvY\n4108Qz0wO0jj/93awr7VwLW83bS6wtTDWzowMzMoIyYpIyorLkJd19W6r7K/vLH/zrz3Pc3M\nP2O/zky5s9HIr+dMPkIvNkpM0LinpJ+fo6qvvU5LSzYuMjk4SdDP3sO9z8vFTzZHQi49U0Rd\nzMnN59zrbzA3PDsuLi0xKTAuKz3rxb6urqWgsbe4n6Sqt6rGLTI2Kibrs8XBq8F7MDIfJCEn\nLjtfr6ain5+foqK1w0IvHyAoIzBByc+trKepq7HGZTErHx8fHx8fHyAnMkLIr6ifn5+fn5+f\no6Cx78HhLzRTPylHMysrOiwmTEU4P7Pew7P33atJSa6nc76sr0i2rMNevbs438hIJVlQLyx3\nOCgtNCslMTwuNOPQyLKtqqerrK7GzVvTNS0uRSwmRdM3T63FrqzM377eOT1fKy5XREjJt7Oq\nsLKtqv++wUfXwUss3UYvxNg8c6zLvrLDv75eS2suNy0iLjMfJjsyPa62yq2ipsyrxUq+zT5O\n20e5PTK8yz+8sV/VZ7NFS09NMi9UTTxetFzIu96yvt+7r1ezsMXMa1tO0z05KT0rIkAuMEn3\nQLfnabRWSkfJTDo3yk9DLN+qv1/RyUbrU0lFd0W5tr3Bv7xPZ9EwLsbEPFuvvVO+q7Cup7K4\nY080HyUgHyMmP0BXraOroammta3Jv0tLOygpKT5EL+mst8q7q6zv0cu1UUFZP003LjMzXS00\nRkYq4z0wz0M4QrNFyrNIvsS3T7HG07DDsrasv7m/XbprOzFILS48KD4wRT3XO0TEUEjJy99M\n3bPQY925RbbEa3OvQzrJOsTXTOvJ+9e/68FMr21aRMbDQcdCxMy92a9OwNXzX0bYOlVR33dO\nrcDjw7V31Uc8d0w/OzxTUz4/VdDz99/Ore3G78xCPjxBNi8/Ly85OTMywT+3b83Gzu3Vx0lD\n70nIzFHIt669966wU8RMUelET0DLNWdMa01ttmfBP824Ok9JPeEw6Va/O2e8ULZS07XHU7rK\nuljVw1vXa/tfQ088STlLSmPnzGO/W7/Wx//TxDxNXm8x/85D30nP5bJMw+PNN9Y9V1bBUc8/\n7bG94cO+zmvHZ0zLRz9CQjhZSztAc0TOXjhO38FTyM1XzXNH5z1JNFMqT0RfTdeyXa/pwcXI\nY1fS/87bX9nKzGf/vuHHz/e4T8DzuUpX73vFOs/Nzcr/yOf33kC/d9tcYchP671PxNDUSsL3\nuL3VxLXF+8tMS009KjM4LS45OkTjMtBZ3Ei6wtFKb0rBb0zIxcg6u2HP10vM1O8z2M81QzbO\nR8ZYtMzPU8vPz1HKU8tFYWvM90PdVMZY607HTkbcP8c9zuVFVDrINcw/QzzzZ0q9yeu0uLnJ\nu8NXb9rV+06+Srbf80/Zx8/USctaREndOE04XGFvwsW367fR3L7ezzzeOfdEyEhfw0vBd8xD\nxmvOWlNj5+c+Uzk+ODgvQDM+NUE/WVX/yMnAx3fA/7BlvGm+Ub5Rxsq+xdW988XhVmNGVzlL\nOFpjRMLTtc68w9PMy9vT7VnY8+//593aXc3Wz8/I28vv4UHHUVlMUDxANUU9OktJa9fFy8jK\nw9zM49nKTM5Zd1lR90/cXdTdz9vX3l5jUT5VTW9P2b++vbq/wdJ3Y1dKPkBGPUM+TFlvWs/F\n083Hw9HVzu1nRUg+QTU2ODQ2MzpNTGfcw8nLw8nhx9bO3cnVyMrAxrjFwL3Cu9vC92dcQ005\nPD5BS1Prv8TVx87I1Gfe/9NOa3dvT1X3d3NvzM7vz8jI02drXVM8OTk6NDQ2MTw+UljN0MC7\nv77SynfMZ1djUWtOY3PX0+3ry9Xn3ddlWm9LW0pIR/vdyb6+usPB2tTNZUxJUERLSllXa1nv\nx9bP2cfHx8rK1/9NVkM+NzM3NzM4PFxl18fFv8DFy8nMzszfxsXHzcTBwcjEyc/b299fR0M/\nPTs/TvfUyb64usHJ1W9hU01VV1JNUE1TVG9l49PcyNHN193r729OQ0Y1NjQyMTA2NUJKY8rE\nwsfCxtnZ69Tr39nj7+/OztXdysbP5//vW0NDPT9ARf/OvrivsLK1vsPP0P9eU0peWVFUW2v/\na9nZzdXO1P93d29IPz0+NTIxMC4tNjtFSf/TvLu+ubu5vb3Nztfez9LT19jLxczb/8f3UkRJ\nQz08QEpV28u/wcS/zdNvVE1fUD9DS0hMW13zzsfCur+3u77Jzd1PSUc/ODk2NTAvNzs/PmXj\nz9bJzd7N1MzP29fMydPIxsbAvr7B0cjTy2fnSkJBQ1lRzce+t7u9xMbTd3tXTEdHSU1Tb9nb\n6c7SzcjEyc/lWWFKOzk4Ly0uLSsuMkNPVM3Dvr28vL+8u73IzcTFzNDGy83X291rX1FGPDo+\nOjo5P0Jb28C/vb3Ix9HOzNFzVE1VT1lYXWNn59jNx727vb68ydlfU0s/NDAyNS8vNkVGT2fP\nzM3JzN/v1t1nb9/KzNPOzGGryd/Lw06zzMn3XNHb3TfG12dfsfPCVVfvsllvQkfDP8c64+NB\nUb9Ew9xc0+U8OL9K2FoyLjstOi89NOsuSz22ScPOrsixY8K/+04/47/e373FzcNQuMrTa2Vd\nY0AsP0M4z7a7q666y6v3R1XhPdZLNMjHQN3Id9m349m3wTTFRMI80zE+RTNfWVwsWka6UVlG\nsk3nv8tR9zYwwq9HONTJa008Zaavus6tu1cxLS8sIjDlvNfJpqemtr61tjYrNiciIB8nPz1Y\nq6Kon6GjpajBYfcvIx8iIx8nHys7vbemrZ+rs03rMy03Vc2trK+rr9c8QDo0PeW2tc6zpKW+\nyMXOTyYkJygjKy9GwaijoJ+fpKqryS8/LB8iIh8gKT0+Pb+wraOgpK9r4UY1LjXJwKu1tNVX\nKikhHyErN0vIuMasoa6/zME6LyYuM1VDY6ynp6Ofn6WyxunfNR8fKB8fIyYp2zU5ta9GwKOf\nxdGtrsZb2rGgpK2sqrc/LSwpHx8jMTQySc64rMfBs7c6PU44M2PZyq+ioqGfp62rtd3dPScu\nKx8jLiQr2z8uY6jRO7Gfw0ZfwMJPS8WiprW1r18tICQiIR8q08x3tKiuqq3S5VsnHyIoHy89\nX66foaSjqL5ZSUQ1MSk3KyknO0w7R8GzoqlvvqilTe+3vltS466hq7SutjkjJyYfHyAtPt9d\nrau1r6y43U0sNTctNMjVZ6afq6yrvddKLC1FNjM3PS46RitnscU9rqZra6ejXVGzsr/Z072k\nrNDOyDUfHyIfHyAwyb7DtJ+rw7W7dywoKy4rL1C+r6qfoamptNNvTz8/Qi45TCchLln3PDj3\n59/E+2Oon6/rqaHDP9G6p6/KuLdVIyInJiIlSry/ya6tvLnhz1Q1Kjo/LTe5sK6mn6Kps99v\nPi0kOD4vK0cyLEQ34cG+Ta2rrFU3UKeuNe+wxjI2R7atxdjB3SkfICsiISjntsLNqKOuX8Sx\nxy4kN1xENc6qqKqmrbbHOTs3Ki93Oj7HUTk8Zy85zKpESK6t5+t7p6CqS6yoyDhPxcW+Tklh\nNh8iKiciLty7tr2vpalLSMPILC9fXE3z27+yq6motVhpYyotLixM5TQ+tOM2O+/7vDQ7vai3\nudA1XbSsVEG31zwzOruvs0/d0zghHyMnKitZq6mpt8GrsTQz7eMtM8/JtM5jwKWjrLOww08x\nMt1nND20uzUvSW05P08+zae8bbmhs8Y/PrGt3yu/r9UyV7atyTdT9zkfISs0KTTBqrG/taev\nRjvrxz0wX8LOb//BuK2ssrXYQTA0LixQ1c7JW+9CNSw7SzswP0Jcy6Owtq6zyz0rWa/nLT26\nezwzS7GtzTFBUCkfJDFHRMKtn6evra/HPzE1NisuRqzXPGOyrq+2wrS4vtfDSDxNX0tGMi84\nTj4wOrq30dqmp846wKqtRCc4vksvWq3JL0U3OTkuObGvTzbVUzYlL2vEvbSfn6Sps7zAVywn\nMjw6P0jbwUw7x6/M22dDX0gpKD85Nzw/TmlMOUiyxeO/qqbDWdW5zEzrrVsvNUUzva+v6TpR\nMjQ6Q9exvP84MCwpKTN3uqyfn5+fn6KtvD0pKSsfHy42L0e+xrymuP9P8zgwQELv09c1Lyk5\nNS04tqaosbGvrcw9Pau0TCy+v+tALzTcwikqa8YqKTBNQj1Dt5+qurmzYy8oL9O6wa2fn6Os\nr7bPLyAqLiIgLC0yTT1DvbHL1VlXXVUyNs/GRlG9urvD47iuwsqvqq+80ruqXzT3wzw5Pv/H\nP1tfOSkxQDJBt7nVQEA4W09Uu6irzcvfbzAtQ72/uqafpqyzvVEuIB8fHx8gJCo3QLympbmr\nornLytvK1jo/+/83b763wK2oqa7L78/RRT0/dz4xLTg5N0BZSFH/T2d3b9RLzcbbd2/bSUnr\n/1V7wcHEyr22sLm2trC4vcZ3Ri4pLjMrKjdDOz5Nb9B3Qz1ZUUI4TsvK1bmmpaqqpKesr7W1\ntM1f71UvNT89NTc3Ny8uNkU7NDg1LzE3Pmm/ta+yuLGuvr+4vMXMVUnZzVFjylZFQzk1OTQr\nMDk4P93Pv73Bxs7zSlVv693EwMbCwr+9u8zR01tJPkNQ28vCu8Lfd15JPT5Oz8nfzr24ymdr\nzk8/Pk5PUT5D2dNBP2fX3evPvrrRSklXRTlB/148SnfF0e/jy8pXUt3aZ+O+w1ta52nn72Fv\nyc/3/8jB2/fGvcrvZ01GPzs4Oj88Slr/WGvOz9nEvsPlW2tINjU/U17Z083Jz93v3efrzsft\nd2tIOj1EU2HZx7u1vMDAurzC2tO/y0lBTkQzLC82SURNz7u4vr+7t73BvbzEzs3O0dLzW/tb\nSEpNSUxVZevrTz9KPTI6OTc8R1FOTkxTXV9VXffr187SycXNycnt2cnL0bmzubO3vr/DXD86\nOzs7PkZEODU0OD5PZ8i6u7q6vt/dysjvadnHyv9U08zZa8jEUWM3PD0uLDU+S0ZMVFdES2HL\ntbKzs7Czs7W9z9/Z1mNGS2vf/2Np2Ug5NDw7NDc8Zelnb9fLzM6+vLm9wr7Ed0lN4/9GQkJB\nOzk8RlNNYcbHzMvbWe3W68zEy83MbU1KTz5CTU9AQz9ASVFTY9zT1c/DvLm6v7vAz8vL1Wvp\n7//ryNZ3/+lVUVlbb+fd287L2V/e1eNzX0pKRjk0Okhb5c/KytnV3OPzX1ljZ1NGQUNZ59vB\ns7W8wMr3b3dfT05MXVtfY8a8xNPRzuNIOjg7PTk4RfdzW3fb3dbS07+8v7+8v8PEzN/n81VG\nPTMxNDU1OD5AREtFSFv/3M7CxMXI0tXJxMfKuLi7xOvnztfXzdRPP2NfN3f318jYyMbrU0xV\n5/Nf1cC+yMvf6917e+fba09VTUlEP0FVV0hBPzw+PkNES1Nr7czZ39nIwL68vMnJ7Xfv+1v3\n08vT2uv7/11PTldJPTw7Okbr2My/wMjN2VdaWktFWe9hXevjy8G+vru3xM/VaVNXSj9MV05M\n91FJSlJX99ZvbWFP89X3V83K0W9zSE1NUf/Bws3LydTjyr3IyMj7UfdPUW/U78i+yuFvT0z/\na1FOXFVcT0A9R1dQW+/z2+drd8rB09TK2U1LPTQ1NjVHW1tSysXS78bIw7q+0v9PR01PU9/J\nxMnD309Y3/db691VR0U/SFvj0cDCy9vtNELKL9xWPcRD1dNZvNdrubjf0dfp18nPzNPY/1BI\nPTg6MT7CPGPIxL5HRePFxtvjSt9KP2FZe83Jv9fj7U5PXlHl2XfvY1ZPS1nTyMC+2GV3Xmvd\n98Y3vrA9PD88uuPRr3vLzEh33l/n3cXDylFPMzE6LjY9TENVa/fny8G9tLfC1N1zOlc+Y9Pa\nuMPNx3Pj42Pr3lNXRj53Szaz6zi+P7m6NsRBQbc+XctXVkvczLfFusXd1VxGymHLZ9Xrad4z\nOj00TCphxy5S1y/PRFm/39bLZ0jZY9+9U7nP1k+/OEPFN8HNSc33Mki/P89N2rnTx99Kx1Xr\nOs1fyUk6uz1by0mzc/fE9zx33Efc58Tzx0nlwTjKWzpX0MM199lHW7DptOe/30vPd1ZExtTV\nucA7uz/JwN9lutVDSEtDU9/SU7tBzdRAvE//1z7GRllMO88+uU1ruW+zwUvrb0zEQ8ZLS05W\nPD08R91Gb0ha11XRRcJrb7TXVrpLQ8df17xnylPvvUXKukmxPlS7Ob9KQ7hD3NnIwTjA1Vuy\nSe++81Tbb0Ln31nhzcfUvEbGPM7Pu1S+tjy4Pjm3O8zIUzbE5yzDTVO9vTu1uz62UD27VU+9\nZ3fMzjm+bze+Osq+RDW+7z68OWG8XF9I2zjRNvdc2U1E2Tu+dz64W+W3UVHKvjXF50S/2TDL\nNzfPVTu7SEfITvPn0E292UvKXbhB29W8zle067/3R1awRb/Jzu9t3DhP1zXAW8rYrtA8x7tL\nRq9Xd+9ETdlXQkXAPbzZRNpZv03Ax8tLZzrjey5Ga8Ezw1s30/suz7bdSk7bWN9TPbtMVdFl\n2TP/TsvFPLtZQ84z1Ek42s7nSbl7V8V7V8NvxVE/1VxRc2drwW9B2rNKT8y9ytXRw8FUQsTR\nPURbVjrJPj5GXLFzTrW4zTvMvlLr90S7e0hDtU1GssnVukfY50s843dEONFTzOfMt2td6dHl\nPzTjPys8Z0BMXdm2ulm5u+/nuMdO3N1PNkhVLlVELzJNWzHZxeO5uv9Z1ckyMlHtuzfWpbNd\n16++RjFR0TUrPbzvLNuyVDSworJCr6a6RSlCsc0mMb3NMy3Nrq/DrKKnwWnntDYqQ0g4LTy2\nvse5srbeZT03LCcrMy4yPMO5t6ymoaWvsMZWQi8lJS4qLC03S764/7mpvDzrvy1ES7rWRUA/\nrkM0zavDSa6828XBPjE9QzD/bS7jt2/zzz1nuk4rQctBvUMxsq8+K/fKNSguurbPOUarrktG\nrKGpvby0rN83Q984JSUuT8LHT66frdwww709JUzSUCsu662xSu+soMMrQK/BLCvvs7Q+L1u+\nySoqwbIyMMdKSHdKy7CqX8Ct1d3tyMDNxkwxRTAqLO/dOzZdVUgvM1fRw907z7DBMjrPrLZ3\n26up1FHMvus4OExLMi1E49vnwbOusWHMsbBLNsm2Nf9ZLza8MSjfrDouxq3KY+k7Qcc+LNOv\n38quvju7p61rLTq8qUclOLRnJyzXpK4zK8qtQSc3q7dKLVa4tFkqPbyqazzn685ZOzXDuj0q\nOU0+LkG9r7U6OLGkySkv6aOvMi65o7s8JWmosDMsuKvZKTTDqtErKVOs0yw1rrMvLduotNgy\nWKu2LSnAq9U2xbmxxTAytK82N7VrSrz3LsusVjWyyzHerzguxP8oMbG+NkW03TxHWEy3tz06\nualON83eNkbAQ/Opu109PDU8S93fwL2/Uyouv0Ex26WrTURAPM29OTGzrkUtyaq+ODk7ratR\nK0yyOSY76biw1SdErdEuSv9YrK5ML82nYzNH2XfB1TTzralBM2e090EsUautPzHXres2LVOz\nsb+7V1e6QicnOGW7q9XjrsApKsvTRW9lyqzLJzi+vT8xN8SnxjQvx9dFNEXNwO/rvttTS0Y2\nPK+2PE/APWWyNzO+sTtcvddvvkMxX8//QUq00tjEucVNLylQwrxOMryo/0W/u+fRby1Lrbkt\nU7zN2zw4uqe0Xc7HSigu3aas3F33z1k2K1+qqMo2O0P7bzUyR7S4v9NDTMi/4+OzxEztZ0Zf\nWzE6uPM0OfutrcwoLbiq2TnTzsQvKDi02TvfwSopy62qwSgiVapWLDG3oao/Jy1Ctq3NRV62\n1WVLPz13rr1HSFlD0cBMN1nX18tGOcymwk/LsbpHMig2wbLWW8Oup9EsLOmvv0UvwK7KLTLN\nsK3IOEXHxzwpK+2svG82c7SuVjlWZ29lzlEtSbrKP8O5QS5vw0/Jsj9IvqzdLiEoxKm0NCw1\nO9y+R1OrqNs2JS/BsbTvWee/w005O0e7rLhISbi8Py0+58vGa1PQyc7XU0BJa//Hs7nd/9XO\nzWtCPkvbx8JnQsSzx03nvcXvYUo3M0xb69H398e6y0Q/W9O5v1hC0Md3REY/X8nhXFFbX+ta\nTsW6vcfGb07XzUxE5+9PRT4/Ozc228BnPUA5U8hfR2W/zFVRP0fIvszvtsT7W+lb48LB3s7B\nRjIvUOtPW9VSO0FvVVzRxe/X0/dG97zLyLjDy72270Y/S1bnymVF/7vC3drJzffdZTQuOV1z\n41tAU7e7Z+HDe8u360dOe0k/Ni9Ou8/rXz1G2cXXw7/OwsRdRFF3vMo8NlVvV048Kk7BVztJ\nRDvdwVNPycztz8PKv722sLi+02FCSffRWEM5QVdGPmfUX088OkvnvP89PcS9zsa72NPByGO8\ntr3tX1tV61h33VvfTzw+WktJzspJPVNYVV1vybu9yHfv/1Rdzru7vca/YTxnzsfezM5jd1dv\nXWPX619j+0NLVDw+TUs/Sz82Nu/rXdLZY07r1OdXTlvbwcPfXFdU68jD1dTW1/vfa09Vz9dR\nRv9WQDdNzrWsvlJO08zR1crEvLvETjk7S93N41tnSjw5RWfMxVw9U/PjXf/v5d3n0dF7d+vL\nwL/FTUvXymvvUE//u8FDOTxFUffvTU5hb2VRW/9d+9nGysr3R0nKxMDMVV1Y51Vj6+lMRkZd\n829nSU/Kw2dET1Hc3crQ3e33/0pKXPfvysLJ2V0+PDxP0c7ad1dIRWPT08q/u793P0ZKYcDD\nY1vnX0BHTs64uMtj3s27uLu4ucPN70NCSFN370tPTEBBOj1Zys/nTU9XTUZpv77H70lHZ/vO\n11/vx7/N90xGPEbjy8heQz5EQU1NSWvVY0c7RVPnwsjJy87nXXfDtri6yGdJa+9Tae3r5cnT\nTTk8TNnAw15FW95HUdm/ytRdSV/nT0Rr1c9lPzgyP1H3wbm5ub3DzdTdw8fvVz05Oz09Rk5b\n/29rb1rvyr+3s7i+0Vk/PUzMv9FdTEpLU/PLxcHHyvddSEVWe3dTSkpJRDo/78G/xdNrZVdB\nTNfnY01FRT04Nj/NvL/O4+tvUlnXxru/yVtFPkJt59HFy9/pa1Nvyrq4vcTra1FNWuvNzMvd\na15PX9LJz8vr/2dPRU9r3tvdb0U8PD9Y187Wd1FNSkpV183Cv7zFaU5c993QXUA7NzY2P1/d\n4d3ra29ZV823try/w8fj49fLxsvnTkA9PVHfysfJ111NPzxDX29fU0xJSlRjzsK8ycrjUUZV\nXWve2eNTRkRGTd7JysnMYUpGRlnRx8nVd11KSUVLb8nAwczT5djCvri7vs7Zd0dEZ+PR019R\nTVFNXtfHzNXn/2NMR0JU993pTEE+Q1Pn92NNT09XTlP/ycPP3F9tR0VJZ9nZ1+NJQUVVXc/F\nzVtISUlh68nCwLy/xdPd48y8x9hvU0dEQ0h3zMrU3/9jTlD3ycrnTkVAQ0RI5cbBxc5lRkRc\ny7/AyntNQD5CVtXIy9P7Xlv/49/EvsvaTT48QUdZZWNZc2NVe8a5tLW+ydNdSEdLb9jvYVxf\nWV9ryr27v8d3SURDTf/zW0tDPD9CTWnPz+Prd0xIS0//09leV0ZAQEvvyMrX3t9v7+fp0cnf\nX1lGQExrzL68wMbFy9Lb08G8xe9OQ0JGV//XzfNNTEVET2PZytfvX1dPU2fevri802tZSk5N\nTuvj/1xIRUZZa93Jz+9ZSUlOX+/PzOdPRkE/Rk1f0tHb4e//59XEuLe8y+lZSkZJc8/P+09T\nVV37387ExM/hWUlGS1zv4e1bT0xHSU1l499dTUhGVXfXxcDE3Onna/fj2NPX41lTTUtUZ+Xh\n33tjX1133tHFvL/EyczIx8nN095zWVZPTlVfc/NjTkhJSkhNUld3d19dXXPp08nAwc/j82FR\nTExNWWNZU1NQV2Vt99v3V1RZXWd38+vvY1FQT0tTa/fa3+/p1dfLx8PAwMfZ/11aZXf73d/z\n5/NrX2Nfa9vZ921jVFlfaefd52ttb19WTk9TV01MU1Bfd+vTx8jNztXz493l39XfY2lfU0lC\nSE5dZ11n7efn3M+/vb6/ws7/Z1dv721TWU5MTlFSWf979+9tU1FOW//nb/Pj7fP3/+/f5WNf\nT0FESE1X7+fj2/dfWFVb3dXb1dt3aWNhb+/pd3NhWWFjd8/DxsfGyM7R0c/K0eP7b1RNTVzj\nyszn4953YV1d99X3a2taT1FWZ9jQ2+t3a05HSkxf93dfWVNUXWPdz+Xv/15bV1Nj2dLd+2tX\nUEtQZ9HS2c7W397Wy7+7wMjVb1VPT1Xz4/drW05LTVRt0+ldV1JHREZT39HT1917Y19v49nf\nY1RTSkZKV+HFyc/T71tRUWfRzdfva1RNSU7/3dxnXF5fVl3fxr29wcXM193f18zO52NVTEtL\nXuPM2P93XktFSFPr22tbV1BTUWXVys7vWkxJQT9IY+PpZ2dnY1tn3cvK429ZVVNRV93N0mta\nW1lPTunMwsfN0dXX3s/EvsPO3GNWTEtZ18/Xb2FbUU5P5c/L3W9fUk1JUN3Iyc7nb19YUV7b\n3/tZTktLSlfPw7/L2/djVU9b18zT61hJRkNFXNPV7WdYUFFd38W7u8LO2+tjc9nDx9l3WkxJ\nSU3pzNN3U0dDP0NV69brXlVOTlNf0cPK1ltMRD9AS+3X3W9jU01LXNPJy9n/XlFMTV3azNbj\nY1VKR1bVwL7AxszX5evQwb7I1/tlTk1f28zM329VS0ZFV9fMzttzVUtFVd7Mxcvd711JRE5n\n9/9WTEU+PEFrz8nM1/NjTk7ry8XFzm9rTD9HWefa2+9eUUlL98e+vsTXbVVNVtXDv8LXd1dL\nSmHn09V3VUc+PUV30c3R5V1dUE/dxsPGzV9TRD5G99rT1d1vVUtMXNnIy873Z0pGTnfX0dj3\nV01ESe/Lv7y+x87X79fMxsPK12dTSUz/0snK2FtLRT5Eb+Pb33ddTUZKX9TFxMbdWkhDSVtj\nZ29UST49Qlfr1c7R+15NT+fbycXG0OtOQ0hf697X22NORkvjz8rHx9VvU0dY59XNytLfZ1Zb\n383NzM53UEJATO/W083db1lKVdHKxsfOWUs9PEln3NnT22NJQkZz09XV13tOQj9O39TT2P9b\nST1Ia8vGw8XM3W/v0cK9wcbdXklHUtvMy9HhV0g+O0lc6+//XUxBQUrvycTJy9VtTlNp2dnn\nZ0xDPTtD+9bLzd1vU0hQ98bCxcnha09LVdrLyM3nXU5DS9/Iw8LJ62tMSFvhysbH1/9bTVLX\nxcHCyfddTkdX1c7Ky+1fSUVLb87GydNvSTs6PlNz5+tzU0M/RHvOy8vNe1RCQVXj1M/W6VND\nQErvysG+wtJrU1nVxL++xutPRD5K28zIyedYQTw/TfPVztVdRjw+TOvOycbYZ0xLVdjIx8zb\nVUc8PUxv0MnO22NLRkrrysTFzW1LQURd0MnJzON3TUZZ08S/wMrZV0ZHVd7NycznWk5JWM/E\nwcTWa1FGR2nbz87X/09DQ0vny8bK1V9IPjtGZ+/t61ZGQT5E+9TIytHvWktJT9nJycrnWUpH\nRm3Iw8HF229bVmvKwL/H3WNMREdazcPCxdRnT0hJ/87LzeNVS0JEWdvJxcrnY09OXd/GydX/\nTUE/P0rjzMvaa1FMRk3jx7/E1ftRSUNFc8vL0ndSS0xP98O7vcrfZVVLV9PGyONhU0tITV/M\nv8znV0tFRU73zczfZ1VNSlfvw7zC2W9bSkNCSf/dXE5JREFCS+fHyeddVU5NU/PNv813Z1hP\nVV3jwbzJ1d/v//ffw7zA221XS0dKYdfAzOfnd1lSVePHx91fU0dCQE3byc7/d19XVFfjzch7\nTElDQkdMa8vP92tnVlRb5cS+ym9bVEpHSFfdzHtRUUxLTl3PwsfZ6/dnX2PlysPVa11cV1t3\n28XE3HtnVlFTXuvW5VtTU1hl68y/vcXf721OSUpRaW9RS0hISUxf3c7Q91pbWVxj3c/Jz/9v\nd2/z1czEv8zZ4+Hv49fMycnXX1dRTk9YZd3cZ11dVVll69bP31xRSkhMWm/TzeN773d773N7\n615FQkNESlBd4czV7+vt7+Pf1c3Pa1FOTEtMTlfnbU9NWGfz59nJw83f5+Pe3ePZy8jf8+fr\n5d/f08rX/19fV1dPT2n3Z1FXc/fv7dPIzOdlYVVPTUta92FRTlZdW1VZ7+F3XG//d19d99va\nb2/p3ePr3cvEy9LPz9XvZ2/d41dOVVVPSlRp2913d+//Y15r599fV1thWU9f18rM3dbR32NT\nVlpvVUlKTEtITGPUz9vp3ed3XXPbz9n/e29jUU9d89fj79/n/23318bDytfR6W9de9PKytXU\n1ON3Z3fYz+dvZ1BIQkNNXWdbd+t7e//by8fN42lXSkJDS23vc21vY1tPVu/Y3O9vWU1LTmPd\n0+X3/21rW//Xw7/JzdPjXVVr2djhd15RUUpJd9zT3f9rXldQb93S3fNzW1lPU+XKxMbN4WtV\nSUpdaWtYSkdGQUhezMfN0+13X1hr0MnO2G9WVU9Md8rFydPr3fdd6czBydn/V1FJSVvOxsnW\n92VYTVTZzM3bYUxLQkJW6c/U43dhW1NZ2cnL12lNR0I/TOfT0uddVk5FRV/Z0dxjVUxEQkrn\nz9PnY1lVVmPIuLW6v8vZXU5d3czK2OtnWExLd8nEydn/W0pHTPPPzuVfV05ETN3JwMPS32dI\nPkJc39rhb1VMQkVvzcjI2m9fSkBP28zIzuttV0NFWdPExcrZ51dR98jBxM97T0U9QGXayMfV\n62dGQ03bycbR71dHPkBc0cjJ0etfTkhd1MvJ21FJPTg+TO/Pzt1hTj8+TenNzdJrVEVASuvK\nxMXQ72tQT9nDubm9w89jTlXdy8jI0/dVSEdrzsfGyutZS0NId+HT0u9XST5DT9/Kw8TU/0lC\nRln/3dx3VExCQ2fby8vS81lDPkpd59nV71RGP0Jj18nGyNXpYVfdwr6+wdhtSD9GX9zNyMnf\nW0M/T9/QysnXZ0tFSfPOx8XD1u1RS2PXzMzN2FlDOTpIb93W0XdORD5K+9PPzd9dSz9I79HJ\nxsrYY0pLd8a8vL3D2FdGTevZ19Xcb1dGRHfPwcPF2PtKQkln0M7P22dJPj9Y1czM0/9TQjs/\nWPvj3/9fTD9KZ9HLzNF7Uz48RG/b3N93VEQ9QGfSysbL191dW8+/urvAy+lMP0Nn08vKz+Nc\nS0NW1cvLzfdVSD9J48zEwMjT51NSb8vGyc3/Tj89QV7Xzs7ZX04+PUlr6+f3V0s+PERb08nF\nzetVSkvnw7y7vMjfWktd2c7O1+1fSD5AVc+/wcLPd0pIT93MzM3bX0Q+P1PXzMvPa1A9OTxI\nZ+/l+1lKRkzrxr+/wdddR0VL683Nz+NWRz5Fd9PFwcfP/09OX8a7vb/J50tBRm/NyMfN62NI\nQU/TysrM32dMQENP1cfGxdHpW1NZ28bEx9VZSz87R1zf2NfdVEM9PUdr5+9vSz86OT9j2dLM\n2HdfVmPLvrm5vMHPa1lnz8vR1XtMRT8+T9XJyc/vWVNMV9jLyc3b/1RKTVvRx8rP71VDPjxK\n/+Pf71lQSkxf1cK/yuN3VElNX9PJzNlhSkRCSO3Iw8nX92ldZ9PDvcHU61FGQENdz8nN32VT\nTU1fzsHE1mtRS0ZM783Gy9z3Y1ZRW9fFy99TR0JARFXVy9NrT0dBP0Zf3+VdS0VBP0RN1sXS\n6WdeZ2fZv7S0vMTL0+v/28vCz19OTElNU//Iwdp7W1JOUVnjysxvWlNTWGPdybzF43daTEVD\nTtnO71pfVFRXY87Axf9WT0pNTF/bxt9XTklHRkhdzszna2938/fQvLnG52dTTExMb8jG529r\nX2Nbb8rC129SSkZHSvfGxNh3Y11jXmvdyeNMRD9BRUdezszvZ1NNTk5P88zVa05LSkpNa93K\n0/tpb//r3cW5ub3Fys/V3tnOzN9ZS0lJTVX308vjY11dXF9r49Hhd1VVVV/73czExuFfWUxJ\nSExf/29XU1Fca2/h0+VjTEtLTlRb8+fvWU5PU1tp7dHKz9vb18/MycbGx9xfUU9TU1nz2+dh\nXV1hb+/hzs3rZ1dXY2//48nI13fv49vj7+vjX0tGSE1bXGHn2f9fYWf/92/t0dNpTlFUXVpb\nd9vvXF7/3NXZzMDAxs7V19Xbb+/Z41dRXGtvXV/r3P9bXWd7X1FY/3deUVr/3Xdr2M3VaV1V\nUUlDSF/va1tdZ/djX/PX52tVYWdfTExdb1tOU1dfW2fjyMLHyMbBw8rOy8bO811dXU5IS237\nY1ldZ15XXf/Mzt3r7d/rd2vRxsza39fa/11d9/tVSktOTkdHT//ta2dv/11VUf/j71hTUk9L\nTmPj29/Z1NPW19HGwcTK0d7vXVJb8+tvaXdnWlNb693d7/P3d1pMTmX3ZVxdYV1RVuPNzdnh\nb19NSVL/3djd5ef/Xl1v2tHd6/9bS0VETWl7Z15fV05V7c6+vb29wMfP09PIyNnpZ1FGSVPv\n3N3j/1VMSU5n6dXa529dUVVf28jFys7XbVpVXvf3c11ORkJAR1lz2+Pra1RNTVbf1Nnj/1dL\nR0x3187P09jfd/PRxr++xdl3UkdFTnfd3+d3XVBPX9nMzNHfd1xMS1dv5d93Y11VTVHhy8nL\n3WtPQUBK/87N0ePzaVVY69HM1e9hTkA8PU138/tnV0tHTHfJv728v8PL09LIwb/J52VMPz9H\nc9PW3WtQREJFX+PZ22tTTklDVeXCv8DGz99bU2vY1d9zT0Y/PURX39jfc1dNRUNSe9PV72NV\nSEhO787Ex9Hjd2lv1cK8u73O91tOTmvjztd3Y1hOV3fOxcPI1ndUUVt729feY1FOTFjr0cTC\n02NRQTxDTF3p63daT0tP98/Hx9BrTUQ9RFVv3Nl7W01FTv/SxL+/ytXr3s/Hv77E2l1HQ0ZY\n/9/bb1RKP0Jb/97b42lOQkBFZ9fJxMXO32tz18vKz95fRj89TP/f0s/f+09ER1f34+fzVUc8\nOkJj2M/N1N3/W2/Lvbu7vcnR/2P/1crHzNp3TURKa9PLzM/nX0tGUe3Uzt5fXUhATG3Ry87r\nX0o8O0NU9+97WVpJSFrRw8DDz29XQ0FRZ+Pnb1lMRUBH38jAw8jT32Nj28fBwsnrU0g/SHPc\nzM/nZ1JFRlPdzsvN32NOSkzny8fFydPna13jzcrN2l9TRT5KX9XOzttfTUREV+3V1elTRz87\nP1n/2NXh92dZa8q+ubm7wtpjVFzbzMnK129QSUdn28/N011PQUFMY9/X3PNZSUFDZ83Gys9z\nTUA+Rl/f2dxfT0dBTO/Xy8vZbU1AQEr3z83VZ05BP0nvysK+w87pZW/Rwr6/x+lfR0BJXdnM\nzdpfT0ZHZ87Gx8rlXU1JT9nKwsLK3W1OTW/b0Nn/WUo+PkNpzsjIzntPRURO69nd91FJPzxD\nUOfc4/9bTklTd8S7urvC12tZXePIxMreW05HSFrpy8fL1WNLRUZb4dHX71dNSUlWzsLAxddX\nSkNBW9zL0N/3WU1KTefIyM3rTkQ/PEjfz83XZ1RLR03rwr2+wszl/+3Zwry8w91RSkRCVdnO\nzdlbS0VGTvfGwMnWY0tGRU7XxL/G129cVVFrzcvcX0dCPj9IZ83I1OlXSERET+PO1mNNRUNC\nR2vWytpdT0pGSWfRwL7L1mdjX13nw73D2WtTU1NfzsK/z+9rVE1OUu/N0fdUTkpLUe/Ev8bd\nXUlFREvvzcfa/2dUTlhrzsLM51pKQ0FBTt3M1mdaU0tPXdG/usTO1efr3dTEvMffW0xHSEhV\n0857T0dCQUZP/8XE3nNXT1Vde8a8xM3Zd2FdVXfPzmFNRkJESlH3ys9nWUxJS01e1c/lV01H\nR09Z3cjM72NbWmP/1cW7v8/b7213b97Ew8zrbV9j7+PNxsfab2teW1he39HnV1FLTldb78/T\n6VNKRkhMWeXOyd9rY15nc+vTzuNnVk1NTk9d5+NbTE1KTlb/z8fI1dvd2c3PzsfK91lTTU5R\nW//Z1XNOSklLVmf309tjWVtn79nOxL/Iz9//b2tXW+vnV0pLTlFcY2vh61hPSExjX2Xn195b\nU1Vj9//v19PrZ3Pz1czLxb6+zd/3/+//a+vW2nddZ2/j92/r1fdbV11jXFNV9+tlWVtv7/9h\nb+9vTUlLU2Nj79nL0vd3d+97ZWfn5/9YVVpbUUlPX1xJSVNbXFt328bGzMvGxM3a39ndZ1hb\nbe/3d+PT1GtjaW9zY2/n1etdY//n83vnzsvZ5f9vYU5JVf/3Y3vv429bWXvf/2VjbWdXUFvp\n329pd/tvV1n/29vv7eHR3ePfy8jP2+f/WUxHVe3d7/fj2+9dWW3b3e//e19PSU1z3ePn3en3\nd1xj6/9bUlVPTk1Qa9vc6//vY1dQUXvZ3+vrY09NSVF36+/7d2dlWW/ax8LDw8TJ2/P31tHV\n3v9va1lSa9vP3elnW09IUF7f5+vvb19QTlvcx8fN2fdjSkVMXeXj3ud3XVVP/9HT2edeTkhH\nS2nf63NZUExDRlnn09HV2+/7d+fHvcDGz/9RR0ln2M7O1+tvVElN59fU1913VUlFT93Ny83Z\n82tXWe/R0O9fT0pCP0ph18/T2ftjTUxX18vP1f9hS0dM787Jy9Pn/1ZV886/v8PK0PdXVvfQ\nzt1tU05HQU3nzcvV72NVSEz/2s7Z/19URkVO28fExs7nVkc/S2/r4/dtaU9LV9/Ix83j91lD\nQUpr+2dXTEc/PUFl1c3V6/9vV1nbxLm5vsbTX0xP3svHydlzXUlFT9zMzNZ3W05AQlnjz87Y\n5f9aVWfOxsnQY0o/OzxN3s3K0O//UUdX183HzO9jSz9EVenMzNT3YUxLZc7Cv8PR53dWWdrO\nydFnU0g+QE//0snP42dTSEzlzMjJ02lPRUBL4c7LzudrTUFFTF3v5+tfV0xNb83Bvr/K3ldJ\nS1v/7/9tT0pAPUtl2c/N1ftbUVrTwry7vcnhY05l2c7IxtZ3V0hN79fNz9dvU0FASXfc2dnl\nb11ST9vEwcXK81hBOj5O59XV3W9SREdX3dvb42FNPz1Ea9fV0tl7W0xT18nCwcXM315VY9TK\ny9P/U0Q/QVXr2dned11RTV/b0c/Z72lVS05r1szO0edlTEdOd97d72FTTUhM38W/w8nW51VN\nZ9PJy9xvTUA6O0/v19ffX1dLRl/Hv7u+ydPvU1Nz0cfIz9zvVkpZ1cfL03dUSD5BY9zRz+1b\nV0lGV+HIx87rUkU7PEr709PeY1RJR07jzs3XY0xGP0Fc5c/R32NUSEpay767vMbN5W9j2sfD\nx9dXSD89RHvVytD3XU1CRVLVx8nN71tKRk3Xv7u9xtxzSkdX387R52dPRkNN/8rBwsrvVUhF\nU9jJx9D/S0M8PFHv1d1vWE1FRlHNvr7B0XtTTlHjyMTG1G9XUk3vxMDF0WFORD9DV9vKzdxf\nTUdFV87Gxs9fRT47O1DhzM3XaVlNS1nbxcXP41VJQ0JXz8TH02VKR0VL28S8vcXN3fdt98y/\nwtdvS0M+P0/Xys3fV0pHRk3ey8XP719RTVNzw7q6vs13U0pFUt/X71NIQENEU9DDwtNvUUhC\nRk7TyNHvU0A9PT5SzsjO91ZPTlr3zbq3wM5nT0pMWM7Cx99jTk9OU9m/vsxvUUxGRk3/x8Pb\nd1VPTlf/x73B900/PT1AWMa9x+dpYVtb986+vdllTklJS1rPwMV3TURDSFHpyrvC2etnX2dv\n18DB6VlLRkdMX87Dy2dQS0xOVdzHweFRTUtRWWnMvL/R+1VOTUhL79z3SkVCRk1X3cfA111O\nS09SUufJ1WdMREZITWfHwMrrb2dn++PPvbzPd1lPT1NZ2cfRd1VLTE9Vb8i/zm9fXF9rd9nA\nwNLp/2X39+XJwMlfSEA/QkNR183hW1FPWWN33cbD3GVLSE1NWt3N019OS0xca9bIv8v/Z15n\nY//fzNVvU01PV1/pzsnQb1JRV2Fv0szMe05JSEtVX9/MytdfV1ddVV3/3eVZVFlb8+PQy8XR\nb11bY3f/59/nZ0pER0xZbd3Oy93r79vRzsvGw833Z11bb3P/2dfnWlNbY2t33c/X92Fjb/vr\n79jK1+tr99vX4evX611HQ0NDRUlXb2VPTlNf+//vzsjcb2Nnd29p99TW91dfb+n/d9PK029c\nYXdzV1V361pPU2Xn523dzdNrWmv33f/r287tVVVl7+1z/8/L3Ptvc3dVSlPv811c/9/a/+3W\nydT3Z+fdc1lTd/9dSkpPVE1KWefa7+XTy8vZ1srAyd/j63dSSk5v4/9cZ21fSUhd59737eXb\ne1NV68zR2tPQz/Npa9/3VUpHSEY/Q1vv+2Nrb/dhUVPdzdbb293vX1j/0tDb3+Pta1VR3cnI\n0dXZ61JHSGHrd29v82tdW+PJyM3R1dv/WWHpz9nj4/NvXFlf1MnZ5+ttTkVASmn/a+/j72db\nWe/LzNvb3/dcUVPn2ev/Z1NKQkFV3tnf1dvd93fWx7/Hz9f/TkA/TO/b3+N3YVBHTf/n3+f3\nZVFGSFXTyMbGydb/XF3d0+t3XU5APT1M69PY3ftvU0ZLY9XO0NXrX01MWNXJys/db1NMTenC\nvb2/x85rT1Fv3t9nWE1GP0BS08PDy9j/XUxN+9XN3mddVEdJ98zExtLnWUQ8PEv/3+n3bVtR\nTV/MwcHJ33dbS0xe2czP22lTRDs+X9na3GtdU1Fb18G9wM73Y0o9QlPb0M3X+3dSUnfQxsTP\n61pMSEf3y8jFzc7T82/by8PL42NLPzo6TO3My/NVTEdGW8/H1e9lX1dKTdnNyMXd3+1MTFvZ\nv7m7w91jXlvf2dXea05HPj5Lb9rMzdDvTTo6Tffb3f9PRENFZ83CvcHL419OVGdr5WtdW01G\nRErdx8TE229JQ0z3z8vI1mtLQ0BN79nU0WtOQ0NZ2crAwL/I3VFHTWvXy8vR51tMXdvJxMnZ\nY05MW2vT0N/O0vdcSEbau8XI1UxOQjhET0tXYUlb7UdabdvDwsbdVzxPY8e/bVnjZUtVPT3N\nyr21z9drX2/OzdvJz+9bODc9UePOzVvT1udrRC4qLkqyrK++1uNMZ1tJW0vav6u0t71F3VdC\nPzU1OVJrzsZjX+fKurnM39nj42VGZ2NBY0xOSURANLSlo6VPKh8nSq+fn6Gq50YtJCQrLz69\nu7S998+9v797Ni4xKzpvXbWwrq3H32NI1r/D1vdnP0g9KDlCM/tAMTUvOb+vublGOfdOv6+r\nqbC+SkUuLT9OvLzd1UZPzysuTbypt0ElHyy/p6Gfrba+OicfISnPtbOvvbm3sLe8xTkzKiIl\nKCtFva6qqK+tuGPN28O8yE9jOzlrSfPbR0A4NTp716+tt79vV9rPx7i/0c8yKyslLjUpO6ys\nqLkpHyYwtKu+q662sckvPWNXt9nnx8C1qKq0tV09MyMfHyQvO1NFT8zMvbKxr7DId0E0Li43\nSu/XzdLr1c7Fua+vr7zbzse5ra6uq7HLOTAlKjM0Ql1va+M6KjFbycTeOkL397ywuba3vLvK\nUUppy7W62Uk4MzpP78XI5VM4LCYmLT9Ye//hy8fHyMS+vcnbb1Bf18q3tbzH61FVSkNZ59r7\nST49PUNj0cC+ztPVXkxHQWPN09tpRkVPd8q5vO1dT01RPjpV3MG/xc7Myb++vsf/92VOPjo+\nU99nPTk8SePOzsTD0eljXV1b3b21t8vnc3fbz8e7vclrQDQyMzZK38jGyMzTSEy5REVZ3ExH\nPkdI3b+4v9VfUl5NPTXD0kRBPUhNd86tvM9lSnvrY8K5zsffUDld7V9GSMldT0hOR1w6OstX\nY1tnVrC5wqy+wb9A20VKzvNDrrr33TlHudDOs0fbTzpBOz9fW9PaO1Tf12XG1XdIXThvQ0JX\nv66suEJETeXl0Ve2vmk9Ly8tP1PNusqvu82/1b7C2UNMNjRbSjU6LzPKuLOqrKi12zk/NTg+\nS0vdwjxAQyMyRS3HxDbQybztNTpIvKWkuMq6srVvOiUutKaswCofJSw5u8a2oafGQC8rc9/V\ntbCno6WzyT4uLyonJSsqNjhGurW1uMrTy+PDtke+rFPMtEu7vjNfPi7vQS334TTD2tuptl3p\nY7irt8g5MC4kZdH/PiwrQjkpMC/Koaauu1w+TzIvvLCmqNEz2N9JbSooTkg6LjrPprE7QsjG\nvuM5uKq+ubbPsco8u1QsJCI4sqtBNzX3u0Et86ygo+vHrcOtr8a96yUlLShZqK21UiEfISk9\nrqmjn7NfUzQ0VVTVpaeur0I6STMqLzs+21kvRdK0smE3PETVu6+sqLRTNSMtPzVjuffpPic9\nWb3IzL24SiwpNLKqqKCpuEEnID08zq65sMpCQTIjNbfGvjQjNVVDyKupn6pNQDg221M1trK4\nv0I9vb5bTzU7X0MvP1q+uMrCvr7Me2fExj7G2b+460TBsUozJifZRnvN0cFILWs9QLmyd6u6\nSVYuQ+3de9NvRy8jNberr98uMTU7P/exoKS0UT0vLSQzU/+9tL2xu2dKw+97XTM7NTIyPWm4\nva+pxazKzLGtv7lIVT05NztVyPM9LjtZvs2zqcTGTyzX0b+trMm4QycqKDmuvLezZV88KCxC\n2bO4xLfDPlQuPnfX2b/X/+NXWNXHxrpcW1Q+PzcyP0pTz8LPwbK2t+/O619IKjEtPDdJN9E+\nwttJ07zLvb3MwtHH3Xfvwm9d4zxLPkXnzs7n48Jady5j0//DT9rN71xXOvdP1uNj2etK48rG\nwWfIT1s//9O0ta69w3s9MTA7Y8Xd4c1GRT1Ib8bhzNRfTURFyL64v+NnXUFHZ8nIyndJRTc7\nVdq6t75vQzU5PkzczcjpRTw8PEhYW9Pd520+PjxJ0cy9vuO1zL67u7a5ws5fTzszOj08Vk9V\nWj9DUsLMw85vzu9ZU+nfzcrTx8Ld17++vL3K0VtKPEdJ4+PX2W1va2XPxsHG0Fc+PC84Rltv\nzMvZ0UxKNk4+X07PydnHwbTHw8rt9088QEGws29V/9xZ/+/fzf/f4UlBMTpJTtR7181TST9b\nzW/AykvhTUdERj/Dy8Lpykb3Q01C2Gu9XD8+P8d7y8/LuMvtu97Vyr65tblVXEA6aUZv5Vvn\nQmtZxWXv0dpGv2vD58u0Z8M93Dj7P7r3usrf00dCRkLPY2nCTUw/Umfv41Hd/81PPldPZ/Pb\nS8s7Vjlv78i6wrzr50DnTNTfv9hf60fORlTFUbg/7zxRQP/UT7tpWUdEVzu6293G1sVJ2z7A\nwsfTslXWSVPXOsFOtFW5RWVMyEpGvUPISL49ylPO1+NYuFPN6d61xMZnwzfOTU/hvU7fa0Zc\nNVLrvt1H93dNWDXbTLBPUss+vkFXR8FJvl9bW0HMSV9Jx0TZQ2tXQ7ZPtD57N1NOMck4u8tJ\nWEhnSfdIs1fFT2/fU9w/ulnFv1F3PzrOd1e40XfRLkXfOtfA/8iuTVW6Pce+RLXEV8PrPbrH\n97zIPcY2K807Z8Nb7/+8P//fQq/3VcRIU0g3xP/LzVlZ/1VI2M/Gw7pWRdFHTHvdU3dTZ2NZ\nPjdRacjr0ffN1kBtRP/VPk09PEVBy8HFusnR401PUs/K18xHSkJKW02+v76/TE7ZUstZzcrJ\nZUhHOEVVZ8e640Vvt7XM2uPJtLXF4ffpz+dcVTo9ODo1Nj/P6dvOb+vF1sy7vca8XfNhSENr\nb2XjWVD3UF/Ku7i/yFNLMzQ5NlBDSkJGRUfr1Lu1uLy91sra38Bt49trRDgtPELvuMdfSTlB\nOVtJU19Fd0JGPz5Kvrqusq+ytru9r8G63TkzJSYiKiw4S0vZybuzq6ukp7CxyW9QQUhJ005A\nODs/Ql/Kt7CvvN3Ma1U5RsO+a0UtLC41V+vVREQxP0lTR9HNwrq+u83Hu7GqoaSpqa+9y/9L\nOykjIR8fHyAiMTxU08m7wrOusauuusnKY1PfTV3vY/9tZ9PJy7+2sbzL6VVJSjtFSThIQko5\nNzIzQOHLY1tAPkjOvLOtrbm4s6+pqaWqrLe72Vk/NDEuMCgoHx8gICcrNFFQzb+zrKekoZ+i\nqq66ytlr+0tTPzIuMjE3RG3NztDR2/vnztXNxl/VQT85OTU9Rk0+Ozo4SExvyry5ubq3vre5\nt7GyucPT22tlV0E+NC8rKywpLi42PEdHV9fOvL23sq+ytbu2srS0sri8zOf3b2PcX2f7UUJH\nQD5JOT4/Pjw1OzlNTO/ey83LxMG8v7vAuMXdZ0pIS0tLWm9jV1lUX1dvZ97e/1VnWV/Ta8XJ\n61lMS01YTE9fd29349/Z3eXb1NNdae/ZzdPHxr3Jz9Hn72NUSFhPRENHSFtZTuvl/2tlY2Nf\nS05ZWVhMWenb0dXMytvf+9Xj6effy8fV18/Kz8/XzMzfe/fn49Xz5dHdV1lcUVJISU1vTklO\nT2FnWl/33G9hY19eW01Za/dfZ+n382Xd0t3rXf//929z38/V4/vtb1hPSFl3Tk1MT09JR2Pz\n3f/3d/NpTWndys3RzcjT1OfVzcrd891391tW5+HtZ+Vv61RMXWNjWFtYb29WY9/b2+Pf2WtL\nSVB36eXX3ON3d2vSzMzP2dvnX1Jd29vn9/dnXldf4dvc6d/l329v68/V43tdWUhGS1rr42tr\na1dIR1Fp6+//42NJR01319TX0s7be13t0tXb6+vzX1Ra2c7K09LX7V9VXefZe2dVUUk/QlP/\n9+93b2dPTlnTxr/Cv8HV71nt3dPa3/d7WVhd59DT3+HvWk1JTv/7b2ttXV1SV+nZz93/ZVRB\nP0lV/+vf2d1zb+vMwMLGzNfnXVRj2dHj81lOSURLY29tb1lXWU5Z79PN1etVS0NBPdtzR7Zd\nSsxUxd9KubHv91gw105H1ufQxs9lb+P/z8TU19tXSEDj5dG8d72+XMPrTP9hW8/fO1ZCPthL\nX9VNXGdOSv/3c8a/Z7rAz7nAvthV50lIPUI5P1FG1mdVPUpP77vR3co741Jdurm9wrHnM08q\nMMI3vLs7tzAu60tPOq6/tLAzRD02z3exoq28OiwlK0A0v7dLtt5EvVPEws9pZ9c6zEQ1yELj\nt9+wVFa4SLq4TrnN/y7KtLqsVy0sJTytpqCgyTsqIjXF47i57bS/QkIvNNm1rLjVMSw5Pr6z\nycvzV0lWV2+9s7KzUylbt7mvSywlHylZr6mpvywqHy1D17yqqrOtPDEvJ1e6sq3OPVM8XcZU\nuuFzx2lNQm9fsK+9Wiv/ubW0MykiJtyto6jDMigiOXu9rdXM3ry93s4+RcjDzcTtPNJBSesy\nYUhnuLPUzr93qqtJPr3Jq8YuKh8o0a6kqksrJyBE48S061NPxMzfZzNPxsK9VDdBPUp3S09K\nR1XazsfFuLy6wkKuvrWuQTwjJtOspqtfJSQjO7+/t1w1QNPKyvcuREpzwONfY07pyczlVVtM\n48rBvbqs0zi5wqmv3dcpO821oK/TMicvP8u7bTw+aePNazpEPmPB381ZQlNAT1djy9dOSjbW\nuLZQu620p287KSrNq6OmzjMkI0f3vb9K6b3EvDwqKDjKsb5OLSg1T7e0xt9IO0RpzrFz/7HC\nqPc1SyzKtq6fuO8yKDZfu7rDS1NnzL3L30dHVU9HOC8yP9vCyrxIODgv07q+w6mzpbw0Lizr\nrKWfs0IoIytItKqxtldN5z/XzrSrtXcvJh8qNme6wLlMMyooUU7RrKSoskMpLT20rKu0NzUt\nLFrItL3NOV5N78Jrv77JyE00MC0wU0/CtPdWKyg+NkPbv6+ouzwmKE6tn5+r0zEsL1S3q6jT\nzUtLyWe2t6620Fc1Mi85RHe9vsE8KjEtPF/Gy6nJv0ErQzDCp62q3UEuK0S+sry467uxwLpv\nz8PNSz8uKi4rP2POustMOy8yOT/Hta7KPCgqLNy4prK50TNbWtumta2247C/v7rJzNlKRjor\nLykpOkHfykVILyxfPEzTOLew37RPO1g+r62ssU1NP++tv7y/17a/wsfJuMfZXT03MC4pNDJF\n3mfeRzI2NGPI2bzTvbS0uFNMQE24sauyzG85b8K4ucxeVcK2r8xIOTNBOzM7LTEvN+Pd91M0\nODk6RUzr1+PIzq2qrb89PzjBqqqor8jlZ0lJQzrMz8HDZVFAPEpLQWc0R89IzGsvM2s381Y7\n777VzK5luLDTqefHs8nHu7G1uMdGXHtX3chDOF00azo090FQa026O09MYc08TznERUfLSLJT\nsLZetEnzssSrZ6++vbZVuGO8VN86OdssSTYwQDIrSzlVPm0v4Uk6zDjaaz/Qv7G+vtq2Q7pG\n3dDK4fu2V7J7xFW9QL9nZ1Q9wD3GNOc1a0JrRFVfQ8VX0EB720xvvtDHvM7O7enr0mfK07/I\na8Xe48bV1XNtPd84zj/ZRVb3T2tvS+dPXE3pPctHX0xB/+PV40q3SbZKzEPIyT/LN8tU92Nd\nyG1La+FPwVW23Ne4XcNZwTrHP9BdRlRETUPvWm0740e/b0HjXMxbzMBKuN/FSMJvxMZKy/PV\nUsFDe9HtOXfZa99KsljEzO2/493r0NnATbdD0jbzPt3jPuVEtlq6P70/uTxT60zaQL1PxErn\nOOXlMtM0zlB3R0pZPnc32kvlTNFFxvdVxVddV10z3k3v69NjWsJP88lQxDjBO81X6/vnv1LR\n5c02xDPPXnfJ77blvj67Qs89yfv3Wul3Yds6z+vYe+NXVdNYytzMP89MwMtBvsvKxMg3xzVb\nTXdLXVxpY0nEMME/xsZV6dm8T7dIv03AXUjRP85CwVK8y1LXVGn/XMftS8s9zd86Ous8vknb\nOt4z7XM6wzPBTNtOO7pGs07SyEvOX+FOve/vSk/ZQWdjYbZvwkfnzVzMXc7Mukm+U0jbbT7r\n1N3lQbVNvNPFb7mwQLvIWLlE0bs4yjRt3DbJO0fANs3LL9dGPb9TXE7jc3e8RrrOQq86ybU6\ns01OtTy6SjxNX0tvbW/P20tLvzO+b0W/Qla+L0q/S17ASl3FVP+63cK9Sc7zOdQzPN49c2NF\nRldCXMdRWu9BY8ZFzVpZwdbVx03n2sXVvm+/xGvUSUvlzd3YysjfxUNC7We+usbjyj1XSEpS\nRk9F607/0eu21b/Azc7rS+NlZdlFT0VMyHfF1eG728tMTUBXZ+v3QUU4Pz9TR19Nzr7Lv0M8\nOmHEsa+94TQ2MkVOT1VFSOv7w7+5v77T1PNKPjU+Tnfze2dv7829sK+urrrIa0pvQ0VOQUM9\nOD42VWtdys/N0ddXzsC/uL7L31NLb0rMa1/PU+NcTlVV23PRXktRQUZdzrvDwO9QSU3lwb29\nxVM9MTdAU9fZzslcb1VZx8zH09XvTE9ITFrf385rX0E/P0nn1c/OX0tPPlpp3dzO1VdJRElL\n42/f/1tJVUta1dvPxc/KzWfrd9O8v7+/3ttMTv/c2ettSFVDSu3nu72zvb7JY9N31evcW0RC\nMz88a2H/505GPD40Tl931tnv70v737y4trbAxu1XXF3nzOfEZU9BP05h1VvRTV1HPz9AZ1zP\na/NEPj4/U9nMzcne72/71b7DwMHZ/0pFQVnv88x371NFV0fp08rL2VpRQU//z8rIzuNcTk9Y\n3czL3edbRkBLV+vGyMjR72dbb83Hxb3L2W9NR2ff38/vV0hBPkr/zsLGw9PfWVXj1cvO03tN\nQz1FV//K3+9RRT47Q2fv39NZa0nfd8i/w8DnaUJERFPj18/e911KSVxzwcHJd0pHUvPT0V9L\nTEn/y7/Fzv9YS05dU1dN2cS3sri/50w+RFXl6+dJOz4+RlbMx8TGyNLP7e/fy8HIzfdpRUVH\nT3dv61BMQz86SG/ZzMrM3M9z59XHz97Wa1pRTV3PzcrVTUk8OVfjw7u/1+9vT1ffxcDD305D\nQj9AU9labT85OTs7W8i/vc9jRUI/Ud++sbW4wM9aT09czNX/d1xET1ddxLy8zsnOT11OTM7P\nY18/OTg/RtjHzNDj2tVj08S/urTMz9FrTc7F68BLM089MUJH4bvKT2dXSkhtU9fR21/HVVVn\n5dfOVkc+ST9S6+PK00hV3Ur/1e3DytpO+2k/U0xjwMvpytte71nhu8C93VxDQU09aczj3mdX\nVW9N29PS11RKT0c+Rk7vbef//1vP7XfAxsbKTc7tUdH/zL7Oz9Fve2NTb8rz81tHQTxKU8m9\n7+N3RU5BWdXNwcnJyu/jTE7NycjOWXdAO0dT18FvVFVDRjxSWO/VTUfzPHdbP7zP0MJFXc9E\n3vff2j9VTl9v69u86+ndREJNQ/fAxczvRl9RW3fz389n3/vRVctjxbjAwMZRVUxO2MnBv+dh\nY0lrTvNd7/NVZ01fTEpS51tr7+PczOPL29DOTkM+REhIbd3M2FdpUFfX98fAxMnj729T32vJ\n2uPZVltWU+fRv87ca1JTVV3V2d9RPj89Q0JPTsvz5V9zQmdMY97Vy+9RWU7f3ci5zs1YVETZ\n///A1+XdPVhARdFvv8/dXEBDRUfr3rzO2fdYTlRfVcfJysv/ymtvzcS6wdHvS05Qd93RzGtM\nTEhIS1dnY1dJT1dHV0hn5+Nf2W1n2fvZw9TOSk5dS1tr0s3Fd1PjTOlpRtJGY15D1f9rym/N\n2FNX62fY3WnOVeFVR+NPb2Vf729JR0tS62/nxefH0+nOb1nnSN3vVtvr2tFPb2vR29v3zFVN\nVT7Rb1DP98nNXl1d///nZ8Npd+dNzNPNy83B3dRK2mNP3D3a52/PX7/KxdHYyEdVSU7LXNnn\nR2s8O11N81lMSkI/Q0hd0+XN52/GXNe907vve/9HUURzysTH52tDY0JMW2/K9//dRVlRb8rK\nydx7b1xbb+XT0M5n0/ff3t3Ra8xpT3dMRVd7xtfJ69ldYXdK0NPpXndl2f/zzNfeUUNHd1fv\nd3fXUltRSGtTe8DOudnzd2HjU8vjxtlrW1tr8+PYz29UP0lPd+vPzs/KSttLV/890mf31UNj\nXz9HREvcWdhZQWU8aV1j++v/c2d7bdHCvL7M9+ll/13329vJWFFvS2dX0+vS6Wd7UWtU5+PM\nztDbydPr0NXR2tnU3Hfbb//a995lX0g9TUbP1tTXX1dMTEj/3e/PZ9lNZ0VjzdHMzuFOS0Nb\nc83O51NEPz1MVdDHx8rd72lPUv/rz8/O1llMRExf43v/b0tPUVvHv8fG+2djXWfZ18Hn71lN\nW1NVY9Tj2GNIQkJCVtfpzmNeTWP/58u+xr7b3/9LZ03Tyr6//19HR1d33czM129ITFZNz9Zv\na2tX5U370N/B0f/TW1djd8jF299TWlNJQT9P89vf+0xJP1jhz2dPQlPd19/f2czJymNVSU9c\n/+NfW1VZSkxFSczMw83nZUZdd3fGy+POT1tZRmnv2dbO5fdHW2frwrzFwsvVTlNX7+Xpymtn\nQ0tP3MXf2Fd7XklHPUZv2e97UUlGS9nLw73O2l1OTmft0czN0Vv3TGdj38nO1ftfUE5TXsrP\n119BQE5OWd/SxcXPUUk/XdDHusfXXU8+Pk1SxsrLSkVAO2X3a1/Vd/dTPkRU4cPN33da/15c\n/8/M22VTW09ATP/Evcbba2NbW/vQ0cvNZ2NGVG3rwtXV011RX1fby7y+0dhz90pTY9z30d/3\nSzw+RtnPzednW0tHRe3Zy97XT0dDRm/Rv8bPe91LQU5P19vV309KQUNA38nIwtP3UUdO283Q\nb+ffV05HRHu/wr/Za1tDY+PAucLJWVtOTk1e59PH5d9IP0Bd2MZp329XTDo8X83Hy+ddY1xT\n1MnAw9vZY09DTnfBvcbbb1BFSErXy77Gc0I7SkxYY9XG0dtYU1l717y7vM1rVlpXa/fRy19v\nQklCSPvWw9xDQ0lEXWVj3P/ZTEg/Qk3pzdXIxuNVSz9N58zBe0tPPlFPb9HFyMTrVVtr3b/E\nw99VWU9KQ2/Xw8jO41db7+fUyL3D209GP0XfztPZ5WtbVkZP48nP505NSD5Md9nZ62VfXVlM\nZcy8vdVeTElh49fBw8bZVEpJS1tvXl/37WtRQUNLY9Tj71lNTV//zMfMvb+/20ld7ce+d09P\nV1lFRFTXx9ZVQ0dPUVtt/+f/41tGT2nXw8Pb7+1OTkNEW8/L2HdTSkhf987Mxcn3X1/fycDA\nzNvL129ORV/YwsPaZ1FPVd7b5+Xr0NdRPT5N99nW2d3lT0xW/83F1c9fSUBCXHfb1uP380tJ\nXVHW19zaW09FT3PZzMzR7+NaTk5DT9vnZ1JMRUNOX9fGzNX/911j/8q8ubrQ2efv7//rzthn\nSUZITlFNY9t7XVNJSUVQ39XO71Xv62ldd9zBx93/UldfaW//5+Xt/2FfX2nZx8v/+1FdaV/7\n79XI/09PRuXP0c7P69pvVVFKW2fbzNtbWUth/3Pr69n3a2ddd+9v2vdTUU9PVVdt69/la1tb\nUWdjb/Pje2P/Z2/3593S2ePl73tz/2/n53tbUk9TX+ff3uvv6+Pv0dnPysXL13Nne+3n6dvf\n7XdpXF1dZ2tvWVlYV2FXY2n/6ef/d2/v39/d3eP3X2NaW2l3/+//b+9v9+dvZ+/p5ettb//n\n/3Nrb3d3729nbf/Zzt3r+93naVtYd+ttW11dZ2tv8+/j82drYV9jZ//j/29nd3N37/Pb3/93\nc3NrY2d77+dz93d7///73+H393trc/f/+/f/7f9tY2N77+/j6/fz9/v3997Z3e///29hZWv7\n9/f7d/97d3d3/3d3a2tjX11n++/t9/9zb3dvd/Pv93tvb21v/+/r93f/////d3f37/f3d3t3\nb3t3+/f/9/f3///38/f7/+/z/3t3//v/e3Nvd3d3d/////f7//97d///9///////////+/f3\n/////////////////y8=\n\n--Where_No_One_Has_Gone_Before--\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Where_No_Man_Has_Gone_Before\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\nR0lGODdhQAHIAKMAAAAAAP+2bQAAACQAAAAASEgAAAAkSEgkJG0kJJEkAABIkZFIJCRttrZt\nSNptSP+RbSwAAAAAQAHIAAAE/hCISecQt+qtJf9gKA4EpmVXZqasZREHp1ozKlJsig38yv9A\n0uAAGx54hUHSSBzCns3jj3hYKBQHae/n2+m4wVx4PO6Syd5zazuTVdq4D/xGl/uEBOEvT6IS\nYDt8ZzhbaTyAYF0rhD00YkCAMTxZBlkHCgsGlZaWlZt+WQQFfqMwDAEMDpWCamyuhq1BWrFT\nsLS0bjV1OCUhbSq6KF8mK39UnkRFlFTJMZKHMU+FLjoYodRzJ8JAXoFESzDLC+MMDQsN5gwL\n6uuoqJkIluHzkwfu6t93Yc9Btq1efKQU8IcEyKwxMQbegvMrzq4Rb0A03EENAwxNoDhp3MiM\n06o+/mmItXC0rdvIRBdYTVLWaZ25KuNinkM3Dp0DdOUwfdqU5wilBuUM6FtjRMKwMEMRCkgS\ng+CPAgCmRFXjQyHVN9lEVsw2MeIGG4RIIjqwKgsTshyzLFCrdu04tvKOOCRaQ1cuNWiRtZU5\nDsECv35jBjZXs8HNcpnWoj2SR0Anqi2M6uPjKCkXipwcD5G1g1/Cpf4OTB0Ci9hX0w8hWmzY\nlcbinhgrOSY7IcvstGzdGlBchRMiioVsNKq29egeSgYaKGjQ+23veAigR58e+C/fmUCzqytL\nGqPjkCiBi1RiqNuiIQCcbULmyUh5bl8QGkU/iE7W0/edYI3YqLPjEpo4/vaJM6K5V5RrZ+G2\nFyXcjEeDVnaYQRpy5VSoWAJZxJPFKAdAVwB0HU63ll8w1TSThbYRmJ4EMRiA0jBmuCDhF6Lp\nRZaNnZi1mSgF9bgPeGd4cAKEqUUo5JAOGSOAUOyhtaQFBD44HxvqKWiJc0gJh5oLQjaoQ14G\npIJYhxoVYOaZSZx5wCgcZtihdXC5dU5QZXnnomsPAoNaMAQt5kklFWrnVhW7fXKGT87cwU8Z\nRfri1Vd2zSDadzWSpUCT82khgGRZImHNZohactsBOJn1BxhsVJRLGjcqwMAp5WxkphK0ApGm\nEmta0qYlJDbXGzo6eQTqd3meZ1KeU3i0jCcu/lV4EzrQQvtsAwOaZa1j6QmQh0IFujLJpjfc\nR2SjGojWS22aZNIJBYmWJ0M1pI2i2a6c2EStJfAZK+O+smjyqgOw8ubTU7XOeiutabK55iga\ncqLYw+ouJtqkFtyJ6pbw1qMJFhznpF120JYTbQANkHwYwOMU6ueEmhFrSLcSHBmuRKe5wa5Q\nk9K25BB6/cninl2V9INRcQ2hoTWkorLTQf3tGweVYcIasGcYLGHVIwlvdmvCGzqs0XZNyeZi\nu3qmGlY9rn6cinYAowLw24bZRPLcJU87pzmbMCEgerZ4cJnMNG/pBuBvGAAAkwJmG8ORlRx+\nwaTiKiXVJFFtJHAW/yW/hIkflMGI1SE8u4qKyJuk51PVnqZ+8BIIK4HmwgubmavXOVIas3hE\nrpHFcrCaHIAD7gQg/O/AOzAtOiQbBny054yznBVvKabXDqwTRcGRDJE7AhUsGh4VRpVD6Ti2\n/DLyLa2SnC4JDr1dmQWLOBFGVsO4Q2rRjWKmslbpTUmi0NXmsVVBljAwhKkJTQlaxoq2go1F\ndIZUpxie8fIXso9JK27Hi5YGm1cYaKVsf99aH2mGQziHaEtwKExhCry3ovQgYyq1AcCU/Ca+\n8zRlM8PyySa80Jb2OWMANQEYTNbTGBmVbQC7edU97mUbHgLnarTYGutGUbCD4XBCy0CWqv7m\nsru6AcxCGhRZyda2G+xo8IxoROOYPmGCZ0xJe49ymggKJCD27FAS82ljVLhEwy1Ya2Dpy2Ky\nLjcqmlwpYuZ5Wh+UKDXeOG6EtmIEQapnq9UVrHVMcU8WE0UcRaKFd6/ioEzEmIrgIWY3pGIe\nYfiSRuXFbXMpIp8spnKkEtbBLuA6wYry0iK0LNAaLIpKCXOAqNmEg2W16VZtzlEJR7YFlZlQ\nWRGJMwUF3COU4HuGFi/WnzBYzUdbI5g3cZgjimmJGmRp1k2ix8p2CC+CiFnOJUokkwSMIwGA\nAUxhjicTZVmjM5KxZYTIFzgZ6Kw2BPAEBcaGAQ/IcAQp+KFGWP4WKlbARFmLSRlcQoEXf0mN\nOe1yyjQs0wpKgtN15OnRqGSTCEUdIFCJ8WFMqoCT4Z0CC+7bi2CoQ50OPoudAsMZ0VxIDId+\nQDIw6xKSZACgFMlmYooTKAcINDHNcOSfZ/knRiUWMUpEUz294NmNgIKK5XinW6gCS9nGsxAr\ndqpWBskLtkaKLgiaQ54PO6RyPFiqprDIYdaJCT7ZFJ0OvkQjGhJKDgRU1AnIbA4lnFSA+EXM\nFh11mBKJaG2ueBYeEet9DWXLgKqFG6Hw0IUvzQkl5vqg83ClWOMcQ/VM2o995AhnsrRGJUAW\nz0H5kFR5kWETa8GJ6tjzLwgwU3IRgP9P3sxLdviahSFuZx9s+dJFD0UhWm/kjD3WLJeO0qo8\ncrimHkBlQgEx3XokRqjRcjdRE4sasLJYmpbWjJpRFOBCGnQbhT7IT17NBHME1l9LmM58wMlV\nAeyZzw+haVeoe528SKOIDoAXcDfSxGStSzjhulChQpVjHId0GUqNkIezpE/OeCkqQmmkWtn0\nF8CUo0AKm/NprdXTjPbLYxZUiQEMIlBMeUNaOnK4S0cI59WUGx184jO5BtvQJOA6K6zSZwfU\nrQOggKwzGT5Uxzn7ky9tWct3xRA96fvOCNNcG5dtcmzu3ciW1RWmMSrnhabJrr50PC66nOGb\nuDiKgOYp5rT+gY2lkLpAl2ohwG8mDDAOfvCZqpYGqxFwXBUo8wbQQichUawCn+buemLIAakS\ndACPLdD6bqhZipAvRaVNC1AYwLFZX2FdrnZg9iDyiEH8g1G/+CsWmMU7GhuYNVoZ1lOk2Gg2\nPRg+UBTnmiPyUCEBTgXd+xO29Iwt0773TyHegMwei2ojrkDVP2tzdyn16omxN9a7e2f88HHd\n1vBnoPAJzmW81Q+2Nk0bn4QeTDcXoE/zp9dwRWnrUippYOcbCZ1AtIWvJ+7rNc6h38NBMDNs\nOMNp3NQF1aNjG/rqVyNVmN8pspzfvY6PcnnYZAFLeCUJjIyJRw2AnkYnZSBcTIj/DmzL8Osc\nMibtM6GUtv7mL7+hawWDgwvkoDac01VAFgnE5n3iKrXN9kU0Ne+rKf98Kmmb6avLmY4ss0YF\ntZpOiXRPhJquvYP5OjX3fOmrA19KDyPZoRHJvEu2y164o8vw1pQSjKZ3Ro1RRy5QGXZcqdc7\nnKWGnd2sjzy8SESznuHLbp1JVqxem2lQLUfWzeE0NpdPTb74DVeS5MCkrobR0MtdBVgxZz0e\nRlJwTKJkHyX8FrMKgplOxOWKb2rxMctypj8ApuQMW8TkyoA5jwRVismVUjgCLDpK1Js7siUn\nXfUEt0Ne88/F59eAf9G/77ukWTuyhZzyFpBiO0X91vYp/muCshQ5tMaPUxfq4LUBGiZ5BnAF\nHjdQyydV5UYfj+MBjcN5YnVHo9JPIONBS1MvmAA97GE7OpYf4GEI4VRSbkV4DqQN31JnlAdV\nuYVJwEEGJlV/9ddo04FPsQNXaiFmmlZtjBeAqUdqO4NbgNI4pgVHhLBqwSR9nbdSESgxzLFX\nI7NB+wNrzQF0wcWDEGVCQ+EFAxGC4pQEIrV+CAJ2WRAr7+NlkJM6BrRwRSd4loQEaJIA9nRc\nCRBpBrMEo2JtjgU4i7eDHeABlUKAw6ZYROgCTIIeefAz3VUlLEZazoMdIkM3wgMs0pNTVgAU\nX1Vw2LML2fN6wXd4mGQmlYYG/51UDx6xJNHkPZGXJ1kjaQbjhlT2iq7zhqwUhwxmdG44G4h2\nO172dLn0fyHAcbrlS0TYgFUFdp/iboOWfYyICWcEPMMjPMUTAGxnOUlDa18FLkYGffbxCICU\nSbOjMC74eycxCnfDAOulGAu0Dd50JvoXiwTTia74YH7hSuiQAA1gj/UYHVaENI2zfMbXi7zI\nARrmJKL2UE4HaploZMqXZmQRDjD2Yu4DPeZQgcTzOxb5AA/wO6vEEWS1HeI3KQD4XeZTQOjj\nNQ3DNLTVb7jSDq+iDmcndZWnhQakXHM4WHPYcAkjj002jxlpPM+SQfcEj0jwYaKxi7qoi5fn\niwi5JP8BEm7bJmKc8pT+USWfVSflRI1DNJEQZDyZ44wY+YzQmB3RRSj3AG4++I8PIQYDYTnR\nUyawMILepBY/RxuLIUP0F4sLVpMLpo8YworKZVg34QAZKUGBKS3PUotCOSFehpTZhYcBCDge\n5yQ8Mza7OHRxUJR5d2ZGgAzhcJWfAFSpJEZyE40YOZhgmTw4VS8LMDq+1APjN4gsQEBM0Ja/\nxQ8heDCzwBTqxQmmky1VsRQzCYd76WRwuABOxlzMZU+CCTxfeZqRSDyF+ZP3OFis40SM15j/\nl2XKJyQ+QxuU6XeZRXKY8VeKYyWA1ZYDZiJnNDfM2ZzO+Q5BhjnWxGU4I4j/SwVHfrQUtONb\n+AKDPZImC2Ma7iZ+HGabSyGPcMhcxnlG9rigyiOYpvmew/OgPmkTcDidyeVNMWSUx0dxSllC\n2uZtfoVpczEFlJEinakgQCUTNNFKyFM3F+mezrk5o1J7ZjmENzaIW8EU+4kza/GOCASgojJV\nLUQg/YhDsvOGxTkTgemTTuqTpZmREfqeXsSVN4GP9iicdugDybeYXXqdAamDFTOQFzeEPsga\nVeUaOJOicfIra7FKzdOiaEQ3pBkApWmnEuoAiKQRVvCAe1SUW0dxmvifCUQ7DIcr0MWjutZQ\nZlikpgNxsUOTC3aP05kADmCpT2o8USqlEgqNJPMA/8sjLXB4qQm6pQVRlIyJcXiYfMy3G5fi\nWCWGaoTzOJvSC1RVqCvKoobVSsnjOzEapZ36TrHkER75JID6XWAYLluwhWlxdqyGSYiye2WT\nM86aHlrzhnmZpZZqqYb5pJuKpxIKqtEYN9FyqYahpWklFEa5rl+6i0kJLhpmgDckqPsBFgyJ\nRW16HerZjMrDnr7jjMZjp5t6pxJKhbHRck7SoWk5M8LnRIk4G2o2QMBJK5Smc1tglzH0gI7h\nbDfZZHC4rfd4qZnqpN/6lSZLsBV6PFlKqvdoqlQEqBzKqozJi4yTWgfFQKbhY9oyIQnSK/o6\nkUBbrlDqpBZZtF45sMAqof/38lfNFBSfl0KLKjjAV14hpBmgQk73Jwa440fuJjFn0rHDWY/c\nOrIkC6GcKjxSeqdD66TlaqE3KQyJ46XHF7M0q3yTSWsHGTiGKAWI0pkQUyJplKmgiqdTCpZI\nO7DBilNM6T4D+Vj12kD1FYriOAuqNhv1AJzR9mdSwCUSYw2s2GTGubIUSrJIS7hIu5ziCp1p\n9LFemAIFoAlyK6ZeinyX1yrb8ZpcwYBa1ZnRQU8xMZHY4a2HOzymmbaEK7AYabadCmQlgCjh\nZ5fCAS9yFL20IGVTlj6gMlHCd6pTMATOcW67qStmcpM1+bEfe6UjW7pnu6nLCbDE04x6Op12\nOAX/6rqYc7uudQteSOQv63CANCQHNSebxVV2HRS8mlqynTqYJ4u8pSuhlfA47gNz+LEGtiC5\ngwdI0dW92Ys0Y4koPHolyaMO3bBVn+uxozqqgluayqvAJ6vC0Cmd0NKg5vq25lWGs9uh1ZbD\nWaZhBXiKCytR4nVIviunFAqqiBusnMrCAwuhnYoFawYXh5MnlPspqPJHoXI55sm32Ys5liA/\nZzQTp7kAWoiLnMCOSmq+aEy6DXy8pyuuFapB08K658FCs9ulR6mwAGCrhXJx79qDwNEYY3EW\n1cFKNnHA3xqs76nADHzIzukA6tMJMIc912tVj9wcELMAAQuF/MmnEZk0/yWDyO/JZVssK0qq\nj9SBxvYIpYccoW38pORKqfiIycI5HKNQxzp8w41prBsDu2QWgJwhwEIsJ7s6tM1ZuKD8jHeq\nwoz8jE81aB7hXd27EZQCuIQBvNJimtHIlYaRPNs8Ms54zFRqG6NcxgvGjsl1kw+Wxqoso8QL\nrMlrxM7IVxpUi2Zjy/eLw/jbbXqxQDL7rgZBXAkizL+7T5rKxCYLzqdpvOxLsGDJHNKXF32q\ngtN8Ysmifbv6oMaMyAH7zQhtU+pCikHXIWgCZej8uedLssTbzi38ztpMGA1qRuhKDbbMrvbr\nrpsSG7zsrka1h+ejPjUaDwJtRsR8vB2d0KZ7uP8yei/fIWy8vCkRlSDDwi65EadCi7gsnNDt\nWdSniQWVs1Ubon/lPJx9gaAofMBEjcDFYzcHEIf3tErRMRyMOtP3nMM4HKIZILv5DAac90ck\nElgDXchmm8xajcxpu9BGPKV1AkoR4zdYhLWL0rUwMY+AbdYqjbZXPdhgqQ5YYF0tQc5kTaH3\nCNbJiamoa9jwzM2HlSGj3aD2FHx8NNN1PNdLkmFOt4cKiyDkEQ2holN/XcQBm9FFrciFrcxT\nyhvXdCMelixQPWV8gwI+8buAfcTGq9WfPDd000+bpYgbYnTjm8oHXKHGSdIfi9GH/d2qaw7P\ndsYfiwAwAtsxG9tWx8P/Q3iUXzqSEsWWAh20T2rZmG24SE3cBHsvexfRRWpVRpAgWKXFu03Q\nh73Awc1PqKQXONHMUrjdOamchgyhXBneJuzdqFvQ4K2XwSdFo70A8xt57p3i6JKMq/qui9a6\nJMmnutq2XimYAtvfhL3I7yyu7nkO76RatLF5E0VVV2UQtxFEgS3cx6zCNIHFbfHJ5bBL8CW+\nZ7y24vqgobvaHu7GzNOXOdk+OTnaoBgHKe7euSR1Awim+GyCLXYW3pvfVD2yN47jDHzUKlzQ\npglKTiuM1sWzWlAvHsQJ03YlDwquho7IoEoYvWtg7oY87xQAjTPOkfq1zDW6TX5cpPpk6iyY\n/y1qnJLWXB6kj187WP9W5mb+PVVXcfTNi8z9OLJwnvsqtOaN4+58uB9u0OQQhbg3coL+5128\nrzPVXfhqE+yM6Ff6FxvC62rh6M/I1YBkBE726eMtP5F6oaR6ziftk/dU0h/iZB607eObnGPu\nN6Zuzw6oYU9C37lMXT1gLVB9JYM8E0Jd0HWu1cP93yn8AIPygAOoWQRy4IdE1aIkzhHVxcRe\n2IfeznpKg5OmU8wOlpvNtxqhlzXZ4ei8rOHOuh47tBjqYBRPg5bwsX+RreydeuUe2wsVc6ru\noTq4WDsSVwQA1CzKV+fQpMuZ8Ahd60jdvmY9iQoUEZnxPgE/0KJ0NP+UI1yIZ8jFLrCEwSEa\nQsga9IzlYF1amAXrjcbL1Y5WYxaULt6kfZjcbnTYYPUJylxj7n8nX98JtfJ2XN/RPBttMpvC\nHLjKM7hL39E6f7qqLI2M249QokkpMptvck/hPYdY1wgbYZhLj5HmoOnX4RdOBhMPjwppagTI\nXr5oTIfDpxhNjlx0ONoVKpxgrdds4PRxyN5tkPY33Fo72K6t73rPOs17Iadxnu/9rcR67618\n38VmtXHhi8GWjFzT0YmlIdWkss6Gq6fGufyCNem5At1jBGSOgDkjgsrrvZPYsexxIxijTtpi\ny+1QRpAJY74jn/qqz6EXUQI7rdMcOpLRXOH+19FKNs/GOJ/A/83Sgrv7Y5gTfi/7uz3AEHBk\nGdWOIqilZ8gkccbnCc7TaZakSRZ4QahMsG1PWhqeCQzBIVg4NAINBCK0dC2dDcfDOD1BHYFF\noaBsjUYuF2sJ05UP2oMzUbnZAG94XC4XAOoCQx7ovtvj/Tabi4qcIIEPiYMYGJ5GRxUvr4Ar\nk4BKFMzMkk1OzqjIyJIFg8QGBgaFAwM7oUQJRESz10Haig2LxASEHZJMFZEXFhm0D4xD3LQd\nIwZSAMKWo4OkJcimEJ6WRuWjyaMsLS4SKRVsJscdmARF3UWKm4G6Ofn5NtXVPrs7/L/84w5D\nD4iClEHnyKAXKJP+riysVCLTQ06WOj0g8QmUKFcKAjAYxQqAhIGJiLhydShgrWK2UooM0QuF\nih3BxMyQMeFVDkTKTh1wlmvKBCdfnjDJ1ogbjwVnClBDqEaNQaQrlEndcMjNPKx08Ny7+iae\nV6/6+ln9ECSWkFhJV6y1cpBHqIUSHVrSdGLi3YqgxCUtdeoeTxwkcwgGifOkIlKDA4o8s8tl\nCkgOXoRIknDUAgaJ+JY6kbmVgF1Ghqnx4vSLZCsjqgQAurRL6V/AromAyhZplkBfs9K7oUef\nbj/5wI4VxBOtELOKF02FkvrtRYYON8m9W50iRYt6pbjC/ANwSMLhB/JVMEoRxxWJSWr+QdPl\n0iQri3Ql3NiAIAP7Enhs/PExyIsrkNgiqNKugSKbSFbjAQQuWhLKhS8amQ0hR45AKqA2dqMn\nrDwUUGAPfuL5Src22Cjmpla4Y6QRhMhpEa67qLNuIouu0267RBRoQAGv9iBEMAQSSYI70TZK\nhRT+1NqMsQJgiOKSyFoQwckrUMCviBOm4mUjUkJaIMAZZiBwhAlvDDA/p14DJhIWnyPHKCNg\nmsEOeIDT8A8bDFDgFAUG6IcOOEbsx8TPYClMkUXcBKW50yqyzi4TZizhSTPnWnLHPN45iztF\nFNkFhpewiOGAzk5QZIX1tpAGirngE0qoLy/xoUr8OqMvs1j/oDkizAYjgy01cSi60AnXHIRQ\nr0UpVMHCFRCo06o7scJhT7+62sePq367gKSBwEP0rRSwUxZYRyU1V9xQKKIrS2kkICVT5MIr\n41NtLMTEKGaNYHeCJCp7LLJ0yERtP/hM8QUF+5KDZgX2inXQIgS9mJScydKkTUq4TnOOTW1m\nMNFODUXM8xS/CAA5uEBzO0YxAlD8QIYVI1OITQe+BPa66aSTTiIZJ0ZXnEzyS2qBVHh6oyzB\nhk5UGzL0xfchLBicYakGrnsJlIclNghqWrtMIyH7PgDnCYmRzWsFmbLQhahjzZbsl8i0QTsD\nC04OuTdqOQIR22tDhAeDHxPZFFFl/iRRLVmzcdY5Up551jnx9zYaekdVANgjRU47tU2qFaGG\nOqkEwKEptUoaBeM1iT0PNRoQoKlZpC0aFMFtSimWaoliyaU9QgolDJ09NqKV1gCSmQECZRHl\n+U0Dk2IZ6TjCFWXU9GrI7YSuSLPX2RK3Iz+BlKQya8Yqeb9tjnOjqlS9WWmUCBP17H2F+0uJ\nvcfkEvXAdoVXotJ90sY3SSkESwkH1nZHM98NkAZdEV5Y8pQ3VfABZYASzjFWJrjPqIg5bXrT\nI6Z3kemgYHFz+VkooHYl/XzoDcbBoJAm17vnXA9q9vmU+8T0Gulk7HTpUh0mPLOwzUyNgOYo\nWwklVA4C/haQBAfxX4vKQSwi1KCByjMAZnayN+UBYlCBi0UsvHSqzdVGGzV7hDiigL3qQCo7\nJjxhji7HiuQIKUiFww4jimi/SRCOMrFTAunsUr/eza5VPcxPW+aojt85rG154dhbcKcLLmAD\nKdmAH7IO5BQ0SHGKfAtCHsSXqWwFSpR8Q0YLW3GiTy3HNgXRUlRYVD+7oNETetFdJfQlOVUY\nJx8sBBIMEGAFYdHvf4SMwQv6FbvZ/QtoERJmRHroGQkVQQJCnAYR3fbBb0CymmmCUDKdmEAo\nzsluWeHDVjz0LsBIaw7HONFZvJgTwi1naJ2SZww4Jz8bzdKScauGKvNjOa7A/8MwckwlqyYV\nETx6QxhLmEYSeKEaEQJtZiDsoZVY4IJf4gcGDZMdNbxJsy+IiY9js9hHeyeZNG3BHePcjQAI\noAcPES0PH5ngiHJjC5eWjyTqWJJO45koXtwMhAhkSz3naQrztMIZQfgIkFL50EFW9AHpuChl\n+qWE1GFCohOtX0JRkAoW7MIHASiPUkhqIIxND5g1a1hbSUrSV47LGmoAhyY3KSJVkOxD9iBn\nyix4IsUgzT8+9Wm/gPrBNUYoKr686pA0VwTzNINOA0EEOOhZuK3G8nNVbUJjfynI90xEIiBk\nnOo4koYD+MAHF2JPR83xQYfYhwZauEBbp/YCtvjqiP5pUoIWWHo3T5LMHkbTIrbGYgucDC4R\n4PEWYQmzi4LKT2Py9GwHklYSOmGOJDQJRgy9irDlMFSbWH2MCJ3JVcU9kzNj9cEEzpom7VTB\nY7eY7RaUEQMn8s6RKd1CnTYJljqQ4hRG4is/AFwiXBSDCIHLIBCUCp6eSqCpy8WcPacSt9sw\nFkWLScS7NtMlHAx2u+0Lgc1Au67ISSEdcw3r+3AIEetQSrQn5IvB+IMqs67tKdI1ATbOgIGG\nhQ5AHcwXoxxR0qX4lkTRAsRWNuKXCB7PTtoiBEDaCZIQf4CmRNJSZJf7I/DQqy3MJIMrzkKA\nIKU5wkol7nrS7D5GJHNnzv4M5lzHoM1rlFeEk2jVQT+RMxpXUV9jxTF7ShpXYXFum7PZYIXE\naGe6esxaBvBTA/NEPOEu11qcJEshBiOQlmVwy5pR2g50VGYsx8tLYm5LVIJ0AAJU2cpn0Ix9\n8qMKeGQ3zCrtFzWayThgfwEdJSZ2r/P8JKgddHF//rP9fmjj+uSHBu57SsRgqI0nxOTRjxZg\nN3UBPAbetZOpPQVf8oCWCf7JJCsDyAVXSFOBEiapSUGnejxCEnt68EIYdMbf/lacb7krB3YA\nwqZ45dCqdnXOdSypVSMZrGQPM37K7kYmUPgC/qz21mNzLT7FKIapGMiV5zBITGaDO9rm+r9i\nAf8oCtXTSf8O5x0mMQxlb4AWb4EnMYn5iHoA6x+vRQ9YvvwyOtGSYM6QxCOBe3PTqeFdvDQB\npU4Qg47dE0JfSEJ7flYX1IqWlKDxBchDbBAYEGcQmfgOKjsoQm0EiNbfWWDlw2EFKfbaj0Lh\ng8qHOZHOEwHHLulBPbkcfEly2YqmkQspr47FGxwckkOE2gidQqdXEPHmaV6VbMHyRBPsvNBv\nPwzrQWMVsulSo7gwCxWuUK2FyszxJBTrm22SG3OkNIW1F9XkJ/+dBdM9xRsAVMIpMgS0wrJF\nwHlaIIfPKUgEyk6jdThzJBm8HWs3DM2whsKyQITT0PkbObbvza9V+MT+7uuUqi9axg+BiRVO\nX/G4LIQK+HEwqQiN47EncZunKQo5Won22Xk0Vqq6McANq/gtddIHwfAIQwiectKUDBgo7RK4\neuAlpUKnW5oneSmc0UKCUjCKntoBFNCPWzo8B5uwOWoX8Vs0qMOOMCA2SKoYans4SVCIt1gL\nM8Ke+IMoRwg69moEV9CCAfqdPOumt/E8bROG2xDAU0EHAiwxJKgbBFQevxoA4pGwpio+KRQZ\nTbkyxTC8D2gZNhiMncsJTLCwRSC1hKCUpuEGhBGNzlkQgsGCwvMKzZimFZyGhCub0uCcFotB\nHeMf2ugnRog2w+kGdYkLg/AMHOCPKrg1pQj+HSGCwvORDSesmCFyglcDo/uSJ6pLCjYIN+DD\nlgPQkRSBo6P7jgpaGWRQLsLYlDUzgFuCEyckg8mhD3L4lhQoGKaxp4eAxAhqLhDAQ2N7qEVJ\nBzU4pmTkqJagjaVhlk9AxIVAiHwpj6bqDtXCMfeKnSDrNktkgSRLufyrL1ewtQHEHSVIinCb\nwhDJhypiRJoriwoYi5TZFg4jtTTklhRZERYhPSxgmk6BLIiKAvTZNqa5JRRIqoBkhf15taZz\nqGsQJmFDG2GIPSG8KtqaNqIIK/uSCjfphkMsOb5wPBsDQtgJx4tMuPSbmnFMpJS8ruUISCgc\nn99buZFJES9qwO//CD5BkMekQcNRKZ982483yZc0XBETkL8w2hi5QUgUKLwI0i6+6Jd22QXc\nkki0gUEZECI+kjQOGJAWmy9OdJNNCJBlOYfhe8cnu5DNcCtDa4l04MqLLLGLYoQuI4lVWgdE\nYYb/okLw07Tlm7kDDIsqExsN2hwNxDeh2w9He0QliR5K+ITNqZ5zKMSHUBF3CbNpSooh0bzb\nm6TTMabYm5rYqwVDUyn28AAiwL21mihe3DfCK4IfTBW3hMK41KZiUoOq88QQWMyAXATJMq6+\nBAsrNCV59LdQDIS/WTB+KSiRRDV62hxoJD10gCw6qhIiUx+l5EDPIYygyxzOfLOFup1P/zwm\nIZoAlZitlny11ayC6zycL2CWockMx0stW0G1cawvA0HGT2k4TbS6FWm7BdEBtZgpuhM3AGs8\n6KkKdgrFLVJNfOPH2qAnVWiaRluNFPDIDHuLSCHIjzwc7oEoz1mSMhu8FMTDzIPImgG9yTBP\n1EwJ9ayvLTDJXzLLuDLLowDIBbCcXDKF1UpMs5LRokBGJAMeGgAcIcwG5iA1aQrO4WyyO/g+\nWEjOdXsWTdHJD0A4D+qgC0GVyUQYBbmvtbgwfQIFyKhBkHwIqMylCVNBaRia8auYySBAz2JJ\nJI0it6pRqOi6MpqZtRuaVBA+gzGFAQ3C2hzSlHLJI9XP/azM3//8u+Fcpzj4AFLwwrrZFpUp\nJRfiR9VgzQBxQ1AF0zdcJQ39n4lxCRjBjorLBHW8w8OThansTMOqGCKFpAE5JjxtGKXQgaoB\nSbhoDsxSiG5YLMRoBgnIRlRZkob5ytDANrp8pK6MgW0i1SpKjKZxUgPry3owgAgUCGQwiclC\nsMW4vGa9wQT51HsRVYQ0SBbxs2nsqnLpuqARuDVVTE8hOvETAz/cyoaCLvZsn62MGXmtEp9p\nv4oYVkc1D5oCAIPRKKnAoPoCMpETBoo9om2zvRpTC814l0j1y6Op1MFoHgmINeSg0gb9yZhh\nlCPgwVB1SgVZ2SJrV1O9mnzyhFV9w+//DMgRI4hRmSOYCYqZMCyYadYXYaNV3UHFmj1HKIOe\n+wgfZUudHbv0TMfbuSioUCzGfE5GwEtX6FhJ/ctTUjAMiDWfFIQuPJRpukpFGchfrCjnOB8X\nMaMzegnFoTjPaYB6fdV5IYg8LCa4UQEtRayGiEaG0Kpd5LOJxMUc5Rw2ZUgfqDFpMrMjHbs7\nEzl2/dMxoNAlWQWvFc6UgRdDEZt/mMdMRToicM64EtY0dds4scEOSlX1MS8Zm5RfvALqk77w\n4MxFeMiqiwTrM5NznZlhdcMdtI2zXDsJ+4uPeDJUW5L0rC/XslwOogL5JEBZ6LC+etJ8WL5W\nGIlbQBqz7UnA/2pIC9OLw60oUIVPc20iPBIX7Bgk+XOFvOVbRPEsROqj52CB7oFPZBle3DsK\nMjsf1hxQywmxY0UhM2jLQRDSssMtMKiN6l2oNFAHpetcPEEeZ0gMMGPOQniWOkFOCXwqm3mO\n1Y3dHuLfanCRfDJhrXpfZ5K/yEqMgQguoiHRN+VXOFVCL6AS7TCbXSSHRzxLDB0BfozZkQyx\nOrC/05IXIAMcW6gr9HstR9OGTqFgUzpQCw4RmNs+bxWsDzYRBkvRYloB82XhtiXeSWEiuY0q\nus2OmoUCL+PRxFAtBOaLnpVVGWgB+rmoAzJTAT6Txf3fghQj5GAqx/WB+T2JyV1P3f9Mm7Yb\nFVtELeBRuSz22JsbKOBJLn3wYJwyuEUgI2NMPTB1WZAsy9ojnYlRHTd2lC/AMjwwjjxoWM+w\nY4Lw11mF4wvLLwTihk+lgsZkTIX6uFYNFIFaS5IQ3Sf+3toKMmnoTZ7S3EhWVroJJWlhR1EC\nDpMgBev6sbDFObIozA1zqFTSY5tJEKc5Y31JSmGLGc7TMzWCDnGxj4ITAqOjY6TSIE8B2Hud\nJOsjYwH2oEAW5JjFvaE8h/GZ5yAYMEbsXg5YYCfegLay4p2KTiBdKZ5sKQuuA0oNLMMoC7K4\nUp/kjhqSp+ANVc9hiHXGLEAS0WChHRcsDB7dK7XEj6/T2cb/Ck8LawlgRZsx3RoFAebLtY9G\nWwuuEISmykbzGAKUoAX6yk883dWJFgmcCr5KvpvDo5ubaCcw3pZWFOOCShTzZb8fPlOYyDd4\nRVXVAKCMEZZ3ObdyQ4wnu5LNgNOrIrHQUEJntFo9XsoBrpCArswNQoc9yA1yS4+wVYmlri2H\nXlZj2GYr9i1EWKoNsWaM3lZQnADK+rEBINtvLtl79FmjeiWH6NT0hT9Q8CVF0acOzQv3zQ5U\nyQNKJZnLyEbPSGBpUBWqtMpqQg05nY2ebkML+ZapMEogDGweKOpNtr8d4YtDUOZLvSnxpQUN\neF4jxQXMKOS+qepsfdUjvYkF+2Iw//5CAoWuMQ4YiUxKw9XON9nhXJ5ZcXEVRrKkUaA0e+CP\navVRsqLlhqxrdtBDXqjVNeHPTcTbCBPBXjzlJQzUTC3s8ugSukGJj74pCD9ATraBkTAFnKsp\nz9XW4uqNw2sn5mxQTD0OmgNYo2rvaBzWM3pfg0WI3zW9mekx3ZFvSvMTAXuymUaFy7hDziRG\ncVbR3pZTG5oawmq0qWjCghg+4vgAmi6JxPa3CFeZA1we5cwJ+kun5Eme4KDsr8U7n1NN62qZ\n6B4E8R7a/jyslVZVP4MP60s0Mr4IVwGbtaWl/CDZj7BnWVRoG1ZB3Ma8wI3LapLLBYo38eap\nTrRLMY0Bzv91IIaUKYU9iVqgcCuV8otusifGX/okjpQxLi7PVk5CJ7EdWXf44n84urNAOE+0\nSxNKSpulCKUhl4JQPBwk4hlnk/kmAFzHA/wujz0xkgbX2cyrSscyn5gYTbdi6lBEmrOopyUk\nHDYlLjzAgVg2Vn9gpwj/4Cmn9HWy8LlMLbzdyd8YpSyWoGy+6jv9mEtV9g2TVpihWPzqHhdW\nAch0cV+SUE4lIyNrpFcjgAxomV6HMh/VmxBkjDRDLYcaUyFabNGBajjrRE5ZkXwr0IXtpFQY\nt3MzDmPI9n/Ddimvye3lOAeWrEDgJHrUXrHgyXes1If+5oYWQ1g7dXEOK6r6Eon/ZLZ4Z0t+\ndEIRrsUVxfcxK2epyANcz2ADiOvwqY8q0inM28yOqQogQ/WZR8aYcc9kXUy2s7VVMBo7qBZe\nMtZ+uwBKn3IrrSA8ydIGYYGFBPcMyW6Tr8Jc2okrs3au9oBQC8M3Je90lInZqXnWJkha1rAU\nhXppvWstqRkXRwJS4Gwmp2MYkO35jaIhUQd68SUZ1dKCXhoBtpdaPEhUCwtycwNYpqkx38Lw\nDftraW7osiqQ+/ajKX11k6C586vt1QMJSAUxrAHkrLLjKCXxHNo5pXlkWWF555SWCbVQu3t+\nFVq7NDLgTwpcjzWSLfq1/BCDKZrwgHwVDNxm4cpqijPD/geqWC8qP/ztMvP8nWBAXaITxCb9\nsBcOTnrin00GQ1dy9s+NjParm6N9z8DUpe5oF7oqCFhpobXabW657t0DYsdykCaapghrURYW\nx9eGIQeB54RgNAyQQfIBFwaVqZA8FG4TUiMaZRWq1srEJZW6uhhY1Bu2oAAHs0FxBrABArZA\nMJjP5fRBPK9369/5udVAQUKFhEQCiYVBm9xfXx7cW9skZSUjnBufwIHB0RknzkGjHV7BwMHp\n6eYmqkkLBQuWocuHR0jHQxRKSQlSqEnGlswFx9YGGcHOXI5CAINzg4IRQ4PnkSeTIFPSjdYY\nlVWTFWECYWwsU0vFFrFMw8H7/vviIgB9ZOYfHumdPr7f/z9A4sZhQWTwSZkzdfDoe2TpIcR7\nmuKAYvNJlCA7pOSI6riJgBJXFdS96OIgyoYPIQKwbMmyQQB2vXZpQNlh2IwwNSgkG9CTwKkF\nQYqYiIYthTYlp5okCvYFgbkqCMJRrSKoChMx7nDCMGLm6xpGDTUxLHunD5+0cQCxKDfobbkS\n5Z70itSoIVpIEfdiwpSH0zU/nxbeAakq1KlWKM6NlFAoQQ0PGnA9cBnTsrAvkzVYvslFJwcL\nN5KhAnrKAMtnDHodkXatVcirTKR25QLrHNMkVk0puVHI6TBiwuuusccozkRH+xjm1SOwSVtx\nU8tB/yXUC5GJThgXjkKe6TtfvpDypDljx0QqOufptEqv+ECsF7+BS7EFwvLLmDD16xd22WUH\nLJ1EQzslALUDDwOYAYQzqxlABiiepGLKNlc1AQYX1s3lwgQTxKdVZjmFodkFJtQTliXOPcLc\nKHjlY6E4CQwyFzlQHXDQjYCpAYB6eOEFXngReccHJ9UYwFEPJpyn0VKbpIKeCoyV5E0wtVTm\nwH8twSRFf/WdhCV+LgHnwGg5xAGUJ6oV8eBRnDyZHoyDtBNGW/PVRt9nwmRQ4J511XPcQwB5\n54iLaz0XDlRTKVqFjOQg4kR2RijE4nh9BSnkJAAdwMCRdbTykT6lsJeYkv/vwUdSF6HZVIsH\nAYCZ35aXbWmMq/tl2ZJTFyBAmgAHDnDND6q9MxMoq6CyG29zwEflC+RgGKIxwpwU4nAjfOLG\nkX5QIomgzfVxR1WLzmgOBeWcgIhVgMHB3SPaSnIpppFsKkSnym7CIz9yFJDDm+1t49srs3j5\nZU0fyBorwiNyydnC+OkZypk7AKYmEL6gAQjGgjw3nw3WcVhbfZsZM+20CnelCBvz6JXiPe1y\nS1acVIED36OQYjcVYPRst1almcIrnh9pCIHvYfoaegcqS0GJxDnNFthBMShNdpKs/C2cJ5at\nxgqgyT8haEDFPzjjDLEoHGmKxkln3ERcX4jm8bP+NhXsqqs3eWZyF+aZt8d37qbVN0B+Hc1b\nVVLdIBJ2KFDYSaaU/qPWz4GCR5GDR3ckCpMeJUYqDk+mg6oFkXFAMOn9Wb0f6lvUXXBNUWi5\nBXo9Cb3mAQ1S40uxqoBLh1QFMPsxfXaDECCWCJfstgsmFrfHu+9e0nzf+KhlFuFWbIO72itv\n5JDfkQsZtFH7dEQ0R0Qn7QupIQW85wfRSuY6/FtrGVPWdLNeU5dRGJBMDmALm+bYGCANFRyB\nQvrKmMak0rZUeWNqBltJ1Walpy+cwDvZ6p7zLAWkDW4rOc5JoFW4o55tGaBHPbuE94R0CgHu\nbSFKuoMb+mWqpXHjFW3+S4kGCCSt0/FHS9OaH7SodYRTEEABQdBODoTSoGqgjz3LARd0DDGD\nKhmsfrMKU5fyVoIjfeKC0uvgkFCIwpdlilDqGdTR8GCJTe2Mb49LIctiaEROWA5zGDGUQjiC\nPsX1ZlmFgNrdttK6K8YPdcXzT4iyqKRk+G8mRIQHg9Rgto4owRSkQBu40nEndxjMYVh8yRjI\nMJNOkJJvgeJWBjnYl1R6sFsrqwTYqsE9DcKxEn+pWL3qwAqe9ahUxlIBhVZQEgxAzW1B/CEo\n88cOaMWtREc6AhB21UIUNGiAUJoQP7LJO2AwcE6u+2SYYIe8ohyRjsjRCwbPGcafsdJ787r/\noxpf9spaHocIC4ih+MxwxhEmhhUo4FwN10GD1nkziBJ8UAO7aRsMEeM1FcNcGtMADWvApj3a\nzCZW1reVyoDTYTKZiVCGogDtfDGVzUOLKukZnk0FoBO6NKVKU7QJIHTqiTvL5vgUk75KCtMb\nOyERnmCXqkQ0BT672AV9cuaJBG0kMUZczT8xmSxMniWTJEmAMakWTi7lb6i8GMpQOvFKd6Gy\nBz3AFgFSGtNANYNTC1ADSrXFTsnFsJEx7OUuGaI5ZQH0eiHpzW9kAlTk8YKbJzjqYbEHDD1p\nJzs11SV7SCCEFHAEbcnKl1mUZieF2ep1V/soUecF1iCMdA3tlCcc/o7Ev7SudaVBCJYsf7RO\n8ezlDTn4waTypTk58OEwfPVFSBZDAdBM0QUsUGx2FLu55GrFCHEg5XYIg7QjSKpzltUYdvNl\nKJ52g4FcVeZCk0dBE4x2tIzzG/OOlJZ5rHZ/rYVIDyjWIFSMp53eQ+WvxJpGpDW1RzJcAh9F\nklASHQ4pKbjGEfyJvdDpooF0LBYX8XmXw4Din3zFGFUhm8ZdQMULcwJvceGR2PKWd6SsfZ4m\n+LAIs9Zjf/vj33szdYRgCYFBk81LvHym44lop4T2wik8xacv3AVXfcwaEQUsnJgcpKCwwGjK\nqj4ajAQ/+F5M4hlHqPvCF2a3yy265BKu/urhPDVYxMM6AYnT7F61kGdIyOkEI0m52hOvdROz\n41QUnpGd+sIxg7at2F31SgrM+TezFF5CcAUs0MwQzJj0CWq0QpkIKajhmVbu7ZUBwaPkKskO\n172uhqWbaNB5GB4lOvOTS0DjNIN1pGpk83PNamk5w/nFL05GTHvQiadSIw1io+ne7KtWW2KL\nU4bq73pa0VukDYbI6gssJ/EX5ZANElrHGwEDzWlljeTj2MqyxgF5t7uzrAiKIkGHk0Ga6pmw\nmtUK4ME5J6Lis9Laxfxz8a1rmSRo0rgTqzZSI+BLS/gKgFMuGtVZlLRspJlBwUsp8qlSJa3W\nke5uX7o2yQYU/15eSMoNLQxVQ0SorI5kxNPixqzL+IGVRCPBySowA0zarWYe+EMPK1YZI3Nu\n7zgTAM50DlLPSek/0hYp5kBgIoroKuzn7k9QzOEHoUXIS5IrRinb6A2I7ndtrRePfnq60wlc\ncN543uVbaRwFly+qTW5j+ZIc0Qb22rQISMo8ze9WULz/4UV6zPnePfe734EudGgOxQhD/3UQ\nCE5sHQetH3YpCzyP9WX2bJpzAkFF0wq69cwIh7Dd9LDL7cjLQpXd29tR27izOeHumJFJc4jw\nRb5iBki2pO7lLaE6gzaPFvMcAH2/t9D7/j2hTywIQtGO/sDagNoOu56ofPwpiGav0v7v0186\nhfv6xlTtz5wseb1o2nwaUwK9sOilbZ+wXjOidtU//YzK0aYlK3IvFCDe9iUGSsvskS20zvnW\ntw76751S0A0eaQHBSJGSJIFVjn2RLcXa5ECOkOkOLyEJRvyTCgxAfAQWpHEfYRXYCYDfUJXB\nsZWey3QbcxSA0aReVaEfyo2eepQKEsjAM6SG/bUavL2ReqXV7s2D//2dzuGb8JHV4OmIERWh\nApSWNRABEJyW4KgSeeyfX9Tc2r1UqPAIRVAS6i0GtOFEnnxefPiC+IlGCdyAB4VKCRLK0TzR\n+lFhWZRdVTEbFMQN7VFMDYZVPEXhM/1J8OXc7/3f/7VXnP/tYRocYRFyCnRpx2sFiX29QX69\nmvMAxBtKoBlNX3swWUVlH5/kBAOpQ4F9XwbKx+GcoSien3StoXaFHPu54cjBw8PAgGosUR2K\nFLyxWR76XrYAH+DxIa35Xh8OXq0RohGOlJ1dAyEywPfU1nNBFOP5A8g90eQhnEX9VthJ3HBQ\nIyge12E1hjZi4w220vlxzyReVIaZ4QQShirSxNfFwDPEHDTEYljhn1ylTD3kog62187tHB/a\n4+DF2REeADAegUWQkgEKnPZYSq+oFxqtUkBIVxup4chhU0VN4+cVVzedgx+VxEhgI32NIo4x\nDxqaYqi5nvsRRkg8mla8ohKuWg3/4h4+WFqv8I+u6Rzg2Rog6qMv2hoCCo0wyh4nCJAC0FY8\nHgfrxaNcrQiToOBQQh5F6E5krdvnaUFFKpQWGdUNBE7ueZC8iSJITuDk7cNalGQDSYGpCcWv\nBcAB9po7spDvaUK2PBPP5SNN+qAfDuBN1lpODuIRAqRF1INPEiQrldUbGeQqkYUa7heheQTq\nraJEWiMXhpIgGdcYmgiftQuLNGF9YZnakaBIYpaRTckIjJMUqAawKKE7Nt1L2tbuuUE92mPf\nzaX/1aXQAaMBCtB5tQFeEmQUntQJRc9gupITmZ8feMpyWF+qNcWYhcj7cF6SHY5dgKNDSM9l\nuszCOWQa/z5dH2VkFqga8oRmnr0G4aWliQkKtqjXH9YkEPYibMamAPnkEaolRdRDe8bLWGUl\nbz4f4CSHsuDLB92F3qQHHrmCcWbdqtTC/YzBYblISUWneC6odNacCbbfkFGlfHhfPJzAZwJb\nY4kWeO6PT2QCD9zcPJanD/6dnAFfeiLgehaiEemlJAyicXQQrP0FggqmTAnlt5jQhAWaTSkY\nUYHIwbCK8YgSCuRdKxXpI8JaVhalN4baymVg9hHVmeFWhBiehqblrpBVyrilXOKivdnlifpi\ne/pkio7Ueu3aTyqeFGbHWKCWBikpZaqet+0OJl0OYonSqSHSwXwdhODAGfrD4/9FZ266Ubw5\nKNt5WkZ9olelW4R4QqWRV1qSVtN5qFjVwxu4l4jiI05+KQK2J6fmpXlkwq69aG6yGRRAVRgd\naZtOzpvCqRuOnvggVRwGFdUcTwgOaUE6Z4oByUlBp6qyzH5RhR9VgHGKWOhhgyR9wqMa392N\nx4fyHq7tISBq6k0C4z9WWoS9AScY0Sld5ilIaWCsU1DWqCs1lXKwoCjsy5KpgJ2GpdR8XdjZ\nqijaaLuUlJ8SJYopZD5QCGBxk6ImFihM1rF6XLKSFlD4wd/x4mq1mB/eY10eYMPKphrQZoKt\nWMoc4Y4V5V9sChN5QsD9pWCSkW+uAvUtB/o5SZ1yXDD/gEG1nBmx8KqbEuoo/M3Ltin0AOYH\n8cZRFZYiKEKEcMIWJcRMDawhwlsyvKRq4iKJZipdSquZBuM/foIkZOtPumnurcIFtAm8DuYD\nbm3VnlP5mV0vKYslSmQorWu2jVJzqpPMspnvzee98mqqUu0f4OyBUWmF9RhgJAS2qKQ7qsGB\npJV5Iq2JMi2YUqs/EuI1/EmLWiyWtqSdmYFQ3K2BodPHDmp9lpvUGZp5AEUwtZzOmtq79gJr\nyBZ6VW3NFSyRWq5JwW3NOujTORaCQVeFlcFXUI7QckrBti3g9iLPdSnhxmZe/qPQpVcaAAqs\nrYEJuAanIYEujeoyCs5+fhAq/6qi7igBNijq535ucnkkfUrEPyRITzAgb0IOsXVLGTKJRUyp\n2bAJJ4BFb1UpeHZO0fogL5ZnD/7u4AVvP46Up64Yt+za2mpKQA7B7D5ZCqCN6n6syxql9LYh\nZ14h7ohucR6YafXKZM6SoNxgpbgZA6KX91buijAC8s4eGlyaHsBvWsKZT8DYlgruD+JvGsRw\nqPIvYNTXIJYu35wBlQLkRaBA4iQBb43vAuPrfpZfZjXVpyBX3Nms+WptcvAATDIeyN5nzcqT\nFYOjgtQutnpcKw3dwKrBCr9kD5qn78LwDLPJruVMPAKwWvgvGnRRcoGFL2BHJaFu66KW2oZs\nGxZmVf8pD9YusUdaZYIG8JyNRfTMlr3C6PONaz4QiV0kh8DerolBsQ7O4zz2Lr6Z8V3yLw0P\nb6Zka9fuW/ryMFgA1EzISDiYnwKn07hKl1eunbHg7R8TnzfO6wVPBILMIpu+ba/eJ/QyshsB\n5znx2sC+1d+25ky+ZSbDMP/WpUcOol2AaBs4lvuea1PmyPVcXT9cJR4vsIpclB0UrL1cS9Ek\nF+Gxb4pdZr0+DlG+5Jwl8Aadln2qM8wysHLwQUjd7q258+4GYhlr8tIqVew+IgCPh6XdLYsa\ni2yoq+L4VRWobkH+MjA/6Jm0y7XQKUvRizAGG0e2zCKv8Ds3B/l+cBwFaij/l+A2u8HtHtEx\nr6VYxaU/L620yjTxefLL3PCbXYvOzJ3HmWzhKMHNIEqiqbLxuhHM1rKhkSBQqEDMNdZHGGkg\nDyrG8jNMJqSfcdAiRuEYkZXZjYc/rrQAHfOIJq2XAvTgHmIp7Z/uGeMW795Frwu+4Gy6rJxR\nSQVV/tVGytvfSHQtS+fUccTYrm+P8V1fd62fZiWvhLQFQ2BJ75iugtEYIWjQgDULrRZV/6A/\nm7FMJ63C6uquVaoeMk7DsQHUwchshMOpxMJAQAdSrKluHrKCxqhRPsm99WwNv6coavAsNeBl\nr5ZP9Mpek1EKKamukqPNUXZ45txBbmkm07QmL6xL/35HJ7A1D86DiWCauP20UCsKzdQJd1sF\n5VaxbE90uYZcSLQGvcBTWnV0INdcc1IyaXgN//zIYyuiGNHsLE03MSfrJAdu8NWac/8uXb4w\nUQKw0LVYWJiHCwlAVVxdJQ0CfIjDqRDCIFABetD3LaMR8/S1EWfsp/BMHsVrn2LQ0fYKSP9e\n3xHpwOnbhlOEF+vzEaDnAAb4c8f07kHPZ8/aVeJTHQDrT08F20AHazMGd6syceddCRZ2+2Wx\nJii4bo+iBjdvb/IBile53z1n+UqEXwryrlF2WPPujNP4c9Pki+HYZ8uadmwb+lmWdiOKogD5\nOZhDC5xK9rjZBtNrHlNmUv/2CD5pcJTn9ob7zFpY+Q7EuImOdTrDqMABSt4JpJe7GhQDt98B\n+DKPObTem0Hqmqz1zH6eayCc9mozinSwDZFXAHSgw0YK6qgKap5/LbeZRaFyZEU7p/a4sw7k\nsk2S6FjjmopzraCjl5l6OW1W+TIDoM9pajOnp1x+sK49UympOWYyeMy0ueFARbXHeVvQ+YVz\n86BAIFejNOsxBLz9tj48eR9Y9pPjecQQOnRn9h9iOTKm2ADuN1i/24fCGJkfe6WPOdKqNSO8\nNKVq+OhVz8q1+aK8+ZvLeaJkJDa+1Dqb7kmrSDkOGuqa5hn+tp6jKiOINcfrwD1Gqz7y+m5i\n6f//drmwG2AulvV/I/sZyzBs4jtX66WlFYoDU3vvyExUTAc6ePdtUMHhCDOSezB5h1yWAS6t\nQzGVW7A7QzUzWvkfXsOI7ruXwpjG5+q8h6mw9/eLhaiu26WYT+vLzxnNMo5+8VbuhcpUFbzN\n34B0wLnPE/kYYiMm8VlhB72eE/0KY7werPdpwndV49NIUzmKe3zgMvc+VnoUN6FqbmqJrecX\nk/mzqrwZO+xN7jpst5jE6/G0N2nhoDKpI/x01Ih3M4aS2bK3yDp/IljSlOC4nwm5H0iDsnNv\n3zoOxOWL1f7hL+2Al/nzXH0xEjPW83fKF7smUz7lrzyuBTyoIuTp81La/lM7kF8BOKg26MeC\nwu88zqCeiHNz2jrHM/3Au50m61c0FIO0OtmxoPPPrffhree7TDItTNIltapo8D8+TALhiX59\nbLp8XSa/cTwhBAg5aRVDlFF4979AQg8RObEUk5RlD+SFj0PDrFsA8kq/D+PAECoOBIyhQiBI\nlILmYKlc5gbQpkTXk265XamBYACPyeKwGH1Gr9cKt3solCvkdfsd7/6m2eDwvy9QTIGN0MAw\nTSprEUBs5yKnp2eiagPksiBhhCQzpCQT5XOlBSHhYKFkRqbgoLIKZydrYtJiAMgggCFXAYpp\nSScqWFgADKrnp9VIckfKymvLzyx6TU3QevAN/o6OgW4b7xt8yI+rrPza2hCR+o8AwD1ywnFx\n9majSuODpkNE3ySU5F8LVAgGLnjxwpSMGTRcveJBQZIsCgN+NBCSi0GRK1ecODGCwYhHKR0P\nECJwYNY7Hc6MeBmj5CW7PebOocmmLc4QOOF4zpGWiI2aaufSDRLETqWsRmJoPapVCR8rDvpA\nmBjhj4WnEqNKbe1KKsaMqWIbXpjkTqJESgYWXNQlpAjIKRNCbunYkmMQlCFT+npGDhpMQHsA\n1Tx0c6e2nT0Zc2tSE2ZQQeooG6WGFksPJEj6PuqB4Z4He5c+cdAUyh+ogKO4EiQFI5XYhWTL\n2ugc60KQXLt1geno/9H3FhteRCITfuOv4HF8fpIZWhNxt+jcGvN0I62wYcOV1QVVu0OeUnqU\n7N2zhGkfpxNZt2pdwVpgDBTyYYRYqJAVRYcQKRB4yxsjA2zpzyO6lOgFrysA+EFAKBySJbmX\nYopMuZm0iw7DBbyhrro8lotMu2sQIaS7oNpRCR40lomIPKjOQ++DFE7Y5KpPvHoNx7BSeU22\nVmaboRJaKBLCIt6G0KgYJu7Cy6+RlGikCAlsw+0vjbqYELsQD8MwG+q6yWnDDrkxSSjtQKTJ\nJsv6eBLFeMJr06nQLJkzKk6s8uQqPEnRs6vWYisNNoV+nC1QGAxaCADQGGigAQB1yQUIvv98\nEakLuUaCZCL+fGGpwislPHM7DLd8Q8Nt6GjrSzHHnIZCLdHpo0QwWMxhDbQwS0tKOTl4ET0Z\n88SKvRRaoyEFYvlZRZVkSVmA2QYWKJKBQ2d49r//MGIgUi7ucgJBSg+8wraVsHgEL047Haew\n59C57o1D3CVRgVK/lG5MVa+zUF1qtIx1HVsrMOMdARwY2IGnajAPxjzTQ0GrGnHUip8YWNGH\n2PVKYLZZRi2CNhdnm1200UcdhXSuSYVxklu7+DsLnuEiHGymfANhV01SMfRS1TrahcZVNN01\nk5Z3anVnYKILngiqDl7kdUaF/6lRz6tGsU+ssWhQlqCMNea40a7+GcX42ZBHfosbjUBaklK5\nRFqbB0aadPBlmKexRmZ1SkKs3jnmrW5nUHuG7qh2cCNmaIGPfmq00PBhWr0ZseLTYUBjvI+F\nBLTeercAtv56c0bHDsDIBoLz1skEn3kIHqWaSO4Ll9D0O8002b1pzC69Weybm8yQ+Zoy8x1x\nTTgJZwotggs2fuDEd2W88aYZhjwgGqdi2KvLNdZ8t5A7d3bRsDkWudoABYxyCQc9skJJ4lI6\nC0LSXZJJQn2bi32yd92Ql8NT8c5dOkNadZV3kAnYuNiQFKNJIHku2pVoEmYnp1HPRk3bxMUs\n573NOUBz2+uc90YGOow4ShxFAMDJgkH/qQIJpmSxgNPq/hINdsxvHYVog+xKsiX84eQN3EAA\nELpUr/7dy0KBCGD9rsEyWg0NAAND4NESmDg6MU+C0osc9Rr2jwo6S4NZ1OL1HgW+zIHOWkJY\ngAFGKAEkJAh9V9qCuG7lGRQBhjAoBNEZhhirEXEpXqYqSQNsp5PaXWd3Pxmiz0IkOBT1ATPG\nm0ACD7a8BqYHII7bR2qedzEsbs8BW9QigDInMjCCUBdkCoMArERC1o0nYKpjHbqqAbsQkcgm\nXIrDTSzCDQN4STG6Y9XfLoTIRmhmeCr6jpSa+MQFRgWKkKSiVQKiAoJgsgGZ1GTnsFckD3bx\nk9jEpvgo0ogT/qGMdZfKjFPgEc6YBHKQsPqZ/Q5Rkhpm44YKCJlOcqlLF0qGl2Yi41KCKUwU\nTYKRLhoNMh+pTElKLgUWnOZCw9hJD17zk50M4Sij0SQWqo8e81jEKrNDGPm5Kh01tB8etxEg\n2+mOX/l0lTt+oYNApDJOTVTaQHk1UILGyE7LzITlsKjQzWVQk57EHkSzCUZtdpGPTDnj2ozA\nSlOWTDzjcl8LzZHOnxWFZiMlAu3coBsiceiP2eCDuqzas8j0E4nDFKgCCVpTpVWleXfqyrMS\ncMmFYo5RDQ2fFyNa1A/ChTO+GQeCqMqRWZ1FETJR7Fids69XjYqktdRbDhHDHHyq7PQcI4RJ\nI9D6T6S5YnHlWdxbl1ZQuTrzWd5L7V2158lHea5rRNXmF7u4KEL8wAmOKMJmiLFYdP1mPFRq\nIfzm50qiGIU7Wp0XHXgDr7ACMn4whMxH6UbHdgjCXxVoCGiNOVrSFrRxCRBvXetqve0t6j/W\n9KsuuMZX95LNqGjoLfysG05Y9EezcGyVpwQ5MzWpk6Q/vJYt7xadQFLXspcF4HKw69kLNCS0\nNYhwd8FLmvcsgLwaa5ZPPVfN2VZTc67t6zYdei2LiAEZZ2xHFFj5A4zC4hnevOc5BpnS2BU4\nl7Vry4B9aM+yKjifMosAADs=\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\nR0lGODdhQAHIAKcAACQkJNsAAAAAALZJJP+SbbZtJLYAANuSSZJJANttSf+2bZIkAJIAAEkk\nAElJSbZtSZJJJG1JSduSbW0kAElJJLaSbZJtSZJtbdu2krYkAP+2kv/bbdtJJG1tSf9tSf/b\ntgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQAHIAEAI/gABCBxIsKDBgwgTKlzIsKHD\nhxAjSpxIsaLFixgzCgCw0WDHgh8zchRJsqTJkxYdoCSokmHLgS8hqpzZMCbCkANxrtzJs6dP\nmD8HIoAwFABRCBIpQIxQ0CZCm0wNOlWoM2jCBQiwah2AoMCABAXAik1wgGwCAmStqqU4NeLQ\n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\n0CK3jI33rIAAADs=\n\n--Where_No_Man_Has_Gone_Before\nContent-type: X-BE2; 12\nCOMMENT:  This is NOT a MIME-compliant content-type, but your software should be robust.\n\n\\begindata{text, 269602880}\n\\textdsversion{12}\n\\template{messages}\n\nWhere no man has gone before...  \n\nClick on the \"death star\" icon to start the animation:\n\n\\begindata{fad,270222644}\n$N icon12\n$C 30\n$T 30\n$L andy12\n$P 0,0,20000,256\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$A 29,24 -1,76\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$S 216,264\n\"Fire!\"\n$V 260,260 417,242\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 250,158\n$V 319,193 265,172\n$V 316,199 290,187\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 187,122\n$V 319,193 215,141\n$V 316,199 232,155\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 241,145 179,117\n$V 265,163 179,117\n$V 316,199 180,127\n$V 169,120 163,101\n$V 184,111 188,89\n$V 163,101 172,115\n$V 188,89 190,110\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 246,158 180,127\n$V 169,120 163,82\n$V 185,109 204,80\n$V 163,82 172,115\n$V 204,80 190,110\n$V 175,133 173,162\n$V 173,162 181,132\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 141,158\n$V 141,158 149,161\n$V 141,158 130,154\n$V 130,154 137,171\n$V 137,171 149,161\n$V 130,154 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 149,161\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 164,61\n$V 185,109 219,66\n$V 164,61 172,115\n$V 219,66 190,110\n$V 177,134 201,167\n$V 173,142 201,167\n$V 188,128 256,143\n$V 256,143 195,120\n$V 175,147 147,192\n$V 147,192 173,142\n$V 168,127 113,103\n$V 113,103 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 132,80\n$V 185,109 195,52\n$V 132,80 175,116\n$V 195,52 190,110\n$V 177,134 192,201\n$V 173,142 192,201\n$V 188,128 241,106\n$V 241,106 195,120\n$V 175,147 234,175\n$V 234,175 173,142\n$V 167,130 113,143\n$V 113,143 171,136\n$V 167,130 160,153\n$V 177,130 210,140\n$V 190,110 208,94\n$V 172,105 172,64\n$V 154,122 120,115\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 139,55\n$V 130,154 175,116\n$V 139,55 190,110\n$V 177,134 219,150\n$V 173,142 219,150\n$V 188,128 193,72\n$V 193,72 195,120\n$V 175,147 226,80\n$V 226,80 173,142\n$V 167,130 144,191\n$V 144,191 171,136\n$V 175,147 173,202\n$V 155,138 130,167\n$V 157,128 121,89\n$V 171,109 165,69\n$V 191,115 205,70\n$V 184,116 247,130\n$V 177,130 191,172\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 156,170\n$V 156,170 177,130\n$V 156,170 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 179,200\n$V 130,154 175,116\n$V 179,200 190,110\n$V 177,134 221,72\n$V 173,142 221,72\n$V 188,128 123,82\n$V 123,82 195,120\n$V 175,147 120,89\n$V 120,89 173,142\n$V 167,130 276,111\n$V 276,111 171,136\n$V 172,131 164,203\n$V 153,136 74,143\n$V 152,114 128,56\n$V 179,113 182,44\n$V 199,118 301,141\n$V 194,137 215,183\n$V 151,150 97,225\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 204,106 216,100\n$V 215,110 221,109\n$V 231,98 236,95\n$V 241,102 241,102\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 214,99 214,99\n$V 215,110 221,109\n$V 242,84 236,95\n$V 246,91 246,91\n$V 221,147 221,147\n$V 207,133 207,133\n$V 168,166 168,166\n$V 150,161 150,161\n$V 175,92 175,92\n$V 192,90 192,90\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 220,75 220,75\n$V 215,110 221,109\n$V 242,84 236,95\n$V 278,93 278,93\n$V 248,151 248,151\n$V 211,172 211,172\n$V 176,196 176,196\n$V 137,186 137,186\n$V 178,70 178,70\n$V 198,64 198,64\n$V 169,100 169,100\n$V 192,97 192,97\n$V 204,137 204,137\n$V 151,150 151,150\n$$\n\\enddata{fad,270222644}\n\\view{fadview,270222644,2,0,349}\n\n.... by Curt Galloway\n\\enddata{text,269602880}\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: application/atomicmail\n\n;\n;\n;\n;\n; This message contains a ATOMICMAIL program.  If you are reading\n; this now, that probably means that your mail reader does not know\n; how to handle ATOMICMAIL programs.\n; \n; If you were reading this with a mailer that had been extended to understand\n; the ATOMICMAIL language, this mail message would automatically interact\n; with you and take certain actions based on your responses.  However,\n; the language is designed in such a way that ATOMICMAIL programs can\n; NEVER do you serious harm.\n; \n; If your computer has a ATOMICMAIL interpreter but it has not been linked\n; into your mail system, you can run this program by piping the mail\n; through the ATOMICMAIL interpreter.  (In Berkeley mail, for example, you simply type\n; \"pipe <message number> atomicmail\".)  Otherwise, you can simply write the mail\n; out to a file and then type \"atomicmail that-file-name\".\n; \n; If your computer doesn't have any ATOMICMAIL software at all, you\n; should probably reply to the sender of this message to tell\n; him or her that you were unable to run this program.\n; \n\n(&checkversion 1 12)\n\n(defun init-ctrs ()\n  (progn\n  (setq newline \"\n\")\n  (setq summarizer \"mmsurveyor@thumper.bellcore.com\")\n  (setq global-survey-qid-ctr 0)\n  (setq global-nesting-level nil)\n  (setq this-level-ctr 0)\n  (setq total-questions 0))\n)\n\n(defun nextctr ()\n  (progn\n   (setq this-level-ctr (plus this-level-ctr 1))\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1))))\n\n(defun pushnesting (txt) \n  (progn\n   (setq global-nesting-level \n         (cons (list this-level-ctr txt) global-nesting-level))\n   (setq this-level-ctr 0)))\n\n(defun popnesting ()\n  (progn\n   (setq this-level-ctr (caar global-nesting-level))\n   (setq global-nesting-level (cdr global-nesting-level))))\n\n(defunq onelevel (i)\n  (strcat (int-to-str (car i)) (cadr i) \".\"))\n\n(defun apply (f l)\n  (magiceval (cons f l)))\n\n(defun getstring-oneline (prompt def)\n  (newlines-to-spaces (strip-newline (getstring prompt def))))\n\n(defun getstring-notrailers (prompt def)\n  (strip-newline (getstring prompt def)))\n\n(defun newlines-to-spaces (s)\n  (let* ((l (strdecompose newline s)))\n    (cond\n     ((null l) s)\n     (t (strcat (car l) \" \" (newlines-to-spaces (car (cdr (cdr l)))))))))\n\n(defun strip-newline (s)\n  (do*((len (strlen s) (- len 1)))\n      ((or (lessp len 1)\n           (not (equal newline (substring s (- len 1) 1))))\n       (substring s 0 len))))\n\n(defun cadr (lis) (car (cdr lis)))\n\n(defun cadar (lis) (car (cdr (car lis))))\n\n(defun caddr (lis) (car (cdr (cdr lis))))\n\n(defun cdddr (lis) (cdr (cdr (cdr lis))))\n\n(defun cadddr (lis) (car (cdr (cdr (cdr lis)))))\n\n(defun cddddr (lis) (cdr (cdr (cdr (cdr lis)))))\n\n(defun caar (lis) (car (car lis)))\n\n(defun cddr (lis) (cdr (cdr lis)))\n\n(defun caddar (lis) (car (cdr (cdr (car lis)))))\n\n(defun > (a b) (and (not (lessp a b)) (not (equal a b))))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun thislabel ()\n  (strcat\n   (cond\n    ((null global-nesting-level) \"\")\n    (t (apply (quote strcat) (mapcar (quote onelevel) (revlist global-nesting-level)))))\n   (int-to-str this-level-ctr)))\n\n(defun revlist (l) ; like common lisp REVERSE\n  (cond ((null l) nil)\n        (t (append (revlist (cdr l)) (list (car l))))))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" (of at most \"\n   (int-to-str total-questions)\n   \"): \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (car\n     (car\n      (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n    newline)))\n\n; USAGE:  \n;(SURVEY-BRANCH \"What is your favorite color?\" \n;               (quote (\n;                 (\"red\" \"red\" (branch-question-set \"red\"\n;                               (quote ((SURVEY-SHORT-ANSWER \"Why do you like red?\")))))\n;                 (\"green\" \"green\" (branch-question-set \"green\"\n;                                   (quote ((SURVEY-BOOLEAN-ANSWER \"Are you green with envy?\"))))))))\n\n(defun survey-branch (prompt choices)\n  (progn\n    (nextctr)\n    (strcat\n     (thislabel)\n     \" (\"\n     prompt\n     \"): \"\n     (let* ((ans\n             (select (cons (list \"\" (informative prompt) NIL NIL) \n                           (cons (list \"\" \"\" NIL NIL) choices)))))\n       (strcat\n        (caar ans)\n        newline\n        (cadar ans))))))\n\n(defun branch-question-set (branch set)\n  (progn\n   (pushnesting (strcat \"/\" branch))\n   (let* ((ans (ask-question-set set)))\n     (progn\n      (popnesting)\n      ans))))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (getstring (informative prompt) \"\")\n    newline)))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (int-to-str (getinteger (informative prompt)))\n    newline)))\n\n; USAGE:  (survey-boolean-answer \"Do you think I am sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (cond ((getboolean (informative prompt)) \"Yes\")\n          (T \"No\"))\n    newline)))\n\n(defunq surv-pkg2 (q)\n  (progn\n    (nextctr)\n    (list (strcat\t(thislabel)\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q)))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (cond\n        ((equal (cadar lis) t) \"Yes\")\n        ((equal (cadar lis) nil) \"No\")\n        (t (sexp-to-str (car (cdr (car lis))))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n(defun survey-complex-form (preface qlist)\n  (progn\n   (setq this-level-ctr (+ 1 this-level-ctr))\n   (pushnesting \"\")\n   (let* ((ans\n           (formatfillinlist\n            (fillindata\n             (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n                   (mapcar (quote surv-pkg2) qlist))))))\n     (progn \n      (popnesting)\n      ans))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval (car qlist))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((equal (quote survey-branch) (caar l))\n    (plus (branchcount (caddar l) 0)\n          (qcount (cdr l))))\n   ((equal (quote survey-complex-form) (car (car l)))\n    (plus (dcount (magiceval (car (cdr (cdr (car l))))))\n          (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun branchcount (l prevmax)\n  (cond \n   ((null l) prevmax)\n   (t (let* ((this (plus 1 (qcount (magiceval (caddr (caddar (magiceval l))))))))\n        (cond\n         ((> this prevmax) this)\n         (t prevmax))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to summarize subject id qlist)\n  (progn\n    (init-ctrs)\n    (setq total-questions (qcount qlist))\n    (sendmessage\n     (cond \n      (summarize (strcat \"\\\"\" to \"\\\" <\" summarizer \">\"))\n      (t to))\n     nil\n     subject\n     (strcat\n      (cond\n       (summarize (strcat id newline to newline))\n       (t \"\"))\n      (ask-question-set qlist))\n     NIL\n     0\n     T)))\n\n(defun maybe-displaytext (tx)\n  (cond\n   ((equal tx NIL) NIL)\n   ((equal tx \"\") NIL)\n   (T (displaytext tx))))\n\n; THIS IS THE END OF BOILERPLATE CODE FOR THE RECIPIENTS\n\n; user-generated part begins here\n\n(maybe-displaytext\n \"\")\n(handle-survey \"nsb@greenbush.bellcore.com\" T \"RSVP NOW!\" \"nsb.greenbush.bellcore.com.1991.8.17.15.18.4\" (quote((SURVEY-BRANCH\n   \"So, can you come to the party?\"\n   (QUOTE\n    ((\"Yes, I can come\"\n      \"Yes, I can come\"\n      (BRANCH-QUESTION-SET\n       \"Yes, I can come\"\n       (QUOTE\n        ((SURVEY-INTEGER-ANSWER\n          \"That's great!  How many of you do you think will be coming (including yourself)?\")\n         (SURVEY-SHORT-ANSWER\n          \"What kind of *vegetarian* food would you like to bring, if you have any idea?\")\n         )\n        )\n       )\n      )\n     (\"No, I can't come.\"\n      \"No, I can't come.\"\n      (BRANCH-QUESTION-SET\n       \"No, I can't come.\"\n       (QUOTE\n        ((SURVEY-MULTIPLE-CHOICE\n          \"Aw, that's too bad.  Why not?\"\n          (QUOTE\n           (\"I'm busy that day.\"\n            \"I hate Star Trek.\"\n            \"I hate you.\"\n            \"None of the above.\")\n           )\n          )\n         )\n        )\n       )\n      )\n     (\"I  really don't know.\"\n      \"I  really don't know.\"\n      (BRANCH-QUESTION-SET\n       \"I  really don't know.\"\n       (QUOTE\n        ((SURVEY-BOOLEAN-ANSWER\n          \"Well, please don't forget to RSVP when you decide, OK?\")\n         )\n        )\n       )\n      )\n     )\n    )\n   )\n  )\n  ))\n\n\n--Where_No_Man_Has_Gone_Before--\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAIguAAAAAQAAH0AAAAABAAAAAAAAAAD///////93////////////////////\n//////f/9/////////f39/f37+/37///9/fr6+vr5+/r5+Pn4+fv6+/r6+ff2dnT1dXZ29vd\n5+fj6+//9//v///3//dv/2dnXV1dXV1fXVtVVVNVTk5MTU5PTU5XWV1bXV9r//f3/+////f/\n6+///3dfa/93b/d3d/f/5+fr49nZ3d3X3+Pn/29n///3//////f/d2dZUVFPVVVZX1lXWVtX\nX11bW1trX2fv49/b19HO0dHNzMzLx8bGwcbDzc3R193X49nf59vn52/r48/T3c/d119jZ9t3\n79/nz99ZT1/jY29X/+tdRm//Z0lLT01PSkNGW0o9SkRrS05FV0A9Q0tVWUlK3/9fV87Zx8/N\n2bzd68zBwMv3y8Ldzvf3xsrPyd3HyV3VzF3NTtf3zN/jSt93Tmtf71XrZ11VS+s/b3dLTmfn\n91tG3U1N511na+NLym9v19PKwsvZ29P//2PZxs5f78RLQG//TdlTuc9O6//nd13KY1v/2VtC\nvUHNO8VKv0dbw0b/SM9T11NIzlvZWb/n1VvK1WNXuv9FvzlPvzrB2UHHXUvEQ/fZRtlPytXO\nRWf3P0pZUdvTd8Q9RslGSrg378Q+vb7b91/A1V3/1VvFUUTAW0W+3z+4TU7AzUPPU+93/9s/\nT8K7PEZHRd+4vm/AWUc80znrumvMSWf3vknGvufZtkO5/0fLwj27zz/Asz/C20DV/0FLxS+5\nRkLC20jPwz2//0e8x0LCd0jNzzvT6+vLQUPd1zjjuFc/uD85wU8868A3Y74927s/91ldSFfd\nSe9fb3fd1z/f39dI08pHd85AWb3jQcHTT8fOPcnCT0XDz0xj2dFfZ9/F199ryuNfZ0TP/0x3\nPFnr/0lH2/fR0c/I3//jwFfX1ePf0//Z0cbLa8fbvGdjyGtX3+fdd2Pva9ffTufjTu/nY1nn\n1Vdr3UvT31Pd/0ld12d391dn61tKb+NPTu9MROtPVUVrQ0lVS0g/b0JI71VbSvdR2U9Z4+/L\n22PRyG//3dXfyszM68/Rxu/r293rZ+PLa9tfSOvK12f/Wd3j787bW+9r7//f5/9R60/TydfT\nzNfd3crJ2evr387H22Pv2W9X79Vnb2NTZ1dnV91K9+v/513X92drY2d3//9r42P////jb09d\nUVdXWVtNTFVMQU5NS0ZRSE5KTUxZV1X373dv39vR1+vf09fP49vf29vvzuNZb2fv2ev3b2ff\n5/fR21dn293R63fn59fj619VZ29r487X293Lw9f3Y/dRWXfZ72PKxMPBv8bJxcTLb2d3X1Hr\nW1tZ39/d9+ffVWtrU01fY1VP2d/Z1d/v901VSU9XTUk1ODQ8NTxKPDE1QUdCU9/TV2PJ4+tX\nV04/StvRz8e3srCvra20uLm731dFPzQ5Oz05PUzjzMXDubq3ubrEyc7rTEdPTzxGS0pD4+9j\nP/fTyDVP97hLVf+30W/PrLPO17e4XffP9z9Cb/88SF3I/0zR1dk/T189MTY3LCcrLjIvOE9n\nY8m0rrOura2urq2zsbO2wcK/z993W008Oz04LzU5MjE7QD85VfdfUVPT311r0crj68vG0Xdn\n519RQkY8Pjw7ODxJPD9F/99398Syvd22q6y1sqywr6+vsbe1wbvCvdPNy7vJ0ci/v9vLzMXr\n21tTS0M8OTcxLC0xLSkqMi4rLTUyMDA5PTY3Pk0/Rkj/X3ffy8TBxL23vLy5t7u+v7y8vr2/\nv73AxL++vLy9vr2/vsO9wcfGxcfIy8jd53dVSkI+PDg3NDg1NjQ4ODw/Q0lPTl9n43fd2dXV\n08vV09/j/2tbT0dBRD06OT09PT9ARk1VZ+PZ68vGvr+7uri3tbKwra6tra2ur7O2tr7Fx9Pn\n509PTkVAPDw5NzUzOTc3NTg4OTw6PTw8O0I9Pz49Q0Q/P0NLQU5RRP9Xd1XHX87JzcS+vsC/\nuLu9trG0srGvr662rLuytLXLvsPZzyrGrT8zw18zY808X3dVLz9IKD13PjhJPTQ9RzI9SjU4\nPkQ3Rk4/RFFXY1P/93fd58TRv8zExMXBwe+9xb7Iw8nCvMzCucO5vMq7xNu/z+P3a2dFY0tj\nPd82QjpNOlVJQldDTznJP9tBwEjB53fO1TzfvFnVxV9Ny+NVvtFPu8pN379J/0PLTUX3PFN3\nQTzNNE85XUs/Z0k859M+X8lbS8zTScfOv8m1zc68vsC6yr24v/+wU1O00V27XbzVstHO2cw4\nwe/n17bP1/drWU5HPjs5LCxBMS01Pzw9Qk1Tzl9jw9VX/9dvQ1k+QFNKQd3M6+O6vMPHv8Vv\n2+vP913NWdfP38zVwre9uK6zr62vsre6vHfOPEdHIyY0LyMlRSovPm80QmtOP9HI69HFzffJ\nZ0r/RD45Tj5DSudb0dW8vsqusNdIb+M3L0vfQefBsK+wra2tra2tra2tra2yvNPMyF85RM8t\nOjM0Ki4qLyg9NSwmO1NfLTnN3TxB09P3TUxIW0Y4MkJANjU/59lryrLvvq2rb0+9zC84X29j\n17OvrKysrKysrKysrK23tbiyxGfCw9dDT0o1NDcuLio+KicvNzMtNFc3Ql9LPTxP4zk2UedH\nTVNdP0hnWTxB69dNTdPIw8XEub++w2NPV8fO68q0sravra2tra2tra2tra+vtb7Ly9VfPz81\nMjA1Ni4sLi8yMDQ4Nj5DO0JKV2dKTllNWV1OSUdOUVNbb+tnXVFPT0dMTkxZXV3/38jBwry5\nsrW1s7G0sbGyt7m5vMK/x8jJ09HT3dXV1ePd09Xj3+P/W1lRT0dFPzs2NzUyMDAzMjA0Nzg4\nOj4+P05VY/fT083Iwb/AwL2+vsHBw8PBwsDCx8PHy9HT0+f319nT08vLy8bCwL6+u7+/v7/I\nzc3T629bV1NKRz9KPkBDPkFHRklVT0xGRT8+PEA9OzhHMj03PTo0RjxGPltbd83nweu+wru8\nura5u8W7tLzFzLvj09PG/13n/+Ndd19jRUpdX1FO69PbycW3vr+4srq5urW/xsjC1W9nW0dD\nPkM5PT07OT09PERGRU1XSExZa01FY01JQkg8Nzk3OTQ8OkM96/d30726vLKtsrWsrrOzsb2+\nwcvbW/dDTUdJPU5BPj5VRU3/5+/ZxrvNvcW8x8rBx9nV3/dPTl9RSl1jb2P3b2dRTkg+Pzs3\nNDI0Mjw6Qj9bU3fj2cnIu8DFvbq6yL++xcXIx9fd2edv53fK11/v481n1cPO1dvTzvf351lX\nTWNVU1lbX1dX//9bb2POV2tv70lGR1E/UVNMQE9XZ1VfX2dj1+vT2c/PydO/77/Cv9l3X99f\n90pITkE6TVU9Rv/rUW+/uL65scS2trrBzsW4d/9vTmdIS0YvLy83LS8vNTtMTkNCyL3Hyb21\nsryztbSwtrXB08G6xb531edjb0w7RkJJOT9JSFtf50TNd07PUWc67706NddPTzxrTj8vb+dL\nKziw5zA70cHbxbG+w62070jdwDgsQf9DRO++ycC0yf/d/0UxNUs8OFPjwL6zrVWts2M6189E\nLt/ITreusa6trcbGutE9U0hIRUNdb8rjZ1fZZ0k5TVM4P904NcnfMD3FW0xOSE08QzI9UzYt\nW0gvOUbOPz/Kz0jrxc5OyLa857u1wdPAt8e8s7S2sK+5vrm3yuPM0U/Xs87Rua/A39XXPjg6\nMTM4NS87QjYvODYuKyoqKy4qKDhIOztvv93Au7eyvrnC18K6w7vItK23ta2trrvFrK5X77a4\nxWvBsb/Cys3C0UE+Nzk3Ki05Oz85StXfWU1ISzouKy0vLCoxPD9FXV3Prb43yrVPRWvfxufJ\nus6svbyssd+z0dtfPUM9St1bTbPEz6+7ubXKuszDz9nGz9XOyMXGb9fZ/9s7R2M/MDU1MD0z\nNUM+TElFY1NHRkZJRkdX/9fM68bGv8XLv8vIx8nHxMzOwcHJxsHGz8vO99/M33fT/2/fZ1Nb\nVVFKR0tDPUU4ODs4MzU7OTlCRUddXWvV2dHKx8K/wry8x768ysfCz9HV2+/v929VU1tIS1dN\nSFfvZ3fr/+/d71Vn/29VW93j3c7MysfJyM3O0Wt3b1lOTE5VU11Z/+f/d9nX593b19HTyc7J\nvcHKv8bO29V3VV1MUVtXV3dd79fvz87O0cbGy8PHzMrH39H3b2NHSEpAPDs8PDk5OTg4OTU3\nOjg7PD4+QUNGS0pVW2//49vNz9XO3f/V4//R3dXJxs2/wMjHs+PftrzHxMrFur3Rxr+9xMG8\ny8O5wcXGxcXGxcfdwLpT57lLLbRPLDxdNS42PTAtMjY5LjE7OTQ6SEFASN/3Z9PJzcnIxsbI\nxb/Hysi9w8y/v762tbm4ur7Bu8rKyNHbb+/dT09rP0VFOT9MMzpCPj5GQkZNY0BHZ0RHXURA\nWUtIT01BU1U9SGNFWU53V07b1ePGvr26ub+3u7y1vbi4vbvBwb/EwL/O68rTz8/jzdHMzt/r\n1f/n509ITk89OTo5OTg9Ozw/QkNHQU5VRj5MRkdXa1/nzdnPvtFj28jI7//FzP/Tu85MzLvE\nX8LDXcq+x1vBvM9DQEdL39HX08rA011DLy8wLCgqLTVVy7u6sa2xtcs+NDUvLTE3RuO0try2\ns7W1vcfMyclv58nJxLi4sMK+r7vbyt1n1+Nfd0dbTDlVSU1jZ8vN1cb/TONdPzg6VUXfzz0x\nSUpPXVtTR1dbOy4uKi42OURTxK6tr7G8x8zvTklPa8zAxc3vwbe8vcDIwr7A3V1PY93vS0/H\nv723ubnTX81HKSs0Ly9XRUHdt89LRFVOVU9RR1NNRExLU+fHwl2+v1X/zk5KTm9r2b61vLy5\n1WtbX+v3v73Dv87ZyL3Dxec4LC0817yvsMPRPzIxNDxBW/9ry7S0srfHY1NKOjpEPVnvY19I\nPzpERUtANjzZSlFvPDZjR0fL37/HX8HjXbG9vLPVssHTuMjfucnEtruvusjZPiwuLDhJY9HP\nU01XvLu7wFEpJCw0za+4vsLDuLXPNCMlMMSsq6u7d0E8QEpd99XJys9dUUk/TlVOU1s4PUpF\nR0xVUUxXd8Kzy81Xz05nrK+6u0tLsbu2rMBPPTIuPWdX2Vk5RV1vQTcyLS1N60RLPjA6P0rn\nyetZy7q4ra20w626xLm/vrmura2trb1fRT9N2c/P1f9XSUE5MzU4PlVvT1E/Ni8vNjtGRj80\nM0FGSltrQUtLTFdI5+fLwV/v28C1trCzwb6ztb28ur3BubW4srW9z2dfd9Pj28LBv7rH2WNH\n1cbbvcNMLCYpKDK4s7vCNiQiIis4Z9FrXUg1OTs4Pz9RUT1JOzxASGdv72NEQ9s8Wb68/7ay\n4721vMStrbG3rbi8r7W9sK+yu8DjWcC/xb6/72/Nw9Hv199OSj0/PUJOVf9nM0z/Q0/VTDs4\nQDYsL0lNY9X3Vzs8SDY1OT1Pb+9JNkhjb9drQzc5Sv/369X/X+PDvte+ts7Ps7rEvdXXta+t\ns7/I38m0t+NvT0/ny8bO38jLwbrL1+NNV29jV1tFPVH3Tj83Ly44RE7Xt7rTWzYvN1XCvbm0\nxcvXW05GQFFPSl1ZST86PD9LVUlBQVXj2+NnQUBO68DZY11f18rN4+fn3+fF02/Gvr7R/8zP\nw7y80cXCyb/HwcPAvc1n/3fnx9XT09fBa0ZBQv++uNFJW8hjPz02Lj1RWz8/a8VfOj0yKC4+\nMyY2yNNCR2/jY2/ra2/Nwr/f28O2tMTHvrCxrrfPtbW+u7O4yMy8vtnEvMTIxMdvR05VRklN\nSjo6PkEzMTs+Ny8vOzYrKiwuLTM2Ny86Sk89PUvRye//ysW/ubq+u7Ovr66xta6tra6wr62v\ntby9uLO3vb3By9Pb605fb2ddY1lKS1lfSUdKRU1IST1AOz4/OjYyNDo4Ojk7QEU6QEQ/S0g+\nQ0RJSkxVV09O511NW1dbb1vO2c3Ky7/Dwbq/wcDKwr2/vb62vcC2v7vFwry/vb3Rv8Xnv933\n2f/va/9vT2dZSltITl1CXT9ETD1DQD5OPUJNPkJBNk84QE09QVlLR3dIXXdny2v/y9VvxdXn\nwcrHxcbMvsbIt8nDu8XHw8zryt3d79/ZV8tbWWNTU29NX1dOb1v3Z13bX+Pn3e/O18fL2cXj\nb8jM/9PPXczVWd/vV2vnUVFXT0FTVUBPWUdNSEVCRD08PDk+PTo9Pzg6Pjs6Pz5ATk5ATFFN\nUWdba9vb3dHJx8K/vru3ubWzsbGurq2tra2vr66vr7Cvs7e4u72+w8jM1d3jd1tPS0ZBQT8/\nPj46NzU0NDIwMDAvLzEuLzEyNTQ4OTk7Pj1AP01TV2Nn99/f19HOy8TFxMfFxsDAwcC9v76+\nv7+/xMC7vLy+vr3DvsbFx8/TzdPd3dn3b2NvXWNTTlFIR0REQ0Q/QUNJS0pdWVtnb+/n///f\nd+/r39nn2+vv92dnXVFXWU9XV29dW2dnb+dr99nV29fZ2ePv/29vY//vb//Z793b0dHP1c/T\nzdPZ21Xd1SqtrDwjrqwvLa2sNDK4uEkx77rRMWe8VzDTuj4xybtGPN3PY0vn0d93z8jV583H\n62fV3VFMS8NdPMjdRtFNz+vrSdm060qxzWutUVWtwziurS6+rHdHsVM/tl9Eb7o+vLsxvb5I\nML3rQD9v7z5H0T8uP7czNEXXPjw5XVEtR10tR+9VPTXv9znZdzeuWzbOu293xe/ZvMHPvky/\nrbxF562t6zStr0i+rsbOta3vzbews+tJurTJyELOtF0409dE71tALU68NShCuzUqMuM9Lz0+\nLTZdQyksRWcyKS/X5ysv004ySt06Q8q2Vz7DrsFD3bmv3cy3t823ssNfwK22Z8W0r9v3vLdr\n0bvFW8i8vFd3urnZUb2832PN2Vdbzuc8Qs3jPDVG31kuQu9HOktXNTx3WT49T9NZNFVvTmdv\nVffO0+9vzsTL3dHCx8nNwL3GxbrFzr6/083HwMpva8lvV2NNTGNXPj5LV05CTmfvSz5Db0s4\nOktCOjg8Ozg+STc8X99ZR1fCx0nPssvZvLvA472vv/+/ucbrb9nDV+vFzcm8u7i6trK4yMHB\nz0s/Tk43O0I3RXdvW2/Kw8jd28/ja1s9OD09PTUuQD80OV9LTkv3yf9nytffy8bGxsu/vs7N\nwr/Dxu/f0dlrWdfJ71Nj9/9MR1VFNzxLRTE4TVc8P2/PUWPI0WPvxsf3Y7i51/e/usTVxL/H\nxbm7v7+/vMnOwcXj1d3r70xVZ01XUU1ZU0FPSzo8T0k2NUtvQzRATEk+TW9MRVtdTElPV9vP\n62v3u77ZybzFzsPDvri5t7S+xbi568e93UVPvtk6SsDrT0TMu01CyE4vNk8/MThjVTo9X9tA\nPURPNzRESTo/WWdHP0rXTkFFystMa8fXT83H11/Zsr7XurG5xLe1vt+8tr/BtLrVwbeyv9u6\ntttZxtlTQd13OD1jTTE3SkgtL0k4MThHPj0/21VI3brX/8fAxN3Xw0k4Tu9KSv+4u99OU2NK\nMy9LTUVd/1n/287d3b28zc7j/9tVP+fFw2fNu79vx7rAwsvFxMzjwc3vyL/C09vNzNPbXWfv\nQ0dCPD8/Q0ZRU+9VRGvv51VV9+9FS1dHSVX302NX9z01PEU8PkJZ51lDY1tKTd/b487d6+/N\nx77HvLi5vr++v7y9z8nEvMfByb7FzczL111KU2NDV9lKTOfvSE9NTv/nY01Z23dV3+fvxMhn\nZ0RG3WNHX1fja0RGV0k6S09XQz7JWz5T/0VJRj9ZSV3RX0pbb3dTSs9348HOY8O/vMVTy7bT\nv8PXvrvJ6/fZv8zn09W0tsbNus/GxmdVY+vvQkdvdzs2OTw3Nzs8Nz4/NjZTP0FnSmvnV9Pb\n0+tn28ZKW8fna+fPzk//wNfj/9m9vsrKub/Gu7q8vL23uOPIvsfj48bBzN/L1efMTErI1UhT\n710/PU1OQVlrTzs4PkQvPFFAPUJBQ0A0QFdB//9rRllv1VFNX9XM1c3Nwc7GxtXZysnv67y5\nyFfO393O009vy/9v5+vn3dNNSdPHTU/300o+Y29NZ8znVc7L61PR22fd49vJt8zj78G9yc25\nvdHIvs1rY89v486/10rn60xJ3e9JTk1MOzlAOjw2PFFbOD1AQk02Nj5CVWddV1lbZ2NP92/G\nzePGvbzK1cvK2efHyMXLw8rbyr/Nd+/nyHd323fT2993/3fb1UxZb9tPT1vT3Vdrb1dT9+dr\nX2vTTVPT90ZJR0VTR1NMX9fvV1VZSUpvd1//z8PXTOvN79vN0cLA6+//Y29na2vLxMfV09v/\nd/fPzMnV0ePr319KV93P91vb7/dnTGNjd+/f58rG119T705dV0lN30o9SllMRk5ORT1n60Vd\n9106S19bSVvV09PT23fPx8rC3c3Ly9fJb+u/29vHxs7My/9Nb9dfa2fd18rZ/2tv3XfXX2/Z\nTmfnV1ffV/dvS1lVT05ARW9NZ29NzNlOSlFd301HW1lb/8//WdnVa1tr92d3/99j/8jfb99d\n/83P38/Z093/0ef319Pfy8Z368/nWUdNd2f/6+dda/f/909Pd9/ja+Pn19POb+ffa+tXX3ff\na//X61Fjd2tXSktbWU53d1VZ987b49X3/83Za3fVwb7vZ+fd591ja+Pn629dP11dT0n3d0pO\nZ2tKb813W+trb9Pf/+Pd12/j31frzNX/z9HbY13r4/dTWfdvTm9ZSFld2/dbXXdbUWdd/1XL\nxltX1+9v79fH0d/O/9ffb9X/SnfdXev/28//6+fn2+/rz29f1c13/+9r39Hv2eP/42fnWVNZ\nY2NZW1vr1d3/b99nWf9d99HLysXK1efV31Xj12tX2d3/Z2dXSE5ZTE1FR1FXTU9HTElTY0hG\nUe9bWU5dd193/9nf19Hnb/fv99HZ79PV2dXXb+/j58nL08rV18PH08rG173JzsnO28vCxcvZ\nztfvT2df7+tMSEJHW1NLSUxZVU9JRUtVTU5RX2P/VUdf31tf71tbb29VWVFMd1FKS11bSEtZ\nX1djU1Pn/1tr52f309n30e/v0dfryc/VzsnH093P2dnMy87OysHHwb7Cvb6/ysTGzMvd59/d\n3dn/X91fa1tVU1dvZ3ddT1dRT0JAP0tPRj9ETVdOTUpISltTSEVET1dbU19XSl9ZSkhFTUlb\nWVn36+fTze/XxM7b18rIwr/GwcK/vrvEz8nNy2//W1VjV19ja1tTW1Nfa+//b/f3//9vb19V\nY9vf3//v59nj49Xf28/P4+vX3d/fa/f359nj/1tjX1tbUVf349nr19fV19X///9db2tXVU9H\nP0E+RUVKS0lMUU5dTEj3d3fr3etrW2/nXVdd29nja+/n5+vn38932dPXzs7N287f1dvPyNHM\n09Xr92dj4+fv4/d39193XVtdX2/f/19v5+drZ/9v599j9+f/z8zOx8rDycvOx8nLyMnHytPr\n5+tnVV9jWVNZW09KQT9FRzw+Pj5ERUpOTVlLUV9JQ0pNSUlLTVVbTlln//93Y19ZY+ddZ+/b\ny9XV08rH19/b59XKyMLEzsXKy8jNzNfn193R5+vRy8fEw8TDwcbDxNHj393Vzszb/29ZV2Nd\nUVlNVU9TVU1NSUtKSkVIRkRHR1dbXVVOR0tfSUhNPkJRU01NU19rd/fv/1dv3dfOyMjLy8vf\n293j59XR09vf2d3Z083OyM3PxM3My87Jzs7Nz9nf9+/j0etja2NjZ11ZUVdJT0pVU0pOSERD\nP0NHSUZCSUpNSUZLS1drZ+vn783MzdPPzszN0dPJ0+fO3W/r09fV3+fPyM7b2/fV1dVv19PP\nzutZV2d3Z2tra2drV1tfW1lTUWNv39ndTln3W1lXSVFjY93Z7//FyM7n9+/V52N3a+vRzMvf\n29XV1eN32dXP2dP349/j43dTXV9bQ05GQ0tMV09RT11bR0JMTkxbT05MW/fb2/dv5+fO29/d\nzM3PzM/R1+dj39Hj1+dbV3dfWVVn69/r52ddT13X0+Nn59vZztXrX9vR291v3+9v09Hfa1/v\n42dV2ePfY/9ZW+PR0+tb3dfn499jV+vvb3dnd+N3b9fZ71VET09da1lOUUtXT0xNSFtbX1lb\nY2f/X//NwcjMz2/fybzI0dXPz8rjVV1r485PR0tVXVtJRU9jZ+t3W+/n411jb+vZ1+NrZ9vO\n011MTmfr2c/Tzcvb32/j3+fV0cnFzdlv41dX91tKWWv/409JU1t33+tNT0RGUVtX/+tKSERH\nSVtRWV9La89fU8/H1dvX39/rxLm958C6v7W90f/RwsLfW9nNydH352/DzF1nSlXTa0JNSERH\nPjw2O/9XSDtO29NTPEFHV93/V0Nb91NbS0JRXcfCy8Xn38rv577N09fPzc7LZ93Rx8HKvb7L\n39nn18bK/+dvd9/N3VdRWUhDUTs4d0xNu1syMjBVzlVJWd/GwNk/MjxOwbxMS0/T07rHb7C/\n69lVPtGuvciwwk6+9z5ESOPIXzRRvv9vSzw+47+/zltFx81bw9lJT79RMT9fRmtTU9VZMdfb\nPES5az/F51m7vM7byOvGvVXjv2fXzTj32UfdTUU/Rt9DOV09Y+NMvj882///Oj3HVdfZS01b\nwbnjd8RbvbzB00mssuuvT0+us7/bQsy7vF3bz0xNtmMxyL430esy68frWWc9PlVTMVfKK10/\nMEhrNjLvNTjLSzV3wDdXzWdjwlvGMa1bvuM/vt/IzetXvs3HwkC32V3V1z9X177LyddMd99j\nylNrPMnd7/9rZ1XIxUlrY7tbv+c8tcvPY9nJT8a8PUi5U8q9XW//zuPHPkxTvEo4uTk40U9N\nP0Q7W7cyM2ddSf9vMzm6z0tOQC21sDxjyUjHusw8Ubi3ur03Nq3DUUhO3bC6ySVA9+vF5z7J\nvkz/zT5fW7xVRMNIPcxrOsDE3UxZRk9VV0pb10hKZ2vXQ1PIyLi8PFu3x3exzFe7xL7GycFT\ny7Tdzbo3QKzNML3MMj9KZ76vvzNn5yMnQC48trzfvr5NTOf/yr5EO85fz77BXVu0zVFLJz6v\n3y7T22vKti8luq1ET7Ur1a33Kz63rTw+RStLvNs3R99fd71FObGuW7/rMretvD08vbdd6+/P\nr8ROYzpOYz5RvrisrLO5999fNEzvRMEyR7g7X73bLy1A2yN3rc05P7W2NyoyNrOuv8vZtbLN\nOzg+b9dvPjr/tb/rZ8XKyb7GRU7Nxzorx8ZRQVlCOkjJ4ztX389rSC5RtLfDvb69xOfOx8zF\nLjzDubtjTz4qLT9VPV2urbmvu1Pjz++8dz7f0b671W/Mw7rZNzc0NDs3Ki1HZ99jPEVdTEdd\nRl29s73PTV24trrHx7y0sdfVV1PL2UosOuPJzkQrO7RXOTZLuqyuua+4tbfDyLzZ98XNyMvI\n41tBOjkzNC4zMCstMjg3OT5DSkI6ODhHwL7C51drzdPIvsW0wri7wLq8zv9fSbq/07ndUXdj\nWbO3y7W6ta+str7BXdfXX+fd2//VO09fSVc9LS82Li0uKzA2LiosLzc+S1XrzevAy8e7ybe3\nu766trOxw8PN49nVWV9rUe9ORknf3VfPV0/Pyc+2ub6zwbm/v8e7vtfZUVNHTU8zRTo1Pj47\nN0A1MSswOjQxLjE4QVVn3by2rqysrKysrKysrKyur6++xc/jTF08MTEpKiktLygsMi89P1c/\n19HIvbyxs7mvvb/Husu/zedfUV9ITUVOQkk+Qz85Pj41RUVGREM/TWPdwb+2rq6tra2tra2t\nrbKyu73DyF9PQTg5LCwrLCwtKiowLTQ7PkZbW9nFu7itra2trbK0sbjBzP9JPT43Oj0/PDY+\nOUBDRUA6PTQ5NTE+PDw+QUlvwrmtq6ysraysrKysrKyytriysrS/70w/ODYuLSwnJCQmLDE2\nQEDdXfe/uq+trrevsLOvuLC7w8/dTz5CNTIuKiYnKCkrKiovMTM9U2PLxcG6uK6tra2tubm0\nuLOwtLa4vbq3uLW2ur7Fvbe5wru+w8xbY1P3V000MCwrKikoIyMjIyQrMD1NTmfZxLWurK2s\nubm5uLOzv8PO1ePN29PvVzkxLi8xMjIuMjU9Rv/bxry2raysrK2tra2trrG2ur7R51tFPjkv\nKCkpKCYnKycqLTY+TN3r07uvuLKtrq2tsLCurbG0ucHDd01KQDYyLiwzLi81NzU6P0JPU0pR\nV11d493PxsfGybyxtrq/w8PHzMzO39fEa7+0v1nn1cnNwL3AxcO9td9vd9fPXU9C3W9DNDA0\nKyMjKDI3OFHFwrm7sa++y8a/tr7CvLKusK+ytsfbTDstIyIiIiIiIycvOm/Py9vDtq2trq+t\nra+xubu/tri5zOvN50Y7KigvLCwxODpE58Wxuresq7K8u864xN22s7y3vc+1vPdJPC8sKCQu\nPjA6TkVCQ0rrTTMvLjsvOUtnzri1sbbAvLHC513fwN3/ydfBvrq3xru2v7u6tcHfX1dVWUJL\nRTZAY/80MkdINS4jKCowLCpCZ7vBrbaurbS3t77rw8O7vrmzra+ttb66ylc9LiojKSclKy0q\nNkb/vK+sq6usrK6wwN/J70VRQe/r/1NrTGc3OSszNikkJC42PTlRwK6svq+svqyuvsy/u7TI\n0bTfu8JJTFFLYzguOCwzOCg6SDJAP0bb693FyK24u768s7PE0d3Xz/fFuLjVtLnHrbi/urS6\n28/Ryf/rTEvCzDk3LzM7KSMvYyszSSw/40Qv98pbUTf3WdPKTcKzu7OyvbW9x7/nzUdKPuc4\nMWPrX1m9ucF3wj9M3SlBOydFxVPjZ7z/xq3VvaznS61DzUGxRi6tuzS5X8RZ374o3UEryy8z\nxlPARdnFStG0M7XLO8JfQLjvX7o/z7stu0g1vzs33zRBWyu9NbhHT641rkwvrkd3tC6xwePf\nsz9vrCesKzmsM7yxNqw2Ub++PMvKNawurj/FSLY0tOc51U02v0I81TXJQ+suvi7B0zPbYy++\nTz+tONW9QNe6Mm+xL61nN60sb602tK4+tWdBrS+/xi3MySyuNmc/QD3jN7Uqryxf4zW9TTuv\nLcrBP607xa4yrev/rz66zkfj2z/EyU3Ru8rT68zKRMPOSc///z/rW0xKOcs6W+s7V9NOZ8Y2\na9E9b0VPV13JyUy/U/fTxsi5PK09u8PJua1dsNXKvOfCPve/Mbc7/1n3Sdk21180xTczvyxn\n1yq/My/ZMdVKM8MyN78tV1szxDJbuS2/VT3dw8ay77TLxa7Hxq13rcC9sLdbrT+t2V2yY7yy\n/7xfw9vjPMRZRVHF00PEd1HNS85bTevMOLg4Sc8w9zA6UzlENk88QEkzUz9nNMlH389K20bH\nd120R8K7NbfTP67nVbQvTrQvsUDXV7FAtV/PvNVHsDbLy0nFPMRVY9tHxTg/vy3KPD/rxDa2\nMN9ZZ0S4QblGu9fKXVvTSdvj1T65RuPGb0u6OrxPd3fnX/dV5022W9W9QbRPxWOvQLrAwL7O\ny8i8PL1LtEPXV7k7xDjCO3fO4zq+PlnRREPXO88vQ0jrNmc9Y009RUkvuTRHdzpLPMY5TVnN\nVT21U9XXyGu34768xneyXcLIv0a6P7nV18JXukTvtj/MS89BuFtLv1PZW9tR091CyldDvj3B\nO9XPS9vKOsc7xz1jzTjTUePdVc8/skG7Mt3vb9k/uzq0U9/FQ9tB2c80uzu3OrtLzO/XVdlL\nPMVE107HSl9r3WM9W2dJyzGwLr7ZRtF360++SuPf40PjX0rD3z26QcNIvz+9Qe+7O8LvVbk0\ntfddyNndb0C9VbtVxW/TX09TVUhJ70VXY009a1lH/0rTTfe/yPfD47tnxb+/z7fA2bLTXbVX\nu0m/ScDOY9XOV1fNPms+azTPPTpfOT9FMFs9zzdJQu8+90VfWfc32TjRWW9vV9dv/2u/TblN\nyEK+90K6PLhNxM5DuetVvefbTLjvw+O7zve6v0fDVchOtD+/013CM68wska9T8+/QM5HSc1R\n711GzULKNboqzjvjTi+5Mt1vX0FK40ZX68pfXbtE28fKTsfdZ1XLVePN0zvX91M6wkxOPbg5\nRMI/zWO9SrnDxNXvvlG02f+tWbhPvd/fs0i80bpGw79Iv0vXQE9nMMs8QDZbPUlGMV9ESjnr\nTUVKWzz/70dv28NMzNtFvl/Z49fFXchvWefRa1XFVdlXulXTvc/Rzs3jwc7RyMzIwcTNv8jd\nyMm/19Pf6+dnS2/nTGtPQFlFRz9DPjg6PjxCQEJJSmNM30Z3a2dM7+ffR9/X21m81dPLz83I\nvVnTxM9O3cpTxV9nUbxvU9PvSXdVX0bfR+vZZ8M/vVPNTb8+698+/1e/POvJ28PEuc23612+\nSGM2TD1L9zPFycK/w6zjrLGu17RBz0dVIy0vLykzMDk/Sjc9Zz48Ok1OZ87NraysrKysrK2t\nusNROSYnIiIiIiMpLjVGu6+srK2tra2tr8PXXz0xMS8/SUbfv763vK/Gv8ZGL1NELytBOE9V\n38mxr7q6rb3Bzrj/t8bHtbOzu7CzvMDXT0Y0JiIkIyMjIyMjJis5WcK9rKusrKyssrK0wsnn\n38bbwevEuN9nusrXwkdTzM45Pci+Qbq7tbi1zsW541lO10ZL5+vDvLq9t7W+y9tRNCwnIyIi\nIiIiIiMkKzRLa7Szra2tra2tra+zvv9n31tRTVv/d//n12PXxc/Da8zLv9X31b/G18zByb7K\nxMK/w7/Gv8TGzt/O0Wd33VVrSk0/PTsxLSwqKCkpLCosLzEyPVXXyLazr6ysrayusrjBz85T\nQz44OTc2NzdHRFNd3f/PvcTn08C9vcG0r7Cysbi0ubnI519ZOjo1OzxHTVn/b13vRU9FPS8u\nLy4rMDA5QFdb/768tbezrbKvs7Kzt7m8v83Pzd3//1lIR0M/NDIyNCwvMTYzNz1GWU9j1b66\nvbGzrrK1tbq9vdfnY2tOSUlBRklBREFOPEg/TEJMTEljd9XPvbm3t6+1trW5u7zBxsLD1b/J\nvsvH5/fnT0lJOjcvKykoJyUnKCsrLzc7OUz3/09v0cnPu7q2trW2tLy1ub3Cw87N/+tv6+vd\n59HjysLOyb61ysvAv+/3zMzZx8nHwcnFys7Bwcy9x7/J09Nra04+Pzo1NC8uLSkoKSYjJywp\nKTA6OjZT2dV3u7extqysrK6tsbnFvshvZ+/rX+vIzMzEwcTOwc3IzHfdvtXv1c/KZ9e/07+5\nu8DEzNNXV11fS1dn51lTXV88PjwwLSwuKSgpKyskLio0NUZV983Nx825tba8sqystK2vrLO4\nxcPO90xIUUJFV0hn39HTzsXCzdnEU9W/3+drzOtP08DAt7Kys7y9u9l36+vfT2fC0V9r3Ugz\nOTwuKjAsJigtKiMsNjA9StPvW8+7xc3Auq+/r66vsrnAxW9RQzo2OTg9PUNZ5+fKyMHF09vj\nTT7V31E+U+tPZ8m7t66sraysrLm3r661sK2tsK6vvc3TVzcvNSwlIickIyMqKC47REJLY8xT\n0e/AxcPBtbi1wr/dXz88NDQuNDA2OEZVU9HNxtXRzv9R281JQf/XXee3uryysbm6sba2sq2u\nrq2tra2vsLzLZ04/NDEvKSYmKCIrLjgqPEFLPVnO3dO/urO9s7u9ys1jRj0/PDg9P0FDTExj\nTvdTTU1DRztPPktMUd3jy8W6s720uru4urK0rrGtra2tra2vtL3L3Vs+OzsvLyouKjcsPjlE\nPktbRkbv3dvjtLm8ubG7xtv/QDswMi8tLjQ1NkBFTD9LPjw5OzkzO0s/R9fIxL+usrGurbKx\nsK+xrK2srKysrKyzt7jMSm9INi80KyosLywwP0M+S9dVR2/v/9fGvLq0tLW7vtPbTUU7PDM1\nNDU0PTpGPkxISz0+PT41QUdFRc3XyL2vt7Wvr7aysra4sLWztK61r7m3zM9OSDUwLiwrKist\nLjA3QUBXTtXI0d/Fv8m/t6+zrayttLa82U9JPjMxNTQ3NUU/TUxXR05EPTs7MzpERUlf08zN\nubnAvLS5xrO3u7qvr7GzsbG4wr7NWzU1NTUmJzA1KzI7Ty493/9BRr3rd8qusruura28uLTM\nT013RDNEU0g/V91TR0dXOTI5MzAyPjZB3eNNb7rZzbq3vMO2vMW8uLq2rbK1ubG6x9FZSjIz\nLDE0LDQ5PDJNRVNOwsDvu7u4xrKsxrfIrMPGtrvDyV9bMzQtMCktLTgwOU/nX8zrzkxXQ0M/\nPTpJREjKtnf3v7nv17Szvr21usK7uMC1rbTIuL7Rd01JMi4tKjEqKj0yOT0u32NB48S+wL+t\nu8awr7fKvLPHY73B3V9r7zw2QDgzMTc/PEDr38/DwdVj3e88QUlAPDw0VbxrW86vvdG/rF+u\nvbivwa25ra25vMDrxkItyy8pVzw0KS9HNyZEPC8yukPGz7evSrmw289Zvchb27lnudPrdzVJ\nNSs0NzJBT/fP57i93dtXRzg3OTw1S19T666sw7Wsrry4tb63srG1rKyysLG2y1dPSDsuLC4w\nKy8+LSg2NzUuOltBRsHT67muu8HBs8LOws7Nyr6+yL6+y29VSjs8PDk8REZn3dvX4+drUUU+\nOTo6Oz1BQUlj19PbwcS/tra4tK+ur7Czub6/yf9nW0A+PjgwMS8uKy8rLTE2Nj5DT+PT08e9\nvb6/vL68tbW0r6+wr661ubi8ydHP3+/bb1tbWU9KTUxDRkhKSEpNS0pNRkFMSkVJTkpJW2/3\n48rHxMDGycbIztfXd1tXSz06OjIuLy8sLi4vLzY7P07v18S7srGwra2tra2tra6ur7O4ur/L\n1e9LQkE7NDI0NTQ4OjtBTFdXX/9fX19KVVFCQ0lGRGPd2cm8uLu1sri4tbm+v73Izc7VW1VR\nPTo8OzM1MzIuMTU0QUh30cS7s7Cvrq2vsK6vtrW1vsfGz+dnX0w/OjYtKyooKSkpLC41O0BT\nZ9fOy77Fvbm9x8fK39fRz9PGv8XFwcvKxcPTycjJzsvK693bZ01ZV0VAQjsvNDMuMT47SVnv\n1cy8urWzsa6ura2vtbW3u73Cw9vvXUM5NC8uLC8tLjQ8PUJVY93PzcjRvsLR0+9jTF9bTevR\ny9HJy9nLzcvZzcrTycvR5+NvT0pIPz86NjAvLi0sLS41PUhP78e8uLSvr62tra2tra2tr7O3\nvsHLY089NjMsLCwsLS4zOD1ESuv/09PFytPN79lH72/32dXFu7+8vrvCv8a8wMHCvcvV09tP\nU3c/PEA6MisuKyorLTE4UVXvzbi8tq+trKysrKysrq+0t7zI4/dbPjUzLysuLi0tODc6Ql1X\nWePJz9vT71lrb0gwxb1B2f//tcHbu8+6tcGxvLmvvcnTz8vZZ1E3Pz0uJyQkJi8xKzJHY2/B\nzbWtrKysrKurq6ysurO6xGdTPTg9NzEwNTU4Oz00N0BAN2dZRT1KTVPvxtHKtrb/99Vn9+/3\n27Gur62urLC4v9VHyT8vPDxILygpJC9CRiw0U0H/TDhfra2urbmtra2tt7TBx8VnNTpLX1tV\nPUJrz0hCPjdDQDzn/0dLY2fd583BvrrfPT1BY+/398ivsK+1trm8tu/v3/dbPkFGPCsvKzXV\nPztVN0BOMUqytcG0t7y1r6y8y7z/b2tdQkdf109FY0pnTzM4Nzg6TlVdQ0FE/7/Bxbm6zutv\nb+fXtrjIuK+tsrq9vt9fZ0pJW0Y5Ni87My9nOiw9Y1M7PsO7wsm9v761rq26ur9rP0pZT1VV\n42/bzspdS0E1ODg6OkZRTEpMZ2fPvrvAy2tb68nDu7Ozs7Ctra6yurzKXV1bVUAxLiooLi8t\nMS8wMjM7R0tv0cvCvLi0uLe4wsXI0efTd11NSUdDRUFDU1/3TmPr3ePX029vWd/f0dPT92Nr\nXdnPzs7L1dPGwbq4tLW1t7a3ubrB1WNKPUJANzUrLSwrKisyNzs3O03/zMC1s7a3tLS0tbq8\nxtNjV1NOSEY8Ojo6RE1PUVlnWUhGTVtjX1dOV1Pfzce/vbu3t7azr62ws7i7vb7IzutfQDky\nLS4uKS4tKTAwNEhFY9nGvLyzra2tra2ur7G5usrbV0U8NC8vLi8tLS8vMzg6R0tT/2dv2+PV\nysfOxcfNwr++urq5t7a1sK+urrC0try9v9XZX0Y9ODAtLCoqKissMDI5Rknr1cC7tLK0r6+x\nsbK8vsLZY19HOzoyLy4tLi4xMTc5P0pba9fIw8PHys3Nys7JyNnTysvNv8PBuru6t7a1srS2\nub2/xMnVa2NLPTg0MTAtLi0uLzI3PUROW9nKvrm1sbK1srS4urrI28NIQD4+NTczMTEwMjM7\nPkVPXe/ZzMS/ur3CvcHMx8bXzcnT1dPV29PGxcXFx8PEv8TBwMPHzdfrX01JPjg3MTAuLi0u\nLi8vMzk9Q0xd287Evbm7ubi6urq6vb7D1ed3V0hKR0dJR0ZMV13n1czCv7u5t7e5u7y9w8fX\n2/djSktJSz/3JNW4TEkqTLO8/+fPysnRzN/f61lLPD5NPDw/PDs1Ozo4Mjk+RUhd3c/Hv7y4\ntLCsrLG+yce7u7nD11NJQD9IRUE/PTY3SVnZ3dnbycm/wsPPW1dXUUxBOz1AR2fHv7/Bwb++\nvr7GyWtn52ddT0VDSllbR0Q8Oz5AP0JFVWtNW+vEvby7urq4usPJyMrVSz06Sd3Kz+d3a/9j\nW1VJQDs8RlN35+//08vAv8jTXUs9S1tPPjk5R9W7s7G0uLe4ur7OX1lOVV9bU1djZ1lbWU9H\nRD4+PT1BPT1IW1lVXdPHuri1usn/18jH1Ug8Ru/Dwszr/9/n52dORTo0Nz9TX2Nba82+vL/O\n519FQFNnSzsvTN+6s66vrq2srrjCzdv/VUxPRkVZX0w/QkpTTUk9NThATUs6PVN3y9fTxrq3\nub3Fz9/r0eNLPUld99nIy9vf2e9ZR0Q+ODQ1OkRRX2/Rx8HDxdHfYz9HX1s9OD13wrm0srCt\nra28yMrM3VVHQ0ZKT05APD1LS09IPDdMWUE2O03RzGNZY8+1srrLyMDD5/fJx+9V793NycfH\n09vb31lERj88Oj9DSk1b59fn2dlr/1tITW9HP0hfz7y2sLC0sq+3vr6/wc/Z419XW11AODg7\nPDw8OjM0PTw3OkRGR09n59HAt7vAwsHAu8XZ2d3VzMfFwMLMzs/nWVdJQT8+PDs9P1FZXWvb\n729nX1lKPUffY0dHXdvOxrq3vbmvr7e4uLzAx8/Z729j71NJSFVMQT1BPTo5PDo8PT9RWVVO\n58/T0czN3fdf0cxfU+Pn4+PT193359/3T09RSz8/REZHVWvr79HJxcjNysbN0cvV08TKzdfL\nx8rIv76+wL++v8LHzdHd2ddvV0lLR0I/NzY0MzQ1NDY6P0VLUVtfd+/d19PTz8rExsXFw8O/\nxMnHy87Tztff619PTEdKTUxKS05VVVVPVVVZU11rX2/33dnP68rRyMnOz9PX083Jz83T19nO\n0dvj929nX2NXUU9LT0xMTUtPUVNPT09NUUlKTUtTT2dd/9nOycvGwb68vL2/wMTByMzR23dn\nTkVJRT8/QEA+PkFAQEdLV2v/1czFxb/Cv7/Ew8PFx8TIztXX19vd9+//7293X11nZ2tnW1VV\nT0hFRUlDPz8/P0E+PkA/P0ZKV2dv4+vR0c7PzcjBwcC+vr29v77AvsbNztvjd11dT09HTEhM\nSEZJTU1LTlFVVWfd19HPzcTCv76+wcTEy8zOzOvf42fjX2NTV1VVT09NTUpMRkxGSE1JT1FV\nUVFPVVdOTkpMTUxLTlFbXW9rd3fn59vT0c/RycXBwcHBv77BxcHBx8jOyNHV29vd/29ZVUpK\nR0VDREhHS05TXW/n09HOysbIxcjJy8/Tz9XT/2f/V2NXTldXS1dPT05NT01IR0dGRkdLQ0ZD\nQ0dJS09bXWN379fPzcbIxcbCv8PCw7+/wcDEwsHIyszP0fdvZ3dfS01KSkVKSERCRkZGSk5T\nTlNNT1ldb/fbzszIzMjIxMjFw8fIy83Z2eNjUU9TTU5MSUpHSElCSkpHV2d3d+/n6+fj5+/j\n/+//d//j39fb0cvNz8rJx8LCxMfGxcnGys/Ozd3f4+NjWV1RR0dGRj9EPjw+Pzw5PDs8P0RG\nTFddU193///n39nRz87OxsfGysfM19nduTQ9rL0lPqw6P63OQcJrRcTnOee6PWe16z+6ukhr\nuchK3cpn99VZV9vZV3fD91nKyu/Iz3fX1Wfn13dv0+dX1cxF38dnQWtVPkZXPj9dRzxFRzxM\nSTk8Q0o9P1tHTs/r78TBwLvCwLi+xsbC32e/yk3CxUe9vUfd1d/b38rTb9m/RVtbxU41Qm9N\nNUs4a2M72URGvtdRyNXPvlvfxNf3zuvLzcvN/87I29lb3evbVUpX701GS0dTU0RAQ05PRUxb\na+/X0dXOxr3X473BTcNO28TvRs7GTsHbyL+7utnCv9nVWWdBP04wNTQ+LTo7PNs230fjW1Xv\nQWdNz01ZzE7E68G+wrzFvb2/zdPA58nJ113n1UVTRjs7Pjo3PDtFSkpX3cO+xLm5uLS5xbq7\n//9Za+PZzNW+sr68tse7w7/Fd29PU0M6QUZVMURNPDE2TjswRDs9QVM+Ud1TXc7Za8HF09vH\nz87O92/j/9NDX09d/0FnPVk/PEY7TjrvXc69z7rByLa51f/PW1/fTU5d67rNRbDFtsC82bjA\nN7gyrkU0rS65vz+8ONFCSzs9XzjbPk7vV9VPz8n/uMvCvcLJ48/Rd9NKb1HbT0r/V3dXS1dL\nWzpFRUhHXz5n929jX8VvZ7hLY///OtNON79Eb75NvTe1rS+sPUu3Sbw7sV1v2edNW8I1Vc07\nY01JUzLMMkfRP+9PyVPIS2/VTcBjSb4971u/5zm2SLs8tTeu2d3F3bjV48V3zcLAyNXJa7RO\nu1O808nPXbZGu0O7QUe4RDW4L8tHZ18yzUk3Y/85ty+5Ns2/NMvPLbY0zzpMTDvbvjfr5zvj\nZ09VWedTTcU8yjWtMrvFP7hLd7/du75dtUTFPNm9S1XDO7itLa0rTbUvrDG7ObzEO79BPLYu\nrjbJazu2PlW7Lq850bsurjS00UC8Tj+5OLZIV8I1w0XnTz3AN8LPMK4vRb5Lu9dRyUPPZ9td\nRfdJzkhJ43c/uji0OFm0LrAvtzS878tdU8RvUbsvrje3vj+0OK5IxcJCskS3/z2yU83B3U/f\nvf9byj23P8rLQspOd0pjP2s5zU5GzT/NP91K30xGzDjr1TTP529G21PnU2NHR+dCvNtHxj6u\nMcFfW8nVzMz3utlT18pXyMpPxT5vwjmxR0+9P+vDS7/XXbtO/7hfz64urDg2rFnjsTuvb0+u\nU3fTRdV3NP9TP7pBVd0860tZ69s4vj0yvi22TU7XTkrLQkK9Ql/EOlu9ObxNR68vXbhM2blI\nulu+1+/Zxv/M2dVZvVPP485dOsF3ObpTV0PPUz7vW0n/Re9Ld+tb/8E/zsJj3993zF9r33dK\n51l3/z3ZyTPd10RvTtFbTt9NV1tf59d3d9nKd9XVy83Zv8vTwMDnwc++w2vEzNPj0+vn72vX\na2/nY+fnT89Ma/db/1Nf/0VfX1dbSN9XT1FjVU1vSmtOX1lrW1tZWU1ZTFtOUVtPSlNPV01b\nVVtXWXdb71Nr6/f373fdY3fR/9HX18fZzNPR1c7b09fjz9fbytPGz83Pzt/L39fZ59X/zt3V\ny9fK08vR08rXz9HV2+Pd6+fva2ddXVtMWUlMSkhJQEtEP0pDSUpFU1VLY0v3Uf9OZ1lRb09b\n/1vr/9fv1+fd3+/d5+vZ79vj29nV29nd7+fd99l35+dv5/fr92v/Y+9f/2tn41vn929r713/\nd293W+93d+v34/fZd9v/69nv59X/0fff3dnj39nr3edr33fj9+dvY2tra2//9+fb5+vf3+Pj\n293b09nd59/jb/9rb2dX91NfV01PSUhPSk5JUUlOUURXRVNRV11VY29rd+/r6+Pv6//392f/\n393Z2dHZzt/N19HX0dfZ2c/b18/Pzs/O19PZ49tr72db51n3W+9jd2dbXVdfVV9Xa1N3WW9v\nd2v/7+tvb/dj62v/b/f/39/d2dHRys/O09PO68/Xa9XM21Fv0dfvZ9/3VVln3VlG511VU01f\nU1FRY1NNUV1vQ0xOTUtR/09ZWV9ra/fv52dv783b9/fb19Xn1dnv0dPNb93Dy2tRzu9n4/9v\nSl3d31nv229ra19bTe9vZ9VTSVnf1WPZ79/fzdnI2cnJzdu4tlNN2b7CWevn31u7ykFJyLd3\nSV9Bvb9IOUZXzdfPQzLNs0JHbztbvko4PU3V7+c4OufBVz5L51t3zDlOZ19PzOc0Y8vO6+tf\nxMfCb87BwL1rx8Ovul/Zv7iwvUpTvsvE01M3PN/Pazs6O0XGVTMuOG9dOC45R01NRTw6WdFd\nWVnr2dHMw9vf38avw//fua2w2Wu7sL13zsnHx79XWdvKz87rd1nZysn/Y+/bz/9ZVUlI79/3\nR0tO59XvU0pXb1NBODtCPzw6PUVOUXdNVWPVW1dMPkVGRjpBQUld11Xfu7y+wte+tLLI69fH\nzGNFQ1nX09v/zsvT09dZ2XdbY0c7TM/n59vTua+z2cO9tq+2vrm0v8bC1/9JRkpZSz5H07/D\n62tXUzkrJCMjIyMkKTM/W8+/vLmsrMw0MUfIzEo097Kutse7tq+z0Wdb62PnUzhIXdfJWU/V\nvbvDTnfVXetbRUn3vrm+xL+/w+9HT+fbY1lLQjo0MTAvKzI3O0v/ybCssba6v81ZOjAyMjI2\nWVtbsKutvLyyrKy+Ttu/vVVfa8u5sLTGxr7CyFUzLzg5MjAwPVNJTj083+9N6zkvQD1KZ05O\nw7u1rLq/sbr3zcdJQUhJd8TIzL3AxNtnRjAwLzg7QvfZvry3tsTG609VOikmKjNLy7Wxr7G5\ny2M8Oj9G2c7JuK+0vr3Zz7XTNjw9Sus8WcFfr706PVPj4/85LCxEura5vMKxr8w6LDEsOjIt\nQe+1rKyvsLW4yz0qKSsuMzY6W7K3rL3Ar8HrSj490brPvbG0vMG60c3G09nO0U1rX1NvSi4v\nvGMzRDY231MyMkRXPjdFPsy9XdlTza25yc0+Y7q6W0pL08vJy9m0trO5Y0xOOzIvMUV3xbiu\ntLezr8FvV0EzOjYtQHdn79VvR/d3PTxNUUVRVS9My1PXzNHI519XTUdLTEhFVTs2TF9Dyb6+\n3a6svK2tvMbEubatrbiurbbBuNEpOU42Qkk3RcbAxcdfR0U+KiIiIiIkKCtE71dXP0xRY1E/\nP2ddu7G0r6ysrKyyt7Kssba1tL/Dwc9vuLGxv2++/8pONElBV8vVK0BNPDQyMiwx7009/zwy\nNy0nLSgoMS43PefTtLy7vs/Oyms+PtW8urSusq2svrq6t62trq2tra2tsrCtvL++v9W972Nb\nOkE4PjY2LC8mKTAqOS1ELjs+MC8uLC00MkhKTF/Nyb3Xysn3V9e+X83nwNu4u1m9zr69vv/R\nur+yt7e9u7rOvtHP979fs8W+xd3IQudPQlXvQEc7OT8v/yrRP78/VetEyEvHXbjDtd+zd7W8\n00TRa0//X8swxTlZPl87YzFfPj28V1FVZ2/fyUpJd7pOzcpbyLvRuFevV7p3tj2uvb9vz8JM\nzF+9M8VE2z3/O28v1S09M+swRDxNNkJOW01Pd0/jWVG6S8+3L6wvuFe3b1esRqw3rUCvrj+s\nM7rfxFdVu1GuNbU3uEW6OcYub0NZNT1KN9sw2Tw8SUw6Ty/OML9NPdFM39lFvTjH0cjMzLrB\nwbbEuL3XrUyt67atv7nCvrzbt1e2UbpPwMzZU933SEhKvDfvN0JAQixGI04qPCdCJElMJFkj\nUyw+MjE2RT88XUhHxj+vU7m3v7usa6zMrLutrK2srK6suazLrLmuv66turO1tOO5ys/FU81M\naztKPzdAKUsiOSkrLykqLCorLihHI04oPzI+QDPPOl0+znfnw3fCzLr3rf+zuq69tK23rcet\nrrmsw6y+razHrMuzw8y6b71L51V3Tl8+TTfrMGMyNMslXTAvPj42Qjc1QTFGPzrVOOM/V1tZ\n02tOv8vTtlW2U69BsUZRt1G2d8lfu8jJV8Bv17xEvdHTxlm4S8nGSrpKtc1nuUK3XcFjRrhj\nd87ZyffZzUnGT83jb1lRxmNv2VFnU2tRWU9JYzxrSENJPUo3STc/Qj5MOlE8RERGTU5bW2Nf\nd+NV2V3Z/9Xv2dXNy83JxcfGwcq+xL+/xbvJvsnJycjN38rZyt/Ib8/r0+fb3+/jd2/nV+9n\na9332dfv0+f/11PbX1tdR908bz1HTEFRQltAUUhbS1FKSkxHT0RJQkZHPko9ST5ORkpMS1lL\n61nb49/P0crbxc/AyMHHv73Dur+4vbe3ubK3sbK2sruzu7m7vbvDwMTIytvb43drT1lGSD47\nPDk1NTIxLy4tLC0rLSwtLS4vMzE1Nzk8PUJHTFFVV19v39PJyL+/urq2tLOysrGvsK+vr6+v\nr7Gyr7Wytba2uri7u7+9xcfL0dfvd2dXU0tHQz89PTg3MzQyMDAuLi4tLi4sLi0vLzM0NDk8\nQ0ZOWV3vb+Pf1cnMw7+8uLixs7CysLGzs7W2uLi6ube3urW4ure9xMbX2eP3U1VMSkpHTkRO\nRkJFP0E+Pz04NzY8QUNCPDg8NT47Pz8+QkBJTedRTuvDW+9MTP/Ru7S3vsPDvL66s7a3tra3\ntri8vMXIysfX51VTV0lPW11dVVNMSEU/QkZFSkNAP0hGdzFAQFFvTTUrR0m+u0s7191Z02c3\nSOutray5wE/fz7m+uMK90761s7m3srm9wctPQE5TU2drRkhITFc9MDMxLjE2LiwuLzM5ODg+\nOkI+PkQ8QlNvZ+PXy8S5tbO4tbOvra2tra+vsq6zsLa0tre5vL7FzOP/X1dOQE1NVUt3OkVL\nRFU+Rjg4OD01OTUzOD9ER0I/OzxFQ01NRmNrX9Hn2d3Oyr+9w8TMwsa/vru/xM/Ryc3Tb2tX\nd8zMzF9CPT1K9/9XSj4/P01nZ2dPa013b8zZ59/j0c7KxtHr09HGxL7CztvV09nXzNv/X1dR\nR0pKWVVfW0s/QEM+QERNUU9OU2tnz8vM0d/P48rCxMnPy9vDz76/ycXPz+PPZ99bVWNO03fr\nb+vjX+PJ42Nv63dTd8pHPkZZT0vV70I+RD44P29BPkU8Oz1KTkZDVz89Y0FrX29b/9nXvMm1\nx8nFxbS8ure4vLXHurW7t8OuZ8W+79fLuP//290yRUI7S1VjSTdCQj5ZSkBROVs/V91R39NT\n72t3yte7xu/TTE5v/2PT0dHv68hX49vbd1nKTFFfdz1MzndPX8hCTUfjd0jIwzhdy8vLwr9n\nOjI5Ljzd58K62ctryr/AvbxfTEIvNjZFY3fLyGfH4//O3cLDzLvDxba9urvBzmvX51dj61Fr\nXV9fRudLRllEPj48ODUySER30e//a01jXc3Fx7TBur/J18fjxcW/v8LGzu/PZ2NfPjYxLy41\nOknfzMPJwsvR31NKODI1MTtOY8m7tbq5ubm6v73Oz+9f2dPHvLvCwutjRz9HOjxLPD9BPUpZ\n/+Pr998/TEk//0/fY1dXU2/O/8y+077Gv8a+ybrGxs5Z21VVw8jJusvK1Vf/X0lrU1tHVV1T\n/8XIwL3Pyk9MPzY6PTU8Pzg6PEY9SO9TU28+PTo2RkBNye/n505XX+Pnzb/Hy7/Py7y+t7K6\ntbq+u7i5trC4urO70bvNx768wsnBy9PFymfOW1dGOTQpLSoqMC8tOS0pLyUqLS04LjM0LTw5\nRcPIuLS+tsPVwNPbucy8z7q+wa6ut6yvvLW9triyrbG4tMnHyNHDyczEd9vnU05IRUo+Tkk3\nSjtDSUNJPz5DNjJCMTxKOEU+PEk9WWdTXVVIRD0+UUPXzM2/yN3dZ9/R28S9zsLE1+vNwMe7\ns7m3uLm+vsnKz1lrR0T/a9PHu8vXa0Q2MjQuNjg6PkBIX1Vny9P/zttLS+NOT9/ZW2tv53dT\nudHvusVn03fPy76tsbCsv8lnQD02Q933wLLBvsrTd0RIRC41NCsvMTc9OllGPEc5MUc7SdHJ\nuLi0r7i1ubO6vL7KZ1dPNlNbT7/P0cXf491rWff/3ePLydG9487Ka9vV/3fX/2vvTk1OT0Hr\nTlPXTUxvQjlZP0RGUTlFTjZGRFFr787BzO/HU0Rr79/HucC1sLS2tLO8v8PO29nR19vH2d9d\nTUY+PkpDRvdHRO9FS048RTc4MzU4O0NFWWdfVev3SXdna+d3zd3NvMfGub7FuLzAw8O9w729\nxM3b2V9r38jFs6+3srnDzt1PRE1BS01LXVNMT0hJR0JKTT5fSExIPkg+QUdLV0//W0xLQDo1\nNS4vMTA0PkX/X1/vVV/3783Xx72+ubK5sLWys7SwtbKztbi/vr+9wc7TxlvLwN3H1dFvV189\nRmtNR01FPlNFSdNK0989Pjk4MEtIW8PFv8fXVUQ2Ly8sLjlFTtXJ1+9KPjo2PExC0bzLtbjF\nvL6+vbu4wMHM3dl3373IwbvRXWffTtvOx7/KvVvn519vXf9RSEZMRk5r6+vZ3V9LSz46TjhK\n90fKX1P3T1lZ40v331vPycjIyePr10tj3U7ZwdfdyF9fzt/b2+tbTU48TzxNd0/r9/dV60RH\nRD9NQt/jy8fByrzXv85vylnNzM3BzL7F68lnUdtMz9lbxd/Gvby7wsrvPFFKOHdja8/X29vv\nZ1NEODMvLDA3O2vLy7vB2VM8Ny80NEFdV8vVd+f3Rmt3Quv3Z//J1b2zurCvtbSxuL2wubyv\nuri2wMfZz01fV0BTPEI9R0pIVU1DPDoyND42Rk5DZ0FVSkRRS/dVZ1tL/0xr29O+vrm7w8nv\nWVHj69vJwtnM52NNS0xIUVdO21vO09XKwsfRwdvj2dNvyef/zNXK/9nZd09jSEVXSetOa3dK\nPUBGPlP3d8vMXedJR9V3xcDJvmPVyGfJw8XJusDNxcHJ0dPrT0tZUU9VW2dORF02NUEvMzk7\nPT5KPj49OkdBTc1n38Hr38rj983J2dW+zLy6uLC7sLe9vMHK0cd30/ff4+vVV9Vba2NHa0FJ\nTmf/zc/IyddrWW9jb9Vdb+NRSE8+PD5KOD8+O01ASV9fV91rY8bX0b/Z58LJ47/b17xnzcpT\n3/dZZ+Nd2+9X411j/9fZy8L349NLTldKXV1TTVtZPWdKQsj/3evbW9vb38/O38nNd8zrzs/R\n0+/PX1HdVW9fU1VXRExrTV3/T1lbTEhKTD9RPkldT1FV/0vd6+/PyMDEw9PLz9PEvry2t7e/\nxs/ZZ2Pn5+Pfz93b3+t3V+t33dfX2WPjTmNFRz9CSzo8Qzk+PTpKSDxIRG9f0cfJusjLw19n\n791vxcfJxdfT129jUWdVa+NR0U9V3UxV39NZ/1tPZ1/r3+PR4+fr/87J4727xMXI0dvOV+/X\nSmdrVUhjSj1jTU9Vd0Z3d13X28vGztfO1Wfd213R02fMd99fd/9XY0JbSEFPRlFMZ19NUUFI\nP0pCRVNJd89db+fPzt/CysHMwr/Gx9PIU/9FXVtP0UfrV11nWVnbz9vIwse9xMPGycrJxc7J\n02vn993vyWfT42/nW1lZ30/nTkx3VVFbT0RPX0J3UU3jb3fR/+vP41/vW29ZV1VKVVs/UT9E\nPj5AQj9FY0Y+SENNRXdf0+PAvt3E28/r28LOucW4uLm4vr7Gyetv31f3Y1NnTutfd11bW1N3\n39nZz8bNv8bIvr2+ubzJxsF3zW9b60lrZ0Y9RDwxPTMvPDg5OUU9O0hIY0ZM1+Nn181va+dn\n6/ffx8zdwMzjvsjEvsfGvd3TydfJwsx3x2dVy0bn52/Pze/nxO/HyNfIzNPbxmNXX0lXSUZO\nO0Y+OjM5OjA+Njo2P0s9TUpTa2/r3dPPyc/fyNnKwMfAv7zFvr7CwMTAwsXDw8PrzMLbytPV\nY9n/WWNrze9T/11VY1t36/9TZ3dPWUZFXT9EP09CP1FITklXTlvnX/fdz8njw+fr191fb/9T\n719n719Ga0lMVU9db29da1Hn/2Pjz1dj1/fnzd/Gz8/ExMe9vrm9t7rIu7++wMfGzdnZ593n\nW1dJPEM+Pj05PDwvMi41NzY6M0FKOj9PSVdP51v/b9nC08jFvr6/ur2+wc67vdO+xMa5wL3I\nxMbEycfK0cjI283L18TE1cvGY9XXZ8tba11TRkhMQ0VAPjo5NjNDNDQ5Mi4xLi1DNTE+OTU9\nPD1dQ13VW9vRxufEvse6vLaytrWvtbuyu766ssK4v727vrrDwc7PzcTH09PL20tvW1lZb1NZ\nUUhTQUdKRUdMTj9VS0pKSENCUUlnUf9LRktTSk9rY9tbVU9IW1lvb9/Za9fn2+PR39Hf1dnn\nz9/T0crVzc3Ozdfd7+tdY+9v919XUV9OX2dbY+NXTndNY1dXU09PU1tvW2v3TmddV2v/1Wvb\n7+/O09++y8m9xsu+0cjE2cPT79Xb/19Xa1fOb2ffX+PT1efvV9NRT/dI3WffU0nVQ2tP91lv\nd07vUWNOQddL699Db1tHz0rN2UvLZ9XRS87L3bpjycdfvW/v00vMUdFj4/f/V2fdP2NnQONH\nU9U9bzw/Tzo9U0I6RTxEQ0ZTTUrKS8vT3cHb0cnJxsS908C9ybS4wLTEurTGsbfGsr6/u8DN\ntcHNusvNw0zDbz3dQ0FnQTJOLzU+LTk0KT8sKz0mPTYzQy87PTlMVU7KZ9PPyd/AxdW5yr+5\nxLm8urfHssTNutO9vne14/e478O7/77dSbdJ0chN41tE70RXSD5nPVVbPllJSFtO7+M80TU7\n3zDn4zbnO0xfQNFPTctJV8VEyF1nzFPGvlvB09e9yrSy16zfvbLXtbnPu99bvlPHzk3LRznE\nM9H/NtEw/1843TxDX0BXTkBRPUBdP1VXQe9FRP9GV+tCY0dRWT9jY03PY2/D68XI47rHwba/\nurfBtrrFr+O3w8+/0du5Z8fTWb9f3c8+6007Zz4+XzdIPjNHNjlGPEE+QUdAS09OVWtX12Pb\nyufHyf++yr6839HK68fA38/302vIxsDv3VdRz9nja193T2PP/2tNTVVn4+NTTEtLVU9LTkVn\nXUzjSV9ZWevf5+f/779d09fv1+fNyeO+42POW9PGy85n3c/rz/9P219Ty1vXZ9VnX19dY11j\nU+Pd3efnV1/fV9vfzXdfZ11f20ZO2U3db05ZTV1X/29Na0xRV1lb/3d3Z/fX29PX2/fZ99XL\n19HEzsLVz9PX383J1czb3dtXd01j90ZMQkBPREA/P0ZRRUxFTFVBW0tb71Nvb07f29vRX9nb\nzcD32c93zevR08zG0ci/zcnT58/Lx8DFxdvV2dXV09fX49fn51ljXVHdZ9vbU/dVZ3djWVNM\nUUZMQzpCPj1HQEpJREhCT01ESE9N711VX0dVXXfd293P79vbysbAv7u+vr28v8LIzcHBv8jM\n2d/j13ff2///Y+NjZ2dbXW9LT19OV1tNT1VVVU5NSkJORktTSkZMTEhKRUdJR0lRTlNbW2v/\n49/VyMfFw8PAv72+vb+8vr7CxcHFwMHJxs3RzePj//f3a2tRUU5DR0ZCSkNCPT09O0BCRVVI\nTVNRd1//193V0czJysvP08/Z1cnn2+Pv1etnX2tvY29ZW2vn//d3a2djW01NTElOWUtMRkxK\nTE5LS1Vv6+PXz8jEzMnEyb2/wMHEx77EycPGy8rJ29fb/9f//3ddb2v/X1lZW1VZUVdXd1tb\nTFVVTU1bSk1NU1VPX05fd1dOSk5NVV1ba2d34+/r6+PVz8jHx8vHzcnT19vj3evf5/9dV1FT\nUVtTTldVTU9LS09PW1dfX1dfZ2/n5+vr3ePb3efX29PT08/b39nn39PbzM3NzMzRyM/XzM7P\n29fd09fZ3+Pva1tVTk1MT0pGSUE7Pz1KS09RVV9nV2N379/f49nZ3dPOy87M0dPV19nP2//r\nY11fb//v6+dva/f35+9v4+ff4+fvb2tnXVlTZ1tdb2N3a1tjY19rW1tdZ2tdb+/v32tra2v/\n/2dfXW9b92tjVVdVT1lXY2//3efn59PNy8vLzcnJxcjIxcjOzc7N2+v37+dZVWNfZ2NdWV1b\nU0xOVVVZUe//d+vZzdPOz8zM08vNzs/b0dvf62drd+9rV1NbV01JS0xVTUZLTEpMSUdKQD49\nQ0lDR0VIU05OUVtb/+vf19vT19fR0c3Nz8jIysfJx8rV39XXz8/KyMjCx8nJ1c/Nys7Xy8rJ\ny87Ry9fR0dvdd2tnY11dV11bVUpEQUdEPzw+QkA9QENGSU1VTldrd9nVys3NyMXDxMXFyM3N\nz9vP2d/j9+/vb/9fZ2djV1VZU09XWVFTTk1NTUxOTU5NS0pKTE9ZX//d3ePdztfT29fR0c3X\n0+d3693r79/d2+d3/+f379/r9+vv5/f34+N3W2NfV1t369/r6+vj2dnf29nT09nj29PR0dvd\n29PR2dvXzM3O2dPX2d3V2+vvd1tXWVlNR0lJTEZBQ0lOTk9OV1tVVVVjZ2t3d9XZ09XZ0d/n\n9+v/b1lRS0xLR0pLS0tKSE1VU1NOV2NjY2/r69/Z0cnNz9fRztfd6+v3b//v59nX19PRzdHV\n09vX2dHO087O0c/LzMfJx8rKzc/b3dnT19fVz87b29vj629fW1VTW1FfU09RTExLSERAQT5D\nQD9DRUBDP0pMTU9NXWtjY1tnX2drb/9vd+Pfz83Kzs3IxsPBwsTGycPJyMvV1d/f62dvXVdZ\nVVNOT09PU1tdX2fv7+vf929nY/9nZ2dna19na2936+vd49/r7///7+/f39PT0dXX1c/P2dfj\n5///73f3b/d36+fZ0dXP0c/V2dHZ39tra11RUUtLS0lJTUlETEpOT0xPT1VnX2/r6+9r/+vn\nZ2dnX2NXW3d3//9v//9nY19jZ05XXV1fU1trWVdXU1dbV1FVVWdTd9/b2+/X0cvOycnKyMvR\nzcvFxMG/vL++vL29vry6vr7Ex8vP0dvf5+trX1ldWVNPT0pBRURHSkxLRklLS01MTUxNTU5X\nV1dfVVlRV1NRV0xKR0tESEdOUU9TU1tXX11nd3dr7+vb2+fd6+PvZ3ff593V2efvd29nZ3dv\n993Z29fX1dfTy8nDxsXHxsTHycXFxMbHyMfGys7P2dvn72/v/+P35/9vWVVVU1dVV1tZX19b\nWVNRUUpMS0pOTU5MTElHRkdIS09RT1dZWVlXWV9fX1tfb3fj3dXX0dPV09HLzM3Nzs7Nz8vN\n09fb19Pf3efv/2NjX1tZVVdTVVVXVVdPT01OU1ddY2dra2v/9/9r93d36+/f9//na+vj2dHI\ny8fJxsTExMbGx8rLz9HV29XX29XV29vjb2dvY2tnXWNfX11fV1FNTExLTUxISkpHSUhJSUVJ\nSUpITEpHTU9XY2Njb2vv5//v6/f/7+Pb0dPXztnV1d/j5+vn//9v6+PZ2dPKycfGxcXJxMfJ\nyMzKzs7T0dfb39vf69vvd+93Z1NbT09RUVFNSkpLS0tRUU5PTEpMSUpPXWNn9//v///3393d\n39vd69/d3efn929v5/f34//db2NnZ+93d93V3dvd4+vj99/32ePZz9HOz9nZ429v///n7+//\n//9dWVFVU09VT1VPTFdTU05RW19XT09RXVlrd3f/b//f693n6+fd7+f/9+vvb+Pf3dnf0dXT\n1c3T0c3OxtHLzNPb5+vv79/33+fV4+/373dvb2fn7+/rZ+fj/29v52/3Y3dfV1lNX1FRTFNP\nT0xJS01LTkpRTElHSEtIR0RISUxMV1lv9+/n18/TzcjFys3RysjMysjCyszLz83Mzs3KyMjK\nzMzNy8zJy83TztnZ1+Pn793f/2tnZ1dTT1VPSUpJTU9PVU5LS0hFSENERUNHSklLTExDP0RF\nS008SEZMS0dGSUtPTUpMSUhCSVFVT1V3b//3/2/v1dHHyr++v73EzcnKwMXLzMrNz8fJxMbH\nxMDDvcfFy9nrX2dnb11TXVtOT2Nf7/dva1/n42NfZ1lZZ09NTkFKS05dXWdfVf9PWVtbUU1G\nTkhDTUxITldf/2Nb7/fj49XnzM7MzdPRzdPXy/fO69nXy8/Vy87P1c/L28/Xztf/0e/f1dPN\n999rb1tbXV1XX0tTTk5MP1E7Pzo+Qz9LSEhPU09vb1vb39PMzsPEv8O/v768u7vAvsO9x8zV\n3WNvWetnWVtVTUxbVVdXVWdX42/XZ1lPSU1LR0ZLR01DSkZEPkdKTldr49/J59fTzdXZz8jX\n53fZV19j71Ndd1lvb/d3Y2fd9+PXz8nHyb3BvL+/v7/Av768wb/DyM/b32NFTkE8Pjo6ODM0\nNzY1NTU4PTo6QUpHRl9db3fj59nKzMLGwMDDvsbBxM3Kxb/Izc2/wMrJvr/AybzMwci9wr3A\n3cPTyNnv/19fTldNVVtMSU9JRUg9R1c/SDtFPzo8OTo3Nzo3PTo9Pj88Q0pMU1drd+fd39PZ\n59fNx8O+v769t7rBu77AvMPGw7/BxMPMzNXf7+/va/dnWU9NV2djX2dbXU5VQ01PU11XUVVR\nTD9VVUxbVXfr1czRysTO09XK0czFyc/Z2f93z3fT63dra1tfV+9n9+/j4+vvZ/f/3//r4+dn\nZ1dbUVFPVUhDRkNBODtAP0hHRFNVX1tvb2vv283Fxr++vru9vb24v73Av8rM29Xf7/9nU0tK\nRkxGS1NKV0pGTUlMSUdCP0dKR11r49Pd0dV31d/ZzMnPxMS7v7zAub+7wsTPxM/n91tbW1Fb\nZ19d/3dvZ1NNS0tNU1NZT1NKSkxRTU9NSlNPTldTT1FdV1VOUVVbX2NbXf/359vbz9PrXedb\n53d319XO08XJ0dtba2dr/+fPzM3NzMjJzcvTzdvM2dfbzt3N38vF0dHfz8vPz9HVd9dr6+tn\na11bR0hHTlFdWVlNR01LU1dRX1tfR0tKQUI/PTo7Ojg7PD4+SUJBSUBLSFVZ3+vXzsvIyMq8\nvr69vr67tra2srCxr6+xrrKztbm7wMbO12tdX1tVVUhOR0xBSUE/Pj5APEM9QDs/ODY5OTk1\nOjk+PEA/RT8+QE9jV+Nnx8PEwMO+wMPKxMvL18/Zz9fbz+PZ5+9n6+fv987Ry8XTzMjJwsDL\n1dXDwcfJzszHwOdXa2f/d05JSlvnX0pDPk1TUVdNU0VbVUk9PkRXU19Oa//jVVldS1VMX1XL\nvrvvUz5dv7rHwrrVzefZ19HK6+fn1cbbPTAuzr2ttNtIQDw0ODhNb8G9vFdnX/9dTl3dwut3\nz8RFTGNvPd/328O9/0bdXUc/WU7/T2dZTzw1NVnZSz41LzRF3dlrW9/Ty7+9vtusrKw9LzT/\nrKysrK+vtO9GOz7Er6640+vba0c+OEHjwWsvQzovLzEqKUDnQuPMXzxNzGfru7/BucDVa8HP\nx8bP1VlnWbu4zz85L1ljxVFK213OuCQpr6yyNSMoKKyrrMqwrOffNigpPbeszLzDsLTTST0+\nu7mu32P321U6MiswQfdnb1fIztdTPUNfuruyt7S9uNPZ18HJ1dXvVUlfRTY7N0I6Q0BbXdH3\nWzk2Oj08Sc3fx2eyrSNPra2vUyo2Ma2ttNOtrchTKykqScvNN9u4rc0+ODnXur3VX9u3vkwx\nLDlKY2NHd7uwtt9nY8C4tbu5sq64yklZ59PRV1Nn30s9MDY6QDw6RF3FTkFCTT5LV1tfuLBG\nK66srDolLTe/rLrBra2wUSoqNUHfX0TZra3AOzhT429MTNG4s8o7LzhDPTc7Ss2yrbbXz8rG\n1cjGta2tts5j2e9nSElr529EOjQyMjQuMTxLRD9jQzkySG/nUdHnwLvnsOs8raysQSvNv66t\nrqysrLM0LUxVOTNXya2srMHjw7lRNzlT193vTz9DPS8mJis0PkxjyL282V1LV2PTwLW0t8nj\na1U+NTg+TU9MSkNGQTw5SOvf39fOwsjvb93ZzdPBure9uLW1uVXbvrPOW9+trKxAd8a9Slf/\ns665TDQ4RSgjIy1FS13jwLm84zs5R1E5Nz/ZzNn3W93nXUFD2cfKxbu5tL3My7+5wM3Py9f3\nWUs/Pzw6ODk1NDY+Pzo/T29j38zNzL/IzNPOytPRx7m8w7aztcnMwsrTvclnzK65SzdTUTo0\nOk7JyVE1PUs2JictNDQ4Qte9u7u7s7bB09nKzONn3cO/ys7Ju7u9vLzFw9Hj393b3d/3X1FM\nSDw2MTAwLy4wNjc5QUdJT2/j0cfBw8G9vsLLy8G7vby2t7q6usrLxcvTxsv/29PnU0Zv51k+\nRkpEPjwzNDg5MzdBREFFUVNRb+fr39HLyL+8urq6u7q/wsPIzs7O3f9vd19fWVNOTltbV13/\nb2NZW1lTU01LTVdfW1tf///36+/n087N29PV1c/T3dHPysrO1+Pr72dTU1VbT05FQUJCP0FB\nRkxVVVVZY19dWVNMUVFLT1NXb+fd29HIyMXBwb+9vL69vb3CwL28v8LFwL7DztnR3/9ZT09O\nSj89Pj4/PD1AREdJR0VJTUtPXevf2efd49tnV1dfa19dWWNdT0xLU19nb+fb0c/P19PN0c7M\ny8rDysfJzM7Pzc3R09PR1d/n6+v3a2NfY1lVT09PU05NTk5VWV1fY2/v72/37+vj9+//5+f3\n92NvXWNXVVVdZ11jVVVXUU9LTktPT01NTE1GSktMU2fd0crGxL+8uru8vLq6vLq/vb7Ayc/O\n09vj7/9v7/9nXV9Xa05NTEdTV09OSlFRSE1IUUxZUU5NWV9TU1FXT1dVVU5bVU9OT1FRT09X\nW1lna/fn39XL08nKzc/Oz83NyMrHwMHCwMPEycrJy9XT0dPd3+/na19TSEhPSkhPW1VTWVtV\nTVFZXWNjd2/d3d3r2dXb6+fj/+/rd19bZ2NdW2NrZ/9jY1FZU0tPTE1TS1lVV1tTVWNjd2Pr\n9+fr99/j59/fzs3NzdPVztPj29XO19vMw8vKz8/LztXX387L1dfd2ePb3/d3a+dra2drWVVT\nT0pNSkVGSklFREtLTUZBSEdEQ0ZDSk9TTFNnY/9n49nj2dHTztHM1dXTzNPVzdXX1c3X1dHM\nysrGx8XHwL3Fxb6+xcbJzMfJ0d3Z2f9Za2tZWXdjTmtTOmNMODlTRDk+Pj46PUI+PkJFRz1T\n90VCVdldP1/LRES77zpZvU1O28XIX9W418a528y8ysrZvbzfQsex1zi8v29HwVnTzNfTxme5\ny0XBtlPvxf+972fMSP/FTUNNX1c3OUdbOFVGQFtOTks4b/83Rk9LU1fr2VfZwNX30dnL91/r\nVVfvS1Pj39HT0ca5vb7Dvb3Ezd/TzN/j2d/Z2e/v187d/2djUUpBQUFNVUpLWXdrX19XZ+v3\nd1NV919JWe/vUU/31VFb99VO78vRTd/r/03v3V0+2fdDSV/nZ9X/2z1Z3ddDOlu1zndR9+/M\nvcH/07C1xOfXzt1vX0BC2b2+y763tLy+zV1LUUU5MztDTl9nX+fMw8fb72v3Y1dMTW/371tv\nZ29rVT89RkRFRUlDQ01MQ0RTSz5NZ1lNd93jycTAwr/DyL21xMG/xdu6xO9nys7RxL5nT09n\nb1l33T1300lMSU5vT0hfa0ZT687V/3dOS2fZz9/Jwb7IxN1ZV1lTR0FXY11ra1NNTldnSlFV\nUU9Zb/drZ9tXTld3d+ffydnKwL7JxcjM6//f32/d093X18rO293r59fX329ZTldTRltZT0NJ\nV+fVzNlLR9HByNtbPTtO00lIUVdf78zNV0hdVztK12NBPzk4O9vCz+/Hxs7MyN0/RGdTSN/L\nx720r7G6uMDNd91nTk7n2dvIvcnOy87nX2tbSk9fZ//f1d////dTUU1ITk9XVU9VXVd3b1lV\nWV9OS2P372N3W0lOX1lvb2ddY+fv/+dnTFFRU1fvU05rzMLAy1tLV1n/02dn/0RL08zZWet3\nSu+5usXj905fv7rMa9vHyL67ushf/9tv68j3RU7XT07XXT06RPdCTvdKP2fr/2tV72dVxsLn\n59nL0c2+v+PZztvj49vvTFnda2fva19bW1lfZ1tr6//jW29fa2NLS13r911b99lnUV9MVdfn\nV0ZId3fT38dbLEu1tetTOCkvPbutuLPFUz1O0f8uKjEtQ8asrLK6uMvEvbpRNzQ6P3e8tsLf\n187O08bLXURMY83AtbW7xMbI2etjX0M9QU5dd+//Q0JHSEVLS01JT//3Z2PvXVVfb2v338//\nY2v3V1tdW09MX2NTW+vb6+PMzetZZ1tEXdnZ793Z1edf39dd08bX6/9ZUefNwb53SFFOTtPM\ny9VrW/fvxsLdU0xbXd3HyN9PW13v5+t3W0pXWWtZa2/v59/n62/31dv36+tbWWvv2/dj0ddj\nX83jd03f1d131XdKTnfR6+PV/1NEV/ffy8XZY/9bW1tj6/9TV3dbT1XIzGNHPj08P2PKy9fb\n/1NJTD88PD5Gd9fFvsLFwMXGycvnb1dbW//v7/9n7+vb29PV28rb1+Pf2dHOzcrP1dvX09/f\n73drW1dTWVdfU1NOUWPn3dvP31Vfxcv//9XrP013/1n/2/9M//dvSe/Hb01EZ2tX58PCyN9r\nSEtEPjo6PDs6P9/Czd/j19nV53d3WVlbU1Ff19nb3ePRy8jCzc3Oxsa/vry9vb2+zNvX619P\nSkY9PT5APkZHX1lr79nOzs7X3eN3629va3dZ3W/Z79/j9//n3c/dz9XT28/b0dfVd11OXU1M\nSU5CQEZVS0dPX0tTZ91379njWWdr72vv5+9ZU2P/a+/n5+vX0crMzs3X72v/W09RTkxGS1tr\nX3fb5+/V09fV2c/Z29nTz9fX529nW19TUVlfV0/r29PVxcfOyNHN08zDTMzN72/LZ2NFy2ND\nwkhbTUdMOWdZTlH3XWvN5+vT2dfr411fWVtba/f/d9vvX9/j4+fd1+f34+//6//n71tZX01T\nTVFRTFtbV1tRW1lf6/fr1dnV0czV29vX/3f3Z+f/529r92v///d3/+fv5+/r7+fd5+/v32P3\na+f/7+P35+Pf3+Pd52/v393Zzs7Xz9fNytHP0dVr5/dTU0Tf0z9OXz88PmtVTmPXU0t3129f\na2NHR0hdT0NTzFFd2dPGPm/GX+vbyt9L69NbT+vrW/fNytHTzcfKzr/Dzc3T29n379drV1dd\nUUxRU0tESk1PVXfr7+fZ19XP08nN1c/Z4//v52t329/j99vv//ff7+vf1+fn7293X2f/W09n\nWWNfXWddWWNfVVtTU11TW1dXX1ln/2vn4+vZ1dnO1czPys/M19Pv7/9fV11fZ2dr/2//Y3dn\nY29jV11dY1dnW2NfZ19bV1dVT09MVVFNW1tjZ293a+/n7+/b2d3f39HX19fX19vf0+/n3dXV\n2c3PzsfNyMnHxcTIyMfIyc/R09XZ3dvn5+/r92dnWVtdV1VXUUtKS0VFRURES0pJTEtLS01J\nT0tOTlVRV1NXT09OWVVXXWN3b/fr2dfZ2dnT59Xf2+fX9+Pf49/T5+Pd39vV19vT3dXV18/O\n0c7R1dXO183/3dHZ3+vf73fr3+v/73f3Y3drY2NnX2ddWWNbd1tra2djXVlbWVtZW11jb/f/\n72//d+vr/+9vd2v3X/9n52fv6+vv53dvd29v7/ffY/9v/2dv71/37/fv73fr/13d/3f34//v\n//drX1t3WVlvX1dbXV1bXWtnZ2dja/9fb3dn9+t3a3f/b+vv59vd39vb3+vja2Pd/2d3//9r\n2+P/387r1dnP0dPZ2dXf793X59nP987Ta83Oz9fr6+9n62NfXV9VV1tOTlNVTE5OSllRWU1n\nZ2tr3+9399/v5/fn59Pb3+Pv2+Prd+fv3/9j91lfW1NXX1FfV1lfWVtZU/9dW+db2e/329fZ\n3dPT19Pf0dvR19/T3///d9v///9Z93dra2tdU19RV01ZT1VXV2dra1tnd/9369/n2efn1dnV\n19nj793jd9Vnb+fj6//fa2//7+d33Xd34/d3Z+9r3d/V0dXr39Xf3dtv69/jX2vn5133d2f/\nb/drd2dnX2NPW1lZV1NnU09RU0xPVU1VXU1XXU5VXU9rWVnv5+Nd3d/n/9Xf593v79l33ePb\n3dPTz9PT1dHZ1c/P78/b4/fn711nW11r/1tv62//Wevva93rd+/P29/b39vb39XZ19XT59vn\na3dvW05bV1lRS0pKRklFTk1NTFn/d/drXdNrXefV79nR28rL18hnx9XvxUc/vfdBv8A8wtc9\nU8xdRtXRwi+7PWu7OMa1QUq5zji2OErXYzmwPzy2ON9b50xT389VSsRL42/fSknr71lGVb5K\n33fr69nn1VvZydfn28fPytnT293Ozevn2+Pd/1FTUf9vTVNv/+/dV+PZ0ddVVWfKZ2tv78pb\nQFVrd1VCP87May9bvsLTd0hRzs3/RE3IwNtfb//T109N29lVRNPG5zs4Pm/ZwcjIv7a9WT4+\nPzc8Oz1MvrO0vrmvtMlVRD45Ojs+W7/Da01TSzo1O0z/0c7Iure2v9fVuMvOxc9d50vLU9HR\na0DNSVdOvtlL57XBLi+urccpJkE+wsnO262tyTYsNSwkJSguR6+tt7utrcTnTD03SNnvTr+2\nvetbV05Z289v78W7wsXCv7m3vstfR0xGPkBfd/drb1NBR009SE7vY1PVwXc/Nz333z5frqzL\nRcm760pXut/Iuss9tKywMy9Hb++709m+t8kvJy06Kio9Q125rLxN2bbMR0tdX9O+utXRu7nv\nU9vVb8jCwd/Mvr/Z59HfX0pBOC4zNzo6Pj9FSD8+Nzk6Pzpd38nbz7y821XLra62zF27rq2+\nW9m2wL6/viv3razDLSlbTsvTzWe0rro0LC01LjEwMTu6rblJT7/E1VtZRG+8uNVT37/FV09f\n787AzdXdxclvRUZNS2fv91tdV0g6NzU3Njg7REpNU2NnY03rxsnGwcK9w7+/vlnZtK2vss1j\nObyvrVE4vK13NEe6xc/J2Tk5RVNATOs8KzdLPjVbxl9DT189NU/XSkvOtLu+t7TAvb6818/E\nv+PXzsT/U05LRFNv/0tNY2dRVUtBO0zrazs6P1FVb0k+SGtZPj/PyNl3y8VrWcC5ubG3wFdb\nyLe5ub7ZO0fMr733T10+NzzZydvRbysszq9nLCYuPe+2t+9jv8Y3LjVIP07O02vCra/Jzr/d\n3cu9zc69u91RUVE/SltbPUprd11rW1lVb1tXT3fO01c+TU5nT+PrzMrH0/9f/9fR31/TybjB\nPzhrr7PBRT7rt7LROUHJvj41O++2rsk0JyxTz99ES+/D11szOE1rZ1lPd8XJU0NASufOzm9b\n2bq4w8fGxsnK51VR48HIWVFMUVNJRklP6+9b9+vfy8zPzdvX2cvN6+v/Z3fnW9nrzONdSlFZ\nxMZbO0zP20NLZ105O85rPUDDTVtR2etX2bo117PBLzBbrsvBwsVVybe7Qk53d0VVV0ZA09dn\nPVHba13/UUI+VeNXRk9fVVlv42/v18rT0869wMPJzdXOwsHZ09HXZ2vv419bY0pHU1lDS0xf\nb1/v70Zj38nM68zAz8Nra8PHsrlny9fH01XIvlFvS9/jzclJLTnVzGc2Liw5a9dPMjtNPTlD\nzkZRXVE2PFvM/9u+vb28usjb073H083L08jCvsvZ1dFfTU5PW1dTW1NAXVlvT0prX2fPWVdf\nzbrBd9vPz81RRFnbvLXdU1XV5+NPWV/V72M4S9/nVV1X2T9Fw81TWXfDvk5jxcd3vlVMSsy5\nzOvn2V/jW+/dw+vdRUtvb0rb183jWUpFOz1nUWtVRktVT3d3WV1TV8vNa/9n3+dfTk1K/2v/\n12tnyt1Tb1nvvsjO1+/Z690/48fB1XdEUWNXv80+z9tvxFHj2e+7wz5ITOu4wf9dW8+497vR\n/3dd/8F3vb1XzcxXd8e/yD9ARj9K93dnTmdPOjg+ODs4OUBGXc7ZY2d3ysTBys/Pz9HPzcnJ\nycbI59/Mb9Nba+9jW+/Z33f/XU5ZREhTS0VGP05KRFFEO1NnWV3fzN3DvMtJWb++29Oyw0NZ\nycK2vudLTve1XUHOucTnQUNTXcO6w8fE31FDOz4+Ql9X99vd599339njyctRVWNnXUVGU0hN\nX0tETnfbV05VW+PVz9vvz8HRWWf/73dM/+tPWeNbQU1nd3dfUevra8e93U7vxL/rRNe5w9fK\n//e9xeNnV13Hzl/LPjbTt2tFOjpn42PJ20zV401GPUxXU09KXW/Nv87Pyb/Gy9tn0cLI02f3\n193v6+93a9fT///3d9HT493b39nvVU9nb1tNRkBGWUpDPUdPTENHRkpHX2dVTOPZUVm7ylXV\nsdtv97fnz765d//Tz2/P/2//xdlORszF6z/bZz4+T0k/P01LRkNKS1Nfa11399Pd2dfT2c7N\n0dPdy8rGxcrMysvMzs7O0cbJ3d/r09/f3/f3b+tjX2djZ29rX1NdZ2tvXW9379nvX13r61tZ\nU11RVUxHSUtOSExFSElLTEBKSl9bW2tvY/f/4+9d53fj3evf39fR09vTzM3R09/d1cvd1c3X\n1cvZ49vT4+fn49Xj3efR3e/d2ffvd2Pn//fvb29v/11jU1VVV1NdUWv//1n/a+tn/2tf5+PZ\n5/ff5/9v9/9dXXddY29rY/93X2vv/2tna/djY1tn63f/d9v/b+9n72//X/fr4//v73fj//f/\n/2vn/+Nf42/d/+P35+ff//93Y+93/2df7//dWV1n6/9rXVvrd+t3593j73fvY2v/X1dv/1VV\nX+9jZ/9vb//rb29v2+vf2c/r3c73593j79XVXefA7+PDyt/E41vAdz/b02dT019I22NFztdn\na11r92dPX/dN611T/1fnY2NM10/vTUDBOk9fRlPTPl3nOsrFP1Hda+P3791Jz8FdXd/Kz9X/\n/9PD/1v32ePr9+/TzdHV69nM2ffVy9P/09fb1///3+/j/19j1+9MTdnnVdvjW0ffX01R3dFN\nV29JTstRS+vIdzpV0T9Pd91TVcm+S0q9xks+WbzJVUndz9NfSMC9w3fr0c9ROj5J7z09RM/T\nXVvby9vI1VFr2fdHVWPvSVvRXU1d2c1v49XN68vI5+fFv9/VxcXT0c/M513Tb19b929RTmNK\nQFNGTVlRU05F62tNUWN3XWvbSVPOU09T2c1jS2PXy0fKu79fSsy/d//V0azRSGe8wWNDz8HP\ny1nZzdNdR2e/S1Pf70tfV09Cb11BSO9dQERvRj5TTk5KTF9LT13v29/v1ev3VVf3b2/j529Z\nz2P3z8pX78TVWdu+3+vf0cDM/92+zv9Pz9HnU8nL61vXx+fdQkvfW0FI3czZ3/fvY11da09n\nRXfP30df/9lR4+9vX+//SVljW0//a1Pfxe/vzNHG0dHfzdfb2c/37+N342tv/+NXVetjV1FT\nW01GUUljX1lT7/dvTevX21tdzc7j683N09fP1+Pf905bT1lIU//3Tl/Vz01v0e/3VVvIzEhb\n93dTXedrWbzTTNvB30j3w8Rnv8fZ1clrb9vG/0nGykpDa0hBT04+X/9NRlfvb2tV62ddSEl3\nY0tj3dfV1dHbyt/r09PPxN/XyL/L2cu+71PO0eNbz8znd9dd3ddfW+fdV1FfVUZjVUtO/08/\nVe9HT11VW9XvV2fMxetHUd/VQj9b3UxIR1XTd1Vb49f/Rf/P41Vj2d/jXffP0ev35+t3d1tj\nz+v/28rK49nTa8C/7/e/ws7Gxt3Jxl1jxM9V38xVb+9PTOtPR0ljU09XWU5nY0lf711T93dV\nXV1OXVljWWPb/2fn2dXn68zN3dvb/+ffZ2vn52tf72tRW3dbW11Vd2tOW/dTWXd3W+Pv7+vP\n9+Pj53fj419n4+N3Z+/j9/fr6//nb1vv6+Nv79/TZ//j7//n6+v3z+P/59nrb9fr79/f4+/d\n4+vf2+vv5+tnZ3dvZ2tnX19nZ133XVlTVVldZ2NnW113/2tv72f37+d349nn3d/V09vb3/fr\na2Nra1lZa19nX19TU19PT1VLTVVbUVFVWVtZX1dvd3dr3d3V08jPzdnP2dfR19fT09fb2czX\n3czX2c3d39nf7/fj5+/d2+t333dvY1NXU11PV19bVVNrV2tbWVlvX3dd6//v63fv9/9f71/f\na+//3eP/92fd399v79nv9+vra2//a19TY09ZV1ddT1FOVVdZX1/vXf9fb/dv2f/d09nf09fX\n3dfZ1+PR09PR09ff3dPj1evb19v36+/v4+fZ3e/va/9jZ1VbWVVPW1lXWV1bZ2NfX1VbS1lN\nU0lJWVVNXXdfb3f3991r2e/P1dfX2dPj29PV09vT3dPbz9/Kz8/dzs7f1+fj3+PrZ3fj7/93\nZ1tjUV9LVVVPUU1KS01LTUhNVUxTUVlTW2dZd2tvZ2Nf7+dv39vjz83O0cjNztXI2czTx9PK\nytPL1dHbzc/T19fn7/93X2djX19XV1VbT1FXVU1NTldRTFFOU1VZY1NXb2NrW2Nbb2vr/3fn\nZ///7/fj59/b4+fr6+fr5//P29XN1cvjz9vZ2+/P2d3d29XR39n/7+vn72P3b29db19RZ2NP\nY19dX1VdZ1lZVWtfd1lbY3fvd+93X/f3Y/9v//9vWd3dd//jb2trXVtfV11fY1n/WU1vWV1b\nd2fv493j1dvR1czdzs7PzM7HzMnb3ePv39X/z9nf29/33efjd2fnZ2tfd19fV3drd1dna2dP\nVV1dV1lZZ2NrX/9dTedV/2dX51lnX2f3Z+P30/fn9+9f591rb2PvVV33a/9r7+/ra3ffb+f/\nd+P/79nr3czVd83Ry+vT2+Pd39fv5+vn2ff/429n999f/193Z+/rb/dvb+939/9RWV13TEtr\nU05NU1NXTENTWU1MSUxdd1NZ9/fr/93V19PN08zP2c3j18/X48jN3czZ0dnR1Xfr7//n5+v3\n62vr53ff4+vj3+dv91lrZ/9nW2trZ0pdTldRd11ZTlNnUWtbZ11nW+//W1dZU/9P93fv33fr\n42tf2evPb+fv5+dn42ff39vnzdfj/3e6Vb1r39XZ1dPnzWPHa+dj2ePfSe9Na1v/THdZY2P/\n411rY2dPVevvZ+v/b0vV30TTY3f3/2fbV+Pnd2/rV9FdY1t3Tk93X05b61dnd//nb9/O1dPJ\nysLJycfL383F1dfP1+Pb59X/0//j51vZZ2tjX11ZX1dMU0NJRkdbTVdKd2NjVVFOSVdTY01r\nZ0/jY+Pv0+vfyevf79XfVclv41X/W0/vVe/va+fj02vvzkrNy1vf58tR1cJvzcrv38zNzMzK\n0b/b6//Xb/fE3cX/08pJwP/b51lbTe87Ttc5/0NExi652y+0Lsn3N8tLVzi9PTXEP2/nQ11b\nW81Ld8VB18w2x0TA2U9r0dXT9/fbxE7f72PFWc1Jz8vT79nD3cDDZ8S668P/XbvGTcPdv13/\nx9Pnx+tXy2vRTzr31ztM7z5vWUdTQ0zbPDjOU0HrTlNNz1VdTffvWW9N7+P/R2fd2U/OTV3Z\nW0dL31FH68tZ0d/P2cr30f/M/2PGy8rC48i7ycBfu71jy9tjumvXzP/Ld1fZW1XdS0/nUU9X\nX01bQ9FTPf9Fb1tCb0lX2T1X0VHbV0jnU81KP75RY8rrZ8LZ7/dZwWtOv/drxv9bu0y5wky6\nTffXPtnf/+PMUW/Z//dCWVnfW1NDUc9v4+dVv9dVZ1Vv2UZN6+/VU2Nf/+t3S1dv72dGXcx3\na//j2//3Z3fjzlNO61Pb70xr41ffb0/ba2vfd+PK1c3CztnX19nX0cbRz8fVxcPbydfZ083j\n3c/jW1vf49/P1ePf1+d372dbS01LSj9MSEVHSkRKTERESEpDXUFLTUlHRk9ZVU1nRU9bVWNb\n3/fv2ev349v/0+dr49PTys/RzsvXzdvJx9nH2cjLzc/Rx8vKycvIzMXOyMPIxcjPzdHb2evX\n02/jZ3f3VWNrWWtdSE5LS0tCR0dESUpISEhHSUBIRkhJRElMSkpNSFFRTE5KVVFRU2Nv2e/v\nzdvO1cnLxcfAxMPCw8jEyNXG2c7ZztvVzdXT0dHPz9PZ19Hj09fb3dnf3+//d29TTldOSkVF\nQ0dHR0hCSkhMS0lVTUtOSU1OWUxfU2v3V//Z29HZysnIycHIvb2+v77FwMXJz9PX6/dbb1tX\nWVtVV2dnUWtfWfddXWf/6+dn7+fv5+9n32tnWVNZVU9NT09OT0dZTWtZU1tTXVVRWVNTV1FV\nXV9jWVl3b///b2d3a+vb2cnXzsvOzMzKzcvFzsXDysTHw8rKxMzK0dHT39Xd59vr3+P32+Pn\n32fdb9/r69vv79/v493v7+9db1tjVU5XS0tKSkVJRUQ/QD89QTw/PDs9OzxAPD5BQ0RLS1FR\nW2dd79nVyMPCv7y+vby7vLq9ury4vb25vb7AxL/DyM7MytXZ2+vj/1tvV11ZWWNdb29TW09f\nSltNTFtjVVNTSlFKRExISkhNSE5JS0xLS05MV1NfV2tfX1VbZ2v3/+fV39Prys/d09Xf39HV\n3d3KycjT183f0+fj29fT3ePR4+Pj29/P59vv3+/r59vr1d9r9+//d99Zd1dRVU5dTndnd2Pr\nZ+tjY1lTU01rUU5ORktPRUpNS1lPU1lMb1lbVV1vU2tv72fn2evZ0dPNzcnPzcnKxca/xMC+\nvr6/xca/wczIzM7P3dPf/29v92dna1VMU05DSFFRQUtBQT8+PEJAP0E/QURGSUlNU1VdZ1ld\n99939+PPd9Pd3/fP38/b1dvXzsvPzNfP48vj1czZxcfIy9PAxcbKxs3Rz8jH2dXT49tf/+db\nd3dnY13rTWtRWVlDW09MTUhJQUJIS0ZJSU1ISEtKT1tPXUxfTVdXXV33Y2v33f/X2+v/39t3\nzd/X3eff1d3Z3dPv6+fv3dvZ18jHy8LIx8jHw8jFxsfNzuPf23fZ3fdr/+9fWVdVU0pRS0hP\nR0pBS0tEVUtTT1lITE5RT2NTX29nb+v32efTz9HIysvRxsjLzcvJys7Mz9XT1dfd3dnj28/d\n3e/f9+tbXVVTW0hPREtIRlFHT0xPSklJQ05GSVFPTl1RW1tfV+tvU3dv1eNr99/r19nZ0dXb\nys7VzMnKysrMzcvR09nX0+Pd1c/T0dvj593Rb+PZ6+fj5//rW2/vZ/9jZ2tjb2Nj73d3a2tr\nd2dbb3dnWWdV73dbd1FrUVlMWU9fVV1dW1n/Z/9fa19VWWtbb19V19dd4//XzG/j60fE29nJ\nVdXDVczZVdvF/93bW9tOY9dPb2dJV1FOX0RX/29rXW/v5/f3593Z0//XzufRztPnY89n5+tr\n3e9v3+Nvd1vfb2/dY2Pf3e9rW3dvWetrVWdvY13rZ2tr2Xfb4+/V791j7/fv3f/rd/fnd9nr\na+td//9Vb1dn429fZ3fra3dnd/djW1XrW/93X293Wffjd2PnVXdnd1f/a11j92ffXXf3791v\n5//n32P3a+Nj01fO/93P99fb2+fT2d3n7//d5+fr5+Pf3czZ2dPT19HN3dnX6+v/a//3Y3db\nV2ddXWtXd2drb1lRWU5bYz9IW1VXd0j/W1VvVVvbTmtOY1F3WU5XW19vV11fV19bV/9rb9vX\n69Pd29fV39HZzs7NzcrM1dfG29PM29PZ38jT68fN38hZ68lN01HRT2vnWdVX91NZZ1N3b1tv\nT2NMX1H/UVVbX2tVZ2NPVVdjWV1OWVVjT1VZWV9Zd2Nf7/dv49lrzslnv9fFv9nr38nvyt3f\nzmfOXd1d//fX4113V3dZ91f/71ljV1dXZ3drY19nV09XW19ZY1tVWW9bWWNnY29j42vj1+vj\nzMrOzGfna8JVvlfZ3+93601vd//Td29jd1FdX+/352Pr//fv7+/Z2f/j6+/v/2v/b3dVWe9f\na2NjX3dvX+N3d9vZY9XXWcdZxshT3WN31ddEyU9O7/9ZX0RZXWt3V1tPVU9bTmtdY3dba3dr\n79nf29/d5+P/a2dr62fr53ff6+vr3d33z9nR19Pb2c7bz83P593v2d932/9vY03n12dN70jv\n//9O70ffRtlX/01bZ05ZX2NJX0pOX2NVXVdTZ2Nv72P35+fr1dvZ2dPR08vR19PM49XT59//\n4+vnb+vn/+fv52/ZW+Pvb/d3a11na+9nb+dnZ+//a29rX2NZa1tZY2Nfb2f/a2/vX2v/91//\n//f/4+Pr6+/v4+fj7+vdd/9vb29rd2/3d3dX3dnvX19P49n/0WNr32dv/1nv3etvb/fr29vX\n49/d1+/v3efj92tvZ3dvb3d39/fv5+/r7//j6/9db2NRZ09nXV9ZV11rWVljb193Z2tfb2Nv\na2tnX2N3Z+vj79/r3d/Z1c/R087bzdvZ2+Pr28/d3d3v7/f/92Nra1tXXWtXWV1ZZ3dfZ29r\nY2dbW///929rb2/rd1trb29X/1ddXVnvX29j71/ra+fn/2933+9v29HT30+/zdfZ3d/Lzr/f\n0c5ra9nV1+Pj3Q==\n\n--Outermost_Trek--\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/stat-error1.txt",
    "content": "+OK 7\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/stat-error2.txt",
    "content": "+OK seven 1800662\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/stat-error3.txt",
    "content": "+OK 7 #octets\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/comcast/stat.txt",
    "content": "+OK 7 1800662\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/common/err-greeting.txt",
    "content": "-ERR\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/common/ok-greeting.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/auth.txt",
    "content": "+OK User successfully logged on.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/capa.txt",
    "content": "+OK\nTOP\nUIDL\nSASL NTLM GSSAPI PLAIN LOGIN\nUSER\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/greeting.txt",
    "content": "+OK The *WGS* Microsoft Exchange POP3 service is ready.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/plus.txt",
    "content": "+\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/quit.txt",
    "content": "+OK Good-bye.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/retr1.txt",
    "content": "+OK message follows\nReturn-Path: <nsb>\nReceived: by greenbush.bellcore.com (4.1/4.7)\n\tid <AA12840> for nsb; Thu, 19 Sep 91 12:41:43 EDT\nDate: Thu, 19 Sep 91 12:41:43 EDT\nFrom: nsb (Nathaniel Borenstein)\nMessage-Id: <9109191641.AA12840@greenbush.bellcore.com>\nTo: abel, bianchi, braun, cameron, carmen, jfp, jxr, kraut, lamb, lowery, lynn,\n        mlittman, nancyg, sau, shoshi, slr, stornett@flash, tkl\nCc: nsb, trina@flash\nSubject: Star Trek Party!\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Outermost_Trek\n\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/parallel; boundary=Where_No_One_Has_Gone_Before\n\n--Where_No_One_Has_Gone_Before\n\nYou are invited to a \n\n*** STAR TREK 25TH ANNIVERSARY PARTY ***\n\nWhen:  September 28, 1991,  4:30 PM until whenever\nWhat:  For those interested, we'll have a rerun of last year's season-ending \n\tcliffhanger, and  then we'll tune in the season opener and the 25th \n\tanniversary TV special.   Prior to that, if you bring some food \n\twe'll have a pot-luck meal, and general merriment before and after.\nWho:  You and your family, including kids of course.\nWhere:  25 Washington Avenue, Morristown.  \n\t(See Nathaniel if you need directions.)\nRSVP:  993-8586\n\nWhat follows is some Star Trek related multimedia mail, the last of which will give you a chance to RSVP on line.  \n\nLive Long and Prosper!  -- Nathaniel & Trina\n--Where_No_One_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAFmUAAAAAQAAH0AAAAABAAAAAAAAAAD////////37+/r7e/z9/f7//93b29z\n//////v37evv7+vr7+/z9/97b2NdVU9OT09RWmFr9+Pd3d3e4+vt/29la21ra2lra3vn3dzn\n9+//YVtaV1tp9/PjzsjHxsbGy87P2ef3c2dz/+vr59/Z09HR1dLR2d7n/2lXTUU+OzY1NTQ1\nOD5ETmXf2dLP1dfb3O9jYWNhX19pb+/ZzsjIzMzP43dfVU1RX2/bybu6u7q7wcjN0+1ra1VR\nY3fv7+fZzsS/v8LEztXW62FPRj03Mi8sLCwsLTVFVffLwL6+v8XFy9b/W1tdV1RVWVtr2srG\nytXj/09LRT4/SVtd2MC0r66trrG2uL3I0/dOSE5WWVxn99nGvby7vsfR4VdKRT03MCwoJSYn\nJyowPURb0cfHz9lrZ2tZRktdd+HazcrGv7iwrrC4usHR5W9VTl1pd8i7tLSztbm/xcrb91dF\nPj9DREhXb+vQv7y7uby/wsr3XUQ7My8pJiYnJiYsOEFK38G9vL7Fzc/R72f/1dXe69/v99/M\nw87v919NSUU+PUVMTme8s66urKyvsrO2vcTNb1JVWVNLTmfr2szKx8HLzs3XY0o9ODQtKCYm\nKCYoLjpHacnIx8fI1W9dU0A9RU5nZf/Zxru2rKuusrK3xM/cb1pvd2PXu7Ovr7O2vtVlS0M9\nODM2Oj1ATVfr1cq/vbu6ur7DyutSPzoxKiUjJCUkJS48T+29trSxt7zCyNNYS1FYb+/t2c/H\nvrq6x9HbW0E9PDg6QE1dxbGtqaenqayxtbnC3FFNS1NeZ//c18/SzM7Pz/ddTktAOTUvLCgl\nJScmKCw3QV3bvru2trzCyMjrT0hTe+fXy767urCsq7G4vcn3WU4/P0NJTs+6tbS1uL3Oa0Y/\nPDcxMjg+SlBb3si8urq4uru+yNnvW0c9OTApJycmIyQpLzdFY8i8uLS2urzC71b/697j2sfC\nvLivr7W9xM1bRT88ODxHSnu8rqyqqquvtsDXd1NGRERKUVphX+HTz9LV2t/3b1tNRDs2MC8p\nJSUlJSUsND1I2MC3srK1urm7xldHRUtLTF7Vyr61rKutsLa8zmdKPjpDRlHPt6+ur7K7x+FZ\nRj86NzU3Pk9cb+/Nvry9wb6/w8jV/1pFOzgzLSssKygoLTQ9SNrHvbi3uLq8xNtMTE9eZWfn\nx8G6r6yttLa9ymdGODQ1PUBHzrWtrauutLrC2VlNPj1BRE1be+/jzMLJzNPjXVtKQDo2NDEu\nKygoKignKjA4QGvIv7u4uLq8v83hY2lvc+/Ovrm2r6utr7O7yetURzs5PUdbyrevrq+zusfP\n91lEPjs5OT5FTFBd98zIzcvKy93ja1lPQzs6Mi4sLCsqKzRFT9a5s7O3ubm9vcPnY1dMS1NN\nXdfMw7y9x8rI0V1VT1M+PUdvz76vq6+vr7zCy9VZTkpKTERhc1lr0d3Sy83azs5rXU5EODMu\nKykmJSQkIygyOkTOuLWzrrG/xbu41s7I1+u9ubmyrKytrbS7uuFCOjY0ODlAc8O+tbbAyM3v\nX11LRkZERV7f69PPz9vZyszKx8DYy8vrUT83Li8pJioqKCs0Oz13u7W0srXHwsXcUVQ9PEZE\nQE/XzsC6uL28xcHhRz9HQD5axbavq6mssbC+z+PTRzI8Ojg700ZFd9dN47nDz7+47cjM7ztD\nQy4qLS0jJygqMDNP38vPu7m8vbq2vsfG19fXzsO1tLOvrbPfu77VO0xFNS9CQEXCzL+3rcvY\n4108Qz0wO0jj/93awr7VwLW83bS6wtTDWzowMzMoIyYpIyorLkJd19W6r7K/vLH/zrz3Pc3M\nP2O/zky5s9HIr+dMPkIvNkpM0LinpJ+fo6qvvU5LSzYuMjk4SdDP3sO9z8vFTzZHQi49U0Rd\nzMnN59zrbzA3PDsuLi0xKTAuKz3rxb6urqWgsbe4n6Sqt6rGLTI2Kibrs8XBq8F7MDIfJCEn\nLjtfr6ain5+foqK1w0IvHyAoIzBByc+trKepq7HGZTErHx8fHx8fHyAnMkLIr6ifn5+fn5+f\no6Cx78HhLzRTPylHMysrOiwmTEU4P7Pew7P33atJSa6nc76sr0i2rMNevbs438hIJVlQLyx3\nOCgtNCslMTwuNOPQyLKtqqerrK7GzVvTNS0uRSwmRdM3T63FrqzM377eOT1fKy5XREjJt7Oq\nsLKtqv++wUfXwUss3UYvxNg8c6zLvrLDv75eS2suNy0iLjMfJjsyPa62yq2ipsyrxUq+zT5O\n20e5PTK8yz+8sV/VZ7NFS09NMi9UTTxetFzIu96yvt+7r1ezsMXMa1tO0z05KT0rIkAuMEn3\nQLfnabRWSkfJTDo3yk9DLN+qv1/RyUbrU0lFd0W5tr3Bv7xPZ9EwLsbEPFuvvVO+q7Cup7K4\nY080HyUgHyMmP0BXraOroammta3Jv0tLOygpKT5EL+mst8q7q6zv0cu1UUFZP003LjMzXS00\nRkYq4z0wz0M4QrNFyrNIvsS3T7HG07DDsrasv7m/XbprOzFILS48KD4wRT3XO0TEUEjJy99M\n3bPQY925RbbEa3OvQzrJOsTXTOvJ+9e/68FMr21aRMbDQcdCxMy92a9OwNXzX0bYOlVR33dO\nrcDjw7V31Uc8d0w/OzxTUz4/VdDz99/Ore3G78xCPjxBNi8/Ly85OTMywT+3b83Gzu3Vx0lD\n70nIzFHIt669966wU8RMUelET0DLNWdMa01ttmfBP824Ok9JPeEw6Va/O2e8ULZS07XHU7rK\nuljVw1vXa/tfQ088STlLSmPnzGO/W7/Wx//TxDxNXm8x/85D30nP5bJMw+PNN9Y9V1bBUc8/\n7bG94cO+zmvHZ0zLRz9CQjhZSztAc0TOXjhO38FTyM1XzXNH5z1JNFMqT0RfTdeyXa/pwcXI\nY1fS/87bX9nKzGf/vuHHz/e4T8DzuUpX73vFOs/Nzcr/yOf33kC/d9tcYchP671PxNDUSsL3\nuL3VxLXF+8tMS009KjM4LS45OkTjMtBZ3Ei6wtFKb0rBb0zIxcg6u2HP10vM1O8z2M81QzbO\nR8ZYtMzPU8vPz1HKU8tFYWvM90PdVMZY607HTkbcP8c9zuVFVDrINcw/QzzzZ0q9yeu0uLnJ\nu8NXb9rV+06+Srbf80/Zx8/USctaREndOE04XGFvwsW367fR3L7ezzzeOfdEyEhfw0vBd8xD\nxmvOWlNj5+c+Uzk+ODgvQDM+NUE/WVX/yMnAx3fA/7BlvGm+Ub5Rxsq+xdW988XhVmNGVzlL\nOFpjRMLTtc68w9PMy9vT7VnY8+//593aXc3Wz8/I28vv4UHHUVlMUDxANUU9OktJa9fFy8jK\nw9zM49nKTM5Zd1lR90/cXdTdz9vX3l5jUT5VTW9P2b++vbq/wdJ3Y1dKPkBGPUM+TFlvWs/F\n083Hw9HVzu1nRUg+QTU2ODQ2MzpNTGfcw8nLw8nhx9bO3cnVyMrAxrjFwL3Cu9vC92dcQ005\nPD5BS1Prv8TVx87I1Gfe/9NOa3dvT1X3d3NvzM7vz8jI02drXVM8OTk6NDQ2MTw+UljN0MC7\nv77SynfMZ1djUWtOY3PX0+3ry9Xn3ddlWm9LW0pIR/vdyb6+usPB2tTNZUxJUERLSllXa1nv\nx9bP2cfHx8rK1/9NVkM+NzM3NzM4PFxl18fFv8DFy8nMzszfxsXHzcTBwcjEyc/b299fR0M/\nPTs/TvfUyb64usHJ1W9hU01VV1JNUE1TVG9l49PcyNHN193r729OQ0Y1NjQyMTA2NUJKY8rE\nwsfCxtnZ69Tr39nj7+/OztXdysbP5//vW0NDPT9ARf/OvrivsLK1vsPP0P9eU0peWVFUW2v/\na9nZzdXO1P93d29IPz0+NTIxMC4tNjtFSf/TvLu+ubu5vb3Nztfez9LT19jLxczb/8f3UkRJ\nQz08QEpV28u/wcS/zdNvVE1fUD9DS0hMW13zzsfCur+3u77Jzd1PSUc/ODk2NTAvNzs/PmXj\nz9bJzd7N1MzP29fMydPIxsbAvr7B0cjTy2fnSkJBQ1lRzce+t7u9xMbTd3tXTEdHSU1Tb9nb\n6c7SzcjEyc/lWWFKOzk4Ly0uLSsuMkNPVM3Dvr28vL+8u73IzcTFzNDGy83X291rX1FGPDo+\nOjo5P0Jb28C/vb3Ix9HOzNFzVE1VT1lYXWNn59jNx727vb68ydlfU0s/NDAyNS8vNkVGT2fP\nzM3JzN/v1t1nb9/KzNPOzGGryd/Lw06zzMn3XNHb3TfG12dfsfPCVVfvsllvQkfDP8c64+NB\nUb9Ew9xc0+U8OL9K2FoyLjstOi89NOsuSz22ScPOrsixY8K/+04/47/e373FzcNQuMrTa2Vd\nY0AsP0M4z7a7q666y6v3R1XhPdZLNMjHQN3Id9m349m3wTTFRMI80zE+RTNfWVwsWka6UVlG\nsk3nv8tR9zYwwq9HONTJa008Zaavus6tu1cxLS8sIjDlvNfJpqemtr61tjYrNiciIB8nPz1Y\nq6Kon6GjpajBYfcvIx8iIx8nHys7vbemrZ+rs03rMy03Vc2trK+rr9c8QDo0PeW2tc6zpKW+\nyMXOTyYkJygjKy9GwaijoJ+fpKqryS8/LB8iIh8gKT0+Pb+wraOgpK9r4UY1LjXJwKu1tNVX\nKikhHyErN0vIuMasoa6/zME6LyYuM1VDY6ynp6Ofn6WyxunfNR8fKB8fIyYp2zU5ta9GwKOf\nxdGtrsZb2rGgpK2sqrc/LSwpHx8jMTQySc64rMfBs7c6PU44M2PZyq+ioqGfp62rtd3dPScu\nKx8jLiQr2z8uY6jRO7Gfw0ZfwMJPS8WiprW1r18tICQiIR8q08x3tKiuqq3S5VsnHyIoHy89\nX66foaSjqL5ZSUQ1MSk3KyknO0w7R8GzoqlvvqilTe+3vltS466hq7SutjkjJyYfHyAtPt9d\nrau1r6y43U0sNTctNMjVZ6afq6yrvddKLC1FNjM3PS46RitnscU9rqZra6ejXVGzsr/Z072k\nrNDOyDUfHyIfHyAwyb7DtJ+rw7W7dywoKy4rL1C+r6qfoamptNNvTz8/Qi45TCchLln3PDj3\n59/E+2Oon6/rqaHDP9G6p6/KuLdVIyInJiIlSry/ya6tvLnhz1Q1Kjo/LTe5sK6mn6Kps99v\nPi0kOD4vK0cyLEQ34cG+Ta2rrFU3UKeuNe+wxjI2R7atxdjB3SkfICsiISjntsLNqKOuX8Sx\nxy4kN1xENc6qqKqmrbbHOTs3Ki93Oj7HUTk8Zy85zKpESK6t5+t7p6CqS6yoyDhPxcW+Tklh\nNh8iKiciLty7tr2vpalLSMPILC9fXE3z27+yq6motVhpYyotLixM5TQ+tOM2O+/7vDQ7vai3\nudA1XbSsVEG31zwzOruvs0/d0zghHyMnKitZq6mpt8GrsTQz7eMtM8/JtM5jwKWjrLOww08x\nMt1nND20uzUvSW05P08+zae8bbmhs8Y/PrGt3yu/r9UyV7atyTdT9zkfISs0KTTBqrG/taev\nRjvrxz0wX8LOb//BuK2ssrXYQTA0LixQ1c7JW+9CNSw7SzswP0Jcy6Owtq6zyz0rWa/nLT26\nezwzS7GtzTFBUCkfJDFHRMKtn6evra/HPzE1NisuRqzXPGOyrq+2wrS4vtfDSDxNX0tGMi84\nTj4wOrq30dqmp846wKqtRCc4vksvWq3JL0U3OTkuObGvTzbVUzYlL2vEvbSfn6Sps7zAVywn\nMjw6P0jbwUw7x6/M22dDX0gpKD85Nzw/TmlMOUiyxeO/qqbDWdW5zEzrrVsvNUUzva+v6TpR\nMjQ6Q9exvP84MCwpKTN3uqyfn5+fn6KtvD0pKSsfHy42L0e+xrymuP9P8zgwQELv09c1Lyk5\nNS04tqaosbGvrcw9Pau0TCy+v+tALzTcwikqa8YqKTBNQj1Dt5+qurmzYy8oL9O6wa2fn6Os\nr7bPLyAqLiIgLC0yTT1DvbHL1VlXXVUyNs/GRlG9urvD47iuwsqvqq+80ruqXzT3wzw5Pv/H\nP1tfOSkxQDJBt7nVQEA4W09Uu6irzcvfbzAtQ72/uqafpqyzvVEuIB8fHx8gJCo3QLympbmr\nornLytvK1jo/+/83b763wK2oqa7L78/RRT0/dz4xLTg5N0BZSFH/T2d3b9RLzcbbd2/bSUnr\n/1V7wcHEyr22sLm2trC4vcZ3Ri4pLjMrKjdDOz5Nb9B3Qz1ZUUI4TsvK1bmmpaqqpKesr7W1\ntM1f71UvNT89NTc3Ny8uNkU7NDg1LzE3Pmm/ta+yuLGuvr+4vMXMVUnZzVFjylZFQzk1OTQr\nMDk4P93Pv73Bxs7zSlVv693EwMbCwr+9u8zR01tJPkNQ28vCu8Lfd15JPT5Oz8nfzr24ymdr\nzk8/Pk5PUT5D2dNBP2fX3evPvrrRSklXRTlB/148SnfF0e/jy8pXUt3aZ+O+w1ta52nn72Fv\nyc/3/8jB2/fGvcrvZ01GPzs4Oj88Slr/WGvOz9nEvsPlW2tINjU/U17Z083Jz93v3efrzsft\nd2tIOj1EU2HZx7u1vMDAurzC2tO/y0lBTkQzLC82SURNz7u4vr+7t73BvbzEzs3O0dLzW/tb\nSEpNSUxVZevrTz9KPTI6OTc8R1FOTkxTXV9VXffr187SycXNycnt2cnL0bmzubO3vr/DXD86\nOzs7PkZEODU0OD5PZ8i6u7q6vt/dysjvadnHyv9U08zZa8jEUWM3PD0uLDU+S0ZMVFdES2HL\ntbKzs7Czs7W9z9/Z1mNGS2vf/2Np2Ug5NDw7NDc8Zelnb9fLzM6+vLm9wr7Ed0lN4/9GQkJB\nOzk8RlNNYcbHzMvbWe3W68zEy83MbU1KTz5CTU9AQz9ASVFTY9zT1c/DvLm6v7vAz8vL1Wvp\n7//ryNZ3/+lVUVlbb+fd287L2V/e1eNzX0pKRjk0Okhb5c/KytnV3OPzX1ljZ1NGQUNZ59vB\ns7W8wMr3b3dfT05MXVtfY8a8xNPRzuNIOjg7PTk4RfdzW3fb3dbS07+8v7+8v8PEzN/n81VG\nPTMxNDU1OD5AREtFSFv/3M7CxMXI0tXJxMfKuLi7xOvnztfXzdRPP2NfN3f318jYyMbrU0xV\n5/Nf1cC+yMvf6917e+fba09VTUlEP0FVV0hBPzw+PkNES1Nr7czZ39nIwL68vMnJ7Xfv+1v3\n08vT2uv7/11PTldJPTw7Okbr2My/wMjN2VdaWktFWe9hXevjy8G+vru3xM/VaVNXSj9MV05M\n91FJSlJX99ZvbWFP89X3V83K0W9zSE1NUf/Bws3LydTjyr3IyMj7UfdPUW/U78i+yuFvT0z/\na1FOXFVcT0A9R1dQW+/z2+drd8rB09TK2U1LPTQ1NjVHW1tSysXS78bIw7q+0v9PR01PU9/J\nxMnD309Y3/db691VR0U/SFvj0cDCy9vtNELKL9xWPcRD1dNZvNdrubjf0dfp18nPzNPY/1BI\nPTg6MT7CPGPIxL5HRePFxtvjSt9KP2FZe83Jv9fj7U5PXlHl2XfvY1ZPS1nTyMC+2GV3Xmvd\n98Y3vrA9PD88uuPRr3vLzEh33l/n3cXDylFPMzE6LjY9TENVa/fny8G9tLfC1N1zOlc+Y9Pa\nuMPNx3Pj42Pr3lNXRj53Szaz6zi+P7m6NsRBQbc+XctXVkvczLfFusXd1VxGymHLZ9Xrad4z\nOj00TCphxy5S1y/PRFm/39bLZ0jZY9+9U7nP1k+/OEPFN8HNSc33Mki/P89N2rnTx99Kx1Xr\nOs1fyUk6uz1by0mzc/fE9zx33Efc58Tzx0nlwTjKWzpX0MM199lHW7DptOe/30vPd1ZExtTV\nucA7uz/JwN9lutVDSEtDU9/SU7tBzdRAvE//1z7GRllMO88+uU1ruW+zwUvrb0zEQ8ZLS05W\nPD08R91Gb0ha11XRRcJrb7TXVrpLQ8df17xnylPvvUXKukmxPlS7Ob9KQ7hD3NnIwTjA1Vuy\nSe++81Tbb0Ln31nhzcfUvEbGPM7Pu1S+tjy4Pjm3O8zIUzbE5yzDTVO9vTu1uz62UD27VU+9\nZ3fMzjm+bze+Osq+RDW+7z68OWG8XF9I2zjRNvdc2U1E2Tu+dz64W+W3UVHKvjXF50S/2TDL\nNzfPVTu7SEfITvPn0E292UvKXbhB29W8zle067/3R1awRb/Jzu9t3DhP1zXAW8rYrtA8x7tL\nRq9Xd+9ETdlXQkXAPbzZRNpZv03Ax8tLZzrjey5Ga8Ezw1s30/suz7bdSk7bWN9TPbtMVdFl\n2TP/TsvFPLtZQ84z1Ek42s7nSbl7V8V7V8NvxVE/1VxRc2drwW9B2rNKT8y9ytXRw8FUQsTR\nPURbVjrJPj5GXLFzTrW4zTvMvlLr90S7e0hDtU1GssnVukfY50s843dEONFTzOfMt2td6dHl\nPzTjPys8Z0BMXdm2ulm5u+/nuMdO3N1PNkhVLlVELzJNWzHZxeO5uv9Z1ckyMlHtuzfWpbNd\n16++RjFR0TUrPbzvLNuyVDSworJCr6a6RSlCsc0mMb3NMy3Nrq/DrKKnwWnntDYqQ0g4LTy2\nvse5srbeZT03LCcrMy4yPMO5t6ymoaWvsMZWQi8lJS4qLC03S764/7mpvDzrvy1ES7rWRUA/\nrkM0zavDSa6828XBPjE9QzD/bS7jt2/zzz1nuk4rQctBvUMxsq8+K/fKNSguurbPOUarrktG\nrKGpvby0rN83Q984JSUuT8LHT66frdwww709JUzSUCsu662xSu+soMMrQK/BLCvvs7Q+L1u+\nySoqwbIyMMdKSHdKy7CqX8Ct1d3tyMDNxkwxRTAqLO/dOzZdVUgvM1fRw907z7DBMjrPrLZ3\n26up1FHMvus4OExLMi1E49vnwbOusWHMsbBLNsm2Nf9ZLza8MSjfrDouxq3KY+k7Qcc+LNOv\n38quvju7p61rLTq8qUclOLRnJyzXpK4zK8qtQSc3q7dKLVa4tFkqPbyqazzn685ZOzXDuj0q\nOU0+LkG9r7U6OLGkySkv6aOvMi65o7s8JWmosDMsuKvZKTTDqtErKVOs0yw1rrMvLduotNgy\nWKu2LSnAq9U2xbmxxTAytK82N7VrSrz3LsusVjWyyzHerzguxP8oMbG+NkW03TxHWEy3tz06\nualON83eNkbAQ/Opu109PDU8S93fwL2/Uyouv0Ex26WrTURAPM29OTGzrkUtyaq+ODk7ratR\nK0yyOSY76biw1SdErdEuSv9YrK5ML82nYzNH2XfB1TTzralBM2e090EsUautPzHXres2LVOz\nsb+7V1e6QicnOGW7q9XjrsApKsvTRW9lyqzLJzi+vT8xN8SnxjQvx9dFNEXNwO/rvttTS0Y2\nPK+2PE/APWWyNzO+sTtcvddvvkMxX8//QUq00tjEucVNLylQwrxOMryo/0W/u+fRby1Lrbkt\nU7zN2zw4uqe0Xc7HSigu3aas3F33z1k2K1+qqMo2O0P7bzUyR7S4v9NDTMi/4+OzxEztZ0Zf\nWzE6uPM0OfutrcwoLbiq2TnTzsQvKDi02TvfwSopy62qwSgiVapWLDG3oao/Jy1Ctq3NRV62\n1WVLPz13rr1HSFlD0cBMN1nX18tGOcymwk/LsbpHMig2wbLWW8Oup9EsLOmvv0UvwK7KLTLN\nsK3IOEXHxzwpK+2svG82c7SuVjlWZ29lzlEtSbrKP8O5QS5vw0/Jsj9IvqzdLiEoxKm0NCw1\nO9y+R1OrqNs2JS/BsbTvWee/w005O0e7rLhISbi8Py0+58vGa1PQyc7XU0BJa//Hs7nd/9XO\nzWtCPkvbx8JnQsSzx03nvcXvYUo3M0xb69H398e6y0Q/W9O5v1hC0Md3REY/X8nhXFFbX+ta\nTsW6vcfGb07XzUxE5+9PRT4/Ozc228BnPUA5U8hfR2W/zFVRP0fIvszvtsT7W+lb48LB3s7B\nRjIvUOtPW9VSO0FvVVzRxe/X0/dG97zLyLjDy72270Y/S1bnymVF/7vC3drJzffdZTQuOV1z\n41tAU7e7Z+HDe8u360dOe0k/Ni9Ou8/rXz1G2cXXw7/OwsRdRFF3vMo8NlVvV048Kk7BVztJ\nRDvdwVNPycztz8PKv722sLi+02FCSffRWEM5QVdGPmfUX088OkvnvP89PcS9zsa72NPByGO8\ntr3tX1tV61h33VvfTzw+WktJzspJPVNYVV1vybu9yHfv/1Rdzru7vca/YTxnzsfezM5jd1dv\nXWPX619j+0NLVDw+TUs/Sz82Nu/rXdLZY07r1OdXTlvbwcPfXFdU68jD1dTW1/vfa09Vz9dR\nRv9WQDdNzrWsvlJO08zR1crEvLvETjk7S93N41tnSjw5RWfMxVw9U/PjXf/v5d3n0dF7d+vL\nwL/FTUvXymvvUE//u8FDOTxFUffvTU5hb2VRW/9d+9nGysr3R0nKxMDMVV1Y51Vj6+lMRkZd\n829nSU/Kw2dET1Hc3crQ3e33/0pKXPfvysLJ2V0+PDxP0c7ad1dIRWPT08q/u793P0ZKYcDD\nY1vnX0BHTs64uMtj3s27uLu4ucPN70NCSFN370tPTEBBOj1Zys/nTU9XTUZpv77H70lHZ/vO\n11/vx7/N90xGPEbjy8heQz5EQU1NSWvVY0c7RVPnwsjJy87nXXfDtri6yGdJa+9Tae3r5cnT\nTTk8TNnAw15FW95HUdm/ytRdSV/nT0Rr1c9lPzgyP1H3wbm5ub3DzdTdw8fvVz05Oz09Rk5b\n/29rb1rvyr+3s7i+0Vk/PUzMv9FdTEpLU/PLxcHHyvddSEVWe3dTSkpJRDo/78G/xdNrZVdB\nTNfnY01FRT04Nj/NvL/O4+tvUlnXxru/yVtFPkJt59HFy9/pa1Nvyrq4vcTra1FNWuvNzMvd\na15PX9LJz8vr/2dPRU9r3tvdb0U8PD9Y187Wd1FNSkpV183Cv7zFaU5c993QXUA7NzY2P1/d\n4d3ra29ZV823try/w8fj49fLxsvnTkA9PVHfysfJ111NPzxDX29fU0xJSlRjzsK8ycrjUUZV\nXWve2eNTRkRGTd7JysnMYUpGRlnRx8nVd11KSUVLb8nAwczT5djCvri7vs7Zd0dEZ+PR019R\nTVFNXtfHzNXn/2NMR0JU993pTEE+Q1Pn92NNT09XTlP/ycPP3F9tR0VJZ9nZ1+NJQUVVXc/F\nzVtISUlh68nCwLy/xdPd48y8x9hvU0dEQ0h3zMrU3/9jTlD3ycrnTkVAQ0RI5cbBxc5lRkRc\ny7/AyntNQD5CVtXIy9P7Xlv/49/EvsvaTT48QUdZZWNZc2NVe8a5tLW+ydNdSEdLb9jvYVxf\nWV9ryr27v8d3SURDTf/zW0tDPD9CTWnPz+Prd0xIS0//09leV0ZAQEvvyMrX3t9v7+fp0cnf\nX1lGQExrzL68wMbFy9Lb08G8xe9OQ0JGV//XzfNNTEVET2PZytfvX1dPU2fevri802tZSk5N\nTuvj/1xIRUZZa93Jz+9ZSUlOX+/PzOdPRkE/Rk1f0tHb4e//59XEuLe8y+lZSkZJc8/P+09T\nVV37387ExM/hWUlGS1zv4e1bT0xHSU1l499dTUhGVXfXxcDE3Onna/fj2NPX41lTTUtUZ+Xh\n33tjX1133tHFvL/EyczIx8nN095zWVZPTlVfc/NjTkhJSkhNUld3d19dXXPp08nAwc/j82FR\nTExNWWNZU1NQV2Vt99v3V1RZXWd38+vvY1FQT0tTa/fa3+/p1dfLx8PAwMfZ/11aZXf73d/z\n5/NrX2Nfa9vZ921jVFlfaefd52ttb19WTk9TV01MU1Bfd+vTx8jNztXz493l39XfY2lfU0lC\nSE5dZ11n7efn3M+/vb6/ws7/Z1dv721TWU5MTlFSWf979+9tU1FOW//nb/Pj7fP3/+/f5WNf\nT0FESE1X7+fj2/dfWFVb3dXb1dt3aWNhb+/pd3NhWWFjd8/DxsfGyM7R0c/K0eP7b1RNTVzj\nyszn4953YV1d99X3a2taT1FWZ9jQ2+t3a05HSkxf93dfWVNUXWPdz+Xv/15bV1Nj2dLd+2tX\nUEtQZ9HS2c7W397Wy7+7wMjVb1VPT1Xz4/drW05LTVRt0+ldV1JHREZT39HT1917Y19v49nf\nY1RTSkZKV+HFyc/T71tRUWfRzdfva1RNSU7/3dxnXF5fVl3fxr29wcXM193f18zO52NVTEtL\nXuPM2P93XktFSFPr22tbV1BTUWXVys7vWkxJQT9IY+PpZ2dnY1tn3cvK429ZVVNRV93N0mta\nW1lPTunMwsfN0dXX3s/EvsPO3GNWTEtZ18/Xb2FbUU5P5c/L3W9fUk1JUN3Iyc7nb19YUV7b\n3/tZTktLSlfPw7/L2/djVU9b18zT61hJRkNFXNPV7WdYUFFd38W7u8LO2+tjc9nDx9l3WkxJ\nSU3pzNN3U0dDP0NV69brXlVOTlNf0cPK1ltMRD9AS+3X3W9jU01LXNPJy9n/XlFMTV3azNbj\nY1VKR1bVwL7AxszX5evQwb7I1/tlTk1f28zM329VS0ZFV9fMzttzVUtFVd7Mxcvd711JRE5n\n9/9WTEU+PEFrz8nM1/NjTk7ry8XFzm9rTD9HWefa2+9eUUlL98e+vsTXbVVNVtXDv8LXd1dL\nSmHn09V3VUc+PUV30c3R5V1dUE/dxsPGzV9TRD5G99rT1d1vVUtMXNnIy873Z0pGTnfX0dj3\nV01ESe/Lv7y+x87X79fMxsPK12dTSUz/0snK2FtLRT5Eb+Pb33ddTUZKX9TFxMbdWkhDSVtj\nZ29UST49Qlfr1c7R+15NT+fbycXG0OtOQ0hf697X22NORkvjz8rHx9VvU0dY59XNytLfZ1Zb\n383NzM53UEJATO/W083db1lKVdHKxsfOWUs9PEln3NnT22NJQkZz09XV13tOQj9O39TT2P9b\nST1Ia8vGw8XM3W/v0cK9wcbdXklHUtvMy9HhV0g+O0lc6+//XUxBQUrvycTJy9VtTlNp2dnn\nZ0xDPTtD+9bLzd1vU0hQ98bCxcnha09LVdrLyM3nXU5DS9/Iw8LJ62tMSFvhysbH1/9bTVLX\nxcHCyfddTkdX1c7Ky+1fSUVLb87GydNvSTs6PlNz5+tzU0M/RHvOy8vNe1RCQVXj1M/W6VND\nQErvysG+wtJrU1nVxL++xutPRD5K28zIyedYQTw/TfPVztVdRjw+TOvOycbYZ0xLVdjIx8zb\nVUc8PUxv0MnO22NLRkrrysTFzW1LQURd0MnJzON3TUZZ08S/wMrZV0ZHVd7NycznWk5JWM/E\nwcTWa1FGR2nbz87X/09DQ0vny8bK1V9IPjtGZ+/t61ZGQT5E+9TIytHvWktJT9nJycrnWUpH\nRm3Iw8HF229bVmvKwL/H3WNMREdazcPCxdRnT0hJ/87LzeNVS0JEWdvJxcrnY09OXd/GydX/\nTUE/P0rjzMvaa1FMRk3jx7/E1ftRSUNFc8vL0ndSS0xP98O7vcrfZVVLV9PGyONhU0tITV/M\nv8znV0tFRU73zczfZ1VNSlfvw7zC2W9bSkNCSf/dXE5JREFCS+fHyeddVU5NU/PNv813Z1hP\nVV3jwbzJ1d/v//ffw7zA221XS0dKYdfAzOfnd1lSVePHx91fU0dCQE3byc7/d19XVFfjzch7\nTElDQkdMa8vP92tnVlRb5cS+ym9bVEpHSFfdzHtRUUxLTl3PwsfZ6/dnX2PlysPVa11cV1t3\n28XE3HtnVlFTXuvW5VtTU1hl68y/vcXf721OSUpRaW9RS0hISUxf3c7Q91pbWVxj3c/Jz/9v\nd2/z1czEv8zZ4+Hv49fMycnXX1dRTk9YZd3cZ11dVVll69bP31xRSkhMWm/TzeN773d773N7\n615FQkNESlBd4czV7+vt7+Pf1c3Pa1FOTEtMTlfnbU9NWGfz59nJw83f5+Pe3ePZy8jf8+fr\n5d/f08rX/19fV1dPT2n3Z1FXc/fv7dPIzOdlYVVPTUta92FRTlZdW1VZ7+F3XG//d19d99va\nb2/p3ePr3cvEy9LPz9XvZ2/d41dOVVVPSlRp2913d+//Y15r599fV1thWU9f18rM3dbR32NT\nVlpvVUlKTEtITGPUz9vp3ed3XXPbz9n/e29jUU9d89fj79/n/23318bDytfR6W9de9PKytXU\n1ON3Z3fYz+dvZ1BIQkNNXWdbd+t7e//by8fN42lXSkJDS23vc21vY1tPVu/Y3O9vWU1LTmPd\n0+X3/21rW//Xw7/JzdPjXVVr2djhd15RUUpJd9zT3f9rXldQb93S3fNzW1lPU+XKxMbN4WtV\nSUpdaWtYSkdGQUhezMfN0+13X1hr0MnO2G9WVU9Md8rFydPr3fdd6czBydn/V1FJSVvOxsnW\n92VYTVTZzM3bYUxLQkJW6c/U43dhW1NZ2cnL12lNR0I/TOfT0uddVk5FRV/Z0dxjVUxEQkrn\nz9PnY1lVVmPIuLW6v8vZXU5d3czK2OtnWExLd8nEydn/W0pHTPPPzuVfV05ETN3JwMPS32dI\nPkJc39rhb1VMQkVvzcjI2m9fSkBP28zIzuttV0NFWdPExcrZ51dR98jBxM97T0U9QGXayMfV\n62dGQ03bycbR71dHPkBc0cjJ0etfTkhd1MvJ21FJPTg+TO/Pzt1hTj8+TenNzdJrVEVASuvK\nxMXQ72tQT9nDubm9w89jTlXdy8jI0/dVSEdrzsfGyutZS0NId+HT0u9XST5DT9/Kw8TU/0lC\nRln/3dx3VExCQ2fby8vS81lDPkpd59nV71RGP0Jj18nGyNXpYVfdwr6+wdhtSD9GX9zNyMnf\nW0M/T9/QysnXZ0tFSfPOx8XD1u1RS2PXzMzN2FlDOTpIb93W0XdORD5K+9PPzd9dSz9I79HJ\nxsrYY0pLd8a8vL3D2FdGTevZ19Xcb1dGRHfPwcPF2PtKQkln0M7P22dJPj9Y1czM0/9TQjs/\nWPvj3/9fTD9KZ9HLzNF7Uz48RG/b3N93VEQ9QGfSysbL191dW8+/urvAy+lMP0Nn08vKz+Nc\nS0NW1cvLzfdVSD9J48zEwMjT51NSb8vGyc3/Tj89QV7Xzs7ZX04+PUlr6+f3V0s+PERb08nF\nzetVSkvnw7y7vMjfWktd2c7O1+1fSD5AVc+/wcLPd0pIT93MzM3bX0Q+P1PXzMvPa1A9OTxI\nZ+/l+1lKRkzrxr+/wdddR0VL683Nz+NWRz5Fd9PFwcfP/09OX8a7vb/J50tBRm/NyMfN62NI\nQU/TysrM32dMQENP1cfGxdHpW1NZ28bEx9VZSz87R1zf2NfdVEM9PUdr5+9vSz86OT9j2dLM\n2HdfVmPLvrm5vMHPa1lnz8vR1XtMRT8+T9XJyc/vWVNMV9jLyc3b/1RKTVvRx8rP71VDPjxK\n/+Pf71lQSkxf1cK/yuN3VElNX9PJzNlhSkRCSO3Iw8nX92ldZ9PDvcHU61FGQENdz8nN32VT\nTU1fzsHE1mtRS0ZM783Gy9z3Y1ZRW9fFy99TR0JARFXVy9NrT0dBP0Zf3+VdS0VBP0RN1sXS\n6WdeZ2fZv7S0vMTL0+v/28vCz19OTElNU//Iwdp7W1JOUVnjysxvWlNTWGPdybzF43daTEVD\nTtnO71pfVFRXY87Axf9WT0pNTF/bxt9XTklHRkhdzszna2938/fQvLnG52dTTExMb8jG529r\nX2Nbb8rC129SSkZHSvfGxNh3Y11jXmvdyeNMRD9BRUdezszvZ1NNTk5P88zVa05LSkpNa93K\n0/tpb//r3cW5ub3Fys/V3tnOzN9ZS0lJTVX308vjY11dXF9r49Hhd1VVVV/73czExuFfWUxJ\nSExf/29XU1Fca2/h0+VjTEtLTlRb8+fvWU5PU1tp7dHKz9vb18/MycbGx9xfUU9TU1nz2+dh\nXV1hb+/hzs3rZ1dXY2//48nI13fv49vj7+vjX0tGSE1bXGHn2f9fYWf/92/t0dNpTlFUXVpb\nd9vvXF7/3NXZzMDAxs7V19Xbb+/Z41dRXGtvXV/r3P9bXWd7X1FY/3deUVr/3Xdr2M3VaV1V\nUUlDSF/va1tdZ/djX/PX52tVYWdfTExdb1tOU1dfW2fjyMLHyMbBw8rOy8bO811dXU5IS237\nY1ldZ15XXf/Mzt3r7d/rd2vRxsza39fa/11d9/tVSktOTkdHT//ta2dv/11VUf/j71hTUk9L\nTmPj29/Z1NPW19HGwcTK0d7vXVJb8+tvaXdnWlNb693d7/P3d1pMTmX3ZVxdYV1RVuPNzdnh\nb19NSVL/3djd5ef/Xl1v2tHd6/9bS0VETWl7Z15fV05V7c6+vb29wMfP09PIyNnpZ1FGSVPv\n3N3j/1VMSU5n6dXa529dUVVf28jFys7XbVpVXvf3c11ORkJAR1lz2+Pra1RNTVbf1Nnj/1dL\nR0x3187P09jfd/PRxr++xdl3UkdFTnfd3+d3XVBPX9nMzNHfd1xMS1dv5d93Y11VTVHhy8nL\n3WtPQUBK/87N0ePzaVVY69HM1e9hTkA8PU138/tnV0tHTHfJv728v8PL09LIwb/J52VMPz9H\nc9PW3WtQREJFX+PZ22tTTklDVeXCv8DGz99bU2vY1d9zT0Y/PURX39jfc1dNRUNSe9PV72NV\nSEhO787Ex9Hjd2lv1cK8u73O91tOTmvjztd3Y1hOV3fOxcPI1ndUUVt729feY1FOTFjr0cTC\n02NRQTxDTF3p63daT0tP98/Hx9BrTUQ9RFVv3Nl7W01FTv/SxL+/ytXr3s/Hv77E2l1HQ0ZY\n/9/bb1RKP0Jb/97b42lOQkBFZ9fJxMXO32tz18vKz95fRj89TP/f0s/f+09ER1f34+fzVUc8\nOkJj2M/N1N3/W2/Lvbu7vcnR/2P/1crHzNp3TURKa9PLzM/nX0tGUe3Uzt5fXUhATG3Ry87r\nX0o8O0NU9+97WVpJSFrRw8DDz29XQ0FRZ+Pnb1lMRUBH38jAw8jT32Nj28fBwsnrU0g/SHPc\nzM/nZ1JFRlPdzsvN32NOSkzny8fFydPna13jzcrN2l9TRT5KX9XOzttfTUREV+3V1elTRz87\nP1n/2NXh92dZa8q+ubm7wtpjVFzbzMnK129QSUdn28/N011PQUFMY9/X3PNZSUFDZ83Gys9z\nTUA+Rl/f2dxfT0dBTO/Xy8vZbU1AQEr3z83VZ05BP0nvysK+w87pZW/Rwr6/x+lfR0BJXdnM\nzdpfT0ZHZ87Gx8rlXU1JT9nKwsLK3W1OTW/b0Nn/WUo+PkNpzsjIzntPRURO69nd91FJPzxD\nUOfc4/9bTklTd8S7urvC12tZXePIxMreW05HSFrpy8fL1WNLRUZb4dHX71dNSUlWzsLAxddX\nSkNBW9zL0N/3WU1KTefIyM3rTkQ/PEjfz83XZ1RLR03rwr2+wszl/+3Zwry8w91RSkRCVdnO\nzdlbS0VGTvfGwMnWY0tGRU7XxL/G129cVVFrzcvcX0dCPj9IZ83I1OlXSERET+PO1mNNRUNC\nR2vWytpdT0pGSWfRwL7L1mdjX13nw73D2WtTU1NfzsK/z+9rVE1OUu/N0fdUTkpLUe/Ev8bd\nXUlFREvvzcfa/2dUTlhrzsLM51pKQ0FBTt3M1mdaU0tPXdG/usTO1efr3dTEvMffW0xHSEhV\n0857T0dCQUZP/8XE3nNXT1Vde8a8xM3Zd2FdVXfPzmFNRkJESlH3ys9nWUxJS01e1c/lV01H\nR09Z3cjM72NbWmP/1cW7v8/b7213b97Ew8zrbV9j7+PNxsfab2teW1he39HnV1FLTldb78/T\n6VNKRkhMWeXOyd9rY15nc+vTzuNnVk1NTk9d5+NbTE1KTlb/z8fI1dvd2c3PzsfK91lTTU5R\nW//Z1XNOSklLVmf309tjWVtn79nOxL/Iz9//b2tXW+vnV0pLTlFcY2vh61hPSExjX2Xn195b\nU1Vj9//v19PrZ3Pz1czLxb6+zd/3/+//a+vW2nddZ2/j92/r1fdbV11jXFNV9+tlWVtv7/9h\nb+9vTUlLU2Nj79nL0vd3d+97ZWfn5/9YVVpbUUlPX1xJSVNbXFt328bGzMvGxM3a39ndZ1hb\nbe/3d+PT1GtjaW9zY2/n1etdY//n83vnzsvZ5f9vYU5JVf/3Y3vv429bWXvf/2VjbWdXUFvp\n329pd/tvV1n/29vv7eHR3ePfy8jP2+f/WUxHVe3d7/fj2+9dWW3b3e//e19PSU1z3ePn3en3\nd1xj6/9bUlVPTk1Qa9vc6//vY1dQUXvZ3+vrY09NSVF36+/7d2dlWW/ax8LDw8TJ2/P31tHV\n3v9va1lSa9vP3elnW09IUF7f5+vvb19QTlvcx8fN2fdjSkVMXeXj3ud3XVVP/9HT2edeTkhH\nS2nf63NZUExDRlnn09HV2+/7d+fHvcDGz/9RR0ln2M7O1+tvVElN59fU1913VUlFT93Ny83Z\n82tXWe/R0O9fT0pCP0ph18/T2ftjTUxX18vP1f9hS0dM787Jy9Pn/1ZV886/v8PK0PdXVvfQ\nzt1tU05HQU3nzcvV72NVSEz/2s7Z/19URkVO28fExs7nVkc/S2/r4/dtaU9LV9/Ix83j91lD\nQUpr+2dXTEc/PUFl1c3V6/9vV1nbxLm5vsbTX0xP3svHydlzXUlFT9zMzNZ3W05AQlnjz87Y\n5f9aVWfOxsnQY0o/OzxN3s3K0O//UUdX183HzO9jSz9EVenMzNT3YUxLZc7Cv8PR53dWWdrO\nydFnU0g+QE//0snP42dTSEzlzMjJ02lPRUBL4c7LzudrTUFFTF3v5+tfV0xNb83Bvr/K3ldJ\nS1v/7/9tT0pAPUtl2c/N1ftbUVrTwry7vcnhY05l2c7IxtZ3V0hN79fNz9dvU0FASXfc2dnl\nb11ST9vEwcXK81hBOj5O59XV3W9SREdX3dvb42FNPz1Ea9fV0tl7W0xT18nCwcXM315VY9TK\ny9P/U0Q/QVXr2dned11RTV/b0c/Z72lVS05r1szO0edlTEdOd97d72FTTUhM38W/w8nW51VN\nZ9PJy9xvTUA6O0/v19ffX1dLRl/Hv7u+ydPvU1Nz0cfIz9zvVkpZ1cfL03dUSD5BY9zRz+1b\nV0lGV+HIx87rUkU7PEr709PeY1RJR07jzs3XY0xGP0Fc5c/R32NUSEpay767vMbN5W9j2sfD\nx9dXSD89RHvVytD3XU1CRVLVx8nN71tKRk3Xv7u9xtxzSkdX387R52dPRkNN/8rBwsrvVUhF\nU9jJx9D/S0M8PFHv1d1vWE1FRlHNvr7B0XtTTlHjyMTG1G9XUk3vxMDF0WFORD9DV9vKzdxf\nTUdFV87Gxs9fRT47O1DhzM3XaVlNS1nbxcXP41VJQ0JXz8TH02VKR0VL28S8vcXN3fdt98y/\nwtdvS0M+P0/Xys3fV0pHRk3ey8XP719RTVNzw7q6vs13U0pFUt/X71NIQENEU9DDwtNvUUhC\nRk7TyNHvU0A9PT5SzsjO91ZPTlr3zbq3wM5nT0pMWM7Cx99jTk9OU9m/vsxvUUxGRk3/x8Pb\nd1VPTlf/x73B900/PT1AWMa9x+dpYVtb986+vdllTklJS1rPwMV3TURDSFHpyrvC2etnX2dv\n18DB6VlLRkdMX87Dy2dQS0xOVdzHweFRTUtRWWnMvL/R+1VOTUhL79z3SkVCRk1X3cfA111O\nS09SUufJ1WdMREZITWfHwMrrb2dn++PPvbzPd1lPT1NZ2cfRd1VLTE9Vb8i/zm9fXF9rd9nA\nwNLp/2X39+XJwMlfSEA/QkNR183hW1FPWWN33cbD3GVLSE1NWt3N019OS0xca9bIv8v/Z15n\nY//fzNVvU01PV1/pzsnQb1JRV2Fv0szMe05JSEtVX9/MytdfV1ddVV3/3eVZVFlb8+PQy8XR\nb11bY3f/59/nZ0pER0xZbd3Oy93r79vRzsvGw833Z11bb3P/2dfnWlNbY2t33c/X92Fjb/vr\n79jK1+tr99vX4evX611HQ0NDRUlXb2VPTlNf+//vzsjcb2Nnd29p99TW91dfb+n/d9PK029c\nYXdzV1V361pPU2Xn523dzdNrWmv33f/r287tVVVl7+1z/8/L3Ptvc3dVSlPv811c/9/a/+3W\nydT3Z+fdc1lTd/9dSkpPVE1KWefa7+XTy8vZ1srAyd/j63dSSk5v4/9cZ21fSUhd59737eXb\ne1NV68zR2tPQz/Npa9/3VUpHSEY/Q1vv+2Nrb/dhUVPdzdbb293vX1j/0tDb3+Pta1VR3cnI\n0dXZ61JHSGHrd29v82tdW+PJyM3R1dv/WWHpz9nj4/NvXFlf1MnZ5+ttTkVASmn/a+/j72db\nWe/LzNvb3/dcUVPn2ev/Z1NKQkFV3tnf1dvd93fWx7/Hz9f/TkA/TO/b3+N3YVBHTf/n3+f3\nZVFGSFXTyMbGydb/XF3d0+t3XU5APT1M69PY3ftvU0ZLY9XO0NXrX01MWNXJys/db1NMTenC\nvb2/x85rT1Fv3t9nWE1GP0BS08PDy9j/XUxN+9XN3mddVEdJ98zExtLnWUQ8PEv/3+n3bVtR\nTV/MwcHJ33dbS0xe2czP22lTRDs+X9na3GtdU1Fb18G9wM73Y0o9QlPb0M3X+3dSUnfQxsTP\n61pMSEf3y8jFzc7T82/by8PL42NLPzo6TO3My/NVTEdGW8/H1e9lX1dKTdnNyMXd3+1MTFvZ\nv7m7w91jXlvf2dXea05HPj5Lb9rMzdDvTTo6Tffb3f9PRENFZ83CvcHL419OVGdr5WtdW01G\nRErdx8TE229JQ0z3z8vI1mtLQ0BN79nU0WtOQ0NZ2crAwL/I3VFHTWvXy8vR51tMXdvJxMnZ\nY05MW2vT0N/O0vdcSEbau8XI1UxOQjhET0tXYUlb7UdabdvDwsbdVzxPY8e/bVnjZUtVPT3N\nyr21z9drX2/OzdvJz+9bODc9UePOzVvT1udrRC4qLkqyrK++1uNMZ1tJW0vav6u0t71F3VdC\nPzU1OVJrzsZjX+fKurnM39nj42VGZ2NBY0xOSURANLSlo6VPKh8nSq+fn6Gq50YtJCQrLz69\nu7S998+9v797Ni4xKzpvXbWwrq3H32NI1r/D1vdnP0g9KDlCM/tAMTUvOb+vublGOfdOv6+r\nqbC+SkUuLT9OvLzd1UZPzysuTbypt0ElHyy/p6Gfrba+OicfISnPtbOvvbm3sLe8xTkzKiIl\nKCtFva6qqK+tuGPN28O8yE9jOzlrSfPbR0A4NTp716+tt79vV9rPx7i/0c8yKyslLjUpO6ys\nqLkpHyYwtKu+q662sckvPWNXt9nnx8C1qKq0tV09MyMfHyQvO1NFT8zMvbKxr7DId0E0Li43\nSu/XzdLr1c7Fua+vr7zbzse5ra6uq7HLOTAlKjM0Ql1va+M6KjFbycTeOkL397ywuba3vLvK\nUUppy7W62Uk4MzpP78XI5VM4LCYmLT9Ye//hy8fHyMS+vcnbb1Bf18q3tbzH61FVSkNZ59r7\nST49PUNj0cC+ztPVXkxHQWPN09tpRkVPd8q5vO1dT01RPjpV3MG/xc7Myb++vsf/92VOPjo+\nU99nPTk8SePOzsTD0eljXV1b3b21t8vnc3fbz8e7vclrQDQyMzZK38jGyMzTSEy5REVZ3ExH\nPkdI3b+4v9VfUl5NPTXD0kRBPUhNd86tvM9lSnvrY8K5zsffUDld7V9GSMldT0hOR1w6OstX\nY1tnVrC5wqy+wb9A20VKzvNDrrr33TlHudDOs0fbTzpBOz9fW9PaO1Tf12XG1XdIXThvQ0JX\nv66suEJETeXl0Ve2vmk9Ly8tP1PNusqvu82/1b7C2UNMNjRbSjU6LzPKuLOqrKi12zk/NTg+\nS0vdwjxAQyMyRS3HxDbQybztNTpIvKWkuMq6srVvOiUutKaswCofJSw5u8a2oafGQC8rc9/V\ntbCno6WzyT4uLyonJSsqNjhGurW1uMrTy+PDtke+rFPMtEu7vjNfPi7vQS334TTD2tuptl3p\nY7irt8g5MC4kZdH/PiwrQjkpMC/Koaauu1w+TzIvvLCmqNEz2N9JbSooTkg6LjrPprE7QsjG\nvuM5uKq+ubbPsco8u1QsJCI4sqtBNzX3u0Et86ygo+vHrcOtr8a96yUlLShZqK21UiEfISk9\nrqmjn7NfUzQ0VVTVpaeur0I6STMqLzs+21kvRdK0smE3PETVu6+sqLRTNSMtPzVjuffpPic9\nWb3IzL24SiwpNLKqqKCpuEEnID08zq65sMpCQTIjNbfGvjQjNVVDyKupn6pNQDg221M1trK4\nv0I9vb5bTzU7X0MvP1q+uMrCvr7Me2fExj7G2b+460TBsUozJifZRnvN0cFILWs9QLmyd6u6\nSVYuQ+3de9NvRy8jNberr98uMTU7P/exoKS0UT0vLSQzU/+9tL2xu2dKw+97XTM7NTIyPWm4\nva+pxazKzLGtv7lIVT05NztVyPM9LjtZvs2zqcTGTyzX0b+trMm4QycqKDmuvLezZV88KCxC\n2bO4xLfDPlQuPnfX2b/X/+NXWNXHxrpcW1Q+PzcyP0pTz8LPwbK2t+/O619IKjEtPDdJN9E+\nwttJ07zLvb3MwtHH3Xfvwm9d4zxLPkXnzs7n48Jady5j0//DT9rN71xXOvdP1uNj2etK48rG\nwWfIT1s//9O0ta69w3s9MTA7Y8Xd4c1GRT1Ib8bhzNRfTURFyL64v+NnXUFHZ8nIyndJRTc7\nVdq6t75vQzU5PkzczcjpRTw8PEhYW9Pd520+PjxJ0cy9vuO1zL67u7a5ws5fTzszOj08Vk9V\nWj9DUsLMw85vzu9ZU+nfzcrTx8Ld17++vL3K0VtKPEdJ4+PX2W1va2XPxsHG0Fc+PC84Rltv\nzMvZ0UxKNk4+X07PydnHwbTHw8rt9088QEGws29V/9xZ/+/fzf/f4UlBMTpJTtR7181TST9b\nzW/AykvhTUdERj/Dy8Lpykb3Q01C2Gu9XD8+P8d7y8/LuMvtu97Vyr65tblVXEA6aUZv5Vvn\nQmtZxWXv0dpGv2vD58u0Z8M93Dj7P7r3usrf00dCRkLPY2nCTUw/Umfv41Hd/81PPldPZ/Pb\nS8s7Vjlv78i6wrzr50DnTNTfv9hf60fORlTFUbg/7zxRQP/UT7tpWUdEVzu6293G1sVJ2z7A\nwsfTslXWSVPXOsFOtFW5RWVMyEpGvUPISL49ylPO1+NYuFPN6d61xMZnwzfOTU/hvU7fa0Zc\nNVLrvt1H93dNWDXbTLBPUss+vkFXR8FJvl9bW0HMSV9Jx0TZQ2tXQ7ZPtD57N1NOMck4u8tJ\nWEhnSfdIs1fFT2/fU9w/ulnFv1F3PzrOd1e40XfRLkXfOtfA/8iuTVW6Pce+RLXEV8PrPbrH\n97zIPcY2K807Z8Nb7/+8P//fQq/3VcRIU0g3xP/LzVlZ/1VI2M/Gw7pWRdFHTHvdU3dTZ2NZ\nPjdRacjr0ffN1kBtRP/VPk09PEVBy8HFusnR401PUs/K18xHSkJKW02+v76/TE7ZUstZzcrJ\nZUhHOEVVZ8e640Vvt7XM2uPJtLXF4ffpz+dcVTo9ODo1Nj/P6dvOb+vF1sy7vca8XfNhSENr\nb2XjWVD3UF/Ku7i/yFNLMzQ5NlBDSkJGRUfr1Lu1uLy91sra38Bt49trRDgtPELvuMdfSTlB\nOVtJU19Fd0JGPz5Kvrqusq+ytru9r8G63TkzJSYiKiw4S0vZybuzq6ukp7CxyW9QQUhJ005A\nODs/Ql/Kt7CvvN3Ma1U5RsO+a0UtLC41V+vVREQxP0lTR9HNwrq+u83Hu7GqoaSpqa+9y/9L\nOykjIR8fHyAiMTxU08m7wrOusauuusnKY1PfTV3vY/9tZ9PJy7+2sbzL6VVJSjtFSThIQko5\nNzIzQOHLY1tAPkjOvLOtrbm4s6+pqaWqrLe72Vk/NDEuMCgoHx8gICcrNFFQzb+zrKekoZ+i\nqq66ytlr+0tTPzIuMjE3RG3NztDR2/vnztXNxl/VQT85OTU9Rk0+Ozo4SExvyry5ubq3vre5\nt7GyucPT22tlV0E+NC8rKywpLi42PEdHV9fOvL23sq+ytbu2srS0sri8zOf3b2PcX2f7UUJH\nQD5JOT4/Pjw1OzlNTO/ey83LxMG8v7vAuMXdZ0pIS0tLWm9jV1lUX1dvZ97e/1VnWV/Ta8XJ\n61lMS01YTE9fd29349/Z3eXb1NNdae/ZzdPHxr3Jz9Hn72NUSFhPRENHSFtZTuvl/2tlY2Nf\nS05ZWVhMWenb0dXMytvf+9Xj6effy8fV18/Kz8/XzMzfe/fn49Xz5dHdV1lcUVJISU1vTklO\nT2FnWl/33G9hY19eW01Za/dfZ+n382Xd0t3rXf//929z38/V4/vtb1hPSFl3Tk1MT09JR2Pz\n3f/3d/NpTWndys3RzcjT1OfVzcrd891391tW5+HtZ+Vv61RMXWNjWFtYb29WY9/b2+Pf2WtL\nSVB36eXX3ON3d2vSzMzP2dvnX1Jd29vn9/dnXldf4dvc6d/l329v68/V43tdWUhGS1rr42tr\na1dIR1Fp6+//42NJR01319TX0s7be13t0tXb6+vzX1Ra2c7K09LX7V9VXefZe2dVUUk/QlP/\n9+93b2dPTlnTxr/Cv8HV71nt3dPa3/d7WVhd59DT3+HvWk1JTv/7b2ttXV1SV+nZz93/ZVRB\nP0lV/+vf2d1zb+vMwMLGzNfnXVRj2dHj81lOSURLY29tb1lXWU5Z79PN1etVS0NBPdtzR7Zd\nSsxUxd9KubHv91gw105H1ufQxs9lb+P/z8TU19tXSEDj5dG8d72+XMPrTP9hW8/fO1ZCPthL\nX9VNXGdOSv/3c8a/Z7rAz7nAvthV50lIPUI5P1FG1mdVPUpP77vR3co741Jdurm9wrHnM08q\nMMI3vLs7tzAu60tPOq6/tLAzRD02z3exoq28OiwlK0A0v7dLtt5EvVPEws9pZ9c6zEQ1yELj\nt9+wVFa4SLq4TrnN/y7KtLqsVy0sJTytpqCgyTsqIjXF47i57bS/QkIvNNm1rLjVMSw5Pr6z\nycvzV0lWV2+9s7KzUylbt7mvSywlHylZr6mpvywqHy1D17yqqrOtPDEvJ1e6sq3OPVM8XcZU\nuuFzx2lNQm9fsK+9Wiv/ubW0MykiJtyto6jDMigiOXu9rdXM3ry93s4+RcjDzcTtPNJBSesy\nYUhnuLPUzr93qqtJPr3Jq8YuKh8o0a6kqksrJyBE48S061NPxMzfZzNPxsK9VDdBPUp3S09K\nR1XazsfFuLy6wkKuvrWuQTwjJtOspqtfJSQjO7+/t1w1QNPKyvcuREpzwONfY07pyczlVVtM\n48rBvbqs0zi5wqmv3dcpO821oK/TMicvP8u7bTw+aePNazpEPmPB381ZQlNAT1djy9dOSjbW\nuLZQu620p287KSrNq6OmzjMkI0f3vb9K6b3EvDwqKDjKsb5OLSg1T7e0xt9IO0RpzrFz/7HC\nqPc1SyzKtq6fuO8yKDZfu7rDS1NnzL3L30dHVU9HOC8yP9vCyrxIODgv07q+w6mzpbw0Lizr\nrKWfs0IoIytItKqxtldN5z/XzrSrtXcvJh8qNme6wLlMMyooUU7RrKSoskMpLT20rKu0NzUt\nLFrItL3NOV5N78Jrv77JyE00MC0wU0/CtPdWKyg+NkPbv6+ouzwmKE6tn5+r0zEsL1S3q6jT\nzUtLyWe2t6620Fc1Mi85RHe9vsE8KjEtPF/Gy6nJv0ErQzDCp62q3UEuK0S+sry467uxwLpv\nz8PNSz8uKi4rP2POustMOy8yOT/Hta7KPCgqLNy4prK50TNbWtumta2247C/v7rJzNlKRjor\nLykpOkHfykVILyxfPEzTOLew37RPO1g+r62ssU1NP++tv7y/17a/wsfJuMfZXT03MC4pNDJF\n3mfeRzI2NGPI2bzTvbS0uFNMQE24sauyzG85b8K4ucxeVcK2r8xIOTNBOzM7LTEvN+Pd91M0\nODk6RUzr1+PIzq2qrb89PzjBqqqor8jlZ0lJQzrMz8HDZVFAPEpLQWc0R89IzGsvM2s381Y7\n777VzK5luLDTqefHs8nHu7G1uMdGXHtX3chDOF00azo090FQa026O09MYc08TznERUfLSLJT\nsLZetEnzssSrZ6++vbZVuGO8VN86OdssSTYwQDIrSzlVPm0v4Uk6zDjaaz/Qv7G+vtq2Q7pG\n3dDK4fu2V7J7xFW9QL9nZ1Q9wD3GNOc1a0JrRFVfQ8VX0EB720xvvtDHvM7O7enr0mfK07/I\na8Xe48bV1XNtPd84zj/ZRVb3T2tvS+dPXE3pPctHX0xB/+PV40q3SbZKzEPIyT/LN8tU92Nd\nyG1La+FPwVW23Ne4XcNZwTrHP9BdRlRETUPvWm0740e/b0HjXMxbzMBKuN/FSMJvxMZKy/PV\nUsFDe9HtOXfZa99KsljEzO2/493r0NnATbdD0jbzPt3jPuVEtlq6P70/uTxT60zaQL1PxErn\nOOXlMtM0zlB3R0pZPnc32kvlTNFFxvdVxVddV10z3k3v69NjWsJP88lQxDjBO81X6/vnv1LR\n5c02xDPPXnfJ77blvj67Qs89yfv3Wul3Yds6z+vYe+NXVdNYytzMP89MwMtBvsvKxMg3xzVb\nTXdLXVxpY0nEMME/xsZV6dm8T7dIv03AXUjRP85CwVK8y1LXVGn/XMftS8s9zd86Ous8vknb\nOt4z7XM6wzPBTNtOO7pGs07SyEvOX+FOve/vSk/ZQWdjYbZvwkfnzVzMXc7Mukm+U0jbbT7r\n1N3lQbVNvNPFb7mwQLvIWLlE0bs4yjRt3DbJO0fANs3LL9dGPb9TXE7jc3e8RrrOQq86ybU6\ns01OtTy6SjxNX0tvbW/P20tLvzO+b0W/Qla+L0q/S17ASl3FVP+63cK9Sc7zOdQzPN49c2NF\nRldCXMdRWu9BY8ZFzVpZwdbVx03n2sXVvm+/xGvUSUvlzd3YysjfxUNC7We+usbjyj1XSEpS\nRk9F607/0eu21b/Azc7rS+NlZdlFT0VMyHfF1eG728tMTUBXZ+v3QUU4Pz9TR19Nzr7Lv0M8\nOmHEsa+94TQ2MkVOT1VFSOv7w7+5v77T1PNKPjU+Tnfze2dv7829sK+urrrIa0pvQ0VOQUM9\nOD42VWtdys/N0ddXzsC/uL7L31NLb0rMa1/PU+NcTlVV23PRXktRQUZdzrvDwO9QSU3lwb29\nxVM9MTdAU9fZzslcb1VZx8zH09XvTE9ITFrf385rX0E/P0nn1c/OX0tPPlpp3dzO1VdJRElL\n42/f/1tJVUta1dvPxc/KzWfrd9O8v7+/3ttMTv/c2ettSFVDSu3nu72zvb7JY9N31evcW0RC\nMz88a2H/505GPD40Tl931tnv70v737y4trbAxu1XXF3nzOfEZU9BP05h1VvRTV1HPz9AZ1zP\na/NEPj4/U9nMzcne72/71b7DwMHZ/0pFQVnv88x371NFV0fp08rL2VpRQU//z8rIzuNcTk9Y\n3czL3edbRkBLV+vGyMjR72dbb83Hxb3L2W9NR2ff38/vV0hBPkr/zsLGw9PfWVXj1cvO03tN\nQz1FV//K3+9RRT47Q2fv39NZa0nfd8i/w8DnaUJERFPj18/e911KSVxzwcHJd0pHUvPT0V9L\nTEn/y7/Fzv9YS05dU1dN2cS3sri/50w+RFXl6+dJOz4+RlbMx8TGyNLP7e/fy8HIzfdpRUVH\nT3dv61BMQz86SG/ZzMrM3M9z59XHz97Wa1pRTV3PzcrVTUk8OVfjw7u/1+9vT1ffxcDD305D\nQj9AU9labT85OTs7W8i/vc9jRUI/Ud++sbW4wM9aT09czNX/d1xET1ddxLy8zsnOT11OTM7P\nY18/OTg/RtjHzNDj2tVj08S/urTMz9FrTc7F68BLM089MUJH4bvKT2dXSkhtU9fR21/HVVVn\n5dfOVkc+ST9S6+PK00hV3Ur/1e3DytpO+2k/U0xjwMvpytte71nhu8C93VxDQU09aczj3mdX\nVW9N29PS11RKT0c+Rk7vbef//1vP7XfAxsbKTc7tUdH/zL7Oz9Fve2NTb8rz81tHQTxKU8m9\n7+N3RU5BWdXNwcnJyu/jTE7NycjOWXdAO0dT18FvVFVDRjxSWO/VTUfzPHdbP7zP0MJFXc9E\n3vff2j9VTl9v69u86+ndREJNQ/fAxczvRl9RW3fz389n3/vRVctjxbjAwMZRVUxO2MnBv+dh\nY0lrTvNd7/NVZ01fTEpS51tr7+PczOPL29DOTkM+REhIbd3M2FdpUFfX98fAxMnj729T32vJ\n2uPZVltWU+fRv87ca1JTVV3V2d9RPj89Q0JPTsvz5V9zQmdMY97Vy+9RWU7f3ci5zs1YVETZ\n///A1+XdPVhARdFvv8/dXEBDRUfr3rzO2fdYTlRfVcfJysv/ymtvzcS6wdHvS05Qd93RzGtM\nTEhIS1dnY1dJT1dHV0hn5+Nf2W1n2fvZw9TOSk5dS1tr0s3Fd1PjTOlpRtJGY15D1f9rym/N\n2FNX62fY3WnOVeFVR+NPb2Vf729JR0tS62/nxefH0+nOb1nnSN3vVtvr2tFPb2vR29v3zFVN\nVT7Rb1DP98nNXl1d///nZ8Npd+dNzNPNy83B3dRK2mNP3D3a52/PX7/KxdHYyEdVSU7LXNnn\nR2s8O11N81lMSkI/Q0hd0+XN52/GXNe907vve/9HUURzysTH52tDY0JMW2/K9//dRVlRb8rK\nydx7b1xbb+XT0M5n0/ff3t3Ra8xpT3dMRVd7xtfJ69ldYXdK0NPpXndl2f/zzNfeUUNHd1fv\nd3fXUltRSGtTe8DOudnzd2HjU8vjxtlrW1tr8+PYz29UP0lPd+vPzs/KSttLV/890mf31UNj\nXz9HREvcWdhZQWU8aV1j++v/c2d7bdHCvL7M9+ll/13329vJWFFvS2dX0+vS6Wd7UWtU5+PM\nztDbydPr0NXR2tnU3Hfbb//a995lX0g9TUbP1tTXX1dMTEj/3e/PZ9lNZ0VjzdHMzuFOS0Nb\nc83O51NEPz1MVdDHx8rd72lPUv/rz8/O1llMRExf43v/b0tPUVvHv8fG+2djXWfZ18Hn71lN\nW1NVY9Tj2GNIQkJCVtfpzmNeTWP/58u+xr7b3/9LZ03Tyr6//19HR1d33czM129ITFZNz9Zv\na2tX5U370N/B0f/TW1djd8jF299TWlNJQT9P89vf+0xJP1jhz2dPQlPd19/f2czJymNVSU9c\n/+NfW1VZSkxFSczMw83nZUZdd3fGy+POT1tZRmnv2dbO5fdHW2frwrzFwsvVTlNX7+Xpymtn\nQ0tP3MXf2Fd7XklHPUZv2e97UUlGS9nLw73O2l1OTmft0czN0Vv3TGdj38nO1ftfUE5TXsrP\n119BQE5OWd/SxcXPUUk/XdDHusfXXU8+Pk1SxsrLSkVAO2X3a1/Vd/dTPkRU4cPN33da/15c\n/8/M22VTW09ATP/Evcbba2NbW/vQ0cvNZ2NGVG3rwtXV011RX1fby7y+0dhz90pTY9z30d/3\nSzw+RtnPzednW0tHRe3Zy97XT0dDRm/Rv8bPe91LQU5P19vV309KQUNA38nIwtP3UUdO283Q\nb+ffV05HRHu/wr/Za1tDY+PAucLJWVtOTk1e59PH5d9IP0Bd2MZp329XTDo8X83Hy+ddY1xT\n1MnAw9vZY09DTnfBvcbbb1BFSErXy77Gc0I7SkxYY9XG0dtYU1l717y7vM1rVlpXa/fRy19v\nQklCSPvWw9xDQ0lEXWVj3P/ZTEg/Qk3pzdXIxuNVSz9N58zBe0tPPlFPb9HFyMTrVVtr3b/E\nw99VWU9KQ2/Xw8jO41db7+fUyL3D209GP0XfztPZ5WtbVkZP48nP505NSD5Md9nZ62VfXVlM\nZcy8vdVeTElh49fBw8bZVEpJS1tvXl/37WtRQUNLY9Tj71lNTV//zMfMvb+/20ld7ce+d09P\nV1lFRFTXx9ZVQ0dPUVtt/+f/41tGT2nXw8Pb7+1OTkNEW8/L2HdTSkhf987Mxcn3X1/fycDA\nzNvL129ORV/YwsPaZ1FPVd7b5+Xr0NdRPT5N99nW2d3lT0xW/83F1c9fSUBCXHfb1uP380tJ\nXVHW19zaW09FT3PZzMzR7+NaTk5DT9vnZ1JMRUNOX9fGzNX/911j/8q8ubrQ2efv7//rzthn\nSUZITlFNY9t7XVNJSUVQ39XO71Xv62ldd9zBx93/UldfaW//5+Xt/2FfX2nZx8v/+1FdaV/7\n79XI/09PRuXP0c7P69pvVVFKW2fbzNtbWUth/3Pr69n3a2ddd+9v2vdTUU9PVVdt69/la1tb\nUWdjb/Pje2P/Z2/3593S2ePl73tz/2/n53tbUk9TX+ff3uvv6+Pv0dnPysXL13Nne+3n6dvf\n7XdpXF1dZ2tvWVlYV2FXY2n/6ef/d2/v39/d3eP3X2NaW2l3/+//b+9v9+dvZ+/p5ettb//n\n/3Nrb3d3729nbf/Zzt3r+93naVtYd+ttW11dZ2tv8+/j82drYV9jZ//j/29nd3N37/Pb3/93\nc3NrY2d77+dz93d7///73+H393trc/f/+/f/7f9tY2N77+/j6/fz9/v3997Z3e///29hZWv7\n9/f7d/97d3d3/3d3a2tjX11n++/t9/9zb3dvd/Pv93tvb21v/+/r93f/////d3f37/f3d3t3\nb3t3+/f/9/f3///38/f7/+/z/3t3//v/e3Nvd3d3d/////f7//97d///9///////////+/f3\n/////////////////y8=\n\n--Where_No_One_Has_Gone_Before--\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: multipart/mixed; boundary=Where_No_Man_Has_Gone_Before\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\n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\nl7Vry4B9aM+yKjifMosAADs=\n\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: image/gif\nContent-transfer-encoding: base64\n\nR0lGODdhQAHIAKcAACQkJNsAAAAAALZJJP+SbbZtJLYAANuSSZJJANttSf+2bZIkAJIAAEkk\nAElJSbZtSZJJJG1JSduSbW0kAElJJLaSbZJtSZJtbdu2krYkAP+2kv/bbdtJJG1tSf9tSf/b\ntgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQAHIAEAI/gABCBxIsKDBgwgTKlzIsKHD\nhxAjSpxIsaLFixgzCgCw0WDHgh8zchRJsqTJkxYdoCSokmHLgS8hqpzZMCbCkANxrtzJs6dP\nmD8HIoAwFABRCBIpQIxQ0CZCm0wNOlWoM2jCBQiwah2AoMCABAXAik1wgGwCAmStqqU4NeLQ\n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\n0CK3jI33rIAAADs=\n\n--Where_No_Man_Has_Gone_Before\nContent-type: X-BE2; 12\nCOMMENT:  This is NOT a MIME-compliant content-type, but your software should be robust.\n\n\\begindata{text, 269602880}\n\\textdsversion{12}\n\\template{messages}\n\nWhere no man has gone before...  \n\nClick on the \"death star\" icon to start the animation:\n\n\\begindata{fad,270222644}\n$N icon12\n$C 30\n$T 30\n$L andy12\n$P 0,0,20000,256\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$A 29,24 -1,76\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$S 216,264\n\"Fire!\"\n$V 260,260 417,242\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 250,158\n$V 319,193 265,172\n$V 316,199 290,187\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 321,186 187,122\n$V 319,193 215,141\n$V 316,199 232,155\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,102 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,102\n$V 198,102 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 241,145 179,117\n$V 265,163 179,117\n$V 316,199 180,127\n$V 169,120 163,101\n$V 184,111 188,89\n$V 163,101 172,115\n$V 188,89 190,110\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 136,162\n$V 136,162 137,176\n$V 136,162 131,162\n$V 131,162 130,177\n$V 130,177 137,176\n$V 131,162 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 138,171\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 246,158 180,127\n$V 169,120 163,82\n$V 185,109 204,80\n$V 163,82 172,115\n$V 204,80 190,110\n$V 175,133 173,162\n$V 173,162 181,132\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 198,108 141,158\n$V 141,158 149,161\n$V 141,158 130,154\n$V 130,154 137,171\n$V 137,171 149,161\n$V 130,154 157,133\n$V 162,129 162,129\n$V 162,129 195,96\n$V 195,96 198,108\n$V 198,108 199,118\n$V 199,118 149,161\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 164,61\n$V 185,109 219,66\n$V 164,61 172,115\n$V 219,66 190,110\n$V 177,134 201,167\n$V 173,142 201,167\n$V 188,128 256,143\n$V 256,143 195,120\n$V 175,147 147,192\n$V 147,192 173,142\n$V 168,127 113,103\n$V 113,103 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 146,98\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 132,80\n$V 185,109 195,52\n$V 132,80 175,116\n$V 195,52 190,110\n$V 177,134 192,201\n$V 173,142 192,201\n$V 188,128 241,106\n$V 241,106 195,120\n$V 175,147 234,175\n$V 234,175 173,142\n$V 167,130 113,143\n$V 113,143 171,136\n$V 167,130 160,153\n$V 177,130 210,140\n$V 190,110 208,94\n$V 172,105 172,64\n$V 154,122 120,115\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 142,135\n$V 142,135 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 146,66\n$V 146,66 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 171,109\n$V 171,109 177,130\n$V 171,109 142,135\n$V 142,135 183,120\n$V 183,120 177,130\n$V 142,135 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 146,66\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 139,55\n$V 130,154 175,116\n$V 139,55 190,110\n$V 177,134 219,150\n$V 173,142 219,150\n$V 188,128 193,72\n$V 193,72 195,120\n$V 175,147 226,80\n$V 226,80 173,142\n$V 167,130 144,191\n$V 144,191 171,136\n$V 175,147 173,202\n$V 155,138 130,167\n$V 157,128 121,89\n$V 171,109 165,69\n$V 191,115 205,70\n$V 184,116 247,130\n$V 177,130 191,172\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 156,170\n$V 156,170 177,130\n$V 156,170 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 179,200\n$V 130,154 175,116\n$V 179,200 190,110\n$V 177,134 221,72\n$V 173,142 221,72\n$V 188,128 123,82\n$V 123,82 195,120\n$V 175,147 120,89\n$V 120,89 173,142\n$V 167,130 276,111\n$V 276,111 171,136\n$V 172,131 164,203\n$V 153,136 74,143\n$V 152,114 128,56\n$V 179,113 182,44\n$V 199,118 301,141\n$V 194,137 215,183\n$V 151,150 97,225\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 204,106 216,100\n$V 215,110 221,109\n$V 231,98 236,95\n$V 241,102 241,102\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 214,99 214,99\n$V 215,110 221,109\n$V 242,84 236,95\n$V 246,91 246,91\n$V 221,147 221,147\n$V 207,133 207,133\n$V 168,166 168,166\n$V 150,161 150,161\n$V 175,92 175,92\n$V 192,90 192,90\n$F\n$V 428,132 377,142\n$V 377,142 327,179\n$V 327,179 306,219\n$V 306,219 304,271\n$V 304,271 318,309\n$V 318,309 350,344\n$V 428,132 479,134\n$V 479,134 520,154\n$V 520,154 549,192\n$V 549,192 562,230\n$V 562,230 564,265\n$V 564,265 553,296\n$V 553,296 531,322\n$V 531,322 511,340\n$V 301,290 318,321\n$V 318,321 338,343\n$V 301,290 299,253\n$V 299,253 306,219\n$V 527,162 563,144\n$V 544,181 570,152\n$V 520,154 590,101\n$V 549,192 592,157\n$V 578,109 569,68\n$V 590,101 581,61\n$V 506,90 503,105\n$V 503,105 510,108\n$V 510,108 521,89\n$V 521,89 507,86\n$V 507,86 594,23\n$V 521,89 593,35\n$V 510,108 591,50\n$V 418,224 410,232\n$V 410,232 409,248\n$V 409,248 420,258\n$V 420,258 432,257\n$V 432,257 446,246\n$V 446,246 457,219\n$V 457,219 447,211\n$V 447,211 418,224\n$V 425,233 421,238\n$V 421,238 427,243\n$V 427,243 434,239\n$V 434,239 425,233\n$V 507,147 548,197\n$V 344,235 358,232\n$V 358,232 346,243\n$V 346,243 359,237\n$V 365,248 357,243\n$V 357,243 349,247\n$V 349,247 354,257\n$V 371,259 367,253\n$V 367,253 354,257\n$V 354,257 364,267\n$V 381,274 374,281\n$V 387,277 391,281\n$V 391,281 381,289\n$V 397,284 402,288\n$V 402,288 392,297\n$V 392,297 389,292\n$V 389,292 397,284\n$V 407,291 399,300\n$V 76,56 51,65\n$V 51,65 34,80\n$V 34,80 21,108\n$V 21,108 21,129\n$V 21,129 31,153\n$V 31,153 54,167\n$V 54,167 88,169\n$V 88,169 123,153\n$V 123,153 139,129\n$V 139,129 146,105\n$V 146,105 139,76\n$V 139,76 118,58\n$V 118,58 93,53\n$V 93,53 76,56\n$V 34,157 47,167\n$V 47,167 82,175\n$V 82,175 115,163\n$V 115,163 130,154\n$V 130,154 146,131\n$V 146,131 146,115\n$V 146,115 131,123\n$V 71,102 63,110\n$V 63,110 65,120\n$V 65,120 73,124\n$V 73,124 83,123\n$V 83,123 97,103\n$V 97,103 87,93\n$V 87,93 71,102\n$V 73,109 71,113\n$V 71,113 71,113\n$V 75,115 73,109\n$V 73,109 75,115\n$V 73,109 79,112\n$V 71,113 75,115\n$V 75,115 79,112\n$V 39,105 39,105\n$V 40,111 40,111\n$V 40,111 53,115\n$V 47,118 47,118\n$V 44,123 44,123\n$V 44,123 44,123\n$V 44,123 48,127\n$V 52,130 52,130\n$V 52,130 50,135\n$V 55,134 55,134\n$V 59,136 59,136\n$V 59,141 59,141\n$V 66,142 66,142\n$V 70,141 70,141\n$V 70,141 74,143\n$V 74,143 74,143\n$V 93,40 112,42\n$V 112,42 142,65\n$V 142,65 151,89\n$V 93,40 80,53\n$V 151,89 146,105\n$V 147,109 157,90\n$V 157,90 155,65\n$V 155,65 122,39\n$V 122,39 93,40\n$V 93,40 86,54\n$V 146,105 163,134\n$V 146,119 157,133\n$V 167,130 163,134\n$V 163,134 177,130\n$V 163,134 146,131\n$V 146,131 183,120\n$V 183,120 177,130\n$V 146,131 157,133\n$V 162,129 162,129\n$V 162,129 175,116\n$V 175,116 167,130\n$V 167,130 199,118\n$V 199,118 177,130\n$V 112,42 105,48\n$V 105,48 136,67\n$V 136,67 142,65\n$V 191,115 185,109\n$V 178,104 185,109\n$V 183,125 183,125\n$V 169,120 130,154\n$V 185,109 177,125\n$V 130,154 175,116\n$V 177,125 190,110\n$V 177,134 162,129\n$V 173,142 162,129\n$V 188,128 173,142\n$V 173,142 195,120\n$V 175,147 163,145\n$V 163,145 173,142\n$V 167,130 163,134\n$V 163,134 171,136\n$V 220,75 220,75\n$V 215,110 221,109\n$V 242,84 236,95\n$V 278,93 278,93\n$V 248,151 248,151\n$V 211,172 211,172\n$V 176,196 176,196\n$V 137,186 137,186\n$V 178,70 178,70\n$V 198,64 198,64\n$V 169,100 169,100\n$V 192,97 192,97\n$V 204,137 204,137\n$V 151,150 151,150\n$$\n\\enddata{fad,270222644}\n\\view{fadview,270222644,2,0,349}\n\n.... by Curt Galloway\n\\enddata{text,269602880}\n--Where_No_Man_Has_Gone_Before\nMIME-Version: RFC-XXXX\nContent-type: application/atomicmail\n\n;\n;\n;\n;\n; This message contains a ATOMICMAIL program.  If you are reading\n; this now, that probably means that your mail reader does not know\n; how to handle ATOMICMAIL programs.\n; \n; If you were reading this with a mailer that had been extended to understand\n; the ATOMICMAIL language, this mail message would automatically interact\n; with you and take certain actions based on your responses.  However,\n; the language is designed in such a way that ATOMICMAIL programs can\n; NEVER do you serious harm.\n; \n; If your computer has a ATOMICMAIL interpreter but it has not been linked\n; into your mail system, you can run this program by piping the mail\n; through the ATOMICMAIL interpreter.  (In Berkeley mail, for example, you simply type\n; \"pipe <message number> atomicmail\".)  Otherwise, you can simply write the mail\n; out to a file and then type \"atomicmail that-file-name\".\n; \n; If your computer doesn't have any ATOMICMAIL software at all, you\n; should probably reply to the sender of this message to tell\n; him or her that you were unable to run this program.\n; \n\n(&checkversion 1 12)\n\n(defun init-ctrs ()\n  (progn\n  (setq newline \"\n\")\n  (setq summarizer \"mmsurveyor@thumper.bellcore.com\")\n  (setq global-survey-qid-ctr 0)\n  (setq global-nesting-level nil)\n  (setq this-level-ctr 0)\n  (setq total-questions 0))\n)\n\n(defun nextctr ()\n  (progn\n   (setq this-level-ctr (plus this-level-ctr 1))\n   (setq global-survey-qid-ctr (plus global-survey-qid-ctr 1))))\n\n(defun pushnesting (txt) \n  (progn\n   (setq global-nesting-level \n         (cons (list this-level-ctr txt) global-nesting-level))\n   (setq this-level-ctr 0)))\n\n(defun popnesting ()\n  (progn\n   (setq this-level-ctr (caar global-nesting-level))\n   (setq global-nesting-level (cdr global-nesting-level))))\n\n(defunq onelevel (i)\n  (strcat (int-to-str (car i)) (cadr i) \".\"))\n\n(defun apply (f l)\n  (magiceval (cons f l)))\n\n(defun getstring-oneline (prompt def)\n  (newlines-to-spaces (strip-newline (getstring prompt def))))\n\n(defun getstring-notrailers (prompt def)\n  (strip-newline (getstring prompt def)))\n\n(defun newlines-to-spaces (s)\n  (let* ((l (strdecompose newline s)))\n    (cond\n     ((null l) s)\n     (t (strcat (car l) \" \" (newlines-to-spaces (car (cdr (cdr l)))))))))\n\n(defun strip-newline (s)\n  (do*((len (strlen s) (- len 1)))\n      ((or (lessp len 1)\n           (not (equal newline (substring s (- len 1) 1))))\n       (substring s 0 len))))\n\n(defun cadr (lis) (car (cdr lis)))\n\n(defun cadar (lis) (car (cdr (car lis))))\n\n(defun caddr (lis) (car (cdr (cdr lis))))\n\n(defun cdddr (lis) (cdr (cdr (cdr lis))))\n\n(defun cadddr (lis) (car (cdr (cdr (cdr lis)))))\n\n(defun cddddr (lis) (cdr (cdr (cdr (cdr lis)))))\n\n(defun caar (lis) (car (car lis)))\n\n(defun cddr (lis) (cdr (cdr lis)))\n\n(defun caddar (lis) (car (cdr (cdr (car lis)))))\n\n(defun > (a b) (and (not (lessp a b)) (not (equal a b))))\n\n(defun mapcar (func args)\n  (cond\t((null args) NIL)\n        (T\n         (append\n          (list (magiceval (list func (car args))))\n          (mapcar func (cdr args))))))\n\n(defun thislabel ()\n  (strcat\n   (cond\n    ((null global-nesting-level) \"\")\n    (t (apply (quote strcat) (mapcar (quote onelevel) (revlist global-nesting-level)))))\n   (int-to-str this-level-ctr)))\n\n(defun revlist (l) ; like common lisp REVERSE\n  (cond ((null l) nil)\n        (t (append (revlist (cdr l)) (list (car l))))))\n\n(defun informative (p)\n  (strcat\n   \"#\"\n   (int-to-str global-survey-qid-ctr)\n   \" (of at most \"\n   (int-to-str total-questions)\n   \"): \"\n   p))\n\n(defun survey-multiple-choice (prompt choices)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (car\n     (car\n      (select (cons (list \"\" (informative prompt) NIL NIL) (cons (list \"\" \"\" NIL NIL) choices)))))\n    newline)))\n\n; USAGE:  \n;(SURVEY-BRANCH \"What is your favorite color?\" \n;               (quote (\n;                 (\"red\" \"red\" (branch-question-set \"red\"\n;                               (quote ((SURVEY-SHORT-ANSWER \"Why do you like red?\")))))\n;                 (\"green\" \"green\" (branch-question-set \"green\"\n;                                   (quote ((SURVEY-BOOLEAN-ANSWER \"Are you green with envy?\"))))))))\n\n(defun survey-branch (prompt choices)\n  (progn\n    (nextctr)\n    (strcat\n     (thislabel)\n     \" (\"\n     prompt\n     \"): \"\n     (let* ((ans\n             (select (cons (list \"\" (informative prompt) NIL NIL) \n                           (cons (list \"\" \"\" NIL NIL) choices)))))\n       (strcat\n        (caar ans)\n        newline\n        (cadar ans))))))\n\n(defun branch-question-set (branch set)\n  (progn\n   (pushnesting (strcat \"/\" branch))\n   (let* ((ans (ask-question-set set)))\n     (progn\n      (popnesting)\n      ans))))\n\n; USAGE:  (survey-short-answer \"How are you? \")\n\n(defun survey-short-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (getstring (informative prompt) \"\")\n    newline)))\n\n; USAGE:  (survey-integer-answer \"How old are you? \")\n\n(defun survey-integer-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (int-to-str (getinteger (informative prompt)))\n    newline)))\n\n; USAGE:  (survey-boolean-answer \"Do you think I am sexy? \")\n\n(defun survey-boolean-answer (prompt)\n  (progn\n   (nextctr)\n   (strcat\n    (thislabel)\n    \" (\"\n    prompt\n    \"): \"\n    (cond ((getboolean (informative prompt)) \"Yes\")\n          (T \"No\"))\n    newline)))\n\n(defunq surv-pkg2 (q)\n  (progn\n    (nextctr)\n    (list (strcat\t(thislabel)\n\t\t\" (\"\n\t\t(car q)\n\t\t\"): \")\n\t(informative (car q)) \"\" (car (cdr q)))))\n\n(defun formatfillinlist (lis)\n  (cond\n   ((null lis) \"\")\n   (T (strcat\n       (car (car lis))\n       (cond\n        ((equal (cadar lis) t) \"Yes\")\n        ((equal (cadar lis) nil) \"No\")\n        (t (sexp-to-str (car (cdr (car lis))))))\n       newline\n      (formatfillinlist (cdr lis))))))\n\n(defun survey-complex-form (preface qlist)\n  (progn\n   (setq this-level-ctr (+ 1 this-level-ctr))\n   (pushnesting \"\")\n   (let* ((ans\n           (formatfillinlist\n            (fillindata\n             (cons (list\t\"\" preface \"\" \"i\" NIL NIL)\n                   (mapcar (quote surv-pkg2) qlist))))))\n     (progn \n      (popnesting)\n      ans))))\n\n(defun ask-question-set (qlist)\n  (cond\n   ((null qlist) \"\")\n   (T (strcat\n       (magiceval (car qlist))\n       (ask-question-set (cdr qlist))))))\n\n(defun qcount (l)\n  (cond\n   ((null l) 0)\n   ((equal (quote survey-branch) (caar l))\n    (plus (branchcount (caddar l) 0)\n          (qcount (cdr l))))\n   ((equal (quote survey-complex-form) (car (car l)))\n    (plus (dcount (magiceval (car (cdr (cdr (car l))))))\n          (qcount (cdr l))))\n   (T (plus 1 (qcount (cdr l))))))\n\n(defun branchcount (l prevmax)\n  (cond \n   ((null l) prevmax)\n   (t (let* ((this (plus 1 (qcount (magiceval (caddr (caddar (magiceval l))))))))\n        (cond\n         ((> this prevmax) this)\n         (t prevmax))))))\n\n(defun dcount (l)\n  (cond\n   ((null l) 0)\n   (T (plus 1 (dcount (cdr l))))))\n\n(defun handle-survey (to summarize subject id qlist)\n  (progn\n    (init-ctrs)\n    (setq total-questions (qcount qlist))\n    (sendmessage\n     (cond \n      (summarize (strcat \"\\\"\" to \"\\\" <\" summarizer \">\"))\n      (t to))\n     nil\n     subject\n     (strcat\n      (cond\n       (summarize (strcat id newline to newline))\n       (t \"\"))\n      (ask-question-set qlist))\n     NIL\n     0\n     T)))\n\n(defun maybe-displaytext (tx)\n  (cond\n   ((equal tx NIL) NIL)\n   ((equal tx \"\") NIL)\n   (T (displaytext tx))))\n\n; THIS IS THE END OF BOILERPLATE CODE FOR THE RECIPIENTS\n\n; user-generated part begins here\n\n(maybe-displaytext\n \"\")\n(handle-survey \"nsb@greenbush.bellcore.com\" T \"RSVP NOW!\" \"nsb.greenbush.bellcore.com.1991.8.17.15.18.4\" (quote((SURVEY-BRANCH\n   \"So, can you come to the party?\"\n   (QUOTE\n    ((\"Yes, I can come\"\n      \"Yes, I can come\"\n      (BRANCH-QUESTION-SET\n       \"Yes, I can come\"\n       (QUOTE\n        ((SURVEY-INTEGER-ANSWER\n          \"That's great!  How many of you do you think will be coming (including yourself)?\")\n         (SURVEY-SHORT-ANSWER\n          \"What kind of *vegetarian* food would you like to bring, if you have any idea?\")\n         )\n        )\n       )\n      )\n     (\"No, I can't come.\"\n      \"No, I can't come.\"\n      (BRANCH-QUESTION-SET\n       \"No, I can't come.\"\n       (QUOTE\n        ((SURVEY-MULTIPLE-CHOICE\n          \"Aw, that's too bad.  Why not?\"\n          (QUOTE\n           (\"I'm busy that day.\"\n            \"I hate Star Trek.\"\n            \"I hate you.\"\n            \"None of the above.\")\n           )\n          )\n         )\n        )\n       )\n      )\n     (\"I  really don't know.\"\n      \"I  really don't know.\"\n      (BRANCH-QUESTION-SET\n       \"I  really don't know.\"\n       (QUOTE\n        ((SURVEY-BOOLEAN-ANSWER\n          \"Well, please don't forget to RSVP when you decide, OK?\")\n         )\n        )\n       )\n      )\n     )\n    )\n   )\n  )\n  ))\n\n\n--Where_No_Man_Has_Gone_Before--\n--Outermost_Trek\nMIME-Version: RFC-XXXX\nContent-type: audio/basic\nContent-transfer-encoding: base64\n\nLnNuZAAAACAAAIguAAAAAQAAH0AAAAABAAAAAAAAAAD///////93////////////////////\n//////f/9/////////f39/f37+/37///9/fr6+vr5+/r5+Pn4+fv6+/r6+ff2dnT1dXZ29vd\n5+fj6+//9//v///3//dv/2dnXV1dXV1fXVtVVVNVTk5MTU5PTU5XWV1bXV9r//f3/+////f/\n6+///3dfa/93b/d3d/f/5+fr49nZ3d3X3+Pn/29n///3//////f/d2dZUVFPVVVZX1lXWVtX\nX11bW1trX2fv49/b19HO0dHNzMzLx8bGwcbDzc3R193X49nf59vn52/r48/T3c/d119jZ9t3\n79/nz99ZT1/jY29X/+tdRm//Z0lLT01PSkNGW0o9SkRrS05FV0A9Q0tVWUlK3/9fV87Zx8/N\n2bzd68zBwMv3y8Ldzvf3xsrPyd3HyV3VzF3NTtf3zN/jSt93Tmtf71XrZ11VS+s/b3dLTmfn\n91tG3U1N511na+NLym9v19PKwsvZ29P//2PZxs5f78RLQG//TdlTuc9O6//nd13KY1v/2VtC\nvUHNO8VKv0dbw0b/SM9T11NIzlvZWb/n1VvK1WNXuv9FvzlPvzrB2UHHXUvEQ/fZRtlPytXO\nRWf3P0pZUdvTd8Q9RslGSrg378Q+vb7b91/A1V3/1VvFUUTAW0W+3z+4TU7AzUPPU+93/9s/\nT8K7PEZHRd+4vm/AWUc80znrumvMSWf3vknGvufZtkO5/0fLwj27zz/Asz/C20DV/0FLxS+5\nRkLC20jPwz2//0e8x0LCd0jNzzvT6+vLQUPd1zjjuFc/uD85wU8868A3Y74927s/91ldSFfd\nSe9fb3fd1z/f39dI08pHd85AWb3jQcHTT8fOPcnCT0XDz0xj2dFfZ9/F199ryuNfZ0TP/0x3\nPFnr/0lH2/fR0c/I3//jwFfX1ePf0//Z0cbLa8fbvGdjyGtX3+fdd2Pva9ffTufjTu/nY1nn\n1Vdr3UvT31Pd/0ld12d391dn61tKb+NPTu9MROtPVUVrQ0lVS0g/b0JI71VbSvdR2U9Z4+/L\n22PRyG//3dXfyszM68/Rxu/r293rZ+PLa9tfSOvK12f/Wd3j787bW+9r7//f5/9R60/TydfT\nzNfd3crJ2evr387H22Pv2W9X79Vnb2NTZ1dnV91K9+v/513X92drY2d3//9r42P////jb09d\nUVdXWVtNTFVMQU5NS0ZRSE5KTUxZV1X373dv39vR1+vf09fP49vf29vvzuNZb2fv2ev3b2ff\n5/fR21dn293R63fn59fj619VZ29r487X293Lw9f3Y/dRWXfZ72PKxMPBv8bJxcTLb2d3X1Hr\nW1tZ39/d9+ffVWtrU01fY1VP2d/Z1d/v901VSU9XTUk1ODQ8NTxKPDE1QUdCU9/TV2PJ4+tX\nV04/StvRz8e3srCvra20uLm731dFPzQ5Oz05PUzjzMXDubq3ubrEyc7rTEdPTzxGS0pD4+9j\nP/fTyDVP97hLVf+30W/PrLPO17e4XffP9z9Cb/88SF3I/0zR1dk/T189MTY3LCcrLjIvOE9n\nY8m0rrOura2urq2zsbO2wcK/z993W008Oz04LzU5MjE7QD85VfdfUVPT311r0crj68vG0Xdn\n519RQkY8Pjw7ODxJPD9F/99398Syvd22q6y1sqywr6+vsbe1wbvCvdPNy7vJ0ci/v9vLzMXr\n21tTS0M8OTcxLC0xLSkqMi4rLTUyMDA5PTY3Pk0/Rkj/X3ffy8TBxL23vLy5t7u+v7y8vr2/\nv73AxL++vLy9vr2/vsO9wcfGxcfIy8jd53dVSkI+PDg3NDg1NjQ4ODw/Q0lPTl9n43fd2dXV\n08vV09/j/2tbT0dBRD06OT09PT9ARk1VZ+PZ68vGvr+7uri3tbKwra6tra2ur7O2tr7Fx9Pn\n509PTkVAPDw5NzUzOTc3NTg4OTw6PTw8O0I9Pz49Q0Q/P0NLQU5RRP9Xd1XHX87JzcS+vsC/\nuLu9trG0srGvr662rLuytLXLvsPZzyrGrT8zw18zY808X3dVLz9IKD13PjhJPTQ9RzI9SjU4\nPkQ3Rk4/RFFXY1P/93fd58TRv8zExMXBwe+9xb7Iw8nCvMzCucO5vMq7xNu/z+P3a2dFY0tj\nPd82QjpNOlVJQldDTznJP9tBwEjB53fO1TzfvFnVxV9Ny+NVvtFPu8pN379J/0PLTUX3PFN3\nQTzNNE85XUs/Z0k859M+X8lbS8zTScfOv8m1zc68vsC6yr24v/+wU1O00V27XbzVstHO2cw4\nwe/n17bP1/drWU5HPjs5LCxBMS01Pzw9Qk1Tzl9jw9VX/9dvQ1k+QFNKQd3M6+O6vMPHv8Vv\n2+vP913NWdfP38zVwre9uK6zr62vsre6vHfOPEdHIyY0LyMlRSovPm80QmtOP9HI69HFzffJ\nZ0r/RD45Tj5DSudb0dW8vsqusNdIb+M3L0vfQefBsK+wra2tra2tra2tra2yvNPMyF85RM8t\nOjM0Ki4qLyg9NSwmO1NfLTnN3TxB09P3TUxIW0Y4MkJANjU/59lryrLvvq2rb0+9zC84X29j\n17OvrKysrKysrKysrK23tbiyxGfCw9dDT0o1NDcuLio+KicvNzMtNFc3Ql9LPTxP4zk2UedH\nTVNdP0hnWTxB69dNTdPIw8XEub++w2NPV8fO68q0sravra2tra2tra2tra+vtb7Ly9VfPz81\nMjA1Ni4sLi8yMDQ4Nj5DO0JKV2dKTllNWV1OSUdOUVNbb+tnXVFPT0dMTkxZXV3/38jBwry5\nsrW1s7G0sbGyt7m5vMK/x8jJ09HT3dXV1ePd09Xj3+P/W1lRT0dFPzs2NzUyMDAzMjA0Nzg4\nOj4+P05VY/fT083Iwb/AwL2+vsHBw8PBwsDCx8PHy9HT0+f319nT08vLy8bCwL6+u7+/v7/I\nzc3T629bV1NKRz9KPkBDPkFHRklVT0xGRT8+PEA9OzhHMj03PTo0RjxGPltbd83nweu+wru8\nura5u8W7tLzFzLvj09PG/13n/+Ndd19jRUpdX1FO69PbycW3vr+4srq5urW/xsjC1W9nW0dD\nPkM5PT07OT09PERGRU1XSExZa01FY01JQkg8Nzk3OTQ8OkM96/d30726vLKtsrWsrrOzsb2+\nwcvbW/dDTUdJPU5BPj5VRU3/5+/ZxrvNvcW8x8rBx9nV3/dPTl9RSl1jb2P3b2dRTkg+Pzs3\nNDI0Mjw6Qj9bU3fj2cnIu8DFvbq6yL++xcXIx9fd2edv53fK11/v481n1cPO1dvTzvf351lX\nTWNVU1lbX1dX//9bb2POV2tv70lGR1E/UVNMQE9XZ1VfX2dj1+vT2c/PydO/77/Cv9l3X99f\n90pITkE6TVU9Rv/rUW+/uL65scS2trrBzsW4d/9vTmdIS0YvLy83LS8vNTtMTkNCyL3Hyb21\nsryztbSwtrXB08G6xb531edjb0w7RkJJOT9JSFtf50TNd07PUWc67706NddPTzxrTj8vb+dL\nKziw5zA70cHbxbG+w62070jdwDgsQf9DRO++ycC0yf/d/0UxNUs8OFPjwL6zrVWts2M6189E\nLt/ITreusa6trcbGutE9U0hIRUNdb8rjZ1fZZ0k5TVM4P904NcnfMD3FW0xOSE08QzI9UzYt\nW0gvOUbOPz/Kz0jrxc5OyLa857u1wdPAt8e8s7S2sK+5vrm3yuPM0U/Xs87Rua/A39XXPjg6\nMTM4NS87QjYvODYuKyoqKy4qKDhIOztvv93Au7eyvrnC18K6w7vItK23ta2trrvFrK5X77a4\nxWvBsb/Cys3C0UE+Nzk3Ki05Oz85StXfWU1ISzouKy0vLCoxPD9FXV3Prb43yrVPRWvfxufJ\nus6svbyssd+z0dtfPUM9St1bTbPEz6+7ubXKuszDz9nGz9XOyMXGb9fZ/9s7R2M/MDU1MD0z\nNUM+TElFY1NHRkZJRkdX/9fM68bGv8XLv8vIx8nHxMzOwcHJxsHGz8vO99/M33fT/2/fZ1Nb\nVVFKR0tDPUU4ODs4MzU7OTlCRUddXWvV2dHKx8K/wry8x768ysfCz9HV2+/v929VU1tIS1dN\nSFfvZ3fr/+/d71Vn/29VW93j3c7MysfJyM3O0Wt3b1lOTE5VU11Z/+f/d9nX593b19HTyc7J\nvcHKv8bO29V3VV1MUVtXV3dd79fvz87O0cbGy8PHzMrH39H3b2NHSEpAPDs8PDk5OTg4OTU3\nOjg7PD4+QUNGS0pVW2//49vNz9XO3f/V4//R3dXJxs2/wMjHs+PftrzHxMrFur3Rxr+9xMG8\ny8O5wcXGxcXGxcfdwLpT57lLLbRPLDxdNS42PTAtMjY5LjE7OTQ6SEFASN/3Z9PJzcnIxsbI\nxb/Hysi9w8y/v762tbm4ur7Bu8rKyNHbb+/dT09rP0VFOT9MMzpCPj5GQkZNY0BHZ0RHXURA\nWUtIT01BU1U9SGNFWU53V07b1ePGvr26ub+3u7y1vbi4vbvBwb/EwL/O68rTz8/jzdHMzt/r\n1f/n509ITk89OTo5OTg9Ozw/QkNHQU5VRj5MRkdXa1/nzdnPvtFj28jI7//FzP/Tu85MzLvE\nX8LDXcq+x1vBvM9DQEdL39HX08rA011DLy8wLCgqLTVVy7u6sa2xtcs+NDUvLTE3RuO0try2\ns7W1vcfMyclv58nJxLi4sMK+r7vbyt1n1+Nfd0dbTDlVSU1jZ8vN1cb/TONdPzg6VUXfzz0x\nSUpPXVtTR1dbOy4uKi42OURTxK6tr7G8x8zvTklPa8zAxc3vwbe8vcDIwr7A3V1PY93vS0/H\nv723ubnTX81HKSs0Ly9XRUHdt89LRFVOVU9RR1NNRExLU+fHwl2+v1X/zk5KTm9r2b61vLy5\n1WtbX+v3v73Dv87ZyL3Dxec4LC0817yvsMPRPzIxNDxBW/9ry7S0srfHY1NKOjpEPVnvY19I\nPzpERUtANjzZSlFvPDZjR0fL37/HX8HjXbG9vLPVssHTuMjfucnEtruvusjZPiwuLDhJY9HP\nU01XvLu7wFEpJCw0za+4vsLDuLXPNCMlMMSsq6u7d0E8QEpd99XJys9dUUk/TlVOU1s4PUpF\nR0xVUUxXd8Kzy81Xz05nrK+6u0tLsbu2rMBPPTIuPWdX2Vk5RV1vQTcyLS1N60RLPjA6P0rn\nyetZy7q4ra20w626xLm/vrmura2trb1fRT9N2c/P1f9XSUE5MzU4PlVvT1E/Ni8vNjtGRj80\nM0FGSltrQUtLTFdI5+fLwV/v28C1trCzwb6ztb28ur3BubW4srW9z2dfd9Pj28LBv7rH2WNH\n1cbbvcNMLCYpKDK4s7vCNiQiIis4Z9FrXUg1OTs4Pz9RUT1JOzxASGdv72NEQ9s8Wb68/7ay\n4721vMStrbG3rbi8r7W9sK+yu8DjWcC/xb6/72/Nw9Hv199OSj0/PUJOVf9nM0z/Q0/VTDs4\nQDYsL0lNY9X3Vzs8SDY1OT1Pb+9JNkhjb9drQzc5Sv/369X/X+PDvte+ts7Ps7rEvdXXta+t\ns7/I38m0t+NvT0/ny8bO38jLwbrL1+NNV29jV1tFPVH3Tj83Ly44RE7Xt7rTWzYvN1XCvbm0\nxcvXW05GQFFPSl1ZST86PD9LVUlBQVXj2+NnQUBO68DZY11f18rN4+fn3+fF02/Gvr7R/8zP\nw7y80cXCyb/HwcPAvc1n/3fnx9XT09fBa0ZBQv++uNFJW8hjPz02Lj1RWz8/a8VfOj0yKC4+\nMyY2yNNCR2/jY2/ra2/Nwr/f28O2tMTHvrCxrrfPtbW+u7O4yMy8vtnEvMTIxMdvR05VRklN\nSjo6PkEzMTs+Ny8vOzYrKiwuLTM2Ny86Sk89PUvRye//ysW/ubq+u7Ovr66xta6tra6wr62v\ntby9uLO3vb3By9Pb605fb2ddY1lKS1lfSUdKRU1IST1AOz4/OjYyNDo4Ojk7QEU6QEQ/S0g+\nQ0RJSkxVV09O511NW1dbb1vO2c3Ky7/Dwbq/wcDKwr2/vb62vcC2v7vFwry/vb3Rv8Xnv933\n2f/va/9vT2dZSltITl1CXT9ETD1DQD5OPUJNPkJBNk84QE09QVlLR3dIXXdny2v/y9VvxdXn\nwcrHxcbMvsbIt8nDu8XHw8zryt3d79/ZV8tbWWNTU29NX1dOb1v3Z13bX+Pn3e/O18fL2cXj\nb8jM/9PPXczVWd/vV2vnUVFXT0FTVUBPWUdNSEVCRD08PDk+PTo9Pzg6Pjs6Pz5ATk5ATFFN\nUWdba9vb3dHJx8K/vru3ubWzsbGurq2tra2vr66vr7Cvs7e4u72+w8jM1d3jd1tPS0ZBQT8/\nPj46NzU0NDIwMDAvLzEuLzEyNTQ4OTk7Pj1AP01TV2Nn99/f19HOy8TFxMfFxsDAwcC9v76+\nv7+/xMC7vLy+vr3DvsbFx8/TzdPd3dn3b2NvXWNTTlFIR0REQ0Q/QUNJS0pdWVtnb+/n///f\nd+/r39nn2+vv92dnXVFXWU9XV29dW2dnb+dr99nV29fZ2ePv/29vY//vb//Z793b0dHP1c/T\nzdPZ21Xd1SqtrDwjrqwvLa2sNDK4uEkx77rRMWe8VzDTuj4xybtGPN3PY0vn0d93z8jV583H\n62fV3VFMS8NdPMjdRtFNz+vrSdm060qxzWutUVWtwziurS6+rHdHsVM/tl9Eb7o+vLsxvb5I\nML3rQD9v7z5H0T8uP7czNEXXPjw5XVEtR10tR+9VPTXv9znZdzeuWzbOu293xe/ZvMHPvky/\nrbxF562t6zStr0i+rsbOta3vzbews+tJurTJyELOtF0409dE71tALU68NShCuzUqMuM9Lz0+\nLTZdQyksRWcyKS/X5ysv004ySt06Q8q2Vz7DrsFD3bmv3cy3t823ssNfwK22Z8W0r9v3vLdr\n0bvFW8i8vFd3urnZUb2832PN2Vdbzuc8Qs3jPDVG31kuQu9HOktXNTx3WT49T9NZNFVvTmdv\nVffO0+9vzsTL3dHCx8nNwL3GxbrFzr6/083HwMpva8lvV2NNTGNXPj5LV05CTmfvSz5Db0s4\nOktCOjg8Ozg+STc8X99ZR1fCx0nPssvZvLvA472vv/+/ucbrb9nDV+vFzcm8u7i6trK4yMHB\nz0s/Tk43O0I3RXdvW2/Kw8jd28/ja1s9OD09PTUuQD80OV9LTkv3yf9nytffy8bGxsu/vs7N\nwr/Dxu/f0dlrWdfJ71Nj9/9MR1VFNzxLRTE4TVc8P2/PUWPI0WPvxsf3Y7i51/e/usTVxL/H\nxbm7v7+/vMnOwcXj1d3r70xVZ01XUU1ZU0FPSzo8T0k2NUtvQzRATEk+TW9MRVtdTElPV9vP\n62v3u77ZybzFzsPDvri5t7S+xbi568e93UVPvtk6SsDrT0TMu01CyE4vNk8/MThjVTo9X9tA\nPURPNzRESTo/WWdHP0rXTkFFystMa8fXT83H11/Zsr7XurG5xLe1vt+8tr/BtLrVwbeyv9u6\ntttZxtlTQd13OD1jTTE3SkgtL0k4MThHPj0/21VI3brX/8fAxN3Xw0k4Tu9KSv+4u99OU2NK\nMy9LTUVd/1n/287d3b28zc7j/9tVP+fFw2fNu79vx7rAwsvFxMzjwc3vyL/C09vNzNPbXWfv\nQ0dCPD8/Q0ZRU+9VRGvv51VV9+9FS1dHSVX302NX9z01PEU8PkJZ51lDY1tKTd/b487d6+/N\nx77HvLi5vr++v7y9z8nEvMfByb7FzczL111KU2NDV9lKTOfvSE9NTv/nY01Z23dV3+fvxMhn\nZ0RG3WNHX1fja0RGV0k6S09XQz7JWz5T/0VJRj9ZSV3RX0pbb3dTSs9348HOY8O/vMVTy7bT\nv8PXvrvJ6/fZv8zn09W0tsbNus/GxmdVY+vvQkdvdzs2OTw3Nzs8Nz4/NjZTP0FnSmvnV9Pb\n0+tn28ZKW8fna+fPzk//wNfj/9m9vsrKub/Gu7q8vL23uOPIvsfj48bBzN/L1efMTErI1UhT\n710/PU1OQVlrTzs4PkQvPFFAPUJBQ0A0QFdB//9rRllv1VFNX9XM1c3Nwc7GxtXZysnv67y5\nyFfO393O009vy/9v5+vn3dNNSdPHTU/300o+Y29NZ8znVc7L61PR22fd49vJt8zj78G9yc25\nvdHIvs1rY89v486/10rn60xJ3e9JTk1MOzlAOjw2PFFbOD1AQk02Nj5CVWddV1lbZ2NP92/G\nzePGvbzK1cvK2efHyMXLw8rbyr/Nd+/nyHd323fT2993/3fb1UxZb9tPT1vT3Vdrb1dT9+dr\nX2vTTVPT90ZJR0VTR1NMX9fvV1VZSUpvd1//z8PXTOvN79vN0cLA6+//Y29na2vLxMfV09v/\nd/fPzMnV0ePr319KV93P91vb7/dnTGNjd+/f58rG119T705dV0lN30o9SllMRk5ORT1n60Vd\n9106S19bSVvV09PT23fPx8rC3c3Ly9fJb+u/29vHxs7My/9Nb9dfa2fd18rZ/2tv3XfXX2/Z\nTmfnV1ffV/dvS1lVT05ARW9NZ29NzNlOSlFd301HW1lb/8//WdnVa1tr92d3/99j/8jfb99d\n/83P38/Z093/0ef319Pfy8Z368/nWUdNd2f/6+dda/f/909Pd9/ja+Pn19POb+ffa+tXX3ff\na//X61Fjd2tXSktbWU53d1VZ987b49X3/83Za3fVwb7vZ+fd591ja+Pn629dP11dT0n3d0pO\nZ2tKb813W+trb9Pf/+Pd12/j31frzNX/z9HbY13r4/dTWfdvTm9ZSFld2/dbXXdbUWdd/1XL\nxltX1+9v79fH0d/O/9ffb9X/SnfdXev/28//6+fn2+/rz29f1c13/+9r39Hv2eP/42fnWVNZ\nY2NZW1vr1d3/b99nWf9d99HLysXK1efV31Xj12tX2d3/Z2dXSE5ZTE1FR1FXTU9HTElTY0hG\nUe9bWU5dd193/9nf19Hnb/fv99HZ79PV2dXXb+/j58nL08rV18PH08rG173JzsnO28vCxcvZ\nztfvT2df7+tMSEJHW1NLSUxZVU9JRUtVTU5RX2P/VUdf31tf71tbb29VWVFMd1FKS11bSEtZ\nX1djU1Pn/1tr52f309n30e/v0dfryc/VzsnH093P2dnMy87OysHHwb7Cvb6/ysTGzMvd59/d\n3dn/X91fa1tVU1dvZ3ddT1dRT0JAP0tPRj9ETVdOTUpISltTSEVET1dbU19XSl9ZSkhFTUlb\nWVn36+fTze/XxM7b18rIwr/GwcK/vrvEz8nNy2//W1VjV19ja1tTW1Nfa+//b/f3//9vb19V\nY9vf3//v59nj49Xf28/P4+vX3d/fa/f359nj/1tjX1tbUVf349nr19fV19X///9db2tXVU9H\nP0E+RUVKS0lMUU5dTEj3d3fr3etrW2/nXVdd29nja+/n5+vn38932dPXzs7N287f1dvPyNHM\n09Xr92dj4+fv4/d39193XVtdX2/f/19v5+drZ/9v599j9+f/z8zOx8rDycvOx8nLyMnHytPr\n5+tnVV9jWVNZW09KQT9FRzw+Pj5ERUpOTVlLUV9JQ0pNSUlLTVVbTlln//93Y19ZY+ddZ+/b\ny9XV08rH19/b59XKyMLEzsXKy8jNzNfn193R5+vRy8fEw8TDwcbDxNHj393Vzszb/29ZV2Nd\nUVlNVU9TVU1NSUtKSkVIRkRHR1dbXVVOR0tfSUhNPkJRU01NU19rd/fv/1dv3dfOyMjLy8vf\n293j59XR09vf2d3Z083OyM3PxM3My87Jzs7Nz9nf9+/j0etja2NjZ11ZUVdJT0pVU0pOSERD\nP0NHSUZCSUpNSUZLS1drZ+vn783MzdPPzszN0dPJ0+fO3W/r09fV3+fPyM7b2/fV1dVv19PP\nzutZV2d3Z2tra2drV1tfW1lTUWNv39ndTln3W1lXSVFjY93Z7//FyM7n9+/V52N3a+vRzMvf\n29XV1eN32dXP2dP349/j43dTXV9bQ05GQ0tMV09RT11bR0JMTkxbT05MW/fb2/dv5+fO29/d\nzM3PzM/R1+dj39Hj1+dbV3dfWVVn69/r52ddT13X0+Nn59vZztXrX9vR291v3+9v09Hfa1/v\n42dV2ePfY/9ZW+PR0+tb3dfn499jV+vvb3dnd+N3b9fZ71VET09da1lOUUtXT0xNSFtbX1lb\nY2f/X//NwcjMz2/fybzI0dXPz8rjVV1r485PR0tVXVtJRU9jZ+t3W+/n411jb+vZ1+NrZ9vO\n011MTmfr2c/Tzcvb32/j3+fV0cnFzdlv41dX91tKWWv/409JU1t33+tNT0RGUVtX/+tKSERH\nSVtRWV9La89fU8/H1dvX39/rxLm958C6v7W90f/RwsLfW9nNydH352/DzF1nSlXTa0JNSERH\nPjw2O/9XSDtO29NTPEFHV93/V0Nb91NbS0JRXcfCy8Xn38rv577N09fPzc7LZ93Rx8HKvb7L\n39nn18bK/+dvd9/N3VdRWUhDUTs4d0xNu1syMjBVzlVJWd/GwNk/MjxOwbxMS0/T07rHb7C/\n69lVPtGuvciwwk6+9z5ESOPIXzRRvv9vSzw+47+/zltFx81bw9lJT79RMT9fRmtTU9VZMdfb\nPES5az/F51m7vM7byOvGvVXjv2fXzTj32UfdTUU/Rt9DOV09Y+NMvj882///Oj3HVdfZS01b\nwbnjd8RbvbzB00mssuuvT0+us7/bQsy7vF3bz0xNtmMxyL430esy68frWWc9PlVTMVfKK10/\nMEhrNjLvNTjLSzV3wDdXzWdjwlvGMa1bvuM/vt/IzetXvs3HwkC32V3V1z9X177LyddMd99j\nylNrPMnd7/9rZ1XIxUlrY7tbv+c8tcvPY9nJT8a8PUi5U8q9XW//zuPHPkxTvEo4uTk40U9N\nP0Q7W7cyM2ddSf9vMzm6z0tOQC21sDxjyUjHusw8Ubi3ur03Nq3DUUhO3bC6ySVA9+vF5z7J\nvkz/zT5fW7xVRMNIPcxrOsDE3UxZRk9VV0pb10hKZ2vXQ1PIyLi8PFu3x3exzFe7xL7GycFT\ny7Tdzbo3QKzNML3MMj9KZ76vvzNn5yMnQC48trzfvr5NTOf/yr5EO85fz77BXVu0zVFLJz6v\n3y7T22vKti8luq1ET7Ur1a33Kz63rTw+RStLvNs3R99fd71FObGuW7/rMretvD08vbdd6+/P\nr8ROYzpOYz5RvrisrLO5999fNEzvRMEyR7g7X73bLy1A2yN3rc05P7W2NyoyNrOuv8vZtbLN\nOzg+b9dvPjr/tb/rZ8XKyb7GRU7Nxzorx8ZRQVlCOkjJ4ztX389rSC5RtLfDvb69xOfOx8zF\nLjzDubtjTz4qLT9VPV2urbmvu1Pjz++8dz7f0b671W/Mw7rZNzc0NDs3Ki1HZ99jPEVdTEdd\nRl29s73PTV24trrHx7y0sdfVV1PL2UosOuPJzkQrO7RXOTZLuqyuua+4tbfDyLzZ98XNyMvI\n41tBOjkzNC4zMCstMjg3OT5DSkI6ODhHwL7C51drzdPIvsW0wri7wLq8zv9fSbq/07ndUXdj\nWbO3y7W6ta+str7BXdfXX+fd2//VO09fSVc9LS82Li0uKzA2LiosLzc+S1XrzevAy8e7ybe3\nu766trOxw8PN49nVWV9rUe9ORknf3VfPV0/Pyc+2ub6zwbm/v8e7vtfZUVNHTU8zRTo1Pj47\nN0A1MSswOjQxLjE4QVVn3by2rqysrKysrKysrKyur6++xc/jTF08MTEpKiktLygsMi89P1c/\n19HIvbyxs7mvvb/Husu/zedfUV9ITUVOQkk+Qz85Pj41RUVGREM/TWPdwb+2rq6tra2tra2t\nrbKyu73DyF9PQTg5LCwrLCwtKiowLTQ7PkZbW9nFu7itra2trbK0sbjBzP9JPT43Oj0/PDY+\nOUBDRUA6PTQ5NTE+PDw+QUlvwrmtq6ysraysrKysrKyytriysrS/70w/ODYuLSwnJCQmLDE2\nQEDdXfe/uq+trrevsLOvuLC7w8/dTz5CNTIuKiYnKCkrKiovMTM9U2PLxcG6uK6tra2tubm0\nuLOwtLa4vbq3uLW2ur7Fvbe5wru+w8xbY1P3V000MCwrKikoIyMjIyQrMD1NTmfZxLWurK2s\nubm5uLOzv8PO1ePN29PvVzkxLi8xMjIuMjU9Rv/bxry2raysrK2tra2trrG2ur7R51tFPjkv\nKCkpKCYnKycqLTY+TN3r07uvuLKtrq2tsLCurbG0ucHDd01KQDYyLiwzLi81NzU6P0JPU0pR\nV11d493PxsfGybyxtrq/w8PHzMzO39fEa7+0v1nn1cnNwL3AxcO9td9vd9fPXU9C3W9DNDA0\nKyMjKDI3OFHFwrm7sa++y8a/tr7CvLKusK+ytsfbTDstIyIiIiIiIycvOm/Py9vDtq2trq+t\nra+xubu/tri5zOvN50Y7KigvLCwxODpE58Wxuresq7K8u864xN22s7y3vc+1vPdJPC8sKCQu\nPjA6TkVCQ0rrTTMvLjsvOUtnzri1sbbAvLHC513fwN3/ydfBvrq3xru2v7u6tcHfX1dVWUJL\nRTZAY/80MkdINS4jKCowLCpCZ7vBrbaurbS3t77rw8O7vrmzra+ttb66ylc9LiojKSclKy0q\nNkb/vK+sq6usrK6wwN/J70VRQe/r/1NrTGc3OSszNikkJC42PTlRwK6svq+svqyuvsy/u7TI\n0bTfu8JJTFFLYzguOCwzOCg6SDJAP0bb693FyK24u768s7PE0d3Xz/fFuLjVtLnHrbi/urS6\n28/Ryf/rTEvCzDk3LzM7KSMvYyszSSw/40Qv98pbUTf3WdPKTcKzu7OyvbW9x7/nzUdKPuc4\nMWPrX1m9ucF3wj9M3SlBOydFxVPjZ7z/xq3VvaznS61DzUGxRi6tuzS5X8RZ374o3UEryy8z\nxlPARdnFStG0M7XLO8JfQLjvX7o/z7stu0g1vzs33zRBWyu9NbhHT641rkwvrkd3tC6xwePf\nsz9vrCesKzmsM7yxNqw2Ub++PMvKNawurj/FSLY0tOc51U02v0I81TXJQ+suvi7B0zPbYy++\nTz+tONW9QNe6Mm+xL61nN60sb602tK4+tWdBrS+/xi3MySyuNmc/QD3jN7Uqryxf4zW9TTuv\nLcrBP607xa4yrev/rz66zkfj2z/EyU3Ru8rT68zKRMPOSc///z/rW0xKOcs6W+s7V9NOZ8Y2\na9E9b0VPV13JyUy/U/fTxsi5PK09u8PJua1dsNXKvOfCPve/Mbc7/1n3Sdk21180xTczvyxn\n1yq/My/ZMdVKM8MyN78tV1szxDJbuS2/VT3dw8ay77TLxa7Hxq13rcC9sLdbrT+t2V2yY7yy\n/7xfw9vjPMRZRVHF00PEd1HNS85bTevMOLg4Sc8w9zA6UzlENk88QEkzUz9nNMlH389K20bH\nd120R8K7NbfTP67nVbQvTrQvsUDXV7FAtV/PvNVHsDbLy0nFPMRVY9tHxTg/vy3KPD/rxDa2\nMN9ZZ0S4QblGu9fKXVvTSdvj1T65RuPGb0u6OrxPd3fnX/dV5022W9W9QbRPxWOvQLrAwL7O\ny8i8PL1LtEPXV7k7xDjCO3fO4zq+PlnRREPXO88vQ0jrNmc9Y009RUkvuTRHdzpLPMY5TVnN\nVT21U9XXyGu34768xneyXcLIv0a6P7nV18JXukTvtj/MS89BuFtLv1PZW9tR091CyldDvj3B\nO9XPS9vKOsc7xz1jzTjTUePdVc8/skG7Mt3vb9k/uzq0U9/FQ9tB2c80uzu3OrtLzO/XVdlL\nPMVE107HSl9r3WM9W2dJyzGwLr7ZRtF360++SuPf40PjX0rD3z26QcNIvz+9Qe+7O8LvVbk0\ntfddyNndb0C9VbtVxW/TX09TVUhJ70VXY009a1lH/0rTTfe/yPfD47tnxb+/z7fA2bLTXbVX\nu0m/ScDOY9XOV1fNPms+azTPPTpfOT9FMFs9zzdJQu8+90VfWfc32TjRWW9vV9dv/2u/TblN\nyEK+90K6PLhNxM5DuetVvefbTLjvw+O7zve6v0fDVchOtD+/013CM68wska9T8+/QM5HSc1R\n711GzULKNboqzjvjTi+5Mt1vX0FK40ZX68pfXbtE28fKTsfdZ1XLVePN0zvX91M6wkxOPbg5\nRMI/zWO9SrnDxNXvvlG02f+tWbhPvd/fs0i80bpGw79Iv0vXQE9nMMs8QDZbPUlGMV9ESjnr\nTUVKWzz/70dv28NMzNtFvl/Z49fFXchvWefRa1XFVdlXulXTvc/Rzs3jwc7RyMzIwcTNv8jd\nyMm/19Pf6+dnS2/nTGtPQFlFRz9DPjg6PjxCQEJJSmNM30Z3a2dM7+ffR9/X21m81dPLz83I\nvVnTxM9O3cpTxV9nUbxvU9PvSXdVX0bfR+vZZ8M/vVPNTb8+698+/1e/POvJ28PEuc23612+\nSGM2TD1L9zPFycK/w6zjrLGu17RBz0dVIy0vLykzMDk/Sjc9Zz48Ok1OZ87NraysrKysrK2t\nusNROSYnIiIiIiMpLjVGu6+srK2tra2tr8PXXz0xMS8/SUbfv763vK/Gv8ZGL1NELytBOE9V\n38mxr7q6rb3Bzrj/t8bHtbOzu7CzvMDXT0Y0JiIkIyMjIyMjJis5WcK9rKusrKyssrK0wsnn\n38bbwevEuN9nusrXwkdTzM45Pci+Qbq7tbi1zsW541lO10ZL5+vDvLq9t7W+y9tRNCwnIyIi\nIiIiIiMkKzRLa7Szra2tra2tra+zvv9n31tRTVv/d//n12PXxc/Da8zLv9X31b/G18zByb7K\nxMK/w7/Gv8TGzt/O0Wd33VVrSk0/PTsxLSwqKCkpLCosLzEyPVXXyLazr6ysrayusrjBz85T\nQz44OTc2NzdHRFNd3f/PvcTn08C9vcG0r7Cysbi0ubnI519ZOjo1OzxHTVn/b13vRU9FPS8u\nLy4rMDA5QFdb/768tbezrbKvs7Kzt7m8v83Pzd3//1lIR0M/NDIyNCwvMTYzNz1GWU9j1b66\nvbGzrrK1tbq9vdfnY2tOSUlBRklBREFOPEg/TEJMTEljd9XPvbm3t6+1trW5u7zBxsLD1b/J\nvsvH5/fnT0lJOjcvKykoJyUnKCsrLzc7OUz3/09v0cnPu7q2trW2tLy1ub3Cw87N/+tv6+vd\n59HjysLOyb61ysvAv+/3zMzZx8nHwcnFys7Bwcy9x7/J09Nra04+Pzo1NC8uLSkoKSYjJywp\nKTA6OjZT2dV3u7extqysrK6tsbnFvshvZ+/rX+vIzMzEwcTOwc3IzHfdvtXv1c/KZ9e/07+5\nu8DEzNNXV11fS1dn51lTXV88PjwwLSwuKSgpKyskLio0NUZV983Nx825tba8sqystK2vrLO4\nxcPO90xIUUJFV0hn39HTzsXCzdnEU9W/3+drzOtP08DAt7Kys7y9u9l36+vfT2fC0V9r3Ugz\nOTwuKjAsJigtKiMsNjA9StPvW8+7xc3Auq+/r66vsrnAxW9RQzo2OTg9PUNZ5+fKyMHF09vj\nTT7V31E+U+tPZ8m7t66sraysrLm3r661sK2tsK6vvc3TVzcvNSwlIickIyMqKC47REJLY8xT\n0e/AxcPBtbi1wr/dXz88NDQuNDA2OEZVU9HNxtXRzv9R281JQf/XXee3uryysbm6sba2sq2u\nrq2tra2vsLzLZ04/NDEvKSYmKCIrLjgqPEFLPVnO3dO/urO9s7u9ys1jRj0/PDg9P0FDTExj\nTvdTTU1DRztPPktMUd3jy8W6s720uru4urK0rrGtra2tra2vtL3L3Vs+OzsvLyouKjcsPjlE\nPktbRkbv3dvjtLm8ubG7xtv/QDswMi8tLjQ1NkBFTD9LPjw5OzkzO0s/R9fIxL+usrGurbKx\nsK+xrK2srKysrKyzt7jMSm9INi80KyosLywwP0M+S9dVR2/v/9fGvLq0tLW7vtPbTUU7PDM1\nNDU0PTpGPkxISz0+PT41QUdFRc3XyL2vt7Wvr7aysra4sLWztK61r7m3zM9OSDUwLiwrKist\nLjA3QUBXTtXI0d/Fv8m/t6+zrayttLa82U9JPjMxNTQ3NUU/TUxXR05EPTs7MzpERUlf08zN\nubnAvLS5xrO3u7qvr7GzsbG4wr7NWzU1NTUmJzA1KzI7Ty493/9BRr3rd8qusruura28uLTM\nT013RDNEU0g/V91TR0dXOTI5MzAyPjZB3eNNb7rZzbq3vMO2vMW8uLq2rbK1ubG6x9FZSjIz\nLDE0LDQ5PDJNRVNOwsDvu7u4xrKsxrfIrMPGtrvDyV9bMzQtMCktLTgwOU/nX8zrzkxXQ0M/\nPTpJREjKtnf3v7nv17Szvr21usK7uMC1rbTIuL7Rd01JMi4tKjEqKj0yOT0u32NB48S+wL+t\nu8awr7fKvLPHY73B3V9r7zw2QDgzMTc/PEDr38/DwdVj3e88QUlAPDw0VbxrW86vvdG/rF+u\nvbivwa25ra25vMDrxkItyy8pVzw0KS9HNyZEPC8yukPGz7evSrmw289Zvchb27lnudPrdzVJ\nNSs0NzJBT/fP57i93dtXRzg3OTw1S19T666sw7Wsrry4tb63srG1rKyysLG2y1dPSDsuLC4w\nKy8+LSg2NzUuOltBRsHT67muu8HBs8LOws7Nyr6+yL6+y29VSjs8PDk8REZn3dvX4+drUUU+\nOTo6Oz1BQUlj19PbwcS/tra4tK+ur7Czub6/yf9nW0A+PjgwMS8uKy8rLTE2Nj5DT+PT08e9\nvb6/vL68tbW0r6+wr661ubi8ydHP3+/bb1tbWU9KTUxDRkhKSEpNS0pNRkFMSkVJTkpJW2/3\n48rHxMDGycbIztfXd1tXSz06OjIuLy8sLi4vLzY7P07v18S7srGwra2tra2tra6ur7O4ur/L\n1e9LQkE7NDI0NTQ4OjtBTFdXX/9fX19KVVFCQ0lGRGPd2cm8uLu1sri4tbm+v73Izc7VW1VR\nPTo8OzM1MzIuMTU0QUh30cS7s7Cvrq2vsK6vtrW1vsfGz+dnX0w/OjYtKyooKSkpLC41O0BT\nZ9fOy77Fvbm9x8fK39fRz9PGv8XFwcvKxcPTycjJzsvK693bZ01ZV0VAQjsvNDMuMT47SVnv\n1cy8urWzsa6ura2vtbW3u73Cw9vvXUM5NC8uLC8tLjQ8PUJVY93PzcjRvsLR0+9jTF9bTevR\ny9HJy9nLzcvZzcrTycvR5+NvT0pIPz86NjAvLi0sLS41PUhP78e8uLSvr62tra2tra2tr7O3\nvsHLY089NjMsLCwsLS4zOD1ESuv/09PFytPN79lH72/32dXFu7+8vrvCv8a8wMHCvcvV09tP\nU3c/PEA6MisuKyorLTE4UVXvzbi8tq+trKysrKysrq+0t7zI4/dbPjUzLysuLi0tODc6Ql1X\nWePJz9vT71lrb0gwxb1B2f//tcHbu8+6tcGxvLmvvcnTz8vZZ1E3Pz0uJyQkJi8xKzJHY2/B\nzbWtrKysrKurq6ysurO6xGdTPTg9NzEwNTU4Oz00N0BAN2dZRT1KTVPvxtHKtrb/99Vn9+/3\n27Gur62urLC4v9VHyT8vPDxILygpJC9CRiw0U0H/TDhfra2urbmtra2tt7TBx8VnNTpLX1tV\nPUJrz0hCPjdDQDzn/0dLY2fd583BvrrfPT1BY+/398ivsK+1trm8tu/v3/dbPkFGPCsvKzXV\nPztVN0BOMUqytcG0t7y1r6y8y7z/b2tdQkdf109FY0pnTzM4Nzg6TlVdQ0FE/7/Bxbm6zutv\nb+fXtrjIuK+tsrq9vt9fZ0pJW0Y5Ni87My9nOiw9Y1M7PsO7wsm9v761rq26ur9rP0pZT1VV\n42/bzspdS0E1ODg6OkZRTEpMZ2fPvrvAy2tb68nDu7Ozs7Ctra6yurzKXV1bVUAxLiooLi8t\nMS8wMjM7R0tv0cvCvLi0uLe4wsXI0efTd11NSUdDRUFDU1/3TmPr3ePX029vWd/f0dPT92Nr\nXdnPzs7L1dPGwbq4tLW1t7a3ubrB1WNKPUJANzUrLSwrKisyNzs3O03/zMC1s7a3tLS0tbq8\nxtNjV1NOSEY8Ojo6RE1PUVlnWUhGTVtjX1dOV1Pfzce/vbu3t7azr62ws7i7vb7IzutfQDky\nLS4uKS4tKTAwNEhFY9nGvLyzra2tra2ur7G5usrbV0U8NC8vLi8tLS8vMzg6R0tT/2dv2+PV\nysfOxcfNwr++urq5t7a1sK+urrC0try9v9XZX0Y9ODAtLCoqKissMDI5Rknr1cC7tLK0r6+x\nsbK8vsLZY19HOzoyLy4tLi4xMTc5P0pba9fIw8PHys3Nys7JyNnTysvNv8PBuru6t7a1srS2\nub2/xMnVa2NLPTg0MTAtLi0uLzI3PUROW9nKvrm1sbK1srS4urrI28NIQD4+NTczMTEwMjM7\nPkVPXe/ZzMS/ur3CvcHMx8bXzcnT1dPV29PGxcXFx8PEv8TBwMPHzdfrX01JPjg3MTAuLi0u\nLi8vMzk9Q0xd287Evbm7ubi6urq6vb7D1ed3V0hKR0dJR0ZMV13n1czCv7u5t7e5u7y9w8fX\n2/djSktJSz/3JNW4TEkqTLO8/+fPysnRzN/f61lLPD5NPDw/PDs1Ozo4Mjk+RUhd3c/Hv7y4\ntLCsrLG+yce7u7nD11NJQD9IRUE/PTY3SVnZ3dnbycm/wsPPW1dXUUxBOz1AR2fHv7/Bwb++\nvr7GyWtn52ddT0VDSllbR0Q8Oz5AP0JFVWtNW+vEvby7urq4usPJyMrVSz06Sd3Kz+d3a/9j\nW1VJQDs8RlN35+//08vAv8jTXUs9S1tPPjk5R9W7s7G0uLe4ur7OX1lOVV9bU1djZ1lbWU9H\nRD4+PT1BPT1IW1lVXdPHuri1usn/18jH1Ug8Ru/Dwszr/9/n52dORTo0Nz9TX2Nba82+vL/O\n519FQFNnSzsvTN+6s66vrq2srrjCzdv/VUxPRkVZX0w/QkpTTUk9NThATUs6PVN3y9fTxrq3\nub3Fz9/r0eNLPUld99nIy9vf2e9ZR0Q+ODQ1OkRRX2/Rx8HDxdHfYz9HX1s9OD13wrm0srCt\nra28yMrM3VVHQ0ZKT05APD1LS09IPDdMWUE2O03RzGNZY8+1srrLyMDD5/fJx+9V793NycfH\n09vb31lERj88Oj9DSk1b59fn2dlr/1tITW9HP0hfz7y2sLC0sq+3vr6/wc/Z419XW11AODg7\nPDw8OjM0PTw3OkRGR09n59HAt7vAwsHAu8XZ2d3VzMfFwMLMzs/nWVdJQT8+PDs9P1FZXWvb\n729nX1lKPUffY0dHXdvOxrq3vbmvr7e4uLzAx8/Z729j71NJSFVMQT1BPTo5PDo8PT9RWVVO\n58/T0czN3fdf0cxfU+Pn4+PT193359/3T09RSz8/REZHVWvr79HJxcjNysbN0cvV08TKzdfL\nx8rIv76+wL++v8LHzdHd2ddvV0lLR0I/NzY0MzQ1NDY6P0VLUVtfd+/d19PTz8rExsXFw8O/\nxMnHy87Tztff619PTEdKTUxKS05VVVVPVVVZU11rX2/33dnP68rRyMnOz9PX083Jz83T19nO\n0dvj929nX2NXUU9LT0xMTUtPUVNPT09NUUlKTUtTT2dd/9nOycvGwb68vL2/wMTByMzR23dn\nTkVJRT8/QEA+PkFAQEdLV2v/1czFxb/Cv7/Ew8PFx8TIztXX19vd9+//7293X11nZ2tnW1VV\nT0hFRUlDPz8/P0E+PkA/P0ZKV2dv4+vR0c7PzcjBwcC+vr29v77AvsbNztvjd11dT09HTEhM\nSEZJTU1LTlFVVWfd19HPzcTCv76+wcTEy8zOzOvf42fjX2NTV1VVT09NTUpMRkxGSE1JT1FV\nUVFPVVdOTkpMTUxLTlFbXW9rd3fn59vT0c/RycXBwcHBv77BxcHBx8jOyNHV29vd/29ZVUpK\nR0VDREhHS05TXW/n09HOysbIxcjJy8/Tz9XT/2f/V2NXTldXS1dPT05NT01IR0dGRkdLQ0ZD\nQ0dJS09bXWN379fPzcbIxcbCv8PCw7+/wcDEwsHIyszP0fdvZ3dfS01KSkVKSERCRkZGSk5T\nTlNNT1ldb/fbzszIzMjIxMjFw8fIy83Z2eNjUU9TTU5MSUpHSElCSkpHV2d3d+/n6+fj5+/j\n/+//d//j39fb0cvNz8rJx8LCxMfGxcnGys/Ozd3f4+NjWV1RR0dGRj9EPjw+Pzw5PDs8P0RG\nTFddU193///n39nRz87OxsfGysfM19nduTQ9rL0lPqw6P63OQcJrRcTnOee6PWe16z+6ukhr\nuchK3cpn99VZV9vZV3fD91nKyu/Iz3fX1Wfn13dv0+dX1cxF38dnQWtVPkZXPj9dRzxFRzxM\nSTk8Q0o9P1tHTs/r78TBwLvCwLi+xsbC32e/yk3CxUe9vUfd1d/b38rTb9m/RVtbxU41Qm9N\nNUs4a2M72URGvtdRyNXPvlvfxNf3zuvLzcvN/87I29lb3evbVUpX701GS0dTU0RAQ05PRUxb\na+/X0dXOxr3X473BTcNO28TvRs7GTsHbyL+7utnCv9nVWWdBP04wNTQ+LTo7PNs230fjW1Xv\nQWdNz01ZzE7E68G+wrzFvb2/zdPA58nJ113n1UVTRjs7Pjo3PDtFSkpX3cO+xLm5uLS5xbq7\n//9Za+PZzNW+sr68tse7w7/Fd29PU0M6QUZVMURNPDE2TjswRDs9QVM+Ud1TXc7Za8HF09vH\nz87O92/j/9NDX09d/0FnPVk/PEY7TjrvXc69z7rByLa51f/PW1/fTU5d67rNRbDFtsC82bjA\nN7gyrkU0rS65vz+8ONFCSzs9XzjbPk7vV9VPz8n/uMvCvcLJ48/Rd9NKb1HbT0r/V3dXS1dL\nWzpFRUhHXz5n929jX8VvZ7hLY///OtNON79Eb75NvTe1rS+sPUu3Sbw7sV1v2edNW8I1Vc07\nY01JUzLMMkfRP+9PyVPIS2/VTcBjSb4971u/5zm2SLs8tTeu2d3F3bjV48V3zcLAyNXJa7RO\nu1O808nPXbZGu0O7QUe4RDW4L8tHZ18yzUk3Y/85ty+5Ns2/NMvPLbY0zzpMTDvbvjfr5zvj\nZ09VWedTTcU8yjWtMrvFP7hLd7/du75dtUTFPNm9S1XDO7itLa0rTbUvrDG7ObzEO79BPLYu\nrjbJazu2PlW7Lq850bsurjS00UC8Tj+5OLZIV8I1w0XnTz3AN8LPMK4vRb5Lu9dRyUPPZ9td\nRfdJzkhJ43c/uji0OFm0LrAvtzS878tdU8RvUbsvrje3vj+0OK5IxcJCskS3/z2yU83B3U/f\nvf9byj23P8rLQspOd0pjP2s5zU5GzT/NP91K30xGzDjr1TTP529G21PnU2NHR+dCvNtHxj6u\nMcFfW8nVzMz3utlT18pXyMpPxT5vwjmxR0+9P+vDS7/XXbtO/7hfz64urDg2rFnjsTuvb0+u\nU3fTRdV3NP9TP7pBVd0860tZ69s4vj0yvi22TU7XTkrLQkK9Ql/EOlu9ObxNR68vXbhM2blI\nulu+1+/Zxv/M2dVZvVPP485dOsF3ObpTV0PPUz7vW0n/Re9Ld+tb/8E/zsJj3993zF9r33dK\n51l3/z3ZyTPd10RvTtFbTt9NV1tf59d3d9nKd9XVy83Zv8vTwMDnwc++w2vEzNPj0+vn72vX\na2/nY+fnT89Ma/db/1Nf/0VfX1dbSN9XT1FjVU1vSmtOX1lrW1tZWU1ZTFtOUVtPSlNPV01b\nVVtXWXdb71Nr6/f373fdY3fR/9HX18fZzNPR1c7b09fjz9fbytPGz83Pzt/L39fZ59X/zt3V\ny9fK08vR08rXz9HV2+Pd6+fva2ddXVtMWUlMSkhJQEtEP0pDSUpFU1VLY0v3Uf9OZ1lRb09b\n/1vr/9fv1+fd3+/d5+vZ79vj29nV29nd7+fd99l35+dv5/fr92v/Y+9f/2tn41vn929r713/\nd293W+93d+v34/fZd9v/69nv59X/0fff3dnj39nr3edr33fj9+dvY2tra2//9+fb5+vf3+Pj\n293b09nd59/jb/9rb2dX91NfV01PSUhPSk5JUUlOUURXRVNRV11VY29rd+/r6+Pv6//392f/\n393Z2dHZzt/N19HX0dfZ2c/b18/Pzs/O19PZ49tr72db51n3W+9jd2dbXVdfVV9Xa1N3WW9v\nd2v/7+tvb/dj62v/b/f/39/d2dHRys/O09PO68/Xa9XM21Fv0dfvZ9/3VVln3VlG511VU01f\nU1FRY1NNUV1vQ0xOTUtR/09ZWV9ra/fv52dv783b9/fb19Xn1dnv0dPNb93Dy2tRzu9n4/9v\nSl3d31nv229ra19bTe9vZ9VTSVnf1WPZ79/fzdnI2cnJzdu4tlNN2b7CWevn31u7ykFJyLd3\nSV9Bvb9IOUZXzdfPQzLNs0JHbztbvko4PU3V7+c4OufBVz5L51t3zDlOZ19PzOc0Y8vO6+tf\nxMfCb87BwL1rx8Ovul/Zv7iwvUpTvsvE01M3PN/Pazs6O0XGVTMuOG9dOC45R01NRTw6WdFd\nWVnr2dHMw9vf38avw//fua2w2Wu7sL13zsnHx79XWdvKz87rd1nZysn/Y+/bz/9ZVUlI79/3\nR0tO59XvU0pXb1NBODtCPzw6PUVOUXdNVWPVW1dMPkVGRjpBQUld11Xfu7y+wte+tLLI69fH\nzGNFQ1nX09v/zsvT09dZ2XdbY0c7TM/n59vTua+z2cO9tq+2vrm0v8bC1/9JRkpZSz5H07/D\n62tXUzkrJCMjIyMkKTM/W8+/vLmsrMw0MUfIzEo097Kutse7tq+z0Wdb62PnUzhIXdfJWU/V\nvbvDTnfVXetbRUn3vrm+xL+/w+9HT+fbY1lLQjo0MTAvKzI3O0v/ybCssba6v81ZOjAyMjI2\nWVtbsKutvLyyrKy+Ttu/vVVfa8u5sLTGxr7CyFUzLzg5MjAwPVNJTj083+9N6zkvQD1KZ05O\nw7u1rLq/sbr3zcdJQUhJd8TIzL3AxNtnRjAwLzg7QvfZvry3tsTG609VOikmKjNLy7Wxr7G5\ny2M8Oj9G2c7JuK+0vr3Zz7XTNjw9Sus8WcFfr706PVPj4/85LCxEura5vMKxr8w6LDEsOjIt\nQe+1rKyvsLW4yz0qKSsuMzY6W7K3rL3Ar8HrSj490brPvbG0vMG60c3G09nO0U1rX1NvSi4v\nvGMzRDY231MyMkRXPjdFPsy9XdlTza25yc0+Y7q6W0pL08vJy9m0trO5Y0xOOzIvMUV3xbiu\ntLezr8FvV0EzOjYtQHdn79VvR/d3PTxNUUVRVS9My1PXzNHI519XTUdLTEhFVTs2TF9Dyb6+\n3a6svK2tvMbEubatrbiurbbBuNEpOU42Qkk3RcbAxcdfR0U+KiIiIiIkKCtE71dXP0xRY1E/\nP2ddu7G0r6ysrKyyt7Kssba1tL/Dwc9vuLGxv2++/8pONElBV8vVK0BNPDQyMiwx7009/zwy\nNy0nLSgoMS43PefTtLy7vs/Oyms+PtW8urSusq2svrq6t62trq2tra2tsrCtvL++v9W972Nb\nOkE4PjY2LC8mKTAqOS1ELjs+MC8uLC00MkhKTF/Nyb3Xysn3V9e+X83nwNu4u1m9zr69vv/R\nur+yt7e9u7rOvtHP979fs8W+xd3IQudPQlXvQEc7OT8v/yrRP78/VetEyEvHXbjDtd+zd7W8\n00TRa0//X8swxTlZPl87YzFfPj28V1FVZ2/fyUpJd7pOzcpbyLvRuFevV7p3tj2uvb9vz8JM\nzF+9M8VE2z3/O28v1S09M+swRDxNNkJOW01Pd0/jWVG6S8+3L6wvuFe3b1esRqw3rUCvrj+s\nM7rfxFdVu1GuNbU3uEW6OcYub0NZNT1KN9sw2Tw8SUw6Ty/OML9NPdFM39lFvTjH0cjMzLrB\nwbbEuL3XrUyt67atv7nCvrzbt1e2UbpPwMzZU933SEhKvDfvN0JAQixGI04qPCdCJElMJFkj\nUyw+MjE2RT88XUhHxj+vU7m3v7usa6zMrLutrK2srK6suazLrLmuv66turO1tOO5ys/FU81M\naztKPzdAKUsiOSkrLykqLCorLihHI04oPzI+QDPPOl0+znfnw3fCzLr3rf+zuq69tK23rcet\nrrmsw6y+razHrMuzw8y6b71L51V3Tl8+TTfrMGMyNMslXTAvPj42Qjc1QTFGPzrVOOM/V1tZ\n02tOv8vTtlW2U69BsUZRt1G2d8lfu8jJV8Bv17xEvdHTxlm4S8nGSrpKtc1nuUK3XcFjRrhj\nd87ZyffZzUnGT83jb1lRxmNv2VFnU2tRWU9JYzxrSENJPUo3STc/Qj5MOlE8RERGTU5bW2Nf\nd+NV2V3Z/9Xv2dXNy83JxcfGwcq+xL+/xbvJvsnJycjN38rZyt/Ib8/r0+fb3+/jd2/nV+9n\na9332dfv0+f/11PbX1tdR908bz1HTEFRQltAUUhbS1FKSkxHT0RJQkZHPko9ST5ORkpMS1lL\n61nb49/P0crbxc/AyMHHv73Dur+4vbe3ubK3sbK2sruzu7m7vbvDwMTIytvb43drT1lGSD47\nPDk1NTIxLy4tLC0rLSwtLS4vMzE1Nzk8PUJHTFFVV19v39PJyL+/urq2tLOysrGvsK+vr6+v\nr7Gyr7Wytba2uri7u7+9xcfL0dfvd2dXU0tHQz89PTg3MzQyMDAuLi4tLi4sLi0vLzM0NDk8\nQ0ZOWV3vb+Pf1cnMw7+8uLixs7CysLGzs7W2uLi6ube3urW4ure9xMbX2eP3U1VMSkpHTkRO\nRkJFP0E+Pz04NzY8QUNCPDg8NT47Pz8+QkBJTedRTuvDW+9MTP/Ru7S3vsPDvL66s7a3tra3\ntri8vMXIysfX51VTV0lPW11dVVNMSEU/QkZFSkNAP0hGdzFAQFFvTTUrR0m+u0s7191Z02c3\nSOutray5wE/fz7m+uMK90761s7m3srm9wctPQE5TU2drRkhITFc9MDMxLjE2LiwuLzM5ODg+\nOkI+PkQ8QlNvZ+PXy8S5tbO4tbOvra2tra+vsq6zsLa0tre5vL7FzOP/X1dOQE1NVUt3OkVL\nRFU+Rjg4OD01OTUzOD9ER0I/OzxFQ01NRmNrX9Hn2d3Oyr+9w8TMwsa/vru/xM/Ryc3Tb2tX\nd8zMzF9CPT1K9/9XSj4/P01nZ2dPa013b8zZ59/j0c7KxtHr09HGxL7CztvV09nXzNv/X1dR\nR0pKWVVfW0s/QEM+QERNUU9OU2tnz8vM0d/P48rCxMnPy9vDz76/ycXPz+PPZ99bVWNO03fr\nb+vjX+PJ42Nv63dTd8pHPkZZT0vV70I+RD44P29BPkU8Oz1KTkZDVz89Y0FrX29b/9nXvMm1\nx8nFxbS8ure4vLXHurW7t8OuZ8W+79fLuP//290yRUI7S1VjSTdCQj5ZSkBROVs/V91R39NT\n72t3yte7xu/TTE5v/2PT0dHv68hX49vbd1nKTFFfdz1MzndPX8hCTUfjd0jIwzhdy8vLwr9n\nOjI5Ljzd58K62ctryr/AvbxfTEIvNjZFY3fLyGfH4//O3cLDzLvDxba9urvBzmvX51dj61Fr\nXV9fRudLRllEPj48ODUySER30e//a01jXc3Fx7TBur/J18fjxcW/v8LGzu/PZ2NfPjYxLy41\nOknfzMPJwsvR31NKODI1MTtOY8m7tbq5ubm6v73Oz+9f2dPHvLvCwutjRz9HOjxLPD9BPUpZ\n/+Pr998/TEk//0/fY1dXU2/O/8y+077Gv8a+ybrGxs5Z21VVw8jJusvK1Vf/X0lrU1tHVV1T\n/8XIwL3Pyk9MPzY6PTU8Pzg6PEY9SO9TU28+PTo2RkBNye/n505XX+Pnzb/Hy7/Py7y+t7K6\ntbq+u7i5trC4urO70bvNx768wsnBy9PFymfOW1dGOTQpLSoqMC8tOS0pLyUqLS04LjM0LTw5\nRcPIuLS+tsPVwNPbucy8z7q+wa6ut6yvvLW9triyrbG4tMnHyNHDyczEd9vnU05IRUo+Tkk3\nSjtDSUNJPz5DNjJCMTxKOEU+PEk9WWdTXVVIRD0+UUPXzM2/yN3dZ9/R28S9zsLE1+vNwMe7\ns7m3uLm+vsnKz1lrR0T/a9PHu8vXa0Q2MjQuNjg6PkBIX1Vny9P/zttLS+NOT9/ZW2tv53dT\nudHvusVn03fPy76tsbCsv8lnQD02Q933wLLBvsrTd0RIRC41NCsvMTc9OllGPEc5MUc7SdHJ\nuLi0r7i1ubO6vL7KZ1dPNlNbT7/P0cXf491rWff/3ePLydG9487Ka9vV/3fX/2vvTk1OT0Hr\nTlPXTUxvQjlZP0RGUTlFTjZGRFFr787BzO/HU0Rr79/HucC1sLS2tLO8v8PO29nR19vH2d9d\nTUY+PkpDRvdHRO9FS048RTc4MzU4O0NFWWdfVev3SXdna+d3zd3NvMfGub7FuLzAw8O9w729\nxM3b2V9r38jFs6+3srnDzt1PRE1BS01LXVNMT0hJR0JKTT5fSExIPkg+QUdLV0//W0xLQDo1\nNS4vMTA0PkX/X1/vVV/3783Xx72+ubK5sLWys7SwtbKztbi/vr+9wc7TxlvLwN3H1dFvV189\nRmtNR01FPlNFSdNK0989Pjk4MEtIW8PFv8fXVUQ2Ly8sLjlFTtXJ1+9KPjo2PExC0bzLtbjF\nvL6+vbu4wMHM3dl3373IwbvRXWffTtvOx7/KvVvn519vXf9RSEZMRk5r6+vZ3V9LSz46TjhK\n90fKX1P3T1lZ40v331vPycjIyePr10tj3U7ZwdfdyF9fzt/b2+tbTU48TzxNd0/r9/dV60RH\nRD9NQt/jy8fByrzXv85vylnNzM3BzL7F68lnUdtMz9lbxd/Gvby7wsrvPFFKOHdja8/X29vv\nZ1NEODMvLDA3O2vLy7vB2VM8Ny80NEFdV8vVd+f3Rmt3Quv3Z//J1b2zurCvtbSxuL2wubyv\nuri2wMfZz01fV0BTPEI9R0pIVU1DPDoyND42Rk5DZ0FVSkRRS/dVZ1tL/0xr29O+vrm7w8nv\nWVHj69vJwtnM52NNS0xIUVdO21vO09XKwsfRwdvj2dNvyef/zNXK/9nZd09jSEVXSetOa3dK\nPUBGPlP3d8vMXedJR9V3xcDJvmPVyGfJw8XJusDNxcHJ0dPrT0tZUU9VW2dORF02NUEvMzk7\nPT5KPj49OkdBTc1n38Hr38rj983J2dW+zLy6uLC7sLe9vMHK0cd30/ff4+vVV9Vba2NHa0FJ\nTmf/zc/IyddrWW9jb9Vdb+NRSE8+PD5KOD8+O01ASV9fV91rY8bX0b/Z58LJ47/b17xnzcpT\n3/dZZ+Nd2+9X411j/9fZy8L349NLTldKXV1TTVtZPWdKQsj/3evbW9vb38/O38nNd8zrzs/R\n0+/PX1HdVW9fU1VXRExrTV3/T1lbTEhKTD9RPkldT1FV/0vd6+/PyMDEw9PLz9PEvry2t7e/\nxs/ZZ2Pn5+Pfz93b3+t3V+t33dfX2WPjTmNFRz9CSzo8Qzk+PTpKSDxIRG9f0cfJusjLw19n\n791vxcfJxdfT129jUWdVa+NR0U9V3UxV39NZ/1tPZ1/r3+PR4+fr/87J4727xMXI0dvOV+/X\nSmdrVUhjSj1jTU9Vd0Z3d13X28vGztfO1Wfd213R02fMd99fd/9XY0JbSEFPRlFMZ19NUUFI\nP0pCRVNJd89db+fPzt/CysHMwr/Gx9PIU/9FXVtP0UfrV11nWVnbz9vIwse9xMPGycrJxc7J\n02vn993vyWfT42/nW1lZ30/nTkx3VVFbT0RPX0J3UU3jb3fR/+vP41/vW29ZV1VKVVs/UT9E\nPj5AQj9FY0Y+SENNRXdf0+PAvt3E28/r28LOucW4uLm4vr7Gyetv31f3Y1NnTutfd11bW1N3\n39nZz8bNv8bIvr2+ubzJxsF3zW9b60lrZ0Y9RDwxPTMvPDg5OUU9O0hIY0ZM1+Nn181va+dn\n6/ffx8zdwMzjvsjEvsfGvd3TydfJwsx3x2dVy0bn52/Pze/nxO/HyNfIzNPbxmNXX0lXSUZO\nO0Y+OjM5OjA+Njo2P0s9TUpTa2/r3dPPyc/fyNnKwMfAv7zFvr7CwMTAwsXDw8PrzMLbytPV\nY9n/WWNrze9T/11VY1t36/9TZ3dPWUZFXT9EP09CP1FITklXTlvnX/fdz8njw+fr191fb/9T\n719n719Ga0lMVU9db29da1Hn/2Pjz1dj1/fnzd/Gz8/ExMe9vrm9t7rIu7++wMfGzdnZ593n\nW1dJPEM+Pj05PDwvMi41NzY6M0FKOj9PSVdP51v/b9nC08jFvr6/ur2+wc67vdO+xMa5wL3I\nxMbEycfK0cjI283L18TE1cvGY9XXZ8tba11TRkhMQ0VAPjo5NjNDNDQ5Mi4xLi1DNTE+OTU9\nPD1dQ13VW9vRxufEvse6vLaytrWvtbuyu766ssK4v727vrrDwc7PzcTH09PL20tvW1lZb1NZ\nUUhTQUdKRUdMTj9VS0pKSENCUUlnUf9LRktTSk9rY9tbVU9IW1lvb9/Za9fn2+PR39Hf1dnn\nz9/T0crVzc3Ozdfd7+tdY+9v919XUV9OX2dbY+NXTndNY1dXU09PU1tvW2v3TmddV2v/1Wvb\n7+/O09++y8m9xsu+0cjE2cPT79Xb/19Xa1fOb2ffX+PT1efvV9NRT/dI3WffU0nVQ2tP91lv\nd07vUWNOQddL699Db1tHz0rN2UvLZ9XRS87L3bpjycdfvW/v00vMUdFj4/f/V2fdP2NnQONH\nU9U9bzw/Tzo9U0I6RTxEQ0ZTTUrKS8vT3cHb0cnJxsS908C9ybS4wLTEurTGsbfGsr6/u8DN\ntcHNusvNw0zDbz3dQ0FnQTJOLzU+LTk0KT8sKz0mPTYzQy87PTlMVU7KZ9PPyd/AxdW5yr+5\nxLm8urfHssTNutO9vne14/e478O7/77dSbdJ0chN41tE70RXSD5nPVVbPllJSFtO7+M80TU7\n3zDn4zbnO0xfQNFPTctJV8VEyF1nzFPGvlvB09e9yrSy16zfvbLXtbnPu99bvlPHzk3LRznE\nM9H/NtEw/1843TxDX0BXTkBRPUBdP1VXQe9FRP9GV+tCY0dRWT9jY03PY2/D68XI47rHwba/\nurfBtrrFr+O3w8+/0du5Z8fTWb9f3c8+6007Zz4+XzdIPjNHNjlGPEE+QUdAS09OVWtX12Pb\nyufHyf++yr6839HK68fA38/302vIxsDv3VdRz9nja193T2PP/2tNTVVn4+NTTEtLVU9LTkVn\nXUzjSV9ZWevf5+f/779d09fv1+fNyeO+42POW9PGy85n3c/rz/9P219Ty1vXZ9VnX19dY11j\nU+Pd3efnV1/fV9vfzXdfZ11f20ZO2U3db05ZTV1X/29Na0xRV1lb/3d3Z/fX29PX2/fZ99XL\n19HEzsLVz9PX383J1czb3dtXd01j90ZMQkBPREA/P0ZRRUxFTFVBW0tb71Nvb07f29vRX9nb\nzcD32c93zevR08zG0ci/zcnT58/Lx8DFxdvV2dXV09fX49fn51ljXVHdZ9vbU/dVZ3djWVNM\nUUZMQzpCPj1HQEpJREhCT01ESE9N711VX0dVXXfd293P79vbysbAv7u+vr28v8LIzcHBv8jM\n2d/j13ff2///Y+NjZ2dbXW9LT19OV1tNT1VVVU5NSkJORktTSkZMTEhKRUdJR0lRTlNbW2v/\n49/VyMfFw8PAv72+vb+8vr7CxcHFwMHJxs3RzePj//f3a2tRUU5DR0ZCSkNCPT09O0BCRVVI\nTVNRd1//193V0czJysvP08/Z1cnn2+Pv1etnX2tvY29ZW2vn//d3a2djW01NTElOWUtMRkxK\nTE5LS1Vv6+PXz8jEzMnEyb2/wMHEx77EycPGy8rJ29fb/9f//3ddb2v/X1lZW1VZUVdXd1tb\nTFVVTU1bSk1NU1VPX05fd1dOSk5NVV1ba2d34+/r6+PVz8jHx8vHzcnT19vj3evf5/9dV1FT\nUVtTTldVTU9LS09PW1dfX1dfZ2/n5+vr3ePb3efX29PT08/b39nn39PbzM3NzMzRyM/XzM7P\n29fd09fZ3+Pva1tVTk1MT0pGSUE7Pz1KS09RVV9nV2N379/f49nZ3dPOy87M0dPV19nP2//r\nY11fb//v6+dva/f35+9v4+ff4+fvb2tnXVlTZ1tdb2N3a1tjY19rW1tdZ2tdb+/v32tra2v/\n/2dfXW9b92tjVVdVT1lXY2//3efn59PNy8vLzcnJxcjIxcjOzc7N2+v37+dZVWNfZ2NdWV1b\nU0xOVVVZUe//d+vZzdPOz8zM08vNzs/b0dvf62drd+9rV1NbV01JS0xVTUZLTEpMSUdKQD49\nQ0lDR0VIU05OUVtb/+vf19vT19fR0c3Nz8jIysfJx8rV39XXz8/KyMjCx8nJ1c/Nys7Xy8rJ\ny87Ry9fR0dvdd2tnY11dV11bVUpEQUdEPzw+QkA9QENGSU1VTldrd9nVys3NyMXDxMXFyM3N\nz9vP2d/j9+/vb/9fZ2djV1VZU09XWVFTTk1NTUxOTU5NS0pKTE9ZX//d3ePdztfT29fR0c3X\n0+d3693r79/d2+d3/+f379/r9+vv5/f34+N3W2NfV1t369/r6+vj2dnf29nT09nj29PR0dvd\n29PR2dvXzM3O2dPX2d3V2+vvd1tXWVlNR0lJTEZBQ0lOTk9OV1tVVVVjZ2t3d9XZ09XZ0d/n\n9+v/b1lRS0xLR0pLS0tKSE1VU1NOV2NjY2/r69/Z0cnNz9fRztfd6+v3b//v59nX19PRzdHV\n09vX2dHO087O0c/LzMfJx8rKzc/b3dnT19fVz87b29vj629fW1VTW1FfU09RTExLSERAQT5D\nQD9DRUBDP0pMTU9NXWtjY1tnX2drb/9vd+Pfz83Kzs3IxsPBwsTGycPJyMvV1d/f62dvXVdZ\nVVNOT09PU1tdX2fv7+vf929nY/9nZ2dna19na2936+vd49/r7///7+/f39PT0dXX1c/P2dfj\n5///73f3b/d36+fZ0dXP0c/V2dHZ39tra11RUUtLS0lJTUlETEpOT0xPT1VnX2/r6+9r/+vn\nZ2dnX2NXW3d3//9v//9nY19jZ05XXV1fU1trWVdXU1dbV1FVVWdTd9/b2+/X0cvOycnKyMvR\nzcvFxMG/vL++vL29vry6vr7Ex8vP0dvf5+trX1ldWVNPT0pBRURHSkxLRklLS01MTUxNTU5X\nV1dfVVlRV1NRV0xKR0tESEdOUU9TU1tXX11nd3dr7+vb2+fd6+PvZ3ff593V2efvd29nZ3dv\n993Z29fX1dfTy8nDxsXHxsTHycXFxMbHyMfGys7P2dvn72/v/+P35/9vWVVVU1dVV1tZX19b\nWVNRUUpMS0pOTU5MTElHRkdIS09RT1dZWVlXWV9fX1tfb3fj3dXX0dPV09HLzM3Nzs7Nz8vN\n09fb19Pf3efv/2NjX1tZVVdTVVVXVVdPT01OU1ddY2dra2v/9/9r93d36+/f9//na+vj2dHI\ny8fJxsTExMbGx8rLz9HV29XX29XV29vjb2dvY2tnXWNfX11fV1FNTExLTUxISkpHSUhJSUVJ\nSUpITEpHTU9XY2Njb2vv5//v6/f/7+Pb0dPXztnV1d/j5+vn//9v6+PZ2dPKycfGxcXJxMfJ\nyMzKzs7T0dfb39vf69vvd+93Z1NbT09RUVFNSkpLS0tRUU5PTEpMSUpPXWNn9//v///3393d\n39vd69/d3efn929v5/f34//db2NnZ+93d93V3dvd4+vj99/32ePZz9HOz9nZ429v///n7+//\n//9dWVFVU09VT1VPTFdTU05RW19XT09RXVlrd3f/b//f693n6+fd7+f/9+vvb+Pf3dnf0dXT\n1c3T0c3OxtHLzNPb5+vv79/33+fV4+/373dvb2fn7+/rZ+fj/29v52/3Y3dfV1lNX1FRTFNP\nT0xJS01LTkpRTElHSEtIR0RISUxMV1lv9+/n18/TzcjFys3RysjMysjCyszLz83Mzs3KyMjK\nzMzNy8zJy83TztnZ1+Pn793f/2tnZ1dTT1VPSUpJTU9PVU5LS0hFSENERUNHSklLTExDP0RF\nS008SEZMS0dGSUtPTUpMSUhCSVFVT1V3b//3/2/v1dHHyr++v73EzcnKwMXLzMrNz8fJxMbH\nxMDDvcfFy9nrX2dnb11TXVtOT2Nf7/dva1/n42NfZ1lZZ09NTkFKS05dXWdfVf9PWVtbUU1G\nTkhDTUxITldf/2Nb7/fj49XnzM7MzdPRzdPXy/fO69nXy8/Vy87P1c/L28/Xztf/0e/f1dPN\n999rb1tbXV1XX0tTTk5MP1E7Pzo+Qz9LSEhPU09vb1vb39PMzsPEv8O/v768u7vAvsO9x8zV\n3WNvWetnWVtVTUxbVVdXVWdX42/XZ1lPSU1LR0ZLR01DSkZEPkdKTldr49/J59fTzdXZz8jX\n53fZV19j71Ndd1lvb/d3Y2fd9+PXz8nHyb3BvL+/v7/Av768wb/DyM/b32NFTkE8Pjo6ODM0\nNzY1NTU4PTo6QUpHRl9db3fj59nKzMLGwMDDvsbBxM3Kxb/Izc2/wMrJvr/AybzMwci9wr3A\n3cPTyNnv/19fTldNVVtMSU9JRUg9R1c/SDtFPzo8OTo3Nzo3PTo9Pj88Q0pMU1drd+fd39PZ\n59fNx8O+v769t7rBu77AvMPGw7/BxMPMzNXf7+/va/dnWU9NV2djX2dbXU5VQ01PU11XUVVR\nTD9VVUxbVXfr1czRysTO09XK0czFyc/Z2f93z3fT63dra1tfV+9n9+/j4+vvZ/f/3//r4+dn\nZ1dbUVFPVUhDRkNBODtAP0hHRFNVX1tvb2vv283Fxr++vru9vb24v73Av8rM29Xf7/9nU0tK\nRkxGS1NKV0pGTUlMSUdCP0dKR11r49Pd0dV31d/ZzMnPxMS7v7zAub+7wsTPxM/n91tbW1Fb\nZ19d/3dvZ1NNS0tNU1NZT1NKSkxRTU9NSlNPTldTT1FdV1VOUVVbX2NbXf/359vbz9PrXedb\n53d319XO08XJ0dtba2dr/+fPzM3NzMjJzcvTzdvM2dfbzt3N38vF0dHfz8vPz9HVd9dr6+tn\na11bR0hHTlFdWVlNR01LU1dRX1tfR0tKQUI/PTo7Ojg7PD4+SUJBSUBLSFVZ3+vXzsvIyMq8\nvr69vr67tra2srCxr6+xrrKztbm7wMbO12tdX1tVVUhOR0xBSUE/Pj5APEM9QDs/ODY5OTk1\nOjk+PEA/RT8+QE9jV+Nnx8PEwMO+wMPKxMvL18/Zz9fbz+PZ5+9n6+fv987Ry8XTzMjJwsDL\n1dXDwcfJzszHwOdXa2f/d05JSlvnX0pDPk1TUVdNU0VbVUk9PkRXU19Oa//jVVldS1VMX1XL\nvrvvUz5dv7rHwrrVzefZ19HK6+fn1cbbPTAuzr2ttNtIQDw0ODhNb8G9vFdnX/9dTl3dwut3\nz8RFTGNvPd/328O9/0bdXUc/WU7/T2dZTzw1NVnZSz41LzRF3dlrW9/Ty7+9vtusrKw9LzT/\nrKysrK+vtO9GOz7Er6640+vba0c+OEHjwWsvQzovLzEqKUDnQuPMXzxNzGfru7/BucDVa8HP\nx8bP1VlnWbu4zz85L1ljxVFK213OuCQpr6yyNSMoKKyrrMqwrOffNigpPbeszLzDsLTTST0+\nu7mu32P321U6MiswQfdnb1fIztdTPUNfuruyt7S9uNPZ18HJ1dXvVUlfRTY7N0I6Q0BbXdH3\nWzk2Oj08Sc3fx2eyrSNPra2vUyo2Ma2ttNOtrchTKykqScvNN9u4rc0+ODnXur3VX9u3vkwx\nLDlKY2NHd7uwtt9nY8C4tbu5sq64yklZ59PRV1Nn30s9MDY6QDw6RF3FTkFCTT5LV1tfuLBG\nK66srDolLTe/rLrBra2wUSoqNUHfX0TZra3AOzhT429MTNG4s8o7LzhDPTc7Ss2yrbbXz8rG\n1cjGta2tts5j2e9nSElr529EOjQyMjQuMTxLRD9jQzkySG/nUdHnwLvnsOs8raysQSvNv66t\nrqysrLM0LUxVOTNXya2srMHjw7lRNzlT193vTz9DPS8mJis0PkxjyL282V1LV2PTwLW0t8nj\na1U+NTg+TU9MSkNGQTw5SOvf39fOwsjvb93ZzdPBure9uLW1uVXbvrPOW9+trKxAd8a9Slf/\ns665TDQ4RSgjIy1FS13jwLm84zs5R1E5Nz/ZzNn3W93nXUFD2cfKxbu5tL3My7+5wM3Py9f3\nWUs/Pzw6ODk1NDY+Pzo/T29j38zNzL/IzNPOytPRx7m8w7aztcnMwsrTvclnzK65SzdTUTo0\nOk7JyVE1PUs2JictNDQ4Qte9u7u7s7bB09nKzONn3cO/ys7Ju7u9vLzFw9Hj393b3d/3X1FM\nSDw2MTAwLy4wNjc5QUdJT2/j0cfBw8G9vsLLy8G7vby2t7q6usrLxcvTxsv/29PnU0Zv51k+\nRkpEPjwzNDg5MzdBREFFUVNRb+fr39HLyL+8urq6u7q/wsPIzs7O3f9vd19fWVNOTltbV13/\nb2NZW1lTU01LTVdfW1tf///36+/n087N29PV1c/T3dHPysrO1+Pr72dTU1VbT05FQUJCP0FB\nRkxVVVVZY19dWVNMUVFLT1NXb+fd29HIyMXBwb+9vL69vb3CwL28v8LFwL7DztnR3/9ZT09O\nSj89Pj4/PD1AREdJR0VJTUtPXevf2efd49tnV1dfa19dWWNdT0xLU19nb+fb0c/P19PN0c7M\ny8rDysfJzM7Pzc3R09PR1d/n6+v3a2NfY1lVT09PU05NTk5VWV1fY2/v72/37+vj9+//5+f3\n92NvXWNXVVVdZ11jVVVXUU9LTktPT01NTE1GSktMU2fd0crGxL+8uru8vLq6vLq/vb7Ayc/O\n09vj7/9v7/9nXV9Xa05NTEdTV09OSlFRSE1IUUxZUU5NWV9TU1FXT1dVVU5bVU9OT1FRT09X\nW1lna/fn39XL08nKzc/Oz83NyMrHwMHCwMPEycrJy9XT0dPd3+/na19TSEhPSkhPW1VTWVtV\nTVFZXWNjd2/d3d3r2dXb6+fj/+/rd19bZ2NdW2NrZ/9jY1FZU0tPTE1TS1lVV1tTVWNjd2Pr\n9+fr99/j59/fzs3NzdPVztPj29XO19vMw8vKz8/LztXX387L1dfd2ePb3/d3a+dra2drWVVT\nT0pNSkVGSklFREtLTUZBSEdEQ0ZDSk9TTFNnY/9n49nj2dHTztHM1dXTzNPVzdXX1c3X1dHM\nysrGx8XHwL3Fxb6+xcbJzMfJ0d3Z2f9Za2tZWXdjTmtTOmNMODlTRDk+Pj46PUI+PkJFRz1T\n90VCVdldP1/LRES77zpZvU1O28XIX9W418a528y8ysrZvbzfQsex1zi8v29HwVnTzNfTxme5\ny0XBtlPvxf+972fMSP/FTUNNX1c3OUdbOFVGQFtOTks4b/83Rk9LU1fr2VfZwNX30dnL91/r\nVVfvS1Pj39HT0ca5vb7Dvb3Ezd/TzN/j2d/Z2e/v187d/2djUUpBQUFNVUpLWXdrX19XZ+v3\nd1NV919JWe/vUU/31VFb99VO78vRTd/r/03v3V0+2fdDSV/nZ9X/2z1Z3ddDOlu1zndR9+/M\nvcH/07C1xOfXzt1vX0BC2b2+y763tLy+zV1LUUU5MztDTl9nX+fMw8fb72v3Y1dMTW/371tv\nZ29rVT89RkRFRUlDQ01MQ0RTSz5NZ1lNd93jycTAwr/DyL21xMG/xdu6xO9nys7RxL5nT09n\nb1l33T1300lMSU5vT0hfa0ZT687V/3dOS2fZz9/Jwb7IxN1ZV1lTR0FXY11ra1NNTldnSlFV\nUU9Zb/drZ9tXTld3d+ffydnKwL7JxcjM6//f32/d093X18rO293r59fX329ZTldTRltZT0NJ\nV+fVzNlLR9HByNtbPTtO00lIUVdf78zNV0hdVztK12NBPzk4O9vCz+/Hxs7MyN0/RGdTSN/L\nx720r7G6uMDNd91nTk7n2dvIvcnOy87nX2tbSk9fZ//f1d////dTUU1ITk9XVU9VXVd3b1lV\nWV9OS2P372N3W0lOX1lvb2ddY+fv/+dnTFFRU1fvU05rzMLAy1tLV1n/02dn/0RL08zZWet3\nSu+5usXj905fv7rMa9vHyL67ushf/9tv68j3RU7XT07XXT06RPdCTvdKP2fr/2tV72dVxsLn\n59nL0c2+v+PZztvj49vvTFnda2fva19bW1lfZ1tr6//jW29fa2NLS13r911b99lnUV9MVdfn\nV0ZId3fT38dbLEu1tetTOCkvPbutuLPFUz1O0f8uKjEtQ8asrLK6uMvEvbpRNzQ6P3e8tsLf\n187O08bLXURMY83AtbW7xMbI2etjX0M9QU5dd+//Q0JHSEVLS01JT//3Z2PvXVVfb2v338//\nY2v3V1tdW09MX2NTW+vb6+PMzetZZ1tEXdnZ793Z1edf39dd08bX6/9ZUefNwb53SFFOTtPM\ny9VrW/fvxsLdU0xbXd3HyN9PW13v5+t3W0pXWWtZa2/v59/n62/31dv36+tbWWvv2/dj0ddj\nX83jd03f1d131XdKTnfR6+PV/1NEV/ffy8XZY/9bW1tj6/9TV3dbT1XIzGNHPj08P2PKy9fb\n/1NJTD88PD5Gd9fFvsLFwMXGycvnb1dbW//v7/9n7+vb29PV28rb1+Pf2dHOzcrP1dvX09/f\n73drW1dTWVdfU1NOUWPn3dvP31Vfxcv//9XrP013/1n/2/9M//dvSe/Hb01EZ2tX58PCyN9r\nSEtEPjo6PDs6P9/Czd/j19nV53d3WVlbU1Ff19nb3ePRy8jCzc3Oxsa/vry9vb2+zNvX619P\nSkY9PT5APkZHX1lr79nOzs7X3eN3629va3dZ3W/Z79/j9//n3c/dz9XT28/b0dfVd11OXU1M\nSU5CQEZVS0dPX0tTZ91379njWWdr72vv5+9ZU2P/a+/n5+vX0crMzs3X72v/W09RTkxGS1tr\nX3fb5+/V09fV2c/Z29nTz9fX529nW19TUVlfV0/r29PVxcfOyNHN08zDTMzN72/LZ2NFy2ND\nwkhbTUdMOWdZTlH3XWvN5+vT2dfr411fWVtba/f/d9vvX9/j4+fd1+f34+//6//n71tZX01T\nTVFRTFtbV1tRW1lf6/fr1dnV0czV29vX/3f3Z+f/529r92v///d3/+fv5+/r7+fd5+/v32P3\na+f/7+P35+Pf3+Pd52/v393Zzs7Xz9fNytHP0dVr5/dTU0Tf0z9OXz88PmtVTmPXU0t3129f\na2NHR0hdT0NTzFFd2dPGPm/GX+vbyt9L69NbT+vrW/fNytHTzcfKzr/Dzc3T29n379drV1dd\nUUxRU0tESk1PVXfr7+fZ19XP08nN1c/Z4//v52t329/j99vv//ff7+vf1+fn7293X2f/W09n\nWWNfXWddWWNfVVtTU11TW1dXX1ln/2vn4+vZ1dnO1czPys/M19Pv7/9fV11fZ2dr/2//Y3dn\nY29jV11dY1dnW2NfZ19bV1dVT09MVVFNW1tjZ293a+/n7+/b2d3f39HX19fX19vf0+/n3dXV\n2c3PzsfNyMnHxcTIyMfIyc/R09XZ3dvn5+/r92dnWVtdV1VXUUtKS0VFRURES0pJTEtLS01J\nT0tOTlVRV1NXT09OWVVXXWN3b/fr2dfZ2dnT59Xf2+fX9+Pf49/T5+Pd39vV19vT3dXV18/O\n0c7R1dXO183/3dHZ3+vf73fr3+v/73f3Y3drY2NnX2ddWWNbd1tra2djXVlbWVtZW11jb/f/\n72//d+vr/+9vd2v3X/9n52fv6+vv53dvd29v7/ffY/9v/2dv71/37/fv73fr/13d/3f34//v\n//drX1t3WVlvX1dbXV1bXWtnZ2dja/9fb3dn9+t3a3f/b+vv59vd39vb3+vja2Pd/2d3//9r\n2+P/387r1dnP0dPZ2dXf793X59nP987Ta83Oz9fr6+9n62NfXV9VV1tOTlNVTE5OSllRWU1n\nZ2tr3+9399/v5/fn59Pb3+Pv2+Prd+fv3/9j91lfW1NXX1FfV1lfWVtZU/9dW+db2e/329fZ\n3dPT19Pf0dvR19/T3///d9v///9Z93dra2tdU19RV01ZT1VXV2dra1tnd/9369/n2efn1dnV\n19nj793jd9Vnb+fj6//fa2//7+d33Xd34/d3Z+9r3d/V0dXr39Xf3dtv69/jX2vn5133d2f/\nb/drd2dnX2NPW1lZV1NnU09RU0xPVU1VXU1XXU5VXU9rWVnv5+Nd3d/n/9Xf593v79l33ePb\n3dPTz9PT1dHZ1c/P78/b4/fn711nW11r/1tv62//Wevva93rd+/P29/b39vb39XZ19XT59vn\na3dvW05bV1lRS0pKRklFTk1NTFn/d/drXdNrXefV79nR28rL18hnx9XvxUc/vfdBv8A8wtc9\nU8xdRtXRwi+7PWu7OMa1QUq5zji2OErXYzmwPzy2ON9b50xT389VSsRL42/fSknr71lGVb5K\n33fr69nn1VvZydfn28fPytnT293Ozevn2+Pd/1FTUf9vTVNv/+/dV+PZ0ddVVWfKZ2tv78pb\nQFVrd1VCP87May9bvsLTd0hRzs3/RE3IwNtfb//T109N29lVRNPG5zs4Pm/ZwcjIv7a9WT4+\nPzc8Oz1MvrO0vrmvtMlVRD45Ojs+W7/Da01TSzo1O0z/0c7Iure2v9fVuMvOxc9d50vLU9HR\na0DNSVdOvtlL57XBLi+urccpJkE+wsnO262tyTYsNSwkJSguR6+tt7utrcTnTD03SNnvTr+2\nvetbV05Z289v78W7wsXCv7m3vstfR0xGPkBfd/drb1NBR009SE7vY1PVwXc/Nz333z5frqzL\nRcm760pXut/Iuss9tKywMy9Hb++709m+t8kvJy06Kio9Q125rLxN2bbMR0tdX9O+utXRu7nv\nU9vVb8jCwd/Mvr/Z59HfX0pBOC4zNzo6Pj9FSD8+Nzk6Pzpd38nbz7y821XLra62zF27rq2+\nW9m2wL6/viv3razDLSlbTsvTzWe0rro0LC01LjEwMTu6rblJT7/E1VtZRG+8uNVT37/FV09f\n787AzdXdxclvRUZNS2fv91tdV0g6NzU3Njg7REpNU2NnY03rxsnGwcK9w7+/vlnZtK2vss1j\nObyvrVE4vK13NEe6xc/J2Tk5RVNATOs8KzdLPjVbxl9DT189NU/XSkvOtLu+t7TAvb6818/E\nv+PXzsT/U05LRFNv/0tNY2dRVUtBO0zrazs6P1FVb0k+SGtZPj/PyNl3y8VrWcC5ubG3wFdb\nyLe5ub7ZO0fMr733T10+NzzZydvRbysszq9nLCYuPe+2t+9jv8Y3LjVIP07O02vCra/Jzr/d\n3cu9zc69u91RUVE/SltbPUprd11rW1lVb1tXT3fO01c+TU5nT+PrzMrH0/9f/9fR31/TybjB\nPzhrr7PBRT7rt7LROUHJvj41O++2rsk0JyxTz99ES+/D11szOE1rZ1lPd8XJU0NASufOzm9b\n2bq4w8fGxsnK51VR48HIWVFMUVNJRklP6+9b9+vfy8zPzdvX2cvN6+v/Z3fnW9nrzONdSlFZ\nxMZbO0zP20NLZ105O85rPUDDTVtR2etX2bo117PBLzBbrsvBwsVVybe7Qk53d0VVV0ZA09dn\nPVHba13/UUI+VeNXRk9fVVlv42/v18rT0869wMPJzdXOwsHZ09HXZ2vv419bY0pHU1lDS0xf\nb1/v70Zj38nM68zAz8Nra8PHsrlny9fH01XIvlFvS9/jzclJLTnVzGc2Liw5a9dPMjtNPTlD\nzkZRXVE2PFvM/9u+vb28usjb073H083L08jCvsvZ1dFfTU5PW1dTW1NAXVlvT0prX2fPWVdf\nzbrBd9vPz81RRFnbvLXdU1XV5+NPWV/V72M4S9/nVV1X2T9Fw81TWXfDvk5jxcd3vlVMSsy5\nzOvn2V/jW+/dw+vdRUtvb0rb183jWUpFOz1nUWtVRktVT3d3WV1TV8vNa/9n3+dfTk1K/2v/\n12tnyt1Tb1nvvsjO1+/Z690/48fB1XdEUWNXv80+z9tvxFHj2e+7wz5ITOu4wf9dW8+497vR\n/3dd/8F3vb1XzcxXd8e/yD9ARj9K93dnTmdPOjg+ODs4OUBGXc7ZY2d3ysTBys/Pz9HPzcnJ\nycbI59/Mb9Nba+9jW+/Z33f/XU5ZREhTS0VGP05KRFFEO1NnWV3fzN3DvMtJWb++29Oyw0NZ\nycK2vudLTve1XUHOucTnQUNTXcO6w8fE31FDOz4+Ql9X99vd599339njyctRVWNnXUVGU0hN\nX0tETnfbV05VW+PVz9vvz8HRWWf/73dM/+tPWeNbQU1nd3dfUevra8e93U7vxL/rRNe5w9fK\n//e9xeNnV13Hzl/LPjbTt2tFOjpn42PJ20zV401GPUxXU09KXW/Nv87Pyb/Gy9tn0cLI02f3\n193v6+93a9fT///3d9HT493b39nvVU9nb1tNRkBGWUpDPUdPTENHRkpHX2dVTOPZUVm7ylXV\nsdtv97fnz765d//Tz2/P/2//xdlORszF6z/bZz4+T0k/P01LRkNKS1Nfa11399Pd2dfT2c7N\n0dPdy8rGxcrMysvMzs7O0cbJ3d/r09/f3/f3b+tjX2djZ29rX1NdZ2tvXW9379nvX13r61tZ\nU11RVUxHSUtOSExFSElLTEBKSl9bW2tvY/f/4+9d53fj3evf39fR09vTzM3R09/d1cvd1c3X\n1cvZ49vT4+fn49Xj3efR3e/d2ffvd2Pn//fvb29v/11jU1VVV1NdUWv//1n/a+tn/2tf5+PZ\n5/ff5/9v9/9dXXddY29rY/93X2vv/2tna/djY1tn63f/d9v/b+9n72//X/fr4//v73fj//f/\n/2vn/+Nf42/d/+P35+ff//93Y+93/2df7//dWV1n6/9rXVvrd+t3593j73fvY2v/X1dv/1VV\nX+9jZ/9vb//rb29v2+vf2c/r3c73593j79XVXefA7+PDyt/E41vAdz/b02dT019I22NFztdn\na11r92dPX/dN611T/1fnY2NM10/vTUDBOk9fRlPTPl3nOsrFP1Hda+P3791Jz8FdXd/Kz9X/\n/9PD/1v32ePr9+/TzdHV69nM2ffVy9P/09fb1///3+/j/19j1+9MTdnnVdvjW0ffX01R3dFN\nV29JTstRS+vIdzpV0T9Pd91TVcm+S0q9xks+WbzJVUndz9NfSMC9w3fr0c9ROj5J7z09RM/T\nXVvby9vI1VFr2fdHVWPvSVvRXU1d2c1v49XN68vI5+fFv9/VxcXT0c/M513Tb19b929RTmNK\nQFNGTVlRU05F62tNUWN3XWvbSVPOU09T2c1jS2PXy0fKu79fSsy/d//V0azRSGe8wWNDz8HP\ny1nZzdNdR2e/S1Pf70tfV09Cb11BSO9dQERvRj5TTk5KTF9LT13v29/v1ev3VVf3b2/j529Z\nz2P3z8pX78TVWdu+3+vf0cDM/92+zv9Pz9HnU8nL61vXx+fdQkvfW0FI3czZ3/fvY11da09n\nRXfP30df/9lR4+9vX+//SVljW0//a1Pfxe/vzNHG0dHfzdfb2c/37+N342tv/+NXVetjV1FT\nW01GUUljX1lT7/dvTevX21tdzc7j683N09fP1+Pf905bT1lIU//3Tl/Vz01v0e/3VVvIzEhb\n93dTXedrWbzTTNvB30j3w8Rnv8fZ1clrb9vG/0nGykpDa0hBT04+X/9NRlfvb2tV62ddSEl3\nY0tj3dfV1dHbyt/r09PPxN/XyL/L2cu+71PO0eNbz8znd9dd3ddfW+fdV1FfVUZjVUtO/08/\nVe9HT11VW9XvV2fMxetHUd/VQj9b3UxIR1XTd1Vb49f/Rf/P41Vj2d/jXffP0ev35+t3d1tj\nz+v/28rK49nTa8C/7/e/ws7Gxt3Jxl1jxM9V38xVb+9PTOtPR0ljU09XWU5nY0lf711T93dV\nXV1OXVljWWPb/2fn2dXn68zN3dvb/+ffZ2vn52tf72tRW3dbW11Vd2tOW/dTWXd3W+Pv7+vP\n9+Pj53fj419n4+N3Z+/j9/fr6//nb1vv6+Nv79/TZ//j7//n6+v3z+P/59nrb9fr79/f4+/d\n4+vf2+vv5+tnZ3dvZ2tnX19nZ133XVlTVVldZ2NnW113/2tv72f37+d349nn3d/V09vb3/fr\na2Nra1lZa19nX19TU19PT1VLTVVbUVFVWVtZX1dvd3dr3d3V08jPzdnP2dfR19fT09fb2czX\n3czX2c3d39nf7/fj5+/d2+t333dvY1NXU11PV19bVVNrV2tbWVlvX3dd6//v63fv9/9f71/f\na+//3eP/92fd399v79nv9+vra2//a19TY09ZV1ddT1FOVVdZX1/vXf9fb/dv2f/d09nf09fX\n3dfZ1+PR09PR09ff3dPj1evb19v36+/v4+fZ3e/va/9jZ1VbWVVPW1lXWV1bZ2NfX1VbS1lN\nU0lJWVVNXXdfb3f3991r2e/P1dfX2dPj29PV09vT3dPbz9/Kz8/dzs7f1+fj3+PrZ3fj7/93\nZ1tjUV9LVVVPUU1KS01LTUhNVUxTUVlTW2dZd2tvZ2Nf7+dv39vjz83O0cjNztXI2czTx9PK\nytPL1dHbzc/T19fn7/93X2djX19XV1VbT1FXVU1NTldRTFFOU1VZY1NXb2NrW2Nbb2vr/3fn\nZ///7/fj59/b4+fr6+fr5//P29XN1cvjz9vZ2+/P2d3d29XR39n/7+vn72P3b29db19RZ2NP\nY19dX1VdZ1lZVWtfd1lbY3fvd+93X/f3Y/9v//9vWd3dd//jb2trXVtfV11fY1n/WU1vWV1b\nd2fv493j1dvR1czdzs7PzM7HzMnb3ePv39X/z9nf29/33efjd2fnZ2tfd19fV3drd1dna2dP\nVV1dV1lZZ2NrX/9dTedV/2dX51lnX2f3Z+P30/fn9+9f591rb2PvVV33a/9r7+/ra3ffb+f/\nd+P/79nr3czVd83Ry+vT2+Pd39fv5+vn2ff/429n999f/193Z+/rb/dvb+939/9RWV13TEtr\nU05NU1NXTENTWU1MSUxdd1NZ9/fr/93V19PN08zP2c3j18/X48jN3czZ0dnR1Xfr7//n5+v3\n62vr53ff4+vj3+dv91lrZ/9nW2trZ0pdTldRd11ZTlNnUWtbZ11nW+//W1dZU/9P93fv33fr\n42tf2evPb+fv5+dn42ff39vnzdfj/3e6Vb1r39XZ1dPnzWPHa+dj2ePfSe9Na1v/THdZY2P/\n411rY2dPVevvZ+v/b0vV30TTY3f3/2fbV+Pnd2/rV9FdY1t3Tk93X05b61dnd//nb9/O1dPJ\nysLJycfL383F1dfP1+Pb59X/0//j51vZZ2tjX11ZX1dMU0NJRkdbTVdKd2NjVVFOSVdTY01r\nZ0/jY+Pv0+vfyevf79XfVclv41X/W0/vVe/va+fj02vvzkrNy1vf58tR1cJvzcrv38zNzMzK\n0b/b6//Xb/fE3cX/08pJwP/b51lbTe87Ttc5/0NExi652y+0Lsn3N8tLVzi9PTXEP2/nQ11b\nW81Ld8VB18w2x0TA2U9r0dXT9/fbxE7f72PFWc1Jz8vT79nD3cDDZ8S668P/XbvGTcPdv13/\nx9Pnx+tXy2vRTzr31ztM7z5vWUdTQ0zbPDjOU0HrTlNNz1VdTffvWW9N7+P/R2fd2U/OTV3Z\nW0dL31FH68tZ0d/P2cr30f/M/2PGy8rC48i7ycBfu71jy9tjumvXzP/Ld1fZW1XdS0/nUU9X\nX01bQ9FTPf9Fb1tCb0lX2T1X0VHbV0jnU81KP75RY8rrZ8LZ7/dZwWtOv/drxv9bu0y5wky6\nTffXPtnf/+PMUW/Z//dCWVnfW1NDUc9v4+dVv9dVZ1Vv2UZN6+/VU2Nf/+t3S1dv72dGXcx3\na//j2//3Z3fjzlNO61Pb70xr41ffb0/ba2vfd+PK1c3CztnX19nX0cbRz8fVxcPbydfZ083j\n3c/jW1vf49/P1ePf1+d372dbS01LSj9MSEVHSkRKTERESEpDXUFLTUlHRk9ZVU1nRU9bVWNb\n3/fv2ev349v/0+dr49PTys/RzsvXzdvJx9nH2cjLzc/Rx8vKycvIzMXOyMPIxcjPzdHb2evX\n02/jZ3f3VWNrWWtdSE5LS0tCR0dESUpISEhHSUBIRkhJRElMSkpNSFFRTE5KVVFRU2Nv2e/v\nzdvO1cnLxcfAxMPCw8jEyNXG2c7ZztvVzdXT0dHPz9PZ19Hj09fb3dnf3+//d29TTldOSkVF\nQ0dHR0hCSkhMS0lVTUtOSU1OWUxfU2v3V//Z29HZysnIycHIvb2+v77FwMXJz9PX6/dbb1tX\nWVtVV2dnUWtfWfddXWf/6+dn7+fv5+9n32tnWVNZVU9NT09OT0dZTWtZU1tTXVVRWVNTV1FV\nXV9jWVl3b///b2d3a+vb2cnXzsvOzMzKzcvFzsXDysTHw8rKxMzK0dHT39Xd59vr3+P32+Pn\n32fdb9/r69vv79/v493v7+9db1tjVU5XS0tKSkVJRUQ/QD89QTw/PDs9OzxAPD5BQ0RLS1FR\nW2dd79nVyMPCv7y+vby7vLq9ury4vb25vb7AxL/DyM7MytXZ2+vj/1tvV11ZWWNdb29TW09f\nSltNTFtjVVNTSlFKRExISkhNSE5JS0xLS05MV1NfV2tfX1VbZ2v3/+fV39Prys/d09Xf39HV\n3d3KycjT183f0+fj29fT3ePR4+Pj29/P59vv3+/r59vr1d9r9+//d99Zd1dRVU5dTndnd2Pr\nZ+tjY1lTU01rUU5ORktPRUpNS1lPU1lMb1lbVV1vU2tv72fn2evZ0dPNzcnPzcnKxca/xMC+\nvr6/xca/wczIzM7P3dPf/29v92dna1VMU05DSFFRQUtBQT8+PEJAP0E/QURGSUlNU1VdZ1ld\n99939+PPd9Pd3/fP38/b1dvXzsvPzNfP48vj1czZxcfIy9PAxcbKxs3Rz8jH2dXT49tf/+db\nd3dnY13rTWtRWVlDW09MTUhJQUJIS0ZJSU1ISEtKT1tPXUxfTVdXXV33Y2v33f/X2+v/39t3\nzd/X3eff1d3Z3dPv6+fv3dvZ18jHy8LIx8jHw8jFxsfNzuPf23fZ3fdr/+9fWVdVU0pRS0hP\nR0pBS0tEVUtTT1lITE5RT2NTX29nb+v32efTz9HIysvRxsjLzcvJys7Mz9XT1dfd3dnj28/d\n3e/f9+tbXVVTW0hPREtIRlFHT0xPSklJQ05GSVFPTl1RW1tfV+tvU3dv1eNr99/r19nZ0dXb\nys7VzMnKysrMzcvR09nX0+Pd1c/T0dvj593Rb+PZ6+fj5//rW2/vZ/9jZ2tjb2Nj73d3a2tr\nd2dbb3dnWWdV73dbd1FrUVlMWU9fVV1dW1n/Z/9fa19VWWtbb19V19dd4//XzG/j60fE29nJ\nVdXDVczZVdvF/93bW9tOY9dPb2dJV1FOX0RX/29rXW/v5/f3593Z0//XzufRztPnY89n5+tr\n3e9v3+Nvd1vfb2/dY2Pf3e9rW3dvWetrVWdvY13rZ2tr2Xfb4+/V791j7/fv3f/rd/fnd9nr\na+td//9Vb1dn429fZ3fra3dnd/djW1XrW/93X293Wffjd2PnVXdnd1f/a11j92ffXXf3791v\n5//n32P3a+Nj01fO/93P99fb2+fT2d3n7//d5+fr5+Pf3czZ2dPT19HN3dnX6+v/a//3Y3db\nV2ddXWtXd2drb1lRWU5bYz9IW1VXd0j/W1VvVVvbTmtOY1F3WU5XW19vV11fV19bV/9rb9vX\n69Pd29fV39HZzs7NzcrM1dfG29PM29PZ38jT68fN38hZ68lN01HRT2vnWdVX91NZZ1N3b1tv\nT2NMX1H/UVVbX2tVZ2NPVVdjWV1OWVVjT1VZWV9Zd2Nf7/dv49lrzslnv9fFv9nr38nvyt3f\nzmfOXd1d//fX4113V3dZ91f/71ljV1dXZ3drY19nV09XW19ZY1tVWW9bWWNnY29j42vj1+vj\nzMrOzGfna8JVvlfZ3+93601vd//Td29jd1FdX+/352Pr//fv7+/Z2f/j6+/v/2v/b3dVWe9f\na2NjX3dvX+N3d9vZY9XXWcdZxshT3WN31ddEyU9O7/9ZX0RZXWt3V1tPVU9bTmtdY3dba3dr\n79nf29/d5+P/a2dr62fr53ff6+vr3d33z9nR19Pb2c7bz83P593v2d932/9vY03n12dN70jv\n//9O70ffRtlX/01bZ05ZX2NJX0pOX2NVXVdTZ2Nv72P35+fr1dvZ2dPR08vR19PM49XT59//\n4+vnb+vn/+fv52/ZW+Pvb/d3a11na+9nb+dnZ+//a29rX2NZa1tZY2Nfb2f/a2/vX2v/91//\n//f/4+Pr6+/v4+fj7+vdd/9vb29rd2/3d3dX3dnvX19P49n/0WNr32dv/1nv3etvb/fr29vX\n49/d1+/v3efj92tvZ3dvb3d39/fv5+/r7//j6/9db2NRZ09nXV9ZV11rWVljb193Z2tfb2Nv\na2tnX2N3Z+vj79/r3d/Z1c/R087bzdvZ2+Pr28/d3d3v7/f/92Nra1tXXWtXWV1ZZ3dfZ29r\nY2dbW///929rb2/rd1trb29X/1ddXVnvX29j71/ra+fn/2933+9v29HT30+/zdfZ3d/Lzr/f\n0c5ra9nV1+Pj3Q==\n\n--Outermost_Trek--\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/stat.txt",
    "content": "+OK 7 1800662\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/exchange/uidl.txt",
    "content": "+OK\n1 6499\n2 6500\n3 6501\n4 6502\n5 6503\n6 6504\n7 6505\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/auth.txt",
    "content": "+OK Welcome.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/capa1.txt",
    "content": "+OK Capability list follows\nUSER\nRESP-CODES\nEXPIRE 0\nLOGIN-DELAY 300\nTOP\nUIDL\nX-GOOGLE-RICO\nSASL PLAIN XOAUTH2\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/capa2.txt",
    "content": "+OK Capability list follows\nUSER\nRESP-CODES\nPIPELINING\nEXPIRE 0\nLOGIN-DELAY 300\nTOP\nUIDL\nX-GOOGLE-RICO\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/dele.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/dele123.txt",
    "content": "+OK\n+OK\n+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/greeting.txt",
    "content": "+OK Gpop ready for requests from 24.91.170.86 hv19mb95710270qab\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/list.txt",
    "content": "+OK message sizes follow\n1 1024\n2 1025\n3 1026\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/list1.txt",
    "content": "+OK 1 1024\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/list2.txt",
    "content": "+OK 2 1025\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/list3.txt",
    "content": "+OK 3 1026\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/noop.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/plus.txt",
    "content": "+ \n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/quit.txt",
    "content": "+OK Farewell.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/retr1-parse-error.txt",
    "content": "+OK message follows\n7P7D8l/xpRAQcgD8l/xrYMGe357T/hR5OOMHj0HH4cUAZHkn3/MU8QdOOPX5j/8ArrU8r2b8v/rU\n4Q+34k/4f4UAZwh5B/8ArDrn7vb8v0qZYfY/kQNvq2R+f8/W6Iseg/U/5/GpBHn1P8v/AK350AVR\nH2/Qf/qqwsfHPHsMVMIz7D/PtUoQdlz+GaALNFFFABRRRQBKqLgcdh3Pp9aftXB4HVew96KKHu/+\n3f8A0iIBRRRQAU5QCcH+8f8A0FaKKAEP9B+oFJRRQAq9R9R/OkwDnIB4/qKKKAIWGCQOP/1Ug5IH\nbI4oopR2XovyAjYDHTru/VTn88VFRRTACAeoB+tQuADx6f40UUuq9H+cQG0UUUwCiiigAooooAKK\nKKAHKMkA8/8A6qlQD5eOuM/jiiik9vmvzQC0UUUwCpVAwDjn/wCv/n+VFFAD6KKKUdl6L8gCiiim\nAUUUUAIVU9h/L+VQnr+C/wAhRRQAlFFFACYHoPyFGB6D8hRRQAmxfT9T/jRsX0/U/wCNFFZRbb1b\n6df70QDYvp+p/wAaNi+n6n/Giind3jq9118ogLgeg/IUtFFaAOUAnn0/wqaiih7v/t3/ANIiB//Z\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_--\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/retr1.txt",
    "content": "+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: multipart/alternative;\n\tboundary=\"_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\"\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/plain; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n   \t\t \t   \t\t  =\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n<html>\n<head>\n<style><!--\n..hmmessage P\n{\nmargin:0px=3B\npadding:0px\n}\nbody.hmmessage\n{\nfont-size: 12pt=3B\nfont-family:Calibri\n}\n--></style></head>\n<body class=3D'hmmessage'><div dir=3D'ltr'><div id=3D\"inlineImage0\" style=\n=3D\"display: inline-block\"><script type=3D\"jsv#2398_\"></script><span conten=\nteditable=3D\"true\">&nbsp=3B</span><div style=3D\"display: inline-block\" unse=\nlectable=3D\"on\" contenteditable=3D\"false\" class=3D\"inlineImage\" initheight=\n=3D\"323\" initwidth=3D\"430\"><img src=3D\"cid:inlineImage0\" height=3D\"323\" wid=\nth=3D\"430\"></div><span contenteditable=3D\"true\">&nbsp=3B</span><script type=\n=3D\"jsv/2398_\"></script></div> \t\t \t   \t\t  </div></body>\n</html>=\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_--\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: image/jpeg\nContent-Transfer-Encoding: base64\nContent-ID: <inlineImage0>\nContent-Disposition: attachment; filename=\"test.jpg\"\n\n/9j/4AAQSkZJRgABAQAAAQABAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\nSlBFRyB2NjIpLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAUMB\nrgMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQD\nBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp\nKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma\noqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/\nxAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQID\nEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF\nRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqy\ns7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/\nAP6tPL9/0/8Ar0eX7/p/9erflj+6f1o8sf3T+tAFTy/f9P8A69Hl+/6f/Xq35Y/un9aNgzjac4z/\nABdKAKnl+/6f/Xo8v3/T/wCvVvyx/dP60eWP7p/WgCp5fv8Ap/8AXo8v3/T/AOvVvyx/dP60bBx8\np56fe+tAFTy/f9P/AK9Hl+/6f/Xq35Y/un9aPLH90/rQBU8v3/T/AOvS7B6n9P8ACrXlj+6f1o8s\nf3T+tAFTy/f9P/r0eX7/AKf/AF6t+WP7p/Wjyx/dP60AVPL9/wBP/r0eX7/p/wDXq35Y/un9aPLH\n90/rQBU8v3/T/wCvR5fv+n/16t+WP7p/Wjyx/dP60AVPL9/0/wDr0eX7/p/9erflj+6f1o8sf3T+\ntAFTy/f9P/r0eX7/AKf/AF6t+WP7p/WjYD2J/P8AWgCp5fv+n/16PL9/0/8Ar1b8sf3T+tHlj+6f\n1oAqeX7/AKf/AF6PL9/0/wDr1b8sf3T+tAQHkKf/AB6gCp5fv+n/ANejy/f9P/r1b8sf3T+tHlj+\n6f1oAqeX7/p/9ejy/f8AT/69W/LH90/rSbF9P1P+NAFXy/f9P/r0eX7/AKf/AF6t+WP7p/Wjyx/d\nP60AVPL9/wBP/r0eX7/p/wDXq35Y/un9aPLH90/rQBU8v3/T/wCvR5fv+n/16t+WP7p/Wjyx/dP6\n0AVPL9/0/wDr0uwep/T/AAq15Y/un9aPLH90/rQBU8v3/T/69Hl+/wCn/wBerflj+6f1o8sf3T+t\nAFTy/f8AT/69Hl+/6f8A16t+WP7p/Wjyx/dP60AVPL9/0/8Ar0eX7/p/9erflj+6f1o8sf3T+tAF\nTy/f9P8A69Hl+/6f/Xq3sGM7TjGf4ulHlj+6f1oAqeX7/p/9ejy/f9P/AK9W/LH90/rR5Y/un9aA\nKnl+/wCn/wBejy/f9P8A69W/LH90/rR5Y/un9aAKnl+/6f8A16PL9/0/+vVvyx/dP60eWP7p/WgC\np5fv+n/16PL9/wBP/r1b2DONpzjP8XSjyx/dP60AXNh9R+v+FGw+o/X/AAq95Weqj8CF/Wk8vtt9\n+v6bv8+uKAKWw+o/X/CjYfUfr/hV3yv9n9f/AK9Hlf7P6/8A16AKWw+o/X/CjYfUfr/hV3yv9n9f\n/r0vln+6P0oAo7D6j9f8KNh9R+v+FXvLP90fpR5Z/uj9KAKOw+o/X/CjYfUfr/hV7yz/AHR+lHln\n+6P0oAo7D6j9f8KNh9R+v+FXfK/2f1/+vS+Wf7o/SgCjsPqP1/wo2H1H6/4Ve8s/3R+lJ5X+z+v/\nANegClsPqP1/wo2H1H6/4Vd8r/Z/X/69Hlf7P6//AF6AKWw+o/X/AAo2H1H6/wCFXfK/2f1/+vR5\nX+z+v/16AKWw+o/X/CjYfUfr/hV3yv8AZ/X/AOvR5X+z+v8A9egClsPqP1/wo2H1H6/4Ve8s/wB0\nfpR5Z/uj9KAKOw+o/X/CjYfUfr/hV7yz/dH6Unlf7P6//XoApbD6j9f8KNh9R+v+FXfK/wBn9f8A\n69Hlf7P6/wD16AKWw+o/X/CjYfUfr/hV7yz/AHR+lL5Z6bR1/wBn+f8Akd6AKGw+o/X/AAo2H1H6\n/wCFXfK/2f1/+vR5X+z+v/16AKWw+o/X/CjYfUfr/hV3yv8AZ/X/AOvR5X+z+v8A9egClsPqP1/w\no2H1H6/4Vd8r/Z/X/wCvS+Wf7o/SgCjsPqP1/wAKNh9R+v8AhV7yz/dH6UeWf7o/SgCjsPqP1/wo\n2H1H6/4Ve8s/3R+lJ5X+z+v/ANegClsPqP1/wo2H1H6/4Ve8s/3R+lJ5X+z+v/16AKWw+o/X/CjY\nfUfr/hV3yv8AZ/X/AOvR5X+z+v8A9egClsPqP1/wo2H1H6/4Vd8r/Z/X/wCvR5X+z+v/ANegClsP\nqP1/wo2H1H6/4Vd8r/Z/X/69Hlf7P6//AF6AKWw+o/X/AAo2H1H6/wCFXvLP90fpR5Z/uj9KAKOw\n+o/X/CjYfUfr/hV/yz12jr/s/wAv8jtSeWf7o/SgCjsPqP1/wo2H1H6/4Vd8r/Z/X/69Hlf7P6//\nAF6AKWw+o/X/AAo2H1H6/wCFXfK/2f1/+vSiL2A+vP8AjQBf8r/Z/X/69Hlf7P6//XrS8r2X8v8A\n61Hley9Md/8ADr79aAM3yv8AZ/X/AOvR5X+z+v8A9etLyvZfy/8ArUeV7L+X/wBagDN8r/Z/X/69\nHlf7P6//AF60vK9l/L/61Hley/l/9agDN8r/AGf1/wDr0eV/s/r/APXrS8r2X8v/AK1Hley/l/8A\nWoAzfK/2f1/+vR5X+z+v/wBetHyR7fmaPJHt+ZoAzvK/2f1/+vR5X+z+v/160vK9l/L/AOtR5Xsv\n5f8A1qAM3yv9n9f/AK9Hlf7P6/8A160vK9l/L/61Hley/l/9agDN8r/Z/X/69Hlf7P6//XrS8r2X\n8v8A61Hley/l/wDWoAzfK/2f1/8Ar0eV/s/r/wDXrS8r2X8v/rUeV7L+X/1qAM3yv9n9f/r0eV/s\n/r/9etLyvZfy/wDrUeV7L+X/ANagDN8r/Z/X/wCvR5X+z+v/ANetLyvZfy/+tSeSPb8zQBneV/s/\nr/8AXo8r/Z/X/wCvWj5I9vzNHkj2/M0AZ3lf7P6//Xo8r/Z/X/69aXley/l/9ajyvZfy/wDrUAZv\nlf7P6/8A16PK/wBn9f8A69aXley/l/8AWo8r2X8v/rUAZvlf7P6//Xo8r/Z/X/69aXley/l/9ajy\nvZfy/wDrUAZvlf7P6/8A16PK/wBn9f8A69aXley/l/8AWo8r2X8v/rUAZvlf7P6//Xo8r/Z/X/69\naXley/l/9ajyvZfy/wDrUAZvlf7P6/8A16PK/wBn9f8A69aXley/l/8AWpPJHt+ZoAz/ACz/AHR+\nlJ5X+z+v/wBetHyR7fmaXyvZfy/+tQBm+V/s/r/9ejyv9n9f/r1peV7L+X/1qPK9l/L/AOtQBm+V\n/s/r/wDXo8r/AGf1/wDr1peV7L+X/wBak8ke35mgDO8r/Z/X/wCvR5X+z+v/ANetLyvZfy/+tR5X\nsv5f/WoAzfK/2f1/+vR5X+z+v/160vK9l/L/AOtR5Xsv5f8A1qAM3yv9n9f/AK9Hlf7P6/8A160v\nK9l/L/61Hley/l/9agDN8r/Z/X/69Hlf7P6//XrR8ke35mjyR7fmaAM7yv8AZ/X/AOvR5X+z+v8A\n9etLyvZfy/8ArUeV7L+X/wBagDN8r/Z/X/69Hlf7P6//AF60vK9l/L/61Hley/l/9agDR8oe3/fI\n/wAaPKHt/wB8j/GtPyvZvy/+tR5Xs35f/WoAzPKHt/3yP8aPKHt/3yP8a0/K9m/L/wCtR5Xs35f/\nAFqAMzyh7f8AfI/xo8oe3/fI/wAa0/K9m/L/AOtR5Xs35f8A1qAMzyh7f98j/Gjyh7f98j/GtPyv\nZvy/+tR5Xs35f/WoAzPKHt/3yP8AGjyh7f8AfI/xrT8r2b8v/rUeV7N+X/1qAMzyh7f98j/Gjyh7\nf98j/GtPyvZvy/8ArUeV7N+X/wBagDM8oe3/AHyP8aPKHt/3yP8AGtPyvZvy/wDrUeV7N+X/ANag\nDM8oe3/fI/xo8oe3/fI/xrUEJJA2yEnoAMk8fwrXnHjf4tfCz4agDx58QfCnhe4fb5Wn6nrNmNYu\nGbO2O10O2e41i7aTkeXbafLL6+tJyjFXk1Fd20vuu0vxGk27JNvsk239yOz8oe3/AHyP8aPKHt/3\nyP8AGvB3/aFt9Wh+0eAPg78dPiBZN/qdbt/AUngTwpMrfckj8UfFG/8ABdg8P/TxH5sXlfvfeuI1\nf9oH4oWm4t8O/g54NQHr8Qv2kvDM15GvHzXOl/Drw340dH/6Zx3v4VhPFYen8daEb93p8mk079LX\nvbpoXGlUl8Mb9LJq/Tpv11vb87fV/lD2/wC+R/jR5Q9v++R/jXwzL+0x49LFW+In7GelsODFN4u+\nNWrMrf3WuIfAelwv0/5Zx1s6b8efinqDqun+PP2KtcdioW3g+IHxa0OR2ZvlVJ7/AMGagife6SR9\nPesnmOCSv9Yp2788Ele3Vyst+ttNS1hq7/5dVPTknfa+vu6H2b5Q9v8Avkf40eUPb/vkf4188WHx\nK/aCMYnb4HfDzxvbYUmf4X/tDeE7y4dTxut9L8caL4Pd3/6Z/bP8Bdn/AGjdK8OIH+KPwp+Ofwlh\nG0S6t4p+HGpa74ViyvzM3i7wBN4s0VIYuf8ASLi5ii64q4Y3C1FeFaMlpdxvKK1trKKcVbrqyZUK\nsbJwabv7rcVLT+65c3fp0+R715Q9v++R/jR5Q9v++R/jXOeCviN8PPiTaG9+H/jfwv4xt1X95/wj\n+tafqNxb9dy3ljDN9vs3j/553tvFLFXbeV7N+X/1q6IzjNXhKMl3jJSV+102nby07NmbTi7STT7N\nNP11W3/BMzyh7f8AfI/xo8oe3/fI/wAa0/K9m/L/AOtR5Xs35f8A1qoRmeUPb/vkf40eUPb/AL5H\n+Naflezfl/8AWo8r2b8v/rUAZnlD2/75H+NHlD2/75H+Naflezfl/wDWo8r2b8v/AK1AGZ5Q9v8A\nvkf40eUPb/vkf41p+V7N+X/1qPK9m/L/AOtQBmeUPb/vkf40eUPb/vkf41p+V7N+X/1qPK9m/L/6\n1AGZ5Q9v++R/jR5Q9v8Avkf41p+V7N+X/wBajyvZvy/+tQBmeUPb/vkf40eUPb/vkf41p+V7N+X/\nANajyvZvy/8ArUAZnlD2/wC+R/jR5Q9v++R/jWn5Xs35f/Wo8r2b8v8A61AGZ5Q9v++R/jR5Q9v+\n+R/jWn5Xs35f/Wo8r2b8v/rUAZnlD2/75H+NHlD2/wC+R/jWn5Xs35f/AFqPK9m/L/61AGZ5Q9v+\n+R/jR5Q9v++R/jWn5Xs35f8A1qPK9m/L/wCtQBmeUPb/AL5H+NHlD2/75H+Naflezfl/9ajyvZvy\n/wDrUAZnlD2/75H+NHlD2/75H+Naflezfl/9ajyvZvy/+tQBmeUPb/vkf40eUPb/AL5H+Naflezf\nl/8AWo8r2b8v/rUAZnlD2/75H+NHlD2/75H+Naflezfl/wDWo8r2b8v/AK1AGn5I9vzNHkj2/M1q\n+V7N+X/1qPK9m/L/AOtQBleSPb8zR5I9vzNavlezfl/9ajyvZvy/+tQBleSPb8zR5I9vzNavlezf\nl/8AWo8r2b8v/rUAZXkj2/M0eSPb8zWr5Xs35f8A1qPK9m/L/wCtQBleSPb8zR5I9vzNavlezfl/\n9ajyvZvy/wDrUAZXkj2/M0eSPb8zWr5Xs35f/Wrz7x18Q9C8CrY2k0N/r3inW3aDw14L8PwNf+JN\nfuuqx2dnHn7NbR/8veqXnlWtrEHlnlPl+VUVKlOlHmqSUIrq77tpJJJNyk20oxinKTdopvQqMJTa\njBOTfRW0S3bbskktW20ktWzqpEjijkmleOKGFGlmlllWKKKONd8kkzvsREjRWl8ySSvn/VPjnBq8\n9/pXwc8L3XxUv9Ola11PxMmpWvhj4T+HbpW+Zde+JGqp/ZVzNGNw/svw3b6zfyn91DF51fKHxm+O\nuih71PiVqVj41u7CSRj8I/COsTRfCrwzcQn5YfiR4wsJre8+JGvWbqv2rw/od5a+HLa6R4ry/lmj\nltq+VB4h/ad/ayki0b4fWp0H4daczadBrAhbwb8NNBs1bZJY6HZabbW51L7OhaOXT/D9hL5v/MS/\n5615tXGVpS9lQptTfK+Vq9RKVveqK8oUFdpqM+adkrqnex108PBJTnNOH8/vKm2nqqbVp1WrW548\ntJN2U52uvqj4pfG7wXoYuY/jh+0NrHiG6AYy/CL9mlLrwd4fjb+LT9c8fXX2jxzrMf3Y5fMvPBsU\nv/LGLnFfLOiftUeIrq/uNI/ZE/Zt8K+ELuWRo5fFGn+GLzxz48mZm/4+tU8VbLzUobqT/WSyap4s\nu4vN/Cvpj4W/8E/PhT4T+z6r8Rru/wDiz4jUrLJHqyvpXg62uPvstn4Zs5v9MSN+suuXl+JT/wAu\nsVfcGk6HpWg2EGlaHpen6Lpdsqx2+m6RZWem2MMYX5Fhs7OG3hTv/wAs/Xms45dWrSU8VXm29eSM\npxjHVe63GUZSje11UqTWmi7OWJpQ92jTuusppa7aqK92L0tdRTe7ber/ACnl+BX7bPxkmOofEvx/\nquiRXX7x7fVPFdrpLqjfejbTfCttql5mPd/q7i8il5rpNL/4Jy2Vxtl8V+P47+c8ymPS9a1hmZs7\nv9I1jXoy/wDF+8ks+ea/UUQ+o/M/4Uvkj2/M12U8vwtPaHrqo32v8KWrtq3dvq3ZGMsVWlvLRbLW\ny+9n55Wv/BO/4SwoBPq+pTMQSTF4e8Nwr9VWazvH9uJKbd/8E6/hHcIwh1nVoGI4Z/D/AIZlUN/e\nZYbGzk9MfvM/0/Q/yR7fmaPJHt+Zrb6tR/59r5uT7d5Pt5eZn7ar/O/w8tl02R+XOof8E7LjS2N1\n4C+K1zod2nzQk6drmiMJP4f9M8O+Ifk7Z/0P8KxT8Pv+Ch3wXJu/AfxE1jxzp1sGItLDxbb+IZ5I\nV/5ZtpvjC20vWH/697PUJpe0Pav1h8g/3f8A0KjyD/d/9CrKpgMLU1dJJ7qS3TtZWbu9OmvqXHE1\noqym3F2vF6p2SVmn002/4FvxM1T9q+E+IILD9qH9nHRLbxhE6hPGej6RrXwc+J8Eqt815Y+JtHfR\n9SvJo3/efaLjVNZtpf8An1lhr7M+E37Rst/9mi+F/wAYbX4g2jeWE+FP7RV3Y+GPHAVj8tn4R+NV\nhbW+g63efKsdraePNL0uW6+SKG/lm/fV9keJvB3hfxrpU2heMfDuieKNGnVll0zX9NtdVszuX5mj\nhvIZPJf/AKeLby5Ys/uZa/Pb4qf8E7PDkxude+A/iGXwNq2JJv8AhCvENzeax4Iv5G+drWxvJvtG\nt+HhJ/q/M8zVLT5zF9ktYf31c0sDOm+alOcrWvafsqySaaUKq+JJr4ZKUGrrl76RxCl7s0o36cvP\nS/7epyb5b2s5U5QktNT9HPA3xg8LeM9Wm8JX1nrHgP4i2MSy6l8OPHVm2ieKIY2Xe91pau8mn+JN\nKkw8lrqnh+8v7WWL99+6hkr1vyR7fma/APR/in8TPhXqFh8I/j/4Lv8AXdI0iRZtF8L+JNVksNd0\nNY5Pl8QfAf4tW32i58PXMbqslrpf2zUPCV/MkdrqWl2s0ktzF+m/wk/aFgi0Oy1HWvFE/j74WzX9\ntocHxNu9OXTPGvw81y4X/RfBvx48MwvJ/Ymq7GWOw8YWfm6Dr0QS/s7m6gk82JRxtWhFyrp1qEOV\nVK0YcuIw12knisPC6dO7/j0LxbtHkb53Cnh41WlTSp1Zawp83NRrWSuqFV6qpo26NX32ruEpR5b/\nAGL5I9vzNHkj2/M1pReVPFHPBIs8MyRywyxOssUsMi745IpE8yN0kR1kikjk/e+vq/yvZvy/+tXq\nQlGpCM4SjOE4qUZRalGUWk04tXUk09Gm0+jZxtOLcZJqSbTTTTTWjTTSaaeljK8ke35mjyR7fma1\nfK9m/L/61Hlezfl/9aqEZXkj2/M0eSPb8zWr5Xs35f8A1qPK9m/L/wCtQBleSPb8zR5I9vzNavle\nzfl/9ajyvZvy/wDrUAZXkj2/M0eSPb8zWr5Xs35f/Wo8r2b8v/rUAZXkj2/M0eSPb8zWr5Xs35f/\nAFqPK9m/L/61AGV5I9vzNHkj2/M1q+V7N+X/ANajyvZvy/8ArUAZXkj2/M0eSPb8zWr5Xs35f/Wo\n8r2b8v8A61AGV5I9vzNHkj2/M1q+V7N+X/1qPK9m/L/61AGV5I9vzNHkj2/M1q+V7N+X/wBajyvZ\nvy/+tQBleSPb8zR5I9vzNavlezfl/wDWo8r2b8v/AK1AGV5I9vzNHkj2/M1q+V7N+X/1qPK9m/L/\nAOtQBleSPb8zR5I9vzNavlezfl/9ajyvZvy/+tQBleSPb8zR5I9vzNavlezfl/8AWo8r2b8v/rUA\nafkj2/M0eSPb8zWp5R9/++T/AI0eUff/AL5P+NAGX5I9vzNHkj2/M1qeUff/AL5P+NHlH3/75P8A\njQBl+SPb8zR5I9vzNanlH3/75P8AjR5R9/8Avk/40AZfkj2/M0eSPb8zWp5R9/8Avk/40eUff/vk\n/wCNAGX5I9vzNHkj2/M1qeUff/vk/wCNeWfE7xxc+FbSz0Xw9brqfjfxJItl4f0wBCIZJm2/2leD\n7iW9v80mJB5X7l5Zv3Mc1Y4ivTw1KVao2oxslFJuc5SajCnTirudScmowhFNyb7JtaUqcqs1CNrt\nNtt2jCEU5TnNvSMIRTlKTsopatHMfE34m/8ACLvJ4a8Lrp174yl0+61O5n1O7jtPDngzQ7WF5tQ8\nVeMNSmeO203StLhVryX7RJF5uzpiSKGX8nPH/wAa7/xAdUs/h9qXiC70zxU7abrvxJNvdWvxH+Ns\n00gh/sfwfabPt/gb4USO62+l6Vp8drrPi212XWpfZdNkisJdr4n+LD4+uL/wfoF5deIPAP8Ab6x+\nJ9YtDJNf/tCfEaxvNn2W3kT99N8JfB+qq1no2nx4tfGWvQvql7FLptvYRS/YnwN+ANr4GEXjHxdD\nb6j8Qr2H92Csc1n4Rs54/l0vSY/uJf7G8u/1CP8A27SzzD5st15r9vWrundfW4fx6i9+jlcZWX1a\nhpy1MwabWIxDuqEualSanCUqXWlShTVWSbwsv4NNrlqY5pq2IqppShhVJJ0KOnOrVat1KKfzt8IP\n2MYtS/s/xR8cLSGWKAJPofwrs5Nmi6ZGuyS3k8WTW0kf9pXceV83R7eT7BF/qryW6/e20X6CWmnW\nmn2ttYWFpaWNjZQx21pZWUMdrZ2lvCuyO3tbWFI4YYo0RY4o444Yq3BB7foB/OneSff8xXpUKFPD\nwUKcbdZSbblNvVylJ3k23d6t76HJVqzrScpu76JJKMVolGKWiiraIyxB7foT/Ol8n2/8drWW3LcK\nu49ONxqymnTN/wAsyOvB4/8AQ+P0rYzMPyT7/mKPJPv+Yro10qQ/eKD6c/0qddJUH5pfrtUfzoA5\nfyR7fmaXyOuADj0JNdWNKi4JeQj6AA9fbj/61O/sqH1l/T/4mgDkvIP93/0KjyD/AHf/AEKuu/su\nH/pp+Z/wpDpUPYyD/Pp/9egDkvs5/u/q1IYfpz6Hp/T/AD0rq20lMcO4+q/5/pUbaUw6OvtuDD+W\naAPGfiP8LPBPxZ8NT+FfHeh2+s6ZIXktZW2xalpF2y7I9S0XUk/0rTb+P5f3lvJ5UuPKvIpYZJYq\n/L7xD8Pvib+yV47g1fS7+DXvC2sQy6DY67rFi934a8a+G7ht918M/i1oqfubyzuId32W8/4+rC62\na94aurW8t5Yov2hbTJx/Cr/3drq3f+H/AD+ua5nxV4M0bxhoGp+GPE2lpqOi6tbtbXlpMi8K2ZI7\ni3kA3w3lu6rcWtxF+9ilRJYa5q9B1LTpS9nXgnyVLJppq0qdSLTU6dRe7OMk007PS6e9Gs4XhNc9\nKWkoN7O6cZQd041IytKEo6pq61sz52+B/wAWdJ0PS9HvNKmvz8HPEWrL4fi0zWrz7dr/AMC/Hska\nXM3w58SahjF/4V1BJF1DwR4ok/0a+0uaGU+T5d/HF92IiSIroVZW5U5Ygrx+f8XNfjlZ6Nffs6/E\nzVfCviq3ufEXw98TaU2keIbdY23+MvhvNctNb6haxoNieNvAF4za5oNxHmWK+ttQ0uDFnrnm1+jH\nwa8SXmmXF98NPEOqxaxe+HoNPuPDviON99v4s8E6tbpc+E/E1rN/y2S8sJrW3uZOf3vk+d++82vB\noYr+zcRGLTpYHE1/YVaLlpl2Pk048jcrrB4qznDVwU5XV5wrSl6NWg8TTbvz4ilSVWnVsr4zCqyk\n5RS1xNDVTtbmSi1ZTjGHu/kj2/M0eSPb8zWp5R9/++T/AI0eUff/AL5P+NfTnjmX5I9vzNHkj2/M\n1qeUff8A75P+NHlH3/75P+NAGX5I9vzNHkj2/M1qeUff/vk/40eUff8A75P+NAGX5I9vzNHkj2/M\n1qeUff8A75P+NHlH3/75P+NAGX5I9vzNHkj2/M1qeUff/vk/40eUff8A75P+NAGX5I9vzNHkj2/M\n1qeUff8A75P+NHlH3/75P+NAGX5P0xj1bP5/5PvR5I9vzNanlH3/AO+T/jR5R9/++T/jQBl+SPb8\nzR5I9vzNanlH3/75P+NHlH3/AO+T/jQBl+SPb8zR5I9vzNanlH3/AO+T/jR5R9/++T/jQBl+SPb8\nzR5I9vzNanlH3/75P+NHlH3/AO+T/jQBl+SPb8zR5I9vzNanlH3/AO+T/jR5R9/++T/jQBl+SPb8\nzR5I9vzNanlH3/75P+NHlH3/AO+T/jQBl+SPb8zR5I9vzNanlH3/AO+T/jR5R9/++T/jQBqeSPb8\nzR5I9vzNafk+3/jtHk+3/jtAGZ5I9vzNHkj2/M1peUPb/vkf40eUPb/vkf40AfMn7Qn7WP7Nv7KN\nj4V1L9or4veFvhRZeNr/AFLTPCsniL+1p5NbvNGtobrVFs7XR9N1S88nT4buz+1XtxbxWsUt1bRT\nSCe4iil8Csf+CrH/AATb1IKbX9s74HR7ugv/ABBqGlMNxG0suq6VZ7P+2npjpX88P/Bz60q/tC/s\nswmWRrdPgf4tljhLt5KTTfEK5S4mjh8zy42uEt7eOWSOP975MOf9XCK/mKr8W4l8Tc1yXPsxyrD5\nfl1XD4GpTpQqVnifbTc8PQrylJwrxppc1WSilTVopXcndn+j3gz9C7gfxJ8LOEeOM34t4rwOa8R4\nPG4uvhssWTQy/DRoZtj8vo06VPFZZicTOfscHCdapPFSjUrTnOEKcXyL/TJ07/got+wFqu37B+2Z\n+zZLu6Cb4t+E7EnjP3b/AFKzOfT8e1dzp37Zf7HerMBpv7Vn7Nt6W27RD8cPhqWbc3y7VfxJHnp/\nnt/l9lVPVR+QpphiPWKM/VFP9K8qHjFma+PJcBJafBiMRT7LZqov+D+H3OJ/Z6cGtpYbxF4npdf3\n+U5VidPSnUwl+vVdN76f6n0Hx6+COq2l5P4X+Lfwv8aXttZT3kWj+D/iJ4P8S6teLAp+W30/RNY1\nC8dPMaPzbiO3EVrE/mzfuY6+DPjH4r1nUkl0tdQnsfGHxU0rUL3XtXtZGhuvAPwVt5nsNUk02bG+\nw1v4i3EcnhPw5cR+VLFo0OvapD++t8H8Uv8Aggt+ybpmleB/FP7TXiuwt7LUfiJc6h4V8J6ncW8c\nbaH8LfCdw9z4x1y2mePfCniDW9NureWSL/l18MWx4hvJfN/Rv9oX4j33h34a/EH4sI9rpXirx9HD\neeFoNRhaWLRtLkgfRPhH4bazTy3e20PRI4/EmqafHJD5t++sTTeULiWWvucv4lxWZ5VDP8ZhY4GV\nLmo5Zhac5Vk8ZXpurLHzdSFO88Hgb1aMHGUIYivh+a8pTS/hTxD8Ncq4V8T8b4YcJ55iOKVhsfhc\ntzDM8TgqWXOpjVUo0MTlkKdCvi7UKWZznhMTWc1UksDi2qapwg5fD3jv/gqH8Jv2UfjNqPhXT/gv\ndfFTUvA+l2ejWL6Z4x0/wp4f8D3nk7JtFs7V/D3iF7/VdP002lvdXEclpFYSzXNh5Ut5FLLF2fhz\n/gvjN4pl8vRP2MvFWpLuVXubb4uaellF82f319c+AILOL+L93JccGvx3034KeDNLvbvW/EMt5458\nQ313dapqes+JZFa3uNQvLh7m+vpNMQfZne4uZpLiWTUJL/8Aeu8voaZq/wAUvBukyDR9Knk13UIB\n5UOheELJtVljYfdhVLBPsFskf/TS4i8o/SvjKfE3EGF5uXMqWCoSqzqQw8cPgq9T3pX/AHlerh6k\nq1TZSk5VJTto2kkv7EwXgL4RVMBgsGuEcbxHmuHwdClj86r5zxBgKOJxEKcVWxMMDl+Z0KOGw86n\nPKlRcMNCjScIyc2pVX/QDo3/AAWV0meBZdf/AGb9a0mdtubTT/ilpOruv95ZJpPB+nwxvH8o/diX\n/rrzXWW3/BZL4aLg3HwD8cqfmyIvF/hu5x23bXsLf27+5r+ZnW/HXjbZ5ksHhP4cWLDK3HjHVY9Q\n114ih2tBodh9xwWb/R7iOWvHda8Z+GbguuveMvHfjuTI3WWk+X4Q8OlsfMvloY7x09P3Y/x3lx3n\nVJW+uRk9lKthsJTvtry+wjUfrCk11e5VH6MHhrjJcy4eq0U7twwWccQYzku17qqvMqmFVtuWtjVN\nPdo/rCvP+C4v7OOiAjxB8OvHWj7fvRDxF4FuJ+vzbbX+0re6fleP3eBWdD/wXu/ZLuGEVh8Lv2ht\nacnGNA8J+G9SjLb/AOGabxVp6P1H7yP/APX/ACRD4g6VppP/AAjPw+8J6U43FbzU4bjxFqW/A2s1\nxfvGgf8A7Z5+gqpefFX4g3qlD4lvLODLAQaVFa6XEqn+FVsIbd48/wDXT9K5peImexsvrOHlZ68u\nBhN6JdZKiktt4W287+xR+iP4Y1LOWU5rT2vz8S4um0r7qjRjmL0S2+tRstG4n9lejf8ABar9mXVV\nRpvhV+0loyHrLq3gbwXbxRr/AHmb/hYu/n5v+WdfpD8B/jh4O/aK+G2k/Fb4drqUfhbWL7WNNtl8\nQ2trYapHe6HqE2m6hHcWtnf6pap5dzC3lSR3kvmxbBk1/nA3eq6tqLF7/U9SvmYgFry+urnLMOR+\n+mkHrX9uH/BDtA//AATu+HA4+T4g/F5CCen/ABW14459tw5z65r6rg7jDMs+zWpgcZGi6UMFVxCl\nCnGE/aQr4WEU3FtJWrSbj1aWuh+FfSH+j9wb4Y8EYTibh+eYRxlbiPAZTKhicVUxNBYfFYDNMTOS\nda83NTwdJQnouVzTWqt+h/xW/aB+CHwK046r8ZPjL8MvhlaeW0saeLvFej6TqF3GqD59P0ea5/tj\nUnkCt5Uen6fdSynHk9q+SLX/AIKz/wDBO27k8tf2qvBkLbmQPc+GPiFbQsVb763E3g9IdkmP9Z5n\n88V/Ll/wXLtxD/wUe+KrYy0ngf4PyhsKWCt8PtKj2q39z923p+HSvyztQhgh4PEakZwev5/7X51y\n594g5lluYYnCYXBYJ08Liq2HbxH1irOp7Kbhz3p1KChzct+S0+S9uZn0Phh9Evg/jDhPJOIM64o4\nkjis7yTLc5jRyqGV4LD4T+0MNQxH1aSxeCzOpiHS9tyOsqmH9py8yo0r8q/0EdM/4KTfsEavt+xf\ntffBNS5+VdQ8QyaQw3fc3rrFnp+z73/LXJ9K9G0r9s/9kLWtv9lftW/s7XhkZVRR8WPAsLMzfwrH\nc63buOvaLj34r/OwwPQfkKilhRlPyKT1XKqcMnbbx/tdfrjNeVDxTzNW9plmAkuvs6mIp9r2551t\n9d79D7Wv9Bzg2T/2XjbiijorfWMJlGL7bqnQwV3uuVNer6f6TulfGz4M66FOifGn4OazuxsGmfEv\nwXeM7H+FVttbk3+v5131lrGmakoOnatoWphtu1tN1rT71WVuytbXNzv/AIfofxx/mQJawbyRBFlg\nrf6uMfMvPy/z/LNadtPd2RDWd1c2bDo1pc3FswP+y0Lx/wB36nr0rrh4rVVZVMkg9ruGYSj1S+3g\n5Lq93ftrt4eI+grhJf7n4k4un/KsRwpSqre1nKlxBQs1bfkVu1rn+nIILlhn7Jc4/vJGZFPHZlx6\n/j2qPYBwwZCOoeNl/wC+uOP8egziv82HQvi/8YPC7K3hn4s/E3w+UOUGjeP/ABdpqIy527Y7PVbe\nPj5f+WY7Z717j4c/bx/bJ8LbBpn7SnxgkiTbtg1Dx14kvY9i8bd02ped/D2l6eldtLxVwcv42T4q\nn3dPE0qqW26lTpSW+t4nzmM+gxxJTTeX8fZLi/5Vi8mxuBb7Jujjcwjr3v1R/eL8dfhla/ETwTd/\nZ4If+Ej8PibWPDl8iKbiO6t4991ZLJ/rPJ1CCFY5Y/8AlrKkNfN3wy1+d/A2ga7h01f4Oa1b6Dfx\n/N51x8LfGl5cpa2MjffdPB/iqHVNPtYv+XWwvNKix+7ir+T7Qf8Agq1+2Xphj+1fGr4kuyhV+0WX\nitrhvq1j4ksPEFhN/wADi/pX9Gf/AATq+LMH7QXw28NeIZrm9u7r4n+BvF3g/wAUtqS2C3T+MNPS\n8868misEt7NJpPE/hfTdUijt7eKKL+1f3MUUMnlV0Q4nyziWrUwuGpV6NXEYaVOrTrqmlOcXF4Sp\nBwm7zhiHCk21GSpVZqLV9PyDxH8AuM/CHKMFnueYvKswy2pmkMHSr5ZVxM50atTD1q1SnXhXw9NU\n6OIwtDEyg4yl+9owjNRvFy/a7w/fJrGl214HWR9vkzsC2HmjX/WL/wBdEaOT2D471s+SPb8zXg/7\nP+uvf6OumXL5nGmwyEP8zfaNNk+wXG5f78itDIen3K+ivKHt/wB8j/GvuMixksdleFrVHzVoRlQr\nNtuTqUX7NyfROokqmm/Pe1mj8AzLDxw2MrU4aQclUprXSFRKcVr2u0uySM3yR7fmaPJHt+ZrS8oe\n3/fI/wAacluznaqFmOMbUYn/AL5H+f0x65w3STbdl+HzMvyR7fmaPJHt+Zrm/G/xH+GnwysJdU+J\nPxG8BfD3ToVZ5L7xx4v8OeFLVVVfnYT69qWnx49f/wBdfBPj3/gsH/wTR+HU81pq/wC1n8P9dvLc\nsslt8P8ATfF3xFyy9VW88GeHtY0l/T93qFcOLzTLMDf67mOBwdv+grF4fD30v/y+qQfVWutT6fIu\nCeM+KHFcNcJcT8QqVrPI8gzXNY62V3LA4SvFK7Su2l5n6NeSPb8zR5I9vzNfjZdf8F/v+CZNtMYk\n+J/xKvADjzrT4J+PGhb5vvKbqyt5v/IfY12fhT/gub/wTC8VTx2x/aFvvC0krKqv4z+FnxO0O2Vm\n4Vpr6HwrqFnCn/TWS48r8q86HFfDFSXJDiHJXJuyX9pYNXemibrJN/M+ureBfjTh6Lr1vCfxFjSU\neZyXB2fzcUlduUIYCU42Wr5oprZrU/WDyR7fmaPJHt+ZryP4P/tJfs7ftBW32n4H/HD4V/FYCMSy\nWfgjxpoOt6vbxMn37zQYbz+2rD/t80+Lr6Yr2/yccHqNwzt/u/e9/wDJ617dKtRxFONWhVpV6UtY\n1aNSFWnJd4zg5RkvNNn5tj8ux+VYqrgczwONy3G0Hy1sHj8LXwWKoy7VcPiadKtTe+k4LbS5meSP\nb8zR5I9vzNaXlD2/75H+NL5Pt/47WhxmZ5I9vzNHkj2/M1p+T7f+O0eT7f8AjtAGZ5I9vzNHkj2/\nM1p+SMZwMeu3ijyfb/x2gDM8ke35mjyR7fma0/J9v/HaTyh7f98j/GgDN8ke35mjyR7fma0vKHt/\n3yP8aPKHt/3yP8aAM3yR7fmaPJHt+ZrS8oe3/fI/xo8oe3/fI/xoAzfJHt+Zo8ke35mtLyh7f98j\n/GjyR7c9Pl60AZvkj2/M0eSPb8zWl5Q9v++R/jR5Q9v++R/jQBp+V7N+X/1qPK9m/L/61afkH+4f\n1/xo8g/3D+v+NAGZ5Xs35f8A1qPK9m/L/wCtWn5B/uH9f8aTyG/ut+lAH8Vf/B0Ku39oj9lnGOfg\nX4q9vu/ES/8Ave+Oe9fzB1/UL/wdHKV/aI/ZWGWB/wCFG+Khjv8AL8RLn0/3vyr+Xv0x/EP6/wD1\nhX8m8fNf6458tn9aoaXX/Qvwetr3177v5H+830U0/wDiXnwvdnrlGadH/wBFLnfXb7mJWpoWh6l4\no1zRPDOjwtcav4j1jS/D2kwKMtNqmtX0Om6fCq9P3lzdQx5/ycuvtH/gnb4Ph8b/ALan7P2l3MKz\n2ml+MpvGFzG2xkK+B9D1XxVbtIuPu/b9Js+or5jC0HicVhsOtHXxFGin1XtasI3Wjta976dPl+v8\nWZ1HhrhriPiOolKnkWQ5tnMoy0jNZZl+Ixvs3/jeHUVbW8rLrf8At0+GHwp0r4PfsveD/hD4cRba\n0/4R7wP8GdPkhGx5NNvlhh8Yakuw/wCv1Dwxo/iDULqTtd380v8AGK/HX/gqH8ZvEdh418M/DXwr\noNiunaRpEnjHXPEfiXVodC8IaXc6tNc6P4csWb/j51K50vRNLuLz7HZ/6qLWEPPmV/QPrmnGCx+H\nGngfLYW/jDxCwxn/AEjSfCth4etZG/65v4muJOe1fxE/8FGPG2peN/2zPjw13fXd5p/hrxl/whek\nW0txNJa2Nn4P0nTfDzQ21u7+TbeZe6fdXEpjj/fSyvLN/rK/auJMYstyjJcHS5oweD9u1Dkjyzx1\nerUk7yUuW2Fw2BpxsruKsnG91/j39Gfh2XHHirxDn2azhiauX0swzSviMSqlV1sdOeFy+NSUadej\nKpVnXzHM8SnOpye1TnKFRRlGXlniz4g6JdyN/wAJF4l1r4lXYZm/sbRvO8JeALeRW/1ZWH/ia6wk\nf/PSSP8Ae/8APXtXm1/8TvFMtu1hon9neD9JI2jTfClnHpQMe0/LcXyebqVy/fzJbz991HeuAwfQ\n/kaXY3p+o/xr86njKk3dPlvu43cmnbR1JSlNq3Rysvs2uz/SjD5JgMPCEHSVdQacVWjB0otWs6eF\npQpYWnJW+OFBVHo5zlLmcmSeZPI808sk00p3STTO0srs2NzSTO8juf8Arpx074puwep/T/Cpdp74\nH1NOCep/L+h/qK5vaN7L773116+v6HqqEdEktLJLoklZK3kvIh2qOw/Hn+dPAJ6CpNi+5+p/wxTg\nAOBUScn1V+l/+AaKDtomtX0sumt++2i1Ithz9cf5Zj/Ov7f/APghcpk/4J3+BAM5j+JvxgiPK8f8\nVY7bT/38zn8zX8Q1f2+f8EHsTf8ABPLwqOvk/Fz4vRdGYjdrlnN39POP/wCrNfoXhircRVdf+ZVi\nbaJKyxGCv9//AA1rH8nfTNg/+IRYJ6e7xpkzb33y7PVa76a7JW0+a/nY/wCC8dv5H/BRvx+cY8/4\nZ/B2f6n/AIRFIR/6T8/5Nfk/ZqPssBI58tf5en+cGv1//wCC/FsIf+CiniRsYNz8G/g/N6526Tqt\nsG/8l/XPvivyIslH2W36cRqP4T78/wCePbNeRxjpnWZ6P/kZYpWVnvUl5r79vQ/Svo/T5/Djge97\nLgzI49HrTweFjt5PTfS3UfgDoMUEeo/Mf41YphGRj5j3/h6+/Tp7fnXySk76x+bu+ze1nrt/wUfu\nyT0smtd7aL/hipGp3Rn0MiHpnbjv/wB88d6teX7/AKf/AF6jRTnp/wAtWA7/AMLbsf5/SrWxvT9R\n/jSvf7SitkrLsu9vyLlBt6WS/rsiHy/f9P8A69Hl+/6f/Xqbyz9f+BH+pFHlH1/8eald/wA6+708\nvP8AD1s+V94/+Ar/AC9f6ekGw+o/X/Cv6d/+CDniG4u/B+o6I8hYeE/jjYzW4yzCO18SaX4buXjV\nf7kk9nqEnH/PaT/npX8x3ln0P/fR/wAa/pf/AODf7SZ5rP4m3rKfs5+K/g1Vc/dB0vw295dNu/6Z\npdW/uP0r6ThKc457gVCV5SqKKS3b5oSgntdc8Y67/PQ/m/6WGHoVPBTiGpXUG8Ljslr0LpJqq8wo\n4abi7XUnhsRiFdfZclpzaf0IfCOX+yfiP/ZanER1zxRYquBgxs148a7e3z28dfZ4hyQAGyTjp+vT\n/P8AL4U+Hd6Lr4zaCsR4vdb1K/AXqI7iHUrrdt/3CuOnPNfKv/BbL/gobe/sP/s9WHg34Z6otj+0\nL8el1jw/4Gv7eSNr7wF4PsY4YfGfxIjj/wCWOpWX26z8P+EpJIx/xP79tUhMp8Pyw1+x5Rm2FyXI\nM4zPGycMJgsZiKto2lOpenh406NFOSUqlarONKkm4xc5x5pRWq/zE4f4Iz3xG434Y4K4cowrZ1xB\nLDYKi6rlHD4aEfbVsZj8ZUjCcqeDy/B0sRjcXUjCc40KE+SNSq4QnzP/AAUM/wCC1Pwb/Y/1rWfh\nF8J9K0/43fHvSWks9fs/7Sktvhz8N9SVfm07xdrWn+Zd694ks9yyXXhPw/JFNYZ+y6xr2i3n+i1/\nKv8AtG/8Fev26Pjrd31trfx88V+HNLupJQ3hT4YXEnw38J6fbyN8tnHa+GXs9W1Xy/lj8zxBrGqS\n5z50svFfmde61e3UtxcT3Vxc3l3Nc3Fxd3M0lxdXF1dStPdXl1cTPJNc3NxNJJcS3Fw8sssrvJP5\ns0lYQAHPUnkk4J/766kY9cV/O/EHGXEnE+Lq1cXmGJwOWc8vq2T4CvPDYZU/srGTouFTHTSa5/by\nlSlK7pUaVNqB/uP4UfR18HvBfI8Dhci4UyjibjRUqUs14/4pyzCZxnEsWoQdWeQ4bHxxeB4Zo86n\nHDQymnTxlHDxpxxOYY/FJ4uWtr2u674rv5NX8U6zqviPVJmeSTUNc1C81W9ZmbDM1xfzXE3/AJE7\n+uM5YHYD8BRTlGT9Ofevm0klZaL7l9y0XorLyP2e85O85OUrJXk3JpJJJXd3skrXsrKxIFA9z606\niis5Td9Nvz/MaTeyL+karqvh/VbLXvD2qanoOuaZNHc6breiaheaRrGnXULB47nT9VsJre/s5o3R\nZIri3uIpYuPWv6HP+Ce3/Bfr41/BTWNA+G37Yupaz8cvgxPNa6aPiNPEt78Y/h1asUhj1O41BPKf\n4l6DZoyyX+l655vi2K1R5dN16/mji0a6/nUor1sm4gzfIMVHFZXjKtCSlF1KTk54bERTT9niKDfs\n60GlZcy5ofFTlCaU18F4heFfA3inktXI+NshwWbUJUpwwuNdKFLNsqqzWmJynNIRWLwNeErTShUd\nCtb2WLoYrDyqUZ/6Nv8AwUa/bp1X9mf9gTUP2xf2brn4d/E5dU1T4Xr4E1jXF1LXfAuueHfiFr1t\npra1DHoOq6HeXMlvZzNJa28moW32W/je11O1863lta/kK8e/8HAv/BTjxuZo9O+Lfgj4b20wYLB8\nOvhP4LsZYlbhVh1LxVZ+MNVR4/l/efbPN74xXzX4Z/bT8S6f/wAE9/j7+w34vvr/AFXwh4h8bfDL\n4o/BszPPcReEfEmg+PNPvfiB4bty/mC00TxPpUreJLS3j/0W117S9Tlhi87xDNn84TOEVmYjaock\nnn5VX5u/v/nNfoXEXHWaZzLAYrKswxmXUK2W0vruDwmJq0VRzCNbEQrx9pRlGbhKCpTpNz5nRnT5\nrT5kfyv4Q/Rh4N8PqHE+Tca8JcOcX5jg+McdPh7iHPcnwmYVMx4WrZbklfKakcPjaeIwtCtQrVMb\nhsXCnSUY5jRxkYSqUVTlL9W9L/4LD/8ABTa0RJ4/2xfifM8n7xhf2XgfUU3M29lWG/8ACdwiJ/0z\njj8rOK7mw/4Lef8ABUKwKkftRaje7M4Gp/Db4QXob08wv4D3v/38HavyZ0+TzbG1kxjfBGxHpuXl\nf55z/jVyvgf9ZeI6c5cmf51G0nZLNMd3feu16aaH9QPwb8IsTRp/WPCvw5quVOm5OfBPDUm3yQv7\n39mXu2m3r2vtr+yNh/wXx/4Ke2WBJ8avBupAY/5CPwX+F7lu/wAzWfh6z/qK7Ww/4OHv+ClFmFW4\n8R/BHVsd9Q+DWlRM/f5m0nWNP69P3UfSvw5oreHGPFdP4eIs4025swxM+389SS6djzq30e/A/E39\nr4SeHyvu6XCuTYd6df8AZ8JSaa6W5fyt+/enf8HIn/BQK0x9u8Mfs16sBtz5/wANvFloTzz81h8R\nbf8A9FnNdtp//BzF+2dBt/tL4Kfsz6kBt3eVo/xM05m/vFWT4hXmzj/Yr+c6iumPHnF8NuIMwe3x\nTp1Nrf8APylPov8AO9jx630XfAGv/E8K+FY3/wCfFDF4R/J4TFUWnrbRrbzaP6aLD/g54/aOiCjU\n/wBlz4D3hyu42Xij4jacT/e2+deaps+vpx6V21h/wdC/EVcDVf2NfAM5+XedM+MPiazz/urceCdQ\n+n+s+uTX8sNFdMPEbjWGiz2s1/fwuXzvtu5YRt7dWePX+iF9HWvdz8Mcug5buhnfFWH6LVKhn1OK\n/wC3Uup/ep/wTP8A+Czc3/BQ347a98ELr9neH4UXGh/DPXviKfElr8S5PF8Fyuh654b0RtJXSZvB\nPh94ftA8RLcfbDqE3lfY3i+yy/aPNi/dLyvZvy/+tX8N/wDwbTJv/b3+IGQTt/Zi8eH/AMvz4Y/n\n17e9f3R+S390569efr1r+gfDvOMxz3hqlmGaYj61i5YzFUnV9lRo3p0nT5FyYenSpXSk/eUFJ/ab\nsrf5SfSz8PuEvDLxfxfC3BWU/wBi5HSyDI8dDA/Xcxx/LisbQqzxNVYjNMXjcW1UlCLUHXdOFvcj\nFNozPK9m/L/61Hlezfl/9atPyD/cP6/40eQf7h/X/GvuT+ZzM8r2b8v/AK1Hlezfl/8AWrT8g/3D\n+v8AjR5JHVCPx/8Ar0AX/K/2f1/+vR5X+z+v/wBer/lj+6f1o8sf3T+tAFDyv9n9f/r0eV/s/r/9\ner/lj+6f1o8sf3T+tAHz58W/2Wv2cfj5qOlav8b/AIEfCn4taroOnzaTomp/EHwVoPii/wBI0u4u\nvtdxp+m3mq2dxc2lncXha4lt4JI4pZf3vM3FeF3n/BMD/gndfZ+0fsVfs6nd18n4c6Ja/wDpKkAA\nr738sf3T+tHlj+6f1rgrZVleIqSq4jLcBXqzacqtfB4arUk0lFOU6lKUpNKKV5NuySvZJH0+X8b8\naZThaOByvjDinLcFh1KNDB4DiHN8FhaEZTlUlGjh8Ni6VKlGVSc5yUILmnKU3eUmz847v/gkn/wT\nUvM+f+xX8DVz1+z+Hrq0+uPsepW/v+fGK8g+KP8AwTo/Ye/Zu8Mv8X/gj+zX8P8A4bfEbRtR0/St\nN8WeHf7dTULHT9eZ9O1i2hhvNbvLDZqFhJNZy+ZZynypn8rypq/Xvyx/dP6184/taaXJf/ALxy0a\nEtpn9h6seCcR2Ot2H2hvrHDNJJ7V5+MyPJ4YXEVKOU5ZTrQoVZ0qlPAYSFSEoQbUqc40VOElJKSl\nGV09Fa56cfEbxBxa+o43jzjPF5fi19VxeBxPFOeV8HisNXtSrYfE4atj50K9CrCTjVpVac4VItxn\nFxbv4prlmJ7jwxIBlP8AhE/GiIf9q4u/BlyFXj+OGGSTHHav4D/2wYLiH9q/9paK4U+enx1+KSOC\nW3D/AIrDVfLDdMfuWj9uMfX+/nwvdReI/BPw019CHW70y1srh/vAS6p4eudHuI2b21u1sY/+uv51\n/D7/AMFRfAVx8Pf27/2gtPlgaG28S+JNL8f6aSrqJ7Pxt4e0rW5poxzvSPVbjVbfzOQJYX7xmvyD\njWMpYTJay+F4DC03ppzYd4jBVFo/ijUwsk7rra7td/1n9DLFUqfGnG+XScY16+V1sVTvpKVOlmWX\nV5KN7N80Mypuy0ai2+XW35+7G9j/AJ98UbG9qlor87s/5n9y/wAj/RdQe7a9LX6fofrB/wAEcf2X\nPgj+1n+0141+HPx78HHxv4P0n4LeIvF1hpUeveIvDzW/iCx8XeDNKtdQW+8N6ro9/I8dnrGoW/2e\nS4ltZfO86eLzo4vK/pEuv+CHH/BNu6DCP4LeKLHP/Pj8XvidEV/3FufElwn0/wAmvxI/4N3oy/7Z\n3xLJyoH7OPio9OSzfED4b46/jX9mYh9vxJ/w/wAK/duAcpyvG8O0q2My7A4qq8Xil7WvhaNWo4xn\nHli5zhKTjG2ivZa2Suz/ADJ+lNx5xvw34u43AZBxdxLkuBhkWR1I4LK87zLAYSNWph5yqVPq2GxN\nKh7SbS55+z5p2Tk5OzPxdvP+CCn/AATsut3keEPi1pmd3/Hj8YPETbd3937fbahz0/1mOh965O+/\n4N8v2CrrP2TVP2gNLJ3bfs3xL0e5x8uPlW/8E3n97/lpIOPSv3REePQfQf8A6qcI8+p+g/8A119d\nLhfh2fxZLlvrHC0oP/ySMe3p5H4FR8bPFyhpT8RuLmtNKudYzELS3/QRVq66b+et7I/C7wn/AMG+\nv7CXh/XY9W1zU/jt4506HaR4Z8Q/EHS9N0ieRZN+68uvCXhXw1r0yfL5flW+sWp6dOK/XH4NfAz4\nU/s9eA9P+GHwW8D6T8PvAem3d9qNp4d0Z76W2/tLVJEfUtSurrUry/v7y/1CSOOS6vLy8lll2J+9\n9PYhF7E/U/8A6qd5IHYf+PH+QrrwOTZVlspTwGX4TCVJJqVSjRhGq4uzcHVs6nI7K8Obl8jweJvE\nTjrjKlSw/FHFme55haM41KWDx2YV6mChWhGUI11g4yhhfrEYznFYh0XXUZzXtPelf+GH/g4PtvI/\n4KFSSBf+Pr4DfCebJ4DNFceLbbhv+3cdMfSvxqsh/okA/wBjH1+bD7fr6j256V+3H/BxJaeT+3zo\nMu3Bu/2dvhrJkH73k+JPH9tz/wB+F/8A11+J1gv+iQcAkK2SOf8Alo/5V/P/ABp7udZntf6/Vk+m\n6bWuuu1kf6yfR0al4acDysm/9Usvj/4KdKHS2rUSYIe/H60rKFHuDjP5/X9KnCHvx6+tRygLtHU/\nMx/3V6/p1HP8q+Mcm+p/QP8AX9afqyFFywx1MkhGM/dVfyxX7zfsM/8ABFbw9+2p+zJ4V/aBb9pD\nxR8NtX8ReIPGmg3Pha2+Hej+KNIsm8J+ILnRIbiG+n8T6Hfu+oQwQ3ksckY8qV3ih/1dfg9CvzA9\nwjE/70jc/wDoP59z1r+47/ggtcfav+CePhqLO77B8X/i5Z+6qdY0+/VT/wCB/mdjX23h/luAzXPK\nuEzDDQxVF5diKkac5VIpVIV8KlNOnOEuZQlNLX7XqfzX9KnjDijgbw1wOe8JZvWybM1xblWDq4qh\nRw1eU8HiMuziVShOli6GJounOtTw9Tm9nzp0o8sopyT/ADW1X/g2u8YpuOgftkaDcdkXXPgtqFrn\n+75kmmeP7zPf/lnjNea6t/wbiftMWwY6J+0h8C9XI3bE1TQPiBobN12qzW2la4ic9/6c1/YT5Xsv\n5f8A1qTyR7fma/XqnAHCs9stdO/WnisUtNNlOrNdOqd+p/AmF+lX45Ya3NxfDFJJK2KyXJJXSta7\no4ChJWtpZq3mfxU6p/wb2/t1WLH+zfGf7OOuKN2Gi8beMtMZsfd+XUvAEf8A6M74r9hP+CaX7JHx\nD/Yi+EvxB8K/Fk+F3+IcPiHxN4qvm8IaxJr+irNr2jaD4Y8H2cWqPYae817L5cdxLb/Z4jay3Plf\nve37lXMkNlbXF5ct5dvaQTXM7nYVSGGN3kZu33FbrzjvXxD411q6McMEaq+teKNTbxjeW0kscK+S\n18+ieA9JuJpniSFNU8Q3SXkTySeVFa+HrmWb9zEa8yfCmR5Di8Pj8DTrxr4anXxcvbVlOko0ElQT\ni4xkpV8bUwtCm5SScpTTUlF25OMPpA+JPiXw5W4T4lxeV1csxeNwUpPBZd9UxVStTcpNTq068ouj\nTw3t8RUiqSk6lKlaUXo6fwF/4nPx+0+3hJki0e31yZivIEem6PNpqtuP/T5dQ8f7efSv4nP+C2X7\nSl7+0N/wUY+PdzFfyXfhP4P6zH8B/BNsszS21rpfw1ebTvEU1uDhP+Jx48m8WapLJH/rRcw8fu4s\n/wB2X7Nfwm134Q+IfF/jb4iX+gpBPolhpujanpuqpqFhNNqGpfb9W8+7MNuLN5J7PSbSL7RHGLqW\n5fyZJdgr/MD+I3iq58ZfEf4h+Lb25NzqHir4geNPEV5Nv82Sa+8QeJtS1K4Zm/jeWa8k/n0r4fjO\nTo8N5VlsKif1zMcTjMRGMkpP6pTo0aUKqjqub2qqxi1q4Rk1pc/pD6EGWYatx7xzxXOnGVbIeHMq\nybAVJwTVKXEGNr4nFVaLlZxqxo5O8LzqzUMRVpqXLUmnHZuZIvMP8ZYD12q3fv15+n1q1XbeJvhR\n8T/hpb6KnxI+G3xA8APremWeraQvjfwb4i8Kf2rpuoWyXlnqGmtrWm6el5bXFtLBcRXFv5sU0TpL\nxXI4A6DFfi9WLhOcXFxcW7xaaa+T19D/AFey/FUMbgsPisNiKOKo1qcZRr4erCvSqOy5uSpTlKEk\npNptNq6t5EIQn2+vFfrT/wAEkP8Agmhf/wDBRX40a9Z+KdX1bwn8BPhNa6Tq3xW8S6GsCa7q95rU\n1ynh34f+Fbq5hns7PW/ECWGpXt/rFxb3UWg6NYXV0LWW8vNLil/Jyv7vP+DaHwro+l/sB+NfE9nD\nCdY8YftHeO21q4QKbho/DnhfwNo+k2k8n3tlvbCa4hjkOYvt8kuB5hJ+v4ByXCZ/xLhMHjoe1wdG\nlXxmIovmiq8aEYxhSk1Z+zlWq0/axWs6SnC6TbP5++lV4k534XeDmd5/w1XeDz7MMflnDuWZjGEK\nk8sq5pVnLE4+lGcZQ+sUcvwuMjhJyjKNHGVKFZwn7Plf81v/AAWm/wCCP3iT/gnNfeF/i98LvHHi\nz4h/szfETxDJ4WsrzxA8MfjH4XeM5LS61XTfCniq80SDTtK1/Stc0yx1C58MeJ7fT9Mlkl0u+0vW\nLCK7Sw1HVfwz0LxVe2U8cd5cXF5ZO6pJ9qbzpoVZv9ZHM+XPl5/1cknav9Pb/gtL8G9P+Nf/AAS/\n/bB8OXVlHd33hX4XXnxZ8PvIm+Wz174R31n8QLe6tWyHSaSz0K/0+WSP/l2v7mLjzK/y4AAQCASp\nyfT76/Lt7c7j6fU19zxpw3lmW4+NHDYSlSwmLw/tadOMEvq81KUKkKMrc0UnGFSC5rRVTkSULI/n\nT6NHjDxfxrwnPMM7zrFY3P8Ah/N5ZbjMZWqylPMcLLD4fF4SvjoKSpVak4Vq+ErN04+2+rKvNyrT\nlN/RQYEAg5DBSCNpBVujK3P+HrS1laHL9o0mwlcksbWNGz13Q/IzN3/hOfxzmtWvxCrB0qk6bd3T\nnKD9Yyavsv68rH+jOFrxxWGw+Jh8OIoUa8Ve9o1acKkV8oyRFPEbiCSBQWaZXjRQGJMknyRoq5/v\nspr2PUf2Dv25oLUF/wBjr9qBFmWN0c/Az4lbDHIu9ZFkTw3IjxyJjMkb/wAftXjVyxS3ndSQ6QyO\npHykMsburK3/AAFa/wBZP4Iaxc698Fvg7r08sr3OufCr4d6xcNukyZ9S8HaReTO3z/fkeZnyfTrx\nX6N4ecL4fih5tRr4ythJYOOEqU/ZU4VFNYh14T5lNqzj7KDjZ63afRn8j/Sv8bs28EqXAuZZXkGX\n57DiCvn2ExMcbi8ThHh5ZXTynE4d0pYeFTnVWOOr8/Mly+zi4u7Z/lyQfskftY6XYWsOo/suftHW\nUsNvCkon+BvxQUKyr8ybv+EYGc7f84rh/GXwt+Kfw500a18Q/hZ8T/AWjvdw2C6t41+HfjLwtpjX\n1ysslvYrqOt6Jp9mLy4SGaSG3+0ebLFDN5MX7uWv9aMNKP8AlpMPo8n/AMUP61/PD/wc373/AOCc\nGhBnkO79pv4UjDMzA7fDfxFOfn7nav8AOvqM78JsFlmWZhmUM5xVR4TD1cQqUsLRjGbjryc6qXjF\n3a0i99j8S8NPp38R8aca8J8G4nw7yTBwz/N8FlM8fQzzMKlTDLEONL28MPPBqFSULXUHUheyvJas\n/gq/t3SD/wAv0P4iQfzStOKWOeNJYnDxyLuR16Mv94VwscOTj35457c+n938voK7KxAFpABxhOPo\nrH/P41+NYnD06EYuE5Sbk01K2iturJdb6n+i2T5tiMwqThWoUqShT506bqNtqUEk+dtPSXbXsXKQ\nnHPpS19/f8EqbW3vP+Cj/wCxha3dvDc20/x08Mxz2tzHFPBLG1vflo5oZkdGT5c+XLHj8DU4DC/X\nsfgsEp+z+uYvDYX2nLz+z+sV4UefkTTlyc/Ny3jzWtzRvcfFGdLhrhniPiN4Z4xcP5DnGePBqssO\n8Wspy7E494ZV3CqqLxH1f2Sq+yq+zc1P2c1Hlf5++dEOsiD7vVgPvfn/ACNXLazvL1gtlZXt6xOA\ntnaXF0xbj5VW2hkIx71/rO3Hw0+HN2Sbr4eeB7oksD9o8HeHZsqOm5n02Qe/4Vr6d4V8M6Oix6R4\nY8P6TGv3E0zQtLsFT2VbOztxH+H5ev7XHwTqc0ebiOHLfW2Uty0tok8x5d/N+m1/84J/tJMJ7Nul\n4P13W6Kpx3SjSvZPVrhGU31uuVbeaP4hP+Da7wd4u0v9uT4haxq/hLxVpOkSfs0eNrWHVtU8O61p\numS3U3jz4aPDax6leWdvZvcSJDM8VvHcedLDDNL5Qijlr+4fyv8AZ/X/AOvWk29gFO8qDwuX2jaf\nl2rj/OBjNM8sf3T+tfq3CnDseF8op5THFvGqFevXdeVBYdydaSbiqaq1rKNrL947+R/Cvjp4t1vG\nzj/E8dVshp8OSr5ZluWRyulmU81jCGXU6lONZ4yeCy9zlVVS7j9WiocqXNLcoeV/s/r/APXo8r/Z\n/X/69X/LH90/rR5Y/un9a+kPx0oeV/s/r/8AXo8r/Z/X/wCvWh5Y/utnPTB/x6+2KTyh6MPoM/zP\n9KAL+w/89P8A0Kk2n++f1/xq5tXP+rGfocdf7v8An+lG0HogP4H/ABoAqbD/AM9P/QqNjf3/ANR/\n8VVrC/3Bj1O4/wDj31/Gl2j/AJ5j8m/xoAqbG/v/AKj/AOKo2N/f/Uf/ABVW9oP/ACzH5MP5GjaP\n+eY/I/40AVNjf3/1H/xVct458Lx+MvBni3wlOybPEnh3WNGDOV2xS6hYzW0EzA97e5eGQemzoa7T\naOyfmDz+XT6D8zRgZGF2ntjr7sv/ANf8amUVOMoyScZRcWn1T0f4XGm4tSTs4yUk+zi01+KPyc/Z\nY16fWfAfif4ealm38ReAtcuFW2m3CW2hur17m3Zlfvp/iGzvo5OnlfuT0kr8J/8Ag4C/Z+uE1f4O\nftP6Jp7DT9Qs7j4UeN5Yo2IsrpZ7/wAT+B7i8ZPueZ53izQ5ZJP+WthYWv8Ay0ir9t/jws37MH7V\nlj8SUt5U+HXxVW5uNZWFGMKfa5reHxdAqJhGutL1JrHxZbRY/eR3hhh5Etet/tLfAXwX+1P8CfiN\n8E/EU8Umj+O/Dhn0PXLdY7r+y7+ZYdY8K+LtJJ/1z6PrFpY6xF5f/H1FDeWv+pvZa/KOIcpnicBi\n8v5XKvgJ1sZhXZXqYeo4SxEVHr7CtGniEo3SoYrETV40ptfuHhDx5HgDxC4b4sm5PLK9Wll+dQp3\ncvqmKpzwdduEUnUqLD1pzpQfx4vL8HTSfPZf50YT1P5f/XFPCgdBXonxW+FnjX4K/Enxn8J/iHpU\nmjeM/Aeu3nh/XrJw3lG4tZD9n1DT5n/4+dK1izkt9U0a8j/dXWl3dtdQn95XBBABk8/59K/F5Pkk\n4yTUotqUWrNNOzTT1TT72P8AZfC18Ni8Nh8Zg61LE4XFUKWJw2JozjUpV8PXpxqUa9KpFuM6VWnK\nM6c4vlnBqS92Sb/e3/g3ZTd+2Z8Tjxx+zj4mz1z83xC+G/y+/TqB+Nf2aiL/AGT7FuMc4+Zfyr+N\nT/g3VXP7ZvxSAIH/ABjf4kPp8v8AwsT4dfw++OfcV/ZwIxx1J/n+Vf0L4bu/C9B/9ReM/wDTiP8A\nJr6YX/J68y3f/GP8PbpL/mCfbr3/AOHKoix6DPofT27dvT8acI8+pPtVwRnsv59d30OKeEOeoHvz\nX3h/LhTEWein8z/jTvKIxwP6gj1/yfzq3sHqf0/wp3lj+6f1oA/iN/4ONbUw/tyfD6faMXP7Nngk\nknjd9n8efEiH7x79fr6d6/C3TgBZxAf9NP8A0Y9fvz/wcj2nl/tkfBq424F1+zZooJG3Ja1+JHxC\nj29B3m/PivwIsf8Aj2jHPBcD/vo9P89a/mvjdWz3NfPGc3X7VKm+u29j/ZL6Nb5vCzgeb/6Jvku9\nNaeOnSsvJclk+r2LdU2/eTN1wBtAPqnLt/6Fjr17VaclUZvTge7HhV/zzxzVaNSxA6M7ED/dX7zb\ns9/bHb2r4s/omCvq+nbq++7LkC4Un+8zYz/dXCJ/6C3547cf2z/8G+l19q/YL1W2B5079oH4lW5B\n2HH2jQ/A1+q/h9qbr6/n/FGsYUAZ+7tGB0+X8T+Br+zr/g3XuvtH7GXxQsh839n/ALR3ichfl/dr\nf+APh1N93/pptbn/AOtX6B4aS5eJ4L+fAYuP/pqf/th/K30zqDqeCtept9X4p4fqtdUpvGYe73/6\nCLfN9dV+8nley/l/9akMX+yPoDjH+fxq+Y/Vfy/+tWHr+rwaFY/anja4u5nW306wjP76/vmXMcMa\n/wByMfvLqQf6qJHlxX9C1KkKUJVJvljFXbtfqkkkruUpNqMYxTlKTSS1P8joxcmord93ZLq229Ek\nrtt2SSbbSR5Z8WfEem6XpNzp+oXyafpVtYTa94v1Fi+3TPDemr9pmVkT52utQeHy7W3j/eyhPKhi\nlmuIq/Jn47fEO61e6u9Oumv9K1DVZ7fW9ftNOl8vU/D8ItE0/wAF+DbGaFLjZqnhvRJIZLqOOOWK\nXxbqupSwxS+Z5Vey/H344WatdPDeQappmna5M8UylZLT4h/ErQ7nYgtV4+0/Dr4T3kccktxGPsmv\nePLaw0uHzofDd/8AauK/Yd+Dl/8AG/4vTfEbxNFNe+BvhbrMOt6lfXitLF4q+J0jJqWi6L5j/Jcw\n+GxND4s17y/N8u/fw3YTfubi6ii+VxkauPxccJC6nUq06uMduaNGNC6o4N6OLeFU6tbFpNxeOqKj\ndvCns4PkoUHjZu8IU5Qwad4uq6nK6uK5XaUXXlCNOhs44anKpZe3kj0n/hnX9ovwdPpjeDvj0via\n10S/0zxHYeB/ih4ZvNLku7iw3v8A2d4m1bTfM2W1m80ckV7/AMI3FFLdQpFeReRLXy38YfAXwE0L\nx74O+LP7Rf7EvwF8C/Fbwrr1t4x8P/Fnwro/hdofFdxZTvZyXit4Y/s+21ua3v7y2uxeeLNDkurC\n6W2urPyry382L+kMEg8g/m2cD+Jv/rf/AKv4vIvjh8Gf+CZv/BXf9s34c/th6l4wT4BfFO4vPip8\nFJH8P6x8QvCPhg/GjUrbxVqvl+GfOvZtK8PR3l54q8P3Vz4f0y6MWq+HvKmtfnEsfBxDl+U4KGCl\ni6NKnhsTinh54uXs6VLCVHSqV6U6kZRdKPtHSnTVZ8jpVJU9bNJfofhtlfFnEq4qjwnmWarP8o4f\nWZ0ciylYyWY8R5bLH4PLM2weGng8RTxFSWFoZhDGVcD7HFLGYSniqbjFw9/y7/gvl/wWC+EWveHv\ngd+ynrnw30X4u+DPF1ve/Fz4o6TF4u1bwlqOmx6Rff2J8NRo2s6CJJob+O/h8WaxLb3H7ozWGkTf\n8s4zX86ej6l+xj8R1Vvh98fPiT8ANan2mLwt8d/DsPxK8CrNIPltrfx14bkTXrCz3sYvtGsXkoii\nPmzRcV9Y/wDBTXwP+xt+2h+2X8YviB8FviF4e03Q5rrw/wCG/Ar+HfM0PSNR8P8Ah/w1pVnDqGl6\nJrFtpd0YdU1VtU1CWOOz837VeTCaKKavye8afsA/GHwqZbrwXrFl4ns03vFDFK1teNH/AA/u3/du\n47+X+OetevTybJ8fl1CjisPhM2pOLlGviaeHxMpc9pc0Kqi+VxTUIzpuL5Yx1erfzuV8YeIHh3nG\nInw/nXE/A+ZUqq+s4PA4zMslqKVOy9ljcBz0I1Y80Xz0MXh5wk7qUJRZ9vah+zh8eLPTX1/wr4b8\nK/HXwki+YPFv7PfjPR/H8Xkqu9ZrrwrPPp/iq1k2f8u9vZ38sX+q9a/pi/4Nnv23fh14Km+OX7FX\nxU8V2Pw58Wax4k0/4vfDDQ/iNK/gXUtX1S60/TPCXjzwrY2Pi3+yLmbW400vwrrFhpdnHNdX9q+u\nXcMUsOnzGv4PI5/j38ENZTUTY+NPBerWjoya1odxq2iXSMjfK0epaVNbv/Cv+sl/Svqfw9/wUp+L\nmoadb+G/jJp/gH9oDw1D5cf9i/HDwTpPiq8hjjX5fsfiq2h0/wASWdzGeYrz+0JZYpR5vFeVl/Au\nR5Rm+HzjKVicBWo+1jPDxrOvhK1OtCUKkJwxCqVo6SU4cldQjUhCThJR5T9W4q+lL4mcf8AZn4e8\nfPJeKcvx7wNfDZzWy2nluf5bjstxNLE4TFUMRlTwmXVr+znh8VHFZZVq4jDYjEQWIpVJqrH/AF3f\n2iPhhf8Axq/Z/wDjl8HNN1Ky0jUfiz8IPiR8NtO1fU4Z7nTdLvvHHg7WPDdnql7b2z/abq00+bUo\n7y5jtyJZYoXjhzNJX8Vh/wCDSz9qONAsX7WvwAlwijMnhD4ixZ4+Zsok/PH6e9flT+zH/wAFiNQ+\nD/8AZ8Hwk+Ov7VX7JS2xjMXhnw544tf2nP2d42P3o2+Dfxrh1ibQdN+Xy/s/hO4sJYov9TLDX9CP\n7Nv/AAcQ/Hy9jsrHxd4R/Zh/bL0lY445dV+Avj67/Zy+OhhV8NdX3wV+M02seG9b1XYW/wBC8P8A\njXw5ayy/6mKLrXvZpkeV5zOlPH0qk5UYyhTlCtUpWjOUZSv7OUU25K92nY/N+BPFjjXw4oZhhuFc\nfhcJRzOvRxGMhicuweO9pVw9OdKk4vFUqjpqMJyTjBpSbu7tK3zjp3/BrJ+1jpdhBZR/tM/s6XQg\nEgEj6X8TLbdukeT5lXQbjb97nElW1/4Nc/2ut4DftGfs2iP+J1t/igXT02x/8IlGjn/tpD26V+//\nAMJ/+C6H/BPrx5qFh4Z+J/jfxp+yV47vpILdPCP7WfgTVvhFbyXUh2Mll8Rrk6v8ItTh85vKiuLP\n4gy+cCksMX7yv1o8LeLPCfjrQrHxR4I8SeHfGXhjVIxPpniLwprWm+INC1KEqQs+n6vo9zeWF7Dt\nZf3ltPKDmvmJ+F/B1WcqksDiHKcnKTWPxavJu7uva2V/JLc/asP9Nr6QeFoUcPS4mydUaFKnRpRl\nwrkEnGnSioQXNLAttqMUuZtydrtt6n8XNp/wayftDXUTx6p+1f8ABWyMsciObDwN461MJ5q7WZft\nN7o+/wC9/wBMuvGa/sn+G3hB/AHw6+H/AIEa8S+bwT4J8J+EGvooJIIb1vDWg2GiteR27vI8KXH2\nFriKOR5TFG6xEnZk+gbV/uHv3P8AF+H4D8qNq/3PvDn/AOx9PX9Pr9BkHCmScNSxM8ows6E8XGlG\nvKpiK9dzVGU5U0lWqTUeVzk/dSvdXvZW/LPFHx28SvGOlk9Dj7OcLmlHIauNr5ZSwuUZXlcaFXMI\nYaGKlN5dhcNOu6kcJQS9vKoqfK/Z8rnNyqbD/wA9P/Qq/nh/4Obl/wCNcfh8MSd37Tnwr7c/J4W+\nJHHr/k+1f0UbVH8H/fWT/hX88f8Awc2qG/4JzeG8DGf2nfhcBtGc7fCvxL7f8B4PB4FTxk7cLZ69\ndMuxG3+FeZt9HeHtPHHwth/NxjlC/wDK5/n/ACx88Ln8MY6fe6//AFx7V0lmMW0Q9FP/AKEetZwh\nOOcn8h+laduCIYweMBuPT5v6YH0r+P8AEz54ra6lrrd7M/6A8ow6oVqjStzUWn6+0pvTRaaPQnr9\nCP8Agk4C3/BSr9iocD/i+vh0/wDfNjqu0/T5f0x61+e9foZ/wSYG7/gpX+xXjt8ctCPPqNN1j+vH\nFdeQf8j7JP8AscZX/wCp1A8TxTTXhh4kNp6cA8YvXTbh3Mutj/TbKNk/N3b+Idd317/z5GRSbG/v\n/qP/AIqrZVckbM9uOv8AvE/4evSjav8Ac756fw/57/rX9tH/ADYR2XovyKmwj+P+v8iR+dGw/wDP\nT/0KrW1Rzs9T7fN+GcfjS7V/uf3e/p93t/npxQMqbD/z0/8AQqNh/wCen/oVWtq/3Mc54z97+H8v\nT8aXao/g6/3s9f8AD24/CgCpsP8Az0/9Co2H/np/6FVvap5CH8uP5ZPvyKTCf3f5f/E0AWKKKKAC\niiigAooooAKKKKAPi39v/wAO+EtR/ZT+L/jDxYs0UPwl8GeI/ixZajZW4ub+xk8D6Lf6zfxW8e9H\nmh1PSba/066t1lXzI7hZAplt4dv5n/sSftUad4k0vw58LtV16xnupLa31D4M+Jp7yNdM8QaXqEKX\ni+BbvUJPkRNQhkW48JXknMUmyw/5YWtrd/p1/wAFEf8Akwn9s3/s2H44f+q58Q1/nufsY/tUt4ON\nj8IfHeqva+H5LuM+A/Ek9w0Q8M6lNOky6HeXm+N7bSry8k+0aXeeZF/Zd+7xTyxWVxFLa/nnE+d0\nMsz/ACrB4iUMOsdhpVMPjGly0cXSr+yhCvze5LD4inN0Kin+7afJUtTnKdP+hfD3wXzjxB8JeNeM\n+HaWIzLMuDc9w2HzHIqMZVKuPyDFZY8VXxWXwpp1pZjlVegsT7GneWIwtSvOj/tWFoUsR/U7/wAF\nUv8AgnVaftl+Bx8cPgnpcNt+0V8O9MuNN1Dw80cNhc/Ebw/pbPNceCdUV3jjtvGGhzSSyeEry8k8\nqXzptBvJf7N1DRr+1/jY1DT7/Sb6+0jVbG80vVdLvLrTtT0zUbW4sdQ03ULGZ7e80/ULC5SO5s72\nzuY5Le6t7iOKWKVHimi/d1/ad+y5+3HH4lutM8HfE7X7Dw98TreK10jQ/HWv3H2Lwn8TrG3X7Np/\nh34iXnlypoPi23R1s9G8efZ5bS63pa69FL5n2W/5z9vb/gmN8L/24m134i/C5rD4N/tW6NawnxFp\nutW62Gi+PWjh2WNr4+s7D7RsvLyONbfQfiZoX9qWt/aokV5Lr1nHF/Zfx3EnCTxTq5nlND97CPtc\ndlkbynTjFJTxOE5vexGD5tY1FepQX7rFKE4qpV/Y/o7/AEkafBscJwF4h4mo+HPaOlw/xLUU6v8A\nZbqyusvzKEVKUMJKpKUqU4RcsJN1JUY1cJNU8F+Yf/BukQP2z/iipA5/Zv8AEx/75+Ifw6+9z+Xt\nX9n30r+Qz/gh98Fvit+zp/wUU+Knwu+NPgbXPAHjOD9nLxnjTdZt9tvqVnaePvh066t4f1SHzNK8\nQ6PcbWktdY0e8urCUD/W+dHLFF/Xwq45PX+X+f8APv8AceHKceGqcZRcZRxuMjKMk4yi1ON007Wa\n6o/NfpdYnC47xhxOOwOJw+MwWM4a4bxGExeErU8RhsTQngpKFahXpSlTrU5cr5Zwk4yteLa1EEfq\nfy/x/wDrU/ao7D8ef50tFfeH8wgOOgH5CnBSen604J6/l/8AXqSgD+Mn/g5Xtdn7U/7PFyq83P7P\nN1CWB5/0P4leKv4v+mf2rn3r+eewUfZlzz80gx/s7v67v89v6Pf+DmK12/tAfsu3mP8Aj4+CnjC2\nLev2Px75yqWAz/y/N26V/N7bPi3VB1LNkY6Lu5C/06+5r+beOk1xDmqtosRRa8r4ai/xb/I/2N+j\nFL2nhHwLO/8AzKMfT3T+DO8bTe3SKhb5dL6SynzHCqPkXnjgf7TN+A4/MYqWOM48xDg9EBHVV5wr\nc/7Wevpz1pEjLsEGecF27he6r+G30/OtEKAu0cKBj8K+JP6TVlbytfztp+JAsjFiHBQgdMqPbcpy\nem1h+PGK/sP/AODbnUTc/s0ftFaaemn/AB+025BByGXUvhv4b/h/gx9h/wA4r+OsRlGHmmSTLLHH\nGitI8jSNsjjVU+ffJIyx7D1/l/Vf/wAESvDP7Wv7NHw78d6x47+H3gj4X/AX4m+KNL8bSa78Vo/F\nFv8AFTXrqz0FNE03TfAfgPTbyznS0v4Y4biLUPEluLq6lf8A4k+japDJFLF9r4eTqUuKMNUjRr1q\naoYmM/YUpVfZqpRcIzqOK5aVJTa5qlSUacFdykkfzL9L36lV8Fc5weIzLLMDiq+Y5NiMBRzDHUMJ\nVx08Fj8PXr4fAUakvbY3F/V1UcMLhadatP8AkUbyX9PesavZ6JbrNclpppiyWdlBtN1ezKv+rhjJ\n/domF864l/dRRf66vyy/aX/af0uOy1OK31yWDQWkvtD1XxBoF61vqPiSe2bZqHw3+E94nzom/dB8\nQfihbx/ZNBi87S9BluvEkn/Em8e/as/bS07TDqfh57i7uL+7iaCfwTaX7WviTV4ZEPlx/ETWNNm/\n4oDwrIjLJ/wgeh3H/CZa9E/la9daDZ3EsUv43fGT42R+H/Dd18afjVrh0/RBE2keEdHsoLexudfm\n0+P/AEHwX8M/DKeXbW2lafGyxy3FvHFo2jWu+61K6mvJf3v7fmGaU6VKeIlXhRpUIyqSxcppYfCR\njFqVSnUlaNbEa2WJi3QoN8uE9vUbqw/yayHh7M+IMzwOTZZl2MzPMczxNHCYHKcHRnXx2Y16slyU\nfYU1Jxo3V50WlKcI1KuKdKjCVN7v7T37V2nfDfwtqHj/AMTvYW179lj0DwF4Q0wR2djara27povh\nnw5Zf8u2m6XCqySyf88kub+8llmkl83tf+CHn/BT/wDau+Mn7W3ws/ZM8War8PYPgjdeD/inrcug\n6B8P9J0jXJdT0bw9f+JLbULzxPFNJql/qFxq7faNTvb15bnUy7+fxyP5gfj78ZvGXx58b3Pi3xUf\n7PsrbzLPwx4Zt5pJdJ8M6O0m+OztZH4uby52Ryapqkkf2rULrp5UMdraxfqv/wAG6b3C/wDBVD4R\nxMzeX/wrj42naW3KWXwHfY2/3OvPbqO9fjGF4xxWZ8YZLhcrxFfCZSsywmHlCE5UpZhTnXpxqTxK\njZzp1Iq0KM7qMW5ySqznb/T+l9F3h3w2+jn4k51xrlWVZ/4h1uCc9zj63iMPRxtHhPE4XKMTVwWB\nyKtOMo08Xg6kva43M6FniMVaFCbwmGw05f6M9fzff8HEv/BOPW/2rPgToX7TPwf0CbXPjb+zdper\nDXdA0u2ludZ8e/Ba7mfVPEGlafBDvmv9c8Cagtx4s0HTo4/OurC98W2NoJdSvdPtZf6QaK/ec3yv\nDZzl+Jy3FJ+xxMOXmSTnSqRkp0q1O+nPSqRjOKacZW5ZJwcov/M/gLjXOPDvi7JeMMjnH69k+K9q\n6FVyVDHYSrCVDG5fieXV4fG4SpWw9RpOdNVFVpONWnTlH/HIs5IFlU3EMVzaShVlSVBNGY2XKybX\nSVP3fyyH/wCvXquh+JvFHhtYz4a8T6zpUCqrJZrd/wBo6SV52quk6qmoWEKfd/4847X18yv6tP8A\ngtn/AMEJ9RTUvGH7Yn7D/g5r601Ca+8S/Gz9nrwzZA3dtezM93rHxG+Emj2iZube8kabUPF3w/0+\nM3MV082s+ELaWK4u9FtP5DNOvzat9nuNwiV2Q7gyvbyI2ySOSPPmJ5bq0cscn+qm31/Mmb4DiHhD\nMZ06GKxeCqp81OvhKtalQx9GDShVjyOMKtkkqlGpGThJqE1onL/a3w94o8IfpCcH4fF5jkeQcTYC\nSjSxuVcQZdl+OzPhjMasL1sHWdWlPEYPnnzSwuYYSVGOIgvrGGrWlL2X0ja/HHVbqD7D448H+HvF\n9kRslmslXTrxl2/MzadqX9oWEz53f6vULDiuM8QfC79kr4qZ/tDSx4C1m53BZLqFvD376U/8s7x3\nk0S5+8n/AB76rLnj912riVbcA6kMpCkMCpBVvuMrc9f07ZxQcOCp5U/wnkFf4lden19K9XLPFfiH\nB8sMwpYTNaKspOpTWExLSsrKthoxot6f8vMLUu7X63/PuOfoE+D/ABCquJ4TxmfcB42peVOlg8VL\nPskUprm5p5fnFSpmDjd3jDDZ3hqUV7sYJaLz3xj/AME6tSjjbUvhh48tdQt5Q0lraakyxmVWXEaw\n30LmGb+H95HJL+HSvlTxZ8EP2gPhjOz614R1S6tbZgyX+nxSX0IWN/lkjmtj5ye8n0Ffeml3eoaF\nKZ9A1XU9AlJ3MdHvbiygkO771xYo/wDZtz/2+Wcv65r1TSPjh4401Rb6tFovimz6SLdxf2NfvHjH\nzXFlDcaVM57+ZocXTmWv0XK/FThvG8sMasVlNV2T+sUniMMm7aRxGFU52u7c1XDUYrq1ufx1xv8A\nQR8ZOG/a4jhmpkfHmBhzSgssxccozd04396rlmczoYbmaV40sHmuPqSekYybSPz58Aftz/tD/DS0\n/wCEbXx74ivPDijybnwT49trXx74QngX5GtZvDPjO21izhhkT935dvHa8/6mXg19g/Ar/gpBp3w3\n1tPEPhLQvHf7OXi6aRZLzx3+xf8AFzxV8D57yZvvXGt/C28vNc+F3iVJCPMk0+80e1tbr/VdZOPR\ndal/Z0+JsRg8feAoNCvJgyvfXGmLFErMp3SLrWgfbLZE+Zf3moW9h2/1WK8S8T/sB/DTxVby6t8L\nfHj2CSbnhjluLfV9LVmPyxpfWc1widv3ckkXP0r7/BZjgMxp+2y/G4XGU7JueFxFKso3tZS9nOTg\n9VdSSa1UrH8mcS8HcWcG4z+z+LOGs84bxjbUaGd5XjctnV5finh3i6NKOJpaNqrQlUpzVnCUkz+i\nP9mr/g44/aq8Jiw0+f8AaA+A37UGioLeL/hE/wBqnwLdfsz/ABgMMYTbZWPxg+Fyar8H9Tv5I1aP\n7f4h8LRS3Uv72bmTNfud8If+DjD9l/VLXTh+1F8GPjr+ys140aP48m0G3+PXwFkaRflmsfi58E/+\nEkc2km7zPtGseD9Fiji/eTGLFf5s/jD9j/8AaE8ACW5sNOXxVpkO4i50SdbzdGOjtb/f/wA9cV5z\n4Y+MPxm+C2ps+k6v45+HuoKWSf8AsfUdX0JJ9rfNHdWsLx2d4khJ82O4jlil/Su5Sa639dT5s/2d\nPgN+1f8AszftRaHH4j/Z3+Pfwm+M+lPbrcSt8PPHWgeJb6wR/urrGj6ffy6xok4HElprFhY3UR4l\niGc1+Mn/AAc0gH/gnV4XH/Vznwu+v/Io/E0jNf5zfh39sS6utasvEXinwr4T1LxdZSxy2nxC8Jpq\nHwb+KtjcRt8t5Z+PvhXc+F7ma8jdfM+2axp+qSiYfvvN5x9t/EL/AIKYftBftA/Bay+APj/9rb4w\n+KPhlZeKND8Z6X4P/aIstF+MI0zxB4dsdV03SZLH4zabptn8VfsFvZ61qFudP1S3v7Xy3hlm/fW8\nUteNxHg6+a5DmuXYZQ+s4zBVqFH2knCm6k17qlJRk4xdtZJSstWrJ2/SPB/ijKuCfFHgXi3PHiY5\nPw/xFl+ZZi8JQ+sYmOFoVVKrKjQ56ftZpaqCnGUto3laL8i8tvUfr9T/APW9P0qzF/q1/H/0I15/\nB4o1uGPzrnRLHxJYqMtrHw91mz8RweWuN01xorvb63Yd5PLvbfzf+mVbGkeNPC2rMLe11i2ivNzI\nbDUPM0y+Vt3yxta36W7u/wA3Pleb/IV/KubcJcR5RGUsdlGLhSg/exFKCxWGil9qWIwzrUqcWru9\nScHpqluv91PD7x68HeP6lOHC3H3D+JxteEY08pzDEvI85lOUqbdOnledQwGOxEovSUsNRrUm03Gp\nLr1lfoh/wSUGf+Clv7Fv/ZbtFP8A3zpOsf8AxP51+d47HsRlT6/T+dfon/wSRG7/AIKX/sW+3xr0\nk/8AfOi63XnZB/yPsk/7HGWf+p1A+y8VH/xq7xJa6cAcZNNN2a/1dzHTXpvbv5tM/wBOWiiiv7aP\n+bEKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPjj/AIKIDP7Bf7Zg/wCrYfjh/wCq58Q1/lfu\noYspAIIQEc4/1afL+WPz9Oa/1Qf+Chgz+wb+2WD1P7MHxwB9c/8ACufEWPbrmv8ALAl++VGekeT8\nvXy0yc+n+Jr+fPGXTNMm31y/EvyVsTSWv3H+sX7O+y4I8R5O2nFeT211T/siv08+ndrpY+8v2ef2\ntpPD1tYeAvivd3F54ehWOy0LxlIJry90KFV2Q6b4hiQSXOp6JH8scWoR+bf6XF+6miv7OOI2v9Af\nwD/bf8X+AtO8NaH40N18T/hxZ28cvgzxBpevR2vj3wbpt0qJ9o+HPj5PtcN/oMirH5vg/wAQf2p4\nWv8AyUtZ4rWGPyq/kH+te9fBf9oz4ifBK5EGhz2niDwhc3Hn6p4D8Si4u/Dt4W/113p7QzR3/h7V\nZI/+Ypolxay/c+2RX8MflV43C/iBUy+NDA50q+JwtFxWFzCjOSzDA8vLGNpqUJVYRV4xanGtCnJw\nXtoRhSXu+Pv0Nss44xOYcV+GksDkPE2KdTEZnw7i4xpcO59Wk1UqVqEoU5xyfMq8nKVX91PLMZXc\natZYCtLEY2r/AKE3wT/ak8JfEdtO1zw5qWlfE270myuobe903R7PSPjF4W0/UPJk1Oz174b3L3Gp\nXNncfZLf+1NV+G97r+japLbQy/2DYQ28Xlfb3hX4qeFfFcJk07VLS8aEmO6W2k23VnMv3rfUNNm8\nu8025jfd5tve29rLF/y2i6V/D78BP2lvgR8XbzSotA8fxfBf4lLLC1p4Q+J2tW/h2zl1Ld+7XwZ8\nWIf7P8N3M3nbY7W38SP4S1T7kUIupf3tfsJ4d+Pf7QPw/m0y3+KGjL4ytkhhGl6t46sLpNfaxdf3\nMnh/4peHrnT9bvLaRGWS1uI9c1mwli2fupIa/a8szTDY6k8VleKw+NpSanUq4KpSw9aUnZ/7Xg3D\n6rPETslOTo5biZR1qVW7Nf5ecZcB8X8CZl/YvGeQZtw7jaKlToUM1wtaeEq0YSleeV5jCUo4rB88\nm6dXB4rMMDzNyhFXcX/SBb3VrdKGt7iKXIzhXAb5vu/K/wA5/wAfTvfVQB74Oc7eP93/AD/9f8ff\nAf7Y2i3KQpqY8aeHJPlBW9TS/Heloy/e8vUIX8L+JETr/wAfH9qy/wDTWXv9UeG/2lvD9+ifZvG/\nh6TcF+S6u9W0SUL/ALVrr2lRwo//AFz1CUf9NDXsLNVTsq8Jxt8UpYbE030dkqEMdh+qtzYyN9dF\nZo+OlhZt+5Hmva0adahPdrX99PCVnvoo4Z3eibPtuivnmy+NMVyoMep6Ddj5cNBq/h+4z8v/AEy1\nONx97/nn2rVHxaO3LSaSB/ea608d/wC9/aWz8eR9a0Wc4C6TrU1dv4q2Gi90vhlXjLrrdK3mtUvq\neJ/581en/Lmu1rbrClKLtfXXofzA/wDBzRagfFL9kW8xzN8OPitals4+W18WeFZVXdx/z9Nn6elf\nzM2zARnbgHc3LH5Qq/eZm79h3OR+Ff3+ftdfs0fsrftm614B1/8AaN0seI7j4a2GvaZ4XtdM+It5\n4Sso7PxJdabeasuoW/h3WLe8v3km0mz8rzLj93F53kj95x4z4U/ZL/4JufCAxz+Fv2d/hLd31qQ0\nN3reh658T9QEi/Osiz+M5tctt+FXMn2mLNflHEfDdbPc4xmNw+NwlOhialCUF7PHYqranhqNKV4Y\nLB4ikpc0JKN66i7J82rUf7t8I/pN8J+Gvhzw3wzjuHuJs1znKMNmlLErDrJsFl0nis4x+Pw8Visd\nm1LFuCw+Ioqq45dKUJcyUZKKb/i/+Gvwk+KPxb1NNF+FXw38cfEXVZnVPsvgzwvrXiJlkZgm64m0\n2zuLazjx/wAtLy4iji/5bS1+tPwN/wCCH/7T/jw2Wr/G7WvCX7PHhacxyTW2t3dv4x+IM9u33o7P\nwn4evJNNtrmRP+WeseJLW6il/wBdYS/6qv6MtV/aS0Twnpn9jfD/AMFLpum2yMltY2lvpfhDRLdV\nX5fJ0vQYbh/Lj7xx3Fr7Zr541Txn+0p8abi40vwJp+vtbyiRbmPwLpl1ZQxQsf3jal4qmeS5toY/\n+Wsl7rlrafgKeX8AYGnKM8W8Zj2mvdqcmW4dvS/NGjUxeNqxurpc2Bk+8LHm8X/TV46zSnVw3CeT\nZHwlSmnFY2rOpxRnEE2kp0Z4rDZZk+HqO6lyVcvzOMWk4ttK3DfDf9mD9g/9gCC212x0i08Z/Fex\niWW38ffFSO38Y+OkulX5bjwf8PrBLfTfDHmPj7LqElnoMsX/AC1166rxP4p/ta/GL43+J4/Cvwk0\nXxLb6lq7TafYXVhHJrnxI1OG4Oya30ltNh+weDLCRG/0qPw3bxXUUX/IS8R3UIlr0D4SfAz4CfEj\n9onw7+zv8Qf2nPAV18Z/E8PiLVpfhL8JtWi+JHi+0s/DGmXOta83jbxnpUGqeDfBl5HaW83+h6he\naprFzcv5cNr5o86L+gz4M/s0/Bv4C6UdN+G/grS9ImnjiTUdZljN/r+rtH0k1TXL1p9SvMvhxbyX\nH2CA82drbAkV99lWXYN0J0MAsGsLRqulVo4JQhho16cacpQxEIzqVcRXipQk/rtWvUjeElyOyX8q\n8aZrxlmWa0c344rcQ4rOMzwVPH4PGcSLGfXMRldetXp0MRlyxlOjSw+VVa1CvDDxyyhh8C3SqwpR\nahKMf48vjY2h/skWs8PjvwF40+P37Q00K3Wm/Ar4f6B4q13wh4PvrqMzW+ofHL4jaBp15YfaY2lW\n4l+H3hO7v9Zv/wDVaxqml2dx5tfiF8YbD9sX9orxrdePPiL8KPjX4g1iWJbPSdN0z4QePbPw54W0\nWNv9D8O+EfD1n4e+waDolmm2OK0s4/NlP+lXl3dXkkt1L/qjUV4/EPAmL4jmo4niKth8FCXNSwOH\nwEY0otfDOrKWLc69VK1py5Ywt+6p005J/ufgz9JDhrwVwjrZH4RYDN+KMTRdHMeLc44pq1cyq05W\nlUwuXUqXD8aWUZfOa5pYbDSqVq9ofXsZjZUaM4f5O8H7K37UN4MW37NP7QdwG/55fBT4mSgj0+Tw\nxz/nFftB/wAEE/2aP2gvh1/wUq+F3jPx78A/jT4C8LWXw++MNreeKPGHwt8c+FvDdrcah4Ku7axt\n7rWNb0Gw02Ce8uGW3tI5J4pbqX91CJc1/fRRXlZT4UYPKsywOZRznE1p4HFUMVGnLC0oRqSo1I1F\nCUlVk1GTjZ2XVPpZ/o/Hv07c/wCOeDeKODqnh5k+W4fifJMyyStjYZ7jsVWwlLMsLUws69Kk8Bh6\ndSpSjUc4xm1GUkk7K9yiiiv1o/goK/nw/wCCnH/BAr4G/to3XiD4xfAe80b9n79pHUvO1DVr2302\nQfCv4pam43yTePPDulQ/adC8Q6jJt+0+OfC1tJfXUu+68R6D4ou5PNi/oPorz8zyrAZxhpYTMcND\nE0ZapSup052sqlKpFqdKouk4Si7Xi24uUX9ZwZxzxX4fZ3R4g4QznFZNmVJKE50HGeHxlDnjOWEx\n+EqqeGx2EnKKlLD4mlUpqcYVYKFWnCcf8mj9p39k79pf9h34gN8N/wBpP4Wa94D1CeW5Og6vMF1L\nwT4zs7aQ+bqngXxpYeboniG22Msktvb3H9q6eXSLWNL0+8/dV4nZ39reput5ASPvRscSp/vR/wA5\nPU5Nf60nxu+A3wd/aR+Hmt/Cj46fDnwt8Ufh7r8e3UfDfizTUvrQTqjrDqWm3IaO/wBE1mzEjvp+\nu6NeafrGnSuZtOv7WYB6/h5/4Kg/8G7HxX/Zsi8Q/HP9iV/Evxp+C2npdaxr3wrnDap8Zfhpp8W6\na4uNDa2SOb4oeFtPhDSF7OCLxvpVsoF5pfiSGC/1qP8AC+KfDHEYONTF5VKeMw0bylHlX1qjG/8A\ny8pxio14LZ1aVpxi+aVFQi5n+oPgd9NjJ+KJYLh3j6lhuHc8m6dCjivbOGQ5lWk4xSwuKxFSdTKc\nTNtRjgcfUq4WbShQzD21Wnh1/PZULHJ9u1cZpniyOZhbaniCRWeP7Rt2ASRtsMd1CPnheN1aOX/p\nqh86KKuwBDAMpDKwUqwKlWVj8rK3fH6+g7/kVfD1sPLlqwcb/C/syt2enfZ2a6o/vvLs1wOa0fbY\nKvGoly88G0qtJySsqlO7lFt3SdnGSXNFyTJUboOnof8APf8Az9XQKbS6F7ZS3Gn3w5F9plzcadfB\nuv8Ax+WD29z2x5ckn4VDT1bB56E8+tTQxFfDVI1sNWrYetH4KtCrOjVi/wC7UpyjJbdGVmWV5ZnO\nDq5dnGXYDNsvrpxr4DM8Hh8fg6yejVXC4qnVoVE1dNTpy0fQ/ov/AOCZ/wCx18CP+CkXws1/wx4N\n+NXjP4H/ALWfwl022uPGnhfxRZ6f8Rvh78R/C1xMlno/xG8M2qXPhPxzofmX8kWieNtPk8W69YaF\nrM1jf2mnjTfEGn2Fte/aP/4Iaftm+Bra/l1T4J+Cf2jvC8Ksza38J9Rsde1r7Ow+UzeEPENt4P8A\nHP2jYuPsfh/S/FvlS4IupARKfyS/4J8/tQ6v+x5+2F8Dfjxp95Pb6J4f8YafoXxCtYZGWPWPhj4t\nuIdB8d6fcRn5Jfs+iXk2sWEcsf7rWdG0q6P76zir/UkgniuoYbm3ljuLe4ijngmidHjmhlQPFJHI\nnyvHKrq8bocEEY4Jr+n/AA54kq8RZNOnjZ+0zHLJww+Iqt2niKM43w2JmutScYVKdWbvKpOi6rd6\nll/iT9MHwXy7wk8RcPi+G8KsHwjxrhcTm+U4KnFrD5VmGFrU6WdZRhVb3cJQqYjCY3B09I4fC5jS\nwcbxwnNL/Jb+L3/BPj4bWmu33h7WvC/jf4LeNoWkFz4b1/RdY0PUrWZW+b7R4Z8RWel69Ckbqf3k\nml+V1/e18XeL/wBgr4teHDNdeBNf03xfaRbmW3t7j7LqG1cfLJazZ+fsI/L9+9f7G/xJ+EPwr+Mm\nhv4Z+LXw28C/Erw+4kH9j+O/CuieKrCNpF8tp7e31qyvY7W5xzHc2/lXMRCSxSxyoCP5Tv8Aguv+\nwF+zP+yD+zj4b/aG/Zz8Iah8OfGGq/Gnwj4C1Hw5H4i1zX/AFzoviDw74z1W9ktfDniK/v73Q7yO\n88PWBtP+EX1zQbC1ie5j+wS+bF5X2eY4zD5XgcTmGLm4YXCUnWryjCU5RpxaTcYRTlJrmvZa2Tav\nY/m3hLhbOONuJcm4T4fo0sRnWf42nl2WUK1enhqVbF1lL2VOeIrONKipuPKqlWUaak1zyirtf58m\ns6L8WPhzeeX4o8Ka5pclu+PtLWl1EFZf447qH/dz5nmH29rNv8WpNQRYNcKaioGzGsW8d7Iqr/Ct\n4/8ApqcY/wBXcevHSv2HtvjNDqFuLLxh4XTULRwqyNbra67ZlW+8x0vW/sd/bJ8v/Lvrt/Mf+WMf\nNcNr3wU/Zg+LDOF0nT9E1e4DYbQ7ltC1PzG+8V0PWE0+5ufn/wCgfJdRf88a83LOI8izlL+zM0we\nKm0n7GNVU8Sr/wA2FrezxEUurlSS89Vf6rjfwa8U/DidRcZ8C8Q5Jh6UuV5lUwUsXksmnp7PPMve\nLyipKy5lGGNlJJpuK1t+dWh+P2tQr6HrepaQva3t7z+0dN+bnb/Zt/8AaIUTP/PP+or7x/YZ/bYP\n7LP7VnwG/aD8Y+Eh8RfD/wAJPHtj4t1XQ/Cl9a+H/E2q2NvY3+nzW+nprDvo73g+3LcQxySafay+\nT5XmxeZ5sPinjH/gntfwSSz/AA38eW1xJ8zw6Pr6SaXqG1vuxq0/l7/TzIvN9vb5c8XfBP4+/DKS\nT+3vCGqz2cJb/TLSBtQtmjX7zLJEm/8AhH/LOjF8N5DjsTRxmJyrByxdCvSxFLFU6SoYlVqNSFWn\nKVfDulVqqNSEZctWdSMtpqSbTvIPGjxV4YyjH8P5Px3xDRyDM8uxuU4zJMVjpZplE8vzDC1cFi8P\nRy7NFjMJg/a4atUp+2wVLD4im5KdKrCpGMo/6j37Nf8AwcXf8Esv2imsNL1L42337PPi+/a3hHhb\n9o7w9cfDqFbqZRuij8eQ3Gt/DGSNJi0cckvjS2ll+SX7NGJAB+1XhLxl4Q8faDY+KfAnirw5418M\napGJ9N8R+E9b0vxHoOowldyzWOsaPdXun3kZBX95b3EoPBzzmv8AD5tvH11at9l1S1uLdkO2SG5j\nZlG37ytDNH09/L9K+i/gT+1h8Zv2fdej8T/s+fG34ofBLXt6ySX3wv8AHfiLwWt4yt9zVtJ0q/t9\nI1iGTZ+9s9V0+6tZf9VNF5Mhr31Puvn/AF/wD8wP9qGiv88j/gm5/wAHJf8AwUTv/j98APgD8aNR\n+Gv7SPg/4q/Fr4afCy91vxX4Ot/B3xR0jT/GvizR/DE2raX4m+Hr6J4d1W/0uHUm1Dy/EHg/VJdQ\n8l4pr+LzPtUX+gpZeILS6vU06Qxw300FzdW0IuElW8t7OS2ju5rYgJI32dr2yEqtHGV+0JgHBxhP\nG4aniKWFnUUa9dSdKnJSTmo/FyuzjdJNqPNzO3up2drVKpKE6kYNwg0pS0STaTt3e6vZaX9L9HRR\nRXWQFFFFABRRRQAUUUUAFFFFABRRRQB8d/8ABQz/AJMN/bL/AOzYfjj/AOq48RV/lev949eVj/2f\n+WaZ3L/LPfJFf6of/BQrB/YP/bKB7/swfHL9Phx4i/xr/K8fGc55IUn/AL9pX89eMj/4U8jStrl2\nJv8ALEUmf6xfs70nwN4kX6cV5M+n/QoxHdMjPA+nHT+6uRn6fLk//qoB7cZG7jr91jt+X1AOPy+t\nGdxI4x39/pjtTvu+3/2X+Oa/HWradf8AO1v1uf6E83K9LXSST+S/y07a7jSMgqQCCMbTyCnXa3bP\nzc++K/0Uv+CEfhjw94s/4JS/s6WviXRtO123e7+L0DR6raQX6Nbw/GLx5DDbSLdJIWhggVI4oJP3\nMMSJDDGIlWv867I9R+Yr/Rw/4IAEf8Oq/wBnTJH/ACE/jD1P/VZvHn9f1r9V8IEnxLjU0mnkuIum\nrp2xuXtaPTTp6vufwv8AT/k/+IO8OS2kvEfKWpLdf8Y5xTdJ9E+XWyV+t2k19zeJv2J/2ePELyTw\n+C08N3chZvtPha9utGAdj94WMLyaV3/6B/8AOvJb79gDw1AzN4d8c65aISxSHVbDT9TAX+FXntv7\nHfoFz8nYj6/oZkeo/MU3zE/vCv6KlhaMl8LX+FtdEtrtdND/ACBVWa6qXqt/ut+Fup+bLfsQ+KbU\n/wCi+LtDulB+U3GmXls2N38Wy5vMnHP4dOhpU/Y48arhTrvhzHPIh1LJ/wCA/ZuM/wCc1+kvmJ/e\nFHmJ/eFZ/Uqf80/w8vL+r+hSrvrCL/8AAv8A5L1+8/nr/am+Pv7H/wCxV41sfhv+0z+0VbeB/Hep\neGLDxlY+FND+F3xE8aanc+G9Sv8AVdMsdSiuPD+k3GlQx3GoaJqlv9nuNQiuo5LZ/Ojigkhll+Af\nGf8AwWa/4JveGo5D4a0/9qL4x3ShjFHpHgjwf8NdGuWx8iyal4t8SXmsQwyd3j0OWU/888V8Qf8A\nBz4Q/wDwUL8B7ef+MXfh6c9trfEH4q5Of+BL61/PNCB5UfsqjP8Au/8A1xX4PxXx5neV5vmOW4GO\nCp0sJiXRp1p0J1a/KqcHebqVXRck5PWNGKtpbRM/1B8DPoj+FPGnAHCPGXEtTinHY3PsmoZli8BD\nOMNgsrjWqVpQlSoQweW0cwjRtBWU8xlUTbaqN2t/Q/8AEb/gvlexi4g/Z+/Y3+FHg6XLLa+KPjZ4\no8SfGbXYX/5ZXEfh+zTwX4VtrmP5ZBHcQapa/wDXbNfmN8ff+Ckn7bf7TVpc6N8Vv2gvG0ng64LJ\n/wAK88Dy2fw2+HMdv/Dat4P8DW3h/Sr+2j3eX/xPI9Ul/wCe0stfDhxzyR3OOPT/AOJ/zkU3gE4w\neWxkrnbs+7+We/v6V+d5hxTn+aRlDG5pialOS1oUpfVqElpdSo4ZUac1bT34yb1bbVr/ANj8HeBP\nhBwFUo4jhjgHIcJjqPI6WZY3D1M5zSlOPL+8oZnnNXMMbh5txTbw9aktXZJWS/b7/g3kCL/wVK+D\n4QKq/wDCvfjYcKFUbm+Huolm2/5+lf6J1f51f/BvI6r/AMFSvhCzFuPh58bTyMfKvw71Pdt/74z/\nAIYr/RI+3Q+v8/8ACv3bwi/5JfEWv/yOMVv/ANguBf3an+Zv0+nfxsyp/wDVvch/9XPEpcoql9vt\n/wC8Pz/+tSHULcfxqPqf/wBVfqR/EReoqj/aFt/z0X/voUh1CEDO4H0I6fj+HNAHM+P/AIgeCPhV\n4N8RfET4k+LNB8D+BfCWnSar4n8XeKNSttH0DQdLgeNJb7VNUvHS1srZJJEQyzSIPMdAOXGfii6/\n4Kw/8E2rQEv+2n8AZsZGbHx1p+pfd5HFgbsn8O34V5d/wWwvS/8AwSu/bRW1OZP+FX6eGC8n7PJ4\n58Ix3X52zv6dPU1/mSQuA8ZzsJeM5B2/xfwt+HpX5txrxnmHDWNw2DwWFwlZVsGsU54pV5csvbVa\nfKvZVaWlqV2m27y3S0X9jfRu+jhwp4ycNZvn3Eee5/ls8u4hlk1LC5LPLKSqUoZdl2M9vUqY3A41\n87njZU0lCEeWmtG+Zn+oFff8FlP+CYmn7vP/AGxfhdJjqbGPxZqf5DTfDd5+HXn1rlLv/guJ/wAE\nsLVljf8Aa38LylnVSbTwL8W7tFJbClpIPADIE9X3469DX+a8ZM9yc9ev9fek3j0P+ev5df5+tfnL\n8YuI3tl+Srt+5xzsrq3/ADHq+zu7LfZa3/rmP7PfwhXx8WeI83b7OYcMwXN0dnwvU0T1tu+6P9R/\n4c/8FL/+Cf3xZ8pPAv7YXwA1G5n2iLT9U+I/h/wpqzs3KxjR/Ft1oWq7zn/V/Y/M56da+1bG9s9R\ns7TUNPu7W/sNQt7e8sb2znhurS7tLuFJ7W6tbmBpILm3uIXjmingkkimjZJIiY2DV/kB3YSWCZXj\nVwYpAA4VvvRvt+Xj09K/1Vv2NNetb39j/wDZSu7JkNnP+zb8DZbcoAUEf/CsfDG1UHPyR7Xj5/D0\nr9H4E43xXFlXH0MXgsPhZ4KjQqqeHqVGqvtajhJeyquTjyqF7+1m/et01/kH6UP0acj8CcFwtmmQ\n8SZxnWG4izDM8DLC5thMFGpglgcNhMRCf1zB+xhXlW9vOPJ9ToqCpX5pXcV/Lx/wcjf8EmvBmi+D\ndZ/4KH/s8eFrPwxqek6tp8f7T3gzw/Zx2mj65p+v6hBpth8ZtP0y2WO30/XrPW7yx0/4gGzjji1+\n01G18U3kUWpaZruoat/G54c8TzadLHbXbvJYSMqneWZrZmb/AF0eedn/AD1jx244r/Wp/bG0DQfi\nJ+yT+0/4H8UW0Fx4f8T/ALPnxk0rVEuVVoo7ab4e+IHW62v8iPZzRx3kUn/LOaGOXjyxX+RPbIzw\nQMQSzQQs3G0bmj+bb/49+vbkfNeIWS4OljaVSFKEYZjSqVKsIpJQxFKUYzqwskoympU5PlsnNTbT\n55J/uf0RfEfiPM+FsdgMVjq+IxXB+YYTCYPE16lSpKtlGOw8qmFwGIk5c1aOElhcVRp87bhhJYah\nBxWGp2+jQQwDIcggEEdCrfdZfXn6fSlrA8MztPotl5hJeONoTncWKwyOkbbv9xV/Ot+vwitTdKrU\npPV05zg335ZNX/C5/ptgsWsXhMLiopqGJw9CvGLd3FVqUJqLd943atouvWyZIvmRvETw8bKe33l2\nZ9j834k+1f6n/wDwT9+Ik/xW/Yc/ZL+IN9O8+oeJP2fPhTc6pcMxeW41i08HaVp2rXMjHDNJPqVj\ndSy56u7DHFf5Ydf6Vf8AwR9vr+H/AIJkfsZLfM3nf8Khi8vKqD9hXxN4hTTPl/7Bq2v7zH5dK/Xf\nBupJZxm9FP3J5bTqyXRyo4ulCHXdKvO2+jkfwD+0RwdCr4fcAZk1F4jCcZYrBUpfaVHMMjxmIxCX\nW0p5XheZXtdQbWit+qe9fX9D/hX87X/BzWwP/BPvwOBzn9p/4c/+O+CfieTX78LqbE8nj8j9B/8A\nXzX89/8Awct3Zn/YA8DIcn/jJ34enntt8D/E7p+Lc1+ucc2XCHEDeiWW1n93KfwP9GVX8fvChf8A\nVYZbt5e0Z/CdVN4o5UaOVElQmT5JFWRSvmPt3K/yf/qq5VYd+3LcHr94/wCf/r8V/HdKpaV9U1Zp\npu6akmpK1rWa33Wy3Z/0I16cXDlmlOM1KEoSScZRkrSjJNNSi4tpxejT1TNrS/EfiLREWLSdc1C1\ntl6WE0kepaXj+6ul6ql5YQp/1728Uv8A01r6q/Zntvif+0V8Zfh5+z94P0/w9ceMvifrknhzw3Le\n6vdaFoT6kul3+pqurWt/Z+JLOGG4h0+aPzLOO0i814f3UUMnmw/HlfpB/wAEgBn/AIKcfsX/APZX\nCf8Avnwn4n/qtffcK8Y8R4bNcqwMM1xNXB4nMMDhauHxUo4uCoVsTSpThTeIjUqUVyO0XRnTce7R\n/K3jl9Hvwbz7gjjjiXE8BZLgeIMo4U4kzrBZvkdGWQ4v+0styfG47DYjGLJ54PD5k/b0YOpHMaGK\njUi2pK9mum/af/4JbfGz4WJfv+0T+yB4k0vSrYsJ/HnhrQ4tW8Movz4upPGngmbxR4Ps0l2+Z/xO\nNY0a6/57WkXEVfkr4z/YH+H+rLLeeAvGl74bmkZjBZ+II/NsGkXO2OHVIZJLN/8Ann+7uOmOK/2A\n98oBHODkkZbBVv4WH/Aj+v0r4o+OX/BO/wDYu/aJa9vfiZ+z94Gk8Q36zef408G2c3w88bPNNy1x\ndeJvBMuh3+qujs0nl65Jqlr086KWHNf1a6fZ/ef4Rn+cJ/wSb/4J0/tTXH7c3w7+IHhjwevxA8N/\ns+refGbU59J1OzFrLfaGn9m+C7eOS5m8l7+TxVqWm6pa2ccnmyxaPeSw/wDHvNX9337Inxf+M/xR\n/ar8M+EvGXhPxJ4Ttvhj8OfHWteLrPXrWezlim8RyaJo+jwyI7GN0u7mGK4sHQYuora5lhwLeUj6\nK/Zs/wCCbvwD/ZK8P+ItE+CVx440q98Va2dY1rxhqXim4XxjdRwo8Ok6LcX2j2en+G7/AETw/DNc\nf2Xp+qeE7qWWW5vLq8v7q9vJbuvr34b/AAt0n4enXdTF7c+IPGHjC5s73xl401aG1i1bX5tNt/se\nl2v2ezhjs9N0fR7ZpLfS9Hs4vstqZrm6m829vbq7l86eX06+OoYyrTXPhf4NTmbdvedkk7Wbk76f\nedtPFTo4Wph4S9yu71I27KCWr7RjaPbXpoewecv+c/4UvnKemT+B/oDWeEJPTHck8fUL+nr+AqaO\nI/7R/QYP8X+fUV6pxFsSAkDjP+9/9Y07eO+R9RUAj53E5PUgKT94c9akCE5/hHYdf6/SgCv9ti/v\nD8j/AI0n26PHUZx0+bH03ev61w/2uX/Jo+1y/wCTQB2/25Paj7cnsPf/ADn+VcT9qc/xEe+P/wBf\n8qf578fNxx1H9Mnp6UAde2oIOhyfwIph1JR1IrkvOc8ZH8v1zTS7nuT6D+gzQB1p1Re3P5D+f9cU\nz+109v8AP4Vx5kceoHvn/wCtTDIw5JJx7Z/yPyoA+dv+CgWpRy/sKftkR92/Zi+OAGP7zfDnxCP5\nM3Htniv8sqX7/wDwGP8A9FrX+oT+3rIW/Yd/bCXnn9mb42D+Ef8ANPde7niv8veXh/8AgEf/AI9G\nv+Nfz94x2WbZGu+W4q3/AIV0lp6WV+1z/WH9niv+MF8SPLizJPxybEP9bCAhRjqc8+3+f84ppYn6\nelNor8d5F3butdvvX9Pc/wBBwr/RW/4II34t/wDglh+zrHnldV+MmcH+98YvG7r8o/3/AMvqa/zq\na/0Of+CD+D/wS5/Z3w+Mar8YgOeP+SweNv4ee/fFfqnhClHiXG2vrkmIWv8A2H5av1P4a+n/AP8A\nJnOHv+zi5R/6zvFJ+zz6ueu4/pn/AAH+fWq51d+SHP0B/wA/56DtWIYlP8YI9t2P8/rSLbbs4Y8e\n3av6PP8AHw2Dq0h79ffn8en9PfJpRqch/iyPYtWWtkWx6N0OG/x/w9an+wv70Afwm/8ABzNOZv8A\ngoD4FkOWJ/Zg+HoH+6PHXxR/i6fl3x3r+e6L/VJ/uiv6D/8Ag5eiZf2//Aqsen7MPw/4/wBn/hOv\nidxtwO5H+HFfz4x/cX6V/JXHFlxVnjvp9fqLVr+Sn5vt8j/ez6MyUPA3wzlbV8KYLXXf2lWy2etl\n03duxJk+p/M0lIWA6/lTPM9v1/8ArV8np0t/X/DL7j95Uv7qSfdpfp6bH7Yf8G+LlP8AgqD8J2Bx\n/wAW4+N4zzkf8W71P+jV/oLtdPjG859t34/N/j1+tf5kH/BOL9r3Q/2G/wBq7wh+0Z4k8F6x4/0r\nwz4X8faBL4Y0HVLHRdRu7jxh4audBtriPUtShu7aCGzmuFnuo5LeWWWJBFD+/Ir+hq//AODojwcA\n/wDY/wCx74lkb5tn9rfGnR7X/d8xbP4e3n93/lnJg8da/bvD3i7h7IeH6uEzXMFhcQ8zxNeNJYXG\n15OlPD4OEZr6thq0Lc1Oa+Lm93VK5/ml9LjwF8WvFHxXwGe8DcIVM7yijwblGWVMd/bPDuW0oY7D\nZrnletQcc3zfL6zcKOMw03ONJwaqKKk5KSj/AFgGeQgjcfxLZ/769v8AIqFpZ+zZPY56fn/n3r+Q\n+/8A+DofxC27+yf2QvC0J/gOqfGnWLnH+zJHZ/D2z3/eJzHJjnjNcNqH/Bz58b5Nw0n9mf4JWROd\npv8Axd8QtVKjjazLbPo+/wDT+tfYVPFPgqF0syxNRq+lPKs01s0tHPBwi9/5tLo/nvCfQg+kdieV\nz4PyfBxlb3sXxvwWuW6v70aGe15rfpF+p/ZGZbkdCT+LCojPdjPLD5uP8/8AfPv0r+KfUf8Ag5p/\na5ud39mfCL9m3TAd23zNA+Jmpsi/w7mfx/Zo/T/nn+Nem/B3/g56+KekXgtvj7+zn8P/AB1pMs7F\n9V+FOs698P8AXrO3aT7o0vxPP400fUmjRv3Uf2zRvN/5by/8taypeK/B1WtGk8Tj6MZO3t62WYyN\nGO1ubkpTrK993Rsre80tTux/0FvpB4LAVsbDJuGMfVpK/wDZuA4yyGePqJK8nSWIxWGwUnFa8n11\nTmrKnGb0X9GH/BSfwdqPxJ/4J/ftk+DLaKS5u9U/Z3+JV9Y26KzPJeeGdAm8VWccan77S3OiReV0\n7+lf5fUMqyCORSdpMbgnurfOu31/znnFf6oP7Kv7U3wf/by/Zu0f4z+ENA8T6H4A+JMfjLwhqHhr\nx1a6Ta69Cmm31/4S8UWN5Hpepaxps1tcPHeR2lxb3n+lWrJLNFazSeVF/mXftMfAzXv2av2hPjL8\nBfEcMsOo/Cr4h+JvCUTyIyLqOiWOoTP4Z1q33/fttc8N3Gk6xayf8tbW/hlxXzPihCliqeQ51hpq\ntg8Vh6lCFeMZKEoTVPFYaSbipXq0qlacU0pOMG2lZn7b9CPE4zJMV4n+HOd4eeX8QZHnGDzLEZXX\ncViaOIoOvkudU5QjNxby/GYLAUq04SnBSxEEpSvFvigc8iiq9pIJbaF92coqn/eX5HX/AMdb+ftV\nivwZqza7Nr7nY/0/hJThCa2nCMl/29FP8LiEZBHr8v58V/o/f8EY/jDY/Gb/AIJsfsx6lBeJc6r8\nP/Cd58G/EkQlVpbPWPhfqlz4dsoLhf8AWI9x4Yj8O6rF5mP9Fv4Zf+Wlf5v5dR1P+f5V+hH7FP8A\nwVB/ap/YF8O/Ebwr8Bda8Hz+HPiPPZ6peaF8QPD1x4q0jQPFVjbpYL4u8N2MGraWlnrd5pscGl6p\nHdyX+l6pa2dh9ssJZtPtZYvueAOJsPwxnFbE41VXgsVg54av7GPPUhONSnWo1FBzhzWlTlB+8rRq\nSlqotP8Amf6VPgzm3jT4fYHJ+G6uBpcS5FxBg85y1ZjXlhcLiaE6GJy7McHUxMaVd0HKhjIYyEnS\nlGpPAxou3tU1/ab/AMFt/wBrrwz+yb+wF8YobjWbe2+Jnx88Ma/8EPhPoCzRjVNS1Dxtpsmj+Ltf\nt7Xf539leC/B+oatql/qHlm1iv5tE0+aX7ZqlrFL/mhLAq7UQ/KuFUH+FVX7n8j6/jxX1l+0t+0V\n+0L+138Rbn4p/tC/EnXPib4we3/s+wudVubW10jw9o6zPMmh+FfDdhbWeh+GNESZmuDp2h2FrFNL\nm6vPtV5LLLL4VYaBHHIk960blG3LAnK7lbC+Y3ybx/0zEY5z3r1+KeM8Pn2OWJpxlTwuHo+xwlCT\nvWkuZylVqW5oRqVJWTjGbjGEYRTk1KT+L8Dfo9Zn4V8MPJcXVw+OzvNccsyzzM6KnDL6VVUqeHoY\nPByrKniK2EwVKMnCrUoU6mIxFevU9lRhUhSp7WiWzWml2kTDDlGlYYwQ0zO+1lPsyn88VtK2R7j3\n57c1ACp6Ef8A7Of5Y4oyPUfmK/Mak3VqTqS+KpOU36ybdvlf5n9j4WhDC4bD4anrTw9GlRg3a7jS\npxppt9W1G782yaWTy43fOQiM2PXav3f/AB3/ABPYf6in7Enw7uPhN+xt+yt8OL2Fra/8I/AD4V6b\nqVuysrwatJ4P0q/1aF1/56R6leXUcvpKj9q/zp/2Bv2d779qj9rv4HfBqO1ln0DV/Gem6/4/uURm\ni0z4b+EbmHxD42vLuT7kKXGj2M2kWskmPM1TVrC14muIq/0u5PGNooC24jihjCxQwoFWOKGNdkMM\nS/wJGirHHHn69c1+5+DWXzUc5zWcWqc5YfAUZW0lKnzYjEpNqz5VPC7Jr3mnqml/mT+0Q4uw063h\n1wLQrQnisOs24qzOipXlRpYj2WU5LKaTfLKt7DOvddpKMYSS5ZwlLv0bb1PynOR/wE7W9/TPYGv5\n+f8Ag5Rcf8MC+A1B6/tN/D/OOh2+BfiWO3p/nNftw3jNRgAjAHH/ANj2/wA+1fgZ/wAHF3iH+1v2\nGfAtpnhf2kfAsv8ADjEfgn4kD7v4/wCTX6Nx3b/VDiG//QtrffeP9etj+RPowrm+kD4TL/qsMvfT\npGs+p/E8AT0FViNpYejN/M1ZyR0JH41ULkMwOc7myTzzu/i7cHtmv43pRcpO3b9Uf9CWMhywp2Tv\nzaO7u/df3/13HV+kf/BH3/lJz+xlk/8ANWZD+Xg/xP8A0Wvzbzxx834iv0d/4JBSlP8Agpn+xw+G\nXZ8VpHOduDt8H+J/l/z9eO3v8Oxa4hyJO2ucZWt7NXxtDVXt8mfmXixOS8K/Ex2Tt4e8aN2aT/5J\nvMun5/da5/phGaPJP9Vx9eRUXmxf7Pv939P8/wA8Vwy6k7dH/wDr/Tip1vZDj5vzKgH/AD+XrX9q\nn/OClbTtsdsJY8DB2jucr/e/h/ye4qVJYgeuSe57Z/i9e/8ALvXFpcydcn+X+OR/hVpbiQkZJ+oO\nPu9vX/OaBnYiaMck5P0xlf4VX/PT3qT7REf4vwLLj0+7x/SuTWWU9ScAf16fz/yeZlaTgnp6nv8A\nTt/9agDpzdR+v5EH/Gj7XF/k1zgLnof/AEGnBW/vf16fX8aAMQxDnAB69Bj/AL5/z+tR7AOox+dV\nn1WBfusPbG0H/gWf/r+tUpNZhX+IZ+Y4O3PH8PXPc9se9AGxjHbH6UVzMmvRqThgPx/2f58YrMm8\nSxrnDf3u/wDjQB342cYxjHfPXHzZx2/p0p37v/pn/wCPV5XN4t28b+/qff8Az+H0zmS+M2XOGI79\nWI/3fr/UYoA9n2xcfMOfvf8A1vT/AD6cxssHPzJ+B5rwyXxzJziT9c/Lzx27/wCfXOl8fTDOJMdc\nc/Td/X60AcT+3wsH/DD/AO2DiQbh+zP8bMDPzFv+Fd69tUev+fSv8vCZgHYFv4Y/73/PNP8AD/J5\nr/SW/bf8cy3n7G/7VtmZDi5/Z1+MkJ5xuWTwFr0fr/n6df8ANknx5px02x46dPLTHt/Sv598Yv8A\nkb5Lrvl2Kfp/tNJfof6wfs8deBfEl/8AVW5KvuyWsvxuJvHof0/xo8wdgf5f41FRX4+7L4pPytZd\nr9H/AE/W/wDoQS7x6H9P8a/0F/8Aghbqcdv/AMEw/wBnyEtgrqvxgIHf5vi94z/z/kV/nxjnpz9O\na/ud/wCCMfixtM/4Jy/AyyEu0Q6l8VDtyBxJ8UvFrt36Zb/62ev6n4QNPibGJN3eS4le9r/zHZb/\nAF5P5I/hv6fyb8G+Hn/1cXJ/vfD3FKsfvmNeiHWUH8QKmXxHCvJcdRzkY/4F+X+e/wAlN4+YDPm/\n+PDr/n0qu/xC/wCm35t0Zf8AZ/n6Y+pr+jz/AB7PsD/hLYE/5arj9Pl+h4x71A/jm3TPzj06/wCc\n8+3WvjiX4iKBzcf+PH+Z/Pv7cisS4+I0Izm5A4H8aj22/wBeRjFAH8p3/ByFq8et/t5+CLuM5RP2\navAMH0aPxx8S3x+cnT+tfz/qflA6ewPG3Py/5/rmv2r/AOC8Otx69+2X4RvI5PMCfALwXbkgkjdH\n4u8fvsZv+2mSa/FIEADJwQefX73/ANbn2/Cv5G44b/1rz2yV1mFXb3tows+u34JrdvT/AHx+jWre\nBPhe4rV8KYG+ztepV2v2dv11EZiCQPzpu9vX9B/hSMckmkr5dbK+9lc/cZbpJa2V76tt2fW/5K+u\nnQXJ9T+Zo3H1P503I9R+YoyPUfmKYtu/5X2f+X4E6nI9+9OqFXwOOQaUueegH8uvRvft/WovJNrR\nq/fz236X7P8AI1j17dL7run2sWEODj1/pmpaqI27vzjj3JXptz7+3XNSZPqfzNZyvd3tfrY6I7L8\nP66P7z+33/gi34zuNE/4J2/COwinEYHin4uTbd2Pmn+I2vPu2/RfoPWvjf8A4LS/sIat+0VDB+1R\n8G9HbVviv4Q0GHR/iZ4T02BpdU8f+C9Hjd9J8QaTbQjztS8VeELZpbKXT4/Nu9Z8N/ZorPzbzQ7W\n1ueU/wCCbPxyt/A/7Gnwy8PvOEktNU+IE7KW5H2zxxr1yrbf+2i5HfP0r7Ev/wBqtIcslzgruIIb\nBDK5Csv/AOvj9K/rLL8mwme8DZLlmNUvZ1skyuUKkLe1w9aODoyp16TkmlODvFqScZwlOnNOM2j/\nAAi4r8Rc/wDC/wCkz4i8Z8OTg8bl/iRxpSxODxDn9SzXLa2f42GNyzHRpuM3hsVGK96ElUw9eFDF\nUXHEUKUo/wAU9mJIGkt5kaMh2ADBlKSL8kkciv8Ack3q37uTH8YrRr99f2o/gT+zl8ftY1Lxnb2M\n3w1+IepSy3Op+IfCFrajS/EF9J87XniLwu/kWF5f3DsZLrVNPuNLv7qX97eS3U3T8o/Hn7KfxB8K\nSXEugaho3jnTkLGOTSZ5LDUyi/caTSdV+z/P0/d2d5de9fhOeeHfE+VVqsqeBqZphFJuGKy6Lryl\nGys6mEg5YqlUtrUSpVKcXdQrVEuY/wBPPDP6W/grx3l+CpYribD8FZ9OEI4jIuLqiy2FGu1FThhM\n/qRhkeOw7quUcLKWMwmNq0lCVXLsPNulH5mqJyCeO3f1q1qmmarodw9prGl6jpN0jsjQajZ3FlKG\nX+6tyke/A/5aR9vwrLM6f3kH1YV8LOFSjOUKkJU6kG4yhUjKE4y2tKE1GUWuzSaejR/TmGxGHx2H\npYrA4iji8LXhGpRxOEqQxFCrCVnGdKvRlOlUhK6tOE5Re6dtSfdj+LH44pRJj+IH6nP9arCXfkKw\nfPZQzE5/u7CP/r9ua0bPRtc1GVIdO0fVr6WQqI4rPS766kdv4dqwwyce2f8AGnCnUqyUadOdSTat\nGnTlOTbaVlGCbf8AXczxGKw2DhOpi8VRwtOEXKdXE1qVCnCMdZSlOrUjGMUk3JyaSSbeiZGHU9CP\np6f0q/punajrOo6fo+jafe6tq2rXtrp2l6XplrNfalqWoXkyRWdjp9jbJJc3l5eTSR29rb28csss\nrJFB6V7h4G/Zg+LHjKeD7Vpdv4S06Uq0moeJZfs8qRt95odJtvtGpTP/AM8o5Le1/wCusXNfsZ+y\nP8HvhZ+zXew+LNM02Txf8TfJaJfHfiC1h8/Ro5o/LuIfCOk/6TbaCjoxSXUI5LrWZYt8X2+Kzklt\na+54e8O+Ic7rU5YjCVcqwF4yq4vHUpUZuneLf1bDVFGtXnKLvTlywo3s5VUtJfzN4r/S38KPDbLs\nXDLc8wPHHFMYThgsh4axlHHYeOJ1jF5rnWFeIy7LaFKpZYimq2IzG1vYYCqm5R/UL/gk1+xTp/7F\n/wAN9S+IHxIjs5P2hfirptnH4liWS3uV+Hfg+OVL/T/h/Y3SPIj6lcXkcOqeMry3k8qbVLaw0uGa\nWz0OK6uv1wl+JmnxA5uVOd2AZF/h74/x4PbOa/H7TPj/AKreBfMeUbhz8zfj/h6duK7W1+KN1fKA\n0zgsvPLZ+b+n3jyQfzr+mspyvB5Ll+GyzAU/Z4bCwUIXs6lST1qVas0lz1as251JWScpNRUYpJf4\nw8d8ccQ+I/FmccZcUYtYvOM6xPtqzpxdPDYWhTjGlhMBgqMpTdHBYHDwp4bC0nOc1SpqVapVryq1\nqn6bzfGPSIM77hBj/poB/WvxO/4Lo/EvTfG37IXhHSNNZ7iWz+O/hHU7gQq0vk2tv4R8eQyTTFPu\nQxPdQR+ZJ/fT/npX0Q+s3GorzM/P+03Vj/X/AD7c7qXhuXVo5IZHMsU4ZZIZwssUkbr80ckbeYjp\n90ASR9fwrLPsr/tvJsxyn2/1X6/hp4dYj2XtvYuTTU/Zc9Nztb4VUhe+53+F3G68NvELhHjt5Z/b\nK4XznDZq8r+t/UfryoqcJUPrn1bGLDuUajcav1ataSV4NNtfxhhlblWBHsQc/ln9PzqgzAO4P99/\n/Qif6/pX9Wvjf9iX4O+PpJptd+GfhGe6uNxe/sNKg0TUizD5pG1DRP7MvHfp+8kkl9fQ14zB/wAE\nuvgDBK0n/CF395vZm23nivxXLGu5vuhYdVtzsw3+c1+AS8GOIaNeX1fM8pxFGasqlSWMw1Re9dKV\nGOGxMY37KrNLZvY/1Rwv7Rbwmx2X055twbx9lWYU3FywmBo5Bm2GleFrUcfVzrKalRKTtergMPdN\nSstl/NfvUfxY9+f51+hP/BKHVLbSP+CjH7JWqXMqpBZ/Eu4lkcsoAX/hD/E6Kzdv4lPNfr7pH/BO\nX4A6eV/4tD4auip66g+uajll+9uW81W4R+3/ACz+nofoD4b/ALKHws+HGuaZ4l8HfCXwD4e8RaNP\n9p0nXtM8J6XBrOmXDQvC1xY6p5Ml5bTeTNNGbi3uIpTE7xDiSvZyjwlznBZjl2OxGZ5Y4YPHYTFz\np0Xiqkpxw2IpVnCLnhaMVKSg0m3ZXW9mz4Pj76e3h5xJwfxZwzlPBvGyxHEXDWfZDh8VmKyHDUMP\nVzfKsVl1OvWjhs1x9V0qU8RGpUjTTnKMWopyen9Gtl8TNEudvl3kRz0+df4l/n/+sV1dt4z06YKU\nuUPCjqp+X8ee/tX49aBqnim02CS5uG27M5Z+v+d34k9a9k0Xxdr8QQySzcbc5ZtvzEdf/wBX4V++\nH+Vp+ntv4itXxiaP2wV/Xp/nANa8OtQtj96vtz6fxcfj6+tfn/pXjnVV27pHP3eu7n/Z/D17+ua9\nA07xzfkLuds/Xrn8v0FAH2nFqsR6yJjCjr/F79vzq/HqUR/5aD65I+919cCvk208a3TAAyH+91Yc\n/wCf8iuitvGFwcZZvXgt2HT/AA68HNAH02l/Gedw49G/8ebH8/0NWhext1K/8BCk+2WGCe/WvnSD\nxZOf4vfGf7w7/X5vritaLxVPjO9umOv09x/n160AVJNTl6bm/Mfd9+34fj3rPl1OQZ+Y/wDxS/3e\n2fYfWnTQcdMnr7E/w9MH2z6/hWRNFjPbG7of++iP++frmgCSbUZOcueu7q33V9en+etZU+onnL5/\nH8f1HHt71TuW2Z5Pp/F/nPU/iB7Vyt9dlA2CQR6jP+f8+1AG9camozlz19f8fQjA9ulYdzrcSZzI\nBz/6Cv8An+ZrhtU1aRA2CTyw5JH/AI7/AIDjt3Neaavr9yu4qT/E3B/76/Xb+nrQB6/eeK7WLO6V\nRgDqf7v+ef1HFcjf+P8AT4AQZ1GOuWxj5cfL/wCO47fpXzhrviW/G/Dvn5uPm67q8U8QeItWbzAk\nkuTuGPT+7n/CgD0L9sT4k2F5+y3+0hp0Uu+W9+BvxUtERDvdpLjwTrECKqrj+974r+BGdx5nrlY8\nY27ceWm09R6d+/6f2feIb/XbyOeF2MsUsckU0MgWWGWGZQkkc0b/ACOkqM0cscmIpYt8M3t+Rnir\n/gmH8NNZ8Ua5r1n4l8aaBpmq6jcaha+GdHi0VdP0aO6be+n6fdXlheXL2lu7SC1jk/49Ytlr+98u\nvyjxH4OzfiPFZXjMqVKq8NRxGGr0alWNCUFUqU6sKsZ1Gozi7SjOMffi1BpSi5On/dn0QPpC8A+D\n2Tcb5Dx1UzHAwznMcrznLMwwWAxOZU608NhquBxWX1cPhKc61CslOjiKFeSeHqw+sQqVKM6VJYn8\nLw2egOO5PGP55pfXJ9uOw/i+b36f/qr9xbX/AIJlfCO1I+06l8RtQPG4Sa3pNtub+Lctt4ej9/8A\nlp6+9dhp/wDwTl+BMJXzfDHibUMEYN94t1obv725bN7P/PWvz6HhLxVUtzTyqi7K/tMZVk76bulh\nqqW+1/8Agf1fivp4eBWGT9jS43zBrrhOHsJTTem31/OcC7ebiuvlf8CwcHPpX9bv/BLb4nJoH7EX\nwk0UzKrWt98QiY92CPtHxC8SXK5/7++p/HFfLuj/ALAH7PVqUMnwqsbsgrzqGt+Krzd/vLNrmzH/\nAGz+lfXvw9+FukfDzw9p/hPwZotr4b8N6Y1w1jo+nCVLS2a8upry6aNZ5pH33FzNNcS+ZIf3rvX3\n/AfAOa8L5rXzHMMVgKsK2Aq4SNLCzxM6iqVK+GrKUnWw1GKgo0JJu97yjpa7X8q/Sh+lLwL418CZ\nZwjwvkfFeX4rA8VYDP6uMz3DZPhsLLDYPLM4wM6NOOAzrMazrTqZlSlDmpxp8lOreakoxf3ePiy0\nuNsoIP8AdZSfvfp6j06elMl+JU7DKyE8Z+//AN8/L3/HJ65zXzlZaVeqBlm/EE/y/XP074roYdOu\nwOWb8B/td/wzj8a/WT+Dj0q++I96FJEjfxDaC3O327HP9eled6z8TtTjDbZH6/Ly3+cfL0/CmvpM\n7jBU/X5v8azbjwu0+dyZH09c9iefw/maAPyG/b6/Zm8QftI+JrL4peFtfEHjXRPDFn4Ybw1rCLDp\nGs6Xpt9qV/atY6siedpmq+dql1Hm8jlsLr9z+9sBHLLL+Qw/ZV/aGDvHJ8LddgKPKjPc3eh28ZZZ\nHRmWSfVYkkT5f9ZH+6l7+/8AWfeeAEnzmAHJbqq/xfrgYx045xXK3nwmtrjcTbhuo+6uPx+n9Pbn\n8+zzw3yDPMwnmVSpjsHiK8nPFfU61JQxFRqK9pKOIo4hU5+773suSE1bmg5XlL+r/DL6Ynip4Y8K\n4ThDBYXhniDKcrpxoZK8+y/GPE5XhIylL6nCtlOYZXLFYdSnKUPrirYiF3TWIdBQpQ/ljT9lH47M\nf3vhG1swf+frX9E3Dp95YLy49/0qwP2S/i/nNxB4ctR8u7fq00pHX5dttYXHv/y07e2T/Tdc/A+0\nkz/oygEYPyLn/gOfpz9MVlP8ArF2ybVfbMYP9K4afhLwtB3lVzaq7W/eYugr7b+zwlN9Lb/ifTYv\n6efjdiOb2GB4DwF7pPDZDmdScb9njM/xUe28Nbelv5sov2R/iM3+v1Tw9CDknyxq05HP/Xhb/wD6\nq2bf9j7xZIQJ/ElmvKnFtot7Kf8AgLTXlv8An2/LH9GY/Z9sOT9kTrk/u1555+bpx3q3H8AbJcH7\nGv8A3yv+ev4+vpXfS8MeD6dubAV6zVtamPxqbtbd0q1Lsr2sfL4v6an0gsTzey4pyrAp7LCcLcPy\n5e3K8bgMY9PNvdn89en/ALFuoTbftPijUQPlLC30S3j+Vv7rTX0nHy5zg+ld1pv7DGlS7Td6/wCK\nJs7dywppNsD/AH/v2dx0648yv3wg+BVopGbNRjbj92v93P8Aj/Kty2+CltHgi0U8ddir97lf8j9c\nCu6n4fcHU7cuR0JW/wCflfGVfm1VxM02+ump81ivpYfSFxiaqeJeZ00+mEyrhvA29JYPJaE18pW7\ndT8ONI/YM8Cts+1P4uufXdrFrCH/ANpvs2lR49fp1616dpH7BnwnUoZvDOq3pGzP2vxHrgVv725L\na5s//wBdfs5a/CK3jIzagYx/Dnv/AJ/Hrxiugt/hfDHgC2HPfb/s/wCev9ee6lwdwrSty8P5S7W1\nqYKjW2/6/Rqfn8z5nF/SE8ccbf23ivx1BPdYTiLMMAn5WwFbDJL0sfnd4F+DFt4F8PWPhbwvYvpe\nhWBuGs7BJry6WGS8upry4bzrya4uX8y5mmk/eSS/f/Cu4/4Vtf3I/eeZyPTkZU/5GPevvKH4dxIc\nCBf++T/nP9PStKPwJGo/1I+m1R/9f88V9BSpUqFKnQoU4UaNGEKdKlShGnTpU4RUIU6dOCjCEIRi\nowjGKUUkj8nx2OxuZ4zF5jmWLxWYZhj8TWxmOx+NxFXFYzG4vE1JVcRisXia851cRia9WUqlavUl\nKpVnJznKUm2fnnL8GpZ92Vckjrj+H+L5sd+2KoSfABJslomOep2H+Lpz/n3r9KF8EIMHyhjP93Hv\nhc/n/niyvguPPESn/gPb+X860OU/L65/Zm06/iMd7YQXcR4MV1bx3ERRl+YNHNHIg/i6/hxWPD+x\n54Lik8yLwj4ejdjnemhaWrFmbhy/2Yg/59Of1iTwXFn/AFQ7/wAP/oS+3bpzx61cj8Fxcfucd+E6\n9v1H/wBb1rGph6FWSlVoUako/DKpThOUenuylFtLyTSO/C5rmeBpToYLMcdhKNR3qUcLjMRh6VS1\nv4lOlUhCe2vMm3re5+W1n+y1otvgQaRZQAdBb2NvEB3H3Uj+p/znrrH9nK2hwFttuOOEwP8Ad27P\nr/nr+lkPguH/AJ4qTnH3e654x/nmtaHwZCAP3I4/2VH3h8rfpz79s1rGMYJKMYxS25UkunZI5Kta\nrXlzV6tStJ6uVWcqjbve7cm9dF9x+den/s/20JBFr0wxJXj/AA/u+mMdq7jT/gqkO3Fvj7ufl6ev\n8m/TPWvvO38IQjjyh14+VcD+6fp/OteDwnCMHyVz8v8ACv3TwPXr+XtnozM+LtO+FJg24gPG042s\nPp0/X8K7mw+HksWMQnjbjhvy6Yr6vh8MRKARCOMfw9Oy4z/nr61qxeHo1/5ZD8l9P72f9r9KAPnC\ny8HTxBf3RH3eo/2vr/L8OTXVWnhidBgoR/wH0549cf0P1r3SPRYxhRGM9zjp155zj/62KuppMYO3\nyx7cHtQB5BbeHnGN0f8Adx93HzcfyZvp6Hmugt/D64GUH/fP8/rz6dcV6XHpac/IM45yOcbv4fxz\n9Oaux6co6Lx9O/8APuR/ngA4S38OQ8ZiB/4D/wB9dfTDZrZg8OQDGY1/iH3f4u354X3FdlFYdPl/\nuj/vkfK3p/n2rSissfw4/XH+e3vmgDmrbQIBjEY574B6NW/a6LCuMIOPZePl7/8AfXp/StuG1P8A\nd5/z/kevPQcVqwW3A4Pp7em7+v8AkUAZ9tpaLtwB+X4Yx6c/061u29kFxtAz6fN979P5f0NWIrVu\nOPbo33eP85rSitn6gH19fvd+Op/D8eaAJLePbj24/Bfy+n51tQMFx77ccYHT7x/75/w6cVIrV/Q+\nh4H3fU/5x1699GK2c++e/wD7L/n260AacE2COT1/wP5/55IFa8VxleDjnp83Hb+lY8Vs3uOeuMZ/\nu7a0Etnx1/w/D0680AdrcXKjJ/Dpj730/wA/WsC6uRzj06ZXr/lqSe4yOvtn8/4ef/11iXEuc4Oc\nbuc5/T/P9aAKV7c5zwTz/P8AofTtj6Vx1+5bdjPtg9j+X1rpbgM2cfX/AD/49/nFYs9vnqP8/wAP\nb+uPcZoA891CAuW6nIYHjru9P6Vwuo6U0ueCM5/z3yOv/wCuvZZ7FTnjH3s55+bv+P8AnNY8+moe\ngGP6f1/i4oA+eNR8MmXJKk/e5IY/wn735qfyxzXFX3glZCf3efTjP5/T07/SvqWfSUOcqOvp6++f\n97/9YrIm0WLn5R9c/wB1uvH+c8UAfI918PlfP7gE/wC7+X59/wDOcC4+G8ZP+p49hj/Pf8Prz9hT\naLDzlR+X97+grKm0aIA4UfiP7v8As/5/KgD5Gb4axdocfUCmj4exoceSDjj7v+ef84r6qk0ePP3B\n6cDtz83r9KoSaSgH3OM44HBz/n9aAPmtfBCJ92FR9FH+FW4/Cgj/AOWRyOemP/Hu/wDhXv76UnTZ\n0IPIGPx496rtpcYPCjtyQv8An+9z+nNAHi8fh0jjYOR6fT7v44q2uglf+Wf04z/hXrf9mp/dX8hT\nTpsZ/h/IEfyoA8tGinH+r/Rh/j/On/2OP+eZ/wC+R/hXp509O6Y/4Co/+tTTYJ2UA/RaAPNP7EQj\n5k/DC/oacNBg7qPr8w/Er3/D6CvRTYrt6D/vkD6fN/n8aZ9iH90fmP8ACgDz/wD4R63PSMH8P/r0\nf8I9b/8APMf98135sxn7o/In9aYbPHUfotAHDjQYOB5QJ+mM1KugW4/5Zrn0AU/+PD09ga7E2oA6\nE/QLUZgK84x6fL/UfWgDmk0SDPMYHvjH16Y/Kp00eAfwgfgv5r+fp+nNbhjYdv6fzxTCH7D8wf6U\nAZg0yAdFX8jUo0+AY+UdiflXBP5VdxJ/dH5Gm4l9D+QoAhSxgPGBwB2X9f0/zipPsFv/AHR+X/16\nX95/nbUi7+mfyzn/AAoARbCAhSFGPm/w/n9f6VMunQ9Qo/ED+gzSpu759vXv+NWowzYyOh+vy+rc\nf/X4oAZHp0RI4Gc9dvT/AD39PyrQi0uP5cKOvHH1+b/0L/61SRbuOP8A9n1/z6fWtSEHjjH3f/He\nv+fyoAgi0qM/wjOT0C8cfeP44xx/9bRi0hT0XofRf5dfr9cc1ct+g+o/ma2Lc9Bjr39PmoAzYtIG\nB8n93/vn39+P881oxaT0wn5dcN2/H05rYhYcYA/r/tLz2/8Ar1qRbcDj2PGPvfd/P/I9QDATShz8\npwD6dT/tfh/nirK6UMAlfwxx7V0kaKccd8Hj+X4N2z9O9XUjTngdemPagDkhpeTwg+uOn6VMNJH9\n0k/19a7FIl44HPb6/wCf885tpAnTA4/z8tAHFppRH8PboB0qymlHGNv6cD9K7WO3jwo29T6c9/mb\n1+v+NXY7WPg7QOcdON3HsP8APagDjI9KPp1HYdv738+P68VoRaT329lHvt/+t9K7KK0j4yo68+/P\n4cf5xWnDZRnGR/eHT+Ld8v4+tAHGw6QePk/yudq9/Q1qw6QePlPp0x7/AOfTvnrXYw2UfHH93t/d\n6/rWrDZp6e3/AH038sfn0oA4+HSW4+Xpj0/iz79v1rUh0kjHyj+HqP7v3V6f/WFdjDZqcYA7+vuO\nfr+FaUVkv93oeeM/169cfhQBxseldPlzzyeBlv4f/Za0I9KA/h6ck443f/q/+v79hHZL6d+vofr+\nH+c1cSzX0+ox169OKAOSi0wDHHPXGOu7/P48n1q8mm/KPl9e3ua6lLRfTjjHr+H+QPfrU62oHb/9\nX14z+tAHjcsoOefb1/Pr1H9Kz5X91HHPsv8AdHf+L3pJHPPXjJ+n+7z+FUJZD9Rz17Lz2H+etACS\nuOcfjzzt/hX/AArNlcDPQf5+Uds/596fLKQPTHP9B61mTS9ckj73b/DP+fWgBsr/AJ8592/iYj3/\nAMKzZZQPw6fj/ngfnilmlPYnHXPrt/X0/wAay5nY5wOv/wCv5R7en+SAJNOo7+3r/nP/AOrPWsqa\n4649P9n+vrnHt1qSUsc84547f7zfy6D6d6oSox/8d7/+Ot6d/wCh6UAVpZ15z+XP5/j8vas6WYHt\ng9ev6t7+/wDLNW5IWOeD1yeOn689/pVSS3cg8Hk9vVfUf/r9vcAoOwP0Xdz+Wf5CqzEE8f8A6/f9\navtaN3H4d/6VEbR+wP4//WoAzCOx5wf5VGY1P/1wD/hWt9jfPK5/D/8AXR9jb+7/AC/woAxTCD/C\nD756fn/hTTABzjv6Kf0/yK2/sb/3R/3zR9ibuv5cUAYBgJ7fow/TtTfszfh7gn+ddILFiAdh59lp\nfsDf3SPwX+maAOXNtg9Px6f+O/8A1x+PeM25Ixj/ANC/+tXXfYG/ug/Uf4YpwsAeq4/X+lAHICzJ\n/h/IA/0FH2InqpH0/wAj+tdmunEHIUflkGpxpucYXrjt60AcT9gJHTr7YP8AIUn9mE87CffBNegp\npeT93ge3Hbj/AD/+q0mlbuqZ9B7+v+f5UAeaHSWPVP8A0H+uab/Y5/un9K9WXSB12c9SMKB/hirC\n6MD/AA55xnCj/P6f1oA8i/sQkD5D7ZGePy/rQNCbug/Jf/r17Kuhg/w8D0Vh/Op10Af3Mj3H9eR+\ndAHin9gsRwgOD1A4/wA/5IpP+Eff+5+h/wAa9zXw+McIMn1H/s3+cfXNTDw8p/g/TP8ALNAHg40F\n1/g47jB/x/lUyaLIuPkbg+mfl7+le7L4dX/nmCOv3cmpB4dXp5ZA/wB3/CgDw9NIlXjYcfVv8/15\nq5Hpkwx8pHfp/wB89O3t/LmvZv8AhHB/cH6Uv/CN452Y98YoA8njsZRt+VupHTPH8Tc1fitHHbGC\nuTj/AL5/x/r6emDQAOqD6jr/AJ+mKf8A2EP7v6LQBwMcDjA49vvdG/y307561eSNh1U+g/zz7da7\nL+xP9n/P/fVP/sc/3D/47QBzMYbng9j9Pyq9G3XrztPT8v8A0LtWz/ZZA+4cD2NL/ZzehoAoxv06\nZHb0/wB3/P4VaRh17Hj3H+f/ANXvMLFh2/TH8sU8WbDqPpgCgB6NwBnB7e5J/h9f/rVbSQZ+vUf/\nAF6qi1ZfUf8AfXb+92z+lSCFx6/T5tvfnH4+v9MAGpFKO5+v9PTH+e/TThnHqvX/AD8vpnp/ga59\nVcHvkHrjbj/P51bjLAjt3/8A1e2f888gHVQ3I45P+fvdu/8AnFa0FyOOfw9vf/PPJ9646ORxjv6D\n/Z/hzjpjn2/WtGKZhjr1x1+n+c/z7gHbw3A4+bPP/oP3W6HrzjP/ANc60My8cj8/X8e+fw9DXDQ3\nLDHJ9Oxw35ep/wAela8F0fX/AD/n6dhwMZAO0ikU45HHP689e/0rRjZT26nP/wBjn/Pt155GG6PH\nP6/5/HuOnArXhus456/5+h6/4YHNAHRrjjHAz1/HrzUwVR2/PmsuKfI+9yQv93qc1dSYY9u3X/Dp\n/XNAHgz2/wBfy5/L8/X8KpS25weO7dOf1Pf0/rzjsDZkZ4/P/wCJqs9l7fpz/wABXvnH+NAHDy2p\n54/z/tZ69cfh71nS2ZPY/qN2O5/z+Fd+9hnPy4HP1P48c/1qsdOySdvWgDzmSxPPXjr16/5P+Riq\nUmnMcHB6t+B6/wAu9emvpXOdowfzyF+b+vPvUJ0oHouPw4/KgDy1tNfn5T36AY/z9fzqu2mPk/Lk\ne3f8BXq50cdlB/Aj/P6U3+xvb/P/AHzQB5KdJY/wn6bTj9SaT+yD/dP/AHya9cGiZ4KY554/Ld/9\nb1zjin/2J/s/5/76oA8g/sU/3B/3yP8AGl/sQnogP/AR/jXr/wDYgH8OfpkfzNKNFGPuD8l5+nB/\nnQB5F/Yp/un8j/8AE07+xD/cH5mvXf7FA6Lj8v6KKX+xx/dH60AeRf2J/s/5/wC+qP7E/wBn/P8A\n31Xr39jr/d/Q/wCNH9jr/d/Q/wCNAHkP9if7P+f++qcNDPZM84+7n/P6H2r1v+xx/dH60f2OP7o/\nWgDyX+xD/wA8j+Q/wpRorY+4R6cY/TB/XFes/wBjj+6P1oGkf7AGPX/Jz+P4UAeVLo2MfJ+Q/wDZ\nv8+1TLpH+xg9uMmvUf7IH90f98inf2SPQ/p/hQB5qmkei9ew79+W5yP5cVaTSiCPlx2xj/OK9DXS\nxkDbgf59anGlgdF/HHNAHAJpfQFfc8f5+maux6X329eB/n613CaYMZ289+PfH9KnTT+xH0J/xP8A\nM/n0oA4tNL6Db9SB/n6Zq4mlgjJX6cMD/n/OfTsUsOny8+uOD/8Ar/yasrYgEHb+YyKAOQXSlyPl\n/HH+RVlNKBPCgd84zXXLZjgY/D5frjNTraj+7wP898fT+nSgDkl0kHjaPxAyf05qUaUoGNnT2K+v\nbtXXrbDAyP0z/n8zU62y+n4df8/hQBxg0gEZ2D9ad/Y6/wB39D/jXai2HZcZ/A/+hVKLYHt+Qz/7\nKKAOF/sdf7v6H/GkOjDsP0/+sf513n2Ueh/75H+FIbQHsT+GP5CgDz86R1GAfw4P+fpUbaUBwUH4\nD/Jr0E2YH8P6Hj65xURslPJHP4f40AeftpWOQv1qI6YCMFf0r0E2Q57D6f1x61EbIdQo9ef8B/n2\noA88/s3/AGf0pjafjgLz346V6AbEddn6AAfzqFrEZzt/If3f9rHv7/jxQBwP9nH0P61F9hb0z/31\n/XFd61ip42jH0zn9Mf5xURsQOi8+4H8iaAOIFif7p9yP8+vvTxZkfwn8h/Qiuw+xf52//WpDZexP\n0GP8KAOVW2/z2P4nH4cmrKW5GOPzHA+n9f0rofsR9D+S04WeOg/HDZoAxo4mGOOnb/a/2m/Dv/8A\nWq9GpGP853dNv/1v6mr4tRnp+n8+Bj86nS3x2+vf/Ptk0ARRZH4BfrkVpRP/ACz/AMBY/d7/AE71\nEkHQ/p+fRf5/meatLFj+vqfp9fw9xxQBeikPuPu8/h8p/wD19Bz0rRSUkcknjOCeD/tD+X+RWYik\nHHc9vTHv+NXIwfpgYyPw9RQBQNoO4we/3Tk/5/OojZDsAP1/pXR+T9B75PHvTTAM9Cfc4/rQBzRs\nB/dJ98f41EbHJ6Ad/wDJrqfIH93/ANBpfs49v0/+JoA5P+zh6D9KU6eDyQP0rq/sg9D+Z/wp/wBk\nHp+i/wBDQByQ07kZXIHY1INPX+7j8P8ACuq+yj+6P0/+Kp/2Zf8AJP8AhQByn9nD0H6Uf2cPQV1g\ntQB93j/H/a2/ril+y+36f/Y0Acn/AGb/ALP6U7+zl/55/qa6v7MP7g/I/wCFJ9nUdQAfQg8j+90/\nz6UAcr/Zy/8APP8AU0f2cv8Azz6f59Ofxrq/IA4GMDpywpPI9T9f/wBWP60AcodOHaPH5mm/2cPQ\nfpXVGD2/QH+VMMAHb8ww/Xpn2/woA5f+z19P0P8AhSfYB/dP5D/GunMP/wCoHr+Y/rUZhH06j7oP\nP6f1/HsAc2bED+D8+P8AGk+xD+6PzH+FdH5K/wCc/wCNHkr/AJz/AI0Ac59iH90fmP8ACj7EP7o/\nMf4V0Rh+h/E03ySOx/8AHT/MUAc/9iH90fmP8KcLMDPAH02n9a3fK9m/L/61Hlezfl/9agDD+yD/\nACFqUWvfHX2P+BH5Vr+V7N+X/wBalEYP8J/HcP50AZYtwOx49v8A6+D+H1qQQDPTHv8ALxWj5X+z\n+v8A9eniPHoPoP8A9VAGeIO+P0JH61IIPQY/FRV7YPU/p/hShB6E/wCfagCmIR6fluJ/LvUgh9j+\ng7+meD+dWwp6BT7cU9U7n8B/j/n60AVhHj0H0H/6qdsX3P8An2xVnavp/OnUAVvLH90/rR5Y/un9\natAE9BTth9R+v+FAFLywOoP48f4Umwep/T/Cr2w+o/X/AAo2N2GfpQBnGIe35Y/UUwwk9v8A0HH5\nVpEEdRTcD0H5CgDLMHt+hH8qY1uPqf8AgP8AOtXYvvTTHn0P1H/66AMdrbjp3+v+P8hURt/QdfZf\n0/8Ar/lWyYvYj6c/40wxev4ZFAGKbf8A2c/UN/8AXphtwOo57j5eK2zCM8YP5j9KaYfT9D/iKAMT\n7P7D8l/xpRAQcgD8l/xrYMGe357T/hR5OOMHj0HH4cUAZHkn3/MU8QdOOPX5j/8ArrU8r2b8v/rU\n4Q+34k/4f4UAZwh5B/8ArDrn7vb8v0qZYfY/kQNvq2R+f8/W6Iseg/U/5/GpBHn1P8v/AK350AVR\nH2/Qf/qqwsfHPHsMVMIz7D/PtUoQdlz+GaALNFFFABRRRQBKqLgcdh3Pp9aftXB4HVew96KKHu/+\n3f8A0iIBRRRQAU5QCcH+8f8A0FaKKAEP9B+oFJRRQAq9R9R/OkwDnIB4/qKKKAIWGCQOP/1Ug5IH\nbI4oopR2XovyAjYDHTru/VTn88VFRRTACAeoB+tQuADx6f40UUuq9H+cQG0UUUwCiiigAooooAKK\nKKAHKMkA8/8A6qlQD5eOuM/jiiik9vmvzQC0UUUwCpVAwDjn/wCv/n+VFFAD6KKKUdl6L8gCiiim\nAUUUUAIVU9h/L+VQnr+C/wAhRRQAlFFFACYHoPyFGB6D8hRRQAmxfT9T/jRsX0/U/wCNFFZRbb1b\n6df70QDYvp+p/wAaNi+n6n/Giind3jq9118ogLgeg/IUtFFaAOUAnn0/wqaiih7v/t3/ANIiB//Z\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_--\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/retr123.txt",
    "content": "+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: multipart/alternative;\n\tboundary=\"_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\"\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/plain; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n   \t\t \t   \t\t  =\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n<html>\n<head>\n<style><!--\n..hmmessage P\n{\nmargin:0px=3B\npadding:0px\n}\nbody.hmmessage\n{\nfont-size: 12pt=3B\nfont-family:Calibri\n}\n--></style></head>\n<body class=3D'hmmessage'><div dir=3D'ltr'><div id=3D\"inlineImage0\" style=\n=3D\"display: inline-block\"><script type=3D\"jsv#2398_\"></script><span conten=\nteditable=3D\"true\">&nbsp=3B</span><div style=3D\"display: inline-block\" unse=\nlectable=3D\"on\" contenteditable=3D\"false\" class=3D\"inlineImage\" initheight=\n=3D\"323\" initwidth=3D\"430\"><img src=3D\"cid:inlineImage0\" height=3D\"323\" wid=\nth=3D\"430\"></div><span contenteditable=3D\"true\">&nbsp=3B</span><script type=\n=3D\"jsv/2398_\"></script></div> \t\t \t   \t\t  </div></body>\n</html>=\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_--\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: image/jpeg\nContent-Transfer-Encoding: base64\nContent-ID: <inlineImage0>\nContent-Disposition: attachment; filename=\"test.jpg\"\n\n/9j/4AAQSkZJRgABAQAAAQABAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\nSlBFRyB2NjIpLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAUMB\nrgMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQD\nBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp\nKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma\noqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/\nxAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQID\nEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF\nRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqy\ns7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/\nAP6tPL9/0/8Ar0eX7/p/9erflj+6f1o8sf3T+tAFTy/f9P8A69Hl+/6f/Xq35Y/un9aNgzjac4z/\nABdKAKnl+/6f/Xo8v3/T/wCvVvyx/dP60eWP7p/WgCp5fv8Ap/8AXo8v3/T/AOvVvyx/dP60bBx8\np56fe+tAFTy/f9P/AK9Hl+/6f/Xq35Y/un9aPLH90/rQBU8v3/T/AOvS7B6n9P8ACrXlj+6f1o8s\nf3T+tAFTy/f9P/r0eX7/AKf/AF6t+WP7p/Wjyx/dP60AVPL9/wBP/r0eX7/p/wDXq35Y/un9aPLH\n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\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_--\n.\n+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: multipart/alternative;\n\tboundary=\"_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\"\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/plain; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n   \t\t \t   \t\t  =\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n<html>\n<head>\n<style><!--\n..hmmessage P\n{\nmargin:0px=3B\npadding:0px\n}\nbody.hmmessage\n{\nfont-size: 12pt=3B\nfont-family:Calibri\n}\n--></style></head>\n<body class=3D'hmmessage'><div dir=3D'ltr'><div id=3D\"inlineImage0\" style=\n=3D\"display: inline-block\"><script type=3D\"jsv#2398_\"></script><span conten=\nteditable=3D\"true\">&nbsp=3B</span><div style=3D\"display: inline-block\" unse=\nlectable=3D\"on\" contenteditable=3D\"false\" class=3D\"inlineImage\" initheight=\n=3D\"323\" initwidth=3D\"430\"><img src=3D\"cid:inlineImage0\" height=3D\"323\" wid=\nth=3D\"430\"></div><span contenteditable=3D\"true\">&nbsp=3B</span><script type=\n=3D\"jsv/2398_\"></script></div> \t\t \t   \t\t  </div></body>\n</html>=\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_--\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: image/jpeg\nContent-Transfer-Encoding: base64\nContent-ID: <inlineImage0>\nContent-Disposition: attachment; filename=\"test.jpg\"\n\n/9j/4AAQSkZJRgABAQAAAQABAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\nSlBFRyB2NjIpLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAUMB\nrgMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQD\nBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp\nKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma\noqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/\nxAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQID\nEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF\nRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqy\ns7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/\nAP6tPL9/0/8Ar0eX7/p/9erflj+6f1o8sf3T+tAFTy/f9P8A69Hl+/6f/Xq35Y/un9aNgzjac4z/\nABdKAKnl+/6f/Xo8v3/T/wCvVvyx/dP60eWP7p/WgCp5fv8Ap/8AXo8v3/T/AOvVvyx/dP60bBx8\np56fe+tAFTy/f9P/AK9Hl+/6f/Xq35Y/un9aPLH90/rQBU8v3/T/AOvS7B6n9P8ACrXlj+6f1o8s\nf3T+tAFTy/f9P/r0eX7/AKf/AF6t+WP7p/Wjyx/dP60AVPL9/wBP/r0eX7/p/wDXq35Y/un9aPLH\n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\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_--\n.\n+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: multipart/alternative;\n\tboundary=\"_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\"\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/plain; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n   \t\t \t   \t\t  =\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_\nContent-Type: text/html; charset=\"iso-8859-1\"\nContent-Transfer-Encoding: quoted-printable\n\n<html>\n<head>\n<style><!--\n..hmmessage P\n{\nmargin:0px=3B\npadding:0px\n}\nbody.hmmessage\n{\nfont-size: 12pt=3B\nfont-family:Calibri\n}\n--></style></head>\n<body class=3D'hmmessage'><div dir=3D'ltr'><div id=3D\"inlineImage0\" style=\n=3D\"display: inline-block\"><script type=3D\"jsv#2398_\"></script><span conten=\nteditable=3D\"true\">&nbsp=3B</span><div style=3D\"display: inline-block\" unse=\nlectable=3D\"on\" contenteditable=3D\"false\" class=3D\"inlineImage\" initheight=\n=3D\"323\" initwidth=3D\"430\"><img src=3D\"cid:inlineImage0\" height=3D\"323\" wid=\nth=3D\"430\"></div><span contenteditable=3D\"true\">&nbsp=3B</span><script type=\n=3D\"jsv/2398_\"></script></div> \t\t \t   \t\t  </div></body>\n</html>=\n\n--_9f38b0f1-f254-4b18-90a2-eb68a8f47b9f_--\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\nContent-Type: image/jpeg\nContent-Transfer-Encoding: base64\nContent-ID: <inlineImage0>\nContent-Disposition: attachment; filename=\"test.jpg\"\n\n/9j/4AAQSkZJRgABAQAAAQABAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\nSlBFRyB2NjIpLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAUMB\nrgMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQD\nBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp\nKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma\noqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/\nxAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQID\nEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RF\nRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqy\ns7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/\nAP6tPL9/0/8Ar0eX7/p/9erflj+6f1o8sf3T+tAFTy/f9P8A69Hl+/6f/Xq35Y/un9aNgzjac4z/\nABdKAKnl+/6f/Xo8v3/T/wCvVvyx/dP60eWP7p/WgCp5fv8Ap/8AXo8v3/T/AOvVvyx/dP60bBx8\np56fe+tAFTy/f9P/AK9Hl+/6f/Xq35Y/un9aPLH90/rQBU8v3/T/AOvS7B6n9P8ACrXlj+6f1o8s\nf3T+tAFTy/f9P/r0eX7/AKf/AF6t+WP7p/Wjyx/dP60AVPL9/wBP/r0eX7/p/wDXq35Y/un9aPLH\n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\n\n--_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_--\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/rset.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/stat.txt",
    "content": "+OK 3 221409\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/top.txt",
    "content": "+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/top123.txt",
    "content": "+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n.\n+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n.\n+OK message follows\nDelivered-To: xxx@gmail.com\nReceived: by 10.224.135.8 with SMTP id l8csp316922qat;\n        Thu, 19 Jun 2014 03:12:05 -0700 (PDT)\nX-Received: by 10.180.37.230 with SMTP id b6mr5037071wik.47.1403172724974;\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReturn-Path: <zzz@hotmail.co.uk>\nReceived: from DUB004-OMC2S17.hotmail.com (dub004-omc2s17.hotmail.com. [157.55.1.156])\n        by mx.google.com with ESMTPS id ck8si6631066wjc.8.2014.06.19.03.12.04\n        for <xxx@gmail.com>\n        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n        Thu, 19 Jun 2014 03:12:04 -0700 (PDT)\nReceived-SPF: pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) client-ip=157.55.1.156;\nAuthentication-Results: mx.google.com;\n       spf=pass (google.com: domain of zzz@hotmail.co.uk designates 157.55.1.156 as permitted sender) smtp.mail=zzz@hotmail.co.uk\nReceived: from DUB130-W49 ([157.55.1.138]) by DUB004-OMC2S17.hotmail.com with Microsoft SMTPSVC(7.5.7601.22712);\n\t Thu, 19 Jun 2014 03:12:04 -0700\nX-TMN: [eIqtHBBo3vPb6o8FX4BW2v0KD9eifBv7]\nX-Originating-Email: [zzz@hotmail.co.uk]\nMessage-ID: <DUB130-W498FF8C5FA398C47A98E5CDD130@phx.gbl>\nReturn-Path: zzz@hotmail.co.uk\nContent-Type: multipart/related;\n\tboundary=\"_c5dd68bd-e45d-4c27-8251-24cac1df3fa9_\"\nFrom: Joe Blogs <zzz@hotmail.co.uk>\nTo: \"xxx@gmail.com\" <xxx@gmail.com>\nSubject: Test inline image\nDate: Thu, 19 Jun 2014 10:12:04 +0000\nImportance: Normal\nMIME-Version: 1.0\nX-OriginalArrivalTime: 19 Jun 2014 10:12:04.0278 (UTC) FILETIME=[EB229D60:01CF8BA6]\n\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl-error1.txt",
    "content": "+OK UIDs follow\n1 101\n2 102\n3\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl-error2.txt",
    "content": "+OK UIDs follow\n1 101\n2 102\n4 103\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl.txt",
    "content": "+OK UIDs follow\n1 101\n2 102\n3 103\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl1-error1.txt",
    "content": "+OK 1\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl1-error2.txt",
    "content": "+OK 99 101\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl1.txt",
    "content": "+OK 1 101\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl2.txt",
    "content": "+OK 2 102\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/gmail/uidl3.txt",
    "content": "+OK 3 103\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/auth.txt",
    "content": "+OK Welcome.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/capa1.txt",
    "content": "+OK Capability list follows\nUSER\nRESP-CODES\nEXPIRE 0\nLOGIN-DELAY 300\nTOP\nUIDL\nUTF8 USER\nLANG\nSASL PLAIN XOAUTH2\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/capa2.txt",
    "content": "+OK Capability list follows\nUSER\nRESP-CODES\nPIPELINING\nEXPIRE 0\nLOGIN-DELAY 300\nTOP\nUIDL\nLANG\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/getlang.txt",
    "content": "+OK Language listing follows:\nen English\nen-boont English Boontling dialect\nde Deutsch\nit Italiano\nes Espanol\nsv Svenska\n.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/greeting.txt",
    "content": "+OK POP3 server ready <apop-token@example.com>\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/quit.txt",
    "content": "+OK Farewell.\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/setlang.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/stat.txt",
    "content": "+OK 3 221409\n"
  },
  {
    "path": "UnitTests/Net/Pop3/Resources/lang/utf8.txt",
    "content": "+OK\n"
  },
  {
    "path": "UnitTests/Net/Proxy/HttpProxyClientTests.cs",
    "content": "﻿//\n// HttpProxyClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\n\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy {\n\t[TestFixture]\n\tpublic class HttpProxyClientTests\n\t{\n\t\tconst int ConnectTimeout = 5 * 1000; // 5 seconds\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar proxy = new HttpProxyClient (\"http.proxy.com\", 0, credentials);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new HttpProxyClient (null, 1080));\n\t\t\tAssert.Throws<ArgumentException> (() => new HttpProxyClient (string.Empty, 1080));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new HttpProxyClient (proxy.ProxyHost, -1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new HttpProxyClient (proxy.ProxyHost, 1080, null));\n\n\t\t\tAssert.That (proxy.ProxyPort, Is.EqualTo (1080));\n\t\t\tAssert.That (proxy.ProxyHost, Is.EqualTo (\"http.proxy.com\"));\n\t\t\tAssert.That (proxy.ProxyCredentials, Is.EqualTo (credentials));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => proxy.Connect (null, 80));\n\t\t\tAssert.Throws<ArgumentNullException> (() => proxy.Connect (null, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await proxy.ConnectAsync (null, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await proxy.ConnectAsync (null, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentException> (() => proxy.Connect (string.Empty, 80));\n\t\t\tAssert.Throws<ArgumentException> (() => proxy.Connect (string.Empty, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await proxy.ConnectAsync (string.Empty, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await proxy.ConnectAsync (string.Empty, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 0, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 0));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 0, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 80, -ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 80, -ConnectTimeout));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMethodNotAllowed ()\n\t\t{\n\t\t\tvar proxy = new HttpProxyClient (\"www.google.com\", 80);\n\t\t\tStream stream = null;\n\n\t\t\ttry {\n\t\t\t\tstream = proxy.Connect (\"www.google.com\", 80);\n\t\t\t\tAssert.Fail (\"www.google.com is not an HTTP proxy, so CONNECT should have failed.\");\n\t\t\t} catch (ProxyProtocolException ex) {\n\t\t\t\t// This is expected since this is not an HTTP proxy\n\t\t\t\tvar response = ex.Message.Substring (0, ex.Message.IndexOf (\"\\r\\n\"));\n\t\t\t\tAssert.That (response, Is.EqualTo (\"Failed to connect to www.google.com:80: HTTP/1.1 405 Method Not Allowed\"));\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t} finally {\n\t\t\t\tstream?.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMethodNotAllowedAsync ()\n\t\t{\n\t\t\tvar proxy = new HttpProxyClient (\"www.google.com\", 80);\n\t\t\tStream stream = null;\n\n\t\t\ttry {\n\t\t\t\tstream = await proxy.ConnectAsync (\"www.google.com\", 80);\n\t\t\t\tAssert.Fail (\"www.google.com is not an HTTP proxy, so CONNECT should have failed.\");\n\t\t\t} catch (ProxyProtocolException ex) {\n\t\t\t\t// This is expected since this is not an HTTP proxy\n\t\t\t\tvar response = ex.Message.Substring (0, ex.Message.IndexOf (\"\\r\\n\"));\n\t\t\t\tAssert.That (response, Is.EqualTo (\"Failed to connect to www.google.com:80: HTTP/1.1 405 Method Not Allowed\"));\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t} finally {\n\t\t\t\tstream?.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectWithCredentials ()\n\t\t{\n\t\t\tusing (var server = new HttpProxyListener ()) {\n\t\t\t\tserver.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar proxy = new HttpProxyClient (server.IPAddress.ToString (), server.Port, credentials);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = proxy.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectWithCredentialsAsync ()\n\t\t{\n\t\t\tusing (var server = new HttpProxyListener ()) {\n\t\t\t\tserver.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar proxy = new HttpProxyClient (server.IPAddress.ToString (), server.Port, credentials);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await proxy.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/HttpProxyListener.cs",
    "content": "﻿//\n// Socks5ProxyListener.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\nusing System.Globalization;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MailKit.Net;\n\nusing SslStream = System.Net.Security.SslStream;\n\nnamespace UnitTests.Net.Proxy {\n\tclass HttpProxyListener : ProxyListener\n\t{\n\t\treadonly X509Certificate2 certificate;\n\t\treadonly bool https;\n\n\t\tpublic HttpProxyListener ()\n\t\t{\n\t\t}\n\n\t\tpublic HttpProxyListener (X509Certificate2 certificate)\n\t\t{\n\t\t\tthis.certificate = certificate;\n\t\t\thttps = true;\n\t\t}\n\n\t\tprotected override async Task<Stream> GetClientStreamAsync (Socket socket, CancellationToken cancellationToken)\n\t\t{\n\t\t\tvar network = await base.GetClientStreamAsync (socket, cancellationToken).ConfigureAwait (false);\n\n\t\t\tif (!https)\n\t\t\t\treturn network;\n\n\t\t\tvar ssl = new SslStream (network, false);\n\n\t\t\tawait ssl.AuthenticateAsServerAsync (certificate, false, false).ConfigureAwait (false);\n\n\t\t\treturn ssl;\n\t\t}\n\n\t\tprotected override async Task<Socket> ClientCommandReceived (Stream client, byte[] buffer, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tbyte[] response = null;\n\t\t\tSocket server = null;\n\n\t\t\tusing (var stream = new MemoryStream (buffer, 0, length, false)) {\n\t\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\t\tstring line;\n\n\t\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\t\tif (string.IsNullOrEmpty (line))\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tif (line.StartsWith (\"CONNECT \", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\t\t\t\tint startIndex = \"CONNECT \".Length;\n\t\t\t\t\t\t\tint index = startIndex;\n\n\t\t\t\t\t\t\twhile (index < line.Length && line[index] != ':')\n\t\t\t\t\t\t\t\tindex++;\n\n\t\t\t\t\t\t\tvar host = line.Substring (startIndex, index - startIndex);\n\t\t\t\t\t\t\tstartIndex = ++index;\n\n\t\t\t\t\t\t\twhile (index < line.Length && line[index] != ' ')\n\t\t\t\t\t\t\t\tindex++;\n\n\t\t\t\t\t\t\tvar portStr = line.Substring (startIndex, index - startIndex);\n\t\t\t\t\t\t\tint port = int.Parse (portStr, CultureInfo.InvariantCulture);\n\t\t\t\t\t\t\tindex++;\n\n\t\t\t\t\t\t\t// HTTP/X.Y\n\t\t\t\t\t\t\tvar httpVersion = line.Substring (index);\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tserver = await SocketUtils.ConnectAsync (host, port, null, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\t\tvar remote = (IPEndPoint) server.RemoteEndPoint;\n\n\t\t\t\t\t\t\t\tresponse = Encoding.ASCII.GetBytes ($\"HTTP/1.1 200 Connected to {remote}\\r\\n\\r\\n\");\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tresponse = Encoding.ASCII.GetBytes (\"HTTP/1.1 404 Not Found\\r\\n\\r\\n\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (response == null)\n\t\t\t\treturn null;\n\n\t\t\tawait client.WriteAsync (response, 0, response.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn server;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/HttpsProxyClientTests.cs",
    "content": "﻿//\n// HttpsProxyClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Security.Cryptography;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy {\n\t[TestFixture]\n\tpublic class HttpsProxyClientTests\n\t{\n\t\tconst int ConnectTimeout = 5 * 1000; // 5 seconds\n\t\treadonly X509Certificate2 certificate;\n\n\t\tpublic HttpsProxyClientTests ()\n\t\t{\n\t\t\tusing (var rsa = RSA.Create (4096)) {\n\t\t\t\tvar req = new CertificateRequest (\"cn=MailKit Proxy\", rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);\n\t\t\t\treq.CertificateExtensions.Add (new X509KeyUsageExtension (X509KeyUsageFlags.DigitalSignature, true));\n\n\t\t\t\tvar cert = req.CreateSelfSigned (DateTimeOffset.Now, DateTimeOffset.Now.AddYears (5));\n\n\t\t\t\tcertificate = new X509Certificate2 (cert.Export (X509ContentType.Pfx, \"password\"), \"password\", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);\n\t\t\t}\n\t\t}\n\n\t\t[OneTimeTearDown]\n\t\tpublic void TearDown ()\n\t\t{\n\t\t\tcertificate?.Dispose ();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar proxy = new HttpsProxyClient (\"http.proxy.com\", 0, credentials);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new HttpsProxyClient (null, 1080));\n\t\t\tAssert.Throws<ArgumentException> (() => new HttpsProxyClient (string.Empty, 1080));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new HttpsProxyClient (proxy.ProxyHost, -1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new HttpsProxyClient (proxy.ProxyHost, 1080, null));\n\n\t\t\tAssert.That (proxy.ProxyPort, Is.EqualTo (1080));\n\t\t\tAssert.That (proxy.ProxyHost, Is.EqualTo (\"http.proxy.com\"));\n\t\t\tAssert.That (proxy.ProxyCredentials, Is.EqualTo (credentials));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => proxy.Connect (null, 443));\n\t\t\tAssert.Throws<ArgumentNullException> (() => proxy.Connect (null, 443, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await proxy.ConnectAsync (null, 443));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await proxy.ConnectAsync (null, 443, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentException> (() => proxy.Connect (string.Empty, 443));\n\t\t\tAssert.Throws<ArgumentException> (() => proxy.Connect (string.Empty, 443, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await proxy.ConnectAsync (string.Empty, 443));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await proxy.ConnectAsync (string.Empty, 443, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 0, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 0));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 0, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 80, -ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 80, -ConnectTimeout));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMethodNotAllowed ()\n\t\t{\n\t\t\tvar proxy = new HttpsProxyClient (\"www.google.com\", 443);\n\t\t\tStream stream = null;\n\n\t\t\ttry {\n\t\t\t\tstream = proxy.Connect (\"www.google.com\", 443);\n\t\t\t\tAssert.Fail (\"www.google.com is not an HTTP proxy, so CONNECT should have failed.\");\n\t\t\t} catch (ProxyProtocolException ex) {\n\t\t\t\t// This is expected since this is not an HTTP proxy\n\t\t\t\tvar response = ex.Message.Substring (0, ex.Message.IndexOf (\"\\r\\n\"));\n\t\t\t\tAssert.That (response, Is.EqualTo (\"Failed to connect to www.google.com:443: HTTP/1.1 405 Method Not Allowed\"));\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t} finally {\n\t\t\t\tstream?.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMethodNotAllowedAsync ()\n\t\t{\n\t\t\tvar proxy = new HttpsProxyClient (\"www.google.com\", 443);\n\t\t\tStream stream = null;\n\n\t\t\ttry {\n\t\t\t\tstream = await proxy.ConnectAsync (\"www.google.com\", 443);\n\t\t\t\tAssert.Fail (\"www.google.com is not an HTTP proxy, so CONNECT should have failed.\");\n\t\t\t} catch (ProxyProtocolException ex) {\n\t\t\t\t// This is expected since this is not an HTTP proxy\n\t\t\t\tvar response = ex.Message.Substring (0, ex.Message.IndexOf (\"\\r\\n\"));\n\t\t\t\tAssert.That (response, Is.EqualTo (\"Failed to connect to www.google.com:443: HTTP/1.1 405 Method Not Allowed\"));\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t} finally {\n\t\t\t\tstream?.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectWithCredentials ()\n\t\t{\n\t\t\tusing (var server = new HttpProxyListener (certificate)) {\n\t\t\t\tserver.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar proxy = new HttpsProxyClient (server.IPAddress.ToString (), server.Port, credentials) {\n\t\t\t\t\tServerCertificateValidationCallback = (s, c, ch, e) => true,\n\t\t\t\t\tCheckCertificateRevocation = false\n\t\t\t\t};\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = proxy.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectWithCredentialsAsync ()\n\t\t{\n\t\t\tusing (var server = new HttpProxyListener (certificate)) {\n\t\t\t\tserver.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar proxy = new HttpsProxyClient (server.IPAddress.ToString (), server.Port, credentials) {\n\t\t\t\t\tServerCertificateValidationCallback = (s, c, ch, e) => true,\n\t\t\t\t\tCheckCertificateRevocation = false\n\t\t\t\t};\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await proxy.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/ProxyListener.cs",
    "content": "﻿//\n// ProxyListener.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Collections;\n\nusing NetworkStream = MailKit.Net.NetworkStream;\n\nnamespace UnitTests.Net.Proxy {\n\tabstract class ProxyListener : IDisposable\n\t{\n\t\tCancellationTokenSource cancellationTokenSource;\n\t\tTcpListener listener;\n\t\tTask runningTask;\n\t\tbool disposed;\n\n\t\tprotected ProxyListener ()\n\t\t{\n\t\t}\n\n\t\t~ProxyListener ()\n\t\t{\n\t\t\tDispose (false);\n\t\t}\n\n\t\tpublic bool IsRunning {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic IPAddress IPAddress {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic int Port {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic void Start (IPAddress addr, int port)\n\t\t{\n\t\t\tlistener = new TcpListener (addr, port);\n\t\t\tlistener.Start (1);\n\n\t\t\tIPAddress = ((IPEndPoint) listener.LocalEndpoint).Address;\n\t\t\tPort = ((IPEndPoint) listener.LocalEndpoint).Port;\n\n\t\t\tcancellationTokenSource = new CancellationTokenSource ();\n\t\t\tvar token = cancellationTokenSource.Token;\n\n\t\t\trunningTask = Task.Run (() => AcceptProxyConnections (token), token);\n\t\t\tIsRunning = true;\n\t\t}\n\n\t\tpublic void Stop ()\n\t\t{\n\t\t\tif (listener != null && IsRunning) {\n\t\t\t\ttry {\n\t\t\t\t\tcancellationTokenSource.Cancel ();\n\t\t\t\t} catch {\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlistener.Stop ();\n\t\t\t\t} catch {\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\trunningTask.GetAwaiter ().GetResult ();\n\t\t\t\t} catch {\n\t\t\t\t}\n\n\t\t\t\tcancellationTokenSource.Dispose ();\n\t\t\t\tcancellationTokenSource = null;\n\t\t\t\tIsRunning = false;\n\t\t\t}\n\t\t}\n\n\t\tprotected abstract Task<Socket> ClientCommandReceived (Stream client, byte[] buffer, int length, CancellationToken cancellationToken);\n\n\t\tprotected virtual Task<Stream> GetClientStreamAsync (Socket socket, CancellationToken cancellationToken)\n\t\t{\n\t\t\tStream stream = new NetworkStream (socket, true);\n\n\t\t\treturn Task.FromResult (stream);\n\t\t}\n\n\t\tasync Task AcceptProxyConnection (Socket socket, CancellationToken cancellationToken)\n\t\t{\n\t\t\tusing (var client = await GetClientStreamAsync (socket, cancellationToken).ConfigureAwait (false)) {\n\t\t\t\tvar buffer = new byte[4096];\n\t\t\t\tSocket remote = null;\n\t\t\t\tint nread;\n\n\t\t\t\twhile ((nread = await client.ReadAsync (buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false)) > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tremote = await ClientCommandReceived (client, buffer, nread, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tif (remote != null)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (remote == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var server = new NetworkStream (remote, true)) {\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\twhile (socket.Available > 0 || server.DataAvailable) {\n\t\t\t\t\t\t\t\tif (socket.Available > 0) {\n\t\t\t\t\t\t\t\t\tif ((nread = await client.ReadAsync (buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\t\t\t\t\t\tawait server.WriteAsync (buffer, 0, nread, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (server.DataAvailable) {\n\t\t\t\t\t\t\t\t\tif ((nread = await server.ReadAsync (buffer, 0, buffer.Length, cancellationToken).ConfigureAwait (false)) > 0)\n\t\t\t\t\t\t\t\t\t\tawait client.WriteAsync (buffer, 0, nread, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar checkRead = new ArrayList {\n\t\t\t\t\t\t\t\tsocket,\n\t\t\t\t\t\t\t\tremote\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tvar checkError = new ArrayList {\n\t\t\t\t\t\t\t\tsocket,\n\t\t\t\t\t\t\t\tremote\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tSocket.Select (checkRead, null, checkError, 250000);\n\n\t\t\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested ();\n\t\t\t\t\t\t} while (socket.Connected && remote.Connected);\n\t\t\t\t\t}\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\treturn;\n\t\t\t\t} catch (SocketException) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync Task AcceptProxyConnections (CancellationToken cancellationToken)\n\t\t{\n\t\t\twhile (!cancellationToken.IsCancellationRequested) {\n\t\t\t\ttry {\n\t\t\t\t\tusing (var socket = await listener.AcceptSocketAsync (cancellationToken).ConfigureAwait (false))\n\t\t\t\t\t\tawait AcceptProxyConnection (socket, cancellationToken).ConfigureAwait (false);\n\t\t\t\t} catch (ObjectDisposedException) {\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprotected virtual void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tStop ();\n\t\t\t\tdisposed = true;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tDispose (true);\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/ProxyProtocolExceptionTests.cs",
    "content": "﻿//\n// ProxyProtocolExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy {\n\t[TestFixture]\n\tpublic class ProxyProtocolExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestSerialization ()\n\t\t{\n\t\t\tvar expected = new ProxyProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\", new Exception (\"InnerException\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ProxyProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new ProxyProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ProxyProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new ProxyProtocolException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (ProxyProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/Net/Proxy/Socks4ClientTests.cs",
    "content": "﻿//\n// Socks4ClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// Note: Find Socks4 proxy list here: https://hideip.me/en/proxy/socks4list\n\nusing System.Net;\nusing System.Net.Sockets;\n\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy {\n\t[TestFixture]\n\tpublic class Socks4ClientTests\n\t{\n\t\tconst int ConnectTimeout = 5 * 1000; // 5 seconds\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar socks = new Socks4Client (\"socks4.proxy.com\", 0, credentials);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Socks4Client (null, 1080));\n\t\t\tAssert.Throws<ArgumentException> (() => new Socks4Client (string.Empty, 1080));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new Socks4Client (socks.ProxyHost, -1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Socks4Client (socks.ProxyHost, 1080, null));\n\n\t\t\tAssert.That (socks.SocksVersion, Is.EqualTo (4));\n\t\t\tAssert.That (socks.ProxyPort, Is.EqualTo (1080));\n\t\t\tAssert.That (socks.ProxyHost, Is.EqualTo (\"socks4.proxy.com\"));\n\t\t\tAssert.That (socks.ProxyCredentials, Is.EqualTo (credentials));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => socks.Connect (null, 80));\n\t\t\tAssert.Throws<ArgumentNullException> (() => socks.Connect (null, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await socks.ConnectAsync (null, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await socks.ConnectAsync (null, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentException> (() => socks.Connect (string.Empty, 80));\n\t\t\tAssert.Throws<ArgumentException> (() => socks.Connect (string.Empty, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await socks.ConnectAsync (string.Empty, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await socks.ConnectAsync (string.Empty, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 0, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 0));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 0, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 80, -ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 80, -ConnectTimeout));\n\t\t}\n\n\t\tstatic string ResolveIPv4 (string host)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tif (ipAddresses[i].AddressFamily == AddressFamily.InterNetwork)\n\t\t\t\t\treturn ipAddresses[i].ToString ();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectByIPv4 ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"74.125.197.99\"; // ResolveIPv4 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (host, 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectByIPv4Async ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"74.125.197.99\"; // ResolveIPv4 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (host, 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectByDomain ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectByDomainAsync ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestTimeoutException ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"example.com\", 25, 1000);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Pass ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/Socks4ProxyListener.cs",
    "content": "﻿//\n// Socks4ProxyListener.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\n\nusing MailKit.Net;\n\nnamespace UnitTests.Net.Proxy {\n\tclass Socks4ProxyListener : ProxyListener\n\t{\n\t\tpublic Socks4ProxyListener ()\n\t\t{\n\t\t}\n\n\t\tenum Socks4Command : byte\n\t\t{\n\t\t\tConnect = 0x01,\n\t\t\tBind    = 0x02,\n\t\t}\n\n\t\tenum Socks4Reply : byte\n\t\t{\n\t\t\tRequestGranted        = 0x5a,\n\t\t\tRequestRejected       = 0x5b,\n\t\t\tRequestFailedNoIdentd = 0x5c,\n\t\t\tRequestFailedWrongId  = 0x5d\n\t\t}\n\n\t\tstatic bool IsInvalidIPAddress (byte[] ip)\n\t\t{\n\t\t\treturn ip[0] == 0 && ip[1] == 0 && ip[2] == 0 && ip[3] != 0;\n\t\t}\n\n\t\tstatic bool TryParse (byte[] request, int requestLength, out Socks4Command cmd, out int port, out IPAddress addr, out string user)\n\t\t{\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\t// |VER | CMD | DST.PORT | DST.ADDR |  USERID  | NULL  |  DST.DOMAIN  | NULL  |\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\t// | 1  |  1  |    2     |    4     | VARIABLE | X'00' |   VARIABLE   | X'00' |\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\tint n = 0;\n\n\t\t\tcmd = Socks4Command.Connect;\n\t\t\taddr = null;\n\t\t\tuser = null;\n\t\t\tport = 0;\n\n\t\t\tif (requestLength < 9 || request[n++] != (byte) 4)\n\t\t\t\treturn false;\n\n\t\t\tcmd = (Socks4Command) request[n++];\n\t\t\tif (cmd != Socks4Command.Connect && cmd != Socks4Command.Bind)\n\t\t\t\treturn false;\n\n\t\t\tport = (request[n++] << 8) | request[n++];\n\n\t\t\tvar ip = new byte[4];\n\t\t\tBuffer.BlockCopy (request, n, ip, 0, 4);\n\t\t\tn += 4;\n\n\t\t\tif (!IsInvalidIPAddress (ip))\n\t\t\t\taddr = new IPAddress (ip);\n\n\t\t\tvar buffer = new byte[256];\n\t\t\tint index = 0;\n\n\t\t\twhile (n < requestLength && index < buffer.Length && request[n] != 0)\n\t\t\t\tbuffer[index++] = request[n++];\n\n\t\t\tif (n >= requestLength || index >= buffer.Length)\n\t\t\t\treturn false;\n\n\t\t\tuser = Encoding.UTF8.GetString (buffer, 0, index);\n\t\t\tn++;\n\n\t\t\treturn addr != null;\n\t\t}\n\n\t\tstatic byte[] GetResponse (Socks4Reply reply, IPEndPoint server)\n\t\t{\n\t\t\t// +-----+-----+----------+----------+\n\t\t\t// | VER | REP | BND.PORT | BND.ADDR |\n\t\t\t// +-----+-----+----------+----------+\n\t\t\t// |  1  |  1  |    2     |    4     |\n\t\t\t// +-----+-----+----------+----------+\n\t\t\tvar response = new byte[8];\n\t\t\tint n = 0;\n\n\t\t\tresponse[n++] = (byte) 4;\n\t\t\tresponse[n++] = (byte) reply;\n\t\t\tif (reply == Socks4Reply.RequestGranted) {\n\t\t\t\tvar addr = server.Address;\n\t\t\t\tint port = server.Port;\n\t\t\t\tbyte[] ip;\n\n\t\t\t\tif (addr.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\t\taddr = addr.MapToIPv4 ();\n\n\t\t\t\tip = addr.GetAddressBytes ();\n\n\t\t\t\tresponse[n++] = (byte)(port >> 8);\n\t\t\t\tresponse[n++] = (byte) port;\n\n\t\t\t\tBuffer.BlockCopy (ip, 0, response, n, ip.Length);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\n\t\tprotected override async Task<Socket> ClientCommandReceived (Stream client, byte[] buffer, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tSocket server = null;\n\t\t\tbyte[] response;\n\n\t\t\tif (TryParse (buffer, length, out var cmd, out var port, out var ip, out var user)) {\n\t\t\t\tvar host = ip.ToString ();\n\n\t\t\t\ttry {\n\t\t\t\t\tserver = await SocketUtils.ConnectAsync (host, port, null, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tvar remote = (IPEndPoint) server.RemoteEndPoint;\n\n\t\t\t\t\tresponse = GetResponse (Socks4Reply.RequestGranted, remote);\n\t\t\t\t} catch {\n\t\t\t\t\tresponse = GetResponse (Socks4Reply.RequestRejected, null);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresponse = GetResponse (Socks4Reply.RequestRejected, null);\n\t\t\t}\n\n\t\t\tawait client.WriteAsync (response, 0, response.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn server;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/Socks4aClientTests.cs",
    "content": "﻿//\n// Socks4aClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// Note: Find Socks4 proxy list here: https://hideip.me/en/proxy/socks4list\n\nusing System.Net;\nusing System.Net.Sockets;\n\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy {\n\t[TestFixture]\n\tpublic class Socks4aClientTests\n\t{\n\t\tconst int ConnectTimeout = 5 * 1000; // 5 seconds\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar socks = new Socks4aClient (\"socks4.proxy.com\", 0, credentials);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Socks4aClient (null, 1080));\n\t\t\tAssert.Throws<ArgumentException> (() => new Socks4aClient (string.Empty, 1080));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new Socks4aClient (socks.ProxyHost, -1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Socks4aClient (socks.ProxyHost, 1080, null));\n\n\t\t\tAssert.That (socks.SocksVersion, Is.EqualTo (4));\n\t\t\tAssert.That (socks.ProxyPort, Is.EqualTo (1080));\n\t\t\tAssert.That (socks.ProxyHost, Is.EqualTo (\"socks4.proxy.com\"));\n\t\t\tAssert.That (socks.ProxyCredentials, Is.EqualTo (credentials));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => socks.Connect (null, 80));\n\t\t\tAssert.Throws<ArgumentNullException> (() => socks.Connect (null, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await socks.ConnectAsync (null, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await socks.ConnectAsync (null, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentException> (() => socks.Connect (string.Empty, 80));\n\t\t\tAssert.Throws<ArgumentException> (() => socks.Connect (string.Empty, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await socks.ConnectAsync (string.Empty, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await socks.ConnectAsync (string.Empty, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 0, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 0));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 0, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 80, -ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 80, -ConnectTimeout));\n\t\t}\n\n\t\tstatic string ResolveIPv4 (string host)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tif (ipAddresses [i].AddressFamily == AddressFamily.InterNetwork)\n\t\t\t\t\treturn ipAddresses [i].ToString ();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectByIPv4 ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4aProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"74.125.197.99\"; // ResolveIPv4 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (host, 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectByIPv4Async ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4aProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"74.125.197.99\"; // ResolveIPv4 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (host, 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectByDomain ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4aProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectByDomainAsync ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4aProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream socket = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = await socks.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tsocket?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectSocks4ByDomain ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (\"www.google.com\", 80);\n\t\t\t\t\tAssert.Fail (\"Sending a domain to a SOCKS4-only proxy server should have failed.\");\n\t\t\t\t} catch (ProxyProtocolException) {\n\t\t\t\t\t// This is expected since this proxy does not support Socks4a\n\t\t\t\t\tAssert.Pass ($\"{socks.ProxyHost} does not support Socks4a.\");\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectSocks4ByDomainAsync ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"www.google.com\", 80);\n\t\t\t\t\tAssert.Fail (\"Sending a domain to a SOCKS4-only proxy server should have failed.\");\n\t\t\t\t} catch (ProxyProtocolException) {\n\t\t\t\t\t// This is expected since this proxy does not support Socks4a\n\t\t\t\t\tAssert.Pass ($\"{socks.ProxyHost} does not support Socks4a.\");\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestTimeoutException ()\n\t\t{\n\t\t\tusing (var proxy = new Socks4aProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks4aClient (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"example.com\", 25, 1000);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Pass ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/Socks4aProxyListener.cs",
    "content": "﻿//\n// Socks4aProxyListener.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\n\nusing MailKit.Net;\n\nnamespace UnitTests.Net.Proxy {\n\tclass Socks4aProxyListener : ProxyListener\n\t{\n\t\tpublic Socks4aProxyListener ()\n\t\t{\n\t\t}\n\n\t\tenum Socks4Command : byte\n\t\t{\n\t\t\tConnect = 0x01,\n\t\t\tBind    = 0x02,\n\t\t}\n\n\t\tenum Socks4Reply : byte\n\t\t{\n\t\t\tRequestGranted        = 0x5a,\n\t\t\tRequestRejected       = 0x5b,\n\t\t\tRequestFailedNoIdentd = 0x5c,\n\t\t\tRequestFailedWrongId  = 0x5d\n\t\t}\n\n\t\tstatic bool IsInvalidIPAddress (byte[] ip)\n\t\t{\n\t\t\treturn ip[0] == 0 && ip[1] == 0 && ip[2] == 0 && ip[3] != 0;\n\t\t}\n\n\t\tstatic bool TryParse (byte[] request, int requestLength, out Socks4Command cmd, out int port, out IPAddress addr, out string user, out string domain)\n\t\t{\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\t// |VER | CMD | DST.PORT | DST.ADDR |  USERID  | NULL  |  DST.DOMAIN  | NULL  |\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\t// | 1  |  1  |    2     |    4     | VARIABLE | X'00' |   VARIABLE   | X'00' |\n\t\t\t// +----+-----+----------+----------+----------+-------+--------------+-------+\n\t\t\tint n = 0;\n\n\t\t\tcmd = Socks4Command.Connect;\n\t\t\tdomain = null;\n\t\t\taddr = null;\n\t\t\tuser = null;\n\t\t\tport = 0;\n\n\t\t\tif (requestLength < 9 || request[n++] != (byte) 4)\n\t\t\t\treturn false;\n\n\t\t\tcmd = (Socks4Command) request[n++];\n\t\t\tif (cmd != Socks4Command.Connect && cmd != Socks4Command.Bind)\n\t\t\t\treturn false;\n\n\t\t\tport = (request[n++] << 8) | request[n++];\n\n\t\t\tvar ip = new byte[4];\n\t\t\tBuffer.BlockCopy (request, n, ip, 0, 4);\n\t\t\tn += 4;\n\n\t\t\tif (!IsInvalidIPAddress (ip))\n\t\t\t\taddr = new IPAddress (ip);\n\n\t\t\tvar buffer = new byte[256];\n\t\t\tint index = 0;\n\n\t\t\twhile (n < requestLength && index < buffer.Length && request[n] != 0)\n\t\t\t\tbuffer[index++] = request[n++];\n\n\t\t\tif (n >= requestLength || index >= buffer.Length)\n\t\t\t\treturn false;\n\n\t\t\tuser = Encoding.UTF8.GetString (buffer, 0, index);\n\t\t\tn++;\n\n\t\t\tif (n < requestLength && addr == null) {\n\t\t\t\tindex = 0;\n\t\t\t\twhile (request[n] != 0 && n < requestLength)\n\t\t\t\t\tbuffer[index++] = request[n++];\n\n\t\t\t\tif (n >= requestLength)\n\t\t\t\t\treturn false;\n\n\t\t\t\tdomain = Encoding.UTF8.GetString (buffer, 0, index);\n\t\t\t\tn++;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn addr != null;\n\t\t}\n\n\t\tstatic byte[] GetResponse (Socks4Reply reply, IPEndPoint server)\n\t\t{\n\t\t\t// +-----+-----+----------+----------+\n\t\t\t// | VER | REP | BND.PORT | BND.ADDR |\n\t\t\t// +-----+-----+----------+----------+\n\t\t\t// |  1  |  1  |    2     |    4     |\n\t\t\t// +-----+-----+----------+----------+\n\t\t\tvar response = new byte[8];\n\t\t\tint n = 0;\n\n\t\t\tresponse[n++] = (byte) 4;\n\t\t\tresponse[n++] = (byte) reply;\n\t\t\tif (reply == Socks4Reply.RequestGranted) {\n\t\t\t\tvar addr = server.Address;\n\t\t\t\tint port = server.Port;\n\t\t\t\tbyte[] ip;\n\n\t\t\t\tif (addr.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\t\taddr = addr.MapToIPv4 ();\n\n\t\t\t\tip = addr.GetAddressBytes ();\n\n\t\t\t\tresponse[n++] = (byte)(port >> 8);\n\t\t\t\tresponse[n++] = (byte) port;\n\n\t\t\t\tBuffer.BlockCopy (ip, 0, response, n, ip.Length);\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\n\t\tprotected override async Task<Socket> ClientCommandReceived (Stream client, byte[] buffer, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tSocket server = null;\n\t\t\tbyte[] response;\n\n\t\t\tif (TryParse (buffer, length, out var cmd, out var port, out var ip, out var user, out var domain)) {\n\t\t\t\tvar host = !string.IsNullOrEmpty (domain) ? domain : ip.ToString ();\n\n\t\t\t\ttry {\n\t\t\t\t\tserver = await SocketUtils.ConnectAsync (host, port, null, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\tvar remote = (IPEndPoint) server.RemoteEndPoint;\n\n\t\t\t\t\tresponse = GetResponse (Socks4Reply.RequestGranted, remote);\n\t\t\t\t} catch {\n\t\t\t\t\tresponse = GetResponse (Socks4Reply.RequestRejected, null);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresponse = GetResponse (Socks4Reply.RequestRejected, null);\n\t\t\t}\n\n\t\t\tawait client.WriteAsync (response, 0, response.Length, cancellationToken).ConfigureAwait (false);\n\n\t\t\treturn server;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/Socks5ClientTests.cs",
    "content": "﻿//\n// Socks5ClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n// Note: Find Socks5 proxy list here: http://www.gatherproxy.com/sockslist/country/?c=United%20States\n\nusing System.Net;\nusing System.Net.Sockets;\n\nusing MailKit.Security;\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy {\n\t[TestFixture]\n\tpublic class Socks5ClientTests\n\t{\n\t\tpublic static readonly string[] Socks5ProxyList = { \"98.174.90.36\", \"198.12.157.31\", \"72.210.252.134\" };\n\t\tpublic static readonly int[] Socks5ProxyPorts = { 1080, 46906, 46164 };\n\t\tconst int ConnectTimeout = 5 * 1000; // 5 seconds\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar socks = new Socks5Client (\"socks5.proxy.com\", 0, credentials);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Socks4Client (null, 1080));\n\t\t\tAssert.Throws<ArgumentException> (() => new Socks4Client (string.Empty, 1080));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new Socks4Client (socks.ProxyHost, -1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new Socks4Client (socks.ProxyHost, 1080, null));\n\n\t\t\tAssert.That (socks.SocksVersion, Is.EqualTo (5));\n\t\t\tAssert.That (socks.ProxyPort, Is.EqualTo (1080));\n\t\t\tAssert.That (socks.ProxyHost, Is.EqualTo (\"socks5.proxy.com\"));\n\t\t\tAssert.That (socks.ProxyCredentials, Is.EqualTo (credentials));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => socks.Connect (null, 80));\n\t\t\tAssert.Throws<ArgumentNullException> (() => socks.Connect (null, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await socks.ConnectAsync (null, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await socks.ConnectAsync (null, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentException> (() => socks.Connect (string.Empty, 80));\n\t\t\tAssert.Throws<ArgumentException> (() => socks.Connect (string.Empty, 80, 100000));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await socks.ConnectAsync (string.Empty, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await socks.ConnectAsync (string.Empty, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 0, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 0));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 0, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => socks.Connect (\"www.google.com\", 80, -ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await socks.ConnectAsync (\"www.google.com\", 80, -ConnectTimeout));\n\t\t}\n\n\t\tstatic string ResolveIPv4 (string host)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tif (ipAddresses[i].AddressFamily == AddressFamily.InterNetwork)\n\t\t\t\t\treturn ipAddresses[i].ToString ();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tstatic string ResolveIPv6 (string host)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tif (ipAddresses[i].AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\t\treturn ipAddresses[i].ToString ();\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetAddressType ()\n\t\t{\n\t\t\tconst string host = \"www.google.com\";\n\t\t\tconst string ipv6 = \"2607:f8b0:400e:c03::69\";\n\t\t\tconst string ipv4 = \"74.125.197.99\";\n\n\t\t\tAssert.That (Socks5Client.GetAddressType (host, out _), Is.EqualTo (Socks5Client.Socks5AddressType.Domain));\n\t\t\tAssert.That (Socks5Client.GetAddressType (ipv4, out _), Is.EqualTo (Socks5Client.Socks5AddressType.IPv4));\n\t\t\tAssert.That (Socks5Client.GetAddressType (ipv6, out _), Is.EqualTo (Socks5Client.Socks5AddressType.IPv6));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetFailureReason ()\n\t\t{\n\t\t\tfor (byte i = 1; i < 10; i++) {\n\t\t\t\tvar reason = Socks5Client.GetFailureReason (i);\n\n\t\t\t\tif (i > 8)\n\t\t\t\t\tAssert.That (reason.StartsWith (\"Unknown error\", StringComparison.Ordinal), Is.True);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectAnonymous ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectAnonymousAsync ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectWithCredentials ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port, credentials);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (AuthenticationException) {\n\t\t\t\t\t// this is what we expect to get\n\t\t\t\t\tAssert.Pass (\"Got an AuthenticationException just as expected\");\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectWithCredentialsAsync ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port, credentials);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (AuthenticationException) {\n\t\t\t\t\t// this is what we expect to get\n\t\t\t\t\tAssert.Pass (\"Got an AuthenticationException just as expected\");\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectWithBadCredentials ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"bad\");\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port, credentials);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t\tAssert.Fail (\"Expected AuthenticationException\");\n\t\t\t\t} catch (AuthenticationException) {\n\t\t\t\t\t// this is what we expect to get\n\t\t\t\t\tAssert.Pass (\"Got an AuthenticationException just as expected\");\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectWithBadCredentialsAsync ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"bad\");\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port, credentials);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t\tAssert.Fail (\"Expected AuthenticationException\");\n\t\t\t\t} catch (AuthenticationException) {\n\t\t\t\t\t// this is what we expect to get\n\t\t\t\t\tAssert.Pass (\"Got an AuthenticationException just as expected\");\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectByIPv4 ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"74.125.197.99\"; // ResolveIPv4 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (host, 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectByIPv4Async ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"74.125.197.99\"; // ResolveIPv4 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (host, 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectByIPv6 ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"2607:f8b0:400e:c03::69\"; // ResolveIPv6 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = socks.Connect (host, 80, ConnectTimeout);\n\t\t\t\t} catch (ProxyProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message.StartsWith ($\"Failed to connect to {host}:80: \", StringComparison.Ordinal), Is.True, ex.Message);\n\t\t\t\t\tAssert.Inconclusive (ex.Message);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectByIPv6Async ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tvar host = \"2607:f8b0:400e:c03::69\"; // ResolveIPv6 (\"www.google.com\");\n\t\t\t\tStream stream = null;\n\n\t\t\t\tif (host == null)\n\t\t\t\t\treturn;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (host, 80, ConnectTimeout);\n\t\t\t\t} catch (ProxyProtocolException ex) {\n\t\t\t\t\tAssert.That (ex.Message.StartsWith ($\"Failed to connect to {host}:80: \", StringComparison.Ordinal), Is.True, ex.Message);\n\t\t\t\t\tAssert.Inconclusive (ex.Message);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestTimeoutException ()\n\t\t{\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar socks = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await socks.ConnectAsync (\"example.com\", 25, 1000);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Pass ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/Socks5ProxyListener.cs",
    "content": "﻿//\n// Socks5ProxyListener.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\n\nusing MailKit.Net;\n\nnamespace UnitTests.Net.Proxy {\n\tclass Socks5ProxyListener : ProxyListener\n\t{\n\t\tenum Socks5ListenerState\n\t\t{\n\t\t\tNegotiateAuthMethod,\n\t\t\tAuthenticate,\n\t\t\tCommand\n\t\t}\n\n\t\treadonly byte[] request = new byte[1024];\n\t\tSocks5ListenerState state;\n\t\tint requestLength;\n\n\t\tpublic Socks5ProxyListener ()\n\t\t{\n\t\t}\n\n\t\tenum Socks5AddressType : byte\n\t\t{\n\t\t\tIPv4   = 0x01,\n\t\t\tDomain = 0x03,\n\t\t\tIPv6   = 0x04\n\t\t}\n\n\t\tenum Socks5AuthMethod : byte\n\t\t{\n\t\t\tAnonymous    = 0x00,\n\t\t\tGSSAPI       = 0x01,\n\t\t\tUserPassword = 0x02,\n\t\t\tNotSupported = 0xff\n\t\t}\n\n\t\tenum Socks5Command : byte\n\t\t{\n\t\t\tNone         = 0,\n\t\t\tConnect      = 0x01,\n\t\t\tBind         = 0x02,\n\t\t\tUdpAssociate = 0x03,\n\t\t}\n\n\t\tenum Socks5Reply : byte\n\t\t{\n\t\t\tSuccess                 = 0x00,\n\t\t\tGeneralServerFailure    = 0x01,\n\t\t\tConnectionNotAllowed    = 0x02,\n\t\t\tNetworkUnreachable      = 0x03,\n\t\t\tHostUnreachable         = 0x04,\n\t\t\tConnectionRefused       = 0x05,\n\t\t\tTTLExpired              = 0x06,\n\t\t\tCommandNotSupported     = 0x07,\n\t\t\tAddressTypeNotSupported = 0x08\n\t\t}\n\n\t\tenum Socks5ParseResult\n\t\t{\n\t\t\tSuccess = 0,\n\t\t\tNotEnoughData,\n\t\t\tInvalidRequest,\n\t\t\tInvalidCommand,\n\t\t\tInvalidAddrType,\n\t\t}\n\n\t\tstatic Socks5ParseResult Parse (byte[] request, int requestLength, out Socks5AuthMethod[] methods)\n\t\t{\n\t\t\tmethods = Array.Empty<Socks5AuthMethod> ();\n\n\t\t\t// +-----+----------+----------+\n\t\t\t// | VER | NMETHODS | METHODS  |\n\t\t\t// +-----+----------+----------+\n\t\t\t// |  1  |    1     | 1 to 255 |\n\t\t\t// +-----+----------+----------+\n\t\t\tif (requestLength < 1) \n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tif (request[0] != 0x05)\n\t\t\t\treturn Socks5ParseResult.InvalidRequest;\n\n\t\t\tif (requestLength < 2)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tint n = request[1];\n\n\t\t\tif (requestLength < 2 + n)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tmethods = new Socks5AuthMethod[n];\n\t\t\tfor (int i = 0; i < n; i++)\n\t\t\t\tmethods[i] = (Socks5AuthMethod) request[2 + i];\n\n\t\t\treturn Socks5ParseResult.Success;\n\t\t}\n\n\t\tbyte[] NegotiateAuthMethod ()\n\t\t{\n\t\t\tSocks5AuthMethod method;\n\n\t\t\tvar result = Parse (request, requestLength, out var methods);\n\t\t\tif (result == Socks5ParseResult.NotEnoughData)\n\t\t\t\treturn null;\n\n\t\t\tif (result == Socks5ParseResult.Success) {\n\t\t\t\tvar anonymous = false;\n\t\t\t\tvar userpass = false;\n\n\t\t\t\tfor (int i = 0; i < methods.Length; i++) {\n\t\t\t\t\tif (methods[i] == Socks5AuthMethod.Anonymous)\n\t\t\t\t\t\tanonymous = true;\n\t\t\t\t\telse if (methods[i] == Socks5AuthMethod.UserPassword)\n\t\t\t\t\t\tuserpass = true;\n\t\t\t\t}\n\n\t\t\t\tif (userpass) {\n\t\t\t\t\tmethod = Socks5AuthMethod.UserPassword;\n\t\t\t\t\tstate = Socks5ListenerState.Authenticate;\n\t\t\t\t} else if (anonymous) {\n\t\t\t\t\tmethod = Socks5AuthMethod.Anonymous;\n\t\t\t\t\tstate = Socks5ListenerState.Command;\n\t\t\t\t} else {\n\t\t\t\t\tmethod = Socks5AuthMethod.NotSupported;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmethod = Socks5AuthMethod.NotSupported;\n\t\t\t}\n\n\t\t\t// +-----+--------+\n\t\t\t// | VER | METHOD |\n\t\t\t// +-----+--------+\n\t\t\t// |  1  |   1    |\n\t\t\t// +-----+--------+\n\t\t\tvar response = new byte[2];\n\t\t\tresponse[0] = 0x05;\n\t\t\tresponse[1] = (byte) method;\n\n\t\t\treturn response;\n\t\t}\n\n\t\tstatic Socks5ParseResult Parse (byte[] request, int requestLength, out string user, out string passwd)\n\t\t{\n\t\t\tuser = passwd = null;\n\n\t\t\t// +-----+-------------+----------+-------------+----------+\n\t\t\t// | VER | USER.LENGTH | USERNAME | PASS.LENGTH | PASSWORD |\n\t\t\t// +-----+-------------+----------+-------------+----------+\n\t\t\t// |  1  |      1      | 1 to 255 |       1     | 1 to 255 |\n\t\t\t// +-----+-------------+----------+-------------+----------+\n\t\t\tif (requestLength < 1)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tif (request[0] != 0x05)\n\t\t\t\treturn Socks5ParseResult.InvalidRequest;\n\n\t\t\tif (requestLength < 2)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tint userLength = request[1];\n\n\t\t\tif (userLength == 0)\n\t\t\t\treturn Socks5ParseResult.InvalidRequest;\n\n\t\t\tif (requestLength < 3 + userLength)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tuser = Encoding.UTF8.GetString (request, 2, userLength);\n\n\t\t\tint passwdLength = request[2 + userLength];\n\n\t\t\tif (passwdLength == 0)\n\t\t\t\treturn Socks5ParseResult.InvalidRequest;\n\n\t\t\tif (requestLength != 3 + userLength + passwdLength)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tpasswd = Encoding.UTF8.GetString (request, 3 + userLength, passwdLength);\n\n\t\t\treturn Socks5ParseResult.Success;\n\t\t}\n\n\t\tbyte[] Authenticate ()\n\t\t{\n\t\t\tvar result = Parse (request, requestLength, out var user, out var passwd);\n\t\t\tif (result == Socks5ParseResult.NotEnoughData)\n\t\t\t\treturn null;\n\n\t\t\t// +-----+--------+\n\t\t\t// | VER | METHOD |\n\t\t\t// +-----+--------+\n\t\t\t// |  1  |   1    |\n\t\t\t// +-----+--------+\n\t\t\tvar response = new byte[2];\n\t\t\tresponse[0] = 0x05;\n\t\t\tif (result == Socks5ParseResult.Success && user == \"username\" && passwd == \"password\") {\n\t\t\t\tresponse[1] = (byte) Socks5Reply.Success;\n\t\t\t\tstate = Socks5ListenerState.Command;\n\t\t\t} else {\n\t\t\t\tresponse[1] = (byte) Socks5Reply.ConnectionNotAllowed;\n\t\t\t\tstate = Socks5ListenerState.NegotiateAuthMethod;\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\n\t\tstatic Socks5ParseResult Parse (byte[] request, int requestLength, out Socks5Command cmd, out string host, out int port)\n\t\t{\n\t\t\tcmd = Socks5Command.None;\n\t\t\thost = null;\n\t\t\tport = 0;\n\n\t\t\t// +----+-----+-------+------+----------+----------+\n\t\t\t// |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n\t\t\t// +----+-----+-------+------+----------+----------+\n\t\t\t// | 1  |  1  | X'00' |  1   | Variable |    2     |\n\t\t\t// +----+-----+-------+------+----------+----------+\n\t\t\tint n = 0;\n\n\t\t\tif (requestLength < n + 1)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tif (request[n++] != 0x05)\n\t\t\t\treturn Socks5ParseResult.InvalidRequest;\n\n\t\t\tif (requestLength < n + 1)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tcmd = (Socks5Command) request[n++];\n\t\t\tif (cmd != Socks5Command.Connect)\n\t\t\t\treturn Socks5ParseResult.InvalidCommand;\n\n\t\t\t// skip over RSV byte\n\t\t\tif (requestLength < n + 1)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tn++;\n\n\t\t\tif (requestLength < n + 1)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tvar addrType = (Socks5AddressType) request[n++];\n\t\t\tint addrLength;\n\n\t\t\tswitch (addrType) {\n\t\t\tcase Socks5AddressType.Domain:\n\t\t\t\tif (requestLength < n + 1)\n\t\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\t\taddrLength = request[n++];\n\t\t\t\tbreak;\n\t\t\tcase Socks5AddressType.IPv6:\n\t\t\t\taddrLength = 16;\n\t\t\t\tbreak;\n\t\t\tcase Socks5AddressType.IPv4:\n\t\t\t\taddrLength = 4;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn Socks5ParseResult.InvalidAddrType;\n\t\t\t}\n\n\t\t\tif (requestLength < n + addrLength + 2)\n\t\t\t\treturn Socks5ParseResult.NotEnoughData;\n\n\t\t\tvar addr = new byte[addrLength];\n\t\t\tBuffer.BlockCopy (request, n, addr, 0, addrLength);\n\t\t\tn += addrLength;\n\n\t\t\tif (addrType == Socks5AddressType.Domain) {\n\t\t\t\thost = Encoding.UTF8.GetString (addr);\n\t\t\t} else {\n\t\t\t\tvar ip = new IPAddress (addr);\n\t\t\t\thost = ip.ToString ();\n\t\t\t}\n\n\t\t\tport = (request[n++] << 8) | request[n++];\n\n\t\t\treturn Socks5ParseResult.Success;\n\t\t}\n\n\t\tstatic byte[] GetCommandResponse (Socks5Reply reply, IPEndPoint server)\n\t\t{\n\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t// | VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |\n\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\t// |  1  |  1  | X'00' |  1   | Variable |    2     |\n\t\t\t// +-----+-----+-------+------+----------+----------+\n\t\t\tvar addr = server?.Address.GetAddressBytes ();\n\t\t\tvar response = new byte[6 + (addr != null ? addr.Length : 0)];\n\t\t\tint port = server != null ? server.Port : 0;\n\t\t\tint n = 0;\n\n\t\t\tresponse[n++] = 0x05;\n\t\t\tresponse[n++] = (byte) reply;\n\t\t\tresponse[n++] = 0x00;\n\t\t\tif (server != null) {\n\t\t\t\tif (server.Address.AddressFamily == AddressFamily.InterNetworkV6)\n\t\t\t\t\tresponse[n++] = (byte) Socks5AddressType.IPv6;\n\t\t\t\telse\n\t\t\t\t\tresponse[n++] = (byte) Socks5AddressType.IPv4;\n\t\t\t\tBuffer.BlockCopy (addr, 0, response, n, addr.Length);\n\t\t\t\tn += addr.Length;\n\t\t\t\tresponse[n++] = (byte) (port >> 8);\n\t\t\t\tresponse[n++] = (byte) port;\n\t\t\t}\n\n\t\t\treturn response;\n\t\t}\n\n\t\tstatic Socks5Reply GetReply (SocketError error)\n\t\t{\n\t\t\tswitch (error) {\n\t\t\tcase SocketError.AddressFamilyNotSupported: return Socks5Reply.AddressTypeNotSupported;\n\t\t\tcase SocketError.ConnectionRefused: return Socks5Reply.ConnectionRefused;\n\t\t\tcase SocketError.HostUnreachable: return Socks5Reply.HostUnreachable;\n\t\t\tcase SocketError.NetworkUnreachable: return Socks5Reply.NetworkUnreachable;\n\t\t\tcase SocketError.TimedOut: return Socks5Reply.TTLExpired;\n\t\t\tdefault: return Socks5Reply.ConnectionNotAllowed;\n\t\t\t}\n\t\t}\n\n\t\tstatic byte[] GetCommandResponse (SocketError error)\n\t\t{\n\t\t\tvar reply = GetReply (error);\n\n\t\t\treturn GetCommandResponse (reply, null);\n\t\t}\n\n\t\tprotected override async Task<Socket> ClientCommandReceived (Stream client, byte[] buffer, int length, CancellationToken cancellationToken)\n\t\t{\n\t\t\tbyte[] response = null;\n\t\t\tSocket server = null;\n\n\t\t\tBuffer.BlockCopy (buffer, 0, request, requestLength, length);\n\t\t\trequestLength += length;\n\n\t\t\tswitch (state) {\n\t\t\tcase Socks5ListenerState.NegotiateAuthMethod:\n\t\t\t\tresponse = NegotiateAuthMethod ();\n\t\t\t\tbreak;\n\t\t\tcase Socks5ListenerState.Authenticate:\n\t\t\t\tresponse = Authenticate ();\n\t\t\t\tbreak;\n\t\t\tcase Socks5ListenerState.Command:\n\t\t\t\tvar result = Parse (request, requestLength, out Socks5Command cmd, out string host, out int port);\n\t\t\t\tswitch (result) {\n\t\t\t\tcase Socks5ParseResult.Success:\n\t\t\t\t\ttry {\n\t\t\t\t\t\tserver = await SocketUtils.ConnectAsync (host, port, null, cancellationToken).ConfigureAwait (false);\n\t\t\t\t\t\tvar remote = (IPEndPoint) server.RemoteEndPoint;\n\n\t\t\t\t\t\tresponse = GetCommandResponse (Socks5Reply.Success, remote);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tthrow;\n\t\t\t\t\t} catch (SocketException ex) {\n\t\t\t\t\t\tresponse = GetCommandResponse (ex.SocketErrorCode);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tresponse = GetCommandResponse (Socks5Reply.GeneralServerFailure, null);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase Socks5ParseResult.InvalidAddrType:\n\t\t\t\t\tresponse = GetCommandResponse (Socks5Reply.AddressTypeNotSupported, null);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Socks5ParseResult.InvalidCommand:\n\t\t\t\t\tresponse = GetCommandResponse (Socks5Reply.CommandNotSupported, null);\n\t\t\t\t\tbreak;\n\t\t\t\tcase Socks5ParseResult.NotEnoughData:\n\t\t\t\t\tresponse = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase Socks5ParseResult.InvalidRequest:\n\t\t\t\tdefault:\n\t\t\t\t\tresponse = GetCommandResponse (Socks5Reply.GeneralServerFailure, null);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (response == null)\n\t\t\t\treturn null;\n\n\t\t\tawait client.WriteAsync (response, 0, response.Length, cancellationToken).ConfigureAwait (false);\n\t\t\trequestLength = 0;\n\n\t\t\treturn server;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Proxy/WebProxyClientTests.cs",
    "content": "﻿//\n// WebProxyClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\n\nusing MailKit.Net.Proxy;\n\nnamespace UnitTests.Net.Proxy\n{\n\t[TestFixture]\n\tpublic class WebProxyClientTests\n\t{\n\t\tconst int ConnectTimeout = 5 * 1000; // 5 seconds\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar proxy = ProxyClient.SystemProxy;\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new WebProxyClient (null));\n\n\t\t\tAssert.That (proxy.ProxyPort, Is.EqualTo (1080));\n\t\t\tAssert.That (proxy.ProxyHost, Is.EqualTo (\"System\"));\n\t\t\tAssert.That (proxy.ProxyCredentials, Is.Null);\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => proxy.Connect (null, 80));\n\t\t\tAssert.Throws<ArgumentNullException> (() => proxy.Connect (null, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await proxy.ConnectAsync (null, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await proxy.ConnectAsync (null, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentException> (() => proxy.Connect (string.Empty, 80));\n\t\t\tAssert.Throws<ArgumentException> (() => proxy.Connect (string.Empty, 80, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await proxy.ConnectAsync (string.Empty, 80));\n\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await proxy.ConnectAsync (string.Empty, 80, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 0, ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 0));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 0, ConnectTimeout));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => proxy.Connect (\"www.google.com\", 80, -ConnectTimeout));\n\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await proxy.ConnectAsync (\"www.google.com\", 80, -ConnectTimeout));\n\t\t}\n\n\t\t[TestCase (\"http://proxy:8080\", null, null, typeof (HttpProxyClient))]\n\t\t[TestCase (\"http://proxy:8080\", \"user\", \"password\", typeof (HttpProxyClient))]\n\t\t[TestCase (\"https://proxy:8080\", null, null, typeof (HttpsProxyClient))]\n\t\t[TestCase (\"https://proxy:8080\", \"user\", \"password\", typeof (HttpsProxyClient))]\n\t\t[TestCase (\"socks4://proxy:1080\", null, null, typeof (Socks4Client))]\n\t\t[TestCase (\"socks4://proxy:1080\", \"user\", \"password\", typeof (Socks4Client))]\n\t\t[TestCase (\"socks4a://proxy:1080\", null, null, typeof (Socks4aClient))]\n\t\t[TestCase (\"socks4a://proxy:1080\", \"user\", \"password\", typeof (Socks4aClient))]\n\t\t[TestCase (\"socks5://proxy:1080\", null, null, typeof (Socks5Client))]\n\t\t[TestCase (\"socks5://proxy:1080\", \"user\", \"password\", typeof (Socks5Client))]\n\t\t[TestCase (\"unsupported://proxy:1080\", null, null, null)]\n\t\tpublic void TestGetProxyClient (string proxyUri, string user, string password, Type expectedType)\n\t\t{\n\t\t\tvar credentials = user != null ? new NetworkCredential (user, password) : null;\n\n\t\t\tif (expectedType != null) {\n\t\t\t\tvar proxy = WebProxyClient.GetProxyClient (new Uri (proxyUri), credentials);\n\t\t\t\tAssert.That (proxy, Is.InstanceOf (expectedType));\n\t\t\t} else {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => WebProxyClient.GetProxyClient (new Uri (proxyUri), credentials));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnect ()\n\t\t{\n\t\t\tvar proxy = ProxyClient.SystemProxy;\n\t\t\tStream stream = null;\n\n\t\t\ttry {\n\t\t\t\tstream = proxy.Connect (\"www.google.com\", 80);\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t} finally {\n\t\t\t\tstream?.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectAsync ()\n\t\t{\n\t\t\tvar proxy = ProxyClient.SystemProxy;\n\t\t\tStream stream = null;\n\n\t\t\ttry {\n\t\t\t\tstream = await proxy.ConnectAsync (\"www.google.com\", 80);\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t} finally {\n\t\t\t\tstream?.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectViaWebProxy ()\n\t\t{\n\t\t\tusing (var server = new HttpProxyListener ()) {\n\t\t\t\tserver.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar webProxy = new WebProxy (new Uri ($\"http://{server.IPAddress}:{server.Port}\"), true, null, credentials);\n\n\t\t\t\tvar proxy = new WebProxyClient (webProxy);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = proxy.Connect (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectViaWebProxyAsync ()\n\t\t{\n\t\t\tusing (var server = new HttpProxyListener ()) {\n\t\t\t\tserver.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar webProxy = new WebProxy (new Uri ($\"http://{server.IPAddress}:{server.Port}\"), true, null, credentials);\n\n\t\t\t\tvar proxy = new WebProxyClient (webProxy);\n\t\t\t\tStream stream = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tstream = await proxy.ConnectAsync (\"www.google.com\", 80, ConnectTimeout);\n\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t} finally {\n\t\t\t\t\tstream?.Dispose ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/auth-failed.txt",
    "content": "535 authentication failed\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/auth-required.txt",
    "content": "530 5.7.0 Authentication required\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/auth-successful.txt",
    "content": "235 authentication successful\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/auth-too-weak.txt",
    "content": "534 authentication mechanism too weak\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/bad-command-sequence.txt",
    "content": "503 bad command sequence\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-digest-md5-reset.txt",
    "content": "535 authentication invalid credentials\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-digest-md5-response.txt",
    "content": "334 cnNwYXV0aD1mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-digest-md5.txt",
    "content": "334 cmVhbG09ImVsd29vZC5pbm5vc29mdC5jb20iLG5vbmNlPSJPQTZNRzl0RVFHbTJoaCIscW9wPSJhdXRoIixhbGdvcml0aG09bWQ1LXNlc3MsY2hhcnNldD11dGYtOA==\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-login-password.txt",
    "content": "334 VXNlcm5hbWU6\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-login-username.txt",
    "content": "334 UGFzc3dvcmQ6\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-login.txt",
    "content": "235 2.7.0 ... Authentication succeeded\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-auth-plain.txt",
    "content": "235 2.7.0 ... Authentication succeeded\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-data-done.txt",
    "content": "250 2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-data.txt",
    "content": "354 enter mail, end with . on a line by itself\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+binarymime.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-BINARYMIME\n250-CHUNKING\n250-8BITMIME\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+digest-md5.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN DIGEST-MD5\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-8BITMIME\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+dsn.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-PIPELINING\n250-DSN\n250-8BITMIME\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+pipelining.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-PIPELINING\n250-8BITMIME\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+requiretls.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-8BITMIME\n250-REQUIRETLS\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+smtputf8.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-8BITMIME\n250-STARTTLS\n250 SMTPUTF8\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo+x-exps.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-X-EXPS LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-8BITMIME\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-ehlo.txt",
    "content": "250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n250-HELP\n250-AUTH LOGIN PLAIN\n250-SIZE 36700160\n250-ENHANCEDSTATUSCODES\n250-8BITMIME\n250 STARTTLS\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-greeting.txt",
    "content": "220 ESMTP server ready\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-mail-from.txt",
    "content": "250 2.1.0 sender ok\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-noop.txt",
    "content": "250 2.0.0 OK\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-quit.txt",
    "content": "221 2.0.0 omta06.westchester.pa.mail.comcast.net comcast closing connection\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-rcpt-to.txt",
    "content": "250 2.1.5 recipient ok\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/comcast-rset.txt",
    "content": "250 2.0.0 OK\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/ehlo-failed.txt",
    "content": "504 EHLO not implemented.\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/greeting-not-ready.txt",
    "content": "221 ESMTP server not ready\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/helo.txt",
    "content": "250 omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/mailbox-unavailable.txt",
    "content": "550 5.1.0 mailbox unavailable\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/pipelined-mail-from-rcpt-to.txt",
    "content": "250 2.1.0 sender ok\n250 2.1.5 recipient ok\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/pipelined-mailbox-unavailable.txt",
    "content": "250 2.1.0 sender ok\n550 5.1.0 mailbox unavailable\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/rfc0821-expn.txt",
    "content": "250-Jon Postel <Postel@USC-ISIF.ARPA>\n250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>\n250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>\n250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\n250-<joe@foo-unix.ARPA>\n250 <xyz@bar-unix.ARPA>\n"
  },
  {
    "path": "UnitTests/Net/Smtp/Resources/rfc0821-vrfy.txt",
    "content": "250 Fred Smith <Smith@USC-ISIF.ARPA>\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpAuthenticationSecretDetectorTests.cs",
    "content": "﻿//\n// SmtpAuthenticationSecretDetectorTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MailKit;\nusing MailKit.Net.Smtp;\n\nnamespace UnitTests.Net.Smtp {\n\t[TestFixture]\n\tpublic class SmtpAuthenticationSecretDetectorTests\n\t{\n\t\t[Test]\n\t\tpublic void TestEmptyCommand ()\n\t\t{\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tvar buffer = Array.Empty<byte> ();\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNonAuthCommand ()\n\t\t{\n\t\t\tconst string command = \"MAIL FROM:<user@domain.com>\\r\\n\";\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotIsAuthenticating ()\n\t\t{\n\t\t\tconst string command = \"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"# of secrets\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthCommand ()\n\t\t{\n\t\t\tconst string command = \"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tvar secrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (11), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (24), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslIRAuthCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\";\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tint secretIndex = \"AUTH PLAIN \".Length;\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= secretIndex && command[index] != '\\r' && command[index] != '\\n') {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultiLineSaslAuthCommand ()\n\t\t{\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tbyte[] buffer;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"AUTH LOGIN\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Is.Empty, \"initial # of secrets\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"dXNlcm5hbWU=\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (12), \"Length\");\n\n\t\t\tbuffer = Encoding.ASCII.GetBytes (\"cGFzc3dvcmQ=\\r\\n\");\n\t\t\tsecrets = detector.DetectSecrets (buffer, 0, buffer.Length);\n\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), \"# of secrets\");\n\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (0), \"StartIndex\");\n\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (12), \"Length\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMultiLineSaslAuthCommandBitByBit ()\n\t\t{\n\t\t\tconst string command = \"AUTH LOGIN\\r\\ndXNlcm5hbWU=\\r\\ncGFzc3dvcmQ=\\r\\n\";\n\t\t\tvar detector = new SmtpAuthenticationSecretDetector ();\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\t\t\tint secretIndex = \"AUTH LOGIN\\r\\n\".Length;\n\t\t\tIList<AuthenticationSecret> secrets;\n\t\t\tint index = 0;\n\n\t\t\tdetector.IsAuthenticating = true;\n\n\t\t\twhile (index < command.Length) {\n\t\t\t\tsecrets = detector.DetectSecrets (buffer, index, 1);\n\t\t\t\tif (index >= secretIndex && command[index] != '\\r' && command[index] != '\\n') {\n\t\t\t\t\tAssert.That (secrets, Has.Count.EqualTo (1), $\"# of secrets @ index {index}\");\n\t\t\t\t\tAssert.That (secrets[0].StartIndex, Is.EqualTo (index), \"StartIndex\");\n\t\t\t\t\tAssert.That (secrets[0].Length, Is.EqualTo (1), \"Length\");\n\t\t\t\t} else {\n\t\t\t\t\tAssert.That (secrets, Is.Empty, $\"# of secrets @ index {index}\");\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpClientTests.cs",
    "content": "﻿//\n// SmtpClientTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\n\nusing MimeKit;\nusing MimeKit.IO;\nusing MimeKit.Utils;\n\nusing MailKit;\nusing MailKit.Security;\nusing MailKit.Net.Smtp;\nusing MailKit.Net.Proxy;\n\nusing UnitTests.Security;\nusing UnitTests.Net.Proxy;\n\nusing AuthenticationException = MailKit.Security.AuthenticationException;\n\nnamespace UnitTests.Net.Smtp {\n\t[TestFixture]\n\tpublic class SmtpClientTests\n\t{\n\t\tconst CipherAlgorithmType YahooCipherAlgorithm = CipherAlgorithmType.Aes128;\n\t\tconst int YahooCipherStrength = 128;\n#if !MONO\n\t\tconst HashAlgorithmType YahooHashAlgorithm = HashAlgorithmType.Sha256;\n#else\n\t\tconst HashAlgorithmType YahooHashAlgorithm = HashAlgorithmType.None;\n#endif\n\t\tconst ExchangeAlgorithmType EcdhEphemeral = (ExchangeAlgorithmType) 44550;\n\n\t\tclass MyProgress : ITransferProgress\n\t\t{\n\t\t\tpublic long BytesTransferred;\n\t\t\tpublic long TotalSize;\n\n\t\t\tpublic void Report (long bytesTransferred, long totalSize)\n\t\t\t{\n\t\t\t\tBytesTransferred = bytesTransferred;\n\t\t\t\tTotalSize = totalSize;\n\t\t\t}\n\n\t\t\tpublic void Report (long bytesTransferred)\n\t\t\t{\n\t\t\t\tBytesTransferred = bytesTransferred;\n\t\t\t}\n\t\t}\n\n\t\tstatic MimeMessage CreateSimpleMessage ()\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Sender Name\", \"sender@example.com\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Recipient Name\", \"recipient@example.com\"));\n\t\t\tmessage.Subject = \"This is a test...\";\n\n\t\t\tmessage.Body = new TextPart (\"plain\") {\n\t\t\t\tText = \"This is the message body.\"\n\t\t\t};\n\n\t\t\treturn message;\n\t\t}\n\n\t\tstatic MimeMessage CreateBinaryMessage ()\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Sender Name\", \"sender@example.com\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Recipient Name\", \"recipient@example.com\"));\n\t\t\tmessage.Subject = \"This is a test...\";\n\n\t\t\tmessage.Body = new TextPart (\"plain\") {\n\t\t\t\tText = \"This is the message body with some unicode unicode: ☮ ☯\",\n\t\t\t\tContentTransferEncoding = ContentEncoding.Binary\n\t\t\t};\n\n\t\t\treturn message;\n\t\t}\n\n\t\tstatic MimeMessage CreateEightBitMessage ()\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Sender Name\", \"sender@example.com\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Recipient Name\", \"recipient@example.com\"));\n\t\t\tmessage.Subject = \"This is a test...\";\n\n\t\t\tmessage.Body = new TextPart (\"plain\") {\n\t\t\t\tText = \"This is the message body with some unicode unicode: ☮ ☯\"\n\t\t\t};\n\n\t\t\treturn message;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\tvar message = CreateSimpleMessage ();\n\t\t\t\tvar sender = message.From.Mailboxes.FirstOrDefault ();\n\t\t\t\tvar recipients = message.To.Mailboxes.ToList ();\n\t\t\t\tvar empty = Array.Empty<MailboxAddress> ();\n\t\t\t\tvar options = FormatOptions.Default;\n\n\t\t\t\t// Connect\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Uri) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Uri) null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (new Uri (\"path\", UriKind.Relative)));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (new Uri (\"path\", UriKind.Relative)));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (null, 25, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (null, 25, false));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (string.Empty, 25, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 25, false));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (\"host\", -1, false));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (\"host\", -1, false));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (null, 25, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (null, 25, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (string.Empty, 25, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (string.Empty, 25, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (\"host\", -1, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (\"host\", -1, SecureSocketOptions.None));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Socket) null, \"host\", 25, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Socket) null, \"host\", 25, SecureSocketOptions.None));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect ((Stream) null, \"host\", 25, SecureSocketOptions.None));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync ((Stream) null, \"host\", 25, SecureSocketOptions.None));\n\n\t\t\t\tusing (var socket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {\n\t\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (socket, \"host\", 25, SecureSocketOptions.None));\n\t\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (socket, \"host\", 25, SecureSocketOptions.None));\n\t\t\t\t}\n\n\t\t\t\t// Authenticate\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate ((SaslMechanism) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync ((SaslMechanism) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate ((ICredentials) null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync ((ICredentials) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (\"username\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (\"username\", null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, credentials));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, credentials));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (null, \"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (null, \"username\", \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, null, \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, null, \"password\"));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Authenticate (Encoding.UTF8, \"username\", null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.AuthenticateAsync (Encoding.UTF8, \"username\", null));\n\n\t\t\t\t// Send\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (null, message));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (options, null));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (message, null, recipients));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (message, sender, null));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Send (message, sender, empty));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (null, message, sender, recipients));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (options, null, sender, recipients));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (options, message, null, recipients));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Send (options, message, sender, null));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Send (options, message, sender, empty));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (null));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (null, message));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (options, null));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (message, null, recipients));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (message, sender, null));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.SendAsync (message, sender, empty));\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (null, message, sender, recipients));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (options, null, sender, recipients));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (options, message, null, recipients));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendAsync (options, message, sender, null));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.SendAsync (options, message, sender, empty));\n\n\t\t\t\t// Expand\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Expand (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Expand (string.Empty));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Expand (\"line1\\r\\nline2\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ExpandAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ExpandAsync (string.Empty));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ExpandAsync (\"line1\\r\\nline2\"));\n\n\t\t\t\t// Verify\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Verify (null));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Verify (string.Empty));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Verify (\"line1\\r\\nline2\"));\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.VerifyAsync (null));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.VerifyAsync (string.Empty));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.VerifyAsync (\"line1\\r\\nline2\"));\n\n\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSafeHostName ()\n\t\t{\n\t\t\tstring safe;\n\n\t\t\tsafe = SmtpClient.GetSafeHostName (null);\n\t\t\tAssert.That (safe, Is.Null);\n\n\t\t\tsafe = SmtpClient.GetSafeHostName (\"domain.com\");\n\t\t\tAssert.That (safe, Is.EqualTo (\"domain.com\"));\n\n\t\t\tsafe = SmtpClient.GetSafeHostName (\"underscore_domain.com\");\n\t\t\tAssert.That (safe, Is.EqualTo (\"underscore-domain.com\"));\n\n\t\t\tsafe = SmtpClient.GetSafeHostName (\"名がドメイン.com\");\n\t\t\tAssert.That (safe, Is.EqualTo (\"xn--v8jxj3d1dzdz08w.com\"));\n\n\t\t\tvar toolong = new string ('a', 256) + '.' + new string ('b', 256) + '.' + \"com\";\n\t\t\tsafe = SmtpClient.GetSafeHostName (toolong);\n\t\t\tAssert.That (safe, Is.EqualTo (toolong));\n\t\t}\n\n\t\tstatic void AssertDefaultValues (string host, int port, SecureSocketOptions options, Uri expected)\n\t\t{\n\t\t\tSmtpClient.ComputeDefaultValues (host, ref port, ref options, out Uri uri, out bool starttls);\n\n\t\t\tif (expected.PathAndQuery == \"/?starttls=when-available\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.StartTlsWhenAvailable), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.True, $\"{expected}\");\n\t\t\t} else if (expected.PathAndQuery == \"/?starttls=always\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.StartTls), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.True, $\"{expected}\");\n\t\t\t} else if (expected.Scheme == \"smtps\") {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.SslOnConnect), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.False, $\"{expected}\");\n\t\t\t} else {\n\t\t\t\tAssert.That (options, Is.EqualTo (SecureSocketOptions.None), $\"{expected}\");\n\t\t\t\tAssert.That (starttls, Is.False, $\"{expected}\");\n\t\t\t}\n\n\t\t\tAssert.That (uri.ToString (), Is.EqualTo (expected.ToString ()));\n\t\t\tAssert.That (port, Is.EqualTo (expected.Port), $\"{expected}\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComputeDefaultValues ()\n\t\t{\n\t\t\tconst string host = \"smtp.skyfall.net\";\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.None, new Uri ($\"smtp://{host}:25\"));\n\t\t\tAssertDefaultValues (host, 25, SecureSocketOptions.None, new Uri ($\"smtp://{host}:25\"));\n\t\t\tAssertDefaultValues (host, 465, SecureSocketOptions.None, new Uri ($\"smtp://{host}:465\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.SslOnConnect, new Uri ($\"smtps://{host}:465\"));\n\t\t\tAssertDefaultValues (host, 25, SecureSocketOptions.SslOnConnect, new Uri ($\"smtps://{host}:25\"));\n\t\t\tAssertDefaultValues (host, 465, SecureSocketOptions.SslOnConnect, new Uri ($\"smtps://{host}:465\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.StartTls, new Uri ($\"smtp://{host}:25/?starttls=always\"));\n\t\t\tAssertDefaultValues (host, 25, SecureSocketOptions.StartTls, new Uri ($\"smtp://{host}:25/?starttls=always\"));\n\t\t\tAssertDefaultValues (host, 465, SecureSocketOptions.StartTls, new Uri ($\"smtp://{host}:465/?starttls=always\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"smtp://{host}:25/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 25, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"smtp://{host}:25/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 465, SecureSocketOptions.StartTlsWhenAvailable, new Uri ($\"smtp://{host}:465/?starttls=when-available\"));\n\n\t\t\tAssertDefaultValues (host, 0, SecureSocketOptions.Auto, new Uri ($\"smtp://{host}:25/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 25, SecureSocketOptions.Auto, new Uri ($\"smtp://{host}:25/?starttls=when-available\"));\n\t\t\tAssertDefaultValues (host, 465, SecureSocketOptions.Auto, new Uri ($\"smtps://{host}:465\"));\n\t\t}\n\n\t\tstatic Socket Connect (string host, int port)\n\t\t{\n\t\t\tvar ipAddresses = Dns.GetHostAddresses (host);\n\t\t\tSocket socket = null;\n\n\t\t\tfor (int i = 0; i < ipAddresses.Length; i++) {\n\t\t\t\tsocket = new Socket (ipAddresses[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp);\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket.Connect (ipAddresses[i], port);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch {\n\t\t\t\t\tsocket.Dispose ();\n\t\t\t\t\tsocket = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn socket;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSslHandshakeExceptions ()\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tSocket socket;\n\n\t\t\t\t// 1. Test connecting to a non-SSL port fails with an SslHandshakeException.\n\t\t\t\tAssert.Throws<SslHandshakeException> (() => client.Connect (\"www.gmail.com\", 80, true));\n\n\t\t\t\tsocket = Connect (\"www.gmail.com\", 80);\n\t\t\t\tAssert.Throws<SslHandshakeException> (() => client.Connect (socket, \"www.gmail.com\", 80, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t// 2. Test connecting to a server with a bad SSL certificate fails with an SslHandshakeException.\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = Connect (\"untrusted-root.badssl.com\", 443);\n\t\t\t\t\tclient.Connect (socket, \"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSslHandshakeExceptionsAsync ()\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tSocket socket;\n\n\t\t\t\t// 1. Test connecting to a non-SSL port fails with an SslHandshakeException.\n\t\t\t\tAssert.ThrowsAsync<SslHandshakeException> (async () => await client.ConnectAsync (\"www.gmail.com\", 80, true));\n\n\t\t\t\tsocket = Connect (\"www.gmail.com\", 80);\n\t\t\t\tAssert.ThrowsAsync<SslHandshakeException> (async () => await client.ConnectAsync (socket, \"www.gmail.com\", 80, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t// 2. Test connecting to a server with a bad SSL certificate fails with an SslHandshakeException.\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tsocket = Connect (\"untrusted-root.badssl.com\", 443);\n\t\t\t\t\tawait client.ConnectAsync (socket, \"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tSslHandshakeExceptionTests.AssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSyncRoot ()\n\t\t{\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tAssert.That (client.SyncRoot, Is.EqualTo (client));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLocalDomainIPv4 ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO [127.0.0.1]\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"127.0.0.1\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLocalDomainIPv6 ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO [IPv6:::1]\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"::1\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLocalDomainIPv4MappedToIPv6 ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO [129.144.52.38]\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"::FFFF:129.144.52.38\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateSendWithoutSenderOrRecipientsCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSendWithoutSenderOrRecipients ()\n\t\t{\n\t\t\tvar commands = CreateSendWithoutSenderOrRecipientsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateSimpleMessage ()) {\n\t\t\t\t\tmessage.From.Clear ();\n\t\t\t\t\tmessage.Sender = null;\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Send (message));\n\n\t\t\t\t\tmessage.From.Add (new MailboxAddress (\"Sender Name\", \"sender@example.com\"));\n\t\t\t\t\tmessage.To.Clear ();\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Send (message));\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSendWithoutSenderOrRecipientsAsync ()\n\t\t{\n\t\t\tvar commands = CreateSendWithoutSenderOrRecipientsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateSimpleMessage ()) {\n\t\t\t\t\tmessage.From.Clear ();\n\t\t\t\t\tmessage.Sender = null;\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.SendAsync (message));\n\n\t\t\t\t\tmessage.From.Add (new MailboxAddress (\"Sender Name\", \"sender@example.com\"));\n\t\t\t\t\tmessage.To.Clear ();\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.SendAsync (message));\n\t\t\t\t}\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateInvalidStateExceptionsCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"auth-required.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"auth-required.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"auth-required.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"auth-required.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestInvalidStateExceptions ()\n\t\t{\n\t\t\tvar commands = CreateInvalidStateExceptionsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tvar message = CreateSimpleMessage ();\n\t\t\t\tvar sender = message.From.Mailboxes.FirstOrDefault ();\n\t\t\t\tvar recipients = message.To.Mailboxes.ToList ();\n\t\t\t\tvar options = FormatOptions.Default;\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Authenticate (\"username\", \"password\"));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Authenticate (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Authenticate (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.NoOp ());\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Send (options, message, sender, recipients));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Send (message, sender, recipients));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Send (options, message));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Send (message));\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Expand (\"user@example.com\"));\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.Verify (\"user@example.com\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (\"host\", 465, SecureSocketOptions.SslOnConnect));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (\"host\", 465, true));\n\n\t\t\t\tusing (var socket = Connect (\"www.gmail.com\", 80))\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (socket, \"host\", 465, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.Send (options, message, sender, recipients));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.Send (message, sender, recipients));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.Send (options, message));\n\t\t\t\tAssert.Throws<ServiceNotAuthenticatedException> (() => client.Send (message));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Authenticate (\"username\", \"password\"));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Authenticate (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Authenticate (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tclient.Disconnect (true);\n\n\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestInvalidStateExceptionsAsync ()\n\t\t{\n\t\t\tvar commands = CreateInvalidStateExceptionsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tvar message = CreateSimpleMessage ();\n\t\t\t\tvar sender = message.From.Mailboxes.FirstOrDefault ();\n\t\t\t\tvar recipients = message.To.Mailboxes.ToList ();\n\t\t\t\tvar options = FormatOptions.Default;\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.AuthenticateAsync (\"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.NoOpAsync ());\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.SendAsync (options, message, sender, recipients));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.SendAsync (message, sender, recipients));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.SendAsync (options, message));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.SendAsync (message));\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.ExpandAsync (\"user@example.com\"));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.VerifyAsync (\"user@example.com\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (\"host\", 465, SecureSocketOptions.SslOnConnect));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (\"host\", 465, true));\n\n\t\t\t\tusing (var socket = Connect (\"www.gmail.com\", 80))\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (socket, \"host\", 465, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.SendAsync (options, message, sender, recipients));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.SendAsync (message, sender, recipients));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.SendAsync (options, message));\n\t\t\t\tAssert.ThrowsAsync<ServiceNotAuthenticatedException> (async () => await client.SendAsync (message));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.AuthenticateAsync (\"username\", \"password\"));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.AuthenticateAsync (new NetworkCredential (\"username\", \"password\")));\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\")));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\n\t\t\t\tmessage.Dispose ();\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestStartTlsNotSupported ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"ehlo-failed.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"HELO unit-tests.mimekit.org\\r\\n\", \"helo.txt\"),\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient () { LocalDomain = \"unit-tests.mimekit.org\" })\n\t\t\t\tAssert.Throws<NotSupportedException> (() => client.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.StartTls), \"STARTTLS\");\n\n\t\t\tusing (var client = new SmtpClient () { LocalDomain = \"unit-tests.mimekit.org\" })\n\t\t\t\tAssert.ThrowsAsync<NotSupportedException> (() => client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.StartTls), \"STARTTLS Async\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestServiceNotReady ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"greeting-not-ready.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Connect is expected to fail.\");\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (SmtpErrorCode.UnexpectedStatusCode), \"ErrorCode\");\n\t\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (SmtpStatusCode.ServiceClosingTransmissionChannel), \"StatusCode\");\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"ESMTP server not ready\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestServiceNotReadyAsync ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"greeting-not-ready.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Connect is expected to fail.\");\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (SmtpErrorCode.UnexpectedStatusCode), \"ErrorCode\");\n\t\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (SmtpStatusCode.ServiceClosingTransmissionChannel), \"StatusCode\");\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"ESMTP server not ready\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestProtocolLoggerExceptions ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogConnect)))\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (Stream.Null, \"smtp.gmail.com\", 587, SecureSocketOptions.None), \"LogConnect\");\n\n\t\t\tusing (var client = new SmtpClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogConnect)))\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (Stream.Null, \"smtp.gmail.com\", 587, SecureSocketOptions.None), \"LogConnect Async\");\n\n\t\t\tusing (var client = new SmtpClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogServer)) { LocalDomain = \"unit-tests.mimekit.org\" })\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (new SmtpReplayStream (commands, false), \"smtp.gmail.com\", 587, SecureSocketOptions.None), \"LogServer\");\n\n\t\t\tusing (var client = new SmtpClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogServer)) { LocalDomain = \"unit-tests.mimekit.org\" })\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (new SmtpReplayStream (commands, true), \"smtp.gmail.com\", 587, SecureSocketOptions.None), \"LogServer Async\");\n\n\t\t\tusing (var client = new SmtpClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogClient)) { LocalDomain = \"unit-tests.mimekit.org\" })\n\t\t\t\tAssert.Throws<NotImplementedException> (() => client.Connect (new SmtpReplayStream (commands, false), \"smtp.gmail.com\", 587, SecureSocketOptions.None), \"LogClient\");\n\n\t\t\tusing (var client = new SmtpClient (new ExceptionalProtocolLogger (ExceptionalProtocolLoggerMode.ThrowOnLogClient)) { LocalDomain = \"unit-tests.mimekit.org\" })\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (() => client.ConnectAsync (new SmtpReplayStream (commands, true), \"smtp.gmail.com\", 587, SecureSocketOptions.None), \"LogClient Async\");\n\t\t}\n\n\t\tstatic void AssertGMailIsConnected (IMailService client)\n\t\t{\n\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\tAssert.That (client.SslCipherAlgorithm == CipherAlgorithmType.Aes128 || client.SslCipherAlgorithm == CipherAlgorithmType.Aes256, Is.True, $\"Unexpected SslCipherAlgorithm: {client.SslCipherAlgorithm}\");\n\t\t\tAssert.That (client.SslCipherStrength == 128 || client.SslCipherStrength == 256, Is.True, $\"Unexpected SslCipherStrength: {client.SslCipherStrength}\");\n#if !MONO\n\t\t\tAssert.That (client.SslCipherSuite == TlsCipherSuite.TLS_AES_128_GCM_SHA256 || client.SslCipherSuite == TlsCipherSuite.TLS_AES_256_GCM_SHA384, Is.True, $\"Unexpected SslCipherSuite: {client.SslCipherSuite}\");\n\t\t\tAssert.That (client.SslHashAlgorithm == HashAlgorithmType.Sha256 || client.SslHashAlgorithm == HashAlgorithmType.Sha384, Is.True, $\"Unexpected SslHashAlgorithm: {client.SslHashAlgorithm}\");\n#else\n\t\t\tAssert.That (client.SslHashAlgorithm == HashAlgorithmType.None, Is.True, $\"Unexpected SslHashAlgorithm: {client.SslHashAlgorithm}\");\n#endif\n\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t}\n\n\t\tstatic void AssertClientIsDisconnected (IMailService client)\n\t\t{\n\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\t\t\tAssert.That (client.IsSecure, Is.False, \"Expected IsSecure to be false after disconnecting\");\n\t\t\tAssert.That (client.IsEncrypted, Is.False, \"Expected IsEncrypted to be false after disconnecting\");\n\t\t\tAssert.That (client.IsSigned, Is.False, \"Expected IsSigned to be false after disconnecting\");\n\t\t\tAssert.That (client.SslProtocol, Is.EqualTo (SslProtocols.None), \"Expected SslProtocol to be None after disconnecting\");\n\t\t\tAssert.That (client.SslCipherAlgorithm, Is.Null, \"Expected SslCipherAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslCipherStrength, Is.Null, \"Expected SslCipherStrength to be null after disconnecting\");\n\t\t\tAssert.That (client.SslCipherSuite, Is.Null, \"Expected SslCipherSuite to be null after disconnecting\");\n\t\t\tAssert.That (client.SslHashAlgorithm, Is.Null, \"Expected SslHashAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslHashStrength, Is.Null, \"Expected SslHashStrength to be null after disconnecting\");\n\t\t\tAssert.That (client.SslKeyExchangeAlgorithm, Is.Null, \"Expected SslKeyExchangeAlgorithm to be null after disconnecting\");\n\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.Null, \"Expected SslKeyExchangeStrength to be null after disconnecting\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMail ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"smtp.gmail.com\";\n\t\t\tint port = 465;\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Connect (host, 0, options);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (host, 0, options));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"smtp.gmail.com\";\n\t\t\tint port = 465;\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tawait client.ConnectAsync (\"smtp.gmail.com\", 0, SecureSocketOptions.SslOnConnect);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (host, 0, options));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMailViaProxy ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"smtp.gmail.com\";\n\t\t\tint port = 465;\n\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.ProxyClient = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\t\tclient.ServerCertificateValidationCallback = (s, c, h, e) => true;\n\t\t\t\t\tclient.ClientCertificates = null;\n\t\t\t\t\tclient.LocalEndPoint = null;\n\t\t\t\t\tclient.Timeout = 20000;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (host, 0, options);\n\t\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t\t}\n\t\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (host, 0, options));\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailViaProxyAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"smtp.gmail.com\";\n\t\t\tint port = 465;\n\n\t\t\tusing (var proxy = new Socks5ProxyListener ()) {\n\t\t\t\tproxy.Start (IPAddress.Loopback, 0);\n\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.ProxyClient = new Socks5Client (proxy.IPAddress.ToString (), proxy.Port);\n\t\t\t\t\tclient.ServerCertificateValidationCallback = (s, c, h, e) => true;\n\t\t\t\t\tclient.ClientCertificates = null;\n\t\t\t\t\tclient.LocalEndPoint = null;\n\t\t\t\t\tclient.Timeout = 20000;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (\"smtp.gmail.com\", 0, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\t} catch (TimeoutException) {\n\t\t\t\t\t\tAssert.Inconclusive (\"Timed out.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail (ex.Message);\n\t\t\t\t\t}\n\t\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (\"pop.gmail.com\", 0, SecureSocketOptions.SslOnConnect));\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectGMailSocket ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"smtp.gmail.com\";\n\t\t\tint port = 465;\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tvar socket = Connect (host, port);\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.Connect (socket, null, port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Connect (socket, \"\", port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => client.Connect (socket, host, -1, SecureSocketOptions.Auto));\n\n\t\t\t\tclient.Connect (socket, host, port, SecureSocketOptions.Auto);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => client.Connect (socket, host, port, SecureSocketOptions.Auto));\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectGMailSocketAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.SslOnConnect;\n\t\t\tvar host = \"smtp.gmail.com\";\n\t\t\tint port = 465;\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\tconnected++;\n\t\t\t\t};\n\n\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\tdisconnected++;\n\t\t\t\t};\n\n\t\t\t\tvar socket = Connect (host, port);\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.ConnectAsync (socket, null, port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.ThrowsAsync<ArgumentException> (async () => await client.ConnectAsync (socket, \"\", port, SecureSocketOptions.Auto));\n\t\t\t\tAssert.ThrowsAsync<ArgumentOutOfRangeException> (async () => await client.ConnectAsync (socket, host, -1, SecureSocketOptions.Auto));\n\n\t\t\t\tawait client.ConnectAsync (socket, host, port, SecureSocketOptions.Auto);\n\t\t\t\tAssertGMailIsConnected (client);\n\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\tAssert.ThrowsAsync<InvalidOperationException> (async () => await client.ConnectAsync (socket, host, port, SecureSocketOptions.Auto));\n\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectYahoo ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"smtp.mail.yahoo.com\";\n\t\t\tvar port = 587;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar uri = new Uri ($\"smtp://{host}:{port}/?starttls=always\");\n\t\t\t\t\tclient.Connect (uri, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (YahooCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (YahooCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (YahooHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectYahooAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"smtp.mail.yahoo.com\";\n\t\t\tvar port = 587;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar uri = new Uri ($\"smtp://{host}:{port}/?starttls=always\");\n\t\t\t\t\tawait client.ConnectAsync (uri, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (YahooCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (YahooCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (YahooHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConnectYahooSocket ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"smtp.mail.yahoo.com\";\n\t\t\tvar port = 587;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar socket = Connect (host, port);\n\t\t\t\t\tclient.Connect (socket, host, port, options, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (YahooCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (YahooCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (YahooHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectYahooSocketAsync ()\n\t\t{\n\t\t\tvar options = SecureSocketOptions.StartTls;\n\t\t\tvar host = \"smtp.mail.yahoo.com\";\n\t\t\tvar port = 587;\n\n\t\t\tusing (var cancel = new CancellationTokenSource (30 * 1000)) {\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\tint connected = 0, disconnected = 0;\n\n\t\t\t\t\tclient.Connected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"ConnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"ConnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"ConnectedEventArgs.Options\");\n\t\t\t\t\t\tconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Disconnected += (sender, e) => {\n\t\t\t\t\t\tAssert.That (e.Host, Is.EqualTo (host), \"DisconnectedEventArgs.Host\");\n\t\t\t\t\t\tAssert.That (e.Port, Is.EqualTo (port), \"DisconnectedEventArgs.Port\");\n\t\t\t\t\t\tAssert.That (e.Options, Is.EqualTo (options), \"DisconnectedEventArgs.Options\");\n\t\t\t\t\t\tAssert.That (e.IsRequested, Is.True, \"DisconnectedEventArgs.IsRequested\");\n\t\t\t\t\t\tdisconnected++;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar socket = Connect (host, port);\n\t\t\t\t\tawait client.ConnectAsync (socket, host, port, options, cancel.Token);\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to be connected\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.True, \"Expected a secure connection\");\n\t\t\t\t\tAssert.That (client.IsEncrypted, Is.True, \"Expected an encrypted connection\");\n\t\t\t\t\tAssert.That (client.IsSigned, Is.True, \"Expected a signed connection\");\n\t\t\t\t\tAssert.That (client.SslProtocol == SslProtocols.Tls12 || client.SslProtocol == SslProtocols.Tls13, Is.True, \"Expected a TLS v1.2 or TLS v1.3 connection\");\n\t\t\t\t\tAssert.That (client.SslCipherAlgorithm, Is.EqualTo (YahooCipherAlgorithm));\n\t\t\t\t\tAssert.That (client.SslCipherStrength, Is.EqualTo (YahooCipherStrength));\n\t\t\t\t\tAssert.That (client.SslHashAlgorithm, Is.EqualTo (YahooHashAlgorithm));\n\t\t\t\t\tAssert.That (client.SslHashStrength, Is.EqualTo (0), $\"Unexpected SslHashStrength: {client.SslHashStrength}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeAlgorithm == ExchangeAlgorithmType.None || client.SslKeyExchangeAlgorithm == EcdhEphemeral, Is.True, $\"Unexpected SslKeyExchangeAlgorithm: {client.SslKeyExchangeAlgorithm}\");\n\t\t\t\t\tAssert.That (client.SslKeyExchangeStrength, Is.AnyOf (0, 255, 256, 384), $\"Unexpected SslKeyExchangeStrength: {client.SslKeyExchangeStrength}\");\n\t\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"Expected the client to not be authenticated\");\n\t\t\t\t\tAssert.That (connected, Is.EqualTo (1), \"ConnectedEvent\");\n\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\tAssertClientIsDisconnected (client);\n\t\t\t\t\tAssert.That (disconnected, Is.EqualTo (1), \"DisconnectedEvent\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslInitialResponse ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new SaslMechanismPlain (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslInitialResponseAsync ()\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateAuthenticationFailedCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"auth-failed.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"auth-failed.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"auth-failed.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAuthenticationFailed ()\n\t\t{\n\t\t\tvar commands = CreateAuthenticationFailedCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Authenticate should have failed\");\n\t\t\t\t} catch (AuthenticationException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"535: authentication failed\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (new SaslMechanismPlain (\"username\", \"password\"));\n\t\t\t\t\tAssert.Fail (\"Authenticate should have failed\");\n\t\t\t\t} catch (AuthenticationException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"535: authentication failed\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestAuthenticationFailedAsync ()\n\t\t{\n\t\t\tvar commands = CreateAuthenticationFailedCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\tAssert.Fail (\"Authenticate should have failed\");\n\t\t\t\t} catch (AuthenticationException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"535: authentication failed\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\"));\n\t\t\t\t\tAssert.Fail (\"Authenticate should have failed\");\n\t\t\t\t} catch (AuthenticationException ex) {\n\t\t\t\t\tAssert.That (ex.Message, Is.EqualTo (\"535: authentication failed\"));\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertRedacted (MemoryStream stream, string commandPrefix, string nextCommandPrefix)\n\t\t{\n\t\t\tstream.Position = 0;\n\n\t\t\tusing (var reader = new StreamReader (stream, Encoding.ASCII, false, 1024, true)) {\n\t\t\t\tstring line, secret;\n\n\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\tif (line.StartsWith (commandPrefix, StringComparison.Ordinal))\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tAssert.That (line, Is.Not.Null, $\"Authentication command not found: {commandPrefix}\");\n\n\t\t\t\tif (line.Length > commandPrefix.Length) {\n\t\t\t\t\t// SASL IR; check next token is redacted.\n\t\t\t\t\tsecret = line.Substring (commandPrefix.Length);\n\n\t\t\t\t\tAssert.That (secret, Is.EqualTo (\"********\"), \"SASLIR token\");\n\t\t\t\t}\n\n\t\t\t\twhile ((line = reader.ReadLine ()) != null) {\n\t\t\t\t\tif (line.StartsWith (nextCommandPrefix, StringComparison.Ordinal))\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (!line.StartsWith (\"C: \", StringComparison.Ordinal))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tsecret = line.Substring (3);\n\n\t\t\t\t\tAssert.That (secret, Is.EqualTo (\"********\"), \"SASL challenge\");\n\t\t\t\t}\n\n\t\t\t\tAssert.Fail (\"Did not find response.\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateRedactAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"comcast-auth-login.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateRedactAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: QUIT\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateRedactAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: QUIT\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateRedactSaslInitialResponseCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactSaslInitialResponse ()\n\t\t{\n\t\t\tvar commands = CreateRedactSaslInitialResponseCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (new SaslMechanismPlain (\"username\", \"password\"));\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH PLAIN \", \"C: QUIT\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactSaslInitialResponseAsync ()\n\t\t{\n\t\t\tvar commands = CreateRedactSaslInitialResponseCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (new SaslMechanismPlain (\"username\", \"password\"));\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH PLAIN \", \"C: QUIT\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateRedactSaslAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"comcast-auth-login.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRedactSaslAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateRedactSaslAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (new SaslMechanismLogin (\"username\", \"password\"));\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: QUIT\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRedactSaslAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateRedactSaslAuthenticationCommands ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var client = new SmtpClient (new ProtocolLogger (stream, true) { RedactSecrets = true })) {\n\t\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (new SaslMechanismLogin (\"username\", \"password\"));\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\n\t\t\t\tAssertRedacted (stream, \"C: AUTH LOGIN\", \"C: QUIT\");\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (SmtpResponseMode.Char)]\n\t\t[TestCase (SmtpResponseMode.Line)]\n\t\tpublic void TestSmtpResponseModes (SmtpResponseMode mode)\n\t\t{\n\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false, mode), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateHeloFallbackCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO [IPv6:::1]\\r\\n\", \"ehlo-failed.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"HELO [IPv6:::1]\\r\\n\", \"helo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestHeloFallback ()\n\t\t{\n\t\t\tvar commands = CreateHeloFallbackCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"::1\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (SmtpCapabilities.None), \"Capabilities\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestHeloFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateHeloFallbackCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"::1\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (SmtpCapabilities.None), \"Capabilities\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateHeloErrorHandlingCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO [IPv6:::1]\\r\\n\", \"ehlo-failed.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"HELO [IPv6:::1]\\r\\n\", \"ehlo-failed.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestHeloErrorHandlingFailed ()\n\t\t{\n\t\t\tvar commands = CreateHeloErrorHandlingCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"::1\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\tAssert.Fail (\"Expected an exception to be thrown in Connect\");\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (SmtpErrorCode.UnexpectedStatusCode), \"Unexpected error code\");\n\t\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (SmtpStatusCode.CommandParameterNotImplemented), \"Unexpected status code\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Client should not be connected.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (SmtpCapabilities.None), \"Capabilities\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestHeloErrorHandlingAsync ()\n\t\t{\n\t\t\tvar commands = CreateHeloErrorHandlingCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"::1\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (SmtpErrorCode.UnexpectedStatusCode), \"Unexpected error code\");\n\t\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (SmtpStatusCode.CommandParameterNotImplemented), \"Unexpected status code\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Client should not be connected.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\t\t\t\tAssert.That (client.Capabilities, Is.EqualTo (SmtpCapabilities.None), \"Capabilities\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateBasicFunctionalityCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"comcast-auth-login.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"VRFY Smith\\r\\n\", \"rfc0821-vrfy.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EXPN Example-People\\r\\n\", \"rfc0821-expn.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"NOOP\\r\\n\", \"comcast-noop.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicFunctionality ()\n\t\t{\n\t\t\tvar commands = CreateBasicFunctionalityCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// disable PLAIN authentication\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tMailboxAddress vrfy = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tvrfy = client.Verify (\"Smith\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Verify: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (vrfy, Is.Not.Null, \"VRFY result\");\n\t\t\t\tAssert.That (vrfy.Name, Is.EqualTo (\"Fred Smith\"), \"VRFY name\");\n\t\t\t\tAssert.That (vrfy.Address, Is.EqualTo (\"Smith@USC-ISIF.ARPA\"), \"VRFY address\");\n\n\t\t\t\tInternetAddressList expn = null;\n\n\t\t\t\ttry {\n\t\t\t\t\texpn = client.Expand (\"Example-People\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Expand: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (expn, Is.Not.Null, \"EXPN result\");\n\t\t\t\tAssert.That (expn, Has.Count.EqualTo (6), \"EXPN count\");\n\t\t\t\tAssert.That (expn[0].Name, Is.EqualTo (\"Jon Postel\"), \"expn[0].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[0]).Address, Is.EqualTo (\"Postel@USC-ISIF.ARPA\"), \"expn[0].Address\");\n\t\t\t\tAssert.That (expn[1].Name, Is.EqualTo (\"Fred Fonebone\"), \"expn[1].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[1]).Address, Is.EqualTo (\"Fonebone@USC-ISIQ.ARPA\"), \"expn[1].Address\");\n\t\t\t\tAssert.That (expn[2].Name, Is.EqualTo (\"Sam Q. Smith\"), \"expn[2].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[2]).Address, Is.EqualTo (\"SQSmith@USC-ISIQ.ARPA\"), \"expn[2].Address\");\n\t\t\t\tAssert.That (expn[3].Name, Is.EqualTo (\"Quincy Smith\"), \"expn[3].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[3]).Route[0], Is.EqualTo (\"USC-ISIF.ARPA\"), \"expn[3].Route\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[3]).Address, Is.EqualTo (\"Q-Smith@ISI-VAXA.ARPA\"), \"expn[3].Address\");\n\t\t\t\tAssert.That (expn[4].Name, Is.EqualTo (\"\"), \"expn[4].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[4]).Address, Is.EqualTo (\"joe@foo-unix.ARPA\"), \"expn[4].Address\");\n\t\t\t\tAssert.That (expn[5].Name, Is.EqualTo (\"\"), \"expn[5].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[5]).Address, Is.EqualTo (\"xyz@bar-unix.ARPA\"), \"expn[5].Address\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.NoOp ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in NoOp: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateSimpleMessage ()) {\n\t\t\t\t\tvar options = FormatOptions.Default;\n\t\t\t\t\tstring response;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = client.Send (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = client.Send (message, message.From.Mailboxes.FirstOrDefault (), message.To.Mailboxes);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = client.Send (options, message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = client.Send (options, message, message.From.Mailboxes.FirstOrDefault (), message.To.Mailboxes);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestBasicFunctionalityAsync ()\n\t\t{\n\t\t\tvar commands = CreateBasicFunctionalityCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// disable PLAIN authentication\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tMailboxAddress vrfy = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tvrfy = await client.VerifyAsync (\"Smith\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Verify: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (vrfy, Is.Not.Null, \"VRFY result\");\n\t\t\t\tAssert.That (vrfy.Name, Is.EqualTo (\"Fred Smith\"), \"VRFY name\");\n\t\t\t\tAssert.That (vrfy.Address, Is.EqualTo (\"Smith@USC-ISIF.ARPA\"), \"VRFY address\");\n\n\t\t\t\tInternetAddressList expn = null;\n\n\t\t\t\ttry {\n\t\t\t\t\texpn = await client.ExpandAsync (\"Example-People\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Expand: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (expn, Is.Not.Null, \"EXPN result\");\n\t\t\t\tAssert.That (expn, Has.Count.EqualTo (6), \"EXPN count\");\n\t\t\t\tAssert.That (expn[0].Name, Is.EqualTo (\"Jon Postel\"), \"expn[0].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[0]).Address, Is.EqualTo (\"Postel@USC-ISIF.ARPA\"), \"expn[0].Address\");\n\t\t\t\tAssert.That (expn[1].Name, Is.EqualTo (\"Fred Fonebone\"), \"expn[1].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[1]).Address, Is.EqualTo (\"Fonebone@USC-ISIQ.ARPA\"), \"expn[1].Address\");\n\t\t\t\tAssert.That (expn[2].Name, Is.EqualTo (\"Sam Q. Smith\"), \"expn[2].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[2]).Address, Is.EqualTo (\"SQSmith@USC-ISIQ.ARPA\"), \"expn[2].Address\");\n\t\t\t\tAssert.That (expn[3].Name, Is.EqualTo (\"Quincy Smith\"), \"expn[3].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[3]).Route[0], Is.EqualTo (\"USC-ISIF.ARPA\"), \"expn[3].Route\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[3]).Address, Is.EqualTo (\"Q-Smith@ISI-VAXA.ARPA\"), \"expn[3].Address\");\n\t\t\t\tAssert.That (expn[4].Name, Is.EqualTo (\"\"), \"expn[4].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[4]).Address, Is.EqualTo (\"joe@foo-unix.ARPA\"), \"expn[4].Address\");\n\t\t\t\tAssert.That (expn[5].Name, Is.EqualTo (\"\"), \"expn[5].Name\");\n\t\t\t\tAssert.That (((MailboxAddress) expn[5]).Address, Is.EqualTo (\"xyz@bar-unix.ARPA\"), \"expn[5].Address\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.NoOpAsync ();\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in NoOp: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateSimpleMessage ()) {\n\t\t\t\t\tvar options = FormatOptions.Default;\n\t\t\t\t\tstring response;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await client.SendAsync (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await client.SendAsync (message, message.From.Mailboxes.FirstOrDefault (), message.To.Mailboxes);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await client.SendAsync (options, message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await client.SendAsync (options, message, message.From.Mailboxes.FirstOrDefault (), message.To.Mailboxes);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateXEXPSExtensionCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo+x-exps.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestXEXPSExtension ()\n\t\t{\n\t\t\tvar commands = CreateXEXPSExtensionCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestXEXPSExtensionAsync ()\n\t\t{\n\t\t\tvar commands = CreateXEXPSExtensionCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateResendCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"comcast-auth-login.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<resent-sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<resent-to@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<resent-cc@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<resent-bcc@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<resent-from@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<resent-to@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<resent-cc@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<resent-bcc@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestResend ()\n\t\t{\n\t\t\tvar commands = CreateResendCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// disable PLAIN authentication\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateSimpleMessage ()) {\n\t\t\t\t\tvar options = FormatOptions.Default;\n\t\t\t\t\tstring response;\n\n\t\t\t\t\tmessage.ResentSender = new MailboxAddress (\"Resent Sender\", \"resent-sender@example.com\");\n\t\t\t\t\tmessage.ResentFrom.Add (new MailboxAddress (\"Resent From\", \"resent-from@example.com\"));\n\t\t\t\t\tmessage.ResentTo.Add (new MailboxAddress (\"Resent To\", \"resent-to@example.com\"));\n\t\t\t\t\tmessage.ResentCc.Add (new MailboxAddress (\"Resent Cc\", \"resent-cc@example.com\"));\n\t\t\t\t\tmessage.ResentBcc.Add (new MailboxAddress (\"Resent Bcc\", \"resent-bcc@example.com\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = client.Send (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\tmessage.ResentSender = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = client.Send (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestResendAsync ()\n\t\t{\n\t\t\tvar commands = CreateResendCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// disable PLAIN authentication\n\t\t\t\tclient.AuthenticationMechanisms.Remove (\"PLAIN\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateSimpleMessage ()) {\n\t\t\t\t\tvar options = FormatOptions.Default;\n\t\t\t\t\tstring response;\n\n\t\t\t\t\tmessage.ResentSender = new MailboxAddress (\"Resent Sender\", \"resent-sender@example.com\");\n\t\t\t\t\tmessage.ResentFrom.Add (new MailboxAddress (\"Resent From\", \"resent-from@example.com\"));\n\t\t\t\t\tmessage.ResentTo.Add (new MailboxAddress (\"Resent To\", \"resent-to@example.com\"));\n\t\t\t\t\tmessage.ResentCc.Add (new MailboxAddress (\"Resent Cc\", \"resent-cc@example.com\"));\n\t\t\t\t\tmessage.ResentBcc.Add (new MailboxAddress (\"Resent Bcc\", \"resent-bcc@example.com\"));\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await client.SendAsync (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\n\t\t\t\t\tmessage.ResentSender = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresponse = await client.SendAsync (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (response, Is.EqualTo (\"2.0.0 1Yat1n00V1sBWGw3SYaubg mail accepted for delivery\"));\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateNoOpCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"NOOP\\r\\n\", \"comcast-noop.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"NOOP\\r\\n\", \"bad-command-sequence.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNoOp ()\n\t\t{\n\t\t\tvar commands = CreateNoOpCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// The first NOOP should complete successfully.\n\t\t\t\tclient.NoOp ();\n\n\t\t\t\t// The second NOOP should get a 503 error.\n\t\t\t\ttry {\n\t\t\t\t\tclient.NoOp ();\n\t\t\t\t\tAssert.Fail (\"This NOOP command should have resulted in a 502 error.\");\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (SmtpErrorCode.UnexpectedStatusCode), \"Unexpected error code\");\n\t\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (SmtpStatusCode.BadCommandSequence), \"Unexpected SmtpStatusCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client should still be connected.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestNoOpAsync ()\n\t\t{\n\t\t\tvar commands = CreateNoOpCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\t// The first NOOP should complete successfully.\n\t\t\t\tawait client.NoOpAsync ();\n\n\t\t\t\t// The second NOOP should get a 503 error.\n\t\t\t\ttry {\n\t\t\t\t\tawait client.NoOpAsync ();\n\t\t\t\t\tAssert.Fail (\"This NOOP command should have resulted in a 502 error.\");\n\t\t\t\t} catch (SmtpCommandException ex) {\n\t\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (SmtpErrorCode.UnexpectedStatusCode), \"Unexpected error code\");\n\t\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (SmtpStatusCode.BadCommandSequence), \"Unexpected SmtpStatusCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client should still be connected.\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateSaslAuthenticationCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"comcast-auth-login.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslAuthentication ()\n\t\t{\n\t\t\tvar commands = CreateSaslAuthenticationCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslAuthenticationAsync ()\n\t\t{\n\t\t\tvar commands = CreateSaslAuthenticationCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateSaslMechanismTooWeakCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"auth-too-weak.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslMechanismTooWeak ()\n\t\t{\n\t\t\tvar commands = CreateSaslMechanismTooWeakCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t\tAssert.Fail (\"Authenticate should fail\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\t// This is what we expect\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (\"authentication mechanism too weak\"), \"Exception message\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslMechanismTooWeakAsync ()\n\t\t{\n\t\t\tvar commands = CreateSaslMechanismTooWeakCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t\tAssert.Fail (\"AuthenticateAsync should fail\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\t// This is what we expect\n\t\t\t\t\tAssert.That (ax.Message, Is.EqualTo (\"authentication mechanism too weak\"), \"Exception message\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateSaslMechanismTooWeakFallbackCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"auth-too-weak.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH LOGIN\\r\\n\", \"comcast-auth-login-username.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU=\\r\\n\", \"comcast-auth-login-password.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"cGFzc3dvcmQ=\\r\\n\", \"comcast-auth-login.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslMechanismTooWeakFallback ()\n\t\t{\n\t\t\tvar commands = CreateSaslMechanismTooWeakFallbackCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslMechanismTooWeakFallbackAsync ()\n\t\t{\n\t\t\tvar commands = CreateSaslMechanismTooWeakFallbackCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateSaslExceptionProperlyResetsCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo+digest-md5.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH DIGEST-MD5\\r\\n\", \"comcast-auth-digest-md5.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"dXNlcm5hbWU9ImNocmlzIixyZWFsbT0iZWx3b29kLmlubm9zb2Z0LmNvbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixjbm9uY2U9Ik9BNk1IWGg2VnFUclJrIixuYz0wMDAwMDAwMSxxb3A9ImF1dGgiLGRpZ2VzdC11cmk9InNtdHAvZWx3b29kLmlubm9zb2Z0LmNvbSIscmVzcG9uc2U9NTJmZjQ0OTA3ZjcyMzE0NDgxYjVjMDk4YzcwOGViZjMsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=\\r\\n\", \"comcast-auth-digest-md5-response.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"\\r\\n\", \"comcast-auth-digest-md5-reset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslExceptionProperlyResets ()\n\t\t{\n\t\t\tvar commands = CreateSaslExceptionProperlyResetsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"elwood.innosoft.com\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"DIGEST-MD5\"), \"Failed to detect the DIGEST-MD5 auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"chris\", \"secret\");\n\t\t\t\t\tvar sasl = new SaslMechanismDigestMd5 (credentials) {\n\t\t\t\t\t\tcnonce = \"OA6MHXh6VqTrRk\"\n\t\t\t\t\t};\n\n\t\t\t\t\tclient.Authenticate (sasl);\n\t\t\t\t\tAssert.Fail (\"Expected AuthenticationException\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\t// yay!\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"IsAuthenticated\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSaslExceptionProperlyResetsAsync ()\n\t\t{\n\t\t\tvar commands = CreateSaslExceptionProperlyResetsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"elwood.innosoft.com\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"DIGEST-MD5\"), \"Failed to detect the DIGEST-MD5 auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\ttry {\n\t\t\t\t\tvar credentials = new NetworkCredential (\"chris\", \"secret\");\n\t\t\t\t\tvar sasl = new SaslMechanismDigestMd5 (credentials) {\n\t\t\t\t\t\tcnonce = \"OA6MHXh6VqTrRk\"\n\t\t\t\t\t};\n\n\t\t\t\t\tawait client.AuthenticateAsync (sasl);\n\t\t\t\t\tAssert.Fail (\"Expected AuthenticationException\");\n\t\t\t\t} catch (AuthenticationException ax) {\n\t\t\t\t\t// yay!\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Unexpected exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsAuthenticated, Is.False, \"IsAuthenticated\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateEightBitMimeCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=8BITMIME\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEightBitMime ()\n\t\t{\n\t\t\tvar commands = CreateEightBitMimeCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestEightBitMimeAsync ()\n\t\t{\n\t\t\tvar commands = CreateEightBitMimeCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateInternationalMailboxesCommands (out MailboxAddress mailbox, out string addrspec)\n\t\t{\n\t\t\tmailbox = new MailboxAddress (string.Empty, \"úßerñame@example.com\");\n\t\t\taddrspec = MailboxAddress.EncodeAddrspec (mailbox.Address);\n\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+smtputf8.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"MAIL FROM:<{mailbox.Address}> SMTPUTF8 BODY=8BITMIME\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"RCPT TO:<{mailbox.Address}>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"MAIL FROM:<{addrspec}> BODY=8BITMIME\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"RCPT TO:<{addrspec}>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestInternationalMailboxes ()\n\t\t{\n\t\t\tvar commands = CreateInternationalMailboxesCommands (out var mailbox, out var addrspec);\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.UTF8), Is.True, \"Failed to detect SMTPUTF8 extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Send (message, mailbox, new MailboxAddress[] { mailbox });\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Disable SMTPUTF8\n\t\t\t\t\tclient.Capabilities &= ~SmtpCapabilities.UTF8;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Send (message, mailbox, new MailboxAddress[] { mailbox });\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestInternationalMailboxesAsync ()\n\t\t{\n\t\t\tvar commands = CreateInternationalMailboxesCommands (out var mailbox, out var addrspec);\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.UTF8), Is.True, \"Failed to detect SMTPUTF8 extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.SendAsync (message, mailbox, new MailboxAddress[] { mailbox });\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Disable SMTPUTF8\n\t\t\t\t\tclient.Capabilities &= ~SmtpCapabilities.UTF8;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.SendAsync (message, mailbox, new MailboxAddress[] { mailbox });\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic long Measure (MimeMessage message)\n\t\t{\n\t\t\tvar options = FormatOptions.Default.Clone ();\n\n\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\toptions.EnsureNewLine = true;\n\n\t\t\tusing (var measure = new MeasuringStream ()) {\n\t\t\t\tmessage.WriteTo (options, measure);\n\t\t\t\treturn measure.Length;\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestBinaryMimeNoProgress\")]\n\t\t[TestCase (true, TestName = \"TestBinaryMimeWithProgress\")]\n\t\tpublic void TestBinaryMime (bool showProgress)\n\t\t{\n\t\t\tusing (var message = CreateBinaryMessage ()) {\n\t\t\t\tvar size = Measure (message);\n\t\t\t\tstring bdat;\n\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tvar bytes = Encoding.ASCII.GetBytes (string.Format (\"BDAT {0} LAST\\r\\n\", size));\n\t\t\t\t\tmemory.Write (bytes, 0, bytes.Length);\n\t\t\t\t\tmessage.WriteTo (options, memory);\n\n\t\t\t\t\tbytes = memory.GetBuffer ();\n\n\t\t\t\t\tbdat = Encoding.UTF8.GetString (bytes, 0, (int) memory.Length);\n\t\t\t\t}\n\n\t\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+binarymime.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=BINARYMIME\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (bdat, \"comcast-data-done.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t\t};\n\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.BinaryMime), Is.True, \"Failed to detect BINARYMIME extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Chunking), Is.True, \"Failed to detect CHUNKING extension\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (showProgress) {\n\t\t\t\t\t\t\tvar progress = new MyProgress ();\n\n\t\t\t\t\t\t\tclient.Send (message, progress: progress);\n\n\t\t\t\t\t\t\tAssert.That (progress.BytesTransferred, Is.EqualTo (size), \"BytesTransferred\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestBinaryMimeAsyncNoProgress\")]\n\t\t[TestCase (true, TestName = \"TestBinaryMimeAsyncWithProgress\")]\n\t\tpublic async Task TestBinaryMimeAsync (bool showProgress)\n\t\t{\n\t\t\tusing (var message = CreateBinaryMessage ()) {\n\t\t\t\tvar size = Measure (message);\n\t\t\t\tstring bdat;\n\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tvar options = FormatOptions.Default.Clone ();\n\n\t\t\t\t\toptions.NewLineFormat = NewLineFormat.Dos;\n\t\t\t\t\toptions.EnsureNewLine = true;\n\n\t\t\t\t\tvar bytes = Encoding.ASCII.GetBytes (string.Format (\"BDAT {0} LAST\\r\\n\", size));\n\t\t\t\t\tmemory.Write (bytes, 0, bytes.Length);\n\t\t\t\t\tmessage.WriteTo (options, memory);\n\n\t\t\t\t\tbytes = memory.GetBuffer ();\n\n\t\t\t\t\tbdat = Encoding.UTF8.GetString (bytes, 0, (int) memory.Length);\n\t\t\t\t}\n\n\t\t\t\tvar commands = new List<SmtpReplayCommand> {\n\t\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+binarymime.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=BINARYMIME\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (bdat, \"comcast-data-done.txt\"),\n\t\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t\t};\n\n\t\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.BinaryMime), Is.True, \"Failed to detect BINARYMIME extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Chunking), Is.True, \"Failed to detect CHUNKING extension\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (showProgress) {\n\t\t\t\t\t\t\tvar progress = new MyProgress ();\n\n\t\t\t\t\t\t\tawait client.SendAsync (message, progress: progress);\n\n\t\t\t\t\t\t\tAssert.That (progress.BytesTransferred, Is.EqualTo (size), \"BytesTransferred\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreatePipeliningCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+pipelining.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=8BITMIME\\r\\nRCPT TO:<recipient@example.com>\\r\\n\", \"pipelined-mail-from-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestPipeliningNoProgress\")]\n\t\t[TestCase (true, TestName = \"TestPipeliningWithProgress\")]\n\t\tpublic void TestPipelining (bool showProgress)\n\t\t{\n\t\t\tvar commands = CreatePipeliningCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Pipelining), Is.True, \"Failed to detect PIPELINING extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\t\tif (showProgress) {\n\t\t\t\t\t\t\tvar progress = new MyProgress ();\n\n\t\t\t\t\t\t\tclient.Send (message, progress: progress);\n\n\t\t\t\t\t\t\tAssert.That (progress.BytesTransferred, Is.EqualTo (Measure (message)), \"BytesTransferred\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (false, TestName = \"TestPipeliningAsyncNoProgress\")]\n\t\t[TestCase (true, TestName = \"TestPipeliningAsyncWithProgress\")]\n\t\tpublic async Task TestPipeliningAsync (bool showProgress)\n\t\t{\n\t\t\tvar commands = CreatePipeliningCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Pipelining), Is.True, \"Failed to detect PIPELINING extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\t\tif (showProgress) {\n\t\t\t\t\t\t\tvar progress = new MyProgress ();\n\n\t\t\t\t\t\t\tawait client.SendAsync (message, progress: progress);\n\n\t\t\t\t\t\t\tAssert.That (progress.BytesTransferred, Is.EqualTo (Measure (message)), \"BytesTransferred\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateMailFromMailboxUnavailableCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"mailbox-unavailable.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMailFromMailboxUnavailable ()\n\t\t{\n\t\t\tvar commands = CreateMailFromMailboxUnavailableCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.SenderNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMailFromMailboxUnavailableAsync ()\n\t\t{\n\t\t\tvar commands = CreateMailFromMailboxUnavailableCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.SenderNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateMailFromAuthRequiredRsetDisconnectCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"auth-required.txt\", SmtpReplayState.UnexpectedDisconnect),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", string.Empty)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMailFromAuthRequiredRsetDisconnect ()\n\t\t{\n\t\t\tvar commands = CreateMailFromAuthRequiredRsetDisconnectCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an ServiceNotAuthenticatedException\");\n\t\t\t\t} catch (ServiceNotAuthenticatedException) {\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMailFromAuthRequiredRsetDisconnectAsync ()\n\t\t{\n\t\t\tvar commands = CreateMailFromAuthRequiredRsetDisconnectCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an ServiceNotAuthenticatedException\");\n\t\t\t\t} catch (ServiceNotAuthenticatedException) {\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateMailFromUnavailableRsetDisconnectCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"mailbox-unavailable.txt\", SmtpReplayState.UnexpectedDisconnect),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", string.Empty)\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMailFromUnavailableRsetDisconnect ()\n\t\t{\n\t\t\tvar commands = CreateMailFromUnavailableRsetDisconnectCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpCommandException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.SenderNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestMailFromUnavailableRsetDisconnectAsync ()\n\t\t{\n\t\t\tvar commands = CreateMailFromUnavailableRsetDisconnectCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpCommandException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.SenderNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateRcptToMailboxUnavailableCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"mailbox-unavailable.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRcptToMailboxUnavailable ()\n\t\t{\n\t\t\tvar commands = CreateRcptToMailboxUnavailableCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.RecipientNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRcptToMailboxUnavailableAsync ()\n\t\t{\n\t\t\tvar commands = CreateRcptToMailboxUnavailableCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.RecipientNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tclass NoRecipientsAcceptedSmtpClient : SmtpClient\n\t\t{\n\t\t\tpublic bool NoRecipientsAccepted;\n\t\t\tpublic int NotAccepted;\n\n\t\t\tprotected override void OnRecipientNotAccepted (MimeMessage message, MailboxAddress mailbox, SmtpResponse response)\n\t\t\t{\n\t\t\t\tNotAccepted++;\n\t\t\t}\n\n\t\t\tprotected override void OnNoRecipientsAccepted (MimeMessage message)\n\t\t\t{\n\t\t\t\tbase.OnNoRecipientsAccepted (message);\n\t\t\t\tNoRecipientsAccepted = true;\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateNoRecipientsAcceptedCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"mailbox-unavailable.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNoRecipientsAccepted ()\n\t\t{\n\t\t\tvar commands = CreateNoRecipientsAcceptedCommands ();\n\n\t\t\tusing (var client = new NoRecipientsAcceptedSmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.MessageNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t\tAssert.That (sex.StatusCode, Is.EqualTo (SmtpStatusCode.TransactionFailed), \"Unexpected SmtpStatusCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.NotAccepted, Is.EqualTo (1), \"NotAccepted\");\n\t\t\t\tAssert.That (client.NoRecipientsAccepted, Is.True, \"NoRecipientsAccepted\");\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestNoRecipientsAcceptedAsync ()\n\t\t{\n\t\t\tvar commands = CreateNoRecipientsAcceptedCommands ();\n\n\t\t\tusing (var client = new NoRecipientsAcceptedSmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.MessageNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t\tAssert.That (sex.StatusCode, Is.EqualTo (SmtpStatusCode.TransactionFailed), \"Unexpected SmtpStatusCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.NotAccepted, Is.EqualTo (1), \"NotAccepted\");\n\t\t\t\tAssert.That (client.NoRecipientsAccepted, Is.True, \"NoRecipientsAccepted\");\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand>  CreateNoRecipientsAcceptedPipelinedCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+pipelining.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\nRCPT TO:<recipient@example.com>\\r\\n\", \"pipelined-mailbox-unavailable.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNoRecipientsAcceptedPipelined ()\n\t\t{\n\t\t\tvar commands = CreateNoRecipientsAcceptedPipelinedCommands ();\n\n\t\t\tusing (var client = new NoRecipientsAcceptedSmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.MessageNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t\tAssert.That (sex.StatusCode, Is.EqualTo (SmtpStatusCode.TransactionFailed), \"Unexpected SmtpStatusCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.NotAccepted, Is.EqualTo (1), \"NotAccepted\");\n\t\t\t\tAssert.That (client.NoRecipientsAccepted, Is.True, \"NoRecipientsAccepted\");\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestNoRecipientsAcceptedPipelinedAsync ()\n\t\t{\n\t\t\tvar commands = CreateNoRecipientsAcceptedPipelinedCommands ();\n\n\t\t\tusing (var client = new NoRecipientsAcceptedSmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an SmtpException\");\n\t\t\t\t} catch (SmtpCommandException sex) {\n\t\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (SmtpErrorCode.MessageNotAccepted), \"Unexpected SmtpErrorCode\");\n\t\t\t\t\tAssert.That (sex.StatusCode, Is.EqualTo (SmtpStatusCode.TransactionFailed), \"Unexpected SmtpStatusCode\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.NotAccepted, Is.EqualTo (1), \"NotAccepted\");\n\t\t\t\tAssert.That (client.NoRecipientsAccepted, Is.True, \"NoRecipientsAccepted\");\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateUnauthorizedAccessExceptionCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"auth-required.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"comcast-rset.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnauthorizedAccessException ()\n\t\t{\n\t\t\tvar commands = CreateUnauthorizedAccessExceptionCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an ServiceNotAuthenticatedException\");\n\t\t\t\t} catch (ServiceNotAuthenticatedException) {\n\t\t\t\t\t// this is the expected exception\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUnauthorizedAccessExceptionAsync ()\n\t\t{\n\t\t\tvar commands = CreateUnauthorizedAccessExceptionCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an ServiceNotAuthenticatedException\");\n\t\t\t\t} catch (ServiceNotAuthenticatedException) {\n\t\t\t\t\t// this is the expected exception\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Expected the client to still be connected\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateResetErrorHandlingCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com>\\r\\n\", \"auth-required.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RSET\\r\\n\", \"bad-command-sequence.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestResetErrorHandling ()\n\t\t{\n\t\t\tvar commands = CreateResetErrorHandlingCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\tAssert.Fail (\"Expected an ServiceNotAuthenticatedException\");\n\t\t\t\t} catch (ServiceNotAuthenticatedException) {\n\t\t\t\t\t// this is the expected exception\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected due to RSET error\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestResetErrorHandlingAsync ()\n\t\t{\n\t\t\tvar commands = CreateResetErrorHandlingCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateSimpleMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\tAssert.Fail (\"Expected an ServiceNotAuthenticatedException\");\n\t\t\t\t} catch (ServiceNotAuthenticatedException) {\n\t\t\t\t\t// this is the expected exception\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect this exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Expected the client to be disconnected due to RSET error\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tclass DsnSmtpClient : SmtpClient\n\t\t{\n\t\t\tpublic DsnSmtpClient ()\n\t\t\t{\n\t\t\t}\n\n\t\t\tprotected override string GetEnvelopeId (MimeMessage message)\n\t\t\t{\n\t\t\t\tvar id = base.GetEnvelopeId (message);\n\n\t\t\t\tAssert.That (id, Is.Null);\n\n\t\t\t\treturn message.MessageId;\n\t\t\t}\n\n\t\t\tpublic DeliveryStatusNotification? DeliveryStatusNotifications {\n\t\t\t\tget; set;\n\t\t\t}\n\n\t\t\tprotected override DeliveryStatusNotification? GetDeliveryStatusNotifications (MimeMessage message, MailboxAddress mailbox)\n\t\t\t{\n\t\t\t\tvar notify = base.GetDeliveryStatusNotifications (message, mailbox);\n\n\t\t\t\tAssert.That (notify.HasValue, Is.False);\n\n\t\t\t\treturn DeliveryStatusNotifications;\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateDeliveryStatusNotificationCommands (MimeMessage message)\n\t\t{\n\t\t\tvar mailFrom = string.Format (\"MAIL FROM:<sender@example.com> BODY=8BITMIME ENVID={0} RET=HDRS\\r\\n\", message.MessageId);\n\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+dsn.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (mailFrom, \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com> NOTIFY=SUCCESS,FAILURE,DELAY ORCPT=rfc822;recipient@example.com\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDeliveryStatusNotification ()\n\t\t{\n\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\tmessage.MessageId = MimeUtils.GenerateMessageId ();\n\n\t\t\t\tvar commands = CreateDeliveryStatusNotificationCommands (message);\n\n\t\t\t\tusing (var client = new DsnSmtpClient ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Dsn), Is.True, \"Failed to detect DSN extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Pipelining), Is.True, \"Failed to detect PIPELINING extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// disable pipelining\n\t\t\t\t\tclient.Capabilities &= ~SmtpCapabilities.Pipelining;\n\n\t\t\t\t\tclient.DeliveryStatusNotificationType = DeliveryStatusNotificationType.HeadersOnly;\n\t\t\t\t\tclient.DeliveryStatusNotifications = DeliveryStatusNotification.Delay | DeliveryStatusNotification.Failure | DeliveryStatusNotification.Success;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestDeliveryStatusNotificationAsync ()\n\t\t{\n\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\tmessage.MessageId = MimeUtils.GenerateMessageId ();\n\n\t\t\t\tvar commands = CreateDeliveryStatusNotificationCommands (message);\n\n\t\t\t\tusing (var client = new DsnSmtpClient ()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Dsn), Is.True, \"Failed to detect DSN extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Pipelining), Is.True, \"Failed to detect PIPELINING extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// disable pipelining\n\t\t\t\t\tclient.Capabilities &= ~SmtpCapabilities.Pipelining;\n\n\t\t\t\t\tclient.DeliveryStatusNotificationType = DeliveryStatusNotificationType.HeadersOnly;\n\t\t\t\t\tclient.DeliveryStatusNotifications = DeliveryStatusNotification.Delay | DeliveryStatusNotification.Failure | DeliveryStatusNotification.Success;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateDeliveryStatusNotificationWithHexEncodeCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+dsn.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=8BITMIME ENVID=123456789+2B+3Dabc@+E5+90+8D+E3+81+8C+E3+83+89+E3+83+A1+E3+82+A4+E3+83+B3.com RET=FULL\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@xn--v8jxj3d1dzdz08w.com> NOTIFY=NEVER ORCPT=rfc822;recipient@xn--v8jxj3d1dzdz08w.com\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDeliveryStatusNotificationWithHexEncode ()\n\t\t{\n\t\t\tvar commands = CreateDeliveryStatusNotificationWithHexEncodeCommands ();\n\n\t\t\tusing (var client = new DsnSmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Dsn), Is.True, \"Failed to detect DSN extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Pipelining), Is.True, \"Failed to detect PIPELINING extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable pipelining\n\t\t\t\tclient.Capabilities &= ~SmtpCapabilities.Pipelining;\n\n\t\t\t\tclient.DeliveryStatusNotificationType = DeliveryStatusNotificationType.Full;\n\t\t\t\tclient.DeliveryStatusNotifications = DeliveryStatusNotification.Never;\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\t\tmessage.MessageId = \"123456789+=abc@名がドメイン.com\";\n\n\t\t\t\t\t\tmessage.To.Clear ();\n\t\t\t\t\t\tmessage.To.Add (new MailboxAddress (\"\", \"recipient@名がドメイン.com\"));\n\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestDeliveryStatusNotificationWithHexEncodeAsync ()\n\t\t{\n\t\t\tvar commands = CreateDeliveryStatusNotificationWithHexEncodeCommands ();\n\n\t\t\tusing (var client = new DsnSmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Dsn), Is.True, \"Failed to detect DSN extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Pipelining), Is.True, \"Failed to detect PIPELINING extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\t// disable pipelining\n\t\t\t\tclient.Capabilities &= ~SmtpCapabilities.Pipelining;\n\n\t\t\t\tclient.DeliveryStatusNotificationType = DeliveryStatusNotificationType.Full;\n\t\t\t\tclient.DeliveryStatusNotifications = DeliveryStatusNotification.Never;\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\t\tmessage.MessageId = \"123456789+=abc@名がドメイン.com\";\n\n\t\t\t\t\t\tmessage.To.Clear ();\n\t\t\t\t\t\tmessage.To.Add (new MailboxAddress (\"\", \"recipient@名がドメイン.com\"));\n\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateRequireTlsCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand ($\"EHLO {SmtpClient.DefaultLocalDomain}\\r\\n\", \"comcast-ehlo+requiretls.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\\r\\n\", \"comcast-auth-plain.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=8BITMIME REQUIRETLS\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"MAIL FROM:<sender@example.com> BODY=8BITMIME\\r\\n\", \"comcast-mail-from.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"RCPT TO:<recipient@example.com>\\r\\n\", \"comcast-rcpt-to.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"DATA\\r\\n\", \"comcast-data.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\".\\r\\n\", \"comcast-data-done.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"QUIT\\r\\n\", \"comcast-quit.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRequireTls ()\n\t\t{\n\t\t\tvar commands = CreateRequireTlsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.RequireTLS), Is.True, \"Failed to detect REQUIRETLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Authenticate (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.RequireTLS = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ())\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\t\tmessage.Headers.Add (HeaderId.TLSRequired, \"No\");\n\t\t\t\t\t\tclient.Send (message);\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Disconnect (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRequireTlsAsync ()\n\t\t{\n\t\t\tvar commands = CreateRequireTlsCommands ();\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.RequireTLS), Is.True, \"Failed to detect REQUIRETLS extension\");\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.AuthenticateAsync (\"username\", \"password\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Authenticate: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tclient.RequireTLS = true;\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ())\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tusing (var message = CreateEightBitMessage ()) {\n\t\t\t\t\t\tmessage.Headers.Add (HeaderId.TLSRequired, \"No\");\n\t\t\t\t\t\tawait client.SendAsync (message);\n\t\t\t\t\t}\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Send: {ex}\");\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Disconnect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.False, \"Failed to disconnect\");\n\t\t\t}\n\t\t}\n\n\t\tclass CustomSmtpClient : SmtpClient\n\t\t{\n\t\t\tpublic SmtpResponse SendCommand (string command)\n\t\t\t{\n\t\t\t\treturn SendCommand (command, CancellationToken.None);\n\t\t\t}\n\n\t\t\tpublic Task<SmtpResponse> SendCommandAsync (string command)\n\t\t\t{\n\t\t\t\treturn SendCommandAsync (command, CancellationToken.None);\n\t\t\t}\n\t\t}\n\n\t\tstatic List<SmtpReplayCommand> CreateCustomCommandCommands ()\n\t\t{\n\t\t\treturn new List<SmtpReplayCommand> {\n\t\t\t\tnew SmtpReplayCommand (\"\", \"comcast-greeting.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EHLO unit-tests.mimekit.org\\r\\n\", \"comcast-ehlo.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"VRFY Smith\\r\\n\", \"rfc0821-vrfy.txt\"),\n\t\t\t\tnew SmtpReplayCommand (\"EXPN Example-People\\r\\n\", \"rfc0821-expn.txt\")\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCustomCommand ()\n\t\t{\n\t\t\tvar commands = CreateCustomCommandCommands ();\n\n\t\t\tusing (var client = new CustomSmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\tAssert.Throws<ServiceNotConnectedException> (() => client.SendCommand (\"COMMAND\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (new SmtpReplayStream (commands, false), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => client.SendCommand (null));\n\n\t\t\t\tSmtpResponse response = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tresponse = client.SendCommand (\"VRFY Smith\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Verify: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (response, Is.Not.Null, \"VRFY result\");\n\t\t\t\tAssert.That (response.StatusCode, Is.EqualTo (SmtpStatusCode.Ok), \"VRFY response code\");\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (\"Fred Smith <Smith@USC-ISIF.ARPA>\"), \"VRFY response\");\n\n\t\t\t\ttry {\n\t\t\t\t\tresponse = client.SendCommand (\"EXPN Example-People\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Expand: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (response, Is.Not.Null, \"EXPN result\");\n\t\t\t\tAssert.That (response.StatusCode, Is.EqualTo (SmtpStatusCode.Ok), \"EXPN response code\");\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (\"Jon Postel <Postel@USC-ISIF.ARPA>\\nFred Fonebone <Fonebone@USC-ISIQ.ARPA>\\nSam Q. Smith <SQSmith@USC-ISIQ.ARPA>\\nQuincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\\n<joe@foo-unix.ARPA>\\n<xyz@bar-unix.ARPA>\"), \"EXPN response\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestCustomCommandAsync ()\n\t\t{\n\t\t\tvar commands = CreateCustomCommandCommands ();\n\n\t\t\tusing (var client = new CustomSmtpClient ()) {\n\t\t\t\tclient.LocalDomain = \"unit-tests.mimekit.org\";\n\n\t\t\t\tAssert.ThrowsAsync<ServiceNotConnectedException> (async () => await client.SendCommandAsync (\"COMMAND\"));\n\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (new SmtpReplayStream (commands, true), \"localhost\", 25, SecureSocketOptions.None);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Connect: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (client.IsConnected, Is.True, \"Client failed to connect.\");\n\t\t\t\tAssert.That (client.IsSecure, Is.False, \"IsSecure should be false.\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, \"Failed to detect AUTH extension\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"LOGIN\"), \"Failed to detect the LOGIN auth mechanism\");\n\t\t\t\tAssert.That (client.AuthenticationMechanisms, Does.Contain (\"PLAIN\"), \"Failed to detect the PLAIN auth mechanism\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, \"Failed to detect 8BITMIME extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, \"Failed to detect ENHANCEDSTATUSCODES extension\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, \"Failed to detect SIZE extension\");\n\t\t\t\tAssert.That (client.MaxSize, Is.EqualTo (36700160), \"Failed to parse SIZE correctly\");\n\n\t\t\t\tAssert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, \"Failed to detect STARTTLS extension\");\n\n\t\t\t\tAssert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);\n\n\t\t\t\tAssert.That (client.Timeout, Is.EqualTo (120000), \"Timeout\");\n\t\t\t\tclient.Timeout *= 2;\n\n\t\t\t\tAssert.ThrowsAsync<ArgumentNullException> (async () => await client.SendCommandAsync (null));\n\n\t\t\t\tSmtpResponse response = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tresponse = await client.SendCommandAsync (\"VRFY Smith\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Verify: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (response, Is.Not.Null, \"VRFY result\");\n\t\t\t\tAssert.That (response.StatusCode, Is.EqualTo (SmtpStatusCode.Ok), \"VRFY response code\");\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (\"Fred Smith <Smith@USC-ISIF.ARPA>\"), \"VRFY response\");\n\n\t\t\t\ttry {\n\t\t\t\t\tresponse = await client.SendCommandAsync (\"EXPN Example-People\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Fail ($\"Did not expect an exception in Expand: {ex}\");\n\t\t\t\t}\n\n\t\t\t\tAssert.That (response, Is.Not.Null, \"EXPN result\");\n\t\t\t\tAssert.That (response.StatusCode, Is.EqualTo (SmtpStatusCode.Ok), \"EXPN response code\");\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (\"Jon Postel <Postel@USC-ISIF.ARPA>\\nFred Fonebone <Fonebone@USC-ISIQ.ARPA>\\nSam Q. Smith <SQSmith@USC-ISIQ.ARPA>\\nQuincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\\n<joe@foo-unix.ARPA>\\n<xyz@bar-unix.ARPA>\"), \"EXPN response\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpCommandExceptionTests.cs",
    "content": "﻿//\n// SmtpCommandExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MimeKit;\nusing MailKit.Net.Smtp;\n\nnamespace UnitTests.Net.Smtp {\n\t[TestFixture]\n\tpublic class SmtpCommandExceptionTests\n\t{\n\t\tstatic void TestSerialization (SmtpCommandException expected)\n\t\t{\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SmtpCommandException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (expected.ErrorCode), \"Unexpected ErrorCode.\");\n\t\t\t\tAssert.That (ex.StatusCode, Is.EqualTo (expected.StatusCode), \"Unexpected StatusCode.\");\n\n\t\t\t\tif (expected.Mailbox != null)\n\t\t\t\t\tAssert.That (ex.Mailbox, Is.EqualTo (expected.Mailbox), \"Unexpected Mailbox.\");\n\t\t\t\telse\n\t\t\t\t\tAssert.That (ex.Mailbox, Is.Null, \"Expected Mailbox to be null.\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpCommandException ()\n\t\t{\n\t\t\tTestSerialization (new SmtpCommandException (SmtpErrorCode.RecipientNotAccepted, SmtpStatusCode.MailboxUnavailable,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t new MailboxAddress (\"Unit Tests\", \"example@mimekit.net\"), \"Message\"));\n\t\t\tTestSerialization (new SmtpCommandException (SmtpErrorCode.RecipientNotAccepted, SmtpStatusCode.MailboxUnavailable,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t new MailboxAddress (\"Unit Tests\", \"example@mimekit.net\"), \"Message\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t new IOException (\"There was an IO error.\")));\n\t\t\tTestSerialization (new SmtpCommandException (SmtpErrorCode.MessageNotAccepted, SmtpStatusCode.InsufficientStorage,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"Message\"));\n\t\t\tTestSerialization (new SmtpCommandException (SmtpErrorCode.MessageNotAccepted, SmtpStatusCode.InsufficientStorage,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \"Message\", new IOException (\"There was an IO error.\")));\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpDataFilterTests.cs",
    "content": "﻿//\n// SmtpDataFilterTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MimeKit.IO;\nusing MailKit.Net.Smtp;\n\nnamespace UnitTests.Net.Smtp {\n\t[TestFixture]\n\tpublic class SmtpDataFilterTests\n\t{\n\t\tconst string SimpleDataInput = \"This is a simple stream of text\\r\\nthat has no need to be byte-stuffed\\r\\nat all.\\r\\n\\r\\nPlease don't get byte-stuffed!\\r\\n\";\n\t\tconst string ComplexDataInput = \"This is a bit more complicated\\r\\n... This line starts with a '.' and\\r\\ntherefore needs to be byte-stuffed\\r\\n. And so does this line!\\r\\n\";\n\t\tconst string ComplexDataOutput = \"This is a bit more complicated\\r\\n.... This line starts with a '.' and\\r\\ntherefore needs to be byte-stuffed\\r\\n.. And so does this line!\\r\\n\";\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilterDecode ()\n\t\t{\n\t\t\tvar inputs = new string[] { SimpleDataInput, ComplexDataOutput };\n\t\t\tvar outputs = new string[] { SimpleDataInput, ComplexDataInput };\n\t\t\tvar filter = new SmtpDataFilter (decode: true);\n\n\t\t\tfor (int i = 0; i < inputs.Length; i++) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tbyte[] buffer;\n\t\t\t\t\tint n;\n\n\t\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (inputs[i]);\n\t\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\t\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t\t}\n\n\t\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (outputs[i]));\n\n\t\t\t\t\tfilter.Reset ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilter ()\n\t\t{\n\t\t\tvar inputs = new string[] { SimpleDataInput, ComplexDataInput };\n\t\t\tvar outputs = new string[] { SimpleDataInput, ComplexDataOutput };\n\t\t\tvar filter = new SmtpDataFilter ();\n\n\t\t\tfor (int i = 0; i < inputs.Length; i++) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tbyte[] buffer;\n\t\t\t\t\tint n;\n\n\t\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (inputs[i]);\n\t\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\t\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t\t}\n\n\t\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (outputs[i]));\n\n\t\t\t\t\tfilter.Reset ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilterEnsureNewLine ()\n\t\t{\n\t\t\tvar inputs = new string[] { SimpleDataInput.TrimEnd (), ComplexDataInput.TrimEnd () };\n\t\t\tvar outputs = new string[] { SimpleDataInput, ComplexDataOutput };\n\t\t\tvar filter = new SmtpDataFilter ();\n\n\t\t\tfor (int i = 0; i < inputs.Length; i++) {\n\t\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\t\tbyte[] buffer;\n\t\t\t\t\tint n;\n\n\t\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (inputs[i]);\n\t\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\t\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t\t}\n\n\t\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\t\tAssert.That (text, Is.EqualTo (outputs[i]));\n\n\t\t\t\t\tfilter.Reset ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilterBufferBoundaryNewLine ()\n\t\t{\n\t\t\tstring output = new string ('x', 78) + \"\\r\\n..hello\\r\\n\";\n\t\t\tvar filter = new SmtpDataFilter ();\n\n\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\tbyte[] buffer;\n\t\t\t\tint n;\n\n\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (new string ('x', 78) + \"\\r\\n\");\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (\".hello\\r\\n\");\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t}\n\n\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\tAssert.That (text, Is.EqualTo (output));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilterBufferBoundaryNewLineEnsureNewLine ()\n\t\t{\n\t\t\tstring output = new string ('x', 78) + \"\\r\\n..hello\\r\\n\";\n\t\t\tvar filter = new SmtpDataFilter ();\n\n\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\tbyte[] buffer;\n\t\t\t\tint n;\n\n\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (new string ('x', 78) + \"\\r\\n\");\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (\".hello\");\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t}\n\n\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\tAssert.That (text, Is.EqualTo (output));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilterBufferBoundaryNonNewLine ()\n\t\t{\n\t\t\tstring output = new string ('x', 72) + \".hello\\r\\n\";\n\t\t\tvar filter = new SmtpDataFilter ();\n\n\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\tbyte[] buffer;\n\t\t\t\tint n;\n\n\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (new string ('x', 72));\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (\".hello\\r\\n\");\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t}\n\n\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\tAssert.That (text, Is.EqualTo (output));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpDataFilterBufferBoundaryNonNewLineEnsureNewLine ()\n\t\t{\n\t\t\tstring output = new string ('x', 72) + \".hello\\r\\n\";\n\t\t\tvar filter = new SmtpDataFilter ();\n\n\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\tbyte[] buffer;\n\t\t\t\tint n;\n\n\t\t\t\tusing (var filtered = new FilteredStream (memory)) {\n\t\t\t\t\tfiltered.Add (filter);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (new string ('x', 72));\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tbuffer = Encoding.ASCII.GetBytes (\".hello\");\n\t\t\t\t\tfiltered.Write (buffer, 0, buffer.Length);\n\n\t\t\t\t\tfiltered.Flush ();\n\t\t\t\t}\n\n\t\t\t\tbuffer = memory.GetBuffer ();\n\t\t\t\tn = (int) memory.Length;\n\n\t\t\t\tvar text = Encoding.ASCII.GetString (buffer, 0, n);\n\n\t\t\t\tAssert.That (text, Is.EqualTo (output));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpProtocolExceptionTests.cs",
    "content": "﻿//\n// SmtpProtocolExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit.Net.Smtp;\n\nnamespace UnitTests.Net.Smtp {\n\t[TestFixture]\n\tpublic class SmtpProtocolExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestSerialization ()\n\t\t{\n\t\t\tvar expected = new SmtpProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\", new Exception (\"InnerException\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SmtpProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new SmtpProtocolException (\"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SmtpProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new SmtpProtocolException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SmtpProtocolException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpReplayStream.cs",
    "content": "﻿//\n// SmtpReplayStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing NUnit.Framework;\n\nnamespace UnitTests.Net.Smtp {\n\tpublic enum SmtpResponseMode\n\t{\n\t\tBlit,\n\t\tChar,\n\t\tLine\n\t}\n\n\tclass SmtpReplayCommand\n\t{\n\t\tpublic string Command { get; private set; }\n\t\tpublic string Resource { get; private set; }\n\t\tpublic SmtpReplayState NextState { get; private set; }\n\t\tpublic SmtpResponseMode ResponseMode { get; set; }\n\n\t\tpublic SmtpReplayCommand (string command, string resource)\n\t\t{\n\t\t\tCommand = command;\n\t\t\tResource = resource;\n\n\t\t\tif (command == \"DATA\\r\\n\" || command.EndsWith (\"\\r\\nDATA\\r\\n\", StringComparison.Ordinal))\n\t\t\t\tNextState = SmtpReplayState.WaitForEndOfData;\n\t\t\telse\n\t\t\t\tNextState = SmtpReplayState.WaitForCommand;\n\t\t}\n\n\t\tpublic SmtpReplayCommand (string command, string resource, SmtpReplayState nextState = SmtpReplayState.WaitForCommand)\n\t\t{\n\t\t\tCommand = command;\n\t\t\tResource = resource;\n\t\t\tNextState = nextState;\n\t\t}\n\t}\n\n\tenum SmtpReplayState {\n\t\tSendResponse,\n\t\tWaitForCommand,\n\t\tWaitForEndOfData,\n\t\tUnexpectedDisconnect\n\t}\n\n\tclass SmtpReplayStream : Stream\n\t{\n\t\treadonly MemoryStream sent = new MemoryStream ();\n\t\treadonly IList<SmtpReplayCommand> commands;\n\t\treadonly SmtpResponseMode mode;\n\t\treadonly bool asyncIO;\n\t\tint timeout = 100000;\n\t\tSmtpReplayState state;\n\t\tStream stream;\n\t\tbool disposed;\n\t\tbool isAsync;\n\t\tint index;\n\n\t\tpublic SmtpReplayStream (IList<SmtpReplayCommand> commands, bool asyncIO, SmtpResponseMode mode = SmtpResponseMode.Blit)\n\t\t{\n\t\t\tstream = GetResourceStream (commands[0].Resource);\n\t\t\tstate = SmtpReplayState.SendResponse;\n\t\t\tthis.commands = commands;\n\t\t\tthis.asyncIO = asyncIO;\n\t\t\tthis.mode = mode;\n\t\t}\n\n\t\tvoid CheckDisposed ()\n\t\t{\n\t\t\tif (disposed)\n\t\t\t\tthrow new ObjectDisposedException (\"SmtpReplayStream\");\n\t\t}\n\n\t\t#region implemented abstract members of Stream\n\n\t\tpublic override bool CanRead {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget { return false; }\n\t\t}\n\n\t\tpublic override bool CanWrite {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override bool CanTimeout {\n\t\t\tget { return true; }\n\t\t}\n\n\t\tpublic override long Length {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t}\n\n\t\tpublic override long Position {\n\t\t\tget { throw new NotSupportedException (); }\n\t\t\tset { throw new NotSupportedException (); }\n\t\t}\n\n\t\tpublic override int ReadTimeout {\n\t\t\tget { return timeout; }\n\t\t\tset { timeout = value; }\n\t\t}\n\n\t\tpublic override int WriteTimeout {\n\t\t\tget { return timeout; }\n\t\t\tset { timeout = value; }\n\t\t}\n\n\t\tpublic override int Read (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (asyncIO) {\n\t\t\t\tAssert.That (isAsync, Is.True, \"Trying to Read in an async unit test.\");\n\t\t\t} else {\n\t\t\t\tAssert.That (isAsync, Is.False, \"Trying to ReadAsync in a non-async unit test.\");\n\t\t\t}\n\n\t\t\tif (state == SmtpReplayState.UnexpectedDisconnect)\n\t\t\t\treturn 0;\n\n\t\t\tAssert.That (state, Is.EqualTo (SmtpReplayState.SendResponse), \"Trying to read when no command given.\");\n\t\t\tAssert.That (stream, Is.Not.Null, \"Trying to read when no data available.\");\n\n\t\t\tint nread = 0;\n\n\t\t\tswitch (mode) {\n\t\t\tcase SmtpResponseMode.Blit:\n\t\t\t\tnread = stream.Read (buffer, offset, count);\n\t\t\t\tbreak;\n\t\t\tcase SmtpResponseMode.Char:\n\t\t\t\tnread = stream.Read (buffer, offset, 1);\n\t\t\t\tbreak;\n\t\t\tcase SmtpResponseMode.Line:\n\t\t\t\twhile (nread < count && stream.Read (buffer, offset, 1) > 0) {\n\t\t\t\t\tnread++;\n\n\t\t\t\t\tif (buffer[offset] == (byte) '\\n')\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\toffset++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (stream.Position == stream.Length) {\n\t\t\t\tstate = commands[index].NextState;\n\t\t\t\tstream.Dispose ();\n\t\t\t\tstream = null;\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\treturn nread;\n\t\t}\n\n\t\tpublic override Task<int> ReadAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tisAsync = true;\n\n\t\t\ttry {\n\t\t\t\treturn Task.FromResult (Read (buffer, offset, count));\n\t\t\t} finally {\n\t\t\t\tisAsync = false;\n\t\t\t}\n\t\t}\n\n\t\tStream GetResourceStream (string name)\n\t\t{\n\t\t\treturn GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Smtp.Resources.\" + name);\n\t\t}\n\n\t\tpublic override void Write (byte[] buffer, int offset, int count)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tif (asyncIO) {\n\t\t\t\tAssert.That (isAsync, Is.True, \"Trying to Write in an async unit test.\");\n\t\t\t} else {\n\t\t\t\tAssert.That (isAsync, Is.False, \"Trying to WriteAsync in a non-async unit test.\");\n\t\t\t}\n\n\t\t\tAssert.That (state, Is.Not.EqualTo (SmtpReplayState.SendResponse), \"Trying to write when a command has already been given.\");\n\n\t\t\tsent.Write (buffer, offset, count);\n\n\t\t\tif (sent.Length >= commands[index].Command.Length) {\n\t\t\t\tif (state == SmtpReplayState.WaitForCommand) {\n\t\t\t\t\tvar command = Encoding.UTF8.GetString (sent.GetBuffer (), 0, (int) sent.Length);\n\n\t\t\t\t\tif (command.StartsWith (\"MAIL FROM:\", StringComparison.Ordinal)) {\n\t\t\t\t\t\tvar startIndex = command.IndexOf (\" SIZE=\", StringComparison.Ordinal);\n\n\t\t\t\t\t\tif (index != -1) {\n\t\t\t\t\t\t\tint endIndex = startIndex + \" SIZE=\".Length;\n\n\t\t\t\t\t\t\twhile (command[endIndex] != ' ' && command[endIndex] != '\\r')\n\t\t\t\t\t\t\t\tendIndex++;\n\n\t\t\t\t\t\t\tcommand = command.Remove (startIndex, endIndex - startIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tAssert.That (command, Is.EqualTo (commands[index].Command), \"Commands did not match.\");\n\n\t\t\t\t\tstream = GetResourceStream (commands[index].Resource);\n\t\t\t\t\tstate = SmtpReplayState.SendResponse;\n\t\t\t\t\tsent.SetLength (0);\n\t\t\t\t} else if (sent.Length > 5) {\n\t\t\t\t\tvar command = Encoding.ASCII.GetString (sent.GetBuffer (), (int) sent.Length - 5, 5);\n\n\t\t\t\t\tif (command == \"\\r\\n.\\r\\n\") {\n\t\t\t\t\t\tstream = GetResourceStream (commands[index].Resource);\n\t\t\t\t\t\tstate = SmtpReplayState.SendResponse;\n\t\t\t\t\t\tsent.SetLength (0);\n\t\t\t\t\t}\n\t\t\t\t} else if (sent.Length == 3) {\n\t\t\t\t\tvar command = Encoding.ASCII.GetString (sent.GetBuffer (), 0, (int) sent.Length);\n\n\t\t\t\t\tif (command == \".\\r\\n\") {\n\t\t\t\t\t\tstream = GetResourceStream (commands[index].Resource);\n\t\t\t\t\t\tstate = SmtpReplayState.SendResponse;\n\t\t\t\t\t\tsent.SetLength (0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic override Task WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)\n\t\t{\n\t\t\tisAsync = true;\n\n\t\t\ttry {\n\t\t\t\tWrite (buffer, offset, count);\n\t\t\t\treturn Task.FromResult (true);\n\t\t\t} finally {\n\t\t\t\tisAsync = false;\n\t\t\t}\n\t\t}\n\n\t\tpublic override void Flush ()\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tAssert.That (asyncIO, Is.False, \"Trying to Flush in an async unit test.\");\n\t\t}\n\n\t\tpublic override Task FlushAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tCheckDisposed ();\n\n\t\t\tAssert.That (asyncIO, Is.True, \"Trying to FlushAsync in a non-async unit test.\");\n\n\t\t\treturn Task.FromResult (true);\n\t\t}\n\n\t\tpublic override long Seek (long offset, SeekOrigin origin)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\tpublic override void SetLength (long value)\n\t\t{\n\t\t\tthrow new NotSupportedException ();\n\t\t}\n\n\t\t#endregion\n\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tbase.Dispose (disposing);\n\t\t\tdisposed = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/Smtp/SmtpStreamTests.cs",
    "content": "﻿//\n// SmtpStreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Security.Cryptography;\n\nusing MailKit;\nusing MailKit.Net.Smtp;\n\nnamespace UnitTests.Net.Smtp {\n\t[TestFixture]\n\tpublic class SmtpStreamTests\n\t{\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeek ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.That (stream.CanRead, Is.True);\n\t\t\t\tAssert.That (stream.CanWrite, Is.True);\n\t\t\t\tAssert.That (stream.CanSeek, Is.False);\n\t\t\t\tAssert.That (stream.CanTimeout, Is.True);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSetTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tstream.ReadTimeout = 5;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (5), \"ReadTimeout\");\n\n\t\t\t\tstream.WriteTimeout = 7;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (7), \"WriteTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRead ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.Throws<NotImplementedException> (() => stream.Read (buffer, 0, buffer.Length));\n\t\t\t\tAssert.ThrowsAsync<NotImplementedException> (async () => await stream.ReadAsync (buffer, 0, buffer.Length));\n\t\t\t}\n\t\t}\n\n\t\t[TestCase (\"XXX\")]\n\t\t[TestCase (\"0\")]\n\t\t[TestCase (\"01\")]\n\t\t[TestCase (\"012\")]\n\t\t[TestCase (\"1234\")]\n\t\tpublic void TestReadResponseInvalidStatusCode (string statusCode)\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buffer = Encoding.ASCII.GetBytes ($\"{statusCode} This is an invalid response.\\r\\n\");\n\t\t\t\tvar dummy = (MemoryStream) stream.Stream;\n\n\t\t\t\tdummy.Write (buffer, 0, buffer.Length);\n\t\t\t\tdummy.Position = 0;\n\n\t\t\t\tAssert.Throws<SmtpProtocolException> (() => stream.ReadResponse (CancellationToken.None));\n\t\t\t}\n\t\t}\n\n\t\tstatic string GenerateCrossBoundaryResponse (int statusCodeUnderflow)\n\t\t{\n\t\t\tconst string lastLine = \"250 ...And this is the final line of the response.\\r\\n\";\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tint lineNumber = 1;\n\t\t\tstring line;\n\n\t\t\tdo {\n\t\t\t\tline = $\"250-This is line #{lineNumber++} of a really long SMTP response.\\r\\n\";\n\n\t\t\t\tif (builder.Length + line.Length + 6 + statusCodeUnderflow > 4096)\n\t\t\t\t\tbreak;\n\n\t\t\t\tbuilder.Append (line);\n\t\t\t} while (true);\n\n\t\t\tline = \"250-\" + new string ('a', 4096 - builder.Length - 6 - statusCodeUnderflow) + \"\\r\\n\";\n\t\t\tbuilder.Append (line);\n\t\t\tbuilder.Append (lastLine);\n\n\t\t\t// At this point, the last line's status code (and the following <SPACE>) is just barely\n\t\t\t// contained within the first 4096 byte read.\n\n\t\t\tvar input = builder.ToString ();\n\n\t\t\tvar expected = lastLine.Substring (statusCodeUnderflow);\n\t\t\tvar buffer2 = input.Substring (4096);\n\n\t\t\tAssert.That (buffer2, Is.EqualTo (expected));\n\n\t\t\treturn input;\n\t\t}\n\n\t\t[TestCase (0)]\n\t\t[TestCase (1)]\n\t\t[TestCase (2)]\n\t\t[TestCase (3)]\n\t\t[TestCase (4)]\n\t\tpublic void TestReadResponseStatusCodeUnderflow (int underflow)\n\t\t{\n\t\t\tvar input = GenerateCrossBoundaryResponse (underflow);\n\t\t\tvar expected = input.Replace (\"250-\", \"\").Replace (\"250 \", \"\").Replace (\"\\r\\n\", \"\\n\").TrimEnd ();\n\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buffer = Encoding.ASCII.GetBytes (input);\n\t\t\t\tvar dummy = (MemoryStream) stream.Stream;\n\n\t\t\t\tdummy.Write (buffer, 0, buffer.Length);\n\t\t\t\tdummy.Position = 0;\n\n\t\t\t\tvar response = stream.ReadResponse (CancellationToken.None);\n\n\t\t\t\tAssert.That ((int) response.StatusCode, Is.EqualTo (250));\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadResponseMismatchedResponseCodes ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buffer = Encoding.ASCII.GetBytes (\"250-This is the first line of a response.\\r\\n340 And this is a mismatched response code.\\r\\n\");\n\t\t\t\tvar dummy = (MemoryStream) stream.Stream;\n\n\t\t\t\tdummy.Write (buffer, 0, buffer.Length);\n\t\t\t\tdummy.Position = 0;\n\n\t\t\t\tAssert.Throws<SmtpProtocolException> (() => stream.ReadResponse (CancellationToken.None));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadResponseLatin1Fallback ()\n\t\t{\n\t\t\tconst string input = \"250-Wikipédia est un projet d'encyclopédie collective en ligne,\\r\\n250-universelle, multilingue et fonctionnant sur le principe du wiki.\\r\\n250-Ce projet vise à offrir un contenu librement réutilisable, objectif\\r\\n250 et vérifiable, que chacun peut modifier et améliorer.\\r\\n\";\n\t\t\tvar expected = input.Replace (\"250-\", \"\").Replace (\"250 \", \"\").Replace (\"\\r\\n\", \"\\n\").TrimEnd ();\n\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buffer = Encoding.GetEncoding (28591).GetBytes (input);\n\t\t\t\tvar dummy = (MemoryStream) stream.Stream;\n\n\t\t\t\tdummy.Write (buffer, 0, buffer.Length);\n\t\t\t\tdummy.Position = 0;\n\n\t\t\t\tvar response = stream.ReadResponse (CancellationToken.None);\n\n\t\t\t\tAssert.That ((int) response.StatusCode, Is.EqualTo (250));\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReadResponseOver4K ()\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\t\t\tvar rngData = new byte[72];\n\n\t\t\twhile (builder.Length < 5120) {\n\t\t\t\tRandomNumberGenerator.Fill (rngData);\n\n\t\t\t\tvar base64 = Convert.ToBase64String (rngData);\n\t\t\t\tbuilder.AppendFormat (\"250-{0}\\r\\n\", base64);\n\t\t\t}\n\n\t\t\tbuilder.Append (\"250 Okay, now we're done.\\r\\n\");\n\n\t\t\tvar input = builder.ToString ();\n\n\t\t\tvar expected = input.Replace (\"250-\", \"\").Replace (\"250 \", \"\").Replace (\"\\r\\n\", \"\\n\").TrimEnd ();\n\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buffer = Encoding.ASCII.GetBytes (input);\n\t\t\t\tvar dummy = (MemoryStream) stream.Stream;\n\n\t\t\t\tdummy.Write (buffer, 0, buffer.Length);\n\t\t\t\tdummy.Position = 0;\n\n\t\t\t\tvar response = stream.ReadResponse (CancellationToken.None);\n\n\t\t\t\tAssert.That ((int) response.StatusCode, Is.EqualTo (250));\n\t\t\t\tAssert.That (response.Response, Is.EqualTo (expected));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSeek ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (0, SeekOrigin.Begin));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Position = 500);\n\t\t\t\tAssert.That (stream.Position, Is.EqualTo (0));\n\t\t\t\tAssert.That (stream.Length, Is.EqualTo (0));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSetLength ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (500));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWrite ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buf1k = RandomNumberGenerator.GetBytes (1024);\n\t\t\t\tvar buf4k = RandomNumberGenerator.GetBytes (4096);\n\t\t\t\tvar buf9k = RandomNumberGenerator.GetBytes (9216);\n\t\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\t\tvar buffer = new byte[8192];\n\t\t\t\tbyte[] mem;\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => stream.Write (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => stream.Write (buffer, 0, -1));\n\n\t\t\t\t// Test #1: write less than 4K to make sure that SmtpStream buffers it\n\t\t\t\tstream.Write (buf1k, 0, buf1k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (0), \"#1\");\n\n\t\t\t\t// Test #2: make sure that flushing the SmtpStream flushes the entire buffer out to the network\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length), \"#2\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf1k[i]), $\"#2 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #3: write exactly 4K to make sure it passes through w/o the need to flush\n\t\t\t\tstream.Write (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf4k.Length), \"#3\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf4k[i]), $\"#3 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #4: write 1k and then write 4k, make sure that only 4k passes thru (last 1k gets buffered)\n\t\t\t\tstream.Write (buf1k, 0, buf1k.Length);\n\t\t\t\tstream.Write (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (4096), \"#4\");\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length + buf4k.Length), \"#4\");\n\t\t\t\tArray.Copy (buf1k, 0, buffer, 0, buf1k.Length);\n\t\t\t\tArray.Copy (buf4k, 0, buffer, buf1k.Length, buf4k.Length);\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length + buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buffer[i]), $\"#4 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #5: write 9k and make sure only the first 8k goes thru (last 1k gets buffered)\n\t\t\t\tstream.Write (buf9k, 0, buf9k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (8192), \"#5\");\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf9k.Length), \"#5\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf9k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf9k[i]), $\"#5 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestWriteAsync ()\n\t\t{\n\t\t\tusing (var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ())) {\n\t\t\t\tvar buf1k = RandomNumberGenerator.GetBytes (1024);\n\t\t\t\tvar buf4k = RandomNumberGenerator.GetBytes (4096);\n\t\t\t\tvar buf9k = RandomNumberGenerator.GetBytes (9216);\n\t\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\t\tvar buffer = new byte[8192];\n\t\t\t\tbyte [] mem;\n\n\t\t\t\t// Test #1: write less than 4K to make sure that SmtpStream buffers it\n\t\t\t\tawait stream.WriteAsync (buf1k, 0, buf1k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (0), \"#1\");\n\n\t\t\t\t// Test #2: make sure that flushing the SmtpStream flushes the entire buffer out to the network\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length), \"#2\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf1k[i]), $\"#2 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #3: write exactly 4K to make sure it passes through w/o the need to flush\n\t\t\t\tawait stream.WriteAsync (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf4k.Length), \"#3\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf4k[i]), $\"#3 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #4: write 1k and then write 4k, make sure that only 4k passes thru (last 1k gets buffered)\n\t\t\t\tawait stream.WriteAsync (buf1k, 0, buf1k.Length);\n\t\t\t\tawait stream.WriteAsync (buf4k, 0, buf4k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (4096), \"#4\");\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf1k.Length + buf4k.Length), \"#4\");\n\t\t\t\tArray.Copy (buf1k, 0, buffer, 0, buf1k.Length);\n\t\t\t\tArray.Copy (buf4k, 0, buffer, buf1k.Length, buf4k.Length);\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf1k.Length + buf4k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buffer[i]), $\"#4 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\n\t\t\t\t// Test #5: write 9k and make sure only the first 8k goes thru (last 1k gets buffered)\n\t\t\t\tawait stream.WriteAsync (buf9k, 0, buf9k.Length);\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (8192), \"#5\");\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (memory.Length, Is.EqualTo (buf9k.Length), \"#5\");\n\t\t\t\tmem = memory.GetBuffer ();\n\t\t\t\tfor (int i = 0; i < buf9k.Length; i++)\n\t\t\t\t\tAssert.That (mem[i], Is.EqualTo (buf9k[i]), $\"#5 byte[{i}]\");\n\t\t\t\tmemory.SetLength (0);\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQueueReallyLongCommand ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\tvar command = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096) + \"\\r\\n\";\n\n\t\t\tstream.QueueCommand (command, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (command));\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestQueueReallyLongCommandAsync ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\t\t\tvar command = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096) + \"\\r\\n\";\n\n\t\t\tawait stream.QueueCommandAsync (command, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (command));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQueueReallyLongCommandAfterShortCommand ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar shortCommand = \"EHLO [192.168.1.1]\\r\\n\";\n\t\t\tvar longCommand = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096) + \"\\r\\n\";\n\n\t\t\tstream.QueueCommand (shortCommand, default);\n\t\t\tstream.QueueCommand (longCommand, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (shortCommand + longCommand));\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestQueueReallyLongCommandAfterShortCommandAsync ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar shortCommand = \"EHLO [192.168.1.1]\\r\\n\";\n\t\t\tvar longCommand = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096) + \"\\r\\n\";\n\n\t\t\tawait stream.QueueCommandAsync (shortCommand, default);\n\t\t\tawait stream.QueueCommandAsync (longCommand, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (shortCommand + longCommand));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQueueOverflowRemainingOutputBufferCommand ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar shortCommand = \"EHLO [192.168.1.1]\\r\\n\";\n\t\t\tvar longCommand = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096 - shortCommand.Length - 22) + \"\\r\\n\";\n\n\t\t\tstream.QueueCommand (shortCommand, default);\n\t\t\tstream.QueueCommand (longCommand, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (shortCommand + longCommand));\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestQueueOverflowRemainingOutputBufferCommandAsync ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar shortCommand = \"EHLO [192.168.1.1]\\r\\n\";\n\t\t\tvar longCommand = \"AUTH GSSAPI YIIkMgYGK\" + new string ('X', 4096 - shortCommand.Length - 22) + \"\\r\\n\";\n\n\t\t\tawait stream.QueueCommandAsync (shortCommand, default);\n\t\t\tawait stream.QueueCommandAsync (longCommand, default);\n\t\t\tstream.Flush ();\n\n\t\t\tvar actual = Encoding.ASCII.GetString (memory.GetBuffer (), 0, (int) memory.Length);\n\n\t\t\tAssert.That (actual, Is.EqualTo (shortCommand + longCommand));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDisconnectOnWriteException ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (throwOnWrite: true), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar command = new string ('a', 4094) + \"\\r\\n\";\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\ttry {\n\t\t\t\tstream.Write (buffer, 0, buffer.Length, CancellationToken.None);\n\t\t\t\tAssert.Fail (\"Expected IOException to be thrown.\");\n\t\t\t} catch (IOException) {\n\t\t\t}\n\n\t\t\tAssert.That (stream.IsConnected, Is.False);\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestDisconnectOnWriteExceptionAsync ()\n\t\t{\n\t\t\tusing var stream = new SmtpStream (new DummyNetworkStream (throwOnWrite: true), new NullProtocolLogger ());\n\t\t\tvar memory = (MemoryStream) stream.Stream;\n\n\t\t\tvar command = new string ('a', 4094) + \"\\r\\n\";\n\t\t\tvar buffer = Encoding.ASCII.GetBytes (command);\n\n\t\t\ttry {\n\t\t\t\tawait stream.WriteAsync (buffer, 0, buffer.Length, CancellationToken.None);\n\t\t\t\tAssert.Fail (\"Expected IOException to be thrown.\");\n\t\t\t} catch (IOException) {\n\t\t\t}\n\n\t\t\tAssert.That (stream.IsConnected, Is.False);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Net/SocketUtilsTests.cs",
    "content": "﻿//\n// SocketUtilsTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Diagnostics;\n\nusing MailKit.Net;\n\nnamespace UnitTests.Net {\n\t[TestFixture]\n\tpublic class SocketUtilsTests\n\t{\n\t\t[Test]\n\t\tpublic void TestConnectTimeout ()\n\t\t{\n\t\t\tvar stopwatch = new Stopwatch ();\n\n\t\t\tstopwatch.Start ();\n\n\t\t\ttry {\n\t\t\t\tSocketUtils.Connect (\"smtp.gmail.com\", 466, null, 10000, CancellationToken.None);\n\t\t\t\tAssert.Fail (\"Expected OperationCanceledException to be thrown.\");\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tstopwatch.Stop ();\n\n\t\t\t\tvar elapsed = stopwatch.Elapsed.TotalSeconds;\n\n\t\t\t\tif (elapsed < 9.5 || elapsed > 12)\n\t\t\t\t\tAssert.Fail ($\"Expected timeout to be around 10 seconds, but was {elapsed} seconds.\");\n\t\t\t\telse\n\t\t\t\t\tAssert.Pass (\"Connect timed out as expected.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Expected TimeoutException to be thrown, but got: {ex}\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestConnectTimeoutAsync ()\n\t\t{\n\t\t\tvar stopwatch = new Stopwatch ();\n\n\t\t\tstopwatch.Start ();\n\n\t\t\ttry {\n\t\t\t\tawait SocketUtils.ConnectAsync (\"smtp.gmail.com\", 466, null, 10000, CancellationToken.None);\n\t\t\t\tAssert.Fail (\"Expected OperationCanceledException to be thrown.\");\n\t\t\t} catch (TimeoutException) {\n\t\t\t\tstopwatch.Stop ();\n\n\t\t\t\tvar elapsed = stopwatch.Elapsed.TotalSeconds;\n\n\t\t\t\tif (elapsed < 9.5 || elapsed > 12)\n\t\t\t\t\tAssert.Fail ($\"Expected timeout to be around 10 seconds, but was {elapsed} seconds.\");\n\t\t\t\telse\n\t\t\t\t\tAssert.Pass (\"ConnectAsync timed out as expected.\");\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"Expected TimeoutException to be thrown, but got: {ex}\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/ProgressStreamTests.cs",
    "content": "﻿//\n// ProgressStreamTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nusing UnitTests.Net;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class ProgressStreamTests\n\t{\n\t\tint progress;\n\n\t\tvoid Update (int value)\n\t\t{\n\t\t\tprogress = value;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ProgressStream (null, Update));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ProgressStream (Stream.Null, null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCanReadWriteSeek ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (Stream.Null, Update)) {\n\t\t\t\tAssert.That (stream.CanRead, Is.EqualTo (Stream.Null.CanRead));\n\t\t\t\tAssert.That (stream.CanWrite, Is.EqualTo (Stream.Null.CanWrite));\n\t\t\t\tAssert.That (stream.CanSeek, Is.False);\n\t\t\t\tAssert.That (stream.CanTimeout, Is.EqualTo (Stream.Null.CanTimeout));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGetSetTimeouts ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tstream.ReadTimeout = 5;\n\t\t\t\tAssert.That (stream.ReadTimeout, Is.EqualTo (5), \"ReadTimeout\");\n\n\t\t\t\tstream.WriteTimeout = 7;\n\t\t\t\tAssert.That (stream.WriteTimeout, Is.EqualTo (7), \"WriteTimeout\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRead ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint expected = 517;\n\n\t\t\t\tstream.Source.Write (buffer, 0, expected);\n\t\t\t\tstream.Source.Position = 0;\n\n\t\t\t\tprogress = 0;\n\t\t\t\tint n = stream.Read (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (expected), \"nread\");\n\t\t\t\tAssert.That (progress, Is.EqualTo (expected), \"progress\");\n\t\t\t}\n\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint expected = 517;\n\n\t\t\t\tstream.Source.Write (buffer, 0, expected);\n\t\t\t\tstream.Source.Position = 0;\n\n\t\t\t\tprogress = 0;\n\t\t\t\tint n = stream.Read (buffer, 0, buffer.Length, CancellationToken.None);\n\t\t\t\tAssert.That (n, Is.EqualTo (expected), \"nread\");\n\t\t\t\tAssert.That (progress, Is.EqualTo (expected), \"progress\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestReadAsync ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint expected = 517;\n\n\t\t\t\tstream.Source.Write (buffer, 0, expected);\n\t\t\t\tstream.Source.Position = 0;\n\n\t\t\t\tprogress = 0;\n\t\t\t\tint n = await stream.ReadAsync (buffer, 0, buffer.Length);\n\t\t\t\tAssert.That (n, Is.EqualTo (expected), \"nread\");\n\t\t\t\tAssert.That (progress, Is.EqualTo (expected), \"progress\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSeek ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Seek (0, SeekOrigin.Begin));\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.Position = 500);\n\t\t\t\tAssert.That (stream.Position, Is.EqualTo (0));\n\t\t\t\tAssert.That (stream.Length, Is.EqualTo (0));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSetLength ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tAssert.Throws<NotSupportedException> (() => stream.SetLength (500));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWrite ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint expected = 517;\n\n\t\t\t\tprogress = 0;\n\t\t\t\tstream.Write (buffer, 0, expected);\n\t\t\t\tstream.Flush ();\n\t\t\t\tAssert.That (progress, Is.EqualTo (expected), \"progress\");\n\t\t\t}\n\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint expected = 517;\n\n\t\t\t\tprogress = 0;\n\t\t\t\tstream.Write (buffer, 0, expected, CancellationToken.None);\n\t\t\t\tstream.Flush (CancellationToken.None);\n\t\t\t\tAssert.That (progress, Is.EqualTo (expected), \"progress\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestWriteAsync ()\n\t\t{\n\t\t\tusing (var stream = new ProgressStream (new DummyNetworkStream (), Update)) {\n\t\t\t\tvar buffer = new byte[1024];\n\t\t\t\tint expected = 517;\n\n\t\t\t\tprogress = 0;\n\t\t\t\tawait stream.WriteAsync (buffer, 0, expected);\n\t\t\t\tawait stream.FlushAsync ();\n\t\t\t\tAssert.That (progress, Is.EqualTo (expected), \"progress\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/ProtocolLoggerTests.cs",
    "content": "﻿//\n// ProtocolLoggerTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Globalization;\n\nusing MimeKit.IO;\nusing MimeKit.IO.Filters;\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class ProtocolLoggerTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ProtocolLogger ((string) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ProtocolLogger ((Stream) null));\n\t\t\tusing (var logger = new ProtocolLogger (new MemoryStream ())) {\n\t\t\t\tvar buffer = new byte[1024];\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => logger.LogConnect (null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => logger.LogClient (null, 0, 0));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => logger.LogServer (null, 0, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => logger.LogClient (buffer, -1, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => logger.LogServer (buffer, -1, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => logger.LogClient (buffer, 0, -1));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => logger.LogServer (buffer, 0, -1));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDefaultSettings ()\n\t\t{\n\t\t\tAssert.That (ProtocolLogger.DefaultClientPrefix, Is.EqualTo (\"C: \"), \"DefaultClientPrefix\");\n\t\t\tAssert.That (ProtocolLogger.DefaultServerPrefix, Is.EqualTo (\"S: \"), \"DefaultServerPrefix\");\n\n\t\t\tusing (var logger = new ProtocolLogger (new MemoryStream ())) {\n\t\t\t\tAssert.That (logger.ClientPrefix, Is.EqualTo (\"C: \"), \"ClientPrefix\");\n\t\t\t\tAssert.That (logger.ServerPrefix, Is.EqualTo (\"S: \"), \"ServerPrefix\");\n\t\t\t\tAssert.That (logger.TimestampFormat, Is.EqualTo (\"yyyy-MM-ddTHH:mm:ssZ\"), \"TimestampFormat\");\n\t\t\t\tAssert.That (logger.LogTimestamps, Is.False, \"LogTimestamps\");\n\t\t\t\tAssert.That (logger.RedactSecrets, Is.True, \"RedactSecrets\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestOverridingDefaultSettings ()\n\t\t{\n\t\t\ttry {\n\t\t\t\tProtocolLogger.DefaultClientPrefix = \"C> \";\n\t\t\t\tProtocolLogger.DefaultServerPrefix = \"S> \";\n\n\t\t\t\tusing (var logger = new ProtocolLogger (new MemoryStream ()) { RedactSecrets = false }) {\n\t\t\t\t\tAssert.That (logger.ClientPrefix, Is.EqualTo (\"C> \"), \"ClientPrefix\");\n\t\t\t\t\tAssert.That (logger.ServerPrefix, Is.EqualTo (\"S> \"), \"ServerPrefix\");\n\t\t\t\t\tAssert.That (logger.TimestampFormat, Is.EqualTo (\"yyyy-MM-ddTHH:mm:ssZ\"), \"TimestampFormat\");\n\t\t\t\t\tAssert.That (logger.LogTimestamps, Is.False, \"LogTimestamps\");\n\t\t\t\t\tAssert.That (logger.RedactSecrets, Is.False, \"RedactSecrets\");\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tProtocolLogger.DefaultClientPrefix = \"C: \";\n\t\t\t\tProtocolLogger.DefaultServerPrefix = \"S: \";\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLogging ()\n\t\t{\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var logger = new ProtocolLogger (stream, true) { RedactSecrets = false }) {\n\t\t\t\t\tlogger.LogConnect (new Uri (\"pop://pop.skyfall.net:110\"));\n\n\t\t\t\t\tvar cmd = Encoding.ASCII.GetBytes (\"RETR 1\\r\\n\");\n\t\t\t\t\tlogger.LogClient (cmd, 0, cmd.Length);\n\n\t\t\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.comcast.retr1.txt\")) {\n\t\t\t\t\t\tusing (var filtered = new FilteredStream (response)) {\n\t\t\t\t\t\t\tvar buffer = new byte[4096];\n\t\t\t\t\t\t\tint n;\n\n\t\t\t\t\t\t\tfiltered.Add (new Unix2DosFilter ());\n\n\t\t\t\t\t\t\twhile ((n = filtered.Read (buffer, 0, buffer.Length)) > 0)\n\t\t\t\t\t\t\t\tlogger.LogServer (buffer, 0, n);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\t\tstring line;\n\n\t\t\t\t\tline = reader.ReadLine ();\n\t\t\t\t\tAssert.That (line, Is.EqualTo (\"Connected to pop://pop.skyfall.net:110/\"));\n\n\t\t\t\t\tline = reader.ReadLine ();\n\t\t\t\t\tAssert.That (line, Is.EqualTo (\"C: RETR 1\"));\n\n\t\t\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.comcast.retr1.txt\")) {\n\t\t\t\t\t\tusing (var r = new StreamReader (response)) {\n\t\t\t\t\t\t\tstring expected;\n\n\t\t\t\t\t\t\twhile ((expected = r.ReadLine ()) != null) {\n\t\t\t\t\t\t\t\tline = reader.ReadLine ();\n\n\t\t\t\t\t\t\t\tAssert.That (line, Is.EqualTo (\"S: \" + expected));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLogConnectMidline ()\n\t\t{\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var logger = new ProtocolLogger (stream, true) { RedactSecrets = false }) {\n\t\t\t\t\tbyte[] buf;\n\n\t\t\t\t\tbuf = Encoding.ASCII.GetBytes (\"PARTIAL LINE\");\n\t\t\t\t\tlogger.LogClient (buf, 0, buf.Length);\n\n\t\t\t\t\tlogger.LogConnect (new Uri (\"proto://server.com\"));\n\n\t\t\t\t\tlogger.LogServer (buf, 0, buf.Length);\n\n\t\t\t\t\tlogger.LogConnect (new Uri (\"proto://server.com\"));\n\t\t\t\t}\n\n\t\t\t\tvar buffer = stream.GetBuffer ();\n\t\t\t\tint length = (int) stream.Length;\n\n\t\t\t\tvar result = Encoding.ASCII.GetString (buffer, 0, length);\n\n\t\t\t\tAssert.That (result, Is.EqualTo (\"C: PARTIAL LINE\\r\\nConnected to proto://server.com/\\r\\nS: PARTIAL LINE\\r\\nConnected to proto://server.com/\\r\\n\"));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoggingWithCustomPrefixes ()\n\t\t{\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var logger = new ProtocolLogger (stream, true) { ClientPrefix = \"C> \", ServerPrefix = \"S> \", RedactSecrets = false }) {\n\t\t\t\t\tlogger.LogConnect (new Uri (\"pop://pop.skyfall.net:110\"));\n\n\t\t\t\t\tvar cmd = Encoding.ASCII.GetBytes (\"RETR 1\\r\\n\");\n\t\t\t\t\tlogger.LogClient (cmd, 0, cmd.Length);\n\n\t\t\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.comcast.retr1.txt\")) {\n\t\t\t\t\t\tusing (var filtered = new FilteredStream (response)) {\n\t\t\t\t\t\t\tvar buffer = new byte[4096];\n\t\t\t\t\t\t\tint n;\n\n\t\t\t\t\t\t\tfiltered.Add (new Unix2DosFilter ());\n\n\t\t\t\t\t\t\twhile ((n = filtered.Read (buffer, 0, buffer.Length)) > 0)\n\t\t\t\t\t\t\t\tlogger.LogServer (buffer, 0, n);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\t\tstring line;\n\n\t\t\t\t\tline = reader.ReadLine ();\n\t\t\t\t\tAssert.That (line, Is.EqualTo (\"Connected to pop://pop.skyfall.net:110/\"));\n\n\t\t\t\t\tline = reader.ReadLine ();\n\t\t\t\t\tAssert.That (line, Is.EqualTo (\"C> RETR 1\"));\n\n\t\t\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.comcast.retr1.txt\")) {\n\t\t\t\t\t\tusing (var r = new StreamReader (response)) {\n\t\t\t\t\t\t\tstring expected;\n\n\t\t\t\t\t\t\twhile ((expected = r.ReadLine ()) != null) {\n\t\t\t\t\t\t\t\tline = reader.ReadLine ();\n\n\t\t\t\t\t\t\t\tAssert.That (line, Is.EqualTo (\"S> \" + expected));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic bool TryExtractTimestamp (ref string text, string format, out DateTime timestamp)\n\t\t{\n\t\t\tint index = text.IndexOf (' ');\n\n\t\t\tif (index == -1) {\n\t\t\t\ttimestamp = default;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar ts = text.Substring (0, index);\n\t\t\tif (!DateTime.TryParseExact (ts, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out timestamp))\n\t\t\t\treturn false;\n\n\t\t\ttext = text.Substring (index + 1);\n\n\t\t\treturn true;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoggingWithTimestamps ()\n\t\t{\n\t\t\tstring format;\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tusing (var logger = new ProtocolLogger (stream, true) { LogTimestamps = true, RedactSecrets = false }) {\n\t\t\t\t\tformat = logger.TimestampFormat;\n\n\t\t\t\t\tlogger.LogConnect (new Uri (\"pop://pop.skyfall.net:110\"));\n\n\t\t\t\t\tvar cmd = Encoding.ASCII.GetBytes (\"RETR 1\\r\\n\");\n\t\t\t\t\tlogger.LogClient (cmd, 0, cmd.Length);\n\n\t\t\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.comcast.retr1.txt\")) {\n\t\t\t\t\t\tusing (var filtered = new FilteredStream (response)) {\n\t\t\t\t\t\t\tvar buffer = new byte[4096];\n\t\t\t\t\t\t\tint n;\n\n\t\t\t\t\t\t\tfiltered.Add (new Unix2DosFilter ());\n\n\t\t\t\t\t\t\twhile ((n = filtered.Read (buffer, 0, buffer.Length)) > 0)\n\t\t\t\t\t\t\t\tlogger.LogServer (buffer, 0, n);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tusing (var reader = new StreamReader (stream)) {\n\t\t\t\t\tDateTime timestamp;\n\t\t\t\t\tstring line;\n\n\t\t\t\t\tline = reader.ReadLine ();\n\n\t\t\t\t\tAssert.That (TryExtractTimestamp (ref line, format, out timestamp), Is.True, \"Connect timestamp\");\n\t\t\t\t\tAssert.That (line, Is.EqualTo (\"Connected to pop://pop.skyfall.net:110/\"));\n\n\t\t\t\t\tline = reader.ReadLine ();\n\t\t\t\t\tAssert.That (TryExtractTimestamp (ref line, format, out timestamp), Is.True, \"C: RETR 1 timestamp\");\n\t\t\t\t\tAssert.That (line, Is.EqualTo (\"C: RETR 1\"));\n\n\t\t\t\t\tusing (var response = GetType ().Assembly.GetManifestResourceStream (\"UnitTests.Net.Pop3.Resources.comcast.retr1.txt\")) {\n\t\t\t\t\t\tusing (var r = new StreamReader (response)) {\n\t\t\t\t\t\t\tstring expected;\n\n\t\t\t\t\t\t\twhile ((expected = r.ReadLine ()) != null) {\n\t\t\t\t\t\t\t\tline = reader.ReadLine ();\n\n\t\t\t\t\t\t\t\tAssert.That (TryExtractTimestamp (ref line, format, out timestamp), Is.True, \"S: timestamp\");\n\t\t\t\t\t\t\t\tAssert.That (line, Is.EqualTo (\"S: \" + expected));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/ReplaceRequestTests.cs",
    "content": "﻿//\n// ReplaceRequestTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MimeKit;\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class ReplaceRequestTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar keywords = new string[] { \"$Forwarded\" };\n\t\t\tvar message = new MimeMessage ();\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (null, MessageFlags.Seen));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (null, MessageFlags.Seen, DateTimeOffset.Now));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (null, MessageFlags.Seen, keywords));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (message, MessageFlags.Seen, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (null, MessageFlags.Seen, keywords, DateTimeOffset.Now));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new ReplaceRequest (message, MessageFlags.Seen, null, DateTimeOffset.Now));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestConstructors ()\n\t\t{\n\t\t\t//var annotation = new Annotation (AnnotationEntry.AltSubject);\n\t\t\t//annotation.Properties[AnnotationAttribute.PrivateValue] = string.Format (\"Alternate subject\");\n\t\t\t//var annotations = new Annotation[] { annotation };\n\t\t\tvar keywords = new string[] { \"$Forwarded\", \"$Junk\" };\n\t\t\tvar keywordSet = new HashSet<string> (keywords);\n\t\t\tvar flags = MessageFlags.Seen | MessageFlags.Draft;\n\t\t\tvar internalDate = DateTimeOffset.Now;\n\t\t\tvar message = new MimeMessage ();\n\t\t\tReplaceRequest request;\n\n\t\t\trequest = new ReplaceRequest (message);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #1\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (MessageFlags.None), \"Flags #1\");\n\t\t\tAssert.That (request.Keywords, Is.Null, \"Keywords #1\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #1\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #1\");\n\n\t\t\trequest = new ReplaceRequest (message, flags);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #2\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #2\");\n\t\t\tAssert.That (request.Keywords, Is.Null, \"Keywords #2\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #2\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #2\");\n\n\t\t\trequest = new ReplaceRequest (message, flags, keywords);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #3\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #3\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #3\");\n\t\t\tAssert.That (request.Keywords, Has.Count.EqualTo (keywords.Length), \"Keywords #3\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #3\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #3\");\n\n\t\t\trequest = new ReplaceRequest (message, flags, keywordSet);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #4\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #4\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #4\");\n\t\t\tAssert.That (request.Keywords, Is.EqualTo (keywordSet), \"Keywords #4\");\n\t\t\tAssert.That (request.InternalDate, Is.Null, \"InternalDate #4\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #4\");\n\n\t\t\trequest = new ReplaceRequest (message, flags, internalDate);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #5\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #5\");\n\t\t\tAssert.That (request.Keywords, Is.Null, \"Keywords #5\");\n\t\t\tAssert.That (request.InternalDate.Value, Is.EqualTo (internalDate), \"InternalDate #5\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #5\");\n\n\t\t\trequest = new ReplaceRequest (message, flags, keywords, internalDate);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #6\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #6\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #6\");\n\t\t\tAssert.That (request.Keywords, Has.Count.EqualTo (keywords.Length), \"Keywords #6\");\n\t\t\tAssert.That (request.InternalDate.Value, Is.EqualTo (internalDate), \"InternalDate #6\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #6\");\n\n\t\t\trequest = new ReplaceRequest (message, flags, keywordSet, internalDate);\n\t\t\tAssert.That (request.Message, Is.EqualTo (message), \"Message #7\");\n\t\t\tAssert.That (request.Flags, Is.EqualTo (flags), \"Flags #7\");\n\t\t\tAssert.That (request.Keywords, Is.InstanceOf<HashSet<string>> (), \"Keywords Type #7\");\n\t\t\tAssert.That (request.Keywords, Is.EqualTo (keywordSet), \"Keywords #7\");\n\t\t\tAssert.That (request.InternalDate.Value, Is.EqualTo (internalDate), \"InternalDate #7\");\n\t\t\tAssert.That (request.Annotations, Is.Null, \"Annotations #7\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Search/SearchQueryTests.cs",
    "content": "﻿//\n// SearchQueryTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\nusing MailKit.Search;\n\nnamespace UnitTests.Search {\n\t[TestFixture]\n\tpublic class SearchQueryTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.And (null, SearchQuery.All));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.And (SearchQuery.All, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.AnnotationsContain (null, AnnotationAttribute.Value, \"value\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.AnnotationsContain (AnnotationEntry.AltSubject, null, \"value\"));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.AnnotationsContain (AnnotationEntry.AltSubject, AnnotationAttribute.Size, \"value\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.BccContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.BccContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.BodyContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.BodyContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.CcContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.CcContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.NotKeyword (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotKeyword (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.NotKeywords (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotKeywords (Array.Empty<string> ()));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotFlags (MessageFlags.None));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.Filter (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.Filter (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.FromContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.FromContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.Fuzzy (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.GMailRawSearch (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.GMailRawSearch (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HasKeyword (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasKeyword (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HasKeywords (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasKeywords (Array.Empty<string> ()));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasFlags (MessageFlags.None));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HasKeyword (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasKeyword (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HasKeywords (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasKeywords (Array.Empty<string> ()));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasKeywords (new string[] { \"keyword\", null }));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotFlags (MessageFlags.None));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.NotKeyword (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotKeyword (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.NotKeywords (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotKeywords (Array.Empty<string> ()));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.NotKeywords (new string [] { \"keyword\", null }));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HasGMailLabel (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HasGMailLabel (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HeaderContains (null, \"text\"));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.HeaderContains (string.Empty, \"text\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.HeaderContains (\"name\", null));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => SearchQuery.LargerThan (-1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.MessageContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.MessageContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.Not (null));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => SearchQuery.OlderThan (-1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.Or (null, SearchQuery.All));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.Or (SearchQuery.All, null));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => SearchQuery.SmallerThan (-1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.SubjectContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.SubjectContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.ToContains (null));\n\t\t\tAssert.Throws<ArgumentException> (() => SearchQuery.ToContains (string.Empty));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => SearchQuery.YoungerThan (-1));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.All.And (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SearchQuery.All.Or (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new BinarySearchQuery (SearchTerm.And, null, SearchQuery.All));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new BinarySearchQuery (SearchTerm.And, SearchQuery.All, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FilterSearchQuery (null));\n\t\t\tAssert.Throws<ArgumentException> (() => new FilterSearchQuery (string.Empty));\n\t\t\tAssert.Throws<ArgumentException> (() => new FilterSearchQuery (MetadataTag.Create (\"/dev/null\")));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new HeaderSearchQuery (null, \"text\"));\n\t\t\tAssert.Throws<ArgumentException> (() => new HeaderSearchQuery (string.Empty, \"text\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new HeaderSearchQuery (\"name\", null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new TextSearchQuery (SearchTerm.BodyContains, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new UidSearchQuery (null));\n\t\t\tAssert.Throws<ArgumentException> (() => new UidSearchQuery (new UniqueIdSet ()));\n\t\t\tAssert.Throws<ArgumentException> (() => new UidSearchQuery (UniqueId.Invalid));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new UnarySearchQuery (SearchTerm.Not, null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestFilterSearchQuery ()\n\t\t{\n\t\t\tvar query = new FilterSearchQuery (MetadataTag.Create (\"/private/filters/values/private-unread\"));\n\n\t\t\tAssert.That (query.Name, Is.EqualTo (\"private-unread\"));\n\n\t\t\tquery = new FilterSearchQuery (MetadataTag.Create (\"/shared/filters/values/shared-unread\"));\n\n\t\t\tAssert.That (query.Name, Is.EqualTo (\"shared-unread\"));\n\n\t\t\tquery = (FilterSearchQuery) SearchQuery.Filter (\"basic\");\n\n\t\t\tAssert.That (query.Name, Is.EqualTo (\"basic\"));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUidSearchQuery ()\n\t\t{\n\t\t\tvar query = new UidSearchQuery (new UniqueId (5));\n\n\t\t\tAssert.That (query.Uids, Has.Count.EqualTo (1));\n\t\t\tAssert.That (query.Uids[0].Id, Is.EqualTo ((uint) 5));\n\n\t\t\tquery = SearchQuery.Uids (new UniqueId[] { new UniqueId (5) });\n\n\t\t\tAssert.That (query.Uids, Has.Count.EqualTo (1));\n\t\t\tAssert.That (query.Uids [0].Id, Is.EqualTo ((uint)5));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDefaultSearchQuery ()\n\t\t{\n\t\t\tvar query = new SearchQuery ();\n\n\t\t\tAssert.That (query.Term, Is.EqualTo (SearchTerm.All), \"Default .ctor\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestKeywordsQueries ()\n\t\t{\n\t\t\tBinarySearchQuery binary;\n\t\t\tTextSearchQuery text;\n\n\t\t\tvar query = SearchQuery.HasKeywords (new [] { \"custom1\" });\n\t\t\tAssert.That (query, Is.InstanceOf<TextSearchQuery> ());\n\t\t\ttext = (TextSearchQuery)query;\n\t\t\tAssert.That (text.Term, Is.EqualTo (SearchTerm.Keyword));\n\t\t\tAssert.That (text.Text, Is.EqualTo (\"custom1\"));\n\n\t\t\tquery = SearchQuery.HasKeywords (new [] { \"custom1\", \"custom2\" });\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery)query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left, Is.InstanceOf<TextSearchQuery> ());\n\t\t\tAssert.That (binary.Right, Is.InstanceOf<TextSearchQuery> ());\n\t\t\tAssert.That (((TextSearchQuery)binary.Left).Text, Is.EqualTo (\"custom1\"));\n\t\t\tAssert.That (((TextSearchQuery)binary.Right).Text, Is.EqualTo (\"custom2\"));\n\n\t\t\tquery = SearchQuery.NotKeywords (new [] { \"custom1\" });\n\t\t\tAssert.That (query, Is.InstanceOf<TextSearchQuery> ());\n\t\t\ttext = (TextSearchQuery) query;\n\t\t\tAssert.That (text.Term, Is.EqualTo (SearchTerm.NotKeyword));\n\t\t\tAssert.That (text.Text, Is.EqualTo (\"custom1\"));\n\n\t\t\tquery = SearchQuery.NotKeywords (new [] { \"custom1\", \"custom2\" });\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left, Is.InstanceOf<TextSearchQuery> ());\n\t\t\tAssert.That (binary.Right, Is.InstanceOf<TextSearchQuery> ());\n\t\t\tAssert.That (((TextSearchQuery) binary.Left).Text, Is.EqualTo (\"custom1\"));\n\t\t\tAssert.That (((TextSearchQuery) binary.Right).Text, Is.EqualTo (\"custom2\"));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMessageFlagsQueries ()\n\t\t{\n\t\t\tBinarySearchQuery binary;\n\n\t\t\tvar query = SearchQuery.HasFlags (MessageFlags.Answered | MessageFlags.Seen);\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left.Term, Is.EqualTo (SearchQuery.Seen.Term));\n\t\t\tAssert.That (binary.Right.Term, Is.EqualTo (SearchQuery.Answered.Term));\n\n\t\t\tquery = SearchQuery.HasFlags (MessageFlags.Flagged | MessageFlags.Deleted);\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left.Term, Is.EqualTo (SearchQuery.Flagged.Term));\n\t\t\tAssert.That (binary.Right.Term, Is.EqualTo (SearchQuery.Deleted.Term));\n\n\t\t\tquery = SearchQuery.HasFlags (MessageFlags.Draft | MessageFlags.Recent);\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left.Term, Is.EqualTo (SearchQuery.Draft.Term));\n\t\t\tAssert.That (binary.Right.Term, Is.EqualTo (SearchQuery.Recent.Term));\n\n\t\t\tquery = SearchQuery.NotFlags (MessageFlags.Answered | MessageFlags.Seen);\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left.Term, Is.EqualTo (SearchQuery.NotSeen.Term));\n\t\t\tAssert.That (binary.Right.Term, Is.EqualTo (SearchQuery.NotAnswered.Term));\n\n\t\t\tquery = SearchQuery.NotFlags (MessageFlags.Flagged | MessageFlags.Deleted);\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left.Term, Is.EqualTo (SearchQuery.NotFlagged.Term));\n\t\t\tAssert.That (binary.Right.Term, Is.EqualTo (SearchQuery.NotDeleted.Term));\n\n\t\t\tquery = SearchQuery.NotFlags (MessageFlags.Draft | MessageFlags.Recent);\n\t\t\tAssert.That (query, Is.InstanceOf<BinarySearchQuery> ());\n\t\t\tbinary = (BinarySearchQuery) query;\n\t\t\tAssert.That (binary.Term, Is.EqualTo (SearchTerm.And));\n\t\t\tAssert.That (binary.Left.Term, Is.EqualTo (SearchQuery.NotDraft.Term));\n\t\t\tAssert.That (binary.Right.Term, Is.EqualTo (SearchQuery.NotRecent.Term));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestGMailExtensionQueries ()\n\t\t{\n\t\t\tvar numeric = SearchQuery.GMailMessageId (512);\n\n\t\t\tAssert.That (numeric.Term, Is.EqualTo (SearchTerm.GMailMessageId));\n\t\t\tAssert.That (numeric.Value, Is.EqualTo (512));\n\n\t\t\tnumeric = SearchQuery.GMailThreadId (1024);\n\n\t\t\tAssert.That (numeric.Term, Is.EqualTo (SearchTerm.GMailThreadId));\n\t\t\tAssert.That (numeric.Value, Is.EqualTo (1024));\n\n\t\t\tvar text = SearchQuery.HasGMailLabel (\"label\");\n\n\t\t\tAssert.That (text.Term, Is.EqualTo (SearchTerm.GMailLabels));\n\t\t\tAssert.That (text.Text, Is.EqualTo (\"label\"));\n\n\t\t\ttext = SearchQuery.GMailRawSearch (\"raw\");\n\n\t\t\tAssert.That (text.Term, Is.EqualTo (SearchTerm.GMailRaw));\n\t\t\tAssert.That (text.Text, Is.EqualTo (\"raw\"));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/AuthenticationExceptionTests.cs",
    "content": "﻿//\n// AuthenticationExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\n#if NET6_0\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class AuthenticationExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestSerialization ()\n\t\t{\n\t\t\tvar expected = new AuthenticationException (\"Bad boys, bad boys. Whatcha gonna do?\", new Exception (\"InnerException\"));\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (AuthenticationException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new AuthenticationException (\"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (AuthenticationException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\n\t\t\texpected = new AuthenticationException ();\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (AuthenticationException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t}\n\t\t}\n\t}\n}\n\n#endif // NET6_0\n"
  },
  {
    "path": "UnitTests/Security/ChannelBindingContext.cs",
    "content": "﻿//\n// ChannelBindingSource.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Net;\n\nnamespace UnitTests.Security {\n\tclass ChannelBindingContext : IChannelBindingContext\n\t{\n\t\treadonly ChannelBindingKind supportedKind;\n\t\treadonly string data;\n\n\t\tpublic ChannelBindingContext (ChannelBindingKind kind, string channelBindingData)\n\t\t{\n\t\t\tdata = channelBindingData;\n\t\t\tsupportedKind = kind;\n\t\t}\n\n\t\tpublic bool TryGetChannelBinding (ChannelBindingKind kind, out ChannelBinding channelBinding)\n\t\t{\n\t\t\tchannelBinding = null;\n\t\t\treturn false;\n\t\t}\n\n\t\tpublic bool TryGetChannelBindingToken (ChannelBindingKind kind, out byte[] token)\n\t\t{\n\t\t\tif (kind == supportedKind) {\n\t\t\t\ttoken = Encoding.ASCII.GetBytes (data);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\ttoken = null;\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/MD4Tests.cs",
    "content": "﻿//\n// MD4Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class MD4Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tusing (var md4 = new MD4 ()) {\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => { var x = md4.Hash; });\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => md4.ComputeHash ((byte[]) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => md4.ComputeHash ((Stream) null));\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => md4.ComputeHash (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.ComputeHash (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.ComputeHash (buffer, 0, -1));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => md4.TransformBlock (null, 0, buffer.Length, buffer, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.TransformBlock (buffer, -1, buffer.Length, buffer, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.TransformBlock (buffer, 0, -1, buffer, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.TransformBlock (buffer, 0, buffer.Length, buffer, -1));\n\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => md4.TransformFinalBlock (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.TransformFinalBlock (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => md4.TransformFinalBlock (buffer, 0, -1));\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSimpleInput ()\n\t\t{\n\t\t\tvar text = Encoding.ASCII.GetBytes (\"This is some sample text that we will hash using the MD4 algorithm.\");\n\t\t\tconst string expected = \"69b390afdf693eae92ebea5cc6669b3f\";\n\n\t\t\tusing (var md4 = new MD4 ()) {\n\t\t\t\tStringBuilder builder = new StringBuilder ();\n\t\t\t\tbyte[] hash, output = new byte[16];\n\n\t\t\t\tAssert.That (md4.TransformBlock (text, 0, 16, output, 0), Is.EqualTo (16), \"TransformBlock\");\n\t\t\t\toutput = md4.TransformFinalBlock (text, 16, text.Length - 16);\n\t\t\t\tAssert.That (output, Is.Not.Null, \"TransformFinalBlock\");\n\t\t\t\tAssert.That (output, Has.Length.EqualTo (text.Length - 16), \"TransformFinalBlock\");\n\t\t\t\thash = md4.Hash;\n\t\t\t\tAssert.That (hash, Is.Not.Null, \"Hash\");\n\t\t\t\tfor (int i = 0; i < hash.Length; i++)\n\t\t\t\t\tbuilder.Append (hash[i].ToString (\"x2\"));\n\t\t\t\tAssert.That (builder.ToString (), Is.EqualTo (expected), \"Hash\");\n\t\t\t}\n\n\t\t\tusing (var md4 = new MD4 ()) {\n\t\t\t\tStringBuilder builder = new StringBuilder ();\n\n\t\t\t\tvar hash = md4.ComputeHash (text);\n\t\t\t\tAssert.That (hash, Is.Not.Null, \"ComputeHash\");\n\t\t\t\tfor (int i = 0; i < hash.Length; i++)\n\t\t\t\t\tbuilder.Append (hash[i].ToString (\"x2\"));\n\t\t\t\tAssert.That (builder.ToString (), Is.EqualTo (expected), \"ComputeHash\");\n\t\t\t}\n\n\t\t\tusing (var md4 = new MD4 ()) {\n\t\t\t\tStringBuilder builder = new StringBuilder ();\n\t\t\t\tbyte[] hash;\n\n\t\t\t\tusing (var stream = new MemoryStream (text, false))\n\t\t\t\t\thash = md4.ComputeHash (stream);\n\t\t\t\tAssert.That (hash, Is.Not.Null, \"ComputeHash\");\n\t\t\t\tfor (int i = 0; i < hash.Length; i++)\n\t\t\t\t\tbuilder.Append (hash[i].ToString (\"x2\"));\n\t\t\t\tAssert.That (builder.ToString (), Is.EqualTo (expected), \"ComputeHash\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/NtlmAuthenticateMessageTests.cs",
    "content": "﻿//\n// NtlmAuthenticateMessageTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class NtlmAuthenticateMessageTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tbyte[] badMessageData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00 };\n\t\t\tvar NtlmNegotiate = new NtlmNegotiateMessage ();\n\t\t\tvar NtlmChallenge = new NtlmChallengeMessage ();\n\t\t\tvar NtlmAuthenticate = new NtlmAuthenticateMessage (NtlmNegotiate, NtlmChallenge, \"username\", \"password\", \"domain\", \"workstation\");\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmAuthenticateMessage (null, NtlmChallenge, \"username\", \"password\", \"domain\", \"workstation\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmAuthenticateMessage (NtlmNegotiate, null, \"username\", \"password\", \"domain\", \"workstation\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmAuthenticateMessage (NtlmNegotiate, NtlmChallenge, null, \"password\", \"domain\", \"workstation\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmAuthenticateMessage (NtlmNegotiate, NtlmChallenge, \"username\", null, \"domain\", \"workstation\"));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmAuthenticateMessage (null, 0, 16));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmAuthenticateMessage (new byte[8], 0, 8));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmAuthenticateMessage (new byte[8], -1, 8));\n\t\t\tAssert.Throws<ArgumentException> (() => new NtlmAuthenticateMessage (badMessageData, 0, badMessageData.Length));\n\n\t\t\tAssert.DoesNotThrow (() => NtlmAuthenticate.ClientChallenge = null);\n\t\t\tAssert.Throws<ArgumentException> (() => NtlmAuthenticate.ClientChallenge = new byte[9]);\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://www.innovation.ch/java/ntlm.html\n\t\tpublic void TestDecodeJavaExample ()\n\t\t{\n\t\t\tbyte[] rawData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x72, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x54, 0x00, 0x00, 0x00, 0x12, 0x00, 0x12, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x55, 0x00, 0x52, 0x00, 0x53, 0x00, 0x41, 0x00, 0x2d, 0x00, 0x4d, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x52, 0x00, 0x5a, 0x00, 0x61, 0x00, 0x70, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x4c, 0x00, 0x49, 0x00, 0x47, 0x00, 0x48, 0x00, 0x54, 0x00, 0x43, 0x00, 0x49, 0x00, 0x54, 0x00, 0x59, 0x00, 0xad, 0x87, 0xca, 0x6d, 0xef, 0xe3, 0x46, 0x85, 0xb9, 0xc4, 0x3c, 0x47, 0x7a, 0x8c, 0x42, 0xd6, 0x00, 0x66, 0x7d, 0x68, 0x92, 0xe7, 0xe8, 0x97, 0xe0, 0xe0, 0x0d, 0xe3, 0x10, 0x4a, 0x1b, 0xf2, 0x05, 0x3f, 0x07, 0xc7, 0xdd, 0xa8, 0x2d, 0x3c, 0x48, 0x9a, 0xe9, 0x89, 0xe1, 0xb0, 0x00, 0xd3 };\n\t\t\tvar NtlmAuthenticate = new NtlmAuthenticateMessage (rawData, 0, rawData.Length);\n\n\t\t\tAssert.That (NtlmAuthenticate.Type, Is.EqualTo (3), \"Type\");\n\t\t\tAssert.That (NtlmAuthenticate.Flags, Is.EqualTo ((NtlmFlags) 0x8201), \"Flags\");\n\t\t\tAssert.That (NtlmAuthenticate.Domain, Is.EqualTo (\"URSA-MINOR\"), \"Domain\");\n\t\t\tAssert.That (NtlmAuthenticate.Workstation, Is.EqualTo (\"LIGHTCITY\"), \"Workstation\");\n\t\t\tAssert.That (NtlmAuthenticate.UserName, Is.EqualTo (\"Zaphod\"), \"UserName\");\n\t\t\tAssert.That (NtlmAuthenticate.Password, Is.Empty, \"Password\");\n\n\t\t\tAssert.That (BitConverter.ToString (NtlmAuthenticate.LmChallengeResponse), Is.EqualTo (\"AD-87-CA-6D-EF-E3-46-85-B9-C4-3C-47-7A-8C-42-D6-00-66-7D-68-92-E7-E8-97\"), \"LmChallengeResponse\");\n\t\t\tAssert.That (BitConverter.ToString (NtlmAuthenticate.NtChallengeResponse), Is.EqualTo (\"E0-E0-0D-E3-10-4A-1B-F2-05-3F-07-C7-DD-A8-2D-3C-48-9A-E9-89-E1-B0-00-D3\"), \"NtChallengeResponse\");\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://davenport.sourceforge.net/ntlm.html#NtlmAuthenticateMessageExample\n\t\tpublic void TestDecodeDavenportExample ()\n\t\t{\n\t\t\tbyte[] rawData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x16, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x44, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x57, 0x00, 0x4f, 0x00, 0x52, 0x00, 0x4b, 0x00, 0x53, 0x00, 0x54, 0x00, 0x41, 0x00, 0x54, 0x00, 0x49, 0x00, 0x4f, 0x00, 0x4e, 0x00, 0xc3, 0x37, 0xcd, 0x5c, 0xbd, 0x44, 0xfc, 0x97, 0x82, 0xa6, 0x67, 0xaf, 0x6d, 0x42, 0x7c, 0x6d, 0xe6, 0x7c, 0x20, 0xc2, 0xd3, 0xe7, 0x7c, 0x56, 0x25, 0xa9, 0x8c, 0x1c, 0x31, 0xe8, 0x18, 0x47, 0x46, 0x6b, 0x29, 0xb2, 0xdf, 0x46, 0x80, 0xf3, 0x99, 0x58, 0xfb, 0x8c, 0x21, 0x3a, 0x9c, 0xc6 };\n\t\t\tNtlmAuthenticateMessage NtlmAuthenticate = new NtlmAuthenticateMessage (rawData, 0, rawData.Length);\n\n\t\t\tAssert.That (NtlmAuthenticate.Type, Is.EqualTo (3), \"Type\");\n\t\t\tAssert.That (NtlmAuthenticate.Flags, Is.EqualTo ((NtlmFlags) 0x201), \"Flags\");\n\t\t\tAssert.That (NtlmAuthenticate.Domain, Is.EqualTo (\"DOMAIN\"), \"Domain\");\n\t\t\tAssert.That (NtlmAuthenticate.Workstation, Is.EqualTo (\"WORKSTATION\"), \"Workstation\");\n\t\t\tAssert.That (NtlmAuthenticate.UserName, Is.EqualTo (\"user\"), \"UserName\");\n\t\t\tAssert.That (NtlmAuthenticate.Password, Is.Empty, \"Password\");\n\n\t\t\tAssert.That (BitConverter.ToString (NtlmAuthenticate.LmChallengeResponse), Is.EqualTo (\"C3-37-CD-5C-BD-44-FC-97-82-A6-67-AF-6D-42-7C-6D-E6-7C-20-C2-D3-E7-7C-56\"), \"LmChallengeResponse\");\n\t\t\tAssert.That (BitConverter.ToString (NtlmAuthenticate.NtChallengeResponse), Is.EqualTo (\"25-A9-8C-1C-31-E8-18-47-46-6B-29-B2-DF-46-80-F3-99-58-FB-8C-21-3A-9C-C6\"), \"NtChallengeResponse\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/NtlmChallengeMessageTests.cs",
    "content": "﻿//\n// NtlmChallengeMessageTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class NtlmChallengeMessageTests\n\t{\n\t\tstatic readonly byte[] DavenportExampleNonce = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };\n\t\tstatic readonly byte[] JavaExampleNonce = { 0x53, 0x72, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65 };\n\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tbyte[] badMessageData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00 };\n\t\t\tvar type2 = new NtlmChallengeMessage ();\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmChallengeMessage (null, 0, 16));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmChallengeMessage (new byte[8], 0, 8));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmChallengeMessage (new byte[8], -1, 8));\n\t\t\tAssert.Throws<ArgumentException> (() => new NtlmChallengeMessage (badMessageData, 0, badMessageData.Length));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => type2.ServerChallenge = null);\n\t\t\tAssert.Throws<ArgumentException> (() => type2.ServerChallenge = new byte[9]);\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://www.innovation.ch/java/ntlm.html\n\t\tpublic void TestEncodeJavaExample ()\n\t\t{\n\t\t\tvar type2 = new NtlmChallengeMessage (NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateAlwaysSign) { ServerChallenge = JavaExampleNonce };\n\n\t\t\tAssert.That (type2.Type, Is.EqualTo (2), \"Type\");\n\t\t\tAssert.That (type2.Flags, Is.EqualTo ((NtlmFlags) 0x8201), \"Flags\");\n\t\t\tAssert.That (Convert.ToBase64String (type2.Encode ()), Is.EqualTo (\"TlRMTVNTUAACAAAAAAAAAAAAAAABggAAU3J2Tm9uY2UAAAAAAAAAAAAAAAAAAAAA\"), \"Encode\");\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://www.innovation.ch/java/ntlm.html\n\t\tpublic void TestDecodeJavaExample ()\n\t\t{\n\t\t\tbyte[] rawData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x53, 0x72, 0x76, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };\n\t\t\tvar type2 = new NtlmChallengeMessage (rawData, 0, rawData.Length);\n\n\t\t\tAssert.That (type2.Type, Is.EqualTo (2), \"Type\");\n\t\t\tAssert.That (type2.Flags, Is.EqualTo ((NtlmFlags) 0x8201), \"Flags\");\n\t\t\tAssert.That (BitConverter.ToString (type2.ServerChallenge), Is.EqualTo (BitConverter.ToString (JavaExampleNonce)), \"ServerChallenge\");\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://davenport.sourceforge.net/ntlm.html#NtlmChallengeMessageExample\n\t\tpublic void TestEncodeDavenportExample ()\n\t\t{\n\t\t\tvar type2 = new NtlmChallengeMessage (NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.TargetTypeDomain | NtlmFlags.NegotiateTargetInfo) {\n\t\t\t\tTargetInfo = new NtlmTargetInfo () {\n\t\t\t\t\tDomainName = \"DOMAIN\",\n\t\t\t\t\tServerName = \"SERVER\",\n\t\t\t\t\tDnsDomainName = \"domain.com\",\n\t\t\t\t\tDnsServerName = \"server.domain.com\"\n\t\t\t\t},\n\t\t\t\tServerChallenge = DavenportExampleNonce,\n\t\t\t\tTargetName = \"DOMAIN\"\n\t\t\t};\n\n\t\t\tAssert.That (type2.Type, Is.EqualTo (2), \"Type\");\n\t\t\tAssert.That (type2.Flags, Is.EqualTo ((NtlmFlags) 0x00810201), \"Flags\");\n\t\t\tAssert.That (type2.TargetName, Is.EqualTo (\"DOMAIN\"), \"TargetName\");\n\t\t\tAssert.That (type2.TargetInfo.ServerName, Is.EqualTo (\"SERVER\"), \"ServerName\");\n\t\t\tAssert.That (type2.TargetInfo.DomainName, Is.EqualTo (\"DOMAIN\"), \"DomainName\");\n\t\t\tAssert.That (type2.TargetInfo.DnsServerName, Is.EqualTo (\"server.domain.com\"), \"DnsServerName\");\n\t\t\tAssert.That (type2.TargetInfo.DnsDomainName, Is.EqualTo (\"domain.com\"), \"DnsDomainName\");\n\t\t\tAssert.That (BitConverter.ToString (type2.ServerChallenge), Is.EqualTo (\"01-23-45-67-89-AB-CD-EF\"), \"ServerChallenge\");\n\t\t\tAssert.That (Convert.ToBase64String (type2.Encode ()), Is.EqualTo (\"TlRMTVNTUAACAAAADAAMADgAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgBEAAAAAAAAAAAAAABEAE8ATQBBAEkATgACAAwARABPAE0AQQBJAE4AAQAMAFMARQBSAFYARQBSAAQAFABkAG8AbQBhAGkAbgAuAGMAbwBtAAMAIgBzAGUAcgB2AGUAcgAuAGQAbwBtAGEAaQBuAC4AYwBvAG0AAAAAAA==\"), \"Encode\");\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://davenport.sourceforge.net/ntlm.html#NtlmChallengeMessageExample\n\t\tpublic void TestDecodeDavenportExample ()\n\t\t{\n\t\t\tbyte[] rawData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x02, 0x81, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x62, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x45, 0x00, 0x52, 0x00, 0x56, 0x00, 0x45, 0x00, 0x52, 0x00, 0x04, 0x00, 0x14, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x03, 0x00, 0x22, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00 };\n\t\t\tvar type2 = new NtlmChallengeMessage (rawData, 0, rawData.Length);\n\n\t\t\tAssert.That (type2.Type, Is.EqualTo (2), \"Type\");\n\t\t\tAssert.That (type2.Flags, Is.EqualTo ((NtlmFlags) 0x00810201), \"Flags\");\n\t\t\tAssert.That (type2.TargetName, Is.EqualTo (\"DOMAIN\"), \"TargetName\");\n\t\t\tAssert.That (type2.TargetInfo.ServerName, Is.EqualTo (\"SERVER\"), \"ServerName\");\n\t\t\tAssert.That (type2.TargetInfo.DomainName, Is.EqualTo (\"DOMAIN\"), \"DomainName\");\n\t\t\tAssert.That (type2.TargetInfo.DnsServerName, Is.EqualTo (\"server.domain.com\"), \"DnsServerName\");\n\t\t\tAssert.That (type2.TargetInfo.DnsDomainName, Is.EqualTo (\"domain.com\"), \"DnsDomainName\");\n\t\t\tAssert.That (BitConverter.ToString (type2.ServerChallenge), Is.EqualTo (\"01-23-45-67-89-AB-CD-EF\"), \"ServerChallenge\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/NtlmNegotiateMessageTests.cs",
    "content": "﻿//\n// NtlmNegotiateMessageTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class NtlmNegotiateMessageTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tbyte[] badMessageData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00 };\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmNegotiateMessage (null, 0, 16));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmNegotiateMessage (new byte[8], 0, 8));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmNegotiateMessage (new byte[8], -1, 8));\n\t\t\tAssert.Throws<ArgumentException> (() => new NtlmNegotiateMessage (badMessageData, 0, badMessageData.Length));\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://www.innovation.ch/java/ntlm.html\n\t\tpublic void TestEncodeJavaExample ()\n\t\t{\n\t\t\tvar type1 = new NtlmNegotiateMessage (NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateAlwaysSign, \"Ursa-Minor\", \"LightCity\");\n\n\t\t\tAssert.That (type1.Type, Is.EqualTo (1), \"Type\");\n\t\t\tAssert.That (type1.Flags, Is.EqualTo ((NtlmFlags) 0xb207), \"Flags\");\n\t\t\tAssert.That (Convert.ToBase64String (type1.Encode ()), Is.EqualTo (\"TlRMTVNTUAABAAAAB7IAAAoACgAxAAAACQAJACgAAAAAAAAAAAAAAExJR0hUQ0lUWVVSU0EtTUlOT1I=\"), \"Encode\");\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://www.innovation.ch/java/ntlm.html\n\t\tpublic void TestDecodeJavaExample ()\n\t\t{\n\t\t\tbyte[] rawData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0xb2, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x29, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0x20, 0x00, 0x00, 0x00, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x43, 0x49, 0x54, 0x59, 0x55, 0x52, 0x53, 0x41, 0x2d, 0x4d, 0x49, 0x4e, 0x4f, 0x52 };\n\t\t\tvar type1 = new NtlmNegotiateMessage (rawData, 0, rawData.Length);\n\n\t\t\tAssert.That (type1.Type, Is.EqualTo (1), \"Type\");\n\t\t\tAssert.That (type1.Flags, Is.EqualTo ((NtlmFlags) 0xb203), \"Flags\");\n\t\t\tAssert.That (type1.Domain, Is.EqualTo (\"URSA-MINOR\"), \"Domain\");\n\t\t\tAssert.That (type1.Workstation, Is.EqualTo (\"LIGHTCITY\"), \"Workstation\");\n\t\t}\n\n\t\t[Test]\n\t\t// Example from http://davenport.sourceforge.net/ntlm.html#NtlmNegotiateMessageExample\n\t\tpublic void TestDecodeDavenportExample ()\n\t\t{\n\t\t\tbyte[] rawData = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x32, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x20, 0x00, 0x00, 0x00, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e };\n\t\t\tvar type1 = new NtlmNegotiateMessage (rawData, 0, rawData.Length);\n\n\t\t\tAssert.That (type1.Type, Is.EqualTo (1), \"Type\");\n\t\t\tAssert.That (type1.Flags, Is.EqualTo ((NtlmFlags) 0x3207), \"Flags\");\n\t\t\tAssert.That (type1.Domain, Is.EqualTo (\"DOMAIN\"), \"Domain\");\n\t\t\tAssert.That (type1.Workstation, Is.EqualTo (\"WORKSTATION\"), \"Workstation\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/NtlmSingleHostDataTests.cs",
    "content": "﻿//\n// NtlmSingleHostDataTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class NtlmSingleHostDataTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar customData = new byte[8];\n\t\t\tvar machineId = new byte[32];\n\t\t\tvar buffer = new byte[48];\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmSingleHostData (null, machineId));\n\t\t\tAssert.Throws<ArgumentException> (() => new NtlmSingleHostData (machineId, machineId));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmSingleHostData (customData, null));\n\t\t\tAssert.Throws<ArgumentException> (() => new NtlmSingleHostData (customData, customData));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmSingleHostData (null, 0, 48));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmSingleHostData (buffer, -1, 48));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmSingleHostData (buffer, 0, 25));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/NtlmTargetInfoTests.cs",
    "content": "﻿//\n// NtlmTargetInfoTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class NtlmTargetInfoTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar buffer = new byte[24];\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new NtlmTargetInfo (null, 0, 24, true));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmTargetInfo (buffer, -1, 24, true));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new NtlmTargetInfo (buffer, 0, 25, true));\n\t\t}\n\n#if false\n\t\tstatic string ToCSharpByteArrayInitializer (string name, byte[] buffer)\n\t\t{\n\t\t\tvar builder = new System.Text.StringBuilder ();\n\t\t\tint index = 0;\n\n\t\t\tbuilder.AppendLine ($\"static readonly byte[] {name} = {{\");\n\t\t\twhile (index < buffer.Length) {\n\t\t\t\tbuilder.Append ('\\t');\n\t\t\t\tfor (int i = 0; i < 16 && index < buffer.Length; i++, index++)\n\t\t\t\t\tbuilder.AppendFormat (\"0x{0}, \", buffer[index].ToString (\"x2\"));\n\t\t\t\tbuilder.Length--;\n\t\t\t\tif (index == buffer.Length)\n\t\t\t\t\tbuilder.Length--;\n\t\t\t\tbuilder.AppendLine ();\n\t\t\t}\n\t\t\tbuilder.AppendLine ($\"}};\");\n\n\t\t\treturn builder.ToString ();\n\t\t}\n#endif\n\n\t\tstatic void AssertDecode (byte[] buffer, bool unicode)\n\t\t{\n\t\t\tvar channelBinding = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };\n\t\t\tvar timestamp = DateTime.FromFileTimeUtc (132737136905945346);\n\t\t\tvar targetInfo = new NtlmTargetInfo (buffer, 0, buffer.Length, unicode);\n\n\t\t\t//var buffer1 = targetInfo.Encode (true);\n\t\t\t//var csharp = ToCSharpByteArrayInitializer (\"NtlmTargetInfoUnorderedUnicode\", buffer1);\n\n\t\t\tAssert.That (targetInfo.ServerName, Is.EqualTo (\"ServerName\"));\n\t\t\tAssert.That (targetInfo.DomainName, Is.EqualTo (\"DomainName\"));\n\t\t\tAssert.That (targetInfo.DnsServerName, Is.EqualTo (\"DnsServerName\"));\n\t\t\tAssert.That (targetInfo.DnsDomainName, Is.EqualTo (\"DnsDomainName\"));\n\t\t\tAssert.That (targetInfo.DnsTreeName, Is.EqualTo (\"DnsTreeName\"));\n\t\t\tAssert.That (targetInfo.Flags, Is.EqualTo (2), \"Flags\");\n\t\t\tAssert.That (targetInfo.Timestamp, Is.EqualTo (timestamp.ToFileTimeUtc ()), \"Timestamp\");\n\t\t\t//Assert.That (targetInfo.SingleHost, Is.EqualTo (\"SingleHost\"), \"SingleHost\");\n\t\t\tAssert.That (targetInfo.ChannelBinding, Has.Length.EqualTo (16), \"ChannelBinding\");\n\n\t\t\tfor (int i = 0; i < channelBinding.Length; i++)\n\t\t\t\tAssert.That (targetInfo.ChannelBinding[i], Is.EqualTo (channelBinding[i]), $\"ChannelBinding[{i}]\");\n\n\t\t\t// Verify that re-encoding the target info results in an exact replica of the input.\n\t\t\tvar encoded = targetInfo.Encode (unicode);\n\n\t\t\tAssert.That (encoded, Has.Length.EqualTo (buffer.Length), \"Re-encoded lengths do not match\");\n\n\t\t\tfor (int i = 0; i < buffer.Length; i++)\n\t\t\t\tAssert.That (encoded[i], Is.EqualTo (buffer[i]), $\"encoded[{i}]\");\n\t\t}\n\n\t\tstatic readonly byte[] NtlmTargetInfoOrderedOem = {\n\t\t\t0x01, 0x00, 0x0a, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x02, 0x00,\n\t\t\t0x0a, 0x00, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x03, 0x00, 0x0d, 0x00,\n\t\t\t0x44, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x04, 0x00, 0x0d,\n\t\t\t0x00, 0x44, 0x6e, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x05, 0x00,\n\t\t\t0x0b, 0x00, 0x44, 0x6e, 0x73, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x06, 0x00, 0x04,\n\t\t\t0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x08, 0x00, 0x02, 0x01, 0xc8, 0x05, 0xb9, 0x93, 0xd7,\n\t\t\t0x01, 0x08, 0x00, 0x0a, 0x00, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x09,\n\t\t\t0x00, 0x0a, 0x00, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x0a, 0x00, 0x10,\n\t\t\t0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd,\n\t\t\t0xef, 0x00, 0x00, 0x00, 0x00\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestDecodeOrderedOem ()\n\t\t{\n\t\t\tAssertDecode (NtlmTargetInfoOrderedOem, false);\n\t\t}\n\n\t\tstatic readonly byte[] NtlmTargetInfoOrderedUnicode = {\n\t\t\t0x01, 0x00, 0x14, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00,\n\t\t\t0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x02, 0x00, 0x14, 0x00, 0x44, 0x00, 0x6f, 0x00,\n\t\t\t0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00,\n\t\t\t0x03, 0x00, 0x1a, 0x00, 0x44, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00,\n\t\t\t0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x04, 0x00,\n\t\t\t0x1a, 0x00, 0x44, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x05, 0x00, 0x16, 0x00,\n\t\t\t0x44, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x54, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x4e, 0x00,\n\t\t\t0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x06, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00,\n\t\t\t0x08, 0x00, 0x02, 0x01, 0xc8, 0x05, 0xb9, 0x93, 0xd7, 0x01, 0x08, 0x00, 0x14, 0x00, 0x53, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x48, 0x00, 0x6f, 0x00, 0x73, 0x00,\n\t\t\t0x74, 0x00, 0x09, 0x00, 0x14, 0x00, 0x54, 0x00, 0x61, 0x00, 0x72, 0x00, 0x67, 0x00, 0x65, 0x00,\n\t\t\t0x74, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x23,\n\t\t\t0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00,\n\t\t\t0x00, 0x00\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestDecodeOrderedUnicode ()\n\t\t{\n\t\t\tAssertDecode (NtlmTargetInfoOrderedUnicode, true);\n\t\t}\n\n\t\tstatic readonly byte[] NtlmTargetInfoUnorderedOem = {\n\t\t\t0x07, 0x00, 0x08, 0x00, 0x02, 0x01, 0xc8, 0x05, 0xb9, 0x93, 0xd7, 0x01, 0x09, 0x00, 0x0a, 0x00,\n\t\t\t0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x08, 0x00, 0x0a, 0x00, 0x53, 0x69,\n\t\t\t0x6e, 0x67, 0x6c, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x01, 0x00, 0x0a, 0x00, 0x53, 0x65, 0x72, 0x76,\n\t\t\t0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x06, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,\n\t\t\t0x0a, 0x00, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x05, 0x00, 0x0b, 0x00,\n\t\t\t0x44, 0x6e, 0x73, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x03, 0x00, 0x0d, 0x00, 0x44,\n\t\t\t0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x04, 0x00, 0x0d, 0x00,\n\t\t\t0x44, 0x6e, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x0a, 0x00, 0x10,\n\t\t\t0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd,\n\t\t\t0xef, 0x00, 0x00, 0x00, 0x00\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestDecodeUnorderedOem ()\n\t\t{\n\t\t\tAssertDecode (NtlmTargetInfoUnorderedOem, false);\n\t\t}\n\n\t\tstatic readonly byte[] NtlmTargetInfoUnorderedUnicode = {\n\t\t\t0x07, 0x00, 0x08, 0x00, 0x02, 0x01, 0xc8, 0x05, 0xb9, 0x93, 0xd7, 0x01, 0x09, 0x00, 0x14, 0x00,\n\t\t\t0x54, 0x00, 0x61, 0x00, 0x72, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x4e, 0x00, 0x61, 0x00,\n\t\t\t0x6d, 0x00, 0x65, 0x00, 0x08, 0x00, 0x14, 0x00, 0x53, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00,\n\t\t\t0x6c, 0x00, 0x65, 0x00, 0x48, 0x00, 0x6f, 0x00, 0x73, 0x00, 0x74, 0x00, 0x01, 0x00, 0x14, 0x00,\n\t\t\t0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x61, 0x00,\n\t\t\t0x6d, 0x00, 0x65, 0x00, 0x06, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x14, 0x00,\n\t\t\t0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x4e, 0x00, 0x61, 0x00,\n\t\t\t0x6d, 0x00, 0x65, 0x00, 0x05, 0x00, 0x16, 0x00, 0x44, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x54, 0x00,\n\t\t\t0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x03, 0x00,\n\t\t\t0x1a, 0x00, 0x44, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00,\n\t\t\t0x65, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x04, 0x00, 0x1a, 0x00,\n\t\t\t0x44, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00,\n\t\t\t0x6e, 0x00, 0x4e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x01, 0x23,\n\t\t\t0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00,\n\t\t\t0x00, 0x00\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestDecodeUnorderedUnicode ()\n\t\t{\n\t\t\tAssertDecode (NtlmTargetInfoUnorderedUnicode, true);\n\t\t}\n\n\t\tstatic NtlmSingleHostData GenerateSingleHostData ()\n\t\t{\n\t\t\tvar customData = new byte[8];\n\t\t\tvar machineId = new byte[32];\n\t\t\tvar rng = new Random ();\n\n\t\t\trng.NextBytes (customData);\n\t\t\trng.NextBytes (machineId);\n\n\t\t\treturn new NtlmSingleHostData (customData, machineId);\n\t\t}\n\n\t\tstatic void AssertSingleHost (NtlmSingleHostData expected, byte[] actual, string prefix)\n\t\t{\n\t\t\tvar singleHost = new NtlmSingleHostData (actual, 0, actual.Length);\n\n\t\t\tAssert.That (singleHost.Size, Is.EqualTo (expected.Size), $\"{prefix}.Size\");\n\t\t\tfor (int i = 0; i < 8; i++)\n\t\t\t\tAssert.That (singleHost.CustomData[i], Is.EqualTo (expected.CustomData[i]), $\"{prefix}.CustomData[{i}]\");\n\t\t\tfor (int i = 0; i < 32; i++)\n\t\t\t\tAssert.That (singleHost.MachineId[i], Is.EqualTo (expected.MachineId[i]), $\"{prefix}.MachineId[{i}]\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRemovingAttributes ()\n\t\t{\n\t\t\tvar channelBinding = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };\n\t\t\tvar timestamp = DateTime.FromFileTimeUtc (132737136905945346);\n\t\t\tvar singleHost = GenerateSingleHostData ();\n\t\t\tvar targetInfo = new NtlmTargetInfo {\n\t\t\t\tServerName = \"ServerName\",\n\t\t\t\tDomainName = \"DomainName\",\n\t\t\t\tSingleHost = singleHost.Encode (),\n\t\t\t\tFlags = 2,\n\t\t\t\tTimestamp = timestamp.ToFileTimeUtc (),\n\t\t\t\tChannelBinding = channelBinding\n\t\t\t};\n\n\t\t\tAssert.That (targetInfo.ServerName, Is.EqualTo (\"ServerName\"));\n\t\t\tAssert.That (targetInfo.DomainName, Is.EqualTo (\"DomainName\"));\n\t\t\tAssertSingleHost (singleHost, targetInfo.SingleHost, \"SingleHost\");\n\t\t\tAssert.That (targetInfo.Flags, Is.EqualTo (2), \"Flags\");\n\t\t\tAssert.That (targetInfo.Timestamp, Is.EqualTo (timestamp.ToFileTimeUtc ()), \"Timestamp\");\n\t\t\tAssert.That (targetInfo.ChannelBinding, Has.Length.EqualTo (16), \"ChannelBinding\");\n\n\t\t\tfor (int i = 0; i < channelBinding.Length; i++)\n\t\t\t\tAssert.That (targetInfo.ChannelBinding[i], Is.EqualTo (channelBinding[i]), $\"ChannelBinding[{i}]\");\n\n\t\t\ttargetInfo.ServerName = null;\n\t\t\tAssert.That (targetInfo.ServerName, Is.Null, \"ServerName remove attempt #1\");\n\t\t\ttargetInfo.ServerName = null;\n\t\t\tAssert.That (targetInfo.ServerName, Is.Null, \"ServerName remove attempt #2\");\n\n\t\t\ttargetInfo.SingleHost = null;\n\t\t\tAssert.That (targetInfo.SingleHost, Is.Null, \"SingleHost remove attempt #1\");\n\t\t\ttargetInfo.SingleHost = null;\n\t\t\tAssert.That (targetInfo.SingleHost, Is.Null, \"SingleHost remove attempt #2\");\n\n\t\t\ttargetInfo.Flags = null;\n\t\t\tAssert.That (targetInfo.Flags, Is.Null, \"Flags remove attempt #1\");\n\t\t\ttargetInfo.Flags = null;\n\t\t\tAssert.That (targetInfo.Flags, Is.Null, \"Flags remove attempt #2\");\n\n\t\t\ttargetInfo.Timestamp = null;\n\t\t\tAssert.That (targetInfo.Timestamp, Is.Null, \"Timestamp remove attempt #1\");\n\t\t\ttargetInfo.Timestamp = null;\n\t\t\tAssert.That (targetInfo.Timestamp, Is.Null, \"Timestamp remove attempt #2\");\n\n\t\t\ttargetInfo.ChannelBinding = null;\n\t\t\tAssert.That (targetInfo.ChannelBinding, Is.Null, \"ChannelBinding remove attempt #1\");\n\t\t\ttargetInfo.ChannelBinding = null;\n\t\t\tAssert.That (targetInfo.ChannelBinding, Is.Null, \"ChannelBinding remove attempt #2\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUpdatingAttributes ()\n\t\t{\n\t\t\tvar channelBinding = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };\n\t\t\tvar timestamp = DateTime.FromFileTimeUtc (132737136905945346);\n\t\t\tvar updatedSingleHost = GenerateSingleHostData ();\n\t\t\tvar singleHost = GenerateSingleHostData ();\n\t\t\tvar targetInfo = new NtlmTargetInfo {\n\t\t\t\tServerName = \"ServerName\",\n\t\t\t\tDomainName = \"DomainName\",\n\t\t\t\tSingleHost = singleHost.Encode (),\n\t\t\t\tFlags = 2,\n\t\t\t\tTimestamp = timestamp.ToFileTimeUtc (),\n\t\t\t\tChannelBinding = channelBinding\n\t\t\t};\n\n\t\t\tAssert.That (targetInfo.ServerName, Is.EqualTo (\"ServerName\"));\n\t\t\tAssert.That (targetInfo.DomainName, Is.EqualTo (\"DomainName\"));\n\t\t\tAssertSingleHost (singleHost, targetInfo.SingleHost, \"SingleHost\");\n\t\t\tAssert.That (targetInfo.Flags, Is.EqualTo (2), \"Flags\");\n\t\t\tAssert.That (targetInfo.Timestamp, Is.EqualTo (timestamp.ToFileTimeUtc ()), \"Timestamp\");\n\t\t\tAssert.That (targetInfo.ChannelBinding, Has.Length.EqualTo (16), \"ChannelBinding\");\n\n\t\t\tfor (int i = 0; i < channelBinding.Length; i++)\n\t\t\t\tAssert.That (targetInfo.ChannelBinding[i], Is.EqualTo (channelBinding[i]), $\"ChannelBinding[{i}]\");\n\n\t\t\ttargetInfo.ServerName = \"NewServerName\";\n\t\t\tAssert.That (targetInfo.ServerName, Is.EqualTo (\"NewServerName\"), \"Updated ServerName\");\n\n\t\t\ttargetInfo.SingleHost = updatedSingleHost.Encode ();\n\t\t\tAssertSingleHost (updatedSingleHost, targetInfo.SingleHost, \"Updated SingleHost\");\n\n\t\t\ttargetInfo.Flags = 1;\n\t\t\tAssert.That (targetInfo.Flags, Is.EqualTo (1), \"Updated Flags\");\n\n\t\t\ttargetInfo.Timestamp = 123456789;\n\t\t\tAssert.That (targetInfo.Timestamp, Is.EqualTo (123456789), \"Updated Timestamp\");\n\n\t\t\ttargetInfo.ChannelBinding = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };\n\t\t\tAssert.That (targetInfo.ChannelBinding, Has.Length.EqualTo (20), \"Updated ChannelBinding\");\n\n\t\t\tfor (int i = 0; i < channelBinding.Length; i++)\n\t\t\t\tAssert.That (targetInfo.ChannelBinding[i], Is.EqualTo (i), $\"Updated ChannelBinding[{i}]\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/Ntlm/RC4Tests.cs",
    "content": "﻿//\n// RC4Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security.Ntlm {\n\t[TestFixture]\n\tpublic class RC4Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tusing (var rc4 = new RC4 ()) {\n\t\t\t\tvar buffer = new byte[16];\n\n\t\t\t\tAssert.That (rc4.InputBlockSize, Is.EqualTo (1), \"InputBlockSize\");\n\t\t\t\tAssert.That (rc4.OutputBlockSize, Is.EqualTo (1), \"OutputBlockSize\");\n\t\t\t\tAssert.That (rc4.CanReuseTransform, Is.False, \"CanReuseTransform\");\n\t\t\t\tAssert.That (rc4.CanTransformMultipleBlocks, Is.True, \"CanTransformMultipleBlocks\");\n\n\t\t\t\tAssert.Throws<InvalidOperationException> (() => { var x = rc4.Key; });\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => { rc4.Key = null; });\n\t\t\t\tAssert.Throws<ArgumentException> (() => { rc4.Key = Array.Empty<byte> (); });\n\n\t\t\t\trc4.GenerateIV ();\n\t\t\t\trc4.GenerateKey ();\n\t\t\t\trc4.CreateDecryptor ();\n\t\t\t\trc4.CreateEncryptor ();\n\n\t\t\t\t// TransformBlock input buffer parameters\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => rc4.TransformBlock (null, 0, buffer.Length, buffer, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => rc4.TransformBlock (buffer, -1, buffer.Length, buffer, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => rc4.TransformBlock (buffer, 0, -1, buffer, 0));\n\n\t\t\t\t// TransformBlock output buffer parameters\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => rc4.TransformBlock (buffer, 0, buffer.Length, null, 0));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => rc4.TransformBlock (buffer, 0, buffer.Length, buffer, -1));\n\n\t\t\t\t// TransformFinalBlock\n\t\t\t\tAssert.Throws<ArgumentNullException> (() => rc4.TransformFinalBlock (null, 0, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => rc4.TransformFinalBlock (buffer, -1, buffer.Length));\n\t\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => rc4.TransformFinalBlock (buffer, 0, -1));\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertEncrypt (byte[] key, byte[] input, byte[] expected)\n\t\t{\n\t\t\tusing (var rc4 = new RC4 ()) {\n\t\t\t\tvar output = new byte[input.Length];\n\n\t\t\t\trc4.Key = key;\n\n\t\t\t\trc4.TransformBlock (input, 0, input.Length, output, 0);\n\n\t\t\t\tfor (int i = 0; i < output.Length; i++)\n\t\t\t\t\tAssert.That (output[i], Is.EqualTo (expected[i]), $\"output[{i}]\");\n\t\t\t}\n\n\t\t\tusing (var rc4 = new RC4 ()) {\n\t\t\t\trc4.Key = key;\n\n\t\t\t\tvar output = rc4.TransformFinalBlock (input, 0, input.Length);\n\n\t\t\t\tfor (int i = 0; i < output.Length; i++)\n\t\t\t\t\tAssert.That (output[i], Is.EqualTo (expected[i]), $\"output[{i}]\");\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEncryptExample1 ()\n\t\t{\n\t\t\tvar expected = new byte[] { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 };\n\t\t\tvar key = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };\n\t\t\tvar text = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };\n\n\t\t\tAssertEncrypt (key, text, expected);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEncryptExample2 ()\n\t\t{\n\t\t\tbyte[] expected = new byte[] { 0xF1, 0x38, 0x29, 0xC9, 0xDE };\n\t\t\tbyte[] key = new byte[] { 0x61, 0x8A, 0x63, 0xD2, 0xFB };\n\t\t\tbyte[] text = new byte[] { 0xDC, 0xEE, 0x4C, 0xF9, 0x2C };\n\n\t\t\tAssertEncrypt (key, text, expected);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEncryptExample3 ()\n\t\t{\n\t\t\tbyte[] expected = new byte[] {\n\t\t\t\t0x35, 0x81, 0x86, 0x99, 0x90, 0x01, 0xe6, 0xb5, 0xda, 0xf0, 0x5e, 0xce, 0xeb, 0x7e, 0xee, 0x21,\n\t\t\t\t0xe0, 0x68, 0x9c, 0x1f, 0x00, 0xee, 0xa8, 0x1f, 0x7d, 0xd2, 0xca, 0xae, 0xe1, 0xd2, 0x76, 0x3e,\n\t\t\t\t0x68, 0xaf, 0x0e, 0xad, 0x33, 0xd6, 0x6c, 0x26, 0x8b, 0xc9, 0x46, 0xc4, 0x84, 0xfb, 0xe9, 0x4c,\n\t\t\t\t0x5f, 0x5e, 0x0b, 0x86, 0xa5, 0x92, 0x79, 0xe4, 0xf8, 0x24, 0xe7, 0xa6, 0x40, 0xbd, 0x22, 0x32,\n\t\t\t\t0x10, 0xb0, 0xa6, 0x11, 0x60, 0xb7, 0xbc, 0xe9, 0x86, 0xea, 0x65, 0x68, 0x80, 0x03, 0x59, 0x6b,\n\t\t\t\t0x63, 0x0a, 0x6b, 0x90, 0xf8, 0xe0, 0xca, 0xf6, 0x91, 0x2a, 0x98, 0xeb, 0x87, 0x21, 0x76, 0xe8,\n\t\t\t\t0x3c, 0x20, 0x2c, 0xaa, 0x64, 0x16, 0x6d, 0x2c, 0xce, 0x57, 0xff, 0x1b, 0xca, 0x57, 0xb2, 0x13,\n\t\t\t\t0xf0, 0xed, 0x1a, 0xa7, 0x2f, 0xb8, 0xea, 0x52, 0xb0, 0xbe, 0x01, 0xcd, 0x1e, 0x41, 0x28, 0x67,\n\t\t\t\t0x72, 0x0b, 0x32, 0x6e, 0xb3, 0x89, 0xd0, 0x11, 0xbd, 0x70, 0xd8, 0xaf, 0x03, 0x5f, 0xb0, 0xd8,\n\t\t\t\t0x58, 0x9d, 0xbc, 0xe3, 0xc6, 0x66, 0xf5, 0xea, 0x8d, 0x4c, 0x79, 0x54, 0xc5, 0x0c, 0x3f, 0x34,\n\t\t\t\t0x0b, 0x04, 0x67, 0xf8, 0x1b, 0x42, 0x59, 0x61, 0xc1, 0x18, 0x43, 0x07, 0x4d, 0xf6, 0x20, 0xf2,\n\t\t\t\t0x08, 0x40, 0x4b, 0x39, 0x4c, 0xf9, 0xd3, 0x7f, 0xf5, 0x4b, 0x5f, 0x1a, 0xd8, 0xf6, 0xea, 0x7d,\n\t\t\t\t0xa3, 0xc5, 0x61, 0xdf, 0xa7, 0x28, 0x1f, 0x96, 0x44, 0x63, 0xd2, 0xcc, 0x35, 0xa4, 0xd1, 0xb0,\n\t\t\t\t0x34, 0x90, 0xde, 0xc5, 0x1b, 0x07, 0x11, 0xfb, 0xd6, 0xf5, 0x5f, 0x79, 0x23, 0x4d, 0x5b, 0x7c,\n\t\t\t\t0x76, 0x66, 0x22, 0xa6, 0x6d, 0xe9, 0x2b, 0xe9, 0x96, 0x46, 0x1d, 0x5e, 0x4d, 0xc8, 0x78, 0xef,\n\t\t\t\t0x9b, 0xca, 0x03, 0x05, 0x21, 0xe8, 0x35, 0x1e, 0x4b, 0xae, 0xd2, 0xfd, 0x04, 0xf9, 0x46, 0x73,\n\t\t\t\t0x68, 0xc4, 0xad, 0x6a, 0xc1, 0x86, 0xd0, 0x82, 0x45, 0xb2, 0x63, 0xa2, 0x66, 0x6d, 0x1f, 0x6c,\n\t\t\t\t0x54, 0x20, 0xf1, 0x59, 0x9d, 0xfd, 0x9f, 0x43, 0x89, 0x21, 0xc2, 0xf5, 0xa4, 0x63, 0x93, 0x8c,\n\t\t\t\t0xe0, 0x98, 0x22, 0x65, 0xee, 0xf7, 0x01, 0x79, 0xbc, 0x55, 0x3f, 0x33, 0x9e, 0xb1, 0xa4, 0xc1,\n\t\t\t\t0xaf, 0x5f, 0x6a, 0x54, 0x7f\n\t\t\t};\n\t\t\tbyte[] key = new byte[] {\n\t\t\t\t0x29, 0x04, 0x19, 0x72, 0xFB, 0x42, 0xBA, 0x5F, 0xC7, 0x12, 0x77, 0x12, 0xF1, 0x38, 0x29, 0xC9\n\t\t\t};\n\t\t\tbyte[] text = new byte[] {\n\t\t\t\t0x52, 0x75, 0x69, 0x73, 0x6c, 0x69, 0x6e, 0x6e, 0x75, 0x6e, 0x20, 0x6c, 0x61, 0x75, 0x6c, 0x75,\n\t\t\t\t0x20, 0x6b, 0x6f, 0x72, 0x76, 0x69, 0x73, 0x73, 0x73, 0x61, 0x6e, 0x69, 0x2c, 0x20, 0x74, 0xe4,\n\t\t\t\t0x68, 0x6b, 0xe4, 0x70, 0xe4, 0x69, 0x64, 0x65, 0x6e, 0x20, 0x70, 0xe4, 0xe4, 0x6c, 0x6c, 0xe4,\n\t\t\t\t0x20, 0x74, 0xe4, 0x79, 0x73, 0x69, 0x6b, 0x75, 0x75, 0x2e, 0x20, 0x4b, 0x65, 0x73, 0xe4, 0x79,\n\t\t\t\t0xf6, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x6e, 0x69, 0x20, 0x6f, 0x6d, 0x61, 0x6e, 0x61,\n\t\t\t\t0x6e, 0x69, 0x2c, 0x20, 0x6b, 0x61, 0x73, 0x6b, 0x69, 0x73, 0x61, 0x76, 0x75, 0x75, 0x6e, 0x20,\n\t\t\t\t0x6c, 0x61, 0x61, 0x6b, 0x73, 0x6f, 0x74, 0x20, 0x76, 0x65, 0x72, 0x68, 0x6f, 0x75, 0x75, 0x2e,\n\t\t\t\t0x20, 0x45, 0x6e, 0x20, 0x6d, 0x61, 0x20, 0x69, 0x6c, 0x6f, 0x69, 0x74, 0x73, 0x65, 0x2c, 0x20,\n\t\t\t\t0x73, 0x75, 0x72, 0x65, 0x20, 0x68, 0x75, 0x6f, 0x6b, 0x61, 0x61, 0x2c, 0x20, 0x6d, 0x75, 0x74,\n\t\t\t\t0x74, 0x61, 0x20, 0x6d, 0x65, 0x74, 0x73, 0xe4, 0x6e, 0x20, 0x74, 0x75, 0x6d, 0x6d, 0x75, 0x75,\n\t\t\t\t0x73, 0x20, 0x6d, 0x75, 0x6c, 0x6c, 0x65, 0x20, 0x74, 0x75, 0x6f, 0x6b, 0x61, 0x61, 0x2e, 0x20,\n\t\t\t\t0x50, 0x75, 0x75, 0x6e, 0x74, 0x6f, 0x20, 0x70, 0x69, 0x6c, 0x76, 0x65, 0x6e, 0x2c, 0x20, 0x6d,\n\t\t\t\t0x69, 0x20, 0x68, 0x75, 0x6b, 0x6b, 0x75, 0x75, 0x2c, 0x20, 0x73, 0x69, 0x69, 0x6e, 0x74, 0x6f,\n\t\t\t\t0x20, 0x76, 0x61, 0x72, 0x61, 0x6e, 0x20, 0x74, 0x75, 0x75, 0x6c, 0x69, 0x73, 0x65, 0x6e, 0x2c,\n\t\t\t\t0x20, 0x6d, 0x69, 0x20, 0x6e, 0x75, 0x6b, 0x6b, 0x75, 0x75, 0x2e, 0x20, 0x54, 0x75, 0x6f, 0x6b,\n\t\t\t\t0x73, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6e, 0x61, 0x6d, 0x6f, 0x6e, 0x20, 0x6a, 0x61, 0x20, 0x76,\n\t\t\t\t0x61, 0x72, 0x6a, 0x6f, 0x74, 0x20, 0x76, 0x65, 0x65, 0x6e, 0x2c, 0x20, 0x6e, 0x69, 0x69, 0x73,\n\t\t\t\t0x74, 0xe4, 0x20, 0x73, 0x79, 0x64, 0xe4, 0x6d, 0x65, 0x6e, 0x69, 0x20, 0x6c, 0x61, 0x75, 0x6c,\n\t\t\t\t0x75, 0x6e, 0x20, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x20, 0x2d, 0x20, 0x45, 0x69, 0x6e, 0x6f, 0x20,\n\t\t\t\t0x4c, 0x65, 0x69, 0x6e, 0x6f\n\t\t\t};\n\n\t\t\tAssertEncrypt (key, text, expected);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslExceptionTests.cs",
    "content": "﻿//\n// SaslExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslExceptionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslException (null, SaslErrorCode.MissingChallenge, \"message\"));\n\t\t}\n\n#if NET6_0\n\t\t[Test]\n\t\tpublic void TestSerialization ()\n\t\t{\n\t\t\tvar expected = new SaslException (\"CRAM-MD5\", SaslErrorCode.InvalidChallenge, \"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SaslException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.Mechanism, Is.EqualTo (expected.Mechanism), \"Unexpected Mechanism.\");\n\t\t\t\tAssert.That (ex.ErrorCode, Is.EqualTo (expected.ErrorCode), \"Unexpected ErrorCode.\");\n\t\t\t}\n\t\t}\n#endif // NET6_0\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismAnonymousTests.cs",
    "content": "﻿//\n// SaslMechanismAnonymousTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismAnonymousTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tSaslMechanism sasl;\n\n\t\t\tsasl = new SaslMechanismAnonymous (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismAnonymous (null, credentials));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismAnonymous (Encoding.UTF8, (NetworkCredential) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismAnonymous ((NetworkCredential) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismAnonymous (null, \"username\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismAnonymous (Encoding.UTF8, (string) null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismAnonymous ((string) null));\n\t\t}\n\n\t\tstatic void AssertAnonymous (SaslMechanismAnonymous sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"dXNlcm5hbWU=\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: should be authenticated.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAnonymousAuth ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tvar sasl = new SaslMechanismAnonymous (credentials);\n\n\t\t\tAssertAnonymous (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismAnonymous (\"username\");\n\n\t\t\tAssertAnonymous (sasl, \"user\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismCramMd5Tests.cs",
    "content": "﻿//\n// SaslMechanismCramMd5Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismCramMd5Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tvar sasl = new SaslMechanismCramMd5 (credentials);\n\t\t\tAssert.Throws<NotSupportedException> (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismCramMd5 (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismCramMd5 (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismCramMd5 (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertExampleFromRfc2195 (SaslMechanismCramMd5 sasl, string prefix)\n\t\t{\n\t\t\tconst string serverToken = \"<1896.697170952@postoffice.example.net>\";\n\t\t\tconst string expected = \"joe 3dbc88f0624776a737b39093f6eb6427\";\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.False, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar token = Encoding.ASCII.GetBytes (serverToken);\n\t\t\tvar challenge = sasl.Challenge (Convert.ToBase64String (token));\n\t\t\tvar decoded = Convert.FromBase64String (challenge);\n\t\t\tvar result = Encoding.ASCII.GetString (decoded);\n\n\t\t\tAssert.That (result, Is.EqualTo (expected), $\"{prefix}: challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExampleFromRfc2195 ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"joe\", \"tanstaaftanstaaf\");\n\t\t\tvar sasl = new SaslMechanismCramMd5 (credentials);\n\t\t\tvar uri = new Uri (\"smtp://elwood.innosoft.com\");\n\n\t\t\tAssertExampleFromRfc2195 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismCramMd5 (\"joe\", \"tanstaaftanstaaf\");\n\n\t\t\tAssertExampleFromRfc2195 (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismDigestMd5Tests.cs",
    "content": "﻿//\n// SaslMechanismDigestMd5Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismDigestMd5Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tvar uri = new Uri (\"smtp://localhost\");\n\n\t\t\tvar sasl = new SaslMechanismDigestMd5 (credentials) { Uri = uri };\n\t\t\tAssert.Throws<NotSupportedException> (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismDigestMd5 (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismDigestMd5 (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismDigestMd5 (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertExampleFromRfc2831 (SaslMechanismDigestMd5 sasl, string prefix)\n\t\t{\n\t\t\tconst string serverToken1 = \"realm=\\\"elwood.innosoft.com\\\",nonce=\\\"OA6MG9tEQGm2hh\\\",qop=\\\"auth\\\",algorithm=md5-sess,charset=utf-8\";\n\t\t\tconst string expected1 = \"username=\\\"chris\\\",realm=\\\"elwood.innosoft.com\\\",nonce=\\\"OA6MG9tEQGm2hh\\\",cnonce=\\\"OA6MHXh6VqTrRk\\\",nc=00000001,qop=\\\"auth\\\",digest-uri=\\\"imap/elwood.innosoft.com\\\",response=d388dad90d4bbd760a152321f2143af7,charset=utf-8,algorithm=md5-sess\";\n\t\t\tconst string serverToken2 = \"rspauth=ea40f60335c427b5527b84dbabcdfffd\";\n\t\t\tconst string entropy = \"OA6MHXh6VqTrRk\";\n\t\t\tstring challenge, result;\n\t\t\tbyte[] token, decoded;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.False, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\ttoken = Encoding.ASCII.GetBytes (serverToken1);\n\t\t\tchallenge = sasl.Challenge (Convert.ToBase64String (token));\n\t\t\tdecoded = Convert.FromBase64String (challenge);\n\t\t\tresult = Encoding.ASCII.GetString (decoded);\n\n\t\t\tAssert.That (result, Is.EqualTo (expected1), $\"{prefix}: challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Encoding.ASCII.GetBytes (serverToken2);\n\t\t\tchallenge = sasl.Challenge (Convert.ToBase64String (token));\n\t\t\tdecoded = Convert.FromBase64String (challenge);\n\t\t\tresult = Encoding.ASCII.GetString (decoded);\n\n\t\t\tAssert.That (result, Is.EqualTo (string.Empty), $\"{prefix}: second DIGEST-MD5 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExampleFromRfc2831 ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"chris\", \"secret\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar sasl = new SaslMechanismDigestMd5 (credentials) { Uri = uri };\n\n\t\t\tAssertExampleFromRfc2831 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismDigestMd5 (\"chris\", \"secret\") { Uri = uri };\n\n\t\t\tAssertExampleFromRfc2831 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertSaslException (SaslMechanismDigestMd5 sasl, string challenge, SaslErrorCode code)\n\t\t{\n\t\t\tvar token = Encoding.ASCII.GetBytes (challenge);\n\n\t\t\ttry {\n\t\t\t\tsasl.Challenge (Convert.ToBase64String (token));\n\t\t\t} catch (SaslException sex) {\n\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (code), \"ErrorCode\");\n\t\t\t\treturn;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"SaslException expected, but got: {ex.GetType ().Name}\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tAssert.Fail (\"SaslException expected.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslExceptions ()\n\t\t{\n\t\t\tconst string serverToken1 = \"realm=\\\"elwood.innosoft.com\\\",nonce=\\\"OA6MG9tEQGm2hh\\\",qop=\\\"auth\\\",algorithm=md5-sess,charset=utf-8,cipher=\\\"des,3des,rc4\\\"\";\n\t\t\tconst string expected1 = \"username=\\\"chris\\\",realm=\\\"elwood.innosoft.com\\\",nonce=\\\"OA6MG9tEQGm2hh\\\",cnonce=\\\"OA6MHXh6VqTrRk\\\",nc=00000001,qop=\\\"auth\\\",digest-uri=\\\"imap/elwood.innosoft.com\\\",response=d388dad90d4bbd760a152321f2143af7,charset=utf-8,algorithm=md5-sess\";\n\t\t\tconst string serverToken2 = \"rspauth=ea40f60335c427b5527b84dbabcdfffd\";\n\t\t\tconst string entropy = \"OA6MHXh6VqTrRk\";\n\t\t\tstring challenge, result;\n\t\t\tbyte[] token, decoded;\n\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar sasl = new SaslMechanismDigestMd5 (\"chris\", \"secret\") { Uri = uri, cnonce = entropy };\n\n\t\t\tAssertSaslException (sasl, serverToken1 + \",xyz=\" + new string ('x', 2048), SaslErrorCode.ChallengeTooLong);\n\t\t\tAssertSaslException (sasl, \"username = \\\"domain\\\\chris\", SaslErrorCode.InvalidChallenge); // incomplete quoted value\n\t\t\tAssertSaslException (sasl, serverToken1 + \",xyz\", SaslErrorCode.InvalidChallenge); // missing '='\n\t\t\tAssertSaslException (sasl, serverToken1 + \",xyz=\", SaslErrorCode.InvalidChallenge); // incomplete value\n\t\t\tAssertSaslException (sasl, serverToken1 + \",maxbuf=xyz\", SaslErrorCode.InvalidChallenge); // invalid maxbuf value\n\t\t\tAssertSaslException (sasl, serverToken1 + \",nonce=\\\"OA6MG9tEQGm2hh\\\"\", SaslErrorCode.InvalidChallenge); // multiple nonce\n\t\t\tAssertSaslException (sasl, serverToken1 + \",stale=false,stale=true\", SaslErrorCode.InvalidChallenge); // multiple stale\n\t\t\tAssertSaslException (sasl, serverToken1 + \",maxbuf=1024,maxbuf=512\", SaslErrorCode.InvalidChallenge); // multiple maxbuf\n\t\t\tAssertSaslException (sasl, serverToken1 + \",charset=iso-8859-1\", SaslErrorCode.InvalidChallenge); // multiple charset\n\t\t\tAssertSaslException (sasl, serverToken1 + \",algorithm=md5-sess\", SaslErrorCode.InvalidChallenge); // multiple algorithm\n\t\t\tAssertSaslException (sasl, serverToken1 + \",cipher=\\\"des,3des\\\"\", SaslErrorCode.InvalidChallenge); // multiple ciphers\n\n\t\t\ttoken = Encoding.ASCII.GetBytes (serverToken1);\n\t\t\tchallenge = sasl.Challenge (Convert.ToBase64String (token));\n\t\t\tdecoded = Convert.FromBase64String (challenge);\n\t\t\tresult = Encoding.ASCII.GetString (decoded);\n\n\t\t\tAssert.That (result, Is.EqualTo (expected1), \"challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, string.Empty, SaslErrorCode.MissingChallenge);\n\t\t\tAssertSaslException (sasl, \"rspauth\", SaslErrorCode.IncompleteChallenge);\n\t\t\tAssertSaslException (sasl, \"maxbuf=123\", SaslErrorCode.InvalidChallenge);\n\t\t\tAssertSaslException (sasl, \"rspauth=fffffffffffffffffffffffffffffff\", SaslErrorCode.IncorrectHash);\n\n\t\t\ttoken = Encoding.ASCII.GetBytes (serverToken2);\n\t\t\tchallenge = sasl.Challenge (Convert.ToBase64String (token));\n\t\t\tdecoded = Convert.FromBase64String (challenge);\n\t\t\tresult = Encoding.ASCII.GetString (decoded);\n\n\t\t\tAssert.That (result, Is.EqualTo (string.Empty), \"second DIGEST-MD5 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"should be authenticated now.\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), \"challenge while authenticated.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismLoginTests.cs",
    "content": "﻿//\n// SaslMechanismLoginTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismLoginTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\t\t\tAssert.Throws<NotSupportedException> (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (null, credentials));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (Encoding.UTF8, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (null, \"username\", \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (Encoding.UTF8, null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (Encoding.UTF8, \"username\", null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismLogin (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertLogin (SaslMechanismLogin sasl, string prefix)\n\t\t{\n\t\t\tconst string expected1 = \"dXNlcm5hbWU=\";\n\t\t\tconst string expected2 = \"cGFzc3dvcmQ=\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.False, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected1), $\"{prefix}: initial challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated.\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected2), $\"{prefix}: final challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: should be authenticated.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestLoginAuth ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tvar sasl = new SaslMechanismLogin (credentials);\n\n\t\t\tAssertLogin (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismLogin (\"username\", \"password\");\n\n\t\t\tAssertLogin (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismNtlmTests.cs",
    "content": "﻿//\n// SaslMechanismNtlmTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Security;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Security;\nusing MailKit.Security.Ntlm;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismNtlmTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismNtlm (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismNtlm (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismNtlm (\"username\", null));\n\t\t}\n\n#if false\n\t\tstatic string ToCSharpByteArrayInitializer (string name, byte[] buffer)\n\t\t{\n\t\t\tvar builder = new System.Text.StringBuilder ();\n\t\t\tint index = 0;\n\n\t\t\tbuilder.AppendLine ($\"static readonly byte[] {name} = {{\");\n\t\t\twhile (index < buffer.Length) {\n\t\t\t\tbuilder.Append ('\\t');\n\t\t\t\tfor (int i = 0; i < 16 && index < buffer.Length; i++, index++)\n\t\t\t\t\tbuilder.AppendFormat (\"0x{0}, \", buffer[index].ToString (\"x2\"));\n\t\t\t\tbuilder.Length--;\n\t\t\t\tif (index == buffer.Length)\n\t\t\t\t\tbuilder.Length--;\n\t\t\t\tbuilder.AppendLine ();\n\t\t\t}\n\t\t\tbuilder.AppendLine ($\"}};\");\n\n\t\t\treturn builder.ToString ();\n\t\t}\n#endif\n\n\t\tstatic byte ToXDigit (char c)\n\t\t{\n\t\t\tif (c >= 0x41) {\n\t\t\t\tif (c >= 0x61)\n\t\t\t\t\treturn (byte) (c - (0x61 - 0x0a));\n\n\t\t\t\treturn (byte) (c - (0x41 - 0x0A));\n\t\t\t}\n\n\t\t\treturn (byte) (c - 0x30);\n\t\t}\n\n\t\tstatic byte[] HexDecode (string value)\n\t\t{\n\t\t\tvar decoded = new byte[value.Length / 2];\n\n\t\t\tfor (int i = 0; i < decoded.Length; i++) {\n\t\t\t\tvar b1 = ToXDigit (value[i * 2]);\n\t\t\t\tvar b2 = ToXDigit (value[i * 2 + 1]);\n\n\t\t\t\tdecoded[i] = (byte) ((b1 << 4) | b2);\n\t\t\t}\n\n\t\t\treturn decoded;\n\t\t}\n\n\t\tstatic string HexEncode (byte[] value)\n\t\t{\n\t\t\tvar builder = new StringBuilder ();\n\n\t\t\tfor (int i = 0; i < value.Length; i++)\n\t\t\t\tbuilder.Append (value[i].ToString (\"x2\"));\n\n\t\t\treturn builder.ToString ();\n\t\t}\n\n\t\tstatic NtlmNegotiateMessage DecodeNegotiateMessage (string token)\n\t\t{\n\t\t\tvar message = Convert.FromBase64String (token);\n\n\t\t\treturn new NtlmNegotiateMessage (message, 0, message.Length);\n\t\t}\n\n\t\tstatic NtlmChallengeMessage DecodeChallengeMessage (string token)\n\t\t{\n\t\t\tvar message = Convert.FromBase64String (token);\n\n\t\t\treturn new NtlmChallengeMessage (message, 0, message.Length);\n\t\t}\n\n\t\tstatic NtlmAuthenticateMessage DecodeAuthenticateMessage (string token)\n\t\t{\n\t\t\tvar message = Convert.FromBase64String (token);\n\n\t\t\treturn new NtlmAuthenticateMessage (message, 0, message.Length);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmTargetInfoEncode ()\n\t\t{\n\t\t\tvar now = DateTime.Now.Ticks;\n\n\t\t\tvar targetInfo = new NtlmTargetInfo {\n\t\t\t\tChannelBinding = Encoding.ASCII.GetBytes (\"channel-binding\"),\n\t\t\t\tTargetName = \"TARGET\",\n\t\t\t\tDnsTreeName = \"target.domain.com\",\n\t\t\t\tDomainName = \"DOMAIN\",\n\t\t\t\tServerName = \"SERVER\",\n\t\t\t\tDnsDomainName = \"domain.com\",\n\t\t\t\tDnsServerName = \"server.domain.com\",\n\t\t\t\tTimestamp = now,\n\t\t\t\tFlags = 1776\n\t\t\t};\n\n\t\t\tvar encoded = targetInfo.Encode (true);\n\t\t\tvar decoded = new NtlmTargetInfo (encoded, 0, encoded.Length, true);\n\n\t\t\tAssert.That (Encoding.ASCII.GetString (decoded.ChannelBinding), Is.EqualTo (\"channel-binding\"), \"ChannelBinding does not match.\");\n\t\t\tAssert.That (decoded.DnsDomainName, Is.EqualTo (targetInfo.DnsDomainName), \"DnsDomainName does not match.\");\n\t\t\tAssert.That (decoded.DnsServerName, Is.EqualTo (targetInfo.DnsServerName), \"DnsServerName does not match.\");\n\t\t\tAssert.That (decoded.DnsTreeName, Is.EqualTo (targetInfo.DnsTreeName), \"DnsTreeName does not match.\");\n\t\t\tAssert.That (decoded.DomainName, Is.EqualTo (targetInfo.DomainName), \"DomainName does not match.\");\n\t\t\tAssert.That (decoded.ServerName, Is.EqualTo (targetInfo.ServerName), \"ServerName does not match.\");\n\t\t\tAssert.That (decoded.TargetName, Is.EqualTo (targetInfo.TargetName), \"TargetName does not match.\");\n\t\t\tAssert.That (decoded.Timestamp, Is.EqualTo (targetInfo.Timestamp), \"Timestamp does not match.\");\n\t\t\tAssert.That (decoded.Flags, Is.EqualTo (targetInfo.Flags), \"Flags does not match.\");\n\t\t}\n\n\t\tstatic readonly byte [] NtlmType1EncodedMessage = {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00,\n\t\t\t0x07, 0xb2, 0x08, 0x20, 0x06, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00,\n\t\t\t0x0b, 0x00, 0x0b, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x54, 0x41, 0x54,\n\t\t\t0x49, 0x4f, 0x4e, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e\n\t\t};\n\n\t\tstatic readonly byte[] NtlmType1EncodedMessageWithVersion = {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00,\n\t\t\t0x07, 0x82, 0x08, 0x22, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x05, 0x00, 0x93, 0x08,\n\t\t\t0x00, 0x00, 0x00, 0x0f,\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestNtlmNegotiateMessageEncode ()\n\t\t{\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateExtendedSessionSecurity | NtlmFlags.Negotiate128;\n\t\t\tvar negotiate = new NtlmNegotiateMessage (flags, \"Domain\", \"Workstation\");\n\t\t\tvar encoded = negotiate.Encode ();\n\t\t\tstring actual, expected;\n\n\t\t\texpected = HexEncode (NtlmType1EncodedMessage);\n\t\t\tactual = HexEncode (encoded);\n\n\t\t\tAssert.That (actual, Is.EqualTo (expected), \"The encoded NegotiateMessage did not match the expected result.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmNegotiateMessageEncodeWithVersion ()\n\t\t{\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateExtendedSessionSecurity | NtlmFlags.Negotiate128;\n\t\t\tvar negotiate = new NtlmNegotiateMessage (flags, \"Domain\", \"Workstation\", new Version (5, 0, 2195));\n\t\t\tvar encoded = negotiate.Encode ();\n\t\t\tstring actual, expected;\n\n\t\t\texpected = HexEncode (NtlmType1EncodedMessageWithVersion);\n\t\t\tactual = HexEncode (encoded);\n\n\t\t\tAssert.That (actual, Is.EqualTo (expected), \"The encoded NegotiateMessage did not match the expected result.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmNegotiateMessageDecode ()\n\t\t{\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm | \n\t\t\t\tNtlmFlags.NegotiateDomainSupplied | NtlmFlags.NegotiateWorkstationSupplied | NtlmFlags.NegotiateAlwaysSign |\n\t\t\t\tNtlmFlags.NegotiateExtendedSessionSecurity | NtlmFlags.Negotiate128;\n\t\t\tvar negotiate = new NtlmNegotiateMessage (NtlmType1EncodedMessage, 0, NtlmType1EncodedMessage.Length);\n\n\t\t\tAssert.That (negotiate.Flags, Is.EqualTo (flags), \"The expected flags do not match.\");\n\t\t\tAssert.That (negotiate.Workstation, Is.EqualTo (\"WORKSTATION\"), \"The expected workstation name does not match.\");\n\t\t\tAssert.That (negotiate.Domain, Is.EqualTo (\"DOMAIN\"), \"The expected domain does not match.\");\n\t\t\tAssert.That (negotiate.OSVersion, Is.EqualTo (null), \"The expected OS Version does not match.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmNegotiateMessageDecodeWithVersion ()\n\t\t{\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateOem | NtlmFlags.RequestTarget | NtlmFlags.NegotiateNtlm |\n\t\t\t\tNtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateExtendedSessionSecurity | NtlmFlags.NegotiateVersion |\n\t\t\t\tNtlmFlags.Negotiate128;\n\t\t\tvar negotiate = new NtlmNegotiateMessage (NtlmType1EncodedMessageWithVersion, 0, NtlmType1EncodedMessageWithVersion.Length);\n\t\t\tvar osVersion = new Version (5, 0, 2195);\n\n\t\t\tAssert.That (negotiate.Flags, Is.EqualTo (flags), \"The expected flags do not match.\");\n\t\t\tAssert.That (negotiate.Workstation, Is.EqualTo (string.Empty), \"The expected workstation name does not match.\");\n\t\t\tAssert.That (negotiate.Domain, Is.EqualTo (string.Empty), \"The expected domain does not match.\");\n\t\t\tAssert.That (negotiate.OSVersion, Is.EqualTo (osVersion), \"The expected OS Version does not match.\");\n\t\t}\n\n\t\tstatic readonly byte[] NtlmType2EncodedMessage = {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00,\n\t\t\t0x0c, 0x00, 0x0c, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x02, 0x81, 0x00,\n\t\t\t0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x62, 0x00, 0x44, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x4f, 0x00,\n\t\t\t0x4d, 0x00, 0x41, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x02, 0x00, 0x0c, 0x00,\n\t\t\t0x44, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x49, 0x00, 0x4e, 0x00,\n\t\t\t0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x45, 0x00, 0x52, 0x00, 0x56, 0x00,\n\t\t\t0x45, 0x00, 0x52, 0x00, 0x04, 0x00, 0x14, 0x00, 0x64, 0x00, 0x6f, 0x00,\n\t\t\t0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x63, 0x00,\n\t\t\t0x6f, 0x00, 0x6d, 0x00, 0x03, 0x00, 0x22, 0x00, 0x73, 0x00, 0x65, 0x00,\n\t\t\t0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x64, 0x00,\n\t\t\t0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00,\n\t\t\t0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestNtlmChallengeMessageEncode ()\n\t\t{\n\t\t\tvar targetInfo = new NtlmTargetInfo {\n\t\t\t\tDomainName = \"DOMAIN\",\n\t\t\t\tServerName = \"SERVER\",\n\t\t\t\tDnsDomainName = \"domain.com\",\n\t\t\t\tDnsServerName = \"server.domain.com\"\n\t\t\t};\n\n\t\t\tvar challenge = new NtlmChallengeMessage (NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.TargetTypeDomain | NtlmFlags.NegotiateTargetInfo) {\n\t\t\t\tServerChallenge = HexDecode (\"0123456789abcdef\"),\n\t\t\t\tTargetInfo = targetInfo,\n\t\t\t\tTargetName = \"DOMAIN\",\n\t\t\t};\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => challenge.ServerChallenge = null);\n\t\t\tAssert.Throws<ArgumentException> (() => challenge.ServerChallenge = Array.Empty<byte> ());\n\n\t\t\tvar encoded = challenge.Encode ();\n\t\t\tstring actual, expected;\n\n\t\t\texpected = HexEncode (NtlmType2EncodedMessage);\n\t\t\tactual = HexEncode (encoded);\n\n\t\t\tAssert.That (actual, Is.EqualTo (expected), \"The encoded ChallengeMessage did not match the expected result.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmChallengeMessageDecode ()\n\t\t{\n\t\t\tconst string expectedTargetInfo = \"02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0000000000\";\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.TargetTypeDomain | NtlmFlags.NegotiateTargetInfo;\n\t\t\tvar challenge = new NtlmChallengeMessage (NtlmType2EncodedMessage, 0, NtlmType2EncodedMessage.Length);\n\n\t\t\tAssert.That (challenge.Flags, Is.EqualTo (flags), \"The expected flags do not match.\");\n\t\t\tAssert.That (challenge.TargetName, Is.EqualTo (\"DOMAIN\"), \"The expected TargetName does not match.\");\n\n\t\t\tvar nonce = HexEncode (challenge.ServerChallenge);\n\t\t\tAssert.That (nonce, Is.EqualTo (\"0123456789abcdef\"), \"The expected nonce does not match.\");\n\n\t\t\tvar targetInfo = HexEncode (challenge.GetEncodedTargetInfo () ?? Array.Empty<byte> ());\n\t\t\tAssert.That (targetInfo, Is.EqualTo (expectedTargetInfo), \"The expected TargetInfo does not match.\");\n\n\t\t\tAssert.That (challenge.TargetInfo.DomainName, Is.EqualTo (\"DOMAIN\"), \"The expected TargetInfo domain name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.ServerName, Is.EqualTo (\"SERVER\"), \"The expected TargetInfo server name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.DnsDomainName, Is.EqualTo (\"domain.com\"), \"The expected TargetInfo DNS domain name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.DnsServerName, Is.EqualTo (\"server.domain.com\"), \"The expected TargetInfo DNS server name does not match.\");\n\n\t\t\ttargetInfo = HexEncode (challenge.TargetInfo.Encode (true));\n\t\t\tAssert.That (targetInfo, Is.EqualTo (expectedTargetInfo), \"The expected re-encoded TargetInfo does not match.\");\n\t\t}\n\n\t\tstatic readonly byte[] NtlmType2EncodedMessageWithOSVersion = {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,\n\t\t\t0x38, 0x00, 0x00, 0x00, 0x01, 0x02, 0x81, 0x02, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x44, 0x00, 0x00, 0x00,\n\t\t\t0x06, 0x03, 0x80, 0x25, 0x00, 0x00, 0x00, 0x0f, 0x44, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x41, 0x00,\n\t\t\t0x49, 0x00, 0x4e, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x41, 0x00,\n\t\t\t0x49, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x45, 0x00, 0x52, 0x00, 0x56, 0x00,\n\t\t\t0x45, 0x00, 0x52, 0x00, 0x04, 0x00, 0x14, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x03, 0x00, 0x22, 0x00,\n\t\t\t0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x64, 0x00,\n\t\t\t0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00,\n\t\t\t0x6d, 0x00, 0x07, 0x00, 0x08, 0x00, 0xd2, 0x02, 0x96, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00\n\t\t};\n\n\t\t[Test]\n\t\tpublic void TestNtlmChallengeMessageEncodeWithOSVersion ()\n\t\t{\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.TargetTypeDomain | NtlmFlags.NegotiateTargetInfo | NtlmFlags.NegotiateVersion;\n\n\t\t\tvar targetInfo = new NtlmTargetInfo {\n\t\t\t\tDomainName = \"DOMAIN\",\n\t\t\t\tServerName = \"SERVER\",\n\t\t\t\tDnsDomainName = \"domain.com\",\n\t\t\t\tDnsServerName = \"server.domain.com\",\n\t\t\t\tTimestamp = 1234567890\n\t\t\t};\n\n\t\t\tvar challenge = new NtlmChallengeMessage (flags, new Version (6, 3, 9600)) {\n\t\t\t\tServerChallenge = HexDecode (\"0123456789abcdef\"),\n\t\t\t\tTargetInfo = targetInfo,\n\t\t\t\tTargetName = \"DOMAIN\",\n\t\t\t};\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => challenge.ServerChallenge = null);\n\t\t\tAssert.Throws<ArgumentException> (() => challenge.ServerChallenge = Array.Empty<byte> ());\n\n\t\t\tvar encoded = challenge.Encode ();\n\t\t\tstring actual, expected;\n\n\t\t\texpected = HexEncode (NtlmType2EncodedMessageWithOSVersion);\n\t\t\tactual = HexEncode (encoded);\n\n\t\t\tAssert.That (actual, Is.EqualTo (expected), \"The encoded ChallengeMessage did not match the expected result.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmChallengeMessageDecodeWithOSVersion ()\n\t\t{\n\t\t\tconst string expectedTargetInfo = \"02000c0044004f004d00410049004e0001000c005300450052005600450052000400140064006f006d00610069006e002e0063006f006d00030022007300650072007600650072002e0064006f006d00610069006e002e0063006f006d0007000800d20296490000000000000000\";\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.TargetTypeDomain | NtlmFlags.NegotiateTargetInfo | NtlmFlags.NegotiateVersion;\n\t\t\tvar challenge = new NtlmChallengeMessage (NtlmType2EncodedMessageWithOSVersion, 0, NtlmType2EncodedMessageWithOSVersion.Length);\n\n\t\t\tAssert.That (challenge.Flags, Is.EqualTo (flags), \"The expected flags do not match.\");\n\t\t\tAssert.That (challenge.TargetName, Is.EqualTo (\"DOMAIN\"), \"The expected TargetName does not match.\");\n\n\t\t\tvar nonce = HexEncode (challenge.ServerChallenge);\n\t\t\tAssert.That (nonce, Is.EqualTo (\"0123456789abcdef\"), \"The expected nonce does not match.\");\n\n\t\t\tvar targetInfo = HexEncode (challenge.GetEncodedTargetInfo () ?? Array.Empty<byte> ());\n\t\t\tAssert.That (targetInfo, Is.EqualTo (expectedTargetInfo), \"The expected TargetInfo does not match.\");\n\n\t\t\tAssert.That (challenge.TargetInfo.DomainName, Is.EqualTo (\"DOMAIN\"), \"The expected TargetInfo domain name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.ServerName, Is.EqualTo (\"SERVER\"), \"The expected TargetInfo server name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.DnsDomainName, Is.EqualTo (\"domain.com\"), \"The expected TargetInfo DNS domain name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.DnsServerName, Is.EqualTo (\"server.domain.com\"), \"The expected TargetInfo DNS server name does not match.\");\n\t\t\tAssert.That (challenge.TargetInfo.Timestamp, Is.EqualTo (1234567890), \"The expected TargetInfo Timestamp does not match.\");\n\n\t\t\ttargetInfo = HexEncode (challenge.TargetInfo.Encode (true));\n\t\t\tAssert.That (targetInfo, Is.EqualTo (expectedTargetInfo), \"The expected re-encoded TargetInfo does not match.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmAuthenticateMessageEncode ()\n\t\t{\n\t\t\tconst string expected = \"TlRMTVNTUAADAAAAGAAYAHIAAACqAKoAigAAAAwADABIAAAACAAIAFQAAAAWABYAXAAAAAAAAAA0AQAAAQKBAAAAAAAAAAAARABPAE0AQQBJAE4AdQBzAGUAcgBXAE8AUgBLAFMAVABBAFQASQBPAE4AAVVqop20rpFRR3q+GrYyeQECAwQFBQYHIi2wRrPzFiGEtyUoETB4jQEBAAAAAAAAAJBUA+mR1wEBAgMEBQUGBwAAAAACAAwARABPAE0AQQBJAE4AAQAMAFMARQBSAFYARQBSAAQAFABkAG8AbQBhAGkAbgAuAGMAbwBtAAMAIgBzAGUAcgB2AGUAcgAuAGQAbwBtAGEAaQBuAC4AYwBvAG0ACQAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\";\n\t\t\tconst string challenge2 = \"TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=\";\n\t\t\tvar flags = NtlmFlags.NegotiateUnicode | NtlmFlags.NegotiateNtlm | NtlmFlags.TargetTypeDomain | NtlmFlags.NegotiateTargetInfo;\n\t\t\tvar timestamp = new DateTime (2021, 08, 15, 15, 20, 00, DateTimeKind.Utc).Ticks;\n\t\t\tvar nonce = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07 };\n\t\t\tvar negotiate = new NtlmNegotiateMessage (flags, null, null, new Version (10, 0, 19043));\n\t\t\tvar challenge = DecodeChallengeMessage (challenge2);\n\t\t\tvar authenticate = new NtlmAuthenticateMessage (negotiate, challenge, \"user\", \"password\", null, \"WORKSTATION\") {\n\t\t\t\tClientChallenge = nonce,\n\t\t\t\tTimestamp = timestamp\n\t\t\t};\n\n\t\t\tauthenticate.ComputeNtlmV2 (null, false, null);\n\t\t\tvar actual = Convert.ToBase64String (authenticate.Encode ());\n\n\t\t\t//var expectedAuthenticate = DecodeAuthenticateMessage (expected);\n\n\t\t\tAssert.That (actual, Is.EqualTo (expected), \"The encoded Type3Message did not match the expected result.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmType3MessageDecode ()\n\t\t{\n\t\t\tconst string challenge3 = \"TlRMTVNTUAADAAAAGAAYAGoAAAAYABgAggAAAAwADABAAAAACAAIAEwAAAAWABYAVAAAAAAAAACaAAAAAQIAAEQATwBNAEEASQBOAHUAcwBlAHIAVwBPAFIASwBTAFQAQQBUAEkATwBOAJje97h/iKpdr+Lfd5aIoXLe8Rx9XM3vE91UKLAehvTfyr6sOUlG29Q+6I95TdYyVQ==\";\n\t\t\tvar flags = NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateUnicode;\n\t\t\tvar authenticate = DecodeAuthenticateMessage (challenge3);\n\n\t\t\tAssert.That (authenticate.Flags, Is.EqualTo (flags), \"The expected flags do not match.\");\n\t\t\tAssert.That (authenticate.Domain, Is.EqualTo (\"DOMAIN\"), \"The expected Domain does not match.\");\n\t\t\tAssert.That (authenticate.Workstation, Is.EqualTo (\"WORKSTATION\"), \"The expected Workstation does not match.\");\n\t\t\tAssert.That (authenticate.UserName, Is.EqualTo (\"user\"), \"The expected Username does not match.\");\n\n\t\t\tvar nt = HexEncode (authenticate.NtChallengeResponse);\n\t\t\tAssert.That (nt, Is.EqualTo (\"dd5428b01e86f4dfcabeac394946dbd43ee88f794dd63255\"), \"The NT payload does not match.\");\n\n\t\t\tvar lm = HexEncode (authenticate.LmChallengeResponse);\n\t\t\tAssert.That (lm, Is.EqualTo (\"98def7b87f88aa5dafe2df779688a172def11c7d5ccdef13\"), \"The LM payload does not match.\");\n\t\t}\n\n\t\tstatic void AssertNtlmAuthNoDomain (SaslMechanismNtlm sasl, string prefix)\n\t\t{\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tvar type1 = DecodeNegotiateMessage (challenge);\n\n\t\t\tAssert.That (type1.Flags, Is.EqualTo (NtlmNegotiateMessage.DefaultFlags), $\"{prefix}: Expected initial NTLM client challenge flags do not match.\");\n\t\t\tAssert.That (type1.Domain, Is.EqualTo (string.Empty), $\"{prefix}: Expected initial NTLM client challenge domain does not match.\");\n\t\t\tAssert.That (type1.Workstation, Is.EqualTo (string.Empty), $\"{prefix}: Expected initial NTLM client challenge workstation does not match.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: NTLM should not be authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmAuthNoDomain ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials) { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmAuthNoDomain (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismNtlm (\"username\", \"password\") { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmAuthNoDomain (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertNtlmAuthWithDomain (SaslMechanismNtlm sasl, string prefix)\n\t\t{\n\t\t\tvar initialFlags = NtlmNegotiateMessage.DefaultFlags | NtlmFlags.NegotiateDomainSupplied;\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tvar negotiate = DecodeNegotiateMessage (challenge);\n\n\t\t\tAssert.That (negotiate.Flags, Is.EqualTo (initialFlags), $\"{prefix}: Expected initial NTLM client challenge flags do not match.\");\n\t\t\tAssert.That (negotiate.Domain, Is.EqualTo (\"DOMAIN\"), $\"{prefix}: Expected initial NTLM client challenge domain does not match.\");\n\t\t\tAssert.That (negotiate.Workstation, Is.EqualTo (string.Empty), $\"{prefix}: Expected initial NTLM client challenge workstation does not match.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: NTLM should not be authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmAuthWithDomain ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"domain\\\\username\", \"password\");\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials) { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmAuthWithDomain (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismNtlm (\"domain\\\\username\", \"password\") { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmAuthWithDomain (sasl, \"user/pass\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmAuthWithAtDomain ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username@domain\", \"password\");\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials) { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmAuthWithDomain (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismNtlm (\"username@domain\", \"password\") { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmAuthWithDomain (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertNtlmv2 (SaslMechanismNtlm sasl, string challenge1, string challenge2)\n\t\t{\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, \"SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, \"SupportsInitialResponse\");\n\n\t\t\tvar response = sasl.Challenge (string.Empty);\n\t\t\tvar timestamp = DateTime.UtcNow.Ticks;\n\t\t\tvar nonce = NtlmUtils.NONCE (8);\n\n\t\t\tsasl.Timestamp = timestamp;\n\t\t\tsasl.Nonce = nonce;\n\n\t\t\tAssert.That (response, Is.EqualTo (challenge1), \"Initial challenge\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"IsAuthenticated\");\n\n\t\t\tresponse = sasl.Challenge (challenge2);\n\n\t\t\tvar negotiate = DecodeNegotiateMessage (challenge1);\n\t\t\tvar challenge = DecodeChallengeMessage (challenge2);\n\t\t\tvar authenticate = new NtlmAuthenticateMessage (negotiate, challenge, sasl.Credentials.UserName, sasl.Credentials.Password, null, sasl.Workstation) {\n\t\t\t\tClientChallenge = nonce,\n\t\t\t\tTimestamp = timestamp\n\t\t\t};\n\t\t\tauthenticate.ComputeNtlmV2 (null, false, null);\n\n\t\t\tvar actual = Convert.FromBase64String (response);\n\t\t\tvar expected = authenticate.Encode ();\n\n\t\t\tAssert.That (actual, Has.Length.EqualTo (expected.Length), $\"Final challenge differs in length: {expected.Length} vs {actual.Length}\");\n\n\t\t\tfor (int i = 0; i < expected.Length; i++)\n\t\t\t\tAssert.That (actual[i], Is.EqualTo (expected[i]), $\"Final challenge differs at index {i}\");\n\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"IsAuthenticated\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, \"NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, \"NegotiatedSecurityLayer\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAuthenticationNtlmv2 ()\n\t\t{\n\t\t\tconst string challenge1 = \"TlRMTVNTUAABAAAAB4IIoAAAAAAoAAAAAAAAACgAAAAAAAAAAAAAAA==\";\n\t\t\tconst string challenge2 = \"TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=\";\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\");\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials) { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmv2 (sasl, challenge1, challenge2);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAuthenticationNtlmv2WithDomain ()\n\t\t{\n\t\t\tconst string challenge1 = \"TlRMTVNTUAABAAAAB5IIoAYABgAoAAAAAAAAACgAAAAAAAAAAAAAAERPTUFJTg==\";\n\t\t\tconst string challenge2 = \"TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=\";\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\", \"DOMAIN\");\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials) { OSVersion = null, Workstation = null };\n\n\t\t\tAssertNtlmv2 (sasl, challenge1, challenge2);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAuthenticationNtlmv2WithDomainAndWorkstation ()\n\t\t{\n\t\t\tconst string challenge1 = \"TlRMTVNTUAABAAAAB7IIoAYABgAzAAAACwALACgAAAAAAAAAAAAAAFdPUktTVEFUSU9ORE9NQUlO\";\n\t\t\tconst string challenge2 = \"TlRMTVNTUAACAAAADAAMADAAAAABAoEAASNFZ4mrze8AAAAAAAAAAGIAYgA8AAAARABPAE0AQQBJAE4AAgAMAEQATwBNAEEASQBOAAEADABTAEUAUgBWAEUAUgAEABQAZABvAG0AYQBpAG4ALgBjAG8AbQADACIAcwBlAHIAdgBlAHIALgBkAG8AbQBhAGkAbgAuAGMAbwBtAAAAAAA=\";\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"password\", \"DOMAIN\");\n\t\t\tvar sasl = new SaslMechanismNtlm (credentials) { OSVersion = null, Workstation = \"WORKSTATION\" };\n\n\t\t\tAssertNtlmv2 (sasl, challenge1, challenge2);\n\t\t}\n\n\t\t// From Section 4.2.4.3\n\t\tstatic readonly byte[] ExampleNtlmV2ChallengeMessage = new byte[] {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,\n\t\t\t0x38, 0x00, 0x00, 0x00, 0x33, 0x82, 0x8a, 0xe2, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x24, 0x00, 0x44, 0x00, 0x00, 0x00,\n\t\t\t0x06, 0x00, 0x70, 0x17, 0x00, 0x00, 0x00, 0x0f, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00,\n\t\t\t0x65, 0x00, 0x72, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00,\n\t\t\t0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00\n\t\t};\n\n\t\t// From Section 4.2.4.3\n\t\tstatic readonly byte[] ExampleNtlmV2AuthenticateMessageOriginal = new byte[] {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00,\n\t\t\t0x6c, 0x00, 0x00, 0x00, 0x54, 0x00, 0x54, 0x00, 0x84, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,\n\t\t\t0x48, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x54, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,\n\t\t\t0x5c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x35, 0x82, 0x88, 0xe2,\n\t\t\t0x05, 0x01, 0x28, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x55, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x4f, 0x00,\n\t\t\t0x4d, 0x00, 0x50, 0x00, 0x55, 0x00, 0x54, 0x00, 0x45, 0x00, 0x52, 0x00, 0x86, 0xc3, 0x50, 0x97,\n\t\t\t0xac, 0x9c, 0xec, 0x10, 0x25, 0x54, 0x76, 0x4a, 0x57, 0xcc, 0xcc, 0x19, 0xaa, 0xaa, 0xaa, 0xaa,\n\t\t\t0xaa, 0xaa, 0xaa, 0xaa, 0x68, 0xcd, 0x0a, 0xb8, 0x51, 0xe5, 0x1c, 0x96, 0xaa, 0xbc, 0x92, 0x7b,\n\t\t\t0xeb, 0xef, 0x6a, 0x1c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00,\n\t\t\t0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xda, 0xd2, 0x54, 0x4f, 0xc9, 0x79, 0x90,\n\t\t\t0x94, 0xce, 0x1c, 0xe9, 0x0b, 0xc9, 0xd0, 0x3e\n\t\t};\n\n\t\t// This is the modified version that includes the ChannelBinding=Z16 and TargetName=\"\" string in the TargetInfo embedded in the NTChallengeResponse.\n\t\tstatic readonly byte[] ExampleNtlmV2AuthenticateMessage = {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00,\n\t\t\t0x6c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x84, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,\n\t\t\t0x48, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x54, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,\n\t\t\t0x5c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x35, 0x82, 0x88, 0xe2,\n\t\t\t0x05, 0x01, 0x28, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x55, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x4f, 0x00,\n\t\t\t0x4d, 0x00, 0x50, 0x00, 0x55, 0x00, 0x54, 0x00, 0x45, 0x00, 0x52, 0x00, 0x86, 0xc3, 0x50, 0x97,\n\t\t\t0xac, 0x9c, 0xec, 0x10, 0x25, 0x54, 0x76, 0x4a, 0x57, 0xcc, 0xcc, 0x19, 0xaa, 0xaa, 0xaa, 0xaa,\n\t\t\t0xaa, 0xaa, 0xaa, 0xaa, 0xf3, 0x37, 0xab, 0x75, 0x7a, 0xbc, 0x12, 0xf7, 0x68, 0x10, 0x55, 0x60,\n\t\t\t0xb4, 0xcb, 0x30, 0x17, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00,\n\t\t\t0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00,\n\t\t\t0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n\t\t};\n\n\t\tstatic NtlmTargetInfo GetNtChallengeResponseTargetInfo (byte[] ntChallengeResponse)\n\t\t{\n\t\t\tint index = 0;\n\n\t\t\t// Proof (16-bytes) HMACMD5 of the following data\n\t\t\tindex += 16;\n\n\t\t\t// 2 bytes of version info\n\t\t\tindex += 2;\n\n\t\t\t// Z6\n\t\t\tindex += 6;\n\n\t\t\t// Timestamp\n\t\t\tindex += 8;\n\n\t\t\t// ClientChallenge\n\t\t\tindex += 8;\n\n\t\t\t// Z4\n\t\t\tindex += 4;\n\n\t\t\t// TargetInfo followed by Z4\n\t\t\tint targetInfoLength = (ntChallengeResponse.Length - 4) - index;\n\n\t\t\treturn new NtlmTargetInfo (ntChallengeResponse, index, targetInfoLength, true);\n\t\t}\n\n\t\tstatic byte[] GetNtChallengeResponseClientChallenge (byte[] ntChallengeResponse)\n\t\t{\n\t\t\tint index = 0;\n\n\t\t\t// Proof (16-bytes) HMACMD5 of the following data\n\t\t\tindex += 16;\n\n\t\t\t// 2 bytes of version info\n\t\t\tindex += 2;\n\n\t\t\t// Z6\n\t\t\tindex += 6;\n\n\t\t\t// Timestamp\n\t\t\tindex += 8;\n\n\t\t\tvar clientChallenge = new byte[8];\n\t\t\tBuffer.BlockCopy (ntChallengeResponse, index, clientChallenge, 0, 8);\n\n\t\t\treturn clientChallenge;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNtlmv2Example ()\n\t\t{\n\t\t\tvar flags = NtlmFlags.RequestTarget | NtlmFlags.NegotiateKeyExchange | NtlmFlags.Negotiate56 | NtlmFlags.Negotiate128 | NtlmFlags.NegotiateVersion | NtlmFlags.NegotiateTargetInfo | NtlmFlags.NegotiateExtendedSessionSecurity |\n\t\t\t\tNtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateNtlm | NtlmFlags.NegotiateSeal | NtlmFlags.NegotiateSign | NtlmFlags.NegotiateOem | NtlmFlags.NegotiateUnicode;\n\t\t\tvar negotiate = new NtlmNegotiateMessage (flags, \"\", \"\", new Version (5, 1, 2600));\n\n\t\t\tvar challenge = new NtlmChallengeMessage (ExampleNtlmV2ChallengeMessage, 0, ExampleNtlmV2ChallengeMessage.Length);\n\t\t\tAssert.That (challenge.TargetName, Is.EqualTo (\"Server\"), \"TargetName\");\n\t\t\tAssert.That (challenge.TargetInfo.ServerName, Is.EqualTo (\"Server\"), \"ServerName\");\n\t\t\tAssert.That (challenge.TargetInfo.DomainName, Is.EqualTo (\"Domain\"), \"DomainName\");\n\n\t\t\t// Note: Had to reverse engineer these values from the example. The nonce is the last 8 bytes of the lmChallengeResponse\n\t\t\t// and the timestamp was bytes 8-16 of the 'temp' buffer.\n\t\t\tvar nonce = new byte[] { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };\n\t\t\tvar timestamp = DateTime.FromFileTimeUtc (0).Ticks;\n\n\t\t\t//var expectedType3 = new NtlmAuthenticateMessage (ExampleNtlmV2AuthenticateMessage, 0, ExampleNtlmV2AuthenticateMessage.Length);\n\t\t\t//var expectedTargetInfo = GetNtChallengeResponseTargetInfo (expectedType3.NtChallengeResponse);\n\t\t\tvar authenticate = new NtlmAuthenticateMessage (negotiate, challenge, \"User\", \"Password\", null, \"COMPUTER\") {\n\t\t\t\tClientChallenge = nonce,\n\t\t\t\tTimestamp = timestamp\n\t\t\t};\n\t\t\tauthenticate.ComputeNtlmV2 (null, false, null);\n\n\t\t\t//var actualTargetInfo = GetNtChallengeResponseTargetInfo (authenticate.NtChallengeResponse);\n\t\t\tvar actual = authenticate.Encode ();\n\n\t\t\t//var initializer = ToCSharpByteArrayInitializer (\"ExampleNtlmV2AuthenticateMessage\", actual);\n\n\t\t\tAssert.That (actual, Has.Length.EqualTo (ExampleNtlmV2AuthenticateMessage.Length), \"Raw message lengths differ.\");\n\n\t\t\t// Note: The EncryptedRandomSessionKey is random and is the last 16 bytes of the message.\n\t\t\tfor (int i = 0; i < ExampleNtlmV2AuthenticateMessage.Length - 16; i++)\n\t\t\t\tAssert.That (actual[i], Is.EqualTo (ExampleNtlmV2AuthenticateMessage[i]), $\"Messages differ at index [{i}]\");\n\t\t}\n\n\t\tstatic readonly byte[] ExampleNtlmV2AuthenticateMessageWithChannelBinding = {\n\t\t\t0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00,\n\t\t\t0x6c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x84, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,\n\t\t\t0x48, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x54, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,\n\t\t\t0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x05, 0x82, 0x08, 0xa2,\n\t\t\t0x0a, 0x00, 0x63, 0x4a, 0x00, 0x00, 0x00, 0x0f, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00,\n\t\t\t0x69, 0x00, 0x6e, 0x00, 0x55, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x43, 0x00, 0x4f, 0x00,\n\t\t\t0x4d, 0x00, 0x50, 0x00, 0x55, 0x00, 0x54, 0x00, 0x45, 0x00, 0x52, 0x00, 0x86, 0xc3, 0x50, 0x97,\n\t\t\t0xac, 0x9c, 0xec, 0x10, 0x25, 0x54, 0x76, 0x4a, 0x57, 0xcc, 0xcc, 0x19, 0xaa, 0xaa, 0xaa, 0xaa,\n\t\t\t0xaa, 0xaa, 0xaa, 0xaa, 0x67, 0xcf, 0xbb, 0x4d, 0x65, 0xaf, 0x3f, 0x67, 0x3e, 0x51, 0x16, 0x22,\n\t\t\t0x6c, 0x30, 0xd9, 0x84, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,\n\t\t\t0x02, 0x00, 0x0c, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00,\n\t\t\t0x01, 0x00, 0x0c, 0x00, 0x53, 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00,\n\t\t\t0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0xf5, 0x09, 0xe7, 0xac, 0xfd, 0xee, 0x20, 0x13,\n\t\t\t0x98, 0xbb, 0xbf, 0xa1, 0x48, 0x63, 0x2a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n\t\t};\n\n\n\t\t[Test]\n\t\tpublic void TestNtlmv2ExampleWithChannelBinding ()\n\t\t{\n\t\t\t// Note: Had to reverse engineer these values from the example. The nonce is the last 8 bytes of the lmChallengeResponse\n\t\t\t// and the timestamp was bytes 8-16 of the 'temp' buffer.\n\t\t\tvar nonce = new byte[] { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };\n\t\t\tvar timestamp = DateTime.FromFileTimeUtc (0).Ticks;\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar sasl = new SaslMechanismNtlm (\"User\", \"Password\") {\n\t\t\t\tChannelBindingContext = new ChannelBindingContext (ChannelBindingKind.Endpoint, uri.ToString ()),\n\t\t\t\tOSVersion = new Version (10, 0, 19043, 0),\n\t\t\t\tIsUnverifiedServicePrincipalName = false,\n\t\t\t\tServicePrincipalName = null,\n\t\t\t\tAllowChannelBinding = true,\n\t\t\t\tWorkstation = \"COMPUTER\",\n\t\t\t\tTimestamp = timestamp,\n\t\t\t\tNonce = nonce\n\t\t\t};\n\t\t\tstring response;\n\n\t\t\t// initial challenge\n\t\t\tsasl.Challenge (null);\n\n\t\t\tvar challenge = new NtlmChallengeMessage (ExampleNtlmV2ChallengeMessage, 0, ExampleNtlmV2ChallengeMessage.Length);\n\t\t\tresponse = sasl.Challenge (Convert.ToBase64String (challenge.Encode ()));\n\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"IsAuthenticated\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, \"NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, \"NegotiatedSecurityLayer\");\n\n\t\t\tvar expectedAuthenticate = new NtlmAuthenticateMessage (ExampleNtlmV2AuthenticateMessage, 0, ExampleNtlmV2AuthenticateMessage.Length);\n\t\t\tvar expectedTargetInfo = GetNtChallengeResponseTargetInfo (expectedAuthenticate.NtChallengeResponse);\n\n\t\t\tvar actual = Convert.FromBase64String (response);\n\t\t\tvar actualAuthenticate = DecodeAuthenticateMessage (response);\n\t\t\tvar actualTargetInfo = GetNtChallengeResponseTargetInfo (actualAuthenticate.NtChallengeResponse);\n\n\t\t\t//var initializer = ToCSharpByteArrayInitializer (\"ExampleNtlmV2AuthenticateMessage\", actual);\n\n\t\t\t//var expected = DecodeAuthenticateMessage (Convert.ToBase64String (ExampleNtlmV2AuthenticateMessageWithChannelBinding));\n\n\t\t\tAssert.That (actual, Has.Length.EqualTo (ExampleNtlmV2AuthenticateMessageWithChannelBinding.Length), \"Raw message lengths differ.\");\n\n\t\t\t// Note: The EncryptedRandomSessionKey is random and is the last 16 bytes of the message.\n\t\t\tfor (int i = 0; i < ExampleNtlmV2AuthenticateMessageWithChannelBinding.Length - 16; i++)\n\t\t\t\tAssert.That (actual[i], Is.EqualTo (ExampleNtlmV2AuthenticateMessageWithChannelBinding[i]), $\"Messages differ at index [{i}]\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSecurePassword ()\n\t\t{\n\t\t\t// Note: Had to reverse engineer these values from the example. The nonce is the last 8 bytes of the lmChallengeResponse\n\t\t\t// and the timestamp was bytes 8-16 of the 'temp' buffer.\n\t\t\tvar nonce = new byte[] { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };\n\t\t\tvar timestamp = DateTime.FromFileTimeUtc (0).Ticks;\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar password = new SecureString ();\n\n\t\t\tforeach (var c in \"Password\")\n\t\t\t\tpassword.AppendChar (c);\n\t\t\tpassword.MakeReadOnly ();\n\n\t\t\tvar sasl = new SaslMechanismNtlm (new NetworkCredential (\"User\", password)) {\n\t\t\t\tChannelBindingContext = new ChannelBindingContext (ChannelBindingKind.Endpoint, uri.ToString ()),\n\t\t\t\tOSVersion = new Version (10, 0, 19043, 0),\n\t\t\t\tIsUnverifiedServicePrincipalName = false,\n\t\t\t\tServicePrincipalName = null,\n\t\t\t\tAllowChannelBinding = true,\n\t\t\t\tWorkstation = \"COMPUTER\",\n\t\t\t\tTimestamp = timestamp,\n\t\t\t\tNonce = nonce\n\t\t\t};\n\t\t\tstring response;\n\n\t\t\t// initial challenge\n\t\t\tsasl.Challenge (null);\n\n\t\t\tvar challenge = new NtlmChallengeMessage (ExampleNtlmV2ChallengeMessage, 0, ExampleNtlmV2ChallengeMessage.Length);\n\t\t\tresponse = sasl.Challenge (Convert.ToBase64String (challenge.Encode ()));\n\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"IsAuthenticated\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, \"NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, \"NegotiatedSecurityLayer\");\n\n\t\t\tvar expectedAuthenticate = new NtlmAuthenticateMessage (ExampleNtlmV2AuthenticateMessage, 0, ExampleNtlmV2AuthenticateMessage.Length);\n\t\t\tvar expectedTargetInfo = GetNtChallengeResponseTargetInfo (expectedAuthenticate.NtChallengeResponse);\n\n\t\t\tvar actual = Convert.FromBase64String (response);\n\t\t\tvar actualAuthenticate = DecodeAuthenticateMessage (response);\n\t\t\tvar actualTargetInfo = GetNtChallengeResponseTargetInfo (actualAuthenticate.NtChallengeResponse);\n\n\t\t\t//var initializer = ToCSharpByteArrayInitializer (\"ExampleNtlmV2AuthenticateMessage\", actual);\n\n\t\t\tAssert.That (actual, Has.Length.EqualTo (ExampleNtlmV2AuthenticateMessageWithChannelBinding.Length), \"Raw message lengths differ.\");\n\n\t\t\t// Note: The EncryptedRandomSessionKey is random and is the last 16 bytes of the message.\n\t\t\tfor (int i = 0; i < ExampleNtlmV2AuthenticateMessageWithChannelBinding.Length - 16; i++)\n\t\t\t\tAssert.That (actual[i], Is.EqualTo (ExampleNtlmV2AuthenticateMessageWithChannelBinding[i]), $\"Messages differ at index [{i}]\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDefaultCredentials ()\n\t\t{\n\t\t\tvar sasl = new SaslMechanismNtlm ();\n\t\t\tstring response;\n\n\t\t\t// initial challenge\n\t\t\tsasl.Challenge (null);\n\n\t\t\tvar challenge = new NtlmChallengeMessage (ExampleNtlmV2ChallengeMessage, 0, ExampleNtlmV2ChallengeMessage.Length);\n\t\t\tresponse = sasl.Challenge (Convert.ToBase64String (challenge.Encode ()));\n\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"IsAuthenticated\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, \"NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, \"NegotiatedSecurityLayer\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSystemNetMailNtlmNegotiation ()\n\t\t{\n\t\t\tconst string challenge1 = \"TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAKAO5CAAAADw==\";\n\t\t\tconst string challenge2 = \"TlRMTVNTUAACAAAADAAMADgAAAAFgomi18THmUUjMM4AAAAAAAAAAMoAygBEAAAABgOAJQAAAA9EAEUAVgBEAEkAVgACAAwARABFAFYARABJAFYAAQAQAEUAWABDAEgAQQBOAEcARQAEACgAZABlAHYAZABpAHYALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAAMAOgBlAHgAYwBoAGEAbgBnAGUALgBkAGUAdgBkAGkAdgAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ABQAoAGQAZQB2AGQAaQB2AC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAHAAgAS9aGGn7B1gEAAAAATlRMTVNTUAACAAAADAAMADgAAAAFgomi18THmUUjMM4AAAAAAAAAAMoAygBEAAAABgOAJQAAAA9EAEUAVgBEAEkAVgACAAwARABFAFYARABJAFYAAQAQAEUAWABDAEgAQQBOAEcARQAEACgAZABlAHYAZABpAHYALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAAMAOgBlAHgAYwBoAGEAbgBnAGUALgBkAGUAdgBkAGkAdgAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ABQAoAGQAZQB2AGQAaQB2AC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAHAAgAS9aGGn7B1gEAAAAA\";\n\t\t\tconst string challenge3 = \"TlRMTVNTUAADAAAAGAAYAIoAAABAAUABogAAAAwADABYAAAAEAAQAGQAAAAWABYAdAAAAAAAAADiAQAABYIIogoA7kIAAAAPDYFh2Vjzwk5e9YHnWRvYnUQARQBWAEQASQBWAHUAcwBlAHIAbgBhAG0AZQBXAG8AcgBrAHMAdABhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbqz8wqlkKSdjmeI+rX9+lwEBAAAAAAAAS9aGGn7B1gGZ26Mto5srdQAAAAACAAwARABFAFYARABJAFYAAQAQAEUAWABDAEgAQQBOAEcARQAEACgAZABlAHYAZABpAHYALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAAMAOgBlAHgAYwBoAGEAbgBnAGUALgBkAGUAdgBkAGkAdgAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ABQAoAGQAZQB2AGQAaQB2AC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAHAAgAS9aGGn7B1gEGAAQAAgAAAAkAJgBTAE0AVABQAFMAVgBDAC8AMQA5ADIALgAxADYAOAAuADEALgAxAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\";\n\t\t\tvar negotiate = DecodeNegotiateMessage (challenge1);\n\t\t\t//var challenge = DecodeChallengeMessage (challenge2);\n\t\t\tvar authenticate = DecodeAuthenticateMessage (challenge3);\n\n\t\t\t// This is what System.Net.Mail sends as the initial challenge.\n\t\t\tAssert.That (negotiate.Flags, Is.EqualTo (NtlmNegotiateMessage.DefaultFlags | NtlmFlags.NegotiateAlwaysSign | NtlmFlags.NegotiateVersion | NtlmFlags.Negotiate56), \"System.Net.Mail Initial Flags\");\n\n\t\t\tvar ntlm = new SaslMechanismNtlm (\"username\", \"password\") {\n\t\t\t\tServicePrincipalName = \"SMTPSVC/192.168.1.1\",\n\t\t\t\tOSVersion = new Version (10, 0, 17134),\n\t\t\t\tWorkstation = \"Workstation\"\n\t\t\t};\n\t\t\tvar response = ntlm.Challenge (null);\n\n\t\t\tAssert.That (response, Is.EqualTo (\"TlRMTVNTUAABAAAAB4IIogAAAAAoAAAAAAAAACgAAAAKAO5CAAAADw==\"), \"MailKit Initial Challenge\");\n\n\t\t\tresponse = ntlm.Challenge (challenge2);\n\t\t\tvar auth = DecodeAuthenticateMessage (response);\n\n\t\t\tAssert.That (auth.Domain, Is.EqualTo (authenticate.Domain), \"Domain\");\n\t\t\tAssert.That (auth.UserName, Is.EqualTo (authenticate.UserName), \"UserName\");\n\t\t\tAssert.That (auth.Workstation, Is.EqualTo (authenticate.Workstation), \"Workstation\");\n\t\t\tAssert.That (auth.OSVersion, Is.EqualTo (authenticate.OSVersion), \"OSVersion\");\n\n\t\t\tAssert.That (auth.LmChallengeResponse, Has.Length.EqualTo (authenticate.LmChallengeResponse.Length), \"LmChallengeResponseLength\");\n\t\t\tfor (int i = 0; i < auth.LmChallengeResponse.Length; i++)\n\t\t\t\tAssert.That (auth.LmChallengeResponse[i], Is.EqualTo (0), $\"LmChallengeResponse[{i}]\");\n\t\t\tAssert.That (auth.Mic, Is.Not.Null, \"Mic\");\n\t\t\tAssert.That (auth.Mic, Has.Length.EqualTo (authenticate.Mic.Length), \"Mic\");\n\n\t\t\tvar targetInfo = GetNtChallengeResponseTargetInfo (auth.NtChallengeResponse);\n\t\t\tvar expected = GetNtChallengeResponseTargetInfo (authenticate.NtChallengeResponse);\n\t\t\tAssert.That (targetInfo.ChannelBinding, Is.Not.Null, \"ChannelBinding\");\n\t\t\tAssert.That (targetInfo.ChannelBinding, Has.Length.EqualTo (expected.ChannelBinding.Length), \"ChannelBinding\");\n\t\t\tAssert.That (targetInfo.DnsDomainName, Is.EqualTo (expected.DnsDomainName), \"DnsDomainName\");\n\t\t\tAssert.That (targetInfo.DnsServerName, Is.EqualTo (expected.DnsServerName), \"DnsServerName\");\n\t\t\tAssert.That (targetInfo.DnsTreeName, Is.EqualTo (expected.DnsTreeName), \"DnsTreeName\");\n\t\t\tAssert.That (targetInfo.DomainName, Is.EqualTo (expected.DomainName), \"DomainName\");\n\t\t\tAssert.That (targetInfo.Flags, Is.EqualTo (expected.Flags), \"Flags\");\n\t\t\tAssert.That (targetInfo.ServerName, Is.EqualTo (expected.ServerName), \"ServerName\");\n\t\t\tAssert.That (targetInfo.SingleHost, Is.EqualTo (expected.SingleHost), \"SingleHost\");\n\t\t\tAssert.That (targetInfo.TargetName, Is.EqualTo (expected.TargetName), \"TargetName\");\n\t\t\tAssert.That (targetInfo.Timestamp, Is.EqualTo (expected.Timestamp), \"Timestamp\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismOAuth2Tests.cs",
    "content": "﻿//\n// SaslMechanismOAuth2Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismOAuth2Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismOAuth2 (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismOAuth2 (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismOAuth2 (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertSimpleOAuth2 (SaslMechanismOAuth2 sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"dXNlcj11c2VybmFtZQFhdXRoPUJlYXJlciBwYXNzd29yZAEB\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: IsAuthenticated\");\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: Challenge\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: Already authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSimpleOAuth2 ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tSaslMechanismOAuth2 sasl;\n\n\t\t\tsasl = new SaslMechanismOAuth2 (credentials);\n\n\t\t\tAssertSimpleOAuth2 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismOAuth2 (\"username\", \"password\");\n\n\t\t\tAssertSimpleOAuth2 (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismOAuthBearerTests.cs",
    "content": "﻿//\n// SaslMechanismOAuthBearerTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismOAuthBearerTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismOAuthBearer (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismOAuthBearer (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismOAuthBearer (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertImapExampleFromRfc7628 (SaslMechanismOAuthBearer sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: IsAuthenticated\");\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: Challenge\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (\"AQ==\"), $\"{prefix}: Already authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestImapExampleFromRfc7628 ()\n\t\t{\n\t\t\tconst string userName = \"user@example.com\";\n\t\t\tconst string token = \"vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==\";\n\t\t\tvar credentials = new NetworkCredential (userName, token);\n\t\t\tvar uri = new Uri (\"imap://server.example.com:143\");\n\t\t\tSaslMechanismOAuthBearer sasl;\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (credentials) { Uri = uri };\n\n\t\t\tAssertImapExampleFromRfc7628 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (userName, token) { Uri = uri };\n\n\t\t\tAssertImapExampleFromRfc7628 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertImapFailureExampleFromRfc7628 (SaslMechanismOAuthBearer sasl, string prefix)\n\t\t{\n\t\t\tconst string failureResponse = \"eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=\";\n\t\t\tconst string expected = \"bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: IsAuthenticated\");\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: Challenge\");\n\t\t\tAssert.That (sasl.Challenge (failureResponse), Is.EqualTo (\"AQ==\"), $\"{prefix}: Failure response.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestImapFailureExampleFromRfc7628 ()\n\t\t{\n\t\t\tconst string userName = \"user@example.com\";\n\t\t\tconst string token = \"vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==\";\n\t\t\tvar credentials = new NetworkCredential (userName, token);\n\t\t\tvar uri = new Uri (\"imap://server.example.com:143\");\n\t\t\tSaslMechanismOAuthBearer sasl;\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (credentials) { Uri = uri };\n\n\t\t\tAssertImapFailureExampleFromRfc7628 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (userName, token) { Uri = uri };\n\n\t\t\tAssertImapFailureExampleFromRfc7628 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertSmtpExampleFromRfc7628 (SaslMechanismOAuthBearer sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9NTg3AWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: IsAuthenticated\");\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: Challenge\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (\"AQ==\"), $\"{prefix}: Already authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpExampleFromRfc7628 ()\n\t\t{\n\t\t\tconst string userName = \"user@example.com\";\n\t\t\tconst string token = \"vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==\";\n\t\t\tvar credentials = new NetworkCredential (userName, token);\n\t\t\tvar uri = new Uri (\"smtp://server.example.com:587\");\n\t\t\tSaslMechanismOAuthBearer sasl;\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (credentials) { Uri = uri };\n\n\t\t\tAssertSmtpExampleFromRfc7628 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (userName, token) { Uri = uri };\n\n\t\t\tAssertSmtpExampleFromRfc7628 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertSmtpFailureExampleFromRfc7628 (SaslMechanismOAuthBearer sasl, string prefix)\n\t\t{\n\t\t\tconst string failureResponse = \"eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NoZW1lcyI6ImJlYXJlciBtYWMiLCJzY29wZSI6Imh0dHBzOi8vbWFpbC5leGFtcGxlLmNvbS8ifQ==\";\n\t\t\tconst string expected = \"bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9NTg3AWF1dGg9QmVhcmVyIHZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: IsAuthenticated\");\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: Challenge\");\n\t\t\tAssert.That (sasl.Challenge (failureResponse), Is.EqualTo (\"AQ==\"), $\"{prefix}: Failure response.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSmtpFailureExampleFromRfc7628 ()\n\t\t{\n\t\t\tconst string userName = \"user@example.com\";\n\t\t\tconst string token = \"vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==\";\n\t\t\tvar credentials = new NetworkCredential (userName, token);\n\t\t\tvar uri = new Uri (\"smtp://server.example.com:587\");\n\t\t\tSaslMechanismOAuthBearer sasl;\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (credentials) { Uri = uri };\n\n\t\t\tAssertSmtpFailureExampleFromRfc7628 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismOAuthBearer (userName, token) { Uri = uri };\n\n\t\t\tAssertSmtpFailureExampleFromRfc7628 (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismPlainTests.cs",
    "content": "﻿//\n// SaslMechanismPlainTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismPlainTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tSaslMechanism sasl;\n\n\t\t\tsasl = new SaslMechanismPlain (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (null, credentials));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (Encoding.UTF8, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (null, \"username\", \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (Encoding.UTF8, null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (Encoding.UTF8, \"username\", null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismPlain (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertPlain (SaslMechanismPlain sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"AHVzZXJuYW1lAHBhc3N3b3Jk\";\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: should be authenticated.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestPlainAuth ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\t\t\tvar sasl = new SaslMechanismPlain (credentials);\n\n\t\t\tAssertPlain (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismPlain (\"username\", \"password\");\n\n\t\t\tAssertPlain (sasl, \"user/pass\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestPlainWithAuthorizationId ()\n\t\t{\n\t\t\tconst string expected = \"YXV0aHppZAB1c2VybmFtZQBwYXNzd29yZA==\";\n\t\t\tvar sasl = new SaslMechanismPlain (\"username\", \"password\") { AuthorizationId = \"authzid\" };\n\t\t\tstring challenge;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, \"SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, \"SupportsInitialResponse\");\n\n\t\t\tchallenge = sasl.Challenge (string.Empty);\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), \"challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"should be authenticated.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, \"NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, \"NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), \"challenge while authenticated.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismScramSha1Tests.cs",
    "content": "﻿//\n// SaslMechanismScramSha1Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismScramSha1Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tvar sasl = new SaslMechanismScramSha1 (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1 (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1 (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1 (\"username\", null));\n\n\t\t\tsasl = new SaslMechanismScramSha1Plus (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1Plus (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1Plus (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha1Plus (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertScramSha1 (SaslMechanismScramSha1 sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=\";\n\t\t\tconst string challenge1 = \"r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096\";\n\t\t\tconst string challenge2 = \"v=rmF9pqV8S7suAoZWja4dJRkFsKQ=\";\n\t\t\tconst string entropy = \"fyko+d2lbbFgONRv9qkxdawL\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"n,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-1 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-1 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-1 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-1 should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha1 ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar sasl = new SaslMechanismScramSha1 (credentials);\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\n\t\t\tAssertScramSha1 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha1 (\"user\", \"pencil\");\n\n\t\t\tAssertScramSha1 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertSaslException (SaslMechanismScramSha1 sasl, string challenge, SaslErrorCode code)\n\t\t{\n\t\t\tvar token = Encoding.ASCII.GetBytes (challenge);\n\n\t\t\ttry {\n\t\t\t\tsasl.Challenge (Convert.ToBase64String (token));\n\t\t\t} catch (SaslException sex) {\n\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (code), \"ErrorCode\");\n\t\t\t\treturn;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"SaslException expected, but got: {ex.GetType ().Name}\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tAssert.Fail (\"SaslException expected.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslExceptions ()\n\t\t{\n\t\t\tconst string nonce = \"r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j\";\n\t\t\tconst string salt = \"s=QSXCR+Q6sek8bf92\";\n\t\t\tconst string iterations = \"i=4096\";\n\t\t\tconst string expected = \"c=biws,\" + nonce + \",p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=\";\n\t\t\tconst string challenge1 = nonce + \",\" + salt + \",\" + iterations;\n\t\t\tconst string challenge2 = \"v=rmF9pqV8S7suAoZWja4dJRkFsKQ=\";\n\t\t\tconst string entropy = \"fyko+d2lbbFgONRv9qkxdawL\";\n\t\t\tvar sasl = new SaslMechanismScramSha1 (\"user\", \"pencil\") { cnonce = entropy };\n\t\t\tstring challenge, token;\n\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"n,,n=user,r=\" + entropy), \"initial SCRAM-SHA-1 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, challenge1.Replace (salt + \",\", string.Empty), SaslErrorCode.IncompleteChallenge); // missing salt\n\t\t\tAssertSaslException (sasl, challenge1.Replace (nonce + \",\", string.Empty), SaslErrorCode.IncompleteChallenge); // missing nonce\n\t\t\tAssertSaslException (sasl, challenge1.Replace (\",\" + iterations, string.Empty), SaslErrorCode.IncompleteChallenge); // missing iterations\n\t\t\tAssertSaslException (sasl, challenge1.Replace (nonce, \"r=asfhajksfhkafhakhafk\"), SaslErrorCode.InvalidChallenge); // invalid nonce\n\t\t\tAssertSaslException (sasl, challenge1.Replace (iterations, \"i=abcd\"), SaslErrorCode.InvalidChallenge); // invalid iterations\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), \"second SCRAM-SHA-1 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, \"x=abcdefg\", SaslErrorCode.InvalidChallenge);\n\t\t\tAssertSaslException (sasl, \"v=rmF9pqV8S7suAoZWja4dJRkF\", SaslErrorCode.IncorrectHash); // incorrect hash length\n\t\t\tAssertSaslException (sasl, \"v=AAAAAAAAAAAAAAAAAAAAAAAAAAA=\", SaslErrorCode.IncorrectHash); // incorrect hash\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), \"third SCRAM-SHA-1 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"SCRAM-SHA-1 should be authenticated now.\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), \"challenge while authenticated.\");\n\t\t}\n\n\t\tstatic void AssertScramSha1PlusTlsServerEndpoint (SaslMechanismScramSha1Plus sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=cD10bHMtc2VydmVyLWVuZC1wb2ludCwsaW1hcDovL2Vsd29vZC5pbm5vc29mdC5jb20v,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=TJiKTaOm8umanp3qriQ/tSiJ3iY=\";\n\t\t\tconst string challenge1 = \"r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096\";\n\t\t\tconst string challenge2 = \"v=4FOxt1+Pv761Owg9JJCCJE5ogoU=\";\n\t\t\tconst string entropy = \"fyko+d2lbbFgONRv9qkxdawL\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"p=tls-server-end-point,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-1-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-1-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-1-PLUS challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-1-PLUS should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha1PlusTlsServerEndpoint ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar context = new ChannelBindingContext (ChannelBindingKind.Endpoint, uri.ToString ());\n\n\t\t\tvar sasl = new SaslMechanismScramSha1Plus (credentials) { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha1PlusTlsServerEndpoint (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha1Plus (\"user\", \"pencil\") { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha1PlusTlsServerEndpoint (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertScramSha1PlusTlsUnique (SaslMechanismScramSha1Plus sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=cD10bHMtdW5pcXVlLCxpbWFwOi8vZWx3b29kLmlubm9zb2Z0LmNvbS8=,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=91nyQ+7jn+YxGsblvCxpfKUnxwk=\";\n\t\t\tconst string challenge1 = \"r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096\";\n\t\t\tconst string challenge2 = \"v=7QQfRcpsgEz8G8pmK+vmYMfLmBU=\";\n\t\t\tconst string entropy = \"fyko+d2lbbFgONRv9qkxdawL\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"p=tls-unique,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-1-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-1-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-1-PLUS challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-1-PLUS should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha1PlusTlsUnique ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar context = new ChannelBindingContext (ChannelBindingKind.Unique, uri.ToString ());\n\n\t\t\tvar sasl = new SaslMechanismScramSha1Plus (credentials) { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha1PlusTlsUnique (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha1Plus (\"user\", \"pencil\") { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha1PlusTlsUnique (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismScramSha256Tests.cs",
    "content": "﻿//\n// SaslMechanismScramSha256Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismScramSha256Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tvar sasl = new SaslMechanismScramSha256 (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256 (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256 (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256 (\"username\", null));\n\n\t\t\tsasl = new SaslMechanismScramSha256Plus (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256Plus (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256Plus (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha256Plus (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertScramSha256 (SaslMechanismScramSha256 sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=\";\n\t\t\tconst string challenge1 = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\";\n\t\t\tconst string challenge2 = \"v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"n,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-256 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-256 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-256 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-256 should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha256 ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar sasl = new SaslMechanismScramSha256 (credentials);\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\n\t\t\tAssertScramSha256 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha256 (\"user\", \"pencil\");\n\n\t\t\tAssertScramSha256 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertSaslException (SaslMechanismScramSha256 sasl, string challenge, SaslErrorCode code)\n\t\t{\n\t\t\tvar token = Encoding.ASCII.GetBytes (challenge);\n\n\t\t\ttry {\n\t\t\t\tsasl.Challenge (Convert.ToBase64String (token));\n\t\t\t} catch (SaslException sex) {\n\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (code), \"ErrorCode\");\n\t\t\t\treturn;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"SaslException expected, but got: {ex.GetType ().Name}\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tAssert.Fail (\"SaslException expected.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslExceptions ()\n\t\t{\n\t\t\tconst string nonce = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0\";\n\t\t\tconst string salt = \"s=W22ZaJ0SNY7soEsUEjb6gQ==\";\n\t\t\tconst string iterations = \"i=4096\";\n\t\t\tconst string expected = \"c=biws,\" + nonce + \",p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=\";\n\t\t\tconst string challenge1 = nonce + \",\" + salt + \",\" + iterations;\n\t\t\tconst string challenge2 = \"v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tvar sasl = new SaslMechanismScramSha256 (\"user\", \"pencil\") { cnonce = entropy };\n\t\t\tstring challenge, token;\n\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"n,,n=user,r=\" + entropy), \"initial SCRAM-SHA-256 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, challenge1.Replace (salt + \",\", string.Empty), SaslErrorCode.IncompleteChallenge); // missing salt\n\t\t\tAssertSaslException (sasl, challenge1.Replace (nonce + \",\", string.Empty), SaslErrorCode.IncompleteChallenge); // missing nonce\n\t\t\tAssertSaslException (sasl, challenge1.Replace (\",\" + iterations, string.Empty), SaslErrorCode.IncompleteChallenge); // missing iterations\n\t\t\tAssertSaslException (sasl, challenge1.Replace (nonce, \"r=asfhajksfhkafhakhafk\"), SaslErrorCode.InvalidChallenge); // invalid nonce\n\t\t\tAssertSaslException (sasl, challenge1.Replace (iterations, \"i=abcd\"), SaslErrorCode.InvalidChallenge); // invalid iterations\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), \"second SCRAM-SHA-256 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, \"x=abcdefg\", SaslErrorCode.InvalidChallenge);\n\t\t\tAssertSaslException (sasl, \"v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl9\", SaslErrorCode.IncorrectHash); // incorrect hash length\n\t\t\tAssertSaslException (sasl, \"v=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\", SaslErrorCode.IncorrectHash); // incorrect hash\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), \"third SCRAM-SHA-256 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"SCRAM-SHA-256 should be authenticated now.\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), \"challenge while authenticated.\");\n\t\t}\n\n\t\tstatic void AssertScramSha256PlusTlsServerEndpoint (SaslMechanismScramSha256Plus sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=cD10bHMtc2VydmVyLWVuZC1wb2ludCwsaW1hcDovL2Vsd29vZC5pbm5vc29mdC5jb20v,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=5mTXE52q6omlPLhl1OBywbbmUZoqUb8TZ0rQcSODGrg=\";\n\t\t\tconst string challenge1 = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\";\n\t\t\tconst string challenge2 = \"v=iTfhTdj45V52spZKUcXtZGOkyhurIJ8/UAxKKJZcmRQ=\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"p=tls-server-end-point,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-256-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-256-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-256-PLUS challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-256-PLUS should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha256PlusTlsServerEndpoint ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar context = new ChannelBindingContext (ChannelBindingKind.Endpoint, uri.ToString ());\n\n\t\t\tvar sasl = new SaslMechanismScramSha256Plus (credentials) { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha256PlusTlsServerEndpoint (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha256Plus (\"user\", \"pencil\") { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha256PlusTlsServerEndpoint (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertScramSha256PlusTlsUnique (SaslMechanismScramSha256Plus sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=cD10bHMtdW5pcXVlLCxpbWFwOi8vZWx3b29kLmlubm9zb2Z0LmNvbS8=,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=r034Wumf+g5Cw9QvuK2TBTWHLa9hsT0TpUvksIr3P0I=\";\n\t\t\tconst string challenge1 = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\";\n\t\t\tconst string challenge2 = \"v=ZfK3fb1tbWoyTuaEXvUTM2va2RSQgBVJ8QYsympnk8o=\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"p=tls-unique,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-256-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-256-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-256-PLUS challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-256-PLUS should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha256PlusTlsUnique ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar context = new ChannelBindingContext (ChannelBindingKind.Unique, uri.ToString ());\n\n\t\t\tvar sasl = new SaslMechanismScramSha256Plus (credentials) { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha256PlusTlsUnique (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha256Plus (\"user\", \"pencil\") { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha256PlusTlsUnique (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismScramSha512Tests.cs",
    "content": "﻿//\n// SaslMechanismScramSha512Tests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Security.Authentication.ExtendedProtection;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismScramSha512Tests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tvar sasl = new SaslMechanismScramSha512 (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha512 (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha512 (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha512 (\"username\", null));\n\n\t\t\tsasl = new SaslMechanismScramSha512Plus (credentials);\n\t\t\tAssert.DoesNotThrow (() => sasl.Challenge (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha512Plus (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha512Plus (null, \"password\"));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new SaslMechanismScramSha512Plus (\"username\", null));\n\t\t}\n\n\t\tstatic void AssertScramSha512 (SaslMechanismScramSha512 sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=gMGXRcevScNtxZ6/8lQYpGtnsNAc3mGcmNomv+xnoOMw+3R2xNJdMNnzMlTN8PPC6wdp6dybEmDYXYTxwnYPJQ==\";\n\t\t\tconst string challenge1 = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\";\n\t\t\tconst string challenge2 = \"v=ZQnYEgWQMFmmsM8aQMF0nDDCy/AgCzkwk8CmMZYcMg0vSVlKDanekLtifDSeVGT4+5ZxXnJq199RVG2rR7N7Zw==\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.False, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"n,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-512 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-512 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-512 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-512 should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.False, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha512 ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar sasl = new SaslMechanismScramSha512 (credentials);\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\n\t\t\tAssertScramSha512 (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha512 (\"user\", \"pencil\");\n\n\t\t\tAssertScramSha512 (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertSaslException (SaslMechanismScramSha512 sasl, string challenge, SaslErrorCode code)\n\t\t{\n\t\t\tvar token = Encoding.ASCII.GetBytes (challenge);\n\n\t\t\ttry {\n\t\t\t\tsasl.Challenge (Convert.ToBase64String (token));\n\t\t\t} catch (SaslException sex) {\n\t\t\t\tAssert.That (sex.ErrorCode, Is.EqualTo (code), \"ErrorCode\");\n\t\t\t\treturn;\n\t\t\t} catch (Exception ex) {\n\t\t\t\tAssert.Fail ($\"SaslException expected, but got: {ex.GetType ().Name}\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tAssert.Fail (\"SaslException expected.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslExceptions ()\n\t\t{\n\t\t\tconst string nonce = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0\";\n\t\t\tconst string salt = \"s=W22ZaJ0SNY7soEsUEjb6gQ==\";\n\t\t\tconst string iterations = \"i=4096\";\n\t\t\tconst string expected = \"c=biws,\" + nonce + \",p=gMGXRcevScNtxZ6/8lQYpGtnsNAc3mGcmNomv+xnoOMw+3R2xNJdMNnzMlTN8PPC6wdp6dybEmDYXYTxwnYPJQ==\";\n\t\t\tconst string challenge1 = nonce + \",\" + salt + \",\" + iterations;\n\t\t\tconst string challenge2 = \"v=ZQnYEgWQMFmmsM8aQMF0nDDCy/AgCzkwk8CmMZYcMg0vSVlKDanekLtifDSeVGT4+5ZxXnJq199RVG2rR7N7Zw==\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tvar sasl = new SaslMechanismScramSha512 (\"user\", \"pencil\") { cnonce = entropy };\n\t\t\tstring challenge, token;\n\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"n,,n=user,r=\" + entropy), \"initial SCRAM-SHA-512 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, challenge1.Replace (salt + \",\", string.Empty), SaslErrorCode.IncompleteChallenge); // missing salt\n\t\t\tAssertSaslException (sasl, challenge1.Replace (nonce + \",\", string.Empty), SaslErrorCode.IncompleteChallenge); // missing nonce\n\t\t\tAssertSaslException (sasl, challenge1.Replace (\",\" + iterations, string.Empty), SaslErrorCode.IncompleteChallenge); // missing iterations\n\t\t\tAssertSaslException (sasl, challenge1.Replace (nonce, \"r=asfhajksfhkafhakhafk\"), SaslErrorCode.InvalidChallenge); // invalid nonce\n\t\t\tAssertSaslException (sasl, challenge1.Replace (iterations, \"i=abcd\"), SaslErrorCode.InvalidChallenge); // invalid iterations\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), \"second SCRAM-SHA-512 challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, \"should not be authenticated yet.\");\n\n\t\t\tAssertSaslException (sasl, \"x=abcdefg\", SaslErrorCode.InvalidChallenge);\n\t\t\tAssertSaslException (sasl, \"v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl9\", SaslErrorCode.IncorrectHash); // incorrect hash length\n\t\t\tAssertSaslException (sasl, \"v=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\", SaslErrorCode.IncorrectHash); // incorrect hash\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), \"third SCRAM-SHA-512 challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, \"SCRAM-SHA-512 should be authenticated now.\");\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), \"challenge while authenticated.\");\n\t\t}\n\n\t\tstatic void AssertScramSha512PlusTlsServerEndpoint (SaslMechanismScramSha512Plus sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=cD10bHMtc2VydmVyLWVuZC1wb2ludCwsaW1hcDovL2Vsd29vZC5pbm5vc29mdC5jb20v,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=Lrbr64QBLm57rPiUjNzRxRpy5SmWXr9uo1YaZamnGl5eJlvHL+VO3EogXgUmr8ht+aJoS3d2XOSNN6RUiA05sQ==\";\n\t\t\tconst string challenge1 = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\";\n\t\t\tconst string challenge2 = \"v=mAlQYGd+jaCA+/6Ayj8wRQLKnuxQhjSabvJW4XqtPzjXayzXxbIElZP27ANJa7yNfb54XATe9O0/w1cNxvsRfg==\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"p=tls-server-end-point,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-512-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-512-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-512-PLUS challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-512-PLUS should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha512PlusTlsServerEndpoint ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar context = new ChannelBindingContext (ChannelBindingKind.Endpoint, uri.ToString ());\n\n\t\t\tvar sasl = new SaslMechanismScramSha512Plus (credentials) { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha512PlusTlsServerEndpoint (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha512Plus (\"user\", \"pencil\") { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha512PlusTlsServerEndpoint (sasl, \"user/pass\");\n\t\t}\n\n\t\tstatic void AssertScramSha512PlusTlsUnique (SaslMechanismScramSha512Plus sasl, string prefix)\n\t\t{\n\t\t\tconst string expected = \"c=cD10bHMtdW5pcXVlLCxpbWFwOi8vZWx3b29kLmlubm9zb2Z0LmNvbS8=,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=vtgb/B7KLKMSSwhLaJufN0efCR3TIVsLtC2o5bqG0jId/9nFgzKSoc9lG9bIy0J9mi4jiYho8ozV1Uuzkcs2bg==\";\n\t\t\tconst string challenge1 = \"r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\";\n\t\t\tconst string challenge2 = \"v=IvtJ4BHN4D4LGpsg8ciEMV8OP8SJ4J1U8bzOyySnz6LeGADY7r1bKcGnrwvHEA13yjPb0uYJlftSkeyDdxijHA==\";\n\t\t\tconst string entropy = \"rOprNGfwEbeRWgbNEkqO\";\n\t\t\tstring token;\n\n\t\t\tsasl.cnonce = entropy;\n\n\t\t\tAssert.That (sasl.SupportsChannelBinding, Is.True, $\"{prefix}: SupportsChannelBinding\");\n\t\t\tAssert.That (sasl.SupportsInitialResponse, Is.True, $\"{prefix}: SupportsInitialResponse\");\n\n\t\t\tvar challenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (null)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (\"p=tls-unique,,n=user,r=\" + entropy), $\"{prefix}: initial SCRAM-SHA-512-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge1));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\n\t\t\tAssert.That (challenge, Is.EqualTo (expected), $\"{prefix}: second SCRAM-SHA-512-PLUS challenge response does not match the expected string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.False, $\"{prefix}: should not be authenticated yet.\");\n\n\t\t\ttoken = Convert.ToBase64String (Encoding.UTF8.GetBytes (challenge2));\n\t\t\tchallenge = Encoding.UTF8.GetString (Convert.FromBase64String (sasl.Challenge (token)));\n\t\t\tAssert.That (challenge, Is.EqualTo (string.Empty), $\"{prefix}: third SCRAM-SHA-512-PLUS challenge should be an empty string.\");\n\t\t\tAssert.That (sasl.IsAuthenticated, Is.True, $\"{prefix}: SCRAM-SHA-512-PLUS should be authenticated now.\");\n\t\t\tAssert.That (sasl.NegotiatedChannelBinding, Is.True, $\"{prefix}: NegotiatedChannelBinding\");\n\t\t\tAssert.That (sasl.NegotiatedSecurityLayer, Is.False, $\"{prefix}: NegotiatedSecurityLayer\");\n\n\t\t\tAssert.That (sasl.Challenge (string.Empty), Is.EqualTo (string.Empty), $\"{prefix}: challenge while authenticated.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestScramSha512PlusTlsUnique ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"user\", \"pencil\");\n\t\t\tvar uri = new Uri (\"imap://elwood.innosoft.com\");\n\t\t\tvar context = new ChannelBindingContext (ChannelBindingKind.Unique, uri.ToString ());\n\n\t\t\tvar sasl = new SaslMechanismScramSha512Plus (credentials) { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha512PlusTlsUnique (sasl, \"NetworkCredential\");\n\n\t\t\tsasl = new SaslMechanismScramSha512Plus (\"user\", \"pencil\") { ChannelBindingContext = context };\n\n\t\t\tAssertScramSha512PlusTlsUnique (sasl, \"user/pass\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SaslMechanismTests.cs",
    "content": "﻿//\n// SaslMechanismTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\n\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SaslMechanismTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.Create (null, Encoding.UTF8, credentials));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.Create (\"PLAIN\", null, credentials));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.Create (\"PLAIN\", Encoding.UTF8, null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.Create (null, credentials));\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.Create (\"PLAIN\", null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.IsSupported (null));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => SaslMechanism.SaslPrep (null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIsSupported ()\n\t\t{\n\t\t\tvar supported = new [] { \"PLAIN\", \"LOGIN\", \"CRAM-MD5\", \"DIGEST-MD5\", \"SCRAM-SHA-1\", \"SCRAM-SHA-1-PLUS\", \"SCRAM-SHA-256\", \"SCRAM-SHA-256-PLUS\", \"SCRAM-SHA-512\", \"SCRAM-SHA-512-PLUS\", \"NTLM\", \"OAUTHBEARER\", \"XOAUTH2\", \"ANONYMOUS\" };\n\t\t\tvar unsupported = new [] { \"EXTERNAL\", \"GSSAPI\", \"KERBEROS_V4\" };\n\t\t\tvar credentials = new NetworkCredential (\"username\", \"password\");\n\n\t\t\tforeach (var mechanism in supported) {\n\t\t\t\tAssert.That (SaslMechanism.IsSupported (mechanism), Is.True, mechanism);\n\n\t\t\t\tvar sasl = SaslMechanism.Create (mechanism, credentials);\n\t\t\t\tAssert.That (sasl, Is.Not.Null, mechanism);\n\t\t\t\tAssert.That (sasl.MechanismName, Is.EqualTo (mechanism), \"MechanismName\");\n\n\t\t\t\tsasl.Reset ();\n\t\t\t}\n\n\t\t\tforeach (var mechanism in unsupported)\n\t\t\t\tAssert.That (SaslMechanism.IsSupported (mechanism), Is.False, mechanism);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSaslPrep ()\n\t\t{\n\t\t\t// The following examples are from rfc4013, Section 3.\n\t\t\t// #  Input            Output     Comments\n\t\t\t// -  -----            ------     --------\n\t\t\t// 1  I<U+00AD>X       IX         SOFT HYPHEN mapped to nothing\n\t\t\tAssert.That (SaslMechanism.SaslPrep (\"I\\u00ADX\"), Is.EqualTo (\"IX\"), \"1\");\n\t\t\t// 2  user             user       no transformation\n\t\t\tAssert.That (SaslMechanism.SaslPrep (\"user\"), Is.EqualTo (\"user\"), \"2\");\n\t\t\t// 3  USER             USER       case preserved, will not match #2\n\t\t\tAssert.That (SaslMechanism.SaslPrep (\"USER\"), Is.EqualTo (\"USER\"), \"3\");\n\t\t\t// 4  <U+00AA>         a          output is NFKC, input in ISO 8859-1\n\t\t\tAssert.That (SaslMechanism.SaslPrep (\"\\u00AA\"), Is.EqualTo (\"a\"), \"4\");\n\t\t\t// 5  <U+2168>         IX         output is NFKC, will match #1\n\t\t\tAssert.That (SaslMechanism.SaslPrep (\"\\u2168\"), Is.EqualTo (\"IX\"), \"5\");\n\t\t\t// 6  <U+0007>                    Error - prohibited character\n\t\t\ttry {\n\t\t\t\tSaslMechanism.SaslPrep (\"\\u0007\");\n\t\t\t\tAssert.Fail (\"6\");\n\t\t\t} catch (ArgumentException) {\n\t\t\t}\n\t\t\t// 7  <U+0627><U+0031>            Error - bidirectional check\n\t\t\t//try {\n\t\t\t//\tSaslMechanism.SaslPrep (\"\\u0627\\u0031\");\n\t\t\t//\tAssert.Fail (\"7\");\n\t\t\t//} catch (ArgumentException) {\n\t\t\t//}\n\n\t\t\tvar prohibited = new char [] { '\\uF8FF', '\\uDFFF', '\\uFFFD', '\\u2FFB', '\\u200E' };\n\t\t\tforeach (var c in prohibited) {\n\t\t\t\ttry {\n\t\t\t\t\tSaslMechanism.SaslPrep (c.ToString ());\n\t\t\t\t\tAssert.Fail ($\"prohibited: '\\\\u{c:X}'\");\n\t\t\t\t} catch (ArgumentException) {\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tAssert.That (SaslMechanism.SaslPrep (string.Empty), Is.EqualTo (string.Empty));\n\t\t\tAssert.That (SaslMechanism.SaslPrep (\"a\\u00A0b\"), Is.EqualTo (\"a b\"));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/Security/SslHandshakeExceptionTests.cs",
    "content": "﻿//\n// SslHandshakeExceptionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Net;\nusing System.Text;\nusing System.Net.Sockets;\nusing System.Net.Security;\nusing System.Security.Authentication;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Runtime.Serialization.Formatters.Binary;\n\nusing MailKit;\nusing MailKit.Security;\n\nnamespace UnitTests.Security {\n\t[TestFixture]\n\tpublic class SslHandshakeExceptionTests\n\t{\n\t\tconst string HelpLink = \"https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ssl-handshake-exception\";\n\n#if NET6_0\n\n\t\t[Test]\n\t\tpublic void TestSerialization ()\n\t\t{\n\t\t\tvar expected = new SslHandshakeException (\"Bad boys, bad boys. Whatcha gonna do?\", new IOException (\"I/O Error.\"));\n\t\t\tSslCertificateValidationInfo info = null;\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = new SslHandshakeException (\"Bad boys, bad boys. Whatcha gonna do?\");\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = new SslHandshakeException ();\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = SslHandshakeException.Create (ref info, new AggregateException (\"Aggregate errors.\", new IOException (), new IOException ()), false, \"IMAP\", \"localhost\", 993, 993, 143);\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = SslHandshakeException.Create (ref info, new AggregateException (\"Aggregate errors.\", new IOException (), new IOException ()), true, \"IMAP\", \"localhost\", 143, 993, 143);\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = SslHandshakeException.Create (ref info, new AggregateException (\"Aggregate errors.\", new IOException ()), false, \"IMAP\", \"localhost\", 993, 993, 143);\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\n\t\t\texpected = SslHandshakeException.Create (ref info, new AggregateException (\"Aggregate errors.\", new IOException ()), true, \"IMAP\", \"localhost\", 143, 993, 143);\n\n\t\t\tAssert.That (expected.HelpLink, Is.EqualTo (HelpLink), \"Unexpected HelpLink.\");\n\n\t\t\tusing (var stream = new MemoryStream ()) {\n\t\t\t\tvar formatter = new BinaryFormatter ();\n\t\t\t\tformatter.Serialize (stream, expected);\n\t\t\t\tstream.Position = 0;\n\n\t\t\t\tvar ex = (SslHandshakeException) formatter.Deserialize (stream);\n\t\t\t\tAssert.That (ex.Message, Is.EqualTo (expected.Message), \"Unexpected Message.\");\n\t\t\t\tAssert.That (ex.HelpLink, Is.EqualTo (expected.HelpLink), \"Unexpected HelpLink.\");\n\t\t\t}\n\t\t}\n\n#endif // NET6_0\n\n\t\tclass FakeClient : MailService\n\t\t{\n\t\t\tSslCertificateValidationInfo sslValidationInfo;\n\t\t\tint timeout = 2 * 60 * 1000;\n\t\t\tstring hostName;\n\n\t\t\tpublic FakeClient (IProtocolLogger logger) : base (logger)\n\t\t\t{\n\t\t\t}\n\n\t\t\tpublic override object SyncRoot => throw new NotImplementedException ();\n\n\t\t\tpublic override HashSet<string> AuthenticationMechanisms => throw new NotImplementedException ();\n\n\t\t\tpublic override bool IsConnected => throw new NotImplementedException ();\n\n\t\t\tpublic override bool IsSecure => throw new NotImplementedException ();\n\n\t\t\tpublic override bool IsEncrypted => throw new NotImplementedException ();\n\n\t\t\tpublic override bool IsSigned => throw new NotImplementedException ();\n\n\t\t\tpublic override SslProtocols SslProtocol => throw new NotImplementedException ();\n\n\t\t\tpublic override CipherAlgorithmType? SslCipherAlgorithm => throw new NotImplementedException ();\n\n\t\t\tpublic override int? SslCipherStrength => throw new NotImplementedException ();\n\n#if NET5_0_OR_GREATER\n\t\t\tpublic override TlsCipherSuite? SslCipherSuite => throw new NotImplementedException ();\n#endif\n\n\t\t\tpublic override HashAlgorithmType? SslHashAlgorithm => throw new NotImplementedException ();\n\n\t\t\tpublic override int? SslHashStrength => throw new NotImplementedException ();\n\n\t\t\tpublic override ExchangeAlgorithmType? SslKeyExchangeAlgorithm => throw new NotImplementedException ();\n\n\t\t\tpublic override int? SslKeyExchangeStrength => throw new NotImplementedException ();\n\n\t\t\tpublic override bool IsAuthenticated => throw new NotImplementedException ();\n\n\t\t\tpublic override int Timeout {\n\t\t\t\tget { return timeout; }\n\t\t\t\tset { timeout = value; }\n\t\t\t}\n\n\t\t\tprotected override string Protocol => throw new NotImplementedException ();\n\n\t\t\tpublic override void Authenticate (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override void Authenticate (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override Task AuthenticateAsync (Encoding encoding, ICredentials credentials, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override Task AuthenticateAsync (SaslMechanism mechanism, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tbool ValidateRemoteCertificate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)\n\t\t\t{\n\t\t\t\tbool valid;\n\n\t\t\t\tsslValidationInfo?.Dispose ();\n\t\t\t\tsslValidationInfo = null;\n\n\t\t\t\tif (ServerCertificateValidationCallback != null) {\n\t\t\t\t\tvalid = ServerCertificateValidationCallback (hostName, certificate, chain, sslPolicyErrors);\n\t\t\t\t} else if (ServicePointManager.ServerCertificateValidationCallback != null) {\n\t\t\t\t\tvalid = ServicePointManager.ServerCertificateValidationCallback (hostName, certificate, chain, sslPolicyErrors);\n\t\t\t\t} else {\n\t\t\t\t\tvalid = DefaultServerCertificateValidationCallback (hostName, certificate, chain, sslPolicyErrors);\n\t\t\t\t}\n\n\t\t\t\tif (!valid) {\n\t\t\t\t\t// Note: The SslHandshakeException.Create() method will nullify this once it's done using it.\n\t\t\t\t\tsslValidationInfo = new SslCertificateValidationInfo (hostName, certificate, chain, sslPolicyErrors);\n\t\t\t\t}\n\n\t\t\t\treturn valid;\n\t\t\t}\n\n\t\t\tpublic override void Connect (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tusing (var stream = ConnectNetwork (host, port, cancellationToken)) {\n\t\t\t\t\thostName = host;\n\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tssl.AuthenticateAsClient (host, ClientCertificates, SslProtocols, CheckCertificateRevocation);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"HTTP\", host, port, 443, 80);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic override void Connect (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override void Connect (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override async Task ConnectAsync (string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tusing (var stream = await ConnectNetworkAsync (host, port, cancellationToken).ConfigureAwait (false)) {\n\t\t\t\t\thostName = host;\n\n\t\t\t\t\tvar ssl = new SslStream (stream, false, ValidateRemoteCertificate);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ssl.AuthenticateAsClientAsync (host, ClientCertificates, SslProtocols, CheckCertificateRevocation).ConfigureAwait (false);\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tssl.Dispose ();\n\n\t\t\t\t\t\tthrow SslHandshakeException.Create (ref sslValidationInfo, ex, false, \"HTTP\", host, port, 443, 80);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic override Task ConnectAsync (Socket socket, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override Task ConnectAsync (Stream stream, string host, int port = 0, SecureSocketOptions options = SecureSocketOptions.Auto, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override void Disconnect (bool quit, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override Task DisconnectAsync (bool quit, CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override void NoOp (CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\n\t\t\tpublic override Task NoOpAsync (CancellationToken cancellationToken = default)\n\t\t\t{\n\t\t\t\tthrow new NotImplementedException ();\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertBadSslExpiredServerCertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"*.badssl.com\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=COMODO RSA Domain Validation Secure Server CA, O=COMODO CA Limited, L=Salford, S=Greater Manchester, C=GB\"), \"Issuer\");\n\t\t\t//Assert.That (certificate.SerialNumber, Is.EqualTo (\"008040A36688A3B1F2\"), \"SerialNumber\");\n\t\t\t//Assert.That (certificate.Thumbprint, Is.EqualTo (\"209BADBBC9E63BBFFC301B3E30C5B51216FCE81D\"), \"Thumbprint\");\n\t\t}\n\n\t\tstatic void AssertBadSslExpiredCACertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"COMODO RSA Certification Authority\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, S=Greater Manchester, C=GB\"), \"Issuer\");\n\t\t\tAssert.That (certificate.SerialNumber, Is.EqualTo (\"4CAAF9CADB636FE01FF74ED85B03869D\"), \"SerialNumber\");\n\t\t\tAssert.That (certificate.Thumbprint, Is.EqualTo (\"AFE5D244A8D1194230FF479FE2F897BBCD7A8CB4\"), \"Thumbprint\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestExpiredCertificateValidationFailure ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"expired.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with expired.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslExpiredServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslExpiredCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestExpiredCertificateValidationFailureAsync ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"expired.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with expired.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslExpiredServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslExpiredCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertBadSslWrongHostServerCertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"*.badssl.com\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=R13, O=Let's Encrypt, C=US\"), \"Issuer\");\n\t\t\t//Assert.That (certificate.SerialNumber, Is.EqualTo (\"008040A36688A3B1F2\"), \"SerialNumber\");\n\t\t\t//Assert.That (certificate.Thumbprint, Is.EqualTo (\"209BADBBC9E63BBFFC301B3E30C5B51216FCE81D\"), \"Thumbprint\");\n\t\t}\n\n\t\tstatic void AssertBadSslWrongHostCACertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"ISRG Root X1\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=ISRG Root X1, O=Internet Security Research Group, C=US\"), \"Issuer\");\n\t\t\tAssert.That (certificate.SerialNumber, Is.EqualTo (\"008210CFB0D240E3594463E0BB63828B00\"), \"SerialNumber\");\n\t\t\tAssert.That (certificate.Thumbprint, Is.EqualTo (\"CABD2A79A1076A31F21D253635CB039D4329A5E8\"), \"Thumbprint\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestWrongHostCertificateValidationFailure ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"wrong.host.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with wrong.host.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslWrongHostServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslWrongHostCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestWrongHostCertificateValidationFailureAsync ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"wrong.host.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with wrong.host.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslWrongHostServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslWrongHostCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertBadSslSelfSignedServerCertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"*.badssl.com\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=*.badssl.com, O=BadSSL, L=San Francisco, S=California, C=US\"), \"Issuer\");\n\t\t\t//Assert.That (certificate.SerialNumber, Is.EqualTo (\"008040A36688A3B1F2\"), \"SerialNumber\");\n\t\t\t//Assert.That (certificate.Thumbprint, Is.EqualTo (\"209BADBBC9E63BBFFC301B3E30C5B51216FCE81D\"), \"Thumbprint\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSelfSignedCertificateValidationFailure ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"self-signed.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with self-signed.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslSelfSignedServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\tAssert.That (ex.RootCertificateAuthority, Is.Null, \"RootCertificateAuthority\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSelfSignedCertificateValidationFailureAsync ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"self-signed.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with self-signed.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslSelfSignedServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\tAssert.That (ex.RootCertificateAuthority, Is.Null, \"RootCertificateAuthority\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpublic static void AssertBadSslUntrustedRootServerCertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"*.badssl.com\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=BadSSL Untrusted Root Certificate Authority, O=BadSSL, L=San Francisco, S=California, C=US\"), \"Issuer\");\n\t\t\t//Assert.That (certificate.SerialNumber, Is.EqualTo (\"008040A36688A3B1F2\"), \"SerialNumber\");\n\t\t\t//Assert.That (certificate.Thumbprint, Is.EqualTo (\"209BADBBC9E63BBFFC301B3E30C5B51216FCE81D\"), \"Thumbprint\");\n\t\t}\n\n\t\tpublic static void AssertBadSslUntrustedRootCACertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"BadSSL Untrusted Root Certificate Authority\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=BadSSL Untrusted Root Certificate Authority, O=BadSSL, L=San Francisco, S=California, C=US\"), \"Issuer\");\n\t\t\tAssert.That (certificate.SerialNumber, Is.EqualTo (\"0097A0FCFAD7E528FD\"), \"SerialNumber\");\n\t\t\tAssert.That (certificate.Thumbprint, Is.EqualTo (\"7890C8934D5869B25D2F8D0D646F9A5D7385BA85\"), \"Thumbprint\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUntrustedRootCertificateValidationFailure ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestUntrustedRootCertificateValidationFailureAsync ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"untrusted-root.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with untrusted-root.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslUntrustedRootServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslUntrustedRootCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstatic void AssertBadSslRevokedServerCertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"revoked.badssl.com\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=E7, O=Let's Encrypt, C=US\"), \"Issuer\");\n\t\t\t//Assert.That (certificate.SerialNumber, Is.EqualTo (\"008040A36688A3B1F2\"), \"SerialNumber\");\n\t\t\t//Assert.That (certificate.Thumbprint, Is.EqualTo (\"209BADBBC9E63BBFFC301B3E30C5B51216FCE81D\"), \"Thumbprint\");\n\t\t}\n\n\t\tstatic void AssertBadSslRevokedCACertificate (X509Certificate2 certificate)\n\t\t{\n\t\t\tAssert.That (certificate.GetNameInfo (X509NameType.SimpleName, false), Is.EqualTo (\"ISRG Root X1\"), \"CommonName\");\n\t\t\tAssert.That (certificate.Issuer, Is.EqualTo (\"CN=ISRG Root X1, O=Internet Security Research Group, C=US\"), \"Issuer\");\n\t\t\tAssert.That (certificate.SerialNumber, Is.EqualTo (\"008210CFB0D240E3594463E0BB63828B00\"), \"SerialNumber\");\n\t\t\tAssert.That (certificate.Thumbprint, Is.EqualTo (\"CABD2A79A1076A31F21D253635CB039D4329A5E8\"), \"Thumbprint\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestRevokedCertificateValidationFailure ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"revoked.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with revoked.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslRevokedServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslRevokedCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestRevokedCertificateValidationFailureAsync ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"revoked.badssl.com\", 443, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with revoked.badssl.com.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Not.Null, \"ServerCertificate\");\n\t\t\t\t\tAssertBadSslRevokedServerCertificate ((X509Certificate2) ex.ServerCertificate);\n\n\t\t\t\t\t// Note: This is null on Mono because Mono provides an empty chain.\n\t\t\t\t\tif (ex.RootCertificateAuthority is X509Certificate2 root)\n\t\t\t\t\t\tAssertBadSslRevokedCACertificate (root);\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSslConnectOnPlainTextPortFailure ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tclient.Connect (\"www.google.com\", 80, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with www.google.com:80.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Null, \"ServerCertificate\");\n\t\t\t\t\tAssert.That (ex.RootCertificateAuthority, Is.Null, \"RootCertificateAuthority\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic async Task TestSslConnectOnPlainTextPortFailureAsync ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new FakeClient (null));\n\n\t\t\tusing (var client = new FakeClient (new NullProtocolLogger ())) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.ConnectAsync (\"www.google.com\", 80, SecureSocketOptions.SslOnConnect);\n\t\t\t\t\tAssert.Fail (\"SSL handshake should have failed with www.google.com:80.\");\n\t\t\t\t} catch (SslHandshakeException ex) {\n\t\t\t\t\tAssert.That (ex.ServerCertificate, Is.Null, \"ServerCertificate\");\n\t\t\t\t\tAssert.That (ex.RootCertificateAuthority, Is.Null, \"RootCertificateAuthority\");\n\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\tAssert.Ignore ($\"SSL handshake failure inconclusive: {ex}\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/StoreFlagsRequestTests.cs",
    "content": "﻿//\n// StoreFlagsRequestTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class StoreFlagsRequestTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new StoreFlagsRequest (StoreAction.Add, null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new StoreFlagsRequest (StoreAction.Add, MessageFlags.Seen, null));\n\n\t\t\t// For added code-coverage...\n\t\t\tAssert.DoesNotThrow (() => new StoreFlagsRequest (StoreAction.Add, new string[] { \"$Forwarded\" }));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/StoreLabelsRequestTests.cs",
    "content": "﻿//\n// StoreLabelsRequestTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class StoreLabelsRequestTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new StoreLabelsRequest (StoreAction.Add, null));\n\n\t\t\t// For added code-coverage...\n\t\t\tAssert.DoesNotThrow (() => new StoreLabelsRequest (StoreAction.Add));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/TestHelper.cs",
    "content": "﻿//\n// TestHelper.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Text;\n\nusing NUnit.Framework;\n\nnamespace UnitTests {\n\t[SetUpFixture]\n\tstatic class TestHelper\n\t{\n\t\tpublic static readonly string ProjectDir;\n\n\t\tstatic TestHelper ()\n\t\t{\n#if NET5_0_OR_GREATER\n\t\t\tvar codeBase = typeof (TestHelper).Assembly.Location;\n#else\n\t\t\tvar codeBase = typeof (TestHelper).Assembly.CodeBase;\n\t\t\tif (codeBase.StartsWith (\"file://\", StringComparison.OrdinalIgnoreCase))\n\t\t\t\tcodeBase = codeBase.Substring (\"file://\".Length);\n\n\t\t\tif (Path.DirectorySeparatorChar == '\\\\') {\n\t\t\t\tif (codeBase[0] == '/')\n\t\t\t\t\tcodeBase = codeBase.Substring (1);\n\n\t\t\t\tcodeBase = codeBase.Replace ('/', '\\\\');\n\t\t\t}\n#endif\n\n\t\t\tvar dir = Path.GetDirectoryName (codeBase);\n\n\t\t\twhile (Path.GetFileName (dir) != \"UnitTests\")\n\t\t\t\tdir = Path.GetFullPath (Path.Combine (dir, \"..\"));\n\n\t\t\tProjectDir = Path.GetFullPath (dir);\n\t\t}\n\n#if NET5_0_OR_GREATER\n\t\tstatic void OnUnobservedTaskException (object sender, UnobservedTaskExceptionEventArgs e)\n\t\t{\n\t\t\tConsole.WriteLine (\"Unobserved Task Exception:\");\n\t\t\tConsole.WriteLine (e.Exception);\n\t\t}\n\n\t\t[OneTimeSetUp]\n\t\tpublic static void Init ()\n\t\t{\n\t\t\tlock (CodePagesEncodingProvider.Instance)\n\t\t\t\tEncoding.RegisterProvider (CodePagesEncodingProvider.Instance);\n\n\t\t\tTaskScheduler.UnobservedTaskException += OnUnobservedTaskException;\n\t\t}\n#endif\n\t}\n}\n"
  },
  {
    "path": "UnitTests/UniqueIdMapTests.cs",
    "content": "﻿//\n// UniqueIdMapTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System.Collections;\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class UniqueIdMapTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tAssert.Throws<ArgumentNullException> (() => new UniqueIdMap (null, new [] { UniqueId.MinValue }));\n\t\t\tAssert.Throws<ArgumentNullException> (() => new UniqueIdMap (new [] { UniqueId.MinValue }, null));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestBasicFunctionality ()\n\t\t{\n\t\t\tvar map = new UniqueIdMap (new UniqueIdRange (1436832101, 1, 7), new UniqueIdRange (1436832128, 11, 17));\n\t\t\tint i = 0;\n\t\t\tuint u;\n\n\t\t\tAssert.That (map, Has.Count.EqualTo (7), \"Count\");\n\n\t\t\tfor (u = 1; u < 8; u++)\n\t\t\t\tAssert.That (map.ContainsKey (new UniqueId (1436832101, u)), Is.True, $\"ContainsKey {u}\");\n\t\t\tAssert.That (map.ContainsKey (new UniqueId (1436832101, u)), Is.False, $\"ContainsKey {u}\");\n\n\t\t\tforeach (var key in map.Keys) {\n\t\t\t\tAssert.That (key, Is.EqualTo (map.Source[i]), $\"Source[{i}] vs Key[{i}]\");\n\t\t\t\tAssert.That (map.TryGetValue (key, out var value), Is.True, $\"TryGetValue ({key})\");\n\t\t\t\tAssert.That (value, Is.EqualTo (map.Destination[i]), $\"Destination[{i}] vs value\");\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tforeach (var kvp in map)\n\t\t\t\tAssert.That (kvp.Key.Id + 10, Is.EqualTo (kvp.Value.Id), $\"KeyValuePair {kvp.Key} -> {kvp.Value}\");\n\n\t\t\tforeach (KeyValuePair<UniqueId,UniqueId> kvp in (IEnumerable) map)\n\t\t\t\tAssert.That (kvp.Key.Id + 10, Is.EqualTo (kvp.Value.Id), $\"Generic KeyValuePair {kvp.Key} -> {kvp.Value}\");\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => { var x = map[new UniqueId (27)]; });\n\t\t\tforeach (var uid in map.Source)\n\t\t\t\tAssert.That (map[uid].Id, Is.EqualTo (uid.Id + 10), $\"map[{uid}]\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/UniqueIdRangeTests.cs",
    "content": "﻿//\n// UniqueIdRangeTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\nusing MailKit.Search;\n\nnamespace UnitTests {\n\tpublic class UniqueIdRangeTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar uids = new UniqueIdRange (UniqueId.MinValue, UniqueId.MinValue);\n\t\t\tUniqueId uid;\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueIdRange (UniqueId.Invalid, UniqueId.MaxValue));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueIdRange (UniqueId.MinValue, UniqueId.Invalid));\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueIdRange (0, 0, 1));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueIdRange (0, 1, 0));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => uids.CopyTo (null, 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => uids.CopyTo (new UniqueId[1], -1));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => uid = uids[-1]);\n\t\t\tAssert.Throws<ArgumentNullException> (() => UniqueIdRange.TryParse (null, 0, out uids));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAscending ()\n\t\t{\n\t\t\tconst string example = \"1:20\";\n\t\t\tvar copy = new UniqueId[20];\n\t\t\tUniqueIdRange uids;\n\n\t\t\tAssert.That (UniqueIdRange.TryParse (example, 20160117, out uids), Is.True, \"Failed to parse uids.\");\n\t\t\tAssert.That (uids.SortOrder, Is.EqualTo (SortOrder.Ascending), \"SortOrder\");\n\t\t\tAssert.That (uids.Validity, Is.EqualTo (20160117), \"Validity\");\n\t\t\tAssert.That (uids.IsReadOnly, Is.True, \"IsReadOnly\");\n\t\t\tAssert.That (uids.Start.Id, Is.EqualTo (1), \"Start\");\n\t\t\tAssert.That (uids.End.Id, Is.EqualTo (20), \"End\");\n\t\t\tAssert.That (uids.Min.Id, Is.EqualTo (1), \"Min\");\n\t\t\tAssert.That (uids.Max.Id, Is.EqualTo (20), \"Max\");\n\t\t\tAssert.That (uids.ToString (), Is.EqualTo (example), \"ToString\");\n\t\t\tAssert.That (uids, Has.Count.EqualTo (20));\n\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (500)));\n\t\t\tAssert.That (uids.IndexOf (new UniqueId (500)), Is.EqualTo (-1));\n\n\t\t\tfor (int i = 0; i < uids.Count; i++) {\n\t\t\t\tAssert.That (uids.IndexOf (uids[i]), Is.EqualTo (i));\n\t\t\t\tAssert.That (uids[i].Validity, Is.EqualTo (20160117));\n\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (i + 1));\n\t\t\t}\n\n\t\t\tuids.CopyTo (copy, 0);\n\n\t\t\tfor (int i = 0; i < copy.Length; i++) {\n\t\t\t\tAssert.That (copy[i].Validity, Is.EqualTo (20160117));\n\t\t\t\tAssert.That (copy[i].Id, Is.EqualTo (i + 1));\n\t\t\t}\n\n\t\t\tvar list = new List<UniqueId> ();\n\t\t\tforeach (var uid in uids) {\n\t\t\t\tAssert.That (uid.Validity, Is.EqualTo (20160117));\n\t\t\t\tlist.Add (uid);\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t\tAssert.That (list[i].Id, Is.EqualTo (i + 1));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDescending ()\n\t\t{\n\t\t\tconst string example = \"20:1\";\n\t\t\tvar copy = new UniqueId[20];\n\t\t\tUniqueIdRange uids;\n\n\t\t\tAssert.That (UniqueIdRange.TryParse (example, 20160117, out uids), Is.True, \"Failed to parse uids.\");\n\t\t\tAssert.That (uids.SortOrder, Is.EqualTo (SortOrder.Descending), \"SortOrder\");\n\t\t\tAssert.That (uids.Validity, Is.EqualTo (20160117), \"Validity\");\n\t\t\tAssert.That (uids.IsReadOnly, Is.True, \"IsReadOnly\");\n\t\t\tAssert.That (uids.Start.Id, Is.EqualTo (20), \"Start\");\n\t\t\tAssert.That (uids.End.Id, Is.EqualTo (1), \"End\");\n\t\t\tAssert.That (uids.Min.Id, Is.EqualTo (1), \"Min\");\n\t\t\tAssert.That (uids.Max.Id, Is.EqualTo (20), \"Max\");\n\t\t\tAssert.That (uids.ToString (), Is.EqualTo (example), \"ToString\");\n\t\t\tAssert.That (uids, Has.Count.EqualTo (20));\n\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (500)));\n\t\t\tAssert.That (uids.IndexOf (new UniqueId (500)), Is.EqualTo (-1));\n\n\t\t\tfor (int i = 0; i < uids.Count; i++) {\n\t\t\t\tAssert.That (uids.IndexOf (uids[i]), Is.EqualTo (i));\n\t\t\t\tAssert.That (uids[i].Validity, Is.EqualTo (20160117));\n\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (20 - i));\n\t\t\t}\n\n\t\t\tuids.CopyTo (copy, 0);\n\n\t\t\tfor (int i = 0; i < copy.Length; i++) {\n\t\t\t\tAssert.That (copy[i].Validity, Is.EqualTo (20160117));\n\t\t\t\tAssert.That (copy[i].Id, Is.EqualTo (20 - i));\n\t\t\t}\n\n\t\t\tvar list = new List<UniqueId> ();\n\t\t\tforeach (var uid in uids) {\n\t\t\t\tAssert.That (uid.Validity, Is.EqualTo (20160117));\n\t\t\t\tlist.Add (uid);\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t\tAssert.That (list[i].Id, Is.EqualTo (20 - i));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNotSupported ()\n\t\t{\n\t\t\tvar range = new UniqueIdRange (UniqueId.MinValue, UniqueId.MaxValue);\n\n\t\t\tAssert.Throws<NotSupportedException> (() => range[5] = new UniqueId (5), \"set\");\n\t\t\tAssert.Throws<NotSupportedException> (() => range.Insert (0, new UniqueId (5)), \"Insert\");\n\t\t\tAssert.Throws<NotSupportedException> (() => range.Remove (new UniqueId (5)), \"Remove\");\n\t\t\tAssert.Throws<NotSupportedException> (() => range.RemoveAt (1), \"RemoveAt\");\n\t\t\tAssert.Throws<NotSupportedException> (() => range.Add (new UniqueId (5)), \"Add\");\n\t\t\tAssert.Throws<NotSupportedException> (() => range.Clear (), \"Clear\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParser ()\n\t\t{\n\t\t\tAssert.That (UniqueIdRange.TryParse (\"xyz\", out _), Is.False);\n\t\t\tAssert.That (UniqueIdRange.TryParse (\"1:xyz\", out _), Is.False);\n\t\t\tAssert.That (UniqueIdRange.TryParse (\"1:*1\", out _), Is.False);\n\t\t\tAssert.That (UniqueIdRange.TryParse (\"1:1x\", out _), Is.False);\n\n\t\t\tAssert.That (UniqueIdRange.TryParse (\"1:*\", out var range), Is.True);\n\t\t\tAssert.That (range.SortOrder, Is.EqualTo (SortOrder.Ascending), \"SortOrder\");\n\t\t\tAssert.That (range.Min, Is.EqualTo (UniqueId.MinValue));\n\t\t\tAssert.That (range.Max, Is.EqualTo (UniqueId.MaxValue));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/UniqueIdSetTests.cs",
    "content": "﻿//\n// UniqueIdSetTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\nusing MailKit.Search;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class UniqueIdSetTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tvar uids = new UniqueIdSet (SortOrder.Ascending);\n\t\t\tUniqueId uid;\n\n\t\t\tAssert.That (uids.IsReadOnly, Is.False);\n\n\t\t\tuids.Add (UniqueId.MinValue);\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueIdSet ((SortOrder)500));\n\t\t\tAssert.Throws<ArgumentException> (() => uids.Add (UniqueId.Invalid));\n\t\t\tAssert.Throws<ArgumentNullException> (() => uids.AddRange (null));\n\t\t\tAssert.Throws<ArgumentNullException> (() => uids.CopyTo (null, 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => uids.CopyTo (new UniqueId[1], -1));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => uids.RemoveAt (-1));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => uid = uids[-1]);\n\t\t\tAssert.Throws<NotSupportedException> (() => uids[0] = UniqueId.MinValue);\n\t\t\tAssert.Throws<NotSupportedException> (() => uids.Insert (0, UniqueId.MinValue));\n\n\t\t\tvar list = new List<UniqueId> { UniqueId.Invalid };\n\t\t\tAssert.Throws<ArgumentNullException> (() => UniqueIdSet.ToString (null));\n\t\t\tAssert.Throws<ArgumentException> (() => UniqueIdSet.ToString (list));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => UniqueIdSet.TryParse (null, out uids));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestAscendingUniqueIdSet ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (4), new UniqueId (5), new UniqueId (6),\n\t\t\t\tnew UniqueId (7), new UniqueId (8), new UniqueId (9)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids, SortOrder.Ascending);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:9\"), \"Incorrect initial value.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect initial count.\");\n\t\t\tAssert.That (list.IndexOf (new UniqueId (500)), Is.EqualTo (-1));\n\t\t\tAssert.That (list, Does.Not.Contain (new UniqueId (500)));\n\t\t\tAssert.That (list.Remove (new UniqueId (500)), Is.False);\n\n\t\t\t// Test Remove()\n\n\t\t\tlist.Remove (uids[0]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:9\"), \"Incorrect results after Remove() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after Remove() #1.\");\n\n\t\t\tlist.Remove (uids[uids.Length - 1]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:8\"), \"Incorrect results after Remove() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after Remove() #2.\");\n\n\t\t\tlist.Remove (uids[4]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:4,6:8\"), \"Incorrect results after Remove() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (6), \"Incorrect count after Remove() #3.\");\n\n\t\t\t// Test Add()\n\n\t\t\tlist.Add (new UniqueId (5));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:8\"), \"Incorrect results after Add() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after Add() #1.\");\n\n\t\t\tlist.Add (new UniqueId (1));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:8\"), \"Incorrect results after Add() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after Add() #2.\");\n\n\t\t\tlist.Add (new UniqueId (9));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:9\"), \"Incorrect results after Add() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect count after Add() #3.\");\n\n\t\t\t// Test RemoveAt()\n\n\t\t\tlist.RemoveAt (0);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:9\"), \"Incorrect results after RemoveAt() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after RemoveAt() #1.\");\n\n\t\t\tlist.RemoveAt (7);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:8\"), \"Incorrect results after RemoveAt() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after RemoveAt() #2.\");\n\n\t\t\tlist.RemoveAt (3);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:4,6:8\"), \"Incorrect results after RemoveAt() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (6), \"Incorrect count after RemoveAt() #3.\");\n\n\t\t\t// Test adding a range of items\n\n\t\t\tlist.AddRange (uids);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:9\"), \"Incorrect results after AddRange().\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect count after AddRange().\");\n\n\t\t\t// Test clearing the list\n\t\t\tlist.Clear ();\n\t\t\tAssert.That (list, Is.Empty, \"Incorrect count after Clear().\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestDescendingUniqueIdSet ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (4), new UniqueId (5), new UniqueId (6),\n\t\t\t\tnew UniqueId (7), new UniqueId (8), new UniqueId (9)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids, SortOrder.Descending);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"9:1\"), \"Incorrect initial value.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect initial count.\");\n\n\t\t\t// Test Remove()\n\n\t\t\tlist.Remove (uids[0]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"9:2\"), \"Incorrect results after Remove() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after Remove() #1.\");\n\n\t\t\tlist.Remove (uids[uids.Length - 1]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:2\"), \"Incorrect results after Remove() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after Remove() #2.\");\n\n\t\t\tlist.Remove (uids[4]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:6,4:2\"), \"Incorrect results after Remove() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (6), \"Incorrect count after Remove() #3.\");\n\n\t\t\t// Test Add()\n\n\t\t\tlist.Add (new UniqueId (5));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:2\"), \"Incorrect results after Add() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after Add() #1.\");\n\n\t\t\tlist.Add (new UniqueId (1));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:1\"), \"Incorrect results after Add() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after Add() #2.\");\n\n\t\t\tlist.Add (new UniqueId (9));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"9:1\"), \"Incorrect results after Add() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect count after Add() #3.\");\n\n\t\t\t// Test RemoveAt()\n\n\t\t\tlist.RemoveAt (0);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:1\"), \"Incorrect results after RemoveAt() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after RemoveAt() #1.\");\n\n\t\t\tlist.RemoveAt (7);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:2\"), \"Incorrect results after RemoveAt() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after RemoveAt() #2.\");\n\n\t\t\tlist.RemoveAt (3);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"8:6,4:2\"), \"Incorrect results after RemoveAt() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (6), \"Incorrect count after RemoveAt() #3.\");\n\n\t\t\t// Test adding a range of items\n\n\t\t\tlist.AddRange (uids);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"9:1\"), \"Incorrect results after AddRange().\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect count after AddRange().\");\n\n\t\t\t// Test clearing the list\n\t\t\tlist.Clear ();\n\t\t\tAssert.That (list, Is.Empty, \"Incorrect count after Clear().\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestUnsortedUniqueIdSet ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (4), new UniqueId (5), new UniqueId (6),\n\t\t\t\tnew UniqueId (7), new UniqueId (8), new UniqueId (9)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:9\"), \"Incorrect initial value.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect initial count.\");\n\n\t\t\t// Test Remove()\n\n\t\t\tlist.Remove (uids[0]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:9\"), \"Incorrect results after Remove() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after Remove() #1.\");\n\n\t\t\tlist.Remove (uids[uids.Length - 1]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:8\"), \"Incorrect results after Remove() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after Remove() #2.\");\n\n\t\t\tlist.Remove (uids[4]);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:4,6:8\"), \"Incorrect results after Remove() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (6), \"Incorrect count after Remove() #3.\");\n\n\t\t\t// Test Add()\n\n\t\t\tlist.Add (new UniqueId (5));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:4,6:8,5\"), \"Incorrect results after Add() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after Add() #1.\");\n\n\t\t\tlist.Add (new UniqueId (1));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:4,6:8,5,1\"), \"Incorrect results after Add() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after Add() #2.\");\n\n\t\t\tlist.Add (new UniqueId (9));\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"2:4,6:8,5,1,9\"), \"Incorrect results after Add() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect count after Add() #3.\");\n\n\t\t\t// Test RemoveAt()\n\n\t\t\tlist.RemoveAt (0);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"3:4,6:8,5,1,9\"), \"Incorrect results after RemoveAt() #1.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (8), \"Incorrect count after RemoveAt() #1.\");\n\n\t\t\tlist.RemoveAt (7);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"3:4,6:8,5,1\"), \"Incorrect results after RemoveAt() #2.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (7), \"Incorrect count after RemoveAt() #2.\");\n\n\t\t\tlist.RemoveAt (3);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"3:4,6,8,5,1\"), \"Incorrect results after RemoveAt() #3.\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (6), \"Incorrect count after RemoveAt() #3.\");\n\n\t\t\t// Test adding a range of items\n\n\t\t\tlist.AddRange (uids);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"3:4,6,8,5,1:2,7,9\"), \"Incorrect results after AddRange().\");\n\t\t\tAssert.That (list, Has.Count.EqualTo (9), \"Incorrect count after AddRange().\");\n\n\t\t\t// Test clearing the list\n\t\t\tlist.Clear ();\n\t\t\tAssert.That (list, Is.Empty, \"Incorrect count after Clear().\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestNonSequentialUniqueIdSet ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (3), new UniqueId (5),\n\t\t\t\tnew UniqueId (7), new UniqueId (9)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1,3,5,7,9\"));\n\n\t\t\tlist = new UniqueIdSet (uids, SortOrder.Ascending);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1,3,5,7,9\"), \"Unexpected result for ascending set.\");\n\n\t\t\tlist = new UniqueIdSet (uids, SortOrder.Descending);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"9,7,5,3,1\"), \"Unexpected result for descending set.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComplexUniqueIdSet ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (5), new UniqueId (6), new UniqueId (9),\n\t\t\t\tnew UniqueId (10), new UniqueId (11), new UniqueId (12),\n\t\t\t\tnew UniqueId (15), new UniqueId (19), new UniqueId (20)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:3,5:6,9:12,15,19:20\"), \"Unexpected result for unsorted set.\");\n\n\t\t\tlist = new UniqueIdSet (uids, SortOrder.Ascending);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:3,5:6,9:12,15,19:20\"), \"Unexpected result for ascending set.\");\n\n\t\t\tlist = new UniqueIdSet (uids, SortOrder.Descending);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"20:19,15,12:9,6:5,3:1\"), \"Unexpected result for descending set.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestReversedUniqueIdSet ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (20), new UniqueId (19), new UniqueId (15),\n\t\t\t\tnew UniqueId (12), new UniqueId (11), new UniqueId (10),\n\t\t\t\tnew UniqueId (9), new UniqueId (6), new UniqueId (5),\n\t\t\t\tnew UniqueId (3), new UniqueId (2), new UniqueId (1)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"20:19,15,12:9,6:5,3:1\"), \"Unexpected result for unsorted set.\");\n\n\t\t\tlist = new UniqueIdSet (uids, SortOrder.Ascending);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:3,5:6,9:12,15,19:20\"), \"Unexpected result for ascending set.\");\n\t\t\tAssert.That (list.IndexOf (new UniqueId (1)), Is.EqualTo (0), \"Unexpected index for descending set.\");\n\n\t\t\tlist = new UniqueIdSet (uids, SortOrder.Descending);\n\t\t\tactual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"20:19,15,12:9,6:5,3:1\"), \"Unexpected result for descending set.\");\n\t\t\tAssert.That (list.IndexOf (new UniqueId (1)), Is.EqualTo (11), \"Unexpected index for descending set.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMergingRangesAscending ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (5), new UniqueId (6), new UniqueId (7),\n\t\t\t\tnew UniqueId (9), new UniqueId (10), new UniqueId (11),\n\t\t\t\tnew UniqueId (8)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids, SortOrder.Ascending);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"1:3,5:11\"), \"Unexpected result for sorted set.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestMergingRangesDescending ()\n\t\t{\n\t\t\tUniqueId[] uids = {\n\t\t\t\tnew UniqueId (1), new UniqueId (2), new UniqueId (3),\n\t\t\t\tnew UniqueId (5), new UniqueId (6), new UniqueId (7),\n\t\t\t\tnew UniqueId (9), new UniqueId (10), new UniqueId (11),\n\t\t\t\tnew UniqueId (4)\n\t\t\t};\n\t\t\tvar list = new UniqueIdSet (uids, SortOrder.Descending);\n\t\t\tvar actual = list.ToString ();\n\n\t\t\tAssert.That (actual, Is.EqualTo (\"11:9,7:1\"), \"Unexpected result for sorted set.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestContainsAscending ()\n\t\t{\n\t\t\tvar uids = new UniqueIdSet (SortOrder.Ascending);\n\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (5)), \"5\");\n\n\t\t\tuids.Add (new UniqueId (2));\n\t\t\tuids.Add (new UniqueId (3));\n\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (1)), \"1\");\n\t\t\tAssert.That (uids, Does.Contain (new UniqueId (2)), \"2\");\n\t\t\tAssert.That (uids, Does.Contain (new UniqueId (3)), \"3\");\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (4)), \"4\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestContainsDescending ()\n\t\t{\n\t\t\tvar uids = new UniqueIdSet (SortOrder.Descending);\n\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (5)), \"5\");\n\n\t\t\tuids.Add (new UniqueId (2));\n\t\t\tuids.Add (new UniqueId (3));\n\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (1)), \"1\");\n\t\t\tAssert.That (uids, Does.Contain (new UniqueId (2)), \"2\");\n\t\t\tAssert.That (uids, Does.Contain (new UniqueId (3)), \"3\");\n\t\t\tAssert.That (uids, Does.Not.Contain (new UniqueId (4)), \"4\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParsingSimple ()\n\t\t{\n\t\t\tconst string example = \"1:3,5:6,9:12,15,19:20\";\n\n\t\t\tAssert.That (UniqueIdSet.TryParse (example, out var uids), Is.True, \"Failed to parse uids.\");\n\t\t\tAssert.That (uids.SortOrder, Is.EqualTo (SortOrder.Ascending));\n\t\t\tAssert.That (uids.ToString (), Is.EqualTo (example));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParsingReversedSet ()\n\t\t{\n\t\t\tvar ids = new uint[] { 20, 19, 15, 12, 11, 10, 9, 6, 5, 3, 2, 1 };\n\t\t\tconst string example = \"20:19,15,12:9,6:5,3:1\";\n\n\t\t\tAssert.That (UniqueIdSet.TryParse (example, out var uids), Is.True, \"Failed to parse uids.\");\n\t\t\tAssert.That (uids.SortOrder, Is.EqualTo (SortOrder.Descending));\n\t\t\tAssert.That (uids.ToString (), Is.EqualTo (example));\n\t\t\tAssert.That (uids, Has.Count.EqualTo (ids.Length));\n\n\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (ids[i]));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParsingInvalidInputs ()\n\t\t{\n\t\t\tAssert.That (UniqueIdSet.TryParse (\"xyz\", out _), Is.False);\n\t\t\tAssert.That (UniqueIdSet.TryParse (\"1:x\", out _), Is.False);\n\t\t\tAssert.That (UniqueIdSet.TryParse (\"1:1x\", out _), Is.False);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEnumerator ()\n\t\t{\n\t\t\tvar ids = new uint[] { 20, 19, 15, 12, 11, 10, 9, 6, 5, 3, 2, 1 };\n\t\t\tconst string example = \"20:19,15,12:9,6:5,3:1\";\n\t\t\tUniqueIdSet uids;\n\n\t\t\tAssert.That (UniqueIdSet.TryParse (example, 20160117, out uids), Is.True, \"Failed to parse uids.\");\n\t\t\tAssert.That (uids.SortOrder, Is.EqualTo (SortOrder.Descending));\n\t\t\tAssert.That (uids.Validity, Is.EqualTo (20160117));\n\t\t\tAssert.That (uids.ToString (), Is.EqualTo (example));\n\t\t\tAssert.That (uids, Has.Count.EqualTo (ids.Length));\n\n\t\t\tfor (int i = 0; i < uids.Count; i++)\n\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (ids[i]));\n\n\t\t\tvar list = new List<UniqueId> ();\n\t\t\tforeach (var uid in uids) {\n\t\t\t\tAssert.That (uid.Validity, Is.EqualTo (20160117));\n\t\t\t\tlist.Add (uid);\n\t\t\t}\n\n\t\t\tfor (int i = 0; i < list.Count; i++)\n\t\t\t\tAssert.That (list[i].Id, Is.EqualTo (ids[i]));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCopyTo ()\n\t\t{\n\t\t\tvar ids = new uint[] { 20, 19, 15, 12, 11, 10, 9, 6, 5, 3, 2, 1 };\n\t\t\tconst string example = \"20:19,15,12:9,6:5,3:1\";\n\t\t\tvar copy = new UniqueId[ids.Length];\n\t\t\tUniqueIdSet uids;\n\n\t\t\tAssert.That (UniqueIdSet.TryParse (example, 20160117, out uids), Is.True, \"Failed to parse uids.\");\n\t\t\tAssert.That (uids.SortOrder, Is.EqualTo (SortOrder.Descending));\n\t\t\tAssert.That (uids.Validity, Is.EqualTo (20160117));\n\t\t\tAssert.That (uids.ToString (), Is.EqualTo (example));\n\t\t\tAssert.That (uids, Has.Count.EqualTo (ids.Length));\n\n\t\t\tfor (int i = 0; i < uids.Count; i++) {\n\t\t\t\tAssert.That (uids[i].Validity, Is.EqualTo (20160117));\n\t\t\t\tAssert.That (uids[i].Id, Is.EqualTo (ids[i]));\n\t\t\t}\n\n\t\t\tuids.CopyTo (copy, 0);\n\n\t\t\tfor (int i = 0; i < copy.Length; i++) {\n\t\t\t\tAssert.That (copy[i].Validity, Is.EqualTo (20160117));\n\t\t\t\tAssert.That (copy[i].Id, Is.EqualTo (ids[i]));\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/UniqueIdTests.cs",
    "content": "﻿//\n// UniqueIdTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class UniqueIdTests\n\t{\n\t\t[Test]\n\t\tpublic void TestArgumentExceptions ()\n\t\t{\n\t\t\tUniqueId uid;\n\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueId (0, 0));\n\t\t\tAssert.Throws<ArgumentOutOfRangeException> (() => new UniqueId (0));\n\n\t\t\tAssert.Throws<ArgumentNullException> (() => UniqueId.TryParse (null, out uid));\n\t\t\tAssert.Throws<ArgumentNullException> (() => UniqueId.TryParse (null, 0, out uid));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestEquality ()\n\t\t{\n\t\t\tAssert.That (UniqueId.MinValue == UniqueId.MaxValue, Is.False, \"MinValue == MaxValue\");\n\t\t\tAssert.That (UniqueId.MinValue != UniqueId.MaxValue, Is.True, \"MinValue != MaxValue\");\n\t\t\tAssert.That (UniqueId.MinValue.Equals (new UniqueId (1)), Is.True, \"MinValue.Equals(1)\");\n\t\t\tAssert.That (UniqueId.MinValue.Equals ((object) new UniqueId (1)), Is.True, \"Boxed MinValue.Equals(1)\");\n\t\t\tAssert.That (new UniqueId (1).GetHashCode (), Is.EqualTo (UniqueId.MinValue.GetHashCode ()), \"GetHashCode\");\n\t\t\tAssert.That (UniqueId.MaxValue, Is.Not.EqualTo (UniqueId.MinValue));\n\t\t\t//Assert.That (new UniqueId (5), Is.EqualTo (new UniqueId (5)));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestComparisons ()\n\t\t{\n\t\t\tvar five = new UniqueId (5);\n\t\t\tvar one = new UniqueId (1);\n\n\t\t\tAssert.That (new UniqueId (5), Is.LessThanOrEqualTo (five), \"5 <= 5\");\n\t\t\tAssert.That (new UniqueId (1), Is.LessThanOrEqualTo (five), \"1 <= 5\");\n\t\t\tAssert.That (new UniqueId (1), Is.LessThan (five), \"1 < 5\");\n\n\t\t\tAssert.That (new UniqueId (5), Is.GreaterThanOrEqualTo (five), \"5 >= 5\");\n\t\t\tAssert.That (new UniqueId (5), Is.GreaterThanOrEqualTo (one), \"5 >= 1\");\n\t\t\tAssert.That (new UniqueId (5), Is.GreaterThan (one), \"5 > 1\");\n\n\t\t\tAssert.That (new UniqueId (1).CompareTo (new UniqueId (5)), Is.EqualTo (-1), \"1.CompareTo (5)\");\n\t\t\tAssert.That (new UniqueId (5).CompareTo (new UniqueId (1)), Is.EqualTo (1), \"5.CompareTo (1)\");\n\t\t\tAssert.That (new UniqueId (5).CompareTo (new UniqueId (5)), Is.EqualTo (0), \"5.CompareTo (5)\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestIsValid ()\n\t\t{\n\t\t\tAssert.That (UniqueId.Invalid.IsValid, Is.False, \"Invalid.IsValid\");\n\t\t\tAssert.That (UniqueId.MinValue.IsValid, Is.True, \"MinValue.IsValid\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestToString ()\n\t\t{\n\t\t\tAssert.That (UniqueId.MaxValue.ToString (), Is.EqualTo (\"4294967295\"), \"MaxValue\");\n\t\t\tAssert.That (UniqueId.MinValue.ToString (), Is.EqualTo (\"1\"), \"MinValue\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestParsing ()\n\t\t{\n\t\t\tUniqueId uid;\n\t\t\tint index = 0;\n\n\t\t\t// make sure that parsing bad input fails\n\t\t\tAssert.That (UniqueId.TryParse (\"text\", ref index, out _), Is.False, \"text\");\n\t\t\tAssert.That (UniqueId.TryParse (\"text\", 20160117, out _), Is.False, \"text\");\n\t\t\tAssert.That (UniqueId.TryParse (\"text\", out _), Is.False, \"text\");\n\n\t\t\t// make sure that parsing uint.MaxValue works\n\t\t\tindex = 0;\n\t\t\tAssert.That (UniqueId.TryParse (\"4294967295\", ref index, out _), Is.True, \"4294967295\");\n\t\t\tAssert.That (UniqueId.TryParse (\"4294967295\", 20160117, out uid), Is.True, \"4294967295\");\n\t\t\tAssert.That (uid.Validity, Is.EqualTo (20160117));\n\t\t\tAssert.That (uid, Is.EqualTo (UniqueId.MaxValue));\n\n\t\t\tAssert.That (UniqueId.TryParse (\"4294967295\", out uid), Is.True, \"4294967295\");\n\t\t\tAssert.That (uid, Is.EqualTo (UniqueId.MaxValue));\n\n\t\t\tuid = UniqueId.Parse (\"4294967295\", 20160117);\n\t\t\tAssert.That (uid.Validity, Is.EqualTo (20160117));\n\t\t\tAssert.That (uid, Is.EqualTo (UniqueId.MaxValue));\n\n\t\t\tuid = UniqueId.Parse (\"4294967295\");\n\t\t\tAssert.That (uid, Is.EqualTo (UniqueId.MaxValue));\n\n\t\t\t// make sure parsing a value larger than uint.MaxValue fails\n\t\t\tindex = 0;\n\t\t\tAssert.That (UniqueId.TryParse (\"4294967296\", ref index, out _), Is.False, \"4294967296\");\n\n\t\t\tindex = 0;\n\t\t\tAssert.That (UniqueId.TryParse (\"4294967305\", ref index, out _), Is.False, \"4294967305\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "UnitTests/UnitTests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <LangVersion>10</LangVersion>\n    <AssemblyName>UnitTests</AssemblyName>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>Full</DebugType>\n    <SignAssembly>true</SignAssembly>\n    <DefineConstants Condition=\" '$(MonoRuntime)' == 'true' \">$(DefineConstants);MONO</DefineConstants>\n    <AssemblyOriginatorKeyFile>..\\MailKit\\mailkit.snk</AssemblyOriginatorKeyFile>\n    <IsPackable>false</IsPackable>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <NoWarn>1701;1702;CA1835;IDE0016;IDE0056;IDE0057;IDE0063;IDE0066;IDE0090;SYSLIB0011;NUnit2010;NUnit2045</NoWarn>\n\n    <SQLiteRuntime>win-x64</SQLiteRuntime>\n    <SQLiteRuntime Condition=\" '$(MonoRuntime)' == 'true' \">linux-x64</SQLiteRuntime>\n    <SQLiteRuntime Condition=\" Exists('/System') And Exists('/System/Library') \">osx-x64</SQLiteRuntime>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Using Include=\"NUnit.Framework\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"AltCover\" Version=\"9.0.102\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"18.3.0\" />\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.4\" />\n    <PackageReference Include=\"nunit\" Version=\"4.5.1\" />\n    <PackageReference Include=\"NUnit.Analyzers\" Version=\"4.12.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"NUnit.ConsoleRunner\" Version=\"3.22.0\" />\n    <PackageReference Include=\"NUnit3TestAdapter\" Version=\"6.1.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"System.Data.SQLite.Core\" Version=\"1.0.119\" />\n    <PackageReference Include=\"Stub.System.Data.SQLite.Core.NetFramework\" Version=\"1.0.119\" GeneratePathProperty=\"true\" Condition=\" $(TargetFramework.StartsWith('net4')) \">\n      <IncludeAssets>all</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Stub.System.Data.SQLite.Core.NetStandard\" Version=\"1.0.119\" GeneratePathProperty=\"true\" Condition=\" !$(TargetFramework.StartsWith('net4')) \">\n      <IncludeAssets>all</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\submodules\\MimeKit\\MimeKit\\MimeKit.csproj\" />\n    <ProjectReference Include=\"..\\MailKit\\MailKit.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Remove=\"Net\\Imap\\Resources\\**\\*.*\" />\n    <None Remove=\"Net\\Pop3\\Resources\\**\\*.*\" />\n    <None Remove=\"Net\\Smtp\\Resources\\**\\*.*\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Net\\Imap\\Resources\\**\\*.*\" />\n    <EmbeddedResource Include=\"Net\\Pop3\\Resources\\**\\*.*\" />\n    <EmbeddedResource Include=\"Net\\Smtp\\Resources\\**\\*.*\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "UnitTests/UriExtensionTests.cs",
    "content": "﻿//\n// UriExtensionTests.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation and Contributors\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\n\nnamespace UnitTests {\n\t[TestFixture]\n\tpublic class UriExtensionTests\n\t{\n\t\t[Test]\n\t\tpublic void TestNoQuery ()\n\t\t{\n\t\t\tvar uri = new Uri (\"imap://imap.gmail.com/\");\n\t\t\tvar query = uri.ParsedQuery ();\n\n\t\t\tAssert.That (query, Is.Empty, \"Unexpected number of queries.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestSimpleQuery ()\n\t\t{\n\t\t\tvar uri = new Uri (\"imap://imap.gmail.com/?starttls=false\");\n\t\t\tvar query = uri.ParsedQuery ();\n\n\t\t\tAssert.That (query, Has.Count.EqualTo (1), \"Unexpected number of queries.\");\n\t\t\tAssert.That (query[\"starttls\"], Is.EqualTo (\"false\"), \"Unexpected value for 'starttls'.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestCompoundQuery ()\n\t\t{\n\t\t\tvar uri = new Uri (\"imap://imap.gmail.com/?starttls=false&compress=false\");\n\t\t\tvar query = uri.ParsedQuery ();\n\n\t\t\tAssert.That (query, Has.Count.EqualTo (2), \"Unexpected number of queries.\");\n\t\t\tAssert.That (query[\"starttls\"], Is.EqualTo (\"false\"), \"Unexpected value for 'starttls'.\");\n\t\t\tAssert.That (query[\"compress\"], Is.EqualTo (\"false\"), \"Unexpected value for 'compress'.\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void TestQueryWithoutValue ()\n\t\t{\n\t\t\tvar uri = new Uri (\"imap://imap.gmail.com/?starttls=false&compress\");\n\t\t\tvar query = uri.ParsedQuery ();\n\n\t\t\tAssert.That (query, Has.Count.EqualTo (2), \"Unexpected number of queries.\");\n\t\t\tAssert.That (query[\"starttls\"], Is.EqualTo (\"false\"), \"Unexpected value for 'starttls'.\");\n\t\t\tAssert.That (query[\"compress\"], Is.EqualTo (string.Empty), \"Unexpected value for 'compress'.\");\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "cov-build.bat",
    "content": "rmdir /q /s cov-int\ndel cov-int.zip\n..\\cov-analysis\\bin\\cov-build.exe --dir cov-int \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\MSBuild\\Current\\Bin\\MSBuild.exe\" /t:Rebuild MailKit.Coverity.sln\n"
  },
  {
    "path": "nuget/GettingStarted.md",
    "content": "## Getting Started\n\n### Sending Messages\n\nOne of the more common operations that MailKit is meant for is sending email messages.\n\n```csharp\nusing System;\n\nusing MailKit.Net.Smtp;\nusing MailKit;\nusing MimeKit;\n\nnamespace TestClient {\n\tclass Program\n\t{\n\t\tpublic static void Main (string[] args)\n\t\t{\n\t\t\tvar message = new MimeMessage ();\n\t\t\tmessage.From.Add (new MailboxAddress (\"Joey Tribbiani\", \"joey@friends.com\"));\n\t\t\tmessage.To.Add (new MailboxAddress (\"Mrs. Chanandler Bong\", \"chandler@friends.com\"));\n\t\t\tmessage.Subject = \"How you doin'?\";\n\n\t\t\tmessage.Body = new TextPart (\"plain\") {\n\t\t\t\tText = @\"Hey Chandler,\n\nI just wanted to let you know that Monica and I were going to go play some paintball, you in?\n\n-- Joey\"\n\t\t\t};\n\n\t\t\tusing (var client = new SmtpClient ()) {\n\t\t\t\tclient.Connect (\"smtp.friends.com\", 587, false);\n\n\t\t\t\t// Note: only needed if the SMTP server requires authentication\n\t\t\t\tclient.Authenticate (\"joey\", \"password\");\n\n\t\t\t\tclient.Send (message);\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\n## Retrieving Messages (via Pop3)\n\nOne of the other main uses of MailKit is retrieving messages from pop3 servers.\n\n```csharp\nusing System;\n\nusing MailKit.Net.Pop3;\nusing MailKit;\nusing MimeKit;\n\nnamespace TestClient {\n\tclass Program\n\t{\n\t\tpublic static void Main (string[] args)\n\t\t{\n\t\t\tusing (var client = new Pop3Client ()) {\n\t\t\t\tclient.Connect (\"pop.friends.com\", 110, false);\n\n\t\t\t\tclient.Authenticate (\"joey\", \"password\");\n\n\t\t\t\tfor (int i = 0; i < client.Count; i++) {\n\t\t\t\t\tvar message = client.GetMessage (i);\n\t\t\t\t\tConsole.WriteLine (\"Subject: {0}\", message.Subject);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\n## Using IMAP\n\nMore important than POP3 support is the IMAP support. Here's a simple use-case of retrieving messages from an IMAP server:\n\n```csharp\nusing System;\n\nusing MailKit.Net.Imap;\nusing MailKit.Search;\nusing MailKit;\nusing MimeKit;\n\nnamespace TestClient {\n\tclass Program\n\t{\n\t\tpublic static void Main (string[] args)\n\t\t{\n\t\t\tusing (var client = new ImapClient ()) {\n\t\t\t\tclient.Connect (\"imap.friends.com\", 993, true);\n\n\t\t\t\tclient.Authenticate (\"joey\", \"password\");\n\n\t\t\t\t// The Inbox folder is always available on all IMAP servers...\n\t\t\t\tvar inbox = client.Inbox;\n\t\t\t\tinbox.Open (FolderAccess.ReadOnly);\n\n\t\t\t\tConsole.WriteLine (\"Total messages: {0}\", inbox.Count);\n\t\t\t\tConsole.WriteLine (\"Recent messages: {0}\", inbox.Recent);\n\n\t\t\t\tfor (int i = 0; i < inbox.Count; i++) {\n\t\t\t\t\tvar message = inbox.GetMessage (i);\n\t\t\t\t\tConsole.WriteLine (\"Subject: {0}\", message.Subject);\n\t\t\t\t}\n\n\t\t\t\tclient.Disconnect (true);\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\n### Fetching Information About the Messages in an IMAP Folder\n\nOne of the advantages of IMAP over POP3 is that the IMAP protocol allows clients to retrieve information about\nthe messages in a folder without having to first download all of them.\n\nUsing the [Fetch](http://www.mimekit.net/docs/html/Overload_MailKit_Net_Imap_ImapFolder_Fetch.htm) method overloads,\nit's possible to obtain any subset of summary information for any range of messages in a given folder.\n\n```csharp\nforeach (var summary in inbox.Fetch (0, -1, MessageSummaryItems.Full)) {\n\tConsole.WriteLine (\"[summary] {0:D2}: {1}\", summary.Index, summary.Envelope.Subject);\n}\n```\n\nThe results of a Fetch method can also be used to download individual MIME parts rather\nthan downloading the entire message. For example:\n\n```csharp\nforeach (var summary in inbox.Fetch (0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure)) {\n    if (summary.TextBody != null) {\n\t// this will download *just* the text/plain part\n\tvar text = inbox.GetBodyPart (summary.UniqueId, summary.TextBody);\n    }\n    \n    if (summary.HtmlBody != null) {\n        // this will download *just* the text/html part\n\tvar html = inbox.GetBodyPart (summary.UniqueId, summary.HtmlBody);\n    }\n    \n    // if you'd rather grab, say, an image attachment... it might look something like this:\n    if (summary.Body is BodyPartMultipart) {\n        var multipart = (BodyPartMultipart) summary.Body;\n        \n        var attachment = multipart.BodyParts.OfType<BodyPartBasic> ().FirstOrDefault (x => x.FileName == \"logo.jpg\");\n        if (attachment != null) {\n            // this will download *just* the attachment\n            var part = inbox.GetBodyPart (summary.UniqueId, attachment);\n        }\n    }\n}\n```\n\n### Setting Message Flags in IMAP\n\nIn order to set or update the flags on a particular message, what is actually needed is the UID or index of the message and\nthe folder that it belongs to.\n\nAn obvious reason to want to update message flags is to mark a message as \"read\" (aka \"seen\") after a user has opened a\nmessage and read it.\n\n```csharp\nfolder.Store (uid, new StoreFlagsRequest (StoreAction.Add, MessageFlags.Seen) { Silent = true });\n```\n\n### Deleting Messages in IMAP\n\nDeleting messages in IMAP involves setting a `\\Deleted` flag on a message and, optionally, expunging it from the folder.\n\nThe way to mark a message as `\\Deleted` works the same way as marking a message as `\\Seen`.\n\n```csharp\nfolder.Store (uid, new StoreFlagsRequest (StoreAction.Add, MessageFlags.Deleted) { Silent = true });\nfolder.Expunge ();\n```\n\n### Searching an IMAP Folder\n\nYou may also be interested in sorting and searching...\n\n```csharp\n// let's search for all messages received after Jan 12, 2013 with \"MailKit\" in the subject...\nvar query = SearchQuery.DeliveredAfter (DateTime.Parse (\"2013-01-12\"))\n    .And (SearchQuery.SubjectContains (\"MailKit\")).And (SearchQuery.Seen);\n\nforeach (var uid in inbox.Search (query)) {\n\tvar message = inbox.GetMessage (uid);\n\tConsole.WriteLine (\"[match] {0}: {1}\", uid, message.Subject);\n}\n\n// let's do the same search, but this time sort them in reverse arrival order\nvar orderBy = new [] { OrderBy.ReverseArrival };\nforeach (var uid in inbox.Sort (query, orderBy)) {\n\tvar message = inbox.GetMessage (uid);\n\tConsole.WriteLine (\"[match] {0}: {1}\", uid, message.Subject);\n}\n\n// you'll notice that the orderBy argument is an array... this is because you\n// can actually sort the search results based on multiple columns:\norderBy = new [] { OrderBy.ReverseArrival, OrderBy.Subject };\nforeach (var uid in inbox.Sort (query, orderBy)) {\n\tvar message = inbox.GetMessage (uid);\n\tConsole.WriteLine (\"[match] {0}: {1}\", uid, message.Subject);\n}\n```\n\nOf course, instead of downloading the message, you could also fetch the summary information for the matching messages\nor do any of a number of other things with the UIDs that are returned.\n\n### Navigating Folders in IMAP\n\nHow about navigating folders? MailKit can do that, too:\n\n```csharp\n// Get the first personal namespace and list the toplevel folders under it.\nvar personal = client.GetFolder (client.PersonalNamespaces[0]);\nforeach (var folder in personal.GetSubfolders (false))\n\tConsole.WriteLine (\"[folder] {0}\", folder.Name);\n```\n\nIf the IMAP server supports the SPECIAL-USE or the XLIST (GMail) extension, you can get a hold of\nthe pre-defined All, Drafts, Flagged (aka Important), Junk, Sent, Trash, etc folders like this:\n\n```csharp\nif ((client.Capabilities & (ImapCapabilities.SpecialUse | ImapCapabilities.XList)) != 0) {\n\tvar drafts = client.GetFolder (SpecialFolder.Drafts);\n} else {\n\t// maybe check the user's preferences for the Drafts folder?\n}\n```\n\nIn cases where the IMAP server does *not* support the SPECIAL-USE or XLIST extensions, you'll have to\ncome up with your own heuristics for getting the Sent, Drafts, Trash, etc folders. For example, you\nmight use logic similar to this:\n\n```csharp\nstatic string[] CommonSentFolderNames = { \"Sent Items\", \"Sent Mail\", \"Sent Messages\", /* maybe add some translated names */ };\n\nstatic IFolder GetSentFolder (ImapClient client, CancellationToken cancellationToken)\n{\n    var personal = client.GetFolder (client.PersonalNamespaces[0]);\n\n    foreach (var folder in personal.GetSubfolders (false, cancellationToken)) {\n        foreach (var name in CommonSentFolderNames) {\n            if (folder.Name == name)\n                return folder;\n        }\n    }\n\n    return null;\n}\n```\n\nUsing LINQ, you could simplify this down to something more like this:\n\n```csharp\nstatic string[] CommonSentFolderNames = { \"Sent Items\", \"Sent Mail\", \"Sent Messages\", /* maybe add some translated names */ };\n\nstatic IFolder GetSentFolder (ImapClient client, CancellationToken cancellationToken)\n{\n    var personal = client.GetFolder (client.PersonalNamespaces[0]);\n    \n    return personal.GetSubfolders (false, cancellationToken).FirstOrDefault (x => CommonSentFolderNames.Contains (x.Name));\n}\n```\n\nAnother option might be to allow the user of your application to configure which folder he or she wants to use as their\nSent folder, Drafts folder, Trash folder, etc.\n\nHow you handle this is up to you.\n\n## Donate\n\nMailKit is a personal open source project that I have put thousands of hours into perfecting with the\ngoal of making it the very best email framework for .NET. I need your help to achieve this.\n\nDonating helps pay for things such as web hosting, domain registration and licenses for developer tools\nsuch as a performance profiler, memory profiler, a static code analysis tool, and more. It also helps\nmotivate me to continue working on the project.\n\n<a href=\"https://github.com/sponsors/jstedfast\" _target=\"blank\"><img alt=\"Click here to lend your support to MailKit by making a donation!\" src=\"https://www.paypal.com/en_US/i/btn/x-click-but21.gif\"></a>\n\n## Reporting Bugs\n\nHave a bug or a feature request? Please open a new\n[bug report](https://github.com/jstedfast/MailKit/issues/new?template=bug_report.md)\nor\n[feature request](https://github.com/jstedfast/MailKit/issues/new?template=feature_request.md).\n\nBefore opening a new issue, please search through any [existing issues](https://github.com/jstedfast/MailKit/issues)\nto avoid submitting duplicates. It may also be worth checking the\n[FAQ](https://github.com/jstedfast/MailKit/blob/master/FAQ.md) for common questions that other developers\nhave had.\n\nIf MailKit does not work with your mail server, please include a [protocol\nlog](https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog) in your bug report, otherwise\nthere is nothing I can do to fix the problem.\n\nIf you are getting an exception from somewhere within MailKit, don't just provide the `Exception.Message`\nstring. Please include the `Exception.StackTrace` as well. The `Message`, by itself, is often useless.\n\n## Documentation\n\nAPI documentation can be found at [http://mimekit.net/docs](http://mimekit.net/docs).\n\nA copy of the xml formatted API documentation is also included in the NuGet and/or\nXamarin Component package.\n"
  },
  {
    "path": "nuget/MailKit.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd\">\n  <metadata minClientVersion=\"2.12\">\n    <id>MailKit</id>\n    <version>4.15.1</version>\n    <title>MailKit</title>\n    <authors>Jeffrey Stedfast</authors>\n    <owners>Jeffrey Stedfast</owners>\n    <license type=\"expression\">MIT</license>\n    <projectUrl>http://www.mimekit.net</projectUrl>\n    <repository type=\"git\" url=\"https://github.com/jstedfast/MailKit\" />\n    <icon>icons\\mailkit-50.png</icon>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>MailKit is an Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices.\n\nFeatures include:\n* HTTP, Socks4, Socks4a and Socks5 proxy support.\n* SASL Authentication via ANONYMOUS, CRAM-MD5, DIGEST-MD5, LOGIN, NTLM, OAUTHBEARER, PLAIN, SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-512 and XOAUTH2.\n* A fully-cancellable SmtpClient with support for STARTTLS, 8BITMIME, BINARYMIME, ENHANCEDSTATUSCODES, SIZE, DSN, PIPELINING and SMTPUTF8.\n* A fully-cancellable Pop3Client with support for STLS, UIDL, APOP, PIPELINING, UTF8, and LANG.\n* A fully-cancellable ImapClient with support for ACL, QUOTA, LITERAL+, IDLE, NAMESPACE, ID, CHILDREN, LOGINDISABLED, STARTTLS, MULTIAPPEND, UNSELECT, UIDPLUS, CONDSTORE, ESEARCH, SASL-IR, COMPRESS, WITHIN, ENABLE, QRESYNC, SORT, THREAD, ANNOTATE, LIST-EXTENDED, ESORT, METADATA / METADATA-SERVER, NOTIFY, FILTERS, LIST-STATUS, SORT=DISPLAY, SPECIAL-USE / CREATE-SPECIAL-USE, SEARCH=FUZZY, MOVE, UTF8=ACCEPT / UTF8=ONLY, LITERAL-, APPENDLIMIT, STATUS=SIZE, OBJECTID, REPLACE, SAVEDATE, XLIST, and X-GM-EXT1.\n* Client-side sorting and threading of messages (the Ordinal Subject and the Jamie Zawinski threading algorithms are supported).\n* Asynchronous versions of all methods that hit the network.\n* S/MIME, OpenPGP, DKIM and ARC support via MimeKit.\n* Microsoft TNEF support via MimeKit.\n    </description>\n    <summary>An Open Source .NET mail-client library for Windows, Mac, Linux, and mobile platforms such as iOS and Android.</summary>\n    <releaseNotes>\n* SECURITY: Bumped MimeKit to 4.15.1 for a security fix that prevents mailbox addresses from being allowed to contain CRLF sequences which can be used to inject SMTP commands in the SmtpClient when it sends `MAIL FROM` or `RCPT TO` commands.\n    </releaseNotes>\n    <copyright>.NET Foundation and Contributors</copyright>\n    <language>en-US</language>\n    <tags>smtp pop3 imap mime security arc dkim smime s/mime openpgp pgp mbox mail email parser tnef</tags>\n    <readme>docs\\README.md</readme>\n    <frameworkAssemblies>\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.5.2\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.5.2\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.5.2\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.5.2\" />\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.6.1\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.6.1\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.6.1\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.6.1\" />\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.8\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.8\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.8\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.8\" />\n    </frameworkAssemblies>\n    <dependencies>\n      <group targetFramework=\"net462\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net47\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net48\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net8.0\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net10.0\">\n        <dependency id=\"System.Formats.Asn1\" version=\"10.0.2\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"netstandard2.0\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"netstandard2.1\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"MimeKit\" version=\"4.15.1\" />\n      </group>\n    </dependencies>\n  </metadata>\n  <files>\n    <file src=\"..\\FAQ.md\" target=\"docs\\FAQ.md\" />\n    <file src=\"..\\README.md\" target=\"docs\\README.md\" />\n    <file src=\"..\\ExchangeOAuth2.md\" target=\"docs\\ExchangeOAuth2.md\" />\n    <file src=\"..\\GMailOAuth2.md\" target=\"docs\\GMailOAuth2.md\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKit.dll\" target=\"lib\\netstandard2.0\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKit.pdb\" target=\"lib\\netstandard2.0\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKit.xml\" target=\"lib\\netstandard2.0\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKit.dll.config\" target=\"lib\\netstandard2.0\\MailKit.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKit.dll\" target=\"lib\\netstandard2.1\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKit.pdb\" target=\"lib\\netstandard2.1\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKit.xml\" target=\"lib\\netstandard2.1\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKit.dll.config\" target=\"lib\\netstandard2.1\\MailKit.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKit.dll\" target=\"lib\\net462\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKit.pdb\" target=\"lib\\net462\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKit.xml\" target=\"lib\\net462\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKit.dll.config\" target=\"lib\\net462\\MailKit.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKit.dll\" target=\"lib\\net47\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKit.pdb\" target=\"lib\\net47\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKit.xml\" target=\"lib\\net47\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKit.dll.config\" target=\"lib\\net47\\MailKit.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKit.dll\" target=\"lib\\net48\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKit.pdb\" target=\"lib\\net48\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKit.xml\" target=\"lib\\net48\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKit.dll.config\" target=\"lib\\net48\\MailKit.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKit.dll\" target=\"lib\\net8.0\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKit.pdb\" target=\"lib\\net8.0\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKit.xml\" target=\"lib\\net8.0\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKit.dll.config\" target=\"lib\\net8.0\\MailKit.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKit.dll\" target=\"lib\\net10.0\\MailKit.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKit.pdb\" target=\"lib\\net10.0\\MailKit.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKit.xml\" target=\"lib\\net10.0\\MailKit.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKit.dll.config\" target=\"lib\\net10.0\\MailKit.dll.config\" />\n    <file src=\"mailkit-50.png\" target=\"icons\\mailkit-50.png\" />\n  </files>\n</package>\n"
  },
  {
    "path": "nuget/MailKitLite.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd\">\n  <metadata minClientVersion=\"2.12\">\n    <id>MailKitLite</id>\n    <version>4.15.1</version>\n    <title>MailKit</title>\n    <authors>Jeffrey Stedfast</authors>\n    <owners>Jeffrey Stedfast</owners>\n    <license type=\"expression\">MIT</license>\n    <projectUrl>http://www.mimekit.net</projectUrl>\n    <repository type=\"git\" url=\"https://github.com/jstedfast/MailKit\" />\n    <icon>icons\\mailkit-50.png</icon>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>MailKit is an Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices.\n\nFeatures include:\n* HTTP, Socks4, Socks4a and Socks5 proxy support.\n* SASL Authentication via ANONYMOUS, CRAM-MD5, DIGEST-MD5, LOGIN, NTLM, OAUTHBEARER, PLAIN, SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-512 and XOAUTH2.\n* A fully-cancellable SmtpClient with support for STARTTLS, 8BITMIME, BINARYMIME, ENHANCEDSTATUSCODES, SIZE, DSN, PIPELINING and SMTPUTF8.\n* A fully-cancellable Pop3Client with support for STLS, UIDL, APOP, PIPELINING, UTF8, and LANG.\n* A fully-cancellable ImapClient with support for ACL, QUOTA, LITERAL+, IDLE, NAMESPACE, ID, CHILDREN, LOGINDISABLED, STARTTLS, MULTIAPPEND, UNSELECT, UIDPLUS, CONDSTORE, ESEARCH, SASL-IR, COMPRESS, WITHIN, ENABLE, QRESYNC, SORT, THREAD, ANNOTATE, LIST-EXTENDED, ESORT, METADATA / METADATA-SERVER, NOTIFY, FILTERS, LIST-STATUS, SORT=DISPLAY, SPECIAL-USE / CREATE-SPECIAL-USE, SEARCH=FUZZY, MOVE, UTF8=ACCEPT / UTF8=ONLY, LITERAL-, APPENDLIMIT, STATUS=SIZE, OBJECTID, REPLACE, SAVEDATE, XLIST, and X-GM-EXT1.\n* Client-side sorting and threading of messages (the Ordinal Subject and the Jamie Zawinski threading algorithms are supported).\n* Asynchronous versions of all methods that hit the network.\n* S/MIME, OpenPGP, DKIM and ARC support via MimeKit.\n* Microsoft TNEF support via MimeKit.\n    </description>\n    <summary>An Open Source .NET mail-client library for Windows, Mac, Linux, and mobile platforms such as iOS and Android.</summary>\n    <releaseNotes>\n* SECURITY: Bumped MimeKit to 4.15.1 for a security fix that prevents mailbox addresses from being allowed to contain CRLF sequences which can be used to inject SMTP commands in the SmtpClient when it sends `MAIL FROM` or `RCPT TO` commands.\n    </releaseNotes>\n    <copyright>.NET Foundation and Contributors</copyright>\n    <language>en-US</language>\n    <tags>smtp pop3 imap mime security arc dkim smime s/mime openpgp pgp mbox mail email parser tnef</tags>\n    <readme>docs\\README.md</readme>\n    <frameworkAssemblies>\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.6.2\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.6.2\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.6.2\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.6.2\" />\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.7\" />\n      <frameworkAssembly assemblyName=\"System\" targetFramework=\".NETFramework4.8\" />\n      <frameworkAssembly assemblyName=\"System.Core\" targetFramework=\".NETFramework4.8\" />\n      <frameworkAssembly assemblyName=\"System.Data\" targetFramework=\".NETFramework4.8\" />\n      <frameworkAssembly assemblyName=\"System.Net.Http\" targetFramework=\".NETFramework4.8\" />\n    </frameworkAssemblies>\n    <dependencies>\n      <group targetFramework=\"net462\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net47\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net48\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net8.0\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"net10.0\">\n        <dependency id=\"System.Formats.Asn1\" version=\"10.0.2\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"netstandard2.0\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"System.Threading.Tasks.Extensions\" version=\"4.6.0\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n      <group targetFramework=\"netstandard2.1\">\n        <dependency id=\"System.Formats.Asn1\" version=\"8.0.1\" />\n        <dependency id=\"MimeKitLite\" version=\"4.15.1\" />\n      </group>\n    </dependencies>\n  </metadata>\n  <files>\n    <file src=\"..\\FAQ.md\" target=\"docs\\FAQ.md\" />\n    <file src=\"..\\README.md\" target=\"docs\\README.md\" />\n    <file src=\"..\\ExchangeOAuth2.md\" target=\"docs\\ExchangeOAuth2.md\" />\n    <file src=\"..\\GMailOAuth2.md\" target=\"docs\\GMailOAuth2.md\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKitLite.dll\" target=\"lib\\netstandard2.0\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKitLite.pdb\" target=\"lib\\netstandard2.0\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKitLite.xml\" target=\"lib\\netstandard2.0\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.0\\MailKitLite.dll.config\" target=\"lib\\netstandard2.0\\MailKitLite.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKitLite.dll\" target=\"lib\\netstandard2.1\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKitLite.pdb\" target=\"lib\\netstandard2.1\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKitLite.xml\" target=\"lib\\netstandard2.1\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\netstandard2.1\\MailKitLite.dll.config\" target=\"lib\\netstandard2.1\\MailKitLite.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKitLite.dll\" target=\"lib\\net462\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKitLite.pdb\" target=\"lib\\net462\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKitLite.xml\" target=\"lib\\net462\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net462\\MailKitLite.dll.config\" target=\"lib\\net462\\MailKitLite.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKitLite.dll\" target=\"lib\\net47\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKitLite.pdb\" target=\"lib\\net47\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKitLite.xml\" target=\"lib\\net47\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net47\\MailKitLite.dll.config\" target=\"lib\\net47\\MailKitLite.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKitLite.dll\" target=\"lib\\net48\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKitLite.pdb\" target=\"lib\\net48\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKitLite.xml\" target=\"lib\\net48\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net48\\MailKitLite.dll.config\" target=\"lib\\net48\\MailKitLite.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKitLite.dll\" target=\"lib\\net8.0\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKitLite.pdb\" target=\"lib\\net8.0\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKitLite.xml\" target=\"lib\\net8.0\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net8.0\\MailKitLite.dll.config\" target=\"lib\\net8.0\\MailKitLite.dll.config\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKitLite.dll\" target=\"lib\\net10.0\\MailKitLite.dll\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKitLite.pdb\" target=\"lib\\net10.0\\MailKitLite.pdb\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKitLite.xml\" target=\"lib\\net10.0\\MailKitLite.xml\" />\n    <file src=\"..\\MailKit\\bin\\Release\\net10.0\\MailKitLite.dll.config\" target=\"lib\\net10.0\\MailKitLite.dll.config\" />\n    <file src=\"mailkit-50.png\" target=\"icons\\mailkit-50.png\" />\n  </files>\n</package>\n"
  },
  {
    "path": "rfc/SOCKS4.protocol",
    "content": "\tSOCKS: A protocol for TCP proxy across firewalls\n\n\t\t\tYing-Da Lee\n\t\tyingda@best.com  or  yingda@esd.sgi.com\n\nSOCKS was originally developed by David Koblas and subsequently modified\nand extended by me to its current running version -- version 4. It is a\nprotocol that relays TCP sessions at a firewall host to allow application\nusers transparent access across the firewall. Because the protocol is\nindependent of application protocols, it can be (and has been) used for\nmany different services, such as telnet, ftp, finger, whois, gopher, WWW,\netc. Access control can be applied at the beginning of each TCP session;\nthereafter the server simply relays the data between the client and the\napplication server, incurring minimum processing overhead. Since SOCKS\nnever has to know anything about the application protocol, it should also\nbe easy for it to accommodate applications which use encryption to protect\ntheir traffic from nosey snoopers.\n\nTwo operations are defined: CONNECT and BIND.\n\n1) CONNECT\n\nThe client connects to the SOCKS server and sends a CONNECT request when\nit wants to establish a connection to an application server. The client\nincludes in the request packet the IP address and the port number of the\ndestination host, and userid, in the following format.\n\n\t\t+----+----+----+----+----+----+----+----+----+----+....+----+\n\t\t| VN | CD | DSTPORT |      DSTIP        | USERID       |NULL|\n\t\t+----+----+----+----+----+----+----+----+----+----+....+----+\n # of bytes:\t   1    1      2              4           variable       1\n\nVN is the SOCKS protocol version number and should be 4. CD is the\nSOCKS command code and should be 1 for CONNECT request. NULL is a byte\nof all zero bits.\n\nThe SOCKS server checks to see whether such a request should be granted\nbased on any combination of source IP address, destination IP address,\ndestination port number, the userid, and information it may obtain by\nconsulting IDENT, cf. RFC 1413.  If the request is granted, the SOCKS\nserver makes a connection to the specified port of the destination host.\nA reply packet is sent to the client when this connection is established,\nor when the request is rejected or the operation fails. \n\n\t\t+----+----+----+----+----+----+----+----+\n\t\t| VN | CD | DSTPORT |      DSTIP        |\n\t\t+----+----+----+----+----+----+----+----+\n # of bytes:\t   1    1      2              4\n\nVN is the version of the reply code and should be 0. CD is the result\ncode with one of the following values:\n\n\t90: request granted\n\t91: request rejected or failed\n\t92: request rejected becasue SOCKS server cannot connect to\n\t    identd on the client\n\t93: request rejected because the client program and identd\n\t    report different user-ids\n\nThe remaining fields are ignored.\n\nThe SOCKS server closes its connection immediately after notifying\nthe client of a failed or rejected request. For a successful request,\nthe SOCKS server gets ready to relay traffic on both directions. This\nenables the client to do I/O on its connection as if it were directly\nconnected to the application server.\n\n\n2) BIND\n\nThe client connects to the SOCKS server and sends a BIND request when\nit wants to prepare for an inbound connection from an application server.\nThis should only happen after a primary connection to the application\nserver has been established with a CONNECT.  Typically, this is part of\nthe sequence of actions:\n\n-bind(): obtain a socket\n-getsockname(): get the IP address and port number of the socket\n-listen(): ready to accept call from the application server\n-use the primary connection to inform the application server of\n the IP address and the port number that it should connect to.\n-accept(): accept a connection from the application server\n\nThe purpose of SOCKS BIND operation is to support such a sequence\nbut using a socket on the SOCKS server rather than on the client.\n\nThe client includes in the request packet the IP address of the\napplication server, the destination port used in the primary connection,\nand the userid.\n\n\t\t+----+----+----+----+----+----+----+----+----+----+....+----+\n\t\t| VN | CD | DSTPORT |      DSTIP        | USERID       |NULL|\n\t\t+----+----+----+----+----+----+----+----+----+----+....+----+\n # of bytes:\t   1    1      2              4           variable       1\n\nVN is again 4 for the SOCKS protocol version number. CD must be 2 to\nindicate BIND request.\n\nThe SOCKS server uses the client information to decide whether the\nrequest is to be granted. The reply it sends back to the client has\nthe same format as the reply for CONNECT request, i.e.,\n\n\t\t+----+----+----+----+----+----+----+----+\n\t\t| VN | CD | DSTPORT |      DSTIP        |\n\t\t+----+----+----+----+----+----+----+----+\n # of bytes:\t   1    1      2              4\n\nVN is the version of the reply code and should be 0. CD is the result\ncode with one of the following values:\n\n\t90: request granted\n\t91: request rejected or failed\n\t92: request rejected becasue SOCKS server cannot connect to\n\t    identd on the client\n\t93: request rejected because the client program and identd\n\t    report different user-ids.\n\nHowever, for a granted request (CD is 90), the DSTPORT and DSTIP fields\nare meaningful.  In that case, the SOCKS server obtains a socket to wait\nfor an incoming connection and sends the port number and the IP address\nof that socket to the client in DSTPORT and DSTIP, respectively. If the\nDSTIP in the reply is 0 (the value of constant INADDR_ANY), then the\nclient should replace it with the IP address of the SOCKS server to which\nthe cleint is connected. (This happens if the SOCKS server is not a\nmulti-homed host.)  In the typical scenario, these two numbers are\nmade available to the application client prgram via the result of the\nsubsequent getsockname() call.  The application protocol must provide a\nway for these two pieces of information to be sent from the client to\nthe application server so that it can initiate the connection, which\nconnects it to the SOCKS server rather than directly to the application\nclient as it normally would.\n\nThe SOCKS server sends a second reply packet to the client when the\nanticipated connection from the application server is established.\nThe SOCKS server checks the IP address of the originating host against\nthe value of DSTIP specified in the client's BIND request.  If a mismatch\nis found, the CD field in the second reply is set to 91 and the SOCKS\nserver closes both connections.  If the two match, CD in the second\nreply is set to 90 and the SOCKS server gets ready to relay the traffic\non its two connections. From then on the client does I/O on its connection\nto the SOCKS server as if it were directly connected to the application\nserver.\n\n\n\nFor both CONNECT and BIND operations, the server sets a time limit\n(2 minutes in current CSTC implementation) for the establishment of its\nconnection with the application server. If the connection is still not\nestabliched when the time limit expires, the server closes its connection\nto the client and gives up.\n"
  },
  {
    "path": "rfc/draft-murchison-sasl-login-00.txt",
    "content": "\n\n\n\n\n\n\nInternet Draft                                               K. Murchison\nCategory: Informational                                        M. Crispin\nExpires: March 2, 2004                                     28 August 2003\n\n\n                          The LOGIN SASL Mechanism\n\n                     <draft-murchison-sasl-login-00.txt>\n\n\nStatus of this Memo\n\n    This document is an Internet-Draft and is subject to all provisions\n    of Section 10 of RFC2026.\n\n    Internet-Drafts are working documents of the Internet Engineering\n    Task Force (IETF), its areas, and its working groups.  Note that\n    other groups may also distribute working documents as\n    Internet-Drafts.\n\n    Internet-Drafts are draft documents valid for a maximum of six months\n    and may be updated, replaced, or obsoleted by other documents at any\n    time.  It is inappropriate to use Internet-Drafts as reference\n    material or to cite them other than as \"work in progress.\"\n\n    The list of current Internet-Drafts can be accessed at\n    http://www.ietf.org/1id-abstracts.html\n\n    The list of Internet-Draft Shadow Directories can be accessed at\n    http://www.ietf.org/shadow.html\n\n\nCopyright Notice\n\n    Copyright (C) The Internet Society 2003. All Rights Reserved.\n\n\nAbstract\n\n    This document documents the obsolete clear-text user/password Simple\n    Authentication and Security Layer (SASL) mechanism called the LOGIN\n    mechanism.  The LOGIN mechanism was intended to be used, in\n    combination with data confidentiality services provided by a lower\n    layer, in protocols which lack a simple password authentication\n    command.\n\n\n\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 1]\n\f\nInternet Draft            LOGIN SASL Mechanism           August 28, 2004\n\n\n\nConventions Used in the Document\n\n    The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n    \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n    document are to be interpreted as described in [KEYWORDS].\n\n\n1.  Background and Intended Usage\n\n    This document documents the obsolete LOGIN Simple Authentication and\n    Security Layer ([SASL]) mechanism which was in use in protocols with\n    no clear-text login command (e.g., [SMTP-AUTH]).\n\n    Note: The LOGIN SASL mechanism is obsoleted in favor of the PLAIN\n    SASL mechanism ([PLAIN]).  The LOGIN mechanism is documented here\n    only for the purpose of backwards compatibility with legacy software.\n    Clients SHOULD implement the PLAIN SASL mechanism and use it whenever\n    offered by a server.  The LOGIN SASL mechanism SHOULD NOT be used by\n    a client when other plaintext mechanisms are offered by a server.\n\n    The name associated with this mechanism is \"LOGIN\".\n\n    The LOGIN SASL mechanism does not provide a security layer.  This\n    mechanism MUST NOT be used without adequate security protection as\n    the mechanism affords no integrity nor confidentiality protection\n    itself.  The LOGIN SASL mechanism MUST NOT be advertised or used in\n    any configuration that prohibits the PLAIN mechanism or plaintext\n    LOGIN (or USER/PASS) command that sends passwords in the clear.\n\n\n2.  LOGIN SASL Mechanism\n\n    The authorization identity is the same string as the \"username\" in\n    the traditional (non-SASL) LOGIN or USER commands; the authorization\n    authenticator is the same string as the traditional \"password\".  The\n    authentication identity is the same as the authorization identity in\n    this mechanism.\n\n    Only US-ASCII printable characters SHOULD be used in the username and\n    password to permit maximal interoperability.  If non-US-ASCII\n    characters are used in a username, they MUST use UTF-8.  Passwords\n    MAY contain arbitrary binary data excluding NUL, CR and LF\n    characters.  However, if a password is supplied to the client as a\n    sequence of characters (e.g., a password dialog box), those\n    characters MUST be encoded as UTF-8.\n\n    The username MUST be less than 64 characters in length.\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 2]\n\f\nInternet Draft            LOGIN SASL Mechanism           August 28, 2004\n\n\n2.1.  Client side of authentication protocol exchange\n\n    The client expects the server to issue a challenge.  The client then\n    responds with the authorization identity.  The client then expects\n    the server to issue a second challenge.  The client then responds\n    with the authorization authenticator.  The contents of both\n    challenges SHOULD be ignored.\n\n\n2.2.  Server side of authentication protocol exchange\n\n    The server issues the string \"User Name\" in challenge, and receives a\n    client response.  This response is recorded as the authorization\n    identity.  The server then issues the string \"Password\" in challenge,\n    and receives a client response.  This response is recorded as the\n    authorization authenticator.  The server must verify that the\n    authorization authenticator permits login as the authorization\n    identity.\n\n    Note: There is at least one widely deployed client which requires\n    that the challenge strings transmitted by the server be \"Username:\"\n    and \"Password:\" respectively.  For this reason, server\n    implementations MAY send these challenge strings instead of those\n    listed above.\n\n\n2.3.  Example\n\n    This example shows the use of the LOGIN mechanism with the SMTP AUTH\n    command [SMTP-AUTH] under the protection of SMTP STARTTLS [SMTP-TLS].\n    The user name is \"tim\" and the password is \"tanstaaftanstaaf\".  The\n    base64 encoding of the challenges and responses is part of the SMTP\n    AUTH command, not part of the LOGIN specification itself.  \"C:\" and\n    \"S:\" indicate lines sent by the client and server respectively.\n\n    S: 220 smtp.example.com ESMTP server ready\n    C: EHLO test.example.com\n    S: 250-smtp.example.com\n    S: 250-STARTTLS\n    S: 250 AUTH CRAM-MD5\n    C: STARTTLS\n    S: 220 Ready to start TLS\n    <TLS negotiation, further commands are under TLS layer>\n    C: EHLO test.example.com\n    S: 250-smtp.example.com\n    S: 250 AUTH LOGIN CRAM-MD5\n    C: AUTH LOGIN\n    S: 334 VXNlciBOYW1lAA==\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 3]\n\f\nInternet Draft            LOGIN SASL Mechanism           August 28, 2004\n\n\n    C: dGlt\n    S: 334 UGFzc3dvcmQA\n    C: dGFuc3RhYWZ0YW5zdGFhZg==\n    S: 235 Authentication successful.\n\n\n3.\n    Security Considerations\n\n    The LOGIN mechanism relies upon an underlying encryption layer or\n    other secure channel for security.  When used without an encryption\n    layer or secure channel, it is vulnerable to a common network\n    eavesdropping attack.  Therefore the LOGIN mechanism MUST NOT be\n    advertised or used in any configuration that prohibits the PLAIN\n    mechanism or a plaintext LOGIN (or USER/PASS) command that sends\n    passwords in the clear.\n\n\n4.\n    IANA Considerations\n\n    The registration for the LOGIN SASL mechanism follows:\n\n    SASL mechanism name: LOGIN\n    Security Considerations: See section 3 of this memo\n    Published specification: this memo\n    Person & email address to contact for futher information:\n        See section 7 of this memo\n    Intended usage: OBSOLETE\n    Owner/Change controller: See section 7 of this memo\n\n\n5.\n    References\n\n\n5.1.\n    Normative References\n\n\n     [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n         Requirement Levels\", Harvard University, RFC 2119, March 1997.\n\n\n     [SASL] Melnikov, A., Ed., \"Simple Authentication and Security Layer\n         (SASL)\", Isode, draft-ietf-sasl-rfc2222bis-xx.txt, Work In\n         Progress.\n\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 4]\n\f\nInternet Draft            LOGIN SASL Mechanism           August 28, 2004\n\n\n5.2.  Informative References\n\n\n     [PLAIN] Zeilenga, Kurt D., Ed., \"The Plain SASL Mechanism\",\n         OpenLDAP Foundation, draft-ietf-sasl-plain-xx.txt, Work In\n         Progress.\n\n\n     [SMTP-AUTH] Myers, J., \"SMTP Service Extension for Authentication\",\n         Netscape Communications, RFC 2554, March 1999.\n\n\n     [SMTP-TLS] Hoffman, P., \"SMTP Service Extension for Secure SMTP\n         over Transport Layer Security\", Internet Mail Consortium, RFC\n         3207, February 2002.\n\n\n\n6.  Acknowledgments\n\n    Thanks to Rob Siemborski for his input and feedback on this document.\n\n\n7.\n    Author's Address\n\n    Kenneth Murchison\n    Oceana Matrix Ltd.\n    21 Princeton Place\n    Orchard Park, NY  14127\n\n    Phone: (716) 662-8973\n\n    EMail: ken@oceana.com\n\n\n\n\n    Mark R. Crispin\n    Networks and Distributed Computing\n    University of Washington\n    4545 15th Avenue NE\n    Seattle, WA  98105-4527\n\n    Phone: (206) 543-5762\n\n    EMail: MRC@CAC.Washington.EDU\n\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 5]\n\f\nInternet Draft            LOGIN SASL Mechanism           August 28, 2004\n\n\n8.\n    Intellectual Property Considerations\n\n    The IETF takes no position regarding the validity or scope of any\n    intellectual property or other rights that might be claimed to\n    pertain to the implementation or use of the technology described in\n    this document or the extent to which any license under such rights\n    might or might not be available; neither does it represent that it has\n    made any effort to identify any such rights.  Information on the\n    IETF's procedures with respect to rights in standards-track and\n    standards-related documentation can be found in BCP-11.  Copies of\n    claims of rights made available for publication and any assurances of\n    licenses to be made available, or the result of an attempt made to\n    obtain a general license or permission for the use of such proprietary\n    rights by implementors or users of this specification can be obtained\n    from the IETF Secretariat.\n\n    The IETF invites any interested party to bring to its attention any\n    copyrights, patents or patent applications, or other proprietary\n    rights which may cover technology that may be required to practice\n    this standard.  Please address the information to the IETF Executive\n    Director.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 6]\n\f\nInternet Draft            LOGIN SASL Mechanism           August 28, 2004\n\n\n9.\n    Full Copyright Statement\n\n    Copyright (C) The Internet Society 2003. All Rights Reserved.\n\n    This document and translations of it may be copied and furnished to\n    others, and derivative works that comment on or otherwise explain it\n    or assist in its implmentation may be prepared, copied, published and\n    distributed, in whole or in part, without restriction of any kind,\n    provided that the above copyright notice and this paragraph are\n    included on all such copies and derivative works.  However, this\n    document itself may not be modified in any way, such as by removing\n    the copyright notice or references to the Internet Society or other\n    Internet organizations, except as needed for the  purpose of\n    developing Internet standards in which case the procedures for\n    copyrights defined in the Internet Standards process must be followed,\n    or as required to translate it into languages other than English.\n\n    The limited permissions granted above are perpetual and will not be\n    revoked by the Internet Society or its successors or assigns.\n\n    This document and the information contained herein is provided on an\n    \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET\n    ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,\n    INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n    INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nExpires: March 2, 2004        Murchison                         [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc0821.txt",
    "content": "\n                                                                        \n\n   RFC 821\n                                    \n                                    \n                                    \n                                    \n                                    \n                     SIMPLE MAIL TRANSFER PROTOCOL\n                                    \n                                    \n                                    \n                           Jonathan B. Postel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                              August 1982\n                                    \n                                    \n                                    \n                     Information Sciences Institute\n                   University of Southern California\n                           4676 Admiralty Way\n                   Marina del Rey, California  90291\n\n                             (213) 822-1511\n\f\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n                           TABLE OF CONTENTS\n\n   1.  INTRODUCTION .................................................. 1\n\n   2.  THE SMTP MODEL ................................................ 2\n\n   3.  THE SMTP PROCEDURE ............................................ 4\n\n      3.1.  Mail ..................................................... 4\n      3.2.  Forwarding ............................................... 7\n      3.3.  Verifying and Expanding .................................. 8\n      3.4.  Sending and Mailing ..................................... 11\n      3.5.  Opening and Closing ..................................... 13\n      3.6.  Relaying ................................................ 14\n      3.7.  Domains ................................................. 17\n      3.8.  Changing Roles .......................................... 18\n\n   4.  THE SMTP SPECIFICATIONS ...................................... 19\n\n      4.1.  SMTP Commands ........................................... 19\n      4.1.1.  Command Semantics ..................................... 19\n      4.1.2.  Command Syntax ........................................ 27\n      4.2.  SMTP Replies ............................................ 34\n      4.2.1.  Reply Codes by Function Group ......................... 35\n      4.2.2.  Reply Codes in Numeric Order .......................... 36\n      4.3.  Sequencing of Commands and Replies ...................... 37\n      4.4.  State Diagrams .......................................... 39\n      4.5.  Details ................................................. 41\n      4.5.1.  Minimum Implementation ................................ 41\n      4.5.2.  Transparency .......................................... 41\n      4.5.3.  Sizes ................................................. 42\n\n   APPENDIX A:  TCP ................................................. 44\n   APPENDIX B:  NCP ................................................. 45\n   APPENDIX C:  NITS ................................................ 46\n   APPENDIX D:  X.25 ................................................ 47\n   APPENDIX E:  Theory of Reply Codes ............................... 48\n   APPENDIX F:  Scenarios ........................................... 51\n\n   GLOSSARY ......................................................... 64\n\n   REFERENCES ....................................................... 67\n\f\n\f\n\n\nNetwork Working Group                                          J. Postel\nRequest for Comments: DRAFT                                          ISI\nReplaces: RFC 788, 780, 772                                  August 1982\n\n                     SIMPLE MAIL TRANSFER PROTOCOL\n\n\n1.  INTRODUCTION\n\n   The objective of Simple Mail Transfer Protocol (SMTP) is to transfer\n   mail reliably and efficiently.\n\n   SMTP is independent of the particular transmission subsystem and\n   requires only a reliable ordered data stream channel.  Appendices A,\n   B, C, and D describe the use of SMTP with various transport services.\n   A Glossary provides the definitions of terms as used in this\n   document.\n\n   An important feature of SMTP is its capability to relay mail across\n   transport service environments.  A transport service provides an\n   interprocess communication environment (IPCE).  An IPCE may cover one\n   network, several networks, or a subset of a network.  It is important\n   to realize that transport systems (or IPCEs) are not one-to-one with\n   networks.  A process can communicate directly with another process\n   through any mutually known IPCE.  Mail is an application or use of\n   interprocess communication.  Mail can be communicated between\n   processes in different IPCEs by relaying through a process connected\n   to two (or more) IPCEs.  More specifically, mail can be relayed\n   between hosts on different transport systems by a host on both\n   transport systems.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                          [Page 1]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n2.  THE SMTP MODEL\n\n   The SMTP design is based on the following model of communication:  as\n   the result of a user mail request, the sender-SMTP establishes a\n   two-way transmission channel to a receiver-SMTP.  The receiver-SMTP\n   may be either the ultimate destination or an intermediate.  SMTP\n   commands are generated by the sender-SMTP and sent to the\n   receiver-SMTP.  SMTP replies are sent from the receiver-SMTP to the\n   sender-SMTP in response to the commands.\n\n   Once the transmission channel is established, the SMTP-sender sends a\n   MAIL command indicating the sender of the mail.  If the SMTP-receiver\n   can accept mail it responds with an OK reply.  The SMTP-sender then\n   sends a RCPT command identifying a recipient of the mail.  If the\n   SMTP-receiver can accept mail for that recipient it responds with an\n   OK reply; if not, it responds with a reply rejecting that recipient\n   (but not the whole mail transaction).  The SMTP-sender and\n   SMTP-receiver may negotiate several recipients.  When the recipients\n   have been negotiated the SMTP-sender sends the mail data, terminating\n   with a special sequence.  If the SMTP-receiver successfully processes\n   the mail data it responds with an OK reply.  The dialog is purposely\n   lock-step, one-at-a-time.\n\n     -------------------------------------------------------------\n\n   \n               +----------+                +----------+\n   +------+    |          |                |          |\n   | User |<-->|          |      SMTP      |          |\n   +------+    |  Sender- |Commands/Replies| Receiver-|\n   +------+    |   SMTP   |<-------------->|    SMTP  |    +------+\n   | File |<-->|          |    and Mail    |          |<-->| File |\n   |System|    |          |                |          |    |System|\n   +------+    +----------+                +----------+    +------+\n   \n\n                Sender-SMTP                Receiver-SMTP\n\n                           Model for SMTP Use\n\n                                Figure 1\n\n     -------------------------------------------------------------\n\n   The SMTP provides mechanisms for the transmission of mail; directly\n   from the sending user's host to the receiving user's host when the\n\n\n\n[Page 2]                                                          Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   two host are connected to the same transport service, or via one or\n   more relay SMTP-servers when the source and destination hosts are not\n   connected to the same transport service.\n\n   To be able to provide the relay capability the SMTP-server must be\n   supplied with the name of the ultimate destination host as well as\n   the destination mailbox name.\n\n   The argument to the MAIL command is a reverse-path, which specifies\n   who the mail is from.  The argument to the RCPT command is a\n   forward-path, which specifies who the mail is to.  The forward-path\n   is a source route, while the reverse-path is a return route (which\n   may be used to return a message to the sender when an error occurs\n   with a relayed message).\n\n   When the same message is sent to multiple recipients the SMTP\n   encourages the transmission of only one copy of the data for all the\n   recipients at the same destination host.\n\n   The mail commands and replies have a rigid syntax.  Replies also have\n   a numeric code.  In the following, examples appear which use actual\n   commands and replies.  The complete lists of commands and replies\n   appears in Section 4 on specifications.\n\n   Commands and replies are not case sensitive.  That is, a command or\n   reply word may be upper case, lower case, or any mixture of upper and\n   lower case.  Note that this is not true of mailbox user names.  For\n   some hosts the user name is case sensitive, and SMTP implementations\n   must take case to preserve the case of user names as they appear in\n   mailbox arguments.  Host names are not case sensitive.\n\n   Commands and replies are composed of characters from the ASCII\n   character set [1].  When the transport service provides an 8-bit byte\n   (octet) transmission channel, each 7-bit character is transmitted\n   right justified in an octet with the high order bit cleared to zero.\n\n   When specifying the general form of a command or reply, an argument\n   (or special symbol) will be denoted by a meta-linguistic variable (or\n   constant), for example, \"<string>\" or \"<reverse-path>\".  Here the\n   angle brackets indicate these are meta-linguistic variables.\n   However, some arguments use the angle brackets literally.  For\n   example, an actual reverse-path is enclosed in angle brackets, i.e.,\n   \"<John.Smith@USC-ISI.ARPA>\" is an instance of <reverse-path> (the\n   angle brackets are actually transmitted in the command or reply).\n\n\n\n\n\nPostel                                                          [Page 3]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n3.  THE SMTP PROCEDURES\n\n   This section presents the procedures used in SMTP in several parts.\n   First comes the basic mail procedure defined as a mail transaction.\n   Following this are descriptions of forwarding mail, verifying mailbox\n   names and expanding mailing lists, sending to terminals instead of or\n   in combination with mailboxes, and the opening and closing exchanges.\n   At the end of this section are comments on relaying, a note on mail\n   domains, and a discussion of changing roles.  Throughout this section\n   are examples of partial command and reply sequences, several complete\n   scenarios are presented in Appendix F.\n\n   3.1.  MAIL\n\n      There are three steps to SMTP mail transactions.  The transaction\n      is started with a MAIL command which gives the sender\n      identification.  A series of one or more RCPT commands follows\n      giving the receiver information.  Then a DATA command gives the\n      mail data.  And finally, the end of mail data indicator confirms\n      the transaction.\n\n         The first step in the procedure is the MAIL command.  The\n         <reverse-path> contains the source mailbox.\n\n            MAIL <SP> FROM:<reverse-path> <CRLF>\n\n         This command tells the SMTP-receiver that a new mail\n         transaction is starting and to reset all its state tables and\n         buffers, including any recipients or mail data.  It gives the\n         reverse-path which can be used to report errors.  If accepted,\n         the receiver-SMTP returns a 250 OK reply.\n\n         The <reverse-path> can contain more than just a mailbox.  The\n         <reverse-path> is a reverse source routing list of hosts and\n         source mailbox.  The first host in the <reverse-path> should be\n         the host sending this command.\n\n         The second step in the procedure is the RCPT command.\n\n            RCPT <SP> TO:<forward-path> <CRLF>\n\n         This command gives a forward-path identifying one recipient.\n         If accepted, the receiver-SMTP returns a 250 OK reply, and\n         stores the forward-path.  If the recipient is unknown the\n         receiver-SMTP returns a 550 Failure reply.  This second step of\n         the procedure can be repeated any number of times.\n\n\n\n[Page 4]                                                          Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n         The <forward-path> can contain more than just a mailbox.  The\n         <forward-path> is a source routing list of hosts and the\n         destination mailbox.  The first host in the <forward-path>\n         should be the host receiving this command.\n\n         The third step in the procedure is the DATA command.\n\n            DATA <CRLF>\n\n         If accepted, the receiver-SMTP returns a 354 Intermediate reply\n         and considers all succeeding lines to be the message text.\n         When the end of text is received and stored the SMTP-receiver\n         sends a 250 OK reply.\n\n         Since the mail data is sent on the transmission channel the end\n         of the mail data must be indicated so that the command and\n         reply dialog can be resumed.  SMTP indicates the end of the\n         mail data by sending a line containing only a period.  A\n         transparency procedure is used to prevent this from interfering\n         with the user's text (see Section 4.5.2).\n\n            Please note that the mail data includes the memo header\n            items such as Date, Subject, To, Cc, From [2].\n\n         The end of mail data indicator also confirms the mail\n         transaction and tells the receiver-SMTP to now process the\n         stored recipients and mail data.  If accepted, the\n         receiver-SMTP returns a 250 OK reply.  The DATA command should\n         fail only if the mail transaction was incomplete (for example,\n         no recipients), or if resources are not available.\n\n      The above procedure is an example of a mail transaction.  These\n      commands must be used only in the order discussed above.\n      Example 1 (below) illustrates the use of these commands in a mail\n      transaction.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                          [Page 5]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      -------------------------------------------------------------\n\n                     Example of the SMTP Procedure\n\n         This SMTP example shows mail sent by Smith at host Alpha.ARPA,\n         to Jones, Green, and Brown at host Beta.ARPA.  Here we assume\n         that host Alpha contacts host Beta directly.\n\n            S: MAIL FROM:<Smith@Alpha.ARPA>\n            R: 250 OK\n\n            S: RCPT TO:<Jones@Beta.ARPA>\n            R: 250 OK\n\n            S: RCPT TO:<Green@Beta.ARPA>\n            R: 550 No such user here\n\n            S: RCPT TO:<Brown@Beta.ARPA>\n            R: 250 OK\n\n            S: DATA\n            R: 354 Start mail input; end with <CRLF>.<CRLF>\n            S: Blah blah blah...\n            S: ...etc. etc. etc.\n            S: <CRLF>.<CRLF>\n            R: 250 OK\n\n         The mail has now been accepted for Jones and Brown.  Green did\n         not have a mailbox at host Beta.\n\n                               Example 1\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 6]                                                          Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   3.2.  FORWARDING\n\n      There are some cases where the destination information in the\n      <forward-path> is incorrect, but the receiver-SMTP knows the\n      correct destination.  In such cases, one of the following replies\n      should be used to allow the sender to contact the correct\n      destination.\n\n         251 User not local; will forward to <forward-path>\n\n            This reply indicates that the receiver-SMTP knows the user's\n            mailbox is on another host and indicates the correct\n            forward-path to use in the future.  Note that either the\n            host or user or both may be different.  The receiver takes\n            responsibility for delivering the message.\n\n         551 User not local; please try <forward-path>\n\n            This reply indicates that the receiver-SMTP knows the user's\n            mailbox is on another host and indicates the correct\n            forward-path to use.  Note that either the host or user or\n            both may be different.  The receiver refuses to accept mail\n            for this user, and the sender must either redirect the mail\n            according to the information provided or return an error\n            response to the originating user.\n\n      Example 2 illustrates the use of these responses.\n\n      -------------------------------------------------------------\n\n                         Example of Forwarding\n\n      Either\n\n      S: RCPT TO:<Postel@USC-ISI.ARPA>\n      R: 251 User not local; will forward to <Postel@USC-ISIF.ARPA>\n\n      Or\n\n      S: RCPT TO:<Paul@USC-ISIB.ARPA>\n      R: 551 User not local; please try <Mockapetris@USC-ISIF.ARPA>\n\n                               Example 2\n\n      -------------------------------------------------------------\n\n\n\n\nPostel                                                          [Page 7]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   3.3.  VERIFYING AND EXPANDING\n\n      SMTP provides as additional features, commands to verify a user\n      name or expand a mailing list.  This is done with the VRFY and\n      EXPN commands, which have character string arguments.  For the\n      VRFY command, the string is a user name, and the response may\n      include the full name of the user and must include the mailbox of\n      the user.  For the EXPN command, the string identifies a mailing\n      list, and the multiline response may include the full name of the\n      users and must give the mailboxes on the mailing list.\n\n      \"User name\" is a fuzzy term and used purposely.  If a host\n      implements the VRFY or EXPN commands then at least local mailboxes\n      must be recognized as \"user names\".  If a host chooses to\n      recognize other strings as \"user names\" that is allowed.\n\n      In some hosts the distinction between a mailing list and an alias\n      for a single mailbox is a bit fuzzy, since a common data structure\n      may hold both types of entries, and it is possible to have mailing\n      lists of one mailbox.  If a request is made to verify a mailing\n      list a positive response can be given if on receipt of a message\n      so addressed it will be delivered to everyone on the list,\n      otherwise an error should be reported (e.g., \"550 That is a\n      mailing list, not a user\").  If a request is made to expand a user\n      name a positive response can be formed by returning a list\n      containing one name, or an error can be reported (e.g., \"550 That\n      is a user name, not a mailing list\").\n\n      In the case of a multiline reply (normal for EXPN) exactly one\n      mailbox is to be specified on each line of the reply.  In the case\n      of an ambiguous request, for example, \"VRFY Smith\", where there\n      are two Smith's the response must be \"553 User ambiguous\".\n\n      The case of verifying a user name is straightforward as shown in\n      example 3.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 8]                                                          Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n      -------------------------------------------------------------\n\n                    Example of Verifying a User Name\n\n         Either\n\n            S: VRFY Smith\n            R: 250 Fred Smith <Smith@USC-ISIF.ARPA>\n\n         Or\n\n            S: VRFY Smith\n            R: 251 User not local; will forward to <Smith@USC-ISIQ.ARPA>\n\n         Or\n\n            S: VRFY Jones\n            R: 550 String does not match anything.\n\n         Or\n\n            S: VRFY Jones\n            R: 551 User not local; please try <Jones@USC-ISIQ.ARPA>\n\n         Or\n\n            S: VRFY Gourzenkyinplatz\n            R: 553 User ambiguous.\n\n                               Example 3\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                          [Page 9]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      The case of expanding a mailbox list requires a multiline reply as\n      shown in example 4.\n\n      -------------------------------------------------------------\n\n                  Example of Expanding a Mailing List\n\n         Either\n\n            S: EXPN Example-People\n            R: 250-Jon Postel <Postel@USC-ISIF.ARPA>\n            R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>\n            R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>\n            R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\n            R: 250-<joe@foo-unix.ARPA>\n            R: 250 <xyz@bar-unix.ARPA>\n\n         Or\n\n            S: EXPN Executive-Washroom-List\n            R: 550 Access Denied to You.\n\n                               Example 4\n\n      -------------------------------------------------------------\n\n      The character string arguments of the VRFY and EXPN commands\n      cannot be further restricted due to the variety of implementations\n      of the user name and mailbox list concepts.  On some systems it\n      may be appropriate for the argument of the EXPN command to be a\n      file name for a file containing a mailing list, but again there is\n      a variety of file naming conventions in the Internet.\n\n      The VRFY and EXPN commands are not included in the minimum\n      implementation (Section 4.5.1), and are not required to work\n      across relays when they are implemented.\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 10]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   3.4.  SENDING AND MAILING\n\n      The main purpose of SMTP is to deliver messages to user's\n      mailboxes.  A very similar service provided by some hosts is to\n      deliver messages to user's terminals (provided the user is active\n      on the host).  The delivery to the user's mailbox is called\n      \"mailing\", the delivery to the user's terminal is called\n      \"sending\".  Because in many hosts the implementation of sending is\n      nearly identical to the implementation of mailing these two\n      functions are combined in SMTP.  However the sending commands are\n      not included in the required minimum implementation\n      (Section 4.5.1).  Users should have the ability to control the\n      writing of messages on their terminals.  Most hosts permit the\n      users to accept or refuse such messages.\n\n      The following three command are defined to support the sending\n      options.  These are used in the mail transaction instead of the\n      MAIL command and inform the receiver-SMTP of the special semantics\n      of this transaction:\n\n         SEND <SP> FROM:<reverse-path> <CRLF>\n\n            The SEND command requires that the mail data be delivered to\n            the user's terminal.  If the user is not active (or not\n            accepting terminal messages) on the host a 450 reply may\n            returned to a RCPT command.  The mail transaction is\n            successful if the message is delivered the terminal.\n\n         SOML <SP> FROM:<reverse-path> <CRLF>\n\n            The Send Or MaiL command requires that the mail data be\n            delivered to the user's terminal if the user is active (and\n            accepting terminal messages) on the host.  If the user is\n            not active (or not accepting terminal messages) then the\n            mail data is entered into the user's mailbox.  The mail\n            transaction is successful if the message is delivered either\n            to the terminal or the mailbox.\n\n         SAML <SP> FROM:<reverse-path> <CRLF>\n\n            The Send And MaiL command requires that the mail data be\n            delivered to the user's terminal if the user is active (and\n            accepting terminal messages) on the host.  In any case the\n            mail data is entered into the user's mailbox.  The mail\n            transaction is successful if the message is delivered the\n            mailbox.\n\n\n\nPostel                                                         [Page 11]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      The same reply codes that are used for the MAIL commands are used\n      for these commands.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 12]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   3.5.  OPENING AND CLOSING\n\n      At the time the transmission channel is opened there is an\n      exchange to ensure that the hosts are communicating with the hosts\n      they think they are.\n\n      The following two commands are used in transmission channel\n      opening and closing:\n\n         HELO <SP> <domain> <CRLF>\n\n         QUIT <CRLF>\n\n      In the HELO command the host sending the command identifies\n      itself; the command may be interpreted as saying \"Hello, I am\n      <domain>\".\n\n      -------------------------------------------------------------\n\n                     Example of Connection Opening\n\n         R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready\n         S: HELO USC-ISIF.ARPA\n         R: 250 BBN-UNIX.ARPA\n\n                               Example 5\n\n      -------------------------------------------------------------\n\n      -------------------------------------------------------------\n\n                     Example of Connection Closing\n\n         S: QUIT\n         R: 221 BBN-UNIX.ARPA Service closing transmission channel\n\n                               Example 6\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 13]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   3.6.  RELAYING\n\n      The forward-path may be a source route of the form\n      \"@ONE,@TWO:JOE@THREE\", where ONE, TWO, and THREE are hosts.  This\n      form is used to emphasize the distinction between an address and a\n      route.  The mailbox is an absolute address, and the route is\n      information about how to get there.  The two concepts should not\n      be confused.\n\n      Conceptually the elements of the forward-path are moved to the\n      reverse-path as the message is relayed from one server-SMTP to\n      another.  The reverse-path is a reverse source route, (i.e., a\n      source route from the current location of the message to the\n      originator of the message).  When a server-SMTP deletes its\n      identifier from the forward-path and inserts it into the\n      reverse-path, it must use the name it is known by in the\n      environment it is sending into, not the environment the mail came\n      from, in case the server-SMTP is known by different names in\n      different environments.\n\n      If when the message arrives at an SMTP the first element of the\n      forward-path is not the identifier of that SMTP the element is not\n      deleted from the forward-path and is used to determine the next\n      SMTP to send the message to.  In any case, the SMTP adds its own\n      identifier to the reverse-path.\n\n      Using source routing the receiver-SMTP receives mail to be relayed\n      to another server-SMTP  The receiver-SMTP may accept or reject the\n      task of relaying the mail in the same way it accepts or rejects\n      mail for a local user.  The receiver-SMTP transforms the command\n      arguments by moving its own identifier from the forward-path to\n      the beginning of the reverse-path.  The receiver-SMTP then becomes\n      a sender-SMTP, establishes a transmission channel to the next SMTP\n      in the forward-path, and sends it the mail.\n\n      The first host in the reverse-path should be the host sending the\n      SMTP commands, and the first host in the forward-path should be\n      the host receiving the SMTP commands.\n\n      Notice that the forward-path and reverse-path appear in the SMTP\n      commands and replies, but not necessarily in the message.  That\n      is, there is no need for these paths and especially this syntax to\n      appear in the \"To:\" , \"From:\", \"CC:\", etc. fields of the message\n      header.\n\n      If a server-SMTP has accepted the task of relaying the mail and\n\n\n\n[Page 14]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n      later finds that the forward-path is incorrect or that the mail\n      cannot be delivered for whatever reason, then it must construct an\n      \"undeliverable mail\" notification message and send it to the\n      originator of the undeliverable mail (as indicated by the\n      reverse-path).\n\n      This notification message must be from the server-SMTP at this\n      host.  Of course, server-SMTPs should not send notification\n      messages about problems with notification messages.  One way to\n      prevent loops in error reporting is to specify a null reverse-path\n      in the MAIL command of a notification message.  When such a\n      message is relayed it is permissible to leave the reverse-path\n      null.  A MAIL command with a null reverse-path appears as follows:\n\n         MAIL FROM:<>\n\n      An undeliverable mail notification message is shown in example 7.\n      This notification is in response to a message originated by JOE at\n      HOSTW and sent via HOSTX to HOSTY with instructions to relay it on\n      to HOSTZ.  What we see in the example is the transaction between\n      HOSTY and HOSTX, which is the first step in the return of the\n      notification message.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 15]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      -------------------------------------------------------------\n\n            Example Undeliverable Mail Notification Message\n\n         S: MAIL FROM:<>\n         R: 250 ok\n         S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA>\n         R: 250 ok\n         S: DATA\n         R: 354 send the mail data, end with .\n         S: Date: 23 Oct 81 11:22:33\n         S: From: SMTP@HOSTY.ARPA\n         S: To: JOE@HOSTW.ARPA\n         S: Subject: Mail System Problem\n         S:\n         S:   Sorry JOE, your message to SAM@HOSTZ.ARPA lost.\n         S:   HOSTZ.ARPA said this:\n         S:    \"550 No Such User\"\n         S: .\n         R: 250 ok\n\n                               Example 7\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 16]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   3.7.  DOMAINS\n\n      Domains are a recently introduced concept in the ARPA Internet\n      mail system.  The use of domains changes the address space from a\n      flat global space of simple character string host names to a\n      hierarchically structured rooted tree of global addresses.  The\n      host name is replaced by a domain and host designator which is a\n      sequence of domain element strings separated by periods with the\n      understanding that the domain elements are ordered from the most\n      specific to the most general.\n\n      For example, \"USC-ISIF.ARPA\", \"Fred.Cambridge.UK\", and\n      \"PC7.LCS.MIT.ARPA\" might be host-and-domain identifiers.\n\n      Whenever domain names are used in SMTP only the official names are\n      used, the use of nicknames or aliases is not allowed.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 17]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   3.8.  CHANGING ROLES\n\n      The TURN command may be used to reverse the roles of the two\n      programs communicating over the transmission channel.\n\n      If program-A is currently the sender-SMTP and it sends the TURN\n      command and receives an ok reply (250) then program-A becomes the\n      receiver-SMTP.\n\n      If program-B is currently the receiver-SMTP and it receives the\n      TURN command and sends an ok reply (250) then program-B becomes\n      the sender-SMTP.\n\n      To refuse to change roles the receiver sends the 502 reply.\n\n      Please note that this command is optional.  It would not normally\n      be used in situations where the transmission channel is TCP.\n      However, when the cost of establishing the transmission channel is\n      high, this command may be quite useful.  For example, this command\n      may be useful in supporting be mail exchange using the public\n      switched telephone system as a transmission channel, especially if\n      some hosts poll other hosts for mail exchanges.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 18]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n4.  THE SMTP SPECIFICATIONS\n\n   4.1.  SMTP COMMANDS\n\n      4.1.1.  COMMAND SEMANTICS\n\n         The SMTP commands define the mail transfer or the mail system\n         function requested by the user.  SMTP commands are character\n         strings terminated by <CRLF>.  The command codes themselves are\n         alphabetic characters terminated by <SP> if parameters follow\n         and <CRLF> otherwise.  The syntax of mailboxes must conform to\n         receiver site conventions.  The SMTP commands are discussed\n         below.  The SMTP replies are discussed in the Section 4.2.\n\n         A mail transaction involves several data objects which are\n         communicated as arguments to different commands.  The\n         reverse-path is the argument of the MAIL command, the\n         forward-path is the argument of the RCPT command, and the mail\n         data is the argument of the DATA command.  These arguments or\n         data objects must be transmitted and held pending the\n         confirmation communicated by the end of mail data indication\n         which finalizes the transaction.  The model for this is that\n         distinct buffers are provided to hold the types of data\n         objects, that is, there is a reverse-path buffer, a\n         forward-path buffer, and a mail data buffer.  Specific commands\n         cause information to be appended to a specific buffer, or cause\n         one or more buffers to be cleared.\n\n         HELLO (HELO)\n\n            This command is used to identify the sender-SMTP to the\n            receiver-SMTP.  The argument field contains the host name of\n            the sender-SMTP.\n\n            The receiver-SMTP identifies itself to the sender-SMTP in\n            the connection greeting reply, and in the response to this\n            command.\n\n            This command and an OK reply to it confirm that both the\n            sender-SMTP and the receiver-SMTP are in the initial state,\n            that is, there is no transaction in progress and all state\n            tables and buffers are cleared.\n\n\n\n\n\n\n\nPostel                                                         [Page 19]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         MAIL (MAIL)\n\n            This command is used to initiate a mail transaction in which\n            the mail data is delivered to one or more mailboxes.  The\n            argument field contains a reverse-path.\n\n            The reverse-path consists of an optional list of hosts and\n            the sender mailbox.  When the list of hosts is present, it\n            is a \"reverse\" source route and indicates that the mail was\n            relayed through each host on the list (the first host in the\n            list was the most recent relay).  This list is used as a\n            source route to return non-delivery notices to the sender.\n            As each relay host adds itself to the beginning of the list,\n            it must use its name as known in the IPCE to which it is\n            relaying the mail rather than the IPCE from which the mail\n            came (if they are different).  In some types of error\n            reporting messages (for example, undeliverable mail\n            notifications) the reverse-path may be null (see Example 7).\n\n            This command clears the reverse-path buffer, the\n            forward-path buffer, and the mail data buffer; and inserts\n            the reverse-path information from this command into the\n            reverse-path buffer.\n\n         RECIPIENT (RCPT)\n\n            This command is used to identify an individual recipient of\n            the mail data; multiple recipients are specified by multiple\n            use of this command.\n\n            The forward-path consists of an optional list of hosts and a\n            required destination mailbox.  When the list of hosts is\n            present, it is a source route and indicates that the mail\n            must be relayed to the next host on the list.  If the\n            receiver-SMTP does not implement the relay function it may\n            user the same reply it would for an unknown local user\n            (550).\n\n            When mail is relayed, the relay host must remove itself from\n            the beginning forward-path and put itself at the beginning\n            of the reverse-path.  When mail reaches its ultimate\n            destination (the forward-path contains only a destination\n            mailbox), the receiver-SMTP inserts it into the destination\n            mailbox in accordance with its host mail conventions.\n\n\n\n\n\n[Page 20]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n               For example, mail received at relay host A with arguments\n\n                  FROM:<USERX@HOSTY.ARPA>\n                  TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>\n\n               will be relayed on to host B with arguments\n\n                  FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>\n                  TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.\n\n            This command causes its forward-path argument to be appended\n            to the forward-path buffer.\n\n         DATA (DATA)\n\n            The receiver treats the lines following the command as mail\n            data from the sender.  This command causes the mail data\n            from this command to be appended to the mail data buffer.\n            The mail data may contain any of the 128 ASCII character\n            codes.\n\n            The mail data is terminated by a line containing only a\n            period, that is the character sequence \"<CRLF>.<CRLF>\" (see\n            Section 4.5.2 on Transparency).  This is the end of mail\n            data indication.\n\n            The end of mail data indication requires that the receiver\n            must now process the stored mail transaction information.\n            This processing consumes the information in the reverse-path\n            buffer, the forward-path buffer, and the mail data buffer,\n            and on the completion of this command these buffers are\n            cleared.  If the processing is successful the receiver must\n            send an OK reply.  If the processing fails completely the\n            receiver must send a failure reply.\n\n            When the receiver-SMTP accepts a message either for relaying\n            or for final delivery it inserts at the beginning of the\n            mail data a time stamp line.  The time stamp line indicates\n            the identity of the host that sent the message, and the\n            identity of the host that received the message (and is\n            inserting this time stamp), and the date and time the\n            message was received.  Relayed messages will have multiple\n            time stamp lines.\n\n            When the receiver-SMTP makes the \"final delivery\" of a\n            message it inserts at the beginning of the mail data a\n\n\n\nPostel                                                         [Page 21]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n            return path line.  The return path line preserves the\n            information in the <reverse-path> from the MAIL command.\n            Here, final delivery means the message leaves the SMTP\n            world.  Normally, this would mean it has been delivered to\n            the destination user, but in some cases it may be further\n            processed and transmitted by another mail system.\n\n               It is possible for the mailbox in the return path be\n               different from the actual sender's mailbox, for example,\n               if error responses are to be delivered a special error\n               handling mailbox rather than the message senders.\n\n            The preceding two paragraphs imply that the final mail data\n            will begin with a  return path line, followed by one or more\n            time stamp lines.  These lines will be followed by the mail\n            data header and body [2].  See Example 8.\n\n            Special mention is needed of the response and further action\n            required when the processing following the end of mail data\n            indication is partially successful.  This could arise if\n            after accepting several recipients and the mail data, the\n            receiver-SMTP finds that the mail data can be successfully\n            delivered to some of the recipients, but it cannot be to\n            others (for example, due to mailbox space allocation\n            problems).  In such a situation, the response to the DATA\n            command must be an OK reply.  But, the receiver-SMTP must\n            compose and send an \"undeliverable mail\" notification\n            message to the originator of the message.  Either a single\n            notification which lists all of the recipients that failed\n            to get the message, or separate notification messages must\n            be sent for each failed recipient (see Example 7).  All\n            undeliverable mail notification messages are sent using the\n            MAIL command (even if they result from processing a SEND,\n            SOML, or SAML command).\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 22]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n     -------------------------------------------------------------\n\n            Example of Return Path and Received Time Stamps\n\n      Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA>   \n      Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST\n      Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST\n      Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST\n      Date: 27 Oct 81 15:01:01 PST                                \n      From: JOE@ABC.ARPA                                          \n      Subject: Improved Mailing System Installed                  \n      To: SAM@JKL.ARPA                                            \n                                    \n      This is to inform you that ...                              \n\n                               Example 8\n\n     -------------------------------------------------------------\n\n         SEND (SEND)\n\n            This command is used to initiate a mail transaction in which\n            the mail data is delivered to one or more terminals.  The\n            argument field contains a reverse-path.  This command is\n            successful if the message is delivered to a terminal.\n\n            The reverse-path consists of an optional list of hosts and\n            the sender mailbox.  When the list of hosts is present, it\n            is a \"reverse\" source route and indicates that the mail was\n            relayed through each host on the list (the first host in the\n            list was the most recent relay).  This list is used as a\n            source route to return non-delivery notices to the sender.\n            As each relay host adds itself to the beginning of the list,\n            it must use its name as known in the IPCE to which it is\n            relaying the mail rather than the IPCE from which the mail\n            came (if they are different).\n\n            This command clears the reverse-path buffer, the\n            forward-path buffer, and the mail data buffer; and inserts\n            the reverse-path information from this command into the\n            reverse-path buffer.\n\n         SEND OR MAIL (SOML)\n\n            This command is used to initiate a mail transaction in which\n            the mail data is delivered to one or more terminals or\n\n\n\nPostel                                                         [Page 23]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n            mailboxes. For each recipient the mail data is delivered to\n            the recipient's terminal if the recipient is active on the\n            host (and accepting terminal messages), otherwise to the\n            recipient's mailbox.  The argument field contains a\n            reverse-path.  This command is successful if the message is\n            delivered to a terminal or the mailbox.\n\n            The reverse-path consists of an optional list of hosts and\n            the sender mailbox.  When the list of hosts is present, it\n            is a \"reverse\" source route and indicates that the mail was\n            relayed through each host on the list (the first host in the\n            list was the most recent relay).  This list is used as a\n            source route to return non-delivery notices to the sender.\n            As each relay host adds itself to the beginning of the list,\n            it must use its name as known in the IPCE to which it is\n            relaying the mail rather than the IPCE from which the mail\n            came (if they are different).\n\n            This command clears the reverse-path buffer, the\n            forward-path buffer, and the mail data buffer; and inserts\n            the reverse-path information from this command into the\n            reverse-path buffer.\n\n         SEND AND MAIL (SAML)\n\n            This command is used to initiate a mail transaction in which\n            the mail data is delivered to one or more terminals and\n            mailboxes. For each recipient the mail data is delivered to\n            the recipient's terminal if the recipient is active on the\n            host (and accepting terminal messages), and for all\n            recipients to the recipient's mailbox.  The argument field\n            contains a reverse-path.  This command is successful if the\n            message is delivered to the mailbox.\n\n            The reverse-path consists of an optional list of hosts and\n            the sender mailbox.  When the list of hosts is present, it\n            is a \"reverse\" source route and indicates that the mail was\n            relayed through each host on the list (the first host in the\n            list was the most recent relay).  This list is used as a\n            source route to return non-delivery notices to the sender.\n            As each relay host adds itself to the beginning of the list,\n            it must use its name as known in the IPCE to which it is\n            relaying the mail rather than the IPCE from which the mail\n            came (if they are different).\n\n            This command clears the reverse-path buffer, the\n\n\n\n[Page 24]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n            forward-path buffer, and the mail data buffer; and inserts\n            the reverse-path information from this command into the\n            reverse-path buffer.\n\n         RESET (RSET)\n\n            This command specifies that the current mail transaction is\n            to be aborted.  Any stored sender, recipients, and mail data\n            must be discarded, and all buffers and state tables cleared.\n            The receiver must send an OK reply.\n\n         VERIFY (VRFY)\n\n            This command asks the receiver to confirm that the argument\n            identifies a user.  If it is a user name, the full name of\n            the user (if known) and the fully specified mailbox are\n            returned.\n\n            This command has no effect on any of the reverse-path\n            buffer, the forward-path buffer, or the mail data buffer.\n\n         EXPAND (EXPN)\n\n            This command asks the receiver to confirm that the argument\n            identifies a mailing list, and if so, to return the\n            membership of that list.  The full name of the users (if\n            known) and the fully specified mailboxes are returned in a\n            multiline reply.\n\n            This command has no effect on any of the reverse-path\n            buffer, the forward-path buffer, or the mail data buffer.\n\n         HELP (HELP)\n\n            This command causes the receiver to send helpful information\n            to the sender of the HELP command.  The command may take an\n            argument (e.g., any command name) and return more specific\n            information as a response.\n\n            This command has no effect on any of the reverse-path\n            buffer, the forward-path buffer, or the mail data buffer.\n\n\n\n\n\n\n\n\nPostel                                                         [Page 25]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         NOOP (NOOP)\n\n            This command does not affect any parameters or previously\n            entered commands.  It specifies no action other than that\n            the receiver send an OK reply.\n\n            This command has no effect on any of the reverse-path\n            buffer, the forward-path buffer, or the mail data buffer.\n\n         QUIT (QUIT)\n\n            This command specifies that the receiver must send an OK\n            reply, and then close the transmission channel.\n\n            The receiver should not close the transmission channel until\n            it receives and replies to a QUIT command (even if there was\n            an error).  The sender should not close the transmission\n            channel until it send a QUIT command and receives the reply\n            (even if there was an error response to a previous command).\n            If the connection is closed prematurely the receiver should\n            act as if a RSET command had been received (canceling any\n            pending transaction, but not undoing any previously\n            completed transaction), the sender should act as if the\n            command or transaction in progress had received a temporary\n            error (4xx).\n\n         TURN (TURN)\n\n            This command specifies that the receiver must either (1)\n            send an OK reply and then take on the role of the\n            sender-SMTP, or (2) send a refusal reply and retain the role\n            of the receiver-SMTP.\n\n            If program-A is currently the sender-SMTP and it sends the\n            TURN command and receives an OK reply (250) then program-A\n            becomes the receiver-SMTP.  Program-A is then in the initial\n            state as if the transmission channel just opened, and it\n            then sends the 220 service ready greeting.\n\n            If program-B is currently the receiver-SMTP and it receives\n            the TURN command and sends an OK reply (250) then program-B\n            becomes the sender-SMTP.  Program-B is then in the initial\n            state as if the transmission channel just opened, and it\n            then expects to receive the 220 service ready greeting.\n\n            To refuse to change roles the receiver sends the 502 reply.\n\n\n\n[Page 26]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n         There are restrictions on the order in which these command may\n         be used.\n\n            The first command in a session must be the HELO command.\n            The HELO command may be used later in a session as well.  If\n            the HELO command argument is not acceptable a 501 failure\n            reply must be returned and the receiver-SMTP must stay in\n            the same state.\n\n            The NOOP, HELP, EXPN, and VRFY commands can be used at any\n            time during a session.\n\n            The MAIL, SEND, SOML, or SAML commands begin a mail\n            transaction.  Once started a mail transaction consists of\n            one of the transaction beginning commands, one or more RCPT\n            commands, and a DATA command, in that order.  A mail\n            transaction may be aborted by the RSET command.  There may\n            be zero or more transactions in a session.\n\n            If the transaction beginning command argument is not\n            acceptable a 501 failure reply must be returned and the\n            receiver-SMTP must stay in the same state.  If the commands\n            in a transaction are out of order a 503 failure reply must\n            be returned and the receiver-SMTP must stay in the same\n            state.\n\n            The last command in a session must be the QUIT command.  The\n            QUIT command can not be used at any other time in a session.\n\n      4.1.2.  COMMAND SYNTAX\n\n         The commands consist of a command code followed by an argument\n         field.  Command codes are four alphabetic characters.  Upper\n         and lower case alphabetic characters are to be treated\n         identically.  Thus, any of the following may represent the mail\n         command:\n\n            MAIL    Mail    mail    MaIl    mAIl\n\n         This also applies to any symbols representing parameter values,\n         such as \"TO\" or \"to\" for the forward-path.  Command codes and\n         the argument fields are separated by one or more spaces.\n         However, within the reverse-path and forward-path arguments\n         case is important.  In particular, in some hosts the user\n         \"smith\" is different from the user \"Smith\".\n\n\n\n\nPostel                                                         [Page 27]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         The argument field consists of a variable length character\n         string ending with the character sequence <CRLF>.  The receiver\n         is to take no action until this sequence is received.\n\n         Square brackets denote an optional argument field.  If the\n         option is not taken, the appropriate default is implied.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 28]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n         The following are the SMTP commands:\n\n            HELO <SP> <domain> <CRLF>\n\n            MAIL <SP> FROM:<reverse-path> <CRLF>\n\n            RCPT <SP> TO:<forward-path> <CRLF>\n\n            DATA <CRLF>\n\n            RSET <CRLF>\n\n            SEND <SP> FROM:<reverse-path> <CRLF>\n\n            SOML <SP> FROM:<reverse-path> <CRLF>\n\n            SAML <SP> FROM:<reverse-path> <CRLF>\n\n            VRFY <SP> <string> <CRLF>\n\n            EXPN <SP> <string> <CRLF>\n\n            HELP [<SP> <string>] <CRLF>\n\n            NOOP <CRLF>\n\n            QUIT <CRLF>\n\n            TURN <CRLF>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 29]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         The syntax of the above argument fields (using BNF notation\n         where applicable) is given below.  The \"...\" notation indicates\n         that a field may be repeated one or more times.\n\n            <reverse-path> ::= <path>\n\n            <forward-path> ::= <path>\n\n            <path> ::= \"<\" [ <a-d-l> \":\" ] <mailbox> \">\"\n\n            <a-d-l> ::= <at-domain> | <at-domain> \",\" <a-d-l>\n\n            <at-domain> ::= \"@\" <domain>\n\n            <domain> ::=  <element> | <element> \".\" <domain>\n\n            <element> ::= <name> | \"#\" <number> | \"[\" <dotnum> \"]\"\n\n            <mailbox> ::= <local-part> \"@\" <domain>\n\n            <local-part> ::= <dot-string> | <quoted-string>\n\n            <name> ::= <a> <ldh-str> <let-dig>\n\n            <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n\n            <let-dig> ::= <a> | <d>\n\n            <let-dig-hyp> ::= <a> | <d> | \"-\"\n\n            <dot-string> ::= <string> | <string> \".\" <dot-string>\n\n            <string> ::= <char> | <char> <string>\n\n            <quoted-string> ::=  \"\"\" <qtext> \"\"\"\n\n            <qtext> ::=  \"\\\" <x> | \"\\\" <x> <qtext> | <q> | <q> <qtext>\n\n            <char> ::= <c> | \"\\\" <x>\n\n            <dotnum> ::= <snum> \".\" <snum> \".\" <snum> \".\" <snum>\n\n            <number> ::= <d> | <d> <number>\n\n            <CRLF> ::= <CR> <LF>\n\n\n\n\n[Page 30]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n            <CR> ::= the carriage return character (ASCII code 13)\n\n            <LF> ::= the line feed character (ASCII code 10)\n\n            <SP> ::= the space character (ASCII code 32)\n\n            <snum> ::= one, two, or three digits representing a decimal\n                      integer value in the range 0 through 255\n\n            <a> ::= any one of the 52 alphabetic characters A through Z\n                      in upper case and a through z in lower case\n\n            <c> ::= any one of the 128 ASCII characters, but not any\n                      <special> or <SP>\n\n            <d> ::= any one of the ten digits 0 through 9\n\n            <q> ::= any one of the 128 ASCII characters except <CR>,\n                      <LF>, quote (\"), or backslash (\\)\n\n            <x> ::= any one of the 128 ASCII characters (no exceptions)\n\n            <special> ::= \"<\" | \">\" | \"(\" | \")\" | \"[\" | \"]\" | \"\\\" | \".\"\n                      | \",\" | \";\" | \":\" | \"@\"  \"\"\" | the control\n                      characters (ASCII codes 0 through 31 inclusive and\n                      127)\n\n         Note that the backslash, \"\\\", is a quote character, which is\n         used to indicate that the next character is to be used\n         literally (instead of its normal interpretation).  For example,\n         \"Joe\\,Smith\" could be used to indicate a single nine character\n         user field with comma being the fourth character of the field.\n\n         Hosts are generally known by names which are translated to\n         addresses in each host.  Note that the name elements of domains\n         are the official names -- no use of nicknames or aliases is\n         allowed.\n\n         Sometimes a host is not known to the translation function and\n         communication is blocked.  To bypass this barrier two numeric\n         forms are also allowed for host \"names\".  One form is a decimal\n         integer prefixed by a pound sign, \"#\", which indicates the\n         number is the address of the host.  Another form is four small\n         decimal integers separated by dots and enclosed by brackets,\n         e.g., \"[123.255.37.2]\", which indicates a 32-bit ARPA Internet\n         Address in four 8-bit fields.\n\n\n\nPostel                                                         [Page 31]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         The time stamp line and the return path line are formally\n         defined as follows:\n\n         <return-path-line> ::= \"Return-Path:\" <SP><reverse-path><CRLF>\n\n         <time-stamp-line> ::= \"Received:\" <SP> <stamp> <CRLF>\n\n            <stamp> ::= <from-domain> <by-domain> <opt-info> \";\"\n                      <daytime>\n\n            <from-domain> ::= \"FROM\" <SP> <domain> <SP>\n\n            <by-domain> ::= \"BY\" <SP> <domain> <SP>\n\n            <opt-info> ::= [<via>] [<with>] [<id>] [<for>]\n\n            <via> ::= \"VIA\" <SP> <link> <SP>\n\n            <with> ::= \"WITH\" <SP> <protocol> <SP>\n\n            <id> ::= \"ID\" <SP> <string> <SP>\n\n            <for> ::= \"FOR\" <SP> <path> <SP>\n\n            <link> ::= The standard names for links are registered with\n                      the Network Information Center.\n\n            <protocol> ::= The standard names for protocols are\n                      registered with the Network Information Center.\n\n            <daytime> ::= <SP> <date> <SP> <time>\n\n            <date> ::= <dd> <SP> <mon> <SP> <yy>\n\n            <time> ::= <hh> \":\" <mm> \":\" <ss> <SP> <zone>\n\n            <dd> ::= the one or two decimal integer day of the month in\n                      the range 1 to 31.\n\n            <mon> ::= \"JAN\" | \"FEB\" | \"MAR\" | \"APR\" | \"MAY\" | \"JUN\" |\n                      \"JUL\" | \"AUG\" | \"SEP\" | \"OCT\" | \"NOV\" | \"DEC\"\n\n            <yy> ::= the two decimal integer year of the century in the\n                      range 00 to 99.\n\n\n\n\n\n[Page 32]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n            <hh> ::= the two decimal integer hour of the day in the\n                      range 00 to 24.\n\n            <mm> ::= the two decimal integer minute of the hour in the\n                      range 00 to 59.\n\n            <ss> ::= the two decimal integer second of the minute in the\n                      range 00 to 59.\n\n            <zone> ::= \"UT\" for Universal Time (the default) or other\n                      time zone designator (as in [2]).\n\n            \n\n     -------------------------------------------------------------\n\n                          Return Path Example\n\n         Return-Path: <@CHARLIE.ARPA,@BAKER.ARPA:JOE@ABLE.ARPA>\n\n                               Example 9\n\n     -------------------------------------------------------------\n\n     -------------------------------------------------------------\n\n                        Time Stamp Line Example\n\n      Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT\n\n         Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25\n                   id M12345 for Smith@PDQ.ARPA ; 22 OCT 81 09:23:59 PDT\n\n                               Example 10\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 33]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   4.2.  SMTP REPLIES\n\n      Replies to SMTP commands are devised to ensure the synchronization\n      of requests and actions in the process of mail transfer, and to\n      guarantee that the sender-SMTP always knows the state of the\n      receiver-SMTP.  Every command must generate exactly one reply.\n\n         The details of the command-reply sequence are made explicit in\n         Section 5.3 on Sequencing and Section 5.4 State Diagrams.\n\n      An SMTP reply consists of a three digit number (transmitted as\n      three alphanumeric characters) followed by some text.  The number\n      is intended for use by automata to determine what state to enter\n      next; the text is meant for the human user.  It is intended that\n      the three digits contain enough encoded information that the\n      sender-SMTP need not examine the text and may either discard it or\n      pass it on to the user, as appropriate.  In particular, the text\n      may be receiver-dependent and context dependent, so there are\n      likely to be varying texts for each reply code.  A discussion of\n      the theory of reply codes is given in Appendix E.  Formally, a\n      reply is defined to be the sequence:  a three-digit code, <SP>,\n      one line of text, and <CRLF>, or a multiline reply (as defined in\n      Appendix E).  Only the EXPN and HELP commands are expected to\n      result in multiline replies in normal circumstances, however\n      multiline replies are allowed for any command.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 34]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n      4.2.1.  REPLY CODES BY FUNCTION GROUPS\n\n         500 Syntax error, command unrecognized\n            [This may include errors such as command line too long]\n         501 Syntax error in parameters or arguments\n         502 Command not implemented\n         503 Bad sequence of commands\n         504 Command parameter not implemented\n          \n         211 System status, or system help reply\n         214 Help message\n            [Information on how to use the receiver or the meaning of a\n            particular non-standard command; this reply is useful only\n            to the human user]\n          \n         220 <domain> Service ready\n         221 <domain> Service closing transmission channel\n         421 <domain> Service not available,\n             closing transmission channel\n            [This may be a reply to any command if the service knows it\n            must shut down]\n          \n         250 Requested mail action okay, completed\n         251 User not local; will forward to <forward-path>\n         450 Requested mail action not taken: mailbox unavailable\n            [E.g., mailbox busy]\n         550 Requested action not taken: mailbox unavailable\n            [E.g., mailbox not found, no access]\n         451 Requested action aborted: error in processing\n         551 User not local; please try <forward-path>\n         452 Requested action not taken: insufficient system storage\n         552 Requested mail action aborted: exceeded storage allocation\n         553 Requested action not taken: mailbox name not allowed\n            [E.g., mailbox syntax incorrect]\n         354 Start mail input; end with <CRLF>.<CRLF>\n         554 Transaction failed\n         \n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 35]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      4.2.2.  NUMERIC ORDER LIST OF REPLY CODES\n\n         211 System status, or system help reply\n         214 Help message\n            [Information on how to use the receiver or the meaning of a\n            particular non-standard command; this reply is useful only\n            to the human user]\n         220 <domain> Service ready\n         221 <domain> Service closing transmission channel\n         250 Requested mail action okay, completed\n         251 User not local; will forward to <forward-path>\n          \n         354 Start mail input; end with <CRLF>.<CRLF>\n          \n         421 <domain> Service not available,\n             closing transmission channel\n            [This may be a reply to any command if the service knows it\n            must shut down]\n         450 Requested mail action not taken: mailbox unavailable\n            [E.g., mailbox busy]\n         451 Requested action aborted: local error in processing\n         452 Requested action not taken: insufficient system storage\n          \n         500 Syntax error, command unrecognized\n            [This may include errors such as command line too long]\n         501 Syntax error in parameters or arguments\n         502 Command not implemented\n         503 Bad sequence of commands\n         504 Command parameter not implemented\n         550 Requested action not taken: mailbox unavailable\n            [E.g., mailbox not found, no access]\n         551 User not local; please try <forward-path>\n         552 Requested mail action aborted: exceeded storage allocation\n         553 Requested action not taken: mailbox name not allowed\n            [E.g., mailbox syntax incorrect]\n         554 Transaction failed\n         \n\n\n\n\n\n\n\n\n\n\n\n\n[Page 36]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   4.3.  SEQUENCING OF COMMANDS AND REPLIES\n\n      The communication between the sender and receiver is intended to\n      be an alternating dialogue, controlled by the sender.  As such,\n      the sender issues a command and the receiver responds with a\n      reply.  The sender must wait for this response before sending\n      further commands.\n\n      One important reply is the connection greeting.  Normally, a\n      receiver will send a 220 \"Service ready\" reply when the connection\n      is completed.  The sender should wait for this greeting message\n      before sending any commands.\n\n         Note: all the greeting type replies have the official name of\n         the server host as the first word following the reply code.\n\n            For example,\n\n               220 <SP> USC-ISIF.ARPA <SP> Service ready <CRLF>\n\n      The table below lists alternative success and failure replies for\n      each command.  These must be strictly adhered to; a receiver may\n      substitute text in the replies, but the meaning and action implied\n      by the code numbers and by the specific command reply sequence\n      cannot be altered.\n\n      COMMAND-REPLY SEQUENCES\n\n         Each command is listed with its possible replies.  The prefixes\n         used before the possible replies are \"P\" for preliminary (not\n         used in SMTP), \"I\" for intermediate, \"S\" for success, \"F\" for\n         failure, and \"E\" for error.  The 421 reply (service not\n         available, closing transmission channel) may be given to any\n         command if the SMTP-receiver knows it must shut down.  This\n         listing forms the basis for the State Diagrams in Section 4.4.\n\n            CONNECTION ESTABLISHMENT\n               S: 220\n               F: 421\n            HELO\n               S: 250\n               E: 500, 501, 504, 421\n            MAIL\n               S: 250\n               F: 552, 451, 452\n               E: 500, 501, 421\n\n\n\nPostel                                                         [Page 37]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n            RCPT\n               S: 250, 251\n               F: 550, 551, 552, 553, 450, 451, 452\n               E: 500, 501, 503, 421\n            DATA\n               I: 354 -> data -> S: 250\n                                 F: 552, 554, 451, 452\n               F: 451, 554\n               E: 500, 501, 503, 421\n            RSET\n               S: 250\n               E: 500, 501, 504, 421\n            SEND\n               S: 250\n               F: 552, 451, 452\n               E: 500, 501, 502, 421\n            SOML\n               S: 250\n               F: 552, 451, 452\n               E: 500, 501, 502, 421\n            SAML\n               S: 250\n               F: 552, 451, 452\n               E: 500, 501, 502, 421\n            VRFY\n               S: 250, 251\n               F: 550, 551, 553\n               E: 500, 501, 502, 504, 421\n            EXPN\n               S: 250\n               F: 550\n               E: 500, 501, 502, 504, 421\n            HELP\n               S: 211, 214\n               E: 500, 501, 502, 504, 421\n            NOOP\n               S: 250\n               E: 500, 421\n            QUIT\n               S: 221\n               E: 500\n            TURN\n               S: 250\n               F: 502\n               E: 500, 503\n\n\n\n\n[Page 38]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   4.4.  STATE DIAGRAMS\n\n      Following are state diagrams for a simple-minded SMTP\n      implementation.  Only the first digit of the reply codes is used.\n      There is one state diagram for each group of SMTP commands.  The\n      command groupings were determined by constructing a model for each\n      command and then collecting together the commands with\n      structurally identical models.\n\n      For each command there are three possible outcomes:  \"success\"\n      (S), \"failure\" (F), and \"error\" (E). In the state diagrams below\n      we use the symbol B for \"begin\", and the symbol W for \"wait for\n      reply\".\n\n      First, the diagram that represents most of the SMTP commands:\n\n         \n                                  1,3    +---+\n                             ----------->| E |\n                            |            +---+\n                            |\n         +---+    cmd    +---+    2      +---+\n         | B |---------->| W |---------->| S |\n         +---+           +---+           +---+\n                            |\n                            |     4,5    +---+\n                             ----------->| F |\n                                         +---+\n         \n\n         This diagram models the commands:\n\n            HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP,\n            NOOP, QUIT, TURN.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 39]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      A more complex diagram models the DATA command:\n\n         \n         +---+   DATA    +---+ 1,2                 +---+\n         | B |---------->| W |-------------------->| E |\n         +---+           +---+        ------------>+---+\n                         3| |4,5     |\n                          | |        |\n            --------------   -----   |\n           |                      |  |             +---+\n           |               ----------     -------->| S |\n           |              |       |      |         +---+\n           |              |  ------------\n           |              | |     |\n           V           1,3| |2    |\n         +---+   data    +---+     --------------->+---+\n         |   |---------->| W |                     | F |\n         +---+           +---+-------------------->+---+\n                              4,5\n\n\n         Note that the \"data\" here is a series of lines sent from the\n         sender to the receiver with no response expected until the last\n         line is sent.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 40]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   4.5.  DETAILS\n\n      4.5.1.  MINIMUM IMPLEMENTATION\n\n         In order to make SMTP workable, the following minimum\n         implementation is required for all receivers:\n\n            COMMANDS -- HELO\n                        MAIL\n                        RCPT\n                        DATA\n                        RSET\n                        NOOP\n                        QUIT\n\n      4.5.2.  TRANSPARENCY\n\n         Without some provision for data transparency the character\n         sequence \"<CRLF>.<CRLF>\" ends the mail text and cannot be sent\n         by the user.  In general, users are not aware of such\n         \"forbidden\" sequences.  To allow all user composed text to be\n         transmitted transparently the following procedures are used.\n\n            1. Before sending a line of mail text the sender-SMTP checks\n            the first character of the line.  If it is a period, one\n            additional period is inserted at the beginning of the line.\n\n            2. When a line of mail text is received by the receiver-SMTP\n            it checks the line.  If the line is composed of a single\n            period it is the end of mail.  If the first character is a\n            period and there are other characters on the line, the first\n            character is deleted.\n\n         The mail data may contain any of the 128 ASCII characters.  All\n         characters are to be delivered to the recipient's mailbox\n         including format effectors and other control characters.  If\n         the transmission channel provides an 8-bit byte (octets) data\n         stream, the 7-bit ASCII codes are transmitted right justified\n         in the octets with the high order bits cleared to zero.\n\n            In some systems it may be necessary to transform the data as\n            it is received and stored.  This may be necessary for hosts\n            that use a different character set than ASCII as their local\n            character set, or that store data in records rather than\n\n\n\n\n\nPostel                                                         [Page 41]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n            strings.  If such transforms are necessary, they must be\n            reversible -- especially if such transforms are applied to\n            mail being relayed.\n\n      4.5.3.  SIZES\n\n         There are several objects that have required minimum maximum\n         sizes.  That is, every implementation must be able to receive\n         objects of at least these sizes, but must not send objects\n         larger than these sizes.\n\n                                    \n          ****************************************************\n          *                                                  *\n          *  TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION  *\n          *  TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *\n          *  OF THESE OBJECTS SHOULD BE USED.                *\n          *                                                  *\n          ****************************************************\n\n            user\n\n               The maximum total length of a user name is 64 characters.\n\n            domain\n\n               The maximum total length of a domain name or number is 64\n               characters.\n\n            path\n\n               The maximum total length of a reverse-path or\n               forward-path is 256 characters (including the punctuation\n               and element separators).\n\n            command line\n\n               The maximum total length of a command line including the\n               command word and the <CRLF> is 512 characters.\n\n            reply line\n\n               The maximum total length of a reply line including the\n               reply code and the <CRLF> is 512 characters.\n\n\n\n\n\n[Page 42]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n            text line\n\n               The maximum total length of a text line including the\n               <CRLF> is 1000 characters (but not counting the leading\n               dot duplicated for transparency).\n\n            recipients buffer\n\n               The maximum total number of recipients that must be\n               buffered is 100 recipients.\n\n                                    \n          ****************************************************\n          *                                                  *\n          *  TO THE MAXIMUM EXTENT POSSIBLE, IMPLEMENTATION  *\n          *  TECHNIQUES WHICH IMPOSE NO LIMITS ON THE LENGTH *\n          *  OF THESE OBJECTS SHOULD BE USED.                *\n          *                                                  *\n          ****************************************************\n\n         Errors due to exceeding these limits may be reported by using\n         the reply codes, for example:\n\n            500 Line too long.\n\n            501 Path too long\n\n            552 Too many recipients.\n\n            552 Too much mail data.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 43]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\nAPPENDIX A\n\n   TCP Transport service\n\n      The Transmission Control Protocol [3] is used in the ARPA\n      Internet, and in any network following the US DoD standards for\n      internetwork protocols.\n\n      Connection Establishment\n\n         The SMTP transmission channel is a TCP connection established\n         between the sender process port U and the receiver process port\n         L.  This single full duplex connection is used as the\n         transmission channel.  This protocol is assigned the service\n         port 25 (31 octal), that is L=25.\n\n      Data Transfer\n\n         The TCP connection supports the transmission of 8-bit bytes.\n         The SMTP data is 7-bit ASCII characters.  Each character is\n         transmitted as an 8-bit byte with the high-order bit cleared to\n         zero.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 44]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\nAPPENDIX B\n\n   NCP Transport service\n\n      The ARPANET Host-to-Host Protocol [4] (implemented by the Network\n      Control Program) may be used in the ARPANET.\n\n      Connection Establishment\n\n         The SMTP transmission channel is established via NCP between\n         the sender process socket U and receiver process socket L.  The\n         Initial Connection Protocol [5] is followed resulting in a pair\n         of simplex connections.  This pair of connections is used as\n         the transmission channel.  This protocol is assigned the\n         contact socket 25 (31 octal), that is L=25.\n\n      Data Transfer\n\n         The NCP data connections are established in 8-bit byte mode.\n         The SMTP data is 7-bit ASCII characters.  Each character is\n         transmitted as an 8-bit byte with the high-order bit cleared to\n         zero.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 45]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\nAPPENDIX C\n\n   NITS\n\n      The Network Independent Transport Service [6] may be used.\n\n      Connection Establishment\n\n         The SMTP transmission channel is established via NITS between\n         the sender process and receiver process.  The sender process\n         executes the CONNECT primitive, and the waiting receiver\n         process executes the ACCEPT primitive.\n\n      Data Transfer\n\n         The NITS connection supports the transmission of 8-bit bytes.\n         The SMTP data is 7-bit ASCII characters.  Each character is\n         transmitted as an 8-bit byte with the high-order bit cleared to\n         zero.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 46]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\nAPPENDIX D\n\n   X.25 Transport service\n\n      It may be possible to use the X.25 service [7] as provided by the\n      Public Data Networks directly, however, it is suggested that a\n      reliable end-to-end protocol such as TCP be used on top of X.25\n      connections.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 47]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\nAPPENDIX E\n\n   Theory of Reply Codes\n\n      The three digits of the reply each have a special significance.\n      The first digit denotes whether the response is good, bad or\n      incomplete.  An unsophisticated sender-SMTP will be able to\n      determine its next action (proceed as planned, redo, retrench,\n      etc.) by simply examining this first digit.  A sender-SMTP that\n      wants to know approximately what kind of error occurred (e.g.,\n      mail system error, command syntax error) may examine the second\n      digit, reserving the third digit for the finest gradation of\n      information.\n\n         There are five values for the first digit of the reply code:\n\n            1yz   Positive Preliminary reply\n\n               The command has been accepted, but the requested action\n               is being held in abeyance, pending confirmation of the\n               information in this reply.  The sender-SMTP should send\n               another command specifying whether to continue or abort\n               the action.\n\n                  [Note: SMTP does not have any commands that allow this\n                  type of reply, and so does not have the continue or\n                  abort commands.]\n\n            2yz   Positive Completion reply\n\n               The requested action has been successfully completed.  A\n               new request may be initiated.\n\n            3yz   Positive Intermediate reply\n\n               The command has been accepted, but the requested action\n               is being held in abeyance, pending receipt of further\n               information.  The sender-SMTP should send another command\n               specifying this information.  This reply is used in\n               command sequence groups.\n\n            4yz   Transient Negative Completion reply\n\n               The command was not accepted and the requested action did\n               not occur.  However, the error condition is temporary and\n               the action may be requested again.  The sender should\n\n\n\n[Page 48]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n               return to the beginning of the command sequence (if any).\n               It is difficult to assign a meaning to \"transient\" when\n               two different sites (receiver- and sender- SMTPs) must\n               agree on the interpretation.  Each reply in this category\n               might have a different time value, but the sender-SMTP is\n               encouraged to try again.  A rule of thumb to determine if\n               a reply fits into the 4yz or the 5yz category (see below)\n               is that replies are 4yz if they can be repeated without\n               any change in command form or in properties of the sender\n               or receiver.  (E.g., the command is repeated identically\n               and the receiver does not put up a new implementation.)\n\n            5yz   Permanent Negative Completion reply\n\n               The command was not accepted and the requested action did\n               not occur.  The sender-SMTP is discouraged from repeating\n               the exact request (in the same sequence).  Even some\n               \"permanent\" error conditions can be corrected, so the\n               human user may want to direct the sender-SMTP to\n               reinitiate the command sequence by direct action at some\n               point in the future (e.g., after the spelling has been\n               changed, or the user has altered the account status).\n\n         The second digit encodes responses in specific categories:\n\n            x0z   Syntax -- These replies refer to syntax errors,\n                  syntactically correct commands that don't fit any\n                  functional category, and unimplemented or superfluous\n                  commands.\n\n            x1z   Information --  These are replies to requests for\n                  information, such as status or help.\n\n            x2z   Connections -- These are replies referring to the\n                  transmission channel.\n\n            x3z   Unspecified as yet.\n\n            x4z   Unspecified as yet.\n\n            x5z   Mail system -- These replies indicate the status of\n                  the receiver mail system vis-a-vis the requested\n                  transfer or other mail system action.\n\n         The third digit gives a finer gradation of meaning in each\n         category specified by the second digit.  The list of replies\n\n\n\nPostel                                                         [Page 49]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         illustrates this.  Each reply text is recommended rather than\n         mandatory, and may even change according to the command with\n         which it is associated.  On the other hand, the reply codes\n         must strictly follow the specifications in this section.\n         Receiver implementations should not invent new codes for\n         slightly different situations from the ones described here, but\n         rather adapt codes already defined.\n\n         For example, a command such as NOOP whose successful execution\n         does not offer the sender-SMTP any new information will return\n         a 250 reply.  The response is 502 when the command requests an\n         unimplemented non-site-specific action.  A refinement of that\n         is the 504 reply for a command that is implemented, but that\n         requests an unimplemented parameter.\n\n      The reply text may be longer than a single line; in these cases\n      the complete text must be marked so the sender-SMTP knows when it\n      can stop reading the reply.  This requires a special format to\n      indicate a multiple line reply.\n\n         The format for multiline replies requires that every line,\n         except the last, begin with the reply code, followed\n         immediately by a hyphen, \"-\" (also known as minus), followed by\n         text.  The last line will begin with the reply code, followed\n         immediately by <SP>, optionally some text, and <CRLF>.\n\n            For example:\n                                123-First line\n                                123-Second line\n                                123-234 text beginning with numbers\n                                123 The last line\n\n         In many cases the sender-SMTP then simply needs to search for\n         the reply code followed by <SP> at the beginning of a line, and\n         ignore all preceding lines.  In a few cases, there is important\n         data for the sender in the reply \"text\".  The sender will know\n         these cases from the current context.\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 50]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\nAPPENDIX F\n\n   Scenarios\n\n      This section presents complete scenarios of several types of SMTP\n      sessions.\n\n   A Typical SMTP Transaction Scenario\n\n      This SMTP example shows mail sent by Smith at host USC-ISIF, to\n      Jones, Green, and Brown at host BBN-UNIX.  Here we assume that\n      host USC-ISIF contacts host BBN-UNIX directly.  The mail is\n      accepted for Jones and Brown.  Green does not have a mailbox at\n      host BBN-UNIX.\n\n      -------------------------------------------------------------\n\n         R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready\n         S: HELO USC-ISIF.ARPA\n         R: 250 BBN-UNIX.ARPA\n\n         S: MAIL FROM:<Smith@USC-ISIF.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Jones@BBN-UNIX.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Green@BBN-UNIX.ARPA>\n         R: 550 No such user here\n\n         S: RCPT TO:<Brown@BBN-UNIX.ARPA>\n         R: 250 OK\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: QUIT\n         R: 221 BBN-UNIX.ARPA Service closing transmission channel\n\n                               Scenario 1\n\n      -------------------------------------------------------------\n\n\n\nPostel                                                         [Page 51]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   Aborted SMTP Transaction Scenario\n\n      -------------------------------------------------------------\n\n         R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready\n         S: HELO ISI-VAXA.ARPA\n         R: 250 MIT-Multics.ARPA\n\n         S: MAIL FROM:<Smith@ISI-VAXA.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Jones@MIT-Multics.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Green@MIT-Multics.ARPA>\n         R: 550 No such user here\n\n         S: RSET\n         R: 250 OK\n\n         S: QUIT\n         R: 221 MIT-Multics.ARPA Service closing transmission channel\n\n                               Scenario 2\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 52]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   Relayed Mail Scenario\n\n      -------------------------------------------------------------\n\n         Step 1  --  Source Host to Relay Host\n\n            R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready\n            S: HELO MIT-AI.ARPA\n            R: 250 USC-ISIE.ARPA\n\n            S: MAIL FROM:<JQP@MIT-AI.ARPA>\n            R: 250 OK\n\n            S: RCPT TO:<@USC-ISIE.ARPA:Jones@BBN-VAX.ARPA>\n            R: 250 OK\n\n            S: DATA\n            R: 354 Start mail input; end with <CRLF>.<CRLF>\n            S: Date: 2 Nov 81 22:33:44\n            S: From: John Q. Public <JQP@MIT-AI.ARPA>\n            S: Subject:  The Next Meeting of the Board\n            S: To: Jones@BBN-Vax.ARPA\n            S:\n            S: Bill:\n            S: The next meeting of the board of directors will be\n            S: on Tuesday.\n            S:                                              John.\n            S: .\n            R: 250 OK\n\n            S: QUIT\n            R: 221 USC-ISIE.ARPA Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 53]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         Step 2  --  Relay Host to Destination Host\n\n            R: 220 BBN-VAX.ARPA Simple Mail Transfer Service Ready\n            S: HELO USC-ISIE.ARPA\n            R: 250 BBN-VAX.ARPA\n\n            S: MAIL FROM:<@USC-ISIE.ARPA:JQP@MIT-AI.ARPA>\n            R: 250 OK\n\n            S: RCPT TO:<Jones@BBN-VAX.ARPA>\n            R: 250 OK\n\n            S: DATA\n            R: 354 Start mail input; end with <CRLF>.<CRLF>\n            S: Received: from MIT-AI.ARPA by USC-ISIE.ARPA ;\n               2 Nov 81 22:40:10 UT\n            S: Date: 2 Nov 81 22:33:44\n            S: From: John Q. Public <JQP@MIT-AI.ARPA>\n            S: Subject:  The Next Meeting of the Board\n            S: To: Jones@BBN-Vax.ARPA\n            S:\n            S: Bill:\n            S: The next meeting of the board of directors will be\n            S: on Tuesday.\n            S:                                              John.\n            S: .\n            R: 250 OK\n\n            S: QUIT\n            R: 221 USC-ISIE.ARPA Service closing transmission channel\n\n                               Scenario 3\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 54]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   Verifying and Sending Scenario\n\n      -------------------------------------------------------------\n\n         R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready\n         S: HELO MIT-MC.ARPA\n         R: 250 SU-SCORE.ARPA\n\n         S: VRFY Crispin\n         R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>\n\n         S: SEND FROM:<EAK@MIT-MC.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>\n         R: 250 OK\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: QUIT\n         R: 221 SU-SCORE.ARPA Service closing transmission channel\n\n                               Scenario 4\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 55]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   Sending and Mailing Scenarios\n\n      First the user's name is verified, then  an attempt is made to\n      send to the user's terminal.  When that fails, the messages is\n      mailed to the user's mailbox.\n\n      -------------------------------------------------------------\n\n         R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready\n         S: HELO MIT-MC.ARPA\n         R: 250 SU-SCORE.ARPA\n\n         S: VRFY Crispin\n         R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>\n\n         S: SEND FROM:<EAK@MIT-MC.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>\n         R: 450 User not active now\n\n         S: RSET\n         R: 250 OK\n\n         S: MAIL FROM:<EAK@MIT-MC.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>\n         R: 250 OK\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: QUIT\n         R: 221 SU-SCORE.ARPA Service closing transmission channel\n\n                               Scenario 5\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n[Page 56]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n      Doing the preceding scenario more efficiently.\n\n      -------------------------------------------------------------\n\n         R: 220 SU-SCORE.ARPA Simple Mail Transfer Service Ready\n         S: HELO MIT-MC.ARPA\n         R: 250 SU-SCORE.ARPA\n\n         S: VRFY Crispin\n         R: 250 Mark Crispin <Admin.MRC@SU-SCORE.ARPA>\n\n         S: SOML FROM:<EAK@MIT-MC.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<Admin.MRC@SU-SCORE.ARPA>\n         R: 250 User not active now, so will do mail.\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: QUIT\n         R: 221 SU-SCORE.ARPA Service closing transmission channel\n\n                               Scenario 6\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 57]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   Mailing List Scenario\n\n      First each of two mailing lists are expanded in separate sessions\n      with different hosts.  Then the message is sent to everyone that\n      appeared on either list (but no duplicates) via a relay host.\n\n      -------------------------------------------------------------\n\n         Step 1  --  Expanding the First List\n\n            R: 220 MIT-AI.ARPA Simple Mail Transfer Service Ready\n            S: HELO SU-SCORE.ARPA\n            R: 250 MIT-AI.ARPA\n\n            S: EXPN Example-People\n            R: 250-<ABC@MIT-MC.ARPA>\n            R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>\n            R: 250-Xenon Y. Zither <XYZ@MIT-AI.ARPA>\n            R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\n            R: 250-<joe@foo-unix.ARPA>\n            R: 250 <xyz@bar-unix.ARPA>\n\n            S: QUIT\n            R: 221 MIT-AI.ARPA Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 58]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n         Step 2  --  Expanding the Second List\n\n            R: 220 MIT-MC.ARPA Simple Mail Transfer Service Ready\n            S: HELO SU-SCORE.ARPA\n            R: 250 MIT-MC.ARPA\n\n            S: EXPN Interested-Parties\n            R: 250-Al Calico <ABC@MIT-MC.ARPA>\n            R: 250-<XYZ@MIT-AI.ARPA>\n            R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\n            R: 250-<fred@BBN-UNIX.ARPA>\n            R: 250 <xyz@bar-unix.ARPA>\n\n            S: QUIT\n            R: 221 MIT-MC.ARPA Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 59]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n         Step 3  --  Mailing to All via a Relay Host\n\n            R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready\n            S: HELO SU-SCORE.ARPA\n            R: 250 USC-ISIE.ARPA\n\n            S: MAIL FROM:<Account.Person@SU-SCORE.ARPA>\n            R: 250 OK\n            S: RCPT TO:<@USC-ISIE.ARPA:ABC@MIT-MC.ARPA>\n            R: 250 OK\n            S: RCPT TO:<@USC-ISIE.ARPA:Fonebone@USC-ISIQA.ARPA>\n            R: 250 OK\n            S: RCPT TO:<@USC-ISIE.ARPA:XYZ@MIT-AI.ARPA>\n            R: 250 OK\n            S: RCPT\n                TO:<@USC-ISIE.ARPA,@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>\n            R: 250 OK\n            S: RCPT TO:<@USC-ISIE.ARPA:joe@FOO-UNIX.ARPA>\n            R: 250 OK\n            S: RCPT TO:<@USC-ISIE.ARPA:xyz@BAR-UNIX.ARPA>\n            R: 250 OK\n            S: RCPT TO:<@USC-ISIE.ARPA:fred@BBN-UNIX.ARPA>\n            R: 250 OK\n\n            S: DATA\n            R: 354 Start mail input; end with <CRLF>.<CRLF>\n            S: Blah blah blah...\n            S: ...etc. etc. etc.\n            S: .\n            R: 250 OK\n\n            S: QUIT\n            R: 221 USC-ISIE.ARPA Service closing transmission channel\n\n                               Scenario 7\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 60]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   Forwarding Scenarios\n\n      -------------------------------------------------------------\n\n         R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready\n         S: HELO LBL-UNIX.ARPA\n         R: 250 USC-ISIF.ARPA\n\n         S: MAIL FROM:<mo@LBL-UNIX.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<fred@USC-ISIF.ARPA>\n         R: 251 User not local; will forward to <Jones@USC-ISI.ARPA>\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: QUIT\n         R: 221 USC-ISIF.ARPA Service closing transmission channel\n\n                               Scenario 8\n\n      -------------------------------------------------------------\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPostel                                                         [Page 61]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n      -------------------------------------------------------------\n\n         Step 1  --  Trying the Mailbox at the First Host\n\n            R: 220 USC-ISIF.ARPA Simple Mail Transfer Service Ready\n            S: HELO LBL-UNIX.ARPA\n            R: 250 USC-ISIF.ARPA\n\n            S: MAIL FROM:<mo@LBL-UNIX.ARPA>\n            R: 250 OK\n\n            S: RCPT TO:<fred@USC-ISIF.ARPA>\n            R: 251 User not local; will forward to <Jones@USC-ISI.ARPA>\n\n            S: RSET\n            R: 250 OK\n\n            S: QUIT\n            R: 221 USC-ISIF.ARPA Service closing transmission channel\n\n         Step 2  --  Delivering the Mail at the Second Host\n\n            R: 220 USC-ISI.ARPA Simple Mail Transfer Service Ready\n            S: HELO LBL-UNIX.ARPA\n            R: 250 USC-ISI.ARPA\n\n            S: MAIL FROM:<mo@LBL-UNIX.ARPA>\n            R: 250 OK\n\n            S: RCPT TO:<Jones@USC-ISI.ARPA>\n            R: OK\n\n            S: DATA\n            R: 354 Start mail input; end with <CRLF>.<CRLF>\n            S: Blah blah blah...\n            S: ...etc. etc. etc.\n            S: .\n            R: 250 OK\n\n            S: QUIT\n            R: 221 USC-ISI.ARPA Service closing transmission channel\n\n                               Scenario 9\n\n      -------------------------------------------------------------\n\n\n\n\n[Page 62]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   Too Many Recipients Scenario\n\n      -------------------------------------------------------------\n\n         R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready\n         S: HELO USC-ISIF.ARPA\n         R: 250 BERKELEY.ARPA\n\n         S: MAIL FROM:<Postel@USC-ISIF.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<fabry@BERKELEY.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<eric@BERKELEY.ARPA>\n         R: 552 Recipient storage full, try again in another transaction\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: MAIL FROM:<Postel@USC-ISIF.ARPA>\n         R: 250 OK\n\n         S: RCPT TO:<eric@BERKELEY.ARPA>\n         R: 250 OK\n\n         S: DATA\n         R: 354 Start mail input; end with <CRLF>.<CRLF>\n         S: Blah blah blah...\n         S: ...etc. etc. etc.\n         S: .\n         R: 250 OK\n\n         S: QUIT\n         R: 221 BERKELEY.ARPA Service closing transmission channel\n\n                              Scenario 10\n\n      -------------------------------------------------------------\n\n      Note that a real implementation must handle many recipients as\n      specified in Section 4.5.3.\n\n\n\nPostel                                                         [Page 63]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\nGLOSSARY\n\n   ASCII\n\n      American Standard Code for Information Interchange [1].\n\n   command\n\n      A request for a mail service action sent by the sender-SMTP to the\n      receiver-SMTP.\n\n   domain\n\n      The hierarchially structured global character string address of a\n      host computer in the mail system.\n\n   end of mail data indication\n\n      A special sequence of characters that indicates the end of the\n      mail data.  In particular, the five characters carriage return,\n      line feed, period, carriage return, line feed, in that order.\n\n   host\n\n      A computer in the internetwork environment on which mailboxes or\n      SMTP processes reside.\n\n   line\n\n      A a sequence of ASCII characters ending with a <CRLF>.\n\n   mail data\n\n      A sequence of ASCII characters of arbitrary length, which conforms\n      to the standard set in the Standard for the Format of ARPA\n      Internet Text Messages (RFC 822 [2]).\n\n   mailbox\n\n      A character string (address) which identifies a user to whom mail\n      is to be sent.  Mailbox normally consists of the host and user\n      specifications.  The standard mailbox naming convention is defined\n      to be \"user@domain\".  Additionally, the \"container\" in which mail\n      is stored.\n\n\n\n\n\n[Page 64]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\n   receiver-SMTP process\n\n      A process which transfers mail in cooperation with a sender-SMTP\n      process.  It waits for a connection to be established via the\n      transport service.  It receives SMTP commands from the\n      sender-SMTP, sends replies, and performs the specified operations.\n\n   reply\n\n      A reply is an acknowledgment (positive or negative) sent from\n      receiver to sender via the transmission channel in response to a\n      command.  The general form of a reply is a completion code\n      (including error codes) followed by a text string.  The codes are\n      for use by programs and the text is usually intended for human\n      users.\n\n   sender-SMTP process\n\n      A process which transfers mail in cooperation with a receiver-SMTP\n      process.  A local language may be used in the user interface\n      command/reply dialogue.  The sender-SMTP initiates the transport\n      service connection.  It initiates SMTP commands, receives replies,\n      and governs the transfer of mail.\n\n   session\n\n      The set of exchanges that occur while the transmission channel is\n      open.\n\n   transaction\n\n      The set of exchanges required for one message to be transmitted\n      for one or more recipients.\n\n   transmission channel\n\n      A full-duplex communication path between a sender-SMTP and a\n      receiver-SMTP for the exchange of commands, replies, and mail\n      text.\n\n   transport service\n\n      Any reliable stream-oriented data communication services.  For\n      example, NCP, TCP, NITS.\n\n\n\n\n\nPostel                                                         [Page 65]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   user\n\n      A human being (or a process on behalf of a human being) wishing to\n      obtain mail transfer service.  In addition, a recipient of\n      computer mail.\n\n   word\n\n      A sequence of printing characters.\n\n   <CRLF>\n\n      The characters carriage return and line feed (in that order).\n\n   <SP>\n\n      The space character.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 66]                                                         Postel\n\f\n\n                                                                        \nRFC 821                                                      August 1982\n                                           Simple Mail Transfer Protocol\n\n\n\nREFERENCES\n\n   [1]  ASCII\n\n      ASCII, \"USA Code for Information Interchange\", United States of\n      America Standards Institute, X3.4, 1968.  Also in:  Feinler, E.\n      and J. Postel, eds., \"ARPANET Protocol Handbook\", NIC 7104, for\n      the Defense Communications Agency by SRI International, Menlo\n      Park, California, Revised January 1978.\n\n   [2]  RFC 822\n\n      Crocker, D., \"Standard for the Format of ARPA Internet Text\n      Messages,\" RFC 822, Department of Electrical Engineering,\n      University of Delaware, August 1982.\n\n   [3]  TCP\n\n      Postel, J., ed., \"Transmission Control Protocol - DARPA Internet\n      Program Protocol Specification\", RFC 793, USC/Information Sciences\n      Institute, NTIS AD Number A111091, September 1981.  Also in:\n      Feinler, E. and J. Postel, eds., \"Internet Protocol Transition\n      Workbook\", SRI International, Menlo Park, California, March 1982.\n\n   [4]  NCP\n\n      McKenzie,A., \"Host/Host Protocol for the ARPA Network\", NIC 8246,\n      January 1972.  Also in:  Feinler, E. and J. Postel, eds., \"ARPANET\n      Protocol Handbook\", NIC 7104, for the Defense Communications\n      Agency by SRI International, Menlo Park, California, Revised\n      January 1978.\n\n   [5]  Initial Connection Protocol\n\n      Postel, J., \"Official Initial Connection Protocol\", NIC 7101,\n      11 June 1971.  Also in:  Feinler, E. and J. Postel, eds., \"ARPANET\n      Protocol Handbook\", NIC 7104, for the Defense Communications\n      Agency by SRI International, Menlo Park, California, Revised\n      January 1978.\n\n   [6]  NITS\n\n      PSS/SG3, \"A Network Independent Transport Service\", Study Group 3,\n      The Post Office PSS Users Group, February 1980.  Available from\n      the DCPU, National Physical Laboratory, Teddington, UK.\n\n\n\n\nPostel                                                         [Page 67]\n\f\n\n                                                                        \nAugust 1982                                                      RFC 821\nSimple Mail Transfer Protocol                                           \n\n\n\n   [7]  X.25\n\n      CCITT, \"Recommendation X.25 - Interface Between Data Terminal\n      Equipment (DTE) and Data Circuit-terminating Equipment (DCE) for\n      Terminals Operating in the Packet Mode on Public Data Networks,\"\n      CCITT Orange Book, Vol. VIII.2, International Telephone and\n      Telegraph Consultative Committee, Geneva, 1976.\n\n         \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[Page 68]                                                         Postel\n\f\n"
  },
  {
    "path": "rfc/rfc1652.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                               J. Klensin, WG Chair\nRequest for Comments: 1652                                           MCI\nObsoletes: 1426                                         N. Freed, Editor\nCategory: Standards Track                                       Innosoft\n                                                                 M. Rose\n                                            Dover Beach Consulting, Inc.\n                                                            E. Stefferud\n                                     Network Management Associates, Inc.\n                                                              D. Crocker\n                                                  Silicon Graphics, Inc.\n                                                               July 1994\n\n\n             SMTP Service Extension for 8bit-MIMEtransport\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   This memo defines an extension to the SMTP service whereby an SMTP\n   content body consisting of text containing octets outside of the US-\n   ASCII octet range (hex 00-7F) may be relayed using SMTP.\n\n1.  Introduction\n\n   Although SMTP is widely and robustly deployed, various extensions\n   have been requested by parts of the Internet community. In\n   particular, a significant portion of the Internet community wishes to\n   exchange messages in which the content body consists of a MIME\n   message [3] containing arbitrary octet-aligned material. This memo\n   uses the mechanism described in [5] to define an extension to the\n   SMTP service whereby such contents may be exchanged. Note that this\n   extension does NOT eliminate the possibility of an SMTP server\n   limiting line length; servers are free to implement this extension\n   but nevertheless set a line length limit no lower than 1000 octets.\n   Given that this restriction still applies, this extension does NOT\n   provide a means for transferring unencoded binary via SMTP.\n\n\n\n\n\n\n\n\nKlensin, Freed, Rose, Stefferud & Crocker                       [Page 1]\n\f\nRFC 1652                SMTP 8bit-MIMEtransport                July 1994\n\n\n2.  Framework for the 8bit MIME Transport Extension\n\n   The 8bit MIME transport extension is laid out as follows:\n\n      (1)  the name of the SMTP service extension defined here is\n           8bit-MIMEtransport;\n\n      (2)  the EHLO keyword value associated with the extension is\n           8BITMIME;\n\n      (3)  no parameter is used with the 8BITMIME EHLO keyword;\n\n      (4)  one optional parameter using the keyword BODY is added to\n           the MAIL FROM command.  The value associated with this\n           parameter is a keyword indicating whether a 7bit message\n           (in strict compliance with [1]) or a MIME message (in\n           strict compliance with [3]) with arbitrary octet content\n           is being sent. The syntax of the value is as follows,\n           using the ABNF notation of [2]:\n\n                body-value ::= \"7BIT\" / \"8BITMIME\"\n\n      (5)  no additional SMTP verbs are defined by this extension;\n           and,\n\n      (6)  the next section specifies how support for the extension\n           affects the behavior of a server and client SMTP.\n\n3.  The 8bit-MIMEtransport service extension\n\n   When a client SMTP wishes to submit (using the MAIL command) a\n   content body consisting of a MIME message containing arbitrary lines\n   of octet-aligned material, it first issues the EHLO command to the\n   server SMTP. If the server SMTP responds with code 250 to the EHLO\n   command, and the response includes the EHLO keyword value 8BITMIME,\n   then the server SMTP is indicating that it supports the extended MAIL\n   command and will accept MIME messages containing arbitrary octet-\n   aligned material.\n\n   The extended MAIL command is issued by a client SMTP when it wishes\n   to transmit a content body consisting of a MIME message containing\n   arbitrary lines of octet-aligned material. The syntax for this\n   command is identical to the MAIL command in [1], except that a BODY\n   parameter must appear after the address.  Only one BODY parameter may\n   be used in a single MAIL command.\n\n\n\n\n\n\nKlensin, Freed, Rose, Stefferud & Crocker                       [Page 2]\n\f\nRFC 1652                SMTP 8bit-MIMEtransport                July 1994\n\n\n   The complete syntax of this extended command is defined in [5]. The\n   esmtp-keyword is BODY and the syntax for esmtp-value is given by the\n   syntax for body-value shown above.\n\n   The value associated with the BODY parameter indicates whether the\n   content body which will be passed using the DATA command consists of\n   a MIME message containing some arbitrary octet-aligned material\n   (\"8BITMIME\") or is encoded entirely in accordance with [1] (\"7BIT\").\n\n   A server which supports the 8-bit MIME transport service extension\n   shall preserve all bits in each octet passed using the DATA command.\n\n   Naturally, the usual SMTP data-stuffing algorithm applies so that a\n   content which contains the five-character sequence of\n\n     <CR> <LF> <DOT> <CR> <LF>\n\n   or a content that begins with the three-character sequence of\n\n     <DOT> <CR> <LF>\n\n   does not prematurely terminate the transfer of the content.  Further,\n   it should be noted that the CR-LF pair immediately preceeding the\n   final dot is considered part of the content.  Finally, although the\n   content body contains arbitrary lines of octet-aligned material, the\n   length of each line (number of octets between two CR-LF pairs), is\n   still subject to SMTP server line length restrictions (which may\n   allow as few as 1000 octets on a single line). This restriction means\n   that this extension MAY provide the necessary facilities for\n   transferring a MIME object with the 8BIT content-transfer-encoding,\n   it DOES NOT provide a means of transferring an object with the BINARY\n   content-transfer-encoding.\n\n   Once a server SMTP supporting the 8bit-MIMEtransport service\n   extension accepts a content body containing octets with the high-\n   order (8th) bit set, the server SMTP must deliver or relay the\n   content in such a way as to preserve all bits in each octet.\n\n   If a server SMTP does not support the 8-bit MIME transport extension\n   (either by not responding with code 250 to the EHLO command, or by\n   not including the EHLO keyword value 8BITMIME in its response), then\n   the client SMTP must not, under any circumstances, attempt to\n   transfer a content which contains characters outside the US-ASCII\n   octet range (hex 00-7F).\n\n   A client SMTP has two options in this case: first, it may implement a\n   gateway transformation to convert the message into valid 7bit MIME,\n   or second, or may treat this as a permanent error and handle it in\n\n\n\nKlensin, Freed, Rose, Stefferud & Crocker                       [Page 3]\n\f\nRFC 1652                SMTP 8bit-MIMEtransport                July 1994\n\n\n   the usual manner for delivery failures.  The specifics of the\n   transformation from 8bit MIME to 7bit MIME are not described by this\n   RFC; the conversion is nevertheless constrained in the following\n   ways:\n\n      (1)  it must cause no loss of information; MIME transport\n           encodings must be employed as needed to insure this is\n           the case, and\n\n      (2)  the resulting message must be valid 7bit MIME.\n\n4.  Usage Example\n\n   The following dialogue illustrates the use of the 8bit-MIMEtransport\n   service extension:\n\n   S: <wait for connection on TCP port 25>\n   C: <open connection to server>\n   S: 220 dbc.mtview.ca.us SMTP service ready\n   C: EHLO ymir.claremont.edu\n   S: 250-dbc.mtview.ca.us says hello\n   S: 250 8BITMIME\n   C: MAIL FROM:<ned@ymir.claremont.edu> BODY=8BITMIME\n   S: 250 <ned@ymir.claremont.edu>... Sender and 8BITMIME ok\n   C: RCPT TO:<mrose@dbc.mtview.ca.us>\n   S: 250 <mrose@dbc.mtview.ca.us>... Recipient ok\n   C: DATA\n   S: 354 Send 8BITMIME message, ending in CRLF.CRLF.\n    ...\n   C: .\n   S: 250 OK\n   C: QUIT\n   S: 250 Goodbye\n\n5.  Security Considerations\n\n   This RFC does not discuss security issues and is not believed to\n   raise any security issues not already endemic in electronic mail and\n   present in fully conforming implementations of [1].\n\n6.  Acknowledgements\n\n   This document represents a synthesis of the ideas of many people and\n   reactions to the ideas and proposals of others.  Randall Atkinson,\n   Craig Everhart, Risto Kankkunen, and Greg Vaudreuil contributed ideas\n   and text sufficient to be considered co-authors.  Other important\n   suggestions, text, or encouragement came from Harald Alvestrand, Jim\n   Conklin, Mark Crispin, Frank da Cruz, 'Olafur Gudmundsson, Per\n\n\n\nKlensin, Freed, Rose, Stefferud & Crocker                       [Page 4]\n\f\nRFC 1652                SMTP 8bit-MIMEtransport                July 1994\n\n\n   Hedeland, Christian Huitma, Neil Katin, Eliot Lear, Harold A.\n   Miller, Keith Moore, Dan Oscarsson, Julian Onions, Neil Rickert, John\n   Wagner, Rayan Zachariassen, and the contributions of the entire IETF\n   SMTP Working Group. Of course, none of the individuals are\n   necessarily responsible for the combination of ideas represented\n   here. Indeed, in some cases, the response to a particular criticism\n   was to accept the problem identification but to include an entirely\n   different solution from the one originally proposed.\n\n7.  References\n\n   [1] Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC 821,\n       USC/Information Sciences Institute, August 1982.\n\n   [2] Crocker, D., \"Standard for the Format of ARPA Internet Text\n       Messages\", STD 11, RFC 822, UDEL, August 1982.\n\n   [3] Borenstein, N., and N. Freed, \"Multipurpose Internet Mail\n       Extensions\", RFC 1521, Bellcore, Innosoft, September 1993.\n\n   [4] Moore, K., \"Representation of Non-ASCII Text in Internet Message\n       Headers\", RFC 1522, University of Tennessee, September 1993.\n\n   [5] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D. Crocker,\n       \"SMTP Service Extensions\", RFC 1651, MCI, Innosoft, Dover Beach\n       Consulting, Inc., Network Management Associates, Inc., Silicon\n       Graphics, Inc., July 1994.\n\n   [6] Partridge, C., \"Mail Routing and the Domain System\", STD 14, RFC\n       974, BBN, January 1986.\n\n8.  Chair, Editor, and Authors' Addresses\n\n   John Klensin, WG Chair\n   MCI Data Services Division\n   2100 Reston Parkway, 6th floor\n   Reston, VA 22091\n   USA\n\n   Phone:: 1 703 715 7361\n   Fax: +1 703 715 7435\n   EMail: klensin@mci.net\n\n\n\n\n\n\n\n\n\nKlensin, Freed, Rose, Stefferud & Crocker                       [Page 5]\n\f\nRFC 1652                SMTP 8bit-MIMEtransport                July 1994\n\n\n   Ned Freed, Editor\n   Innosoft International, Inc.\n   1050 East Garvey Avenue South\n   West Covina, CA 91790\n   USA\n\n   Phone:: +1 818 919 3600\n   Fax: +1 818 919 3614\n   EMail: ned@innosoft.com\n\n\n   Marshall T. Rose\n   Dover Beach Consulting, Inc.\n   420 Whisman Court\n   Moutain View, CA  94043-2186\n   USA\n\n   Phone: +1 415 968 1052\n   Fax: +1 415 968 2510\n   EMail: mrose@dbc.mtview.ca.us\n\n\n   Einar A. Stefferud\n   Network Management Associates, Inc.\n   17301 Drey Lane\n   Huntington Beach, CA, 92647-5615\n   USA\n\n   Phone: +1 714 842 3711\n   Fax: +1 714 848 2091\n   EMail: stef@nma.com\n\n\n   Dave Crocker\n   Silicon Graphics, Inc.\n   2011 N. Shoreline Blvd.\n   P.O. Box 7311\n   Mountain View, CA 94039\n   USA\n\n   Phone: +1 415 390 1804\n   Fax: +1 415 962 8404\n   EMail: dcrocker@sgi.com\n\n\n\n\n\n\n\n\nKlensin, Freed, Rose, Stefferud & Crocker                       [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc1730.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         M. Crispin\nRequest for Comments: 1730                      University of Washington\nCategory: Standards Track                                  December 1994\n\n\n              INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4\n\n\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n\nAbstract\n\n   The Internet Message Access Protocol, Version 4 (IMAP4) allows a\n   client to access and manipulate electronic mail messages on a server.\n   IMAP4 permits manipulation of remote message folders, called\n   \"mailboxes\", in a way that is functionally equivalent to local\n   mailboxes.  IMAP4 also provides the capability for an offline client\n   to resynchronize with the server (see also [IMAP-DISC]).\n\n   IMAP4 includes operations for creating, deleting, and renaming\n   mailboxes; checking for new messages; permanently removing messages;\n   setting and clearing flags; RFC 822 and MIME parsing; searching; and\n   selective fetching of message attributes, texts, and portions\n   thereof.  Messages in IMAP4 are accessed by the use of numbers.\n   These numbers are either message sequence numbers (relative position\n   from 1 to the number of messages in the mailbox) or unique\n   identifiers (immutable, strictly ascending values assigned to each\n   message, but which are not necessarily contiguous).\n\n   IMAP4 supports a single server.  A mechanism for supporting multiple\n   IMAP4 servers is discussed in [IMSP].\n\n   IMAP4 does not specify a means of posting mail; this function is\n   handled by a mail transfer protocol such as [SMTP].\n\n   IMAP4 is designed to be upwards compatible from the [IMAP2] protocol.\n   Compatibility issues are discussed in [IMAP-COMPAT].\n\n\n\n\n\n\nCrispin                                                         [Page i]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n\n\n\nTable of Contents\n\n\n\nIMAP4 Protocol Specification ......................................    1\n1.      Organization of this Document .............................    1\n1.1.    How to Read This Document .................................    1\n1.2.    Conventions Used in this Document .........................    1\n2.      Protocol Overview .........................................    1\n2.1.    Link Level ................................................    1\n2.2.    Commands and Responses ....................................    1\n2.2.1.  Client Protocol Sender and Server Protocol Receiver .......    2\n2.2.2.  Server Protocol Sender and Client Protocol Receiver .......    2\n3.      State and Flow Diagram ....................................    4\n3.1.    Non-Authenticated State ...................................    4\n3.2.    Authenticated State .......................................    4\n3.3.    Selected State ............................................    4\n3.4.    Logout State ..............................................    4\n4.      Data Formats ..............................................    6\n4.1.    Atom ......................................................    6\n4.2.    Number ....................................................    6\n4.3.    String ....................................................    6\n4.3.1.  8-bit and Binary Strings ..................................    7\n4.4.    Parenthesized List ........................................    7\n4.5.    NIL .......................................................    7\n5.      Operational Considerations ................................    8\n5.1.    Mailbox Naming ............................................    8\n5.2.    Mailbox Size and Message Status Updates ...................    8\n5.3.    Response when no Command in Progress ......................    8\n5.4.    Autologout Timer ..........................................    9\n5.5.    Multiple Commands in Progress .............................    9\n6.      Client Commands ...........................................   10\n6.1.    Client Commands - Any State ...............................   10\n6.1.1.  CAPABILITY Command ........................................   10\n6.1.2.  NOOP Command ..............................................   11\n6.1.3.  LOGOUT Command ............................................   11\n6.2.    Client Commands - Non-Authenticated State .................   12\n6.2.1.  AUTHENTICATE Command ......................................   12\n6.2.2.  LOGIN Command .............................................   14\n6.3.    Client Commands - Authenticated State .....................   14\n6.3.1.  SELECT Command ............................................   15\n6.3.2.  EXAMINE Command ...........................................   16\n6.3.3.  CREATE Command ............................................   17\n6.3.4.  DELETE Command ............................................   18\n6.3.5.  RENAME Command ............................................   18\n\n\n\nCrispin                                                        [Page ii]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.3.6.  SUBSCRIBE Command .........................................   19\n6.3.7.  UNSUBSCRIBE Command .......................................   19\n6.3.8.  LIST Command ..............................................   20\n6.3.9.  LSUB Command ..............................................   22\n6.3.10. APPEND Command ............................................   22\n6.4.    Client Commands - Selected State ..........................   23\n6.4.1.  CHECK Command .............................................   23\n6.4.2.  CLOSE Command .............................................   24\n6.4.3.  EXPUNGE Command ...........................................   25\n6.4.4.  SEARCH Command ............................................   25\n6.4.5.  FETCH Command .............................................   29\n6.4.6.  PARTIAL Command ...........................................   32\n6.4.7.  STORE Command .............................................   33\n6.4.8.  COPY Command ..............................................   34\n6.4.9.  UID Command ...............................................   35\n6.5.    Client Commands - Experimental/Expansion ..................   37\n6.5.1.  X<atom> Command ...........................................   37\n7.      Server Responses ..........................................   38\n7.1.    Server Responses - Status Responses .......................   39\n7.1.1.  OK Response ...............................................   40\n7.1.2.  NO Response ...............................................   40\n7.1.3.  BAD Response ..............................................   41\n7.1.4.  PREAUTH Response ..........................................   41\n7.1.5.  BYE Response ..............................................   41\n7.2.    Server Responses - Server and Mailbox Status ..............   42\n7.2.1.  CAPABILITY Response .......................................   42\n7.2.2.  LIST Response .............................................   43\n7.2.3.  LSUB Response .............................................   44\n7.2.4.  SEARCH Response ...........................................   44\n7.2.5.  FLAGS Response ............................................   44\n7.3.    Server Responses - Message Status .........................   45\n7.3.1.  EXISTS Response ...........................................   45\n7.3.2.  RECENT Response ...........................................   45\n7.3.3.  EXPUNGE Response ..........................................   45\n7.3.4.  FETCH Response ............................................   46\n7.3.5.  Obsolete Responses ........................................   51\n7.4.    Server Responses - Command Continuation Request ...........   51\n8.      Sample IMAP4 session ......................................   52\n9.      Formal Syntax .............................................   53\n10.     Author's Note .............................................   64\n11.     Security Considerations ...................................   64\n12.     Author's Address ..........................................   64\nAppendices ........................................................   65\nA.      Obsolete Commands .........................................   65\nA.6.3.OBS.1.    FIND ALL.MAILBOXES Command ........................   65\nA.6.3.OBS.2.    FIND MAILBOXES Command ............................   65\nA.6.3.OBS.3.    SUBSCRIBE MAILBOX Command .........................   66\nA.6.3.OBS.4.    UNSUBSCRIBE MAILBOX Command .......................   66\n\n\n\nCrispin                                                       [Page iii]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nB.      Obsolete Responses ........................................   68\nB.7.2.OBS.1.    MAILBOX Response ..................................   68\nB.7.3.OBS.1.    COPY Response .....................................   68\nB.7.3.OBS.2.    STORE Response ....................................   69\nC.      References ................................................   70\nE.      IMAP4 Keyword Index .......................................   71\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page iv]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nIMAP4 Protocol Specification\n\n1.      Organization of this Document\n\n1.1.    How to Read This Document\n\n   This document is written from the point of view of the implementor of\n   an IMAP4 client or server.  Beyond the protocol overview in section\n   2, it is not optimized for someone trying to understand the operation\n   of the protocol.  The material in sections 3 through 5 provides the\n   general context and definitions with which IMAP4 operates.\n\n   Sections 6, 7, and 9 describe the IMAP commands, responses, and\n   syntax, respectively.  The relationships among these are such that it\n   is almost impossible to understand any of them separately.  In\n   particular, one should not attempt to deduce command syntax from the\n   command section alone; one should instead refer to the formal syntax\n   section.\n\n\n1.2.    Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n\n2.      Protocol Overview\n\n2.1.    Link Level\n\n   The IMAP4 protocol assumes a reliable data stream such as provided by\n   TCP.  When TCP is used, an IMAP4 server listens on port 143.\n\n\n2.2.    Commands and Responses\n\n   An IMAP4 session consists of the establishment of a client/server\n   connection, an initial greeting from the server, and client/server\n   interactions.  These client/server interactions consist of a client\n   command, server data, and a server completion result response.\n\n   All interactions transmitted by client and server are in the form of\n   lines; that is, strings that end with a CRLF.  The protocol receiver\n   of an IMAP4 client or server is either reading a line, or is reading\n   a sequence of octets with a known count followed by a line.\n\n\n\n\n\n\nCrispin                                                         [Page 1]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n2.2.1.  Client Protocol Sender and Server Protocol Receiver\n\n   The client command begins an operation.  Each client command is\n   prefixed with a identifier (typically a short alphanumeric string,\n   e.g. A0001, A0002, etc.) called a \"tag\".  A different tag is\n   generated by the client for each command.\n\n   There are two cases in which a line from the client does not\n   represent a complete command.  In one case, a command argument is\n   quoted with an octet count (see the description of literal in String\n   under Data Formats); in the other case, the command arguments require\n   server feedback (see the AUTHENTICATE command).  In either case, the\n   server sends a command continuation request response if it is ready\n   for the octets (if appropriate) and the remainder of the command.\n   This response is prefixed with the token \"+\".\n\n        Note: If, instead, the server detected an error in the\n        command, it sends a BAD completion response with tag\n        matching the command (as described below) to reject the\n        command and prevent the client from sending any more of the\n        command.\n\n        It is also possible for the server to send a completion\n        response for some other command (if multiple commands are\n        in progress), or untagged data.  In either case, the\n        command continuation request is still pending; the client\n        takes the appropriate action for the response, and reads\n        another response from the server.\n\n   The protocol receiver of an IMAP4 server reads a command line from\n   the client, parses the command and its arguments, and transmits\n   server data and a server command completion result response.\n\n\n2.2.2.  Server Protocol Sender and Client Protocol Receiver\n\n   Data transmitted by the server to the client and status responses\n   that do not indicate command completion are prefixed with the token\n   \"*\", and are called untagged responses.\n\n   Server data may be sent as a result of a client command, or may be\n   sent unilaterally by the server.  There is no syntactic difference\n   between server data that resulted from a specific command and server\n   data that were sent unilaterally.\n\n   The server completion result response indicates the success or\n   failure of the operation.  It is tagged with the same tag as the\n   client command which began the operation.  Thus, if more than one\n\n\n\nCrispin                                                         [Page 2]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   command is in progress, the tag in a server completion response\n   identifies the command to which the response applies.  There are\n   three possible server completion responses: OK (indicating success),\n   NO (indicating failure), or BAD (indicating protocol error such as\n   unrecognized command or command syntax error).\n\n   The protocol receiver of an IMAP4 client reads a response line from\n   the server.  It then takes action on the response based upon the\n   first token of the response, which may be a tag, a \"*\", or a \"+\".  As\n   described above.\n\n   A client MUST be prepared to accept any server response at all times.\n   This includes server data that it may not have requested.  Server\n   data SHOULD be recorded, so that the client can reference its\n   recorded copy rather than sending a command to the server to request\n   the data.  In the case of certain server data, recording the data is\n   mandatory.\n\n   This topic is discussed in greater detail in the Server Responses\n   section.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                         [Page 3]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n3.      State and Flow Diagram\n\n   An IMAP4 server is in one of four states.  Most commands are valid in\n   only certain states.  It is a protocol error for the client to\n   attempt a command while the command is in an inappropriate state.  In\n   this case, a server will respond with a BAD or NO (depending upon\n   server implementation) command completion result.\n\n\n3.1.    Non-Authenticated State\n\n   In non-authenticated state, the user must supply authentication\n   credentials before most commands will be permitted.  This state is\n   entered when a connection starts unless the connection has been\n   pre-authenticated.\n\n\n3.2.    Authenticated State\n\n   In authenticated state, the user is authenticated and must select a\n   mailbox to access before commands that affect messages will be\n   permitted.  This state is entered when a pre-authenticated connection\n   starts, when acceptable authentication credentials have been\n   provided, or after an error in selecting a mailbox.\n\n\n3.3.    Selected State\n\n   In selected state, a mailbox has been selected to access.  This state\n   is entered when a mailbox has been successfully selected.\n\n\n3.4.    Logout State\n\n   In logout state, the session is being terminated, and the server will\n   close the connection.  This state can be entered as a result of a\n   client request or by unilateral server decision.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                         [Page 4]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n            +--------------------------------------+\n            |initial connection and server greeting|\n            +--------------------------------------+\n                      || (1)       || (2)        || (3)\n                      VV           ||            ||\n            +-----------------+    ||            ||\n            |non-authenticated|    ||            ||\n            +-----------------+    ||            ||\n             || (7)   || (4)       ||            ||\n             ||       VV           VV            ||\n             ||     +----------------+           ||\n             ||     | authenticated  |<=++       ||\n             ||     +----------------+  ||       ||\n             ||       || (7)   || (5)   || (6)   ||\n             ||       ||       VV       ||       ||\n             ||       ||    +--------+  ||       ||\n             ||       ||    |selected|==++       ||\n             ||       ||    +--------+           ||\n             ||       ||       || (7)            ||\n             VV       VV       VV                VV\n            +--------------------------------------+\n            |     logout and close connection      |\n            +--------------------------------------+\n\n         (1) connection without pre-authentication (OK greeting)\n         (2) pre-authenticated connection (PREAUTH greeting)\n         (3) rejected connection (BYE greeting)\n         (4) successful LOGIN or AUTHENTICATE command\n         (5) successful SELECT or EXAMINE command\n         (6) CLOSE command, or failed SELECT or EXAMINE command\n         (7) LOGOUT command, server shutdown, or connection closed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                         [Page 5]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n4.      Data Formats\n\n   IMAP4 uses textual commands and responses.  Data in IMAP4 can be in\n   one of several forms: atom, number, string, parenthesized list, or\n   NIL.\n\n\n4.1.    Atom\n\n   An atom consists of one or more non-special characters.\n\n\n4.2.    Number\n\n   A number consists of one or more digit characters, and represents a\n   numeric value.\n\n\n4.3.    String\n\n   A string is in one of two forms: literal and quoted string.  The\n   literal form is the general form of string.  The quoted string form\n   is an alternative that avoids the overhead of processing a literal at\n   the cost of restrictions of what may be in a quoted string.\n\n   A literal is a sequence of zero or more octets (including CR and LF),\n   prefix-quoted with an octet count in the form of an open brace (\"{\"),\n   the number of octets, close brace (\"}\"), and CRLF.  In the case of\n   literals transmitted from server to client, the CRLF is immediately\n   followed by the octet data.  In the case of literals transmitted from\n   client to server, the client must wait to receive a command\n   continuation request (described later in this document) before\n   sending the octet data (and the remainder of the command).\n\n   A quoted string is a sequence of zero or more 7-bit characters,\n   excluding CR and LF, with double quote (<\">) characters at each end.\n\n   The empty string is respresented as either \"\" (a quoted string with\n   zero characters between double quotes) or as {0} followed by CRLF (a\n   literal with an octet count of 0).\n\n        Note: Even if the octet count is 0, a client transmitting a\n        literal must wait to receive a command continuation\n        request.\n\n\n\n\n\n\n\nCrispin                                                         [Page 6]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n4.3.1.  8-bit and Binary Strings\n\n   8-bit textual and binary mail is supported through the use of\n   [MIME-1] encoding.  IMAP4 implementations MAY transmit 8-bit or\n   multi-octet characters in literals, but should do so only when the\n   character set is identified.\n\n   Although a BINARY body encoding is defined, unencoded binary strings\n   are not permitted.  A \"binary string\" is any string with NUL\n   characters.  Implementations MUST encode binary data into a textual\n   form such as BASE64 before transmitting the data.  A string with an\n   excessive amount of CTL characters may also be considered to be\n   binary, although this is not required.\n\n\n4.4.    Parenthesized List\n\n   Data structures are represented as a \"parenthesized list\"; a sequence\n   of data items, delimited by space, and bounded at each end by\n   parentheses.  A parenthesized list may itself contain other\n   parenthesized lists, using multiple levels of parentheses to indicate\n   nesting.\n\n   The empty list is represented as () -- a parenthesized list with no\n   members.\n\n\n4.5.    NIL\n\n   The special atom \"NIL\" represents the non-existence of a particular\n   data item that is represented as a string or parenthesized list, as\n   distinct from the empty string \"\" or the empty parenthesized list ().\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                         [Page 7]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n5.      Operational Considerations\n\n5.1.    Mailbox Naming\n\n   The interpretation of mailbox names is implementation-dependent.\n   However, the mailbox name INBOX is a special name reserved to mean\n   \"the primary mailbox for this user on this server\".  If it is desired\n   to export hierarchical mailbox names, mailbox names must be\n   left-to-right hierarchical using a single character to separate\n   levels of hierarchy.  The same hierarchy separator character is used\n   for all levels of hierarchy within a single name.\n\n5.2.    Mailbox Size and Message Status Updates\n\n   At any time, a server can send data that the client did not request.\n   Sometimes, such behavior is required.  For example, agents other than\n   the server may add messages to the mailbox (e.g. new mail delivery),\n   change the flags of message in the mailbox (e.g. simultaneous access\n   to the same mailbox by multiple agents), or even remove messages from\n   the mailbox.  A server MUST send mailbox size updates automatically\n   if a mailbox size change is observed during the processing of a\n   command.  A server SHOULD send message flag updates automatically,\n   without requiring the client to request such updates explicitly.\n   Special rules exist for server notification of a client about the\n   removal of messages to prevent synchronization errors; see the\n   description of the EXPUNGE response for more details.\n\n   Regardless of what implementation decisions a client may take on\n   remembering data from the server, a client implementation MUST record\n   mailbox size updates.  It MUST NOT assume that any command after\n   initial mailbox selection will return the size of the mailbox.\n\n\n5.3.    Response when no Command in Progress\n\n   Server implementations are permitted to send an untagged response\n   (except for EXPUNGE) while there is no command in progress.  Server\n   implementations that send such responses MUST deal with flow control\n   considerations.  Specifically, they must either (1) verify that the\n   size of the data does not exceed the underlying transport's available\n   window size, or (2) use non-blocking writes.\n\n\n\n\n\n\n\n\n\n\nCrispin                                                         [Page 8]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n5.4.    Autologout Timer\n\n   If a server has an inactivity autologout timer, that timer MUST be of\n   at least 30 minutes' duration.  The receipt of ANY command from the\n   client during that interval should suffice to reset the autologout\n   timer.\n\n\n5.5.    Multiple Commands in Progress\n\n   The client is not required to wait for the completion result response\n   of a command before sending another command, subject to flow control\n   constraints on the underlying data stream.  Similarly, a server is\n   not required to process a command to completion before beginning\n   processing of the next command, unless an ambiguity would result\n   because of a command that would affect the results of other commands.\n   If there is such an ambiguity, the server executes commands to\n   completion in the order given by the client.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                         [Page 9]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.      Client Commands\n\n   IMAP4 commands are described in this section.  Commands are organized\n   by the state in which the command is permitted.  Commands which are\n   permitted in multiple states are listed in the minimum permitted\n   state (for example, commands valid in authenticated and selected\n   state are listed in the authenticated state commands).\n\n   Command arguments, identified by \"Arguments:\" in the command\n   descriptions below, are described by function, not by syntax.  The\n   precise syntax of command arguments is described in the Formal Syntax\n   section.\n\n   Some commands cause specific server data to be returned; these are\n   identified by \"Data:\" in the command descriptions below.  See the\n   response descriptions in the Responses section for information on\n   these responses, and the Formal Syntax section for the precise syntax\n   of these responses.  It is possible for server data to be transmitted\n   as a result of any command; thus, commands that do not specifically\n   require server data specify \"no specific data for this command\"\n   instead of \"none\".\n\n   The \"Result:\" in the command description refers to the possible\n   tagged status responses to a command, and any special interpretation\n   of these status responses.\n\n\n6.1.    Client Commands - Any State\n\n   The following commands are valid in any state: CAPABILITY, NOOP, and\n   LOGOUT.\n\n6.1.1.  CAPABILITY Command\n\n   Arguments:  none\n\n   Data:       mandatory untagged response: CAPABILITY\n\n   Result:     OK - capability completed\n               BAD - command unknown or arguments invalid\n\n      The CAPABILITY command requests a listing of capabilities that the\n      server supports.  The server MUST send a single untagged\n      CAPABILITY response with \"IMAP4\" as the first listed capability\n      before the (tagged) OK response.  This listing of capabilities is\n      not dependent upon connection state or user.  It is therefore not\n      necessary to issue a CAPABILITY command more than once in a\n      session.\n\n\n\nCrispin                                                        [Page 10]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      Capability names other than \"IMAP4\" refer to extensions,\n      revisions, or amendments to this specification.  See the\n      documentation of the CAPABILITY response for additional\n      information.  No capabilities are enabled without explicit client\n      action to invoke the capability.  See the section entitled \"Client\n      Commands - Experimental/Expansion\" for information about the form\n      of site or implementation-specific capabilities.\n\n   Example:    C: abcd CAPABILITY\n               S: * CAPABILITY IMAP4\n               S: abcd OK CAPABILITY completed\n\n\n6.1.2.  NOOP Command\n\n   Arguments:  none\n\n   Data:       no specific data for this command (but see below)\n\n   Result:     OK - noop completed\n               BAD - command unknown or arguments invalid\n\n      The NOOP command always succeeds.  It does nothing.\n\n      Since any command can return a status update as untagged data, the\n      NOOP command can be used as a periodic poll for new messages or\n      message status updates during a period of inactivity.  The NOOP\n      command can also be used to reset any inactivity autologout timer\n      on the server.\n\n   Example:    C: a002 NOOP\n               S: a002 OK NOOP completed\n                  . . .\n               C: a047 NOOP\n               S: * 22 EXPUNGE\n               S: * 23 EXISTS\n               S: * 3 RECENT\n               S: * 14 FETCH (FLAGS (\\Seen \\Deleted))\n               S: a047 OK NOOP completed\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 11]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.1.3.  LOGOUT Command\n\n   Arguments:  none\n\n   Data:       mandatory untagged response: BYE\n\n   Result:     OK - logout completed\n               BAD - command unknown or arguments invalid\n\n      The LOGOUT command informs the server that the client is done with\n      the session.  The server must send a BYE untagged response before\n      the (tagged) OK response, and then close the network connection.\n\n   Example:    C: A023 LOGOUT\n               S: * BYE IMAP4 Server logging out\n               S: A023 OK LOGOUT completed\n               (Server and client then close the connection)\n\n\n\n6.2.    Client Commands - Non-Authenticated State\n\n   In non-authenticated state, the AUTHENTICATE or LOGIN command\n   establishes authentication and enter authenticated state.  The\n   AUTHENTICATE command provides a general mechanism for a variety of\n   authentication techniques, whereas the LOGIN command uses the\n   traditional user name and plaintext password pair.\n\n   Server implementations may allow non-authenticated access to certain\n   mailboxes.  The convention is to use a LOGIN command with the userid\n   \"anonymous\".  A password is required.  It is implementation-dependent\n   what requirements, if any, are placed on the password and what access\n   restrictions are placed on anonymous users.\n\n   Once authenticated (including as anonymous), it is not possible to\n   re-enter non-authenticated state.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in non-authenticated state:\n   AUTHENTICATE and LOGIN.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 12]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.2.1.  AUTHENTICATE Command\n\n   Arguments:  authentication mechanism name\n\n   Data:       continuation data may be requested\n\n   Result:     OK - authenticate completed, now in authenticated state\n               NO - authenticate failure: unsupported authentication\n                    mechanism, credentials rejected\n               BAD - command unknown or arguments invalid,\n                    authentication exchange cancelled\n\n      The AUTHENTICATE command indicates an authentication mechanism,\n      such as described in [IMAP-AUTH], to the server.  If the server\n      supports the requested authentication mechanism, it performs an\n      authentication protocol exchange to authenticate and identify the\n      user.  Optionally, it also negotiates a protection mechanism for\n      subsequent protocol interactions.  If the requested authentication\n      mechanism is not supported, the server should reject the\n      AUTHENTICATE command by sending a tagged NO response.\n\n      The authentication protocol exchange consists of a series of\n      server challenges and client answers that are specific to the\n      authentication mechanism.  A server challenge consists of a\n      command continuation request response with the \"+\" token followed\n      by a BASE64 encoded string.  The client answer consists of a line\n      consisting of a BASE64 encoded string.  If the client wishes to\n      cancel an authentication exchange, it should issue a line with a\n      single \"*\".  If the server receives such an answer, it must reject\n      the AUTHENTICATE command by sending a tagged BAD response.\n\n      A protection mechanism provides integrity and privacy protection\n      to the protocol session.  If a protection mechanism is negotiated,\n      it is applied to all subsequent data sent over the connection.\n      The protection mechanism takes effect immediately following the\n      CRLF that concludes the authentication exchange for the client,\n      and the CRLF of the tagged OK response for the server.  Once the\n      protection mechanism is in effect, the stream of command and\n      response octets is processed into buffers of ciphertext.  Each\n      buffer is transferred over the connection as a stream of octets\n      prepended with a four octet field in network byte order that\n      represents the length of the following data.  The maximum\n      ciphertext buffer length is defined by the protection mechanism.\n\n      The server is not required to support any particular\n      authentication mechanism, nor are authentication mechanisms\n      required to support any protection mechanisms.  If an AUTHENTICATE\n      command fails with a NO response, the client may try another\n\n\n\nCrispin                                                        [Page 13]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      authentication mechanism by issuing another AUTHENTICATE command,\n      or may attempt to authenticate by using the LOGIN command.  In\n      other words, the client may request authentication types in\n      decreasing order of preference, with the LOGIN command as a last\n      resort.\n\n   Example:    S: * OK KerberosV4 IMAP4 Server\n               C: A001 AUTHENTICATE KERBEROS_V4\n               S: + AmFYig==\n               C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n                  +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n                  WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n               S: + or//EoAADZI=\n               C: DiAF5A4gA+oOIALuBkAAmw==\n               S: A001 OK Kerberos V4 authentication successful\n\n        Note: the line breaks in the first client answer are for\n        editorial clarity and are not in real authenticators.\n\n\n6.2.2.  LOGIN Command\n\n   Arguments:  user name\n               password\n\n   Data:       no specific data for this command\n\n   Result:     OK - login completed, now in authenticated state\n               NO - login failure: user name or password rejected\n               BAD - command unknown or arguments invalid\n\n      The LOGIN command identifies the user to the server and carries\n      the plaintext password authenticating this user.\n\n   Example:    C: a001 LOGIN SMITH SESAME\n               S: a001 OK LOGIN completed\n\n\n\n6.3.    Client Commands - Authenticated State\n\n   In authenticated state, commands that manipulate mailboxes as atomic\n   entities are permitted.  Of these commands, the SELECT and EXAMINE\n   commands will select a mailbox for access and enter selected state.\n\n\n\n\n\n\n\nCrispin                                                        [Page 14]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in authenticated state: SELECT,\n   EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB,\n   and APPEND.\n\n6.3.1.  SELECT Command\n\n   Arguments:  mailbox name\n\n   Data:       mandatory untagged responses: FLAGS, EXISTS, RECENT\n               optional OK untagged responses: UNSEEN, PERMANENTFLAGS\n\n   Result:     OK - select completed, now in selected state\n               NO - select failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n               BAD - command unknown or arguments invalid\n\n      The SELECT command selects a  mailbox  so  that  messages  in  the\n      mailbox  can  be  accessed.  Before returning an OK to the client,\n      the server MUST send the following untagged data to the client:\n\n         FLAGS       Defined flags in the mailbox\n\n         <n> EXISTS  The number of messages in the mailbox\n\n         <n> RECENT  The number of messages added to the  mailbox  since\n                     the previous time this mailbox was read\n\n         OK [UIDVALIDITY <n>]\n                     The unique  identifier  validity  value.   See  the\n                     description of the UID command for more detail.\n\n      to define the initial state of the mailbox at the client.  If it\n      is not possible to determine the messages that were added since\n      the previous time a mailbox was read, then all messages SHOULD be\n      considered recent.\n\n      The server SHOULD also send an UNSEEN response code in an OK\n      untagged response, indicating the message sequence number of the\n      first unseen message in the mailbox.\n\n      If the client can not change the permanent state of one or more of\n      the flags listed in the FLAGS untagged response, the server SHOULD\n      send a PERMANENTFLAGS response code in an OK untagged response,\n      listing the flags that the client may change permanently.\n\n      Only one mailbox may be selected at a time in a session;\n      simultaneous access to multiple mailboxes requires multiple\n\n\n\nCrispin                                                        [Page 15]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      sessions.  The SELECT command automatically deselects any\n      currently selected mailbox before attempting the new selection.\n      Consequently, if a mailbox is selected and a SELECT command that\n      fails is attempted, no mailbox is selected.\n\n      If the user is permitted to modify the mailbox, the server SHOULD\n      prefix the text of the tagged OK response with the \"[READ-WRITE]\"\n      response code.\n\n      If the user is not permitted to modify the mailbox but is\n      permitted read access, the mailbox is selected as read-only, and\n      the server MUST prefix the text of the tagged OK response to\n      SELECT with the \"[READ-ONLY]\" response code.  Read-only access\n      through SELECT differs from the EXAMINE command in that certain\n      read-only mailboxes may permit the change of permanent state on a\n      per-user (as opposed to global) basis.  Netnews messages marked in\n      a user's .newsrc file are an example of such per-user permanent\n      state that can be modified with read-only mailboxes.\n\n   Example:    C: A142 SELECT INBOX\n               S: * 172 EXISTS\n               S: * 1 RECENT\n               S: * OK [UNSEEN 12] Message 12 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n               S: A142 OK [READ-WRITE] SELECT completed\n\n\n6.3.2.  EXAMINE Command\n\n   Arguments:  mailbox name\n\n   Data:       mandatory untagged responses: FLAGS, EXISTS, RECENT\n               optional OK untagged responses: UNSEEN, PERMANENTFLAGS\n\n   Result:     OK - examine completed, now in selected state\n               NO - examine failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n               BAD - command unknown or arguments invalid\n\n      The EXAMINE command is identical to SELECT and returns the same\n      output; however, the selected mailbox is identified as read-only.\n      No changes to the permanent state of the mailbox, including\n      per-user state, are permitted.\n\n\n\n\n\n\nCrispin                                                        [Page 16]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      The text of the tagged OK response to the EXAMINE command MUST\n      begin with the \"[READ-ONLY]\" response code.\n\n   Example:    C: A932 EXAMINE blurdybloop\n               S: * 17 EXISTS\n               S: * 2 RECENT\n               S: * OK [UNSEEN 8] Message 8 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS ()] No permanent flags permitted\n               S: A932 OK [READ-ONLY] EXAMINE completed\n\n\n6.3.3.  CREATE Command\n\n   Arguments:  mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - create completed\n               NO - create failure: can't create mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The CREATE command creates a mailbox with the given name.  An OK\n      response is returned only if a new mailbox with that name has been\n      created.  It is an error to attempt to create INBOX or a mailbox\n      with a name that refers to an extant mailbox.  Any error in\n      creation will return a tagged NO response.\n\n      If the mailbox name is suffixed with the server's hierarchy\n      separator character (as returned from the server by a LIST\n      command), this is a declaration that the client may, in the\n      future, create mailbox names under this name in the hierarchy.\n      Server implementations that do not require this declaration MUST\n      ignore it.\n\n      If a new mailbox is created with the same name as a mailbox which\n      was deleted, its unique identifiers MUST be greater than any\n      unique identifiers used in the previous incarnation of the mailbox\n      UNLESS the new incarnation has a different unique identifier\n      validity value.  See the description of the UID command for more\n      detail.\n\n   Example:    C: A003 CREATE owatagusiam/\n               S: A003 OK CREATE completed\n               C: A004 CREATE owatagusiam/blurdybloop\n               S: A004 OK CREATE completed\n\n\n\n\nCrispin                                                        [Page 17]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n        Note: the interpretation of this example depends on whether\n        \"/\" was returned as the hierarchy separator from LIST.  If\n        \"/\" is the hierarchy separator, a new level of hierarchy\n        named \"owatagusiam\" with a member called \"blurdybloop\" is\n        created.  Otherwise, two mailboxes at the same hierarchy\n        level are created.\n\n\n6.3.4.  DELETE Command\n\n   Arguments:  mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - delete completed\n               NO - delete failure: can't delete mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The DELETE command permanently removes the mailbox with the given\n      name.  A tagged OK response is returned only if the mailbox has\n      been deleted.  It is an error to attempt to delete INBOX or a\n      mailbox name that does not exist.  Any error in deletion will\n      return a tagged NO response.\n\n      The value of the highest-used unique indentifier of the deleted\n      mailbox MUST be preserved so that a new mailbox created with the\n      same name will not reuse the identifiers of the former\n      incarnation, UNLESS the new incarnation has a different unique\n      identifier validity value.  See the description of the UID command\n      for more detail.\n\n   Example:    C: A683 DELETE blurdybloop\n               S: A683 OK DELETE completed\n\n\n6.3.5.  RENAME Command\n\n   Arguments:  existing mailbox name\n               new mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - rename completed\n               NO - rename failure: can't rename mailbox with that name,\n                    can't rename to mailbox with that name\n               BAD - command unknown or arguments invalid\n\n\n\n\n\nCrispin                                                        [Page 18]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      The RENAME command changes the name of a mailbox.  A tagged OK\n      response is returned only if the mailbox has been renamed.  It is\n      an error to attempt to rename from a mailbox name that does not\n      exist or to a mailbox name that already exists.  Any error in\n      renaming will return a tagged NO response.\n\n      Renaming INBOX is permitted; a new, empty INBOX is created in its\n      place.\n\n   Example:    C: Z4S9 RENAME blurdybloop owatagusiam\n               S: Z4S9 OK RENAME completed\n\n\n6.3.6.  SUBSCRIBE Command\n\n   Arguments:  mailbox\n\n   Data:       no specific data for this command\n\n   Result:     OK - subscribe completed\n               NO - subscribe failure: can't subscribe to that name\n               BAD - command unknown or arguments invalid\n\n      The SUBSCRIBE command adds the specified mailbox name to the\n      server's set of \"active\" or \"subscribed\" mailboxes as returned by\n      the LSUB command.  This command returns a tagged OK response only\n      if the subscription is successful.\n\n   Example:    C: A002 SUBSCRIBE #news.comp.mail.mime\n               S: A002 OK SUBSCRIBE completed\n\n\n6.3.7.  UNSUBSCRIBE Command\n\n   Arguments:  mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - unsubscribe completed\n               NO - unsubscribe failure: can't unsubscribe that name\n               BAD - command unknown or arguments invalid\n\n      The UNSUBSCRIBE command removes the specified mailbox name from\n      the server's set of \"active\" or \"subscribed\" mailboxes as returned\n      by the LSUB command.  This command returns a tagged OK response\n      only if the unsubscription is successful.\n\n\n\n\n\nCrispin                                                        [Page 19]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   Example:    C: A002 UNSUBSCRIBE #news.comp.mail.mime\n               S: A002 OK UNSUBSCRIBE completed\n\n\n6.3.8.  LIST Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Data:       untagged responses: LIST\n\n   Result:     OK - list completed\n               NO - list failure: can't list that reference or name\n               BAD - command unknown or arguments invalid\n\n      The LIST command returns a subset of names from the complete set\n      of all names available to the user.  Zero or more untagged LIST\n      replies are returned, containing the name attributes, hierarchy\n      delimiter, and name; see the description of the LIST reply for\n      more detail.\n\n      An empty (\"\" string) reference name argument indicates that the\n      mailbox name is interpreted as by SELECT. The returned mailbox\n      names MUST match the supplied mailbox name pattern.  A non-empty\n      reference name argument is the name of a mailbox or a level of\n      mailbox hierarchy, and indicates a context in which the mailbox\n      name is interpreted in an implementation-defined manner.\n\n      The reference and mailbox name arguments are interpreted, in an\n      implementation-dependent fashion, into a canonical form that\n      represents an unambiguous left-to-right hierarchy.  The returned\n      mailbox names will be in the interpreted form.\n\n      Any part of the reference argument that is included in the\n      interpreted form SHOULD prefix the interpreted form.  It should\n      also be in the same form as the reference name argument.  This\n      rule permits the client to determine if the returned mailbox name\n      is in the context of the reference argument, or if something about\n      the mailbox argument overrode the reference argument.  Without\n      this rule, the client would have to have knowledge of the server's\n      naming semantics including what characters are \"breakouts\" that\n      override a naming context.\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 20]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n           For example, here are some examples of how references\n           and mailbox names might be interpreted on a UNIX-based\n           server:\n\n               Reference     Mailbox Name  Interpretation\n               ------------  ------------  --------------\n               ~smith/Mail/  foo.*         ~smith/Mail/foo.*\n               archive/      %             archive/%\n               #news.        comp.mail.*   #news.comp.mail.*\n               ~smith/Mail/  /usr/doc/foo  /usr/doc/foo\n               archive/      ~fred/Mail/*  ~fred/Mail/*\n\n           The first three examples demonstrate interpretations in\n           the context of the reference argument.  Note that\n           \"~smith/Mail\" should not be transformed into something\n           like \"/u2/users/smith/Mail\", or it would be impossible\n           for the client to determine that the interpretation was\n           in the context of the reference.\n\n      The character \"*\" is a wildcard, and matches zero or more\n      characters at this position.  The character \"%\" is similar to \"*\",\n      but it does not match a hierarchy delimiter.  If the \"%\" wildcard\n      is the last character of a mailbox name argument, matching levels\n      of hierarchy are also returned.  If these levels of hierarchy are\n      not also selectable mailboxes, they are returned with the\n      \\Noselect mailbox name attribute (see the description of the LIST\n      response for more detail).\n\n      Server implementations are permitted to \"hide\" otherwise\n      accessible mailboxes from the wildcard characters, by preventing\n      certain characters or names from matching a wildcard in certain\n      situations.  For example, a UNIX-based server might restrict the\n      interpretation of \"*\" so that an initial \"/\" character does not\n      match.\n\n      The special name INBOX is included in the output from LIST if it\n      matches the input arguments and INBOX is supported by this server\n      for this user.  The criteria for omitting INBOX is whether SELECT\n      INBOX will return failure; it is not relevant whether the user's\n      real INBOX resides on this or some other server.\n\n   Example:    C: A002 LIST \"~/Mail/\" \"%\"\n               S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n               S: * LIST () \"/\" ~/Mail/meetings\n               S: A002 OK LIST completed\n\n\n\n\n\n\nCrispin                                                        [Page 21]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.3.9.  LSUB Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Data:       untagged responses: LSUB\n\n   Result:     OK - lsub completed\n               NO - lsub failure: can't list that reference or name\n               BAD - command unknown or arguments invalid\n\n      The LSUB command returns a subset of names from the set of names\n      that the user has declared as being \"active\" or \"subscribed\".\n      Zero or more untagged LSUB replies are returned.  The arguments to\n      LSUB are in the same form as those for LIST.\n\n   Example:    C: A002 LSUB \"#news.\" \"comp.mail.*\"\n               S: * LSUB () \".\" #news.comp.mail.mime\n               S: * LSUB () \".\" #news.comp.mail.misc\n               S: A002 OK LSUB completed\n\n\n6.3.10. APPEND Command\n\n   Arguments:  mailbox name\n               optional flag parenthesized list\n               optional date/time string\n               message literal\n\n   Data:       no specific data for this command\n\n   Result:     OK - append completed\n               NO - append error: can't append to that mailbox, error\n                    in flags or date/time or message text\n               BAD - command unknown or arguments invalid\n\n      The APPEND command appends the literal argument as a new message\n      in the specified destination mailbox.  This argument is in the\n      format of an [RFC-822] message.  8-bit characters are permitted in\n      the message.  A server implementation that is unable to preserve\n      8-bit data properly MUST be able to reversibly convert 8-bit\n      APPEND data to 7-bit using [MIME-1] encoding.\n\n      If a flag parenthesized list or date_time are specified, that data\n      SHOULD be set in the resulting message; otherwise, the defaults of\n      empty flags and the current date/time are used.\n\n\n\n\n\nCrispin                                                        [Page 22]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      If the append is unsuccessful for any reason, the mailbox MUST be\n      restored to its state before the APPEND attempt; no partial\n      appending is permitted.  If the mailbox is currently selected, the\n      normal new mail actions should occur.\n\n      If the destination mailbox does not exist, a server MUST return an\n      error, and MUST NOT automatically create the mailbox.  Unless it\n      is certain that the destination mailbox can not be created, the\n      server MUST send the response code \"[TRYCREATE]\" as the prefix of\n      the text of the tagged NO response.  This gives a hint to the\n      client that it can attempt a CREATE command and retry the APPEND\n      if the CREATE is successful.\n\n   Example:    C: A003 APPEND saved-messages (\\Seen) {310}\n               C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n               C: From: Fred Foobar <foobar@Blurdybloop.COM>\n               C: Subject: afternoon meeting\n               C: To: mooch@owatagu.siam.edu\n               C: Message-Id: <B27397-0100000@Blurdybloop.COM>\n               C: MIME-Version: 1.0\n               C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n               C:\n               C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n               C:\n               S: A003 OK APPEND completed\n\n        Note: the APPEND command is not used for message delivery,\n        because it does not provide a mechanism to transfer [SMTP]\n        envelope information.\n\n\n\n6.4.    Client Commands - Selected State\n\n   In selected state, commands that manipulate messages in a mailbox are\n   permitted.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   and the authenticated state commands (SELECT, EXAMINE, CREATE,\n   DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, FIND\n   ALL.MAILBOXES, FIND MAILBOXES, and APPEND), the following commands\n   are valid in the selected state: CHECK, CLOSE, EXPUNGE, SEARCH,\n   FETCH, PARTIAL, STORE, COPY, and UID.\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 23]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.4.1.  CHECK Command\n\n   Arguments:  none\n\n   Data:       no specific data for this command\n\n   Result:     OK - check completed\n               BAD - command unknown or arguments invalid\n\n      The CHECK command requests a checkpoint of the currently selected\n      mailbox.  A checkpoint refers to any implementation-dependent\n      housekeeping associated with the mailbox (e.g. resolving the\n      server's in-memory state of the mailbox with the state on its\n      disk) that is not normally executed as part of each command.  A\n      checkpoint may take a non-instantaneous amount of real time to\n      complete.  If a server implementation has no such housekeeping\n      considerations, CHECK is equivalent to NOOP.\n\n      There is no guarantee that an EXISTS untagged response will happen\n      as a result of CHECK.  NOOP, not CHECK, should be used for new\n      mail polling.\n\n   Example:    C: FXXZ CHECK\n               S: FXXZ OK CHECK Completed\n\n\n6.4.2.  CLOSE Command\n\n   Arguments:  none\n\n   Data:       no specific data for this command\n\n   Result:     OK - close completed, now in authenticated state\n               NO - close failure: no mailbox selected\n               BAD - command unknown or arguments invalid\n\n      The CLOSE command permanently removes from the currently selected\n      mailbox all messages that have the \\Deleted flag set, and returns\n      to authenticated state from selected state.  No untagged EXPUNGE\n      responses are sent.\n\n      No messages are removed, and no error is given, if the mailbox is\n      selected by an EXAMINE command or is otherwise selected read-only.\n\n      Even when a mailbox is selected, it is not required to send a\n      CLOSE command before a SELECT, EXAMINE, or LOGOUT command.  The\n      SELECT, EXAMINE, and LOGOUT commands implicitly close the\n      currently selected mailbox without doing an expunge.  However,\n\n\n\nCrispin                                                        [Page 24]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT\n      sequence is considerably faster than an EXPUNGE-LOGOUT or\n      EXPUNGE-SELECT because no untagged EXPUNGE responses (which the\n      client would probably ignore) are sent.\n\n   Example:    C: A341 CLOSE\n               S: A341 OK CLOSE completed\n\n\n6.4.3.  EXPUNGE Command\n\n   Arguments:  none\n\n   Data:       untagged responses: EXPUNGE\n\n   Result:     OK - expunge completed\n               NO - expunge failure: can't expunge (e.g. permission\n                    denied)\n               BAD - command unknown or arguments invalid\n\n      The EXPUNGE command permanently removes from the currently\n      selected mailbox all messages that have the \\Deleted flag set.\n      Before returning an OK to the client, an untagged EXPUNGE response\n      is sent for each message that is removed.\n\n   Example:    C: A202 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 5 EXPUNGE\n               S: * 8 EXPUNGE\n               S: A202 OK EXPUNGE completed\n\n        Note: in this example, messages 3, 4, 7, and 11 had the\n        \\Deleted flag set.  See the description of the EXPUNGE\n        response for further explanation.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 25]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.4.4.  SEARCH Command\n\n   Arguments:  optional character set specification\n               searching criteria (one or more)\n\n   Data:       mandatory untagged response: SEARCH\n\n   Result:     OK - search completed\n               NO - search error: can't search that character set or\n                    criteria\n               BAD - command unknown or arguments invalid\n\n      The SEARCH command searches the mailbox for messages that match\n      the given searching criteria.  Searching criteria consist of one\n      or more search keys.  The untagged SEARCH response from the server\n      contains a listing of message sequence numbers corresponding to\n      those messages that match the searching criteria.\n\n      When multiple keys are specified, the result is the intersection\n      (AND function) of all the messages that match those keys.  For\n      example, the criteria DELETED FROM \"SMITH\" SINCE 1-Feb-1994 refers\n      to all deleted messages from Smith that were placed in the mailbox\n      since February 1, 1994.  A search key may also be a parenthesized\n      list of one or more search keys (e.g. for use with the OR and NOT\n      keys).\n\n      Server implementations MAY exclude [MIME-1] body parts with\n      terminal content types other than TEXT and MESSAGE from\n      consideration in SEARCH matching.\n\n      The optional character set specification consists of the word\n      \"CHARSET\" followed by a registered MIME character set.  It\n      indicates the character set of the strings that appear in the\n      search criteria.  [MIME-2] strings that appear in RFC 822/MIME\n      message headers, and [MIME-1] content transfer encodings, MUST be\n      decoded before matching.  Except for US-ASCII, it is not required\n      that any particular character set be supported.  If the server\n      does not support the specified character set, it MUST return a\n      tagged NO response (not a BAD).\n\n      In all search keys that use strings, a message matches the key if\n      the string is a substring of the field.  The matching is\n      case-insensitive.\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 26]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      The defined search keys are as follows.  Refer to the Formal\n      Syntax section for the precise syntactic definitions of the\n      arguments.\n\n      <message set>  Messages with message sequence numbers\n                     corresponding to the specified message sequence\n                     number set\n\n      ALL            All messages in the mailbox; the default initial\n                     key for ANDing.\n\n      ANSWERED       Messages with the \\Answered flag set.\n\n      BCC <string>   Messages that contain the specified string in the\n                     envelope structure's BCC field.\n\n      BEFORE <date>  Messages whose internal date is earlier than the\n                     specified date.\n\n      BODY <string>  Messages that contain the specified string in the\n                     body of the message.\n\n      CC <string>    Messages that contain the specified string in the\n                     envelope structure's CC field.\n\n      DELETED        Messages with the \\Deleted flag set.\n\n      DRAFT          Messages with the \\Draft flag set.\n\n      FLAGGED        Messages with the \\Flagged flag set.\n\n      FROM <string>  Messages that contain the specified string in the\n                     envelope structure's FROM field.\n\n      HEADER <field-name> <string>\n                     Messages that have a header with the specified\n                     field-name (as defined in [RFC-822]) and that\n                     contains the specified string in the [RFC-822]\n                     field-body.\n\n      KEYWORD <flag> Messages with the specified keyword set.\n\n      LARGER <n>     Messages with an RFC822.SIZE larger than the\n                     specified number of octets.\n\n      NEW            Messages that have the \\Recent flag set but not the\n                     \\Seen flag.  This is functionally equivalent to\n                     \"(RECENT UNSEEN)\".\n\n\n\nCrispin                                                        [Page 27]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      NOT <search-key>\n                     Messages that do not match the specified search\n                     key.\n\n      OLD            Messages that do not have the \\Recent flag set.\n                     This is functionally equivalent to \"NOT RECENT\" (as\n                     opposed to \"NOT NEW\").\n\n      ON <date>      Messages whose internal date is within the\n                     specified date.\n\n      OR <search-key1> <search-key2>\n                     Messages that match either search key.\n\n      RECENT         Messages that have the \\Recent flag set.\n\n      SEEN           Messages that have the \\Seen flag set.\n\n      SENTBEFORE <date>\n                     Messages whose [RFC-822] Date: header is earlier\n                     than the specified date.\n\n      SENTON <date>  Messages whose [RFC-822] Date: header is within the\n                     specified date.\n\n      SENTSINCE <date>\n                     Messages whose [RFC-822] Date: header is within or\n                     later than the specified date.\n\n      SINCE <date>   Messages whose internal date is within or later\n                     than the specified date.\n\n      SMALLER <n>    Messages with an RFC822.SIZE smaller than the\n                     specified number of octets.\n\n      SUBJECT <string>\n                     Messages that contain the specified string in the\n                     envelope structure's SUBJECT field.\n\n      TEXT <string>  Messages that contain the specified string in the\n                     header or body of the message.\n\n      TO <string>    Messages that contain the specified string in the\n                     envelope structure's TO field.\n\n      UID <message set>\n                     Messages with unique identifiers corresponding to\n                     the specified unique identifier set.\n\n\n\nCrispin                                                        [Page 28]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      UNANSWERED     Messages that do not have the \\Answered flag set.\n\n      UNDELETED      Messages that do not have the \\Deleted flag set.\n\n      UNDRAFT        Messages that do not have the \\Draft flag set.\n\n      UNFLAGGED      Messages that do not have the \\Flagged flag set.\n\n      UNKEYWORD <flag>\n                     Messages that do not have the specified keyword\n                     set.\n\n      UNSEEN         Messages that do not have the \\Seen flag set.\n\n\n   Example:    C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM \"Smith\"\n               S: * SEARCH 2 84 882\n               S: A282 OK SEARCH completed\n\n\n6.4.5.  FETCH Command\n\n   Arguments:  message set\n               message data item names\n\n   Data:       untagged responses: FETCH\n\n   Result:     OK - fetch completed\n               NO - fetch error: can't fetch that data\n               BAD - command unknown or arguments invalid\n\n      The FETCH command retrieves data associated with a message in the\n      mailbox.  The data items to be fetched may be either a single atom\n      or a parenthesized list.  The currently defined data items that\n      can be fetched are:\n\n      ALL            Macro equivalent to: (FLAGS INTERNALDATE\n                     RFC822.SIZE ENVELOPE)\n\n      BODY           Non-extensible form of BODYSTRUCTURE.\n\n      BODY[<section>]\n                     The text of a particular body section.  The section\n                     specification is a set of one or more part numbers\n                     delimited by periods.\n\n                     Single-part messages only have a part 1.\n\n\n\n\nCrispin                                                        [Page 29]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n                     Multipart messages are assigned consecutive part\n                     numbers, as they occur in the message.  If a\n                     particular part is of type message or multipart,\n                     its parts must be indicated by a period followed by\n                     the part number within that nested multipart part.\n                     It is not permitted to fetch a multipart part\n                     itself, only its individual members.\n\n                     A part of type MESSAGE and subtype RFC822 also has\n                     nested parts.  These are the parts of the MESSAGE\n                     part's body.  Nested part 0 of a part of type\n                     MESSAGE and subtype RFC822 is the [RFC-822] header\n                     of the message.\n\n                     Every message has at least one part.\n\n                          Here is an example of a complex message\n                          with its associated section\n                          specifications:\n\n                           0   ([RFC-822] header of the message)\n                               MULTIPART/MIXED\n                           1   TEXT/PLAIN\n                           2   APPLICATION/OCTET-STREAM\n                           3   MESSAGE/RFC822\n                           3.0   ([RFC-822] header of the message)\n                           3.1   TEXT/PLAIN\n                           3.2   APPLICATION/OCTET-STREAM\n                                 MULTIPART/MIXED\n                           4.1   IMAGE/GIF\n                           4.2   MESSAGE/RFC822\n                           4.2.0   ([RFC-822] header of the message)\n                           4.2.1   TEXT/PLAIN\n                                   MULTIPART/ALTERNATIVE\n                           4.2.2.1  TEXT/PLAIN\n                           4.2.2.2  TEXT/RICHTEXT\n\n                          Note that there is no section\n                          specification for the Multi-part parts\n                          (no section 4 or 4.2.2).\n\n                     The \\Seen flag is implicitly set; if this causes\n                     the flags to change they should be included as part\n                     of the fetch responses.\n\n      BODY.PEEK[<section>]\n                     An alternate form of BODY[section] that does not\n                     implicitly set the \\Seen flag.\n\n\n\nCrispin                                                        [Page 30]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      BODYSTRUCTURE  The [MIME-1] body structure of the message.  This\n                     is computed by the server by parsing the [MIME-1]\n                     header lines.\n\n      ENVELOPE       The envelope structure of the message.  This is\n                     computed by the server by parsing the [RFC-822]\n                     header into the component parts, defaulting various\n                     fields as necessary.\n\n      FAST           Macro equivalent to: (FLAGS INTERNALDATE\n                     RFC822.SIZE)\n\n      FLAGS          The flags that are set for this message.\n\n      FULL           Macro equivalent to: (FLAGS INTERNALDATE\n                     RFC822.SIZE ENVELOPE BODY)\n\n      INTERNALDATE   The date and time of final delivery of the message\n                     as defined by RFC 821.\n\n      RFC822         The message in [RFC-822] format.  The \\Seen flag is\n                     implicitly set; if this causes the flags to change\n                     they should be included as part of the fetch\n                     responses.  This is the concatenation of\n                     RFC822.HEADER and RFC822.TEXT.\n\n      RFC822.PEEK    An alternate form of RFC822 that does not\n                     implicitly set the \\Seen flag.\n\n      RFC822.HEADER  The [RFC-822] format header of the message as\n                     stored on the server including the delimiting blank\n                     line between the header and the body.\n\n      RFC822.HEADER.LINES <header_list>\n                     All header lines (including continuation lines) of\n                     the [RFC-822] format header of the message with a\n                     field-name (as defined in [RFC-822]) that matches\n                     any of the strings in header_list.  The matching is\n                     case-insensitive but otherwise exact.  The\n                     delimiting blank line between the header and the\n                     body is always included.\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 31]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      RFC822.HEADER.LINES.NOT <header_list>\n                     All header lines (including continuation lines) of\n                     the [RFC-822] format header of the message with a\n                     field-name (as defined in [RFC-822]) that does not\n                     match any of the strings in header_list.  The\n                     matching is case-insensitive but otherwise exact.\n                     The delimiting blank line between the header and\n                     the body is always included.\n\n      RFC822.SIZE    The number of octets in the message, as expressed\n                     in [RFC-822] format.\n\n      RFC822.TEXT    The text body of the message, omitting the\n                     [RFC-822] header.  The \\Seen flag is implicitly\n                     set; if this causes the flags to change they should\n                     be included as part of the fetch responses.\n\n      RFC822.TEXT.PEEK\n                     An alternate form of RFC822.TEXT that does not\n                     implicitly set the \\Seen flag.\n\n      UID            The unique identifier for the message.\n\n\n   Example:    C: A654 FETCH 2:4 (FLAGS RFC822.HEADER.LINES (DATE FROM))\n               S: * 2 FETCH ....\n               S: * 3 FETCH ....\n               S: * 4 FETCH ....\n               S: A003 OK FETCH completed\n\n\n6.4.6.  PARTIAL Command\n\n   Arguments:  message sequence number\n               message data item name\n               position of first octet\n               number of octets\n\n   Data:       untagged responses: FETCH\n\n   Result:     OK - partial completed\n               NO - partial error: can't fetch that data\n               BAD - command unknown or arguments invalid\n\n      The PARTIAL command is equivalent to the associated FETCH command,\n      with the added functionality that only the specified number of\n      octets, beginning at the specified starting octet, are returned.\n      Only a single message can be fetched at a time.  The first octet\n\n\n\nCrispin                                                        [Page 32]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      of a message, and hence the minimum for the starting octet, is\n      octet 1.\n\n      The following FETCH items are valid data for PARTIAL: RFC822,\n      RFC822.HEADER, RFC822.TEXT, BODY[section], as well as any .PEEK\n      forms of these.\n\n      Any partial fetch that attempts to read beyond the end of the text\n      is truncated as appropriate.  If the starting octet is beyond the\n      end of the text, an empty string is returned.\n\n      The data are returned with the FETCH response.  There is no\n      indication of the range of the partial data in this response.  It\n      is not possible to stream multiple PARTIAL commands of the same\n      data item without processing and synchronizing at each step, since\n      streamed commands may be executed out of order.\n\n      There is no requirement that partial fetches follow any sequence.\n      For example, if a partial fetch of octets 1 through 10000 breaks\n      in an awkward place for BASE64 decoding, it is permitted to\n      continue with a partial fetch of 9987 through 19987, etc.\n\n      The handling of the \\Seen flag is the same as in the associated\n      FETCH command.\n\n   Example:    C: A005 PARTIAL 4 RFC822 1 1024\n               S: * 1 FETCH (RFC822 {1024}\n               S: Return-Path: <gray@cac.washington.edu>\n               S: ...\n               S: .........  FLAGS (\\Seen))\n               S: A005 OK PARTIAL completed\n\n\n6.4.7.  STORE Command\n\n   Arguments:  message set\n               message data item name\n               value for message data item\n\n   Data:       untagged responses: FETCH\n\n   Result:     OK - store completed\n               NO - store error: can't store that data\n               BAD - command unknown or arguments invalid\n\n      The STORE command alters data associated with a message in the\n      mailbox.  Normally, STORE will return the updated value of the\n      data with an untagged FETCH response.  A suffix of \".SILENT\" in\n\n\n\nCrispin                                                        [Page 33]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      the data item name prevents the untagged FETCH, and the server\n      should assume that the client has determined the updated value\n      itself or does not care about the updated value.\n\n      The currently defined data items that can be stored are:\n\n      FLAGS <flag list>\n                     Replace the flags for the message with the\n                     argument.  The new value of the flags are returned\n                     as if a FETCH of those flags was done.\n\n      FLAGS.SILENT <flag list>\n                     Equivalent to FLAGS, but without returning a new\n                     value.\n\n      +FLAGS <flag list>\n                     Add the argument to the flags for the message.  The\n                     new value of the flags are returned as if a FETCH\n                     of those flags was done.\n\n      +FLAGS.SILENT <flag list>\n                     Equivalent to +FLAGS, but without returning a new\n                     value.\n\n      -FLAGS <flag list>\n                     Remove the argument from the flags for the message.\n                     The new value of the flags are returned as if a\n                     FETCH of those flags was done.\n\n      -FLAGS.SILENT <flag list>\n                     Equivalent to -FLAGS, but without returning a new\n                     value.\n\n\n   Example:    C: A003 STORE 2:4 +FLAGS (\\Deleted)\n               S: * 2 FETCH FLAGS (\\Deleted \\Seen)\n               S: * 3 FETCH FLAGS (\\Deleted)\n               S: * 4 FETCH FLAGS (\\Deleted \\Flagged \\Seen)\n               S: A003 OK STORE completed\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 34]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n6.4.8.  COPY Command\n\n   Arguments:  message set\n               mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - copy completed\n               NO - copy error: can't copy those messages or to that\n                    name\n               BAD - command unknown or arguments invalid\n\n      The COPY command copies the specified message(s) to the specified\n      destination mailbox.  The flags and internal date of the\n      message(s) SHOULD be preserved in the copy.\n\n      If the destination mailbox does not exist, a server SHOULD return\n      an error.  It SHOULD NOT automatically create the mailbox.  Unless\n      it is certain that the destination mailbox can not be created, the\n      server MUST send the response code \"[TRYCREATE]\" as the prefix of\n      the text of the tagged NO response.  This gives a hint to the\n      client that it can attempt a CREATE command and retry the COPY if\n      the CREATE is successful.\n\n      If the COPY command is unsuccessful for any reason, server\n      implementations MUST restore the destination mailbox to its state\n      before the COPY attempt.\n\n   Example:    C: A003 COPY 2:4 MEETING\n               S: A003 OK COPY completed\n\n\n6.4.9.  UID Command\n\n   Arguments:  command name\n               command arguments\n\n   Data:       untagged responses: FETCH, SEARCH\n\n   Result:     OK - UID command completed\n               NO - UID command error\n               BAD - command unknown or arguments invalid\n\n      The UID command has two forms.  In the first form, it takes as its\n      arguments a COPY, FETCH, or STORE command with arguments\n      appropriate for the associated command.  However, the numbers in\n      the message set argument are unique identifiers instead of message\n      sequence numbers.\n\n\n\nCrispin                                                        [Page 35]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      In the second form, the UID command takes a SEARCH command with\n      SEARCH command arguments.  The interpretation of the arguments is\n      the same as with SEARCH; however, the numbers returned in a SEARCH\n      response for a UID SEARCH command are unique identifiers instead\n      of message sequence numbers.  For example, the command UID SEARCH\n      1:100 UID 443:557 returns the unique identifiers corresponding to\n      the intersection of the message sequence number set 1:100 and the\n      UID set 443:557.\n\n      A unique identifier of a message is a number, and is guaranteed\n      not to refer to any other message in the mailbox.  Unique\n      identifiers are assigned in a strictly ascending fashion for each\n      message added to the mailbox.  Unlike message sequence numbers,\n      unique identifiers persist across sessions.  This permits a client\n      to resynchronize its state from a previous session with the server\n      (e.g.  disconnected or offline access clients); this is discussed\n      further in [IMAP-DISC].\n\n      Associated with every mailbox is a unique identifier validity\n      value, which is sent in an UIDVALIDITY response code in an OK\n      untagged response at message selection time.  If unique\n      identifiers from an earlier session fail to persist to this\n      session, the unique identifier validity value MUST be greater than\n      in the earlier session.\n\n           Note: An example of a good value to use for the unique\n           identifier validity value would be a 32-bit\n           representation of the creation date/time of the mailbox.\n           It is alright to use a constant such as 1, but only if\n           it guaranteed that unique identifers will never be\n           reused, even in the case of a mailbox being deleted and\n           a new mailbox by the same name created at some future\n           time.\n\n\n      Message set ranges are permitted; however, there is no guarantee\n      that unique identifiers be contiguous.  A non-existent unique\n      identifier within a message set range is ignored without any error\n      message generated.\n\n      The number after the \"*\" in an untagged FETCH response is always a\n      message sequence number, not a unique identifier, even for a UID\n      command response.  However, server implementations MUST implicitly\n      include the UID message data item as part of any FETCH response\n      caused by a UID command, regardless of whether UID was specified\n      as a message data item to the FETCH.\n\n\n\n\n\nCrispin                                                        [Page 36]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   Example:    C: A003 UID FETCH 4827313:4828442 FLAGS\n               S: * 23 FETCH (FLAGS (\\Seen) UID 4827313)\n               S: * 24 FETCH (FLAGS (\\Seen) UID 4827943)\n               S: * 25 FETCH (FLAGS (\\Seen) UID 4828442)\n               S: A999 UID FETCH completed\n\n\n\n6.5.    Client Commands - Experimental/Expansion\n\n\n6.5.1.  X<atom> Command\n\n   Arguments:  implementation defined\n\n   Data:       implementation defined\n\n   Result:     OK - command completed\n               NO - failure\n               BAD - command unknown or arguments invalid\n\n      Any command prefixed with an X is an experimental command.\n      Commands which are not part of this specification, or a standard\n      or standards-track revision of this specification, MUST use the X\n      prefix.\n\n      Any added untagged responses issued by an experimental command\n      MUST also be prefixed with an X.  Server implementations MUST NOT\n      send any such untagged responses, unless the client requested it\n      by issuing the associated experimental command.\n\n   Example:    C: a441 CAPABILITY\n               S: * CAPABILITY IMAP4 XPIG-LATIN\n               S: a441 OK CAPABILITY completed\n               C: A442 XPIG-LATIN\n               S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay\n               S: A442 OK XPIG-LATIN ompleted-cay\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 37]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n7.      Server Responses\n\n   Server responses are in three forms: status responses, server data,\n   and command continuation request.\n\n   Server response data, identified by \"Data:\" in the response\n   descriptions below, are described by function, not by syntax.  The\n   precise syntax of server response data is described in the Formal\n   Syntax section.\n\n   The client MUST be prepared to accept any response at all times.\n\n   Status responses that are tagged indicate the completion result of a\n   client command, and have a tag matching the command.\n\n   Some status responses, and all server data, are untagged.  An\n   untagged response is indicated by the token \"*\" instead of a tag.\n   Untagged status responses indicate server greeting, or server status\n   that does not indicate the completion of a command.  For historical\n   reasons, untagged server data responses are also called \"unsolicited\n   data\", although strictly speaking only unilateral server data is\n   truly \"unsolicited\".\n\n   Certain server data MUST be recorded by the client when it is\n   received; this is noted in the description of that data.  Such data\n   conveys critical information which affects the interpretation of all\n   subsequent commands and responses (e.g. updates reflecting the\n   creation or destruction of messags).\n\n   Other server data SHOULD be recorded for later reference; if the\n   client does not need to record the data, or if recording the data has\n   no obvious purpose (e.g. a SEARCH response when no SEARCH command is\n   in progress), the data SHOULD be ignored.\n\n   An example of unilateral untagged responses occurs when the IMAP\n   connection is in selected state.  In selected state, the server\n   checks the mailbox for new messages as part of the execution of each\n   command.  If new messages are found, the server sends untagged EXISTS\n   and RECENT responses reflecting the new size of the mailbox.  Server\n   implementations that offer multiple simultaneous access to the same\n   mailbox should also send appropriate unilateral untagged FETCH and\n   EXPUNGE responses if another agent changes the state of any message\n   flags or expunges any messages.\n\n   Command continuation request responses use the token \"+\" instead of a\n   tag.  These responses are sent by the server to indicate acceptance\n   of an incomplete client command and readiness for the remainder of\n   the command.\n\n\n\nCrispin                                                        [Page 38]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n7.1.    Server Responses - Status Responses\n\n   Status responses may include an optional response code.  A response\n   code consists of data inside square brackets in the form of an atom,\n   possibly followed by a space and arguments.  The response code\n   contains additional information or status codes for client software\n   beyond the OK/NO/BAD condition, and are defined when there is a\n   specific action that a client can take based upon the additional\n   information.\n\n   The currently defined response codes are:\n\n      ALERT          The human-readable text contains a special alert\n                     that MUST be presented to the user in a fashion\n                     that calls the user's attention to the message.\n\n      PARSE          The human-readable text represents an error in\n                     parsing the [RFC-822] or [MIME-1] headers of a\n                     message in the mailbox.\n\n      PERMANENTFLAGS Followed by a parenthesized list of flags,\n                     indicates which of the known flags that the client\n                     may change permanently.  Any flags that are in the\n                     FLAGS untagged response, but not the PERMANENTFLAGS\n                     list, can not be set permanently.  If the client\n                     attempts to STORE a flag that is not in the\n                     PERMANENTFLAGS list, the server will either reject\n                     it with a NO reply or store the state for the\n                     remainder of the current session only.  The\n                     PERMANENTFLAGS list may also include the special\n                     flag \\*, which indicates that it is possible to\n                     create new keywords by attempting to store those\n                     flags in the mailbox.\n\n      READ-ONLY      The mailbox is selected read-only, or its access\n                     while selected has changed from read-write to\n                     read-only.\n\n      READ-WRITE     The mailbox is selected read-write, or its access\n                     while selected has changed from read-only to\n                     read-write.\n\n      TRYCREATE      An APPEND or COPY attempt is failing because the\n                     target mailbox does not exist (as opposed to some\n                     other reason).  This is a hint to the client that\n                     the operation may succeed if the mailbox is first\n                     created by the CREATE command.\n\n\n\n\nCrispin                                                        [Page 39]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      UIDVALIDITY    Followed by a decimal number, indicates the unique\n                     identifier validity value.  See the description of\n                     the UID command for more detail.\n\n      UNSEEN         Followed by a decimal number, indicates the number\n                     of the first message without the \\Seen flag set.\n\n      Additional response codes defined by particular client or server\n      implementations should be prefixed with an \"X\" until they are\n      added to a revision of this protocol.  Client implementations\n      should ignore response codes that they do not recognize.\n\n\n7.1.1.  OK Response\n\n   Data:       optional response code\n               human-readable text\n\n      The OK response indicates an information message from the server.\n      When tagged, it indicates successful completion of the associated\n      command.  The human-readable text may be presented to the user as\n      an information message.  The untagged form indicates an\n      information-only message; the nature of the information may be\n      indicated by a response code.\n\n      The untagged form is also used as one of three possible greetings\n      at session startup.  It indicates that the session is not yet\n      authenticated and that a LOGIN command is needed.\n\n   Example:    S: * OK IMAP4 server ready\n               C: A001 LOGIN fred blurdybloop\n               S: * OK [ALERT] System shutdown in 10 minutes\n               S: A001 OK LOGIN Completed\n\n\n7.1.2.  NO Response\n\n   Data:       optional response code\n               human-readable text\n\n      The NO response indicates an operational error message from the\n      server.  When tagged, it indicates unsuccessful completion of the\n      associated command.  The untagged form indicates a warning; the\n      command may still complete successfully.  The human-readable text\n      describes the condition.\n\n\n\n\n\n\nCrispin                                                        [Page 40]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   Example:    C: A222 COPY 1:2 owatagusiam\n               S: * NO Disk is 98% full, please delete unnecessary data\n               S: A222 OK COPY completed\n               C: A222 COPY 3:200 blurdybloop\n               S: * NO Disk is 98% full, please delete unnecessary data\n               S: * NO Disk is 99% full, please delete unnecessary data\n               S: A222 NO COPY failed: disk is full\n\n\n7.1.3.  BAD Response\n\n   Data:       optional response code\n               human-readable text\n\n      The BAD response indicates an error message from the server.  When\n      tagged, it reports a protocol-level error in the client's command;\n      the tag indicates the command that caused the error.  The untagged\n      form indicates a protocol-level error for which the associated\n      command can not be determined; it may also indicate an internal\n      server failure.  The human-readable text describes the condition.\n\n   Example:    C: ...very long command line...\n               S: * BAD Command line too long\n               C: ...empty line...\n               S: * BAD Empty command line\n               C: A443 EXPUNGE\n               S: * BAD Disk crash, attempting salvage to a new disk!\n               S: * OK Salvage successful, no data lost\n               S: A443 OK Expunge completed\n\n\n7.1.4.  PREAUTH Response\n\n   Data:       optional response code\n               human-readable text\n\n      The PREAUTH response is always untagged, and is one of three\n      possible greetings at session startup.  It indicates that the\n      session has already been authenticated by external means and thus\n      no LOGIN command is needed.\n\n   Example:    S: * PREAUTH IMAP4 server ready and logged in as Smith\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 41]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n7.1.5.  BYE Response\n\n   Data:       optional response code\n               human-readable text\n\n      The BYE response is always untagged, and indicates that the server\n      is about to close the connection.  The human-readable text may be\n      displayed to the user in a status report by the client.  The BYE\n      response may be sent as part of a normal logout sequence, or as a\n      panic shutdown announcement by the server.  It is also used by\n      some server implementations as an announcement of an inactivity\n      autologout.\n\n      This response is also used as one of three possible greetings at\n      session startup.  It indicates that the server is not willing to\n      accept a session from this client.\n\n   Example:    S: * BYE Autologout; idle for too long\n\n\n\n7.2.    Server Responses - Server and Mailbox Status\n\n   These responses are always untagged.  This is how server data are\n   transmitted from the server to the client, often as a result of a\n   command with the same name.\n\n7.2.1.  CAPABILITY Response\n\n   Data:       capability listing\n\n      The CAPABILITY response occurs as a result of a CAPABILITY\n      command.  The capability listing contains a space-separated\n      listing of capability names that the server supports.  The first\n      name in the capability listing MUST be the atom \"IMAP4\".\n\n      A capability name other than IMAP4 indicates that the server\n      supports an extension, revision, or amendment to the IMAP4\n      protocol.  Server responses MUST conform to this document until\n      the client issues a command that uses the associated capability.\n\n      Capability names MUST either begin with \"X\" or be standard or\n      standards-track IMAP4 extensions, revisions, or amendments\n      registered with IANA.  A server MUST NOT offer unregistered or\n      non-standard capability names, unless such names are prefixed with\n      an \"X\".\n\n\n\n\n\nCrispin                                                        [Page 42]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      Client implementations SHOULD NOT require any capability name\n      other than \"IMAP4\", and MUST ignore any unknown capability names.\n\n   Example:    S: * CAPABILITY IMAP4 XPIG-LATIN\n\n\n7.2.2.  LIST Response\n\n   Data:       name attributes\n               hierarchy delimiter\n               name\n\n      The LIST response occurs as a result of a LIST command.  It\n      returns a single name that matches the LIST specification.  There\n      may be multiple LIST responses for a single LIST command.\n\n      Four name attributes are defined:\n\n      \\Noinferiors   It is not possible for any child levels of\n                     hierarchy to exist under this name; no child levels\n                     exist now and none can be created in the future.\n\n      \\Noselect      It is not possible to use this name as a selectable\n                     mailbox.\n\n      \\Marked        The mailbox has been marked \"interesting\" by the\n                     server; the mailbox probably contains messages that\n                     have been added since the last time the mailbox was\n                     selected.\n\n      \\Unmarked      The mailbox does not contain any additional\n                     messages since the last time the mailbox was\n                     selected.\n\n      If it is not feasible for the server to determine whether the\n      mailbox is \"interesting\" or not, or if the name is a \\Noselect\n      name, the server should not send either \\Marked or \\Unmarked.\n\n      The hierarchy delimiter is a character used to delimit levels of\n      hierarchy in a mailbox name.  A client may use it to create child\n      mailboxes, and to search higher or lower levels of naming\n      hierarchy.  All children of a top-level hierarchy node must use\n      the same separator character.  A NIL hierarchy delimiter means\n      that no hierarchy exists; the name is a \"flat\" name.\n\n\n\n\n\n\n\nCrispin                                                        [Page 43]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      The name represents an unambiguous left-to-right hierarchy, and\n      MUST be valid for use as a reference in LIST and LSUB commands.\n      Unless \\Noselect is indicated, the name must also be valid as an\n      argument for commands, such as SELECT, that accept mailbox names.\n\n   Example:    S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n\n\n7.2.3.  LSUB Response\n\n   Data:       name attributes\n               hierarchy delimiter\n               name\n\n      The LSUB response occurs as a result of an LSUB command.  It\n      returns a single name that matches the LSUB specification.  There\n      may be multiple LSUB responses for a single LSUB command.  The\n      data is identical in format to the LIST response.\n\n   Example:    S: * LSUB () \".\" #news.comp.mail.misc\n\n\n7.2.4.  SEARCH Response\n\n   Data:       zero or more numbers\n\n      The SEARCH response occurs as a result of a SEARCH or UID SEARCH\n      command.  The number(s) refer to those messages that match the\n      search criteria.  For SEARCH, these are message sequence numbers;\n      for UID SEARCH, these are unique identifiers.  Each number is\n      delimited by a space.\n\n   Example:    S: * SEARCH 2 3 6\n\n\n7.2.5.  FLAGS Response\n\n   Data:       flag parenthesized list\n\n      The FLAGS response occurs as a result of a SELECT or EXAMINE\n      command.  The flag parenthesized list identifies the flags (at a\n      minimum, the system-defined flags) that are applicable for this\n      mailbox.  Flags other than the system flags may also exist,\n      depending on server implementation.\n\n      The update from the FLAGS response MUST be recorded by the client.\n\n   Example:    S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n\n\n\nCrispin                                                        [Page 44]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n7.3.    Server Responses - Message Status\n\n   These responses are always untagged.  This is how message data are\n   transmitted from the server to the client, often as a result of a\n   command with the same name.  Immediately following the \"*\" token is a\n   number that represents either a message sequence number or a message\n   count.\n\n7.3.1.  EXISTS Response\n\n   Data:       none\n\n      The EXISTS response reports the number of messages in the mailbox.\n      This response occurs as a result of a SELECT or EXAMINE command,\n      and if the size of the mailbox changes (e.g. new mail).\n\n      The update from the EXISTS response MUST be recorded by the\n      client.\n\n   Example:    S: * 23 EXISTS\n\n\n7.3.2.  RECENT Response\n\n   Data:       none\n\n      The RECENT response reports the number of messages that have\n      arrived since the previous time a SELECT command was done on this\n      mailbox.  This response occurs as a result of a SELECT or EXAMINE\n      command, and if the size of the mailbox changes (e.g. new mail).\n\n      The update from the RECENT response MUST be recorded by the\n      client.\n\n   Example:    S: * 5 RECENT\n\n\n7.3.3.  EXPUNGE Response\n\n   Data:       none\n\n      The EXPUNGE response reports that the specified message sequence\n      number has been permanently removed from the mailbox.  The message\n      sequence number for each successive message in the mailbox is\n      immediately decremented by 1, and this decrement is reflected in\n      message sequence numbers in subsequent responses (including other\n      untagged EXPUNGE responses).\n\n\n\n\nCrispin                                                        [Page 45]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      As a result of the immediate decrement rule, message sequence\n      numbers that appear in a set of successive EXPUNGE responses\n      depend upon whether the messages are removed starting from lower\n      numbers to higher numbers, or from higher numbers to lower\n      numbers.  For example, if the last 5 messages in a 9-message\n      mailbox are expunged; a \"lower to higher\" server will send five\n      untagged EXPUNGE responses for message sequence number 5, whereas\n      a \"higher to lower server\" will send successive untagged EXPUNGE\n      responses for message sequence numbers 9, 8, 7, 6, and 5.\n\n      An EXPUNGE response MUST NOT be sent when no command is in\n      progress; nor while responding to a FETCH, STORE, or SEARCH\n      command.  This rule is necessary to prevent a loss of\n      synchronization of message sequence numbers between client and\n      server.\n\n      The update from the EXPUNGE response MUST be recorded by the\n      client.\n\n   Example:    S: * 44 EXPUNGE\n\n\n7.3.4.  FETCH Response\n\n   Data:       message data\n\n      The FETCH response returns data about a message to the client.\n      The data are pairs of data item names and their values in\n      parentheses.  This response occurs as the result of a FETCH or\n      STORE command, as well as by unilateral server decision (e.g. flag\n      updates).\n\n      The current data items are:\n\n      BODY           A form of BODYSTRUCTURE without extension data.\n\n      BODY[section]  A string expressing the body contents of the\n                     specified section.  The string should be\n                     interpreted by the client according to the content\n                     transfer encoding, body type, and subtype.\n\n                     8-bit textual data is permitted if a character set\n                     identifier is part of the body parameter\n                     parenthesized list for this section.\n\n                     Non-textual data such as binary data must be\n                     transfer encoded into a textual form such as BASE64\n                     prior to being sent to the client.  To derive the\n\n\n\nCrispin                                                        [Page 46]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n                     original binary data, the client must decode the\n                     transfer encoded string.\n\n      BODYSTRUCTURE  A parenthesized list that describes the body\n                     structure of a message.  This is computed by the\n                     server by parsing the [RFC-822] header and body\n                     into the component parts, defaulting various fields\n                     as necessary.\n\n                     Multiple parts are indicated by parenthesis\n                     nesting.  Instead of a body type as the first\n                     element of the parenthesized list there is a nested\n                     body.  The second element of the parenthesized list\n                     is the multipart subtype (mixed, digest, parallel,\n                     alternative, etc.).\n\n                     Extension data follows the multipart subtype.\n                     Extension data is never returned with the BODY\n                     fetch, but may be returned with a BODYSTRUCTURE\n                     fetch.  Extension data, if present, must be in the\n                     defined order.\n\n                     The extension data of a multipart body part are in\n                     the following order:\n\n                     body parameter parenthesized list\n                        A parenthesized list of attribute/value pairs\n                        [e.g. (foo bar baz rag) where \"bar\" is the value\n                        of \"foo\" and \"rag\" is the value of \"baz\"] as\n                        defined in [MIME-1].\n\n                     Any following extension data are not yet defined in\n                     this version of the protocol.  Such extension data\n                     may consist of zero or more NILs, strings, numbers,\n                     or potentially nested parenthesized lists of such\n                     data.  Client implementations that do a\n                     BODYSTRUCTURE fetch MUST be prepared to accept such\n                     extension data.  Server implementations MUST NOT\n                     send such extension data until it has been defined\n                     by a revision of this protocol.\n\n                     The basic fields of a non-multipart body part are\n                     in the following order:\n\n                     body type\n                        A string giving the content type name as defined\n                        in [MIME-1].\n\n\n\n\nCrispin                                                        [Page 47]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n                     body subtype\n                        A string giving the content subtype name as\n                        defined in [MIME-1].\n\n                     body parameter parenthesized list\n                        A parenthesized list of attribute/value pairs\n                        [e.g. (foo bar baz rag) where \"bar\" is the value\n                        of \"foo\" and \"rag\" is the value of \"baz\"] as\n                        defined in [MIME-1].\n\n                     body id\n                        A string giving the content id as defined in\n                        [MIME-1].\n\n                     body description\n                        A string giving the content description as\n                        defined in [MIME-1].\n\n                     body encoding\n                        A string giving the content transfer encoding as\n                        defined in [MIME-1].\n\n                     body size\n                        A number giving the size of the body in octets.\n                        Note that this size is the size in its transfer\n                        encoding and not the resulting size after any\n                        decoding.\n\n                     A body type of type MESSAGE and subtype RFC822\n                     contains, immediately after the basic fields, the\n                     envelope structure, body structure, and size in\n                     text lines of the encapsulated message.\n\n                     A body type of type TEXT contains, immediately\n                     after the basic fields, the size of the body in\n                     text lines.  Note that this size is the size in its\n                     transfer encoding and not the resulting size after\n                     any decoding.\n\n                     Extension data follows the basic fields and the\n                     type-specific fields listed above.  Extension data\n                     is never returned with the BODY fetch, but may be\n                     returned with a BODYSTRUCTURE fetch.  Extension\n                     data, if present, must be in the defined order.\n\n                     The extension data of a non-multipart body part are\n                     in the following order:\n\n\n\n\nCrispin                                                        [Page 48]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n                     body MD5\n                        A string giving the content MD5 value as defined\n                        in [MIME-1].\n\n                     Any following extension data are not yet defined in\n                     this version of the protocol, and would be as\n                     described above under multipart extension data.\n\n      ENVELOPE       A parenthesized list that describes the envelope\n                     structure of a message.  This is computed by the\n                     server by parsing the [RFC-822] header into the\n                     component parts, defaulting various fields as\n                     necessary.\n\n                     The fields of the envelope structure are in the\n                     following order: date, subject, from, sender,\n                     reply-to, to, cc, bcc, in-reply-to, and message-id.\n                     The date, subject, in-reply-to, and message-id\n                     fields are strings.  The from, sender, reply-to,\n                     to, cc, and bcc fields are parenthesized lists of\n                     address structures.\n\n                     An address structure is a parenthesized list that\n                     describes an electronic mail address.  The fields\n                     of an address structure are in the following order:\n                     personal name, [SMTP] at-domain-list (source\n                     route), mailbox name, and host name.\n\n                     [RFC-822] group syntax is indicated by a special\n                     form of address structure in which the host name\n                     field is NIL.  If the mailbox name field is also\n                     NIL, this is an end of group marker (semi-colon in\n                     RFC 822 syntax).  If the mailbox name field is\n                     non-NIL, this is a start of group marker, and the\n                     mailbox name field holds the group name phrase.\n\n                     Any field of an envelope or address structure that\n                     is not applicable is presented as NIL.  Note that\n                     the server must default the reply-to and sender\n                     fields from the from field; a client is not\n                     expected to know to do this.\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 49]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      FLAGS          A parenthesized list of flags that are set for this\n                     message.  This may include keywords as well as the\n                     following system flags:\n\n                     \\Seen       Message has been read\n\n                     \\Answered   Message has been answered\n\n                     \\Flagged    Message is \"flagged\" for urgent/special\n                                 attention\n\n                     \\Deleted    Message is \"deleted\" for removal by\n                                 later EXPUNGE\n\n                     \\Draft      Message has not completed composition\n                                 (marked as a draft).\n\n                     as well as the following special flag, which may be\n                     fetched but not stored:\n\n                     \\Recent     Message has arrived since the previous\n                                 time this mailbox was selected.\n\n      INTERNALDATE   A string containing the date and time of final\n                     delivery of the message as defined by [SMTP].\n\n      RFC822         A string expressing the message in [RFC-822]\n                     format.  The header portion of the message must be\n                     7-bit.  8-bit characters are permitted only in the\n                     non-header portion of the message only if there are\n                     [MIME-1] data in the message that identify the\n                     character set of the message.\n\n      RFC822.HEADER  A string expressing the [RFC-822] format header of\n                     the message, including the delimiting blank line\n                     between the header and the body.  The entire string\n                     must be 7-bit; 8-bit characters are not permitted\n                     in headers.  RFC822.HEADER is used to return data\n                     for the RFC822.HEADER, RFC822.HEADER.LINES, and\n                     RFC822.HEADER.LINES.NOT FETCH data items.  Note\n                     that a blank line is always included regardless of\n                     header line restrictions.\n\n      RFC822.SIZE    A number expressing the number of octets in the\n                     message in [RFC-822] format.\n\n\n\n\n\n\nCrispin                                                        [Page 50]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      RFC822.TEXT    A string expressing the text body of the message,\n                     omitting the [RFC-822] header.  8-bit characters\n                     are permitted only if there are [MIME-1] data in\n                     the message that identify the character set of the\n                     message.\n\n      UID            A number expressing the unique identifier of the\n                     message.\n\n\n   Example:    S: * 23 FETCH (FLAGS (\\Seen) RFC822.SIZE 44827)\n\n\n7.3.5.  Obsolete Responses\n\n   In addition to the responses listed in here, client implementations\n   MUST accept and implement the obsolete responses described in\n   Appendix B.\n\n\n\n7.4.    Server Responses - Command Continuation Request\n\n   The command completion request response is indicated by a \"+\" token\n   instead of a tag.  This form of response indicates that the server is\n   ready to accept the continuation of a command from the client.  The\n   remainder of this response is a line of text.\n\n   This response is used in the AUTHORIZATION command to transmit server\n   data to the client, and request additional client data.  This\n   response is also used if an argument to any command is a literal.\n\n   The client is not permitted to send the octets of the literal unless\n   the server indicates that it expects it.  This permits the server to\n   process commands and reject errors on a line-by-line basis.  The\n   remainder of the command, including the CRLF that terminates a\n   command, follows the octets of the literal.  If there are any\n   additional command arguments the literal octets are followed by a\n   space and those arguments.\n\n   Example:    C: A001 LOGIN {11}\n               S: + Ready for additional command text\n               C: FRED FOOBAR {7}\n               S: + Ready for additional command text\n               C: fat man\n               S: A001 OK LOGIN completed\n               C: A044 BLURDYBLOOP {102856}\n               S: A044 BAD No such command as \"BLURDYBLOOP\"\n\n\n\nCrispin                                                        [Page 51]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n8.      Sample IMAP4 session\n\n   The following is a transcript of an IMAP4 session.  A long line in\n   this sample is broken for editorial clarity.\n\n   S:   * OK IMAP4 Service Ready\n   C:   a001 login mrc secret\n   S:   a001 OK LOGIN completed\n   C:   a002 select inbox\n   S:   * 18 EXISTS\n   S:   * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n   S:   * 2 RECENT\n   S:   * OK [UNSEEN 17] Message 17 is the first unseen message\n   S:   * OK [UIDVALIDITY 3857529045] UIDs valid\n   S:   a002 OK [READ-WRITE] SELECT completed\n   C:   a003 fetch 12 full\n   S:   * 12 FETCH (FLAGS (\\Seen) INTERNALDATE \"14-Jul-1993 02:44:25 -0700\"\n         RFC822.SIZE 4282 ENVELOPE (\"Wed, 14 Jul 1993 02:23:25 -0700 (PDT)\"\n         \"IMAP4 WG mtg summary and minutes\"\n         ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n         ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n         ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n         ((NIL NIL \"imap\" \"cac.washington.edu\"))\n         ((NIL NIL \"minutes\" \"CNRI.Reston.VA.US\")\n         (\"John Klensin\" NIL \"KLENSIN\" \"INFOODS.MIT.EDU\")) NIL NIL\n         \"<B27397-0100000@cac.washington.edu>\")\n          BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 3028 92))\n   S:    a003 OK FETCH completed\n   C:    a004 fetch 12 rfc822.header\n   S:    * 12 FETCH (RFC822.HEADER {346}\n   S:    Date: Wed, 14 Jul 1993 02:23:25 -0700 (PDT)\n   S:    From: Terry Gray <gray@cac.washington.edu>\n   S:    Subject: IMAP4 WG mtg summary and minutes\n   S:    To: imap@cac.washington.edu\n   S:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU>\n   S:    Message-Id: <B27397-0100000@cac.washington.edu>\n   S:    MIME-Version: 1.0\n   S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n   S:\n   S:    )\n   S:    a004 OK FETCH completed\n   C:    a005 store 12 +flags \\deleted\n   S:    * 12 FETCH (FLAGS (\\Seen \\Deleted))\n   S:    a005 OK +FLAGS completed\n   C:    a006 logout\n   S:    * BYE IMAP4 server terminating connection\n   S:    a006 OK LOGOUT completed\n\n\n\n\nCrispin                                                        [Page 52]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n9.      Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [RFC-822] with one exception; the\n   delimiter used with the \"#\" construct is a single space (SPACE) and\n   not a comma.\n\n   Except as noted otherwise, all alphabetic characters are\n   case-insensitive.  The use of upper or lower case characters to\n   define token strings is for editorial clarity only.  Implementations\n   MUST accept these strings in a case-insensitive fashion.\n\n   Syntax marked as obsolete may be encountered with implementations\n   written for an earlier version of this protocol (e.g. IMAP2).  New\n   implementations SHOULD accept obsolete syntax as input, but MUST NOT\n   otherwise use such syntax.\n\n   address         ::= \"(\" addr_name SPACE addr_adl SPACE addr_mailbox\n                       SPACE addr_host \")\"\n\n   addr_adl        ::= nstring\n\n   addr_host       ::= nstring\n                       ;; NIL indicates [RFC-822] group syntax\n\n   addr_mailbox    ::= nstring\n                       ;; NIL indicates end of [RFC-822] group; if\n                       ;; non-NIL and addr_host is NIL, holds\n                       ;; [RFC-822] group name\n\n   addr_name       ::= nstring\n\n   alpha           ::= \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\" / \"G\" / \"H\" /\n                       \"I\" / \"J\" / \"K\" / \"L\" / \"M\" / \"N\" / \"O\" / \"P\" /\n                       \"Q\" / \"R\" / \"S\" / \"T\" / \"U\" / \"V\" / \"W\" / \"X\" /\n                       \"Y\" / \"Z\" /\n                       \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" / \"g\" / \"h\" /\n                       \"i\" / \"j\" / \"k\" / \"l\" / \"m\" / \"n\" / \"o\" / \"p\" /\n                       \"q\" / \"r\" / \"s\" / \"t\" / \"u\" / \"v\" / \"w\" / \"x\" /\n                       \"y\" / \"z\" /\n                       ;; Case-sensitive\n\n   append          ::= \"APPEND\" SPACE mailbox [SPACE flag_list]\n                       [SPACE date_time] SPACE literal\n\n   astring         ::= atom / string\n\n\n\n\n\nCrispin                                                        [Page 53]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   atom            ::= 1*ATOM_CHAR\n\n   ATOM_CHAR       ::= <any CHAR except atom_specials>\n\n   atom_specials   ::= \"(\" / \")\" / \"{\" / SPACE / CTLs / list_wildcards /\n                       quoted_specials\n\n   authenticate    ::= \"AUTHENTICATE\" SPACE auth_type *(CRLF base64)\n\n   auth_type       ::= atom\n\n   base64          ::= *(4base64_char) [base64_terminal]\n\n   base64_char     ::= alpha / digit / \"+\" / \"/\"\n\n   base64_terminal ::= (2base64_char \"==\") / (3base64_char \"=\")\n\n   body            ::= \"(\" body_type_1part / body_type_mpart \")\"\n\n   body_extension  ::= nstring / number / \"(\" 1#body_extension \")\"\n                       ;; Future expansion.  Client implementations\n                       ;; MUST accept body_extension fields.  Server\n                       ;; implementations MUST NOT generate\n                       ;; body_extension fields except as defined by\n                       ;; future standard or standards-track\n                       ;; revisions of this specification.\n\n   body_ext_1part  ::= body_fld_md5 [SPACE 1#body_extension]\n                       ;; MUST NOT be returned on non-extensible\n                       ;; \"BODY\" fetch\n\n   body_ext_mpart  ::= body_fld_param [SPACE 1#body_extension]]\n                       ;; MUST NOT be returned on non-extensible\n                       ;; \"BODY\" fetch\n\n   body_fields     ::= body_fld_param SPACE body_fld_id SPACE\n                       body_fld_desc SPACE body_fld_enc SPACE\n                       body_fld_octets\n\n   body_fld_desc   ::= nstring\n\n   body_fld_enc    ::= (<\"> (\"7BIT\" / \"8BIT\" / \"BINARY\" / \"BASE64\"/\n                       \"QUOTED-PRINTABLE\") <\">) / string\n\n   body_fld_id     ::= nstring\n\n   body_fld_lines  ::= number\n\n\n\n\nCrispin                                                        [Page 54]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   body_fld_md5    ::= nstring\n\n   body_fld_octets ::= number\n\n   body_fld_param  ::= \"(\" 1#(string string) \")\" / nil\n\n   body_fld_subtyp ::= string\n\n   body_type_1part ::= (body_type_basic / body_type_msg / body_type_text)\n                       [SPACE body_ext_1part]\n\n   body_type_basic ::= (<\"> (\"APPLICATION\" / \"AUDIO\" / \"IMAGE\" /\n                       \"MESSAGE\" / \"VIDEO\") <\">) / string) SPACE\n                       body_fld_subtyp SPACE body_fields\n                       ;; MESSAGE subtype MUST NOT be \"RFC822\"\n\n   body_type_mpart ::= 1*body SPACE body_fld_subtyp\n                       [SPACE body_ext_mpart]\n\n   body_type_msg   ::= <\"> \"MESSAGE\" <\"> SPACE <\"> \"RFC822\" <\"> SPACE\n                       body_fields SPACE envelope SPACE body SPACE\n                       body_fld_lines\n\n   body_type_text  ::= <\"> \"TEXT\" <\"> SPACE body_fld_subtyp SPACE\n                        body_fields SPACE body_fld_lines\n\n   capability      ::= atom\n                       ;; Must begin with \"X\" or be registered with\n                       ;; IANA as standard or standards-track\n\n   capability_data ::= \"CAPABILITY\" SPACE \"IMAP4\" [SPACE 1#capability]\n\n   CHAR            ::= <any 7-bit US-ASCII character except NUL,\n                        0x01 - 0x7f>\n\n   CHAR8           ::= <any 8-bit octet except NUL, 0x01 - 0xff>\n\n   command         ::= tag SPACE (command_any / command_auth /\n                       command_nonauth / command_select) CRLF\n                       ;; Modal based on state\n\n   command_any     ::= \"CAPABILITY\" / \"LOGOUT\" / \"NOOP\" / x_command\n                       ;; Valid in all states\n\n   command_auth    ::= append / create / delete / examine / find / list /\n                       lsub / rename / select / subscribe / unsubscribe /\n                       ;; Valid only in Authenticated or Selected state\n\n\n\n\nCrispin                                                        [Page 55]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   command_nonauth ::= login / authenticate\n                       ;; Valid only when in Non-Authenticated state\n\n   command_select  ::= \"CHECK\" / \"CLOSE\" / \"EXPUNGE\" /\n                        copy / fetch / partial / store / uid / search\n                       ;; Valid only when in Selected state\n\n   continue_req    ::= \"+\" SPACE (resp_text / base64)\n\n   copy            ::= \"COPY\" SPACE set SPACE mailbox\n\n   CR              ::= <ASCII CR, carriage return, 0x0C>\n\n   create          ::= \"CREATE\" SPACE mailbox\n                       ;; Use of INBOX gives a NO error\n\n   CRLF            ::= CR LF\n\n   CTL             ::= <any ASCII control character and DEL,\n                        0x00 - 0x1f, 0x7f>\n\n   date            ::= date_text / <\"> date_text <\">\n\n   date_day        ::= 1*2digit\n                       ;; Day of month\n\n   date_day_fixed  ::= (SPACE digit) / 2digit\n                       ;; Fixed-format version of date_day\n\n   date_month      ::= \"Jan\" / \"Feb\" / \"Mar\" / \"Apr\" / \"May\" / \"Jun\" /\n                       \"Jul\" / \"Aug\" / \"Sep\" / \"Oct\" / \"Nov\" / \"Dec\"\n\n   date_text       ::= date_day \"-\" date_month \"-\" (date_year /\n                       date_year_old)\n\n   date_year       ::= 4digit\n\n   date_year_old   ::= 2digit\n                       ;; OBSOLETE, (year - 1900)\n\n   date_time       ::= <\"> (date_time_new / date_time_old) <\">\n\n   date_time_new   ::= date_day_fixed \"-\" date_month \"-\" date_year\n                       SPACE time SPACE zone\n\n   date_time_old   ::= date_day_fixed \"-\" date_month \"-\" date_year_old\n                       SPACE time \"-\" zone_old\n                       ;; OBSOLETE\n\n\n\nCrispin                                                        [Page 56]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   delete          ::= \"DELETE\" SPACE mailbox\n                       ;; Use of INBOX gives a NO error\n\n   digit           ::= \"0\" / digit_nz\n\n   digit_nz        ::= \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" / \"8\" /\n                       \"9\"\n\n   envelope        ::= \"(\" env_date SPACE env_subject SPACE env_from\n                       SPACE env_sender SPACE env_reply-to SPACE env_to\n                       SPACE env_cc SPACE env_bcc SPACE env_in-reply-to\n                       SPACE env_message-id \")\"\n\n   env_bcc         ::= \"(\" 1*address \")\" / nil\n\n   env_cc          ::= \"(\" 1*address \")\" / nil\n\n   env_date        ::= nstring\n\n   env_from        ::= \"(\" 1*address \")\" / nil\n\n   env_in-reply-to ::= nstring\n\n   env_message-id  ::= nstring\n\n   env_reply-to    ::= \"(\" 1*address \")\" / nil\n\n   env_sender      ::= \"(\" 1*address \")\" / nil\n\n   env_subject     ::= nstring\n\n   env_to          ::= \"(\" 1*address \")\" / nil\n\n   examine         ::= \"EXAMINE\" SPACE mailbox\n\n   fetch           ::= \"FETCH\" SPACE set SPACE (\"ALL\" / \"FULL\" /\n                       \"FAST\" / fetch_att / \"(\" 1#fetch_att \")\")\n\n   fetch_att       ::= \"BODY\" / \"BODYSTRUCTURE\" /\n                       \"BODY\" [\".PEEK\"] \"[\" section \"]\" / \"ENVELOPE\" /\n                       \"FLAGS\" / \"INTERNALDATE\" / \"UID\" /\n                       \"RFC822\" (([\".TEXT\"] [\".PEEK\"]) / \".SIZE\" /\n                       (\".HEADER\" [\".LINES\" [\".NOT\"] SPACE header_list])\n\n   find            ::= \"FIND\" SPACE [\"ALL.\"] \"MAILBOXES\" SPACE\n                       list_mailbox\n                       ;; OBSOLETE\n\n\n\n\nCrispin                                                        [Page 57]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   flag            ::= \"\\Answered\" / \"\\Flagged\" / \"\\Deleted\" /\n                       \"\\Seen\" / \"\\Draft\" / flag_keyword  /\n                       flag_extension\n\n   flag_extension  ::= \"\\\" atom\n                       ;; Future expansion.  Client implementations\n                       ;; MUST accept flag_extension flags.  Server\n                       ;; implementations MUST NOT generate\n                       ;; flag_extension flags except as defined by\n                       ;; future standard or standards-track\n                       ;; revisions of this specification.\n\n   flag_keyword    ::= atom\n\n   flag_list       ::= \"(\" #flag \")\"\n\n   greeting        ::= \"*\" SPACE (resp_cond_auth / resp_cond_bye) CRLF\n\n   header_line     ::= astring\n\n   header_list     ::= \"(\" 1#header_line \")\"\n\n   LF              ::= <ASCII LF, line feed, 0x0A>\n\n   list            ::= \"LIST\" SPACE mailbox SPACE list_mailbox\n\n   list_mailbox    ::= 1*(ATOM_CHAR / list_wildcards) / string\n\n   list_wildcards  ::= \"%\" / \"*\"\n\n   literal         ::= \"{\" number \"}\" CRLF *CHAR8\n                       ;; Number represents the number of CHAR8 octets\n\n   login           ::= \"LOGIN\" SPACE userid SPACE password\n\n   lsub            ::= \"LSUB\" SPACE mailbox SPACE list_mailbox\n\n   mailbox         ::= \"INBOX\" / astring\n                       ;; INBOX is case-insensitive; other names may be\n                       ;; case-sensitive depending on implementation.\n\n   mailbox_data    ::=  \"FLAGS\" SPACE flag_list /\n                        \"LIST\" SPACE mailbox_list /\n                        \"LSUB\" SPACE mailbox_list /\n                        \"MAILBOX\" SPACE text /\n                        \"SEARCH\" [SPACE 1#nz_number] /\n                        number SPACE \"EXISTS\" / number SPACE \"RECENT\"\n\n\n\n\nCrispin                                                        [Page 58]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   mailbox_list    ::= \"(\" #(\"\\Marked\" / \"\\Noinferiors\" /\n                       \"\\Noselect\" / \"\\Unmarked\" / flag_extension) \")\"\n                       SPACE (<\"> QUOTED_CHAR <\"> / nil) SPACE mailbox\n\n   message_data    ::= nz_number SPACE (\"EXPUNGE\" /\n                       (\"FETCH\" SPACE msg_fetch) / msg_obsolete)\n\n   msg_fetch       ::= \"(\" 1#(\"BODY\" SPACE body /\n                       \"BODYSTRUCTURE\" SPACE body /\n                       \"BODY[\" section \"]\" SPACE nstring /\n                       \"ENVELOPE\" SPACE envelope /\n                       \"FLAGS\" SPACE \"(\" #(flag / \"\\Recent\") \")\" /\n                       \"INTERNALDATE\" SPACE date_time /\n                       \"RFC822\" [\".HEADER\" / \".TEXT\"] SPACE nstring /\n                       \"RFC822.SIZE\" SPACE number /\n                       \"UID\" SPACE uniqueid) \")\"\n\n   msg_obsolete    ::= \"COPY\" / (\"STORE\" SPACE msg_fetch)\n                       ;; OBSOLETE untagged data responses\n\n   nil             ::= \"NIL\"\n\n   nstring         ::= string / nil\n\n   number          ::= 1*digit\n                       ;; Unsigned 32-bit integer\n                       ;; (0 <= n < 4,294,967,296)\n\n   nz_number       ::= digit_nz *digit\n                       ;; Non-zero unsigned 32-bit integer\n                       ;; (0 < n < 4,294,967,296)\n\n   partial         ::= \"PARTIAL\" SPACE nz_number SPACE\n                       (\"BODY\" [\".PEEK\"] \"[\" section \"]\" /\n                       \"RFC822\" (([\".TEXT\"] [\".PEEK\"]) / \".HEADER\")\n                       SPACE number SPACE number\n\n   password        ::= astring\n\n   quoted          ::= <\"> *QUOTED_CHAR <\">\n\n   QUOTED_CHAR     ::= <any TEXT_CHAR except quoted_specials> /\n                       \"\\\" quoted_specials\n\n   quoted_specials ::= <\"> / \"\\\"\n\n   rename          ::= \"RENAME\" SPACE mailbox SPACE mailbox\n                       ;; Use of INBOX as a destination gives a NO error\n\n\n\nCrispin                                                        [Page 59]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   response        ::= *response_data response_done\n\n   response_data   ::= \"*\" SPACE (resp_cond_state / resp_cond_bye /\n                       mailbox_data / message_data / capability_data)\n                       CRLF\n\n   response_done   ::= response_tagged / response_fatal\n\n   response_fatal  ::= \"*\" SPACE resp_cond_bye CRLF\n\n   response_tagged ::= tag SPACE resp_cond_state CRLF\n\n   resp_cond_auth  ::= (\"OK\" / \"PREAUTH\") SPACE resp_text\n                       ;; Authentication condition\n\n   resp_cond_bye   ::= \"BYE\" SPACE resp_text\n                       ;; Server will disconnect condition\n\n   resp_cond_state ::= (\"OK\" / \"NO\" / \"BAD\") SPACE resp_text\n                       ;; Status condition\n\n   resp_text       ::= [\"[\" resp_text_code \"]\" SPACE] (text_mime2 / text)\n\n   resp_text_code  ::= \"ALERT\" / \"PARSE\" /\n                       \"PERMANENTFLAGS\" SPACE \"(\" #(flag / \"\\*\") \")\" /\n                       \"READ-ONLY\" / \"READ-WRITE\" / \"TRYCREATE\" /\n                       \"UIDVALIDITY\" SPACE nz_number /\n                       \"UNSEEN\" SPACE nz_number /\n                       atom [SPACE 1*<any TEXT_CHAR except \"]\">]\n\n   search          ::= \"SEARCH\" SPACE [\"CHARSET\" SPACE astring SPACE]\n                       search_criteria\n                       ;; Character set must be registered with IANA\n                       ;; as a MIME character set\n\n   search_criteria ::= 1#search_key\n\n   search_key      ::= search_new / search_old\n\n   search_new      ::= \"DRAFT\" /\n                       \"HEADER\" SPACE header_line SPACE astring /\n                       \"LARGER\" SPACE number / \"NOT\" SPACE search_key /\n                       \"OR\" SPACE search_key SPACE search_key /\n                       \"SENTBEFORE\" SPACE date / \"SENTON\" SPACE date /\n                       \"SENTSINCE\" SPACE date / \"SMALLER\" SPACE number /\n                       \"UID\" SPACE set / \"UNDRAFT\" / set /\n                       \"(\" search_criteria \")\"\n                       ;; New in IMAP4\n\n\n\nCrispin                                                        [Page 60]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   search_old      ::= \"ALL\" / \"ANSWERED\" / \"BCC\" SPACE astring /\n                       \"BEFORE\" SPACE date / \"BODY\" SPACE astring /\n                       \"CC\" SPACE astring / \"DELETED\" / \"FLAGGED\" /\n                       \"FROM\" SPACE astring /\n                       \"KEYWORD\" SPACE flag_keyword / \"NEW\" / \"OLD\" /\n                       \"ON\" SPACE date / \"RECENT\" / \"SEEN\" /\n                       \"SINCE\" SPACE date / \"SUBJECT\" SPACE astring /\n                       \"TEXT\" SPACE astring / \"TO\" SPACE astring /\n                       \"UNANSWERED\" / \"UNDELETED\" / \"UNFLAGGED\" /\n                       \"UNKEYWORD\" SPACE flag_keyword / \"UNSEEN\"\n                       ;; Defined in [IMAP2]\n\n   section         ::= \"0\" / nz_number [\".\" section]\n\n   select          ::= \"SELECT\" SPACE mailbox\n\n   sequence_num    ::= nz_number / \"*\"\n                       ;; * is the largest number in use.  For message\n                       ;; sequence numbers, it is the number of messages\n                       ;; in the mailbox.  For unique identifiers, it is\n                       ;; the unique identifier of the last message in\n                       ;; the mailbox.\n\n   set             ::= sequence_num / (sequence_num \":\" sequence_num) /\n                       (set \",\" set)\n                       ;; Identifies a set of messages.  For message\n                       ;; sequence numbers, these are consecutive\n                       ;; numbers from 1 to the number of messages in\n                       ;; the mailbox\n                       ;; Comma delimits individual numbers, colon\n                       ;; delimits between two numbers inclusive.\n                       ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13,\n                       ;; 14,15 for a mailbox with 15 messages.\n\n   SPACE           ::= <ASCII SP, space, 0x20>\n\n   store           ::= \"STORE\" SPACE set SPACE store_att_flags\n\n   store_att_flags ::= ([\"+\" / \"-\"] \"FLAGS\" [\".SILENT\"]) SPACE\n                       (flag_list / #flag)\n\n   string          ::= quoted / literal\n\n   subscribe       ::= (\"SUBSCRIBE\" SPACE mailbox) / subscribe_obs\n\n   subscribe_obs   ::= \"SUBSCRIBE\" SPACE \"MAILBOX\" SPACE mailbox\n                       ;;OBSOLETE\n\n\n\n\nCrispin                                                        [Page 61]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   tag             ::= 1*<any ATOM_CHAR except \"+\">\n\n   text            ::= 1*TEXT_CHAR\n\n   text_mime2       ::= \"=?\" <charset> \"?\" <encoding> \"?\"\n                        <encoded-text> \"?=\"\n                        ;; Syntax defined in [MIME-2]\n\n   TEXT_CHAR       ::= <any CHAR except CR and LF>\n\n   time            ::= 2digit \":\" 2digit \":\" 2digit\n                       ;; Hours minutes seconds\n\n   uid             ::= \"UID\" SPACE (copy / fetch / search / store)\n                       ;; Unique identifiers used instead of message\n                       ;; sequence numbers\n\n   uniqueid        ::= nz_number\n                       ;; Strictly ascending\n\n   unsubscribe     ::= (\"UNSUBSCRIBE\" SPACE mailbox) / unsubscribe_obs\n\n   unsubscribe_obs ::= \"UNSUBSCRIBE\" SPACE \"MAILBOX\" SPACE mailbox\n                       ;;OBSOLETE\n\n   userid          ::= astring\n\n   x_command       ::= \"X\" atom <experimental command arguments>\n\n   zone            ::= (\"+\" / \"-\") 4digit\n                       ;; Signed four-digit value of hhmm representing\n                       ;; hours and minutes west of Greenwich (that is,\n                       ;; (the amount that the given time differs from\n                       ;; Universal Time).  Subtracting the timezone\n                       ;; from the given time will give the UT form.\n                       ;; The Universal Time zone is \"+0000\".\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 62]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   zone_old        ::= \"UT\" / \"GMT\" / \"Z\" /                ;; +0000\n                       \"AST\" / \"EDT\" /                     ;; -0400\n                       \"EST\" / \"CDT\" /                     ;; -0500\n                       \"CST\" / \"MDT\" /                     ;; -0600\n                       \"MST\" / \"PDT\" /                     ;; -0700\n                       \"PST\" / \"YDT\" /                     ;; -0800\n                       \"YST\" / \"HDT\" /                     ;; -0900\n                       \"HST\" / \"BDT\" /                     ;; -1000\n                       \"BST\" /                             ;; -1100\n                       \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\" / ;; +1 to +6\n                       \"G\" / \"H\" / \"I\" / \"K\" / \"L\" / \"M\" / ;; +7 to +12\n                       \"N\" / \"O\" / \"P\" / \"Q\" / \"R\" / \"S\" / ;; -1 to -6\n                       \"T\" / \"U\" / \"V\" / \"W\" / \"X\" / \"Y\"   ;; -7 to -12\n                       ;; OBSOLETE\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 63]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n10.     Author's Note\n\n   This document is a revision or rewrite of earlier documents, and\n   supercedes the protocol specification in those documents: IMAP4\n   Internet drafts, the IMAP2bis Internet drafts, unpublished\n   IMAP2bis.TXT document, RFC 1176, and RFC 1064.\n\n\n11.     Security Considerations\n\n   IMAP4 protocol transactions, including electronic mail data, are sent\n   in the clear over the network unless the optional privacy protection\n   is negotiated in the AUTHENTICATE command.\n\n   A server error message for an AUTHENTICATE command which fails due to\n   invalid credentials should not detail why the credentials are\n   invalid.\n\n   Use of the LOGIN command sends passwords in the clear.  This can be\n   avoided by using the AUTHENTICATE command instead.\n\n   A server error message for a failing LOGIN command should not specify\n   that the user name, as opposed to the password, is invalid.\n\n   Additional security considerations are discussed in the section\n   discussing the AUTHENTICATE and LOGIN commands.\n\n\n12.     Author's Address\n\n   Mark R. Crispin\n   Networks and Distributed Computing, JE-30\n   University of Washington\n   Seattle, WA  98195\n\n   Phone: (206) 543-5762\n\n   EMail: MRC@CAC.Washington.EDU\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 64]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nAppendices\n\nA.      Obsolete Commands\n\n   The following commands are OBSOLETE.  It is NOT required to support\n   any of these commands in new server implementations.  These commands\n   are documented here for the benefit of implementors who may wish to\n   support them for compatibility with old client implementations.\n\n   The section headings of these commands are intended to correspond\n   with where they would be located in the main document if they were\n   not obsoleted.\n\n\nA.6.3.OBS.1.    FIND ALL.MAILBOXES Command\n\n   Arguments:  mailbox name with possible wildcards\n\n   Data:       untagged responses: MAILBOX\n\n   Result:     OK - find completed\n               NO - find failure: can't list that name\n               BAD - command unknown or arguments invalid\n\n      The FIND ALL.MAILBOXES command returns a subset of names from the\n      complete set of all names available to the user.  It returns zero\n      or more untagged MAILBOX replies.  The mailbox argument to FIND\n      ALL.MAILBOXES is similar to that for LIST with an empty reference,\n      except that the characters \"%\" and \"?\" match a single character.\n\n   Example:    C: A002 FIND ALL.MAILBOXES *\n               S: * MAILBOX blurdybloop\n               S: * MAILBOX INBOX\n               S: A002 OK FIND ALL.MAILBOXES completed\n\n\nA.6.3.OBS.2.    FIND MAILBOXES Command\n\n   Arguments:  mailbox name with possible wildcards\n\n   Data:       untagged responses: MAILBOX\n\n   Result:     OK - find completed\n               NO - find failure: can't list that name\n               BAD - command unknown or arguments invalid\n\n      The FIND MAILBOXES command returns a subset of names from the set\n      of names that the user has declared as being \"active\" or\n\n\n\nCrispin                                                        [Page 65]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n      \"subscribed\".  It returns zero or more untagged MAILBOX replies.\n      The mailbox argument to FIND MAILBOXES is similar to that for LSUB\n      with an empty reference, except that the characters \"%\" and \"?\"\n      match a single character.\n\n   Example:    C: A002 FIND MAILBOXES *\n               S: * MAILBOX blurdybloop\n               S: * MAILBOX INBOX\n               S: A002 OK FIND MAILBOXES completed\n\n\nA.6.3.OBS.3.    SUBSCRIBE MAILBOX Command\n\n   Arguments:  mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - subscribe completed\n               NO - subscribe failure: can't subscribe to that name\n               BAD - command unknown or arguments invalid\n\n      The SUBSCRIBE MAILBOX command is identical in effect to the\n      SUBSCRIBE command.  A server which implements this command must be\n      able to distinguish between a SUBSCRIBE MAILBOX command and a\n      SUBSCRIBE command with a mailbox name argument of \"MAILBOX\".\n\n   Example:    C: A002 SUBSCRIBE MAILBOX #news.comp.mail.mime\n               S: A002 OK SUBSCRIBE MAILBOX to #news.comp.mail.mime\n               completed\n               C: A003 SUBSCRIBE MAILBOX\n               S: A003 OK SUBSCRIBE to MAILBOX completed\n\n\nA.6.3.OBS.4.    UNSUBSCRIBE MAILBOX Command\n\n   Arguments:  mailbox name\n\n   Data:       no specific data for this command\n\n   Result:     OK - unsubscribe completed\n               NO - unsubscribe failure: can't unsubscribe that name\n               BAD - command unknown or arguments invalid\n\n      The UNSUBSCRIBE MAILBOX command is identical in effect to the\n      UNSUBSCRIBE command.  A server which implements this command must\n      be able to distinguish between a UNSUBSCRIBE MAILBOX command and\n      an UNSUBSCRIBE command with a mailbox name argument of \"MAILBOX\".\n\n\n\n\nCrispin                                                        [Page 66]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n   Example:    C: A002 UNSUBSCRIBE MAILBOX #news.comp.mail.mime\n               S: A002 OK UNSUBSCRIBE MAILBOX from #news.comp.mail.mime\n               completed\n               C: A003 UNSUBSCRIBE MAILBOX\n               S: A003 OK UNSUBSCRIBE from MAILBOX completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 67]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nB.      Obsolete Responses\n\n   The following responses are OBSOLETE.  Except as noted below, these\n   responses MUST NOT be transmitted by new server implementations.\n\n   The section headings of these responses are intended to correspond\n   with where they would be located in the main document if they were\n   not obsoleted.\n\n\nB.7.2.OBS.1.    MAILBOX Response\n\n   Data:       name\n\n      The MAILBOX response MUST NOT be transmitted by server\n      implementations except in response to the obsolete FIND MAILBOXES\n      and FIND ALL.MAILBOXES commands.  Client implementations that do\n      not use these commands MAY ignore this response.  It is documented\n      here for the benefit of implementors who may wish to support it\n      for compatibility with old client implementations.\n\n      This response occurs as a result of the FIND MAILBOXES and FIND\n      ALL.MAILBOXES commands.  It returns a single name that matches the\n      FIND specification.  There are no attributes or hierarchy\n      delimiter.\n\n   Example:    S: * MAILBOX blurdybloop\n\n\nB.7.3.OBS.1.    COPY Response\n\n   Data:       none\n\n      The COPY response MUST NOT be transmitted by new server\n      implementations.  Client implementations MUST ignore the COPY\n      response.  It is documented here for the benefit of client\n      implementors who may encounter this response from old server\n      implementations.\n\n      In some experimental versions of this protocol, this response was\n      returned in response to a COPY command to indicate on a\n      per-message basis that the message was copied successfully.\n\n   Example:    S: * 44 COPY\n\n\n\n\n\n\n\nCrispin                                                        [Page 68]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nB.7.3.OBS.2.    STORE Response\n\n   Data:       message data\n\n      The STORE response MUST NOT be transmitted by new server\n      implementations.  Client implementations MUST treat the STORE\n      response as equivalent to the FETCH response.  It is documented\n      here for the benefit of client implementors who may encounter this\n      response from old server implementations.\n\n      In some experimental versions of this protocol, this response was\n      returned instead of FETCH in response to a STORE command to report\n      the new value of the flags.\n\n   Example:    S: * 69 STORE (FLAGS (\\Deleted))\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 69]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nC.      References\n\n\n   [IMAP-AUTH] Myers, J., \"IMAP4 Authentication Mechanism\", RFC 1731.\n   Carnegie-Mellon University, December 1994.\n\n   [IMAP-COMPAT] Crispin, M. \"IMAP4 Compatibility with IMAP2 and\n   IMAP2bis\", RFC 1732, University of Washington, December 1994.\n\n   [IMAP-DISC] Austein, R. \"Synchronization Operations for Disconnected\n   IMAP4 Clients\", Work in Progress.\n\n   [IMAP-MODEL] Crispin, M. \"Distributed Electronic Mail Models in\n   IMAP4\", RFC 1733, University of Washington, December 1994.\n\n   [IMAP-NAMING] Crispin, M. \"Mailbox Naming Convention in IMAP4\", Work\n   in Progress.\n\n   [IMAP2] Crispin, M., \"Interactive Mail Access Protocol - Version 2\",\n   RFC 1176, University of Washington, August 1990.\n\n   [IMSP] Myers, J. \"IMSP -- Internet Message Support Protocol\", Work in\n   Progress.\n\n   [MIME-1] Borenstein, N., and Freed, N., \"MIME (Multipurpose Internet\n   Mail Extensions) Part One: Mechanisms for Specifying and Describing\n   the Format of Internet Message Bodies\", RFC 1521, Bellcore, Innosoft,\n   September 1993.\n\n   [MIME-2] Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n   Part Two: Message Header Extensions for Non-ASCII Text\", RFC 1522,\n   University of Tennessee, September 1993.\n\n   [RFC-822] Crocker, D., \"Standard for the Format of ARPA Internet Text\n   Messages\", STD 11, RFC 822, University of Delaware, August 1982.\n\n   [SMTP] Postel, Jonathan B. \"Simple Mail Transfer Protocol\", STD 10,\n   RFC 821, USC/Information Sciences Institute, August 1982.\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 70]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\nE.      IMAP4 Keyword Index\n\n\n       +FLAGS <flag list> (store command data item) ...............   34\n       +FLAGS.SILENT <flag list> (store command data item) ........   34\n       -FLAGS <flag list> (store command data item) ...............   34\n       -FLAGS.SILENT <flag list> (store command data item) ........   34\n       ALERT (response code) ......................................   39\n       ALL (fetch item) ...........................................   29\n       ALL (search key) ...........................................   27\n       ANSWERED (search key) ......................................   27\n       APPEND (command) ...........................................   22\n       AUTHENTICATE (command) .....................................   12\n       BAD (response) .............................................   41\n       BCC <string> (search key) ..................................   27\n       BEFORE <date> (search key) .................................   27\n       BODY (fetch item) ..........................................   29\n       BODY (fetch result) ........................................   46\n       BODY <string> (search key) .................................   27\n       BODY.PEEK[<section>] (fetch item) ..........................   30\n       BODYSTRUCTURE (fetch item) .................................   31\n       BODYSTRUCTURE (fetch result) ...............................   47\n       BODY[<section>] (fetch item) ...............................   29\n       BODY[section] (fetch result) ...............................   46\n       BYE (response) .............................................   41\n       CAPABILITY (command) .......................................   10\n       CAPABILITY (response) ......................................   42\n       CC <string> (search key) ...................................   27\n       CHECK (command) ............................................   23\n       CLOSE (command) ............................................   24\n       COPY (command) .............................................   34\n       COPY (response) ............................................   68\n       CREATE (command) ...........................................   17\n       DELETE (command) ...........................................   18\n       DELETED (search key) .......................................   27\n       DRAFT (search key) .........................................   27\n       ENVELOPE (fetch item) ......................................   31\n       ENVELOPE (fetch result) ....................................   49\n       EXAMINE (command) ..........................................   16\n       EXISTS (response) ..........................................   45\n       EXPUNGE (command) ..........................................   25\n       EXPUNGE (response) .........................................   45\n       FAST (fetch item) ..........................................   31\n       FETCH (command) ............................................   29\n       FETCH (response) ...........................................   46\n       FIND ALL.MAILBOXES (command) ...............................   65\n       FIND MAILBOXES (command) ...................................   65\n       FLAGGED (search key) .......................................   27\n       FLAGS (fetch item) .........................................   31\n\n\n\nCrispin                                                        [Page 71]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n\n       FLAGS (fetch result) .......................................   50\n       FLAGS (response) ...........................................   44\n       FLAGS <flag list> (store command data item) ................   34\n       FLAGS.SILENT <flag list> (store command data item) .........   34\n       FROM <string> (search key) .................................   27\n       FULL (fetch item) ..........................................   31\n       HEADER <field-name> <string> (search key) ..................   27\n       INTERNALDATE (fetch item) ..................................   31\n       INTERNALDATE (fetch result) ................................   50\n       KEYWORD <flag> (search key) ................................   27\n       LARGER <n> (search key) ....................................   27\n       LIST (command) .............................................   20\n       LIST (response) ............................................   43\n       LOGIN (command) ............................................   14\n       LOGOUT (command) ...........................................   11\n       LSUB (command) .............................................   22\n       LSUB (response) ............................................   44\n       MAILBOX (response) .........................................   68\n       NEW (search key) ...........................................   27\n       NO (response) ..............................................   40\n       NOOP (command) .............................................   11\n       NOT <search-key> (search key) ..............................   28\n       OK (response) ..............................................   40\n       OLD (search key) ...........................................   28\n       ON <date> (search key) .....................................   28\n       OR <search-key1> <search-key2> (search key) ................   28\n       PARSE (response code) ......................................   39\n       PARTIAL (command) ..........................................   32\n       PERMANENTFLAGS (response code) .............................   39\n       PREAUTH (response) .........................................   41\n       READ-ONLY (response code) ..................................   39\n       READ-WRITE (response code) .................................   39\n       RECENT (response) ..........................................   45\n       RECENT (search key) ........................................   28\n       RENAME (command) ...........................................   18\n       RFC822 (fetch item) ........................................   31\n       RFC822 (fetch result) ......................................   50\n       RFC822.HEADER (fetch item) .................................   31\n       RFC822.HEADER (fetch result) ...............................   50\n       RFC822.HEADER.LINES <header_list> (fetch item) .............   31\n       RFC822.HEADER.LINES.NOT <header_list> (fetch item) .........   32\n       RFC822.PEEK (fetch item) ...................................   31\n       RFC822.SIZE (fetch item) ...................................   32\n       RFC822.SIZE (fetch result) .................................   50\n       RFC822.TEXT (fetch item) ...................................   32\n       RFC822.TEXT (fetch result) .................................   51\n       RFC822.TEXT.PEEK (fetch item) ..............................   32\n       SEARCH (command) ...........................................   25\n\n\n\nCrispin                                                        [Page 72]\n\f\nRFC 1730                         IMAP4                     December 1994\n\n\n\n       SEARCH (response) ..........................................   44\n       SEEN (search key) ..........................................   28\n       SELECT (command) ...........................................   15\n       SENTBEFORE <date> (search key) .............................   28\n       SENTON <date> (search key) .................................   28\n       SENTSINCE <date> (search key) ..............................   28\n       SINCE <date> (search key) ..................................   28\n       SMALLER <n> (search key) ...................................   28\n       STORE (command) ............................................   33\n       STORE (response) ...........................................   69\n       SUBJECT <string> (search key) ..............................   28\n       SUBSCRIBE (command) ........................................   19\n       SUBSCRIBE MAILBOX (command) ................................   66\n       TEXT <string> (search key) .................................   28\n       TO <string> (search key) ...................................   28\n       TRYCREATE (response code) ..................................   39\n       UID (command) ..............................................   35\n       UID (fetch item) ...........................................   32\n       UID (fetch result) .........................................   51\n       UID <message set> (search key) .............................   28\n       UIDVALIDITY (response code) ................................   40\n       UNANSWERED (search key) ....................................   29\n       UNDELETED (search key) .....................................   29\n       UNDRAFT (search key) .......................................   29\n       UNFLAGGED (search key) .....................................   29\n       UNKEYWORD <flag> (search key) ..............................   29\n       UNSEEN (response code) .....................................   40\n       UNSEEN (search key) ........................................   29\n       UNSUBSCRIBE (command) ......................................   19\n       UNSUBSCRIBE MAILBOX (command) ..............................   66\n       X<atom> (command) ..........................................   37\n       \\Answered (system flag) ....................................   50\n       \\Deleted (system flag) .....................................   50\n       \\Draft (system flag) .......................................   50\n       \\Flagged (system flag) .....................................   50\n       \\Marked (mailbox name attribute) ...........................   43\n       \\Noinferiors (mailbox name attribute) ......................   43\n       \\Noselect (mailbox name attribute) .........................   43\n       \\Recent (system flag) ......................................   50\n       \\Seen (system flag) ........................................   50\n       \\Unmarked (mailbox name attribute) .........................   43\n\n\n\n\n\n\n\n\n\n\nCrispin                                                        [Page 73]\n\f\n"
  },
  {
    "path": "rfc/rfc1731.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 1731                               Carnegie Mellon\nCategory: Standards Track                                  December 1994\n\n\n                    IMAP4 Authentication Mechanisms\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n\n1. Introduction\n\n   The Internet Message Access Protocol, Version 4 [IMAP4] contains the\n   AUTHENTICATE command, for identifying and authenticating a user to an\n   IMAP4 server and for optionally negotiating a protection mechanism\n   for subsequent protocol interactions.  This document describes\n   several authentication mechanisms for use by the IMAP4 AUTHENTICATE\n   command.\n\n\n2. Kerberos version 4 authentication mechanism\n\n   The authentication type associated with Kerberos version 4 is\n   \"KERBEROS_V4\".\n\n   The data encoded in the first ready response contains a random 32-bit\n   number in network byte order.  The client should respond with a\n   Kerberos ticket and an authenticator for the principal\n   \"imap.hostname@realm\", where \"hostname\" is the first component of the\n   host name of the server with all letters in lower case and where\n   \"realm\" is the Kerberos realm of the server.  The encrypted checksum\n   field included within the Kerberos authenticator should contain the\n   server provided 32-bit number in network byte order.\n\n   Upon decrypting and verifying the ticket and authenticator, the\n   server should verify that the contained checksum field equals the\n   original server provided random 32-bit number.  Should the\n   verification be successful, the server must add one to the checksum\n   and construct 8 octets of data, with the first four octets containing\n   the incremented checksum in network byte order, the fifth octet\n   containing a bit-mask specifying the protection mechanisms supported\n   by the server, and the sixth through eighth octets containing, in\n\n\n\nMyers                                                           [Page 1]\n\f\nRFC 1731            IMAP4 Authentication Mechanisms        December 1994\n\n\n   network byte order, the maximum cipher-text buffer size the server is\n   able to receive.  The server must encrypt the 8 octets of data in the\n   session key and issue that encrypted data in a second ready response.\n   The client should consider the server authenticated if the first four\n   octets the un-encrypted data is equal to one plus the checksum it\n   previously sent.\n\n   The client must construct data with the first four octets containing\n   the original server-issued checksum in network byte order, the fifth\n   octet containing the bit-mask specifying the selected protection\n   mechanism, the sixth through eighth octets containing in network byte\n   order the maximum cipher-text buffer size the client is able to\n   receive, and the following octets containing a user name string.  The\n   client must then append from one to eight octets so that the length\n   of the data is a multiple of eight octets. The client must then PCBC\n   encrypt the data with the session key and respond to the second ready\n   response with the encrypted data.  The server decrypts the data and\n   verifies the contained checksum.  The username field identifies the\n   user for whom subsequent IMAP operations are to be performed; the\n   server must verify that the principal identified in the Kerberos\n   ticket is authorized to connect as that user.  After these\n   verifications, the authentication process is complete.\n\n   The protection mechanisms and their corresponding bit-masks are as\n   follows:\n\n      1 No protection mechanism\n      2 Integrity (krb_mk_safe) protection\n      4 Privacy (krb_mk_priv) protection\n\n\n   EXAMPLE: The following are two Kerberos version 4 login scenarios\n   (note that the line breaks in the sample authenticators are for\n   editorial clarity and are not in real authenticators)\n\n      S: * OK IMAP4 Server\n      C: A001 AUTHENTICATE KERBEROS_V4\n      S: + AmFYig==\n      C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n         +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n         WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n      S: + or//EoAADZI=\n      C: DiAF5A4gA+oOIALuBkAAmw==\n      S: A001 OK Kerberos V4 authentication successful\n\n\n\n\n\n\n\nMyers                                                           [Page 2]\n\f\nRFC 1731            IMAP4 Authentication Mechanisms        December 1994\n\n\n      S: * OK IMAP4 Server\n      C: A001 AUTHENTICATE KERBEROS_V4\n      S: + gcfgCA==\n      C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n         +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n         WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n      S: A001 NO Kerberos V4 authentication failed\n\n\n3. GSSAPI authentication mechanism\n\n   The authentication type associated with all mechanisms employing the\n   GSSAPI [RFC1508] is \"GSSAPI\".\n\n   The first ready response issued by the server contains no data.  The\n   client should call GSS_Init_sec_context, passing in 0 for\n   input_context_handle (initially) and a targ_name equal to output_name\n   from GSS_Import_Name called with input_name_type of NULL and\n   input_name_string of \"SERVICE:imap@hostname\" where \"hostname\" is the\n   fully qualified host name of the server with all letters in lower\n   case.  The client must then respond with the resulting output_token.\n   If GSS_Init_sec_context returns GSS_CONTINUE_NEEDED, then the client\n   should expect the server to issue a token in a subsequent ready\n   response.  The client must pass the token to another call to\n   GSS_Init_sec_context.\n\n   If GSS_Init_sec_context returns GSS_COMPLETE, then the client should\n   respond with any resulting output_token.  If there is no\n   output_token, the client should respond with no data.  The client\n   should then expect the server to issue a token in a subsequent ready\n   response.  The client should pass this token to GSS_Unseal and\n   interpret the first octet of resulting cleartext as a bit-mask\n   specifying the protection mechanisms supported by the server and the\n   second through fourth octets as the maximum size output_message to\n   send to the server.  The client should construct data, with the first\n   octet containing the bit-mask specifying the selected protection\n   mechanism, the second through fourth octets containing in network\n   byte order the maximum size output_message the client is able to\n   receive, and the remaining octets containing a user name string.  The\n   client must pass the data to GSS_Seal with conf_flag set to FALSE,\n   and respond with the generated output_message.  The client can then\n   consider the server authenticated.\n\n   The server must issue a ready response with no data and pass the\n   resulting client supplied token to GSS_Accept_sec_context as\n   input_token, setting acceptor_cred_handle to NULL (for \"use default\n   credentials\"), and 0 for input_context_handle (initially).  If\n   GSS_Accept_sec_context returns GSS_CONTINUE_NEEDED, the server should\n\n\n\nMyers                                                           [Page 3]\n\f\nRFC 1731            IMAP4 Authentication Mechanisms        December 1994\n\n\n   return the generated output_token to the client in a ready response\n   and pass the resulting client supplied token to another call to\n   GSS_Accept_sec_context.\n\n   If GSS_Accept_sec_context returns GSS_COMPLETE, then if an\n   output_token is returned, the server should return it to the client\n   in a ready response and expect a reply from the client with no data.\n   Whether or not an output_token was returned, the server then should\n   then construct 4 octets of data, with the first octet containing a\n   bit-mask specifying the protection mechanisms supported by the server\n   and the second through fourth octets containing in network byte order\n   the maximum size output_token the server is able to receive.  The\n   server must then pass the plaintext to GSS_Seal with conf_flag set to\n   FALSE and issue the generated output_message to the client in a ready\n   response.  The server must then pass the resulting client supplied\n   token to GSS_Unseal and interpret the first octet of resulting\n   cleartext as the bit-mask for the selected protection mechanism, the\n   second through fourth octets as the maximum size output_message to\n   send to the client, and the remaining octets as the user name.  Upon\n   verifying the src_name is authorized to authenticate as the user\n   name, The server should then consider the client authenticated.\n\n   The protection mechanisms and their corresponding bit-masks are as\n   follows:\n\n      1 No protection mechanism\n      2 Integrity protection.\n        Sender calls GSS_Seal with conf_flag set to FALSE\n      4 Privacy protection.\n        Sender calls GSS_Seal with conf_flag set to TRUE\n\n\n4. S/Key authentication mechanism\n\n   The authentication type associated with S/Key [SKEY] is \"SKEY\".\n\n   The first ready response issued by the server contains no data.  The\n   client responds with the user name string.\n\n   The data encoded in the second ready response contains the decimal\n   sequence number followed by a single space and the seed string for\n   the indicated user.  The client responds with the one-time-password,\n   as either a 64-bit value in network byte order or encoded in the \"six\n   English words\" format.\n\n   Upon successful verification of the one-time-password, the server\n   should consider the client authenticated.\n\n\n\n\nMyers                                                           [Page 4]\n\f\nRFC 1731            IMAP4 Authentication Mechanisms        December 1994\n\n\n   S/Key authentication does not provide for any protection mechanisms.\n\n\n   EXAMPLE: The following are two S/Key login scenarios.\n\n      S: * OK IMAP4 Server\n      C: A001 AUTHENTICATE SKEY\n      S: +\n      C: bW9yZ2Fu\n      S: + OTUgUWE1ODMwOA==\n      C: Rk9VUiBNQU5OIFNPT04gRklSIFZBUlkgTUFTSA==\n      S: A001 OK S/Key authentication successful\n\n\n      S: * OK IMAP4 Server\n      C: A001 AUTHENTICATE SKEY\n      S: +\n      C: c21pdGg=\n      S: + OTUgUWE1ODMwOA==\n      C: BsAY3g4gBNo=\n      S: A001 NO S/Key authentication failed\n\n\n5. References\n\n   [IMAP4] Crispin, M., \"Internet Message Access Protocol - Version 4\",\n   RFC 1730, University of Washington, December 1994.\n\n   [RFC1508] Linn, J., \"Generic Security Service Application Program\n   Interface\", RFC 1508, Geer Zolot Associates, September 1993.\n\n   [SKEY] Haller, Neil M. \"The S/Key One-Time Password System\",\n   Bellcore, Morristown, New Jersey, October 1993,\n   thumper.bellcore.com:pub/nmh/docs/ISOC.symp.ps\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                                                           [Page 5]\n\f\nRFC 1731            IMAP4 Authentication Mechanisms        December 1994\n\n\n6. Security Considerations\n\n   Security issues are discussed throughout this memo.\n\n\n7. Author's Address\n\n   John G. Myers\n   Carnegie-Mellon University\n   5000 Forbes Ave.\n   Pittsburgh PA, 15213-3890\n\n   EMail: jgm+@cmu.edu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                                                           [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc1734.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 1734                               Carnegie Mellon\nCategory: Standards Track                                  December 1994\n\n\n                      POP3 AUTHentication command\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n\n1. Introduction\n\n   This document describes the optional AUTH command, for indicating an\n   authentication mechanism to the server, performing an authentication\n   protocol exchange, and optionally negotiating a protection mechanism\n   for subsequent protocol interactions.  The authentication and\n   protection mechanisms used by the POP3 AUTH command are those used by\n   IMAP4.\n\n\n2. The AUTH command\n\n   AUTH mechanism\n\n         Arguments:\n             a string identifying an IMAP4 authentication mechanism,\n             such as defined by [IMAP4-AUTH].  Any use of the string\n             \"imap\" used in a server authentication identity in the\n             definition of an authentication mechanism is replaced with\n             the string \"pop\".\n\n         Restrictions:\n             may only be given in the AUTHORIZATION state\n\n         Discussion:\n             The AUTH command indicates an authentication mechanism to\n             the server.  If the server supports the requested\n             authentication mechanism, it performs an authentication\n             protocol exchange to authenticate and identify the user.\n             Optionally, it also negotiates a protection mechanism for\n             subsequent protocol interactions.  If the requested\n             authentication mechanism is not supported, the server\n\n\n\nMyers                                                           [Page 1]\n\f\nRFC 1734                       POP3 AUTH                   December 1994\n\n\n             should reject the AUTH command by sending a negative\n             response.\n\n             The authentication protocol exchange consists of a series\n             of server challenges and client answers that are specific\n             to the authentication mechanism.  A server challenge,\n             otherwise known as a ready response, is a line consisting\n             of a \"+\" character followed by a single space and a BASE64\n             encoded string.  The client answer consists of a line\n             containing a BASE64 encoded string.  If the client wishes\n             to cancel an authentication exchange, it should issue a\n             line with a single \"*\".  If the server receives such an\n             answer, it must reject the AUTH command by sending a\n             negative response.\n\n             A protection mechanism provides integrity and privacy\n             protection to the protocol session.  If a protection\n             mechanism is negotiated, it is applied to all subsequent\n             data sent over the connection.  The protection mechanism\n             takes effect immediately following the CRLF that concludes\n             the authentication exchange for the client, and the CRLF of\n             the positive response for the server.  Once the protection\n             mechanism is in effect, the stream of command and response\n             octets is processed into buffers of ciphertext.  Each\n             buffer is transferred over the connection as a stream of\n             octets prepended with a four octet field in network byte\n             order that represents the length of the following data.\n             The maximum ciphertext buffer length is defined by the\n             protection mechanism.\n\n             The server is not required to support any particular\n             authentication mechanism, nor are authentication mechanisms\n             required to support any protection mechanisms.  If an AUTH\n             command fails with a negative response, the session remains\n             in the AUTHORIZATION state and client may try another\n             authentication mechanism by issuing another AUTH command,\n             or may attempt to authenticate by using the USER/PASS or\n             APOP commands.  In other words, the client may request\n             authentication types in decreasing order of preference,\n             with the USER/PASS or APOP command as a last resort.\n\n             Should the client successfully complete the authentication\n             exchange, the POP3 server issues a positive response and\n             the POP3 session enters the TRANSACTION state.\n\n         Possible Responses:\n             +OK maildrop locked and ready\n             -ERR authentication exchange failed\n\n\n\nMyers                                                           [Page 2]\n\f\nRFC 1734                       POP3 AUTH                   December 1994\n\n\n\n         Examples:\n             S: +OK POP3 server ready\n             C: AUTH KERBEROS_V4\n             S: + AmFYig==\n             C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n                +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n                WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n             S: + or//EoAADZI=\n             C: DiAF5A4gA+oOIALuBkAAmw==\n             S: +OK Kerberos V4 authentication successful\n                ...\n             C: AUTH FOOBAR\n             S: -ERR Unrecognized authentication type\n\n              Note: the line breaks in the first client answer  are\n              for editorial clarity and are not in real authentica-\n              tors.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                                                           [Page 3]\n\f\nRFC 1734                       POP3 AUTH                   December 1994\n\n\n3. Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in RFC 822.\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   ATOM_CHAR       ::= <any CHAR except atom_specials>\n\n   atom_specials   ::= \"(\" / \")\" / \"{\" / SPACE / CTLs / \"%\" / \"*\" /\n                       <\"> / \"\\\"\n\n   auth            ::= \"AUTH\" 1*(SPACE / TAB) auth_type *(CRLF base64)\n                       CRLF\n\n   auth_type       ::= 1*ATOM_CHAR\n\n   base64          ::= *(4base64_CHAR) [base64_terminal]\n\n   base64_char     ::= \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\" / \"G\" / \"H\" /\n           \"I\" / \"J\" / \"K\" / \"L\" / \"M\" / \"N\" / \"O\" / \"P\" /\n                       \"Q\" / \"R\" / \"S\" / \"T\" / \"U\" / \"V\" / \"W\" / \"X\" /\n                       \"Y\" / \"Z\" /\n                       \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" / \"g\" / \"h\" /\n                       \"i\" / \"j\" / \"k\" / \"l\" / \"m\" / \"n\" / \"o\" / \"p\" /\n                       \"q\" / \"r\" / \"s\" / \"t\" / \"u\" / \"v\" / \"w\" / \"x\" /\n                       \"y\" / \"z\" /\n                       \"0\" / \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" /\n                       \"8\" / \"9\" / \"+\" / \"/\"\n                       ;; Case-sensitive\n\n   base64_terminal ::= (2base64_char \"==\") / (3base64_char \"=\")\n\n   CHAR            ::= <any 7-bit US-ASCII character except NUL,\n                        0x01 - 0x7f>\n\n   continue_req    ::= \"+\" SPACE base64 CRLF\n\n   CR              ::= <ASCII CR, carriage return, 0x0C>\n\n   CRLF            ::= CR LF\n\n   CTL             ::= <any ASCII control character and DEL,\n                        0x00 - 0x1f, 0x7f>\n\n\n\n\nMyers                                                           [Page 4]\n\f\nRFC 1734                       POP3 AUTH                   December 1994\n\n\n   LF              ::= <ASCII LF, line feed, 0x0A>\n\n   SPACE           ::= <ASCII SP, space, 0x20>\n\n   TAB             ::= <ASCII HT, tab, 0x09>\n\n\n\n4. References\n\n   [IMAP4-AUTH]  Myers, J., \"IMAP4 Authentication Mechanisms\", RFC 1731,\n   Carnegie Mellon, December 1994.\n\n\n\n5. Security Considerations\n\n   Security issues are discussed throughout this memo.\n\n\n\n6. Author's Address\n\n   John G. Myers\n   Carnegie-Mellon University\n   5000 Forbes Ave\n   Pittsburgh, PA 15213\n\n   EMail: jgm+@cmu.edu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                                                           [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc1854.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           N. Freed\nRequest For Comments: 1854                  Innosoft International, Inc.\nCategory: Standards Track                          A. Cargille, WG Chair\n                                                            October 1995\n\n\n                         SMTP Service Extension\n                         for Command Pipelining\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   This memo defines an extension to the SMTP service whereby a server\n   can indicate the extent of its ability to accept multiple commands in\n   a single TCP send operation. Using a single TCP send operation for\n   multiple commands can improve SMTP performance significantly.\n\nIntroduction\n\n   Although SMTP is widely and robustly deployed, certain extensions may\n   nevertheless prove useful. In particular, many parts of the Internet\n   make use of high latency network links.\n\n   SMTP's intrinsic one command-one response structure is significantly\n   penalized by high latency links, often to the point where the factors\n   contributing to overall connection time are dominated by the time\n   spent waiting for responses to individual commands (turnaround time).\n\n   In the best of all worlds it would be possible to simply deploy SMTP\n   client software that makes use of command pipelining: batching up\n   multiple commands into single TCP send operations. Unfortunately, the\n   original SMTP specification [1] did not explicitly state that SMTP\n   servers must support this.  As a result a non-trivial number of\n   Internet SMTP servers cannot adequately handle command pipelining.\n   Flaws known to exist in deployed servers include:\n\n (1)   Connection handoff and buffer flushes in the middle of\n       the SMTP dialogue.  Creation of server processes for\n       incoming SMTP connections is a useful, obvious, and\n       harmless implementation technique. However, some SMTP\n       servers defer process forking and connection handoff\n\n\n\nFreed & Cargille            Standards Track                     [Page 1]\n\f\nRFC 1854                    SMTP Pipelining                 October 1995\n\n\n       until some intermediate point in the SMTP dialogue.\n       When this is done material read from the TCP connection\n       and kept in process buffers can be lost.\n\n (2)   Flushing the TCP input buffer when an SMTP command\n       fails. SMTP commands often fail but there is no reason\n       to flush the TCP input buffer when this happens.\n       Nevertheless, some SMTP servers do this.\n\n (3)   Improper processing and promulgation of SMTP command\n       failures. For example, some SMTP servers will refuse to\n       accept a DATA command if the last RCPT TO command\n       fails, paying no attention to the success or failure of\n       prior RCPT TO command results. Other servers will\n       accept a DATA command even when all previous RCPT TO\n       commands have failed. Although it is possible to\n       accommodate this sort of behavior in a client that\n       employs command pipelining, it does complicate the\n       construction of the client unnecessarily.\n\n   This memo uses the mechanism described in [2] to define an extension\n   to the SMTP service whereby an SMTP server can declare that it is\n   capable of handling pipelined commands. The SMTP client can then\n   check for this declaration and use pipelining only when the server\n   declares itself capable of handling it.\n\n1.  Framework for the Command Pipelining Extension\n\n   The Command Pipelining extension is defined as follows:\n\n    (1)   the name of the SMTP service extension is Pipelining;\n\n    (2)   the EHLO keyword value associated with the extension is\n          PIPELINING;\n\n    (3)   no parameter is used with the PIPELINING EHLO keyword;\n\n    (4)   no additional parameters are added to either the MAIL\n          FROM or RCPT TO commands.\n\n    (5)   no additional SMTP verbs are defined by this extension;\n          and,\n\n    (6)   the next section specifies how support for the\n          extension affects the behavior of a server and client\n          SMTP.\n\n\n\n\n\nFreed & Cargille            Standards Track                     [Page 2]\n\f\nRFC 1854                    SMTP Pipelining                 October 1995\n\n\n2.  The Pipelining Service Extension\n\n   When a client SMTP wishes to employ command pipelining, it first\n   issues the EHLO command to the server SMTP. If the server SMTP\n   responds with code 250 to the EHLO command, and the response includes\n   the EHLO keyword value PIPELINING, then the server SMTP has indicated\n   that it can accommodate SMTP command pipelining.\n\n2.1.  Client use of pipelining\n\n   Once the client SMTP has confirmed that support exists for the\n   pipelining extension, the client SMTP may then elect to transmit\n   groups of SMTP commands in batches without waiting for a response to\n   each individual command. In particular, the commands RSET, MAIL FROM,\n   SEND FROM, SOML FROM, SAML FROM, and RCPT TO can all appear anywhere\n   in a pipelined command group.  The EHLO, DATA, VRFY, EXPN, TURN,\n   QUIT, and NOOP commands can only appear as the last command in a\n   group since their success or failure produces a change of state which\n   the client SMTP must accommodate. (NOOP is included in this group so\n   it can be used as a synchronization point.)\n\n   Additional commands added by other SMTP extensions may only appear as\n   the last command in a group unless otherwise specified by the\n   extensions that define the commands.\n\n   The actual transfer of message content is explicitly allowed to be\n   the first \"command\" in a group. That is, the RSET/MAIL FROM sequence\n   necessary to initiate a new message transaction can be placed in the\n   same group as the final transfer of the headers and body of the\n   previous message.\n\n   Client SMTP implementations that employ pipelining MUST check ALL\n   statuses associated with each command in a group. For example, if\n   none of the RCPT TO recipient addresses were accepted the client must\n   then check the response to the DATA command -- the client cannot\n   assume that the DATA command will be rejected just because none of\n   the RCPT TO commands worked.  If the DATA command was properly\n   rejected the client SMTP can just issue RSET, but if the DATA command\n   was accepted the client SMTP should send a single dot.\n\n   Command statuses MUST be coordinated with responses by counting each\n   separate response and correlating that count with the number of\n   commands known to have been issued.  Multiline responses MUST be\n   supported. Matching on the basis of either the error code value or\n   associated text is expressly forbidden.\n\n   Client SMTP implementations MAY elect to operate in a nonblocking\n   fashion, processing server responses immediately upon receipt, even\n\n\n\nFreed & Cargille            Standards Track                     [Page 3]\n\f\nRFC 1854                    SMTP Pipelining                 October 1995\n\n\n   if there is still data pending transmission from the client's\n   previous TCP send operation. If nonblocking operation is not\n   supported, however, client SMTP implementations MUST also check the\n   TCP window size and make sure that each group of commands fits\n   entirely within the window. The window size is usually, but not\n   always, 4K octets.  Failure to perform this check can lead to\n   deadlock conditions.\n\n   Clients MUST NOT confuse responses to multiple commands with\n   multiline responses. Each command requires one or more lines of\n   response, the last line not containing a dash between the response\n   code and the response string.\n\n2.2.  Server support of pipelining\n\n   A server SMTP implementation that offers the pipelining extension:\n\n    (1)   MUST NOT flush or otherwise lose the contents of the\n          TCP input buffer under any circumstances whatsoever.\n\n    (2)   SHOULD issue a positive response to the DATA command if\n          and only if one or more valid RCPT TO addresses have\n          been previously received.\n\n    (3)   MUST NOT, after issuing a positive response to a DATA\n          command with no valid recipients and subsequently\n          receiving an empty message, send any message whatsoever\n          to anybody.\n\n    (4)   SHOULD elect to store responses to grouped RSET, MAIL\n          FROM, SEND FROM, SOML FROM, SAML FROM, and RCPT TO\n          commands in an internal buffer so they can sent as a\n          unit.\n\n    (5)   MUST NOT buffer responses to EHLO, DATA, VRFY, EXPN,\n          TURN, QUIT, and NOOP.\n\n    (6)   MUST NOT buffer responses to unrecognized commands.\n\n    (7)   MUST send all pending responses immediately whenever\n          the local TCP input buffer is emptied.\n\n    (8)   MUST NOT make assumptions about commands that are yet\n          to be received.\n\n    (9)   SHOULD issue response text that indicates, either\n          implicitly or explicitly, what command the response\n          matches.\n\n\n\nFreed & Cargille            Standards Track                     [Page 4]\n\f\nRFC 1854                    SMTP Pipelining                 October 1995\n\n\n   The overriding intent of these server requirements is to make it as\n   easy as possible for servers to conform to these pipelining\n   extensions.\n\n3.  Examples\n\n   Consider the following SMTP dialogue that does not use pipelining:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: HELO dbc.mtview.ca.us\n   S: 250 innosoft.com\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   C: RCPT TO:<ned@innosoft.com>\n   S: 250 recipient <ned@innosoft.com> OK\n   C: RCPT TO:<dan@innosoft.com>\n   S: 250 recipient <dan@innosoft.com> OK\n   C: RCPT TO:<kvc@innosoft.com>\n   S: 250 recipient <kvc@innosoft.com> OK\n   C: DATA\n   S: 354 enter mail, end with line containing only \".\"\n    ...\n   C: .\n   S: 250 message sent\n   C: QUIT\n   S: 221 goodbye\n\n   The client waits for a server response a total of 9 times in this\n   simple example. But if pipelining is employed the following dialogue\n   is possible:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<ned@innosoft.com>\n   C: RCPT TO:<dan@innosoft.com>\n   C: RCPT TO:<kvc@innosoft.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 250 recipient <ned@innosoft.com> OK\n   S: 250 recipient <dan@innosoft.com> OK\n   S: 250 recipient <kvc@innosoft.com> OK\n\n\n\nFreed & Cargille            Standards Track                     [Page 5]\n\f\nRFC 1854                    SMTP Pipelining                 October 1995\n\n\n   S: 354 enter mail, end with line containing only \".\"\n    ...\n   C: .\n   C: QUIT\n   S: 250 message sent\n   S: 221 goodbye\n\n   The total number of turnarounds has been reduced from 9 to 4.\n\n   The next example illustrates one possible form of behavior when\n   pipelining is used and all recipients are rejected:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<nsb@thumper.bellcore.com>\n   C: RCPT TO:<galvin@tis.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 550 remote mail to <nsb@thumper.bellore.com> not allowed\n   S: 550 remote mail to <galvin@tis.com> not allowed\n   S: 554 no valid recipients given\n   C: QUIT\n   S: 221 goodbye\n\n   The client SMTP waits for the server 4 times here as well. If the\n   server SMTP does not check for at least one valid recipient prior to\n   accepting the DATA command, the following dialogue would result:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<nsb@thumper.bellcore.com>\n   C: RCPT TO:<galvin@tis.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 550 remote mail to <nsb@thumper.bellore.com> not allowed\n   S: 550 remote mail to <galvin@tis.com> not allowed\n   S: 354 enter mail, end with line containing only \".\"\n   C: .\n\n\n\nFreed & Cargille            Standards Track                     [Page 6]\n\f\nRFC 1854                    SMTP Pipelining                 October 1995\n\n\n   C: QUIT\n   S: 554 no valid recipients\n   S: 221 goodbye\n\n4.  Security Considerations\n\n   This RFC does not discuss security issues and is not believed to\n   raise any security issues not endemic in electronic mail and present\n   in fully conforming implementations of [1].\n\n5.  Acknowledgements\n\n   This document is based on the SMTP service extension model presented\n   in RFC 1425. Marshall Rose's description of SMTP command pipelining\n   in his book \"The Internet Message\" also served as a source of\n   inspiration for this extension.\n\n6.  References\n\n   [1]  Postel, J., \"Simple Mail Transfer Protocol\", STD 10\n        RFC 821, USC/Information Sciences Institute, August\n        1982.\n\n   [2]  Klensin, J., Freed, N., Rose, M., Stefferud, E.,\n        and D. Crocker, \"SMTP Service Extensions\", RFC 1651,\n        MCI, Innosoft, Dover Beach Consulting, Inc.,\n        Network Management Associates, Inc., Silicon Graphics,\n        Inc., July 1994.\n\n7.  Author's Address\n\n   Ned Freed\n   Innosoft International, Inc.\n   1050 East Garvey Avenue South\n   West Covina, CA 91790\n   USA\n\n   Phone: +1 818 919 3600\n   Fax: +1 818 919 3614\n   EMail: ned@innosoft.com\n\n\n\n\n\n\n\n\n\n\n\nFreed & Cargille            Standards Track                     [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc1870.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                               J. Klensin, WG Chair\nRequest For Comments: 1870                                           MCI\nSTD: 10                                                 N. Freed, Editor\nObsoletes: 1653                             Innosoft International, Inc.\nCategory: Standards Track                                       K. Moore\n                                                 University of Tennessee\n                                                           November 1995\n\n\n                         SMTP Service Extension\n                      for Message Size Declaration\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.  Abstract\n\n   This memo defines an extension to the SMTP service whereby an SMTP\n   client and server may interact to give the server an opportunity to\n   decline to accept a message (perhaps temporarily) based on the\n   client's estimate of the message size.\n\n2.  Introduction\n\n   The MIME extensions to the Internet message protocol provide for the\n   transmission of many kinds of data which were previously unsupported\n   in Internet mail.  One expected result of the use of MIME is that\n   SMTP will be expected to carry a much wider range of message sizes\n   than was previously the case.  This has an impact on the amount of\n   resources (e.g. disk space) required by a system acting as a server.\n\n   This memo uses the mechanism defined in [5] to define extensions to\n   the SMTP service whereby a client (\"sender-SMTP\") may declare the\n   size of a particular message to a server (\"receiver-SMTP\"), after\n   which the server may indicate to the client that it is or is not\n   willing to accept the message based on the declared message size and\n   whereby a server (\"receiver-SMTP\") may declare the maximum message\n   size it is willing to accept to a client (\"sender-SMTP\").\n\n\n\n\n\n\n\n\nKlensin, et al              Standards Track                     [Page 1]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n3.  Framework for the Size Declaration Extension\n\n   The following service extension is therefore defined:\n\n   (1) the name of the SMTP service extension is \"Message Size\n       Declaration\";\n\n   (2) the EHLO keyword value associated with this extension is \"SIZE\";\n\n   (3) one optional parameter is allowed with this EHLO keyword value, a\n       decimal number indicating the fixed maximum message size in bytes\n       that the server will accept.  The syntax of the parameter is as\n       follows, using the augmented BNF notation of [2]:\n\n           size-param ::= [1*DIGIT]\n\n       A parameter value of 0 (zero) indicates that no fixed maximum\n       message size is in force.  If the parameter is omitted no\n       information is conveyed about the server's fixed maximum message\n       size;\n\n   (4) one optional parameter using the keyword \"SIZE\" is added to the\n       MAIL FROM command.  The value associated with this parameter is a\n       decimal number indicating the size of the message that is to be\n       transmitted.  The syntax of the value is as follows, using the\n       augmented BNF notation of [2]:\n\n           size-value ::= 1*20DIGIT\n\n   (5) the maximum length of a MAIL FROM command line is increased by 26\n       characters by the possible addition of the SIZE keyword and\n       value;\n\n   (6) no additional SMTP verbs are defined by this extension.\n\n   The remainder of this memo specifies how support for the extension\n   affects the behavior of an SMTP client and server.\n\n4.  The Message Size Declaration service extension\n\n   An SMTP server may have a fixed upper limit on message size.  Any\n   attempt by a client to transfer a message which is larger than this\n   fixed upper limit will fail.  In addition, a server normally has\n   limited space with which to store incoming messages.  Transfer of a\n   message may therefore also fail due to a lack of storage space, but\n   might succeed at a later time.\n\n\n\n\n\nKlensin, et al              Standards Track                     [Page 2]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n   A client using the unextended SMTP protocol defined in [1], can only\n   be informed of such failures after transmitting the entire message to\n   the server (which discards the transferred message).  If, however,\n   both client and server support the Message Size Declaration service\n   extension, such conditions may be detected before any transfer is\n   attempted.\n\n   An SMTP client wishing to relay a large content may issue the EHLO\n   command to start an SMTP session, to determine if the server supports\n   any of several service extensions.  If the server responds with code\n   250 to the EHLO command, and the response includes the EHLO keyword\n   value SIZE, then the Message Size Declaration extension is supported.\n\n   If a numeric parameter follows the SIZE keyword value of the EHLO\n   response, it indicates the size of the largest message that the\n   server is willing to accept.  Any attempt by a client to transfer a\n   message which is larger than this limit will be rejected with a\n   permanent failure (552) reply code.\n\n   A server that supports the Message Size Declaration extension will\n   accept the extended version of the MAIL command described below.\n   When supported by the server, a client may use the extended MAIL\n   command (instead of the MAIL command as defined in [1]) to declare an\n   estimate of the size of a message it wishes to transfer.  The server\n   may then return an appropriate error code if it determines that an\n   attempt to transfer a message of that size would fail.\n\n5.  Definitions\n\n   The message size is defined as the number of octets, including CR-LF\n   pairs, but not the SMTP DATA command's terminating dot or doubled\n   quoting dots, to be transmitted by the SMTP client after receiving\n   reply code 354 to the DATA command.\n\n   The fixed maximum message size is defined as the message size of the\n   largest message that a server is ever willing to accept.  An attempt\n   to transfer any message larger than the fixed maximum message size\n   will always fail.  The fixed maximum message size may be an\n   implementation artifact of the SMTP server, or it may be chosen by\n   the administrator of the server.\n\n   The declared message size is defined as a client's estimate of the\n   message size for a particular message.\n\n\n\n\n\n\n\n\nKlensin, et al              Standards Track                     [Page 3]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n6.  The extended MAIL command\n\n   The extended MAIL command is issued by a client when it wishes to\n   inform a server of the size of the message to be sent.  The extended\n   MAIL command is identical to the MAIL command as defined in [1],\n   except that a SIZE parameter appears after the address.\n\n   The complete syntax of this extended command is defined in [5]. The\n   esmtp-keyword is \"SIZE\" and the syntax for esmtp-value is given by\n   the syntax for size-value shown above.\n\n   The value associated with the SIZE parameter is a decimal\n   representation of the declared message size in octets.  This number\n   should include the message header, body, and the CR-LF sequences\n   between lines, but not the SMTP DATA command's terminating dot or\n   doubled quoting dots. Only one SIZE parameter may be specified in a\n   single MAIL command.\n\n   Ideally, the declared message size is equal to the true message size.\n   However, since exact computation of the message size may be\n   infeasable, the client may use a heuristically-derived estimate.\n   Such heuristics should be chosen so that the declared message size is\n   usually larger than the actual message size. (This has the effect of\n   making the counting or non-counting of SMTP DATA dots largely an\n   academic point.)\n\n   NOTE: Servers MUST NOT use the SIZE parameter to determine end of\n   content in the DATA command.\n\n6.1  Server action on receipt of the extended MAIL command\n\n   Upon receipt of an extended MAIL command containing a SIZE parameter,\n   a server should determine whether the declared message size exceeds\n   its fixed maximum message size.  If the declared message size is\n   smaller than the fixed maximum message size, the server may also wish\n   to determine whether sufficient resources are available to buffer a\n   message of the declared message size and to maintain it in stable\n   storage, until the message can be delivered or relayed to each of its\n   recipients.\n\n   A server may respond to the extended MAIL command with any of the\n   error codes defined in [1] for the MAIL command.  In addition, one of\n   the following error codes may be returned:\n\n   (1) If the server currently lacks sufficient resources to accept a\n       message of the indicated size, but may be able to accept the\n       message at a later time, it responds with code \"452 insufficient\n       system storage\".\n\n\n\nKlensin, et al              Standards Track                     [Page 4]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n   (2) If the indicated size is larger than the server's fixed maximum\n       message size, the server responds with code \"552 message size\n       exceeds fixed maximium message size\".\n\n   A server is permitted, but not required, to accept a message which\n   is, in fact, larger than declared in the extended MAIL command, such\n   as might occur if the client employed a size-estimation heuristic\n   which was inaccurate.\n\n6.2  Client action on receiving response to extended MAIL command\n\n   The client, upon receiving the server's response to the extended MAIL\n   command, acts as follows:\n\n   (1) If the code \"452 insufficient system storage\" is returned, the\n       client should next send either a RSET command (if it wishes to\n       attempt to send other messages) or a QUIT command. The client\n       should then repeat the attempt to send the message to the server\n       at a later time.\n\n   (2) If the code \"552 message exceeds fixed maximum message size\" is\n       received, the client should immediately send either a RSET command\n       (if it wishes to attempt to send additional messages), or a QUIT\n       command.  The client should then declare the message undeliverable\n       and return appropriate notification to the sender (if a sender\n       address was present in the MAIL command).\n\n   A successful (250) reply code in response to the extended MAIL\n   command does not constitute an absolute guarantee that the message\n   transfer will succeed.  SMTP clients using the extended MAIL command\n   must still be prepared to handle both temporary and permanent error\n   reply codes (including codes 452 and 552), either immediately after\n   issuing the DATA command, or after transfer of the message.\n\n6.3  Messages larger than the declared size.\n\n   Once a server has agreed (via the extended MAIL command) to accept a\n   message of a particular size, it should not return a 552 reply code\n   after the transfer phase of the DATA command, unless the actual size\n   of the message transferred is greater than the declared message size.\n   A server may also choose to accept a message which is somewhat larger\n   than the declared message size.\n\n   A client is permitted to declare a message to be smaller than its\n   actual size.  However, in this case, a successful (250) reply code is\n   no assurance that the server will accept the message or has\n   sufficient resources to do so.  The server may reject such a message\n   after its DATA transfer.\n\n\n\nKlensin, et al              Standards Track                     [Page 5]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n6.4  Per-recipient rejection based on message size.\n\n   A server that implements this extension may return a 452 or 552 reply\n   code in response to a RCPT command, based on its unwillingness to\n   accept a message of the declared size for a particular recipient.\n\n   (1) If a 452 code is returned, the client may requeue the message for\n       later delivery to the same recipient.\n\n   (2) If a 552 code is returned, the client may not requeue the message\n       for later delivery to the same recipient.\n\n7.  Minimal usage\n\n   A \"minimal\" client may use this extension to simply compare its\n   (perhaps estimated) size of the message that it wishes to relay, with\n   the server's fixed maximum message size (from the parameter to the\n   SIZE keyword in the EHLO response), to determine whether the server\n   will ever accept the message.  Such an implementation need not\n   declare message sizes via the extended MAIL command.  However,\n   neither will it be able to discover temporary limits on message size\n   due to server resource limitations, nor per-recipient limitations on\n   message size.\n\n   A minimal server that employs this service extension may simply use\n   the SIZE keyword value to inform the client of the size of the\n   largest message it will accept, or to inform the client that there is\n   no fixed limit on message size.  Such a server must accept the\n   extended MAIL command and return a 552 reply code if the client's\n   declared size exceeds its fixed size limit (if any), but it need not\n   detect \"temporary\" limitations on message size.\n\n   The numeric parameter to the EHLO SIZE keyword is optional.  If the\n   parameter is omitted entirely it indicates that the server does not\n   advertise a fixed maximum message size.  A server that returns the\n   SIZE keyword with no parameter in response to the EHLO command may\n   not issue a positive (250) response to an extended MAIL command\n   containing a SIZE specification without first checking to see if\n   sufficient resources are available to transfer a message of the\n   declared size, and to retain it in stable storage until it can be\n   relayed or delivered to its recipients.  If possible, the server\n   should actually reserve sufficient storage space to transfer the\n   message.\n\n\n\n\n\n\n\n\nKlensin, et al              Standards Track                     [Page 6]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n8. Example\n\n   The following example illustrates the use of size declaration with\n   some permanent and temporary failures.\n\n   S: <wait for connection on TCP port 25>\n   C: <open connection to server>\n   S: 220 sigurd.innosoft.com -- Server SMTP (PMDF V4.2-6 #1992)\n   C: EHLO ymir.claremont.edu\n   S: 250-sigurd.innosoft.com\n   S: 250-EXPN\n   S: 250-HELP\n   S: 250 SIZE 1000000\n   C: MAIL FROM:<ned@thor.innosoft.com> SIZE=500000\n   S: 250 Address Ok.\n   C: RCPT TO:<ned@innosoft.com>\n   S: 250 ned@innosoft.com OK; can accomodate 500000 byte message\n   C: RCPT TO:<ned@ymir.claremont.edu>\n   S: 552 Channel size limit exceeded: ned@YMIR.CLAREMONT.EDU\n   C: RCPT TO:<ned@hmcvax.claremont.edu>\n   S: 452 Insufficient channel storage: ned@hmcvax.CLAREMONT.EDU\n   C: DATA\n   S: 354 Send message, ending in CRLF.CRLF.\n    ...\n   C: .\n   S: 250 Some recipients OK\n   C: QUIT\n   S: 221 Goodbye\n\n9. Security Considerations\n\n   The size declaration extensions described in this memo can\n   conceivably be used to facilitate crude service denial attacks.\n   Specifically, both the information contained in the SIZE parameter\n   and use of the extended MAIL command make it somewhat quicker and\n   easier to devise an efficacious service denial attack.  However,\n   unless implementations are very weak, these extensions do not create\n   any vulnerability that has not always existed with SMTP. In addition,\n   no issues are addressed involving trusted systems and possible\n   release of information via the mechanisms described in this RFC.\n\n10.  Acknowledgements\n\n   This document was derived from an earlier Working Group work in\n   progess contribution.  Jim Conklin, Dave Crocker, Neil Katin, Eliot\n   Lear, Marshall T. Rose, and Einar Stefferud provided extensive\n   comments in response to earlier works in progress of both this and\n   the previous memo.\n\n\n\nKlensin, et al              Standards Track                     [Page 7]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n11.  References\n\n   [1] Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC 821,\n       USC/Information Sciences Institute, August 1982.\n\n   [2] Crocker, D., \"Standard for the Format of ARPA Internet Text\n       Messages\", STD 11, RFC 822, UDEL, August 1982.\n\n   [3] Borenstein, N., and N. Freed, \"Multipurpose Internet Mail\n       Extensions\", RFC 1521, Bellcore, Innosoft, September 1993.\n\n   [4] Moore, K., \"Representation of Non-ASCII Text in Internet Message\n       Headers\", RFC 1522, University of Tennessee, September 1993.\n\n   [5] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D. Crocker,\n       \"SMTP Service Extensions\", STD 11, RFC 1869, MCI, Innosoft\n       International, Inc., Dover Beach Consulting, Inc., Network\n       Management Associates, Inc., Brandenburg Consulting, November\n       1995.\n\n   [6] Partridge, C., \"Mail Routing and the Domain System\", STD 14, RFC\n       974, BBN, January 1986.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin, et al              Standards Track                     [Page 8]\n\f\nRFC 1870                 SMTP Size Declaration             November 1995\n\n\n12.  Chair, Editor, and Author Addresses\n\n   John Klensin, WG Chair\n   MCI\n   2100 Reston Parkway\n   Reston, VA 22091\n\n   Phone: +1 703 715-7361\n   Fax: +1 703 715-7436\n   EMail: klensin@mci.net\n\n\n   Ned Freed, Editor\n   Innosoft International, Inc.\n   1050 East Garvey Avenue South\n   West Covina, CA 91790\n   USA\n\n   Phone: +1 818 919 3600\n   Fax: +1 818 919 3614\n   EMail: ned@innosoft.com\n\n\n   Keith Moore\n   Computer Science Dept.\n   University of Tennessee\n   107 Ayres Hall\n   Knoxville, TN 37996-1301\n   USA\n\n   EMail: moore@cs.utk.edu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin, et al              Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc1891.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           K. Moore\nRequest for Comments: 1891                       University of Tennessee\nCategory: Standards Track                                   January 1996\n\n\n                         SMTP Service Extension\n                   for Delivery Status Notifications\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1. Abstract\n\n   This memo defines an extension to the SMTP service, which allows an\n   SMTP client to specify (a) that delivery status notifications (DSNs)\n   should be generated under certain conditions, (b) whether such\n   notifications should return the contents of the message, and (c)\n   additional information, to be returned with a DSN, that allows the\n   sender to identify both the recipient(s) for which the DSN was\n   issued, and the transaction in which the original message was sent.\n\n   Any questions, comments, and reports of defects or ambiguities in\n   this specification may be sent to the mailing list for the NOTARY\n   working group of the IETF, using the address\n   <notifications@cs.utk.edu>.  Requests to subscribe to the mailing\n   list should be addressed to <notifications-request@cs.utk.edu>.\n   Implementors of this specification are encouraged to subscribe to the\n   mailing list, so that they will quickly be informed of any problems\n   which might hinder interoperability.\n\n   NOTE: This document is a Proposed Standard.  If and when this\n   protocol is submitted for Draft Standard status, any normative text\n   (phrases containing SHOULD, SHOULD NOT, MUST, MUST NOT, or MAY) in\n   this document will be re-evaluated in light of implementation\n   experience, and are thus subject to change.\n\n2. Introduction\n\n   The SMTP protocol [1] requires that an SMTP server provide\n   notification of delivery failure, if it determines that a message\n   cannot be delivered to one or more recipients.  Traditionally, such\n   notification consists of an ordinary Internet mail message (format\n   defined by [2]), sent to the envelope sender address (the argument of\n\n\n\nMoore                       Standards Track                     [Page 1]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   the SMTP MAIL command), containing an explanation of the error and at\n   least the headers of the failed message.\n\n   Experience with large mail distribution lists [3] indicates that such\n   messages are often insufficient to diagnose problems, or even to\n   determine at which host or for which recipients a problem occurred.\n   In addition, the lack of a standardized format for delivery\n   notifications in Internet mail makes it difficult to exchange such\n   notifications with other message handling systems.\n\n   Such experience has demonstrated a need for a delivery status\n   notification service for Internet electronic mail, which:\n\n(a) is reliable, in the sense that any DSN request will either be\n    honored at the time of final delivery, or result in a response\n    that indicates that the request cannot be honored,\n\n(b) when both success and failure notifications are requested,\n    provides an unambiguous and nonconflicting indication of whether\n    delivery of a message to a recipient succeeded or failed,\n\n(c) is stable, in that a failed attempt to deliver a DSN should never\n    result in the transmission of another DSN over the network,\n\n(d) preserves sufficient information to allow the sender to identify\n    both the mail transaction and the recipient address which caused\n    the notification, even when mail is forwarded or gatewayed to\n    foreign environments, and\n\n(e) interfaces acceptably with non-SMTP and non-822-based mail\n    systems, both so that notifications returned from foreign mail\n    systems may be useful to Internet users, and so that the\n    notification requests from foreign environments may be honored.\n    Among the requirements implied by this goal are the ability to\n    request non-return-of-content, and the ability to specify whether\n    positive delivery notifications, negative delivery notifications,\n    both, or neither, should be issued.\n\n   In an attempt to provide such a service, this memo uses the mechanism\n   defined in [4] to define an extension to the SMTP protocol.  Using\n   this mechanism, an SMTP client may request that an SMTP server issue\n   or not issue a delivery status notification (DSN) under certain\n   conditions.  The format of a DSN is defined in [5].\n\n\n\n\n\n\n\n\nMoore                       Standards Track                     [Page 2]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n3. Framework for the Delivery Status Notification Extension\n\n   The following service extension is therefore defined:\n\n(1) The name of the SMTP service extension is \"Delivery Status\n    Notification\";\n\n(2) the EHLO keyword value associated with this extension is \"DSN\",\n    the meaning of which is defined in section 4 of this memo;\n\n(3) no parameters are allowed with this EHLO keyword value;\n\n(4) two optional parameters are added to the RCPT command, and two\n    optional parameters are added to the MAIL command:\n\n    An optional parameter for the RCPT command, using the\n    esmtp-keyword \"NOTIFY\", (to specify the conditions under which a\n    delivery status notification should be generated), is defined in\n    section 5.1,\n\n    An optional parameter for the RCPT command, using the\n    esmtp-keyword \"ORCPT\", (used to convey the \"original\"\n    (sender-specified) recipient address), is defined in section 5.2,\n    and\n\n    An optional parameter for the MAIL command, using the\n    esmtp-keyword \"RET\", (to request that DSNs containing an\n    indication of delivery failure either return the entire contents\n    of a message or only the message headers), is defined in section\n    5.3,\n\n    An optional parameter for the MAIL command, using the\n    esmtp-keyword \"ENVID\", (used to propagate an identifier for this\n    message transmission envelope, which is also known to the sender\n    and will, if present, be returned in any DSNs issued for this\n    transmission), is defined in section 5.4;\n\n(5) no additional SMTP verbs are defined by this extension.\n\n   The remainder of this memo specifies how support for the extension\n   effects the behavior of a message transfer agent.\n\n4.  The Delivery Status Notification service extension\n\n   An SMTP client wishing to request a DSN for a message may issue the\n   EHLO command to start an SMTP session, to determine if the server\n   supports any of several service extensions.  If the server responds\n   with code 250 to the EHLO command, and the response includes the EHLO\n\n\n\nMoore                       Standards Track                     [Page 3]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   keyword DSN, then the Delivery Status Notification extension (as\n   described in this memo) is supported.\n\n   Ordinarily, when an SMTP server returns a positive (2xx) reply code\n   in response to a RCPT command, it agrees to accept responsibility for\n   either delivering the message to the named recipient, or sending a\n   notification to the sender of the message indicating that delivery\n   has failed.  However, an extended SMTP (\"ESMTP\") server which\n   implements this service extension will accept an optional NOTIFY\n   parameter with the RCPT command. If present, the NOTIFY parameter\n   alters the conditions for generation of delivery status notifications\n   from the default (issue notifications only on failure) specified in\n   [1].  The ESMTP client may also request (via the RET parameter)\n   whether the entire contents of the original message should be\n   returned (as opposed to just the headers of that message), along with\n   the DSN.\n\n   In general, an ESMTP server which implements this service extension\n   will propagate delivery status notification requests when relaying\n   mail to other SMTP-based MTAs which also support this extension, and\n   make a \"best effort\" to ensure that such requests are honored when\n   messages are passed into other environments.\n\n   In order that any delivery status notifications thus generated will\n   be meaningful to the sender, any ESMTP server which supports this\n   extension will attempt to propagate the following information to any\n   other MTAs that are used to relay the message, for use in generating\n   DSNs:\n\n(a) for each recipient, a copy of the original recipient address, as\n    used by the sender of the message.\n\n    This address need not be the same as the mailbox specified in the\n    RCPT command.  For example, if a message was originally addressed\n    to A@B.C and later forwarded to A@D.E, after such forwarding has\n    taken place, the RCPT command will specify a mailbox of A@D.E.\n    However, the original recipient address remains A@B.C.\n\n    Also, if the message originated from an environment which does not\n    use Internet-style user@domain addresses, and was gatewayed into\n    SMTP, the original recipient address will preserve the original\n    form of the recipient address.\n\n(b) for the entire SMTP transaction, an envelope identification\n    string, which may be used by the sender to associate any delivery\n    status notifications with the transaction used to send the\n    original message.\n\n\n\n\nMoore                       Standards Track                     [Page 4]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n5.  Additional parameters for RCPT and MAIL commands\n\n   The extended RCPT and MAIL commands are issued by a client when it\n   wishes to request a DSN from the server, under certain conditions,\n   for a particular recipient.  The extended RCPT and MAIL commands are\n   identical to the RCPT and MAIL commands defined in [1], except that\n   one or more of the following parameters appear after the sender or\n   recipient address, respectively.  The general syntax for extended\n   SMTP commands is defined in [4].\n\n   NOTE: Although RFC 822 ABNF is used to describe the syntax of these\n   parameters, they are not, in the language of that document,\n   \"structured field bodies\".  Therefore, while parentheses MAY appear\n   within an emstp-value, they are not recognized as comment delimiters.\n\n   The syntax for \"esmtp-value\" in [4] does not allow SP, \"=\", control\n   characters, or characters outside the traditional ASCII range of 1-\n   127 decimal to be transmitted in an esmtp-value.  Because the ENVID\n   and ORCPT parameters may need to convey values outside this range,\n   the esmtp-values for these parameters are encoded as \"xtext\".\n   \"xtext\" is formally defined as follows:\n\n     xtext = *( xchar / hexchar )\n\n     xchar = any ASCII CHAR between \"!\" (33) and \"~\" (126) inclusive,\n          except for \"+\" and \"=\".\n\n; \"hexchar\"s are intended to encode octets that cannot appear\n; as ASCII characters within an esmtp-value.\n\n     hexchar = ASCII \"+\" immediately followed by two upper case\n          hexadecimal digits\n\nWhen encoding an octet sequence as xtext:\n\n+ Any ASCII CHAR between \"!\" and \"~\" inclusive, except for \"+\" and \"=\",\n  MAY be encoded as itself.  (A CHAR in this range MAY instead be\n  encoded as a \"hexchar\", at the implementor's discretion.)\n\n+ ASCII CHARs that fall outside the range above must be encoded as\n  \"hexchar\".\n\n5.1  The NOTIFY parameter of the ESMTP RCPT command\n\n   A RCPT command issued by a client may contain the optional esmtp-\n   keyword \"NOTIFY\", to specify the conditions under which the SMTP\n   server should generate DSNs for that recipient.  If the NOTIFY\n   esmtp-keyword is used, it MUST have an associated esmtp-value,\n\n\n\nMoore                       Standards Track                     [Page 5]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   formatted according to the following rules, using the ABNF of RFC\n   822:\n\n     notify-esmtp-value = \"NEVER\" / 1#notify-list-element\n\n     notify-list-element = \"SUCCESS\" / \"FAILURE\" / \"DELAY\"\n\nNotes:\n\na. Multiple notify-list-elements, separated by commas, MAY appear in a\n   NOTIFY parameter; however, the NEVER keyword MUST appear by itself.\n\nb. Any of the keywords NEVER, SUCCESS, FAILURE, or DELAY may be spelled\n   in any combination of upper and lower case letters.\n\nThe meaning of the NOTIFY parameter values is generally as follows:\n\n+ A NOTIFY parameter value of \"NEVER\" requests that a DSN not be\n  returned to the sender under any conditions.\n\n+ A NOTIFY parameter value containing the \"SUCCESS\" or \"FAILURE\"\n  keywords requests that a DSN be issued on successful delivery or\n  delivery failure, respectively.\n\n+ A NOTIFY parameter value containing the keyword \"DELAY\" indicates the\n  sender's willingness to receive \"delayed\" DSNs.  Delayed DSNs may be\n  issued if delivery of a message has been delayed for an unusual amount\n  of time (as determined by the MTA at which the message is delayed),\n  but the final delivery status (whether successful or failure) cannot\n  be determined.  The absence of the DELAY keyword in a NOTIFY parameter\n  requests that a \"delayed\" DSN NOT be issued under any conditions.\n\n   The actual rules governing interpretation of the NOTIFY parameter are\n   given in section 6.\n\n   For compatibility with SMTP clients that do not use the NOTIFY\n   facility, the absence of a NOTIFY parameter in a RCPT command may be\n   interpreted as either NOTIFY=FAILURE or NOTIFY=FAILURE,DELAY.\n\n5.2 The ORCPT parameter to the ESMTP RCPT command\n\n   The ORCPT esmtp-keyword of the RCPT command is used to specify an\n   \"original\" recipient address that corresponds to the actual recipient\n   to which the message is to be delivered.  If the ORCPT esmtp-keyword\n   is used, it MUST have an associated esmtp-value, which consists of\n   the original recipient address, encoded according to the rules below.\n   The ABNF for the ORCPT parameter is:\n\n\n\n\nMoore                       Standards Track                     [Page 6]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n     orcpt-parameter = \"ORCPT=\" original-recipient-address\n\n     original-recipient-address = addr-type \";\" xtext\n\n     addr-type = atom\n\n   The \"addr-type\" portion MUST be an IANA-registered electronic mail\n   address-type (as defined in [5]), while the \"xtext\" portion contains\n   an encoded representation of the original recipient address using the\n   rules in section 5 of this document.  The entire ORCPT parameter MAY\n   be up to 500 characters in length.\n\n   When initially submitting a message via SMTP, if the ORCPT parameter\n   is used, it MUST contain the same address as the RCPT TO address\n   (unlike the RCPT TO address, the ORCPT parameter will be encoded as\n   xtext).  Likewise, when a mailing list submits a message via SMTP to\n   be distributed to the list subscribers, if ORCPT is used, the ORCPT\n   parameter MUST match the new RCPT TO address of each recipient, not\n   the address specified by the original sender of the message.)\n\n   The \"addr-type\" portion of the original-recipient-address is used to\n   indicate the \"type\" of the address which appears in the ORCPT\n   parameter value.  However, the address associated with the ORCPT\n   keyword is NOT constrained to conform to the syntax rules for that\n   \"addr-type\".\n\n   Ideally, the \"xtext\" portion of the original-recipient-address should\n   contain, in encoded form, the same sequence of characters that the\n   sender used to specify the recipient.  However, for a message\n   gatewayed from an environment (such as X.400) in which a recipient\n   address is not a simple string of printable characters, the\n   representation of recipient address must be defined by a\n   specification for gatewaying between DSNs and that environment.\n\n5.3 The RET parameter of the ESMTP MAIL command\n\n   The RET esmtp-keyword on the extended MAIL command specifies whether\n   or not the message should be included in any failed DSN issued for\n   this message transmission.  If the RET esmtp-keyword is used, it MUST\n   have an associated esmtp-value, which is one of the following\n   keywords:\n\n   FULL  requests that the entire message be returned in any \"failed\"\n         delivery status notification issued for this recipient.\n\n   HDRS  requests that only the headers of the message be returned.\n\n\n\n\n\nMoore                       Standards Track                     [Page 7]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   The FULL and HDRS keywords may be spelled in any combination of upper\n   and lower case letters.\n\n   If no RET parameter is supplied, the MTA MAY return either the\n   headers of the message or the entire message for any DSN containing\n   indication of failed deliveries.\n\n   Note that the RET parameter only applies to DSNs that indicate\n   delivery failure for at least one recipient.  If a DSN contains no\n   indications of delivery failure, only the headers of the message\n   should be returned.\n\n5.4  The ENVID parameter to the ESMTP MAIL command\n\n   The ENVID esmtp-keyword of the SMTP MAIL command is used to specify\n   an \"envelope identifier\" to be transmitted along with the message and\n   included in any DSNs issued for any of the recipients named in this\n   SMTP transaction.  The purpose of the envelope identifier is to allow\n   the sender of a message to identify the transaction for which the DSN\n   was issued.\n\n   The ABNF for the ENVID parameter is:\n\n     envid-parameter = \"ENVID=\" xtext\n\n   The ENVID esmtp-keyword MUST have an associated esmtp-value.  No\n   meaning is assigned by the mail system to the presence or absence of\n   this parameter or to any esmtp-value associated with this parameter;\n   the information is used only by the sender or his user agent.  The\n   ENVID parameter MAY be up to 100 characters in length.\n\n5.5 Restrictions on the use of Delivery Status Notification parameters\n\n   The RET and ENVID parameters MUST NOT appear more than once each in\n   any single MAIL command.  If more than one of either of these\n   parameters appears in a MAIL command, the ESMTP server SHOULD respond\n   with \"501 syntax error in parameters or arguments\".\n\n   The NOTIFY and ORCPT parameters MUST NOT appear more than once in any\n   RCPT command.  If more than one of either of these parameters appears\n   in a RCPT command, the ESMTP server SHOULD respond with \"501 syntax\n   error in parameters or arguments\".\n\n6. Conformance requirements\n\n   The Simple Mail Transfer Protocol (SMTP) is used by Message Transfer\n   Agents (MTAs) when accepting, relaying, or gatewaying mail, as well\n   as User Agents (UAs) when submitting mail to the mail transport\n\n\n\nMoore                       Standards Track                     [Page 8]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   system.  The DSN extension to SMTP may be used to allow UAs to convey\n   the sender's requests as to when DSNs should be issued.  A UA which\n   claims to conform to this specification must meet certain\n   requirements as described below.\n\n   Typically, a message transfer agent (MTA) which supports SMTP will\n   assume, at different times, both the role of a SMTP client and an\n   SMTP server, and may also provide local delivery, gatewaying to\n   foreign environments, forwarding, and mailing list expansion.  An MTA\n   which, when acting as an SMTP server, issues the DSN keyword in\n   response to the EHLO command, MUST obey the rules below for a\n   \"conforming SMTP client\" when acting as a client, and a \"conforming\n   SMTP server\" when acting as a server.  The term \"conforming MTA\"\n   refers to an MTA which conforms to this specification, independent of\n   its role of client or server.\n\n6.1 SMTP protocol interactions\n\n   The following rules apply to SMTP transactions in which any of the\n   ENVID, NOTIFY, RET, or ORCPT keywords are used:\n\n(a) If an SMTP client issues a MAIL command containing a valid ENVID\n    parameter and associated esmtp-value and/or a valid RET parameter\n    and associated esmtp-value, a conforming SMTP server MUST return\n    the same reply-code as it would to the same MAIL command without\n    the ENVID and/or RET parameters.  A conforming SMTP server MUST\n    NOT refuse a MAIL command based on the absence or presence of\n    valid ENVID or RET parameters, or on their associated\n    esmtp-values.\n\n    However, if the associated esmtp-value is not valid (i.e. contains\n    illegal characters), or if there is more than one ENVID or RET\n    parameter in a particular MAIL command, the server MUST issue the\n    reply-code 501 with an appropriate message (e.g.  \"syntax error in\n    parameter\").\n\n(b) If an SMTP client issues a RCPT command containing any valid\n    NOTIFY and/or ORCPT parameters, a conforming SMTP server MUST\n    return the same response as it would to the same RCPT command\n    without those NOTIFY and/or ORCPT parameters.  A conforming SMTP\n    server MUST NOT refuse a RCPT command based on the presence or\n    absence of any of these parameters.\n\n    However, if any of the associated esmtp-values are not valid, or\n    if there is more than one of any of these parameters in a\n    particular RCPT command, the server SHOULD issue the response \"501\n    syntax error in parameter\".\n\n\n\n\nMoore                       Standards Track                     [Page 9]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n6.2 Handling of messages received via SMTP\n\n   This section describes how a conforming MTA should handle any\n   messages received via SMTP.\n\n   NOTE: A DSN MUST NOT be returned to the sender for any message for\n   which the return address from the SMTP MAIL command was NULL (\"<>\"),\n   even if the sender's address is available from other sources (e.g.\n   the message header).  However, the MTA which would otherwise issue a\n   DSN SHOULD inform the local postmaster of delivery failures through\n   some appropriate mechanism that will not itself result in the\n   generation of DSNs.\n\n   DISCUSSION: RFC 1123, section 2.3.3 requires error notifications to\n   be sent with a NULL return address (\"reverse-path\").  This creates an\n   interesting situation when a message arrives with one or more\n   nonfunctional recipient addresses in addition to a nonfunctional\n   return address.  When delivery to one of the recipient addresses\n   fails, the MTA will attempt to send a nondelivery notification to the\n   return address, setting the return address on the notification to\n   NULL.  When the delivery of this notification fails, the MTA\n   attempting delivery of that notification sees a NULL return address.\n   If that MTA were not to inform anyone of the situation, the original\n   message would be silently lost.  Furthermore, a nonfunctional return\n   address is often indicative of a configuration problem in the\n   sender's MTA.  Reporting the condition to the local postmaster may\n   help to speed correction of such errors.\n\n6.2.1 Relay of messages to other conforming SMTP servers\n\n   The following rules govern the behavior of a conforming MTA, when\n   relaying a message which was received via the SMTP protocol, to an\n   SMTP server that supports the Delivery Status Notification service\n   extension:\n\n(a) Any ENVID parameter included in the MAIL command when a message was\n    received, MUST also appear on the MAIL command with which the\n    message is relayed, with the same associated esmtp-value.  If no\n    ENVID parameter was included in the MAIL command when the message\n    was received, the ENVID parameter MUST NOT be supplied when the\n    message is relayed.\n\n(b) Any RET parameter included in the MAIL command when a message was\n    received, MUST also appear on the MAIL command with which the\n    message is relayed, with the same associated esmtp-value.  If no RET\n    parameter was included in the MAIL command when the message was\n    received, the RET parameter MUST NOT supplied when the message is\n    relayed.\n\n\n\nMoore                       Standards Track                    [Page 10]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n(c) If the NOTIFY parameter was supplied for a recipient when the\n    message was received, the RCPT command issued when the message is\n    relayed MUST also contain the NOTIFY parameter along with its\n    associated esmtp-value.  If the NOTIFY parameter was not supplied\n    for a recipient when the message was received, the NOTIFY parameter\n    MUST NOT be supplied for that recipient when the message is relayed.\n\n(d) If any ORCPT parameter was present in the RCPT command for a\n    recipient when the message was received, an ORCPT parameter with the\n    identical original-recipient-address MUST appear in the RCPT command\n    issued for that recipient when relaying the message.  (For example,\n    the MTA therefore MUST NOT change the case of any alphabetic\n    characters in an ORCPT parameter.)\n\n    If no ORCPT parameter was present in the RCPT command when the\n    message was received, an ORCPT parameter MAY be added to the RCPT\n    command when the message is relayed.  If an ORCPT parameter is added\n    by the relaying MTA, it MUST contain the recipient address from the\n    RCPT command used when the message was received by that MTA.\n\n6.2.2  Relay of messages to non-conforming SMTP servers\n\n   The following rules govern the behavior of a conforming MTA (in the\n   role of client), when relaying a message which was received via the\n   SMTP protocol, to an SMTP server that does not support the Delivery\n   Status Notification service extension:\n\n(a) ENVID, NOTIFY, RET, or ORCPT parameters MUST NOT be issued when\n    relaying the message.\n\n(b) If the NOTIFY parameter was supplied for a recipient, with an esmtp-\n    value containing the keyword SUCCESS, and the SMTP server returns a\n    success (2xx) reply-code in response to the RCPT command, the client\n    MUST issue a \"relayed\" DSN for that recipient.\n\n(c) If the NOTIFY parameter was supplied for a recipient with an esmtp-\n    value containing the keyword FAILURE, and the SMTP server returns a\n    permanent failure (5xx) reply-code in response to the RCPT command,\n    the client MUST issue a \"failed\" DSN for that recipient.\n\n(d) If the NOTIFY parameter was supplied for a recipient with an esmtp-\n    value of NEVER, the client MUST NOT issue a DSN for that recipient,\n    regardless of the reply-code returned by the SMTP server.  However,\n    if the server returned a failure (5xx) reply-code, the client MAY\n    inform the local postmaster of the delivery failure via an\n    appropriate mechanism that will not itself result in the generation\n    of DSNs.\n\n\n\n\nMoore                       Standards Track                    [Page 11]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n    When attempting to relay a message to an SMTP server that does not\n    support this extension, and if NOTIFY=NEVER was specified for some\n    recipients of that message, a conforming SMTP client MAY relay the\n    message for those recipients in a separate SMTP transaction, using\n    an empty reverse-path in the MAIL command.  This will prevent DSNs\n    from being issued for those recipients by MTAs that conform to [1].\n\n(e) If a NOTIFY parameter was not supplied for a recipient, and the SMTP\n    server returns a success (2xx) reply-code in response to a RCPT\n    command, the client MUST NOT issue any DSN for that recipient.\n\n(f) If a NOTIFY parameter was not supplied for a recipient, and the SMTP\n    server returns a permanent failure (5xx) reply-code in response to a\n    RCPT command, the client MUST issue a \"failed\" DSN for that\n    recipient.\n\n6.2.3  Local delivery of messages\n\n   The following rules govern the behavior of a conforming MTA upon\n   successful delivery of a message that was received via the SMTP\n   protocol, to a local recipient's mailbox:\n\n   \"Delivery\" means that the message has been placed in the recipient's\n   mailbox.  For messages which are transmitted to a mailbox for later\n   retrieval via IMAP [6], POP [7] or a similar message access protocol,\n   \"delivery\" occurs when the message is made available to the IMAP\n   (POP, etc.) service, rather than when the message is retrieved by the\n   recipient's user agent.\n\n   Similarly, for a recipient address which corresponds to a mailing\n   list exploder, \"delivery\" occurs when the message is made available\n   to that list exploder, even though the list exploder might refuse to\n   deliver that message to the list recipients.\n\n(a) If the NOTIFY parameter was supplied for that recipient, with an\n    esmtp-value containing the SUCCESS keyword, the MTA MUST issue a\n    \"delivered\" DSN for that recipient.\n\n(b) If the NOTIFY parameter was supplied for that recipient which did\n    not contain the SUCCESS keyword, the MTA MUST NOT issue a DSN for\n    that recipient.\n\n(c) If the NOTIFY parameter was not supplied for that recipient, the MTA\n    MUST NOT issue a DSN.\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 12]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n6.2.4  Gatewaying a message into a foreign environment\n\n   The following rules govern the behavior of a conforming MTA, when\n   gatewaying a message that was received via the SMTP protocol, into a\n   foreign (non-SMTP) environment:\n\n(a) If the the foreign environment is capable of issuing appropriate\n    notifications under the conditions requested by the NOTIFY\n    parameter, and the conforming MTA can ensure that any notification\n    thus issued will be translated into a DSN and delivered to the\n    original sender, then the MTA SHOULD gateway the message into the\n    foreign environment, requesting notification under the desired\n    conditions, without itself issuing a DSN.\n\n(b) If a NOTIFY parameter was supplied with the SUCCESS keyword, but the\n    destination environment cannot return an appropriate notification on\n    successful delivery, the MTA SHOULD issue a \"relayed\" DSN for that\n    recipient.\n\n(c) If a NOTIFY parameter was supplied with an esmtp-keyword of NEVER, a\n    DSN MUST NOT be issued.  If possible, the MTA SHOULD direct the\n    destination environment to not issue delivery notifications for that\n    recipient.\n\n(d) If the NOTIFY parameter was not supplied for a particular recipient,\n    a DSN SHOULD NOT be issued by the gateway. The gateway SHOULD\n    attempt to ensure that appropriate notification will be provided by\n    the foreign mail environment if eventual delivery failure occurs,\n    and that no notification will be issued on successful delivery.\n\n(e) When gatewaying a message into a foreign environment, the return-of-\n    content conditions specified by any RET parameter are nonbinding;\n    however, the MTA SHOULD attempt to honor the request using whatever\n    mechanisms exist in the foreign environment.\n\n6.2.5  Delays in delivery\n\n   If a conforming MTA receives a message via the SMTP protocol, and is\n   unable to deliver or relay the message to one or more recipients for\n   an extended length of time (to be determined by the MTA), it MAY\n   issue a \"delayed\" DSN for those recipients, subject to the following\n   conditions:\n\n(a) If the NOTIFY parameter was supplied for a recipient and its value\n    included the DELAY keyword, a \"delayed\" DSN MAY be issued.\n\n(b) If the NOTIFY parameter was not supplied for a recipient, a\n    \"delayed\" DSN MAY be issued.\n\n\n\nMoore                       Standards Track                    [Page 13]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n(c) If the NOTIFY parameter was supplied which did not contain the DELAY\n    keyword, a \"delayed\" DSN MUST NOT be issued.\n\n   NOTE: Although delay notifications are common in present-day\n   electronic mail, a conforming MTA is never required to issue\n   \"delayed\" DSNs.  The DELAY keyword of the NOTIFY parameter is\n   provided to allow the SMTP client to specifically request (by\n   omitting the DELAY parameter) that \"delayed\" DSNs NOT be issued.\n\n6.2.6  Failure of a conforming MTA to deliver a message\n\n   The following rules govern the behavior of a conforming MTA which\n   received a message via the SMTP protocol, and is unable to deliver a\n   message to a recipient specified in the SMTP transaction:\n\n(a) If a NOTIFY parameter was supplied for the recipient with an esmtp-\n    keyword containing the value FAILURE, a \"failed\" DSN MUST be issued\n    by the MTA.\n\n(b) If a NOTIFY parameter was supplied for the recipient which did not\n    contain the value FAILURE, a DSN MUST NOT be issued for that\n    recipient.  However, the MTA MAY inform the local postmaster of the\n    delivery failure via some appropriate mechanism which does not\n    itself result in the generation of DSNs.\n\n(c) If no NOTIFY parameter was supplied for the recipient, a \"failed\"\n    DSN MUST be issued.\n\n   NOTE: Some MTAs are known to forward undeliverable messages to the\n   local postmaster or \"dead letter\" mailbox.  This is still considered\n   delivery failure, and does not diminish the requirement to issue a\n   \"failed\" DSN under the conditions defined elsewhere in this memo.  If\n   a DSN is issued for such a recipient, the Action value MUST be\n   \"failed\".\n\n6.2.7 Forwarding, aliases, and mailing lists\n\n   Delivery of a message to a local email address usually causes the\n   message to be stored in the recipient's mailbox.  However, MTAs\n   commonly provide a facility where a local email address can be\n   designated as an \"alias\" or \"mailing list\"; delivery to that address\n   then causes the message to be forwarded to each of the (local or\n   remote) recipient addresses associated with the alias or list.  It is\n   also common to allow a user to optionally \"forward\" her mail to one\n   or more alternate addresses.  If this feature is enabled, her mail is\n   redistributed to those addresses instead of being deposited in her\n   mailbox.\n\n\n\n\nMoore                       Standards Track                    [Page 14]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   Following the example of [9] (section 5.3.6), this document defines\n   the difference between an \"alias\" and \"mailing list\" as follows: When\n   forwarding a message to the addresses associated with an \"alias\", the\n   envelope return address (e.g. SMTP MAIL FROM) remains intact.\n   However, when forwarding a message to the addresses associated with a\n   \"mailing list\", the envelope return address is changed to that of the\n   administrator of the mailing list.  This causes DSNs and other\n   nondelivery reports resulting from delivery to the list members to be\n   sent to the list administrator rather than the sender of the original\n   message.\n\n   The DSN processing for aliases and mailing lists is as follows:\n\n6.2.7.1 mailing lists\n\n   When a message is delivered to a list submission address (i.e. placed\n   in the list's mailbox for incoming mail, or accepted by the process\n   that redistributes the message to the list subscribers), this is\n   considered final delivery for the original message.  If the NOTIFY\n   parameter for the list submission address contained the SUCCESS\n   keyword, a \"delivered\" DSN MUST be returned to the sender of the\n   original message.\n\n   NOTE: Some mailing lists are able to reject message submissions,\n   based on the content of the message, the sender's address, or some\n   other criteria.  While the interface between such a mailing list and\n   its MTA is not well-defined, it is important that DSNs NOT be issued\n   by both the MTA (to report successful delivery to the list), and the\n   list (to report message rejection using a \"failure\" DSN.)\n\n   However, even if a \"delivered\" DSN was issued by the MTA, a mailing\n   list which rejects a message submission MAY notify the sender that\n   the message was rejected using an ordinary message instead of a DSN.\n\n   Whenever a message is redistributed to an mailing list,\n\n(a) The envelope return address is rewritten to point to the list\n    maintainer.  This address MAY be that of a process that recognizes\n    DSNs and processes them automatically, but it MUST forward\n    unrecognized messages to the human responsible for the list.\n\n(b) The ENVID, NOTIFY, RET, and ORCPT parameters which accompany the\n    redistributed message MUST NOT be derived from those of the original\n    message.\n\n(c) The NOTIFY and RET parameters MAY be specified by the local\n    postmaster or the list administrator.  If ORCPT parameters are\n    supplied during redistribution to the list subscribers, they SHOULD\n\n\n\nMoore                       Standards Track                    [Page 15]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n    contain the addresses of the list subscribers in the format used by\n    the mailing list.\n\n6.2.7.2 single-recipient aliases\n\n   Under normal circumstances, when a message arrives for an \"alias\"\n   which has a single forwarding address, a DSN SHOULD NOT be issued.\n   Any ENVID, NOTIFY, RET, or ORCPT parameters SHOULD be propagated with\n   the message as it is redistributed to the forwarding address.\n\n6.2.7.3 multiple-recipient aliases\n\n   An \"alias\" with multiple recipient addresses may be handled in any of\n   the following ways:\n\n(a) Any ENVID, NOTIFY, RET, or ORCPT parameters are NOT propagated when\n    relaying the message to any of the forwarding addresses.  If the\n    NOTIFY parameter for the alias contained the SUCCESS keyword, the\n    MTA issues a \"relayed\" DSN.  (In effect, the MTA treats the message\n    as if it were being relayed into an environment that does not\n    support DSNs.)\n\n(b) Any ENVID, NOTIFY, RET, or ORCPT parameters (or the equivalent\n    requests if the message is gatewayed) are propagated to EXACTLY one\n    of the forwarding addresses.  No DSN is issued.  (This is\n    appropriate when aliasing is used to forward a message to a\n    \"vacation\" auto-responder program in addition to the local mailbox.)\n\n(c) Any ENVID, RET, or ORCPT parameters are propagated to all forwarding\n    addresses associated with that alias.  The NOTIFY parameter is\n    propagated to the forwarding addresses, except that it any SUCCESS\n    keyword is removed.  If the original NOTIFY parameter for the alias\n    contained the SUCCESS keyword, an \"expanded\" DSN is issued for the\n    alias.  If the NOTIFY parameter for the alias did not contain the\n    SUCCESS keyword, no DSN is issued for the alias.\n\n6.2.7.4 confidential forwarding addresses\n\n   If it is desired to maintain the confidentiality of a recipient's\n   forwarding address, the forwarding may be treated as if it were a\n   mailing list.  A DSN will be issued, if appropriate, upon \"delivery\"\n   to the recipient address specified by the sender.  When the message\n   is forwarded it will have a new envelope return address. Any DSNs\n   which result from delivery failure of the forwarded message will not\n   be returned to the original sender of the message and thus not expose\n   the recipient's forwarding address.\n\n\n\n\n\nMoore                       Standards Track                    [Page 16]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n6.2.8 DSNs describing delivery to multiple recipients\n\n   A single DSN may describe attempts to deliver a message to multiple\n   recipients of that message.  If a DSN is issued for some recipients\n   in an SMTP transaction and not for others according to the rules\n   above, the DSN SHOULD NOT contain information for recipients for whom\n   DSNs would not otherwise have been issued.\n\n6.3 Handling of messages from other sources\n\n   For messages which originated from \"local\" users (whatever that\n   means), the specifications under which DSNs should be generated can\n   be communicated to the MTA via any protocol agreed on between the\n   sender's mail composer (user agent) and the MTA.  The local MTA can\n   then either relay the message, or issue appropriate delivery status\n   notifications.  However, if such requests are transmitted within the\n   message itself (for example in the message headers), the requests\n   MUST be removed from the message before it is transmitted via SMTP.\n\n   For messages gatewayed from non-SMTP sources and further relayed by\n   SMTP, the gateway SHOULD, using the SMTP extensions described here,\n   attempt to provide the delivery reporting conditions expected by the\n   source mail environment.  If appropriate, any DSNs returned to the\n   source environment SHOULD be translated into the format expected in\n   that environment.\n\n6.4  Implementation limits\n\n   A conforming MTA MUST accept ESMTP parameters of at least the\n   following sizes:\n\n   (a) ENVID parameter: 100 characters.\n\n   (b) NOTIFY parameter: 28 characters.\n\n   (c) ORCPT parameter: 500 characters.\n\n   (d) RET parameter: 8 characters.\n\n   The maximum sizes for the ENVID and ORCPT parameters are intended to\n   be adequate for the transmission of \"foreign\" envelope identifier and\n   original recipient addresses.  However, user agents which use SMTP as\n   a message submission protocol SHOULD NOT generate ENVID parameters\n   which are longer than 38 characters in length.\n\n   A conforming MTA MUST be able to accept SMTP command-lines which are\n   at least 1036 characters long (530 characters for the ORCPT and\n   NOTIFY parameters of the RCPT command, in addition to the 512\n\n\n\nMoore                       Standards Track                    [Page 17]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n   characters required by [1]).  If other SMTP extensions are supported\n   by the MTA, the MTA MUST be able to accept a command-line large\n   enough for each SMTP command and any combination of ESMTP parameters\n   which may be used with that command.\n\n7.  Format of delivery notifications\n\n   The format of delivery status notifications is defined in [5], which\n   uses the framework defined in [8].  Delivery status notifications are\n   to be returned to the sender of the original message as outlined\n   below.\n\n7.1 SMTP Envelope to be used with delivery status notifications\n\n   The DSN sender address (in the SMTP MAIL command) MUST be a null\n   reverse-path (\"<>\"), as required by section 5.3.3 of [9].  The DSN\n   recipient address (in the RCPT command) is copied from the MAIL\n   command which accompanied the message for which the DSN is being\n   issued.  When transmitting a DSN via SMTP, the RET parameter MUST NOT\n   be used.  The NOTIFY parameter MAY be used, but its value MUST be\n   NEVER.  The ENVID parameter (with a newly generated envelope-id)\n   and/or ORCPT parameter MAY be used.\n\n7.2 Contents of the DSN\n\n   A DSN is transmitted as a MIME message with a top-level content-type\n   of multipart/report (as defined in [5]).\n\n   The multipart/report content-type may be used for any of several\n   kinds of reports generated by the mail system.  When multipart/report\n   is used to convey a DSN, the report-type parameter of the\n   multipart/report content-type is \"delivery-status\".\n\n   As described in [8], the first component of a multipart/report\n   content-type is a human readable explanation of the report.  For a\n   DSN, the second component of the multipart/report is of content-type\n   message/delivery-status (defined in [5]).  The third component of the\n   multipart/report consists of the original message or some portion\n   thereof.  When the value of the RET parameter is FULL, the full\n   message SHOULD be returned for any DSN which conveys notification of\n   delivery failure.  (However, if the length of the message is greater\n   than some implementation-specified length, the MTA MAY return only\n   the headers even if the RET parameter specified FULL.)  If a DSN\n   contains no notifications of delivery failure, the MTA SHOULD return\n   only the headers.\n\n   The third component must have an appropriate content-type label.\n   Issues concerning selection of the content-type are discussed in [8].\n\n\n\nMoore                       Standards Track                    [Page 18]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n7.3 Message/delivery-status fields\n\n   The message/delivery-status content-type defines a number of fields,\n   with general specifications for their contents.  The following\n   requirements for any DSNs generated in response to a message received\n   by the SMTP protocol by a conforming SMTP server, are in addition to\n   the requirements defined in [5] for the message/delivery-status type.\n\n   When generating a DSN for a message which was received via the SMTP\n   protocol, a conforming MTA will generate the following fields of the\n   message/delivery-status body part:\n\n(a) if an ENVID parameter was present on the MAIL command, an Original-\n    Envelope-ID field MUST be supplied, and the value associated with\n    the ENVID parameter must appear in that field.  If the message was\n    received via SMTP with no ENVID parameter, the Original-Envelope-ID\n    field MUST NOT be supplied.\n\n    Since the ENVID parameter is encoded as xtext, but the Original-\n    Envelope-ID header is NOT encoded as xtext, the MTA must decode the\n    xtext encoding when copying the ENVID value to the Original-\n    Envelope-ID field.\n\n(b) The Reporting-MTA field MUST be supplied.  If Reporting MTA can\n    determine its fully-qualified Internet domain name, the MTA-name-\n    type subfield MUST be \"dns\", and the field MUST contain the fully-\n    qualified domain name of the Reporting MTA. If the fully-qualified\n    Internet domain name of the Reporting MTA is not known (for example,\n    for an SMTP server which is not directly connected to the Internet),\n    the Reporting-MTA field may contain any string identifying the MTA,\n    however, in this case the MTA-name-type subfield MUST NOT be \"dns\".\n    A MTA-name-type subfield value of \"x-local-hostname\" is suggested.\n\n(c) Other per-message fields as defined in [5] MAY be supplied as\n    appropriate.\n\n(d) If the ORCPT parameter was provided for this recipient, the\n    Original-Recipient field MUST be supplied, with its value taken from\n    the ORCPT parameter.  If no ORCPT parameter was provided for this\n    recipient, the Original-Recipient field MUST NOT appear.\n\n(e) The Final-Recipient field MUST be supplied. It MUST contain the\n    recipient address from the message envelope.  If the message was\n    received via SMTP, the address-type will be \"rfc822\".\n\n(f) The Action field MUST be supplied.\n\n\n\n\n\nMoore                       Standards Track                    [Page 19]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n(g) The Status field MUST be supplied, using a status-code from [10].\n    If there is no specific code which suitably describes a delivery\n    failure, either 4.0.0 (temporary failure), or 5.0.0 (permanent\n    failure) MUST be used.\n\n(h) For DSNs resulting from attempts to relay a message to one or more\n    recipients via SMTP, the Remote-MTA field MUST be supplied for each\n    of those recipients.  The mta-name-type subfields of those Remote-\n    MTA fields will be \"dns\".\n\n(i) For DSNs resulting from attempts to relay a message to one or more\n    recipients via SMTP, the Diagnostic-Code MUST be supplied for each\n    of those recipients.  The diagnostic-type subfield will be \"smtp\".\n    See section 9.2(a) of this document for a description of the \"smtp\"\n    diagnostic-code.\n\n(j) For DSNs resulting from attempts to relay a message to one or more\n    recipients via SMTP, an SMTP-Remote-Recipient extension field MAY be\n    supplied for each recipient, which contains the address of that\n    recpient which was presented to the remote SMTP server.\n\n(k) Other per-recipient fields defined in [5] MAY appear, as\n    appropriate.\n\n8. Acknowledgments\n\n   The author wishes to thank Eric Allman, Harald Alvestrand, Jim\n   Conklin, Bryan Costales, Peter Cowen, Dave Crocker, Roger Fajman, Ned\n   Freed, Marko Kaittola, Steve Kille, John Klensin, Anastasios\n   Kotsikonas, John Gardiner Myers, Julian Onions, Jacob Palme, Marshall\n   Rose, Greg Vaudreuil, and Klaus Weide for their suggestions for\n   improvement of this document.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 20]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n9. Appendix - Type-Name Definitions\n\n   The following type names are defined for use in DSN fields generated\n   by conforming SMTP-based MTAs:\n\n9.1 \"rfc822\" address-type\n\n   The \"rfc822\" address-type is to be used when reporting Internet\n   electronic mail address in the Original-Recipient and Final-Recipient\n   DSN fields.\n\n(a) address-type name: rfc822\n\n(b) syntax for mailbox addresses\n\n    RFC822 mailbox addresses are generally expected to be of the form\n\n    [route] addr-spec\n\n    where \"route\" and \"addr-spec\" are defined in [2], and the \"domain\"\n    portions of both \"route\" and \"addr-spec\" are fully-qualified domain\n    names that are registered in the DNS.  However, an MTA MUST NOT\n    modify an address obtained from the message envelope to force it to\n    conform to syntax rules.\n\n(c) If addresses of this type are not composed entirely of graphic\ncharacters from the US-ASCII repertoire, a specification for how they\nare to be encoded as graphic US-ASCII characters in a DSN Original-\nRecipient or Final-Recipient DSN field.\n\n    RFC822 addresses consist entirely of graphic characters from the US-\n    ASCII repertoire, so no translation is necessary.\n\n9.2 \"smtp\" diagnostic-type\n\n   The \"smtp\" diagnostic-type is to be used when reporting SMTP reply-\n   codes in Diagnostic-Code DSN fields.\n\n(a) diagnostic-type name: SMTP\n\n(b) A description of the syntax to be used for expressing diagnostic\ncodes of this type as graphic characters from the US-ASCII repertoire.\n\n    An SMTP diagnostic-code is of the form\n\n    *( 3*DIGIT \"-\" *text ) 3*DIGIT SPACE *text\n\n\n\n\n\nMoore                       Standards Track                    [Page 21]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n    For a single-line SMTP reply to an SMTP command, the diagnostic-code\n    SHOULD be an exact transcription of the reply.  For multi-line SMTP\n    replies, it is necessary to insert a SPACE before each line after\n    the first.  For example, an SMTP reply of:\n\n    550-mailbox unavailable\n    550 user has moved with no forwarding address\n\n    could appear as follows in a Diagnostic-Code DSN field:\n\n    Diagnostic-Code: smtp ; 550-mailbox unavailable\n     550 user has moved with no forwarding address\n\n(c) A list of valid diagnostic codes of this type and the meaning of\neach code.\n\n    SMTP reply-codes are currently defined in [1], [4], and [9].\n    Additional codes may be defined by other RFCs.\n\n9.3 \"dns\" MTA-name-type\n\n   The \"dns\" MTA-name-type should be used in the Reporting-MTA field.\n   An MTA-name of type \"dns\" is a fully-qualified domain name.  The name\n   must be registered in the DNS, and the address Postmaster@{mta-name}\n   must be valid.\n\n(a) MTA-name-type name: dns\n\n(b) A description of the syntax of MTA names of this type, using BNF,\nregular expressions, ASN.1, or other non-ambiguous language.\n\n    MTA names of type \"dns\" SHOULD be valid Internet domain names.  If\n    such domain names are not available, a domain-literal containing the\n    internet protocol address is acceptable.  Such domain names\n    generally conform to the following syntax:\n\n    domain = real-domain / domain-literal\n\n    real-domain = sub-domain *(\".\" sub-domain)\n\n    sub-domain = atom\n\n    domain-literal = \"[\" 1*3DIGIT 3(\".\" 1*3DIGIT) \"]\"\n\n    where \"atom\" and \"DIGIT\" are defined in [2].\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 22]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n(c) If MTA names of this type do not consist entirely of graphic\ncharacters from the US-ASCII repertoire, a specification for how an MTA\nname of this type should be expressed as a sequence of graphic US-ASCII\ncharacters.\n\n    MTA names of type \"dns\" consist entirely of graphic US-ASCII\n    characters, so no translation is needed.\n\n10. Appendix - Example\n\n   This example traces the flow of a single message addressed to\n   multiple recipients.  The message is sent by Alice@Pure-Heart.ORG to\n   Bob@Big-Bucks.COM, Carol@Ivory.EDU, Dana@Ivory.EDU,\n   Eric@Bombs.AF.MIL, Fred@Bombs.AF.MIL, and George@Tax-ME.GOV, with a\n   variety of per-recipient options.  The message is successfully\n   delivered to Bob, Dana (via a gateway), Eric, and Fred.  Delivery\n   fails for Carol and George.\n\n   NOTE: Formatting rules for RFCs require that no line be longer than\n   72 characters.  Therefore, in the following examples, some SMTP\n   commands longer than 72 characters are printed on two lines, with the\n   first line ending in \"\\\".  In an actual SMTP transaction, such a\n   command would be sent as a single line (i.e. with no embedded CRLFs),\n   and without the \"\\\" character that appears in these examples.\n\n10.1 Submission\n\n   Alice's user agent sends the message to the SMTP server at Pure-\n   Heart.ORG.  Note that while this example uses SMTP as a mail\n   submission protocol, other protocols could also be used.\n\n<<< 220 Pure-Heart.ORG SMTP server here\n>>> EHLO Pure-Heart.ORG\n<<< 250-Pure-Heart.ORG\n<<< 250-DSN\n<<< 250-EXPN\n<<< 250 SIZE\n>>> MAIL FROM:<Alice@Pure-Heart.ORG> RET=HDRS ENVID=QQ314159\n<<< 250 <Alice@Pure-Heart.ORG> sender ok\n>>> RCPT TO:<Bob@Big-Bucks.COM> NOTIFY=SUCCESS \\\n    ORCPT=rfc822;Bob@Big-Bucks.COM\n<<< 250 <Bob@Big-Bucks.COM> recipient ok\n>>> RCPT TO:<Carol@Ivory.EDU> NOTIFY=FAILURE \\\n    ORCPT=rfc822;Carol@Ivory.EDU\n<<< 250 <Carol@Ivory.EDU> recipient ok\n>>> RCPT TO:<Dana@Ivory.EDU> NOTIFY=SUCCESS,FAILURE \\\n    ORCPT=rfc822;Dana@Ivory.EDU\n<<< 250 <Dana@Ivory.EDU> recipient ok\n\n\n\nMoore                       Standards Track                    [Page 23]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n>>> RCPT TO:<Eric@Bombs.AF.MIL> NOTIFY=FAILURE \\\n    ORCPT=rfc822;Eric@Bombs.AF.MIL\n<<< 250 <Eric@Bombs.AF.MIL> recipient ok\n>>> RCPT TO:<Fred@Bombs.AF.MIL> NOTIFY=NEVER\n<<< 250 <Fred@Bombs.AF.MIL> recipient ok\n>>> RCPT TO:<George@Tax-ME.GOV> NOTIFY=FAILURE \\\n    ORCPT=rfc822;George@Tax-ME.GOV\n<<< 250 <George@Tax-ME.GOV> recipient ok\n>>> DATA\n<<< 354 okay, send message\n>>> (message goes here)\n>>> .\n<<< 250 message accepted\n>>> QUIT\n<<< 221 goodbye\n\n10.2 Relay to Big-Bucks.COM\n\n   The SMTP at Pure-Heart.ORG then relays the message to Big-Bucks.COM.\n   (For the purpose of this example, mail.Big-Bucks.COM is the primary\n   mail exchanger for Big-Bucks.COM).\n\n<<< 220 mail.Big-Bucks.COM says hello\n>>> EHLO Pure-Heart.ORG\n<<< 250-mail.Big-Bucks.COM\n<<< 250 DSN\n>>> MAIL FROM:<Alice@Pure-Heart.ORG> RET=HDRS ENVID=QQ314159\n<<< 250 sender okay\n>>> RCPT TO:<Bob@Big-Bucks.COM> NOTIFY=SUCCESS \\\n    ORCPT=rfc822;Bob@Big-Bucks.COM\n<<< 250 recipient okay\n>>> DATA\n<<< 354 send message\n>>> (message goes here)\n>>> .\n<<< 250 message received\n>>> QUIT\n<<< 221 bcnu\n\n10.3 Relay to Ivory.EDU\n\n   The SMTP at Pure-Heart.ORG relays the message to Ivory.EDU, which (as\n   it happens) is a gateway to a LAN-based mail system that accepts SMTP\n   mail and supports the DSN extension.\n\n<<< 220 Ivory.EDU gateway to FooMail(tm) here\n>>> EHLO Pure-Heart.ORG\n<<< 250-Ivory.EDU\n\n\n\nMoore                       Standards Track                    [Page 24]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n<<< 250 DSN\n>>> MAIL FROM:<Alice@Pure-Heart.ORG> RET=HDRS ENVID=QQ314159\n<<< 250 ok\n>>> RCPT TO:<Carol@Ivory.EDU> NOTIFY=FAILURE \\\n    ORCPT=rfc822;Carol@Ivory.EDU\n<<< 550 error - no such recipient\n>>> RCPT TO:<Dana@Ivory.EDU> NOTIFY=SUCCESS,FAILURE \\\n    ORCPT=rfc822;Dana@Ivory.EDU\n<<< 250 recipient ok\n>>> DATA\n<<< 354 send message, end with '.'\n>>> (message goes here)\n>>> .\n<<< 250 message received\n>>> QUIT\n<<< 221 bye\n\n   Note that since the Ivory.EDU refused to accept mail for\n   Carol@Ivory.EDU, and the sender specified NOTIFY=FAILURE, the\n   sender-SMTP (in this case Pure-Heart.ORG) must generate a DSN.\n\n10.4 Relay to Bombs.AF.MIL\n\n   The SMTP at Pure-Heart.ORG relays the message to Bombs.AF.MIL, which\n   does not support the SMTP extension.  Because the sender specified\n   NOTIFY=NEVER for recipient Fred@Bombs.AF.MIL, the SMTP at Pure-\n   Heart.ORG chooses to send the message for that recipient in a\n   separate transaction with a reverse-path of <>.\n\n<<< 220-Bombs.AF.MIL reporting for duty.\n<<< 220 Electronic mail is to be used for official business only.\n>>> EHLO Pure-Heart.ORG\n<<< 502 command not implemented\n>>> RSET\n<<< 250 reset\n>>> HELO Pure-Heart.ORG\n<<< 250 Bombs.AF.MIL\n>>> MAIL FROM:<Alice@Pure-Heart.ORG>\n<<< 250 ok\n>>> RCPT TO:<Eric@Bombs.AF.MIL>\n<<< 250 ok\n>>> DATA\n<<< 354 send message\n>>> (message goes here)\n>>> .\n<<< 250 message accepted\n>>> MAIL FROM:<>\n<<< 250 ok\n\n\n\nMoore                       Standards Track                    [Page 25]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n>>> RCPT TO:<Fred@Bombs.AF.MIL>\n<<< 250 ok\n>>> DATA\n<<< 354 send message\n>>> (message goes here)\n>>> .\n<<< 250 message accepted\n>>> QUIT\n<<< 221 Bombs.AF.MIL closing connection\n\n10.5 Forward from George@Tax-ME.GOV to Sam@Boondoggle.GOV\n\n   The SMTP at Pure-Heart.ORG relays the message to Tax-ME.GOV.  (this\n   step is not shown).  MTA Tax-ME.GOV then forwards the message to\n   Sam@Boondoggle.GOV (shown below).  Both Tax-ME.GOV and Pure-Heart.ORG\n   support the SMTP DSN extension.  Note that RET, ENVID, and ORCPT all\n   retain their original values.\n\n<<< 220 BoonDoggle.GOV says hello\n>>> EHLO Pure-Heart.ORG\n<<< 250-mail.Big-Bucks.COM\n<<< 250 DSN\n>>> MAIL FROM:<Alice@Pure-Heart.ORG> RET=HDRS ENVID=QQ314159\n<<< 250 sender okay\n>>> RCPT TO:<Sam@Boondoggle.GOV> NOTIFY=SUCCESS \\\n    ORCPT=rfc822;George@Tax-ME.GOV\n<<< 250 recipient okay\n>>> DATA\n<<< 354 send message\n>>> (message goes here)\n>>> .\n<<< 250 message received\n>>> QUIT\n<<< 221 bcnu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 26]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n10.6 \"Delivered\" DSN for Bob@Big-Bucks.COM\n\n   MTA mail.Big-Bucks.COM successfully delivers the message to Bob@Big-\n   Bucks.COM.  Because the sender specified NOTIFY=SUCCESS, mail.Big-\n   Bucks.COM issues the following DSN, and sends it to Alice@Pure-\n   Heart.ORG.\n\nTo: Alice@Pure-Heart.ORG\nFrom: postmaster@mail.Big-Bucks.COM\nSubject: Delivery Notification (success) for Bob@Big-Bucks.COM\nContent-Type: multipart/report; report-type=delivery-status;\n    boundary=abcde\nMIME-Version: 1.0\n\n--abcde\nContent-type: text/plain; charset=us-ascii\n\nYour message (id QQ314159) was successfully delivered to\nBob@Big-Bucks.COM.\n\n--abcde\nContent-type: message/delivery-status\n\nReporting-MTA: dns; mail.Big-Bucks.COM\nOriginal-Envelope-ID: QQ314159\n\nOriginal-Recipient: rfc822;Bob@Big-Bucks.COM\nFinal-Recipient: rfc822;Bob@Big-Bucks.COM\nAction: delivered\nStatus: 2.0.0\n\n--abcde\nContent-type: message/rfc822\n\n(headers of returned message go here)\n\n--abcde--\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 27]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n10.7 Failed DSN for Carol@Ivory.EDU\n\n   Because delivery to Carol failed and the sender specified\n   NOTIFY=FAILURE for Carol@Ivory.EDU, MTA Pure-Heart.ORG (the SMTP\n   client to which the failure was reported via SMTP) issues the\n   following DSN.\n\nTo: Alice@Pure-Heart.ORG\nFrom: postmaster@Pure-Heart.ORG\nSubject: Delivery Notification (failure) for Carol@Ivory.EDU\nContent-Type: multipart/report; report-type=delivery-status;\n              boundary=bcdef\nMIME-Version: 1.0\n\n--bcdef\nContent-type: text/plain; charset=us-ascii\n\nYour message (id QQ314159) could not be delivered to\nCarol@Ivory.EDU.\n\nA transcript of the session follows:\n\n(while talking to Ivory.EDU)\n>>> RCPT TO:<Carol@Ivory.EDU> NOTIFY=FAILURE\n<<< 550 error - no such recipient\n\n--bcdef\nContent-type: message/delivery-status\n\nReporting-MTA: dns; Pure-Heart.ORG\nOriginal-Envelope-ID: QQ314159\n\nOriginal-Recipient: rfc822;Carol@Ivory.EDU\nFinal-Recipient: rfc822;Carol@Ivory.EDU\nSMTP-Remote-Recipient: Carol@Ivory.EDU\nDiagnostic-Code: smtp; 550 error - no such recipient\nAction: failed\nStatus: 5.0.0\n\n--bcdef\nContent-type: message/rfc822\n\n(headers of returned message go here)\n\n--bcdef--\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 28]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n10.8 Relayed DSN For Dana@Ivory.EDU\n\n   Although the mail gateway Ivory.EDU supports the DSN SMTP extension,\n   the LAN mail system attached to its other side does not generate\n   positive delivery confirmations.  So Ivory.EDU issues a \"relayed\"\n   DSN:\n\nTo: Alice@Pure-Heart.ORG\nFrom: postmaster@Ivory.EDU\nSubject: mail relayed for Dana@Ivory.EDU\nContent-Type: multipart/report; report-type=delivery-status;\n    boundary=cdefg\nMIME-Version: 1.0\n\n--cdefg\nContent-type: text/plain; charset=us-ascii\n\nYour message (addressed to Dana@Ivory.EDU) was successfully\nrelayed to:\n\nymail!Dana\n\nby the FooMail gateway at Ivory.EDU.\n\nUnfortunately, the remote mail system does not support\nconfirmation of actual delivery.  Unless delivery to ymail!Dana\nfails, this will be the only delivery status notification sent.\n\n--cdefg\nContent-type: message/delivery-status\n\nReporting-MTA: dns; Ivory.EDU\nOriginal-Envelope-ID: QQ314159\n\nOriginal-Recipient: rfc822;Dana@Ivory.EDU\nFinal-Recipient: rfc822;Dana@Ivory.EDU\nAction: relayed\nStatus: 2.0.0\n\n--cdefg\nContent-type: message/rfc822\n\n(headers of returned message go here)\n\n--cdefg--\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 29]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n10.9 Failure notification for Sam@Boondoggle.GOV\n\n   The message originally addressed to George@Tax-ME.GOV was forwarded\n   to Sam@Boondoggle.GOV, but the MTA for Boondoggle.GOV was unable to\n   deliver the message due to a lack of disk space in Sam's mailbox.\n   After trying for several days, Boondoggle.GOV returned the following\n   DSN:\n\nTo: Alice@BigHeart.ORG\nFrom: Postmaster@Boondoggle.GOV\nSubject: Delivery failure for Sam@Boondoggle.GOV\nContent-Type: multipart/report; report-type=delivery-status;\n              boundary=defgh\nMIME-Version: 1.0\n\n--defgh\nYour message, originally addressed to George@Tax-ME.GOV, and forwarded\nfrom there to Sam@Boondoggle.GOV could not be delivered, for the\nfollowing reason:\n\nwrite error to mailbox, disk quota exceeded\n\n--defgh\nContent-type: message/delivery-status\n\nReporting-MTA: Boondoggle.GOV\nOriginal-Envelope-ID: QQ314159\n\nOriginal-Recipient: rfc822;George@Tax-ME.GOV\nFinal-Recipient: rfc822;Sam@Boondoggle.GOV\nAction: failed\nStatus: 4.2.2 (disk quota exceeded)\n\n--defgh\nContent-type: message/rfc822\n\n(headers of returned message go here)\n\n--defgh--\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 30]\n\f\nRFC 1891           SMTP Delivery Status Notifications       January 1996\n\n\n11. References\n\n   [1] Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC 821,\n       USC/Information Sciences Institute, August 1982.\n\n   [2] Crocker, D., \"Standard for the Format of ARPA Internet Text\n       Messages\", STD 11, RFC 822, UDEL, August 1982.\n\n   [3] Westine, A., and J. Postel, \"Problems with the Maintenance of\n       Large Mailing Lists.\", RFC 1211, USC/Information Sciences\n       Institute, March 1991.\n\n   [4] Klensin, J., Freed, N., Rose, M., Stefferud, E., and D. Crocker,\n       \"SMTP Service Extensions\", RFC 1651, MCI, Innosoft, Dover Beach\n       Consulting, Inc., Network Management Associates, Inc., Silicon\n       Graphics, Inc., July 1994.\n\n   [5] Moore, K., and G. Vaudreuil, \"An Extensible Message Format for\n       Delivery Status Notifications\", RFC 1894, University of Tennessee,\n       Octel Network Services, January 1996.\n\n   [6] Crispin, M., \"Internet Message Access Protocol - Version 4\", RFC\n       1730, University of Washington, 20 December 1994.\n\n   [7] Myers, J., and M. Rose, \"Post Office Protocol - Version 3\", RFC\n       1725, Carnegie Mellon, Dover Beach Consulting, November 1994.\n\n   [8] Vaudreuil, G., \"The Multipart/Report Content Type for the\n       Reporting of Mail System Administrative Messages\", RFC 1892, Octel\n       Network Services, January 1996.\n\n   [9] Braden, R., Editor, \"Requirements for Internet Hosts - Application\n       and Support\", STD 3, RFC 1123, IETF, October 1989.\n\n   [10] Vaudreuil, G., \"Enhanced Mail System Status Codes\", RFC 1893,\n        Octel Network Services, January 1996.\n\n12. Author's Address\n\n   Keith Moore\n   University of Tennessee\n   107 Ayres Hall\n   Knoxville, TN 37996-1301\n   USA\n\n   EMail: moore@cs.utk.edu\n\n\n\n\n\nMoore                       Standards Track                    [Page 31]\n\f\n"
  },
  {
    "path": "rfc/rfc1928.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           M. Leech\nRequest for Comments: 1928                    Bell-Northern Research Ltd\nCategory: Standards Track                                       M. Ganis\n                                         International Business Machines\n                                                                  Y. Lee\n                                                  NEC Systems Laboratory\n                                                                R. Kuris\n                                                       Unify Corporation\n                                                               D. Koblas\n                                                  Independent Consultant\n                                                                L. Jones\n                                                 Hewlett-Packard Company\n                                                              March 1996\n\n\n                        SOCKS Protocol Version 5\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAcknowledgments\n\n   This memo describes a protocol that is an evolution of the previous\n   version of the protocol, version 4 [1]. This new protocol stems from\n   active discussions and prototype implementations.  The key\n   contributors are: Marcus Leech: Bell-Northern Research, David Koblas:\n   Independent Consultant, Ying-Da Lee: NEC Systems Laboratory, LaMont\n   Jones: Hewlett-Packard Company, Ron Kuris: Unify Corporation, Matt\n   Ganis: International Business Machines.\n\n1.  Introduction\n\n   The use of network firewalls, systems that effectively isolate an\n   organizations internal network structure from an exterior network,\n   such as the INTERNET is becoming increasingly popular.  These\n   firewall systems typically act as application-layer gateways between\n   networks, usually offering controlled TELNET, FTP, and SMTP access.\n   With the emergence of more sophisticated application layer protocols\n   designed to facilitate global information discovery, there exists a\n   need to provide a general framework for these protocols to\n   transparently and securely traverse a firewall.\n\n\n\n\n\nLeech, et al                Standards Track                     [Page 1]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n   There exists, also, a need for strong authentication of such\n   traversal in as fine-grained a manner as is practical. This\n   requirement stems from the realization that client-server\n   relationships emerge between the networks of various organizations,\n   and that such relationships need to be controlled and often strongly\n   authenticated.\n\n   The protocol described here is designed to provide a framework for\n   client-server applications in both the TCP and UDP domains to\n   conveniently and securely use the services of a network firewall.\n   The protocol is conceptually a \"shim-layer\" between the application\n   layer and the transport layer, and as such does not provide network-\n   layer gateway services, such as forwarding of ICMP messages.\n\n2.  Existing practice\n\n   There currently exists a protocol, SOCKS Version 4, that provides for\n   unsecured firewall traversal for TCP-based client-server\n   applications, including TELNET, FTP and the popular information-\n   discovery protocols such as HTTP, WAIS and GOPHER.\n\n   This new protocol extends the SOCKS Version 4 model to include UDP,\n   and extends the framework to include provisions for generalized\n   strong authentication schemes, and extends the addressing scheme to\n   encompass domain-name and V6 IP addresses.\n\n   The implementation of the SOCKS protocol typically involves the\n   recompilation or relinking of TCP-based client applications to use\n   the appropriate encapsulation routines in the SOCKS library.\n\nNote:\n\n   Unless otherwise noted, the decimal numbers appearing in packet-\n   format diagrams represent the length of the corresponding field, in\n   octets.  Where a given octet must take on a specific value, the\n   syntax X'hh' is used to denote the value of the single octet in that\n   field. When the word 'Variable' is used, it indicates that the\n   corresponding field has a variable length defined either by an\n   associated (one or two octet) length field, or by a data type field.\n\n3.  Procedure for TCP-based clients\n\n   When a TCP-based client wishes to establish a connection to an object\n   that is reachable only via a firewall (such determination is left up\n   to the implementation), it must open a TCP connection to the\n   appropriate SOCKS port on the SOCKS server system.  The SOCKS service\n   is conventionally located on TCP port 1080.  If the connection\n   request succeeds, the client enters a negotiation for the\n\n\n\nLeech, et al                Standards Track                     [Page 2]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n   authentication method to be used, authenticates with the chosen\n   method, then sends a relay request.  The SOCKS server evaluates the\n   request, and either establishes the appropriate connection or denies\n   it.\n\n   Unless otherwise noted, the decimal numbers appearing in packet-\n   format diagrams represent the length of the corresponding field, in\n   octets.  Where a given octet must take on a specific value, the\n   syntax X'hh' is used to denote the value of the single octet in that\n   field. When the word 'Variable' is used, it indicates that the\n   corresponding field has a variable length defined either by an\n   associated (one or two octet) length field, or by a data type field.\n\n   The client connects to the server, and sends a version\n   identifier/method selection message:\n\n                   +----+----------+----------+\n                   |VER | NMETHODS | METHODS  |\n                   +----+----------+----------+\n                   | 1  |    1     | 1 to 255 |\n                   +----+----------+----------+\n\n   The VER field is set to X'05' for this version of the protocol.  The\n   NMETHODS field contains the number of method identifier octets that\n   appear in the METHODS field.\n\n   The server selects from one of the methods given in METHODS, and\n   sends a METHOD selection message:\n\n                         +----+--------+\n                         |VER | METHOD |\n                         +----+--------+\n                         | 1  |   1    |\n                         +----+--------+\n\n   If the selected METHOD is X'FF', none of the methods listed by the\n   client are acceptable, and the client MUST close the connection.\n\n   The values currently defined for METHOD are:\n\n          o  X'00' NO AUTHENTICATION REQUIRED\n          o  X'01' GSSAPI\n          o  X'02' USERNAME/PASSWORD\n          o  X'03' to X'7F' IANA ASSIGNED\n          o  X'80' to X'FE' RESERVED FOR PRIVATE METHODS\n          o  X'FF' NO ACCEPTABLE METHODS\n\n   The client and server then enter a method-specific sub-negotiation.\n\n\n\nLeech, et al                Standards Track                     [Page 3]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n   Descriptions of the method-dependent sub-negotiations appear in\n   separate memos.\n\n   Developers of new METHOD support for this protocol should contact\n   IANA for a METHOD number.  The ASSIGNED NUMBERS document should be\n   referred to for a current list of METHOD numbers and their\n   corresponding protocols.\n\n   Compliant implementations MUST support GSSAPI and SHOULD support\n   USERNAME/PASSWORD authentication methods.\n\n4.  Requests\n\n   Once the method-dependent subnegotiation has completed, the client\n   sends the request details.  If the negotiated method includes\n   encapsulation for purposes of integrity checking and/or\n   confidentiality, these requests MUST be encapsulated in the method-\n   dependent encapsulation.\n\n   The SOCKS request is formed as follows:\n\n        +----+-----+-------+------+----------+----------+\n        |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n        +----+-----+-------+------+----------+----------+\n        | 1  |  1  | X'00' |  1   | Variable |    2     |\n        +----+-----+-------+------+----------+----------+\n\n     Where:\n\n          o  VER    protocol version: X'05'\n          o  CMD\n             o  CONNECT X'01'\n             o  BIND X'02'\n             o  UDP ASSOCIATE X'03'\n          o  RSV    RESERVED\n          o  ATYP   address type of following address\n             o  IP V4 address: X'01'\n             o  DOMAINNAME: X'03'\n             o  IP V6 address: X'04'\n          o  DST.ADDR       desired destination address\n          o  DST.PORT desired destination port in network octet\n             order\n\n   The SOCKS server will typically evaluate the request based on source\n   and destination addresses, and return one or more reply messages, as\n   appropriate for the request type.\n\n\n\n\n\nLeech, et al                Standards Track                     [Page 4]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n5.  Addressing\n\n   In an address field (DST.ADDR, BND.ADDR), the ATYP field specifies\n   the type of address contained within the field:\n\n          o  X'01'\n\n   the address is a version-4 IP address, with a length of 4 octets\n\n          o  X'03'\n\n   the address field contains a fully-qualified domain name.  The first\n   octet of the address field contains the number of octets of name that\n   follow, there is no terminating NUL octet.\n\n          o  X'04'\n\n   the address is a version-6 IP address, with a length of 16 octets.\n\n6.  Replies\n\n   The SOCKS request information is sent by the client as soon as it has\n   established a connection to the SOCKS server, and completed the\n   authentication negotiations.  The server evaluates the request, and\n   returns a reply formed as follows:\n\n        +----+-----+-------+------+----------+----------+\n        |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |\n        +----+-----+-------+------+----------+----------+\n        | 1  |  1  | X'00' |  1   | Variable |    2     |\n        +----+-----+-------+------+----------+----------+\n\n     Where:\n\n          o  VER    protocol version: X'05'\n          o  REP    Reply field:\n             o  X'00' succeeded\n             o  X'01' general SOCKS server failure\n             o  X'02' connection not allowed by ruleset\n             o  X'03' Network unreachable\n             o  X'04' Host unreachable\n             o  X'05' Connection refused\n             o  X'06' TTL expired\n             o  X'07' Command not supported\n             o  X'08' Address type not supported\n             o  X'09' to X'FF' unassigned\n          o  RSV    RESERVED\n          o  ATYP   address type of following address\n\n\n\nLeech, et al                Standards Track                     [Page 5]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n             o  IP V4 address: X'01'\n             o  DOMAINNAME: X'03'\n             o  IP V6 address: X'04'\n          o  BND.ADDR       server bound address\n          o  BND.PORT       server bound port in network octet order\n\n   Fields marked RESERVED (RSV) must be set to X'00'.\n\n   If the chosen method includes encapsulation for purposes of\n   authentication, integrity and/or confidentiality, the replies are\n   encapsulated in the method-dependent encapsulation.\n\nCONNECT\n\n   In the reply to a CONNECT, BND.PORT contains the port number that the\n   server assigned to connect to the target host, while BND.ADDR\n   contains the associated IP address.  The supplied BND.ADDR is often\n   different from the IP address that the client uses to reach the SOCKS\n   server, since such servers are often multi-homed.  It is expected\n   that the SOCKS server will use DST.ADDR and DST.PORT, and the\n   client-side source address and port in evaluating the CONNECT\n   request.\n\nBIND\n\n   The BIND request is used in protocols which require the client to\n   accept connections from the server.  FTP is a well-known example,\n   which uses the primary client-to-server connection for commands and\n   status reports, but may use a server-to-client connection for\n   transferring data on demand (e.g. LS, GET, PUT).\n\n   It is expected that the client side of an application protocol will\n   use the BIND request only to establish secondary connections after a\n   primary connection is established using CONNECT.  In is expected that\n   a SOCKS server will use DST.ADDR and DST.PORT in evaluating the BIND\n   request.\n\n   Two replies are sent from the SOCKS server to the client during a\n   BIND operation.  The first is sent after the server creates and binds\n   a new socket.  The BND.PORT field contains the port number that the\n   SOCKS server assigned to listen for an incoming connection.  The\n   BND.ADDR field contains the associated IP address.  The client will\n   typically use these pieces of information to notify (via the primary\n   or control connection) the application server of the rendezvous\n   address.  The second reply occurs only after the anticipated incoming\n   connection succeeds or fails.\n\n\n\n\n\nLeech, et al                Standards Track                     [Page 6]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n   In the second reply, the BND.PORT and BND.ADDR fields contain the\n   address and port number of the connecting host.\n\nUDP ASSOCIATE\n\n   The UDP ASSOCIATE request is used to establish an association within\n   the UDP relay process to handle UDP datagrams.  The DST.ADDR and\n   DST.PORT fields contain the address and port that the client expects\n   to use to send UDP datagrams on for the association.  The server MAY\n   use this information to limit access to the association.  If the\n   client is not in possesion of the information at the time of the UDP\n   ASSOCIATE, the client MUST use a port number and address of all\n   zeros.\n\n   A UDP association terminates when the TCP connection that the UDP\n   ASSOCIATE request arrived on terminates.\n\n   In the reply to a UDP ASSOCIATE request, the BND.PORT and BND.ADDR\n   fields indicate the port number/address where the client MUST send\n   UDP request messages to be relayed.\n\nReply Processing\n\n   When a reply (REP value other than X'00') indicates a failure, the\n   SOCKS server MUST terminate the TCP connection shortly after sending\n   the reply.  This must be no more than 10 seconds after detecting the\n   condition that caused a failure.\n\n   If the reply code (REP value of X'00') indicates a success, and the\n   request was either a BIND or a CONNECT, the client may now start\n   passing data.  If the selected authentication method supports\n   encapsulation for the purposes of integrity, authentication and/or\n   confidentiality, the data are encapsulated using the method-dependent\n   encapsulation.  Similarly, when data arrives at the SOCKS server for\n   the client, the server MUST encapsulate the data as appropriate for\n   the authentication method in use.\n\n7.  Procedure for UDP-based clients\n\n   A UDP-based client MUST send its datagrams to the UDP relay server at\n   the UDP port indicated by BND.PORT in the reply to the UDP ASSOCIATE\n   request.  If the selected authentication method provides\n   encapsulation for the purposes of authenticity, integrity, and/or\n   confidentiality, the datagram MUST be encapsulated using the\n   appropriate encapsulation.  Each UDP datagram carries a UDP request\n   header with it:\n\n\n\n\n\nLeech, et al                Standards Track                     [Page 7]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n      +----+------+------+----------+----------+----------+\n      |RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |\n      +----+------+------+----------+----------+----------+\n      | 2  |  1   |  1   | Variable |    2     | Variable |\n      +----+------+------+----------+----------+----------+\n\n     The fields in the UDP request header are:\n\n          o  RSV  Reserved X'0000'\n          o  FRAG    Current fragment number\n          o  ATYP    address type of following addresses:\n             o  IP V4 address: X'01'\n             o  DOMAINNAME: X'03'\n             o  IP V6 address: X'04'\n          o  DST.ADDR       desired destination address\n          o  DST.PORT       desired destination port\n          o  DATA     user data\n\n   When a UDP relay server decides to relay a UDP datagram, it does so\n   silently, without any notification to the requesting client.\n   Similarly, it will drop datagrams it cannot or will not relay.  When\n   a UDP relay server receives a reply datagram from a remote host, it\n   MUST encapsulate that datagram using the above UDP request header,\n   and any authentication-method-dependent encapsulation.\n\n   The UDP relay server MUST acquire from the SOCKS server the expected\n   IP address of the client that will send datagrams to the BND.PORT\n   given in the reply to UDP ASSOCIATE.  It MUST drop any datagrams\n   arriving from any source IP address other than the one recorded for\n   the particular association.\n\n   The FRAG field indicates whether or not this datagram is one of a\n   number of fragments.  If implemented, the high-order bit indicates\n   end-of-fragment sequence, while a value of X'00' indicates that this\n   datagram is standalone.  Values between 1 and 127 indicate the\n   fragment position within a fragment sequence.  Each receiver will\n   have a REASSEMBLY QUEUE and a REASSEMBLY TIMER associated with these\n   fragments.  The reassembly queue must be reinitialized and the\n   associated fragments abandoned whenever the REASSEMBLY TIMER expires,\n   or a new datagram arrives carrying a FRAG field whose value is less\n   than the highest FRAG value processed for this fragment sequence.\n   The reassembly timer MUST be no less than 5 seconds.  It is\n   recommended that fragmentation be avoided by applications wherever\n   possible.\n\n   Implementation of fragmentation is optional; an implementation that\n   does not support fragmentation MUST drop any datagram whose FRAG\n   field is other than X'00'.\n\n\n\nLeech, et al                Standards Track                     [Page 8]\n\f\nRFC 1928                SOCKS Protocol Version 5              March 1996\n\n\n   The programming interface for a SOCKS-aware UDP MUST report an\n   available buffer space for UDP datagrams that is smaller than the\n   actual space provided by the operating system:\n\n          o  if ATYP is X'01' - 10+method_dependent octets smaller\n          o  if ATYP is X'03' - 262+method_dependent octets smaller\n          o  if ATYP is X'04' - 20+method_dependent octets smaller\n\n8.  Security Considerations\n\n   This document describes a protocol for the application-layer\n   traversal of IP network firewalls.  The security of such traversal is\n   highly dependent on the particular authentication and encapsulation\n   methods provided in a particular implementation, and selected during\n   negotiation between SOCKS client and SOCKS server.\n\n   Careful consideration should be given by the administrator to the\n   selection of authentication methods.\n\n9.  References\n\n   [1] Koblas, D., \"SOCKS\", Proceedings: 1992 Usenix Security Symposium.\n\nAuthor's Address\n\n       Marcus Leech\n       Bell-Northern Research Ltd\n       P.O. Box 3511, Stn. C,\n       Ottawa, ON\n       CANADA K1Y 4H7\n\n       Phone: (613) 763-9145\n       EMail: mleech@bnr.ca\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeech, et al                Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc1929.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           M. Leech\nRequest for Comments: 1929                    Bell-Northern Research Ltd\nCategory: Standards Track                                     March 1996\n\n\n             Username/Password Authentication for SOCKS V5\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.  Introduction\n\n   The protocol specification for SOCKS Version 5 specifies a\n   generalized framework for the use of arbitrary authentication\n   protocols in the initial socks connection setup. This document\n   describes one of those protocols, as it fits into the SOCKS Version 5\n   authentication \"subnegotiation\".\n\nNote:\n\n   Unless otherwise noted, the decimal numbers appearing in packet-\n   format diagrams represent the length of the corresponding field, in\n   octets.  Where a given octet must take on a specific value, the\n   syntax X'hh' is used to denote the value of the single octet in that\n   field. When the word 'Variable' is used, it indicates that the\n   corresponding field has a variable length defined either by an\n   associated (one or two octet) length field, or by a data type field.\n\n2.  Initial negotiation\n\n   Once the SOCKS V5 server has started, and the client has selected the\n   Username/Password Authentication protocol, the Username/Password\n   subnegotiation begins.  This begins with the client producing a\n   Username/Password request:\n\n           +----+------+----------+------+----------+\n           |VER | ULEN |  UNAME   | PLEN |  PASSWD  |\n           +----+------+----------+------+----------+\n           | 1  |  1   | 1 to 255 |  1   | 1 to 255 |\n           +----+------+----------+------+----------+\n\n\n\n\n\n\nLeech                       Standards Track                     [Page 1]\n\f\nRFC 1929          Username Authentication for SOCKS V5        March 1996\n\n\n   The VER field contains the current version of the subnegotiation,\n   which is X'01'. The ULEN field contains the length of the UNAME field\n   that follows. The UNAME field contains the username as known to the\n   source operating system. The PLEN field contains the length of the\n   PASSWD field that follows. The PASSWD field contains the password\n   association with the given UNAME.\n\n   The server verifies the supplied UNAME and PASSWD, and sends the\n   following response:\n\n                        +----+--------+\n                        |VER | STATUS |\n                        +----+--------+\n                        | 1  |   1    |\n                        +----+--------+\n\n   A STATUS field of X'00' indicates success. If the server returns a\n   `failure' (STATUS value other than X'00') status, it MUST close the\n   connection.\n\n3.  Security Considerations\n\n   This document describes a subnegotiation that provides authentication\n   services to the SOCKS protocol. Since the request carries the\n   password in cleartext, this subnegotiation is not recommended for\n   environments where \"sniffing\" is possible and practical.\n\n4.  Author's Address\n\n   Marcus Leech\n   Bell-Northern Research Ltd\n   P.O. Box 3511, Station C\n   Ottawa, ON\n   CANADA K1Y 4H7\n\n   Phone: +1 613 763 9145\n   EMail: mleech@bnr.ca\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeech                       Standards Track                     [Page 2]\n\f\n"
  },
  {
    "path": "rfc/rfc1939.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 1939                               Carnegie Mellon\nSTD: 53                                                          M. Rose\nObsoletes: 1725                             Dover Beach Consulting, Inc.\nCategory: Standards Track                                       May 1996\n\n\n                    Post Office Protocol - Version 3\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nTable of Contents\n\n   1. Introduction ................................................    2\n   2. A Short Digression ..........................................    2\n   3. Basic Operation .............................................    3\n   4. The AUTHORIZATION State .....................................    4\n      QUIT Command ................................................    5\n   5. The TRANSACTION State .......................................    5\n      STAT Command ................................................    6\n      LIST Command ................................................    6\n      RETR Command ................................................    8\n      DELE Command ................................................    8\n      NOOP Command ................................................    9\n      RSET Command ................................................    9\n   6. The UPDATE State ............................................   10\n      QUIT Command ................................................   10\n   7. Optional POP3 Commands ......................................   11\n      TOP Command .................................................   11\n      UIDL Command ................................................   12\n      USER Command ................................................   13\n      PASS Command ................................................   14\n      APOP Command ................................................   15\n   8. Scaling and Operational Considerations ......................   16\n   9. POP3 Command Summary ........................................   18\n   10. Example POP3 Session .......................................   19\n   11. Message Format .............................................   19\n   12. References .................................................   20\n   13. Security Considerations ....................................   20\n   14. Acknowledgements ...........................................   20\n   15. Authors' Addresses .........................................   21\n   Appendix A. Differences from RFC 1725 ..........................   22\n\n\n\nMyers & Rose                Standards Track                     [Page 1]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n   Appendix B. Command Index ......................................   23\n\n1. Introduction\n\n   On certain types of smaller nodes in the Internet it is often\n   impractical to maintain a message transport system (MTS).  For\n   example, a workstation may not have sufficient resources (cycles,\n   disk space) in order to permit a SMTP server [RFC821] and associated\n   local mail delivery system to be kept resident and continuously\n   running.  Similarly, it may be expensive (or impossible) to keep a\n   personal computer interconnected to an IP-style network for long\n   amounts of time (the node is lacking the resource known as\n   \"connectivity\").\n\n   Despite this, it is often very useful to be able to manage mail on\n   these smaller nodes, and they often support a user agent (UA) to aid\n   the tasks of mail handling.  To solve this problem, a node which can\n   support an MTS entity offers a maildrop service to these less endowed\n   nodes.  The Post Office Protocol - Version 3 (POP3) is intended to\n   permit a workstation to dynamically access a maildrop on a server\n   host in a useful fashion.  Usually, this means that the POP3 protocol\n   is used to allow a workstation to retrieve mail that the server is\n   holding for it.\n\n   POP3 is not intended to provide extensive manipulation operations of\n   mail on the server; normally, mail is downloaded and then deleted.  A\n   more advanced (and complex) protocol, IMAP4, is discussed in\n   [RFC1730].\n\n   For the remainder of this memo, the term \"client host\" refers to a\n   host making use of the POP3 service, while the term \"server host\"\n   refers to a host which offers the POP3 service.\n\n2. A Short Digression\n\n   This memo does not specify how a client host enters mail into the\n   transport system, although a method consistent with the philosophy of\n   this memo is presented here:\n\n      When the user agent on a client host wishes to enter a message\n      into the transport system, it establishes an SMTP connection to\n      its relay host and sends all mail to it.  This relay host could\n      be, but need not be, the POP3 server host for the client host.  Of\n      course, the relay host must accept mail for delivery to arbitrary\n      recipient addresses, that functionality is not required of all\n      SMTP servers.\n\n\n\n\n\nMyers & Rose                Standards Track                     [Page 2]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n3. Basic Operation\n\n   Initially, the server host starts the POP3 service by listening on\n   TCP port 110.  When a client host wishes to make use of the service,\n   it establishes a TCP connection with the server host.  When the\n   connection is established, the POP3 server sends a greeting.  The\n   client and POP3 server then exchange commands and responses\n   (respectively) until the connection is closed or aborted.\n\n   Commands in the POP3 consist of a case-insensitive keyword, possibly\n   followed by one or more arguments.  All commands are terminated by a\n   CRLF pair.  Keywords and arguments consist of printable ASCII\n   characters.  Keywords and arguments are each separated by a single\n   SPACE character.  Keywords are three or four characters long. Each\n   argument may be up to 40 characters long.\n\n   Responses in the POP3 consist of a status indicator and a keyword\n   possibly followed by additional information.  All responses are\n   terminated by a CRLF pair.  Responses may be up to 512 characters\n   long, including the terminating CRLF.  There are currently two status\n   indicators: positive (\"+OK\") and negative (\"-ERR\").  Servers MUST\n   send the \"+OK\" and \"-ERR\" in upper case.\n\n   Responses to certain commands are multi-line.  In these cases, which\n   are clearly indicated below, after sending the first line of the\n   response and a CRLF, any additional lines are sent, each terminated\n   by a CRLF pair.  When all lines of the response have been sent, a\n   final line is sent, consisting of a termination octet (decimal code\n   046, \".\") and a CRLF pair.  If any line of the multi-line response\n   begins with the termination octet, the line is \"byte-stuffed\" by\n   pre-pending the termination octet to that line of the response.\n   Hence a multi-line response is terminated with the five octets\n   \"CRLF.CRLF\".  When examining a multi-line response, the client checks\n   to see if the line begins with the termination octet.  If so and if\n   octets other than CRLF follow, the first octet of the line (the\n   termination octet) is stripped away.  If so and if CRLF immediately\n   follows the termination character, then the response from the POP\n   server is ended and the line containing \".CRLF\" is not considered\n   part of the multi-line response.\n\n   A POP3 session progresses through a number of states during its\n   lifetime.  Once the TCP connection has been opened and the POP3\n   server has sent the greeting, the session enters the AUTHORIZATION\n   state.  In this state, the client must identify itself to the POP3\n   server.  Once the client has successfully done this, the server\n   acquires resources associated with the client's maildrop, and the\n   session enters the TRANSACTION state.  In this state, the client\n   requests actions on the part of the POP3 server.  When the client has\n\n\n\nMyers & Rose                Standards Track                     [Page 3]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n   issued the QUIT command, the session enters the UPDATE state.  In\n   this state, the POP3 server releases any resources acquired during\n   the TRANSACTION state and says goodbye.  The TCP connection is then\n   closed.\n\n   A server MUST respond to an unrecognized, unimplemented, or\n   syntactically invalid command by responding with a negative status\n   indicator.  A server MUST respond to a command issued when the\n   session is in an incorrect state by responding with a negative status\n   indicator.  There is no general method for a client to distinguish\n   between a server which does not implement an optional command and a\n   server which is unwilling or unable to process the command.\n\n   A POP3 server MAY have an inactivity autologout timer.  Such a timer\n   MUST be of at least 10 minutes' duration.  The receipt of any command\n   from the client during that interval should suffice to reset the\n   autologout timer.  When the timer expires, the session does NOT enter\n   the UPDATE state--the server should close the TCP connection without\n   removing any messages or sending any response to the client.\n\n4. The AUTHORIZATION State\n\n   Once the TCP connection has been opened by a POP3 client, the POP3\n   server issues a one line greeting.  This can be any positive\n   response.  An example might be:\n\n      S:  +OK POP3 server ready\n\n   The POP3 session is now in the AUTHORIZATION state.  The client must\n   now identify and authenticate itself to the POP3 server.  Two\n   possible mechanisms for doing this are described in this document,\n   the USER and PASS command combination and the APOP command.  Both\n   mechanisms are described later in this document.  Additional\n   authentication mechanisms are described in [RFC1734].  While there is\n   no single authentication mechanism that is required of all POP3\n   servers, a POP3 server must of course support at least one\n   authentication mechanism.\n\n   Once the POP3 server has determined through the use of any\n   authentication command that the client should be given access to the\n   appropriate maildrop, the POP3 server then acquires an exclusive-\n   access lock on the maildrop, as necessary to prevent messages from\n   being modified or removed before the session enters the UPDATE state.\n   If the lock is successfully acquired, the POP3 server responds with a\n   positive status indicator.  The POP3 session now enters the\n   TRANSACTION state, with no messages marked as deleted.  If the\n   maildrop cannot be opened for some reason (for example, a lock can\n   not be acquired, the client is denied access to the appropriate\n\n\n\nMyers & Rose                Standards Track                     [Page 4]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n   maildrop, or the maildrop cannot be parsed), the POP3 server responds\n   with a negative status indicator.  (If a lock was acquired but the\n   POP3 server intends to respond with a negative status indicator, the\n   POP3 server must release the lock prior to rejecting the command.)\n   After returning a negative status indicator, the server may close the\n   connection.  If the server does not close the connection, the client\n   may either issue a new authentication command and start again, or the\n   client may issue the QUIT command.\n\n   After the POP3 server has opened the maildrop, it assigns a message-\n   number to each message, and notes the size of each message in octets.\n   The first message in the maildrop is assigned a message-number of\n   \"1\", the second is assigned \"2\", and so on, so that the nth message\n   in a maildrop is assigned a message-number of \"n\".  In POP3 commands\n   and responses, all message-numbers and message sizes are expressed in\n   base-10 (i.e., decimal).\n\n   Here is the summary for the QUIT command when used in the\n   AUTHORIZATION state:\n\n      QUIT\n\n         Arguments: none\n\n         Restrictions: none\n\n         Possible Responses:\n             +OK\n\n         Examples:\n             C: QUIT\n             S: +OK dewey POP3 server signing off\n\n5. The TRANSACTION State\n\n   Once the client has successfully identified itself to the POP3 server\n   and the POP3 server has locked and opened the appropriate maildrop,\n   the POP3 session is now in the TRANSACTION state.  The client may now\n   issue any of the following POP3 commands repeatedly.  After each\n   command, the POP3 server issues a response.  Eventually, the client\n   issues the QUIT command and the POP3 session enters the UPDATE state.\n\n\n\n\n\n\n\n\n\n\nMyers & Rose                Standards Track                     [Page 5]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n   Here are the POP3 commands valid in the TRANSACTION state:\n\n      STAT\n\n         Arguments: none\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n         Discussion:\n             The POP3 server issues a positive response with a line\n             containing information for the maildrop.  This line is\n             called a \"drop listing\" for that maildrop.\n\n             In order to simplify parsing, all POP3 servers are\n             required to use a certain format for drop listings.  The\n             positive response consists of \"+OK\" followed by a single\n             space, the number of messages in the maildrop, a single\n             space, and the size of the maildrop in octets.  This memo\n             makes no requirement on what follows the maildrop size.\n             Minimal implementations should just end that line of the\n             response with a CRLF pair.  More advanced implementations\n             may include other information.\n\n                NOTE: This memo STRONGLY discourages implementations\n                from supplying additional information in the drop\n                listing.  Other, optional, facilities are discussed\n                later on which permit the client to parse the messages\n                in the maildrop.\n\n             Note that messages marked as deleted are not counted in\n             either total.\n\n         Possible Responses:\n             +OK nn mm\n\n         Examples:\n             C: STAT\n             S: +OK 2 320\n\n\n      LIST [msg]\n\n         Arguments:\n             a message-number (optional), which, if present, may NOT\n             refer to a message marked as deleted\n\n\n\n\n\nMyers & Rose                Standards Track                     [Page 6]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n         Discussion:\n             If an argument was given and the POP3 server issues a\n             positive response with a line containing information for\n             that message.  This line is called a \"scan listing\" for\n             that message.\n\n             If no argument was given and the POP3 server issues a\n             positive response, then the response given is multi-line.\n             After the initial +OK, for each message in the maildrop,\n             the POP3 server responds with a line containing\n             information for that message.  This line is also called a\n             \"scan listing\" for that message.  If there are no\n             messages in the maildrop, then the POP3 server responds\n             with no scan listings--it issues a positive response\n             followed by a line containing a termination octet and a\n             CRLF pair.\n\n             In order to simplify parsing, all POP3 servers are\n             required to use a certain format for scan listings.  A\n             scan listing consists of the message-number of the\n             message, followed by a single space and the exact size of\n             the message in octets.  Methods for calculating the exact\n             size of the message are described in the \"Message Format\"\n             section below.  This memo makes no requirement on what\n             follows the message size in the scan listing.  Minimal\n             implementations should just end that line of the response\n             with a CRLF pair.  More advanced implementations may\n             include other information, as parsed from the message.\n\n                NOTE: This memo STRONGLY discourages implementations\n                from supplying additional information in the scan\n                listing.  Other, optional, facilities are discussed\n                later on which permit the client to parse the messages\n                in the maildrop.\n\n             Note that messages marked as deleted are not listed.\n\n         Possible Responses:\n             +OK scan listing follows\n             -ERR no such message\n\n         Examples:\n             C: LIST\n             S: +OK 2 messages (320 octets)\n             S: 1 120\n\n\n\nMyers & Rose                Standards Track                     [Page 7]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n             S: 2 200\n             S: .\n               ...\n             C: LIST 2\n             S: +OK 2 200\n               ...\n             C: LIST 3\n             S: -ERR no such message, only 2 messages in maildrop\n\n\n      RETR msg\n\n         Arguments:\n             a message-number (required) which may NOT refer to a\n             message marked as deleted\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n         Discussion:\n             If the POP3 server issues a positive response, then the\n             response given is multi-line.  After the initial +OK, the\n             POP3 server sends the message corresponding to the given\n             message-number, being careful to byte-stuff the termination\n             character (as with all multi-line responses).\n\n         Possible Responses:\n             +OK message follows\n             -ERR no such message\n\n         Examples:\n             C: RETR 1\n             S: +OK 120 octets\n             S: <the POP3 server sends the entire message here>\n             S: .\n\n\n      DELE msg\n\n         Arguments:\n             a message-number (required) which may NOT refer to a\n             message marked as deleted\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n\n\n\n\n\nMyers & Rose                Standards Track                     [Page 8]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n         Discussion:\n             The POP3 server marks the message as deleted.  Any future\n             reference to the message-number associated with the message\n             in a POP3 command generates an error.  The POP3 server does\n             not actually delete the message until the POP3 session\n             enters the UPDATE state.\n\n         Possible Responses:\n             +OK message deleted\n             -ERR no such message\n\n         Examples:\n             C: DELE 1\n             S: +OK message 1 deleted\n                ...\n             C: DELE 2\n             S: -ERR message 2 already deleted\n\n\n      NOOP\n\n         Arguments: none\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n         Discussion:\n             The POP3 server does nothing, it merely replies with a\n             positive response.\n\n         Possible Responses:\n             +OK\n\n         Examples:\n             C: NOOP\n             S: +OK\n\n\n      RSET\n\n         Arguments: none\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n         Discussion:\n             If any messages have been marked as deleted by the POP3\n             server, they are unmarked.  The POP3 server then replies\n\n\n\nMyers & Rose                Standards Track                     [Page 9]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n             with a positive response.\n\n         Possible Responses:\n             +OK\n\n         Examples:\n             C: RSET\n             S: +OK maildrop has 2 messages (320 octets)\n\n6. The UPDATE State\n\n   When the client issues the QUIT command from the TRANSACTION state,\n   the POP3 session enters the UPDATE state.  (Note that if the client\n   issues the QUIT command from the AUTHORIZATION state, the POP3\n   session terminates but does NOT enter the UPDATE state.)\n\n   If a session terminates for some reason other than a client-issued\n   QUIT command, the POP3 session does NOT enter the UPDATE state and\n   MUST not remove any messages from the maildrop.\n\n      QUIT\n\n         Arguments: none\n\n         Restrictions: none\n\n         Discussion:\n             The POP3 server removes all messages marked as deleted\n             from the maildrop and replies as to the status of this\n             operation.  If there is an error, such as a resource\n             shortage, encountered while removing messages, the\n             maildrop may result in having some or none of the messages\n             marked as deleted be removed.  In no case may the server\n             remove any messages not marked as deleted.\n\n             Whether the removal was successful or not, the server\n             then releases any exclusive-access lock on the maildrop\n             and closes the TCP connection.\n\n         Possible Responses:\n             +OK\n             -ERR some deleted messages not removed\n\n         Examples:\n             C: QUIT\n             S: +OK dewey POP3 server signing off (maildrop empty)\n                ...\n             C: QUIT\n\n\n\nMyers & Rose                Standards Track                    [Page 10]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n             S: +OK dewey POP3 server signing off (2 messages left)\n                ...\n\n7. Optional POP3 Commands\n\n   The POP3 commands discussed above must be supported by all minimal\n   implementations of POP3 servers.\n\n   The optional POP3 commands described below permit a POP3 client\n   greater freedom in message handling, while preserving a simple POP3\n   server implementation.\n\n      NOTE: This memo STRONGLY encourages implementations to support\n      these commands in lieu of developing augmented drop and scan\n      listings.  In short, the philosophy of this memo is to put\n      intelligence in the part of the POP3 client and not the POP3\n      server.\n\n      TOP msg n\n\n         Arguments:\n             a message-number (required) which may NOT refer to to a\n             message marked as deleted, and a non-negative number\n             of lines (required)\n\n         Restrictions:\n             may only be given in the TRANSACTION state\n\n         Discussion:\n             If the POP3 server issues a positive response, then the\n             response given is multi-line.  After the initial +OK, the\n             POP3 server sends the headers of the message, the blank\n             line separating the headers from the body, and then the\n             number of lines of the indicated message's body, being\n             careful to byte-stuff the termination character (as with\n             all multi-line responses).\n\n             Note that if the number of lines requested by the POP3\n             client is greater than than the number of lines in the\n             body, then the POP3 server sends the entire message.\n\n         Possible Responses:\n             +OK top of message follows\n             -ERR no such message\n\n         Examples:\n             C: TOP 1 10\n             S: +OK\n\n\n\nMyers & Rose                Standards Track                    [Page 11]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n             S: <the POP3 server sends the headers of the\n                message, a blank line, and the first 10 lines\n                of the body of the message>\n             S: .\n                ...\n             C: TOP 100 3\n             S: -ERR no such message\n\n\n      UIDL [msg]\n\n      Arguments:\n          a message-number (optional), which, if present, may NOT\n          refer to a message marked as deleted\n\n      Restrictions:\n          may only be given in the TRANSACTION state.\n\n      Discussion:\n          If an argument was given and the POP3 server issues a positive\n          response with a line containing information for that message.\n          This line is called a \"unique-id listing\" for that message.\n\n          If no argument was given and the POP3 server issues a positive\n          response, then the response given is multi-line.  After the\n          initial +OK, for each message in the maildrop, the POP3 server\n          responds with a line containing information for that message.\n          This line is called a \"unique-id listing\" for that message.\n\n          In order to simplify parsing, all POP3 servers are required to\n          use a certain format for unique-id listings.  A unique-id\n          listing consists of the message-number of the message,\n          followed by a single space and the unique-id of the message.\n          No information follows the unique-id in the unique-id listing.\n\n          The unique-id of a message is an arbitrary server-determined\n          string, consisting of one to 70 characters in the range 0x21\n          to 0x7E, which uniquely identifies a message within a\n          maildrop and which persists across sessions.  This\n          persistence is required even if a session ends without\n          entering the UPDATE state.  The server should never reuse an\n          unique-id in a given maildrop, for as long as the entity\n          using the unique-id exists.\n\n          Note that messages marked as deleted are not listed.\n\n          While it is generally preferable for server implementations\n          to store arbitrarily assigned unique-ids in the maildrop,\n\n\n\nMyers & Rose                Standards Track                    [Page 12]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n          this specification is intended to permit unique-ids to be\n          calculated as a hash of the message.  Clients should be able\n          to handle a situation where two identical copies of a\n          message in a maildrop have the same unique-id.\n\n      Possible Responses:\n          +OK unique-id listing follows\n          -ERR no such message\n\n      Examples:\n          C: UIDL\n          S: +OK\n          S: 1 whqtswO00WBw418f9t5JxYwZ\n          S: 2 QhdPYR:00WBw1Ph7x7\n          S: .\n             ...\n          C: UIDL 2\n          S: +OK 2 QhdPYR:00WBw1Ph7x7\n             ...\n          C: UIDL 3\n          S: -ERR no such message, only 2 messages in maildrop\n\n\n      USER name\n\n         Arguments:\n             a string identifying a mailbox (required), which is of\n             significance ONLY to the server\n\n         Restrictions:\n             may only be given in the AUTHORIZATION state after the POP3\n             greeting or after an unsuccessful USER or PASS command\n\n         Discussion:\n             To authenticate using the USER and PASS command\n             combination, the client must first issue the USER\n             command.  If the POP3 server responds with a positive\n             status indicator (\"+OK\"), then the client may issue\n             either the PASS command to complete the authentication,\n             or the QUIT command to terminate the POP3 session.  If\n             the POP3 server responds with a negative status indicator\n             (\"-ERR\") to the USER command, then the client may either\n             issue a new authentication command or may issue the QUIT\n             command.\n\n             The server may return a positive response even though no\n             such mailbox exists.  The server may return a negative\n             response if mailbox exists, but does not permit plaintext\n\n\n\nMyers & Rose                Standards Track                    [Page 13]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n             password authentication.\n\n         Possible Responses:\n             +OK name is a valid mailbox\n             -ERR never heard of mailbox name\n\n         Examples:\n             C: USER frated\n             S: -ERR sorry, no mailbox for frated here\n                ...\n             C: USER mrose\n             S: +OK mrose is a real hoopy frood\n\n\n      PASS string\n\n         Arguments:\n             a server/mailbox-specific password (required)\n\n         Restrictions:\n             may only be given in the AUTHORIZATION state immediately\n             after a successful USER command\n\n         Discussion:\n             When the client issues the PASS command, the POP3 server\n             uses the argument pair from the USER and PASS commands to\n             determine if the client should be given access to the\n             appropriate maildrop.\n\n             Since the PASS command has exactly one argument, a POP3\n             server may treat spaces in the argument as part of the\n             password, instead of as argument separators.\n\n         Possible Responses:\n             +OK maildrop locked and ready\n             -ERR invalid password\n             -ERR unable to lock maildrop\n\n         Examples:\n             C: USER mrose\n             S: +OK mrose is a real hoopy frood\n             C: PASS secret\n             S: -ERR maildrop already locked\n               ...\n             C: USER mrose\n             S: +OK mrose is a real hoopy frood\n             C: PASS secret\n             S: +OK mrose's maildrop has 2 messages (320 octets)\n\n\n\nMyers & Rose                Standards Track                    [Page 14]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n      APOP name digest\n\n         Arguments:\n             a string identifying a mailbox and a MD5 digest string\n             (both required)\n\n         Restrictions:\n             may only be given in the AUTHORIZATION state after the POP3\n             greeting or after an unsuccessful USER or PASS command\n\n         Discussion:\n             Normally, each POP3 session starts with a USER/PASS\n             exchange.  This results in a server/user-id specific\n             password being sent in the clear on the network.  For\n             intermittent use of POP3, this may not introduce a sizable\n             risk.  However, many POP3 client implementations connect to\n             the POP3 server on a regular basis -- to check for new\n             mail.  Further the interval of session initiation may be on\n             the order of five minutes.  Hence, the risk of password\n             capture is greatly enhanced.\n\n             An alternate method of authentication is required which\n             provides for both origin authentication and replay\n             protection, but which does not involve sending a password\n             in the clear over the network.  The APOP command provides\n             this functionality.\n\n             A POP3 server which implements the APOP command will\n             include a timestamp in its banner greeting.  The syntax of\n             the timestamp corresponds to the `msg-id' in [RFC822], and\n             MUST be different each time the POP3 server issues a banner\n             greeting.  For example, on a UNIX implementation in which a\n             separate UNIX process is used for each instance of a POP3\n             server, the syntax of the timestamp might be:\n\n                <process-ID.clock@hostname>\n\n             where `process-ID' is the decimal value of the process's\n             PID, clock is the decimal value of the system clock, and\n             hostname is the fully-qualified domain-name corresponding\n             to the host where the POP3 server is running.\n\n             The POP3 client makes note of this timestamp, and then\n             issues the APOP command.  The `name' parameter has\n             identical semantics to the `name' parameter of the USER\n             command. The `digest' parameter is calculated by applying\n             the MD5 algorithm [RFC1321] to a string consisting of the\n             timestamp (including angle-brackets) followed by a shared\n\n\n\nMyers & Rose                Standards Track                    [Page 15]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n             secret.  This shared secret is a string known only to the\n             POP3 client and server.  Great care should be taken to\n             prevent unauthorized disclosure of the secret, as knowledge\n             of the secret will allow any entity to successfully\n             masquerade as the named user.  The `digest' parameter\n             itself is a 16-octet value which is sent in hexadecimal\n             format, using lower-case ASCII characters.\n\n             When the POP3 server receives the APOP command, it verifies\n             the digest provided.  If the digest is correct, the POP3\n             server issues a positive response, and the POP3 session\n             enters the TRANSACTION state.  Otherwise, a negative\n             response is issued and the POP3 session remains in the\n             AUTHORIZATION state.\n\n             Note that as the length of the shared secret increases, so\n             does the difficulty of deriving it.  As such, shared\n             secrets should be long strings (considerably longer than\n             the 8-character example shown below).\n\n         Possible Responses:\n             +OK maildrop locked and ready\n             -ERR permission denied\n\n         Examples:\n             S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>\n             C: APOP mrose c4c9334bac560ecc979e58001b3e22fb\n             S: +OK maildrop has 1 message (369 octets)\n\n             In this example, the shared  secret  is  the  string  `tan-\n             staaf'.  Hence, the MD5 algorithm is applied to the string\n\n                <1896.697170952@dbc.mtview.ca.us>tanstaaf\n\n             which produces a digest value of\n\n                c4c9334bac560ecc979e58001b3e22fb\n\n8. Scaling and Operational Considerations\n\n   Since some of the optional features described above were added to the\n   POP3 protocol, experience has accumulated in using them in large-\n   scale commercial post office operations where most of the users are\n   unrelated to each other.  In these situations and others, users and\n   vendors of POP3 clients have discovered that the combination of using\n   the UIDL command and not issuing the DELE command can provide a weak\n   version of the \"maildrop as semi-permanent repository\" functionality\n   normally associated with IMAP.  Of course the other capabilities of\n\n\n\nMyers & Rose                Standards Track                    [Page 16]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n   IMAP, such as polling an existing connection for newly arrived\n   messages and supporting multiple folders on the server, are not\n   present in POP3.\n\n   When these facilities are used in this way by casual users, there has\n   been a tendency for already-read messages to accumulate on the server\n   without bound.  This is clearly an undesirable behavior pattern from\n   the standpoint of the server operator.  This situation is aggravated\n   by the fact that the limited capabilities of the POP3 do not permit\n   efficient handling of maildrops which have hundreds or thousands of\n   messages.\n\n   Consequently, it is recommended that operators of large-scale multi-\n   user servers, especially ones in which the user's only access to the\n   maildrop is via POP3, consider such options as:\n\n   *  Imposing a per-user maildrop storage quota or the like.\n\n      A disadvantage to this option is that accumulation of messages may\n      result in the user's inability to receive new ones into the\n      maildrop.  Sites which choose this option should be sure to inform\n      users of impending or current exhaustion of quota, perhaps by\n      inserting an appropriate message into the user's maildrop.\n\n   *  Enforce a site policy regarding mail retention on the server.\n\n      Sites are free to establish local policy regarding the storage and\n      retention of messages on the server, both read and unread.  For\n      example, a site might delete unread messages from the server after\n      60 days and delete read messages after 7 days.  Such message\n      deletions are outside the scope of the POP3 protocol and are not\n      considered a protocol violation.\n\n      Server operators enforcing message deletion policies should take\n      care to make all users aware of the policies in force.\n\n      Clients must not assume that a site policy will automate message\n      deletions, and should continue to explicitly delete messages using\n      the DELE command when appropriate.\n\n      It should be noted that enforcing site message deletion policies\n      may be confusing to the user community, since their POP3 client\n      may contain configuration options to leave mail on the server\n      which will not in fact be supported by the server.\n\n      One special case of a site policy is that messages may only be\n      downloaded once from the server, and are deleted after this has\n      been accomplished.  This could be implemented in POP3 server\n\n\n\nMyers & Rose                Standards Track                    [Page 17]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n      software by the following mechanism: \"following a POP3 login by a\n      client which was ended by a QUIT, delete all messages downloaded\n      during the session with the RETR command\".  It is important not to\n      delete messages in the event of abnormal connection termination\n      (ie, if no QUIT was received from the client) because the client\n      may not have successfully received or stored the messages.\n      Servers implementing a download-and-delete policy may also wish to\n      disable or limit the optional TOP command, since it could be used\n      as an alternate mechanism to download entire messages.\n\n9. POP3 Command Summary\n\n      Minimal POP3 Commands:\n\n         USER name               valid in the AUTHORIZATION state\n         PASS string\n         QUIT\n\n         STAT                    valid in the TRANSACTION state\n         LIST [msg]\n         RETR msg\n         DELE msg\n         NOOP\n         RSET\n         QUIT\n\n      Optional POP3 Commands:\n\n         APOP name digest        valid in the AUTHORIZATION state\n\n         TOP msg n               valid in the TRANSACTION state\n         UIDL [msg]\n\n      POP3 Replies:\n\n         +OK\n         -ERR\n\n      Note that with the exception of the STAT, LIST, and UIDL commands,\n      the reply given by the POP3 server to any command is significant\n      only to \"+OK\" and \"-ERR\".  Any text occurring after this reply\n      may be ignored by the client.\n\n\n\n\n\n\n\n\n\nMyers & Rose                Standards Track                    [Page 18]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n10. Example POP3 Session\n\n      S: <wait for connection on TCP port 110>\n      C: <open connection>\n      S:    +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>\n      C:    APOP mrose c4c9334bac560ecc979e58001b3e22fb\n      S:    +OK mrose's maildrop has 2 messages (320 octets)\n      C:    STAT\n      S:    +OK 2 320\n      C:    LIST\n      S:    +OK 2 messages (320 octets)\n      S:    1 120\n      S:    2 200\n      S:    .\n      C:    RETR 1\n      S:    +OK 120 octets\n      S:    <the POP3 server sends message 1>\n      S:    .\n      C:    DELE 1\n      S:    +OK message 1 deleted\n      C:    RETR 2\n      S:    +OK 200 octets\n      S:    <the POP3 server sends message 2>\n      S:    .\n      C:    DELE 2\n      S:    +OK message 2 deleted\n      C:    QUIT\n      S:    +OK dewey POP3 server signing off (maildrop empty)\n      C:  <close connection>\n      S:  <wait for next connection>\n\n11. Message Format\n\n   All messages transmitted during a POP3 session are assumed to conform\n   to the standard for the format of Internet text messages [RFC822].\n\n   It is important to note that the octet count for a message on the\n   server host may differ from the octet count assigned to that message\n   due to local conventions for designating end-of-line.  Usually,\n   during the AUTHORIZATION state of the POP3 session, the POP3 server\n   can calculate the size of each message in octets when it opens the\n   maildrop.  For example, if the POP3 server host internally represents\n   end-of-line as a single character, then the POP3 server simply counts\n   each occurrence of this character in a message as two octets.  Note\n   that lines in the message which start with the termination octet need\n   not (and must not) be counted twice, since the POP3 client will\n   remove all byte-stuffed termination characters when it receives a\n   multi-line response.\n\n\n\nMyers & Rose                Standards Track                    [Page 19]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n12. References\n\n   [RFC821] Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC\n       821, USC/Information Sciences Institute, August 1982.\n\n   [RFC822] Crocker, D., \"Standard for the Format of ARPA-Internet Text\n       Messages\", STD 11, RFC 822, University of Delaware, August 1982.\n\n   [RFC1321] Rivest, R., \"The MD5 Message-Digest Algorithm\", RFC 1321,\n       MIT Laboratory for Computer Science, April 1992.\n\n   [RFC1730] Crispin, M., \"Internet Message Access Protocol - Version\n       4\", RFC 1730, University of Washington, December 1994.\n\n   [RFC1734] Myers, J., \"POP3 AUTHentication command\", RFC 1734,\n       Carnegie Mellon, December 1994.\n\n13. Security Considerations\n\n   It is conjectured that use of the APOP command provides origin\n   identification and replay protection for a POP3 session.\n   Accordingly, a POP3 server which implements both the PASS and APOP\n   commands should not allow both methods of access for a given user;\n   that is, for a given mailbox name, either the USER/PASS command\n   sequence or the APOP command is allowed, but not both.\n\n   Further, note that as the length of the shared secret increases, so\n   does the difficulty of deriving it.\n\n   Servers that answer -ERR to the USER command are giving potential\n   attackers clues about which names are valid.\n\n   Use of the PASS command sends passwords in the clear over the\n   network.\n\n   Use of the RETR and TOP commands sends mail in the clear over the\n   network.\n\n   Otherwise, security issues are not discussed in this memo.\n\n14. Acknowledgements\n\n   The POP family has a long and checkered history.  Although primarily\n   a minor revision to RFC 1460, POP3 is based on the ideas presented in\n   RFCs 918, 937, and 1081.\n\n   In addition, Alfred Grimstad, Keith McCloghrie, and Neil Ostroff\n   provided significant comments on the APOP command.\n\n\n\nMyers & Rose                Standards Track                    [Page 20]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n15. Authors' Addresses\n\n   John G. Myers\n   Carnegie-Mellon University\n   5000 Forbes Ave\n   Pittsburgh, PA 15213\n\n   EMail: jgm+@cmu.edu\n\n\n   Marshall T. Rose\n   Dover Beach Consulting, Inc.\n   420 Whisman Court\n   Mountain View, CA  94043-2186\n\n   EMail: mrose@dbc.mtview.ca.us\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers & Rose                Standards Track                    [Page 21]\n\f\nRFC 1939                          POP3                          May 1996\n\n\nAppendix A. Differences from RFC 1725\n\n   This memo is a revision to RFC 1725, a Draft Standard.  It makes the\n   following changes from that document:\n\n      - clarifies that command keywords are case insensitive.\n\n      - specifies that servers must send \"+OK\" and \"-ERR\" in\n        upper case.\n\n      - specifies that the initial greeting is a positive response,\n        instead of any string which should be a positive response.\n\n      - clarifies behavior for unimplemented commands.\n\n      - makes the USER and PASS commands optional.\n\n      - clarified the set of possible responses to the USER command.\n\n      - reverses the order of the examples in the USER and PASS\n        commands, to reduce confusion.\n\n      - clarifies that the PASS command may only be given immediately\n        after a successful USER command.\n\n      - clarified the persistence requirements of UIDs and added some\n        implementation notes.\n\n      - specifies a UID length limitation of one to 70 octets.\n\n      - specifies a status indicator length limitation\n        of 512 octets, including the CRLF.\n\n      - clarifies that LIST with no arguments on an empty mailbox\n        returns success.\n\n      - adds a reference from the LIST command to the Message Format\n        section\n\n      - clarifies the behavior of QUIT upon failure\n\n      - clarifies the security section to not imply the use of the\n        USER command with the APOP command.\n\n      - adds references to RFCs 1730 and 1734\n\n      - clarifies the method by which a UA may enter mail into the\n        transport system.\n\n\n\nMyers & Rose                Standards Track                    [Page 22]\n\f\nRFC 1939                          POP3                          May 1996\n\n\n      - clarifies that the second argument to the TOP command is a\n        number of lines.\n\n      - changes the suggestion in the Security Considerations section\n        for a server to not accept both PASS and APOP for a given user\n        from a \"must\" to a \"should\".\n\n      - adds a section on scaling and operational considerations\n\nAppendix B. Command Index\n\n       APOP .......................................................   15\n       DELE .......................................................    8\n       LIST .......................................................    6\n       NOOP .......................................................    9\n       PASS .......................................................   14\n       QUIT .......................................................    5\n       QUIT .......................................................   10\n       RETR .......................................................    8\n       RSET .......................................................    9\n       STAT .......................................................    6\n       TOP ........................................................   11\n       UIDL .......................................................   12\n       USER .......................................................   13\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers & Rose                Standards Track                    [Page 23]\n\f\n"
  },
  {
    "path": "rfc/rfc1961.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         P. McMahon\nRequest for Comments: 1961                                           ICL\nCategory: Standards Track                                      June 1996\n\n\n           GSS-API Authentication Method for SOCKS Version 5\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nTable of Contents\n\n         1. Purpose ............................................ 1\n         2. Introduction ....................................... 1\n         3. GSS-API Security Context Establishment ............. 2\n         4. GSS-API Protection-level Options ................... 5\n         5. GSS-API Per-message Protection ..................... 7\n         6. GSS-API Security Context Termination ............... 8\n         7. References ......................................... 8\n         8. Acknowledgments .................................... 8\n         9. Security Considerations ............................ 8\n         10. Author's Address .................................. 9\n\n1. Purpose\n\n   The protocol specification for SOCKS Version 5 specifies a\n   generalized framework for the use of arbitrary authentication\n   protocols in the initial SOCKS connection setup.  This document\n   provides the specification for the SOCKS V5 GSS-API authentication\n   protocol, and defines a GSS-API-based encapsulation for provision of\n   integrity, authentication and optional confidentiality.\n\n2. Introduction\n\n   GSS-API provides an abstract interface which provides security\n   services for use in distributed applications, but isolates callers\n   from specific security mechanisms and implementations.\n\n   GSS-API peers achieve interoperability by establishing a common\n   security mechanism for security context establishment - either\n   through administrative action, or through negotiation.  GSS-API is\n   specified in [RFC 1508], and [RFC 1509].  This specification is\n   intended for use with implementations of GSS-API, and the emerging\n\n\n\nMcMahon                     Standards Track                     [Page 1]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n   GSS-API V2 specification.\n\n   The approach for use of GSS-API in SOCKS V5 is to authenticate the\n   client and server by successfully establishing a GSS-API security\n   context - such that the GSS-API encapsulates any negotiation protocol\n   for mechanism selection, and the agreement of security service\n   options.\n\n   The GSS-API enables the context initiator to know what security\n   services the target supports for the chosen mechanism.  The required\n   level of protection is then agreed by negotiation.\n\n   The GSS-API per-message protection calls are subsequently used to\n   encapsulate any further TCP and UDP traffic between client and\n   server.\n\n3. GSS-API Security Context Establishment\n\n3.1 Preparation\n\n   Prior to use of GSS-API primitives, the client and server should be\n   locally authenticated, and have established default GSS-API\n   credentials.\n\n   The client should call gss_import_name to obtain an internal\n   representation of the server name.  For maximal portability the\n   default name_type GSS_C_NULL_OID should be used to specify the\n   default name space, and the input name_string should treated by the\n   client's code as an opaque name-space specific input.\n\n   For example, when using Kerberos V5 naming, the imported name may be\n   of the form \"SERVICE:socks@socks_server_hostname\" where\n   \"socks_server_hostname\" is the fully qualified host name of the\n   server with all letters in lower case. Other mechanisms may, however,\n   have different name forms, so the client should not make assumptions\n   about the name syntax.\n\n3.2 Client Context Establishment\n\n   The client should then call gss_init_sec_context, typically passing:\n\n         GSS_C_NO_CREDENTIAL into cred_handle to specify the default\n         credential (for initiator usage),\n\n         GSS_C_NULL_OID into mech_type to specify the default\n         mechanism,\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 2]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n         GSS_C_NO_CONTEXT into context_handle to specify a NULL\n         context (initially), and,\n\n         the previously imported server name into target_name.\n\n   The client must also specify its requirements for replay protection,\n   delegation, and sequence protection via the gss_init_sec_context\n   req_flags parameter.  It is required by this specification that the\n   client always requests these service options (i.e. passes\n   GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_DELEG_FLAG |\n   GSS_C_SEQUENCE_FLAG into req_flags).\n\n   However, GSS_C_SEQUENCE_FLAG should only be passed in for TCP-based\n   clients, not for UDP-based clients.\n\n3.3 Client Context Establishment Major Status codes\n\n   The gss_init_sec_context returned status code can take two different\n   success values:\n\n    - If gss_init_sec_context returns GSS_S_CONTINUE_NEEDED, then the\n      client should expect the server to issue a token in the\n      subsequent subnegotiation response.  The client must pass the\n      token to another call to gss_init_sec_context, and repeat this\n      procedure until \"continue\" operations are complete.\n\n    - If gss_init_sec_context returns GSS_S_COMPLETE, then the client\n      should respond to the server with any resulting output_token.\n\n      If there is no output_token, the client should proceed to send\n      the protected request details, including any required message\n      protection subnegotiation as specified in sections 4 and 5\n      below.\n\n3.4 Client initial token\n\n   The client's GSS-API implementation then typically responds with the\n   resulting output_token which the client sends in a message to the\n   server.\n\n    +------+------+------+.......................+\n    + ver  | mtyp | len  |       token           |\n    +------+------+------+.......................+\n    + 0x01 | 0x01 | 0x02 | up to 2^16 - 1 octets |\n    +------+------+------+.......................+\n\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 3]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n    Where:\n\n    - \"ver\" is the protocol version number, here 1 to represent the\n      first version of the SOCKS/GSS-API protocol\n\n    - \"mtyp\" is the message type, here 1 to represent an\n      authentication message\n\n    - \"len\" is the length of the \"token\" field in octets\n\n    - \"token\" is the opaque authentication token emitted by GSS-API\n\n3.5 Client GSS-API Initialisation Failure\n\n   If, however, the client's GSS-API implementation failed during\n   gss_init_sec_context, the client must close its connection to the\n   server.\n\n3.6 Server Context Establishment\n\n   For the case where a client successfully sends a token emitted by\n   gss_init_sec_context() to the server, the server must pass the\n   client-supplied token to gss_accept_sec_context as input_token.\n\n   When calling gss_accept_sec_context() for the first time, the\n   context_handle argument is initially set to GSS_C_NO_CONTEXT.\n\n   For portability, verifier_cred_handle is set to GSS_C_NO_CREDENTIAL\n   to specify default credentials (for acceptor usage).\n\n   If gss_accept_sec_context returns GSS_CONTINUE_NEEDED, the server\n   should return the generated output_token to the client, and\n   subsequently pass the resulting client supplied token to another call\n   to gss_accept_sec_context.\n\n   If gss_accept_sec_context returns GSS_S_COMPLETE, then, if an\n   output_token is returned, the server should return it to the client.\n\n   If no token is returned, a zero length token should be sent by the\n   server to signal to the client that it is ready to receive the\n   client's request.\n\n\n\n\n\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 4]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n3.7 Server Reply\n\n   In all continue/confirmation cases, the server uses the same message\n   type as for the client -> server interaction.\n\n    +------+------+------+.......................+\n    + ver  | mtyp | len  |       token           |\n    +------+------+------+.......................+\n    + 0x01 | 0x01 | 0x02 | up to 2^16 - 1 octets |\n    +------+------+------+.......................+\n\n3.8 Security Context Failure\n\n   If the server refuses the client's connection for any reason (GSS-API\n   authentication failure or otherwise), it will return:\n\n    +------+------+\n    + ver  | mtyp |\n    +------+------+\n    + 0x01 | 0xff |\n    +------+------+\n\n    Where:\n\n    - \"ver\" is the protocol version number, here 1 to represent the\n      first version of the SOCKS/GSS-API protocol\n\n    - \"mtyp\" is the message type, here 0xff to represent an abort\n      message\n\n4. GSS-API Protection-level Options\n\n4.1 Message protection\n\n   Establishment of a GSS-API security context enables comunicating\n   peers to determine which per-message protection services are\n   available to them through the gss_init_sec_context() and\n   gss_accept_sec_context() ret_flags GSS_C_INTEG_FLAG and\n   GSS_C_CONF_FLAG which respectively indicate message integrity and\n   confidentiality services.\n\n   It is necessary to ensure that the message protection applied to the\n   traffic is appropriate to the sensitivity of the data, and the\n   severity of the threats.\n\n\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 5]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n4.2 Message Protection Subnegotiation\n\n   For TCP and UDP clients and servers, different levels of protection\n   are possible in the SOCKS V5 protocol, so an additional\n   subnegotiation stage is needed to agree the message protection level.\n   After successful completion of this subnegotiation, TCP and UDP\n   clients and servers use GSS-API encapsulation as defined in section\n   5.1.\n\n   After successful establishment of a GSS-API security context, the\n   client's GSS-API implementation sends its required security context\n   protection level to the server.  The server then returns the security\n   context protection level which it agrees to - which may or may not\n   take the the client's request into account.\n\n   The security context protection level sent by client and server must\n   be one of the following values:\n\n         1 required per-message integrity\n         2 required per-message integrity and confidentiality\n         3 selective per-message integrity or confidentiality based on\n           local client and server configurations\n\n   It is anticipated that most implementations will agree on level 1 or\n   2 due to the practical difficulties in applying selective controls to\n   messages passed through a socks library.\n\n4.3 Message Protection Subnegotiation Message Format\n\n   The security context protection level is sent from client to server\n   and vice versa using the following protected message format:\n\n    +------+------+------+.......................+\n    + ver  | mtyp | len  |   token               |\n    +------+------+------+.......................+\n    + 0x01 | 0x02 | 0x02 | up to 2^16 - 1 octets |\n    +------+------+------+.......................+\n\n    Where:\n\n    - \"ver\" is the protocol version number, here 1 to represent the\n      first version of the SOCKS/GSS-API protocol\n\n    - \"mtyp\" is the message type, here 2 to represent a protection\n      -level negotiation message\n\n    - \"len\" is the length of the \"token\" field in octets\n\n\n\n\nMcMahon                     Standards Track                     [Page 6]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n    - \"token\" is the GSS-API encapsulated protection level\n\n4.4 Message Protection Subnegotiation Message Generation\n\n   The token is produced by encapsulating an octet containing the\n   required protection level using gss_seal()/gss_wrap() with conf_req\n   set to FALSE.  The token is verified using gss_unseal()/\n   gss_unwrap().\n\n   If the server's choice of protection level is unacceptable to the\n   client, then the client must close its connection to the server\n\n5. GSS-API Per-message Protection\n\n   For TCP and UDP clients and servers, the GSS-API functions for\n   encapsulation and de-encapsulation shall be used by implementations -\n   i.e. gss_seal()/gss_wrap(), and gss_unseal()/ gss_unwrap().\n\n   The default value of quality of protection shall be specified, and\n   the use of conf_req_flag shall be as determined by the previous\n   subnegotiation step.  If protection level 1 is agreed then\n   conf_req_flag MUST always be FALSE; if protection level 2 is agreed\n   then conf_req_flag MUST always be TRUE; and if protection level 3 is\n   agreed then conf_req is determined on a per-message basis by client\n   and server using local configuration.\n\n   All encapsulated messages are prefixed by the following framing:\n\n    +------+------+------+.......................+\n    + ver  | mtyp | len  |       token           |\n    +------+------+------+.......................+\n    + 0x01 | 0x03 | 0x02 | up to 2^16 - 1 octets |\n    +------+------+------+.......................+\n\n    Where:\n\n    - \"ver\" is the protocol version number, here 1 to represent the\n      first version of the SOCKS/GSS-API protocol\n\n    - \"mtyp\" is the message type, here 3 to represent encapulated user\n      data\n\n    - \"len\" is the length of the \"token\" field in octets\n\n    - \"token\" is the user data encapsulated by GSS-API\n\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 7]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n6. GSS-API Security Context Termination\n\n   The GSS-API context termination message (emitted by\n   gss_delete_sec_context) is not used by this protocol.\n\n   When the connection is closed, each peer invokes\n   gss_delete_sec_context() passing GSS_C_NO_BUFFER into the\n   output_token argument.\n\n7. References\n\n    [RFC 1508] Linn, J., \"Generic Security Service API\",\n               September 1993.\n\n    [RFC 1509] Wray, J., \"Generic Security Service API : C-bindings\",\n               September 1993.\n\n    [SOCKS V5] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D.,\n               and L. Jones, \"SOCKS Protocol V5\", RFC 1928, April\n               1996.\n\n8. Acknowledgment\n\n   This document builds from a previous memo produced by Marcus Leech\n   (BNR) - whose comments are gratefully acknowleged.  It also reflects\n   input from the AFT WG, and comments arising from implementation\n   experience by Xavier Gosselin (IUT Lyons).\n\n9. Security Considerations\n\n   The security services provided through the GSS-API are entirely\n   dependent on the effectiveness of the underlying security mechanisms,\n   and the correctness of the implementation of the underlying\n   algorithms and protocols.\n\n   The user of a GSS-API service must ensure that the quality of\n   protection provided by the mechanism implementation is consistent\n   with their security policy.\n\n   In addition, where negotiation is supported under the GSS-API,\n   constraints on acceptable mechanisms may be imposed to ensure\n   suitability for application to authenticated firewall traversal.\n\n\n\n\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 8]\n\f\nRFC 1961          GSS-API Authentication for SOCKS V5          June 1996\n\n\n10. Author's Address\n\n   P. V. McMahon\n   ICL Enterprises\n   Kings House\n   33 Kings Road\n   Reading, RG1 3PX\n   UK\n\n   EMail: p.v.mcmahon@rea0803.wins.icl.co.uk\n   Phone: +44 1734 634882\n   Fax:   +44 1734 855106\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMcMahon                     Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc2034.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                       N. Freed\nRequest for Comments: RFC 2034                              Innosoft\nCategory: Standards Track                               October 1996\n\n\n                       SMTP Service Extension for\n                     Returning Enhanced Error Codes\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.  Abstract\n\n   This memo defines an extension to the SMTP service [RFC-821, RFC-\n   1869] whereby an SMTP server augments its responses with the enhanced\n   mail system status codes defined in RFC 1893.  These codes can then\n   be used to provide more informative explanations of error conditions,\n   especially in the context of the delivery status notifications format\n   defined in RFC 1894.\n\n2.  Introduction\n\n   Although SMTP is widely and robustly deployed, various extensions\n   have been requested by parts of the Internet community. In\n   particular, in the modern, international, and multilingual Internet a\n   need exists to assign codes to specific error conditions that can be\n   translated into different languages. RFC 1893 defines such a set of\n   status codes and RFC 1894 defines a mechanism to send such coded\n   material to users. However, in many cases the agent creating the RFC\n   1894 delivery status notification is doing so in response to errors\n   it received from a remote SMTP server.\n\n   As such, remote servers need a mechanism for embedding enhanced\n   status codes in their responses as well as a way to indicate to a\n   client when they are in fact doing this. This memo uses the SMTP\n   extension mechanism described in RFC 1869 to define such a mechanism.\n\n\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 1]\n\f\nRFC 2034               SMTP Enhanced Error Codes            October 1996\n\n\n3.  Framework for the Enhanced Error Statuses Extension\n\n   The enhanced error statuses transport extension is laid out as\n   follows:\n\n   (1)   the name of the SMTP service extension defined here is\n         Enhanced-Status-Codes;\n\n   (2)   the EHLO keyword value associated with the extension is\n         ENHANCEDSTATUSCODES;\n\n   (3)   no parameter is used with the ENHANCEDSTATUSCODES EHLO\n         keyword;\n\n   (4)   the text part of all 2xx, 4xx, and 5xx SMTP responses\n         other than the initial greeting and any response to\n         HELO or EHLO are prefaced with a status code as defined\n         in RFC 1893. This status code is always followed by one\n         or more spaces.\n\n   (5)   no additional SMTP verbs are defined by this extension;\n         and,\n\n   (6)   the next section specifies how support for the\n         extension affects the behavior of a server and client\n         SMTP.\n\n4.  The Enhanced-Status-Codes service extension\n\n   Servers supporting the Enhanced-Status-Codes extension must preface\n   the text part of almost all response lines with a status code. As in\n   RFC 1893, the syntax of these status codes is given by the ABNF:\n\n        status-code ::= class \".\" subject \".\" detail\n        class       ::= \"2\" / \"4\" / \"5\"\n        subject     ::= 1*3digit\n        detail      ::= 1*3digit\n\n   These codes must appear in all 2xx, 4xx, and 5xx response lines other\n   than initial greeting and any response to HELO or EHLO. Note that 3xx\n   responses are NOT included in this list.\n\n   All status codes returned by the server must agree with the primary\n   response code, that is, a 2xx response must incorporate a 2.X.X code,\n   a 4xx response must incorporate a 4.X.X code, and a 5xx response must\n   incorporate a 5.X.X code.\n\n\n\n\n\nFreed                       Standards Track                     [Page 2]\n\f\nRFC 2034               SMTP Enhanced Error Codes            October 1996\n\n\n   When responses are continued across multiple lines the same status\n   code must appear at the beginning of the text in each line of the\n   response.\n\n   Servers supporting this extension must attach enhanced status codes\n   to their responses regardless of whether or not EHLO is employed by\n   the client.\n\n5.  Status Codes and Negotiation\n\n   This specification does not provide a means for clients to request\n   that status codes be returned or that they not be returned; a\n   compliant server includes these codes in the responses it sends\n   regardless of whether or not the client expects them.  This is\n   somewhat different from most other SMTP extensions, where generally\n   speaking a client must specifically make a request before the\n   extended server behaves any differently than an unextended server.\n   The omission of client negotiation in this case is entirely\n   intentional: Given the generally poor state of SMTP server error code\n   implementation it is felt that any step taken towards more\n   comprehensible error codes is something that all clients, extended or\n   not, should benefit from.\n\n   IMPORTANT NOTE:  The use of this approach in this extension should be\n   seen as a very special case.  It MUST NOT be taken as a license for\n   future SMTP extensions to dramatically change the nature of SMTP\n   client-server interaction without proper announcement from the server\n   and a corresponding enabling command from the client.\n\n6.  Usage Example\n\n   The following dialogue illustrates the use of enhanced status codes\n   by a server:\n\n   S: <wait for connection on TCP port 25>\n   C: <open connection to server>\n   S: 220 dbc.mtview.ca.us SMTP service ready\n   C: EHLO ymir.claremont.edu\n   S: 250-dbc.mtview.ca.us says hello\n   S: 250 ENHANCEDSTATUSCODES\n   C: MAIL FROM:<ned@ymir.claremont.edu>\n   S: 250 2.1.0 Originator <ned@ymir.claremont.edu> ok\n   C: RCPT TO:<mrose@dbc.mtview.ca.us>\n   S: 250 2.1.5 Recipient <mrose@dbc.mtview.ca.us> ok\n   C: RCPT TO:<nosuchuser@dbc.mtview.ca.us>\n   S: 550 5.1.1 Mailbox \"nosuchuser\" does not exist\n   C: RCPT TO:<remoteuser@isi.edu>\n   S: 551-5.7.1 Forwarding to remote hosts disabled\n\n\n\nFreed                       Standards Track                     [Page 3]\n\f\nRFC 2034               SMTP Enhanced Error Codes            October 1996\n\n\n   S: 551 5.7.1 Select another host to act as your forwarder\n   C: DATA\n   S: 354 Send message, ending in CRLF.CRLF.\n    ...\n   C: .\n   S: 250 2.6.0 Message accepted\n   C: QUIT\n   S: 221 2.0.0 Goodbye\n\n   The client that receives these responses might then send a\n   nondelivery notification of the general form:\n\n      Date: Mon, 11 Mar 1996 09:21:47 -0400\n      From: Mail Delivery Subsystem <mailer-daemon@ymir.claremont.edu>\n      Subject: Returned mail\n      To: <ned@ymir.claremont.edu>\n      MIME-Version: 1.0\n      Content-Type: multipart/report; report-type=delivery-status;\n            boundary=\"JAA13167.773673707/YMIR.CLAREMONT.EDU\"\n\n      --JAA13167.773673707/YMIR.CLAREMONT.EDU\n      content-type: text/plain; charset=us-ascii\n\n         ----- Mail was successfully relayed to\n               the following addresses -----\n\n      <mrose@dbc.mtview.ca.us>\n\n         ----- The following addresses had delivery problems -----\n      <nosuchuser@dbc.mtview.ca.us>\n        (Mailbox \"nosuchuser\" does not exist)\n      <remoteuser@isi.edu>\n        (Forwarding to remote hosts disabled)\n\n      --JAA13167.773673707/YMIR.CLAREMONT.EDU\n      content-type: message/delivery-status\n\n      Reporting-MTA: dns; ymir.claremont.edu\n\n      Original-Recipient: rfc822;mrose@dbc.mtview.ca.us\n      Final-Recipient: rfc822;mrose@dbc.mtview.ca.us\n      Action: relayed\n      Status: 2.1.5 (Destination address valid)\n      Diagnostic-Code: smtp;\n       250 Recipient <mrose@dbc.mtview.ca.us> ok\n      Remote-MTA: dns; dbc.mtview.ca.us\n\n\n\n\n\nFreed                       Standards Track                     [Page 4]\n\f\nRFC 2034               SMTP Enhanced Error Codes            October 1996\n\n\n      Original-Recipient: rfc822;nosuchuser@dbc.mtview.ca.us\n      Final-Recipient: rfc822;nosuchuser@dbc.mtview.ca.us\n      Action: failed\n      Status: 5.1.1 (Bad destination mailbox address)\n      Diagnostic-Code: smtp;\n       550 Mailbox \"nosuchuser\" does not exist\n      Remote-MTA: dns; dbc.mtview.ca.us\n\n      Original-Recipient: rfc822;remoteuser@isi.edu\n      Final-Recipient: rfc822;remoteuser@isi.edu\n      Action: failed\n      Status: 5.7.1 (Delivery not authorized, message refused)\n      Diagnostic-Code: smtp;\n        551 Forwarding to remote hosts disabled\n        Select another host to act as your forwarder\n      Remote-MTA: dns; dbc.mtview.ca.us\n\n      --JAA13167.773673707/YMIR.CLAREMONT.EDU\n      content-type: message/rfc822\n\n      [original message goes here]\n      --JAA13167.773673707/YMIR.CLAREMONT.EDU--\n\n   Note that in order to reduce clutter the reporting MTA has omitted\n   enhanced status code information from the diagnostic-code fields it\n   has generated.\n\n7.  Security Considerations\n\n   Additional detail in server responses axiomatically provides\n   additional information about the server.  It is conceivable that\n   additional information of this sort may be of assistance in\n   circumventing server security.  The advantages of provides additional\n   information must always be weighed against the security implications\n   of doing so.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 5]\n\f\nRFC 2034               SMTP Enhanced Error Codes            October 1996\n\n\n8.  References\n\n   [RFC-821]\n        Postel, J., \"Simple Mail Transfer Protocol\", RFC 821,\n        August, 1982.  (August, 1982).\n\n   [RFC-1869]\n        Rose, M., Stefferud, E., Crocker, C., Klensin, J., Freed,\n        N., \"SMTP Service Extensions\", RFC 1869, November, 1995.\n\n   [RFC-1893]\n        Vaudreuil, G., \"Enhanced Mail System Status Codes\", RFC\n        1893, January, 1996.\n\n   [RFC-1894]\n        Moore, K., Vaudreuil, G., \"An Extensible Message Format\n        for Delivery Status Notifications\", RFC 1894, January,\n        1996.\n\n9.  Author Address\n\n   Ned Freed\n   Innosoft International, Inc.\n   1050 East Garvey Avenue South\n   West Covina, CA 91790\n   USA\n    tel: +1 818 919 3600           fax: +1 818 919 3614\n    email: ned@innosoft.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc2060.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        M. Crispin\nRequest for Comments: 2060                     University of Washington\nObsoletes: 1730                                           December 1996\nCategory: Standards Track\n\n\n            INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)\n   allows a client to access and manipulate electronic mail messages on\n   a server.  IMAP4rev1 permits manipulation of remote message folders,\n   called \"mailboxes\", in a way that is functionally equivalent to local\n   mailboxes.  IMAP4rev1 also provides the capability for an offline\n   client to resynchronize with the server (see also [IMAP-DISC]).\n\n   IMAP4rev1 includes operations for creating, deleting, and renaming\n   mailboxes; checking for new messages; permanently removing messages;\n   setting and clearing flags; [RFC-822] and [MIME-IMB] parsing;\n   searching; and selective fetching of message attributes, texts, and\n   portions thereof.  Messages in IMAP4rev1 are accessed by the use of\n   numbers.  These numbers are either message sequence numbers or unique\n   identifiers.\n\n   IMAP4rev1 supports a single server.  A mechanism for accessing\n   configuration information to support multiple IMAP4rev1 servers is\n   discussed in [ACAP].\n\n   IMAP4rev1 does not specify a means of posting mail; this function is\n   handled by a mail transfer protocol such as [SMTP].\n\n   IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and\n   unpublished IMAP2bis protocols.  In the course of the evolution of\n   IMAP4rev1, some aspects in the earlier protocol have become obsolete.\n   Obsolete commands, responses, and data formats which an IMAP4rev1\n   implementation may encounter when used with an earlier implementation\n   are described in [IMAP-OBSOLETE].\n\n\n\n\n\nCrispin                     Standards Track                     [Page 1]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Other compatibility issues with IMAP2bis, the most common variant of\n   the earlier protocol, are discussed in [IMAP-COMPAT].  A full\n   discussion of compatibility issues with rare (and presumed extinct)\n   variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is\n   primarily of historical interest.\n\nTable of Contents\n\nIMAP4rev1 Protocol Specification ..................................    4\n1.      How to Read This Document .................................    4\n1.1.    Organization of This Document .............................    4\n1.2.    Conventions Used in This Document .........................    4\n2.      Protocol Overview .........................................    5\n2.1.    Link Level ................................................    5\n2.2.    Commands and Responses ....................................    6\n2.2.1.  Client Protocol Sender and Server Protocol Receiver .......    6\n2.2.2.  Server Protocol Sender and Client Protocol Receiver .......    7\n2.3.    Message Attributes ........................................    7\n2.3.1.  Message Numbers ...........................................    7\n2.3.1.1.        Unique Identifier (UID) Message Attribute .........    7\n2.3.1.2.        Message Sequence Number Message Attribute .........    9\n2.3.2.  Flags Message Attribute ....................................   9\n2.3.3.  Internal Date Message Attribute ...........................   10\n2.3.4.  [RFC-822] Size Message Attribute ..........................   11\n2.3.5.  Envelope Structure Message Attribute ......................   11\n2.3.6.  Body Structure Message Attribute ..........................   11\n2.4.    Message Texts .............................................   11\n3.      State and Flow Diagram ....................................   11\n3.1.    Non-Authenticated State ...................................   11\n3.2.    Authenticated State .......................................   11\n3.3.    Selected State ............................................   12\n3.4.    Logout State ..............................................   12\n4.      Data Formats ..............................................   12\n4.1.    Atom ......................................................   13\n4.2.    Number ....................................................   13\n4.3.    String .....................................................  13\n4.3.1.  8-bit and Binary Strings ..................................   13\n4.4.    Parenthesized List ........................................   14\n4.5.    NIL .......................................................   14\n5.      Operational Considerations ................................   14\n5.1.    Mailbox Naming ............................................   14\n5.1.1.  Mailbox Hierarchy Naming ..................................   14\n5.1.2.  Mailbox Namespace Naming Convention .......................   14\n5.1.3.  Mailbox International Naming Convention ...................   15\n5.2.    Mailbox Size and Message Status Updates ...................   16\n5.3.    Response when no Command in Progress ......................   16\n5.4.    Autologout Timer ..........................................   16\n5.5.    Multiple Commands in Progress .............................   17\n\n\n\nCrispin                     Standards Track                     [Page 2]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n6.      Client Commands ...........................................   17\n6.1.    Client Commands - Any State ...............................   18\n6.1.1.  CAPABILITY Command ........................................   18\n6.1.2.  NOOP Command ..............................................   19\n6.1.3.  LOGOUT Command ............................................   20\n6.2.    Client Commands - Non-Authenticated State .................   20\n6.2.1.  AUTHENTICATE Command ......................................   21\n6.2.2.  LOGIN Command .............................................   22\n6.3.    Client Commands - Authenticated State .....................   22\n6.3.1.  SELECT Command ............................................   23\n6.3.2.  EXAMINE Command ...........................................   24\n6.3.3.  CREATE Command ............................................   25\n6.3.4.  DELETE Command ............................................   26\n6.3.5.  RENAME Command ............................................   27\n6.3.6.  SUBSCRIBE Command .........................................   29\n6.3.7.  UNSUBSCRIBE Command .......................................   30\n6.3.8.  LIST Command ..............................................   30\n6.3.9.  LSUB Command ..............................................   32\n6.3.10. STATUS Command ............................................   33\n6.3.11. APPEND Command ............................................   34\n6.4.    Client Commands - Selected State ..........................   35\n6.4.1.  CHECK Command .............................................   36\n6.4.2.  CLOSE Command .............................................   36\n6.4.3.  EXPUNGE Command ...........................................   37\n6.4.4.  SEARCH Command ............................................   37\n6.4.5.  FETCH Command .............................................   41\n6.4.6.  STORE Command .............................................   45\n6.4.7.  COPY Command ..............................................   46\n6.4.8.  UID Command ...............................................   47\n6.5.    Client Commands - Experimental/Expansion ..................   48\n6.5.1.  X<atom> Command ...........................................   48\n7.      Server Responses ..........................................   48\n7.1.    Server Responses - Status Responses .......................   49\n7.1.1.  OK Response ...............................................   51\n7.1.2.  NO Response ...............................................   51\n7.1.3.  BAD Response ..............................................   52\n7.1.4.  PREAUTH Response ..........................................   52\n7.1.5.  BYE Response ..............................................   52\n7.2.    Server Responses - Server and Mailbox Status ..............   53\n7.2.1.  CAPABILITY Response .......................................   53\n7.2.2.  LIST Response ..............................................  54\n7.2.3.  LSUB Response .............................................   55\n7.2.4   STATUS Response ...........................................   55\n7.2.5.  SEARCH Response ...........................................   55\n7.2.6.  FLAGS Response ............................................   56\n7.3.    Server Responses - Mailbox Size ...........................   56\n7.3.1.  EXISTS Response ...........................................   56\n7.3.2.  RECENT Response ...........................................   57\n\n\n\nCrispin                     Standards Track                     [Page 3]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n7.4.    Server Responses - Message Status .........................   57\n7.4.1.  EXPUNGE Response ..........................................   57\n7.4.2.  FETCH Response ............................................   58\n7.5.    Server Responses - Command Continuation Request ...........   63\n8.      Sample IMAP4rev1 connection ...............................   63\n9.      Formal Syntax .............................................   64\n10.     Author's Note .............................................   74\n11.     Security Considerations ...................................   74\n12.     Author's Address ..........................................   75\nAppendices ........................................................   76\nA.      References ................................................   76\nB.      Changes from RFC 1730 .....................................   77\nC.      Key Word Index ............................................   79\n\n\nIMAP4rev1 Protocol Specification\n\n1.      How to Read This Document\n\n1.1.    Organization of This Document\n\n   This document is written from the point of view of the implementor of\n   an IMAP4rev1 client or server.  Beyond the protocol overview in\n   section 2, it is not optimized for someone trying to understand the\n   operation of the protocol.  The material in sections 3 through 5\n   provides the general context and definitions with which IMAP4rev1\n   operates.\n\n   Sections 6, 7, and 9 describe the IMAP commands, responses, and\n   syntax, respectively.  The relationships among these are such that it\n   is almost impossible to understand any of them separately.  In\n   particular, do not attempt to deduce command syntax from the command\n   section alone; instead refer to the Formal Syntax section.\n\n1.2.    Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   The following terms are used in this document to signify the\n   requirements of this specification.\n\n   1) MUST, or the adjective REQUIRED, means that the definition is\n      an absolute requirement of the specification.\n\n   2) MUST NOT that the definition is an absolute prohibition of the\n      specification.\n\n\n\n\nCrispin                     Standards Track                     [Page 4]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   3) SHOULD means that there may exist valid reasons in particular\n      circumstances to ignore a particular item, but the full\n      implications MUST be understood and carefully weighed before\n      choosing a different course.\n\n   4) SHOULD NOT means that there may exist valid reasons in\n      particular circumstances when the particular behavior is\n      acceptable or even useful, but the full implications SHOULD be\n      understood and the case carefully weighed before implementing\n      any behavior described with this label.\n\n   5) MAY, or the adjective OPTIONAL, means that an item is truly\n      optional.  One vendor may choose to include the item because a\n      particular marketplace requires it or because the vendor feels\n      that it enhances the product while another vendor may omit the\n      same item.  An implementation which does not include a\n      particular option MUST be prepared to interoperate with another\n      implementation which does include the option.\n\n      \"Can\" is used instead of \"may\" when referring to a possible\n      circumstance or situation, as opposed to an optional facility of\n      the protocol.\n\n      \"User\" is used to refer to a human user, whereas \"client\" refers\n      to the software being run by the user.\n\n      \"Connection\" refers to the entire sequence of client/server\n      interaction from the initial establishment of the network\n      connection until its termination.  \"Session\" refers to the\n      sequence of client/server interaction from the time that a mailbox\n      is selected (SELECT or EXAMINE command) until the time that\n      selection ends (SELECT or EXAMINE of another mailbox, CLOSE\n      command, or connection termination).\n\n       Characters are 7-bit US-ASCII unless otherwise specified.  Other\n       character sets are indicated using a \"CHARSET\", as described in\n       [MIME-IMT] and defined in [CHARSET].  CHARSETs have important\n       additional semantics in addition to defining character set; refer\n       to these documents for more detail.\n\n2.      Protocol Overview\n\n2.1.    Link Level\n\n   The IMAP4rev1 protocol assumes a reliable data stream such as\n   provided by TCP.  When TCP is used, an IMAP4rev1 server listens on\n   port 143.\n\n\n\n\nCrispin                     Standards Track                     [Page 5]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n2.2.    Commands and Responses\n\n   An IMAP4rev1 connection consists of the establishment of a\n   client/server network connection, an initial greeting from the\n   server, and client/server interactions.  These client/server\n   interactions consist of a client command, server data, and a server\n   completion result response.\n\n   All interactions transmitted by client and server are in the form of\n   lines; that is, strings that end with a CRLF.  The protocol receiver\n   of an IMAP4rev1 client or server is either reading a line, or is\n   reading a sequence of octets with a known count followed by a line.\n\n2.2.1.  Client Protocol Sender and Server Protocol Receiver\n\n   The client command begins an operation.  Each client command is\n   prefixed with an identifier (typically a short alphanumeric string,\n   e.g. A0001, A0002, etc.) called a \"tag\".  A different tag is\n   generated by the client for each command.\n\n   There are two cases in which a line from the client does not\n   represent a complete command.  In one case, a command argument is\n   quoted with an octet count (see the description of literal in String\n   under Data Formats); in the other case, the command arguments require\n   server feedback (see the AUTHENTICATE command).  In either case, the\n   server sends a command continuation request response if it is ready\n   for the octets (if appropriate) and the remainder of the command.\n   This response is prefixed with the token \"+\".\n\n      Note: If, instead, the server detected an error in the command, it\n      sends a BAD completion response with tag matching the command (as\n      described below) to reject the command and prevent the client from\n      sending any more of the command.\n\n      It is also possible for the server to send a completion response\n      for some other command (if multiple commands are in progress), or\n      untagged data.  In either case, the command continuation request\n      is still pending; the client takes the appropriate action for the\n      response, and reads another response from the server.  In all\n      cases, the client MUST send a complete command (including\n      receiving all command continuation request responses and command\n      continuations for the command) before initiating a new command.\n\n   The protocol receiver of an IMAP4rev1 server reads a command line\n   from the client, parses the command and its arguments, and transmits\n   server data and a server command completion result response.\n\n\n\n\n\nCrispin                     Standards Track                     [Page 6]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n2.2.2.  Server Protocol Sender and Client Protocol Receiver\n\n   Data transmitted by the server to the client and status responses\n   that do not indicate command completion are prefixed with the token\n   \"*\", and are called untagged responses.\n\n   Server data MAY be sent as a result of a client command, or MAY be\n   sent unilaterally by the server.  There is no syntactic difference\n   between server data that resulted from a specific command and server\n   data that were sent unilaterally.\n\n   The server completion result response indicates the success or\n   failure of the operation.  It is tagged with the same tag as the\n   client command which began the operation.  Thus, if more than one\n   command is in progress, the tag in a server completion response\n   identifies the command to which the response applies.  There are\n   three possible server completion responses: OK (indicating success),\n   NO (indicating failure), or BAD (indicating protocol error such as\n   unrecognized command or command syntax error).\n\n   The protocol receiver of an IMAP4rev1 client reads a response line\n   from the server.  It then takes action on the response based upon the\n   first token of the response, which can be a tag, a \"*\", or a \"+\".\n\n   A client MUST be prepared to accept any server response at all times.\n   This includes server data that was not requested.  Server data SHOULD\n   be recorded, so that the client can reference its recorded copy\n   rather than sending a command to the server to request the data.  In\n   the case of certain server data, the data MUST be recorded.\n\n   This topic is discussed in greater detail in the Server Responses\n   section.\n\n2.3.    Message Attributes\n\n   In addition to message text, each message has several attributes\n   associated with it.  These attributes may be retrieved individually\n   or in conjunction with other attributes or message texts.\n\n2.3.1.  Message Numbers\n\n   Messages in IMAP4rev1 are accessed by one of two numbers; the unique\n   identifier and the message sequence number.\n\n2.3.1.1.        Unique Identifier (UID) Message Attribute\n\n   A 32-bit value assigned to each message, which when used with the\n   unique identifier validity value (see below) forms a 64-bit value\n\n\n\nCrispin                     Standards Track                     [Page 7]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   that is permanently guaranteed not to refer to any other message in\n   the mailbox.  Unique identifiers are assigned in a strictly ascending\n   fashion in the mailbox; as each message is added to the mailbox it is\n   assigned a higher UID than the message(s) which were added\n   previously.\n\n   Unlike message sequence numbers, unique identifiers are not\n   necessarily contiguous.  Unique identifiers also persist across\n   sessions.  This permits a client to resynchronize its state from a\n   previous session with the server (e.g. disconnected or offline access\n   clients); this is discussed further in [IMAP-DISC].\n\n   Associated with every mailbox is a unique identifier validity value,\n   which is sent in an UIDVALIDITY response code in an OK untagged\n   response at mailbox selection time.  If unique identifiers from an\n   earlier session fail to persist to this session, the unique\n   identifier validity value MUST be greater than the one used in the\n   earlier session.\n\n      Note: Unique identifiers MUST be strictly ascending in the mailbox\n      at all times.  If the physical message store is re-ordered by a\n      non-IMAP agent, this requires that the unique identifiers in the\n      mailbox be regenerated, since the former unique identifers are no\n      longer strictly ascending as a result of the re-ordering.  Another\n      instance in which unique identifiers are regenerated is if the\n      message store has no mechanism to store unique identifiers.\n      Although this specification recognizes that this may be\n      unavoidable in certain server environments, it STRONGLY ENCOURAGES\n      message store implementation techniques that avoid this problem.\n\n      Another cause of non-persistance is if the mailbox is deleted and\n      a new mailbox with the same name is created at a later date, Since\n      the name is the same, a client may not know that this is a new\n      mailbox unless the unique identifier validity is different.  A\n      good value to use for the unique identifier validity value is a\n      32-bit representation of the creation date/time of the mailbox.\n      It is alright to use a constant such as 1, but only if it\n      guaranteed that unique identifiers will never be reused, even in\n      the case of a mailbox being deleted (or renamed) and a new mailbox\n      by the same name created at some future time.\n\n   The unique identifier of a message MUST NOT change during the\n   session, and SHOULD NOT change between sessions.  However, if it is\n   not possible to preserve the unique identifier of a message in a\n   subsequent session, each subsequent session MUST have a new unique\n   identifier validity value that is larger than any that was used\n   previously.\n\n\n\n\nCrispin                     Standards Track                     [Page 8]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n2.3.1.2.        Message Sequence Number Message Attribute\n\n   A relative position from 1 to the number of messages in the mailbox.\n   This position MUST be ordered by ascending unique identifier.  As\n   each new message is added, it is assigned a message sequence number\n   that is 1 higher than the number of messages in the mailbox before\n   that new message was added.\n\n   Message sequence numbers can be reassigned during the session.  For\n   example, when a message is permanently removed (expunged) from the\n   mailbox, the message sequence number for all subsequent messages is\n   decremented.  Similarly, a new message can be assigned a message\n   sequence number that was once held by some other message prior to an\n   expunge.\n\n   In addition to accessing messages by relative position in the\n   mailbox, message sequence numbers can be used in mathematical\n   calculations.  For example, if an untagged \"EXISTS 11\" is received,\n   and previously an untagged \"8 EXISTS\" was received, three new\n   messages have arrived with message sequence numbers of 9, 10, and 11.\n   Another example; if message 287 in a 523 message mailbox has UID\n   12345, there are exactly 286 messages which have lesser UIDs and 236\n   messages which have greater UIDs.\n\n2.3.2.  Flags Message Attribute\n\n   A list of zero or more named tokens associated with the message.  A\n   flag is set by its addition to this list, and is cleared by its\n   removal.  There are two types of flags in IMAP4rev1.  A flag of\n   either type may be permanent or session-only.\n\n   A system flag is a flag name that is pre-defined in this\n   specification.  All system flags begin with \"\\\".  Certain system\n   flags (\\Deleted and \\Seen) have special semantics described\n   elsewhere.  The currently-defined system flags are:\n\n        \\Seen       Message has been read\n\n        \\Answered   Message has been answered\n\n        \\Flagged    Message is \"flagged\" for urgent/special attention\n\n        \\Deleted    Message is \"deleted\" for removal by later EXPUNGE\n\n        \\Draft      Message has not completed composition (marked as a\n                    draft).\n\n\n\n\n\nCrispin                     Standards Track                     [Page 9]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n        \\Recent     Message is \"recently\" arrived in this mailbox.  This\n                    session is the first session to have been notified\n                    about this message; subsequent sessions will not see\n                    \\Recent set for this message.  This flag can not be\n                    altered by the client.\n\n                    If it is not possible to determine whether or not\n                    this session is the first session to be notified\n                    about a message, then that message SHOULD be\n                    considered recent.\n\n                    If multiple connections have the same mailbox\n                    selected simultaneously, it is undefined which of\n                    these connections will see newly-arrives messages\n                    with \\Recent set and which will see it without\n                    \\Recent set.\n\n      A keyword is defined by the server implementation.  Keywords do\n      not begin with \"\\\".  Servers MAY permit the client to define new\n      keywords in the mailbox (see the description of the\n      PERMANENTFLAGS response code for more information).\n\n      A flag may be permanent or session-only on a per-flag basis.\n      Permanent flags are those which the client can add or remove\n      from the message flags permanently; that is, subsequent sessions\n      will see any change in permanent flags.  Changes to session\n      flags are valid only in that session.\n\n      Note: The \\Recent system flag is a special case of a\n      session flag.  \\Recent can not be used as an argument in a\n      STORE command, and thus can not be changed at all.\n\n2.3.3.  Internal Date Message Attribute\n\n   The internal date and time of the message on the server.  This is not\n   the date and time in the [RFC-822] header, but rather a date and time\n   which reflects when the message was received.  In the case of\n   messages delivered via [SMTP], this SHOULD be the date and time of\n   final delivery of the message as defined by [SMTP].  In the case of\n   messages delivered by the IMAP4rev1 COPY command, this SHOULD be the\n   internal date and time of the source message.  In the case of\n   messages delivered by the IMAP4rev1 APPEND command, this SHOULD be\n   the date and time as specified in the APPEND command description.\n   All other cases are implementation defined.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 10]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n2.3.4.  [RFC-822] Size Message Attribute\n\n   The number of octets in the message, as expressed in [RFC-822]\n   format.\n\n2.3.5.  Envelope Structure Message Attribute\n\n   A parsed representation of the [RFC-822] envelope information (not to\n   be confused with an [SMTP] envelope) of the message.\n\n2.3.6.  Body Structure Message Attribute\n\n   A parsed representation of the [MIME-IMB] body structure information\n   of the message.\n\n2.4.    Message Texts\n\n   In addition to being able to fetch the full [RFC-822] text of a\n   message, IMAP4rev1 permits the fetching of portions of the full\n   message text.  Specifically, it is possible to fetch the [RFC-822]\n   message header, [RFC-822] message body, a [MIME-IMB] body part, or a\n   [MIME-IMB] header.\n\n3.      State and Flow Diagram\n\n   An IMAP4rev1 server is in one of four states.  Most commands are\n   valid in only certain states.  It is a protocol error for the client\n   to attempt a command while the command is in an inappropriate state.\n   In this case, a server will respond with a BAD or NO (depending upon\n   server implementation) command completion result.\n\n3.1.    Non-Authenticated State\n\n   In non-authenticated state, the client MUST supply authentication\n   credentials before most commands will be permitted.  This state is\n   entered when a connection starts unless the connection has been pre-\n   authenticated.\n\n3.2.    Authenticated State\n\n   In authenticated state, the client is authenticated and MUST select a\n   mailbox to access before commands that affect messages will be\n   permitted.  This state is entered when a pre-authenticated connection\n   starts, when acceptable authentication credentials have been\n   provided, or after an error in selecting a mailbox.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 11]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n3.3.    Selected State\n\n   In selected state, a mailbox has been selected to access.  This state\n   is entered when a mailbox has been successfully selected.\n\n3.4.    Logout State\n\n   In logout state, the connection is being terminated, and the server\n   will close the connection.  This state can be entered as a result of\n   a client request or by unilateral server decision.\n\n            +--------------------------------------+\n            |initial connection and server greeting|\n            +--------------------------------------+\n                      || (1)       || (2)        || (3)\n                      VV           ||            ||\n            +-----------------+    ||            ||\n            |non-authenticated|    ||            ||\n            +-----------------+    ||            ||\n             || (7)   || (4)       ||            ||\n             ||       VV           VV            ||\n             ||     +----------------+           ||\n             ||     | authenticated  |<=++       ||\n             ||     +----------------+  ||       ||\n             ||       || (7)   || (5)   || (6)   ||\n             ||       ||       VV       ||       ||\n             ||       ||    +--------+  ||       ||\n             ||       ||    |selected|==++       ||\n             ||       ||    +--------+           ||\n             ||       ||       || (7)            ||\n             VV       VV       VV                VV\n            +--------------------------------------+\n            |     logout and close connection      |\n            +--------------------------------------+\n\n         (1) connection without pre-authentication (OK greeting)\n         (2) pre-authenticated connection (PREAUTH greeting)\n         (3) rejected connection (BYE greeting)\n         (4) successful LOGIN or AUTHENTICATE command\n         (5) successful SELECT or EXAMINE command\n         (6) CLOSE command, or failed SELECT or EXAMINE command\n         (7) LOGOUT command, server shutdown, or connection closed\n\n4.      Data Formats\n\n   IMAP4rev1 uses textual commands and responses.  Data in IMAP4rev1 can\n   be in one of several forms: atom, number, string, parenthesized list,\n   or NIL.\n\n\n\nCrispin                     Standards Track                    [Page 12]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n4.1.    Atom\n\n   An atom consists of one or more non-special characters.\n\n4.2.    Number\n\n   A number consists of one or more digit characters, and represents a\n   numeric value.\n\n4.3.    String\n\n   A string is in one of two forms: literal and quoted string.  The\n   literal form is the general form of string.  The quoted string form\n   is an alternative that avoids the overhead of processing a literal at\n   the cost of limitations of characters that can be used in a quoted\n   string.\n\n   A literal is a sequence of zero or more octets (including CR and LF),\n   prefix-quoted with an octet count in the form of an open brace (\"{\"),\n   the number of octets, close brace (\"}\"), and CRLF.  In the case of\n   literals transmitted from server to client, the CRLF is immediately\n   followed by the octet data.  In the case of literals transmitted from\n   client to server, the client MUST wait to receive a command\n   continuation request (described later in this document) before\n   sending the octet data (and the remainder of the command).\n\n   A quoted string is a sequence of zero or more 7-bit characters,\n   excluding CR and LF, with double quote (<\">) characters at each end.\n\n   The empty string is represented as either \"\" (a quoted string with\n   zero characters between double quotes) or as {0} followed by CRLF (a\n   literal with an octet count of 0).\n\n      Note: Even if the octet count is 0, a client transmitting a\n      literal MUST wait to receive a command continuation request.\n\n4.3.1.  8-bit and Binary Strings\n\n   8-bit textual and binary mail is supported through the use of a\n   [MIME-IMB] content transfer encoding.  IMAP4rev1 implementations MAY\n   transmit 8-bit or multi-octet characters in literals, but SHOULD do\n   so only when the [CHARSET] is identified.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 13]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Although a BINARY body encoding is defined, unencoded binary strings\n   are not permitted.  A \"binary string\" is any string with NUL\n   characters.  Implementations MUST encode binary data into a textual\n   form such as BASE64 before transmitting the data.  A string with an\n   excessive amount of CTL characters MAY also be considered to be\n   binary.\n\n4.4.    Parenthesized List\n\n   Data structures are represented as a \"parenthesized list\"; a sequence\n   of data items, delimited by space, and bounded at each end by\n   parentheses.  A parenthesized list can contain other parenthesized\n   lists, using multiple levels of parentheses to indicate nesting.\n\n   The empty list is represented as () -- a parenthesized list with no\n   members.\n\n4.5.    NIL\n\n   The special atom \"NIL\" represents the non-existence of a particular\n   data item that is represented as a string or parenthesized list, as\n   distinct from the empty string \"\" or the empty parenthesized list ().\n\n5.      Operational Considerations\n\n5.1.    Mailbox Naming\n\n   The interpretation of mailbox names is implementation-dependent.\n   However, the case-insensitive mailbox name INBOX is a special name\n   reserved to mean \"the primary mailbox for this user on this server\".\n\n5.1.1.  Mailbox Hierarchy Naming\n\n   If it is desired to export hierarchical mailbox names, mailbox names\n   MUST be left-to-right hierarchical using a single character to\n   separate levels of hierarchy.  The same hierarchy separator character\n   is used for all levels of hierarchy within a single name.\n\n5.1.2.  Mailbox Namespace Naming Convention\n\n   By convention, the first hierarchical element of any mailbox name\n   which begins with \"#\" identifies the \"namespace\" of the remainder of\n   the name.  This makes it possible to disambiguate between different\n   types of mailbox stores, each of which have their own namespaces.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 14]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      For example, implementations which offer access to USENET\n      newsgroups MAY use the \"#news\" namespace to partition the USENET\n      newsgroup namespace from that of other mailboxes.  Thus, the\n      comp.mail.misc newsgroup would have an mailbox name of\n      \"#news.comp.mail.misc\", and the name \"comp.mail.misc\" could refer\n      to a different object (e.g. a user's private mailbox).\n\n5.1.3.  Mailbox International Naming Convention\n\n   By convention, international mailbox names are specified using a\n   modified version of the UTF-7 encoding described in [UTF-7].  The\n   purpose of these modifications is to correct the following problems\n   with UTF-7:\n\n      1) UTF-7 uses the \"+\" character for shifting; this conflicts with\n         the common use of \"+\" in mailbox names, in particular USENET\n         newsgroup names.\n\n      2) UTF-7's encoding is BASE64 which uses the \"/\" character; this\n         conflicts with the use of \"/\" as a popular hierarchy delimiter.\n\n      3) UTF-7 prohibits the unencoded usage of \"\\\"; this conflicts with\n         the use of \"\\\" as a popular hierarchy delimiter.\n\n      4) UTF-7 prohibits the unencoded usage of \"~\"; this conflicts with\n         the use of \"~\" in some servers as a home directory indicator.\n\n      5) UTF-7 permits multiple alternate forms to represent the same\n         string; in particular, printable US-ASCII chararacters can be\n         represented in encoded form.\n\n   In modified UTF-7, printable US-ASCII characters except for \"&\"\n   represent themselves; that is, characters with octet values 0x20-0x25\n   and 0x27-0x7e.  The character \"&\" (0x26) is represented by the two-\n   octet sequence \"&-\".\n\n   All other characters (octet values 0x00-0x1f, 0x7f-0xff, and all\n   Unicode 16-bit octets) are represented in modified BASE64, with a\n   further modification from [UTF-7] that \",\" is used instead of \"/\".\n   Modified BASE64 MUST NOT be used to represent any printing US-ASCII\n   character which can represent itself.\n\n   \"&\" is used to shift to modified BASE64 and \"-\" to shift back to US-\n   ASCII.  All names start in US-ASCII, and MUST end in US-ASCII (that\n   is, a name that ends with a Unicode 16-bit octet MUST end with a \"-\n   \").\n\n\n\n\n\nCrispin                     Standards Track                    [Page 15]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      For example, here is a mailbox name which mixes English, Japanese,\n      and Chinese text: ~peter/mail/&ZeVnLIqe-/&U,BTFw-\n\n5.2.    Mailbox Size and Message Status Updates\n\n   At any time, a server can send data that the client did not request.\n   Sometimes, such behavior is REQUIRED.  For example, agents other than\n   the server MAY add messages to the mailbox (e.g. new mail delivery),\n   change the flags of message in the mailbox (e.g. simultaneous access\n   to the same mailbox by multiple agents), or even remove messages from\n   the mailbox.  A server MUST send mailbox size updates automatically\n   if a mailbox size change is observed during the processing of a\n   command.  A server SHOULD send message flag updates automatically,\n   without requiring the client to request such updates explicitly.\n   Special rules exist for server notification of a client about the\n   removal of messages to prevent synchronization errors; see the\n   description of the EXPUNGE response for more detail.\n\n   Regardless of what implementation decisions a client makes on\n   remembering data from the server, a client implementation MUST record\n   mailbox size updates.  It MUST NOT assume that any command after\n   initial mailbox selection will return the size of the mailbox.\n\n5.3.    Response when no Command in Progress\n\n   Server implementations are permitted to send an untagged response\n   (except for EXPUNGE) while there is no command in progress.  Server\n   implementations that send such responses MUST deal with flow control\n   considerations.  Specifically, they MUST either (1) verify that the\n   size of the data does not exceed the underlying transport's available\n   window size, or (2) use non-blocking writes.\n\n5.4.    Autologout Timer\n\n   If a server has an inactivity autologout timer, that timer MUST be of\n   at least 30 minutes' duration.  The receipt of ANY command from the\n   client during that interval SHOULD suffice to reset the autologout\n   timer.\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 16]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n5.5.    Multiple Commands in Progress\n\n   The client MAY send another command without waiting for the\n   completion result response of a command, subject to ambiguity rules\n   (see below) and flow control constraints on the underlying data\n   stream.  Similarly, a server MAY begin processing another command\n   before processing the current command to completion, subject to\n   ambiguity rules.  However, any command continuation request responses\n   and command continuations MUST be negotiated before any subsequent\n   command is initiated.\n\n   The exception is if an ambiguity would result because of a command\n   that would affect the results of other commands.  Clients MUST NOT\n   send multiple commands without waiting if an ambiguity would result.\n   If the server detects a possible ambiguity, it MUST execute commands\n   to completion in the order given by the client.\n\n   The most obvious example of ambiguity is when a command would affect\n   the results of another command; for example, a FETCH of a message's\n   flags and a STORE of that same message's flags.\n\n   A non-obvious ambiguity occurs with commands that permit an untagged\n   EXPUNGE response (commands other than FETCH, STORE, and SEARCH),\n   since an untagged EXPUNGE response can invalidate sequence numbers in\n   a subsequent command.  This is not a problem for FETCH, STORE, or\n   SEARCH commands because servers are prohibited from sending EXPUNGE\n   responses while any of those commands are in progress.  Therefore, if\n   the client sends any command other than FETCH, STORE, or SEARCH, it\n   MUST wait for a response before sending a command with message\n   sequence numbers.\n\n   For example, the following non-waiting command sequences are invalid:\n\n      FETCH + NOOP + STORE\n      STORE + COPY + FETCH\n      COPY + COPY\n      CHECK + FETCH\n\n   The following are examples of valid non-waiting command sequences:\n\n      FETCH + STORE + SEARCH + CHECK\n      STORE + COPY + EXPUNGE\n\n6.      Client Commands\n\n   IMAP4rev1 commands are described in this section.  Commands are\n   organized by the state in which the command is permitted.  Commands\n   which are permitted in multiple states are listed in the minimum\n\n\n\nCrispin                     Standards Track                    [Page 17]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   permitted state (for example, commands valid in authenticated and\n   selected state are listed in the authenticated state commands).\n\n   Command arguments, identified by \"Arguments:\" in the command\n   descriptions below, are described by function, not by syntax.  The\n   precise syntax of command arguments is described in the Formal Syntax\n   section.\n\n   Some commands cause specific server responses to be returned; these\n   are identified by \"Responses:\" in the command descriptions below.\n   See the response descriptions in the Responses section for\n   information on these responses, and the Formal Syntax section for the\n   precise syntax of these responses.  It is possible for server data to\n   be transmitted as a result of any command; thus, commands that do not\n   specifically require server data specify \"no specific responses for\n   this command\" instead of \"none\".\n\n   The \"Result:\" in the command description refers to the possible\n   tagged status responses to a command, and any special interpretation\n   of these status responses.\n\n6.1.    Client Commands - Any State\n\n   The following commands are valid in any state: CAPABILITY, NOOP, and\n   LOGOUT.\n\n6.1.1.  CAPABILITY Command\n\n   Arguments:  none\n\n   Responses:  REQUIRED untagged response: CAPABILITY\n\n   Result:     OK - capability completed\n               BAD - command unknown or arguments invalid\n\n      The CAPABILITY command requests a listing of capabilities that the\n      server supports.  The server MUST send a single untagged\n      CAPABILITY response with \"IMAP4rev1\" as one of the listed\n      capabilities before the (tagged) OK response.  This listing of\n      capabilities is not dependent upon connection state or user.  It\n      is therefore not necessary to issue a CAPABILITY command more than\n      once in a connection.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 18]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      A capability name which begins with \"AUTH=\" indicates that the\n      server supports that particular authentication mechanism.  All\n      such names are, by definition, part of this specification.  For\n      example, the authorization capability for an experimental\n      \"blurdybloop\" authenticator would be \"AUTH=XBLURDYBLOOP\" and not\n      \"XAUTH=BLURDYBLOOP\" or \"XAUTH=XBLURDYBLOOP\".\n\n      Other capability names refer to extensions, revisions, or\n      amendments to this specification.  See the documentation of the\n      CAPABILITY response for additional information.  No capabilities,\n      beyond the base IMAP4rev1 set defined in this specification, are\n      enabled without explicit client action to invoke the capability.\n\n      See the section entitled \"Client Commands -\n      Experimental/Expansion\" for information about the form of site or\n      implementation-specific capabilities.\n\n   Example:    C: abcd CAPABILITY\n               S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4\n               S: abcd OK CAPABILITY completed\n\n6.1.2.  NOOP Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command (but see below)\n\n   Result:     OK - noop completed\n               BAD - command unknown or arguments invalid\n\n      The NOOP command always succeeds.  It does nothing.\n\n      Since any command can return a status update as untagged data, the\n      NOOP command can be used as a periodic poll for new messages or\n      message status updates during a period of inactivity.  The NOOP\n      command can also be used to reset any inactivity autologout timer\n      on the server.\n\n   Example:    C: a002 NOOP\n               S: a002 OK NOOP completed\n                  . . .\n               C: a047 NOOP\n               S: * 22 EXPUNGE\n               S: * 23 EXISTS\n               S: * 3 RECENT\n               S: * 14 FETCH (FLAGS (\\Seen \\Deleted))\n               S: a047 OK NOOP completed\n\n\n\n\nCrispin                     Standards Track                    [Page 19]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n6.1.3.  LOGOUT Command\n\n   Arguments:  none\n\n   Responses:  REQUIRED untagged response: BYE\n\n   Result:     OK - logout completed\n               BAD - command unknown or arguments invalid\n\n      The LOGOUT command informs the server that the client is done with\n      the connection.  The server MUST send a BYE untagged response\n      before the (tagged) OK response, and then close the network\n      connection.\n\n   Example:    C: A023 LOGOUT\n               S: * BYE IMAP4rev1 Server logging out\n               S: A023 OK LOGOUT completed\n               (Server and client then close the connection)\n\n6.2.    Client Commands - Non-Authenticated State\n\n   In non-authenticated state, the AUTHENTICATE or LOGIN command\n   establishes authentication and enter authenticated state.  The\n   AUTHENTICATE command provides a general mechanism for a variety of\n   authentication techniques, whereas the LOGIN command uses the\n   traditional user name and plaintext password pair.\n\n   Server implementations MAY allow non-authenticated access to certain\n   mailboxes.  The convention is to use a LOGIN command with the userid\n   \"anonymous\".  A password is REQUIRED.  It is implementation-dependent\n   what requirements, if any, are placed on the password and what access\n   restrictions are placed on anonymous users.\n\n   Once authenticated (including as anonymous), it is not possible to\n   re-enter non-authenticated state.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in non-authenticated state:\n   AUTHENTICATE and LOGIN.\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 20]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n6.2.1.  AUTHENTICATE Command\n\n   Arguments:  authentication mechanism name\n\n   Responses:  continuation data can be requested\n\n   Result:     OK - authenticate completed, now in authenticated state\n               NO - authenticate failure: unsupported authentication\n                    mechanism, credentials rejected\n              BAD - command unknown or arguments invalid,\n                    authentication exchange cancelled\n\n      The AUTHENTICATE command indicates an authentication mechanism,\n      such as described in [IMAP-AUTH], to the server.  If the server\n      supports the requested authentication mechanism, it performs an\n      authentication protocol exchange to authenticate and identify the\n      client.  It MAY also negotiate an OPTIONAL protection mechanism\n      for subsequent protocol interactions.  If the requested\n      authentication mechanism is not supported, the server SHOULD\n      reject the AUTHENTICATE command by sending a tagged NO response.\n\n      The authentication protocol exchange consists of a series of\n      server challenges and client answers that are specific to the\n      authentication mechanism.  A server challenge consists of a\n      command continuation request response with the \"+\" token followed\n      by a BASE64 encoded string.  The client answer consists of a line\n      consisting of a BASE64 encoded string.  If the client wishes to\n      cancel an authentication exchange, it issues a line with a single\n      \"*\".  If the server receives such an answer, it MUST reject the\n      AUTHENTICATE command by sending a tagged BAD response.\n\n      A protection mechanism provides integrity and privacy protection\n      to the connection.  If a protection mechanism is negotiated, it is\n      applied to all subsequent data sent over the connection.  The\n      protection mechanism takes effect immediately following the CRLF\n      that concludes the authentication exchange for the client, and the\n      CRLF of the tagged OK response for the server.  Once the\n      protection mechanism is in effect, the stream of command and\n      response octets is processed into buffers of ciphertext.  Each\n      buffer is transferred over the connection as a stream of octets\n      prepended with a four octet field in network byte order that\n      represents the length of the following data.  The maximum\n      ciphertext buffer length is defined by the protection mechanism.\n\n      Authentication mechanisms are OPTIONAL.  Protection mechanisms are\n      also OPTIONAL; an authentication mechanism MAY be implemented\n      without any protection mechanism.  If an AUTHENTICATE command\n      fails with a NO response, the client MAY try another\n\n\n\nCrispin                     Standards Track                    [Page 21]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      authentication mechanism by issuing another AUTHENTICATE command,\n      or MAY attempt to authenticate by using the LOGIN command.  In\n      other words, the client MAY request authentication types in\n      decreasing order of preference, with the LOGIN command as a last\n      resort.\n\n   Example:    S: * OK KerberosV4 IMAP4rev1 Server\n               C: A001 AUTHENTICATE KERBEROS_V4\n               S: + AmFYig==\n               C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n                  +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n                  WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n               S: + or//EoAADZI=\n               C: DiAF5A4gA+oOIALuBkAAmw==\n               S: A001 OK Kerberos V4 authentication successful\n\n      Note: the line breaks in the first client answer are for editorial\n      clarity and are not in real authenticators.\n\n6.2.2.  LOGIN Command\n\n   Arguments:  user name\n               password\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - login completed, now in authenticated state\n               NO - login failure: user name or password rejected\n               BAD - command unknown or arguments invalid\n\n      The LOGIN command identifies the client to the server and carries\n      the plaintext password authenticating this user.\n\n   Example:    C: a001 LOGIN SMITH SESAME\n               S: a001 OK LOGIN completed\n\n6.3.    Client Commands - Authenticated State\n\n   In authenticated state, commands that manipulate mailboxes as atomic\n   entities are permitted.  Of these commands, the SELECT and EXAMINE\n   commands will select a mailbox for access and enter selected state.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in authenticated state: SELECT,\n   EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB,\n   STATUS, and APPEND.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 22]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n6.3.1.  SELECT Command\n\n   Arguments:  mailbox name\n\n   Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT\n               OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS\n\n   Result:     OK - select completed, now in selected state\n               NO - select failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n               BAD - command unknown or arguments invalid\n\n   The SELECT command selects a mailbox so that messages in the\n   mailbox can be accessed.  Before returning an OK to the client,\n   the server MUST send the following untagged data to the client:\n\n      FLAGS       Defined flags in the mailbox.  See the description\n                  of the FLAGS response for more detail.\n\n      <n> EXISTS  The number of messages in the mailbox.  See the\n                  description of the EXISTS response for more detail.\n\n      <n> RECENT  The number of messages with the \\Recent flag set.\n                  See the description of the RECENT response for more\n                  detail.\n\n      OK [UIDVALIDITY <n>]\n                  The unique identifier validity value.  See the\n                  description of the UID command for more detail.\n\n   to define the initial state of the mailbox at the client.\n\n   The server SHOULD also send an UNSEEN response code in an OK\n   untagged response, indicating the message sequence number of the\n   first unseen message in the mailbox.\n\n   If the client can not change the permanent state of one or more of\n   the flags listed in the FLAGS untagged response, the server SHOULD\n   send a PERMANENTFLAGS response code in an OK untagged response,\n   listing the flags that the client can change permanently.\n\n   Only one mailbox can be selected at a time in a connection;\n   simultaneous access to multiple mailboxes requires multiple\n   connections.  The SELECT command automatically deselects any\n   currently selected mailbox before attempting the new selection.\n   Consequently, if a mailbox is selected and a SELECT command that\n   fails is attempted, no mailbox is selected.\n\n\n\n\nCrispin                     Standards Track                    [Page 23]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   If the client is permitted to modify the mailbox, the server\n   SHOULD prefix the text of the tagged OK response with the\n         \"[READ-WRITE]\" response code.\n\n      If the client is not permitted to modify the mailbox but is\n      permitted read access, the mailbox is selected as read-only, and\n      the server MUST prefix the text of the tagged OK response to\n      SELECT with the \"[READ-ONLY]\" response code.  Read-only access\n      through SELECT differs from the EXAMINE command in that certain\n      read-only mailboxes MAY permit the change of permanent state on a\n      per-user (as opposed to global) basis.  Netnews messages marked in\n      a server-based .newsrc file are an example of such per-user\n      permanent state that can be modified with read-only mailboxes.\n\n   Example:    C: A142 SELECT INBOX\n               S: * 172 EXISTS\n               S: * 1 RECENT\n               S: * OK [UNSEEN 12] Message 12 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n               S: A142 OK [READ-WRITE] SELECT completed\n\n6.3.2.  EXAMINE Command\n\n   Arguments:  mailbox name\n\n   Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT\n               OPTIONAL OK untagged responses: UNSEEN, PERMANENTFLAGS\n\n   Result:     OK - examine completed, now in selected state\n               NO - examine failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n               BAD - command unknown or arguments invalid\n\n      The EXAMINE command is identical to SELECT and returns the same\n      output; however, the selected mailbox is identified as read-only.\n      No changes to the permanent state of the mailbox, including\n      per-user state, are permitted.\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 24]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      The text of the tagged OK response to the EXAMINE command MUST\n      begin with the \"[READ-ONLY]\" response code.\n\n   Example:    C: A932 EXAMINE blurdybloop\n               S: * 17 EXISTS\n               S: * 2 RECENT\n               S: * OK [UNSEEN 8] Message 8 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS ()] No permanent flags permitted\n               S: A932 OK [READ-ONLY] EXAMINE completed\n\n6.3.3.  CREATE Command\n\n   Arguments:  mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - create completed\n               NO - create failure: can't create mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The CREATE command creates a mailbox with the given name.  An OK\n      response is returned only if a new mailbox with that name has been\n      created.  It is an error to attempt to create INBOX or a mailbox\n      with a name that refers to an extant mailbox.  Any error in\n      creation will return a tagged NO response.\n\n      If the mailbox name is suffixed with the server's hierarchy\n      separator character (as returned from the server by a LIST\n      command), this is a declaration that the client intends to create\n      mailbox names under this name in the hierarchy.  Server\n      implementations that do not require this declaration MUST ignore\n      it.\n\n      If the server's hierarchy separator character appears elsewhere in\n      the name, the server SHOULD create any superior hierarchical names\n      that are needed for the CREATE command to complete successfully.\n      In other words, an attempt to create \"foo/bar/zap\" on a server in\n      which \"/\" is the hierarchy separator character SHOULD create foo/\n      and foo/bar/ if they do not already exist.\n\n      If a new mailbox is created with the same name as a mailbox which\n      was deleted, its unique identifiers MUST be greater than any\n      unique identifiers used in the previous incarnation of the mailbox\n      UNLESS the new incarnation has a different unique identifier\n      validity value.  See the description of the UID command for more\n      detail.\n\n\n\nCrispin                     Standards Track                    [Page 25]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Example:    C: A003 CREATE owatagusiam/\n               S: A003 OK CREATE completed\n               C: A004 CREATE owatagusiam/blurdybloop\n               S: A004 OK CREATE completed\n\n      Note: the interpretation of this example depends on whether \"/\"\n      was returned as the hierarchy separator from LIST.  If \"/\" is the\n      hierarchy separator, a new level of hierarchy named \"owatagusiam\"\n      with a member called \"blurdybloop\" is created.  Otherwise, two\n      mailboxes at the same hierarchy level are created.\n\n6.3.4.  DELETE Command\n\n   Arguments:  mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - delete completed\n               NO - delete failure: can't delete mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The DELETE command permanently removes the mailbox with the given\n      name.  A tagged OK response is returned only if the mailbox has\n      been deleted.  It is an error to attempt to delete INBOX or a\n      mailbox name that does not exist.\n\n      The DELETE command MUST NOT remove inferior hierarchical names.\n      For example, if a mailbox \"foo\" has an inferior \"foo.bar\"\n      (assuming \".\" is the hierarchy delimiter character), removing\n      \"foo\" MUST NOT remove \"foo.bar\".  It is an error to attempt to\n      delete a name that has inferior hierarchical names and also has\n      the \\Noselect mailbox name attribute (see the description of the\n      LIST response for more details).\n\n      It is permitted to delete a name that has inferior hierarchical\n      names and does not have the \\Noselect mailbox name attribute.  In\n      this case, all messages in that mailbox are removed, and the name\n      will acquire the \\Noselect mailbox name attribute.\n\n      The value of the highest-used unique identifier of the deleted\n      mailbox MUST be preserved so that a new mailbox created with the\n      same name will not reuse the identifiers of the former\n      incarnation, UNLESS the new incarnation has a different unique\n      identifier validity value.  See the description of the UID command\n      for more detail.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 26]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Examples:   C: A682 LIST \"\" *\n               S: * LIST () \"/\" blurdybloop\n               S: * LIST (\\Noselect) \"/\" foo\n               S: * LIST () \"/\" foo/bar\n               S: A682 OK LIST completed\n               C: A683 DELETE blurdybloop\n               S: A683 OK DELETE completed\n               C: A684 DELETE foo\n               S: A684 NO Name \"foo\" has inferior hierarchical names\n               C: A685 DELETE foo/bar\n               S: A685 OK DELETE Completed\n               C: A686 LIST \"\" *\n               S: * LIST (\\Noselect) \"/\" foo\n               S: A686 OK LIST completed\n               C: A687 DELETE foo\n               S: A687 OK DELETE Completed\n\n\n               C: A82 LIST \"\" *\n               S: * LIST () \".\" blurdybloop\n               S: * LIST () \".\" foo\n               S: * LIST () \".\" foo.bar\n               S: A82 OK LIST completed\n               C: A83 DELETE blurdybloop\n               S: A83 OK DELETE completed\n               C: A84 DELETE foo\n               S: A84 OK DELETE Completed\n               C: A85 LIST \"\" *\n               S: * LIST () \".\" foo.bar\n               S: A85 OK LIST completed\n               C: A86 LIST \"\" %\n               S: * LIST (\\Noselect) \".\" foo\n               S: A86 OK LIST completed\n\n6.3.5.  RENAME Command\n\n   Arguments:  existing mailbox name\n               new mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - rename completed\n               NO - rename failure: can't rename mailbox with that name,\n                    can't rename to mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The RENAME command changes the name of a mailbox.  A tagged OK\n      response is returned only if the mailbox has been renamed.  It is\n\n\n\nCrispin                     Standards Track                    [Page 27]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      an error to attempt to rename from a mailbox name that does not\n      exist or to a mailbox name that already exists.  Any error in\n      renaming will return a tagged NO response.\n\n      If the name has inferior hierarchical names, then the inferior\n      hierarchical names MUST also be renamed.  For example, a rename of\n      \"foo\" to \"zap\" will rename \"foo/bar\" (assuming \"/\" is the\n      hierarchy delimiter character) to \"zap/bar\".\n\n      The value of the highest-used unique identifier of the old mailbox\n      name MUST be preserved so that a new mailbox created with the same\n      name will not reuse the identifiers of the former incarnation,\n      UNLESS the new incarnation has a different unique identifier\n      validity value.  See the description of the UID command for more\n      detail.\n\n      Renaming INBOX is permitted, and has special behavior.  It moves\n      all messages in INBOX to a new mailbox with the given name,\n      leaving INBOX empty.  If the server implementation supports\n      inferior hierarchical names of INBOX, these are unaffected by a\n      rename of INBOX.\n\n   Examples:   C: A682 LIST \"\" *\n               S: * LIST () \"/\" blurdybloop\n               S: * LIST (\\Noselect) \"/\" foo\n               S: * LIST () \"/\" foo/bar\n               S: A682 OK LIST completed\n               C: A683 RENAME blurdybloop sarasoop\n               S: A683 OK RENAME completed\n               C: A684 RENAME foo zowie\n               S: A684 OK RENAME Completed\n               C: A685 LIST \"\" *\n               S: * LIST () \"/\" sarasoop\n               S: * LIST (\\Noselect) \"/\" zowie\n               S: * LIST () \"/\" zowie/bar\n               S: A685 OK LIST completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 28]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n               C: Z432 LIST \"\" *\n               S: * LIST () \".\" INBOX\n               S: * LIST () \".\" INBOX.bar\n               S: Z432 OK LIST completed\n               C: Z433 RENAME INBOX old-mail\n               S: Z433 OK RENAME completed\n               C: Z434 LIST \"\" *\n               S: * LIST () \".\" INBOX\n               S: * LIST () \".\" INBOX.bar\n               S: * LIST () \".\" old-mail\n               S: Z434 OK LIST completed\n\n6.3.6.  SUBSCRIBE Command\n\n   Arguments:  mailbox\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - subscribe completed\n               NO - subscribe failure: can't subscribe to that name\n               BAD - command unknown or arguments invalid\n\n      The SUBSCRIBE command adds the specified mailbox name to the\n      server's set of \"active\" or \"subscribed\" mailboxes as returned by\n      the LSUB command.  This command returns a tagged OK response only\n      if the subscription is successful.\n\n      A server MAY validate the mailbox argument to SUBSCRIBE to verify\n      that it exists.  However, it MUST NOT unilaterally remove an\n      existing mailbox name from the subscription list even if a mailbox\n      by that name no longer exists.\n\n      Note: this requirement is because some server sites may routinely\n      remove a mailbox with a well-known name (e.g.  \"system-alerts\")\n      after its contents expire, with the intention of recreating it\n      when new contents are appropriate.\n\n   Example:    C: A002 SUBSCRIBE #news.comp.mail.mime\n               S: A002 OK SUBSCRIBE completed\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 29]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n6.3.7.  UNSUBSCRIBE Command\n\n   Arguments:  mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - unsubscribe completed\n               NO - unsubscribe failure: can't unsubscribe that name\n               BAD - command unknown or arguments invalid\n\n      The UNSUBSCRIBE command removes the specified mailbox name from\n      the server's set of \"active\" or \"subscribed\" mailboxes as returned\n      by the LSUB command.  This command returns a tagged OK response\n      only if the unsubscription is successful.\n\n   Example:    C: A002 UNSUBSCRIBE #news.comp.mail.mime\n               S: A002 OK UNSUBSCRIBE completed\n\n6.3..8.  LIST Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Responses:  untagged responses: LIST\n\n   Result:     OK - list completed\n               NO - list failure: can't list that reference or name\n               BAD - command unknown or arguments invalid\n\n      The LIST command returns a subset of names from the complete set\n      of all names available to the client.  Zero or more untagged LIST\n      replies are returned, containing the name attributes, hierarchy\n      delimiter, and name; see the description of the LIST reply for\n      more detail.\n\n      The LIST command SHOULD return its data quickly, without undue\n      delay.  For example, it SHOULD NOT go to excess trouble to\n      calculate \\Marked or \\Unmarked status or perform other processing;\n      if each name requires 1 second of processing, then a list of 1200\n      names would take 20 minutes!\n\n      An empty (\"\" string) reference name argument indicates that the\n      mailbox name is interpreted as by SELECT. The returned mailbox\n      names MUST match the supplied mailbox name pattern.  A non-empty\n      reference name argument is the name of a mailbox or a level of\n      mailbox hierarchy, and indicates a context in which the mailbox\n      name is interpreted in an implementation-defined manner.\n\n\n\n\nCrispin                     Standards Track                    [Page 30]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      An empty (\"\" string) mailbox name argument is a special request to\n      return the hierarchy delimiter and the root name of the name given\n      in the reference.  The value returned as the root MAY be null if\n      the reference is non-rooted or is null.  In all cases, the\n      hierarchy delimiter is returned.  This permits a client to get the\n      hierarchy delimiter even when no mailboxes by that name currently\n      exist.\n\n      The reference and mailbox name arguments are interpreted, in an\n      implementation-dependent fashion, into a canonical form that\n      represents an unambiguous left-to-right hierarchy.  The returned\n      mailbox names will be in the interpreted form.\n\n      Any part of the reference argument that is included in the\n      interpreted form SHOULD prefix the interpreted form.  It SHOULD\n      also be in the same form as the reference name argument.  This\n      rule permits the client to determine if the returned mailbox name\n      is in the context of the reference argument, or if something about\n      the mailbox argument overrode the reference argument.  Without\n      this rule, the client would have to have knowledge of the server's\n      naming semantics including what characters are \"breakouts\" that\n      override a naming context.\n\n      For example, here are some examples of how references and mailbox\n      names might be interpreted on a UNIX-based server:\n\n               Reference     Mailbox Name  Interpretation\n               ------------  ------------  --------------\n               ~smith/Mail/  foo.*         ~smith/Mail/foo.*\n               archive/      %             archive/%\n               #news.        comp.mail.*   #news.comp.mail.*\n               ~smith/Mail/  /usr/doc/foo  /usr/doc/foo\n               archive/      ~fred/Mail/*  ~fred/Mail/*\n\n      The first three examples demonstrate interpretations in the\n      context of the reference argument.  Note that \"~smith/Mail\" SHOULD\n      NOT be transformed into something like \"/u2/users/smith/Mail\", or\n      it would be impossible for the client to determine that the\n      interpretation was in the context of the reference.\n\n      The character \"*\" is a wildcard, and matches zero or more\n      characters at this position.  The character \"%\" is similar to \"*\",\n      but it does not match a hierarchy delimiter.  If the \"%\" wildcard\n      is the last character of a mailbox name argument, matching levels\n      of hierarchy are also returned.  If these levels of hierarchy are\n      not also selectable mailboxes, they are returned with the\n      \\Noselect mailbox name attribute (see the description of the LIST\n      response for more details).\n\n\n\nCrispin                     Standards Track                    [Page 31]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      Server implementations are permitted to \"hide\" otherwise\n      accessible mailboxes from the wildcard characters, by preventing\n      certain characters or names from matching a wildcard in certain\n      situations.  For example, a UNIX-based server might restrict the\n      interpretation of \"*\" so that an initial \"/\" character does not\n      match.\n\n      The special name INBOX is included in the output from LIST, if\n      INBOX is supported by this server for this user and if the\n      uppercase string \"INBOX\" matches the interpreted reference and\n      mailbox name arguments with wildcards as described above.  The\n      criteria for omitting INBOX is whether SELECT INBOX will return\n      failure; it is not relevant whether the user's real INBOX resides\n      on this or some other server.\n\n   Example:    C: A101 LIST \"\" \"\"\n               S: * LIST (\\Noselect) \"/\" \"\"\n               S: A101 OK LIST Completed\n               C: A102 LIST #news.comp.mail.misc \"\"\n               S: * LIST (\\Noselect) \".\" #news.\n               S: A102 OK LIST Completed\n               C: A103 LIST /usr/staff/jones \"\"\n               S: * LIST (\\Noselect) \"/\" /\n               S: A103 OK LIST Completed\n               C: A202 LIST ~/Mail/ %\n               S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n               S: * LIST () \"/\" ~/Mail/meetings\n               S: A202 OK LIST completed\n\n6.3.9.  LSUB Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Responses:  untagged responses: LSUB\n\n   Result:     OK - lsub completed\n               NO - lsub failure: can't list that reference or name\n               BAD - command unknown or arguments invalid\n\n      The LSUB command returns a subset of names from the set of names\n      that the user has declared as being \"active\" or \"subscribed\".\n      Zero or more untagged LSUB replies are returned.  The arguments to\n      LSUB are in the same form as those for LIST.\n\n      A server MAY validate the subscribed names to see if they still\n      exist.  If a name does not exist, it SHOULD be flagged with the\n      \\Noselect attribute in the LSUB response.  The server MUST NOT\n\n\n\nCrispin                     Standards Track                    [Page 32]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      unilaterally remove an existing mailbox name from the subscription\n      list even if a mailbox by that name no longer exists.\n\n   Example:    C: A002 LSUB \"#news.\" \"comp.mail.*\"\n               S: * LSUB () \".\" #news.comp.mail.mime\n               S: * LSUB () \".\" #news.comp.mail.misc\n               S: A002 OK LSUB completed\n\n6.3.10. STATUS Command\n\n   Arguments:  mailbox name\n               status data item names\n\n   Responses:  untagged responses: STATUS\n\n   Result:     OK - status completed\n               NO - status failure: no status for that name\n               BAD - command unknown or arguments invalid\n\n      The STATUS command requests the status of the indicated mailbox.\n      It does not change the currently selected mailbox, nor does it\n      affect the state of any messages in the queried mailbox (in\n      particular, STATUS MUST NOT cause messages to lose the \\Recent\n      flag).\n\n      The STATUS command provides an alternative to opening a second\n      IMAP4rev1 connection and doing an EXAMINE command on a mailbox to\n      query that mailbox's status without deselecting the current\n      mailbox in the first IMAP4rev1 connection.\n\n      Unlike the LIST command, the STATUS command is not guaranteed to\n      be fast in its response.  In some implementations, the server is\n      obliged to open the mailbox read-only internally to obtain certain\n      status information.  Also unlike the LIST command, the STATUS\n      command does not accept wildcards.\n\n      The currently defined status data items that can be requested are:\n\n      MESSAGES       The number of messages in the mailbox.\n\n      RECENT         The number of messages with the \\Recent flag set.\n\n      UIDNEXT        The next UID value that will be assigned to a new\n                     message in the mailbox.  It is guaranteed that this\n                     value will not change unless new messages are added\n                     to the mailbox; and that it will change when new\n                     messages are added even if those new messages are\n                     subsequently expunged.\n\n\n\nCrispin                     Standards Track                    [Page 33]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      UIDVALIDITY    The unique identifier validity value of the\n                     mailbox.\n\n      UNSEEN         The number of messages which do not have the \\Seen\n                     flag set.\n\n\n      Example:    C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)\n                  S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)\n                  S: A042 OK STATUS completed\n\n6.3.11. APPEND Command\n\n   Arguments:  mailbox name\n               OPTIONAL flag parenthesized list\n               OPTIONAL date/time string\n               message literal\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - append completed\n               NO - append error: can't append to that mailbox, error\n                    in flags or date/time or message text\n               BAD - command unknown or arguments invalid\n\n      The APPEND command appends the literal argument as a new message\n      to the end of the specified destination mailbox.  This argument\n      SHOULD be in the format of an [RFC-822] message.  8-bit characters\n      are permitted in the message.  A server implementation that is\n      unable to preserve 8-bit data properly MUST be able to reversibly\n      convert 8-bit APPEND data to 7-bit using a [MIME-IMB] content\n      transfer encoding.\n\n      Note: There MAY be exceptions, e.g. draft messages, in which\n      required [RFC-822] header lines are omitted in the message literal\n      argument to APPEND.  The full implications of doing so MUST be\n      understood and carefully weighed.\n\n   If a flag parenthesized list is specified, the flags SHOULD be set in\n   the resulting message; otherwise, the flag list of the resulting\n   message is set empty by default.\n\n   If a date_time is specified, the internal date SHOULD be set in the\n   resulting message; otherwise, the internal date of the resulting\n   message is set to the current date and time by default.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 34]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   If the append is unsuccessful for any reason, the mailbox MUST be\n   restored to its state before the APPEND attempt; no partial appending\n   is permitted.\n\n   If the destination mailbox does not exist, a server MUST return an\n   error, and MUST NOT automatically create the mailbox.  Unless it is\n   certain that the destination mailbox can not be created, the server\n   MUST send the response code \"[TRYCREATE]\" as the prefix of the text\n   of the tagged NO response.  This gives a hint to the client that it\n   can attempt a CREATE command and retry the APPEND if the CREATE is\n   successful.\n\n   If the mailbox is currently selected, the normal new mail actions\n   SHOULD occur.  Specifically, the server SHOULD notify the client\n   immediately via an untagged EXISTS response.  If the server does not\n   do so, the client MAY issue a NOOP command (or failing that, a CHECK\n   command) after one or more APPEND commands.\n\n   Example:    C: A003 APPEND saved-messages (\\Seen) {310}\n               C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n               C: From: Fred Foobar <foobar@Blurdybloop.COM>\n               C: Subject: afternoon meeting\n               C: To: mooch@owatagu.siam.edu\n               C: Message-Id: <B27397-0100000@Blurdybloop.COM>\n               C: MIME-Version: 1.0\n               C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n               C:\n               C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n               C:\n               S: A003 OK APPEND completed\n\n      Note: the APPEND command is not used for message delivery, because\n      it does not provide a mechanism to transfer [SMTP] envelope\n      information.\n\n6.4.    Client Commands - Selected State\n\n   In selected state, commands that manipulate messages in a mailbox are\n   permitted.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   and the authenticated state commands (SELECT, EXAMINE, CREATE,\n   DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and\n   APPEND), the following commands are valid in the selected state:\n   CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 35]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n6.4.1.  CHECK Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - check completed\n               BAD - command unknown or arguments invalid\n\n      The CHECK command requests a checkpoint of the currently selected\n      mailbox.  A checkpoint refers to any implementation-dependent\n      housekeeping associated with the mailbox (e.g. resolving the\n      server's in-memory state of the mailbox with the state on its\n      disk) that is not normally executed as part of each command.  A\n      checkpoint MAY take a non-instantaneous amount of real time to\n      complete.  If a server implementation has no such housekeeping\n      considerations, CHECK is equivalent to NOOP.\n\n      There is no guarantee that an EXISTS untagged response will happen\n      as a result of CHECK.  NOOP, not CHECK, SHOULD be used for new\n      mail polling.\n\n   Example:    C: FXXZ CHECK\n               S: FXXZ OK CHECK Completed\n\n6.4.2.  CLOSE Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - close completed, now in authenticated state\n               NO - close failure: no mailbox selected\n               BAD - command unknown or arguments invalid\n\n      The CLOSE command permanently removes from the currently selected\n      mailbox all messages that have the \\Deleted flag set, and returns\n      to authenticated state from selected state.  No untagged EXPUNGE\n      responses are sent.\n\n      No messages are removed, and no error is given, if the mailbox is\n      selected by an EXAMINE command or is otherwise selected read-only.\n\n      Even if a mailbox is selected, a SELECT, EXAMINE, or LOGOUT\n      command MAY be issued without previously issuing a CLOSE command.\n      The SELECT, EXAMINE, and LOGOUT commands implicitly close the\n      currently selected mailbox without doing an expunge.  However,\n      when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT\n\n\n\nCrispin                     Standards Track                    [Page 36]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      sequence is considerably faster than an EXPUNGE-LOGOUT or\n      EXPUNGE-SELECT because no untagged EXPUNGE responses (which the\n      client would probably ignore) are sent.\n\n   Example:    C: A341 CLOSE\n               S: A341 OK CLOSE completed\n\n6.4.3.  EXPUNGE Command\n\n   Arguments:  none\n\n   Responses:  untagged responses: EXPUNGE\n\n   Result:     OK - expunge completed\n               NO - expunge failure: can't expunge (e.g. permission\n                    denied)\n               BAD - command unknown or arguments invalid\n\n      The EXPUNGE command permanently removes from the currently\n      selected mailbox all messages that have the \\Deleted flag set.\n      Before returning an OK to the client, an untagged EXPUNGE response\n      is sent for each message that is removed.\n\n   Example:    C: A202 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 5 EXPUNGE\n               S: * 8 EXPUNGE\n               S: A202 OK EXPUNGE completed\n\n      Note: in this example, messages 3, 4, 7, and 11 had the\n      \\Deleted flag set.  See the description of the EXPUNGE\n      response for further explanation.\n\n6.4.4.  SEARCH Command\n\n   Arguments:  OPTIONAL [CHARSET] specification\n               searching criteria (one or more)\n\n   Responses:  REQUIRED untagged response: SEARCH\n\n   Result:     OK - search completed\n               NO - search error: can't search that [CHARSET] or\n                    criteria\n               BAD - command unknown or arguments invalid\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 37]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      The SEARCH command searches the mailbox for messages that match\n      the given searching criteria.  Searching criteria consist of one\n      or more search keys.  The untagged SEARCH response from the server\n      contains a listing of message sequence numbers corresponding to\n      those messages that match the searching criteria.\n\n      When multiple keys are specified, the result is the intersection\n      (AND function) of all the messages that match those keys.  For\n      example, the criteria DELETED FROM \"SMITH\" SINCE 1-Feb-1994 refers\n      to all deleted messages from Smith that were placed in the mailbox\n      since February 1, 1994.  A search key can also be a parenthesized\n      list of one or more search keys (e.g. for use with the OR and NOT\n      keys).\n\n      Server implementations MAY exclude [MIME-IMB] body parts with\n      terminal content media types other than TEXT and MESSAGE from\n      consideration in SEARCH matching.\n\n      The OPTIONAL [CHARSET] specification consists of the word\n      \"CHARSET\" followed by a registered [CHARSET].  It indicates the\n      [CHARSET] of the strings that appear in the search criteria.\n      [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in\n      [RFC-822]/[MIME-IMB] headers, MUST be decoded before comparing\n      text in a [CHARSET] other than US-ASCII.  US-ASCII MUST be\n      supported; other [CHARSET]s MAY be supported.  If the server does\n      not support the specified [CHARSET], it MUST return a tagged NO\n      response (not a BAD).\n\n      In all search keys that use strings, a message matches the key if\n      the string is a substring of the field.  The matching is case-\n      insensitive.\n\n      The defined search keys are as follows.  Refer to the Formal\n      Syntax section for the precise syntactic definitions of the\n      arguments.\n\n      <message set>  Messages with message sequence numbers\n                     corresponding to the specified message sequence\n                     number set\n\n      ALL            All messages in the mailbox; the default initial\n                     key for ANDing.\n\n      ANSWERED       Messages with the \\Answered flag set.\n\n      BCC <string>   Messages that contain the specified string in the\n                     envelope structure's BCC field.\n\n\n\n\nCrispin                     Standards Track                    [Page 38]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      BEFORE <date>  Messages whose internal date is earlier than the\n                     specified date.\n\n      BODY <string>  Messages that contain the specified string in the\n                     body of the message.\n\n      CC <string>    Messages that contain the specified string in the\n                     envelope structure's CC field.\n\n      DELETED        Messages with the \\Deleted flag set.\n\n      DRAFT          Messages with the \\Draft flag set.\n\n      FLAGGED        Messages with the \\Flagged flag set.\n\n      FROM <string>  Messages that contain the specified string in the\n                     envelope structure's FROM field.\n\n      HEADER <field-name> <string>\n                     Messages that have a header with the specified\n                     field-name (as defined in [RFC-822]) and that\n                     contains the specified string in the [RFC-822]\n                     field-body.\n\n      KEYWORD <flag> Messages with the specified keyword set.\n\n      LARGER <n>     Messages with an [RFC-822] size larger than the\n                     specified number of octets.\n\n      NEW            Messages that have the \\Recent flag set but not the\n                     \\Seen flag.  This is functionally equivalent to\n                     \"(RECENT UNSEEN)\".\n\n      NOT <search-key>\n                     Messages that do not match the specified search\n                     key.\n\n      OLD            Messages that do not have the \\Recent flag set.\n                     This is functionally equivalent to \"NOT RECENT\" (as\n                     opposed to \"NOT NEW\").\n\n      ON <date>      Messages whose internal date is within the\n                     specified date.\n\n      OR <search-key1> <search-key2>\n                     Messages that match either search key.\n\n      RECENT         Messages that have the \\Recent flag set.\n\n\n\nCrispin                     Standards Track                    [Page 39]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      SEEN           Messages that have the \\Seen flag set.\n\n      SENTBEFORE <date>\n                     Messages whose [RFC-822] Date: header is earlier\n                     than the specified date.\n\n      SENTON <date>  Messages whose [RFC-822] Date: header is within the\n                     specified date.\n\n      SENTSINCE <date>\n                     Messages whose [RFC-822] Date: header is within or\n                     later than the specified date.\n\n      SINCE <date>   Messages whose internal date is within or later\n                     than the specified date.\n\n      SMALLER <n>    Messages with an [RFC-822] size smaller than the\n                     specified number of octets.\n\n      SUBJECT <string>\n                     Messages that contain the specified string in the\n                     envelope structure's SUBJECT field.\n\n      TEXT <string>  Messages that contain the specified string in the\n                     header or body of the message.\n\n      TO <string>    Messages that contain the specified string in the\n                     envelope structure's TO field.\n\n      UID <message set>\n                     Messages with unique identifiers corresponding to\n                     the specified unique identifier set.\n\n      UNANSWERED     Messages that do not have the \\Answered flag set.\n\n      UNDELETED      Messages that do not have the \\Deleted flag set.\n\n      UNDRAFT        Messages that do not have the \\Draft flag set.\n\n      UNFLAGGED      Messages that do not have the \\Flagged flag set.\n\n      UNKEYWORD <flag>\n                     Messages that do not have the specified keyword\n                     set.\n\n      UNSEEN         Messages that do not have the \\Seen flag set.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 40]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Example:    C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM \"Smith\"\n               S: * SEARCH 2 84 882\n               S: A282 OK SEARCH completed\n\n6.4.5.  FETCH Command\n\n   Arguments:  message set\n               message data item names\n\n   Responses:  untagged responses: FETCH\n\n   Result:     OK - fetch completed\n               NO - fetch error: can't fetch that data\n               BAD - command unknown or arguments invalid\n\n      The FETCH command retrieves data associated with a message in the\n      mailbox.  The data items to be fetched can be either a single atom\n      or a parenthesized list.\n\n      The currently defined data items that can be fetched are:\n\n      ALL            Macro equivalent to: (FLAGS INTERNALDATE\n                     RFC822.SIZE ENVELOPE)\n\n      BODY           Non-extensible form of BODYSTRUCTURE.\n\n      BODY[<section>]<<partial>>\n                     The text of a particular body section.  The section\n                     specification is a set of zero or more part\n                     specifiers delimited by periods.  A part specifier\n                     is either a part number or one of the following:\n                     HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and\n                     TEXT.  An empty section specification refers to the\n                     entire message, including the header.\n\n                     Every message has at least one part number.\n                     Non-[MIME-IMB] messages, and non-multipart\n                     [MIME-IMB] messages with no encapsulated message,\n                     only have a part 1.\n\n                     Multipart messages are assigned consecutive part\n                     numbers, as they occur in the message.  If a\n                     particular part is of type message or multipart,\n                     its parts MUST be indicated by a period followed by\n                     the part number within that nested multipart part.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 41]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                     A part of type MESSAGE/RFC822 also has nested part\n                     numbers, referring to parts of the MESSAGE part's\n                     body.\n\n                     The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and\n                     TEXT part specifiers can be the sole part specifier\n                     or can be prefixed by one or more numeric part\n                     specifiers, provided that the numeric part\n                     specifier refers to a part of type MESSAGE/RFC822.\n                     The MIME part specifier MUST be prefixed by one or\n                     more numeric part specifiers.\n\n                     The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT\n                     part specifiers refer to the [RFC-822] header of\n                     the message or of an encapsulated [MIME-IMT]\n                     MESSAGE/RFC822 message.  HEADER.FIELDS and\n                     HEADER.FIELDS.NOT are followed by a list of\n                     field-name (as defined in [RFC-822]) names, and\n                     return a subset of the header.  The subset returned\n                     by HEADER.FIELDS contains only those header fields\n                     with a field-name that matches one of the names in\n                     the list; similarly, the subset returned by\n                     HEADER.FIELDS.NOT contains only the header fields\n                     with a non-matching field-name.  The field-matching\n                     is case-insensitive but otherwise exact.  In all\n                     cases, the delimiting blank line between the header\n                     and the body is always included.\n\n                     The MIME part specifier refers to the [MIME-IMB]\n                     header for this part.\n\n                     The TEXT part specifier refers to the text body of\n                     the message, omitting the [RFC-822] header.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 42]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                       Here is an example of a complex message\n                       with some of its part specifiers:\n\n                        HEADER     ([RFC-822] header of the message)\n                        TEXT       MULTIPART/MIXED\n                        1          TEXT/PLAIN\n                        2          APPLICATION/OCTET-STREAM\n                        3          MESSAGE/RFC822\n                        3.HEADER   ([RFC-822] header of the message)\n                        3.TEXT     ([RFC-822] text body of the message)\n                        3.1        TEXT/PLAIN\n                        3.2        APPLICATION/OCTET-STREAM\n                        4          MULTIPART/MIXED\n                        4.1        IMAGE/GIF\n                        4.1.MIME   ([MIME-IMB] header for the IMAGE/GIF)\n                        4.2        MESSAGE/RFC822\n                        4.2.HEADER ([RFC-822] header of the message)\n                        4.2.TEXT   ([RFC-822] text body of the message)\n                        4.2.1      TEXT/PLAIN\n                        4.2.2      MULTIPART/ALTERNATIVE\n                        4.2.2.1    TEXT/PLAIN\n                        4.2.2.2    TEXT/RICHTEXT\n\n\n                     It is possible to fetch a substring of the\n                     designated text.  This is done by appending an open\n                     angle bracket (\"<\"), the octet position of the\n                     first desired octet, a period, the maximum number\n                     of octets desired, and a close angle bracket (\">\")\n                     to the part specifier.  If the starting octet is\n                     beyond the end of the text, an empty string is\n                     returned.\n\n                     Any partial fetch that attempts to read beyond the\n                     end of the text is truncated as appropriate.  A\n                     partial fetch that starts at octet 0 is returned as\n                     a partial fetch, even if this truncation happened.\n\n                          Note: this means that BODY[]<0.2048> of a\n                          1500-octet message will return BODY[]<0>\n                          with a literal of size 1500, not BODY[].\n\n                          Note: a substring fetch of a\n                          HEADER.FIELDS or HEADER.FIELDS.NOT part\n                          specifier is calculated after subsetting\n                          the header.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 43]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                     The \\Seen flag is implicitly set; if this causes\n                     the flags to change they SHOULD be included as part\n                     of the FETCH responses.\n\n      BODY.PEEK[<section>]<<partial>>\n                     An alternate form of BODY[<section>] that does not\n                     implicitly set the \\Seen flag.\n\n      BODYSTRUCTURE  The [MIME-IMB] body structure of the message.  This\n                     is computed by the server by parsing the [MIME-IMB]\n                     header fields in the [RFC-822] header and\n                     [MIME-IMB] headers.\n\n      ENVELOPE       The envelope structure of the message.  This is\n                     computed by the server by parsing the [RFC-822]\n                     header into the component parts, defaulting various\n                     fields as necessary.\n\n      FAST           Macro equivalent to: (FLAGS INTERNALDATE\n                     RFC822.SIZE)\n\n      FLAGS          The flags that are set for this message.\n\n      FULL           Macro equivalent to: (FLAGS INTERNALDATE\n                     RFC822.SIZE ENVELOPE BODY)\n\n      INTERNALDATE   The internal date of the message.\n\n      RFC822         Functionally equivalent to BODY[], differing in the\n                     syntax of the resulting untagged FETCH data (RFC822\n                     is returned).\n\n      RFC822.HEADER  Functionally equivalent to BODY.PEEK[HEADER],\n                     differing in the syntax of the resulting untagged\n                     FETCH data (RFC822.HEADER is returned).\n\n      RFC822.SIZE    The [RFC-822] size of the message.\n\n      RFC822.TEXT    Functionally equivalent to BODY[TEXT], differing in\n                     the syntax of the resulting untagged FETCH data\n                     (RFC822.TEXT is returned).\n\n      UID            The unique identifier for the message.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 44]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Example:    C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])\n               S: * 2 FETCH ....\n               S: * 3 FETCH ....\n               S: * 4 FETCH ....\n               S: A654 OK FETCH completed\n\n6.4.6.  STORE Command\n\n   Arguments:  message set\n               message data item name\n               value for message data item\n\n   Responses:  untagged responses: FETCH\n\n   Result:     OK - store completed\n               NO - store error: can't store that data\n               BAD - command unknown or arguments invalid\n\n      The STORE command alters data associated with a message in the\n      mailbox.  Normally, STORE will return the updated value of the\n      data with an untagged FETCH response.  A suffix of \".SILENT\" in\n      the data item name prevents the untagged FETCH, and the server\n      SHOULD assume that the client has determined the updated value\n      itself or does not care about the updated value.\n\n         Note: regardless of whether or not the \".SILENT\" suffix was\n         used, the server SHOULD send an untagged FETCH response if a\n         change to a message's flags from an external source is\n         observed.  The intent is that the status of the flags is\n         determinate without a race condition.\n\n      The currently defined data items that can be stored are:\n\n      FLAGS <flag list>\n                     Replace the flags for the message with the\n                     argument.  The new value of the flags are returned\n                     as if a FETCH of those flags was done.\n\n      FLAGS.SILENT <flag list>\n                     Equivalent to FLAGS, but without returning a new\n                     value.\n\n      +FLAGS <flag list>\n                     Add the argument to the flags for the message.  The\n                     new value of the flags are returned as if a FETCH\n                     of those flags was done.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 45]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      +FLAGS.SILENT <flag list>\n                     Equivalent to +FLAGS, but without returning a new\n                     value.\n\n      -FLAGS <flag list>\n                     Remove the argument from the flags for the message.\n                     The new value of the flags are returned as if a\n                     FETCH of those flags was done.\n\n      -FLAGS.SILENT <flag list>\n                     Equivalent to -FLAGS, but without returning a new\n                     value.\n\n   Example:    C: A003 STORE 2:4 +FLAGS (\\Deleted)\n               S: * 2 FETCH FLAGS (\\Deleted \\Seen)\n               S: * 3 FETCH FLAGS (\\Deleted)\n               S: * 4 FETCH FLAGS (\\Deleted \\Flagged \\Seen)\n               S: A003 OK STORE completed\n\n6.4.7.  COPY Command\n\n   Arguments:  message set\n               mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - copy completed\n               NO - copy error: can't copy those messages or to that\n                    name\n               BAD - command unknown or arguments invalid\n\n      The COPY command copies the specified message(s) to the end of the\n      specified destination mailbox.  The flags and internal date of the\n      message(s) SHOULD be preserved in the copy.\n\n      If the destination mailbox does not exist, a server SHOULD return\n      an error.  It SHOULD NOT automatically create the mailbox.  Unless\n      it is certain that the destination mailbox can not be created, the\n      server MUST send the response code \"[TRYCREATE]\" as the prefix of\n      the text of the tagged NO response.  This gives a hint to the\n      client that it can attempt a CREATE command and retry the COPY if\n      the CREATE is successful.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 46]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      If the COPY command is unsuccessful for any reason, server\n      implementations MUST restore the destination mailbox to its state\n      before the COPY attempt.\n\n   Example:    C: A003 COPY 2:4 MEETING\n               S: A003 OK COPY completed\n\n6.4.8.  UID Command\n\n   Arguments:  command name\n               command arguments\n\n   Responses:  untagged responses: FETCH, SEARCH\n\n   Result:     OK - UID command completed\n               NO - UID command error\n               BAD - command unknown or arguments invalid\n\n      The UID command has two forms.  In the first form, it takes as its\n      arguments a COPY, FETCH, or STORE command with arguments\n      appropriate for the associated command.  However, the numbers in\n      the message set argument are unique identifiers instead of message\n      sequence numbers.\n\n      In the second form, the UID command takes a SEARCH command with\n      SEARCH command arguments.  The interpretation of the arguments is\n      the same as with SEARCH; however, the numbers returned in a SEARCH\n      response for a UID SEARCH command are unique identifiers instead\n      of message sequence numbers.  For example, the command UID SEARCH\n      1:100 UID 443:557 returns the unique identifiers corresponding to\n      the intersection of the message sequence number set 1:100 and the\n      UID set 443:557.\n\n      Message set ranges are permitted; however, there is no guarantee\n      that unique identifiers be contiguous.  A non-existent unique\n      identifier within a message set range is ignored without any error\n      message generated.\n\n      The number after the \"*\" in an untagged FETCH response is always a\n      message sequence number, not a unique identifier, even for a UID\n      command response.  However, server implementations MUST implicitly\n      include the UID message data item as part of any FETCH response\n      caused by a UID command, regardless of whether a UID was specified\n      as a message data item to the FETCH.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 47]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Example:    C: A999 UID FETCH 4827313:4828442 FLAGS\n               S: * 23 FETCH (FLAGS (\\Seen) UID 4827313)\n               S: * 24 FETCH (FLAGS (\\Seen) UID 4827943)\n               S: * 25 FETCH (FLAGS (\\Seen) UID 4828442)\n               S: A999 UID FETCH completed\n\n6.5.    Client Commands - Experimental/Expansion\n\n6.5.1.  X<atom> Command\n\n   Arguments:  implementation defined\n\n   Responses:  implementation defined\n\n   Result:     OK - command completed\n               NO - failure\n               BAD - command unknown or arguments invalid\n\n      Any command prefixed with an X is an experimental command.\n      Commands which are not part of this specification, a standard or\n      standards-track revision of this specification, or an IESG-\n      approved experimental protocol, MUST use the X prefix.\n\n      Any added untagged responses issued by an experimental command\n      MUST also be prefixed with an X.  Server implementations MUST NOT\n      send any such untagged responses, unless the client requested it\n      by issuing the associated experimental command.\n\n   Example:    C: a441 CAPABILITY\n               S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN\n               S: a441 OK CAPABILITY completed\n               C: A442 XPIG-LATIN\n               S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay\n               S: A442 OK XPIG-LATIN ompleted-cay\n\n7.      Server Responses\n\n   Server responses are in three forms: status responses, server data,\n   and command continuation request.  The information contained in a\n   server response, identified by \"Contents:\" in the response\n   descriptions below, is described by function, not by syntax.  The\n   precise syntax of server responses is described in the Formal Syntax\n   section.\n\n   The client MUST be prepared to accept any response at all times.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 48]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Status responses can be tagged or untagged.  Tagged status responses\n   indicate the completion result (OK, NO, or BAD status) of a client\n   command, and have a tag matching the command.\n\n   Some status responses, and all server data, are untagged.  An\n   untagged response is indicated by the token \"*\" instead of a tag.\n   Untagged status responses indicate server greeting, or server status\n   that does not indicate the completion of a command (for example, an\n   impending system shutdown alert).  For historical reasons, untagged\n   server data responses are also called \"unsolicited data\", although\n   strictly speaking only unilateral server data is truly \"unsolicited\".\n\n   Certain server data MUST be recorded by the client when it is\n   received; this is noted in the description of that data.  Such data\n   conveys critical information which affects the interpretation of all\n   subsequent commands and responses (e.g. updates reflecting the\n   creation or destruction of messages).\n\n   Other server data SHOULD be recorded for later reference; if the\n   client does not need to record the data, or if recording the data has\n   no obvious purpose (e.g. a SEARCH response when no SEARCH command is\n   in progress), the data SHOULD be ignored.\n\n   An example of unilateral untagged server data occurs when the IMAP\n   connection is in selected state.  In selected state, the server\n   checks the mailbox for new messages as part of command execution.\n   Normally, this is part of the execution of every command; hence, a\n   NOOP command suffices to check for new messages.  If new messages are\n   found, the server sends untagged EXISTS and RECENT responses\n   reflecting the new size of the mailbox.  Server implementations that\n   offer multiple simultaneous access to the same mailbox SHOULD also\n   send appropriate unilateral untagged FETCH and EXPUNGE responses if\n   another agent changes the state of any message flags or expunges any\n   messages.\n\n   Command continuation request responses use the token \"+\" instead of a\n   tag.  These responses are sent by the server to indicate acceptance\n   of an incomplete client command and readiness for the remainder of\n   the command.\n\n7.1.    Server Responses - Status Responses\n\n   Status responses are OK, NO, BAD, PREAUTH and BYE.  OK, NO, and BAD\n   may be tagged or untagged.  PREAUTH and BYE are always untagged.\n\n   Status responses MAY include an OPTIONAL \"response code\".  A response\n   code consists of data inside square brackets in the form of an atom,\n   possibly followed by a space and arguments.  The response code\n\n\n\nCrispin                     Standards Track                    [Page 49]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   contains additional information or status codes for client software\n   beyond the OK/NO/BAD condition, and are defined when there is a\n   specific action that a client can take based upon the additional\n   information.\n\n   The currently defined response codes are:\n\n      ALERT          The human-readable text contains a special alert\n                     that MUST be presented to the user in a fashion\n                     that calls the user's attention to the message.\n\n      NEWNAME        Followed by a mailbox name and a new mailbox name.\n                     A SELECT or EXAMINE is failing because the target\n                     mailbox name no longer exists because it was\n                     renamed to the new mailbox name.  This is a hint to\n                     the client that the operation can succeed if the\n                     SELECT or EXAMINE is reissued with the new mailbox\n                     name.\n\n      PARSE          The human-readable text represents an error in\n                     parsing the [RFC-822] header or [MIME-IMB] headers\n                     of a message in the mailbox.\n\n      PERMANENTFLAGS Followed by a parenthesized list of flags,\n                     indicates which of the known flags that the client\n                     can change permanently.  Any flags that are in the\n                     FLAGS untagged response, but not the PERMANENTFLAGS\n                     list, can not be set permanently.  If the client\n                     attempts to STORE a flag that is not in the\n                     PERMANENTFLAGS list, the server will either reject\n                     it with a NO reply or store the state for the\n                     remainder of the current session only.  The\n                     PERMANENTFLAGS list can also include the special\n                     flag \\*, which indicates that it is possible to\n                     create new keywords by attempting to store those\n                     flags in the mailbox.\n\n      READ-ONLY      The mailbox is selected read-only, or its access\n                     while selected has changed from read-write to\n                     read-only.\n\n      READ-WRITE     The mailbox is selected read-write, or its access\n                     while selected has changed from read-only to\n                     read-write.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 50]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      TRYCREATE      An APPEND or COPY attempt is failing because the\n                     target mailbox does not exist (as opposed to some\n                     other reason).  This is a hint to the client that\n                     the operation can succeed if the mailbox is first\n                     created by the CREATE command.\n\n      UIDVALIDITY    Followed by a decimal number, indicates the unique\n                     identifier validity value.\n\n      UNSEEN         Followed by a decimal number, indicates the number\n                     of the first message without the \\Seen flag set.\n\n      Additional response codes defined by particular client or server\n      implementations SHOULD be prefixed with an \"X\" until they are\n      added to a revision of this protocol.  Client implementations\n      SHOULD ignore response codes that they do not recognize.\n\n7.1.1.  OK Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The OK response indicates an information message from the server.\n      When tagged, it indicates successful completion of the associated\n      command.  The human-readable text MAY be presented to the user as\n      an information message.  The untagged form indicates an\n      information-only message; the nature of the information MAY be\n      indicated by a response code.\n\n      The untagged form is also used as one of three possible greetings\n      at connection startup.  It indicates that the connection is not\n      yet authenticated and that a LOGIN command is needed.\n\n   Example:    S: * OK IMAP4rev1 server ready\n               C: A001 LOGIN fred blurdybloop\n               S: * OK [ALERT] System shutdown in 10 minutes\n               S: A001 OK LOGIN Completed\n\n7.1.2.  NO Response\n\n      Contents:   OPTIONAL response code\n                  human-readable text\n\n      The NO response indicates an operational error message from the\n      server.  When tagged, it indicates unsuccessful completion of the\n      associated command.  The untagged form indicates a warning; the\n      command can still complete successfully.  The human-readable text\n      describes the condition.\n\n\n\nCrispin                     Standards Track                    [Page 51]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Example:    C: A222 COPY 1:2 owatagusiam\n               S: * NO Disk is 98% full, please delete unnecessary data\n               S: A222 OK COPY completed\n               C: A223 COPY 3:200 blurdybloop\n               S: * NO Disk is 98% full, please delete unnecessary data\n               S: * NO Disk is 99% full, please delete unnecessary data\n               S: A223 NO COPY failed: disk is full\n\n7.1.3.  BAD Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The BAD response indicates an error message from the server.  When\n      tagged, it reports a protocol-level error in the client's command;\n      the tag indicates the command that caused the error.  The untagged\n      form indicates a protocol-level error for which the associated\n      command can not be determined; it can also indicate an internal\n      server failure.  The human-readable text describes the condition.\n\n   Example:    C: ...very long command line...\n               S: * BAD Command line too long\n               C: ...empty line...\n               S: * BAD Empty command line\n               C: A443 EXPUNGE\n               S: * BAD Disk crash, attempting salvage to a new disk!\n               S: * OK Salvage successful, no data lost\n               S: A443 OK Expunge completed\n\n7.1.4.  PREAUTH Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The PREAUTH response is always untagged, and is one of three\n      possible greetings at connection startup.  It indicates that the\n      connection has already been authenticated by external means and\n      thus no LOGIN command is needed.\n\n   Example:    S: * PREAUTH IMAP4rev1 server logged in as Smith\n\n7.1.5.  BYE Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 52]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      The BYE response is always untagged, and indicates that the server\n      is about to close the connection.  The human-readable text MAY be\n      displayed to the user in a status report by the client.  The BYE\n      response is sent under one of four conditions:\n\n         1) as part of a normal logout sequence.  The server will close\n            the connection after sending the tagged OK response to the\n            LOGOUT command.\n\n         2) as a panic shutdown announcement.  The server closes the\n            connection immediately.\n\n         3) as an announcement of an inactivity autologout.  The server\n            closes the connection immediately.\n\n         4) as one of three possible greetings at connection startup,\n            indicating that the server is not willing to accept a\n            connection from this client.  The server closes the\n            connection immediately.\n\n      The difference between a BYE that occurs as part of a normal\n      LOGOUT sequence (the first case) and a BYE that occurs because of\n      a failure (the other three cases) is that the connection closes\n      immediately in the failure case.\n\n   Example:    S: * BYE Autologout; idle for too long\n\n7.2.    Server Responses - Server and Mailbox Status\n\n   These responses are always untagged.  This is how server and mailbox\n   status data are transmitted from the server to the client.  Many of\n   these responses typically result from a command with the same name.\n\n7.2.1.  CAPABILITY Response\n\n   Contents:   capability listing\n\n      The CAPABILITY response occurs as a result of a CAPABILITY\n      command.  The capability listing contains a space-separated\n      listing of capability names that the server supports.  The\n      capability listing MUST include the atom \"IMAP4rev1\".\n\n      A capability name which begins with \"AUTH=\" indicates that the\n      server supports that particular authentication mechanism.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 53]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      Other capability names indicate that the server supports an\n      extension, revision, or amendment to the IMAP4rev1 protocol.\n      Server responses MUST conform to this document until the client\n      issues a command that uses the associated capability.\n\n      Capability names MUST either begin with \"X\" or be standard or\n      standards-track IMAP4rev1 extensions, revisions, or amendments\n      registered with IANA.  A server MUST NOT offer unregistered or\n      non-standard capability names, unless such names are prefixed with\n      an \"X\".\n\n      Client implementations SHOULD NOT require any capability name\n      other than \"IMAP4rev1\", and MUST ignore any unknown capability\n      names.\n\n   Example:    S: * CAPABILITY IMAP4rev1 AUTH=KERBEROS_V4 XPIG-LATIN\n\n7.2.2.  LIST Response\n\n   Contents:   name attributes\n               hierarchy delimiter\n               name\n\n      The LIST response occurs as a result of a LIST command.  It\n      returns a single name that matches the LIST specification.  There\n      can be multiple LIST responses for a single LIST command.\n\n      Four name attributes are defined:\n\n      \\Noinferiors   It is not possible for any child levels of\n                     hierarchy to exist under this name; no child levels\n                     exist now and none can be created in the future.\n\n      \\Noselect      It is not possible to use this name as a selectable\n                     mailbox.\n\n      \\Marked        The mailbox has been marked \"interesting\" by the\n                     server; the mailbox probably contains messages that\n                     have been added since the last time the mailbox was\n                     selected.\n\n      \\Unmarked      The mailbox does not contain any additional\n                     messages since the last time the mailbox was\n                     selected.\n\n      If it is not feasible for the server to determine whether the\n      mailbox is \"interesting\" or not, or if the name is a \\Noselect\n      name, the server SHOULD NOT send either \\Marked or \\Unmarked.\n\n\n\nCrispin                     Standards Track                    [Page 54]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      The hierarchy delimiter is a character used to delimit levels of\n      hierarchy in a mailbox name.  A client can use it to create child\n      mailboxes, and to search higher or lower levels of naming\n      hierarchy.  All children of a top-level hierarchy node MUST use\n      the same separator character.  A NIL hierarchy delimiter means\n      that no hierarchy exists; the name is a \"flat\" name.\n\n      The name represents an unambiguous left-to-right hierarchy, and\n      MUST be valid for use as a reference in LIST and LSUB commands.\n      Unless \\Noselect is indicated, the name MUST also be valid as an\n            argument for commands, such as SELECT, that accept mailbox\n      names.\n\n   Example:    S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n\n7.2.3.  LSUB Response\n\n   Contents:   name attributes\n               hierarchy delimiter\n               name\n\n      The LSUB response occurs as a result of an LSUB command.  It\n      returns a single name that matches the LSUB specification.  There\n      can be multiple LSUB responses for a single LSUB command.  The\n      data is identical in format to the LIST response.\n\n   Example:    S: * LSUB () \".\" #news.comp.mail.misc\n\n7.2.4   STATUS Response\n\n   Contents:   name\n               status parenthesized list\n\n      The STATUS response occurs as a result of an STATUS command.  It\n      returns the mailbox name that matches the STATUS specification and\n      the requested mailbox status information.\n\n   Example:    S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)\n\n7.2.5.  SEARCH Response\n\n   Contents:   zero or more numbers\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 55]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      The SEARCH response occurs as a result of a SEARCH or UID SEARCH\n      command.  The number(s) refer to those messages that match the\n      search criteria.  For SEARCH, these are message sequence numbers;\n      for UID SEARCH, these are unique identifiers.  Each number is\n      delimited by a space.\n\n   Example:    S: * SEARCH 2 3 6\n\n7.2.6.  FLAGS Response\n\n   Contents:   flag parenthesized list\n\n      The FLAGS response occurs as a result of a SELECT or EXAMINE\n      command.  The flag parenthesized list identifies the flags (at a\n      minimum, the system-defined flags) that are applicable for this\n      mailbox.  Flags other than the system flags can also exist,\n      depending on server implementation.\n\n      The update from the FLAGS response MUST be recorded by the client.\n\n   Example:    S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n\n7.3.    Server Responses - Mailbox Size\n\n   These responses are always untagged.  This is how changes in the size\n   of the mailbox are trasnmitted from the server to the client.\n   Immediately following the \"*\" token is a number that represents a\n   message count.\n\n7.3.1.  EXISTS Response\n\n   Contents:   none\n\n      The EXISTS response reports the number of messages in the mailbox.\n      This response occurs as a result of a SELECT or EXAMINE command,\n      and if the size of the mailbox changes (e.g. new mail).\n\n      The update from the EXISTS response MUST be recorded by the\n      client.\n\n   Example:    S: * 23 EXISTS\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 56]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n7.3.2.  RECENT Response\n\n      Contents:   none\n\n      The RECENT response reports the number of messages with the\n      \\Recent flag set.  This response occurs as a result of a SELECT or\n      EXAMINE command, and if the size of the mailbox changes (e.g. new\n      mail).\n\n         Note: It is not guaranteed that the message sequence numbers of\n         recent messages will be a contiguous range of the highest n\n         messages in the mailbox (where n is the value reported by the\n         RECENT response).  Examples of situations in which this is not\n         the case are: multiple clients having the same mailbox open\n         (the first session to be notified will see it as recent, others\n         will probably see it as non-recent), and when the mailbox is\n         re-ordered by a non-IMAP agent.\n\n         The only reliable way to identify recent messages is to look at\n         message flags to see which have the \\Recent flag set, or to do\n         a SEARCH RECENT.\n\n         The update from the RECENT response MUST be recorded by the\n         client.\n\n   Example:    S: * 5 RECENT\n\n7.4.    Server Responses - Message Status\n\n   These responses are always untagged.  This is how message data are\n   transmitted from the server to the client, often as a result of a\n   command with the same name.  Immediately following the \"*\" token is a\n   number that represents a message sequence number.\n\n7.4.1.  EXPUNGE Response\n\n   Contents:   none\n\n      The EXPUNGE response reports that the specified message sequence\n      number has been permanently removed from the mailbox.  The message\n      sequence number for each successive message in the mailbox is\n      immediately decremented by 1, and this decrement is reflected in\n      message sequence numbers in subsequent responses (including other\n      untagged EXPUNGE responses).\n\n      As a result of the immediate decrement rule, message sequence\n      numbers that appear in a set of successive EXPUNGE responses\n      depend upon whether the messages are removed starting from lower\n\n\n\nCrispin                     Standards Track                    [Page 57]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      numbers to higher numbers, or from higher numbers to lower\n      numbers.  For example, if the last 5 messages in a 9-message\n      mailbox are expunged; a \"lower to higher\" server will send five\n      untagged EXPUNGE responses for message sequence number 5, whereas\n      a \"higher to lower server\" will send successive untagged EXPUNGE\n      responses for message sequence numbers 9, 8, 7, 6, and 5.\n\n      An EXPUNGE response MUST NOT be sent when no command is in\n      progress; nor while responding to a FETCH, STORE, or SEARCH\n      command.  This rule is necessary to prevent a loss of\n      synchronization of message sequence numbers between client and\n      server.\n\n      The update from the EXPUNGE response MUST be recorded by the\n      client.\n\n   Example:    S: * 44 EXPUNGE\n\n7.4.2.  FETCH Response\n\n   Contents:   message data\n\n      The FETCH response returns data about a message to the client.\n      The data are pairs of data item names and their values in\n      parentheses.  This response occurs as the result of a FETCH or\n      STORE command, as well as by unilateral server decision (e.g. flag\n      updates).\n\n      The current data items are:\n\n      BODY           A form of BODYSTRUCTURE without extension data.\n\n      BODY[<section>]<<origin_octet>>\n                     A string expressing the body contents of the\n                     specified section.  The string SHOULD be\n                     interpreted by the client according to the content\n                     transfer encoding, body type, and subtype.\n\n                     If the origin octet is specified, this string is a\n                     substring of the entire body contents, starting at\n                     that origin octet.  This means that BODY[]<0> MAY\n                     be truncated, but BODY[] is NEVER truncated.\n\n                     8-bit textual data is permitted if a [CHARSET]\n                     identifier is part of the body parameter\n                     parenthesized list for this section.  Note that\n                     headers (part specifiers HEADER or MIME, or the\n                     header portion of a MESSAGE/RFC822 part), MUST be\n\n\n\nCrispin                     Standards Track                    [Page 58]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                     7-bit; 8-bit characters are not permitted in\n                     headers.  Note also that the blank line at the end\n                     of the header is always included in header data.\n\n                     Non-textual data such as binary data MUST be\n                     transfer encoded into a textual form such as BASE64\n                     prior to being sent to the client.  To derive the\n                     original binary data, the client MUST decode the\n                     transfer encoded string.\n\n      BODYSTRUCTURE  A parenthesized list that describes the [MIME-IMB]\n                     body structure of a message.  This is computed by\n                     the server by parsing the [MIME-IMB] header fields,\n                     defaulting various fields as necessary.\n\n                     For example, a simple text message of 48 lines and\n                     2279 octets can have a body structure of: (\"TEXT\"\n                     \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 2279\n                     48)\n\n                     Multiple parts are indicated by parenthesis\n                     nesting.  Instead of a body type as the first\n                     element of the parenthesized list there is a nested\n                     body.  The second element of the parenthesized list\n                     is the multipart subtype (mixed, digest, parallel,\n                     alternative, etc.).\n\n                     For example, a two part message consisting of a\n                     text and a BASE645-encoded text attachment can have\n                     a body structure of: ((\"TEXT\" \"PLAIN\" (\"CHARSET\"\n                     \"US-ASCII\") NIL NIL \"7BIT\" 1152 23)(\"TEXT\" \"PLAIN\"\n                     (\"CHARSET\" \"US-ASCII\" \"NAME\" \"cc.diff\")\n                     \"<960723163407.20117h@cac.washington.edu>\"\n                     \"Compiler diff\" \"BASE64\" 4554 73) \"MIXED\"))\n\n                     Extension data follows the multipart subtype.\n                     Extension data is never returned with the BODY\n                     fetch, but can be returned with a BODYSTRUCTURE\n                     fetch.  Extension data, if present, MUST be in the\n                     defined order.\n\n                     The extension data of a multipart body part are in\n                     the following order:\n\n                     body parameter parenthesized list\n                        A parenthesized list of attribute/value pairs\n                        [e.g. (\"foo\" \"bar\" \"baz\" \"rag\") where \"bar\" is\n                        the value of \"foo\" and \"rag\" is the value of\n\n\n\nCrispin                     Standards Track                    [Page 59]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                        \"baz\"] as defined in [MIME-IMB].\n\n                     body disposition\n                        A parenthesized list, consisting of a\n                        disposition type string followed by a\n                        parenthesized list of disposition\n                        attribute/value pairs.  The disposition type and\n                        attribute names will be defined in a future\n                        standards-track revision to [DISPOSITION].\n\n                     body language\n                        A string or parenthesized list giving the body\n                        language value as defined in [LANGUAGE-TAGS].\n\n                     Any following extension data are not yet defined in\n                     this version of the protocol.  Such extension data\n                     can consist of zero or more NILs, strings, numbers,\n                     or potentially nested parenthesized lists of such\n                     data.  Client implementations that do a\n                     BODYSTRUCTURE fetch MUST be prepared to accept such\n                     extension data.  Server implementations MUST NOT\n                     send such extension data until it has been defined\n                     by a revision of this protocol.\n\n                     The basic fields of a non-multipart body part are\n                     in the following order:\n\n                     body type\n                        A string giving the content media type name as\n                        defined in [MIME-IMB].\n\n                     body subtype\n                        A string giving the content subtype name as\n                        defined in [MIME-IMB].\n\n                     body parameter parenthesized list\n                        A parenthesized list of attribute/value pairs\n                        [e.g. (\"foo\" \"bar\" \"baz\" \"rag\") where \"bar\" is\n                        the value of \"foo\" and \"rag\" is the value of\n                        \"baz\"] as defined in [MIME-IMB].\n\n                     body id\n                        A string giving the content id as defined in\n                        [MIME-IMB].\n\n                     body description\n                        A string giving the content description as\n                        defined in [MIME-IMB].\n\n\n\nCrispin                     Standards Track                    [Page 60]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                     body encoding\n                        A string giving the content transfer encoding as\n                        defined in [MIME-IMB].\n\n                     body size\n                        A number giving the size of the body in octets.\n                        Note that this size is the size in its transfer\n                        encoding and not the resulting size after any\n                        decoding.\n\n                     A body type of type MESSAGE and subtype RFC822\n                     contains, immediately after the basic fields, the\n                     envelope structure, body structure, and size in\n                     text lines of the encapsulated message.\n\n                     A body type of type TEXT contains, immediately\n                     after the basic fields, the size of the body in\n                     text lines.  Note that this size is the size in its\n                     content transfer encoding and not the resulting\n                     size after any decoding.\n\n                     Extension data follows the basic fields and the\n                     type-specific fields listed above.  Extension data\n                     is never returned with the BODY fetch, but can be\n                     returned with a BODYSTRUCTURE fetch.  Extension\n                     data, if present, MUST be in the defined order.\n\n                     The extension data of a non-multipart body part are\n                     in the following order:\n\n                     body MD5\n                        A string giving the body MD5 value as defined in\n                        [MD5].\n\n                     body disposition\n                        A parenthesized list with the same content and\n                        function as the body disposition for a multipart\n                        body part.\n\n                     body language\n                        A string or parenthesized list giving the body\n                        language value as defined in [LANGUAGE-TAGS].\n\n                     Any following extension data are not yet defined in\n                     this version of the protocol, and would be as\n                     described above under multipart extension data.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 61]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      ENVELOPE       A parenthesized list that describes the envelope\n                     structure of a message.  This is computed by the\n                     server by parsing the [RFC-822] header into the\n                     component parts, defaulting various fields as\n                     necessary.\n\n                     The fields of the envelope structure are in the\n                     following order: date, subject, from, sender,\n                     reply-to, to, cc, bcc, in-reply-to, and message-id.\n                     The date, subject, in-reply-to, and message-id\n                     fields are strings.  The from, sender, reply-to,\n                     to, cc, and bcc fields are parenthesized lists of\n                     address structures.\n\n                     An address structure is a parenthesized list that\n                     describes an electronic mail address.  The fields\n                     of an address structure are in the following order:\n                     personal name, [SMTP] at-domain-list (source\n                     route), mailbox name, and host name.\n\n                     [RFC-822] group syntax is indicated by a special\n                     form of address structure in which the host name\n                     field is NIL.  If the mailbox name field is also\n                     NIL, this is an end of group marker (semi-colon in\n                     RFC 822 syntax).  If the mailbox name field is\n                     non-NIL, this is a start of group marker, and the\n                     mailbox name field holds the group name phrase.\n\n                     Any field of an envelope or address structure that\n                     is not applicable is presented as NIL.  Note that\n                     the server MUST default the reply-to and sender\n                     fields from the from field; a client is not\n                     expected to know to do this.\n\n      FLAGS          A parenthesized list of flags that are set for this\n                     message.\n\n      INTERNALDATE   A string representing the internal date of the\n                     message.\n\n      RFC822         Equivalent to BODY[].\n\n      RFC822.HEADER  Equivalent to BODY.PEEK[HEADER].\n\n      RFC822.SIZE    A number expressing the [RFC-822] size of the\n                     message.\n\n      RFC822.TEXT    Equivalent to BODY[TEXT].\n\n\n\nCrispin                     Standards Track                    [Page 62]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n      UID            A number expressing the unique identifier of the\n                     message.\n\n\n   Example:    S: * 23 FETCH (FLAGS (\\Seen) RFC822.SIZE 44827)\n\n7.5.    Server Responses - Command Continuation Request\n\n   The command continuation request response is indicated by a \"+\" token\n   instead of a tag.  This form of response indicates that the server is\n   ready to accept the continuation of a command from the client.  The\n   remainder of this response is a line of text.\n\n   This response is used in the AUTHORIZATION command to transmit server\n   data to the client, and request additional client data.  This\n   response is also used if an argument to any command is a literal.\n\n   The client is not permitted to send the octets of the literal unless\n   the server indicates that it expects it.  This permits the server to\n   process commands and reject errors on a line-by-line basis.  The\n   remainder of the command, including the CRLF that terminates a\n   command, follows the octets of the literal.  If there are any\n   additional command arguments the literal octets are followed by a\n   space and those arguments.\n\n   Example:    C: A001 LOGIN {11}\n               S: + Ready for additional command text\n               C: FRED FOOBAR {7}\n               S: + Ready for additional command text\n               C: fat man\n               S: A001 OK LOGIN completed\n               C: A044 BLURDYBLOOP {102856}\n               S: A044 BAD No such command as \"BLURDYBLOOP\"\n\n8.      Sample IMAP4rev1 connection\n\n   The following is a transcript of an IMAP4rev1 connection.  A long\n   line in this sample is broken for editorial clarity.\n\nS:   * OK IMAP4rev1 Service Ready\nC:   a001 login mrc secret\nS:   a001 OK LOGIN completed\nC:   a002 select inbox\nS:   * 18 EXISTS\nS:   * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\nS:   * 2 RECENT\nS:   * OK [UNSEEN 17] Message 17 is the first unseen message\nS:   * OK [UIDVALIDITY 3857529045] UIDs valid\n\n\n\nCrispin                     Standards Track                    [Page 63]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\nS:   a002 OK [READ-WRITE] SELECT completed\nC:   a003 fetch 12 full\nS:   * 12 FETCH (FLAGS (\\Seen) INTERNALDATE \"17-Jul-1996 02:44:25 -0700\"\n      RFC822.SIZE 4286 ENVELOPE (\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\"\n      \"IMAP4rev1 WG mtg summary and minutes\"\n      ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n      ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n      ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n      ((NIL NIL \"imap\" \"cac.washington.edu\"))\n      ((NIL NIL \"minutes\" \"CNRI.Reston.VA.US\")\n      (\"John Klensin\" NIL \"KLENSIN\" \"INFOODS.MIT.EDU\")) NIL NIL\n      \"<B27397-0100000@cac.washington.edu>\")\n       BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 3028 92))\nS:    a003 OK FETCH completed\nC:    a004 fetch 12 body[header]\nS:    * 12 FETCH (BODY[HEADER] {350}\nS:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\nS:    From: Terry Gray <gray@cac.washington.edu>\nS:    Subject: IMAP4rev1 WG mtg summary and minutes\nS:    To: imap@cac.washington.edu\nS:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU>\nS:    Message-Id: <B27397-0100000@cac.washington.edu>\nS:    MIME-Version: 1.0\nS:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\nS:\nS:    )\nS:    a004 OK FETCH completed\nC:    a005 store 12 +flags \\deleted\nS:    * 12 FETCH (FLAGS (\\Seen \\Deleted))\nS:    a005 OK +FLAGS completed\nC:    a006 logout\nS:    * BYE IMAP4rev1 server terminating connection\nS:    a006 OK LOGOUT completed\n\n9.      Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [RFC-822] with one exception; the\n   delimiter used with the \"#\" construct is a single space (SPACE) and\n   not one or more commas.\n\n   In the case of alternative or optional rules in which a later rule\n   overlaps an earlier rule, the rule which is listed earlier MUST take\n   priority.  For example, \"\\Seen\" when parsed as a flag is the \\Seen\n   flag name and not a flag_extension, even though \"\\Seen\" could be\n   parsed as a flag_extension.  Some, but not all, instances of this\n   rule are noted below.\n\n\n\n\nCrispin                     Standards Track                    [Page 64]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\naddress         ::= \"(\" addr_name SPACE addr_adl SPACE addr_mailbox\n                    SPACE addr_host \")\"\n\naddr_adl        ::= nstring\n                    ;; Holds route from [RFC-822] route-addr if\n                    ;; non-NIL\n\naddr_host       ::= nstring\n                    ;; NIL indicates [RFC-822] group syntax.\n                    ;; Otherwise, holds [RFC-822] domain name\n\naddr_mailbox    ::= nstring\n                    ;; NIL indicates end of [RFC-822] group; if\n                    ;; non-NIL and addr_host is NIL, holds\n                    ;; [RFC-822] group name.\n                    ;; Otherwise, holds [RFC-822] local-part\n\naddr_name       ::= nstring\n                    ;; Holds phrase from [RFC-822] mailbox if\n                    ;; non-NIL\n\nalpha           ::= \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\" / \"G\" / \"H\" /\n                    \"I\" / \"J\" / \"K\" / \"L\" / \"M\" / \"N\" / \"O\" / \"P\" /\n                    \"Q\" / \"R\" / \"S\" / \"T\" / \"U\" / \"V\" / \"W\" / \"X\" /\n                    \"Y\" / \"Z\" /\n                    \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" / \"g\" / \"h\" /\n                    \"i\" / \"j\" / \"k\" / \"l\" / \"m\" / \"n\" / \"o\" / \"p\" /\n                    \"q\" / \"r\" / \"s\" / \"t\" / \"u\" / \"v\" / \"w\" / \"x\" /\n                    \"y\" / \"z\"\n                    ;; Case-sensitive\n\nappend          ::= \"APPEND\" SPACE mailbox [SPACE flag_list]\n                    [SPACE date_time] SPACE literal\n\nastring         ::= atom / string\n\natom            ::= 1*ATOM_CHAR\n\nATOM_CHAR       ::= <any CHAR except atom_specials>\n\natom_specials   ::= \"(\" / \")\" / \"{\" / SPACE / CTL / list_wildcards /\n                    quoted_specials\n\n\n\n\nCrispin                     Standards Track                    [Page 65]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\nauthenticate    ::= \"AUTHENTICATE\" SPACE auth_type *(CRLF base64)\n\nauth_type       ::= atom\n                    ;; Defined by [IMAP-AUTH]\n\nbase64          ::= *(4base64_char) [base64_terminal]\n\nbase64_char     ::= alpha / digit / \"+\" / \"/\"\n\nbase64_terminal ::= (2base64_char \"==\") / (3base64_char \"=\")\n\nbody            ::= \"(\" body_type_1part / body_type_mpart \")\"\n\nbody_extension  ::= nstring / number / \"(\" 1#body_extension \")\"\n                    ;; Future expansion.  Client implementations\n                    ;; MUST accept body_extension fields.  Server\n                    ;; implementations MUST NOT generate\n                    ;; body_extension fields except as defined by\n                    ;; future standard or standards-track\n                    ;; revisions of this specification.\n\nbody_ext_1part  ::= body_fld_md5 [SPACE body_fld_dsp\n                    [SPACE body_fld_lang\n                    [SPACE 1#body_extension]]]\n                    ;; MUST NOT be returned on non-extensible\n                    ;; \"BODY\" fetch\n\nbody_ext_mpart  ::= body_fld_param\n                    [SPACE body_fld_dsp SPACE body_fld_lang\n                    [SPACE 1#body_extension]]\n                    ;; MUST NOT be returned on non-extensible\n                    ;; \"BODY\" fetch\n\nbody_fields     ::= body_fld_param SPACE body_fld_id SPACE\n                    body_fld_desc SPACE body_fld_enc SPACE\n                    body_fld_octets\n\nbody_fld_desc   ::= nstring\n\nbody_fld_dsp    ::= \"(\" string SPACE body_fld_param \")\" / nil\n\nbody_fld_enc    ::= (<\"> (\"7BIT\" / \"8BIT\" / \"BINARY\" / \"BASE64\"/\n                    \"QUOTED-PRINTABLE\") <\">) / string\n\nbody_fld_id     ::= nstring\n\nbody_fld_lang   ::= nstring / \"(\" 1#string \")\"\n\n\n\n\nCrispin                     Standards Track                    [Page 66]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\nbody_fld_lines  ::= number\n\nbody_fld_md5    ::= nstring\n\nbody_fld_octets ::= number\n\nbody_fld_param  ::= \"(\" 1#(string SPACE string) \")\" / nil\n\nbody_type_1part ::= (body_type_basic / body_type_msg / body_type_text)\n                    [SPACE body_ext_1part]\n\nbody_type_basic ::= media_basic SPACE body_fields\n                    ;; MESSAGE subtype MUST NOT be \"RFC822\"\n\nbody_type_mpart ::= 1*body SPACE media_subtype\n                    [SPACE body_ext_mpart]\n\nbody_type_msg   ::= media_message SPACE body_fields SPACE envelope\n                    SPACE body SPACE body_fld_lines\n\nbody_type_text  ::= media_text SPACE body_fields SPACE body_fld_lines\n\ncapability      ::= \"AUTH=\" auth_type / atom\n                    ;; New capabilities MUST begin with \"X\" or be\n                    ;; registered with IANA as standard or\n                    ;; standards-track\n\ncapability_data ::= \"CAPABILITY\" SPACE [1#capability SPACE] \"IMAP4rev1\"\n                    [SPACE 1#capability]\n                    ;; IMAP4rev1 servers which offer RFC 1730\n                    ;; compatibility MUST list \"IMAP4\" as the first\n                    ;; capability.\n\nCHAR            ::= <any 7-bit US-ASCII character except NUL,\n                     0x01 - 0x7f>\n\nCHAR8           ::= <any 8-bit octet except NUL, 0x01 - 0xff>\n\ncommand         ::= tag SPACE (command_any / command_auth /\n                    command_nonauth / command_select) CRLF\n                    ;; Modal based on state\n\ncommand_any     ::= \"CAPABILITY\" / \"LOGOUT\" / \"NOOP\" / x_command\n                    ;; Valid in all states\n\ncommand_auth    ::= append / create / delete / examine / list / lsub /\n                    rename / select / status / subscribe / unsubscribe\n                    ;; Valid only in Authenticated or Selected state\n\n\n\nCrispin                     Standards Track                    [Page 67]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\ncommand_nonauth ::= login / authenticate\n                    ;; Valid only when in Non-Authenticated state\n\ncommand_select  ::= \"CHECK\" / \"CLOSE\" / \"EXPUNGE\" /\n                     copy / fetch / store / uid / search\n                    ;; Valid only when in Selected state\n\ncontinue_req    ::= \"+\" SPACE (resp_text / base64)\n\ncopy            ::= \"COPY\" SPACE set SPACE mailbox\n\nCR              ::= <ASCII CR, carriage return, 0x0D>\n\ncreate          ::= \"CREATE\" SPACE mailbox\n                    ;; Use of INBOX gives a NO error\n\nCRLF            ::= CR LF\n\nCTL             ::= <any ASCII control character and DEL,\n                        0x00 - 0x1f, 0x7f>\n\ndate            ::= date_text / <\"> date_text <\">\n\ndate_day        ::= 1*2digit\n                    ;; Day of month\n\ndate_day_fixed  ::= (SPACE digit) / 2digit\n                    ;; Fixed-format version of date_day\n\ndate_month      ::= \"Jan\" / \"Feb\" / \"Mar\" / \"Apr\" / \"May\" / \"Jun\" /\n                    \"Jul\" / \"Aug\" / \"Sep\" / \"Oct\" / \"Nov\" / \"Dec\"\n\ndate_text       ::= date_day \"-\" date_month \"-\" date_year\n\ndate_year       ::= 4digit\n\ndate_time       ::= <\"> date_day_fixed \"-\" date_month \"-\" date_year\n                    SPACE time SPACE zone <\">\n\ndelete          ::= \"DELETE\" SPACE mailbox\n                    ;; Use of INBOX gives a NO error\n\ndigit           ::= \"0\" / digit_nz\n\ndigit_nz        ::= \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" / \"8\" /\n                    \"9\"\n\n\n\n\n\nCrispin                     Standards Track                    [Page 68]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\nenvelope        ::= \"(\" env_date SPACE env_subject SPACE env_from\n                    SPACE env_sender SPACE env_reply_to SPACE env_to\n                    SPACE env_cc SPACE env_bcc SPACE env_in_reply_to\n                    SPACE env_message_id \")\"\n\nenv_bcc         ::= \"(\" 1*address \")\" / nil\n\nenv_cc          ::= \"(\" 1*address \")\" / nil\n\nenv_date        ::= nstring\n\nenv_from        ::= \"(\" 1*address \")\" / nil\n\nenv_in_reply_to ::= nstring\n\nenv_message_id  ::= nstring\n\nenv_reply_to    ::= \"(\" 1*address \")\" / nil\n\nenv_sender      ::= \"(\" 1*address \")\" / nil\n\nenv_subject     ::= nstring\n\nenv_to          ::= \"(\" 1*address \")\" / nil\n\nexamine         ::= \"EXAMINE\" SPACE mailbox\n\nfetch           ::= \"FETCH\" SPACE set SPACE (\"ALL\" / \"FULL\" /\n                    \"FAST\" / fetch_att / \"(\" 1#fetch_att \")\")\n\nfetch_att       ::= \"ENVELOPE\" / \"FLAGS\" / \"INTERNALDATE\" /\n                    \"RFC822\" [\".HEADER\" / \".SIZE\" / \".TEXT\"] /\n                    \"BODY\" [\"STRUCTURE\"] / \"UID\" /\n                    \"BODY\" [\".PEEK\"] section\n                    [\"<\" number \".\" nz_number \">\"]\n\nflag            ::= \"\\Answered\" / \"\\Flagged\" / \"\\Deleted\" /\n                    \"\\Seen\" / \"\\Draft\" / flag_keyword / flag_extension\n\nflag_extension  ::= \"\\\" atom\n                    ;; Future expansion.  Client implementations\n                    ;; MUST accept flag_extension flags.  Server\n                    ;; implementations MUST NOT generate\n                    ;; flag_extension flags except as defined by\n                    ;; future standard or standards-track\n                    ;; revisions of this specification.\n\nflag_keyword    ::= atom\n\n\n\nCrispin                     Standards Track                    [Page 69]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\nflag_list       ::= \"(\" #flag \")\"\n\ngreeting        ::= \"*\" SPACE (resp_cond_auth / resp_cond_bye) CRLF\n\nheader_fld_name ::= astring\n\nheader_list     ::= \"(\" 1#header_fld_name \")\"\n\nLF              ::= <ASCII LF, line feed, 0x0A>\n\nlist            ::= \"LIST\" SPACE mailbox SPACE list_mailbox\n\nlist_mailbox    ::= 1*(ATOM_CHAR / list_wildcards) / string\n\nlist_wildcards  ::= \"%\" / \"*\"\n\nliteral         ::= \"{\" number \"}\" CRLF *CHAR8\n                    ;; Number represents the number of CHAR8 octets\n\nlogin           ::= \"LOGIN\" SPACE userid SPACE password\n\nlsub            ::= \"LSUB\" SPACE mailbox SPACE list_mailbox\n\nmailbox         ::= \"INBOX\" / astring\n                    ;; INBOX is case-insensitive.  All case variants of\n                    ;; INBOX (e.g. \"iNbOx\") MUST be interpreted as INBOX\n                    ;; not as an astring.  Refer to section 5.1 for\n                    ;; further semantic details of mailbox names.\n\nmailbox_data    ::=  \"FLAGS\" SPACE flag_list /\n                     \"LIST\" SPACE mailbox_list /\n                     \"LSUB\" SPACE mailbox_list /\n                     \"MAILBOX\" SPACE text /\n                     \"SEARCH\" [SPACE 1#nz_number] /\n                     \"STATUS\" SPACE mailbox SPACE\n                     \"(\" #<status_att number \")\" /\n                     number SPACE \"EXISTS\" / number SPACE \"RECENT\"\n\nmailbox_list    ::= \"(\" #(\"\\Marked\" / \"\\Noinferiors\" /\n                    \"\\Noselect\" / \"\\Unmarked\" / flag_extension) \")\"\n                    SPACE (<\"> QUOTED_CHAR <\"> / nil) SPACE mailbox\n\nmedia_basic     ::= (<\"> (\"APPLICATION\" / \"AUDIO\" / \"IMAGE\" /\n                    \"MESSAGE\" / \"VIDEO\") <\">) / string)\n                    SPACE media_subtype\n                    ;; Defined in [MIME-IMT]\n\nmedia_message   ::= <\"> \"MESSAGE\" <\"> SPACE <\"> \"RFC822\" <\">\n\n\n\nCrispin                     Standards Track                    [Page 70]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                    ;; Defined in [MIME-IMT]\n\nmedia_subtype   ::= string\n                    ;; Defined in [MIME-IMT]\n\nmedia_text      ::= <\"> \"TEXT\" <\"> SPACE media_subtype\n                    ;; Defined in [MIME-IMT]\n\nmessage_data    ::= nz_number SPACE (\"EXPUNGE\" /\n                                    (\"FETCH\" SPACE msg_att))\n\nmsg_att         ::= \"(\" 1#(\"ENVELOPE\" SPACE envelope /\n                    \"FLAGS\" SPACE \"(\" #(flag / \"\\Recent\") \")\" /\n                    \"INTERNALDATE\" SPACE date_time /\n                    \"RFC822\" [\".HEADER\" / \".TEXT\"] SPACE nstring /\n                    \"RFC822.SIZE\" SPACE number /\n                    \"BODY\" [\"STRUCTURE\"] SPACE body /\n                    \"BODY\" section [\"<\" number \">\"] SPACE nstring /\n                    \"UID\" SPACE uniqueid) \")\"\n\nnil             ::= \"NIL\"\n\nnstring         ::= string / nil\n\nnumber          ::= 1*digit\n                    ;; Unsigned 32-bit integer\n                    ;; (0 <= n < 4,294,967,296)\n\nnz_number       ::= digit_nz *digit\n                    ;; Non-zero unsigned 32-bit integer\n                    ;; (0 < n < 4,294,967,296)\n\npassword        ::= astring\n\nquoted          ::= <\"> *QUOTED_CHAR <\">\n\nQUOTED_CHAR     ::= <any TEXT_CHAR except quoted_specials> /\n                    \"\\\" quoted_specials\n\nquoted_specials ::= <\"> / \"\\\"\n\nrename          ::= \"RENAME\" SPACE mailbox SPACE mailbox\n                    ;; Use of INBOX as a destination gives a NO error\n\nresponse        ::= *(continue_req / response_data) response_done\n\nresponse_data   ::= \"*\" SPACE (resp_cond_state / resp_cond_bye /\n                    mailbox_data / message_data / capability_data)\n\n\n\nCrispin                     Standards Track                    [Page 71]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                    CRLF\n\nresponse_done   ::= response_tagged / response_fatal\n\nresponse_fatal  ::= \"*\" SPACE resp_cond_bye CRLF\n                    ;; Server closes connection immediately\n\nresponse_tagged ::= tag SPACE resp_cond_state CRLF\n\nresp_cond_auth  ::= (\"OK\" / \"PREAUTH\") SPACE resp_text\n                    ;; Authentication condition\n\nresp_cond_bye   ::= \"BYE\" SPACE resp_text\n\nresp_cond_state ::= (\"OK\" / \"NO\" / \"BAD\") SPACE resp_text\n                    ;; Status condition\n\nresp_text       ::= [\"[\" resp_text_code \"]\" SPACE] (text_mime2 / text)\n                    ;; text SHOULD NOT begin with \"[\" or \"=\"\n\nresp_text_code  ::= \"ALERT\" / \"PARSE\" /\n                    \"PERMANENTFLAGS\" SPACE \"(\" #(flag / \"\\*\") \")\" /\n                    \"READ-ONLY\" / \"READ-WRITE\" / \"TRYCREATE\" /\n                    \"UIDVALIDITY\" SPACE nz_number /\n                    \"UNSEEN\" SPACE nz_number /\n                    atom [SPACE 1*<any TEXT_CHAR except \"]\">]\n\nsearch          ::= \"SEARCH\" SPACE [\"CHARSET\" SPACE astring SPACE]\n                    1#search_key\n                    ;; [CHARSET] MUST be registered with IANA\n\nsearch_key      ::= \"ALL\" / \"ANSWERED\" / \"BCC\" SPACE astring /\n                    \"BEFORE\" SPACE date / \"BODY\" SPACE astring /\n                    \"CC\" SPACE astring / \"DELETED\" / \"FLAGGED\" /\n                    \"FROM\" SPACE astring /\n                    \"KEYWORD\" SPACE flag_keyword / \"NEW\" / \"OLD\" /\n                    \"ON\" SPACE date / \"RECENT\" / \"SEEN\" /\n                    \"SINCE\" SPACE date / \"SUBJECT\" SPACE astring /\n                    \"TEXT\" SPACE astring / \"TO\" SPACE astring /\n                    \"UNANSWERED\" / \"UNDELETED\" / \"UNFLAGGED\" /\n                    \"UNKEYWORD\" SPACE flag_keyword / \"UNSEEN\" /\n                    ;; Above this line were in [IMAP2]\n                    \"DRAFT\" /\n                    \"HEADER\" SPACE header_fld_name SPACE astring /\n                    \"LARGER\" SPACE number / \"NOT\" SPACE search_key /\n                    \"OR\" SPACE search_key SPACE search_key /\n                    \"SENTBEFORE\" SPACE date / \"SENTON\" SPACE date /\n                    \"SENTSINCE\" SPACE date / \"SMALLER\" SPACE number /\n\n\n\nCrispin                     Standards Track                    [Page 72]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n                    \"UID\" SPACE set / \"UNDRAFT\" / set /\n                    \"(\" 1#search_key \")\"\n\nsection         ::= \"[\" [section_text / (nz_number *[\".\" nz_number]\n                    [\".\" (section_text / \"MIME\")])] \"]\"\n\nsection_text    ::= \"HEADER\" / \"HEADER.FIELDS\" [\".NOT\"]\n                    SPACE header_list / \"TEXT\"\n\nselect          ::= \"SELECT\" SPACE mailbox\n\nsequence_num    ::= nz_number / \"*\"\n                    ;; * is the largest number in use.  For message\n                    ;; sequence numbers, it is the number of messages\n                    ;; in the mailbox.  For unique identifiers, it is\n                    ;; the unique identifier of the last message in\n                    ;; the mailbox.\n\nset             ::= sequence_num / (sequence_num \":\" sequence_num) /\n                    (set \",\" set)\n                    ;; Identifies a set of messages.  For message\n                    ;; sequence numbers, these are consecutive\n                    ;; numbers from 1 to the number of messages in\n                    ;; the mailbox\n                    ;; Comma delimits individual numbers, colon\n                    ;; delimits between two numbers inclusive.\n                    ;; Example: 2,4:7,9,12:* is 2,4,5,6,7,9,12,13,\n                    ;; 14,15 for a mailbox with 15 messages.\n\nSPACE           ::= <ASCII SP, space, 0x20>\n\nstatus          ::= \"STATUS\" SPACE mailbox SPACE \"(\" 1#status_att \")\"\n\nstatus_att      ::= \"MESSAGES\" / \"RECENT\" / \"UIDNEXT\" / \"UIDVALIDITY\" /\n                    \"UNSEEN\"\n\nstore           ::= \"STORE\" SPACE set SPACE store_att_flags\n\nstore_att_flags ::= ([\"+\" / \"-\"] \"FLAGS\" [\".SILENT\"]) SPACE\n                    (flag_list / #flag)\n\nstring          ::= quoted / literal\n\nsubscribe       ::= \"SUBSCRIBE\" SPACE mailbox\n\ntag             ::= 1*<any ATOM_CHAR except \"+\">\n\ntext            ::= 1*TEXT_CHAR\n\n\n\nCrispin                     Standards Track                    [Page 73]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\ntext_mime2       ::= \"=?\" <charset> \"?\" <encoding> \"?\"\n                     <encoded-text> \"?=\"\n                     ;; Syntax defined in [MIME-HDRS]\n\nTEXT_CHAR       ::= <any CHAR except CR and LF>\n\ntime            ::= 2digit \":\" 2digit \":\" 2digit\n                    ;; Hours minutes seconds\n\nuid             ::= \"UID\" SPACE (copy / fetch / search / store)\n                    ;; Unique identifiers used instead of message\n                    ;; sequence numbers\n\nuniqueid        ::= nz_number\n                    ;; Strictly ascending\n\nunsubscribe     ::= \"UNSUBSCRIBE\" SPACE mailbox\n\nuserid          ::= astring\n\nx_command       ::= \"X\" atom <experimental command arguments>\n\nzone            ::= (\"+\" / \"-\") 4digit\n                    ;; Signed four-digit value of hhmm representing\n                    ;; hours and minutes west of Greenwich (that is,\n                    ;; (the amount that the given time differs from\n                    ;; Universal Time).  Subtracting the timezone\n                    ;; from the given time will give the UT form.\n                    ;; The Universal Time zone is \"+0000\".\n\n10.     Author's Note\n\n   This document is a revision or rewrite of earlier documents, and\n   supercedes the protocol specification in those documents: RFC 1730,\n   unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064.\n\n11.     Security Considerations\n\n   IMAP4rev1 protocol transactions, including electronic mail data, are\n   sent in the clear over the network unless privacy protection is\n   negotiated in the AUTHENTICATE command.\n\n   A server error message for an AUTHENTICATE command which fails due to\n   invalid credentials SHOULD NOT detail why the credentials are\n   invalid.\n\n   Use of the LOGIN command sends passwords in the clear.  This can be\n   avoided by using the AUTHENTICATE command instead.\n\n\n\nCrispin                     Standards Track                    [Page 74]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n   A server error message for a failing LOGIN command SHOULD NOT specify\n   that the user name, as opposed to the password, is invalid.\n\n   Additional security considerations are discussed in the section\n   discussing the AUTHENTICATE and LOGIN commands.\n\n12.     Author's Address\n\n   Mark R. Crispin\n   Networks and Distributed Computing\n   University of Washington\n   4545 15th Aveneue NE\n   Seattle, WA  98105-4527\n\n   Phone: (206) 543-5762\n\n   EMail: MRC@CAC.Washington.EDU\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 75]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\nAppendices\n\nA.      References\n\n[ACAP] Myers, J. \"ACAP -- Application Configuration Access Protocol\",\nWork in Progress.\n\n[CHARSET] Reynolds, J., and J. Postel, \"Assigned Numbers\", STD 2,\nRFC 1700, USC/Information Sciences Institute, October 1994.\n\n[DISPOSITION] Troost, R., and Dorner, S., \"Communicating Presentation\nInformation in Internet Messages: The Content-Disposition Header\",\nRFC 1806, June 1995.\n\n[IMAP-AUTH] Myers, J., \"IMAP4 Authentication Mechanism\", RFC 1731.\nCarnegie-Mellon University, December 1994.\n\n[IMAP-COMPAT] Crispin, M., \"IMAP4 Compatibility with IMAP2bis\", RFC\n2061, University of Washington, November 1996.\n\n[IMAP-DISC] Austein, R., \"Synchronization Operations for Disconnected\nIMAP4 Clients\", Work in Progress.\n\n[IMAP-HISTORICAL] Crispin, M. \"IMAP4 Compatibility with IMAP2 and\nIMAP2bis\", RFC 1732, University of Washington, December 1994.\n\n[IMAP-MODEL] Crispin, M., \"Distributed Electronic Mail Models in\nIMAP4\", RFC 1733, University of Washington, December 1994.\n\n[IMAP-OBSOLETE] Crispin, M., \"Internet Message Access Protocol -\nObsolete Syntax\", RFC 2062, University of Washington, November 1996.\n\n[IMAP2] Crispin, M., \"Interactive Mail Access Protocol - Version 2\",\nRFC 1176, University of Washington, August 1990.\n\n[LANGUAGE-TAGS] Alvestrand, H., \"Tags for the Identification of\nLanguages\", RFC 1766, March 1995.\n\n[MD5] Myers, J., and M. Rose, \"The Content-MD5 Header Field\", RFC\n1864, October 1995.\n\n[MIME-IMB] Freed, N., and N. Borenstein, \"MIME (Multipurpose Internet\nMail Extensions) Part One: Format of Internet Message Bodies\", RFC\n2045, November 1996.\n\n[MIME-IMT] Freed, N., and N. Borenstein, \"MIME (Multipurpose\nInternet Mail Extensions) Part Two: Media Types\", RFC 2046,\nNovember 1996.\n\n\n\nCrispin                     Standards Track                    [Page 76]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n[MIME-HDRS] Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\nPart Three: Message Header Extensions for Non-ASCII Text\", RFC\n2047, November 1996.\n\n[RFC-822] Crocker, D., \"Standard for the Format of ARPA Internet Text\nMessages\", STD 11, RFC 822, University of Delaware, August 1982.\n\n[SMTP] Postel, J., \"Simple Mail Transfer Protocol\", STD 10,\nRFC 821, USC/Information Sciences Institute, August 1982.\n\n[UTF-7] Goldsmith, D., and Davis, M., \"UTF-7: A Mail-Safe\nTransformation Format of Unicode\", RFC 1642, July 1994.\n\nB.      Changes from RFC 1730\n\n1) The STATUS command has been added.\n\n2) Clarify in the formal syntax that the \"#\" construct can never\nrefer to multiple spaces.\n\n3) Obsolete syntax has been moved to a separate document.\n\n4) The PARTIAL command has been obsoleted.\n\n5) The RFC822.HEADER.LINES, RFC822.HEADER.LINES.NOT, RFC822.PEEK, and\nRFC822.TEXT.PEEK fetch attributes have been obsoleted.\n\n6) The \"<\" origin \".\" size \">\" suffix for BODY text attributes has\nbeen added.\n\n7) The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME, and TEXT part\nspecifiers have been added.\n\n8) Support for Content-Disposition and Content-Language has been\nadded.\n\n9) The restriction on fetching nested MULTIPART parts has been\nremoved.\n\n10) Body part number 0 has been obsoleted.\n\n11) Server-supported authenticators are now identified by\ncapabilities.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 77]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n12) The capability that identifies this protocol is now called\n\"IMAP4rev1\".  A server that provides backwards support for RFC 1730\nSHOULD emit the \"IMAP4\" capability in addition to \"IMAP4rev1\" in its\nCAPABILITY response.  Because RFC-1730 required \"IMAP4\" to appear as\nthe first capability, it MUST listed first in the response.\n\n13) A description of the mailbox name namespace convention has been\nadded.\n\n14) A description of the international mailbox name convention has\nbeen added.\n\n15) The UID-NEXT and UID-VALIDITY status items are now called UIDNEXT\nand UIDVALIDITY.  This is a change from the IMAP STATUS\nWork in Progress and not from RFC-1730\n\n16) Add a clarification that a null mailbox name argument to the LIST\ncommand returns an untagged LIST response with the hierarchy\ndelimiter and root of the reference argument.\n\n17) Define terms such as \"MUST\", \"SHOULD\", and \"MUST NOT\".\n\n18) Add a section which defines message attributes and more\nthoroughly details the semantics of message sequence numbers, UIDs,\nand flags.\n\n19) Add a clarification detailing the circumstances when a client may\nsend multiple commands without waiting for a response, and the\ncircumstances in which ambiguities may result.\n\n20) Add a recommendation on server behavior for DELETE and RENAME\nwhen inferior hierarchical names of the given name exist.\n\n21) Add a clarification that a mailbox name may not be unilaterally\nunsubscribed by the server, even if that mailbox name no longer\nexists.\n\n22) Add a clarification that LIST should return its results quickly\nwithout undue delay.\n\n23) Add a clarification that the date_time argument to APPEND sets\nthe internal date of the message.\n\n24) Add a clarification on APPEND behavior when the target mailbox is\nthe currently selected mailbox.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 78]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n25) Add a clarification that external changes to flags should be\nalways announced via an untagged FETCH even if the current command is\na STORE with the \".SILENT\" suffix.\n\n26) Add a clarification that COPY appends to the target mailbox.\n\n27) Add the NEWNAME response code.\n\n28) Rewrite the description of the untagged BYE response to clarify\nits semantics.\n\n29) Change the reference for the body MD5 to refer to the proper RFC.\n\n30) Clarify that the formal syntax contains rules which may overlap,\nand that in the event of such an overlap the rule which occurs first\ntakes precedence.\n\n31) Correct the definition of body_fld_param.\n\n32) More formal syntax for capability_data.\n\n33) Clarify that any case variant of \"INBOX\" must be interpreted as\nINBOX.\n\n34) Clarify that the human-readable text in resp_text should not\nbegin with \"[\" or \"=\".\n\n35) Change MIME references to Draft Standard documents.\n\n36) Clarify \\Recent semantics.\n\n37) Additional examples.\n\nC.      Key Word Index\n\n       +FLAGS <flag list> (store command data item) ...............   45\n       +FLAGS.SILENT <flag list> (store command data item) ........   46\n       -FLAGS <flag list> (store command data item) ...............   46\n       -FLAGS.SILENT <flag list> (store command data item) ........   46\n       ALERT (response code) ......................................   50\n       ALL (fetch item) ...........................................   41\n       ALL (search key) ...........................................   38\n       ANSWERED (search key) ......................................   38\n       APPEND (command) ...........................................   34\n       AUTHENTICATE (command) .....................................   20\n       BAD (response) .............................................   52\n       BCC <string> (search key) ..................................   38\n       BEFORE <date> (search key) .................................   39\n\n\n\nCrispin                     Standards Track                    [Page 79]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n       BODY (fetch item) ..........................................   41\n       BODY (fetch result) ........................................   58\n       BODY <string> (search key) .................................   39\n       BODY.PEEK[<section>]<<partial>> (fetch item) ...............   44\n       BODYSTRUCTURE (fetch item) .................................   44\n       BODYSTRUCTURE (fetch result) ...............................   59\n       BODY[<section>]<<origin_octet>> (fetch result) .............   58\n       BODY[<section>]<<partial>> (fetch item) ....................   41\n       BYE (response) .............................................   52\n       Body Structure (message attribute) .........................   11\n       CAPABILITY (command) .......................................   18\n       CAPABILITY (response) ......................................   53\n       CC <string> (search key) ...................................   39\n       CHECK (command) ............................................   36\n       CLOSE (command) ............................................   36\n       COPY (command) .............................................   46\n       CREATE (command) ...........................................   25\n       DELETE (command) ...........................................   26\n       DELETED (search key) .......................................   39\n       DRAFT (search key) .........................................   39\n       ENVELOPE (fetch item) ......................................   44\n       ENVELOPE (fetch result) ....................................   62\n       EXAMINE (command) ..........................................   24\n       EXISTS (response) ..........................................   56\n       EXPUNGE (command) ..........................................   37\n       EXPUNGE (response) .........................................   57\n       Envelope Structure (message attribute) .....................   11\n       FAST (fetch item) ..........................................   44\n       FETCH (command) ............................................   41\n       FETCH (response) ...........................................   58\n       FLAGGED (search key) .......................................   39\n       FLAGS (fetch item) .........................................   44\n       FLAGS (fetch result) .......................................   62\n       FLAGS (response) ...........................................   56\n       FLAGS <flag list> (store command data item) ................   45\n       FLAGS.SILENT <flag list> (store command data item) .........   45\n       FROM <string> (search key) .................................   39\n       FULL (fetch item) ..........................................   44\n       Flags (message attribute) ..................................    9\n       HEADER (part specifier) ....................................   41\n       HEADER <field-name> <string> (search key) ..................   39\n       HEADER.FIELDS <header_list> (part specifier) ...............   41\n       HEADER.FIELDS.NOT <header_list> (part specifier) ...........   41\n       INTERNALDATE (fetch item) ..................................   44\n       INTERNALDATE (fetch result) ................................   62\n       Internal Date (message attribute) ..........................   10\n       KEYWORD <flag> (search key) ................................   39\n       Keyword (type of flag) .....................................   10\n\n\n\nCrispin                     Standards Track                    [Page 80]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n       LARGER <n> (search key) ....................................   39\n       LIST (command) .............................................   30\n       LIST (response) ............................................   54\n       LOGIN (command) ............................................   22\n       LOGOUT (command) ...........................................   20\n       LSUB (command) .............................................   32\n       LSUB (response) ............................................   55\n       MAY (specification requirement term) .......................    5\n       MESSAGES (status item) .....................................   33\n       MIME (part specifier) ......................................   42\n       MUST (specification requirement term) ......................    4\n       MUST NOT (specification requirement term) ..................    4\n       Message Sequence Number (message attribute) ................    9\n       NEW (search key) ...........................................   39\n       NEWNAME (response code) ....................................   50\n       NO (response) ..............................................   51\n       NOOP (command) .............................................   19\n       NOT <search-key> (search key) ..............................   39\n       OK (response) ..............................................   51\n       OLD (search key) ...........................................   39\n       ON <date> (search key) .....................................   39\n       OPTIONAL (specification requirement term) ..................    5\n       OR <search-key1> <search-key2> (search key) ................   39\n       PARSE (response code) ......................................   50\n       PERMANENTFLAGS (response code) .............................   50\n       PREAUTH (response) .........................................   52\n       Permanent Flag (class of flag) .............................   10\n       READ-ONLY (response code) ..................................   50\n       READ-WRITE (response code) .................................   50\n       RECENT (response) ..........................................   57\n       RECENT (search key) ........................................   39\n       RECENT (status item) .......................................   33\n       RENAME (command) ...........................................   27\n       REQUIRED (specification requirement term) ..................    4\n       RFC822 (fetch item) ........................................   44\n       RFC822 (fetch result) ......................................   63\n       RFC822.HEADER (fetch item) .................................   44\n       RFC822.HEADER (fetch result) ...............................   62\n       RFC822.SIZE (fetch item) ...................................   44\n       RFC822.SIZE (fetch result) .................................   62\n       RFC822.TEXT (fetch item) ...................................   44\n       RFC822.TEXT (fetch result) .................................   62\n       SEARCH (command) ...........................................   37\n       SEARCH (response) ..........................................   55\n       SEEN (search key) ..........................................   40\n       SELECT (command) ...........................................   23\n       SENTBEFORE <date> (search key) .............................   40\n       SENTON <date> (search key) .................................   40\n\n\n\nCrispin                     Standards Track                    [Page 81]\n\f\nRFC 2060                       IMAP4rev1                   December 1996\n\n\n       SENTSINCE <date> (search key) ..............................   40\n       SHOULD (specification requirement term) ....................    5\n       SHOULD NOT (specification requirement term) ................    5\n       SINCE <date> (search key) ..................................   40\n       SMALLER <n> (search key) ...................................   40\n       STATUS (command) ...........................................   33\n       STATUS (response) ..........................................   55\n       STORE (command) ............................................   45\n       SUBJECT <string> (search key) ..............................   40\n       SUBSCRIBE (command) ........................................   29\n       Session Flag (class of flag) ...............................   10\n       System Flag (type of flag) .................................    9\n       TEXT (part specifier) ......................................   42\n       TEXT <string> (search key) .................................   40\n       TO <string> (search key) ...................................   40\n       TRYCREATE (response code) ..................................   51\n       UID (command) ..............................................   47\n       UID (fetch item) ...........................................   44\n       UID (fetch result) .........................................   63\n       UID <message set> (search key) .............................   40\n       UIDNEXT (status item) ......................................   33\n       UIDVALIDITY (response code) ................................   51\n       UIDVALIDITY (status item) ..................................   34\n       UNANSWERED (search key) ....................................   40\n       UNDELETED (search key) .....................................   40\n       UNDRAFT (search key) .......................................   40\n       UNFLAGGED (search key) .....................................   40\n       UNKEYWORD <flag> (search key) ..............................   40\n       UNSEEN (response code) .....................................   51\n       UNSEEN (search key) ........................................   40\n       UNSEEN (status item) .......................................   34\n       UNSUBSCRIBE (command) ......................................   30\n       Unique Identifier (UID) (message attribute) ................    7\n       X<atom> (command) ..........................................   48\n       [RFC-822] Size (message attribute) .........................   11\n       \\Answered (system flag) ....................................    9\n       \\Deleted (system flag) .....................................    9\n       \\Draft (system flag) .......................................    9\n       \\Flagged (system flag) .....................................    9\n       \\Marked (mailbox name attribute) ...........................   54\n       \\Noinferiors (mailbox name attribute) ......................   54\n       \\Noselect (mailbox name attribute) .........................   54\n       \\Recent (system flag) ......................................   10\n       \\Seen (system flag) ........................................    9\n       \\Unmarked (mailbox name attribute) .........................   54\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 82]\n\f\n"
  },
  {
    "path": "rfc/rfc2086.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 2086                               Carnegie Mellon\nCategory: Standards Track                                   January 1997\n\n\n                          IMAP4 ACL extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.   Abstract\n\n   The ACL extension of the Internet Message Access Protocol [IMAP4]\n   permits access control lists to be manipulated through the IMAP\n   protocol.\n\nTable of Contents\n\n   1.   Abstract............................................... 1\n   2.   Conventions Used in this Document...................... 1\n   3.   Introduction and Overview.............................. 2\n   4.   Commands............................................... 3\n   4.1. SETACL................................................. 3\n   4.2. DELETEACL.............................................. 4\n   4.3. GETACL................................................. 4\n   4.4. LISTRIGHTS............................................. 4\n   4.5. MYRIGHTS............................................... 5\n   5.   Responses.............................................. 5\n   5.1. ACL.................................................... 5\n   5.2. LISTRIGHTS............................................. 6\n   5.3. MYRIGHTS............................................... 6\n   6.   Formal Syntax.......................................... 6\n   7.   References............................................. 7\n   8.   Security Considerations................................ 7\n   9.   Author's Address....................................... 8\n\n2.   Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 1]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n3.   Introduction and Overview\n\n   The ACL extension is present in any IMAP4 implementation which\n   returns \"ACL\" as one of the supported capabilities to the CAPABILITY\n   command.\n\n   An access control list is a set of <identifier,rights> pairs.\n\n   Identifier is a US-ASCII string.  The identifier anyone is reserved\n   to refer to the universal identity (all authentications, including\n   anonymous). All user name strings accepted by the LOGIN or\n   AUTHENTICATE commands to authenticate to the IMAP server are reserved\n   as identifiers for the corresponding user.  Identifiers starting with\n   a dash (\"-\") are reserved for \"negative rights\", described below.\n   All other identifier strings are interpreted in an implementation-\n   defined manner.\n\n   Rights is a string listing a (possibly empty) set of alphanumeric\n   characters, each character listing a set of operations which is being\n   controlled. Letters are reserved for ``standard'' rights, listed\n   below.  The set of standard rights may only be extended by a\n   standards-track document.  Digits are reserved for implementation or\n   site defined rights.  The currently defined standard rights are:\n\n   l - lookup (mailbox is visible to LIST/LSUB commands)\n   r - read (SELECT the mailbox, perform CHECK, FETCH, PARTIAL,\n       SEARCH, COPY from mailbox)\n   s - keep seen/unseen information across sessions (STORE SEEN flag)\n   w - write (STORE flags other than SEEN and DELETED)\n   i - insert (perform APPEND, COPY into mailbox)\n   p - post (send mail to submission address for mailbox,\n       not enforced by IMAP4 itself)\n   c - create (CREATE new sub-mailboxes in any implementation-defined\n       hierarchy)\n   d - delete (STORE DELETED flag, perform EXPUNGE)\n   a - administer (perform SETACL)\n\n   An implementation may tie rights together or may force rights to\n   always or never be granted to particular identifiers.  For example,\n   in an implementation that uses unix mode bits, the rights \"wisd\" are\n   tied, the \"a\" right is always granted to the owner of a mailbox and\n   is never granted to another user.  If rights are tied in an\n   implementation, the implementation must be conservative in granting\n   rights in response to SETACL commands--unless all rights in a tied\n   set are specified, none of that set should be included in the ACL\n   entry for that identifier.  A client may discover the set of rights\n   which may be granted to a given identifier in the ACL for a given\n   mailbox by using the LISTRIGHTS command.\n\n\n\nMyers                       Standards Track                     [Page 2]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n   It is possible for multiple identifiers in an access control list to\n   apply to a given user (or other authentication identity).  For\n   example, an ACL may include rights to be granted to the identifier\n   matching the user, one or more implementation-defined identifiers\n   matching groups which include the user, and/or the identifier\n   \"anyone\".  How these rights are combined to determine the user's\n   access is implementation-defined.  An implementation may choose, for\n   example, to use the union of the rights granted to the applicable\n   identifiers.  An implementation may instead choose, for example, to\n   only use those rights granted to the most specific identifier present\n   in the ACL. A client may determine the set of rights granted to the\n   logged-in user for a given mailbox by using the MYRIGHTS command.\n\n   When an identifier in an ACL starts with a dash (\"-\"), that indicates\n   that associated rights are to be removed from the identifier that is\n   prefixed by the dash.  For example, if the identifier \"-fred\" is\n   granted the \"w\" right, that indicates that the \"w\" right is to be\n   removed from users matching the identifier \"fred\".  Implementations\n   need not support having identifiers which start with a dash in ACLs.\n\n4.   Commands\n\n4.1. SETACL\n\n   Arguments:  mailbox name\n               authentication identifier\n               access right modification\n\n   Data:       no specific data for this command\n\n   Result:     OK - setacl completed\n               NO - setacl failure: can't set acl\n              BAD - command unknown or arguments invalid\n\n      The SETACL command changes the access control list on the\n      specified mailbox so that the specified identifier is granted\n      permissions as specified in the third argument.\n\n      The third argument is a string containing an optional plus (\"+\")\n      or minus (\"-\") prefix, followed by zero or more rights characters.\n      If the string starts with a plus, the following rights are added\n      to any existing rights for the identifier.  If the string starts\n      with a minus, the following rights are removed from any existing\n      rights for the identifier.  If the string does not start with a\n      plus or minus, the rights replace any existing rights for the\n      identifier.\n\n\n\n\n\nMyers                       Standards Track                     [Page 3]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n4.2. DELETEACL\n\n   Arguments:  mailbox name\n               authentication identifier\n\n   Data:       no specific data for this command\n\n   Result:     OK - deleteacl completed\n               NO - deleteacl failure: can't delete acl\n              BAD - command unknown or arguments invalid\n\n      The DELETEACL command removes any <identifier,rights> pair for the\n      specified identifier from the access control list for the specified\n      mailbox.\n\n4.3. GETACL\n\n   Arguments:  mailbox name\n\n   Data:       untagged responses: ACL\n\n   Result:     OK - getacl completed\n               NO - getacl failure: can't get acl\n              BAD - command unknown or arguments invalid\n\n      The GETACL command returns the access control list for mailbox in\n      an untagged ACL reply.\n\n   Example:    C: A002 GETACL INBOX\n               S: * ACL INBOX Fred rwipslda\n               S: A002 OK Getacl complete\n\n4.4. LISTRIGHTS\n\n   Arguments:  mailbox name\n               authentication identifier\n\n   Data:       untagged responses: LISTRIGHTS\n\n   Result:     OK - listrights completed\n               NO - listrights failure: can't get rights list\n              BAD - command unknown or arguments invalid\n\n      The LISTRIGHTS command takes a mailbox name and an identifier and\n      returns information about what rights may be granted to the identifier\n      in the ACL for the mailbox.\n\n\n\n\n\nMyers                       Standards Track                     [Page 4]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n   Example:    C: a001 LISTRIGHTS ~/Mail/saved smith\n               S: * LISTRIGHTS ~/Mail/saved smith la r swicd\n               S: a001 OK Listrights completed\n\n\n               C: a005 LISTRIGHTS archive.imap anyone\n               S: * LISTRIGHTS archive.imap anyone \"\" l r s w i p c d a\n               0 1 2 3 4 5 6 7 8 9\n\n4.5. MYRIGHTS\n\n   Arguments:  mailbox name\n\n   Data:       untagged responses: MYRIGHTS\n\n   Result:     OK - myrights completed\n               NO - myrights failure: can't get rights\n              BAD - command unknown or arguments invalid\n\n      The MYRIGHTS command returns the set of rights that the user has\n      to mailbox in an untagged MYRIGHTS reply.\n\n   Example:    C: A003 MYRIGHTS INBOX\n               S: * MYRIGHTS INBOX rwipslda\n               S: A003 OK Myrights complete\n\n5.   Responses\n\n5.1. ACL\n\n   Data:       mailbox name\n               zero or more identifier rights pairs\n\n      The ACL response occurs as a result of a GETACL command. The first\n      string is the mailbox name for which this ACL applies.  This is\n      followed by zero or more pairs of strings, each pair contains the\n      identifier for which the entry applies followed by the set of\n      rights that the identifier has.\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 5]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n5.2. LISTRIGHTS\n\n   Data:       mailbox name\n               identifier\n               required rights\n               list of optional rights\n\n      The LISTRIGHTS response occurs as a result of a LISTRIGHTS\n      command. The first two strings are the mailbox name and identifier\n      for which this rights list applies.  Following the identifier is a\n      string containing the (possibly empty) set of rights the\n      identifier will always be granted in the mailbox.\n\n      Following this are zero or more strings each containing a set of\n      rights the identifier may be granted in the mailbox.  Rights\n      mentioned in the same string are tied together--either all must be\n      granted to the identifier in the mailbox or none may be granted.\n\n      The same right may not be listed more than once in the LISTRIGHTS\n      command.\n\n5.3. MYRIGHTS\n\n   Data:       mailbox name\n               rights\n\n      The MYRIGHTS response occurs as a result of a MYRIGHTS command.\n      The first string is the mailbox name for which these rights apply.\n      The second string is the set of rights that the client has.\n\n6.   Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [RFC-822] as modified by [IMAP4].\n   Non-terminals referenced but not defined below are as defined by\n   [IMAP4].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only. Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 6]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n   acl_data        ::= \"ACL\" SPACE mailbox *(SPACE identifier SPACE\n                        rights)\n\n   deleteacl       ::= \"DELETEACL\" SPACE mailbox SPACE identifier\n\n   getacl          ::= \"GETACL\" SPACE mailbox\n\n   identifier      ::= astring\n\n   listrights      ::= \"LISTRIGHTS\" SPACE mailbox SPACE identifier\n\n   listrights_data ::= \"LISTRIGHTS\" SPACE mailbox SPACE identifier\n                           SPACE rights *(SPACE rights)\n\n   mod_rights      ::= astring\n                           ;; +rights to add, -rights to remove\n                           ;; rights to replace\n\n   myrights        ::= \"MYRIGHTS\" SPACE mailbox\n\n   myrights_data   ::= \"MYRIGHTS\" SPACE mailbox SPACE rights\n\n   rights          ::= astring\n\n   setacl          ::= \"SETACL\" SPACE mailbox SPACE identifier\n                       SPACE mod_rights\n\n7.   References\n\n   [IMAP4] Crispin, M., \"Internet Message Access Protocol - Version 4\",\n   RFC 1730, University of Washington, December 1994.\n\n   [RFC-822] Crocker, D., \"Standard for the Format of ARPA Internet Text\n   Messages\", STD 11, RFC 822.\n\n8.   Security Considerations\n\n   An implementation must make sure the ACL commands themselves do not\n   give information about mailboxes with appropriately restricted ACL's.\n   For example, a GETACL command on a mailbox for which the user has\n   insufficient rights should not admit the mailbox exists, much less\n   return the mailbox's ACL.\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 7]\n\f\nRFC 2086                     ACL extension                  January 1997\n\n\n9.   Author's Address\n\n   John G. Myers\n   Carnegie-Mellon University\n   5000 Forbes Ave.\n   Pittsburgh PA, 15213-3890\n\n   Email: jgm+@cmu.edu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc2087.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 2087                               Carnegie Mellon\nCategory: Standards Track                                   January 1997\n\n\n                         IMAP4 QUOTA extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.   Abstract\n\n   The QUOTA extension of the Internet Message Access Protocol [IMAP4]\n   permits administrative limits on resource usage (quotas) to be\n   manipulated through the IMAP protocol.\n\nTable of Contents\n\n   1.   Abstract........................................... 1\n   2.   Conventions Used in this Document.................. 1\n   3.   Introduction and Overview.......................... 2\n   4.   Commands........................................... 2\n   4.1. SETQUOTA Command................................... 2\n   4.2. GETQUOTA Command................................... 2\n   4.3. GETQUOTAROOT Command............................... 3\n   5.   Responses.......................................... 3\n   5.1. QUOTA Response..................................... 3\n   5.2. QUOTAROOT Response................................. 4\n   6.   Formal syntax...................................... 4\n   7.   References......................................... 5\n   8.   Security Considerations............................ 5\n   9.   Author's Address................................... 5\n\n\n2.   Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 1]\n\f\nRFC 2087                         QUOTA                      January 1997\n\n\n3.   Introduction and Overview\n\n   The QUOTA extension is present in any IMAP4 implementation which\n   returns \"QUOTA\" as one of the supported capabilities to the\n   CAPABILITY command.\n\n   An IMAP4 server which supports the QUOTA capability may support\n   limits on any number of resources.  Each resource has an atom name\n   and an implementation-defined interpretation which evaluates to an\n   integer.  Examples of such resources are:\n\n      Name       Interpretation\n\n      STORAGE    Sum of messages' RFC822.SIZE, in units of 1024 octets\n      MESSAGE    Number of messages\n\n\n   Each mailbox has zero or more implementation-defined named \"quota\n   roots\".  Each quota root has zero or more resource limits.  All\n   mailboxes that share the same named quota root share the resource\n   limits of the quota root.\n\n   Quota root names do not necessarily have to match the names of\n   existing mailboxes.\n\n4.   Commands\n\n4.1. SETQUOTA Command\n\n   Arguments:  quota root\n               list of resource limits\n\n   Data:       untagged responses: QUOTA\n\n   Result:     OK - setquota completed\n               NO - setquota error: can't set that data\n               BAD - command unknown or arguments invalid\n\n   The SETQUOTA command takes the name of a mailbox quota root and a\n   list of resource limits. The resource limits for the named quota root\n   are changed to be the specified limits.  Any previous resource limits\n   for the named quota root are discarded.\n\n   If the named quota root did not previously exist, an implementation\n   may optionally create it and change the quota roots for any number of\n   existing mailboxes in an implementation-defined manner.\n\n\n\n\n\nMyers                       Standards Track                     [Page 2]\n\f\nRFC 2087                         QUOTA                      January 1997\n\n\n   Example:    C: A001 SETQUOTA \"\" (STORAGE 512)\n               S: * QUOTA \"\" (STORAGE 10 512)\n               S: A001 OK Setquota completed\n\n4.2. GETQUOTA Command\n\n   Arguments:  quota root\n\n   Data:       untagged responses: QUOTA\n\n   Result:     OK - getquota completed\n               NO - getquota  error:  no  such  quota  root,  permission\n               denied\n               BAD - command unknown or arguments invalid\n\n   The GETQUOTA command takes the name of a quota root and returns the\n   quota root's resource usage and limits in an untagged QUOTA response.\n\n   Example:    C: A003 GETQUOTA \"\"\n               S: * QUOTA \"\" (STORAGE 10 512)\n               S: A003 OK Getquota completed\n\n4.3. GETQUOTAROOT Command\n\n   Arguments:  mailbox name\n\n   Data:       untagged responses: QUOTAROOT, QUOTA\n\n   Result:     OK - getquota completed\n               NO - getquota error: no such mailbox, permission denied\n               BAD - command unknown or arguments invalid\n\n   The GETQUOTAROOT command takes the name of a mailbox and returns the\n   list of quota roots for the mailbox in an untagged QUOTAROOT\n   response.  For each listed quota root, it also returns the quota\n   root's resource usage and limits in an untagged QUOTA response.\n\n   Example:    C: A003 GETQUOTAROOT INBOX\n               S: * QUOTAROOT INBOX \"\"\n               S: * QUOTA \"\" (STORAGE 10 512)\n               S: A003 OK Getquota completed\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 3]\n\f\nRFC 2087                         QUOTA                      January 1997\n\n\n5.   Responses\n\n5.1. QUOTA Response\n\n   Data:       quota root name\n               list of resource names, usages, and limits\n\n      This response occurs as a result of a GETQUOTA or GETQUOTAROOT\n      command. The first string is the name of the quota root for which\n      this quota applies.\n\n      The name is followed by a S-expression format list of the resource\n      usage and limits of the quota root.  The list contains zero or\n      more triplets.  Each triplet conatins a resource name, the current\n      usage of the resource, and the resource limit.\n\n      Resources not named in the list are not limited in the quota root.\n      Thus, an empty list means there are no administrative resource\n      limits in the quota root.\n\n      Example:    S: * QUOTA \"\" (STORAGE 10 512)\n\n5.2. QUOTAROOT Response\n\n   Data:       mailbox name\n               zero or more quota root names\n\n      This response occurs as a result of a GETQUOTAROOT command.  The\n      first string is the mailbox and the remaining strings are the\n      names of the quota roots for the mailbox.\n\n      Example:    S: * QUOTAROOT INBOX \"\"\n                  S: * QUOTAROOT comp.mail.mime\n\n6.   Formal syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in RFC 822 with one exception; the\n   delimiter used with the \"#\" construct is a single space (SP) and not\n   one or more commas.\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 4]\n\f\nRFC 2087                         QUOTA                      January 1997\n\n\n   getquota        ::= \"GETQUOTA\" SP astring\n\n   getquotaroot    ::= \"GETQUOTAROOT\" SP astring\n\n   quota_list      ::= \"(\" #quota_resource \")\"\n\n   quota_resource  ::= atom SP number SP number\n\n   quota_response  ::= \"QUOTA\" SP astring SP quota_list\n\n   quotaroot_response\n                   ::= \"QUOTAROOT\" SP astring *(SP astring)\n\n   setquota        ::= \"SETQUOTA\" SP astring SP setquota_list\n\n   setquota_list   ::= \"(\" 0#setquota_resource \")\"\n\n   setquota_resource ::= atom SP number\n\n7.   References\n\n   [IMAP4] Crispin, M., \"Internet Message Access Protocol - Version 4\",\n   RFC 1730, University of Washington, December 1994.\n\n   [RFC-822] Crocker, D., \"Standard for    the Format of ARPA Internet\n   Text Messages\", STD 11, RFC 822.\n\n8.   Security Considerations\n\n   Implementors should be careful to make sure the implementation of\n   these commands does not violate the site's security policy. The\n   resource usage of other users is likely to be considered confidential\n   information and should not be divulged to unauthorized persons.\n\n9.   Author's Address\n\n   John G. Myers\n   Carnegie-Mellon University\n   5000 Forbes Ave.\n   Pittsburgh PA, 15213-3890\n\n   EMail: jgm+@cmu.edu\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc2088.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 2088                               Carnegie Mellon\nCateogry: Standards Track                                   January 1997\n\n\n                    IMAP4 non-synchronizing literals\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.   Abstract\n\n   The Internet Message Access Protocol [IMAP4] contains the \"literal\"\n   syntactic construct for communicating strings.  When sending a\n   literal from client to server, IMAP4 requires the client to wait for\n   the server to send a command continuation request between sending the\n   octet count and the string data.  This document specifies an\n   alternate form of literal which does not require this network round\n   trip.\n\n2.   Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n3.   Specification\n\n   The non-synchronizing literal is added an alternate form of literal,\n   and may appear in communication from client to server instead of the\n   IMAP4 form of literal.  The IMAP4 form of literal, used in\n   communication from client to server, is referred to as a\n   synchronizing literal.\n\n   Non-synchronizing literals may be used with any IMAP4 server\n   implementation which returns \"LITERAL+\" as one of the supported\n   capabilities to the CAPABILITY command.  If the server does not\n   advertise the LITERAL+ capability, the client must use synchronizing\n   literals instead.\n\n   The non-synchronizing literal is distinguished from the original\n   synchronizing literal by having a plus ('+') between the octet count\n   and the closing brace ('}').  The server does not generate a command\n   continuation request in response to a non-synchronizing literal, and\n\n\n\nMyers                       Standards Track                     [Page 1]\n\f\nRFC 2088                        LITERAL                     January 1997\n\n\n   clients are not required to wait before sending the octets of a non-\n   synchronizing literal.\n\n   The protocol receiver of an IMAP4 server must check the end of every\n   received line for an open brace ('{') followed by an octet count, a\n   plus ('+'), and a close brace ('}') immediately preceeding the CRLF.\n   If it finds this sequence, it is the octet count of a non-\n   synchronizing literal and the server MUST treat the specified number\n   of following octets and the following line as part of the same\n   command.  A server MAY still process commands and reject errors on a\n   line-by-line basis, as long as it checks for non-synchronizing\n   literals at the end of each line.\n\n   Example:    C: A001 LOGIN {11+}\n               C: FRED FOOBAR {7+}\n               C: fat man\n               S: A001 OK LOGIN completed\n\n4.   Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [RFC-822] as modified by [IMAP4].\n   Non-terminals referenced but not defined below are as defined by\n   [IMAP4].\n\n   literal         ::= \"{\" number [\"+\"] \"}\" CRLF *CHAR8\n                       ;; Number represents the number of CHAR8 octets\n\n6.   References\n\n   [IMAP4] Crispin, M., \"Internet Message Access Protocol - Version 4\",\n   draft-crispin-imap-base-XX.txt, University of Washington, April 1996.\n\n   [RFC-822] Crocker, D., \"Standard for the Format of ARPA Internet Text\n   Messages\", STD 11, RFC 822.\n\n7.   Security Considerations\n\n   There are no known security issues with this extension.\n\n8.   Author's Address\n\n   John G. Myers\n   Carnegie-Mellon University\n   5000 Forbes Ave.\n   Pittsburgh PA, 15213-3890\n\n   Email: jgm+@cmu.edu\n\n\n\nMyers                       Standards Track                     [Page 2]\n\f\n"
  },
  {
    "path": "rfc/rfc2177.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           B. Leiba\nRequest for Comments: 2177               IBM T.J. Watson Research Center\nCategory: Standards Track                                      June 1997\n\n\n                           IMAP4 IDLE command\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.   Abstract\n\n   The Internet Message Access Protocol [IMAP4] requires a client to\n   poll the server for changes to the selected mailbox (new mail,\n   deletions).  It's often more desirable to have the server transmit\n   updates to the client in real time.  This allows a user to see new\n   mail immediately.  It also helps some real-time applications based on\n   IMAP, which might otherwise need to poll extremely often (such as\n   every few seconds).  (While the spec actually does allow a server to\n   push EXISTS responses aysynchronously, a client can't expect this\n   behaviour and must poll.)\n\n   This document specifies the syntax of an IDLE command, which will\n   allow a client to tell the server that it's ready to accept such\n   real-time updates.\n\n2.   Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as described in RFC 2060\n   [IMAP4].\n\n3.   Specification\n\n   IDLE Command\n\n   Arguments:  none\n\n   Responses:  continuation data will be requested; the client sends\n               the continuation data \"DONE\" to end the command\n\n\n\nLeiba                       Standards Track                     [Page 1]\n\f\nRFC 2177                   IMAP4 IDLE command                  June 1997\n\n\n\n   Result:     OK - IDLE completed after client sent \"DONE\"\n               NO - failure: the server will not allow the IDLE\n                    command at this time\n              BAD - command unknown or arguments invalid\n\n   The IDLE command may be used with any IMAP4 server implementation\n   that returns \"IDLE\" as one of the supported capabilities to the\n   CAPABILITY command.  If the server does not advertise the IDLE\n   capability, the client MUST NOT use the IDLE command and must poll\n   for mailbox updates.  In particular, the client MUST continue to be\n   able to accept unsolicited untagged responses to ANY command, as\n   specified in the base IMAP specification.\n\n   The IDLE command is sent from the client to the server when the\n   client is ready to accept unsolicited mailbox update messages.  The\n   server requests a response to the IDLE command using the continuation\n   (\"+\") response.  The IDLE command remains active until the client\n   responds to the continuation, and as long as an IDLE command is\n   active, the server is now free to send untagged EXISTS, EXPUNGE, and\n   other messages at any time.\n\n   The IDLE command is terminated by the receipt of a \"DONE\"\n   continuation from the client; such response satisfies the server's\n   continuation request.  At that point, the server MAY send any\n   remaining queued untagged responses and then MUST immediately send\n   the tagged response to the IDLE command and prepare to process other\n   commands. As in the base specification, the processing of any new\n   command may cause the sending of unsolicited untagged responses,\n   subject to the ambiguity limitations.  The client MUST NOT send a\n   command while the server is waiting for the DONE, since the server\n   will not be able to distinguish a command from a continuation.\n\n   The server MAY consider a client inactive if it has an IDLE command\n   running, and if such a server has an inactivity timeout it MAY log\n   the client off implicitly at the end of its timeout period.  Because\n   of that, clients using IDLE are advised to terminate the IDLE and\n   re-issue it at least every 29 minutes to avoid being logged off.\n   This still allows a client to receive immediate mailbox updates even\n   though it need only \"poll\" at half hour intervals.\n\n\n\n\n\n\n\n\n\n\n\nLeiba                       Standards Track                     [Page 2]\n\f\nRFC 2177                   IMAP4 IDLE command                  June 1997\n\n\n   Example:    C: A001 SELECT INBOX\n               S: * FLAGS (Deleted Seen)\n               S: * 3 EXISTS\n               S: * 0 RECENT\n               S: * OK [UIDVALIDITY 1]\n               S: A001 OK SELECT completed\n               C: A002 IDLE\n               S: + idling\n               ...time passes; new mail arrives...\n               S: * 4 EXISTS\n               C: DONE\n               S: A002 OK IDLE terminated\n               ...another client expunges message 2 now...\n               C: A003 FETCH 4 ALL\n               S: * 4 FETCH (...)\n               S: A003 OK FETCH completed\n               C: A004 IDLE\n               S: * 2 EXPUNGE\n               S: * 3 EXISTS\n               S: + idling\n               ...time passes; another client expunges message 3...\n               S: * 3 EXPUNGE\n               S: * 2 EXISTS\n               ...time passes; new mail arrives...\n               S: * 3 EXISTS\n               C: DONE\n               S: A004 OK IDLE terminated\n               C: A005 FETCH 3 ALL\n               S: * 3 FETCH (...)\n               S: A005 OK FETCH completed\n               C: A006 IDLE\n\n4.   Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [RFC-822] as modified by [IMAP4].\n   Non-terminals referenced but not defined below are as defined by\n   [IMAP4].\n\n   command_auth    ::= append / create / delete / examine / list / lsub /\n                       rename / select / status / subscribe / unsubscribe\n                       / idle\n                       ;; Valid only in Authenticated or Selected state\n\n   idle            ::= \"IDLE\" CRLF \"DONE\"\n\n\n\n\n\n\nLeiba                       Standards Track                     [Page 3]\n\f\nRFC 2177                   IMAP4 IDLE command                  June 1997\n\n\n5.   References\n\n   [IMAP4] Crispin, M., \"Internet Message Access Protocol - Version\n   4rev1\", RFC 2060, December 1996.\n\n6.   Security Considerations\n\n   There are no known security issues with this extension.\n\n7.   Author's Address\n\n   Barry Leiba\n   IBM T.J. Watson Research Center\n   30 Saw Mill River Road\n   Hawthorne, NY  10532\n\n   Email: leiba@watson.ibm.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba                       Standards Track                     [Page 4]\n\f\n"
  },
  {
    "path": "rfc/rfc2193.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        M. Gahrns\nRequest for Comments: 2193                                   Microsoft\nCategory: Standards Track                               September 1997\n\n\n                        IMAP4 Mailbox Referrals\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1. Abstract\n\n   When dealing with large amounts of users, messages and geographically\n   dispersed IMAP4 [RFC-2060] servers, it is often desirable to\n   distribute messages amongst different servers within an organization.\n   For example an administrator may choose to store user's personal\n   mailboxes on a local IMAP4 server, while storing shared mailboxes\n   remotely on another server.  This type of configuration is common\n   when it is uneconomical to store all data centrally due to limited\n   bandwidth or disk resources.\n\n   Mailbox referrals allow clients to seamlessly access mailboxes that\n   are distributed across several IMAP4 servers.\n\n   A referral mechanism can provide efficiencies over the alternative\n   \"proxy method\", in which the local IMAP4 server contacts the remote\n   server on behalf of the client, and then transfers the data from the\n   remote server to itself, and then on to the client.  The referral\n   mechanism's direct client connection to the remote server is often a\n   more efficient use of bandwidth, and does not require the local\n   server to impersonate the client when authenticating to the remote\n   server.\n\n2. Conventions used in this document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   A home server, is an IMAP4 server that contains the user's inbox.\n\n   A remote mailbox is a mailbox that is not hosted on the user's home\n   server.\n\n\n\n\nGahrns                      Standards Track                     [Page 1]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n   A remote server is a server that contains remote mailboxes.\n\n   A shared mailbox, is a mailbox that multiple users have access to.\n\n   An IMAP mailbox referral is when the server directs the client to\n   another IMAP mailbox.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\",  \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC-2119].\n\n3. Introduction and Overview\n\n   IMAP4 servers that support this extension MUST list the keyword\n   MAILBOX-REFERRALS in their CAPABILITY response.  No client action is\n   needed to invoke the MAILBOX-REFERRALS capability in a server.\n\n   A MAILBOX-REFERRALS capable IMAP4 server MUST NOT return referrals\n   that result in a referrals loop.\n\n   A referral response consists of a tagged NO response and a REFERRAL\n   response code.  The REFERRAL response code MUST contain as an\n   argument a one or more valid URLs separated by a space as defined in\n   [RFC-1738]. If a server replies with multiple URLs for a particular\n   object, they MUST all be of the same type. In this case, the URL MUST\n   be an IMAP URL as defined in [RFC-2192].  A client that supports the\n   REFERRALS extension MUST be prepared for a URL of any type, but it\n   need only be able to process IMAP URLs.\n\n   A server MAY respond with multiple IMAP mailbox referrals if there is\n   more than one replica of the mailbox.  This allows the implementation\n   of a load balancing or failover scheme. How a server keeps multiple\n   replicas of a mailbox in sync is not addressed by this document.\n\n   If the server has a preferred order in which the client should\n   attempt to access the URLs, the preferred URL SHOULD be listed in the\n   first, with the remaining URLs presented in descending order of\n   preference.  If multiple referrals are given for a mailbox, a server\n   should be aware that there are synchronization issues for a client if\n   the UIDVALIDITY of the referred mailboxes are different.\n\n   An IMAP mailbox referral may be given in response to an IMAP command\n   that specifies a mailbox as an argument.\n\n\n\n\n\n\n\n\nGahrns                      Standards Track                     [Page 2]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n   Example:\n\n      A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/REMOTE]Remote Mailbox\n\n   NOTE: user;AUTH=* is specified as required by [RFC-2192] to avoid a\n   client falling back to anonymous login.\n\n   Remote mailboxes and their inferiors, that are accessible only via\n   referrals SHOULD NOT appear in LIST and LSUB responses issued against\n   the user's home server.  They MUST appear in RLIST and RLSUB\n   responses issued against the user's home server. Hierarchy referrals,\n   in which a client would be required to connect to the remote server\n   to issue a LIST to discover the inferiors of a mailbox are not\n   addressed in this document.\n\n   For example, if shared mailboxes were only accessible via referrals\n   on a remote server, a RLIST \"\" \"#SHARED/%\" command would return the\n   same response if issued against the user's home server or the remote\n   server.\n\n   Note: Mailboxes that are available on the user's home server do not\n   need to be available on the remote server.  In addition, there may be\n   additional mailboxes available on the remote server, but they will\n   not accessible to the client via referrals unless they appear in the\n   LIST response to the RLIST command against the user's home server.\n\n   A MAILBOX-REFERRALS capable client will issue the RLIST and RLSUB\n   commands in lieu of LIST and LSUB.  The RLIST and RLSUB commands\n   behave identically to their LIST and LSUB counterparts, except remote\n   mailboxes are returned in addition to local mailboxes in the LIST and\n   LSUB responses.  This avoids displaying to a non MAILBOX-REFERRALS\n   enabled client inaccessible remote mailboxes.\n\n4.1. SELECT, EXAMINE, DELETE, SUBSCRIBE, UNSUBSCRIBE, STATUS and APPEND\n     Referrals\n\n   An IMAP4 server MAY respond to the SELECT, EXAMINE, DELETE,\n   SUBSCRIBE, UNSUBSCRIBE, STATUS or APPEND command with one or more\n   IMAP mailbox referrals to indicate to the client that the mailbox is\n   hosted on a remote server.\n\n   When a client processes an IMAP mailbox referral, it will open a new\n   connection or use an existing connection to the remote server so that\n   it is able to issue the commands necessary to process the remote\n   mailbox.\n\n\n\n\n\n\nGahrns                      Standards Track                     [Page 3]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n   Example:  <IMAP4 connection to home server>\n\n      C: A001 DELETE \"SHARED/FOO\"\n      S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/FOO]\n             Remote mailbox. Try SERVER2.\n\n      <Client established a second connection to SERVER2 and\n      issues the DELETE command on the referred mailbox>\n\n      S: * OK IMAP4rev1 server ready\n      C: B001 AUTHENTICATE KERBEROS_V4\n      <authentication exchange>\n      S: B001 OK user is authenticated\n\n      C: B002 DELETE \"SHARED/FOO\"\n      S: B002 OK DELETE completed\n\n   Example:  <IMAP4 connection to home server>\n\n      C: A001 SELECT REMOTE\n      S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/REMOTE\n          IMAP://user;AUTH=*@SERVER3/REMOTE] Remote mailbox.\n          Try SERVER2 or SERVER3.\n\n      <Client opens second connection to remote server, and\n       issues the commands needed to process the items in the\n       remote mailbox>\n\n      S: * OK IMAP4rev1 server ready\n      C: B001 AUTHENTICATE KERBEROS_V4\n      <authentication exchange>\n      S: B001 OK user is authenticated\n\n      C: B002 SELECT REMOTE\n      S: * 12 EXISTS\n      S: * 1 RECENT\n      S: * OK [UNSEEN 10] Message 10 is first unseen\n      S: * OK [UIDVALIDITY 123456789]\n      S: * FLAGS (Answered Flagged Deleted Seen Draft)\n      S: * OK [PERMANENTFLAGS (Answered Deleted Seen ]\n      S: B002 OK [READ-WRITE] Selected completed\n\n      C: B003 FETCH 10:12 RFC822\n      S: * 10 FETCH . . .\n      S: * 11 FETCH . . .\n      S: * 12 FETCH . . .\n      S: B003 OK FETCH Completed\n\n\n\n\nGahrns                      Standards Track                     [Page 4]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n      <Client is finished processing the REMOTE mailbox and\n       wants to process a mailbox on its home server>\n\n      C: B004 LOGOUT\n      S: * BYE IMAP4rev1 server logging out\n      S: B004 OK LOGOUT Completed\n\n      <Client continues with first connection>\n\n      C: A002 SELECT INBOX\n      S: * 16 EXISTS\n      S: * 2 RECENT\n      S: * OK [UNSEEN 10] Message 10 is first unseen\n      S: * OK [UIDVALIDITY 123456789]\n      S: * FLAGS (Answered Flagged Deleted Seen Draft)\n      S: * OK [PERMANENTFLAGS (Answered Deleted Seen ]\n      S: A002 OK [READ-WRITE] Selected completed\n\n4.2. CREATE Referrals\n\n   An IMAP4 server MAY respond to the CREATE command with one or more\n   IMAP mailbox referrals, if it wishes to direct the client to issue\n   the CREATE against another server.  The server can employ any means,\n   such as examining the hierarchy of the specified mailbox name, in\n   determining which server the mailbox should be created on.\n\n   Example:\n\n      C: A001 CREATE \"SHARED/FOO\"\n      S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/FOO]\n         Mailbox should be created on remote server\n\n   Alternatively, because a home server is required to maintain a\n   listing of referred remote mailboxes, a server MAY allow the creation\n   of a mailbox that will ultimately reside on a remote server against\n   the home server, and provide referrals on subsequent commands that\n   manipulate the mailbox.\n\n   Example:\n\n      C: A001 CREATE \"SHARED/FOO\"\n      S: A001 OK CREATE succeeded\n\n      C: A002 SELECT \"SHARED/FOO\"\n      S: A002 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/FOO]\n         Remote mailbox.  Try SERVER2\n\n\n\n\n\nGahrns                      Standards Track                     [Page 5]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n4.3. RENAME Referrals\n\n   An IMAP4 server MAY respond to the RENAME command with one or more\n   pairs of IMAP mailbox referrals.  In each pair of IMAP mailbox\n   referrals, the first one is an URL to the existing mailbox name and\n   the second is an URL to the requested new mailbox name.\n\n   If within an IMAP mailbox referral pair, the existing and new mailbox\n   URLs are on different servers, the remote servers are unable to\n   perform the RENAME operation.   To achieve the same behavior of\n   server RENAME, the client MAY issue the constituent CREATE, FETCH,\n   APPEND, and DELETE commands against both servers.\n\n   If within an IMAP mailbox referral pair, the existing and new mailbox\n   URLs are on the same server it is an indication that the currently\n   connected server is unable to perform the operation.  The client can\n   simply re-issue the RENAME command on the remote server.\n\n   Example:\n\n      C: A001 RENAME FOO BAR\n      S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER1/FOO\n              IMAP://user;AUTH=*@SERVER2/BAR] Unable to rename mailbox\n              across servers\n\n   Since the existing and new mailbox names are on different servers,\n   the client would be required to make a connection to both servers and\n   issue the constituent commands require to achieve the RENAME.\n\n   Example:\n\n      C: A001 RENAME FOO BAR\n      S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/FOO\n              IMAP://user;AUTH=*@SERVER2/BAR] Unable to rename mailbox\n              located on SERVER2\n\n   Since both the existing and new mailbox are on the same remote\n   server, the client can simply make a connection to the remote server\n   and re-issue the RENAME command.\n\n4.4. COPY Referrals\n\n   An IMAP4 server MAY respond to the COPY command with one or more IMAP\n   mailbox referrals.  This indicates that the destination mailbox is on\n   a remote server.  To achieve the same behavior of a server COPY, the\n   client MAY issue the constituent FETCH and APPEND commands against\n   both servers.\n\n\n\n\nGahrns                      Standards Track                     [Page 6]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n   Example:\n\n      C: A001 COPY 1 \"SHARED/STUFF\"\n      S: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/SHARED/STUFF]\n              Unable to copy message(s) to SERVER2.\n\n5.1 RLIST command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Responses:  untagged responses: LIST\n\n   Result:     OK - RLIST Completed\n               NO - RLIST Failure\n               BAD - command unknown or arguments invalid\n\n   The RLIST command behaves identically to its LIST counterpart, except\n   remote mailboxes are returned in addition to local mailboxes in the\n   LIST responses.\n\n5.2 RLSUB Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Responses:  untagged responses: LSUB\n\n   Result:     OK - RLSUB Completed\n               NO - RLSUB Failure\n               BAD - command unknown or arguments invalid\n\n   The RLSUB command behaves identically to its LSUB counterpart, except\n   remote mailboxes are returned in addition to local mailboxes in the\n   LSUB responses.\n\n6. Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [ABNF].\n\n   list_mailbox = <list_mailbox> as defined in [RFC-2060]\n\n   mailbox = <mailbox> as defined in [RFC-2060]\n\n   mailbox_referral = <tag> SPACE \"NO\" SPACE\n      <referral_response_code> (text / text_mime2)\n      ; See [RFC-2060] for <tag>, text and text_mime2 definition\n\n\n\nGahrns                      Standards Track                     [Page 7]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n   referral_response_code = \"[\" \"REFERRAL\" 1*(SPACE <url>) \"]\"\n      ; See [RFC-1738] for <url> definition\n\n   rlist = \"RLIST\" SPACE mailbox SPACE list_mailbox\n\n   rlsub = \"RLSUB\" SPACE mailbox SPACE list_mailbox\n\n6. Security Considerations\n\n   The IMAP4 referral mechanism makes use of IMAP URLs, and as such,\n   have the same security considerations as general internet URLs [RFC-\n   1738], and in particular IMAP URLs [RFC-2192].\n\n   With the MAILBOX-REFERRALS capability, it is potentially easier to\n   write a rogue server that injects a bogus referral response that\n   directs a user to an incorrect mailbox.  Although referrals reduce\n   the effort to write such a server, the referral response makes\n   detection of the intrusion easier.\n\n7. References\n\n   [RFC-2060], Crispin, M., \"Internet Message Access Protocol - Version\n   4rev1\", RFC 2060, University of Washington, December 1996.\n\n   [RFC-2192], Newman, C., \"IMAP URL Scheme\", RFC 2192, Innosoft,\n   September 1997.\n\n   [RFC-1738], Berners-Lee, T., Masinter, L., and M. McCahill, \"Uniform\n   Resource Locators (URL)\", RFC 1738, CERN, Xerox Corporation,\n   University of Minnesota, December 1994.\n\n   [RFC-2119], Bradner, S., \"Key words for use in RFCs to Indicate\n   Requirement Levels\", RFC 2119, Harvard University, March 1997.\n\n   [ABNF], DRUMS working group, Dave Crocker Editor, \"Augmented BNF for\n   Syntax Specifications: ABNF\", Work in Progress, Internet Mail\n   Consortium, April 1997.\n\n8.  Acknowledgments\n\n   Many valuable suggestions were received from private discussions and\n   the IMAP4 mailing list.  In particular, Raymond Cheng, Mark Crispin,\n   Mark Keasling, Chris Newman and Larry Osterman made significant\n   contributions to this document.\n\n\n\n\n\n\n\nGahrns                      Standards Track                     [Page 8]\n\f\nRFC 2193                IMAP4 Mailbox Referrals           September 1997\n\n\n9. Author's Address\n\n   Mike Gahrns\n   Microsoft\n   One Microsoft Way\n   Redmond, WA, 98072\n\n   Phone: (206) 936-9833\n   EMail: mikega@microsoft.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGahrns                      Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc2195.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                       J. Klensin\nRequest for Comments: 2195                                    R. Catoe\nCategory: Standards Track                                 P. Krumviede\nObsoletes: 2095                                                    MCI\n                                                        September 1997\n\n\n       IMAP/POP AUTHorize Extension for Simple Challenge/Response\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   While IMAP4 supports a number of strong authentication mechanisms as\n   described in RFC 1731, it lacks any mechanism that neither passes\n   cleartext, reusable passwords across the network nor requires either\n   a significant security infrastructure or that the mail server update\n   a mail-system-wide user authentication file on each mail access.\n   This specification provides a simple challenge-response\n   authentication protocol that is suitable for use with IMAP4.  Since\n   it utilizes Keyed-MD5 digests and does not require that the secret be\n   stored in the clear on the server, it may also constitute an\n   improvement on APOP for POP3 use as specified in RFC 1734.\n\n1. Introduction\n\n   Existing Proposed Standards specify an AUTHENTICATE mechanism for the\n   IMAP4 protocol [IMAP, IMAP-AUTH] and a parallel AUTH mechanism for\n   the POP3 protocol [POP3-AUTH].  The AUTHENTICATE mechanism is\n   intended to be extensible; the four methods specified in [IMAP-AUTH]\n   are all fairly powerful and require some security infrastructure to\n   support.  The base POP3 specification [POP3] also contains a\n   lightweight challenge-response mechanism called APOP.  APOP is\n   associated with most of the risks associated with such protocols: in\n   particular, it requires that both the client and server machines have\n   access to the shared secret in cleartext form. CRAM offers a method\n   for avoiding such cleartext storage while retaining the algorithmic\n   simplicity of APOP in using only MD5, though in a \"keyed\" method.\n\n\n\n\n\n\n\nKlensin, Catoe & Krumviede  Standards Track                     [Page 1]\n\f\nRFC 2195              IMAP/POP AUTHorize Extension        September 1997\n\n\n   At present, IMAP [IMAP] lacks any facility corresponding to APOP.\n   The only alternative to the strong mechanisms identified in [IMAP-\n   AUTH] is a presumably cleartext username and password, supported\n   through the LOGIN command in [IMAP].  This document describes a\n   simple challenge-response mechanism, similar to APOP and PPP CHAP\n   [PPP], that can be used with IMAP (and, in principle, with POP3).\n\n   This mechanism also has the advantage over some possible alternatives\n   of not requiring that the server maintain information about email\n   \"logins\" on a per-login basis.  While mechanisms that do require such\n   per-login history records may offer enhanced security, protocols such\n   as IMAP, which may have several connections between a given client\n   and server open more or less simultaneous, may make their\n   implementation particularly challenging.\n\n2. Challenge-Response Authentication Mechanism (CRAM)\n\n   The authentication type associated with CRAM is \"CRAM-MD5\".\n\n   The data encoded in the first ready response contains an\n   presumptively arbitrary string of random digits, a timestamp, and the\n   fully-qualified primary host name of the server.  The syntax of the\n   unencoded form must correspond to that of an RFC 822 'msg-id'\n   [RFC822] as described in [POP3].\n\n   The client makes note of the data and then responds with a string\n   consisting of the user name, a space, and a 'digest'.  The latter is\n   computed by applying the keyed MD5 algorithm from [KEYED-MD5] where\n   the key is a shared secret and the digested text is the timestamp\n   (including angle-brackets).\n\n   This shared secret is a string known only to the client and server.\n   The `digest' parameter itself is a 16-octet value which is sent in\n   hexadecimal format, using lower-case ASCII characters.\n\n   When the server receives this client response, it verifies the digest\n   provided.  If the digest is correct, the server should consider the\n   client authenticated and respond appropriately.\n\n   Keyed MD5 is chosen for this application because of the greater\n   security imparted to authentication of short messages. In addition,\n   the use of the techniques described in [KEYED-MD5] for precomputation\n   of intermediate results make it possible to avoid explicit cleartext\n   storage of the shared secret on the server system by instead storing\n   the intermediate results which are known as \"contexts\".\n\n\n\n\n\n\nKlensin, Catoe & Krumviede  Standards Track                     [Page 2]\n\f\nRFC 2195              IMAP/POP AUTHorize Extension        September 1997\n\n\n   CRAM does not support a protection mechanism.\n\n   Example:\n\n   The examples in this document show the use of the CRAM mechanism with\n   the IMAP4 AUTHENTICATE command [IMAP-AUTH].  The base64 encoding of\n   the challenges and responses is part of the IMAP4 AUTHENTICATE\n   command, not part of the CRAM specification itself.\n\n     S: * OK IMAP4 Server\n     C: A0001 AUTHENTICATE CRAM-MD5\n     S: + PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ+\n     C: dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw\n     S: A0001 OK CRAM authentication successful\n\n      In this example, the shared secret is the string\n      'tanstaaftanstaaf'.  Hence, the Keyed MD5 digest is produced by\n      calculating\n\n        MD5((tanstaaftanstaaf XOR opad),\n            MD5((tanstaaftanstaaf XOR ipad),\n            <1896.697170952@postoffice.reston.mci.net>))\n\n      where ipad and opad are as defined in the keyed-MD5 Work in\n      Progress [KEYED-MD5] and the string shown in the challenge is the\n      base64 encoding of <1896.697170952@postoffice.reston.mci.net>. The\n      shared secret is null-padded to a length of 64 bytes. If the\n      shared secret is longer than 64 bytes, the MD5 digest of the\n      shared secret is used as a 16 byte input to the keyed MD5\n      calculation.\n\n      This produces a digest value (in hexadecimal) of\n\n           b913a602c7eda7a495b4e6e7334d3890\n\n      The user name is then prepended to it, forming\n\n           tim b913a602c7eda7a495b4e6e7334d3890\n\n      Which is then base64 encoded to meet the requirements of the IMAP4\n      AUTHENTICATE command (or the similar POP3 AUTH command), yielding\n\n           dGltIGI5MTNhNjAyYzdlZGE3YTQ5NWI0ZTZlNzMzNGQzODkw\n\n\n\n\n\n\n\n\nKlensin, Catoe & Krumviede  Standards Track                     [Page 3]\n\f\nRFC 2195              IMAP/POP AUTHorize Extension        September 1997\n\n\n3. References\n\n   [CHAP]  Lloyd, B., and W. Simpson, \"PPP Authentication Protocols\",\n       RFC 1334, October 1992.\n\n   [IMAP] Crispin, M., \"Internet Message Access Protocol - Version\n       4rev1\", RFC 2060, University of Washington, December 1996.\n\n   [IMAP-AUTH] Myers, J., \"IMAP4 Authentication Mechanisms\",\n       RFC 1731, Carnegie Mellon, December 1994.\n\n   [KEYED-MD5] Krawczyk, Bellare, Canetti, \"HMAC: Keyed-Hashing for\n       Message Authentication\", RFC 2104, February 1997.\n\n   [MD5]  Rivest, R., \"The MD5 Message Digest Algorithm\",\n       RFC 1321, MIT Laboratory for Computer Science, April 1992.\n\n   [POP3] Myers, J., and M. Rose, \"Post Office Protocol - Version 3\",\n       STD 53, RFC 1939, Carnegie Mellon, May 1996.\n\n   [POP3-AUTH] Myers, J., \"POP3 AUTHentication command\", RFC 1734,\n       Carnegie Mellon, December, 1994.\n\n4. Security Considerations\n\n   It is conjectured that use of the CRAM authentication mechanism\n   provides origin identification and replay protection for a session.\n   Accordingly, a server that implements both a cleartext password\n   command and this authentication type should not allow both methods of\n   access for a given user.\n\n   While the saving, on the server, of \"contexts\" (see section 2) is\n   marginally better than saving the shared secrets in cleartext as is\n   required by CHAP [CHAP] and APOP [POP3], it is not sufficient to\n   protect the secrets if the server itself is compromised.\n   Consequently, servers that store the secrets or contexts must both be\n   protected to a level appropriate to the potential information value\n   in user mailboxes and identities.\n\n   As the length of the shared secret increases, so does the difficulty\n   of deriving it.\n\n   While there are now suggestions in the literature that the use of MD5\n   and keyed MD5 in authentication procedures probably has a limited\n   effective lifetime, the technique is now widely deployed and widely\n   understood.  It is believed that this general understanding may\n   assist with the rapid replacement, by CRAM-MD5, of the current uses\n   of permanent cleartext passwords in IMAP.   This document has been\n\n\n\nKlensin, Catoe & Krumviede  Standards Track                     [Page 4]\n\f\nRFC 2195              IMAP/POP AUTHorize Extension        September 1997\n\n\n   deliberately written to permit easy upgrading to use SHA (or whatever\n   alternatives emerge) when they are considered to be widely available\n   and adequately safe.\n\n   Even with the use of CRAM, users are still vulnerable to active\n   attacks.  An example of an increasingly common active attack is 'TCP\n   Session Hijacking' as described in CERT Advisory CA-95:01 [CERT95].\n\n   See section 1 above for additional discussion.\n\n5. Acknowledgements\n\n   This memo borrows ideas and some text liberally from [POP3] and\n   [RFC-1731] and thanks are due the authors of those documents.  Ran\n   Atkinson made a number of valuable technical and editorial\n   contributions to the document.\n\n6. Authors' Addresses\n\n   John C. Klensin\n   MCI Telecommunications\n   800 Boylston St, 7th floor\n   Boston, MA 02199\n   USA\n\n   EMail: klensin@mci.net\n   Phone: +1 617 960 1011\n\n   Randy Catoe\n   MCI Telecommunications\n   2100 Reston Parkway\n   Reston, VA 22091\n   USA\n\n   EMail: randy@mci.net\n   Phone: +1 703 715 7366\n\n   Paul Krumviede\n   MCI Telecommunications\n   2100 Reston Parkway\n   Reston, VA 22091\n   USA\n\n   EMail: paul@mci.net\n   Phone: +1 703 715 7251\n\n\n\n\n\n\nKlensin, Catoe & Krumviede  Standards Track                     [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc2197.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                       N. Freed\nRequest for Comments: 2197                                  Innosoft\nObsoletes: 1854                                       September 1997\nCategory: Standards Track\n\n\n                         SMTP Service Extension\n                         for Command Pipelining\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\n1.  Abstract\n\n   This memo defines an extension to the SMTP service whereby a server\n   can indicate the extent of its ability to accept multiple commands in\n   a single TCP send operation. Using a single TCP send operation for\n   multiple commands can improve SMTP performance significantly.\n\n   The present document is an updated version of RFC 1854 [3].  Only\n   textual and editorial changes have been made; the protocol has not\n   changed in any way.\n\n2.  Introduction\n\n   Although SMTP is widely and robustly deployed, certain extensions may\n   nevertheless prove useful. In particular, many parts of the Internet\n   make use of high latency network links.  SMTP's intrinsic one\n   command-one response structure is significantly penalized by high\n   latency links, often to the point where the factors contributing to\n   overall connection time are dominated by the time spent waiting for\n   responses to individual commands (turnaround time).\n\n   In the best of all worlds it would be possible to simply deploy SMTP\n   client software that makes use of command pipelining: batching up\n   multiple commands into single TCP send operations. Unfortunately, the\n   original SMTP specification [1] did not explicitly state that SMTP\n   servers must support this.  As a result a non-trivial number of\n   Internet SMTP servers cannot adequately handle command pipelining.\n   Flaws known to exist in deployed servers include:\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 1]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n    (1)   Connection handoff and buffer flushes in the middle of\n          the SMTP dialogue.  Creation of server processes for\n          incoming SMTP connections is a useful, obvious, and\n          harmless implementation technique. However, some SMTP\n          servers defer process forking and connection handoff\n          until some intermediate point in the SMTP dialogue.\n          When this is done material read from the TCP connection\n          and kept in process buffers can be lost.\n\n    (2)   Flushing the TCP input buffer when an SMTP command\n          fails. SMTP commands often fail but there is no reason\n          to flush the TCP input buffer when this happens.\n          Nevertheless, some SMTP servers do this.\n\n    (3)   Improper processing and promulgation of SMTP command\n          failures. For example, some SMTP servers will refuse to\n          accept a DATA command if the last RCPT TO command\n          fails, paying no attention to the success or failure of\n          prior RCPT TO command results. Other servers will\n          accept a DATA command even when all previous RCPT TO\n          commands have failed. Although it is possible to\n          accommodate this sort of behavior in a client that\n          employs command pipelining, it does complicate the\n          construction of the client unnecessarily.\n\n   This memo uses the mechanism described in [2] to define an extension\n   to the SMTP service whereby an SMTP server can declare that it is\n   capable of handling pipelined commands. The SMTP client can then\n   check for this declaration and use pipelining only when the server\n   declares itself capable of handling it.\n\n2.1.  Requirements notation\n\n   This document occasionally uses terms that appear in capital letters.\n   When the terms \"MUST\", \"SHOULD\", \"MUST NOT\", \"SHOULD NOT\", and \"MAY\"\n   appear capitalized, they are being used to indicate particular\n   requirements of this specification. A discussion of the meanings of\n   these terms appears in RFC 2119 [4].\n\n3.  Framework for the Command Pipelining Extension\n\n   The Command Pipelining extension is defined as follows:\n\n    (1)   the name of the SMTP service extension is Pipelining;\n\n    (2)   the EHLO keyword value associated with the extension is\n          PIPELINING;\n\n\n\n\nFreed                       Standards Track                     [Page 2]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n    (3)   no parameter is used with the PIPELINING EHLO keyword;\n\n    (4)   no additional parameters are added to either the MAIL\n          FROM or RCPT TO commands.\n\n    (5)   no additional SMTP verbs are defined by this extension;\n          and,\n\n    (6)   the next section specifies how support for the\n          extension affects the behavior of a server and client\n          SMTP.\n\n4.  The Pipelining Service Extension\n\n   When a client SMTP wishes to employ command pipelining, it first\n   issues the EHLO command to the server SMTP. If the server SMTP\n   responds with code 250 to the EHLO command, and the response includes\n   the EHLO keyword value PIPELINING, then the server SMTP has indicated\n   that it can accommodate SMTP command pipelining.\n\n4.1.  Client use of pipelining\n\n   Once the client SMTP has confirmed that support exists for the\n   pipelining extension, the client SMTP may then elect to transmit\n   groups of SMTP commands in batches without waiting for a response to\n   each individual command. In particular, the commands RSET, MAIL FROM,\n   SEND FROM, SOML FROM, SAML FROM, and RCPT TO can all appear anywhere\n   in a pipelined command group.  The EHLO, DATA, VRFY, EXPN, TURN,\n   QUIT, and NOOP commands can only appear as the last command in a\n   group since their success or failure produces a change of state which\n   the client SMTP must accommodate. (NOOP is included in this group so\n   it can be used as a synchronization point.)\n\n   Additional commands added by other SMTP extensions may only appear as\n   the last command in a group unless otherwise specified by the\n   extensions that define the commands.\n\n   The actual transfer of message content is explicitly allowed to be\n   the first \"command\" in a group. That is, a RSET/MAIL FROM sequence\n   used to initiate a new message transaction can be placed in the same\n   group as the final transfer of the headers and body of the previous\n   message.\n\n   Client SMTP implementations that employ pipelining MUST check ALL\n   statuses associated with each command in a group. For example, if\n   none of the RCPT TO recipient addresses were accepted the client must\n\n\n\n\n\nFreed                       Standards Track                     [Page 3]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n   then check the response to the DATA command -- the client cannot\n   assume that the DATA command will be rejected just because none of\n   the RCPT TO commands worked.  If the DATA command was properly\n   rejected the client SMTP can just issue RSET, but if the DATA command\n   was accepted the client SMTP should send a single dot.\n\n   Command statuses MUST be coordinated with responses by counting each\n   separate response and correlating that count with the number of\n   commands known to have been issued.  Multiline responses MUST be\n   supported. Matching on the basis of either the error code value or\n   associated text is expressly forbidden.\n\n   Client SMTP implementations MAY elect to operate in a nonblocking\n   fashion, processing server responses immediately upon receipt, even\n   if there is still data pending transmission from the client's\n   previous TCP send operation. If nonblocking operation is not\n   supported, however, client SMTP implementations MUST also check the\n   TCP window size and make sure that each group of commands fits\n   entirely within the window. The window size is usually, but not\n   always, 4K octets.  Failure to perform this check can lead to\n   deadlock conditions.\n\n   Clients MUST NOT confuse responses to multiple commands with\n   multiline responses. Each command requires one or more lines of\n   response, the last line not containing a dash between the response\n   code and the response string.\n\n4.2.  Server support of pipelining\n\n   A server SMTP implementation that offers the pipelining extension:\n\n    (1)   MUST NOT flush or otherwise lose the contents of the\n          TCP input buffer under any circumstances whatsoever.\n\n    (2)   SHOULD issue a positive response to the DATA command if\n          and only if one or more valid RCPT TO addresses have\n          been previously received.\n\n    (3)   MUST NOT, after issuing a positive response to a DATA\n          command with no valid recipients and subsequently\n          receiving an empty message, send any message whatsoever\n          to anybody.\n\n    (4)   SHOULD elect to store responses to grouped RSET, MAIL\n          FROM, SEND FROM, SOML FROM, SAML FROM, and RCPT TO\n          commands in an internal buffer so they can sent as a\n          unit.\n\n\n\n\nFreed                       Standards Track                     [Page 4]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n    (5)   MUST NOT buffer responses to EHLO, DATA, VRFY, EXPN,\n          TURN, QUIT, and NOOP.\n\n    (6)   MUST NOT buffer responses to unrecognized commands.\n\n    (7)   MUST send all pending responses immediately whenever\n          the local TCP input buffer is emptied.\n\n    (8)   MUST NOT make assumptions about commands that are yet\n          to be received.\n\n    (9)   SHOULD issue response text that indicates, either\n          implicitly or explicitly, what command the response\n          matches.\n\n   The overriding intent of these server requirements is to make it as\n   easy as possible for servers to conform to these pipelining\n   extensions.\n\n5.  Examples\n\n   Consider the following SMTP dialogue that does not use pipelining:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: HELO dbc.mtview.ca.us\n   S: 250 innosoft.com\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   C: RCPT TO:<ned@innosoft.com>\n   S: 250 recipient <ned@innosoft.com> OK\n   C: RCPT TO:<dan@innosoft.com>\n   S: 250 recipient <dan@innosoft.com> OK\n   C: RCPT TO:<kvc@innosoft.com>\n   S: 250 recipient <kvc@innosoft.com> OK\n   C: DATA\n   S: 354 enter mail, end with line containing only \".\"\n    ...\n   C: .\n   S: 250 message sent\n   C: QUIT\n   S: 221 goodbye\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 5]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n   The client waits for a server response a total of 9 times in this\n   simple example. But if pipelining is employed the following dialogue\n   is possible:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<ned@innosoft.com>\n   C: RCPT TO:<dan@innosoft.com>\n   C: RCPT TO:<kvc@innosoft.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 250 recipient <ned@innosoft.com> OK\n   S: 250 recipient <dan@innosoft.com> OK\n   S: 250 recipient <kvc@innosoft.com> OK\n   S: 354 enter mail, end with line containing only \".\"\n    ...\n   C: .\n   C: QUIT\n   S: 250 message sent\n   S: 221 goodbye\n\n\n   The total number of turnarounds has been reduced from 9 to 4.\n\n   The next example illustrates one possible form of behavior when\n   pipelining is used and all recipients are rejected:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<nsb@thumper.bellcore.com>\n   C: RCPT TO:<galvin@tis.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 550 remote mail to <nsb@thumper.bellore.com> not allowed\n   S: 550 remote mail to <galvin@tis.com> not allowed\n   S: 554 no valid recipients given\n   C: QUIT\n   S: 221 goodbye\n\n\n\nFreed                       Standards Track                     [Page 6]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n   The client SMTP waits for the server 4 times here as well. If the\n   server SMTP does not check for at least one valid recipient prior to\n   accepting the DATA command, the following dialogue would result:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<nsb@thumper.bellcore.com>\n   C: RCPT TO:<galvin@tis.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 550 remote mail to <nsb@thumper.bellore.com> not allowed\n   S: 550 remote mail to <galvin@tis.com> not allowed\n   S: 354 enter mail, end with line containing only \".\"\n   C: .\n   C: QUIT\n   S: 554 no valid recipients\n   S: 221 goodbye\n\n6.  Security Considerations\n\n   This document does not discuss security issues and is not believed to\n   raise any security issues not endemic in electronic mail and present\n   in fully conforming implementations of [1].\n\n7.  Acknowledgements\n\n   This document is based on the SMTP service extension model presented\n   in RFC 1425. Marshall Rose's description of SMTP command pipelining\n   in his book \"The Internet Message\" also served as a source of\n   inspiration for this extension.\n\n8.  References\n\n   [1]  Postel, J., \"Simple Mail Transfer Protocol\", STD 10,\n        RFC 821, August 1982.\n\n   [2]  Klensin, J., Freed, N., Rose, M., Stefferud, E., and\n        D. Crocker, \"SMTP Service Extensions\", RFC 1869,\n        November 1995.\n\n   [3]  Freed, N., \"SMTP Service Extension for Command Pipelining\",\n        RFC 1854, October 1995.\n\n\n\n\nFreed                       Standards Track                     [Page 7]\n\f\nRFC 2197                 SMTP Service Extension           September 1997\n\n\n   [4]  Bradner, S., \"Key words for use in RFCs to Indicate\n        Requirement Levels\", RFC 2119, March 1997.\n\n9.  Author's Address\n\n   Ned Freed\n   Innosoft International, Inc.\n   1050 Lakes Drive\n   West Covina, CA 91790\n   USA\n\n   Phone: +1 626 919 3600\n   Fax: +1 626 919 3614\n   EMail: ned.freed@innosoft.com\n\n   This document is a product of work done by the Internet Engineering\n   Task Force Working Group on Messaging Extensions, Alan Cargille,\n   chair.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc2221.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           M. Gahrns\nRequest for Comments: 2221                                      Microsoft\nCategory: Standards Track                                    October 1997\n\n\n                         IMAP4 Login Referrals\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1997).  All Rights Reserved.\n\n1. Abstract\n\n   When dealing with large amounts of users and many IMAP4 [RFC-2060]\n   servers, it is often necessary to move users from one IMAP4 server to\n   another.  For example, hardware failures or organizational changes\n   may dictate such a move.\n\n   Login referrals allow clients to transparently connect to an\n   alternate IMAP4 server, if their home IMAP4 server has changed.\n\n   A referral mechanism can provide efficiencies over the alternative\n   'proxy method', in which the local IMAP4 server contacts the remote\n   server on behalf of the client, and then transfers the data from the\n   remote server to itself, and then on to the client.  The referral\n   mechanism's direct client connection to the remote server is often a\n   more efficient use of bandwidth, and does not require the local\n   server to impersonate the client when authenticating to the remote\n   server.\n\n2. Conventions used in this document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   A home server, is an IMAP4 server that contains the user's inbox.\n\n   A remote server is a server that contains remote mailboxes.\n\n\n\n\n\nGahrns                      Standards Track                     [Page 1]\n\f\nRFC 2221                 IMAP4 Login Referrals              October 1997\n\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\",  \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC-2119].\n\n3. Introduction and Overview\n\n   IMAP4 servers that support this extension MUST list the keyword\n   LOGIN-REFERRALS in their CAPABILITY response.  No client action is\n   needed to invoke the LOGIN-REFERRALS capability in a server.\n\n   A LOGIN-REFERRALS capable IMAP4 server SHOULD NOT return a referral\n   to a server that will return a referral. A client MUST NOT follow\n   more than 10 levels of referral without consulting the user.\n\n   A LOGIN-REFERRALS response code MUST contain as an argument a valid\n   IMAP server URL as defined in [IMAP-URL].\n\n   A home server referral consists of either a tagged NO or OK, or an\n   untagged BYE response that contains a LOGIN-REFERRALS response code.\n\n   Example: A001 NO [REFERRAL IMAP://user;AUTH=*@SERVER2/] Remote Server\n\n   NOTE: user;AUTH=* is specified as required by [IMAP-URL] to avoid a\n   client falling back to anonymous login.\n\n4. Home Server Referrals\n\n   A home server referral may be returned in response to an AUTHENTICATE\n   or LOGIN command, or it may appear in the connection startup banner.\n   If a server returns a home server referral in a tagged NO response,\n   that server does not contain any mailboxes that are accessible to the\n   user.  If a server returns a home server referral in a tagged OK\n   response, it indicates that the user's personal mailboxes are\n   elsewhere, but the server contains public mailboxes which are\n   readable by the user.  After receiving a home server referral, the\n   client can not make any assumptions as to whether this was a\n   permanent or temporary move of the user.\n\n4.1.  LOGIN and AUTHENTICATE Referrals\n\n   An IMAP4 server MAY respond to a LOGIN or AUTHENTICATE command with a\n   home server referral if it wishes to direct the user to another IMAP4\n   server.\n\n   Example:  C: A001 LOGIN MIKE PASSWORD\n             S: A001 NO [REFERRAL IMAP://MIKE@SERVER2/] Specified user\n                     is invalid on this server. Try SERVER2.\n\n\n\n\nGahrns                      Standards Track                     [Page 2]\n\f\nRFC 2221                 IMAP4 Login Referrals              October 1997\n\n\n   Example:  C: A001 LOGIN MATTHEW PASSWORD\n             S: A001 OK [REFERRAL IMAP://MATTHEW@SERVER2/] Specified\n                     user's personal mailboxes located on Server2, but\n                     public mailboxes are available.\n\n   Example:  C: A001 AUTHENTICATE GSSAPI\n             <authentication exchange>\n             S: A001 NO [REFERRAL IMAP://user;AUTH=GSSAPI@SERVER2/]\n                     Specified user is invalid on this server. Try\n                     SERVER2.\n\n4.2. BYE at connection startup referral\n\n   An IMAP4 server MAY respond with an untagged BYE and a REFERRAL\n   response code that contains an IMAP URL to a home server if it is not\n   willing to accept connections and wishes to direct the client to\n   another IMAP4 server.\n\n   Example:  S: * BYE [REFERRAL IMAP://user;AUTH=*@SERVER2/] Server not\n                  accepting connections.  Try SERVER2\n\n5. Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [ABNF].\n\n   This amends the \"resp_text_code\" element of the IMAP4 grammar\n   described in [RFC-2060]\n\n   resp_text_code =/ \"REFERRAL\" SPACE <imapurl>\n      ; See [IMAP-URL] for definition of <imapurl>\n      ; See [RFC-2060] for base definition of resp_text_code\n\n6. Security Considerations\n\n   The IMAP4 login referral mechanism makes use of IMAP URLs, and as\n   such, have the same security considerations as general internet URLs\n   [RFC-1738], and in particular IMAP URLs [IMAP-URL].\n\n   A server MUST NOT give a login referral if authentication for that\n   user fails. This is to avoid revealing information about the user's\n   account to an unauthorized user.\n\n   With the LOGIN-REFERRALS capability, it is potentially easier to\n   write a rogue 'password catching' server that collects login data and\n   then refers the client to their actual IMAP4 server.  Although\n   referrals reduce the effort to write such a server, the referral\n   response makes detection of the intrusion easier.\n\n\n\nGahrns                      Standards Track                     [Page 3]\n\f\nRFC 2221                 IMAP4 Login Referrals              October 1997\n\n\n7. References\n\n   [RFC-2060], Crispin, M., \"Internet Message Access Protocol - Version\n   4rev1\", RFC 2060, December 1996.\n\n   [IMAP-URL], Newman, C., \"IMAP URL Scheme\", RFC 2192, Innosoft,\n   September 1997.\n\n   [RFC-1738], Berners-Lee, T., Masinter, L. and M. McCahill, \"Uniform\n   Resource Locators  (URL)\", RFC 1738, December 1994.\n\n   [RFC-2119], Bradner, S., \"Key words for use in RFCs to Indicate\n   Requirement Levels\", RFC 2119, March 1997.\n\n   [ABNF], DRUMS working group, Dave Crocker Editor, \"Augmented BNF for\n   Syntax Specifications: ABNF\", Work in Progress.\n\n8.  Acknowledgments\n\n   Many valuable suggestions were received from private discussions and\n   the IMAP4 mailing list.  In particular, Raymond Cheng, Mark Crispin,\n   Mark Keasling Chris Newman and Larry Osterman made significant\n   contributions to this document.\n\n9. Author's Address\n\n   Mike Gahrns\n   Microsoft\n   One Microsoft Way\n   Redmond, WA, 98072\n\n   Phone: (206) 936-9833\n   EMail: mikega@microsoft.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGahrns                      Standards Track                     [Page 4]\n\f\nRFC 2221                 IMAP4 Login Referrals              October 1997\n\n\n10.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1997).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implmentation may be prepared, copied, published\n   andand distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGahrns                      Standards Track                     [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc2222.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 2222                       Netscape Communications\nCategory: Standards Track                                   October 1997\n\n\n            Simple Authentication and Security Layer (SASL)\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1997).  All Rights Reserved.\n\nTable of Contents\n\n   1.    Abstract ..............................................    2\n   2.    Organization of this Document .........................    2\n   2.1.  How to Read This Document .............................    2\n   2.2.  Conventions Used in this Document .....................    2\n   2.3.  Examples ..............................................    3\n   3.    Introduction and Overview .............................    3\n   4.    Profiling requirements ................................    4\n   5.    Specific issues .......................................    5\n   5.1.  Client sends data first ...............................    5\n   5.2.  Server returns success with additional data ...........    5\n   5.3.  Multiple authentications ..............................    5\n   6.    Registration procedures ...............................    6\n   6.1.  Comments on SASL mechanism registrations ..............    6\n   6.2.  Location of Registered SASL Mechanism List ............    6\n   6.3.  Change Control ........................................    7\n   6.4.  Registration Template .................................    7\n   7.    Mechanism definitions .................................    8\n   7.1.  Kerberos version 4 mechanism ..........................    8\n   7.2.  GSSAPI mechanism ......................................    9\n   7.2.1 Client side of authentication protocol exchange .......    9\n   7.2.2 Server side of authentication protocol exchange .......   10\n   7.2.3 Security layer ........................................   11\n   7.3.  S/Key mechanism .......................................   11\n   7.4.  External mechanism ....................................   12\n   8.    References ............................................   13\n   9.    Security Considerations ...............................   13\n   10.   Author's Address ......................................   14\n\n\n\nMyers                       Standards Track                     [Page 1]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   Appendix A. Relation of SASL to Transport Security ..........   15\n   Full Copyright Statement ....................................   16\n\n1.    Abstract\n\n   This document describes a method for adding authentication support to\n   connection-based protocols.  To use this specification, a protocol\n   includes a command for identifying and authenticating a user to a\n   server and for optionally negotiating protection of subsequent\n   protocol interactions.  If its use is negotiated, a security layer is\n   inserted between the protocol and the connection.  This document\n   describes how a protocol specifies such a command, defines several\n   mechanisms for use by the command, and defines the protocol used for\n   carrying a negotiated security layer over the connection.\n\n2.    Organization of this Document\n\n2.1.  How to Read This Document\n\n   This document is written to serve two different audiences, protocol\n   designers using this specification to support authentication in their\n   protocol, and implementors of clients or servers for those protocols\n   using this specification.\n\n   The sections \"Introduction and Overview\", \"Profiling requirements\",\n   and \"Security Considerations\" cover issues that protocol designers\n   need to understand and address in profiling this specification for\n   use in a specific protocol.\n\n   Implementors of a protocol using this specification need the\n   protocol-specific profiling information in addition to the\n   information in this document.\n\n2.2.  Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as defined in \"Key words for\n   use in RFCs to Indicate Requirement Levels\" [RFC 2119].\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 2]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n2.3.  Examples\n\n   Examples in this document are for the IMAP profile [RFC 2060] of this\n   specification.  The base64 encoding of challenges and responses, as\n   well as the \"+ \" preceding the responses are part of the IMAP4\n   profile, not part of the SASL specification itself.\n\n3.    Introduction and Overview\n\n   The Simple Authentication and Security Layer (SASL) is a method for\n   adding authentication support to connection-based protocols.  To use\n   this specification, a protocol includes a command for identifying and\n   authenticating a user to a server and for optionally negotiating a\n   security layer for subsequent protocol interactions.\n\n   The command has a required argument identifying a SASL mechanism.\n   SASL mechanisms are named by strings, from 1 to 20 characters in\n   length, consisting of upper-case letters, digits, hyphens, and/or\n   underscores.  SASL mechanism names must be registered with the IANA.\n   Procedures for registering new SASL mechanisms are given in the\n   section \"Registration procedures\"\n\n   If a server supports the requested mechanism, it initiates an\n   authentication protocol exchange.  This consists of a series of\n   server challenges and client responses that are specific to the\n   requested mechanism.  The challenges and responses are defined by the\n   mechanisms as binary tokens of arbitrary length.  The protocol's\n   profile then specifies how these binary tokens are then encoded for\n   transfer over the connection.\n\n   After receiving the authentication command or any client response, a\n   server may issue a challenge, indicate failure, or indicate\n   completion.  The protocol's profile specifies how the server\n   indicates which of the above it is doing.\n\n   After receiving a challenge, a client may issue a response or abort\n   the exchange.  The protocol's profile specifies how the client\n   indicates which of the above it is doing.\n\n   During the authentication protocol exchange, the mechanism performs\n   authentication, transmits an authorization identity (frequently known\n   as a userid) from the client to server, and negotiates the use of a\n   mechanism-specific security layer.  If the use of a security layer is\n   agreed upon, then the mechanism must also define or negotiate the\n   maximum cipher-text buffer size that each side is able to receive.\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 3]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   The transmitted authorization identity may be different than the\n   identity in the client's authentication credentials.  This permits\n   agents such as proxy servers to authenticate using their own\n   credentials, yet request the access privileges of the identity for\n   which they are proxying.  With any mechanism, transmitting an\n   authorization identity of the empty string directs the server to\n   derive an authorization identity from the client's authentication\n   credentials.\n\n   If use of a security layer is negotiated, it is applied to all\n   subsequent data sent over the connection.  The security layer takes\n   effect immediately following the last response of the authentication\n   exchange for data sent by the client and the completion indication\n   for data sent by the server.  Once the security layer is in effect,\n   the protocol stream is processed by the security layer into buffers\n   of cipher-text.  Each buffer is transferred over the connection as a\n   stream of octets prepended with a four octet field in network byte\n   order that represents the length of the following buffer.  The length\n   of the cipher-text buffer must be no larger than the maximum size\n   that was defined or negotiated by the other side.\n\n4.    Profiling requirements\n\n   In order to use this specification, a protocol definition must supply\n   the following information:\n\n   1. A service name, to be selected from the IANA registry of \"service\"\n      elements for the GSSAPI host-based service name form [RFC 2078].\n\n   2. A definition of the command to initiate the authentication\n      protocol exchange.  This command must have as a parameter the\n      mechanism name being selected by the client.\n\n      The command SHOULD have an optional parameter giving an initial\n      response.  This optional parameter allows the client to avoid a\n      round trip when using a mechanism which is defined to have the\n      client send data first.  When this initial response is sent by the\n      client and the selected mechanism is defined to have the server\n      start with an initial challenge, the command fails.  See section\n      5.1 of this document for further information.\n\n   3. A definition of the method by which the authentication protocol\n      exchange is carried out, including how the challenges and\n      responses are encoded, how the server indicates completion or\n      failure of the exchange, how the client aborts an exchange, and\n      how the exchange method interacts with any line length limits in\n      the protocol.\n\n\n\n\nMyers                       Standards Track                     [Page 4]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   4. Identification of the octet where any negotiated security layer\n      starts to take effect, in both directions.\n\n   5. A specification of how the authorization identity passed from the\n      client to the server is to be interpreted.\n\n5.    Specific issues\n\n5.1.  Client sends data first\n\n   Some mechanisms specify that the first data sent in the\n   authentication protocol exchange is from the client to the server.\n\n   If a protocol's profile permits the command which initiates an\n   authentication protocol exchange to contain an initial client\n   response, this parameter SHOULD be used with such mechanisms.\n\n   If the initial client response parameter is not given, or if a\n   protocol's profile does not permit the command which initiates an\n   authentication protocol exchange to contain an initial client\n   response, then the server issues a challenge with no data.  The\n   client's response to this challenge is then used as the initial\n   client response.  (The server then proceeds to send the next\n   challenge, indicates completion, or indicates failure.)\n\n5.2.  Server returns success with additional data\n\n   Some mechanisms may specify that server challenge data be sent to the\n   client along with an indication of successful completion of the\n   exchange.  This data would, for example, authenticate the server to\n   the client.\n\n   If a protocol's profile does not permit this server challenge to be\n   returned with a success indication, then the server issues the server\n   challenge without an indication of successful completion.  The client\n   then responds with no data.  After receiving this empty response, the\n   server then indicates successful completion.\n\n5.3.  Multiple authentications\n\n   Unless otherwise stated by the protocol's profile, only one\n   successful SASL negotiation may occur in a protocol session.  In this\n   case, once an authentication protocol exchange has successfully\n   completed, further attempts to initiate an authentication protocol\n   exchange fail.\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 5]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   In the case that a profile explicitly permits multiple successful\n   SASL negotiations to occur, then in no case may multiple security\n   layers be simultaneously in effect.  If a security layer is in effect\n   and a subsequent SASL negotiation selects no security layer, the\n   original security layer remains in effect.  If a security layer is in\n   effect and a subsequent SASL negotiation selects a second security\n   layer, then the second security layer replaces the first.\n\n6.    Registration procedures\n\n   Registration of a SASL mechanism is done by filling in the template\n   in section 6.4 and sending it in to iana@isi.edu.  IANA has the right\n   to reject obviously bogus registrations, but will perform no review\n   of clams made in the registration form.\n\n   There is no naming convention for SASL mechanisms; any name that\n   conforms to the syntax of a SASL mechanism name can be registered.\n\n   While the registration procedures do not require it, authors of SASL\n   mechanisms are encouraged to seek community review and comment\n   whenever that is feasible.  Authors may seek community review by\n   posting a specification of their proposed mechanism as an internet-\n   draft.  SASL mechanisms intended for widespread use should be\n   standardized through the normal IETF process, when appropriate.\n\n6.1.  Comments on SASL mechanism registrations\n\n   Comments on registered SASL mechanisms should first be sent to the\n   \"owner\" of the mechanism.  Submitters of comments may, after a\n   reasonable attempt to contact the owner, request IANA to attach their\n   comment to the SASL mechanism registration itself.  If IANA approves\n   of this the comment will be made accessible in conjunction with the\n   SASL mechanism registration itself.\n\n6.2.  Location of Registered SASL Mechanism List\n\n   SASL mechanism registrations will be posted in the anonymous FTP\n   directory \"ftp://ftp.isi.edu/in-notes/iana/assignments/sasl-\n   mechanisms/\" and all registered SASL mechanisms will be listed in the\n   periodically issued \"Assigned Numbers\" RFC [currently STD 2, RFC\n   1700].  The SASL mechanism description and other supporting material\n   may also be published as an Informational RFC by sending it to \"rfc-\n   editor@isi.edu\" (please follow the instructions to RFC authors [RFC\n   2223]).\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 6]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n6.3.  Change Control\n\n   Once a SASL mechanism registration has been published by IANA, the\n   author may request a change to its definition.  The change request\n   follows the same procedure as the registration request.\n\n   The owner of a SASL mechanism may pass responsibility for the SASL\n   mechanism to another person or agency by informing IANA; this can be\n   done without discussion or review.\n\n   The IESG may reassign responsibility for a SASL mechanism. The most\n   common case of this will be to enable changes to be made to\n   mechanisms where the author of the registration has died, moved out\n   of contact or is otherwise unable to make changes that are important\n   to the community.\n\n   SASL mechanism registrations may not be deleted; mechanisms which are\n   no longer believed appropriate for use can be declared OBSOLETE by a\n   change to their \"intended use\" field; such SASL mechanisms will be\n   clearly marked in the lists published by IANA.\n\n   The IESG is considered to be the owner of all SASL mechanisms which\n   are on the IETF standards track.\n\n6.4.  Registration Template\n\n   To: iana@iana.org\n   Subject: Registration of SASL mechanism X\n\n   SASL mechanism name:\n\n   Security considerations:\n\n   Published specification (optional, recommended):\n\n   Person & email address to contact for further information:\n\n   Intended usage:\n\n   (One of COMMON, LIMITED USE or OBSOLETE)\n\n   Author/Change controller:\n\n   (Any other information that the author deems interesting may be\n   added below this line.)\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 7]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n7.    Mechanism definitions\n\n   The following mechanisms are hereby defined.\n\n7.1.  Kerberos version 4 mechanism\n\n   The mechanism name associated with Kerberos version 4 is\n   \"KERBEROS_V4\".\n\n   The first challenge consists of a random 32-bit number in network\n   byte order.  The client responds with a Kerberos ticket and an\n   authenticator for the principal \"service.hostname@realm\", where\n   \"service\" is the service name specified in the protocol's profile,\n   \"hostname\" is the first component of the host name of the server with\n   all letters in lower case, and where \"realm\" is the Kerberos realm of\n   the server.  The encrypted checksum field included within the\n   Kerberos authenticator contains the server provided challenge in\n   network byte order.\n\n   Upon decrypting and verifying the ticket and authenticator, the\n   server verifies that the contained checksum field equals the original\n   server provided random 32-bit number.  Should the verification be\n   successful, the server must add one to the checksum and construct 8\n   octets of data, with the first four octets containing the incremented\n   checksum in network byte order, the fifth octet containing a bit-mask\n   specifying the security layers supported by the server, and the sixth\n   through eighth octets containing, in network byte order, the maximum\n   cipher-text buffer size the server is able to receive.  The server\n   must encrypt using DES ECB mode the 8 octets of data in the session\n   key and issue that encrypted data in a second challenge.  The client\n   considers the server authenticated if the first four octets of the\n   un-encrypted data is equal to one plus the checksum it previously\n   sent.\n\n   The client must construct data with the first four octets containing\n   the original server-issued checksum in network byte order, the fifth\n   octet containing the bit-mask specifying the selected security layer,\n   the sixth through eighth octets containing in network byte order the\n   maximum cipher-text buffer size the client is able to receive, and\n   the following octets containing the authorization identity.  The\n   client must then append from one to eight zero-valued octets so that\n   the length of the data is a multiple of eight octets. The client must\n   then encrypt using DES PCBC mode the data with the session key and\n   respond with the encrypted data.  The server decrypts the data and\n   verifies the contained checksum.  The server must verify that the\n   principal identified in the Kerberos ticket is authorized to connect\n   as that authorization identity.  After this verification, the\n   authentication process is complete.\n\n\n\nMyers                       Standards Track                     [Page 8]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   The security layers and their corresponding bit-masks are as follows:\n\n      1 No security layer\n      2 Integrity (krb_mk_safe) protection\n      4 Privacy (krb_mk_priv) protection\n\n   Other bit-masks may be defined in the future; bits which are not\n   understood must be negotiated off.\n\n   EXAMPLE: The following are two Kerberos version 4 login scenarios to\n   the IMAP4 protocol (note that the line breaks in the sample\n   authenticators are for editorial clarity and are not in real\n   authenticators)\n\n     S: * OK IMAP4 Server\n     C: A001 AUTHENTICATE KERBEROS_V4\n     S: + AmFYig==\n     C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n        +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n        WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n     S: + or//EoAADZI=\n     C: DiAF5A4gA+oOIALuBkAAmw==\n     S: A001 OK Kerberos V4 authentication successful\n\n\n     S: * OK IMAP4 Server\n     C: A001 AUTHENTICATE KERBEROS_V4\n     S: + gcfgCA==\n     C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT\n        +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd\n        WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh\n     S: A001 NO Kerberos V4 authentication failed\n\n7.2.  GSSAPI mechanism\n\n   The mechanism name associated with all mechanisms employing the\n   GSSAPI [RFC 2078] is \"GSSAPI\".\n\n7.2.1 Client side of authentication protocol exchange\n\n   The client calls GSS_Init_sec_context, passing in 0 for\n   input_context_handle (initially) and a targ_name equal to output_name\n   from GSS_Import_Name called with input_name_type of\n   GSS_C_NT_HOSTBASED_SERVICE and input_name_string of\n   \"service@hostname\" where \"service\" is the service name specified in\n   the protocol's profile, and \"hostname\" is the fully qualified host\n   name of the server.  The client then responds with the resulting\n   output_token.  If GSS_Init_sec_context returns GSS_S_CONTINUE_NEEDED,\n\n\n\nMyers                       Standards Track                     [Page 9]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   then the client should expect the server to issue a token in a\n   subsequent challenge.  The client must pass the token to another call\n   to GSS_Init_sec_context, repeating the actions in this paragraph.\n\n   When GSS_Init_sec_context returns GSS_S_COMPLETE, the client takes\n   the following actions: If the last call to GSS_Init_sec_context\n   returned an output_token, then the client responds with the\n   output_token, otherwise the client responds with no data.  The client\n   should then expect the server to issue a token in a subsequent\n   challenge.  The client passes this token to GSS_Unwrap and interprets\n   the first octet of resulting cleartext as a bit-mask specifying the\n   security layers supported by the server and the second through fourth\n   octets as the maximum size output_message to send to the server.  The\n   client then constructs data, with the first octet containing the\n   bit-mask specifying the selected security layer, the second through\n   fourth octets containing in network byte order the maximum size\n   output_message the client is able to receive, and the remaining\n   octets containing the authorization identity.  The client passes the\n   data to GSS_Wrap with conf_flag set to FALSE, and responds with the\n   generated output_message.  The client can then consider the server\n   authenticated.\n\n7.2.2 Server side of authentication protocol exchange\n\n   The server passes the initial client response to\n   GSS_Accept_sec_context as input_token, setting input_context_handle\n   to 0 (initially).  If GSS_Accept_sec_context returns\n   GSS_S_CONTINUE_NEEDED, the server returns the generated output_token\n   to the client in challenge and passes the resulting response to\n   another call to GSS_Accept_sec_context, repeating the actions in this\n   paragraph.\n\n   When GSS_Accept_sec_context returns GSS_S_COMPLETE, the client takes\n   the following actions: If the last call to GSS_Accept_sec_context\n   returned an output_token, the server returns it to the client in a\n   challenge and expects a reply from the client with no data.  Whether\n   or not an output_token was returned (and after receipt of any\n   response from the client to such an output_token), the server then\n   constructs 4 octets of data, with the first octet containing a bit-\n   mask specifying the security layers supported by the server and the\n   second through fourth octets containing in network byte order the\n   maximum size output_token the server is able to receive.  The server\n   must then pass the plaintext to GSS_Wrap with conf_flag set to FALSE\n   and issue the generated output_message to the client in a challenge.\n   The server must then pass the resulting response to GSS_Unwrap and\n   interpret the first octet of resulting cleartext as the bit-mask for\n   the selected security layer, the second through fourth octets as the\n   maximum size output_message to send to the client, and the remaining\n\n\n\nMyers                       Standards Track                    [Page 10]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   octets as the authorization identity.  The server must verify that\n   the src_name is authorized to authenticate as the authorization\n   identity.  After these verifications, the authentication process is\n   complete.\n\n7.2.3 Security layer\n\n   The security layers and their corresponding bit-masks are as follows:\n\n     1 No security layer\n     2 Integrity protection.\n       Sender calls GSS_Wrap with conf_flag set to FALSE\n     4 Privacy protection.\n       Sender calls GSS_Wrap with conf_flag set to TRUE\n\n   Other bit-masks may be defined in the future; bits which are not\n   understood must be negotiated off.\n\n7.3.  S/Key mechanism\n\n   The mechanism name associated with S/Key [RFC 1760] using the MD4\n   digest algorithm is \"SKEY\".\n\n   The client sends an initial response with the authorization identity.\n\n   The server then issues a challenge which contains the decimal\n   sequence number followed by a single space and the seed string for\n   the indicated authorization identity.  The client responds with the\n   one-time-password, as either a 64-bit value in network byte order or\n   encoded in the \"six English words\" format.\n\n   The server must verify the one-time-password.  After this\n   verification, the authentication process is complete.\n\n   S/Key authentication does not provide for any security layers.\n\n   EXAMPLE: The following are two S/Key login scenarios in the IMAP4\n   protocol.\n\n     S: * OK IMAP4 Server\n     C: A001 AUTHENTICATE SKEY\n     S: +\n     C: bW9yZ2Fu\n     S: + OTUgUWE1ODMwOA==\n     C: Rk9VUiBNQU5OIFNPT04gRklSIFZBUlkgTUFTSA==\n     S: A001 OK S/Key authentication successful\n\n\n\n\n\nMyers                       Standards Track                    [Page 11]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n     S: * OK IMAP4 Server\n     C: A001 AUTHENTICATE SKEY\n     S: +\n     C: c21pdGg=\n     S: + OTUgUWE1ODMwOA==\n     C: BsAY3g4gBNo=\n     S: A001 NO S/Key authentication failed\n\n   The following is an S/Key login scenario in an IMAP4-like protocol\n   which has an optional \"initial response\" argument to the AUTHENTICATE\n   command.\n\n     S: * OK IMAP4-Like Server\n     C: A001 AUTHENTICATE SKEY bW9yZ2Fu\n     S: + OTUgUWE1ODMwOA==\n     C: Rk9VUiBNQU5OIFNPT04gRklSIFZBUlkgTUFTSA==\n     S: A001 OK S/Key authentication successful\n\n7.4.  External mechanism\n\n   The mechanism name associated with external authentication is\n   \"EXTERNAL\".\n\n   The client sends an initial response with the authorization identity.\n\n   The server uses information, external to SASL, to determine whether\n   the client is authorized to authenticate as the authorization\n   identity.  If the client is so authorized, the server indicates\n   successful completion of the authentication exchange; otherwise the\n   server indicates failure.\n\n   The system providing this external information may be, for example,\n   IPsec or TLS.\n\n   If the client sends the empty string as the authorization identity\n   (thus requesting the authorization identity be derived from the\n   client's authentication credentials), the authorization identity is\n   to be derived from authentication credentials which exist in the\n   system which is providing the external authentication.\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                    [Page 12]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n8.    References\n\n   [RFC 2060] Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 2060, December 1996.\n\n   [RFC 2078] Linn, J., \"Generic Security Service Application Program\n              Interface, Version 2\", RFC 2078, January 1997.\n\n   [RFC 2119] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", RFC 2119, March 1997.\n\n   [RFC 2223] Postel, J., and J. Reynolds, \"Instructions to RFC\n              Authors\", RFC 2223, October 1997.\n\n   [RFC 1760] Haller, N., \"The S/Key One-Time Password System\", RFC\n              1760, February 1995.\n\n   [RFC 1700] Reynolds, J., and J. Postel, \"Assigned Numbers\", STD 2,\n              RFC 1700, October 1994.\n\n9.    Security Considerations\n\n   Security issues are discussed throughout this memo.\n\n   The mechanisms that support integrity protection are designed such\n   that the negotiation of the security layer and authorization identity\n   is integrity protected.  When the client selects a security layer\n   with at least integrity protection, this protects against an active\n   attacker hijacking the connection and modifying the authentication\n   exchange to negotiate a plaintext connection.\n\n   When a server or client supports multiple authentication mechanisms,\n   each of which has a different security strength, it is possible for\n   an active attacker to cause a party to use the least secure mechanism\n   supported.  To protect against this sort of attack, a client or\n   server which supports mechanisms of different strengths should have a\n   configurable minimum strength that it will use.  It is not sufficient\n   for this minimum strength check to only be on the server, since an\n   active attacker can change which mechanisms the client sees as being\n   supported, causing the client to send authentication credentials for\n   its weakest supported mechanism.\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                    [Page 13]\n\f\nRFC 2222                          SASL                      October 1997\n\n\n   The client's selection of a SASL mechanism is done in the clear and\n   may be modified by an active attacker.  It is important for any new\n   SASL mechanisms to be designed such that an active attacker cannot\n   obtain an authentication with weaker security properties by modifying\n   the SASL mechanism name and/or the challenges and responses.\n\n   Any protocol interactions prior to authentication are performed in\n   the clear and may be modified by an active attacker.  In the case\n   where a client selects integrity protection, it is important that any\n   security-sensitive protocol negotiations be performed after\n   authentication is complete.  Protocols should be designed such that\n   negotiations performed prior to authentication should be either\n   ignored or revalidated once authentication is complete.\n\n10.   Author's Address\n\n   John G. Myers\n   Netscape Communications\n   501 E. Middlefield Road\n   Mail Stop MV-029\n   Mountain View, CA 94043-4042\n\n   EMail: jgmyers@netscape.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                    [Page 14]\n\f\nRFC 2222                          SASL                      October 1997\n\n\nAppendix A. Relation of SASL to Transport Security\n\n   Questions have been raised about the relationship between SASL and\n   various services (such as IPsec and TLS) which provide a secured\n   connection.\n\n   Two of the key features of SASL are:\n\n   1. The separation of the authorization identity from the identity in\n      the client's credentials.  This permits agents such as proxy\n      servers to authenticate using their own credentials, yet request\n      the access privileges of the identity for which they are proxying.\n\n   2. Upon successful completion of an authentication exchange, the\n      server knows the authorization identity the client wishes to use.\n      This allows servers to move to a \"user is authenticated\" state in\n      the protocol.\n\n   These features are extremely important to some application protocols,\n   yet Transport Security services do not always provide them.  To\n   define SASL mechanisms based on these services would be a very messy\n   task, as the framing of these services would be redundant with the\n   framing of SASL and some method of providing these important SASL\n   features would have to be devised.\n\n   Sometimes it is desired to enable within an existing connection the\n   use of a security service which does not fit the SASL model.  (TLS is\n   an example of such a service.)  This can be done by adding a command,\n   for example \"STARTTLS\", to the protocol.  Such a command is outside\n   the scope of SASL, and should be different from the command which\n   starts a SASL authentication protocol exchange.\n\n   In certain situations, it is reasonable to use SASL underneath one of\n   these Transport Security services.  The transport service would\n   secure the connection, either service would authenticate the client,\n   and SASL would negotiate the authorization identity.  The SASL\n   negotiation would be what moves the protocol from \"unauthenticated\"\n   to \"authenticated\" state.  The \"EXTERNAL\" SASL mechanism is\n   explicitly intended to handle the case where the transport service\n   secures the connection and authenticates the client and SASL\n   negotiates the authorization identity.\n\n   When using SASL underneath a sufficiently strong Transport Security\n   service, a SASL security layer would most likely be redundant.  The\n   client and server would thus probably want to negotiate off the use\n   of a SASL security layer.\n\n\n\n\n\nMyers                       Standards Track                    [Page 15]\n\f\nRFC 2222                          SASL                      October 1997\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (1997).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implmentation may be prepared, copied, published\n   andand distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                    [Page 16]\n\f\n"
  },
  {
    "path": "rfc/rfc2245.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                          C. Newman\nRequest for Comments: 2245                                      Innosoft\nCategory: Standards Track                                  November 1997\n\n\n                        Anonymous SASL Mechanism\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1997).  All Rights Reserved.\n\nAbstract\n\n   It is common practice on the Internet to permit anonymous access to\n   various services.  Traditionally, this has been done with a plain\n   text password mechanism using \"anonymous\" as the user name and\n   optional trace information, such as an email address, as the\n   password.  As plaintext login commands are not permitted in new IETF\n   protocols, a new way to provide anonymous login is needed within the\n   context of the SASL [SASL] framework.\n\n1. Conventions Used in this Document\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as defined in \"Key words for\n   use in RFCs to Indicate Requirement Levels\" [KEYWORDS].\n\n2. Anonymous SASL mechanism\n\n   The mechanism name associated with anonymous access is \"ANONYMOUS\".\n   The mechanism consists of a single message from the client to the\n   server.  The client sends optional trace information in the form of a\n   human readable string.  The trace information should take one of\n   three forms: an Internet email address, an opaque string which does\n   not contain the '@' character and can be interpreted by the system\n   administrator of the client's domain, or nothing.  For privacy\n   reasons, an Internet email address should only be used with\n   permission from the user.\n\n\n\n\n\nNewman                      Standards Track                     [Page 1]\n\f\nRFC 2245                Anonymous SASL Mechanism           November 1997\n\n\n   A server which permits anonymous access will announce support for the\n   ANONYMOUS mechanism, and allow anyone to log in using that mechanism,\n   usually with restricted access.\n\n   The formal grammar for the client message using Augmented BNF [ABNF]\n   follows.\n\n   message         = [email / token]\n\n   TCHAR           = %x20-3F / %x41-7E\n                     ;; any printable US-ASCII character except '@'\n\n   email           = addr-spec\n                     ;; as defined in [IMAIL], except with no free\n                     ;; insertion of linear-white-space, and the\n                     ;; local-part MUST either be entirely enclosed in\n                     ;; quotes or entirely unquoted\n\n   token           = 1*255TCHAR\n\n3. Example\n\n\n   Here is a sample anonymous login between an IMAP client and server.\n   In this example, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.  If such lines are wrapped without a new \"C:\" or\n   \"S:\" label, then the wrapping is for editorial clarity and is not\n   part of the command.\n\n   Note that this example uses the IMAP profile [IMAP4] of SASL.  The\n   base64 encoding of challenges and responses, as well as the \"+ \"\n   preceding the responses are part of the IMAP4 profile, not part of\n   SASL itself.  Newer profiles of SASL will include the client message\n   with the AUTHENTICATE command itself so the extra round trip below\n   (the server response with an empty \"+ \") can be eliminated.\n\n   In this example, the user's opaque identification token is \"sirhc\".\n\n        S: * OK IMAP4 server ready\n        C: A001 CAPABILITY\n        S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=CRAM-MD5 AUTH=ANONYMOUS\n        S: A001 OK done\n        C: A002 AUTHENTICATE ANONYMOUS\n        S: +\n        C: c2lyaGM=\n        S: A003 OK Welcome, trace information has been logged.\n\n\n\n\n\nNewman                      Standards Track                     [Page 2]\n\f\nRFC 2245                Anonymous SASL Mechanism           November 1997\n\n\n4. Security Considerations\n\n   The anonymous mechanism grants access to information by anyone.  For\n   this reason it should be disabled by default so the administrator can\n   make an explicit decision to enable it.\n\n   If the anonymous user has any write privileges, a denial of service\n   attack is possible by filling up all available space.  This can be\n   prevented by disabling all write access by anonymous users.\n\n   If anonymous users have read and write access to the same area, the\n   server can be used as a communication mechanism to anonymously\n   exchange information.  Servers which accept anonymous submissions\n   should implement the common \"drop box\" model which forbids anonymous\n   read access to the area where anonymous submissions are accepted.\n\n   If the anonymous user can run many expensive operations (e.g., an\n   IMAP SEARCH BODY command), this could enable a denial of service\n   attack.  Servers are encouraged to limit the number of anonymous\n   users and reduce their priority or limit their resource usage.\n\n   If there is no idle timeout for the anonymous user and there is a\n   limit on the number of anonymous users, a denial of service attack is\n   enabled.  Servers should implement an idle timeout for anonymous\n   users.\n\n   The trace information is not authenticated so it can be falsified.\n   This can be used as an attempt to get someone else in trouble for\n   access to questionable information.  Administrators trying to trace\n   abuse need to realize this information may be falsified.\n\n   A client which uses the user's correct email address as trace\n   information without explicit permission may violate that user's\n   privacy.  Information about who accesses an anonymous archive on a\n   sensitive subject (e.g., sexual abuse) has strong privacy needs.\n   Clients should not send the email address without explicit permission\n   of the user and should offer the option of supplying no trace token\n   -- thus only exposing the source IP address and time.  Anonymous\n   proxy servers could enhance this privacy, but would have to consider\n   the resulting potential denial of service attacks.\n\n   Anonymous connections are susceptible to man in the middle attacks\n   which view or alter the data transferred.  Clients and servers are\n   encouraged to support external integrity and encryption mechanisms.\n\n   Protocols which fail to require an explicit anonymous login are more\n   susceptible to break-ins given certain common implementation\n   techniques.  Specifically, Unix servers which offer user login may\n\n\n\nNewman                      Standards Track                     [Page 3]\n\f\nRFC 2245                Anonymous SASL Mechanism           November 1997\n\n\n   initially start up as root and switch to the appropriate user id\n   after an explicit login command.  Normally such servers refuse all\n   data access commands prior to explicit login and may enter a\n   restricted security environment (e.g., the Unix chroot function) for\n   anonymous users.  If anonymous access is not explicitly requested,\n   the entire data access machinery is exposed to external security\n   attacks without the chance for explicit protective measures.\n   Protocols which offer restricted data access should not allow\n   anonymous data access without an explicit login step.\n\n5. References\n\n   [ABNF] Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n   Specifications: ABNF\", RFC 2234, November 1997.\n\n   [IMAIL] Crocker, D., \"Standard for the Format of Arpa Internet Text\n   Messages\", STD 11, RFC 822, August 1982.\n\n   [IMAP4] Crispin, M., \"Internet Message Access Protocol - Version\n   4rev1\", RFC 2060, December 1996.\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n   Requirement Levels\", RFC 2119, March 1997.\n\n   [SASL] Myers, J., \"Simple Authentication and Security Layer (SASL)\",\n   RFC 2222, October 1997.\n\n6. Author's Address\n\n   Chris Newman\n   Innosoft International, Inc.\n   1050 Lakes Drive\n   West Covina, CA 91790 USA\n\n   Email: chris.newman@innosoft.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                      Standards Track                     [Page 4]\n\f\nRFC 2245                Anonymous SASL Mechanism           November 1997\n\n\n7.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1997).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                      Standards Track                     [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc2342.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         M. Gahrns\nRequest for Comments: 2342                                    Microsoft\nCategory: Standards Track                                     C. Newman\n                                                               Innosoft\n                                                               May 1998\n\n\n                            IMAP4 Namespace\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1998).  All Rights Reserved.\n\n1. Abstract\n\n   IMAP4 [RFC-2060] does not define a default server namespace. As a\n   result, two common namespace models have evolved:\n\n   The \"Personal Mailbox\" model, in which the default namespace that is\n   presented consists of only the user's personal mailboxes. To access\n   shared mailboxes, the user must use an escape mechanism to reach\n   another namespace.\n\n   The \"Complete Hierarchy\" model, in which the default namespace that\n   is presented includes the user's personal mailboxes along with any\n   other mailboxes they have access to.\n\n   These two models, create difficulties for certain client operations.\n   This document defines a NAMESPACE command that allows a client to\n   discover the prefixes of namespaces used by a server for personal\n   mailboxes, other users' mailboxes, and shared mailboxes.  This allows\n   a client to avoid much of the manual user configuration that is now\n   necessary when mixing and matching IMAP4 clients and servers.\n\n2. Conventions used in this document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.  If such lines are wrapped without a new \"C:\" or\n   \"S:\" label, then the wrapping is for editorial clarity and is not\n   part of the command.\n\n\n\nGahrns & Newman             Standards Track                     [Page 1]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n   Personal Namespace: A namespace that the server considers within the\n   personal scope of the authenticated user on a particular connection.\n   Typically, only the authenticated user has access to mailboxes in\n   their Personal Namespace. It is the part of the namespace that\n   belongs to the user that is allocated for mailboxes. If an INBOX\n   exists for a user, it MUST appear within the user's personal\n   namespace.  In the typical case, there SHOULD be only one Personal\n   Namespace on a server.\n\n   Other Users' Namespace: A namespace that consists of mailboxes from\n   the Personal Namespaces of other users.  To access mailboxes in the\n   Other Users' Namespace, the currently authenticated user MUST be\n   explicitly granted access rights.  For example, it is common for a\n   manager to grant to their secretary access rights to their mailbox.\n   In the typical case, there SHOULD be only one Other Users' Namespace\n   on a server.\n\n   Shared Namespace: A namespace that consists of mailboxes that are\n   intended to be shared amongst users and do not exist within a user's\n   Personal Namespace.\n\n   The namespaces a server uses MAY differ on a per-user basis.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\",  \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC-2119].\n\n3. Introduction and Overview\n\n   Clients often attempt to create mailboxes for such purposes as\n   maintaining a record of sent messages (e.g. \"Sent Mail\") or\n   temporarily saving messages being composed (e.g. \"Drafts\").  For\n   these clients to inter-operate correctly with the variety of IMAP4\n   servers available, the user must enter the prefix of the Personal\n   Namespace used by the server.  Using the NAMESPACE command, a client\n   is able to automatically discover this prefix without manual user\n   configuration.\n\n   In addition, users are often required to manually enter the prefixes\n   of various namespaces in order to view the mailboxes located there.\n   For example, they might be required to enter the prefix of #shared to\n   view the shared mailboxes namespace. The NAMESPACE command allows a\n   client to automatically discover the namespaces that are available on\n   a server. This allows a client to present the available namespaces to\n   the user in what ever manner it deems appropriate.  For example, a\n\n\n\n\n\n\nGahrns & Newman             Standards Track                     [Page 2]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n   client could choose to initially display only personal mailboxes, or\n   it may choose to display the complete list of mailboxes available,\n   and initially position the user at the root of their Personal\n   Namespace.\n\n   A server MAY choose to make available to the NAMESPACE command only a\n   subset of the complete set of namespaces the server supports. To\n   provide the ability to access these namespaces, a client SHOULD allow\n   the user the ability to manually enter a namespace prefix.\n\n4. Requirements\n\n   IMAP4 servers that support this extension MUST list the keyword\n   NAMESPACE in their CAPABILITY response.\n\n   The NAMESPACE command is valid in the Authenticated and Selected\n   state.\n\n5. NAMESPACE Command\n\n   Arguments: none\n\n   Response:  an untagged NAMESPACE response that contains the prefix\n                 and hierarchy delimiter to the server's Personal\n                 Namespace(s), Other Users' Namespace(s), and Shared\n                 Namespace(s) that the server wishes to expose. The\n                 response will contain a NIL for any namespace class\n                 that is not available. Namespace_Response_Extensions\n                 MAY be included in the response.\n                 Namespace_Response_Extensions which are not on the IETF\n                 standards track, MUST be prefixed with an \"X-\".\n\n   Result:    OK - Command completed\n                 NO - Error: Can't complete command\n                 BAD - argument invalid\n\n   Example 5.1:\n   ===========\n\n      < A server that supports a single personal namespace.  No leading\n      prefix is used on personal mailboxes and \"/\" is the hierarchy\n      delimiter.>\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")) NIL NIL\n      S: A001 OK NAMESPACE command completed\n\n\n\n\n\nGahrns & Newman             Standards Track                     [Page 3]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n   Example 5.2:\n   ===========\n\n      < A user logged on anonymously to a server.  No personal mailboxes\n      are associated with the anonymous user and the user does not have\n      access to the Other Users' Namespace.  No prefix is required to\n      access shared mailboxes and the hierarchy delimiter is \".\" >\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE NIL NIL ((\"\" \".\"))\n      S: A001 OK NAMESPACE command completed\n\n   Example 5.3:\n   ===========\n\n      < A server that contains a Personal Namespace and a single Shared\n      Namespace. >\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")) NIL ((\"Public Folders/\" \"/\"))\n      S: A001 OK NAMESPACE command completed\n\n   Example 5.4:\n   ===========\n\n      < A server that contains a Personal Namespace, Other Users'\n      Namespace and multiple Shared Namespaces.  Note that the hierarchy\n      delimiter used within each namespace can be different. >\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")) ((\"~\" \"/\")) ((\"#shared/\" \"/\")\n         (\"#public/\" \"/\")(\"#ftp/\" \"/\")(\"#news.\" \".\"))\n      S: A001 OK NAMESPACE command completed\n\n   The prefix string allows a client to do things such as automatically\n   creating personal mailboxes or LISTing all available mailboxes within\n   a namespace.\n\n   Example 5.5:\n   ===========\n\n      < A server that supports only the Personal Namespace, with a\n      leading prefix of INBOX to personal mailboxes and a hierarchy\n      delimiter of \".\">\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"INBOX.\" \".\")) NIL  NIL\n      S: A001 OK NAMESPACE command completed\n\n\n\nGahrns & Newman             Standards Track                     [Page 4]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n      < Automatically create a mailbox to store sent items.>\n\n      C: A002 CREATE \"INBOX.Sent Mail\"\n      S: A002 OK CREATE command completed\n\n   Although typically a server will support only a single Personal\n   Namespace, and a single Other User's Namespace, circumstances exist\n   where there MAY be multiples of these, and a client MUST be prepared\n   for them.   If a client is configured such that it is required to\n   create a certain mailbox, there can be circumstances where it is\n   unclear which Personal Namespaces it should create the mailbox in.\n   In these situations a client SHOULD let the user select which\n   namespaces to create the mailbox in.\n\n   Example 5.6:\n   ===========\n\n      < In this example, a server supports 2 Personal Namespaces.  In\n      addition to the regular Personal Namespace, the user has an\n      additional personal namespace to allow access to mailboxes in an\n      MH format mailstore. >\n\n      < The client is configured to save a copy of all mail sent by the\n      user into a mailbox called 'Sent Mail'.  Furthermore, after a\n      message is deleted from a mailbox, the client is configured to\n      move that message to a mailbox called 'Deleted Items'.>\n\n      < Note that this example demonstrates how some extension flags can\n      be passed to further describe the #mh namespace. >\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")(\"#mh/\" \"/\" \"X-PARAM\" (\"FLAG1\" \"FLAG2\")))\n         NIL NIL\n      S: A001 OK NAMESPACE command completed\n\n      < It is desired to keep only one copy of sent mail. It is unclear\n      which Personal Namespace the client should use to create the 'Sent\n      Mail' mailbox.  The user is prompted to select a namespace and\n      only one 'Sent Mail' mailbox is created. >\n\n      C: A002 CREATE \"Sent Mail\"\n      S: A002 OK CREATE command completed\n\n      < The client is designed so that it keeps two 'Deleted Items'\n      mailboxes, one for each namespace. >\n\n      C: A003 CREATE \"Delete Items\"\n      S: A003 OK CREATE command completed\n\n\n\nGahrns & Newman             Standards Track                     [Page 5]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n      C: A004 CREATE \"#mh/Deleted Items\"\n      S: A004 OK CREATE command completed\n\n   The next level of hierarchy following the Other Users' Namespace\n   prefix SHOULD consist of <username>, where <username> is a user name\n   as per the IMAP4 LOGIN or AUTHENTICATE command.\n\n   A client can construct a LIST command by appending a \"%\" to the Other\n   Users' Namespace prefix to discover the Personal Namespaces of other\n   users that are available to the currently authenticated user.\n\n   In response to such a LIST command, a server SHOULD NOT return user\n   names that have not granted access to their personal mailboxes to the\n   user in question.\n\n   A server MAY return a LIST response containing only the names of\n   users that have explicitly granted access to the user in question.\n\n   Alternatively, a server MAY return NO to such a LIST command,\n   requiring that a user name be included with the Other Users'\n   Namespace prefix before listing any other user's mailboxes.\n\n   Example 5.7:\n   ===========\n\n      < A server that supports providing a list of other user's\n      mailboxes that are accessible to the currently logged on user. >\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")) ((\"Other Users/\" \"/\")) NIL\n      S: A001 OK NAMESPACE command completed\n\n      C: A002 LIST \"\" \"Other Users/%\"\n      S: * LIST () \"/\" \"Other Users/Mike\"\n      S: * LIST () \"/\" \"Other Users/Karen\"\n      S: * LIST () \"/\" \"Other Users/Matthew\"\n      S: * LIST () \"/\" \"Other Users/Tesa\"\n      S: A002 OK LIST command completed\n\n   Example 5.8:\n   ===========\n\n      < A server that does not support providing a list of other user's\n      mailboxes that are accessible to the currently logged on user.\n      The mailboxes are listable if the client includes the name of the\n      other user with the Other Users' Namespace prefix. >\n\n\n\n\n\nGahrns & Newman             Standards Track                     [Page 6]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")) ((\"#Users/\" \"/\")) NIL\n      S: A001 OK NAMESPACE command completed\n\n      < In this example, the currently logged on user has access to the\n      Personal Namespace of user Mike, but the server chose to suppress\n      this information in the LIST response.  However, by appending the\n      user name Mike (received through user input) to the Other Users'\n      Namespace prefix, the client is able to get a listing of the\n      personal mailboxes of user Mike. >\n\n      C: A002 LIST \"\" \"#Users/%\"\n      S: A002 NO The requested item could not be found.\n\n      C: A003 LIST \"\" \"#Users/Mike/%\"\n      S: * LIST () \"/\" \"#Users/Mike/INBOX\"\n      S: * LIST () \"/\" \"#Users/Mike/Foo\"\n      S: A003 OK LIST command completed.\n\n      A prefix string might not contain a hierarchy delimiter, because\n      in some cases it is not needed as part of the prefix.\n\n      Example 5.9:\n      ===========\n\n      < A server that allows access to the Other Users' Namespace by\n      prefixing the others' mailboxes with a '~' followed by <username>,\n      where <username> is a user name as per the IMAP4 LOGIN or\n      AUTHENTICATE command.>\n\n      C: A001 NAMESPACE\n      S: * NAMESPACE ((\"\" \"/\")) ((\"~\" \"/\")) NIL\n      S: A001 OK NAMESPACE command completed\n\n      < List the mailboxes for user mark >\n\n      C: A002 LIST \"\" \"~mark/%\"\n      S: * LIST () \"/\" \"~mark/INBOX\"\n      S: * LIST () \"/\" \"~mark/foo\"\n      S: A002 OK LIST command completed\n\n   Historical convention has been to start all namespaces with the \"#\"\n   character.  Namespaces that include the \"#\" character are not IMAP\n   URL [IMAP-URL] friendly requiring the \"#\" character to be represented\n   as %23 when within URLs.  As such, server implementers MAY instead\n   consider using namespace prefixes that do not contain the \"#\"\n   character.\n\n\n\n\nGahrns & Newman             Standards Track                     [Page 7]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n6. Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [ABNF].\n\n   atom = <atom>\n      ; <atom> as defined in [RFC-2060]\n\n   Namespace = nil / \"(\" 1*( \"(\" string SP  (<\"> QUOTED_CHAR <\"> /\n      nil) *(Namespace_Response_Extension) \")\" ) \")\"\n\n   Namespace_Command = \"NAMESPACE\"\n\n   Namespace_Response_Extension = SP string SP \"(\" string *(SP string)\n      \")\"\n\n   Namespace_Response = \"*\" SP \"NAMESPACE\" SP Namespace SP Namespace SP\n      Namespace\n\n      ; The first Namespace is the Personal Namespace(s)\n      ; The second Namespace is the Other Users' Namespace(s)\n      ; The third Namespace is the Shared Namespace(s)\n\n      nil = <nil>\n         ; <nil> as defined in [RFC-2060]\n\n      QUOTED_CHAR = <QUOTED_CHAR>\n         ; <QUOTED_CHAR> as defined in [RFC-2060]\n\n      string = <string>\n         ; <string> as defined in [RFC-2060]\n         ; Note that  the namespace prefix is to a mailbox and following\n         ; IMAP4 convention, any international string in the NAMESPACE\n         ; response MUST be of modified UTF-7 format as described in\n         ;  [RFC-2060].\n\n7. Security Considerations\n\n   In response to a LIST command containing an argument of the Other\n   Users' Namespace prefix, a server SHOULD NOT list users that have not\n   granted list access to their personal mailboxes to the currently\n   authenticated user.  Providing such a list, could compromise security\n   by potentially disclosing confidential information of who is located\n   on the server, or providing a starting point of a list of user\n   accounts to attack.\n\n\n\n\n\n\nGahrns & Newman             Standards Track                     [Page 8]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n8. References\n\n   [RFC-2060], Crispin, M., \"Internet Message Access Protocol Version\n   4rev1\", RFC 2060, December 1996.\n\n   [RFC-2119], Bradner, S., \"Key words for use in RFCs to Indicate\n   Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [ABNF] Crocker, D., Editor, and P. Overell, \"Augmented BNF for Syntax\n   Specifications: ABNF\", RFC 2234, November 1997.\n\n   [IMAP-URL], Newman, C., \"IMAP URL Scheme\", RFC 2192, September 1997.\n\n9.  Acknowledgments\n\n   Many people have participated in the discussion of IMAP namespaces on\n   the IMAP mailing list.  In particular, the authors would like to\n   thank Mark Crispin for many of the concepts relating to the Personal\n   Namespace and accessing the Personal Namespace of other users, Steve\n   Hole for summarizing the two namespace models, John Myers and Jack De\n   Winter for their work in a preceding effort trying to define a\n   standardized personal namespace, and Larry Osterman for his review\n   and collaboration on this document.\n\n11. Authors' Addresses\n\n   Mike Gahrns\n   Microsoft\n   One Microsoft Way\n   Redmond, WA, 98072, USA\n\n   Phone: (425) 936-9833\n   EMail: mikega@microsoft.com\n\n\n   Chris Newman\n   Innosoft International, Inc.\n   1050 East Garvey Ave. South\n   West Covina, CA, 91790, USA\n\n   EMail: chris.newman@innosoft.com\n\n\n\n\n\n\n\n\n\n\nGahrns & Newman             Standards Track                     [Page 9]\n\f\nRFC 2342                    IMAP4 Namespace                     May 1998\n\n\n12.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1998).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGahrns & Newman             Standards Track                    [Page 10]\n\f\n"
  },
  {
    "path": "rfc/rfc2359.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 2359                       Netscape Communications\nCategory: Standards Track                                      June 1998\n\n\n                        IMAP4 UIDPLUS extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1998).  All Rights Reserved.\n\nIESG NOTE\n\n   The IMAP extension described here assumes a particular means of using\n   IMAP to support disconnected operation.  However, this means of\n   supporting disconnected operation is not yet documented.  Also, there\n   are multiple theories about how best to do disconnected operation in\n   IMAP, and as yet, there is no consensus on which one should be\n   adopted as a standard.\n\n   This document is being approved as a Proposed Standard because it\n   does not appear to have technical flaws in itelf.  However, approval\n   of this document as a Proposed Standard should not be considered an\n   IETF endorsement of any particular means of doing disconnected\n   operation in IMAP.\n\nTable of Contents\n\n   1.   Abstract ..............................................    2\n   2.   Conventions Used in this Document .....................    2\n   3.   Introduction and Overview .............................    2\n   4.   Features ..............................................    2\n   4.1. UID EXPUNGE Command ...................................    2\n   4.2. APPENDUID response code ...............................    3\n   4.3. COPYUID response code .................................    4\n   5.   Formal Syntax .........................................    4\n   6.   References ............................................    4\n   7.   Security Considerations ...............................    5\n   8.   Author's Address ......................................    5\n   9.   Full Copyright Statement ..............................    6\n\n\n\nMyers                       Standards Track                     [Page 1]\n\f\nRFC 2359                IMAP4 UIDPLUS extension                June 1998\n\n\n1.   Abstract\n\n   The UIDPLUS extension of the Internet Message Access Protocol [IMAP4]\n   provides a set of features intended to reduce the amount of time and\n   resources used by some client operations.  The features in UIDPLUS\n   are primarily intended for disconnected-use clients.\n\n2.   Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as defined in \"Key words for\n   use in RFCs to Indicate Requirement Levels\" [KEYWORDS].\n\n3.   Introduction and Overview\n\n   The UIDPLUS extension is present in any IMAP4 server implementation\n   which returns \"UIDPLUS\" as one of the supported capabilities to the\n   CAPABILITY command.  The UIDPLUS extension contains one additional\n   command and additional data returned with successful APPEND and COPY\n   commands.\n\n   Clients that wish to use the new command in UIDPLUS must of course\n   first test for the presence of the extension by issuing a CAPABILITY\n   command.  Each of the features in UIDPLUS are optimizations; clients\n   can provide the same functionality, albeit more slowly, by using\n   commands in the base protocol.  With each feature, this document\n   recommends a fallback approach to take when the UIDPLUS extension is\n   not supported by the server.\n\n4.   Features\n\n4.1. UID EXPUNGE Command\n\n   Arguments:  message set\n\n   Data:       untagged responses: EXPUNGE\n\n   Result:     OK - expunge completed\n               NO - expunge failure (e.g. permission denied)\n               BAD - command unknown or arguments invalid\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 2]\n\f\nRFC 2359                IMAP4 UIDPLUS extension                June 1998\n\n\n      The UID EXPUNGE command permanently removes from the currently\n      selected mailbox all messages that both have the \\Deleted flag set\n      and have a UID that is included in the specified message set.  If\n      a message either does not have the \\Deleted flag set or is has a\n      UID that is not included in the specified message set, it is not\n      affected.\n\n      This command may be used to ensure that a replayed EXPUNGE command\n      does not remove any messages that have been marked as \\Deleted\n      between the time that the user requested the expunge operation and\n      the time the server processes the command.\n\n      If the server does not support the UIDPLUS capability, the client\n      should fall back to using the STORE command to temporarily remove\n      the \\Deleted flag from messages it does not want to remove.  The\n      client could alternatively fall back to using the EXPUNGE command,\n      risking the unintended removal of some messages.\n\n   Example:    C: A003 UID EXPUNGE 3000:3002\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: A003 OK UID EXPUNGE completed\n\n4.2. APPENDUID response code\n\n   Successful APPEND commands return an APPENDUID response code in the\n   tagged OK response.  The APPENDUID response code contains as\n   arguments the UIDVALIDITY of the destination mailbox and the UID\n   assigned to the appended message.\n\n   If the server does not support the UIDPLUS capability, the client can\n   only discover this information by selecting the destination mailbox\n   and issuing FETCH commands.\n\n   Example:    C: A003 APPEND saved-messages (\\Seen) {310}\n               C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n               C: From: Fred Foobar <foobar@Blurdybloop.COM>\n               C: Subject: afternoon meeting\n               C: To: mooch@owatagu.siam.edu\n               C: Message-Id: <B27397-0100000@Blurdybloop.COM>\n               C: MIME-Version: 1.0\n               C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n               C:\n               C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n               C:\n               S: A003 OK [APPENDUID 38505 3955] APPEND completed\n\n\n\n\nMyers                       Standards Track                     [Page 3]\n\f\nRFC 2359                IMAP4 UIDPLUS extension                June 1998\n\n\n4.3. COPYUID response code\n\n   Successful COPY and UID COPY commands return a COPYUID response code\n   in the tagged OK response whenever at least one message was copied.\n   The COPYUID response code contains as an argument the UIDVALIDITY of\n   the appended-to mailbox, a message set containing the UIDs of the\n   messages copied to the destination mailbox, in the order they were\n   copied, and a message containing the UIDs assigned to the copied\n   messages, in the order they were assigned.  Neither of the message\n   sets may contain extraneous UIDs or the symbol '*'.\n\n   If the server does not support the UIDPLUS capability, the client can\n   only discover this information by selecting the destination mailbox\n   and issuing FETCH commands.\n\n   Example:    C: A003 COPY 2:4 MEETING\n               S: A003 OK [COPYUID 38505 304,319:320 3956:3958] Done\n               C: A003 UID COPY 305:310 MEETING\n               S: A003 OK Done\n\n5.   Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [RFC-822] as modified by [IMAP4].\n   Non-terminals referenced but not defined below are as defined by\n   [IMAP4].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   resp_code_apnd  ::= \"APPENDUID\" SPACE nz_number SPACE uniqueid\n\n   resp_code_copy  ::= \"COPYUID\" SPACE nz_number SPACE set SPACE set\n\n   uid_expunge     ::= \"UID\" SPACE \"EXPUNGE\" SPACE set\n\n6.   References\n\n   [IMAP4]    Crispin, M., \"Internet Message Access Protocol -\n              Version 4rev1\", RFC 2060, December 1996.\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC-822]  Crocker, D., \"Standard for the Format of ARPA Internet\n              Text Messages\", STD 11, RFC 822, August 1982.\n\n\n\nMyers                       Standards Track                     [Page 4]\n\f\nRFC 2359                IMAP4 UIDPLUS extension                June 1998\n\n\n7.   Security Considerations\n\n   There are no known security issues with this extension.\n\n8.   Author's Address\n\n   John Gardiner Myers\n   Netscape Communications\n   501 East Middlefield Road\n   Mail Stop MV-029\n   Mountain View, CA  94043\n\n   EMail: jgmyers@netscape.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 5]\n\f\nRFC 2359                IMAP4 UIDPLUS extension                June 1998\n\n\n9.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1998).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc2449.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         R. Gellens\nRequest for Comments: 2449                                      Qualcomm\nUpdates: 1939                                                  C. Newman\nCategory: Standards Track                                       Innosoft\n                                                            L. Lundblade\n                                                                Qualcomm\n                                                           November 1998\n\n\n                        POP3 Extension Mechanism\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1998).  All Rights Reserved.\n\nIESG Note\n\n   This extension to the POP3 protocol is to be used by a server to\n   express policy descisions taken by the server administrator.  It is\n   not an endorsement of implementations of further POP3 extensions\n   generally.  It is the general view that the POP3 protocol should stay\n   simple, and for the simple purpose of downloading email from a mail\n   server.  If more complicated operations are needed, the IMAP protocol\n   [RFC 2060] should be used.  The first paragraph of section 7 should\n   be read very carefully.\n\nTable of Contents\n\n    1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . .  2\n    2.  Conventions Used in this Document . . . . . . . . . . . . .   3\n    3.  General Command and Response Grammar . . . . . . . . . . . .  3\n    4.  Parameter and Response Lengths  . . . . . . . . . . . . . .   4\n    5.  The CAPA Command . . . . . . . . . . . . . . . . . . . . . .  4\n    6.  Initial Set of Capabilities . . . . . . . . . . . . . . . .   5\n      6.1.  TOP capability . . . . . . . . . . . . . . . . . . . . .  6\n      6.2.  USER capability . . . . . . . . . . . . . . . . . . . .   6\n      6.3.  SASL capability  . . . . . . . . . . . . . . . . . . . .  7\n      6.4.  RESP-CODES capability . . . . . . . . . . . . . . . . .   8\n      6.5.  LOGIN-DELAY capability . . . . . . . . . . . . . . . . .  8\n      6.6.  PIPELINING capability . . . . . . . . . . . . . . . . .   9\n\n\n\nGellens, et. al.            Standards Track                     [Page 1]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n      6.7.  EXPIRE capability  . . . . . . . . . . . . . . . . . . . 10\n      6.8.  UIDL capability . . . . . . . . . . . . . . . . . . . .  13\n      6.9.  IMPLEMENTATION capability  . . . . . . . . . . . . . . . 13\n    7.  Future Extensions to POP3 . . . . . . . . . . . . . . . . .  14\n    8.  Extended POP3 Response Codes . . . . . . . . . . . . . . . . 14\n      8.1.  Initial POP3 response codes . . . . . . . . . . . . . .  15\n        8.1.1.  The LOGIN-DELAY response code  . . . . . . . . . . . 15\n        8.1.2.  The IN-USE response code  . . . . . . . . . . . . .  16\n    9.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . 16\n   10.  Security Considerations . . . . . . . . . . . . . . . . . .  17\n   11.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . 17\n   12.  References  . . . . . . . . . . . . . . . . . . . . . . . .  17\n   13.  Authors' Addresses  . . . . . . . . . . . . . . . . . . . .  18\n   14.  Full Copyright Statement . . . . . . . . . . . . . . . . . . 19\n\n1.  Introduction\n\n   The Post Office Protocol version 3 [POP3] is very widely used.\n   However, while it includes some optional commands (and some useful\n   protocol extensions have been published), it lacks a mechanism for\n   advertising support for these extensions or for behavior variations.\n\n   Currently these optional features and extensions can only be detected\n   by probing, if at all.  This is at best inefficient, and possibly\n   worse.  As a result, some clients have manual configuration options\n   for POP3 server capabilities.\n\n   Because one of the most important characteristics of POP3 is its\n   simplicity, it is desirable that extensions be few in number (see\n   section 7).  However, some extensions are necessary (such as ones\n   that provide improved security [POP-AUTH]), while others are very\n   desirable in certain situations.  In addition, a means for\n   discovering server behavior is needed.\n\n   This memo updates RFC 1939 [POP3] to define a mechanism to announce\n   support for optional commands, extensions, and unconditional server\n   behavior.  Included is an initial set of currently deployed\n   capabilities which vary between server implementations, and several\n   new capabilities (SASL, RESP-CODES, LOGIN-DELAY, PIPELINING, EXPIRE\n   and IMPLEMENTATION).  This document also extends POP3 error messages\n   so that machine parsable codes can be provided to the client.  An\n   initial set of response codes is included.  In addition, an [ABNF]\n   specification of POP3 commands and responses is defined.\n\n   Public comments should be sent to the IETF POP3 Extensions mailing\n   list, <ietf-pop3ext@imc.org>.  To subscribe, send a message\n   containing SUBSCRIBE to <ietf-pop3ext-request@imc.org>.\n\n\n\n\nGellens, et. al.            Standards Track                     [Page 2]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n2.  Conventions Used in this Document\n\n   The key words \"REQUIRED\", \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\",\n   and \"MAY\" in this document are to be interpreted as described in \"Key\n   words for use in RFCs to Indicate Requirement Levels\" [KEYWORDS].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n3.  General Command and Response Grammar\n\n   The general form of POP3 commands and responses is described using\n   [ABNF]:\n\n   POP3 commands:\n\n      command      =  keyword *(SP param) CRLF    ;255 octets maximum\n      keyword      =  3*4VCHAR\n      param        =  1*VCHAR\n\n   POP3 responses:\n\n      response     =  greeting / single-line / capa-resp / multi-line\n      capa-resp    =  single-line *capability \".\" CRLF\n      capa-tag     =  1*cchar\n      capability   =  capa-tag *(SP param) CRLF   ;512 octets maximum\n      cchar        =  %x21-2D / %x2F-7F\n                          ;printable ASCII, excluding \".\"\n      dot-stuffed  =  *CHAR CRLF                  ;must be dot-stuffed\n      gchar        =  %x21-3B / %x3D-7F\n                          ;printable ASCII, excluding \"<\"\n      greeting     =  \"+OK\" [resp-code] *gchar [timestamp] *gchar CRLF\n                          ;512 octets maximum\n      multi-line   =  single-line *dot-stuffed \".\" CRLF\n      rchar        =  %x21-2E / %x30-5C / %x5E-7F\n                          ;printable ASCII, excluding \"/\" and \"]\"\n      resp-code    =  \"[\" resp-level *(\"/\" resp-level) \"]\"\n      resp-level   =  1*rchar\n      schar        =  %x21-5A / %x5C-7F\n                          ;printable ASCII, excluding \"[\"\n      single-line  =  status [SP text] CRLF       ;512 octets maximum\n      status       =  \"+OK\" / \"-ERR\"\n      text         =  *schar / resp-code *CHAR\n      timestamp    =  \"<\" *VCHAR \">\"\n                          ;MUST conform to RFC-822 msg-id\n\n\n\n\n\n\nGellens, et. al.            Standards Track                     [Page 3]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n4.  Parameter and Response Lengths\n\n   This specification increases the length restrictions on commands and\n   parameters imposed by RFC 1939.\n\n   The maximum length of a command is increased from 47 characters (4\n   character command, single space, 40 character argument, CRLF) to 255\n   octets, including the terminating CRLF.\n\n   Servers which support the CAPA command MUST support commands up to\n   255 octets.  Servers MUST also support the largest maximum command\n   length specified by any supported capability.\n\n   The maximum length of the first line of a command response (including\n   the initial greeting) is unchanged at 512 octets (including the\n   terminating CRLF).\n\n5.  The CAPA Command\n\n   The POP3 CAPA command returns a list of capabilities supported by the\n   POP3 server.  It is available in both the AUTHORIZATION and\n   TRANSACTION states.\n\n   A capability description MUST document in which states the capability\n   is announced, and in which states the commands are valid.\n\n   Capabilities available in the AUTHORIZATION state MUST be announced\n   in both states.\n\n   If a capability is announced in both states, but the argument might\n   differ after authentication, this possibility MUST be stated in the\n   capability description.\n\n   (These requirements allow a client to issue only one CAPA command if\n   it does not use any TRANSACTION-only capabilities, or any\n   capabilities whose values may differ after authentication.)\n\n   If the authentication step negotiates an integrity protection layer,\n   the client SHOULD reissue the CAPA command after authenticating, to\n   check for active down-negotiation attacks.\n\n   Each capability may enable additional protocol commands, additional\n   parameters and responses for existing commands, or describe an aspect\n   of server behavior.  These details are specified in the description\n   of the capability.\n\n\n\n\n\n\nGellens, et. al.            Standards Track                     [Page 4]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Section 3 describes the CAPA response using [ABNF].  When a\n   capability response describes an optional command, the <capa-tag>\n   SHOULD be identical to the command keyword.  CAPA response tags are\n   case-insensitive.\n\n        CAPA\n\n        Arguments:\n            none\n\n        Restrictions:\n            none\n\n        Discussion:\n            An -ERR response indicates the capability command is not\n            implemented and the client will have to probe for\n            capabilities as before.\n\n            An +OK response is followed by a list of capabilities, one\n            per line.  Each capability name MAY be followed by a single\n            space and a space-separated list of parameters.  Each\n            capability line is limited to 512 octets (including the\n            CRLF).  The capability list is terminated by a line\n            containing a termination octet (\".\") and a CRLF pair.\n\n         Possible Responses:\n             +OK -ERR\n\n         Examples:\n             C: CAPA\n             S: +OK Capability list follows\n             S: TOP\n             S: USER\n             S: SASL CRAM-MD5 KERBEROS_V4\n             S: RESP-CODES\n             S: LOGIN-DELAY 900\n             S: PIPELINING\n             S: EXPIRE 60\n             S: UIDL\n             S: IMPLEMENTATION Shlemazle-Plotz-v302\n             S: .\n\n6.  Initial Set of Capabilities\n\n   This section defines an initial set of POP3 capabilities.  These\n   include the optional POP3 commands, already published POP3\n   extensions, and behavior variations between POP3 servers which can\n   impact clients.\n\n\n\nGellens, et. al.            Standards Track                     [Page 5]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Note that there is no APOP capability, even though APOP is an\n   optional command in [POP3].  Clients discover server support of APOP\n   by the presence in the greeting banner of an initial challenge\n   enclosed in angle brackets (\"<>\").  Therefore, an APOP capability\n   would introduce two ways for a server to announce the same thing.\n\n6.1.  TOP capability\n\n   CAPA tag:\n       TOP\n\n   Arguments:\n       none\n\n   Added commands:\n       TOP\n\n   Standard commands affected:\n       none\n\n   Announced states / possible differences:\n       both / no\n\n   Commands valid in states:\n       TRANSACTION\n\n   Specification reference:\n       [POP3]\n\n   Discussion:\n       The TOP capability indicates the optional TOP command is\n       available.\n\n6.2.  USER capability\n\n   CAPA tag:\n       USER\n\n   Arguments:\n       none\n\n   Added commands:\n       USER PASS\n\n   Standard commands affected:\n       none\n\n\n\n\n\nGellens, et. al.            Standards Track                     [Page 6]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Announced states / possible differences:\n       both / no\n\n   Commands valid in states:\n       AUTHENTICATION\n\n   Specification reference:\n       [POP3]\n\n   Discussion:\n       The USER capability indicates that the USER and PASS commands\n       are supported, although they may not be available to all users.\n\n6.3.  SASL capability\n\n   CAPA tag:\n       SASL\n\n   Arguments:\n       Supported SASL mechanisms\n\n   Added commands:\n       AUTH\n\n   Standard commands affected:\n       none\n\n   Announced states / possible differences:\n       both / no\n\n   Commands valid in states:\n       AUTHENTICATION\n\n   Specification reference:\n       [POP-AUTH, SASL]\n\n   Discussion:\n       The POP3 AUTH command [POP-AUTH] permits the use of [SASL]\n       authentication mechanisms with POP3.  The SASL capability\n       indicates that the AUTH command is available and that it supports\n       an optional base64 encoded second argument for an initial client\n       response as described in the SASL specification.  The argument to\n       the SASL capability is a space separated list of SASL mechanisms\n       which are supported.\n\n\n\n\n\n\n\nGellens, et. al.            Standards Track                     [Page 7]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n6.4.  RESP-CODES capability\n\n   CAPA tag:\n       RESP-CODES\n\n   Arguments:\n       none\n\n   Added commands:\n       none\n\n   Standard commands affected:\n       none\n\n   Announced states / possible differences:\n       both / no\n\n   Commands valid in states:\n       n/a\n\n   Specification reference:\n       this document\n\n   Discussion:\n       The RESP-CODES capability indicates that any response text issued\n       by this server which begins with an open square bracket (\"[\") is\n       an extended response code (see section 8).\n\n6.5.  LOGIN-DELAY capability\n\n   CAPA tag:\n       LOGIN-DELAY\n\n   Arguments:\n       minimum seconds between logins; optionally followed by USER in\n       AUTHENTICATION state.\n\n   Added commands:\n       none\n\n   Standard commands affected:\n       USER PASS APOP AUTH\n\n   Announced states / possible differences:\n       both / yes\n\n   Commands valid in states:\n       n/a\n\n\n\nGellens, et. al.            Standards Track                     [Page 8]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Specification reference:\n       this document\n\n   Discussion:\n       POP3 clients often login frequently to check for new mail.\n       Unfortunately, the process of creating a connection,\n       authenticating the user, and opening the user's maildrop can be\n       very resource intensive on the server.  A number of deployed POP3\n       servers try to reduce server load by requiring a delay between\n       logins.  The LOGIN-DELAY capability includes an integer argument\n       which indicates the number of seconds after an \"+OK\" response to\n       a PASS, APOP, or AUTH command before another authentication will\n       be accepted.  Clients which permit the user to configure a mail\n       check interval SHOULD use this capability to determine the\n       minimum permissible interval.  Servers which advertise LOGIN-\n       DELAY SHOULD enforce it.\n\n       If the minimum login delay period could differ per user (that is,\n       the LOGIN-DELAY argument might change after authentication), the\n       server MUST announce in AUTHENTICATION state the largest value\n       which could be set for any user.  This might be the largest value\n       currently in use for any user (so only one value per server), or\n       even the largest value which the server permits to be set for any\n       user.  The server SHOULD append the token \"USER\" to the LOGIN-\n       DELAY parameter in AUTHENTICATION state, to inform the client\n       that a more accurate value is available after authentication.\n       The server SHOULD announce the more accurate value in TRANSACTION\n       state. (The \"USER\" token allows the client to decide if a second\n       CAPA command is needed or not.)\n\n       Servers enforce LOGIN-DELAY by rejecting an authentication\n       command with or without the LOGIN-DELAY error response.  See\n       section 8.1.1 for more information.\n\n6.6.  PIPELINING capability\n\n   CAPA tag:\n       PIPELINING\n\n   Arguments:\n       none\n\n   Added commands:\n       none\n\n   Standard commands affected:\n       all\n\n\n\n\nGellens, et. al.            Standards Track                     [Page 9]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Announced states / possible differences:\n       both / no\n\n   Commands valid in states:\n       n/a\n\n   Specification reference:\n       this document\n\n   Discussion:\n       The PIPELINING capability indicates the server is capable of\n       accepting multiple commands at a time; the client does not have\n       to wait for the response to a command before issuing a subsequent\n       command.  If a server supports PIPELINING, it MUST process each\n       command in turn.  If a client uses PIPELINING, it MUST keep track\n       of which commands it has outstanding, and match server responses\n       to commands in order.  If either the client or server uses\n       blocking writes, it MUST not exceed the window size of the\n       underlying transport layer.\n\n       Some POP3 clients have an option to indicate the server supports\n       \"Overlapped POP3 commands.\" This capability removes the need to\n       configure this at the client.\n\n       This is roughly synonymous with the ESMTP PIPELINING extension\n       [PIPELINING], however, since SMTP [SMTP] tends to have short\n       commands and responses, the benefit is in grouping multiple\n       commands and sending them as a unit.  While there are cases of\n       this in POP (for example, USER and PASS could be batched,\n       multiple RETR and/or DELE commands could be sent as a group),\n       because POP has short commands and sometimes lengthy responses,\n       there is also an advantage is sending new commands while still\n       receiving the response to an earlier command (for example,\n       sending RETR and/or DELE commands while processing a UIDL reply).\n\n6.7.  EXPIRE capability\n\n   CAPA tag:\n       EXPIRE\n\n   Arguments:\n       server-guaranteed minimum retention days, or NEVER; optionally\n       followed by USER in AUTHENTICATION state\n\n   Added commands:\n       none\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 10]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Standard commands affected:\n       none\n\n   Announced states / possible differences:\n       both / yes\n\n   Commands valid in states:\n       n/a\n\n   Specification reference:\n       this document\n\n   Discussion:\n       While POP3 allows clients to leave messages on the server, RFC\n       1939 [POP3] warns about the problems that may arise from this,\n       and allows servers to delete messages based on site policy.\n\n       The EXPIRE capability avoids the problems mentioned in RFC 1939,\n       by allowing the server to inform the client as to the policy in\n       effect.  The argument to the EXPIRE capability indicates the\n       minimum server retention period, in days, for messages on the\n       server.\n\n       EXPIRE 0 indicates the client is not permitted to leave mail on\n       the server; when the session enters the UPDATE state the server\n       MAY assume an implicit DELE for each message which was downloaded\n       with RETR.\n\n       EXPIRE NEVER asserts that the server does not delete messages.\n\n       The concept of a \"retention period\" is intentionally vague.\n       Servers may start counting days to expiration when a message is\n       added to a maildrop, when a client becomes aware of the existence\n       of a message through the LIST or UIDL commands, when a message\n       has been acted upon in some way (for example, TOP or RETR), or at\n       some other event.  The EXPIRE capability cannot provide a precise\n       indication as to exactly when any specific message will expire.\n       The capability is intended to make it easier for clients to\n       behave in ways which conform to site policy and user wishes.  For\n       example, a client might display a warning for attempts to\n       configure a \"leave mail on server\" period which is greater than\n       or equal to some percentage of the value announced by the server.\n\n       If a site uses any automatic deletion policy, it SHOULD use the\n       EXPIRE capability to announce this.\n\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 11]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n       The EXPIRE capability, with a parameter other than 0 or NEVER, is\n       intended to let the client know that the server does permit mail\n       to be left on the server, and to present a value which is the\n       smallest which might be in force.\n\n       Sites which permit users to retain messages indefinitely SHOULD\n       announce this with the EXPIRE NEVER response.\n\n       If the expiration policy differs per user (that is, the EXPIRE\n       argument might change after authentication), the server MUST\n       announce in AUTHENTICATION state the smallest value which could\n       be set for any user.  This might be the smallest value currently\n       in use for any user (so only one value per server), or even the\n       smallest value which the server permits to be set for any user.\n       The server SHOULD append the token \"USER\" to the EXPIRE parameter\n       in AUTHENTICATION state, to inform the client that a more\n       accurate value is available after authentication.  The server\n       SHOULD announce the more accurate value in TRANSACTION state.\n       (The \"USER\" token allows the client to decide if a second CAPA\n       command is needed or not.)\n\n       A site may have a message expiration policy which treats messages\n       differently depending on which user actions have been performed,\n       or based on other factors.  For example, a site might delete\n       unseen messages after 60 days, and completely- or partially-seen\n       messages after 15 days.\n\n       The announced EXPIRE value is the smallest retention period which\n       is or might be used by any category or condition of the current\n       site policy, for any user (in AUTHENTICATION state) or the\n       specific user (in TRANSACTION state).  That is, EXPIRE informs\n       the client of the minimum number of days messages may remain on\n       the server under any circumstances.\n\n       Examples:\n           EXPIRE 5 USER\n           EXPIRE 30\n           EXPIRE NEVER\n           EXPIRE 0\n\n       The first example indicates the server might delete messages\n       after five days, but the period differs per user, and so a more\n       accurate value can be obtained by issuing a second CAPA command\n       in TRANSACTION state.  The second example indicates the server\n       could delete messages after 30 days.  In the third example, the\n       server announces it does not delete messages.  The fourth example\n       specifies that the site does not permit messages to be left on\n       the server.\n\n\n\nGellens, et. al.            Standards Track                    [Page 12]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n6.8.  UIDL capability\n\n   CAPA tag:\n       UIDL\n\n   Arguments:\n       none\n\n   Added commands:\n       UIDL\n\n   Standard commands affected:\n       none\n\n   Announced states / possible differences:\n       both / no\n\n   Commands valid in states:\n       TRANSACTION\n\n   Specification reference:\n       [POP3]\n\n   Discussion:\n       The UIDL capability indicates that the optional UIDL command is\n       supported.\n\n6.9.  IMPLEMENTATION capability\n\n   CAPA tag:\n       IMPLEMENTATION\n\n   Arguments:\n       string giving server implementation information\n\n   Added commands:\n       none\n\n   Standard commands affected:\n       none\n\n   Announced states / possible differences:\n       both (optionally TRANSACTION only) / no\n\n   Commands valid in states:\n       n/a\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 13]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   Specification reference:\n       this document\n\n   Discussion:\n       It is often useful to identify an implementation of a particular\n       server (for example, when logging).  This is commonly done in the\n       welcome banner, but one must guess if a string is an\n       implementation ID or not.\n\n       The argument to the IMPLEMENTATION capability consists of one or\n       more tokens which identify the server. (Note that since CAPA\n       response tag arguments are space-separated, it may be convenient\n       for the IMPLEMENTATION capability argument to not contain spaces,\n       so that it is a single token.)\n\n       Normally, servers announce IMPLEMENTATION in both states.\n       However, a server MAY chose to do so only in TRANSACTION state.\n\n       A server MAY include the implementation identification both in\n       the welcome banner and in the IMPLEMENTATION capability.\n\n       Clients MUST NOT modify their behavior based on the server\n       implementation.  Instead the server and client should agree on a\n       private extension.\n\n7.  Future Extensions to POP3\n\n   Future extensions to POP3 are in general discouraged, as POP3's\n   usefulness lies in its simplicity.  POP3 is intended as a download-\n   and-delete protocol; mail access capabilities are available in IMAP\n   [IMAP4].  Extensions which provide support for additional mailboxes,\n   allow uploading of messages to the server, or which deviate from\n   POP's download-and-delete model are strongly discouraged and unlikely\n   to be permitted on the IETF standards track.\n\n   Clients MUST NOT require the presence of any extension for basic\n   functionality, with the exception of the authentication commands\n   (APOP, AUTH [section 6.3] and USER/PASS).\n\n   Section 9 specifies how additional capabilities are defined.\n\n8.  Extended POP3 Response Codes\n\n   Unextended POP3 is only capable of indicating success or failure to\n   most commands.  Unfortunately, clients often need to know more\n   information about the cause of a failure in order to gracefully\n   recover.  This is especially important in response to a failed login\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 14]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   (there are widely-deployed clients which attempt to decode the error\n   text of a PASS command result, to try and distinguish between \"unable\n   to get maildrop lock\" and \"bad login\").\n\n   This specification amends the POP3 standard to permit an optional\n   response code, enclosed in square brackets, at the beginning of the\n   human readable text portion of an \"+OK\" or \"-ERR\" response.  Clients\n   supporting this extension MAY remove any information enclosed in\n   square brackets prior to displaying human readable text to the user.\n   Immediately following the open square bracket \"[\" character is a\n   response code which is interpreted in a case-insensitive fashion by\n   the client.\n\n   The response code is hierarchical, with a \"/\" separating levels of\n   detail about the error.  Clients MUST ignore unknown hierarchical\n   detail about the response code.  This is important, as it could be\n   necessary to provide further detail for response codes in the future.\n\n   Section 3 describes response codes using [ABNF].\n\n   If a server supports extended response codes, it indicates this by\n   including the RESP-CODES capability in the CAPA response.\n\n   Examples:\n           C: APOP mrose c4c9334bac560ecc979e58001b3e22fb\n           S: -ERR [IN-USE] Do you have another POP session running?\n\n8.1.  Initial POP3 response codes\n\n   This specification defines two POP3 response codes which can be used\n   to determine the reason for a failed login.  Section 9 specifies how\n   additional response codes are defined.\n\n8.1.1.  The LOGIN-DELAY response code\n\n   This occurs on an -ERR response to an AUTH, USER (see note), PASS or\n   APOP command and indicates that the user has logged in recently and\n   will not be allowed to login again until the login delay period has\n   expired.\n\n   NOTE:  Returning the LOGIN-DELAY response code to the USER command\n   avoids the work of authenticating the user but reveals to the client\n   that the specified user exists.  Unless the server is operating in an\n   environment where user names are not secret (for example, many\n   popular email clients advertise the POP server and user name in an\n   outgoing mail header), or where server access is restricted, or the\n   server can verify that the connection is to the same user, it is\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 15]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   strongly recommended that the server not issue this response code to\n   the USER command.  The server still saves the cost of opening the\n   maildrop, which in some environments is the most expensive step.\n\n8.1.2.  The IN-USE response code\n\n   This occurs on an -ERR response to an AUTH, APOP, or PASS command.\n   It indicates the authentication was successful, but the user's\n   maildrop is currently in use (probably by another POP3 client).\n\n9.  IANA Considerations\n\n   This document requests that IANA maintain two new registries:  POP3\n   capabilities and POP3 response codes.\n\n   New POP3 capabilities MUST be defined in a standards track or IESG\n   approved experimental RFC, and MUST NOT begin with the letter \"X\".\n\n   New POP3 capabilities MUST include the following information:\n        CAPA tag\n        Arguments\n        Added commands\n        Standard commands affected\n        Announced states / possible differences\n        Commands valid in states\n        Specification reference\n        Discussion\n\n   In addition, new limits for POP3 command and response lengths may\n   need to be included.\n\n   New POP3 response codes MUST be defined in an RFC or other permanent\n   and readily available reference, in sufficient detail so that\n   interoperability between independent implementations is possible.\n   (This is the \"Specification Required\" policy described in [IANA]).\n\n   New POP3 response code specifications MUST include the following\n   information: the complete response code, for which responses (+OK\n   or -ERR) and commands it is valid, and a definition of its meaning and\n   expected client behavior.\n\n\n\n\n\n\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 16]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n10.  Security Considerations\n\n   A capability list can reveal information about the server's\n   authentication mechanisms which can be used to determine if certain\n   attacks will be successful.  However, allowing clients to\n   automatically detect availability of stronger mechanisms and alter\n   their configurations to use them can improve overall security at a\n   site.\n\n   Section 8.1 discusses the security issues related to use of the\n   LOGIN-DELAY response code with the USER command.\n\n11.  Acknowledgments\n\n   This document has been revised in part based on comments and\n   discussions which took place on and off the IETF POP3 Extensions\n   mailing list.  The help of those who took the time to review this\n   memo and make suggestions is appreciated, especially that of Alexey\n   Melnikov, Harald Alvestrand, and Mike Gahrns.\n\n12.  References\n\n   [ABNF]       Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n                Specifications:  ABNF\", RFC 2234, November 1997.\n\n   [IANA]       Narten, T. and H. Alvestrand, \"Guidelines for Writing an\n                IANA Considerations Section in RFCs\", BCP 26, RFC 2434,\n                October 1998.\n\n   [IMAP4]      Crispin, M., \"Internet Message Access Protocol --\n                Version 4rev1\", RFC 2060, December 1996.\n\n   [KEYWORDS]   Bradner, S., \"Key words for use in RFCs to Indicate\n                Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [PIPELINING] Freed, N., \"SMTP Service Extension for Command\n                Pipelining\", RFC 2197, September 1997.\n\n   [POP3]       Myers, J. and M. Rose, \"Post Office Protocol -- Version\n                3\", STD 53, RFC 1939, May 1996.\n\n   [POP-AUTH]   Myers, J., \"POP3 AUTHentication command\", RFC 1734,\n                December 1994.\n\n   [SASL]       Myers, J., \"Simple Authentication and Security Layer\n                (SASL)\", RFC 2222, October 1997.\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 17]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n   [SMTP]       Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC\n                821, August 1982.\n\n13.  Authors' Addresses\n\n   Randall Gellens\n   QUALCOMM Incorporated\n   6455 Lusk Blvd.\n   San Diego, CA  92121-2779\n   USA\n\n   Phone: +1 619 651 5115\n   Fax:   +1 619 845 7268\n   EMail: randy@qualcomm.com\n\n\n   Chris Newman\n   Innosoft International, Inc.\n   1050 Lakes Drive\n   West Covina, CA 91790\n   USA\n\n   EMail: chris.newman@innosoft.com\n\n\n   Laurence Lundblade\n   QUALCOMM Incorporated\n   6455 Lusk Blvd.\n   San Diego, Ca, 92121-2779\n   USA\n\n   Phone: +1 619 658 3584\n   Fax:   +1 619 845 7268\n   EMail: lgl@qualcomm.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 18]\n\f\nRFC 2449                POP3 Extension Mechanism           November 1998\n\n\n14.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1998).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et. al.            Standards Track                    [Page 19]\n\f\n"
  },
  {
    "path": "rfc/rfc2487.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                     P. Hoffman\nRequest for Comments: 2487                  Internet Mail Consortium\nCategory: Standards Track                               January 1999\n\n\n            SMTP Service Extension for Secure SMTP over TLS\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n1. Abstract\n\n   This document describes an extension to the SMTP service that allows\n   an SMTP server and client to use transport-layer security to provide\n   private, authenticated communication over the Internet. This gives\n   SMTP agents the ability to protect some or all of their\n   communications from eavesdroppers and attackers.\n\n2. Introduction\n\n   SMTP [RFC-821] servers and clients normally communicate in the clear\n   over the Internet. In many cases, this communication goes through one\n   or more router that is not controlled or trusted by either entity.\n   Such an untrusted router might allow a third party to monitor or\n   alter the communications between the server and client.\n\n   Further, there is often a desire for two SMTP agents to be able to\n   authenticate each others' identities. For example, a secure SMTP\n   server might only allow communications from other SMTP agents it\n   knows, or it might act differently for messages received from an\n   agent it knows than from one it doesn't know.\n\n   TLS [TLS], more commonly known as SSL, is a popular mechanism for\n   enhancing TCP communications with privacy and authentication. TLS is\n   in wide use with the HTTP protocol, and is also being used for adding\n   security to many other common protocols that run over TCP.\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 1]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\n2.1 Terminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC-2119].\n\n3. STARTTLS Extension\n\n   The STARTTLS extension to SMTP is laid out as follows:\n\n   (1) the name of the SMTP service defined here is STARTTLS;\n\n   (2) the EHLO keyword value associated with the extension is STARTTLS;\n\n   (3) the STARTTLS keyword has no parameters;\n\n   (4) a new SMTP verb, \"STARTTLS\", is defined;\n\n   (5) no additional parameters are added to any SMTP command.\n\n4. The STARTTLS Keyword\n\n   The STARTTLS keyword is used to tell the SMTP client that the SMTP\n   server allows use of TLS. It takes no parameters.\n\n5. The STARTTLS Command\n\n   The format for the STARTTLS command is:\n\n   STARTTLS\n\n   with no parameters.\n\n   After the client gives the STARTTLS command, the server responds with\n   one of the following reply codes:\n\n   220 Ready to start TLS\n   501 Syntax error (no parameters allowed)\n   454 TLS not available due to temporary reason\n\n   A publicly-referenced SMTP server MUST NOT require use of the\n   STARTTLS extension in order to deliver mail locally. This rule\n   prevents the STARTTLS extension from damaging the interoperability of\n   the Internet's SMTP infrastructure. A publicly-referenced SMTP server\n   is an SMTP server which runs on port 25 of an Internet host listed in\n   the MX record (or A record if an MX record is not present) for the\n   domain name on the right hand side of an Internet mail address.\n\n\n\n\nHoffman                     Standards Track                     [Page 2]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\n   Any SMTP server may refuse to accept messages for relay based on\n   authentication supplied during the TLS negotiation. An SMTP server\n   that is not publicly referenced may refuse to accept any messages for\n   relay or local delivery based on authentication supplied during the\n   TLS negotiation.\n\n   A SMTP server that is not publicly referenced may choose to require\n   that the client perform a TLS negotiation before accepting any\n   commands. In this case, the server SHOULD return the reply code:\n\n   530 Must issue a STARTTLS command first\n\n   to every command other than NOOP, EHLO, STARTTLS, or QUIT. If the\n   client and server are using the ENHANCEDSTATUSCODES ESMTP extension\n   [RFC-2034], the status code to be returned SHOULD be 5.7.0.\n\n   After receiving a 220 response to a STARTTLS command, the client\n   SHOULD start the TLS negotiation before giving any other SMTP\n   commands.\n\n   If the SMTP client is using pipelining as defined in RFC 1854, the\n   STARTTLS command must be the last command in a group.\n\n5.1 Processing After the STARTTLS Command\n\n   After the TLS handshake has been completed, both parties MUST\n   immediately decide whether or not to continue based on the\n   authentication and privacy achieved. The SMTP client and server may\n   decide to move ahead even if the TLS negotiation ended with no\n   authentication and/or no privacy because most SMTP services are\n   performed with no authentication and no privacy, but some SMTP\n   clients or servers may want to continue only if a particular level of\n   authentication and/or privacy was achieved.\n\n   If the SMTP client decides that the level of authentication or\n   privacy is not high enough for it to continue, it SHOULD issue an\n   SMTP QUIT command immediately after the TLS negotiation is complete.\n   If the SMTP server decides that the level of authentication or\n   privacy is not high enough for it to continue, it SHOULD reply to\n   every SMTP command from the client (other than a QUIT command) with\n   the 554 reply code (with a possible text string such as \"Command\n   refused due to lack of security\").\n\n   The decision of whether or not to believe the authenticity of the\n   other party in a TLS negotiation is a local matter. However, some\n   general rules for the decisions are:\n\n\n\n\n\nHoffman                     Standards Track                     [Page 3]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\n    - A SMTP client would probably only want to authenticate an SMTP\n      server whose server certificate has a domain name that is the\n      domain name that the client thought it was connecting to.\n    - A publicly-referenced  SMTP server would probably want to accept\n      any certificate from an SMTP client, and would possibly want to\n      put distinguishing information about the certificate in the\n      Received header of messages that were relayed or submitted from\n      the client.\n\n5.2 Result of the STARTTLS Command\n\n   Upon completion of the TLS handshake, the SMTP protocol is reset to\n   the initial state (the state in SMTP after a server issues a 220\n   service ready greeting). The server MUST discard any knowledge\n   obtained from the client, such as the argument to the EHLO command,\n   which was not obtained from the TLS negotiation itself. The client\n   MUST discard any knowledge obtained from the server, such as the list\n   of SMTP service extensions, which was not obtained from the TLS\n   negotiation itself. The client SHOULD send an EHLO command as the\n   first command after a successful TLS negotiation.\n\n   The list of SMTP service extensions returned in response to an EHLO\n   command received after the TLS handshake MAY be different than the\n   list returned before the TLS handshake. For example, an SMTP server\n   might not want to advertise support for a particular SASL mechanism\n   [SASL] unless a client has sent an appropriate client certificate\n   during a TLS handshake.\n\n   Both the client and the server MUST know if there is a TLS session\n   active.  A client MUST NOT attempt to start a TLS session if a TLS\n   session is already active. A server MUST NOT return the TLS extension\n   in response to an EHLO command received after a TLS handshake has\n   completed.\n\n6. Usage Example\n\n   The following dialog illustrates how a client and server can start a\n   TLS session:\n\n   S: <waits for connection on TCP port 25>\n   C: <opens connection>\n   S: 220 mail.imc.org SMTP service ready\n   C: EHLO mail.ietf.org\n   S: 250-mail.imc.org offers a warm hug of welcome\n   S: 250 STARTTLS\n   C: STARTTLS\n   S: 220 Go ahead\n   C: <starts TLS negotiation>\n\n\n\nHoffman                     Standards Track                     [Page 4]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\n   C & S: <negotiate a TLS session>\n   C & S: <check result of negotiation>\n   C: <continues by sending an SMTP command>\n   . . .\n\n7. Security Considerations\n\n   It should be noted that SMTP is not an end-to-end mechanism. Thus, if\n   an SMTP client/server pair decide to add TLS privacy, they are not\n   securing the transport from the originating mail user agent to the\n   recipient.  Further, because delivery of a single piece of mail may\n   go between more than two SMTP servers, adding TLS privacy to one pair\n   of servers does not mean that the entire SMTP chain has been made\n   private. Further, just because an SMTP server can authenticate an\n   SMTP client, it does not mean that the mail from the SMTP client was\n   authenticated by the SMTP client when the client received it.\n\n   Both the STMP client and server must check the result of the TLS\n   negotiation to see whether acceptable authentication or privacy was\n   achieved. Ignoring this step completely invalidates using TLS for\n   security.  The decision about whether acceptable authentication or\n   privacy was achieved is made locally, is implementation-dependant,\n   and is beyond the scope of this document.\n\n   The SMTP client and server should note carefully the result of the\n   TLS negotiation. If the negotiation results in no privacy, or if it\n   results in privacy using algorithms or key lengths that are deemed\n   not strong enough, or if the authentication is not good enough for\n   either party, the client may choose to end the SMTP session with an\n   immediate QUIT command, or the server may choose to not accept any\n   more SMTP commands.\n\n   A server announcing in an EHLO response that it uses a particular TLS\n   protocol should not pose any security issues, since any use of TLS\n   will be at least as secure as no use of TLS.\n\n   A man-in-the-middle attack can be launched by deleting the \"250\n   STARTTLS\" response from the server. This would cause the client not\n   to try to start a TLS session. An SMTP client can protect against\n   this attack by recording the fact that a particular SMTP server\n   offers TLS during one session and generating an alarm if it does not\n   appear in the EHLO response for a later session. The lack of TLS\n   during a session SHOULD NOT result in the bouncing of email, although\n   it could result in delayed processing.\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 5]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\n   Before the TLS handshake has begun, any protocol interactions are\n   performed in the clear and may be modified by an active attacker. For\n   this reason, clients and servers MUST discard any knowledge obtained\n   prior to the start of the TLS handshake upon completion of the TLS\n   handshake.\n\n   The STARTTLS extension is not suitable for authenticating the author\n   of an email message unless every hop in the delivery chain, including\n   the submission to the first SMTP server, is authenticated. Another\n   proposal [SMTP-AUTH] can be used to authenticate delivery and MIME\n   security multiparts [MIME-SEC] can be used to authenticate the author\n   of an email message. In addition, the [SMTP-AUTH] proposal offers\n   simpler and more flexible options to authenticate an SMTP client and\n   the SASL EXTERNAL mechanism [SASL] MAY be used in conjunction with\n   the STARTTLS command to provide an authorization identity.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 6]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\nA. References\n\n   [RFC-821]   Postel, J., \"Simple Mail Transfer Protocol\", RFC 821,\n               August 1982.\n\n   [RFC-1869]  Klensin, J., Freed, N, Rose, M, Stefferud, E. and D.\n               Crocker, \"SMTP Service Extensions\", STD 10, RFC 1869,\n               November 1995.\n\n   [RFC-2034]  Freed, N., \"SMTP Service Extension for Returning Enhanced\n               Error Codes\", RFC 2034, October 1996.\n\n   [RFC-2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [SASL]      Myers, J., \"Simple Authentication and Security Layer\n               (SASL)\", RFC 2222, October 1997.\n\n   [SMTP-AUTH] \"SMTP Service Extension for Authentication\", Work in\n               Progress.\n\n   [TLS]       Dierks, T. and C. Allen, \"The TLS Protocol Version 1.0\",\n               RFC 2246, January 1999.\n\nB. Author's Address\n\n   Paul Hoffman\n   Internet Mail Consortium\n   127 Segre Place\n   Santa Cruz, CA  95060\n\n   Phone: (831) 426-9827\n   EMail: phoffman@imc.org\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 7]\n\f\nRFC 2487                 SMTP Service Extension             January 1999\n\n\nC.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc2554.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           J. Myers\nRequest for Comments: 2554                       Netscape Communications\nCategory: Standards Track                                     March 1999\n\n\n                         SMTP Service Extension\n                           for Authentication\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n\n1. Introduction\n\n   This document defines an SMTP service extension [ESMTP] whereby an\n   SMTP client may indicate an authentication mechanism to the server,\n   perform an authentication protocol exchange, and optionally negotiate\n   a security layer for subsequent protocol interactions.  This\n   extension is a profile of the Simple Authentication and Security\n   Layer [SASL].\n\n\n2. Conventions Used in this Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as defined in \"Key words for\n   use in RFCs to Indicate Requirement Levels\" [KEYWORDS].\n\n\n3. The Authentication service extension\n\n\n   (1) the name of the SMTP service extension is \"Authentication\"\n\n   (2) the EHLO keyword value associated with this extension is \"AUTH\"\n\n\n\n\nMyers                       Standards Track                     [Page 1]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n   (3) The AUTH EHLO keyword contains as a parameter a space separated\n       list of the names of supported SASL mechanisms.\n\n   (4) a new SMTP verb \"AUTH\" is defined\n\n   (5) an optional parameter using the keyword \"AUTH\" is added to the\n       MAIL FROM command, and extends the maximum line length of the\n       MAIL FROM command by 500 characters.\n\n   (6) this extension is appropriate for the submission protocol\n       [SUBMIT].\n\n\n4. The AUTH command\n\n   AUTH mechanism [initial-response]\n\n     Arguments:\n         a string identifying a SASL authentication mechanism.\n         an optional base64-encoded response\n\n     Restrictions:\n         After an AUTH command has successfully completed, no more AUTH\n         commands may be issued in the same session.  After a successful\n         AUTH command completes, a server MUST reject any further AUTH\n         commands with a 503 reply.\n\n         The AUTH command is not permitted during a mail transaction.\n\n     Discussion:\n         The AUTH command indicates an authentication mechanism to the\n         server.  If the server supports the requested authentication\n         mechanism, it performs an authentication protocol exchange to\n         authenticate and identify the user.  Optionally, it also\n         negotiates a security layer for subsequent protocol\n         interactions.  If the requested authentication mechanism is not\n         supported, the server rejects the AUTH command with a 504\n         reply.\n\n         The authentication protocol exchange consists of a series of\n         server challenges and client answers that are specific to the\n         authentication mechanism.  A server challenge, otherwise known\n         as a ready response, is a 334 reply with the text part\n         containing a BASE64 encoded string.  The client answer consists\n         of a line containing a BASE64 encoded string.  If the client\n         wishes to cancel an authentication exchange, it issues a line\n         with a single \"*\".  If the server receives such an answer, it\n         MUST reject the AUTH command by sending a 501 reply.\n\n\n\nMyers                       Standards Track                     [Page 2]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n         The optional initial-response argument to the AUTH command is\n         used to save a round trip when using authentication mechanisms\n         that are defined to send no data in the initial challenge.\n         When the initial-response argument is used with such a\n         mechanism, the initial empty challenge is not sent to the\n         client and the server uses the data in the initial-response\n         argument as if it were sent in response to the empty challenge.\n         Unlike a zero-length client answer to a 334 reply, a zero-\n         length initial response is sent as a single equals sign (\"=\").\n         If the client uses an initial-response argument to the AUTH\n         command with a mechanism that sends data in the initial\n         challenge, the server rejects the AUTH command with a 535\n         reply.\n\n         If the server cannot BASE64 decode the argument, it rejects the\n         AUTH command with a 501 reply.  If the server rejects the\n         authentication data, it SHOULD reject the AUTH command with a\n         535 reply unless a more specific error code, such as one listed\n         in section 6, is appropriate.  Should the client successfully\n         complete the authentication exchange, the SMTP server issues a\n         235 reply.\n\n         The service name specified by this protocol's profile of SASL\n         is \"smtp\".\n\n         If a security layer is negotiated through the SASL\n         authentication exchange, it takes effect immediately following\n         the CRLF that concludes the authentication exchange for the\n         client, and the CRLF of the success reply for the server.  Upon\n         a security layer's taking effect, the SMTP protocol is reset to\n         the initial state (the state in SMTP after a server issues a\n         220 service ready greeting).  The server MUST discard any\n         knowledge obtained from the client, such as the argument to the\n         EHLO command, which was not obtained from the SASL negotiation\n         itself.  The client MUST discard any knowledge obtained from\n         the server, such as the list of SMTP service extensions, which\n         was not obtained from the SASL negotiation itself (with the\n         exception that a client MAY compare the list of advertised SASL\n         mechanisms before and after authentication in order to detect\n         an active down-negotiation attack).  The client SHOULD send an\n         EHLO command as the first command after a successful SASL\n         negotiation which results in the enabling of a security layer.\n\n         The server is not required to support any particular\n         authentication mechanism, nor are authentication mechanisms\n         required to support any security layers.  If an AUTH command\n         fails, the client may try another authentication mechanism by\n         issuing another AUTH command.\n\n\n\nMyers                       Standards Track                     [Page 3]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n         If an AUTH command fails, the server MUST behave the same as if\n         the client had not issued the AUTH command.\n\n         The BASE64 string may in general be arbitrarily long.  Clients\n         and servers MUST be able to support challenges and responses\n         that are as long as are generated by the authentication\n         mechanisms they support, independent of any line length\n         limitations the client or server may have in other parts of its\n         protocol implementation.\n\n     Examples:\n         S: 220 smtp.example.com ESMTP server ready\n         C: EHLO jgm.example.com\n         S: 250-smtp.example.com\n         S: 250 AUTH CRAM-MD5 DIGEST-MD5\n         C: AUTH FOOBAR\n         S: 504 Unrecognized authentication type.\n         C: AUTH CRAM-MD5\n         S: 334\n         PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=\n         C: ZnJlZCA5ZTk1YWVlMDljNDBhZjJiODRhMGMyYjNiYmFlNzg2ZQ==\n         S: 235 Authentication successful.\n\n\n\n5. The AUTH parameter to the MAIL FROM command\n\n   AUTH=addr-spec\n\n   Arguments:\n       An addr-spec containing the identity which submitted the message\n       to the delivery system, or the two character sequence \"<>\"\n       indicating such an identity is unknown or insufficiently\n       authenticated.  To comply with the restrictions imposed on ESMTP\n       parameters, the addr-spec is encoded inside an xtext.  The syntax\n       of an xtext is described in section 5 of [ESMTP-DSN].\n\n   Discussion:\n       The optional AUTH parameter to the MAIL FROM command allows\n       cooperating agents in a trusted environment to communicate the\n       authentication of individual messages.\n\n       If the server trusts the authenticated identity of the client to\n       assert that the message was originally submitted by the supplied\n       addr-spec, then the server SHOULD supply the same addr-spec in an\n       AUTH parameter when relaying the message to any server which\n       supports the AUTH extension.\n\n\n\n\nMyers                       Standards Track                     [Page 4]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n       A MAIL FROM parameter of AUTH=<> indicates that the original\n       submitter of the message is not known.  The server MUST NOT treat\n       the message as having been originally submitted by the client.\n\n       If the AUTH parameter to the MAIL FROM is not supplied, the\n       client has authenticated, and the server believes the message is\n       an original submission by the client, the server MAY supply the\n       client's identity in the addr-spec in an AUTH parameter when\n       relaying the message to any server which supports the AUTH\n       extension.\n\n       If the server does not sufficiently trust the authenticated\n       identity of the client, or if the client is not authenticated,\n       then the server MUST behave as if the AUTH=<> parameter was\n       supplied.  The server MAY, however, write the value of the AUTH\n       parameter to a log file.\n\n       If an AUTH=<> parameter was supplied, either explicitly or due to\n       the requirement in the previous paragraph, then the server MUST\n       supply the AUTH=<> parameter when relaying the message to any\n       server which it has authenticated to using the AUTH extension.\n\n       A server MAY treat expansion of a mailing list as a new\n       submission, setting the AUTH parameter to the mailing list\n       address or mailing list administration address when relaying the\n       message to list subscribers.\n\n       It is conforming for an implementation to be hard-coded to treat\n       all clients as being insufficiently trusted.  In that case, the\n       implementation does nothing more than parse and discard\n       syntactically valid AUTH parameters to the MAIL FROM command and\n       supply AUTH=<> parameters to any servers to which it\n       authenticates using the AUTH extension.\n\n   Examples:\n       C: MAIL FROM:<e=mc2@example.com> AUTH=e+3Dmc2@example.com\n       S: 250 OK\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 5]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n6. Error Codes\n\n   The following error codes may be used to indicate various conditions\n   as described.\n\n   432 A password transition is needed\n\n   This response to the AUTH command indicates that the user needs to\n   transition to the selected authentication mechanism.  This typically\n   done by authenticating once using the PLAIN authentication mechanism.\n\n   534 Authentication mechanism is too weak\n\n   This response to the AUTH command indicates that the selected\n   authentication mechanism is weaker than server policy permits for\n   that user.\n\n   538 Encryption required for requested authentication mechanism\n\n   This response to the AUTH command indicates that the selected\n   authentication mechanism may only be used when the underlying SMTP\n   connection is encrypted.\n\n   454 Temporary authentication failure\n\n   This response to the AUTH command indicates that the authentication\n   failed due to a temporary server failure.\n\n   530 Authentication required\n\n   This response may be returned by any command other than AUTH, EHLO,\n   HELO, NOOP, RSET, or QUIT.  It indicates that server policy requires\n   authentication in order to perform the requested action.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 6]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n7. Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) notation as specified in [ABNF].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   UPALPHA         = %x41-5A            ;; Uppercase: A-Z\n\n   LOALPHA         = %x61-7A            ;; Lowercase: a-z\n\n   ALPHA           = UPALPHA / LOALPHA  ;; case insensitive\n\n   DIGIT           = %x30-39            ;; Digits 0-9\n\n   HEXDIGIT        = %x41-46 / DIGIT    ;; hexidecimal digit (uppercase)\n\n   hexchar         = \"+\" HEXDIGIT HEXDIGIT\n\n   xchar           = %x21-2A / %x2C-3C / %x3E-7E\n                     ;; US-ASCII except for \"+\", \"=\", SPACE and CTL\n\n   xtext           = *(xchar / hexchar)\n\n   AUTH_CHAR       = ALPHA / DIGIT / \"-\" / \"_\"\n\n   auth_type       = 1*20AUTH_CHAR\n\n   auth_command    = \"AUTH\" SPACE auth_type [SPACE (base64 / \"=\")]\n                     *(CRLF [base64]) CRLF\n\n   auth_param      = \"AUTH=\" xtext\n                       ;; The decoded form of the xtext MUST be either\n                       ;; an addr-spec or the two characters \"<>\"\n\n   base64          = base64_terminal /\n                     ( 1*(4base64_CHAR) [base64_terminal] )\n\n   base64_char     = UPALPHA / LOALPHA / DIGIT / \"+\" / \"/\"\n                     ;; Case-sensitive\n\n   base64_terminal = (2base64_char \"==\") / (3base64_char \"=\")\n\n   continue_req    = \"334\" SPACE [base64] CRLF\n\n\n\n\nMyers                       Standards Track                     [Page 7]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n   CR              = %x0C           ;; ASCII CR, carriage return\n\n   CRLF            = CR LF\n\n   CTL             = %x00-1F / %x7F ;; any ASCII control character and DEL\n\n   LF              = %x0A           ;; ASCII LF, line feed\n\n   SPACE           = %x20           ;; ASCII SP, space\n\n\n\n\n8. References\n\n   [ABNF]      Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n               Specifications: ABNF\", RFC 2234, November 1997.\n\n   [CRAM-MD5]  Klensin, J., Catoe, R. and P. Krumviede, \"IMAP/POP\n               AUTHorize Extension for Simple Challenge/Response\", RFC\n               2195, September 1997.\n\n   [ESMTP]     Klensin, J., Freed, N., Rose, M., Stefferud, E. and D.\n               Crocker, \"SMTP Service Extensions\", RFC 1869, November\n               1995.\n\n   [ESMTP-DSN] Moore, K, \"SMTP Service Extension for Delivery Status\n               Notifications\", RFC 1891, January 1996.\n\n   [KEYWORDS]  Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [SASL]      Myers, J., \"Simple Authentication and Security Layer\n               (SASL)\", RFC 2222, October 1997.\n\n   [SUBMIT]    Gellens, R. and J. Klensin, \"Message Submission\", RFC\n               2476, December 1998.\n\n   [RFC821]    Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC\n               821, August 1982.\n\n   [RFC822]    Crocker, D., \"Standard for the Format of ARPA Internet\n               Text Messages\", STD 11, RFC 822, August 1982.\n\n\n\n\n\n\n\n\nMyers                       Standards Track                     [Page 8]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n9. Security Considerations\n\n   Security issues are discussed throughout this memo.\n\n   If a client uses this extension to get an encrypted tunnel through an\n   insecure network to a cooperating server, it needs to be configured\n   to never send mail to that server when the connection is not mutually\n   authenticated and encrypted.  Otherwise, an attacker could steal the\n   client's mail by hijacking the SMTP connection and either pretending\n   the server does not support the Authentication extension or causing\n   all AUTH commands to fail.\n\n   Before the SASL negotiation has begun, any protocol interactions are\n   performed in the clear and may be modified by an active attacker.\n   For this reason, clients and servers MUST discard any knowledge\n   obtained prior to the start of the SASL negotiation upon completion\n   of a SASL negotiation which results in a security layer.\n\n   This mechanism does not protect the TCP port, so an active attacker\n   may redirect a relay connection attempt to the submission port\n   [SUBMIT].  The AUTH=<> parameter prevents such an attack from causing\n   an relayed message without an envelope authentication to pick up the\n   authentication of the relay client.\n\n   A message submission client may require the user to authenticate\n   whenever a suitable SASL mechanism is advertised.  Therefore, it may\n   not be desirable for a submission server [SUBMIT] to advertise a SASL\n   mechanism when use of that mechanism grants the client no benefits\n   over anonymous submission.\n\n   This extension is not intended to replace or be used instead of end-\n   to-end message signature and encryption systems such as S/MIME or\n   PGP.  This extension addresses a different problem than end-to-end\n   systems; it has the following key differences:\n\n      (1) it is generally useful only within a trusted enclave\n\n      (2) it protects the entire envelope of a message, not just the\n          message's body.\n\n      (3) it authenticates the message submission, not authorship of the\n          message content\n\n      (4) it can give the sender some assurance the message was\n          delivered to the next hop in the case where the sender\n          mutually authenticates with the next hop and negotiates an\n          appropriate security layer.\n\n\n\n\nMyers                       Standards Track                     [Page 9]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n   Additional security considerations are mentioned in the SASL\n   specification [SASL].\n\n\n\n10. Author's Address\n\n   John Gardiner Myers\n   Netscape Communications\n   501 East Middlefield Road\n   Mail Stop MV-029\n   Mountain View, CA 94043\n\n   EMail: jgmyers@netscape.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                    [Page 10]\n\f\nRFC 2554                  SMTP Authentication                 March 1999\n\n\n11.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMyers                       Standards Track                    [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc2595.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                          C. Newman\nRequest for Comments: 2595                                      Innosoft\nCategory: Standards Track                                      June 1999\n\n\n                   Using TLS with IMAP, POP3 and ACAP\n\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n1. Motivation\n\n   The TLS protocol (formerly known as SSL) provides a way to secure an\n   application protocol from tampering and eavesdropping.  The option of\n   using such security is desirable for IMAP, POP and ACAP due to common\n   connection eavesdropping and hijacking attacks [AUTH].  Although\n   advanced SASL authentication mechanisms can provide a lightweight\n   version of this service, TLS is complimentary to simple\n   authentication-only SASL mechanisms or deployed clear-text password\n   login commands.\n\n   Many sites have a high investment in authentication infrastructure\n   (e.g., a large database of a one-way-function applied to user\n   passwords), so a privacy layer which is not tightly bound to user\n   authentication can protect against network eavesdropping attacks\n   without requiring a new authentication infrastructure and/or forcing\n   all users to change their password.  Recognizing that such sites will\n   desire simple password authentication in combination with TLS\n   encryption, this specification defines the PLAIN SASL mechanism for\n   use with protocols which lack a simple password authentication\n   command such as ACAP and SMTP.  (Note there is a separate RFC for the\n   STARTTLS command in SMTP [SMTPTLS].)\n\n   There is a strong desire in the IETF to eliminate the transmission of\n   clear-text passwords over unencrypted channels.  While SASL can be\n   used for this purpose, TLS provides an additional tool with different\n   deployability characteristics.  A server supporting both TLS with\n\n\n\n\nNewman                      Standards Track                     [Page 1]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n   simple passwords and a challenge/response SASL mechanism is likely to\n   interoperate with a wide variety of clients without resorting to\n   unencrypted clear-text passwords.\n\n   The STARTTLS command rectifies a number of the problems with using a\n   separate port for a \"secure\" protocol variant.  Some of these are\n   mentioned in section 7.\n\n1.1. Conventions Used in this Document\n\n   The key words \"REQUIRED\", \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\",\n   \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as\n   described in \"Key words for use in RFCs to Indicate Requirement\n   Levels\" [KEYWORDS].\n\n   Terms related to authentication are defined in \"On Internet\n   Authentication\" [AUTH].\n\n   Formal syntax is defined using ABNF [ABNF].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n2. Basic Interoperability and Security Requirements\n\n   The following requirements apply to all implementations of the\n   STARTTLS extension for IMAP, POP3 and ACAP.\n\n2.1. Cipher Suite Requirements\n\n   Implementation of the TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA [TLS] cipher\n   suite is REQUIRED.  This is important as it assures that any two\n   compliant implementations can be configured to interoperate.\n\n   All other cipher suites are OPTIONAL.\n\n2.2. Privacy Operational Mode Security Requirements\n\n   Both clients and servers SHOULD have a privacy operational mode which\n   refuses authentication unless successful activation of an encryption\n   layer (such as that provided by TLS) occurs prior to or at the time\n   of authentication and which will terminate the connection if that\n   encryption layer is deactivated.  Implementations are encouraged to\n   have flexability with respect to the minimal encryption strength or\n   cipher suites permitted.  A minimalist approach to this\n   recommendation would be an operational mode where the\n   TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA cipher suite is mandatory prior to\n   permitting authentication.\n\n\n\nNewman                      Standards Track                     [Page 2]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n   Clients MAY have an operational mode which uses encryption only when\n   it is advertised by the server, but authentication continues\n   regardless.  For backwards compatibility, servers SHOULD have an\n   operational mode where only the authentication mechanisms required by\n   the relevant base protocol specification are needed to successfully\n   authenticate.\n\n2.3. Clear-Text Password Requirements\n\n   Clients and servers which implement STARTTLS MUST be configurable to\n   refuse all clear-text login commands or mechanisms (including both\n   standards-track and nonstandard mechanisms) unless an encryption\n   layer of adequate strength is active.  Servers which allow\n   unencrypted clear-text logins SHOULD be configurable to refuse\n   clear-text logins both for the entire server, and on a per-user\n   basis.\n\n2.4. Server Identity Check\n\n   During the TLS negotiation, the client MUST check its understanding\n   of the server hostname against the server's identity as presented in\n   the server Certificate message, in order to prevent man-in-the-middle\n   attacks.  Matching is performed according to these rules:\n\n   - The client MUST use the server hostname it used to open the\n     connection as the value to compare against the server name as\n     expressed in the server certificate.  The client MUST NOT use any\n     form of the server hostname derived from an insecure remote source\n     (e.g., insecure DNS lookup).  CNAME canonicalization is not done.\n\n   - If a subjectAltName extension of type dNSName is present in the\n     certificate, it SHOULD be used as the source of the server's\n     identity.\n\n   - Matching is case-insensitive.\n\n   - A \"*\" wildcard character MAY be used as the left-most name\n     component in the certificate.  For example, *.example.com would\n     match a.example.com, foo.example.com, etc. but would not match\n     example.com.\n\n   - If the certificate contains multiple names (e.g. more than one\n     dNSName field), then a match with any one of the fields is\n     considered acceptable.\n\n   If the match fails, the client SHOULD either ask for explicit user\n   confirmation, or terminate the connection and indicate the server's\n   identity is suspect.\n\n\n\nNewman                      Standards Track                     [Page 3]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n2.5. TLS Security Policy Check\n\n   Both the client and server MUST check the result of the STARTTLS\n   command and subsequent TLS negotiation to see whether acceptable\n   authentication or privacy was achieved.  Ignoring this step\n   completely invalidates using TLS for security.  The decision about\n   whether acceptable authentication or privacy was achieved is made\n   locally, is implementation-dependent, and is beyond the scope of this\n   document.\n\n3. IMAP STARTTLS extension\n\n   When the TLS extension is present in IMAP, \"STARTTLS\" is listed as a\n   capability in response to the CAPABILITY command.  This extension\n   adds a single command, \"STARTTLS\" to the IMAP protocol which is used\n   to begin a TLS negotiation.\n\n3.1. STARTTLS Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - begin TLS negotiation\n               BAD - command unknown or arguments invalid\n\n      A TLS negotiation begins immediately after the CRLF at the end of\n      the tagged OK response from the server.  Once a client issues a\n      STARTTLS command, it MUST NOT issue further commands until a\n      server response is seen and the TLS negotiation is complete.\n\n      The STARTTLS command is only valid in non-authenticated state.\n      The server remains in non-authenticated state, even if client\n      credentials are supplied during the TLS negotiation.  The SASL\n      [SASL] EXTERNAL mechanism MAY be used to authenticate once TLS\n      client credentials are successfully exchanged, but servers\n      supporting the STARTTLS command are not required to support the\n      EXTERNAL mechanism.\n\n      Once TLS has been started, the client MUST discard cached\n      information about server capabilities and SHOULD re-issue the\n      CAPABILITY command.  This is necessary to protect against\n      man-in-the-middle attacks which alter the capabilities list prior\n      to STARTTLS.  The server MAY advertise different capabilities\n      after STARTTLS.\n\n      The formal syntax for IMAP is amended as follows:\n\n\n\n\nNewman                      Standards Track                     [Page 4]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n        command_any   =/  \"STARTTLS\"\n\n   Example:    C: a001 CAPABILITY\n               S: * CAPABILITY IMAP4rev1 STARTTLS LOGINDISABLED\n               S: a001 OK CAPABILITY completed\n               C: a002 STARTTLS\n               S: a002 OK Begin TLS negotiation now\n               <TLS negotiation, further commands are under TLS layer>\n               C: a003 CAPABILITY\n               S: * CAPABILITY IMAP4rev1 AUTH=EXTERNAL\n               S: a003 OK CAPABILITY completed\n               C: a004 LOGIN joe password\n               S: a004 OK LOGIN completed\n\n3.2. IMAP LOGINDISABLED capability\n\n   The current IMAP protocol specification (RFC 2060) requires the\n   implementation of the LOGIN command which uses clear-text passwords.\n   Many sites may choose to disable this command unless encryption is\n   active for security reasons.  An IMAP server MAY advertise that the\n   LOGIN command is disabled by including the LOGINDISABLED capability\n   in the capability response.  Such a server will respond with a tagged\n   \"NO\" response to any attempt to use the LOGIN command.\n\n   An IMAP server which implements STARTTLS MUST implement support for\n   the LOGINDISABLED capability on unencrypted connections.\n\n   An IMAP client which complies with this specification MUST NOT issue\n   the LOGIN command if this capability is present.\n\n   This capability is useful to prevent clients compliant with this\n   specification from sending an unencrypted password in an environment\n   subject to passive attacks.  It has no impact on an environment\n   subject to active attacks as a man-in-the-middle attacker can remove\n   this capability.  Therefore this does not relieve clients of the need\n   to follow the privacy mode recommendation in section 2.2.\n\n   Servers advertising this capability will fail to interoperate with\n   many existing compliant IMAP clients and will be unable to prevent\n   those clients from disclosing the user's password.\n\n4. POP3 STARTTLS extension\n\n   The POP3 STARTTLS extension adds the STLS command to POP3 servers.\n   If this is implemented, the POP3 extension mechanism [POP3EXT] MUST\n   also be implemented to avoid the need for client probing of multiple\n   commands.  The capability name \"STLS\" indicates this command is\n   present and permitted in the current state.\n\n\n\nNewman                      Standards Track                     [Page 5]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n      STLS\n\n         Arguments: none\n\n         Restrictions:\n             Only permitted in AUTHORIZATION state.\n\n         Discussion:\n             A TLS negotiation begins immediately after the CRLF at the\n             end of the +OK response from the server.  A -ERR response\n             MAY result if a security layer is already active.  Once a\n             client issues a STLS command, it MUST NOT issue further\n             commands until a server response is seen and the TLS\n             negotiation is complete.\n\n             The STLS command is only permitted in AUTHORIZATION state\n             and the server remains in AUTHORIZATION state, even if\n             client credentials are supplied during the TLS negotiation.\n             The AUTH command [POP-AUTH] with the EXTERNAL mechanism\n             [SASL] MAY be used to authenticate once TLS client\n             credentials are successfully exchanged, but servers\n             supporting the STLS command are not required to support the\n             EXTERNAL mechanism.\n\n             Once TLS has been started, the client MUST discard cached\n             information about server capabilities and SHOULD re-issue\n             the CAPA command.  This is necessary to protect against\n             man-in-the-middle attacks which alter the capabilities list\n             prior to STLS.  The server MAY advertise different\n             capabilities after STLS.\n\n         Possible Responses:\n             +OK -ERR\n\n         Examples:\n             C: STLS\n             S: +OK Begin TLS negotiation\n             <TLS negotiation, further commands are under TLS layer>\n               ...\n             C: STLS\n             S: -ERR Command not permitted when TLS active\n\n\n\n\n\n\n\n\n\n\nNewman                      Standards Track                     [Page 6]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n5. ACAP STARTTLS extension\n\n   When the TLS extension is present in ACAP, \"STARTTLS\" is listed as a\n   capability in the ACAP greeting.  No arguments to this capability are\n   defined at this time.  This extension adds a single command,\n   \"STARTTLS\" to the ACAP protocol which is used to begin a TLS\n   negotiation.\n\n5.1. STARTTLS Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - begin TLS negotiation\n               BAD - command unknown or arguments invalid\n\n      A TLS negotiation begins immediately after the CRLF at the end of\n      the tagged OK response from the server.  Once a client issues a\n      STARTTLS command, it MUST NOT issue further commands until a\n      server response is seen and the TLS negotiation is complete.\n\n      The STARTTLS command is only valid in non-authenticated state.\n      The server remains in non-authenticated state, even if client\n      credentials are supplied during the TLS negotiation.  The SASL\n      [SASL] EXTERNAL mechanism MAY be used to authenticate once TLS\n      client credentials are successfully exchanged, but servers\n      supporting the STARTTLS command are not required to support the\n      EXTERNAL mechanism.\n\n      After the TLS layer is established, the server MUST re-issue an\n      untagged ACAP greeting.  This is necessary to protect against\n      man-in-the-middle attacks which alter the capabilities list prior\n      to STARTTLS.  The client MUST discard cached capability\n      information and replace it with the information from the new ACAP\n      greeting.  The server MAY advertise different capabilities after\n      STARTTLS.\n\n      The formal syntax for ACAP is amended as follows:\n\n        command_any   =/  \"STARTTLS\"\n\n   Example:    S: * ACAP (SASL \"CRAM-MD5\") (STARTTLS)\n               C: a002 STARTTLS\n               S: a002 OK \"Begin TLS negotiation now\"\n               <TLS negotiation, further commands are under TLS layer>\n               S: * ACAP (SASL \"CRAM-MD5\" \"PLAIN\" \"EXTERNAL\")\n\n\n\n\nNewman                      Standards Track                     [Page 7]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n6. PLAIN SASL mechanism\n\n   Clear-text passwords are simple, interoperate with almost all\n   existing operating system authentication databases, and are useful\n   for a smooth transition to a more secure password-based\n   authentication mechanism.  The drawback is that they are unacceptable\n   for use over an unencrypted network connection.\n\n   This defines the \"PLAIN\" SASL mechanism for use with ACAP and other\n   protocols with no clear-text login command.  The PLAIN SASL mechanism\n   MUST NOT be advertised or used unless a strong encryption layer (such\n   as the provided by TLS) is active or backwards compatibility dictates\n   otherwise.\n\n   The mechanism consists of a single message from the client to the\n   server.  The client sends the authorization identity (identity to\n   login as), followed by a US-ASCII NUL character, followed by the\n   authentication identity (identity whose password will be used),\n   followed by a US-ASCII NUL character, followed by the clear-text\n   password.  The client may leave the authorization identity empty to\n   indicate that it is the same as the authentication identity.\n\n   The server will verify the authentication identity and password with\n   the system authentication database and verify that the authentication\n   credentials permit the client to login as the authorization identity.\n   If both steps succeed, the user is logged in.\n\n   The server MAY also use the password to initialize any new\n   authentication database, such as one suitable for CRAM-MD5\n   [CRAM-MD5].\n\n   Non-US-ASCII characters are permitted as long as they are represented\n   in UTF-8 [UTF-8].  Use of non-visible characters or characters which\n   a user may be unable to enter on some keyboards is discouraged.\n\n   The formal grammar for the client message using Augmented BNF [ABNF]\n   follows.\n\n   message         = [authorize-id] NUL authenticate-id NUL password\n   authenticate-id = 1*UTF8-SAFE      ; MUST accept up to 255 octets\n   authorize-id    = 1*UTF8-SAFE      ; MUST accept up to 255 octets\n   password        = 1*UTF8-SAFE      ; MUST accept up to 255 octets\n   NUL             = %x00\n   UTF8-SAFE       = %x01-09 / %x0B-0C / %x0E-7F / UTF8-2 /\n                     UTF8-3 / UTF8-4 / UTF8-5 / UTF8-6\n   UTF8-1          = %x80-BF\n   UTF8-2          = %xC0-DF UTF8-1\n   UTF8-3          = %xE0-EF 2UTF8-1\n\n\n\nNewman                      Standards Track                     [Page 8]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n   UTF8-4          = %xF0-F7 3UTF8-1\n   UTF8-5          = %xF8-FB 4UTF8-1\n   UTF8-6          = %xFC-FD 5UTF8-1\n\n   Here is an example of how this might be used to initialize a CRAM-MD5\n   authentication database for ACAP:\n\n   Example:    S: * ACAP (SASL \"CRAM-MD5\") (STARTTLS)\n               C: a001 AUTHENTICATE \"CRAM-MD5\"\n               S: + \"<1896.697170952@postoffice.reston.mci.net>\"\n               C: \"tim b913a602c7eda7a495b4e6e7334d3890\"\n               S: a001 NO (TRANSITION-NEEDED)\n                  \"Please change your password, or use TLS to login\"\n               C: a002 STARTTLS\n               S: a002 OK \"Begin TLS negotiation now\"\n               <TLS negotiation, further commands are under TLS layer>\n               S: * ACAP (SASL \"CRAM-MD5\" \"PLAIN\" \"EXTERNAL\")\n               C: a003 AUTHENTICATE \"PLAIN\" {21+}\n               C: <NUL>tim<NUL>tanstaaftanstaaf\n               S: a003 OK CRAM-MD5 password initialized\n\n   Note: In this example, <NUL> represents a single ASCII NUL octet.\n\n7. imaps and pop3s ports\n\n   Separate \"imaps\" and \"pop3s\" ports were registered for use with SSL.\n   Use of these ports is discouraged in favor of the STARTTLS or STLS\n   commands.\n\n   A number of problems have been observed with separate ports for\n   \"secure\" variants of protocols.  This is an attempt to enumerate some\n   of those problems.\n\n   - Separate ports lead to a separate URL scheme which intrudes into\n     the user interface in inappropriate ways.  For example, many web\n     pages use language like \"click here if your browser supports SSL.\"\n     This is a decision the browser is often more capable of making than\n     the user.\n\n   - Separate ports imply a model of either \"secure\" or \"not secure.\"\n     This can be misleading in a number of ways.  First, the \"secure\"\n     port may not in fact be acceptably secure as an export-crippled\n     cipher suite might be in use.  This can mislead users into a false\n     sense of security.  Second, the normal port might in fact be\n     secured by using a SASL mechanism which includes a security layer.\n     Thus the separate port distinction makes the complex topic of\n     security policy even more confusing.  One common result of this\n     confusion is that firewall administrators are often misled into\n\n\n\nNewman                      Standards Track                     [Page 9]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n     permitting the \"secure\" port and blocking the standard port.  This\n     could be a poor choice given the common use of SSL with a 40-bit\n     key encryption layer and plain-text password authentication is less\n     secure than strong SASL mechanisms such as GSSAPI with Kerberos 5.\n\n   - Use of separate ports for SSL has caused clients to implement only\n     two security policies: use SSL or don't use SSL.  The desirable\n     security policy \"use TLS when available\" would be cumbersome with\n     the separate port model, but is simple with STARTTLS.\n\n   - Port numbers are a limited resource.  While they are not yet in\n     short supply, it is unwise to set a precedent that could double (or\n     worse) the speed of their consumption.\n\n\n8. IANA Considerations\n\n   This constitutes registration of the \"STARTTLS\" and \"LOGINDISABLED\"\n   IMAP capabilities as required by section 7.2.1 of RFC 2060 [IMAP].\n\n   The registration for the POP3 \"STLS\" capability follows:\n\n   CAPA tag:                   STLS\n   Arguments:                  none\n   Added commands:             STLS\n   Standard commands affected: May enable USER/PASS as a side-effect.\n     CAPA command SHOULD be re-issued after successful completion.\n   Announced states/Valid states: AUTHORIZATION state only.\n   Specification reference:    this memo\n\n   The registration for the ACAP \"STARTTLS\" capability follows:\n\n   Capability name:            STARTTLS\n   Capability keyword:         STARTTLS\n   Capability arguments:       none\n   Published Specification(s): this memo\n   Person and email address for further information:\n       see author's address section below\n\n   The registration for the PLAIN SASL mechanism follows:\n\n   SASL mechanism name:        PLAIN\n   Security Considerations:    See section 9 of this memo\n   Published specification:    this memo\n   Person & email address to contact for further information:\n       see author's address section below\n   Intended usage:             COMMON\n   Author/Change controller:   see author's address section below\n\n\n\nNewman                      Standards Track                    [Page 10]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n9. Security Considerations\n\n   TLS only provides protection for data sent over a network connection.\n   Messages transferred over IMAP or POP3 are still available to server\n   administrators and usually subject to eavesdropping, tampering and\n   forgery when transmitted through SMTP or NNTP.  TLS is no substitute\n   for an end-to-end message security mechanism using MIME security\n   multiparts [MIME-SEC].\n\n   A man-in-the-middle attacker can remove STARTTLS from the capability\n   list or generate a failure response to the STARTTLS command.  In\n   order to detect such an attack, clients SHOULD warn the user when\n   session privacy is not active and/or be configurable to refuse to\n   proceed without an acceptable level of security.\n\n   A man-in-the-middle attacker can always cause a down-negotiation to\n   the weakest authentication mechanism or cipher suite available.  For\n   this reason, implementations SHOULD be configurable to refuse weak\n   mechanisms or cipher suites.\n\n   Any protocol interactions prior to the TLS handshake are performed in\n   the clear and can be modified by a man-in-the-middle attacker.  For\n   this reason, clients MUST discard cached information about server\n   capabilities advertised prior to the start of the TLS handshake.\n\n   Clients are encouraged to clearly indicate when the level of\n   encryption active is known to be vulnerable to attack using modern\n   hardware (such as encryption keys with 56 bits of entropy or less).\n\n   The LOGINDISABLED IMAP capability (discussed in section 3.2) only\n   reduces the potential for passive attacks, it provides no protection\n   against active attacks.  The responsibility remains with the client\n   to avoid sending a password over a vulnerable channel.\n\n   The PLAIN mechanism relies on the TLS encryption layer for security.\n   When used without TLS, it is vulnerable to a common network\n   eavesdropping attack.  Therefore PLAIN MUST NOT be advertised or used\n   unless a suitable TLS encryption layer is active or backwards\n   compatibility dictates otherwise.\n\n   When the PLAIN mechanism is used, the server gains the ability to\n   impersonate the user to all services with the same password\n   regardless of any encryption provided by TLS or other network privacy\n   mechanisms.  While many other authentication mechanisms have similar\n   weaknesses, stronger SASL mechanisms such as Kerberos address this\n   issue.  Clients are encouraged to have an operational mode where all\n   mechanisms which are likely to reveal the user's password to the\n   server are disabled.\n\n\n\nNewman                      Standards Track                    [Page 11]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n   The security considerations for TLS apply to STARTTLS and the\n   security considerations for SASL apply to the PLAIN mechanism.\n   Additional security requirements are discussed in section 2.\n\n10. References\n\n   [ABNF]     Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 2234, November 1997.\n\n   [ACAP]     Newman, C. and J. Myers, \"ACAP -- Application\n              Configuration Access Protocol\", RFC 2244, November 1997.\n\n   [AUTH]     Haller, N. and R. Atkinson, \"On Internet Authentication\",\n              RFC 1704, October 1994.\n\n   [CRAM-MD5] Klensin, J., Catoe, R. and P. Krumviede, \"IMAP/POP\n              AUTHorize Extension for Simple Challenge/Response\", RFC\n              2195, September 1997.\n\n   [IMAP]     Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 2060, December 1996.\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [MIME-SEC] Galvin, J., Murphy, S., Crocker, S. and N. Freed,\n              \"Security Multiparts for MIME: Multipart/Signed and\n              Multipart/Encrypted\", RFC 1847, October 1995.\n\n   [POP3]     Myers, J. and M. Rose, \"Post Office Protocol - Version 3\",\n              STD 53, RFC 1939, May 1996.\n\n   [POP3EXT]  Gellens, R., Newman, C. and L. Lundblade, \"POP3 Extension\n              Mechanism\", RFC 2449, November 1998.\n\n   [POP-AUTH] Myers, J., \"POP3 AUTHentication command\", RFC 1734,\n              December 1994.\n\n   [SASL]     Myers, J., \"Simple Authentication and Security Layer\n              (SASL)\", RFC 2222, October 1997.\n\n   [SMTPTLS]  Hoffman, P., \"SMTP Service Extension for Secure SMTP over\n              TLS\", RFC 2487, January 1999.\n\n   [TLS]      Dierks, T. and C. Allen, \"The TLS Protocol Version 1.0\",\n              RFC 2246, January 1999.\n\n\n\n\n\nNewman                      Standards Track                    [Page 12]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n   [UTF-8]    Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", RFC 2279, January 1998.\n\n\n11. Author's Address\n\n   Chris Newman\n   Innosoft International, Inc.\n   1050 Lakes Drive\n   West Covina, CA 91790 USA\n\n   EMail: chris.newman@innosoft.com\n\n\nA. Appendix -- Compliance Checklist\n\n   An implementation is not compliant if it fails to satisfy one or more\n   of the MUST requirements for the protocols it implements.  An\n   implementation that satisfies all the MUST and all the SHOULD\n   requirements for its protocols is said to be \"unconditionally\n   compliant\"; one that satisfies all the MUST requirements but not all\n   the SHOULD requirements for its protocols is said to be\n   \"conditionally compliant\".\n\n   Rules                                                 Section\n   -----                                                 -------\n   Mandatory-to-implement Cipher Suite                      2.1\n   SHOULD have mode where encryption required               2.2\n   server SHOULD have mode where TLS not required           2.2\n   MUST be configurable to refuse all clear-text login\n     commands or mechanisms                                 2.3\n   server SHOULD be configurable to refuse clear-text\n     login commands on entire server and on per-user basis  2.3\n   client MUST check server identity                        2.4\n   client MUST use hostname used to open connection         2.4\n   client MUST NOT use hostname from insecure remote lookup 2.4\n   client SHOULD support subjectAltName of dNSName type     2.4\n   client SHOULD ask for confirmation or terminate on fail  2.4\n   MUST check result of STARTTLS for acceptable privacy     2.5\n   client MUST NOT issue commands after STARTTLS\n      until server response and negotiation done        3.1,4,5.1\n   client MUST discard cached information             3.1,4,5.1,9\n   client SHOULD re-issue CAPABILITY/CAPA command       3.1,4\n   IMAP server with STARTTLS MUST implement LOGINDISABLED   3.2\n   IMAP client MUST NOT issue LOGIN if LOGINDISABLED        3.2\n   POP server MUST implement POP3 extensions                4\n   ACAP server MUST re-issue ACAP greeting                  5.1\n\n\n\n\nNewman                      Standards Track                    [Page 13]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\n   client SHOULD warn when session privacy not active and/or\n     refuse to proceed without acceptable security level    9\n   SHOULD be configurable to refuse weak mechanisms or\n     cipher suites                                          9\n\n   The PLAIN mechanism is an optional part of this specification.\n   However if it is implemented the following rules apply:\n\n   Rules                                                 Section\n   -----                                                 -------\n   MUST NOT use PLAIN unless strong encryption active\n     or backwards compatibility dictates otherwise         6,9\n   MUST use UTF-8 encoding for characters in PLAIN          6\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                      Standards Track                    [Page 14]\n\f\nRFC 2595           Using TLS with IMAP, POP3 and ACAP          June 1999\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                      Standards Track                    [Page 15]\n\f\n"
  },
  {
    "path": "rfc/rfc2683.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           B. Leiba\nRequest for Comments: 2683               IBM T.J. Watson Research Center\nCategory: Informational                                   September 1999\n\n\n                  IMAP4 Implementation Recommendations\n\nStatus of this Memo\n\n   This memo provides information for the Internet community.  It does\n   not specify an Internet standard of any kind.  Distribution of this\n   memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n1. Abstract\n\n   The IMAP4 specification [RFC-2060] describes a rich protocol for use\n   in building clients and servers for storage, retrieval, and\n   manipulation of electronic mail.  Because the protocol is so rich and\n   has so many implementation choices, there are often trade-offs that\n   must be made and issues that must be considered when designing such\n   clients and servers.  This document attempts to outline these issues\n   and to make recommendations in order to make the end products as\n   interoperable as possible.\n\n2. Conventions used in this document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The words \"must\", \"must not\", \"should\", \"should not\", and \"may\" are\n   used with specific meaning in this document; since their meaning is\n   somewhat different from that specified in RFC 2119, we do not put\n   them in all caps here.  Their meaning is as follows:\n\n   must --       This word means that the action described is necessary\n                 to ensure interoperability.  The recommendation should\n                 not be ignored.\n   must not --   This phrase means that the action described will be\n                 almost certain to hurt interoperability.  The\n                 recommendation should not be ignored.\n\n\n\n\n\n\n\nLeiba                        Informational                      [Page 1]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   should --     This word means that the action described is strongly\n                 recommended and will enhance interoperability or\n                 usability.  The recommendation should not be ignored\n                 without careful consideration.\n   should not -- This phrase means that the action described is strongly\n                 recommended against, and might hurt interoperability or\n                 usability.  The recommendation should not be ignored\n                 without careful consideration.\n   may --        This word means that the action described is an\n                 acceptable implementation choice.  No specific\n                 recommendation is implied; this word is used to point\n                 out a choice that might not be obvious, or to let\n                 implementors know what choices have been made by\n                 existing implementations.\n\n3. Interoperability Issues and Recommendations\n\n3.1.   Accessibility\n\n   This section describes the issues related to access to servers and\n   server resources.  Concerns here include data sharing and maintenance\n   of client/server connections.\n\n3.1.1. Multiple Accesses of the Same Mailbox\n\n   One strong point of IMAP4 is that, unlike POP3, it allows for\n   multiple simultaneous access to a single mailbox.  A user can, thus,\n   read mail from a client at home while the client in the office is\n   still connected; or the help desk staff can all work out of the same\n   inbox, all seeing the same pool of questions.  An important point\n   about this capability, though is that NO SERVER IS GUARANTEED TO\n   SUPPORT THIS.  If you are selecting an IMAP server and this facility\n   is important to you, be sure that the server you choose to install,\n   in the configuration you choose to use, supports it.\n\n   If you are designing a client, you must not assume that you can\n   access the same mailbox more than once at a time.  That means\n\n   1. you must handle gracefully the failure of a SELECT command if the\n      server refuses the second SELECT,\n   2. you must handle reasonably the severing of your connection (see\n      \"Severed Connections\", below) if the server chooses to allow the\n      second SELECT by forcing the first off,\n   3. you must avoid making multiple connections to the same mailbox in\n      your own client (for load balancing or other such reasons), and\n   4. you must avoid using the STATUS command on a mailbox that you have\n      selected (with some server implementations the STATUS command has\n      the same problems with multiple access as do the SELECT and\n\n\n\nLeiba                        Informational                      [Page 2]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n      EXAMINE commands).\n\n   A further note about STATUS: The STATUS command is sometimes used to\n   check a non-selected mailbox for new mail.  This mechanism must not\n   be used to check for new mail in the selected mailbox; section 5.2 of\n   [RFC-2060] specifically forbids this in its last paragraph.  Further,\n   since STATUS takes a mailbox name it is an independent operation, not\n   operating on the selected mailbox.  Because of this, the information\n   it returns is not necessarily in synchronization with the selected\n   mailbox state.\n\n3.1.2. Severed Connections\n\n   The client/server connection may be severed for one of three reasons:\n   the client severs the connection, the server severs the connection,\n   or the connection is severed by outside forces beyond the control of\n   the client and the server (a telephone line drops, for example).\n   Clients and servers must both deal with these situations.\n\n   When the client wants to sever a connection, it's usually because it\n   has finished the work it needed to do on that connection.  The client\n   should send a LOGOUT command, wait for the tagged response, and then\n   close the socket.  But note that, while this is what's intended in\n   the protocol design, there isn't universal agreement here.  Some\n   contend that sending the LOGOUT and waiting for the two responses\n   (untagged BYE and tagged OK) is wasteful and unnecessary, and that\n   the client can simply close the socket.  The server should interpret\n   the closed socket as a log out by the client.  The counterargument is\n   that it's useful from the standpoint of cleanup, problem\n   determination, and the like, to have an explicit client log out,\n   because otherwise there is no way for the server to tell the\n   difference between \"closed socket because of log out\" and \"closed\n   socket because communication was disrupted\".  If there is a\n   client/server interaction problem, a client which routinely\n   terminates a session by breaking the connection without a LOGOUT will\n   make it much more difficult to determine the problem.\n\n   Because of this disagreement, server designers must be aware that\n   some clients might close the socket without sending a LOGOUT.  In any\n   case, whether or not a LOGOUT was sent, the server should not\n   implicitly expunge any messages from the selected mailbox.  If a\n   client wants the server to do so, it must send a CLOSE or EXPUNGE\n   command explicitly.\n\n   When the server wants to sever a connection it's usually due to an\n   inactivity timeout or is because a situation has arisen that has\n   changed the state of the mail store in a way that the server can not\n   communicate to the client.  The server should send an untagged BYE\n\n\n\nLeiba                        Informational                      [Page 3]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   response to the client and then close the socket.  Sending an\n   untagged BYE response before severing allows the server to send a\n   human-readable explanation of the problem to the client, which the\n   client may then log, display to the user, or both (see section 7.1.5\n   of [RFC-2060]).\n\n   Regarding inactivity timeouts, there is some controversy.  Unlike\n   POP, for which the design is for a client to connect, retrieve mail,\n   and log out, IMAP's design encourages long-lived (and mostly\n   inactive) client/server sessions.  As the number of users grows, this\n   can use up a lot of server resources, especially with clients that\n   are designed to maintain sessions for mailboxes that the user has\n   finished accessing.  To alleviate this, a server may implement an\n   inactivity timeout, unilaterally closing a session (after first\n   sending an untagged BYE, as noted above).  Some server operators have\n   reported dramatic improvements in server performance after doing\n   this.  As specified in [RFC-2060], if such a timeout is done it must\n   not be until at least 30 minutes of inactivity.  The reason for this\n   specification is to prevent clients from sending commands (such as\n   NOOP) to the server at frequent intervals simply to avert a too-early\n   timeout.  If the client knows that the server may not time out the\n   session for at least 30 minutes, then the client need not poll at\n   intervals more frequent than, say, 25 minutes.\n\n3.2.   Scaling\n\n   IMAP4 has many features that allow for scalability, as mail stores\n   become larger and more numerous.  Large numbers of users, mailboxes,\n   and messages, and very large messages require thought to handle\n   efficiently.  This document will not address the administrative\n   issues involved in large numbers of users, but we will look at the\n   other items.\n\n3.2.1. Flood Control\n\n   There are three situations when a client can make a request that will\n   result in a very large response - too large for the client reasonably\n   to deal with: there are a great many mailboxes available, there are a\n   great many messages in the selected mailbox, or there is a very large\n   message part.  The danger here is that the end user will be stuck\n   waiting while the server sends (and the client processes) an enormous\n   response.  In all of these cases there are things a client can do to\n   reduce that danger.\n\n   There is also the case where a client can flood a server, by sending\n   an arbitratily long command.  We'll discuss that issue, too, in this\n   section.\n\n\n\n\nLeiba                        Informational                      [Page 4]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n3.2.1.1.  Listing Mailboxes\n\n   Some servers present Usenet newsgroups to IMAP users.  Newsgroups,\n   and other such hierarchical mailbox structures, can be very numerous\n   but may have only a few entries at the top level of hierarchy.  Also,\n   some servers are built against mail stores that can, unbeknownst to\n   the server, have circular hierarchies - that is, it's possible for\n   \"a/b/c/d\" to resolve to the same file structure as \"a\", which would\n   then mean that \"a/b/c/d/b\" is the same as \"a/b\", and the hierarchy\n   will never end.  The LIST response in this case will be unlimited.\n\n   Clients that will have trouble with this are those that use\n\n       C: 001 LIST \"\" *\n\n   to determine the mailbox list.  Because of this, clients should not\n   use an unqualified \"*\" that way in the LIST command.  A safer\n   approach is to list each level of hierarchy individually, allowing\n   the user to traverse the tree one limb at a time, thus:\n\n       C: 001 LIST \"\" %\n       S: * LIST () \"/\" Banana\n       S: * LIST ...etc...\n       S: 001 OK done\n\n   and then\n\n       C: 002 LIST \"\" Banana/%\n       S: * LIST () \"/\" Banana/Apple\n       S: * LIST ...etc...\n       S: 002 OK done\n\n   Using this technique the client's user interface can give the user\n   full flexibility without choking on the voluminous reply to \"LIST *\".\n\n   Of course, it is still possible that the reply to\n\n       C: 005 LIST \"\" alt.fan.celebrity.%\n\n   may be thousands of entries long, and there is, unfortunately,\n   nothing the client can do to protect itself from that.  This has not\n   yet been a notable problem.\n\n   Servers that may export circular hierarchies (any server that\n   directly presents a UNIX file system, for instance) should limit the\n   hierarchy depth to prevent unlimited LIST responses.  A suggested\n   depth limit is 20 hierarchy levels.\n\n\n\n\nLeiba                        Informational                      [Page 5]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n3.2.1.2.  Fetching the List of Messages\n\n   When a client selects a mailbox, it is given a count, in the untagged\n   EXISTS response, of the messages in the mailbox.  This number can be\n   very large.  In such a case it might be unwise to use\n\n       C: 004 FETCH 1:* ALL\n\n   to populate the user's view of the mailbox.  One good method to avoid\n   problems with this is to batch the requests, thus:\n\n       C: 004 FETCH 1:50 ALL\n       S: * 1 FETCH ...etc...\n       S: 004 OK done\n       C: 005 FETCH 51:100 ALL\n       S: * 51 FETCH ...etc...\n       S: 005 OK done\n       C: 006 FETCH 101:150 ALL\n       ...etc...\n\n   Using this method, another command, such as \"FETCH 6 BODY[1]\" can be\n   inserted as necessary, and the client will not have its access to the\n   server blocked by a storm of FETCH replies.  (Such a method could be\n   reversed to fetch the LAST 50 messages first, then the 50 prior to\n   that, and so on.)\n\n   As a smart extension of this, a well designed client, prepared for\n   very large mailboxes, will not automatically fetch data for all\n   messages AT ALL.  Rather, the client will populate the user's view\n   only as the user sees it, possibly pre-fetching selected information,\n   and only fetching other information as the user scrolls to it.  For\n   example, to select only those messages beginning with the first\n   unseen one:\n\n       C: 003 SELECT INBOX\n       S: * 10000 EXISTS\n       S: * 80 RECENT\n       S: * FLAGS (\\Answered \\Flagged \\Deleted \\Draft \\Seen)\n       S: * OK [UIDVALIDITY 824708485] UID validity status\n       S: * OK [UNSEEN 9921] First unseen message\n       S: 003 OK [READ-WRITE] SELECT completed\n       C: 004 FETCH 9921:* ALL\n       ... etc...\n\n   If the server does not return an OK [UNSEEN] response, the client may\n   use SEARCH UNSEEN to obtain that value.\n\n\n\n\n\nLeiba                        Informational                      [Page 6]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   This mechanism is good as a default presentation method, but only\n   works well if the default message order is acceptable.  A client may\n   want to present various sort orders to the user (by subject, by date\n   sent, by sender, and so on) and in that case (lacking a SORT\n   extension on the server side) the client WILL have to retrieve all\n   message descriptors.  A client that provides this service should not\n   do it by default and should inform the user of the costs of choosing\n   this option for large mailboxes.\n\n3.2.1.3.  Fetching a Large Body Part\n\n   The issue here is similar to the one for a list of messages.  In the\n   BODYSTRUCTURE response the client knows the size, in bytes, of the\n   body part it plans to fetch.  Suppose this is a 70 MB video clip. The\n   client can use partial fetches to retrieve the body part in pieces,\n   avoiding the problem of an uninterruptible 70 MB literal coming back\n   from the server:\n\n       C: 022 FETCH 3 BODY[1]<0.20000>\n       S: * 3 FETCH (FLAGS(\\Seen) BODY[1]<0> {20000}\n       S: ...data...)\n       S: 022 OK done\n       C: 023 FETCH 3 BODY[1]<20001.20000>\n       S: * 3 FETCH (BODY[1]<20001> {20000}\n       S: ...data...)\n       S: 023 OK done\n       C: 024 FETCH 3 BODY[1]<40001.20000>\n       ...etc...\n\n3.2.1.4.  BODYSTRUCTURE vs. Entire Messages\n\n   Because FETCH BODYSTRUCTURE is necessary in order to determine the\n   number of body parts, and, thus, whether a message has \"attachments\",\n   clients often use FETCH FULL as their normal method of populating the\n   user's view of a mailbox.  The benefit is that the client can display\n   a paperclip icon or some such indication along with the normal\n   message summary.  However, this comes at a significant cost with some\n   server configurations.  The parsing needed to generate the FETCH\n   BODYSTRUCTURE response may be time-consuming compared with that\n   needed for FETCH ENVELOPE.  The client developer should consider this\n   issue when deciding whether the ability to add a paperclip icon is\n   worth the tradeoff in performance, especially with large mailboxes.\n\n   Some clients, rather than using FETCH BODYSTRUCTURE, use FETCH BODY[]\n   (or the equivalent FETCH RFC822) to retrieve the entire message.\n   They then do the MIME parsing in the client.  This may give the\n   client slightly more flexibility in some areas (access, for instance,\n   to header fields that aren't returned in the BODYSTRUCTURE and\n\n\n\nLeiba                        Informational                      [Page 7]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   ENVELOPE responses), but it can cause severe performance problems by\n   forcing the transfer of all body parts when the user might only want\n   to see some of them - a user logged on by modem and reading a small\n   text message with a large ZIP file attached may prefer to read the\n   text only and save the ZIP file for later.  Therefore, a client\n   should not normally retrieve entire messages and should retrieve\n   message body parts selectively.\n\n3.2.1.5.  Long Command Lines\n\n   A client can wind up building a very long command line in an effort to\n   try to be efficient about requesting information from a server.  This\n   can typically happen when a client builds a message set from selected\n   messages and doesn't recognise that contiguous blocks of messages may\n   be group in a range.  Suppose a user selects all 10,000 messages in a\n   large mailbox and then unselects message 287.  The client could build\n   that message set as \"1:286,288:10000\", but a client that doesn't\n   handle that might try to enumerate each message individually and build\n   \"1,2,3,4, [and so on] ,9999,10000\".  Adding that to the fetch command\n   results in a command line that's almost 49,000 octets long, and,\n   clearly, one can construct a command line that's even longer.\n\n   A client should limit the length of the command lines it generates to\n   approximately 1000 octets (including all quoted strings but not\n   including literals).  If the client is unable to group things into\n   ranges so that the command line is within that length, it should\n   split the request into multiple commands.  The client should use\n   literals instead of long quoted strings, in order to keep the command\n   length down.\n\n   For its part, a server should allow for a command line of at least\n   8000 octets.  This provides plenty of leeway for accepting reasonable\n   length commands from clients.  The server should send a BAD response\n   to a command that does not end within the server's maximum accepted\n   command length.\n\n3.2.2. Subscriptions\n\n   The client isn't the only entity that can get flooded: the end user,\n   too, may need some flood control.  The IMAP4 protocol provides such\n   control in the form of subscriptions.  Most servers support the\n   SUBSCRIBE, UNSUBSCRIBE, and LSUB commands, and many users choose to\n   narrow down a large list of available mailboxes by subscribing to the\n   ones that they usually want to see.  Clients, with this in mind,\n   should give the user a way to see only subscribed mailboxes.  A\n   client that never uses the LSUB command takes a significant usability\n   feature away from the user.  Of course, the client would not want to\n   hide the LIST command completely; the user needs to have a way to\n\n\n\nLeiba                        Informational                      [Page 8]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   choose between LIST and LSUB.  The usual way to do this is to provide\n   a setting like \"show which mailboxes?:  [] all  [] subscribed only\".\n\n3.2.3. Searching\n\n   IMAP SEARCH commands can become particularly troublesome (that is,\n   slow) on mailboxes containing a large number of messages.  So let's\n   put a few things in perspective in that regard.\n\n   The flag searches should be fast.  The flag searches (ALL, [UN]SEEN,\n   [UN]ANSWERED, [UN]DELETED, [UN]DRAFT, [UN]FLAGGED, NEW, OLD, RECENT)\n   are known to be used by clients for the client's own use (for\n   instance, some clients use \"SEARCH UNSEEN\" to find unseen mail and\n   \"SEARCH DELETED\" to warn the user before expunging messages).\n\n   Other searches, particularly the text searches (HEADER, TEXT, BODY)\n   are initiated by the user, rather than by the client itself, and\n   somewhat slower performance can be tolerated, since the user is aware\n   that the search is being done (and is probably aware that it might be\n   time-consuming).  A smart server might use dynamic indexing to speed\n   commonly used text searches.\n\n   The client may allow other commands to be sent to the server while a\n   SEARCH is in progress, but at the time of this writing there is\n   little or no server support for parallel processing of multiple\n   commands in the same session (and see \"Multiple Accesses of the Same\n   Mailbox\" above for a description of the dangers of trying to work\n   around this by doing your SEARCH in another session).\n\n   Another word about text searches: some servers, built on database\n   back-ends with indexed search capabilities, may return search results\n   that do not match the IMAP spec's \"case-insensitive substring\"\n   requirements.  While these servers are in violation of the protocol,\n   there is little harm in the violation as long as the search results\n   are used only in response to a user's request.  Still, developers of\n   such servers should be aware that they ARE violating the protocol,\n   should think carefully about that behaviour, and must be certain that\n   their servers respond accurately to the flag searches for the reasons\n   outlined above.\n\n   In addition, servers should support CHARSET UTF-8 [UTF-8] in\n   searches.\n\n\n\n\n\n\n\n\n\nLeiba                        Informational                      [Page 9]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n3.3    Avoiding Invalid Requests\n\n   IMAP4 provides ways for a server to tell a client in advance what is\n   and isn't permitted in some circumstances.  Clients should use these\n   features to avoid sending requests that a well designed client would\n   know to be invalid.  This section explains this in more detail.\n\n3.3.1. The CAPABILITY Command\n\n   All IMAP4 clients should use the CAPABILITY command to determine what\n   version of IMAP and what optional features a server supports.  The\n   client should not send IMAP4rev1 commands and arguments to a server\n   that does not advertize IMAP4rev1 in its CAPABILITY response.\n   Similarly, the client should not send IMAP4 commands that no longer\n   exist in IMAP4rev1 to a server that does not advertize IMAP4 in its\n   CAPABILITY response.  An IMAP4rev1 server is NOT required to support\n   obsolete IMAP4 or IMAP2bis commands (though some do; do not let this\n   fact lull you into thinking that it's valid to send such commands to\n   an IMAP4rev1 server).\n\n   A client should not send commands to probe for the existance of\n   certain extensions.  All standard and standards-track extensions\n   include CAPABILITY tokens indicating their presense.  All private and\n   experimental extensions should do the same, and clients that take\n   advantage of them should use the CAPABILITY response to determine\n   whether they may be used or not.\n\n3.3.2. Don't Do What the Server Says You Can't\n\n   In many cases, the server, in response to a command, will tell the\n   client something about what can and can't be done with a particular\n   mailbox.  The client should pay attention to this information and\n   should not try to do things that it's been told it can't do.\n\n   Examples:\n\n   *  Do not try to SELECT a mailbox that has the \\Noselect flag set.\n   *  Do not try to CREATE a sub-mailbox in a mailbox that has the\n      \\Noinferiors flag set.\n   *  Do not respond to a failing COPY or APPEND command by trying to\n      CREATE the target mailbox if the server does not respond with a\n      [TRYCREATE] response code.\n   *  Do not try to expunge a mailbox that has been selected with the\n      [READ-ONLY] response code.\n\n\n\n\n\n\n\nLeiba                        Informational                     [Page 10]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n3.4.   Miscellaneous Protocol Considerations\n\n   We describe here a number of important protocol-related issues, the\n   misunderstanding of which has caused significant interoperability\n   problems in IMAP4 implementations.  One general item is that every\n   implementer should be certain to take note of and to understand\n   section 2.2.2 and the preamble to section 7 of the IMAP4rev1 spec\n   [RFC-2060].\n\n3.4.1. Well Formed Protocol\n\n   We cannot stress enough the importance of adhering strictly to the\n   protocol grammar.  The specification of the protocol is quite rigid;\n   do not assume that you can insert blank space for \"readability\" if\n   none is called for.  Keep in mind that there are parsers out there\n   that will crash if there are protocol errors.  There are clients that\n   will report every parser burp to the user.  And in any case,\n   information that cannot be parsed is information that is lost.  Be\n   careful in your protocol generation.  And see \"A Word About Testing\",\n   below.\n\n   In particular, note that the string in the INTERNALDATE response is\n   NOT an RFC-822 date string - that is, it is not in the same format as\n   the first string in the ENVELOPE response.  Since most clients will,\n   in fact, accept an RFC-822 date string in the INTERNALDATE response,\n   it's easy to miss this in your interoperability testing.  But it will\n   cause a problem with some client, so be sure to generate the correct\n   string for this field.\n\n3.4.2. Special Characters\n\n   Certain characters, currently the double-quote and the backslash, may\n   not be sent as-is inside a quoted string.  These characters must be\n   preceded by the escape character if they are in a quoted string, or\n   else the string must be sent as a literal.  Both clients and servers\n   must handle this, both on output (they must send these characters\n   properly) and on input (they must be able to receive escaped\n   characters in quoted strings).  Example:\n\n       C: 001 LIST \"\" %\n       S: * LIST () \"\" INBOX\n       S: * LIST () \"\\\\\" TEST\n       S: * LIST () \"\\\\\" {12}\n       S: \"My\" mailbox\n       S: 001 OK done\n       C: 002 LIST \"\" \"\\\"My\\\" mailbox\\\\%\"\n       S: * LIST () \"\\\\\" {17}\n       S: \"My\" mailbox\\Junk\n\n\n\nLeiba                        Informational                     [Page 11]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n       S: 002 OK done\n\n   Note that in the example the server sent the hierarchy delimiter as\n   an escaped character in the quoted string and sent the mailbox name\n   containing imbedded double-quotes as a literal.  The client used only\n   quoted strings, escaping both the backslash and the double-quote\n   characters.\n\n   The CR and LF characters may be sent ONLY in literals; they are not\n   allowed, even if escaped, inside quoted strings.\n\n   And while we're talking about special characters: the IMAP spec, in\n   the section titled \"Mailbox International Naming Convention\",\n   describes how to encode mailbox names in modified UTF-7 [UTF-7 and\n   RFC-2060].  Implementations must adhere to this in order to be\n   interoperable in the international market, and servers should\n   validate mailbox names sent by client and reject names that do not\n   conform.\n\n   As to special characters in userids and passwords: clients must not\n   restrict what a user may type in for a userid or a password.  The\n   formal grammar specifies that these are \"astrings\", and an astring\n   can be a literal.  A literal, in turn can contain any 8-bit\n   character, and clients must allow users to enter all 8-bit characters\n   here, and must pass them, unchanged, to the server (being careful to\n   send them as literals when necessary).  In particular, some server\n   configurations use \"@\" in user names, and some clients do not allow\n   that character to be entered; this creates a severe interoperability\n   problem.\n\n3.4.3. UIDs and UIDVALIDITY\n\n   Servers that support existing back-end mail stores often have no good\n   place to save UIDs for messages.  Often the existing mail store will\n   not have the concept of UIDs in the sense that IMAP has: strictly\n   increasing, never re-issued, 32-bit integers.  Some servers solve\n   this by storing the UIDs in a place that's accessible to end users,\n   allowing for the possibility that the users will delete them.  Others\n   solve it by re-assigning UIDs every time a mailbox is selected.\n\n   The server should maintain UIDs permanently for all messages if it\n   can.  If that's not possible, the server must change the UIDVALIDITY\n   value for the mailbox whenever any of the UIDs may have become\n   invalid.  Clients must recognize that the UIDVALIDITY has changed and\n   must respond to that condition by throwing away any information that\n   they have saved about UIDs in that mailbox.  There have been many\n   problems in this area when clients have failed to do this; in the\n   worst case it will result in loss of mail when a client deletes the\n\n\n\nLeiba                        Informational                     [Page 12]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   wrong piece of mail by using a stale UID.\n\n   It seems to be a common misunderstanding that \"the UIDVALIDITY and\n   the UID, taken together, form a 64-bit identifier that uniquely\n   identifies a message on a server\".  This is absolutely NOT TRUE.\n   There is no assurance that the UIDVALIDITY values of two mailboxes be\n   different, so the UIDVALIDITY in no way identifies a mailbox.  The\n   ONLY purpose of UIDVALIDITY is, as its name indicates, to give the\n   client a way to check the validity of the UIDs it has cached.  While\n   it is a valid implementation choice to put these values together to\n   make a 64-bit identifier for the message, the important concept here\n   is that UIDs are not unique between mailboxes; they are only unique\n   WITHIN a given mailbox.\n\n   Some server implementations have attempted to make UIDs unique across\n   the entire server.  This is inadvisable, in that it limits the life\n   of UIDs unnecessarily.  The UID is a 32-bit number and will run out\n   in reasonably finite time if it's global across the server.  If you\n   assign UIDs sequentially in one mailbox, you will not have to start\n   re-using them until you have had, at one time or another, 2**32\n   different messages in that mailbox.  In the global case, you will\n   have to reuse them once you have had, at one time or another, 2**32\n   different messages in the entire mail store.  Suppose your server has\n   around 8000 users registered (2**13).  That gives an average of 2**19\n   UIDs per user.  Suppose each user gets 32 messages (2**5) per day.\n   That gives you 2**14 days (16000+ days = about 45 years) before you\n   run out.  That may seem like enough, but multiply the usage just a\n   little (a lot of spam, a lot of mailing list subscriptions, more\n   users) and you limit yourself too much.\n\n   What's worse is that if you have to wrap the UIDs, and, thus, you\n   have to change UIDVALIDITY and invalidate the UIDs in the mailbox,\n   you have to do it for EVERY mailbox in the system, since they all\n   share the same UID pool.  If you assign UIDs per mailbox and you have\n   a problem, you only have to kill the UIDs for that one mailbox.\n\n   Under extreme circumstances (and this is extreme, indeed), the server\n   may have to invalidate UIDs while a mailbox is in use by a client -\n   that is, the UIDs that the client knows about in its active mailbox\n   are no longer valid.  In that case, the server must immediately\n   change the UIDVALIDITY and must communicate this to the client.  The\n   server may do this by sending an unsolicited UIDVALIDITY message, in\n   the same form as in response to the SELECT command.  Clients must be\n   prepared to handle such a message and the possibly coincident failure\n   of the command in process.  For example:\n\n\n\n\n\n\nLeiba                        Informational                     [Page 13]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n       C: 032 UID STORE 382 +Flags.silent \\Deleted\n       S: * OK [UIDVALIDITY 12345] New UIDVALIDITY value!\n       S: 032 NO UID command rejected because UIDVALIDITY changed!\n       C: ...invalidates local information and re-fetches...\n       C: 033 FETCH 1:* UID\n       ...etc...\n\n   At the time of the writing of this document, the only server known to\n   do this does so only under the following condition: the client\n   selects INBOX, but there is not yet a physical INBOX file created.\n   Nonetheless, the SELECT succeeds, exporting an empty INBOX with a\n   temporary UIDVALIDITY of 1.  While the INBOX remains selected, mail\n   is delivered to the user, which creates the real INBOX file and\n   assigns a permanent UIDVALIDITY (that is likely not to be 1).  The\n   server reports the change of UIDVALIDITY, but as there were no\n   messages before, so no UIDs have actually changed, all the client\n   must do is accept the change in UIDVALIDITY.\n\n   Alternatively, a server may force the client to re-select the\n   mailbox, at which time it will obtain a new UIDVALIDITY value.  To do\n   this, the server closes this client session (see \"Severed\n   Connections\" above) and the client then reconnects and gets back in\n   synch.  Clients must be prepared for either of these behaviours.\n\n   We do not know of, nor do we anticipate the future existance of, a\n   server that changes UIDVALIDITY while there are existing messages,\n   but clients must be prepared to handle this eventuality.\n\n3.4.4. FETCH Responses\n\n   When a client asks for certain information in a FETCH command, the\n   server may return the requested information in any order, not\n   necessarily in the order that it was requested.  Further, the server\n   may return the information in separate FETCH responses and may also\n   return information that was not explicitly requested (to reflect to\n   the client changes in the state of the subject message).  Some\n   examples:\n\n       C: 001 FETCH 1 UID FLAGS INTERNALDATE\n       S: * 5 FETCH (FLAGS (\\Deleted))\n       S: * 1 FETCH (FLAGS (\\Seen) INTERNALDATE \"...\" UID 345)\n       S: 001 OK done\n\n   (In this case, the responses are in a different order.  Also, the\n   server returned a flag update for message 5, which wasn't part of the\n   client's request.)\n\n\n\n\n\nLeiba                        Informational                     [Page 14]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n       C: 002 FETCH 2 UID FLAGS INTERNALDATE\n       S: * 2 FETCH (INTERNALDATE \"...\")\n       S: * 2 FETCH (UID 399)\n       S: * 2 FETCH (FLAGS ())\n       S: 002 OK done\n\n   (In this case, the responses are in a different order and were\n   returned in separate responses.)\n\n       C: 003 FETCH 2 BODY[1]\n       S: * 2 FETCH (FLAGS (\\Seen) BODY[1] {14}\n       S: Hello world!\n       S: )\n       S: 003 OK done\n\n   (In this case, the FLAGS response was added by the server, since\n   fetching the body part caused the server to set the \\Seen flag.)\n\n   Because of this characteristic a client must be ready to receive any\n   FETCH response at any time and should use that information to update\n   its local information about the message to which the FETCH response\n   refers.  A client must not assume that any FETCH responses will come\n   in any particular order, or even that any will come at all.  If after\n   receiving the tagged response for a FETCH command the client finds\n   that it did not get all of the information requested, the client\n   should send a NOOP command to the server to ensure that the server\n   has an opportunity to send any pending EXPUNGE responses to the\n   client (see [RFC-2180]).\n\n3.4.5. RFC822.SIZE\n\n   Some back-end mail stores keep the mail in a canonical form, rather\n   than retaining the original MIME format of the messages.  This means\n   that the server must reassemble the message to produce a MIME stream\n   when a client does a fetch such as RFC822 or BODY[], requesting the\n   entire message.  It also may mean that the server has no convenient\n   way to know the RFC822.SIZE of the message.  Often, such a server\n   will actually have to build the MIME stream to compute the size, only\n   to throw the stream away and report the size to the client.\n\n   When this is the case, some servers have chosen to estimate the size,\n   rather than to compute it precisely.  Such an estimate allows the\n   client to display an approximate size to the user and to use the\n   estimate in flood control considerations (q.v.), but requires that\n   the client not use the size for things such as allocation of buffers,\n   because those buffers might then be too small to hold the actual MIME\n   stream.  Instead, a client should use the size that's returned in the\n   literal when you fetch the data.\n\n\n\nLeiba                        Informational                     [Page 15]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   The protocol requires that the RFC822.SIZE value returned by the\n   server be EXACT.  Estimating the size is a protocol violation, and\n   server designers must be aware that, despite the performance savings\n   they might realize in using an estimate, this practice will cause\n   some clients to fail in various ways.  If possible, the server should\n   compute the RFC822.SIZE for a particular message once, and then save\n   it for later retrieval.  If that's not possible, the server must\n   compute the value exactly every time.  Incorrect estimates do cause\n   severe interoperability problems with some clients.\n\n3.4.6. Expunged Messages\n\n   If the server allows multiple connections to the same mailbox, it is\n   often possible for messages to be expunged in one client unbeknownst\n   to another client.  Since the server is not allowed to tell the\n   client about these expunged messages in response to a FETCH command,\n   the server may have to deal with the issue of how to return\n   information about an expunged message.  There was extensive\n   discussion about this issue, and the results of that discussion are\n   summarized in [RFC-2180].  See that reference for a detailed\n   explanation and for recommendations.\n\n3.4.7. The Namespace Issue\n\n   Namespaces are a very muddy area in IMAP4 implementation right now\n   (see [NAMESPACE] for a proposal to clear the water a bit).  Until the\n   issue is resolved, the important thing for client developers to\n   understand is that some servers provide access through IMAP to more\n   than just the user's personal mailboxes, and, in fact, the user's\n   personal mailboxes may be \"hidden\" somewhere in the user's default\n   hierarchy.  The client, therefore, should provide a setting wherein\n   the user can specify a prefix to be used when accessing mailboxes. If\n   the user's mailboxes are all in \"~/mail/\", for instance, then the\n   user can put that string in the prefix.  The client would then put\n   the prefix in front of any name pattern in the LIST and LSUB\n   commands:\n\n       C: 001 LIST \"\" ~/mail/%\n\n   (See also \"Reference Names in the LIST Command\" below.)\n\n3.4.8. Creating Special-Use Mailboxes\n\n   It may seem at first that this is part of the namespace issue; it is\n   not, and is only indirectly related to it.  A number of clients like\n   to create special-use mailboxes with particular names.  Most\n   commonly, clients with a \"trash folder\" model of message deletion\n   want to create a mailbox with the name \"Trash\" or \"Deleted\".  Some\n\n\n\nLeiba                        Informational                     [Page 16]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   clients want to create a \"Drafts\" mailbox, an \"Outbox\" mailbox, or a\n   \"Sent Mail\" mailbox.  And so on.  There are two major\n   interoperability problems with this practice:\n\n   1. different clients may use different names for mailboxes with\n      similar functions (such as \"Trash\" and \"Deleted\"), or may manage\n      the same mailboxes in different ways, causing problems if a user\n      switches between clients and\n   2. there is no guarantee that the server will allow the creation of\n      the desired mailbox.\n\n   The client developer is, therefore, well advised to consider\n   carefully the creation of any special-use mailboxes on the server,\n   and, further, the client must not require such mailbox creation -\n   that is, if you do decide to do this, you must handle gracefully the\n   failure of the CREATE command and behave reasonably when your\n   special-use mailboxes do not exist and can not be created.\n\n   In addition, the client developer should provide a convenient way for\n   the user to select the names for any special-use mailboxes, allowing\n   the user to make these names the same in all clients used and to put\n   them where the user wants them.\n\n3.4.9. Reference Names in the LIST Command\n\n   Many implementers of both clients and servers are confused by the\n   \"reference name\" on the LIST command.  The reference name is intended\n   to be used in much the way a \"cd\" (change directory) command is used\n   on Unix, PC DOS, Windows, and OS/2 systems.  That is, the mailbox\n   name is interpreted in much the same way as a file of that name would\n   be found if one had done a \"cd\" command into the directory specified\n   by the reference name.  For example, in Unix we have the following:\n\n       > cd /u/jones/junk\n       > vi banana        [file is \"/u/jones/junk/banana\"]\n       > vi stuff/banana  [file is \"/u/jones/junk/stuff/banana\"]\n       > vi /etc/hosts    [file is \"/etc/hosts\"]\n\n   In the past, there have been several interoperability problems with\n   this.  First, while some IMAP servers are built on Unix or PC file\n   systems, many others are not, and the file system semantics do not\n   make sense in those configurations.  Second, while some IMAP servers\n   expose the underlying file system to the clients, others allow access\n   only to the user's personal mailboxes, or to some other limited set\n   of files, making such file-system-like semantics less meaningful.\n   Third, because the IMAP spec leaves the interpretation of the\n   reference name as \"implementation-dependent\", in the past the various\n   server implementations handled it in vastly differing ways.\n\n\n\nLeiba                        Informational                     [Page 17]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   The following recommendations are the result of significant\n   operational experience, and are intended to maximize\n   interoperability.\n\n   Server implementations must implement the reference argument in a way\n   that matches the intended \"change directory\" operation as closely as\n   possible.  As a minimum implementation, the reference argument may be\n   prepended to the mailbox name (while suppressing double delimiters;\n   see the next paragraph).  Even servers that do not provide a way to\n   break out of the current hierarchy (see \"breakout facility\" below)\n   must provide a reasonable implementation of the reference argument,\n   as described here, so that they will interoperate with clients that\n   use it.\n\n   Server implementations that prepend the reference argument to the\n   mailbox name should insert a hierarchy delimiter between them, and\n   must not insert a second if one is already present:\n\n       C: A001 LIST ABC DEF\n       S: * LIST () \"/\" ABC/DEF   <=== should do this\n       S: A001 OK done\n\n       C: A002 LIST ABC/ /DEF\n       S: * LIST () \"/\" ABC//DEF     <=== must not do this\n       S: A002 OK done\n\n   On clients, the reference argument is chiefly used to implement a\n   \"breakout facility\", wherein the user may directly access a mailbox\n   outside the \"current directory\" hierarchy.  Client implementations\n   should have an operational mode that does not use the reference\n   argument.  This is to interoperate with older servers that did not\n   implement the reference argument properly.  While it's a good idea to\n   give the user access to a breakout facility, clients that do not\n   intend to do so should not use the reference argument at all.\n\n   Client implementations should always place a trailing hierarchy\n   delimiter on the reference argument.  This is because some servers\n   prepend the reference argument to the mailbox name without inserting\n   a hierarchy delimiter, while others do insert a hierarchy delimiter\n   if one is not already present.  A client that puts the delimiter in\n   will work with both varieties of server.\n\n   Client implementations that implement a breakout facility should\n   allow the user to choose whether or not to use a leading hierarchy\n   delimiter on the mailbox argument.  This is because the handling of a\n   leading mailbox hierarchy delimiter also varies from server to\n   server, and even between different mailstores on the same server.  In\n   some cases, a leading hierarchy delimiter means \"discard the\n\n\n\nLeiba                        Informational                     [Page 18]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   reference argument\" (implementing the intended breakout facility),\n   thus:\n\n       C: A001 LIST ABC/ /DEF\n       S: * LIST () \"/\" /DEF\n       S: A001 OK done\n\n   In other cases, however, the two are catenated and the extra\n   hierarchy delimiter is discarded, thus:\n\n       C: A001 LIST ABC/ /DEF\n       S: * LIST () \"/\" ABC/DEF\n       S: A001 OK done\n\n   Client implementations must not assume that the server supports a\n   breakout facility, but may provide a way for the user to use one if\n   it is available.  Any breakout facility should be exported to the\n   user interface.  Note that there may be other \"breakout\" characters\n   besides the hierarchy delimiter (for instance, UNIX filesystem\n   servers are likely to use a leading \"~\" as well), and that their\n   interpretation is server-dependent.\n\n3.4.10.   Mailbox Hierarchy Delimiters\n\n   The server's selection of what to use as a mailbox hierarchy\n   delimiter is a difficult one, involving several issues: What\n   characters do users expect to see?  What characters can they enter\n   for a hierarchy delimiter if it is desired (or required) that the\n   user enter it?  What character can be used for the hierarchy\n   delimiter, noting that the chosen character can not otherwise be used\n   in the mailbox name?\n\n   Because some interfaces show users the hierarchy delimiters or allow\n   users to enter qualified mailbox names containing them, server\n   implementations should use delimiter characters that users generally\n   expect to see as name separators.  The most common characters used\n   for this are \"/\" (as in Unix file names), \"\\\" (as in OS/2 and Windows\n   file names), and \".\" (as in news groups).  There is little to choose\n   among these apart from what users may expect or what is dictated by\n   the underlying file system, if any.  One consideration about using\n   \"\\\" is that it's also a special character in the IMAP protocol. While\n   the use of other hierarchy delimiter characters is permissible, A\n   DESIGNER IS WELL ADVISED TO STAY WITH ONE FROM THIS SET unless the\n   server is intended for special purposes only.  Implementers might be\n   thinking about using characters such as \"-\", \"_\", \";\", \"&\", \"#\", \"@\",\n   and \"!\", but they should be aware of the surprise to the user as well\n   as of the effect on URLs and other external specifications (since\n   some of these characters have special meanings there).  Also, a\n\n\n\nLeiba                        Informational                     [Page 19]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   server that uses \"\\\" (and clients of such a server) must remember to\n   escape that character in quoted strings or to send literals instead.\n   Literals are recommended over escaped characters in quoted strings in\n   order to maintain compatibility with older IMAP versions that did not\n   allow escaped characters in quoted strings (but check the grammar to\n   see where literals are allowed):\n\n       C: 001 LIST \"\" {13}\n       S: + send literal\n       C: this\\%\\%\\%\\h*\n       S: * LIST () \"\\\\\" {27}\n       S: this\\is\\a\\mailbox\\hierarchy\n       S: 001 OK LIST complete\n\n   In any case, a server should not use normal alpha-numeric characters\n   (such as \"X\" or \"0\") as delimiters; a user would be very surprised to\n   find that \"EXPENDITURES\" actually represented a two-level hierarchy.\n   And a server should not use characters that are non-printable or\n   difficult or impossible to enter on a standard US keyboard.  Control\n   characters, box-drawing characters, and characters from non-US\n   alphabets fit into this category.  Their use presents\n   interoperability problems that are best avoided.\n\n   The UTF-7 encoding of mailbox names also raises questions about what\n   to do with the hierarchy delimiters in encoded names: do we encode\n   each hierarchy level and separate them with delimiters, or do we\n   encode the fully qualified name, delimiters and all?  The answer for\n   IMAP is the former: encode each hierarchy level separately, and\n   insert delimiters between.  This makes it particularly important not\n   to use as a hierarchy delimiter a character that might cause\n   confusion with IMAP's modified UTF-7 [UTF-7 and RFC-2060] encoding.\n\n   To repeat: a server should use \"/\", \"\\\", or \".\" as its hierarchy\n   delimiter.  The use of any other character is likely to cause\n   problems and is STRONGLY DISCOURAGED.\n\n3.4.11.   ALERT Response Codes\n\n   The protocol spec is very clear on the matter of what to do with\n   ALERT response codes, and yet there are many clients that violate it\n   so it needs to be said anyway: \"The human-readable text contains a\n   special alert that must be presented to the user in a fashion that\n   calls the user's attention to the message.\"  That should be clear\n   enough, but I'll repeat it here: Clients must present ALERT text\n   clearly to the user.\n\n\n\n\n\n\nLeiba                        Informational                     [Page 20]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n3.4.12.   Deleting Mailboxes\n\n   The protocol does not guarantee that a client may delete a mailbox\n   that is not empty, though on some servers it is permissible and is,\n   in fact, much faster than the alternative or deleting all the\n   messages from the client.  If the client chooses to try to take\n   advantage of this possibility it must be prepared to use the other\n   method in the even that the more convenient one fails.  Further, a\n   client should not try to delete the mailbox that it has selected, but\n   should first close that mailbox; some servers do not permit the\n   deletion of the selected mailbox.\n\n   That said, a server should permit the deletion of a non-empty\n   mailbox; there's little reason to pass this work on to the client.\n   Moreover, forbidding this prevents the deletion of a mailbox that for\n   some reason can not be opened or expunged, leading to possible\n   denial-of-service problems.\n\n   Example:\n\n       [User tells the client to delete mailbox BANANA, which is\n       currently selected...]\n       C: 008 CLOSE\n       S: 008 OK done\n       C: 009 DELETE BANANA\n       S: 009 NO Delete failed; mailbox is not empty.\n       C: 010 SELECT BANANA\n       S: * ... untagged SELECT responses\n       S: 010 OK done\n       C: 011 STORE 1:* +FLAGS.SILENT \\DELETED\n       S: 011 OK done\n       C: 012 CLOSE\n       S: 012 OK done\n       C: 013 DELETE BANANA\n       S: 013 OK done\n\n3.5.   A Word About Testing\n\n   Since the whole point of IMAP is interoperability, and since\n   interoperability can not be tested in a vacuum, the final\n   recommendation of this treatise is, \"Test against EVERYTHING.\"  Test\n   your client against every server you can get an account on.  Test\n   your server with every client you can get your hands on.  Many\n   clients make limited test versions available on the Web for the\n   downloading.  Many server owners will give serious client developers\n   guest accounts for testing.  Contact them and ask.  NEVER assume that\n   because your client works with one or two servers, or because your\n   server does fine with one or two clients, you will interoperate well\n\n\n\nLeiba                        Informational                     [Page 21]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n   in general.\n\n   In particular, in addition to everything else, be sure to test\n   against the reference implementations: the PINE client, the\n   University of Washington server, and the Cyrus server.\n\n   See the following URLs on the web for more information here:\n\n       IMAP Products and Sources: http://www.imap.org/products.html\n       IMC MailConnect: http://www.imc.org/imc-mailconnect\n\n4. Security Considerations\n\n   This document describes behaviour of clients and servers that use the\n   IMAP4 protocol, and as such, has the same security considerations as\n   described in [RFC-2060].\n\n5. References\n\n   [RFC-2060]  Crispin, M., \"Internet Message Access Protocol - Version\n               4rev1\", RFC 2060, December 1996.\n\n   [RFC-2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC-2180]  Gahrns, M., \"IMAP4 Multi-Accessed Mailbox Practice\", RFC\n               2180, July 1997.\n\n   [UTF-8]     Yergeau, F., \" UTF-8, a transformation format of Unicode\n               and ISO 10646\", RFC 2044, October 1996.\n\n   [UTF-7]     Goldsmith, D. and M. Davis, \"UTF-7, a Mail-Safe\n               Transformation Format of Unicode\", RFC 2152, May 1997.\n\n   [NAMESPACE] Gahrns, M. and C. Newman, \"IMAP4 Namespace\", Work in\n               Progress.\n\n6. Author's Address\n\n   Barry Leiba\n   IBM T.J. Watson Research Center\n   30 Saw Mill River Road\n   Hawthorne, NY  10532\n\n   Phone: 1-914-784-7941\n   EMail: leiba@watson.ibm.com\n\n\n\n\n\nLeiba                        Informational                     [Page 22]\n\f\nRFC 2683          IMAP4 Implementation Recommendations    September 1999\n\n\n7. Full Copyright Statement\n\n   Copyright (C) The Internet Society (1999).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba                        Informational                     [Page 23]\n\f\n"
  },
  {
    "path": "rfc/rfc2821.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                 J. Klensin, Editor\nRequest for Comments: 2821                             AT&T Laboratories\nObsoletes: 821, 974, 1869                                     April 2001\nUpdates: 1123\nCategory: Standards Track\n\n\n                     Simple Mail Transfer Protocol\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2001).  All Rights Reserved.\n\nAbstract\n\n   This document is a self-contained specification of the basic protocol\n   for the Internet electronic mail transport.  It consolidates, updates\n   and clarifies, but doesn't add new or change existing functionality\n   of the following:\n\n   -  the original SMTP (Simple Mail Transfer Protocol) specification of\n      RFC 821 [30],\n\n   -  domain name system requirements and implications for mail\n      transport from RFC 1035 [22] and RFC 974 [27],\n\n   -  the clarifications and applicability statements in RFC 1123 [2],\n      and\n\n   -  material drawn from the SMTP Extension mechanisms [19].\n\n   It obsoletes RFC 821, RFC 974, and updates RFC 1123 (replaces the\n   mail transport materials of RFC 1123).  However, RFC 821 specifies\n   some features that were not in significant use in the Internet by the\n   mid-1990s and (in appendices) some additional transport models.\n   Those sections are omitted here in the interest of clarity and\n   brevity; readers needing them should refer to RFC 821.\n\n\n\n\n\n\nKlensin                     Standards Track                     [Page 1]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   It also includes some additional material from RFC 1123 that required\n   amplification.  This material has been identified in multiple ways,\n   mostly by tracking flaming on various lists and newsgroups and\n   problems of unusual readings or interpretations that have appeared as\n   the SMTP extensions have been deployed.  Where this specification\n   moves beyond consolidation and actually differs from earlier\n   documents, it supersedes them technically as well as textually.\n\n   Although SMTP was designed as a mail transport and delivery protocol,\n   this specification also contains information that is important to its\n   use as a 'mail submission' protocol, as recommended for POP [3, 26]\n   and IMAP [6].  Additional submission issues are discussed in RFC 2476\n   [15].\n\n   Section 2.3 provides definitions of terms specific to this document.\n   Except when the historical terminology is necessary for clarity, this\n   document uses the current 'client' and 'server' terminology to\n   identify the sending and receiving SMTP processes, respectively.\n\n   A companion document [32] discusses message headers, message bodies\n   and formats and structures for them, and their relationship.\n\nTable of Contents\n\n   1. Introduction ..................................................  4\n   2. The SMTP Model ................................................  5\n   2.1 Basic Structure ..............................................  5\n   2.2 The Extension Model ..........................................  7\n   2.2.1 Background .................................................  7\n   2.2.2 Definition and Registration of Extensions ..................  8\n   2.3 Terminology ..................................................  9\n   2.3.1 Mail Objects ............................................... 10\n   2.3.2 Senders and Receivers ...................................... 10\n   2.3.3 Mail Agents and Message Stores ............................. 10\n   2.3.4 Host ....................................................... 11\n   2.3.5 Domain ..................................................... 11\n   2.3.6 Buffer and State Table ..................................... 11\n   2.3.7 Lines ...................................................... 12\n   2.3.8 Originator, Delivery, Relay, and Gateway Systems ........... 12\n   2.3.9 Message Content and Mail Data .............................. 13\n   2.3.10 Mailbox and Address ....................................... 13\n   2.3.11 Reply ..................................................... 13\n   2.4 General Syntax Principles and Transaction Model .............. 13\n   3. The SMTP Procedures: An Overview .............................. 15\n   3.1 Session Initiation ........................................... 15\n   3.2 Client Initiation ............................................ 16\n   3.3 Mail Transactions ............................................ 16\n   3.4 Forwarding for Address Correction or Updating ................ 19\n\n\n\nKlensin                     Standards Track                     [Page 2]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   3.5 Commands for Debugging Addresses ............................. 20\n   3.5.1 Overview ................................................... 20\n   3.5.2 VRFY Normal Response ....................................... 22\n   3.5.3 Meaning of VRFY or EXPN Success Response ................... 22\n   3.5.4 Semantics and Applications of EXPN ......................... 23\n   3.6 Domains ...................................................... 23\n   3.7 Relaying ..................................................... 24\n   3.8 Mail Gatewaying .............................................. 25\n   3.8.1 Header Fields in Gatewaying ................................ 26\n   3.8.2 Received Lines in Gatewaying ............................... 26\n   3.8.3 Addresses in Gatewaying .................................... 26\n   3.8.4 Other Header Fields in Gatewaying .......................... 27\n   3.8.5 Envelopes in Gatewaying .................................... 27\n   3.9 Terminating Sessions and Connections ......................... 27\n   3.10 Mailing Lists and Aliases ................................... 28\n   3.10.1 Alias ..................................................... 28\n   3.10.2 List ...................................................... 28\n   4. The SMTP Specifications ....................................... 29\n   4.1 SMTP Commands ................................................ 29\n   4.1.1 Command Semantics and Syntax ............................... 29\n   4.1.1.1  Extended HELLO (EHLO) or HELLO (HELO) ................... 29\n   4.1.1.2 MAIL (MAIL) .............................................. 31\n   4.1.1.3 RECIPIENT (RCPT) ......................................... 31\n   4.1.1.4 DATA (DATA) .............................................. 33\n   4.1.1.5 RESET (RSET) ............................................. 34\n   4.1.1.6 VERIFY (VRFY) ............................................ 35\n   4.1.1.7 EXPAND (EXPN) ............................................ 35\n   4.1.1.8 HELP (HELP) .............................................. 35\n   4.1.1.9 NOOP (NOOP) .............................................. 35\n   4.1.1.10 QUIT (QUIT) ............................................. 36\n   4.1.2 Command Argument Syntax .................................... 36\n   4.1.3 Address Literals ........................................... 38\n   4.1.4 Order of Commands .......................................... 39\n   4.1.5 Private-use Commands ....................................... 40\n   4.2  SMTP Replies ................................................ 40\n   4.2.1 Reply Code Severities and Theory ........................... 42\n   4.2.2 Reply Codes by Function Groups ............................. 44\n   4.2.3  Reply Codes in Numeric Order .............................. 45\n   4.2.4 Reply Code 502 ............................................. 46\n   4.2.5 Reply Codes After DATA and the Subsequent <CRLF>.<CRLF> .... 46\n   4.3 Sequencing of Commands and Replies ........................... 47\n   4.3.1 Sequencing Overview ........................................ 47\n   4.3.2 Command-Reply Sequences .................................... 48\n   4.4 Trace Information ............................................ 49\n   4.5 Additional Implementation Issues ............................. 53\n   4.5.1 Minimum Implementation ..................................... 53\n   4.5.2 Transparency ............................................... 53\n   4.5.3 Sizes and Timeouts ......................................... 54\n\n\n\nKlensin                     Standards Track                     [Page 3]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   4.5.3.1 Size limits and minimums ................................. 54\n   4.5.3.2 Timeouts ................................................. 56\n   4.5.4 Retry Strategies ........................................... 57\n   4.5.4.1 Sending Strategy ......................................... 58\n   4.5.4.2 Receiving Strategy ....................................... 59\n   4.5.5 Messages with a null reverse-path .......................... 59\n   5. Address Resolution and Mail Handling .......................... 60\n   6. Problem Detection and Handling ................................ 62\n   6.1 Reliable Delivery and Replies by Email ....................... 62\n   6.2 Loop Detection ............................................... 63\n   6.3 Compensating for Irregularities .............................. 63\n   7. Security Considerations ....................................... 64\n   7.1 Mail Security and Spoofing ................................... 64\n   7.2 \"Blind\" Copies ............................................... 65\n   7.3 VRFY, EXPN, and Security ..................................... 65\n   7.4 Information Disclosure in Announcements ...................... 66\n   7.5 Information Disclosure in Trace Fields ....................... 66\n   7.6 Information Disclosure in Message Forwarding ................. 67\n   7.7 Scope of Operation of SMTP Servers ........................... 67\n   8. IANA Considerations ........................................... 67\n   9. References .................................................... 68\n   10. Editor's Address ............................................. 70\n   11. Acknowledgments .............................................. 70\n   Appendices ....................................................... 71\n   A. TCP Transport Service ......................................... 71\n   B. Generating SMTP Commands from RFC 822 Headers ................. 71\n   C. Source Routes ................................................. 72\n   D. Scenarios ..................................................... 73\n   E. Other Gateway Issues .......................................... 76\n   F. Deprecated Features of RFC 821 ................................ 76\n   Full Copyright Statement ......................................... 79\n\n1. Introduction\n\n   The objective of the Simple Mail Transfer Protocol (SMTP) is to\n   transfer mail reliably and efficiently.\n\n   SMTP is independent of the particular transmission subsystem and\n   requires only a reliable ordered data stream channel.  While this\n   document specifically discusses transport over TCP, other transports\n   are possible.  Appendices to RFC 821 describe some of them.\n\n   An important feature of SMTP is its capability to transport mail\n   across networks, usually referred to as \"SMTP mail relaying\" (see\n   section 3.8).  A network consists of the mutually-TCP-accessible\n   hosts on the public Internet, the mutually-TCP-accessible hosts on a\n   firewall-isolated TCP/IP Intranet, or hosts in some other LAN or WAN\n   environment utilizing a non-TCP transport-level protocol.  Using\n\n\n\nKlensin                     Standards Track                     [Page 4]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   SMTP, a process can transfer mail to another process on the same\n   network or to some other network via a relay or gateway process\n   accessible to both networks.\n\n   In this way, a mail message may pass through a number of intermediate\n   relay or gateway hosts on its path from sender to ultimate recipient.\n   The Mail eXchanger mechanisms of the domain name system [22, 27] (and\n   section 5 of this document) are used to identify the appropriate\n   next-hop destination for a message being transported.\n\n2. The SMTP Model\n\n2.1 Basic Structure\n\n   The SMTP design can be pictured as:\n\n               +----------+                +----------+\n   +------+    |          |                |          |\n   | User |<-->|          |      SMTP      |          |\n   +------+    |  Client- |Commands/Replies| Server-  |\n   +------+    |   SMTP   |<-------------->|    SMTP  |    +------+\n   | File |<-->|          |    and Mail    |          |<-->| File |\n   |System|    |          |                |          |    |System|\n   +------+    +----------+                +----------+    +------+\n                SMTP client                SMTP server\n\n   When an SMTP client has a message to transmit, it establishes a two-\n   way transmission channel to an SMTP server.  The responsibility of an\n   SMTP client is to transfer mail messages to one or more SMTP servers,\n   or report its failure to do so.\n\n   The means by which a mail message is presented to an SMTP client, and\n   how that client determines the domain name(s) to which mail messages\n   are to be transferred is a local matter, and is not addressed by this\n   document.  In some cases, the domain name(s) transferred to, or\n   determined by, an SMTP client will identify the final destination(s)\n   of the mail message.  In other cases, common with SMTP clients\n   associated with implementations of the POP [3, 26] or IMAP [6]\n   protocols, or when the SMTP client is inside an isolated transport\n   service environment, the domain name determined will identify an\n   intermediate destination through which all mail messages are to be\n   relayed.  SMTP clients that transfer all traffic, regardless of the\n   target domain names associated with the individual messages, or that\n   do not maintain queues for retrying message transmissions that\n   initially cannot be completed, may otherwise conform to this\n   specification but are not considered fully-capable.  Fully-capable\n   SMTP implementations, including the relays used by these less capable\n\n\n\n\nKlensin                     Standards Track                     [Page 5]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   ones, and their destinations, are expected to support all of the\n   queuing, retrying, and alternate address functions discussed in this\n   specification.\n\n   The means by which an SMTP client, once it has determined a target\n   domain name, determines the identity of an SMTP server to which a\n   copy of a message is to be transferred, and then performs that\n   transfer, is covered by this document.  To effect a mail transfer to\n   an SMTP server, an SMTP client establishes a two-way transmission\n   channel to that SMTP server.  An SMTP client determines the address\n   of an appropriate host running an SMTP server by resolving a\n   destination domain name to either an intermediate Mail eXchanger host\n   or a final target host.\n\n   An SMTP server may be either the ultimate destination or an\n   intermediate \"relay\" (that is, it may assume the role of an SMTP\n   client after receiving the message) or \"gateway\" (that is, it may\n   transport the message further using some protocol other than SMTP).\n   SMTP commands are generated by the SMTP client and sent to the SMTP\n   server.  SMTP replies are sent from the SMTP server to the SMTP\n   client in response to the commands.\n\n   In other words, message transfer can occur in a single connection\n   between the original SMTP-sender and the final SMTP-recipient, or can\n   occur in a series of hops through intermediary systems.  In either\n   case, a formal handoff of responsibility for the message occurs: the\n   protocol requires that a server accept responsibility for either\n   delivering a message or properly reporting the failure to do so.\n\n   Once the transmission channel is established and initial handshaking\n   completed, the SMTP client normally initiates a mail transaction.\n   Such a transaction consists of a series of commands to specify the\n   originator and destination of the mail and transmission of the\n   message content (including any headers or other structure) itself.\n   When the same message is sent to multiple recipients, this protocol\n   encourages the transmission of only one copy of the data for all\n   recipients at the same destination (or intermediate relay) host.\n\n   The server responds to each command with a reply; replies may\n   indicate that the command was accepted, that additional commands are\n   expected, or that a temporary or permanent error condition exists.\n   Commands specifying the sender or recipients may include server-\n   permitted SMTP service extension requests as discussed in section\n   2.2.  The dialog is purposely lock-step, one-at-a-time, although this\n   can be modified by mutually-agreed extension requests such as command\n   pipelining [13].\n\n\n\n\n\nKlensin                     Standards Track                     [Page 6]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   Once a given mail message has been transmitted, the client may either\n   request that the connection be shut down or may initiate other mail\n   transactions.  In addition, an SMTP client may use a connection to an\n   SMTP server for ancillary services such as verification of email\n   addresses or retrieval of mailing list subscriber addresses.\n\n   As suggested above, this protocol provides mechanisms for the\n   transmission of mail.  This transmission normally occurs directly\n   from the sending user's host to the receiving user's host when the\n   two hosts are connected to the same transport service.  When they are\n   not connected to the same transport service, transmission occurs via\n   one or more relay SMTP servers.  An intermediate host that acts as\n   either an SMTP relay or as a gateway into some other transmission\n   environment is usually selected through the use of the domain name\n   service (DNS) Mail eXchanger mechanism.\n\n   Usually, intermediate hosts are determined via the DNS MX record, not\n   by explicit \"source\" routing (see section 5 and appendices C and\n   F.2).\n\n2.2 The Extension Model\n\n2.2.1 Background\n\n   In an effort that started in 1990, approximately a decade after RFC\n   821 was completed, the protocol was modified with a \"service\n   extensions\" model that permits the client and server to agree to\n   utilize shared functionality beyond the original SMTP requirements.\n   The SMTP extension mechanism defines a means whereby an extended SMTP\n   client and server may recognize each other, and the server can inform\n   the client as to the service extensions that it supports.\n\n   Contemporary SMTP implementations MUST support the basic extension\n   mechanisms.  For instance, servers MUST support the EHLO command even\n   if they do not implement any specific extensions and clients SHOULD\n   preferentially utilize EHLO rather than HELO.  (However, for\n   compatibility with older conforming implementations, SMTP clients and\n   servers MUST support the original HELO mechanisms as a fallback.)\n   Unless the different characteristics of HELO must be identified for\n   interoperability purposes, this document discusses only EHLO.\n\n   SMTP is widely deployed and high-quality implementations have proven\n   to be very robust.  However, the Internet community now considers\n   some services to be important that were not anticipated when the\n   protocol was first designed.  If support for those services is to be\n   added, it must be done in a way that permits older implementations to\n   continue working acceptably.  The extension framework consists of:\n\n\n\n\nKlensin                     Standards Track                     [Page 7]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   -  The SMTP command EHLO, superseding the earlier HELO,\n\n   -  a registry of SMTP service extensions,\n\n   -  additional parameters to the SMTP MAIL and RCPT commands, and\n\n   -  optional replacements for commands defined in this protocol, such\n      as for DATA in non-ASCII transmissions [33].\n\n   SMTP's strength comes primarily from its simplicity.  Experience with\n   many protocols has shown that protocols with few options tend towards\n   ubiquity, whereas protocols with many options tend towards obscurity.\n\n   Each and every extension, regardless of its benefits, must be\n   carefully scrutinized with respect to its implementation, deployment,\n   and interoperability costs.  In many cases, the cost of extending the\n   SMTP service will likely outweigh the benefit.\n\n2.2.2 Definition and Registration of Extensions\n\n   The IANA maintains a registry of SMTP service extensions.  A\n   corresponding EHLO keyword value is associated with each extension.\n   Each service extension registered with the IANA must be defined in a\n   formal standards-track or IESG-approved experimental protocol\n   document.  The definition must include:\n\n   -  the textual name of the SMTP service extension;\n\n   -  the EHLO keyword value associated with the extension;\n\n   -  the syntax and possible values of parameters associated with the\n      EHLO keyword value;\n\n   -  any additional SMTP verbs associated with the extension\n      (additional verbs will usually be, but are not required to be, the\n      same as the EHLO keyword value);\n\n   -  any new parameters the extension associates with the MAIL or RCPT\n      verbs;\n\n   -  a description of how support for the extension affects the\n      behavior of a server and client SMTP; and,\n\n   -  the increment by which the extension is increasing the maximum\n      length of the commands MAIL and/or RCPT, over that specified in\n      this standard.\n\n\n\n\n\nKlensin                     Standards Track                     [Page 8]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   In addition, any EHLO keyword value starting with an upper or lower\n   case \"X\" refers to a local SMTP service extension used exclusively\n   through bilateral agreement.  Keywords beginning with \"X\" MUST NOT be\n   used in a registered service extension.  Conversely, keyword values\n   presented in the EHLO response that do not begin with \"X\" MUST\n   correspond to a standard, standards-track, or IESG-approved\n   experimental SMTP service extension registered with IANA.  A\n   conforming server MUST NOT offer non-\"X\"-prefixed keyword values that\n   are not described in a registered extension.\n\n   Additional verbs and parameter names are bound by the same rules as\n   EHLO keywords; specifically, verbs beginning with \"X\" are local\n   extensions that may not be registered or standardized.  Conversely,\n   verbs not beginning with \"X\" must always be registered.\n\n2.3 Terminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described below.\n\n   1. MUST   This word, or the terms \"REQUIRED\" or \"SHALL\", mean that\n      the definition is an absolute requirement of the specification.\n\n   2. MUST NOT   This phrase, or the phrase \"SHALL NOT\", mean that the\n      definition is an absolute prohibition of the specification.\n\n   3. SHOULD   This word, or the adjective \"RECOMMENDED\", mean that\n      there may exist valid reasons in particular circumstances to\n      ignore a particular item, but the full implications must be\n      understood and carefully weighed before choosing a different\n      course.\n\n   4. SHOULD NOT   This phrase, or the phrase \"NOT RECOMMENDED\" mean\n      that there may exist valid reasons in particular circumstances\n      when the particular behavior is acceptable or even useful, but the\n      full implications should be understood and the case carefully\n      weighed before implementing any behavior described with this\n      label.\n\n   5. MAY   This word, or the adjective \"OPTIONAL\", mean that an item is\n      truly optional.  One vendor may choose to include the item because\n      a particular marketplace requires it or because the vendor feels\n      that it enhances the product while another vendor may omit the\n      same item.  An implementation which does not include a particular\n      option MUST be prepared to interoperate with another\n      implementation which does include the option, though perhaps with\n      reduced functionality.  In the same vein an implementation which\n\n\n\nKlensin                     Standards Track                     [Page 9]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      does include a particular option MUST be prepared to interoperate\n      with another implementation which does not include the option\n      (except, of course, for the feature the option provides.)\n\n2.3.1 Mail Objects\n\n   SMTP transports a mail object.  A mail object contains an envelope\n   and content.\n\n   The SMTP envelope is sent as a series of SMTP protocol units\n   (described in section 3).  It consists of an originator address (to\n   which error reports should be directed); one or more recipient\n   addresses; and optional protocol extension material.  Historically,\n   variations on the recipient address specification command (RCPT TO)\n   could be used to specify alternate delivery modes, such as immediate\n   display; those variations have now been deprecated (see appendix F,\n   section F.6).\n\n   The SMTP content is sent in the SMTP DATA protocol unit and has two\n   parts:  the headers and the body.  If the content conforms to other\n   contemporary standards, the headers form a collection of field/value\n   pairs structured as in the message format specification [32]; the\n   body, if structured, is defined according to MIME [12].  The content\n   is textual in nature, expressed using the US-ASCII repertoire [1].\n   Although SMTP extensions (such as \"8BITMIME\" [20]) may relax this\n   restriction for the content body, the content headers are always\n   encoded using the US-ASCII repertoire.  A MIME extension [23] defines\n   an algorithm for representing header values outside the US-ASCII\n   repertoire, while still encoding them using the US-ASCII repertoire.\n\n2.3.2 Senders and Receivers\n\n   In RFC 821, the two hosts participating in an SMTP transaction were\n   described as the \"SMTP-sender\" and \"SMTP-receiver\".  This document\n   has been changed to reflect current industry terminology and hence\n   refers to them as the \"SMTP client\" (or sometimes just \"the client\")\n   and \"SMTP server\" (or just \"the server\"), respectively.  Since a\n   given host may act both as server and client in a relay situation,\n   \"receiver\" and \"sender\" terminology is still used where needed for\n   clarity.\n\n2.3.3 Mail Agents and Message Stores\n\n   Additional mail system terminology became common after RFC 821 was\n   published and, where convenient, is used in this specification.  In\n   particular, SMTP servers and clients provide a mail transport service\n   and therefore act as \"Mail Transfer Agents\" (MTAs).  \"Mail User\n   Agents\" (MUAs or UAs) are normally thought of as the sources and\n\n\n\nKlensin                     Standards Track                    [Page 10]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   targets of mail.  At the source, an MUA might collect mail to be\n   transmitted from a user and hand it off to an MTA; the final\n   (\"delivery\") MTA would be thought of as handing the mail off to an\n   MUA (or at least transferring responsibility to it, e.g., by\n   depositing the message in a \"message store\").  However, while these\n   terms are used with at least the appearance of great precision in\n   other environments, the implied boundaries between MUAs and MTAs\n   often do not accurately match common, and conforming, practices with\n   Internet mail.  Hence, the reader should be cautious about inferring\n   the strong relationships and responsibilities that might be implied\n   if these terms were used elsewhere.\n\n2.3.4 Host\n\n   For the purposes of this specification, a host is a computer system\n   attached to the Internet (or, in some cases, to a private TCP/IP\n   network) and supporting the SMTP protocol.  Hosts are known by names\n   (see \"domain\"); identifying them by numerical address is discouraged.\n\n2.3.5 Domain\n\n   A domain (or domain name) consists of one or more dot-separated\n   components.  These components (\"labels\" in DNS terminology [22]) are\n   restricted for SMTP purposes to consist of a sequence of letters,\n   digits, and hyphens drawn from the ASCII character set [1].  Domain\n   names are used as names of hosts and of other entities in the domain\n   name hierarchy.  For example, a domain may refer to an alias (label\n   of a CNAME RR) or the label of Mail eXchanger records to be used to\n   deliver mail instead of representing a host name.  See [22] and\n   section 5 of this specification.\n\n   The domain name, as described in this document and in [22], is the\n   entire, fully-qualified name (often referred to as an \"FQDN\").  A\n   domain name that is not in FQDN form is no more than a local alias.\n   Local aliases MUST NOT appear in any SMTP transaction.\n\n2.3.6 Buffer and State Table\n\n   SMTP sessions are stateful, with both parties carefully maintaining a\n   common view of the current state.  In this document we model this\n   state by a virtual \"buffer\" and a \"state table\" on the server which\n   may be used by the client to, for example, \"clear the buffer\" or\n   \"reset the state table,\" causing the information in the buffer to be\n   discarded and the state to be returned to some previous state.\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 11]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n2.3.7 Lines\n\n   SMTP commands and, unless altered by a service extension, message\n   data, are transmitted in \"lines\".  Lines consist of zero or more data\n   characters terminated by the sequence ASCII character \"CR\" (hex value\n   0D) followed immediately by ASCII character \"LF\" (hex value 0A).\n   This termination sequence is denoted as <CRLF> in this document.\n   Conforming implementations MUST NOT recognize or generate any other\n   character or character sequence as a line terminator.  Limits MAY be\n   imposed on line lengths by servers (see section 4.5.3).\n\n   In addition, the appearance of \"bare\" \"CR\" or \"LF\" characters in text\n   (i.e., either without the other) has a long history of causing\n   problems in mail implementations and applications that use the mail\n   system as a tool.  SMTP client implementations MUST NOT transmit\n   these characters except when they are intended as line terminators\n   and then MUST, as indicated above, transmit them only as a <CRLF>\n   sequence.\n\n2.3.8 Originator, Delivery, Relay, and Gateway Systems\n\n   This specification makes a distinction among four types of SMTP\n   systems, based on the role those systems play in transmitting\n   electronic mail.  An \"originating\" system (sometimes called an SMTP\n   originator) introduces mail into the Internet or, more generally,\n   into a transport service environment.  A \"delivery\" SMTP system is\n   one that receives mail from a transport service environment and\n   passes it to a mail user agent or deposits it in a message store\n   which a mail user agent is expected to subsequently access.  A\n   \"relay\" SMTP system (usually referred to just as a \"relay\") receives\n   mail from an SMTP client and transmits it, without modification to\n   the message data other than adding trace information, to another SMTP\n   server for further relaying or for delivery.\n\n   A \"gateway\" SMTP system (usually referred to just as a \"gateway\")\n   receives mail from a client system in one transport environment and\n   transmits it to a server system in another transport environment.\n   Differences in protocols or message semantics between the transport\n   environments on either side of a gateway may require that the gateway\n   system perform transformations to the message that are not permitted\n   to SMTP relay systems.  For the purposes of this specification,\n   firewalls that rewrite addresses should be considered as gateways,\n   even if SMTP is used on both sides of them (see [11]).\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 12]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n2.3.9 Message Content and Mail Data\n\n   The terms \"message content\" and \"mail data\" are used interchangeably\n   in this document to describe the material transmitted after the DATA\n   command is accepted and before the end of data indication is\n   transmitted.  Message content includes message headers and the\n   possibly-structured message body.  The MIME specification [12]\n   provides the standard mechanisms for structured message bodies.\n\n2.3.10 Mailbox and Address\n\n   As used in this specification, an \"address\" is a character string\n   that identifies a user to whom mail will be sent or a location into\n   which mail will be deposited.  The term \"mailbox\" refers to that\n   depository.  The two terms are typically used interchangeably unless\n   the distinction between the location in which mail is placed (the\n   mailbox) and a reference to it (the address) is important.  An\n   address normally consists of user and domain specifications.  The\n   standard mailbox naming convention is defined to be \"local-\n   part@domain\": contemporary usage permits a much broader set of\n   applications than simple \"user names\".  Consequently, and due to a\n   long history of problems when intermediate hosts have attempted to\n   optimize transport by modifying them, the local-part MUST be\n   interpreted and assigned semantics only by the host specified in the\n   domain part of the address.\n\n2.3.11 Reply\n\n   An SMTP reply is an acknowledgment (positive or negative) sent from\n   receiver to sender via the transmission channel in response to a\n   command.  The general form of a reply is a numeric completion code\n   (indicating failure or success) usually followed by a text string.\n   The codes are for use by programs and the text is usually intended\n   for human users.  Recent work [34] has specified further structuring\n   of the reply strings, including the use of supplemental and more\n   specific completion codes.\n\n2.4 General Syntax Principles and Transaction Model\n\n   SMTP commands and replies have a rigid syntax.  All commands begin\n   with a command verb.  All Replies begin with a three digit numeric\n   code.  In some commands and replies, arguments MUST follow the verb\n   or reply code.  Some commands do not accept arguments (after the\n   verb), and some reply codes are followed, sometimes optionally, by\n   free form text.  In both cases, where text appears, it is separated\n   from the verb or reply code by a space character.  Complete\n   definitions of commands and replies appear in section 4.\n\n\n\n\nKlensin                     Standards Track                    [Page 13]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   Verbs and argument values (e.g., \"TO:\" or \"to:\" in the RCPT command\n   and extension name keywords) are not case sensitive, with the sole\n   exception in this specification of a mailbox local-part (SMTP\n   Extensions may explicitly specify case-sensitive elements).  That is,\n   a command verb, an argument value other than a mailbox local-part,\n   and free form text MAY be encoded in upper case, lower case, or any\n   mixture of upper and lower case with no impact on its meaning.  This\n   is NOT true of a mailbox local-part.  The local-part of a mailbox\n   MUST BE treated as case sensitive.  Therefore, SMTP implementations\n   MUST take care to preserve the case of mailbox local-parts.  Mailbox\n   domains are not case sensitive.  In particular, for some hosts the\n   user \"smith\" is different from the user \"Smith\".  However, exploiting\n   the case sensitivity of mailbox local-parts impedes interoperability\n   and is discouraged.\n\n   A few SMTP servers, in violation of this specification (and RFC 821)\n   require that command verbs be encoded by clients in upper case.\n   Implementations MAY wish to employ this encoding to accommodate those\n   servers.\n\n   The argument field consists of a variable length character string\n   ending with the end of the line, i.e., with the character sequence\n   <CRLF>.  The receiver will take no action until this sequence is\n   received.\n\n   The syntax for each command is shown with the discussion of that\n   command.  Common elements and parameters are shown in section 4.1.2.\n\n   Commands and replies are composed of characters from the ASCII\n   character set [1].  When the transport service provides an 8-bit byte\n   (octet) transmission channel, each 7-bit character is transmitted\n   right justified in an octet with the high order bit cleared to zero.\n   More specifically, the unextended SMTP service provides seven bit\n   transport only.  An originating SMTP client which has not\n   successfully negotiated an appropriate extension with a particular\n   server MUST NOT transmit messages with information in the high-order\n   bit of octets.  If such messages are transmitted in violation of this\n   rule, receiving SMTP servers MAY clear the high-order bit or reject\n   the message as invalid.  In general, a relay SMTP SHOULD assume that\n   the message content it has received is valid and, assuming that the\n   envelope permits doing so, relay it without inspecting that content.\n   Of course, if the content is mislabeled and the data path cannot\n   accept the actual content, this may result in ultimate delivery of a\n   severely garbled message to the recipient.  Delivery SMTP systems MAY\n   reject (\"bounce\") such messages rather than deliver them.  No sending\n   SMTP system is permitted to send envelope commands in any character\n\n\n\n\n\nKlensin                     Standards Track                    [Page 14]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   set other than US-ASCII; receiving systems SHOULD reject such\n   commands, normally using \"500 syntax error - invalid character\"\n   replies.\n\n   Eight-bit message content transmission MAY be requested of the server\n   by a client using extended SMTP facilities, notably the \"8BITMIME\"\n   extension [20].  8BITMIME SHOULD be supported by SMTP servers.\n   However, it MUST not be construed as authorization to transmit\n   unrestricted eight bit material.  8BITMIME MUST NOT be requested by\n   senders for material with the high bit on that is not in MIME format\n   with an appropriate content-transfer encoding; servers MAY reject\n   such messages.\n\n   The metalinguistic notation used in this document corresponds to the\n   \"Augmented BNF\" used in other Internet mail system documents.  The\n   reader who is not familiar with that syntax should consult the ABNF\n   specification [8].  Metalanguage terms used in running text are\n   surrounded by pointed brackets (e.g., <CRLF>) for clarity.\n\n3. The SMTP Procedures: An Overview\n\n   This section contains descriptions of the procedures used in SMTP:\n   session initiation, the mail transaction, forwarding mail, verifying\n   mailbox names and expanding mailing lists, and the opening and\n   closing exchanges.  Comments on relaying, a note on mail domains, and\n   a discussion of changing roles are included at the end of this\n   section.  Several complete scenarios are presented in appendix D.\n\n3.1 Session Initiation\n\n   An SMTP session is initiated when a client opens a connection to a\n   server and the server responds with an opening message.\n\n   SMTP server implementations MAY include identification of their\n   software and version information in the connection greeting reply\n   after the 220 code, a practice that permits more efficient isolation\n   and repair of any problems.  Implementations MAY make provision for\n   SMTP servers to disable the software and version announcement where\n   it causes security concerns.  While some systems also identify their\n   contact point for mail problems, this is not a substitute for\n   maintaining the required \"postmaster\" address (see section 4.5.1).\n\n   The SMTP protocol allows a server to formally reject a transaction\n   while still allowing the initial connection as follows: a 554\n   response MAY be given in the initial connection opening message\n   instead of the 220.  A server taking this approach MUST still wait\n   for the client to send a QUIT (see section 4.1.1.10) before closing\n   the connection and SHOULD respond to any intervening commands with\n\n\n\nKlensin                     Standards Track                    [Page 15]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   \"503 bad sequence of commands\".  Since an attempt to make an SMTP\n   connection to such a system is probably in error, a server returning\n   a 554 response on connection opening SHOULD provide enough\n   information in the reply text to facilitate debugging of the sending\n   system.\n\n3.2 Client Initiation\n\n   Once the server has sent the welcoming message and the client has\n   received it, the client normally sends the EHLO command to the\n   server, indicating the client's identity.  In addition to opening the\n   session, use of EHLO indicates that the client is able to process\n   service extensions and requests that the server provide a list of the\n   extensions it supports.  Older SMTP systems which are unable to\n   support service extensions and contemporary clients which do not\n   require service extensions in the mail session being initiated, MAY\n   use HELO instead of EHLO.  Servers MUST NOT return the extended\n   EHLO-style response to a HELO command.  For a particular connection\n   attempt, if the server returns a \"command not recognized\" response to\n   EHLO, the client SHOULD be able to fall back and send HELO.\n\n   In the EHLO command the host sending the command identifies itself;\n   the command may be interpreted as saying \"Hello, I am <domain>\" (and,\n   in the case of EHLO, \"and I support service extension requests\").\n\n3.3 Mail Transactions\n\n   There are three steps to SMTP mail transactions.  The transaction\n   starts with a MAIL command which gives the sender identification.\n   (In general, the MAIL command may be sent only when no mail\n   transaction is in progress; see section 4.1.4.)  A series of one or\n   more RCPT commands follows giving the receiver information.  Then a\n   DATA command initiates transfer of the mail data and is terminated by\n   the \"end of mail\" data indicator, which also confirms the\n   transaction.\n\n   The first step in the procedure is the MAIL command.\n\n      MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF>\n\n   This command tells the SMTP-receiver that a new mail transaction is\n   starting and to reset all its state tables and buffers, including any\n   recipients or mail data.  The <reverse-path> portion of the first or\n   only argument contains the source mailbox (between \"<\" and \">\"\n   brackets), which can be used to report errors (see section 4.2 for a\n   discussion of error reporting).  If accepted, the SMTP server returns\n   a 250 OK reply.  If the mailbox specification is not acceptable for\n   some reason, the server MUST return a reply indicating whether the\n\n\n\nKlensin                     Standards Track                    [Page 16]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   failure is permanent (i.e., will occur again if the client tries to\n   send the same address again) or temporary (i.e., the address might be\n   accepted if the client tries again later).  Despite the apparent\n   scope of this requirement, there are circumstances in which the\n   acceptability of the reverse-path may not be determined until one or\n   more forward-paths (in RCPT commands) can be examined.  In those\n   cases, the server MAY reasonably accept the reverse-path (with a 250\n   reply) and then report problems after the forward-paths are received\n   and examined.  Normally, failures produce 550 or 553 replies.\n\n   Historically, the <reverse-path> can contain more than just a\n   mailbox, however, contemporary systems SHOULD NOT use source routing\n   (see appendix C).\n\n   The optional <mail-parameters> are associated with negotiated SMTP\n   service extensions (see section 2.2).\n\n   The second step in the procedure is the RCPT command.\n\n      RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF>\n\n   The first or only argument to this command includes a forward-path\n   (normally a mailbox and domain, always surrounded by \"<\" and \">\"\n   brackets) identifying one recipient.  If accepted, the SMTP server\n   returns a 250 OK reply and stores the forward-path.  If the recipient\n   is known not to be a deliverable address, the SMTP server returns a\n   550 reply, typically with a string such as \"no such user - \" and the\n   mailbox name (other circumstances and reply codes are possible).\n   This step of the procedure can be repeated any number of times.\n\n   The <forward-path> can contain more than just a mailbox.\n   Historically, the <forward-path> can be a source routing list of\n   hosts and the destination mailbox, however, contemporary SMTP clients\n   SHOULD NOT utilize source routes (see appendix C).  Servers MUST be\n   prepared to encounter a list of source routes in the forward path,\n   but SHOULD ignore the routes or MAY decline to support the relaying\n   they imply.  Similarly, servers MAY decline to accept mail that is\n   destined for other hosts or systems.  These restrictions make a\n   server useless as a relay for clients that do not support full SMTP\n   functionality.  Consequently, restricted-capability clients MUST NOT\n   assume that any SMTP server on the Internet can be used as their mail\n   processing (relaying) site.  If a RCPT command appears without a\n   previous MAIL command, the server MUST return a 503 \"Bad sequence of\n   commands\" response.  The optional <rcpt-parameters> are associated\n   with negotiated SMTP service extensions (see section 2.2).\n\n   The third step in the procedure is the DATA command (or some\n   alternative specified in a service extension).\n\n\n\nKlensin                     Standards Track                    [Page 17]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      DATA <CRLF>\n\n   If accepted, the SMTP server returns a 354 Intermediate reply and\n   considers all succeeding lines up to but not including the end of\n   mail data indicator to be the message text.  When the end of text is\n   successfully received and stored the SMTP-receiver sends a 250 OK\n   reply.\n\n   Since the mail data is sent on the transmission channel, the end of\n   mail data must be indicated so that the command and reply dialog can\n   be resumed.  SMTP indicates the end of the mail data by sending a\n   line containing only a \".\" (period or full stop).  A transparency\n   procedure is used to prevent this from interfering with the user's\n   text (see section 4.5.2).\n\n   The end of mail data indicator also confirms the mail transaction and\n   tells the SMTP server to now process the stored recipients and mail\n   data.  If accepted, the SMTP server returns a 250 OK reply.  The DATA\n   command can fail at only two points in the protocol exchange:\n\n   -  If there was no MAIL, or no RCPT, command, or all such commands\n      were rejected, the server MAY return a \"command out of sequence\"\n      (503) or \"no valid recipients\" (554) reply in response to the DATA\n      command.  If one of those replies (or any other 5yz reply) is\n      received, the client MUST NOT send the message data; more\n      generally, message data MUST NOT be sent unless a 354 reply is\n      received.\n\n   -  If the verb is initially accepted and the 354 reply issued, the\n      DATA command should fail only if the mail transaction was\n      incomplete (for example, no recipients), or if resources were\n      unavailable (including, of course, the server unexpectedly\n      becoming unavailable), or if the server determines that the\n      message should be rejected for policy or other reasons.\n\n   However, in practice, some servers do not perform recipient\n   verification until after the message text is received.  These servers\n   SHOULD treat a failure for one or more recipients as a \"subsequent\n   failure\" and return a mail message as discussed in section 6.  Using\n   a \"550 mailbox not found\" (or equivalent) reply code after the data\n   are accepted makes it difficult or impossible for the client to\n   determine which recipients failed.\n\n   When RFC 822 format [7, 32] is being used, the mail data include the\n   memo header items such as Date, Subject, To, Cc, From.  Server SMTP\n   systems SHOULD NOT reject messages based on perceived defects in the\n   RFC 822 or MIME [12] message header or message body.  In particular,\n\n\n\n\nKlensin                     Standards Track                    [Page 18]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   they MUST NOT reject messages in which the numbers of Resent-fields\n   do not match or Resent-to appears without Resent-from and/or Resent-\n   date.\n\n   Mail transaction commands MUST be used in the order discussed above.\n\n3.4 Forwarding for Address Correction or Updating\n\n   Forwarding support is most often required to consolidate and simplify\n   addresses within, or relative to, some enterprise and less frequently\n   to establish addresses to link a person's prior address with current\n   one.  Silent forwarding of messages (without server notification to\n   the sender), for security or non-disclosure purposes, is common in\n   the contemporary Internet.\n\n   In both the enterprise and the \"new address\" cases, information\n   hiding (and sometimes security) considerations argue against exposure\n   of the \"final\" address through the SMTP protocol as a side-effect of\n   the forwarding activity.  This may be especially important when the\n   final address may not even be reachable by the sender.  Consequently,\n   the \"forwarding\" mechanisms described in section 3.2 of RFC 821, and\n   especially the 251 (corrected destination) and 551 reply codes from\n   RCPT must be evaluated carefully by implementers and, when they are\n   available, by those configuring systems.\n\n   In particular:\n\n   *  Servers MAY forward messages when they are aware of an address\n      change.  When they do so, they MAY either provide address-updating\n      information with a 251 code, or may forward \"silently\" and return\n      a 250 code.  But, if a 251 code is used, they MUST NOT assume that\n      the client will actually update address information or even return\n      that information to the user.\n\n   Alternately,\n\n   *  Servers MAY reject or bounce messages when they are not\n      deliverable when addressed.  When they do so, they MAY either\n      provide address-updating information with a 551 code, or may\n      reject the message as undeliverable with a 550 code and no\n      address-specific information.  But, if a 551 code is used, they\n      MUST NOT assume that the client will actually update address\n      information or even return that information to the user.\n\n   SMTP server implementations that support the 251 and/or 551 reply\n   codes are strongly encouraged to provide configuration mechanisms so\n   that sites which conclude that they would undesirably disclose\n   information can disable or restrict their use.\n\n\n\nKlensin                     Standards Track                    [Page 19]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n3.5 Commands for Debugging Addresses\n\n3.5.1 Overview\n\n   SMTP provides commands to verify a user name or obtain the content of\n   a mailing list.  This is done with the VRFY and EXPN commands, which\n   have character string arguments.  Implementations SHOULD support VRFY\n   and EXPN (however, see section 3.5.2 and 7.3).\n\n   For the VRFY command, the string is a user name or a user name and\n   domain (see below).  If a normal (i.e., 250) response is returned,\n   the response MAY include the full name of the user and MUST include\n   the mailbox of the user.  It MUST be in either of the following\n   forms:\n\n      User Name <local-part@domain>\n      local-part@domain\n\n   When a name that is the argument to VRFY could identify more than one\n   mailbox, the server MAY either note the ambiguity or identify the\n   alternatives.  In other words, any of the following are legitimate\n   response to VRFY:\n\n      553 User ambiguous\n\n   or\n\n      553- Ambiguous;  Possibilities are\n      553-Joe Smith <jsmith@foo.com>\n      553-Harry Smith <hsmith@foo.com>\n      553 Melvin Smith <dweep@foo.com>\n\n   or\n\n      553-Ambiguous;  Possibilities\n      553- <jsmith@foo.com>\n      553- <hsmith@foo.com>\n      553 <dweep@foo.com>\n\n   Under normal circumstances, a client receiving a 553 reply would be\n   expected to expose the result to the user.  Use of exactly the forms\n   given, and the \"user ambiguous\" or \"ambiguous\" keywords, possibly\n   supplemented by extended reply codes such as those described in [34],\n   will facilitate automated translation into other languages as needed.\n   Of course, a client that was highly automated or that was operating\n   in another language than English, might choose to try to translate\n   the response, to return some other indication to the user than the\n\n\n\n\nKlensin                     Standards Track                    [Page 20]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   literal text of the reply, or to take some automated action such as\n   consulting a directory service for additional information before\n   reporting to the user.\n\n   For the EXPN command, the string identifies a mailing list, and the\n   successful (i.e., 250) multiline response MAY include the full name\n   of the users and MUST give the mailboxes on the mailing list.\n\n   In some hosts the distinction between a mailing list and an alias for\n   a single mailbox is a bit fuzzy, since a common data structure may\n   hold both types of entries, and it is possible to have mailing lists\n   containing only one mailbox.  If a request is made to apply VRFY to a\n   mailing list, a positive response MAY be given if a message so\n   addressed would be delivered to everyone on the list, otherwise an\n   error SHOULD be reported (e.g., \"550 That is a mailing list, not a\n   user\" or \"252 Unable to verify members of mailing list\").  If a\n   request is made to expand a user name, the server MAY return a\n   positive response consisting of a list containing one name, or an\n   error MAY be reported (e.g., \"550 That is a user name, not a mailing\n   list\").\n\n   In the case of a successful multiline reply (normal for EXPN) exactly\n   one mailbox is to be specified on each line of the reply.  The case\n   of an ambiguous request is discussed above.\n\n   \"User name\" is a fuzzy term and has been used deliberately.  An\n   implementation of the VRFY or EXPN commands MUST include at least\n   recognition of local mailboxes as \"user names\".  However, since\n   current Internet practice often results in a single host handling\n   mail for multiple domains, hosts, especially hosts that provide this\n   functionality, SHOULD accept the \"local-part@domain\" form as a \"user\n   name\"; hosts MAY also choose to recognize other strings as \"user\n   names\".\n\n   The case of expanding a mailbox list requires a multiline reply, such\n   as:\n\n      C: EXPN Example-People\n      S: 250-Jon Postel <Postel@isi.edu>\n      S: 250-Fred Fonebone <Fonebone@physics.foo-u.edu>\n      S: 250 Sam Q. Smith <SQSmith@specific.generic.com>\n\n   or\n\n      C: EXPN Executive-Washroom-List\n      S: 550 Access Denied to You.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 21]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   The character string arguments of the VRFY and EXPN commands cannot\n   be further restricted due to the variety of implementations of the\n   user name and mailbox list concepts.  On some systems it may be\n   appropriate for the argument of the EXPN command to be a file name\n   for a file containing a mailing list, but again there are a variety\n   of file naming conventions in the Internet.  Similarly, historical\n   variations in what is returned by these commands are such that the\n   response SHOULD be interpreted very carefully, if at all, and SHOULD\n   generally only be used for diagnostic purposes.\n\n3.5.2 VRFY Normal Response\n\n   When normal (2yz or 551) responses are returned from a VRFY or EXPN\n   request, the reply normally includes the mailbox name, i.e.,\n   \"<local-part@domain>\", where \"domain\" is a fully qualified domain\n   name, MUST appear in the syntax.  In circumstances exceptional enough\n   to justify violating the intent of this specification, free-form text\n   MAY be returned.  In order to facilitate parsing by both computers\n   and people, addresses SHOULD appear in pointed brackets.  When\n   addresses, rather than free-form debugging information, are returned,\n   EXPN and VRFY MUST return only valid domain addresses that are usable\n   in SMTP RCPT commands.  Consequently, if an address implies delivery\n   to a program or other system, the mailbox name used to reach that\n   target MUST be given.  Paths (explicit source routes) MUST NOT be\n   returned by VRFY or EXPN.\n\n   Server implementations SHOULD support both VRFY and EXPN.  For\n   security reasons, implementations MAY provide local installations a\n   way to disable either or both of these commands through configuration\n   options or the equivalent.  When these commands are supported, they\n   are not required to work across relays when relaying is supported.\n   Since they were both optional in RFC 821, they MUST be listed as\n   service extensions in an EHLO response, if they are supported.\n\n3.5.3 Meaning of VRFY or EXPN Success Response\n\n   A server MUST NOT return a 250 code in response to a VRFY or EXPN\n   command unless it has actually verified the address.  In particular,\n   a server MUST NOT return 250 if all it has done is to verify that the\n   syntax given is valid.  In that case, 502 (Command not implemented)\n   or 500 (Syntax error, command unrecognized) SHOULD be returned.  As\n   stated elsewhere, implementation (in the sense of actually validating\n   addresses and returning information) of VRFY and EXPN are strongly\n   recommended.  Hence, implementations that return 500 or 502 for VRFY\n   are not in full compliance with this specification.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 22]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   There may be circumstances where an address appears to be valid but\n   cannot reasonably be verified in real time, particularly when a\n   server is acting as a mail exchanger for another server or domain.\n   \"Apparent validity\" in this case would normally involve at least\n   syntax checking and might involve verification that any domains\n   specified were ones to which the host expected to be able to relay\n   mail.  In these situations, reply code 252 SHOULD be returned.  These\n   cases parallel the discussion of RCPT verification discussed in\n   section 2.1.  Similarly, the discussion in section 3.4 applies to the\n   use of reply codes 251 and 551 with VRFY (and EXPN) to indicate\n   addresses that are recognized but that would be forwarded or bounced\n   were mail received for them.  Implementations generally SHOULD be\n   more aggressive about address verification in the case of VRFY than\n   in the case of RCPT, even if it takes a little longer to do so.\n\n3.5.4 Semantics and Applications of EXPN\n\n   EXPN is often very useful in debugging and understanding problems\n   with mailing lists and multiple-target-address aliases.  Some systems\n   have attempted to use source expansion of mailing lists as a means of\n   eliminating duplicates.  The propagation of aliasing systems with\n   mail on the Internet, for hosts (typically with MX and CNAME DNS\n   records), for mailboxes (various types of local host aliases), and in\n   various proxying arrangements, has made it nearly impossible for\n   these strategies to work consistently, and mail systems SHOULD NOT\n   attempt them.\n\n3.6 Domains\n\n   Only resolvable, fully-qualified, domain names (FQDNs) are permitted\n   when domain names are used in SMTP.  In other words, names that can\n   be resolved to MX RRs or A RRs (as discussed in section 5) are\n   permitted, as are CNAME RRs whose targets can be resolved, in turn,\n   to MX or A RRs.  Local nicknames or unqualified names MUST NOT be\n   used.  There are two exceptions to the rule requiring FQDNs:\n\n   -  The domain name given in the EHLO command MUST BE either a primary\n      host name (a domain name that resolves to an A RR) or, if the host\n      has no name, an address literal as described in section 4.1.1.1.\n\n   -  The reserved mailbox name \"postmaster\" may be used in a RCPT\n      command without domain qualification (see section 4.1.1.3) and\n      MUST be accepted if so used.\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 23]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n3.7 Relaying\n\n   In general, the availability of Mail eXchanger records in the domain\n   name system [22, 27] makes the use of explicit source routes in the\n   Internet mail system unnecessary.  Many historical problems with\n   their interpretation have made their use undesirable.  SMTP clients\n   SHOULD NOT generate explicit source routes except under unusual\n   circumstances.  SMTP servers MAY decline to act as mail relays or to\n   accept addresses that specify source routes.  When route information\n   is encountered, SMTP servers are also permitted to ignore the route\n   information and simply send to the final destination specified as the\n   last element in the route and SHOULD do so.  There has been an\n   invalid practice of using names that do not appear in the DNS as\n   destination names, with the senders counting on the intermediate\n   hosts specified in source routing to resolve any problems.  If source\n   routes are stripped, this practice will cause failures.  This is one\n   of several reasons why SMTP clients MUST NOT generate invalid source\n   routes or depend on serial resolution of names.\n\n   When source routes are not used, the process described in RFC 821 for\n   constructing a reverse-path from the forward-path is not applicable\n   and the reverse-path at the time of delivery will simply be the\n   address that appeared in the MAIL command.\n\n   A relay SMTP server is usually the target of a DNS MX record that\n   designates it, rather than the final delivery system.  The relay\n   server may accept or reject the task of relaying the mail in the same\n   way it accepts or rejects mail for a local user.  If it accepts the\n   task, it then becomes an SMTP client, establishes a transmission\n   channel to the next SMTP server specified in the DNS (according to\n   the rules in section 5), and sends it the mail.  If it declines to\n   relay mail to a particular address for policy reasons, a 550 response\n   SHOULD be returned.\n\n   Many mail-sending clients exist, especially in conjunction with\n   facilities that receive mail via POP3 or IMAP, that have limited\n   capability to support some of the requirements of this specification,\n   such as the ability to queue messages for subsequent delivery\n   attempts.  For these clients, it is common practice to make private\n   arrangements to send all messages to a single server for processing\n   and subsequent distribution.  SMTP, as specified here, is not ideally\n   suited for this role, and work is underway on standardized mail\n   submission protocols that might eventually supercede the current\n   practices.  In any event, because these arrangements are private and\n   fall outside the scope of this specification, they are not described\n   here.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 24]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   It is important to note that MX records can point to SMTP servers\n   which act as gateways into other environments, not just SMTP relays\n   and final delivery systems; see sections 3.8 and 5.\n\n   If an SMTP server has accepted the task of relaying the mail and\n   later finds that the destination is incorrect or that the mail cannot\n   be delivered for some other reason, then it MUST construct an\n   \"undeliverable mail\" notification message and send it to the\n   originator of the undeliverable mail (as indicated by the reverse-\n   path).  Formats specified for non-delivery reports by other standards\n   (see, for example, [24, 25]) SHOULD be used if possible.\n\n   This notification message must be from the SMTP server at the relay\n   host or the host that first determines that delivery cannot be\n   accomplished.  Of course, SMTP servers MUST NOT send notification\n   messages about problems transporting notification messages.  One way\n   to prevent loops in error reporting is to specify a null reverse-path\n   in the MAIL command of a notification message.  When such a message\n   is transmitted the reverse-path MUST be set to null (see section\n   4.5.5 for additional discussion).  A MAIL command with a null\n   reverse-path appears as follows:\n\n      MAIL FROM:<>\n\n   As discussed in section 2.4.1, a relay SMTP has no need to inspect or\n   act upon the headers or body of the message data and MUST NOT do so\n   except to add its own \"Received:\" header (section 4.4) and,\n   optionally, to attempt to detect looping in the mail system (see\n   section 6.2).\n\n3.8 Mail Gatewaying\n\n   While the relay function discussed above operates within the Internet\n   SMTP transport service environment, MX records or various forms of\n   explicit routing may require that an intermediate SMTP server perform\n   a translation function between one transport service and another.  As\n   discussed in section 2.3.8, when such a system is at the boundary\n   between two transport service environments, we refer to it as a\n   \"gateway\" or \"gateway SMTP\".\n\n   Gatewaying mail between different mail environments, such as\n   different mail formats and protocols, is complex and does not easily\n   yield to standardization.  However, some general requirements may be\n   given for a gateway between the Internet and another mail\n   environment.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 25]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n3.8.1 Header Fields in Gatewaying\n\n   Header fields MAY be rewritten when necessary as messages are\n   gatewayed across mail environment boundaries.  This may involve\n   inspecting the message body or interpreting the local-part of the\n   destination address in spite of the prohibitions in section 2.4.1.\n\n   Other mail systems gatewayed to the Internet often use a subset of\n   RFC 822 headers or provide similar functionality with a different\n   syntax, but some of these mail systems do not have an equivalent to\n   the SMTP envelope.  Therefore, when a message leaves the Internet\n   environment, it may be necessary to fold the SMTP envelope\n   information into the message header.  A possible solution would be to\n   create new header fields to carry the envelope information (e.g.,\n   \"X-SMTP-MAIL:\"  and \"X-SMTP-RCPT:\"); however, this would require\n   changes in mail programs in foreign environments and might risk\n   disclosure of private information (see section 7.2).\n\n3.8.2 Received Lines in Gatewaying\n\n   When forwarding a message into or out of the Internet environment, a\n   gateway MUST prepend a Received: line, but it MUST NOT alter in any\n   way a Received: line that is already in the header.\n\n   \"Received:\" fields of messages originating from other environments\n   may not conform exactly to this specification.  However, the most\n   important use of Received: lines is for debugging mail faults, and\n   this debugging can be severely hampered by well-meaning gateways that\n   try to \"fix\" a Received: line.  As another consequence of trace\n   fields arising in non-SMTP environments, receiving systems MUST NOT\n   reject mail based on the format of a trace field and SHOULD be\n   extremely robust in the light of unexpected information or formats in\n   those fields.\n\n   The gateway SHOULD indicate the environment and protocol in the \"via\"\n   clauses of Received field(s) that it supplies.\n\n3.8.3 Addresses in Gatewaying\n\n   From the Internet side, the gateway SHOULD accept all valid address\n   formats in SMTP commands and in RFC 822 headers, and all valid RFC\n   822 messages.  Addresses and headers generated by gateways MUST\n   conform to applicable Internet standards (including this one and RFC\n   822).  Gateways are, of course, subject to the same rules for\n   handling source routes as those described for other SMTP systems in\n   section 3.3.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 26]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n3.8.4 Other Header Fields in Gatewaying\n\n   The gateway MUST ensure that all header fields of a message that it\n   forwards into the Internet mail environment meet the requirements for\n   Internet mail.  In particular, all addresses in \"From:\", \"To:\",\n   \"Cc:\", etc., fields MUST be transformed (if necessary) to satisfy RFC\n   822 syntax, MUST reference only fully-qualified domain names, and\n   MUST be effective and useful for sending replies.  The translation\n   algorithm used to convert mail from the Internet protocols to another\n   environment's protocol SHOULD ensure that error messages from the\n   foreign mail environment are delivered to the return path from the\n   SMTP envelope, not to the sender listed in the \"From:\" field (or\n   other fields) of the RFC 822 message.\n\n3.8.5 Envelopes in Gatewaying\n\n   Similarly, when forwarding a message from another environment into\n   the Internet, the gateway SHOULD set the envelope return path in\n   accordance with an error message return address, if supplied by the\n   foreign environment.  If the foreign environment has no equivalent\n   concept, the gateway must select and use a best approximation, with\n   the message originator's address as the default of last resort.\n\n3.9 Terminating Sessions and Connections\n\n   An SMTP connection is terminated when the client sends a QUIT\n   command.  The server responds with a positive reply code, after which\n   it closes the connection.\n\n   An SMTP server MUST NOT intentionally close the connection except:\n\n   -  After receiving a QUIT command and responding with a 221 reply.\n\n   -  After detecting the need to shut down the SMTP service and\n      returning a 421 response code.  This response code can be issued\n      after the server receives any command or, if necessary,\n      asynchronously from command receipt (on the assumption that the\n      client will receive it after the next command is issued).\n\n   In particular, a server that closes connections in response to\n   commands that are not understood is in violation of this\n   specification.  Servers are expected to be tolerant of unknown\n   commands, issuing a 500 reply and awaiting further instructions from\n   the client.\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 27]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   An SMTP server which is forcibly shut down via external means SHOULD\n   attempt to send a line containing a 421 response code to the SMTP\n   client before exiting.  The SMTP client will normally read the 421\n   response code after sending its next command.\n\n   SMTP clients that experience a connection close, reset, or other\n   communications failure due to circumstances not under their control\n   (in violation of the intent of this specification but sometimes\n   unavoidable) SHOULD, to maintain the robustness of the mail system,\n   treat the mail transaction as if a 451 response had been received and\n   act accordingly.\n\n3.10 Mailing Lists and Aliases\n\n   An SMTP-capable host SHOULD support both the alias and the list\n   models of address expansion for multiple delivery.  When a message is\n   delivered or forwarded to each address of an expanded list form, the\n   return address in the envelope (\"MAIL FROM:\") MUST be changed to be\n   the address of a person or other entity who administers the list.\n   However, in this case, the message header [32] MUST be left\n   unchanged; in particular, the \"From\" field of the message header is\n   unaffected.\n\n   An important mail facility is a mechanism for multi-destination\n   delivery of a single message, by transforming (or \"expanding\" or\n   \"exploding\") a pseudo-mailbox address into a list of destination\n   mailbox addresses.  When a message is sent to such a pseudo-mailbox\n   (sometimes called an \"exploder\"), copies are forwarded or\n   redistributed to each mailbox in the expanded list.  Servers SHOULD\n   simply utilize the addresses on the list; application of heuristics\n   or other matching rules to eliminate some addresses, such as that of\n   the originator, is strongly discouraged.  We classify such a pseudo-\n   mailbox as an \"alias\" or a \"list\", depending upon the expansion\n   rules.\n\n3.10.1 Alias\n\n   To expand an alias, the recipient mailer simply replaces the pseudo-\n   mailbox address in the envelope with each of the expanded addresses\n   in turn; the rest of the envelope and the message body are left\n   unchanged.  The message is then delivered or forwarded to each\n   expanded address.\n\n3.10.2 List\n\n   A mailing list may be said to operate by \"redistribution\" rather than\n   by \"forwarding\".  To expand a list, the recipient mailer replaces the\n   pseudo-mailbox address in the envelope with all of the expanded\n\n\n\nKlensin                     Standards Track                    [Page 28]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   addresses.  The return address in the envelope is changed so that all\n   error messages generated by the final deliveries will be returned to\n   a list administrator, not to the message originator, who generally\n   has no control over the contents of the list and will typically find\n   error messages annoying.\n\n4. The SMTP Specifications\n\n4.1 SMTP Commands\n\n4.1.1 Command Semantics and Syntax\n\n   The SMTP commands define the mail transfer or the mail system\n   function requested by the user.  SMTP commands are character strings\n   terminated by <CRLF>.  The commands themselves are alphabetic\n   characters terminated by <SP> if parameters follow and <CRLF>\n   otherwise.  (In the interest of improved interoperability, SMTP\n   receivers are encouraged to tolerate trailing white space before the\n   terminating <CRLF>.)  The syntax of the local part of a mailbox must\n   conform to receiver site conventions and the syntax specified in\n   section 4.1.2.  The SMTP commands are discussed below.  The SMTP\n   replies are discussed in section 4.2.\n\n   A mail transaction involves several data objects which are\n   communicated as arguments to different commands.  The reverse-path is\n   the argument of the MAIL command, the forward-path is the argument of\n   the RCPT command, and the mail data is the argument of the DATA\n   command.  These arguments or data objects must be transmitted and\n   held pending the confirmation communicated by the end of mail data\n   indication which finalizes the transaction.  The model for this is\n   that distinct buffers are provided to hold the types of data objects,\n   that is, there is a reverse-path buffer, a forward-path buffer, and a\n   mail data buffer.  Specific commands cause information to be appended\n   to a specific buffer, or cause one or more buffers to be cleared.\n\n   Several commands (RSET, DATA, QUIT) are specified as not permitting\n   parameters.  In the absence of specific extensions offered by the\n   server and accepted by the client, clients MUST NOT send such\n   parameters and servers SHOULD reject commands containing them as\n   having invalid syntax.\n\n4.1.1.1  Extended HELLO (EHLO) or HELLO (HELO)\n\n   These commands are used to identify the SMTP client to the SMTP\n   server.  The argument field contains the fully-qualified domain name\n   of the SMTP client if one is available.  In situations in which the\n   SMTP client system does not have a meaningful domain name (e.g., when\n   its address is dynamically allocated and no reverse mapping record is\n\n\n\nKlensin                     Standards Track                    [Page 29]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   available), the client SHOULD send an address literal (see section\n   4.1.3), optionally followed by information that will help to identify\n   the client system.  y The SMTP server identifies itself to the SMTP\n   client in the connection greeting reply and in the response to this\n   command.\n\n   A client SMTP SHOULD start an SMTP session by issuing the EHLO\n   command.  If the SMTP server supports the SMTP service extensions it\n   will give a successful response, a failure response, or an error\n   response.  If the SMTP server, in violation of this specification,\n   does not support any SMTP service extensions it will generate an\n   error response.  Older client SMTP systems MAY, as discussed above,\n   use HELO (as specified in RFC 821) instead of EHLO, and servers MUST\n   support the HELO command and reply properly to it.  In any event, a\n   client MUST issue HELO or EHLO before starting a mail transaction.\n\n   These commands, and a \"250 OK\" reply to one of them, confirm that\n   both the SMTP client and the SMTP server are in the initial state,\n   that is, there is no transaction in progress and all state tables and\n   buffers are cleared.\n\n   Syntax:\n\n      ehlo            = \"EHLO\" SP Domain CRLF\n      helo            = \"HELO\" SP Domain CRLF\n\n   Normally, the response to EHLO will be a multiline reply.  Each line\n   of the response contains a keyword and, optionally, one or more\n   parameters.  Following the normal syntax for multiline replies, these\n   keyworks follow the code (250) and a hyphen for all but the last\n   line, and the code and a space for the last line.  The syntax for a\n   positive response, using the ABNF notation and terminal symbols of\n   [8], is:\n\n      ehlo-ok-rsp  =    ( \"250\"    domain [ SP ehlo-greet ] CRLF )\n                   / (    \"250-\"   domain [ SP ehlo-greet ] CRLF\n                       *( \"250-\"   ehlo-line                CRLF )\n                          \"250\"    SP ehlo-line             CRLF  )\n\n      ehlo-greet   = 1*(%d0-9 / %d11-12 / %d14-127)\n                   ; string of any characters other than CR or LF\n\n      ehlo-line    = ehlo-keyword *( SP ehlo-param )\n\n      ehlo-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / \"-\")\n                   ; additional syntax of ehlo-params depends on\n                   ; ehlo-keyword\n\n\n\n\nKlensin                     Standards Track                    [Page 30]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      ehlo-param   = 1*(%d33-127)\n                   ; any CHAR excluding <SP> and all\n                   ; control characters (US-ASCII 0-31 inclusive)\n\n   Although EHLO keywords may be specified in upper, lower, or mixed\n   case, they MUST always be recognized and processed in a case-\n   insensitive manner.  This is simply an extension of practices\n   specified in RFC 821 and section 2.4.1.\n\n4.1.1.2 MAIL (MAIL)\n\n   This command is used to initiate a mail transaction in which the mail\n   data is delivered to an SMTP server which may, in turn, deliver it to\n   one or more mailboxes or pass it on to another system (possibly using\n   SMTP).  The argument field contains a reverse-path and may contain\n   optional parameters.  In general, the MAIL command may be sent only\n   when no mail transaction is in progress, see section 4.1.4.\n\n   The reverse-path consists of the sender mailbox.  Historically, that\n   mailbox might optionally have been preceded by a list of hosts, but\n   that behavior is now deprecated (see appendix C).  In some types of\n   reporting messages for which a reply is likely to cause a mail loop\n   (for example, mail delivery and nondelivery notifications), the\n   reverse-path may be null (see section 3.7).\n\n   This command clears the reverse-path buffer, the forward-path buffer,\n   and the mail data buffer; and inserts the reverse-path information\n   from this command into the reverse-path buffer.\n\n   If service extensions were negotiated, the MAIL command may also\n   carry parameters associated with a particular service extension.\n\n   Syntax:\n\n      \"MAIL FROM:\" (\"<>\" / Reverse-Path)\n                       [SP Mail-parameters] CRLF\n\n4.1.1.3 RECIPIENT (RCPT)\n\n   This command is used to identify an individual recipient of the mail\n   data; multiple recipients are specified by multiple use of this\n   command.  The argument field contains a forward-path and may contain\n   optional parameters.\n\n   The forward-path normally consists of the required destination\n   mailbox.  Sending systems SHOULD not generate the optional list of\n   hosts known as a source route.  Receiving systems MUST recognize\n\n\n\n\nKlensin                     Standards Track                    [Page 31]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   source route syntax but SHOULD strip off the source route\n   specification and utilize the domain name associated with the mailbox\n   as if the source route had not been provided.\n\n   Similarly, relay hosts SHOULD strip or ignore source routes, and\n   names MUST NOT be copied into the reverse-path.  When mail reaches\n   its ultimate destination (the forward-path contains only a\n   destination mailbox), the SMTP server inserts it into the destination\n   mailbox in accordance with its host mail conventions.\n\n   For example, mail received at relay host xyz.com with envelope\n   commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org>\n\n   will normally be sent directly on to host d.bar.org with envelope\n   commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<userc@d.bar.org>\n\n   As provided in appendix C, xyz.com MAY also choose to relay the\n   message to hosta.int, using the envelope commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org>\n\n   or to jkl.org, using the envelope commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<@jkl.org:userc@d.bar.org>\n\n   Of course, since hosts are not required to relay mail at all, xyz.com\n   may also reject the message entirely when the RCPT command is\n   received, using a 550 code (since this is a \"policy reason\").\n\n   If service extensions were negotiated, the RCPT command may also\n   carry parameters associated with a particular service extension\n   offered by the server.  The client MUST NOT transmit parameters other\n   than those associated with a service extension offered by the server\n   in its EHLO response.\n\nSyntax:\n   \"RCPT TO:\" (\"<Postmaster@\" domain \">\" / \"<Postmaster>\" / Forward-Path)\n                    [SP Rcpt-parameters] CRLF\n\n\n\n\n\nKlensin                     Standards Track                    [Page 32]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n4.1.1.4 DATA (DATA)\n\n   The receiver normally sends a 354 response to DATA, and then treats\n   the lines (strings ending in <CRLF> sequences, as described in\n   section 2.3.7) following the command as mail data from the sender.\n   This command causes the mail data to be appended to the mail data\n   buffer.  The mail data may contain any of the 128 ASCII character\n   codes, although experience has indicated that use of control\n   characters other than SP, HT, CR, and LF may cause problems and\n   SHOULD be avoided when possible.\n\n   The mail data is terminated by a line containing only a period, that\n   is, the character sequence \"<CRLF>.<CRLF>\" (see section 4.5.2).  This\n   is the end of mail data indication.  Note that the first <CRLF> of\n   this terminating sequence is also the <CRLF> that ends the final line\n   of the data (message text) or, if there was no data, ends the DATA\n   command itself.  An extra <CRLF> MUST NOT be added, as that would\n   cause an empty line to be added to the message.  The only exception\n   to this rule would arise if the message body were passed to the\n   originating SMTP-sender with a final \"line\" that did not end in\n   <CRLF>; in that case, the originating SMTP system MUST either reject\n   the message as invalid or add <CRLF> in order to have the receiving\n   SMTP server recognize the \"end of data\" condition.\n\n   The custom of accepting lines ending only in <LF>, as a concession to\n   non-conforming behavior on the part of some UNIX systems, has proven\n   to cause more interoperability problems than it solves, and SMTP\n   server systems MUST NOT do this, even in the name of improved\n   robustness.  In particular, the sequence \"<LF>.<LF>\" (bare line\n   feeds, without carriage returns) MUST NOT be treated as equivalent to\n   <CRLF>.<CRLF> as the end of mail data indication.\n\n   Receipt of the end of mail data indication requires the server to\n   process the stored mail transaction information.  This processing\n   consumes the information in the reverse-path buffer, the forward-path\n   buffer, and the mail data buffer, and on the completion of this\n   command these buffers are cleared.  If the processing is successful,\n   the receiver MUST send an OK reply.  If the processing fails the\n   receiver MUST send a failure reply.  The SMTP model does not allow\n   for partial failures at this point: either the message is accepted by\n   the server for delivery and a positive response is returned or it is\n   not accepted and a failure reply is returned.  In sending a positive\n   completion reply to the end of data indication, the receiver takes\n   full responsibility for the message (see section 6.1).  Errors that\n   are diagnosed subsequently MUST be reported in a mail message, as\n   discussed in section 4.4.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 33]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   When the SMTP server accepts a message either for relaying or for\n   final delivery, it inserts a trace record (also referred to\n   interchangeably as a \"time stamp line\" or \"Received\" line) at the top\n   of the mail data.  This trace record indicates the identity of the\n   host that sent the message, the identity of the host that received\n   the message (and is inserting this time stamp), and the date and time\n   the message was received.  Relayed messages will have multiple time\n   stamp lines.  Details for formation of these lines, including their\n   syntax, is specified in section 4.4.\n\n   Additional discussion about the operation of the DATA command appears\n   in section 3.3.\n\n   Syntax:\n      \"DATA\" CRLF\n\n4.1.1.5 RESET (RSET)\n\n   This command specifies that the current mail transaction will be\n   aborted.  Any stored sender, recipients, and mail data MUST be\n   discarded, and all buffers and state tables cleared.  The receiver\n   MUST send a \"250 OK\" reply to a RSET command with no arguments.  A\n   reset command may be issued by the client at any time.  It is\n   effectively equivalent to a NOOP (i.e., if has no effect) if issued\n   immediately after EHLO, before EHLO is issued in the session, after\n   an end-of-data indicator has been sent and acknowledged, or\n   immediately before a QUIT.  An SMTP server MUST NOT close the\n   connection as the result of receiving a RSET; that action is reserved\n   for QUIT (see section 4.1.1.10).\n\n   Since EHLO implies some additional processing and response by the\n   server, RSET will normally be more efficient than reissuing that\n   command, even though the formal semantics are the same.\n\n   There are circumstances, contrary to the intent of this\n   specification, in which an SMTP server may receive an indication that\n   the underlying TCP connection has been closed or reset.  To preserve\n   the robustness of the mail system, SMTP servers SHOULD be prepared\n   for this condition and SHOULD treat it as if a QUIT had been received\n   before the connection disappeared.\n\n   Syntax:\n      \"RSET\" CRLF\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 34]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n4.1.1.6 VERIFY (VRFY)\n\n   This command asks the receiver to confirm that the argument\n   identifies a user or mailbox.  If it is a user name, information is\n   returned as specified in section 3.5.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer.\n\n   Syntax:\n      \"VRFY\" SP String CRLF\n\n4.1.1.7 EXPAND (EXPN)\n\n   This command asks the receiver to confirm that the argument\n   identifies a mailing list, and if so, to return the membership of\n   that list.  If the command is successful, a reply is returned\n   containing information as described in section 3.5.  This reply will\n   have multiple lines except in the trivial case of a one-member list.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer and may be issued at any time.\n\n   Syntax:\n      \"EXPN\" SP String CRLF\n\n4.1.1.8 HELP (HELP)\n\n   This command causes the server to send helpful information to the\n   client.  The command MAY take an argument (e.g., any command name)\n   and return more specific information as a response.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer and may be issued at any time.\n\n   SMTP servers SHOULD support HELP without arguments and MAY support it\n   with arguments.\n\n   Syntax:\n      \"HELP\" [ SP String ] CRLF\n\n4.1.1.9 NOOP (NOOP)\n\n   This command does not affect any parameters or previously entered\n   commands.  It specifies no action other than that the receiver send\n   an OK reply.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 35]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer and may be issued at any time.\n   If a parameter string is specified, servers SHOULD ignore it.\n\n   Syntax:\n      \"NOOP\" [ SP String ] CRLF\n\n4.1.1.10 QUIT (QUIT)\n\n   This command specifies that the receiver MUST send an OK reply, and\n   then close the transmission channel.\n\n   The receiver MUST NOT intentionally close the transmission channel\n   until it receives and replies to a QUIT command (even if there was an\n   error).  The sender MUST NOT intentionally close the transmission\n   channel until it sends a QUIT command and SHOULD wait until it\n   receives the reply (even if there was an error response to a previous\n   command).  If the connection is closed prematurely due to violations\n   of the above or system or network failure, the server MUST cancel any\n   pending transaction, but not undo any previously completed\n   transaction, and generally MUST act as if the command or transaction\n   in progress had received a temporary error (i.e., a 4yz response).\n\n   The QUIT command may be issued at any time.\n\n   Syntax:\n      \"QUIT\" CRLF\n\n4.1.2 Command Argument Syntax\n\n   The syntax of the argument fields of the above commands (using the\n   syntax specified in [8] where applicable) is given below.  Some of\n   the productions given below are used only in conjunction with source\n   routes as described in appendix C.  Terminals not defined in this\n   document, such as ALPHA, DIGIT, SP, CR, LF, CRLF, are as defined in\n   the \"core\" syntax [8 (section 6)] or in the message format syntax\n   [32].\n\n      Reverse-path = Path\n      Forward-path = Path\n      Path = \"<\" [ A-d-l \":\" ] Mailbox \">\"\n      A-d-l = At-domain *( \",\" A-d-l )\n            ; Note that this form, the so-called \"source route\",\n            ; MUST BE accepted, SHOULD NOT be generated, and SHOULD be\n            ; ignored.\n      At-domain = \"@\" domain\n      Mail-parameters = esmtp-param *(SP esmtp-param)\n      Rcpt-parameters = esmtp-param *(SP esmtp-param)\n\n\n\nKlensin                     Standards Track                    [Page 36]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      esmtp-param     = esmtp-keyword [\"=\" esmtp-value]\n      esmtp-keyword   = (ALPHA / DIGIT) *(ALPHA / DIGIT / \"-\")\n      esmtp-value     = 1*(%d33-60 / %d62-127)\n            ; any CHAR excluding \"=\", SP, and control characters\n      Keyword  = Ldh-str\n      Argument = Atom\n      Domain = (sub-domain 1*(\".\" sub-domain)) / address-literal\n      sub-domain = Let-dig [Ldh-str]\n\n      address-literal = \"[\" IPv4-address-literal /\n                            IPv6-address-literal /\n                            General-address-literal \"]\"\n            ; See section 4.1.3\n\n      Mailbox = Local-part \"@\" Domain\n\n      Local-part = Dot-string / Quoted-string\n            ; MAY be case-sensitive\n\n      Dot-string = Atom *(\".\" Atom)\n\n      Atom = 1*atext\n\n      Quoted-string = DQUOTE *qcontent DQUOTE\n\n      String = Atom / Quoted-string\n\n   While the above definition for Local-part is relatively permissive,\n   for maximum interoperability, a host that expects to receive mail\n   SHOULD avoid defining mailboxes where the Local-part requires (or\n   uses) the Quoted-string form or where the Local-part is case-\n   sensitive.  For any purposes that require generating or comparing\n   Local-parts (e.g., to specific mailbox names), all quoted forms MUST\n   be treated as equivalent and the sending system SHOULD transmit the\n   form that uses the minimum quoting possible.\n\n   Systems MUST NOT define mailboxes in such a way as to require the use\n   in SMTP of non-ASCII characters (octets with the high order bit set\n   to one) or ASCII \"control characters\" (decimal value 0-31 and 127).\n   These characters MUST NOT be used in MAIL or RCPT commands or other\n   commands that require mailbox names.\n\n   Note that the backslash, \"\\\", is a quote character, which is used to\n   indicate that the next character is to be used literally (instead of\n   its normal interpretation).  For example, \"Joe\\,Smith\" indicates a\n   single nine character user field with the comma being the fourth\n   character of the field.\n\n\n\n\nKlensin                     Standards Track                    [Page 37]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   To promote interoperability and consistent with long-standing\n   guidance about conservative use of the DNS in naming and applications\n   (e.g., see section 2.3.1 of the base DNS document, RFC1035 [22]),\n   characters outside the set of alphas, digits, and hyphen MUST NOT\n   appear in domain name labels for SMTP clients or servers.  In\n   particular, the underscore character is not permitted.  SMTP servers\n   that receive a command in which invalid character codes have been\n   employed, and for which there are no other reasons for rejection,\n   MUST reject that command with a 501 response.\n\n4.1.3 Address Literals\n\n   Sometimes a host is not known to the domain name system and\n   communication (and, in particular, communication to report and repair\n   the error) is blocked.  To bypass this barrier a special literal form\n   of the address is allowed as an alternative to a domain name.  For\n   IPv4 addresses, this form uses four small decimal integers separated\n   by dots and enclosed by brackets such as [123.255.37.2], which\n   indicates an (IPv4) Internet Address in sequence-of-octets form.  For\n   IPv6 and other forms of addressing that might eventually be\n   standardized, the form consists of a standardized \"tag\" that\n   identifies the address syntax, a colon, and the address itself, in a\n   format specified as part of the IPv6 standards [17].\n\n   Specifically:\n\n      IPv4-address-literal = Snum 3(\".\" Snum)\n      IPv6-address-literal = \"IPv6:\" IPv6-addr\n      General-address-literal = Standardized-tag \":\" 1*dcontent\n      Standardized-tag = Ldh-str\n            ; MUST be specified in a standards-track RFC\n            ; and registered with IANA\n\n      Snum = 1*3DIGIT  ; representing a decimal integer\n            ; value in the range 0 through 255\n      Let-dig = ALPHA / DIGIT\n      Ldh-str = *( ALPHA / DIGIT / \"-\" ) Let-dig\n\n      IPv6-addr = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp\n      IPv6-hex  = 1*4HEXDIG\n      IPv6-full = IPv6-hex 7(\":\" IPv6-hex)\n      IPv6-comp = [IPv6-hex *5(\":\" IPv6-hex)] \"::\" [IPv6-hex *5(\":\"\n                 IPv6-hex)]\n            ; The \"::\" represents at least 2 16-bit groups of zeros\n            ; No more than 6 groups in addition to the \"::\" may be\n            ; present\n      IPv6v4-full = IPv6-hex 5(\":\" IPv6-hex) \":\" IPv4-address-literal\n      IPv6v4-comp = [IPv6-hex *3(\":\" IPv6-hex)] \"::\"\n\n\n\nKlensin                     Standards Track                    [Page 38]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n                   [IPv6-hex *3(\":\" IPv6-hex) \":\"] IPv4-address-literal\n            ; The \"::\" represents at least 2 16-bit groups of zeros\n            ; No more than 4 groups in addition to the \"::\" and\n            ; IPv4-address-literal may be present\n\n4.1.4 Order of Commands\n\n   There are restrictions on the order in which these commands may be\n   used.\n\n   A session that will contain mail transactions MUST first be\n   initialized by the use of the EHLO command.  An SMTP server SHOULD\n   accept commands for non-mail transactions (e.g., VRFY or EXPN)\n   without this initialization.\n\n   An EHLO command MAY be issued by a client later in the session.  If\n   it is issued after the session begins, the SMTP server MUST clear all\n   buffers and reset the state exactly as if a RSET command had been\n   issued.  In other words, the sequence of RSET followed immediately by\n   EHLO is redundant, but not harmful other than in the performance cost\n   of executing unnecessary commands.\n\n   If the EHLO command is not acceptable to the SMTP server, 501, 500,\n   or 502 failure replies MUST be returned as appropriate.  The SMTP\n   server MUST stay in the same state after transmitting these replies\n   that it was in before the EHLO was received.\n\n   The SMTP client MUST, if possible, ensure that the domain parameter\n   to the EHLO command is a valid principal host name (not a CNAME or MX\n   name) for its host.  If this is not possible (e.g., when the client's\n   address is dynamically assigned and the client does not have an\n   obvious name), an address literal SHOULD be substituted for the\n   domain name and supplemental information provided that will assist in\n   identifying the client.\n\n   An SMTP server MAY verify that the domain name parameter in the EHLO\n   command actually corresponds to the IP address of the client.\n   However, the server MUST NOT refuse to accept a message for this\n   reason if the verification fails: the information about verification\n   failure is for logging and tracing only.\n\n   The NOOP, HELP, EXPN, VRFY, and RSET commands can be used at any time\n   during a session, or without previously initializing a session.  SMTP\n   servers SHOULD process these normally (that is, not return a 503\n   code) even if no EHLO command has yet been received; clients SHOULD\n   open a session with EHLO before sending these commands.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 39]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   If these rules are followed, the example in RFC 821 that shows \"550\n   access denied to you\" in response to an EXPN command is incorrect\n   unless an EHLO command precedes the EXPN or the denial of access is\n   based on the client's IP address or other authentication or\n   authorization-determining mechanisms.\n\n   The MAIL command (or the obsolete SEND, SOML, or SAML commands)\n   begins a mail transaction.  Once started, a mail transaction consists\n   of a transaction beginning command, one or more RCPT commands, and a\n   DATA command, in that order.  A mail transaction may be aborted by\n   the RSET (or a new EHLO) command.  There may be zero or more\n   transactions in a session.  MAIL (or SEND, SOML, or SAML) MUST NOT be\n   sent if a mail transaction is already open, i.e., it should be sent\n   only if no mail transaction had been started in the session, or it\n   the previous one successfully concluded with a successful DATA\n   command, or if the previous one was aborted with a RSET.\n\n   If the transaction beginning command argument is not acceptable, a\n   501 failure reply MUST be returned and the SMTP server MUST stay in\n   the same state.  If the commands in a transaction are out of order to\n   the degree that they cannot be processed by the server, a 503 failure\n   reply MUST be returned and the SMTP server MUST stay in the same\n   state.\n\n   The last command in a session MUST be the QUIT command.  The QUIT\n   command cannot be used at any other time in a session, but SHOULD be\n   used by the client SMTP to request connection closure, even when no\n   session opening command was sent and accepted.\n\n4.1.5 Private-use Commands\n\n   As specified in section 2.2.2, commands starting in \"X\" may be used\n   by bilateral agreement between the client (sending) and server\n   (receiving) SMTP agents.  An SMTP server that does not recognize such\n   a command is expected to reply with \"500 Command not recognized\".  An\n   extended SMTP server MAY list the feature names associated with these\n   private commands in the response to the EHLO command.\n\n   Commands sent or accepted by SMTP systems that do not start with \"X\"\n   MUST conform to the requirements of section 2.2.2.\n\n4.2 SMTP Replies\n\n   Replies to SMTP commands serve to ensure the synchronization of\n   requests and actions in the process of mail transfer and to guarantee\n   that the SMTP client always knows the state of the SMTP server.\n   Every command MUST generate exactly one reply.\n\n\n\n\nKlensin                     Standards Track                    [Page 40]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   The details of the command-reply sequence are described in section\n   4.3.\n\n   An SMTP reply consists of a three digit number (transmitted as three\n   numeric characters) followed by some text unless specified otherwise\n   in this document.  The number is for use by automata to determine\n   what state to enter next; the text is for the human user.  The three\n   digits contain enough encoded information that the SMTP client need\n   not examine the text and may either discard it or pass it on to the\n   user, as appropriate.  Exceptions are as noted elsewhere in this\n   document.  In particular, the 220, 221, 251, 421, and 551 reply codes\n   are associated with message text that must be parsed and interpreted\n   by machines.  In the general case, the text may be receiver dependent\n   and context dependent, so there are likely to be varying texts for\n   each reply code.  A discussion of the theory of reply codes is given\n   in section 4.2.1.  Formally, a reply is defined to be the sequence: a\n   three-digit code, <SP>, one line of text, and <CRLF>, or a multiline\n   reply (as defined in section 4.2.1).  Since, in violation of this\n   specification, the text is sometimes not sent, clients which do not\n   receive it SHOULD be prepared to process the code alone (with or\n   without a trailing space character).  Only the EHLO, EXPN, and HELP\n   commands are expected to result in multiline replies in normal\n   circumstances, however, multiline replies are allowed for any\n   command.\n\n   In ABNF, server responses are:\n\n      Greeting = \"220 \" Domain [ SP text ] CRLF\n      Reply-line = Reply-code [ SP text ] CRLF\n\n   where \"Greeting\" appears only in the 220 response that announces that\n   the server is opening its part of the connection.\n\n   An SMTP server SHOULD send only the reply codes listed in this\n   document.  An SMTP server SHOULD use the text shown in the examples\n   whenever appropriate.\n\n   An SMTP client MUST determine its actions only by the reply code, not\n   by the text (except for the \"change of address\" 251 and 551 and, if\n   necessary, 220, 221, and 421 replies); in the general case, any text,\n   including no text at all (although senders SHOULD NOT send bare\n   codes), MUST be acceptable.  The space (blank) following the reply\n   code is considered part of the text.  Whenever possible, a receiver-\n   SMTP SHOULD test the first digit (severity indication) of the reply\n   code.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 41]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   The list of codes that appears below MUST NOT be construed as\n   permanent.  While the addition of new codes should be a rare and\n   significant activity, with supplemental information in the textual\n   part of the response being preferred, new codes may be added as the\n   result of new Standards or Standards-track specifications.\n   Consequently, a sender-SMTP MUST be prepared to handle codes not\n   specified in this document and MUST do so by interpreting the first\n   digit only.\n\n4.2.1 Reply Code Severities and Theory\n\n   The three digits of the reply each have a special significance.  The\n   first digit denotes whether the response is good, bad or incomplete.\n   An unsophisticated SMTP client, or one that receives an unexpected\n   code, will be able to determine its next action (proceed as planned,\n   redo, retrench, etc.) by examining this first digit.  An SMTP client\n   that wants to know approximately what kind of error occurred (e.g.,\n   mail system error, command syntax error) may examine the second\n   digit.  The third digit and any supplemental information that may be\n   present is reserved for the finest gradation of information.\n\n   There are five values for the first digit of the reply code:\n\n   1yz   Positive Preliminary reply\n      The command has been accepted, but the requested action is being\n      held in abeyance, pending confirmation of the information in this\n      reply.  The SMTP client should send another command specifying\n      whether to continue or abort the action.  Note: unextended SMTP\n      does not have any commands that allow this type of reply, and so\n      does not have continue or abort commands.\n\n   2yz   Positive Completion reply\n      The requested action has been successfully completed.  A new\n      request may be initiated.\n\n   3yz   Positive Intermediate reply\n      The command has been accepted, but the requested action is being\n      held in abeyance, pending receipt of further information.  The\n      SMTP client should send another command specifying this\n      information.  This reply is used in command sequence groups (i.e.,\n      in DATA).\n\n   4yz   Transient Negative Completion reply\n      The command was not accepted, and the requested action did not\n      occur.  However, the error condition is temporary and the action\n      may be requested again.  The sender should return to the beginning\n      of the command sequence (if any).  It is difficult to assign a\n      meaning to \"transient\" when two different sites (receiver- and\n\n\n\nKlensin                     Standards Track                    [Page 42]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      sender-SMTP agents) must agree on the interpretation.  Each reply\n      in this category might have a different time value, but the SMTP\n      client is encouraged to try again.  A rule of thumb to determine\n      whether a reply fits into the 4yz or the 5yz category (see below)\n      is that replies are 4yz if they can be successful if repeated\n      without any change in command form or in properties of the sender\n      or receiver (that is, the command is repeated identically and the\n      receiver does not put up a new implementation.)\n\n   5yz   Permanent Negative Completion reply\n      The command was not accepted and the requested action did not\n      occur.  The SMTP client is discouraged from repeating the exact\n      request (in the same sequence).  Even some \"permanent\" error\n      conditions can be corrected, so the human user may want to direct\n      the SMTP client to reinitiate the command sequence by direct\n      action at some point in the future (e.g., after the spelling has\n      been changed, or the user has altered the account status).\n\n   The second digit encodes responses in specific categories:\n\n   x0z   Syntax: These replies refer to syntax errors, syntactically\n      correct commands that do not fit any functional category, and\n      unimplemented or superfluous commands.\n\n   x1z   Information:  These are replies to requests for information,\n      such as status or help.\n\n   x2z   Connections: These are replies referring to the transmission\n      channel.\n\n   x3z   Unspecified.\n\n   x4z   Unspecified.\n\n   x5z   Mail system: These replies indicate the status of the receiver\n      mail system vis-a-vis the requested transfer or other mail system\n      action.\n\n   The third digit gives a finer gradation of meaning in each category\n   specified by the second digit.  The list of replies illustrates this.\n   Each reply text is recommended rather than mandatory, and may even\n   change according to the command with which it is associated.  On the\n   other hand, the reply codes must strictly follow the specifications\n   in this section.  Receiver implementations should not invent new\n   codes for slightly different situations from the ones described here,\n   but rather adapt codes already defined.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 43]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   For example, a command such as NOOP, whose successful execution does\n   not offer the SMTP client any new information, will return a 250\n   reply.  The reply is 502 when the command requests an unimplemented\n   non-site-specific action.  A refinement of that is the 504 reply for\n   a command that is implemented, but that requests an unimplemented\n   parameter.\n\n   The reply text may be longer than a single line; in these cases the\n   complete text must be marked so the SMTP client knows when it can\n   stop reading the reply.  This requires a special format to indicate a\n   multiple line reply.\n\n   The format for multiline replies requires that every line, except the\n   last, begin with the reply code, followed immediately by a hyphen,\n   \"-\" (also known as minus), followed by text.  The last line will\n   begin with the reply code, followed immediately by <SP>, optionally\n   some text, and <CRLF>.  As noted above, servers SHOULD send the <SP>\n   if subsequent text is not sent, but clients MUST be prepared for it\n   to be omitted.\n\n   For example:\n\n      123-First line\n      123-Second line\n      123-234 text beginning with numbers\n      123 The last line\n\n   In many cases the SMTP client then simply needs to search for a line\n   beginning with the reply code followed by <SP> or <CRLF> and ignore\n   all preceding lines.  In a few cases, there is important data for the\n   client in the reply \"text\".  The client will be able to identify\n   these cases from the current context.\n\n4.2.2 Reply Codes by Function Groups\n\n      500 Syntax error, command unrecognized\n         (This may include errors such as command line too long)\n      501 Syntax error in parameters or arguments\n      502 Command not implemented  (see section 4.2.4)\n      503 Bad sequence of commands\n      504 Command parameter not implemented\n\n      211 System status, or system help reply\n      214 Help message\n         (Information on how to use the receiver or the meaning of a\n         particular non-standard command; this reply is useful only\n         to the human user)\n\n\n\n\nKlensin                     Standards Track                    [Page 44]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      220 <domain> Service ready\n      221 <domain> Service closing transmission channel\n      421 <domain> Service not available, closing transmission channel\n         (This may be a reply to any command if the service knows it\n         must shut down)\n\n      250 Requested mail action okay, completed\n      251 User not local; will forward to <forward-path>\n         (See section 3.4)\n      252 Cannot VRFY user, but will accept message and attempt\n          delivery\n         (See section 3.5.3)\n      450 Requested mail action not taken: mailbox unavailable\n         (e.g., mailbox busy)\n      550 Requested action not taken: mailbox unavailable\n         (e.g., mailbox not found, no access, or command rejected\n         for policy reasons)\n      451 Requested action aborted: error in processing\n      551 User not local; please try <forward-path>\n         (See section 3.4)\n      452 Requested action not taken: insufficient system storage\n      552 Requested mail action aborted: exceeded storage allocation\n      553 Requested action not taken: mailbox name not allowed\n         (e.g., mailbox syntax incorrect)\n      354 Start mail input; end with <CRLF>.<CRLF>\n      554 Transaction failed (Or, in the case of a connection-opening\n          response, \"No SMTP service here\")\n\n4.2.3  Reply Codes in Numeric Order\n\n      211 System status, or system help reply\n      214 Help message\n         (Information on how to use the receiver or the meaning of a\n         particular non-standard command; this reply is useful only\n         to the human user)\n      220 <domain> Service ready\n      221 <domain> Service closing transmission channel\n      250 Requested mail action okay, completed\n      251 User not local; will forward to <forward-path>\n         (See section 3.4)\n      252 Cannot VRFY user, but will accept message and attempt\n         delivery\n         (See section 3.5.3)\n\n      354 Start mail input; end with <CRLF>.<CRLF>\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 45]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      421 <domain> Service not available, closing transmission channel\n         (This may be a reply to any command if the service knows it\n         must shut down)\n      450 Requested mail action not taken: mailbox unavailable\n         (e.g., mailbox busy)\n      451 Requested action aborted: local error in processing\n      452 Requested action not taken: insufficient system storage\n      500 Syntax error, command unrecognized\n         (This may include errors such as command line too long)\n      501 Syntax error in parameters or arguments\n      502 Command not implemented (see section 4.2.4)\n      503 Bad sequence of commands\n      504 Command parameter not implemented\n      550 Requested action not taken: mailbox unavailable\n         (e.g., mailbox not found, no access, or command rejected\n         for policy reasons)\n      551 User not local; please try <forward-path>\n         (See section 3.4)\n      552 Requested mail action aborted: exceeded storage allocation\n      553 Requested action not taken: mailbox name not allowed\n         (e.g., mailbox syntax incorrect)\n      554 Transaction failed  (Or, in the case of a connection-opening\n          response, \"No SMTP service here\")\n\n4.2.4 Reply Code 502\n\n   Questions have been raised as to when reply code 502 (Command not\n   implemented) SHOULD be returned in preference to other codes.  502\n   SHOULD be used when the command is actually recognized by the SMTP\n   server, but not implemented.  If the command is not recognized, code\n   500 SHOULD be returned.  Extended SMTP systems MUST NOT list\n   capabilities in response to EHLO for which they will return 502 (or\n   500) replies.\n\n4.2.5 Reply Codes After DATA and the Subsequent <CRLF>.<CRLF>\n\n   When an SMTP server returns a positive completion status (2yz code)\n   after the DATA command is completed with <CRLF>.<CRLF>, it accepts\n   responsibility for:\n\n   -  delivering the message (if the recipient mailbox exists), or\n\n   -  if attempts to deliver the message fail due to transient\n      conditions, retrying delivery some reasonable number of times at\n      intervals as specified in section 4.5.4.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 46]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   -  if attempts to deliver the message fail due to permanent\n      conditions, or if repeated attempts to deliver the message fail\n      due to transient conditions, returning appropriate notification to\n      the sender of the original message (using the address in the SMTP\n      MAIL command).\n\n   When an SMTP server returns a permanent error status (5yz) code after\n   the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make\n   any subsequent attempt to deliver that message.  The SMTP client\n   retains responsibility for delivery of that message and may either\n   return it to the user or requeue it for a subsequent attempt (see\n   section 4.5.4.1).\n\n   The user who originated the message SHOULD be able to interpret the\n   return of a transient failure status (by mail message or otherwise)\n   as a non-delivery indication, just as a permanent failure would be\n   interpreted.  I.e., if the client SMTP successfully handles these\n   conditions, the user will not receive such a reply.\n\n   When an SMTP server returns a permanent error status (5yz) code after\n   the DATA command is completely with <CRLF>.<CRLF>, it MUST NOT make\n   any subsequent attempt to deliver the message.  As with temporary\n   error status codes, the SMTP client retains responsibility for the\n   message, but SHOULD not again attempt delivery to the same server\n   without user review and intervention of the message.\n\n4.3 Sequencing of Commands and Replies\n\n4.3.1 Sequencing Overview\n\n   The communication between the sender and receiver is an alternating\n   dialogue, controlled by the sender.  As such, the sender issues a\n   command and the receiver responds with a reply.  Unless other\n   arrangements are negotiated through service extensions, the sender\n   MUST wait for this response before sending further commands.\n\n   One important reply is the connection greeting.  Normally, a receiver\n   will send a 220 \"Service ready\" reply when the connection is\n   completed.  The sender SHOULD wait for this greeting message before\n   sending any commands.\n\n   Note: all the greeting-type replies have the official name (the\n   fully-qualified primary domain name) of the server host as the first\n   word following the reply code.  Sometimes the host will have no\n   meaningful name.  See 4.1.3 for a discussion of alternatives in these\n   situations.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 47]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   For example,\n\n      220 ISIF.USC.EDU Service ready\n   or\n      220 mail.foo.com SuperSMTP v 6.1.2 Service ready\n   or\n      220 [10.0.0.1] Clueless host service ready\n\n   The table below lists alternative success and failure replies for\n   each command.  These SHOULD be strictly adhered to: a receiver may\n   substitute text in the replies, but the meaning and action implied by\n   the code numbers and by the specific command reply sequence cannot be\n   altered.\n\n4.3.2 Command-Reply Sequences\n\n   Each command is listed with its usual possible replies.  The prefixes\n   used before the possible replies are \"I\" for intermediate, \"S\" for\n   success, and \"E\" for error.  Since some servers may generate other\n   replies under special circumstances, and to allow for future\n   extension, SMTP clients SHOULD, when possible, interpret only the\n   first digit of the reply and MUST be prepared to deal with\n   unrecognized reply codes by interpreting the first digit only.\n   Unless extended using the mechanisms described in section 2.2, SMTP\n   servers MUST NOT transmit reply codes to an SMTP client that are\n   other than three digits or that do not start in a digit between 2 and\n   5 inclusive.\n\n   These sequencing rules and, in principle, the codes themselves, can\n   be extended or modified by SMTP extensions offered by the server and\n   accepted (requested) by the client.\n\n   In addition to the codes listed below, any SMTP command can return\n   any of the following codes if the corresponding unusual circumstances\n   are encountered:\n\n   500  For the \"command line too long\" case or if the command name was\n      not recognized.  Note that producing a \"command not recognized\"\n      error in response to the required subset of these commands is a\n      violation of this specification.\n\n   501  Syntax error in command or arguments.  In order to provide for\n      future extensions, commands that are specified in this document as\n      not accepting arguments (DATA, RSET, QUIT) SHOULD return a 501\n      message if arguments are supplied in the absence of EHLO-\n      advertised extensions.\n\n   421  Service shutting down and closing transmission channel\n\n\n\nKlensin                     Standards Track                    [Page 48]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   Specific sequences are:\n\n   CONNECTION ESTABLISHMENT\n      S: 220\n      E: 554\n   EHLO or HELO\n      S: 250\n      E: 504, 550\n   MAIL\n      S: 250\n      E: 552, 451, 452, 550, 553, 503\n   RCPT\n      S: 250, 251 (but see section 3.4 for discussion of 251 and 551)\n      E: 550, 551, 552, 553, 450, 451, 452, 503, 550\n   DATA\n      I: 354 -> data -> S: 250\n                        E: 552, 554, 451, 452\n      E: 451, 554, 503\n   RSET\n      S: 250\n   VRFY\n      S: 250, 251, 252\n      E: 550, 551, 553, 502, 504\n   EXPN\n      S: 250, 252\n      E: 550, 500, 502, 504\n   HELP\n      S: 211, 214\n      E: 502, 504\n   NOOP\n      S: 250\n   QUIT\n      S: 221\n\n4.4 Trace Information\n\n   When an SMTP server receives a message for delivery or further\n   processing, it MUST insert trace (\"time stamp\" or \"Received\")\n   information at the beginning of the message content, as discussed in\n   section 4.1.1.4.\n\n   This line MUST be structured as follows:\n\n   -  The FROM field, which MUST be supplied in an SMTP environment,\n      SHOULD contain both (1) the name of the source host as presented\n      in the EHLO command and (2) an address literal containing the IP\n      address of the source, determined from the TCP connection.\n\n\n\n\nKlensin                     Standards Track                    [Page 49]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   -  The ID field MAY contain an \"@\" as suggested in RFC 822, but this\n      is not required.\n\n   -  The FOR field MAY contain a list of <path> entries when multiple\n      RCPT commands have been given.  This may raise some security\n      issues and is usually not desirable; see section 7.2.\n\n   An Internet mail program MUST NOT change a Received: line that was\n   previously added to the message header.  SMTP servers MUST prepend\n   Received lines to messages; they MUST NOT change the order of\n   existing lines or insert Received lines in any other location.\n\n   As the Internet grows, comparability of Received fields is important\n   for detecting problems, especially slow relays.  SMTP servers that\n   create Received fields SHOULD use explicit offsets in the dates\n   (e.g., -0800), rather than time zone names of any type.  Local time\n   (with an offset) is preferred to UT when feasible.  This formulation\n   allows slightly more information about local circumstances to be\n   specified.  If UT is needed, the receiver need merely do some simple\n   arithmetic to convert the values.  Use of UT loses information about\n   the time zone-location of the server.  If it is desired to supply a\n   time zone name, it SHOULD be included in a comment.\n\n   When the delivery SMTP server makes the \"final delivery\" of a\n   message, it inserts a return-path line at the beginning of the mail\n   data.  This use of return-path is required; mail systems MUST support\n   it.  The return-path line preserves the information in the <reverse-\n   path> from the MAIL command.  Here, final delivery means the message\n   has left the SMTP environment.  Normally, this would mean it had been\n   delivered to the destination user or an associated mail drop, but in\n   some cases it may be further processed and transmitted by another\n   mail system.\n\n   It is possible for the mailbox in the return path to be different\n   from the actual sender's mailbox, for example, if error responses are\n   to be delivered to a special error handling mailbox rather than to\n   the message sender.  When mailing lists are involved, this\n   arrangement is common and useful as a means of directing errors to\n   the list maintainer rather than the message originator.\n\n   The text above implies that the final mail data will begin with a\n   return path line, followed by one or more time stamp lines.  These\n   lines will be followed by the mail data headers and body [32].\n\n   It is sometimes difficult for an SMTP server to determine whether or\n   not it is making final delivery since forwarding or other operations\n   may occur after the message is accepted for delivery.  Consequently,\n\n\n\n\nKlensin                     Standards Track                    [Page 50]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   any further (forwarding, gateway, or relay) systems MAY remove the\n   return path and rebuild the MAIL command as needed to ensure that\n   exactly one such line appears in a delivered message.\n\n   A message-originating SMTP system SHOULD NOT send a message that\n   already contains a Return-path header.  SMTP servers performing a\n   relay function MUST NOT inspect the message data, and especially not\n   to the extent needed to determine if Return-path headers are present.\n   SMTP servers making final delivery MAY remove Return-path headers\n   before adding their own.\n\n   The primary purpose of the Return-path is to designate the address to\n   which messages indicating non-delivery or other mail system failures\n   are to be sent.  For this to be unambiguous, exactly one return path\n   SHOULD be present when the message is delivered.  Systems using RFC\n   822 syntax with non-SMTP transports SHOULD designate an unambiguous\n   address, associated with the transport envelope, to which error\n   reports (e.g., non-delivery messages) should be sent.\n\n   Historical note: Text in RFC 822 that appears to contradict the use\n   of the Return-path header (or the envelope reverse path address from\n   the MAIL command) as the destination for error messages is not\n   applicable on the Internet.  The reverse path address (as copied into\n   the Return-path) MUST be used as the target of any mail containing\n   delivery error messages.\n\n   In particular:\n\n   -  a gateway from SMTP->elsewhere SHOULD insert a return-path header,\n      unless it is known that the \"elsewhere\" transport also uses\n      Internet domain addresses and maintains the envelope sender\n      address separately.\n\n   -  a gateway from elsewhere->SMTP SHOULD delete any return-path\n      header present in the message, and either copy that information to\n      the SMTP envelope or combine it with information present in the\n      envelope of the other transport system to construct the reverse\n      path argument to the MAIL command in the SMTP envelope.\n\n   The server must give special treatment to cases in which the\n   processing following the end of mail data indication is only\n   partially successful.  This could happen if, after accepting several\n   recipients and the mail data, the SMTP server finds that the mail\n   data could be successfully delivered to some, but not all, of the\n   recipients.  In such cases, the response to the DATA command MUST be\n   an OK reply.  However, the SMTP server MUST compose and send an\n   \"undeliverable mail\" notification message to the originator of the\n   message.\n\n\n\nKlensin                     Standards Track                    [Page 51]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   A single notification listing all of the failed recipients or\n   separate notification messages MUST be sent for each failed\n   recipient.  For economy of processing by the sender, the former is\n   preferred when possible.  All undeliverable mail notification\n   messages are sent using the MAIL command (even if they result from\n   processing the obsolete SEND, SOML, or SAML commands) and use a null\n   return path as discussed in section 3.7.\n\n   The time stamp line and the return path line are formally defined as\n   follows:\n\nReturn-path-line = \"Return-Path:\" FWS Reverse-path <CRLF>\n\nTime-stamp-line = \"Received:\" FWS Stamp <CRLF>\n\nStamp = From-domain By-domain Opt-info \";\"  FWS date-time\n\n      ; where \"date-time\" is as defined in [32]\n      ; but the \"obs-\" forms, especially two-digit\n      ; years, are prohibited in SMTP and MUST NOT be used.\n\nFrom-domain = \"FROM\" FWS Extended-Domain CFWS\n\nBy-domain = \"BY\" FWS Extended-Domain CFWS\n\nExtended-Domain = Domain /\n           ( Domain FWS \"(\" TCP-info \")\" ) /\n           ( Address-literal FWS \"(\" TCP-info \")\" )\n\nTCP-info = Address-literal / ( Domain FWS Address-literal )\n      ; Information derived by server from TCP connection\n      ; not client EHLO.\n\nOpt-info = [Via] [With] [ID] [For]\n\nVia = \"VIA\" FWS Link CFWS\n\nWith = \"WITH\" FWS Protocol CFWS\n\nID = \"ID\" FWS String / msg-id CFWS\n\nFor = \"FOR\" FWS 1*( Path / Mailbox ) CFWS\n\nLink = \"TCP\" / Addtl-Link\nAddtl-Link = Atom\n      ; Additional standard names for links are registered with the\n         ; Internet Assigned Numbers Authority (IANA).  \"Via\" is\n         ; primarily of value with non-Internet transports.  SMTP\n\n\n\nKlensin                     Standards Track                    [Page 52]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n         ; servers SHOULD NOT use unregistered names.\nProtocol = \"ESMTP\" / \"SMTP\" / Attdl-Protocol\nAttdl-Protocol = Atom\n      ; Additional standard names for protocols are registered with the\n         ; Internet Assigned Numbers Authority (IANA).  SMTP servers\n         ; SHOULD NOT use unregistered names.\n\n4.5 Additional Implementation Issues\n\n4.5.1 Minimum Implementation\n\n   In order to make SMTP workable, the following minimum implementation\n   is required for all receivers.  The following commands MUST be\n   supported to conform to this specification:\n\n      EHLO\n      HELO\n      MAIL\n      RCPT\n      DATA\n      RSET\n      NOOP\n      QUIT\n      VRFY\n\n   Any system that includes an SMTP server supporting mail relaying or\n   delivery MUST support the reserved mailbox \"postmaster\" as a case-\n   insensitive local name.  This postmaster address is not strictly\n   necessary if the server always returns 554 on connection opening (as\n   described in section 3.1).  The requirement to accept mail for\n   postmaster implies that RCPT commands which specify a mailbox for\n   postmaster at any of the domains for which the SMTP server provides\n   mail service, as well as the special case of \"RCPT TO:<Postmaster>\"\n   (with no domain specification), MUST be supported.\n\n   SMTP systems are expected to make every reasonable effort to accept\n   mail directed to Postmaster from any other system on the Internet.\n   In extreme cases --such as to contain a denial of service attack or\n   other breach of security-- an SMTP server may block mail directed to\n   Postmaster.  However, such arrangements SHOULD be narrowly tailored\n   so as to avoid blocking messages which are not part of such attacks.\n\n4.5.2 Transparency\n\n   Without some provision for data transparency, the character sequence\n   \"<CRLF>.<CRLF>\" ends the mail text and cannot be sent by the user.\n   In general, users are not aware of such \"forbidden\" sequences.  To\n\n\n\n\nKlensin                     Standards Track                    [Page 53]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   allow all user composed text to be transmitted transparently, the\n   following procedures are used:\n\n   -  Before sending a line of mail text, the SMTP client checks the\n      first character of the line.  If it is a period, one additional\n      period is inserted at the beginning of the line.\n\n   -  When a line of mail text is received by the SMTP server, it checks\n      the line.  If the line is composed of a single period, it is\n      treated as the end of mail indicator.  If the first character is a\n      period and there are other characters on the line, the first\n      character is deleted.\n\n   The mail data may contain any of the 128 ASCII characters.  All\n   characters are to be delivered to the recipient's mailbox, including\n   spaces, vertical and horizontal tabs, and other control characters.\n   If the transmission channel provides an 8-bit byte (octet) data\n   stream, the 7-bit ASCII codes are transmitted right justified in the\n   octets, with the high order bits cleared to zero.  See 3.7 for\n   special treatment of these conditions in SMTP systems serving a relay\n   function.\n\n   In some systems it may be necessary to transform the data as it is\n   received and stored.  This may be necessary for hosts that use a\n   different character set than ASCII as their local character set, that\n   store data in records rather than strings, or which use special\n   character sequences as delimiters inside mailboxes.  If such\n   transformations are necessary, they MUST be reversible, especially if\n   they are applied to mail being relayed.\n\n4.5.3 Sizes and Timeouts\n\n4.5.3.1 Size limits and minimums\n\n   There are several objects that have required minimum/maximum sizes.\n   Every implementation MUST be able to receive objects of at least\n   these sizes.  Objects larger than these sizes SHOULD be avoided when\n   possible.  However, some Internet mail constructs such as encoded\n   X.400 addresses [16] will often require larger objects: clients MAY\n   attempt to transmit these, but MUST be prepared for a server to\n   reject them if they cannot be handled by it.  To the maximum extent\n   possible, implementation techniques which impose no limits on the\n   length of these objects should be used.\n\n   local-part\n      The maximum total length of a user name or other local-part is 64\n      characters.\n\n\n\n\nKlensin                     Standards Track                    [Page 54]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   domain\n      The maximum total length of a domain name or number is 255\n      characters.\n\n   path\n      The maximum total length of a reverse-path or forward-path is 256\n      characters (including the punctuation and element separators).\n\n   command line\n      The maximum total length of a command line including the command\n      word and the <CRLF> is 512 characters.  SMTP extensions may be\n      used to increase this limit.\n\n   reply line\n      The maximum total length of a reply line including the reply code\n      and the <CRLF> is 512 characters.  More information may be\n      conveyed through multiple-line replies.\n\n   text line\n      The maximum total length of a text line including the <CRLF> is\n      1000 characters (not counting the leading dot duplicated for\n      transparency).  This number may be increased by the use of SMTP\n      Service Extensions.\n\n   message content\n      The maximum total length of a message content (including any\n      message headers as well as the message body) MUST BE at least 64K\n      octets.  Since the introduction of Internet standards for\n      multimedia mail [12], message lengths on the Internet have grown\n      dramatically, and message size restrictions should be avoided if\n      at all possible.  SMTP server systems that must impose\n      restrictions SHOULD implement the \"SIZE\" service extension [18],\n      and SMTP client systems that will send large messages SHOULD\n      utilize it when possible.\n\n   recipients buffer\n      The minimum total number of recipients that must be buffered is\n      100 recipients.  Rejection of messages (for excessive recipients)\n      with fewer than 100 RCPT commands is a violation of this\n      specification.  The general principle that relaying SMTP servers\n      MUST NOT, and delivery SMTP servers SHOULD NOT, perform validation\n      tests on message headers suggests that rejecting a message based\n      on the total number of recipients shown in header fields is to be\n      discouraged.  A server which imposes a limit on the number of\n      recipients MUST behave in an orderly fashion,  such as to reject\n      additional addresses over its limit rather than silently\n      discarding addresses previously accepted.  A client that needs to\n\n\n\n\nKlensin                     Standards Track                    [Page 55]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      deliver a message containing over 100 RCPT commands SHOULD be\n      prepared to transmit in 100-recipient \"chunks\" if the server\n      declines to accept more than 100 recipients in a single message.\n\n   Errors due to exceeding these limits may be reported by using the\n   reply codes.  Some examples of reply codes are:\n\n      500 Line too long.\n   or\n      501 Path too long\n   or\n      452 Too many recipients  (see below)\n   or\n      552 Too much mail data.\n\n   RFC 821 [30] incorrectly listed the error where an SMTP server\n   exhausts its implementation limit on the number of RCPT commands\n   (\"too many recipients\") as having reply code 552.  The correct reply\n   code for this condition is 452.  Clients SHOULD treat a 552 code in\n   this case as a temporary, rather than permanent, failure so the logic\n   below works.\n\n   When a conforming SMTP server encounters this condition, it has at\n   least 100 successful RCPT commands in its recipients buffer.  If the\n   server is able to accept the message, then at least these 100\n   addresses will be removed from the SMTP client's queue.  When the\n   client attempts retransmission of those addresses which received 452\n   responses, at least 100 of these will be able to fit in the SMTP\n   server's recipients buffer.  Each retransmission attempt which is\n   able to deliver anything will be able to dispose of at least 100 of\n   these recipients.\n\n   If an SMTP server has an implementation limit on the number of RCPT\n   commands and this limit is exhausted, it MUST use a response code of\n   452 (but the client SHOULD also be prepared for a 552, as noted\n   above).  If the server has a configured site-policy limitation on the\n   number of RCPT commands, it MAY instead use a 5XX response code.\n   This would be most appropriate if the policy limitation was intended\n   to apply if the total recipient count for a particular message body\n   were enforced even if that message body was sent in multiple mail\n   transactions.\n\n4.5.3.2 Timeouts\n\n   An SMTP client MUST provide a timeout mechanism.  It MUST use per-\n   command timeouts rather than somehow trying to time the entire mail\n   transaction.  Timeouts SHOULD be easily reconfigurable, preferably\n   without recompiling the SMTP code.  To implement this, a timer is set\n\n\n\nKlensin                     Standards Track                    [Page 56]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   for each SMTP command and for each buffer of the data transfer.  The\n   latter means that the overall timeout is inherently proportional to\n   the size of the message.\n\n   Based on extensive experience with busy mail-relay hosts, the minimum\n   per-command timeout values SHOULD be as follows:\n\n   Initial 220 Message: 5 minutes\n      An SMTP client process needs to distinguish between a failed TCP\n      connection and a delay in receiving the initial 220 greeting\n      message.  Many SMTP servers accept a TCP connection but delay\n      delivery of the 220 message until their system load permits more\n      mail to be processed.\n\n   MAIL Command: 5 minutes\n\n   RCPT Command: 5 minutes\n      A longer timeout is required if processing of mailing lists and\n      aliases is not deferred until after the message was accepted.\n\n   DATA Initiation: 2 minutes\n      This is while awaiting the \"354 Start Input\" reply to a DATA\n      command.\n\n   Data Block: 3 minutes\n      This is while awaiting the completion of each TCP SEND call\n      transmitting a chunk of data.\n\n   DATA Termination: 10 minutes.\n      This is while awaiting the \"250 OK\" reply.  When the receiver gets\n      the final period terminating the message data, it typically\n      performs processing to deliver the message to a user mailbox.  A\n      spurious timeout at this point would be very wasteful and would\n      typically result in delivery of multiple copies of the message,\n      since it has been successfully sent and the server has accepted\n      responsibility for delivery.  See section 6.1 for additional\n      discussion.\n\n   An SMTP server SHOULD have a timeout of at least 5 minutes while it\n   is awaiting the next command from the sender.\n\n4.5.4 Retry Strategies\n\n   The common structure of a host SMTP implementation includes user\n   mailboxes, one or more areas for queuing messages in transit, and one\n   or more daemon processes for sending and receiving mail.  The exact\n   structure will vary depending on the needs of the users on the host\n\n\n\n\nKlensin                     Standards Track                    [Page 57]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   and the number and size of mailing lists supported by the host.  We\n   describe several optimizations that have proved helpful, particularly\n   for mailers supporting high traffic levels.\n\n   Any queuing strategy MUST include timeouts on all activities on a\n   per-command basis.  A queuing strategy MUST NOT send error messages\n   in response to error messages under any circumstances.\n\n4.5.4.1 Sending Strategy\n\n   The general model for an SMTP client is one or more processes that\n   periodically attempt to transmit outgoing mail.  In a typical system,\n   the program that composes a message has some method for requesting\n   immediate attention for a new piece of outgoing mail, while mail that\n   cannot be transmitted immediately MUST be queued and periodically\n   retried by the sender.  A mail queue entry will include not only the\n   message itself but also the envelope information.\n\n   The sender MUST delay retrying a particular destination after one\n   attempt has failed.  In general, the retry interval SHOULD be at\n   least 30 minutes; however, more sophisticated and variable strategies\n   will be beneficial when the SMTP client can determine the reason for\n   non-delivery.\n\n   Retries continue until the message is transmitted or the sender gives\n   up; the give-up time generally needs to be at least 4-5 days.  The\n   parameters to the retry algorithm MUST be configurable.\n\n   A client SHOULD keep a list of hosts it cannot reach and\n   corresponding connection timeouts, rather than just retrying queued\n   mail items.\n\n   Experience suggests that failures are typically transient (the target\n   system or its connection has crashed), favoring a policy of two\n   connection attempts in the first hour the message is in the queue,\n   and then backing off to one every two or three hours.\n\n   The SMTP client can shorten the queuing delay in cooperation with the\n   SMTP server.  For example, if mail is received from a particular\n   address, it is likely that mail queued for that host can now be sent.\n   Application of this principle may, in many cases, eliminate the\n   requirement for an explicit \"send queues now\" function such as ETRN\n   [9].\n\n   The strategy may be further modified as a result of multiple\n   addresses per host (see below) to optimize delivery time vs. resource\n   usage.\n\n\n\n\nKlensin                     Standards Track                    [Page 58]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   An SMTP client may have a large queue of messages for each\n   unavailable destination host.  If all of these messages were retried\n   in every retry cycle, there would be excessive Internet overhead and\n   the sending system would be blocked for a long period.  Note that an\n   SMTP client can generally determine that a delivery attempt has\n   failed only after a timeout of several minutes and even a one-minute\n   timeout per connection will result in a very large delay if retries\n   are repeated for dozens, or even hundreds, of queued messages to the\n   same host.\n\n   At the same time, SMTP clients SHOULD use great care in caching\n   negative responses from servers.  In an extreme case, if EHLO is\n   issued multiple times during the same SMTP connection, different\n   answers may be returned by the server.  More significantly, 5yz\n   responses to the MAIL command MUST NOT be cached.\n\n   When a mail message is to be delivered to multiple recipients, and\n   the SMTP server to which a copy of the message is to be sent is the\n   same for multiple recipients, then only one copy of the message\n   SHOULD be transmitted.  That is, the SMTP client SHOULD use the\n   command sequence:  MAIL, RCPT, RCPT,... RCPT, DATA instead of the\n   sequence: MAIL, RCPT, DATA, ..., MAIL, RCPT, DATA.  However, if there\n   are very many addresses, a limit on the number of RCPT commands per\n   MAIL command MAY be imposed.  Implementation of this efficiency\n   feature is strongly encouraged.\n\n   Similarly, to achieve timely delivery, the SMTP client MAY support\n   multiple concurrent outgoing mail transactions.  However, some limit\n   may be appropriate to protect the host from devoting all its\n   resources to mail.\n\n4.5.4.2 Receiving Strategy\n\n   The SMTP server SHOULD attempt to keep a pending listen on the SMTP\n   port at all times.  This requires the support of multiple incoming\n   TCP connections for SMTP.  Some limit MAY be imposed but servers that\n   cannot handle more than one SMTP transaction at a time are not in\n   conformance with the intent of this specification.\n\n   As discussed above, when the SMTP server receives mail from a\n   particular host address, it could activate its own SMTP queuing\n   mechanisms to retry any mail pending for that host address.\n\n4.5.5   Messages with a null reverse-path\n\n   There are several types of notification messages which are required\n   by existing and proposed standards to be sent with a null reverse\n   path, namely non-delivery notifications as discussed in section 3.7,\n\n\n\nKlensin                     Standards Track                    [Page 59]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   other kinds of Delivery Status Notifications (DSNs) [24], and also\n   Message Disposition Notifications (MDNs) [10].  All of these kinds of\n   messages are notifications about a previous message, and they are\n   sent to the reverse-path of the previous mail message.  (If the\n   delivery of such a notification message fails, that usually indicates\n   a problem with the mail system of the host to which the notification\n   message is addressed.  For this reason, at some hosts the MTA is set\n   up to forward such failed notification messages to someone who is\n   able to fix problems with the mail system, e.g., via the postmaster\n   alias.)\n\n   All other types of messages (i.e., any message which is not required\n   by a standards-track RFC to have a null reverse-path) SHOULD be sent\n   with with a valid, non-null reverse-path.\n\n   Implementors of automated email processors should be careful to make\n   sure that the various kinds of messages with null reverse-path are\n   handled correctly, in particular such systems SHOULD NOT reply to\n   messages with null reverse-path.\n\n5. Address Resolution and Mail Handling\n\n   Once an SMTP client lexically identifies a domain to which mail will\n   be delivered for processing (as described in sections 3.6 and 3.7), a\n   DNS lookup MUST be performed to resolve the domain name [22].  The\n   names are expected to be fully-qualified domain names (FQDNs):\n   mechanisms for inferring FQDNs from partial names or local aliases\n   are outside of this specification and, due to a history of problems,\n   are generally discouraged.  The lookup first attempts to locate an MX\n   record associated with the name.  If a CNAME record is found instead,\n   the resulting name is processed as if it were the initial name.  If\n   no MX records are found, but an A RR is found, the A RR is treated as\n   if it was associated with an implicit MX RR, with a preference of 0,\n   pointing to that host.  If one or more MX RRs are found for a given\n   name, SMTP systems MUST NOT utilize any A RRs associated with that\n   name unless they are located using the MX RRs; the \"implicit MX\" rule\n   above applies only if there are no MX records present.  If MX records\n   are present, but none of them are usable, this situation MUST be\n   reported as an error.\n\n   When the lookup succeeds, the mapping can result in a list of\n   alternative delivery addresses rather than a single address, because\n   of multiple MX records, multihoming, or both.  To provide reliable\n   mail transmission, the SMTP client MUST be able to try (and retry)\n   each of the relevant addresses in this list in order, until a\n   delivery attempt succeeds.  However, there MAY also be a configurable\n   limit on the number of alternate addresses that can be tried.  In any\n   case, the SMTP client SHOULD try at least two addresses.\n\n\n\nKlensin                     Standards Track                    [Page 60]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   Two types of information is used to rank the host addresses: multiple\n   MX records, and multihomed hosts.\n\n   Multiple MX records contain a preference indication that MUST be used\n   in sorting (see below).  Lower numbers are more preferred than higher\n   ones.  If there are multiple destinations with the same preference\n   and there is no clear reason to favor one (e.g., by recognition of an\n   easily-reached address), then the sender-SMTP MUST randomize them to\n   spread the load across multiple mail exchangers for a specific\n   organization.\n\n   The destination host (perhaps taken from the preferred MX record) may\n   be multihomed, in which case the domain name resolver will return a\n   list of alternative IP addresses.  It is the responsibility of the\n   domain name resolver interface to have ordered this list by\n   decreasing preference if necessary, and SMTP MUST try them in the\n   order presented.\n\n   Although the capability to try multiple alternative addresses is\n   required, specific installations may want to limit or disable the use\n   of alternative addresses.  The question of whether a sender should\n   attempt retries using the different addresses of a multihomed host\n   has been controversial.  The main argument for using the multiple\n   addresses is that it maximizes the probability of timely delivery,\n   and indeed sometimes the probability of any delivery; the counter-\n   argument is that it may result in unnecessary resource use.  Note\n   that resource use is also strongly determined by the sending strategy\n   discussed in section 4.5.4.1.\n\n   If an SMTP server receives a message with a destination for which it\n   is a designated Mail eXchanger, it MAY relay the message (potentially\n   after having rewritten the MAIL FROM and/or RCPT TO addresses), make\n   final delivery of the message, or hand it off using some mechanism\n   outside the SMTP-provided transport environment.  Of course, neither\n   of the latter require that the list of MX records be examined\n   further.\n\n   If it determines that it should relay the message without rewriting\n   the address, it MUST sort the MX records to determine candidates for\n   delivery.  The records are first ordered by preference, with the\n   lowest-numbered records being most preferred.  The relay host MUST\n   then inspect the list for any of the names or addresses by which it\n   might be known in mail transactions.  If a matching record is found,\n   all records at that preference level and higher-numbered ones MUST be\n   discarded from consideration.  If there are no records left at that\n   point, it is an error condition, and the message MUST be returned as\n   undeliverable.  If records do remain, they SHOULD be tried, best\n   preference first, as described above.\n\n\n\nKlensin                     Standards Track                    [Page 61]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n6. Problem Detection and Handling\n\n6.1 Reliable Delivery and Replies by Email\n\n   When the receiver-SMTP accepts a piece of mail (by sending a \"250 OK\"\n   message in response to DATA), it is accepting responsibility for\n   delivering or relaying the message.  It must take this responsibility\n   seriously.  It MUST NOT lose the message for frivolous reasons, such\n   as because the host later crashes or because of a predictable\n   resource shortage.\n\n   If there is a delivery failure after acceptance of a message, the\n   receiver-SMTP MUST formulate and mail a notification message.  This\n   notification MUST be sent using a null (\"<>\") reverse path in the\n   envelope.  The recipient of this notification MUST be the address\n   from the envelope return path (or the Return-Path: line).  However,\n   if this address is null (\"<>\"), the receiver-SMTP MUST NOT send a\n   notification.  Obviously, nothing in this section can or should\n   prohibit local decisions (i.e., as part of the same system\n   environment as the receiver-SMTP) to log or otherwise transmit\n   information about null address events locally if that is desired.  If\n   the address is an explicit source route, it MUST be stripped down to\n   its final hop.\n\n   For example, suppose that an error notification must be sent for a\n   message that arrived with:\n\n      MAIL FROM:<@a,@b:user@d>\n\n   The notification message MUST be sent using:\n\n      RCPT TO:<user@d>\n\n   Some delivery failures after the message is accepted by SMTP will be\n   unavoidable.  For example, it may be impossible for the receiving\n   SMTP server to validate all the delivery addresses in RCPT command(s)\n   due to a \"soft\" domain system error, because the target is a mailing\n   list (see earlier discussion of RCPT), or because the server is\n   acting as a relay and has no immediate access to the delivering\n   system.\n\n   To avoid receiving duplicate messages as the result of timeouts, a\n   receiver-SMTP MUST seek to minimize the time required to respond to\n   the final <CRLF>.<CRLF> end of data indicator.  See RFC 1047 [28] for\n   a discussion of this problem.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 62]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n6.2 Loop Detection\n\n   Simple counting of the number of \"Received:\" headers in a message has\n   proven to be an effective, although rarely optimal, method of\n   detecting loops in mail systems.  SMTP servers using this technique\n   SHOULD use a large rejection threshold, normally at least 100\n   Received entries.  Whatever mechanisms are used, servers MUST contain\n   provisions for detecting and stopping trivial loops.\n\n6.3 Compensating for Irregularities\n\n   Unfortunately, variations, creative interpretations, and outright\n   violations of Internet mail protocols do occur; some would suggest\n   that they occur quite frequently.  The debate as to whether a well-\n   behaved SMTP receiver or relay should reject a malformed message,\n   attempt to pass it on unchanged, or attempt to repair it to increase\n   the odds of successful delivery (or subsequent reply) began almost\n   with the dawn of structured network mail and shows no signs of\n   abating.  Advocates of rejection claim that attempted repairs are\n   rarely completely adequate and that rejection of bad messages is the\n   only way to get the offending software repaired.  Advocates of\n   \"repair\" or \"deliver no matter what\" argue that users prefer that\n   mail go through it if at all possible and that there are significant\n   market pressures in that direction.  In practice, these market\n   pressures may be more important to particular vendors than strict\n   conformance to the standards, regardless of the preference of the\n   actual developers.\n\n   The problems associated with ill-formed messages were exacerbated by\n   the introduction of the split-UA mail reading protocols [3, 26, 5,\n   21].  These protocols have encouraged the use of SMTP as a posting\n   protocol, and SMTP servers as relay systems for these client hosts\n   (which are often only intermittently connected to the Internet).\n   Historically, many of those client machines lacked some of the\n   mechanisms and information assumed by SMTP (and indeed, by the mail\n   format protocol [7]).  Some could not keep adequate track of time;\n   others had no concept of time zones; still others could not identify\n   their own names or addresses; and, of course, none could satisfy the\n   assumptions that underlay RFC 822's conception of authenticated\n   addresses.\n\n   In response to these weak SMTP clients, many SMTP systems now\n   complete messages that are delivered to them in incomplete or\n   incorrect form.  This strategy is generally considered appropriate\n   when the server can identify or authenticate the client, and there\n   are prior agreements between them.  By contrast, there is at best\n   great concern about fixes applied by a relay or delivery SMTP server\n   that has little or no knowledge of the user or client machine.\n\n\n\nKlensin                     Standards Track                    [Page 63]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   The following changes to a message being processed MAY be applied\n   when necessary by an originating SMTP server, or one used as the\n   target of SMTP as an initial posting protocol:\n\n   -  Addition of a message-id field when none appears\n\n   -  Addition of a date, time or time zone when none appears\n\n   -  Correction of addresses to proper FQDN format\n\n   The less information the server has about the client, the less likely\n   these changes are to be correct and the more caution and conservatism\n   should be applied when considering whether or not to perform fixes\n   and how.  These changes MUST NOT be applied by an SMTP server that\n   provides an intermediate relay function.\n\n   In all cases, properly-operating clients supplying correct\n   information are preferred to corrections by the SMTP server.  In all\n   cases, documentation of actions performed by the servers (in trace\n   fields and/or header comments) is strongly encouraged.\n\n7. Security Considerations\n\n7.1 Mail Security and Spoofing\n\n   SMTP mail is inherently insecure in that it is feasible for even\n   fairly casual users to negotiate directly with receiving and relaying\n   SMTP servers and create messages that will trick a naive recipient\n   into believing that they came from somewhere else.  Constructing such\n   a message so that the \"spoofed\" behavior cannot be detected by an\n   expert is somewhat more difficult, but not sufficiently so as to be a\n   deterrent to someone who is determined and knowledgeable.\n   Consequently, as knowledge of Internet mail increases, so does the\n   knowledge that SMTP mail inherently cannot be authenticated, or\n   integrity checks provided, at the transport level.  Real mail\n   security lies only in end-to-end methods involving the message\n   bodies, such as those which use digital signatures (see [14] and,\n   e.g., PGP [4] or S/MIME [31]).\n\n   Various protocol extensions and configuration options that provide\n   authentication at the transport level (e.g., from an SMTP client to\n   an SMTP server) improve somewhat on the traditional situation\n   described above.  However, unless they are accompanied by careful\n   handoffs of responsibility in a carefully-designed trust environment,\n   they remain inherently weaker than end-to-end mechanisms which use\n   digitally signed messages rather than depending on the integrity of\n   the transport system.\n\n\n\n\nKlensin                     Standards Track                    [Page 64]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   Efforts to make it more difficult for users to set envelope return\n   path and header \"From\" fields to point to valid addresses other than\n   their own are largely misguided: they frustrate legitimate\n   applications in which mail is sent by one user on behalf of another\n   or in which error (or normal) replies should be directed to a special\n   address.  (Systems that provide convenient ways for users to alter\n   these fields on a per-message basis should attempt to establish a\n   primary and permanent mailbox address for the user so that Sender\n   fields within the message data can be generated sensibly.)\n\n   This specification does not further address the authentication issues\n   associated with SMTP other than to advocate that useful functionality\n   not be disabled in the hope of providing some small margin of\n   protection against an ignorant user who is trying to fake mail.\n\n7.2 \"Blind\" Copies\n\n   Addresses that do not appear in the message headers may appear in the\n   RCPT commands to an SMTP server for a number of reasons.  The two\n   most common involve the use of a mailing address as a \"list exploder\"\n   (a single address that resolves into multiple addresses) and the\n   appearance of \"blind copies\".  Especially when more than one RCPT\n   command is present, and in order to avoid defeating some of the\n   purpose of these mechanisms, SMTP clients and servers SHOULD NOT copy\n   the full set of RCPT command arguments into the headers, either as\n   part of trace headers or as informational or private-extension\n   headers.  Since this rule is often violated in practice, and cannot\n   be enforced, sending SMTP systems that are aware of \"bcc\" use MAY\n   find it helpful to send each blind copy as a separate message\n   transaction containing only a single RCPT command.\n\n   There is no inherent relationship between either \"reverse\" (from\n   MAIL, SAML, etc., commands) or \"forward\" (RCPT) addresses in the SMTP\n   transaction (\"envelope\") and the addresses in the headers.  Receiving\n   systems SHOULD NOT attempt to deduce such relationships and use them\n   to alter the headers of the message for delivery.  The popular\n   \"Apparently-to\" header is a violation of this principle as well as a\n   common source of unintended information disclosure and SHOULD NOT be\n   used.\n\n7.3 VRFY, EXPN, and Security\n\n   As discussed in section 3.5, individual sites may want to disable\n   either or both of VRFY or EXPN for security reasons.  As a corollary\n   to the above, implementations that permit this MUST NOT appear to\n   have verified addresses that are not, in fact, verified.  If a site\n\n\n\n\n\nKlensin                     Standards Track                    [Page 65]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   disables these commands for security reasons, the SMTP server MUST\n   return a 252 response, rather than a code that could be confused with\n   successful or unsuccessful verification.\n\n   Returning a 250 reply code with the address listed in the VRFY\n   command after having checked it only for syntax violates this rule.\n   Of course, an implementation that \"supports\" VRFY by always returning\n   550 whether or not the address is valid is equally not in\n   conformance.\n\n   Within the last few years, the contents of mailing lists have become\n   popular as an address information source for so-called \"spammers.\"\n   The use of EXPN to \"harvest\" addresses has increased as list\n   administrators have installed protections against inappropriate uses\n   of the lists themselves.  Implementations SHOULD still provide\n   support for EXPN, but sites SHOULD carefully evaluate the tradeoffs.\n   As authentication mechanisms are introduced into SMTP, some sites may\n   choose to make EXPN available only to authenticated requestors.\n\n7.4 Information Disclosure in Announcements\n\n   There has been an ongoing debate about the tradeoffs between the\n   debugging advantages of announcing server type and version (and,\n   sometimes, even server domain name) in the greeting response or in\n   response to the HELP command and the disadvantages of exposing\n   information that might be useful in a potential hostile attack.  The\n   utility of the debugging information is beyond doubt.  Those who\n   argue for making it available point out that it is far better to\n   actually secure an SMTP server rather than hope that trying to\n   conceal known vulnerabilities by hiding the server's precise identity\n   will provide more protection.  Sites are encouraged to evaluate the\n   tradeoff with that issue in mind; implementations are strongly\n   encouraged to minimally provide for making type and version\n   information available in some way to other network hosts.\n\n7.5 Information Disclosure in Trace Fields\n\n   In some circumstances, such as when mail originates from within a LAN\n   whose hosts are not directly on the public Internet, trace\n   (\"Received\") fields produced in conformance with this specification\n   may disclose host names and similar information that would not\n   normally be available.  This ordinarily does not pose a problem, but\n   sites with special concerns about name disclosure should be aware of\n   it.  Also, the optional FOR clause should be supplied with caution or\n   not at all when multiple recipients are involved lest it\n   inadvertently disclose the identities of \"blind copy\" recipients to\n   others.\n\n\n\n\nKlensin                     Standards Track                    [Page 66]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n7.6 Information Disclosure in Message Forwarding\n\n   As discussed in section 3.4, use of the 251 or 551 reply codes to\n   identify the replacement address associated with a mailbox may\n   inadvertently disclose sensitive information.  Sites that are\n   concerned about those issues should ensure that they select and\n   configure servers appropriately.\n\n7.7 Scope of Operation of SMTP Servers\n\n   It is a well-established principle that an SMTP server may refuse to\n   accept mail for any operational or technical reason that makes sense\n   to the site providing the server.  However, cooperation among sites\n   and installations makes the Internet possible.  If sites take\n   excessive advantage of the right to reject traffic, the ubiquity of\n   email availability (one of the strengths of the Internet) will be\n   threatened; considerable care should be taken and balance maintained\n   if a site decides to be selective about the traffic it will accept\n   and process.\n\n   In recent years, use of the relay function through arbitrary sites\n   has been used as part of hostile efforts to hide the actual origins\n   of mail.  Some sites have decided to limit the use of the relay\n   function to known or identifiable sources, and implementations SHOULD\n   provide the capability to perform this type of filtering.  When mail\n   is rejected for these or other policy reasons, a 550 code SHOULD be\n   used in response to EHLO, MAIL, or RCPT as appropriate.\n\n8. IANA Considerations\n\n   IANA will maintain three registries in support of this specification.\n   The first consists of SMTP service extensions with the associated\n   keywords, and, as needed, parameters and verbs.  As specified in\n   section 2.2.2, no entry may be made in this registry that starts in\n   an \"X\".  Entries may be made only for service extensions (and\n   associated keywords, parameters, or verbs) that are defined in\n   standards-track or experimental RFCs specifically approved by the\n   IESG for this purpose.\n\n   The second registry consists of \"tags\" that identify forms of domain\n   literals other than those for IPv4 addresses (specified in RFC 821\n   and in this document) and IPv6 addresses (specified in this\n   document).  Additional literal types require standardization before\n   being used; none are anticipated at this time.\n\n   The third, established by RFC 821 and renewed by this specification,\n   is a registry of link and protocol identifiers to be used with the\n   \"via\" and \"with\" subclauses of the time stamp (\"Received: header\")\n\n\n\nKlensin                     Standards Track                    [Page 67]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   described in section 4.4.  Link and protocol identifiers in addition\n   to those specified in this document may be registered only by\n   standardization or by way of an RFC-documented, IESG-approved,\n   Experimental protocol extension.\n\n9. References\n\n   [1]  American National Standards Institute (formerly United States of\n        America Standards Institute), X3.4, 1968, \"USA Code for\n        Information Interchange\". ANSI X3.4-1968 has been replaced by\n        newer versions with slight modifications, but the 1968 version\n        remains definitive for the Internet.\n\n   [2]  Braden, R., \"Requirements for Internet hosts - application and\n        support\", STD 3, RFC 1123, October 1989.\n\n   [3]  Butler, M., Chase, D., Goldberger, J., Postel, J. and J.\n        Reynolds, \"Post Office Protocol - version 2\", RFC 937, February\n        1985.\n\n   [4]  Callas, J., Donnerhacke, L., Finney, H. and R. Thayer, \"OpenPGP\n        Message Format\", RFC 2440, November 1998.\n\n   [5]  Crispin, M., \"Interactive Mail Access Protocol - Version 2\", RFC\n        1176, August 1990.\n\n   [6]  Crispin, M., \"Internet Message Access Protocol - Version 4\", RFC\n        2060, December 1996.\n\n   [7]  Crocker, D., \"Standard for the Format of ARPA Internet Text\n        Messages\", RFC 822, August 1982.\n\n   [8]  Crocker, D. and P. Overell, Eds., \"Augmented BNF for Syntax\n        Specifications: ABNF\", RFC 2234, November 1997.\n\n   [9]  De Winter, J., \"SMTP Service Extension for Remote Message Queue\n        Starting\", RFC 1985, August 1996.\n\n   [10] Fajman, R., \"An Extensible Message Format for Message\n        Disposition Notifications\", RFC 2298, March 1998.\n\n   [11] Freed, N, \"Behavior of and Requirements for Internet Firewalls\",\n        RFC 2979, October 2000.\n\n   [12] Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n        Extensions (MIME) Part One: Format of Internet Message Bodies\",\n        RFC 2045, December 1996.\n\n\n\n\nKlensin                     Standards Track                    [Page 68]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   [13] Freed, N., \"SMTP Service Extension for Command Pipelining\", RFC\n        2920, September 2000.\n\n   [14] Galvin, J., Murphy, S., Crocker, S. and N. Freed, \"Security\n        Multiparts for MIME: Multipart/Signed and Multipart/Encrypted\",\n        RFC 1847, October 1995.\n\n   [15] Gellens, R. and J. Klensin, \"Message Submission\", RFC 2476,\n        December 1998.\n\n   [16] Kille, S., \"Mapping between X.400 and RFC822/MIME\", RFC 2156,\n        January 1998.\n\n   [17] Hinden, R and S. Deering, Eds. \"IP Version 6 Addressing\n        Architecture\", RFC 2373, July 1998.\n\n   [18] Klensin, J., Freed, N. and K. Moore, \"SMTP Service Extension for\n        Message Size Declaration\", STD 10, RFC 1870, November 1995.\n\n   [19] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D. Crocker,\n        \"SMTP Service Extensions\", STD 10, RFC 1869, November 1995.\n\n   [20] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D. Crocker,\n        \"SMTP Service Extension for 8bit-MIMEtransport\", RFC 1652, July\n        1994.\n\n   [21] Lambert, M., \"PCMAIL: A distributed mail system for personal\n        computers\", RFC 1056, July 1988.\n\n   [22] Mockapetris, P., \"Domain names - implementation and\n        specification\", STD 13, RFC 1035, November 1987.\n\n        Mockapetris, P., \"Domain names - concepts and facilities\", STD\n        13, RFC 1034, November 1987.\n\n   [23] Moore, K., \"MIME (Multipurpose Internet Mail Extensions) Part\n        Three: Message Header Extensions for Non-ASCII Text\", RFC 2047,\n        December 1996.\n\n   [24] Moore, K., \"SMTP Service Extension for Delivery Status\n        Notifications\", RFC 1891, January 1996.\n\n   [25] Moore, K., and G. Vaudreuil, \"An Extensible Message Format for\n        Delivery Status Notifications\", RFC 1894, January 1996.\n\n   [26] Myers, J. and M. Rose, \"Post Office Protocol - Version 3\", STD\n        53, RFC 1939, May 1996.\n\n\n\n\nKlensin                     Standards Track                    [Page 69]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   [27] Partridge, C., \"Mail routing and the domain system\", RFC 974,\n        January 1986.\n\n   [28] Partridge, C., \"Duplicate messages and SMTP\", RFC 1047, February\n        1988.\n\n   [29] Postel, J., ed., \"Transmission Control Protocol - DARPA Internet\n        Program Protocol Specification\", STD 7, RFC 793, September 1981.\n\n   [30] Postel, J., \"Simple Mail Transfer Protocol\", RFC 821, August\n        1982.\n\n   [31] Ramsdell, B., Ed., \"S/MIME Version 3 Message Specification\", RFC\n        2633, June 1999.\n\n   [32] Resnick, P., Ed., \"Internet Message Format\", RFC 2822, April\n        2001.\n\n   [33] Vaudreuil, G., \"SMTP Service Extensions for Transmission of\n        Large and Binary MIME Messages\", RFC 1830, August 1995.\n\n   [34] Vaudreuil, G., \"Enhanced Mail System Status Codes\", RFC 1893,\n        January 1996.\n\n10. Editor's Address\n\n   John C. Klensin\n   AT&T Laboratories\n   99 Bedford St\n   Boston, MA 02111 USA\n\n   Phone: 617-574-3076\n   EMail: klensin@research.att.com\n\n11. Acknowledgments\n\n   Many people worked long and hard on the many iterations of this\n   document.  There was wide-ranging debate in the IETF DRUMS Working\n   Group, both on its mailing list and in face to face discussions,\n   about many technical issues and the role of a revised standard for\n   Internet mail transport, and many contributors helped form the\n   wording in this specification.  The hundreds of participants in the\n   many discussions since RFC 821 was produced are too numerous to\n   mention, but they all helped this document become what it is.\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 70]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\nAPPENDICES\n\nA. TCP Transport Service\n\n   The TCP connection supports the transmission of 8-bit bytes.  The\n   SMTP data is 7-bit ASCII characters.  Each character is transmitted\n   as an 8-bit byte with the high-order bit cleared to zero.  Service\n   extensions may modify this rule to permit transmission of full 8-bit\n   data bytes as part of the message body, but not in SMTP commands or\n   responses.\n\nB. Generating SMTP Commands from RFC 822 Headers\n\n   Some systems use RFC 822 headers (only) in a mail submission\n   protocol, or otherwise generate SMTP commands from RFC 822 headers\n   when such a message is handed to an MTA from a UA.  While the MTA-UA\n   protocol is a private matter, not covered by any Internet Standard,\n   there are problems with this approach.  For example, there have been\n   repeated problems with proper handling of \"bcc\" copies and\n   redistribution lists when information that conceptually belongs to a\n   mail envelopes is not separated early in processing from header\n   information (and kept separate).\n\n   It is recommended that the UA provide its initial (\"submission\n   client\") MTA with an envelope separate from the message itself.\n   However, if the envelope is not supplied, SMTP commands SHOULD be\n   generated as follows:\n\n   1. Each recipient address from a TO, CC, or BCC header field SHOULD\n      be copied to a RCPT command (generating multiple message copies if\n      that is required for queuing or delivery).  This includes any\n      addresses listed in a RFC 822 \"group\".  Any BCC fields SHOULD then\n      be removed from the headers.  Once this process is completed, the\n      remaining headers SHOULD be checked to verify that at least one\n      To:, Cc:, or Bcc: header remains.  If none do, then a bcc: header\n      with no additional information SHOULD be inserted as specified in\n      [32].\n\n   2. The return address in the MAIL command SHOULD, if possible, be\n      derived from the system's identity for the submitting (local)\n      user, and the \"From:\" header field otherwise.  If there is a\n      system identity available, it SHOULD also be copied to the Sender\n      header field if it is different from the address in the From\n      header field.  (Any Sender field that was already there SHOULD be\n      removed.)  Systems may provide a way for submitters to override\n      the envelope return address, but may want to restrict its use to\n      privileged users.  This will not prevent mail forgery, but may\n      lessen its incidence; see section 7.1.\n\n\n\nKlensin                     Standards Track                    [Page 71]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   When an MTA is being used in this way, it bears responsibility for\n   ensuring that the message being transmitted is valid.  The mechanisms\n   for checking that validity, and for handling (or returning) messages\n   that are not valid at the time of arrival, are part of the MUA-MTA\n   interface and not covered by this specification.\n\n   A submission protocol based on Standard RFC 822 information alone\n   MUST NOT be used to gateway a message from a foreign (non-SMTP) mail\n   system into an SMTP environment.  Additional information to construct\n   an envelope must come from some source in the other environment,\n   whether supplemental headers or the foreign system's envelope.\n\n   Attempts to gateway messages using only their header \"to\" and \"cc\"\n   fields have repeatedly caused mail loops and other behavior adverse\n   to the proper functioning of the Internet mail environment.  These\n   problems have been especially common when the message originates from\n   an Internet mailing list and is distributed into the foreign\n   environment using envelope information.  When these messages are then\n   processed by a header-only remailer, loops back to the Internet\n   environment (and the mailing list) are almost inevitable.\n\nC. Source Routes\n\n   Historically, the <reverse-path> was a reverse source routing list of\n   hosts and a source mailbox.  The first host in the <reverse-path>\n   SHOULD be the host sending the MAIL command.  Similarly, the\n   <forward-path> may be a source routing lists of hosts and a\n   destination mailbox.  However, in general, the <forward-path> SHOULD\n   contain only a mailbox and domain name, relying on the domain name\n   system to supply routing information if required.  The use of source\n   routes is deprecated; while servers MUST be prepared to receive and\n   handle them as discussed in section 3.3 and F.2, clients SHOULD NOT\n   transmit them and this section was included only to provide context.\n\n   For relay purposes, the forward-path may be a source route of the\n   form \"@ONE,@TWO:JOE@THREE\", where ONE, TWO, and THREE MUST BE fully-\n   qualified domain names.  This form is used to emphasize the\n   distinction between an address and a route.  The mailbox is an\n   absolute address, and the route is information about how to get\n   there.  The two concepts should not be confused.\n\n   If source routes are used, RFC 821 and the text below should be\n   consulted for the mechanisms for constructing and updating the\n   forward- and reverse-paths.\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 72]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n   The SMTP server transforms the command arguments by moving its own\n   identifier (its domain name or that of any domain for which it is\n   acting as a mail exchanger), if it appears, from the forward-path to\n   the beginning of the reverse-path.\n\n   Notice that the forward-path and reverse-path appear in the SMTP\n   commands and replies, but not necessarily in the message.  That is,\n   there is no need for these paths and especially this syntax to appear\n   in the \"To:\" , \"From:\", \"CC:\", etc. fields of the message header.\n   Conversely, SMTP servers MUST NOT derive final message delivery\n   information from message header fields.\n\n   When the list of hosts is present, it is a \"reverse\" source route and\n   indicates that the mail was relayed through each host on the list\n   (the first host in the list was the most recent relay).  This list is\n   used as a source route to return non-delivery notices to the sender.\n   As each relay host adds itself to the beginning of the list, it MUST\n   use its name as known in the transport environment to which it is\n   relaying the mail rather than that of the transport environment from\n   which the mail came (if they are different).\n\nD. Scenarios\n\n   This section presents complete scenarios of several types of SMTP\n   sessions.  In the examples, \"C:\" indicates what is said by the SMTP\n   client, and \"S:\" indicates what is said by the SMTP server.\n\nD.1 A Typical SMTP Transaction Scenario\n\n   This SMTP example shows mail sent by Smith at host bar.com, to Jones,\n   Green, and Brown at host foo.com.  Here we assume that host bar.com\n   contacts host foo.com directly.  The mail is accepted for Jones and\n   Brown.  Green does not have a mailbox at host foo.com.\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250 HELP\n      C: MAIL FROM:<Smith@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Jones@foo.com>\n      S: 250 OK\n      C: RCPT TO:<Green@foo.com>\n      S: 550 No such user here\n      C: RCPT TO:<Brown@foo.com>\n\n\n\nKlensin                     Standards Track                    [Page 73]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Blah blah blah...\n      C: ...etc. etc. etc.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\nD.2 Aborted SMTP Transaction Scenario\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250 HELP\n      C: MAIL FROM:<Smith@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Jones@foo.com>\n      S: 250 OK\n      C: RCPT TO:<Green@foo.com>\n      S: 550 No such user here\n      C: RSET\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\nD.3 Relayed Mail Scenario\n\n   Step 1  --  Source Host to Relay Host\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250 HELP\n      C: MAIL FROM:<JQP@bar.com>\n      S: 250 OK\n      C: RCPT TO:<@foo.com:Jones@XYZ.COM>\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Date: Thu, 21 May 1998 05:33:29 -0700\n\n\n\nKlensin                     Standards Track                    [Page 74]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      C: From: John Q. Public <JQP@bar.com>\n      C: Subject:  The Next Meeting of the Board\n      C: To: Jones@xyz.com\n      C:\n      C: Bill:\n      C: The next meeting of the board of directors will be\n      C: on Tuesday.\n      C:                         John.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\n   Step 2  --  Relay Host to Destination Host\n\n      S: 220 xyz.com Simple Mail Transfer Service Ready\n      C: EHLO foo.com\n      S: 250 xyz.com is on the air\n      C: MAIL FROM:<@foo.com:JQP@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Jones@XYZ.COM>\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Received: from bar.com by foo.com ; Thu, 21 May 1998\n      C:     05:33:29 -0700\n      C: Date: Thu, 21 May 1998 05:33:22 -0700\n      C: From: John Q. Public <JQP@bar.com>\n      C: Subject:  The Next Meeting of the Board\n      C: To: Jones@xyz.com\n      C:\n      C: Bill:\n      C: The next meeting of the board of directors will be\n      C: on Tuesday.\n      C:                         John.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\nD.4 Verifying and Sending Scenario\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n\n\n\nKlensin                     Standards Track                    [Page 75]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\n      S: 250-VRFY\n      S: 250 HELP\n      C: VRFY Crispin\n      S: 250 Mark Crispin <Admin.MRC@foo.com>\n      C: SEND FROM:<EAK@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Admin.MRC@foo.com>\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Blah blah blah...\n      C: ...etc. etc. etc.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\nE. Other Gateway Issues\n\n   In general, gateways between the Internet and other mail systems\n   SHOULD attempt to preserve any layering semantics across the\n   boundaries between the two mail systems involved.  Gateway-\n   translation approaches that attempt to take shortcuts by mapping,\n   (such as envelope information from one system to the message headers\n   or body of another) have generally proven to be inadequate in\n   important ways.  Systems translating between environments that do not\n   support both envelopes and headers and Internet mail must be written\n   with the understanding that some information loss is almost\n   inevitable.\n\nF. Deprecated Features of RFC 821\n\n   A few features of RFC 821 have proven to be problematic and SHOULD\n   NOT be used in Internet mail.\n\nF.1 TURN\n\n   This command, described in RFC 821, raises important security issues\n   since, in the absence of strong authentication of the host requesting\n   that the client and server switch roles, it can easily be used to\n   divert mail from its correct destination.  Its use is deprecated;\n   SMTP systems SHOULD NOT use it unless the server can authenticate the\n   client.\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 76]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\nF.2 Source Routing\n\n   RFC 821 utilized the concept of explicit source routing to get mail\n   from one host to another via a series of relays.  The requirement to\n   utilize source routes in regular mail traffic was eliminated by the\n   introduction of the domain name system \"MX\" record and the last\n   significant justification for them was eliminated by the\n   introduction, in RFC 1123, of a clear requirement that addresses\n   following an \"@\" must all be fully-qualified domain names.\n   Consequently, the only remaining justifications for the use of source\n   routes are support for very old SMTP clients or MUAs and in mail\n   system debugging.  They can, however, still be useful in the latter\n   circumstance and for routing mail around serious, but temporary,\n   problems such as problems with the relevant DNS records.\n\n   SMTP servers MUST continue to accept source route syntax as specified\n   in the main body of this document and in RFC 1123.  They MAY, if\n   necessary, ignore the routes and utilize only the target domain in\n   the address.  If they do utilize the source route, the message MUST\n   be sent to the first domain shown in the address.  In particular, a\n   server MUST NOT guess at shortcuts within the source route.\n\n   Clients SHOULD NOT utilize explicit source routing except under\n   unusual circumstances, such as debugging or potentially relaying\n   around firewall or mail system configuration errors.\n\nF.3 HELO\n\n   As discussed in sections 3.1 and 4.1.1, EHLO is strongly preferred to\n   HELO when the server will accept the former.  Servers must continue\n   to accept and process HELO in order to support older clients.\n\nF.4 #-literals\n\n   RFC 821 provided for specifying an Internet address as a decimal\n   integer host number prefixed by a pound sign, \"#\".  In practice, that\n   form has been obsolete since the introduction of TCP/IP.  It is\n   deprecated and MUST NOT be used.\n\nF.5 Dates and Years\n\n   When dates are inserted into messages by SMTP clients or servers\n   (e.g., in trace fields), four-digit years MUST BE used.  Two-digit\n   years are deprecated; three-digit years were never permitted in the\n   Internet mail system.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 77]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\nF.6 Sending versus Mailing\n\n   In addition to specifying a mechanism for delivering messages to\n   user's mailboxes, RFC 821 provided additional, optional, commands to\n   deliver messages directly to the user's terminal screen.  These\n   commands (SEND, SAML, SOML) were rarely implemented, and changes in\n   workstation technology and the introduction of other protocols may\n   have rendered them obsolete even where they are implemented.\n\n   Clients SHOULD NOT provide SEND, SAML, or SOML as services.  Servers\n   MAY implement them.  If they are implemented by servers, the\n   implementation model specified in RFC 821 MUST be used and the\n   command names MUST be published in the response to the EHLO command.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 78]\n\f\nRFC 2821             Simple Mail Transfer Protocol            April 2001\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2001).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 79]\n\f\n"
  },
  {
    "path": "rfc/rfc2831.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           P. Leach\nRequest for Comments: 2831                                     Microsoft\nCategory: Standards Track                                      C. Newman\n                                                                Innosoft\n                                                                May 2000\n\n\n            Using Digest Authentication as a SASL Mechanism\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\nAbstract\n\n   This specification defines how HTTP Digest Authentication [Digest]\n   can be used as a SASL [RFC 2222] mechanism for any protocol that has\n   a SASL profile. It is intended both as an improvement over CRAM-MD5\n   [RFC 2195] and as a convenient way to support a single authentication\n   mechanism for web, mail, LDAP, and other protocols.\n\nTable of Contents\n\n   1 INTRODUCTION.....................................................2\n    1.1 CONVENTIONS AND NOTATION......................................2\n    1.2 REQUIREMENTS..................................................3\n   2 AUTHENTICATION...................................................3\n    2.1 INITIAL AUTHENTICATION........................................3\n     2.1.1 Step One...................................................3\n     2.1.2 Step Two...................................................6\n     2.1.3 Step Three................................................12\n    2.2 SUBSEQUENT AUTHENTICATION....................................12\n     2.2.1 Step one..................................................13\n     2.2.2 Step Two..................................................13\n    2.3 INTEGRITY PROTECTION.........................................13\n    2.4 CONFIDENTIALITY PROTECTION...................................14\n   3 SECURITY CONSIDERATIONS.........................................15\n    3.1 AUTHENTICATION OF CLIENTS USING DIGEST AUTHENTICATION........15\n    3.2 COMPARISON OF DIGEST WITH PLAINTEXT PASSWORDS................16\n    3.3 REPLAY ATTACKS...............................................16\n\n\n\nLeach & Newman              Standards Track                     [Page 1]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n    3.4 ONLINE DICTIONARY ATTACKS....................................16\n    3.5 OFFLINE DICTIONARY ATTACKS...................................16\n    3.6 MAN IN THE MIDDLE............................................17\n    3.7 CHOSEN PLAINTEXT ATTACKS.....................................17\n    3.8 SPOOFING BY COUNTERFEIT SERVERS..............................17\n    3.9 STORING PASSWORDS............................................17\n    3.10 MULTIPLE REALMS.............................................18\n    3.11 SUMMARY.....................................................18\n   4 EXAMPLE.........................................................18\n   5 REFERENCES......................................................20\n   6 AUTHORS' ADDRESSES..............................................21\n   7 ABNF............................................................21\n    7.1 AUGMENTED BNF................................................21\n    7.2 BASIC RULES..................................................23\n   8 SAMPLE CODE.....................................................25\n   9 FULL COPYRIGHT STATEMENT........................................27\n\n1  Introduction\n\n   This specification describes the use of HTTP Digest Access\n   Authentication as a SASL mechanism. The authentication type\n   associated with the Digest SASL mechanism is \"DIGEST-MD5\".\n\n   This specification is intended to be upward compatible with the\n   \"md5-sess\" algorithm of HTTP/1.1 Digest Access Authentication\n   specified in [Digest]. The only difference in the \"md5-sess\"\n   algorithm is that some directives not needed in a SASL mechanism have\n   had their values defaulted.\n\n   There is one new feature for use as a SASL mechanism: integrity\n   protection on application protocol messages after an authentication\n   exchange.\n\n   Also, compared to CRAM-MD5, DIGEST-MD5 prevents chosen plaintext\n   attacks, and permits the use of third party authentication servers,\n   mutual authentication, and optimized reauthentication if a client has\n   recently authenticated to a server.\n\n1.1  Conventions and Notation\n\n   This specification uses the same ABNF notation and lexical\n   conventions as HTTP/1.1 specification; see appendix A.\n\n   Let { a, b, ... } be the concatenation of the octet strings a, b, ...\n\n   Let H(s) be the 16 octet MD5 hash [RFC 1321] of the octet string s.\n\n\n\n\n\nLeach & Newman              Standards Track                     [Page 2]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   Let KD(k, s) be H({k, \":\", s}), i.e., the 16 octet hash of the string\n   k, a colon and the string s.\n\n   Let HEX(n) be the representation of the 16 octet MD5 hash n as a\n   string of 32 hex digits (with alphabetic characters always in lower\n   case, since MD5 is case sensitive).\n\n   Let HMAC(k, s) be the 16 octet HMAC-MD5 [RFC 2104] of the octet\n   string s using the octet string k as a key.\n\n   The value of a quoted string constant as an octet string does not\n   include any terminating null character.\n\n1.2  Requirements\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [RFC 2119].\n\n   An implementation is not compliant if it fails to satisfy one or more\n   of the MUST level requirements for the protocols it implements. An\n   implementation that satisfies all the MUST level and all the SHOULD\n   level requirements for its protocols is said to be \"unconditionally\n   compliant\"; one that satisfies all the MUST level requirements but\n   not all the SHOULD level requirements for its protocols is said to be\n   \"conditionally compliant.\"\n\n2  Authentication\n\n   The following sections describe how to use Digest as a SASL\n   authentication mechanism.\n\n2.1  Initial Authentication\n\n   If the client has not recently authenticated to the server, then it\n   must perform \"initial authentication\", as defined in this section. If\n   it has recently authenticated, then a more efficient form is\n   available, defined in the next section.\n\n2.1.1  Step One\n\n   The server starts by sending a challenge. The data encoded in the\n   challenge contains a string formatted according to the rules for a\n   \"digest-challenge\" defined as follows:\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                     [Page 3]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   digest-challenge  =\n         1#( realm | nonce | qop-options | stale | maxbuf | charset\n               algorithm | cipher-opts | auth-param )\n\n        realm             = \"realm\" \"=\" <\"> realm-value <\">\n        realm-value       = qdstr-val\n        nonce             = \"nonce\" \"=\" <\"> nonce-value <\">\n        nonce-value       = qdstr-val\n        qop-options       = \"qop\" \"=\" <\"> qop-list <\">\n        qop-list          = 1#qop-value\n        qop-value         = \"auth\" | \"auth-int\" | \"auth-conf\" |\n                             token\n        stale             = \"stale\" \"=\" \"true\"\n        maxbuf            = \"maxbuf\" \"=\" maxbuf-value\n        maxbuf-value      = 1*DIGIT\n        charset           = \"charset\" \"=\" \"utf-8\"\n        algorithm         = \"algorithm\" \"=\" \"md5-sess\"\n        cipher-opts       = \"cipher\" \"=\" <\"> 1#cipher-value <\">\n        cipher-value      = \"3des\" | \"des\" | \"rc4-40\" | \"rc4\" |\n                            \"rc4-56\" | token\n        auth-param        = token \"=\" ( token | quoted-string )\n\n   The meanings of the values of the directives used above are as\n   follows:\n\n   realm\n      Mechanistically, a string which can enable users to know which\n      username and password to use, in case they might have different\n      ones for different servers. Conceptually, it is the name of a\n      collection of accounts that might include the user's account. This\n      string should contain at least the name of the host performing the\n      authentication and might additionally indicate the collection of\n      users who might have access. An example might be\n      \"registered_users@gotham.news.example.com\".  This directive is\n      optional; if not present, the client SHOULD solicit it from the\n      user or be able to compute a default; a plausible default might be\n      the realm supplied by the user when they logged in to the client\n      system. Multiple realm directives are allowed, in which case the\n      user or client must choose one as the realm for which to supply to\n      username and password.\n\n   nonce\n      A server-specified data string which MUST be different each time a\n      digest-challenge is sent as part of initial authentication.  It is\n      recommended that this string be base64 or hexadecimal data. Note\n      that since the string is passed as a quoted string, the\n      double-quote character is not allowed unless escaped (see section\n      7.2). The contents of the nonce are implementation dependent. The\n\n\n\nLeach & Newman              Standards Track                     [Page 4]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n      security of the implementation depends on a good choice. It is\n      RECOMMENDED that it contain at least 64 bits of entropy. The nonce\n      is opaque to the client. This directive is required and MUST\n      appear exactly once; if not present, or if multiple instances are\n      present, the client should abort the authentication exchange.\n\n   qop-options\n      A quoted string of one or more tokens indicating the \"quality of\n      protection\" values supported by the server.  The value \"auth\"\n      indicates authentication; the value \"auth-int\" indicates\n      authentication with integrity protection; the value \"auth-conf\"\n      indicates authentication with integrity protection and encryption.\n      This directive is optional; if not present it defaults to \"auth\".\n      The client MUST ignore unrecognized options; if the client\n      recognizes no option, it should abort the authentication exchange.\n\n   stale\n      The \"stale\" directive is not used in initial authentication. See\n      the next section for its use in subsequent authentications. This\n      directive may appear at most once; if multiple instances are\n      present, the client should abort the authentication exchange.\n\n   maxbuf\n      A number indicating the size of the largest buffer the server is\n      able to receive when using \"auth-int\" or \"auth-conf\". If this\n      directive is missing, the default value is 65536. This directive\n      may appear at most once; if multiple instances are present, the\n      client should abort the authentication exchange.\n\n   charset\n      This directive, if present, specifies that the server supports\n      UTF-8 encoding for the username and password. If not present, the\n      username and password must be encoded in ISO 8859-1 (of which\n      US-ASCII is a subset). The directive is needed for backwards\n      compatibility with HTTP Digest, which only supports ISO 8859-1.\n      This directive may appear at most once; if multiple instances are\n      present, the client should abort the authentication exchange.\n\n   algorithm\n      This directive is required for backwards compatibility with HTTP\n      Digest., which supports other algorithms. . This directive is\n      required and MUST appear exactly once; if not present, or if\n      multiple instances are present, the client should abort the\n      authentication exchange.\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                     [Page 5]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   cipher-opts\n      A list of ciphers that the server supports. This directive must be\n      present exactly once if \"auth-conf\" is offered in the\n      \"qop-options\" directive, in which case the \"3des\" and \"des\" modes\n      are mandatory-to-implement. The client MUST ignore unrecognized\n      options; if the client recognizes no option, it should abort the\n      authentication exchange.\n\n      des\n         the Data Encryption Standard (DES) cipher [FIPS] in cipher\n         block chaining (CBC) mode with a 56 bit key.\n\n      3des\n         the \"triple DES\" cipher in CBC mode with EDE with the same key\n         for each E stage (aka \"two keys mode\") for a total key length\n         of 112 bits.\n\n      rc4, rc4-40, rc4-56\n         the RC4 cipher with a 128 bit, 40 bit, and 56 bit key,\n         respectively.\n\n   auth-param This construct allows for future extensions; it may appear\n      more than once. The client MUST ignore any unrecognized\n      directives.\n\n   For use as a SASL mechanism, note that the following changes are made\n   to \"digest-challenge\" from HTTP: the following Digest options (called\n   \"directives\" in HTTP terminology) are unused (i.e., MUST NOT be sent,\n   and MUST be ignored if received):\n\n    opaque\n    domain\n\n   The size of a digest-challenge MUST be less than 2048 bytes.\n\n2.1.2  Step Two\n\n   The client makes note of the \"digest-challenge\" and then responds\n   with a string formatted and computed according to the rules for a\n   \"digest-response\" defined as follows:\n\n\n\n\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                     [Page 6]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   digest-response  = 1#( username | realm | nonce | cnonce |\n                          nonce-count | qop | digest-uri | response |\n                          maxbuf | charset | cipher | authzid |\n                          auth-param )\n\n       username         = \"username\" \"=\" <\"> username-value <\">\n       username-value   = qdstr-val\n       cnonce           = \"cnonce\" \"=\" <\"> cnonce-value <\">\n       cnonce-value     = qdstr-val\n       nonce-count      = \"nc\" \"=\" nc-value\n       nc-value         = 8LHEX\n       qop              = \"qop\" \"=\" qop-value\n       digest-uri       = \"digest-uri\" \"=\" <\"> digest-uri-value <\">\n       digest-uri-value  = serv-type \"/\" host [ \"/\" serv-name ]\n       serv-type        = 1*ALPHA\n       host             = 1*( ALPHA | DIGIT | \"-\" | \".\" )\n       serv-name        = host\n       response         = \"response\" \"=\" response-value\n       response-value   = 32LHEX\n       LHEX             = \"0\" | \"1\" | \"2\" | \"3\" |\n                          \"4\" | \"5\" | \"6\" | \"7\" |\n                          \"8\" | \"9\" | \"a\" | \"b\" |\n                          \"c\" | \"d\" | \"e\" | \"f\"\n       cipher           = \"cipher\" \"=\" cipher-value\n       authzid          = \"authzid\" \"=\" <\"> authzid-value <\">\n       authzid-value    = qdstr-val\n\n\n   username\n      The user's name in the specified realm, encoded according to the\n      value of the \"charset\" directive. This directive is required and\n      MUST be present exactly once; otherwise, authentication fails.\n\n   realm\n      The realm containing the user's account. This directive is\n      required if the server provided any realms in the\n      \"digest-challenge\", in which case it may appear exactly once and\n      its value SHOULD be one of those realms. If the directive is\n      missing, \"realm-value\" will set to the empty string when computing\n      A1 (see below for details).\n\n   nonce\n      The server-specified data string received in the preceding\n      digest-challenge. This directive is required and MUST be present\n      exactly once; otherwise, authentication fails.\n\n\n\n\n\n\nLeach & Newman              Standards Track                     [Page 7]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   cnonce\n      A client-specified data string which MUST be different each time a\n      digest-response is sent as part of initial authentication. The\n      cnonce-value is an opaque quoted string value provided by the\n      client and used by both client and server to avoid chosen\n      plaintext attacks, and to provide mutual authentication. The\n      security of the implementation depends on a good choice. It is\n      RECOMMENDED that it contain at least 64 bits of entropy. This\n      directive is required and MUST be present exactly once; otherwise,\n      authentication fails.\n\n   nonce-count\n      The nc-value is the hexadecimal count of the number of requests\n      (including the current request) that the client has sent with the\n      nonce value in this request.  For example, in the first request\n      sent in response to a given nonce value, the client sends\n      \"nc=00000001\". The purpose of this directive is to allow the\n      server to detect request replays by maintaining its own copy of\n      this count - if the same nc-value is seen twice, then the request\n      is a replay.   See the description below of the construction of\n      the response value. This directive may appear at most once; if\n      multiple instances are present, the client should abort the\n      authentication exchange.\n\n   qop\n      Indicates what \"quality of protection\" the client accepted. If\n      present, it may appear exactly once and  its value MUST be one of\n      the alternatives in qop-options. If not present, it defaults to\n      \"auth\". These values affect the computation of the response. Note\n      that this is a single token, not a quoted list of alternatives.\n\n   serv-type\n      Indicates the type of service, such as \"www\" for web service,\n      \"ftp\" for FTP service, \"smtp\" for mail delivery service, etc. The\n      service name as defined in the SASL profile for the protocol see\n      section 4 of [RFC 2222], registered in the IANA registry of\n      \"service\" elements for the GSSAPI host-based service name form\n      [RFC 2078].\n\n   host\n      The DNS host name or IP address for the service requested.  The\n      DNS host name must be the fully-qualified canonical name of the\n      host. The DNS host name is the preferred form; see notes on server\n      processing of the digest-uri.\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                     [Page 8]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   serv-name\n      Indicates the name of the service if it is replicated. The service\n      is considered to be replicated if the client's service-location\n      process involves resolution using standard DNS lookup operations,\n      and if these operations involve DNS records (such as SRV, or MX)\n      which resolve one DNS name into a set of other DNS names. In this\n      case, the initial name used by the client is the \"serv-name\", and\n      the final name is the \"host\" component. For example, the incoming\n      mail service for \"example.com\" may be replicated through the use\n      of MX records stored in the DNS, one of which points at an SMTP\n      server called \"mail3.example.com\"; it's \"serv-name\" would be\n      \"example.com\", it's \"host\" would be \"mail3.example.com\". If the\n      service is not replicated, or the serv-name is identical to the\n      host, then the serv-name component MUST be omitted.\n\n   digest-uri\n      Indicates the principal name of the service with which the client\n      wishes to connect, formed from the serv-type, host, and serv-name.\n      For example, the FTP service on \"ftp.example.com\" would have a\n      \"digest-uri\" value of \"ftp/ftp.example.com\"; the SMTP server from\n      the example above would have a \"digest-uri\" value of\n      \"smtp/mail3.example.com/example.com\".\n\n   Servers SHOULD check that the supplied value is correct. This will\n   detect accidental connection to the incorrect server. It is also so\n   that clients will be trained to provide values that will work with\n   implementations that use a shared back-end authentication service\n   that can provide server authentication.\n\n   The serv-type component should match the service being offered. The\n   host component should match one of the host names of the host on\n   which the service is running, or it's IP address. Servers SHOULD NOT\n   normally support the IP address form, because server authentication\n   by IP address is not very useful; they should only do so if the DNS\n   is unavailable or unreliable. The serv-name component should match\n   one of the service's configured service names.\n\n   This directive may appear at most once; if multiple instances are\n   present, the client should abort the authentication exchange.\n\n   Note: In the HTTP use of Digest authentication, the digest-uri is the\n   URI (usually a URL) of the resource requested -- hence the name of\n   the directive.\n\n   response\n      A string of 32 hex digits computed as defined below, which proves\n      that the user knows a password. This directive is required and\n      MUST be present exactly once; otherwise, authentication fails.\n\n\n\nLeach & Newman              Standards Track                     [Page 9]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   maxbuf\n      A number indicating the size of the largest buffer the client is\n      able to receive. If this directive is missing, the default value\n      is 65536. This directive may appear at most once; if multiple\n      instances are present, the server should abort the authentication\n      exchange.\n\n   charset\n      This directive, if present, specifies that the client has used\n      UTF-8 encoding for the username and password. If not present, the\n      username and password must be encoded in ISO 8859-1 (of which\n      US-ASCII is a subset). The client should send this directive only\n      if the server has indicated it supports UTF-8. The directive is\n      needed for backwards compatibility with HTTP Digest, which only\n      supports ISO 8859-1.\n\n   LHEX\n      32 hex digits, where the alphabetic characters MUST be lower case,\n      because MD5 is not case insensitive.\n\n   cipher\n      The cipher chosen by the client. This directive MUST appear\n      exactly once if \"auth-conf\" is negotiated; if required and not\n      present, authentication fails.\n\n   authzid\n      The \"authorization ID\" as per RFC 2222, encoded in UTF-8. This\n      directive is optional. If present, and the authenticating user has\n      sufficient privilege, and the server supports it, then after\n      authentication the server will use this identity for making all\n      accesses and access checks. If the client specifies it, and the\n      server does not support it, then the response-value will be\n      incorrect, and authentication will fail.\n\n   The size of a digest-response MUST be less than 4096 bytes.\n\n2.1.2.1   Response-value\n\n   The definition of \"response-value\" above indicates the encoding for\n   its value -- 32 lower case hex characters. The following definitions\n   show how the value is computed.\n\n   Although qop-value and components of digest-uri-value may be\n   case-insensitive, the case which the client supplies in step two is\n   preserved for the purpose of computing and verifying the\n   response-value.\n\n      response-value  =\n\n\n\nLeach & Newman              Standards Track                    [Page 10]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n         HEX( KD ( HEX(H(A1)),\n                 { nonce-value, \":\" nc-value, \":\",\n                   cnonce-value, \":\", qop-value, \":\", HEX(H(A2)) }))\n\n   If authzid is specified, then A1 is\n\n\n      A1 = { H( { username-value, \":\", realm-value, \":\", passwd } ),\n           \":\", nonce-value, \":\", cnonce-value, \":\", authzid-value }\n\n   If authzid is not specified, then A1 is\n\n\n      A1 = { H( { username-value, \":\", realm-value, \":\", passwd } ),\n           \":\", nonce-value, \":\", cnonce-value }\n\n   where\n\n         passwd   = *OCTET\n\n   The \"username-value\", \"realm-value\" and \"passwd\" are encoded\n   according to the value of the \"charset\" directive. If \"charset=UTF-8\"\n   is present, and all the characters of either \"username-value\" or\n   \"passwd\" are in the ISO 8859-1 character set, then it must be\n   converted to ISO 8859-1 before being hashed. This is so that\n   authentication databases that store the hashed username, realm and\n   password (which is common) can be shared compatibly with HTTP, which\n   specifies ISO 8859-1. A sample implementation of this conversion is\n   in section 8.\n\n   If the \"qop\" directive's value is \"auth\", then A2 is:\n\n      A2       = { \"AUTHENTICATE:\", digest-uri-value }\n\n   If the \"qop\" value is \"auth-int\" or \"auth-conf\" then A2 is:\n\n      A2       = { \"AUTHENTICATE:\", digest-uri-value,\n               \":00000000000000000000000000000000\" }\n\n   Note that \"AUTHENTICATE:\" must be in upper case, and the second\n   string constant is a string with a colon followed by 32 zeros.\n\n   These apparently strange values of A2 are for compatibility with\n   HTTP; they were arrived at by setting \"Method\" to \"AUTHENTICATE\" and\n   the hash of the entity body to zero in the HTTP digest calculation of\n   A2.\n\n   Also, in the HTTP usage of Digest, several directives in the\n\n\n\nLeach & Newman              Standards Track                    [Page 11]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   \"digest-challenge\" sent by the server have to be returned by the\n   client in the \"digest-response\". These are:\n\n    opaque\n    algorithm\n\n   These directives are not needed when Digest is used as a SASL\n   mechanism (i.e., MUST NOT be sent, and MUST be ignored if received).\n\n2.1.3  Step Three\n\n   The server receives and validates the \"digest-response\". The server\n   checks that the nonce-count is \"00000001\". If it supports subsequent\n   authentication (see section 2.2), it saves the value of the nonce and\n   the nonce-count. It sends a message formatted as follows:\n\n    response-auth = \"rspauth\" \"=\" response-value\n\n   where response-value is calculated as above, using the values sent in\n   step two, except that if qop is \"auth\", then A2 is\n\n       A2 = { \":\", digest-uri-value }\n\n   And if qop is \"auth-int\" or \"auth-conf\" then A2 is\n\n       A2 = { \":\", digest-uri-value, \":00000000000000000000000000000000\" }\n\n   Compared to its use in HTTP, the following Digest directives in the\n   \"digest-response\" are unused:\n\n       nextnonce\n       qop\n       cnonce\n       nonce-count\n\n2.2  Subsequent Authentication\n\n   If the client has previously authenticated to the server, and\n   remembers the values of username, realm, nonce, nonce-count, cnonce,\n   and qop that it used in that authentication, and the SASL profile for\n   a protocol permits an initial client response, then it MAY perform\n   \"subsequent authentication\", as defined in this section.\n\n\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 12]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n2.2.1  Step one\n\n   The client uses the values from the previous authentication and sends\n   an initial response with a string formatted and computed according to\n   the rules for a \"digest-response\", as defined above, but with a\n   nonce-count one greater than used in the last \"digest-response\".\n\n2.2.2  Step Two\n\n   The server receives the \"digest-response\". If the server does not\n   support subsequent authentication, then it sends a\n   \"digest-challenge\", and authentication proceeds as in initial\n   authentication. If the server has no saved nonce and nonce-count from\n   a previous authentication, then it sends a \"digest-challenge\", and\n   authentication proceeds as in initial authentication. Otherwise, the\n   server validates the \"digest-response\", checks that the nonce-count\n   is one greater than that used in the previous authentication using\n   that nonce, and saves the new value of nonce-count.\n\n   If the response is invalid, then the server sends a\n   \"digest-challenge\", and authentication proceeds as in initial\n   authentication (and should be configurable to log an authentication\n   failure in some sort of security audit log, since the failure may be\n   a symptom of an attack). The nonce-count MUST NOT be incremented in\n   this case: to do so would allow a denial of service attack by sending\n   an out-of-order nonce-count.\n\n   If the response is valid, the server MAY choose to deem that\n   authentication has succeeded. However, if it has been too long since\n   the previous authentication, or for any other reason, the server MAY\n   send a new \"digest-challenge\" with a new value for nonce. The\n   challenge MAY contain a \"stale\" directive with value \"true\", which\n   says that the client may respond to the challenge using the password\n   it used in the previous response; otherwise, the client must solicit\n   the password anew from the user. This permits the server to make sure\n   that the user has presented their password recently. (The directive\n   name refers to the previous nonce being stale, not to the last use of\n   the password.) Except for the handling of \"stale\", after sending the\n   \"digest-challenge\" authentication proceeds as in the case of initial\n   authentication.\n\n2.3   Integrity Protection\n\n   If the server offered \"qop=auth-int\" and the client responded\n   \"qop=auth-int\", then subsequent messages, up to but not including the\n   next subsequent authentication, between the client and the server\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 13]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   MUST be integrity protected. Using as a base session key the value of\n   H(A1) as defined above the client and server calculate a pair of\n   message integrity keys as follows.\n\n   The key for integrity protecting messages from client to server is:\n\n   Kic = MD5({H(A1),\n   \"Digest session key to client-to-server signing key magic constant\"})\n\n   The key for integrity protecting messages from server to client is:\n\n   Kis = MD5({H(A1),\n   \"Digest session key to server-to-client signing key magic constant\"})\n\n   where MD5 is as specified in [RFC 1321]. If message integrity is\n   negotiated, a MAC block for each message is appended to the message.\n   The MAC block is 16 bytes: the first 10 bytes of the HMAC-MD5 [RFC\n   2104] of the message, a 2-byte message type number in network byte\n   order with value 1, and the 4-byte sequence number in network byte\n   order. The message type is to allow for future extensions such as\n   rekeying.\n\n   MAC(Ki, SeqNum, msg) = (HMAC(Ki, {SeqNum, msg})[0..9], 0x0001,\n   SeqNum)\n\n   where Ki is Kic for messages sent by the client and Kis for those\n   sent by the server. The sequence number is initialized to zero, and\n   incremented by one for each message sent.\n\n   Upon receipt, MAC(Ki, SeqNum, msg) is computed and compared with the\n   received value; the message is discarded if they differ.\n\n2.4   Confidentiality Protection\n\n   If the server sent a \"cipher-opts\" directive and the client responded\n   with a \"cipher\" directive, then subsequent messages between the\n   client and the server MUST be confidentiality protected. Using as a\n   base session key the value of H(A1) as defined above the client and\n   server calculate a pair of message integrity keys as follows.\n\n   The key for confidentiality protecting messages from client to server\n   is:\n\n   Kcc = MD5({H(A1)[0..n],\n   \"Digest H(A1) to client-to-server sealing key magic constant\"})\n\n   The key for confidentiality protecting messages from server to client\n   is:\n\n\n\nLeach & Newman              Standards Track                    [Page 14]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   Kcs = MD5({H(A1)[0..n],\n   \"Digest H(A1) to server-to-client sealing key magic constant\"})\n\n   where MD5 is as specified in [RFC 1321]. For cipher \"rc4-40\" n is 5;\n   for \"rc4-56\" n is 7; for the rest n is 16. The key for the \"rc-*\"\n   ciphers is all 16 bytes of Kcc or Kcs; the key for \"des\" is the first\n   7 bytes; the key for \"3des\" is the first 14 bytes. The IV for \"des\"\n   and \"3des\" is the last 8 bytes of Kcc or Kcs.\n\n   If message confidentiality is negotiated, each message is encrypted\n   with the chosen cipher and a MAC block is appended to the message.\n\n   The MAC block is a variable length padding prefix followed by 16\n   bytes formatted as follows: the first 10 bytes of the HMAC-MD5 [RFC\n   2104] of the message, a 2-byte message type number in network byte\n   order with value 1, and the 4-byte sequence number in network byte\n   order. If the blocksize of the chosen cipher is not 1 byte, the\n   padding prefix is one or more octets each containing the number of\n   padding bytes, such that total length of the encrypted part of the\n   message is a multiple of the blocksize. The padding and first 10\n   bytes of the MAC block are encrypted along with the message.\n\n   SEAL(Ki, Kc, SeqNum, msg) =\n         {CIPHER(Kc, {msg, pad, HMAC(Ki, {SeqNum, msg})[0..9])}), 0x0001,\n          SeqNum}\n\n   where CIPHER is the chosen cipher, Ki and Kc are Kic and Kcc for\n   messages sent by the client and Kis and Kcs for those sent by the\n   server. The sequence number is initialized to zero, and incremented\n   by one for each message sent.\n\n   Upon receipt, the message is decrypted, HMAC(Ki, {SeqNum, msg}) is\n   computed and compared with the received value; the message is\n   discarded if they differ.\n\n3  Security Considerations\n\n3.1   Authentication of Clients using Digest Authentication\n\n   Digest Authentication does not provide a strong authentication\n   mechanism, when compared to public key based mechanisms, for example.\n   However, since it prevents chosen plaintext attacks, it is stronger\n   than (e.g.) CRAM-MD5, which has been proposed for use with LDAP [10],\n   POP and IMAP (see RFC 2195 [9]).   It is intended to replace the much\n   weaker and even more dangerous use of plaintext passwords; however,\n   since it is still a password based mechanism it avoids some of the\n   potential deployabilty issues with public-key, OTP or similar\n   mechanisms.\n\n\n\nLeach & Newman              Standards Track                    [Page 15]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   Digest Authentication offers no confidentiality protection beyond\n   protecting the actual password. All of the rest of the challenge and\n   response are available to an eavesdropper, including the user's name\n   and authentication realm.\n\n3.2   Comparison of Digest with Plaintext Passwords\n\n   The greatest threat to the type of transactions for which these\n   protocols are used is network snooping. This kind of transaction\n   might involve, for example, online access to a mail service whose use\n   is restricted to paying subscribers. With plaintext password\n   authentication an eavesdropper can obtain the password of the user.\n   This not only permits him to access anything in the database, but,\n   often worse, will permit access to anything else the user protects\n   with the same password.\n\n3.3   Replay Attacks\n\n   Replay attacks are defeated if the client or the server chooses a\n   fresh nonce for each authentication, as this specification requires.\n\n3.4  Online dictionary attacks\n\n   If the attacker can eavesdrop, then it can test any overheard\n   nonce/response pairs against a (potentially very large) list of\n   common words. Such a list is usually much smaller than the total\n   number of possible passwords. The cost of computing the response for\n   each password on the list is paid once for each challenge.\n\n   The server can mitigate this attack by not allowing users to select\n   passwords that are in a dictionary.\n\n3.5  Offline dictionary attacks\n\n   If the attacker can choose the challenge, then it can precompute the\n   possible responses to that challenge for a list of common words. Such\n   a list is usually much smaller than the total number of possible\n   passwords. The cost of computing the response for each password on\n   the list is paid just once.\n\n   Offline dictionary attacks are defeated if the client chooses a fresh\n   nonce for each authentication, as this specification requires.\n\n\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 16]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n3.6  Man in the Middle\n\n   Digest authentication is vulnerable to \"man in the middle\" (MITM)\n   attacks. Clearly, a MITM would present all the problems of\n   eavesdropping. But it also offers some additional opportunities to\n   the attacker.\n\n   A possible man-in-the-middle attack would be to substitute a weaker\n   qop scheme for the one(s) sent by the server; the server will not be\n   able to detect this attack. For this reason, the client should always\n   use the strongest scheme that it understands from the choices\n   offered, and should never choose a scheme that does not meet its\n   minimum requirements.\n\n3.7  Chosen plaintext attacks\n\n   A chosen plaintext attack is where a MITM or a malicious server can\n   arbitrarily choose the challenge that the client will use to compute\n   the response. The ability to choose the challenge is known to make\n   cryptanalysis much easier [8].\n\n   However, Digest does not permit the attack to choose the challenge as\n   long as the client chooses a fresh nonce for each authentication, as\n   this specification requires.\n\n3.8  Spoofing by Counterfeit Servers\n\n   If a user can be led to believe that she is connecting to a host\n   containing information protected by a password she knows, when in\n   fact she is connecting to a hostile server, then the hostile server\n   can obtain challenge/response pairs where it was able to partly\n   choose the challenge. There is no known way that this can be\n   exploited.\n\n3.9  Storing passwords\n\n   Digest authentication requires that the authenticating agent (usually\n   the server) store some data derived from the user's name and password\n   in a \"password file\" associated with a given realm. Normally this\n   might contain pairs consisting of username and H({ username-value,\n   \":\", realm-value, \":\", passwd }), which is adequate to compute H(A1)\n   as described above without directly exposing the user's password.\n\n   The security implications of this are that if this password file is\n   compromised, then an attacker gains immediate access to documents on\n   the server using this realm. Unlike, say a standard UNIX password\n   file, this information need not be decrypted in order to access\n   documents in the server realm associated with this file. On the other\n\n\n\nLeach & Newman              Standards Track                    [Page 17]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   hand, decryption, or more likely a brute force attack, would be\n   necessary to obtain the user's password. This is the reason that the\n   realm is part of the digested data stored in the password file. It\n   means that if one Digest authentication password file is compromised,\n   it does not automatically compromise others with the same username\n   and password (though it does expose them to brute force attack).\n\n   There are two important security consequences of this. First the\n   password file must be protected as if it contained plaintext\n   passwords, because for the purpose of accessing documents in its\n   realm, it effectively does.\n\n   A second consequence of this is that the realm string should be\n   unique among all realms that any single user is likely to use. In\n   particular a realm string should include the name of the host doing\n   the authentication.\n\n3.10  Multiple realms\n\n   Use of multiple realms may mean both that compromise of a the\n   security database for a single realm does not compromise all\n   security, and that there are more things to protect in order to keep\n   the whole system secure.\n\n3.11  Summary\n\n   By modern cryptographic standards Digest Authentication is weak,\n   compared to (say) public key based mechanisms. But for a large range\n   of purposes it is valuable as a replacement for plaintext passwords.\n   Its strength may vary depending on the implementation.\n\n4  Example\n\n   This example shows the use of the Digest SASL mechanism with the\n   IMAP4 AUTHENTICATE command [RFC 2060].\n\n   In this example, \"C:\" and \"S:\" represent a line sent by the client or\n   server respectively including a CRLF at the end.  Linebreaks and\n   indentation within a \"C:\" or \"S:\" are editorial and not part of the\n   protocol. The password in this example was \"secret\".  Note that the\n   base64 encoding of the challenges and responses is part of the IMAP4\n   AUTHENTICATE command, not part of the Digest specification itself.\n\n    S: * OK elwood.innosoft.com PMDF IMAP4rev1 V6.0-9\n    C: c CAPABILITY\n    S: * CAPABILITY IMAP4 IMAP4rev1 ACL LITERAL+ NAMESPACE QUOTA\n                UIDPLUS AUTH=CRAM-MD5 AUTH=DIGEST-MD5 AUTH=PLAIN\n    S: c OK Completed\n\n\n\nLeach & Newman              Standards Track                    [Page 18]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n    C: a AUTHENTICATE DIGEST-MD5\n    S: + cmVhbG09ImVsd29vZC5pbm5vc29mdC5jb20iLG5vbmNlPSJPQTZNRzl0\n         RVFHbTJoaCIscW9wPSJhdXRoIixhbGdvcml0aG09bWQ1LXNlc3MsY2hh\n         cnNldD11dGYtOA==\n    C: Y2hhcnNldD11dGYtOCx1c2VybmFtZT0iY2hyaXMiLHJlYWxtPSJlbHdvb2\n       QuaW5ub3NvZnQuY29tIixub25jZT0iT0E2TUc5dEVRR20yaGgiLG5jPTAw\n       MDAwMDAxLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLGRpZ2VzdC11cmk9Im\n       ltYXAvZWx3b29kLmlubm9zb2Z0LmNvbSIscmVzcG9uc2U9ZDM4OGRhZDkw\n       ZDRiYmQ3NjBhMTUyMzIxZjIxNDNhZjcscW9wPWF1dGg=\n    S: + cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZA==\n    C:\n    S: a OK User logged in\n    ---\n\n    The base64-decoded version of the SASL exchange is:\n\n    S: realm=\"elwood.innosoft.com\",nonce=\"OA6MG9tEQGm2hh\",qop=\"auth\",\n       algorithm=md5-sess,charset=utf-8\n    C: charset=utf-8,username=\"chris\",realm=\"elwood.innosoft.com\",\n       nonce=\"OA6MG9tEQGm2hh\",nc=00000001,cnonce=\"OA6MHXh6VqTrRk\",\n       digest-uri=\"imap/elwood.innosoft.com\",\n       response=d388dad90d4bbd760a152321f2143af7,qop=auth\n    S: rspauth=ea40f60335c427b5527b84dbabcdfffd\n\n    The password in this example was \"secret\".\n\n   This example shows the use of the Digest SASL mechanism with the\n   ACAP, using the same notational conventions and password as in the\n   previous example. Note that ACAP does not base64 encode and uses\n   fewer round trips that IMAP4.\n\n    S: * ACAP (IMPLEMENTATION \"Test ACAP server\") (SASL \"CRAM-MD5\"\n               \"DIGEST-MD5\" \"PLAIN\")\n    C: a AUTHENTICATE \"DIGEST-MD5\"\n    S: + {94}\n    S: realm=\"elwood.innosoft.com\",nonce=\"OA9BSXrbuRhWay\",qop=\"auth\",\n       algorithm=md5-sess,charset=utf-8\n    C: {206}\n    C: charset=utf-8,username=\"chris\",realm=\"elwood.innosoft.com\",\n       nonce=\"OA9BSXrbuRhWay\",nc=00000001,cnonce=\"OA9BSuZWMSpW8m\",\n       digest-uri=\"acap/elwood.innosoft.com\",\n       response=6084c6db3fede7352c551284490fd0fc,qop=auth\n    S: a OK (SASL {40}\n    S: rspauth=2f0b3d7c3c2e486600ef710726aa2eae) \"AUTHENTICATE\n    Completed\"\n    ---\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 19]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   The server uses the values of all the directives, plus knowledge of\n   the users password (or the hash of the user's name, server's realm\n   and the user's password) to verify the computations above. If they\n   check, then the user has authenticated.\n\n5   References\n\n   [Digest]   Franks, J., et al., \"HTTP Authentication: Basic and Digest\n              Access Authentication\", RFC 2617, June 1999.\n\n   [ISO-8859] ISO-8859. International Standard--Information Processing--\n              8-bit Single-Byte Coded Graphic Character Sets --\n              Part 1: Latin alphabet No. 1, ISO-8859-1:1987.\n              Part 2: Latin alphabet No. 2, ISO-8859-2, 1987.\n              Part 3: Latin alphabet No. 3, ISO-8859-3, 1988.\n              Part 4: Latin alphabet No. 4, ISO-8859-4, 1988.\n              Part 5: Latin/Cyrillic alphabet, ISO-8859-5, 1988.\n              Part 6: Latin/Arabic alphabet, ISO-8859-6, 1987.\n              Part 7: Latin/Greek alphabet, ISO-8859-7, 1987.\n              Part 8: Latin/Hebrew alphabet, ISO-8859-8, 1988.\n              Part 9: Latin alphabet No. 5, ISO-8859-9, 1990.\n\n   [RFC 822]  Crocker, D., \"Standard for The Format of ARPA Internet\n              Text Messages,\" STD 11, RFC 822, August 1982.\n\n   [RFC 1321] Rivest, R., \"The MD5 Message-Digest Algorithm\", RFC 1321,\n              April 1992.\n\n   [RFC 2047] Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n              Part Three: Message Header Extensions for Non-ASCII Text\",\n              RFC 2047, November 1996.\n\n   [RFC 2052] Gulbrandsen, A. and P. Vixie, \"A DNS RR for specifying the\n              location of services (DNS SRV)\", RFC 2052, October 1996.\n\n   [RFC 2060] Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 2060, December 1996.\n\n   [RFC 2104] Krawczyk, H., Bellare, M. and R. Canetti, \"HMAC:  Keyed-\n              Hashing for  Message Authentication\", RFC 2104, February\n              1997.\n\n   [RFC 2195] Klensin, J., Catoe, R. and P. Krumviede, \"IMAP/POP\n              AUTHorize Extension for Simple Challenge/Response\", RFC\n              2195, September 1997.\n\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 20]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   [RFC 2119] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC 2222] Myers, J., \"Simple Authentication and Security Layer\n              (SASL)\", RFC 2222, October 1997.\n\n   [USASCII]  US-ASCII. Coded Character Set - 7-Bit American Standard\n              Code for Information Interchange. Standard ANSI X3.4-1986,\n              ANSI, 1986.\n\n6  Authors' Addresses\n\n   Paul Leach\n   Microsoft\n   1 Microsoft Way\n   Redmond, WA  98052\n\n   EMail: paulle@microsoft.com\n\n\n   Chris Newman\n   Innosoft International, Inc.\n   1050 Lakes Drive\n   West Covina, CA 91790 USA\n\n   EMail: chris.newman@innosoft.com\n\n7  ABNF\n\n   What follows is the definition of the notation as is used in the\n   HTTP/1.1 specification (RFC 2616) and the HTTP authentication\n   specification (RFC 2617); it is reproduced here for ease of\n   reference. Since it is intended that a single Digest implementation\n   can support both HTTP and SASL-based protocols, the same notation is\n   used in both to facilitate comparison and prevention of unwanted\n   differences. Since it is cut-and-paste from the HTTP specifications,\n   not all productions may be used in this specification. It is also not\n   quite legal ABNF; again, the errors were copied from the HTTP\n   specifications.\n\n7.1   Augmented BNF\n\n   All of the mechanisms specified in this document are described in\n   both prose and an augmented Backus-Naur Form (BNF) similar to that\n   used by RFC 822 [RFC 822]. Implementers will need to be familiar with\n   the notation in order to understand this specification.\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 21]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   The augmented BNF includes the following constructs:\n\n   name = definition\n      The name of a rule is simply the name itself (without any\n      enclosing \"<\" and \">\") and is separated from its definition by the\n      equal \"=\" character. White space is only significant in that\n      indentation of continuation lines is used to indicate a rule\n      definition that spans more than one line. Certain basic rules are\n      in uppercase, such as SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Angle\n      brackets are used within definitions whenever their presence will\n      facilitate discerning the use of rule names.\n\n   \"literal\"\n      Quotation marks surround literal text. Unless stated otherwise,\n      the text is case-insensitive.\n\n   rule1 | rule2\n      Elements separated by a bar (\"|\") are alternatives, e.g., \"yes |\n      no\" will accept yes or no.\n\n   (rule1 rule2)\n      Elements enclosed in parentheses are treated as a single element.\n      Thus, \"(elem (foo | bar) elem)\" allows the token sequences\n      \"elem foo elem\" and \"elem bar elem\".\n\n   *rule\n      The character \"*\" preceding an element indicates repetition. The\n      full form is \"<n>*<m>element\" indicating at least <n> and at most\n      <m> occurrences of element. Default values are 0 and infinity so\n      that \"*(element)\" allows any number, including zero; \"1*element\"\n      requires at least one; and \"1*2element\" allows one or two.\n\n   [rule]\n      Square brackets enclose optional elements; \"[foo bar]\" is\n      equivalent to \"*1(foo bar)\".\n\n   N rule\n      Specific repetition: \"<n>(element)\" is equivalent to\n      \"<n>*<n>(element)\"; that is, exactly <n> occurrences of (element).\n      Thus 2DIGIT is a 2-digit number, and 3ALPHA is a string of three\n      alphabetic characters.\n\n   #rule\n      A construct \"#\" is defined, similar to \"*\", for defining lists of\n      elements. The full form is \"<n>#<m>element\" indicating at least\n      <n> and at most <m> elements, each separated by one or more commas\n      (\",\") and OPTIONAL linear white space (LWS). This makes the usual\n      form of lists very easy; a rule such as\n\n\n\nLeach & Newman              Standards Track                    [Page 22]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n        ( *LWS element *( *LWS \",\" *LWS element ))\n      can be shown as\n        1#element\n      Wherever this construct is used, null elements are allowed, but do\n      not contribute to the count of elements present. That is,\n      \"(element), , (element) \" is permitted, but counts as only two\n      elements.  Therefore, where at least one element is required, at\n      least one non-null element MUST be present. Default values are 0\n      and infinity so that \"#element\" allows any number, including zero;\n      \"1#element\" requires at least one; and \"1#2element\" allows one or\n      two.\n\n   ; comment\n      A semi-colon, set off some distance to the right of rule text,\n      starts a comment that continues to the end of line. This is a\n      simple way of including useful notes in parallel with the\n      specifications.\n\n   implied *LWS\n      The grammar described by this specification is word-based. Except\n      where noted otherwise, linear white space (LWS) can be included\n      between any two adjacent words (token or quoted-string), and\n      between adjacent words and separators, without changing the\n      interpretation of a field. At least one delimiter (LWS and/or\n      separators) MUST exist between any two tokens (for the definition\n      of \"token\" below), since they would otherwise be interpreted as a\n      single token.\n\n7.2   Basic Rules\n\n   The following rules are used throughout this specification to\n   describe basic parsing constructs. The US-ASCII coded character set\n   is defined by ANSI X3.4-1986 [USASCII].\n\n       OCTET          = <any 8-bit sequence of data>\n       CHAR           = <any US-ASCII character (octets 0 - 127)>\n       UPALPHA        = <any US-ASCII uppercase letter \"A\"..\"Z\">\n       LOALPHA        = <any US-ASCII lowercase letter \"a\"..\"z\">\n       ALPHA          = UPALPHA | LOALPHA\n       DIGIT          = <any US-ASCII digit \"0\"..\"9\">\n       CTL            = <any US-ASCII control character\n                        (octets 0 - 31) and DEL (127)>\n       CR             = <US-ASCII CR, carriage return (13)>\n       LF             = <US-ASCII LF, linefeed (10)>\n       SP             = <US-ASCII SP, space (32)>\n       HT             = <US-ASCII HT, horizontal-tab (9)>\n       <\">            = <US-ASCII double-quote mark (34)>\n       CRLF           = CR LF\n\n\n\nLeach & Newman              Standards Track                    [Page 23]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n\n   All linear white space, including folding, has the same semantics as\n   SP. A recipient MAY replace any linear white space with a single SP\n   before interpreting the field value or forwarding the message\n   downstream.\n\n       LWS            = [CRLF] 1*( SP | HT )\n\n   The TEXT rule is only used for descriptive field contents and values\n   that are not intended to be interpreted by the message parser. Words\n   of *TEXT MAY contain characters from character sets other than\n   ISO-8859-1 [ISO 8859] only when encoded according to the rules of RFC\n   2047 [RFC 2047].\n\n       TEXT           = <any OCTET except CTLs,\n                        but including LWS>\n\n   A CRLF is allowed in the definition of TEXT only as part of a header\n   field continuation. It is expected that the folding LWS will be\n   replaced with a single SP before interpretation of the TEXT value.\n\n   Hexadecimal numeric characters are used in several protocol elements.\n\n       HEX            = \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\"\n                      | \"a\" | \"b\" | \"c\" | \"d\" | \"e\" | \"f\" | DIGIT\n\n   Many HTTP/1.1 header field values consist of words separated by LWS\n   or special characters. These special characters MUST be in a quoted\n   string to be used within a parameter value.\n\n       token          = 1*<any CHAR except CTLs or separators>\n       separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n                      | \",\" | \";\" | \":\" | \"\\\" | <\">\n                      | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n                      | \"{\" | \"}\" | SP | HT\n\n   A string of text is parsed as a single word if it is quoted using\n   double-quote marks.\n\n      quoted-string  = ( <\"> qdstr-val <\"> )\n      qdstr-val      = *( qdtext | quoted-pair )\n      qdtext         = <any TEXT except <\">>\n\n   Note that LWS is NOT implicit between the double-quote marks (<\">)\n   surrounding a qdstr-val and the qdstr-val; any LWS will be considered\n   part of the qdstr-val.  This is also the case for quotation marks\n   surrounding any other construct.\n\n\n\n\nLeach & Newman              Standards Track                    [Page 24]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n   The backslash character (\"\\\") MAY be used as a single-character\n   quoting mechanism only within qdstr-val and comment constructs.\n\n       quoted-pair    = \"\\\" CHAR\n\n   The value of this construct is CHAR. Note that an effect of this rule\n   is that backslash must be quoted.\n\n8  Sample Code\n\n   The sample implementation in [Digest] also applies to DIGEST-MD5.\n\n   The following code implements the conversion from UTF-8 to 8859-1 if\n   necessary.\n\n    /* if the string is entirely in the 8859-1 subset of UTF-8, then\n     * translate to 8859-1 prior to MD5\n     */\n    void MD5_UTF8_8859_1(MD5_CTX *ctx, const unsigned char *base,\n        int len)\n    {\n        const unsigned char *scan, *end;\n        unsigned char cbuf;\n\n        end = base + len;\n        for (scan = base; scan < end; ++scan) {\n            if (*scan > 0xC3) break; /* abort if outside 8859-1 */\n            if (*scan >= 0xC0 && *scan <= 0xC3) {\n                if (++scan == end || *scan < 0x80 || *scan > 0xBF)\n                    break;\n            }\n        }\n        /* if we found a character outside 8859-1, don't alter string\n         */\n        if (scan < end) {\n            MD5Update(ctx, base, len);\n            return;\n        }\n\n        /* convert to 8859-1 prior to applying hash\n         */\n        do {\n            for (scan = base; scan < end && *scan < 0xC0; ++scan)\n                ;\n            if (scan != base) MD5Update(ctx, base, scan - base);\n            if (scan + 1 >= end) break;\n            cbuf = ((scan[0] & 0x3) << 6) | (scan[1] & 0x3f);\n            MD5Update(ctx, &cbuf, 1);\n\n\n\nLeach & Newman              Standards Track                    [Page 25]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n            base = scan + 2;\n        } while (base < end);\n    }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 26]\n\f\nRFC 2831                 Digest SASL Mechanism                  May 2000\n\n\n9  Full Copyright Statement\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeach & Newman              Standards Track                    [Page 27]\n\f\n"
  },
  {
    "path": "rfc/rfc2920.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                          N. Freed\nRequest for Comments: 2920                                     Innosoft\nSTD: 60                                                  September 2000\nObsoletes: 2197\nCategory: Standards Track\n\n\n             SMTP Service Extension for Command Pipelining\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\nAbstract\n\n   This memo defines an extension to the Simple Mail Transfer Protocol\n   (SMTP) service whereby a server can indicate the extent of its\n   ability to accept multiple commands in a single Transmission Control\n   Protocol (TCP) send operation. Using a single TCP send operation for\n   multiple commands can improve SMTP performance significantly.\n\n1.  Introduction\n\n   Although SMTP is widely and robustly deployed, certain extensions may\n   nevertheless prove useful. In particular, many parts of the Internet\n   make use of high latency network links.  SMTP's intrinsic one\n   command-one response structure is significantly penalized by high\n   latency links, often to the point where the factors contributing to\n   overall connection time are dominated by the time spent waiting for\n   responses to individual commands (turnaround time).\n\n   In the best of all worlds it would be possible to simply deploy SMTP\n   client software that makes use of command pipelining: batching up\n   multiple commands into single TCP send operations. Unfortunately, the\n   original SMTP specification [RFC-821] did not explicitly state that\n   SMTP servers must support this. As a result a non-trivial number of\n   Internet SMTP servers cannot adequately handle command pipelining.\n   Flaws known to exist in deployed servers include:\n\n\n\n\n\nFreed                       Standards Track                     [Page 1]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n    (1)   Connection handoff and buffer flushes in the middle of the\n          SMTP dialogue.  Creation of server processes for incoming SMTP\n          connections is a useful, obvious, and harmless implementation\n          technique. However, some SMTP servers defer process forking\n          and connection handoff until some intermediate point in the\n          SMTP dialogue.  When this is done material read from the TCP\n          connection and kept in process buffers can be lost.\n\n    (2)   Flushing the TCP input buffer when an SMTP command fails. SMTP\n          commands often fail but there is no reason to flush the TCP\n          input buffer when this happens.  Nevertheless, some SMTP\n          servers do this.\n\n    (3)   Improper processing and promulgation of SMTP command failures.\n          For example, some SMTP servers will refuse to accept a DATA\n          command if the last RCPT TO command fails, paying no attention\n          to the success or failure of prior RCPT TO command results.\n          Other servers will accept a DATA command even when all\n          previous RCPT TO commands have failed. Although it is possible\n          to accommodate this sort of behavior in a client that employs\n          command pipelining, it does complicate the construction of the\n          client unnecessarily.\n\n   This memo uses the mechanism described in [RFC-1869] to define an\n   extension to the SMTP service whereby an SMTP server can declare that\n   it is capable of handling pipelined commands. The SMTP client can\n   then check for this declaration and use pipelining only when the\n   server declares itself capable of handling it.\n\n1.1.  Requirements Notation\n\n   This document occasionally uses terms that appear in capital letters.\n   When the terms \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   appear capitalized, they are being used to indicate particular\n   requirements of this specification. A discussion of the meanings of\n   the terms \"MUST\", \"SHOULD\", and \"MAY\" appears in [RFC-1123]; the\n   terms \"MUST NOT\" and \"SHOULD NOT\" are logical extensions of this\n   usage.\n\n2.  Framework for the Command Pipelining Extension\n\n   The Command Pipelining extension is defined as follows:\n\n    (1)   the name of the SMTP service extension is Pipelining;\n\n    (2)   the EHLO keyword value associated with the extension is\n          PIPELINING;\n\n\n\n\nFreed                       Standards Track                     [Page 2]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n    (3)   no parameter is used with the PIPELINING EHLO keyword;\n\n    (4)   no additional parameters are added to either the MAIL FROM or\n          RCPT TO commands.\n\n    (5)   no additional SMTP verbs are defined by this extension; and,\n\n    (6)   the next section specifies how support for the extension\n          affects the behavior of a server and client SMTP.\n\n3.  The Pipelining Service Extension\n\n   When a client SMTP wishes to employ command pipelining, it first\n   issues the EHLO command to the server SMTP. If the server SMTP\n   responds with code 250 to the EHLO command, and the response includes\n   the EHLO keyword value PIPELINING, then the server SMTP has indicated\n   that it can accommodate SMTP command pipelining.\n\n3.1.  Client use of pipelining\n\n   Once the client SMTP has confirmed that support exists for the\n   pipelining extension, the client SMTP may then elect to transmit\n   groups of SMTP commands in batches without waiting for a response to\n   each individual command. In particular, the commands RSET, MAIL FROM,\n   SEND FROM, SOML FROM, SAML FROM, and RCPT TO can all appear anywhere\n   in a pipelined command group.  The EHLO, DATA, VRFY, EXPN, TURN,\n   QUIT, and NOOP commands can only appear as the last command in a\n   group since their success or failure produces a change of state which\n   the client SMTP must accommodate. (NOOP is included in this group so\n   it can be used as a synchronization point.)\n\n   Additional commands added by other SMTP extensions may only appear as\n   the last command in a group unless otherwise specified by the\n   extensions that define the commands.\n\n   The actual transfer of message content is explicitly allowed to be\n   the first \"command\" in a group. That is, a RSET/MAIL FROM sequence\n   used to initiate a new message transaction can be placed in the same\n   group as the final transfer of the headers and body of the previous\n   message.\n\n   Client SMTP implementations that employ pipelining MUST check ALL\n   statuses associated with each command in a group. For example, if\n   none of the RCPT TO recipient addresses were accepted the client must\n   then check the response to the DATA command -- the client cannot\n   assume that the DATA command will be rejected just because none of\n   the RCPT TO commands worked.  If the DATA command was properly\n   rejected the client SMTP can just issue RSET, but if the DATA command\n\n\n\nFreed                       Standards Track                     [Page 3]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n   was accepted the client SMTP should send a single dot.\n\n   Command statuses MUST be coordinated with responses by counting each\n   separate response and correlating that count with the number of\n   commands known to have been issued.  Multiline responses MUST be\n   supported. Matching on the basis of either the error code value or\n   associated text is expressly forbidden.\n\n   Client SMTP implementations MAY elect to operate in a nonblocking\n   fashion, processing server responses immediately upon receipt, even\n   if there is still data pending transmission from the client's\n   previous TCP send operation. If nonblocking operation is not\n   supported, however, client SMTP implementations MUST also check the\n   TCP window size and make sure that each group of commands fits\n   entirely within the window. The window size is usually, but not\n   always, 4K octets.  Failure to perform this check can lead to\n   deadlock conditions.\n\n   Clients MUST NOT confuse responses to multiple commands with\n   multiline responses. Each command requires one or more lines of\n   response, the last line not containing a dash between the response\n   code and the response string.\n\n3.2.  Server support of pipelining\n\n   A server SMTP implementation that offers the pipelining extension:\n\n    (1)   MUST respond to commands in the order they are received from\n          the client.\n\n    (2)   SHOULD elect to store responses to grouped RSET, MAIL FROM,\n          SEND FROM, SOML FROM, SAML FROM, and RCPT TO commands in an\n          internal buffer so they can sent as a unit.\n\n    (3)   SHOULD issue a positive response to the DATA command if and\n          only if one or more valid RCPT TO addresses have been\n          previously received.\n\n    (4)   MUST NOT, after issuing a positive response to a DATA command\n          with no valid recipients and subsequently receiving an empty\n          message, send any message whatsoever to anybody.\n\n    (5)   MUST NOT buffer responses to EHLO, DATA, VRFY, EXPN, TURN,\n          QUIT, and NOOP.\n\n    (6)   MUST NOT buffer responses to unrecognized commands.\n\n\n\n\n\nFreed                       Standards Track                     [Page 4]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n    (7)   MUST send all pending responses immediately whenever the local\n          TCP input buffer is emptied.\n\n    (8)   MUST NOT make assumptions about commands that are yet to be\n          received.\n\n    (9)   MUST NOT flush or otherwise lose the contents of the TCP input\n          buffer under any circumstances whatsoever.\n\n    (10)  SHOULD issue response text that indicates, either implicitly\n          or explicitly, what command the response matches.\n\n   The overriding intent of these server requirements is to make it as\n   easy as possible for servers to conform to these pipelining\n   extensions.\n\n4.  Examples\n\n   Consider the following SMTP dialogue that does not use pipelining:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 Innosoft.com SMTP service ready\n   C: HELO dbc.mtview.ca.us\n   S: 250 Innosoft.com\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   C: RCPT TO:<ned@innosoft.com>\n   S: 250 recipient <ned@innosoft.com> OK\n   C: RCPT TO:<dan@innosoft.com>\n   S: 250 recipient <dan@innosoft.com> OK\n   C: RCPT TO:<kvc@innosoft.com>\n   S: 250 recipient <kvc@innosoft.com> OK\n   C: DATA\n   S: 354 enter mail, end with line containing only \".\"\n    ...\n   C: .\n   S: 250 message sent\n   C: QUIT\n   S: 221 goodbye\n\n   The client waits for a server response a total of 9 times in this\n   simple example. But if pipelining is employed the following dialogue\n   is possible:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n\n\n\nFreed                       Standards Track                     [Page 5]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<ned@innosoft.com>\n   C: RCPT TO:<dan@innosoft.com>\n   C: RCPT TO:<kvc@innosoft.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 250 recipient <ned@innosoft.com> OK\n   S: 250 recipient <dan@innosoft.com> OK\n   S: 250 recipient <kvc@innosoft.com> OK\n   S: 354 enter mail, end with line containing only \".\"\n    ...\n   C: .\n   C: QUIT\n   S: 250 message sent\n   S: 221 goodbye\n\n   The total number of turnarounds has been reduced from 9 to 4.\n\n   The next example illustrates one possible form of behavior when\n   pipelining is used and all recipients are rejected:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<nsb@thumper.bellcore.com>\n   C: RCPT TO:<galvin@tis.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 550 remote mail to <nsb@thumper.bellore.com> not allowed\n   S: 550 remote mail to <galvin@tis.com> not allowed\n   S: 554 no valid recipients given\n   C: QUIT\n   S: 221 goodbye\n\n   The client SMTP waits for the server 4 times here as well. If the\n   server SMTP does not check for at least one valid recipient prior to\n   accepting the DATA command, the following dialogue would result:\n\n   S: <wait for open connection>\n   C: <open connection to server>\n   S: 220 innosoft.com SMTP service ready\n\n\n\nFreed                       Standards Track                     [Page 6]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n   C: EHLO dbc.mtview.ca.us\n   S: 250-innosoft.com\n   S: 250 PIPELINING\n   C: MAIL FROM:<mrose@dbc.mtview.ca.us>\n   C: RCPT TO:<nsb@thumper.bellcore.com>\n   C: RCPT TO:<galvin@tis.com>\n   C: DATA\n   S: 250 sender <mrose@dbc.mtview.ca.us> OK\n   S: 550 remote mail to <nsb@thumper.bellore.com> not allowed\n   S: 550 remote mail to <galvin@tis.com> not allowed\n   S: 354 enter mail, end with line containing only \".\"\n   C: .\n   C: QUIT\n   S: 554 no valid recipients\n   S: 221 goodbye\n\n5.  Security Considerations\n\n   This RFC does not discuss security issues and is not believed\n   to raise any security issues not endemic in electronic mail\n   and present in fully conforming implementations of [RFC-821].\n\n6.  Acknowledgements\n\n   This document is based on the SMTP service extension model\n   presented in RFC 1425. Marshall Rose's description of SMTP\n   command pipelining in his book \"The Internet Message\" also\n   served as a source of inspiration for this extension.\n\n7.  References\n\n   [RFC-821]  Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC\n              821, August 1982.\n\n   [RFC-1123] Braden, R., \"Requirements for Internet Hosts --\n              Application and Support\", STD 3, RFC 1123, October, 1989.\n\n   [RFC-1854] Freed, N., \"SMTP Service Extension for Command\n              Pipelining\", RFC 1854, October 1995.\n\n   [RFC-1869] Klensin, J., Freed, N., Rose, M., Stefferud, E. and D.\n              Crocker, \"SMTP Service Extensions\", STD 10, RFC 1869,\n              November 1995.\n\n   [RFC-2197] Freed, N., \"SMTP Service Extension for Command\n              Pipelining\", RFC 2197, September 1997.\n\n\n\n\n\nFreed                       Standards Track                     [Page 7]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n8.  Author's Address\n\n   Ned Freed\n   Innosoft International, Inc.\n   1050 Lakes Drive\n   West Covina, CA 91790\n   USA\n\n   Phone: +1 626 919 3600\n   Fax:   +1 626 919 361\n   EMail: ned.freed@innosoft.com\n\n   This document is a product of work done by the Internet Engineering\n   Task Force Working Group on Messaging Extensions, Alan Cargille,\n   chair.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 8]\n\f\nRFC 2920              SMTP for Command Pipelining         September 2000\n\n\n9.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\n\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFreed                       Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc2971.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        T. Showalter\nRequest for Comments: 2971                                Mirapoint, Inc.\nCategory: Standards Track                                    October 2000\n\n\n                           IMAP4 ID extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\nAbstract\n\n   The ID extension to the Internet Message Access Protocol - Version\n   4rev1 (IMAP4rev1) protocol allows the server and client to exchange\n   identification information on their implementation in order to make\n   bug reports and usage statistics more complete.\n\n1. Introduction\n\n   The IMAP4rev1 protocol described in [IMAP4rev1] provides a method for\n   accessing remote mail stores, but it provides no facility to\n   advertise what program a client or server uses to provide service.\n   This makes it difficult for implementors to get complete bug reports\n   from users, as it is frequently difficult to know what client or\n   server is in use.\n\n   Additionally, some sites may wish to assemble usage statistics based\n   on what clients are used, but in an an environment where users are\n   permitted to obtain and maintain their own clients this is difficult\n   to accomplish.\n\n   The ID command provides a facility to advertise information on what\n   programs are being used along with contact information (should bugs\n   ever occur).\n\n\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 1]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n2. Conventions Used in this Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [KEYWORDS].\n\n   The conventions used in this document are the same as specified in\n   [IMAP4rev1].  In examples, \"C:\" and \"S:\" indicate lines sent by the\n   client and server respectively.  Line breaks have been inserted for\n   readability.\n\n3. Specification\n\n   The sole purpose of the ID extension is to enable clients and servers\n   to exchange information on their implementations for the purposes of\n   statistical analysis and problem determination.\n\n   This information is be submitted to a server by any client wishing to\n   provide information for statistical purposes, provided the server\n   advertises its willingness to take the information with the atom \"ID\"\n   included in the list of capabilities returned by the CAPABILITY\n   command.\n\n   Implementations MUST NOT make operational changes based on the data\n   sent as part of the ID command or response.  The ID command is for\n   human consumption only, and is not to be used in improving the\n   performance of clients or servers.\n\n   This includes, but is not limited to, the following:\n\n      Servers MUST NOT attempt to work around client bugs by using\n      information from the ID command.  Clients MUST NOT attempt to work\n      around server bugs based on the ID response.\n\n      Servers MUST NOT provide features to a client or otherwise\n      optimize for a particular client by using information from the ID\n      command.  Clients MUST NOT provide features to a server or\n      otherwise optimize for a particular server based on the ID\n      response.\n\n      Servers MUST NOT deny access to or refuse service for a client\n      based on information from the ID command.  Clients MUST NOT refuse\n      to operate or limit their operation with a server based on the ID\n      response.\n\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 2]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n   Rationale: It is imperative that this extension not supplant IMAP's\n   CAPABILITY mechanism with a ad-hoc approach where implementations\n   guess each other's features based on who they claim to be.\n\n   Implementations MUST NOT send false information in an ID command.\n\n   Implementations MAY send less information than they have available or\n   no information at all.  Such behavior may be useful to preserve user\n   privacy.  See Security Considerations, section 7.\n\n3.1. ID Command\n\n   Arguments:  client parameter list or NIL\n\n   Responses:  OPTIONAL untagged response: ID\n\n   Result:     OK    identification information accepted\n               BAD   command unknown or arguments invalid\n\n   Implementation identification information is sent by the client with\n   the ID command.\n\n   This command is valid in any state.\n\n   The information sent is in the form of a list of field/value pairs.\n   Fields are permitted to be any IMAP4 string, and values are permitted\n   to be any IMAP4 string or NIL.  A value of NIL indicates that the\n   client can not or will not specify this information.  The client may\n   also send NIL instead of the list, indicating that it wants to send\n   no information, but would still accept a server response.\n\n   The available fields are defined in section 3.3.\n\n   Example:  C: a023 ID (\"name\" \"sodr\" \"version\" \"19.34\" \"vendor\"\n                 \"Pink Floyd Music Limited\")\n             S: * ID NIL\n             S: a023 OK ID completed\n\n3.2. ID Response\n\n   Contents:   server parameter list\n\n   In response to an ID command issued by the client, the server replies\n   with a tagged response containing information on its implementation.\n   The format is the same as the client list.\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 3]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n   Example:  C: a042 ID NIL\n             S: * ID (\"name\" \"Cyrus\" \"version\" \"1.5\" \"os\" \"sunos\"\n                  \"os-version\" \"5.5\" \"support-url\"\n                  \"mailto:cyrus-bugs+@andrew.cmu.edu\")\n             S: a042 OK ID command completed\n\n   A server MUST send a tagged ID response to an ID command.  However, a\n   server MAY send NIL in place of the list.\n\n3.3. Defined Field Values\n\n   Any string may be sent as a field, but the following are defined to\n   describe certain values that might be sent.  Implementations are free\n   to send none, any, or all of these.  Strings are not case-sensitive.\n   Field strings MUST NOT be longer than 30 octets.  Value strings MUST\n   NOT be longer than 1024 octets.  Implementations MUST NOT send more\n   than 30 field-value pairs.\n\n     name            Name of the program\n     version         Version number of the program\n     os              Name of the operating system\n     os-version      Version of the operating system\n     vendor          Vendor of the client/server\n     support-url     URL to contact for support\n     address         Postal address of contact/vendor\n     date            Date program was released, specified as a date-time\n                       in IMAP4rev1\n     command         Command used to start the program\n     arguments       Arguments supplied on the command line, if any\n                       if any\n     environment     Description of environment, i.e., UNIX environment\n                       variables or Windows registry settings\n\n   Implementations MUST NOT use contact information to submit automatic\n   bug reports.  Implementations may include information from an ID\n   response in a report automatically prepared, but are prohibited from\n   sending the report without user authorization.\n\n   It is preferable to find the name and version of the underlying\n   operating system at runtime in cases where this is possible.\n\n   Information sent via an ID response may violate user privacy.  See\n   Security Considerations, section 7.\n\n   Implementations MUST NOT send the same field name more than once.\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 4]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n4. Formal Syntax\n\n   This  syntax is intended to augment the grammar specified in\n   [IMAP4rev1] in order to provide for the ID command.  This\n   specification uses the augmented Backus-Naur Form (BNF) notation as\n   used in [IMAP4rev1].\n\n     command_any ::= \"CAPABILITY\" / \"LOGOUT\" / \"NOOP\" / x_command / id\n         ;; adds id command to command_any in [IMAP4rev1]\n\n     id ::= \"ID\" SPACE id_params_list\n\n     id_response ::= \"ID\" SPACE id_params_list\n\n     id_params_list ::= \"(\" #(string SPACE nstring) \")\" / nil\n         ;; list of field value pairs\n\n     response_data ::= \"*\" SPACE (resp_cond_state / resp_cond_bye /\n         mailbox_data / message_data / capability_data / id_response)\n\n5. Use of the ID extension with Firewalls and Other Intermediaries\n\n   There exist proxies, firewalls, and other intermediary systems that\n   can intercept an IMAP session and make changes to the data exchanged\n   in the session.  Such intermediaries are not anticipated by the IMAP4\n   protocol design and are not within the scope of the IMAP4 standard.\n   However, in order for the ID command to be useful in the presence of\n   such intermediaries, those intermediaries need to take special note\n   of the ID command and response.  In particular, if an intermediary\n   changes any part of the IMAP session it must also change the ID\n   command to advertise its presence.\n\n   A firewall MAY act to block transmission of specific information\n   fields in the ID command and response that it believes reveal\n   information that could expose a security vulnerability.  However, a\n   firewall SHOULD NOT disable the extension, when present, entirely,\n   and SHOULD NOT unconditionally remove either the client or server\n   list.\n\n   Finally, it should be noted that a firewall, when handling a\n   CAPABILITY response, MUST NOT allow the names of extensions to be\n   returned to the client that the firewall has no knowledge of.\n\n\n\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 5]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n6. References\n\n   [KEYWORDS]  Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", RFC 2119, March 1997.\n\n   [IMAP4rev1] Crispin, M., \"Internet Message Access Protocol - Version\n               4rev1\", RFC 2060, October 1996.\n\n   [RFC-822]   Crocker, D., \"Standard for the Format of ARPA Internet\n               Text Messages\", STD 11, RFC 822, August 1982.\n\n7. Security Considerations\n\n   This extension has the danger of violating the privacy of users if\n   misused.  Clients and servers should notify users that they implement\n   and enable the ID command.\n\n   It is highly desirable that implementations provide a method of\n   disabling ID support, perhaps by not sending ID at all, or by sending\n   NIL as the argument to the ID command or response.\n\n   Implementors must exercise extreme care in adding fields sent as part\n   of an ID command or response.  Some fields, including a processor ID\n   number, Ethernet address, or other unique (or mostly unique)\n   identifier allow tracking of users in ways that violate user privacy\n   expectations.\n\n   Having implementation information of a given client or server may\n   make it easier for an attacker to gain unauthorized access due to\n   security holes.\n\n   Since this command includes arbitrary data and does not require the\n   user to authenticate, server implementations are cautioned to guard\n   against an attacker sending arbitrary garbage data in order to fill\n   up the ID log.  In particular, if a server naively logs each ID\n   command to disk without inspecting it, an attacker can simply fire up\n   thousands of connections and send a few kilobytes of random data.\n   Servers have to guard against this.  Methods include truncating\n   abnormally large responses; collating responses by storing only a\n   single copy, then keeping a counter of the number of times that\n   response has been seen; keeping only particularly interesting parts\n   of responses; and only logging responses of users who actually log\n   in.\n\n   Security is affected by firewalls which modify the IMAP protocol\n   stream; see section 5, Use of the ID Extension with Firewalls and\n   Other Intermediaries, for more information.\n\n\n\n\nShowalter                   Standards Track                     [Page 6]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n8. Author's Address\n\n   Tim Showalter\n   Mirapoint, Inc.\n   909 Hermosa Ct.\n   Sunnyvale, CA 94095\n\n   EMail: tjs@mirapoint.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 7]\n\f\nRFC 2971                   IMAP4 ID extension               October 2000\n\n\n9.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nShowalter                   Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc3030.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                       G. Vaudreuil\nRequest for Comments: 3030                           Lucent Technologies\nObsolete: 1830                                             December 2000\nCategory: Standards Track\n\n\n                        SMTP Service Extensions\n                       for Transmission of Large\n                        and Binary MIME Messages\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\nAbstract\n\n   This memo defines two extensions to the SMTP (Simple Mail Transfer\n   Protocol) service.  The first extension enables a SMTP client and\n   server to negotiate the use of an alternative to the DATA command,\n   called \"BDAT\", for efficiently sending large MIME (Multipurpose\n   Internet Mail Extensions) messages.  The second extension takes\n   advantage of the BDAT command to permit the negotiated sending of\n   MIME messages that employ the binary transfer encoding.  This\n   document is intended to update and obsolete RFC 1830.\n\nWorking Group Summary\n\n   This protocol is not the product of an IETF working group, however\n   the specification resulted from discussions within the ESMTP working\n   group.  The resulting protocol documented in RFC 1830 was classified\n   as experimental at that time due to questions about the robustness of\n   the Binary Content-Transfer-Encoding deployed in then existent MIME\n   implementations.  As MIME has matured and other uses of the Binary\n   Content-Transfer-Encoding have been deployed, these concerns have\n   been allayed.  With this document, Binary ESMTP is expected to become\n   standards-track.\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                     [Page 1]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\nDocument Conventions\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [RFC2119].\n\nTable of Contents\n\n   1.   Overview ...................................................  2\n   2.   Framework for the Large Message Extensions .................  3\n   3.   Framework for the Binary Service Extension .................  5\n   4.   Examples ...................................................  8\n     4.1  Simple Chunking ..........................................  8\n     4.2  Pipelining BINARYMIME ....................................  8\n   5.   Security Considerations ....................................  9\n   6.   References .................................................  9\n   7.   Author's Address ........................................... 10\n   8.   Appendix A - Changes from RFC 1830 ......................... 11\n   9.   Full Copyright Statement ................................... 12\n\n1. Overview\n\n   The MIME extensions to the Internet message format provides for the\n   transmission of many kinds of data that were previously unsupported\n   in Internet mail.  Anticipating the need to transport the new media\n   more efficiently, the SMTP protocol has been extended to provide\n   transport for new message types.  RFC 1652 defines one such extension\n   for the transmission of unencoded 8-bit MIME messages [8BIT].  This\n   service extension permits the receiver SMTP to declare support for\n   8-bit body parts and the sender to request 8-bit transmission of a\n   particular message.\n\n   One expected result of the use of MIME is that the Internet mail\n   system will be expected to carry very large mail messages.  In such\n   transactions, there is a performance-based desire to eliminate the\n   requirement that the message be scanned for \"CR LF . CR LF\" sequences\n   upon sending and receiving to detect the end of message.\n\n   Independent of the need to send large messages, Internet mail is\n   increasingly multimedia.  There is a need to avoid the overhead of\n   base64 and quoted-printable encoding of binary objects sent using the\n   MIME message format over SMTP between hosts that support binary\n   message processing.\n\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                     [Page 2]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n   This memo uses the mechanism defined in [ESMTP] to define two\n   extensions to the SMTP service whereby an SMTP server (\"receiver-\n   SMTP\") may declare support for the message chunking transmission mode\n   and support for the reception of Binary messages, which the SMTP\n   client (\"sender-SMTP\") is then free to use.\n\n2. Framework for the Large Message Extensions\n\n   The following service extension is hereby defined:\n\n   1) The name of the data chunking service extension is \"CHUNKING\".\n\n   2) The EHLO keyword value associated with this extension is\n      \"CHUNKING\".\n\n   3) A new SMTP verb, BDAT, is defined as an alternative to the \"DATA\"\n      command of [RFC821].  The BDAT verb takes two arguments.  The\n      first argument indicates the length, in octets, of the binary data\n      chunk.  The second optional argument indicates that the data chunk\n      is the last.\n\n      bdat-cmd   ::= \"BDAT\" SP chunk-size [ SP end-marker ] CR LF\n      chunk-size ::= 1*DIGIT\n      end-marker ::= \"LAST\"\n\n   4) This extension may be used for SMTP message submission.  [Submit]\n\n   5) Servers that offer the BDAT extension MUST continue to support the\n      regular SMTP DATA command.  Clients are free to use DATA to\n      transfer appropriately encoded to servers that support the\n      CHUNKING extension if they wish to do so.\n\n   The CHUNKING service extension enables the use of the BDAT\n   alternative to the DATA command.  This extension can be used for any\n   message, whether 7-bit, 8BITMIME or BINARYMIME.\n\n   When a sender-SMTP wishes to send (using the MAIL command) a large\n   message using the CHUNKING extension, it first issues the EHLO\n   command to the receiver-SMTP.  If the receiver-SMTP responds with\n   code 250 to the EHLO command and the response includes the EHLO\n   keyword value CHUNKING, then the receiver-SMTP is indicating that it\n   supports the BDAT command and will accept the sending of messages in\n   chunks.\n\n   After all MAIL and RCPT responses are collected and processed, the\n   message is sent using a series of BDAT commands.  The BDAT command\n   takes one required argument, the exact length of the data segment in\n\n\n\n\nVaudreuil                   Standards Track                     [Page 3]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n   octets.  The message data is sent immediately after the trailing <CR>\n   <LF> of the BDAT command line.  Once the receiver-SMTP receives the\n   specified number of octets, it will return a 250 reply code.\n\n   The optional LAST parameter on the BDAT command indicates that this\n   is the last chunk of message data to be sent.  The last BDAT command\n   MAY have a byte-count of zero indicating there is no additional data\n   to be sent.  Any BDAT command sent after the BDAT LAST is illegal and\n   MUST be replied to with a 503 \"Bad sequence of commands\" reply code.\n   The state resulting from this error is indeterminate.  A RSET command\n   MUST be sent to clear the transaction before continuing.\n\n   A 250 response MUST be sent to each successful BDAT data block within\n   a mail transaction.  If a failure occurs after a BDAT command is\n   received, the receiver-SMTP MUST accept and discard the associated\n   message data before sending the appropriate 5XX or 4XX code.  If a\n   5XX or 4XX code is received by the sender-SMTP in response to a BDAT\n   chunk, the transaction should be considered failed and the sender-\n   SMTP MUST NOT send any additional BDAT segments.  If the receiver-\n   SMTP has declared support for command pipelining [PIPE], the receiver\n   SMTP MUST be prepared to accept and discard additional BDAT chunks\n   already in the pipeline after the failed BDAT.\n\n      Note: An error on the receiver-SMTP such as disk full or imminent\n      shutdown can only be reported after the BDAT segment has been\n      received.  It is therefore important to choose a reasonable chunk\n      size given the expected end-to-end bandwidth.\n\n      Note:  Because the receiver-SMTP does not acknowledge the BDAT\n      command before the message data is sent, it is important to send\n      the BDAT only to systems that have declared their capability to\n      accept BDAT commands.  Illegally sending a BDAT command and\n      associated message data to a non-CHUNKING capable system will\n      result in the receiver-SMTP parsing the associated message data as\n      if it were a potentially very long, ESMTP command line containing\n      binary data.\n\n   The resulting state from a failed BDAT command is indeterminate.  A\n   RSET command MUST be issued to clear the transaction before\n   additional commands may be sent.  The RSET command, when issued after\n   the first BDAT and before the BDAT LAST, clears all segments sent\n   during that transaction and resets the session.\n\n   DATA and BDAT commands cannot be used in the same transaction.  If a\n   DATA statement is issued after a BDAT for the current transaction, a\n   503 \"Bad sequence of commands\" MUST be issued.  The state resulting\n   from this error is indeterminate.  A RSET command MUST be sent to\n\n\n\n\nVaudreuil                   Standards Track                     [Page 4]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n   clear the transaction before continuing.  There is no prohibition on\n   using DATA and BDAT in the same session, so long as they are not\n   mixed in the same transaction.\n\n   The local storage size of a message may not accurately reflect the\n   actual size of the message sent due to local storage conventions.  In\n   particular, text messages sent with the BDAT command MUST be sent in\n   the canonical MIME format with lines delimited with a <CR><LF>.  It\n   may not be possible to convert the entire message to the canonical\n   format at once.  CHUNKING provides a mechanism to convert the message\n   to canonical form, accurately count the bytes, and send the message a\n   single chunk at a time.\n\n      Note: Correct byte counting is essential.  If the sender-SMTP\n      indicates a chunk-size larger than the actual chunk-size, the\n      receiver-SMTP will continue to wait for the remainder of the data\n      or when using streaming, will read the subsequent command as\n      additional message data.  In the case where a portion of the\n      previous command was read as data, the parser will return a syntax\n      error when the incomplete command is read.\n\n      If the sender-SMTP indicates a chunk-size smaller than the actual\n      chunk-size, the receiver-SMTP will interpret the remainder of the\n      message data as invalid commands.  Note that the remainder of the\n      message data may be binary and as such lexicographical parsers\n      MUST be prepared to receive, process, and reject lines of\n      arbitrary octets.\n\n3. Framework for the Binary Service Extension\n\n   The following service extension is hereby defined:\n\n   1) The name of the binary service extension is \"BINARYMIME\".\n\n   2) The EHLO keyword value associated with this extension is\n      \"BINARYMIME\".\n\n   3) The BINARYMIME service extension can only be used with the\n      \"CHUNKING\" service extension.\n\n   4) No parameter is used with the BINARYMIME keyword.\n\n   5) [8BIT] defines the BODY parameter for the MAIL command.  This\n      extension defines an additional value for the BODY parameter,\n      \"BINARYMIME\".  The value \"BINARYMIME\" associated with this\n      parameter indicates that this message is a Binary MIME message (in\n\n\n\n\n\nVaudreuil                   Standards Track                     [Page 5]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n      strict compliance with [MIME]) with arbitrary octet content being\n      sent.  The revised syntax of the value is as follows, using the\n      ABNF notation of [RFC822]:\n\n               body-value ::= \"7BIT\" / \"8BITMIME\" / \"BINARYMIME\"\n\n   6) No new verbs are defined for the BINARYMIME extension.\n\n   7) This extension may be used for SMTP message submission.  [Submit]\n\n   8) The maximum length of a MAIL FROM command line is increased by 16\n      characters by the possible addition of the BODY=BINARYMIME keyword\n      and value;.\n\n   A sender-SMTP may request that a binary MIME message be sent without\n   transport encoding by sending a BODY parameter with a value of\n   \"BINARYMIME\" with the MAIL command.  When the receiver-SMTP accepts a\n   MAIL command with the BINARYMIME body-value, it agrees to preserve\n   all bits in each octet passed using the BDAT command.  Once a\n   receiver-SMTP supporting the BINARYMIME service extension accepts a\n   message containing binary material, the receiver-SMTP MUST deliver or\n   relay the message in such a way as to preserve all bits in each\n   octet.\n\n   BINARYMIME cannot be used with the DATA command.  If a DATA command\n   is issued after a MAIL command containing the body-value of\n   \"BINARYMIME\", a 503 \"Bad sequence of commands\" response MUST be sent.\n   The resulting state from this error condition is indeterminate and\n   the transaction MUST be reset with the RSET command.\n\n   It is especially important when using BINARYMIME to ensure that the\n   MIME message itself is properly formed.  In particular, it is\n   essential that text be canonically encoded with each line properly\n   terminated with <CR><LF>.  Any transformation of text into non-\n   canonical MIME to observe local storage conventions MUST be reversed\n   before sending as BINARYMIME.  Some line-oriented shortcuts will\n   break if used with BINARYMIME.  A sender-SMTP MUST use the canonical\n   encoding for a given MIME content-type.  In particular, text/* MUST\n   be sent with <CR><LF> terminated lines.\n\n   Note: Although CR and LF do not necessarily represent ends of text\n   lines in BDAT chunks and use of the binary transfer encoding is\n   allowed, the RFC 2781 prohibition against using a UTF-16 charset\n   within the text top-level media type remains.\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                     [Page 6]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n   The syntax of the extended MAIL command is identical to the MAIL\n   command in [RFC821], except that a BODY=BINARYMIME parameter and\n   value MUST be added.  The complete syntax of this extended command is\n   defined in [ESMTP].\n\n   If a receiver-SMTP does not indicate support the BINARYMIME message\n   format then the sender-SMTP MUST NOT, under any circumstances, send\n   binary data.\n\n   If the receiver-SMTP does not support BINARYMIME and the message to\n   be sent is a MIME object with a binary encoding, a sender-SMTP has\n   three options with which to forward the message.  First, if the\n   receiver-SMTP supports the 8bit-MIMEtransport extension [8bit] and\n   the content is amenable to being encoded in 8bit, the sender-SMTP may\n   implement a gateway transformation to convert the message into valid\n   8bit-encoded MIME.  Second, it may implement a gateway transformation\n   to convert the message into valid 7bit-encoded MIME.  Third, it may\n   treat this as a permanent error and handle it in the usual manner for\n   delivery failures.  The specifics of MIME content-transfer-encodings,\n   including transformations from Binary MIME to 8bit or 7bit MIME are\n   not described by this RFC; the conversion is nevertheless constrained\n   in the following ways:\n\n      1. The conversion MUST cause no loss of information;  MIME\n         transport encodings MUST be employed as needed to insure this\n         is the case.\n\n      2. The resulting message MUST be valid 7bit or 8bit MIME.  In\n         particular, the transformation MUST NOT result in nested Base-\n         64 or Quoted-Printable content-transfer-encodings.\n\n   Note that at the time of this writing there are no mechanisms for\n   converting a binary MIME object into an 8-bit MIME object.  Such a\n   transformation will require the specification of a new MIME content-\n   transfer-encoding.\n\n   If the MIME message contains a \"Binary\" content-transfer-encoding and\n   the BODY parameter does not indicate BINARYMIME, the message MUST be\n   accepted.  The message SHOULD be returned to the sender with an\n   appropriate DSN.  The message contents MAY be returned to the sender\n   if the offending content can be mangled into a legal DSN structure.\n   \"Fixing\" and forwarding the offending content is beyond the scope of\n   this document.\n\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                     [Page 7]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n4. Examples\n\n4.1 Simple Chunking\n\n   The following simple dialogue illustrates the use of the large\n   message extension to send a short pseudo-RFC 822 message to one\n   recipient using the CHUNKING extension:\n\n   R: <wait for connection on TCP port 25>\n   S: <open connection to server>\n   R: 220 cnri.reston.va.us SMTP service ready\n   S: EHLO ymir.claremont.edu\n   R: 250-cnri.reston.va.us says hello\n   R: 250 CHUNKING\n   S: MAIL FROM:<Sam@Random.com>\n   R: 250 <Sam@Random.com> Sender ok\n   S: RCPT TO:<Susan@Random.com>\n   R: 250 <Susan@random.com> Recipient ok\n   S: BDAT 86 LAST\n   S: To: Susan@random.com<CR><LF>\n   S: From: Sam@random.com<CR><LF>\n   S: Subject: This is a bodyless test message<CR><LF>\n   R: 250 Message OK, 86 octets received\n   S: QUIT\n   R: 221 Goodbye\n\n4.2 Pipelining BINARYMIME\n\n   The following dialogue illustrates the use of the large message\n   extension to send a BINARYMIME object to two recipients using the\n   CHUNKING and PIPELINING extensions:\n\n   R: <wait for connection on TCP port\n   S: <open connection to server>\n   R: 220 cnri.reston.va.us SMTP service ready\n   S: EHLO ymir.claremont.edu\n   R: 250-cnri.reston.va.us says hello\n   R: 250-PIPELINING\n   R: 250-BINARYMIME\n   R: 250 CHUNKING\n   S: MAIL FROM:<ned@ymir.claremont.edu> BODY=BINARYMIME\n   S: RCPT TO:<gvaudre@cnri.reston.va.us>\n   S: RCPT TO:<jstewart@cnri.reston.va.us>\n   R: 250 <ned@ymir.claremont.edu>... Sender and BINARYMIME ok\n   R: 250 <gvaudre@cnri.reston.va.us>... Recipient ok\n   R: 250 <jstewart@cnri.reston.va.us>... Recipient ok\n   S: BDAT 100000\n   S: (First 10000 octets of canonical MIME message data)\n\n\n\nVaudreuil                   Standards Track                     [Page 8]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n   S: BDAT 324\n   S: (Remaining 324 octets of canonical MIME message data)\n   S: BDAT 0 LAST\n   R: 250 100000 octets received\n   R: 250 324 octets received\n   R: 250 Message OK, 100324 octets received\n   S: QUIT\n   R: 221 Goodbye\n\n5. Security Considerations\n\n   This extension is not known to present any additional security issues\n   not already endemic to electronic mail and present in fully\n   conforming implementations of [RFC821], or otherwise made possible by\n   [MIME].\n\n6. References\n\n   [BINARY]  Vaudreuil, G., \"SMTP Service Extensions for Transmission of\n             Large and Binary MIME Messages\", RFC 1830, August 1995.\n\n   [RFC821]  Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC\n             821, August 1982.\n\n   [RFC822]  Crocker, D., \"Standard for the Format of ARPA Internet Text\n             Messages\", STD 11, RFC 822, August 1982.\n\n   [MIME]    Borenstein, N. and N. Freed, \"Multipurpose Internet Mail\n             Extensions (MIME) Part One: Format of Internet Message\n             Bodies\", RFC 2045, November 1996.\n\n   [SUBMIT]  Gellens, R. and J. Klensin, \"Message Submission\", RFC 2476,\n             December 1998.\n\n   [ESMTP]   Klensin, J., Freed, N., Rose, M., Stefferud, E. and D.\n             Crocker, \"SMTP Service Extensions\", RFC 1869, November\n             1995.\n\n   [8BIT]    Klensin, J., Freed, N., Rose, M., Stefferud, E. and D.\n             Crocker, \"SMTP Service Extension for 8bit-MIMEtransport\",\n             RFC 1652, July 1994.\n\n   [PIPE]    Freed, N., \"SMTP Service Extensions for Command\n             Pipelining\", RFC 2920, September 2000.\n\n   [RFC2119] Bradner, S., \"Key words for use in RFCs to Indicate\n             Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n\n\n\nVaudreuil                   Standards Track                     [Page 9]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\n7. Author's Address\n\n   Gregory M. Vaudreuil\n   Lucent Technologies\n   17080 Dallas Parkway\n   Dallas, TX 75248-1905\n\n   Phone/Fax: +1-972-733-2722\n   EMail: GregV@ieee.org\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                    [Page 10]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\nAppendix A - Changes from RFC 1830\n\n   Numerous editorial changes including required intellectual property\n   boilerplate and revised authors contact information\n\n   Corrected the simple chunking example to use the correct number of\n   bytes.  Updated the pipelining example to illustrate use of the BDAT\n   0 LAST construct.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                    [Page 11]\n\f\nRFC 3030                      Binary ESMTP                 December 2000\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2000).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nVaudreuil                   Standards Track                    [Page 12]\n\f\n"
  },
  {
    "path": "rfc/rfc3207.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         P. Hoffman\nRequest for Comments: 3207                      Internet Mail Consortium\nObsoletes: 2487                                            February 2002\nCategory: Standards Track\n\n\n                      SMTP Service Extension for\n               Secure SMTP over Transport Layer Security\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2002).  All Rights Reserved.\n\nAbstract\n\n   This document describes an extension to the SMTP (Simple Mail\n   Transfer Protocol) service that allows an SMTP server and client to\n   use TLS (Transport Layer Security) to provide private, authenticated\n   communication over the Internet.  This gives SMTP agents the ability\n   to protect some or all of their communications from eavesdroppers and\n   attackers.\n\n1. Introduction\n\n   SMTP [RFC2821] servers and clients normally communicate in the clear\n   over the Internet.  In many cases, this communication goes through\n   one or more router that is not controlled or trusted by either\n   entity.  Such an untrusted router might allow a third party to\n   monitor or alter the communications between the server and client.\n\n   Further, there is often a desire for two SMTP agents to be able to\n   authenticate each others' identities.  For example, a secure SMTP\n   server might only allow communications from other SMTP agents it\n   knows, or it might act differently for messages received from an\n   agent it knows than from one it doesn't know.\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 1]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\n   TLS [TLS], more commonly known as SSL, is a popular mechanism for\n   enhancing TCP communications with privacy and authentication.  TLS is\n   in wide use with the HTTP protocol, and is also being used for adding\n   security to many other common protocols that run over TCP.\n\n   This document obsoletes RFC 2487.\n\n1.1 Terminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n2. STARTTLS Extension\n\n   The STARTTLS extension to SMTP is laid out as follows:\n\n   (1) the name of the SMTP service defined here is STARTTLS;\n\n   (2) the EHLO keyword value associated with the extension is STARTTLS;\n\n   (3) the STARTTLS keyword has no parameters;\n\n   (4) a new SMTP verb, \"STARTTLS\", is defined;\n\n   (5) no additional parameters are added to any SMTP command.\n\n3. The STARTTLS Keyword\n\n   The STARTTLS keyword is used to tell the SMTP client that the SMTP\n   server is currently able to negotiate the use of TLS.  It takes no\n   parameters.\n\n4. The STARTTLS Command\n\n   The format for the STARTTLS command is:\n\n   STARTTLS\n\n   with no parameters.\n\n   After the client gives the STARTTLS command, the server responds with\n   one of the following reply codes:\n\n   220 Ready to start TLS\n   501 Syntax error (no parameters allowed)\n   454 TLS not available due to temporary reason\n\n\n\n\nHoffman                     Standards Track                     [Page 2]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\n   If the client receives the 454 response, the client must decide\n   whether or not to continue the SMTP session.  Such a decision is\n   based on local policy.  For instance, if TLS was being used for\n   client authentication, the client might try to continue the session,\n   in case the server allows it even with no authentication.  However,\n   if TLS was being negotiated for encryption, a client that gets a 454\n   response needs to decide whether to send the message anyway with no\n   TLS encryption, whether to wait and try again later, or whether to\n   give up and notify the sender of the error.\n\n   A publicly-referenced SMTP server MUST NOT require use of the\n   STARTTLS extension in order to deliver mail locally.  This rule\n   prevents the STARTTLS extension from damaging the interoperability of\n   the Internet's SMTP infrastructure.  A publicly-referenced SMTP\n   server is an SMTP server which runs on port 25 of an Internet host\n   listed in the MX record (or A record if an MX record is not present)\n   for the domain name on the right hand side of an Internet mail\n   address.\n\n   Any SMTP server may refuse to accept messages for relay based on\n   authentication supplied during the TLS negotiation.  An SMTP server\n   that is not publicly referenced may refuse to accept any messages for\n   relay or local delivery based on authentication supplied during the\n   TLS negotiation.\n\n   A SMTP server that is not publicly referenced may choose to require\n   that the client perform a TLS negotiation before accepting any\n   commands.  In this case, the server SHOULD return the reply code:\n\n   530 Must issue a STARTTLS command first\n\n   to every command other than NOOP, EHLO, STARTTLS, or QUIT.  If the\n   client and server are using the ENHANCEDSTATUSCODES ESMTP extension\n   [RFC2034], the status code to be returned SHOULD be 5.7.0.\n\n   After receiving a 220 response to a STARTTLS command, the client MUST\n   start the TLS negotiation before giving any other SMTP commands.  If,\n   after having issued the STARTTLS command, the client finds out that\n   some failure prevents it from actually starting a TLS handshake, then\n   it SHOULD abort the connection.\n\n   If the SMTP client is using pipelining as defined in RFC 2920, the\n   STARTTLS command must be the last command in a group.\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 3]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\n4.1 Processing After the STARTTLS Command\n\n   After the TLS handshake has been completed, both parties MUST\n   immediately decide whether or not to continue based on the\n   authentication and privacy achieved.  The SMTP client and server may\n   decide to move ahead even if the TLS negotiation ended with no\n   authentication and/or no privacy because most SMTP services are\n   performed with no authentication and no privacy, but some SMTP\n   clients or servers may want to continue only if a particular level of\n   authentication and/or privacy was achieved.\n\n   If the SMTP client decides that the level of authentication or\n   privacy is not high enough for it to continue, it SHOULD issue an\n   SMTP QUIT command immediately after the TLS negotiation is complete.\n   If the SMTP server decides that the level of authentication or\n   privacy is not high enough for it to continue, it SHOULD reply to\n   every SMTP command from the client (other than a QUIT command) with\n   the 554 reply code (with a possible text string such as \"Command\n   refused due to lack of security\").\n\n   The decision of whether or not to believe the authenticity of the\n   other party in a TLS negotiation is a local matter.  However, some\n   general rules for the decisions are:\n\n   -  A SMTP client would probably only want to authenticate an SMTP\n      server whose server certificate has a domain name that is the\n      domain name that the client thought it was connecting to.\n   -  A publicly-referenced  SMTP server would probably want to accept\n      any verifiable certificate from an SMTP client, and would possibly\n      want to put distinguishing information about the certificate in\n      the Received header of messages that were relayed or submitted\n      from the client.\n\n4.2 Result of the STARTTLS Command\n\n   Upon completion of the TLS handshake, the SMTP protocol is reset to\n   the initial state (the state in SMTP after a server issues a 220\n   service ready greeting).  The server MUST discard any knowledge\n   obtained from the client, such as the argument to the EHLO command,\n   which was not obtained from the TLS negotiation itself.  The client\n   MUST discard any knowledge obtained from the server, such as the list\n   of SMTP service extensions, which was not obtained from the TLS\n   negotiation itself.  The client SHOULD send an EHLO command as the\n   first command after a successful TLS negotiation.\n\n   The list of SMTP service extensions returned in response to an EHLO\n   command received after the TLS handshake MAY be different than the\n   list returned before the TLS handshake.  For example, an SMTP server\n\n\n\nHoffman                     Standards Track                     [Page 4]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\n   might not want to advertise support for a particular SASL mechanism\n   [SASL] unless a client has sent an appropriate client certificate\n   during a TLS handshake.\n\n   Both the client and the server MUST know if there is a TLS session\n   active.  A client MUST NOT attempt to start a TLS session if a TLS\n   session is already active.  A server MUST NOT return the STARTTLS\n   extension in response to an EHLO command received after a TLS\n   handshake has completed.\n\n4.3 STARTTLS on the Submission Port\n\n   STARTTLS is a valid ESMTP extension when used on the Submission port,\n   as defined in [RFC2476].  In fact, since the submission port is by\n   definition not a publicly referenced SMTP server, the STARTTLS\n   extension can be particularly useful by providing security and\n   authentication for this service.\n\n5. Usage Example\n\n   The following dialog illustrates how a client and server can start a\n   TLS session:\n\n   S: <waits for connection on TCP port 25>\n   C: <opens connection>\n   S: 220 mail.imc.org SMTP service ready\n   C: EHLO mail.example.com\n   S: 250-mail.imc.org offers a warm hug of welcome\n   S: 250-8BITMIME\n   S: 250-STARTTLS\n   S: 250 DSN\n   C: STARTTLS\n   S: 220 Go ahead\n   C: <starts TLS negotiation>\n   C & S: <negotiate a TLS session>\n   C & S: <check result of negotiation>\n   C: EHLO mail.example.com\n   S: 250-mail.imc.org touches your hand gently for a moment\n   S: 250-8BITMIME\n   S: 250 DSN\n\n6. Security Considerations\n\n   It should be noted that SMTP is not an end-to-end mechanism.  Thus,\n   if an SMTP client/server pair decide to add TLS privacy, they are not\n   securing the transport from the originating mail user agent to the\n   recipient.  Further, because delivery of a single piece of mail may\n   go between more than two SMTP servers, adding TLS privacy to one pair\n\n\n\nHoffman                     Standards Track                     [Page 5]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\n   of servers does not mean that the entire SMTP chain has been made\n   private.  Further, just because an SMTP server can authenticate an\n   SMTP client, it does not mean that the mail from the SMTP client was\n   authenticated by the SMTP client when the client received it.\n\n   Both the SMTP client and server must check the result of the TLS\n   negotiation to see whether an acceptable degree of authentication and\n   privacy was achieved.  Ignoring this step completely invalidates\n   using TLS for security.  The decision about whether acceptable\n   authentication or privacy was achieved is made locally, is\n   implementation-dependent, and is beyond the scope of this document.\n\n   The SMTP client and server should note carefully the result of the\n   TLS negotiation.  If the negotiation results in no privacy, or if it\n   results in privacy using algorithms or key lengths that are deemed\n   not strong enough, or if the authentication is not good enough for\n   either party, the client may choose to end the SMTP session with an\n   immediate QUIT command, or the server may choose to not accept any\n   more SMTP commands.\n\n   A man-in-the-middle attack can be launched by deleting the \"250\n   STARTTLS\" response from the server.  This would cause the client not\n   to try to start a TLS session.  Another man-in-the-middle attack is\n   to allow the server to announce its STARTTLS capability, but to alter\n   the client's request to start TLS and the server's response.  In\n   order to defend against such attacks both clients and servers MUST be\n   able to be configured to require successful TLS negotiation of an\n   appropriate cipher suite for selected hosts before messages can be\n   successfully transferred.  The additional option of using TLS when\n   possible SHOULD also be provided.  An implementation MAY provide the\n   ability to record that TLS was used in communicating with a given\n   peer and generating a warning if it is not used in a later session.\n\n   If the TLS negotiation fails or if the client receives a 454\n   response, the client has to decide what to do next.  There are three\n   main choices: go ahead with the rest of the SMTP session, retry TLS\n   at a later time, or give up and return the mail to the sender.  If a\n   failure or error occurs, the client can assume that the server may be\n   able to negotiate TLS in the future, and should try negotiate TLS in\n   a later session, until some locally-chosen timeout occurs, at which\n   point, the client should return the mail to the sender.  However, if\n   the client and server were only using TLS for authentication, the\n   client may want to proceed with the SMTP session, in case some of the\n   operations the client wanted to perform are accepted by the server\n   even if the client is unauthenticated.\n\n   Before the TLS handshake has begun, any protocol interactions are\n   performed in the clear and may be modified by an active attacker.\n\n\n\nHoffman                     Standards Track                     [Page 6]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\n   For this reason, clients and servers MUST discard any knowledge\n   obtained prior to the start of the TLS handshake upon completion of\n   the TLS handshake.\n\n   The STARTTLS extension is not suitable for authenticating the author\n   of an email message unless every hop in the delivery chain, including\n   the submission to the first SMTP server, is authenticated.  Another\n   proposal [SMTP-AUTH] can be used to authenticate delivery and MIME\n   security multiparts [MIME-SEC] can be used to authenticate the author\n   of an email message.  In addition, the [SMTP-AUTH] proposal offers\n   simpler and more flexible options to authenticate an SMTP client and\n   the SASL EXTERNAL mechanism [SASL] MAY be used in conjunction with\n   the STARTTLS command to provide an authorization identity.\n\n7. References\n\n   [RFC2821]  Klensin, J., \"Simple Mail Transfer Protocol\", RFC 2821,\n               April 2001.\n\n   [RFC2034]  Freed, N., \"SMTP Service Extension for Returning Enhanced\n               Error Codes\", RFC 2034, October 1996.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2476]  Gellens, R. and J. Klensin, \"Message Submission\", RFC\n               2476, December 1998.\n\n   [SASL]      Myers, J., \"Simple Authentication and Security Layer\n               (SASL)\", RFC 2222, October 1997.\n\n   [SMTP-AUTH] Myers, J., \"SMTP Service Extension for Authentication\",\n               RFC 2554, March 1999.\n\n   [TLS]       Dierks, T. and C. Allen, \"The TLS Protocol Version 1.0\",\n               RFC 2246, January 1999.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 7]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\nAppendix\n\n   This document is a revision of RFC 2487, which is a Proposed\n   Standard. The changes from that document are:\n\n   -  Section 5 and 7: More discussion of the man-in-the-middle attacks\n   -  Section 5: Additional discussion of when a server should and\n      should not advertise the STARTTLS extension\n   -  Section 5: Changed the requirements on SMTP clients after\n      receiving a 220 response.\n   -  Section 5.1: Clarified description of verifying certificates.\n   -  Section 5.3: Added the section on \"STARTTLS on the Submission\n      Port\"\n   -  Section 6: Bug fix in the example to indicate that the client\n      needs to issue a new EHLO command, as already is described in\n      section 5.2.\n   -  Section 7: Clarification of the paragraph on acceptable degree of\n      privacy. Significant change to the discussion of how to avoid a\n      man-in-the-middle attack.\n   -  Section A: Update reference from RFC 821 to RFC 2821.\n\nAuthor's Address\n\n   Paul Hoffman\n   Internet Mail Consortium\n   127 Segre Place\n   Santa Cruz, CA  95060\n\n   Phone: (831) 426-9827\n   EMail: phoffman@imc.org\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 8]\n\f\nRFC 3207     SMTP Service Extension - Secure SMTP over TLS February 2002\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2002).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHoffman                     Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc3348.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                          M. Gahrns\nRequest for Comments: 3348                                      R. Cheng\nCategory: Informational                                        Microsoft\n                                                               July 2002\n\n\n             The Internet Message Action Protocol (IMAP4)\n                        Child Mailbox Extension\n\nStatus of this Memo\n\n   This memo provides information for the Internet community.  It does\n   not specify an Internet standard of any kind.  Distribution of this\n   memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2002).  All Rights Reserved.\n\nAbstract\n\n   The Internet Message Action Protocol (IMAP4) CHILDREN extension\n   provides a mechanism for a client to efficiently determine if a\n   particular mailbox has children, without issuing a LIST \"\" * or a\n   LIST \"\" % for each mailbox.\n\n1. Conventions used in this document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.  If such lines are wrapped without a new \"C:\" or\n   \"S:\" label, then the wrapping is for editorial clarity and is not\n   part of the command.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\",  \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC-2119].\n\n2. Introduction and Overview\n\n   Many IMAP4 [RFC-2060] clients present to the user a hierarchical view\n   of the mailboxes that a user has access to.  Rather than initially\n   presenting to the user the entire mailbox hierarchy, it is often\n   preferable to show to the user a collapsed outline list of the\n   mailbox hierarchy (particularly if there is a large number of\n   mailboxes).  The user can then expand the collapsed outline hierarchy\n   as needed.  It is common to include within the collapsed hierarchy a\n\n\n\n\n\nGahrns, et al.               Informational                      [Page 1]\n\f\nRFC 3348             IMAP4 Child Mailbox Extension             July 2002\n\n\n   visual clue (such as a \"+\") to indicate that there are child\n   mailboxes under a particular mailbox.  When the visual clue is\n   clicked the hierarchy list is expanded to show the child mailboxes.\n\n   Several IMAP vendors implemented this proposal, and it is proposed to\n   document this behavior and functionality as an Informational RFC.\n\n   There is interest in addressing the general extensibility of the IMAP\n   LIST command through an IMAP LIST Extension draft.  Similar\n   functionality to the \\HasChildren and \\HasNoChildren flags could be\n   incorporated into this new LIST Extension.  It is proposed that the\n   more general LIST Extension draft proceed on the standards track with\n   this proposal being relegated to informational status only.\n\n   If the functionality of the \\HasChildren and \\HasNoChildren flags\n   were incorporated into a more general LIST extension, this would have\n   the advantage that a client could then have the opportunity to\n   request whether or not the server should return this information.\n   This would be an advantage over the current draft for servers where\n   this information is expensive to compute, since the server would only\n   need to compute the information when it knew that the client\n   requesting the information was able to consume it.\n\n3. Requirements\n\n   IMAP4 servers that support this extension MUST list the keyword\n   CHILDREN in their CAPABILITY response.\n\n   The CHILDREN extension defines two new attributes that MAY be\n   returned within a LIST response.\n\n   \\HasChildren - The presence of this attribute indicates that the\n   mailbox has child mailboxes.\n\n   Servers SHOULD NOT return \\HasChildren if child mailboxes exist, but\n   none will be displayed to the current user in a LIST response (as\n   should be the case where child mailboxes exist, but a client does not\n   have permissions to access them.)  In this case, \\HasNoChildren\n   SHOULD be used.\n\n   In many cases, however, a server may not be able to efficiently\n   compute whether a user has access to all child mailboxes, or multiple\n   users may be accessing the same account and simultaneously changing\n   the mailbox hierarchy.  As such a client MUST be prepared to accept\n   the \\HasChildren attribute as a hint.  That is, a mailbox MAY be\n   flagged with the \\HasChildren attribute, but no child mailboxes will\n   appear in a subsequent LIST response.\n\n\n\n\nGahrns, et al.               Informational                      [Page 2]\n\f\nRFC 3348             IMAP4 Child Mailbox Extension             July 2002\n\n\n   Example 3.1:\n   ============\n\n   /*** Consider a server that has the following mailbox hierarchy:\n\n   INBOX\n   ITEM_1\n      ITEM_1A\n   ITEM_2\n      TOP_SECRET\n\n   Where INBOX, ITEM_1 and ITEM_2 are top level mailboxes.  ITEM_1A is a\n   child mailbox of ITEM_1 and TOP_SECRET is a child mailbox of ITEM_2\n   that the currently logged on user does NOT have access to.\n\n   Note that in this case, the server is not able to efficiently compute\n   access rights to child mailboxes and responds with a \\HasChildren\n   attribute for mailbox ITEM_2, even though ITEM_2/TOP_SECRET does not\n   appear in the list response.  ***/\n\n   C: A001 LIST \"\" *\n   S: * LIST (\\HasNoChildren) \"/\" INBOX\n   S: * LIST (\\HasChildren) \"/\" ITEM_1\n   S: * LIST (\\HasNoChildren) \"/\" ITEM_1/ITEM_1A\n   S: * LIST (\\HasChildren) \"/\" ITEM_2\n   S: A001 OK LIST Completed\n\n   \\HasNoChildren - The presence of this attribute indicates that the\n   mailbox has NO child mailboxes that are accessible to the currently\n   authenticated user.  If a mailbox has the \\Noinferiors attribute, the\n   \\HasNoChildren attribute is redundant and SHOULD be omitted in the\n   LIST response.\n\n   In some instances a server that supports the CHILDREN extension MAY\n   NOT be able to determine whether a mailbox has children.  For example\n   it may have difficulty determining whether there are child mailboxes\n   when LISTing mailboxes while operating in a particular namespace.\n\n   In these cases, a server MAY exclude both the \\HasChildren and\n   \\HasNoChildren attributes in the LIST response.  As such, a client\n   can not make any assumptions about whether a mailbox has children\n   based upon the absence of a single attribute.\n\n   It is an error for the server to return both a \\HasChildren and a\n   \\HasNoChildren attribute in a LIST response.\n\n\n\n\n\n\nGahrns, et al.               Informational                      [Page 3]\n\f\nRFC 3348             IMAP4 Child Mailbox Extension             July 2002\n\n\n   It is an error for the server to return both a \\HasChildren and a\n   \\NoInferiors attribute in a LIST response.\n\n   Note: the \\HasNoChildren attribute should not be confused with the\n   IMAP4 [RFC-2060] defined attribute \\Noinferiors which indicates that\n   no child mailboxes exist now and none can be created in the future.\n\n   The \\HasChildren and \\HasNoChildren attributes might not be returned\n   in response to a LSUB response.  Many servers maintain a simple\n   mailbox subscription list that is not updated when the underlying\n   mailbox structure is changed.  A client MUST NOT assume that\n   hierarchy information will be maintained in the subscription list.\n\n   RLIST is a command defined in [RFC-2193] that includes in a LIST\n   response mailboxes that are accessible only via referral.  That is, a\n   client must explicitly issue an RLIST command to see a list of these\n   mailboxes.  Thus in the case where a mailbox has child mailboxes that\n   are available only via referral, the mailboxes would appear as\n   \\HasNoChildren in response to the LIST command, and \\HasChildren in\n   response to the RLIST command.\n\n5. Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [ABNF].\n\n   Two new mailbox attributes are defined as flag_extensions to the\n   IMAP4 mailbox_list response:\n\n   HasChildren = \"\\HasChildren\"\n\n   HasNoChildren = \"\\HasNoChildren\"\n\n6. Security Considerations\n\n   This extension provides a client a more efficient means of\n   determining whether a particular mailbox has children.  If a mailbox\n   has children, but the currently authenticated user does not have\n   access to any of them, the server SHOULD respond with a\n   \\HasNoChildren attribute.  In many cases, however, a server may not\n   be able to efficiently compute whether a user has access to all child\n   mailboxes.  If such a server responds with a \\HasChildren attribute,\n   when in fact the currently authenticated user does not have access to\n   any child mailboxes, potentially more information is conveyed about\n   the mailbox than intended.  A server designed with such levels of\n   security in mind SHOULD NOT attach the \\HasChildren attribute to a\n   mailbox unless the server is certain that the user has access to at\n   least one of the child mailboxes.\n\n\n\nGahrns, et al.               Informational                      [Page 4]\n\f\nRFC 3348             IMAP4 Child Mailbox Extension             July 2002\n\n\n7. References\n\n   [RFC-2060] Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 2060, December 1996.\n\n   [RFC-2119] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC-2234] Crocker, D. and P. Overell, Editors, \"Augmented BNF for\n              Syntax Specifications: ABNF\", RFC 2234, November 1997.\n\n   [RFC-2193] Gahrns, M., \"IMAP4 Mailbox Referrals\", RFC 2193, September\n              1997.\n\n8.  Acknowledgments\n\n   The authors would like to thank the participants of several IMC Mail\n   Connect events for their input when this idea was originally\n   presented and refined.\n\n9. Author's Address\n\n   Mike Gahrns\n   Microsoft\n   One Microsoft Way\n   Redmond, WA, 98052\n   Phone: (425) 936-9833\n   EMail: mikega@microsoft.com\n\n   Raymond Cheng\n   Microsoft\n   One Microsoft Way\n   Redmond, WA, 98052\n   Phone: (425) 703-4913\n   EMail: raych@microsoft.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGahrns, et al.               Informational                      [Page 5]\n\f\nRFC 3348             IMAP4 Child Mailbox Extension             July 2002\n\n\n10. Full Copyright Statement\n\n   Copyright (C) The Internet Society (2002).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGahrns, et al.               Informational                      [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc3461.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           K. Moore\nRequest for Comments: 3461                       University of Tennessee\nObsoletes 1891                                              January 2003\nCategory: Standards Track\n\n\n         Simple Mail Transfer Protocol (SMTP) Service Extension\n                for Delivery Status Notifications (DSNs)\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\nAbstract\n\n   This memo defines an extension to the Simple Mail Transfer Protocol\n   (SMTP) service, which allows an SMTP client to specify (a) that\n   Delivery Status Notifications (DSNs) should be generated under\n   certain conditions, (b) whether such notifications should return the\n   contents of the message, and (c) additional information, to be\n   returned with a DSN, that allows the sender to identify both the\n   recipient(s) for which the DSN was issued, and the transaction in\n   which the original message was sent.\n\nTerminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in BCP 14, RFC 2119 [7].\n\nTable of Contents\n\n   1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3\n   2. Framework for the Delivery Status Notification Extension . . .  4\n   3. The Delivery Status Notification service extension . . . . . .  5\n   4. Additional parameters for RCPT and MAIL commands . . . . . . .  6\n   4.1 The NOTIFY parameter of the ESMTP RCPT command. . . . . . . .  7\n   4.2 The ORCPT parameter to the ESMTP RCPT command . . . . . . . .  8\n   4.3 The RET parameter of the ESMTP MAIL command . . . . . . . . .  9\n   4.4 The ENVID parameter to the ESMTP MAIL command . . . . . . . .  9\n\n\n\nMoore                       Standards Track                     [Page 1]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   4.5 Restrictions on the use of Delivery Status Notification\n       parameters. . . . . . . . . . . . . . . . . . . . . . . . . . 10\n   5. Conformance requirements . . . . . . . . . . . . . . . . . . . 10\n   5.1 SMTP protocol interactions. . . . . . . . . . . . . . . . . . 11\n   5.2 Handling of messages received via SMTP. . . . . . . . . . . . 11\n   5.2.1 Relay of messages to other conforming SMTP servers. . . . . 12\n   5.2.2 Relay of messages to non-conforming SMTP servers. . . . . . 13\n   5.2.3 Local delivery of messages. . . . . . . . . . . . . . . . . 14\n   5.2.4 Gatewaying a message into a foreign environment . . . . . . 14\n   5.2.5 Delays in delivery. . . . . . . . . . . . . . . . . . . . . 15\n   5.2.6 Failure of a conforming MTA to deliver a message. . . . . . 16\n   5.2.7 Forwarding, aliases, and mailing lists. . . . . . . . . . . 16\n   5.2.7.1 mailing lists . . . . . . . . . . . . . . . . . . . . . . 17\n   5.2.7.2 single-recipient aliases. . . . . . . . . . . . . . . . . 18\n   5.2.7.3 multiple-recipient aliases. . . . . . . . . . . . . . . . 18\n   5.2.7.4 confidential forwarding addresses . . . . . . . . . . . . 18\n   5.2.8 DSNs describing delivery to multiple recipients . . . . . . 19\n   5.3 Handling of messages from other sources . . . . . . . . . . . 19\n   5.4 Implementation limits . . . . . . . . . . . . . . . . . . . . 19\n   6. Format of delivery notifications . . . . . . . . . . . . . . . 20\n   6.1 SMTP Envelope to be used with delivery status\n       notifications . . . . . . . . . . . . . . . . . . . . . . . . 20\n   6.2 Contents of the DSN . . . . . . . . . . . . . . . . . . . . . 20\n   6.3 Message/delivery-status fields. . . . . . . . . . . . . . . . 21\n   7. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . 22\n   8. Security Considerations. . . . . . . . . . . . . . . . . . . . 22\n   9. Appendix - Type-Name Definitions . . . . . . . . . . . . . . . 24\n   9.1 \"rfc822\" address-type . . . . . . . . . . . . . . . . . . . . 24\n   9.2 \"smtp\" diagnostic-type. . . . . . . . . . . . . . . . . . . . 24\n   9.3 \"dns\" MTA-name-type . . . . . . . . . . . . . . . . . . . . . 25\n   10. Appendix - Example. . . . . . . . . . . . . . . . . . . . . . 26\n   10.1 Submission . . . . . . . . . . . . . . . . . . . . . . . . . 27\n   10.2 Relay to Example.COM . . . . . . . . . . . . . . . . . . . . 28\n   10.3 Relay to Ivory.EDU . . . . . . . . . . . . . . . . . . . . . 29\n   10.4 Relay to Bombs.AF.MIL. . . . . . . . . . . . . . . . . . . . 30\n   10.5 Forward from George@Tax-ME.GOV to Sam@Boondoggle.GOV . . . . 31\n   10.6 \"Delivered\" DSN for Bob@Example.COM. . . . . . . . . . . . . 32\n   10.7 Failed DSN for Carol@Ivory.EDU . . . . . . . . . . . . . . . 33\n   10.8 Relayed DSN For Dana@Ivory.EDU . . . . . . . . . . . . . . . 34\n   10.9 Failure notification for Sam@Boondoggle.GOV. . . . . . . . . 35\n   11. Appendix - Changes since RFC 1891 . . . . . . . . . . . . . . 35\n   12. References. . . . . . . . . . . . . . . . . . . . . . . . . . 36\n   12.1 Normative References . . . . . . . . . . . . . . . . . . . . 36\n   12.2 Informative References . . . . . . . . . . . . . . . . . . . 36\n   13. Author's Address. . . . . . . . . . . . . . . . . . . . . . . 37\n   14. Full Copyright Statement. . . . . . . . . . . . . . . . . . . 38\n\n\n\n\n\nMoore                       Standards Track                     [Page 2]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n1. Introduction\n\n   The SMTP protocol [1] requires that an SMTP server provide\n   notification of delivery failure, if it determines that a message\n   cannot be delivered to one or more recipients.  Traditionally, such\n   notification consists of an ordinary Internet mail message (format\n   defined by [2]), sent to the envelope sender address (the argument of\n   the SMTP MAIL command), containing an explanation of the error and at\n   least the headers of the failed message.\n\n   Experience with large mail distribution lists [8] indicates that such\n   messages are often insufficient to diagnose problems, or even to\n   determine at which host or for which recipients a problem occurred.\n   In addition, the lack of a standardized format for delivery\n   notifications in Internet mail makes it difficult to exchange such\n   notifications with other message handling systems.\n\n   Such experience has demonstrated a need for a delivery status\n   notification service for Internet electronic mail, which:\n\n   (a)  is reliable, in the sense that any DSN request will either be\n        honored at the time of final delivery, or result in a response\n        that indicates that the request cannot be honored,\n\n   (b)  when both success and failure notifications are requested,\n        provides an unambiguous and nonconflicting indication of whether\n        delivery of a message to a recipient succeeded or failed,\n\n   (c)  is stable, in that a failed attempt to deliver a DSN should\n        never result in the transmission of another DSN over the\n        network,\n\n   (d)  preserves sufficient information to allow the sender to identify\n        both the mail transaction and the recipient address which caused\n        the notification, even when mail is forwarded or gatewayed to\n        foreign environments, and\n\n   (e)  interfaces acceptably with non-SMTP and non-822-based mail\n        systems, both so that notifications returned from foreign mail\n        systems may be useful to Internet users, and so that the\n        notification requests from foreign environments may be honored.\n        Among the requirements implied by this goal are the ability to\n        request non-return-of-content, and the ability to specify\n        whether positive delivery notifications, negative delivery\n        notifications, both, or neither, should be issued.\n\n\n\n\n\n\nMoore                       Standards Track                     [Page 3]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   In an attempt to provide such a service, this memo uses the mechanism\n   defined in [1] to define an extension to the SMTP protocol.  Using\n   this mechanism, an SMTP client may request that an SMTP server issue\n   or not issue a Delivery Status Notification (DSN) under certain\n   conditions.  The format of a DSN is defined in [3].\n\n2. Framework for the Delivery Status Notification Extension\n\n   The following service extension is therefore defined:\n\n   (1)  The name of the SMTP service extension is \"Delivery Status\n        Notification\";\n\n   (2)  the EHLO keyword value associated with this extension is \"DSN\",\n        the meaning of which is defined in section 3 of this memo;\n\n   (3)  no parameters are allowed with this EHLO keyword value;\n\n   (4)  two optional parameters are added to the RCPT command, and two\n        optional parameters are added to the MAIL command:\n\n        An optional parameter for the RCPT command, using the\n        esmtp-keyword \"NOTIFY\", (to specify the conditions under which a\n        Delivery Status Notification should be generated), is defined in\n        section 5.1,\n\n        An optional parameter for the RCPT command, using the\n        esmtp-keyword \"ORCPT\", (used to convey the \"original\"\n        (sender-specified) recipient address), is defined in section\n        5.2, and\n\n        An optional parameter for the MAIL command, using the\n        esmtp-keyword \"RET\", (to request that DSNs containing an\n        indication of delivery failure either return the entire contents\n        of a message or only the message headers), is defined in section\n        5.3,\n\n        An optional parameter for the MAIL command, using the\n        esmtp-keyword \"ENVID\", (used to propagate an identifier for this\n        message transmission envelope, which is also known to the sender\n        and will, if present, be returned in any DSNs issued for this\n        transmission), is defined in section 4.4;\n\n   (5)  no additional SMTP verbs are defined by this extension.\n\n   The remainder of this memo specifies how support for the extension\n   affects the behavior of a message transfer agent.\n\n\n\n\nMoore                       Standards Track                     [Page 4]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n3. The Delivery Status Notification service extension\n\n   An SMTP client wishing to request a DSN for a message may issue the\n   EHLO command to start an SMTP session, to determine if the server\n   supports any of several service extensions.  If the server responds\n   with code 250 to the EHLO command, and the response includes the EHLO\n   keyword DSN, then the Delivery Status Notification extension (as\n   described in this memo) is supported.\n\n   Ordinarily, when an SMTP server returns a positive (2xx) reply code\n   in response to a RCPT command, it agrees to accept responsibility for\n   either delivering the message to the named recipient, or sending a\n   notification to the sender of the message indicating that delivery\n   has failed.  However, an extended SMTP (\"ESMTP\") server which\n   implements this service extension will accept an optional NOTIFY\n   parameter with the RCPT command.  If present, the NOTIFY parameter\n   alters the conditions for generation of Delivery Status Notifications\n   from the default (issue notifications only on failure) specified in\n   [1].  The ESMTP client may also request (via the RET parameter)\n   whether the entire contents of the original message should be\n   returned (as opposed to just the headers of that message), along with\n   the DSN.\n\n   In general, an ESMTP server which implements this service extension\n   will propagate Delivery Status Notification requests when relaying\n   mail to other SMTP-based MTAs which also support this extension, and\n   make a \"best effort\" to ensure that such requests are honored when\n   messages are passed into other environments.\n\n   In order for Delivery Status Notifications to be meaningful to the\n   sender, ESMTP servers, which support this extension, should propagate\n   the following information for use in generating DSNs to any other\n   MTAs that are used to relay the message:\n\n   (a)  for each recipient, a copy of the original recipient address, as\n        used by the sender of the message.\n\n        This address need not be the same as the mailbox specified in\n        the RCPT command.  For example, if a message was originally\n        addressed to A@B.C and later forwarded to A@D.E, after such\n        forwarding has taken place, the RCPT command will specify a\n        mailbox of A@D.E.  However, the original recipient address\n        remains A@B.C.\n\n\n\n\n\n\n\n\nMoore                       Standards Track                     [Page 5]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n        Also, if the message originated from an environment which does\n        not use Internet-style user@domain addresses, and was gatewayed\n        into SMTP, the original recipient address will preserve the\n        original form of the recipient address.\n\n   (b)  for the entire SMTP transaction, an envelope identification\n        string, which may be used by the sender to associate any\n        delivery status notifications with the transaction used to send\n        the original message.\n\n4. Additional parameters for RCPT and MAIL commands\n\n   The extended RCPT and MAIL commands are issued by a client when it\n   wishes to request a DSN from the server, under certain conditions,\n   for a particular recipient.  The extended RCPT and MAIL commands are\n   identical to the RCPT and MAIL commands defined in [1], except that\n   one or more of the following parameters appear after the sender or\n   recipient address, respectively.  The general syntax for extended\n   SMTP commands is defined in [1].\n\n   NOTE: Although RFC 822 ABNF is used to describe the syntax of these\n   parameters, they are not, in the language of that document,\n   \"structured field bodies\".  Therefore, while parentheses MAY appear\n   within an emstp-value, they are not recognized as comment delimiters.\n\n   The syntax for \"esmtp-value\" in [1] does not allow SP, \"=\", control\n   characters, or characters outside the traditional ASCII range of\n   1-127 decimal to be transmitted in an esmtp-value.  Because the ENVID\n   and ORCPT parameters may need to convey values outside this range,\n   the esmtp-values for these parameters are encoded as \"xtext\".\n   \"xtext\" is formally defined as follows:\n\n      xtext = *( xchar / hexchar )\n\n      xchar = any ASCII CHAR between \"!\" (33) and \"~\" (126) inclusive,\n              except for \"+\" and \"=\".\n\n      ; \"hexchar\"s are intended to encode octets that cannot appear\n      ; as ASCII characters within an esmtp-value.\n\n      hexchar = ASCII \"+\" immediately followed by two upper case\n                hexadecimal digits\n\n   When encoding an octet sequence as xtext:\n\n   +  Any ASCII CHAR between \"!\" and \"~\" inclusive, except for \"+\" and\n      \"=\", MAY be encoded as itself.  (A CHAR in this range MAY instead\n      be encoded as a \"hexchar\", at the implementor's discretion.)\n\n\n\nMoore                       Standards Track                     [Page 6]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   +  ASCII CHARs that fall outside the range above must be encoded as\n      \"hexchar\".\n\n4.1 The NOTIFY parameter of the ESMTP RCPT command\n\n   A RCPT command issued by a client may contain the optional\n   esmtp-keyword \"NOTIFY\", to specify the conditions under which the\n   SMTP server should generate DSNs for that recipient.  If the NOTIFY\n   esmtp-keyword is used, it MUST have an associated esmtp-value,\n   formatted according to the following rules, using the ABNF of RFC\n   822:\n\n      notify-esmtp-value = \"NEVER\" / 1#notify-list-element\n\n      notify-list-element = \"SUCCESS\" / \"FAILURE\" / \"DELAY\"\n\n   Notes:\n\n   a. Multiple notify-list-elements, separated by commas, MAY appear in\n      a NOTIFY parameter; however, the NEVER keyword MUST appear by\n      itself.\n\n   b. Any of the keywords NEVER, SUCCESS, FAILURE, or DELAY may be\n      spelled in any combination of upper and lower case letters.\n\n   The meaning of the NOTIFY parameter values is generally as follows:\n\n   +  A NOTIFY parameter value of \"NEVER\" requests that a DSN not be\n      returned to the sender under any conditions.\n\n   +  A NOTIFY parameter value containing the \"SUCCESS\" or \"FAILURE\"\n      keywords requests that a DSN be issued on successful delivery or\n      delivery failure, respectively.\n\n   +  A NOTIFY parameter value containing the keyword \"DELAY\" indicates\n      the sender's willingness to receive \"delayed\" DSNs.  Delayed DSNs\n      may be issued if delivery of a message has been delayed for an\n      unusual amount of time (as determined by the MTA at which the\n      message is delayed), but the final delivery status (whether\n      successful or failure) cannot be determined.  The absence of the\n      DELAY keyword in a NOTIFY parameter requests that a \"delayed\" DSN\n      NOT be issued under any conditions.\n\n   The actual rules governing interpretation of the NOTIFY parameter are\n   given in section 6.\n\n\n\n\n\n\nMoore                       Standards Track                     [Page 7]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   For compatibility with SMTP clients that do not use the NOTIFY\n   facility, the absence of a NOTIFY parameter in a RCPT command may be\n   interpreted as either NOTIFY=FAILURE or NOTIFY=FAILURE,DELAY.\n\n4.2 The ORCPT parameter to the ESMTP RCPT command\n\n   The ORCPT esmtp-keyword of the RCPT command is used to specify an\n   \"original\" recipient address that corresponds to the actual recipient\n   to which the message is to be delivered.  If the ORCPT esmtp-keyword\n   is used, it MUST have an associated esmtp-value, which consists of\n   the original recipient address, encoded according to the rules below.\n   The ABNF for the ORCPT parameter is:\n\n      orcpt-parameter = \"ORCPT=\" original-recipient-address\n\n      original-recipient-address = addr-type \";\" xtext\n\n      addr-type = atom\n\n   The \"addr-type\" portion MUST be an IANA-registered electronic mail\n   address-type (as defined in [3]), while the \"xtext\" portion contains\n   an encoded representation of the original recipient address using the\n   rules in section 5 of this document.  The entire ORCPT parameter MAY\n   be up to 500 characters in length.\n\n   When initially submitting a message via SMTP, if the ORCPT parameter\n   is used, it MUST contain the same address as the RCPT TO address\n   (unlike the RCPT TO address, the ORCPT parameter will be encoded as\n   xtext).  Likewise, when a mailing list submits a message via SMTP to\n   be distributed to the list subscribers, if ORCPT is used, the ORCPT\n   parameter MUST match the new RCPT TO address of each recipient, not\n   the address specified by the original sender of the message.)\n\n   The \"addr-type\" portion of the original-recipient-address is used to\n   indicate the \"type\" of the address which appears in the ORCPT\n   parameter value.  However, the address associated with the ORCPT\n   keyword is NOT constrained to conform to the syntax rules for that\n   \"addr-type\".\n\n   Ideally, the \"xtext\" portion of the original-recipient-address should\n   contain, in encoded form, the same sequence of characters that the\n   sender used to specify the recipient.  However, for a message\n   gatewayed from an environment (such as X.400) in which a recipient\n   address is not a simple string of printable characters, the\n   representation of recipient address must be defined by a\n   specification for gatewaying between DSNs and that environment.\n\n\n\n\n\nMoore                       Standards Track                     [Page 8]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   Due to limitations in the Delivery Status Notification format, the\n   value of the original recipient address prior to encoding as \"xtext\"\n   MUST consist entirely of printable (graphic and white space)\n   characters from the US-ASCII [4] repertoire.  If an addr-type is\n   defined for addresses which use characters outside of this\n   repertoire, the specification for that addr-type MUST define the\n   means of encoding those addresses in printable US-ASCII characters\n   when are then encoded as xtext.\n\n4.3 The RET parameter of the ESMTP MAIL command\n\n   The RET esmtp-keyword on the extended MAIL command specifies whether\n   or not the message should be included in any failed DSN issued for\n   this message transmission.  If the RET esmtp-keyword is used, it MUST\n   have an associated esmtp-value, which is one of the following\n   keywords:\n\n   FULL requests that the entire message be returned in any \"failed\"\n        Delivery Status Notification issued for this recipient.\n\n   HDRS requests that only the headers of the message be returned.\n\n   The FULL and HDRS keywords may be spelled in any combination of upper\n   and lower case letters.\n\n   If no RET parameter is supplied, the MTA MAY return either the\n   headers of the message or the entire message for any DSN containing\n   indication of failed deliveries.\n\n   Note that the RET parameter only applies to DSNs that indicate\n   delivery failure for at least one recipient.  If a DSN contains no\n   indications of delivery failure, only the headers of the message\n   should be returned.\n\n4.4 The ENVID parameter to the ESMTP MAIL command\n\n   The ENVID esmtp-keyword of the SMTP MAIL command is used to specify\n   an \"envelope identifier\" to be transmitted along with the message and\n   included in any DSNs issued for any of the recipients named in this\n   SMTP transaction.  The purpose of the envelope identifier is to allow\n   the sender of a message to identify the transaction for which the DSN\n   was issued.\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                     [Page 9]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   The ABNF for the ENVID parameter is:\n\n      envid-parameter = \"ENVID=\" xtext\n\n   The ENVID esmtp-keyword MUST have an associated esmtp-value.  No\n   meaning is assigned by the mail system to the presence or absence of\n   this parameter or to any esmtp-value associated with this parameter;\n   the information is used only by the sender or his user agent.  The\n   ENVID parameter MAY be up to 100 characters in length.\n\n   Due to limitations in the Delivery Status Notification format, the\n   value of the ENVID parameter prior to encoding as \"xtext\" MUST\n   consist entirely of printable (graphic and white space) characters\n   from the US-ASCII [4] repertoire.\n\n4.5 Restrictions on the use of Delivery Status Notification parameters\n\n   The RET and ENVID parameters MUST NOT appear more than once each in\n   any single MAIL command.  If more than one of either of these\n   parameters appears in a MAIL command, the ESMTP server SHOULD respond\n   with \"501 syntax error in parameters or arguments\".\n\n   The NOTIFY and ORCPT parameters MUST NOT appear more than once in any\n   RCPT command.  If more than one of either of these parameters appears\n   in a RCPT command, the ESMTP server SHOULD respond with \"501 syntax\n   error in parameters or arguments\".\n\n5. Conformance requirements\n\n   The Simple Mail Transfer Protocol (SMTP) is used by Message Transfer\n   Agents (MTAs) when accepting, relaying, or gatewaying mail, as well\n   as User Agents (UAs) when submitting mail to the mail transport\n   system.  The DSN extension to SMTP may be used to allow UAs to convey\n   the sender's requests as to when DSNs should be issued.  A UA which\n   claims to conform to this specification must meet certain\n   requirements as described below.\n\n   Typically, a message transfer agent (MTA) which supports SMTP will\n   assume, at different times, both the role of a SMTP client and an\n   SMTP server, and may also provide local delivery, gatewaying to\n   foreign environments, forwarding, and mailing list expansion.  An MTA\n   which, when acting as an SMTP server, issues the DSN keyword in\n   response to the EHLO command, MUST obey the rules below for a\n   \"conforming SMTP client\" when acting as a client, and a \"conforming\n   SMTP server\" when acting as a server.  The term \"conforming MTA\"\n   refers to an MTA which conforms to this specification, independent of\n   its role of client or server.\n\n\n\n\nMoore                       Standards Track                    [Page 10]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n5.1 SMTP protocol interactions\n\n   The following rules apply to SMTP transactions in which any of the\n   ENVID, NOTIFY, RET, or ORCPT keywords are used:\n\n   (a) If an SMTP client issues a MAIL command containing a valid ENVID\n       parameter and associated esmtp-value and/or a valid RET parameter\n       and associated esmtp-value, a conforming SMTP server MUST return\n       the same reply-code as it would to the same MAIL command without\n       the ENVID and/or RET parameters.  A conforming SMTP server MUST\n       NOT refuse a MAIL command based on the absence or presence of\n       valid ENVID or RET parameters, or on their associated\n       esmtp-values.\n\n       However, if the associated esmtp-value is not valid (i.e.,\n       contains illegal characters), or if there is more than one ENVID\n       or RET parameter in a particular MAIL command, the server MUST\n       issue the reply-code 501 with an appropriate message (e.g.,\n       \"syntax error in parameter\").\n\n   (b) If an SMTP client issues a RCPT command containing any valid\n       NOTIFY and/or ORCPT parameters, a conforming SMTP server MUST\n       return the same response as it would to the same RCPT command\n       without those NOTIFY and/or ORCPT parameters.  A conforming SMTP\n       server MUST NOT refuse a RCPT command based on the presence or\n       absence of any of these parameters.\n\n       However, if any of the associated esmtp-values are not valid, or\n       if there is more than one of any of these parameters in a\n       particular RCPT command, the server SHOULD issue the response\n       \"501 syntax error in parameter\".\n\n5.2 Handling of messages received via SMTP\n\n   This section describes how a conforming MTA should handle any\n   messages received via SMTP.\n\n   NOTE: A DSN MUST NOT be returned to the sender for any message for\n   which the return address from the SMTP MAIL command was NULL (\"<>\"),\n   even if the sender's address is available from other sources (e.g.,\n   the message header).  However, the MTA which would otherwise issue a\n   DSN SHOULD inform the local postmaster of delivery failures through\n   some appropriate mechanism that will not itself result in the\n   generation of DSNs.\n\n   DISCUSSION: RFC 1123, section 2.3.3 requires error notifications to\n   be sent with a NULL return address (\"reverse-path\").  This creates an\n   interesting situation when a message arrives with one or more\n\n\n\nMoore                       Standards Track                    [Page 11]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   nonfunctional recipient addresses in addition to a nonfunctional\n   return address.  When delivery to one of the recipient addresses\n   fails, the MTA will attempt to send a nondelivery notification to the\n   return address, setting the return address on the notification to\n   NULL.  When the delivery of this notification fails, the MTA\n   attempting delivery of that notification sees a NULL return address.\n   If that MTA were not to inform anyone of the situation, the original\n   message would be silently lost.  Furthermore, a nonfunctional return\n   address is often indicative of a configuration problem in the\n   sender's MTA.  Reporting the condition to the local postmaster may\n   help to speed correction of such errors.\n\n5.2.1 Relay of messages to other conforming SMTP servers\n\n   The following rules govern the behavior of a conforming MTA, when\n   relaying a message which was received via the SMTP protocol, to an\n   SMTP server that supports the Delivery Status Notification service\n   extension:\n\n   (a) Any ENVID parameter included in the MAIL command when a message\n       was received, MUST also appear on the MAIL command with which the\n       message is relayed, with the same associated esmtp-value.  If no\n       ENVID parameter was included in the MAIL command when the message\n       was received, the ENVID parameter MUST NOT be supplied when the\n       message is relayed.\n\n   (b) Any RET parameter included in the MAIL command when a message was\n       received, MUST also appear on the MAIL command with which the\n       message is relayed, with the same associated esmtp-value.  If no\n       RET parameter was included in the MAIL command when the message\n       was received, the RET parameter MUST NOT supplied when the\n       message is relayed.\n\n   (c) If the NOTIFY parameter was supplied for a recipient when the\n       message was received, the RCPT command issued when the message is\n       relayed MUST also contain the NOTIFY parameter along with its\n       associated esmtp-value.  If the NOTIFY parameter was not supplied\n       for a recipient when the message was received, the NOTIFY\n       parameter MUST NOT be supplied for that recipient when the\n       message is relayed.\n\n   (d) If any ORCPT parameter was present in the RCPT command for a\n       recipient when the message was received, an ORCPT parameter with\n       the identical original-recipient-address MUST appear in the RCPT\n       command issued for that recipient when relaying the message.\n       (For example, the MTA therefore MUST NOT change the case of any\n       alphabetic characters in an ORCPT parameter.)\n\n\n\n\nMoore                       Standards Track                    [Page 12]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n       If no ORCPT parameter was present in the RCPT command when the\n       message was received, an ORCPT parameter MAY be added to the RCPT\n       command when the message is relayed.  If an ORCPT parameter is\n       added by the relaying MTA, it MUST contain the recipient address\n       from the RCPT command used when the message was received by that\n       MTA.\n\n5.2.2 Relay of messages to non-conforming SMTP servers\n\n   The following rules govern the behavior of a conforming MTA (in the\n   role of client), when relaying a message which was received via the\n   SMTP protocol, to an SMTP server that does not support the Delivery\n   Status Notification service extension:\n\n   (a) ENVID, NOTIFY, RET, or ORCPT parameters MUST NOT be issued when\n       relaying the message.\n\n   (b) If the NOTIFY parameter was supplied for a recipient, with an\n       esmtp-value containing the keyword SUCCESS, and the SMTP server\n       returns a success (2xx) reply-code in response to the RCPT\n       command, the client MUST issue a \"relayed\" DSN for that\n       recipient.\n\n   (c) If the NOTIFY parameter was supplied for a recipient with an\n       esmtp-value containing the keyword FAILURE, and the SMTP server\n       returns a permanent failure (5xx) reply-code in response to the\n       RCPT command, the client MUST issue a \"failed\" DSN for that\n       recipient.\n\n   (d) If the NOTIFY parameter was supplied for a recipient with an\n       esmtp-value of NEVER, the client MUST NOT issue a DSN for that\n       recipient, regardless of the reply-code returned by the SMTP\n       server.  However, if the server returned a failure (5xx)\n       reply-code, the client MAY inform the local postmaster of the\n       delivery failure via an appropriate mechanism that will not\n       itself result in the generation of DSNs.\n\n       When attempting to relay a message to an SMTP server that does\n       not support this extension, and if NOTIFY=NEVER was specified for\n       some recipients of that message, a conforming SMTP client MAY\n       relay the message for those recipients in a separate SMTP\n       transaction, using an empty reverse-path in the MAIL command.\n       This will prevent DSNs from being issued for those recipients by\n       MTAs that conform to [1].\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 13]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   (e) If a NOTIFY parameter was not supplied for a recipient, and the\n       SMTP server returns a success (2xx) reply-code in response to a\n       RCPT command, the client MUST NOT issue any DSN for that\n       recipient.\n\n   (f) If a NOTIFY parameter was not supplied for a recipient, and the\n       SMTP server returns a permanent failure (5xx) reply-code in\n       response to a RCPT command, the client MUST issue a \"failed\" DSN\n       for that recipient.\n\n5.2.3 Local delivery of messages\n\n   The following rules govern the behavior of a conforming MTA upon\n   successful delivery of a message that was received via the SMTP\n   protocol, to a local recipient's mailbox:\n\n   \"Delivery\" means that the message has been placed in the recipient's\n   mailbox.  For messages which are transmitted to a mailbox for later\n   retrieval via IMAP [9], POP [10] or a similar message access\n   protocol, \"delivery\" occurs when the message is made available to the\n   IMAP (POP, etc.) service, rather than when the message is retrieved\n   by the recipient's user agent.\n\n   Similarly, for a recipient address which corresponds to a mailing\n   list exploder, \"delivery\" occurs when the message is made available\n   to that list exploder, even though the list exploder might refuse to\n   deliver that message to the list recipients.\n\n   (a) If the NOTIFY parameter was supplied for that recipient, with an\n       esmtp-value containing the SUCCESS keyword, the MTA MUST issue a\n       \"delivered\" DSN for that recipient.\n\n   (b) If the NOTIFY parameter was supplied for that recipient which did\n       not contain the SUCCESS keyword, the MTA MUST NOT issue a DSN for\n       that recipient.\n\n   (c) If the NOTIFY parameter was not supplied for that recipient, the\n       MTA MUST NOT issue a DSN.\n\n5.2.4 Gatewaying a message into a foreign environment\n\n   The following rules govern the behavior of a conforming MTA, when\n   gatewaying a message that was received via the SMTP protocol, into a\n   foreign (non-SMTP) environment:\n\n   (a) If the the foreign environment is capable of issuing appropriate\n       notifications under the conditions requested by the NOTIFY\n       parameter, and the conforming MTA can ensure that any\n\n\n\nMoore                       Standards Track                    [Page 14]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n       notification thus issued will be translated into a DSN and\n       delivered to the original sender, then the MTA SHOULD gateway the\n       message into the foreign environment, requesting notification\n       under the desired conditions, without itself issuing a DSN.\n\n   (b) If a NOTIFY parameter was supplied with the SUCCESS keyword, but\n       the destination environment cannot return an appropriate\n       notification on successful delivery, the MTA SHOULD issue a\n       \"relayed\" DSN for that recipient.\n\n   (c) If a NOTIFY parameter was supplied with an esmtp-keyword of\n       NEVER, a DSN MUST NOT be issued.  If possible, the MTA SHOULD\n       direct the destination environment to not issue delivery\n       notifications for that recipient.\n\n   (d) If the NOTIFY parameter was not supplied for a particular\n       recipient, a DSN SHOULD NOT be issued by the gateway.  The\n       gateway SHOULD attempt to ensure that appropriate notification\n       will be provided by the foreign mail environment if eventual\n       delivery failure occurs, and that no notification will be issued\n       on successful delivery.\n\n   (e) When gatewaying a message into a foreign environment, the\n       return-of-content conditions specified by any RET parameter are\n       nonbinding; however, the MTA SHOULD attempt to honor the request\n       using whatever mechanisms exist in the foreign environment.\n\n5.2.5 Delays in delivery\n\n   If a conforming MTA receives a message via the SMTP protocol, and is\n   unable to deliver or relay the message to one or more recipients for\n   an extended length of time (to be determined by the MTA), it MAY\n   issue a \"delayed\" DSN for those recipients, subject to the following\n   conditions:\n\n   (a)  If the NOTIFY parameter was supplied for a recipient and its\n        value included the DELAY keyword, a \"delayed\" DSN MAY be issued.\n\n   (b)  If the NOTIFY parameter was not supplied for a recipient, a\n        \"delayed\" DSN MAY be issued.\n\n   (c)  If the NOTIFY parameter was supplied which did not contain the\n        DELAY keyword, a \"delayed\" DSN MUST NOT be issued.\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 15]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   NOTE: Although delay notifications are common in present-day\n   electronic mail, a conforming MTA is never required to issue\n   \"delayed\" DSNs.  The DELAY keyword of the NOTIFY parameter is\n   provided to allow the SMTP client to specifically request (by\n   omitting the DELAY parameter) that \"delayed\" DSNs NOT be issued.\n\n5.2.6 Failure of a conforming MTA to deliver a message\n\n   The following rules govern the behavior of a conforming MTA which\n   received a message via the SMTP protocol, and is unable to deliver a\n   message to a recipient specified in the SMTP transaction:\n\n   (a)  If a NOTIFY parameter was supplied for the recipient with an\n        esmtp-keyword containing the value FAILURE, a \"failed\" DSN MUST\n        be issued by the MTA.\n\n   (b)  If a NOTIFY parameter was supplied for the recipient which did\n        not contain the value FAILURE, a DSN MUST NOT be issued for that\n        recipient.  However, the MTA MAY inform the local postmaster of\n        the delivery failure via some appropriate mechanism which does\n        not itself result in the generation of DSNs.\n\n   (c)  If no NOTIFY parameter was supplied for the recipient, a\n        \"failed\" DSN MUST be issued.\n\n   NOTE: Some MTAs are known to forward undeliverable messages to the\n   local postmaster or \"dead letter\" mailbox.  This is still considered\n   delivery failure, and does not diminish the requirement to issue a\n   \"failed\" DSN under the conditions defined elsewhere in this memo.  If\n   a DSN is issued for such a recipient, the Action value MUST be\n   \"failed\".\n\n5.2.7 Forwarding, aliases, and mailing lists\n\n   Delivery of a message to a local email address usually causes the\n   message to be stored in the recipient's mailbox.  However, MTAs\n   commonly provide a facility where a local email address can be\n   designated as an \"alias\" or \"mailing list\"; delivery to that address\n   then causes the message to be forwarded to each of the (local or\n   remote) recipient addresses associated with the alias or list.  It is\n   also common to allow a user to optionally \"forward\" her mail to one\n   or more alternate addresses.  If this feature is enabled, her mail is\n   redistributed to those addresses instead of being deposited in her\n   mailbox.\n\n   Following the example of [11] (section 5.3.6), this document defines\n   the difference between an \"alias\" and \"mailing list\" as follows: When\n   forwarding a message to the addresses associated with an \"alias\", the\n\n\n\nMoore                       Standards Track                    [Page 16]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   envelope return address (e.g., SMTP MAIL FROM) remains intact.\n   However, when forwarding a message to the addresses associated with a\n   \"mailing list\", the envelope return address is changed to that of the\n   administrator of the mailing list.  This causes DSNs and other\n   nondelivery reports resulting from delivery to the list members to be\n   sent to the list administrator rather than the sender of the original\n   message.\n\n   The DSN processing for aliases and mailing lists is as follows:\n\n5.2.7.1 mailing lists\n\n   When a message is delivered to a list submission address (i.e.,\n   placed in the list's mailbox for incoming mail, or accepted by the\n   process that redistributes the message to the list subscribers), this\n   is considered final delivery for the original message.  If the NOTIFY\n   parameter for the list submission address contained the SUCCESS\n   keyword, a \"delivered\" DSN MUST be returned to the sender of the\n   original message.\n\n   NOTE: Some mailing lists are able to reject message submissions,\n   based on the content of the message, the sender's address, or some\n   other criteria.  While the interface between such a mailing list and\n   its MTA is not well-defined, it is important that DSNs NOT be issued\n   by both the MTA (to report successful delivery to the list), and the\n   list (to report message rejection using a \"failure\" DSN.)\n\n   However, even if a \"delivered\" DSN was issued by the MTA, a mailing\n   list which rejects a message submission MAY notify the sender that\n   the message was rejected using an ordinary message instead of a DSN.\n\n   Whenever a message is redistributed to an mailing list,\n\n   (a)  The envelope return address is rewritten to point to the list\n        maintainer.  This address MAY be that of a process that\n        recognizes DSNs and processes them automatically, but it MUST\n        forward unrecognized messages to the human responsible for the\n        list.\n\n   (b)  The ENVID, NOTIFY, RET, and ORCPT parameters which accompany the\n        redistributed message MUST NOT be derived from those of the\n        original message.\n\n   (c)  The NOTIFY and RET parameters MAY be specified by the local\n        postmaster or the list administrator.  If ORCPT parameters are\n        supplied during redistribution to the list subscribers, they\n        SHOULD contain the addresses of the list subscribers in the\n        format used by the mailing list.\n\n\n\nMoore                       Standards Track                    [Page 17]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n5.2.7.2 single-recipient aliases\n\n   Under normal circumstances, when a message arrives for an \"alias\"\n   which has a single forwarding address, a DSN SHOULD NOT be issued.\n   Any ENVID, NOTIFY, RET, or ORCPT parameters SHOULD be propagated with\n   the message as it is redistributed to the forwarding address.\n\n5.2.7.3 multiple-recipient aliases\n\n   An \"alias\" with multiple recipient addresses may be handled in any of\n   the following ways:\n\n   (a)  Any ENVID, NOTIFY, RET, or ORCPT parameters are NOT propagated\n        when relaying the message to any of the forwarding addresses.\n        If the NOTIFY parameter for the alias contained the SUCCESS\n        keyword, the MTA issues a \"relayed\" DSN.  (In effect, the MTA\n        treats the message as if it were being relayed into an\n        environment that does not support DSNs.)\n\n   (b)  Any ENVID, NOTIFY, RET, or ORCPT parameters (or the equivalent\n        requests if the message is gatewayed) are propagated to EXACTLY\n        one of the forwarding addresses.  No DSN is issued.  (This is\n        appropriate when aliasing is used to forward a message to a\n        \"vacation\" auto-responder program in addition to the local\n        mailbox.)\n\n   (c)  Any ENVID, RET, or ORCPT parameters are propagated to all\n        forwarding addresses associated with that alias.  The NOTIFY\n        parameter is propagated to the forwarding addresses, except that\n        it any SUCCESS keyword is removed.  If the original NOTIFY\n        parameter for the alias contained the SUCCESS keyword, an\n        \"expanded\" DSN is issued for the alias.  If the NOTIFY parameter\n        for the alias did not contain the SUCCESS keyword, no DSN is\n        issued for the alias.\n\n5.2.7.4 confidential forwarding addresses\n\n   If it is desired to maintain the confidentiality of a recipient's\n   forwarding address, the forwarding may be treated as if it were a\n   mailing list.  A DSN will be issued, if appropriate, upon \"delivery\"\n   to the recipient address specified by the sender.  When the message\n   is forwarded it will have a new envelope return address.  Any DSNs\n   which result from delivery failure of the forwarded message will not\n   be returned to the original sender of the message and thus not expose\n   the recipient's forwarding address.\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 18]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n5.2.8 DSNs describing delivery to multiple recipients\n\n   A single DSN may describe attempts to deliver a message to multiple\n   recipients of that message.  If a DSN is issued for some recipients\n   in an SMTP transaction and not for others according to the rules\n   above, the DSN SHOULD NOT contain information for recipients for whom\n   DSNs would not otherwise have been issued.\n\n5.3 Handling of messages from other sources\n\n   For messages which originated from \"local\" users (whatever that\n   means), the specifications under which DSNs should be generated can\n   be communicated to the MTA via any protocol agreed on between the\n   sender's mail composer (user agent) and the MTA.  The local MTA can\n   then either relay the message, or issue appropriate delivery status\n   notifications.  However, if such requests are transmitted within the\n   message itself (for example in the message headers), the requests\n   MUST be removed from the message before it is transmitted via SMTP.\n\n   For messages gatewayed from non-SMTP sources and further relayed by\n   SMTP, the gateway SHOULD, using the SMTP extensions described here,\n   attempt to provide the delivery reporting conditions expected by the\n   source mail environment.  If appropriate, any DSNs returned to the\n   source environment SHOULD be translated into the format expected in\n   that environment.\n\n5.4 Implementation limits\n\n   A conforming MTA MUST accept ESMTP parameters of at least the\n   following sizes:\n\n   (a)  ENVID parameter: 100 characters.\n\n   (b)  NOTIFY parameter: 28 characters.\n\n   (c)  ORCPT parameter: 500 characters.\n\n   (d)  RET parameter: 8 characters.\n\n   The maximum sizes for the ENVID and ORCPT parameters are intended to\n   be adequate for the transmission of \"foreign\" envelope identifier and\n   original recipient addresses.  However, user agents which use SMTP as\n   a message submission protocol SHOULD NOT generate ENVID parameters\n   which are longer than 38 characters in length.\n\n   A conforming MTA MUST be able to accept SMTP command-lines which are\n   at least 1036 characters long (530 characters for the ORCPT and\n   NOTIFY parameters of the RCPT command, in addition to the 512\n\n\n\nMoore                       Standards Track                    [Page 19]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   characters required by [1]).  If other SMTP extensions are supported\n   by the MTA, the MTA MUST be able to accept a command-line large\n   enough for each SMTP command and any combination of ESMTP parameters\n   which may be used with that command.\n\n6. Format of delivery notifications\n\n   The format of Delivery Status Notifications is defined in [3], which\n   uses the framework defined in [5].  Delivery Status Notifications are\n   to be returned to the sender of the original message as outlined\n   below.\n\n6.1 SMTP Envelope to be used with Delivery Status Notifications\n\n   The DSN sender address (in the SMTP MAIL command) MUST be a null\n   reverse-path (\"<>\"), as required by section 5.3.3 of [11].  The DSN\n   recipient address (in the RCPT command) is copied from the MAIL\n   command which accompanied the message for which the DSN is being\n   issued.  When transmitting a DSN via SMTP, the RET parameter MUST NOT\n   be used.  The NOTIFY parameter MAY be used, but its value MUST be\n   NEVER.  The ENVID parameter (with a newly generated envelope-id)\n   and/or ORCPT parameter MAY be used.\n\n6.2 Contents of the DSN\n\n   A DSN is transmitted as a MIME message with a top-level content-type\n   of multipart/report (as defined in [3]).\n\n   The multipart/report content-type may be used for any of several\n   kinds of reports generated by the mail system.  When multipart/report\n   is used to convey a DSN, the report-type parameter of the\n   multipart/report content-type is \"delivery-status\".\n\n   As described in [5], the first component of a multipart/report\n   content-type is a human readable explanation of the report.  For a\n   DSN, the second component of the multipart/report is of content-type\n   message/delivery-status (defined in [3]).  The third component of the\n   multipart/report consists of the original message or some portion\n   thereof.  When the value of the RET parameter is FULL, the full\n   message SHOULD be returned for any DSN which conveys notification of\n   delivery failure.  (However, if the length of the message is greater\n   than some implementation-specified length, the MTA MAY return only\n   the headers even if the RET parameter specified FULL.)  If a DSN\n   contains no notifications of delivery failure, the MTA SHOULD return\n   only the headers.\n\n   The third component must have an appropriate content-type label.\n   Issues concerning selection of the content-type are discussed in [5].\n\n\n\nMoore                       Standards Track                    [Page 20]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n6.3 Message/delivery-status fields\n\n   The message/delivery-status content-type defines a number of fields,\n   with general specifications for their contents.  The following\n   requirements for any DSNs generated in response to a message received\n   by the SMTP protocol by a conforming SMTP server, are in addition to\n   the requirements defined in [3] for the message/delivery-status type.\n\n   When generating a DSN for a message which was received via the SMTP\n   protocol, a conforming MTA will generate the following fields of the\n   message/delivery-status body part:\n\n   (a)  if an ENVID parameter was present on the MAIL command, an\n        Original-Envelope-ID field MUST be supplied, and the value\n        associated with the ENVID parameter must appear in that field.\n        If the message was received via SMTP with no ENVID parameter,\n        the Original-Envelope-ID field MUST NOT be supplied.\n\n        Since the ENVID parameter is encoded as xtext, but the\n        Original-Envelope-ID header is NOT encoded as xtext, the MTA\n        must decode the xtext encoding when copying the ENVID value to\n        the Original-Envelope-ID field.\n\n   (b)  The Reporting-MTA field MUST be supplied.  If Reporting MTA can\n        determine its fully-qualified Internet domain name, the MTA-\n        name-type subfield MUST be \"dns\", and the field MUST contain the\n        fully-qualified domain name of the Reporting MTA.  If the\n        fully-qualified Internet domain name of the Reporting MTA is not\n        known (for example, for an SMTP server which is not directly\n        connected to the Internet), the Reporting-MTA field may contain\n        any string identifying the MTA, however, in this case the MTA-\n        name-type subfield MUST NOT be \"dns\".  A MTA-name-type subfield\n        value of \"x-local-hostname\" is suggested.\n\n   (c)  Other per-message fields as defined in [3] MAY be supplied as\n        appropriate.\n\n   (d)  If the ORCPT parameter was provided for this recipient, the\n        Original-Recipient field MUST be supplied, with its value taken\n        from the ORCPT parameter.  If no ORCPT parameter was provided\n        for this recipient, the Original-Recipient field MUST NOT\n        appear.\n\n   (e)  The Final-Recipient field MUST be supplied.  It MUST contain the\n        recipient address from the message envelope.  If the message was\n        received via SMTP, the address-type will be \"rfc822\".\n\n   (f)  The Action field MUST be supplied.\n\n\n\nMoore                       Standards Track                    [Page 21]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   (g)  The Status field MUST be supplied, using a status-code from [6].\n        If there is no specific code which suitably describes a delivery\n        failure, either 4.0.0 (temporary failure), or 5.0.0 (permanent\n        failure) MUST be used.\n\n   (h)  For DSNs resulting from attempts to relay a message to one or\n        more recipients via SMTP, the Remote-MTA field MUST be supplied\n        for each of those recipients.  The mta-name-type subfields of\n        those Remote-MTA fields will be \"dns\".\n\n   (i)  For DSNs resulting from attempts to relay a message to one or\n        more recipients via SMTP, the Diagnostic-Code MUST be supplied\n        for each of those recipients.  The diagnostic-type subfield will\n        be \"smtp\".  See section 9.2 of this document for a description\n        of the \"smtp\" diagnostic-code.\n\n   (j)  For DSNs resulting from attempts to relay a message to one or\n        more recipients via SMTP, an SMTP-Remote-Recipient extension\n        field MAY be supplied for each recipient, which contains the\n        address of that recipient which was presented to the remote SMTP\n        server.\n\n   (k)  Other per-recipient fields defined in [3] MAY appear, as\n        appropriate.\n\n7. Acknowledgments\n\n   The author wishes to thank Eric Allman, Harald Alvestrand, Jim\n   Conklin, Bryan Costales, Peter Cowen, Dave Crocker, Roger Fajman, Ned\n   Freed, Marko Kaittola, Steve Kille, John Klensin, Anastasios\n   Kotsikonas, John Gardiner Myers, Julian Onions, Jacob Palme, Marshall\n   Rose, Greg Vaudreuil, and Klaus Weide for their suggestions for\n   improvement of this document.\n\n8. Security Considerations\n\n   The SMTP extension described in this document does not change the\n   fundamental nature of the SMTP service and hence does not create any\n   new security exposures in and of itself.  It necessarily adds\n   complexity to implementations, however, and with added complexity\n   comes an increased risk of implementation errors.\n\n   Previous ad-hoc delivery notification mechanisms sometimes produced a\n   storm of receipts due to unanticipated interactions with mailing list\n   expansion software.  In this specification notification of successful\n   delivery is carefully designed so, if properly implemented, it cannot\n   interact with a list expander in this way.\n\n\n\n\nMoore                       Standards Track                    [Page 22]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   The security considerations section in [5] describes security issues\n   associated with multipart/report objects in general and the security\n   considerations section in [3] describes security issues with DSNs in\n   particular.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 23]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n9. Appendix - Type-Name Definitions\n\n   The following type names are defined for use in DSN fields generated\n   by conforming SMTP-based MTAs:\n\n9.1 \"rfc822\" address-type\n\n   The \"rfc822\" address-type is to be used when reporting Internet\n   electronic mail address in the Original-Recipient and Final-Recipient\n   DSN fields.\n\n   (a)  address-type name: rfc822\n\n   (b)  syntax for mailbox addresses\n\n        RFC822 mailbox addresses are generally expected to be of the\n        form\n\n                [route] addr-spec\n\n        where \"route\" and \"addr-spec\" are defined in [2], and the\n        \"domain\" portions of both \"route\" and \"addr-spec\" are fully-\n        qualified domain names that are registered in the DNS.  However,\n        an MTA MUST NOT modify an address obtained from the message\n        envelope to force it to conform to syntax rules.\n\n   (c)  If addresses of this type are not composed entirely of graphic\n        characters from the US-ASCII repertoire, a specification for how\n        they are to be encoded as graphic US-ASCII characters in a DSN\n        Original-Recipient or Final-Recipient DSN field.\n\n        RFC822 addresses consist entirely of graphic characters from the\n        US-ASCII repertoire, so no translation is necessary.\n\n9.2 \"smtp\" diagnostic-type\n\n   The \"smtp\" diagnostic-type is to be used when reporting SMTP reply-\n   codes in Diagnostic-Code DSN fields.\n\n   (a)  diagnostic-type name: SMTP\n\n   (b)  A description of the syntax to be used for expressing diagnostic\n        codes of this type as graphic characters from the US-ASCII\n        repertoire.\n\n        An SMTP diagnostic-code is of the form\n\n                *( 3*DIGIT \"-\" *text ) 3*DIGIT SPACE *text\n\n\n\nMoore                       Standards Track                    [Page 24]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n        For a single-line SMTP reply to an SMTP command, the\n        diagnostic-code SHOULD be an exact transcription of the reply.\n        For multi-line SMTP replies, it is necessary to insert a SPACE\n        before each line after the first.  For example, an SMTP reply\n        of:\n\n                550-mailbox unavailable\n                550 user has moved with no forwarding address\n\n        could appear as follows in a Diagnostic-Code DSN field:\n\n                Diagnostic-Code: smtp ; 550-mailbox unavailable\n                 550 user has moved with no forwarding address\n\n\n   (c)  A list of valid diagnostic codes of this type and the meaning of\n        each code.\n\n        SMTP reply-codes are currently defined in [1] and [11].\n        Additional codes may be defined by other RFCs.\n\n9.3 \"dns\" MTA-name-type\n\n   The \"dns\" MTA-name-type should be used in the Reporting-MTA field.\n   An MTA-name of type \"dns\" is a fully-qualified domain name.  The name\n   must be registered in the DNS, and the address Postmaster@{mta-name}\n   must be valid.\n\n   (a)  MTA-name-type name: dns\n\n   (b)  A description of the syntax of MTA names of this type, using\n        BNF, regular expressions, ASN.1, or other non-ambiguous\n        language.\n\n        MTA names of type \"dns\" SHOULD be valid Internet domain names.\n        If such domain names are not available, a domain-literal\n        containing the internet protocol address is acceptable.  Such\n        domain names generally conform to the following syntax:\n\n                domain = real-domain / domain-literal\n\n                real-domain = sub-domain *(\".\" sub-domain)\n\n                sub-domain = atom\n\n                domain-literal = \"[\" 1*3DIGIT 3(\".\" 1*3DIGIT) \"]\"\n\n        where \"atom\" and \"DIGIT\" are defined in [2].\n\n\n\nMoore                       Standards Track                    [Page 25]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n   (c)  If MTA names of this type do not consist entirely of graphic\n        characters from the US-ASCII repertoire, a specification for how\n        an MTA name of this type should be expressed as a sequence of\n        graphic US-ASCII characters.\n\n        MTA names of type \"dns\" consist entirely of graphic US-ASCII\n        characters, so no translation is needed.\n\n10. Appendix - Example\n\n   This example traces the flow of a single message addressed to\n   multiple recipients.  The message is sent by Alice@Example.ORG to\n   Bob@Example.COM, Carol@Ivory.EDU, Dana@Ivory.EDU, Eric@Bombs.AF.MIL,\n   Fred@Bombs.AF.MIL, and George@Tax-ME.GOV, with a variety of per-\n   recipient options.  The message is successfully delivered to Bob,\n   Dana (via a gateway), Eric, and Fred.  Delivery fails for Carol and\n   George.\n\n   NOTE: Formatting rules for RFCs require that no line be longer than\n   72 characters.  Therefore, in the following examples, some SMTP\n   commands longer than 72 characters are printed on two lines, with the\n   first line ending in \"\\\".  In an actual SMTP transaction, such a\n   command would be sent as a single line (i.e., with no embedded\n   CRLFs), and without the \"\\\" character that appears in these examples.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 26]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.1 Submission\n\n   Alice's user agent sends the message to the SMTP server at\n   Example.ORG.  Note that while this example uses SMTP as a mail\n   submission protocol, other protocols could also be used.\n\n      <<< 220 Example.ORG SMTP server here\n      >>> EHLO Example.ORG\n      <<< 250-Example.ORG\n      <<< 250-DSN\n      <<< 250-EXPN\n      <<< 250 SIZE\n      >>> MAIL FROM:<Alice@Example.ORG> RET=HDRS ENVID=QQ314159\n      <<< 250 <Alice@Example.ORG> sender ok\n      >>> RCPT TO:<Bob@Example.COM> NOTIFY=SUCCESS \\\n          ORCPT=rfc822;Bob@Example.COM\n      <<< 250 <Bob@Example.COM> recipient ok\n      >>> RCPT TO:<Carol@Ivory.EDU> NOTIFY=FAILURE \\\n          ORCPT=rfc822;Carol@Ivory.EDU\n      <<< 250 <Carol@Ivory.EDU> recipient ok\n      >>> RCPT TO:<Dana@Ivory.EDU> NOTIFY=SUCCESS,FAILURE \\\n          ORCPT=rfc822;Dana@Ivory.EDU\n      <<< 250 <Dana@Ivory.EDU> recipient ok\n      >>> RCPT TO:<Eric@Bombs.AF.MIL> NOTIFY=FAILURE \\\n          ORCPT=rfc822;Eric@Bombs.AF.MIL\n      <<< 250 <Eric@Bombs.AF.MIL> recipient ok\n      >>> RCPT TO:<Fred@Bombs.AF.MIL> NOTIFY=NEVER\n      <<< 250 <Fred@Bombs.AF.MIL> recipient ok\n      >>> RCPT TO:<George@Tax-ME.GOV> NOTIFY=FAILURE \\\n          ORCPT=rfc822;George@Tax-ME.GOV\n      <<< 250 <George@Tax-ME.GOV> recipient ok\n      >>> DATA\n      <<< 354 okay, send message\n      >>> (message goes here)\n      >>> .\n      <<< 250 message accepted\n      >>> QUIT\n      <<< 221 goodbye\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 27]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.2 Relay to Example.COM\n\n   The SMTP at Example.ORG then relays the message to Example.COM.  (For\n   the purpose of this example, mail.Example.COM is the primary mail\n   exchanger for Example.COM).\n\n      <<< 220 mail.Example.COM says hello\n      >>> EHLO Example.ORG\n      <<< 250-mail.Example.COM\n      <<< 250 DSN\n      >>> MAIL FROM:<Alice@Example.ORG> RET=HDRS ENVID=QQ314159\n      <<< 250 sender okay\n      >>> RCPT TO:<Bob@Example.COM> NOTIFY=SUCCESS \\\n          ORCPT=rfc822;Bob@Example.COM\n      <<< 250 recipient okay\n      >>> DATA\n      <<< 354 send message\n      >>> (message goes here)\n      >>> .\n      <<< 250 message received\n      >>> QUIT\n      <<< 221 bcnu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 28]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.3 Relay to Ivory.EDU\n\n   The SMTP at Example.ORG relays the message to Ivory.EDU, which (as it\n   happens) is a gateway to a LAN-based mail system that accepts SMTP\n   mail and supports the DSN extension.\n\n      <<< 220 Ivory.EDU gateway to FooMail(tm) here\n      >>> EHLO Example.ORG\n      <<< 250-Ivory.EDU\n      <<< 250 DSN\n      >>> MAIL FROM:<Alice@Example.ORG> RET=HDRS ENVID=QQ314159\n      <<< 250 ok\n      >>> RCPT TO:<Carol@Ivory.EDU> NOTIFY=FAILURE \\\n          ORCPT=rfc822;Carol@Ivory.EDU\n      <<< 550 error - no such recipient\n      >>> RCPT TO:<Dana@Ivory.EDU> NOTIFY=SUCCESS,FAILURE \\\n          ORCPT=rfc822;Dana@Ivory.EDU\n      <<< 250 recipient ok\n      >>> DATA\n      <<< 354 send message, end with '.'\n      >>> (message goes here)\n      >>> .\n      <<< 250 message received\n      >>> QUIT\n      <<< 221 bye\n\n   Note that since the Ivory.EDU refused to accept mail for\n   Carol@Ivory.EDU, and the sender specified NOTIFY=FAILURE, the\n   sender-SMTP (in this case Example.ORG) must generate a DSN.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 29]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.4 Relay to Bombs.AF.MIL\n\n   The SMTP at Example.ORG relays the message to Bombs.AF.MIL, which\n   does not support the SMTP extension.  Because the sender specified\n   NOTIFY=NEVER for recipient Fred@Bombs.AF.MIL, the SMTP at Example.ORG\n   chooses to send the message for that recipient in a separate\n   transaction with a reverse-path of <>.\n\n      <<< 220-Bombs.AF.MIL reporting for duty.\n      <<< 220 Electronic mail is to be used for official business only.\n      >>> EHLO Example.ORG\n      <<< 502 command not implemented\n      >>> RSET\n      <<< 250 reset\n      >>> HELO Example.ORG\n      <<< 250 Bombs.AF.MIL\n      >>> MAIL FROM:<Alice@Example.ORG>\n      <<< 250 ok\n      >>> RCPT TO:<Eric@Bombs.AF.MIL>\n      <<< 250 ok\n      >>> DATA\n      <<< 354 send message\n      >>> (message goes here)\n      >>> .\n      <<< 250 message accepted\n      >>> MAIL FROM:<>\n      <<< 250 ok\n      >>> RCPT TO:<Fred@Bombs.AF.MIL>\n      <<< 250 ok\n      >>> DATA\n      <<< 354 send message\n      >>> (message goes here)\n      >>> .\n      <<< 250 message accepted\n      >>> QUIT\n      <<< 221 Bombs.AF.MIL closing connection\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 30]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.5 Forward from George@Tax-ME.GOV to Sam@Boondoggle.GOV\n\n   The SMTP at Example.ORG relays the message to Tax-ME.GOV.  (this step\n   is not shown).  MTA Tax-ME.GOV then forwards the message to\n   Sam@Boondoggle.GOV (shown below).  Both Tax-ME.GOV and Example.ORG\n   support the SMTP DSN extension.  Note that RET, ENVID, and ORCPT all\n   retain their original values.\n\n      <<< 220 BoonDoggle.GOV says hello\n      >>> EHLO Example.ORG\n      <<< 250-mail.Example.COM\n      <<< 250 DSN\n      >>> MAIL FROM:<Alice@Example.ORG> RET=HDRS ENVID=QQ314159\n      <<< 250 sender okay\n      >>> RCPT TO:<Sam@Boondoggle.GOV> NOTIFY=SUCCESS \\\n          ORCPT=rfc822;George@Tax-ME.GOV\n      <<< 250 recipient okay\n      >>> DATA\n      <<< 354 send message\n      >>> (message goes here)\n      >>> .\n      <<< 250 message received\n      >>> QUIT\n      <<< 221 bcnu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 31]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.6 \"Delivered\" DSN for Bob@Example.COM\n\n   MTA mail.Example.COM successfully delivers the message to\n   Bob@Example.COM.  Because the sender specified NOTIFY=SUCCESS,\n   mail.Example.COM issues the following DSN, and sends it to\n   Alice@Example.ORG.\n\n      To: Alice@Example.ORG\n      From: postmaster@mail.Example.COM\n      Subject: Delivery Notification (success) for Bob@Example.COM\n      Content-Type: multipart/report; report-type=delivery-status;\n          boundary=abcde\n      MIME-Version: 1.0\n\n      --abcde\n      Content-type: text/plain; charset=us-ascii\n\n      Your message (id QQ314159) was successfully delivered to\n      Bob@Example.COM.\n\n      --abcde\n      Content-type: message/delivery-status\n\n      Reporting-MTA: dns; mail.Example.COM\n      Original-Envelope-ID: QQ314159\n\n      Original-Recipient: rfc822;Bob@Example.COM\n      Final-Recipient: rfc822;Bob@Example.COM\n      Action: delivered\n      Status: 2.0.0\n\n      --abcde\n      Content-type: message/rfc822\n\n      (headers of returned message go here)\n\n      --abcde--\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 32]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.7 Failed DSN for Carol@Ivory.EDU\n\n   Because delivery to Carol failed and the sender specified\n   NOTIFY=FAILURE for Carol@Ivory.EDU, MTA Example.ORG (the SMTP client\n   to which the failure was reported via SMTP) issues the following DSN.\n\n      To: Alice@Example.ORG\n      From: postmaster@Example.ORG\n      Subject: Delivery Notification (failure) for Carol@Ivory.EDU\n      Content-Type: multipart/report; report-type=delivery-status;\n                    boundary=bcdef\n      MIME-Version: 1.0\n\n      --bcdef\n      Content-type: text/plain; charset=us-ascii\n\n      Your message (id QQ314159) could not be delivered to\n      Carol@Ivory.EDU.\n\n      A transcript of the session follows:\n\n      (while talking to Ivory.EDU)\n      >>> RCPT TO:<Carol@Ivory.EDU> NOTIFY=FAILURE\n      <<< 550 error - no such recipient\n\n      --bcdef\n      Content-type: message/delivery-status\n\n      Reporting-MTA: dns; Example.ORG\n      Original-Envelope-ID: QQ314159\n\n      Original-Recipient: rfc822;Carol@Ivory.EDU\n      Final-Recipient: rfc822;Carol@Ivory.EDU\n      SMTP-Remote-Recipient: Carol@Ivory.EDU\n      Diagnostic-Code: smtp; 550 error - no such recipient\n      Action: failed\n      Status: 5.0.0\n\n      --bcdef\n      Content-type: message/rfc822\n\n      (headers of returned message go here)\n\n      --bcdef--\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 33]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.8 Relayed DSN For Dana@Ivory.EDU\n\n   Although the mail gateway Ivory.EDU supports the DSN SMTP extension,\n   the LAN mail system attached to its other side does not generate\n   positive delivery confirmations.  So Ivory.EDU issues a \"relayed\"\n   DSN:\n\n      To: Alice@Example.ORG\n      From: postmaster@Ivory.EDU\n      Subject: mail relayed for Dana@Ivory.EDU\n      Content-Type: multipart/report; report-type=delivery-status;\n          boundary=cdefg\n      MIME-Version: 1.0\n\n      --cdefg\n      Content-type: text/plain; charset=us-ascii\n\n      Your message (addressed to Dana@Ivory.EDU) was successfully\n      relayed to:\n\n      ymail!Dana\n\n      by the FooMail gateway at Ivory.EDU.\n\n      Unfortunately, the remote mail system does not support\n      confirmation of actual delivery.  Unless delivery to ymail!Dana\n      fails, this will be the only Delivery Status Notification sent.\n\n      --cdefg\n      Content-type: message/delivery-status\n\n      Reporting-MTA: dns; Ivory.EDU\n      Original-Envelope-ID: QQ314159\n\n      Original-Recipient: rfc822;Dana@Ivory.EDU\n      Final-Recipient: rfc822;Dana@Ivory.EDU\n      Action: relayed\n      Status: 2.0.0\n\n      --cdefg\n      Content-type: message/rfc822\n\n      (headers of returned message go here)\n\n      --cdefg--\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 34]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n10.9 Failure notification for Sam@Boondoggle.GOV\n\n   The message originally addressed to George@Tax-ME.GOV was forwarded\n   to Sam@Boondoggle.GOV, but the MTA for Boondoggle.GOV was unable to\n   deliver the message due to a lack of disk space in Sam's mailbox.\n   After trying for several days, Boondoggle.GOV returned the following\n   DSN:\n\n      To: Alice@Example.ORG\n      From: Postmaster@Boondoggle.GOV\n      Subject: Delivery failure for Sam@Boondoggle.GOV\n      Content-Type: multipart/report; report-type=delivery-status;\n                    boundary=defgh\n      MIME-Version: 1.0\n\n      --defgh\n      Your message, originally addressed to George@Tax-ME.GOV, and\n      forwarded from there to Sam@Boondoggle.GOV could not be delivered,\n      for the following reason:\n\n      write error to mailbox, disk quota exceeded\n\n      --defgh\n      Content-type: message/delivery-status\n\n      Reporting-MTA: Boondoggle.GOV\n      Original-Envelope-ID: QQ314159\n\n      Original-Recipient: rfc822;George@Tax-ME.GOV\n      Final-Recipient: rfc822;Sam@Boondoggle.GOV\n      Action: failed\n      Status: 4.2.2 (disk quota exceeded)\n\n      --defgh\n      Content-type: message/rfc822\n\n      (headers of returned message go here)\n\n      --defgh--\n\n11. Appendix - Changes since RFC 1891\n\n      -    updated author's address\n\n      -    In examples, changed Pure-Heart.ORG and Big-Bucks.COM to\n           Example.ORG and Example.COM, respectively.  Since publication\n           of RFC 1891, the former two domains have been registered.\n\n\n\n\nMoore                       Standards Track                    [Page 35]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n      -    Clarified that ENVID and ORCPT parameters must consist\n           entirely of US-ASCII characters prior to encoding as xtext.\n\n      -    A Security Considerations section was added.\n\n12. References\n\n12.1 Normative References\n\n   [1]  Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC 821,\n        August 1982.\n\n   [2]  Crocker, D., \"Standard for the format of ARPA Internet Text\n        Messages\", STD 11, RFC 822, August 1982.\n\n   [3]  Moore, K., and G. Vaudreuil, \"An Extensible Message Format for\n        Delivery Status Notifications\", RFC 3464, January 2003.\n\n   [4]  Coded Character Set - 7-Bit American Standard Code for\n        Information Interchange, ANSI X3.4-1986.\n\n   [5]  Vaudreuil, G., \"The Multipart/Report Content Type for the\n        Reporting of Mail System Administrative Messages\", RFC 3462,\n        January 2003.\n\n   [6]  Vaudreuil, G., \"Enhanced Mail System Status Codes\", RFC 3463,\n        January 2003.\n\n   [7]  Bradner, S., \"Key words for use in RFCs to Indicate Requirement\n        Levels\", BCP 14, RFC 2119, March 1997.\n\n12.2 Informative References\n\n   [8]  Westine, A. and J. Postel, \"Problems with the Maintenance of\n        Large Mailing Lists.\", RFC 1211, March 1991.\n\n   [9]  Crispin, M., \"Internet Message Access Protocol - Version 4rev1\",\n        RFC 2060, December 1996.\n\n   [10] Myers, J. and M. Rose, \"Post Office Protocol - Version 3\", STD\n        53, RFC 1939, May 1996.\n\n   [11] Braden, R., Ed., \"Requirements for Internet Hosts - Application\n        and Support\", STD 3, RFC 1123, October 1989.\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 36]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n13. Author's Address\n\n   Keith Moore\n   University of Tennessee\n   1122 Volunteer Blvd, Suite 203\n   Knoxville, TN 37996-3450\n   USA\n\n   EMail: moore@cs.utk.edu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 37]\n\f\nRFC 3461                   SMTP DSN Extension               January 2003\n\n\n14. Full Copyright Statement\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMoore                       Standards Track                    [Page 38]\n\f\n"
  },
  {
    "path": "rfc/rfc3501.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         M. Crispin\nRequest for Comments: 3501                      University of Washington\nObsoletes: 2060                                               March 2003\nCategory: Standards Track\n\n\n            INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\nAbstract\n\n   The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)\n   allows a client to access and manipulate electronic mail messages on\n   a server.  IMAP4rev1 permits manipulation of mailboxes (remote\n   message folders) in a way that is functionally equivalent to local\n   folders.  IMAP4rev1 also provides the capability for an offline\n   client to resynchronize with the server.\n\n   IMAP4rev1 includes operations for creating, deleting, and renaming\n   mailboxes, checking for new messages, permanently removing messages,\n   setting and clearing flags, RFC 2822 and RFC 2045 parsing, searching,\n   and selective fetching of message attributes, texts, and portions\n   thereof.  Messages in IMAP4rev1 are accessed by the use of numbers.\n   These numbers are either message sequence numbers or unique\n   identifiers.\n\n   IMAP4rev1 supports a single server.  A mechanism for accessing\n   configuration information to support multiple IMAP4rev1 servers is\n   discussed in RFC 2244.\n\n   IMAP4rev1 does not specify a means of posting mail; this function is\n   handled by a mail transfer protocol such as RFC 2821.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 1]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nTable of Contents\n\n   IMAP4rev1 Protocol Specification ................................  4\n   1.      How to Read This Document ...............................  4\n   1.1.    Organization of This Document ...........................  4\n   1.2.    Conventions Used in This Document .......................  4\n   1.3.    Special Notes to Implementors ...........................  5\n   2.      Protocol Overview .......................................  6\n   2.1.    Link Level ..............................................  6\n   2.2.    Commands and Responses ..................................  6\n   2.2.1.  Client Protocol Sender and Server Protocol Receiver .....  6\n   2.2.2.  Server Protocol Sender and Client Protocol Receiver .....  7\n   2.3.    Message Attributes ......................................  8\n   2.3.1.  Message Numbers .........................................  8\n   2.3.1.1.        Unique Identifier (UID) Message Attribute .......  8\n   2.3.1.2.        Message Sequence Number Message Attribute ....... 10\n   2.3.2.  Flags Message Attribute ................................. 11\n   2.3.3.  Internal Date Message Attribute ......................... 12\n   2.3.4.  [RFC-2822] Size Message Attribute ....................... 12\n   2.3.5.  Envelope Structure Message Attribute .................... 12\n   2.3.6.  Body Structure Message Attribute ........................ 12\n   2.4.    Message Texts ........................................... 13\n   3.      State and Flow Diagram .................................. 13\n   3.1.    Not Authenticated State ................................. 13\n   3.2.    Authenticated State ..................................... 13\n   3.3.    Selected State .......................................... 13\n   3.4.    Logout State ............................................ 14\n   4.      Data Formats ............................................ 16\n   4.1.    Atom .................................................... 16\n   4.2.    Number .................................................. 16\n   4.3.    String .................................................. 16\n   4.3.1.  8-bit and Binary Strings ................................ 17\n   4.4.    Parenthesized List ...................................... 17\n   4.5.    NIL ..................................................... 17\n   5.      Operational Considerations .............................. 18\n   5.1.    Mailbox Naming .......................................... 18\n   5.1.1.  Mailbox Hierarchy Naming ................................ 19\n   5.1.2.  Mailbox Namespace Naming Convention ..................... 19\n   5.1.3.  Mailbox International Naming Convention ................. 19\n   5.2.    Mailbox Size and Message Status Updates ................. 21\n   5.3.    Response when no Command in Progress .................... 21\n   5.4.    Autologout Timer ........................................ 22\n   5.5.    Multiple Commands in Progress ........................... 22\n   6.      Client Commands ........................................  23\n   6.1.    Client Commands - Any State ............................  24\n   6.1.1.  CAPABILITY Command .....................................  24\n   6.1.2.  NOOP Command ...........................................  25\n   6.1.3.  LOGOUT Command .........................................  26\n\n\n\nCrispin                     Standards Track                     [Page 2]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   6.2.    Client Commands - Not Authenticated State ..............  26\n   6.2.1.  STARTTLS Command .......................................  27\n   6.2.2.  AUTHENTICATE Command ...................................  28\n   6.2.3.  LOGIN Command ..........................................  30\n   6.3.    Client Commands - Authenticated State ..................  31\n   6.3.1.  SELECT Command .........................................  32\n   6.3.2.  EXAMINE Command ........................................  34\n   6.3.3.  CREATE Command .........................................  34\n   6.3.4.  DELETE Command .........................................  35\n   6.3.5.  RENAME Command .........................................  37\n   6.3.6.  SUBSCRIBE Command ......................................  39\n   6.3.7.  UNSUBSCRIBE Command ....................................  39\n   6.3.8.  LIST Command ...........................................  40\n   6.3.9.  LSUB Command ...........................................  43\n   6.3.10. STATUS Command .........................................  44\n   6.3.11. APPEND Command .........................................  46\n   6.4.    Client Commands - Selected State .......................  47\n   6.4.1.  CHECK Command ..........................................  47\n   6.4.2.  CLOSE Command ..........................................  48\n   6.4.3.  EXPUNGE Command ........................................  49\n   6.4.4.  SEARCH Command .........................................  49\n   6.4.5.  FETCH Command ..........................................  54\n   6.4.6.  STORE Command ..........................................  58\n   6.4.7.  COPY Command ...........................................  59\n   6.4.8.  UID Command ............................................  60\n   6.5.    Client Commands - Experimental/Expansion ...............  62\n   6.5.1.  X<atom> Command ........................................  62\n   7.      Server Responses .......................................  62\n   7.1.    Server Responses - Status Responses ....................  63\n   7.1.1.  OK Response ............................................  65\n   7.1.2.  NO Response ............................................  66\n   7.1.3.  BAD Response ...........................................  66\n   7.1.4.  PREAUTH Response .......................................  67\n   7.1.5.  BYE Response ...........................................  67\n   7.2.    Server Responses - Server and Mailbox Status ...........  68\n   7.2.1.  CAPABILITY Response ....................................  68\n   7.2.2.  LIST Response ..........................................  69\n   7.2.3.  LSUB Response ..........................................  70\n   7.2.4   STATUS Response ........................................  70\n   7.2.5.  SEARCH Response ........................................  71\n   7.2.6.  FLAGS Response .........................................  71\n   7.3.    Server Responses - Mailbox Size ........................  71\n   7.3.1.  EXISTS Response ........................................  71\n   7.3.2.  RECENT Response ........................................  72\n   7.4.    Server Responses - Message Status ......................  72\n   7.4.1.  EXPUNGE Response .......................................  72\n   7.4.2.  FETCH Response .........................................  73\n   7.5.    Server Responses - Command Continuation Request ........  79\n\n\n\nCrispin                     Standards Track                     [Page 3]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   8.      Sample IMAP4rev1 connection ............................  80\n   9.      Formal Syntax ..........................................  81\n   10.     Author's Note ..........................................  92\n   11.     Security Considerations ................................  92\n   11.1.   STARTTLS Security Considerations .......................  92\n   11.2.   Other Security Considerations ..........................  93\n   12.     IANA Considerations ....................................  94\n   Appendices .....................................................  95\n   A.      References .............................................  95\n   B.      Changes from RFC 2060 ..................................  97\n   C.      Key Word Index ......................................... 103\n   Author's Address ............................................... 107\n   Full Copyright Statement ....................................... 108\n\nIMAP4rev1 Protocol Specification\n\n1.      How to Read This Document\n\n1.1.    Organization of This Document\n\n   This document is written from the point of view of the implementor of\n   an IMAP4rev1 client or server.  Beyond the protocol overview in\n   section 2, it is not optimized for someone trying to understand the\n   operation of the protocol.  The material in sections 3 through 5\n   provides the general context and definitions with which IMAP4rev1\n   operates.\n\n   Sections 6, 7, and 9 describe the IMAP commands, responses, and\n   syntax, respectively.  The relationships among these are such that it\n   is almost impossible to understand any of them separately.  In\n   particular, do not attempt to deduce command syntax from the command\n   section alone; instead refer to the Formal Syntax section.\n\n1.2.    Conventions Used in This Document\n\n   \"Conventions\" are basic principles or procedures.  Document\n   conventions are noted in this section.\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"MAY\", and \"OPTIONAL\" in this document are to\n   be interpreted as described in [KEYWORDS].\n\n   The word \"can\" (not \"may\") is used to refer to a possible\n   circumstance or situation, as opposed to an optional facility of the\n   protocol.\n\n\n\nCrispin                     Standards Track                     [Page 4]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   \"User\" is used to refer to a human user, whereas \"client\" refers to\n   the software being run by the user.\n\n   \"Connection\" refers to the entire sequence of client/server\n   interaction from the initial establishment of the network connection\n   until its termination.\n\n   \"Session\" refers to the sequence of client/server interaction from\n   the time that a mailbox is selected (SELECT or EXAMINE command) until\n   the time that selection ends (SELECT or EXAMINE of another mailbox,\n   CLOSE command, or connection termination).\n\n   Characters are 7-bit US-ASCII unless otherwise specified.  Other\n   character sets are indicated using a \"CHARSET\", as described in\n   [MIME-IMT] and defined in [CHARSET].  CHARSETs have important\n   additional semantics in addition to defining character set; refer to\n   these documents for more detail.\n\n   There are several protocol conventions in IMAP.  These refer to\n   aspects of the specification which are not strictly part of the IMAP\n   protocol, but reflect generally-accepted practice.  Implementations\n   need to be aware of these conventions, and avoid conflicts whether or\n   not they implement the convention.  For example, \"&\" may not be used\n   as a hierarchy delimiter since it conflicts with the Mailbox\n   International Naming Convention, and other uses of \"&\" in mailbox\n   names are impacted as well.\n\n1.3.    Special Notes to Implementors\n\n   Implementors of the IMAP protocol are strongly encouraged to read the\n   IMAP implementation recommendations document [IMAP-IMPLEMENTATION] in\n   conjunction with this document, to help understand the intricacies of\n   this protocol and how best to build an interoperable product.\n\n   IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and\n   unpublished IMAP2bis protocols.  IMAP4rev1 is largely compatible with\n   the IMAP4 protocol described in RFC 1730; the exception being in\n   certain facilities added in RFC 1730 that proved problematic and were\n   subsequently removed.  In the course of the evolution of IMAP4rev1,\n   some aspects in the earlier protocols have become obsolete.  Obsolete\n   commands, responses, and data formats which an IMAP4rev1\n   implementation can encounter when used with an earlier implementation\n   are described in [IMAP-OBSOLETE].\n\n   Other compatibility issues with IMAP2bis, the most common variant of\n   the earlier protocol, are discussed in [IMAP-COMPAT].  A full\n   discussion of compatibility issues with rare (and presumed extinct)\n\n\n\n\nCrispin                     Standards Track                     [Page 5]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is\n   primarily of historical interest.\n\n   IMAP was originally developed for the older [RFC-822] standard, and\n   as a consequence several fetch items in IMAP incorporate \"RFC822\" in\n   their name.  With the exception of RFC822.SIZE, there are more modern\n   replacements; for example, the modern version of RFC822.HEADER is\n   BODY.PEEK[HEADER].  In all cases, \"RFC822\" should be interpreted as a\n   reference to the updated [RFC-2822] standard.\n\n2.      Protocol Overview\n\n2.1.    Link Level\n\n   The IMAP4rev1 protocol assumes a reliable data stream such as that\n   provided by TCP.  When TCP is used, an IMAP4rev1 server listens on\n   port 143.\n\n2.2.    Commands and Responses\n\n   An IMAP4rev1 connection consists of the establishment of a\n   client/server network connection, an initial greeting from the\n   server, and client/server interactions.  These client/server\n   interactions consist of a client command, server data, and a server\n   completion result response.\n\n   All interactions transmitted by client and server are in the form of\n   lines, that is, strings that end with a CRLF.  The protocol receiver\n   of an IMAP4rev1 client or server is either reading a line, or is\n   reading a sequence of octets with a known count followed by a line.\n\n2.2.1.  Client Protocol Sender and Server Protocol Receiver\n\n   The client command begins an operation.  Each client command is\n   prefixed with an identifier (typically a short alphanumeric string,\n   e.g., A0001, A0002, etc.) called a \"tag\".  A different tag is\n   generated by the client for each command.\n\n   Clients MUST follow the syntax outlined in this specification\n   strictly.  It is a syntax error to send a command with missing or\n   extraneous spaces or arguments.\n\n   There are two cases in which a line from the client does not\n   represent a complete command.  In one case, a command argument is\n   quoted with an octet count (see the description of literal in String\n   under Data Formats); in the other case, the command arguments require\n   server feedback (see the AUTHENTICATE command).  In either case, the\n\n\n\n\nCrispin                     Standards Track                     [Page 6]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   server sends a command continuation request response if it is ready\n   for the octets (if appropriate) and the remainder of the command.\n   This response is prefixed with the token \"+\".\n\n        Note: If instead, the server detected an error in the\n        command, it sends a BAD completion response with a tag\n        matching the command (as described below) to reject the\n        command and prevent the client from sending any more of the\n        command.\n\n        It is also possible for the server to send a completion\n        response for some other command (if multiple commands are\n        in progress), or untagged data.  In either case, the\n        command continuation request is still pending; the client\n        takes the appropriate action for the response, and reads\n        another response from the server.  In all cases, the client\n        MUST send a complete command (including receiving all\n        command continuation request responses and command\n        continuations for the command) before initiating a new\n        command.\n\n   The protocol receiver of an IMAP4rev1 server reads a command line\n   from the client, parses the command and its arguments, and transmits\n   server data and a server command completion result response.\n\n2.2.2.  Server Protocol Sender and Client Protocol Receiver\n\n   Data transmitted by the server to the client and status responses\n   that do not indicate command completion are prefixed with the token\n   \"*\", and are called untagged responses.\n\n   Server data MAY be sent as a result of a client command, or MAY be\n   sent unilaterally by the server.  There is no syntactic difference\n   between server data that resulted from a specific command and server\n   data that were sent unilaterally.\n\n   The server completion result response indicates the success or\n   failure of the operation.  It is tagged with the same tag as the\n   client command which began the operation.  Thus, if more than one\n   command is in progress, the tag in a server completion response\n   identifies the command to which the response applies.  There are\n   three possible server completion responses: OK (indicating success),\n   NO (indicating failure), or BAD (indicating a protocol error such as\n   unrecognized command or command syntax error).\n\n   Servers SHOULD enforce the syntax outlined in this specification\n   strictly.  Any client command with a protocol syntax error, including\n   (but not limited to) missing or extraneous spaces or arguments,\n\n\n\nCrispin                     Standards Track                     [Page 7]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   SHOULD be rejected, and the client given a BAD server completion\n   response.\n\n   The protocol receiver of an IMAP4rev1 client reads a response line\n   from the server.  It then takes action on the response based upon the\n   first token of the response, which can be a tag, a \"*\", or a \"+\".\n\n   A client MUST be prepared to accept any server response at all times.\n   This includes server data that was not requested.  Server data SHOULD\n   be recorded, so that the client can reference its recorded copy\n   rather than sending a command to the server to request the data.  In\n   the case of certain server data, the data MUST be recorded.\n\n   This topic is discussed in greater detail in the Server Responses\n   section.\n\n2.3.    Message Attributes\n\n   In addition to message text, each message has several attributes\n   associated with it.  These attributes can be retrieved individually\n   or in conjunction with other attributes or message texts.\n\n2.3.1.  Message Numbers\n\n   Messages in IMAP4rev1 are accessed by one of two numbers; the unique\n   identifier or the message sequence number.\n\n\n2.3.1.1.        Unique Identifier (UID) Message Attribute\n\n   A 32-bit value assigned to each message, which when used with the\n   unique identifier validity value (see below) forms a 64-bit value\n   that MUST NOT refer to any other message in the mailbox or any\n   subsequent mailbox with the same name forever.  Unique identifiers\n   are assigned in a strictly ascending fashion in the mailbox; as each\n   message is added to the mailbox it is assigned a higher UID than the\n   message(s) which were added previously.  Unlike message sequence\n   numbers, unique identifiers are not necessarily contiguous.\n\n   The unique identifier of a message MUST NOT change during the\n   session, and SHOULD NOT change between sessions.  Any change of\n   unique identifiers between sessions MUST be detectable using the\n   UIDVALIDITY mechanism discussed below.  Persistent unique identifiers\n   are required for a client to resynchronize its state from a previous\n   session with the server (e.g., disconnected or offline access\n   clients); this is discussed further in [IMAP-DISC].\n\n\n\n\n\nCrispin                     Standards Track                     [Page 8]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Associated with every mailbox are two values which aid in unique\n   identifier handling: the next unique identifier value and the unique\n   identifier validity value.\n\n   The next unique identifier value is the predicted value that will be\n   assigned to a new message in the mailbox.  Unless the unique\n   identifier validity also changes (see below), the next unique\n   identifier value MUST have the following two characteristics.  First,\n   the next unique identifier value MUST NOT change unless new messages\n   are added to the mailbox; and second, the next unique identifier\n   value MUST change whenever new messages are added to the mailbox,\n   even if those new messages are subsequently expunged.\n\n        Note: The next unique identifier value is intended to\n        provide a means for a client to determine whether any\n        messages have been delivered to the mailbox since the\n        previous time it checked this value.  It is not intended to\n        provide any guarantee that any message will have this\n        unique identifier.  A client can only assume, at the time\n        that it obtains the next unique identifier value, that\n        messages arriving after that time will have a UID greater\n        than or equal to that value.\n\n   The unique identifier validity value is sent in a UIDVALIDITY\n   response code in an OK untagged response at mailbox selection time.\n   If unique identifiers from an earlier session fail to persist in this\n   session, the unique identifier validity value MUST be greater than\n   the one used in the earlier session.\n\n        Note: Ideally, unique identifiers SHOULD persist at all\n        times.  Although this specification recognizes that failure\n        to persist can be unavoidable in certain server\n        environments, it STRONGLY ENCOURAGES message store\n        implementation techniques that avoid this problem.  For\n        example:\n\n         1) Unique identifiers MUST be strictly ascending in the\n            mailbox at all times.  If the physical message store is\n            re-ordered by a non-IMAP agent, this requires that the\n            unique identifiers in the mailbox be regenerated, since\n            the former unique identifiers are no longer strictly\n            ascending as a result of the re-ordering.\n\n         2) If the message store has no mechanism to store unique\n            identifiers, it must regenerate unique identifiers at\n            each session, and each session must have a unique\n            UIDVALIDITY value.\n\n\n\n\nCrispin                     Standards Track                     [Page 9]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         3) If the mailbox is deleted and a new mailbox with the\n            same name is created at a later date, the server must\n            either keep track of unique identifiers from the\n            previous instance of the mailbox, or it must assign a\n            new UIDVALIDITY value to the new instance of the\n            mailbox.  A good UIDVALIDITY value to use in this case\n            is a 32-bit representation of the creation date/time of\n            the mailbox.  It is alright to use a constant such as\n            1, but only if it guaranteed that unique identifiers\n            will never be reused, even in the case of a mailbox\n            being deleted (or renamed) and a new mailbox by the\n            same name created at some future time.\n\n         4) The combination of mailbox name, UIDVALIDITY, and UID\n            must refer to a single immutable message on that server\n            forever.  In particular, the internal date, [RFC-2822]\n            size, envelope, body structure, and message texts\n            (RFC822, RFC822.HEADER, RFC822.TEXT, and all BODY[...]\n            fetch data items) must never change.  This does not\n            include message numbers, nor does it include attributes\n            that can be set by a STORE command (e.g., FLAGS).\n\n\n2.3.1.2.        Message Sequence Number Message Attribute\n\n   A relative position from 1 to the number of messages in the mailbox.\n   This position MUST be ordered by ascending unique identifier.  As\n   each new message is added, it is assigned a message sequence number\n   that is 1 higher than the number of messages in the mailbox before\n   that new message was added.\n\n   Message sequence numbers can be reassigned during the session.  For\n   example, when a message is permanently removed (expunged) from the\n   mailbox, the message sequence number for all subsequent messages is\n   decremented.  The number of messages in the mailbox is also\n   decremented.  Similarly, a new message can be assigned a message\n   sequence number that was once held by some other message prior to an\n   expunge.\n\n   In addition to accessing messages by relative position in the\n   mailbox, message sequence numbers can be used in mathematical\n   calculations.  For example, if an untagged \"11 EXISTS\" is received,\n   and previously an untagged \"8 EXISTS\" was received, three new\n   messages have arrived with message sequence numbers of 9, 10, and 11.\n   Another example, if message 287 in a 523 message mailbox has UID\n   12345, there are exactly 286 messages which have lesser UIDs and 236\n   messages which have greater UIDs.\n\n\n\n\nCrispin                     Standards Track                    [Page 10]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n2.3.2.  Flags Message Attribute\n\n   A list of zero or more named tokens associated with the message.  A\n   flag is set by its addition to this list, and is cleared by its\n   removal.  There are two types of flags in IMAP4rev1.  A flag of\n   either type can be permanent or session-only.\n\n   A system flag is a flag name that is pre-defined in this\n   specification.  All system flags begin with \"\\\".  Certain system\n   flags (\\Deleted and \\Seen) have special semantics described\n   elsewhere.  The currently-defined system flags are:\n\n        \\Seen\n           Message has been read\n\n        \\Answered\n           Message has been answered\n\n        \\Flagged\n           Message is \"flagged\" for urgent/special attention\n\n        \\Deleted\n           Message is \"deleted\" for removal by later EXPUNGE\n\n        \\Draft\n           Message has not completed composition (marked as a draft).\n\n        \\Recent\n           Message is \"recently\" arrived in this mailbox.  This session\n           is the first session to have been notified about this\n           message; if the session is read-write, subsequent sessions\n           will not see \\Recent set for this message.  This flag can not\n           be altered by the client.\n\n           If it is not possible to determine whether or not this\n           session is the first session to be notified about a message,\n           then that message SHOULD be considered recent.\n\n           If multiple connections have the same mailbox selected\n           simultaneously, it is undefined which of these connections\n           will see newly-arrived messages with \\Recent set and which\n           will see it without \\Recent set.\n\n   A keyword is defined by the server implementation.  Keywords do not\n   begin with \"\\\".  Servers MAY permit the client to define new keywords\n   in the mailbox (see the description of the PERMANENTFLAGS response\n   code for more information).\n\n\n\n\nCrispin                     Standards Track                    [Page 11]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   A flag can be permanent or session-only on a per-flag basis.\n   Permanent flags are those which the client can add or remove from the\n   message flags permanently; that is, concurrent and subsequent\n   sessions will see any change in permanent flags.  Changes to session\n   flags are valid only in that session.\n\n        Note: The \\Recent system flag is a special case of a\n        session flag.  \\Recent can not be used as an argument in a\n        STORE or APPEND command, and thus can not be changed at\n        all.\n\n2.3.3.  Internal Date Message Attribute\n\n   The internal date and time of the message on the server.  This\n   is not the date and time in the [RFC-2822] header, but rather a\n   date and time which reflects when the message was received.  In\n   the case of messages delivered via [SMTP], this SHOULD be the\n   date and time of final delivery of the message as defined by\n   [SMTP].  In the case of messages delivered by the IMAP4rev1 COPY\n   command, this SHOULD be the internal date and time of the source\n   message.  In the case of messages delivered by the IMAP4rev1\n   APPEND command, this SHOULD be the date and time as specified in\n   the APPEND command description.  All other cases are\n   implementation defined.\n\n2.3.4.  [RFC-2822] Size Message Attribute\n\n   The number of octets in the message, as expressed in [RFC-2822]\n   format.\n\n2.3.5.  Envelope Structure Message Attribute\n\n   A parsed representation of the [RFC-2822] header of the message.\n   Note that the IMAP Envelope structure is not the same as an\n   [SMTP] envelope.\n\n2.3.6.  Body Structure Message Attribute\n\n   A parsed representation of the [MIME-IMB] body structure\n   information of the message.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 12]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n2.4.    Message Texts\n\n   In addition to being able to fetch the full [RFC-2822] text of a\n   message, IMAP4rev1 permits the fetching of portions of the full\n   message text.  Specifically, it is possible to fetch the\n   [RFC-2822] message header, [RFC-2822] message body, a [MIME-IMB]\n   body part, or a [MIME-IMB] header.\n\n3.      State and Flow Diagram\n\n   Once the connection between client and server is established, an\n   IMAP4rev1 connection is in one of four states.  The initial\n   state is identified in the server greeting.  Most commands are\n   only valid in certain states.  It is a protocol error for the\n   client to attempt a command while the connection is in an\n   inappropriate state, and the server will respond with a BAD or\n   NO (depending upon server implementation) command completion\n   result.\n\n3.1.    Not Authenticated State\n\n   In the not authenticated state, the client MUST supply\n   authentication credentials before most commands will be\n   permitted.  This state is entered when a connection starts\n   unless the connection has been pre-authenticated.\n\n3.2.    Authenticated State\n\n   In the authenticated state, the client is authenticated and MUST\n   select a mailbox to access before commands that affect messages\n   will be permitted.  This state is entered when a\n   pre-authenticated connection starts, when acceptable\n   authentication credentials have been provided, after an error in\n   selecting a mailbox, or after a successful CLOSE command.\n\n3.3.    Selected State\n\n   In a selected state, a mailbox has been selected to access.\n   This state is entered when a mailbox has been successfully\n   selected.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 13]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n3.4.    Logout State\n\n   In the logout state, the connection is being terminated.  This\n   state can be entered as a result of a client request (via the\n   LOGOUT command) or by unilateral action on the part of either\n   the client or server.\n\n   If the client requests the logout state, the server MUST send an\n   untagged BYE response and a tagged OK response to the LOGOUT\n   command before the server closes the connection; and the client\n   MUST read the tagged OK response to the LOGOUT command before\n   the client closes the connection.\n\n   A server MUST NOT unilaterally close the connection without\n   sending an untagged BYE response that contains the reason for\n   having done so.  A client SHOULD NOT unilaterally close the\n   connection, and instead SHOULD issue a LOGOUT command.  If the\n   server detects that the client has unilaterally closed the\n   connection, the server MAY omit the untagged BYE response and\n   simply close its connection.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 14]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n                   +----------------------+\n                   |connection established|\n                   +----------------------+\n                              ||\n                              \\/\n            +--------------------------------------+\n            |          server greeting             |\n            +--------------------------------------+\n                      || (1)       || (2)        || (3)\n                      \\/           ||            ||\n            +-----------------+    ||            ||\n            |Not Authenticated|    ||            ||\n            +-----------------+    ||            ||\n             || (7)   || (4)       ||            ||\n             ||       \\/           \\/            ||\n             ||     +----------------+           ||\n             ||     | Authenticated  |<=++       ||\n             ||     +----------------+  ||       ||\n             ||       || (7)   || (5)   || (6)   ||\n             ||       ||       \\/       ||       ||\n             ||       ||    +--------+  ||       ||\n             ||       ||    |Selected|==++       ||\n             ||       ||    +--------+           ||\n             ||       ||       || (7)            ||\n             \\/       \\/       \\/                \\/\n            +--------------------------------------+\n            |               Logout                 |\n            +--------------------------------------+\n                              ||\n                              \\/\n                +-------------------------------+\n                |both sides close the connection|\n                +-------------------------------+\n\n         (1) connection without pre-authentication (OK greeting)\n         (2) pre-authenticated connection (PREAUTH greeting)\n         (3) rejected connection (BYE greeting)\n         (4) successful LOGIN or AUTHENTICATE command\n         (5) successful SELECT or EXAMINE command\n         (6) CLOSE command, or failed SELECT or EXAMINE command\n         (7) LOGOUT command, server shutdown, or connection closed\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 15]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n4.      Data Formats\n\n   IMAP4rev1 uses textual commands and responses.  Data in\n   IMAP4rev1 can be in one of several forms: atom, number, string,\n   parenthesized list, or NIL.  Note that a particular data item\n   may take more than one form; for example, a data item defined as\n   using \"astring\" syntax may be either an atom or a string.\n\n4.1.    Atom\n\n   An atom consists of one or more non-special characters.\n\n4.2.    Number\n\n   A number consists of one or more digit characters, and\n   represents a numeric value.\n\n4.3.    String\n\n   A string is in one of two forms: either literal or quoted\n   string.  The literal form is the general form of string.  The\n   quoted string form is an alternative that avoids the overhead of\n   processing a literal at the cost of limitations of characters\n   which may be used.\n\n   A literal is a sequence of zero or more octets (including CR and\n   LF), prefix-quoted with an octet count in the form of an open\n   brace (\"{\"), the number of octets, close brace (\"}\"), and CRLF.\n   In the case of literals transmitted from server to client, the\n   CRLF is immediately followed by the octet data.  In the case of\n   literals transmitted from client to server, the client MUST wait\n   to receive a command continuation request (described later in\n   this document) before sending the octet data (and the remainder\n   of the command).\n\n   A quoted string is a sequence of zero or more 7-bit characters,\n   excluding CR and LF, with double quote (<\">) characters at each\n   end.\n\n   The empty string is represented as either \"\" (a quoted string\n   with zero characters between double quotes) or as {0} followed\n   by CRLF (a literal with an octet count of 0).\n\n     Note: Even if the octet count is 0, a client transmitting a\n     literal MUST wait to receive a command continuation request.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 16]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n4.3.1.  8-bit and Binary Strings\n\n   8-bit textual and binary mail is supported through the use of a\n   [MIME-IMB] content transfer encoding.  IMAP4rev1 implementations MAY\n   transmit 8-bit or multi-octet characters in literals, but SHOULD do\n   so only when the [CHARSET] is identified.\n\n   Although a BINARY body encoding is defined, unencoded binary strings\n   are not permitted.  A \"binary string\" is any string with NUL\n   characters.  Implementations MUST encode binary data into a textual\n   form, such as BASE64, before transmitting the data.  A string with an\n   excessive amount of CTL characters MAY also be considered to be\n   binary.\n\n4.4.    Parenthesized List\n\n   Data structures are represented as a \"parenthesized list\"; a sequence\n   of data items, delimited by space, and bounded at each end by\n   parentheses.  A parenthesized list can contain other parenthesized\n   lists, using multiple levels of parentheses to indicate nesting.\n\n   The empty list is represented as () -- a parenthesized list with no\n   members.\n\n4.5.    NIL\n\n   The special form \"NIL\" represents the non-existence of a particular\n   data item that is represented as a string or parenthesized list, as\n   distinct from the empty string \"\" or the empty parenthesized list ().\n\n        Note: NIL is never used for any data item which takes the\n        form of an atom.  For example, a mailbox name of \"NIL\" is a\n        mailbox named NIL as opposed to a non-existent mailbox\n        name.  This is because mailbox uses \"astring\" syntax which\n        is an atom or a string.  Conversely, an addr-name of NIL is\n        a non-existent personal name, because addr-name uses\n        \"nstring\" syntax which is NIL or a string, but never an\n        atom.\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 17]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n5.      Operational Considerations\n\n   The following rules are listed here to ensure that all IMAP4rev1\n   implementations interoperate properly.\n\n5.1.    Mailbox Naming\n\n   Mailbox names are 7-bit.  Client implementations MUST NOT attempt to\n   create 8-bit mailbox names, and SHOULD interpret any 8-bit mailbox\n   names returned by LIST or LSUB as UTF-8.  Server implementations\n   SHOULD prohibit the creation of 8-bit mailbox names, and SHOULD NOT\n   return 8-bit mailbox names in LIST or LSUB.  See section 5.1.3 for\n   more information on how to represent non-ASCII mailbox names.\n\n        Note: 8-bit mailbox names were undefined in earlier\n        versions of this protocol.  Some sites used a local 8-bit\n        character set to represent non-ASCII mailbox names.  Such\n        usage is not interoperable, and is now formally deprecated.\n\n   The case-insensitive mailbox name INBOX is a special name reserved to\n   mean \"the primary mailbox for this user on this server\".  The\n   interpretation of all other names is implementation-dependent.\n\n   In particular, this specification takes no position on case\n   sensitivity in non-INBOX mailbox names.  Some server implementations\n   are fully case-sensitive; others preserve case of a newly-created\n   name but otherwise are case-insensitive; and yet others coerce names\n   to a particular case.  Client implementations MUST interact with any\n   of these.  If a server implementation interprets non-INBOX mailbox\n   names as case-insensitive, it MUST treat names using the\n   international naming convention specially as described in section\n   5.1.3.\n\n   There are certain client considerations when creating a new mailbox\n   name:\n\n   1)    Any character which is one of the atom-specials (see the Formal\n         Syntax) will require that the mailbox name be represented as a\n         quoted string or literal.\n\n   2)    CTL and other non-graphic characters are difficult to represent\n         in a user interface and are best avoided.\n\n   3)    Although the list-wildcard characters (\"%\" and \"*\") are valid\n         in a mailbox name, it is difficult to use such mailbox names\n         with the LIST and LSUB commands due to the conflict with\n         wildcard interpretation.\n\n\n\n\nCrispin                     Standards Track                    [Page 18]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   4)    Usually, a character (determined by the server implementation)\n         is reserved to delimit levels of hierarchy.\n\n   5)    Two characters, \"#\" and \"&\", have meanings by convention, and\n         should be avoided except when used in that convention.\n\n5.1.1.  Mailbox Hierarchy Naming\n\n   If it is desired to export hierarchical mailbox names, mailbox names\n   MUST be left-to-right hierarchical using a single character to\n   separate levels of hierarchy.  The same hierarchy separator character\n   is used for all levels of hierarchy within a single name.\n\n5.1.2.  Mailbox Namespace Naming Convention\n\n   By convention, the first hierarchical element of any mailbox name\n   which begins with \"#\" identifies the \"namespace\" of the remainder of\n   the name.  This makes it possible to disambiguate between different\n   types of mailbox stores, each of which have their own namespaces.\n\n        For example, implementations which offer access to USENET\n        newsgroups MAY use the \"#news\" namespace to partition the\n        USENET newsgroup namespace from that of other mailboxes.\n        Thus, the comp.mail.misc newsgroup would have a mailbox\n        name of \"#news.comp.mail.misc\", and the name\n        \"comp.mail.misc\" can refer to a different object (e.g., a\n        user's private mailbox).\n\n5.1.3.  Mailbox International Naming Convention\n\n   By convention, international mailbox names in IMAP4rev1 are specified\n   using a modified version of the UTF-7 encoding described in [UTF-7].\n   Modified UTF-7 may also be usable in servers that implement an\n   earlier version of this protocol.\n\n   In modified UTF-7, printable US-ASCII characters, except for \"&\",\n   represent themselves; that is, characters with octet values 0x20-0x25\n   and 0x27-0x7e.  The character \"&\" (0x26) is represented by the\n   two-octet sequence \"&-\".\n\n   All other characters (octet values 0x00-0x1f and 0x7f-0xff) are\n   represented in modified BASE64, with a further modification from\n   [UTF-7] that \",\" is used instead of \"/\".  Modified BASE64 MUST NOT be\n   used to represent any printing US-ASCII character which can represent\n   itself.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 19]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   \"&\" is used to shift to modified BASE64 and \"-\" to shift back to\n   US-ASCII.  There is no implicit shift from BASE64 to US-ASCII, and\n   null shifts (\"-&\" while in BASE64; note that \"&-\" while in US-ASCII\n   means \"&\") are not permitted.  However, all names start in US-ASCII,\n   and MUST end in US-ASCII; that is, a name that ends with a non-ASCII\n   ISO-10646 character MUST end with a \"-\").\n\n   The purpose of these modifications is to correct the following\n   problems with UTF-7:\n\n      1) UTF-7 uses the \"+\" character for shifting; this conflicts with\n         the common use of \"+\" in mailbox names, in particular USENET\n         newsgroup names.\n\n      2) UTF-7's encoding is BASE64 which uses the \"/\" character; this\n         conflicts with the use of \"/\" as a popular hierarchy delimiter.\n\n      3) UTF-7 prohibits the unencoded usage of \"\\\"; this conflicts with\n         the use of \"\\\" as a popular hierarchy delimiter.\n\n      4) UTF-7 prohibits the unencoded usage of \"~\"; this conflicts with\n         the use of \"~\" in some servers as a home directory indicator.\n\n      5) UTF-7 permits multiple alternate forms to represent the same\n         string; in particular, printable US-ASCII characters can be\n         represented in encoded form.\n\n      Although modified UTF-7 is a convention, it establishes certain\n      requirements on server handling of any mailbox name with an\n      embedded \"&\" character.  In particular, server implementations\n      MUST preserve the exact form of the modified BASE64 portion of a\n      modified UTF-7 name and treat that text as case-sensitive, even if\n      names are otherwise case-insensitive or case-folded.\n\n      Server implementations SHOULD verify that any mailbox name with an\n      embedded \"&\" character, used as an argument to CREATE, is: in the\n      correctly modified UTF-7 syntax, has no superfluous shifts, and\n      has no encoding in modified BASE64 of any printing US-ASCII\n      character which can represent itself.  However, client\n      implementations MUST NOT depend upon the server doing this, and\n      SHOULD NOT attempt to create a mailbox name with an embedded \"&\"\n      character unless it complies with the modified UTF-7 syntax.\n\n      Server implementations which export a mail store that does not\n      follow the modified UTF-7 convention MUST convert to modified\n      UTF-7 any mailbox name that contains either non-ASCII characters\n      or the \"&\" character.\n\n\n\n\nCrispin                     Standards Track                    [Page 20]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n           For example, here is a mailbox name which mixes English,\n           Chinese, and Japanese text:\n           ~peter/mail/&U,BTFw-/&ZeVnLIqe-\n\n           For example, the string \"&Jjo!\" is not a valid mailbox\n           name because it does not contain a shift to US-ASCII\n           before the \"!\".  The correct form is \"&Jjo-!\".  The\n           string \"&U,BTFw-&ZeVnLIqe-\" is not permitted because it\n           contains a superfluous shift.  The correct form is\n           \"&U,BTF2XlZyyKng-\".\n\n5.2.    Mailbox Size and Message Status Updates\n\n   At any time, a server can send data that the client did not request.\n   Sometimes, such behavior is REQUIRED.  For example, agents other than\n   the server MAY add messages to the mailbox (e.g., new message\n   delivery), change the flags of the messages in the mailbox (e.g.,\n   simultaneous access to the same mailbox by multiple agents), or even\n   remove messages from the mailbox.  A server MUST send mailbox size\n   updates automatically if a mailbox size change is observed during the\n   processing of a command.  A server SHOULD send message flag updates\n   automatically, without requiring the client to request such updates\n   explicitly.\n\n   Special rules exist for server notification of a client about the\n   removal of messages to prevent synchronization errors; see the\n   description of the EXPUNGE response for more detail.  In particular,\n   it is NOT permitted to send an EXISTS response that would reduce the\n   number of messages in the mailbox; only the EXPUNGE response can do\n   this.\n\n   Regardless of what implementation decisions a client makes on\n   remembering data from the server, a client implementation MUST record\n   mailbox size updates.  It MUST NOT assume that any command after the\n   initial mailbox selection will return the size of the mailbox.\n\n5.3.    Response when no Command in Progress\n\n   Server implementations are permitted to send an untagged response\n   (except for EXPUNGE) while there is no command in progress.  Server\n   implementations that send such responses MUST deal with flow control\n   considerations.  Specifically, they MUST either (1) verify that the\n   size of the data does not exceed the underlying transport's available\n   window size, or (2) use non-blocking writes.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 21]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n5.4.    Autologout Timer\n\n   If a server has an inactivity autologout timer, the duration of that\n   timer MUST be at least 30 minutes.  The receipt of ANY command from\n   the client during that interval SHOULD suffice to reset the\n   autologout timer.\n\n5.5.    Multiple Commands in Progress\n\n   The client MAY send another command without waiting for the\n   completion result response of a command, subject to ambiguity rules\n   (see below) and flow control constraints on the underlying data\n   stream.  Similarly, a server MAY begin processing another command\n   before processing the current command to completion, subject to\n   ambiguity rules.  However, any command continuation request responses\n   and command continuations MUST be negotiated before any subsequent\n   command is initiated.\n\n   The exception is if an ambiguity would result because of a command\n   that would affect the results of other commands.  Clients MUST NOT\n   send multiple commands without waiting if an ambiguity would result.\n   If the server detects a possible ambiguity, it MUST execute commands\n   to completion in the order given by the client.\n\n   The most obvious example of ambiguity is when a command would affect\n   the results of another command, e.g., a FETCH of a message's flags\n   and a STORE of that same message's flags.\n\n   A non-obvious ambiguity occurs with commands that permit an untagged\n   EXPUNGE response (commands other than FETCH, STORE, and SEARCH),\n   since an untagged EXPUNGE response can invalidate sequence numbers in\n   a subsequent command.  This is not a problem for FETCH, STORE, or\n   SEARCH commands because servers are prohibited from sending EXPUNGE\n   responses while any of those commands are in progress.  Therefore, if\n   the client sends any command other than FETCH, STORE, or SEARCH, it\n   MUST wait for the completion result response before sending a command\n   with message sequence numbers.\n\n        Note: UID FETCH, UID STORE, and UID SEARCH are different\n        commands from FETCH, STORE, and SEARCH.  If the client\n        sends a UID command, it must wait for a completion result\n        response before sending a command with message sequence\n        numbers.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 22]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   For example, the following non-waiting command sequences are invalid:\n\n      FETCH + NOOP + STORE\n      STORE + COPY + FETCH\n      COPY + COPY\n      CHECK + FETCH\n\n   The following are examples of valid non-waiting command sequences:\n\n      FETCH + STORE + SEARCH + CHECK\n      STORE + COPY + EXPUNGE\n\n      UID SEARCH + UID SEARCH may be valid or invalid as a non-waiting\n      command sequence, depending upon whether or not the second UID\n      SEARCH contains message sequence numbers.\n\n6.      Client Commands\n\n   IMAP4rev1 commands are described in this section.  Commands are\n   organized by the state in which the command is permitted.  Commands\n   which are permitted in multiple states are listed in the minimum\n   permitted state (for example, commands valid in authenticated and\n   selected state are listed in the authenticated state commands).\n\n   Command arguments, identified by \"Arguments:\" in the command\n   descriptions below, are described by function, not by syntax.  The\n   precise syntax of command arguments is described in the Formal Syntax\n   section.\n\n   Some commands cause specific server responses to be returned; these\n   are identified by \"Responses:\" in the command descriptions below.\n   See the response descriptions in the Responses section for\n   information on these responses, and the Formal Syntax section for the\n   precise syntax of these responses.  It is possible for server data to\n   be transmitted as a result of any command.  Thus, commands that do\n   not specifically require server data specify \"no specific responses\n   for this command\" instead of \"none\".\n\n   The \"Result:\" in the command description refers to the possible\n   tagged status responses to a command, and any special interpretation\n   of these status responses.\n\n   The state of a connection is only changed by successful commands\n   which are documented as changing state.  A rejected command (BAD\n   response) never changes the state of the connection or of the\n   selected mailbox.  A failed command (NO response) generally does not\n   change the state of the connection or of the selected mailbox; the\n   exception being the SELECT and EXAMINE commands.\n\n\n\nCrispin                     Standards Track                    [Page 23]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.1.    Client Commands - Any State\n\n   The following commands are valid in any state: CAPABILITY, NOOP, and\n   LOGOUT.\n\n6.1.1.  CAPABILITY Command\n\n   Arguments:  none\n\n   Responses:  REQUIRED untagged response: CAPABILITY\n\n   Result:     OK - capability completed\n               BAD - command unknown or arguments invalid\n\n      The CAPABILITY command requests a listing of capabilities that the\n      server supports.  The server MUST send a single untagged\n      CAPABILITY response with \"IMAP4rev1\" as one of the listed\n      capabilities before the (tagged) OK response.\n\n      A capability name which begins with \"AUTH=\" indicates that the\n      server supports that particular authentication mechanism.  All\n      such names are, by definition, part of this specification.  For\n      example, the authorization capability for an experimental\n      \"blurdybloop\" authenticator would be \"AUTH=XBLURDYBLOOP\" and not\n      \"XAUTH=BLURDYBLOOP\" or \"XAUTH=XBLURDYBLOOP\".\n\n      Other capability names refer to extensions, revisions, or\n      amendments to this specification.  See the documentation of the\n      CAPABILITY response for additional information.  No capabilities,\n      beyond the base IMAP4rev1 set defined in this specification, are\n      enabled without explicit client action to invoke the capability.\n\n      Client and server implementations MUST implement the STARTTLS,\n      LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS])\n      capabilities.  See the Security Considerations section for\n      important information.\n\n      See the section entitled \"Client Commands -\n      Experimental/Expansion\" for information about the form of site or\n      implementation-specific capabilities.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 24]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Example:    C: abcd CAPABILITY\n               S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI\n               LOGINDISABLED\n               S: abcd OK CAPABILITY completed\n               C: efgh STARTTLS\n               S: efgh OK STARTLS completed\n               <TLS negotiation, further commands are under [TLS] layer>\n               C: ijkl CAPABILITY\n               S: * CAPABILITY IMAP4rev1 AUTH=GSSAPI AUTH=PLAIN\n               S: ijkl OK CAPABILITY completed\n\n\n6.1.2.  NOOP Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command (but see below)\n\n   Result:     OK - noop completed\n               BAD - command unknown or arguments invalid\n\n      The NOOP command always succeeds.  It does nothing.\n\n      Since any command can return a status update as untagged data, the\n      NOOP command can be used as a periodic poll for new messages or\n      message status updates during a period of inactivity (this is the\n      preferred method to do this).  The NOOP command can also be used\n      to reset any inactivity autologout timer on the server.\n\n   Example:    C: a002 NOOP\n               S: a002 OK NOOP completed\n                  . . .\n               C: a047 NOOP\n               S: * 22 EXPUNGE\n               S: * 23 EXISTS\n               S: * 3 RECENT\n               S: * 14 FETCH (FLAGS (\\Seen \\Deleted))\n               S: a047 OK NOOP completed\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 25]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.1.3.  LOGOUT Command\n\n   Arguments:  none\n\n   Responses:  REQUIRED untagged response: BYE\n\n   Result:     OK - logout completed\n               BAD - command unknown or arguments invalid\n\n      The LOGOUT command informs the server that the client is done with\n      the connection.  The server MUST send a BYE untagged response\n      before the (tagged) OK response, and then close the network\n      connection.\n\n   Example:    C: A023 LOGOUT\n               S: * BYE IMAP4rev1 Server logging out\n               S: A023 OK LOGOUT completed\n               (Server and client then close the connection)\n\n6.2.    Client Commands - Not Authenticated State\n\n   In the not authenticated state, the AUTHENTICATE or LOGIN command\n   establishes authentication and enters the authenticated state.  The\n   AUTHENTICATE command provides a general mechanism for a variety of\n   authentication techniques, privacy protection, and integrity\n   checking; whereas the LOGIN command uses a traditional user name and\n   plaintext password pair and has no means of establishing privacy\n   protection or integrity checking.\n\n   The STARTTLS command is an alternate form of establishing session\n   privacy protection and integrity checking, but does not establish\n   authentication or enter the authenticated state.\n\n   Server implementations MAY allow access to certain mailboxes without\n   establishing authentication.  This can be done by means of the\n   ANONYMOUS [SASL] authenticator described in [ANONYMOUS].  An older\n   convention is a LOGIN command using the userid \"anonymous\"; in this\n   case, a password is required although the server may choose to accept\n   any password.  The restrictions placed on anonymous users are\n   implementation-dependent.\n\n   Once authenticated (including as anonymous), it is not possible to\n   re-enter not authenticated state.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 26]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in the not authenticated state:\n   STARTTLS, AUTHENTICATE and LOGIN.  See the Security Considerations\n   section for important information about these commands.\n\n6.2.1.  STARTTLS Command\n\n   Arguments:  none\n\n   Responses:  no specific response for this command\n\n   Result:     OK - starttls completed, begin TLS negotiation\n               BAD - command unknown or arguments invalid\n\n      A [TLS] negotiation begins immediately after the CRLF at the end\n      of the tagged OK response from the server.  Once a client issues a\n      STARTTLS command, it MUST NOT issue further commands until a\n      server response is seen and the [TLS] negotiation is complete.\n\n      The server remains in the non-authenticated state, even if client\n      credentials are supplied during the [TLS] negotiation.  This does\n      not preclude an authentication mechanism such as EXTERNAL (defined\n      in [SASL]) from using client identity determined by the [TLS]\n      negotiation.\n\n      Once [TLS] has been started, the client MUST discard cached\n      information about server capabilities and SHOULD re-issue the\n      CAPABILITY command.  This is necessary to protect against man-in-\n      the-middle attacks which alter the capabilities list prior to\n      STARTTLS.  The server MAY advertise different capabilities after\n      STARTTLS.\n\n   Example:    C: a001 CAPABILITY\n               S: * CAPABILITY IMAP4rev1 STARTTLS LOGINDISABLED\n               S: a001 OK CAPABILITY completed\n               C: a002 STARTTLS\n               S: a002 OK Begin TLS negotiation now\n               <TLS negotiation, further commands are under [TLS] layer>\n               C: a003 CAPABILITY\n               S: * CAPABILITY IMAP4rev1 AUTH=PLAIN\n               S: a003 OK CAPABILITY completed\n               C: a004 LOGIN joe password\n               S: a004 OK LOGIN completed\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 27]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.2.2.  AUTHENTICATE Command\n\n   Arguments:  authentication mechanism name\n\n   Responses:  continuation data can be requested\n\n   Result:     OK - authenticate completed, now in authenticated state\n               NO - authenticate failure: unsupported authentication\n                    mechanism, credentials rejected\n               BAD - command unknown or arguments invalid,\n                    authentication exchange cancelled\n\n      The AUTHENTICATE command indicates a [SASL] authentication\n      mechanism to the server.  If the server supports the requested\n      authentication mechanism, it performs an authentication protocol\n      exchange to authenticate and identify the client.  It MAY also\n      negotiate an OPTIONAL security layer for subsequent protocol\n      interactions.  If the requested authentication mechanism is not\n      supported, the server SHOULD reject the AUTHENTICATE command by\n      sending a tagged NO response.\n\n      The AUTHENTICATE command does not support the optional \"initial\n      response\" feature of [SASL].  Section 5.1 of [SASL] specifies how\n      to handle an authentication mechanism which uses an initial\n      response.\n\n      The service name specified by this protocol's profile of [SASL] is\n      \"imap\".\n\n      The authentication protocol exchange consists of a series of\n      server challenges and client responses that are specific to the\n      authentication mechanism.  A server challenge consists of a\n      command continuation request response with the \"+\" token followed\n      by a BASE64 encoded string.  The client response consists of a\n      single line consisting of a BASE64 encoded string.  If the client\n      wishes to cancel an authentication exchange, it issues a line\n      consisting of a single \"*\".  If the server receives such a\n      response, it MUST reject the AUTHENTICATE command by sending a\n      tagged BAD response.\n\n      If a security layer is negotiated through the [SASL]\n      authentication exchange, it takes effect immediately following the\n      CRLF that concludes the authentication exchange for the client,\n      and the CRLF of the tagged OK response for the server.\n\n      While client and server implementations MUST implement the\n      AUTHENTICATE command itself, it is not required to implement any\n      authentication mechanisms other than the PLAIN mechanism described\n\n\n\nCrispin                     Standards Track                    [Page 28]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      in [IMAP-TLS].  Also, an authentication mechanism is not required\n      to support any security layers.\n\n           Note: a server implementation MUST implement a\n           configuration in which it does NOT permit any plaintext\n           password mechanisms, unless either the STARTTLS command\n           has been negotiated or some other mechanism that\n           protects the session from password snooping has been\n           provided.  Server sites SHOULD NOT use any configuration\n           which permits a plaintext password mechanism without\n           such a protection mechanism against password snooping.\n           Client and server implementations SHOULD implement\n           additional [SASL] mechanisms that do not use plaintext\n           passwords, such the GSSAPI mechanism described in [SASL]\n           and/or the [DIGEST-MD5] mechanism.\n\n      Servers and clients can support multiple authentication\n      mechanisms.  The server SHOULD list its supported authentication\n      mechanisms in the response to the CAPABILITY command so that the\n      client knows which authentication mechanisms to use.\n\n      A server MAY include a CAPABILITY response code in the tagged OK\n      response of a successful AUTHENTICATE command in order to send\n      capabilities automatically.  It is unnecessary for a client to\n      send a separate CAPABILITY command if it recognizes these\n      automatic capabilities.  This should only be done if a security\n      layer was not negotiated by the AUTHENTICATE command, because the\n      tagged OK response as part of an AUTHENTICATE command is not\n      protected by encryption/integrity checking.  [SASL] requires the\n      client to re-issue a CAPABILITY command in this case.\n\n      If an AUTHENTICATE command fails with a NO response, the client\n      MAY try another authentication mechanism by issuing another\n      AUTHENTICATE command.  It MAY also attempt to authenticate by\n      using the LOGIN command (see section 6.2.3 for more detail).  In\n      other words, the client MAY request authentication types in\n      decreasing order of preference, with the LOGIN command as a last\n      resort.\n\n      The authorization identity passed from the client to the server\n      during the authentication exchange is interpreted by the server as\n      the user name whose privileges the client is requesting.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 29]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Example:    S: * OK IMAP4rev1 Server\n               C: A001 AUTHENTICATE GSSAPI\n               S: +\n               C: YIIB+wYJKoZIhvcSAQICAQBuggHqMIIB5qADAgEFoQMCAQ6iBw\n                  MFACAAAACjggEmYYIBIjCCAR6gAwIBBaESGxB1Lndhc2hpbmd0\n                  b24uZWR1oi0wK6ADAgEDoSQwIhsEaW1hcBsac2hpdmFtcy5jYW\n                  Mud2FzaGluZ3Rvbi5lZHWjgdMwgdCgAwIBAaEDAgEDooHDBIHA\n                  cS1GSa5b+fXnPZNmXB9SjL8Ollj2SKyb+3S0iXMljen/jNkpJX\n                  AleKTz6BQPzj8duz8EtoOuNfKgweViyn/9B9bccy1uuAE2HI0y\n                  C/PHXNNU9ZrBziJ8Lm0tTNc98kUpjXnHZhsMcz5Mx2GR6dGknb\n                  I0iaGcRerMUsWOuBmKKKRmVMMdR9T3EZdpqsBd7jZCNMWotjhi\n                  vd5zovQlFqQ2Wjc2+y46vKP/iXxWIuQJuDiisyXF0Y8+5GTpAL\n                  pHDc1/pIGmMIGjoAMCAQGigZsEgZg2on5mSuxoDHEA1w9bcW9n\n                  FdFxDKpdrQhVGVRDIzcCMCTzvUboqb5KjY1NJKJsfjRQiBYBdE\n                  NKfzK+g5DlV8nrw81uOcP8NOQCLR5XkoMHC0Dr/80ziQzbNqhx\n                  O6652Npft0LQwJvenwDI13YxpwOdMXzkWZN/XrEqOWp6GCgXTB\n                  vCyLWLlWnbaUkZdEYbKHBPjd8t/1x5Yg==\n               S: + YGgGCSqGSIb3EgECAgIAb1kwV6ADAgEFoQMCAQ+iSzBJoAMC\n                  AQGiQgRAtHTEuOP2BXb9sBYFR4SJlDZxmg39IxmRBOhXRKdDA0\n                  uHTCOT9Bq3OsUTXUlk0CsFLoa8j+gvGDlgHuqzWHPSQg==\n               C:\n               S: + YDMGCSqGSIb3EgECAgIBAAD/////6jcyG4GE3KkTzBeBiVHe\n                  ceP2CWY0SR0fAQAgAAQEBAQ=\n               C: YDMGCSqGSIb3EgECAgIBAAD/////3LQBHXTpFfZgrejpLlLImP\n                  wkhbfa2QteAQAgAG1yYwE=\n               S: A001 OK GSSAPI authentication successful\n\n        Note: The line breaks within server challenges and client\n        responses are for editorial clarity and are not in real\n        authenticators.\n\n\n6.2.3.  LOGIN Command\n\n   Arguments:  user name\n               password\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - login completed, now in authenticated state\n               NO - login failure: user name or password rejected\n               BAD - command unknown or arguments invalid\n\n      The LOGIN command identifies the client to the server and carries\n      the plaintext password authenticating this user.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 30]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      A server MAY include a CAPABILITY response code in the tagged OK\n      response to a successful LOGIN command in order to send\n      capabilities automatically.  It is unnecessary for a client to\n      send a separate CAPABILITY command if it recognizes these\n      automatic capabilities.\n\n   Example:    C: a001 LOGIN SMITH SESAME\n               S: a001 OK LOGIN completed\n\n        Note: Use of the LOGIN command over an insecure network\n        (such as the Internet) is a security risk, because anyone\n        monitoring network traffic can obtain plaintext passwords.\n        The LOGIN command SHOULD NOT be used except as a last\n        resort, and it is recommended that client implementations\n        have a means to disable any automatic use of the LOGIN\n        command.\n\n        Unless either the STARTTLS command has been negotiated or\n        some other mechanism that protects the session from\n        password snooping has been provided, a server\n        implementation MUST implement a configuration in which it\n        advertises the LOGINDISABLED capability and does NOT permit\n        the LOGIN command.  Server sites SHOULD NOT use any\n        configuration which permits the LOGIN command without such\n        a protection mechanism against password snooping.  A client\n        implementation MUST NOT send a LOGIN command if the\n        LOGINDISABLED capability is advertised.\n\n6.3.    Client Commands - Authenticated State\n\n   In the authenticated state, commands that manipulate mailboxes as\n   atomic entities are permitted.  Of these commands, the SELECT and\n   EXAMINE commands will select a mailbox for access and enter the\n   selected state.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in the authenticated state: SELECT,\n   EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB,\n   STATUS, and APPEND.\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 31]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.3.1.  SELECT Command\n\n   Arguments:  mailbox name\n\n   Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT\n               REQUIRED OK untagged responses:  UNSEEN,  PERMANENTFLAGS,\n               UIDNEXT, UIDVALIDITY\n\n   Result:     OK - select completed, now in selected state\n               NO - select failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n               BAD - command unknown or arguments invalid\n\n      The SELECT command selects a mailbox so that messages in the\n      mailbox can be accessed.  Before returning an OK to the client,\n      the server MUST send the following untagged data to the client.\n      Note that earlier versions of this protocol only required the\n      FLAGS, EXISTS, and RECENT untagged data; consequently, client\n      implementations SHOULD implement default behavior for missing data\n      as discussed with the individual item.\n\n         FLAGS       Defined flags in the mailbox.  See the description\n                     of the FLAGS response for more detail.\n\n         <n> EXISTS  The number of messages in the mailbox.  See the\n                     description of the EXISTS response for more detail.\n\n         <n> RECENT  The number of messages with the \\Recent flag set.\n                     See the description of the RECENT response for more\n                     detail.\n\n         OK [UNSEEN <n>]\n                     The message sequence number of the first unseen\n                     message in the mailbox.  If this is missing, the\n                     client can not make any assumptions about the first\n                     unseen message in the mailbox, and needs to issue a\n                     SEARCH command if it wants to find it.\n\n         OK [PERMANENTFLAGS (<list of flags>)]\n                     A list of message flags that the client can change\n                     permanently.  If this is missing, the client should\n                     assume that all flags can be changed permanently.\n\n         OK [UIDNEXT <n>]\n                     The next unique identifier value.  Refer to section\n                     2.3.1.1 for more information.  If this is missing,\n                     the client can not make any assumptions about the\n                     next unique identifier value.\n\n\n\nCrispin                     Standards Track                    [Page 32]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         OK [UIDVALIDITY <n>]\n                     The unique identifier validity value.  Refer to\n                     section 2.3.1.1 for more information.  If this is\n                     missing, the server does not support unique\n                     identifiers.\n\n      Only one mailbox can be selected at a time in a connection;\n      simultaneous access to multiple mailboxes requires multiple\n      connections.  The SELECT command automatically deselects any\n      currently selected mailbox before attempting the new selection.\n      Consequently, if a mailbox is selected and a SELECT command that\n      fails is attempted, no mailbox is selected.\n\n      If the client is permitted to modify the mailbox, the server\n      SHOULD prefix the text of the tagged OK response with the\n      \"[READ-WRITE]\" response code.\n\n      If the client is not permitted to modify the mailbox but is\n      permitted read access, the mailbox is selected as read-only, and\n      the server MUST prefix the text of the tagged OK response to\n      SELECT with the \"[READ-ONLY]\" response code.  Read-only access\n      through SELECT differs from the EXAMINE command in that certain\n      read-only mailboxes MAY permit the change of permanent state on a\n      per-user (as opposed to global) basis.  Netnews messages marked in\n      a server-based .newsrc file are an example of such per-user\n      permanent state that can be modified with read-only mailboxes.\n\n   Example:    C: A142 SELECT INBOX\n               S: * 172 EXISTS\n               S: * 1 RECENT\n               S: * OK [UNSEEN 12] Message 12 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * OK [UIDNEXT 4392] Predicted next UID\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n               S: A142 OK [READ-WRITE] SELECT completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 33]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.3.2.  EXAMINE Command\n\n   Arguments:  mailbox name\n\n   Responses:  REQUIRED untagged responses: FLAGS, EXISTS, RECENT\n               REQUIRED OK untagged responses:  UNSEEN,  PERMANENTFLAGS,\n               UIDNEXT, UIDVALIDITY\n\n   Result:     OK - examine completed, now in selected state\n               NO - examine failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n               BAD - command unknown or arguments invalid\n\n      The EXAMINE command is identical to SELECT and returns the same\n      output; however, the selected mailbox is identified as read-only.\n      No changes to the permanent state of the mailbox, including\n      per-user state, are permitted; in particular, EXAMINE MUST NOT\n      cause messages to lose the \\Recent flag.\n\n      The text of the tagged OK response to the EXAMINE command MUST\n      begin with the \"[READ-ONLY]\" response code.\n\n   Example:    C: A932 EXAMINE blurdybloop\n               S: * 17 EXISTS\n               S: * 2 RECENT\n               S: * OK [UNSEEN 8] Message 8 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * OK [UIDNEXT 4392] Predicted next UID\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS ()] No permanent flags permitted\n               S: A932 OK [READ-ONLY] EXAMINE completed\n\n\n6.3.3.  CREATE Command\n\n   Arguments:  mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - create completed\n               NO - create failure: can't create mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The CREATE command creates a mailbox with the given name.  An OK\n      response is returned only if a new mailbox with that name has been\n      created.  It is an error to attempt to create INBOX or a mailbox\n      with a name that refers to an extant mailbox.  Any error in\n      creation will return a tagged NO response.\n\n\n\nCrispin                     Standards Track                    [Page 34]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      If the mailbox name is suffixed with the server's hierarchy\n      separator character (as returned from the server by a LIST\n      command), this is a declaration that the client intends to create\n      mailbox names under this name in the hierarchy.  Server\n      implementations that do not require this declaration MUST ignore\n      the declaration.  In any case, the name created is without the\n      trailing hierarchy delimiter.\n\n      If the server's hierarchy separator character appears elsewhere in\n      the name, the server SHOULD create any superior hierarchical names\n      that are needed for the CREATE command to be successfully\n      completed.  In other words, an attempt to create \"foo/bar/zap\" on\n      a server in which \"/\" is the hierarchy separator character SHOULD\n      create foo/ and foo/bar/ if they do not already exist.\n\n      If a new mailbox is created with the same name as a mailbox which\n      was deleted, its unique identifiers MUST be greater than any\n      unique identifiers used in the previous incarnation of the mailbox\n      UNLESS the new incarnation has a different unique identifier\n      validity value.  See the description of the UID command for more\n      detail.\n\n   Example:    C: A003 CREATE owatagusiam/\n               S: A003 OK CREATE completed\n               C: A004 CREATE owatagusiam/blurdybloop\n               S: A004 OK CREATE completed\n\n        Note: The interpretation of this example depends on whether\n        \"/\" was returned as the hierarchy separator from LIST.  If\n        \"/\" is the hierarchy separator, a new level of hierarchy\n        named \"owatagusiam\" with a member called \"blurdybloop\" is\n        created.  Otherwise, two mailboxes at the same hierarchy\n        level are created.\n\n\n6.3.4.  DELETE Command\n\n   Arguments:  mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - delete completed\n               NO - delete failure: can't delete mailbox with that name\n               BAD - command unknown or arguments invalid\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 35]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      The DELETE command permanently removes the mailbox with the given\n      name.  A tagged OK response is returned only if the mailbox has\n      been deleted.  It is an error to attempt to delete INBOX or a\n      mailbox name that does not exist.\n\n      The DELETE command MUST NOT remove inferior hierarchical names.\n      For example, if a mailbox \"foo\" has an inferior \"foo.bar\"\n      (assuming \".\" is the hierarchy delimiter character), removing\n      \"foo\" MUST NOT remove \"foo.bar\".  It is an error to attempt to\n      delete a name that has inferior hierarchical names and also has\n      the \\Noselect mailbox name attribute (see the description of the\n      LIST response for more details).\n\n      It is permitted to delete a name that has inferior hierarchical\n      names and does not have the \\Noselect mailbox name attribute.  In\n      this case, all messages in that mailbox are removed, and the name\n      will acquire the \\Noselect mailbox name attribute.\n\n      The value of the highest-used unique identifier of the deleted\n      mailbox MUST be preserved so that a new mailbox created with the\n      same name will not reuse the identifiers of the former\n      incarnation, UNLESS the new incarnation has a different unique\n      identifier validity value.  See the description of the UID command\n      for more detail.\n\n   Examples:   C: A682 LIST \"\" *\n               S: * LIST () \"/\" blurdybloop\n               S: * LIST (\\Noselect) \"/\" foo\n               S: * LIST () \"/\" foo/bar\n               S: A682 OK LIST completed\n               C: A683 DELETE blurdybloop\n               S: A683 OK DELETE completed\n               C: A684 DELETE foo\n               S: A684 NO Name \"foo\" has inferior hierarchical names\n               C: A685 DELETE foo/bar\n               S: A685 OK DELETE Completed\n               C: A686 LIST \"\" *\n               S: * LIST (\\Noselect) \"/\" foo\n               S: A686 OK LIST completed\n               C: A687 DELETE foo\n               S: A687 OK DELETE Completed\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 36]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n               C: A82 LIST \"\" *\n               S: * LIST () \".\" blurdybloop\n               S: * LIST () \".\" foo\n               S: * LIST () \".\" foo.bar\n               S: A82 OK LIST completed\n               C: A83 DELETE blurdybloop\n               S: A83 OK DELETE completed\n               C: A84 DELETE foo\n               S: A84 OK DELETE Completed\n               C: A85 LIST \"\" *\n               S: * LIST () \".\" foo.bar\n               S: A85 OK LIST completed\n               C: A86 LIST \"\" %\n               S: * LIST (\\Noselect) \".\" foo\n               S: A86 OK LIST completed\n\n\n6.3.5.  RENAME Command\n\n   Arguments:  existing mailbox name\n               new mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - rename completed\n               NO - rename failure: can't rename mailbox with that name,\n                    can't rename to mailbox with that name\n               BAD - command unknown or arguments invalid\n\n      The RENAME command changes the name of a mailbox.  A tagged OK\n      response is returned only if the mailbox has been renamed.  It is\n      an error to attempt to rename from a mailbox name that does not\n      exist or to a mailbox name that already exists.  Any error in\n      renaming will return a tagged NO response.\n\n      If the name has inferior hierarchical names, then the inferior\n      hierarchical names MUST also be renamed.  For example, a rename of\n      \"foo\" to \"zap\" will rename \"foo/bar\" (assuming \"/\" is the\n      hierarchy delimiter character) to \"zap/bar\".\n\n      If the server's hierarchy separator character appears in the name,\n      the server SHOULD create any superior hierarchical names that are\n      needed for the RENAME command to complete successfully.  In other\n      words, an attempt to rename \"foo/bar/zap\" to baz/rag/zowie on a\n      server in which \"/\" is the hierarchy separator character SHOULD\n      create baz/ and baz/rag/ if they do not already exist.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 37]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      The value of the highest-used unique identifier of the old mailbox\n      name MUST be preserved so that a new mailbox created with the same\n      name will not reuse the identifiers of the former incarnation,\n      UNLESS the new incarnation has a different unique identifier\n      validity value.  See the description of the UID command for more\n      detail.\n\n      Renaming INBOX is permitted, and has special behavior.  It moves\n      all messages in INBOX to a new mailbox with the given name,\n      leaving INBOX empty.  If the server implementation supports\n      inferior hierarchical names of INBOX, these are unaffected by a\n      rename of INBOX.\n\n   Examples:   C: A682 LIST \"\" *\n               S: * LIST () \"/\" blurdybloop\n               S: * LIST (\\Noselect) \"/\" foo\n               S: * LIST () \"/\" foo/bar\n               S: A682 OK LIST completed\n               C: A683 RENAME blurdybloop sarasoop\n               S: A683 OK RENAME completed\n               C: A684 RENAME foo zowie\n               S: A684 OK RENAME Completed\n               C: A685 LIST \"\" *\n               S: * LIST () \"/\" sarasoop\n               S: * LIST (\\Noselect) \"/\" zowie\n               S: * LIST () \"/\" zowie/bar\n               S: A685 OK LIST completed\n\n               C: Z432 LIST \"\" *\n               S: * LIST () \".\" INBOX\n               S: * LIST () \".\" INBOX.bar\n               S: Z432 OK LIST completed\n               C: Z433 RENAME INBOX old-mail\n               S: Z433 OK RENAME completed\n               C: Z434 LIST \"\" *\n               S: * LIST () \".\" INBOX\n               S: * LIST () \".\" INBOX.bar\n               S: * LIST () \".\" old-mail\n               S: Z434 OK LIST completed\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 38]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.3.6.  SUBSCRIBE Command\n\n   Arguments:  mailbox\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - subscribe completed\n               NO - subscribe failure: can't subscribe to that name\n               BAD - command unknown or arguments invalid\n\n      The SUBSCRIBE command adds the specified mailbox name to the\n      server's set of \"active\" or \"subscribed\" mailboxes as returned by\n      the LSUB command.  This command returns a tagged OK response only\n      if the subscription is successful.\n\n      A server MAY validate the mailbox argument to SUBSCRIBE to verify\n      that it exists.  However, it MUST NOT unilaterally remove an\n      existing mailbox name from the subscription list even if a mailbox\n      by that name no longer exists.\n\n           Note: This requirement is because a server site can\n           choose to routinely remove a mailbox with a well-known\n           name (e.g., \"system-alerts\") after its contents expire,\n           with the intention of recreating it when new contents\n           are appropriate.\n\n\n   Example:    C: A002 SUBSCRIBE #news.comp.mail.mime\n               S: A002 OK SUBSCRIBE completed\n\n\n6.3.7.  UNSUBSCRIBE Command\n\n   Arguments:  mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - unsubscribe completed\n               NO - unsubscribe failure: can't unsubscribe that name\n               BAD - command unknown or arguments invalid\n\n      The UNSUBSCRIBE command removes the specified mailbox name from\n      the server's set of \"active\" or \"subscribed\" mailboxes as returned\n      by the LSUB command.  This command returns a tagged OK response\n      only if the unsubscription is successful.\n\n   Example:    C: A002 UNSUBSCRIBE #news.comp.mail.mime\n               S: A002 OK UNSUBSCRIBE completed\n\n\n\nCrispin                     Standards Track                    [Page 39]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.3.8.  LIST Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Responses:  untagged responses: LIST\n\n   Result:     OK - list completed\n               NO - list failure: can't list that reference or name\n               BAD - command unknown or arguments invalid\n\n      The LIST command returns a subset of names from the complete set\n      of all names available to the client.  Zero or more untagged LIST\n      replies are returned, containing the name attributes, hierarchy\n      delimiter, and name; see the description of the LIST reply for\n      more detail.\n\n      The LIST command SHOULD return its data quickly, without undue\n      delay.  For example, it SHOULD NOT go to excess trouble to\n      calculate the \\Marked or \\Unmarked status or perform other\n      processing; if each name requires 1 second of processing, then a\n      list of 1200 names would take 20 minutes!\n\n      An empty (\"\" string) reference name argument indicates that the\n      mailbox name is interpreted as by SELECT.  The returned mailbox\n      names MUST match the supplied mailbox name pattern.  A non-empty\n      reference name argument is the name of a mailbox or a level of\n      mailbox hierarchy, and indicates the context in which the mailbox\n      name is interpreted.\n\n      An empty (\"\" string) mailbox name argument is a special request to\n      return the hierarchy delimiter and the root name of the name given\n      in the reference.  The value returned as the root MAY be the empty\n      string if the reference is non-rooted or is an empty string.  In\n      all cases, a hierarchy delimiter (or NIL if there is no hierarchy)\n      is returned.  This permits a client to get the hierarchy delimiter\n      (or find out that the mailbox names are flat) even when no\n      mailboxes by that name currently exist.\n\n      The reference and mailbox name arguments are interpreted into a\n      canonical form that represents an unambiguous left-to-right\n      hierarchy.  The returned mailbox names will be in the interpreted\n      form.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 40]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n           Note: The interpretation of the reference argument is\n           implementation-defined.  It depends upon whether the\n           server implementation has a concept of the \"current\n           working directory\" and leading \"break out characters\",\n           which override the current working directory.\n\n           For example, on a server which exports a UNIX or NT\n           filesystem, the reference argument contains the current\n           working directory, and the mailbox name argument would\n           contain the name as interpreted in the current working\n           directory.\n\n           If a server implementation has no concept of break out\n           characters, the canonical form is normally the reference\n           name appended with the mailbox name.  Note that if the\n           server implements the namespace convention (section\n           5.1.2), \"#\" is a break out character and must be treated\n           as such.\n\n           If the reference argument is not a level of mailbox\n           hierarchy (that is, it is a \\NoInferiors name), and/or\n           the reference argument does not end with the hierarchy\n           delimiter, it is implementation-dependent how this is\n           interpreted.  For example, a reference of \"foo/bar\" and\n           mailbox name of \"rag/baz\" could be interpreted as\n           \"foo/bar/rag/baz\", \"foo/barrag/baz\", or \"foo/rag/baz\".\n           A client SHOULD NOT use such a reference argument except\n           at the explicit request of the user.  A hierarchical\n           browser MUST NOT make any assumptions about server\n           interpretation of the reference unless the reference is\n           a level of mailbox hierarchy AND ends with the hierarchy\n           delimiter.\n\n      Any part of the reference argument that is included in the\n      interpreted form SHOULD prefix the interpreted form.  It SHOULD\n      also be in the same form as the reference name argument.  This\n      rule permits the client to determine if the returned mailbox name\n      is in the context of the reference argument, or if something about\n      the mailbox argument overrode the reference argument.  Without\n      this rule, the client would have to have knowledge of the server's\n      naming semantics including what characters are \"breakouts\" that\n      override a naming context.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 41]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n           For example, here are some examples of how references\n           and mailbox names might be interpreted on a UNIX-based\n           server:\n\n               Reference     Mailbox Name  Interpretation\n               ------------  ------------  --------------\n               ~smith/Mail/  foo.*         ~smith/Mail/foo.*\n               archive/      %             archive/%\n               #news.        comp.mail.*   #news.comp.mail.*\n               ~smith/Mail/  /usr/doc/foo  /usr/doc/foo\n               archive/      ~fred/Mail/*  ~fred/Mail/*\n\n           The first three examples demonstrate interpretations in\n           the context of the reference argument.  Note that\n           \"~smith/Mail\" SHOULD NOT be transformed into something\n           like \"/u2/users/smith/Mail\", or it would be impossible\n           for the client to determine that the interpretation was\n           in the context of the reference.\n\n      The character \"*\" is a wildcard, and matches zero or more\n      characters at this position.  The character \"%\" is similar to \"*\",\n      but it does not match a hierarchy delimiter.  If the \"%\" wildcard\n      is the last character of a mailbox name argument, matching levels\n      of hierarchy are also returned.  If these levels of hierarchy are\n      not also selectable mailboxes, they are returned with the\n      \\Noselect mailbox name attribute (see the description of the LIST\n      response for more details).\n\n      Server implementations are permitted to \"hide\" otherwise\n      accessible mailboxes from the wildcard characters, by preventing\n      certain characters or names from matching a wildcard in certain\n      situations.  For example, a UNIX-based server might restrict the\n      interpretation of \"*\" so that an initial \"/\" character does not\n      match.\n\n      The special name INBOX is included in the output from LIST, if\n      INBOX is supported by this server for this user and if the\n      uppercase string \"INBOX\" matches the interpreted reference and\n      mailbox name arguments with wildcards as described above.  The\n      criteria for omitting INBOX is whether SELECT INBOX will return\n      failure; it is not relevant whether the user's real INBOX resides\n      on this or some other server.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 42]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Example:    C: A101 LIST \"\" \"\"\n               S: * LIST (\\Noselect) \"/\" \"\"\n               S: A101 OK LIST Completed\n               C: A102 LIST #news.comp.mail.misc \"\"\n               S: * LIST (\\Noselect) \".\" #news.\n               S: A102 OK LIST Completed\n               C: A103 LIST /usr/staff/jones \"\"\n               S: * LIST (\\Noselect) \"/\" /\n               S: A103 OK LIST Completed\n               C: A202 LIST ~/Mail/ %\n               S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n               S: * LIST () \"/\" ~/Mail/meetings\n               S: A202 OK LIST completed\n\n\n6.3.9.  LSUB Command\n\n   Arguments:  reference name\n               mailbox name with possible wildcards\n\n   Responses:  untagged responses: LSUB\n\n   Result:     OK - lsub completed\n               NO - lsub failure: can't list that reference or name\n               BAD - command unknown or arguments invalid\n\n      The LSUB command returns a subset of names from the set of names\n      that the user has declared as being \"active\" or \"subscribed\".\n      Zero or more untagged LSUB replies are returned.  The arguments to\n      LSUB are in the same form as those for LIST.\n\n      The returned untagged LSUB response MAY contain different mailbox\n      flags from a LIST untagged response.  If this should happen, the\n      flags in the untagged LIST are considered more authoritative.\n\n      A special situation occurs when using LSUB with the % wildcard.\n      Consider what happens if \"foo/bar\" (with a hierarchy delimiter of\n      \"/\") is subscribed but \"foo\" is not.  A \"%\" wildcard to LSUB must\n      return foo, not foo/bar, in the LSUB response, and it MUST be\n      flagged with the \\Noselect attribute.\n\n      The server MUST NOT unilaterally remove an existing mailbox name\n      from the subscription list even if a mailbox by that name no\n      longer exists.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 43]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Example:    C: A002 LSUB \"#news.\" \"comp.mail.*\"\n               S: * LSUB () \".\" #news.comp.mail.mime\n               S: * LSUB () \".\" #news.comp.mail.misc\n               S: A002 OK LSUB completed\n               C: A003 LSUB \"#news.\" \"comp.%\"\n               S: * LSUB (\\NoSelect) \".\" #news.comp.mail\n               S: A003 OK LSUB completed\n\n\n6.3.10. STATUS Command\n\n   Arguments:  mailbox name\n               status data item names\n\n   Responses:  untagged responses: STATUS\n\n   Result:     OK - status completed\n               NO - status failure: no status for that name\n               BAD - command unknown or arguments invalid\n\n      The STATUS command requests the status of the indicated mailbox.\n      It does not change the currently selected mailbox, nor does it\n      affect the state of any messages in the queried mailbox (in\n      particular, STATUS MUST NOT cause messages to lose the \\Recent\n      flag).\n\n      The STATUS command provides an alternative to opening a second\n      IMAP4rev1 connection and doing an EXAMINE command on a mailbox to\n      query that mailbox's status without deselecting the current\n      mailbox in the first IMAP4rev1 connection.\n\n      Unlike the LIST command, the STATUS command is not guaranteed to\n      be fast in its response.  Under certain circumstances, it can be\n      quite slow.  In some implementations, the server is obliged to\n      open the mailbox read-only internally to obtain certain status\n      information.  Also unlike the LIST command, the STATUS command\n      does not accept wildcards.\n\n           Note: The STATUS command is intended to access the\n           status of mailboxes other than the currently selected\n           mailbox.  Because the STATUS command can cause the\n           mailbox to be opened internally, and because this\n           information is available by other means on the selected\n           mailbox, the STATUS command SHOULD NOT be used on the\n           currently selected mailbox.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 44]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n           The STATUS command MUST NOT be used as a \"check for new\n           messages in the selected mailbox\" operation (refer to\n           sections 7, 7.3.1, and 7.3.2 for more information about\n           the proper method for new message checking).\n\n           Because the STATUS command is not guaranteed to be fast\n           in its results, clients SHOULD NOT expect to be able to\n           issue many consecutive STATUS commands and obtain\n           reasonable performance.\n\n      The currently defined status data items that can be requested are:\n\n      MESSAGES\n         The number of messages in the mailbox.\n\n      RECENT\n         The number of messages with the \\Recent flag set.\n\n      UIDNEXT\n         The next unique identifier value of the mailbox.  Refer to\n         section 2.3.1.1 for more information.\n\n      UIDVALIDITY\n         The unique identifier validity value of the mailbox.  Refer to\n         section 2.3.1.1 for more information.\n\n      UNSEEN\n         The number of messages which do not have the \\Seen flag set.\n\n\n   Example:    C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)\n               S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)\n               S: A042 OK STATUS completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 45]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.3.11. APPEND Command\n\n   Arguments:  mailbox name\n               OPTIONAL flag parenthesized list\n               OPTIONAL date/time string\n               message literal\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - append completed\n               NO - append error: can't append to that mailbox, error\n                    in flags or date/time or message text\n               BAD - command unknown or arguments invalid\n\n      The APPEND command appends the literal argument as a new message\n      to the end of the specified destination mailbox.  This argument\n      SHOULD be in the format of an [RFC-2822] message.  8-bit\n      characters are permitted in the message.  A server implementation\n      that is unable to preserve 8-bit data properly MUST be able to\n      reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB]\n      content transfer encoding.\n\n           Note: There MAY be exceptions, e.g., draft messages, in\n           which required [RFC-2822] header lines are omitted in\n           the message literal argument to APPEND.  The full\n           implications of doing so MUST be understood and\n           carefully weighed.\n\n      If a flag parenthesized list is specified, the flags SHOULD be set\n      in the resulting message; otherwise, the flag list of the\n      resulting message is set to empty by default.  In either case, the\n      Recent flag is also set.\n\n      If a date-time is specified, the internal date SHOULD be set in\n      the resulting message; otherwise, the internal date of the\n      resulting message is set to the current date and time by default.\n\n      If the append is unsuccessful for any reason, the mailbox MUST be\n      restored to its state before the APPEND attempt; no partial\n      appending is permitted.\n\n      If the destination mailbox does not exist, a server MUST return an\n      error, and MUST NOT automatically create the mailbox.  Unless it\n      is certain that the destination mailbox can not be created, the\n      server MUST send the response code \"[TRYCREATE]\" as the prefix of\n      the text of the tagged NO response.  This gives a hint to the\n      client that it can attempt a CREATE command and retry the APPEND\n      if the CREATE is successful.\n\n\n\nCrispin                     Standards Track                    [Page 46]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      If the mailbox is currently selected, the normal new message\n      actions SHOULD occur.  Specifically, the server SHOULD notify the\n      client immediately via an untagged EXISTS response.  If the server\n      does not do so, the client MAY issue a NOOP command (or failing\n      that, a CHECK command) after one or more APPEND commands.\n\n   Example:    C: A003 APPEND saved-messages (\\Seen) {310}\n               S: + Ready for literal data\n               C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n               C: From: Fred Foobar <foobar@Blurdybloop.COM>\n               C: Subject: afternoon meeting\n               C: To: mooch@owatagu.siam.edu\n               C: Message-Id: <B27397-0100000@Blurdybloop.COM>\n               C: MIME-Version: 1.0\n               C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n               C:\n               C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n               C:\n               S: A003 OK APPEND completed\n\n        Note: The APPEND command is not used for message delivery,\n        because it does not provide a mechanism to transfer [SMTP]\n        envelope information.\n\n6.4.    Client Commands - Selected State\n\n   In the selected state, commands that manipulate messages in a mailbox\n   are permitted.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   and the authenticated state commands (SELECT, EXAMINE, CREATE,\n   DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and\n   APPEND), the following commands are valid in the selected state:\n   CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID.\n\n6.4.1.  CHECK Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - check completed\n               BAD - command unknown or arguments invalid\n\n      The CHECK command requests a checkpoint of the currently selected\n      mailbox.  A checkpoint refers to any implementation-dependent\n      housekeeping associated with the mailbox (e.g., resolving the\n      server's in-memory state of the mailbox with the state on its\n\n\n\nCrispin                     Standards Track                    [Page 47]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      disk) that is not normally executed as part of each command.  A\n      checkpoint MAY take a non-instantaneous amount of real time to\n      complete.  If a server implementation has no such housekeeping\n      considerations, CHECK is equivalent to NOOP.\n\n      There is no guarantee that an EXISTS untagged response will happen\n      as a result of CHECK.  NOOP, not CHECK, SHOULD be used for new\n      message polling.\n\n   Example:    C: FXXZ CHECK\n               S: FXXZ OK CHECK Completed\n\n\n6.4.2.  CLOSE Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - close completed, now in authenticated state\n               BAD - command unknown or arguments invalid\n\n      The CLOSE command permanently removes all messages that have the\n      \\Deleted flag set from the currently selected mailbox, and returns\n      to the authenticated state from the selected state.  No untagged\n      EXPUNGE responses are sent.\n\n      No messages are removed, and no error is given, if the mailbox is\n      selected by an EXAMINE command or is otherwise selected read-only.\n\n      Even if a mailbox is selected, a SELECT, EXAMINE, or LOGOUT\n      command MAY be issued without previously issuing a CLOSE command.\n      The SELECT, EXAMINE, and LOGOUT commands implicitly close the\n      currently selected mailbox without doing an expunge.  However,\n      when many messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT\n      sequence is considerably faster than an EXPUNGE-LOGOUT or\n      EXPUNGE-SELECT because no untagged EXPUNGE responses (which the\n      client would probably ignore) are sent.\n\n   Example:    C: A341 CLOSE\n               S: A341 OK CLOSE completed\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 48]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.4.3.  EXPUNGE Command\n\n   Arguments:  none\n\n   Responses:  untagged responses: EXPUNGE\n\n   Result:     OK - expunge completed\n               NO - expunge failure: can't expunge (e.g., permission\n                    denied)\n               BAD - command unknown or arguments invalid\n\n      The EXPUNGE command permanently removes all messages that have the\n      \\Deleted flag set from the currently selected mailbox.  Before\n      returning an OK to the client, an untagged EXPUNGE response is\n      sent for each message that is removed.\n\n   Example:    C: A202 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 5 EXPUNGE\n               S: * 8 EXPUNGE\n               S: A202 OK EXPUNGE completed\n\n        Note: In this example, messages 3, 4, 7, and 11 had the\n        \\Deleted flag set.  See the description of the EXPUNGE\n        response for further explanation.\n\n\n6.4.4.  SEARCH Command\n\n   Arguments:  OPTIONAL [CHARSET] specification\n               searching criteria (one or more)\n\n   Responses:  REQUIRED untagged response: SEARCH\n\n   Result:     OK - search completed\n               NO - search error: can't search that [CHARSET] or\n                    criteria\n               BAD - command unknown or arguments invalid\n\n      The SEARCH command searches the mailbox for messages that match\n      the given searching criteria.  Searching criteria consist of one\n      or more search keys.  The untagged SEARCH response from the server\n      contains a listing of message sequence numbers corresponding to\n      those messages that match the searching criteria.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 49]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      When multiple keys are specified, the result is the intersection\n      (AND function) of all the messages that match those keys.  For\n      example, the criteria DELETED FROM \"SMITH\" SINCE 1-Feb-1994 refers\n      to all deleted messages from Smith that were placed in the mailbox\n      since February 1, 1994.  A search key can also be a parenthesized\n      list of one or more search keys (e.g., for use with the OR and NOT\n      keys).\n\n      Server implementations MAY exclude [MIME-IMB] body parts with\n      terminal content media types other than TEXT and MESSAGE from\n      consideration in SEARCH matching.\n\n      The OPTIONAL [CHARSET] specification consists of the word\n      \"CHARSET\" followed by a registered [CHARSET].  It indicates the\n      [CHARSET] of the strings that appear in the search criteria.\n      [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in\n      [RFC-2822]/[MIME-IMB] headers, MUST be decoded before comparing\n      text in a [CHARSET] other than US-ASCII.  US-ASCII MUST be\n      supported; other [CHARSET]s MAY be supported.\n\n      If the server does not support the specified [CHARSET], it MUST\n      return a tagged NO response (not a BAD).  This response SHOULD\n      contain the BADCHARSET response code, which MAY list the\n      [CHARSET]s supported by the server.\n\n      In all search keys that use strings, a message matches the key if\n      the string is a substring of the field.  The matching is\n      case-insensitive.\n\n      The defined search keys are as follows.  Refer to the Formal\n      Syntax section for the precise syntactic definitions of the\n      arguments.\n\n      <sequence set>\n         Messages with message sequence numbers corresponding to the\n         specified message sequence number set.\n\n      ALL\n         All messages in the mailbox; the default initial key for\n         ANDing.\n\n      ANSWERED\n         Messages with the \\Answered flag set.\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 50]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      BCC <string>\n         Messages that contain the specified string in the envelope\n         structure's BCC field.\n\n      BEFORE <date>\n         Messages whose internal date (disregarding time and timezone)\n         is earlier than the specified date.\n\n      BODY <string>\n         Messages that contain the specified string in the body of the\n         message.\n\n      CC <string>\n         Messages that contain the specified string in the envelope\n         structure's CC field.\n\n      DELETED\n         Messages with the \\Deleted flag set.\n\n      DRAFT\n         Messages with the \\Draft flag set.\n\n      FLAGGED\n         Messages with the \\Flagged flag set.\n\n      FROM <string>\n         Messages that contain the specified string in the envelope\n         structure's FROM field.\n\n      HEADER <field-name> <string>\n         Messages that have a header with the specified field-name (as\n         defined in [RFC-2822]) and that contains the specified string\n         in the text of the header (what comes after the colon).  If the\n         string to search is zero-length, this matches all messages that\n         have a header line with the specified field-name regardless of\n         the contents.\n\n      KEYWORD <flag>\n         Messages with the specified keyword flag set.\n\n      LARGER <n>\n         Messages with an [RFC-2822] size larger than the specified\n         number of octets.\n\n      NEW\n         Messages that have the \\Recent flag set but not the \\Seen flag.\n         This is functionally equivalent to \"(RECENT UNSEEN)\".\n\n\n\n\nCrispin                     Standards Track                    [Page 51]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      NOT <search-key>\n         Messages that do not match the specified search key.\n\n      OLD\n         Messages that do not have the \\Recent flag set.  This is\n         functionally equivalent to \"NOT RECENT\" (as opposed to \"NOT\n         NEW\").\n\n      ON <date>\n         Messages whose internal date (disregarding time and timezone)\n         is within the specified date.\n\n      OR <search-key1> <search-key2>\n         Messages that match either search key.\n\n      RECENT\n         Messages that have the \\Recent flag set.\n\n      SEEN\n         Messages that have the \\Seen flag set.\n\n      SENTBEFORE <date>\n         Messages whose [RFC-2822] Date: header (disregarding time and\n         timezone) is earlier than the specified date.\n\n      SENTON <date>\n         Messages whose [RFC-2822] Date: header (disregarding time and\n         timezone) is within the specified date.\n\n      SENTSINCE <date>\n         Messages whose [RFC-2822] Date: header (disregarding time and\n         timezone) is within or later than the specified date.\n\n      SINCE <date>\n         Messages whose internal date (disregarding time and timezone)\n         is within or later than the specified date.\n\n      SMALLER <n>\n         Messages with an [RFC-2822] size smaller than the specified\n         number of octets.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 52]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      SUBJECT <string>\n         Messages that contain the specified string in the envelope\n         structure's SUBJECT field.\n\n      TEXT <string>\n         Messages that contain the specified string in the header or\n         body of the message.\n\n      TO <string>\n         Messages that contain the specified string in the envelope\n         structure's TO field.\n\n      UID <sequence set>\n         Messages with unique identifiers corresponding to the specified\n         unique identifier set.  Sequence set ranges are permitted.\n\n      UNANSWERED\n         Messages that do not have the \\Answered flag set.\n\n      UNDELETED\n         Messages that do not have the \\Deleted flag set.\n\n      UNDRAFT\n         Messages that do not have the \\Draft flag set.\n\n      UNFLAGGED\n         Messages that do not have the \\Flagged flag set.\n\n      UNKEYWORD <flag>\n         Messages that do not have the specified keyword flag set.\n\n      UNSEEN\n         Messages that do not have the \\Seen flag set.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 53]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Example:    C: A282 SEARCH FLAGGED SINCE 1-Feb-1994 NOT FROM \"Smith\"\n               S: * SEARCH 2 84 882\n               S: A282 OK SEARCH completed\n               C: A283 SEARCH TEXT \"string not in mailbox\"\n               S: * SEARCH\n               S: A283 OK SEARCH completed\n               C: A284 SEARCH CHARSET UTF-8 TEXT {6}\n               C: XXXXXX\n               S: * SEARCH 43\n               S: A284 OK SEARCH completed\n\n        Note: Since this document is restricted to 7-bit ASCII\n        text, it is not possible to show actual UTF-8 data.  The\n        \"XXXXXX\" is a placeholder for what would be 6 octets of\n        8-bit data in an actual transaction.\n\n\n6.4.5.  FETCH Command\n\n   Arguments:  sequence set\n               message data item names or macro\n\n   Responses:  untagged responses: FETCH\n\n   Result:     OK - fetch completed\n               NO - fetch error: can't fetch that data\n               BAD - command unknown or arguments invalid\n\n      The FETCH command retrieves data associated with a message in the\n      mailbox.  The data items to be fetched can be either a single atom\n      or a parenthesized list.\n\n      Most data items, identified in the formal syntax under the\n      msg-att-static rule, are static and MUST NOT change for any\n      particular message.  Other data items, identified in the formal\n      syntax under the msg-att-dynamic rule, MAY change, either as a\n      result of a STORE command or due to external events.\n\n           For example, if a client receives an ENVELOPE for a\n           message when it already knows the envelope, it can\n           safely ignore the newly transmitted envelope.\n\n      There are three macros which specify commonly-used sets of data\n      items, and can be used instead of data items.  A macro must be\n      used by itself, and not in conjunction with other macros or data\n      items.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 54]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      ALL\n         Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)\n\n      FAST\n         Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE)\n\n      FULL\n         Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE\n         BODY)\n\n      The currently defined data items that can be fetched are:\n\n      BODY\n         Non-extensible form of BODYSTRUCTURE.\n\n      BODY[<section>]<<partial>>\n         The text of a particular body section.  The section\n         specification is a set of zero or more part specifiers\n         delimited by periods.  A part specifier is either a part number\n         or one of the following: HEADER, HEADER.FIELDS,\n         HEADER.FIELDS.NOT, MIME, and TEXT.  An empty section\n         specification refers to the entire message, including the\n         header.\n\n         Every message has at least one part number.  Non-[MIME-IMB]\n         messages, and non-multipart [MIME-IMB] messages with no\n         encapsulated message, only have a part 1.\n\n         Multipart messages are assigned consecutive part numbers, as\n         they occur in the message.  If a particular part is of type\n         message or multipart, its parts MUST be indicated by a period\n         followed by the part number within that nested multipart part.\n\n         A part of type MESSAGE/RFC822 also has nested part numbers,\n         referring to parts of the MESSAGE part's body.\n\n         The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and TEXT part\n         specifiers can be the sole part specifier or can be prefixed by\n         one or more numeric part specifiers, provided that the numeric\n         part specifier refers to a part of type MESSAGE/RFC822.  The\n         MIME part specifier MUST be prefixed by one or more numeric\n         part specifiers.\n\n         The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT part\n         specifiers refer to the [RFC-2822] header of the message or of\n         an encapsulated [MIME-IMT] MESSAGE/RFC822 message.\n         HEADER.FIELDS and HEADER.FIELDS.NOT are followed by a list of\n         field-name (as defined in [RFC-2822]) names, and return a\n\n\n\nCrispin                     Standards Track                    [Page 55]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         subset of the header.  The subset returned by HEADER.FIELDS\n         contains only those header fields with a field-name that\n         matches one of the names in the list; similarly, the subset\n         returned by HEADER.FIELDS.NOT contains only the header fields\n         with a non-matching field-name.  The field-matching is\n         case-insensitive but otherwise exact.  Subsetting does not\n         exclude the [RFC-2822] delimiting blank line between the header\n         and the body; the blank line is included in all header fetches,\n         except in the case of a message which has no body and no blank\n         line.\n\n         The MIME part specifier refers to the [MIME-IMB] header for\n         this part.\n\n         The TEXT part specifier refers to the text body of the message,\n         omitting the [RFC-2822] header.\n\n            Here is an example of a complex message with some of its\n            part specifiers:\n\n       HEADER     ([RFC-2822] header of the message)\n       TEXT       ([RFC-2822] text body of the message) MULTIPART/MIXED\n       1          TEXT/PLAIN\n       2          APPLICATION/OCTET-STREAM\n       3          MESSAGE/RFC822\n       3.HEADER   ([RFC-2822] header of the message)\n       3.TEXT     ([RFC-2822] text body of the message) MULTIPART/MIXED\n       3.1        TEXT/PLAIN\n       3.2        APPLICATION/OCTET-STREAM\n       4          MULTIPART/MIXED\n       4.1        IMAGE/GIF\n       4.1.MIME   ([MIME-IMB] header for the IMAGE/GIF)\n       4.2        MESSAGE/RFC822\n       4.2.HEADER ([RFC-2822] header of the message)\n       4.2.TEXT   ([RFC-2822] text body of the message) MULTIPART/MIXED\n       4.2.1      TEXT/PLAIN\n       4.2.2      MULTIPART/ALTERNATIVE\n       4.2.2.1    TEXT/PLAIN\n       4.2.2.2    TEXT/RICHTEXT\n\n\n         It is possible to fetch a substring of the designated text.\n         This is done by appending an open angle bracket (\"<\"), the\n         octet position of the first desired octet, a period, the\n         maximum number of octets desired, and a close angle bracket\n         (\">\") to the part specifier.  If the starting octet is beyond\n         the end of the text, an empty string is returned.\n\n\n\n\nCrispin                     Standards Track                    [Page 56]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         Any partial fetch that attempts to read beyond the end of the\n         text is truncated as appropriate.  A partial fetch that starts\n         at octet 0 is returned as a partial fetch, even if this\n         truncation happened.\n\n            Note: This means that BODY[]<0.2048> of a 1500-octet message\n            will return BODY[]<0> with a literal of size 1500, not\n            BODY[].\n\n            Note: A substring fetch of a HEADER.FIELDS or\n            HEADER.FIELDS.NOT part specifier is calculated after\n            subsetting the header.\n\n         The \\Seen flag is implicitly set; if this causes the flags to\n         change, they SHOULD be included as part of the FETCH responses.\n\n      BODY.PEEK[<section>]<<partial>>\n         An alternate form of BODY[<section>] that does not implicitly\n         set the \\Seen flag.\n\n      BODYSTRUCTURE\n         The [MIME-IMB] body structure of the message.  This is computed\n         by the server by parsing the [MIME-IMB] header fields in the\n         [RFC-2822] header and [MIME-IMB] headers.\n\n      ENVELOPE\n         The envelope structure of the message.  This is computed by the\n         server by parsing the [RFC-2822] header into the component\n         parts, defaulting various fields as necessary.\n\n      FLAGS\n         The flags that are set for this message.\n\n      INTERNALDATE\n         The internal date of the message.\n\n      RFC822\n         Functionally equivalent to BODY[], differing in the syntax of\n         the resulting untagged FETCH data (RFC822 is returned).\n\n      RFC822.HEADER\n         Functionally equivalent to BODY.PEEK[HEADER], differing in the\n         syntax of the resulting untagged FETCH data (RFC822.HEADER is\n         returned).\n\n      RFC822.SIZE\n         The [RFC-2822] size of the message.\n\n\n\n\nCrispin                     Standards Track                    [Page 57]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      RFC822.TEXT\n         Functionally equivalent to BODY[TEXT], differing in the syntax\n         of the resulting untagged FETCH data (RFC822.TEXT is returned).\n\n      UID\n         The unique identifier for the message.\n\n\n   Example:    C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])\n               S: * 2 FETCH ....\n               S: * 3 FETCH ....\n               S: * 4 FETCH ....\n               S: A654 OK FETCH completed\n\n\n6.4.6.  STORE Command\n\n   Arguments:  sequence set\n               message data item name\n               value for message data item\n\n   Responses:  untagged responses: FETCH\n\n   Result:     OK - store completed\n               NO - store error: can't store that data\n               BAD - command unknown or arguments invalid\n\n      The STORE command alters data associated with a message in the\n      mailbox.  Normally, STORE will return the updated value of the\n      data with an untagged FETCH response.  A suffix of \".SILENT\" in\n      the data item name prevents the untagged FETCH, and the server\n      SHOULD assume that the client has determined the updated value\n      itself or does not care about the updated value.\n\n           Note: Regardless of whether or not the \".SILENT\" suffix\n           was used, the server SHOULD send an untagged FETCH\n           response if a change to a message's flags from an\n           external source is observed.  The intent is that the\n           status of the flags is determinate without a race\n           condition.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 58]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      The currently defined data items that can be stored are:\n\n      FLAGS <flag list>\n         Replace the flags for the message (other than \\Recent) with the\n         argument.  The new value of the flags is returned as if a FETCH\n         of those flags was done.\n\n      FLAGS.SILENT <flag list>\n         Equivalent to FLAGS, but without returning a new value.\n\n      +FLAGS <flag list>\n         Add the argument to the flags for the message.  The new value\n         of the flags is returned as if a FETCH of those flags was done.\n\n      +FLAGS.SILENT <flag list>\n         Equivalent to +FLAGS, but without returning a new value.\n\n      -FLAGS <flag list>\n         Remove the argument from the flags for the message.  The new\n         value of the flags is returned as if a FETCH of those flags was\n         done.\n\n      -FLAGS.SILENT <flag list>\n         Equivalent to -FLAGS, but without returning a new value.\n\n\n   Example:    C: A003 STORE 2:4 +FLAGS (\\Deleted)\n               S: * 2 FETCH (FLAGS (\\Deleted \\Seen))\n               S: * 3 FETCH (FLAGS (\\Deleted))\n               S: * 4 FETCH (FLAGS (\\Deleted \\Flagged \\Seen))\n               S: A003 OK STORE completed\n\n\n6.4.7.  COPY Command\n\n   Arguments:  sequence set\n               mailbox name\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - copy completed\n               NO - copy error: can't copy those messages or to that\n                    name\n               BAD - command unknown or arguments invalid\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 59]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      The COPY command copies the specified message(s) to the end of the\n      specified destination mailbox.  The flags and internal date of the\n      message(s) SHOULD be preserved, and the Recent flag SHOULD be set,\n      in the copy.\n\n      If the destination mailbox does not exist, a server SHOULD return\n      an error.  It SHOULD NOT automatically create the mailbox.  Unless\n      it is certain that the destination mailbox can not be created, the\n      server MUST send the response code \"[TRYCREATE]\" as the prefix of\n      the text of the tagged NO response.  This gives a hint to the\n      client that it can attempt a CREATE command and retry the COPY if\n      the CREATE is successful.\n\n      If the COPY command is unsuccessful for any reason, server\n      implementations MUST restore the destination mailbox to its state\n      before the COPY attempt.\n\n   Example:    C: A003 COPY 2:4 MEETING\n               S: A003 OK COPY completed\n\n\n6.4.8.  UID Command\n\n   Arguments:  command name\n               command arguments\n\n   Responses:  untagged responses: FETCH, SEARCH\n\n   Result:     OK - UID command completed\n               NO - UID command error\n               BAD - command unknown or arguments invalid\n\n      The UID command has two forms.  In the first form, it takes as its\n      arguments a COPY, FETCH, or STORE command with arguments\n      appropriate for the associated command.  However, the numbers in\n      the sequence set argument are unique identifiers instead of\n      message sequence numbers.  Sequence set ranges are permitted, but\n      there is no guarantee that unique identifiers will be contiguous.\n\n      A non-existent unique identifier is ignored without any error\n      message generated.  Thus, it is possible for a UID FETCH command\n      to return an OK without any data or a UID COPY or UID STORE to\n      return an OK without performing any operations.\n\n      In the second form, the UID command takes a SEARCH command with\n      SEARCH command arguments.  The interpretation of the arguments is\n      the same as with SEARCH; however, the numbers returned in a SEARCH\n      response for a UID SEARCH command are unique identifiers instead\n\n\n\nCrispin                     Standards Track                    [Page 60]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      of message sequence numbers.  For example, the command UID SEARCH\n      1:100 UID 443:557 returns the unique identifiers corresponding to\n      the intersection of two sequence sets, the message sequence number\n      range 1:100 and the UID range 443:557.\n\n           Note: in the above example, the UID range 443:557\n           appears.  The same comment about a non-existent unique\n           identifier being ignored without any error message also\n           applies here.  Hence, even if neither UID 443 or 557\n           exist, this range is valid and would include an existing\n           UID 495.\n\n           Also note that a UID range of 559:* always includes the\n           UID of the last message in the mailbox, even if 559 is\n           higher than any assigned UID value.  This is because the\n           contents of a range are independent of the order of the\n           range endpoints.  Thus, any UID range with * as one of\n           the endpoints indicates at least one message (the\n           message with the highest numbered UID), unless the\n           mailbox is empty.\n\n      The number after the \"*\" in an untagged FETCH response is always a\n      message sequence number, not a unique identifier, even for a UID\n      command response.  However, server implementations MUST implicitly\n      include the UID message data item as part of any FETCH response\n      caused by a UID command, regardless of whether a UID was specified\n      as a message data item to the FETCH.\n\n\n      Note: The rule about including the UID message data item as part\n      of a FETCH response primarily applies to the UID FETCH and UID\n      STORE commands, including a UID FETCH command that does not\n      include UID as a message data item.  Although it is unlikely that\n      the other UID commands will cause an untagged FETCH, this rule\n      applies to these commands as well.\n\n   Example:    C: A999 UID FETCH 4827313:4828442 FLAGS\n               S: * 23 FETCH (FLAGS (\\Seen) UID 4827313)\n               S: * 24 FETCH (FLAGS (\\Seen) UID 4827943)\n               S: * 25 FETCH (FLAGS (\\Seen) UID 4828442)\n               S: A999 OK UID FETCH completed\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 61]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n6.5.    Client Commands - Experimental/Expansion\n\n\n6.5.1.  X<atom> Command\n\n   Arguments:  implementation defined\n\n   Responses:  implementation defined\n\n   Result:     OK - command completed\n               NO - failure\n               BAD - command unknown or arguments invalid\n\n      Any command prefixed with an X is an experimental command.\n      Commands which are not part of this specification, a standard or\n      standards-track revision of this specification, or an\n      IESG-approved experimental protocol, MUST use the X prefix.\n\n      Any added untagged responses issued by an experimental command\n      MUST also be prefixed with an X.  Server implementations MUST NOT\n      send any such untagged responses, unless the client requested it\n      by issuing the associated experimental command.\n\n   Example:    C: a441 CAPABILITY\n               S: * CAPABILITY IMAP4rev1 XPIG-LATIN\n               S: a441 OK CAPABILITY completed\n               C: A442 XPIG-LATIN\n               S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay\n               S: A442 OK XPIG-LATIN ompleted-cay\n\n7.      Server Responses\n\n   Server responses are in three forms: status responses, server data,\n   and command continuation request.  The information contained in a\n   server response, identified by \"Contents:\" in the response\n   descriptions below, is described by function, not by syntax.  The\n   precise syntax of server responses is described in the Formal Syntax\n   section.\n\n   The client MUST be prepared to accept any response at all times.\n\n   Status responses can be tagged or untagged.  Tagged status responses\n   indicate the completion result (OK, NO, or BAD status) of a client\n   command, and have a tag matching the command.\n\n   Some status responses, and all server data, are untagged.  An\n   untagged response is indicated by the token \"*\" instead of a tag.\n   Untagged status responses indicate server greeting, or server status\n\n\n\nCrispin                     Standards Track                    [Page 62]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   that does not indicate the completion of a command (for example, an\n   impending system shutdown alert).  For historical reasons, untagged\n   server data responses are also called \"unsolicited data\", although\n   strictly speaking, only unilateral server data is truly\n   \"unsolicited\".\n\n   Certain server data MUST be recorded by the client when it is\n   received; this is noted in the description of that data.  Such data\n   conveys critical information which affects the interpretation of all\n   subsequent commands and responses (e.g., updates reflecting the\n   creation or destruction of messages).\n\n   Other server data SHOULD be recorded for later reference; if the\n   client does not need to record the data, or if recording the data has\n   no obvious purpose (e.g., a SEARCH response when no SEARCH command is\n   in progress), the data SHOULD be ignored.\n\n   An example of unilateral untagged server data occurs when the IMAP\n   connection is in the selected state.  In the selected state, the\n   server checks the mailbox for new messages as part of command\n   execution.  Normally, this is part of the execution of every command;\n   hence, a NOOP command suffices to check for new messages.  If new\n   messages are found, the server sends untagged EXISTS and RECENT\n   responses reflecting the new size of the mailbox.  Server\n   implementations that offer multiple simultaneous access to the same\n   mailbox SHOULD also send appropriate unilateral untagged FETCH and\n   EXPUNGE responses if another agent changes the state of any message\n   flags or expunges any messages.\n\n   Command continuation request responses use the token \"+\" instead of a\n   tag.  These responses are sent by the server to indicate acceptance\n   of an incomplete client command and readiness for the remainder of\n   the command.\n\n7.1.    Server Responses - Status Responses\n\n   Status responses are OK, NO, BAD, PREAUTH and BYE.  OK, NO, and BAD\n   can be tagged or untagged.  PREAUTH and BYE are always untagged.\n\n   Status responses MAY include an OPTIONAL \"response code\".  A response\n   code consists of data inside square brackets in the form of an atom,\n   possibly followed by a space and arguments.  The response code\n   contains additional information or status codes for client software\n   beyond the OK/NO/BAD condition, and are defined when there is a\n   specific action that a client can take based upon the additional\n   information.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 63]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   The currently defined response codes are:\n\n      ALERT\n\n         The human-readable text contains a special alert that MUST be\n         presented to the user in a fashion that calls the user's\n         attention to the message.\n\n      BADCHARSET\n\n         Optionally followed by a parenthesized list of charsets.  A\n         SEARCH failed because the given charset is not supported by\n         this implementation.  If the optional list of charsets is\n         given, this lists the charsets that are supported by this\n         implementation.\n\n      CAPABILITY\n\n         Followed by a list of capabilities.  This can appear in the\n         initial OK or PREAUTH response to transmit an initial\n         capabilities list.  This makes it unnecessary for a client to\n         send a separate CAPABILITY command if it recognizes this\n         response.\n\n      PARSE\n\n         The human-readable text represents an error in parsing the\n         [RFC-2822] header or [MIME-IMB] headers of a message in the\n         mailbox.\n\n      PERMANENTFLAGS\n\n         Followed by a parenthesized list of flags, indicates which of\n         the known flags the client can change permanently.  Any flags\n         that are in the FLAGS untagged response, but not the\n         PERMANENTFLAGS list, can not be set permanently.  If the client\n         attempts to STORE a flag that is not in the PERMANENTFLAGS\n         list, the server will either ignore the change or store the\n         state change for the remainder of the current session only.\n         The PERMANENTFLAGS list can also include the special flag \\*,\n         which indicates that it is possible to create new keywords by\n         attempting to store those flags in the mailbox.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 64]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      READ-ONLY\n\n         The mailbox is selected read-only, or its access while selected\n         has changed from read-write to read-only.\n\n      READ-WRITE\n\n         The mailbox is selected read-write, or its access while\n         selected has changed from read-only to read-write.\n\n      TRYCREATE\n\n         An APPEND or COPY attempt is failing because the target mailbox\n         does not exist (as opposed to some other reason).  This is a\n         hint to the client that the operation can succeed if the\n         mailbox is first created by the CREATE command.\n\n      UIDNEXT\n\n         Followed by a decimal number, indicates the next unique\n         identifier value.  Refer to section 2.3.1.1 for more\n         information.\n\n      UIDVALIDITY\n\n         Followed by a decimal number, indicates the unique identifier\n         validity value.  Refer to section 2.3.1.1 for more information.\n\n      UNSEEN\n\n         Followed by a decimal number, indicates the number of the first\n         message without the \\Seen flag set.\n\n      Additional response codes defined by particular client or server\n      implementations SHOULD be prefixed with an \"X\" until they are\n      added to a revision of this protocol.  Client implementations\n      SHOULD ignore response codes that they do not recognize.\n\n7.1.1.  OK Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The OK response indicates an information message from the server.\n      When tagged, it indicates successful completion of the associated\n      command.  The human-readable text MAY be presented to the user as\n      an information message.  The untagged form indicates an\n\n\n\n\nCrispin                     Standards Track                    [Page 65]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      information-only message; the nature of the information MAY be\n      indicated by a response code.\n\n      The untagged form is also used as one of three possible greetings\n      at connection startup.  It indicates that the connection is not\n      yet authenticated and that a LOGIN command is needed.\n\n   Example:    S: * OK IMAP4rev1 server ready\n               C: A001 LOGIN fred blurdybloop\n               S: * OK [ALERT] System shutdown in 10 minutes\n               S: A001 OK LOGIN Completed\n\n\n7.1.2.  NO Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The NO response indicates an operational error message from the\n      server.  When tagged, it indicates unsuccessful completion of the\n      associated command.  The untagged form indicates a warning; the\n      command can still complete successfully.  The human-readable text\n      describes the condition.\n\n   Example:    C: A222 COPY 1:2 owatagusiam\n               S: * NO Disk is 98% full, please delete unnecessary data\n               S: A222 OK COPY completed\n               C: A223 COPY 3:200 blurdybloop\n               S: * NO Disk is 98% full, please delete unnecessary data\n               S: * NO Disk is 99% full, please delete unnecessary data\n               S: A223 NO COPY failed: disk is full\n\n\n7.1.3.  BAD Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The BAD response indicates an error message from the server.  When\n      tagged, it reports a protocol-level error in the client's command;\n      the tag indicates the command that caused the error.  The untagged\n      form indicates a protocol-level error for which the associated\n      command can not be determined; it can also indicate an internal\n      server failure.  The human-readable text describes the condition.\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 66]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Example:    C: ...very long command line...\n               S: * BAD Command line too long\n               C: ...empty line...\n               S: * BAD Empty command line\n               C: A443 EXPUNGE\n               S: * BAD Disk crash, attempting salvage to a new disk!\n               S: * OK Salvage successful, no data lost\n               S: A443 OK Expunge completed\n\n\n7.1.4.  PREAUTH Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The PREAUTH response is always untagged, and is one of three\n      possible greetings at connection startup.  It indicates that the\n      connection has already been authenticated by external means; thus\n      no LOGIN command is needed.\n\n   Example:    S: * PREAUTH IMAP4rev1 server logged in as Smith\n\n\n7.1.5.  BYE Response\n\n   Contents:   OPTIONAL response code\n               human-readable text\n\n      The BYE response is always untagged, and indicates that the server\n      is about to close the connection.  The human-readable text MAY be\n      displayed to the user in a status report by the client.  The BYE\n      response is sent under one of four conditions:\n\n         1) as part of a normal logout sequence.  The server will close\n            the connection after sending the tagged OK response to the\n            LOGOUT command.\n\n         2) as a panic shutdown announcement.  The server closes the\n            connection immediately.\n\n         3) as an announcement of an inactivity autologout.  The server\n            closes the connection immediately.\n\n         4) as one of three possible greetings at connection startup,\n            indicating that the server is not willing to accept a\n            connection from this client.  The server closes the\n            connection immediately.\n\n\n\n\nCrispin                     Standards Track                    [Page 67]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      The difference between a BYE that occurs as part of a normal\n      LOGOUT sequence (the first case) and a BYE that occurs because of\n      a failure (the other three cases) is that the connection closes\n      immediately in the failure case.  In all cases the client SHOULD\n      continue to read response data from the server until the\n      connection is closed; this will ensure that any pending untagged\n      or completion responses are read and processed.\n\n   Example:    S: * BYE Autologout; idle for too long\n\n7.2.    Server Responses - Server and Mailbox Status\n\n   These responses are always untagged.  This is how server and mailbox\n   status data are transmitted from the server to the client.  Many of\n   these responses typically result from a command with the same name.\n\n7.2.1.  CAPABILITY Response\n\n   Contents:   capability listing\n\n      The CAPABILITY response occurs as a result of a CAPABILITY\n      command.  The capability listing contains a space-separated\n      listing of capability names that the server supports.  The\n      capability listing MUST include the atom \"IMAP4rev1\".\n\n      In addition, client and server implementations MUST implement the\n      STARTTLS, LOGINDISABLED, and AUTH=PLAIN (described in [IMAP-TLS])\n      capabilities.  See the Security Considerations section for\n      important information.\n\n      A capability name which begins with \"AUTH=\" indicates that the\n      server supports that particular authentication mechanism.\n\n      The LOGINDISABLED capability indicates that the LOGIN command is\n      disabled, and that the server will respond with a tagged NO\n      response to any attempt to use the LOGIN command even if the user\n      name and password are valid.  An IMAP client MUST NOT issue the\n      LOGIN command if the server advertises the LOGINDISABLED\n      capability.\n\n      Other capability names indicate that the server supports an\n      extension, revision, or amendment to the IMAP4rev1 protocol.\n      Server responses MUST conform to this document until the client\n      issues a command that uses the associated capability.\n\n      Capability names MUST either begin with \"X\" or be standard or\n      standards-track IMAP4rev1 extensions, revisions, or amendments\n      registered with IANA.  A server MUST NOT offer unregistered or\n\n\n\nCrispin                     Standards Track                    [Page 68]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      non-standard capability names, unless such names are prefixed with\n      an \"X\".\n\n      Client implementations SHOULD NOT require any capability name\n      other than \"IMAP4rev1\", and MUST ignore any unknown capability\n      names.\n\n      A server MAY send capabilities automatically, by using the\n      CAPABILITY response code in the initial PREAUTH or OK responses,\n      and by sending an updated CAPABILITY response code in the tagged\n      OK response as part of a successful authentication.  It is\n      unnecessary for a client to send a separate CAPABILITY command if\n      it recognizes these automatic capabilities.\n\n   Example:    S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI XPIG-LATIN\n\n\n7.2.2.  LIST Response\n\n   Contents:   name attributes\n               hierarchy delimiter\n               name\n\n      The LIST response occurs as a result of a LIST command.  It\n      returns a single name that matches the LIST specification.  There\n      can be multiple LIST responses for a single LIST command.\n\n      Four name attributes are defined:\n\n      \\Noinferiors\n         It is not possible for any child levels of hierarchy to exist\n         under this name; no child levels exist now and none can be\n         created in the future.\n\n      \\Noselect\n         It is not possible to use this name as a selectable mailbox.\n\n      \\Marked\n         The mailbox has been marked \"interesting\" by the server; the\n         mailbox probably contains messages that have been added since\n         the last time the mailbox was selected.\n\n      \\Unmarked\n         The mailbox does not contain any additional messages since the\n         last time the mailbox was selected.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 69]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      If it is not feasible for the server to determine whether or not\n      the mailbox is \"interesting\", or if the name is a \\Noselect name,\n      the server SHOULD NOT send either \\Marked or \\Unmarked.\n\n      The hierarchy delimiter is a character used to delimit levels of\n      hierarchy in a mailbox name.  A client can use it to create child\n      mailboxes, and to search higher or lower levels of naming\n      hierarchy.  All children of a top-level hierarchy node MUST use\n      the same separator character.  A NIL hierarchy delimiter means\n      that no hierarchy exists; the name is a \"flat\" name.\n\n      The name represents an unambiguous left-to-right hierarchy, and\n      MUST be valid for use as a reference in LIST and LSUB commands.\n      Unless \\Noselect is indicated, the name MUST also be valid as an\n      argument for commands, such as SELECT, that accept mailbox names.\n\n   Example:    S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n\n\n7.2.3.  LSUB Response\n\n   Contents:   name attributes\n               hierarchy delimiter\n               name\n\n      The LSUB response occurs as a result of an LSUB command.  It\n      returns a single name that matches the LSUB specification.  There\n      can be multiple LSUB responses for a single LSUB command.  The\n      data is identical in format to the LIST response.\n\n   Example:    S: * LSUB () \".\" #news.comp.mail.misc\n\n\n7.2.4   STATUS Response\n\n   Contents:   name\n               status parenthesized list\n\n      The STATUS response occurs as a result of an STATUS command.  It\n      returns the mailbox name that matches the STATUS specification and\n      the requested mailbox status information.\n\n   Example:    S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 70]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n7.2.5.  SEARCH Response\n\n   Contents:   zero or more numbers\n\n      The SEARCH response occurs as a result of a SEARCH or UID SEARCH\n      command.  The number(s) refer to those messages that match the\n      search criteria.  For SEARCH, these are message sequence numbers;\n      for UID SEARCH, these are unique identifiers.  Each number is\n      delimited by a space.\n\n   Example:    S: * SEARCH 2 3 6\n\n\n7.2.6.  FLAGS Response\n\n   Contents:   flag parenthesized list\n\n      The FLAGS response occurs as a result of a SELECT or EXAMINE\n      command.  The flag parenthesized list identifies the flags (at a\n      minimum, the system-defined flags) that are applicable for this\n      mailbox.  Flags other than the system flags can also exist,\n      depending on server implementation.\n\n      The update from the FLAGS response MUST be recorded by the client.\n\n   Example:    S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n\n\n7.3.    Server Responses - Mailbox Size\n\n   These responses are always untagged.  This is how changes in the size\n   of the mailbox are transmitted from the server to the client.\n   Immediately following the \"*\" token is a number that represents a\n   message count.\n\n7.3.1.  EXISTS Response\n\n   Contents:   none\n\n      The EXISTS response reports the number of messages in the mailbox.\n      This response occurs as a result of a SELECT or EXAMINE command,\n      and if the size of the mailbox changes (e.g., new messages).\n\n      The update from the EXISTS response MUST be recorded by the\n      client.\n\n   Example:    S: * 23 EXISTS\n\n\n\n\nCrispin                     Standards Track                    [Page 71]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n7.3.2.  RECENT Response\n\n   Contents:   none\n\n      The RECENT response reports the number of messages with the\n      \\Recent flag set.  This response occurs as a result of a SELECT or\n      EXAMINE command, and if the size of the mailbox changes (e.g., new\n      messages).\n\n           Note: It is not guaranteed that the message sequence\n           numbers of recent messages will be a contiguous range of\n           the highest n messages in the mailbox (where n is the\n           value reported by the RECENT response).  Examples of\n           situations in which this is not the case are: multiple\n           clients having the same mailbox open (the first session\n           to be notified will see it as recent, others will\n           probably see it as non-recent), and when the mailbox is\n           re-ordered by a non-IMAP agent.\n\n           The only reliable way to identify recent messages is to\n           look at message flags to see which have the \\Recent flag\n           set, or to do a SEARCH RECENT.\n\n      The update from the RECENT response MUST be recorded by the\n      client.\n\n   Example:    S: * 5 RECENT\n\n\n7.4.    Server Responses - Message Status\n\n   These responses are always untagged.  This is how message data are\n   transmitted from the server to the client, often as a result of a\n   command with the same name.  Immediately following the \"*\" token is a\n   number that represents a message sequence number.\n\n7.4.1.  EXPUNGE Response\n\n   Contents:   none\n\n      The EXPUNGE response reports that the specified message sequence\n      number has been permanently removed from the mailbox.  The message\n      sequence number for each successive message in the mailbox is\n      immediately decremented by 1, and this decrement is reflected in\n      message sequence numbers in subsequent responses (including other\n      untagged EXPUNGE responses).\n\n\n\n\n\nCrispin                     Standards Track                    [Page 72]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      The EXPUNGE response also decrements the number of messages in the\n      mailbox; it is not necessary to send an EXISTS response with the\n      new value.\n\n      As a result of the immediate decrement rule, message sequence\n      numbers that appear in a set of successive EXPUNGE responses\n      depend upon whether the messages are removed starting from lower\n      numbers to higher numbers, or from higher numbers to lower\n      numbers.  For example, if the last 5 messages in a 9-message\n      mailbox are expunged, a \"lower to higher\" server will send five\n      untagged EXPUNGE responses for message sequence number 5, whereas\n      a \"higher to lower server\" will send successive untagged EXPUNGE\n      responses for message sequence numbers 9, 8, 7, 6, and 5.\n\n      An EXPUNGE response MUST NOT be sent when no command is in\n      progress, nor while responding to a FETCH, STORE, or SEARCH\n      command.  This rule is necessary to prevent a loss of\n      synchronization of message sequence numbers between client and\n      server.  A command is not \"in progress\" until the complete command\n      has been received; in particular, a command is not \"in progress\"\n      during the negotiation of command continuation.\n\n           Note: UID FETCH, UID STORE, and UID SEARCH are different\n           commands from FETCH, STORE, and SEARCH.  An EXPUNGE\n           response MAY be sent during a UID command.\n\n      The update from the EXPUNGE response MUST be recorded by the\n      client.\n\n   Example:    S: * 44 EXPUNGE\n\n\n7.4.2.  FETCH Response\n\n   Contents:   message data\n\n      The FETCH response returns data about a message to the client.\n      The data are pairs of data item names and their values in\n      parentheses.  This response occurs as the result of a FETCH or\n      STORE command, as well as by unilateral server decision (e.g.,\n      flag updates).\n\n      The current data items are:\n\n      BODY\n         A form of BODYSTRUCTURE without extension data.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 73]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      BODY[<section>]<<origin octet>>\n         A string expressing the body contents of the specified section.\n         The string SHOULD be interpreted by the client according to the\n         content transfer encoding, body type, and subtype.\n\n         If the origin octet is specified, this string is a substring of\n         the entire body contents, starting at that origin octet.  This\n         means that BODY[]<0> MAY be truncated, but BODY[] is NEVER\n         truncated.\n\n            Note: The origin octet facility MUST NOT be used by a server\n            in a FETCH response unless the client specifically requested\n            it by means of a FETCH of a BODY[<section>]<<partial>> data\n            item.\n\n         8-bit textual data is permitted if a [CHARSET] identifier is\n         part of the body parameter parenthesized list for this section.\n         Note that headers (part specifiers HEADER or MIME, or the\n         header portion of a MESSAGE/RFC822 part), MUST be 7-bit; 8-bit\n         characters are not permitted in headers.  Note also that the\n         [RFC-2822] delimiting blank line between the header and the\n         body is not affected by header line subsetting; the blank line\n         is always included as part of header data, except in the case\n         of a message which has no body and no blank line.\n\n         Non-textual data such as binary data MUST be transfer encoded\n         into a textual form, such as BASE64, prior to being sent to the\n         client.  To derive the original binary data, the client MUST\n         decode the transfer encoded string.\n\n      BODYSTRUCTURE\n         A parenthesized list that describes the [MIME-IMB] body\n         structure of a message.  This is computed by the server by\n         parsing the [MIME-IMB] header fields, defaulting various fields\n         as necessary.\n\n         For example, a simple text message of 48 lines and 2279 octets\n         can have a body structure of: (\"TEXT\" \"PLAIN\" (\"CHARSET\"\n         \"US-ASCII\") NIL NIL \"7BIT\" 2279 48)\n\n         Multiple parts are indicated by parenthesis nesting.  Instead\n         of a body type as the first element of the parenthesized list,\n         there is a sequence of one or more nested body structures.  The\n         second element of the parenthesized list is the multipart\n         subtype (mixed, digest, parallel, alternative, etc.).\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 74]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         For example, a two part message consisting of a text and a\n         BASE64-encoded text attachment can have a body structure of:\n         ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 1152\n         23)(\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\" \"NAME\" \"cc.diff\")\n         \"<960723163407.20117h@cac.washington.edu>\" \"Compiler diff\"\n         \"BASE64\" 4554 73) \"MIXED\")\n\n         Extension data follows the multipart subtype.  Extension data\n         is never returned with the BODY fetch, but can be returned with\n         a BODYSTRUCTURE fetch.  Extension data, if present, MUST be in\n         the defined order.  The extension data of a multipart body part\n         are in the following order:\n\n         body parameter parenthesized list\n            A parenthesized list of attribute/value pairs [e.g., (\"foo\"\n            \"bar\" \"baz\" \"rag\") where \"bar\" is the value of \"foo\", and\n            \"rag\" is the value of \"baz\"] as defined in [MIME-IMB].\n\n         body disposition\n            A parenthesized list, consisting of a disposition type\n            string, followed by a parenthesized list of disposition\n            attribute/value pairs as defined in [DISPOSITION].\n\n         body language\n            A string or parenthesized list giving the body language\n            value as defined in [LANGUAGE-TAGS].\n\n         body location\n            A string list giving the body content URI as defined in\n            [LOCATION].\n\n         Any following extension data are not yet defined in this\n         version of the protocol.  Such extension data can consist of\n         zero or more NILs, strings, numbers, or potentially nested\n         parenthesized lists of such data.  Client implementations that\n         do a BODYSTRUCTURE fetch MUST be prepared to accept such\n         extension data.  Server implementations MUST NOT send such\n         extension data until it has been defined by a revision of this\n         protocol.\n\n         The basic fields of a non-multipart body part are in the\n         following order:\n\n         body type\n            A string giving the content media type name as defined in\n            [MIME-IMB].\n\n\n\n\n\nCrispin                     Standards Track                    [Page 75]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         body subtype\n            A string giving the content subtype name as defined in\n            [MIME-IMB].\n\n         body parameter parenthesized list\n            A parenthesized list of attribute/value pairs [e.g., (\"foo\"\n            \"bar\" \"baz\" \"rag\") where \"bar\" is the value of \"foo\" and\n            \"rag\" is the value of \"baz\"] as defined in [MIME-IMB].\n\n         body id\n            A string giving the content id as defined in [MIME-IMB].\n\n         body description\n            A string giving the content description as defined in\n            [MIME-IMB].\n\n         body encoding\n            A string giving the content transfer encoding as defined in\n            [MIME-IMB].\n\n         body size\n            A number giving the size of the body in octets.  Note that\n            this size is the size in its transfer encoding and not the\n            resulting size after any decoding.\n\n         A body type of type MESSAGE and subtype RFC822 contains,\n         immediately after the basic fields, the envelope structure,\n         body structure, and size in text lines of the encapsulated\n         message.\n\n         A body type of type TEXT contains, immediately after the basic\n         fields, the size of the body in text lines.  Note that this\n         size is the size in its content transfer encoding and not the\n         resulting size after any decoding.\n\n         Extension data follows the basic fields and the type-specific\n         fields listed above.  Extension data is never returned with the\n         BODY fetch, but can be returned with a BODYSTRUCTURE fetch.\n         Extension data, if present, MUST be in the defined order.\n\n         The extension data of a non-multipart body part are in the\n         following order:\n\n         body MD5\n            A string giving the body MD5 value as defined in [MD5].\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 76]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n         body disposition\n            A parenthesized list with the same content and function as\n            the body disposition for a multipart body part.\n\n         body language\n            A string or parenthesized list giving the body language\n            value as defined in [LANGUAGE-TAGS].\n\n         body location\n            A string list giving the body content URI as defined in\n            [LOCATION].\n\n         Any following extension data are not yet defined in this\n         version of the protocol, and would be as described above under\n         multipart extension data.\n\n      ENVELOPE\n         A parenthesized list that describes the envelope structure of a\n         message.  This is computed by the server by parsing the\n         [RFC-2822] header into the component parts, defaulting various\n         fields as necessary.\n\n         The fields of the envelope structure are in the following\n         order: date, subject, from, sender, reply-to, to, cc, bcc,\n         in-reply-to, and message-id.  The date, subject, in-reply-to,\n         and message-id fields are strings.  The from, sender, reply-to,\n         to, cc, and bcc fields are parenthesized lists of address\n         structures.\n\n         An address structure is a parenthesized list that describes an\n         electronic mail address.  The fields of an address structure\n         are in the following order: personal name, [SMTP]\n         at-domain-list (source route), mailbox name, and host name.\n\n         [RFC-2822] group syntax is indicated by a special form of\n         address structure in which the host name field is NIL.  If the\n         mailbox name field is also NIL, this is an end of group marker\n         (semi-colon in RFC 822 syntax).  If the mailbox name field is\n         non-NIL, this is a start of group marker, and the mailbox name\n         field holds the group name phrase.\n\n         If the Date, Subject, In-Reply-To, and Message-ID header lines\n         are absent in the [RFC-2822] header, the corresponding member\n         of the envelope is NIL; if these header lines are present but\n         empty the corresponding member of the envelope is the empty\n         string.\n\n\n\n\n\nCrispin                     Standards Track                    [Page 77]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n            Note: some servers may return a NIL envelope member in the\n            \"present but empty\" case.  Clients SHOULD treat NIL and\n            empty string as identical.\n\n            Note: [RFC-2822] requires that all messages have a valid\n            Date header.  Therefore, the date member in the envelope can\n            not be NIL or the empty string.\n\n            Note: [RFC-2822] requires that the In-Reply-To and\n            Message-ID headers, if present, have non-empty content.\n            Therefore, the in-reply-to and message-id members in the\n            envelope can not be the empty string.\n\n         If the From, To, cc, and bcc header lines are absent in the\n         [RFC-2822] header, or are present but empty, the corresponding\n         member of the envelope is NIL.\n\n         If the Sender or Reply-To lines are absent in the [RFC-2822]\n         header, or are present but empty, the server sets the\n         corresponding member of the envelope to be the same value as\n         the from member (the client is not expected to know to do\n         this).\n\n            Note: [RFC-2822] requires that all messages have a valid\n            From header.  Therefore, the from, sender, and reply-to\n            members in the envelope can not be NIL.\n\n      FLAGS\n         A parenthesized list of flags that are set for this message.\n\n      INTERNALDATE\n         A string representing the internal date of the message.\n\n      RFC822\n         Equivalent to BODY[].\n\n      RFC822.HEADER\n         Equivalent to BODY[HEADER].  Note that this did not result in\n         \\Seen being set, because RFC822.HEADER response data occurs as\n         a result of a FETCH of RFC822.HEADER.  BODY[HEADER] response\n         data occurs as a result of a FETCH of BODY[HEADER] (which sets\n         \\Seen) or BODY.PEEK[HEADER] (which does not set \\Seen).\n\n      RFC822.SIZE\n         A number expressing the [RFC-2822] size of the message.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 78]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n      RFC822.TEXT\n         Equivalent to BODY[TEXT].\n\n      UID\n         A number expressing the unique identifier of the message.\n\n\n   Example:    S: * 23 FETCH (FLAGS (\\Seen) RFC822.SIZE 44827)\n\n\n7.5.    Server Responses - Command Continuation Request\n\n   The command continuation request response is indicated by a \"+\" token\n   instead of a tag.  This form of response indicates that the server is\n   ready to accept the continuation of a command from the client.  The\n   remainder of this response is a line of text.\n\n   This response is used in the AUTHENTICATE command to transmit server\n   data to the client, and request additional client data.  This\n   response is also used if an argument to any command is a literal.\n\n   The client is not permitted to send the octets of the literal unless\n   the server indicates that it is expected.  This permits the server to\n   process commands and reject errors on a line-by-line basis.  The\n   remainder of the command, including the CRLF that terminates a\n   command, follows the octets of the literal.  If there are any\n   additional command arguments, the literal octets are followed by a\n   space and those arguments.\n\n   Example:    C: A001 LOGIN {11}\n               S: + Ready for additional command text\n               C: FRED FOOBAR {7}\n               S: + Ready for additional command text\n               C: fat man\n               S: A001 OK LOGIN completed\n               C: A044 BLURDYBLOOP {102856}\n               S: A044 BAD No such command as \"BLURDYBLOOP\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 79]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n8.      Sample IMAP4rev1 connection\n\n   The following is a transcript of an IMAP4rev1 connection.  A long\n   line in this sample is broken for editorial clarity.\n\nS:   * OK IMAP4rev1 Service Ready\nC:   a001 login mrc secret\nS:   a001 OK LOGIN completed\nC:   a002 select inbox\nS:   * 18 EXISTS\nS:   * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\nS:   * 2 RECENT\nS:   * OK [UNSEEN 17] Message 17 is the first unseen message\nS:   * OK [UIDVALIDITY 3857529045] UIDs valid\nS:   a002 OK [READ-WRITE] SELECT completed\nC:   a003 fetch 12 full\nS:   * 12 FETCH (FLAGS (\\Seen) INTERNALDATE \"17-Jul-1996 02:44:25 -0700\"\n      RFC822.SIZE 4286 ENVELOPE (\"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\"\n      \"IMAP4rev1 WG mtg summary and minutes\"\n      ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n      ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n      ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n      ((NIL NIL \"imap\" \"cac.washington.edu\"))\n      ((NIL NIL \"minutes\" \"CNRI.Reston.VA.US\")\n      (\"John Klensin\" NIL \"KLENSIN\" \"MIT.EDU\")) NIL NIL\n      \"<B27397-0100000@cac.washington.edu>\")\n       BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 3028\n       92))\nS:    a003 OK FETCH completed\nC:    a004 fetch 12 body[header]\nS:    * 12 FETCH (BODY[HEADER] {342}\nS:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\nS:    From: Terry Gray <gray@cac.washington.edu>\nS:    Subject: IMAP4rev1 WG mtg summary and minutes\nS:    To: imap@cac.washington.edu\nS:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@MIT.EDU>\nS:    Message-Id: <B27397-0100000@cac.washington.edu>\nS:    MIME-Version: 1.0\nS:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\nS:\nS:    )\nS:    a004 OK FETCH completed\nC:    a005 store 12 +flags \\deleted\nS:    * 12 FETCH (FLAGS (\\Seen \\Deleted))\nS:    a005 OK +FLAGS completed\nC:    a006 logout\nS:    * BYE IMAP4rev1 server terminating connection\nS:    a006 OK LOGOUT completed\n\n\n\nCrispin                     Standards Track                    [Page 80]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n9.      Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   In the case of alternative or optional rules in which a later rule\n   overlaps an earlier rule, the rule which is listed earlier MUST take\n   priority.  For example, \"\\Seen\" when parsed as a flag is the \\Seen\n   flag name and not a flag-extension, even though \"\\Seen\" can be parsed\n   as a flag-extension.  Some, but not all, instances of this rule are\n   noted below.\n\n        Note: [ABNF] rules MUST be followed strictly; in\n        particular:\n\n        (1) Except as noted otherwise, all alphabetic characters\n        are case-insensitive.  The use of upper or lower case\n        characters to define token strings is for editorial clarity\n        only.  Implementations MUST accept these strings in a\n        case-insensitive fashion.\n\n        (2) In all cases, SP refers to exactly one space.  It is\n        NOT permitted to substitute TAB, insert additional spaces,\n        or otherwise treat SP as being equivalent to LWSP.\n\n        (3) The ASCII NUL character, %x00, MUST NOT be used at any\n        time.\n\naddress         = \"(\" addr-name SP addr-adl SP addr-mailbox SP\n                  addr-host \")\"\n\naddr-adl        = nstring\n                    ; Holds route from [RFC-2822] route-addr if\n                    ; non-NIL\n\naddr-host       = nstring\n                    ; NIL indicates [RFC-2822] group syntax.\n                    ; Otherwise, holds [RFC-2822] domain name\n\naddr-mailbox    = nstring\n                    ; NIL indicates end of [RFC-2822] group; if\n                    ; non-NIL and addr-host is NIL, holds\n                    ; [RFC-2822] group name.\n                    ; Otherwise, holds [RFC-2822] local-part\n                    ; after removing [RFC-2822] quoting\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 81]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\naddr-name       = nstring\n                    ; If non-NIL, holds phrase from [RFC-2822]\n                    ; mailbox after removing [RFC-2822] quoting\n\nappend          = \"APPEND\" SP mailbox [SP flag-list] [SP date-time] SP\n                  literal\n\nastring         = 1*ASTRING-CHAR / string\n\nASTRING-CHAR   = ATOM-CHAR / resp-specials\n\natom            = 1*ATOM-CHAR\n\nATOM-CHAR       = <any CHAR except atom-specials>\n\natom-specials   = \"(\" / \")\" / \"{\" / SP / CTL / list-wildcards /\n                  quoted-specials / resp-specials\n\nauthenticate    = \"AUTHENTICATE\" SP auth-type *(CRLF base64)\n\nauth-type       = atom\n                    ; Defined by [SASL]\n\nbase64          = *(4base64-char) [base64-terminal]\n\nbase64-char     = ALPHA / DIGIT / \"+\" / \"/\"\n                    ; Case-sensitive\n\nbase64-terminal = (2base64-char \"==\") / (3base64-char \"=\")\n\nbody            = \"(\" (body-type-1part / body-type-mpart) \")\"\n\nbody-extension  = nstring / number /\n                   \"(\" body-extension *(SP body-extension) \")\"\n                    ; Future expansion.  Client implementations\n                    ; MUST accept body-extension fields.  Server\n                    ; implementations MUST NOT generate\n                    ; body-extension fields except as defined by\n                    ; future standard or standards-track\n                    ; revisions of this specification.\n\nbody-ext-1part  = body-fld-md5 [SP body-fld-dsp [SP body-fld-lang\n                  [SP body-fld-loc *(SP body-extension)]]]\n                    ; MUST NOT be returned on non-extensible\n                    ; \"BODY\" fetch\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 82]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nbody-ext-mpart  = body-fld-param [SP body-fld-dsp [SP body-fld-lang\n                  [SP body-fld-loc *(SP body-extension)]]]\n                    ; MUST NOT be returned on non-extensible\n                    ; \"BODY\" fetch\n\nbody-fields     = body-fld-param SP body-fld-id SP body-fld-desc SP\n                  body-fld-enc SP body-fld-octets\n\nbody-fld-desc   = nstring\n\nbody-fld-dsp    = \"(\" string SP body-fld-param \")\" / nil\n\nbody-fld-enc    = (DQUOTE (\"7BIT\" / \"8BIT\" / \"BINARY\" / \"BASE64\"/\n                  \"QUOTED-PRINTABLE\") DQUOTE) / string\n\nbody-fld-id     = nstring\n\nbody-fld-lang   = nstring / \"(\" string *(SP string) \")\"\n\nbody-fld-loc    = nstring\n\nbody-fld-lines  = number\n\nbody-fld-md5    = nstring\n\nbody-fld-octets = number\n\nbody-fld-param  = \"(\" string SP string *(SP string SP string) \")\" / nil\n\nbody-type-1part = (body-type-basic / body-type-msg / body-type-text)\n                  [SP body-ext-1part]\n\nbody-type-basic = media-basic SP body-fields\n                    ; MESSAGE subtype MUST NOT be \"RFC822\"\n\nbody-type-mpart = 1*body SP media-subtype\n                  [SP body-ext-mpart]\n\nbody-type-msg   = media-message SP body-fields SP envelope\n                  SP body SP body-fld-lines\n\nbody-type-text  = media-text SP body-fields SP body-fld-lines\n\ncapability      = (\"AUTH=\" auth-type) / atom\n                    ; New capabilities MUST begin with \"X\" or be\n                    ; registered with IANA as standard or\n                    ; standards-track\n\n\n\n\nCrispin                     Standards Track                    [Page 83]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\ncapability-data = \"CAPABILITY\" *(SP capability) SP \"IMAP4rev1\"\n                  *(SP capability)\n                    ; Servers MUST implement the STARTTLS, AUTH=PLAIN,\n                    ; and LOGINDISABLED capabilities\n                    ; Servers which offer RFC 1730 compatibility MUST\n                    ; list \"IMAP4\" as the first capability.\n\nCHAR8           = %x01-ff\n                    ; any OCTET except NUL, %x00\n\ncommand         = tag SP (command-any / command-auth / command-nonauth /\n                  command-select) CRLF\n                    ; Modal based on state\n\ncommand-any     = \"CAPABILITY\" / \"LOGOUT\" / \"NOOP\" / x-command\n                    ; Valid in all states\n\ncommand-auth    = append / create / delete / examine / list / lsub /\n                  rename / select / status / subscribe / unsubscribe\n                    ; Valid only in Authenticated or Selected state\n\ncommand-nonauth = login / authenticate / \"STARTTLS\"\n                    ; Valid only when in Not Authenticated state\n\ncommand-select  = \"CHECK\" / \"CLOSE\" / \"EXPUNGE\" / copy / fetch / store /\n                  uid / search\n                    ; Valid only when in Selected state\n\ncontinue-req    = \"+\" SP (resp-text / base64) CRLF\n\ncopy            = \"COPY\" SP sequence-set SP mailbox\n\ncreate          = \"CREATE\" SP mailbox\n                    ; Use of INBOX gives a NO error\n\ndate            = date-text / DQUOTE date-text DQUOTE\n\ndate-day        = 1*2DIGIT\n                    ; Day of month\n\ndate-day-fixed  = (SP DIGIT) / 2DIGIT\n                    ; Fixed-format version of date-day\n\ndate-month      = \"Jan\" / \"Feb\" / \"Mar\" / \"Apr\" / \"May\" / \"Jun\" /\n                  \"Jul\" / \"Aug\" / \"Sep\" / \"Oct\" / \"Nov\" / \"Dec\"\n\ndate-text       = date-day \"-\" date-month \"-\" date-year\n\n\n\n\nCrispin                     Standards Track                    [Page 84]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\ndate-year       = 4DIGIT\n\ndate-time       = DQUOTE date-day-fixed \"-\" date-month \"-\" date-year\n                  SP time SP zone DQUOTE\n\ndelete          = \"DELETE\" SP mailbox\n                    ; Use of INBOX gives a NO error\n\ndigit-nz        = %x31-39\n                    ; 1-9\n\nenvelope        = \"(\" env-date SP env-subject SP env-from SP\n                  env-sender SP env-reply-to SP env-to SP env-cc SP\n                  env-bcc SP env-in-reply-to SP env-message-id \")\"\n\nenv-bcc         = \"(\" 1*address \")\" / nil\n\nenv-cc          = \"(\" 1*address \")\" / nil\n\nenv-date        = nstring\n\nenv-from        = \"(\" 1*address \")\" / nil\n\nenv-in-reply-to = nstring\n\nenv-message-id  = nstring\n\nenv-reply-to    = \"(\" 1*address \")\" / nil\n\nenv-sender      = \"(\" 1*address \")\" / nil\n\nenv-subject     = nstring\n\nenv-to          = \"(\" 1*address \")\" / nil\n\nexamine         = \"EXAMINE\" SP mailbox\n\nfetch           = \"FETCH\" SP sequence-set SP (\"ALL\" / \"FULL\" / \"FAST\" /\n                  fetch-att / \"(\" fetch-att *(SP fetch-att) \")\")\n\nfetch-att       = \"ENVELOPE\" / \"FLAGS\" / \"INTERNALDATE\" /\n                  \"RFC822\" [\".HEADER\" / \".SIZE\" / \".TEXT\"] /\n                  \"BODY\" [\"STRUCTURE\"] / \"UID\" /\n                  \"BODY\" section [\"<\" number \".\" nz-number \">\"] /\n                  \"BODY.PEEK\" section [\"<\" number \".\" nz-number \">\"]\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 85]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nflag            = \"\\Answered\" / \"\\Flagged\" / \"\\Deleted\" /\n                  \"\\Seen\" / \"\\Draft\" / flag-keyword / flag-extension\n                    ; Does not include \"\\Recent\"\n\nflag-extension  = \"\\\" atom\n                    ; Future expansion.  Client implementations\n                    ; MUST accept flag-extension flags.  Server\n                    ; implementations MUST NOT generate\n                    ; flag-extension flags except as defined by\n                    ; future standard or standards-track\n                    ; revisions of this specification.\n\nflag-fetch      = flag / \"\\Recent\"\n\nflag-keyword    = atom\n\nflag-list       = \"(\" [flag *(SP flag)] \")\"\n\nflag-perm       = flag / \"\\*\"\n\ngreeting        = \"*\" SP (resp-cond-auth / resp-cond-bye) CRLF\n\nheader-fld-name = astring\n\nheader-list     = \"(\" header-fld-name *(SP header-fld-name) \")\"\n\nlist            = \"LIST\" SP mailbox SP list-mailbox\n\nlist-mailbox    = 1*list-char / string\n\nlist-char       = ATOM-CHAR / list-wildcards / resp-specials\n\nlist-wildcards  = \"%\" / \"*\"\n\nliteral         = \"{\" number \"}\" CRLF *CHAR8\n                    ; Number represents the number of CHAR8s\n\nlogin           = \"LOGIN\" SP userid SP password\n\nlsub            = \"LSUB\" SP mailbox SP list-mailbox\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 86]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nmailbox         = \"INBOX\" / astring\n                    ; INBOX is case-insensitive.  All case variants of\n                    ; INBOX (e.g., \"iNbOx\") MUST be interpreted as INBOX\n                    ; not as an astring.  An astring which consists of\n                    ; the case-insensitive sequence \"I\" \"N\" \"B\" \"O\" \"X\"\n                    ; is considered to be INBOX and not an astring.\n                    ;  Refer to section 5.1 for further\n                    ; semantic details of mailbox names.\n\nmailbox-data    =  \"FLAGS\" SP flag-list / \"LIST\" SP mailbox-list /\n                   \"LSUB\" SP mailbox-list / \"SEARCH\" *(SP nz-number) /\n                   \"STATUS\" SP mailbox SP \"(\" [status-att-list] \")\" /\n                   number SP \"EXISTS\" / number SP \"RECENT\"\n\nmailbox-list    = \"(\" [mbx-list-flags] \")\" SP\n                   (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox\n\nmbx-list-flags  = *(mbx-list-oflag SP) mbx-list-sflag\n                  *(SP mbx-list-oflag) /\n                  mbx-list-oflag *(SP mbx-list-oflag)\n\nmbx-list-oflag  = \"\\Noinferiors\" / flag-extension\n                    ; Other flags; multiple possible per LIST response\n\nmbx-list-sflag  = \"\\Noselect\" / \"\\Marked\" / \"\\Unmarked\"\n                    ; Selectability flags; only one per LIST response\n\nmedia-basic     = ((DQUOTE (\"APPLICATION\" / \"AUDIO\" / \"IMAGE\" /\n                  \"MESSAGE\" / \"VIDEO\") DQUOTE) / string) SP\n                  media-subtype\n                    ; Defined in [MIME-IMT]\n\nmedia-message   = DQUOTE \"MESSAGE\" DQUOTE SP DQUOTE \"RFC822\" DQUOTE\n                    ; Defined in [MIME-IMT]\n\nmedia-subtype   = string\n                    ; Defined in [MIME-IMT]\n\nmedia-text      = DQUOTE \"TEXT\" DQUOTE SP media-subtype\n                    ; Defined in [MIME-IMT]\n\nmessage-data    = nz-number SP (\"EXPUNGE\" / (\"FETCH\" SP msg-att))\n\nmsg-att         = \"(\" (msg-att-dynamic / msg-att-static)\n                   *(SP (msg-att-dynamic / msg-att-static)) \")\"\n\nmsg-att-dynamic = \"FLAGS\" SP \"(\" [flag-fetch *(SP flag-fetch)] \")\"\n                    ; MAY change for a message\n\n\n\nCrispin                     Standards Track                    [Page 87]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nmsg-att-static  = \"ENVELOPE\" SP envelope / \"INTERNALDATE\" SP date-time /\n                  \"RFC822\" [\".HEADER\" / \".TEXT\"] SP nstring /\n                  \"RFC822.SIZE\" SP number /\n                  \"BODY\" [\"STRUCTURE\"] SP body /\n                  \"BODY\" section [\"<\" number \">\"] SP nstring /\n                  \"UID\" SP uniqueid\n                    ; MUST NOT change for a message\n\nnil             = \"NIL\"\n\nnstring         = string / nil\n\nnumber          = 1*DIGIT\n                    ; Unsigned 32-bit integer\n                    ; (0 <= n < 4,294,967,296)\n\nnz-number       = digit-nz *DIGIT\n                    ; Non-zero unsigned 32-bit integer\n                    ; (0 < n < 4,294,967,296)\n\npassword        = astring\n\nquoted          = DQUOTE *QUOTED-CHAR DQUOTE\n\nQUOTED-CHAR     = <any TEXT-CHAR except quoted-specials> /\n                  \"\\\" quoted-specials\n\nquoted-specials = DQUOTE / \"\\\"\n\nrename          = \"RENAME\" SP mailbox SP mailbox\n                    ; Use of INBOX as a destination gives a NO error\n\nresponse        = *(continue-req / response-data) response-done\n\nresponse-data   = \"*\" SP (resp-cond-state / resp-cond-bye /\n                  mailbox-data / message-data / capability-data) CRLF\n\nresponse-done   = response-tagged / response-fatal\n\nresponse-fatal  = \"*\" SP resp-cond-bye CRLF\n                    ; Server closes connection immediately\n\nresponse-tagged = tag SP resp-cond-state CRLF\n\nresp-cond-auth  = (\"OK\" / \"PREAUTH\") SP resp-text\n                    ; Authentication condition\n\n\n\n\n\nCrispin                     Standards Track                    [Page 88]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nresp-cond-bye   = \"BYE\" SP resp-text\n\nresp-cond-state = (\"OK\" / \"NO\" / \"BAD\") SP resp-text\n                    ; Status condition\n\nresp-specials   = \"]\"\n\nresp-text       = [\"[\" resp-text-code \"]\" SP] text\n\nresp-text-code  = \"ALERT\" /\n                  \"BADCHARSET\" [SP \"(\" astring *(SP astring) \")\" ] /\n                  capability-data / \"PARSE\" /\n                  \"PERMANENTFLAGS\" SP \"(\"\n                  [flag-perm *(SP flag-perm)] \")\" /\n                  \"READ-ONLY\" / \"READ-WRITE\" / \"TRYCREATE\" /\n                  \"UIDNEXT\" SP nz-number / \"UIDVALIDITY\" SP nz-number /\n                  \"UNSEEN\" SP nz-number /\n                  atom [SP 1*<any TEXT-CHAR except \"]\">]\n\nsearch          = \"SEARCH\" [SP \"CHARSET\" SP astring] 1*(SP search-key)\n                    ; CHARSET argument to MUST be registered with IANA\n\nsearch-key      = \"ALL\" / \"ANSWERED\" / \"BCC\" SP astring /\n                  \"BEFORE\" SP date / \"BODY\" SP astring /\n                  \"CC\" SP astring / \"DELETED\" / \"FLAGGED\" /\n                  \"FROM\" SP astring / \"KEYWORD\" SP flag-keyword /\n                  \"NEW\" / \"OLD\" / \"ON\" SP date / \"RECENT\" / \"SEEN\" /\n                  \"SINCE\" SP date / \"SUBJECT\" SP astring /\n                  \"TEXT\" SP astring / \"TO\" SP astring /\n                  \"UNANSWERED\" / \"UNDELETED\" / \"UNFLAGGED\" /\n                  \"UNKEYWORD\" SP flag-keyword / \"UNSEEN\" /\n                    ; Above this line were in [IMAP2]\n                  \"DRAFT\" / \"HEADER\" SP header-fld-name SP astring /\n                  \"LARGER\" SP number / \"NOT\" SP search-key /\n                  \"OR\" SP search-key SP search-key /\n                  \"SENTBEFORE\" SP date / \"SENTON\" SP date /\n                  \"SENTSINCE\" SP date / \"SMALLER\" SP number /\n                  \"UID\" SP sequence-set / \"UNDRAFT\" / sequence-set /\n                  \"(\" search-key *(SP search-key) \")\"\n\nsection         = \"[\" [section-spec] \"]\"\n\nsection-msgtext = \"HEADER\" / \"HEADER.FIELDS\" [\".NOT\"] SP header-list /\n                  \"TEXT\"\n                    ; top-level or MESSAGE/RFC822 part\n\nsection-part    = nz-number *(\".\" nz-number)\n                    ; body part nesting\n\n\n\nCrispin                     Standards Track                    [Page 89]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nsection-spec    = section-msgtext / (section-part [\".\" section-text])\n\nsection-text    = section-msgtext / \"MIME\"\n                    ; text other than actual body part (headers, etc.)\n\nselect          = \"SELECT\" SP mailbox\n\nseq-number      = nz-number / \"*\"\n                    ; message sequence number (COPY, FETCH, STORE\n                    ; commands) or unique identifier (UID COPY,\n                    ; UID FETCH, UID STORE commands).\n                    ; * represents the largest number in use.  In\n                    ; the case of message sequence numbers, it is\n                    ; the number of messages in a non-empty mailbox.\n                    ; In the case of unique identifiers, it is the\n                    ; unique identifier of the last message in the\n                    ; mailbox or, if the mailbox is empty, the\n                    ; mailbox's current UIDNEXT value.\n                    ; The server should respond with a tagged BAD\n                    ; response to a command that uses a message\n                    ; sequence number greater than the number of\n                    ; messages in the selected mailbox.  This\n                    ; includes \"*\" if the selected mailbox is empty.\n\nseq-range       = seq-number \":\" seq-number\n                    ; two seq-number values and all values between\n                    ; these two regardless of order.\n                    ; Example: 2:4 and 4:2 are equivalent and indicate\n                    ; values 2, 3, and 4.\n                    ; Example: a unique identifier sequence range of\n                    ; 3291:* includes the UID of the last message in\n                    ; the mailbox, even if that value is less than 3291.\n\nsequence-set    = (seq-number / seq-range) *(\",\" sequence-set)\n                    ; set of seq-number values, regardless of order.\n                    ; Servers MAY coalesce overlaps and/or execute the\n                    ; sequence in any order.\n                    ; Example: a message sequence number set of\n                    ; 2,4:7,9,12:* for a mailbox with 15 messages is\n                    ; equivalent to 2,4,5,6,7,9,12,13,14,15\n                    ; Example: a message sequence number set of *:4,5:7\n                    ; for a mailbox with 10 messages is equivalent to\n                    ; 10,9,8,7,6,5,4,5,6,7 and MAY be reordered and\n                    ; overlap coalesced to be 4,5,6,7,8,9,10.\n\nstatus          = \"STATUS\" SP mailbox SP\n                  \"(\" status-att *(SP status-att) \")\"\n\n\n\n\nCrispin                     Standards Track                    [Page 90]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nstatus-att      = \"MESSAGES\" / \"RECENT\" / \"UIDNEXT\" / \"UIDVALIDITY\" /\n                  \"UNSEEN\"\n\nstatus-att-list =  status-att SP number *(SP status-att SP number)\n\nstore           = \"STORE\" SP sequence-set SP store-att-flags\n\nstore-att-flags = ([\"+\" / \"-\"] \"FLAGS\" [\".SILENT\"]) SP\n                  (flag-list / (flag *(SP flag)))\n\nstring          = quoted / literal\n\nsubscribe       = \"SUBSCRIBE\" SP mailbox\n\ntag             = 1*<any ASTRING-CHAR except \"+\">\n\ntext            = 1*TEXT-CHAR\n\nTEXT-CHAR       = <any CHAR except CR and LF>\n\ntime            = 2DIGIT \":\" 2DIGIT \":\" 2DIGIT\n                    ; Hours minutes seconds\n\nuid             = \"UID\" SP (copy / fetch / search / store)\n                    ; Unique identifiers used instead of message\n                    ; sequence numbers\n\nuniqueid        = nz-number\n                    ; Strictly ascending\n\nunsubscribe     = \"UNSUBSCRIBE\" SP mailbox\n\nuserid          = astring\n\nx-command       = \"X\" atom <experimental command arguments>\n\nzone            = (\"+\" / \"-\") 4DIGIT\n                    ; Signed four-digit value of hhmm representing\n                    ; hours and minutes east of Greenwich (that is,\n                    ; the amount that the given time differs from\n                    ; Universal Time).  Subtracting the timezone\n                    ; from the given time will give the UT form.\n                    ; The Universal Time zone is \"+0000\".\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 91]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n10.     Author's Note\n\n   This document is a revision or rewrite of earlier documents, and\n   supercedes the protocol specification in those documents: RFC 2060,\n   RFC 1730, unpublished IMAP2bis.TXT document, RFC 1176, and RFC 1064.\n\n11.     Security Considerations\n\n   IMAP4rev1 protocol transactions, including electronic mail data, are\n   sent in the clear over the network unless protection from snooping is\n   negotiated.  This can be accomplished either by the use of STARTTLS,\n   negotiated privacy protection in the AUTHENTICATE command, or some\n   other protection mechanism.\n\n11.1.   STARTTLS Security Considerations\n\n   The specification of the STARTTLS command and LOGINDISABLED\n   capability in this document replaces that in [IMAP-TLS].  [IMAP-TLS]\n   remains normative for the PLAIN [SASL] authenticator.\n\n   IMAP client and server implementations MUST implement the\n   TLS_RSA_WITH_RC4_128_MD5 [TLS] cipher suite, and SHOULD implement the\n   TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA [TLS] cipher suite.  This is\n   important as it assures that any two compliant implementations can be\n   configured to interoperate.  All other cipher suites are OPTIONAL.\n   Note that this is a change from section 2.1 of [IMAP-TLS].\n\n   During the [TLS] negotiation, the client MUST check its understanding\n   of the server hostname against the server's identity as presented in\n   the server Certificate message, in order to prevent man-in-the-middle\n   attacks.  If the match fails, the client SHOULD either ask for\n   explicit user confirmation, or terminate the connection and indicate\n   that the server's identity is suspect.  Matching is performed\n   according to these rules:\n\n        The client MUST use the server hostname it used to open the\n        connection as the value to compare against the server name\n        as expressed in the server certificate.  The client MUST\n        NOT use any form of the server hostname derived from an\n        insecure remote source (e.g., insecure DNS lookup).  CNAME\n        canonicalization is not done.\n\n        If a subjectAltName extension of type dNSName is present in\n        the certificate, it SHOULD be used as the source of the\n        server's identity.\n\n        Matching is case-insensitive.\n\n\n\n\nCrispin                     Standards Track                    [Page 92]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n        A \"*\" wildcard character MAY be used as the left-most name\n        component in the certificate.  For example, *.example.com\n        would match a.example.com, foo.example.com, etc. but would\n        not match example.com.\n\n        If the certificate contains multiple names (e.g., more than\n        one dNSName field), then a match with any one of the fields\n        is considered acceptable.\n\n   Both the client and server MUST check the result of the STARTTLS\n   command and subsequent [TLS] negotiation to see whether acceptable\n   authentication or privacy was achieved.\n\n11.2.   Other Security Considerations\n\n   A server error message for an AUTHENTICATE command which fails due to\n   invalid credentials SHOULD NOT detail why the credentials are\n   invalid.\n\n   Use of the LOGIN command sends passwords in the clear.  This can be\n   avoided by using the AUTHENTICATE command with a [SASL] mechanism\n   that does not use plaintext passwords, by first negotiating\n   encryption via STARTTLS or some other protection mechanism.\n\n   A server implementation MUST implement a configuration that, at the\n   time of authentication, requires:\n      (1) The STARTTLS command has been negotiated.\n   OR\n      (2) Some other mechanism that protects the session from password\n      snooping has been provided.\n   OR\n      (3) The following measures are in place:\n         (a) The LOGINDISABLED capability is advertised, and [SASL]\n         mechanisms (such as PLAIN) using plaintext passwords are NOT\n         advertised in the CAPABILITY list.\n      AND\n         (b) The LOGIN command returns an error even if the password is\n         correct.\n      AND\n         (c) The AUTHENTICATE command returns an error with all [SASL]\n         mechanisms that use plaintext passwords, even if the password\n         is correct.\n\n   A server error message for a failing LOGIN command SHOULD NOT specify\n   that the user name, as opposed to the password, is invalid.\n\n   A server SHOULD have mechanisms in place to limit or delay failed\n   AUTHENTICATE/LOGIN attempts.\n\n\n\nCrispin                     Standards Track                    [Page 93]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   Additional security considerations are discussed in the section\n   discussing the AUTHENTICATE and LOGIN commands.\n\n12.     IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track or\n   IESG approved experimental RFC.  The registry is currently located\n   at:\n\n        http://www.iana.org/assignments/imap4-capabilities\n\n   As this specification revises the STARTTLS and LOGINDISABLED\n   extensions previously defined in [IMAP-TLS], the registry will be\n   updated accordingly.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 94]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nAppendices\n\nA.      Normative References\n\n   The following documents contain definitions or specifications that\n   are necessary to understand this document properly:\n   [ABNF]                Crocker, D. and P. Overell, \"Augmented BNF for\n                         Syntax Specifications: ABNF\", RFC 2234,\n                         November 1997.\n\n   [ANONYMOUS]           Newman, C., \"Anonymous SASL Mechanism\", RFC\n                         2245, November 1997.\n\n   [CHARSET]             Freed, N. and J. Postel, \"IANA Character Set\n                         Registration Procedures\", RFC 2978, October\n                         2000.\n\n   [DIGEST-MD5]          Leach, P. and C. Newman, \"Using Digest\n                         Authentication as a SASL Mechanism\", RFC 2831,\n                         May 2000.\n\n   [DISPOSITION]         Troost, R., Dorner, S. and K. Moore,\n                         \"Communicating Presentation Information in\n                         Internet Messages: The Content-Disposition\n                         Header\", RFC 2183, August 1997.\n\n   [IMAP-TLS]            Newman, C., \"Using TLS with IMAP, POP3 and\n                         ACAP\", RFC 2595, June 1999.\n\n   [KEYWORDS]            Bradner, S., \"Key words for use in RFCs to\n                         Indicate Requirement Levels\", BCP 14, RFC 2119,\n                         March 1997.\n\n   [LANGUAGE-TAGS]       Alvestrand, H., \"Tags for the Identification of\n                         Languages\", BCP 47, RFC 3066, January 2001.\n\n   [LOCATION]            Palme, J., Hopmann, A. and N. Shelness, \"MIME\n                         Encapsulation of Aggregate Documents, such as\n                         HTML (MHTML)\", RFC 2557, March 1999.\n\n   [MD5]                 Myers, J. and M. Rose, \"The Content-MD5 Header\n                         Field\", RFC 1864, October 1995.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 95]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   [MIME-HDRS]           Moore, K., \"MIME (Multipurpose Internet Mail\n                         Extensions) Part Three: Message Header\n                         Extensions for Non-ASCII Text\", RFC 2047,\n                         November 1996.\n\n   [MIME-IMB]            Freed, N. and N. Borenstein, \"MIME\n                         (Multipurpose Internet Mail Extensions) Part\n                         One: Format of Internet Message Bodies\", RFC\n                         2045, November 1996.\n\n   [MIME-IMT]            Freed, N. and N. Borenstein, \"MIME\n                         (Multipurpose Internet Mail Extensions) Part\n                         Two: Media Types\", RFC 2046, November 1996.\n\n   [RFC-2822]            Resnick, P., \"Internet Message Format\", RFC\n                         2822, April 2001.\n\n   [SASL]                Myers, J., \"Simple Authentication and Security\n                         Layer (SASL)\", RFC 2222, October 1997.\n\n   [TLS]                 Dierks, T. and C. Allen, \"The TLS Protocol\n                         Version 1.0\", RFC 2246, January 1999.\n\n   [UTF-7]               Goldsmith, D. and M. Davis, \"UTF-7: A Mail-Safe\n                         Transformation Format of Unicode\", RFC 2152,\n                         May 1997.\n\n   The following documents describe quality-of-implementation issues\n   that should be carefully considered when implementing this protocol:\n\n   [IMAP-IMPLEMENTATION] Leiba, B., \"IMAP Implementation\n                         Recommendations\", RFC 2683, September 1999.\n\n   [IMAP-MULTIACCESS]    Gahrns, M., \"IMAP4 Multi-Accessed Mailbox\n                         Practice\", RFC 2180, July 1997.\n\nA.1     Informative References\n\n   The following documents describe related protocols:\n\n   [IMAP-DISC]           Austein, R., \"Synchronization Operations for\n                         Disconnected IMAP4 Clients\", Work in Progress.\n\n   [IMAP-MODEL]          Crispin, M., \"Distributed Electronic Mail\n                         Models in IMAP4\", RFC 1733, December 1994.\n\n\n\n\n\n\nCrispin                     Standards Track                    [Page 96]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   [ACAP]                Newman, C. and J. Myers, \"ACAP -- Application\n                         Configuration Access Protocol\", RFC 2244,\n                         November 1997.\n\n   [SMTP]                Klensin, J., \"Simple Mail Transfer Protocol\",\n                         STD 10, RFC 2821, April 2001.\n\n   The following documents are historical or describe historical aspects\n   of this protocol:\n\n   [IMAP-COMPAT]         Crispin, M., \"IMAP4 Compatibility with\n                         IMAP2bis\", RFC 2061, December 1996.\n\n   [IMAP-HISTORICAL]     Crispin, M., \"IMAP4 Compatibility with IMAP2\n                         and IMAP2bis\", RFC 1732, December 1994.\n\n   [IMAP-OBSOLETE]       Crispin, M., \"Internet Message Access Protocol\n                         - Obsolete Syntax\", RFC 2062, December 1996.\n\n   [IMAP2]               Crispin, M., \"Interactive Mail Access Protocol\n                         - Version 2\", RFC 1176, August 1990.\n\n   [RFC-822]             Crocker, D., \"Standard for the Format of ARPA\n                         Internet Text Messages\", STD 11, RFC 822,\n                         August 1982.\n\n   [RFC-821]             Postel, J., \"Simple Mail Transfer Protocol\",\n                         STD 10, RFC 821, August 1982.\n\nB.      Changes from RFC 2060\n\n   1) Clarify description of unique identifiers and their semantics.\n\n   2) Fix the SELECT description to clarify that UIDVALIDITY is required\n   in the SELECT and EXAMINE responses.\n\n   3) Added an example of a failing search.\n\n   4) Correct store-att-flags: \"#flag\" should be \"1#flag\".\n\n   5) Made search and section rules clearer.\n\n   6) Correct the STORE example.\n\n   7) Correct \"BASE645\" misspelling.\n\n   8) Remove extraneous close parenthesis in example of two-part message\n   with text and BASE64 attachment.\n\n\n\nCrispin                     Standards Track                    [Page 97]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   9) Remove obsolete \"MAILBOX\" response from mailbox-data.\n\n   10) A spurious \"<\" in the rule for mailbox-data was removed.\n\n   11) Add CRLF to continue-req.\n\n   12) Specifically exclude \"]\" from the atom in resp-text-code.\n\n   13) Clarify that clients and servers should adhere strictly to the\n   protocol syntax.\n\n   14) Emphasize in 5.2 that EXISTS can not be used to shrink a mailbox.\n\n   15) Add NEWNAME to resp-text-code.\n\n   16) Clarify that the empty string, not NIL, is used as arguments to\n   LIST.\n\n   17) Clarify that NIL can be returned as a hierarchy delimiter for the\n   empty string mailbox name argument if the mailbox namespace is flat.\n\n   18) Clarify that addr-mailbox and addr-name have RFC-2822 quoting\n   removed.\n\n   19) Update UTF-7 reference.\n\n   20) Fix example in 6.3.11.\n\n   21) Clarify that non-existent UIDs are ignored.\n\n   22) Update DISPOSITION reference.\n\n   23) Expand state diagram.\n\n   24) Clarify that partial fetch responses are only returned in\n   response to a partial fetch command.\n\n   25) Add UIDNEXT response code.  Correct UIDVALIDITY definition\n   reference.\n\n   26) Further clarification of \"can\" vs. \"MAY\".\n\n   27) Reference RFC-2119.\n\n   28) Clarify that superfluous shifts are not permitted in modified\n   UTF-7.\n\n   29) Clarify that there are no implicit shifts in modified UTF-7.\n\n\n\nCrispin                     Standards Track                    [Page 98]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   30) Clarify that \"INBOX\" in a mailbox name is always INBOX, even if\n   it is given as a string.\n\n   31) Add missing open parenthesis in media-basic grammar rule.\n\n   32) Correct attribute syntax in mailbox-data.\n\n   33) Add UIDNEXT to EXAMINE responses.\n\n   34) Clarify UNSEEN, PERMANENTFLAGS, UIDVALIDITY, and UIDNEXT\n   responses in SELECT and EXAMINE.  They are required now, but weren't\n   in older versions.\n\n   35) Update references with RFC numbers.\n\n   36) Flush text-mime2.\n\n   37) Clarify that modified UTF-7 names must be case-sensitive and that\n   violating the convention should be avoided.\n\n   38) Correct UID FETCH example.\n\n   39) Clarify UID FETCH, UID STORE, and UID SEARCH vs. untagged EXPUNGE\n   responses.\n\n   40) Clarify the use of the word \"convention\".\n\n   41) Clarify that a command is not \"in progress\" until it has been\n   fully received (specifically, that a command is not \"in progress\"\n   during command continuation negotiation).\n\n   42) Clarify envelope defaulting.\n\n   43) Clarify that SP means one and only one space character.\n\n   44) Forbid silly states in LIST response.\n\n   45) Clarify that the ENVELOPE, INTERNALDATE, RFC822*, BODY*, and UID\n   for a message is static.\n\n   46) Add BADCHARSET response code.\n\n   47) Update formal syntax to [ABNF] conventions.\n\n   48) Clarify trailing hierarchy delimiter in CREATE semantics.\n\n   49) Clarify that the \"blank line\" is the [RFC-2822] delimiting blank\n   line.\n\n\n\nCrispin                     Standards Track                    [Page 99]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   50) Clarify that RENAME should also create hierarchy as needed for\n   the command to complete.\n\n   51) Fix body-ext-mpart to not require language if disposition\n   present.\n\n   52) Clarify the RFC822.HEADER response.\n\n   53) Correct missing space after charset astring in search.\n\n   54) Correct missing quote for BADCHARSET in resp-text-code.\n\n   55) Clarify that ALL, FAST, and FULL preclude any other data items\n   appearing.\n\n   56) Clarify semantics of reference argument in LIST.\n\n   57) Clarify that a null string for SEARCH HEADER X-FOO means any\n   message with a header line with a field-name of X-FOO regardless of\n   the text of the header.\n\n   58) Specifically reserve 8-bit mailbox names for future use as UTF-8.\n\n   59) It is not an error for the client to store a flag that is not in\n   the PERMANENTFLAGS list; however, the server will either ignore the\n   change or make the change in the session only.\n\n   60) Correct/clarify the text regarding superfluous shifts.\n\n   61) Correct typographic errors in the \"Changes\" section.\n\n   62) Clarify that STATUS must not be used to check for new messages in\n   the selected mailbox\n\n   63) Clarify LSUB behavior with \"%\" wildcard.\n\n   64) Change AUTHORIZATION to AUTHENTICATE in section 7.5.\n\n   65) Clarify description of multipart body type.\n\n   66) Clarify that STORE FLAGS does not affect \\Recent.\n\n   67) Change \"west\" to \"east\" in description of timezone.\n\n   68) Clarify that commands which break command pipelining must wait\n   for a completion result response.\n\n   69) Clarify that EXAMINE does not affect \\Recent.\n\n\n\nCrispin                     Standards Track                   [Page 100]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   70) Make description of MIME structure consistent.\n\n   71) Clarify that date searches disregard the time and timezone of the\n   INTERNALDATE or Date: header.  In other words, \"ON 13-APR-2000\" means\n   messages with an INTERNALDATE text which starts with \"13-APR-2000\",\n   even if timezone differential from the local timezone is sufficient\n   to move that INTERNALDATE into the previous or next day.\n\n   72) Clarify that the header fetches don't add a blank line if one\n   isn't in the [RFC-2822] message.\n\n   73) Clarify (in discussion of UIDs) that messages are immutable.\n\n   74) Add an example of CHARSET searching.\n\n   75) Clarify in SEARCH that keywords are a type of flag.\n\n   76) Clarify the mandatory nature of the SELECT data responses.\n\n   77) Add optional CAPABILITY response code in the initial OK or\n   PREAUTH.\n\n   78) Add note that server can send an untagged CAPABILITY command as\n   part of the responses to AUTHENTICATE and LOGIN.\n\n   79) Remove statement about it being unnecessary to issue a CAPABILITY\n   command more than once in a connection.  That statement is no longer\n   true.\n\n   80) Clarify that untagged EXPUNGE decrements the number of messages\n   in the mailbox.\n\n   81) Fix definition of \"body\" (concatenation has tighter binding than\n   alternation).\n\n   82) Add a new \"Special Notes to Implementors\" section with reference\n   to [IMAP-IMPLEMENTATION].\n\n   83) Clarify that an untagged CAPABILITY response to an AUTHENTICATE\n   command should only be done if a security layer was not negotiated.\n\n   84) Change the definition of atom to exclude \"]\".  Update astring to\n   include \"]\" for compatibility with the past.  Remove resp-text-atom.\n\n   85) Remove NEWNAME.  It can't work because mailbox names can be\n   literals and can include \"]\".  Functionality can be addressed via\n   referrals.\n\n\n\n\nCrispin                     Standards Track                   [Page 101]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   86) Move modified UTF-7 rationale in order to have more logical\n   paragraph flow.\n\n   87) Clarify UID uniqueness guarantees with the use of MUST.\n\n   88) Note that clients should read response data until the connection\n   is closed instead of immediately closing on a BYE.\n\n   89) Change RFC-822 references to RFC-2822.\n\n   90) Clarify that RFC-2822 should be followed instead of RFC-822.\n\n   91) Change recommendation of optional automatic capabilities in LOGIN\n   and AUTHENTICATE to use the CAPABILITY response code in the tagged\n   OK.  This is more interoperable than an unsolicited untagged\n   CAPABILITY response.\n\n   92) STARTTLS and AUTH=PLAIN are mandatory to implement; add\n   recommendations for other [SASL] mechanisms.\n\n   93) Clarify that a \"connection\" (as opposed to \"server\" or \"command\")\n   is in one of the four states.\n\n   94) Clarify that a failed or rejected command does not change state.\n\n   95) Split references between normative and informative.\n\n   96) Discuss authentication failure issues in security section.\n\n   97) Clarify that a data item is not necessarily of only one data\n   type.\n\n   98) Clarify that sequence ranges are independent of order.\n\n   99) Change an example to clarify that superfluous shifts in\n   Modified-UTF7 can not be fixed just by omitting the shift.  The\n   entire string must be recalculated.\n\n   100) Change Envelope Structure definition since [RFC-2822] uses\n   \"envelope\" to refer to the [SMTP] envelope and not the envelope data\n   that appears in the [RFC-2822] header.\n\n   101) Expand on RFC822.HEADER response data vs. BODY[HEADER].\n\n   102) Clarify Logout state semantics, change ASCII art.\n\n   103) Security changes to comply with IESG requirements.\n\n\n\n\nCrispin                     Standards Track                   [Page 102]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n   104) Add definition for body URI.\n\n   105) Break sequence range definition into three rules, with rewritten\n   descriptions for each.\n\n   106) Move STARTTLS and LOGINDISABLED here from [IMAP-TLS].\n\n   107) Add IANA Considerations section.\n\n   108) Clarify valid client assumptions for new message UIDs vs.\n   UIDNEXT.\n\n   109) Clarify that changes to permanentflags affect concurrent\n   sessions as well as subsequent sessions.\n\n   110) Clarify that authenticated state can be entered by the CLOSE\n   command.\n\n   111) Emphasize that SELECT and EXAMINE are the exceptions to the rule\n   that a failing command does not change state.\n\n   112) Clarify that newly-appended messages have the Recent flag set.\n\n   113) Clarify that newly-copied messages SHOULD have the Recent flag\n   set.\n\n   114) Clarify that UID commands always return the UID in FETCH\n   responses.\n\nC.      Key Word Index\n\n       +FLAGS <flag list> (store command data item) ...............   59\n       +FLAGS.SILENT <flag list> (store command data item) ........   59\n       -FLAGS <flag list> (store command data item) ...............   59\n       -FLAGS.SILENT <flag list> (store command data item) ........   59\n       ALERT (response code) ......................................   64\n       ALL (fetch item) ...........................................   55\n       ALL (search key) ...........................................   50\n       ANSWERED (search key) ......................................   50\n       APPEND (command) ...........................................   45\n       AUTHENTICATE (command) .....................................   27\n       BAD (response) .............................................   66\n       BADCHARSET (response code) .................................   64\n       BCC <string> (search key) ..................................   51\n       BEFORE <date> (search key) .................................   51\n       BODY (fetch item) ..........................................   55\n       BODY (fetch result) ........................................   73\n       BODY <string> (search key) .................................   51\n\n\n\nCrispin                     Standards Track                   [Page 103]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n       BODY.PEEK[<section>]<<partial>> (fetch item) ...............   57\n       BODYSTRUCTURE (fetch item) .................................   57\n       BODYSTRUCTURE (fetch result) ...............................   74\n       BODY[<section>]<<origin octet>> (fetch result) .............   74\n       BODY[<section>]<<partial>> (fetch item) ....................   55\n       BYE (response) .............................................   67\n       Body Structure (message attribute) .........................   12\n       CAPABILITY (command) .......................................   24\n       CAPABILITY (response code) .................................   64\n       CAPABILITY (response) ......................................   68\n       CC <string> (search key) ...................................   51\n       CHECK (command) ............................................   47\n       CLOSE (command) ............................................   48\n       COPY (command) .............................................   59\n       CREATE (command) ...........................................   34\n       DELETE (command) ...........................................   35\n       DELETED (search key) .......................................   51\n       DRAFT (search key) .........................................   51\n       ENVELOPE (fetch item) ......................................   57\n       ENVELOPE (fetch result) ....................................   77\n       EXAMINE (command) ..........................................   33\n       EXISTS (response) ..........................................   71\n       EXPUNGE (command) ..........................................   48\n       EXPUNGE (response) .........................................   72\n       Envelope Structure (message attribute) .....................   12\n       FAST (fetch item) ..........................................   55\n       FETCH (command) ............................................   54\n       FETCH (response) ...........................................   73\n       FLAGGED (search key) .......................................   51\n       FLAGS (fetch item) .........................................   57\n       FLAGS (fetch result) .......................................   78\n       FLAGS (response) ...........................................   71\n       FLAGS <flag list> (store command data item) ................   59\n       FLAGS.SILENT <flag list> (store command data item) .........   59\n       FROM <string> (search key) .................................   51\n       FULL (fetch item) ..........................................   55\n       Flags (message attribute) ..................................   11\n       HEADER (part specifier) ....................................   55\n       HEADER <field-name> <string> (search key) ..................   51\n       HEADER.FIELDS <header-list> (part specifier) ...............   55\n       HEADER.FIELDS.NOT <header-list> (part specifier) ...........   55\n       INTERNALDATE (fetch item) ..................................   57\n       INTERNALDATE (fetch result) ................................   78\n       Internal Date (message attribute) ..........................   12\n       KEYWORD <flag> (search key) ................................   51\n       Keyword (type of flag) .....................................   11\n       LARGER <n> (search key) ....................................   51\n       LIST (command) .............................................   40\n\n\n\nCrispin                     Standards Track                   [Page 104]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n       LIST (response) ............................................   69\n       LOGIN (command) ............................................   30\n       LOGOUT (command) ...........................................   25\n       LSUB (command) .............................................   43\n       LSUB (response) ............................................   70\n       MAY (specification requirement term) .......................    4\n       MESSAGES (status item) .....................................   45\n       MIME (part specifier) ......................................   56\n       MUST (specification requirement term) ......................    4\n       MUST NOT (specification requirement term) ..................    4\n       Message Sequence Number (message attribute) ................   10\n       NEW (search key) ...........................................   51\n       NO (response) ..............................................   66\n       NOOP (command) .............................................   25\n       NOT <search-key> (search key) ..............................   52\n       OK (response) ..............................................   65\n       OLD (search key) ...........................................   52\n       ON <date> (search key) .....................................   52\n       OPTIONAL (specification requirement term) ..................    4\n       OR <search-key1> <search-key2> (search key) ................   52\n       PARSE (response code) ......................................   64\n       PERMANENTFLAGS (response code) .............................   64\n       PREAUTH (response) .........................................   67\n       Permanent Flag (class of flag) .............................   12\n       READ-ONLY (response code) ..................................   65\n       READ-WRITE (response code) .................................   65\n       RECENT (response) ..........................................   72\n       RECENT (search key) ........................................   52\n       RECENT (status item) .......................................   45\n       RENAME (command) ...........................................   37\n       REQUIRED (specification requirement term) ..................    4\n       RFC822 (fetch item) ........................................   57\n       RFC822 (fetch result) ......................................   78\n       RFC822.HEADER (fetch item) .................................   57\n       RFC822.HEADER (fetch result) ...............................   78\n       RFC822.SIZE (fetch item) ...................................   57\n       RFC822.SIZE (fetch result) .................................   78\n       RFC822.TEXT (fetch item) ...................................   58\n       RFC822.TEXT (fetch result) .................................   79\n       SEARCH (command) ...........................................   49\n       SEARCH (response) ..........................................   71\n       SEEN (search key) ..........................................   52\n       SELECT (command) ...........................................   31\n       SENTBEFORE <date> (search key) .............................   52\n       SENTON <date> (search key) .................................   52\n       SENTSINCE <date> (search key) ..............................   52\n       SHOULD (specification requirement term) ....................    4\n       SHOULD NOT (specification requirement term) ................    4\n\n\n\nCrispin                     Standards Track                   [Page 105]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\n       SINCE <date> (search key) ..................................   52\n       SMALLER <n> (search key) ...................................   52\n       STARTTLS (command) .........................................   27\n       STATUS (command) ...........................................   44\n       STATUS (response) ..........................................   70\n       STORE (command) ............................................   58\n       SUBJECT <string> (search key) ..............................   53\n       SUBSCRIBE (command) ........................................   38\n       Session Flag (class of flag) ...............................   12\n       System Flag (type of flag) .................................   11\n       TEXT (part specifier) ......................................   56\n       TEXT <string> (search key) .................................   53\n       TO <string> (search key) ...................................   53\n       TRYCREATE (response code) ..................................   65\n       UID (command) ..............................................   60\n       UID (fetch item) ...........................................   58\n       UID (fetch result) .........................................   79\n       UID <sequence set> (search key) ............................   53\n       UIDNEXT (response code) ....................................   65\n       UIDNEXT (status item) ......................................   45\n       UIDVALIDITY (response code) ................................   65\n       UIDVALIDITY (status item) ..................................   45\n       UNANSWERED (search key) ....................................   53\n       UNDELETED (search key) .....................................   53\n       UNDRAFT (search key) .......................................   53\n       UNFLAGGED (search key) .....................................   53\n       UNKEYWORD <flag> (search key) ..............................   53\n       UNSEEN (response code) .....................................   65\n       UNSEEN (search key) ........................................   53\n       UNSEEN (status item) .......................................   45\n       UNSUBSCRIBE (command) ......................................   39\n       Unique Identifier (UID) (message attribute) ................    8\n       X<atom> (command) ..........................................   62\n       [RFC-2822] Size (message attribute) ........................   12\n       \\Answered (system flag) ....................................   11\n       \\Deleted (system flag) .....................................   11\n       \\Draft (system flag) .......................................   11\n       \\Flagged (system flag) .....................................   11\n       \\Marked (mailbox name attribute) ...........................   69\n       \\Noinferiors (mailbox name attribute) ......................   69\n       \\Noselect (mailbox name attribute) .........................   69\n       \\Recent (system flag) ......................................   11\n       \\Seen (system flag) ........................................   11\n       \\Unmarked (mailbox name attribute) .........................   69\n\n\n\n\n\n\n\nCrispin                     Standards Track                   [Page 106]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nAuthor's Address\n\n   Mark R. Crispin\n   Networks and Distributed Computing\n   University of Washington\n   4545 15th Avenue NE\n   Seattle, WA  98105-4527\n\n   Phone: (206) 543-5762\n\n   EMail: MRC@CAC.Washington.EDU\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                   [Page 107]\n\f\nRFC 3501                         IMAPv4                       March 2003\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.  v This\n   document and the information contained herein is provided on an \"AS\n   IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK\n   FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT\n   LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL\n   NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY\n   OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                   [Page 108]\n\f\n"
  },
  {
    "path": "rfc/rfc3502.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         M. Crispin\nRequest for Comments: 3502                      University of Washington\nCategory: Standards Track                                     March 2003\n\n\n    Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\nAbstract\n\n   This document describes the multiappending extension to the Internet\n   Message Access Protocol (IMAP) (RFC 3501).  This extension provides\n   substantial performance improvements for IMAP clients which upload\n   multiple messages at a time to a mailbox on the server.\n\n   A server which supports this extension indicates this with a\n   capability name of \"MULTIAPPEND\".\n\nTerminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"MAY\", and \"OPTIONAL\" in this document are to\n   be interpreted as described in [KEYWORDS].\n\nIntroduction\n\n   The MULTIAPPEND extension permits uploading of multiple messages with\n   a single command.  When used in conjunction with the [LITERAL+]\n   extension, the entire upload is accomplished in a single\n   command/response round trip.\n\n   A MULTIAPPEND APPEND operation is atomic; either all messages are\n   successfully appended, or no messages are appended.\n\n   In the base IMAP specification, each message must be appended in a\n   separate command, and there is no mechanism to \"unappend\" messages if\n   an error occurs while appending.  Also, some mail stores may require\n\n\n\nCrispin                     Standards Track                     [Page 1]\n\f\nRFC 3502                    IMAP MULTIAPPEND                  March 2003\n\n\n   an expensive \"open/lock + sync/unlock/close\" operation as part of\n   appending; this can be quite expensive if it must be done on a\n   per-message basis.\n\n   If the server supports both LITERAL+ and pipelining but not\n   MULTIAPPEND, it may be possible to get some of the performance\n   advantages of MULTIAPPEND by doing a pipelined \"batch\" append.\n   However, it will not work as well as MULTIAPPEND for the following\n   reasons:\n\n        1) Multiple APPEND commands, even as part of a pipelined batch,\n        are non-atomic by definition.  There is no way to revert the\n        mailbox to the state before the batch append in the event of an\n        error.\n\n        2) It may not be feasible for the server to coalesce pipelined\n        APPEND operations so as to avoid the \"open/lock +\n        sync/unlock/close\" overhead described above.  In any case, such\n        coalescing would be timing dependent and thus potentially\n        unreliable.  In particular, with traditional UNIX mailbox files,\n        it is assumed that a lock is held only for a single atomic\n        operation, and many applications disregard any lock that is\n        older than 5 minutes.\n\n        3) If an error occurs, depending upon the nature of the error,\n        it is possible for additional messages to be appended after the\n        error.  For example, the user wants to append 5 messages, but a\n        disk quota error occurs with the third message because of its\n        size.  However, the fourth and fifth messages have already been\n        sent in the pipeline, so the mailbox ends up with the first,\n        second, fourth, and fifth messages of the batch appended.\n\n6.3.11.  APPEND Command\n\n   Arguments:  mailbox name\n               one or more messages to upload, specified as:\n                  OPTIONAL flag parenthesized list\n                  OPTIONAL date/time string\n                  message literal\n\n   Data:       no specific responses for this command\n\n   Result:     OK - append completed\n               NO - append error: can't append to that mailbox, error\n                    in flags or date/time or message text,\n                    append cancelled\n               BAD - command unknown or arguments invalid\n\n\n\n\nCrispin                     Standards Track                     [Page 2]\n\f\nRFC 3502                    IMAP MULTIAPPEND                  March 2003\n\n\n      The APPEND command appends the literal arguments as new messages\n      to the end of the specified destination mailbox.  This argument\n      SHOULD be in the format of an [RFC-2822] message.  8-bit\n      characters are permitted in the message.  A server implementation\n      that is unable to preserve 8-bit data properly MUST be able to\n      reversibly convert 8-bit APPEND data to 7-bit using a [MIME-IMB]\n      content transfer encoding.\n\n            Note: There MAY be exceptions, e.g., draft messages, in\n            which required [RFC-2822] header lines are omitted in the\n            message literal argument to APPEND.  The full implications\n            of doing so MUST be understood and carefully weighed.\n\n      If a flag parenthesized list is specified, the flags SHOULD be set\n      in the resulting message; otherwise, the flag list of the\n      resulting message is set empty by default.\n\n      If a date-time is specified, the internal date SHOULD be set in\n      the resulting message; otherwise, the internal date of the\n      resulting message is set to the current date and time by default.\n\n      A zero-length message literal argument is an error, and MUST\n      return a NO.  This can be used to cancel the append.\n\n      If the append is unsuccessful for any reason (including being\n      cancelled), the mailbox MUST be restored to its state before the\n      APPEND attempt; no partial appending is permitted.  The server MAY\n      return an error before processing all the message arguments.\n\n      If the destination mailbox does not exist, a server MUST return an\n      error, and MUST NOT automatically create the mailbox.  Unless it\n      is certain that the destination mailbox can not be created, the\n      server MUST send the response code \"[TRYCREATE]\" as the prefix of\n      the text of the tagged NO response.  This gives a hint to the\n      client that it can attempt a CREATE command and retry the APPEND\n      if the CREATE is successful.\n\n      If the mailbox is currently selected, the normal new message\n      actions SHOULD occur.  Specifically, the server SHOULD notify the\n      client immediately via an untagged EXISTS response.  If the server\n      does not do so, the client MAY issue a NOOP command (or failing\n      that, a CHECK command) after one or more APPEND commands.\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 3]\n\f\nRFC 3502                    IMAP MULTIAPPEND                  March 2003\n\n\n   Example: C: A003 APPEND saved-messages (\\Seen) {329}\n            S: + Ready for literal data\n            C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n            C: From: Fred Foobar <foobar@Blurdybloop.example.COM>\n            C: Subject: afternoon meeting\n            C: To: mooch@owatagu.example.net\n            C: Message-Id: <B27397-0100000@Blurdybloop.example.COM>\n            C: MIME-Version: 1.0\n            C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n            C:\n            C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n            C:  (\\Seen) \" 7-Feb-1994 22:43:04 -0800\" {295}\n            S: + Ready for literal data\n            C: Date: Mon, 7 Feb 1994 22:43:04 -0800 (PST)\n            C: From: Joe Mooch <mooch@OWaTaGu.example.net>\n            C: Subject: Re: afternoon meeting\n            C: To: foobar@blurdybloop.example.com\n            C: Message-Id: <a0434793874930@OWaTaGu.example.net>\n            C: MIME-Version: 1.0\n            C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n            C:\n            C: 3:30 is fine with me.\n            C:\n            S: A003 OK APPEND completed\n            C: A004 APPEND bogusname (\\Flagged) {1023}\n            S: A004 NO [TRYCREATE] No such mailbox as bogusname\n            C: A005 APPEND test (\\Flagged) {99}\n            S: + Ready for literal data\n            C: Date: Mon, 7 Feb 2000 22:43:04 -0800 (PST)\n            C: From: Fred Foobar <fred@example.com>\n            C: Subject: hmm...\n            C:  {35403}\n            S: A005 NO APPEND failed: Disk quota exceeded\n\n        Note: The APPEND command is not used for message delivery,\n        because it does not provide a mechanism to transfer [SMTP]\n        envelope information.\n\nModification to IMAP4rev1 Base Protocol Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   append          = \"APPEND\" SP mailbox 1*append-message\n\n   append-message  = [SP flag-list] [SP date-time] SP literal\n\n\n\n\n\nCrispin                     Standards Track                     [Page 4]\n\f\nRFC 3502                    IMAP MULTIAPPEND                  March 2003\n\n\nMULTIAPPEND Interaction with UIDPLUS Extension\n\n   Servers which support both MULTIAPPEND and [UIDPLUS] will have the\n   \"resp-code-apnd\" rule modified as follows:\n\n   resp-code-apnd  = \"APPENDUID\" SP nz-number SP set\n\n   That is, the APPENDUID response code returns as many UIDs as there\n   were messages appended in the multiple append.  The UIDs returned\n   should be in the order the articles where appended.  The message set\n   may not contain extraneous UIDs or the symbol \"*\".\n\nSecurity Considerations\n\n   The MULTIAPPEND extension does not raise any security considerations\n   that are not present in the base [IMAP] protocol, and these issues\n   are discussed in [IMAP].  Nevertheless, it is important to remember\n   that IMAP4rev1 protocol transactions, including electronic mail data,\n   are sent in the clear over the network unless protection from\n   snooping is negotiated, either by the use of STARTTLS, privacy\n   protection is negotiated in the AUTHENTICATE command, or some other\n   protection mechanism is in effect.\n\nNormative References\n\n   [ABNF]     Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 2234, November 1997.\n\n   [IMAP]     Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 3501, March 2003.\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [MIME-IMB] Freed, N. and N. Borenstein, \"MIME (Multipurpose Internet\n              Mail Extensions) Part One: Format of Internet Message\n              Bodies\", RFC 2045, November 1996.\n\n   [RFC-2822] Resnick, P., \"Internet Message Format\", RFC 2822, April\n              2001.\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 5]\n\f\nRFC 3502                    IMAP MULTIAPPEND                  March 2003\n\n\nInformative References\n\n   [LITERAL+] Myers, J., \"IMAP4 non-synchronizing literals\", RFC 2088,\n              January 1997.\n\n   [UIDPLUS]  Myers, J., \"IMAP4 UIDPLUS extension\", RFC 2359, June 1988.\n\n   [SMTP]     Klensin, J., Editor, \"Simple Mail Transfer Protocol\", RFC\n              2821, April 2001.\n\nAuthor's Address\n\n   Mark R. Crispin\n   Networks and Distributed Computing\n   University of Washington\n   4545 15th Avenue NE\n   Seattle, WA  98105-4527\n\n   Phone: (206) 543-5762\n   EMail: MRC@CAC.Washington.EDU\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 6]\n\f\nRFC 3502                    IMAP MULTIAPPEND                  March 2003\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc3516.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                       L. Nerenberg\nRequest for Comments: 3516                               Orthanc Systems\nCategory: Standards Track                                     April 2003\n\n\n                     IMAP4 Binary Content Extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\nAbstract\n\n   This memo defines the Binary extension to the Internet Message Access\n   Protocol (IMAP4).  It provides a mechanism for IMAP4 clients and\n   servers to exchange message body data without using a MIME content-\n   transfer-encoding.\n\n1.   Conventions Used in this Document\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as described in [KEYWORD].\n\n   The abbreviation \"CTE\" means content-transfer-encoding.\n\n2.   Introduction\n\n   The MIME extensions to Internet messaging allow for the transmission\n   of non-textual (binary) message content [MIME-IMB].  Since the\n   traditional transports for messaging are not always capable of\n   passing binary data transparently, MIME provides encoding schemes\n   that allow binary content to be transmitted over transports that are\n   not otherwise able to do so.\n\n   The overhead of MIME-encoding this content can be considerable in\n   some contexts (e.g., slow radio links, streaming multimedia).\n   Reducing the overhead associated with CTE schemes such as base64\n\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 1]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n   can give a noticeable reduction in resource consumption.  The Binary\n   extension lets the server perform CTE decoding prior to transmitting\n   message data to the client.\n\n3.  Content-Transfer-Encoding Considerations\n\n   Every IMAP4 body section has a MIME content-transfer-encoding.\n   (Those without an explicit Content-Transfer-Encoding header are\n   implicitly labeled as \"7bit\" content.)  In the terminology of [MIME-\n   IMB], the CTE specifies both a decoding algorithm and the domain of\n   the decoded data.  In this memo, \"decoding\" refers to the CTE\n   decoding step described in [MIME-IMB].\n\n   Certain CTEs use an identity encoding transformation.  For these CTEs\n   there is no decoding required, however the domain of the underlying\n   data may not be expressible in the IMAP4 protocol (e.g., MIME\n   \"binary\" content containing NUL octets).  To accommodate these cases\n   the Binary extension introduces a new type of literal protocol\n   element that is fully eight bit transparent.\n\n   Thus, server  processing of the FETCH BINARY command involves two\n   logical steps:\n\n   1)  perform any CTE-related decoding\n\n   2)  determine the domain of the decoded data\n\n   Step 2 is necessary to determine which protocol element should be\n   used to transmit the decoded data.  (See FETCH Response Extensions\n   for further details.)\n\n4.  Framework for the IMAP4 Binary Extension\n\n   This memo defines the following extensions to [IMAP4rev1].\n\n4.1.  CAPABILITY Identification\n\n   IMAP4 servers that support this extension MUST include \"BINARY\" in\n   the response list to the CAPABILITY command.\n\n4.2.  FETCH Command Extensions\n\n   This extension defines three new FETCH command data items.\n\n      BINARY<section-binary>[<partial>]\n\n         Requests that the specified section be transmitted after\n         performing CTE-related decoding.\n\n\n\nNerenberg                   Standards Track                     [Page 2]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n         The <partial> argument, if present, requests that a subset of\n         the data be returned.  The semantics of a partial FETCH BINARY\n         command are the same as for a partial FETCH BODY command, with\n         the exception that the <partial> arguments refer to the DECODED\n         section data.\n\n      BINARY.PEEK<section-binary>[<partial>]\n\n         An alternate form of FETCH BINARY that does not implicitly set\n         the \\Seen flag.\n\n      BINARY.SIZE<section-binary>\n\n         Requests the decoded size of the section (i.e., the size to\n         expect in response to the corresponding FETCH BINARY request).\n\n         Note: client authors are cautioned that this might be an\n         expensive operation for some server implementations.\n         Needlessly issuing this request could result in degraded\n         performance due to servers having to calculate the value every\n         time the request is issued.\n\n4.3.  FETCH Response Extensions\n\n   This extension defines two new FETCH response data items.\n\n      BINARY<section-binary>[<<number>>]\n\n         An <nstring> or <literal8> expressing the content of the\n         specified section after removing any CTE-related encoding.  If\n         <number> is present it refers to the offset within the DECODED\n         section data.\n\n         If the domain of the decoded data is \"8bit\" and the data does\n         not contain the NUL octet, the server SHOULD return the data in\n         a <string> instead of a <literal8>; this allows the client to\n         determine if the \"8bit\" data contains the NUL octet without\n         having to explicitly scan the data stream for for NULs.\n\n         If the server does not know how to decode the section's CTE, it\n         MUST fail the request and issue a \"NO\" response that contains\n         the \"UNKNOWN-CTE\" extended response code.\n\n\n\n\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 3]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n      BINARY.SIZE<section-binary>\n\n         The size of the section after removing any CTE-related\n         encoding.  The value returned MUST match the size of the\n         <nstring> or <literal8> that will be returned by the\n         corresponding FETCH BINARY request.\n\n         If the server does not know how to decode the section's CTE, it\n         MUST fail the request and issue a \"NO\" response that contains\n         the \"UNKNOWN-CTE\" extended response code.\n\n4.4.  APPEND Command Extensions\n\n   The APPEND command is extended to allow the client to append data\n   containing NULs by using the <literal8> syntax.  The server MAY\n   modify the CTE of the appended data, however any such transformation\n   MUST NOT result in a loss of data.\n\n   If the destination mailbox does not support the storage of binary\n   content, the server MUST fail the request and issue a \"NO\" response\n   that contains the \"UNKNOWN-CTE\" extended response code.\n\n5.  MIME Encoded Headers\n\n   [MIME-MHE] defines an encoding that allows for non-US-ASCII text in\n   message headers.  This encoding is not the same as the content-\n   transfer-encoding applied to message bodies, and the decoding\n   transformations described in this memo do not apply to [MIME-MHE]\n   encoded header text.  A server MUST NOT perform any conversion of\n   [MIME-MHE] encoded header text in response to any binary FETCH or\n   APPEND request.\n\n6.  Implementation Considerations\n\n   Messaging clients and servers have been notoriously lax in their\n   adherence to the Internet CRLF convention for terminating lines of\n   textual data in Internet protocols.  When sending data using the\n   Binary extension, servers MUST ensure that textual line-oriented\n   sections are always transmitted using the IMAP4 CRLF line termination\n   syntax, regardless of the underlying storage representation of the\n   data on the server.\n\n   A server may choose to store message body binary content in a non-\n   encoded format.  Regardless of the internal storage representation\n   used, the server MUST issue BODYSTRUCTURE responses that describe the\n   message as though the binary-encoded sections are encoded in a CTE\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 4]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n   acceptable to the IMAP4 base specification.  Furthermore, the results\n   of a FETCH BODY MUST return the message body content in the format\n   described by the corresponding FETCH BODYSTRUCTURE response.\n\n   While the server is allowed to modify the CTE of APPENDed <literal8>\n   data, this should only be done when it is absolutely necessary.\n   Gratuitous encoding changes will render useless most cryptographic\n   operations that have been performed on the message.\n\n   This extension provides an optimization that is useful in certain\n   specific situations.  It does not absolve clients from providing\n   basic functionality (content transfer decoding) that should be\n   available in all messaging clients.  Clients supporting this\n   extension SHOULD be prepared to perform their own CTE decoding\n   operations.\n\n7.  Formal Protocol Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (ABNF) notation as used in [ABNF], and incorporates by reference\n   the Core Rules defined in that document.\n\n   This syntax augments the grammar specified in [IMAP4rev1].\n\n   append         =/  \"APPEND\" SP mailbox [SP flag-list]\n                      [SP date-time] SP literal8\n\n   fetch-att      =/  \"BINARY\" [\".PEEK\"] section-binary [partial]\n                      / \"BINARY.SIZE\" section-binary\n\n   literal8       =   \"~{\" number \"}\" CRLF *OCTET\n                      ; <number> represents the number of OCTETs\n                      ; in the response string.\n\n   msg-att-static =/  \"BINARY\" section-binary SP (nstring / literal8)\n                      / \"BINARY.SIZE\" section-binary SP number\n\n   partial        =   \"<\" number \".\" nz-number \">\"\n\n   resp-text-code =/  \"UNKNOWN-CTE\"\n\n   section-binary =   \"[\" [section-part] \"]\"\n\n\n\n\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 5]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n8.  Normative References\n\n   [ABNF]      Crocker, D., Editor, and P. Overell, \"Augmented BNF for\n               Syntax Specifications: ABNF\", RFC 2234, November 1997.\n\n   [IMAP4rev1] Crispin, M., \"Internet Message Access Protocol Version\n               4rev1\", RFC 3501, March 2003.\n\n   [KEYWORD]   Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [MIME-IMB]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n               Extensions (MIME) Part One: Format of Internet Message\n               Bodies\", RFC 2045, November 1996.\n\n   [MIME-MHE]  Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n               Part Three: Message Header Extensions for Non-ASCII\n               Text\", RFC 2047, November 1996.\n\n9.  Security Considerations\n\n   There are no known additional security issues with this extension\n   beyond those described in the base protocol described in [IMAP4rev1].\n\n10.  Intellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   intellectual property or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; neither does it represent that it\n   has made any effort to identify any such rights.  Information on the\n   IETF's procedures with respect to rights in standards-track and\n   standards-related documentation can be found in BCP-11.  Copies of\n   claims of rights made available for publication and any assurances of\n   licenses to be made available, or the result of an attempt made to\n   obtain a general license or permission for the use of such\n   proprietary rights by implementors or users of this specification can\n   be obtained from the IETF Secretariat.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights which may cover technology that may be required to practice\n   this standard.  Please address the information to the IETF Executive\n   Director.\n\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 6]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n11.  Author's Address\n\n   Lyndon Nerenberg\n   Orthanc Systems\n   1606 - 10770 Winterburn Road\n   Edmonton, Alberta\n   Canada  T5S 1T6\n\n   EMail: lyndon@orthanc.ab.ca\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 7]\n\f\nRFC 3516             IMAP4 Binary Content Extension           April 2003\n\n\n12.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (2003).  All Rights Reserved.\n\n   This document and translations of it may be copied and furnished to\n   others, and derivative works that comment on or otherwise explain it\n   or assist in its implementation may be prepared, copied, published\n   and distributed, in whole or in part, without restriction of any\n   kind, provided that the above copyright notice and this paragraph are\n   included on all such copies and derivative works.  However, this\n   document itself may not be modified in any way, such as by removing\n   the copyright notice or references to the Internet Society or other\n   Internet organizations, except as needed for the purpose of\n   developing Internet standards in which case the procedures for\n   copyrights defined in the Internet Standards process must be\n   followed, or as required to translate it into languages other than\n   English.\n\n   The limited permissions granted above are perpetual and will not be\n   revoked by the Internet Society or its successors or assigns.\n\n   This document and the information contained herein is provided on an\n   \"AS IS\" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING\n   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING\n   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION\n   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF\n   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNerenberg                   Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc3691.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 3691                                    Isode Ltd.\nCategory: Standards Track                                  February 2004\n\n\n        Internet Message Access Protocol (IMAP) UNSELECT command\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2004).  All Rights Reserved.\n\nAbstract\n\n   This document defines an UNSELECT command that can be used to close\n   the current mailbox in an Internet Message Access Protocol - version\n   4 (IMAP4) session without expunging it.  Certain types of IMAP\n   clients need to release resources associated with the selected\n   mailbox without selecting a different mailbox.  While IMAP4 provides\n   this functionality (via a SELECT command with a nonexistent mailbox\n   name or reselecting the same mailbox with EXAMINE command), a more\n   clean solution is desirable.\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2\n   2.  UNSELECT command . . . . . . . . . . . . . . . . . . . . . . .  2\n   3.  Security Considerations. . . . . . . . . . . . . . . . . . . .  3\n   4.  Formal Syntax. . . . . . . . . . . . . . . . . . . . . . . . .  3\n   5.  IANA Considerations. . . . . . . . . . . . . . . . . . . . . .  3\n   6.  Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . .  3\n   7.  Normative References . . . . . . . . . . . . . . . . . . . . .  4\n   8.  Author's Address . . . . . . . . . . . . . . . . . . . . . . .  4\n   9.  Full Copyright Statement . . . . . . . . . . . . . . . . . . .  5\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 1]\n\f\nRFC 3691                 IMAP UNSELECT command             February 2004\n\n\n1.  Introduction\n\n   Certain types of IMAP clients need to release resources associated\n   with the selected mailbox without selecting a different mailbox.\n   While [IMAP4] provides this functionality (via a SELECT command with\n   a nonexistent mailbox name or reselecting the same mailbox with\n   EXAMINE command), a more clean solution is desirable.\n\n   [IMAP4] defines the CLOSE command that closes the selected mailbox as\n   well as permanently removes all messages with the \\Deleted flag set.\n\n   However [IMAP4] lacks a command that simply closes the mailbox\n   without expunging it.  This document defines the UNSELECT command for\n   this purpose.\n\n   A server which supports this extension indicates this with a\n   capability name of \"UNSELECT\".\n\n   \"C:\" and \"S:\" in examples show lines sent by the client and server\n   respectively.\n\n   The keywords \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\" in\n   this document when typed in uppercase are to be interpreted as\n   defined in \"Key words for use in RFCs to Indicate Requirement Levels\"\n   [KEYWORDS].\n\n2.  UNSELECT Command\n\n   Arguments:  none\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - unselect completed, now in authenticated state\n               BAD - no mailbox selected, or argument supplied but\n                     none permitted\n\n      The UNSELECT command frees server's resources associated with the\n      selected mailbox and returns the server to the authenticated\n      state.  This command performs the same actions as CLOSE, except\n      that no messages are permanently removed from the currently\n      selected mailbox.\n\n   Example:    C: A341 UNSELECT\n               S: A341 OK Unselect completed\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 2]\n\f\nRFC 3691                 IMAP UNSELECT command             February 2004\n\n\n3.  Security Considerations\n\n   It is believed that this extension doesn't raise any additional\n   security concerns not already discussed in [IMAP4].\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].  Non-terminals\n   referenced but not defined below are as defined by [IMAP4].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   command-select  /= \"UNSELECT\"\n\n5.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track or\n   IESG approved experimental RFC.  The registry is currently located\n   at:\n\n      http://www.iana.org/assignments/imap4-capabilities\n\n   This document defines the UNSELECT IMAP capabilities.  IANA has added\n   this capability to the registry.\n\n6.  Acknowledgments\n\n   UNSELECT command was originally implemented by Tim Showalter in Cyrus\n   IMAP server.\n\n   Also, the author of the document would like to thank Vladimir Butenko\n   and Mark Crispin for reminding that UNSELECT has to be documented.\n   Also thanks to Simon Josefsson for pointing out that there are\n   multiple ways to implement UNSELECT.\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 3]\n\f\nRFC 3691                 IMAP UNSELECT command             February 2004\n\n\n7.  Normative References\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [IMAP4]    Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 3501, March 2003.\n\n   [ABNF]     Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 2234, November 1997.\n\n8.  Author's Address\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   Hampton, Middlesex TW12 2BX\n\n   EMail: Alexey.Melnikov@isode.com\n   URI: http://www.melnikov.ca/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 4]\n\f\nRFC 3691                 IMAP UNSELECT command             February 2004\n\n\n9.  Full Copyright Statement\n\n   Copyright (C) The Internet Society (2004).  This document is subject\n   to the rights, licenses and restrictions contained in BCP 78 and\n   except as set forth therein, the authors retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE\n   REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE\n   INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR\n   IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed\n   to pertain to the implementation or use of the technology\n   described in this document or the extent to which any license\n   under such rights might or might not be available; nor does it\n   represent that it has made any independent effort to identify any\n   such rights.  Information on the procedures with respect to\n   rights in RFC documents can be found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use\n   of such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository\n   at http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention\n   any copyrights, patents or patent applications, or other\n   proprietary rights that may cover technology that may be required\n   to implement this standard.  Please address the information to the\n   IETF at ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc4013.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        K. Zeilenga\nRequest for Comments: 4013                           OpenLDAP Foundation\nCategory: Standards Track                                  February 2005\n\n\n       SASLprep: Stringprep Profile for User Names and Passwords\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2005).\n\nAbstract\n\n   This document describes how to prepare Unicode strings representing\n   user names and passwords for comparison.  The document defines the\n   \"SASLprep\" profile of the \"stringprep\" algorithm to be used for both\n   user names and passwords.  This profile is intended to be used by\n   Simple Authentication and Security Layer (SASL) mechanisms (such as\n   PLAIN, CRAM-MD5, and DIGEST-MD5), as well as other protocols\n   exchanging simple user names and/or passwords.\n\n1.  Introduction\n\n   The use of simple user names and passwords in authentication and\n   authorization is pervasive on the Internet.  To increase the\n   likelihood that user name and password input and comparison work in\n   ways that make sense for typical users throughout the world, this\n   document defines rules for preparing internationalized user names and\n   passwords for comparison.  For simplicity and implementation ease, a\n   single algorithm is defined for both user names and passwords.\n\n   The algorithm assumes all strings are comprised of characters from\n   the Unicode [Unicode] character set.\n\n   This document defines the \"SASLprep\" profile of the \"stringprep\"\n   algorithm [StringPrep].\n\n   The profile is designed for use in Simple Authentication and Security\n   Layer ([SASL]) mechanisms, such as [PLAIN], [CRAM-MD5], and\n   [DIGEST-MD5].  It may be applicable where simple user names and\n\n\n\nZeilenga                    Standards Track                     [Page 1]\n\f\nRFC 4013                        SASLprep                   February 2005\n\n\n   passwords are used.  This profile is not intended for use in\n   preparing identity strings that are not simple user names (e.g.,\n   email addresses, domain names, distinguished names), or where\n   identity or password strings that are not character data, or require\n   different handling (e.g., case folding).\n\n   This document does not alter the technical specification of any\n   existing protocols.  Any specification that wishes to use the\n   algorithm described in this document needs to explicitly incorporate\n   this document and provide precise details as to where and how this\n   algorithm is used by implementations of that specification.\n\n2.  The SASLprep Profile\n\n   This section defines the \"SASLprep\" profile of the \"stringprep\"\n   algorithm [StringPrep].  This profile is intended for use in\n   preparing strings representing simple user names and passwords.\n\n   This profile uses Unicode 3.2 [Unicode].\n\n   Character names in this document use the notation for code points and\n   names from the Unicode Standard [Unicode].  For example, the letter\n   \"a\" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.\n   In the lists of mappings and the prohibited characters, the \"U+\" is\n   left off to make the lists easier to read.  The comments for\n   character ranges are shown in square brackets (such as \"[CONTROL\n   CHARACTERS]\") and do not come from the standard.\n\n   Note: A glossary of terms used in Unicode can be found in [Glossary].\n   Information on the Unicode character encoding model can be found in\n   [CharModel].\n\n2.1.  Mapping\n\n   This profile specifies:\n\n      -  non-ASCII space characters [StringPrep, C.1.2] that can be\n         mapped to SPACE (U+0020), and\n\n      -  the \"commonly mapped to nothing\" characters [StringPrep, B.1]\n         that can be mapped to nothing.\n\n2.2.  Normalization\n\n   This profile specifies using Unicode normalization form KC, as\n   described in Section 4 of [StringPrep].\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 2]\n\f\nRFC 4013                        SASLprep                   February 2005\n\n\n2.3.  Prohibited Output\n\n   This profile specifies the following characters as prohibited input:\n\n      - Non-ASCII space characters [StringPrep, C.1.2]\n      - ASCII control characters [StringPrep, C.2.1]\n      - Non-ASCII control characters [StringPrep, C.2.2]\n      - Private Use characters [StringPrep, C.3]\n      - Non-character code points [StringPrep, C.4]\n      - Surrogate code points [StringPrep, C.5]\n      - Inappropriate for plain text characters [StringPrep, C.6]\n      - Inappropriate for canonical representation characters\n        [StringPrep, C.7]\n      - Change display properties or deprecated characters\n        [StringPrep, C.8]\n      - Tagging characters [StringPrep, C.9]\n\n2.4.  Bidirectional Characters\n\n   This profile specifies checking bidirectional strings as described in\n   [StringPrep, Section 6].\n\n2.5.  Unassigned Code Points\n\n   This profile specifies the [StringPrep, A.1] table as its list of\n   unassigned code points.\n\n3.  Examples\n\n   The following table provides examples of how various character data\n   is transformed by the SASLprep string preparation algorithm\n\n   #  Input            Output     Comments\n   -  -----            ------     --------\n   1  I<U+00AD>X       IX         SOFT HYPHEN mapped to nothing\n   2  user             user       no transformation\n   3  USER             USER       case preserved, will not match #2\n   4  <U+00AA>         a          output is NFKC, input in ISO 8859-1\n   5  <U+2168>         IX         output is NFKC, will match #1\n   6  <U+0007>                    Error - prohibited character\n   7  <U+0627><U+0031>            Error - bidirectional check\n\n4.  Security Considerations\n\n   This profile is intended to prepare simple user name and password\n   strings for comparison or use in cryptographic functions (e.g.,\n   message digests).  The preparation algorithm was specifically\n   designed such that its output is canonical, and it is well-formed.\n\n\n\nZeilenga                    Standards Track                     [Page 3]\n\f\nRFC 4013                        SASLprep                   February 2005\n\n\n   However, due to an anomaly [PR29] in the specification of Unicode\n   normalization, canonical equivalence is not guaranteed for a select\n   few character sequences.  These sequences, however, do not appear in\n   well-formed text.  This specification was published despite this\n   known technical problem.  It is expected that this specification will\n   be revised before further progression on the Standards Track (after\n   [Unicode] and/or [StringPrep] specifications have been updated to\n   address this problem).\n\n   It is not intended for preparing identity strings that are not simple\n   user names (e.g., distinguished names, domain names), nor is the\n   profile intended for use of simple user names that require different\n   handling (such as case folding).  Protocols (or applications of those\n   protocols) that have application-specific identity forms and/or\n   comparison algorithms should use mechanisms specifically designed for\n   these forms and algorithms.\n\n   Application of string preparation may have an impact upon the\n   feasibility of brute force and dictionary attacks.  While the number\n   of possible prepared strings is less than the number of possible\n   Unicode strings, the number of usable names and passwords is greater\n   than as if only ASCII was used.  Though SASLprep eliminates some\n   Unicode code point sequences as possible prepared strings, that\n   elimination generally makes the (canonical) output forms practicable\n   and prohibits nonsensical inputs.\n\n   User names and passwords should be protected from eavesdropping.\n\n   General \"stringprep\" and Unicode security considerations apply.  Both\n   are discussed in [StringPrep].\n\n5.  IANA Considerations\n\n   This document details the \"SASLprep\" profile of the [StringPrep]\n   protocol.  This profile has been registered in the stringprep profile\n   registry.\n\n      Name of this profile: SASLprep\n      RFC in which the profile is defined: RFC 4013\n      Indicator whether or not this is the newest version of the\n      profile: This is the first version of the SASPprep profile.\n\n6.  Acknowledgement\n\n   This document borrows text from \"Preparation of Internationalized\n   Strings ('stringprep')\" and \"Nameprep: A Stringprep Profile for\n   Internationalized Domain Names\", both by Paul Hoffman and Marc\n   Blanchet.  This document is a product of the IETF SASL WG.\n\n\n\nZeilenga                    Standards Track                     [Page 4]\n\f\nRFC 4013                        SASLprep                   February 2005\n\n\n7.  Normative References\n\n   [StringPrep]  Hoffman, P. and M. Blanchet, \"Preparation of\n                 Internationalized Strings (\"stringprep\")\", RFC 3454,\n                 December 2002.\n\n   [Unicode]     The Unicode Consortium, \"The Unicode Standard, Version\n                 3.2.0\" is defined by \"The Unicode Standard, Version\n                 3.0\" (Reading, MA, Addison-Wesley, 2000.  ISBN 0-201-\n                 61633-5), as amended by the \"Unicode Standard Annex\n                 #27: Unicode 3.1\"\n                 (http://www.unicode.org/reports/tr27/) and by the\n                 \"Unicode Standard Annex #28: Unicode 3.2\"\n                 (http://www.unicode.org/reports/tr28/).\n\n8.  Informative References\n\n   [Glossary]    The Unicode Consortium, \"Unicode Glossary\",\n                 <http://www.unicode.org/glossary/>.\n\n   [CharModel]   Whistler, K. and M. Davis, \"Unicode Technical Report\n                 #17, Character Encoding Model\", UTR17,\n                 <http://www.unicode.org/unicode/reports/tr17/>, August\n                 2000.\n\n   [SASL]        Melnikov, A., Ed., \"Simple Authentication and Security\n                 Layer (SASL)\", Work in Progress.\n\n   [CRAM-MD5]    Nerenberg, L., \"The CRAM-MD5 SASL Mechanism\", Work in\n                 Progress.\n\n   [DIGEST-MD5]  Leach, P., Newman, C., and A. Melnikov, \"Using Digest\n                 Authentication as a SASL Mechanism\", Work in Progress.\n\n   [PLAIN]       Zeilenga, K., Ed., \"The Plain SASL Mechanism\", Work in\n                 Progress.\n\n   [PR29]        \"Public Review Issue #29: Normalization Issue\",\n                 <http://www.unicode.org/review/pr-29.html>, February\n                 2004.\n\nAuthor's Address\n\n   Kurt D. Zeilenga\n   OpenLDAP Foundation\n\n   EMail: Kurt@OpenLDAP.org\n\n\n\n\nZeilenga                    Standards Track                     [Page 5]\n\f\nRFC 4013                        SASLprep                   February 2005\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2005).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the IETF's procedures with respect to rights in IETF Documents can\n   be found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at ietf-\n   ipr@ietf.org.\n\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc4314.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 4314                                    Isode Ltd.\nObsoletes: 2086                                            December 2005\nCategory: Standards Track\n\n\n               IMAP4 Access Control List (ACL) Extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2005).\n\nAbstract\n\n   The Access Control List (ACL) extension (RFC 2086) of the Internet\n   Message Access Protocol (IMAP) permits mailbox access control lists\n   to be retrieved and manipulated through the IMAP protocol.\n\n   This document is a revision of RFC 2086.  It defines several new\n   access control rights and clarifies which rights are required for\n   different IMAP commands.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 1]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\nTable of Contents\n\n   1. Introduction and Overview .......................................3\n      1.1. Conventions Used in This Document ..........................3\n   2. Access Control ..................................................3\n      2.1. Standard Rights ............................................5\n           2.1.1. Obsolete Rights .....................................5\n      2.2. Rights Defined in RFC 2086 .................................8\n   3. Access control management commands and responses ................8\n      3.1. SETACL Command .............................................8\n      3.2. DELETEACL Command ..........................................9\n      3.3. GETACL Command ............................................10\n      3.4. LISTRIGHTS Command ........................................10\n      3.5. MYRIGHTS Command ..........................................11\n      3.6. ACL Response ..............................................11\n      3.7. LISTRIGHTS Response .......................................12\n      3.8. MYRIGHTS Response .........................................12\n   4. Rights Required to Perform Different IMAP4rev1 Commands ........12\n   5. Other Considerations ...........................................17\n      5.1. Additional Requirements and Implementation Notes ..........17\n           5.1.1. Servers ............................................17\n           5.1.2. Clients ............................................18\n      5.2. Mapping of ACL Rights to READ-WRITE and READ-ONLY\n           Response Codes ............................................19\n   6. Security Considerations ........................................20\n   7. Formal Syntax ..................................................21\n   8. IANA Considerations ............................................22\n   9. Internationalization Considerations ............................22\n   Appendix A. Changes since RFC 2086 ................................23\n   Appendix B. Compatibility with RFC 2086 ...........................24\n   Appendix C. Known Deficiencies ....................................24\n   Appendix D. Acknowledgements ......................................25\n   Normative References ..............................................25\n   Informative References ............................................25\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 2]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n1.  Introduction and Overview\n\n   The ACL (Access Control List) extension of the Internet Message\n   Access Protocol [IMAP4] permits mailbox access control lists to be\n   retrieved and manipulated through the IMAP protocol.\n\n   This document is a revision of RFC 2086 [RFC2086].  It tries to\n   clarify different ambiguities in RFC 2086, in particular, the use of\n   UTF-8 [UTF-8] in access identifiers, which rights are required for\n   different IMAP4 commands, and how READ-WRITE/READ-ONLY response codes\n   are related to ACL.\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.\n\n   In all examples \"/\" character is used as hierarchy separator.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [KEYWORDS].\n\n   The phrase \"ACL server\" is just a shortcut for saying \"IMAP server\n   that supports ACL extension as defined in this document\".\n\n2.  Access Control\n\n   The ACL extension is present in any IMAP4 implementation that returns\n   \"ACL\" as one of the supported capabilities to the CAPABILITY command.\n\n   A server implementation conformant to this document MUST also return\n   rights (see below) not defined in Section 2.2 in the \"RIGHTS=\"\n   capability.\n\n   An access control list is a set of <access identifier,rights> pairs.\n   An ACL applies to a mailbox name.\n\n   Access identifier (or just \"identifier\") is a UTF-8 [UTF-8] string.\n   The identifier \"anyone\" is reserved to refer to the universal\n   identity (all authentications, including anonymous).  All user name\n   strings accepted by the LOGIN or AUTHENTICATE commands to\n   authenticate to the IMAP server are reserved as identifiers for the\n   corresponding users.  Identifiers starting with a dash (\"-\") are\n   reserved for \"negative rights\", described below.  All other\n   identifier strings are interpreted in an implementation-defined\n   manner.\n\n\n\n\nMelnikov                    Standards Track                     [Page 3]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   Rights is a string listing a (possibly empty) set of alphanumeric\n   characters, each character listing a set of operations that is being\n   controlled.  Lowercase letters are reserved for \"standard\" rights,\n   listed in Section 2.1.  (Note that for compatibility with deployed\n   clients and servers uppercase rights are not allowed.)  The set of\n   standard rights can only be extended by a standards-track document.\n   Digits are reserved for implementation- or site-defined rights.\n\n   An implementation MAY tie rights together or MAY force rights to\n   always or never be granted to particular identifiers.  For example,\n   in an implementation that uses UNIX mode bits, the rights \"swite\" are\n   tied, the \"a\" right is always granted to the owner of a mailbox and\n   is never granted to another user.  If rights are tied in an\n   implementation, the implementation must be conservative in granting\n   rights in response to SETACL commands--unless all rights in a tied\n   set are specified, none of that set should be included in the ACL\n   entry for that identifier.  A client can discover the set of rights\n   that may be granted to a given identifier in the ACL for a given\n   mailbox name by using the LISTRIGHTS command.\n\n   It is possible for multiple identifiers in an access control list to\n   apply to a given user.  For example, an ACL may include rights to be\n   granted to the identifier matching the user, one or more\n   implementation-defined identifiers matching groups that include the\n   user, and/or the identifier \"anyone\".  How these rights are combined\n   to determine the user's access is implementation defined.  An\n   implementation may choose, for example, to use the union of the\n   rights granted to the applicable identifiers.  An implementation may\n   instead choose, for example, to use only those rights granted to the\n   most specific identifier present in the ACL.  A client can determine\n   the set of rights granted to the logged-in user for a given mailbox\n   name by using the MYRIGHTS command.\n\n   When an identifier in an ACL starts with a dash (\"-\"), that indicates\n   that associated rights are to be removed from the identifier prefixed\n   by the dash.  This is referred to as a \"negative right\".  This\n   differs from DELETEACL in that a negative right is added to the ACL\n   and is a part of the calculation of the rights.\n\n   Let's assume that an identifier \"fred\" refers to a user with login\n   \"fred\".  If the identifier \"-fred\" is granted the \"w\" right, that\n   indicates that the \"w\" right is to be removed from users matching the\n   identifier \"fred\", even though the user \"fred\" might have the \"w\"\n   right as a consequence of some other identifier in the ACL.  A\n   DELETEACL of \"fred\" simply deletes the identifier \"fred\" from the\n   ACL; it does not affect any rights that the user \"fred\" may get from\n   another entry in the ACL, in particular it doesn't affect rights\n   granted to the identifier \"-fred\".\n\n\n\nMelnikov                    Standards Track                     [Page 4]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   Server implementations are not required to support \"negative right\"\n   identifiers.\n\n2.1.  Standard Rights\n\n   The currently defined standard rights are (note that the list below\n   doesn't list all commands that use a particular right):\n\n   l - lookup (mailbox is visible to LIST/LSUB commands, SUBSCRIBE\n       mailbox)\n   r - read (SELECT the mailbox, perform STATUS)\n   s - keep seen/unseen information across sessions (set or clear\n       \\SEEN flag via STORE, also set \\SEEN during APPEND/COPY/\n       FETCH BODY[...])\n   w - write (set or clear flags other than \\SEEN and \\DELETED via\n       STORE, also set them during APPEND/COPY)\n   i - insert (perform APPEND, COPY into mailbox)\n   p - post (send mail to submission address for mailbox,\n       not enforced by IMAP4 itself)\n   k - create mailboxes (CREATE new sub-mailboxes in any\n       implementation-defined hierarchy, parent mailbox for the new\n       mailbox name in RENAME)\n   x - delete mailbox (DELETE mailbox, old mailbox name in RENAME)\n   t - delete messages (set or clear \\DELETED flag via STORE, set\n       \\DELETED flag during APPEND/COPY)\n   e - perform EXPUNGE and expunge as a part of CLOSE\n   a - administer (perform SETACL/DELETEACL/GETACL/LISTRIGHTS)\n\n2.1.1.  Obsolete Rights\n\n   Due to ambiguity in RFC 2086, some existing RFC 2086 server\n   implementations use the \"c\" right to control the DELETE command.\n   Others chose to use the \"d\" right to control the DELETE command.  For\n   the former group, let's define the \"create\" right as union of the \"k\"\n   and \"x\" rights, and the \"delete\" right as union of the \"e\" and \"t\"\n   rights.  For the latter group, let's define the \"create\" rights as a\n   synonym to the \"k\" right, and the \"delete\" right as union of the \"e\",\n   \"t\", and \"x\" rights.\n\n   For compatibility with RFC 2086, this section defines two virtual\n   rights \"d\" and \"c\".\n\n   If a client includes the \"d\" right in a rights list, then it MUST be\n   treated as if the client had included every member of the \"delete\"\n   right.  (It is not an error for a client to specify both the \"d\"\n   right and one or more members of the \"delete\" right, but the effect\n   is no different than if just the \"d\" right or all members of the\n   \"delete\" right had been specified.)\n\n\n\nMelnikov                    Standards Track                     [Page 5]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   When any of the \"delete\" member rights is set in a list of rights,\n   the server MUST also include the \"d\" right when returning the list in\n   a MYRIGHTS or ACL response.  This is to enable older clients\n   conforming to RFC 2086 to work with newer servers. (*)\n\n   Example:    C: A001 SeTacl INBOX/Drafts David lrswida\n               S: A001 OK Setacl complete\n\n   The client has specified the \"d\" right in the SETACL command above\n   and it expands to \"et\" on the server:\n\n               C: A002 getacl INBOX/Drafts\n               S: * ACL INBOX Fred rwipslxcetda David lrswideta\n               S: A002 OK Getacl complete\n\n   If the identifier specified in the LISTRIGHTS command can be granted\n   any of the \"delete\" member rights on a mailbox, then the server MUST\n   include the \"d\" right in the corresponding LISTRIGHTS response. (*)\n   If the member rights aren't tied to non-member rights, then the \"d\"\n   right is returned by itself in the LISTRIGHTS response.  If any of\n   the member rights needs to be tied to one (or more) non-member right,\n   then the \"d\" right and all of the member rights need to be tied to\n   the same non-member right(s) (**).\n\n   If a client includes the \"c\" right in a rights list, then it MUST be\n   treated as if the client had included every member of the \"create\"\n   right.  (It is not an error for a client to specify both the \"c\"\n   right and one or more members of the \"create\" right, but the effect\n   is no different than if just the \"c\" right or all members of the\n   \"create\" right had been specified.)\n\n   When any of the \"create\" member rights is set in a list of rights,\n   the server MUST also include the \"c\" right when returning the list in\n   a MYRIGHTS or ACL response.  This is to enable older clients\n   conforming to RFC 2086 to work with newer servers. (*)\n\n   Example:    C: A003 Setacl INBOX/Drafts Byron lrswikda\n               S: A001 OK Setacl complete\n               C: A002 getAcl INBOX/Drafts\n               S: * ACL INBOX Fred rwipslxcetda Byron lrswikcdeta\n               S: A002 OK Getacl complete\n\n   The client has specified the \"d\" right in the SETACL command above\n   and it expands to \"et\" on the server: As the client has specified the\n   \"k\" right (which is a member of the \"c\" right), the server also\n   returns the \"c\" right.\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 6]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   If the identifier specified in the LISTRIGHTS command can be granted\n   any of the \"create\" member rights on a mailbox, then the server MUST\n   include the \"c\" right in the corresponding LISTRIGHTS response. (*)\n   If the member rights aren't tied to non-member rights, then the \"c\"\n   right is returned by itself in the LISTRIGHTS response.  If any of\n   the member rights needs to be tied to one (or more) non-member right,\n   then the \"c\" right and all of the member rights need to be tied to\n   the same non-member right(s) (**).\n\n   Example: The server that ties the rights as follows:\n\n               lr s w i p k x t\n\n            and c=k\n\n            will return:\n\n               S: * LISTRIGHTS archive/imap anyone \"\"\n                  lr s w i p k x t c d\n\n   Example: The server that ties the rights as follows:\n\n               lr s w i p k xte\n\n            and c=k\n\n            will return:\n\n               S: * LISTRIGHTS archive/imap anyone \"\"\n                  lr s w i p k xte c d\n\n   Example: The server that ties the rights as follows:\n\n               lr s w i p k x te\n\n            and c=k\n\n            will return:\n\n               S: * LISTRIGHTS archive/imap anyone \"\"\n                  lr s w i p k c x te d\n\n   Example: The server that ties the rights as follows:\n\n               lr swte i p k x\n\n            and c=kx\n\n\n\n\nMelnikov                    Standards Track                     [Page 7]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n            will return:\n\n               S: * LISTRIGHTS archive/imap anyone \"\"\n                  lr swted i p k x c\n\n   (*)  Clients conforming to this document MUST ignore the virtual \"d\"\n        and \"c\" rights in MYRIGHTS, ACL, and LISTRIGHTS responses.\n\n   (**) The IMAPEXT Working Group has debated this issue in great length\n        and after reviewing existing ACL implementations concluded that\n        this is a reasonable restriction.\n\n2.2.  Rights Defined in RFC 2086\n\n   The \"RIGHTS=\" capability MUST NOT include any of the rights defined\n   in RFC 2086: \"l\", \"r\", \"s\", \"w\", \"i\", \"p\", \"a\", \"c\", \"d\", and the\n   digits (\"0\" .. \"9\").\n\n3.  Access control management commands and responses\n\n   Servers, when processing a command that has an identifier as a\n   parameter (i.e., any of SETACL, DELETEACL, and LISTRIGHTS commands),\n   SHOULD first prepare the received identifier using \"SASLprep\" profile\n   [SASLprep] of the \"stringprep\" algorithm [Stringprep].  If the\n   preparation of the identifier fails or results in an empty string,\n   the server MUST refuse to perform the command with a BAD response.\n   Note that Section 6 recommends additional identifier's verification\n   steps.\n\n3.1.  SETACL Command\n\n   Arguments:  mailbox name\n               identifier\n               access right modification\n\n   Data:       no specific data for this command\n\n   Result:     OK - setacl completed\n               NO - setacl failure: can't set acl\n               BAD - arguments invalid\n\n   The SETACL command changes the access control list on the specified\n   mailbox so that the specified identifier is granted permissions as\n   specified in the third argument.\n\n   The third argument is a string containing an optional plus (\"+\") or\n   minus (\"-\") prefix, followed by zero or more rights characters.  If\n   the string starts with a plus, the following rights are added to any\n\n\n\nMelnikov                    Standards Track                     [Page 8]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   existing rights for the identifier.  If the string starts with a\n   minus, the following rights are removed from any existing rights for\n   the identifier.  If the string does not start with a plus or minus,\n   the rights replace any existing rights for the identifier.\n\n   Note that an unrecognized right MUST cause the command to return the\n   BAD response.  In particular, the server MUST NOT silently ignore\n   unrecognized rights.\n\n   Example:    C: A001 GETACL INBOX/Drafts\n               S: * ACL INBOX/Drafts Fred rwipslxetad Chris lrswi\n               S: A001 OK Getacl complete\n               C: A002 SETACL INBOX/Drafts Chris +cda\n               S: A002 OK Setacl complete\n               C: A003 GETACL INBOX/Drafts\n               S: * ACL INBOX/Drafts Fred rwipslxetad Chris lrswicdakxet\n               S: A003 OK Getacl complete\n\n\n               C: A035 SETACL INBOX/Drafts John lrQswicda\n               S: A035 BAD Uppercase rights are not allowed\n\n\n               C: A036 SETACL INBOX/Drafts John lrqswicda\n               S: A036 BAD The q right is not supported\n\n3.2.  DELETEACL Command\n\n   Arguments:  mailbox name\n               identifier\n\n   Data:       no specific data for this command\n\n   Result:     OK - deleteacl completed\n               NO - deleteacl failure: can't delete acl\n              BAD - arguments invalid\n\n   The DELETEACL command removes any <identifier,rights> pair for the\n   specified identifier from the access control list for the specified\n   mailbox.\n\n   Example:    C: B001 getacl INBOX\n               S: * ACL INBOX Fred rwipslxetad -Fred wetd $team w\n               S: B001 OK Getacl complete\n               C: B002 DeleteAcl INBOX Fred\n               S: B002 OK Deleteacl complete\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 9]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n               C: B003 GETACL INBOX\n               S: * ACL INBOX -Fred wetd $team w\n               S: B003 OK Getacl complete\n\n3.3.  GETACL Command\n\n   Arguments:  mailbox name\n\n   Data:       untagged responses: ACL\n\n   Result:     OK - getacl completed\n               NO - getacl failure: can't get acl\n              BAD - arguments invalid\n\n   The GETACL command returns the access control list for mailbox in an\n   untagged ACL response.\n\n   Some implementations MAY permit multiple forms of an identifier to\n   reference the same IMAP account.  Usually, such implementations will\n   have a canonical form that is stored internally.  An ACL response\n   caused by a GETACL command MAY include a canonicalized form of the\n   identifier that might be different from the one used in the\n   corresponding SETACL command.\n\n   Example:    C: A002 GETACL INBOX\n               S: * ACL INBOX Fred rwipsldexta\n               S: A002 OK Getacl complete\n\n3.4.  LISTRIGHTS Command\n\n   Arguments:  mailbox name\n               identifier\n\n   Data:       untagged responses: LISTRIGHTS\n\n   Result:     OK - listrights completed\n               NO - listrights failure: can't get rights list\n               BAD - arguments invalid\n\n   The LISTRIGHTS command takes a mailbox name and an identifier and\n   returns information about what rights can be granted to the\n   identifier in the ACL for the mailbox.\n\n   Some implementations MAY permit multiple forms of an identifier to\n   reference the same IMAP account.  Usually, such implementations will\n   have a canonical form that is stored internally.  A LISTRIGHTS\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 10]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   response caused by a LISTRIGHTS command MUST always return the same\n   form of an identifier as specified by the client.  This is to allow\n   the client to correlate the response with the command.\n\n   Example:    C: a001 LISTRIGHTS ~/Mail/saved smith\n               S: * LISTRIGHTS ~/Mail/saved smith la r swicdkxte\n               S: a001 OK Listrights completed\n\n   Example:    C: a005 listrights archive/imap anyone\n               S: * LISTRIGHTS archive.imap anyone \"\"\n                  l r s w i p k x t e c d a 0 1 2 3 4 5 6 7 8 9\n               S: a005 Listrights successful\n\n3.5.  MYRIGHTS Command\n\n   Arguments:  mailbox name\n\n   Data:       untagged responses: MYRIGHTS\n\n   Result:     OK - myrights completed\n               NO - myrights failure: can't get rights\n               BAD - arguments invalid\n\n   The MYRIGHTS command returns the set of rights that the user has to\n   mailbox in an untagged MYRIGHTS reply.\n\n   Example:    C: A003 MYRIGHTS INBOX\n               S: * MYRIGHTS INBOX rwiptsldaex\n               S: A003 OK Myrights complete\n\n3.6.  ACL Response\n\n   Data:       mailbox name\n               zero or more identifier rights pairs\n\n   The ACL response occurs as a result of a GETACL command.  The first\n   string is the mailbox name for which this ACL applies.  This is\n   followed by zero or more pairs of strings; each pair contains the\n   identifier for which the entry applies followed by the set of rights\n   that the identifier has.\n\n   Section 2.1.1 details additional server requirements related to\n   handling of the virtual \"d\" and \"c\" rights.\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 11]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n3.7.  LISTRIGHTS Response\n\n   Data:       mailbox name\n               identifier\n               required rights\n               list of optional rights\n\n   The LISTRIGHTS response occurs as a result of a LISTRIGHTS command.\n   The first two strings are the mailbox name and identifier for which\n   this rights list applies.  Following the identifier is a string\n   containing the (possibly empty) set of rights the identifier will\n   always be granted in the mailbox.\n\n   Following this are zero or more strings each containing a set of\n   rights the identifier can be granted in the mailbox.  Rights\n   mentioned in the same string are tied together.  The server MUST\n   either grant all tied rights to the identifier in the mailbox or\n   grant none.  Section 2.1.1 details additional server requirements\n   related to handling of the virtual \"d\" and \"c\" rights.\n\n   The same right MUST NOT be listed more than once in the LISTRIGHTS\n   command.\n\n3.8.  MYRIGHTS Response\n\n   Data:       mailbox name\n               rights\n\n   The MYRIGHTS response occurs as a result of a MYRIGHTS command.  The\n   first string is the mailbox name for which these rights apply.  The\n   second string is the set of rights that the client has.\n\n   Section 2.1.1 details additional server requirements related to\n   handling of the virtual \"d\" and \"c\" rights.\n\n4.  Rights Required to Perform Different IMAP4rev1 Commands\n\n   Before executing a command, an ACL-compliant server MUST check which\n   rights are required to perform it.  This section groups command by\n   functions they perform and list the rights required.  It also gives\n   the detailed description of any special processing required.\n\n   For the purpose of this section the UID counterpart of a command is\n   considered to be the same command, e.g., both UID COPY and COPY\n   commands require the same set of rights.\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 12]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   The table below summarizes different rights or their combinations\n   that are required in order to perform different IMAP operations.  As\n   it is not always possible to express complex right checking and\n   interactions, the description after the table should be used as the\n   primary reference.\n\n   +-------------------+---+---+---+---+---+---+---+---+---+---+---+---+\n   |Operations\\Rights  | l | r | s | w | i | k | x | t | e | a |Any|Non|\n   +-------------------+---+---+---+---+---+---+---+---+---+---+---+---+\n   |                  commands in authenticated state                  |\n   +-------------------------------------------------------------------+\n   |      LIST         | + |   |   |   |   |   |   |   |   |   |   |   |\n   |   SUBSCRIBE       | * |   |   |   |   |   |   |   |   |   |   | * |\n   |  UNSUBSCRIBE      |   |   |   |   |   |   |   |   |   |   |   | + |\n   |      LSUB         | * |   |   |   |   |   |   |   |   |   |   | * |\n   |CREATE (for parent)|   |   |   |   |   | + |   |   |   |   |   |   |\n   |     DELETE        |   | ? |   |   |   |   | + | ? | ? |   |   |   |\n   |     RENAME        |   |   |   |   |   | + | + |   |   |   |   |   |\n   |  SELECT/EXAMINE   |   | + |   |   |   |   |   |   |   |   |   |   |\n   |      STATUS       |   | + |   |   |   |   |   |   |   |   |   |   |\n   |  SETACL/DELETEACL |   |   |   |   |   |   |   |   |   | + |   |   |\n   | GETACL/LISTRIGHTS |   |   |   |   |   |   |   |   |   | + |   |   |\n   |     MYRIGHTS      |   |   |   |   |   |   |   |   |   |   | + |   |\n   |      APPEND       |   |   | ? | ? | + |   |   | ? |   |   |   |   |\n   +-------------------------------------------------------------------+\n   |                     commands in selected state                    |\n   +-------------------------------------------------------------------+\n   |       COPY        |   |   | ? | ? | + |   |   | ? |   |   |   |   |\n   |     EXPUNGE       |   |   |   |   |   |   |   |   | + |   |   |   |\n   |      CLOSE        |   |   |   |   |   |   |   |   | ? |   |   |   |\n   |      FETCH        |   |   | ? |   |   |   |   |   |   |   |   |   |\n   |   STORE flags     |   |   | ? | ? |   |   |   | ? |   |   |   |   |\n   +-------------------+---+---+---+---+---+---+---+---+---+---+---+---+\n\n   Note: for all commands in the selected state, the \"r\" is implied,\n   because it is required to SELECT/EXAMINE a mailbox.  Servers are not\n   required to check presence of the \"r\" right once a mailbox is\n   successfully selected.\n\n   Legend:\n    +     - The right is required\n    *     - Only one of the rights marked with * is required\n            (see description below)\n    ?     - The right is OPTIONAL (see description below)\n    \"Any\" - at least one of the \"l\", \"r\", \"i\", \"k\", \"x\", \"a\" rights is\n            required\n    \"Non\" - No rights required to perform the command\n\n\n\n\nMelnikov                    Standards Track                    [Page 13]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   Listing and subscribing/unsubscribing mailboxes:\n      LIST - \"l\" right is required.  However, unlike other commands\n      (e.g., SELECT) the server MUST NOT return a NO response if it\n      can't list a mailbox.\n      Note that if the user has \"l\" right to a mailbox \"A/B\", but not to\n      its parent mailbox \"A\", the LIST command should behave as if the\n      mailbox \"A\" doesn't exist, for example:\n\n               C: A777 LIST \"\" *\n               S: * LIST (\\NoInferiors) \"/\" \"A/B\"\n               S: * LIST () \"/\" \"C\"\n               S: * LIST (\\NoInferiors) \"/\" \"C/D\"\n               S: A777 OK LIST completed\n\n\n      SUBSCRIBE - \"l\" right is required only if the server checks for\n      mailbox existence when performing SUBSCRIBE.\n\n      UNSUBSCRIBE - no rights required to perform this operation.\n\n      LSUB - \"l\" right is required only if the server checks for mailbox\n      existence when performing SUBSCRIBE.  However, unlike other\n      commands (e.g., SELECT) the server MUST NOT return a NO response\n      if it can't list a subscribed mailbox.\n\n   Mailbox management:\n      CREATE - \"k\" right on a nearest existing parent mailbox.  When a\n      new mailbox is created, it SHOULD inherit the ACL from the parent\n      mailbox (if one exists) in the defined hierarchy.\n\n      DELETE - \"x\" right on the mailbox.  Note that some servers don't\n      allow to delete a non-empty mailbox.  If this is the case, the\n      user would also need \"r\", \"e\", and \"t\" rights, in order to open\n      the mailbox and empty it.\n\n      The DELETE command MUST delete the ACL associated with the deleted\n      mailbox.\n\n      RENAME - Moving a mailbox from one parent to another requires the\n      \"x\" right on the mailbox itself and the \"k\" right for the new\n      parent.  For example, if the user wants to rename the mailbox\n      named \"A/B/C\" to \"D/E\", the user must have the \"x\" right for the\n      mailbox \"A/B/C\" and the \"k\" right for the mailbox \"D\".\n      The RENAME command SHOULD NOT change the ACLs on the renamed\n      mailbox and submailboxes.\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 14]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   Copying or appending messages:\n      Before performing a COPY/APPEND command, the server MUST check if\n      the user has \"i\" right for the target mailbox.  If the user\n      doesn't have \"i\" right, the operation fails.  Otherwise for each\n      copied/appended message the server MUST check if the user has\n         \"t\" right - when the message has \\Deleted flag set\n         \"s\" right - when the message has \\Seen flag set\n         \"w\" right - for all other message flags.\n      Only when the user has a particular right are the corresponding\n      flags stored for the newly created message.  The server MUST NOT\n      fail a COPY/APPEND if the user has no rights to set a particular\n      flag.\n\n   Example:    C: A003 MYRIGHTS TargetMailbox\n               S: * MYRIGHTS TargetMailbox rwis\n               S: A003 OK Myrights complete\n\n               C: A004 FETCH 1:3 (FLAGS)\n               S: * 1 FETCH (FLAGS (\\Draft \\Deleted)\n               S: * 2 FETCH (FLAGS (\\Answered)\n               S: * 3 FETCH (FLAGS ($Forwarded \\Seen)\n               S: A004 OK Fetch Completed\n\n               C: A005 COPY 1:3 TargetMailbox\n               S: A005 OK Copy completed\n\n               C: A006 SELECT TargetMailbox\n                  ...\n               S: A006 Select Completed\n\n      Let's assume that the copied messages received message numbers\n      77:79.\n\n               C: A007 FETCH 77:79 (FLAGS)\n               S: * 77 FETCH (FLAGS (\\Draft))\n               S: * 78 FETCH (FLAGS (\\Answered))\n               S: * 79 FETCH (FLAGS ($Forwarded \\Seen))\n               S: A007 OK Fetch Completed\n\n      \\Deleted flag was lost on COPY, as the user has no \"t\" right in\n      the target mailbox.\n      If the MYRIGHTS command with the tag A003 would have returned:\n\n               S: * MYRIGHTS TargetMailbox rsti\n\n      the response from the FETCH with the tag A007 would have been:\n\n               C: A007 FETCH 77:79 (FLAGS)\n\n\n\nMelnikov                    Standards Track                    [Page 15]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n               S: * 77 FETCH (FLAGS (\\Deleted))\n               S: * 78 FETCH (FLAGS ())\n               S: * 79 FETCH (FLAGS (\\Seen))\n               S: A007 OK Fetch Completed\n\n      In the latter case, \\Answered, $Forwarded, and \\Draft flags were\n      lost on COPY, as the user has no \"w\" right in the target mailbox.\n\n   Expunging the selected mailbox:\n      EXPUNGE - \"e\" right on the selected mailbox.\n\n      CLOSE - \"e\" right on the selected mailbox.  If the server is\n      unable to expunge the mailbox because the user doesn't have the\n      \"e\" right, the server MUST ignore the expunge request, close the\n      mailbox, and return the tagged OK response.\n\n   Fetch information about a mailbox and its messages:\n      SELECT/EXAMINE/STATUS - \"r\" right on the mailbox.\n\n      FETCH - A FETCH request that implies setting \\Seen flag MUST NOT\n      set it, if the current user doesn't have \"s\" right.\n\n   Changing flags:\n      STORE - the server MUST check if the user has\n         \"t\" right - when the user modifies \\Deleted flag\n         \"s\" right - when the user modifies \\Seen flag\n         \"w\" right - for all other message flags.\n      STORE operation SHOULD NOT fail if the user has rights to modify\n      at least one flag specified in the STORE, as the tagged NO\n      response to a STORE command is not handled very well by deployed\n      clients.\n\n   Changing ACLs:\n      SETACL/DELETEACL - \"a\" right on the mailbox.\n\n   Reading ACLs:\n      GETACL - \"a\" right on the mailbox.\n\n      MYRIGHTS - any of the following rights is required to perform the\n      operation: \"l\", \"r\", \"i\", \"k\", \"x\", \"a\".\n\n      LISTRIGHTS - \"a\" right on the mailbox.\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 16]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n5.  Other Considerations\n\n5.1.  Additional Requirements and Implementation Notes\n\n5.1.1.  Servers\n\n   This document defines an additional capability that is used to\n   announce the list of extra rights (excluding the ones defined in RFC\n   2086) supported by the server.  The set of rights MUST include \"t\",\n   \"e\", \"x\", and \"k\".  Note that the extra rights can appear in any\n   order.\n\n   Example:    C: 1 capability\n               S: * CAPABILITY IMAP4REV1 STARTTLS LITERAL+\n                  ACL RIGHTS=texk\n               S: 1 OK completed\n\n   Any server implementing an ACL extension MUST accurately reflect the\n   current user's rights in FLAGS and PERMANENTFLAGS responses.\n\n   Example:    C: A142 SELECT INBOX\n               S: * 172 EXISTS\n               S: * 1 RECENT\n               S: * OK [UNSEEN 12] Message 12 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * OK [UIDNEXT 4392] Predicted next UID\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS (\\Seen \\Answered \\Flagged \\*)] L\n               S: A142 OK [READ-WRITE] SELECT completed\n               C: A143 MYRIGHTS INBOX\n               S: * MYRIGHTS INBOX lrwis\n               S: A143 OK completed\n\n   Note that in order to get better performance the client MAY pipeline\n   SELECT and MYRIGHTS commands:\n\n               C: A142 SELECT INBOX\n               C: A143 MYRIGHTS INBOX\n               S: * 172 EXISTS\n               S: * 1 RECENT\n               S: * OK [UNSEEN 12] Message 12 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] UIDs valid\n               S: * OK [UIDNEXT 4392] Predicted next UID\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS (\\Seen \\Answered \\Flagged \\*)] L\n               S: A142 OK [READ-WRITE] SELECT completed\n               S: * MYRIGHTS INBOX lrwis\n               S: A143 OK completed\n\n\n\nMelnikov                    Standards Track                    [Page 17]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   Servers MAY cache the rights a user has on a mailbox when the mailbox\n   is selected, so that if a client's rights on a mailbox are changed\n   with SETACL or DELETEACL, commands specific to the selected state\n   (e.g., STORE, EXPUNGE) might not reflect the changed rights until the\n   mailbox is re-selected.  If the server checks the rights on each\n   command, then it SHOULD send FLAGS and PERMANENTFLAGS responses if\n   they have changed.  If such server detects that the user no longer\n   has read access to the mailbox, it MAY send an untagged BYE response\n   and close connection.  It MAY also refuse to execute all commands\n   specific to the selected state until the mailbox is closed; however,\n   server implementors should note that most clients don't handle NO\n   responses very well.\n\n   An ACL server MAY modify one or more ACLs for one or more identifiers\n   as a side effect of modifying the ACL specified in a\n   SETACL/DELETEACL.  If the server does that, it MUST send untagged ACL\n   response(s) to notify the client about the changes made.\n\n   An ACL server implementation MUST treat received ACL modification\n   commands as a possible ambiguity with respect to subsequent commands\n   affected by the ACL, as described in Section 5.5 of [IMAP4].  Hence a\n   pipeline SETACL + MYRIGHTS is an ambiguity with respect to the\n   server, meaning that the server must execute the SETACL command to\n   completion before the MYRIGHTS.  However, clients are permitted to\n   send such a pipeline.\n\n5.1.2.  Clients\n\n   The following requirement is put on clients in order to allow for\n   future extensibility.  A client implementation that allows a user to\n   read and update ACLs MUST preserve unrecognized rights that it\n   doesn't allow the user to change.  That is, if the client\n\n   1) can read ACLs\n    and\n   2) can update ACLs\n    but\n   3) doesn't allow the user to change the rights the client doesn't\n   recognize, then it MUST preserve unrecognized rights.\n\n   Otherwise the client could risk unintentionally removing permissions\n   it doesn't understand.\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 18]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n5.2.  Mapping of ACL Rights to READ-WRITE and READ-ONLY Response Codes\n\n   A particular ACL server implementation MAY allow \"shared multiuser\n   access\" to some mailboxes.  \"Shared multiuser access\" to a mailbox\n   means that multiple different users are able to access the same\n   mailbox, if they have proper access rights.  \"Shared multiuser\n   access\" to the mailbox doesn't mean that the ACL for the mailbox is\n   currently set to allow access by multiple users.  Let's denote a\n   \"shared multiuser write access\" as a \"shared multiuser access\" when a\n   user can be granted flag modification rights (any of \"w\", \"s\", or\n   \"t\").\n\n   Section 4 describes which rights are required for modifying different\n   flags.\n\n   If the ACL server implements some flags as shared for a mailbox\n   (i.e., the ACL for the mailbox MAY be set up so that changes to those\n   flags are visible to another user), let's call the set of rights\n   associated with these flags (as described in Section 4) for that\n   mailbox collectively as \"shared flag rights\".  Note that the \"shared\n   flag rights\" set MAY be different for different mailboxes.\n\n   If the server doesn't support \"shared multiuser write access\" to a\n   mailbox or doesn't implement shared flags on the mailbox, \"shared\n   flag rights\" for the mailbox is defined to be the empty set.\n\n   Example 1: Mailbox \"banan\" allows \"shared multiuser write access\" and\n              implements flags \\Deleted, \\Answered, and $MDNSent as\n              shared flags. \"Shared flag rights\" for the mailbox \"banan\"\n              is a set containing flags \"t\" (because system flag\n              \\Deleted requires \"t\" right) and \"w\" (because both\n              \\Answered and $MDNSent require \"w\" right).\n\n   Example 2: Mailbox \"apple\" allows \"shared multiuser write access\" and\n              implements \\Seen system flag as shared flag. \"Shared flag\n              rights\" for the mailbox \"apple\" contains \"s\" right\n              because system flag \\Seen requires \"s\" right.\n\n   Example 3: Mailbox \"pear\" allows \"shared multiuser write access\" and\n              implements flags \\Seen, \\Draft as shared flags. \"Shared\n              flag rights\" for the mailbox \"apple\" is a set containing\n              flags \"s\" (because system flag \\Seen requires \"s\" right)\n              and \"w\" (because system flag \\Draft requires \"w\" right).\n\n   The server MUST include a READ-ONLY response code in the tagged OK\n   response to a SELECT command if none of the following rights is\n   granted to the current user:\n\n\n\n\nMelnikov                    Standards Track                    [Page 19]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n    \"i\", \"e\", and \"shared flag rights\"(***).\n\n   The server SHOULD include a READ-WRITE response code in the tagged OK\n   response if at least one of the \"i\", \"e\", or \"shared flag\n   rights\"(***) is granted to the current user.\n\n   (***) Note that a future extension to this document can extend the\n   list of rights that causes the server to return the READ-WRITE\n   response code.\n\n   Example 1 (continued): The user that has \"lrs\" rights for the mailbox\n                          \"banan\".  The server returns READ-ONLY\n                          response code on SELECT, as none of \"iewt\"\n                          rights is granted to the user.\n\n   Example 2 (continued): The user that has \"rit\" rights for the mailbox\n                          \"apple\".  The server returns READ-WRITE\n                          response code on SELECT, as the user has \"i\"\n                          right.\n\n   Example 3 (continued): The user that has \"rset\" rights for the\n                          mailbox \"pear\".  The server returns READ-WRITE\n                          response code on SELECT, as the user has \"e\"\n                          and \"s\" rights.\n\n6.  Security Considerations\n\n   An implementation MUST make sure the ACL commands themselves do not\n   give information about mailboxes with appropriately restricted ACLs.\n   For example, when a user agent executes a GETACL command on a mailbox\n   that the user has no permission to LIST, the server would respond to\n   that request with the same error that would be used if the mailbox\n   did not exist, thus revealing no existence information, much less the\n   mailbox's ACL.\n\n   IMAP clients implementing ACL that are able to modify ACLs SHOULD\n   warn a user that wants to give full access (or even just the \"a\"\n   right) to the special identifier \"anyone\".\n\n   This document relies on [SASLprep] to describe steps required to\n   perform identifier canonicalization (preparation).  The preparation\n   algorithm in SASLprep was specifically designed such that its output\n   is canonical, and it is well-formed.  However, due to an anomaly\n   [PR29] in the specification of Unicode normalization, canonical\n   equivalence is not guaranteed for a select few character sequences.\n   Identifiers prepared with SASLprep can be stored and returned by an\n   ACL server.  The anomaly affects ACL manipulation and evaluation of\n   identifiers containing the selected character sequences.  These\n\n\n\nMelnikov                    Standards Track                    [Page 20]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   sequences, however, do not appear in well-formed text.  In order to\n   address this problem, an ACL server MAY reject identifiers containing\n   sequences described in [PR29] by sending the tagged BAD response.\n   This is in addition to the requirement to reject identifiers that\n   fail SASLprep preparation as described in Section 3.\n\n   Other security considerations described in [IMAP4] are relevant to\n   this document.  In particular, ACL information is sent in the clear\n   over the network unless confidentiality protection is negotiated.\n\n   This can be accomplished either by the use of STARTTLS, negotiated\n   privacy protection in the AUTHENTICATE command, or some other\n   protection mechanism.\n\n7.  Formal Syntax\n\n   Formal syntax is defined using ABNF [ABNF], extending the ABNF rules\n   in Section 9 of [IMAP4].  Elements not defined here can be found in\n   [ABNF] and [IMAP4].\n\n   Except as noted otherwise, all alphabetic characters are case\n   insensitive.  The use of uppercase or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   LOWER-ALPHA     =  %x61-7A   ;; a-z\n\n   acl-data        = \"ACL\" SP mailbox *(SP identifier SP\n                       rights)\n\n   capability      =/ rights-capa\n                       ;;capability is defined in [IMAP4]\n\n   command-auth    =/ setacl / deleteacl / getacl /\n                       listrights / myrights\n                       ;;command-auth is defined in [IMAP4]\n\n   deleteacl       = \"DELETEACL\" SP mailbox SP identifier\n\n   getacl          = \"GETACL\" SP mailbox\n\n   identifier      = astring\n\n   listrights      = \"LISTRIGHTS\" SP mailbox SP identifier\n\n   listrights-data = \"LISTRIGHTS\" SP mailbox SP identifier\n                           SP rights *(SP rights)\n\n\n\n\nMelnikov                    Standards Track                    [Page 21]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   mailbox-data    =/ acl-data / listrights-data / myrights-data\n                       ;;mailbox-data is defined in [IMAP4]\n\n   mod-rights      = astring\n                       ;; +rights to add, -rights to remove\n                       ;; rights to replace\n\n   myrights        = \"MYRIGHTS\" SP mailbox\n\n   myrights-data   = \"MYRIGHTS\" SP mailbox SP rights\n\n   new-rights      = 1*LOWER-ALPHA\n                       ;; MUST include \"t\", \"e\", \"x\", and \"k\".\n                       ;; MUST NOT include standard rights listed\n                       ;; in section 2.2\n\n   rights          = astring\n                       ;; only lowercase ASCII letters and digits\n                       ;; are allowed.\n\n   rights-capa     = \"RIGHTS=\" new-rights\n                       ;; RIGHTS=... capability\n\n   setacl          = \"SETACL\" SP mailbox SP identifier\n                       SP mod-rights\n\n8.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards-track or\n   IESG-approved experimental RFC.  The registry is currently located\n   at:\n\n      http://www.iana.org/assignments/imap4-capabilities\n\n   This document defines the RIGHTS= IMAP capability.  IANA has added\n   this capability to the registry.\n\n9.  Internationalization Considerations\n\n   Section 3 states requirements on servers regarding\n   internationalization of identifiers.\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 22]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\nAppendix A.  Changes since RFC 2086\n\n   1.   Changed the charset of \"identifier\" from US-ASCII to UTF-8.\n   2.   Specified that mailbox deletion is controlled by the \"x\" right\n        and EXPUNGE is controlled by the \"e\" right.\n   3.   Added the \"t\" right that controls STORE \\Deleted.  Redefined the\n        \"d\" right to be a macro for \"e\", \"t\", and possibly \"x\".\n   4.   Added the \"k\" right that controls CREATE.  Redefined the \"c\"\n        right to be a macro for \"k\" and possibly \"x\".\n   5.   Specified that the \"a\" right also controls DELETEACL.\n   6.   Specified that the \"r\" right also controls STATUS.\n   7.   Removed the requirement to check the \"r\" right for CHECK, SEARCH\n        and FETCH, as this is required for SELECT/EXAMINE to be\n        successful.\n   8.   LISTRIGHTS requires the \"a\" right on the mailbox (same as\n        SETACL).\n   9.   Deleted \"PARTIAL\", this is a deprecated feature of RFC 1730.\n   10.  Specified that the \"w\" right controls setting flags other than\n        \\Seen and \\Deleted on APPEND.  Also specified that the \"s\" right\n        controls the \\Seen flag and that the \"t\" right controls the\n        \\Deleted flag.\n   11.  Specified that SUBSCRIBE is NOT allowed with the \"r\" right.\n   12.  Specified that the \"l\" right controls SUBSCRIBE.\n   13.  GETACL is NOT allowed with the \"r\" right, even though there are\n        several implementations that allows that.  If a user only has\n        \"r\" right, GETACL can disclose information about identifiers\n        existing on the mail system.\n   14.  Clarified that RENAME requires the \"k\" right for the new parent\n        and the \"x\" right for the old name.\n   15.  Added new section that describes which rights are required\n        and/or checked when performing various IMAP commands.\n   16.  Added mail client security considerations when dealing with\n        special identifier \"anyone\".\n   17.  Clarified that negative rights are not the same as DELETEACL.\n   18.  Added \"Compatibility with RFC 2086\" section.\n   19.  Added section about mapping of ACL rights to READ-WRITE and\n        READ-ONLY response codes.\n   20.  Changed BNF to ABNF.\n   21.  Added \"Implementation Notes\" section.\n   22.  Updated \"References\" section.\n   23.  Added more examples.\n   24.  Clarified when the virtual \"c\" and \"d\" rights are returned in\n        ACL, MYRIGHTS, and LISTRIGHTS responses.\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 23]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\nAppendix B.  Compatibility with RFC 2086\n\n   This non-normative section gives guidelines as to how an existing RFC\n   2086 server implementation may be updated to comply with this\n   document.\n\n   This document splits the \"d\" right into several new different rights:\n   \"t\", \"e\", and possibly \"x\" (see Section 2.1.1 for more details).  The\n   \"d\" right remains for backward-compatibility, but it is a virtual\n   right.  There are two approaches for RFC 2086 server implementors to\n   handle the \"d\" right and the new rights that have replaced it:\n\n   a.  Tie \"t\", \"e\" (and possibly \"x) together - almost no changes.\n   b.  Implement separate \"x\", \"t\" and \"e\".  Return the \"d\" right in a\n       MYRIGHTS response or an ACL response containing ACL information\n       when any of the \"t\", \"e\" (and \"x\") is granted.\n\n   In a similar manner this document splits the \"c\" right into several\n   new different rights: \"k\" and possibly \"x\" (see Section 2.1.1 for\n   more details).  The \"c\" right remains for backwards-compatibility but\n   it is a virtual right.  Again, RFC 2086 server implementors can\n   choose to tie rights or to implement separate rights, as described\n   above.\n\n   Also check Sections 5.1.1 and 5.1.2, as well as Appendix A, to see\n   other changes required.  Server implementors should check which\n   rights are required to invoke different IMAP4 commands as described\n   in Section 4.\n\nAppendix C.  Known Deficiencies\n\n   This specification has some known deficiencies including:\n\n   1.  This is inadequate to provide complete read-write access to\n       mailboxes protected by Unix-style rights bits because there is no\n       equivalent to \"chown\" and \"chgrp\" commands nor is there a good\n       way to discover such limitations are present.\n   2.  Because this extension leaves the specific semantics of how\n       rights are combined by the server as implementation defined, the\n       ability to build a user-friendly interface is limited.\n   3.  Users, groups, and special identifiers (e.g., anyone) exist in\n       the same namespace.\n\n   The work-in-progress \"ACL2\" extension is intended to redesign this\n   extension to address these deficiencies without the constraint of\n   backward-compatibility and may eventually supercede this facility.\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 24]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\n   However, RFC 2086 is deployed in multiple implementations so this\n   intermediate step, which fixes the straightforward deficiencies in a\n   backward-compatible fashion, is considered worthwhile.\n\nAppendix D.  Acknowledgements\n\n   This document is a revision of RFC 2086 written by John G. Myers.\n\n   Editor appreciates comments received from Mark Crispin, Chris Newman,\n   Cyrus Daboo, John G. Myers, Dave Cridland, Ken Murchison, Steve Hole,\n   Vladimir Butenko, Larry Greenfield, Robert Siemborski, Harrie\n   Hazewinkel, Philip Guenther, Brian Candler, Curtis King, Lyndon\n   Nerenberg, Lisa Dusseault, Arnt Gulbrandsen, and other participants\n   of the IMAPEXT working group.\n\nNormative References\n\n   [KEYWORDS]   Bradner, S., \"Key words for use in RFCs to Indicate\n                Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [ABNF]       Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n                Specifications: ABNF\", RFC 4234, October 2005.\n\n   [IMAP4]      Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n                4rev1\", RFC 3501, March 2003.\n\n   [UTF-8]      Yergeau, F., \"UTF-8, a transformation format of ISO\n                10646\", STD 63, RFC 3629, November 2003.\n\n   [Stringprep] Hoffman, P. and M. Blanchet, \"Preparation of\n                Internationalized Strings (\"stringprep\")\", RFC 3454,\n                December 2002.\n\n   [SASLprep]   Zeilenga, K., \"SASLprep: Stringprep Profile for User\n                Names and Passwords\", RFC 4013, February 2005.\n\nInformative References\n\n   [RFC2086]    Myers, J., \"IMAP4 ACL extension\", RFC 2086,\n                January 1997.\n\n   [PR29]       \"Public Review Issue #29: Normalization Issue\",\n                February 2004,\n                <http://www.unicode.org/review/pr-29.html>.\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 25]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\nAuthor's Address\n\n   Alexey Melnikov\n   Isode Ltd.\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   GB\n\n   EMail: alexey.melnikov@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 26]\n\f\nRFC 4314                        IMAP ACL                   December 2005\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2005).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at ietf-\n   ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 27]\n\f\n"
  },
  {
    "path": "rfc/rfc4315.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         M. Crispin\nRequest for Comments: 4315                                 December 2005\nObsoletes: 2359\nCategory: Standards Track\n\n\n      Internet Message Access Protocol (IMAP) - UIDPLUS extension\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2005).\n\nAbstract\n\n   The UIDPLUS extension of the Internet Message Access Protocol (IMAP)\n   provides a set of features intended to reduce the amount of time and\n   resources used by some client operations.  The features in UIDPLUS\n   are primarily intended for disconnected-use clients.\n\n1.  Introduction and Overview\n\n   The UIDPLUS extension is present in any IMAP server implementation\n   that returns \"UIDPLUS\" as one of the supported capabilities to the\n   CAPABILITY command.\n\n   The UIDPLUS extension defines an additional command.  In addition,\n   this document recommends new status response codes in IMAP that\n   SHOULD be returned by all server implementations, regardless of\n   whether or not the UIDPLUS extension is implemented.\n\n   The added facilities of the features in UIDPLUS are optimizations;\n   clients can provide equivalent functionality, albeit less\n   efficiently, by using facilities in the base protocol.\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n\n\n\n\nCrispin                     Standards Track                     [Page 1]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"MAY\", and \"OPTIONAL\" in this document are to\n   be interpreted as described in [KEYWORDS].\n\n   A \"UID set\" is similar to the [IMAP] sequence set; however, the \"*\"\n   value for a sequence number is not permitted.\n\n2.  Additional Commands\n\n   The following command definition is an extension to [IMAP] section\n   6.4.\n\n2.1.  UID EXPUNGE Command\n\n   Arguments:  sequence set\n\n   Data:       untagged responses: EXPUNGE\n\n   Result:     OK - expunge completed\n               NO - expunge failure (e.g., permission denied)\n               BAD - command unknown or arguments invalid\n\n      The UID EXPUNGE command permanently removes all messages that both\n      have the \\Deleted flag set and have a UID that is included in the\n      specified sequence set from the currently selected mailbox.  If a\n      message either does not have the \\Deleted flag set or has a UID\n      that is not included in the specified sequence set, it is not\n      affected.\n\n      This command is particularly useful for disconnected use clients.\n      By using UID EXPUNGE instead of EXPUNGE when resynchronizing with\n      the server, the client can ensure that it does not inadvertantly\n      remove any messages that have been marked as \\Deleted by other\n      clients between the time that the client was last connected and\n      the time the client resynchronizes.\n\n      If the server does not support the UIDPLUS capability, the client\n      should fall back to using the STORE command to temporarily remove\n      the \\Deleted flag from messages it does not want to remove, then\n      issuing the EXPUNGE command.  Finally, the client should use the\n      STORE command to restore the \\Deleted flag on the messages in\n      which it was temporarily removed.\n\n      Alternatively, the client may fall back to using just the EXPUNGE\n      command, risking the unintended removal of some messages.\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 2]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\n   Example:    C: A003 UID EXPUNGE 3000:3002\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: A003 OK UID EXPUNGE completed\n\n3.  Additional Response Codes\n\n   The following response codes are extensions to the response codes\n   defined in [IMAP] section 7.1.  With limited exceptions, discussed\n   below, server implementations that advertise the UIDPLUS extension\n   SHOULD return these response codes.\n\n   In the case of a mailbox that has permissions set so that the client\n   can COPY or APPEND to the mailbox, but not SELECT or EXAMINE it, the\n   server SHOULD NOT send an APPENDUID or COPYUID response code as it\n   would disclose information about the mailbox.\n\n   In the case of a mailbox that has UIDNOTSTICKY status (as defined\n   below), the server MAY omit the APPENDUID or COPYUID response code as\n   it is not meaningful.\n\n   If the server does not return the APPENDUID or COPYUID response\n   codes, the client can discover this information by selecting the\n   destination mailbox.  The location of messages placed in the\n   destination mailbox by COPY or APPEND can be determined by using\n   FETCH and/or SEARCH commands (e.g., for Message-ID or some unique\n   marker placed in the message in an APPEND).\n\n   APPENDUID\n\n      Followed by the UIDVALIDITY of the destination mailbox and the UID\n      assigned to the appended message in the destination mailbox,\n      indicates that the message has been appended to the destination\n      mailbox with that UID.\n\n      If the server also supports the [MULTIAPPEND] extension, and if\n      multiple messages were appended in the APPEND command, then the\n      second value is a UID set containing the UIDs assigned to the\n      appended messages, in the order they were transmitted in the\n      APPEND command.  This UID set may not contain extraneous UIDs or\n      the symbol \"*\".\n\n         Note: the UID set form of the APPENDUID response code MUST NOT\n         be used if only a single message was appended.  In particular,\n         a server MUST NOT send a range such as 123:123.  This is\n         because a client that does not support [MULTIAPPEND] expects\n         only a single UID and not a UID set.\n\n\n\nCrispin                     Standards Track                     [Page 3]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\n      UIDs are assigned in strictly ascending order in the mailbox\n      (refer to [IMAP], section 2.3.1.1) and UID ranges are as in\n      [IMAP]; in particular, note that a range of 12:10 is exactly\n      equivalent to 10:12 and refers to the sequence 10,11,12.\n\n      This response code is returned in a tagged OK response to the\n      APPEND command.\n\n   COPYUID\n\n      Followed by the UIDVALIDITY of the destination mailbox, a UID set\n      containing the UIDs of the message(s) in the source mailbox that\n      were copied to the destination mailbox and containing the UIDs\n      assigned to the copied message(s) in the destination mailbox,\n      indicates that the message(s) have been copied to the destination\n      mailbox with the stated UID(s).\n\n      The source UID set is in the order the message(s) were copied; the\n      destination UID set corresponds to the source UID set and is in\n      the same order.  Neither of the UID sets may contain extraneous\n      UIDs or the symbol \"*\".\n\n      UIDs are assigned in strictly ascending order in the mailbox\n      (refer to [IMAP], section 2.3.1.1) and UID ranges are as in\n      [IMAP]; in particular, note that a range of 12:10 is exactly\n      equivalent to 10:12 and refers to the sequence 10,11,12.\n\n      This response code is returned in a tagged OK response to the COPY\n      command.\n\n   UIDNOTSTICKY\n\n      The selected mailbox is supported by a mail store that does not\n      support persistent UIDs; that is, UIDVALIDITY will be different\n      each time the mailbox is selected.  Consequently, APPEND or COPY\n      to this mailbox will not return an APPENDUID or COPYUID response\n      code.\n\n      This response code is returned in an untagged NO response to the\n      SELECT command.\n\n         Note: servers SHOULD NOT have any UIDNOTSTICKY mail stores.\n         This facility exists to support legacy mail stores in which it\n         is technically infeasible to support persistent UIDs.  This\n         should be avoided when designing new mail stores.\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 4]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\n   Example:    C: A003 APPEND saved-messages (\\Seen) {297}\n               C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n               C: From: Fred Foobar <foobar@example.com>\n               C: Subject: afternoon meeting\n               C: To: mooch@example.com\n               C: Message-Id: <B27397-0100000@example.com>\n               C: MIME-Version: 1.0\n               C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n               C:\n               C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n               C:\n               S: A003 OK [APPENDUID 38505 3955] APPEND completed\n               C: A004 COPY 2:4 meeting\n               S: A004 OK [COPYUID 38505 304,319:320 3956:3958] Done\n               C: A005 UID COPY 305:310 meeting\n               S: A005 OK No matching messages, so nothing copied\n               C: A006 COPY 2 funny\n               S: A006 OK Done\n               C: A007 SELECT funny\n               S: * 1 EXISTS\n               S: * 1 RECENT\n               S: * OK [UNSEEN 1] Message 1 is first unseen\n               S: * OK [UIDVALIDITY 3857529045] Validity session-only\n               S: * OK [UIDNEXT 2] Predicted next UID\n               S: * NO [UIDNOTSTICKY] Non-persistent UIDs\n               S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n               S: * OK [PERMANENTFLAGS (\\Deleted \\Seen)] Limited\n               S: A007 OK [READ-WRITE] SELECT completed\n\n   In this example, A003 and A004 demonstrate successful appending and\n   copying to a mailbox that returns the UIDs assigned to the messages.\n   A005 is an example in which no messages were copied; this is because\n   in A003, we see that message 2 had UID 304, and message 3 had UID\n   319; therefore, UIDs 305 through 310 do not exist (refer to section\n   2.3.1.1 of [IMAP] for further explanation).  A006 is an example of a\n   message being copied that did not return a COPYUID; and, as expected,\n   A007 shows that the mail store containing that mailbox does not\n   support persistent UIDs.\n\n4.  Formal Syntax\n\n   Formal syntax is defined using ABNF [ABNF], which extends the ABNF\n   rules defined in [IMAP].  The IMAP4 ABNF should be imported before\n   attempting to validate these rules.\n\n   append-uid      = uniqueid\n\n   capability      =/ \"UIDPLUS\"\n\n\n\nCrispin                     Standards Track                     [Page 5]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\n   command-select  =/ uid-expunge\n\n   resp-code-apnd  = \"APPENDUID\" SP nz-number SP append-uid\n\n   resp-code-copy  = \"COPYUID\" SP nz-number SP uid-set SP uid-set\n\n   resp-text-code  =/ resp-code-apnd / resp-code-copy / \"UIDNOTSTICKY\"\n                     ; incorporated before the expansion rule of\n                     ;  atom [SP 1*<any TEXT-CHAR except \"]\">]\n                     ; that appears in [IMAP]\n\n   uid-expunge     = \"UID\" SP \"EXPUNGE\" SP sequence-set\n\n   uid-set         = (uniqueid / uid-range) *(\",\" uid-set)\n\n   uid-range       = (uniqueid \":\" uniqueid)\n                     ; two uniqueid values and all values\n                     ; between these two regards of order.\n                     ; Example: 2:4 and 4:2 are equivalent.\n\n   Servers that support [MULTIAPPEND] will have the following extension\n   to the above rules:\n\n   append-uid      =/ uid-set\n                     ; only permitted if client uses [MULTIAPPEND]\n                     ; to append multiple messages.\n\n5.  Security Considerations\n\n   The COPYUID and APPENDUID response codes return information about the\n   mailbox, which may be considered sensitive if the mailbox has\n   permissions set that permit the client to COPY or APPEND to the\n   mailbox, but not SELECT or EXAMINE it.\n\n   Consequently, these response codes SHOULD NOT be issued if the client\n   does not have access to SELECT or EXAMINE the mailbox.\n\n6.  IANA Considerations\n\n   This document constitutes registration of the UIDPLUS capability in\n   the imap4-capabilities registry, replacing [RFC2359].\n\n7.  Normative References\n\n   [ABNF]        Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n                 Specifications: ABNF\", RFC 4234, October 2005.\n\n\n\n\n\nCrispin                     Standards Track                     [Page 6]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\n   [IMAP]        Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL -\n                 VERSION 4rev1\", RFC 3501, March 2003.\n\n   [KEYWORDS]    Bradner, S., \"Key words for use in RFCs to Indicate\n                 Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [MULTIAPPEND] Crispin, M., \"Internet Message Access Protocol (IMAP) -\n                 MULTIAPPEND Extension\", RFC 3502, March 2003.\n\n8.  Informative References\n\n   [RFC2359]     Myers, J., \"IMAP4 UIDPLUS extension\", RFC 2359, June\n                 1998.\n\n9.  Changes from RFC 2359\n\n   This document obsoletes [RFC2359].  However, it is based upon that\n   document, and takes substantial text from it (albeit with numerous\n   clarifications in wording).\n\n   [RFC2359] implied that a server must always return COPYUID/APPENDUID\n   data; thus suggesting that in such cases the server should return\n   arbitrary data if the destination mailbox did not support persistent\n   UIDs.  This document adds the UIDNOTSTICKY response code to indicate\n   that a mailbox does not support persistent UIDs, and stipulates that\n   a UIDPLUS server does not return COPYUID/APPENDUID data when the COPY\n   (or APPEND) destination mailbox has UIDNOTSTICKY status.\n\nAuthor's Address\n\n   Mark R. Crispin\n   Networks and Distributed Computing\n   University of Washington\n   4545 15th Avenue NE\n   Seattle, WA  98105-4527\n\n   Phone: (206) 543-5762\n   EMail: MRC@CAC.Washington.EDU\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 7]\n\f\nRFC 4315                IMAP - UIDPLUS Extension           December 2005\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2005).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at ietf-\n   ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\n\nCrispin                     Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc4466.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 4466                                    Isode Ltd.\nUpdates: 2088, 2342, 3501, 3502, 3516                           C. Daboo\nCategory: Standards Track                                     April 2006\n\n\n                   Collected Extensions to IMAP4 ABNF\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2006).\n\nAbstract\n\n   Over the years, many documents from IMAPEXT and LEMONADE working\n   groups, as well as many individual documents, have added syntactic\n   extensions to many base IMAP commands described in RFC 3501.  For\n   ease of reference, this document collects most of such ABNF changes\n   in one place.\n\n   This document also suggests a set of standard patterns for adding\n   options and extensions to several existing IMAP commands defined in\n   RFC 3501.  The patterns provide for compatibility between existing\n   and future extensions.\n\n   This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516.\n   It also includes part of the errata to RFC 3501.  This document\n   doesn't specify any semantic changes to the listed RFCs.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 1]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\nTable of Contents\n\n   1. Introduction ....................................................2\n      1.1. Purpose of This Document ...................................2\n      1.2. Conventions Used in This Document ..........................3\n   2. IMAP ABNF Extensions ............................................3\n      2.1. Optional Parameters with the SELECT/EXAMINE Commands .......3\n      2.2. Extended CREATE Command ....................................4\n      2.3. Extended RENAME Command ....................................5\n      2.4. Extensions to FETCH and UID FETCH Commands .................6\n      2.5. Extensions to STORE and UID STORE Commands .................6\n      2.6. Extensions to SEARCH Command ...............................7\n           2.6.1. Extended SEARCH Command .............................7\n           2.6.2. ESEARCH untagged response ...........................8\n      2.7. Extensions to APPEND Command ...............................8\n   3. Formal Syntax ...................................................9\n   4. Security Considerations ........................................14\n   5. Normative References ...........................................15\n   6. Acknowledgements ...............................................15\n\n1.  Introduction\n\n1.1.  Purpose of This Document\n\n   This document serves several purposes:\n\n      1.  rationalize and generalize ABNF for some existing IMAP\n          extensions;\n      2.  collect the ABNF in one place in order to minimize cross\n          references between documents;\n      3.  define building blocks for future extensions so that they can\n          be used together in a compatible way.\n\n   It is expected that a future revision of this document will be\n   incorporated into a revision of RFC 3501.\n\n   This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516.\n   It also includes part of the errata to RFC 3501.  This document\n   doesn't specify any semantic changes to the listed RFCs.\n\n   The ABNF in section 6 of RFC 2342 got rewritten to conform to the\n   ABNF syntax as defined in RFC 4234 and to reference new non-terminals\n   from RFC 3501.  It was also restructured to allow for better\n   readability.  There were no changes \"on the wire\".\n\n   Section 2 extends ABNF for SELECT, EXAMINE, CREATE, RENAME, FETCH/UID\n   FETCH, STORE/UID STORE, SEARCH, and APPEND commands in a consistent\n   manner.  Extensions to all the commands but APPEND have the same\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 2]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   structure.  Extensibility for the APPEND command was done slightly\n   differently in order to preserve backward compatibility with existing\n   extensions.\n\n   Section 2 also defines a new ESEARCH response, whose purpose is to\n   define a better version of the SEARCH response defined in RFC 3501.\n\n   Section 3 defines the collected ABNF that replaces pieces of ABNF in\n   the aforementioned RFCs.  The collected ABNF got generalized to allow\n   for easier future extensibility.\n\n1.2.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as defined in \"Key words for\n   use in RFCs to Indicate Requirement Levels\" [KEYWORDS].\n\n2.  IMAP ABNF Extensions\n\n   This section is not normative.  It provides some background on the\n   intended use of different extensions and it gives some guidance about\n   how future extensions should extend the described commands.\n\n2.1.  Optional Parameters with the SELECT/EXAMINE Commands\n\n   This document adds the ability to include one or more parameters with\n   the IMAP SELECT (section 6.3.1 of [IMAP4]) or EXAMINE (section 6.3.2\n   of [IMAP4]) commands, to turn on or off certain standard behaviors,\n   or to add new optional behaviors required for a particular extension.\n\n   There are two possible modes of operation:\n\n   o  A global state change where a single use of the optional parameter\n      will affect the session state from that time on, irrespective of\n      subsequent SELECT/EXAMINE commands.\n\n   o  A per-mailbox state change that will affect the session only for\n      the duration of the new selected state.  A subsequent\n      SELECT/EXAMINE without the optional parameter will cancel its\n      effect for the newly selected mailbox.\n\n   Optional parameters to the SELECT or EXAMINE commands are added as a\n   parenthesized list of attribute/value pairs, and appear after the\n   mailbox name in the standard SELECT or EXAMINE command.  The order of\n   individual parameters is arbitrary.  A parameter value is optional\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 3]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   and may consist of atoms, strings, or lists in a specific order.  If\n   the parameter value is present, it always appears in parentheses (*).\n   Any parameter not defined by extensions that the server supports must\n   be rejected with a BAD response.\n\n      Example:\n\n              C: a SELECT INBOX (ANNOTATE)\n              S: ...\n              S: a OK SELECT complete\n\n      In the above example, a single parameter is used with the SELECT\n      command.\n\n      Example:\n\n              C: a EXAMINE INBOX (ANNOTATE RESPONSES (\"UID Responses\")\n                 CONDSTORE)\n              S: ...\n              S: a OK EXAMINE complete\n\n      In the above example, three parameters are used with the EXAMINE\n      command.  The second parameter consists of two items: an atom\n      \"RESPONSES\" followed by a quoted string.\n\n      Example:\n\n              C: a SELECT INBOX (BLURDYBLOOP)\n              S: a BAD Unknown parameter in SELECT command\n\n      In the above example, a parameter not supported by the server is\n      used.  This results in the BAD response from the server.\n\n   (*) - if a parameter has a mandatory value, which can always be\n   represented as a number or a sequence-set, the parameter value does\n   not need the enclosing ().  See ABNF for more details.\n\n2.2.  Extended CREATE Command\n\n   Arguments:  mailbox name\n               OPTIONAL list of CREATE parameters\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - create completed\n               NO - create failure: cannot create mailbox with\n                    that name\n               BAD - argument(s) invalid\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 4]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   This document adds the ability to include one or more parameters with\n   the IMAP CREATE command (see section 6.3.3 of [IMAP4]), to turn on or\n   off certain standard behaviors, or to add new optional behaviors\n   required for a particular extension.  No CREATE parameters are\n   defined in this document.\n\n   Optional parameters to the CREATE command are added as a\n   parenthesized list of attribute/value pairs after the mailbox name.\n   The order of individual parameters is arbitrary.  A parameter value\n   is optional and may consist of atoms, strings, or lists in a specific\n   order.  If the parameter value is present, it always appears in\n   parentheses (*).  Any parameter not defined by extensions that the\n   server supports must be rejected with a BAD response.\n\n   (*) - if a parameter has a mandatory value, which can always be\n   represented as a number or a sequence-set, the parameter value does\n   not need the enclosing ().  See ABNF for more details.\n\n2.3.  Extended RENAME Command\n\n   Arguments:  existing mailbox name\n               new mailbox name\n               OPTIONAL list of RENAME parameters\n\n   Responses:  no specific responses for this command\n\n   Result:     OK - rename completed\n               NO - rename failure: cannot rename mailbox with\n                    that name, cannot rename to mailbox with\n                    that name, etc.\n               BAD - argument(s) invalid\n\n   This document adds the ability to include one or more parameters with\n   the IMAP RENAME command (see section 6.3.5 of [IMAP4]), to turn on or\n   off certain standard behaviors, or to add new optional behaviors\n   required for a particular extension.  No RENAME parameters are\n   defined in this document.\n\n   Optional parameters to the RENAME command are added as a\n   parenthesized list of attribute/value pairs after the new mailbox\n   name.  The order of individual parameters is arbitrary.  A parameter\n   value is optional and may consist of atoms, strings, or lists in a\n   specific order.  If the parameter value is present, it always appears\n   in parentheses (*).  Any parameter not defined by extensions that the\n   server supports must be rejected with a BAD response.\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 5]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   (*) - if a parameter has a mandatory value, which can always be\n   represented as a number or a sequence-set, the parameter value does\n   not need the enclosing ().  See ABNF for more details.\n\n2.4.  Extensions to FETCH and UID FETCH Commands\n\n   Arguments:  sequence set\n               message data item names or macro\n               OPTIONAL fetch modifiers\n\n   Responses:  untagged responses: FETCH\n\n   Result:     OK - fetch completed\n               NO - fetch error: cannot fetch that data\n               BAD - command unknown or arguments invalid\n\n   This document extends the syntax of the FETCH and UID FETCH commands\n   (see section 6.4.5 of [IMAP4]) to include optional FETCH modifiers.\n   No fetch modifiers are defined in this document.\n\n   The order of individual modifiers is arbitrary.  Each modifier is an\n   attribute/value pair.  A modifier value is optional and may consist\n   of atoms and/or strings and/or lists in a specific order.  If the\n   modifier value is present, it always appears in parentheses (*).  Any\n   modifiers not defined by extensions that the server supports must be\n   rejected with a BAD response.\n\n   (*) - if a modifier has a mandatory value, which can always be\n   represented as a number or a sequence-set, the modifier value does\n   not need the enclosing ().  See ABNF for more details.\n\n2.5.  Extensions to STORE and UID STORE Commands\n\n   Arguments:  message set\n               OPTIONAL store modifiers\n               message data item name\n               value for message data item\n\n   Responses:  untagged responses: FETCH\n\n   Result:     OK - store completed\n               NO - store error: cannot store that data\n               BAD - command unknown or arguments invalid\n\n   This document extends the syntax of the STORE and UID STORE commands\n   (see section 6.4.6 of [IMAP4]) to include optional STORE modifiers.\n   No store modifiers are defined in this document.\n\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 6]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   The order of individual modifiers is arbitrary.  Each modifier is an\n   attribute/value pair.  A modifier value is optional and may consist\n   of atoms and/or strings and/or lists in a specific order.  If the\n   modifier value is present, it always appears in parentheses (*).  Any\n   modifiers not defined by extensions that the server supports must be\n   rejected with a BAD response.\n\n   (*) - if a modifier has a mandatory value, which can always be\n   represented as a number or a sequence-set, the modifier value does\n   not need the enclosing ().  See ABNF for more details.\n\n2.6.  Extensions to SEARCH Command\n\n2.6.1.  Extended SEARCH Command\n\n   Arguments:  OPTIONAL result specifier\n               OPTIONAL [CHARSET] specification\n               searching criteria (one or more)\n\n   Responses:  REQUIRED untagged response: SEARCH (*)\n\n   Result:     OK - search completed\n               NO - search error: cannot search that [CHARSET] or\n                    criteria\n               BAD - command unknown or arguments invalid\n\n   This section updates definition of the SEARCH command described in\n   section 6.4.4 of [IMAP4].\n\n   The SEARCH command is extended to allow for result options.  This\n   document does not define any result options.\n\n   The order of individual options is arbitrary.  Individual options may\n   contain parameters enclosed in parentheses (**).  If an option has\n   parameters, they consist of atoms and/or strings and/or lists in a\n   specific order.  Any options not defined by extensions that the\n   server supports must be rejected with a BAD response.\n\n   (*) - An extension to the SEARCH command may require another untagged\n   response, or no untagged response to be returned.  Section 2.6.2\n   defines a new ESEARCH untagged response that replaces the SEARCH\n   untagged response.  Note that for a given extended SEARCH command the\n   SEARCH and ESEARCH responses SHOULD be mutually exclusive, i.e., only\n   one of them should be returned.\n\n   (**) - if an option has a mandatory parameter, which can always be\n   represented as a number or a sequence-set, the option parameter does\n   not need the enclosing ().  See ABNF for more details.\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 7]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n2.6.2.  ESEARCH untagged response\n\n   Contents:   one or more search-return-data pairs\n\n   The ESEARCH response SHOULD be sent as a result of an extended SEARCH\n   or UID SEARCH command specified in section 2.6.1.\n\n   The ESEARCH response starts with an optional search correlator.  If\n   it is missing, then the response was not caused by a particular IMAP\n   command, whereas if it is present, it contains the tag of the command\n   that caused the response to be returned.\n\n   The search correlator is followed by an optional UID indicator.  If\n   this indicator is present, all data in the ESEARCH response refers to\n   UIDs, otherwise all returned data refers to message numbers.\n\n   The rest of the ESEARCH response contains one or more search data\n   pairs.  Each pair starts with unique return item name, followed by a\n   space and the corresponding data.  Search data pairs may be returned\n   in any order.  Unless specified otherwise by an extension, any return\n   item name SHOULD appear only once in an ESEARCH response.\n\n   Example:    S: * ESEARCH UID COUNT 5 ALL 4:19,21,28\n\n   Example:    S: * ESEARCH (TAG \"a567\") UID COUNT 5 ALL 4:19,21,28\n\n   Example:    S: * ESEARCH COUNT 5 ALL 1:17,21\n\n2.7.  Extensions to APPEND Command\n\n   The IMAP BINARY extension [BINARY] extends the APPEND command to\n   allow a client to append data containing NULs by using the <literal8>\n   syntax.  The ABNF was rewritten to allow for easier extensibility by\n   IMAP extensions.  This document hasn't specified any semantical\n   changes to the [BINARY] extension.\n\n   In addition, the non-terminal \"literal8\" defined in [BINARY] got\n   extended to allow for non-synchronizing literals if both [BINARY] and\n   [LITERAL+] extensions are supported by the server.\n\n   The IMAP MULTIAPPEND extension [MULTIAPPEND] extends the APPEND\n   command to allow a client to append multiple messages atomically.\n   This document defines a common syntax for the APPEND command that\n   takes into consideration syntactic extensions defined by both\n   [BINARY] and [MULTIAPPEND] extensions.\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 8]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n3.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   [IMAP4].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of uppercase or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   append          = \"APPEND\" SP mailbox 1*append-message\n                     ;; only a single append-message may appear\n                     ;; if MULTIAPPEND [MULTIAPPEND] capability\n                     ;; is not present\n\n   append-message  = append-opts SP append-data\n\n   append-ext      = append-ext-name SP append-ext-value\n                     ;; This non-terminal define extensions to\n                     ;; to message metadata.\n\n   append-ext-name = tagged-ext-label\n\n   append-ext-value= tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n\n   append-data     = literal / literal8 / append-data-ext\n\n   append-data-ext = tagged-ext\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions,\n                     ;; i.e., a mandatory label followed\n                     ;; by parameters.\n\n   append-opts     = [SP flag-list] [SP date-time] *(SP append-ext)\n                     ;; message metadata\n\n   charset         = atom / quoted\n                     ;; Exact syntax is defined in [CHARSET].\n\n   create          = \"CREATE\" SP mailbox\n                     [create-params]\n                     ;; Use of INBOX gives a NO error.\n\n\n\nMelnikov & Daboo            Standards Track                     [Page 9]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   create-params   = SP \"(\" create-param *( SP create-param) \")\"\n\n   create-param-name = tagged-ext-label\n\n   create-param      = create-param-name [SP create-param-value]\n\n   create-param-value= tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n\n   esearch-response  = \"ESEARCH\" [search-correlator] [SP \"UID\"]\n                        *(SP search-return-data)\n                      ;; Note that SEARCH and ESEARCH responses\n                      ;; SHOULD be mutually exclusive,\n                      ;; i.e., only one of the response types\n                      ;; should be\n                      ;; returned as a result of a command.\n\n\n   examine         = \"EXAMINE\" SP mailbox [select-params]\n                     ;; modifies the original IMAP EXAMINE command\n                     ;; to accept optional parameters\n\n   fetch           = \"FETCH\" SP sequence-set SP (\"ALL\" / \"FULL\" /\n                     \"FAST\" / fetch-att /\n                     \"(\" fetch-att *(SP fetch-att) \")\")\n                     [fetch-modifiers]\n                     ;; modifies the original IMAP4 FETCH command to\n                     ;; accept optional modifiers\n\n   fetch-modifiers = SP \"(\" fetch-modifier *(SP fetch-modifier) \")\"\n\n   fetch-modifier  = fetch-modifier-name [ SP fetch-modif-params ]\n\n   fetch-modif-params  = tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n   fetch-modifier-name = tagged-ext-label\n\n   literal8        = \"~{\" number [\"+\"] \"}\" CRLF *OCTET\n                      ;; A string that might contain NULs.\n                      ;; <number> represents the number of OCTETs\n                      ;; in the response string.\n                      ;; The \"+\" is only allowed when both LITERAL+ and\n                      ;; BINARY extensions are supported by the server.\n\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 10]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   mailbox-data      =/ Namespace-Response /\n                        esearch-response\n\n   Namespace         = nil / \"(\" 1*Namespace-Descr \")\"\n\n   Namespace-Command = \"NAMESPACE\"\n\n   Namespace-Descr   = \"(\" string SP\n                          (DQUOTE QUOTED-CHAR DQUOTE / nil)\n                           *(Namespace-Response-Extension) \")\"\n\n   Namespace-Response-Extension = SP string SP\n                     \"(\" string *(SP string) \")\"\n\n   Namespace-Response = \"NAMESPACE\" SP Namespace\n                        SP Namespace SP Namespace\n         ;; This response is currently only allowed\n         ;; if the IMAP server supports [NAMESPACE].\n         ;; The first Namespace is the Personal Namespace(s)\n         ;; The second Namespace is the Other Users' Namespace(s)\n         ;; The third Namespace is the Shared Namespace(s)\n\n   rename          = \"RENAME\" SP mailbox SP mailbox\n                     [rename-params]\n                     ;; Use of INBOX as a destination gives\n                     ;; a NO error, unless rename-params\n                     ;; is not empty.\n\n   rename-params     = SP \"(\" rename-param *( SP rename-param) \")\"\n\n   rename-param      = rename-param-name [SP rename-param-value]\n\n   rename-param-name = tagged-ext-label\n\n   rename-param-value= tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n\n   response-data   = \"*\" SP response-payload CRLF\n\n   response-payload= resp-cond-state / resp-cond-bye /\n                     mailbox-data / message-data / capability-data\n\n   search          = \"SEARCH\" [search-return-opts]\n                     SP search-program\n\n   search-correlator  = SP \"(\" \"TAG\" SP tag-string \")\"\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 11]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   search-program     = [\"CHARSET\" SP charset SP]\n                        search-key *(SP search-key)\n                        ;; CHARSET argument to SEARCH MUST be\n                        ;; registered with IANA.\n\n   search-return-data = search-modifier-name SP search-return-value\n                        ;; Note that not every SEARCH return option\n                        ;; is required to have the corresponding\n                        ;; ESEARCH return data.\n\n   search-return-opts = SP \"RETURN\" SP \"(\" [search-return-opt\n                        *(SP search-return-opt)] \")\"\n\n   search-return-opt = search-modifier-name [SP search-mod-params]\n\n   search-return-value = tagged-ext-val\n                        ;; Data for the returned search option.\n                        ;; A single \"nz-number\"/\"number\" value\n                        ;; can be returned as an atom (i.e., without\n                        ;; quoting).  A sequence-set can be returned\n                        ;; as an atom as well.\n\n   search-modifier-name = tagged-ext-label\n\n   search-mod-params = tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n\n   select          = \"SELECT\" SP mailbox [select-params]\n                     ;; modifies the original IMAP SELECT command to\n                     ;; accept optional parameters\n\n   select-params   = SP \"(\" select-param *(SP select-param) \")\"\n\n   select-param    = select-param-name [SP select-param-value]\n                     ;; a parameter to SELECT may contain one or\n                     ;; more atoms and/or strings and/or lists.\n\n   select-param-name= tagged-ext-label\n\n   select-param-value= tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n\n   status-att-list = status-att-val *(SP status-att-val)\n                     ;; Redefines status-att-list from RFC 3501.\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 12]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n                     ;; status-att-val is defined in RFC 3501 errata\n\n   status-att-val  = (\"MESSAGES\" SP number) /\n                     (\"RECENT\" SP number) /\n                     (\"UIDNEXT\" SP nz-number) /\n                     (\"UIDVALIDITY\" SP nz-number) /\n                     (\"UNSEEN\" SP number)\n                     ;; Extensions to the STATUS responses\n                     ;; should extend this production.\n                     ;; Extensions should use the generic\n                     ;; syntax defined by tagged-ext.\n\n   store           = \"STORE\" SP sequence-set [store-modifiers]\n                     SP store-att-flags\n                     ;; extend [IMAP4] STORE command syntax\n                     ;; to allow for optional store-modifiers\n\n   store-modifiers =  SP \"(\" store-modifier *(SP store-modifier)\n                       \")\"\n\n   store-modifier  = store-modifier-name [SP store-modif-params]\n\n   store-modif-params = tagged-ext-val\n                     ;; This non-terminal shows recommended syntax\n                     ;; for future extensions.\n\n   store-modifier-name = tagged-ext-label\n\n   tag-string         = string\n                        ;; tag of the command that caused\n                        ;; the ESEARCH response, sent as\n                        ;; a string.\n\n   tagged-ext          = tagged-ext-label SP tagged-ext-val\n                          ;; recommended overarching syntax for\n                          ;; extensions\n\n   tagged-ext-label    = tagged-label-fchar *tagged-label-char\n                         ;; Is a valid RFC 3501 \"atom\".\n\n   tagged-label-fchar  = ALPHA / \"-\" / \"_\" / \".\"\n\n   tagged-label-char   = tagged-label-fchar / DIGIT / \":\"\n\n\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 13]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n   tagged-ext-comp     = astring /\n                         tagged-ext-comp *(SP tagged-ext-comp) /\n                         \"(\" tagged-ext-comp \")\"\n                          ;; Extensions that follow this general\n                          ;; syntax should use nstring instead of\n                          ;; astring when appropriate in the context\n                          ;; of the extension.\n                          ;; Note that a message set or a \"number\"\n                          ;; can always be represented as an \"atom\".\n                          ;; An URL should be represented as\n                          ;; a \"quoted\" string.\n\n   tagged-ext-simple   = sequence-set / number\n\n   tagged-ext-val      = tagged-ext-simple /\n                         \"(\" [tagged-ext-comp] \")\"\n\n4.  Security Considerations\n\n   This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516.\n   The updated documents must be consulted for security considerations\n   for the extensions that they define.\n\n   As a protocol gets more complex, parser bugs become more common\n   including buffer overflow, denial of service, and other common\n   security coding errors.  To the extent that this document makes the\n   parser more complex, it makes this situation worse.  To the extent\n   that this document makes the parser more consistent and thus simpler,\n   the situation is improved.  The impact will depend on how many\n   deployed IMAP extensions are consistent with this document.\n   Implementers are encouraged to take care of these issues when\n   extending existing implementations.  Future IMAP extensions should\n   strive for consistency and simplicity to the greatest extent\n   possible.\n\n   Extensions to IMAP commands that are permitted in NOT AUTHENTICATED\n   state are more sensitive to these security issues due to the larger\n   possible attacker community prior to authentication, and the fact\n   that some IMAP servers run with elevated privileges in that state.\n   This document does not extend any commands permitted in NOT\n   AUTHENTICATED state.  Future IMAP extensions to commands permitted in\n   NOT AUTHENTICATED state should favor simplicity over consistency or\n   extensibility.\n\n\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 14]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\n5.  Normative References\n\n   [KEYWORDS]    Bradner, S., \"Key words for use in RFCs to Indicate\n                 Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [IMAP4]       Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL -\n                 VERSION 4rev1\", RFC 3501, March 2003.\n\n   [ABNF]        Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n                 Syntax Specifications: ABNF\", RFC 4234, October 2005.\n\n   [CHARSET]     Freed, N. and J. Postel, \"IANA Charset Registration\n                 Procedures\", BCP 19, RFC 2978, October 2000.\n\n   [MULTIAPPEND] Crispin, M., \"Internet Message Access Protocol (IMAP) -\n                 MULTIAPPEND Extension\", RFC 3502, March 2003.\n\n   [NAMESPACE]   Gahrns, M. and C. Newman, \"IMAP4 Namespace\", RFC 2342,\n                 May 1998.\n\n   [LITERAL+]    Myers, J., \"IMAP4 non-synchronizing literals\", RFC\n                 2088, January 1997.\n\n   [BINARY]      Nerenberg, L., \"IMAP4 Binary Content Extension\", RFC\n                 3516, April 2003.\n\n6.  Acknowledgements\n\n   This documents is based on ideas proposed by Pete Resnick, Mark\n   Crispin, Ken Murchison, Philip Guenther, Randall Gellens, and Lyndon\n   Nerenberg.\n\n   However, all errors and omissions must be attributed to the authors\n   of the document.\n\n   Thanks to Philip Guenther, Dave Cridland, Mark Crispin, Chris Newman,\n   Elwyn Davies, and Barry Leiba for comments and corrections.\n\n   literal8 syntax was taken from RFC 3516.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 15]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex, TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Cyrus Daboo\n\n   EMail: cyrus@daboo.name\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 16]\n\f\nRFC 4466           Collected Extensions to IMAP4 ABNF         April 2006\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2006).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is provided by the IETF\n   Administrative Support Activity (IASA).\n\n\n\n\n\n\n\nMelnikov & Daboo            Standards Track                    [Page 17]\n\f\n"
  },
  {
    "path": "rfc/rfc4469.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         P. Resnick\nRequest for Comments: 4469                         QUALCOMM Incorporated\nUpdates: 3501, 3502                                           April 2006\nCategory: Standards Track\n\n\n       Internet Message Access Protocol (IMAP) CATENATE Extension\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2006).\n\nAbstract\n\n   The CATENATE extension to the Internet Message Access Protocol (IMAP)\n   extends the APPEND command to allow clients to create messages on the\n   IMAP server that may contain a combination of new data along with\n   parts of (or entire) messages already on the server.  Using this\n   extension, the client can catenate parts of an already existing\n   message onto a new message without having to first download the data\n   and then upload it back to the server.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 1]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n1.  Introduction\n\n   The CATENATE extension to the Internet Message Access Protocol (IMAP)\n   [1] allows the client to create a message on the server that can\n   include the text of messages (or parts of messages) that already\n   exist on the server without having to FETCH them and APPEND them back\n   to the server.  The CATENATE extension extends the APPEND command so\n   that, instead of a single message literal, the command can take as\n   arguments any combination of message literals (as described in IMAP\n   [1]) and message URLs (as described in the IMAP URL Scheme [2]\n   specification).  The server takes all the pieces and catenates them\n   into the output message.  The CATENATE extension can also coexist\n   with the MULTIAPPEND extension [3] to APPEND multiple messages in a\n   single command.\n\n   There are some obvious uses for the CATENATE extension.  The\n   motivating use case was to provide a way for a resource-constrained\n   client to compose a message for subsequent submission that contains\n   data that already exists in that client's IMAP store.  Because the\n   client does not have to download and re-upload potentially large\n   message parts, bandwidth and processing limitations do not have as\n   much impact.  In addition, since the client can create a message in\n   its own IMAP store, the command also addresses the desire of the\n   client to archive a copy of a sent message without having to upload\n   the message twice.  (Mechanisms for sending the message are outside\n   the scope of this document.)\n\n   The extended APPEND command can also be used to copy parts of a\n   message to another mailbox for archival purposes while getting rid of\n   undesired parts.  In environments where server storage is limited, a\n   client could get rid of large message parts by copying over only the\n   necessary parts and then deleting the original message.  The\n   mechanism could also be used to add data to a message (such as\n   prepending message header fields) or to include other data by making\n   a copy of the original and catenating the new data.\n\n2.  The CATENATE Capability\n\n   A server that supports this extension returns \"CATENATE\" as one of\n   the responses to the CAPABILITY command.\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 2]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n3.  The APPEND Command\n\n   Arguments:  mailbox name\n               (The following can be repeated in the presence of the\n               MULTIAPPEND extension [3])\n               OPTIONAL flag parenthesized list\n               OPTIONAL date/time string\n               a single message literal or one or more message parts to\n               catenate, specified as:\n                           message literal\n                           or\n                           message (or message part) URL\n\n   Responses:  OPTIONAL NO responses: BADURL, TOOBIG\n\n   Result:     OK -  append completed\n               NO -  append error: can't append to that mailbox, error\n                     in flags or date/time or message text, or can't\n                     fetch that data\n               BAD - command unknown or arguments invalid\n\n   The APPEND command concatenates all the message parts and appends\n   them as a new message to the end of the specified mailbox.  The\n   parenthesized flag list and date/time string set the flags and the\n   internal date, respectively, as described in IMAP [1].  The\n   subsequent command parameters specify the message parts that are\n   appended sequentially to the output message.\n\n   If the original form of APPEND is used, a message literal follows the\n   optional flag list and date/time string, which is appended as\n   described in IMAP [1].  If the extended form is used, \"CATENATE\" and\n   a parenthesized list of message literals and message URLs follows,\n   each of which is appended to the new message.  If a message literal\n   is specified (indicated by \"TEXT\"), the octets following the count\n   are appended.  If a message URL is specified (indicated by \"URL\"),\n   the octets of the body part pointed to by that URL are appended, as\n   if the literal returned in a FETCH BODY response were put in place of\n   the message part specifier.  The APPEND command does not cause the\n   \\Seen flag to be set for any catenated body part.  The APPEND command\n   does not change the selected mailbox.\n\n   In the extended APPEND command, the string following \"URL\" is an IMAP\n   URL [2] and is interpreted according to the rules of [2].  The\n   present document only describes the behavior of the command using\n   IMAP URLs that refer to specific messages or message parts on the\n   current IMAP server from the current authenticated IMAP session.\n   Because of that, only relative IMAP message or message part URLs\n   (i.e., those having no scheme or <iserver>) are used.  The base URL\n\n\n\nResnick                     Standards Track                     [Page 3]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n   for evaluating the relative URL is considered \"imap://user@server/\",\n   where \"user\" is the user name of the currently authenticated user and\n   \"server\" is the domain name of the current server.  When in the\n   selected state, the base URL is considered\n   \"imap://user@server/mailbox\", where \"mailbox\" is the encoded name of\n   the currently selected mailbox.  Additionally, since the APPEND\n   command is valid in the authenticated state of an IMAP session, no\n   further LOGIN or AUTHENTICATE command is performed for URLs specified\n   in the extended APPEND command.\n\n      Note: Use of an absolute IMAP URL or any URL that refers to\n      anything other than a message or message part from the current\n      authenticated IMAP session is outside the scope of this document\n      and would require an extension to this specification, and a server\n      implementing only this specification would return NO to such a\n      request.\n\n   The client is responsible for making sure that the catenated message\n   is in the format of an Internet Message Format (RFC 2822) [4] or\n   Multipurpose Internet Mail Extension (MIME) [5] message.  In\n   particular, when a URL is catenated, the server copies octets,\n   unchanged, from the indicated message or message part to the\n   catenated message.  It does no data conversion (e.g., MIME transfer\n   encodings) nor any verification that the data is appropriate for the\n   MIME part of the message into which it is inserted.  The client is\n   also responsible for inserting appropriate MIME boundaries between\n   body parts, and writing MIME Content-Type and Content-Transfer-\n   Encoding lines as needed in the appropriate places.\n\n   Responses behave just as the original APPEND command described in\n   IMAP [1].  If the server implements the IMAP UIDPLUS extension [6],\n   it will also return an APPENDUID response code in the tagged OK\n   response.  Two response codes are provided in Section 4 that can be\n   used in the tagged NO response if the APPEND command fails.\n\n4.  Response Codes\n\n   When a APPEND command fails, it may return a response code that\n   describes a reason for the failure.\n\n4.1.  BADURL Response\n\n   The BADURL response code is returned if the APPEND fails to process\n   one of the specified URLs.  Possible reasons for this are bad URL\n   syntax, unrecognized URL schema, invalid message UID, or invalid body\n   part.  The BADURL response code contains the first URL specified as a\n   parameter to the APPEND command that has caused the operation to\n   fail.\n\n\n\nResnick                     Standards Track                     [Page 4]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n4.2.  TOOBIG Response\n\n   The TOOBIG response code is returned if the resulting message will\n   exceed the 4-GB IMAP message limit.  This might happen, for example,\n   if the client specifies 3 URLs for 2-GB messages.  Note that even if\n   the server doesn't return TOOBIG, it still has to be defensive\n   against misbehaving or malicious clients that try to construct a\n   message over the 4-GB limit.  The server may also wish to return the\n   TOOBIG response code if the resulting message exceeds a server-\n   specific message size limit.\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) [7] notation.  Elements not defined here can be found in\n   the formal syntax of the ABNF [7], IMAP [1], and IMAP ABNF extensions\n   [8] specifications.  Note that capability and resp-text-code are\n   extended from the IMAP [1] specification and append-data is extended\n   from the IMAP ABNF extensions [8] specification.\n\n   append-data =/ \"CATENATE\" SP \"(\" cat-part *(SP cat-part) \")\"\n\n   cat-part = text-literal / url\n\n   text-literal = \"TEXT\" SP literal\n\n   url = \"URL\" SP astring\n\n   resp-text-code =/ toobig-response-code / badurl-response-code\n\n   toobig-response-code = \"TOOBIG\"\n\n   badurl-response-code = \"BADURL\" SP url-resp-text\n\n   url-resp-text = 1*(%x01-09 /\n                      %x0B-0C /\n                      %x0E-5B /\n                      %x5D-FE) ; Any TEXT-CHAR except \"]\"\n\n   capability =/ \"CATENATE\"\n\n   The astring in the definition of url and the url-resp-text in the\n   definition of badurl-response-code each contain an imapurl as defined\n   by [2].\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 5]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n6.  Acknowledgements\n\n   Thanks to the members of the LEMONADE working group for their input.\n   Special thanks to Alexey Melnikov for the examples.\n\n7.  Security Considerations\n\n   The CATENATE extension does not raise any security considerations\n   that are not present for the base protocol or in the use of IMAP\n   URLs, and these issues are discussed in the IMAP [1] and IMAP URL [2]\n   documents.\n\n8.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track or\n   IESG approved experimental RFC.  The registry is currently located at\n   <http://www.iana.org/assignments/imap4-capabilities>.  This document\n   defines the CATENATE IMAP capability.  The IANA has added this\n   capability to the registry.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 6]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\nAppendix A.  Examples\n\n   Lines not starting with \"C: \" or \"S: \" are continuations of the\n   previous lines.\n\n   The original message in examples 1 and 2 below (UID = 20) has the\n   following structure:\n\n\n      multipart/mixed MIME message with two body parts:\n\n      1.  text/plain\n\n      2.  application/x-zip-compressed\n\n   Example 1: The following example demonstrates how a CATENATE client\n   can replace an attachment in a draft message, without the need to\n   download it to the client and upload it back.\n\n   C: A003 APPEND Drafts (\\Seen \\Draft $MDNSent) CATENATE\n    (URL \"/Drafts;UIDVALIDITY=385759045/;UID=20/;section=HEADER\"\n    TEXT {42}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050907\n   C:  URL \"/Drafts;UIDVALIDITY=385759045/;UID=20/;section=1.MIME\"\n    URL \"/Drafts;UIDVALIDITY=385759045/;UID=20/;section=1\" TEXT {42}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050907\n   C:  URL \"/Drafts;UIDVALIDITY=385759045/;UID=30\" TEXT {44}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050907--\n   C: )\n   S: A003 OK catenate append completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 7]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n   Example 2: The following example demonstrates how the CATENATE\n   extension can be used to replace edited text in a draft message, as\n   well as header fields for the top level message part (e.g., Subject\n   has changed).  The previous version of the draft is marked as\n   \\Deleted.  Note that the server also supports the UIDPLUS extension,\n   so the APPENDUID response code is returned in the successful OK\n   response to the APPEND command.\n\n   C: A003 APPEND Drafts (\\Seen \\Draft $MDNSent) CATENATE (TEXT {738}\n   S: + Ready for literal data\n   C: Return-Path: <bar@example.org>\n   C: Received: from [127.0.0.2]\n   C:           by rufus.example.org via TCP (internal) with ESMTPA;\n   C:           Thu, 11 Nov 2004 16:57:07 +0000\n   C: Message-ID: <419399E1.6000505@example.org>\n   C: Date: Thu, 12 Nov 2004 16:57:05 +0000\n   C: From: Bob Ar <bar@example.org>\n   C: X-Accept-Language: en-us, en\n   C: MIME-Version: 1.0\n   C: To: foo@example.net\n   C: Subject: About our holiday trip\n   C: Content-Type: multipart/mixed;\n   C:               boundary=\"------------030308070208000400050907\"\n   C:\n   C: --------------030308070208000400050907\n   C: Content-Type: text/plain; charset=us-ascii; format=flowed\n   C: Content-Transfer-Encoding: 7bit\n   C:\n   C: Our travel agent has sent the updated schedule.\n   C:\n   C: Cheers,\n   C: Bob\n   C: --------------030308070208000400050907\n   C:  URL \"/Drafts;UIDVALIDITY=385759045/;UID=20/;Section=2.MIME\"\n    URL \"/Drafts;UIDVALIDITY=385759045/;UID=20/;Section=2\" TEXT {44}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050907--\n   C: )\n   S: A003 OK [APPENDUID 385759045 45] append Completed\n   C: A004 UID STORE 20 +FLAGS.SILENT (\\Deleted)\n   S: A004 OK STORE completed\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 8]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n   Example 3: The following example demonstrates how the CATENATE\n   extension can be used to strip attachments.  Below, a PowerPoint\n   attachment was replaced by a small text part explaining that the\n   attachment was stripped.\n\n   C: A003 APPEND Drafts (\\Seen \\Draft $MDNSent) CATENATE\n    (URL \"/Drafts;UIDVALIDITY=385759045/;UID=21/;section=HEADER\"\n    TEXT {42}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050903\n   C:  URL \"/Drafts;UIDVALIDITY=385759045/;UID=21/;section=1.MIME\"\n    URL \"/Drafts;UIDVALIDITY=385759045/;UID=21/;section=1\" TEXT {255}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050903\n   C: Content-type: text/plain; charset=\"us-ascii\"\n   C: Content-transfer-encoding: 7bit\n   C:\n   C: This body part contained a Power Point presentation that was\n   C: deleted upon your request.\n   C: --------------030308070208000400050903--\n   C: )\n   S: A003 OK append Completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                     [Page 9]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n   Example 4: The following example demonstrates a failed APPEND\n   command.  The server returns the BADURL response code to indicate\n   that one of the provided URLs is invalid.  This example also\n   demonstrates how the CATENATE extension can be used to construct a\n   digest of several messages.\n\n   C: A003 APPEND Sent (\\Seen $MDNSent) CATENATE (TEXT {541}\n   S: + Ready for literal data\n   C: Return-Path: <foo@example.org>\n   C: Received: from [127.0.0.2]\n   C:           by rufus.example.org via TCP (internal) with ESMTPA;\n   C:           Thu, 11 Nov 2004 16:57:07 +0000\n   C: Message-ID: <419399E1.6000505@example.org>\n   C: Date: Thu, 21 Nov 2004 16:57:05 +0000\n   C: From: Farren Oo <foo@example.org>\n   C: X-Accept-Language: en-us, en\n   C: MIME-Version: 1.0\n   C: To: bar@example.org\n   C: Subject: Digest of the mailing list for today\n   C: Content-Type: multipart/digest;\n   C:               boundary=\"------------030308070208000400050904\"\n   C:\n   C: --------------030308070208000400050904\n   C:  URL \"/INBOX;UIDVALIDITY=785799047/;UID=11467\" TEXT {42}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050904\n   C:  URL \"/INBOX;UIDVALIDITY=785799047/;UID=113330/;section=1.5.9\"\n    TEXT {42}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050904\n   C:  URL \"/INBOX;UIDVALIDITY=785799047/;UID=11916\" TEXT {44}\n   S: + Ready for literal data\n   C:\n   C: --------------030308070208000400050904--\n   C: )\n   S: A003 NO [BADURL \"/INBOX;UIDVALIDITY=785799047/;UID=113330;\n   section=1.5.9\"] CATENATE append has failed, one message expunged\n\n   Note that the server could have validated the URLs as they were\n   received and therefore could have returned the tagged NO response\n   with BADURL response-code in place of any continuation request after\n   the URL was received.\n\n\n\n\n\n\n\nResnick                     Standards Track                    [Page 10]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\n9.  Normative References\n\n   [1]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1\",\n        RFC 3501, March 2003.\n\n   [2]  Newman, C., \"IMAP URL Scheme\", RFC 2192, September 1997.\n\n   [3]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n        MULTIAPPEND Extension\", RFC 3502, March 2003.\n\n   [4]  Resnick, P., \"Internet Message Format\", RFC 2822, April 2001.\n\n   [5]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n        Extensions (MIME) Part One: Format of Internet Message Bodies\",\n        RFC 2045, November 1996.\n\n   [6]  Crispin, M., \"Internet Message Access Protocol (IMAP) - UIDPLUS\n        extension\", RFC 4315, December 2005.\n\n   [7]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n        Specifications: ABNF\", RFC 4234, October 2005.\n\n   [8]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4 ABNF\",\n        RFC 4466, April 2006.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                    [Page 11]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\nAuthor's Address\n\n   Peter W. Resnick\n   QUALCOMM Incorporated\n   5775 Morehouse Drive\n   San Diego, CA  92121-1714\n   US\n\n   Phone: +1 858 651 4478\n   EMail: presnick@qualcomm.com\n   URI:   http://www.qualcomm.com/~presnick/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick                     Standards Track                    [Page 12]\n\f\nRFC 4469                IMAP CATENATE Extension               April 2006\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2006).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is provided by the IETF\n   Administrative Support Activity (IASA).\n\n\n\n\n\n\n\nResnick                     Standards Track                    [Page 13]\n\f\n"
  },
  {
    "path": "rfc/rfc4505.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                   K. Zeilenga, Ed.\nRequest for Comments: 4505                           OpenLDAP Foundation\nObsoletes: 2245                                                June 2006\nCategory: Standards Track\n\n\n  Anonymous Simple Authentication and Security Layer (SASL) Mechanism\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2006).\n\nAbstract\n\n   On the Internet, it is common practice to permit anonymous access to\n   various services.  Traditionally, this has been done with a plain-\n   text password mechanism using \"anonymous\" as the user name and using\n   optional trace information, such as an email address, as the\n   password.  As plain-text login commands are not permitted in new IETF\n   protocols, a new way to provide anonymous login is needed within the\n   context of the Simple Authentication and Security Layer (SASL)\n   framework.\n\n1.  Introduction\n\n   This document defines an anonymous mechanism for the Simple\n   Authentication and Security Layer ([SASL]) framework.  The name\n   associated with this mechanism is \"ANONYMOUS\".\n\n   Unlike many other SASL mechanisms, whose purpose is to authenticate\n   and identify the user to a server, the purpose of this SASL mechanism\n   is to allow the user to gain access to services or resources without\n   requiring the user to establish or otherwise disclose their identity\n   to the server.  That is, this mechanism provides an anonymous login\n   method.\n\n   This mechanism does not provide a security layer.\n\n   This document replaces RFC 2245.  Changes since RFC 2245 are detailed\n   in Appendix A.\n\n\n\nZeilenga                    Standards Track                     [Page 1]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\n2.  The Anonymous Mechanism\n\n   The mechanism consists of a single message from the client to the\n   server.  The client may include in this message trace information in\n   the form of a string of [UTF-8]-encoded [Unicode] characters prepared\n   in accordance with [StringPrep] and the \"trace\" stringprep profile\n   defined in Section 3 of this document.  The trace information, which\n   has no semantical value, should take one of two forms: an Internet\n   email address, or an opaque string that does not contain the '@'\n   (U+0040) character and that can be interpreted by the system\n   administrator of the client's domain.  For privacy reasons, an\n   Internet email address or other information identifying the user\n   should only be used with permission from the user.\n\n   A server that permits anonymous access will announce support for the\n   ANONYMOUS mechanism and allow anyone to log in using that mechanism,\n   usually with restricted access.\n\n   A formal grammar for the client message using Augmented BNF [ABNF] is\n   provided below as a tool for understanding this technical\n   specification.\n\n      message     = [ email / token ]\n                    ;; to be prepared in accordance with Section 3\n\n      UTF1        = %x00-3F / %x41-7F ;; less '@' (U+0040)\n      UTF2        = %xC2-DF UTF0\n      UTF3        = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /\n                    %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)\n      UTF4        = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /\n                    %xF4 %x80-8F 2(UTF0)\n      UTF0        = %x80-BF\n\n      TCHAR       = UTF1 / UTF2 / UTF3 / UTF4\n                    ;; any UTF-8 encoded Unicode character\n                    ;; except '@' (U+0040)\n\n      email       = addr-spec\n                    ;; as defined in [IMAIL]\n\n      token       = 1*255TCHAR\n\n   Note to implementors:\n      The <token> production is restricted to 255 UTF-8-encoded Unicode\n      characters.  As the encoding of a characters uses a sequence of 1\n      to 4 octets, a token may be as long as 1020 octets.\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 2]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\n3.  The \"trace\" Profile of \"Stringprep\"\n\n   This section defines the \"trace\" profile of [StringPrep].  This\n   profile is designed for use with the SASL ANONYMOUS Mechanism.\n   Specifically, the client is to prepare the <message> production in\n   accordance with this profile.\n\n   The character repertoire of this profile is Unicode 3.2 [Unicode].\n\n   No mapping is required by this profile.\n\n   No Unicode normalization is required by this profile.\n\n   The list of unassigned code points for this profile is that provided\n   in Appendix A of [StringPrep].  Unassigned code points are not\n   prohibited.\n\n   Characters from the following tables of [StringPrep] are prohibited:\n\n      - C.2.1 (ASCII control characters)\n      - C.2.2 (Non-ASCII control characters)\n      - C.3 (Private use characters)\n      - C.4 (Non-character code points)\n      - C.5 (Surrogate codes)\n      - C.6 (Inappropriate for plain text)\n      - C.8 (Change display properties are deprecated)\n      - C.9 (Tagging characters)\n\n   No additional characters are prohibited.\n\n   This profile requires bidirectional character checking per Section 6\n   of [StringPrep].\n\n4.  Example\n\n   Here is a sample ANONYMOUS login between an IMAP client and server.\n   In this example, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If such lines are wrapped without a new \"C:\"\n   or \"S:\" label, then the wrapping is for editorial clarity and is not\n   part of the command.\n\n   Note that this example uses the IMAP profile [IMAP4] of SASL.  The\n   base64 encoding of challenges and responses as well as the \"+ \"\n   preceding the responses are part of the IMAP4 profile, not part of\n   SASL itself.  Additionally, protocols with SASL profiles permitting\n   an initial client response will be able to avoid the extra round trip\n   below (the server response with an empty \"+ \").\n\n\n\n\nZeilenga                    Standards Track                     [Page 3]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\n   In this example, the trace information is \"sirhc\".\n\n      S: * OK IMAP4 server ready\n      C: A001 CAPABILITY\n      S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=DIGEST-MD5 AUTH=ANONYMOUS\n      S: A001 OK done\n      C: A002 AUTHENTICATE ANONYMOUS\n      S: +\n      C: c2lyaGM=\n      S: A003 OK Welcome, trace information has been logged.\n\n5.  Security Considerations\n\n   The ANONYMOUS mechanism grants access to services and/or resources by\n   anyone.  For this reason, it should be disabled by default so that\n   the administrator can make an explicit decision to enable it.\n\n   If the anonymous user has any write privileges, a denial-of-service\n   attack is possible by filling up all available space.  This can be\n   prevented by disabling all write access by anonymous users.\n\n   If anonymous users have read and write access to the same area, the\n   server can be used as a communication mechanism to exchange\n   information anonymously.  Servers that accept anonymous submissions\n   should implement the common \"drop box\" model, which forbids anonymous\n   read access to the area where anonymous submissions are accepted.\n\n   If the anonymous user can run many expensive operations (e.g., an\n   IMAP SEARCH BODY command), this could enable a denial-of-service\n   attack.  Servers are encouraged to reduce the priority of anonymous\n   users or limit their resource usage.\n\n   While servers may impose a limit on the number of anonymous users,\n   note that such limits enable denial-of-service attacks and should be\n   used with caution.\n\n   The trace information is not authenticated, so it can be falsified.\n   This can be used as an attempt to get someone else in trouble for\n   access to questionable information.  Administrators investigating\n   abuse need to realize that this trace information may be falsified.\n\n   A client that uses the user's correct email address as trace\n   information without explicit permission may violate that user's\n   privacy.  Anyone who accesses an anonymous archive on a sensitive\n   subject (e.g., sexual abuse) likely has strong privacy needs.\n   Clients should not send the email address without the explicit\n   permission of the user and should offer the option of supplying no\n   trace information, thus only exposing the source IP address and time.\n\n\n\nZeilenga                    Standards Track                     [Page 4]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\n   Anonymous proxy servers could enhance this privacy but would have to\n   consider the resulting potential denial-of-service attacks.\n\n   Anonymous connections are susceptible to man-in-the-middle attacks\n   that view or alter the data transferred.  Clients and servers are\n   encouraged to support external data security services.\n\n   Protocols that fail to require an explicit anonymous login are more\n   susceptible to break-ins given certain common implementation\n   techniques.  Specifically, Unix servers that offer user login may\n   initially start up as root and switch to the appropriate user id\n   after an explicit login command.  Normally, such servers refuse all\n   data access commands prior to explicit login and may enter a\n   restricted security environment (e.g., the Unix chroot(2) function)\n   for anonymous users.  If anonymous access is not explicitly\n   requested, the entire data access machinery is exposed to external\n   security attacks without the chance for explicit protective measures.\n   Protocols that offer restricted data access should not allow\n   anonymous data access without an explicit login step.\n\n   General [SASL] security considerations apply to this mechanism.\n\n   [StringPrep] security considerations and [Unicode] security\n   considerations discussed in [StringPrep] apply to this mechanism.\n   [UTF-8] security considerations also apply.\n\n6.  IANA Considerations\n\n   The SASL Mechanism registry [IANA-SASL] entry for the ANONYMOUS\n   mechanism has been updated by the IANA to reflect that this document\n   now provides its technical specification.\n\n      To: iana@iana.org\n      Subject: Updated Registration of SASL mechanism ANONYMOUS\n\n      SASL mechanism name: ANONYMOUS\n      Security considerations: See RFC 4505.\n      Published specification (optional, recommended): RFC 4505\n      Person & email address to contact for further information:\n           Kurt Zeilenga <Kurt@OpenLDAP.org>\n           Chris Newman <Chris.Newman@sun.com>\n      Intended usage: COMMON\n      Author/Change controller: IESG <iesg@ietf.org>\n      Note: Updates existing entry for ANONYMOUS\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 5]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\n   The [StringPrep] profile \"trace\", first defined in this RFC, has been\n   registered:\n\n      To: iana@iana.org\n      Subject: Initial Registration of Stringprep \"trace\" profile\n\n      Stringprep profile: trace\n      Published specification: RFC 4505\n      Person & email address to contact for further information:\n          Kurt Zeilenga <kurt@openldap.org>\n\n7.  Acknowledgement\n\n   This document is a revision of RFC 2245 by Chris Newman.  Portions of\n   the grammar defined in Section 1 were borrowed from RFC 3629 by\n   Francois Yergeau.\n\n   This document is a product of the IETF SASL WG.\n\n8.  Normative References\n\n   [ABNF]       Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n                Specifications: ABNF\", RFC 4234, October 2005.\n\n   [IMAIL]      Resnick, P., \"Internet Message Format\", RFC 2822, April\n                2001.\n\n   [SASL]       Melnikov, A., Ed. and K. Zeilenga, Ed., \"Simple\n                Authentication and Security Layer (SASL)\", RFC 4422,\n                June 2006.\n\n   [StringPrep] Hoffman, P. and M. Blanchet, \"Preparation of\n                Internationalized Strings ('stringprep')\", RFC 3454,\n                December 2002.\n\n   [Unicode]    The Unicode Consortium, \"The Unicode Standard, Version\n                3.2.0\" is defined by \"The Unicode Standard, Version 3.0\"\n                (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5),\n                as amended by the \"Unicode Standard Annex #27: Unicode\n                3.1\" (http://www.unicode.org/reports/tr27/) and by the\n                \"Unicode Standard Annex #28: Unicode 3.2\"\n                (http://www.unicode.org/reports/tr28/).\n\n   [UTF-8]      Yergeau, F., \"UTF-8, a transformation format of ISO\n                10646\", RFC 3629 (also STD 63), November 2003.\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 6]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\n9.  Informative References\n\n   [IMAP4]      Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n                4rev1\", RFC 3501, March 2003.\n\n   [IANA-SASL]  IANA, \"SIMPLE AUTHENTICATION AND SECURITY LAYER (SASL)\n                MECHANISMS\", <http://www.iana.org/assignments/sasl-\n                mechanisms>.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 7]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\nAppendix A.  Changes since RFC 2245\n\n   This appendix is non-normative.\n\n   RFC 2245 allows the client to include optional trace information in\n   the form of a human readable string.  RFC 2245 restricted this string\n   to US-ASCII.  As the Internet is international, this document uses a\n   string restricted to UTF-8 encoded Unicode characters.  A\n   \"stringprep\" profile is defined to precisely define which Unicode\n   characters are allowed in this string.  While the string remains\n   restricted to 255 characters, the encoded length of each character\n   may now range from 1 to 4 octets.\n\n   Additionally, a number of editorial changes were made.\n\nEditor's Address\n\n   Kurt D. Zeilenga\n   OpenLDAP Foundation\n\n   EMail: Kurt@OpenLDAP.org\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 8]\n\f\nRFC 4505                Anonymous SASL Mechanism               June 2006\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2006).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is provided by the IETF\n   Administrative Support Activity (IASA).\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc4551.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 4551                                    Isode Ltd.\nUpdates: 3501                                                    S. Hole\nCategory: Standards Track                  ACI WorldWide/MessagingDirect\n                                                               June 2006\n\n\n             IMAP Extension for Conditional STORE Operation\n                or Quick Flag Changes Resynchronization\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2006).\n\nAbstract\n\n   Often, multiple IMAP (RFC 3501) clients need to coordinate changes to\n   a common IMAP mailbox.  Examples include different clients working on\n   behalf of the same user, and multiple users accessing shared\n   mailboxes.  These clients need a mechanism to synchronize state\n   changes for messages within the mailbox.  They must be able to\n   guarantee that only one client can change message state (e.g.,\n   message flags) at any time.  An example of such an application is use\n   of an IMAP mailbox as a message queue with multiple dequeueing\n   clients.\n\n   The Conditional Store facility provides a protected update mechanism\n   for message state information that can detect and resolve conflicts\n   between multiple writing mail clients.\n\n   The Conditional Store facility also allows a client to quickly\n   resynchronize mailbox flag changes.\n\n   This document defines an extension to IMAP (RFC 3501).\n\n\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                     [Page 1]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\nTable of Contents\n\n   1.  Introduction and Overview ................................. 3\n   2.  Conventions Used in This Document ......................... 5\n   3.  IMAP Protocol Changes ..................................... 6\n   3.1. New OK untagged responses for SELECT and EXAMINE ......... 6\n   3.1.1. HIGHESTMODSEQ response code ............................ 6\n   3.1.2. NOMODSEQ response code ................................. 7\n   3.2. STORE and UID STORE Commands ............................. 7\n   3.3 FETCH and UID FETCH Commands ..............................13\n   3.3.1. CHANGEDSINCE FETCH modifier ............................13\n   3.3.2. MODSEQ message data item in FETCH Command ..............14\n   3.4. MODSEQ search criterion in SEARCH ........................16\n   3.5. Modified SEARCH untagged response ........................17\n   3.6. HIGHESTMODSEQ status data items ..........................17\n   3.7. CONDSTORE parameter to SELECT and EXAMINE ................18\n   3.8. Additional quality of implementation issues ..............18\n   4.  Formal Syntax .............................................19\n   5.  Server implementation considerations ......................21\n   6.  Security Considerations ...................................22\n   7.  IANA Considerations .......................................22\n   8.  References ................................................23\n   8.1. Normative References .....................................23\n   8.2. Informative References ...................................23\n   9.  Acknowledgements ..........................................23\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                     [Page 2]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n1. Introduction and Overview\n\n   The Conditional STORE extension is present in any IMAP4\n   implementation that returns \"CONDSTORE\" as one of the supported\n   capabilities in the CAPABILITY command response.\n\n   An IMAP server that supports this extension MUST associate a positive\n   unsigned 64-bit value called a modification sequence (mod-sequence)\n   with every IMAP message.  This is an opaque value updated by the\n   server whenever a metadata item is modified.  The server MUST\n   guarantee that each STORE command performed on the same mailbox\n   (including simultaneous stores to different metadata items from\n   different connections) will get a different mod-sequence value.\n   Also, for any two successful STORE operations performed in the same\n   session on the same mailbox, the mod-sequence of the second completed\n   operation MUST be greater than the mod-sequence of the first\n   completed.  Note that the latter rule disallows the use of the system\n   clock as a mod-sequence, because if system time changes (e.g., an NTP\n   [NTP] client adjusting the time), the next generated value might be\n   less than the previous one.\n\n   Mod-sequences allow a client that supports the CONDSTORE extension to\n   determine if a message metadata has changed since some known moment.\n   Whenever the state of a flag changes (i.e., the flag is added where\n   previously it wasn't set, or the flag is removed and before it was\n   set) the value of the modification sequence for the message MUST be\n   updated.  Adding the flag when it is already present or removing when\n   it is not present SHOULD NOT change the mod-sequence.\n\n   When a message is appended to a mailbox (via the IMAP APPEND command,\n   COPY to the mailbox, or using an external mechanism) the server\n   generates a new modification sequence that is higher than the highest\n   modification sequence of all messages in the mailbox and assigns it\n   to the appended message.\n\n   The server MAY store separate (per-message) modification sequence\n   values for different metadata items.  If the server does so, per-\n   message mod-sequence is the highest mod-sequence of all metadata\n   items for the specified message.\n\n   The server that supports this extension is not required to be able to\n   store mod-sequences for every available mailbox.  Section 3.1.2\n   describes how the server may act if a particular mailbox doesn't\n   support the persistent storage of mod-sequences.\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                     [Page 3]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   This extension makes the following changes to the IMAP4 protocol:\n\n      a) adds UNCHANGEDSINCE STORE modifier.\n\n      b) adds the MODIFIED response code which should be used with an OK\n         response to the STORE command.  (It can also be used in a NO\n         response.)\n\n      c) adds a new MODSEQ message data item for use with the FETCH\n         command.\n\n      d) adds CHANGEDSINCE FETCH modifier.\n\n      e) adds a new MODSEQ search criterion.\n\n      f) extends the syntax of untagged SEARCH responses to include\n         mod-sequence.\n\n      g) adds new OK untagged responses for the SELECT and EXAMINE\n         commands.\n\n      h) defines an additional parameter to SELECT/EXAMINE commands.\n\n      i) adds the HIGHESTMODSEQ status data item to the STATUS command.\n\n   A client supporting CONDSTORE extension indicates its willingness to\n   receive mod-sequence updates in all untagged FETCH responses by\n   issuing:\n\n      -  a SELECT or EXAMINE command with the CONDSTORE parameter,\n      -  a STATUS (HIGHESTMODSEQ) command,\n      -  a FETCH or SEARCH command that includes the MODSEQ message data\n         item,\n      -  a FETCH command with the CHANGEDSINCE modifier, or\n      -  a STORE command with the UNCHANGEDSINCE modifier.\n\n   The server MUST include mod-sequence data in all subsequent untagged\n   FETCH responses (until the connection is closed), whether they were\n   caused by a regular STORE, a STORE with UNCHANGEDSINCE modifier, or\n   an external agent.\n\n   This document uses the term \"CONDSTORE-aware client\" to refer to a\n   client that announces its willingness to receive mod-sequence updates\n   as described above.  The term \"CONDSTORE enabling command\" will refer\n   any of the commands listed above.  A future extension to this\n   document may extend the list of CONDSTORE enabling commands.  A first\n   CONDSTORE enabling command executed in the session MUST cause the\n\n\n\n\nMelnikov & Hole             Standards Track                     [Page 4]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   server to return HIGHESTMODSEQ (Section 3.1.1) unless the server has\n   sent NOMODSEQ (Section 3.1.2) response code when the currently\n   selected mailbox was selected.\n\n   The rest of this document describes the protocol changes more\n   rigorously.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [KEYWORDS].\n\n   In examples, lines beginning with \"S:\" are sent by the IMAP server,\n   and lines beginning with \"C:\" are sent by the client.  Line breaks\n   may appear in example commands solely for editorial clarity; when\n   present in the actual message, they are represented by \"CRLF\".\n\n   Formal syntax is defined using ABNF [ABNF].\n\n   The term \"metadata\" or \"metadata item\" is used throughout this\n   document.  It refers to any system or user-defined keyword.  Future\n   documents may extend \"metadata\" to include other dynamic message\n   data.\n\n   Some IMAP mailboxes are private, accessible only to the owning user.\n   Other mailboxes are not, either because the owner has set an Access\n   Control List [ACL] that permits access by other users, or because it\n   is a shared mailbox.  Let's call a metadata item \"shared\" for the\n   mailbox if any changes to the metadata items are persistent and\n   visible to all other users accessing the mailbox.  Otherwise, the\n   metadata item is called \"private\".  Note that private metadata items\n   are still visible to all sessions accessing the mailbox as the same\n   user.  Also note that different mailboxes may have different metadata\n   items as shared.\n\n   See Section 1 for the definition of a \"CONDSTORE-aware client\" and a\n   \"CONDSTORE enabling command\".\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                     [Page 5]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n3.  IMAP Protocol Changes\n\n3.1.  New OK Untagged Responses for SELECT and EXAMINE\n\n   This document adds two new response codes, HIGHESTMODSEQ and\n   NOMODSEQ.  One of those response codes MUST be returned in the OK\n   untagged response for a successful SELECT/EXAMINE command.\n\n   When opening a mailbox, the server must check if the mailbox supports\n   the persistent storage of mod-sequences.  If the mailbox supports the\n   persistent storage of mod-sequences and the mailbox open operation\n   succeeds, the server MUST send the OK untagged response including\n   HIGHESTMODSEQ response code.  If the persistent storage for the\n   mailbox is not supported, the server MUST send the OK untagged\n   response including NOMODSEQ response code instead.\n\n3.1.1.  HIGHESTMODSEQ Response Code\n\n   This document adds a new response code that is returned in the OK\n   untagged response for the SELECT and EXAMINE commands.  A server\n   supporting the persistent storage of mod-sequences for the mailbox\n   MUST send the OK untagged response including HIGHESTMODSEQ response\n   code with every successful SELECT or EXAMINE command:\n\n      OK [HIGHESTMODSEQ <mod-sequence-value>]\n\n      where <mod-sequence-value> is the highest mod-sequence value of\n      all messages in the mailbox.  When the server changes UIDVALIDITY\n      for a mailbox, it doesn't have to keep the same HIGHESTMODSEQ for\n      the mailbox.\n\n   A disconnected client can use the value of HIGHESTMODSEQ to check if\n   it has to refetch metadata from the server.  If the UIDVALIDITY value\n   has changed for the selected mailbox, the client MUST delete the\n   cached value of HIGHESTMODSEQ.  If UIDVALIDITY for the mailbox is the\n   same, and if the HIGHESTMODSEQ value stored in the client's cache is\n   less than the value returned by the server, then some metadata items\n   on the server have changed since the last synchronization, and the\n   client needs to update its cache.  The client MAY use SEARCH MODSEQ\n   (Section 3.4) to find out exactly which metadata items have changed.\n   Alternatively, the client MAY issue FETCH with the CHANGEDSINCE\n   modifier (Section 3.3.1) in order to fetch data for all messages that\n   have metadata items changed since some known modification sequence.\n\n   Example 1:\n\n      C: A142 SELECT INBOX\n      S: * 172 EXISTS\n\n\n\nMelnikov & Hole             Standards Track                     [Page 6]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n      S: * 1 RECENT\n      S: * OK [UNSEEN 12] Message 12 is first unseen\n      S: * OK [UIDVALIDITY 3857529045] UIDs valid\n      S: * OK [UIDNEXT 4392] Predicted next UID\n      S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n      S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n      S: * OK [HIGHESTMODSEQ 715194045007]\n      S: A142 OK [READ-WRITE] SELECT completed\n\n3.1.2.  NOMODSEQ Response Code\n\n   A server that doesn't support the persistent storage of mod-sequences\n   for the mailbox MUST send the OK untagged response including NOMODSEQ\n   response code with every successful SELECT or EXAMINE command.  A\n   server that returned NOMODSEQ response code for a mailbox, which\n   subsequently receives one of the following commands while the mailbox\n   is selected:\n\n      -  a FETCH command with the CHANGEDSINCE modifier,\n      -  a FETCH or SEARCH command that includes the MODSEQ message data\n         item, or\n      -  a STORE command with the UNCHANGEDSINCE modifier\n\n   MUST reject any such command with the tagged BAD response.\n\n   Example 2:\n\n      C: A142 SELECT INBOX\n      S: * 172 EXISTS\n      S: * 1 RECENT\n      S: * OK [UNSEEN 12] Message 12 is first unseen\n      S: * OK [UIDVALIDITY 3857529045] UIDs valid\n      S: * OK [UIDNEXT 4392] Predicted next UID\n      S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n      S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n      S: * OK [NOMODSEQ] Sorry, this mailbox format doesn't support\n           modsequences\n      S: A142 OK [READ-WRITE] SELECT completed\n\n3.2.  STORE and UID STORE Commands\n\n   This document defines the following STORE modifier (see Section 2.5\n   of [IMAPABNF]):\n\n   UNCHANGEDSINCE <mod-sequence>\n\n      For each message specified in the message set, the server performs\n      the following.  If the mod-sequence of any metadata item of the\n\n\n\nMelnikov & Hole             Standards Track                     [Page 7]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n      message is equal or less than the specified UNCHANGEDSINCE value,\n      then the requested operation (as described by the message data\n      item) is performed.  If the operation is successful, the server\n      MUST update the mod-sequence attribute of the message.  An\n      untagged FETCH response MUST be sent, even if the .SILENT suffix\n      is specified, and the response MUST include the MODSEQ message\n      data item.  This is required to update the client's cache with the\n      correct mod-sequence values.  See Section 3.3.2 for more details.\n\n      However, if the mod-sequence of any metadata item of the message\n      is greater than the specified UNCHANGEDSINCE value, then the\n      requested operation MUST NOT be performed.  In this case, the\n      mod-sequence attribute of the message is not updated, and the\n      message number (or unique identifier in the case of the UID STORE\n      command) is added to the list of messages that failed the\n      UNCHANGESINCE test.\n\n      When the server finished performing the operation on all the\n      messages in the message set, it checks for a non-empty list of\n      messages that failed the UNCHANGESINCE test.  If this list is\n      non-empty, the server MUST return in the tagged response a\n      MODIFIED response code.  The MODIFIED response code includes the\n      message set (for STORE) or set of UIDs (for UID STORE) of all\n      messages that failed the UNCHANGESINCE test.\n\n   Example 3:\n\n      All messages pass the UNCHANGESINCE test.\n\n      C: a103 UID STORE 6,4,8 (UNCHANGEDSINCE 12121230045)\n          +FLAGS.SILENT (\\Deleted)\n      S: * 1 FETCH (UID 4 MODSEQ (12121231000))\n      S: * 2 FETCH (UID 6 MODSEQ (12121230852))\n      S: * 4 FETCH (UID 8 MODSEQ (12121130956))\n      S: a103 OK Conditional Store completed\n\n   Example 4:\n\n      C: a104 STORE * (UNCHANGEDSINCE 12121230045) +FLAGS.SILENT\n         (\\Deleted $Processed)\n      S: * 50 FETCH (MODSEQ (12111230047))\n      S: a104 OK Store (conditional) completed\n\n   Example 5:\n\n      C: c101 STORE 1 (UNCHANGEDSINCE 12121230045) -FLAGS.SILENT\n         (\\Deleted)\n      S: * OK [HIGHESTMODSEQ 12111230047]\n\n\n\nMelnikov & Hole             Standards Track                     [Page 8]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n      S: * 50 FETCH (MODSEQ (12111230048))\n      S: c101 OK Store (conditional) completed\n\n      HIGHESTMODSEQ response code was sent by the server presumably\n      because this was the first CONDSTORE enabling command.\n\n   Example 6:\n\n      In spite of the failure of the conditional STORE operation for\n      message 7, the server continues to process the conditional STORE\n      in order to find all messages that fail the test.\n\n      C: d105 STORE 7,5,9 (UNCHANGEDSINCE 320162338)\n          +FLAGS.SILENT (\\Deleted)\n      S: * 5 FETCH (MODSEQ (320162350))\n      S: d105 OK [MODIFIED 7,9] Conditional STORE failed\n\n   Example 7:\n\n      Same as above, but the server follows the SHOULD recommendation in\n      Section 6.4.6 of [IMAP4].\n\n      C: d105 STORE 7,5,9 (UNCHANGEDSINCE 320162338)\n          +FLAGS.SILENT (\\Deleted)\n      S: * 7 FETCH (MODSEQ (320162342) FLAGS (\\Seen \\Deleted))\n      S: * 5 FETCH (MODSEQ (320162350))\n      S: * 9 FETCH (MODSEQ (320162349) FLAGS (\\Answered))\n      S: d105 OK [MODIFIED 7,9] Conditional STORE failed\n\n      Use of UNCHANGEDSINCE with a modification sequence of 0 always\n      fails if the metadata item exists.  A system flag MUST always be\n      considered existent, whether it was set or not.\n\n   Example 8:\n\n      C: a102 STORE 12 (UNCHANGEDSINCE 0)\n          +FLAGS.SILENT ($MDNSent)\n      S: a102 OK [MODIFIED 12] Conditional STORE failed\n\n      The client has tested the presence of the $MDNSent user-defined\n      keyword.\n\n   Note: A client trying to make an atomic change to the state of a\n   particular metadata item (or a set of metadata items) should be\n   prepared to deal with the case when the server returns the MODIFIED\n   response code if the state of the metadata item being watched hasn't\n   changed (but the state of some other metadata item has).  This is\n   necessary, because some servers don't store separate mod-sequences\n\n\n\nMelnikov & Hole             Standards Track                     [Page 9]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   for different metadata items.  However, a server implementation\n   SHOULD avoid generating spurious MODIFIED responses for +FLAGS/-FLAGS\n   STORE operations, even when the server stores a single mod-sequence\n   per message.  Section 5 describes how this can be achieved.\n\n   Unless the server has included an unsolicited FETCH to update\n   client's knowledge about messages that have failed the UNCHANGEDSINCE\n   test, upon receipt of the MODIFIED response code, the client SHOULD\n   try to figure out if the required metadata items have indeed changed\n   by issuing FETCH or NOOP command.  It is RECOMMENDED that the server\n   avoids the need for the client to do that by sending an unsolicited\n   FETCH response (Examples 9 and 10).\n\n   If the required metadata items haven't changed, the client SHOULD\n   retry the command with the new mod-sequence.  The client SHOULD allow\n   for a configurable but reasonable number of retries (at least 2).\n\n   Example 9:\n\n      In the example below, the server returns the MODIFIED response\n      code without sending information describing why the STORE\n      UNCHANGEDSINCE operation has failed.\n\n      C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n          +FLAGS.SILENT ($Processed)\n      S: * 100 FETCH (MODSEQ (303181230852))\n      S: * 102 FETCH (MODSEQ (303181230852))\n      ...\n      S: * 150 FETCH (MODSEQ (303181230852))\n      S: a106 OK [MODIFIED 101] Conditional STORE failed\n\n      The flag $Processed was set on the message 101...\n\n      C: a107 NOOP\n      S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed))\n      S: a107 OK\n\n      Or the flag hasn't changed, but another has (note that this server\n      behaviour is discouraged.  Server implementers should also see\n      Section 5)...\n\n      C: b107 NOOP\n      S: * 101 FETCH (MODSEQ (303011130956) FLAGS (\\Deleted \\Answered))\n      S: b107 OK\n\n      ...and the client retries the operation for the message 101 with\n      the updated UNCHANGEDSINCE value\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 10]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n      C: b108 STORE 101 (UNCHANGEDSINCE 303011130956)\n          +FLAGS.SILENT ($Processed)\n      S: * 101 FETCH (MODSEQ (303181230852))\n      S: b108 OK Conditional Store completed\n\n   Example 10:\n\n      Same as above, but the server avoids the need for the client to\n      poll for changes.\n\n      The flag $Processed was set on the message 101 by another\n      client...\n\n      C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n          +FLAGS.SILENT ($Processed)\n      S: * 100 FETCH (MODSEQ (303181230852))\n      S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed))\n      S: * 102 FETCH (MODSEQ (303181230852))\n      ...\n      S: * 150 FETCH (MODSEQ (303181230852))\n      S: a106 OK [MODIFIED 101] Conditional STORE failed\n\n      Or the flag hasn't changed, but another has (note that this server\n      behaviour is discouraged.  Server implementers should also see\n      Section 5)...\n\n      C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n          +FLAGS.SILENT ($Processed)\n      S: * 100 FETCH (MODSEQ (303181230852))\n      S: * 101 FETCH (MODSEQ (303011130956) FLAGS (\\Deleted \\Answered))\n      S: * 102 FETCH (MODSEQ (303181230852))\n      ...\n      S: * 150 FETCH (MODSEQ (303181230852))\n      S: a106 OK [MODIFIED 101] Conditional STORE failed\n\n      ...and the client retries the operation for the message 101 with\n      the updated UNCHANGEDSINCE value\n\n      C: b108 STORE 101 (UNCHANGEDSINCE 303011130956)\n          +FLAGS.SILENT ($Processed)\n      S: * 101 FETCH (MODSEQ (303181230852))\n      S: b108 OK Conditional Store completed\n\n      Or the flag hasn't changed, but another has (nice server\n      behaviour.  Server implementers should also see Section 5)...\n\n      C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n          +FLAGS.SILENT ($Processed)\n\n\n\nMelnikov & Hole             Standards Track                    [Page 11]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n      S: * 100 FETCH (MODSEQ (303181230852))\n      S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed \\Deleted\n           \\Answered))\n      S: * 102 FETCH (MODSEQ (303181230852))\n      ...\n      S: * 150 FETCH (MODSEQ (303181230852))\n      S: a106 OK Conditional STORE completed\n\n   Example 11:\n\n      The following example is based on the example from the Section\n      4.2.3 of [RFC-2180] and demonstrates that the MODIFIED response\n      code may be also returned in the tagged NO response.\n\n      Client tries to conditionally STORE flags on a mixture of expunged\n      and non-expunged messages; one message fails the UNCHANGEDSINCE\n      test.\n\n      C: B001 STORE 1:7 (UNCHANGEDSINCE 320172338) +FLAGS (\\SEEN)\n      S: * 1 FETCH (MODSEQ (320172342) FLAGS (\\SEEN))\n      S: * 3 FETCH (MODSEQ (320172342) FLAGS (\\SEEN))\n      S: B001 NO [MODIFIED 2] Some of the messages no longer exist.\n\n      C: B002 NOOP\n      S: * 4 EXPUNGE\n      S: * 4 EXPUNGE\n      S: * 4 EXPUNGE\n      S: * 4 EXPUNGE\n      S: * 2 FETCH (MODSEQ (320172340) FLAGS (\\Deleted \\Answered))\n      S: B002 OK NOOP Completed.\n\n      By receiving FETCH responses for messages 1 and 3, and EXPUNGE\n      responses that indicate that messages 4 through 7 have been\n      expunged, the client retries the operation only for the message 2.\n      The updated UNCHANGEDSINCE value is used.\n\n      C: b003 STORE 2 (UNCHANGEDSINCE 320172340) +FLAGS (\\Seen)\n      S: * 2 FETCH (MODSEQ (320180050))\n      S: b003 OK Conditional Store completed\n\n   Note: If a message is specified multiple times in the message set,\n   and the server doesn't internally eliminate duplicates from the\n   message set, it MUST NOT fail the conditional STORE operation for the\n   second (or subsequent) occurrence of the message if the operation\n   completed successfully for the first occurrence.  For example, if the\n   client specifies:\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 12]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n         e105 STORE 7,3:9 (UNCHANGEDSINCE 12121230045)\n          +FLAGS.SILENT (\\Deleted)\n\n   the server must not fail the operation for message 7 as part of\n   processing \"3:9\" if it succeeded when message 7 was processed the\n   first time.\n\n   Once the client specified the UNCHANGEDSINCE modifier in a STORE\n   command, the server MUST include the MODSEQ fetch response data items\n   in all subsequent unsolicited FETCH responses.\n\n   This document also changes the behaviour of the server when it has\n   performed a STORE or UID STORE command and the UNCHANGEDSINCE\n   modifier is not specified.  If the operation is successful for a\n   message, the server MUST update the mod-sequence attribute of the\n   message.  The server is REQUIRED to include the mod-sequence value\n   whenever it decides to send the unsolicited FETCH response to all\n   CONDSTORE-aware clients that have opened the mailbox containing the\n   message.\n\n   Server implementers should also see Section 3.8 for additional\n   quality of implementation issues related to the STORE command.\n\n3.3.  FETCH and UID FETCH Commands\n\n3.3.1.  CHANGEDSINCE FETCH Modifier\n\n   This document defines the following FETCH modifier (see Section 2.4\n   of [IMAPABNF]):\n\n   CHANGEDSINCE <mod-sequence>\n\n      CHANGEDSINCE FETCH modifier allows to create a further subset of\n      the list of messages described by sequence set.  The information\n      described by message data items is only returned for messages that\n      have mod-sequence bigger than <mod-sequence>.\n\n      When CHANGEDSINCE FETCH modifier is specified, it implicitly adds\n      MODSEQ FETCH message data item (Section 3.3.2).\n\n   Example 12:\n\n      C: s100 UID FETCH 1:* (FLAGS) (CHANGEDSINCE 12345)\n      S: * 1 FETCH (UID 4 MODSEQ (65402) FLAGS (\\Seen))\n      S: * 2 FETCH (UID 6 MODSEQ (75403) FLAGS (\\Deleted))\n      S: * 4 FETCH (UID 8 MODSEQ (29738) FLAGS ($NoJunk $AutoJunk\n           $MDNSent))\n      S: s100 OK FETCH completed\n\n\n\nMelnikov & Hole             Standards Track                    [Page 13]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n3.3.2.  MODSEQ Message Data Item in FETCH Command\n\n   This extension adds a MODSEQ message data item to the FETCH command.\n   The MODSEQ message data item allows clients to retrieve mod-sequence\n   values for a range of messages in the currently selected mailbox.\n\n   Once the client specified the MODSEQ message data item in a FETCH\n   request, the server MUST include the MODSEQ fetch response data items\n   in all subsequent unsolicited FETCH responses.\n\n   Syntax:  MODSEQ\n\n      The MODSEQ message data item causes the server to return MODSEQ\n      fetch response data items.\n\n   Syntax:  MODSEQ ( <permsg-modsequence> )\n\n      MODSEQ response data items contain per-message mod-sequences.\n\n      The MODSEQ response data item is returned if the client issued\n      FETCH with MODSEQ message data item.  It also allows the server to\n      notify the client about mod-sequence changes caused by conditional\n      STOREs (Section 3.2) and/or changes caused by external sources.\n\n   Example 13:\n\n      C: a FETCH 1:3 (MODSEQ)\n      S: * 1 FETCH (MODSEQ (624140003))\n      S: * 2 FETCH (MODSEQ (624140007))\n      S: * 3 FETCH (MODSEQ (624140005))\n      S: a OK Fetch complete\n\n      In this example, the client requests per-message mod-sequences for\n      a set of messages.\n\n   When a flag for a message is modified in a different session, the\n   server sends an unsolicited FETCH response containing the mod-\n   sequence for the message.\n\n   Example 14:\n\n      (Session 1, authenticated as a user \"alex\").  The user adds a\n      shared flag \\Deleted:\n\n         C: A142 SELECT INBOX\n         ...\n         S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n         S: * OK [PERMANENTFLAGS (\\Answered \\Deleted \\Seen \\*)] Limited\n\n\n\nMelnikov & Hole             Standards Track                    [Page 14]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n         ...\n\n         C: A160 STORE 7 +FLAGS.SILENT (\\Deleted)\n         S: * 7 FETCH (MODSEQ (2121231000))\n         S: A160 OK Store completed\n\n      (Session 2, also authenticated as the user \"alex\").  Any changes\n      to flags are always reported to all sessions authenticated as the\n      same user as in the session 1.\n\n         C: C180 NOOP\n         S: * 7 FETCH (FLAGS (\\Deleted \\Answered) MODSEQ (12121231000))\n         S: C180 OK Noop completed\n\n      (Session 3, authenticated as a user \"andrew\").  As \\Deleted is a\n      shared flag, changes in session 1 are also reported in session 3:\n\n         C: D210 NOOP\n         S: * 7 FETCH (FLAGS (\\Deleted \\Answered) MODSEQ (12121231000))\n         S: D210 OK Noop completed\n\n      The user modifies a private flag \\Seen in session 1...\n\n         C: A240 STORE 7 +FLAGS.SILENT (\\Seen)\n         S: * 7 FETCH (MODSEQ (12121231777))\n         S: A240 OK Store completed\n\n      ...which is only reported in session 2...\n\n         C: C270 NOOP\n         S: * 7 FETCH (FLAGS (\\Deleted \\Answered \\Seen) MODSEQ\n              (12121231777))\n         S: C270 OK Noop completed\n\n      ...but not in session 3.\n\n         C: D300 NOOP\n         S: D300 OK Noop completed\n\n      And finally, the user removes flags \\Answered (shared) and \\Seen\n      (private) in session 1.\n\n         C: A330 STORE 7 -FLAGS.SILENT (\\Answered \\Seen)\n         S: * 7 FETCH (MODSEQ (12121245160))\n         S: A330 OK Store completed\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 15]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n      Both changes are reported in the session 2...\n\n         C: C360 NOOP\n         S: * 7 FETCH (FLAGS (\\Deleted) MODSEQ (12121245160))\n         S: C360 OK Noop completed\n\n      ...and only changes to shared flags are reported in session 3.\n\n         C: D390 NOOP\n         S: * 7 FETCH (FLAGS (\\Deleted) MODSEQ (12121245160))\n         S: D390 OK Noop completed\n\n   Server implementers should also see Section 3.8 for additional\n   quality of implementation issues related to the FETCH command.\n\n3.4.  MODSEQ Search Criterion in SEARCH\n\n   The MODSEQ criterion for the SEARCH command allows a client to search\n   for the metadata items that were modified since a specified moment.\n\n   Syntax:  MODSEQ [<entry-name> <entry-type-req>] <mod-sequence-valzer>\n\n      Messages that have modification values that are equal to or\n      greater than <mod-sequence-valzer>.  This allows a client, for\n      example, to find out which messages contain metadata items that\n      have changed since the last time it updated its disconnected\n      cache.  The client may also specify <entry-name> (name of metadata\n      item) and <entry-type-req> (type of metadata item) before\n      <mod-sequence-valzer>.  <entry-type-req> can be one of \"shared\",\n      \"priv\" (private), or \"all\".  The latter means that the server\n      should use the biggest value among \"priv\" and \"shared\" mod-\n      sequences for the metadata item.  If the server doesn't store\n      internally separate mod-sequences for different metadata items, it\n      MUST ignore <entry-name> and <entry-type-req>.  Otherwise, the\n      server should use them to narrow down the search.\n\n      For a flag <flagname>, the corresponding <entry-name> has a form\n      \"/flags/<flagname>\" as defined in [IMAPABNF].  Note that the\n      leading \"\\\" character that denotes a system flag has to be escaped\n      as per Section 4.3 of [IMAP4], as the <entry-name> uses syntax for\n      quoted strings.\n\n   If client specifies a MODSEQ criterion in a SEARCH command and the\n   server returns a non-empty SEARCH result, the server MUST also append\n   (to the end of the untagged SEARCH response) the highest mod-sequence\n   for all messages being returned.  See also Section 3.5.\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 16]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   Example 15:\n\n      C: a SEARCH MODSEQ \"/flags/\\\\draft\" all 620162338\n      S: * SEARCH 2 5 6 7 11 12 18 19 20 23 (MODSEQ 917162500)\n      S: a OK Search complete\n\n      In the above example, the message numbers of any messages\n      containing the string \"IMAP4\" in the \"value\" attribute of the\n      \"/comment\" entry and having a mod-sequence equal to or greater\n      than 620162338 for the \"\\Draft\" flag are returned in the search\n      results.\n\n   Example 16:\n\n      C: t SEARCH OR NOT MODSEQ 720162338 LARGER 50000\n      S: * SEARCH\n      S: t OK Search complete, nothing found\n\n3.5.  Modified SEARCH Untagged Response\n\n   Data:       zero or more numbers\n               mod-sequence value (omitted if no match)\n\n   This document extends syntax of the untagged SEARCH response to\n   include the highest mod-sequence for all messages being returned.\n\n   If a client specifies a MODSEQ criterion in a SEARCH (or UID SEARCH)\n   command and the server returns a non-empty SEARCH result, the server\n   MUST also append (to the end of the untagged SEARCH response) the\n   highest mod-sequence for all messages being returned.  See Section\n   3.4 for examples.\n\n3.6.  HIGHESTMODSEQ Status Data Items\n\n   This document defines a new status data item:\n\n   HIGHESTMODSEQ\n\n      The highest mod-sequence value of all messages in the mailbox.\n      This is the same value that is returned by the server in the\n      HIGHESTMODSEQ response code in an OK untagged response (see\n      Section 3.1.1).  If the server doesn't support the persistent\n      storage of mod-sequences for the mailbox (see Section 3.1.2), the\n      server MUST return 0 as the value of HIGHESTMODSEQ status data\n      item.\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 17]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   Example 17:\n\n      C: A042 STATUS blurdybloop (UIDNEXT MESSAGES HIGHESTMODSEQ)\n      S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292\n           HIGHESTMODSEQ 7011231777)\n      S: A042 OK STATUS completed\n\n3.7.  CONDSTORE Parameter to SELECT and EXAMINE\n\n   The CONDSTORE extension defines a single optional select parameter,\n   \"CONDSTORE\", which tells the server that it MUST include the MODSEQ\n   fetch response data items in all subsequent unsolicited FETCH\n   responses.\n\n   The CONDSTORE parameter to SELECT/EXAMINE helps avoid a race\n   condition that might arise when one or more metadata items are\n   modified in another session after the server has sent the\n   HIGHESTMODSEQ response code and before the client was able to issue a\n   CONDSTORE enabling command.\n\n   Example 18:\n\n      C: A142 SELECT INBOX (CONDSTORE)\n      S: * 172 EXISTS\n      S: * 1 RECENT\n      S: * OK [UNSEEN 12] Message 12 is first unseen\n      S: * OK [UIDVALIDITY 3857529045] UIDs valid\n      S: * OK [UIDNEXT 4392] Predicted next UID\n      S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n      S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n      S: * OK [HIGHESTMODSEQ 715194045007]\n      S: A142 OK [READ-WRITE] SELECT completed, CONDSTORE is now enabled\n\n3.8.  Additional Quality-of-Implementation Issues\n\n   Server implementations should follow the following rule, which\n   applies to any successfully completed STORE/UID STORE (with and\n   without UNCHANGEDSINCE modifier), as well as to a FETCH command that\n   implicitly sets \\Seen flag:\n\n      Adding the flag when it is already present or removing when it is\n      not present SHOULD NOT change the mod-sequence.\n\n   This will prevent spurious client synchronization requests.\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 18]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   However, note that client implementers MUST NOT rely on this server\n   behavior.  A client can't distinguish between the case when a server\n   has violated the SHOULD mentioned above, and that when one or more\n   clients set and unset (or unset and set) the flag in another session.\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) [ABNF] notation.  Elements not defined here can be found\n   in the formal syntax of the ABNF [ABNF], IMAP [IMAP4], and IMAP ABNF\n   extensions [IMAPABNF] specifications.\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper- or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   capability          =/ \"CONDSTORE\"\n\n   status-att          =/ \"HIGHESTMODSEQ\"\n                          ;; extends non-terminal defined in RFC 3501.\n\n   status-att-val      =/ \"HIGHESTMODSEQ\" SP mod-sequence-valzer\n                          ;; extends non-terminal defined in [IMAPABNF].\n                          ;; Value 0 denotes that the mailbox doesn't\n                          ;; support persistent mod-sequences\n                          ;; as described in Section 3.1.2\n\n   store-modifier      =/ \"UNCHANGEDSINCE\" SP mod-sequence-valzer\n                          ;; Only a single \"UNCHANGEDSINCE\" may be\n                          ;; specified in a STORE operation\n\n   fetch-modifier      =/ chgsince-fetch-mod\n                          ;; conforms to the generic \"fetch-modifier\"\n                          ;; syntax defined in [IMAPABNF].\n\n   chgsince-fetch-mod  = \"CHANGEDSINCE\" SP mod-sequence-value\n                          ;; CHANGEDSINCE FETCH modifier conforms to\n                          ;; the fetch-modifier syntax\n\n   fetch-att           =/ fetch-mod-sequence\n                          ;; modifies original IMAP4 fetch-att\n\n   fetch-mod-sequence  = \"MODSEQ\"\n\n   fetch-mod-resp      = \"MODSEQ\" SP \"(\" permsg-modsequence \")\"\n\n   msg-att-dynamic     =/ fetch-mod-resp\n\n\n\nMelnikov & Hole             Standards Track                    [Page 19]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   search-key          =/ search-modsequence\n                          ;; modifies original IMAP4 search-key\n                          ;;\n                          ;; This change applies to all commands\n                          ;; referencing this non-terminal, in\n                          ;; particular SEARCH.\n\n   search-modsequence  = \"MODSEQ\" [search-modseq-ext] SP\n                         mod-sequence-valzer\n\n   search-modseq-ext   = SP entry-name SP entry-type-req\n\n   resp-text-code      =/ \"HIGHESTMODSEQ\" SP mod-sequence-value /\n                          \"NOMODSEQ\" /\n                          \"MODIFIED\" SP set\n\n   entry-name          = entry-flag-name\n\n   entry-flag-name     = DQUOTE \"/flags/\" attr-flag DQUOTE\n                          ;; each system or user defined flag <flag>\n                          ;; is mapped to \"/flags/<flag>\".\n                          ;;\n                          ;; <entry-flag-name> follows the escape rules\n                          ;; used by \"quoted\" string as described in\n                          ;; Section 4.3 of [IMAP4], e.g., for the flag\n                          ;; \\Seen the corresponding <entry-name> is\n                          ;; \"/flags/\\\\seen\", and for the flag\n                          ;; $MDNSent, the corresponding <entry-name>\n                          ;; is \"/flags/$mdnsent\".\n\n   entry-type-resp     = \"priv\" / \"shared\"\n                          ;; metadata item type\n\n   entry-type-req      = entry-type-resp / \"all\"\n                          ;; perform SEARCH operation on private\n                          ;; metadata item, shared metadata item or both\n\n   permsg-modsequence  = mod-sequence-value\n                          ;; per message mod-sequence\n\n   mod-sequence-value  = 1*DIGIT\n                          ;; Positive unsigned 64-bit integer\n                          ;; (mod-sequence)\n                          ;; (1 <= n < 18,446,744,073,709,551,615)\n\n   mod-sequence-valzer = \"0\" / mod-sequence-value\n\n   search-sort-mod-seq = \"(\" \"MODSEQ\" SP mod-sequence-value \")\"\n\n\n\nMelnikov & Hole             Standards Track                    [Page 20]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   select-param        =/ condstore-param\n                          ;; conforms to the generic \"select-param\"\n                          ;; non-terminal syntax defined in [IMAPABNF].\n\n   condstore-param     = \"CONDSTORE\"\n\n   mailbox-data        =/ \"SEARCH\" [1*(SP nz-number) SP\n                          search-sort-mod-seq]\n\n   attr-flag           = \"\\\\Answered\" / \"\\\\Flagged\" / \"\\\\Deleted\" /\n                         \"\\\\Seen\" / \"\\\\Draft\" / attr-flag-keyword /\n                         attr-flag-extension\n                          ;; Does not include \"\\\\Recent\"\n\n   attr-flag-extension = \"\\\\\" atom\n                          ;; Future expansion.  Client implementations\n                          ;; MUST accept flag-extension flags.  Server\n                          ;; implementations MUST NOT generate\n                          ;; flag-extension flags except as defined by\n                          ;; future standard or standards-track\n                          ;; revisions of [IMAP4].\n\n   attr-flag-keyword   = atom\n\n5.  Server Implementation Considerations\n\n   This section describes how a server implementation that doesn't store\n   separate per-metadata mod-sequences for different metadata items can\n   avoid sending the MODIFIED response to any of the following\n   conditional STORE operations:\n\n      +FLAGS\n      -FLAGS\n      +FLAGS.SILENT\n      -FLAGS.SILENT\n\n   Note that the optimization described in this section can't be\n   performed in case of a conditional STORE FLAGS operation.\n\n   Let's use the following example.  The client has issued\n\n      C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n         +FLAGS.SILENT ($Processed)\n\n   When the server receives the command and parses it successfully, it\n   iterates through the message set and tries to execute the conditional\n   STORE command for each message.\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 21]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n   Each server internally works as a client, i.e., it has to cache the\n   current state of all IMAP flags as it is known to the client.  In\n   order to report flag changes to the client, the server compares the\n   cached values with the values in its database for IMAP flags.\n\n   Imagine that another client has changed the state of a flag \\Deleted\n   on the message 101 and that the change updated the mod-sequence for\n   the message.  The server knows that the mod-sequence for the mailbox\n   has changed; however, it also knows that:\n\n   a) the client is not interested in \\Deleted flag, as it hasn't\n      included it in +FLAGS.SILENT operation; and\n\n   b) the state of the flag $Processed hasn't changed (the server can\n      determine this by comparing cached flag state with the state of\n      the flag in the database).\n\n   Therefore, the server doesn't have to report MODIFIED to the client.\n   Instead, the server may set $Processed flag, update the mod-sequence\n   for the message 101 once again and send an untagged FETCH response\n   with new mod-sequence and flags:\n\n      S: * 101 FETCH (MODSEQ (303011130956)\n         FLAGS ($Processed \\Deleted \\Answered))\n\n   See also Section 3.8 for additional quality-of-implementation issues.\n\n6.  Security Considerations\n\n   It is believed that the Conditional STORE extension doesn't raise any\n   new security concerns that are not already discussed in [IMAP4].\n   However, the availability of this extension may make it possible for\n   IMAP4 to be used in critical applications it could not be used for\n   previously, making correct IMAP server implementation and operation\n   even more important.\n\n7.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track or\n   IESG approved experimental RFC.  The registry is currently located\n   at:\n\n         http://www.iana.org/assignments/imap4-capabilities\n\n   This document defines the CONDSTORE IMAP capability.  IANA has added\n   it to the registry accordingly.\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 22]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\n8.  References\n\n8.1.  Normative References\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [ABNF]     Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 4234, October 2005.\n\n   [IMAP4]    Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [IMAPABNF] Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n8.2.  Informative References\n\n   [ACAP]     Newman, C. and J. Myers, \"ACAP -- Application\n              Configuration Access Protocol\", RFC 2244, November 1997.\n\n   [ACL]      Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [ANN]      Daboo, C. and R. Gellens, \"IMAP ANNOTATE Extension\", Work\n              in Progress, March 2006.\n\n   [NTP]      Mills, D., \"Network Time Protocol (Version 3)\n              Specification, Implementation and Analysis\", RFC 1305,\n              March 1992.\n\n   [RFC-2180] Gahrns, M., \"IMAP4 Multi-Accessed Mailbox Practice\", RFC\n              2180, July 1997.\n\n9.  Acknowledgements\n\n   Some text was borrowed from \"IMAP ANNOTATE Extension\" [ANN] by\n   Randall Gellens and Cyrus Daboo and from \"ACAP -- Application\n   Configuration Access Protocol\" [ACAP] by Chris Newman and John Myers.\n\n   Many thanks to Randall Gellens for his thorough review of the\n   document.\n\n   The authors also acknowledge the feedback provided by Cyrus Daboo,\n   Larry Greenfield, Chris Newman, Harrie Hazewinkel, Arnt Gulbrandsen,\n   Timo Sirainen, Mark Crispin, Ned Freed, Ken Murchison, and Dave\n   Cridland.\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 23]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex\n   TW12 2BX,\n   United Kingdom\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Steve Hole\n   ACI WorldWide/MessagingDirect\n   #1807, 10088 102 Ave\n   Edmonton, AB\n   T5J 2Z1\n   Canada\n\n   EMail: Steve.Hole@messagingdirect.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 24]\n\f\nRFC 4551          IMAP Extension for Conditional STORE         June 2006\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2006).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is provided by the IETF\n   Administrative Support Activity (IASA).\n\n\n\n\n\n\n\nMelnikov & Hole             Standards Track                    [Page 25]\n\f\n"
  },
  {
    "path": "rfc/rfc4616.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                   K. Zeilenga, Ed.\nRequest for Comments: 4616                           OpenLDAP Foundation\nUpdates: 2595                                                August 2006\nCategory: Standards Track\n\n\n  The PLAIN Simple Authentication and Security Layer (SASL) Mechanism\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The Internet Society (2006).\n\nAbstract\n\n   This document defines a simple clear-text user/password Simple\n   Authentication and Security Layer (SASL) mechanism called the PLAIN\n   mechanism.  The PLAIN mechanism is intended to be used, in\n   combination with data confidentiality services provided by a lower\n   layer, in protocols that lack a simple password authentication\n   command.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 1]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n1.  Introduction\n\n   Clear-text, multiple-use passwords are simple, interoperate with\n   almost all existing operating system authentication databases, and\n   are useful for a smooth transition to a more secure password-based\n   authentication mechanism.  The drawback is that they are unacceptable\n   for use over network connections where data confidentiality is not\n   ensured.\n\n   This document defines the PLAIN Simple Authentication and Security\n   Layer ([SASL]) mechanism for use in protocols with no clear-text\n   login command (e.g., [ACAP] or [SMTP-AUTH]).  This document updates\n   RFC 2595, replacing Section 6.  Changes since RFC 2595 are detailed\n   in Appendix A.\n\n   The name associated with this mechanism is \"PLAIN\".\n\n   The PLAIN SASL mechanism does not provide a security layer.\n\n   The PLAIN mechanism should not be used without adequate data security\n   protection as this mechanism affords no integrity or confidentiality\n   protections itself.  The mechanism is intended to be used with data\n   security protections provided by application-layer protocol,\n   generally through its use of Transport Layer Security ([TLS])\n   services.\n\n   By default, implementations SHOULD advertise and make use of the\n   PLAIN mechanism only when adequate data security services are in\n   place.  Specifications for IETF protocols that indicate that this\n   mechanism is an applicable authentication mechanism MUST mandate that\n   implementations support an strong data security service, such as TLS.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [Keywords].\n\n2.  PLAIN SASL Mechanism\n\n   The mechanism consists of a single message, a string of [UTF-8]\n   encoded [Unicode] characters, from the client to the server.  The\n   client presents the authorization identity (identity to act as),\n   followed by a NUL (U+0000) character, followed by the authentication\n   identity (identity whose password will be used), followed by a NUL\n   (U+0000) character, followed by the clear-text password.  As with\n   other SASL mechanisms, the client does not provide an authorization\n   identity when it wishes the server to derive an identity from the\n   credentials and use that as the authorization identity.\n\n\n\n\nZeilenga                    Standards Track                     [Page 2]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n   The formal grammar for the client message using Augmented BNF [ABNF]\n   follows.\n\n   message   = [authzid] UTF8NUL authcid UTF8NUL passwd\n   authcid   = 1*SAFE ; MUST accept up to 255 octets\n   authzid   = 1*SAFE ; MUST accept up to 255 octets\n   passwd    = 1*SAFE ; MUST accept up to 255 octets\n   UTF8NUL   = %x00 ; UTF-8 encoded NUL character\n\n   SAFE      = UTF1 / UTF2 / UTF3 / UTF4\n               ;; any UTF-8 encoded Unicode character except NUL\n\n   UTF1      = %x01-7F ;; except NUL\n   UTF2      = %xC2-DF UTF0\n   UTF3      = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /\n               %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)\n   UTF4      = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /\n               %xF4 %x80-8F 2(UTF0)\n   UTF0      = %x80-BF\n\n   The authorization identity (authzid), authentication identity\n   (authcid), password (passwd), and NUL character deliminators SHALL be\n   transferred as [UTF-8] encoded strings of [Unicode] characters.  As\n   the NUL (U+0000) character is used as a deliminator, the NUL (U+0000)\n   character MUST NOT appear in authzid, authcid, or passwd productions.\n\n   The form of the authzid production is specific to the application-\n   level protocol's SASL profile [SASL].  The authcid and passwd\n   productions are form-free.  Use of non-visible characters or\n   characters that a user may be unable to enter on some keyboards is\n   discouraged.\n\n   Servers MUST be capable of accepting authzid, authcid, and passwd\n   productions up to and including 255 octets.  It is noted that the\n   UTF-8 encoding of a Unicode character may be as long as 4 octets.\n\n   Upon receipt of the message, the server will verify the presented (in\n   the message) authentication identity (authcid) and password (passwd)\n   with the system authentication database, and it will verify that the\n   authentication credentials permit the client to act as the (presented\n   or derived) authorization identity (authzid).  If both steps succeed,\n   the user is authenticated.\n\n   The presented authentication identity and password strings, as well\n   as the database authentication identity and password strings, are to\n   be prepared before being used in the verification process.  The\n   [SASLPrep] profile of the [StringPrep] algorithm is the RECOMMENDED\n   preparation algorithm.  The SASLprep preparation algorithm is\n\n\n\nZeilenga                    Standards Track                     [Page 3]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n   recommended to improve the likelihood that comparisons behave in an\n   expected manner.  The SASLprep preparation algorithm is not mandatory\n   so as to allow the server to employ other preparation algorithms\n   (including none) when appropriate.  For instance, use of a different\n   preparation algorithm may be necessary for the server to interoperate\n   with an external system.\n\n   When preparing the presented strings using [SASLPrep], the presented\n   strings are to be treated as \"query\" strings (Section 7 of\n   [StringPrep]) and hence unassigned code points are allowed to appear\n   in their prepared output.  When preparing the database strings using\n   [SASLPrep], the database strings are to be treated as \"stored\"\n   strings (Section 7 of [StringPrep]) and hence unassigned code points\n   are prohibited from appearing in their prepared output.\n\n   Regardless of the preparation algorithm used, if the output of a\n   non-invertible function (e.g., hash) of the expected string is\n   stored, the string MUST be prepared before input to that function.\n\n   Regardless of the preparation algorithm used, if preparation fails or\n   results in an empty string, verification SHALL fail.\n\n   When no authorization identity is provided, the server derives an\n   authorization identity from the prepared representation of the\n   provided authentication identity string.  This ensures that the\n   derivation of different representations of the authentication\n   identity produces the same authorization identity.\n\n   The server MAY use the credentials to initialize any new\n   authentication database, such as one suitable for [CRAM-MD5] or\n   [DIGEST-MD5].\n\n3.  Pseudo-Code\n\n   This section provides pseudo-code illustrating the verification\n   process (using hashed passwords and the SASLprep preparation\n   function) discussed above.  This section is not definitive.\n\n   boolean Verify(string authzid, string authcid, string passwd) {\n     string pAuthcid = SASLprep(authcid, true); # prepare authcid\n     string pPasswd = SASLprep(passwd, true);   # prepare passwd\n     if (pAuthcid == NULL || pPasswd == NULL) {\n       return false;     # preparation failed\n     }\n     if (pAuthcid == \"\" || pPasswd == \"\") {\n       return false;     # empty prepared string\n     }\n\n\n\n\nZeilenga                    Standards Track                     [Page 4]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n     storedHash = FetchPasswordHash(pAuthcid);\n     if (storedHash == NULL || storedHash == \"\") {\n       return false;     # error or unknown authcid\n     }\n\n     if (!Compare(storedHash, Hash(pPasswd))) {\n       return false;     # incorrect password\n     }\n\n     if (authzid == NULL ) {\n       authzid = DeriveAuthzid(pAuthcid);\n       if (authzid == NULL || authzid == \"\") {\n           return false; # could not derive authzid\n       }\n     }\n\n     if (!Authorize(pAuthcid, authzid)) {\n       return false;     # not authorized\n     }\n\n     return true;\n   }\n\n   The second parameter of the SASLprep function, when true, indicates\n   that unassigned code points are allowed in the input.  When the\n   SASLprep function is called to prepare the password prior to\n   computing the stored hash, the second parameter would be false.\n\n   The second parameter provided to the Authorize function is not\n   prepared by this code.  The application-level SASL profile should be\n   consulted to determine what, if any, preparation is necessary.\n\n   Note that the DeriveAuthzid and Authorize functions (whether\n   implemented as one function or two, whether designed in a manner in\n   which these functions or whether the mechanism implementation can be\n   reused elsewhere) require knowledge and understanding of mechanism\n   and the application-level protocol specification and/or\n   implementation details to implement.\n\n   Note that the Authorize function outcome is clearly dependent on\n   details of the local authorization model and policy.  Both functions\n   may be dependent on other factors as well.\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 5]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n4.  Examples\n\n   This section provides examples of PLAIN authentication exchanges.\n   The examples are intended to help the readers understand the above\n   text.  The examples are not definitive.\n\n   \"C:\" and \"S:\" indicate lines sent by the client and server,\n   respectively.  \"<NUL>\" represents a single NUL (U+0000) character.\n   The Application Configuration Access Protocol ([ACAP]) is used in the\n   examples.\n\n   The first example shows how the PLAIN mechanism might be used for\n   user authentication.\n\n   S: * ACAP (SASL \"CRAM-MD5\") (STARTTLS)\n   C: a001 STARTTLS\n   S: a001 OK \"Begin TLS negotiation now\"\n   <TLS negotiation, further commands are under TLS layer>\n   S: * ACAP (SASL \"CRAM-MD5\" \"PLAIN\")\n   C: a002 AUTHENTICATE \"PLAIN\"\n   S: + \"\"\n   C: {21}\n   C: <NUL>tim<NUL>tanstaaftanstaaf\n   S: a002 OK \"Authenticated\"\n\n   The second example shows how the PLAIN mechanism might be used to\n   attempt to assume the identity of another user.  In this example, the\n   server rejects the request.  Also, this example makes use of the\n   protocol optional initial response capability to eliminate a round-\n   trip.\n\n   S: * ACAP (SASL \"CRAM-MD5\") (STARTTLS)\n   C: a001 STARTTLS\n   S: a001 OK \"Begin TLS negotiation now\"\n   <TLS negotiation, further commands are under TLS layer>\n   S: * ACAP (SASL \"CRAM-MD5\" \"PLAIN\")\n   C: a002 AUTHENTICATE \"PLAIN\" {20+}\n   C: Ursel<NUL>Kurt<NUL>xipj3plmq\n   S: a002 NO \"Not authorized to requested authorization identity\"\n\n5.  Security Considerations\n\n   As the PLAIN mechanism itself provided no integrity or\n   confidentiality protections, it should not be used without adequate\n   external data security protection, such as TLS services provided by\n   many application-layer protocols.  By default, implementations SHOULD\n   NOT advertise and SHOULD NOT make use of the PLAIN mechanism unless\n   adequate data security services are in place.\n\n\n\nZeilenga                    Standards Track                     [Page 6]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n   When the PLAIN mechanism is used, the server gains the ability to\n   impersonate the user to all services with the same password\n   regardless of any encryption provided by TLS or other confidentiality\n   protection mechanisms.  Whereas many other authentication mechanisms\n   have similar weaknesses, stronger SASL mechanisms address this issue.\n   Clients are encouraged to have an operational mode where all\n   mechanisms that are likely to reveal the user's password to the\n   server are disabled.\n\n   General [SASL] security considerations apply to this mechanism.\n\n   Unicode, [UTF-8], and [StringPrep] security considerations also\n   apply.\n\n6.  IANA Considerations\n\n   The SASL Mechanism registry [IANA-SASL] entry for the PLAIN mechanism\n   has been updated by the IANA to reflect that this document now\n   provides its technical specification.\n\n   To: iana@iana.org\n   Subject: Updated Registration of SASL mechanism PLAIN\n\n   SASL mechanism name: PLAIN\n   Security considerations: See RFC 4616.\n   Published specification (optional, recommended): RFC 4616\n   Person & email address to contact for further information:\n        Kurt Zeilenga <kurt@openldap.org>\n        IETF SASL WG <ietf-sasl@imc.org>\n   Intended usage: COMMON\n   Author/Change controller: IESG <iesg@ietf.org>\n   Note: Updates existing entry for PLAIN\n\n7.  Acknowledgements\n\n   This document is a revision of RFC 2595 by Chris Newman.  Portions of\n   the grammar defined in Section 2 were borrowed from [UTF-8] by\n   Francois Yergeau.\n\n   This document is a product of the IETF Simple Authentication and\n   Security Layer (SASL) Working Group.\n\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 7]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n8.  Normative References\n\n   [ABNF]        Crocker, D., Ed. and P. Overell, \"Augmented BNF for\n                 Syntax Specifications: ABNF\", RFC 4234, October 2005.\n\n   [Keywords]    Bradner, S., \"Key words for use in RFCs to Indicate\n                 Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [SASL]        Melnikov, A., Ed., and K. Zeilenga, Ed., \"Simple\n                 Authentication and Security Layer (SASL)\", RFC 4422,\n                 June 2006.\n\n   [SASLPrep]    Zeilenga, K., \"SASLprep: Stringprep Profile for User\n                 Names and Passwords\", RFC 4013, February 2005.\n\n   [StringPrep]  Hoffman, P. and M. Blanchet, \"Preparation of\n                 Internationalized Strings (\"stringprep\")\", RFC 3454,\n                 December 2002.\n\n   [Unicode]     The Unicode Consortium, \"The Unicode Standard, Version\n                 3.2.0\" is defined by \"The Unicode Standard, Version\n                 3.0\" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-\n                 61633-5), as amended by the \"Unicode Standard Annex\n                 #27: Unicode 3.1\"\n                 (http://www.unicode.org/reports/tr27/) and by the\n                 \"Unicode Standard Annex #28: Unicode 3.2\"\n                 (http://www.unicode.org/reports/tr28/).\n\n   [UTF-8]       Yergeau, F., \"UTF-8, a transformation format of ISO\n                 10646\", STD 63, RFC 3629, November 2003.\n\n   [TLS]         Dierks, T. and E. Rescorla, \"The Transport Layer\n                 Security (TLS) Protocol Version 1.1\", RFC 4346, April\n                 2006.\n\n9.  Informative References\n\n   [ACAP]        Newman, C. and J. Myers, \"ACAP -- Application\n                 Configuration Access Protocol\", RFC 2244, November\n                 1997.\n\n   [CRAM-MD5]    Nerenberg, L., Ed., \"The CRAM-MD5 SASL Mechanism\", Work\n                 in Progress, June 2006.\n\n   [DIGEST-MD5]  Melnikov, A., Ed., \"Using Digest Authentication as a\n                 SASL Mechanism\", Work in Progress, June 2006.\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 8]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\n   [IANA-SASL]   IANA, \"SIMPLE AUTHENTICATION AND SECURITY LAYER (SASL)\n                 MECHANISMS\",\n                 <http://www.iana.org/assignments/sasl-mechanisms>.\n\n   [SMTP-AUTH]   Myers, J., \"SMTP Service Extension for Authentication\",\n                 RFC 2554, March 1999.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                     [Page 9]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\nAppendix A.  Changes since RFC 2595\n\n   This appendix is non-normative.\n\n   This document replaces Section 6 of RFC 2595.\n\n   The specification details how the server is to compare client-\n   provided character strings with stored character strings.\n\n   The ABNF grammar was updated.  In particular, the grammar now allows\n   LINE FEED (U+000A) and CARRIAGE RETURN (U+000D) characters in the\n   authzid, authcid, passwd productions.  However, whether these control\n   characters may be used depends on the string preparation rules\n   applicable to the production.  For passwd and authcid productions,\n   control characters are prohibited.  For authzid, one must consult the\n   application-level SASL profile.  This change allows PLAIN to carry\n   all possible authorization identity strings allowed in SASL.\n\n   Pseudo-code was added.\n\n   The example section was expanded to illustrate more features of the\n   PLAIN mechanism.\n\nEditor's Address\n\n   Kurt D. Zeilenga\n   OpenLDAP Foundation\n\n   EMail: Kurt@OpenLDAP.org\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nZeilenga                    Standards Track                    [Page 10]\n\f\nRFC 4616                The PLAIN SASL Mechanism             August 2006\n\n\nFull Copyright Statement\n\n   Copyright (C) The Internet Society (2006).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET\n   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,\n   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE\n   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is provided by the IETF\n   Administrative Support Activity (IASA).\n\n\n\n\n\n\n\nZeilenga                    Standards Track                    [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc4731.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 4731                                     Isode Ltd\nCategory: Standards Track                                    D. Cridland\n                                                   Inventure Systems Ltd\n                                                           November 2006\n\n\n           IMAP4 Extension to SEARCH Command for Controlling\n                  What Kind of Information Is Returned\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (C) The IETF Trust (2006).\n\nAbstract\n\n   This document extends IMAP (RFC 3501) SEARCH and UID SEARCH commands\n   with several result options, which can control what kind of\n   information is returned. The following result options are defined:\n   minimal value, maximal value, all found messages, and number of found\n   messages.\n\nTable of Contents\n\n   1. Introduction ....................................................2\n   2. Conventions Used in This Document ...............................2\n   3. IMAP Protocol Changes ...........................................2\n      3.1. New SEARCH/UID SEARCH Result Options .......................2\n      3.2. Interaction with CONDSTORE extension .......................4\n   4. Formal Syntax ...................................................5\n   5. Security Considerations .........................................6\n   6. IANA Considerations .............................................6\n   7. Normative References ............................................6\n   8. Acknowledgments .................................................6\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 1]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\n1.  Introduction\n\n   [IMAPABNF] extended SEARCH and UID SEARCH commands with result\n   specifiers (also known as result options), which can control what\n   kind of information is returned.\n\n   A server advertising the ESEARCH capability supports the following\n   result options:  minimal value, maximal value, all found messages,\n   and number of found messages.  These result options allow clients to\n   get SEARCH results in more convenient forms, while also saving\n   bandwidth required to transport the results, for example, by finding\n   the first unseen message or returning the number of unseen or deleted\n   messages.  Also, when a single MIN or a single MAX result option is\n   specified, servers can optimize execution of SEARCHes.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [KEYWORDS].\n\n3.   IMAP Protocol Changes\n\n3.1.  New SEARCH/UID SEARCH Result Options\n\n   The SEARCH/UID SEARCH commands are extended to allow for the\n   following result options:\n\n      MIN\n         Return the lowest message number/UID that satisfies the SEARCH\n         criteria.\n\n         If the SEARCH results in no matches, the server MUST NOT\n         include the MIN result option in the ESEARCH response; however,\n         it still MUST send the ESEARCH response.\n\n      MAX\n         Return the highest message number/UID that satisfies the SEARCH\n         criteria.\n\n         If the SEARCH results in no matches, the server MUST NOT\n         include the MAX result option in the ESEARCH response; however,\n         it still MUST send the ESEARCH response.\n\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 2]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\n      ALL\n         Return all message numbers/UIDs that satisfy the SEARCH\n         criteria.  Unlike regular (unextended) SEARCH, the messages are\n         always returned using the sequence-set syntax.  A sequence-set\n         representation may be more compact and can be used as is in a\n         subsequent command that accepts sequence-set.  Note, the client\n         MUST NOT assume that messages/UIDs will be listed in any\n         particular order.\n\n         If the SEARCH results in no matches, the server MUST NOT\n         include the ALL result option in the ESEARCH response; however,\n         it still MUST send the ESEARCH response.\n\n      COUNT\n         Return number of the messages that satisfy the SEARCH criteria.\n         This result option MUST always be included in the ESEARCH\n         response.\n\n   If one or more result options described above are specified, the\n   extended SEARCH command MUST return a single ESEARCH response\n   [IMAPABNF], instead of the SEARCH response.\n\n   An extended UID SEARCH command MUST cause an ESEARCH response with\n   the UID indicator present.\n\n   Note that future extensions to this document can allow servers to\n   return multiple ESEARCH responses for a single extended SEARCH\n   command.  These extensions will have to describe how results from\n   multiple ESEARCH responses are to be amalgamated.\n\n   If the list of result options is empty, that requests the server to\n   return an ESEARCH response instead of the SEARCH response.  This is\n   equivalent to \"(ALL)\".\n\n      Example:    C: A282 SEARCH RETURN (MIN COUNT) FLAGGED\n                     SINCE 1-Feb-1994 NOT FROM \"Smith\"\n                  S: * ESEARCH (TAG \"A282\") MIN 2 COUNT 3\n                  S: A282 OK SEARCH completed\n\n      Example:    C: A283 SEARCH RETURN () FLAGGED\n                     SINCE 1-Feb-1994 NOT FROM \"Smith\"\n                  S: * ESEARCH (TAG \"A283\") ALL 2,10:11\n                  S: A283 OK SEARCH completed\n\n   The following example demonstrates finding the first unseen message\n   as returned in the UNSEEN response code on a successful SELECT\n   command:\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 3]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\n      Example:    C: A284 SEARCH RETURN (MIN) UNSEEN\n                  S: * ESEARCH (TAG \"A284\") MIN 4\n                  S: A284 OK SEARCH completed\n\n   The following example demonstrates that if the ESEARCH UID indicator\n   is present, all data in the ESEARCH response is referring to UIDs;\n   for example, the MIN result specifier will be followed by a UID.\n\n      Example:    C: A285 UID SEARCH RETURN (MIN MAX) 1:5000\n                  S: * ESEARCH (TAG \"A285\") UID MIN 7 MAX 3800\n                  S: A285 OK SEARCH completed\n\n   The following example demonstrates returning the number of deleted\n   messages:\n\n      Example:    C: A286 SEARCH RETURN (COUNT) DELETED\n                  S: * ESEARCH (TAG \"A286\") COUNT 15\n                  S: A286 OK SEARCH completed\n\n3.2.  Interaction with CONDSTORE extension\n\n   When the server supports both the ESEARCH and the CONDSTORE\n   [CONDSTORE] extension, and the client requests one or more result\n   option described in section 3.1 together with the MODSEQ search\n   criterion in the same SEARCH/UID SEARCH command, then the server MUST\n   return the ESEARCH response containing the MODSEQ result option\n   (described in the following paragraph) instead of the extended SEARCH\n   response described in section 3.5 of [CONDSTORE].\n\n   If the SEARCH/UID SEARCH command contained a single MIN or MAX result\n   option, the MODSEQ result option contains the mod-sequence for the\n   found message.  If the SEARCH/UID SEARCH command contained both MIN\n   and MAX result options and no ALL/COUNT option, the MODSEQ result\n   option contains the highest mod-sequence for the two returned\n   messages.  Otherwise the MODSEQ result option contains the highest\n   mod-sequence for all messages being returned.\n\n   Example: The following example demonstrates how Example 15 from\n   [CONDSTORE] would look in the presence of one or more result option:\n\n         C: a1 SEARCH RETURN (MIN) MODSEQ \"/flags/\\\\draft\"\n             all 620162338\n         S: * ESEARCH (TAG \"a1\") MIN 2 MODSEQ 917162488\n         S: a1 OK Search complete\n\n         C: a2 SEARCH RETURN (MAX) MODSEQ \"/flags/\\\\draft\"\n             all 620162338\n         S: * ESEARCH (TAG \"a2\") MAX 23 MODSEQ 907162321\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 4]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\n         S: a2 OK Search complete\n\n         C: a3 SEARCH RETURN (MIN MAX) MODSEQ \"/flags/\\\\draft\"\n             all 620162338\n         S: * ESEARCH (TAG \"a3\") MIN 2 MAX 23 MODSEQ 917162488\n         S: a3 OK Search complete\n\n         C: a4 SEARCH RETURN (MIN COUNT) MODSEQ \"/flags/\\\\draft\"\n             all 620162338\n         S: * ESEARCH (TAG \"a4\") MIN 2 COUNT 10 MODSEQ 917162500\n         S: a4 OK Search complete\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   [IMAP4], [CONDSTORE], or [IMAPABNF].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n     capability         =/ \"ESEARCH\"\n\n     search-return-data = \"MIN\" SP nz-number /\n                          \"MAX\" SP nz-number /\n                          \"ALL\" SP sequence-set /\n                          \"COUNT\" SP number\n                          ;; conforms to the generic\n                          ;; search-return-data syntax defined\n                          ;; in [IMAPABNF]\n\n     search-return-opt  = \"MIN\" / \"MAX\" / \"ALL\" / \"COUNT\"\n                          ;; conforms to generic search-return-opt\n                          ;; syntax defined in [IMAPABNF]\n\n     When the CONDSTORE [CONDSTORE] IMAP extension is also supported,\n     the ABNF is updated as follows:\n\n     search-return-data =/ \"MODSEQ\" SP mod-sequence-value\n                          ;; mod-sequence-value is defined\n                          ;; in [CONDSTORE]\n\n\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 5]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\n5.  Security Considerations\n\n   In the general case, the IMAP SEARCH/UID SEARCH commands can be CPU\n   and/or IO intensive, and are seen by some as a potential attack point\n   for denial of service attacks, so some sites/implementations even\n   disable them entirely.  This is quite unfortunate, as SEARCH command\n   is one of the best examples demonstrating IMAP advantage over POP3.\n\n   The ALL and COUNT return options don't change how SEARCH is working\n   internally; they only change how information about found messages is\n   returned.  MIN and MAX SEARCH result options described in this\n   document can lighten the load on IMAP servers that choose to optimize\n   SEARCHes containing only one or both of them.\n\n   It is believed that this extension doesn't raise any additional\n   security concerns not already discussed in [IMAP4].\n\n6.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track RFC\n   or an IESG-approved experimental RFC.  The registry is currently\n   located at <http://www.iana.org/assignments/imap4-capabilities>.\n\n   This document defines the ESEARCH IMAP capability, which IANA added\n   to the registry.\n\n7.  Normative References\n\n   [KEYWORDS]  Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [IMAP4]     Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n               4rev1\", RFC 3501, March 2003.\n\n   [ABNF]      Crocker, D. (Ed.) and P. Overell , \"Augmented BNF for\n               Syntax Specifications: ABNF\", RFC 4234, October 2005.\n\n   [IMAPABNF]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n               ABNF\", RFC 4466, April 2006..\n\n   [CONDSTORE] Melnikov, A. and S. Hole, \"IMAP Extension for Conditional\n               STORE\", RFC 4551, June 2006.\n\n8.  Acknowledgments\n\n   Thanks to Michael Wener, Arnt Gulbrandsen, Cyrus Daboo, Mark Crispin,\n   and Pete Maclean for comments and corrections.\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 6]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex, TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Dave A. Cridland\n   Inventure Systems Limited\n\n   EMail: dave.cridland@inventuresystems.co.uk\n   URL: http://invsys.co.uk/dave/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 7]\n\f\nRFC 4731               IMAP4 Extension to SEARCH           November 2006\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2006).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST,\n   AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES,\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT\n   THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY\n   IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR\n   PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\nAcknowledgement\n\n   Funding for the RFC Editor function is currently provided by the\n   Internet Society.\n\n\n\n\n\n\nMelnikov & Cridland         Standards Track                     [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc4959.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                      R. Siemborski\nRequest for Comments: 4959                                  Google, Inc.\nCategory: Standards Track                                 A. Gulbrandsen\n                                                  Oryx Mail Systems GmbH\n                                                          September 2007\n\n\n   IMAP Extension for Simple Authentication and Security Layer (SASL)\n                        Initial Client Response\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   To date, the Internet Message Access Protocol (IMAP) has used a\n   Simple Authentication and Security Layer (SASL) profile which always\n   required at least one complete round trip for an authentication, as\n   it did not support an initial client response argument.  This\n   additional round trip at the beginning of the session is undesirable,\n   especially when round-trip costs are high.\n\n   This document defines an extension to IMAP which allows clients and\n   servers to avoid this round trip by allowing an initial client\n   response argument to the IMAP AUTHENTICATE command.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 1]\n\f\nRFC 4959       IMAP Ext for SASL Initial Client Response  September 2007\n\n\n1.  Introduction\n\n   The SASL initial client response extension is present in any IMAP\n   [RFC3501] server implementation which returns \"SASL-IR\" as one of the\n   supported capabilities in its CAPABILITY response.\n\n   Servers which support this extension will accept an optional initial\n   client response with the AUTHENTICATE command for any SASL [RFC4422]\n   mechanisms which support it.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n   Formal syntax is defined by [RFC4234] as extended by [RFC3501].\n\n3.  IMAP Changes to the IMAP AUTHENTICATE Command\n\n   This extension adds an optional second argument to the AUTHENTICATE\n   command that is defined in Section 6.2.2 of [RFC3501].  If this\n   second argument is present, it represents the contents of the\n   \"initial client response\" defined in Section 5.1 of [RFC4422].\n\n   As with any other client response, this initial client response MUST\n   be encoded as defined in Section 4 of [RFC4648].  It also MUST be\n   transmitted outside of a quoted string or literal.  To send a zero-\n   length initial response, the client MUST send a single pad character\n   (\"=\").  This indicates that the response is present, but is a zero-\n   length string.\n\n   When decoding the BASE64 [RFC4648] data in the initial client\n   response, decoding errors MUST be treated as IMAP [RFC3501] would\n   handle them in any normal SASL client response.  In particular, the\n   server should check for any characters not explicitly allowed by the\n   BASE64 alphabet, as well as any sequence of BASE64 characters that\n   contains the pad character ('=') anywhere other than the end of the\n   string (e.g., \"=AAA\" and \"AAA=BBB\" are not allowed).\n\n   If the client uses an initial response with a SASL mechanism that\n   does not support an initial response, the server MUST reject the\n   command with a tagged BAD response.\n\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 2]\n\f\nRFC 4959       IMAP Ext for SASL Initial Client Response  September 2007\n\n\n   Note: support and use of the initial client response is optional for\n   both clients and servers.  Servers that implement this extension MUST\n   support clients that omit the initial client response, and clients\n   that implement this extension MUST NOT send an initial client\n   response to servers that do not advertise the SASL-IR capability.  In\n   such a situation, clients MUST fall back to an IMAP [RFC3501]\n   compatible mode.\n\n   If either the client or the server do not support the SASL-IR\n   capability, a mechanism which uses an initial client response is\n   negotiated using the challenge/response exchange described in\n   [RFC3501], with an initial zero-length server challenge.\n\n4.  Examples\n\n   The following is an example authentication using the PLAIN (see\n   [RFC4616]) SASL mechanism (under a TLS protection layer, see\n   [RFC4346]) and an initial client response:\n\n            ... client connects to server and negotiates a TLS\n           protection layer ...\n        C: C01 CAPABILITY\n        S: * CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN\n        S: C01 OK Completed\n        C: A01 AUTHENTICATE PLAIN dGVzdAB0ZXN0AHRlc3Q=\n        S: A01 OK Success (tls protection)\n\n   Note that even when a server supports this extension, the following\n   negotiation (which does not use the initial response) is still valid\n   and MUST be supported by the server:\n\n            ... client connects to server and negotiates a TLS\n           protection layer ...\n        C: C01 CAPABILITY\n        S: * CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN\n        S: C01 OK Completed\n        C: A01 AUTHENTICATE PLAIN\n            (note that there is a space following the \"+\" in the\n           following line)\n        S: +\n        C: dGVzdAB0ZXN0AHRlc3Q=\n        S: A01 OK Success (tls protection)\n\n   The following is an example authentication using the SASL EXTERNAL\n   mechanism (defined in [RFC4422]) under a TLS protection layer (see\n   [RFC4346]) and an empty initial client response:\n\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 3]\n\f\nRFC 4959       IMAP Ext for SASL Initial Client Response  September 2007\n\n\n            ... client connects to server and negotiates a TLS\n           protection layer ...\n        C: C01 CAPABILITY\n        S: * CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN AUTH=EXTERNAL\n        S: C01 OK Completed\n        C: A01 AUTHENTICATE EXTERNAL =\n        S: A01 OK Success (tls protection)\n\n   This is in contrast with the handling of such a situation when an\n   initial response is omitted:\n\n         ... client connects to server and negotiates a TLS protection\n           layer ...\n        C: C01 CAPABILITY\n        S: * CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN AUTH=EXTERNAL\n        S: C01 OK Completed\n        C: A01 AUTHENTICATE EXTERNAL\n            (note that there is a space following the \"+\" in the\n           following line)\n        S: +\n        C:\n        S: A01 OK Success (tls protection)\n\n5.  IANA Considerations\n\n   The IANA has added SASL-IR to the IMAP4 Capabilities Registry.\n\n6.  Security Considerations\n\n   The extension defined in this document is subject to many of the\n   Security Considerations defined in [RFC3501] and [RFC4422].\n\n   Server implementations MUST treat the omission of an initial client\n   response from the AUTHENTICATE command as defined by [RFC3501] (as if\n   this extension did not exist).\n\n   Although [RFC3501] has no express line length limitations, some\n   implementations choose to enforce them anyway.  Such implementations\n   MUST be aware that the addition of the initial response parameter to\n   AUTHENTICATE may increase the maximum line length that IMAP parsers\n   may expect to support.  Server implementations MUST be able to\n   receive the largest possible initial client response that their\n   supported mechanisms might receive.\n\n\n\n\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 4]\n\f\nRFC 4959       IMAP Ext for SASL Initial Client Response  September 2007\n\n\n7.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form [RFC4234] notation.  [RFC3501] defines the non-terminals\n   capability, auth-type, and base64.\n\n      capability    =/ \"SASL-IR\"\n\n      authenticate  = \"AUTHENTICATE\" SP auth-type [SP (base64 / \"=\")]\n                      *(CRLF base64)\n                      ;;redefine AUTHENTICATE from [RFC3501]\n\n8.  Acknowledgments\n\n   The authors would like to acknowledge the contributions of Ken\n   Murchison and Mark Crispin, along with the rest of the IMAPEXT\n   Working Group for their assistance in reviewing this document.\n\n   Alexey Melnikov and Cyrus Daboo also had some early discussions about\n   this extension.\n\n9.  References\n\n9.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 4234, October 2005.\n\n   [RFC4422]  Melnikov, A. and  K. Zeilenga, \"Simple Authentication and\n              Security Layer (SASL)\", RFC 4422, June 2006.\n\n   [RFC4648]  Josefsson, S., \"The Base16, Base32, and Base64 Data\n              Encodings\", RFC 4648, October 2006.\n\n9.2.  Informative References\n\n   [RFC4616]  Zeilenga, K., \"The PLAIN Simple Authentication and\n              Security Layer (SASL) Mechanism\", RFC 4616, August 2006.\n\n   [RFC4346]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.1\", RFC 4346, April 2006.\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 5]\n\f\nRFC 4959       IMAP Ext for SASL Initial Client Response  September 2007\n\n\nAuthors' Addresses\n\n   Robert Siemborski\n   Google, Inc.\n   1600 Ampitheatre Parkway\n   Mountain View, CA 94043\n\n   Phone: +1 650 623 6925\n   EMail: robsiemb@google.com\n\n\n   Arnt Gulbrandsen\n   Oryx Mail Systems GmbH\n   Schweppermannstr. 8\n   D-81671 Muenchen\n   Germany\n\n   EMail: arnt@oryx.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 6]\n\f\nRFC 4959       IMAP Ext for SASL Initial Client Response  September 2007\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2007).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nSiemborski & Gulbrandsen  Standards Track                       [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc4978.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                     A. Gulbrandsen\nRequest for Comments: 4978                        Oryx Mail Systems GmbH\nCategory: Standards Track                                    August 2007\n\n\n                      The IMAP COMPRESS Extension\n\nStatus of this Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   The COMPRESS extension allows an IMAP connection to be effectively\n   and efficiently compressed.\n\n   Table of Contents\n\n   1. Introduction and Overview .......................................2\n   2. Conventions Used in This Document ...............................2\n   3. The COMPRESS Command ............................................3\n   4. Compression Efficiency ..........................................4\n   5. Formal Syntax ...................................................6\n   6. Security Considerations .........................................6\n   7. IANA Considerations .............................................6\n   8. Acknowledgements ................................................7\n   9. References ......................................................7\n      9.1. Normative References .......................................7\n      9.2. Informative References .....................................7\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 1]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n1.  Introduction and Overview\n\n   A server which supports the COMPRESS extension indicates this with\n   one or more capability names consisting of \"COMPRESS=\" followed by a\n   supported compression algorithm name as described in this document.\n\n   The goal of COMPRESS is to reduce the bandwidth usage of IMAP.\n\n   Compared to PPP compression (see [RFC1962]) and modem-based\n   compression (see [MNP] and [V42BIS]), COMPRESS offers much better\n   compression efficiency.  COMPRESS can be used together with Transport\n   Security Layer (TLS) [RFC4346], Simple Authentication and Security\n   layer (SASL) encryption, Virtual Private Networks (VPNs), etc.\n   Compared to TLS compression [RFC3749], COMPRESS has the following\n   (dis)advantages:\n\n   - COMPRESS can be implemented easily both by IMAP servers and\n     clients.\n\n   - IMAP COMPRESS benefits from an intimate knowledge of the IMAP\n     protocol's state machine, allowing for dynamic and aggressive\n     optimization of the underlying compression algorithm's parameters.\n\n   - When the TLS layer implements compression, any protocol using that\n     layer can transparently benefit from that compression (e.g., SMTP\n     and IMAP).  COMPRESS is specific to IMAP.\n\n   In order to increase interoperation, it is desirable to have as few\n   different compression algorithms as possible, so this document\n   specifies only one.  The DEFLATE algorithm (defined in [RFC1951]) is\n   standard, widely available and fairly efficient, so it is the only\n   algorithm defined by this document.\n\n   In order to increase interoperation, IMAP servers that advertise this\n   extension SHOULD also advertise the TLS DEFLATE compression mechanism\n   as defined in [RFC3749].  IMAP clients MAY use either COMPRESS or TLS\n   compression, however, if the client and server support both, it is\n   RECOMMENDED that the client choose TLS compression.\n\n   The extension adds one new command (COMPRESS) and no new responses.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   Formal syntax is defined by [RFC4234] as modified by [RFC3501].\n\n\n\nGulbrandsen                 Standards Track                     [Page 2]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n   In the examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively. \"[...]\" denotes elision.\n\n3.  The COMPRESS Command\n\n   Arguments: Name of compression mechanism: \"DEFLATE\".\n\n   Responses: None\n\n   Result: OK The server will compress its responses and expects the\n              client to compress its commands.\n           NO Compression is already active via another layer.\n          BAD Command unknown, invalid or unknown argument, or COMPRESS\n              already active.\n\n   The COMPRESS command instructs the server to use the named\n   compression mechanism (\"DEFLATE\" is the only one defined) for all\n   commands and/or responses after COMPRESS.\n\n   The client MUST NOT send any further commands until it has seen the\n   result of COMPRESS.  If the response was OK, the client MUST compress\n   starting with the first command after COMPRESS.  If the server\n   response was BAD or NO, the client MUST NOT turn on compression.\n\n   If the server responds NO because it knows that the same mechanism is\n   active already (e.g., because TLS has negotiated the same mechanism),\n   it MUST send COMPRESSIONACTIVE as resp-text-code (see [RFC3501],\n   Section 7.1), and the resp-text SHOULD say which layer compresses.\n\n   If the server issues an OK response, the server MUST compress\n   starting immediately after the CRLF which ends the tagged OK\n   response.  (Responses issued by the server before the OK response\n   will, of course, still be uncompressed.)  If the server issues a BAD\n   or NO response, the server MUST NOT turn on compression.\n\n   For DEFLATE (as for many other compression mechanisms), the\n   compressor can trade speed against quality.  When decompressing there\n   isn't much of a tradeoff.  Consequently, the client and server are\n   both free to pick the best reasonable rate of compression for the\n   data they send.\n\n   When COMPRESS is combined with TLS (see [RFC4346]) or SASL (see\n   [RFC4422]) security layers, the sending order of the three extensions\n   MUST be first COMPRESS, then SASL, and finally TLS.  That is, before\n   data is transmitted it is first compressed.  Second, if a SASL\n   security layer has been negotiated, the compressed data is then\n   signed and/or encrypted accordingly.  Third, if a TLS security layer\n   has been negotiated, the data from the previous step is signed and/or\n\n\n\nGulbrandsen                 Standards Track                     [Page 3]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n   encrypted accordingly.  When receiving data, the processing order\n   MUST be reversed.  This ensures that before sending, data is\n   compressed before it is encrypted, independent of the order in which\n   the client issues COMPRESS, AUTHENTICATE, and STARTTLS.\n\n   The following example illustrates how commands and responses are\n   compressed during a simple login sequence:\n\n        S: * OK [CAPABILITY IMAP4REV1 STARTTLS COMPRESS=DEFLATE]\n        C: a starttls\n        S: a OK TLS active\n\n            From this point on, everything is encrypted.\n\n        C: b login arnt tnra\n        S: b OK Logged in as arnt\n        C: c compress deflate\n        S: d OK DEFLATE active\n\n            From this point on, everything is compressed before being\n            encrypted.\n\n   The following example demonstrates how a server may refuse to\n   compress twice:\n\n        S: * OK [CAPABILITY IMAP4REV1 STARTTLS COMPRESS=DEFLATE]\n        [...]\n        C: c compress deflate\n        S: c NO [COMPRESSIONACTIVE] DEFLATE active via TLS\n\n4.  Compression Efficiency\n\n   This section is informative, not normative.\n\n   IMAP poses some unusual problems for a compression layer.\n\n   Upstream is fairly simple.  Most IMAP clients send the same few\n   commands again and again, so any compression algorithm that can\n   exploit repetition works efficiently.  The APPEND command is an\n   exception; clients that send many APPEND commands may want to\n   surround large literals with flushes in the same way as is\n   recommended for servers later in this section.\n\n   Downstream has the unusual property that several kinds of data are\n   sent, confusing all dictionary-based compression algorithms.\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 4]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n   One type is IMAP responses.  These are highly compressible; zlib\n   using its least CPU-intensive setting compresses typical responses to\n   25-40% of their original size.\n\n   Another type is email headers.  These are equally compressible, and\n   benefit from using the same dictionary as the IMAP responses.\n\n   A third type is email body text.  Text is usually fairly short and\n   includes much ASCII, so the same compression dictionary will do a\n   good job here, too.  When multiple messages in the same thread are\n   read at the same time, quoted lines etc. can often be compressed\n   almost to zero.\n\n   Finally, attachments (non-text email bodies) are transmitted, either\n   in binary form or encoded with base-64.\n\n   When attachments are retrieved in binary form, DEFLATE may be able to\n   compress them, but the format of the attachment is usually not IMAP-\n   like, so the dictionary built while compressing IMAP does not help.\n   The compressor has to adapt its dictionary from IMAP to the\n   attachment's format, and then back.  A few file formats aren't\n   compressible at all using deflate, e.g., .gz, .zip, and .jpg files.\n\n   When attachments are retrieved in base-64 form, the same problems\n   apply, but the base-64 encoding adds another problem.  8-bit\n   compression algorithms such as deflate work well on 8-bit file\n   formats, however base-64 turns a file into something resembling 6-bit\n   bytes, hiding most of the 8-bit file format from the compressor.\n\n   When using the zlib library (see [RFC1951]), the functions\n   deflateInit2(), deflate(), inflateInit2(), and inflate() suffice to\n   implement this extension.  The windowBits value must be in the range\n   -8 to -15, or else deflateInit2() uses the wrong format.\n   deflateParams() can be used to improve compression rate and resource\n   use.  The Z_FULL_FLUSH argument to deflate() can be used to clear the\n   dictionary (the receiving peer does not need to do anything).\n\n   A client can improve downstream compression by implementing BINARY\n   (defined in [RFC3516]) and using FETCH BINARY instead of FETCH BODY.\n   In the author's experience, the improvement ranges from 5% to 40%\n   depending on the attachment being downloaded.\n\n   A server can improve downstream compression if it hints to the\n   compressor that the data type is about to change strongly, e.g., by\n   sending a Z_FULL_FLUSH at the start and end of large non-text\n   literals (before and after '*CHAR8' in the definition of literal in\n   RFC 3501, page 86).  Small literals are best left alone.  A possible\n   boundary is 5k.\n\n\n\nGulbrandsen                 Standards Track                     [Page 5]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n   A server can improve the CPU efficiency both of the server and the\n   client if it adjusts the compression level (e.g., using the\n   deflateParams() function in zlib) at these points, to avoid trying to\n   compress incompressible attachments.  A very simple strategy is to\n   change the level to 0 at the start of a literal provided the first\n   two bytes are either 0x1F 0x8B (as in deflate-compressed files) or\n   0xFF 0xD8 (JPEG), and to keep it at 1-5 the rest of the time.  More\n   complex strategies are possible.\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC4234].  This syntax augments\n   the grammar specified in [RFC3501].  [RFC4234] defines SP and\n   [RFC3501] defines command-auth, capability, and resp-text-code.\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n       command-auth =/ compress\n\n       compress    = \"COMPRESS\" SP algorithm\n\n       capability  =/ \"COMPRESS=\" algorithm\n                     ;; multiple COMPRESS capabilities allowed\n\n       algorithm   = \"DEFLATE\"\n\n       resp-text-code =/ \"COMPRESSIONACTIVE\"\n\n   Note that due the syntax of capability names, future algorithm names\n   must be atoms.\n\n6.  Security Considerations\n\n   As for TLS compression [RFC3749].\n\n7.  IANA Considerations\n\n   The IANA has added COMPRESS=DEFLATE to the list of IMAP capabilities.\n\n\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 6]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n8.  Acknowledgements\n\n   Eric Burger, Dave Cridland, Tony Finch, Ned Freed, Philip Guenther,\n   Randall Gellens, Tony Hansen, Cullen Jennings, Stephane Maes, Alexey\n   Melnikov, Lyndon Nerenberg, and Zoltan Ordogh have all helped with\n   this document.\n\n   The author would also like to thank various people in the rooms at\n   meetings, whose help is real, but not reflected in the author's\n   mailbox.\n\n9.  References\n\n9.1.  Normative References\n\n   [RFC1951]  Deutsch, P., \"DEFLATE Compressed Data Format Specification\n              version 1.3\", RFC 1951, May 1996.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 4234, October 2005.\n\n9.2.  Informative References\n\n   [RFC1962]  Rand, D., \"The PPP Compression Control Protocol (CCP)\",\n              RFC 1962, June 1996.\n\n   [RFC3516]  Nerenberg, L., \"IMAP4 Binary Content Extension\", RFC 3516,\n              April 2003.\n\n   [RFC3749]  Hollenbeck, S., \"Transport Layer Security Protocol\n              Compression Methods\", RFC 3749, May 2004.\n\n   [RFC4346]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.1\", RFC 4346, April 2006.\n\n   [RFC4422]  Melnikov, A. and  K. Zeilenga, \"Simple Authentication and\n              Security Layer (SASL)\", RFC 4422, June 2006.\n\n   [V42BIS]   ITU, \"V.42bis: Data compression procedures for data\n              circuit-terminating equipment (DCE) using error correction\n              procedures\", http://www.itu.int/rec/T-REC-V.42bis, January\n              1990.\n\n\n\nGulbrandsen                 Standards Track                     [Page 7]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\n   [MNP]      Gilbert Held, \"The Complete Modem Reference\", Second\n              Edition, Wiley Professional Computing, ISBN 0-471-00852-4,\n              May 1994.\n\nAuthor's Address\n\n    Arnt Gulbrandsen\n    Oryx Mail Systems GmbH\n    Schweppermannstr. 8\n    D-81671 Muenchen\n    Germany\n\n    Fax: +49 89 4502 9758\n    EMail: arnt@oryx.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 8]\n\f\nRFC 4978              The IMAP COMPRESS Extension            August 2007\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2007).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc5032.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                     E. Burger, Ed.\nRequest for Comments: 5032                             BEA Systems, Inc.\nUpdates: 3501                                             September 2007\nCategory: Standards Track\n\n\n              WITHIN Search Extension to the IMAP Protocol\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   This document describes the WITHIN extension to IMAP SEARCH.  IMAP\n   SEARCH returns messages whose internal date is within or outside a\n   specified interval.  The mechanism described here, OLDER and YOUNGER,\n   differs from BEFORE and SINCE in that the client specifies an\n   interval, rather than a date.  WITHIN is useful for persistent\n   searches where either the device does not have the capacity to\n   perform the search at regular intervals or the network is of limited\n   bandwidth and thus there is a desire to reduce network traffic from\n   sending repeated requests and redundant responses.\n\n1.  Introduction\n\n   This extension exposes two new search keys, OLDER and YOUNGER, each\n   of which takes a non-zero integer argument corresponding to a time\n   interval in seconds.  The server calculates the time of interest by\n   subtracting the time interval the client presents from the current\n   date and time of the server.  The server then either returns messages\n   older or younger than the resultant time and date, depending on the\n   search key used.\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [RFC2119].\n\n\n\n\n\nBurger                      Standards Track                     [Page 1]\n\f\nRFC 5032                     Search Within                September 2007\n\n\n   When describing the general syntax, we omit some definitions, as RFC\n   3501 [RFC3501] defines them.\n\n2.  Protocol Operation\n\n   An IMAP4 server that supports the capability described here MUST\n   return \"WITHIN\" as one of the server supported capabilities in the\n   CAPABILITY command.\n\n   For both the OLDER and YOUNGER search keys, the server calculates a\n   target date and time by subtracting the interval, specified in\n   seconds, from the current date and time of the server.  The server\n   then compares the target time with the INTERNALDATE of the message,\n   as specified in IMAP [RFC3501].  For OLDER, messages match if the\n   INTERNALDATE is less recent than or equal to the target time.  For\n   YOUNGER, messages match if the INTERNALDATE is more recent than or\n   equal to the target time.\n\n   Both OLDER and YOUNGER searches always result in exact matching, to\n   the resolution of a second.  However, if one is doing a dynamic\n   evaluation, for example, in a context [CONTEXT], one needs to be\n   aware that the server might perform the evaluation periodically.\n   Thus, the server may delay the updates.  Clients MUST be aware that\n   dynamic search results may not reflect the current state of the\n   mailbox.  If the client needs a search result that reflects the\n   current state of the mailbox, we RECOMMEND that the client issue a\n   new search.\n\n3.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation.  Elements not defined here can be found in the\n   formal syntax of ABNF [RFC4234] and IMAP [RFC3501].\n\n   This document extends RFC 3501 [RFC3501] with two new search keys:\n   OLDER <interval> and YOUNGER <interval>.\n\n   search-key =/ ( \"OLDER\" / \"YOUNGER\" ) SP nz-number\n                  ; search-key defined in RFC 3501\n\n4.  Example\n\n   C: a1 SEARCH UNSEEN YOUNGER 259200\n   S: a1 * SEARCH 4 8 15 16 23 42\n\n   Search for all unseen messages within the past 3 days, or 259200\n   seconds, according to the server's current time.\n\n\n\n\nBurger                      Standards Track                     [Page 2]\n\f\nRFC 5032                     Search Within                September 2007\n\n\n5.  Security Considerations\n\n   The WITHIN extension does not raise any security considerations that\n   are not present in the base protocol.  Considerations are the same as\n   for IMAP [RFC3501].\n\n6.  IANA Considerations\n\n   Per the IMAP RFC [RFC3501], registration of a new IMAP capability in\n   the IMAP Capability registry requires the publication of a standards-\n   track RFC or an IESG approved experimental RFC.  The registry is\n   currently located at\n   <http://www.iana.org/assignments/imap4-capabilities>.  This\n   standards-track document defines the WITHIN IMAP capability.  IANA\n   has added this extension to the IANA IMAP Capability registry.\n\n7.  References\n\n7.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", RFC 2119, BCP 14, March 1997.\n\n   [RFC3501]  Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", RFC 4234, October 2005.\n\n7.2.  Informative References\n\n   [CONTEXT]  Melnikov, D. and C. King, \"Contexts for IMAP4\", Work\n              in Progress, May 2006.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBurger                      Standards Track                     [Page 3]\n\f\nRFC 5032                     Search Within                September 2007\n\n\nAppendix A.  Contributors\n\n   Stephane Maes and Ray Cromwell wrote the original version of this\n   document as part of P-IMAP, as well as the first versions for the\n   IETF.  From an attribution perspective, they are clearly authors.\n\nAppendix B.  Acknowledgements\n\n   The authors want to thank all who have contributed key insight and\n   who have extensively reviewed and discussed the concepts of LPSEARCH.\n   They also thank the authors of its early introduction in P-IMAP.\n\n   We also want to give a special thanks to Arnt Gilbrandsen, Ken\n   Murchison, Zoltan Ordogh, and most especially Dave Cridland for their\n   review and suggestions.  A special thank you goes to Alexey Melnikov\n   for his choice submission of text.\n\nAuthor's Address\n\n   Eric W. Burger (editor)\n   BEA Systems, Inc.\n   USA\n\n   EMail: eric.burger@bea.com\n   URI:   http://www.standardstrack.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBurger                      Standards Track                     [Page 4]\n\f\nRFC 5032                     Search Within                September 2007\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2007).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nBurger                      Standards Track                     [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc5161.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                A. Gulbrandsen, Ed.\nRequest for Comments: 5161                        Oryx Mail Systems GmbH\nCategory: Standards Track                               A. Melnikov, Ed.\n                                                           Isode Limited\n                                                              March 2008\n\n\n                       The IMAP ENABLE Extension\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   Most IMAP extensions are used by the client when it wants to and the\n   server supports it.  However, a few extensions require the server to\n   know whether a client supports that extension.  The ENABLE extension\n   allows an IMAP client to say which extensions it supports.\n\n1.  Overview\n\n   Several IMAP extensions allow the server to return unsolicited\n   responses specific to these extensions in certain circumstances.\n   However, servers cannot send those unsolicited responses until they\n   know that the clients support such extensions and thus won't choke on\n   the extension response data.\n\n   Up until now, extensions have typically stated that a server cannot\n   send the unsolicited responses until after the client has used a\n   command with the extension data (i.e., at that point the server knows\n   the client is aware of the extension).  CONDSTORE ([RFC4551]),\n   ANNOTATE ([ANNOTATE]), and some extensions under consideration at the\n   moment use various commands to enable server extensions.  For\n   example, CONDSTORE uses a SELECT or FETCH parameter, and ANNOTATE\n   uses a side effect of FETCH.\n\n   The ENABLE extension provides an explicit indication from the client\n   that it supports particular extensions.  This is done using a new\n   ENABLE command.\n\n   An IMAP server that supports ENABLE advertises this by including the\n   word ENABLE in its capability list.\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 1]\n\f\nRFC 5161               The IMAP ENABLE Extension              March 2008\n\n\n   Most IMAP extensions do not require the client to enable the\n   extension in any way.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   Formal syntax is defined by [RFC5234] and [RFC3501].\n\n   Example lines prefaced by \"C:\" are sent by the client and ones\n   prefaced by \"S:\" by the server.  The five characters [...] means that\n   something has been elided.\n\n3.  Protocol Changes\n\n3.1.  The ENABLE Command\n\n   Arguments: capability names\n\n   Result:    OK: Relevant capabilities enabled\n              BAD: No arguments, or syntax error in an argument\n\n   The ENABLE command takes a list of capability names, and requests the\n   server to enable the named extensions.  Once enabled using ENABLE,\n   each extension remains active until the IMAP connection is closed.\n   For each argument, the server does the following:\n\n   - If the argument is not an extension known to the server, the server\n     MUST ignore the argument.\n\n   - If the argument is an extension known to the server, and it is not\n     specifically permitted to be enabled using ENABLE, the server MUST\n     ignore the argument.  (Note that knowing about an extension doesn't\n     necessarily imply supporting that extension.)\n\n   - If the argument is an extension that is supported by the server and\n     that needs to be enabled, the server MUST enable the extension for\n     the duration of the connection.  At present, this applies only to\n     CONDSTORE ([RFC4551]).  Note that once an extension is enabled,\n     there is no way to disable it.\n\n   If the ENABLE command is successful, the server MUST send an untagged\n   ENABLED response (see Section 3.2).\n\n\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 2]\n\f\nRFC 5161               The IMAP ENABLE Extension              March 2008\n\n\n   Clients SHOULD only include extensions that need to be enabled by the\n   server.  At the time of publication, CONDSTORE is the only such\n   extension (i.e., ENABLE CONDSTORE is an additional \"CONDSTORE\n   enabling command\" as defined in [RFC4551]).  Future RFCs may add to\n   this list.\n\n   The ENABLE command is only valid in the authenticated state (see\n   [RFC3501]), before any mailbox is selected.  Clients MUST NOT issue\n   ENABLE once they SELECT/EXAMINE a mailbox; however, server\n   implementations don't have to check that no mailbox is selected or\n   was previously selected during the duration of a connection.\n\n   The ENABLE command can be issued multiple times in a session.  It is\n   additive; i.e., \"ENABLE a b\", followed by \"ENABLE c\" is the same as a\n   single command \"ENABLE a b c\".  When multiple ENABLE commands are\n   issued, each corresponding ENABLED response SHOULD only contain\n   extensions enabled by the corresponding ENABLE command.\n\n   There are no limitations on pipelining ENABLE.  For example, it is\n   possible to send ENABLE and then immediately SELECT, or a LOGIN\n   immediately followed by ENABLE.\n\n   The server MUST NOT change the CAPABILITY list as a result of\n   executing ENABLE; i.e., a CAPABILITY command issued right after an\n   ENABLE command MUST list the same capabilities as a CAPABILITY\n   command issued before the ENABLE command.  This is demonstrated in\n   the following example:\n\n      C: t1 CAPABILITY\n      S: * CAPABILITY IMAP4rev1 ID LITERAL+ ENABLE X-GOOD-IDEA\n      S: t1 OK foo\n      C: t2 ENABLE CONDSTORE X-GOOD-IDEA\n      S: * ENABLED X-GOOD-IDEA\n      S: t2 OK foo\n      C: t3 CAPABILITY\n      S: * CAPABILITY IMAP4rev1 ID LITERAL+ ENABLE X-GOOD-IDEA\n      S: t3 OK foo again\n\n   In the following example, the client enables CONDSTORE:\n\n      C: a1 ENABLE CONDSTORE\n      S: * ENABLED CONDSTORE\n      S: a1 OK Conditional Store enabled\n\n\n\n\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 3]\n\f\nRFC 5161               The IMAP ENABLE Extension              March 2008\n\n\n3.2.  The ENABLED Response\n\n   Contents:   capability listing\n\n   The ENABLED response occurs as a result of an ENABLE command.  The\n   capability listing contains a space-separated listing of capability\n   names that the server supports and that were successfully enabled.\n   The ENABLED response may contain no capabilities, which means that no\n   extensions listed by the client were successfully enabled.\n\n3.3.  Note to Designers of Extensions That May Use the ENABLE Command\n\n   Designers of IMAP extensions are discouraged from creating extensions\n   that require ENABLE unless there is no good alternative design.\n   Specifically, extensions that cause potentially incompatible behavior\n   changes to deployed server responses (and thus benefit from ENABLE)\n   have a higher complexity cost than extensions that do not.\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234] including the core\n   rules in Appendix B.1.  [RFC3501] defines the non-terminals\n   \"capability\" and \"command-any\".\n\n   Except as noted otherwise, all alphabetic characters are\n   case-insensitive.  The use of upper or lower case characters to\n   define token strings is for editorial clarity only.  Implementations\n   MUST accept these strings in a case-insensitive fashion.\n\n      capability    =/ \"ENABLE\"\n\n      command-any   =/ \"ENABLE\" 1*(SP capability)\n\n      response-data =/ \"*\" SP enable-data CRLF\n\n      enable-data   = \"ENABLED\" *(SP capability)\n\n5.  Security Considerations\n\n   It is believed that this extension doesn't add any security\n   considerations that are not already present in the base IMAP protocol\n   [RFC3501].\n\n6.  IANA Considerations\n\n   The IANA has added ENABLE to the IMAP4 Capabilities Registry.\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 4]\n\f\nRFC 5161               The IMAP ENABLE Extension              March 2008\n\n\n7.  Acknowledgments\n\n   The editors would like to thank Randy Gellens, Chris Newman, Peter\n   Coates, Dave Cridland, Mark Crispin, Ned Freed, Dan Karp, Cyrus\n   Daboo, Ken Murchison, and Eric Burger for comments and corrections.\n   However, this doesn't necessarily mean that they endorse this\n   extension, agree with all details, or are responsible for errors\n   introduced by the editors.\n\n8.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC5234]  Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n   [RFC4551]  Melnikov, A. and S. Hole, \"IMAP Extension for Conditional\n              STORE Operation or Quick Flag Changes Resynchronization\",\n              RFC 4551, June 2006.\n\n9.  Informative References\n\n   [ANNOTATE] Daboo, C. and R. Gellens, \"IMAP ANNOTATE Extension\", Work\n              in Progress, August 2006.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 5]\n\f\nRFC 5161               The IMAP ENABLE Extension              March 2008\n\n\nEditors' Addresses\n\n   Arnt Gulbrandsen\n   Oryx Mail Systems GmbH\n   Schweppermannstr. 8\n   D-81671 Muenchen\n   Germany\n\n   Fax: +49 89 4502 9758\n   EMail: arnt@oryx.com\n\n\n   Alexey Melnikov\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 6]\n\f\nRFC 5161               The IMAP ENABLE Extension              March 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen & Melnikov      Standards Track                     [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc5162.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 5162                                   D. Cridland\nCategory: Standards Track                                      Isode Ltd\n                                                               C. Wilson\n                                                                   Nokia\n                                                              March 2008\n\n\n          IMAP4 Extensions for Quick Mailbox Resynchronization\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   This document defines an IMAP4 extension, which gives an IMAP client\n   the ability to quickly resynchronize any previously opened mailbox as\n   part of the SELECT command, without the need for server-side state or\n   additional client round-trips.  This extension also introduces a new\n   response that allows for a more compact representation of a list of\n   expunged messages (and always includes the Unique Identifiers (UIDs)\n   expunged).\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                     [Page 1]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\nTable of Contents\n\n   1.  Introduction and Overview  . . . . . . . . . . . . . . . . . .  2\n   2.  Requirements Notation  . . . . . . . . . . . . . . . . . . . .  4\n   3.  IMAP Protocol Changes  . . . . . . . . . . . . . . . . . . . .  4\n     3.1.  QRESYNC Parameter to SELECT/EXAMINE  . . . . . . . . . . .  4\n     3.2.  VANISHED UID FETCH Modifier  . . . . . . . . . . . . . . .  8\n     3.3.  EXPUNGE Command  . . . . . . . . . . . . . . . . . . . . . 10\n     3.4.  CLOSE Command  . . . . . . . . . . . . . . . . . . . . . . 11\n     3.5.  UID EXPUNGE Command  . . . . . . . . . . . . . . . . . . . 11\n     3.6.  VANISHED Response  . . . . . . . . . . . . . . . . . . . . 12\n     3.7.  CLOSED Response Code . . . . . . . . . . . . . . . . . . . 15\n   4.  Server Implementation Considerations . . . . . . . . . . . . . 15\n     4.1.  Server Implementations That Don't Store Extra State  . . . 15\n     4.2.  Server Implementations Storing Minimal State . . . . . . . 16\n     4.3.  Additional State Required on the Server  . . . . . . . . . 16\n   5.  Updated Synchronization Sequence . . . . . . . . . . . . . . . 17\n   6.  Formal Syntax  . . . . . . . . . . . . . . . . . . . . . . . . 19\n   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 20\n   8.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 21\n   9.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 21\n   10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21\n     10.1. Normative References . . . . . . . . . . . . . . . . . . . 21\n     10.2. Informative References . . . . . . . . . . . . . . . . . . 22\n\n1.  Introduction and Overview\n\n   The [CONDSTORE] extension gives a disconnected client the ability to\n   quickly resynchronize IMAP flag changes for previously seen messages.\n   This can be done using the CHANGEDSINCE FETCH modifier once a mailbox\n   is opened.  In order for the client to discover which messages have\n   been expunged, the client still has to issue a UID FETCH or a UID\n   SEARCH command.  This document defines an extension to [CONDSTORE]\n   that allows a reconnecting client to perform full resynchronization,\n   including discovery of expunged messages, in a single round-trip.\n   This extension also introduces a new response, VANISHED, that allows\n   for a more compact representation of a list of expunged messages.\n\n   This extension can be useful for mobile clients that can experience\n   frequent disconnects caused by environmental factors (battery life,\n   signal strength, etc.).  Such clients need a way to quickly reconnect\n   to the IMAP server, while minimizing delay experienced by the user as\n   well as the amount of traffic (and hence the expense) generated by\n   resynchronization.\n\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                     [Page 2]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   By extending the SELECT command to perform the additional\n   resynchronization, this also allows clients to reduce concurrent\n   connections to the IMAP server held purely for the sake of avoiding\n   the resynchronization.\n\n   The quick resync IMAP extension is present if an IMAP4 server returns\n   \"QRESYNC\" as one of the supported capabilities to the CAPABILITY\n   command.\n\n   Servers supporting this extension MUST implement and advertise\n   support for the [ENABLE] IMAP extension.  Also, the presence of the\n   \"QRESYNC\" capability implies support for the [CONDSTORE] IMAP\n   extension even if the CONDSTORE capability isn't advertised.  A\n   server compliant with this specification is REQUIREd to support\n   \"ENABLE QRESYNC\" and \"ENABLE QRESYNC CONDSTORE\" (which are \"CONDSTORE\n   enabling commands\", as defined in [CONDSTORE], and have identical\n   results), but there is no requirement for a compliant server to\n   support \"ENABLE CONDSTORE\" by itself.  The \"ENABLE QRESYNC\"/\"ENABLE\n   QRESYNC CONDSTORE\" command also tells the server that it SHOULD start\n   sending VANISHED responses (see Section 3.6) instead of EXPUNGE\n   responses.  This change remains in effect until the connection is\n   closed.\n\n   For compatibility with clients that only support the [CONDSTORE] IMAP\n   extension, servers SHOULD advertise CONDSTORE in the CAPABILITY\n   response as well.\n\n   A client making use of this extension MUST issue \"ENABLE QRESYNC\"\n   once it is authenticated.  A server MUST respond with a tagged BAD\n   response if the QRESYNC parameter to the SELECT/EXAMINE command or\n   the VANISHED UID FETCH modifier is specified and the client hasn't\n   issued \"ENABLE QRESYNC\" in the current connection.\n\n   This document puts additional requirements on a server implementing\n   the [CONDSTORE] extension.  Each mailbox that supports persistent\n   storage of mod-sequences, i.e., for which the server has sent a\n   HIGHESTMODSEQ untagged OK response code on a successful SELECT/\n   EXAMINE, MUST increment the per-mailbox mod-sequence when one or more\n   messages are expunged due to EXPUNGE, UID EXPUNGE or CLOSE; the\n   server MUST associate the incremented mod-sequence with the UIDs of\n   the expunged messages.\n\n   A client that supports CONDSTORE but not this extension might\n   resynchronize a mailbox and discover that its HIGHESTMODSEQ has\n   increased from the value cached by the client.  If the increase is\n   only due to messages having been expunged since the client last\n   synchronized, the client is likely to send a FETCH ...  CHANGEDSINCE\n   command that returns no data.  Thus, a client that supports CONDSTORE\n\n\n\nMelnikov, et al.            Standards Track                     [Page 3]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   but not this extension might incur a penalty of an unneeded round-\n   trip when resynchronizing some mailboxes (those that have had\n   messages expunged but no flag changes since the last\n   synchronization).\n\n   This extra round-trip is only incurred by clients that support\n   CONDSTORE but not this extension, and only when a mailbox has had\n   messages expunged but no flag changes to non-expunged messages.\n   Since CONDSTORE is a relatively new extension, it is thought likely\n   that clients that support it will also support this extension.\n\n2.  Requirements Notation\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.  The five characters [...] means that something has been\n   elided.\n\n   Understanding of the IMAP message sequence numbers and UIDs and the\n   EXPUNGE response [RFC3501] is essential when reading this document.\n\n3.  IMAP Protocol Changes\n\n3.1.  QRESYNC Parameter to SELECT/EXAMINE\n\n   The Quick Resynchronization parameter to SELECT/EXAMINE commands has\n   four arguments:\n\n   o  the last known UIDVALIDITY,\n\n   o  the last known modification sequence,\n\n   o  the optional set of known UIDs, and\n\n   o  an optional parenthesized list of known sequence ranges and their\n      corresponding UIDs.\n\n   A server MUST respond with a tagged BAD response if the Quick\n   Resynchronization parameter to SELECT/EXAMINE command is specified\n   and the client hasn't issued \"ENABLE QRESYNC\" in the current\n   connection.\n\n\n\n\nMelnikov, et al.            Standards Track                     [Page 4]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   Before opening the specified mailbox, the server verifies all\n   arguments for syntactic validity.  If any parameter is not\n   syntactically valid, the server returns the tagged BAD response, and\n   the mailbox remains unselected.  Once the check is done, the server\n   opens the mailbox as if no SELECT/EXAMINE parameters are specified\n   (this is subject to processing of other parameters as defined in\n   other extensions).  In particular this means that the server MUST\n   send all untagged responses as specified in Sections 6.3.1 and 6.3.2\n   of [RFC3501].\n\n   After that, the server checks the UIDVALIDITY value provided by the\n   client.  If the provided UIDVALIDITY doesn't match the UIDVALIDITY\n   for the mailbox being opened, then the server MUST ignore the\n   remaining parameters and behave as if no dynamic message data\n   changed.  The client can discover this situation by comparing the\n   UIDVALIDITY value returned by the server.  This behavior allows the\n   client not to synchronize the mailbox or decide on the best\n   synchronization strategy.\n\n   Example: Attempting to resynchronize INBOX, but the provided\n            UIDVALIDITY parameter doesn't match the current UIDVALIDITY\n            value.\n\n   C: A02 SELECT INBOX (QRESYNC (67890007 20050715194045000\n            41,43:211,214:541))\n            S: * 464 EXISTS\n            S: * 3 RECENT\n            S: * OK [UIDVALIDITY 3857529045] UIDVALIDITY\n            S: * OK [UIDNEXT 550] Predicted next UID\n            S: * OK [HIGHESTMODSEQ 90060128194045007]\n            S: * OK [UNSEEN 12] Message 12 is first unseen\n            S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n            S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n            \\Deleted \\Seen \\*)] Permanent flags\n            S: A02 OK [READ-WRITE] Sorry, UIDVALIDITY mismatch\n\n   Modification Sequence and UID Parameters:\n\n   A server that doesn't support the persistent storage of mod-sequences\n   for the mailbox MUST send the OK untagged response including the\n   NOMODSEQ response code with every successful SELECT or EXAMINE\n   command, as described in [CONDSTORE].  Such a server doesn't need to\n   remember mod-sequences for expunged messages in the mailbox.  It MUST\n   ignore the remaining parameters and behave as if no dynamic message\n   data changed.\n\n   If the provided UIDVALIDITY matches that of the selected mailbox, the\n   server then checks the last known modification sequence.\n\n\n\nMelnikov, et al.            Standards Track                     [Page 5]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   The server sends the client any pending flag changes (using FETCH\n   responses that MUST contain UIDs) and expunges those that have\n   occurred in this mailbox since the provided modification sequence.\n\n   If the list of known UIDs was also provided, the server should only\n   report flag changes and expunges for the specified messages.  If the\n   client did not provide the list of UIDs, the server acts as if the\n   client has specified \"1:<maxuid>\", where <maxuid> is the mailbox's\n   UIDNEXT value minus 1.  If the mailbox is empty and never had any\n   messages in it, then lack of the list of UIDs is interpreted as an\n   empty set of UIDs.\n\n   Thus, the client can process just these pending events and need not\n   perform a full resynchronization.  Without the message sequence\n   number matching information, the result of this step is semantically\n   equivalent to the client issuing:\n   tag1 UID FETCH \"known-uids\" (FLAGS) (CHANGEDSINCE\n   \"mod-sequence-value\" VANISHED)\n\n   Example:\n      C: A03 SELECT INBOX (QRESYNC (67890007\n         90060115194045000 41,43:211,214:541))\n      S: * OK [CLOSED]\n      S: * 314 EXISTS\n      S: * 15 RECENT\n      S: * OK [UIDVALIDITY 67890007] UIDVALIDITY\n      S: * OK [UIDNEXT 567] Predicted next UID\n      S: * OK [HIGHESTMODSEQ 90060115205545359]\n      S: * OK [UNSEEN 7] There are some unseen messages in the mailbox\n      S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n      S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n         \\Deleted \\Seen \\*)] Permanent flags\n      S: * VANISHED (EARLIER) 41,43:116,118,120:211,214:540\n      S: * 49 FETCH (UID 117 FLAGS (\\Seen \\Answered) MODSEQ\n         (90060115194045001))\n      S: * 50 FETCH (UID 119 FLAGS (\\Draft $MDNSent) MODSEQ\n         (90060115194045308))\n      S: ...\n      S: * 100 FETCH (UID 541 FLAGS (\\Seen $Forwarded) MODSEQ\n         (90060115194045001))\n      S: A03 OK [READ-WRITE] mailbox selected\n\n   Message sequence match data:\n\n   A client MAY provide a parenthesized list of a message sequence set\n   and the corresponding UID sets.  Both MUST be provided in ascending\n   order.  The server uses this data to restrict the range for which it\n   provides expunged message information.\n\n\n\nMelnikov, et al.            Standards Track                     [Page 6]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   Conceptually, the client provides a small sample of sequence numbers\n   for which it knows the corresponding UIDs.  The server then compares\n   each sequence number and UID pair the client provides with the\n   current state of the mailbox.  If a pair matches, then the client\n   knows of any expunges up to, and including, the message, and thus\n   will not include that range in the VANISHED response, even if the\n   \"mod-sequence-value\" provided by the client is too old for the server\n   to have data of when those messages were expunged.\n\n   Thus, if the Nth message number in the first set in the list is 4,\n   and the Nth UID in the second set in the list is 8, and the mailbox's\n   fourth message has UID 8, then no UIDs equal to or less than 8 are\n   present in the VANISHED response.  If the (N+1)th message number is\n   12, and the (N+1)th UID is 24, and the (N+1)th message in the mailbox\n   has UID 25, then the lowest UID included in the VANISHED response\n   would be 9.\n\n   In the following two examples, the server is unable to remember\n   expunges at all, and only UIDs with messages divisible by three are\n   present in the mailbox.  In the first example, the client does not\n   use the fourth parameter; in the second, it provides it.  This\n   example is somewhat extreme, but shows that judicious usage of the\n   sequence match data can save a substantial amount of bandwidth.\n\n   Example:\n      C: A04 SELECT INBOX (QRESYNC (67890007\n         90060115194045000 1:29997))\n      S: * 10003 EXISTS\n      S: * 5 RECENT\n      S: * OK [UIDVALIDITY 67890007] UIDVALIDITY\n      S: * OK [UIDNEXT 30013] Predicted next UID\n      S: * OK [HIGHESTMODSEQ 90060115205545359]\n      S: * OK [UNSEEN 7] There are some unseen messages in the mailbox\n      S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n      S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n         \\Deleted \\Seen \\*)] Permanent flags\n      S: * VANISHED (EARLIER) 1:2,4:5,7:8,10:11,13:14 [...]\n         29998:29999,30001:30002,30004:30005,30007:30008\n      S: * 9889 FETCH (UID 29667 FLAGS (\\Seen \\Answered) MODSEQ\n         (90060115194045027))\n      S: * 9890 FETCH (UID 29670 FLAGS (\\Draft $MDNSent) MODSEQ\n         (90060115194045028))\n      S: ...\n      S: * 9999 FETCH (UID 29997 FLAGS (\\Seen $Forwarded) MODSEQ\n         (90060115194045031))\n      S: A04 OK [READ-WRITE] mailbox selected\n\n\n\n\n\nMelnikov, et al.            Standards Track                     [Page 7]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   Example:\n      C: B04 SELECT INBOX (QRESYNC (67890007\n         90060115194045000 1:29997 (5000,7500,9000,9990:9999 15000,\n         22500,27000,29970,29973,29976,29979,29982,29985,29988,29991,\n         29994,29997)))\n      S: * 10003 EXISTS\n      S: * 5 RECENT\n      S: * OK [UIDVALIDITY 67890007] UIDVALIDITY\n      S: * OK [UIDNEXT 30013] Predicted next UID\n      S: * OK [HIGHESTMODSEQ 90060115205545359]\n      S: * OK [UNSEEN 7] There are some unseen messages in the mailbox\n      S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n      S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n         \\Deleted \\Seen \\*)] Permanent flags\n      S: * VANISHED (EARLIER) 29998:29999,30001:30002,30004:30005,30007:\n         30008\n      S: * 9889 FETCH (UID 29667 FLAGS (\\Seen \\Answered) MODSEQ\n         (90060115194045027))\n      S: * 9890 FETCH (UID 29670 FLAGS (\\Draft $MDNSent) MODSEQ\n         (90060115194045028))\n      S: ...\n      S: * 9999 FETCH (UID 29997 FLAGS (\\Seen $Forwarded) MODSEQ\n         (90060115194045031))\n      S: B04 OK [READ-WRITE] mailbox selected\n\n3.2.  VANISHED UID FETCH Modifier\n\n   [IMAPABNF] has extended the syntax of the FETCH and UID FETCH\n   commands to include an optional FETCH modifier.  This document\n   defines a new UID FETCH modifier: VANISHED.\n\n   Note, that the VANISHED UID FETCH modifier is NOT allowed with a\n   FETCH command.  The server MUST return a tagged BAD response if this\n   response is specified as a modifier to the FETCH command.\n\n   A server MUST respond with a tagged BAD response if the VANISHED UID\n   FETCH modifier is specified and the client hasn't issued \"ENABLE\n   QRESYNC\" in the current connection.\n\n   The VANISHED UID FETCH modifier MUST only be specified together with\n   the CHANGEDSINCE UID FETCH modifier.\n\n   The VANISHED UID FETCH modifier instructs the server to report those\n   messages from the UID set parameter that have been expunged and whose\n   associated mod-sequence is larger than the specified mod-sequence.\n   That is, the client requests to be informed of messages from the\n   specified set that were expunged since the specified mod-sequence.\n   Note that the mod-sequence(s) associated with these messages were\n\n\n\nMelnikov, et al.            Standards Track                     [Page 8]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   updated when the messages were expunged (as described above).  The\n   expunged messages are reported using the VANISHED response as\n   described in Section 3.6, which MUST contain the EARLIER tag.  Any\n   VANISHED (EARLIER) responses MUST be returned before any FETCH\n   responses, as otherwise the client might get confused about how\n   message numbers map to UIDs.\n\n   Note: A server that receives a mod-sequence smaller than <minmodseq>,\n   where <minmodseq> is the value of the smallest expunged mod-sequence\n   it remembers minus one, MUST behave as if it was requested to report\n   all expunged messages from the provided UID set parameter.\n\n   Example 1: Without the VANISHED UID FETCH modifier, a CONDSTORE-aware\n   client [CONDSTORE] needs to issue separate commands to learn of flag\n   changes and expunged messages since the last synchronization:\n\n   C: s100 UID FETCH 300:500 (FLAGS) (CHANGEDSINCE 12345)\n   S: * 1 FETCH (UID 404 MODSEQ (65402) FLAGS (\\Seen))\n   S: * 2 FETCH (UID 406 MODSEQ (75403) FLAGS (\\Deleted))\n   S: * 4 FETCH (UID 408 MODSEQ (29738) FLAGS ($NoJunk\n       $AutoJunk $MDNSent))\n   S: s100 OK FETCH completed\n   C: s101 UID SEARCH 300:500\n   S: * SEARCH 404 406 407 408 410 412\n   S: s101 OK search completed\n\n   Where 300 and 500 are the lowest and highest UIDs from client's\n   cache.  The second SEARCH response tells the client that the messages\n   with UIDs 407, 410, and 412 are still present, but their flags\n   haven't changed since the specified modification sequence.\n\n   Using the VANISHED UID FETCH modifier, it is sufficient to issue only\n   a single command:\n\n   C: s100 UID FETCH 300:500 (FLAGS) (CHANGEDSINCE 12345\n       VANISHED)\n   S: * VANISHED (EARLIER) 300:310,405,411\n   S: * 1 FETCH (UID 404 MODSEQ (65402) FLAGS (\\Seen))\n   S: * 2 FETCH (UID 406 MODSEQ (75403) FLAGS (\\Deleted))\n   S: * 4 FETCH (UID 408 MODSEQ (29738) FLAGS ($NoJunk\n       $AutoJunk $MDNSent))\n   S: s100 OK FETCH completed\n\n\n\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                     [Page 9]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n3.3.  EXPUNGE Command\n\n   Arguments: none\n\n   Responses: untagged responses: EXPUNGE or VANISHED\n\n   Result: OK - expunge completed\n           NO - expunge failure: can't expunge (e.g., permission denied)\n           BAD - command unknown or arguments invalid\n\n   This section updates the definition of the EXPUNGE command described\n   in Section 6.4.3 of [RFC3501].\n\n   The EXPUNGE command permanently removes all messages that have the\n   \\Deleted flag set from the currently selected mailbox.  Before\n   returning an OK to the client, those messages that are removed are\n   reported using a VANISHED response or EXPUNGE responses.\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently removed due to the execution of\n   the EXPUNGE command.  For each permanently removed message, the\n   server MUST remember the incremented mod-sequence and corresponding\n   UID.  If at least one message got expunged, the server MUST send the\n   updated per-mailbox modification sequence using the HIGHESTMODSEQ\n   response code (defined in [CONDSTORE]) in the tagged OK response.\n\n      Example:    C: A202 EXPUNGE\n                  S: * 3 EXPUNGE\n                  S: * 3 EXPUNGE\n                  S: * 5 EXPUNGE\n                  S: * 8 EXPUNGE\n                  S: A202 OK [HIGHESTMODSEQ 20010715194045319] expunged\n\n   Note: In this example, messages 3, 4, 7, and 11 had the \\Deleted flag\n   set.  The first \"* 3 EXPUNGE\" reports message # 3 as expunged.  The\n   second \"* 3 EXPUNGE\" reports message # 4 as expunged (the message\n   number got decremented due to the previous EXPUNGE response).  See\n   the description of the EXPUNGE response in [RFC3501] for further\n   explanation.\n\n   Note that if the server chooses to always send VANISHED responses\n   instead of EXPUNGE responses, the previous example might look like\n   this:\n\n      Example:    C: B202 EXPUNGE\n                  S: * VANISHED 405,407,410,425\n                  S: B202 OK [HIGHESTMODSEQ 20010715194045319] expunged\n\n\n\nMelnikov, et al.            Standards Track                    [Page 10]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   Here messages with message numbers 3, 4, 7, and 11 have respective\n   UIDs 405, 407, 410, and 425.\n\n3.4.  CLOSE Command\n\n   Arguments: none\n\n   Responses: no specific responses for this command\n\n   Result: OK - close completed, now in authenticated state\n           BAD - command unknown or arguments invalid\n\n   This section updates the definition of the CLOSE command described in\n   Section 6.4.2 of [RFC3501].\n\n   The CLOSE command permanently removes all messages that have the\n   \\Deleted flag set from the currently selected mailbox, and returns to\n   the authenticated state from the selected state.  No untagged EXPUNGE\n   (or VANISHED) responses are sent.\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently removed due to the execution of\n   the CLOSE command.  For each permanently removed message, the server\n   MUST remember the incremented mod-sequence and corresponding UID.  If\n   at least one message got expunged, the server MUST send the updated\n   per-mailbox modification sequence using the HIGHESTMODSEQ response\n   code (defined in [CONDSTORE]) in the tagged OK response.\n\n      Example:    C: A202 CLOSE\n                  S: A202 OK [HIGHESTMODSEQ 20010715194045319] done\n\n3.5.  UID EXPUNGE Command\n\n   Arguments: message set\n\n   Responses: untagged responses: EXPUNGE or VANISHED\n\n   Result: OK - expunge completed\n           NO - expunge failure: can't expunge (e.g., permission denied)\n           BAD - command unknown or arguments invalid\n\n   This section updates the definition of the UID EXPUNGE command\n   described in Section 2.1 of [UIDPLUS].  Servers that implement both\n   [UIDPLUS] and QRESYNC extensions must implement UID EXPUNGE as\n   described in this section.\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 11]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   The UID EXPUNGE command permanently removes from the currently\n   selected mailbox all messages that both have the \\Deleted flag set\n   and have a UID that is included in the specified message set.  If a\n   message either does not have the \\Deleted flag set or has a UID that\n   is not included in the specified message set, it is not affected.\n\n   This command is particularly useful for disconnected mode clients.\n   By using UID EXPUNGE instead of EXPUNGE when resynchronizing with the\n   server, the client can avoid inadvertently removing any messages that\n   have been marked as \\Deleted by other clients between the time that\n   the client was last connected and the time the client resynchronizes.\n\n   Before returning an OK to the client, those messages that are removed\n   are reported using a VANISHED response or EXPUNGE responses.\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently removed due to the execution of\n   the UID EXPUNGE command.  For each permanently removed message, the\n   server MUST remember the incremented mod-sequence and corresponding\n   UID.  If at least one message got expunged, the server MUST send the\n   updated per-mailbox modification sequence using the HIGHESTMODSEQ\n   response code (defined in [CONDSTORE]) in the tagged OK response.\n\n   Example:    C: . UID EXPUNGE 3000:3002\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: . OK [HIGHESTMODSEQ 20010715194045319] Ok\n\n   Note: In this example, at least messages with message numbers 3, 4,\n   and 5 (UIDs 3000 to 3002) had the \\Deleted flag set.  The first \"* 3\n   EXPUNGE\" reports message # 3 as expunged.  The second \"* 3 EXPUNGE\"\n   reports message # 4 as expunged (the message number got decremented\n   due to the previous EXPUNGE response).  See the description of the\n   EXPUNGE response in [RFC3501] for further explanation.\n\n3.6.  VANISHED Response\n\n   Contents:  an optional EARLIER tag\n\n   list of UIDs\n\n   The VANISHED response reports that the specified UIDs have been\n   permanently removed from the mailbox.  This response is similar to\n   the EXPUNGE response [RFC3501]; however, it can return information\n   about multiple messages, and it returns UIDs instead of message\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 12]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   numbers.  The first benefit saves bandwidth, while the second is more\n   convenient for clients that only use UIDs to access the IMAP server.\n\n   The VANISHED response has the same restrictions on when it can be\n   sent as does the EXPUNGE response (see below).\n\n   The VANISHED response has two forms.  The first form contains the\n   EARLIER tag, which signifies that the response was caused by a UID\n   FETCH (VANISHED) or a SELECT/EXAMINE (QRESYNC) command.  This\n   response is sent if the UID set parameter to the UID FETCH (VANISHED)\n   command includes UIDs of messages that are no longer in the mailbox.\n   When the client sees a VANISHED EARLIER response, it MUST NOT\n   decrement message sequence numbers for each successive message in the\n   mailbox.\n\n   The second form doesn't contain the EARLIER tag and is described\n   below.  Once a client has issued \"ENABLE QRESYNC\", the server SHOULD\n   use the VANISHED response without the EARLIER tag instead of the\n   EXPUNGE response.  The server SHOULD continue using VANISHED in lieu\n   of EXPUNGE for the duration of the connection.  In particular, this\n   affects the EXPUNGE [RFC3501] and UID EXPUNGE [UIDPLUS] commands, as\n   well as messages expunged in other connections.  Such a VANISHED\n   response MUST NOT contain the EARLIER tag.\n\n   A VANISHED response sent because of an EXPUNGE or UID EXPUNGE command\n   or because messages were expunged in other connections (i.e., the\n   VANISHED response without the EARLIER tag) also decrements the number\n   of messages in the mailbox; it is not necessary for the server to\n   send an EXISTS response with the new value.  It also decrements\n   message sequence numbers for each successive message in the mailbox\n   (see the example at the end of this section).  Note that a VANISHED\n   response caused by EXPUNGE, UID EXPUNGE, or messages expunged in\n   other connections SHOULD only contain UIDs for messages expunged\n   since the last VANISHED/EXPUNGE response sent for the currently\n   opened mailbox or since the mailbox was opened.  That is, servers\n   SHOULD NOT send UIDs for previously expunged messages, unless\n   explicitly requested to do so by the UID FETCH (VANISHED) command.\n\n   Note that client implementors must take care to properly decrement\n   the number of messages in the mailbox even if a server violates this\n   last SHOULD or repeats the same UID multiple times in the returned\n   UID set.  In general, this means that a client using this extension\n   should either avoid using message numbers entirely, or have a\n   complete mapping of UIDs to message sequence numbers for the selected\n   mailbox.\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 13]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   Because clients handle the two different forms of the VANISHED\n   response differently, servers MUST NOT report UIDs resulting from a\n   UID FETCH (VANISHED) or a SELECT/EXAMINE (QRESYNC) in the same\n   VANISHED response as UIDs of messages expunged now (i.e., messages\n   expunged in other connections).  Instead, the server MUST send\n   separate VANISHED responses: one with the EARLIER tag and one\n   without.\n\n   A VANISHED response MUST NOT be sent when no command is in progress,\n   nor while responding to a FETCH, STORE, or SEARCH command.  This rule\n   is necessary to prevent a loss of synchronization of message sequence\n   numbers between client and server.  A command is not \"in progress\"\n   until the complete command has been received; in particular, a\n   command is not \"in progress\" during the negotiation of command\n   continuation.\n\n   Note: UID FETCH, UID STORE, and UID SEARCH are different commands\n   from FETCH, STORE, and SEARCH.  A VANISHED response MAY be sent\n   during a UID command.  However, the VANISHED response MUST NOT be\n   sent during a UID SEARCH command that contains message numbers in the\n   search criteria.\n\n   The update from the VANISHED response MUST be recorded by the client.\n\n   Example: Let's assume that there is the following mapping between\n   message numbers and UIDs in the currently selected mailbox (here \"X\"\n   marks messages with the \\Deleted flag set, and \"x\" represents UIDs\n   which are not relevant for the example):\n\n   Message numbers:   1    2    3    4    5  6   7  8  9 10  11\n   UIDs:              x  504  505  507  508  x 510  x  x  x 625\n   \\Deleted messages:           X    X           X            X\n\n   In the presence of the extension defined in this document:\n\n   C: A202 EXPUNGE\n   S: * VANISHED 505,507,510,625\n   S: A202 OK EXPUNGE completed\n\n   Without the QRESYNC extension, the same example might look like:\n\n   C: A202 EXPUNGE\n   S: * 3 EXPUNGE\n   S: * 3 EXPUNGE\n   S: * 5 EXPUNGE\n   S: * 8 EXPUNGE\n   S: A202 OK EXPUNGE completed\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 14]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   (Continuing previous example) If subsequently messages with UIDs 504\n   and 508 got marked as \\Deleted:\n\n   C: A210 EXPUNGE\n   S: * VANISHED 504,508\n   S: A210 OK EXPUNGE completed\n\n   i.e., the last VANISHED response only contains UIDs of messages\n   expunged since the previous VANISHED response.\n\n3.7.  CLOSED Response Code\n\n   The CLOSED response code has no parameters.  A server implementing\n   the extension defined in this document MUST return the CLOSED\n   response code when the currently selected mailbox is closed\n   implicitly using the SELECT/EXAMINE command on another mailbox.  The\n   CLOSED response code serves as a boundary between responses for the\n   previously opened mailbox (which was closed) and the newly selected\n   mailbox: all responses before the CLOSED response code relate to the\n   mailbox that was closed, and all subsequent responses relate to the\n   newly opened mailbox.\n\n   There is no need to return the CLOSED response code on completion of\n   the CLOSE or the UNSELECT [UNSELECT] command (or similar) whose\n   purpose is to close the currently selected mailbox without opening a\n   new one.\n\n4.  Server Implementation Considerations\n\n   This section describes a minimalist implementation, a moderate\n   implementation, and an example of a full implementation.\n\n4.1.  Server Implementations That Don't Store Extra State\n\n   Strictly speaking, a server implementation that doesn't remember mod-\n   sequences associated with expunged messages can be considered\n   compliant with this specification.  Such implementations return all\n   expunged messages specified in the UID set of the UID FETCH\n   (VANISHED) command every time, without paying attention to the\n   specified CHANGEDSINCE mod-sequence.  Such implementations are\n   discouraged, as they can end up returning VANISHED responses that are\n   bigger than the result of a UID SEARCH command for the same UID set.\n\n   Clients that use the message sequence match data can reduce the scope\n   of this VANISHED response substantially in the typical case where\n   expunges have not happened, or happen only toward the end of the\n   mailbox.\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 15]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n4.2.  Server Implementations Storing Minimal State\n\n   A server that stores the HIGHESTMODSEQ value at the time of the last\n   EXPUNGE can omit the VANISHED response when a client provides a\n   MODSEQ value that is equal to, or higher than, the current value of\n   this datum, that is, when there have been no EXPUNGEs.\n\n   A client providing message sequence match data can reduce the scope\n   as above.  In the case where there have been no expunges, the server\n   can ignore this data.\n\n4.3.  Additional State Required on the Server\n\n   When compared to the [CONDSTORE] extension, this extension requires\n   servers to store additional state associated with expunged messages.\n   Note that implementations are not required to store this state in\n   persistent storage; however, use of persistent storage is advisable.\n\n   One possible way to correctly implement the extension described in\n   this document is to store a queue of <UID set, mod-sequence> pairs.\n   <UID set> can be represented as a sequence of <min UID, max UID>\n   pairs.\n\n   When messages are expunged, one or more entries are added to the\n   queue tail.\n\n   When the server receives a request to return messages expunged since\n   a given mod-sequence, it will search the queue from the tail (i.e.,\n   going from the highest expunged mod-sequence to the lowest) until it\n   sees the first record with a mod-sequence less than or equal to the\n   given mod-sequence or it reaches the head of the queue.\n\n   Note that indefinitely storing information about expunged messages\n   can cause storage and related problems for an implementation.  In the\n   worst case, this could result in almost 64Gb of storage for each IMAP\n   mailbox.  For example, consider an implementation that stores <min\n   UID, max UID, mod-sequence> triples for each range of messages\n   expunged at the same time.  Each triple requires 16 octets: 4 octets\n   for each of the two UIDs, and 8 octets for the mod-sequence.  Assume\n   that there is a mailbox containing a single message with a UID of\n   2**32-1 (the maximum possible UID value), where messages had\n   previously existed with UIDs starting at 1, and have been expunged\n   one at a time.  For this mailbox alone, storage is required for the\n   triples <1, 1, modseq1>, <2, 2, modseq2>, ..., <2**32-2, 2**32-2,\n   modseq4294967294>.\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 16]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   Hence, implementations are encouraged to adopt strategies to protect\n   against such storage problems, such as limiting the size of the queue\n   used to store mod-sequences for expunged messages and \"expiring\"\n   older records when this limit is reached.  When the selected\n   implementation-specific queue limit is reached, the oldest record(s)\n   are deleted from the queue (note that such records are located at the\n   queue head).  For all such \"expired\" records, the server needs to\n   store a single mod-sequence, which is the highest mod-sequence for\n   all \"expired\" expunged messages.\n\n   Note that if the client provides the message sequence match data,\n   this can heavily reduce the data cost of sending a complete set of\n   missing UIDs; thus, reducing the problems for clients if a server is\n   unable to persist much of this queue.  If the queue contains data\n   back to the requested mod-sequence, this data can be ignored.\n\n   Also, note that if the UIDVALIDITY of the mailbox changes or if the\n   mailbox is deleted, then any state associated with expunged messages\n   doesn't need to be preserved and SHOULD be deleted.\n\n5.  Updated Synchronization Sequence\n\n   This section updates the description of optimized synchronization in\n   Section 6.1 of the [IMAP-DISC].\n\n   An advanced disconnected mail client should use the QRESYNC and\n   [CONDSTORE] extensions when they are supported by the server.  The\n   client uses the value from the HIGHESTMODSEQ OK response code\n   received on mailbox opening to determine if it needs to\n   resynchronize.  Once the synchronization is complete, it MUST cache\n   the received value (unless the mailbox UIDVALIDITY value has changed;\n   see below).  The client MUST update its copy of the HIGHESTMODSEQ\n   value whenever the server sends a subsequent HIGHESTMODSEQ OK\n   response code.\n\n   After completing a full synchronization, the client MUST also take\n   note of any unsolicited MODSEQ FETCH data items received from the\n   server.  Whenever the client receives a tagged response to a command,\n   it calculates the highest value among all MODSEQ FETCH data items\n   received since the last tagged response.  If this value is bigger\n   than the client's copy of the HIGHESTMODSEQ value, then the client\n   MUST use this value as its new HIGHESTMODSEQ value.\n\n   Note: It is not safe to update the client's copy of the HIGHESTMODSEQ\n   value with a MODSEQ FETCH data item value as soon as it is received\n   because servers are not required to send MODSEQ FETCH data items in\n   increasing modseqence order.  This can lead to the client missing\n   some changes in case of connectivity loss.\n\n\n\nMelnikov, et al.            Standards Track                    [Page 17]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   When opening the mailbox for synchronization, the client uses the\n   QRESYNC parameter to the SELECT/EXAMINE command.  The QRESYNC\n   parameter is followed by the UIDVALIDITY and mailbox HIGHESTMODSEQ\n   values, as known to the client.  It can be optionally followed by the\n   set of UIDs, for example, if the client is only interested in partial\n   synchronization of the mailbox.  The client may also transmit a list\n   containing its knowledge of message numbers.\n\n   If the SELECT/EXAMINE command is successful, the client compares\n   UIDVALIDITY as described in step d)1) in Section 3 of the\n   [IMAP-DISC].  If the cached UIDVALIDITY value matches the one\n   returned by the server and the server also returns the HIGHESTMODSEQ\n   response code, then the server reports expunged messages and returns\n   flag changes for all messages specified by the client in the UID set\n   parameter (or for all messages in the mailbox, if the client omitted\n   the UID set parameter).  At this point, the client is synchronized,\n   except for maybe the new messages.\n\n   If upon a successful SELECT/EXAMINE (QRESYNC) command the client\n   receives a NOMODSEQ OK untagged response (instead of the\n   HIGHESTMODSEQ response code), it MUST remove the last known\n   HIGHESTMODSEQ value from its cache and follow the more general\n   instructions in Section 3 of the [IMAP-DISC].\n\n   At this point, the client is in sync with the server regarding old\n   messages.  This client can now fetch information about new messages\n   (if requested by the user).\n\n   Step d) (\"Server-to-client synchronization\") in Section 4 of the\n   [IMAP-DISC] in the presence of the QRESYNC & CONDSTORE extensions is\n   amended as follows:\n\n   d) \"Server-to-client synchronization\" -- for each mailbox that\n      requires synchronization, do the following:\n\n   1a) Check the mailbox UIDVALIDITY (see Section 4.1 of the [IMAP-DISC]\n       for more details) after issuing SELECT/EXAMINE (QRESYNC) command.\n\n       If the UIDVALIDITY value returned by the server differs, the\n       client MUST\n\n       *   empty the local cache of that mailbox;\n\n       *   \"forget\" the cached HIGHESTMODSEQ value for the mailbox;\n\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 18]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n       *   remove any pending \"actions\" which refer to UIDs in that\n           mailbox.  Note, this doesn't affect actions performed on\n           client generated fake UIDs (see Section 5 of the\n           [IMAP-DISC]);\n\n   2)  Fetch the current \"descriptors\";\n\n       I) Discover new messages.\n\n   3)  Fetch the bodies of any \"interesting\" messages that the client\n       doesn't already have.\n\n   Example: The UIDVALIDITY value is the same, but the HIGHESTMODSEQ\n            value has changed on the server while the client was\n            offline:\n\n    C: A142 SELECT INBOX (QRESYNC (3857529045 20010715194032001 1:198))\n    S: * 172 EXISTS\n    S: * 1 RECENT\n    S: * OK [UNSEEN 12] Message 12 is first unseen\n    S: * OK [UIDVALIDITY 3857529045] UIDs valid\n    S: * OK [UIDNEXT 201] Predicted next UID\n    S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n    S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n    S: * OK [HIGHESTMODSEQ 20010715194045007]\n    S: * VANISHED (EARLIER) 1:5,7:8,10:15\n    S: * 2 FETCH (UID 6 MODSEQ (20010715205008000)\n        FLAGS (\\Deleted))\n    S: * 5 FETCH (UID 9 MODSEQ (20010715195517000)\n        FLAGS ($NoJunk $AutoJunk $MDNSent))\n       ...\n    S: A142 OK [READ-WRITE] SELECT completed\n\n6.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   [RFC3501], [CONDSTORE], or [IMAPABNF].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 19]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n   capability          =/ \"QRESYNC\"\n\n   select-param        =  \"QRESYNC\" SP \"(\" uidvalidity SP\n                       mod-sequence-value [SP known-uids]\n                       [SP seq-match-data] \")\"\n                       ;; conforms to the generic select-param\n                       ;; syntax defined in [IMAPABNF]\n\n   seq-match-data      =  \"(\" known-sequence-set SP known-uid-set \")\"\n\n   uidvalidity         =  nz-number\n\n   known-uids          =  sequence-set\n                       ;; sequence of UIDs, \"*\" is not allowed\n\n   known-sequence-set  =  sequence-set\n                       ;; set of message numbers corresponding to\n                       ;; the UIDs in known-uid-set, in ascending order.\n                       ;; * is not allowed.\n\n   known-uid-set       =  sequence-set\n                       ;; set of UIDs corresponding to the messages in\n                       ;; known-sequence-set, in ascending order.\n                       ;; * is not allowed.\n\n   message-data        =/ expunged-resp\n\n   expunged-resp       =  \"VANISHED\" [SP \"(EARLIER)\"] SP known-uids\n\n   rexpunges-fetch-mod =  \"VANISHED\"\n                       ;; VANISHED UID FETCH modifier conforms\n                       ;; to the fetch-modifier syntax\n                       ;; defined in [IMAPABNF].  It is only\n                       ;; allowed in the UID FETCH command.\n\n   resp-text-code      =/ \"CLOSED\"\n\n7.  Security Considerations\n\n   As always, it is important to thoroughly test clients and servers\n   implementing this extension, as it changes how the server reports\n   expunged messages to the client.\n\n   Security considerations relevant to [CONDSTORE] are relevant to this\n   extension.\n\n   This document doesn't raise any new security concerns not already\n   raised by [CONDSTORE] or [RFC3501].\n\n\n\nMelnikov, et al.            Standards Track                    [Page 20]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n8.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track or\n   IESG approved experimental RFC.  The registry is currently located\n   at:\n\n      http://www.iana.org/assignments/imap4-capabilities\n\n   This document defines the QRESYNC IMAP capability.  IANA has added\n   this capability to the registry.\n\n9.  Acknowledgments\n\n   Thanks to Steve Hole, Cyrus Daboo, and Michael Wener for encouraging\n   creation of this document.\n\n   Valuable comments, both in agreement and in dissent, were received\n   from Timo Sirainen, Michael Wener, Randall Gellens, Arnt Gulbrandsen,\n   Chris Newman, Peter Coates, Mark Crispin, Elwyn Davies, Dan Karp,\n   Eric Rescorla, and Mike Zraly.\n\n   This document takes substantial text from [RFC3501] by Mark Crispin.\n\n10.  References\n\n10.1.  Normative References\n\n   [ABNF]       Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n                Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [CONDSTORE]  Melnikov, A. and S. Hole, \"IMAP Extension for\n                Conditional STORE Operation or Quick Flag Changes\n                Resynchronization\", RFC 4551, June 2006.\n\n   [ENABLE]     Gulbrandsen, A., Ed. and A. Melnikov, Ed., \"The IMAP\n                ENABLE Extension\", RFC 5161, March 2008.\n\n   [IMAPABNF]   Melnikov, A. and C. Daboo, \"Collected Extensions to\n                IMAP4 ABNF\", RFC 4466, April 2006.\n\n   [RFC2119]    Bradner, S., \"Key words for use in RFCs to Indicate\n                Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]    Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n                4rev1\", RFC 3501, March 2003.\n\n   [UIDPLUS]    Crispin, M., \"Internet Message Access Protocol (IMAP) -\n                UIDPLUS extension\", RFC 4315, December 2005.\n\n\n\nMelnikov, et al.            Standards Track                    [Page 21]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\n10.2.  Informative References\n\n   [IMAP-DISC]  Melnikov, A., Ed., \"Synchronization Operations For\n                Disconnected Imap4 Clients\", RFC 4549, June 2006.\n\n   [UNSELECT]   Melnikov, A., \"Internet Message Access Protocol (IMAP)\n                UNSELECT command\", RFC 3691, February 2004.\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Dave Cridland\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: dave.cridland@isode.com\n\n\n   Corby Wilson\n   Nokia\n   5 Wayside Rd.\n   Burlington, MA  01803\n   USA\n\n   EMail: corby@computer.org\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 22]\n\f\nRFC 5162               IMAP Quick Mailbox Resync              March 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov, et al.            Standards Track                    [Page 23]\n\f\n"
  },
  {
    "path": "rfc/rfc5182.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                     A. Melnikov\nRequest for Comments: 5182                                 Isode Ltd.\nUpdates: 3501                                              March 2008\nCategory: Standards Track\n\n\n         IMAP Extension for Referencing the Last SEARCH Result\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   Many IMAP clients use the result of a SEARCH command as the input to\n   perform another operation, for example, fetching the found messages,\n   deleting them, or copying them to another mailbox.\n\n   This can be achieved using standard IMAP operations described in RFC\n   3501; however, this would be suboptimal.  The server will send the\n   list of found messages to the client; after that, the client will\n   have to parse the list, reformat it, and send it back to the server.\n   The client can't pipeline the SEARCH command with the subsequent\n   command, and, as a result, the server might not be able to perform\n   some optimizations.\n\n   This document proposes an IMAP extension that allows a client to tell\n   a server to use the result of a SEARCH (or Unique Identifier (UID)\n   SEARCH) command as an input to any subsequent command.\n\n1.   Introduction\n\n   Many IMAP clients use the result of a SEARCH command as the input to\n   perform another operation, for example, fetching the found messages,\n   deleting them, or copying them to another mailbox.\n\n   This document proposes an IMAP extension that allows a client to tell\n   a server to use the result of a SEARCH (or UID SEARCH) command as an\n   input to any subsequent command.\n\n   The SEARCH result reference extension defines a new SEARCH result\n   option [IMAPABNF] \"SAVE\" that tells the server to remember the result\n   of the SEARCH or UID SEARCH command (as well as any command based on\n   SEARCH, e.g., SORT and THREAD [SORT]) and store it in an internal\n\n\n\nMelnikov                    Standards Track                     [Page 1]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   variable that we will reference as the \"search result variable\".  The\n   client can use the \"$\" marker to reference the content of this\n   internal variable.  The \"$\" marker can be used instead of message\n   sequence or UID sequence in order to indicate that the server should\n   substitute it with the list of messages from the search result\n   variable.  Thus, the client can use the result of the latest\n   remembered SEARCH command as a parameter to another command.  The\n   search result marker has several advantages:\n\n      * it avoids wasted bandwidth and associated delay;\n\n      * it allows the client to pipeline a SEARCH [IMAP4] command with a\n        subsequent FETCH/STORE/COPY/SEARCH [IMAP4] or UID EXPUNGE\n        [UIDPLUS] command;\n\n      * the client doesn't need to spend time reformatting the result of\n        a SEARCH command into a message set used in the subsequent\n        command;\n\n      * it allows the server to perform optimizations.  For example, if\n        the server can execute several pipelined commands in parallel\n        (or out of order), presence of the search result marker can\n        allow the server to decide which commands may or may not be\n        executed out of order.\n\n   In absence of any other SEARCH result option, the SAVE result option\n   also suppresses any SEARCH response that would have been otherwise\n   returned by the SEARCH command.\n\n1.1.   Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [KEYWORDS].\n\n   Explanatory comments in examples start with // and are not part of\n   the protocol.\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 2]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n2.  Overview\n\n2.1.   Normative Description of the SEARCHRES Extension\n\n   The SEARCH result reference extension described in this document is\n   present in any IMAP4 server implementation that returns \"SEARCHRES\"\n   as one of the supported capabilities in the CAPABILITY command\n   response.  Any such server MUST also implement the [ESEARCH]\n   extension.\n\n   Upon successful completion of a SELECT or an EXAMINE command (after\n   the tagged OK response), the current search result variable is reset\n   to the empty sequence.\n\n   A successful SEARCH command with the SAVE result option sets the\n   value of the search result variable to the list of messages found in\n   the SEARCH command.  For example, if no messages were found, the\n   search result variable will contain the empty list.\n\n   Any of the following SEARCH commands MUST NOT change the search\n   result variable:\n\n      o a SEARCH command that caused the server to return the BAD tagged\n        response,\n\n      o a SEARCH command with no SAVE result option that caused the\n        server to return NO tagged response,\n\n      o a successful SEARCH command with no SAVE result option.\n\n   A SEARCH command with the SAVE result option that caused the server\n   to return the NO tagged response sets the value of the search result\n   variable to the empty sequence.\n\n   When a message listed in the search result variable is EXPUNGEd, it\n   is automatically removed from the list.  Implementors are reminded\n   that if the server stores the list as a list of message numbers, it\n   MUST automatically adjust them when notifying the client about\n   expunged messages, as described in Section 7.4.1 of [IMAP4].\n\n   If the server decides to send a new UIDVALIDITY value while the\n   mailbox is opened, this causes resetting of the search variable to\n   the empty list.\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 3]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   Note that even if the \"$\" marker contains the empty list of messages,\n   it must be treated by all commands accepting message sets as\n   parameters as a valid, but non-matching list of messages.  For\n   example, the \"FETCH $\" command would return a tagged OK response and\n   no FETCH responses.  See also the Example 5 below.\n\n   Note that even if the \"$\" marker contains the empty list of messages,\n   it must be treated as a valid but non-matching list of messages, by\n   all commands that accept message sets as parameters.\n\n   Implementation note: server implementors should note that \"$\" can\n   reference IMAP message sequences or UID sequences, depending on the\n   context where it is used.  For example, the \"$\" marker can be set as\n   a result of a SEARCH (SAVE) command and used as a parameter to a UID\n   FETCH command (which accepts a UID sequence, not a message sequence),\n   or the \"$\" marker can be set as a result of a UID SEARCH (SAVE)\n   command and used as a parameter to a FETCH command (which accepts a\n   message sequence, not a UID sequence).\n\n2.2.   Examples\n\n   1) The following example demonstrates how the client can use the\n      result of a SEARCH command to FETCH headers of interesting\n      messages:\n\n   Example 1:\n            C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994\n                NOT FROM \"Smith\"\n            S: A282 OK SEARCH completed, result saved\n            C: A283 FETCH $ (UID INTERNALDATE FLAGS RFC822.HEADER)\n            S: * 2 FETCH (UID 14 ...\n            S: * 84 FETCH (UID 100 ...\n            S: * 882 FETCH (UID 1115 ...\n            S: A283 OK completed\n\n   The client can also pipeline the two commands:\n\n   Example 2:\n            C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994\n                NOT FROM \"Smith\"\n            C: A283 FETCH $ (UID INTERNALDATE FLAGS RFC822.HEADER)\n            S: A282 OK SEARCH completed\n            S: * 2 FETCH (UID 14 ...\n            S: * 84 FETCH (UID 100 ...\n            S: * 882 FETCH (UID 1115 ...\n            S: A283 OK completed\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 4]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   2) The following example demonstrates that the result of one SEARCH\n      command can be used as input to another SEARCH command:\n\n   Example 3:\n            C: A300 SEARCH RETURN (SAVE) SINCE 1-Jan-2004\n                NOT FROM \"Smith\"\n            S: A300 OK SEARCH completed\n            C: A301 UID SEARCH UID $ SMALLER 4096\n            S: * SEARCH 17 900 901\n            S: A301 OK completed\n\n   Note that the second command in Example 3 can be replaced with:\n            C: A301 UID SEARCH $ SMALLER 4096\n   and the result of the command would be the same.\n\n   3) The following example shows that the \"$\"\n      marker can be combined with other message numbers using the OR\n      SEARCH criterion.\n\n   Example 4:\n            C: P282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994\n                NOT FROM \"Smith\"\n            S: P282 OK SEARCH completed\n            C: P283 SEARCH CHARSET UTF-8 (OR $ 1,3000:3021) TEXT {8}\n            C: YYYYYYYY\n            S: * SEARCH 882 1102 3003 3005 3006\n            S: P283 OK completed\n\n   Note: Since this document format is restricted to 7-bit ASCII text,\n   it is not possible to show actual UTF-8 data.  The \"YYYYYYYY\" is a\n   placeholder for what would be 8 octets of 8-bit data in an actual\n   transaction.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 5]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   4) The following example demonstrates that a failed SEARCH sets the\n      search result variable to the empty list.\n\n   Example 5:\n            C: B282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994\n                NOT FROM \"Smith\"\n            S: B282 OK SEARCH completed\n            C: B283 SEARCH CHARSET KOI8-R (OR $ 1,3000:3021) TEXT {4}\n            C: XXXX\n            S: B283 NO [BADCHARSET UTF-8] KOI8-R is not supported\n            //After this command the saved result variable contains\n            //no messages.  A client that wants to reissue the B283\n            //SEARCH command with another CHARSET would have to reissue\n            //the B282 command as well.  One possible workaround for\n            //this is to include the desired CHARSET parameter\n            //in the earliest SEARCH RETURN (SAVE) command in a\n            //sequence of related SEARCH commands.\n            //A better approach might be to always use CHARSET UTF-8\n            //instead.\n\n   Note: Since this document format is restricted to 7-bit ASCII text,\n   it is not possible to show actual KOI8-R data.  The \"XXXX\" is a\n   placeholder for what would be 4 octets of 8-bit data in an actual\n   transaction.\n\n   5) The following example demonstrates that it is not an error to use\n      the \"$\" marker when it contains no messages.\n\n   Example 6:\n            C: E282 SEARCH RETURN (SAVE) SINCE 28-Oct-2006\n                NOT FROM \"Eric\"\n            C: E283 COPY $ \"Other Messages\"\n            //The \"$\" contains no messages\n            S: E282 OK SEARCH completed\n            S: E283 OK COPY completed, nothing copied\n\n2.3.   Multiple Commands in Progress\n\n   Use of a SEARCH RETURN (SAVE) command followed by a command using the\n   \"$\" marker creates direct dependency between the two commands.  As\n   directed by Section 5.5 of [IMAP4], a server MUST execute the two\n   commands in the order they were received.  (A server capable of\n   out-of-order execution can in some cases execute the two commands in\n   parallel, for example, if a SEARCH RETURN (SAVE) is followed by\n   \"SEARCH $\", the search criteria from the first command can be\n   directly substituted into the second command.)\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 6]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   A client supporting this extension MAY pipeline a SEARCH RETURN\n   (SAVE) command with one or more command using the \"$\" marker, as long\n   as this doesn't create an ambiguity, as described in Section 5.5 of\n   [IMAP4].\n\n   Example 7:\n            C: F282 SEARCH RETURN (SAVE) KEYWORD $Junk\n            C: F283 COPY $ \"Junk\"\n            C: F284 STORE $ +FLAGS.Silent (\\Deleted)\n            S: F282 OK SEARCH completed\n            S: F283 OK COPY completed\n            S: F284 OK STORE completed\n\n   Example 8:\n            C: G282 SEARCH RETURN (SAVE) KEYWORD $Junk\n            C: G283 SEARCH RETURN (ALL) SINCE 28-Oct-2006\n                FROM \"Eric\"\n            //The server can execute the two SEARCH commands\n            //in any order, as they don't have any dependency.\n            //Note that the second command is making use of\n            //the [ESEARCH] extension.\n            S: * ESEARCH (TAG \"G283\") ALL 3:15,27,29:103\n            S: G283 OK SEARCH completed\n            S: G282 OK SEARCH completed\n\n   The following example demonstrates that the result of the second\n   SEARCH always overrides the result of the first.\n\n   Example 9:\n               C: H282 SEARCH RETURN (SAVE) KEYWORD $Junk\n               C: H283 SEARCH RETURN (SAVE) SINCE 28-Oct-2006\n                   FROM \"Eric\"\n               S: H282 OK SEARCH completed\n               S: H283 OK SEARCH completed\n\n2.4.   Interaction with ESEARCH Extension\n\n   Servers that implement the extension defined in this document MUST\n   implement [ESEARCH] and conform to additional requirements listed in\n   this section.\n\n   The SAVE result option doesn't change whether the server would return\n   items corresponding to MIN, MAX, ALL, or COUNT [ESEARCH] result\n   options.\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 7]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   When the SAVE result option is combined with the MIN or MAX [ESEARCH]\n   result option, and none of the other ESEARCH result options are\n   present, the corresponding MIN/MAX is returned (if the search result\n   is not empty), but the \"$\" marker would contain a single message as\n   returned in the MIN/MAX return item.\n\n   If the SAVE result option is combined with both MIN and MAX result\n   options, and none of the other ESEARCH result options are present,\n   the \"$\" marker would contain one or two messages as returned in the\n   MIN/MAX return items.\n\n   If the SAVE result option is combined with the ALL and/or COUNT\n   result option(s), the \"$\" marker would always contain all messages\n   found by the SEARCH or UID SEARCH command.  (Note that the last rule\n   might affect ESEARCH implementations that optimize how the COUNT\n   result is constructed.)\n\n   The following table summarizes the additional requirement on ESEARCH\n   server implementations described in this section.\n\n            +----------------+-------------------+\n            | Combination of | \"$\" marker value  |\n            |  Result option |                   |\n            +----------------+-------------------+\n            |   SAVE MIN     |        MIN        |\n            +----------------+-------------------+\n            |   SAVE MAX     |        MAX        |\n            +----------------+-------------------+\n            |   SAVE MIN MAX |     MIN & MAX     |\n            +----------------+-------------------+\n            |   SAVE * [m]   | all found messages|\n            +----------------+-------------------+\n\n            where  '*'  means \"ALL\" and/or \"COUNT\"\n                   '[m]' means optional \"MIN\" and/or \"MAX\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 8]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n   The following example demonstrates behavioral difference for\n   different combinations of ESEARCH result options.  Explanatory\n   comments start with // and are not part of the protocol:\n\n   Example 10:\n              C: C282 SEARCH RETURN (ALL) SINCE 12-Feb-2006\n                  NOT FROM \"Smith\"\n              S: * ESEARCH (TAG \"C283\") ALL 2,10:15,21\n            //$ value hasn't changed\n              S: C282 OK SEARCH completed\n\n              C: C283 SEARCH RETURN (ALL SAVE) SINCE 12-Feb-2006\n                  NOT FROM \"Smith\"\n              S: * ESEARCH (TAG \"C283\") ALL 2,10:15,21\n            //$ value is 2,10:15,21\n              S: C283 OK SEARCH completed\n\n              C: C284 SEARCH RETURN (SAVE MIN) SINCE 12-Feb-2006\n                  NOT FROM \"Smith\"\n              S: * ESEARCH (TAG \"C284\") MIN 2\n            //$ value is 2\n              S: C284 OK SEARCH completed\n\n              C: C285 SEARCH RETURN (MAX SAVE MIN) SINCE\n                  12-Feb-2006 NOT FROM \"Smith\"\n              S: * ESEARCH (TAG \"C285\") MIN 2 MAX 21\n            //$ value is 2,21\n              S: C285 OK SEARCH completed\n\n              C: C286 SEARCH RETURN (MAX SAVE MIN COUNT)\n                  SINCE 12-Feb-2006 NOT FROM \"Smith\"\n              S: * ESEARCH (TAG \"C286\") MIN 2 MAX 21 COUNT 8\n            //$ value is 2,10:15,21\n              S: C286 OK SEARCH completed\n\n              C: C286 SEARCH RETURN (ALL SAVE MIN) SINCE\n                  12-Feb-2006 NOT FROM \"Smith\"\n              S: * ESEARCH (TAG \"C286\") MIN 2 ALL 2,10:15,21\n            //$ value is 2,10:15,21\n              S: C286 OK SEARCH completed\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                     [Page 9]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n2.5.   Refusing to Save Search Results\n\n   In some cases, the server MAY refuse to save a SEARCH (SAVE) result,\n   for example, if an internal limit on the number of saved results is\n   reached.\n\n   In this case, the server MUST return a tagged NO response containing\n   the NOTSAVED response code and set the search result variable to the\n   empty sequence, as described in Section 2.1.\n\n3.   Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].  Non-terminals\n   referenced but not defined below are as defined in [IMAP4] or\n   [IMAPABNF].\n\n   Except as noted otherwise, all alphabetic characters are\n   case-insensitive.  The use of upper- or lower-case characters to\n   define token strings is for editorial clarity only.  Implementations\n   MUST accept these strings in a case-insensitive fashion.\n\n         capability         =/ \"SEARCHRES\"\n                              ;; capability is defined in [IMAP4]\n\n         sequence-set       =/ seq-last-command\n                              ;; extends sequence-set to allow for\n                              ;; \"result of the last command\" indicator.\n\n         seq-last-command   = \"$\"\n\n         search-return-opt  = \"SAVE\"\n                              ;; conforms to generic search-return-opt\n                              ;; syntax defined in [IMAPABNF]\n\n         resp-text-code     =/ \"NOTSAVED\"\n                              ;; <resp-text-code> from [IMAP4]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 10]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n4.   Security Considerations\n\n   This extension requires the server to keep additional state, that may\n   be used to simplify Denial of Service attacks.  In order to minimize\n   damage from such attacks, server implementations MAY limit the number\n   of saved searches they allow across all connections at any given time\n   and return the tagged NO response containing the NOTSAVED response\n   code (see Section 2.5) to a SEARCH RETURN (SAVE) command when this\n   limit is exceeded.\n\n   Apart from that, it is believed that this extension doesn't raise any\n   additional security concerns not already discussed in [IMAP4].\n\n5.  IANA Considerations\n\n   This document defines the \"SEARCHRES\" IMAP capability.  IANA has\n   added it to the IMAP4 Capabilities Registry, which is currently\n   located at:\n\n   http://www.iana.org/assignments/imap4-capabilities\n\n6.   Acknowledgments\n\n   The author would like to thank Mark Crispin, Cyrus Daboo, and Curtis\n   King for remembering that this document had to be written, as well as\n   for comments and corrections received.\n\n   The author would also like to thank Dave Cridland, Mark Crispin,\n   Chris Newman, Dan Karp, and Spencer Dawkins for comments and\n   corrections received.\n\n   Valuable comments, both in agreement and in dissent, were received\n   from Arnt Gulbrandsen.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 11]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\n7.   References\n\n7.1. Normative References\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [ABNF]     Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n   [IMAP4]    Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [IMAPABNF] Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [ESEARCH]  Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n              Command for Controlling What Kind of Information Is\n              Returned\", RFC 4731, November 2006.\n\n7.2. Informative References\n\n   [UIDPLUS]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              UIDPLUS extension\", RFC 4315, December 2005.\n\n   [SORT]     Crispin, M. and  K. Murchison, \"INTERNET MESSAGE ACCESS\n              PROTOCOL - SORT AND THREAD EXTENSIONS\", Work in Progress,\n              Septemeber 2007.\n\nAuthor's Address\n\n   Alexey Melnikov\n   Isode Ltd.\n   5 Castle Business Village,\n   36 Station Road,\n   Hampton, Middlesex,\n   TW12 2BX, United Kingdom\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 12]\n\f\nRFC 5182              Last SEARCH Result Reference            March 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                    Standards Track                    [Page 13]\n\f\n"
  },
  {
    "path": "rfc/rfc5255.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                          C. Newman\nRequest for Comments: 5255                              Sun Microsystems\nCategory: Standards Track                                 A. Gulbrandsen\n                                                  Oryx Mail Systems GmhH\n                                                             A. Melnikov\n                                                           Isode Limited\n                                                               June 2008\n\n\n         Internet Message Access Protocol Internationalization\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   Internet Message Access Protocol (IMAP) version 4rev1 has basic\n   support for non-ASCII characters in mailbox names and search\n   substrings.  It also supports non-ASCII message headers and content\n   encoded as specified by Multipurpose Internet Mail Extensions (MIME).\n   This specification defines a collection of IMAP extensions that\n   improve international support including language negotiation for\n   international error text, translations for namespace prefixes, and\n   comparator negotiation for search, sort, and thread.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 1]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\nTable of Contents\n\n   1. Introduction ....................................................3\n   2. Conventions Used in This Document ...............................3\n   3. LANGUAGE Extension ..............................................3\n      3.1. LANGUAGE Extension Requirements ............................4\n      3.2. LANGUAGE Command ...........................................4\n      3.3. LANGUAGE Response ..........................................6\n      3.4. TRANSLATION Extension to the NAMESPACE Response ............7\n      3.5. Formal Syntax ..............................................8\n   4. I18NLEVEL=1 and I18NLEVEL=2 Extensions ..........................9\n      4.1. Introduction and Overview ..................................9\n      4.2. Requirements Common to Both I18NLEVEL=1 and I18NLEVEL=2 ....9\n      4.3. I18NLEVEL=1 Extension Requirements ........................10\n      4.4. I18NLEVEL=2 Extension Requirements ........................10\n      4.5. Compatibility Notes .......................................11\n      4.6. Comparators and Character Encodings .......................11\n      4.7. COMPARATOR Command ........................................13\n      4.8. COMPARATOR Response .......................................14\n      4.9. BADCOMPARATOR Response Code ...............................14\n      4.10. Formal Syntax ............................................14\n   5. Other IMAP Internationalization Issues .........................15\n      5.1. Unicode Userids and Passwords .............................15\n      5.2. UTF-8 Mailbox Names .......................................15\n      5.3. UTF-8 Domains, Addresses, and Mail Headers ................15\n   6. IANA Considerations ............................................16\n   7. Security Considerations ........................................16\n   8. Acknowledgements ...............................................16\n   9. Relevant Sources of Documents for Internationalized IMAP\n      Implementations ................................................17\n   10. Normative References ..........................................17\n   11. Informative References ........................................18\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 2]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n1.  Introduction\n\n   This specification defines two IMAP4rev1 [RFC3501] extensions to\n   enhance international support.  These extensions can be advertised\n   and implemented separately.\n\n   The LANGUAGE extension allows the client to request a suitable\n   language for protocol error messages and in combination with the\n   NAMESPACE extension [RFC2342] enables namespace translations.\n\n   The I18NLEVEL=2 extension allows the client to request a suitable\n   collation that will modify the behavior of the base specification's\n   SEARCH command as well as the SORT and THREAD extensions [SORT].\n   This leverages the collation registry [RFC4790].  The I18NLEVEL=1\n   extension updates SEARCH/SORT/THREAD to use i;unicode-casemap\n   comparator, as defined in [UCM].  I18NLEVEL=1 is a simpler version of\n   I18NLEVEL=2 with no ability to select a different collation.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   The formal syntax uses the Augmented Backus-Naur Form (ABNF)\n   [RFC5234] notation including the core rules defined in Appendix A.\n\n   The UTF-8-related productions are defined in [RFC3629].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.\n\n3.  LANGUAGE Extension\n\n   IMAP allows server responses to include human-readable text that in\n   many cases needs to be presented to the user.  But that text is\n   limited to US-ASCII by the IMAP specification [RFC3501] in order to\n   preserve backwards compatibility with deployed IMAP implementations.\n   This section specifies a way for an IMAP client to negotiate which\n   language the server should use when sending human-readable text.\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 3]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   The LANGUAGE extension only provides a mechanism for altering fixed\n   server strings such as response text and NAMESPACE folder names.\n   Assigning localized language aliases to shared mailboxes would be\n   done with a separate mechanism such as the proposed METADATA\n   extension (see [METADATA]).\n\n3.1.  LANGUAGE Extension Requirements\n\n   IMAP servers that support this extension MUST list the keyword\n   LANGUAGE in their CAPABILITY response as well as in the greeting\n   CAPABILITY data.\n\n   A server that advertises this extension MUST use the language\n   \"i-default\" as described in [RFC2277] as its default language until\n   another supported language is negotiated by the client.  A server\n   MUST include \"i-default\" as one of its supported languages.  IMAP\n   servers SHOULD NOT advertise the LANGUAGE extension if they discover\n   that they only support \"i-default\".\n\n   Clients and servers that support this extension MUST also support the\n   NAMESPACE extension [RFC2342].\n\n   The LANGUAGE command is valid in all states.  Clients SHOULD issue\n   LANGUAGE before authentication, since some servers send valuable user\n   information as part of authentication (e.g., \"password is correct,\n   but expired\").  If a security layer (such as SASL or TLS) is\n   subsequently negotiated by the client, it MUST re-issue the LANGUAGE\n   command in order to make sure that no previous active attack (if any)\n   on LANGUAGE negotiation has effect on subsequent error messages.\n   (See Section 7 for a more detailed explanation of the attack.)\n\n3.2.  LANGUAGE Command\n\n   Arguments: Optional language range arguments.\n\n   Response:  A possible LANGUAGE response (see Section 3.3).\n              A possible NAMESPACE response (see Section 3.4).\n\n   Result:    OK - Command completed\n              NO - Could not complete command\n              BAD - Arguments invalid\n\n   The LANGUAGE command requests that human-readable text emitted by the\n   server be localized to a language matching one of the language range\n   argument as described by Section 2 of [RFC4647].\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 4]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   If the command succeeds, the server will return human-readable\n   responses in the first supported language specified.  These responses\n   will be in UTF-8 [RFC3629].  The server MUST send a LANGUAGE response\n   specifying the language used, and the change takes effect immediately\n   after the LANGUAGE response.\n\n   If the command fails, the server continues to return human-readable\n   responses in the language it was previously using.\n\n   The special \"default\" language range argument indicates a request to\n   use a language designated as preferred by the server administrator.\n   The preferred language MAY vary based on the currently active user.\n\n   If a language range does not match a known language tag exactly but\n   does match a language by the rules of [RFC4647], the server MUST send\n   an untagged LANGUAGE response indicating the language selected.\n\n   If there aren't any arguments, the server SHOULD send an untagged\n   LANGUAGE response listing the languages it supports.  If the server\n   is unable to enumerate the list of languages it supports it MAY\n   return a tagged NO response to the enumeration request.  If, after\n   receiving a LANGUAGE request, the server discovers that it doesn't\n   support any language other than i-default, it MUST return a tagged NO\n   response to the enumeration request.\n\n      < The server defaults to using English i-default responses until\n        the user explicitly changes the language. >\n\n      C: A001 LOGIN KAREN PASSWORD\n      S: A001 OK LOGIN completed\n\n      < Client requested MUL language, which no server supports. >\n\n      C: A002 LANGUAGE MUL\n      S: A002 NO Unsupported language MUL\n\n      < A LANGUAGE command with no arguments is a request to enumerate\n        the list of languages the server supports. >\n\n      C: A003 LANGUAGE\n      S: * LANGUAGE (EN DE IT i-default)\n      S: A003 OK Supported languages have been enumerated\n\n      C: B001 LANGUAGE\n      S: B001 NO Server is unable to enumerate supported languages\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 5]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n      < Once the client changes the language, all responses will be in\n        that language starting after the LANGUAGE response.  Note that\n        this includes the NAMESPACE response.  Because RFCs are in US-\n        ASCII, this document uses an ASCII transcription rather than\n        UTF-8 text, e.g., \"ue\" in the word \"ausgefuehrt\" >\n\n      C: C001 LANGUAGE DE\n      S: * LANGUAGE (DE)\n      S: * NAMESPACE ((\"\" \"/\")) ((\"Other Users/\" \"/\" \"TRANSLATION\"\n            (\"Andere Ben&APw-tzer/\"))) ((\"Public Folders/\" \"/\"\n            \"TRANSLATION\" (\"Gemeinsame Postf&AM8-cher/\")))\n      S: C001 OK Sprachwechsel durch LANGUAGE-Befehl ausgefuehrt\n\n      < If a server does not support the requested primary language,\n        responses will continue to be returned in the current language\n        the server is using. >\n\n      C: D001 LANGUAGE FR\n      S: D001 NO Diese Sprache ist nicht unterstuetzt\n      C: D002 LANGUAGE DE-IT\n      S: * LANGUAGE (DE-IT)\n      S: * NAMESPACE ((\"\" \"/\"))((\"Other Users/\" \"/\" \"TRANSLATION\"\n            (\"Andere Ben&APw-tzer/\"))) ((\"Public Folders/\" \"/\"\n            \"TRANSLATION\" (\"Gemeinsame Postf&AM8-cher/\")))\n      S: D002 OK Sprachwechsel durch LANGUAGE-Befehl ausgefuehrt\n      C: D003 LANGUAGE \"default\"\n      S: * LANGUAGE (DE)\n      S: D003 OK Sprachwechsel durch LANGUAGE-Befehl ausgefuehrt\n\n      < Server does not speak French, but does speak English.  User\n        speaks Canadian French and Canadian English. >\n\n      C: E001 LANGUAGE FR-CA EN-CA\n      S: * LANGUAGE (EN)\n      S: E001 OK Now speaking English\n\n3.3.  LANGUAGE Response\n\n   Contents:  A list of one or more language tags.\n\n   The LANGUAGE response occurs as a result of a LANGUAGE command.  A\n   LANGUAGE response with a list containing a single language tag\n   indicates that the server is now using that language.  A LANGUAGE\n   response with a list containing multiple language tags indicates the\n   server is communicating a list of available languages to the client,\n   and no change in the active language has been made.\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 6]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n3.4.  TRANSLATION Extension to the NAMESPACE Response\n\n   If localized representations of the namespace prefixes are available\n   in the selected language, the server SHOULD include these in the\n   TRANSLATION extension to the NAMESPACE response.\n\n   The TRANSLATION extension to the NAMESPACE response returns a single\n   string, containing the modified UTF-7 [RFC3501] encoded translation\n   of the namespace prefix.  It is the responsibility of the client to\n   convert between the namespace prefix and the translation of the\n   namespace prefix when presenting mailbox names to the user.\n\n   In this example, a server supports the IMAP4 NAMESPACE command.  It\n   uses no prefix to the user's Personal Namespace, a prefix of \"Other\n   Users\" to its Other Users' Namespace, and a prefix of \"Public\n   Folders\" to its only Shared Namespace.  Since a client will often\n   display these prefixes to the user, the server includes a translation\n   of them that can be presented to the user.\n\n      C: A001 LANGUAGE DE-IT\n      S: * NAMESPACE ((\"\" \"/\")) ((\"Other Users/\" \"/\" \"TRANSLATION\"\n            (\"Andere Ben&APw-tzer/\"))) ((\"Public Folders/\" \"/\"\n            \"TRANSLATION\" (\"Gemeinsame Postf&AM8-cher/\")))\n      S: A001 OK LANGUAGE-Befehl ausgefuehrt\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 7]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n3.5.  Formal Syntax\n\n   The following syntax specification inherits ABNF [RFC5234] rules from\n   IMAP4rev1 [RFC3501], IMAP4 Namespace [RFC2342], Tags for the\n   Identifying Languages [RFC4646], UTF-8 [RFC3629], and Collected\n   Extensions to IMAP4 ABNF [RFC4466].\n\n    command-any       =/ language-cmd\n        ; LANGUAGE command is valid in all states\n\n    language-cmd      = \"LANGUAGE\" *(SP lang-range-quoted)\n\n    response-payload  =/ language-data\n\n    language-data     = \"LANGUAGE\" SP \"(\" lang-tag-quoted *(SP\n                      lang-tag-quoted) \")\"\n\n    namespace-trans   = SP DQUOTE \"TRANSLATION\" DQUOTE SP \"(\" string \")\"\n        ; the string is encoded in Modified UTF-7.\n        ; this is a subset of the syntax permitted by\n        ; the Namespace-Response-Extension rule in [RFC4466]\n\n    lang-range-quoted = astring\n        ; Once any literal wrapper or quoting is removed, this\n        ; follows the language-range rule in [RFC4647]\n\n    lang-tag-quoted   = astring\n        ; Once any literal wrapper or quoting is removed, this follows\n        ; the Language-Tag rule in [RFC4646]\n\n    resp-text         = [\"[\" resp-text-code \"]\" SP ] UTF8-TEXT-CHAR\n                        *(UTF8-TEXT-CHAR / \"[\")\n        ; After the server is changed to a language other than\n        ; i-default, this resp-text rule replaces the resp-text\n        ; rule from [RFC3501].\n\n    UTF8-TEXT-CHAR    = %x20-5A / %x5C-7E / UTF8-2 / UTF8-3 / UTF8-4\n        ; UTF-8 excluding 7-bit control characters and \"[\"\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 8]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n4.  I18NLEVEL=1 and I18NLEVEL=2 Extensions\n\n4.1.  Introduction and Overview\n\n   IMAP4rev1 [RFC3501] includes the SEARCH command that can be used to\n   locate messages matching criteria including human-readable text.  The\n   SORT extension [SORT] to IMAP allows the client to ask the server to\n   determine the order of messages based on criteria including human-\n   readable text.  These mechanisms require the ability to support non-\n   English search and sort functions.\n\n   Section 4 defines two IMAP extensions for internationalizing IMAP\n   SEARCH, SORT, and THREAD [SORT] using the comparator framework\n   [RFC4790].\n\n   The I18NLEVEL=1 extension updates SEARCH/SORT/THREAD to use\n   i;unicode-casemap comparator, as defined in [UCM].  See Sections 4.2\n   and 4.3 for more details.\n\n   The I18NLEVEL=2 extension is a superset of the I18NLEVEL=1 extension.\n   It adds to I18NLEVEL=1 extension the ability to determine the active\n   comparator (see definition below) and to negotiate use of comparators\n   using the COMPARATOR command.  It also adds the COMPARATOR response\n   that indicates the active comparator and possibly other available\n   comparators.  See Sections 4.2 and 4.4 for more details.\n\n4.2.  Requirements Common to Both I18NLEVEL=1 and I18NLEVEL=2\n\n   The term \"default comparator\" refers to the comparator that is used\n   by SEARCH and SORT absent any negotiation using the COMPARATOR\n   command (see Section 4.7).  The term \"active comparator\" refers to\n   the comparator which will be used within a session, e.g., by SEARCH\n   and SORT.  The COMPARATOR command is used to change the active\n   comparator.\n\n   The active comparator applies to the following SEARCH keys: \"BCC\",\n   \"BODY\", \"CC\", \"FROM\", \"SUBJECT\", \"TEXT\", \"TO\", and \"HEADER\".  If the\n   server also advertises the \"SORT\" extension, then the active\n   comparator applies to the following SORT keys: \"CC\", \"FROM\",\n   \"SUBJECT\", and \"TO\".  If the server advertises THREAD=ORDEREDSUBJECT,\n   then the active comparator applies to the ORDEREDSUBJECT threading\n   algorithm.  If the server advertises THREAD=REFERENCES, then the\n   active comparator applies to the subject field comparisons done by\n   REFERENCES threading algorithm.  Future extensions may choose to\n   apply the active comparator to their SEARCH keys.\n\n\n\n\n\n\nNewman, et al.              Standards Track                     [Page 9]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   For SORT and THREAD, the pre-processing necessary to extract the base\n   subject text from a Subject header occurs prior to the application of\n   a comparator.\n\n   A server that advertises I18NLEVEL=1 or I18NLEVEL=2 extension MUST\n   implement the i;unicode-casemap comparator, as defined in [UCM].\n\n   A server that advertises I18NLEVEL=1 or I18NLEVEL=2 extension MUST\n   support UTF-8 as a SEARCH charset.\n\n4.3.  I18NLEVEL=1 Extension Requirements\n\n   An IMAP server that satisfies all requirements specified in Sections\n   4.2 and 4.6 (and that doesn't support/advertise any other\n   I18NLEVEL=<n> extension, where n > 1) MUST list the keyword\n   I18NLEVEL=1 in its CAPABILITY data once IMAP enters the authenticated\n   state, and MAY list that keyword in other states.\n\n4.4.  I18NLEVEL=2 Extension Requirements\n\n   An IMAP server that satisfies all requirements specified in Sections\n   4.2, 4.4, and 4.6-4.10 (and that doesn't support/advertise any other\n   I18NLEVEL=<n> extension, where n > 2) MUST list the keyword\n   I18NLEVEL=2 in its CAPABILITY data once IMAP enters the authenticated\n   state, and MAY list that keyword in other states.\n\n   A server that advertises this extension MUST implement the\n   i;unicode-casemap comparator, as defined in [UCM].  It MAY implement\n   other comparators from the IANA registry established by [RFC4790].\n   See also Section 4.5 of this document.\n\n   A server that advertises this extension SHOULD use i;unicode-casemap\n   as the default comparator.  (Note that i;unicode-casemap is the\n   default comparator for I18NLEVEL=1, but not necessarily the default\n   for I18NLEVEL=2.) The selection of the default comparator MAY be\n   adjustable by the server administrator, and MAY be sensitive to the\n   current user.  Once the IMAP connection enters authenticated state,\n   the default comparator MUST remain static for the remainder of that\n   connection.\n\n   Note that since SEARCH uses the substring operation, IMAP servers can\n   only implement collations that offer the substring operation (see\n   [RFC4790], Section 4.2.2).  Since SORT uses the ordering operation\n   (which in turn uses the equality operation), IMAP servers that\n   advertise the SORT extension can only implement collations that offer\n   all three operations (see [RFC4790], Sections 4.2.2-4.2.4).\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 10]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   If the active collation does not provide the operations needed by an\n   IMAP command, the server MUST respond with a tagged BAD.\n\n4.5.  Compatibility Notes\n\n   Several server implementations deployed prior to the publication of\n   this specification comply with I18NLEVEL=1 (see Section 4.3), but do\n   not advertise that.  Other legacy servers use the i;ascii-casemap\n   comparator (see [RFC4790]).\n\n   There is no good way for a client to know which comparator a legacy\n   server uses.  If the client has to assume the worst, it may end up\n   doing expensive local operations to obtain i;unicode-casemap\n   comparisons even though the server implements it.\n\n   Legacy server implementations which comply with I18NLEVEL=1 should be\n   updated to advertise I18NLEVEL=1.  All server implementations should\n   eventually be updated to comply with the I18NLEVEL=2 extension.\n\n4.6.  Comparators and Character Encodings\n\n   RFC 3501, Section 6.4.4, says:\n\n         In all search keys that use strings, a message matches the key\n         if the string is a substring of the field.  The matching is\n         case-insensitive.\n\n   When performing the SEARCH operation, the active comparator is\n   applied instead of the case-insensitive matching specified above.\n\n   An IMAP server which performs collation operations (e.g., as part of\n   commands such as SEARCH, SORT, and THREAD) does so according to the\n   following procedure:\n\n   (a) MIME encoding (for example, see [RFC2047] for headers and\n       [RFC2045] for body parts) MUST be removed in the texts being\n       collated.\n\n       If MIME encoding removal fails for a message (e.g., a body part\n       of the message has an unsupported Content-Transfer-Encoding, uses\n       characters not allowed by the Content-Transfer-Encoding, etc.),\n       the collation of this message is undefined by this specification,\n       and is handled in an implementation-dependent manner.\n\n   (b) The decoded text from (a) MUST be converted to the charset\n       expected by the active comparator.\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 11]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   (c) For the substring operation:\n\n       If step (b) failed (e.g., the text is in an unknown charset,\n       contains a sequence that is not valid according in that charset,\n       etc.), the original decoded text from (a) (i.e., before the\n       charset conversion attempt) is collated using the i;octet\n       comparator (see [RFC4790]).\n\n       If step (b) was successful, the converted text from (b) is\n       collated according to the active comparator.\n\n       For the ordering operation:\n\n       All strings that were successfully converted by step (b) are\n       separated from all strings that failed step (b).  Strings in each\n       group are collated independently.  All strings successfully\n       converted by step (b) are then validated by the active\n       comparator.  Strings that pass validation are collated using the\n       active comparator.  All strings that either fail step (b) or fail\n       the active collation's validity operation are collated (after\n       applying step (a)) using the i;octet comparator (see [RFC4790]).\n       The resulting sorted list is produced by appending all collated\n       \"failed\" strings after all strings collated using the active\n       comparator.\n\n       Example: The following example demonstrates ordering of 4\n       different strings using the i;unicode-casemap [UCM] comparator.\n       Strings are represented using hexadecimal notation used by ABNF\n       [RFC5234].\n\n       (1) %xD0 %xC0 %xD0 %xBD %xD0 %xB4 %xD1 %x80 %xD0 %xB5\n           %xD0 %xB9 (labeled with charset=UTF-8)\n       (2) %xD1 %x81 %xD0 %x95 %xD0 %xA0 %xD0 %x93 %xD0 %x95\n           %xD0 %x99 (labeled with charset=UTF-8)\n       (3) %xD0 %x92 %xD0 %xB0 %xD1 %x81 %xD0 %xB8 %xD0 %xBB\n           %xD0 %xB8 %xFF %xB9 (labeled with charset=UTF-8)\n       (4) %xE1 %xCC %xC5 %xCB %xD3 %xC5 %xCA (labeled with\n           charset=KOI8-R)\n\n       Step (b) will convert string (4) to the following sequence of\n       octets (in UTF-8):\n\n       %xD0 %x90 %xD0 %xBB %xD0 %xB5 %xD0 %xBA %xD1 %x81 %xD0\n       %xB5 %xD0 %xB9\n\n       and will reject strings (1) and (3), as they contain octets not\n       allowed in charset=UTF-8.\n\n\n\n\nNewman, et al.              Standards Track                    [Page 12]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n       After that, using the i;unicode-casemap collation, string (4)\n       will collate before string (2).  Using the i;octet collation on\n       the original strings, string (3) will collate before string (1).\n       So the final ordering is as follows: (4) (2) (3) (1).\n\n   If the substring operation (e.g., IMAP SEARCH) of the active\n   comparator returns the \"undefined\" result (see Section 4.2.3 of\n   [RFC4790]) for either the text specified in the SEARCH command or the\n   message text, then the operation is repeated on the result of step\n   (a) using the i;octet comparator.\n\n   The ordering operation (e.g., IMAP SORT and THREAD) SHOULD collate\n   the following together: strings encoded using unknown or invalid\n   character encodings, strings in unrecognized charsets, and invalid\n   input (as defined by the active collation).\n\n4.7.  COMPARATOR Command\n\n   Arguments: Optional comparator order arguments.\n\n   Response:  A possible COMPARATOR response (see Section 4.8).\n\n   Result:    OK - Command completed\n              NO - No matching comparator found\n              BAD - Arguments invalid\n\n   The COMPARATOR command is valid in authenticated and selected states.\n\n   The COMPARATOR command is used to determine or change the active\n   comparator.  When issued with no arguments, it results in a\n   COMPARATOR response indicating the currently active comparator.\n\n   When issued with one or more comparator arguments, it changes the\n   active comparator as directed.  (If more than one installed\n   comparator is matched by an argument, the first argument wins.) The\n   COMPARATOR response lists all matching comparators if more than one\n   matches the specified patterns.\n\n   The argument \"default\" refers to the server's default comparator.\n   Otherwise, each argument is a collation specification as defined in\n   the Internet Application Protocol Comparator Registry [RFC4790].\n\n        < The client requests activating a Czech comparator if possible,\n          or else a generic international comparator which it considers\n          suitable for Czech.  The server picks the first supported\n          comparator. >\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 13]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n        C: A001 COMPARATOR \"cz;*\" i;basic\n        S: * COMPARATOR i;basic\n        S: A001 OK Will use i;basic for collation\n\n4.8.  COMPARATOR Response\n\n   Contents:  The active comparator.  An optional list of available\n               matching comparators\n\n   The COMPARATOR response occurs as a result of a COMPARATOR command.\n   The first argument in the comparator response is the name of the\n   active comparator.  The second argument is a list of comparators\n   which matched any of the arguments to the COMPARATOR command and is\n   present only if more than one match is found.\n\n4.9.  BADCOMPARATOR Response Code\n\n   This response code SHOULD be returned as a result of server failing\n   an IMAP command (returning NO), when the server knows that none of\n   the specified comparators match the requested comparator(s).\n\n4.10.  Formal Syntax\n\n   The following syntax specification inherits ABNF [RFC5234] rules from\n   IMAP4rev1 [RFC3501] and the Internet Application Protocol Comparator\n   Registry [RFC4790].\n\n    command-auth      =/ comparator-cmd\n\n    resp-text-code    =/ \"BADCOMPARATOR\"\n\n    comparator-cmd    = \"COMPARATOR\" *(SP comp-order-quoted)\n\n    response-payload  =/ comparator-data\n\n    comparator-data   = \"COMPARATOR\" SP comp-sel-quoted [SP \"(\"\n                        comp-id-quoted *(SP comp-id-quoted) \")\"]\n\n    comp-id-quoted    = astring\n        ; Once any literal wrapper or quoting is removed, this\n        ; follows the collation-id rule from [RFC4790]\n\n    comp-order-quoted = astring\n        ; Once any literal wrapper or quoting is removed, this\n        ; follows the collation-order rule from [RFC4790]\n\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 14]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n    comp-sel-quoted   = astring\n        ; Once any literal wrapper or quoting is removed, this\n        ; follows the collation-selected rule from [RFC4790]\n\n5.  Other IMAP Internationalization Issues\n\n   The following sections provide an overview of various other IMAP\n   internationalization issues.  These issues are not resolved by this\n   specification, but could be resolved by other standards work, such as\n   that being done by the EAI working group (see [IMAP-EAI]).\n\n5.1.  Unicode Userids and Passwords\n\n   IMAP4rev1 currently restricts the userid and password fields of the\n   LOGIN command to US-ASCII.  The \"userid\" and \"password\" fields of the\n   IMAP LOGIN command are restricted to US-ASCII only until a future\n   standards track RFC states otherwise.  Servers are encouraged to\n   validate both fields to make sure they conform to the formal syntax\n   of UTF-8 and to reject the LOGIN command if that syntax is violated.\n   Servers MAY reject the LOGIN command if either the \"userid\" or\n   \"password\" field contains an octet with the highest bit set.\n\n   When AUTHENTICATE is used, some servers may support userids and\n   passwords in Unicode [RFC3490] since SASL (see [RFC4422]) allows\n   that.  However, such userids cannot be used as part of email\n   addresses.\n\n5.2.  UTF-8 Mailbox Names\n\n   The modified UTF-7 mailbox naming convention described in Section\n   5.1.3 of RFC 3501 is best viewed as an transition from the status quo\n   in 1996 when modified UTF-7 was first specified.  At that time, there\n   was widespread unofficial use of local character sets such as ISO-\n   8859-1 and Shift-JIS for non-ASCII mailbox names, with resultant\n   non-interoperability.\n\n   The requirements in Section 5.1 of RFC 3501 are very important if\n   we're ever going to be able to deploy UTF-8 mailbox names.  Servers\n   are encouraged to enforce them.\n\n5.3.  UTF-8 Domains, Addresses, and Mail Headers\n\n   There is now an IETF standard for \"Internationalizing Domain Names in\n   Applications (IDNA)\" [RFC3490].  While IMAP clients are free to\n   support this standard, an argument can be made that it would be\n   helpful to simple clients if the IMAP server could perform this\n   conversion (the same argument would apply to MIME header encoding\n\n\n\n\nNewman, et al.              Standards Track                    [Page 15]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   [RFC2047]).  However, it would be unwise to move forward with such\n   work until the work in progress to define the format of international\n   email addresses is complete.\n\n6.  IANA Considerations\n\n   IANA added LANGUAGE, I18NLEVEL=1, and I18NLEVEL=2 to the IMAP4\n   Capabilities Registry.\n\n7.  Security Considerations\n\n   The LANGUAGE extension makes a new command available in \"Not\n   Authenticated\" state in IMAP.  Some IMAP implementations run with\n   root privilege when the server is in \"Not Authenticated\" state and do\n   not revoke that privilege until after authentication is complete.\n   Such implementations are particularly vulnerable to buffer overflow\n   security errors at this stage and need to implement parsing of this\n   command with extra care.\n\n   A LANGUAGE command issued prior to activation of a security layer is\n   subject to an active attack that suppresses or modifies the\n   negotiation, and thus makes STARTTLS or authentication error messages\n   more difficult to interpret.  This is not a new attack as the error\n   messages themselves are subject to active attack.  Clients MUST re-\n   issue the LANGUAGE command once a security layer is active, in order\n   to prevent this attack from impacting subsequent protocol operations.\n\n   LANGUAGE, I18NLEVEL=1, and I18NLEVEL=2 extensions use the UTF-8\n   charset; thus, the security considerations for UTF-8 [RFC3629] are\n   relevant.  However, neither uses UTF-8 for identifiers, so the most\n   serious concerns do not apply.\n\n8.  Acknowledgements\n\n   The LANGUAGE extension is based on a previous document by Mike\n   Gahrns, a substantial portion of the text in that section was written\n   by him.  Many people have participated in discussions about an IMAP\n   Language extension in the various fora of the IETF and Internet\n   working groups, so any list of contributors is bound to be\n   incomplete.  However, the authors would like to thank Andrew McCown\n   for early work on the original proposal, John Myers for suggestions\n   regarding the namespace issue, along with Jutta Degener, Mark\n   Crispin, Mark Pustilnik, Larry Osterman, Cyrus Daboo, Martin Duerst,\n   Timo Sirainen, Ben Campbell, and Magnus Nystrom for their many\n   suggestions that have been incorporated into this document.\n\n   Initial discussion of the I18NLEVEL=2 extension involved input from\n   Mark Crispin and other participants of the IMAP Extensions WG.\n\n\n\nNewman, et al.              Standards Track                    [Page 16]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n9.  Relevant Sources of Documents for Internationalized IMAP\n    Implementations\n\n   This is a non-normative list of sources to consider when implementing\n   i18n-aware IMAP software.\n\n      o The LANGUAGE and I18NLEVEL=2 extensions to IMAP (this\n        specification).\n\n      o The 8-bit rules for mailbox naming in Section 5.1 of RFC 3501.\n\n      o The Mailbox International Naming Convention in Section 5.1.3 of\n        RFC 3501.\n\n      o MIME [RFC2045] for message bodies.\n\n      o MIME header encoding [RFC2047] for message headers.\n\n      o The IETF EAI working group.\n\n      o MIME Parameter Value and Encoded Word Extensions [RFC2231] for\n        filenames.  Quality IMAP server implementations will\n        automatically combine multipart parameters when generating the\n        BODYSTRUCTURE.  There is also some deployed non-standard use of\n        MIME header encoding inside double quotes for filenames.\n\n      o IDNA [RFC3490] and punycode [RFC3492] for domain names\n        (currently only relevant to IMAP clients).\n\n      o The UTF-8 charset [RFC3629].\n\n      o The IETF policy on Character Sets and Languages [RFC2277].\n\n10.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2277]  Alvestrand, H., \"IETF Policy on Character Sets and\n              Languages\", BCP 18, RFC 2277, January 1998.\n\n   [RFC2342]  Gahrns, M. and C. Newman, \"IMAP4 Namespace\", RFC 2342, May\n              1998.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 17]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, November 2003.\n\n   [RFC5234]  Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n   [RFC4422]  Melnikov, A., Ed., and K. Zeilenga, Ed., \"Simple\n              Authentication and Security Layer (SASL)\", RFC 4422, June\n              2006.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [RFC4646]  Phillips, A. and M. Davis, \"Tags for Identifying\n              Languages\", BCP 47, RFC 4646, September 2006.\n\n   [RFC4647]  Phillips, A. and M. Davis, \"Matching of Language Tags\",\n              BCP 47, RFC 4647, September 2006.\n\n   [RFC4790]  Newman, C., Duerst, M., and A. Gulbrandsen, \"Internet\n              Application Protocol Collation Registry\", RFC 4790, March\n              2007.\n\n   [SORT]     Crispin, M. and K. Murchison, \"Internet Message Access\n              Protocol - SORT and THREAD Extensions\", RFC 5256, June\n              2008.\n\n   [UCM]      Crispin, M., \"i;unicode-casemap - Simple Unicode Collation\n              Algorithm\", RFC 5051, October 2007.\n\n   [RFC2045]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n              Extensions (MIME) Part One: Format of Internet Message\n              Bodies\", RFC 2045, November 1996.\n\n   [RFC2047]  Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n              Part Three: Message Header Extensions for Non-ASCII Text\",\n              RFC 2047, November 1996.\n\n11. Informative References\n\n   [RFC2231]  Freed, N. and K. Moore, \"MIME Parameter Value and Encoded\n              Word Extensions: Character Sets, Languages, and\n              Continuations\", RFC 2231, November 1997.\n\n   [RFC3490]  Faltstrom, P., Hoffman, P., and A. Costello,\n              \"Internationalizing Domain Names in Applications (IDNA)\",\n              RFC 3490, March 2003.\n\n\n\nNewman, et al.              Standards Track                    [Page 18]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\n   [RFC3492]  Costello, A., \"Punycode: A Bootstring encoding of Unicode\n              for Internationalized Domain Names in Applications\n              (IDNA)\", RFC 3492, March 2003.\n\n   [METADATA] Daboo, C., \"IMAP METADATA Extension\", Work in Progress,\n              April 2008.\n\n   [IMAP-EAI] Resnick, P., and C. Newman, \"IMAP Support for UTF-8\", Work\n              in Progress, November 2007.\n\nAuthors' Addresses\n\n   Chris Newman\n   Sun Microsystems\n   3401 Centrelake Dr., Suite 410\n   Ontario, CA 91761\n   US\n\n   EMail: chris.newman@sun.com\n\n\n   Arnt Gulbrandsen\n   Oryx Mail Systems GmbH\n   Schweppermannstr. 8\n   D-81671 Muenchen\n   Germany\n\n   EMail: arnt@oryx.com\n   Fax: +49 89 4502 9758\n\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village, 36 Station Road,\n   Hampton, Middlesex, TW12 2BX, UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 19]\n\f\nRFC 5255               IMAP Internationalization               June 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.              Standards Track                    [Page 20]\n\f\n"
  },
  {
    "path": "rfc/rfc5256.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         M. Crispin\nRequest for Comments: 5256                             Panda Programming\nCategory: Standards Track                                   K. Murchison\n                                              Carnegie Mellon University\n                                                               June 2008\n\n\n     Internet Message Access Protocol - SORT and THREAD Extensions\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   This document describes the base-level server-based sorting and\n   threading extensions to the IMAP protocol.  These extensions provide\n   substantial performance improvements for IMAP clients that offer\n   sorted and threaded views.\n\n1.  Introduction\n\n   The SORT and THREAD extensions to the [IMAP] protocol provide a means\n   of server-based sorting and threading of messages, without requiring\n   that the client download the necessary data to do so itself.  This is\n   particularly useful for online clients as described in [IMAP-MODELS].\n\n   A server that supports the base-level SORT extension indicates this\n   with a capability name which starts with \"SORT\".  Future, upwards-\n   compatible extensions to the SORT extension will all start with\n   \"SORT\", indicating support for this base level.\n\n   A server that supports the THREAD extension indicates this with one\n   or more capability names consisting of \"THREAD=\" followed by a\n   supported threading algorithm name as described in this document.\n   This provides for future upwards-compatible extensions.\n\n   A server that implements the SORT and/or THREAD extensions MUST\n   collate strings in accordance with the requirements of I18NLEVEL=1,\n   as described in [IMAP-I18N], and SHOULD implement and advertise the\n   I18NLEVEL=1 extension.  Alternatively, a server MAY implement\n   I18NLEVEL=2 (or higher) and comply with the rules of that level.\n\n\n\n\n\nCrispin & Murchison         Standards Track                     [Page 1]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n      Discussion: The SORT and THREAD extensions predate [IMAP-I18N] by\n      several years.  At the time of this writing, all known server\n      implementations of SORT and THREAD comply with the rules of\n      I18NLEVEL=1, but do not necessarily advertise it.  As discussed in\n      [IMAP-I18N] section 4.5, all server implementations should\n      eventually be updated to comply with the I18NLEVEL=2 extension.\n\n   Historical note: The REFERENCES threading algorithm is based on the\n   [THREADING] algorithm written and used in \"Netscape Mail and News\"\n   versions 2.0 through 3.0.\n\n2.  Terminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [KEYWORDS].\n\n   The word \"can\" (not \"may\") is used to refer to a possible\n   circumstance or situation, as opposed to an optional facility of the\n   protocol.\n\n   \"User\" is used to refer to a human user, whereas \"client\" refers to\n   the software being run by the user.\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n2.1.  Base Subject\n\n   Subject sorting and threading use the \"base subject\", which has\n   specific subject artifacts removed.  Due to the complexity of these\n   artifacts, the formal syntax for the subject extraction rules is\n   ambiguous.  The following procedure is followed to determine the\n   \"base subject\", using the [ABNF] formal syntax rules described in\n   section 5:\n\n      (1) Convert any RFC 2047 encoded-words in the subject to [UTF-8]\n          as described in \"Internationalization Considerations\".\n          Convert all tabs and continuations to space.  Convert all\n          multiple spaces to a single space.\n\n      (2) Remove all trailing text of the subject that matches the\n          subj-trailer ABNF; repeat until no more matches are possible.\n\n      (3) Remove all prefix text of the subject that matches the subj-\n          leader ABNF.\n\n\n\n\n\nCrispin & Murchison         Standards Track                     [Page 2]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n      (4) If there is prefix text of the subject that matches the subj-\n          blob ABNF, and removing that prefix leaves a non-empty subj-\n          base, then remove the prefix text.\n\n      (5) Repeat (3) and (4) until no matches remain.\n\n   Note: It is possible to defer step (2) until step (6), but this\n   requires checking for subj-trailer in step (4).\n\n      (6) If the resulting text begins with the subj-fwd-hdr ABNF and\n          ends with the subj-fwd-trl ABNF, remove the subj-fwd-hdr and\n          subj-fwd-trl and repeat from step (2).\n\n      (7) The resulting text is the \"base subject\" used in the SORT.\n\n   All servers and disconnected (as described in [IMAP-MODELS]) clients\n   MUST use exactly this algorithm to determine the \"base subject\".\n   Otherwise, there is potential for a user to get inconsistent results\n   based on whether they are running in connected or disconnected mode.\n\n2.2.  Sent Date\n\n   As used in this document, the term \"sent date\" refers to the date and\n   time from the Date: header, adjusted by time zone to normalize to\n   UTC.  For example, \"31 Dec 2000 16:01:33 -0800\" is equivalent to the\n   UTC date and time of \"1 Jan 2001 00:01:33 +0000\".\n\n   If the time zone is invalid, the date and time SHOULD be treated as\n   UTC.  If the time is also invalid, the time SHOULD be treated as\n   00:00:00.  If there is no valid date or time, the date and time\n   SHOULD be treated as 00:00:00 on the earliest possible date.\n\n   This differs from the date-related criteria in the SEARCH command\n   (described in [IMAP] section 6.4.4), which use just the date and not\n   the time, and are not adjusted by time zone.\n\n   If the sent date cannot be determined (a Date: header is missing or\n   cannot be parsed), the INTERNALDATE for that message is used as the\n   sent date.\n\n   When comparing two sent dates that match exactly, the order in which\n   the two messages appear in the mailbox (that is, by sequence number)\n   is used as a tie-breaker to determine the order.\n\n\n\n\n\n\n\n\nCrispin & Murchison         Standards Track                     [Page 3]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n3.  Additional Commands\n\n   These commands are extensions to the [IMAP] base protocol.\n\n   The section headings are intended to correspond with where they would\n   be located in the main document if they were part of the base\n   specification.\n\nBASE.6.4.SORT. SORT Command\n\n   Arguments:  sort program\n               charset specification\n               searching criteria (one or more)\n\n   Data:       untagged responses: SORT\n\n   Result:     OK - sort completed\n               NO - sort error: can't sort that charset or\n                    criteria\n               BAD - command unknown or arguments invalid\n\n      The SORT command is a variant of SEARCH with sorting semantics for\n      the results.  There are two arguments before the searching\n      criteria argument: a parenthesized list of sort criteria, and the\n      searching charset.\n\n      The charset argument is mandatory (unlike SEARCH) and indicates\n      the [CHARSET] of the strings that appear in the searching\n      criteria.  The US-ASCII and [UTF-8] charsets MUST be implemented.\n      All other charsets are optional.\n\n      There is also a UID SORT command that returns unique identifiers\n      instead of message sequence numbers.  Note that there are separate\n      searching criteria for message sequence numbers and UIDs; thus,\n      the arguments to UID SORT are interpreted the same as in SORT.\n      This is analogous to the behavior of UID SEARCH, as opposed to UID\n      COPY, UID FETCH, or UID STORE.\n\n      The SORT command first searches the mailbox for messages that\n      match the given searching criteria using the charset argument for\n      the interpretation of strings in the searching criteria.  It then\n      returns the matching messages in an untagged SORT response, sorted\n      according to one or more sort criteria.\n\n      Sorting is in ascending order.  Earlier dates sort before later\n      dates; smaller sizes sort before larger sizes; and strings are\n      sorted according to ascending values established by their\n      collation algorithm (see \"Internationalization Considerations\").\n\n\n\nCrispin & Murchison         Standards Track                     [Page 4]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n      If two or more messages exactly match according to the sorting\n      criteria, these messages are sorted according to the order in\n      which they appear in the mailbox.  In other words, there is an\n      implicit sort criterion of \"sequence number\".\n\n      When multiple sort criteria are specified, the result is sorted in\n      the priority order that the criteria appear.  For example,\n      (SUBJECT DATE) will sort messages in order by their base subject\n      text; and for messages with the same base subject text, it will\n      sort by their sent date.\n\n      Untagged EXPUNGE responses are not permitted while the server is\n      responding to a SORT command, but are permitted during a UID SORT\n      command.\n\n      The defined sort criteria are as follows.  Refer to the Formal\n      Syntax section for the precise syntactic definitions of the\n      arguments.  If the associated RFC-822 header for a particular\n      criterion is absent, it is treated as the empty string.  The empty\n      string always collates before non-empty strings.\n\n      ARRIVAL\n         Internal date and time of the message.  This differs from the\n         ON criteria in SEARCH, which uses just the internal date.\n\n      CC\n         [IMAP] addr-mailbox of the first \"cc\" address.\n\n      DATE\n         Sent date and time, as described in section 2.2.\n\n      FROM\n         [IMAP] addr-mailbox of the first \"From\" address.\n\n      REVERSE\n         Followed by another sort criterion, has the effect of that\n         criterion but in reverse (descending) order.\n            Note: REVERSE only reverses a single criterion, and does not\n            affect the implicit \"sequence number\" sort criterion if all\n            other criteria are identical.  Consequently, a sort of\n            REVERSE SUBJECT is not the same as a reverse ordering of a\n            SUBJECT sort.  This can be avoided by use of additional\n            criteria, e.g., SUBJECT DATE vs. REVERSE SUBJECT REVERSE\n            DATE.  In general, however, it's better (and faster, if the\n            client has a \"reverse current ordering\" command) to reverse\n            the results in the client instead of issuing a new SORT.\n\n\n\n\n\nCrispin & Murchison         Standards Track                     [Page 5]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n      SIZE\n         Size of the message in octets.\n\n      SUBJECT\n         Base subject text.\n\n      TO\n         [IMAP] addr-mailbox of the first \"To\" address.\n\n   Example:    C: A282 SORT (SUBJECT) UTF-8 SINCE 1-Feb-1994\n               S: * SORT 2 84 882\n               S: A282 OK SORT completed\n               C: A283 SORT (SUBJECT REVERSE DATE) UTF-8 ALL\n               S: * SORT 5 3 4 1 2\n               S: A283 OK SORT completed\n               C: A284 SORT (SUBJECT) US-ASCII TEXT \"not in mailbox\"\n               S: * SORT\n               S: A284 OK SORT completed\n\nBASE.6.4.THREAD. THREAD Command\n\nArguments:  threading algorithm\n            charset specification\n            searching criteria (one or more)\n\nData:       untagged responses: THREAD\n\nResult:     OK - thread completed\n            NO - thread error: can't thread that charset or\n                 criteria\n            BAD - command unknown or arguments invalid\n\n      The THREAD command is a variant of SEARCH with threading semantics\n      for the results.  Thread has two arguments before the searching\n      criteria argument: a threading algorithm and the searching\n      charset.\n\n      The charset argument is mandatory (unlike SEARCH) and indicates\n      the [CHARSET] of the strings that appear in the searching\n      criteria.  The US-ASCII and [UTF-8] charsets MUST be implemented.\n      All other charsets are optional.\n\n      There is also a UID THREAD command that returns unique identifiers\n      instead of message sequence numbers.  Note that there are separate\n      searching criteria for message sequence numbers and UIDs; thus the\n      arguments to UID THREAD are interpreted the same as in THREAD.\n      This is analogous to the behavior of UID SEARCH, as opposed to UID\n      COPY, UID FETCH, or UID STORE.\n\n\n\nCrispin & Murchison         Standards Track                     [Page 6]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n      The THREAD command first searches the mailbox for messages that\n      match the given searching criteria using the charset argument for\n      the interpretation of strings in the searching criteria.  It then\n      returns the matching messages in an untagged THREAD response,\n      threaded according to the specified threading algorithm.\n\n      All collation is in ascending order.  Earlier dates collate before\n      later dates and strings are collated according to ascending values\n      established by their collation algorithm (see\n      \"Internationalization Considerations\").\n\n      Untagged EXPUNGE responses are not permitted while the server is\n      responding to a THREAD command, but are permitted during a UID\n      THREAD command.\n\n      The defined threading algorithms are as follows:\n\n      ORDEREDSUBJECT\n\n         The ORDEREDSUBJECT threading algorithm is also referred to as\n         \"poor man's threading\".  The searched messages are sorted by\n         base subject and then by the sent date.  The messages are then\n         split into separate threads, with each thread containing\n         messages with the same base subject text.  Finally, the threads\n         are sorted by the sent date of the first message in the thread.\n\n         The top level or \"root\" in ORDEREDSUBJECT threading contains\n         the first message of every thread.  All messages in the root\n         are siblings of each other.  The second message of a thread is\n         the child of the first message, and subsequent messages of the\n         thread are siblings of the second message and hence children of\n         the message at the root.  Hence, there are no grandchildren in\n         ORDEREDSUBJECT threading.\n\n         Children in ORDEREDSUBJECT threading do not have descendents.\n         Client implementations SHOULD treat descendents of a child in a\n         server response as being siblings of that child.\n\n      REFERENCES\n\n         The REFERENCES threading algorithm threads the searched\n         messages by grouping them together in parent/child\n         relationships based on which messages are replies to others.\n         The parent/child relationships are built using two methods:\n         reconstructing a message's ancestry using the references\n         contained within it; and checking the original (not base)\n         subject of a message to see if it is a reply to (or forward of)\n         another message.\n\n\n\nCrispin & Murchison         Standards Track                     [Page 7]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n            Note: \"Message ID\" in the following description refers to a\n            normalized form of the msg-id in [RFC2822].  The actual text\n            in RFC 2822 may use quoting, resulting in multiple ways of\n            expressing the same Message ID.  Implementations of the\n            REFERENCES threading algorithm MUST normalize any msg-id in\n            order to avoid false non-matches due to differences in\n            quoting.\n\n            For example, the msg-id\n               <\"01KF8JCEOCBS0045PS\"@xxx.yyy.com>\n            and the msg-id\n               <01KF8JCEOCBS0045PS@xxx.yyy.com>\n            MUST be interpreted as being the same Message ID.\n\n         The references used for reconstructing a message's ancestry are\n         found using the following rules:\n\n            If a message contains a References header line, then use the\n            Message IDs in the References header line as the references.\n\n            If a message does not contain a References header line, or\n            the References header line does not contain any valid\n            Message IDs, then use the first (if any) valid Message ID\n            found in the In-Reply-To header line as the only reference\n            (parent) for this message.\n\n               Note: Although [RFC2822] permits multiple Message IDs in\n               the In-Reply-To header, in actual practice this\n               discipline has not been followed.  For example,\n               In-Reply-To headers have been observed with message\n               addresses after the Message ID, and there are no good\n               heuristics for software to determine the difference.\n               This is not a problem with the References header,\n               however.\n\n            If a message does not contain an In-Reply-To header line, or\n            the In-Reply-To header line does not contain a valid Message\n            ID, then the message does not have any references (NIL).\n\n         A message is considered to be a reply or forward if the base\n         subject extraction rules, applied to the original subject,\n         remove any of the following: a subj-refwd, a \"(fwd)\" subj-\n         trailer, or a subj-fwd-hdr and subj-fwd-trl.\n\n         The REFERENCES algorithm is significantly more complex than\n         ORDEREDSUBJECT and consists of six main steps.  These steps are\n         outlined in detail below.\n\n\n\n\nCrispin & Murchison         Standards Track                     [Page 8]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n         (1) For each searched message:\n\n             (A) Using the Message IDs in the message's references, link\n                 the corresponding messages (those whose Message-ID\n                 header line contains the given reference Message ID)\n                 together as parent/child.  Make the first reference the\n                 parent of the second (and the second a child of the\n                 first), the second the parent of the third (and the\n                 third a child of the second), etc.  The following rules\n                 govern the creation of these links:\n\n                     If a message does not contain a Message-ID header\n                     line, or the Message-ID header line does not\n                     contain a valid Message ID, then assign a unique\n                     Message ID to this message.\n\n                     If two or more messages have the same Message ID,\n                     then only use that Message ID in the first (lowest\n                     sequence number) message, and assign a unique\n                     Message ID to each of the subsequent messages with\n                     a duplicate of that Message ID.\n\n                     If no message can be found with a given Message ID,\n                     create a dummy message with this ID.  Use this\n                     dummy message for all subsequent references to this\n                     ID.\n\n                     If a message already has a parent, don't change the\n                     existing link.  This is done because the References\n                     header line may have been truncated by a Mail User\n                     Agent (MUA).  As a result, there is no guarantee\n                     that the messages corresponding to adjacent Message\n                     IDs in the References header line are parent and\n                     child.\n\n                     Do not create a parent/child link if creating that\n                     link would introduce a loop.  For example, before\n                     making message A the parent of B, make sure that A\n                     is not a descendent of B.\n\n                        Note: Message ID comparisons are case-sensitive.\n\n             (B) Create a parent/child link between the last reference\n                 (or NIL if there are no references) and the current\n                 message.  If the current message already has a parent,\n                 it is probably the result of a truncated References\n                 header line, so break the current parent/child link\n                 before creating the new correct one.  As in step 1.A,\n\n\n\nCrispin & Murchison         Standards Track                     [Page 9]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n                 do not create the parent/child link if creating that\n                 link would introduce a loop.  Note that if this message\n                 has no references, it will now have no parent.\n\n                    Note: The parent/child links created in steps 1.A\n                    and 1.B MUST be kept consistent with one another at\n                    ALL times.\n\n         (2) Gather together all of the messages that have no parents\n             and make them all children (siblings of one another) of a\n             dummy parent (the \"root\").  These messages constitute the\n             first (head) message of the threads created thus far.\n\n         (3) Prune dummy messages from the thread tree.  Traverse each\n             thread under the root, and for each message:\n\n                 If it is a dummy message with NO children, delete it.\n\n                 If it is a dummy message with children, delete it, but\n                 promote its children to the current level.  In other\n                 words, splice them in with the dummy's siblings.\n\n                 Do not promote the children if doing so would make them\n                 children of the root, unless there is only one child.\n\n         (4) Sort the messages under the root (top-level siblings only)\n             by sent date as described in section 2.2.  In the case of a\n             dummy message, sort its children by sent date and then use\n             the first child for the top-level sort.\n\n         (5) Gather together messages under the root that have the same\n             base subject text.\n\n             (A) Create a table for associating base subjects with\n                 messages, called the subject table.\n\n             (B) Populate the subject table with one message per each\n                 base subject.  For each child of the root:\n\n                 (i)   Find the subject of this thread, by using the\n                       base subject from either the current message or\n                       its first child if the current message is a\n                       dummy.  This is the thread subject.\n\n                 (ii)  If the thread subject is empty, skip this\n                       message.\n\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 10]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n                 (iii) Look up the message associated with the thread\n                       subject in the subject table.\n\n                 (iv)  If there is no message in the subject table with\n                       the thread subject, add the current message and\n                       the thread subject to the subject table.\n\n                       Otherwise, if the message in the subject table is\n                       not a dummy, AND either of the following criteria\n                       are true:\n\n                           The current message is a dummy, OR\n\n                           The message in the subject table is a reply\n                           or forward and the current message is not.\n\n                       then replace the message in the subject table\n                       with the current message.\n\n             (C) Merge threads with the same thread subject.  For each\n                 child of the root:\n\n                 (i)   Find the message's thread subject as in step\n                       5.B.i above.\n\n                 (ii)  If the thread subject is empty, skip this\n                       message.\n\n                 (iii) Lookup the message associated with this thread\n                       subject in the subject table.\n\n                 (iv)  If the message in the subject table is the\n                       current message, skip this message.\n\n                 Otherwise, merge the current message with the one in\n                 the subject table using the following rules:\n\n                     If both messages are dummies, append the current\n                     message's children to the children of the message\n                     in the subject table (the children of both messages\n                     become siblings), and then delete the current\n                     message.\n\n                     If the message in the subject table is a dummy and\n                     the current message is not, make the current\n                     message a child of the message in the subject table\n                     (a sibling of its children).\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 11]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n                     If the current message is a reply or forward and\n                     the message in the subject table is not, make the\n                     current message a child of the message in the\n                     subject table (a sibling of its children).\n\n                     Otherwise, create a new dummy message and make both\n                     the current message and the message in the subject\n                     table children of the dummy.  Then replace the\n                     message in the subject table with the dummy\n                     message.\n\n                        Note: Subject comparisons are case-insensitive,\n                        as described under \"Internationalization\n                        Considerations\".\n\n         (6) Traverse the messages under the root and sort each set of\n             siblings by sent date as described in section 2.2.\n             Traverse the messages in such a way that the \"youngest\" set\n             of siblings are sorted first, and the \"oldest\" set of\n             siblings are sorted last (grandchildren are sorted before\n             children, etc).  In the case of a dummy message (which can\n             only occur with top-level siblings), use its first child\n             for sorting.\n\n   Example:    C: A283 THREAD ORDEREDSUBJECT UTF-8 SINCE 5-MAR-2000\n               S: * THREAD (166)(167)(168)(169)(172)(170)(171)\n                  (173)(174 (175)(176)(178)(181)(180))(179)(177\n                  (183)(182)(188)(184)(185)(186)(187)(189))(190)\n                  (191)(192)(193)(194 195)(196 (197)(198))(199)\n                  (200 202)(201)(203)(204)(205)(206 207)(208)\n               S: A283 OK THREAD completed\n               C: A284 THREAD ORDEREDSUBJECT US-ASCII TEXT \"gewp\"\n               S: * THREAD\n               S: A284 OK THREAD completed\n               C: A285 THREAD REFERENCES UTF-8 SINCE 5-MAR-2000\n               S: * THREAD (166)(167)(168)(169)(172)((170)(179))\n                  (171)(173)((174)(175)(176)(178)(181)(180))\n                  ((177)(183)(182)(188 (184)(189))(185 186)(187))\n                  (190)(191)(192)(193)((194)(195 196))(197 198)\n                  (199)(200 202)(201)(203)(204)(205 206 207)(208)\n               S: A285 OK THREAD completed\n\n             Note: The line breaks in the first and third server\n             responses are for editorial clarity and do not appear in\n             real THREAD responses.\n\n\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 12]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n4.  Additional Responses\n\n   These responses are extensions to the [IMAP] base protocol.\n\n   The section headings of these responses are intended to correspond\n   with where they would be located in the main document.\n\nBASE.7.2.SORT. SORT Response\n\n   Data:       zero or more numbers\n\n      The SORT response occurs as a result of a SORT or UID SORT\n      command.  The number(s) refer to those messages that match the\n      search criteria.  For SORT, these are message sequence numbers;\n      for UID SORT, these are unique identifiers.  Each number is\n      delimited by a space.\n\n   Example:    S: * SORT 2 3 6\n\nBASE.7.2.THREAD. THREAD Response\n\n   Data:       zero or more threads\n\n      The THREAD response occurs as a result of a THREAD or UID THREAD\n      command.  It contains zero or more threads.  A thread consists of\n      a parenthesized list of thread members.\n\n      Thread members consist of zero or more message numbers, delimited\n      by spaces, indicating successive parent and child.  This continues\n      until the thread splits into multiple sub-threads, at which point,\n      the thread nests into multiple sub-threads with the first member\n      of each sub-thread being siblings at this level.  There is no\n      limit to the nesting of threads.\n\n      The messages numbers refer to those messages that match the search\n      criteria.  For THREAD, these are message sequence numbers; for UID\n      THREAD, these are unique identifiers.\n\n   Example:    S: * THREAD (2)(3 6 (4 23)(44 7 96))\n\n      The first thread consists only of message 2.  The second thread\n      consists of the messages 3 (parent) and 6 (child), after which it\n      splits into two sub-threads; the first of which contains messages\n      4 (child of 6, sibling of 44) and 23 (child of 4), and the second\n      of which contains messages 44 (child of 6, sibling of 4), 7 (child\n      of 44), and 96 (child of 7).  Since some later messages are\n      parents of earlier messages, the messages were probably moved from\n      some other mailbox at different times.\n\n\n\nCrispin & Murchison         Standards Track                    [Page 13]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n            -- 2\n\n            -- 3\n               \\-- 6\n                   |-- 4\n                   |   \\-- 23\n                   |\n                   \\-- 44\n                        \\-- 7\n                            \\-- 96\n\n   Example:    S: * THREAD ((3)(5))\n\n      In this example, 3 and 5 are siblings of a parent that does not\n      match the search criteria (and/or does not exist in the mailbox);\n      however they are members of the same thread.\n\n5.  Formal Syntax of SORT and THREAD Commands and Responses\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].  It also uses [ABNF]\n   rules defined in [IMAP].\n\nsort            = [\"UID\" SP] \"SORT\" SP sort-criteria SP search-criteria\n\nsort-criteria   = \"(\" sort-criterion *(SP sort-criterion) \")\"\n\nsort-criterion  = [\"REVERSE\" SP] sort-key\n\nsort-key        = \"ARRIVAL\" / \"CC\" / \"DATE\" / \"FROM\" / \"SIZE\" /\n                  \"SUBJECT\" / \"TO\"\n\nthread          = [\"UID\" SP] \"THREAD\" SP thread-alg SP search-criteria\n\nthread-alg      = \"ORDEREDSUBJECT\" / \"REFERENCES\" / thread-alg-ext\n\nthread-alg-ext  = atom\n                    ; New algorithms MUST be registered with IANA\n\nsearch-criteria = charset 1*(SP search-key)\n\ncharset         = atom / quoted\n                    ; CHARSET values MUST be registered with IANA\n\nsort-data       = \"SORT\" *(SP nz-number)\n\nthread-data     = \"THREAD\" [SP 1*thread-list]\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 14]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\nthread-list     = \"(\" (thread-members / thread-nested) \")\"\n\nthread-members  = nz-number *(SP nz-number) [SP thread-nested]\n\nthread-nested   = 2*thread-list\n\n   The following syntax describes base subject extraction rules (2)-(6):\n\nsubject         = *subj-leader [subj-middle] *subj-trailer\n\nsubj-refwd      = (\"re\" / (\"fw\" [\"d\"])) *WSP [subj-blob] \":\"\n\nsubj-blob       = \"[\" *BLOBCHAR \"]\" *WSP\n\nsubj-fwd        = subj-fwd-hdr subject subj-fwd-trl\n\nsubj-fwd-hdr    = \"[fwd:\"\n\nsubj-fwd-trl    = \"]\"\n\nsubj-leader     = (*subj-blob subj-refwd) / WSP\n\nsubj-middle     = *subj-blob (subj-base / subj-fwd)\n                    ; last subj-blob is subj-base if subj-base would\n                    ; otherwise be empty\n\nsubj-trailer    = \"(fwd)\" / WSP\n\nsubj-base       = NONWSP *(*WSP NONWSP)\n                    ; can be a subj-blob\n\nBLOBCHAR        = %x01-5a / %x5c / %x5e-ff\n                    ; any CHAR8 except '[' and ']'.\n                    ; SHOULD comply with [UTF-8]\n\nNONWSP          = %x01-08 / %x0a-1f / %x21-ff\n                    ; any CHAR8 other than WSP.\n                    ; SHOULD comply with [UTF-8]\n\n6.  Security Considerations\n\n   The SORT and THREAD extensions do not raise any security\n   considerations that are not present in the base [IMAP] protocol, and\n   these issues are discussed in [IMAP].  Nevertheless, it is important\n   to remember that [IMAP] protocol transactions, including message\n   data, are sent in the clear over the network unless protection from\n   snooping is negotiated, either by the use of STARTTLS, privacy\n   protection in AUTHENTICATE, or some other protection mechanism.\n\n\n\nCrispin & Murchison         Standards Track                    [Page 15]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n   Although not a security consideration, it is important to recognize\n   that sorting by REFERENCES can lead to misleading threading trees.\n   For example, a message with false References: header data will cause\n   a thread to be incorporated into another thread.\n\n   The process of extracting the base subject may lead to incorrect\n   collation if the extracted data was significant text as opposed to a\n   subject artifact.\n\n7.  Internationalization Considerations\n\n   As stated in the introduction, the rules of I18NLEVEL=1 as described\n   in [IMAP-I18N] MUST be followed; that is, the SORT and THREAD\n   extensions MUST collate strings according to the i;unicode-casemap\n   collation described in [UNICASEMAP].  Servers SHOULD also advertise\n   the I18NLEVEL=1 extension.  Alternatively, a server MAY implement\n   I18NLEVEL=2 (or higher) and comply with the rules of that level.\n\n   As discussed in [IMAP-I18N] section 4.5, all server implementations\n   should eventually be updated to support the [IMAP-I18N] I18NLEVEL=2\n   extension.\n\n   Translations of the \"re\" or \"fw\"/\"fwd\" tokens are not specified for\n   removal in the base subject extraction process.  An attempt to add\n   such translated tokens would result in a geometrically complex, and\n   ultimately unimplementable, task.\n\n   Instead, note that [RFC2822] section 3.6.5 recommends that \"re:\"\n   (from the Latin \"res\", meaning \"in the matter of\") be used to\n   identify a reply.  Although it is evident that, from the multiple\n   forms of token to identify a forwarded message, there is considerable\n   variation found in the wild, the variations are (still) manageable.\n   Consequently, it is suggested that \"re:\" and one of the variations of\n   the tokens for a forward supported by the base subject extraction\n   rules be adopted for Internet mail messages, since doing so makes it\n   a simple display-time task to localize the token language for the\n   user.\n\n8.  IANA Considerations\n\n   [IMAP] capabilities are registered by publishing a standards track or\n   IESG-approved experimental RFC.  This document constitutes\n   registration of the SORT and THREAD capabilities in the [IMAP]\n   capabilities registry.\n\n\n\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 16]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\n   This document creates a new [IMAP] threading algorithms registry,\n   which registers threading algorithms by publishing a standards track\n   or IESG-approved experimental RFC.  This document constitutes\n   registration of the ORDEREDSUBJECT and REFERENCES algorithms in that\n   registry.\n\n9.  Normative References\n\n   [ABNF]        Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n                 Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n                 2008.\n\n   [CHARSET]     Freed, N. and J. Postel, \"IANA Charset Registration\n                 Procedures\", BCP 19, RFC 2978, October 2000.\n\n   [IMAP]        Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL -\n                 VERSION 4rev1\", RFC 3501, March 2003.\n\n   [IMAP-I18N]   Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n                 Message Access Protocol Internationalization\", RFC\n                 5255, June 2008.\n\n   [KEYWORDS]    Bradner, S., \"Key words for use in RFCs to Indicate\n                 Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2822]     Resnick, P., Ed., \"Internet Message Format\", RFC 2822,\n                 April 2001.\n\n   [UNICASEMAP]  Crispin, M., \"i;unicode-casemap - Simple Unicode\n                 Collation Algorithm\", RFC 5051, October 2007.\n\n   [UTF-8]       Yergeau, F., \"UTF-8, a transformation format of ISO\n                 10646\", STD 63, RFC 3629, November 2003.\n\n10.  Informative References\n\n   [IMAP-MODELS] Crispin, M., \"Distributed Electronic Mail Models in\n                 IMAP4\", RFC 1733, December 1994.\n\n   [THREADING]   Zawinski, J. \"Message Threading\",\n                 http://www.jwz.org/doc/threading.html, 1997-2002.\n\n\n\n\n\n\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 17]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\nAuthors' Addresses\n\n   Mark R. Crispin\n   Panda Programming\n   6158 NE Lariat Loop\n   Bainbridge Island, WA 98110-2098\n\n   Phone: +1 (206) 842-2385\n   EMail: IMAP+SORT+THREAD@Lingling.Panda.COM\n\n\n   Kenneth Murchison\n   Carnegie Mellon University\n   5000 Forbes Avenue\n   Cyert Hall 285\n   Pittsburgh, PA  15213\n\n   Phone: +1 (412) 268-2638\n   EMail: murch@andrew.cmu.edu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 18]\n\f\nRFC 5256                       IMAP Sort                       June 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nCrispin & Murchison         Standards Track                    [Page 19]\n\f\n"
  },
  {
    "path": "rfc/rfc5257.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           C. Daboo\nRequest for Comments: 5257                                    Apple Inc.\nCategory: Experimental                                        R. Gellens\n                                                   QUALCOMM Incorporated\n                                                               June 2008\n\n\n         Internet Message Access Protocol - ANNOTATE Extension\n\nStatus of This Memo\n\n   This memo defines an Experimental Protocol for the Internet\n   community.  It does not specify an Internet standard of any kind.\n   Discussion and suggestions for improvement are requested.\n   Distribution of this memo is unlimited.\n\nAbstract\n\n   The ANNOTATE extension to the Internet Message Access Protocol\n   permits clients and servers to maintain \"meta data\" for messages, or\n   individual message parts, stored in a mailbox on the server.  For\n   example, this can be used to attach comments and other useful\n   information to a message.  It is also possible to attach annotations\n   to specific parts of a message, so that, for example, they could be\n   marked as seen, or important, or a comment added.\n\n   Note that this document was the product of a WG that had good\n   consensus on how to approach the problem.  Nevertheless, the WG felt\n   it did not have enough information on implementation and deployment\n   hurdles to meet all of the requirements of a Proposed Standard.  The\n   IETF solicits implementations and implementation reports in order to\n   make further progress.\n\n   Implementers should be aware that this specification may change in an\n   incompatible manner when going to Proposed Standard status.  However,\n   any incompatible changes will result in a new capability name being\n   used to prevent problems with any deployments of the experimental\n   extension.\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                      [Page 1]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\nTable of Contents\n\n   1. Introduction and Overview .......................................3\n   2. Conventions Used in This Document ...............................4\n   3. Data Model ......................................................4\n      3.1. Overview ...................................................4\n      3.2. Namespace of Entries and Attributes ........................4\n           3.2.1. Entry Names .........................................5\n           3.2.2. Attribute Names .....................................7\n      3.3. Private Versus Shared ......................................7\n      3.4. Access Control .............................................8\n      3.5. Access to Standard IMAP Flags and Keywords ................11\n   4. IMAP Protocol Changes ..........................................11\n      4.1. General Considerations ....................................11\n      4.2. ANNOTATE Parameter with the SELECT/EXAMINE Commands .......12\n      4.3. ANNOTATION Message Data Item in FETCH Command .............12\n      4.4. ANNOTATION Message Data Item in FETCH Response ............14\n      4.5. ANNOTATION Message Data Item in STORE .....................16\n      4.6. ANNOTATION Interaction with COPY ..........................18\n      4.7. ANNOTATION Message Data Item in APPEND ....................18\n      4.8. ANNOTATION Criterion in SEARCH ............................19\n      4.9. ANNOTATION Key in SORT ....................................20\n      4.10. New ACL Rights ...........................................21\n   5. Formal Syntax ..................................................21\n   6. IANA Considerations ............................................23\n      6.1. Entry and Attribute Registration Template .................23\n      6.2. Entry Registrations .......................................24\n           6.2.1. /comment ...........................................24\n           6.2.2. /flags .............................................24\n           6.2.3. /altsubject ........................................25\n           6.2.4. /<section-part>/comment ............................25\n           6.2.5. /<section-part>/flags/seen .........................26\n           6.2.6. /<section-part>/flags/answered .....................26\n           6.2.7. /<section-part>/flags/flagged ......................27\n           6.2.8. /<section-part>/flags/forwarded ....................27\n      6.3. Attribute Registrations ...................................28\n           6.3.1. value ..............................................28\n           6.3.2. size ...............................................28\n      6.4. Capability Registration ...................................28\n   7. Internationalization Considerations ............................29\n   8. Security Considerations ........................................29\n   9. References .....................................................29\n      9.1. Normative References ......................................29\n      9.2. Informative References ....................................30\n   10. Acknowledgments ...............................................30\n\n\n\n\n\n\nDaboo & Gellens               Experimental                      [Page 2]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n1.  Introduction and Overview\n\n   The ANNOTATE extension is present in any IMAP [RFC3501]\n   implementation that returns \"ANNOTATE-EXPERIMENT-1\" as one of the\n   supported capabilities in the CAPABILITY response.\n\n   This extension makes the following changes to the IMAP protocol:\n\n     a.  adds a new ANNOTATION message data item for use in FETCH.\n\n     b.  adds a new ANNOTATION message data item for use in STORE.\n\n     c.  adds a new ANNOTATION search criterion for use in SEARCH.\n\n     d.  adds a new ANNOTATION sort key for use in the SORT extension.\n\n     e.  adds a new ANNOTATION data item for use in APPEND.\n\n     f.  adds a new requirement on the COPY command.\n\n     g.  adds a new ANNOTATE parameter for use with the SELECT/EXAMINE\n         commands.\n\n     h.  adds two new response codes to indicate store failures of\n         annotations.\n\n     i.  adds a new untagged response code for the SELECT or EXAMINE\n         commands to indicate the maximum sized annotation that can be\n         stored.\n\n     j.  adds a new Access Control List (ACL) \"bit\" for use with the ACL\n         extensions [RFC2086] and [RFC4314].\n\n   The data model used for the storage of annotations is based on the\n   Application Configuration Access Protocol [RFC2244].  Note that there\n   is no inheritance in annotations.\n\n   If a server supports annotations, then it MUST store all annotation\n   data permanently, i.e., there is no concept of \"session only\"\n   annotations that would correspond to the behavior of \"session\" flags\n   as defined in the IMAP base specification.\n\n   In order to provide optimum support for a disconnected client (one\n   that needs to synchronize annotations for use when offline), servers\n   SHOULD also support the Conditional STORE [RFC4551] extension.\n\n   The rest of this document describes the data model and protocol\n   changes more rigorously.\n\n\n\nDaboo & Gellens               Experimental                      [Page 3]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n2.  Conventions Used in This Document\n\n   The examples in this document use \"C:\" and \"S:\" to indicate lines\n   sent by the client and server, respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n3.  Data Model\n\n3.1.  Overview\n\n   The data model for annotations in ANNOTATE uses a uniquely named\n   entry that contains a set of standard attributes.  Thus, a single\n   coherent unit of \"meta data\" for a message is stored as a single\n   entry, made up of several attributes.\n\n   For example, a comment annotation added to a message has an entry\n   name of \"/comment\".  This entry is composed of several attributes\n   such as \"value\", \"size\", etc., that contain the properties and data\n   of the entry.\n\n   The protocol changes to IMAP, described below, allow a client to\n   access or change the values of any attribute in any entry in a\n   message annotation, assuming it has sufficient access rights to do so\n   (see Section 3.4 for specifics).\n\n3.2.  Namespace of Entries and Attributes\n\n   A message may contain zero or more annotations, each of which is a\n   single uniquely named entry.  Each entry has a hierarchical name,\n   with each component of the name separated by a slash (\"/\").  An entry\n   name MUST NOT contain two consecutive \"/\" characters and MUST NOT end\n   with a \"/\" character.\n\n   Each entry is made up of a set of attributes.  Each attribute has a\n   hierarchical name, with each component of the name separated by a\n   period (\".\").  An attribute name MUST NOT contain two consecutive \".\"\n   characters and MUST NOT end with a \".\" character.\n\n   The value of an attribute is \"NIL\" (has no value), or is a string of\n   zero or more octets.\n\n   Entry and attribute names MUST NOT contain asterisk (\"*\") or percent\n   (\"%\") characters, and MUST NOT contain non-ASCII characters or the\n   NULL octet.  Invalid entry or attribute names result in a BAD\n   response in any IMAP commands where they are used.\n\n\n\nDaboo & Gellens               Experimental                      [Page 4]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Attribute names MUST NOT contain any hierarchical components with the\n   names \"priv\" or \"shared\", as those have special meaning (see Section\n   3.3).\n\n   Entry and attribute names are case-sensitive.\n\n   Use of control or punctuation characters in entry and attribute names\n   is strongly discouraged.\n\n   This specification defines an initial set of entry and attribute\n   names available for use in message annotations.  In addition, an\n   extension mechanism is described to allow additional names to be\n   added as needed.\n\n3.2.1.  Entry Names\n\n   Entry names MUST be specified in a standards track or IESG approved\n   experimental RFC, or fall under the vendor namespace.  See Section\n   6.1 for the registration template.\n\n   /\n      Defines the top-level of entries associated with an entire\n      message.  This entry itself does not contain any attributes.  All\n      entries that start with a numeric character (\"0\" - \"9\") refer to\n      an annotation on a specific body part.  All other entries are for\n      annotations on the entire message.\n\n   /comment\n      Defines a comment or note associated with an entire message.\n\n   /flags\n      This entry hierarchy is reserved for future use.\n\n   /altsubject\n      Contains text supplied by the message recipient to be used by the\n      client, instead of the original message Subject.\n\n   /vendor/<vendor-token>\n      Defines the top-level of entries associated with an entire message\n      as created by a particular product of some vendor.  These sub-\n      entries can be used by vendors to provide client-specific\n      annotations.  The vendor-token MUST be registered with IANA, using\n      the [RFC2244] vendor subtree registry.\n\n   /<section-part>\n      Defines the top-level of entries associated with a specific body\n      part of a message.  This entry itself does not contain any\n      attributes.  The section-part is a numeric part specifier.  Its\n\n\n\nDaboo & Gellens               Experimental                      [Page 5]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n      syntax is the same as the section-part ABNF element defined in\n      [RFC3501].  The server MUST return a BAD response if the client\n      uses an incorrect part specifier (either incorrect syntax or a\n      specifier referring to a non-existent part).  The server MUST\n      return a BAD response if the client uses an empty part specifier\n      (which is used in IMAP to represent the entire message).\n\n   /<section-part>/comment\n      Defines a comment or note associated with a specific body part of\n      a message.\n\n   /<section-part>/flags\n      Defines the top-level of entries associated with the flag state\n      for a specific body part of a message.  All sub-entries are\n      maintained entirely by the client.  There is no implicit change to\n      any flag by the server.\n\n          /<section-part>/flags/seen\n             This is similar to the IMAP \\Seen flag, except it applies\n             to only the body part referenced by the entry.\n\n          /<section-part>/flags/answered\n             This is similar to the IMAP \\Answered flag, except it\n             applies to only the body part referenced by the entry.\n\n          /<section-part>/flags/flagged\n             This is similar to the IMAP \\Flagged flag, except it\n             applies to only the body part referenced by the entry.\n\n          /<section-part>/flags/forwarded\n             This is similar to the IMAP $Forwarded keyword, except it\n             applies to only the body part referenced by the entry.\n\n      Defines flags for a specific body part of a message.  The \"value\"\n      attribute of each of the entries described above must be either\n      \"1\", \"0\", or \"NIL\".  \"1\" corresponds to the flag being set.\n\n   /<section-part>/vendor/<vendor-token>\n      Defines the top-level of entries associated with a specific body\n      part of a message as created by a particular product of some\n      vendor.  This entry can be used by vendors to provide client\n      specific annotations.  The vendor-token MUST be registered with\n      IANA.\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                      [Page 6]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n3.2.2.  Attribute Names\n\n   Attribute names MUST be specified in a standards track or IESG\n   approved experimental RFC.  See Section 6.1 for the registration\n   template.\n\n   All attribute names implicitly have a \".priv\" and a \".shared\" suffix\n   that maps to private and shared versions of the entry.  Searching or\n   fetching without using either suffix will include both.  The client\n   MUST specify either a \".priv\" or \".shared\" suffix when storing an\n   annotation or sorting on annotations.\n\n   value\n      A string or binary data representing the value of the annotation.\n      To delete an annotation, the client can store \"NIL\" into the\n      value.  If the client requests the value attribute for a non-\n      existent entry, then the server MUST return \"NIL\" for the value.\n      The content represented by the string is determined by the\n      content-type used to register the entry (see Section 6.1 for entry\n      registration templates).  Where applicable, the registered\n      content-type MUST include a charset parameter.  Text values SHOULD\n      use the utf-8 [RFC3629] character set.  Note that binary data\n      (data which may contain the NULL octet) is allowed (e.g., for\n      storing images), and this extension uses the \"literal8\" syntax\n      element [RFC4466] to allow such data to be written to or read from\n      the server.\n\n   size\n      The size of the value, in octets.  Set automatically by the\n      server, read-only to clients.  If the client requests the size\n      attribute for a non-existent entry, then the server MUST return\n      \"0\" (zero) for the size.\n\n3.3.  Private Versus Shared\n\n   Some IMAP mailboxes are private, accessible only to the owning user.\n   Other mailboxes are not, either because the owner has set an ACL\n   [RFC4314] that permits access by other users, or because it is a\n   shared mailbox.\n\n   This raises the issue of shared versus private annotations.\n\n   If all annotations are private, it is then impossible to have\n   annotations in a shared or otherwise non-private mailbox be visible\n   to other users.  This eliminates what could be a useful aspect of\n   annotations in a shared environment.  An example of such use is a\n   shared IMAP folder containing bug reports.  Engineers may want to use\n\n\n\n\nDaboo & Gellens               Experimental                      [Page 7]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   annotations to add information to existing messages, indicate\n   assignments, status, etc.  This use requires shared annotations.\n\n   If all annotations are shared, it is impossible to use annotations\n   for private notes on messages in shared mailboxes.  Also, modifying\n   an ACL to permit access to a mailbox by other users may\n   unintentionally expose private information.\n\n   There are also situations in which both shared and private\n   annotations are useful.  For example, an administrator may want to\n   set shared annotations on messages in a shared folder, which\n   individual users may wish to supplement with additional notes.\n\n   If shared and private annotations are to coexist, we need a clear way\n   to differentiate them.  Also, it should be as easy as possible for a\n   client to access both and not overlook either.  There is also a\n   danger in allowing a client to store an annotation without knowing if\n   it is shared or private.\n\n   This document proposes two standard suffixes for all attributes:\n   \".shared\" and \".priv\".  A SEARCH or FETCH command that specifies\n   neither, uses both.  STORE, APPEND, and SORT commands MUST explicitly\n   use \".priv\" or \".shared\" suffixes.\n\n   If the ANNOTATE extension is present, support for shared annotations\n   in servers is REQUIRED, while support for private annotations in\n   servers is OPTIONAL.  This recognizes the fact that support for\n   private annotations may introduce a significant increase in\n   complexity to a server in terms of tracking ownership of the\n   annotations, how quota is determined for users based on their own\n   annotations, etc.  Clients that support the ANNOTATE extension MUST\n   handle both shared and private annotations.\n\n3.4.  Access Control\n\n   A user needs to have appropriate rights in order to read or write\n   \".priv\" or \".shared\" annotation values.  How those rights are\n   calculated depends on whether or not the ACL [RFC2086] extension or\n   its update [RFC4314] is present.  If a client attempts to store or\n   fetch an annotation to which they do not have the appropriate rights,\n   the server MUST respond with a NO response.\n\n   When the ACL extension is not present, access to annotation values is\n   governed by the nature of the selected state, in particular whether\n   the mailbox was SELECTED or EXAMINED in READ-ONLY or READ-WRITE mode.\n\n\n\n\n\n\nDaboo & Gellens               Experimental                      [Page 8]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   When the ACL extension is present, the server MUST recognize the new\n   ACL \"n\" right, in addition to the ones defined by the ACL extension\n   itself.\n\n   For \".priv\" annotation values, the \"r\" right controls both read and\n   write access.  When it is on, access to \".priv\" annotations is\n   allowed; when it is off, access to \".priv\" annotations is disallowed.\n\n   For \".shared\" annotation values, the \"r\" right controls read access.\n   When it is on, \".shared\" annotations can be read; when it is off,\n   \".shared\" annotations cannot be read.\n\n   For \".shared\" annotation values, the \"n\" right controls write access.\n   When it is on, \".shared\" annotations can be changed or created\n   through either a STORE or APPEND command; when it is off, \".shared\"\n   annotations cannot be changed or created.  The \"n\" right constitutes\n   a \"shared flag right\" as defined in Section 6.2 of [RFC4314].\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                      [Page 9]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   A summary of all the access control restrictions is tabulated below\n\n   +---------------+---------------+-----------------------------------+\n   |  Server Type  | Action on     | Type of mailbox                   |\n   |               | annotation    |                                   |\n   +===============+===============+===================================+\n   |               |               |                                   |\n   |               | read .priv    | Any mailbox that can be SELECTED  |\n   |               | values        | or EXAMINED.                      |\n   |               |               |                                   |\n   |               +---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | write .priv   | Any SELECTED [READ-WRITE] mailbox.|\n   |               | values        | SELECTED [READ-ONLY] mailboxes MAY|\n   | Server        |               | also permit writes.               |\n   | without       |               |                                   |\n   | ACL Extension +---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | read .shared  | Any mailbox that can be SELECTED  |\n   |               | values        | or EXAMINED.                      |\n   |               |               |                                   |\n   |               +---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | write .shared | Any mailbox that can be SELECTED  |\n   |               | values        | or EXAMINED and is [READ-WRITE].  |\n   |               |               |                                   |\n   +---------------+---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | read .priv    | Any mailbox with the \"r\"          |\n   |               | values        | ACL right.                        |\n   |               |               |                                   |\n   |               +---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | write .priv   | Any mailbox with the \"r\"          |\n   | Server        | values        | ACL right.                        |\n   | with          |               |                                   |\n   | ACL Extension +---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | read .shared  | Any mailbox with the \"r\"          |\n   |               | values        | ACL right.                        |\n   |               |               |                                   |\n   |               +---------------+-----------------------------------+\n   |               |               |                                   |\n   |               | write .shared | Any mailbox with the \"n\"          |\n   |               | values        | ACL right.                        |\n   |               |               |                                   |\n   +---------------+---------------+-----------------------------------+\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 10]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n3.5.  Access to Standard IMAP Flags and Keywords\n\n   Due to the ambiguity of how private and shared values would map to\n   the base IMAP flag and keyword values, the ANNOTATE extension does\n   not expose IMAP flags or keywords as entries.  However, the /flags\n   annotation entry is reserved for future use and MUST NOT be used by\n   clients or servers supporting this extension.\n\n   Clients that need to implement shared and private \"flags\" can create\n   their own annotation entries for those, completely bypassing the base\n   IMAP flag/keyword behavior.\n\n4.  IMAP Protocol Changes\n\n4.1.  General Considerations\n\n   Servers may be able to offer only a limited level of support for\n   annotations in mailboxes, and it is useful for clients to be able to\n   know what level of support is available.  Servers MUST return an\n   ANNOTATIONS response code during the SELECT or EXAMINE command for a\n   mailbox to indicate the level of support.  Possible data items used\n   with the ANNOTATIONS response code are:\n\n      \"NONE\" - this indicates that the mailbox being selected does not\n      support annotations at all.  Clients MUST NOT attempt to use\n      annotation extensions in commands for this mailbox.\n\n      \"READ-ONLY\" - this indicates that the annotations supported by the\n      mailbox cannot be changed by the client.  Clients MUST NOT attempt\n      to store annotations on any messages in a mailbox with this\n      response code.\n\n      \"NOPRIVATE\" - this indicates that the server does not support\n      private annotations on the mailbox.  Only shared annotations are\n      supported.  Clients SHOULD only attempt to read or store\n      annotations attributes with the \".shared\" suffix.  If a client\n      uses an attribute with the \".priv\" suffix in a FETCH command, then\n      servers should return the attribute value in the FETCH response as\n      \"NIL\".  If a client uses an attribute with the \".priv\" suffix in a\n      STORE command (or an APPEND command targeted at the mailbox), then\n      the server MUST return a NO response.\n\n      numeric values - if servers support writable annotations, then the\n      server MUST indicate the maximum size in octets for an annotation\n      value by providing the maximum size value in the response code.\n      Clients MUST NOT store annotation values of a size greater than\n      the amount indicated by the server.  Servers MUST accept a minimum\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 11]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n      annotation data size of at least 1024 octets if annotations can be\n      written.\n\n   In addition, the server MAY limit the total number of annotations for\n   a single message.  However, the server MUST provide a minimum\n   annotation count per message of at least 10.\n\n4.2.  ANNOTATE Parameter with the SELECT/EXAMINE Commands\n\n   The ANNOTATE extension defines a single optional SELECT parameter\n   [RFC4466] \"ANNOTATE\", which is used to turn on unsolicited responses\n   for annotations as described in Section 4.4.  This optional parameter\n   results in a per-mailbox state change, i.e., it must be used in each\n   SELECT/EXAMINE command in order to be effective, irrespective of\n   whether it was used in a previous SELECT/EXAMINE during the same\n   session.\n\n   Example:\n\n         C: a SELECT INBOX (ANNOTATE)\n         S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n         S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n                                           \\Deleted \\Seen \\*)]\n         S: * 10268 EXISTS\n         S: * 1 RECENT\n         S: * OK [UNSEEN 10268]\n         S: * OK [UIDVALIDITY 890061587]\n         S: * OK [UIDNEXT 34643]\n         S: * OK [ANNOTATIONS 20480 NOPRIVATE]\n         S: a OK [READ-WRITE] Completed\n\n      In the above example, a SELECT command with the ANNOTATE parameter\n      is issued.  The response from the server includes the required\n      ANNOTATIONS response that indicates that the server supports\n      annotations up to a maximum size of 20480 octets, and does not\n      support private annotations (only shared).\n\n4.3.  ANNOTATION Message Data Item in FETCH Command\n\n   This extension adds an ANNOTATION message data item to the FETCH\n   command.  This allows clients to retrieve annotations for a range of\n   messages in the currently selected mailbox.\n\n   ANNOTATION <entry-specifier> <attribute-specifier>\n\n      The ANNOTATION message data item, when used by the client in the\n      FETCH command, takes an entry specifier and an attribute\n      specifier.\n\n\n\nDaboo & Gellens               Experimental                     [Page 12]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a FETCH 1 (ANNOTATION (/comment value))\n           S: * 1 FETCH (ANNOTATION (/comment\n                                       (value.priv \"My comment\"\n                                        value.shared \"Group note\")))\n           S: a OK Fetch complete\n\n      In the above example, the content of the \"value\" attribute for the\n      \"/comment\" entry is requested by the client and returned by the\n      server.  Since neither \".shared\" nor \".priv\" was specified, both\n      are returned.\n\n   \"*\" and \"%\" wild card characters can be used in entry specifiers to\n   match one or more characters at that position, with the exception\n   that \"%\" does not match the \"/\" hierarchy delimiter.  Thus, an entry\n   specifier of \"/%\" matches entries such as \"/comment\" and\n   \"/altsubject\", but not \"/1/comment\".\n\n   Example:\n\n           C: a UID FETCH 1123 (UID ANNOTATION\n                                (/* (value.priv size.priv)))\n           S: * 12 FETCH (UID 1123 ANNOTATION\n                  (/comment (value.priv \"My comment\"\n                                       size.priv \"10\")\n                   /altsubject (value.priv \"Rhinoceroses!\"\n                                       size.priv \"13\")\n                   /vendor/foobar/label.priv\n                                       (value.priv \"label43\"\n                                        size.priv \"7\")\n                   /vendor/foobar/personality\n                                       (value.priv \"Tallulah Bankhead\"\n                                        size.priv \"17\")))\n           S: a OK Fetch complete\n\n      In the above example, the contents of the private \"value\" and\n      \"size\" attributes for any entries in the \"/\" hierarchy are\n      requested by the client and returned by the server.\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 13]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a FETCH 1 (ANNOTATION (/% value.shared))\n           S: * 1 FETCH (ANNOTATION\n              (/comment (value.shared \"Patch Mangler\")\n               /altsubject (value.shared \"Patches?  We don't\n               need no steenkin patches!\")))\n           S: a OK Fetch complete\n\n      In the above example, the contents of the shared \"value\"\n      attributes for entries at the top level only of the \"/\" hierarchy\n      are requested by the client and returned by the server.\n\n   Entry and attribute specifiers can be lists of atomic specifiers, so\n   that multiple items of each type may be returned in a single FETCH\n   command.\n\n   Example:\n\n           C: a FETCH 1 (ANNOTATION\n                ((/comment /altsubject) value.priv))\n           S: * 1 FETCH (ANNOTATION\n                (/comment (value.priv \"What a chowder-head\")\n                 /altsubject (value.priv \"How to crush beer cans\")))\n           S: a OK Fetch complete\n\n      In the above example, the contents of the private \"value\"\n      attributes for the two entries \"/comment\" and \"/altsubject\" are\n      requested by the client and returned by the server.\n\n4.4.  ANNOTATION Message Data Item in FETCH Response\n\n   The ANNOTATION message data item in the FETCH response displays\n   information about annotations in a message.\n\n   ANNOTATION parenthesized list\n\n      The response consists of a list of entries, each of which have a\n      list of attribute-value pairs.\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 14]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a FETCH 1 (ANNOTATION (/comment value))\n           S: * 1 FETCH (ANNOTATION (/comment\n                                      (value.priv \"My comment\"\n                                       value.shared NIL)))\n           S: a OK Fetch complete\n\n      In the above example, a single entry with a single attribute-value\n      pair is returned by the server.  Since the client did not specify\n      a \".shared\" or \".priv\" suffix, both are returned.  Only the\n      private attribute has a value (the shared value is \"NIL\").\n\n   Example:\n\n           C: a FETCH 1 (ANNOTATION\n                ((/comment /altsubject) value))\n           S: * 1 FETCH (ANNOTATION\n                (/comment (value.priv \"My comment\"\n                                     value.shared NIL)\n                 /altsubject (value.priv \"My subject\"\n                                     value.shared NIL)))\n           S: a OK Fetch complete\n\n      In the above example, two entries, each with a single attribute-\n      value pair, are returned by the server.  Since the client did not\n      specify a \".shared\" or \".priv\" suffix, both are returned.  Only\n      the private attributes have values; the shared attributes are\n      \"NIL\".\n\n   Example:\n\n           C: a FETCH 1 (ANNOTATION\n                           (/comment (value size)))\n           S: * 1 FETCH (ANNOTATION\n                           (/comment\n                               (value.priv \"My comment\"\n                                value.shared NIL\n                                size.priv \"10\"\n                                size.shared \"0\")))\n           S: a OK Fetch complete\n\n      In the above example, a single entry with two attribute-value\n      pairs is returned by the server.  Since the client did not specify\n      a \".shared\" or \".priv\" suffix, both are returned.  Only the\n      private attributes have values; the shared attributes are \"NIL\".\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 15]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Servers SHOULD send ANNOTATION message data items in unsolicited\n   FETCH responses if an annotation entry is changed by a third-party,\n   and the ANNOTATE select parameter was used.  This allows servers to\n   keep clients updated with changes to annotations by other clients.\n\n   Unsolicited ANNOTATION responses MUST NOT include ANNOTATION data\n   values -- only the entry name of the ANNOTATION that has changed.\n   This restriction avoids sending ANNOTATION data values (which may be\n   large) to a client unless the client explicitly asks for the value.\n\n   Example:\n\n           C: a STORE 1 +FLAGS (\\Seen)\n           S: * 1 FETCH (FLAGS (\\Seen))\n                         ANNOTATION (/comment))\n           S: a OK STORE complete\n\n      In the above example, an unsolicited ANNOTATION response is\n      returned during a STORE command.  The unsolicited response\n      contains only the entry name of the annotation that changed, and\n      not its value.\n\n4.5.  ANNOTATION Message Data Item in STORE\n\n   ANNOTATION <parenthesized entry-attribute-value list>\n\n      Sets the specified list of entries by adding or replacing the\n      specified attributes with the values provided.  Clients can use\n      \"NIL\" for values of attributes it wants to remove from entries.\n\n   The ANNOTATION message data item used with the STORE command has an\n   implicit \".SILENT\" behavior.  This means the server does not generate\n   an untagged FETCH in response to the STORE command and assumes that\n   the client updates its own cache if the command succeeds.  Though\n   note, that if the Conditional STORE extension [RFC4551] is present,\n   then an untagged FETCH response with a MODSEQ data item will be\n   returned by the server as required by [RFC4551].\n\n   If the server is unable to store an annotation because the size of\n   its value is too large, the server MUST return a tagged NO response\n   with a \"[ANNOTATE TOOBIG]\" response code.\n\n   If the server is unable to store a new annotation because the maximum\n   number of allowed annotations has already been reached, the server\n   MUST return a tagged NO response with a \"[ANNOTATE TOOMANY]\" response\n   code.\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 16]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a STORE 1 ANNOTATION (/comment\n                                    (value.priv \"My new comment\"))\n           S: a OK Store complete\n\n      In the above example, the entry \"/comment\" is created (if not\n      already present).  Its private attribute \"value\" is created if not\n      already present, or replaced if it exists.  \"value.priv\" is set to\n      \"My new comment\".\n\n   Example:\n\n           C: a STORE 1 ANNOTATION (/comment\n                                    (value.shared NIL))\n           S: a OK Store complete\n\n      In the above example, the shared \"value\" attribute of the entry\n      \"/comment\" is removed by storing \"NIL\" into the attribute.\n\n   Multiple entries can be set in a single STORE command by listing\n   entry-attribute-value pairs in the list.\n\n   Example:\n\n           C: a STORE 1 ANNOTATION (/comment\n                                    (value.priv \"Get tix Tuesday\")\n                                    /altsubject\n                                    (value.priv \"Wots On\"))\n           S: a OK Store complete\n\n      In the above example, the entries \"/comment\" and \"/altsubject\" are\n      created (if not already present) and the private attribute \"value\"\n      is created or replaced for each entry.\n\n   Multiple attributes can be set in a single STORE command by listing\n   multiple attribute-value pairs in the entry list.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 17]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a STORE 1 ANNOTATION (/comment\n                                    (value.priv \"My new comment\"\n                                     value.shared \"foo's bar\"))\n           S: a OK Store complete\n\n      In the above example, the entry \"/comment\" is created (if not\n      already present) and the private and shared \"value\" attributes are\n      created if not already present, or replaced if they exist.\n\n4.6.  ANNOTATION Interaction with COPY\n\n   The COPY command can be used to move messages from one mailbox to\n   another on the same server.  Servers that support the ANNOTATION\n   extension MUST, for each message being copied, copy all \".priv\"\n   annotation data for the current user only, and all \".shared\"\n   annotation data along with the message to the new mailbox.  The only\n   exceptions to this are if the destination mailbox permissions are\n   such that either the \".priv\" or \".shared\" annotations are not\n   allowed, or if the destination mailbox is of a type that does not\n   support annotations or does not support storing of annotations (a\n   mailbox that returns a \"NONE\" or \"READ-ONLY\" response code in its\n   ANNOTATIONS response), or if the destination mailbox cannot support\n   the size of an annotation because it exceeds the ANNOTATIONS value.\n   Servers MUST NOT copy \".priv\" annotation data for users other than\n   the current user.\n\n4.7.  ANNOTATION Message Data Item in APPEND\n\n   ANNOTATION <parenthesized entry-attribute-value list>\n\n      Sets the specified list of entries and attributes in the resulting\n      message.\n\n   The APPEND command can include annotations for the message being\n   appended via the addition of a new append data item [RFC4466].  The\n   new data item can also be used with the multi-append [RFC3502]\n   extension that allows multiple messages to be appended via a single\n   APPEND command.\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 18]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a APPEND drafts ANNOTATION (/comment\n                (value.priv \"Don't send until I say so\")) {310}\n           S: + Ready for literal data\n           C: MIME-Version: 1.0\n           ...\n           C:\n           S: a OK APPEND completed\n\n      In the above example, a comment with a private value is added to a\n      new message appended to the mailbox.  The ellipsis represents the\n      bulk of the message.\n\n4.8.  ANNOTATION Criterion in SEARCH\n\n   ANNOTATION <entry-name> <attribute-name> <value>\n\n   The ANNOTATION criterion for the SEARCH command allows a client to\n   search for a specified string in the value of an annotation entry of\n   a message.\n\n   Messages that have annotations with entries matching <entry-name>,\n   attributes matching <attribute-name>, and the specified string\n   <value> in their values are returned in the SEARCH results.  The \"*\"\n   character can be used in the entry name field to match any content in\n   those items.  The \"%\" character can be used in the entry name field\n   to match a single level of hierarchy only.\n\n   Only the \"value\", \"value.priv\", and \"value.shared\" attributes can be\n   searched.  Clients MUST NOT specify an attribute other than either\n   \"value\", \"value.priv\", or \"value.shared\".  Servers MUST return a BAD\n   response if the client tries to search any other attribute.\n\n   Example:\n\n           C: a SEARCH ANNOTATION /comment value \"IMAP4\"\n           S: * SEARCH 2 3 5 7 11 13 17 19 23\n           S: a OK Search complete\n\n      In the above example, the message numbers of any messages\n      containing the string \"IMAP4\" in the shared or private \"value\"\n      attribute of the \"/comment\" entry are returned in the search\n      results.\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 19]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Example:\n\n           C: a SEARCH ANNOTATION * value.priv \"IMAP4\"\n           S: * SEARCH 1 2 3 5 8 13 21 34\n           S: a OK Search complete\n\n      In the above example, the message numbers of any messages\n      containing the string \"IMAP4\" in the private \"value\" attribute of\n      any entry are returned in the search results.\n\n4.9.  ANNOTATION Key in SORT\n\n   ANNOTATION <entry-name> <attribute-name>\n\n   The ANNOTATION criterion for the SORT command [RFC5256] instructs the\n   server to return the sequence numbers or Unique Identifiers (UIDs) of\n   messages in a mailbox, sorted using the values of the specified\n   annotations.  The ANNOTATION criterion is available if the server\n   returns both ANNOTATE-EXPERIMENT-1 and SORT as supported capabilities\n   in the CAPABILITY command response.\n\n   Messages are sorted using the values of the <attribute-name>\n   attributes in the <entry-name> entries.\n\n   Clients MUST provide either the \".priv\" or \".shared\" suffix to the\n   attribute name to ensure that the server knows which specific value\n   to sort on.\n\n   Only the \"value.priv\" and \"value.shared\" attributes can be used for\n   sorting.  Clients MUST NOT specify an attribute other than either\n   \"value.priv\" or \"value.shared\".  Servers MUST return a BAD response\n   if the client tries to sort on any other attribute.\n\n   When either \"value.priv\" or \"value.shared\" is being sorted, the\n   server MUST use the character set value specified in the SORT command\n   to determine the appropriate sort order.\n\n   Example:\n\n           C: a SORT (ANNOTATION /altsubject value.shared) UTF-8 ALL\n           S: * SORT 2 3 4 5 1 11 10 6 7 9 8\n           S: a OK Sort complete\n\n      In the above example, the message numbers of all messages are\n      returned, sorted according to the shared \"value\" attribute of the\n      \"/altsubject\" entry.\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 20]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   Note that the ANNOTATION sort key must include a fully specified\n   entry -- wild cards are not allowed.\n\n4.10.  New ACL Rights\n\n   As discussed in Section 3.4, this extension adds a new \"n\" right to\n   the list of rights provided by the ACL extensions [RFC2086] and\n   [RFC4314].\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].\n\n   Non-terminals referenced but not defined below are as defined by\n   [RFC3501] with the new definitions in [RFC4466] superseding those in\n   [RFC3501].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n      ann-size          = \"NONE\" /\n                           ((\"READ-ONLY\" / nz-number)\n                            [SP \"NOPRIVATE\"])\n                           ; response codes indicating the level of\n                           ; support for annotations in a mailbox\n\n      append-ext        =/ att-annotate\n                          ; modifies [RFC3501] extension behaviour\n\n      att-annotate      = \"ANNOTATION\" SP\n                               \"(\" entry-att *(SP entry-att) \")\"\n\n      att-search        = \"value\" / \"value.priv\" / \"value.shared\"\n                          ; the only attributes that can be searched\n\n      att-sort          = \"value.priv\" / \"value.shared\"\n                          ; the only attributes that can be sorted\n\n      att-value         = attrib SP value\n\n      attrib            = astring\n                          ; dot-separated attribute name\n                          ; MUST NOT contain \"*\" or \"%\"\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 21]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n      attribs           = attrib / \"(\" attrib *(SP attrib) \")\"\n                          ; one or more attribute specifiers\n\n      capability        =/ \"ANNOTATE-EXPERIMENT-1\"\n                          ; defines the capability for this extension\n\n      entries           = entry-match /\n                          \"(\" entry-match *(SP entry-match) \")\"\n\n      entry             = astring\n                          ; slash-separated path to entry\n                          ; MUST NOT contain \"*\" or \"%\"\n\n      entry-att         = entry SP \"(\" att-value *(SP att-value) \")\"\n\n      entry-match       = list-mailbox\n                          ; slash-separated path to entry\n                          ; MAY contain \"*\" or \"%\" for use as wild cards\n\n      fetch-att         =/ \"ANNOTATION\" SP \"(\" entries SP attribs \")\"\n                          ; modifies original IMAP fetch-att\n\n      msg-att-dynamic   =/ \"ANNOTATION\" SP\n                             ( \"(\" entry-att *(SP entry-att) \")\" /\n                               \"(\" entry *(SP entry) \")\" )\n                          ; extends FETCH response with annotation data\n\n      resp-text-code    =/ \"ANNOTATE\" SP \"TOOBIG\" /\n                           \"ANNOTATE\" SP \"TOOMANY\" /\n                           \"ANNOTATIONS\" SP ann-size\n                          ; new response codes\n\n      search-key        =/ \"ANNOTATION\" SP entry-match SP att-search\n                           SP value\n                          ; modifies original IMAP search-key\n\n      select-param      =/ \"ANNOTATE\"\n                          ; defines the select parameter used with\n                          ; ANNOTATE extension\n\n      sort-key          =/ \"ANNOTATION\" SP entry SP att-sort\n                          ; modifies original sort-key\n\n      store-att-flags   =/ att-annotate\n                          ; modifies original IMAP STORE command\n\n      value             = nstring / literal8\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 22]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n6.  IANA Considerations\n\n   Entry names MUST be specified in a standards track or IESG approved\n   experimental RFC, or fall under the vendor namespace.  Vendor names\n   MUST be registered.\n\n   Attribute names MUST be specified in a standards track or IESG\n   approved experimental RFC.\n\n   Each entry registration MUST include a content-type that is used to\n   indicate the nature of the annotation value.  Where applicable, a\n   charset parameter MUST be included with the content-type.\n\n6.1.  Entry and Attribute Registration Template\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [] Entry        [] Attribute\n\n   Name: ______________________________\n\n   Description: _______________________\n\n   ____________________________________\n\n   ____________________________________\n\n   Content-Type:_______________________\n\n   Contact person: ____________________\n\n           email:  ____________________\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 23]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n6.2.  Entry Registrations\n\n   The following templates specify the IANA registrations of annotation\n   entries specified in this document.\n\n6.2.1.  /comment\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /comment\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n6.2.2.  /flags\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /flags\n\n   Description: Reserved entry hierarchy.\n\n   Content-Type: -\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 24]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n6.2.3.  /altsubject\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /altsubject\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n6.2.4.  /<section-part>/comment\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /<section-part>/comment\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 25]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n6.2.5.  /<section-part>/flags/seen\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /<section-part>/flags/seen\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n6.2.6.  /<section-part>/flags/answered\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /<section-part>/flags/answered\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 26]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n6.2.7.  /<section-part>/flags/flagged\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /<section-part>/flags/flagged\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n6.2.8.  /<section-part>/flags/forwarded\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [X] Entry        [] Attribute\n\n   Name: /<section-part>/flags/forwarded\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Content-Type: text/plain; charset=utf-8\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 27]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n6.3.  Attribute Registrations\n\n   The following templates specify the IANA registrations of annotation\n   attributes specified in this document.\n\n6.3.1.  value\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [] Entry        [X] Attribute\n\n   Name: value\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n6.3.2.  size\n\n   To: iana@iana.org\n   Subject: IMAP Annotate Registration\n\n   Please register the following IMAP Annotate item:\n\n   [] Entry        [X] Attribute\n\n   Name: size\n\n   Description: Defined in IMAP ANNOTATE extension document.\n\n   Contact person: Cyrus Daboo\n\n           email:  cyrus@daboo.name\n\n6.4.  Capability Registration\n\n   This document registers \"ANNOTATE-EXPERIMENT-1\" as an IMAPEXT\n   capability.\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 28]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n7.  Internationalization Considerations\n\n   Annotations may contain values that include text strings, and both\n   searching and sorting are possible with annotations.  Servers MUST\n   follow standard IMAP text normalization, character set conversion,\n   and collation rules when such operations are carried out, as would be\n   done for other textual fields being searched or sorted on.\n\n8.  Security Considerations\n\n   Annotations whose values are intended to remain private MUST be\n   stored in \".priv\" values instead of \".shared\" values, which may be\n   accessible to other users.\n\n   Excluding the above issues, the ANNOTATE extension does not raise any\n   security considerations that are not present in the base IMAP\n   protocol; these issues are discussed in [RFC3501].\n\n9.  References\n\n9.1.  Normative References\n\n   [RFC2086]  Myers, J., \"IMAP4 ACL extension\", RFC 2086, January 1997.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2244]  Newman, C. and J. Myers, \"ACAP -- Application\n              Configuration Access Protocol\", RFC 2244, November 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC3502]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              MULTIAPPEND Extension\", RFC 3502, March 2003.\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, November 2003.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [RFC5234]  Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n\n\nDaboo & Gellens               Experimental                     [Page 29]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\n   [RFC5256]  Crispin, M. and K. Murchison, \"Internet Message Access\n              Protocol - SORT and THREAD Extensions\", RFC 5256, June\n              2008.\n\n9.2.  Informative References\n\n   [RFC4551]  Melnikov, A. and S. Hole, \"IMAP Extension for Conditional\n              STORE Operation or Quick Flag Changes Resynchronization\",\n              RFC 4551, June 2006.\n\n10.  Acknowledgments\n\n   Many thanks to Chris Newman for his detailed comments on the first\n   draft of this document, and to the participants at the ACAP working\n   dinner in Pittsburgh.  The participants of the IMAPext working group\n   made significant contributions to this work.\n\nAuthors' Addresses\n\n   Cyrus Daboo\n   Apple Inc.\n   1 Infinite Loop\n   Cupertino, CA  95014\n   USA\n\n   EMail: cyrus@daboo.name\n   URI:   http://www.apple.com/\n\n\n   Randall Gellens\n   QUALCOMM Incorporated\n   5775 Morehouse Dr.\n   San Diego, CA  92121-2779\n   USA\n\n   EMail: randy@qualcomm.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 30]\n\f\nRFC 5257                IMAP ANNOTATE Extension                June 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo & Gellens               Experimental                     [Page 31]\n\f\n"
  },
  {
    "path": "rfc/rfc5258.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                           B. Leiba\nRequest for Comments: 5258               IBM T.J. Watson Research Center\nObsoletes: 3348                                              A. Melnikov\nUpdates: 2193                                              Isode Limited\nCategory: Standards Track                                      June 2008\n\n\n  Internet Message Access Protocol version 4 - LIST Command Extensions\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   IMAP4 has two commands for listing mailboxes: LIST and LSUB.  As we\n   have added extensions, such as Mailbox Referrals, that have required\n   specialized lists we have had to expand the number of list commands,\n   since each extension must add its function to both LIST and LSUB, and\n   these commands are not, as they are defined, extensible.  If we've\n   needed the extensions to work together, we've had to add a set of\n   commands to mix the different options, the set increasing in size\n   with each new extension.  This document describes an extension to the\n   base LIST command that will allow these additions to be done with\n   mutually compatible options to the LIST command, avoiding the\n   exponential increase in specialized list commands.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 1]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\nTable of Contents\n\n   1.  Introduction and Overview  . . . . . . . . . . . . . . . . . .  3\n   2.  Conventions Used in This Document  . . . . . . . . . . . . . .  4\n   3.  Extended LIST Command  . . . . . . . . . . . . . . . . . . . .  4\n     3.1.  Initial List of Selection Options  . . . . . . . . . . . .  7\n     3.2.  Initial List of Return Options . . . . . . . . . . . . . .  8\n     3.3.  General Principles for Returning LIST Responses  . . . . .  9\n     3.4.  Additional Requirements on LIST-EXTENDED Clients . . . . .  9\n     3.5.  CHILDINFO Extended Data Item . . . . . . . . . . . . . . . 10\n   4.  The CHILDREN Return Option . . . . . . . . . . . . . . . . . . 11\n   5.  Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 12\n   6.  Formal Syntax  . . . . . . . . . . . . . . . . . . . . . . . . 19\n   7.  Internationalization Considerations  . . . . . . . . . . . . . 22\n   8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 23\n   9.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 23\n     9.1.  Guidelines for IANA  . . . . . . . . . . . . . . . . . . . 23\n     9.2.  Registration Procedure and Change Control  . . . . . . . . 23\n     9.3.  Registration Template for LIST-EXTENDED Options  . . . . . 25\n     9.4.  Initial LIST-EXTENDED Option Registrations . . . . . . . . 25\n     9.5.  Registration Template for LIST-EXTENDED Extended Data\n           Item . . . . . . . . . . . . . . . . . . . . . . . . . . . 28\n     9.6.  Initial LIST-EXTENDED Extended Data Item Registrations . . 28\n   10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 29\n   11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 29\n     11.1. Normative References . . . . . . . . . . . . . . . . . . . 29\n     11.2. Informative References . . . . . . . . . . . . . . . . . . 30\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 2]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n1.  Introduction and Overview\n\n   The LIST command is extended by amending the syntax to allow options\n   and multiple patterns to be specified.  The list of options replaces\n   the several commands that are currently used to mix and match the\n   information requested.  The new syntax is backward compatible, with\n   no ambiguity: the new syntax is being used if one of the following\n   conditions is true:\n\n   1.  if the first word after the command name begins with a\n       parenthesis (\"LIST selection options\")\n\n   2.  if the second word after the command name begins with a\n       parenthesis (\"multiple mailbox patterns\")\n\n   3.  if the LIST command has more than 2 parameters (\"LIST return\n       options\")\n\n   Otherwise the original syntax is used.\n\n   By adding options to the LIST command, we are announcing the intent\n   to phase out and eventually to deprecate the RLIST and RLSUB commands\n   described in [MBRef].  We are also defining the mechanism to request\n   extended mailbox information, such as is described in the Child\n   Mailbox Extension [CMbox].  The base LSUB command is not deprecated\n   by this extension; rather, this extension adds a way to obtain\n   subscription information with more options, with those server\n   implementations that support it.  Clients that simply need a list of\n   subscribed mailboxes, as provided by the LSUB command, SHOULD\n   continue to use that command.\n\n   This document defines an IMAP4 extension that is identified by the\n   capability string \"LIST-EXTENDED\".  The LIST-EXTENDED extension makes\n   the following changes to the IMAP4 protocol, which are described in\n   more detail in Section 3 and Section 4:\n\n   a.  defines new syntax for LIST command options.\n\n   b.  extends LIST to allow for multiple mailbox patterns.\n\n   c.  adds LIST command selection options: SUBSCRIBED, REMOTE, and\n       RECURSIVEMATCH.\n\n   d.  adds LIST command return options: SUBSCRIBED and CHILDREN.\n\n   e.  adds new mailbox attributes: \"\\NonExistent\", \"\\Subscribed\",\n       \"\\Remote\", \"\\HasChildren\", and \"\\HasNoChildren\".\n\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 3]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   f.  adds CHILDINFO extended data item.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   are used in this document as specified in RFC 2119 [Kwds].\n\n   The term \"canonical LIST pattern\" refers to the canonical pattern\n   constructed internally by the server from the reference and mailbox\n   name arguments (Section 6.3.8 of [IMAP4]).  The [IMAP4] LIST command\n   returns only mailboxes that match the canonical LIST pattern.\n\n   Other terms are introduced where they are referenced for the first\n   time.\n\n3.  Extended LIST Command\n\n   This extension updates the syntax of the LIST command to allow for\n   multiple mailbox patterns to be specified, if they are enclosed in\n   parentheses.  A mailbox name matches a list of mailbox patterns if it\n   matches at least one mailbox pattern.  If a mailbox name matches\n   multiple mailbox patterns from the list, the server SHOULD return\n   only a single LIST response.\n\n   Note that the non-extended LIST command is required to treat an empty\n   (\"\" string) mailbox name argument as a special request to return the\n   hierarchy delimiter and the root name of the name given in the\n   reference parameter (as per [IMAP4]).  However, ANY extended LIST\n   command (extended in any of 3 ways specified in Section 1, or any\n   combination thereof) MUST NOT treat the empty mailbox name as such a\n   special request, and any regular processing described in this\n   document applies.  In particular, if an extended LIST command has\n   multiple mailbox names and one (or more) of them is the empty string,\n   the empty string MUST be ignored for the purpose of matching.\n\n   Some servers might restrict which patterns are allowed in a LIST\n   command.  If a server doesn't accept a particular pattern, it MUST\n   silently ignore it.\n\n   The LIST command syntax is also extended in two additional ways: by\n   adding a parenthesized list of command options between the command\n   name and the reference name (LIST selection options) and an optional\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 4]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   list of options at the end that control what kind of information\n   should be returned (LIST return options).  See the formal syntax in\n   Section 6 for specific details.\n\n   A LIST selection option tells the server which mailbox names should\n   be selected by the LIST operation.  The server should return\n   information about all mailbox names that match any of the \"canonical\n   LIST pattern\" (as described above) and satisfy additional selection\n   criteria (if any) specified by the LIST selection options.  Let's\n   call any such mailbox name a \"matched mailbox name\".  When multiple\n   selection options are specified, the server MUST return information\n   about mailbox names that satisfy every selection option, unless a\n   description of a particular specified option prescribes special\n   rules.  An example of an option prescribing special rules is the\n   RECURSIVEMATCH selection option described later in this section.  We\n   will use the term \"selection criteria\" when referring collectively to\n   all selection options specified in a LIST command.\n\n   A LIST return option controls which information is returned for each\n   matched mailbox name.  Note that return options MUST NOT cause the\n   server to report information about additional mailbox names.  If the\n   client has not specified any return option, only information about\n   attributes should be returned by the server.  (Of course, the server\n   is allowed to include any other information at will.)\n\n   Both selection and return command options will be defined in this\n   document and in approved extension documents; each option will be\n   enabled by a capability string (one capability may enable multiple\n   options), and a client MUST NOT send an option for which the server\n   has not advertised support.  A server MUST respond to options it does\n   not recognize with a BAD response.  The client SHOULD NOT specify any\n   option more than once; however, if the client does this, the server\n   MUST act as if it received the option only once.  The order in which\n   options are specified by the client is not significant.\n\n   In general, each selection option except RECURSIVEMATCH will have a\n   corresponding return option.  The REMOTE selection option is an\n   anomaly in this regard, and does not have a corresponding return\n   option.  That is because it expands, rather than restricts, the set\n   of mailboxes that are returned.  Future extensions to this\n   specification should keep parallelism in mind and define a pair of\n   corresponding options.\n\n   This extension is identified by the capability string\n   \"LIST-EXTENDED\", and support for it is a prerequisite for any future\n   extensions that require specialized forms of the LIST command.  Such\n   extensions MUST refer to this document and MUST add their function\n   through command options as described herein.  Note that extensions\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 5]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   that don't require support for an extended LIST command, but use\n   extended LIST responses (see below), don't need to advertise the\n   \"LIST-EXTENDED\" capability string.\n\n   This extension also defines extensions to the LIST response, allowing\n   a series of extended fields at the end, a parenthesized list of\n   tagged data (also referred to as \"extended data item\").  The first\n   element of an extended field is a tag, which identifies the type of\n   data.  Tags MUST be registered with IANA, as described in Section 9.5\n   of this document.  An example of such an extended set might be\n\n   tablecloth ((\"edge\" \"lacy\") (\"color\" \"red\"))) (X-Sample \"text\"))\n\n   or\n\n   tablecloth (\"edge\" \"lacy\")) (X-Sample \"text\" \"more text\"))\n\n   See the formal syntax, in Section 6, for the full syntactic details.\n   The server MUST NOT return any extended data item unless the client\n   has expressed its ability to support extended LIST responses, for\n   example, by using an extended LIST command.  The server MAY return\n   data in the extended fields that was not directly solicited by the\n   client in the corresponding LIST command.  For example, the client\n   can enable extra extended fields by using another IMAP extension that\n   make use of the extended LIST responses.  The client MUST ignore all\n   extended fields it doesn't recognize.\n\n   The LIST-EXTENDED capability also defines several new mailbox\n   attributes.\n\n   The \"\\NonExistent\" attribute indicates that a mailbox name does not\n   refer to an existing mailbox.  Note that this attribute is not\n   meaningful by itself, as mailbox names that match the canonical LIST\n   pattern but don't exist must not be returned unless one of the two\n   conditions listed below is also satisfied:\n\n   a.  The mailbox name also satisfies the selection criteria (for\n       example, it is subscribed and the \"SUBSCRIBED\" selection option\n       has been specified).\n\n   b.  \"RECURSIVEMATCH\" has been specified, and the mailbox name has at\n       least one descendant mailbox name that does not match the LIST\n       pattern and does match the selection criteria.\n\n   In practice, this means that the \"\\NonExistent\" attribute is usually\n   returned with one or more of \"\\Subscribed\", \"\\Remote\",\n   \"\\HasChildren\", or the CHILDINFO extended data item (see their\n   description below).\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 6]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   The \"\\NonExistent\" attribute implies \"\\NoSelect\".  The \"\\NonExistent\"\n   attribute MUST be supported and MUST be accurately computed.\n\n3.1.  Initial List of Selection Options\n\n   The selection options defined in this specification are as follows:\n\n   SUBSCRIBED -  causes the LIST command to list subscribed names,\n      rather than the existing mailboxes.  This will often be a subset\n      of the actual mailboxes.  It's also possible for this list to\n      contain the names of mailboxes that don't exist.  In any case, the\n      list MUST include exactly those mailbox names that match the\n      canonical list pattern and are subscribed to.  This option is\n      intended to supplement the LSUB command.  Of particular note are\n      the mailbox attributes as returned by this option, compared with\n      what is returned by LSUB.  With the latter, the attributes\n      returned may not reflect the actual attribute status on the\n      mailbox name, and the \\NoSelect attribute has a second special\n      meaning (it indicates that this mailbox is not, itself,\n      subscribed, but that it has descendant mailboxes that are).  With\n      the SUBSCRIBED selection option described here, the attributes are\n      accurate and complete, and have no special meanings.  \"LSUB\" and\n      \"LIST (SUBSCRIBED)\" are, thus, not the same thing, and some\n      servers must do significant extra work to respond to \"LIST\n      (SUBSCRIBED)\".  Because of this, clients SHOULD continue to use\n      \"LSUB\" unless they specifically want the additional information\n      offered by \"LIST (SUBSCRIBED)\".\n\n      This option defines a new mailbox attribute, \"\\Subscribed\", that\n      indicates that a mailbox name is subscribed to.  The \"\\Subscribed\"\n      attribute MUST be supported and MUST be accurately computed when\n      the SUBSCRIBED selection option is specified.\n\n      Note that the SUBSCRIBED selection option implies the SUBSCRIBED\n      return option (see below).\n\n   REMOTE -  causes the LIST command to show remote mailboxes as well as\n      local ones, as described in [MBRef].  This option is intended to\n      replace the RLIST command and, in conjunction with the SUBSCRIBED\n      selection option, the RLSUB command.\n\n      This option defines a new mailbox attribute, \"\\Remote\", that\n      indicates that a mailbox is a remote mailbox.  The \"\\Remote\"\n      attribute MUST be accurately computed when the REMOTE option is\n      specified.\n\n      The REMOTE selection option has no interaction with other options.\n      Its effect is to tell the server to apply the other options, if\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 7]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n      any, to remote mailboxes, in addition to local ones.  In\n      particular, it has no interaction with RECURSIVEMATCH (see below).\n      A request for (REMOTE RECURSIVEMATCH) is invalid, because a\n      request for (RECURSIVEMATCH) is.  A request for (REMOTE\n      RECURSIVEMATCH SUBSCRIBED) is asking for all subscribed mailboxes,\n      both local and remote.\n\n   RECURSIVEMATCH -  this option forces the server to return information\n      about parent mailboxes that don't match other selection options,\n      but have some submailboxes that do.  Information about children is\n      returned in the CHILDINFO extended data item, as described in\n      Section 3.5.\n\n      Note 1: In order for a parent mailbox to be returned, it still has\n      to match the canonical LIST pattern.\n\n      Note 2: When returning the CHILDINFO extended data item, it\n      doesn't matter whether or not the submailbox matches the canonical\n      LIST pattern.  See also example 9 in Section 5.\n\n      The RECURSIVEMATCH option MUST NOT occur as the only selection\n      option (or only with REMOTE), as it only makes sense when other\n      selection options are also used.  The server MUST return BAD\n      tagged response in such case.\n\n      Note that even if the RECURSIVEMATCH option is specified, the\n      client MUST still be able to handle a case when a CHILDINFO\n      extended data item is returned and there are no submailboxes that\n      meet the selection criteria of the subsequent LIST command, as\n      they can be deleted/renamed after the LIST response was sent, but\n      before the client had a chance to access them.\n\n3.2.  Initial List of Return Options\n\n   The return options defined in this specification are as follows:\n\n   SUBSCRIBED -  causes the LIST command to return subscription state\n      for all matching mailbox names.  The \"\\Subscribed\" attribute MUST\n      be supported and MUST be accurately computed when the SUBSCRIBED\n      return option is specified.  Further, all mailbox flags MUST be\n      accurately computed (this differs from the behavior of the LSUB\n      command).\n\n   CHILDREN -  requests mailbox child information as originally proposed\n      in [CMbox].  See Section 4, below, for details.  This option MUST\n      be supported by all servers.\n\n\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 8]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n3.3.  General Principles for Returning LIST Responses\n\n   This section outlines several principles that can be used by server\n   implementations of this document to decide whether a LIST response\n   should be returned, as well as how many responses and what kind of\n   information they may contain.\n\n   1.  At most one LIST response should be returned for each mailbox\n       name that matches the canonical LIST pattern.  Server\n       implementors must not assume that clients will be able to\n       assemble mailbox attributes and other information returned in\n       multiple LIST responses.\n\n   2.  There are only two reasons for including a matching mailbox name\n       in the responses to the LIST command (note that the server is\n       allowed to return unsolicited responses at any time, and such\n       responses are not governed by this rule):\n\n       A.  The mailbox name also satisfies the selection criteria.\n\n       B.  The mailbox name doesn't satisfy the selection criteria, but\n           it has at least one descendant mailbox name that satisfies\n           the selection criteria and that doesn't match the canonical\n           LIST pattern.\n\n           For more information on this case, see the CHILDINFO extended\n           data item described in Section 3.5.  Note that the CHILDINFO\n           extended data item can only be returned when the\n           RECURSIVEMATCH selection option is specified.\n\n   3.  Attributes returned in the same LIST response must be treated\n       additively.  For example, the following response\n\n          S: * LIST (\\Subscribed \\NonExistent) \"/\" \"Fruit/Peach\"\n\n       means that the \"Fruit/Peach\" mailbox doesn't exist, but it is\n       subscribed.\n\n3.4.  Additional Requirements on LIST-EXTENDED Clients\n\n   All clients that support this extension MUST treat an attribute with\n   a stronger meaning as implying any attribute that can be inferred\n   from it.  For example, the client must treat the presence of the\n   \\NoInferiors attribute as if the \\HasNoChildren attribute was also\n   sent by the server.\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                     [Page 9]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   The following table summarizes inference rules described in\n   Section 3.\n\n                +--------------------+-------------------+\n                | returned attribute | implied attribute |\n                +--------------------+-------------------+\n                |    \\NoInferiors    |   \\HasNoChildren  |\n                |    \\NonExistent    |     \\NoSelect     |\n                +--------------------+-------------------+\n\n3.5.  CHILDINFO Extended Data Item\n\n   The CHILDINFO extended data item MUST NOT be returned unless the\n   client has specified the RECURSIVEMATCH selection option.\n\n   The CHILDINFO extended data item in a LIST response describes the\n   selection criteria that has caused it to be returned and indicates\n   that the mailbox has at least one descendant mailbox that matches the\n   selection criteria.\n\n   The LSUB command indicates this condition by using the \"\\NoSelect\"\n   attribute, but the LIST (SUBSCRIBED) command MUST NOT do that, since\n   \"\\NoSelect\" retains its original meaning here.  Further, the\n   CHILDINFO extended data item is more general, in that it can be used\n   with any extended set of selection criteria.\n\n   Note: Some servers allow for mailboxes to exist without requiring\n   their parent to exist.  For example, a mailbox \"Customers/ABC\" can\n   exist while the mailbox \"Customers\" does not.  As CHILDINFO extended\n   data item is not allowed if the RECURSIVEMATCH selection option is\n   not specified, such servers SHOULD use the \"\\NonExistent\n   \\HasChildren\" attribute pair to signal to the client that there is a\n   descendant mailbox that matches the selection criteria.  See example\n   11 in Section 5.\n\n   The returned selection criteria allow the client to distinguish a\n   solicited response from an unsolicited one, as well as to distinguish\n   among solicited responses caused by multiple pipelined LIST commands\n   that specify different criteria.\n\n   Servers SHOULD ONLY return a non-matching mailbox name along with\n   CHILDINFO if at least one matching child is not also being returned.\n   That is, servers SHOULD suppress redundant CHILDINFO responses.\n\n   Examples 8 and 10 in Section 5 demonstrate the difference between\n   present CHILDINFO extended data item and the \"\\HasChildren\"\n   attribute.\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 10]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   The following table summarizes interaction between the \"\\NonExistent\"\n   attribute and CHILDINFO (the first column indicates whether the\n   parent mailbox exists):\n\n   +--------+--------------+--------------------+----------------------+\n   | exists |   meets the  |  has a child that  |       returned       |\n   |        |   selection  |      meets the     |     LIST-EXTENDED    |\n   |        |   criteria   | selection criteria |    attributes and    |\n   |        |              |                    |       CHILDINFO      |\n   +--------+--------------+--------------------+----------------------+\n   |   no   |      no      |         no         |   no LIST response   |\n   |        |              |                    |       returned       |\n   |   yes  |      no      |         no         |   no LIST response   |\n   |        |              |                    |       returned       |\n   |   no   |      yes     |         no         |     (\\NonExistent    |\n   |        |              |                    |        <attr>)       |\n   |   yes  |      yes     |         no         |       (<attr>)       |\n   |   no   |      no      |         yes        |   (\\NonExistent) +   |\n   |        |              |                    |       CHILDINFO      |\n   |   yes  |      no      |         yes        |    () + CHILDINFO    |\n   |   no   |      yes     |         yes        |     (\\NonExistent    |\n   |        |              |                    |  <attr>) + CHILDINFO |\n   |   yes  |      yes     |         yes        | (<attr>) + CHILDINFO |\n   +--------+--------------+--------------------+----------------------+\n\n   where <attr> is one or more attributes that correspond to the\n   selection criteria; for example, for the SUBSCRIBED option the <attr>\n   is \\Subscribed.\n\n4.  The CHILDREN Return Option\n\n   The CHILDREN return option implements the Child Mailbox Extension,\n   originally proposed by Mike Gahrns and Raymond Cheng, of Microsoft\n   Corporation.  Most of the information in this section is taken\n   directly from their original specification [CMbox].  The CHILDREN\n   return option is simply an indication that the client wants this\n   information; a server MAY provide it even if the option is not\n   specified.\n\n   Many IMAP4 [IMAP4] clients present to the user a hierarchical view of\n   the mailboxes that a user has access to.  Rather than initially\n   presenting to the user the entire mailbox hierarchy, it is often\n   preferable to show to the user a collapsed outline list of the\n   mailbox hierarchy (particularly if there is a large number of\n   mailboxes).  The user can then expand the collapsed outline hierarchy\n   as needed.  It is common to include within the collapsed hierarchy a\n   visual clue (such as a ''+'') to indicate that there are child\n   mailboxes under a particular mailbox.  When the visual clue is\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 11]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   clicked, the hierarchy list is expanded to show the child mailboxes.\n   The CHILDREN return option provides a mechanism for a client to\n   efficiently determine whether a particular mailbox has children,\n   without issuing a LIST \"\" * or a LIST \"\" % for each mailbox name.\n   The CHILDREN return option defines two new attributes that MUST be\n   returned within a LIST response: \\HasChildren and \\HasNoChildren.\n   Although these attributes MAY be returned in response to any LIST\n   command, the CHILDREN return option is provided to indicate that the\n   client particularly wants this information.  If the CHILDREN return\n   option is present, the server MUST return these attributes even if\n   their computation is expensive.\n\n   \\HasChildren\n\n   The presence of this attribute indicates that the mailbox has child\n        mailboxes.  A server SHOULD NOT set this attribute if there are\n        child mailboxes and the user does not have permission to access\n        any of them.  In this case, \\HasNoChildren SHOULD be used.  In\n        many cases, however, a server may not be able to efficiently\n        compute whether a user has access to any child mailbox.  Note\n        that even though the \\HasChildren attribute for a mailbox must\n        be correct at the time of processing of the mailbox, a client\n        must be prepared to deal with a situation when a mailbox is\n        marked with the \\HasChildren attribute, but no child mailbox\n        appears in the response to the LIST command.  This might happen,\n        for example, due to children mailboxes being deleted or made\n        inaccessible to the user (using access control) by another\n        client before the server is able to list them.\n\n   \\HasNoChildren\n\n   The presence of this attribute indicates that the mailbox has NO\n        child mailboxes that are accessible to the currently\n        authenticated user.\n\n   It is an error for the server to return both a \\HasChildren and a\n   \\HasNoChildren attribute in the same LIST response.\n\n   Note: the \\HasNoChildren attribute should not be confused with the\n   IMAP4 [IMAP4] defined attribute \\NoInferiors, which indicates that no\n   child mailboxes exist now and none can be created in the future.\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 12]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n5.  Examples\n\n   1:   The first example shows the complete local hierarchy that will\n        be used for the other examples.\n\n      C: A01 LIST \"\" \"*\"\n      S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n      S: * LIST () \"/\" \"Fruit\"\n      S: * LIST () \"/\" \"Fruit/Apple\"\n      S: * LIST () \"/\" \"Fruit/Banana\"\n      S: * LIST () \"/\" \"Tofu\"\n      S: * LIST () \"/\" \"Vegetable\"\n      S: * LIST () \"/\" \"Vegetable/Broccoli\"\n      S: * LIST () \"/\" \"Vegetable/Corn\"\n      S: A01 OK done\n\n   2:   In the next example, we will see the subscribed mailboxes.  This\n        is similar to, but not equivalent with, <LSUB \"\" \"*\">.  Note\n        that the mailbox called \"Fruit/Peach\" is subscribed to, but does\n        not actually exist (perhaps it was deleted while still\n        subscribed).  The \"Fruit\" mailbox is not subscribed to, but it\n        has two subscribed children.  The \"Vegetable\" mailbox is\n        subscribed and has two children; one of them is subscribed as\n        well.\n\n      C: A02 LIST (SUBSCRIBED) \"\" \"*\"\n      S: * LIST (\\Marked \\NoInferiors \\Subscribed) \"/\" \"inbox\"\n      S: * LIST (\\Subscribed) \"/\" \"Fruit/Banana\"\n      S: * LIST (\\Subscribed \\NonExistent) \"/\" \"Fruit/Peach\"\n      S: * LIST (\\Subscribed) \"/\" \"Vegetable\"\n      S: * LIST (\\Subscribed) \"/\" \"Vegetable/Broccoli\"\n      S: A02 OK done\n\n   3:   The next example shows the use of the CHILDREN option.  The\n        client, without having to list the second level of hierarchy,\n        now knows which of the top-level mailboxes have submailboxes\n        (children) and which do not.  Note that it's not necessary for\n        the server to return the \\HasNoChildren attribute for the inbox,\n        because the \\NoInferiors attribute already implies that, and has\n        a stronger meaning.\n\n      C: A03 LIST () \"\" \"%\" RETURN (CHILDREN)\n      S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n      S: * LIST (\\HasChildren) \"/\" \"Fruit\"\n      S: * LIST (\\HasNoChildren) \"/\" \"Tofu\"\n      S: * LIST (\\HasChildren) \"/\" \"Vegetable\"\n      S: A03 OK done\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 13]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   4:   In this example, we see more mailboxes that reside on another\n        server.  This is similar to the command <RLIST \"\" \"%\">.\n\n      C: A04 LIST (REMOTE) \"\" \"%\" RETURN (CHILDREN)\n      S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n      S: * LIST (\\HasChildren) \"/\" \"Fruit\"\n      S: * LIST (\\HasNoChildren) \"/\" \"Tofu\"\n      S: * LIST (\\HasChildren) \"/\" \"Vegetable\"\n      S: * LIST (\\Remote) \"/\" \"Bread\"\n      S: * LIST (\\HasChildren \\Remote) \"/\" \"Meat\"\n      S: A04 OK done\n\n   5:   The following example also requests the server to include\n        mailboxes that reside on another server.  The server returns\n        information about all mailboxes that are subscribed.  This is\n        similar to the command <RLSUB \"\" \"*\">.  We also see the use of\n        two selection options.\n\n      C: A05 LIST (REMOTE SUBSCRIBED) \"\" \"*\"\n      S: * LIST (\\Marked \\NoInferiors \\Subscribed) \"/\" \"inbox\"\n      S: * LIST (\\Subscribed) \"/\" \"Fruit/Banana\"\n      S: * LIST (\\Subscribed \\NonExistent) \"/\" \"Fruit/Peach\"\n      S: * LIST (\\Subscribed) \"/\" \"Vegetable\"\n      S: * LIST (\\Subscribed) \"/\" \"Vegetable/Broccoli\"\n      S: * LIST (\\Remote \\Subscribed) \"/\" \"Bread\"\n      S: A05 OK done\n\n   6:   The following example requests the server to include mailboxes\n        that reside on another server.  The server is asked to return\n        subscription information for all returned mailboxes.  This is\n        different from the example above.\n\n        Note that the output of this command is not a superset of the\n        output in the previous example, as it doesn't include LIST\n        response for the non-existent \"Fruit/Peach\".\n\n      C: A06 LIST (REMOTE) \"\" \"*\" RETURN (SUBSCRIBED)\n      S: * LIST (\\Marked \\NoInferiors \\Subscribed) \"/\" \"inbox\"\n      S: * LIST () \"/\" \"Fruit\"\n      S: * LIST () \"/\" \"Fruit/Apple\"\n      S: * LIST (\\Subscribed) \"/\" \"Fruit/Banana\"\n      S: * LIST () \"/\" \"Tofu\"\n      S: * LIST (\\Subscribed) \"/\" \"Vegetable\"\n      S: * LIST (\\Subscribed) \"/\" \"Vegetable/Broccoli\"\n      S: * LIST () \"/\" \"Vegetable/Corn\"\n      S: * LIST (\\Remote \\Subscribed) \"/\" \"Bread\"\n      S: * LIST (\\Remote) \"/\" \"Meat\"\n      S: A06 OK done\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 14]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   7:   In the following example, the client has specified multiple\n        mailbox patterns.  Note that this example does not use the\n        mailbox hierarchy used in the previous examples.\n\n      C: BBB LIST \"\" (\"INBOX\" \"Drafts\" \"Sent/%\")\n      S: * LIST () \"/\" \"INBOX\"\n      S: * LIST (\\NoInferiors) \"/\" \"Drafts\"\n      S: * LIST () \"/\" \"Sent/March2004\"\n      S: * LIST (\\Marked) \"/\" \"Sent/December2003\"\n      S: * LIST () \"/\" \"Sent/August2004\"\n      S: BBB OK done\n\n   8:   The following example demonstrates the difference between the\n        \\HasChildren attribute and the CHILDINFO extended data item.\n\n        Let's assume there is the following hierarchy:\n\n      C: C01 LIST \"\" \"*\"\n      S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n      S: * LIST () \"/\" \"Foo\"\n      S: * LIST () \"/\" \"Foo/Bar\"\n      S: * LIST () \"/\" \"Foo/Baz\"\n      S: * LIST () \"/\" \"Moo\"\n      S: C01 OK done\n\n   If the client asks RETURN (CHILDREN), it will get this:\n\n      C: CA3 LIST \"\" \"%\" RETURN (CHILDREN)\n      S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n      S: * LIST (\\HasChildren) \"/\" \"Foo\"\n      S: * LIST (\\HasNoChildren) \"/\" \"Moo\"\n      S: CA3 OK done\n\n   A) Let's also assume that the mailbox \"Foo/Baz\" is the only\n   subscribed mailbox.  Then we get this result:\n\n      C: C02 LIST (SUBSCRIBED) \"\" \"*\"\n      S: * LIST (\\Subscribed) \"/\" \"Foo/Baz\"\n      S: C02 OK done\n\n   Now, if the client issues <LIST (SUBSCRIBED) \"\" \"%\">, the server will\n   return no mailboxes (as the mailboxes \"Moo\", \"Foo\", and \"Inbox\" are\n   NOT subscribed).  However, if the client issues this:\n\n      C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n      S: * LIST () \"/\" \"Foo\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: C04 OK done\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 15]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   (i.e., the mailbox \"Foo\" is not subscribed, but it has a child that\n   is.)\n\n   A1) If the mailbox \"Foo\" had also been subscribed, the last command\n   would return this:\n\n      C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n      S: * LIST (\\Subscribed) \"/\" \"Foo\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: C04 OK done\n\n   or even this:\n\n      C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n      S: * LIST (\\Subscribed \\HasChildren) \"/\" \"Foo\" (\"CHILDINFO\"\n         (\"SUBSCRIBED\"))\n      S: C04 OK done\n\n   A2) If we assume instead that the mailbox \"Foo\" is not part of the\n   original hierarchy and is not subscribed, the last command will give\n   this result:\n\n      C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n      S: * LIST (\\NonExistent) \"/\" \"Foo\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: C04 OK done\n\n   B) Now, let's assume that no mailbox is subscribed.  In this case,\n   the command <LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"> will return no\n   responses, as there are no subscribed children (even though \"Foo\" has\n   children).\n\n   C) And finally, suppose that only the mailboxes \"Foo\" and \"Moo\" are\n   subscribed.  In that case, we see this result:\n\n      C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\" RETURN (CHILDREN)\n      S: * LIST (\\HasChildren \\Subscribed) \"/\" \"Foo\"\n      S: * LIST (\\HasNoChildren \\Subscribed) \"/\" \"Moo\"\n      S: C04 OK done\n\n   (which means that the mailbox \"Foo\" has children, but none of them is\n   subscribed).\n\n   9:   The following example demonstrates that the CHILDINFO extended\n        data item is returned whether or not children mailboxes match\n        the canonical LIST pattern.\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 16]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n        Let's assume there is the following hierarchy:\n\n      C: D01 LIST \"\" \"*\"\n      S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n      S: * LIST () \"/\" \"foo2\"\n      S: * LIST () \"/\" \"foo2/bar1\"\n      S: * LIST () \"/\" \"foo2/bar2\"\n      S: * LIST () \"/\" \"baz2\"\n      S: * LIST () \"/\" \"baz2/bar2\"\n      S: * LIST () \"/\" \"baz2/bar22\"\n      S: * LIST () \"/\" \"baz2/bar222\"\n      S: * LIST () \"/\" \"eps2\"\n      S: * LIST () \"/\" \"eps2/mamba\"\n      S: * LIST () \"/\" \"qux2/bar2\"\n      S: D01 OK done\n\n   And that the following mailboxes are subscribed:\n\n      C: D02 LIST (SUBSCRIBED) \"\" \"*\"\n      S: * LIST (\\Subscribed) \"/\" \"foo2/bar1\"\n      S: * LIST (\\Subscribed) \"/\" \"foo2/bar2\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar2\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar22\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar222\"\n      S: * LIST (\\Subscribed) \"/\" \"eps2\"\n      S: * LIST (\\Subscribed) \"/\" \"eps2/mamba\"\n      S: * LIST (\\Subscribed) \"/\" \"qux2/bar2\"\n      S: D02 OK done\n\n   The client issues the following command first:\n\n      C: D03 LIST (RECURSIVEMATCH SUBSCRIBED) \"\" \"*2\"\n      S: * LIST () \"/\" \"foo2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: * LIST (\\Subscribed) \"/\" \"foo2/bar2\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar2\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar22\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar222\"\n      S: * LIST (\\Subscribed) \"/\" \"eps2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: * LIST (\\Subscribed) \"/\" \"qux2/bar2\"\n      S: D03 OK done\n\n   and the server may also include (but this would violate a SHOULD NOT\n   in Section 3.5, because CHILDINFO is redundant)\n\n      S: * LIST () \"/\" \"baz2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: * LIST (\\NonExistent) \"/\" \"qux2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 17]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   The CHILDINFO extended data item is returned for mailboxes \"foo2\",\n   \"baz2\", and \"eps2\", because all of them have subscribed children,\n   even though for the mailbox \"foo2\" only one of the two subscribed\n   children matches the pattern, for the mailbox \"baz2\" all the\n   subscribed children match the pattern, and for the mailbox \"eps2\"\n   none of the subscribed children matches the pattern.\n\n   Note that if the client issues\n\n      C: D03 LIST (RECURSIVEMATCH SUBSCRIBED) \"\" \"*\"\n      S: * LIST () \"/\" \"foo2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: * LIST (\\Subscribed) \"/\" \"foo2/bar1\"\n      S: * LIST (\\Subscribed) \"/\" \"foo2/bar2\"\n      S: * LIST () \"/\" \"baz2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar2\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar22\"\n      S: * LIST (\\Subscribed) \"/\" \"baz2/bar222\"\n      S: * LIST (\\Subscribed) \"/\" \"eps2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: * LIST (\\Subscribed) \"/\" \"eps2/mamba\"\n      S: * LIST (\\Subscribed) \"/\" \"qux2/bar2\"\n      S: D03 OK done\n\n   The LIST responses for mailboxes \"foo2\", \"baz2\", and \"eps2\" still\n   have the CHILDINFO extended data item, even though this information\n   is redundant and the client can determine it by itself.\n\n   10:  The following example shows usage of multiple mailbox patterns.\n        It also demonstrates that the presence of the CHILDINFO extended\n        data item doesn't necessarily imply \\HasChildren.\n\n      C: a1 LIST \"\" (\"foo\" \"foo/*\")\n      S: * LIST () \"/\" foo\n      S: a1 OK done\n\n      C: a2 LIST (SUBSCRIBED) \"\" \"foo/*\"\n      S: * LIST (\\Subscribed \\NonExistent) \"/\" foo/bar\n      S: a2 OK done\n\n      C: a3 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" foo RETURN (CHILDREN)\n      S: * LIST (\\HasNoChildren) \"/\" foo (\"CHILDINFO\" (\"SUBSCRIBED\"))\n      S: a3 OK done\n\n   11:  The following example shows how a server that supports missing\n        mailbox hierarchy elements can signal to a client that didn't\n        specify the RECURSIVEMATCH selection option that there is a\n        child mailbox that matches the selection criteria.\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 18]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n      C: a1 LIST (REMOTE) \"\" *\n      S: * LIST () \"/\" music/rock\n      S: * LIST (\\Remote) \"/\" also/jazz\n      S: a1 OK done\n\n      C: a2 LIST () \"\" %\n      S: * LIST (\\NonExistent \\HasChildren) \"/\" music\n      S: a2 OK done\n\n      C: a3 LIST (REMOTE) \"\" %\n      S: * LIST (\\NonExistent \\HasChildren) \"/\" music\n      S: * LIST (\\NonExistent \\HasChildren) \"/\" also\n      S: a3 OK done\n\n      C: a3.1 LIST \"\" (% music/rock)\n      S: * LIST () \"/\" music/rock\n      S: a3.1 OK done\n\n   Because \"music/rock\" is the only mailbox under \"music\", there's no\n   need for the server to also return \"music\".  However clients must\n   handle both cases.\n\n6.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) as described in [ABNF].  Terms not defined here are taken\n   from [IMAP4].  In particular, note that the version of \"mailbox-list\"\n   below, which defines the payload of the LIST response, updates the\n   version defined in the IMAP specification.  It is pointed to by\n   \"mailbox-data\", which is defined in [IMAP4].\n\n   \"vendor-token\" is defined in [ACAP].  Note that this normative\n   reference to ACAP will be an issue in moving this spec forward, since\n   it introduces a dependency on ACAP.  The definitions of\n   \"vendor-token\" and of the IANA registry must eventually go somewhere\n   else, in a document that can be moved forward on the standards track\n   independently of ACAP.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 19]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   childinfo-extended-item =  \"CHILDINFO\" SP \"(\"\n               list-select-base-opt-quoted\n               *(SP list-select-base-opt-quoted) \")\"\n               ; Extended data item (mbox-list-extended-item)\n               ; returned when the RECURSIVEMATCH\n               ; selection option is specified.\n               ; Note 1: the CHILDINFO tag can be returned\n               ; with and without surrounding quotes, as per\n               ; mbox-list-extended-item-tag production.\n               ; Note 2: The selection options are always returned\n               ; quoted, unlike their specification in\n               ; the extended LIST command.\n\n   child-mbox-flag =  \"\\HasChildren\" / \"\\HasNoChildren\"\n               ; attributes for CHILDREN return option, at most one\n               ; possible per LIST response\n\n   eitem-standard-tag =  atom\n               ; a tag for extended list data defined in a Standard\n               ; Track or Experimental RFC.\n\n   eitem-vendor-tag =  vendor-token \"-\" atom\n               ; a vendor-specific tag for extended list data\n\n   list =      \"LIST\" [SP list-select-opts] SP mailbox SP mbox-or-pat\n               [SP list-return-opts]\n\n   list-return-opts =  \"RETURN\" SP\n               \"(\" [return-option *(SP return-option)] \")\"\n               ; list return options, e.g., CHILDREN\n\n   list-select-base-opt =  \"SUBSCRIBED\" / option-extension\n               ; options that can be used by themselves\n\n   list-select-base-opt-quoted =  DQUOTE list-select-base-opt DQUOTE\n\n   list-select-independent-opt =  \"REMOTE\" / option-extension\n               ; options that do not syntactically interact with\n               ; other options\n\n   list-select-mod-opt =  \"RECURSIVEMATCH\" / option-extension\n               ; options that require a list-select-base-opt\n               ; to also be present\n\n   list-select-opt =  list-select-base-opt / list-select-independent-opt\n               / list-select-mod-opt\n               ; An option registration template is described in\n               ; Section 9.3 of this document.\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 20]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   list-select-opts =  \"(\" [\n                 (*(list-select-opt SP) list-select-base-opt\n                  *(SP list-select-opt))\n               / (list-select-independent-opt\n                  *(SP list-select-independent-opt))\n               ] \")\"\n               ; Any number of options may be in any order.\n               ; If a list-select-mod-opt appears, then a\n               ; list-select-base-opt must also appear.\n               ; This allows these:\n               ; ()\n               ; (REMOTE)\n               ; (SUBSCRIBED)\n               ; (SUBSCRIBED REMOTE)\n               ; (SUBSCRIBED RECURSIVEMATCH)\n               ; (SUBSCRIBED REMOTE RECURSIVEMATCH)\n               ; But does NOT allow these:\n               ; (RECURSIVEMATCH)\n               ; (REMOTE RECURSIVEMATCH)\n\n   mailbox-list =  \"(\" [mbx-list-flags] \")\" SP\n               (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox\n               [SP mbox-list-extended]\n               ; This is the list information pointed to by the ABNF\n               ; item \"mailbox-data\", which is defined in [IMAP4]\n\n   mbox-list-extended =  \"(\" [mbox-list-extended-item\n               *(SP mbox-list-extended-item)] \")\"\n\n   mbox-list-extended-item =  mbox-list-extended-item-tag SP\n               tagged-ext-val\n\n   mbox-list-extended-item-tag =  astring\n               ; The content MUST conform to either \"eitem-vendor-tag\"\n               ; or \"eitem-standard-tag\" ABNF productions.\n               ; A tag registration template is described in this\n               ; document in Section 9.5.\n\n   mbx-list-oflag =/  child-mbox-flag / \"\\Subscribed\" / \"\\Remote\"\n\n   mbx-list-sflag =/  \"\\NonExistent\"\n\n   mbox-or-pat =  list-mailbox / patterns\n\n   option-extension =  (option-standard-tag / option-vendor-tag)\n               [SP option-value]\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 21]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   option-standard-tag =  atom\n               ; an option defined in a Standards Track or\n               ; Experimental RFC\n\n   option-val-comp =  astring /\n               option-val-comp *(SP option-val-comp) /\n               \"(\" option-val-comp \")\"\n\n   option-value =  \"(\" option-val-comp \")\"\n\n   option-vendor-tag =  vendor-token \"-\" atom\n               ; a vendor-specific option, non-standard\n\n   patterns =  \"(\" list-mailbox *(SP list-mailbox) \")\"\n\n   return-option =  \"SUBSCRIBED\" / \"CHILDREN\" / option-extension\n\n   tagged-ext-comp =  astring /\n               tagged-ext-comp *(SP tagged-ext-comp) /\n               \"(\" tagged-ext-comp \")\"\n               ; Extensions that follow this general\n               ; syntax should use nstring instead of\n               ; astring when appropriate in the context\n               ; of the extension.\n               ; Note that a message set or a \"number\"\n               ; can always be represented as an \"atom\".\n               ; A URL should be represented as\n               ; a \"quoted\" string.\n\n   tagged-ext-simple =  sequence-set / number\n\n   tagged-ext-val =  tagged-ext-simple /\n               \"(\" [tagged-ext-comp] \")\"\n\n7.  Internationalization Considerations\n\n   The LIST command selection option types defined in this specification\n   involve simple tests of mailbox properties.  However, future\n   extensions to LIST-EXTENDED may define selection options that do more\n   sophisticated tests.  In the case of a test that requires matching\n   text, in the presence of the COMPARATOR [I18N] extension, the active\n   comparator must be used to do comparisons.  Such LIST-EXTENDED\n   extensions MUST indicate in their specification the interaction with\n   the COMPARATOR [I18N] extension.\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 22]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n8.  Security Considerations\n\n   This document describes syntactic changes to the specification of the\n   IMAP4 commands LIST, LSUB, RLIST, and RLSUB, and the modified LIST\n   command has the same security considerations as those commands.  They\n   are described in [IMAP4] and [MBRef].\n\n   The Child Mailbox Extension provides a client a more efficient means\n   of determining whether a particular mailbox has children.  If a\n   mailbox has children, but the currently authenticated user does not\n   have access to any of them, the server SHOULD respond with a\n   \\HasNoChildren attribute.  In many cases, however, a server may not\n   be able to efficiently compute whether a user has access to any child\n   mailbox.  If such a server responds with a \\HasChildren attribute,\n   when in fact the currently authenticated user does not have access to\n   any child mailboxes, potentially more information is conveyed about\n   the mailbox than intended.  In most situations, this will not be a\n   security concern, because if information regarding whether a mailbox\n   has children is considered sensitive, a user would not be granted\n   access to that mailbox in the first place.\n\n   The CHILDINFO extended data item has the same security considerations\n   as the \\HasChildren attribute described above.\n\n9.  IANA Considerations\n\n9.1.  Guidelines for IANA\n\n   IANA has created two new registries for LIST-EXTENDED options and\n   LIST-EXTENDED response data.  The templates and the initial\n   registrations are detailed below.\n\n9.2.  Registration Procedure and Change Control\n\n   Registration of a LIST-EXTENDED option is done by filling in the\n   template in Section 9.3 and sending it via electronic mail to\n   iana@iana.org.  Registration of a LIST-EXTENDED extended data item is\n   done by filling in the template in Section 9.5 and sending it via\n   electronic mail to iana@iana.org.  IANA has the right to reject\n   obviously bogus registrations, but will perform no review of claims\n   made in the registration form.\n\n   A LIST-EXTENDED option/extended data item name that starts with \"V-\"\n   is reserved for vendor-specific options/extended data items.  All\n   options, whether they are vendor specific or global, should be\n   registered with IANA.  If a LIST-EXTENDED extended data item is\n   returned as a result of requesting a particular LIST-EXTENDED option,\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 23]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   the name of the option SHOULD be used as the name of the\n   LIST-EXTENDED extended data item.\n\n   Each vendor-specific option/extended data item MUST start with its\n   vendor-token (\"vendor prefix\").  The vendor-token MUST be registered\n   with IANA, using the [ACAP] vendor subtree registry.\n\n   Standard LIST-EXTENDED option/extended data item names are case\n   insensitive.  If the vendor prefix is omitted from a vendor-specific\n   LIST-EXTENDED option/extended data item name, the rest is case\n   insensitive.  The vendor prefix itself is not case sensitive, as it\n   might contain non-ASCII characters.  While the registration\n   procedures do not require it, authors of\n   LIST-EXTENDED options/extended data items are encouraged to seek\n   community review and comment whenever that is feasible.  Authors may\n   seek community review by posting a specification of their proposed\n   mechanism as an\n   Internet-Draft.  LIST-EXTENDED option/extended data items intended\n   for widespread use should be standardized through the normal IETF\n   process, when appropriate.\n\n   Comments on registered LIST-EXTENDED options/extended response data\n   should first be sent to the \"owner\" of the mechanism and/or to the\n   IMAPEXT WG mailing list.  Submitters of comments may, after a\n   reasonable attempt to contact the owner, request IANA to attach their\n   comment to the registration itself.  If IANA approves of this, the\n   comment will be made accessible in conjunction with the registration\n   LIST-EXTENDED options/extended response data itself.\n\n   Once a LIST-EXTENDED registration has been published by IANA, the\n   author may request a change to its definition.  The change request\n   follows the same procedure as the registration request.\n\n   The owner of a LIST-EXTENDED registration may pass responsibility for\n   the registered option/extended data item to another person or agency\n   by informing IANA; this can be done without discussion or review.\n\n   The IESG may reassign responsibility for a LIST-EXTENDED\n   option/extended data item.  The most common case of this will be to\n   enable changes to be made to mechanisms where the author of the\n   registration has died, has moved out of contact, or is otherwise\n   unable to make changes that are important to the community.\n\n   LIST-EXTENDED registrations may not be deleted; mechanisms that are\n   no longer believed appropriate for use can be declared OBSOLETE by a\n   change to their \"intended use\" field.  Such LIST-EXTENDED\n   options/extended data items will be clearly marked in the lists\n   published by IANA.\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 24]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n   The IESG is considered to be the owner of all LIST-EXTENDED\n   options/extended data items that are on the IETF standards track.\n\n9.3.  Registration Template for LIST-EXTENDED Options\n\n   To: iana@iana.org\n   Subject: Registration of LIST-EXTENDED option X\n\n   LIST-EXTENDED option name:\n\n   LIST-EXTENDED option type: (One of SELECTION or RETURN)\n\n   Implied return options(s), if the option type is SELECTION: (zero or\n   more)\n\n   LIST-EXTENDED option description:\n\n   Published specification (optional, recommended):\n\n   Security considerations:\n\n   Intended usage:\n   (One of COMMON, LIMITED USE, or OBSOLETE)\n\n   Person and email address to contact for further information:\n\n   Owner/Change controller:\n\n   (Any other information that the author deems interesting may be added\n   below this line.)\n\n9.4.  Initial LIST-EXTENDED Option Registrations\n\n   The LIST-EXTENDED option registry has been populated with the\n   following entries:\n\n   1.  To: iana@iana.org\n       Subject: Registration of LIST-EXTENDED option SUBSCRIBED\n\n       LIST-EXTENDED option name: SUBSCRIBED\n\n       LIST-EXTENDED option type: SELECTION\n\n       Implied return options(s): SUBSCRIBED\n\n       LIST-EXTENDED option description: Causes the LIST command to list\n       subscribed mailboxes, rather than the actual mailboxes.\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 25]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n       Published specification: RFC 5258, Section 3.\n\n       Security considerations: RFC 5258, Section 8.\n\n       Intended usage: COMMON\n\n       Person and email address to contact for further information:\n       Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n       Owner/Change controller: iesg@ietf.org\n\n   2.  To: iana@iana.org\n       Subject: Registration of LIST-EXTENDED option REMOTE\n\n       LIST-EXTENDED option name: REMOTE\n\n       LIST-EXTENDED option type: SELECTION\n\n       Implied return options(s): (none)\n\n       LIST-EXTENDED option description: Causes the LIST command to\n       return remote mailboxes as well as local ones, as described in\n       RFC 2193.\n\n       Published specification: RFC 5258, Section 3.\n\n       Security considerations: RFC 5258, Section 8.\n\n       Intended usage: COMMON\n\n       Person and email address to contact for further information:\n       Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n       Owner/Change controller: iesg@ietf.org\n\n   3.  To: iana@iana.org\n       Subject: Registration of LIST-EXTENDED option SUBSCRIBED\n\n       LIST-EXTENDED option name: SUBSCRIBED\n\n       LIST-EXTENDED option type: RETURN\n\n       LIST-EXTENDED option description: Causes the LIST command to\n       return subscription state.\n\n       Published specification: RFC 5258, Section 3.\n\n       Security considerations: RFC 5258, Section 8.\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 26]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n       Intended usage: COMMON\n\n       Person and email address to contact for further information:\n       Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n       Owner/Change controller: iesg@ietf.org\n\n   4.  To: iana@iana.org\n       Subject: Registration of LIST-EXTENDED option RECURSIVEMATCH\n\n       LIST-EXTENDED option name: RECURSIVEMATCH\n\n       LIST-EXTENDED option type: SELECTION\n\n       Implied return options(s): (none)\n\n       LIST-EXTENDED option description: Requests that CHILDINFO\n       extended data item (childinfo-extended-item) is to be returned.\n\n       Published specification: RFC 5258, Section 3.\n\n       Security considerations: RFC 5258, Section 8.\n\n       Intended usage: COMMON\n\n       Person and email address to contact for further information:\n       Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n       Owner/Change controller: iesg@ietf.org\n\n   5.  To: iana@iana.org\n       Subject: Registration of LIST-EXTENDED option CHILDREN\n\n       LIST-EXTENDED option name: CHILDREN\n\n       LIST-EXTENDED option type: RETURN\n\n       LIST-EXTENDED option description: Requests mailbox child\n       information.\n\n       Published specification: RFC 5258, Section 3 and Section 4.\n\n       Security considerations: RFC 5258, Section 8.\n\n       Intended usage: COMMON\n\n       Person and email address to contact for further information:\n       Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 27]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n       Owner/Change controller: iesg@ietf.org\n\n9.5.  Registration Template for LIST-EXTENDED Extended Data Item\n\n   To: iana@iana.org\n   Subject: Registration of X LIST-EXTENDED extended data item\n\n   LIST-EXTENDED extended data item tag:\n\n   LIST-EXTENDED extended data item description:\n\n   Which LIST-EXTENDED option(s) (and their types) causes this extended\n   data item to be returned (if any):\n\n   Published specification (optional, recommended):\n\n   Security considerations:\n\n   Intended usage:\n   (One of COMMON, LIMITED USE, or OBSOLETE)\n\n   Person and email address to contact for further information:\n\n   Owner/Change controller:\n\n   (Any other information that the author deems interesting may be added\n   below this line.)\n\n9.6.  Initial LIST-EXTENDED Extended Data Item Registrations\n\n   The LIST-EXTENDED extended data item registry has been populated with\n   the following entries:\n\n   1.  To: iana@iana.org\n       Subject: Registration of CHILDINFO LIST-EXTENDED extended data\n       item\n\n       LIST-EXTENDED extended data item tag: CHILDINFO\n\n       LIST-EXTENDED extended data item description: The CHILDINFO\n       extended data item describes the selection criteria that has\n       caused it to be returned and indicates that the mailbox has one\n       or more child mailboxes that match the selection criteria.\n\n       Which LIST-EXTENDED option(s) (and their types) causes this\n       extended data item to be returned (if any): RECURSIVEMATCH\n       selection option\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 28]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n       Published specification: RFC 5258, Section 3.5.\n\n       Security considerations: RFC 5258, Section 8.\n\n       Intended usage: COMMON\n\n       Person and email address to contact for further information:\n       Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n       Owner/Change controller: iesg@ietf.org\n\n10.  Acknowledgements\n\n   Mike Gahrns and Raymond Cheng of Microsoft Corporation originally\n   devised the Child Mailbox Extension and proposed it in 1997; the\n   idea, as well as most of the text in Section 4, is theirs.\n\n   This document is the result of discussions on the IMAP4 and IMAPEXT\n   mailing lists and is meant to reflect consensus of those groups.  In\n   particular, Mark Crispin, Philip Guenther, Cyrus Daboo, Timo\n   Sirainen, Ken Murchison, Rob Siemborski, Steve Hole, Arnt\n   Gulbrandsen, Larry Greenfield, Dave Cridland, and Pete Maclean were\n   active participants in those discussions or made suggestions to this\n   document.\n\n11.  References\n\n11.1.  Normative References\n\n   [ABNF]   Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n            Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [ACAP]   Newman, C. and J. Myers, \"ACAP -- Application Configuration\n            Access Protocol\", RFC 2244, November 1997.\n\n   [I18N]   Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n            Message Access Protocol Internationalization\", RFC 5255,\n            June 2008.\n\n   [IMAP4]  Crispin, M., \"Internet Message Access Protocol - Version\n            4rev1\", RFC 3501, March 2003.\n\n   [Kwds]   Bradner, S., \"Key words for use in RFCs to Indicate\n            Requirement Levels\", RFC 2119, March 1997.\n\n   [MBRef]  Gahrns, M., \"IMAP4 Mailbox Referrals\", RFC 2193,\n            September 1997.\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 29]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\n11.2.  Informative References\n\n   [CMbox]  Gahrns, M. and R. Cheng, \"The Internet Message Action\n            Protocol (IMAP4) Child Mailbox Extension\", RFC 3348,\n            July 2002.\n\nAuthors' Addresses\n\n   Barry Leiba\n   IBM T.J. Watson Research Center\n   19 Skyline Drive\n   Hawthorne, NY  10532\n   US\n\n   Phone: +1 914 784 7941\n   EMail: leiba@watson.ibm.com\n\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n   URI:   http://www.melnikov.ca/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 30]\n\f\nRFC 5258             IMAP4 LIST Command Extensions             June 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov            Standards Track                    [Page 31]\n\f\n"
  },
  {
    "path": "rfc/rfc5259.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                   A. Melnikov, Ed.\nRequest for Comments: 5259                                     Isode Ltd\nCategory: Standards Track                                 P. Coates, Ed.\n                                                        Sun Microsystems\n                                                               July 2008\n\n\n          Internet Message Access Protocol - CONVERT Extension\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   CONVERT defines extensions to IMAP allowing clients to request\n   adaptation and/or transcoding of attachments.  Clients can specify\n   the conversion details or allow servers to decide based on knowledge\n   of client capabilities, on user or administrator preferences, or on\n   server settings.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 1]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3\n   2.  Conventions Used in This Document  . . . . . . . . . . . . . .  3\n   3.  Relation with Other IMAP Specifications  . . . . . . . . . . .  4\n     3.1.  CAPABILITY Response  . . . . . . . . . . . . . . . . . . .  4\n   4.  Scope of Conversions . . . . . . . . . . . . . . . . . . . . .  4\n   5.  Discovery of Available Conversions . . . . . . . . . . . . . .  4\n     5.1.  CONVERSIONS Command  . . . . . . . . . . . . . . . . . . .  4\n     5.2.  CONVERSION Response  . . . . . . . . . . . . . . . . . . .  6\n   6.  CONVERT and UID CONVERT Commands . . . . . . . . . . . . . . .  6\n   7.  CONVERT Conversion Parameters  . . . . . . . . . . . . . . . . 12\n     7.1.  Mandatory-to-Implement Conversions and Conversion\n           Parameters . . . . . . . . . . . . . . . . . . . . . . . . 12\n     7.2.  Additional Features for Mobile Usage . . . . . . . . . . . 13\n   8.  Request/Response Data Items to CONVERT/UID CONVERT Commands  . 14\n     8.1.  CONVERTED Untagged Response  . . . . . . . . . . . . . . . 14\n     8.2.  BODYPARTSTRUCTURE CONVERT Request and Response Item  . . . 14\n     8.3.  BINARY.SIZE CONVERT Request and Response Item  . . . . . . 15\n     8.4.  AVAILABLECONVERSIONS CONVERT Request and Response Item . . 16\n     8.5.  Implementation Considerations  . . . . . . . . . . . . . . 17\n   9.  Status Responses and Response Code Extensions  . . . . . . . . 17\n   10. Formal Syntax  . . . . . . . . . . . . . . . . . . . . . . . . 20\n   11. Manageability Considerations . . . . . . . . . . . . . . . . . 24\n   12. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 24\n     12.1. Registration of unknown-character-replacement Media\n           Type Parameter . . . . . . . . . . . . . . . . . . . . . . 25\n   13. Security Considerations  . . . . . . . . . . . . . . . . . . . 26\n   14. Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 27\n   15. References . . . . . . . . . . . . . . . . . . . . . . . . . . 28\n     15.1. Normative References . . . . . . . . . . . . . . . . . . . 28\n     15.2. Informative References . . . . . . . . . . . . . . . . . . 29\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 2]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n1.  Introduction\n\n   This document defines the CONVERT extension to IMAP4 [RFC3501].\n   CONVERT provides adaptation and transcoding of body parts as needed\n   by the client.  Conversion (adaptation, transcoding) may be requested\n   by the client and performed by the server on a best effort basis or,\n   when requested by the client, decided by the server based on the\n   server's knowledge of the client capabilities, user or administrator\n   preferences, or server settings.\n\n   This extension is primarily intended to be useful to mobile clients.\n   It satisfies requirements specified in [OMA-ME-RD].\n\n   A server that supports CONVERT can convert body parts to other\n   formats to be viewed (for example) on a mobile device.  The client\n   can explicitly request a particular conversion or ask the server to\n   select the best available conversion.  When allowed by the client,\n   the server determines how to convert based on its own strategy (e.g.,\n   based on knowledge of the client as discussed hereafter).  If the\n   server knows the characteristics of the device (out of scope for\n   CONVERT) or can determine them (for example, using a conversion\n   parameter containing device type), converted body parts can also be\n   optimized for capabilities of the device (e.g., form factor of\n   pictures).  The client is able to control conversions using optional\n   conversion (also referred to as \"transcoding\" in this document)\n   parameters.\n\n   This document relies on the registry of conversion parameters\n   established by [MEDIAFEAT-REG].  The registry can be used to discover\n   the underlying legal values that these parameters can take.\n   Additional conversion parameters, such as those defined by [OMA-STI],\n   are expected to be registered in the future.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.  The five characters [...] mean that something has been\n   elided.\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 3]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   When describing the general syntax, some definitions are omitted as\n   they are defined in [RFC3501].  In particular, the term \"session\" is\n   used in this document as defined in Section 1.2 of [RFC3501].\n\n3.  Relation with Other IMAP Specifications\n\n   Conversion of attachments during streaming is out of scope for the\n   CONVERT extension and is described in a separate Lemonade WG document\n   [LEM-STREAMING].\n\n   A server claiming compliance with this specification MUST support the\n   IMAP Binary specification [RFC3516].\n\n3.1.  CAPABILITY Response\n\n   A server that supports the CONVERT extension MUST return \"CONVERT\"\n   and \"BINARY\" in the CAPABILITY response or response code.  (Client\n   and server authors are reminded that the order of tokens returned in\n   the CAPABILITY response or response code is arbitrary.)\n\n      Example: A server that implements CONVERT.\n\n         C: a000 CAPABILITY\n         S: * CAPABILITY IMAP4rev1 CONVERT BINARY [...]\n         S: a000 OK CAPABILITY completed\n\n4.  Scope of Conversions\n\n   Conversions only affect what is sent to the client; the original data\n   in the message store MUST NOT be altered.  This document does not\n   specify how the server performs conversions.\n\n   Note: The requirement that original data be unaltered allows such\n   data to remain accessible by other clients, permits replies or\n   forwards of the original documents, permits signature verification\n   (the converted body parts are not likely to contain any signatures),\n   and preserves BODYSTRUCTURE and related information.\n\n5.  Discovery of Available Conversions\n\n5.1.  CONVERSIONS Command\n\n   Arguments: source MIME type\n              target MIME type\n\n   Responses: untagged responses: CONVERSION\n\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 4]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   Result:    OK - CONVERSIONS command completed\n              BAD - unrecognized syntax of an argument, unexpected extra\n                    argument, missing argument, etc.\n\n   The CONVERSIONS command is allowed in Authenticated and Selected IMAP\n   states.\n\n   The first parameter to the CONVERSIONS command is a source MIME type,\n   the second parameter is the target MIME type.  Both parameters are\n   partially (e.g., \"text/*\") or completely (\"*\") wildcardable.\n\n   Conversions matching the source/target pair and their associated\n   conversion parameters are returned in untagged CONVERSION responses.\n   If source/target doesn't match any conversion supported by the\n   server, no CONVERSION response is returned.\n\n   Examples:\n\n   For conversion information from GIF to JPEG image format (no untagged\n   CONVERSION response would be returned if no conversion is possible):\n\n       C: a CONVERSIONS \"image/gif\" \"image/jpeg\"\n       S: * CONVERSION \"image/gif\" \"image/jpeg\" (\"pix-y\" \"pix-x\"\n           \"image-interleave\")\n       S: a OK CONVERSIONS completed\n\n   For conversion information from GIF image format to anything:\n\n       C: b CONVERSIONS \"image/gif\" \"*\"\n       S: * CONVERSION \"image/gif\" \"image/jpeg\" (\"pix-y\" \"pix-x\"\n           \"image-interleave\")\n       S: * CONVERSION \"image/gif\" \"image/png\" ([...])\n       [...]\n       S: b OK CONVERSIONS completed\n\n   For conversion of anything to JPEG:\n\n       C: c CONVERSIONS \"*\" \"image/jpeg\"\n       S: * CONVERSION \"image/gif\" \"image/jpeg\" (\"pix-y\" \"pix-x\"\n           \"image-interleave\")\n       S: * CONVERSION \"image/png\" \"image/jpeg\" (...)\n       [...]\n       S: c OK CONVERSIONS completed\n\n   For conversions from all image formats to all text formats, the\n   client can issue the following command:\n\n       C: d CONVERSIONS \"image/*\" \"text/*\"\n\n\n\nMelnikov & Coates           Standards Track                     [Page 5]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n5.2.  CONVERSION Response\n\n   Contents:  source MIME type\n              target MIME type\n              optional list of supported conversion parameters\n\n   As a result of executing a CONVERSIONS command, the server can return\n   one or more CONVERSION responses.  Each CONVERSION response specifies\n   which source MIME type can be converted to the target MIME type, and\n   also lists supported conversion parameters.\n\n6.  CONVERT and UID CONVERT Commands\n\n   Arguments: sequence set\n              conversion parameters\n              CONVERT data item names\n\n   Responses: untagged responses: CONVERTED\n\n   Result:    OK - convert completed\n              NO - convert error: can't fetch and/or convert that data\n              BAD - unrecognized syntax of an argument, unexpected extra\n                    argument, missing argument, etc.\n\n   The CONVERT extension defines CONVERT and UID CONVERT commands that\n   are used to transcode the media type of a MIME part into another\n   media type, and/or the same media type with different encoding\n   parameters.  These commands are structured and behave similarly to\n   FETCH/UID FETCH commands as extended by [RFC3516]:\n\n   o  A successful CONVERT/UID CONVERT command results in one or more\n      untagged CONVERTED responses (one per message).  They are similar\n      to the untagged FETCH responses.  Note that a single CONVERT/ UID\n      CONVERT command can only perform a single type of conversion as\n      defined by the conversion parameters.  A client that needs to\n      perform multiple different conversions needs to issue multiple\n      CONVERT/UID CONVERT commands.  Such a client MAY pipeline them.\n\n   o  BINARY[...] data item requests conversion of a body part or of the\n      whole message according to conversion parameters and requests that\n      the converted message/body part be returned as binary.\n\n   o  BINARY.SIZE data item is similar to RFC822.SIZE, but it requests\n      size of a converted body part/message.\n\n   o  BODYPARTSTRUCTURE data item is similar to BODYSTRUCTURE FETCH data\n      item, but it returns the MIME structure of the converted body\n      part.\n\n\n\nMelnikov & Coates           Standards Track                     [Page 6]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   o  BODY[...HEADER] encoded words in the requested headers are\n      converted to the specified charset.  The CHARSET parameter is\n      REQUIRED for this conversion.\n\n   o  BODY[...MIME] encoded words in the requested headers are converted\n      to the specified charset.  The CHARSET parameter is REQUIRED for\n      this conversion.\n\n   o  AVAILABLECONVERSIONS data item requests the list of target MIME\n      types the specified body part (or the whole message) can be\n      converted to.\n\n   The CONVERT extension also adds one new response code.  See Section 9\n   for more details.\n\n   Typically clients will request conversion of leaf body parts.  In\n   addition to support of leaf body part conversion, servers MAY offer\n   conversion of non-leaf body parts (e.g., conversion from multipart/\n   related).\n\n   Instead of specifying the exact target MIME media type the client\n   wants to convert to, the client MAY use a special marker NIL (also\n   known as \"default conversion\") to request the server to pick a\n   suitable target media type.  This document doesn't describe how\n   exactly the server makes such a choice; however, some basic\n   guidelines are described in this paragraph.  If the server knows\n   characteristics of the device using an in-band (such as device type\n   specified in a conversion parameter) or an out-of-band mechanism,\n   then it should convert the request body part to a media type the\n   device is likely to support and display/play successfully.  Unless\n   specifically overridden by a conversion parameter, the server MAY\n   also remove any unnecessary detail that exceeds the capabilities of\n   the device (e.g., scaling images to just fit on the device's screen).\n   In the absence of any in-band or out-of-band mechanism for\n   determining device characteristics, the server should convert the\n   request body part to the most standard or widely deployed media type\n   available in that media category, for example, to convert to text/\n   plain, image/jpeg.  In such case, the server should minimize quality\n   loss.  Servers are REQUIRED to support \"default conversion\" requests.\n   Server implementations that support conversions to multiple target\n   MIME types SHOULD make the default conversion configurable.  Clients\n   SHOULD avoid using the default conversion unless they provided a way\n   (in-band or out-band) to signal their capabilities to the server, as\n   there is no guaranty that the server would guess their capability\n   correctly.  Client implementors should consider using\n   AVAILABLECONVERSIONS CONVERT data item or CONVERSIONS command instead\n   of the default conversion.\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 7]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   CONVERT's command syntax is modeled after the FETCH command syntax in\n   [RFC3501], as extended by [RFC3516].  CONVERT data items are\n   generally structured as:\n\n       BINARY[section-part]<partial>\n\n       BINARY.SIZE[section-part]\n\n       BODYPARTSTRUCTURE[section-part]\n\n       BODY[HEADER]\n\n       BODY[section-part.HEADER]\n\n       BODY[section-part.MIME]\n\n       AVAILABLECONVERSIONS[section-part]\n\n   The semantics of a partial CONVERT BINARY[...] command is the same as\n   for a partial FETCH BODY[...] command, with the exception that the\n   <partial> arguments refer to the TRANSCODED and DECODED section data.\n\n   Note that unlike the FETCH command, the CONVERT command never sets\n   the \\Seen flag on converted messages.  A client wishing to mark a\n   message with the \\Seen flag would need to issue a STORE command\n   (possibly pipelined with the CONVERT request) to do that.\n\n   The UID CONVERT command is different from the CONVERT command in the\n   same way as the UID FETCH command is different from the FETCH\n   command:\n\n   o  UID CONVERT takes as a parameter a sequence of UIDs instead of a\n      sequence of message numbers.\n\n   o  UID CONVERT command MUST result in the UID data item in a\n      corresponding CONVERTED response.\n\n   o  An EXPUNGE response MUST NOT be sent while responding to a CONVERT\n      command.  This rule is necessary to prevent a loss of\n      synchronization of message sequence numbers between client and\n      server.  Note that an EXPUNGE response MAY be sent during a UID\n      CONVERT command.\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 8]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   Example: The client fetches body part section 3 in the message with\n   the message sequence number of 2 and asks to have that attachment\n   converted to pdf format.\n\n     C: a001 CONVERT 2 (\"APPLICATION/PDF\") BINARY[3]\n     S: * 2 CONVERTED (TAG \"a001\") (BINARY[3] {2135}\n        <the document in .pdf format>\n        )\n     S: a001 OK CONVERT COMPLETED\n\n   Example: The client requests for conversion of a text/html body part\n   to text/plain and asks for a charset of us-ascii.  The server cannot\n   respect the charset conversion request because there are non-us-ascii\n   characters in the text/html body part, so it fails the request by\n   returning an ERROR phrase in place of the converted data (see\n   Section 9).\n\n     C: b001 CONVERT 2 (\"text/plain\" (\"charset\" \"us-ascii\")) BINARY[3]\n     S: * 2 CONVERTED (tag \"b001\") (BINARY[3]\n         (ERROR \"Source text has non us-ascii\" BADPARAMETERS\n         \"text/html\" \"text/plain\" (\"charset\" \"us-ascii\")))\n     S: b001 NO All conversions failed\n\n   If the client also specified the \"unknown-character-replacement\"\n   conversion parameter (see Section 12.1), the same example can look\n   like this:\n\n     C: b001 CONVERT 2 (\"text/plain\" (\"charset\" \"us-ascii\"\n         \"unknown-character-replacement\" \"?\")) BINARY[3]\n     S: * 2 CONVERTED (TAG \"b001\") (BINARY[3] {2135}\n         <the document in text/plain format with us-ascii\n          charset>\n        )\n     S: b001 OK CONVERT COMPLETED\n\n   The server replaced non-us-ascii characters with a us-ascii character\n   such as \"?\".\n\n   Example: The client first requests the converted size of a text/html\n   body part converted to text/plain:\n\n     C: c000 CONVERT 2 (\"TEXT/PLAIN\" (\"CHARSET\" \"us-ascii\"))\n         BINARY.SIZE[4]\n     S: * 2 CONVERTED (TAG \"c000\") (BINARY.SIZE[4] 3135)\n     S: c000 OK CONVERT COMPLETED\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                     [Page 9]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   Later on, the client requests 1000 bytes from the converted body\n   part, starting from byte 2001:\n\n     C: c001 CONVERT 2 (\"TEXT/PLAIN\" (\"CHARSET\" \"us-ascii\"))\n         BINARY[4]<2001.1000>\n     S: * 2 CONVERTED (TAG \"c001\") (BINARY[4]<2001> {135}\n          <bytes 2001 - 2135 of the document in text/plain format>\n          )\n     S: c001 OK CONVERT COMPLETED\n\n   The server MUST respect the target MIME type and conversion\n   parameters specified by the client in the transcoding request.  Note\n   that some conversion parameters can restrict what kind of conversion\n   is possible, while others can remove some restrictions.\n\n   It is legal for a client to request conversion of a non-leaf body\n   part, for example, to request conversion of a multipart/* into a PDF\n   document.  However, servers implementing this extension are not\n   required to support such conversions.  Servers that support such\n   conversions MUST return one or more CONVERSION responses in response\n   to a 'CONVERSIONS \"multipart/*\" \"*\"' command.  See Section 5.1 for\n   more details.\n\n   The client can request header conversions using the BODY[...HEADER]\n   CONVERT request, for example\n\n        C: D001 FETCH 2 BODY[HEADER]\n        S: * 2 FETCH (BODY[HEADER] {158}\n        S: Date: Mon, 20 Apr 2007 20:05:43 +0200\n        S: From: Peter <peter@siroe.example.com>\n        S: To: Alexey <alexey@siroe.example.com>\n        S: Subject: =?KOI8-R?Q?why encode this?=\n        S:\n        S: )\n        S: D001 OK\n        C: D002 CONVERT 2 (NIL (\"CHARSET\" \"utf-8\")) BODY[HEADER]\n        S: * 2 CONVERTED (TAG \"d002\") (BODY[HEADER] {157}\n        S: Date: Mon, 20 Apr 2007 20:05:43 +0200\n        S: From: Peter <peter@siroe.example.com>\n        S: To: Alexey <alexey@siroe.example.com>\n        S: Subject: =?UTF-8?Q?why encode this?=\n        S:\n        S: )\n        S: D002 OK\n\n   Any such request MUST include the CHARSET parameter.  Upon receipt of\n   the request, the server MUST decode any encoded words (as described\n   in [RFC2047]) in headers and return them re-encoded in the specified\n\n\n\nMelnikov & Coates           Standards Track                    [Page 10]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   charset.  (Note that encoded-words might not be needed if the result\n   can be represented entirely in US-ASCII, so the server MAY replace\n   the resulting encoded-words with their pure US-ASCII representation.)\n   If the server can't decode any particular encoded word, for example,\n   if the charset or encoding is not recognized, it MUST leave them as\n   is.  Servers SHOULD also support decoding of any parameters as\n   described in [RFC2231].  Support for RFC 2231 parameters might\n   require reformatting of header fields during conversion.  Consider\n   the following\n\n        C: D011 FETCH 3 BODY[1.MIME]\n        S: * 3 FETCH (BODY[1.MIME] {118}\n        S: Content-Type: text/plain; charset=utf-8;\n        S:  foo*0*=utf-8'fr'tr%c0;\n        S:  foo*1*(very)=%03s_m%c0;\n        S:  foo*2*=(nasty)%09chant\n        S:\n        S: D011 OK\n\n   The server should preserve the headers during the conversion as much\n   as possible.  In case the characters are split (legally!) between\n   fragments of an encoded parameter, the server MUST consolidate the\n   parameter fragments, and convert, emit, and re-fragment them as\n   necessary in order to keep the line length less than 78.  Comments\n   embedded like this SHOULD be preserved during conversion, but clients\n   MUST gracefully handle the situation where comments are removed\n   entirely.  If the comments are preserved, they MAY be moved after the\n   parameter.  For example (continuing the previous example):\n\n        C: D012 CONVERT 3 (NIL) BODY[1.MIME]\n        S: * 3 CONVERTED (TAG \"D012\") (BODY[1.MIME] {109}\n        S: Content-Type: text/plain; charset=utf-8;\n        S:  foo*0*=utf-8'fr'tr%c0%03s_;\n        S:  foo*1*=%m%c0%09chant (very)(nasty)\n        S:\n        S: D012 OK\n\n   No destination MIME type MUST be specified with BODY[HEADER],\n   BODY[section.HEADER], or BODY[section.MIME].  That is, BODY[HEADER],\n   BODY[section.HEADER], or BODY[section.MIME] can only be used with the\n   \"default conversion\".  When performing these conversions, the server\n   SHOULD leave encoded words as encoded words.  A failure to do so may\n   alter the semantics of structured headers.\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 11]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n7.  CONVERT Conversion Parameters\n\n   The registry established by [MEDIAFEAT-REG] defines names of\n   conversion parameters that can be used in the CONVERT command.\n   Support for some conversion parameters is mandatory, as described in\n   Section 7.1.\n\n   According to [MEDIAFEAT-REG], conversion parameter names are case-\n   insensitive.\n\n   The following example illustrates how target picture dimensions can\n   be specified in a CONVERT request using the PIX-X and PIX-Y\n   parameters defined in [DISP-FEATURES].\n\n        C: e001 UID CONVERT 100 (\"IMAGE/JPEG\" (\"PIX-X\" \"128\"\n            \"PIX-Y\" \"96\")) BINARY[2]\n        S: * 2 CONVERTED (TAG \"e001\") (UID 100 BINARY[2] ~{4182}\n           <this part of a document is a rescaled image in\n            JPEG format with width=128, height=96.>\n           )\n        S: e001 OK UID CONVERT COMPLETED\n\n7.1.  Mandatory-to-Implement Conversions and Conversion Parameters\n\n   A server implementing CONVERT MUST support charset conversions for\n   the text/plain MIME type, and MUST support charset conversions from\n   iso-8859-1, iso-8859-2, iso-8859-3, iso-8859-4, iso-8859-5,\n   iso-8859-6, iso-8859-7, iso-8859-8, and iso-8859-15 to utf-8.\n\n   The server MUST list \"text/plain\" as an allowed destination\n   conversion from \"text/plain\" MIME type (see Section 5.1).  A command\n   'CONVERSIONS \"text/plain\" \"text/plain\"' MUST also return \"charset\"\n   and \"unknown-character-replacement\" (see Section 12.1) as supported\n   conversion parameters in the corresponding CONVERSION response.\n\n   IMAP servers implementing the CONVERT extension MUST support\n   recognition of the \"charset\" [CHARSET-REG] parameter for text/plain,\n   text/html, text/css, text/csv, text/enriched, and text/xml MIME\n   types.  Note, a server implementation is not required to support any\n   conversion from the text MIME subtypes specified above, except for\n   the mandatory-to-implement conversion described above.  That is, a\n   server implementation MUST support the \"charset\" parameter for text/\n   csv, only if it supports any conversion from text/csv.\n\n   The server MUST support decoding of [RFC2047] headers and their\n   conversion to UTF-8 as long as the encoded words are in one of the\n   supported charsets.\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 12]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   Servers SHOULD offer additional character encoding conversions where\n   they make sense, as character conversion libraries are generally\n   available on many platforms.\n\n   If the server cannot carry out the charset conversion while\n   preserving all the characters (i.e., a source character can't be\n   represented in the target charset), and the \"unknown-character-\n   replacement\" conversion parameter is not specified, then the server\n   MUST fail the conversion and MUST return the untagged ERROR\n   BADPARAMETERS response (see Section 9).  If the value specified in\n   the \"unknown-character-replacement\" conversion itself can't be\n   represented in the target charset, then the server MUST also fail the\n   conversion and MUST return the untagged ERROR BADPARAMETERS response\n   (see Section 9).\n\n7.2.  Additional Features for Mobile Usage\n\n   This section is informative.\n\n   Based on the expected usage of CONVERT in mobile environments, server\n   implementors should consider support for the following conversions:\n\n   o  Conversion of HTML and XHTML documents to text/plain in ways that\n      preserve at the minimum the document structure and tables.\n\n   o  Image conversions among the types image/gif, image/jpeg, and\n      image/png for at least the following parameters:\n\n      *  size limit (i.e., reduce quality)\n\n      *  width (\"pix-x\" parameter)\n\n      *  height (\"pix-y\" parameter)\n\n      *  resize directive (crop, stretch, aspect ratio)\n\n      The support for \"depth\" may also be of interest.\n\n   Audio conversion is also of interest but the relevant formats depend\n   significantly on the usage context.\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 13]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n8.  Request/Response Data Items to CONVERT/UID CONVERT Commands\n\n8.1.  CONVERTED Untagged Response\n\n   Contents:  convert correlator\n              CONVERTED return data items\n\n   The CONVERTED response may be sent as a result of a successful,\n   partially successful, or unsuccessful CONVERT or UID CONVERT command\n   specified in Section 6.\n\n   The CONVERTED response starts with a message number, followed by the\n   \"CONVERTED\" label.  The label is followed by a convert correlator,\n   which contains the tag of the command that caused the response to be\n   returned.  This can be used by a client to match a CONVERTED response\n   against a corresponding CONVERT/UID CONVERT command.\n\n   The convert correlator is followed by a list of one or more CONVERT\n   return data items.  If the UID data item is returned, it MUST be\n   returned as the first data item in the CONVERTED response.  This\n   requirement is to simplify client implementations.  See Section 10\n   and the remainder of Section 8 for more details.\n\n8.2.  BODYPARTSTRUCTURE CONVERT Request and Response Item\n\n   BODYPARTSTRUCTURE[section-part]\n\n   The CONVERT extension defines the BODYPARTSTRUCTURE CONVERT data\n   item.  Data contained in the BODYPARTSTRUCTURE return data item\n   follows the exact syntax specified in the [RFC3501] BODYSTRUCTURE\n   data item, but only contains information for the converted part.  All\n   information contained in BODYPARTSTRUCTURE pertains to the state of\n   the part after it is converted, such as the converted MIME type, sub-\n   type, size, or charset.  Note that the client can expect the returned\n   MIME type to match the one it requested (as the server is required to\n   obey the requested MIME type) and can treat mismatch as an error.\n\n   The returned BODYPARTSTRUCTURE data MUST match the BINARY data\n   returned for exactly the same conversion in the same IMAP \"session\".\n   This requirement allows a client to request BODYPARTSTRUCTURE and\n   BINARY data in separate commands in the same IMAP session.\n\n   If the client lists a BODYPARTSTRUCTURE data item for a section-part\n   before a BINARY data item for the same section-part, then, in the\n   CONVERTED response, the server MUST return the BODYPARTSTRUCTURE data\n   prior to the corresponding BINARY data.  Also, any BODYSTRUCTURE data\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 14]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   items MUST be after the UID data item if the UID data item is\n   present.  Both requirements are to simplify handling of converted\n   data in clients.\n\n   Example:\n         C: e002 CONVERT 2 (NIL (\"PIX-X\" \"128\" \"PIX-Y\" \"96\")) (BINARY[2]\n             BODYPARTSTRUCTURE[2])\n         S: * 2 CONVERTED (TAG \"e002\") (BODYPARTSTRUCTURE[2] (\"IMAGE\"\n             \"JPEG\" () NIL NIL \"8bit\" 4182 NIL NIL NIL) BINARY[2]\n             ~{4182}\n            <this part of a document is a rescaled image in\n             JPEG format with width=128, height=96.>\n            )\n         S: e002 OK CONVERT COMPLETED\n\n8.3.  BINARY.SIZE CONVERT Request and Response Item\n\n   BINARY.SIZE[section-part]\n\n   This item requests the converted size of the section (i.e., the size\n   to expect in a response to the corresponding CONVERT BINARY request).\n   The returned value MUST be exact and MUST NOT change during a\n   duration of an IMAP \"session\", unless the message is expunged in\n   another session (see below).  This allows a client to download a\n   converted part in chunks (using \"<partial>\").  This requirement means\n   that in most cases the server needs to perform conversion of the\n   requested body part before returning its size.\n\n   If the message is expunged in another session, then the server MAY\n   return the value 0 in response to the BINARY.SIZE request item later\n   in the same session.\n\n   In order to allow for upgrade of server transcoding components,\n   clients MUST NOT assume that repeating a particular body part\n   conversion in another IMAP \"session\" would yield the same result as a\n   previous conversion of the very same body part -- any characteristics\n   of the converted body part might be different (format, size, etc.).\n   In particular, clients MUST NOT cache sizes of converted messages/\n   body parts beyond duration of any IMAP \"session\", or use sizes\n   obtained in one connection in another IMAP connection to the same\n   server.\n\n   Historical note: Previous experience with IMAP servers that returned\n   estimated RFC822.SIZE value shows that this caused interoperability\n   problems.  If the server returns a value that is smaller than the\n   actual size, this will result in data truncation if <partial>\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 15]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   download is used.  If the server returns a value that is bigger than\n   the actual size, this might mislead a client to believe that it\n   doesn't have enough storage to download a body part.\n\n   Note for client implementors: client authors are cautioned that this\n   might be an expensive operation for some server implementations.\n   Requesting BINARY.SIZE for a large number of converted body parts or\n   for multiple conversions of the same body part can result in slow\n   performance and/or excessive server load and is discouraged.  Client\n   implementors should consider implementation approaches that limit\n   this request to only the most necessary cases and are encouraged to\n   test the performance impact of BINARY.SIZE with multiple server\n   implementations.\n\n8.4.  AVAILABLECONVERSIONS CONVERT Request and Response Item\n\n   AVAILABLECONVERSIONS[section-part] allows the client to request the\n   list of target MIME types the specified body part of a message or the\n   whole message can be converted to.  This data item is only useful\n   when the default conversion (see Section 6) is requested.\n\n   This data item MUST return a list of target MIME types that is a\n   subset of the list returned by the CONVERSIONS command for the same\n   source and target MIME type pairs.  If specific conversion is\n   requested, it MUST return the target MIME type as requested in the\n   CONVERT command, or the ERROR phrase.\n\n   For both specific or default conversion requests, if conversion\n   parameters are specified, then the server must take them into\n   consideration when generating the list of target MIME types.  For\n   example, if one or more of the conversion parameters doesn't apply to\n   a potential target MIME type, then such MIME type MUST be omitted\n   from the resulting list.  If the server only had a single target MIME\n   type candidate and it was discarded due to the list of conversion\n   parameters, then the server SHOULD return the ERROR phrase instead of\n   the empty list of the target MIME types.\n\n   The AVAILABLECONVERSIONS request SHOULD be processed quickly if\n   specified by itself.  Note that if a MIME type is returned in\n   response to the AVAILABLECONVERSIONS, there is no guaranty that the\n   corresponding BINARY/BINARY.SIZE/BODYPARTSTRUCTURE CONVERT request\n   will not fail.\n\n      Example:\n            C: f001 CONVERT 2 (NIL) (AVAILABLECONVERSIONS[2])\n            S: * 2 CONVERTED (TAG \"f001\") (AVAILABLECONVERSIONS[2]\n                        ((\"IMAGE/JPEG\" \"application/PostScript\"))\n            S: f001 OK CONVERT COMPLETED\n\n\n\nMelnikov & Coates           Standards Track                    [Page 16]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n8.5.  Implementation Considerations\n\n   Note that this section is normative.\n\n   Servers MAY refuse to execute conversion requests that convert\n   multiple messages and/or body parts at once, e.g., a conversion\n   request that specifies multiple message numbers/UIDs.  If the server\n   refuses a conversion because the request lists too many messages, the\n   server MUST return the MAXCONVERTMESSAGES response code (see\n   Section 9).  For example:\n\n       C: g001 CONVERT 1:* (\"text/plain\" (\"charset\" \"us-ascii\"))\n           BINARY[3]\n       S: g001 NO [MAXCONVERTMESSAGES 1]\n\n   If the server refuses a conversion because the request lists too many\n   body parts, the server MUST return the MAXCONVERTPARTS response code\n   (see Section 9).  For example:\n\n      C: h001 CONVERT 1 (\"text/plain\" (\"charset\" \"us-ascii\"))\n          (BINARY[1] BINARY[2])\n\n      S: g001 NO [MAXCONVERTPARTS 1] You can only request 1 body part at\n          any given time\n\n   Note for server implementors: In order to improve performance,\n   implementations SHOULD cache converted body parts.  For example, the\n   server may perform a body part conversion when it receives the first\n   BINARY.SIZE[...], BODYPARTSTRUCTURE[...], or BINARY[...] request and\n   cache it until the client requests conversion/download of another\n   body part, a different conversion of the same body part, or until the\n   mailbox is closed.  In order to mitigate denial-of-service attacks\n   from misbehaving or badly-written clients, a server SHOULD limit the\n   number of converted body parts it can cache.  Servers SHOULD be able\n   to cache at least 2 conversions at any given time.\n\n9.  Status Responses and Response Code Extensions\n\n   A syntactically invalid MIME media type SHOULD generate a BAD tagged\n   response from the server.  An unrecognized MIME media type generates\n   a NO tagged response.\n\n   Some transcodings may require parameters.  If a transcoding request\n   with no parameters is sent for a format which requires parameters,\n   the server will return an ERROR MISSINGPARAMETERS phrase in place of\n   the data associated with the data items requested.  This is analogous\n   to the NIL response in FETCH, but with structured data associated\n   with the failure.\n\n\n\nMelnikov & Coates           Standards Track                    [Page 17]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   If the server is unable to perform the requested conversion because a\n   resource is temporary unavailable (e.g., lack of disk space,\n   temporary internal error, transcoding service down), then the server\n   MUST return a tagged NO response that SHOULD contain the TEMPFAIL\n   response code (see below), or an ERROR TEMPFAIL phrase.\n\n   If the requested conversion cannot be performed because of a\n   permanent error, for example, if a proprietary document format has no\n   existing transcoding implementation, the server MUST return a\n   CONVERTED response containing a ERROR BADPARAMETERS or ERROR\n   MISSINGPARAMETERS phrase.\n\n   The server MAY choose to return one ERROR phrase for a single\n   conversion if several related data items are requested.  For\n   instance:\n\n     C: b002 CONVERT 2 (\"text/plain\" (\"charset\" \"us-ascii\"))\n         (BINARY[3] BODYPARTSTRUCTURE[3])\n     S: * 2 CONVERTED (tag \"b002\") (BODYPARTSTRUCTURE[3]\n         (ERROR \"Source text has non us-ascii\" BADPARAMETERS\n         \"text/html\" \"text/plain\" (\"charset\" \"us-ascii\")))\n     S: b002 NO All conversions failed\n\n   If at least one conversion succeeds, the server MUST return an OK\n   response.  If all conversions fail, the server MAY return OK or NO.\n   For instance:\n\n     C: b002 CONVERT 2 (\"text/plain\" (\"charset\" \"us-ascii\"))\n         (BINARY[3] BODYPARTSTRUCTURE[3] BINARY[4]\n         BODYPARTSTRUCTURE[4])\n     S: * 2 CONVERTED (tag \"b002\") (BODYPARTSTRUCTURE[3]\n         (ERROR \"Source text has non us-ascii\" BADPARAMETERS\n         \"text/html\" \"text/plain\" (\"charset\" \"us-ascii\"))\n         BODYSTRUCTURE[4] (\"TEXT\" \"PLAIN\" (CHARSET US-ASCII)\n         NIL NIL \"8bit\" 4182 NIL NIL NIL) BINARY[4] {4182}\n           <body in text plain>\n        )\n     S: b002 OK Some conversions failed\n\n   In general, the client can tell from the BODYPARTSTRUCTURE response\n   whether or not its request was honored exactly, but may not know the\n   reasons why.\n\n   This document defines the following response codes that can be\n   returned in the tagged NO response code.\n\n   TEMPFAIL -  The transcoding request failed temporarily.  It might\n         succeed later, so the client MAY retry.\n\n\n\nMelnikov & Coates           Standards Track                    [Page 18]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   MAXCONVERTMESSAGES <number> -  The server is unable or unwilling to\n         convert more than <number> messages in any given CONVERT/UID\n         CONVERT request.\n\n   MAXCONVERTPARTS <number> -  The server is unable or unwilling to\n         convert more than <number> body parts of a message at once in\n         any given CONVERT/UID CONVERT request.\n\n   The word ERROR is always followed by an informal human-readable\n   descriptive text, which is followed by the convert-error-code.  The\n   convert-error-code MUST be one of the following:\n\n   TEMPFAIL mm -  The transcoding request failed temporarily.  It might\n         succeed later, so the client MAY retry.  The client SHOULD wait\n         for at least mm minutes before retrying.\n\n   BADPARAMETERS  from-concrete-mime-type to-mime-type\n   \"(\" transcoding-params \")\" -\n         The listed parameters were not understood, not valid for the\n         source/destination MIME type pair, had invalid values or could\n         not be honored for another reason noted in the human-readable\n         text that was specified after the ERROR label.  The\n         transcoding-params can be omitted, in which case, it means that\n         the conversion from the from-concrete-mime-type to the to-mime-\n         type is not possible.  If the from-concrete-mime-type is NIL,\n         this means that the specified body part doesn't exist.  All\n         unrecognized or irrelevant parameters MUST be listed in the\n         transcoding-params.  It is not legal behavior to ignore\n         irrelevant parameters.\n\n         Note that if the client requested the \"default conversion\" (see\n         Section 6), the to-mime-type contains the destination MIME type\n         chosen by the server.\n\n   MISSINGPARAMETERS  from-concrete-mime-type to-mime-type\n   \"(\" transcoding-params \")\" -\n         The listed parameters are required for conversion of the\n         specified source MIME type to the destination MIME type, but\n         were not seen in the request.  Note that if the client\n         requested the \"default conversion\" (see Section 6), the to-\n         mime-type contains the destination MIME type chosen by the\n         server.\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 19]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n      Examples:\n\n         C: b002 CONVERT 2 (\"APPLICATION/PDF\") BINARY[3]\n         S: b002 NO [TEMPFAIL] All conversions failed\n\n         C: b003 CONVERT 2 (\"TEXT/PLAIN\") BINARY[3]\n         S: * 2 CONVERTED (tag \"b003\") (BINARY[3]\n             (ERROR \"CHARSET must be specified for text conversions\"\n             MISSINGPARAMETERS (CHARSET)))\n         S: b003 NO All conversions failed\n\n         C: b005 CONVERT 2 (\"TEXT/PLAIN\" (CHARSET \"US-ASCII\"\n                   UNKNOWN-CHARACTER-REPLACEMENT \"<badchar>\")) BINARY[3]\n         S: * 2 CONVERTED (tag \"b005\") (BINARY[3]\n             (ERROR \"UNKNOWN-CHARACTER-REPLACEMENT limited to 4\n             bytes\" BADPARAMETERS (UNKNOWN-CHARACTER-REPLACEMENT\n             \"<badchar>\")))\n         S: b005 NO All conversions failed\n\n10.  Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (ABNF) notation as used in [ABNF], and incorporates by reference\n   the core rules defined in that document.\n\n   This syntax augments the grammar specified in [RFC3501] and\n   [RFC3516].  Non-terminals not defined in this document can be found\n   in [RFC3501], [RFC3516], [IMAPABNF], [MIME-MTSRP], and\n   [MEDIAFEAT-REG].\n\n       command-select  =/ convert\n\n       uid             =/ \"UID\" SP convert\n                     ; Unique identifiers used instead of message\n                     ; sequence numbers\n\n       convert         = \"CONVERT\" SP sequence-set SP convert-params SP\n                         ( convert-att /\n                           \"(\" convert-att *(SP convert-att) \")\" )\n\n       convert-att     = \"UID\" /\n                         \"BODYPARTSTRUCTURE\" section-convert /\n                         \"BINARY\" section-convert [partial] /\n                         \"BINARY.SIZE\" section-convert /\n                         \"BODY[HEADER]\" /\n                         \"BODY[\" section-part \".HEADER]\" /\n                         \"BODY[\" section-part \".MIME]\" /\n                         \"AVAILABLECONVERSIONS\" section-convert\n\n\n\nMelnikov & Coates           Standards Track                    [Page 20]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n                     ; <partial> is defined in [RFC3516].\n                     ; <section-part> is defined in [RFC3501].\n\n       convert-params = \"(\" (quoted-to-mime-type / default-conversion)\n                        [SP \"(\" transcoding-params \")\"] \")\"\n\n       quoted-to-mime-type = DQUOTE to-mime-type DQUOTE\n\n       transcoding-params  = transcoding-param\n                             *(SP transcoding-param)\n\n       transcoding-param-names  = transcoding-param-name\n                             *(SP transcoding-param-name)\n\n       transcoding-param  = transcoding-param-name SP\n                            transcoding-param-value\n\n       transcoding-param-name = astring\n                ; <transcod-param-name-nq> represented as a quoted,\n                ; literal or atom.  Note that\n                ; <transcod-param-name-nq> allows for \"%\", which is\n                ; not allowed in atoms.  Such values must be\n                ; represented as quoted or literal.\n\n       transcod-param-name-nq = Feature-tag\n                ; <Feature-tag> is defined in [MEDIAFEAT-REG].\n\n       transcoding-param-value = astring\n\n       default-conversion = \"NIL\"\n\n       message-data   =/ nz-number SP \"CONVERTED\" SP convert-correlator\n                          SP convert-msg-attrs\n\n       convert-correlator = \"(\" \"TAG\" SP tag-string \")\"\n\n       tag-string = string\n                     ; tag of the command that caused\n                     ; the CONVERTED response, sent as\n                     ; a string.\n\n       convert-msg-attrs = \"(\" convert-msg-att *(SP convert-msg-att) \")\"\n                     ; \"UID\" MUST be the first data item, if present.\n\n       convert-msg-att = msg-att-semistat / msg-att-conv-static\n\n       msg-att-conv-static  = \"UID\" SP uniqueid\n                     ; MUST NOT change for a message\n\n\n\nMelnikov & Coates           Standards Track                    [Page 21]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n       msg-att-semistat =\n                    ( \"BINARY\" section-convert [\"<\" number \">\"] SP\n                       (nstring / literal8 / converterror-phrase) ) /\n                    ( \"BINARY.SIZE\" section-convert SP\n                       (number / converterror-phrase) ) /\n                    ( \"BODYPARTSTRUCTURE\" section-convert SP\n                       (body / converterror-phrase) ) /\n                    ( \"AVAILABLECONVERSIONS\" section-convert SP\n                       (mimetype-list / converterror-phrase) )\n                     ; MUST NOT change during an IMAP \"session\",\n                     ; but not necessarily static in the long term.\n\n       section-convert = section-binary\n                     ; <section-binary> is defined in [RFC3516].\n                     ;\n                     ; Note that unlike [RFC3516], conversion\n                     ; of a top level multipart/* is allowed.\n\n       resp-text-code =/ \"TEMPFAIL\" /\n                         \"MAXCONVERTMESSAGES\" SP nz-number /\n                         \"MAXCONVERTPARTS\" SP nz-number\n           ; <resp-text-code> is defined in [RFC3501].\n\n       mimetype-and-params = quoted-to-mime-type\n           [SP \"(\" transcoding-params \")\"]\n           ; always includes a specific MIME type\n\n       mimetype-list = \"(\" \"(\" [quoted-to-mime-type\n                                *(SP quoted-to-mime-type)] \")\" \")\"\n           ; Unordered list of MIME types.  It can be empty.\n           ;\n           ; Two levels of parenthesis is needed to distinguish this\n           ; data from <converterror-phrase>.\n\n       converterror-phrase = \"(\" \"ERROR\" SP\n            convert-err-descript SP convert-error-code \")\"\n\n       convert-error-code = \"TEMPFAIL\" [SP nz-number]\n                          / bad-params\n                          / missing-params\n\n       convert-err-descript = string\n            ; Human-readable text explaining the conversion error.\n                    ; The default charset is US-ASCII, unless\n                    ; the LANGUAGE command [IMAP-I18N] is called, when\n                    ; the charset changes to UTF-8.\n\n       quoted-from-mime-type = DQUOTE from-concrete-mime-type DQUOTE\n\n\n\nMelnikov & Coates           Standards Track                    [Page 22]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n       bad-params = \"BADPARAMETERS\"\n              1*(SP (quoted-from-mime-type / nil)\n                 SP mimetype-and-params)\n           ; nil is only returned when the body part doesn't exist.\n\n       missing-params = \"MISSINGPARAMETERS\"\n              1*(SP quoted-from-mime-type SP\n                    mimetype-and-missing-params)\n\n       mimetype-and-missing-params = quoted-to-mime-type\n           \"(\" transcoding-param-names \")\"\n           ; always includes a specific MIME type\n\n       concrete-mime-type = type-name \"/\" subtype-name\n                       ; i.e., \"type/subtype\".\n                       ; type-name and subtype-name\n                       ; are defined in [MIME-MTSRP].\n\n       from-concrete-mime-type = concrete-mime-type\n\n       to-mime-type = concrete-mime-type\n\n       command-auth =/ conversions-cmd\n\n       conversions-cmd = \"CONVERSIONS\" SP from-mime-type-req SP\n                         to-mime-type-req\n\n       from-mime-type-req = astring\n         ; \"mime-type-req\" represented as IMAP <atom>,\n         ; <quoted> or <literal>\n\n       to-mime-type-req = astring\n         ; <mime-type-req> represented as IMAP <atom>,\n         ; <quoted> or <literal>.\n         ; Note that <mime-type-req> allows for \"*\",\n         ; which is not allowed in <atom>.  Such values must\n         ; be represented as <quoted> or <literal>.\n\n       any-mime-type  = \"*\"\n\n       mime-type-req = any-mime-type /\n                       (type-name \"/\" any-mime-type) /\n                       concrete-mime-type\n         ; '*', 'type/*' or 'type/subtype'.\n         ; type-name is defined in [MIME-MTSRP].\n\n       response-payload =/ conversion-data\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 23]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n       conversion-data = \"CONVERSION\" SP quoted-from-mime-type SP\n                         quoted-to-mime-type\n                         [SP \"(\" transcoding-param-name\n                          *(SP transcoding-param-name) \")\"]\n\n11.  Manageability Considerations\n\n   The monitoring of CONVERT operation is similar to monitoring of the\n   IMAP FETCH operation.\n\n   At the time of writing this document, there is no standard IMAP MIB\n   defined.  Similarly, a standard MIB for monitoring CONVERT operations\n   and their failures does not exist.  However, the authors believe that\n   in the absence of such a MIB, server implementations SHOULD provide\n   operators with tools to report the following information:\n\n   o  which conversions (source and target MIME types and possibly\n      conversion parameters used) are invoked more frequently and how\n      long they take,\n\n   o  information about conversion errors and which error condition\n      caused them (see Section 9), and\n\n   o  information about users which invoke conversion operation.\n\n   This information can help operators to detect client abuse of this\n   extension and scalability issues that might arise from its use.\n\n   Standardizing these tools may be the subject of future work.\n\n12.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  This document defines the CONVERT\n   IMAP capability.  IANA has added this extension to the IANA IMAP\n   Capability registry.\n\n   IANA has performed registrations as defined in the following\n   subsections.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 24]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n12.1.  Registration of unknown-character-replacement Media Type\n       Parameter\n\n   IANA has added the following registration to the registry established\n   by RFC 2506.\n\n   To: \"Media feature tags mailing list\"\n       <media-feature-tags@apps.ietf.org>\n\n   Subject: Registration of media feature tag\n            unknown-character-replacement\n\n   Media feature tag name:\n      unknown-character-replacement\n\n   ASN.1 identifier associated with feature tag:\n      1.3.6.1.8.1.33\n\n   Summary of the media feature indicated by this feature tag:\n       Allows servers that can perform charset conversion for text/plain\n       text/html, text/css, text/csv, text/enriched, and text/xml MIME\n       types to replace characters not supported by the target charset\n       with a fixed string, such as \"?\".\n       This feature tag is also applicable to other conversions\n       to text, e.g., conversion of images using OCR (optical\n       character recognition).\n\n   Values appropriate for use with this feature tag:\n       The feature tag contains a UTF-8 string used to replace any\n       characters from the source media type that can't be\n       represented in the target media type.\n\n   The feature tag is intended primarily for use in the following\n   applications, protocols, services, or negotiation mechanisms:\n       IMAP CONVERT extension [RFC5259]\n\n   Examples of typical use:\n      C: b001 CONVERT 2 BINARY[3 (\"text/plain\" (\"charset\"\n          \"us-ascii\" \"unknown-character-replacement\" \"?\"))]\n\n   Related standards or documents:\n      [RFC5259]\n      [CHARSET-REG]\n\n   Considerations particular to use in individual applications,\n   protocols, services, or negotiation mechanisms:\n      None\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 25]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   Interoperability considerations: None\n\n   Security considerations: None\n\n   Additional information:\n      This media feature only make sense for MIME types that\n      also support the \"charset\" media type parameter\n      [CHARSET-REG].\n\n   Name(s) & email address(es) of person(s) to contact for further\n   information:\n      Alexey Melnikov <alexey.melnikov@isode.com>\n\n   Intended usage:\n      COMMON\n\n   Author/Change controller:\n      IETF\n\n   Requested IANA publication delay:\n      None\n\n   Other information:\n      None\n\n13.  Security Considerations\n\n   It is to be noted that some conversions may present security threats\n   (e.g., converting a document to a damaging executable, exploiting a\n   buffer overflow in a media codec/parser, or a denial-of-service\n   attack against a client or a server such as requesting an image be\n   scaled to extremely large dimensions).  Server SHOULD refuse to\n   execute CPU-expensive conversions.  Servers should avoid dangerous\n   conversions if possible.  Whenever possible, servers should perform\n   verification of the converted attachments before returning them to\n   the client.  Clients should be careful when requesting conversions or\n   processing transformed attachments.  Clients SHOULD use mutual Simple\n   Authentication and Security Layer (SASL) authentication and the SASL/\n   TLS integrity layer, to make sure they are talking to trusted\n   servers.\n\n   When the client requests a server-side conversion of a signed body\n   part (e.g., a part inside multipart/signed), there is no way for the\n   client to verify that the converted content is authentic.  A client\n   not trusting the server to perform conversion of a signed body part\n   can download the signed object, verify the signature, and perform the\n   conversion itself.\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 26]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n   A client can create a carefully crafted bad message with the APPEND\n   command followed by the CONVERT command to attack the server.  If the\n   server's conversion function or library has a security problem (such\n   as vulnerability to a buffer overflow), this could result in\n   privilege escalation or denial of service.  In order to mitigate such\n   attacks, servers SHOULD log the client authentication identity on\n   APPEND and/or CONVERT operations in order to facilitate tracking of\n   abusive clients.  Also server implementors SHOULD isolate the\n   conversion function or library from the privileged mailstore, perhaps\n   by running it within a distinct process.\n\n   Deployments in which the actual transcoding is done outside the IMAP\n   server in a separate server are recommended to keep the servers in\n   the same trusted domain (e.g., subnet).\n\n14.  Acknowledgments\n\n   Stephane H. Maes and Ray Cromwell from Oracle edited several earlier\n   versions of this document.  Their contribution is gratefully\n   acknowledged.\n\n   The authors want to specifically acknowledge the excellent criticism\n   and comments received from Randall Gellens (Qualcomm), Arnt\n   Gulbrandsen (Oryx), Zoltan Ordogh (Nokia), Ben Last (Emccsoft), Dan\n   Karp (Zimbra), Pete Resnick (Qualcomm), Chris Newman (Sun), Ted\n   Hardie (Qualcomm), Larry Masinter (Adobe), Philip Guenther\n   (Sendmail), Greg Vaudreuil (Alcatel-Lucent), David Harrington\n   (Comcast), Dave Cridland (Isode), Pasi Eronen (Nokia), Magnus\n   Westerlund (Ericsson), and Jari Arkko (Ericsson), which improved the\n   quality of this specification considerably.\n\n   The authors would also like to specially thank Dave Cridland for the\n   MEDIACAPS command proposal and Dan Karp for the CONVERSIONS command\n   proposal.\n\n   The authors also want to thank all who have contributed key insight\n   and extensively reviewed and discussed the concepts of CONVERT and\n   its predecessor P-IMAP.  In particular, this includes the authors of\n   the LCONVERT document: Rafiul Ahad (Oracle Corporation), Eugene Chiu\n   (Oracle Corporation), Ray Cromwell (Oracle Corporation), Jia-der Day\n   (Oracle Corporation), Vi Ha (Oracle Corporation), Wook-Hyun Jeong\n   (Samsung Electronics Co. LTF), Chang Kuang (Oracle Corporation),\n   Rodrigo Lima (Oracle Corporation), Stephane H. Maes (Oracle\n   Corporation), Gustaf Rosell (Sony Ericsson), Jean Sini (Symbol\n   Technologies), Sung-Mu Son (LG Electronics), Fan Xiaohui (China\n   Mobile Communications Corporation (CMCC)), and Zhao Lijun (China\n   Mobile Communications Corporation (CMCC)).\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 27]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n15.  References\n\n15.1.  Normative References\n\n   [ABNF]           Crocker, D., Ed. and P. Overell, \"Augmented BNF for\n                    Syntax Specifications: ABNF\", STD 68, RFC 5234,\n                    January 2008.\n\n   [CHARSET-REG]    Hoffman, P., \"Registration of Charset and Languages\n                    Media Features Tags\", RFC 2987, November 2000.\n\n   [IMAPABNF]       Melnikov, A. and C. Daboo, \"Collected Extensions to\n                    IMAP4 ABNF\", RFC 4466, April 2006.\n\n   [MEDIAFEAT-REG]  Holtman, K., Mutz, A., and T. Hardie, \"Media Feature\n                    Tag Registration Procedure\", BCP 31, RFC 2506,\n                    March 1999.\n\n   [MIME-MTSRP]     Freed, N. and J. Klensin, \"Media Type Specifications\n                    and Registration Procedures\", BCP 13, RFC 4288,\n                    December 2005.\n\n   [RFC2047]        Moore, K., \"MIME (Multipurpose Internet Mail\n                    Extensions) Part Three: Message Header Extensions\n                    for Non-ASCII Text\", RFC 2047, November 1996.\n\n   [RFC2119]        Bradner, S., \"Key words for use in RFCs to Indicate\n                    Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2231]        Freed, N. and K. Moore, \"MIME Parameter Value and\n                    Encoded Word Extensions:\n                    Character Sets, Languages, and Continuations\",\n                    RFC 2231, November 1997.\n\n   [RFC3501]        Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL -\n                    VERSION 4rev1\", RFC 3501, March 2003.\n\n   [RFC3516]        Nerenberg, L., \"IMAP4 Binary Content Extension\",\n                    RFC 3516, April 2003.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 28]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\n15.2.  Informative References\n\n   [DISP-FEATURES]  Masinter, L., Wing, D., Mutz, A., and K. Holtman,\n                    \"Media Features for Display, Print, and Fax\",\n                    RFC 2534, March 1999.\n\n   [IMAP-I18N]      Newman, C., Gulbrandsen, A., and A. Melnikov,\n                    \"Internet Message Access Protocol\n                    Internationalization\", RFC 5255, June 2008.\n\n   [LEM-STREAMING]  Cook, N., \"Streaming Internet Messaging\n                    Attachments\", Work in Progress, June 2008.\n\n   [OMA-ME-RD]      OMA, \"Open Mobile Alliance Mobile Email Requirement\n                    Document\", OMA 55.919 3.0.0, December 2007.\n\n   [OMA-STI]        OMA, \"Open Mobile Alliance, Standard Transcoding\n                    Interface Specification\", OMA OMA-STI-V1_0,\n                    December 2005.\n\nAuthors' Addresses\n\n   Alexey Melnikov (editor)\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Peter Coates (editor)\n   Sun Microsystems\n   185 Falcon Drive\n   Whitehorse, YT  Y1A 6T2\n   Canada\n\n   EMail: peter.coates@Sun.COM\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 29]\n\f\nRFC 5259                 IMAP CONVERT extension                July 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Coates           Standards Track                    [Page 30]\n\f\n"
  },
  {
    "path": "rfc/rfc5267.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        D. Cridland\nRequest for Comments: 5267                                       C. King\nCategory: Standards Track                                  Isode Limited\n                                                               July 2008\n\n\n                           Contexts for IMAP4\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   The IMAP4rev1 protocol has powerful search facilities as part of the\n   core protocol, but lacks the ability to create live, updated results\n   that can be easily handled.  This memo provides such an extension,\n   and shows how it can be used to provide a facility similar to virtual\n   mailboxes.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                     [Page 1]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3\n   2.  Conventions Used in This Document  . . . . . . . . . . . . . .  3\n   3.  Extended Sort Syntax . . . . . . . . . . . . . . . . . . . . .  3\n     3.1.  ESORT Extension  . . . . . . . . . . . . . . . . . . . . .  4\n     3.2.  Ranges in Extended Sort Results  . . . . . . . . . . . . .  4\n     3.3.  Extended SORT Example  . . . . . . . . . . . . . . . . . .  4\n   4.  Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . .  5\n     4.1.  Overview . . . . . . . . . . . . . . . . . . . . . . . . .  5\n     4.2.  Context Hint . . . . . . . . . . . . . . . . . . . . . . .  5\n     4.3.  Notifications of Changes . . . . . . . . . . . . . . . . .  6\n       4.3.1.  Refusing to Update Contexts  . . . . . . . . . . . . .  7\n       4.3.2.  Common Features of ADDTO and REMOVEFROM  . . . . . . .  8\n       4.3.3.  ADDTO Return Data Item . . . . . . . . . . . . . . . .  8\n       4.3.4.  REMOVEFROM Return Data Item  . . . . . . . . . . . . .  9\n       4.3.5.  The CANCELUPDATE Command . . . . . . . . . . . . . . . 10\n     4.4.  Partial Results  . . . . . . . . . . . . . . . . . . . . . 10\n     4.5.  Caching Results  . . . . . . . . . . . . . . . . . . . . . 11\n   5.  Formal Syntax  . . . . . . . . . . . . . . . . . . . . . . . . 12\n   6.  Security Considerations  . . . . . . . . . . . . . . . . . . . 13\n   7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 13\n   8.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 13\n   9.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 14\n     9.1.  Normative References . . . . . . . . . . . . . . . . . . . 14\n     9.2.  Informative References . . . . . . . . . . . . . . . . . . 14\n   Appendix A.  Cookbook  . . . . . . . . . . . . . . . . . . . . . . 15\n     A.1.  Virtual Mailboxes  . . . . . . . . . . . . . . . . . . . . 15\n     A.2.  Trash Mailboxes  . . . . . . . . . . . . . . . . . . . . . 15\n     A.3.  Immediate EXPUNGE Notifications  . . . . . . . . . . . . . 15\n     A.4.  Monitoring Counts  . . . . . . . . . . . . . . . . . . . . 15\n     A.5.  Resynchronizing Contexts . . . . . . . . . . . . . . . . . 16\n   Appendix B.  Server Implementation Notes . . . . . . . . . . . . . 16\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                     [Page 2]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n1.  Introduction\n\n   Although the basic SEARCH command defined in [IMAP], and as enhanced\n   by [ESEARCH], is relatively compact in its representation, this\n   reduction saves only a certain amount of data, and huge mailboxes\n   might overwhelm the storage available for results on even relatively\n   high-end desktop machines.\n\n   The SORT command defined in [SORT] provides useful features, but is\n   hard to use effectively on changing mailboxes over low-bandwidth\n   connections.\n\n   This memo borrows concepts from [ACAP], such as providing a windowed\n   view onto search or sort results, and making updates that are\n   bandwidth and round-trip efficient.  These are provided by two\n   extensions: \"ESORT\" and \"CONTEXT\".\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client\n   messaging user agent and IMAP4rev1 ([IMAP]) server, respectively.\n   \"//\" indicates inline comments not part of the protocol exchange.\n   Line breaks are liberally inserted for clarity.  Examples are\n   intended to be read in order, such that the state remains from one\n   example to the next.\n\n   Although the examples show a server that supports [ESEARCH], this is\n   not a strict requirement of this specification.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [KEYWORDS].\n\n   Other capitalized words are typically names of IMAP extensions or\n   commands -- these are uppercased for clarity only, and are case-\n   insensitive.\n\n3.  Extended Sort Syntax\n\n   Servers implementing the extended SORT provide a suite of extensions\n   to the SORT and UID SORT commands defined in [SORT].  This allows for\n   return options, as used with SEARCH and specified in [IMAP-ABNF], to\n   be used with SORT in a similar manner.\n\n   The SORT and UID SORT commands are extended by the addition of an\n   optional list of return options that follow a RETURN atom immediately\n   after the command.  If this is missing, the server will return\n   results as specified in [SORT].\n\n\n\nCridland & King             Standards Track                     [Page 3]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   The extended SORT command always returns results in the requested\n   sort order, but is otherwise identical in its behaviour to the\n   extended SEARCH command defined in [IMAP-ABNF], as extended by\n   [ESEARCH].  In particular, the extended SORT command returns results\n   in an ESEARCH response.\n\n3.1.  ESORT Extension\n\n   Servers advertising the capability \"ESORT\" support the return options\n   specified in [ESEARCH] in the SORT command.  These return options are\n   adapted as follows:\n\n   MIN\n      Return the message number/UID of the lowest sorted message\n      satisfying the search criteria.\n\n   MAX\n      Return the message number/UID of the highest sorted message\n      satisfying the search criteria.\n\n   ALL\n      Return all message numbers/UIDs which match the search criteria,\n      in the requested sort order, using a sequence-set.  Note the use\n      of ranges described below in Section 3.2.\n\n   COUNT\n      As in [ESEARCH].\n\n3.2.  Ranges in Extended Sort Results\n\n   Any ranges given by the server, including those given as part of the\n   sequence-set, in an ESEARCH response resulting from an extended SORT\n   or UID SORT command, MUST be ordered in increasing numerical order\n   after expansion, as per usual [IMAP] rules.\n\n   In particular this means that 10:12 is equivalent to 12:10, and\n   10,11,12.  To avoid confusion, servers SHOULD present ranges only\n   when the first seq-number is lower than the second; that is, either\n   of the forms 10:12 or 10,11,12 is acceptable, but 12:10 SHOULD be\n   avoided.\n\n3.3.  Extended SORT Example\n\n   If the list of return options is present but empty, then the server\n   provides the ALL return data item in an ESEARCH response.  This is\n   functionally equivalent to an unextended UID SORT command, but can\n   use a smaller representation:\n\n\n\n\nCridland & King             Standards Track                     [Page 4]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n         C: E01 UID SORT RETURN () (REVERSE DATE) UTF-8 UNDELETED\n            UNKEYWORD $Junk\n         S: * ESEARCH (TAG \"E01\") UID ALL 23765,23764,23763,23761,[...]\n         S: E01 OK Sort completed\n\n   Note that the initial three results are not represented as the range\n   23765:23763 as mandated in Section 3.2.\n\n4.  Contexts\n\n4.1.  Overview\n\n   The Contexts extension is present in any IMAP4rev1 server that\n   includes the string \"CONTEXT=SEARCH\", and/or \"CONTEXT=SORT\", within\n   its advertised capabilities.\n\n   In the case of CONTEXT=SEARCH, the server supports the extended\n   SEARCH command syntax described in [IMAP-ABNF], and accepts three\n   additional return options.\n\n   Servers advertising CONTEXT=SORT also advertise the SORT capability,\n   as described in [SORT], support the extended SORT command syntax\n   described in Section 3, and accept three additional return options\n   for this extended SORT.\n\n   These additional return options allow for notifications of changes to\n   the results of SEARCH or SORT commands, and also allow for access to\n   partial results.\n\n   A server advertising the CONTEXT=SEARCH extension will order all\n   SEARCH results, whether from a UID SEARCH or SEARCH command, in\n   mailbox order -- that is, by message number and UID.  Therefore, the\n   UID SEARCH, SEARCH, UID SORT, or SORT command used -- collectively\n   known as the searching command -- will always have an order, the\n   requested order, which will be the mailbox order for UID SEARCH and\n   SEARCH commands.\n\n   All of the return specifiers have no interaction with either each\n   other or any return specifiers defined in [ESEARCH] or Section 3.1;\n   however, it is believed that implementations supporting CONTEXT will\n   also support ESEARCH and ESORT.\n\n4.2.  Context Hint\n\n   The return option CONTEXT SHOULD be used by a client to indicate that\n   subsequent use of the search criteria are likely.  Servers MAY ignore\n   this return option or use it as a hint to maintain a full result\n   cache, or index.\n\n\n\nCridland & King             Standards Track                     [Page 5]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   A client might choose to obtain a count of matching messages prior to\n   obtaining actual results.  Here, the client signals its intention to\n   fetch the results themselves:\n\n       C: A01 SEARCH RETURN (CONTEXT COUNT) UNDELETED\n          UNKEYWORD $Junk\n       S: * ESEARCH (TAG \"A01\") COUNT 23765\n       S: A01 OK Search completed.\n\n4.3.  Notifications of Changes\n\n   The search return option UPDATE, if used by a client, causes the\n   server to issue unsolicited notifications containing updates to the\n   results that would be returned by an unmodified searching command.\n   These update sets are carried in ADDTO and REMOVEFROM data items in\n   ESEARCH responses.\n\n   These ESEARCH responses carry a search correlator of the searching\n   command, hence clients MUST NOT reuse tags, as already specified in\n   Section 2.2.1 of [IMAP].  An attempt to use UPDATE where a tag is\n   already in use with a previous searching command that itself used\n   UPDATE SHALL result in the server rejecting the searching command\n   with a BAD response.\n\n   Both ADDTO and REMOVEFROM data items SHOULD be delivered to clients\n   in a timely manner, as and when results change, whether by new\n   messages arriving in the mailbox, metadata such as flags being\n   changed, or messages being expunged.\n\n   Typically, this would occur at the same time as the FETCH, EXISTS, or\n   EXPUNGE responses carrying the source of the change.\n\n   Updates will cease when the mailbox is no longer selected, or when\n   the CANCELUPDATE command, defined in Section 4.3.5, is issued by the\n   client, whichever is sooner.\n\n   Unlike [ACAP], there is no requirement that a context need be created\n   with CONTEXT to use UPDATE, and in addition, the lack of UPDATE with\n   a CONTEXT does not affect the results caused by later searching\n   commands -- there is no snapshot facility.\n\n   There is no interaction between UPDATE and any other return options;\n   therefore, use of RETURN (UPDATE MIN), for example, does not notify\n   about the minimum UID or sequence number, but notifies instead about\n   all changes to the set of matching messages.  In particular, this\n   means that a client using UPDATE and PARTIAL on the same search\n   program could receive notifications about messages that do not\n   currently interest it.\n\n\n\nCridland & King             Standards Track                     [Page 6]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   Finally, as specified in the errata to [IMAP], any message sequence\n   numbers used in the search program are evaluated at the time the\n   command is received; therefore, if the messages referred to by such\n   message sequence numbers change, no notifications will be emitted.\n\n   This time, the client will require notifications of updates and\n   chooses to obtain a count:\n\n       C: B01 UID SEARCH RETURN (UPDATE COUNT) DELETED\n          KEYWORD $Junk\n       S: * ESEARCH (TAG \"B01\") COUNT 74\n       S: B01 OK Search completed, will notify.\n       // Note that the following is rejected, and has no effect:\n       C: B01 SORT RETURN (UPDATE) FLAGGED\n       S: B01 BAD Tag reuse\n\n4.3.1.  Refusing to Update Contexts\n\n   In some cases, the server MAY refuse to provide updates, such as if\n   an internal limit on the number of update contexts is reached.  In\n   such a case, an untagged NO is generated during processing of the\n   command with a response-code of NOUPDATE.  The response-code\n   contains, as argument, the tag of the search command for which the\n   server is refusing to honour the UPDATE request.\n\n   Other return options specified SHALL still be honoured.\n\n   Servers MUST provide at least one updating context per client, and\n   SHOULD provide more -- see Appendix B for strategies on reducing the\n   impact of additional updating contexts.  Since sorted contexts\n   require a higher implementation cost than unsorted contexts, refusal\n   to provide updates for a SORT command does not imply that SEARCH\n   contexts will also be refused.\n\n   This time, the client will require notifications of updates, and\n   chooses to obtain a count:\n\n       C: B02 UID SORT RETURN (UPDATE COUNT) UTF-8\n          KEYWORD $Junk\n       S: * ESEARCH (TAG \"B02\") COUNT 74\n       S: * NO [NOUPDATE \"B02\"] Too many contexts\n       S: B02 OK Search completed, will not notify.\n\n   Client handling might be to retry with a UID SEARCH command, or else\n   cancel an existing context; see Section 4.3.5.\n\n\n\n\n\n\nCridland & King             Standards Track                     [Page 7]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n4.3.2.  Common Features of ADDTO and REMOVEFROM\n\n   The result update set included in the return data item is specified\n   as UIDs or message numbers, depending on how the UPDATE was\n   specified.  If the UPDATE was present in a SEARCH or SORT command,\n   the results will be message numbers; in a UID SEARCH or UID SORT\n   command, they will be UIDs.\n\n   The client MUST process ADDTO and REMOVEFROM return data items in the\n   order they appear, including those within a single ESEARCH response.\n   Correspondingly, servers MUST generate ADDTO and REMOVEFROM responses\n   such that the results are maintained in the requested order.\n\n   As with any response aside from EXPUNGE, ESEARCH responses carrying\n   ADDTO and/or REMOVEFROM return data items MAY be sent at any time.\n   In particular, servers MAY send such responses when no command is in\n   progress, during the processing of any command, or when the client is\n   using the IDLE facility described in [IDLE].  Implementors are\n   recommended to read [NOTIFY] as a mechanism for clients to signal\n   servers that they are willing to process responses at any time, and\n   are also recommended to pay close attention to Section 5.3 of [IMAP].\n\n   It is anticipated that typical server implementations will emit ADDTO\n   when they normally emit the causal FETCH or EXISTS, and similarly\n   emit REMOVEFROM when they normally emit the causal FETCH or EXPUNGE.\n\n4.3.3.  ADDTO Return Data Item\n\n   The ADDTO return data item contains, as payload, a list containing\n   pairs of a context position and a set of result updates in the\n   requested order to be inserted at the context position.  Where the\n   searching command is a SEARCH or UID SEARCH command, the context\n   position MAY be zero.  Each pair is processed in the order that it\n   appears.\n\n   Note that an ADDTO containing message sequence numbers added as a\n   result of those messages being delivered or appended MUST be sent\n   after the EXISTS notification itself, in order that those sequence\n   numbers are valid.\n\n   If the context position is non-zero, the result update is inserted at\n   the given context position, meaning that the first result in the set\n   will occupy the new context position after insertion, and any prior\n   existing result at that context position will be shifted to a later\n   context position.\n\n\n\n\n\n\nCridland & King             Standards Track                     [Page 8]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   Where the context position is zero, the client MAY insert the message\n   numbers or UIDs in the result list such that the result list is\n   maintained in mailbox order.  In this case, servers are RECOMMENDED\n   to order the result update into mailbox order to produce the shortest\n   representation in set-syntax.\n\n       [...]\n       S: * 23762 FETCH (FLAGS (\\Deleted \\Seen))\n       S: * 23763 FETCH (FLAGS ($Junk \\Seen))\n       S: * ESEARCH (TAG \"B01\") UID ADDTO (0 32768:32769)\n\n   Note that this example assumes messages 23762 and 23763 with UIDs\n   32768 and 32769 (respectively) previously had neither \\Deleted nor\n   $Junk set.  Also note that only the ADDTO is included, and not the\n   (now changed) COUNT.\n\n   If the searching command \"C01\" initially generated a result list of\n   2734:2735, then the following three responses are equivalent, and\n   yield a result list of 2731:2735:\n\n       [...]\n       S: * ESEARCH (TAG \"C01\") UID ADDTO (1 2733 1 2732 1 2731)\n       S: * ESEARCH (TAG \"C01\") UID ADDTO (1 2733) ADDTO (1 2731:2732)\n       S: * ESEARCH (TAG \"C01\") UID ADDTO (1 2731:2733)\n\n   The last is the preferred representation.\n\n4.3.4.  REMOVEFROM Return Data Item\n\n   The REMOVEFROM return data item contains, as payload, a list\n   containing pairs of a context position and a set of result updates in\n   the requested order to be removed starting from the context position.\n   Where the searching command is a SEARCH or UID SEARCH command, the\n   context position MAY be zero.  Each pair is processed in the order\n   that it appears.\n\n   If the context position is non-zero, the results are removed at the\n   given context position, meaning that the first result in the set will\n   occupy the given context position before removal, and any prior\n   existing result at that context position will be shifted to an\n   earlier context position.\n\n   Where the context position is zero, the client removes the message\n   numbers or UIDs in the result list wherever they occur, and servers\n   are RECOMMENDED to order the result list in mailbox order to obtain\n   the best benefit from the set-syntax.\n\n\n\n\n\nCridland & King             Standards Track                     [Page 9]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   Note that a REMOVEFROM containing message sequence numbers removed as\n   a result of those messages being expunged MUST be sent prior to the\n   expunge notification itself, in order that those sequence numbers\n   remain valid.\n\n   Here, a message in the result list is expunged.  The REMOVEFROM is\n   shown to happen without any command in progress; see Section 4.3.2.\n   Note that EXPUNGE responses do not have this property.\n\n       [...]\n       S: * ESEARCH (TAG \"B01\") UID REMOVEFROM (0 32768)\n       C: B03 NOOP\n       S: * 23762 EXPUNGE\n       S: B03 OK Nothing done.\n\n4.3.5.  The CANCELUPDATE Command\n\n   When a client no longer wishes to receive updates, it may issue the\n   CANCELUPDATE command, which will prevent all updates to the contexts\n   named in the arguments from being transmitted by the server.  The\n   command takes, as arguments, one or more tags of the commands used to\n   request updates.\n\n   The server MAY free any resource associated with a context so\n   disabled -- however, the client is free to issue further searching\n   commands with the same criteria and requested order, including\n   PARTIAL requests.\n\n       C: B04 CANCELUPDATE \"B01\"\n       S: B04 OK No further updates.\n\n4.4.  Partial Results\n\n   The PARTIAL search return option causes the server to provide in an\n   ESEARCH response a subset of the results denoted by the sequence\n   range given as the mandatory argument.  The first result is 1; thus,\n   the first 500 results would be obtained by a return option of\n   \"PARTIAL 1:500\", and the second 500 by \"PARTIAL 501:1000\".  This\n   intentionally mirrors message sequence numbers.\n\n   A single command MUST NOT contain more than one PARTIAL or ALL search\n   return option -- that is, either one PARTIAL, one ALL, or neither\n   PARTIAL nor ALL is allowed.\n\n   For SEARCH results, the entire result list MUST be ordered in mailbox\n   order, that is, in UID or message sequence number order.\n\n\n\n\n\nCridland & King             Standards Track                    [Page 10]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   Where a PARTIAL search return option references results that do not\n   exist, by using a range which starts or ends higher than the current\n   number of results, then the server returns the results that are in\n   the set.  This yields a PARTIAL return data item that has, as\n   payload, the original range and a potentially missing set of results\n   that may be shorter than the extent of the range.\n\n   Clients need not request PARTIAL results in any particular order.\n   Because mailboxes may change, clients will often wish to use PARTIAL\n   in combination with UPDATE, especially if the intent is to walk a\n   large set of results; however, these return options do not interact\n   -- the UPDATE will provide notifications for all matching results.\n\n       // Recall from A01 that there are 23764 results.\n       C: A02 UID SEARCH RETURN (PARTIAL 23500:24000) UNDELETED\n          UNKEYWORD $Junk\n       C: A03 UID SEARCH RETURN (PARTIAL 1:500) UNDELETED\n          UNKEYWORD $Junk\n       C: A04 UID SEARCH RETURN (PARTIAL 24000:24500) UNDELETED\n          UNKEYWORD $Junk\n       S: * ESEARCH (TAG \"A02\") UID PARTIAL (23500:24000 ...)\n       // 264 results in set syntax elided,\n       // this spans the end of the results.\n       S: A02 OK Completed.\n       S: * ESEARCH (TAG \"A03\") UID PARTIAL (1:500 ...)\n       // 500 results in set syntax elided.\n       S: A03 OK Completed.\n       S: * ESEARCH (TAG \"A04\") UID PARTIAL (24000:24500 NIL)\n       // No results are present, this is beyond the end of the results.\n       S: A04 OK Completed.\n\n4.5.  Caching Results\n\n   Server implementations MAY cache results from a SEARCH or SORT,\n   whether or not hinted to by CONTEXT, in order to make subsequent\n   searches more efficient, perhaps by recommencing a subsequent PARTIAL\n   search where a previous search left off.  However, servers MUST\n   behave identically whether or not internal caching is taking place;\n   therefore, any such cache is required to be updated as changes to the\n   mailbox occur.  An alternate strategy would be to discard results\n   when any change occurs to the mailbox.\n\n\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                    [Page 11]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n5.  Formal Syntax\n\n   The collected formal syntax.  This uses ABNF as defined in [ABNF].\n   It includes definitions from [IMAP], [IMAP-ABNF], and [SORT].\n\n   capability          =/ \"CONTEXT=SEARCH\" / \"CONTEXT=SORT\" / \"ESORT\"\n       ;; <capability> from [IMAP]\n\n   command-select      =/ \"CANCELUPDATE\" 1*(SP quoted)\n       ;; <command-select> from [IMAP]\n\n   context-position      = number\n       ;; Context position may be 0 for SEARCH result additions.\n       ;; <number> from [IMAP]\n\n   modifier-context    = \"CONTEXT\"\n\n   modifier-partial    = \"PARTIAL\" SP partial-range\n\n   partial-range       = nz-number \":\" nz-number\n       ;; A range 500:400 is the same as 400:500.\n       ;; This is similar to <seq-range> from [IMAP],\n       ;; but cannot contain \"*\".\n\n   modifier-update     = \"UPDATE\"\n\n   search-return-opt   =/ modifier-context / modifier-partial /\n                          modifier-update\n       ;; All conform to <search-return-opt>, from [IMAP-ABNF]\n\n   resp-text-code      =/ \"NOUPDATE\" SP quoted\n       ;; <resp-text-code> from [IMAP]\n\n   ret-data-addto      = \"ADDTO\"\n                          SP \"(\" context-position SP sequence-set\n                          *(SP context-position SP sequence-set)\n                          \")\"\n       ;; <sequence-set> from [IMAP]\n\n   ret-data-partial    = \"PARTIAL\"\n                         SP \"(\" partial-range SP partial-results \")\"\n       ;; <partial-range> is the requested range.\n\n   partial-results     = sequence-set / \"NIL\"\n       ;; <sequence-set> from [IMAP]\n       ;; NIL indicates no results correspond to the requested range.\n\n\n\n\n\nCridland & King             Standards Track                    [Page 12]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   ret-data-removefrom = \"REMOVEFROM\"\n                          SP \"(\" context-position SP sequence-set\n                          *(SP context-position SP sequence-set)\n                          \")\"\n       ;; <sequence-set> from [IMAP]\n\n   search-return-data  =/ ret-data-partial / ret-data-addto /\n                          ret-data-removefrom\n       ;; All conform to <search-return-data>, from [IMAP-ABNF]\n\n   sort                =/ extended-sort\n       ;; <sort> from [SORT]\n\n   extended-sort       = [\"UID\" SP] \"SORT\" search-return-opts\n                         SP sort-criteria SP search-criteria\n       ;; <search-return-opts> from [IMAP-ABNF]\n       ;; <sort-criteria> and <search-criteria> from [SORT]\n\n6.  Security Considerations\n\n   This document defines additional IMAP4 capabilities.  As such, it\n   does not change the underlying security considerations of [IMAP].\n   The authors and reviewers believe that no new security issues are\n   introduced with these additional IMAP4 capabilities.\n\n   Creation of a large number of contexts may provide an avenue for\n   denial-of-service attacks by authorized users.  Implementors may\n   reduce this by limiting the number of contexts possible to create,\n   via the protocol features described in Section 4.3.1; by reducing the\n   impact of contexts by the implementation strategies described in\n   Appendix B; and by logging context creation and usage so that\n   administrative remedies may be applied.\n\n7.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.\n\n   This document defines the ESORT, CONTEXT=SEARCH, and CONTEXT=SORT\n   IMAP capabilities.  IANA has added them to the registry accordingly.\n\n8.  Acknowledgements\n\n   Much of the design of this extension can be found in ACAP.  Valuable\n   comments, both in agreement and in dissent, were received from Alexey\n   Melnikov, Arnt Gulbrandsen, Cyrus Daboo, Filip Navara, Mark Crispin,\n   Peter Coates, Philip Van Hoof, Randall Gellens, Timo Sirainen, Zoltan\n\n\n\n\nCridland & King             Standards Track                    [Page 13]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   Ordogh, and others, and many of these comments have had significant\n   influence on the design or the text.  The authors are grateful to all\n   those involved, including those not mentioned here.\n\n9.  References\n\n9.1.  Normative References\n\n   [ABNF]       Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n                Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [ESEARCH]    Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n                Command for Controlling What Kind of Information Is\n                Returned\", RFC 4731, November 2006.\n\n   [IMAP]       Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n                4rev1\", RFC 3501, March 2003.\n\n   [IMAP-ABNF]  Melnikov, A. and C. Daboo, \"Collected Extensions to\n                IMAP4 ABNF\", RFC 4466, April 2006.\n\n   [KEYWORDS]   Bradner, S., \"Key words for use in RFCs to Indicate\n                Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [SORT]       Crispin, M. and K. Murchison, \"Internet Message Access\n                Protocol - SORT and THREAD Extensions\", RFC 5256,\n                June 2008.\n\n9.2.  Informative References\n\n   [ACAP]       Newman, C. and J. Myers, \"ACAP -- Application\n                Configuration Access Protocol\", RFC 2244, November 1997.\n\n   [IDLE]       Leiba, B., \"IMAP4 IDLE command\", RFC 2177, June 1997.\n\n   [NOTIFY]     Melnikov, A., Gulbrandsen, A., and C. King, \"The IMAP\n                NOTIFY Extension\", Work in Progress, March 2008.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                    [Page 14]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\nAppendix A.  Cookbook\n\nA.1.  Virtual Mailboxes\n\n   It is possible to use the facilities described within this memo to\n   create a facility largely similar to a virtual mailbox, but handled\n   on the client side.\n\n   Initially, the client SELECTs the real \"backing\" mailbox.  Next, it\n   can switch to a filtered view at any time by issuing a RETURN (COUNT\n   UPDATE CONTEXT), and using RETURN (PARTIAL x:y) as the user scrolls,\n   feeding the results into a FETCH as required to populate summary\n   views.\n\n   A typically useful view is \"UID SORT (DATE) RETURN (...)  UTF-8\n   UNSEEN UNDELETED\", which can be used to show the mailbox sorted into\n   INTERNALDATE order, filtered to only show messages which are unread\n   and not yet deleted.\n\nA.2.  Trash Mailboxes\n\n   Certain contexts are particularly useful for client developers\n   wishing to present something similar to the common trash mailbox\n   metaphor in limited bandwidth.  The simple criteria of UNDELETED only\n   matches undeleted messages, and the corresponding DELETED search key\n   can be used to display a per-mailbox trash-like virtual mailbox.\n\nA.3.  Immediate EXPUNGE Notifications\n\n   The command \"SEARCH RETURN (UPDATE) ALL\" can be used to create a\n   context that notifies immediately about expunged messages, yet will\n   not affect message sequence numbers until the normal EXPUNGE message\n   can be sent.  This may be useful for clients wishing to show this\n   behavior without losing the benefit of sequence numbering.\n\nA.4.  Monitoring Counts\n\n   A client need not maintain any result cache at all, but instead it\n   can maintain a simple count of messages matching the search criteria.\n   Typically, this would use the SEARCH command, as opposed to UID\n   SEARCH, due to its smaller representation.  Such usage might prove\n   useful in monitoring the number of flagged, but unanswered, messages,\n   for example, with \"SEARCH RETURN (UPDATE COUNT) FLAGGED UNANSWERED\".\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                    [Page 15]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\nA.5.  Resynchronizing Contexts\n\n   The creation of a context, and immediate access to it, can all be\n   accomplished in a single round-trip.  Therefore, whilst it is\n   possible to elide resynchronization if no changes have occurred, it\n   is simpler in most cases to resynchronize by simply recreating the\n   context.\n\nAppendix B.  Server Implementation Notes\n\n   Although a server may cache the results, this is neither mandated nor\n   required, especially when the client uses SEARCH or UID SEARCH\n   commands.  UPDATE processing, for example, can be achieved\n   efficiently by comparison of the old flag state (if any) and the new,\n   and PARTIAL can be achieved by re-running the search until the\n   suitable window is required.  This is a result of there being no\n   snapshot facility.\n\n   For example, on a new message, the server can simply test for matches\n   against all current UPDATE context search programs, and for any that\n   match, send the ADDTO return data.\n\n   Similarly, for a flag change on an existing message, the server can\n   check whether the message matched with its old flags, whether it\n   matches with new flags, and provide ADDTO or REMOVEFROM return data\n   accordingly if these results differ.\n\n   For PARTIAL requests, the server can perform a full search,\n   discarding results until the lower bound is hit, and stopping the\n   search when sufficient results have been obtained.\n\n   With some additional state, it is possible to restart PARTIAL\n   searches, thus avoiding performing the initial discard phase.\n\n   For the best performance, however, caching the full search results is\n   needed, which can allow for faster responses at the expense of\n   memory.  One reasonable strategy would be to balance this trade-off\n   at run-time, discarding search results after a suitable timeout, and\n   regenerating them as required.\n\n   This yields state requirements of storing the search program for any\n   UPDATE contexts, and optionally storing both search program and\n   (updated) results for further contexts as required.\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                    [Page 16]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\n   Note that in the absence of a server-side results cache, it may be\n   impossible to know if an expunged message previously matched unless\n   the original message is still available.  Therefore, some\n   implementations may be forced into using a results cache in many\n   circumstances.\n\n   UPDATE contexts created with SORT or UID SORT will almost certainly\n   require some form of results caching, however.\n\nAuthors' Addresses\n\n   Dave Cridland\n   Isode Limited\n   5 Castle Business Village\n   36, Station Road\n   Hampton, Middlesex  TW12 2BX\n   GB\n\n   EMail: dave.cridland@isode.com\n\n\n   Curtis King\n   Isode Limited\n   5 Castle Business Village\n   36, Station Road\n   Hampton, Middlesex  TW12 2BX\n   GB\n\n   EMail: cking@mumbo.ca\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                    [Page 17]\n\f\nRFC 5267                      IMAP CONTEXT                     July 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nCridland & King             Standards Track                    [Page 18]\n\f\n"
  },
  {
    "path": "rfc/rfc5321.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                         J. Klensin\nRequest for Comments: 5321                                  October 2008\nObsoletes: 2821\nUpdates: 1123\nCategory: Standards Track\n\n\n                     Simple Mail Transfer Protocol\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   This document is a specification of the basic protocol for Internet\n   electronic mail transport.  It consolidates, updates, and clarifies\n   several previous documents, making all or parts of most of them\n   obsolete.  It covers the SMTP extension mechanisms and best practices\n   for the contemporary Internet, but does not provide details about\n   particular extensions.  Although SMTP was designed as a mail\n   transport and delivery protocol, this specification also contains\n   information that is important to its use as a \"mail submission\"\n   protocol for \"split-UA\" (User Agent) mail reading systems and mobile\n   environments.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                     [Page 1]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  5\n     1.1.  Transport of Electronic Mail . . . . . . . . . . . . . . .  5\n     1.2.  History and Context for This Document  . . . . . . . . . .  5\n     1.3.  Document Conventions . . . . . . . . . . . . . . . . . . .  6\n   2.  The SMTP Model . . . . . . . . . . . . . . . . . . . . . . . .  7\n     2.1.  Basic Structure  . . . . . . . . . . . . . . . . . . . . .  7\n     2.2.  The Extension Model  . . . . . . . . . . . . . . . . . . .  9\n       2.2.1.  Background . . . . . . . . . . . . . . . . . . . . . .  9\n       2.2.2.  Definition and Registration of Extensions  . . . . . . 10\n       2.2.3.  Special Issues with Extensions . . . . . . . . . . . . 11\n     2.3.  SMTP Terminology . . . . . . . . . . . . . . . . . . . . . 11\n       2.3.1.  Mail Objects . . . . . . . . . . . . . . . . . . . . . 11\n       2.3.2.  Senders and Receivers  . . . . . . . . . . . . . . . . 12\n       2.3.3.  Mail Agents and Message Stores . . . . . . . . . . . . 12\n       2.3.4.  Host . . . . . . . . . . . . . . . . . . . . . . . . . 13\n       2.3.5.  Domain Names . . . . . . . . . . . . . . . . . . . . . 13\n       2.3.6.  Buffer and State Table . . . . . . . . . . . . . . . . 14\n       2.3.7.  Commands and Replies . . . . . . . . . . . . . . . . . 14\n       2.3.8.  Lines  . . . . . . . . . . . . . . . . . . . . . . . . 14\n       2.3.9.  Message Content and Mail Data  . . . . . . . . . . . . 15\n       2.3.10. Originator, Delivery, Relay, and Gateway Systems . . . 15\n       2.3.11. Mailbox and Address  . . . . . . . . . . . . . . . . . 15\n     2.4.  General Syntax Principles and Transaction Model  . . . . . 16\n   3.  The SMTP Procedures: An Overview . . . . . . . . . . . . . . . 17\n     3.1.  Session Initiation . . . . . . . . . . . . . . . . . . . . 18\n     3.2.  Client Initiation  . . . . . . . . . . . . . . . . . . . . 18\n     3.3.  Mail Transactions  . . . . . . . . . . . . . . . . . . . . 19\n     3.4.  Forwarding for Address Correction or Updating  . . . . . . 21\n     3.5.  Commands for Debugging Addresses . . . . . . . . . . . . . 22\n       3.5.1.  Overview . . . . . . . . . . . . . . . . . . . . . . . 22\n       3.5.2.  VRFY Normal Response . . . . . . . . . . . . . . . . . 24\n       3.5.3.  Meaning of VRFY or EXPN Success Response . . . . . . . 25\n       3.5.4.  Semantics and Applications of EXPN . . . . . . . . . . 26\n     3.6.  Relaying and Mail Routing  . . . . . . . . . . . . . . . . 26\n       3.6.1.  Source Routes and Relaying . . . . . . . . . . . . . . 26\n       3.6.2.  Mail eXchange Records and Relaying . . . . . . . . . . 26\n       3.6.3.  Message Submission Servers as Relays . . . . . . . . . 27\n     3.7.  Mail Gatewaying  . . . . . . . . . . . . . . . . . . . . . 28\n       3.7.1.  Header Fields in Gatewaying  . . . . . . . . . . . . . 28\n       3.7.2.  Received Lines in Gatewaying . . . . . . . . . . . . . 29\n       3.7.3.  Addresses in Gatewaying  . . . . . . . . . . . . . . . 29\n       3.7.4.  Other Header Fields in Gatewaying  . . . . . . . . . . 29\n       3.7.5.  Envelopes in Gatewaying  . . . . . . . . . . . . . . . 30\n     3.8.  Terminating Sessions and Connections . . . . . . . . . . . 30\n     3.9.  Mailing Lists and Aliases  . . . . . . . . . . . . . . . . 31\n       3.9.1.  Alias  . . . . . . . . . . . . . . . . . . . . . . . . 31\n\n\n\nKlensin                     Standards Track                     [Page 2]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n       3.9.2.  List . . . . . . . . . . . . . . . . . . . . . . . . . 31\n   4.  The SMTP Specifications  . . . . . . . . . . . . . . . . . . . 32\n     4.1.  SMTP Commands  . . . . . . . . . . . . . . . . . . . . . . 32\n       4.1.1.  Command Semantics and Syntax . . . . . . . . . . . . . 32\n       4.1.2.  Command Argument Syntax  . . . . . . . . . . . . . . . 41\n       4.1.3.  Address Literals . . . . . . . . . . . . . . . . . . . 43\n       4.1.4.  Order of Commands  . . . . . . . . . . . . . . . . . . 44\n       4.1.5.  Private-Use Commands . . . . . . . . . . . . . . . . . 46\n     4.2.  SMTP Replies . . . . . . . . . . . . . . . . . . . . . . . 46\n       4.2.1.  Reply Code Severities and Theory . . . . . . . . . . . 48\n       4.2.2.  Reply Codes by Function Groups . . . . . . . . . . . . 50\n       4.2.3.  Reply Codes in Numeric Order . . . . . . . . . . . . . 52\n       4.2.4.  Reply Code 502 . . . . . . . . . . . . . . . . . . . . 53\n       4.2.5.  Reply Codes after DATA and the Subsequent\n               <CRLF>.<CRLF>  . . . . . . . . . . . . . . . . . . . . 53\n     4.3.  Sequencing of Commands and Replies . . . . . . . . . . . . 54\n       4.3.1.  Sequencing Overview  . . . . . . . . . . . . . . . . . 54\n       4.3.2.  Command-Reply Sequences  . . . . . . . . . . . . . . . 55\n     4.4.  Trace Information  . . . . . . . . . . . . . . . . . . . . 57\n     4.5.  Additional Implementation Issues . . . . . . . . . . . . . 61\n       4.5.1.  Minimum Implementation . . . . . . . . . . . . . . . . 61\n       4.5.2.  Transparency . . . . . . . . . . . . . . . . . . . . . 62\n       4.5.3.  Sizes and Timeouts . . . . . . . . . . . . . . . . . . 62\n         4.5.3.1.  Size Limits and Minimums . . . . . . . . . . . . . 62\n           4.5.3.1.1.  Local-part . . . . . . . . . . . . . . . . . . 63\n           4.5.3.1.2.  Domain . . . . . . . . . . . . . . . . . . . . 63\n           4.5.3.1.3.  Path . . . . . . . . . . . . . . . . . . . . . 63\n           4.5.3.1.4.  Command Line . . . . . . . . . . . . . . . . . 63\n           4.5.3.1.5.  Reply Line . . . . . . . . . . . . . . . . . . 63\n           4.5.3.1.6.  Text Line  . . . . . . . . . . . . . . . . . . 63\n           4.5.3.1.7.  Message Content  . . . . . . . . . . . . . . . 63\n           4.5.3.1.8.  Recipients Buffer  . . . . . . . . . . . . . . 64\n           4.5.3.1.9.  Treatment When Limits Exceeded . . . . . . . . 64\n           4.5.3.1.10. Too Many Recipients Code . . . . . . . . . . . 64\n         4.5.3.2.  Timeouts . . . . . . . . . . . . . . . . . . . . . 65\n           4.5.3.2.1.  Initial 220 Message: 5 Minutes . . . . . . . . 65\n           4.5.3.2.2.  MAIL Command: 5 Minutes  . . . . . . . . . . . 65\n           4.5.3.2.3.  RCPT Command: 5 Minutes  . . . . . . . . . . . 65\n           4.5.3.2.4.  DATA Initiation: 2 Minutes . . . . . . . . . . 66\n           4.5.3.2.5.  Data Block: 3 Minutes  . . . . . . . . . . . . 66\n           4.5.3.2.6.  DATA Termination: 10 Minutes.  . . . . . . . . 66\n           4.5.3.2.7.  Server Timeout: 5 Minutes. . . . . . . . . . . 66\n       4.5.4.  Retry Strategies . . . . . . . . . . . . . . . . . . . 66\n       4.5.5.  Messages with a Null Reverse-Path  . . . . . . . . . . 68\n   5.  Address Resolution and Mail Handling . . . . . . . . . . . . . 69\n     5.1.  Locating the Target Host . . . . . . . . . . . . . . . . . 69\n     5.2.  IPv6 and MX Records  . . . . . . . . . . . . . . . . . . . 71\n   6.  Problem Detection and Handling . . . . . . . . . . . . . . . . 71\n\n\n\nKlensin                     Standards Track                     [Page 3]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n     6.1.  Reliable Delivery and Replies by Email . . . . . . . . . . 71\n     6.2.  Unwanted, Unsolicited, and \"Attack\" Messages . . . . . . . 72\n     6.3.  Loop Detection . . . . . . . . . . . . . . . . . . . . . . 73\n     6.4.  Compensating for Irregularities  . . . . . . . . . . . . . 73\n   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 75\n     7.1.  Mail Security and Spoofing . . . . . . . . . . . . . . . . 75\n     7.2.  \"Blind\" Copies . . . . . . . . . . . . . . . . . . . . . . 76\n     7.3.  VRFY, EXPN, and Security . . . . . . . . . . . . . . . . . 76\n     7.4.  Mail Rerouting Based on the 251 and 551 Response Codes . . 77\n     7.5.  Information Disclosure in Announcements  . . . . . . . . . 77\n     7.6.  Information Disclosure in Trace Fields . . . . . . . . . . 78\n     7.7.  Information Disclosure in Message Forwarding . . . . . . . 78\n     7.8.  Resistance to Attacks  . . . . . . . . . . . . . . . . . . 78\n     7.9.  Scope of Operation of SMTP Servers . . . . . . . . . . . . 78\n   8.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 79\n   9.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 80\n   10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 81\n     10.1. Normative References . . . . . . . . . . . . . . . . . . . 81\n     10.2. Informative References . . . . . . . . . . . . . . . . . . 82\n   Appendix A.  TCP Transport Service . . . . . . . . . . . . . . . . 85\n   Appendix B.  Generating SMTP Commands from RFC 822 Header\n                Fields  . . . . . . . . . . . . . . . . . . . . . . . 85\n   Appendix C.  Source Routes . . . . . . . . . . . . . . . . . . . . 86\n   Appendix D.  Scenarios . . . . . . . . . . . . . . . . . . . . . . 87\n     D.1.  A Typical SMTP Transaction Scenario  . . . . . . . . . . . 88\n     D.2.  Aborted SMTP Transaction Scenario  . . . . . . . . . . . . 89\n     D.3.  Relayed Mail Scenario  . . . . . . . . . . . . . . . . . . 90\n     D.4.  Verifying and Sending Scenario . . . . . . . . . . . . . . 92\n   Appendix E.  Other Gateway Issues  . . . . . . . . . . . . . . . . 92\n   Appendix F.  Deprecated Features of RFC 821  . . . . . . . . . . . 93\n     F.1.  TURN . . . . . . . . . . . . . . . . . . . . . . . . . . . 93\n     F.2.  Source Routing . . . . . . . . . . . . . . . . . . . . . . 93\n     F.3.  HELO . . . . . . . . . . . . . . . . . . . . . . . . . . . 93\n     F.4.  #-literals . . . . . . . . . . . . . . . . . . . . . . . . 94\n     F.5.  Dates and Years  . . . . . . . . . . . . . . . . . . . . . 94\n     F.6.  Sending versus Mailing . . . . . . . . . . . . . . . . . . 94\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                     [Page 4]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n1.  Introduction\n\n1.1.  Transport of Electronic Mail\n\n   The objective of the Simple Mail Transfer Protocol (SMTP) is to\n   transfer mail reliably and efficiently.\n\n   SMTP is independent of the particular transmission subsystem and\n   requires only a reliable ordered data stream channel.  While this\n   document specifically discusses transport over TCP, other transports\n   are possible.  Appendices to RFC 821 [1] describe some of them.\n\n   An important feature of SMTP is its capability to transport mail\n   across multiple networks, usually referred to as \"SMTP mail relaying\"\n   (see Section 3.6).  A network consists of the mutually-TCP-accessible\n   hosts on the public Internet, the mutually-TCP-accessible hosts on a\n   firewall-isolated TCP/IP Intranet, or hosts in some other LAN or WAN\n   environment utilizing a non-TCP transport-level protocol.  Using\n   SMTP, a process can transfer mail to another process on the same\n   network or to some other network via a relay or gateway process\n   accessible to both networks.\n\n   In this way, a mail message may pass through a number of intermediate\n   relay or gateway hosts on its path from sender to ultimate recipient.\n   The Mail eXchanger mechanisms of the domain name system (RFC 1035\n   [2], RFC 974 [12], and Section 5 of this document) are used to\n   identify the appropriate next-hop destination for a message being\n   transported.\n\n1.2.  History and Context for This Document\n\n   This document is a specification of the basic protocol for the\n   Internet electronic mail transport.  It consolidates, updates and\n   clarifies, but does not add new or change existing functionality of\n   the following:\n\n   o  the original SMTP (Simple Mail Transfer Protocol) specification of\n      RFC 821 [1],\n\n   o  domain name system requirements and implications for mail\n      transport from RFC 1035 [2] and RFC 974 [12],\n\n   o  the clarifications and applicability statements in RFC 1123 [3],\n      and\n\n   o  material drawn from the SMTP Extension mechanisms in RFC 1869\n      [13].\n\n\n\n\nKlensin                     Standards Track                     [Page 5]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   o  Editorial and clarification changes to RFC 2821 [14] to bring that\n      specification to Draft Standard.\n\n   It obsoletes RFC 821, RFC 974, RFC 1869, and RFC 2821 and updates RFC\n   1123 (replacing the mail transport materials of RFC 1123).  However,\n   RFC 821 specifies some features that were not in significant use in\n   the Internet by the mid-1990s and (in appendices) some additional\n   transport models.  Those sections are omitted here in the interest of\n   clarity and brevity; readers needing them should refer to RFC 821.\n\n   It also includes some additional material from RFC 1123 that required\n   amplification.  This material has been identified in multiple ways,\n   mostly by tracking flaming on various lists and newsgroups and\n   problems of unusual readings or interpretations that have appeared as\n   the SMTP extensions have been deployed.  Where this specification\n   moves beyond consolidation and actually differs from earlier\n   documents, it supersedes them technically as well as textually.\n\n   Although SMTP was designed as a mail transport and delivery protocol,\n   this specification also contains information that is important to its\n   use as a \"mail submission\" protocol, as recommended for Post Office\n   Protocol (POP) (RFC 937 [15], RFC 1939 [16]) and IMAP (RFC 3501\n   [17]).  In general, the separate mail submission protocol specified\n   in RFC 4409 [18] is now preferred to direct use of SMTP; more\n   discussion of that subject appears in that document.\n\n   Section 2.3 provides definitions of terms specific to this document.\n   Except when the historical terminology is necessary for clarity, this\n   document uses the current 'client' and 'server' terminology to\n   identify the sending and receiving SMTP processes, respectively.\n\n   A companion document, RFC 5322 [4], discusses message header sections\n   and bodies and specifies formats and structures for them.\n\n1.3.  Document Conventions\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [5].  As each\n   of these terms was intentionally and carefully chosen to improve the\n   interoperability of email, each use of these terms is to be treated\n   as a conformance requirement.\n\n   Because this document has a long history and to avoid the risk of\n   various errors and of confusing readers and documents that point to\n   this one, most examples and the domain names they contain are\n   preserved from RFC 2821.  Readers are cautioned that these are\n\n\n\n\nKlensin                     Standards Track                     [Page 6]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   illustrative examples that should not actually be used in either code\n   or configuration files.\n\n2.  The SMTP Model\n\n2.1.  Basic Structure\n\n   The SMTP design can be pictured as:\n\n                  +----------+                +----------+\n      +------+    |          |                |          |\n      | User |<-->|          |      SMTP      |          |\n      +------+    |  Client- |Commands/Replies| Server-  |\n      +------+    |   SMTP   |<-------------->|    SMTP  |    +------+\n      | File |<-->|          |    and Mail    |          |<-->| File |\n      |System|    |          |                |          |    |System|\n      +------+    +----------+                +----------+    +------+\n                   SMTP client                SMTP server\n\n   When an SMTP client has a message to transmit, it establishes a two-\n   way transmission channel to an SMTP server.  The responsibility of an\n   SMTP client is to transfer mail messages to one or more SMTP servers,\n   or report its failure to do so.\n\n   The means by which a mail message is presented to an SMTP client, and\n   how that client determines the identifier(s) (\"names\") of the\n   domain(s) to which mail messages are to be transferred, is a local\n   matter, and is not addressed by this document.  In some cases, the\n   designated domain(s), or those determined by an SMTP client, will\n   identify the final destination(s) of the mail message.  In other\n   cases, common with SMTP clients associated with implementations of\n   the POP (RFC 937 [15], RFC 1939 [16]) or IMAP (RFC 3501 [17])\n   protocols, or when the SMTP client is inside an isolated transport\n   service environment, the domain determined will identify an\n   intermediate destination through which all mail messages are to be\n   relayed.  SMTP clients that transfer all traffic regardless of the\n   target domains associated with the individual messages, or that do\n   not maintain queues for retrying message transmissions that initially\n   cannot be completed, may otherwise conform to this specification but\n   are not considered fully-capable.  Fully-capable SMTP\n   implementations, including the relays used by these less capable\n   ones, and their destinations, are expected to support all of the\n   queuing, retrying, and alternate address functions discussed in this\n   specification.  In many situations and configurations, the less-\n   capable clients discussed above SHOULD be using the message\n   submission protocol (RFC 4409 [18]) rather than SMTP.\n\n\n\n\n\nKlensin                     Standards Track                     [Page 7]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   The means by which an SMTP client, once it has determined a target\n   domain, determines the identity of an SMTP server to which a copy of\n   a message is to be transferred, and then performs that transfer, is\n   covered by this document.  To effect a mail transfer to an SMTP\n   server, an SMTP client establishes a two-way transmission channel to\n   that SMTP server.  An SMTP client determines the address of an\n   appropriate host running an SMTP server by resolving a destination\n   domain name to either an intermediate Mail eXchanger host or a final\n   target host.\n\n   An SMTP server may be either the ultimate destination or an\n   intermediate \"relay\" (that is, it may assume the role of an SMTP\n   client after receiving the message) or \"gateway\" (that is, it may\n   transport the message further using some protocol other than SMTP).\n   SMTP commands are generated by the SMTP client and sent to the SMTP\n   server.  SMTP replies are sent from the SMTP server to the SMTP\n   client in response to the commands.\n\n   In other words, message transfer can occur in a single connection\n   between the original SMTP-sender and the final SMTP-recipient, or can\n   occur in a series of hops through intermediary systems.  In either\n   case, once the server has issued a success response at the end of the\n   mail data, a formal handoff of responsibility for the message occurs:\n   the protocol requires that a server MUST accept responsibility for\n   either delivering the message or properly reporting the failure to do\n   so (see Sections 6.1, 6.2, and 7.8, below).\n\n   Once the transmission channel is established and initial handshaking\n   is completed, the SMTP client normally initiates a mail transaction.\n   Such a transaction consists of a series of commands to specify the\n   originator and destination of the mail and transmission of the\n   message content (including any lines in the header section or other\n   structure) itself.  When the same message is sent to multiple\n   recipients, this protocol encourages the transmission of only one\n   copy of the data for all recipients at the same destination (or\n   intermediate relay) host.\n\n   The server responds to each command with a reply; replies may\n   indicate that the command was accepted, that additional commands are\n   expected, or that a temporary or permanent error condition exists.\n   Commands specifying the sender or recipients may include server-\n   permitted SMTP service extension requests, as discussed in\n   Section 2.2.  The dialog is purposely lock-step, one-at-a-time,\n   although this can be modified by mutually agreed upon extension\n   requests such as command pipelining (RFC 2920 [19]).\n\n   Once a given mail message has been transmitted, the client may either\n   request that the connection be shut down or may initiate other mail\n\n\n\nKlensin                     Standards Track                     [Page 8]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   transactions.  In addition, an SMTP client may use a connection to an\n   SMTP server for ancillary services such as verification of email\n   addresses or retrieval of mailing list subscriber addresses.\n\n   As suggested above, this protocol provides mechanisms for the\n   transmission of mail.  Historically, this transmission normally\n   occurred directly from the sending user's host to the receiving\n   user's host when the two hosts are connected to the same transport\n   service.  When they are not connected to the same transport service,\n   transmission occurs via one or more relay SMTP servers.  A very\n   common case in the Internet today involves submission of the original\n   message to an intermediate, \"message submission\" server, which is\n   similar to a relay but has some additional properties; such servers\n   are discussed in Section 2.3.10 and at some length in RFC 4409 [18].\n   An intermediate host that acts as either an SMTP relay or as a\n   gateway into some other transmission environment is usually selected\n   through the use of the domain name service (DNS) Mail eXchanger\n   mechanism.\n\n   Usually, intermediate hosts are determined via the DNS MX record, not\n   by explicit \"source\" routing (see Section 5 and Appendix C and\n   Appendix F.2).\n\n2.2.  The Extension Model\n\n2.2.1.  Background\n\n   In an effort that started in 1990, approximately a decade after RFC\n   821 was completed, the protocol was modified with a \"service\n   extensions\" model that permits the client and server to agree to\n   utilize shared functionality beyond the original SMTP requirements.\n   The SMTP extension mechanism defines a means whereby an extended SMTP\n   client and server may recognize each other, and the server can inform\n   the client as to the service extensions that it supports.\n\n   Contemporary SMTP implementations MUST support the basic extension\n   mechanisms.  For instance, servers MUST support the EHLO command even\n   if they do not implement any specific extensions and clients SHOULD\n   preferentially utilize EHLO rather than HELO.  (However, for\n   compatibility with older conforming implementations, SMTP clients and\n   servers MUST support the original HELO mechanisms as a fallback.)\n   Unless the different characteristics of HELO must be identified for\n   interoperability purposes, this document discusses only EHLO.\n\n   SMTP is widely deployed and high-quality implementations have proven\n   to be very robust.  However, the Internet community now considers\n   some services to be important that were not anticipated when the\n   protocol was first designed.  If support for those services is to be\n\n\n\nKlensin                     Standards Track                     [Page 9]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   added, it must be done in a way that permits older implementations to\n   continue working acceptably.  The extension framework consists of:\n\n   o  The SMTP command EHLO, superseding the earlier HELO,\n\n   o  a registry of SMTP service extensions,\n\n   o  additional parameters to the SMTP MAIL and RCPT commands, and\n\n   o  optional replacements for commands defined in this protocol, such\n      as for DATA in non-ASCII transmissions (RFC 3030 [20]).\n\n   SMTP's strength comes primarily from its simplicity.  Experience with\n   many protocols has shown that protocols with few options tend towards\n   ubiquity, whereas protocols with many options tend towards obscurity.\n\n   Each and every extension, regardless of its benefits, must be\n   carefully scrutinized with respect to its implementation, deployment,\n   and interoperability costs.  In many cases, the cost of extending the\n   SMTP service will likely outweigh the benefit.\n\n2.2.2.  Definition and Registration of Extensions\n\n   The IANA maintains a registry of SMTP service extensions.  A\n   corresponding EHLO keyword value is associated with each extension.\n   Each service extension registered with the IANA must be defined in a\n   formal Standards-Track or IESG-approved Experimental protocol\n   document.  The definition must include:\n\n   o  the textual name of the SMTP service extension;\n\n   o  the EHLO keyword value associated with the extension;\n\n   o  the syntax and possible values of parameters associated with the\n      EHLO keyword value;\n\n   o  any additional SMTP verbs associated with the extension\n      (additional verbs will usually be, but are not required to be, the\n      same as the EHLO keyword value);\n\n   o  any new parameters the extension associates with the MAIL or RCPT\n      verbs;\n\n   o  a description of how support for the extension affects the\n      behavior of a server and client SMTP; and\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 10]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   o  the increment by which the extension is increasing the maximum\n      length of the commands MAIL and/or RCPT, over that specified in\n      this Standard.\n\n   In addition, any EHLO keyword value starting with an upper or lower\n   case \"X\" refers to a local SMTP service extension used exclusively\n   through bilateral agreement.  Keywords beginning with \"X\" MUST NOT be\n   used in a registered service extension.  Conversely, keyword values\n   presented in the EHLO response that do not begin with \"X\" MUST\n   correspond to a Standard, Standards-Track, or IESG-approved\n   Experimental SMTP service extension registered with IANA.  A\n   conforming server MUST NOT offer non-\"X\"-prefixed keyword values that\n   are not described in a registered extension.\n\n   Additional verbs and parameter names are bound by the same rules as\n   EHLO keywords; specifically, verbs beginning with \"X\" are local\n   extensions that may not be registered or standardized.  Conversely,\n   verbs not beginning with \"X\" must always be registered.\n\n2.2.3.  Special Issues with Extensions\n\n   Extensions that change fairly basic properties of SMTP operation are\n   permitted.  The text in other sections of this document must be\n   understood in that context.  In particular, extensions can change the\n   minimum limits specified in Section 4.5.3, can change the ASCII\n   character set requirement as mentioned above, or can introduce some\n   optional modes of message handling.\n\n   In particular, if an extension implies that the delivery path\n   normally supports special features of that extension, and an\n   intermediate SMTP system finds a next hop that does not support the\n   required extension, it MAY choose, based on the specific extension\n   and circumstances, to requeue the message and try later and/or try an\n   alternate MX host.  If this strategy is employed, the timeout to fall\n   back to an unextended format (if one is available) SHOULD be less\n   than the normal timeout for bouncing as undeliverable (e.g., if\n   normal timeout is three days, the requeue timeout before attempting\n   to transmit the mail without the extension might be one day).\n\n2.3.  SMTP Terminology\n\n2.3.1.  Mail Objects\n\n   SMTP transports a mail object.  A mail object contains an envelope\n   and content.\n\n   The SMTP envelope is sent as a series of SMTP protocol units\n   (described in Section 3).  It consists of an originator address (to\n\n\n\nKlensin                     Standards Track                    [Page 11]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   which error reports should be directed), one or more recipient\n   addresses, and optional protocol extension material.  Historically,\n   variations on the reverse-path (originator) address specification\n   command (MAIL) could be used to specify alternate delivery modes,\n   such as immediate display; those variations have now been deprecated\n   (see Appendix F and Appendix F.6).\n\n   The SMTP content is sent in the SMTP DATA protocol unit and has two\n   parts: the header section and the body.  If the content conforms to\n   other contemporary standards, the header section consists of a\n   collection of header fields, each consisting of a header name, a\n   colon, and data, structured as in the message format specification\n   (RFC 5322 [4]); the body, if structured, is defined according to MIME\n   (RFC 2045 [21]).  The content is textual in nature, expressed using\n   the US-ASCII repertoire [6].  Although SMTP extensions (such as\n   \"8BITMIME\", RFC 1652 [22]) may relax this restriction for the content\n   body, the content header fields are always encoded using the US-ASCII\n   repertoire.  Two MIME extensions (RFC 2047 [23] and RFC 2231 [24])\n   define an algorithm for representing header values outside the US-\n   ASCII repertoire, while still encoding them using the US-ASCII\n   repertoire.\n\n2.3.2.  Senders and Receivers\n\n   In RFC 821, the two hosts participating in an SMTP transaction were\n   described as the \"SMTP-sender\" and \"SMTP-receiver\".  This document\n   has been changed to reflect current industry terminology and hence\n   refers to them as the \"SMTP client\" (or sometimes just \"the client\")\n   and \"SMTP server\" (or just \"the server\"), respectively.  Since a\n   given host may act both as server and client in a relay situation,\n   \"receiver\" and \"sender\" terminology is still used where needed for\n   clarity.\n\n2.3.3.  Mail Agents and Message Stores\n\n   Additional mail system terminology became common after RFC 821 was\n   published and, where convenient, is used in this specification.  In\n   particular, SMTP servers and clients provide a mail transport service\n   and therefore act as \"Mail Transfer Agents\" (MTAs).  \"Mail User\n   Agents\" (MUAs or UAs) are normally thought of as the sources and\n   targets of mail.  At the source, an MUA might collect mail to be\n   transmitted from a user and hand it off to an MTA; the final\n   (\"delivery\") MTA would be thought of as handing the mail off to an\n   MUA (or at least transferring responsibility to it, e.g., by\n   depositing the message in a \"message store\").  However, while these\n   terms are used with at least the appearance of great precision in\n   other environments, the implied boundaries between MUAs and MTAs\n   often do not accurately match common, and conforming, practices with\n\n\n\nKlensin                     Standards Track                    [Page 12]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Internet mail.  Hence, the reader should be cautious about inferring\n   the strong relationships and responsibilities that might be implied\n   if these terms were used elsewhere.\n\n2.3.4.  Host\n\n   For the purposes of this specification, a host is a computer system\n   attached to the Internet (or, in some cases, to a private TCP/IP\n   network) and supporting the SMTP protocol.  Hosts are known by names\n   (see the next section); they SHOULD NOT be identified by numerical\n   addresses, i.e., by address literals as described in Section 4.1.2.\n\n2.3.5.  Domain Names\n\n   A domain name (or often just a \"domain\") consists of one or more\n   components, separated by dots if more than one appears.  In the case\n   of a top-level domain used by itself in an email address, a single\n   string is used without any dots.  This makes the requirement,\n   described in more detail below, that only fully-qualified domain\n   names appear in SMTP transactions on the public Internet,\n   particularly important where top-level domains are involved.  These\n   components (\"labels\" in DNS terminology, RFC 1035 [2]) are restricted\n   for SMTP purposes to consist of a sequence of letters, digits, and\n   hyphens drawn from the ASCII character set [6].  Domain names are\n   used as names of hosts and of other entities in the domain name\n   hierarchy.  For example, a domain may refer to an alias (label of a\n   CNAME RR) or the label of Mail eXchanger records to be used to\n   deliver mail instead of representing a host name.  See RFC 1035 [2]\n   and Section 5 of this specification.\n\n   The domain name, as described in this document and in RFC 1035 [2],\n   is the entire, fully-qualified name (often referred to as an \"FQDN\").\n   A domain name that is not in FQDN form is no more than a local alias.\n   Local aliases MUST NOT appear in any SMTP transaction.\n\n   Only resolvable, fully-qualified domain names (FQDNs) are permitted\n   when domain names are used in SMTP.  In other words, names that can\n   be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed\n   in Section 5) are permitted, as are CNAME RRs whose targets can be\n   resolved, in turn, to MX or address RRs.  Local nicknames or\n   unqualified names MUST NOT be used.  There are two exceptions to the\n   rule requiring FQDNs:\n\n   o  The domain name given in the EHLO command MUST be either a primary\n      host name (a domain name that resolves to an address RR) or, if\n      the host has no name, an address literal, as described in\n      Section 4.1.3 and discussed further in the EHLO discussion of\n      Section 4.1.4.\n\n\n\nKlensin                     Standards Track                    [Page 13]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   o  The reserved mailbox name \"postmaster\" may be used in a RCPT\n      command without domain qualification (see Section 4.1.1.3) and\n      MUST be accepted if so used.\n\n2.3.6.  Buffer and State Table\n\n   SMTP sessions are stateful, with both parties carefully maintaining a\n   common view of the current state.  In this document, we model this\n   state by a virtual \"buffer\" and a \"state table\" on the server that\n   may be used by the client to, for example, \"clear the buffer\" or\n   \"reset the state table\", causing the information in the buffer to be\n   discarded and the state to be returned to some previous state.\n\n2.3.7.  Commands and Replies\n\n   SMTP commands and, unless altered by a service extension, message\n   data, are transmitted from the sender to the receiver via the\n   transmission channel in \"lines\".\n\n   An SMTP reply is an acknowledgment (positive or negative) sent in\n   \"lines\" from receiver to sender via the transmission channel in\n   response to a command.  The general form of a reply is a numeric\n   completion code (indicating failure or success) usually followed by a\n   text string.  The codes are for use by programs and the text is\n   usually intended for human users.  RFC 3463 [25], specifies further\n   structuring of the reply strings, including the use of supplemental\n   and more specific completion codes (see also RFC 5248 [26]).\n\n2.3.8.  Lines\n\n   Lines consist of zero or more data characters terminated by the\n   sequence ASCII character \"CR\" (hex value 0D) followed immediately by\n   ASCII character \"LF\" (hex value 0A).  This termination sequence is\n   denoted as <CRLF> in this document.  Conforming implementations MUST\n   NOT recognize or generate any other character or character sequence\n   as a line terminator.  Limits MAY be imposed on line lengths by\n   servers (see Section 4).\n\n   In addition, the appearance of \"bare\" \"CR\" or \"LF\" characters in text\n   (i.e., either without the other) has a long history of causing\n   problems in mail implementations and applications that use the mail\n   system as a tool.  SMTP client implementations MUST NOT transmit\n   these characters except when they are intended as line terminators\n   and then MUST, as indicated above, transmit them only as a <CRLF>\n   sequence.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 14]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n2.3.9.  Message Content and Mail Data\n\n   The terms \"message content\" and \"mail data\" are used interchangeably\n   in this document to describe the material transmitted after the DATA\n   command is accepted and before the end of data indication is\n   transmitted.  Message content includes the message header section and\n   the possibly structured message body.  The MIME specification (RFC\n   2045 [21]) provides the standard mechanisms for structured message\n   bodies.\n\n2.3.10.  Originator, Delivery, Relay, and Gateway Systems\n\n   This specification makes a distinction among four types of SMTP\n   systems, based on the role those systems play in transmitting\n   electronic mail.  An \"originating\" system (sometimes called an SMTP\n   originator) introduces mail into the Internet or, more generally,\n   into a transport service environment.  A \"delivery\" SMTP system is\n   one that receives mail from a transport service environment and\n   passes it to a mail user agent or deposits it in a message store that\n   a mail user agent is expected to subsequently access.  A \"relay\" SMTP\n   system (usually referred to just as a \"relay\") receives mail from an\n   SMTP client and transmits it, without modification to the message\n   data other than adding trace information, to another SMTP server for\n   further relaying or for delivery.\n\n   A \"gateway\" SMTP system (usually referred to just as a \"gateway\")\n   receives mail from a client system in one transport environment and\n   transmits it to a server system in another transport environment.\n   Differences in protocols or message semantics between the transport\n   environments on either side of a gateway may require that the gateway\n   system perform transformations to the message that are not permitted\n   to SMTP relay systems.  For the purposes of this specification,\n   firewalls that rewrite addresses should be considered as gateways,\n   even if SMTP is used on both sides of them (see RFC 2979 [27]).\n\n2.3.11.  Mailbox and Address\n\n   As used in this specification, an \"address\" is a character string\n   that identifies a user to whom mail will be sent or a location into\n   which mail will be deposited.  The term \"mailbox\" refers to that\n   depository.  The two terms are typically used interchangeably unless\n   the distinction between the location in which mail is placed (the\n   mailbox) and a reference to it (the address) is important.  An\n   address normally consists of user and domain specifications.  The\n   standard mailbox naming convention is defined to be\n   \"local-part@domain\"; contemporary usage permits a much broader set of\n   applications than simple \"user names\".  Consequently, and due to a\n   long history of problems when intermediate hosts have attempted to\n\n\n\nKlensin                     Standards Track                    [Page 15]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   optimize transport by modifying them, the local-part MUST be\n   interpreted and assigned semantics only by the host specified in the\n   domain part of the address.\n\n2.4.  General Syntax Principles and Transaction Model\n\n   SMTP commands and replies have a rigid syntax.  All commands begin\n   with a command verb.  All replies begin with a three digit numeric\n   code.  In some commands and replies, arguments are required following\n   the verb or reply code.  Some commands do not accept arguments (after\n   the verb), and some reply codes are followed, sometimes optionally,\n   by free form text.  In both cases, where text appears, it is\n   separated from the verb or reply code by a space character.  Complete\n   definitions of commands and replies appear in Section 4.\n\n   Verbs and argument values (e.g., \"TO:\" or \"to:\" in the RCPT command\n   and extension name keywords) are not case sensitive, with the sole\n   exception in this specification of a mailbox local-part (SMTP\n   Extensions may explicitly specify case-sensitive elements).  That is,\n   a command verb, an argument value other than a mailbox local-part,\n   and free form text MAY be encoded in upper case, lower case, or any\n   mixture of upper and lower case with no impact on its meaning.  The\n   local-part of a mailbox MUST BE treated as case sensitive.\n   Therefore, SMTP implementations MUST take care to preserve the case\n   of mailbox local-parts.  In particular, for some hosts, the user\n   \"smith\" is different from the user \"Smith\".  However, exploiting the\n   case sensitivity of mailbox local-parts impedes interoperability and\n   is discouraged.  Mailbox domains follow normal DNS rules and are\n   hence not case sensitive.\n\n   A few SMTP servers, in violation of this specification (and RFC 821)\n   require that command verbs be encoded by clients in upper case.\n   Implementations MAY wish to employ this encoding to accommodate those\n   servers.\n\n   The argument clause consists of a variable-length character string\n   ending with the end of the line, i.e., with the character sequence\n   <CRLF>.  The receiver will take no action until this sequence is\n   received.\n\n   The syntax for each command is shown with the discussion of that\n   command.  Common elements and parameters are shown in Section 4.1.2.\n\n   Commands and replies are composed of characters from the ASCII\n   character set [6].  When the transport service provides an 8-bit byte\n   (octet) transmission channel, each 7-bit character is transmitted,\n   right justified, in an octet with the high-order bit cleared to zero.\n   More specifically, the unextended SMTP service provides 7-bit\n\n\n\nKlensin                     Standards Track                    [Page 16]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   transport only.  An originating SMTP client that has not successfully\n   negotiated an appropriate extension with a particular server (see the\n   next paragraph) MUST NOT transmit messages with information in the\n   high-order bit of octets.  If such messages are transmitted in\n   violation of this rule, receiving SMTP servers MAY clear the high-\n   order bit or reject the message as invalid.  In general, a relay SMTP\n   SHOULD assume that the message content it has received is valid and,\n   assuming that the envelope permits doing so, relay it without\n   inspecting that content.  Of course, if the content is mislabeled and\n   the data path cannot accept the actual content, this may result in\n   the ultimate delivery of a severely garbled message to the recipient.\n   Delivery SMTP systems MAY reject such messages, or return them as\n   undeliverable, rather than deliver them.  In the absence of a server-\n   offered extension explicitly permitting it, a sending SMTP system is\n   not permitted to send envelope commands in any character set other\n   than US-ASCII.  Receiving systems SHOULD reject such commands,\n   normally using \"500 syntax error - invalid character\" replies.\n\n   8-bit message content transmission MAY be requested of the server by\n   a client using extended SMTP facilities, notably the \"8BITMIME\"\n   extension, RFC 1652 [22]. 8BITMIME SHOULD be supported by SMTP\n   servers.  However, it MUST NOT be construed as authorization to\n   transmit unrestricted 8-bit material, nor does 8BITMIME authorize\n   transmission of any envelope material in other than ASCII. 8BITMIME\n   MUST NOT be requested by senders for material with the high bit on\n   that is not in MIME format with an appropriate content-transfer\n   encoding; servers MAY reject such messages.\n\n   The metalinguistic notation used in this document corresponds to the\n   \"Augmented BNF\" used in other Internet mail system documents.  The\n   reader who is not familiar with that syntax should consult the ABNF\n   specification in RFC 5234 [7].  Metalanguage terms used in running\n   text are surrounded by pointed brackets (e.g., <CRLF>) for clarity.\n   The reader is cautioned that the grammar expressed in the\n   metalanguage is not comprehensive.  There are many instances in which\n   provisions in the text constrain or otherwise modify the syntax or\n   semantics implied by the grammar.\n\n3.  The SMTP Procedures: An Overview\n\n   This section contains descriptions of the procedures used in SMTP:\n   session initiation, mail transaction, forwarding mail, verifying\n   mailbox names and expanding mailing lists, and opening and closing\n   exchanges.  Comments on relaying, a note on mail domains, and a\n   discussion of changing roles are included at the end of this section.\n   Several complete scenarios are presented in Appendix D.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 17]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n3.1.  Session Initiation\n\n   An SMTP session is initiated when a client opens a connection to a\n   server and the server responds with an opening message.\n\n   SMTP server implementations MAY include identification of their\n   software and version information in the connection greeting reply\n   after the 220 code, a practice that permits more efficient isolation\n   and repair of any problems.  Implementations MAY make provision for\n   SMTP servers to disable the software and version announcement where\n   it causes security concerns.  While some systems also identify their\n   contact point for mail problems, this is not a substitute for\n   maintaining the required \"postmaster\" address (see Section 4).\n\n   The SMTP protocol allows a server to formally reject a mail session\n   while still allowing the initial connection as follows: a 554\n   response MAY be given in the initial connection opening message\n   instead of the 220.  A server taking this approach MUST still wait\n   for the client to send a QUIT (see Section 4.1.1.10) before closing\n   the connection and SHOULD respond to any intervening commands with\n   \"503 bad sequence of commands\".  Since an attempt to make an SMTP\n   connection to such a system is probably in error, a server returning\n   a 554 response on connection opening SHOULD provide enough\n   information in the reply text to facilitate debugging of the sending\n   system.\n\n3.2.  Client Initiation\n\n   Once the server has sent the greeting (welcoming) message and the\n   client has received it, the client normally sends the EHLO command to\n   the server, indicating the client's identity.  In addition to opening\n   the session, use of EHLO indicates that the client is able to process\n   service extensions and requests that the server provide a list of the\n   extensions it supports.  Older SMTP systems that are unable to\n   support service extensions, and contemporary clients that do not\n   require service extensions in the mail session being initiated, MAY\n   use HELO instead of EHLO.  Servers MUST NOT return the extended EHLO-\n   style response to a HELO command.  For a particular connection\n   attempt, if the server returns a \"command not recognized\" response to\n   EHLO, the client SHOULD be able to fall back and send HELO.\n\n   In the EHLO command, the host sending the command identifies itself;\n   the command may be interpreted as saying \"Hello, I am <domain>\" (and,\n   in the case of EHLO, \"and I support service extension requests\").\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 18]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n3.3.  Mail Transactions\n\n   There are three steps to SMTP mail transactions.  The transaction\n   starts with a MAIL command that gives the sender identification.  (In\n   general, the MAIL command may be sent only when no mail transaction\n   is in progress; see Section 4.1.4.)  A series of one or more RCPT\n   commands follows, giving the receiver information.  Then, a DATA\n   command initiates transfer of the mail data and is terminated by the\n   \"end of mail\" data indicator, which also confirms the transaction.\n\n   The first step in the procedure is the MAIL command.\n\n      MAIL FROM:<reverse-path> [SP <mail-parameters> ] <CRLF>\n\n   This command tells the SMTP-receiver that a new mail transaction is\n   starting and to reset all its state tables and buffers, including any\n   recipients or mail data.  The <reverse-path> portion of the first or\n   only argument contains the source mailbox (between \"<\" and \">\"\n   brackets), which can be used to report errors (see Section 4.2 for a\n   discussion of error reporting).  If accepted, the SMTP server returns\n   a \"250 OK\" reply.  If the mailbox specification is not acceptable for\n   some reason, the server MUST return a reply indicating whether the\n   failure is permanent (i.e., will occur again if the client tries to\n   send the same address again) or temporary (i.e., the address might be\n   accepted if the client tries again later).  Despite the apparent\n   scope of this requirement, there are circumstances in which the\n   acceptability of the reverse-path may not be determined until one or\n   more forward-paths (in RCPT commands) can be examined.  In those\n   cases, the server MAY reasonably accept the reverse-path (with a 250\n   reply) and then report problems after the forward-paths are received\n   and examined.  Normally, failures produce 550 or 553 replies.\n\n   Historically, the <reverse-path> was permitted to contain more than\n   just a mailbox; however, contemporary systems SHOULD NOT use source\n   routing (see Appendix C).\n\n   The optional <mail-parameters> are associated with negotiated SMTP\n   service extensions (see Section 2.2).\n\n   The second step in the procedure is the RCPT command.  This step of\n   the procedure can be repeated any number of times.\n\n      RCPT TO:<forward-path> [ SP <rcpt-parameters> ] <CRLF>\n\n   The first or only argument to this command includes a forward-path\n   (normally a mailbox and domain, always surrounded by \"<\" and \">\"\n   brackets) identifying one recipient.  If accepted, the SMTP server\n   returns a \"250 OK\" reply and stores the forward-path.  If the\n\n\n\nKlensin                     Standards Track                    [Page 19]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   recipient is known not to be a deliverable address, the SMTP server\n   returns a 550 reply, typically with a string such as \"no such user -\n   \" and the mailbox name (other circumstances and reply codes are\n   possible).\n\n   The <forward-path> can contain more than just a mailbox.\n   Historically, the <forward-path> was permitted to contain a source\n   routing list of hosts and the destination mailbox; however,\n   contemporary SMTP clients SHOULD NOT utilize source routes (see\n   Appendix C).  Servers MUST be prepared to encounter a list of source\n   routes in the forward-path, but they SHOULD ignore the routes or MAY\n   decline to support the relaying they imply.  Similarly, servers MAY\n   decline to accept mail that is destined for other hosts or systems.\n   These restrictions make a server useless as a relay for clients that\n   do not support full SMTP functionality.  Consequently, restricted-\n   capability clients MUST NOT assume that any SMTP server on the\n   Internet can be used as their mail processing (relaying) site.  If a\n   RCPT command appears without a previous MAIL command, the server MUST\n   return a 503 \"Bad sequence of commands\" response.  The optional\n   <rcpt-parameters> are associated with negotiated SMTP service\n   extensions (see Section 2.2).\n\n   Since it has been a common source of errors, it is worth noting that\n   spaces are not permitted on either side of the colon following FROM\n   in the MAIL command or TO in the RCPT command.  The syntax is exactly\n   as given above.\n\n   The third step in the procedure is the DATA command (or some\n   alternative specified in a service extension).\n\n      DATA <CRLF>\n\n   If accepted, the SMTP server returns a 354 Intermediate reply and\n   considers all succeeding lines up to but not including the end of\n   mail data indicator to be the message text.  When the end of text is\n   successfully received and stored, the SMTP-receiver sends a \"250 OK\"\n   reply.\n\n   Since the mail data is sent on the transmission channel, the end of\n   mail data must be indicated so that the command and reply dialog can\n   be resumed.  SMTP indicates the end of the mail data by sending a\n   line containing only a \".\" (period or full stop).  A transparency\n   procedure is used to prevent this from interfering with the user's\n   text (see Section 4.5.2).\n\n   The end of mail data indicator also confirms the mail transaction and\n   tells the SMTP server to now process the stored recipients and mail\n\n\n\n\nKlensin                     Standards Track                    [Page 20]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   data.  If accepted, the SMTP server returns a \"250 OK\" reply.  The\n   DATA command can fail at only two points in the protocol exchange:\n\n   If there was no MAIL, or no RCPT, command, or all such commands were\n   rejected, the server MAY return a \"command out of sequence\" (503) or\n   \"no valid recipients\" (554) reply in response to the DATA command.\n   If one of those replies (or any other 5yz reply) is received, the\n   client MUST NOT send the message data; more generally, message data\n   MUST NOT be sent unless a 354 reply is received.\n\n   If the verb is initially accepted and the 354 reply issued, the DATA\n   command should fail only if the mail transaction was incomplete (for\n   example, no recipients), if resources were unavailable (including, of\n   course, the server unexpectedly becoming unavailable), or if the\n   server determines that the message should be rejected for policy or\n   other reasons.\n\n   However, in practice, some servers do not perform recipient\n   verification until after the message text is received.  These servers\n   SHOULD treat a failure for one or more recipients as a \"subsequent\n   failure\" and return a mail message as discussed in Section 6 and, in\n   particular, in Section 6.1.  Using a \"550 mailbox not found\" (or\n   equivalent) reply code after the data are accepted makes it difficult\n   or impossible for the client to determine which recipients failed.\n\n   When the RFC 822 format ([28], [4]) is being used, the mail data\n   include the header fields such as those named Date, Subject, To, Cc,\n   and From.  Server SMTP systems SHOULD NOT reject messages based on\n   perceived defects in the RFC 822 or MIME (RFC 2045 [21]) message\n   header section or message body.  In particular, they MUST NOT reject\n   messages in which the numbers of Resent-header fields do not match or\n   Resent-to appears without Resent-from and/or Resent-date.\n\n   Mail transaction commands MUST be used in the order discussed above.\n\n3.4.  Forwarding for Address Correction or Updating\n\n   Forwarding support is most often required to consolidate and simplify\n   addresses within, or relative to, some enterprise and less frequently\n   to establish addresses to link a person's prior address with a\n   current one.  Silent forwarding of messages (without server\n   notification to the sender), for security or non-disclosure purposes,\n   is common in the contemporary Internet.\n\n   In both the enterprise and the \"new address\" cases, information\n   hiding (and sometimes security) considerations argue against exposure\n   of the \"final\" address through the SMTP protocol as a side effect of\n   the forwarding activity.  This may be especially important when the\n\n\n\nKlensin                     Standards Track                    [Page 21]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   final address may not even be reachable by the sender.  Consequently,\n   the \"forwarding\" mechanisms described in Section 3.2 of RFC 821, and\n   especially the 251 (corrected destination) and 551 reply codes from\n   RCPT must be evaluated carefully by implementers and, when they are\n   available, by those configuring systems (see also Section 7.4).\n\n   In particular:\n\n   o  Servers MAY forward messages when they are aware of an address\n      change.  When they do so, they MAY either provide address-updating\n      information with a 251 code, or may forward \"silently\" and return\n      a 250 code.  However, if a 251 code is used, they MUST NOT assume\n      that the client will actually update address information or even\n      return that information to the user.\n\n   Alternately,\n\n   o  Servers MAY reject messages or return them as non-deliverable when\n      they cannot be delivered precisely as addressed.  When they do so,\n      they MAY either provide address-updating information with a 551\n      code, or may reject the message as undeliverable with a 550 code\n      and no address-specific information.  However, if a 551 code is\n      used, they MUST NOT assume that the client will actually update\n      address information or even return that information to the user.\n\n   SMTP server implementations that support the 251 and/or 551 reply\n   codes SHOULD provide configuration mechanisms so that sites that\n   conclude that they would undesirably disclose information can disable\n   or restrict their use.\n\n3.5.  Commands for Debugging Addresses\n\n3.5.1.  Overview\n\n   SMTP provides commands to verify a user name or obtain the content of\n   a mailing list.  This is done with the VRFY and EXPN commands, which\n   have character string arguments.  Implementations SHOULD support VRFY\n   and EXPN (however, see Section 3.5.2 and Section 7.3).\n\n   For the VRFY command, the string is a user name or a user name and\n   domain (see below).  If a normal (i.e., 250) response is returned,\n   the response MAY include the full name of the user and MUST include\n   the mailbox of the user.  It MUST be in either of the following\n   forms:\n\n      User Name <local-part@domain>\n      local-part@domain\n\n\n\n\nKlensin                     Standards Track                    [Page 22]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   When a name that is the argument to VRFY could identify more than one\n   mailbox, the server MAY either note the ambiguity or identify the\n   alternatives.  In other words, any of the following are legitimate\n   responses to VRFY:\n\n      553 User ambiguous\n\n   or\n\n      553- Ambiguous; Possibilities are\n      553-Joe Smith <jsmith@foo.com>\n      553-Harry Smith <hsmith@foo.com>\n      553 Melvin Smith <dweep@foo.com>\n\n   or\n\n      553-Ambiguous; Possibilities\n      553- <jsmith@foo.com>\n      553- <hsmith@foo.com>\n      553 <dweep@foo.com>\n\n   Under normal circumstances, a client receiving a 553 reply would be\n   expected to expose the result to the user.  Use of exactly the forms\n   given, and the \"user ambiguous\" or \"ambiguous\" keywords, possibly\n   supplemented by extended reply codes, such as those described in RFC\n   3463 [25], will facilitate automated translation into other languages\n   as needed.  Of course, a client that was highly automated or that was\n   operating in another language than English might choose to try to\n   translate the response to return some other indication to the user\n   than the literal text of the reply, or to take some automated action\n   such as consulting a directory service for additional information\n   before reporting to the user.\n\n   For the EXPN command, the string identifies a mailing list, and the\n   successful (i.e., 250) multiline response MAY include the full name\n   of the users and MUST give the mailboxes on the mailing list.\n\n   In some hosts, the distinction between a mailing list and an alias\n   for a single mailbox is a bit fuzzy, since a common data structure\n   may hold both types of entries, and it is possible to have mailing\n   lists containing only one mailbox.  If a request is made to apply\n   VRFY to a mailing list, a positive response MAY be given if a message\n   so addressed would be delivered to everyone on the list, otherwise an\n   error SHOULD be reported (e.g., \"550 That is a mailing list, not a\n   user\" or \"252 Unable to verify members of mailing list\").  If a\n   request is made to expand a user name, the server MAY return a\n\n\n\n\n\nKlensin                     Standards Track                    [Page 23]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   positive response consisting of a list containing one name, or an\n   error MAY be reported (e.g., \"550 That is a user name, not a mailing\n   list\").\n\n   In the case of a successful multiline reply (normal for EXPN),\n   exactly one mailbox is to be specified on each line of the reply.\n   The case of an ambiguous request is discussed above.\n\n   \"User name\" is a fuzzy term and has been used deliberately.  An\n   implementation of the VRFY or EXPN commands MUST include at least\n   recognition of local mailboxes as \"user names\".  However, since\n   current Internet practice often results in a single host handling\n   mail for multiple domains, hosts, especially hosts that provide this\n   functionality, SHOULD accept the \"local-part@domain\" form as a \"user\n   name\"; hosts MAY also choose to recognize other strings as \"user\n   names\".\n\n   The case of expanding a mailbox list requires a multiline reply, such\n   as:\n\n      C: EXPN Example-People\n      S: 250-Jon Postel <Postel@isi.edu>\n      S: 250-Fred Fonebone <Fonebone@physics.foo-u.edu>\n      S: 250 Sam Q. Smith <SQSmith@specific.generic.com>\n\n   or\n\n      C: EXPN Executive-Washroom-List\n      S: 550 Access Denied to You.\n\n   The character string arguments of the VRFY and EXPN commands cannot\n   be further restricted due to the variety of implementations of the\n   user name and mailbox list concepts.  On some systems, it may be\n   appropriate for the argument of the EXPN command to be a file name\n   for a file containing a mailing list, but again there are a variety\n   of file naming conventions in the Internet.  Similarly, historical\n   variations in what is returned by these commands are such that the\n   response SHOULD be interpreted very carefully, if at all, and SHOULD\n   generally only be used for diagnostic purposes.\n\n3.5.2.  VRFY Normal Response\n\n   When normal (2yz or 551) responses are returned from a VRFY or EXPN\n   request, the reply MUST include the <Mailbox> name using a\n   \"<local-part@domain>\" construction, where \"domain\" is a fully-\n   qualified domain name.  In circumstances exceptional enough to\n   justify violating the intent of this specification, free-form text\n   MAY be returned.  In order to facilitate parsing by both computers\n\n\n\nKlensin                     Standards Track                    [Page 24]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   and people, addresses SHOULD appear in pointed brackets.  When\n   addresses, rather than free-form debugging information, are returned,\n   EXPN and VRFY MUST return only valid domain addresses that are usable\n   in SMTP RCPT commands.  Consequently, if an address implies delivery\n   to a program or other system, the mailbox name used to reach that\n   target MUST be given.  Paths (explicit source routes) MUST NOT be\n   returned by VRFY or EXPN.\n\n   Server implementations SHOULD support both VRFY and EXPN.  For\n   security reasons, implementations MAY provide local installations a\n   way to disable either or both of these commands through configuration\n   options or the equivalent (see Section 7.3).  When these commands are\n   supported, they are not required to work across relays when relaying\n   is supported.  Since they were both optional in RFC 821, but VRFY was\n   made mandatory in RFC 1123 [3], if EXPN is supported, it MUST be\n   listed as a service extension in an EHLO response.  VRFY MAY be\n   listed as a convenience but, since support for it is required, SMTP\n   clients are not required to check for its presence on the extension\n   list before using it.\n\n3.5.3.  Meaning of VRFY or EXPN Success Response\n\n   A server MUST NOT return a 250 code in response to a VRFY or EXPN\n   command unless it has actually verified the address.  In particular,\n   a server MUST NOT return 250 if all it has done is to verify that the\n   syntax given is valid.  In that case, 502 (Command not implemented)\n   or 500 (Syntax error, command unrecognized) SHOULD be returned.  As\n   stated elsewhere, implementation (in the sense of actually validating\n   addresses and returning information) of VRFY and EXPN are strongly\n   recommended.  Hence, implementations that return 500 or 502 for VRFY\n   are not in full compliance with this specification.\n\n   There may be circumstances where an address appears to be valid but\n   cannot reasonably be verified in real time, particularly when a\n   server is acting as a mail exchanger for another server or domain.\n   \"Apparent validity\", in this case, would normally involve at least\n   syntax checking and might involve verification that any domains\n   specified were ones to which the host expected to be able to relay\n   mail.  In these situations, reply code 252 SHOULD be returned.  These\n   cases parallel the discussion of RCPT verification in Section 2.1.\n   Similarly, the discussion in Section 3.4 applies to the use of reply\n   codes 251 and 551 with VRFY (and EXPN) to indicate addresses that are\n   recognized but that would be forwarded or rejected were mail received\n   for them.  Implementations generally SHOULD be more aggressive about\n   address verification in the case of VRFY than in the case of RCPT,\n   even if it takes a little longer to do so.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 25]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n3.5.4.  Semantics and Applications of EXPN\n\n   EXPN is often very useful in debugging and understanding problems\n   with mailing lists and multiple-target-address aliases.  Some systems\n   have attempted to use source expansion of mailing lists as a means of\n   eliminating duplicates.  The propagation of aliasing systems with\n   mail on the Internet for hosts (typically with MX and CNAME DNS\n   records), for mailboxes (various types of local host aliases), and in\n   various proxying arrangements has made it nearly impossible for these\n   strategies to work consistently, and mail systems SHOULD NOT attempt\n   them.\n\n3.6.  Relaying and Mail Routing\n\n3.6.1.  Source Routes and Relaying\n\n   In general, the availability of Mail eXchanger records in the domain\n   name system (RFC 1035 [2], RFC 974 [12]) makes the use of explicit\n   source routes in the Internet mail system unnecessary.  Many\n   historical problems with the interpretation of explicit source routes\n   have made their use undesirable.  SMTP clients SHOULD NOT generate\n   explicit source routes except under unusual circumstances.  SMTP\n   servers MAY decline to act as mail relays or to accept addresses that\n   specify source routes.  When route information is encountered, SMTP\n   servers MAY ignore the route information and simply send to the final\n   destination specified as the last element in the route and SHOULD do\n   so.  There has been an invalid practice of using names that do not\n   appear in the DNS as destination names, with the senders counting on\n   the intermediate hosts specified in source routing to resolve any\n   problems.  If source routes are stripped, this practice will cause\n   failures.  This is one of several reasons why SMTP clients MUST NOT\n   generate invalid source routes or depend on serial resolution of\n   names.\n\n   When source routes are not used, the process described in RFC 821 for\n   constructing a reverse-path from the forward-path is not applicable\n   and the reverse-path at the time of delivery will simply be the\n   address that appeared in the MAIL command.\n\n3.6.2.  Mail eXchange Records and Relaying\n\n   A relay SMTP server is usually the target of a DNS MX record that\n   designates it, rather than the final delivery system.  The relay\n   server may accept or reject the task of relaying the mail in the same\n   way it accepts or rejects mail for a local user.  If it accepts the\n   task, it then becomes an SMTP client, establishes a transmission\n   channel to the next SMTP server specified in the DNS (according to\n   the rules in Section 5), and sends it the mail.  If it declines to\n\n\n\nKlensin                     Standards Track                    [Page 26]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   relay mail to a particular address for policy reasons, a 550 response\n   SHOULD be returned.\n\n   This specification does not deal with the verification of return\n   paths for use in delivery notifications.  Recent work, such as that\n   on SPF [29] and DKIM [30] [31], has been done to provide ways to\n   ascertain that an address is valid or belongs to the person who\n   actually sent the message.  A server MAY attempt to verify the return\n   path before using its address for delivery notifications, but methods\n   of doing so are not defined here nor is any particular method\n   recommended at this time.\n\n3.6.3.  Message Submission Servers as Relays\n\n   Many mail-sending clients exist, especially in conjunction with\n   facilities that receive mail via POP3 or IMAP, that have limited\n   capability to support some of the requirements of this specification,\n   such as the ability to queue messages for subsequent delivery\n   attempts.  For these clients, it is common practice to make private\n   arrangements to send all messages to a single server for processing\n   and subsequent distribution.  SMTP, as specified here, is not ideally\n   suited for this role.  A standardized mail submission protocol has\n   been developed that is gradually superseding practices based on SMTP\n   (see RFC 4409 [18]).  In any event, because these arrangements are\n   private and fall outside the scope of this specification, they are\n   not described here.\n\n   It is important to note that MX records can point to SMTP servers\n   that act as gateways into other environments, not just SMTP relays\n   and final delivery systems; see Sections 3.7 and 5.\n\n   If an SMTP server has accepted the task of relaying the mail and\n   later finds that the destination is incorrect or that the mail cannot\n   be delivered for some other reason, then it MUST construct an\n   \"undeliverable mail\" notification message and send it to the\n   originator of the undeliverable mail (as indicated by the reverse-\n   path).  Formats specified for non-delivery reports by other standards\n   (see, for example, RFC 3461 [32] and RFC 3464 [33]) SHOULD be used if\n   possible.\n\n   This notification message must be from the SMTP server at the relay\n   host or the host that first determines that delivery cannot be\n   accomplished.  Of course, SMTP servers MUST NOT send notification\n   messages about problems transporting notification messages.  One way\n   to prevent loops in error reporting is to specify a null reverse-path\n   in the MAIL command of a notification message.  When such a message\n   is transmitted, the reverse-path MUST be set to null (see\n\n\n\n\nKlensin                     Standards Track                    [Page 27]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Section 4.5.5 for additional discussion).  A MAIL command with a null\n   reverse-path appears as follows:\n\n      MAIL FROM:<>\n\n   As discussed in Section 6.4, a relay SMTP has no need to inspect or\n   act upon the header section or body of the message data and MUST NOT\n   do so except to add its own \"Received:\" header field (Section 4.4)\n   and, optionally, to attempt to detect looping in the mail system (see\n   Section 6.3).  Of course, this prohibition also applies to any\n   modifications of these header fields or text (see also Section 7.9).\n\n3.7.  Mail Gatewaying\n\n   While the relay function discussed above operates within the Internet\n   SMTP transport service environment, MX records or various forms of\n   explicit routing may require that an intermediate SMTP server perform\n   a translation function between one transport service and another.  As\n   discussed in Section 2.3.10, when such a system is at the boundary\n   between two transport service environments, we refer to it as a\n   \"gateway\" or \"gateway SMTP\".\n\n   Gatewaying mail between different mail environments, such as\n   different mail formats and protocols, is complex and does not easily\n   yield to standardization.  However, some general requirements may be\n   given for a gateway between the Internet and another mail\n   environment.\n\n3.7.1.  Header Fields in Gatewaying\n\n   Header fields MAY be rewritten when necessary as messages are\n   gatewayed across mail environment boundaries.  This may involve\n   inspecting the message body or interpreting the local-part of the\n   destination address in spite of the prohibitions in Section 6.4.\n\n   Other mail systems gatewayed to the Internet often use a subset of\n   the RFC 822 header section or provide similar functionality with a\n   different syntax, but some of these mail systems do not have an\n   equivalent to the SMTP envelope.  Therefore, when a message leaves\n   the Internet environment, it may be necessary to fold the SMTP\n   envelope information into the message header section.  A possible\n   solution would be to create new header fields to carry the envelope\n   information (e.g., \"X-SMTP-MAIL:\" and \"X-SMTP-RCPT:\"); however, this\n   would require changes in mail programs in foreign environments and\n   might risk disclosure of private information (see Section 7.2).\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 28]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n3.7.2.  Received Lines in Gatewaying\n\n   When forwarding a message into or out of the Internet environment, a\n   gateway MUST prepend a Received: line, but it MUST NOT alter in any\n   way a Received: line that is already in the header section.\n\n   \"Received:\" header fields of messages originating from other\n   environments may not conform exactly to this specification.  However,\n   the most important use of Received: lines is for debugging mail\n   faults, and this debugging can be severely hampered by well-meaning\n   gateways that try to \"fix\" a Received: line.  As another consequence\n   of trace header fields arising in non-SMTP environments, receiving\n   systems MUST NOT reject mail based on the format of a trace header\n   field and SHOULD be extremely robust in the light of unexpected\n   information or formats in those header fields.\n\n   The gateway SHOULD indicate the environment and protocol in the \"via\"\n   clauses of Received header field(s) that it supplies.\n\n3.7.3.  Addresses in Gatewaying\n\n   From the Internet side, the gateway SHOULD accept all valid address\n   formats in SMTP commands and in the RFC 822 header section, and all\n   valid RFC 822 messages.  Addresses and header fields generated by\n   gateways MUST conform to applicable standards (including this one and\n   RFC 5322 [4]).  Gateways are, of course, subject to the same rules\n   for handling source routes as those described for other SMTP systems\n   in Section 3.3.\n\n3.7.4.  Other Header Fields in Gatewaying\n\n   The gateway MUST ensure that all header fields of a message that it\n   forwards into the Internet mail environment meet the requirements for\n   Internet mail.  In particular, all addresses in \"From:\", \"To:\",\n   \"Cc:\", etc., header fields MUST be transformed (if necessary) to\n   satisfy the standard header syntax of RFC 5322 [4], MUST reference\n   only fully-qualified domain names, and MUST be effective and useful\n   for sending replies.  The translation algorithm used to convert mail\n   from the Internet protocols to another environment's protocol SHOULD\n   ensure that error messages from the foreign mail environment are\n   delivered to the reverse-path from the SMTP envelope, not to an\n   address in the \"From:\", \"Sender:\", or similar header fields of the\n   message.\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 29]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n3.7.5.  Envelopes in Gatewaying\n\n   Similarly, when forwarding a message from another environment into\n   the Internet, the gateway SHOULD set the envelope return path in\n   accordance with an error message return address, if supplied by the\n   foreign environment.  If the foreign environment has no equivalent\n   concept, the gateway must select and use a best approximation, with\n   the message originator's address as the default of last resort.\n\n3.8.  Terminating Sessions and Connections\n\n   An SMTP connection is terminated when the client sends a QUIT\n   command.  The server responds with a positive reply code, after which\n   it closes the connection.\n\n   An SMTP server MUST NOT intentionally close the connection under\n   normal operational circumstances (see Section 7.8) except:\n\n   o  After receiving a QUIT command and responding with a 221 reply.\n\n   o  After detecting the need to shut down the SMTP service and\n      returning a 421 response code.  This response code can be issued\n      after the server receives any command or, if necessary,\n      asynchronously from command receipt (on the assumption that the\n      client will receive it after the next command is issued).\n\n   o  After a timeout, as specified in Section 4.5.3.2, occurs waiting\n      for the client to send a command or data.\n\n   In particular, a server that closes connections in response to\n   commands that are not understood is in violation of this\n   specification.  Servers are expected to be tolerant of unknown\n   commands, issuing a 500 reply and awaiting further instructions from\n   the client.\n\n   An SMTP server that is forcibly shut down via external means SHOULD\n   attempt to send a line containing a 421 response code to the SMTP\n   client before exiting.  The SMTP client will normally read the 421\n   response code after sending its next command.\n\n   SMTP clients that experience a connection close, reset, or other\n   communications failure due to circumstances not under their control\n   (in violation of the intent of this specification but sometimes\n   unavoidable) SHOULD, to maintain the robustness of the mail system,\n   treat the mail transaction as if a 451 response had been received and\n   act accordingly.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 30]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n3.9.  Mailing Lists and Aliases\n\n   An SMTP-capable host SHOULD support both the alias and the list\n   models of address expansion for multiple delivery.  When a message is\n   delivered or forwarded to each address of an expanded list form, the\n   return address in the envelope (\"MAIL FROM:\") MUST be changed to be\n   the address of a person or other entity who administers the list.\n   However, in this case, the message header section (RFC 5322 [4]) MUST\n   be left unchanged; in particular, the \"From\" field of the header\n   section is unaffected.\n\n   An important mail facility is a mechanism for multi-destination\n   delivery of a single message, by transforming (or \"expanding\" or\n   \"exploding\") a pseudo-mailbox address into a list of destination\n   mailbox addresses.  When a message is sent to such a pseudo-mailbox\n   (sometimes called an \"exploder\"), copies are forwarded or\n   redistributed to each mailbox in the expanded list.  Servers SHOULD\n   simply utilize the addresses on the list; application of heuristics\n   or other matching rules to eliminate some addresses, such as that of\n   the originator, is strongly discouraged.  We classify such a pseudo-\n   mailbox as an \"alias\" or a \"list\", depending upon the expansion\n   rules.\n\n3.9.1.  Alias\n\n   To expand an alias, the recipient mailer simply replaces the pseudo-\n   mailbox address in the envelope with each of the expanded addresses\n   in turn; the rest of the envelope and the message body are left\n   unchanged.  The message is then delivered or forwarded to each\n   expanded address.\n\n3.9.2.  List\n\n   A mailing list may be said to operate by \"redistribution\" rather than\n   by \"forwarding\".  To expand a list, the recipient mailer replaces the\n   pseudo-mailbox address in the envelope with each of the expanded\n   addresses in turn.  The return (backward-pointing) address in the\n   envelope is changed so that all error messages generated by the final\n   deliveries will be returned to a list administrator, not to the\n   message originator, who generally has no control over the contents of\n   the list and will typically find error messages annoying.  Note that\n   the key difference between handling aliases (Section 3.9.1) and\n   forwarding (this subsection) is the change to the backward-pointing\n   address in this case.  When a list constrains its processing to the\n   very limited set of modifications and actions described here, it is\n   attempting to emulate an MTA; such lists can be treated as a\n   continuation in email transit.\n\n\n\n\nKlensin                     Standards Track                    [Page 31]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   There exist mailing lists that perform additional, sometimes\n   extensive, modifications to a message and its envelope.  Such mailing\n   lists need to be viewed as full MUAs, which accept a delivery and\n   post a new message.\n\n4.  The SMTP Specifications\n\n4.1.  SMTP Commands\n\n4.1.1.  Command Semantics and Syntax\n\n   The SMTP commands define the mail transfer or the mail system\n   function requested by the user.  SMTP commands are character strings\n   terminated by <CRLF>.  The commands themselves are alphabetic\n   characters terminated by <SP> if parameters follow and <CRLF>\n   otherwise.  (In the interest of improved interoperability, SMTP\n   receivers SHOULD tolerate trailing white space before the terminating\n   <CRLF>.)  The syntax of the local part of a mailbox MUST conform to\n   receiver site conventions and the syntax specified in Section 4.1.2.\n   The SMTP commands are discussed below.  The SMTP replies are\n   discussed in Section 4.2.\n\n   A mail transaction involves several data objects that are\n   communicated as arguments to different commands.  The reverse-path is\n   the argument of the MAIL command, the forward-path is the argument of\n   the RCPT command, and the mail data is the argument of the DATA\n   command.  These arguments or data objects must be transmitted and\n   held, pending the confirmation communicated by the end of mail data\n   indication that finalizes the transaction.  The model for this is\n   that distinct buffers are provided to hold the types of data objects;\n   that is, there is a reverse-path buffer, a forward-path buffer, and a\n   mail data buffer.  Specific commands cause information to be appended\n   to a specific buffer, or cause one or more buffers to be cleared.\n\n   Several commands (RSET, DATA, QUIT) are specified as not permitting\n   parameters.  In the absence of specific extensions offered by the\n   server and accepted by the client, clients MUST NOT send such\n   parameters and servers SHOULD reject commands containing them as\n   having invalid syntax.\n\n4.1.1.1.  Extended HELLO (EHLO) or HELLO (HELO)\n\n   These commands are used to identify the SMTP client to the SMTP\n   server.  The argument clause contains the fully-qualified domain name\n   of the SMTP client, if one is available.  In situations in which the\n   SMTP client system does not have a meaningful domain name (e.g., when\n   its address is dynamically allocated and no reverse mapping record is\n\n\n\n\nKlensin                     Standards Track                    [Page 32]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   available), the client SHOULD send an address literal (see\n   Section 4.1.3).\n\n   RFC 2821, and some earlier informal practices, encouraged following\n   the literal by information that would help to identify the client\n   system.  That convention was not widely supported, and many SMTP\n   servers considered it an error.  In the interest of interoperability,\n   it is probably wise for servers to be prepared for this string to\n   occur, but SMTP clients SHOULD NOT send it.\n\n   The SMTP server identifies itself to the SMTP client in the\n   connection greeting reply and in the response to this command.\n\n   A client SMTP SHOULD start an SMTP session by issuing the EHLO\n   command.  If the SMTP server supports the SMTP service extensions, it\n   will give a successful response, a failure response, or an error\n   response.  If the SMTP server, in violation of this specification,\n   does not support any SMTP service extensions, it will generate an\n   error response.  Older client SMTP systems MAY, as discussed above,\n   use HELO (as specified in RFC 821) instead of EHLO, and servers MUST\n   support the HELO command and reply properly to it.  In any event, a\n   client MUST issue HELO or EHLO before starting a mail transaction.\n\n   These commands, and a \"250 OK\" reply to one of them, confirm that\n   both the SMTP client and the SMTP server are in the initial state,\n   that is, there is no transaction in progress and all state tables and\n   buffers are cleared.\n\n   Syntax:\n\n   ehlo           = \"EHLO\" SP ( Domain / address-literal ) CRLF\n\n   helo           = \"HELO\" SP Domain CRLF\n\n   Normally, the response to EHLO will be a multiline reply.  Each line\n   of the response contains a keyword and, optionally, one or more\n   parameters.  Following the normal syntax for multiline replies, these\n   keywords follow the code (250) and a hyphen for all but the last\n   line, and the code and a space for the last line.  The syntax for a\n   positive response, using the ABNF notation and terminal symbols of\n   RFC 5234 [7], is:\n\n   ehlo-ok-rsp    = ( \"250\" SP Domain [ SP ehlo-greet ] CRLF )\n                    / ( \"250-\" Domain [ SP ehlo-greet ] CRLF\n                    *( \"250-\" ehlo-line CRLF )\n                    \"250\" SP ehlo-line CRLF )\n\n\n\n\n\nKlensin                     Standards Track                    [Page 33]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   ehlo-greet     = 1*(%d0-9 / %d11-12 / %d14-127)\n                    ; string of any characters other than CR or LF\n\n   ehlo-line      = ehlo-keyword *( SP ehlo-param )\n\n   ehlo-keyword   = (ALPHA / DIGIT) *(ALPHA / DIGIT / \"-\")\n                    ; additional syntax of ehlo-params depends on\n                    ; ehlo-keyword\n\n   ehlo-param     = 1*(%d33-126)\n                    ; any CHAR excluding <SP> and all\n                    ; control characters (US-ASCII 0-31 and 127\n                    ; inclusive)\n\n   Although EHLO keywords may be specified in upper, lower, or mixed\n   case, they MUST always be recognized and processed in a case-\n   insensitive manner.  This is simply an extension of practices\n   specified in RFC 821 and Section 2.4.\n\n   The EHLO response MUST contain keywords (and associated parameters if\n   required) for all commands not listed as \"required\" in Section 4.5.1\n   excepting only private-use commands as described in Section 4.1.5.\n   Private-use commands MAY be listed.\n\n4.1.1.2.  MAIL (MAIL)\n\n   This command is used to initiate a mail transaction in which the mail\n   data is delivered to an SMTP server that may, in turn, deliver it to\n   one or more mailboxes or pass it on to another system (possibly using\n   SMTP).  The argument clause contains a reverse-path and may contain\n   optional parameters.  In general, the MAIL command may be sent only\n   when no mail transaction is in progress, see Section 4.1.4.\n\n   The reverse-path consists of the sender mailbox.  Historically, that\n   mailbox might optionally have been preceded by a list of hosts, but\n   that behavior is now deprecated (see Appendix C).  In some types of\n   reporting messages for which a reply is likely to cause a mail loop\n   (for example, mail delivery and non-delivery notifications), the\n   reverse-path may be null (see Section 3.6).\n\n   This command clears the reverse-path buffer, the forward-path buffer,\n   and the mail data buffer, and it inserts the reverse-path information\n   from its argument clause into the reverse-path buffer.\n\n   If service extensions were negotiated, the MAIL command may also\n   carry parameters associated with a particular service extension.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 34]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Syntax:\n\n   mail = \"MAIL FROM:\" Reverse-path\n                                       [SP Mail-parameters] CRLF\n\n4.1.1.3.  RECIPIENT (RCPT)\n\n   This command is used to identify an individual recipient of the mail\n   data; multiple recipients are specified by multiple uses of this\n   command.  The argument clause contains a forward-path and may contain\n   optional parameters.\n\n   The forward-path normally consists of the required destination\n   mailbox.  Sending systems SHOULD NOT generate the optional list of\n   hosts known as a source route.  Receiving systems MUST recognize\n   source route syntax but SHOULD strip off the source route\n   specification and utilize the domain name associated with the mailbox\n   as if the source route had not been provided.\n\n   Similarly, relay hosts SHOULD strip or ignore source routes, and\n   names MUST NOT be copied into the reverse-path.  When mail reaches\n   its ultimate destination (the forward-path contains only a\n   destination mailbox), the SMTP server inserts it into the destination\n   mailbox in accordance with its host mail conventions.\n\n   This command appends its forward-path argument to the forward-path\n   buffer; it does not change the reverse-path buffer nor the mail data\n   buffer.\n\n   For example, mail received at relay host xyz.com with envelope\n   commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org>\n\n   will normally be sent directly on to host d.bar.org with envelope\n   commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<userc@d.bar.org>\n\n   As provided in Appendix C, xyz.com MAY also choose to relay the\n   message to hosta.int, using the envelope commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<@hosta.int,@jkl.org:userc@d.bar.org>\n\n\n\n\n\nKlensin                     Standards Track                    [Page 35]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   or to jkl.org, using the envelope commands\n\n      MAIL FROM:<userx@y.foo.org>\n      RCPT TO:<@jkl.org:userc@d.bar.org>\n\n   Attempting to use relaying this way is now strongly discouraged.\n   Since hosts are not required to relay mail at all, xyz.com MAY also\n   reject the message entirely when the RCPT command is received, using\n   a 550 code (since this is a \"policy reason\").\n\n   If service extensions were negotiated, the RCPT command may also\n   carry parameters associated with a particular service extension\n   offered by the server.  The client MUST NOT transmit parameters other\n   than those associated with a service extension offered by the server\n   in its EHLO response.\n\n   Syntax:\n\n      rcpt = \"RCPT TO:\" ( \"<Postmaster@\" Domain \">\" / \"<Postmaster>\" /\n                  Forward-path ) [SP Rcpt-parameters] CRLF\n\n                  Note that, in a departure from the usual rules for\n                  local-parts, the \"Postmaster\" string shown above is\n                  treated as case-insensitive.\n\n4.1.1.4.  DATA (DATA)\n\n   The receiver normally sends a 354 response to DATA, and then treats\n   the lines (strings ending in <CRLF> sequences, as described in\n   Section 2.3.7) following the command as mail data from the sender.\n   This command causes the mail data to be appended to the mail data\n   buffer.  The mail data may contain any of the 128 ASCII character\n   codes, although experience has indicated that use of control\n   characters other than SP, HT, CR, and LF may cause problems and\n   SHOULD be avoided when possible.\n\n   The mail data are terminated by a line containing only a period, that\n   is, the character sequence \"<CRLF>.<CRLF>\", where the first <CRLF> is\n   actually the terminator of the previous line (see Section 4.5.2).\n   This is the end of mail data indication.  The first <CRLF> of this\n   terminating sequence is also the <CRLF> that ends the final line of\n   the data (message text) or, if there was no mail data, ends the DATA\n   command itself (the \"no mail data\" case does not conform to this\n   specification since it would require that neither the trace header\n   fields required by this specification nor the message header section\n   required by RFC 5322 [4] be transmitted).  An extra <CRLF> MUST NOT\n   be added, as that would cause an empty line to be added to the\n   message.  The only exception to this rule would arise if the message\n\n\n\nKlensin                     Standards Track                    [Page 36]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   body were passed to the originating SMTP-sender with a final \"line\"\n   that did not end in <CRLF>; in that case, the originating SMTP system\n   MUST either reject the message as invalid or add <CRLF> in order to\n   have the receiving SMTP server recognize the \"end of data\" condition.\n\n   The custom of accepting lines ending only in <LF>, as a concession to\n   non-conforming behavior on the part of some UNIX systems, has proven\n   to cause more interoperability problems than it solves, and SMTP\n   server systems MUST NOT do this, even in the name of improved\n   robustness.  In particular, the sequence \"<LF>.<LF>\" (bare line\n   feeds, without carriage returns) MUST NOT be treated as equivalent to\n   <CRLF>.<CRLF> as the end of mail data indication.\n\n   Receipt of the end of mail data indication requires the server to\n   process the stored mail transaction information.  This processing\n   consumes the information in the reverse-path buffer, the forward-path\n   buffer, and the mail data buffer, and on the completion of this\n   command these buffers are cleared.  If the processing is successful,\n   the receiver MUST send an OK reply.  If the processing fails, the\n   receiver MUST send a failure reply.  The SMTP model does not allow\n   for partial failures at this point: either the message is accepted by\n   the server for delivery and a positive response is returned or it is\n   not accepted and a failure reply is returned.  In sending a positive\n   \"250 OK\" completion reply to the end of data indication, the receiver\n   takes full responsibility for the message (see Section 6.1).  Errors\n   that are diagnosed subsequently MUST be reported in a mail message,\n   as discussed in Section 4.4.\n\n   When the SMTP server accepts a message either for relaying or for\n   final delivery, it inserts a trace record (also referred to\n   interchangeably as a \"time stamp line\" or \"Received\" line) at the top\n   of the mail data.  This trace record indicates the identity of the\n   host that sent the message, the identity of the host that received\n   the message (and is inserting this time stamp), and the date and time\n   the message was received.  Relayed messages will have multiple time\n   stamp lines.  Details for formation of these lines, including their\n   syntax, is specified in Section 4.4.\n\n   Additional discussion about the operation of the DATA command appears\n   in Section 3.3.\n\n   Syntax:\n\n      data = \"DATA\" CRLF\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 37]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.1.1.5.  RESET (RSET)\n\n   This command specifies that the current mail transaction will be\n   aborted.  Any stored sender, recipients, and mail data MUST be\n   discarded, and all buffers and state tables cleared.  The receiver\n   MUST send a \"250 OK\" reply to a RSET command with no arguments.  A\n   reset command may be issued by the client at any time.  It is\n   effectively equivalent to a NOOP (i.e., it has no effect) if issued\n   immediately after EHLO, before EHLO is issued in the session, after\n   an end of data indicator has been sent and acknowledged, or\n   immediately before a QUIT.  An SMTP server MUST NOT close the\n   connection as the result of receiving a RSET; that action is reserved\n   for QUIT (see Section 4.1.1.10).\n\n   Since EHLO implies some additional processing and response by the\n   server, RSET will normally be more efficient than reissuing that\n   command, even though the formal semantics are the same.\n\n   There are circumstances, contrary to the intent of this\n   specification, in which an SMTP server may receive an indication that\n   the underlying TCP connection has been closed or reset.  To preserve\n   the robustness of the mail system, SMTP servers SHOULD be prepared\n   for this condition and SHOULD treat it as if a QUIT had been received\n   before the connection disappeared.\n\n   Syntax:\n\n      rset = \"RSET\" CRLF\n\n4.1.1.6.  VERIFY (VRFY)\n\n   This command asks the receiver to confirm that the argument\n   identifies a user or mailbox.  If it is a user name, information is\n   returned as specified in Section 3.5.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer.\n\n   Syntax:\n\n      vrfy = \"VRFY\" SP String CRLF\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 38]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.1.1.7.  EXPAND (EXPN)\n\n   This command asks the receiver to confirm that the argument\n   identifies a mailing list, and if so, to return the membership of\n   that list.  If the command is successful, a reply is returned\n   containing information as described in Section 3.5.  This reply will\n   have multiple lines except in the trivial case of a one-member list.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer, and it may be issued at any\n   time.\n\n   Syntax:\n\n      expn = \"EXPN\" SP String CRLF\n\n4.1.1.8.  HELP (HELP)\n\n   This command causes the server to send helpful information to the\n   client.  The command MAY take an argument (e.g., any command name)\n   and return more specific information as a response.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer, and it may be issued at any\n   time.\n\n   SMTP servers SHOULD support HELP without arguments and MAY support it\n   with arguments.\n\n   Syntax:\n\n      help = \"HELP\" [ SP String ] CRLF\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 39]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.1.1.9.  NOOP (NOOP)\n\n   This command does not affect any parameters or previously entered\n   commands.  It specifies no action other than that the receiver send a\n   \"250 OK\" reply.\n\n   This command has no effect on the reverse-path buffer, the forward-\n   path buffer, or the mail data buffer, and it may be issued at any\n   time.  If a parameter string is specified, servers SHOULD ignore it.\n\n   Syntax:\n\n      noop = \"NOOP\" [ SP String ] CRLF\n\n4.1.1.10.  QUIT (QUIT)\n\n   This command specifies that the receiver MUST send a \"221 OK\" reply,\n   and then close the transmission channel.\n\n   The receiver MUST NOT intentionally close the transmission channel\n   until it receives and replies to a QUIT command (even if there was an\n   error).  The sender MUST NOT intentionally close the transmission\n   channel until it sends a QUIT command, and it SHOULD wait until it\n   receives the reply (even if there was an error response to a previous\n   command).  If the connection is closed prematurely due to violations\n   of the above or system or network failure, the server MUST cancel any\n   pending transaction, but not undo any previously completed\n   transaction, and generally MUST act as if the command or transaction\n   in progress had received a temporary error (i.e., a 4yz response).\n\n   The QUIT command may be issued at any time.  Any current uncompleted\n   mail transaction will be aborted.\n\n   Syntax:\n\n      quit = \"QUIT\" CRLF\n\n4.1.1.11.  Mail-Parameter and Rcpt-Parameter Error Responses\n\n   If the server SMTP does not recognize or cannot implement one or more\n   of the parameters associated with a particular MAIL FROM or RCPT TO\n   command, it will return code 555.\n\n   If, for some reason, the server is temporarily unable to accommodate\n   one or more of the parameters associated with a MAIL FROM or RCPT TO\n   command, and if the definition of the specific parameter does not\n   mandate the use of another code, it should return code 455.\n\n\n\n\nKlensin                     Standards Track                    [Page 40]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Errors specific to particular parameters and their values will be\n   specified in the parameter's defining RFC.\n\n4.1.2.  Command Argument Syntax\n\n   The syntax of the argument clauses of the above commands (using the\n   syntax specified in RFC 5234 [7] where applicable) is given below.\n   Some of the productions given below are used only in conjunction with\n   source routes as described in Appendix C.  Terminals not defined in\n   this document, such as ALPHA, DIGIT, SP, CR, LF, CRLF, are as defined\n   in the \"core\" syntax in Section 6 of RFC 5234 [7] or in the message\n   format syntax in RFC 5322 [4].\n\n   Reverse-path   = Path / \"<>\"\n\n   Forward-path   = Path\n\n   Path           = \"<\" [ A-d-l \":\" ] Mailbox \">\"\n\n   A-d-l          = At-domain *( \",\" At-domain )\n                  ; Note that this form, the so-called \"source\n                  ; route\", MUST BE accepted, SHOULD NOT be\n                  ; generated, and SHOULD be ignored.\n\n   At-domain      = \"@\" Domain\n\n   Mail-parameters  = esmtp-param *(SP esmtp-param)\n\n   Rcpt-parameters  = esmtp-param *(SP esmtp-param)\n\n   esmtp-param    = esmtp-keyword [\"=\" esmtp-value]\n\n   esmtp-keyword  = (ALPHA / DIGIT) *(ALPHA / DIGIT / \"-\")\n\n   esmtp-value    = 1*(%d33-60 / %d62-126)\n                  ; any CHAR excluding \"=\", SP, and control\n                  ; characters.  If this string is an email address,\n                  ; i.e., a Mailbox, then the \"xtext\" syntax [32]\n                  ; SHOULD be used.\n\n   Keyword        = Ldh-str\n\n   Argument       = Atom\n\n   Domain         = sub-domain *(\".\" sub-domain)\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 41]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   sub-domain     = Let-dig [Ldh-str]\n\n   Let-dig        = ALPHA / DIGIT\n\n   Ldh-str        = *( ALPHA / DIGIT / \"-\" ) Let-dig\n\n   address-literal  = \"[\" ( IPv4-address-literal /\n                    IPv6-address-literal /\n                    General-address-literal ) \"]\"\n                    ; See Section 4.1.3\n\n   Mailbox        = Local-part \"@\" ( Domain / address-literal )\n\n   Local-part     = Dot-string / Quoted-string\n                  ; MAY be case-sensitive\n\n\n   Dot-string     = Atom *(\".\"  Atom)\n\n   Atom           = 1*atext\n\n   Quoted-string  = DQUOTE *QcontentSMTP DQUOTE\n\n   QcontentSMTP   = qtextSMTP / quoted-pairSMTP\n\n   quoted-pairSMTP  = %d92 %d32-126\n                    ; i.e., backslash followed by any ASCII\n                    ; graphic (including itself) or SPace\n\n   qtextSMTP      = %d32-33 / %d35-91 / %d93-126\n                  ; i.e., within a quoted string, any\n                  ; ASCII graphic or space is permitted\n                  ; without blackslash-quoting except\n                  ; double-quote and the backslash itself.\n\n   String         = Atom / Quoted-string\n\n   While the above definition for Local-part is relatively permissive,\n   for maximum interoperability, a host that expects to receive mail\n   SHOULD avoid defining mailboxes where the Local-part requires (or\n   uses) the Quoted-string form or where the Local-part is case-\n   sensitive.  For any purposes that require generating or comparing\n   Local-parts (e.g., to specific mailbox names), all quoted forms MUST\n   be treated as equivalent, and the sending system SHOULD transmit the\n   form that uses the minimum quoting possible.\n\n   Systems MUST NOT define mailboxes in such a way as to require the use\n   in SMTP of non-ASCII characters (octets with the high order bit set\n\n\n\nKlensin                     Standards Track                    [Page 42]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   to one) or ASCII \"control characters\" (decimal value 0-31 and 127).\n   These characters MUST NOT be used in MAIL or RCPT commands or other\n   commands that require mailbox names.\n\n   Note that the backslash, \"\\\", is a quote character, which is used to\n   indicate that the next character is to be used literally (instead of\n   its normal interpretation).  For example, \"Joe\\,Smith\" indicates a\n   single nine-character user name string with the comma being the\n   fourth character of that string.\n\n   To promote interoperability and consistent with long-standing\n   guidance about conservative use of the DNS in naming and applications\n   (e.g., see Section 2.3.1 of the base DNS document, RFC 1035 [2]),\n   characters outside the set of alphabetic characters, digits, and\n   hyphen MUST NOT appear in domain name labels for SMTP clients or\n   servers.  In particular, the underscore character is not permitted.\n   SMTP servers that receive a command in which invalid character codes\n   have been employed, and for which there are no other reasons for\n   rejection, MUST reject that command with a 501 response (this rule,\n   like others, could be overridden by appropriate SMTP extensions).\n\n4.1.3.  Address Literals\n\n   Sometimes a host is not known to the domain name system and\n   communication (and, in particular, communication to report and repair\n   the error) is blocked.  To bypass this barrier, a special literal\n   form of the address is allowed as an alternative to a domain name.\n   For IPv4 addresses, this form uses four small decimal integers\n   separated by dots and enclosed by brackets such as [123.255.37.2],\n   which indicates an (IPv4) Internet Address in sequence-of-octets\n   form.  For IPv6 and other forms of addressing that might eventually\n   be standardized, the form consists of a standardized \"tag\" that\n   identifies the address syntax, a colon, and the address itself, in a\n   format specified as part of the relevant standards (i.e., RFC 4291\n   [8] for IPv6).\n\n   Specifically:\n\n   IPv4-address-literal  = Snum 3(\".\"  Snum)\n\n   IPv6-address-literal  = \"IPv6:\" IPv6-addr\n\n   General-address-literal  = Standardized-tag \":\" 1*dcontent\n\n   Standardized-tag  = Ldh-str\n                     ; Standardized-tag MUST be specified in a\n                     ; Standards-Track RFC and registered with IANA\n\n\n\n\nKlensin                     Standards Track                    [Page 43]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   dcontent       = %d33-90 / ; Printable US-ASCII\n                  %d94-126 ; excl. \"[\", \"\\\", \"]\"\n\n   Snum           = 1*3DIGIT\n                  ; representing a decimal integer\n                  ; value in the range 0 through 255\n\n   IPv6-addr      = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp\n\n   IPv6-hex       = 1*4HEXDIG\n\n   IPv6-full      = IPv6-hex 7(\":\" IPv6-hex)\n\n   IPv6-comp      = [IPv6-hex *5(\":\" IPv6-hex)] \"::\"\n                  [IPv6-hex *5(\":\" IPv6-hex)]\n                  ; The \"::\" represents at least 2 16-bit groups of\n                  ; zeros.  No more than 6 groups in addition to the\n                  ; \"::\" may be present.\n\n   IPv6v4-full    = IPv6-hex 5(\":\" IPv6-hex) \":\" IPv4-address-literal\n\n   IPv6v4-comp    = [IPv6-hex *3(\":\" IPv6-hex)] \"::\"\n                  [IPv6-hex *3(\":\" IPv6-hex) \":\"]\n                  IPv4-address-literal\n                  ; The \"::\" represents at least 2 16-bit groups of\n                  ; zeros.  No more than 4 groups in addition to the\n                  ; \"::\" and IPv4-address-literal may be present.\n\n4.1.4.  Order of Commands\n\n   There are restrictions on the order in which these commands may be\n   used.\n\n   A session that will contain mail transactions MUST first be\n   initialized by the use of the EHLO command.  An SMTP server SHOULD\n   accept commands for non-mail transactions (e.g., VRFY or EXPN)\n   without this initialization.\n\n   An EHLO command MAY be issued by a client later in the session.  If\n   it is issued after the session begins and the EHLO command is\n   acceptable to the SMTP server, the SMTP server MUST clear all buffers\n   and reset the state exactly as if a RSET command had been issued.  In\n   other words, the sequence of RSET followed immediately by EHLO is\n   redundant, but not harmful other than in the performance cost of\n   executing unnecessary commands.\n\n   If the EHLO command is not acceptable to the SMTP server, 501, 500,\n   502, or 550 failure replies MUST be returned as appropriate.  The\n\n\n\nKlensin                     Standards Track                    [Page 44]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   SMTP server MUST stay in the same state after transmitting these\n   replies that it was in before the EHLO was received.\n\n   The SMTP client MUST, if possible, ensure that the domain parameter\n   to the EHLO command is a primary host name as specified for this\n   command in Section 2.3.5.  If this is not possible (e.g., when the\n   client's address is dynamically assigned and the client does not have\n   an obvious name), an address literal SHOULD be substituted for the\n   domain name.\n\n   An SMTP server MAY verify that the domain name argument in the EHLO\n   command actually corresponds to the IP address of the client.\n   However, if the verification fails, the server MUST NOT refuse to\n   accept a message on that basis.  Information captured in the\n   verification attempt is for logging and tracing purposes.  Note that\n   this prohibition applies to the matching of the parameter to its IP\n   address only; see Section 7.9 for a more extensive discussion of\n   rejecting incoming connections or mail messages.\n\n   The NOOP, HELP, EXPN, VRFY, and RSET commands can be used at any time\n   during a session, or without previously initializing a session.  SMTP\n   servers SHOULD process these normally (that is, not return a 503\n   code) even if no EHLO command has yet been received; clients SHOULD\n   open a session with EHLO before sending these commands.\n\n   If these rules are followed, the example in RFC 821 that shows \"550\n   access denied to you\" in response to an EXPN command is incorrect\n   unless an EHLO command precedes the EXPN or the denial of access is\n   based on the client's IP address or other authentication or\n   authorization-determining mechanisms.\n\n   The MAIL command (or the obsolete SEND, SOML, or SAML commands)\n   begins a mail transaction.  Once started, a mail transaction consists\n   of a transaction beginning command, one or more RCPT commands, and a\n   DATA command, in that order.  A mail transaction may be aborted by\n   the RSET, a new EHLO, or the QUIT command.  There may be zero or more\n   transactions in a session.  MAIL (or SEND, SOML, or SAML) MUST NOT be\n   sent if a mail transaction is already open, i.e., it should be sent\n   only if no mail transaction had been started in the session, or if\n   the previous one successfully concluded with a successful DATA\n   command, or if the previous one was aborted, e.g., with a RSET or new\n   EHLO.\n\n   If the transaction beginning command argument is not acceptable, a\n   501 failure reply MUST be returned and the SMTP server MUST stay in\n   the same state.  If the commands in a transaction are out of order to\n   the degree that they cannot be processed by the server, a 503 failure\n\n\n\n\nKlensin                     Standards Track                    [Page 45]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   reply MUST be returned and the SMTP server MUST stay in the same\n   state.\n\n   The last command in a session MUST be the QUIT command.  The QUIT\n   command SHOULD be used by the client SMTP to request connection\n   closure, even when no session opening command was sent and accepted.\n\n4.1.5.  Private-Use Commands\n\n   As specified in Section 2.2.2, commands starting in \"X\" may be used\n   by bilateral agreement between the client (sending) and server\n   (receiving) SMTP agents.  An SMTP server that does not recognize such\n   a command is expected to reply with \"500 Command not recognized\".  An\n   extended SMTP server MAY list the feature names associated with these\n   private commands in the response to the EHLO command.\n\n   Commands sent or accepted by SMTP systems that do not start with \"X\"\n   MUST conform to the requirements of Section 2.2.2.\n\n4.2.  SMTP Replies\n\n   Replies to SMTP commands serve to ensure the synchronization of\n   requests and actions in the process of mail transfer and to guarantee\n   that the SMTP client always knows the state of the SMTP server.\n   Every command MUST generate exactly one reply.\n\n   The details of the command-reply sequence are described in\n   Section 4.3.\n\n   An SMTP reply consists of a three digit number (transmitted as three\n   numeric characters) followed by some text unless specified otherwise\n   in this document.  The number is for use by automata to determine\n   what state to enter next; the text is for the human user.  The three\n   digits contain enough encoded information that the SMTP client need\n   not examine the text and may either discard it or pass it on to the\n   user, as appropriate.  Exceptions are as noted elsewhere in this\n   document.  In particular, the 220, 221, 251, 421, and 551 reply codes\n   are associated with message text that must be parsed and interpreted\n   by machines.  In the general case, the text may be receiver dependent\n   and context dependent, so there are likely to be varying texts for\n   each reply code.  A discussion of the theory of reply codes is given\n   in Section 4.2.1.  Formally, a reply is defined to be the sequence: a\n   three-digit code, <SP>, one line of text, and <CRLF>, or a multiline\n   reply (as defined in the same section).  Since, in violation of this\n   specification, the text is sometimes not sent, clients that do not\n   receive it SHOULD be prepared to process the code alone (with or\n   without a trailing space character).  Only the EHLO, EXPN, and HELP\n   commands are expected to result in multiline replies in normal\n\n\n\nKlensin                     Standards Track                    [Page 46]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   circumstances; however, multiline replies are allowed for any\n   command.\n\n   In ABNF, server responses are:\n\n   Greeting       = ( \"220 \" (Domain / address-literal)\n                  [ SP textstring ] CRLF ) /\n                  ( \"220-\" (Domain / address-literal)\n                  [ SP textstring ] CRLF\n                  *( \"220-\" [ textstring ] CRLF )\n                  \"220\" [ SP textstring ] CRLF )\n\n   textstring     = 1*(%d09 / %d32-126) ; HT, SP, Printable US-ASCII\n\n   Reply-line     = *( Reply-code \"-\" [ textstring ] CRLF )\n                  Reply-code [ SP textstring ] CRLF\n\n   Reply-code     = %x32-35 %x30-35 %x30-39\n\n   where \"Greeting\" appears only in the 220 response that announces that\n   the server is opening its part of the connection.  (Other possible\n   server responses upon connection follow the syntax of Reply-line.)\n\n   An SMTP server SHOULD send only the reply codes listed in this\n   document.  An SMTP server SHOULD use the text shown in the examples\n   whenever appropriate.\n\n   An SMTP client MUST determine its actions only by the reply code, not\n   by the text (except for the \"change of address\" 251 and 551 and, if\n   necessary, 220, 221, and 421 replies); in the general case, any text,\n   including no text at all (although senders SHOULD NOT send bare\n   codes), MUST be acceptable.  The space (blank) following the reply\n   code is considered part of the text.  Whenever possible, a receiver-\n   SMTP SHOULD test the first digit (severity indication) of the reply\n   code.\n\n   The list of codes that appears below MUST NOT be construed as\n   permanent.  While the addition of new codes should be a rare and\n   significant activity, with supplemental information in the textual\n   part of the response being preferred, new codes may be added as the\n   result of new Standards or Standards-Track specifications.\n   Consequently, a sender-SMTP MUST be prepared to handle codes not\n   specified in this document and MUST do so by interpreting the first\n   digit only.\n\n   In the absence of extensions negotiated with the client, SMTP servers\n   MUST NOT send reply codes whose first digits are other than 2, 3, 4,\n\n\n\n\nKlensin                     Standards Track                    [Page 47]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   or 5.  Clients that receive such out-of-range codes SHOULD normally\n   treat them as fatal errors and terminate the mail transaction.\n\n4.2.1.  Reply Code Severities and Theory\n\n   The three digits of the reply each have a special significance.  The\n   first digit denotes whether the response is good, bad, or incomplete.\n   An unsophisticated SMTP client, or one that receives an unexpected\n   code, will be able to determine its next action (proceed as planned,\n   redo, retrench, etc.) by examining this first digit.  An SMTP client\n   that wants to know approximately what kind of error occurred (e.g.,\n   mail system error, command syntax error) may examine the second\n   digit.  The third digit and any supplemental information that may be\n   present is reserved for the finest gradation of information.\n\n   There are four values for the first digit of the reply code:\n\n   2yz  Positive Completion reply\n      The requested action has been successfully completed.  A new\n      request may be initiated.\n\n   3yz  Positive Intermediate reply\n      The command has been accepted, but the requested action is being\n      held in abeyance, pending receipt of further information.  The\n      SMTP client should send another command specifying this\n      information.  This reply is used in command sequence groups (i.e.,\n      in DATA).\n\n   4yz  Transient Negative Completion reply\n      The command was not accepted, and the requested action did not\n      occur.  However, the error condition is temporary, and the action\n      may be requested again.  The sender should return to the beginning\n      of the command sequence (if any).  It is difficult to assign a\n      meaning to \"transient\" when two different sites (receiver- and\n      sender-SMTP agents) must agree on the interpretation.  Each reply\n      in this category might have a different time value, but the SMTP\n      client SHOULD try again.  A rule of thumb to determine whether a\n      reply fits into the 4yz or the 5yz category (see below) is that\n      replies are 4yz if they can be successful if repeated without any\n      change in command form or in properties of the sender or receiver\n      (that is, the command is repeated identically and the receiver\n      does not put up a new implementation).\n\n   5yz  Permanent Negative Completion reply\n      The command was not accepted and the requested action did not\n      occur.  The SMTP client SHOULD NOT repeat the exact request (in\n      the same sequence).  Even some \"permanent\" error conditions can be\n      corrected, so the human user may want to direct the SMTP client to\n\n\n\nKlensin                     Standards Track                    [Page 48]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n      reinitiate the command sequence by direct action at some point in\n      the future (e.g., after the spelling has been changed, or the user\n      has altered the account status).\n\n   It is worth noting that the file transfer protocol (FTP) [34] uses a\n   very similar code architecture and that the SMTP codes are based on\n   the FTP model.  However, SMTP uses a one-command, one-response model\n   (while FTP is asynchronous) and FTP's 1yz codes are not part of the\n   SMTP model.\n\n   The second digit encodes responses in specific categories:\n\n   x0z  Syntax: These replies refer to syntax errors, syntactically\n      correct commands that do not fit any functional category, and\n      unimplemented or superfluous commands.\n\n   x1z  Information: These are replies to requests for information, such\n      as status or help.\n\n   x2z  Connections: These are replies referring to the transmission\n      channel.\n\n   x3z  Unspecified.\n\n   x4z  Unspecified.\n\n   x5z  Mail system: These replies indicate the status of the receiver\n      mail system vis-a-vis the requested transfer or other mail system\n      action.\n\n   The third digit gives a finer gradation of meaning in each category\n   specified by the second digit.  The list of replies illustrates this.\n   Each reply text is recommended rather than mandatory, and may even\n   change according to the command with which it is associated.  On the\n   other hand, the reply codes must strictly follow the specifications\n   in this section.  Receiver implementations should not invent new\n   codes for slightly different situations from the ones described here,\n   but rather adapt codes already defined.\n\n   For example, a command such as NOOP, whose successful execution does\n   not offer the SMTP client any new information, will return a 250\n   reply.  The reply is 502 when the command requests an unimplemented\n   non-site-specific action.  A refinement of that is the 504 reply for\n   a command that is implemented, but that requests an unimplemented\n   parameter.\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 49]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   The reply text may be longer than a single line; in these cases the\n   complete text must be marked so the SMTP client knows when it can\n   stop reading the reply.  This requires a special format to indicate a\n   multiple line reply.\n\n   The format for multiline replies requires that every line, except the\n   last, begin with the reply code, followed immediately by a hyphen,\n   \"-\" (also known as minus), followed by text.  The last line will\n   begin with the reply code, followed immediately by <SP>, optionally\n   some text, and <CRLF>.  As noted above, servers SHOULD send the <SP>\n   if subsequent text is not sent, but clients MUST be prepared for it\n   to be omitted.\n\n   For example:\n\n      250-First line\n      250-Second line\n      250-234 Text beginning with numbers\n      250 The last line\n\n   In a multiline reply, the reply code on each of the lines MUST be the\n   same.  It is reasonable for the client to rely on this, so it can\n   make processing decisions based on the code in any line, assuming\n   that all others will be the same.  In a few cases, there is important\n   data for the client in the reply \"text\".  The client will be able to\n   identify these cases from the current context.\n\n4.2.2.  Reply Codes by Function Groups\n\n   500  Syntax error, command unrecognized (This may include errors such\n      as command line too long)\n\n   501  Syntax error in parameters or arguments\n\n   502  Command not implemented (see Section 4.2.4)\n\n   503  Bad sequence of commands\n\n   504  Command parameter not implemented\n\n\n   211  System status, or system help reply\n\n   214  Help message (Information on how to use the receiver or the\n      meaning of a particular non-standard command; this reply is useful\n      only to the human user)\n\n\n\n\n\nKlensin                     Standards Track                    [Page 50]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   220  <domain> Service ready\n\n   221  <domain> Service closing transmission channel\n\n   421  <domain> Service not available, closing transmission channel\n      (This may be a reply to any command if the service knows it must\n      shut down)\n\n\n   250  Requested mail action okay, completed\n\n   251  User not local; will forward to <forward-path> (See Section 3.4)\n\n   252  Cannot VRFY user, but will accept message and attempt delivery\n      (See Section 3.5.3)\n\n   455  Server unable to accommodate parameters\n\n   555  MAIL FROM/RCPT TO parameters not recognized or not implemented\n\n   450  Requested mail action not taken: mailbox unavailable (e.g.,\n      mailbox busy or temporarily blocked for policy reasons)\n\n   550  Requested action not taken: mailbox unavailable (e.g., mailbox\n      not found, no access, or command rejected for policy reasons)\n\n   451  Requested action aborted: error in processing\n\n   551  User not local; please try <forward-path> (See Section 3.4)\n\n   452  Requested action not taken: insufficient system storage\n\n   552  Requested mail action aborted: exceeded storage allocation\n\n   553  Requested action not taken: mailbox name not allowed (e.g.,\n      mailbox syntax incorrect)\n\n   354  Start mail input; end with <CRLF>.<CRLF>\n\n   554  Transaction failed (Or, in the case of a connection-opening\n      response, \"No SMTP service here\")\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 51]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.2.3.  Reply Codes in Numeric Order\n\n   211  System status, or system help reply\n\n   214  Help message (Information on how to use the receiver or the\n      meaning of a particular non-standard command; this reply is useful\n      only to the human user)\n\n   220  <domain> Service ready\n\n   221  <domain> Service closing transmission channel\n\n   250  Requested mail action okay, completed\n\n   251  User not local; will forward to <forward-path> (See Section 3.4)\n\n   252  Cannot VRFY user, but will accept message and attempt delivery\n      (See Section 3.5.3)\n\n   354  Start mail input; end with <CRLF>.<CRLF>\n\n   421  <domain> Service not available, closing transmission channel\n      (This may be a reply to any command if the service knows it must\n      shut down)\n\n   450  Requested mail action not taken: mailbox unavailable (e.g.,\n      mailbox busy or temporarily blocked for policy reasons)\n\n   451  Requested action aborted: local error in processing\n\n   452  Requested action not taken: insufficient system storage\n\n   455  Server unable to accommodate parameters\n\n   500  Syntax error, command unrecognized (This may include errors such\n      as command line too long)\n\n   501  Syntax error in parameters or arguments\n\n   502  Command not implemented (see Section 4.2.4)\n\n   503  Bad sequence of commands\n\n   504  Command parameter not implemented\n\n   550  Requested action not taken: mailbox unavailable (e.g., mailbox\n      not found, no access, or command rejected for policy reasons)\n\n\n\n\nKlensin                     Standards Track                    [Page 52]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   551  User not local; please try <forward-path> (See Section 3.4)\n\n   552  Requested mail action aborted: exceeded storage allocation\n\n   553  Requested action not taken: mailbox name not allowed (e.g.,\n      mailbox syntax incorrect)\n\n   554  Transaction failed (Or, in the case of a connection-opening\n      response, \"No SMTP service here\")\n\n   555  MAIL FROM/RCPT TO parameters not recognized or not implemented\n\n4.2.4.  Reply Code 502\n\n   Questions have been raised as to when reply code 502 (Command not\n   implemented) SHOULD be returned in preference to other codes. 502\n   SHOULD be used when the command is actually recognized by the SMTP\n   server, but not implemented.  If the command is not recognized, code\n   500 SHOULD be returned.  Extended SMTP systems MUST NOT list\n   capabilities in response to EHLO for which they will return 502 (or\n   500) replies.\n\n4.2.5.  Reply Codes after DATA and the Subsequent <CRLF>.<CRLF>\n\n   When an SMTP server returns a positive completion status (2yz code)\n   after the DATA command is completed with <CRLF>.<CRLF>, it accepts\n   responsibility for:\n\n   o  delivering the message (if the recipient mailbox exists), or\n\n   o  if attempts to deliver the message fail due to transient\n      conditions, retrying delivery some reasonable number of times at\n      intervals as specified in Section 4.5.4.\n\n   o  if attempts to deliver the message fail due to permanent\n      conditions, or if repeated attempts to deliver the message fail\n      due to transient conditions, returning appropriate notification to\n      the sender of the original message (using the address in the SMTP\n      MAIL command).\n\n   When an SMTP server returns a temporary error status (4yz) code after\n   the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make a\n   subsequent attempt to deliver that message.  The SMTP client retains\n   responsibility for the delivery of that message and may either return\n   it to the user or requeue it for a subsequent attempt (see\n   Section 4.5.4.1).\n\n\n\n\n\nKlensin                     Standards Track                    [Page 53]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   The user who originated the message SHOULD be able to interpret the\n   return of a transient failure status (by mail message or otherwise)\n   as a non-delivery indication, just as a permanent failure would be\n   interpreted.  If the client SMTP successfully handles these\n   conditions, the user will not receive such a reply.\n\n   When an SMTP server returns a permanent error status (5yz) code after\n   the DATA command is completed with <CRLF>.<CRLF>, it MUST NOT make\n   any subsequent attempt to deliver the message.  As with temporary\n   error status codes, the SMTP client retains responsibility for the\n   message, but SHOULD not again attempt delivery to the same server\n   without user review of the message and response and appropriate\n   intervention.\n\n4.3.  Sequencing of Commands and Replies\n\n4.3.1.  Sequencing Overview\n\n   The communication between the sender and receiver is an alternating\n   dialogue, controlled by the sender.  As such, the sender issues a\n   command and the receiver responds with a reply.  Unless other\n   arrangements are negotiated through service extensions, the sender\n   MUST wait for this response before sending further commands.  One\n   important reply is the connection greeting.  Normally, a receiver\n   will send a 220 \"Service ready\" reply when the connection is\n   completed.  The sender SHOULD wait for this greeting message before\n   sending any commands.\n\n   Note: all the greeting-type replies have the official name (the\n   fully-qualified primary domain name) of the server host as the first\n   word following the reply code.  Sometimes the host will have no\n   meaningful name.  See Section 4.1.3 for a discussion of alternatives\n   in these situations.\n\n   For example,\n\n      220 ISIF.USC.EDU Service ready\n\n   or\n\n      220 mail.example.com SuperSMTP v 6.1.2 Service ready\n\n   or\n\n      220 [10.0.0.1] Clueless host service ready\n\n   The table below lists alternative success and failure replies for\n   each command.  These SHOULD be strictly adhered to.  A receiver MAY\n\n\n\nKlensin                     Standards Track                    [Page 54]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   substitute text in the replies, but the meanings and actions implied\n   by the code numbers and by the specific command reply sequence MUST\n   be preserved.\n\n4.3.2.  Command-Reply Sequences\n\n   Each command is listed with its usual possible replies.  The prefixes\n   used before the possible replies are \"I\" for intermediate, \"S\" for\n   success, and \"E\" for error.  Since some servers may generate other\n   replies under special circumstances, and to allow for future\n   extension, SMTP clients SHOULD, when possible, interpret only the\n   first digit of the reply and MUST be prepared to deal with\n   unrecognized reply codes by interpreting the first digit only.\n   Unless extended using the mechanisms described in Section 2.2, SMTP\n   servers MUST NOT transmit reply codes to an SMTP client that are\n   other than three digits or that do not start in a digit between 2 and\n   5 inclusive.\n\n   These sequencing rules and, in principle, the codes themselves, can\n   be extended or modified by SMTP extensions offered by the server and\n   accepted (requested) by the client.  However, if the target is more\n   precise granularity in the codes, rather than codes for completely\n   new purposes, the system described in RFC 3463 [25] SHOULD be used in\n   preference to the invention of new codes.\n\n   In addition to the codes listed below, any SMTP command can return\n   any of the following codes if the corresponding unusual circumstances\n   are encountered:\n\n   500  For the \"command line too long\" case or if the command name was\n      not recognized.  Note that producing a \"command not recognized\"\n      error in response to the required subset of these commands is a\n      violation of this specification.  Similarly, producing a \"command\n      too long\" message for a command line shorter than 512 characters\n      would violate the provisions of Section 4.5.3.1.4.\n\n   501  Syntax error in command or arguments.  In order to provide for\n      future extensions, commands that are specified in this document as\n      not accepting arguments (DATA, RSET, QUIT) SHOULD return a 501\n      message if arguments are supplied in the absence of EHLO-\n      advertised extensions.\n\n   421  Service shutting down and closing transmission channel\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 55]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Specific sequences are:\n\n      CONNECTION ESTABLISHMENT\n\n         S: 220\n         E: 554\n\n      EHLO or HELO\n\n         S: 250\n         E: 504 (a conforming implementation could return this code only\n         in fairly obscure cases), 550, 502 (permitted only with an old-\n         style server that does not support EHLO)\n\n      MAIL\n\n         S: 250\n         E: 552, 451, 452, 550, 553, 503, 455, 555\n\n      RCPT\n\n         S: 250, 251 (but see Section 3.4 for discussion of 251 and 551)\n         E: 550, 551, 552, 553, 450, 451, 452, 503, 455, 555\n\n      DATA\n\n         I: 354 -> data -> S: 250\n\n                           E: 552, 554, 451, 452\n\n                           E: 450, 550 (rejections for policy reasons)\n\n         E: 503, 554\n\n      RSET\n\n         S: 250\n\n      VRFY\n\n         S: 250, 251, 252\n         E: 550, 551, 553, 502, 504\n\n      EXPN\n\n         S: 250, 252\n         E: 550, 500, 502, 504\n\n\n\n\nKlensin                     Standards Track                    [Page 56]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n      HELP\n\n         S: 211, 214\n         E: 502, 504\n\n      NOOP\n\n         S: 250\n\n      QUIT\n\n         S: 221\n\n4.4.  Trace Information\n\n   When an SMTP server receives a message for delivery or further\n   processing, it MUST insert trace (\"time stamp\" or \"Received\")\n   information at the beginning of the message content, as discussed in\n   Section 4.1.1.4.\n\n   This line MUST be structured as follows:\n\n   o  The FROM clause, which MUST be supplied in an SMTP environment,\n      SHOULD contain both (1) the name of the source host as presented\n      in the EHLO command and (2) an address literal containing the IP\n      address of the source, determined from the TCP connection.\n\n   o  The ID clause MAY contain an \"@\" as suggested in RFC 822, but this\n      is not required.\n\n   o  If the FOR clause appears, it MUST contain exactly one <path>\n      entry, even when multiple RCPT commands have been given.  Multiple\n      <path>s raise some security issues and have been deprecated, see\n      Section 7.2.\n\n   An Internet mail program MUST NOT change or delete a Received: line\n   that was previously added to the message header section.  SMTP\n   servers MUST prepend Received lines to messages; they MUST NOT change\n   the order of existing lines or insert Received lines in any other\n   location.\n\n   As the Internet grows, comparability of Received header fields is\n   important for detecting problems, especially slow relays.  SMTP\n   servers that create Received header fields SHOULD use explicit\n   offsets in the dates (e.g., -0800), rather than time zone names of\n   any type.  Local time (with an offset) SHOULD be used rather than UT\n   when feasible.  This formulation allows slightly more information\n   about local circumstances to be specified.  If UT is needed, the\n\n\n\nKlensin                     Standards Track                    [Page 57]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   receiver need merely do some simple arithmetic to convert the values.\n   Use of UT loses information about the time zone-location of the\n   server.  If it is desired to supply a time zone name, it SHOULD be\n   included in a comment.\n\n   When the delivery SMTP server makes the \"final delivery\" of a\n   message, it inserts a return-path line at the beginning of the mail\n   data.  This use of return-path is required; mail systems MUST support\n   it.  The return-path line preserves the information in the <reverse-\n   path> from the MAIL command.  Here, final delivery means the message\n   has left the SMTP environment.  Normally, this would mean it had been\n   delivered to the destination user or an associated mail drop, but in\n   some cases it may be further processed and transmitted by another\n   mail system.\n\n   It is possible for the mailbox in the return path to be different\n   from the actual sender's mailbox, for example, if error responses are\n   to be delivered to a special error handling mailbox rather than to\n   the message sender.  When mailing lists are involved, this\n   arrangement is common and useful as a means of directing errors to\n   the list maintainer rather than the message originator.\n\n   The text above implies that the final mail data will begin with a\n   return path line, followed by one or more time stamp lines.  These\n   lines will be followed by the rest of the mail data: first the\n   balance of the mail header section and then the body (RFC 5322 [4]).\n\n   It is sometimes difficult for an SMTP server to determine whether or\n   not it is making final delivery since forwarding or other operations\n   may occur after the message is accepted for delivery.  Consequently,\n   any further (forwarding, gateway, or relay) systems MAY remove the\n   return path and rebuild the MAIL command as needed to ensure that\n   exactly one such line appears in a delivered message.\n\n   A message-originating SMTP system SHOULD NOT send a message that\n   already contains a Return-path header field.  SMTP servers performing\n   a relay function MUST NOT inspect the message data, and especially\n   not to the extent needed to determine if Return-path header fields\n   are present.  SMTP servers making final delivery MAY remove Return-\n   path header fields before adding their own.\n\n   The primary purpose of the Return-path is to designate the address to\n   which messages indicating non-delivery or other mail system failures\n   are to be sent.  For this to be unambiguous, exactly one return path\n   SHOULD be present when the message is delivered.  Systems using RFC\n   822 syntax with non-SMTP transports SHOULD designate an unambiguous\n   address, associated with the transport envelope, to which error\n   reports (e.g., non-delivery messages) should be sent.\n\n\n\nKlensin                     Standards Track                    [Page 58]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Historical note: Text in RFC 822 that appears to contradict the use\n   of the Return-path header field (or the envelope reverse-path address\n   from the MAIL command) as the destination for error messages is not\n   applicable on the Internet.  The reverse-path address (as copied into\n   the Return-path) MUST be used as the target of any mail containing\n   delivery error messages.\n\n   In particular:\n   o  a gateway from SMTP -> elsewhere SHOULD insert a return-path\n      header field, unless it is known that the \"elsewhere\" transport\n      also uses Internet domain addresses and maintains the envelope\n      sender address separately.\n\n   o  a gateway from elsewhere -> SMTP SHOULD delete any return-path\n      header field present in the message, and either copy that\n      information to the SMTP envelope or combine it with information\n      present in the envelope of the other transport system to construct\n      the reverse-path argument to the MAIL command in the SMTP\n      envelope.\n\n   The server must give special treatment to cases in which the\n   processing following the end of mail data indication is only\n   partially successful.  This could happen if, after accepting several\n   recipients and the mail data, the SMTP server finds that the mail\n   data could be successfully delivered to some, but not all, of the\n   recipients.  In such cases, the response to the DATA command MUST be\n   an OK reply.  However, the SMTP server MUST compose and send an\n   \"undeliverable mail\" notification message to the originator of the\n   message.\n\n   A single notification listing all of the failed recipients or\n   separate notification messages MUST be sent for each failed\n   recipient.  For economy of processing by the sender, the former\n   SHOULD be used when possible.  Note that the key difference between\n   handling aliases (Section 3.9.1) and forwarding (this subsection) is\n   the change to the backward-pointing address in this case.  All\n   notification messages about undeliverable mail MUST be sent using the\n   MAIL command (even if they result from processing the obsolete SEND,\n   SOML, or SAML commands) and MUST use a null return path as discussed\n   in Section 3.6.\n\n   The time stamp line and the return path line are formally defined as\n   follows (the definitions for \"FWS\" and \"CFWS\" appear in RFC 5322\n   [4]):\n\n   Return-path-line  = \"Return-Path:\" FWS Reverse-path <CRLF>\n\n   Time-stamp-line  = \"Received:\" FWS Stamp <CRLF>\n\n\n\nKlensin                     Standards Track                    [Page 59]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Stamp          = From-domain By-domain Opt-info [CFWS] \";\"\n                  FWS date-time\n                  ; where \"date-time\" is as defined in RFC 5322 [4]\n                  ; but the \"obs-\" forms, especially two-digit\n                  ; years, are prohibited in SMTP and MUST NOT be used.\n\n   From-domain    = \"FROM\" FWS Extended-Domain\n\n   By-domain      = CFWS \"BY\" FWS Extended-Domain\n\n   Extended-Domain  = Domain /\n                    ( Domain FWS \"(\" TCP-info \")\" ) /\n                    ( address-literal FWS \"(\" TCP-info \")\" )\n\n   TCP-info       = address-literal / ( Domain FWS address-literal )\n                  ; Information derived by server from TCP connection\n                  ; not client EHLO.\n\n   Opt-info       = [Via] [With] [ID] [For]\n                  [Additional-Registered-Clauses]\n\n   Via            = CFWS \"VIA\" FWS Link\n\n   With           = CFWS \"WITH\" FWS Protocol\n\n   ID             = CFWS \"ID\" FWS ( Atom / msg-id )\n                  ; msg-id is defined in RFC 5322 [4]\n\n   For            = CFWS \"FOR\" FWS ( Path / Mailbox )\n\n   Additional-Registered-Clauses  = CFWS Atom FWS String\n                                  ; Additional standard clauses may be\n                                  added in this\n                                  ; location by future standards and\n                                  registration with\n                                  ; IANA.  SMTP servers SHOULD NOT use\n                                  unregistered\n                                  ; names.  See Section 8.\n\n   Link           = \"TCP\" / Addtl-Link\n\n   Addtl-Link     = Atom\n                  ; Additional standard names for links are\n                  ; registered with the Internet Assigned Numbers\n                  ; Authority (IANA).  \"Via\" is primarily of value\n                  ; with non-Internet transports.  SMTP servers\n                  ; SHOULD NOT use unregistered names.\n\n\n\n\nKlensin                     Standards Track                    [Page 60]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Protocol       = \"ESMTP\" / \"SMTP\" / Attdl-Protocol\n\n   Attdl-Protocol = Atom\n                  ; Additional standard names for protocols are\n                  ; registered with the Internet Assigned Numbers\n                  ; Authority (IANA) in the \"mail parameters\"\n                  ; registry [9].  SMTP servers SHOULD NOT\n                  ; use unregistered names.\n\n4.5.  Additional Implementation Issues\n\n4.5.1.  Minimum Implementation\n\n   In order to make SMTP workable, the following minimum implementation\n   MUST be provided by all receivers.  The following commands MUST be\n   supported to conform to this specification:\n\n      EHLO\n      HELO\n      MAIL\n      RCPT\n      DATA\n      RSET\n      NOOP\n      QUIT\n      VRFY\n\n   Any system that includes an SMTP server supporting mail relaying or\n   delivery MUST support the reserved mailbox \"postmaster\" as a case-\n   insensitive local name.  This postmaster address is not strictly\n   necessary if the server always returns 554 on connection opening (as\n   described in Section 3.1).  The requirement to accept mail for\n   postmaster implies that RCPT commands that specify a mailbox for\n   postmaster at any of the domains for which the SMTP server provides\n   mail service, as well as the special case of \"RCPT TO:<Postmaster>\"\n   (with no domain specification), MUST be supported.\n\n   SMTP systems are expected to make every reasonable effort to accept\n   mail directed to Postmaster from any other system on the Internet.\n   In extreme cases -- such as to contain a denial of service attack or\n   other breach of security -- an SMTP server may block mail directed to\n   Postmaster.  However, such arrangements SHOULD be narrowly tailored\n   so as to avoid blocking messages that are not part of such attacks.\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 61]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.5.2.  Transparency\n\n   Without some provision for data transparency, the character sequence\n   \"<CRLF>.<CRLF>\" ends the mail text and cannot be sent by the user.\n   In general, users are not aware of such \"forbidden\" sequences.  To\n   allow all user composed text to be transmitted transparently, the\n   following procedures are used:\n\n   o  Before sending a line of mail text, the SMTP client checks the\n      first character of the line.  If it is a period, one additional\n      period is inserted at the beginning of the line.\n\n   o  When a line of mail text is received by the SMTP server, it checks\n      the line.  If the line is composed of a single period, it is\n      treated as the end of mail indicator.  If the first character is a\n      period and there are other characters on the line, the first\n      character is deleted.\n\n   The mail data may contain any of the 128 ASCII characters.  All\n   characters are to be delivered to the recipient's mailbox, including\n   spaces, vertical and horizontal tabs, and other control characters.\n   If the transmission channel provides an 8-bit byte (octet) data\n   stream, the 7-bit ASCII codes are transmitted, right justified, in\n   the octets, with the high-order bits cleared to zero.  See\n   Section 3.6 for special treatment of these conditions in SMTP systems\n   serving a relay function.\n\n   In some systems, it may be necessary to transform the data as it is\n   received and stored.  This may be necessary for hosts that use a\n   different character set than ASCII as their local character set, that\n   store data in records rather than strings, or which use special\n   character sequences as delimiters inside mailboxes.  If such\n   transformations are necessary, they MUST be reversible, especially if\n   they are applied to mail being relayed.\n\n4.5.3.  Sizes and Timeouts\n\n4.5.3.1.  Size Limits and Minimums\n\n   There are several objects that have required minimum/maximum sizes.\n   Every implementation MUST be able to receive objects of at least\n   these sizes.  Objects larger than these sizes SHOULD be avoided when\n   possible.  However, some Internet mail constructs such as encoded\n   X.400 addresses (RFC 2156 [35]) will often require larger objects.\n   Clients MAY attempt to transmit these, but MUST be prepared for a\n   server to reject them if they cannot be handled by it.  To the\n   maximum extent possible, implementation techniques that impose no\n   limits on the length of these objects should be used.\n\n\n\nKlensin                     Standards Track                    [Page 62]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Extensions to SMTP may involve the use of characters that occupy more\n   than a single octet each.  This section therefore specifies lengths\n   in octets where absolute lengths, rather than character counts, are\n   intended.\n\n4.5.3.1.1.  Local-part\n\n   The maximum total length of a user name or other local-part is 64\n   octets.\n\n4.5.3.1.2.  Domain\n\n   The maximum total length of a domain name or number is 255 octets.\n\n4.5.3.1.3.  Path\n\n   The maximum total length of a reverse-path or forward-path is 256\n   octets (including the punctuation and element separators).\n\n4.5.3.1.4.  Command Line\n\n   The maximum total length of a command line including the command word\n   and the <CRLF> is 512 octets.  SMTP extensions may be used to\n   increase this limit.\n\n4.5.3.1.5.  Reply Line\n\n   The maximum total length of a reply line including the reply code and\n   the <CRLF> is 512 octets.  More information may be conveyed through\n   multiple-line replies.\n\n4.5.3.1.6.  Text Line\n\n   The maximum total length of a text line including the <CRLF> is 1000\n   octets (not counting the leading dot duplicated for transparency).\n   This number may be increased by the use of SMTP Service Extensions.\n\n4.5.3.1.7.  Message Content\n\n   The maximum total length of a message content (including any message\n   header section as well as the message body) MUST BE at least 64K\n   octets.  Since the introduction of Internet Standards for multimedia\n   mail (RFC 2045 [21]), message lengths on the Internet have grown\n   dramatically, and message size restrictions should be avoided if at\n   all possible.  SMTP server systems that must impose restrictions\n   SHOULD implement the \"SIZE\" service extension of RFC 1870 [10], and\n   SMTP client systems that will send large messages SHOULD utilize it\n   when possible.\n\n\n\nKlensin                     Standards Track                    [Page 63]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.5.3.1.8.  Recipients Buffer\n\n   The minimum total number of recipients that MUST be buffered is 100\n   recipients.  Rejection of messages (for excessive recipients) with\n   fewer than 100 RCPT commands is a violation of this specification.\n   The general principle that relaying SMTP server MUST NOT, and\n   delivery SMTP servers SHOULD NOT, perform validation tests on message\n   header fields suggests that messages SHOULD NOT be rejected based on\n   the total number of recipients shown in header fields.  A server that\n   imposes a limit on the number of recipients MUST behave in an orderly\n   fashion, such as rejecting additional addresses over its limit rather\n   than silently discarding addresses previously accepted.  A client\n   that needs to deliver a message containing over 100 RCPT commands\n   SHOULD be prepared to transmit in 100-recipient \"chunks\" if the\n   server declines to accept more than 100 recipients in a single\n   message.\n\n4.5.3.1.9.  Treatment When Limits Exceeded\n\n   Errors due to exceeding these limits may be reported by using the\n   reply codes.  Some examples of reply codes are:\n\n      500 Line too long.\n\n   or\n\n      501 Path too long\n\n   or\n\n      452 Too many recipients (see below)\n\n   or\n\n      552 Too much mail data.\n\n4.5.3.1.10.  Too Many Recipients Code\n\n   RFC 821 [1] incorrectly listed the error where an SMTP server\n   exhausts its implementation limit on the number of RCPT commands\n   (\"too many recipients\") as having reply code 552.  The correct reply\n   code for this condition is 452.  Clients SHOULD treat a 552 code in\n   this case as a temporary, rather than permanent, failure so the logic\n   below works.\n\n   When a conforming SMTP server encounters this condition, it has at\n   least 100 successful RCPT commands in its recipients buffer.  If the\n   server is able to accept the message, then at least these 100\n\n\n\nKlensin                     Standards Track                    [Page 64]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   addresses will be removed from the SMTP client's queue.  When the\n   client attempts retransmission of those addresses that received 452\n   responses, at least 100 of these will be able to fit in the SMTP\n   server's recipients buffer.  Each retransmission attempt that is able\n   to deliver anything will be able to dispose of at least 100 of these\n   recipients.\n\n   If an SMTP server has an implementation limit on the number of RCPT\n   commands and this limit is exhausted, it MUST use a response code of\n   452 (but the client SHOULD also be prepared for a 552, as noted\n   above).  If the server has a configured site-policy limitation on the\n   number of RCPT commands, it MAY instead use a 5yz response code.  In\n   particular, if the intent is to prohibit messages with more than a\n   site-specified number of recipients, rather than merely limit the\n   number of recipients in a given mail transaction, it would be\n   reasonable to return a 503 response to any DATA command received\n   subsequent to the 452 (or 552) code or to simply return the 503 after\n   DATA without returning any previous negative response.\n\n4.5.3.2.  Timeouts\n\n   An SMTP client MUST provide a timeout mechanism.  It MUST use per-\n   command timeouts rather than somehow trying to time the entire mail\n   transaction.  Timeouts SHOULD be easily reconfigurable, preferably\n   without recompiling the SMTP code.  To implement this, a timer is set\n   for each SMTP command and for each buffer of the data transfer.  The\n   latter means that the overall timeout is inherently proportional to\n   the size of the message.\n\n   Based on extensive experience with busy mail-relay hosts, the minimum\n   per-command timeout values SHOULD be as follows:\n\n4.5.3.2.1.  Initial 220 Message: 5 Minutes\n\n   An SMTP client process needs to distinguish between a failed TCP\n   connection and a delay in receiving the initial 220 greeting message.\n   Many SMTP servers accept a TCP connection but delay delivery of the\n   220 message until their system load permits more mail to be\n   processed.\n\n4.5.3.2.2.  MAIL Command: 5 Minutes\n\n4.5.3.2.3.  RCPT Command: 5 Minutes\n\n   A longer timeout is required if processing of mailing lists and\n   aliases is not deferred until after the message was accepted.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 65]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n4.5.3.2.4.  DATA Initiation: 2 Minutes\n\n   This is while awaiting the \"354 Start Input\" reply to a DATA command.\n\n4.5.3.2.5.  Data Block: 3 Minutes\n\n   This is while awaiting the completion of each TCP SEND call\n   transmitting a chunk of data.\n\n4.5.3.2.6.  DATA Termination: 10 Minutes.\n\n   This is while awaiting the \"250 OK\" reply.  When the receiver gets\n   the final period terminating the message data, it typically performs\n   processing to deliver the message to a user mailbox.  A spurious\n   timeout at this point would be very wasteful and would typically\n   result in delivery of multiple copies of the message, since it has\n   been successfully sent and the server has accepted responsibility for\n   delivery.  See Section 6.1 for additional discussion.\n\n4.5.3.2.7.  Server Timeout: 5 Minutes.\n\n   An SMTP server SHOULD have a timeout of at least 5 minutes while it\n   is awaiting the next command from the sender.\n\n4.5.4.  Retry Strategies\n\n   The common structure of a host SMTP implementation includes user\n   mailboxes, one or more areas for queuing messages in transit, and one\n   or more daemon processes for sending and receiving mail.  The exact\n   structure will vary depending on the needs of the users on the host\n   and the number and size of mailing lists supported by the host.  We\n   describe several optimizations that have proved helpful, particularly\n   for mailers supporting high traffic levels.\n\n   Any queuing strategy MUST include timeouts on all activities on a\n   per-command basis.  A queuing strategy MUST NOT send error messages\n   in response to error messages under any circumstances.\n\n4.5.4.1.  Sending Strategy\n\n   The general model for an SMTP client is one or more processes that\n   periodically attempt to transmit outgoing mail.  In a typical system,\n   the program that composes a message has some method for requesting\n   immediate attention for a new piece of outgoing mail, while mail that\n   cannot be transmitted immediately MUST be queued and periodically\n   retried by the sender.  A mail queue entry will include not only the\n   message itself but also the envelope information.\n\n\n\n\nKlensin                     Standards Track                    [Page 66]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   The sender MUST delay retrying a particular destination after one\n   attempt has failed.  In general, the retry interval SHOULD be at\n   least 30 minutes; however, more sophisticated and variable strategies\n   will be beneficial when the SMTP client can determine the reason for\n   non-delivery.\n\n   Retries continue until the message is transmitted or the sender gives\n   up; the give-up time generally needs to be at least 4-5 days.  It MAY\n   be appropriate to set a shorter maximum number of retries for non-\n   delivery notifications and equivalent error messages than for\n   standard messages.  The parameters to the retry algorithm MUST be\n   configurable.\n\n   A client SHOULD keep a list of hosts it cannot reach and\n   corresponding connection timeouts, rather than just retrying queued\n   mail items.\n\n   Experience suggests that failures are typically transient (the target\n   system or its connection has crashed), favoring a policy of two\n   connection attempts in the first hour the message is in the queue,\n   and then backing off to one every two or three hours.\n\n   The SMTP client can shorten the queuing delay in cooperation with the\n   SMTP server.  For example, if mail is received from a particular\n   address, it is likely that mail queued for that host can now be sent.\n   Application of this principle may, in many cases, eliminate the\n   requirement for an explicit \"send queues now\" function such as ETRN,\n   RFC 1985 [36].\n\n   The strategy may be further modified as a result of multiple\n   addresses per host (see below) to optimize delivery time versus\n   resource usage.\n\n   An SMTP client may have a large queue of messages for each\n   unavailable destination host.  If all of these messages were retried\n   in every retry cycle, there would be excessive Internet overhead and\n   the sending system would be blocked for a long period.  Note that an\n   SMTP client can generally determine that a delivery attempt has\n   failed only after a timeout of several minutes, and even a one-minute\n   timeout per connection will result in a very large delay if retries\n   are repeated for dozens, or even hundreds, of queued messages to the\n   same host.\n\n   At the same time, SMTP clients SHOULD use great care in caching\n   negative responses from servers.  In an extreme case, if EHLO is\n   issued multiple times during the same SMTP connection, different\n   answers may be returned by the server.  More significantly, 5yz\n   responses to the MAIL command MUST NOT be cached.\n\n\n\nKlensin                     Standards Track                    [Page 67]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   When a mail message is to be delivered to multiple recipients, and\n   the SMTP server to which a copy of the message is to be sent is the\n   same for multiple recipients, then only one copy of the message\n   SHOULD be transmitted.  That is, the SMTP client SHOULD use the\n   command sequence: MAIL, RCPT, RCPT, ..., RCPT, DATA instead of the\n   sequence: MAIL, RCPT, DATA, ..., MAIL, RCPT, DATA.  However, if there\n   are very many addresses, a limit on the number of RCPT commands per\n   MAIL command MAY be imposed.  This efficiency feature SHOULD be\n   implemented.\n\n   Similarly, to achieve timely delivery, the SMTP client MAY support\n   multiple concurrent outgoing mail transactions.  However, some limit\n   may be appropriate to protect the host from devoting all its\n   resources to mail.\n\n4.5.4.2.  Receiving Strategy\n\n   The SMTP server SHOULD attempt to keep a pending listen on the SMTP\n   port (specified by IANA as port 25) at all times.  This requires the\n   support of multiple incoming TCP connections for SMTP.  Some limit\n   MAY be imposed, but servers that cannot handle more than one SMTP\n   transaction at a time are not in conformance with the intent of this\n   specification.\n\n   As discussed above, when the SMTP server receives mail from a\n   particular host address, it could activate its own SMTP queuing\n   mechanisms to retry any mail pending for that host address.\n\n4.5.5.  Messages with a Null Reverse-Path\n\n   There are several types of notification messages that are required by\n   existing and proposed Standards to be sent with a null reverse-path,\n   namely non-delivery notifications as discussed in Section 3.7, other\n   kinds of Delivery Status Notifications (DSNs, RFC 3461 [32]), and\n   Message Disposition Notifications (MDNs, RFC 3798 [37]).  All of\n   these kinds of messages are notifications about a previous message,\n   and they are sent to the reverse-path of the previous mail message.\n   (If the delivery of such a notification message fails, that usually\n   indicates a problem with the mail system of the host to which the\n   notification message is addressed.  For this reason, at some hosts\n   the MTA is set up to forward such failed notification messages to\n   someone who is able to fix problems with the mail system, e.g., via\n   the postmaster alias.)\n\n   All other types of messages (i.e., any message which is not required\n   by a Standards-Track RFC to have a null reverse-path) SHOULD be sent\n   with a valid, non-null reverse-path.\n\n\n\n\nKlensin                     Standards Track                    [Page 68]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Implementers of automated email processors should be careful to make\n   sure that the various kinds of messages with a null reverse-path are\n   handled correctly.  In particular, such systems SHOULD NOT reply to\n   messages with a null reverse-path, and they SHOULD NOT add a non-null\n   reverse-path, or change a null reverse-path to a non-null one, to\n   such messages when forwarding.\n\n5.  Address Resolution and Mail Handling\n\n5.1.  Locating the Target Host\n\n   Once an SMTP client lexically identifies a domain to which mail will\n   be delivered for processing (as described in Sections 2.3.5 and 3.6),\n   a DNS lookup MUST be performed to resolve the domain name (RFC 1035\n   [2]).  The names are expected to be fully-qualified domain names\n   (FQDNs): mechanisms for inferring FQDNs from partial names or local\n   aliases are outside of this specification.  Due to a history of\n   problems, SMTP servers used for initial submission of messages SHOULD\n   NOT make such inferences (Message Submission Servers [18] have\n   somewhat more flexibility) and intermediate (relay) SMTP servers MUST\n   NOT make them.\n\n   The lookup first attempts to locate an MX record associated with the\n   name.  If a CNAME record is found, the resulting name is processed as\n   if it were the initial name.  If a non-existent domain error is\n   returned, this situation MUST be reported as an error.  If a\n   temporary error is returned, the message MUST be queued and retried\n   later (see Section 4.5.4.1).  If an empty list of MXs is returned,\n   the address is treated as if it was associated with an implicit MX\n   RR, with a preference of 0, pointing to that host.  If MX records are\n   present, but none of them are usable, or the implicit MX is unusable,\n   this situation MUST be reported as an error.\n\n   If one or more MX RRs are found for a given name, SMTP systems MUST\n   NOT utilize any address RRs associated with that name unless they are\n   located using the MX RRs; the \"implicit MX\" rule above applies only\n   if there are no MX records present.  If MX records are present, but\n   none of them are usable, this situation MUST be reported as an error.\n\n   When a domain name associated with an MX RR is looked up and the\n   associated data field obtained, the data field of that response MUST\n   contain a domain name.  That domain name, when queried, MUST return\n   at least one address record (e.g., A or AAAA RR) that gives the IP\n   address of the SMTP server to which the message should be directed.\n   Any other response, specifically including a value that will return a\n   CNAME record when queried, lies outside the scope of this Standard.\n   The prohibition on labels in the data that resolve to CNAMEs is\n   discussed in more detail in RFC 2181, Section 10.3 [38].\n\n\n\nKlensin                     Standards Track                    [Page 69]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   When the lookup succeeds, the mapping can result in a list of\n   alternative delivery addresses rather than a single address, because\n   of multiple MX records, multihoming, or both.  To provide reliable\n   mail transmission, the SMTP client MUST be able to try (and retry)\n   each of the relevant addresses in this list in order, until a\n   delivery attempt succeeds.  However, there MAY also be a configurable\n   limit on the number of alternate addresses that can be tried.  In any\n   case, the SMTP client SHOULD try at least two addresses.\n\n   Two types of information are used to rank the host addresses:\n   multiple MX records, and multihomed hosts.\n\n   MX records contain a preference indication that MUST be used in\n   sorting if more than one such record appears (see below).  Lower\n   numbers are more preferred than higher ones.  If there are multiple\n   destinations with the same preference and there is no clear reason to\n   favor one (e.g., by recognition of an easily reached address), then\n   the sender-SMTP MUST randomize them to spread the load across\n   multiple mail exchangers for a specific organization.\n\n   The destination host (perhaps taken from the preferred MX record) may\n   be multihomed, in which case the domain name resolver will return a\n   list of alternative IP addresses.  It is the responsibility of the\n   domain name resolver interface to have ordered this list by\n   decreasing preference if necessary, and the SMTP sender MUST try them\n   in the order presented.\n\n   Although the capability to try multiple alternative addresses is\n   required, specific installations may want to limit or disable the use\n   of alternative addresses.  The question of whether a sender should\n   attempt retries using the different addresses of a multihomed host\n   has been controversial.  The main argument for using the multiple\n   addresses is that it maximizes the probability of timely delivery,\n   and indeed sometimes the probability of any delivery; the counter-\n   argument is that it may result in unnecessary resource use.  Note\n   that resource use is also strongly determined by the sending strategy\n   discussed in Section 4.5.4.1.\n\n   If an SMTP server receives a message with a destination for which it\n   is a designated Mail eXchanger, it MAY relay the message (potentially\n   after having rewritten the MAIL FROM and/or RCPT TO addresses), make\n   final delivery of the message, or hand it off using some mechanism\n   outside the SMTP-provided transport environment.  Of course, neither\n   of the latter require that the list of MX records be examined\n   further.\n\n   If it determines that it should relay the message without rewriting\n   the address, it MUST sort the MX records to determine candidates for\n\n\n\nKlensin                     Standards Track                    [Page 70]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   delivery.  The records are first ordered by preference, with the\n   lowest-numbered records being most preferred.  The relay host MUST\n   then inspect the list for any of the names or addresses by which it\n   might be known in mail transactions.  If a matching record is found,\n   all records at that preference level and higher-numbered ones MUST be\n   discarded from consideration.  If there are no records left at that\n   point, it is an error condition, and the message MUST be returned as\n   undeliverable.  If records do remain, they SHOULD be tried, best\n   preference first, as described above.\n\n5.2.  IPv6 and MX Records\n\n   In the contemporary Internet, SMTP clients and servers may be hosted\n   on IPv4 systems, IPv6 systems, or dual-stack systems that are\n   compatible with either version of the Internet Protocol.  The host\n   domains to which MX records point may, consequently, contain \"A RR\"s\n   (IPv4), \"AAAA RR\"s (IPv6), or any combination of them.  While RFC\n   3974 [39] discusses some operational experience in mixed\n   environments, it was not comprehensive enough to justify\n   standardization, and some of its recommendations appear to be\n   inconsistent with this specification.  The appropriate actions to be\n   taken either will depend on local circumstances, such as performance\n   of the relevant networks and any conversions that might be necessary,\n   or will be obvious (e.g., an IPv6-only client need not attempt to\n   look up A RRs or attempt to reach IPv4-only servers).  Designers of\n   SMTP implementations that might run in IPv6 or dual-stack\n   environments should study the procedures above, especially the\n   comments about multihomed hosts, and, preferably, provide mechanisms\n   to facilitate operational tuning and mail interoperability between\n   IPv4 and IPv6 systems while considering local circumstances.\n\n6.  Problem Detection and Handling\n\n6.1.  Reliable Delivery and Replies by Email\n\n   When the receiver-SMTP accepts a piece of mail (by sending a \"250 OK\"\n   message in response to DATA), it is accepting responsibility for\n   delivering or relaying the message.  It must take this responsibility\n   seriously.  It MUST NOT lose the message for frivolous reasons, such\n   as because the host later crashes or because of a predictable\n   resource shortage.  Some reasons that are not considered frivolous\n   are discussed in the next subsection and in Section 7.8.\n\n   If there is a delivery failure after acceptance of a message, the\n   receiver-SMTP MUST formulate and mail a notification message.  This\n   notification MUST be sent using a null (\"<>\") reverse-path in the\n   envelope.  The recipient of this notification MUST be the address\n   from the envelope return path (or the Return-Path: line).  However,\n\n\n\nKlensin                     Standards Track                    [Page 71]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   if this address is null (\"<>\"), the receiver-SMTP MUST NOT send a\n   notification.  Obviously, nothing in this section can or should\n   prohibit local decisions (i.e., as part of the same system\n   environment as the receiver-SMTP) to log or otherwise transmit\n   information about null address events locally if that is desired.  If\n   the address is an explicit source route, it MUST be stripped down to\n   its final hop.\n\n   For example, suppose that an error notification must be sent for a\n   message that arrived with:\n\n      MAIL FROM:<@a,@b:user@d>\n\n   The notification message MUST be sent using:\n\n      RCPT TO:<user@d>\n\n   Some delivery failures after the message is accepted by SMTP will be\n   unavoidable.  For example, it may be impossible for the receiving\n   SMTP server to validate all the delivery addresses in RCPT command(s)\n   due to a \"soft\" domain system error, because the target is a mailing\n   list (see earlier discussion of RCPT), or because the server is\n   acting as a relay and has no immediate access to the delivering\n   system.\n\n   To avoid receiving duplicate messages as the result of timeouts, a\n   receiver-SMTP MUST seek to minimize the time required to respond to\n   the final <CRLF>.<CRLF> end of data indicator.  See RFC 1047 [40] for\n   a discussion of this problem.\n\n6.2.  Unwanted, Unsolicited, and \"Attack\" Messages\n\n   Utility and predictability of the Internet mail system requires that\n   messages that can be delivered should be delivered, regardless of any\n   syntax or other faults associated with those messages and regardless\n   of their content.  If they cannot be delivered, and cannot be\n   rejected by the SMTP server during the SMTP transaction, they should\n   be \"bounced\" (returned with non-delivery notification messages) as\n   described above.  In today's world, in which many SMTP server\n   operators have discovered that the quantity of undesirable bulk email\n   vastly exceeds the quantity of desired mail and in which accepting a\n   message may trigger additional undesirable traffic by providing\n   verification of the address, those principles may not be practical.\n\n   As discussed in Section 7.8 and Section 7.9 below, dropping mail\n   without notification of the sender is permitted in practice.\n   However, it is extremely dangerous and violates a long tradition and\n   community expectations that mail is either delivered or returned.  If\n\n\n\nKlensin                     Standards Track                    [Page 72]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   silent message-dropping is misused, it could easily undermine\n   confidence in the reliability of the Internet's mail systems.  So\n   silent dropping of messages should be considered only in those cases\n   where there is very high confidence that the messages are seriously\n   fraudulent or otherwise inappropriate.\n\n   To stretch the principle of delivery if possible even further, it may\n   be a rational policy to not deliver mail that has an invalid return\n   address, although the history of the network is that users are\n   typically better served by delivering any message that can be\n   delivered.  Reliably determining that a return address is invalid can\n   be a difficult and time-consuming process, especially if the putative\n   sending system is not directly accessible or does not fully and\n   accurately support VRFY and, even if a \"drop messages with invalid\n   return addresses\" policy is adopted, it SHOULD be applied only when\n   there is near-certainty that the return addresses are, in fact,\n   invalid.\n\n   Conversely, if a message is rejected because it is found to contain\n   hostile content (a decision that is outside the scope of an SMTP\n   server as defined in this document), rejection (\"bounce\") messages\n   SHOULD NOT be sent unless the receiving site is confident that those\n   messages will be usefully delivered.  The preference and default in\n   these cases is to avoid sending non-delivery messages when the\n   incoming message is determined to contain hostile content.\n\n6.3.  Loop Detection\n\n   Simple counting of the number of \"Received:\" header fields in a\n   message has proven to be an effective, although rarely optimal,\n   method of detecting loops in mail systems.  SMTP servers using this\n   technique SHOULD use a large rejection threshold, normally at least\n   100 Received entries.  Whatever mechanisms are used, servers MUST\n   contain provisions for detecting and stopping trivial loops.\n\n6.4.  Compensating for Irregularities\n\n   Unfortunately, variations, creative interpretations, and outright\n   violations of Internet mail protocols do occur; some would suggest\n   that they occur quite frequently.  The debate as to whether a well-\n   behaved SMTP receiver or relay should reject a malformed message,\n   attempt to pass it on unchanged, or attempt to repair it to increase\n   the odds of successful delivery (or subsequent reply) began almost\n   with the dawn of structured network mail and shows no signs of\n   abating.  Advocates of rejection claim that attempted repairs are\n   rarely completely adequate and that rejection of bad messages is the\n   only way to get the offending software repaired.  Advocates of\n   \"repair\" or \"deliver no matter what\" argue that users prefer that\n\n\n\nKlensin                     Standards Track                    [Page 73]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   mail go through it if at all possible and that there are significant\n   market pressures in that direction.  In practice, these market\n   pressures may be more important to particular vendors than strict\n   conformance to the standards, regardless of the preference of the\n   actual developers.\n\n   The problems associated with ill-formed messages were exacerbated by\n   the introduction of the split-UA mail reading protocols (Post Office\n   Protocol (POP) version 2 [15], Post Office Protocol (POP) version 3\n   [16], IMAP version 2 [41], and PCMAIL [42]).  These protocols\n   encouraged the use of SMTP as a posting (message submission)\n   protocol, and SMTP servers as relay systems for these client hosts\n   (which are often only intermittently connected to the Internet).\n   Historically, many of those client machines lacked some of the\n   mechanisms and information assumed by SMTP (and indeed, by the mail\n   format protocol, RFC 822 [28]).  Some could not keep adequate track\n   of time; others had no concept of time zones; still others could not\n   identify their own names or addresses; and, of course, none could\n   satisfy the assumptions that underlay RFC 822's conception of\n   authenticated addresses.\n\n   In response to these weak SMTP clients, many SMTP systems now\n   complete messages that are delivered to them in incomplete or\n   incorrect form.  This strategy is generally considered appropriate\n   when the server can identify or authenticate the client, and there\n   are prior agreements between them.  By contrast, there is at best\n   great concern about fixes applied by a relay or delivery SMTP server\n   that has little or no knowledge of the user or client machine.  Many\n   of these issues are addressed by using a separate protocol, such as\n   that defined in RFC 4409 [18], for message submission, rather than\n   using originating SMTP servers for that purpose.\n\n   The following changes to a message being processed MAY be applied\n   when necessary by an originating SMTP server, or one used as the\n   target of SMTP as an initial posting (message submission) protocol:\n\n   o  Addition of a message-id field when none appears\n\n   o  Addition of a date, time, or time zone when none appears\n\n   o  Correction of addresses to proper FQDN format\n\n   The less information the server has about the client, the less likely\n   these changes are to be correct and the more caution and conservatism\n   should be applied when considering whether or not to perform fixes\n   and how.  These changes MUST NOT be applied by an SMTP server that\n   provides an intermediate relay function.\n\n\n\n\nKlensin                     Standards Track                    [Page 74]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   In all cases, properly operating clients supplying correct\n   information are preferred to corrections by the SMTP server.  In all\n   cases, documentation SHOULD be provided in trace header fields and/or\n   header field comments for actions performed by the servers.\n\n7.  Security Considerations\n\n7.1.  Mail Security and Spoofing\n\n   SMTP mail is inherently insecure in that it is feasible for even\n   fairly casual users to negotiate directly with receiving and relaying\n   SMTP servers and create messages that will trick a naive recipient\n   into believing that they came from somewhere else.  Constructing such\n   a message so that the \"spoofed\" behavior cannot be detected by an\n   expert is somewhat more difficult, but not sufficiently so as to be a\n   deterrent to someone who is determined and knowledgeable.\n   Consequently, as knowledge of Internet mail increases, so does the\n   knowledge that SMTP mail inherently cannot be authenticated, or\n   integrity checks provided, at the transport level.  Real mail\n   security lies only in end-to-end methods involving the message\n   bodies, such as those that use digital signatures (see RFC 1847 [43]\n   and, e.g., Pretty Good Privacy (PGP) in RFC 4880 [44] or Secure/\n   Multipurpose Internet Mail Extensions (S/MIME) in RFC 3851 [45]).\n\n   Various protocol extensions and configuration options that provide\n   authentication at the transport level (e.g., from an SMTP client to\n   an SMTP server) improve somewhat on the traditional situation\n   described above.  However, in general, they only authenticate one\n   server to another rather than a chain of relays and servers, much\n   less authenticating users or user machines.  Consequently, unless\n   they are accompanied by careful handoffs of responsibility in a\n   carefully designed trust environment, they remain inherently weaker\n   than end-to-end mechanisms that use digitally signed messages rather\n   than depending on the integrity of the transport system.\n\n   Efforts to make it more difficult for users to set envelope return\n   path and header \"From\" fields to point to valid addresses other than\n   their own are largely misguided: they frustrate legitimate\n   applications in which mail is sent by one user on behalf of another,\n   in which error (or normal) replies should be directed to a special\n   address, or in which a single message is sent to multiple recipients\n   on different hosts.  (Systems that provide convenient ways for users\n   to alter these header fields on a per-message basis should attempt to\n   establish a primary and permanent mailbox address for the user so\n   that Sender header fields within the message data can be generated\n   sensibly.)\n\n\n\n\n\nKlensin                     Standards Track                    [Page 75]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   This specification does not further address the authentication issues\n   associated with SMTP other than to advocate that useful functionality\n   not be disabled in the hope of providing some small margin of\n   protection against a user who is trying to fake mail.\n\n7.2.  \"Blind\" Copies\n\n   Addresses that do not appear in the message header section may appear\n   in the RCPT commands to an SMTP server for a number of reasons.  The\n   two most common involve the use of a mailing address as a \"list\n   exploder\" (a single address that resolves into multiple addresses)\n   and the appearance of \"blind copies\".  Especially when more than one\n   RCPT command is present, and in order to avoid defeating some of the\n   purpose of these mechanisms, SMTP clients and servers SHOULD NOT copy\n   the full set of RCPT command arguments into the header section,\n   either as part of trace header fields or as informational or private-\n   extension header fields.  Since this rule is often violated in\n   practice, and cannot be enforced, sending SMTP systems that are aware\n   of \"bcc\" use MAY find it helpful to send each blind copy as a\n   separate message transaction containing only a single RCPT command.\n\n   There is no inherent relationship between either \"reverse\" (from\n   MAIL, SAML, etc., commands) or \"forward\" (RCPT) addresses in the SMTP\n   transaction (\"envelope\") and the addresses in the header section.\n   Receiving systems SHOULD NOT attempt to deduce such relationships and\n   use them to alter the header section of the message for delivery.\n   The popular \"Apparently-to\" header field is a violation of this\n   principle as well as a common source of unintended information\n   disclosure and SHOULD NOT be used.\n\n7.3.  VRFY, EXPN, and Security\n\n   As discussed in Section 3.5, individual sites may want to disable\n   either or both of VRFY or EXPN for security reasons (see below).  As\n   a corollary to the above, implementations that permit this MUST NOT\n   appear to have verified addresses that are not, in fact, verified.\n   If a site disables these commands for security reasons, the SMTP\n   server MUST return a 252 response, rather than a code that could be\n   confused with successful or unsuccessful verification.\n\n   Returning a 250 reply code with the address listed in the VRFY\n   command after having checked it only for syntax violates this rule.\n   Of course, an implementation that \"supports\" VRFY by always returning\n   550 whether or not the address is valid is equally not in\n   conformance.\n\n   On the public Internet, the contents of mailing lists have become\n   popular as an address information source for so-called \"spammers.\"\n\n\n\nKlensin                     Standards Track                    [Page 76]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   The use of EXPN to \"harvest\" addresses has increased as list\n   administrators have installed protections against inappropriate uses\n   of the lists themselves.  However, VRFY and EXPN are still useful for\n   authenticated users and within an administrative domain.  For\n   example, VRFY and EXPN are useful for performing internal audits of\n   how email gets routed to check and to make sure no one is\n   automatically forwarding sensitive mail outside the organization.\n   Sites implementing SMTP authentication may choose to make VRFY and\n   EXPN available only to authenticated requestors.  Implementations\n   SHOULD still provide support for EXPN, but sites SHOULD carefully\n   evaluate the tradeoffs.\n\n   Whether disabling VRFY provides any real marginal security depends on\n   a series of other conditions.  In many cases, RCPT commands can be\n   used to obtain the same information about address validity.  On the\n   other hand, especially in situations where determination of address\n   validity for RCPT commands is deferred until after the DATA command\n   is received, RCPT may return no information at all, while VRFY is\n   expected to make a serious attempt to determine validity before\n   generating a response code (see discussion above).\n\n7.4.  Mail Rerouting Based on the 251 and 551 Response Codes\n\n   Before a client uses the 251 or 551 reply codes from a RCPT command\n   to automatically update its future behavior (e.g., updating the\n   user's address book), it should be certain of the server's\n   authenticity.  If it does not, it may be subject to a man in the\n   middle attack.\n\n7.5.  Information Disclosure in Announcements\n\n   There has been an ongoing debate about the tradeoffs between the\n   debugging advantages of announcing server type and version (and,\n   sometimes, even server domain name) in the greeting response or in\n   response to the HELP command and the disadvantages of exposing\n   information that might be useful in a potential hostile attack.  The\n   utility of the debugging information is beyond doubt.  Those who\n   argue for making it available point out that it is far better to\n   actually secure an SMTP server rather than hope that trying to\n   conceal known vulnerabilities by hiding the server's precise identity\n   will provide more protection.  Sites are encouraged to evaluate the\n   tradeoff with that issue in mind; implementations SHOULD minimally\n   provide for making type and version information available in some way\n   to other network hosts.\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 77]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n7.6.  Information Disclosure in Trace Fields\n\n   In some circumstances, such as when mail originates from within a LAN\n   whose hosts are not directly on the public Internet, trace\n   (\"Received\") header fields produced in conformance with this\n   specification may disclose host names and similar information that\n   would not normally be available.  This ordinarily does not pose a\n   problem, but sites with special concerns about name disclosure should\n   be aware of it.  Also, the optional FOR clause should be supplied\n   with caution or not at all when multiple recipients are involved lest\n   it inadvertently disclose the identities of \"blind copy\" recipients\n   to others.\n\n7.7.  Information Disclosure in Message Forwarding\n\n   As discussed in Section 3.4, use of the 251 or 551 reply codes to\n   identify the replacement address associated with a mailbox may\n   inadvertently disclose sensitive information.  Sites that are\n   concerned about those issues should ensure that they select and\n   configure servers appropriately.\n\n7.8.  Resistance to Attacks\n\n   In recent years, there has been an increase of attacks on SMTP\n   servers, either in conjunction with attempts to discover addresses\n   for sending unsolicited messages or simply to make the servers\n   inaccessible to others (i.e., as an application-level denial of\n   service attack).  While the means of doing so are beyond the scope of\n   this Standard, rational operational behavior requires that servers be\n   permitted to detect such attacks and take action to defend\n   themselves.  For example, if a server determines that a large number\n   of RCPT TO commands are being sent, most or all with invalid\n   addresses, as part of such an attack, it would be reasonable for the\n   server to close the connection after generating an appropriate number\n   of 5yz (normally 550) replies.\n\n7.9.  Scope of Operation of SMTP Servers\n\n   It is a well-established principle that an SMTP server may refuse to\n   accept mail for any operational or technical reason that makes sense\n   to the site providing the server.  However, cooperation among sites\n   and installations makes the Internet possible.  If sites take\n   excessive advantage of the right to reject traffic, the ubiquity of\n   email availability (one of the strengths of the Internet) will be\n   threatened; considerable care should be taken and balance maintained\n   if a site decides to be selective about the traffic it will accept\n   and process.\n\n\n\n\nKlensin                     Standards Track                    [Page 78]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   In recent years, use of the relay function through arbitrary sites\n   has been used as part of hostile efforts to hide the actual origins\n   of mail.  Some sites have decided to limit the use of the relay\n   function to known or identifiable sources, and implementations SHOULD\n   provide the capability to perform this type of filtering.  When mail\n   is rejected for these or other policy reasons, a 550 code SHOULD be\n   used in response to EHLO (or HELO), MAIL, or RCPT as appropriate.\n\n8.  IANA Considerations\n\n   IANA maintains three registries in support of this specification, all\n   of which were created for RFC 2821 or earlier.  This document expands\n   the third one as specified below.  The registry references listed are\n   as of the time of publication; IANA does not guarantee the locations\n   associated with the URLs.  The registries are as follows:\n\n   o  The first, \"Simple Mail Transfer Protocol (SMTP) Service\n      Extensions\" [46], consists of SMTP service extensions with the\n      associated keywords, and, as needed, parameters and verbs.  As\n      specified in Section 2.2.2, no entry may be made in this registry\n      that starts in an \"X\".  Entries may be made only for service\n      extensions (and associated keywords, parameters, or verbs) that\n      are defined in Standards-Track or Experimental RFCs specifically\n      approved by the IESG for this purpose.\n\n   o  The second registry, \"Address Literal Tags\" [47], consists of\n      \"tags\" that identify forms of domain literals other than those for\n      IPv4 addresses (specified in RFC 821 and in this document).  The\n      initial entry in that registry is for IPv6 addresses (specified in\n      this document).  Additional literal types require standardization\n      before being used; none are anticipated at this time.\n\n   o  The third, \"Mail Transmission Types\" [46], established by RFC 821\n      and renewed by this specification, is a registry of link and\n      protocol identifiers to be used with the \"via\" and \"with\"\n      subclauses of the time stamp (\"Received:\" header field) described\n      in Section 4.4.  Link and protocol identifiers in addition to\n      those specified in this document may be registered only by\n      standardization or by way of an RFC-documented, IESG-approved,\n      Experimental protocol extension.  This name space is for\n      identification and not limited in size: the IESG is encouraged to\n      approve on the basis of clear documentation and a distinct method\n      rather than preferences about the properties of the method itself.\n\n      An additional subsection has been added to the \"VIA link types\"\n      and \"WITH protocol types\" subsections of this registry to contain\n      registrations of \"Additional-registered-clauses\" as described\n      above.  The registry will contain clause names, a description, a\n\n\n\nKlensin                     Standards Track                    [Page 79]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n      summary of the syntax of the associated String, and a reference.\n      As new clauses are defined, they may, in principle, specify\n      creation of their own registries if the Strings consist of\n      reserved terms or keywords rather than less restricted strings.\n      As with link and protocol identifiers, additional clauses may be\n      registered only by standardization or by way of an RFC-documented,\n      IESG-approved, Experimental protocol extension.  The additional\n      clause name space is for identification and is not limited in\n      size: the IESG is encouraged to approve on the basis of clear\n      documentation, actual use or strong signs that the clause will be\n      used, and a distinct requirement rather than preferences about the\n      properties of the clause itself.\n\n   In addition, if additional trace header fields (i.e., in addition to\n   Return-path and Received) are ever created, those trace fields MUST\n   be added to the IANA registry established by BCP 90 (RFC 3864) [11]\n   for use with RFC 5322 [4].\n\n9.  Acknowledgments\n\n   Many people contributed to the development of RFC 2821.  That\n   document should be consulted for those acknowledgments.  For the\n   present document, the editor and the community owe thanks to Dawn\n   Mann and Tony Hansen who assisted in the very painful process of\n   editing and converting the internal format of the document from one\n   system to another.\n\n   Neither this document nor RFC 2821 would have been possible without\n   the many contribution and insights of the late Jon Postel.  Those\n   contributions of course include the original specification of SMTP in\n   RFC 821.  A considerable quantity of text from RFC 821 still appears\n   in this document as do several of Jon's original examples that have\n   been updated only as needed to reflect other changes in the\n   specification.\n\n   Many people made comments or suggestions on the mailing list or in\n   notes to the author.  Important corrections or clarifications were\n   suggested by several people, including Matti Aarnio, Glenn Anderson,\n   Derek J. Balling, Alex van den Bogaerdt, Stephane Bortzmeyer, Vint\n   Cerf, Jutta Degener, Steve Dorner, Lisa Dusseault, Frank Ellerman,\n   Ned Freed, Randy Gellens, Sabahattin Gucukoglu, Philip Guenther, Arnt\n   Gulbrandsen, Eric Hall, Richard O. Hammer, Tony Hansen, Peter J.\n   Holzer, Kari Hurtta, Bryon Roche Kain, Valdis Kletnieks, Mathias\n   Koerber, John Leslie, Bruce Lilly, Jeff Macdonald, Mark E. Mallett,\n   Mark Martinec, S. Moonesamy, Lyndon Nerenberg, Chris Newman, Douglas\n   Otis, Pete Resnick, Robert A. Rosenberg, Vince Sabio, Hector Santos,\n   David F. Skoll, Paul Smith, and Brett Watson.\n\n\n\n\nKlensin                     Standards Track                    [Page 80]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   The efforts of the Area Directors -- Lisa Dusseault, Ted Hardie, and\n   Chris Newman -- to get this effort restarted and keep it moving, and\n   of an ad hoc committee with the same purpose, are gratefully\n   acknowledged.  The members of that committee were (in alphabetical\n   order) Dave Crocker, Cyrus Daboo, Tony Finch, Ned Freed, Randall\n   Gellens, Tony Hansen, the author, and Alexey Melnikov.  Tony Hansen\n   also acted as ad hoc chair on the mailing list reviewing this\n   document; without his efforts, sense of balance and fairness, and\n   patience, it clearly would not have been possible.\n\n10.  References\n\n10.1.  Normative References\n\n   [1]   Postel, J., \"Simple Mail Transfer Protocol\", STD 10, RFC 821,\n         August 1982.\n\n   [2]   Mockapetris, P., \"Domain names - implementation and\n         specification\", STD 13, RFC 1035, November 1987.\n\n   [3]   Braden, R., \"Requirements for Internet Hosts - Application and\n         Support\", STD 3, RFC 1123, October 1989.\n\n   [4]   Resnick, P., \"Internet Message Format\", RFC 5322, October 2008.\n\n   [5]   Bradner, S., \"Key words for use in RFCs to Indicate Requirement\n         Levels\", BCP 14, RFC 2119, March 1997.\n\n   [6]   American National Standards Institute (formerly United States\n         of America Standards Institute), \"USA Code for Information\n         Interchange\", ANSI X3.4-1968, 1968.\n\n         ANSI X3.4-1968 has been replaced by newer versions with slight\n         modifications, but the 1968 version remains definitive for the\n         Internet.\n\n   [7]   Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n         Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [8]   Hinden, R. and S. Deering, \"IP Version 6 Addressing\n         Architecture\", RFC 4291, February 2006.\n\n   [9]   Newman, C., \"ESMTP and LMTP Transmission Types Registration\",\n         RFC 3848, July 2004.\n\n   [10]  Klensin, J., Freed, N., and K. Moore, \"SMTP Service Extension\n         for Message Size Declaration\", STD 10, RFC 1870, November 1995.\n\n\n\n\nKlensin                     Standards Track                    [Page 81]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   [11]  Klyne, G., Nottingham, M., and J. Mogul, \"Registration\n         Procedures for Message Header Fields\", BCP 90, RFC 3864,\n         September 2004.\n\n10.2.  Informative References\n\n   [12]  Partridge, C., \"Mail routing and the domain system\", RFC 974,\n         January 1986.\n\n   [13]  Klensin, J., Freed, N., Rose, M., Stefferud, E., and D.\n         Crocker, \"SMTP Service Extensions\", STD 10, RFC 1869,\n         November 1995.\n\n   [14]  Klensin, J., \"Simple Mail Transfer Protocol\", RFC 2821,\n         April 2001.\n\n   [15]  Butler, M., Postel, J., Chase, D., Goldberger, J., and J.\n         Reynolds, \"Post Office Protocol: Version 2\", RFC 937,\n         February 1985.\n\n   [16]  Myers, J. and M. Rose, \"Post Office Protocol - Version 3\",\n         STD 53, RFC 1939, May 1996.\n\n   [17]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n         4rev1\", RFC 3501, March 2003.\n\n   [18]  Gellens, R. and J. Klensin, \"Message Submission for Mail\",\n         RFC 4409, April 2006.\n\n   [19]  Freed, N., \"SMTP Service Extension for Command Pipelining\",\n         STD 60, RFC 2920, September 2000.\n\n   [20]  Vaudreuil, G., \"SMTP Service Extensions for Transmission of\n         Large and Binary MIME Messages\", RFC 3030, December 2000.\n\n   [21]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n         Extensions (MIME) Part One: Format of Internet Message Bodies\",\n         RFC 2045, November 1996.\n\n   [22]  Klensin, J., Freed, N., Rose, M., Stefferud, E., and D.\n         Crocker, \"SMTP Service Extension for 8bit-MIMEtransport\",\n         RFC 1652, July 1994.\n\n   [23]  Moore, K., \"MIME (Multipurpose Internet Mail Extensions) Part\n         Three: Message Header Extensions for Non-ASCII Text\", RFC 2047,\n         November 1996.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 82]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   [24]  Freed, N. and K. Moore, \"MIME Parameter Value and Encoded Word\n         Extensions: Character Sets, Languages, and Continuations\",\n         RFC 2231, November 1997.\n\n   [25]  Vaudreuil, G., \"Enhanced Mail System Status Codes\", RFC 3463,\n         January 2003.\n\n   [26]  Hansen, T. and J. Klensin, \"A Registry for SMTP Enhanced Mail\n         System Status Codes\", BCP 138, RFC 5248, June 2008.\n\n   [27]  Freed, N., \"Behavior of and Requirements for Internet\n         Firewalls\", RFC 2979, October 2000.\n\n   [28]  Crocker, D., \"Standard for the format of ARPA Internet text\n         messages\", STD 11, RFC 822, August 1982.\n\n   [29]  Wong, M. and W. Schlitt, \"Sender Policy Framework (SPF) for\n         Authorizing Use of Domains in E-Mail, Version 1\", RFC 4408,\n         April 2006.\n\n   [30]  Fenton, J., \"Analysis of Threats Motivating DomainKeys\n         Identified Mail (DKIM)\", RFC 4686, September 2006.\n\n   [31]  Allman, E., Callas, J., Delany, M., Libbey, M., Fenton, J., and\n         M. Thomas, \"DomainKeys Identified Mail (DKIM) Signatures\",\n         RFC 4871, May 2007.\n\n   [32]  Moore, K., \"Simple Mail Transfer Protocol (SMTP) Service\n         Extension for Delivery Status Notifications (DSNs)\", RFC 3461,\n         January 2003.\n\n   [33]  Moore, K. and G. Vaudreuil, \"An Extensible Message Format for\n         Delivery Status Notifications\", RFC 3464, January 2003.\n\n   [34]  Postel, J. and J. Reynolds, \"File Transfer Protocol\", STD 9,\n         RFC 959, October 1985.\n\n   [35]  Kille, S., \"MIXER (Mime Internet X.400 Enhanced Relay): Mapping\n         between X.400 and RFC 822/MIME\", RFC 2156, January 1998.\n\n   [36]  De Winter, J., \"SMTP Service Extension for Remote Message Queue\n         Starting\", RFC 1985, August 1996.\n\n   [37]  Hansen, T. and G. Vaudreuil, \"Message Disposition\n         Notification\", RFC 3798, May 2004.\n\n   [38]  Elz, R. and R. Bush, \"Clarifications to the DNS Specification\",\n         RFC 2181, July 1997.\n\n\n\nKlensin                     Standards Track                    [Page 83]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   [39]  Nakamura, M. and J. Hagino, \"SMTP Operational Experience in\n         Mixed IPv4/v6 Environments\", RFC 3974, January 2005.\n\n   [40]  Partridge, C., \"Duplicate messages and SMTP\", RFC 1047,\n         February 1988.\n\n   [41]  Crispin, M., \"Interactive Mail Access Protocol: Version 2\",\n         RFC 1176, August 1990.\n\n   [42]  Lambert, M., \"PCMAIL: A distributed mail system for personal\n         computers\", RFC 1056, June 1988.\n\n   [43]  Galvin, J., Murphy, S., Crocker, S., and N. Freed, \"Security\n         Multiparts for MIME: Multipart/Signed and Multipart/Encrypted\",\n         RFC 1847, October 1995.\n\n   [44]  Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R.\n         Thayer, \"OpenPGP Message Format\", RFC 4880, November 2007.\n\n   [45]  Ramsdell, B., \"Secure/Multipurpose Internet Mail Extensions\n         (S/MIME) Version 3.1 Message Specification\", RFC 3851,\n         July 2004.\n\n   [46]  Internet Assigned Number Authority (IANA), \"IANA Mail\n         Parameters\", 2007,\n         <http://www.iana.org/assignments/mail-parameters>.\n\n   [47]  Internet Assigned Number Authority (IANA), \"Address Literal\n         Tags\", 2007,\n         <http://www.iana.org/assignments/address-literal-tags>.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 84]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nAppendix A.  TCP Transport Service\n\n   The TCP connection supports the transmission of 8-bit bytes.  The\n   SMTP data is 7-bit ASCII characters.  Each character is transmitted\n   as an 8-bit byte with the high-order bit cleared to zero.  Service\n   extensions may modify this rule to permit transmission of full 8-bit\n   data bytes as part of the message body, or, if specifically designed\n   to do so, in SMTP commands or responses.\n\nAppendix B.  Generating SMTP Commands from RFC 822 Header Fields\n\n   Some systems use an RFC 822 header section (only) in a mail\n   submission protocol, or otherwise generate SMTP commands from RFC 822\n   header fields when such a message is handed to an MTA from a UA.\n   While the MTA-UA protocol is a private matter, not covered by any\n   Internet Standard, there are problems with this approach.  For\n   example, there have been repeated problems with proper handling of\n   \"bcc\" copies and redistribution lists when information that\n   conceptually belongs to the mail envelope is not separated early in\n   processing from header field information (and kept separate).\n\n   It is recommended that the UA provide its initial (\"submission\n   client\") MTA with an envelope separate from the message itself.\n   However, if the envelope is not supplied, SMTP commands SHOULD be\n   generated as follows:\n\n   1.  Each recipient address from a TO, CC, or BCC header field SHOULD\n       be copied to a RCPT command (generating multiple message copies\n       if that is required for queuing or delivery).  This includes any\n       addresses listed in a RFC 822 \"group\".  Any BCC header fields\n       SHOULD then be removed from the header section.  Once this\n       process is completed, the remaining header fields SHOULD be\n       checked to verify that at least one TO, CC, or BCC header field\n       remains.  If none do, then a BCC header field with no additional\n       information SHOULD be inserted as specified in [4].\n\n   2.  The return address in the MAIL command SHOULD, if possible, be\n       derived from the system's identity for the submitting (local)\n       user, and the \"From:\" header field otherwise.  If there is a\n       system identity available, it SHOULD also be copied to the Sender\n       header field if it is different from the address in the From\n       header field.  (Any Sender header field that was already there\n       SHOULD be removed.)  Systems may provide a way for submitters to\n       override the envelope return address, but may want to restrict\n       its use to privileged users.  This will not prevent mail forgery,\n       but may lessen its incidence; see Section 7.1.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 85]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   When an MTA is being used in this way, it bears responsibility for\n   ensuring that the message being transmitted is valid.  The mechanisms\n   for checking that validity, and for handling (or returning) messages\n   that are not valid at the time of arrival, are part of the MUA-MTA\n   interface and not covered by this specification.\n\n   A submission protocol based on Standard RFC 822 information alone\n   MUST NOT be used to gateway a message from a foreign (non-SMTP) mail\n   system into an SMTP environment.  Additional information to construct\n   an envelope must come from some source in the other environment,\n   whether supplemental header fields or the foreign system's envelope.\n\n   Attempts to gateway messages using only their header \"To\" and \"Cc\"\n   fields have repeatedly caused mail loops and other behavior adverse\n   to the proper functioning of the Internet mail environment.  These\n   problems have been especially common when the message originates from\n   an Internet mailing list and is distributed into the foreign\n   environment using envelope information.  When these messages are then\n   processed by a header-section-only remailer, loops back to the\n   Internet environment (and the mailing list) are almost inevitable.\n\nAppendix C.  Source Routes\n\n   Historically, the <reverse-path> was a reverse source routing list of\n   hosts and a source mailbox.  The first host in the <reverse-path> was\n   historically the host sending the MAIL command; today, source routes\n   SHOULD NOT appear in the reverse-path.  Similarly, the <forward-path>\n   may be a source routing lists of hosts and a destination mailbox.\n   However, in general, the <forward-path> SHOULD contain only a mailbox\n   and domain name, relying on the domain name system to supply routing\n   information if required.  The use of source routes is deprecated (see\n   Appendix F.2); while servers MUST be prepared to receive and handle\n   them as discussed in Section 3.3 and Appendix F.2, clients SHOULD NOT\n   transmit them and this section is included in the current\n   specification only to provide context.  It has been modified somewhat\n   from the material in RFC 821 to prevent server actions that might\n   confuse clients or subsequent servers that do not expect a full\n   source route implementation.\n\n   For relay purposes, the forward-path may be a source route of the\n   form \"@ONE,@TWO:JOE@THREE\", where ONE, TWO, and THREE MUST be fully-\n   qualified domain names.  This form is used to emphasize the\n   distinction between an address and a route.  The mailbox (here, JOE@\n   THREE) is an absolute address, and the route is information about how\n   to get there.  The two concepts should not be confused.\n\n   If source routes are used, RFC 821 and the text below should be\n   consulted for the mechanisms for constructing and updating the\n\n\n\nKlensin                     Standards Track                    [Page 86]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   forward-path.  A server that is reached by means of a source route\n   (e.g., its domain name appears first in the list in the forward-path)\n   MUST remove its domain name from any forward-paths in which that\n   domain name appears before forwarding the message and MAY remove all\n   other source routing information.  The reverse-path SHOULD NOT be\n   updated by servers conforming to this specification.\n\n   Notice that the forward-path and reverse-path appear in the SMTP\n   commands and replies, but not necessarily in the message.  That is,\n   there is no need for these paths and especially this syntax to appear\n   in the \"To:\" , \"From:\", \"CC:\", etc. fields of the message header\n   section.  Conversely, SMTP servers MUST NOT derive final message\n   routing information from message header fields.\n\n   When the list of hosts is present despite the recommendations above,\n   it is a \"reverse\" source route and indicates that the mail was\n   relayed through each host on the list (the first host in the list was\n   the most recent relay).  This list is used as a source route to\n   return non-delivery notices to the sender.  If, contrary to the\n   recommendations here, a relay host adds itself to the beginning of\n   the list, it MUST use its name as known in the transport environment\n   to which it is relaying the mail rather than that of the transport\n   environment from which the mail came (if they are different).  Note\n   that a situation could easily arise in which some relay hosts add\n   their names to the reverse source route and others do not, generating\n   discontinuities in the routing list.  This is another reason why\n   servers needing to return a message SHOULD ignore the source route\n   entirely and simply use the domain as specified in the Mailbox.\n\nAppendix D.  Scenarios\n\n   This section presents complete scenarios of several types of SMTP\n   sessions.  In the examples, \"C:\" indicates what is said by the SMTP\n   client, and \"S:\" indicates what is said by the SMTP server.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 87]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nD.1.  A Typical SMTP Transaction Scenario\n\n   This SMTP example shows mail sent by Smith at host bar.com, and to\n   Jones, Green, and Brown at host foo.com.  Here we assume that host\n   bar.com contacts host foo.com directly.  The mail is accepted for\n   Jones and Brown.  Green does not have a mailbox at host foo.com.\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250 HELP\n      C: MAIL FROM:<Smith@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Jones@foo.com>\n      S: 250 OK\n      C: RCPT TO:<Green@foo.com>\n      S: 550 No such user here\n      C: RCPT TO:<Brown@foo.com>\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Blah blah blah...\n      C: ...etc. etc. etc.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 88]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nD.2.  Aborted SMTP Transaction Scenario\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250 HELP\n      C: MAIL FROM:<Smith@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Jones@foo.com>\n      S: 250 OK\n      C: RCPT TO:<Green@foo.com>\n      S: 550 No such user here\n      C: RSET\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 89]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nD.3.  Relayed Mail Scenario\n\n   Step 1 -- Source Host to Relay Host\n\n   The source host performs a DNS lookup on XYZ.COM (the destination\n   address) and finds DNS MX records specifying xyz.com as the best\n   preference and foo.com as a lower preference.  It attempts to open a\n   connection to xyz.com and fails.  It then opens a connection to\n   foo.com, with the following dialogue:\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250 HELP\n      C: MAIL FROM:<JQP@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Jones@XYZ.COM>\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Date: Thu, 21 May 1998 05:33:29 -0700\n      C: From: John Q. Public <JQP@bar.com>\n      C: Subject: The Next Meeting of the Board\n      C: To: Jones@xyz.com\n      C:\n      C: Bill:\n      C: The next meeting of the board of directors will be\n      C: on Tuesday.\n      C: John.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 90]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\n   Step 2 -- Relay Host to Destination Host\n\n   foo.com, having received the message, now does a DNS lookup on\n   xyz.com.  It finds the same set of MX records, but cannot use the one\n   that points to itself (or to any other host as a worse preference).\n   It tries to open a connection to xyz.com itself and succeeds.  Then\n   we have:\n\n           S: 220 xyz.com Simple Mail Transfer Service Ready\n           C: EHLO foo.com\n           S: 250 xyz.com is on the air\n           C: MAIL FROM:<JQP@bar.com>\n           S: 250 OK\n           C: RCPT TO:<Jones@XYZ.COM>\n           S: 250 OK\n           C: DATA\n           S: 354 Start mail input; end with <CRLF>.<CRLF>\n           C: Received: from bar.com by foo.com ; Thu, 21 May 1998\n           C:     05:33:29 -0700\n           C: Date: Thu, 21 May 1998 05:33:22 -0700\n           C: From: John Q. Public <JQP@bar.com>\n           C: Subject:  The Next Meeting of the Board\n           C: To: Jones@xyz.com\n           C:\n           C: Bill:\n           C: The next meeting of the board of directors will be\n           C: on Tuesday.\n           C:                         John.\n           C: .\n           S: 250 OK\n           C: QUIT\n           S: 221 foo.com Service closing transmission channel\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 91]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nD.4.  Verifying and Sending Scenario\n\n      S: 220 foo.com Simple Mail Transfer Service Ready\n      C: EHLO bar.com\n      S: 250-foo.com greets bar.com\n      S: 250-8BITMIME\n      S: 250-SIZE\n      S: 250-DSN\n      S: 250-VRFY\n      S: 250 HELP\n      C: VRFY Crispin\n      S: 250 Mark Crispin <Admin.MRC@foo.com>\n      C: MAIL FROM:<EAK@bar.com>\n      S: 250 OK\n      C: RCPT TO:<Admin.MRC@foo.com>\n      S: 250 OK\n      C: DATA\n      S: 354 Start mail input; end with <CRLF>.<CRLF>\n      C: Blah blah blah...\n      C: ...etc. etc. etc.\n      C: .\n      S: 250 OK\n      C: QUIT\n      S: 221 foo.com Service closing transmission channel\n\nAppendix E.  Other Gateway Issues\n\n   In general, gateways between the Internet and other mail systems\n   SHOULD attempt to preserve any layering semantics across the\n   boundaries between the two mail systems involved.  Gateway-\n   translation approaches that attempt to take shortcuts by mapping\n   (such as mapping envelope information from one system to the message\n   header section or body of another) have generally proven to be\n   inadequate in important ways.  Systems translating between\n   environments that do not support both envelopes and a header section\n   and Internet mail must be written with the understanding that some\n   information loss is almost inevitable.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 92]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nAppendix F.  Deprecated Features of RFC 821\n\n   A few features of RFC 821 have proven to be problematic and SHOULD\n   NOT be used in Internet mail.\n\nF.1.  TURN\n\n   This command, described in RFC 821, raises important security issues\n   since, in the absence of strong authentication of the host requesting\n   that the client and server switch roles, it can easily be used to\n   divert mail from its correct destination.  Its use is deprecated;\n   SMTP systems SHOULD NOT use it unless the server can authenticate the\n   client.\n\nF.2.  Source Routing\n\n   RFC 821 utilized the concept of explicit source routing to get mail\n   from one host to another via a series of relays.  The requirement to\n   utilize source routes in regular mail traffic was eliminated by the\n   introduction of the domain name system \"MX\" record and the last\n   significant justification for them was eliminated by the\n   introduction, in RFC 1123, of a clear requirement that addresses\n   following an \"@\" must all be fully-qualified domain names.\n   Consequently, the only remaining justifications for the use of source\n   routes are support for very old SMTP clients or MUAs and in mail\n   system debugging.  They can, however, still be useful in the latter\n   circumstance and for routing mail around serious, but temporary,\n   problems such as problems with the relevant DNS records.\n\n   SMTP servers MUST continue to accept source route syntax as specified\n   in the main body of this document and in RFC 1123.  They MAY, if\n   necessary, ignore the routes and utilize only the target domain in\n   the address.  If they do utilize the source route, the message MUST\n   be sent to the first domain shown in the address.  In particular, a\n   server MUST NOT guess at shortcuts within the source route.\n\n   Clients SHOULD NOT utilize explicit source routing except under\n   unusual circumstances, such as debugging or potentially relaying\n   around firewall or mail system configuration errors.\n\nF.3.  HELO\n\n   As discussed in Sections 3.1 and 4.1.1, EHLO SHOULD be used rather\n   than HELO when the server will accept the former.  Servers MUST\n   continue to accept and process HELO in order to support older\n   clients.\n\n\n\n\n\nKlensin                     Standards Track                    [Page 93]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nF.4.  #-literals\n\n   RFC 821 provided for specifying an Internet address as a decimal\n   integer host number prefixed by a pound sign, \"#\".  In practice, that\n   form has been obsolete since the introduction of TCP/IP.  It is\n   deprecated and MUST NOT be used.\n\nF.5.  Dates and Years\n\n   When dates are inserted into messages by SMTP clients or servers\n   (e.g., in trace header fields), four-digit years MUST BE used.  Two-\n   digit years are deprecated; three-digit years were never permitted in\n   the Internet mail system.\n\nF.6.  Sending versus Mailing\n\n   In addition to specifying a mechanism for delivering messages to\n   user's mailboxes, RFC 821 provided additional, optional, commands to\n   deliver messages directly to the user's terminal screen.  These\n   commands (SEND, SAML, SOML) were rarely implemented, and changes in\n   workstation technology and the introduction of other protocols may\n   have rendered them obsolete even where they are implemented.\n\n   Clients SHOULD NOT provide SEND, SAML, or SOML as services.  Servers\n   MAY implement them.  If they are implemented by servers, the\n   implementation model specified in RFC 821 MUST be used and the\n   command names MUST be published in the response to the EHLO command.\n\nAuthor's Address\n\n   John C. Klensin\n   1770 Massachusetts Ave, Suite 322\n   Cambridge, MA  02140\n   USA\n\n   EMail: john+smtp@jck.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 94]\n\f\nRFC 5321                          SMTP                      October 2008\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2008).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nKlensin                     Standards Track                    [Page 95]\n\f\n"
  },
  {
    "path": "rfc/rfc5464.txt",
    "content": "\n\n\nNetwork Working Group                                           C. Daboo\nRequest for Comments: 5464                                   Apple, Inc.\nCategory: Standards Track                                  February 2009\n\n\n                      The IMAP METADATA Extension\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nAbstract\n\n   The METADATA extension to the Internet Message Access Protocol\n   permits clients and servers to maintain \"annotations\" or \"metadata\"\n   on IMAP servers.  It is possible to have annotations on a per-mailbox\n   basis or on the server as a whole.  For example, this would allow\n   comments about the purpose of a particular mailbox to be \"attached\"\n   to that mailbox, or a \"message of the day\" containing server status\n   information to be made available to anyone logging in to the server.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo                        Standards Track                    [Page 1]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\nTable of Contents\n\n   1.  Introduction and Overview  . . . . . . . . . . . . . . . . . .  3\n   2.  Conventions Used in This Document  . . . . . . . . . . . . . .  3\n   3.  Data Model . . . . . . . . . . . . . . . . . . . . . . . . . .  4\n     3.1.  Overview . . . . . . . . . . . . . . . . . . . . . . . . .  4\n     3.2.  Namespace of Entries . . . . . . . . . . . . . . . . . . .  4\n       3.2.1.  Entry Names  . . . . . . . . . . . . . . . . . . . . .  5\n     3.3.  Private versus Shared and Access Control . . . . . . . . .  6\n   4.  IMAP Protocol Changes  . . . . . . . . . . . . . . . . . . . .  7\n     4.1.  General Considerations . . . . . . . . . . . . . . . . . .  7\n     4.2.  GETMETADATA Command  . . . . . . . . . . . . . . . . . . .  8\n       4.2.1.  MAXSIZE GETMETADATA Command Option . . . . . . . . . .  9\n       4.2.2.  DEPTH GETMETADATA Command Option . . . . . . . . . . . 10\n     4.3.  SETMETADATA Command  . . . . . . . . . . . . . . . . . . . 10\n     4.4.  METADATA Response  . . . . . . . . . . . . . . . . . . . . 12\n       4.4.1.  METADATA Response with Values  . . . . . . . . . . . . 13\n       4.4.2.  Unsolicited METADATA Response without Values . . . . . 13\n   5.  Formal Syntax  . . . . . . . . . . . . . . . . . . . . . . . . 14\n   6.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 16\n     6.1.  Entry and Attribute Registration Template  . . . . . . . . 16\n     6.2.  Server Entry Registrations . . . . . . . . . . . . . . . . 16\n       6.2.1.  /shared/comment  . . . . . . . . . . . . . . . . . . . 17\n       6.2.2.  /shared/admin  . . . . . . . . . . . . . . . . . . . . 17\n     6.3.  Mailbox Entry Registrations  . . . . . . . . . . . . . . . 17\n       6.3.1.  /shared/comment  . . . . . . . . . . . . . . . . . . . 18\n       6.3.2.  /private/comment . . . . . . . . . . . . . . . . . . . 18\n   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 18\n   8.  Normative References . . . . . . . . . . . . . . . . . . . . . 19\n   Appendix A.  Acknowledgments . . . . . . . . . . . . . . . . . . . 19\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo                        Standards Track                    [Page 2]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n1.  Introduction and Overview\n\n   The goal of the METADATA extension is to provide a means for clients\n   to set and retrieve \"annotations\" or \"metadata\" on an IMAP server.\n   The annotations can be associated with specific mailboxes or the\n   server as a whole.  The server can choose to support only server\n   annotations or both server and mailbox annotations.\n\n   A server that supports both server and mailbox annotations indicates\n   the presence of this extension by returning \"METADATA\" as one of the\n   supported capabilities in the CAPABILITY command response.\n\n   A server that supports only server annotations indicates the presence\n   of this extension by returning \"METADATA-SERVER\" as one of the\n   supported capabilities in the CAPABILITY command response.\n\n   A server that supports unsolicited annotation change responses MUST\n   support the \"ENABLE\" [RFC5161] extension to allow clients to turn\n   that feature on.\n\n   The METADATA extension adds two new commands and one new untagged\n   response to the IMAP base protocol.\n\n   This extension makes the following changes to the IMAP protocol:\n\n   o  adds a new SETMETADATA command\n\n   o  adds a new GETMETADATA command\n\n   o  adds a new METADATA untagged response\n\n   o  adds a new METADATA response code\n\n   The rest of this document describes the data model and protocol\n   changes more rigorously.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   Whitespace and line breaks have been added to the examples in this\n   document to promote readability.\n\n\n\n\nDaboo                        Standards Track                    [Page 3]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n3.  Data Model\n\n3.1.  Overview\n\n   Mailboxes or the server as a whole may have zero or more annotations\n   associated with them.  An annotation contains a uniquely named entry,\n   which has a value.  Annotations can be added to mailboxes when a\n   mailbox name is provided as the first argument to the SETMETADATA\n   command, or to the server as a whole when the empty string is\n   provided as the first argument to the command.\n\n   For example, a general comment being added to a mailbox may have an\n   entry name of \"/comment\" and a value of \"Really useful mailbox\".\n\n   The protocol changes to IMAP described below allow a client to access\n   or change the values of any annotation entry, assuming it has\n   sufficient access rights to do so.\n\n3.2.  Namespace of Entries\n\n   Each annotation is an entry that has a hierarchical name, with each\n   component of the name separated by a slash (\"/\").  An entry name MUST\n   NOT contain two consecutive \"/\" characters and MUST NOT end with a\n   \"/\" character.\n\n   The value of an entry is NIL (has no value), or a string or binary\n   data of zero or more octets.  A string MAY contain multiple lines of\n   text.  Clients MUST use the CRLF (0x0D 0x0A) character octet sequence\n   to represent line ends in a multi-line string value.\n\n   Entry names MUST NOT contain asterisk (\"*\") or percent (\"%\")\n   characters and MUST NOT contain non-ASCII characters or characters\n   with octet values in the range 0x00 to 0x19.  Invalid entry names\n   result in a BAD response in any IMAP command in which they are used.\n\n   Entry names are case-insensitive.\n\n   Use of control or punctuation characters in entry names is strongly\n   discouraged.\n\n   This specification defines an initial set of entry names available\n   for use with mailbox and server annotations.  In addition, an\n   extension mechanism is described to allow additional names to be\n   added for extensibility.\n\n   The first component in entry names defines the scope of the\n   annotation.  Currently, only the prefixes \"/private\" or \"/shared\" are\n   defined.  These prefixes are used to indicate whether an annotation\n\n\n\nDaboo                        Standards Track                    [Page 4]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n   is stored on a per-user basis (\"/private\") and not visible to other\n   users, or whether an annotation is shared between authorized users\n   (\"/shared\") with a single value that can be read and changed by\n   authorized users with appropriate access.  See Section 3.3 for\n   details.\n\n   Entry names can have any number of components starting at 2, unless\n   they fall under the vendor namespaces (i.e., have a /shared/vendor/\n   <vendor-token> or /private/vendor/<vendor-token> prefix as described\n   below), in which case they have at least 4 components.\n\n3.2.1.  Entry Names\n\n   Entry names MUST be specified in a Standards Track or IESG-approved\n   Experimental RFC, or fall under the vendor namespace.  See\n   Section 6.1 for the registration template.\n\n3.2.1.1.  Server Entries\n\n   These entries are set or retrieved when the mailbox name argument to\n   the new SETMETADATA or GETMETADATA command is the empty string.\n\n   /shared/comment\n\n      Defines a comment or note that is associated with the server and\n      that is shared with authorized users of the server.\n\n   /shared/admin\n\n      Indicates a method for contacting the server administrator.  The\n      value MUST be a URI (e.g., a mailto: or tel: URL).  This entry is\n      always read-only -- clients cannot change it.  It is visible to\n      authorized users of the system.\n\n   /shared/vendor/<vendor-token>\n\n      Defines the top level of shared entries associated with the\n      server, as created by a particular product of some vendor.  This\n      entry can be used by vendors to provide server- or client-specific\n      annotations.  The vendor-token MUST be registered with IANA, using\n      the Application Configuration Access Protocol (ACAP) [RFC2244]\n      vendor subtree registry.\n\n   /private/vendor/<vendor-token>\n\n      Defines the top level of private entries associated with the\n      server, as created by a particular product of some vendor.  This\n      entry can be used by vendors to provide server- or client-specific\n\n\n\nDaboo                        Standards Track                    [Page 5]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n      annotations.  The vendor-token MUST be registered with IANA, using\n      the ACAP [RFC2244] vendor subtree registry.\n\n3.2.1.2.  Mailbox Entries\n\n   These entries are set or retrieved when the mailbox name argument to\n   the new SETMETADATA or GETMETADATA command is not the empty string.\n\n   /shared/comment\n\n      Defines a shared comment or note associated with a mailbox.\n\n   /private/comment\n\n      Defines a private (per-user) comment or note associated with a\n      mailbox.\n\n   /shared/vendor/<vendor-token>\n\n      Defines the top level of shared entries associated with a specific\n      mailbox, as created by a particular product of some vendor.  This\n      entry can be used by vendors to provide client-specific\n      annotations.  The vendor-token MUST be registered with IANA, using\n      the ACAP [RFC2244] vendor subtree registry.\n\n   /private/vendor/<vendor-token>\n\n      Defines the top level of private entries associated with a\n      specific mailbox, as created by a particular product of some\n      vendor.  This entry can be used by vendors to provide client-\n      specific annotations.  The vendor-token MUST be registered with\n      IANA, using the ACAP [RFC2244] vendor subtree registry.\n\n3.3.  Private versus Shared and Access Control\n\n   In the absence of the ACL (Access Control List) extension [RFC4314],\n   users can only set and retrieve private or shared mailbox annotations\n   on a mailbox that exists and is returned to them via a LIST or LSUB\n   command, and on which they have either read or write access to the\n   actual message content of the mailbox (as determined by the READ-ONLY\n   and READ-WRITE response codes as described in Section 5.2 of\n   [RFC4314]).\n\n   When the ACL extension [RFC4314] is present, users can only set and\n   retrieve private or shared mailbox annotations on a mailbox on which\n   they have the \"l\" right and any one of the \"r\", \"s\", \"w\", \"i\", or \"p\"\n   rights.\n\n\n\n\nDaboo                        Standards Track                    [Page 6]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n   If a client attempts to set or retrieve annotations on mailboxes that\n   do not satisfy the conditions above, the server MUST respond with a\n   NO response.\n\n   Users can always retrieve private or shared server annotations if\n   they exist.  Servers MAY restrict the creation of private or shared\n   server annotations as appropriate.  When restricted, the server MUST\n   return a NO response when the SETMETADATA command is used to try to\n   create a server annotation.\n\n   If the METADATA extension is present, support for shared annotations\n   is REQUIRED, whilst support for private annotations is OPTIONAL.\n   This recognizes the fact that support for private annotations may\n   introduce significantly more complexity to a server in terms of\n   tracking ownership of the annotations, how quota is determined for\n   users based on their own annotations, etc.\n\n4.  IMAP Protocol Changes\n\n4.1.  General Considerations\n\n   The new SETMETADATA command and the METADATA response each have a\n   mailbox name argument.  An empty string is used for the mailbox name\n   to signify server annotations.  A non-empty string is used to signify\n   mailbox annotations attached to the corresponding mailbox.\n\n   Servers SHOULD ensure that mailbox annotations are automatically\n   moved when the mailbox they refer to is renamed, i.e., the\n   annotations follow the mailbox.  This applies to a rename of the\n   INBOX, with the additional behavior that the annotations are copied\n   from the original INBOX to the renamed mailbox, i.e., mailbox\n   annotations are preserved on the INBOX when it is renamed.\n\n   Servers SHOULD delete annotations for a mailbox when the mailbox is\n   deleted, so that a mailbox created with the same name as a previously\n   existing mailbox does not inherit the old mailbox annotations.\n\n   Servers SHOULD allow annotations on all 'types' of mailboxes,\n   including ones reporting \\Noselect for their LIST response.  Servers\n   can implicitly remove \\Noselect mailboxes when all child mailboxes\n   are removed, and, at that time any annotations associated with the\n   \\Noselect mailbox SHOULD be removed.\n\n   The server is allowed to impose limitations on the size of any one\n   annotation or the total number of annotations for a single mailbox or\n   for the server as a whole.  However, the server MUST accept an\n   annotation data size of at least 1024 bytes, and an annotation count\n   per server or mailbox of at least 10.\n\n\n\nDaboo                        Standards Track                    [Page 7]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n   Some annotations may be \"read-only\" -- i.e., they are set by the\n   server and cannot be changed by the client.  Also, such annotations\n   may be \"computed\" -- i.e., the value changes based on underlying\n   properties of the mailbox or server.  For example, an annotation\n   reporting the total size of all messages in the mailbox would change\n   as messages are added or removed.  Or, an annotation containing an\n   IMAP URL for the mailbox would change if the mailbox was renamed.\n\n   Servers MAY support sending unsolicited responses for use when\n   annotations are changed by some \"third-party\" (see Section 4.4).  In\n   order to do so, servers MUST support the ENABLE command [RFC5161] and\n   MUST only send unsolicited responses if the client used the ENABLE\n   command [RFC5161] extension with the capability string \"METADATA\" or\n   \"METADATA-SERVER\" earlier in the session, depending on which of those\n   capabilities is supported by the server.\n\n4.2.  GETMETADATA Command\n\n   This extension adds the GETMETADATA command.  This allows clients to\n   retrieve server or mailbox annotations.\n\n   This command is only available in authenticated or selected state\n   [RFC3501].\n\n       Arguments:  mailbox-name\n                   options\n                   entry-specifier\n\n       Responses:  required METADATA response\n\n       Result:     OK - command completed\n                   NO - command failure: can't access annotations on\n                        the server\n                   BAD - command unknown or arguments invalid\n\n   When the mailbox name is the empty string, this command retrieves\n   server annotations.  When the mailbox name is not empty, this command\n   retrieves annotations on the specified mailbox.\n\n   Options MAY be included with this command and are defined below.\n\n   Example:\n\n           C: a GETMETADATA \"\" /shared/comment\n           S: * METADATA \"\" (/shared/comment \"Shared comment\")\n           S: a OK GETMETADATA complete\n\n\n\n\n\nDaboo                        Standards Track                    [Page 8]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n      In the above example, the contents of the value of the \"/shared/\n      comment\" server entry is requested by the client and returned by\n      the server.\n\n   Example:\n\n           C: a GETMETADATA \"INBOX\" /private/comment\n           S: * METADATA \"INBOX\" (/private/comment \"My own comment\")\n           S: a OK GETMETADATA complete\n\n      In the above example, the contents of the value of the \"/private/\n      comment\" mailbox entry for the mailbox \"INBOX\" is requested by the\n      client and returned by the server.\n\n   Entry specifiers can be lists of atomic specifiers, so that multiple\n   annotations may be returned in a single GETMETADATA command.\n\n   Example:\n\n           C: a GETMETADATA \"INBOX\" (/shared/comment /private/comment)\n           S: * METADATA \"INBOX\" (/shared/comment \"Shared comment\"\n                                  /private/comment \"My own comment\")\n           S: a OK GETMETADATA complete\n\n      In the above example, the values of the two server entries\n      \"/shared/comment\" and \"/private/comment\" on the mailbox \"INBOX\"\n      are requested by the client and returned by the server.\n\n4.2.1.  MAXSIZE GETMETADATA Command Option\n\n   When the MAXSIZE option is specified with the GETMETADATA command, it\n   restricts which entry values are returned by the server.  Only entry\n   values that are less than or equal in octet size to the specified\n   MAXSIZE limit are returned.  If there are any entries with values\n   larger than the MAXSIZE limit, the server MUST include the METADATA\n   LONGENTRIES response code in the tagged OK response for the\n   GETMETADATA command.  The METADATA LONGENTRIES response code returns\n   the size of the biggest entry value requested by the client that\n   exceeded the MAXSIZE limit.\n\n   Example:\n\n           C: a GETMETADATA \"INBOX\" (MAXSIZE 1024)\n                                    (/shared/comment /private/comment)\n           S: * METADATA \"INBOX\" (/private/comment \"My own comment\")\n           S: a OK [METADATA LONGENTRIES 2199] GETMETADATA complete\n\n\n\n\n\nDaboo                        Standards Track                    [Page 9]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n      In the above example, the values of the two server entries\n      \"/shared/comment\" and \"/private/comment\" on the mailbox \"INBOX\"\n      are requested by the client, which wants to restrict the size of\n      returned values to 1024 octets.  In this case, the \"/shared/\n      comment\" entry value is 2199 octets and is not returned.\n\n4.2.2.  DEPTH GETMETADATA Command Option\n\n   When the DEPTH option is specified with the GETMETADATA command, it\n   extends the list of entry values returned by the server.  For each\n   entry name specified in the GETMETADATA command, the server returns\n   the value of the specified entry name (if it exists), plus all\n   entries below the entry name up to the specified DEPTH.  Three values\n   are allowed for DEPTH:\n\n   \"0\" - no entries below the specified entry are returned\n   \"1\" - only entries immediately below the specified entry are returned\n   \"infinity\" -  all entries below the specified entry are returned\n\n   Thus, \"depth 1\" for an entry \"/a\" will match \"/a\" as well as its\n   children entries (e.g., \"/a/b\"), but will not match grandchildren\n   entries (e.g., \"/a/b/c\").\n\n   If the DEPTH option is not specified, this is the same as specifying\n   \"DEPTH 0\".\n\n   Example:\n\n           C: a GETMETADATA \"INBOX\" (DEPTH 1)\n                                   (/private/filters/values)\n           S: * METADATA \"INBOX\" (/private/filters/values/small\n                \"SMALLER 5000\" /private/filters/values/boss\n                \"FROM \\\"boss@example.com\\\"\")\n           S: a OK GETMETADATA complete\n\n      In the above example, 2 entries below the /private/filters/values\n      entry exist on the mailbox \"INBOX\": \"/private/filters/values/\n      small\" and \"/private/filters/values/boss\".\n\n4.3.  SETMETADATA Command\n\n   This extension adds the SETMETADATA command.  This allows clients to\n   set annotations.\n\n   This command is only available in authenticated or selected state\n   [RFC3501].\n\n\n\n\n\nDaboo                        Standards Track                   [Page 10]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n       Arguments:  mailbox-name\n                   entry\n                   value\n                   list of entry, values\n\n       Responses:  no specific responses for this command\n\n       Result:     OK - command completed\n                   NO - command failure: can't set annotations,\n                        or annotation too big or too many\n                   BAD - command unknown or arguments invalid\n\n   This command sets the specified list of entries by adding or\n   replacing the specified values provided, on the specified existing\n   mailboxes or on the server (if the mailbox argument is the empty\n   string).  Clients can use NIL for the value of entries it wants to\n   remove.  The server SHOULD NOT return a METADATA response containing\n   the updated annotation data.  Clients MUST NOT assume that a METADATA\n   response will be sent, and MUST assume that if the command succeeds,\n   then the annotation has been changed.\n\n   If the server is unable to set an annotation because the size of its\n   value is too large, the server MUST return a tagged NO response with\n   a \"[METADATA MAXSIZE NNN]\" response code when NNN is the maximum\n   octet count that it is willing to accept.\n\n   If the server is unable to set a new annotation because the maximum\n   number of allowed annotations has already been reached, the server\n   MUST return a tagged NO response with a \"[METADATA TOOMANY]\" response\n   code.\n\n   If the server is unable to set a new annotation because it does not\n   support private annotations on one of the specified mailboxes, the\n   server MUST return a tagged NO response with a \"[METADATA NOPRIVATE]\"\n   response code.\n\n   When any one annotation fails to be set, resulting in a tagged NO\n   response from the server, then the server MUST NOT change the values\n   for other annotations specified in the SETMETADATA command.\n\n   Example:\n\n           C: a SETMETADATA INBOX (/private/comment {33}\n           S: + ready for data\n           My new comment across\n           two lines.\n           )\n           S: a OK SETMETADATA complete\n\n\n\nDaboo                        Standards Track                   [Page 11]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n      In the above example, the entry \"/private/comment\" for the mailbox\n      \"INBOX\" is created (if not already present) and the value set to a\n      multi-line string.\n\n   Example:\n\n           C: a SETMETADATA INBOX (/private/comment NIL)\n           S: a OK SETMETADATA complete\n\n      In the above example, the entry \"/private/comment\" is removed from\n      the mailbox \"INBOX\".\n\n   Multiple entries can be set in a single SETMETADATA command by\n   listing entry-value pairs in the list.\n\n   Example:\n\n           C: a SETMETADATA INBOX (/private/comment \"My new comment\"\n                               /shared/comment \"This one is for you!\")\n           S: a OK SETMETADATA complete\n\n      In the above example, the entries \"/private/comment\" and \"/shared/\n      comment\" for the mailbox \"INBOX\" are created (if not already\n      present) and the values set as specified.\n\n   Example:\n\n           C: a SETMETADATA INBOX (/private/comment \"My new comment\")\n           S: a NO [METADATA TOOMANY] SETMETADATA failed\n\n      In the above example, the server is unable to set the requested\n      (new) annotation as it has reached the limit on the number of\n      annotations it can support on the specified mailbox.\n\n4.4.  METADATA Response\n\n   The METADATA response displays results of a GETMETADATA command, or\n   can be returned as an unsolicited response at any time by the server\n   in response to a change in a server or mailbox annotation.\n\n   When unsolicited responses are activated by the ENABLE [RFC5161]\n   command for this extension, servers MUST send unsolicited METADATA\n   responses if server or mailbox annotations are changed by a third-\n   party, allowing servers to keep clients updated with changes.\n\n   Unsolicited METADATA responses MUST only contain entry names, not the\n   values.  If the client wants to update any cached values, it must\n   explicitly retrieve those using a GETMETADATA command.\n\n\n\nDaboo                        Standards Track                   [Page 12]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n   The METADATA response can contain multiple entries in a single\n   response, but the server is free to return multiple responses for\n   each entry or group of entries, if it desires.\n\n   This response is only available in authenticated or selected state\n   [RFC3501].\n\n4.4.1.  METADATA Response with Values\n\n   The response consists of a list of entry-value pairs.\n\n   Example:\n\n           C: a GETMETADATA \"\" /shared/comment\n           S: * METADATA \"\" (/shared/comment \"My comment\")\n           S: a OK GETMETADATA complete\n\n      In the above example, a single entry with its value is returned by\n      the server.\n\n   Example:\n\n           C: a GETMETADATA \"INBOX\" /private/comment /shared/comment\n           S: * METADATA \"INBOX\" (/private/comment \"My comment\"\n                                  /shared/comment \"Its sunny outside!\")\n           S: a OK GETMETADATA complete\n\n      In the above example, two entries and their values are returned by\n      the server.\n\n   Example:\n\n           C: a GETMETADATA \"INBOX\" /private/comment /shared/comment\n           S: * METADATA \"INBOX\" (/private/comment \"My comment\")\n           S: * METADATA \"INBOX\" (/shared/comment \"Its sunny outside!\")\n           S: a OK GETMETADATA complete\n\n      In the above example, the server returns two separate responses\n      for each of the two entries requested.\n\n4.4.2.  Unsolicited METADATA Response without Values\n\n   The response consists of a list of entries, each of which have\n   changed on the server or mailbox.\n\n   Example:\n\n\n\n\n\nDaboo                        Standards Track                   [Page 13]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n           C: a NOOP\n           S: * METADATA \"\" /shared/comment\n           S: a OK NOOP complete\n\n      In the above example, the server indicates that the \"/shared/\n      comment\" server entry has been changed.\n\n   Example:\n\n           C: a NOOP\n           S: * METADATA \"INBOX\" /shared/comment /private/comment\n           S: a OK NOOP complete\n\n      In the above example, the server indicates a change to two mailbox\n      entries.\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].\n\n   Non-terminals referenced but not defined below are as defined by\n   [RFC3501], with the new definitions in [RFC4466] superseding those in\n   [RFC3501].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n      capability        =/ \"METADATA\" / \"METADATA-SERVER\"\n                          ; defines the capabilities for this extension.\n\n      command-auth      =/ setmetadata / getmetadata\n                          ; adds to original IMAP command\n\n      entries           = entry /\n                          \"(\" entry *(SP entry) \")\"\n                          ; entry specifiers\n\n      entry             = astring\n                          ; slash-separated path to entry\n                          ; MUST NOT contain \"*\" or \"%\"\n\n      entry-value       = entry SP value\n\n      entry-values      = \"(\" entry-value *(SP entry-value) \")\"\n\n\n\n\nDaboo                        Standards Track                   [Page 14]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n      entry-list        = entry *(SP entry)\n                          ; list of entries used in unsolicited\n                          ; METADATA response\n\n      getmetadata       = \"GETMETADATA\" [SP getmetadata-options]\n                                        SP mailbox SP entries\n                          ; empty string for mailbox implies\n                          ; server annotation.\n\n      getmetadata-options = \"(\" getmetadata-option\n                                *(SP getmetadata-option) \")\"\n\n      getmetadata-option = tagged-ext-label [SP tagged-ext-val]\n                          ; tagged-ext-label and tagged-ext-val\n                          ; are defined in [RFC4466].\n\n      maxsize-opt       = \"MAXSIZE\" SP number\n                          ; Used as a getmetadata-option\n\n      metadata-resp     = \"METADATA\" SP mailbox SP\n                          (entry-values / entry-list)\n                          ; empty string for mailbox implies\n                          ; server annotation.\n\n      response-payload  =/ metadata-resp\n                          ; adds to original IMAP data responses\n\n      resp-text-code    =/ \"METADATA\" SP \"LONGENTRIES\" SP number\n                             ; new response codes for GETMETADATA\n\n      resp-text-code    =/ \"METADATA\" SP (\"MAXSIZE\" SP number /\n                                          \"TOOMANY\" / \"NOPRIVATE\")\n                          ; new response codes for SETMETADATA\n                          ; failures\n\n      scope-opt         =  \"DEPTH\" SP (\"0\" / \"1\" / \"infinity\")\n                          ; Used as a getmetadata-option\n\n      setmetadata       = \"SETMETADATA\" SP mailbox\n                                        SP entry-values\n                          ; empty string for mailbox implies\n                          ; server annotation.\n\n      value             = nstring / literal8\n\n\n\n\n\n\n\nDaboo                        Standards Track                   [Page 15]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n6.  IANA Considerations\n\n   All entries MUST have either \"/shared\" or \"/private\" as a prefix.\n   Entry names MUST be specified in a Standards Track or IESG-approved\n   Experimental RFC, or fall under the vendor namespace (i.e., use\n   /shared/vendor/<vendor-token> or /private/vendor/<vendor-token> as\n   the prefix).\n\n   Each entry registration MUST include a content-type that is used to\n   indicate the nature of the annotation value.  Where applicable, a\n   charset parameter MUST be included with the content-type.\n\n6.1.  Entry and Attribute Registration Template\n\n       To: iana@iana.org\n       Subject: IMAP METADATA Entry Registration\n\n       Type:         [Either \"Mailbox\" or \"Server\"]\n\n       Name:         [the name of the entry]\n\n       Description:  [a description of what the entry is for]\n\n       Content-type: [MIME Content-Type and charset for the entry value]\n\n       RFC Number:   [for entries published as RFCs]\n\n       Contact:      [email and/or physical address to contact for\n                      additional information]\n\n6.2.  Server Entry Registrations\n\n   The following templates specify the IANA registrations of annotation\n   entries specified in this document.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo                        Standards Track                   [Page 16]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n6.2.1.  /shared/comment\n\n       To: iana@iana.org\n       Subject: IMAP METADATA Entry Registration\n\n       Type:         Server\n\n       Name:         /shared/comment\n\n       Description:  Defines a comment or note that is associated\n                     with the server and that is shared with\n                     authorized users of the server.\n\n       Content-type: text/plain; charset=utf-8\n\n       RFC Number:   RFC 5464\n\n       Contact:      IMAP Extensions mailto:ietf-imapext@imc.org\n\n6.2.2.  /shared/admin\n\n     To: iana@iana.org\n     Subject: IMAP METADATA Entry Registration\n\n     Type:         Server\n\n     Name:         /shared/admin\n\n     Description:  Indicates a method for contacting the server\n                   administrator.  The value MUST be a URI (e.g., a\n                   mailto: or tel: URL).  This entry is always\n                   read-only -- clients cannot change it.  It is visible\n                   to authorized users of the system.\n\n     Content-type: text/plain; charset=utf-8\n\n     RFC Number:   RFC 5464\n\n     Contact:      IMAP Extensions mailto:ietf-imapext@imc.org\n\n6.3.  Mailbox Entry Registrations\n\n   The following templates specify the IANA registrations of annotation\n   entries specified in this document.\n\n\n\n\n\n\n\nDaboo                        Standards Track                   [Page 17]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n6.3.1.  /shared/comment\n\n       To: iana@iana.org\n       Subject: IMAP METADATA Entry Registration\n\n       Type:         Mailbox\n\n       Name:         /shared/comment\n\n       Description:  Defines a shared comment or note associated with a\n                     mailbox.\n\n       Content-type: text/plain; charset=utf-8\n\n       RFC Number:   RFC 5464\n\n       Contact:      IMAP Extensions mailto:ietf-imapext@imc.org\n\n6.3.2.  /private/comment\n\n       To: iana@iana.org\n       Subject: IMAP METADATA Entry Registration\n\n       Type:         Mailbox\n\n       Name:         /private/comment\n\n       Description:  Defines a private comment or note associated with a\n                     mailbox.\n\n       Content-type: text/plain; charset=utf-8\n\n       RFC Number:   RFC 5464\n\n       Contact:      IMAP Extensions mailto:ietf-imapext@imc.org\n\n7.  Security Considerations\n\n   The security considerations in Section 11 of [RFC3501] apply here\n   with respect to protecting annotations from snooping.  Servers MAY\n   choose to only support the METADATA and/or METADATA-SERVER extensions\n   after a privacy layer has been negotiated by the client.\n\n   Annotations can contain arbitrary data of varying size.  As such,\n   servers MUST ensure that size limits are enforced to prevent a user\n   from using up all available space on a server and preventing use by\n   others.  Clients MUST treat annotation data values as an \"untrusted\"\n   source of data as it is possible for it to contain malicious content.\n\n\n\nDaboo                        Standards Track                   [Page 18]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\n   Annotations whose values are intended to remain private MUST be\n   stored only in entries that have the \"/private\" prefix on the entry\n   name.\n\n   Excluding the above issues, the METADATA extension does not raise any\n   security considerations that are not present in the base IMAP\n   protocol, and these issues are discussed in [RFC3501].\n\n8.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2244]  Newman, C. and J. Myers, \"ACAP -- Application\n              Configuration Access Protocol\", RFC 2244, November 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [RFC5161]  Gulbrandsen, A. and A. Melnikov, \"The IMAP ENABLE\n              Extension\", RFC 5161, March 2008.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\nAppendix A.  Acknowledgments\n\n   The ideas expressed in this document are based on the message\n   annotation document that was co-authored by Randall Gellens.  The\n   author would like to thank the following individuals for contributing\n   their ideas and support for writing this specification: Dave\n   Cridland, Arnt Gulbrandsen, Dan Karp, Alexey Melnikov, Ken Murchison,\n   Chris Newman, and Michael Wener.\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo                        Standards Track                   [Page 19]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\nAuthor's Address\n\n   Cyrus Daboo\n   Apple Inc.\n   1 Infinite Loop\n   Cupertino, CA  95014\n   USA\n\n   EMail: cyrus@daboo.name\n   URI:   http://www.apple.com/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo                        Standards Track                   [Page 20]\n\f\nRFC 5464               The IMAP METADATA Extension         February 2009\n\n\nFull Copyright Statement\n\n   Copyright (C) The IETF Trust (2009).\n\n   This document is subject to the rights, licenses and restrictions\n   contained in BCP 78, and except as set forth therein, the authors\n   retain all their rights.\n\n   This document and the information contained herein are provided on an\n   \"AS IS\" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS\n   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND\n   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS\n   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF\n   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED\n   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n\nIntellectual Property\n\n   The IETF takes no position regarding the validity or scope of any\n   Intellectual Property Rights or other rights that might be claimed to\n   pertain to the implementation or use of the technology described in\n   this document or the extent to which any license under such rights\n   might or might not be available; nor does it represent that it has\n   made any independent effort to identify any such rights.  Information\n   on the procedures with respect to rights in RFC documents can be\n   found in BCP 78 and BCP 79.\n\n   Copies of IPR disclosures made to the IETF Secretariat and any\n   assurances of licenses to be made available, or the result of an\n   attempt made to obtain a general license or permission for the use of\n   such proprietary rights by implementers or users of this\n   specification can be obtained from the IETF on-line IPR repository at\n   http://www.ietf.org/ipr.\n\n   The IETF invites any interested party to bring to its attention any\n   copyrights, patents or patent applications, or other proprietary\n   rights that may cover technology that may be required to implement\n   this standard.  Please address the information to the IETF at\n   ietf-ipr@ietf.org.\n\n\n\n\n\n\n\n\n\n\n\n\nDaboo                        Standards Track                   [Page 21]\n\f\n\n"
  },
  {
    "path": "rfc/rfc5465.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                     A. Gulbrandsen\nRequest for Comments: 5465                        Oryx Mail Systems GmbH\nUpdates: 5267                                                    C. King\nCategory: Standards Track                                    A. Melnikov\n                                                              Isode Ltd.\n                                                           February 2009\n\n\n                       The IMAP NOTIFY Extension\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (c) 2009 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents (http://trustee.ietf.org/\n   license-info) in effect on the date of publication of this document.\n   Please review these documents carefully, as they describe your rights\n   and restrictions with respect to this document.\n\nAbstract\n\n   This document defines an IMAP extension that allows a client to\n   request specific kinds of unsolicited notifications for specified\n   mailboxes, such as messages being added to or deleted from such\n   mailboxes.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 1]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\nTable of Contents\n\n   1. Overview and Rationale ..........................................3\n   2. Conventions Used in This Document ...............................4\n   3. The NOTIFY Extension ............................................4\n      3.1. The NOTIFY Command .........................................4\n   4. Interaction with the IDLE Command ...............................8\n   5. Event Types .....................................................8\n      5.1. FlagChange and AnnotationChange ............................9\n      5.2. MessageNew .................................................9\n      5.3. MessageExpunge ............................................10\n      5.4. MailboxName ...............................................11\n      5.5. SubscriptionChange ........................................12\n      5.6. MailboxMetadataChange .....................................12\n      5.7. ServerMetadataChange ......................................13\n      5.8. Notification Overflow .....................................13\n      5.9. ACL (Access Control List) Changes .........................13\n   6. Mailbox Specification ..........................................14\n      6.1. Mailbox Specifiers Affecting the Currently\n           Selected Mailbox ..........................................14\n      6.2. Personal ..................................................15\n      6.3. Inboxes ...................................................15\n      6.4. Subscribed ................................................15\n      6.5. Subtree ...................................................15\n      6.6. Mailboxes .................................................16\n   7. Extension to SEARCH and SORT Commands ..........................16\n   8. Formal Syntax ..................................................16\n   9. Security Considerations ........................................19\n   10. IANA Considerations ...........................................19\n      10.1. Initial LIST-EXTENDED Extended Data Item Registrations ...19\n   11. Acknowledgements ..............................................20\n   12. Normative References ..........................................20\n   13. Informative References ........................................21\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 2]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n1.  Overview and Rationale\n\n   The IDLE command (defined in [RFC2177]) provides a way for the client\n   to go into a mode where the IMAP server pushes it notifications about\n   IMAP mailstore events for the selected mailbox.  However, the IDLE\n   extension doesn't restrict or control which server events can be\n   sent, or what information the server sends in response to each event.\n   Also, IDLE only applies to the selected mailbox, thus requiring an\n   additional TCP connection per mailbox.\n\n   This document defines an IMAP extension that allows clients to\n   express their preferences about unsolicited events generated by the\n   server.  The extension allows clients to only receive events that\n   they are interested in, while servers know that they don't need to go\n   to the effort of generating certain types of untagged responses.\n\n   Without the NOTIFY command defined in this document, an IMAP server\n   will only send information about mailstore changes to the client in\n   the following cases:\n\n   -  as the result of a client command (e.g., FETCH responses to a\n      FETCH or STORE command),\n   -  as unsolicited responses sent just before the end of a command\n      (e.g., EXISTS or EXPUNGE) as the result of changes in other\n      sessions, and\n   -  during an IDLE command.\n\n   The NOTIFY command extends what information may be returned in those\n   last two cases, and also permits and requires the server to send\n   information about updates between commands.  The NOTIFY command also\n   allows for the client to extend what information is sent unsolicited\n   about the selected mailbox and to request some update information to\n   be sent regarding other mailboxes.\n\n   The interaction between IDLE and NOTIFY commands is described in\n   Section 4.\n\n   For the new messages delivered to or appended to the selected\n   mailbox, the NOTIFY command can be used to request that a set of\n   attributes be sent to the client in an unsolicited FETCH response.\n   This allows a client to be a passive recipient of events and new mail\n   and to be able to maintain full synchronisation without having to\n   issue any subsequent commands except to modify the state of the\n   mailbox on the server.\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 3]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   Some mobile clients, however, may want mail \"pushed\" only for mail\n   that matches a SEARCH pattern.  To meet that need, [RFC5267] is\n   augmented by this document to extend the UPDATE return option to\n   specify a list of fetch-atts to be returned when a new message is\n   delivered or appended in another session.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   The acronym MSN stands for Message Sequence Numbers (see Section\n   2.3.1.2 of [RFC3501]).\n\n   Example lines prefaced by \"C:\" are sent by the client and ones\n   prefaced by \"S:\", by the server.  \"[...]\" means elision.\n\n3.  The NOTIFY Extension\n\n   IMAP servers that support this extension advertise the NOTIFY\n   capability.  This extension adds the NOTIFY command as defined in\n   Section 5.1.\n\n   A server implementing this extension is not required to implement\n   LIST-EXTENDED [RFC5258], even though a NOTIFY-compliant server must\n   be able to return extended LIST responses, defined in [RFC5258].\n\n3.1.  The NOTIFY Command\n\n   Arguments:  \"SET\"\n               Optional STATUS indicator\n               Mailboxes to be watched\n               Events about which to notify the client\n\n   Or\n   Arguments:  \"NONE\"\n\n   Responses:  Possibly untagged STATUS responses (for SET)\n\n   Result:     OK - The server will notify the client as requested.\n               NO -  Unsupported NOTIFY event, NOTIFY too complex or\n                     expensive, etc.\n               BAD - Command unknown, invalid, unsupported, or has\n                     unknown arguments.\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 4]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   The NOTIFY command informs the server that the client listens for\n   event notifications all the time (even when no command is in\n   progress), and requests the server to notify it about the specified\n   set of events.  The NOTIFY command has two forms.  NOTIFY NONE\n   specifies that the client is not interested in any kind of event\n   happening on the server.  NOTIFY SET replaces the current list of\n   interesting events with a new list of events.\n\n   Until the NOTIFY command is used for the first time, the server only\n   sends notifications while a command is being processed, and notifies\n   the client about these events on the selected mailbox (see Section 5\n   for definitions): MessageNew, MessageExpunge, or FlagChange.  It does\n   not notify the client about any events on other mailboxes.\n\n   The effect of a successful NOTIFY command lasts until the next NOTIFY\n   command or until the IMAP connection is closed.\n\n   A successful NOTIFY SET command MUST cause the server to immediately\n   return any accumulated changes to the currently selected mailbox (if\n   any), such as flag changes and new or expunged messages.  Thus, a\n   successful NOTIFY SET command implies an implicit NOOP command.\n\n   The NOTIFY SET command can request notifications of message-related\n   changes to the selected mailbox, whatever that may be at the time the\n   message notifications are being generated.  This is done by\n   specifying either the SELECTED or the SELECTED-DELAYED mailbox\n   selector (see Section 6.1) in the NOTIFY SET command.  If the\n   SELECTED/SELECTED-DELAYED mailbox selector is not specified in the\n   NOTIFY SET command, this means that the client doesn't want to\n   receive any <message-event>s for the currently selected mailbox.\n   This is the same as specifying SELECTED NONE.\n\n   The client can also request notifications on other mailboxes by name\n   or by a limited mailbox pattern match.  Message-related notifications\n   returned for the currently selected mailbox will be those specified\n   by the SELECTED/SELECTED-DELAYED mailbox specifier, even if the\n   selected mailbox also appears by name (or matches a pattern) in the\n   command.  Non-message-related notifications are controlled by mailbox\n   specifiers other than SELECTED/SELECTED-DELAYED.\n\n   If the NOTIFY command enables MessageNew, MessageExpunge,\n   AnnotationChange, or FlagChange notifications for a mailbox other\n   than the currently selected mailbox, and the client has specified the\n   STATUS indicator parameter, then the server MUST send a STATUS\n   response for that mailbox before NOTIFY's tagged OK.  If MessageNew\n   is enabled, the STATUS response MUST contain MESSAGES, UIDNEXT, and\n   UIDVALIDITY.  If MessageExpunge is enabled, the STATUS response MUST\n   contain MESSAGES.  If either AnnotationChange or FlagChange are\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 5]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   included and the server also supports the CONDSTORE [RFC4551] and/or\n   QRESYNC [RFC5162] extensions, the STATUS response MUST contain\n   UIDVALIDITY and HIGHESTMODSEQ.  Absence of the STATUS indicator\n   parameter allows the client to avoid the additional STATUS responses.\n   This might be useful if the client already retrieved this information\n   before issuing the NOTIFY command.\n\n   Clients are advised to limit the number of mailboxes used with\n   NOTIFY.  Particularly, if a client asks for events for all accessible\n   mailboxes, the server may swamp the client with updates about shared\n   mailboxes.  This may reduce the client's battery life.  Also, this\n   wastes both server and network resources.\n\n   For each mailbox specified, the server verifies that the client has\n   access using the following test:\n\n   -  If the name does not refer to an existing mailbox, the server MUST\n      ignore it.\n\n   -  If the name refers to a mailbox that the client can't LIST, the\n      server MUST ignore it.  For a server that implements [RFC4314],\n      this means that if the client doesn't have the 'l' (lookup) right\n      for the name, then the server MUST ignore the mailbox.  This\n      behavior prevents disclosure of potentially confidential\n      information to clients who don't have rights to know it.\n\n   -  If the name refers to a mailbox that the client can LIST (e.g., it\n      has the 'l' right from [RFC4314]), but the client doesn't have\n      another right required for processing of the specified event(s),\n      then the server MUST respond with an untagged extended LIST\n      response containing the \\NoAccess name attribute.\n\n   The server SHOULD return the tagged OK response if the client has\n   access to at least one of the mailboxes specified in the current list\n   of interesting events.  The server MAY return the tagged NO response\n   if the client has no access to any of the specified mailboxes and no\n   access can ever be granted in the future (e.g., the client specified\n   an event for 'Subtree Bar/Foo', 'Bar/Foo' doesn't exist, and LIST\n   returns \\Noinferiors for the parent 'Bar').\n\n   If the notification would be prohibitively expensive for the server\n   (e.g., \"notify me of all flag changes in all mailboxes\"), the server\n   MAY refuse the command with a tagged NO [NOTIFICATIONOVERFLOW]\n   response.\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 6]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   If the client requests information for events of an unsupported type,\n   the server MUST refuse the command with a tagged NO response (not a\n   BAD).  This response SHOULD contain the BADEVENT response code, which\n   MUST list names of all events supported by the server.\n\n   Here's an example:\n\n         S: * OK [CAPABILITY IMAP4REV1 NOTIFY]\n         C: a login bob alice\n         S: a OK Password matched\n         C: b notify set status (selected MessageNew (uid\n            body.peek[header.fields (from to subject)]) MessageExpunge)\n            (subtree Lists MessageNew)\n         S: * STATUS Lists/Lemonade (UIDVALIDITY 4 UIDNEXT 9999 MESSAGES\n            500)\n         S: [...]\n         S: * STATUS Lists/Im2000 (UIDVALIDITY 901 UIDNEXT 1 MESSAGES 0)\n         S: b OK done\n         C: c select inbox\n         S: [...] (the usual 7-8 responses to SELECT)\n         S: c OK INBOX selected\n               (Time passes.  A new message is delivered to mailbox\n               Lists/Lemonade.)\n         S: * STATUS Lists/Lemonade (UIDVALIDITY 4 UIDNEXT 10000\n            MESSAGES 501)\n               (Time passes.  A new message is delivered to inbox.)\n         S: * 127 FETCH (UID 127001 BODY[HEADER.FIELDS (From To\n            Subject)] {75}\n         S: Subject: Re: good morning\n         S: From: alice@example.org\n         S: To: bob@example.org\n         S:\n         S: )\n               (Time passes.  The client decides it wants to know about\n               one more mailbox.  As the client already knows necessary\n               STATUS information for all mailboxes below the Lists\n               mailbox, and because \"notify set status\" would cause\n               STATUS responses for *all* mailboxes specified in the\n               NOTIFY command, including the ones for which the client\n               already knows STATUS information, the client issues an\n               explicit STATUS request for the mailbox to be added to\n               the watch list, followed by the NOTIFY SET without the\n               STATUS parameter.)\n         C: d STATUS misc (UIDVALIDITY UIDNEXT MESSAGES)\n         S: * STATUS misc (UIDVALIDITY 1 UIDNEXT 999)\n         S: d STATUS completed\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 7]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n         C: e notify set (selected MessageNew (uid\n            body.peek[header.fields (from to subject)]) MessageExpunge)\n            (subtree Lists MessageNew) (mailboxes misc MessageNew)\n         S: e OK done\n\n4.  Interaction with the IDLE Command\n\n   If IDLE [RFC2177] (as well as this extension) is supported, then\n   while processing any IDLE command, the server MUST send exactly the\n   same events as instructed by the client using the NOTIFY command.\n\n   NOTIFY makes IDLE unnecessary for some clients.  If a client does not\n   use MSNs and '*' in commands, it can request MessageExpunge and\n   MessageNew for the selected mailbox by using the NOTIFY command\n   instead of entering the IDLE mode.\n\n   A client that uses MSNs and '*' in commands can still use the NOTIFY\n   command if it specifies the SELECTED-DELAYED mailbox specifier in the\n   NOTIFY command.\n\n5.  Event Types\n\n   Only some of the events in [RFC5423] can be expressed in IMAP, and\n   for some of them there are several possible ways to express the\n   event.\n\n   This section specifies the events of which an IMAP server can notify\n   an IMAP client, and how.\n\n   The server SHOULD omit notifying the client if the event is caused by\n   this client.  For example, if the client issues CREATE and has\n   requested a MailboxName event that would cover the newly created\n   mailbox, the server SHOULD NOT notify the client of the MailboxName\n   change.\n\n   All event types described in this document require the 'l' and 'r'\n   rights (see [RFC4314]) on all observed mailboxes.  Servers that don't\n   implement [RFC4314] should map the above rights to their access-\n   control model.\n\n   If the FlagChange and/or AnnotationChange events are specified,\n   MessageNew and MessageExpunge MUST also be specified by the client.\n   Otherwise, the server MUST respond with the tagged BAD response.\n\n   If one of MessageNew or MessageExpunge is specified, then both events\n   MUST be specified.  Otherwise, the server MUST respond with the\n   tagged BAD response.\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 8]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   The client can instruct the server not to send an event by omitting\n   the necessary event from the list of events specified in NOTIFY SET,\n   by using the NONE event specifier in the NOTIFY SET, or by using\n   NOTIFY NONE.  In particular, NOTIFY SET ... NONE can be used as a\n   snapshot facility by clients.\n\n5.1.  FlagChange and AnnotationChange\n\n   If the flag and/or message annotation change happens in the selected\n   mailbox, the server MUST notify the client by sending an unsolicited\n   FETCH response, which MUST include UID and FLAGS/ANNOTATION FETCH\n   data items.  It MAY also send new FLAGS and/or OK [PERMANENTFLAGS\n   ...] responses.\n\n   If a search context is in effect as specified in [RFC5267], an\n   ESEARCH ADDTO or ESEARCH REMOVEFROM will also be generated, if\n   appropriate.  In this case, the FETCH response MUST precede the\n   ESEARCH response.\n\n   If the change happens in another mailbox, then the server responds\n   with a STATUS response.  The exact content of the STATUS response\n   depends on various factors.  If CONDSTORE [RFC4551] and/or QRESYNC\n   [RFC5162] are enabled by the client, then the server sends a STATUS\n   response that includes at least HIGHESTMODSEQ and UIDVALIDITY status\n   data items.  If the number of messages with the \\Seen flag changes,\n   the server MAY also include the UNSEEN data item in the STATUS\n   response.  If CONDSTORE/QRESYNC is not enabled by the client and the\n   server chooses not to include the UNSEEN data item, the server does\n   not notify the client.  When this event is requested, the server MUST\n   notify the client about mailbox UIDVALIDITY changes.  This is done by\n   sending a STATUS response that includes UIDVALIDITY.\n\n   FlagChange covers the MessageRead, MessageTrash, FlagsSet, and\n   FlagsClear events in [RFC5423].\n\n   Example in the selected mailbox:\n      S: * 99 FETCH (UID 9999 FLAGS ($Junk))\n\n   And in another mailbox, with CONDSTORE in use:\n      S: * STATUS Lists/Lemonade (HIGHESTMODSEQ 65666665 UIDVALIDITY\n      101)\n\n\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                     [Page 9]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n5.2.  MessageNew\n\n   This covers both MessageNew and MessageAppend in [RFC5423].\n\n   If the new/appended message is in the selected mailbox, the server\n   notifies the client by sending an unsolicited EXISTS response,\n   followed by an unsolicited FETCH response containing the information\n   requested by the client.  A FETCH response SHOULD NOT be generated\n   for a new message created by the client on this particular\n   connection, for instance, as the result of an APPEND or COPY command\n   to the selected mailbox performed by the client itself.  The server\n   MAY also send a RECENT response, if the server marks the message as\n   \\Recent.\n\n   Note that a single EXISTS response can be returned for multiple\n   MessageAppend/MessageNew events.\n\n   If a search context is in effect as specified in [RFC5267], an\n   ESEARCH ADDTO will also be generated, if appropriate.  In this case,\n   the EXISTS response MUST precede the ESEARCH response.  Both the\n   NOTIFY command and the SEARCH and SORT commands (see Section 7) can\n   specify attributes to be returned for new messages.  These attributes\n   SHOULD be combined into a single FETCH response.  The server SHOULD\n   avoid sending duplicate data.  The FETCH response(s) MUST follow any\n   ESEARCH ADDTO responses.\n\n   If the new/appended message is in another mailbox, the server sends\n   an unsolicited STATUS (UIDNEXT MESSAGES) response for the relevant\n   mailbox.  If the CONDSTORE extension [RFC4551] and/or the QRESYNC\n   extension [RFC5162] is enabled, the HIGHESTMODSEQ status data item\n   MUST be included in the STATUS response.\n\n   The client SHOULD NOT use FETCH attributes that implicitly set the\n   \\seen flag, or that presuppose the existence of a given bodypart.\n   UID, MODSEQ, FLAGS, ENVELOPE, BODY.PEEK[HEADER.FIELDS... and\n   BODY/BODYSTRUCTURE may be the most useful attributes.\n\n   Note that if a client asks to be notified of MessageNew events with\n   the SELECTED mailbox specifier, the number of messages can increase\n   at any time, and therefore the client cannot refer to a specific\n   message using the MSN/UID '*'.\n\n   Example in the selected mailbox:\n      S: * 444 EXISTS\n      S: * 444 FETCH (UID 9999)\n\n   And in another mailbox, without CONDSTORE enabled:\n      S: * STATUS Lists/Lemonade (UIDNEXT 10002 MESSAGES 503)\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 10]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n5.3.  MessageExpunge\n\n   If the expunged message or messages are in the selected mailbox, the\n   server notifies the client using EXPUNGE (or VANISHED, if [RFC5162]\n   is supported by the server and enabled by the client).\n\n   If a search context is in effect, as specified in [RFC5267], an\n   ESEARCH REMOVEFROM will also be generated, if appropriate.\n\n   If the expunged message or messages are in another mailbox, the\n   server sends an unsolicited STATUS (UIDNEXT MESSAGES) response for\n   the relevant mailbox.  If the QRESYNC [RFC5162] extension is enabled,\n   the HIGHESTMODSEQ data item MUST be included in the STATUS response\n   as well.\n\n   Note that if a client requests MessageExpunge with the SELECTED\n   mailbox specifier, the meaning of an MSN can change at any time, so\n   the client cannot use MSNs in commands anymore.  For example, such a\n   client cannot use FETCH, but has to use UID FETCH.  The meaning of\n   '*' can also change when messages are added or expunged.  A client\n   wishing to keep using MSNs can either use the SELECTED-DELAYED\n   mailbox specifier or can avoid using the MessageExpunge event\n   entirely.\n\n   The MessageExpunge notification covers both MessageExpunge and\n   MessageExpire events from [RFC5423].\n\n   Example in the selected mailbox, without QRESYNC:\n      S: * 444 EXPUNGE\n\n   The same example in the selected mailbox, with QRESYNC:\n      S: * VANISHED 5444\n\n   And in another mailbox, when QRESYNC is not enabled:\n      S: * STATUS misc (UIDNEXT 999 MESSAGES 554)\n\n5.4.  MailboxName\n\n   These notifications are sent if an affected mailbox name was created\n   (with CREATE), deleted (with DELETE), or renamed (with RENAME).  For\n   a server that implements [RFC4314], granting or revocation of the 'l'\n   right to the current user on the affected mailbox MUST be considered\n   mailbox creation or deletion, respectively.  If a mailbox is created\n   or deleted, the mailbox itself and its direct parent (whether it is\n   an existing mailbox or not) are considered to be affected.\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 11]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   The server notifies the client by sending an unsolicited LIST\n   response for each affected mailbox name.  If, after the event, the\n   mailbox name does not refer to a mailbox accessible to the client,\n   the \\Nonexistent flag MUST be included.\n\n   For each LISTable mailbox renamed, the server sends an extended LIST\n   response [RFC5258] for the new mailbox name, containing the OLDNAME\n   extended data item with the old mailbox name.  When a mailbox is\n   renamed, its children are renamed too.  No additional MailboxName\n   events are sent for children in this case.  When INBOX is renamed, a\n   new INBOX is assumed to be created.  No MailboxName event is sent for\n   INBOX in this case.\n\n   If the server automatically subscribes a mailbox when it is created\n   or renamed, then the unsolicited LIST response for each affected\n   subscribed mailbox name MUST include the \\Subscribed attribute (see\n   [RFC5258]).  The server SHOULD also include \\HasChildren or\n   \\HasNoChildren attributes [RFC5258] as appropriate.\n\n   Example of a newly created mailbox (or granting of the 'l' right on\n   the mailbox):\n      S: * LIST () \"/\" \"NewMailbox\"\n\n   And a deleted mailbox (or revocation of the 'l' right on the\n   mailbox):\n      S: * LIST (\\NonExistent) \".\" \"INBOX.DeletedMailbox\"\n\n   Example of a renamed mailbox:\n      S: * LIST () \"/\" \"NewMailbox\" (\"OLDNAME\" (\"OldMailbox\"))\n\n5.5.  SubscriptionChange\n\n   The server notifies the client by sending an unsolicited LIST\n   response for each affected mailbox name.  If and only if the mailbox\n   is subscribed after the event, the \\Subscribed attribute (see\n   [RFC5258]) is included.  Note that in the LIST response, all mailbox\n   attributes MUST be accurately computed (this differs from the\n   behavior of the LSUB command).\n\n   Example:\n      S: * LIST (\\Subscribed) \"/\" \"SubscribedMailbox\"\n\n5.6.  MailboxMetadataChange\n\n   Support for this event type is OPTIONAL unless the METADATA extension\n   [RFC5464] is also supported by the server, in which case support for\n   this event type is REQUIRED.\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 12]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   A client willing to receive unsolicited METADATA responses as a\n   result of using the MailboxMetadataChange event in the NOTIFY command\n   doesn't have to issue ENABLE METADATA.\n\n   The server sends an unsolicited METADATA response (as per Section\n   4.4.2 of [RFC5464]).  If possible, only the changed metadata SHOULD\n   be included, but if the server can't detect a change to a single\n   metadata item, it MAY include all metadata items set on the mailbox.\n   If a metadata item is deleted (set to NIL), it MUST always be\n   included in the METADATA response.\n\n   Example:\n      S: * METADATA \"INBOX\" /shared/comment\n\n5.7.  ServerMetadataChange\n\n   Support for this event type is OPTIONAL unless the METADATA or the\n   METADATA-SERVER extension [RFC5464] is also supported by the server,\n   in which case support for this event type is REQUIRED.\n\n   A client willing to receive unsolicited METADATA responses as a\n   result of using the ServerMetadataChange event in the NOTIFY command\n   doesn't have to issue ENABLE METADATA or ENABLE METADATA-SERVER.\n\n   The server sends an unsolicited METADATA response (as per Section\n   4.4.2 of [RFC5464]).  Only the names of changed metadata entries\n   SHOULD be returned in such METADATA responses.  If a metadata item is\n   deleted (set to NIL), it MUST always be included in the METADATA\n   response.\n\n   Example:\n      S: * METADATA \"\" /shared/comment\n\n5.8.  Notification Overflow\n\n   If the server is unable or unwilling to deliver as many notifications\n   as it is being asked to, it may disable notifications for some or all\n   clients.  It MUST notify these clients by sending an untagged \"OK\n   [NOTIFICATIONOVERFLOW]\" response and behave as if a NOTIFY NONE\n   command had just been received.\n\n   Example:\n      S: * OK [NOTIFICATIONOVERFLOW] ...A comment can go here...\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 13]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n5.9.  ACL (Access Control List) Changes\n\n   Even if NOTIFY succeeds, it is still possible to lose access to the\n   mailboxes being monitored at a later time.  If this happens, the\n   server MUST stop monitoring these mailboxes.  If access is later\n   granted, the server MUST restart event monitoring.\n\n   The server SHOULD return the LIST response with the \\NoAccess name\n   attribute if and when the mailbox loses the 'l' right.  Similarly,\n   the server SHOULD return the LIST response with no \\NoAccess name\n   attribute if the mailbox was previously reported as having \\NoAccess\n   and the 'l' right is later granted.\n\n6.  Mailbox Specification\n\n   Mailboxes to be monitored can be specified in several different ways.\n\n   Only 'SELECTED' and 'SELECTED-DELAYED' (Section 6.1) match the\n   currently selected mailbox.  All other mailbox specifications affect\n   other (non-selected) mailboxes.\n\n   Note that multiple <event-group>s can apply to the same mailbox.  The\n   following example demonstrates this.  In this example, MessageNew and\n   MessageExpunge events are reported for INBOX, due to the first\n   <event-group>.  A SubscriptionChange event will also be reported for\n   INBOX, due to the second <event-group>.\n\n      C: a notify set (mailboxes INBOX (Messagenew messageExpunge))\n         (personal (SubscriptionChange))\n\n   A typical client that supports the NOTIFY extension would ask for\n   events on the selected mailbox and some named mailboxes.\n\n   In the next example, the client asks for FlagChange events for all\n   personal mailboxes except the currently selected mailbox.  This is\n   different from the previous example because SELECTED overrides all\n   other message event definitions for the currently selected mailbox\n   (see Section 3.1).\n\n      C: a notify set (selected (Messagenew (uid flags) messageExpunge))\n         (personal (MessageNew FlagChange MessageExpunge))\n\n6.1.  Mailbox Specifiers Affecting the Currently Selected Mailbox\n\n   Only one of the mailbox specifiers affecting the currently selected\n   mailbox can be specified in any NOTIFY command.  The two such mailbox\n   specifiers (SELECTED and SELECTED-DELAYED) are described below.\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 14]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   Both refer to the mailbox that was selected using either SELECT or\n   EXAMINE (see [RFC3501], Sections 6.3.1 and 6.3.2).  When the IMAP\n   connection is not in the selected state, such mailbox specifiers\n   don't refer to any mailbox.\n\n   The mailbox specifiers only apply to <message-event>s.  It is an\n   error to specify other types of events with either the SELECTED or\n   the SELECTED-DELAYED selector.\n\n6.1.1.  Selected\n\n   The SELECTED mailbox specifier requires the server to send immediate\n   notifications for the currently selected mailbox about all specified\n   <message-event>s.\n\n6.1.2.  Selected-Delayed\n\n   The SELECTED-DELAYED mailbox specifier requires the server to delay a\n   MessageExpunge event until the client issues a command that allows\n   returning information about expunged messages (see Section 7.4.1 of\n   [RFC3501] for more details), for example, till a NOOP or an IDLE\n   command has been issued.  When SELECTED-DELAYED is specified, the\n   server MAY also delay returning other <message-event>s until the\n   client issues one of the commands specified above, or it MAY return\n   them immediately.\n\n6.2.  Personal\n\n   Personal refers to all selectable mailboxes in the user's personal\n   namespace(s), as defined in [RFC2342].\n\n6.3.  Inboxes\n\n   Inboxes refers to all selectable mailboxes in the user's personal\n   namespace(s) to which messages may be delivered by a Message Delivery\n   Agent (MDA) (see [EMAIL-ARCH], particularly Section 4.3.3).\n\n   If the IMAP server cannot easily compute this set, it MUST treat\n   \"inboxes\" as equivalent to \"personal\".\n\n6.4.  Subscribed\n\n   Subscribed refers to all mailboxes subscribed to by the user.\n\n   If the subscription list changes, the server MUST reevaluate the\n   list.\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 15]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n6.5.  Subtree\n\n   Subtree is followed by a mailbox name or list of mailbox names.  A\n   subtree refers to all selectable mailboxes that are subordinate to\n   the specified mailbox plus the specified mailbox itself.\n\n6.6.  Mailboxes\n\n   Mailboxes is followed by a mailbox name or a list of mailbox names.\n   The server MUST NOT do a wildcard expansion.  This means there is no\n   special treatment for the LIST wildcard characters ('*' and '%') if\n   they are present in mailbox names.\n\n7.  Extension to SEARCH and SORT Commands\n\n   If the server that supports the NOTIFY extension also supports\n   CONTEXT=SEARCH and/or CONTEXT=SORT as defined in [RFC5267], the\n   UPDATE return option is extended so that a client can request that\n   FETCH attributes be returned when a new message is added to the\n   context result set.\n\n   For example:\n\n         C: a00 SEARCH RETURN (COUNT UPDATE (UID BODY[HEADER.FIELDS (TO\n            FROM SUBJECT)])) FROM \"boss\"\n         S: * ESEARCH (TAG \"a00\") (COUNT 17)\n         S: a00 OK\n            [...a new message is delivered...]\n         S: * EXISTS 93\n         S: * 93 FETCH (UID 127001 BODY[HEADER.FIELDS (FROM TO SUBJECT)]\n            {76}\n         S: Subject: Re: good morning\n         S: From: myboss@example.org\n         S: To: bob@example.org\n         S:\n         S: )\n         S: * ESEARCH (TAG \"a00\") ADDTO (0 93)\n\n   Note that the EXISTS response MUST precede any FETCH responses, and\n   together they MUST precede the ESEARCH response.\n\n   No untagged FETCH response SHOULD be returned if a message becomes a\n   member of UPDATE SEARCH due to flag or annotation changes.\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 16]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n8.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].  [RFC3501] defines\n   the non-terminals \"capability\", \"command-auth\", \"mailbox\", \"mailbox-\n   data\", \"resp-text-code\", and \"search-key\".  The \"modifier-update\"\n   non-terminal is defined in [RFC5267].  \"mbx-list-oflag\" is defined in\n   [RFC3501] and updated by [RFC5258].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.  For example, the\n   <filter-mailboxes-selected> non-terminal value \"SELECTED\" must be\n   treated in the same way as \"Selected\" or \"selected\".\n\n      capability      =/ \"NOTIFY\"\n\n      command-auth    =/ notify\n\n      notify          = \"NOTIFY\" SP\n                      (notify-set / notify-none)\n\n      notify-set      = \"SET\" [status-indicator] SP event-groups\n                      ; Replace registered notification events\n                      ; with the specified list of events\n\n      notify-none     = \"NONE\"\n                      ; Cancel all registered notification\n                      ; events.  The client is not interested\n                      ; in receiving any events.\n\n      status-indicator = SP \"STATUS\"\n\n      one-or-more-mailbox = mailbox / many-mailboxes\n\n      many-mailboxes  = \"(\" mailbox *(SP mailbox) \")\"\n\n      event-groups    = event-group *(SP event-group)\n\n      event-group     = \"(\" filter-mailboxes SP events \")\"\n                      ;; Only <message-event>s are allowed in <events>\n                      ;; when <filter-mailboxes-selected> is used.\n\n      filter-mailboxes = filter-mailboxes-selected /\n                      filter-mailboxes-other\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 17]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n      filter-mailboxes-other = \"inboxes\" / \"personal\" / \"subscribed\" /\n                      ( \"subtree\" SP one-or-more-mailbox ) /\n                      ( \"mailboxes\" SP one-or-more-mailbox )\n\n      filter-mailboxes-selected = \"selected\" / \"selected-delayed\"\n                      ;; Apply to the currently selected mailbox only.\n                      ;; Only one of them can be specified in a NOTIFY\n                      ;; command.\n\n      events          = ( \"(\" event *(SP event) \")\" ) / \"NONE\"\n                      ;; As in [MSGEVENT].\n                      ;; \"NONE\" means that the client does not wish\n                      ;; to receive any events for the specified\n                      ;; mailboxes.\n\n      event           = message-event /\n                      mailbox-event / user-event / event-ext\n\n      message-event   = ( \"MessageNew\" [SP\n                          \"(\" fetch-att *(SP fetch-att) \")\" ] )\n                      / \"MessageExpunge\"\n                      / \"FlagChange\"\n                      / \"AnnotationChange\"\n                      ;; \"MessageNew\" includes \"MessageAppend\" from\n                      ;; [MSGEVENT]. \"FlagChange\" is any of\n                      ;; \"MessageRead\", \"MessageTrash\", \"FlagsSet\",\n                      ;; \"FlagsClear\" [MSGEVENT]. \"MessageExpunge\"\n                      ;; includes \"MessageExpire\" [MSGEVENT].\n                      ;; MessageNew and MessageExpunge MUST always\n                      ;; be specified together.  If FlagChange is\n                      ;; specified, then MessageNew and MessageExpunge\n                      ;; MUST be specified as well.\n                      ;; The fett-att list may only be present for the\n                      ;; SELECTED/SELECTED-DELAYED mailbox filter\n                      ;; (<filter-mailboxes>).\n\n      mailbox-event   = \"MailboxName\" /\n                      \"SubscriptionChange\" / \"MailboxMetadataChange\"\n                      ; \"SubscriptionChange\" includes\n                      ; MailboxSubscribe and MailboxUnSubscribe.\n                      ; \"MailboxName\" includes MailboxCreate,\n                      ; \"MailboxDelete\" and \"MailboxRename\".\n\n      user-event      = \"ServerMetadataChange\"\n\n      event-ext       = atom\n                      ;; For future extensions\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 18]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n      oldname-extended-item =  \"OLDNAME\" SP \"(\" mailbox \")\"\n                      ;; Extended data item (mbox-list-extended-item)\n                      ;; returned in a LIST response when a mailbox is\n                      ;; renamed.\n                      ;; Note 1: the OLDNAME tag can be returned\n                      ;; with or without surrounding quotes, as per\n                      ;; mbox-list-extended-item-tag production.\n\n      resp-text-code  =/ \"NOTIFICATIONOVERFLOW\" /\n                      unsupported-events-code\n\n      message-event-name   = \"MessageNew\" /\n                      \"MessageExpunge\" / \"FlagChange\" /\n                      \"AnnotationChange\"\n\n      event-name = message-event-name / mailbox-event /\n                      user-event\n\n      unsupported-events-code = \"BADEVENT\"\n                      SP \"(\" event-name *(SP event-name) \")\"\n\n      modifier-update = \"UPDATE\"\n                      [ \"(\" fetch-att *(SP fetch-att) \")\" ]\n\n      mbx-list-oflag =/ \"\\NoAccess\"\n\n9.  Security Considerations\n\n   It is very easy for a client to deny itself service using NOTIFY.\n   Asking for all events on all mailboxes may work on a small server,\n   but with a big server, can swamp the client's network connection or\n   processing capability.  In the worst case, the server's processing\n   could also degrade the service it offers to other clients.\n\n   Server authors should be aware that if a client issues requests and\n   does not listen to the resulting responses, the TCP window can easily\n   fill up, and a careless server might block.  This problem also exists\n   in plain IMAP; however, this extension magnifies the problem.\n\n   This extension makes it possible to retrieve messages immediately\n   when they are added to the mailbox.  This makes it wholly impractical\n   to delete sensitive messages using programs like imapfilter.  Using\n   SIEVE [RFC5228] or similar is much better.\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 19]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n10.  IANA Considerations\n\n   The IANA has added NOTIFY to the list of IMAP extensions.\n\n10.1.  Initial LIST-EXTENDED Extended Data Item Registrations\n\n   The following entry has been added to the LIST-EXTENDED response\n   registry [RFC5258]:\n\n   To: iana@iana.org\n   Subject: Registration of OLDNAME LIST-EXTENDED extended data item\n\n   LIST-EXTENDED extended data item tag: OLDNAME\n\n   LIST-EXTENDED extended data item description: The OLDNAME extended\n      data item describes the old mailbox name for the mailbox\n      identified by the LIST response.\n\n   Which LIST-EXTENDED option(s) (and their types) causes this extended\n      data item to be returned (if any): none\n\n   Published specification : RFC 5465, Section 5.4.\n\n   Security considerations: none\n\n   Intended usage: COMMON\n\n   Person and email address to contact for further information:  Alexey\n      Melnikov <Alexey.Melnikov@isode.com>\n\n   Owner/Change controller: iesg@ietf.org\n\n11.  Acknowledgments\n\n   The authors gratefully acknowledge the help of Peter Coates, Dave\n   Cridland, Mark Crispin, Cyrus Daboo, Abhijit Menon-Sen, Timo\n   Sirainen, and Eric Burger.  In particular, Peter Coates contributed\n   lots of text and useful suggestions to this document.\n\n   Various examples are copied from other RFCs.\n\n   This document builds on one published and two unpublished drafts by\n   the same authors.\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 20]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n12.  Normative References\n\n   [RFC2119]    Bradner, S., \"Key words for use in RFCs to Indicate\n                Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2177]    Leiba, B., \"IMAP4 IDLE command\", RFC 2177, June 1997.\n\n   [RFC2342]    Gahrns, M. and C. Newman, \"IMAP4 Namespace\", RFC 2342,\n                May 1998.\n\n   [RFC3501]    Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n                4rev1\", RFC 3501, March 2003.\n\n   [RFC4314]    Melnikov, A., \"IMAP4 Access Control List (ACL)\n                Extension\", RFC 4314, December 2005.\n\n   [RFC4466]    Melnikov, A. and C. Daboo, \"Collected Extensions to\n                IMAP4 ABNF\", RFC 4466, April 2006.\n\n   [RFC4551]    Melnikov, A. and S. Hole, \"IMAP Extension for\n                Conditional STORE Operation or Quick Flag Changes\n                Resynchronization\", RFC 4551, June 2006.\n\n   [RFC5162]    Melnikov, A., Cridland, D., and C. Wilson, \"IMAP4\n                Extensions for Quick Mailbox Resynchronization\", RFC\n                5162, March 2008.\n\n   [RFC5234]    Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n                Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n                2008.\n\n   [RFC5258]    Leiba, B. and A. Melnikov, \"Internet Message Access\n                Protocol version 4 - LIST Command Extensions\", RFC 5258,\n                June 2008.\n\n   [RFC5267]    Cridland, D. and C. King, \"Contexts for IMAP4\", RFC\n                5267, July 2008.\n\n   [RFC5423]    Newman, C. and R. Gellens, \"Internet Message Store\n                Events\", RFC 5423, Month 2009.\n\n   [RFC5464]    Daboo, C., \"The IMAP METADATA Extension\", RFC 5464,\n                February 2009.\n\n13.  Informative References\n\n   [RFC5228]    Guenther, P., Ed., and T. Showalter, Ed., \"Sieve: An\n                Email Filtering Language\", RFC 5228, January 2008.\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 21]\n\f\nRFC 5465                 IMAP NOTIFY Extension             February 2009\n\n\n   [EMAIL-ARCH] Crocker, D., \"Internet Mail Architecture\", Work in\n                Progress, October 2008.\n\nAuthors' Addresses\n\n   Arnt Gulbrandsen\n   Oryx Mail Systems GmbH\n   Schweppermannstr. 8\n   D-81671 Muenchen\n   Germany\n\n   EMail: arnt@oryx.com\n\n\n   Curtis King\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Curtis.King@isode.com\n\n\n   Alexey Melnikov\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen, et al.         Standards Track                    [Page 22]\n\f\n"
  },
  {
    "path": "rfc/rfc5466.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                        A. Melnikov\nRequest for Comments: 5466                                       C. King\nCategory: Standards Track                                      Isode Ltd\n                                                           February 2009\n\n\n              IMAP4 Extension for Named Searches (Filters)\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (c) 2009 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents (http://trustee.ietf.org/\n   license-info) in effect on the date of publication of this document.\n   Please review these documents carefully, as they describe your rights\n   and restrictions with respect to this document.\n\nAbstract\n\n   The document defines a way to persistently store named IMAP (RFC\n   3501) searches on the server.  Such named searches can be\n   subsequently referenced in a SEARCH or any other command that accepts\n   a search criterion as a parameter.\n\nTable of Contents\n\n   1.  Introduction and Overview . . . . . . . . . . . . . . . . . . . 2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . . . 2\n   3.  IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . . . 2\n     3.1.  FILTER SEARCH Criterion . . . . . . . . . . . . . . . . . . 3\n     3.2.  Managing Filters Using SETMETADATA/GETMETADATA Commands . . 4\n   4.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . . 6\n   5.  Security Considerations . . . . . . . . . . . . . . . . . . . . 6\n   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 7\n   7.  Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . 8\n   8.  Normative References  . . . . . . . . . . . . . . . . . . . . . 8\n\n\n\n\n\nMelnikov & King             Standards Track                     [Page 1]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n1.  Introduction and Overview\n\n   Persistent named searches described in this document allow clients to\n   save favorite searches on the server.  Such saved searches can save\n   bandwidth for clients that need to regularly repeat them.\n\n   The FILTERS IMAP extension adds a new FILTER search criterion for\n   referencing persistent named searches (a.k.a. \"filters\"), as well as\n   reuses GETMETADATA/SETMETADATA commands [METADATA] for listing/\n   creating/updating/deleting such filters.\n\n   A filter can be private (only accessible to the logged-in user) or\n   public (accessible to all logged-in users).  Both a private and a\n   public filter with the same name can exist at the same time.  If both\n   filter types with the same name exist, the FILTER SEARCH criterion\n   (see Section 3.1) MUST use the value of the private filter;\n   otherwise, it MUST use the value of the filter that exists.\n\n   Let us call a pair of filter name and filter type a \"typed filter\".\n   Each typed filter can have a value (which is a valid IMAP SEARCH\n   criteria conforming to ABNF for the \"search-criteria\" non-terminal)\n   and an optional human-readable description.  The SETMETADATA command\n   creates or updates the value and/or the description of a typed\n   filter.\n\n   Values of all search keys stored in a filter MUST be encoded in\n   UTF-8.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   Basic familiarity with the METADATA-SERVER extension [METADATA] and\n   terms defined therein is required to understand this document.\n\n3.  IMAP Protocol Changes\n\n   The IMAP extension for persistent named searches is present in any\n   IMAP4 implementation that advertises \"FILTERS\" as one of the\n   supported capabilities in the CAPABILITY response or response code.\n\n\n\nMelnikov & King             Standards Track                     [Page 2]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n3.1.  FILTER SEARCH Criterion\n\n   The FILTER criterion for the SEARCH command allows a client to\n   reference by name a filter stored on the server.  Such filter was\n   created by setting the server annotation named \"/private/filters/\n   values/<filter_name>\" (or the server annotation \"/shared/filters/\n   values/<filter_name>\", if \"/private/filters/values/<filter_name>\"\n   doesn't exist) using the SETMETADATA command as described in\n   Section 3.2.\n\n   Syntax: FILTER <filter_name>\n\n   When the named filter exists, its search criterion (i.e., the\n   associated entry value) is inserted verbatim instead of the FILTER\n   search-key.  For example, the following SEARCH command\n\n   C: a SEARCH UID 300:900 FILTER on-the-road SINCE \"3-Dec-2002\"\n\n   would be equivalent to the following\n\n   C: a SEARCH UID 300:900 OR SMALLER 5000 FROM \"boss@example.com\"\n   SINCE \"3-Dec-2002\"\n\n   assuming the filter \"on-the-road\" exists and contains the value 'OR\n   SMALLER 5000 FROM \"boss@example.com\"'.\n\n   A reference to a nonexistent or unaccessible (e.g., due to access\n   control restrictions) filter MUST cause failure of the SEARCH command\n   with the tagged NO response that includes the UNDEFINED-FILTER\n   response code followed by the name of the nonexistent/unaccessible\n   filter.\n\n   Note the server SHOULD verify that each search criterion referenced\n   by the FILTER search key is a full and correct search criterion.  For\n   example, the server should fail the SEARCH command if its SEARCH\n   criterion references a filter containing \"OR SMALLER\" search\n   criterion, because this value is lacking one parameter and thus is\n   not a fully specified search criterion.\n\n   Note that a named filter itself can reference another filter using\n   the FILTER search-key.  Implementations MUST be able to perform at\n   least 3 substitution passes on the SEARCH command criterion.  If an\n   implementation allows for more passes, it MUST implement some kind of\n   loop detection.  If an implementation detects a loop or still sees a\n   FILTER search-key after performing at least 3 substitutions, it MUST\n   behave as if the specified filter doesn't exist (as described above).\n\n\n\n\n\nMelnikov & King             Standards Track                     [Page 3]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n   Note that use of the FILTER search key implies the CHARSET \"UTF-8\"\n   parameter to the SEARCH/UID SEARCH command.  If the SEARCH/UID SEARCH\n   command includes the explicit CHARSET parameter with the value other\n   than \"UTF-8\" or \"US-ASCII\", then such command MUST result in the\n   tagged BAD response from the server.  Such tagged response MUST\n   contain the BADCHARSET response code (see [RFC3501]).\n\n3.2.  Managing Filters Using SETMETADATA/GETMETADATA Commands\n\n   Any server compliant with this document MUST either implement the\n   METADATA-SERVER (or METADATA) [METADATA] extension, or implement\n   SETMETADATA/GETMETADATA commands described in [METADATA] so that they\n   work for the case of empty mailbox name (i.e., for managing server\n   annotations) and for the entries specified in this section.\n\n   This document reserves two hierarchies of per-server entries under\n   the \"/private/filters/values\" and \"/shared/filters/values\" roots (see\n   [METADATA]) for storing filter values.  The value of a \"/private/\n   filters/values/<filter_name>\" or a \"/shared/filters/values/\n   <filter_name>\" server annotation is an IMAP SEARCH criteria,\n   conforming to ABNF for the \"search-criteria\" non-terminal.  A name of\n   a filter is governed by the ABNF for the \"filter-name\" non-terminal.\n\n   Note that values of all search keys stored in these entries MUST be\n   encoded in UTF-8.\n\n   A new filter named \"<filter_name>\" can be created (or an existing\n   filter can be modified) by storing a non-NIL value in the \"/private/\n   filters/values/<filter_name>\" server entry (or in the \"/shared/\n   filters/values/<filter_name>\") using the SETMETADATA [METADATA]\n   command.  The server SHOULD verify that each search criterion stored\n   in such a server entry is a full and correct search criterion.\n\n   A filter can be deleted by storing the NIL value in both the\n   \"/private/filters/values/<filter_name>\" and the \"/shared/filters/\n   values/<filter_name>\" entries.\n\n   A filter can be renamed by first creating a filter with the new name\n   (that has the same value as the old one) and then deleting the filter\n   with the old one.\n\n   If both \"/private/filters/values/<filter_name>\" and \"/shared/filters/\n   values/<filter_name>\" server annotations exist, then the value of the\n   \"/private/filters/values/<filter_name>\" is used when evaluating the\n   corresponding FILTER SEARCH key (see Section 3.1).  Otherwise the\n   non-NIL (existent) value is used.\n\n\n\n\n\nMelnikov & King             Standards Track                     [Page 4]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n   If the server is unable to create a new typed filter because the\n   maximum number of allowed filters has already been reached, the\n   server MUST return a tagged NO response with a \"[METADATA TOOMANY]\"\n   response code, as defined in [METADATA].\n\n           C: a007 SETMETADATA \"\" (\"/private/filters/values/on-the-road\"\n               \"OR SMALLER 5000 FROM \\\"boss@example.com\\\"\")\n           S: a007 OK SETMETADATA complete\n\n   Client implementation note: As multiple clients might read and write\n   filter values, it is possible that one client will use a SEARCH key\n   that might not be recognized by another client that tries to present\n   a user interface for editing a filter value.  In order to help other\n   clients to (partially) parse filter values for editing purposes, a\n   client storing a filter value SHOULD use () around any SEARCH key not\n   defined in [RFC3501].  For example, if there is an IMAP extension\n   that defines a new x-dsfa SEARCH key that takes 2 parameters, then\n   the following SEARCH criterion 'from \"@example.com>\" x-dsfa from 5'\n   should be stored as 'from \"@example.com>\" (x-dsfa from 5)'.\n\n   Note that filter names are restricted to a subset of US-ASCII, as\n   described in Section 4.  So they might not always be meaningful to\n   users and thus not necessarily suitable for display purposes.  In\n   order to help with storing human-readable descriptions of filters,\n   this document also reserves two hierarchies of server entries under\n   the \"/private/filters/descriptions\" and \"/shared/filters/\n   descriptions\" roots.  The value of a \"/private/filters/descriptions/\n   <filter_name>\" or a \"/shared/filters/descriptions/<filter_name>\"\n   server annotation is a human-readable description for the\n   <filter_name> filter, encoded in UTF-8 [UTF-8].  If the \"/private/\n   filters/descriptions/<filter_name>\" server annotation exists, its\n   value is used by the client as the filter description.  Otherwise,\n   the value of the \"/shared/filters/descriptions/<filter_name>\" server\n   annotation is used as the filter description.  In the absence of both\n   the \"/private/filters/descriptions/<filter_name>\" and the \"/shared/\n   filters/descriptions/<filter_name>\" entries, the client MAY display\n   the name of the filter as its description.\n\n   The description string SHOULD be annotated with one or more language\n   tags [RFC4646] as specified in Chapter 16.9 of [Unicode].  In the\n   absence of any language tag, the \"i-default\" [RFC2277] language\n   SHOULD be assumed.  Description in multiple languages MAY be present\n   in a single description string.  This is done by concatenating\n   descriptions in multiple languages into a single string, each\n   description prefixed with its language tag, for example\n   \"<ru><...description in Russian...><fr-ca><...description in\n   French...>\".  Note that here <ru> is a language tag consisting of 3\n   Unicode characters: <U+E0001>, <U+E0072>, <U+E0075>; and <fr-ca> is a\n\n\n\nMelnikov & King             Standards Track                     [Page 5]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n   language tag consisting of 6 Unicode characters: <U+E0001>,\n   <U+E0066>, <U+E0072>, <U+E002D>, <U+E0063>, <U+E0061>.\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   [RFC3501] or [IMAPABNF].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   capability            =/ \"FILTERS\"\n\n   search-criteria       =  search-key *(SP search-key)\n\n   search-key            =/  \"FILTER\" SP filter-name\n                         ;; New SEARCH criterion for referencing filters\n\n   filter-name           =  1*<any ATOM-CHAR except \"/\">\n                         ;; Note that filter-name disallows UTF-8 or\n                         ;; the following characters: \"(\", \")\", \"{\",\n                         ;; \" \", \"%\", \"*\", \"]\".  See definition of\n                         ;; ATOM-CHAR [RFC3501].\n\n   resp-text-code        =/  \"UNDEFINED-FILTER\" SP filter-name\n\n5.  Security Considerations\n\n   General issues relevant to [RFC3501] (in particular to the SEARCH\n   command) and METADATA-SERVER extension [METADATA] are also relevant\n   to this document.\n\n   Note that excessive use of filters can potentially simplify denial-\n   of-service attacks, especially if combined with poor implementations\n   and lack of loop detection (i.e., detection of filters referencing\n   each other to create a loop).  Servers that allow for anonymous\n   access SHOULD NOT allow anonymous users to create/edit/delete\n   filters.\n\n   Also note that stored filters can potentially disclose personal\n   information about users.  When confidentiality of such information is\n   important, clients MUST use TLS and/or SASL security layer (or\n   similar) as recommended in [RFC3501].  Also, clients should use\n\n\n\nMelnikov & King             Standards Track                     [Page 6]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n   private filters instead of public, unless they desire to share such\n   information with other users.\n\n   As always, it is important to thoroughly test clients and servers\n   when implementing this extension.\n\n6.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  The IMAP4 capabilities registry is\n   available from http://www.iana.org.\n\n   This document defines the FILTERS IMAP capability.  IANA has added it\n   to the registry.\n\n   IANA has added the following 4 entries to the [METADATA] registry:\n\n   To:  iana@iana.org\n   Subject:  IMAP METADATA Entry Registration\n   Type:  Server\n   Name:  /private/filters/values/<filter_name>\n   Description:  Contains an IMAP SEARCH criteria.  Defined in RFC 5466.\n   Content-type:  text/plain; charset=utf-8\n   Contact person:  Alexey Melnikov\n   Email:  alexey.melnikov@isode.com\n\n   To:  iana@iana.org\n   Subject:  IMAP METADATA Entry Registration\n   Type:  Server\n   Name:  /shared/filters/values/<filter_name>\n   Description:  Contains an IMAP SEARCH criterion.  Defined in RFC\n      5466.\n   Content-type:  text/plain; charset=utf-8\n   Contact person:  Alexey Melnikov\n   Email:  alexey.melnikov@isode.com\n\n   To:  iana@iana.org\n   Subject:  IMAP METADATA Entry Registration\n   Type:  Server\n   Name:  /private/filters/descriptions/<filter_name>\n   Description:  Contains a user-specific human-readable description of\n      a named SEARCH criterion stored in the /private/filters/values/\n      <filter_name> or /shared/filters/values/<filter_name> annotation.\n      The value is in UTF-8.  Defined in RFC 5466.\n   Content-type:  text/plain; charset=utf-8\n   Contact person:  Alexey Melnikov\n   Email:  alexey.melnikov@isode.com\n\n\n\n\nMelnikov & King             Standards Track                     [Page 7]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\n   To:  iana@iana.org\n   Subject:  IMAP METADATA Entry Registration\n   Type:  Server\n   Name:  /shared/filters/descriptions/<filter_name>\n   Description:  Contains a global (shared among all users) human-\n      readable description of a named SEARCH criterion stored in the\n      /private/filters/values/<filter_name> or /shared/filters/values/\n      <filter_name> annotation.  The value is in UTF-8.  Defined in RFC\n      5466.\n   Content-type:  text/plain; charset=utf-8\n   Contact person:  Alexey Melnikov\n   Email:  alexey.melnikov@isode.com\n\n7.  Acknowledgments\n\n   Thanks to David Cridland, Arnt Gulbrandsen, Chris Newman, and Timo\n   Sirainen for comments and suggestions on this document.  Special\n   thank you to Brian E. Carpenter for the GenArt review.\n\n8.  Normative References\n\n   [ABNF]      Crocker, D., Ed. and P. Overell, Ed., \"Augmented BNF for\n               Syntax Specifications: ABNF\", STD 68, RFC 5234,\n               January 2008.\n\n   [IMAPABNF]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n               ABNF\", RFC 4466, April 2006.\n\n   [METADATA]  Daboo, C., \"The IMAP METADATA Extension\", RFC 5464,\n               February 2009.\n\n   [RFC2119]   Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2277]   Alvestrand, H., \"IETF Policy on Character Sets and\n               Languages\", BCP 18, RFC 2277, January 1998.\n\n   [RFC3501]   Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n               4rev1\", RFC 3501, March 2003.\n\n   [RFC4646]   Phillips, A. and M. Davis, \"Tags for Identifying\n               Languages\", BCP 47, RFC 4646, September 2006.\n\n   [UTF-8]     Yergeau, F., \"UTF-8, a transformation format of ISO\n               10646\", STD 63, RFC 3629, November 2003.\n\n   [Unicode]   \"The Unicode Standard 5.0\", Unicode 5.0, 2007,\n               <http://www.unicode.org/versions/Unicode5.0.0/>.\n\n\n\nMelnikov & King             Standards Track                     [Page 8]\n\f\nRFC 5466                      IMAP Filters                 February 2009\n\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Curtis King\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Curtis.King@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & King             Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc5530.txt",
    "content": "\n\n\n\n\n\nNetwork Working Group                                     A. Gulbrandsen\nRequest for Comments: 5530                        Oryx Mail Systems GmbH\nCategory: Standards Track                                       May 2009\n\n\n                          IMAP Response Codes\n\nStatus of This Memo\n\n   This document specifies an Internet standards track protocol for the\n   Internet community, and requests discussion and suggestions for\n   improvements.  Please refer to the current edition of the \"Internet\n   Official Protocol Standards\" (STD 1) for the standardization state\n   and status of this protocol.  Distribution of this memo is unlimited.\n\nCopyright Notice\n\n   Copyright (c) 2009 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents in effect on the date of\n   publication of this document (http://trustee.ietf.org/license-info).\n   Please review these documents carefully, as they describe your rights\n   and restrictions with respect to this document.\n\nAbstract\n\n   IMAP responses consist of a response type (OK, NO, BAD), an optional\n   machine-readable response code, and a human-readable text.\n\n   This document collects and documents a variety of machine-readable\n   response codes, for better interoperation and error reporting.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 1]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n1.  Introduction\n\n   Section 7.1 of [RFC3501] defines a number of response codes that can\n   help tell an IMAP client why a command failed.  However, experience\n   has shown that more codes are useful.  For example, it is useful for\n   a client to know that an authentication attempt failed because of a\n   server problem as opposed to a password problem.\n\n   Currently, many IMAP servers use English-language, human-readable\n   text to describe these errors, and a few IMAP clients attempt to\n   translate this text into the user's language.\n\n   This document names a variety of errors as response codes.  It is\n   based on errors that have been checked and reported on in some IMAP\n   server implementations, and on the needs of some IMAP clients.\n\n   This document doesn't require any servers to test for these errors or\n   any clients to test for these names.  It only names errors for better\n   reporting and handling.\n\n2.  Conventions Used in This Document\n\n   Formal syntax is defined by [RFC5234] as modified by [RFC3501].\n\n   Example lines prefaced by \"C:\" are sent by the client and ones\n   prefaced by \"S:\" by the server.  \"[...]\" means elision.\n\n3.  Response Codes\n\n   This section defines all the new response codes.  Each definition is\n   followed by one or more examples.\n\n   UNAVAILABLE\n         Temporary failure because a subsystem is down.  For example, an\n         IMAP server that uses a Lightweight Directory Access Protocol\n         (LDAP) or Radius server for authentication might use this\n         response code when the LDAP/Radius server is down.\n\n         C: a LOGIN \"fred\" \"foo\"\n         S: a NO [UNAVAILABLE] User's backend down for maintenance\n\n   AUTHENTICATIONFAILED\n         Authentication failed for some reason on which the server is\n         unwilling to elaborate.  Typically, this includes \"unknown\n         user\" and \"bad password\".\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 2]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n         This is the same as not sending any response code, except that\n         when a client sees AUTHENTICATIONFAILED, it knows that the\n         problem wasn't, e.g., UNAVAILABLE, so there's no point in\n         trying the same login/password again later.\n\n         C: b LOGIN \"fred\" \"foo\"\n         S: b NO [AUTHENTICATIONFAILED] Authentication failed\n\n   AUTHORIZATIONFAILED\n         Authentication succeeded in using the authentication identity,\n         but the server cannot or will not allow the authentication\n         identity to act as the requested authorization identity.  This\n         is only applicable when the authentication and authorization\n         identities are different.\n\n         C: c1 AUTHENTICATE PLAIN\n         [...]\n         S: c1 NO [AUTHORIZATIONFAILED] No such authorization-ID\n\n         C: c2 AUTHENTICATE PLAIN\n         [...]\n         S: c2 NO [AUTHORIZATIONFAILED] Authenticator is not an admin\n\n\n   EXPIRED\n         Either authentication succeeded or the server no longer had the\n         necessary data; either way, access is no longer permitted using\n         that passphrase.  The client or user should get a new\n         passphrase.\n\n         C: d login \"fred\" \"foo\"\n         S: d NO [EXPIRED] That password isn't valid any more\n\n   PRIVACYREQUIRED\n         The operation is not permitted due to a lack of privacy.  If\n         Transport Layer Security (TLS) is not in use, the client could\n         try STARTTLS (see Section 6.2.1 of [RFC3501]) and then repeat\n         the operation.\n\n         C: d login \"fred\" \"foo\"\n         S: d NO [PRIVACYREQUIRED] Connection offers no privacy\n\n         C: d select inbox\n         S: d NO [PRIVACYREQUIRED] Connection offers no privacy\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 3]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n   CONTACTADMIN\n         The user should contact the system administrator or support\n         desk.\n\n         C: e login \"fred\" \"foo\"\n         S: e OK [CONTACTADMIN]\n\n   NOPERM\n         The access control system (e.g., Access Control List (ACL), see\n         [RFC4314]) does not permit this user to carry out an operation,\n         such as selecting or creating a mailbox.\n\n         C: f select \"/archive/projects/experiment-iv\"\n         S: f NO [NOPERM] Access denied\n\n   INUSE\n         An operation has not been carried out because it involves\n         sawing off a branch someone else is sitting on.  Someone else\n         may be holding an exclusive lock needed for this operation, or\n         the operation may involve deleting a resource someone else is\n         using, typically a mailbox.\n\n         The operation may succeed if the client tries again later.\n\n         C: g delete \"/archive/projects/experiment-iv\"\n         S: g NO [INUSE] Mailbox in use\n\n   EXPUNGEISSUED\n         Someone else has issued an EXPUNGE for the same mailbox.  The\n         client may want to issue NOOP soon.  [RFC2180] discusses this\n         subject in depth.\n\n         C: h search from fred@example.com\n         S: * SEARCH 1 2 3 5 8 13 21 42\n         S: h OK [EXPUNGEISSUED] Search completed\n\n   CORRUPTION\n         The server discovered that some relevant data (e.g., the\n         mailbox) are corrupt.  This response code does not include any\n         information about what's corrupt, but the server can write that\n         to its logfiles.\n\n         C: i select \"/archive/projects/experiment-iv\"\n         S: i NO [CORRUPTION] Cannot open mailbox\n\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 4]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n   SERVERBUG\n         The server encountered a bug in itself or violated one of its\n         own invariants.\n\n         C: j select \"/archive/projects/experiment-iv\"\n         S: j NO [SERVERBUG] This should not happen\n\n   CLIENTBUG\n         The server has detected a client bug.  This can accompany all\n         of OK, NO, and BAD, depending on what the client bug is.\n\n         C: k1 select \"/archive/projects/experiment-iv\"\n         [...]\n         S: k1 OK [READ-ONLY] Done\n         C: k2 status \"/archive/projects/experiment-iv\" (messages)\n         [...]\n         S: k2 OK [CLIENTBUG] Done\n\n   CANNOT\n         The operation violates some invariant of the server and can\n         never succeed.\n\n         C: l create \"///////\"\n         S: l NO [CANNOT] Adjacent slashes are not supported\n\n   LIMIT\n         The operation ran up against an implementation limit of some\n         kind, such as the number of flags on a single message or the\n         number of flags used in a mailbox.\n\n         C: m STORE 42 FLAGS f1 f2 f3 f4 f5 ... f250\n         S: m NO [LIMIT] At most 32 flags in one mailbox supported\n\n   OVERQUOTA\n         The user would be over quota after the operation.  (The user\n         may or may not be over quota already.)\n\n         Note that if the server sends OVERQUOTA but doesn't support the\n         IMAP QUOTA extension defined by [RFC2087], then there is a\n         quota, but the client cannot find out what the quota is.\n\n         C: n1 uid copy 1:* oldmail\n         S: n1 NO [OVERQUOTA] Sorry\n\n         C: n2 uid copy 1:* oldmail\n         S: n2 OK [OVERQUOTA] You are now over your soft quota\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 5]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n   ALREADYEXISTS\n         The operation attempts to create something that already exists,\n         such as when the CREATE or RENAME directories attempt to create\n         a mailbox and there is already one of that name.\n\n         C: o RENAME this that\n         S: o NO [ALREADYEXISTS] Mailbox \"that\" already exists\n\n   NONEXISTENT\n         The operation attempts to delete something that does not exist.\n         Similar to ALREADYEXISTS.\n\n         C: p RENAME this that\n         S: p NO [NONEXISTENT] No such mailbox\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].  [RFC3501] defines\n   the non-terminal \"resp-text-code\".\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper or lowercase characters to define\n   token strings is for editorial clarity only.\n\n        resp-text-code =/ \"UNAVAILABLE\" / \"AUTHENTICATIONFAILED\" /\n                         \"AUTHORIZATIONFAILED\" / \"EXPIRED\" /\n                         \"PRIVACYREQUIRED\" / \"CONTACTADMIN\" / \"NOPERM\" /\n                         \"INUSE\" / \"EXPUNGEISSUED\" / \"CORRUPTION\" /\n                         \"SERVERBUG\" / \"CLIENTBUG\" / \"CANNOT\" /\n                         \"LIMIT\" / \"OVERQUOTA\" / \"ALREADYEXISTS\" /\n                         \"NONEXISTENT\"\n\n5.  Security Considerations\n\n   Revealing information about a passphrase to unauthenticated IMAP\n   clients causes bad karma.\n\n   Response codes are easier to parse than human-readable text.  This\n   can amplify the consequences of an information leak.  For example,\n   selecting a mailbox can fail because the mailbox doesn't exist,\n   because the user doesn't have the \"l\" right (right to know the\n   mailbox exists) or \"r\" right (right to read the mailbox).  If the\n   server sent different responses in the first two cases in the past,\n   only malevolent clients would discover it.  With response codes it's\n   possible, perhaps probable, that benevolent clients will forward the\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 6]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n   leaked information to the user.  Server authors are encouraged to be\n   particularly careful with the NOPERM and authentication-related\n   responses.\n\n6.  IANA Considerations\n\n   The IANA has created the IMAP Response Codes registry.  The registry\n   has been populated with the following codes:\n\n      NEWNAME              RFC 2060 (obsolete)\n      REFERRAL             RFC 2221\n      ALERT                RFC 3501\n      BADCHARSET           RFC 3501\n      PARSE                RFC 3501\n      PERMANENTFLAGS       RFC 3501\n      READ-ONLY            RFC 3501\n      READ-WRITE           RFC 3501\n      TRYCREATE            RFC 3501\n      UIDNEXT              RFC 3501\n      UIDVALIDITY          RFC 3501\n      UNSEEN               RFC 3501\n      UNKNOWN-CTE          RFC 3516\n      UIDNOTSTICKY         RFC 4315\n      APPENDUID            RFC 4315\n      COPYUID              RFC 4315\n      URLMECH              RFC 4467\n      TOOBIG               RFC 4469\n      BADURL               RFC 4469\n      HIGHESTMODSEQ        RFC 4551\n      NOMODSEQ             RFC 4551\n      MODIFIED             RFC 4551\n      COMPRESSIONACTIVE    RFC 4978\n      CLOSED               RFC 5162\n      NOTSAVED             RFC 5182\n      BADCOMPARATOR        RFC 5255\n      ANNOTATE             RFC 5257\n      ANNOTATIONS          RFC 5257\n      TEMPFAIL             RFC 5259\n      MAXCONVERTMESSAGES   RFC 5259\n      MAXCONVERTPARTS      RFC 5259\n      NOUPDATE             RFC 5267\n      METADATA             RFC 5464\n      NOTIFICATIONOVERFLOW RFC 5465\n      BADEVENT             RFC 5465\n      UNDEFINED-FILTER     RFC 5466\n      UNAVAILABLE          RFC 5530\n      AUTHENTICATIONFAILED RFC 5530\n      AUTHORIZATIONFAILED  RFC 5530\n\n\n\nGulbrandsen                 Standards Track                     [Page 7]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n      EXPIRED              RFC 5530\n      PRIVACYREQUIRED      RFC 5530\n      CONTACTADMIN         RFC 5530\n      NOPERM               RFC 5530\n      INUSE                RFC 5530\n      EXPUNGEISSUED        RFC 5530\n      CORRUPTION           RFC 5530\n      SERVERBUG            RFC 5530\n      CLIENTBUG            RFC 5530\n      CANNOT               RFC 5530\n      LIMIT                RFC 5530\n      OVERQUOTA            RFC 5530\n      ALREADYEXISTS        RFC 5530\n      NONEXISTENT          RFC 5530\n\n   The new registry can be extended by sending a registration request to\n   IANA.  IANA will forward this request to a Designated Expert,\n   appointed by the responsible IESG Area Director, CCing it to the IMAP\n   Extensions mailing list at <ietf-imapext@imc.org> (or a successor\n   designated by the Area Director).  After either allowing 30 days for\n   community input on the IMAP Extensions mailing list or a successful\n   IETF Last Call, the expert will determine the appropriateness of the\n   registration request and either approve or disapprove the request by\n   sending a notice of the decision to the requestor, CCing the IMAP\n   Extensions mailing list and IANA.  A denial notice must be justified\n   by an explanation, and, in cases where it is possible, concrete\n   suggestions on how the request can be modified so as to become\n   acceptable should be provided.\n\n   For each response code, the registry contains a list of relevant RFCs\n   that describe (or extend) the response code and an optional response\n   code status description, such as \"obsolete\" or \"reserved to prevent\n   collision with deployed software\".  (Note that in the latter case,\n   the RFC number can be missing.)  Presence of the response code status\n   description means that the corresponding response code is NOT\n   RECOMMENDED for widespread use.\n\n   The intention is that any future allocation will be accompanied by a\n   published RFC (including direct submissions to the RFC Editor).  But\n   in order to allow for the allocation of values prior to the RFC being\n   approved for publication, the Designated Expert can approve\n   allocations once it seems clear that an RFC will be published, for\n   example, before requesting IETF LC for the document.\n\n   The Designated Expert can also approve registrations for response\n   codes used in deployed software when no RFC exists.  Such\n   registrations must be marked as \"reserved to prevent collision with\n   deployed software\".\n\n\n\nGulbrandsen                 Standards Track                     [Page 8]\n\f\nRFC 5530                  IMAP Response Codes                   May 2009\n\n\n   Response code registrations may not be deleted; response codes that\n   are no longer believed appropriate for use (for example, if there is\n   a problem with the syntax of said response code or if the\n   specification describing it was moved to Historic) should be marked\n   \"obsolete\" in the registry, clearly marking the lists published by\n   IANA.\n\n7.  Acknowledgements\n\n   Peter Coates, Mark Crispin, Philip Guenther, Alexey Melnikov, Ken\n   Murchison, Chris Newman, Timo Sirainen, Philip Van Hoof, Dale\n   Wiggins, and Sarah Wilkin helped with this document.\n\n8.  References\n\n8.1.  Normative References\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC5234]  Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n9.  Informative References\n\n   [RFC2087]  Myers, J., \"IMAP4 QUOTA extension\", RFC 2087, January\n              1997.\n\n   [RFC2180]  Gahrns, M., \"IMAP4 Multi-Accessed Mailbox Practice\", RFC\n              2180, July 1997.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\nAuthor's Address\n\n   Arnt Gulbrandsen\n   Oryx Mail Systems GmbH\n   Schweppermannstr. 8\n   D-81671 Muenchen\n   Germany\n\n   Fax: +49 89 4502 9758\n   EMail: arnt@oryx.com\n\n\n\n\n\n\nGulbrandsen                 Standards Track                     [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc5788.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                       A. Melnikov\nRequest for Comments: 5788                                   D. Cridland\nCategory: Standards Track                                  Isode Limited\nISSN: 2070-1721                                               March 2010\n\n\n                         IMAP4 Keyword Registry\n\nAbstract\n\n   The aim of this document is to establish a new IANA registry for IMAP\n   keywords and to define a procedure for keyword registration, in order\n   to improve interoperability between different IMAP clients.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc5788.\n\nCopyright Notice\n\n   Copyright (c) 2010 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 1]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\nTable of Contents\n\n   1. Introduction ....................................................2\n   2. Conventions Used in This Document ...............................2\n   3. IANA Considerations .............................................3\n      3.1. Review Guidelines for the Designated Expert Reviewer .......4\n      3.2. Comments on IMAP Keywords' Registrations ...................5\n      3.3. Change Control .............................................5\n      3.4. Initial Registrations ......................................6\n           3.4.1. $MDNSent IMAP Keyword Registration ..................6\n           3.4.2. $Forwarded IMAP Keyword Registration ................7\n           3.4.3. $SubmitPending IMAP Keyword Registration ............8\n           3.4.4. $Submitted IMAP Keyword Registration ................9\n   4. Security Considerations ........................................10\n   5. Acknowledgements ...............................................10\n   6. References .....................................................10\n      6.1. Normative References ......................................10\n      6.2. Informative References ....................................11\n\n1.  Introduction\n\n   IMAP keywords [RFC3501] are boolean named flags that can be used by\n   clients to annotate messages in an IMAP mailbox.  Although IMAP\n   keywords are an optional feature of IMAP, the majority of IMAP\n   servers can store arbitrary keywords.  Many mainstream IMAP clients\n   use a limited set of specific keywords, and some can manage (create,\n   edit, display) arbitrary IMAP keywords.\n\n   Over the years, some IMAP keywords have become de-facto standards,\n   with some specific semantics associated with them.  In some cases,\n   different client implementors decided to define and use keywords with\n   different names, but the same semantics.  Some server implementors\n   decided to map such keywords automatically in order to improve cross-\n   client interoperability.\n\n   In other cases, the same keywords have been used with different\n   semantics, thus causing interoperability problems.\n\n   This document attempts to prevent further incompatible uses of IMAP\n   keywords by establishing an \"IMAP Keywords\" registry and allocating a\n   special prefix for standardized keywords.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [Kwds].\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 2]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n3.  IANA Considerations\n\n   IANA has established a new registry for IMAP keywords.\n\n   Registration of an IMAP keyword is requested by filling in the\n   following template and following the instructions on the IANA pages\n   for the registry to submit it to IANA:\n\n   Subject:    Registration of IMAP keyword X\n\n   IMAP keyword name:\n\n   Purpose (description):\n\n   Private or Shared on a server:  (One of PRIVATE, SHARED, or BOTH.\n                                   PRIVATE means that each different\n                                   user has a distinct copy of the\n                                   keyword.  SHARED means that all\n                                   different users see the same value of\n                                   the keyword.  BOTH means that an IMAP\n                                   server can have the keyword as either\n                                   private or shared.)\n\n   Is it an advisory keyword or may it cause an automatic action:\n\n   When/by whom the keyword is set/cleared:\n\n   Related keywords:  (for example, \"mutually exclusive with keywords Y\n                      and Z\")\n\n   Related IMAP capabilities:\n\n   Security considerations:\n\n   Published specification (recommended):\n\n   Person & email address to contact for further information:\n\n   Intended usage:  (One of COMMON, LIMITED USE, or DEPRECATED (i.e.,\n                    not recommended for use))\n\n   Owner/Change controller:  (MUST be \"IESG\" for any \"common use\"\n                             keyword registration specified in an IETF\n                             Review document.  See definition of \"common\n                             use\" below in this section.  When the\n                             Owner/Change controller is not a\n                             Standardization Organization, the\n                             registration request MUST make it clear if\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 3]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n                             the registration is controlled by a\n                             company, or the individual performing the\n                             registration.)\n\n   Note:       (Any other information that the author deems interesting\n               may be added here, for example, if the keyword(s) is\n               supported by existing clients.)\n\n   Registration of an IMAP keyword requires Expert Review [RFC5226].\n   Registration of any IMAP keyword is initiated by posting a\n   registration request to the Message Organization WG mailing list\n   <morg@ietf.org> (or its replacement as chosen by the responsible\n   Application Area Director) and CCing IANA (<iana@iana.org>).  After\n   allowing for at least two weeks for community input on the designated\n   mailing list, the expert will determine the appropriateness of the\n   registration request and either approve or disapprove the request\n   with notice to the requestor, the mailing list, and IANA.  Any\n   refusal must come with a clear explanation.\n\n   The IESG appoints one or more Expert Reviewers for the IMAP keyword\n   registry established by this document.\n\n   The Expert Reviewer should strive for timely reviews.  The Expert\n   Reviewer should take no longer than six weeks to make and announce\n   the decision, or notify the mailing list that more time is required.\n\n   Decisions (or lack of) made by an Expert Reviewer can be first\n   appealed to Application Area Directors and, if the appellant is not\n   satisfied with the response, to the full IESG.\n\n   There are two types of IMAP keywords in the \"IMAP Keywords\" registry:\n   intended for \"common use\" and vendor-/organization-specific use (also\n   known as \"limited use\").  An IMAP keyword is said to be for \"common\n   use\" if it is reasonably expected to be implemented in at least two\n   independent client implementations.  The two types of IMAP keywords\n   have different levels of requirements for registration (see below).\n\n3.1.  Review Guidelines for the Designated Expert Reviewer\n\n   Expert Reviewers should focus on the following requirements.\n\n   Registration of a vendor-/organization-specific (\"limited use\") IMAP\n   keyword is easier.  The Expert Reviewer only needs to check that the\n   requested name doesn't conflict with an already registered name, and\n   that the name is not too generic, misleading, etc.  The Expert\n   Reviewer MAY request the IMAP keyword name change before approving\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 4]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   the registration.  The Expert Reviewer SHOULD refuse a registration\n   if there is an already registered IMAP keyword that serves the same\n   purpose, but has a different name.\n\n   When registering an IMAP keyword for \"common use\", the Expert\n   Reviewer performs the checks described for vendor-/\n   organization-specific IMAP keywords, plus additional checks as\n   detailed below.\n\n   Keywords intended for \"common use\" SHOULD start with the \"$\" prefix.\n   (Note that this is a SHOULD because some of the commonly used IMAP\n   keywords in widespread use don't follow this convention.)\n\n   IMAP keywords intended for \"common use\" SHOULD be standardized in\n   IETF Review [RFC5226] documents.  (Note that IETF Review documents\n   still require Expert Review.)\n\n   Values in the \"IMAP Keywords\" IANA registry intended for \"common use\"\n   must be clearly documented and likely to ensure interoperability.\n   They must be useful, not harmful to the Internet.  In cases when an\n   IMAP keyword being registered is already deployed, Expert Reviewers\n   should favor registering it over requiring perfect documentation\n   and/or requesting a change to the name of the IMAP keyword.\n\n   The Expert Reviewer MAY automatically \"upgrade\" registration requests\n   for a \"limited use\" IMAP keyword to \"common use\" level.  The Expert\n   Reviewer MAY also request that a registration targeted for \"common\n   use\" be registered as \"limited use\" instead.\n\n3.2.  Comments on IMAP Keywords' Registrations\n\n   Comments on registered IMAP keywords should be sent to both the\n   \"owner\" of the mechanism and to the mailing list designated to IMAP\n   keyword review (see Section 3).  This improves the chances of getting\n   a timely response.\n\n   Submitters of comments may, after a reasonable attempt to contact the\n   owner and after soliciting comments on the IMAP mailing list, request\n   the designated Expert Reviewer to attach their comment to the IMAP\n   keyword registration itself.  The procedure is similar to requesting\n   an Expert Review for the affected keyword.\n\n3.3.  Change Control\n\n   Once an IMAP keyword registration has been published by IANA, the\n   owner may request a change to its definition.  The change request\n   (including a change to the \"intended usage\" field) follows the same\n   procedure as the initial registration request, with the exception of\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 5]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   changes to the \"Person & email address to contact for further\n   information\" and \"Owner/Change controller\" fields.  The latter can be\n   changed by the owner by informing IANA; this can be done without\n   discussion or review.\n\n   The IESG may reassign responsibility for an IMAP keyword.  The most\n   common case of this will be to enable clarifications to be made to\n   keywords where the owner of the registration has died, moved out of\n   contact, or is otherwise unable to make changes that are important to\n   the community.\n\n   IMAP keyword registrations MUST NOT be deleted; keywords that are no\n   longer believed appropriate for use can be declared DEPRECATED by a\n   change to their \"intended usage\" field.\n\n   The IESG is considered the owner of all \"common use\" IMAP keywords\n   that are published in an IETF Review document.\n\n3.4.  Initial Registrations\n\n   IANA has registered the IMAP keywords specified in following\n   subsections in the registry established by this document.\n\n3.4.1.  $MDNSent IMAP Keyword Registration\n\n   Subject:    Registration of IMAP keyword $MDNSent\n\n\n   IMAP keyword name:  $MDNSent\n\n   Purpose (description):  Specifies that a Message Disposition\n                           Notification (MDN) must not be sent for any\n                           message annotated with the $MDNSent IMAP\n                           keyword.\n\n   Private or Shared on a server:  SHARED\n\n   Is it an advisory keyword or may it cause an automatic action:\n                           This keyword can cause automatic action by\n                           the client.  See [RFC3503] for more details.\n\n   When/by whom the keyword is set/cleared:\n                           This keyword is set by an IMAP client when it\n                           decides to act on an MDN request, or when\n                           uploading a sent or draft message.  It can\n                           also be set by a delivery agent.  Once set,\n                           the flag SHOULD NOT be cleared.\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 6]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   Related keywords:  None\n\n   Related IMAP capabilities:  None\n\n   Security considerations:  See Section 6 of [RFC3503]\n\n   Published specification (recommended):  [RFC3503]\n\n   Person & email address to contact for further information:\n                           Alexey Melnikov <alexey.melnikov@isode.com>\n\n   Intended usage:  COMMON\n\n   Owner/Change controller:  IESG\n\n   Note:\n\n3.4.2.  $Forwarded IMAP Keyword Registration\n\n   Subject:    Registration of the IMAP keyword $Forwarded\n\n   IMAP keyword name:  $Forwarded\n\n   Purpose (description):  $Forwarded is used by several IMAP clients to\n                           specify that the message was resent to\n                           another email address, embedded within or\n                           attached to a new message.  This keyword is\n                           set by the mail client when it successfully\n                           forwards the message to another email\n                           address.  Typical usage of this keyword is to\n                           show a different (or additional) icon for a\n                           message that has been forwarded.\n\n   Private or Shared on a server:  BOTH\n\n   Is it an advisory keyword or may it cause an automatic action:\n                           advisory\n\n   When/by whom the keyword is set/cleared:\n                           This keyword can be set by either a delivery\n                           agent or a mail client.  Once set, the flag\n                           SHOULD NOT be cleared.  Notes: There is no\n                           way to tell if a message with $Forwarded\n                           keyword set was forwarded more than once.\n\n   Related keywords:  None\n\n   Related IMAP capabilities:  None\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 7]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   Security considerations:  A server implementing this keyword as a\n                             shared keyword may disclose that a\n                             confidential message was forwarded.\n\n   Published specification (recommended):  [RFC5550]\n\n   Person & email address to contact for further information:\n                           Alexey Melnikov <alexey.melnikov@isode.com>\n\n   Intended usage:  COMMON\n\n   Owner/Change controller:  IESG\n\n   Note:\n\n3.4.3.  $SubmitPending IMAP Keyword Registration\n\n   Subject:    Registration of IMAP keyword $SubmitPending\n\n   IMAP keyword name:  $SubmitPending\n\n   Purpose (description):  The $SubmitPending IMAP keyword designates\n                           the message as awaiting to be submitted.\n                           This keyword allows storing messages waiting\n                           to be submitted in the same mailbox where\n                           messages that were already submitted and/or\n                           are being edited are stored.\n\n                           A message that has both $Submitted and\n                           $SubmitPending IMAP keywords set is a message\n                           being actively submitted.\n\n   Private or Shared on a server:  SHARED\n\n   Is it an advisory keyword or may it cause an automatic action:\n                            This keyword can cause automatic action by\n                           the client.  See Section 5.10 of [RFC5550]\n                           for more details.\n\n   When/by whom the keyword is set/cleared:\n                           This keyword is set by a mail client when it\n                           decides that the message needs to be sent\n                           out.\n\n   Related keywords:  $Submitted\n\n   Related IMAP capabilities:  None\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 8]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   Security considerations:  A server implementing this keyword as a\n                             shared keyword may disclose that a\n                             confidential message is scheduled to be\n                             sent out or is being actively sent out.\n\n   Published specification (recommended):  [RFC5550]\n\n   Person & email address to contact for further information:\n                           Alexey Melnikov <alexey.melnikov@isode.com>\n\n   Intended usage:  COMMON\n\n   Owner/Change controller:  IESG\n\n   Note:\n\n3.4.4.  $Submitted IMAP Keyword Registration\n\n   Subject:    Registration of IMAP keyword $Submitted\n\n   IMAP keyword name:  $Submitted\n\n   Purpose (description):  The $Submitted IMAP keyword designates the\n                           message as being sent out.\n\n                           A message that has both $Submitted and\n                           $SubmitPending IMAP keywords set is a message\n                           being actively submitted.\n\n   Private or Shared on a server:  SHARED\n\n   Is it an advisory keyword or may it cause an automatic action:\n                           This keyword can cause automatic action by\n                           the client.  See Section 5.10 of [RFC5550]\n                           for more details.\n\n   When/by whom the keyword is set/cleared:\n                           This keyword is set by a mail client when it\n                           decides to start sending it.\n\n   Related keywords:  $SubmitPending\n\n   Related IMAP capabilities:  None\n\n   Security considerations:  A server implementing this keyword as a\n                             shared keyword may disclose that a\n                             confidential message was sent or is being\n                             actively sent out.\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 9]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   Published specification (recommended):  [RFC5550]\n\n   Person & email address to contact for further information:\n                           Alexey Melnikov <alexey.melnikov@isode.com>\n\n   Intended usage:  COMMON\n\n   Owner/Change controller:  IESG\n\n   Note:\n\n4.  Security Considerations\n\n    IMAP keywords are one of the base IMAP features [RFC3501].  This\n    document doesn't change their behavior, so it does not add new\n    security issues.\n\n    A particular IMAP keyword might have specific security\n    considerations, which are documented in the IMAP keyword\n    registration template standardized by this document.\n\n5.  Acknowledgements\n\n   The creation of this document was prompted by one of many discussions\n   on the IMAP mailing list.\n\n   John Neystadt co-authored the first version of this document.\n\n   Special thanks to Chris Newman, David Harris, Lyndon Nerenberg, Mark\n   Crispin, Samuel Weiler, Alfred Hoenes, Lars Eggert, and Cullen\n   Jennings for reviewing different versions of this document.  However,\n   all errors or omissions must be attributed to the authors of this\n   document.\n\n   The authors would also like to thank the developers of Mozilla mail\n   clients for providing food for thought.\n\n6.  References\n\n6.1.  Normative References\n\n   [Kwds]     Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 10]\n\f\nRFC 5788                 IMAP4 Keyword Registry               March 2010\n\n\n   [RFC5226]  Narten, T. and H. Alvestrand, \"Guidelines for Writing an\n              IANA Considerations Section in RFCs\", BCP 26, RFC 5226,\n              May 2008.\n\n6.2.  Informative References\n\n   [RFC3503]  Melnikov, A., \"Message Disposition Notification (MDN)\n              profile for Internet Message Access Protocol (IMAP)\",\n              RFC 3503, March 2003.\n\n   [RFC5550]  Cridland, D., Melnikov, A., and S. Maes, \"The Internet\n              Email to Support Diverse Service Environments (Lemonade)\n              Profile\", RFC 5550, August 2009.\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n   URI:   http://www.melnikov.ca/\n\n\n   Dave Cridland\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: dave.cridland@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc5801.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                      S. Josefsson\nRequest for Comments: 5801                                        SJD AB\nCategory: Standards Track                                    N. Williams\nISSN: 2070-1721                                                   Oracle\n                                                               July 2010\n\n\n Using Generic Security Service Application Program Interface (GSS-API)\n     Mechanisms in Simple Authentication and Security Layer (SASL):\n                        The GS2 Mechanism Family\n\nAbstract\n\n   This document describes how to use a Generic Security Service\n   Application Program Interface (GSS-API) mechanism in the Simple\n   Authentication and Security Layer (SASL) framework.  This is done by\n   defining a new SASL mechanism family, called GS2.  This mechanism\n   family offers a number of improvements over the previous \"SASL/\n   GSSAPI\" mechanism: it is more general, uses fewer messages for the\n   authentication phase in some cases, and supports negotiable use of\n   channel binding.  Only GSS-API mechanisms that support channel\n   binding and mutual authentication are supported.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc5801.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 1]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\nCopyright Notice\n\n   Copyright (c) 2010 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 2]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\nTable of Contents\n\n   1. Introduction ....................................................4\n   2. Conventions Used in This Document ...............................5\n   3. Mechanism Name ..................................................5\n      3.1. Generating SASL Mechanism Names from GSS-API OIDs ..........5\n      3.2. Computing Mechanism Names Manually .........................6\n      3.3. Examples ...................................................6\n      3.4. Grandfathered Mechanism Names ..............................7\n   4. SASL Authentication Exchange Message Format .....................8\n   5. Channel Bindings ...............................................10\n      5.1. Content of GSS-CHANNEL-BINDINGS Structure .................11\n      5.2. Default Channel Binding ...................................12\n   6. Examples .......................................................12\n   7. Authentication Conditions ......................................14\n   8. GSS-API Parameters .............................................15\n   9. Naming .........................................................15\n   10. GSS_Inquire_SASLname_for_mech Call ............................15\n      10.1. gss_inquire_saslname_for_mech ............................16\n   11. GSS_Inquire_mech_for_SASLname Call ............................18\n      11.1. gss_inquire_mech_for_saslname ............................19\n   12. Security Layers ...............................................20\n   13. Interoperability with the SASL GSSAPI Mechanism ...............20\n      13.1. The Interoperability Problem .............................20\n      13.2. Resolving the Problem ....................................20\n      13.3. Additional Recommendations ...............................20\n   14. GSS-API Mechanisms That Negotiate Other Mechanisms ............21\n      14.1. The Interoperability Problem .............................21\n      14.2. Security Problem .........................................21\n      14.3. Resolving the Problems ...................................21\n   15. IANA Considerations ...........................................22\n   16. Security Considerations .......................................22\n   17. Acknowledgements ..............................................24\n   18. References ....................................................24\n      18.1. Normative References .....................................24\n      18.2. Informative References ...................................25\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 3]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n1.  Introduction\n\n   Generic Security Service Application Program Interface (GSS-API)\n   [RFC2743] is a framework that provides security services to\n   applications using a variety of authentication mechanisms.  Simple\n   Authentication and Security Layer (SASL) [RFC4422] is a framework to\n   provide authentication and security layers for connection-based\n   protocols, also using a variety of mechanisms.  This document\n   describes how to use a GSS-API mechanism as though it were a SASL\n   mechanism.  This facility is called GS2 -- a moniker that indicates\n   that this is the second GSS-API->SASL mechanism bridge.  The original\n   GSS-API->SASL mechanism bridge was specified by [RFC2222], now\n   [RFC4752]; we shall sometimes refer to the original bridge as GS1 in\n   this document.\n\n   All GSS-API mechanisms are implicitly registered for use within SASL\n   by this specification.  The SASL mechanisms defined in this document\n   are known as the GS2 family of mechanisms.\n\n   The GS1 bridge failed to gain wide deployment for any GSS-API\n   mechanism other than \"The Kerberos Version 5 GSS-API Mechanism\"\n   [RFC1964] [RFC4121], and has a number of problems that led us to\n   desire a new bridge.  Specifically, a) GS1 was not round-trip\n   optimized and b) GS1 did not support channel binding [RFC5056].\n   These problems and the opportunity to create the next SASL password-\n   based mechanism, \"Salted Challenge Response Authentication Mechanism\n   (SCRAM) SASL and GSS-API Mechanisms\" [RFC5802], as a GSS-API\n   mechanism used by SASL applications via GS2, provide the motivation\n   for GS2.\n\n   In particular, the current consensus of the SASL community appears to\n   be that SASL \"security layers\" (i.e., confidentiality and integrity\n   protection of application data after authentication) are too complex\n   and redundant because SASL applications tend to have an option to run\n   over a Transport Layer Security (TLS) [RFC5246] channel.  Use of SASL\n   security layers is best replaced with channel binding to a TLS\n   channel.\n\n   GS2 is designed to be as simple as possible.  It adds to GSS-API\n   security context token exchanges only the bare minimum to support\n   SASL semantics and negotiation of use of channel binding.\n   Specifically, GS2 adds a small header (a few bytes plus the length of\n   the client-requested SASL authorization identity) to the initial GSS-\n   API context token and to the application channel binding data.  GS2\n   uses SASL mechanism negotiation to implement channel binding\n   negotiation.  Security-relevant GS2 plaintext is protected via the\n   use of GSS-API channel binding.  Additionally, to simplify the\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 4]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   implementation of GS2 mechanisms for implementors who will not\n   implement a GSS-API framework, we compress the initial security\n   context token header required by [RFC2743], Section 3.1.\n\n   GS2 does not protect any plaintext exchanged outside GS2, such as\n   SASL mechanism negotiation plaintext, or application messages\n   following authentication.  But using channel binding to a secure\n   channel over which all SASL and application plaintext is sent will\n   cause all that plaintext to be authenticated.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   The document uses many terms and function names defined in [RFC2743],\n   as updated by [RFC5554].\n\n3.  Mechanism Name\n\n   There are two SASL mechanism names for any GSS-API mechanism used\n   through this facility.  One denotes that the server supports channel\n   binding.  The other denotes that it does not.\n\n   The SASL mechanism name for a GSS-API mechanism is that which is\n   provided by that mechanism when it was specified, if one was\n   specified.  This name denotes that the server does not support\n   channel binding.  Add the suffix \"-PLUS\" and the resulting name\n   denotes that the server does support channel binding.  SASL\n   implementations can use the GSS_Inquire_SASLname_for_mech call (see\n   below) to query for the SASL mechanism name of a GSS-API mechanism.\n\n   If the GSS_Inquire_SASLname_for_mech interface is not used, the GS2\n   implementation needs some other mechanism to map mechanism Object\n   Identifiers (OIDs) to SASL names internally.  In this case, the\n   implementation can only support the mechanisms for which it knows the\n   SASL name.  If GSS_Inquire_SASLname_for_mech() fails and the GS2\n   implementation cannot map the OID to a SASL mechanism name via some\n   other means, then the GS2 implementation MUST NOT use the given GSS-\n   API mechanism.\n\n3.1.  Generating SASL Mechanism Names from GSS-API OIDs\n\n   For GSS-API mechanisms whose SASL names are not defined together with\n   the GSS-API mechanism or in this document, the SASL mechanism name is\n   concatenation of the string \"GS2-\" and the Base32 encoding [RFC4648]\n   (with an uppercase alphabet) of the first 55 bits of the binary SHA-1\n\n\n\nJosefsson & Williams         Standards Track                    [Page 5]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   hash [FIPS.180-1.1995] string computed over the ASN.1 DER encoding\n   [CCITT.X690.2002], including the tag and length octets, of the GSS-\n   API mechanism's Object Identifier.  The Base32 rules on padding\n   characters and characters outside of the Base32 alphabet are not\n   relevant to this use of Base32.  If any padding or non-alphabet\n   characters are encountered, the name is not a GS2 family mechanism\n   name.  This name denotes that the server does not support channel\n   binding.  Add the suffix \"-PLUS\" and the resulting name denotes that\n   the server does support channel binding.\n\n   A GS2 mechanism that has a non-OID-derived SASL mechanism name is\n   said to have a \"user-friendly SASL mechanism name\".\n\n3.2.  Computing Mechanism Names Manually\n\n   The hash-derived GS2 SASL mechanism name may be computed manually.\n   This is useful when the set of supported GSS-API mechanisms is known\n   in advance.  This eliminates the need to implement Base32, SHA-1, and\n   DER in the SASL mechanism.  The computed mechanism name can be used\n   directly in the implementation, and the implementation need not be\n   concerned if the mechanism is part of a mechanism family.\n\n3.3.  Examples\n\n   The OID for the Simple Public-Key GSS-API Mechanism (SPKM-1)\n   [RFC2025] is 1.3.6.1.5.5.1.1.  The ASN.1 DER encoding of the OID,\n   including the tag and length, is (in hex) 06 07 2b 06 01 05 05 01 01.\n   The SHA-1 hash of the ASN.1 DER encoding is (in hex) 1c f8 f4 2b 5a\n   9f 80 fa e9 f8 31 22 6d 5d 9d 56 27 86 61 ad.  Convert the first 7\n   octets to binary, drop the last bit, and re-group them in groups of\n   5, and convert them back to decimal, which results in these\n   computations:\n\n   hex:\n   1c f8 f4 2b 5a 9f 80\n\n   binary:\n   00011100 11111000 11110100 00101011 01011010\n   10011111 1000000\n\n   binary in groups of 5:\n   00011 10011 11100 01111 01000 01010 11010 11010\n   10011 11110 00000\n\n   decimal of each group:\n   3 19 28 15 8 10 26 26 19 30 0\n\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 6]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   base32 encoding:\n   D T 4 P I K 2 2 T 6 A\n\n   The last step translates each decimal value using table 3 in Base32\n   [RFC4648].  Thus, the SASL mechanism name for the SPKM-1 GSSAPI\n   mechanism is \"GS2-DT4PIK22T6A\".\n\n   The OID for the Kerberos V5 GSS-API mechanism [RFC1964] is\n   1.2.840.113554.1.2.2 and its DER encoding is (in hex) 06 09 2A 86 48\n   86 F7 12 01 02 02.  The SHA-1 hash is 82 d2 73 25 76 6b d6 c8 45 aa\n   93 25 51 6a fc ff 04 b0 43 60.  Convert the 7 octets to binary, drop\n   the last bit, and re-group them in groups of 5, and convert them back\n   to decimal, which results in these computations:\n\n   hex:\n   82 d2 73 25 76 6b d6\n\n   binary:\n   10000010 11010010 01110011 00100101 01110110\n   01101011 1101011\n\n   binary in groups of 5:\n   10000 01011 01001 00111 00110 01001 01011 10110\n   01101 01111 01011\n\n   decimal of each group:\n   16 11 9 7 6 9 11 22 13 15 11\n\n   base32 encoding:\n   Q L J H G J L W N P L\n\n   The last step translates each decimal value using table 3 in Base32\n   [RFC4648].  Thus, the SASL mechanism name for the Kerberos V5 GSS-API\n   mechanism would be \"GS2-QLJHGJLWNPL\" and (because this mechanism\n   supports channel binding) \"GS2-QLJHGJLWNPL-PLUS\".  Instead, the next\n   section assigns the Kerberos V5 mechanism a non-hash-derived\n   mechanism name.\n\n3.4.  Grandfathered Mechanism Names\n\n   Some older GSS-API mechanisms were not specified with a SASL GS2\n   mechanism name.  Using a shorter name can be useful, nonetheless.  We\n   specify the names \"GS2-KRB5\" and \"GS2-KRB5-PLUS\" for the Kerberos V5\n   mechanism, to be used as if the original specification documented it,\n   see Section 15.\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 7]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n4.  SASL Authentication Exchange Message Format\n\n   During the SASL authentication exchange for GS2, a number of messages\n   following the following format are sent between the client and\n   server.  On success, this number is the same as the number of context\n   tokens that the GSS-API mechanism would normally require in order to\n   establish a security context.  On failures, the exchange can be\n   terminated early by any party.\n\n   When using a GS2 mechanism the SASL client is always a GSS-API\n   initiator and the SASL server is always a GSS-API acceptor.  The\n   client calls GSS_Init_sec_context and the server calls\n   GSS_Accept_sec_context.\n\n   All the SASL authentication messages exchanged are exactly the same\n   as the security context tokens of the GSS-API mechanism, except for\n   the initial security context token.\n\n   The client and server MAY send GSS-API error tokens (tokens output by\n   GSS_Init_sec_context() or GSS_Accept_sec_context() when the major\n   status code is other than GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED).\n   As this indicates an error condition, after sending the token, the\n   sending side should fail the authentication.\n\n   The initial security context token is modified as follows:\n\n   o  The initial context token header (see Section 3.1 of [RFC2743])\n      MUST be removed if present.  If the header is not present, the\n      client MUST send a \"gs2-nonstd-flag\" flag (see below).  On the\n      server side, this header MUST be recomputed and restored prior to\n      passing the token to GSS_Accept_sec_context, except when the \"gs2-\n      nonstd-flag\" is sent.\n\n   o  A GS2 header MUST be prefixed to the resulting initial context\n      token.  This header has the form \"gs2-header\" given below in ABNF\n      [RFC5234].\n\n   The figure below describes the permissible attributes, their use, and\n   the format of their values.  All attribute names are single US-ASCII\n   letters and are case sensitive.\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 8]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n    UTF8-1-safe    = %x01-2B / %x2D-3C / %x3E-7F\n                     ;; As UTF8-1 in RFC 3629 except\n                     ;; NUL, \"=\", and \",\".\n    UTF8-2         = <as defined in RFC 3629 (STD 63)>\n    UTF8-3         = <as defined in RFC 3629 (STD 63)>\n    UTF8-4         = <as defined in RFC 3629 (STD 63)>\n    UTF8-char-safe = UTF8-1-safe / UTF8-2 / UTF8-3 / UTF8-4\n\n    saslname       = 1*(UTF8-char-safe / \"=2C\" / \"=3D\")\n    gs2-authzid    = \"a=\" saslname\n                      ;; GS2 has to transport an authzid since\n                      ;; the GSS-API has no equivalent\n    gs2-nonstd-flag = \"F\"\n                      ;; \"F\" means the mechanism is not a\n                      ;; standard GSS-API mechanism in that the\n                      ;; RFC 2743, Section 3.1 header was missing\n    cb-name         = 1*(ALPHA / DIGIT / \".\" / \"-\")\n                      ;; See RFC 5056, Section 7.\n    gs2-cb-flag     = (\"p=\" cb-name) / \"n\" / \"y\"\n                      ;; GS2 channel binding (CB) flag\n                      ;; \"p\" -> client supports and used CB\n                      ;; \"n\" -> client does not support CB\n                      ;; \"y\" -> client supports CB, thinks the server\n                      ;;           does not\n    gs2-header = [gs2-nonstd-flag \",\"] gs2-cb-flag \",\" [gs2-authzid] \",\"\n                        ;; The GS2 header is gs2-header.\n\n   When the \"gs2-nonstd-flag\" flag is present, the client did not find/\n   remove a token header ([RFC2743], Section 3.1) from the initial token\n   returned by GSS_Init_sec_context.  This signals to the server that it\n   MUST NOT re-add the data that is normally removed by the client.\n\n   The \"gs2-cb-flag\" signals the channel binding mode.  One of \"p\", \"n\",\n   or \"y\" is used.  A \"p\" means the client supports and used a channel\n   binding, and the name of the channel binding type is indicated.  An\n   \"n\" means that the client does not support channel binding.  A \"y\"\n   means the client supports channel binding, but believes the server\n   does not support it, so it did not use a channel binding.  See the\n   next section for more details.\n\n   The \"gs2-authzid\" holds the SASL authorization identity.  It is\n   encoded using UTF-8 [RFC3629] with three exceptions:\n\n   o  The NUL character is forbidden as required by section 3.4.1 of\n      [RFC4422].\n\n   o  The server MUST replace any \",\" (comma) in the string with \"=2C\".\n\n\n\n\nJosefsson & Williams         Standards Track                    [Page 9]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   o  The server MUST replace any \"=\" (equals) in the string with \"=3D\".\n\n   Upon receipt of this value, the server verifies its correctness\n   according to the used SASL protocol profile.  Failed verification\n   results in a failed authentication exchange.\n\n5.  Channel Bindings\n\n   GS2 supports channel binding to external secure channels, such as\n   TLS.  Clients and servers may or may not support channel binding;\n   therefore, the use of channel binding is negotiable.  However, GS2\n   does not provide security layers; therefore, it is imperative that\n   GS2 provide integrity protection for the negotiation of channel\n   binding.\n\n   Use of channel binding is negotiated as follows:\n\n   o  Servers that support the use of channel binding SHOULD advertise\n      both the non-PLUS and PLUS-variant of each GS2 mechanism name.  If\n      the server cannot support channel binding, it SHOULD advertise\n      only the non-PLUS-variant.  If the server would never succeed in\n      the authentication of the non-PLUS-variant due to policy reasons,\n      it MUST advertise only the PLUS-variant.\n\n   o  If the client supports channel binding and the server does not\n      appear to (i.e., the client did not see the -PLUS name advertised\n      by the server), then the client MUST NOT use an \"n\" gs2-cb-flag.\n\n   o  Clients that support mechanism negotiation and channel binding\n      MUST use a \"p\" gs2-cb-flag when the server offers the PLUS-variant\n      of the desired GS2 mechanism.\n\n   o  If the client does not support channel binding, then it MUST use\n      an \"n\" gs2-cb-flag.  Conversely, if the client requires the use of\n      channel binding then it MUST use a \"p\" gs2-cb-flag.  Clients that\n      do not support mechanism negotiation never use a \"y\" gs2-cb-flag,\n      they use either \"p\" or \"n\" according to whether they require and\n      support the use of channel binding or whether they do not,\n      respectively.\n\n   o  The client generates the chan_bindings input parameter for\n      GSS_Init_sec_context as described below.\n\n   o  Upon receipt of the initial authentication message, the server\n      checks the gs2-cb-flag in the GS2 header and constructs a\n      chan_bindings parameter for GSS_Accept_sec_context as described\n      below.  If the client channel binding flag was \"y\" and the server\n      did advertise support for channel bindings (by advertising the\n\n\n\nJosefsson & Williams         Standards Track                   [Page 10]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n      PLUS-variant of the mechanism chosen by the client), then the\n      server MUST fail authentication.  If the client channel binding\n      flag was \"p\" and the server does not support the indicated channel\n      binding type, then the server MUST fail authentication.\n\n   o  If the client used an \"n\" gs2-cb-flag and the server requires the\n      use of channel binding, then the server MUST fail authentication.\n\n     FLAG CLIENT CB SUPPORT   SERVER CB SUPPORT DISPOSITION\n     ---- -----------------   ----------------- -----------\n\n     n    no support          N/A               If server disallows\n                                                non-channel-bound\n                                                authentication, then\n                                                fail\n\n     y    Yes, not required   No                Authentication may\n                                                succeed; CB not used\n\n     y    Yes, not required   Yes               Authentication must fail\n\n     p    Yes                 Yes               Authentication may\n                                                succeed, with CB used\n\n     p    Yes                 No                Authentication will fail\n\n     N/A  Yes, required       No                Client does not even try\n\n   For more discussion of channel bindings, and the syntax of the\n   channel binding data for various security protocols, see [RFC5056].\n\n5.1.  Content of GSS-CHANNEL-BINDINGS Structure\n\n   The calls to GSS_Init_sec_context and GSS_Accept_sec_context take a\n   chan_bindings parameter.  The value is a GSS-CHANNEL-BINDINGS\n   structure [RFC5554].\n\n   The initiator-address-type and acceptor-address-type fields of the\n   GSS-CHANNEL-BINDINGS structure MUST be set to 0.  The initiator-\n   address and acceptor-address fields MUST be the empty string.\n\n   The application-data field MUST be set to the gs2-header, excluding\n   the initial [gs2-nonstd-flag \",\"] part, concatenated with, when a\n   gs2-cb-flag of \"p\" is used, the application's channel binding data.\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 11]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n5.2.  Default Channel Binding\n\n   A default channel binding type agreement process for all SASL\n   application protocols that do not provide their own channel binding\n   type agreement is provided as follows.\n\n   'tls-unique' is the default channel binding type for any application\n   that doesn't specify one.\n\n   Servers MUST implement the \"tls-unique\" [RFC5929] channel binding\n   type, if they implement any channel binding.  Clients SHOULD\n   implement the \"tls-unique\" channel binding type, if they implement\n   any channel binding.  Clients and servers SHOULD choose the highest-\n   layer/innermost end-to-end TLS channel as the channel to which to\n   bind.\n\n   Servers MUST choose the channel binding type indicated by the client,\n   or fail authentication if they don't support it.\n\n6.  Examples\n\n   Example #1: a one round-trip GSS-API context token exchange, no\n   channel binding, optional authzid given.\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: n,a=someuser,<initial context token with standard\n                            header removed>\n         S: Send reply context token as is\n         C: Empty message\n         S: Outcome of authentication exchange\n\n   Example #2: a one and one half round-trip GSS-API context token\n   exchange, no channel binding.\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: n,,<initial context token with standard\n                            header removed>\n         S: Send reply context token as is\n         C: Send reply context token as is\n         S: Outcome of authentication exchange\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 12]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   Example #3: a two round-trip GSS-API context token exchange, no\n   channel binding, no standard token header.\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: F,n,,<initial context token without\n                             standard header>\n         S: Send reply context token as is\n         C: Send reply context token as is\n         S: Send reply context token as is\n         C: Empty message\n         S: Outcome of authentication exchange\n\n   Example #4: using channel binding, optional authzid given.\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: p=tls-unique,a=someuser,<initial context token with standard\n                                header removed>\n         S: Send reply context token as is\n         ...\n\n   Example #5: using channel binding.\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: p=tls-unique,,<initial context token with standard\n                                header removed>\n         S: Send reply context token as is\n         ...\n\n   Example #6: using non-standard channel binding (requires out-of-band\n   negotiation).\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: p=tls-server-end-point,,<initial context token with standard\n                                header removed>\n         S: Send reply context token as is\n         ...\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 13]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   Example #7: client supports channel bindings but server does not,\n   optional authzid given.\n\n         C: Request authentication exchange\n         S: Empty Challenge\n         C: y,a=someuser,<initial\n                           context token with standard header removed>\n         S: Send reply context token as is\n         ...\n\n   GSS-API authentication is always initiated by the client.  The SASL\n   framework allows either the client or the server to initiate\n   authentication.  In GS2, the server will send an initial empty\n   challenge (zero-byte string) if it has not yet received a token from\n   the client.  See Section 3 of [RFC4422].\n\n7.  Authentication Conditions\n\n   Authentication MUST NOT succeed if any one of the following\n   conditions are true:\n\n   o  If GSS_Init/Accept_sec_context returns anything other than\n      GSS_S_CONTINUE_NEEDED or GSS_S_COMPLETE.\n\n   o  If the client's initial GS2 header does not match the ABNF.\n\n   o  In particular, if the initial character of the client message is\n      anything except \"F\", \"p\", \"n\", or \"y\".\n\n   o  If the client's GS2 channel binding flag was \"y\" and the server\n      supports channel bindings.\n\n   o  If the client's GS2 channel binding flag was \"p\" and the server\n      does not support the indicated channel binding.\n\n   o  If the client requires use of channel binding and the server did\n      not advertise support for channel binding.\n\n   o  If authorization of client principal (i.e., src_name in\n      GSS_Accept_sec_context) to requested authzid failed.\n\n   o  If the client is not authorized to the requested authzid or an\n      authzid could not be derived from the client's initiator principal\n      name.\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 14]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n8.  GSS-API Parameters\n\n   GS2 does not use any GSS-API per-message tokens.  Therefore, the per-\n   message token ret_flags from GSS_Init_sec_context() and\n   GSS_Accept_sec_context() are irrelevant; implementations SHOULD NOT\n   set the per-message req_flags.\n\n   The mutual_req_flag MUST be set.  Clients MUST check that the\n   corresponding ret_flag is set when the context is fully established,\n   else authentication MUST fail.\n\n   Use or non-use of deleg_req_flag and anon_req_flag is an\n   implementation-specific detail.  SASL and GS2 implementors are\n   encouraged to provide programming interfaces by which clients may\n   choose to delegate credentials and by which servers may receive them.\n   SASL and GS2 implementors are encouraged to provide programming\n   interfaces that provide a good mapping of GSS-API naming options.\n\n9.  Naming\n\n   There is no requirement that any particular GSS-API name-types be\n   used.  However, typically, SASL servers will have host-based acceptor\n   principal names (see [RFC2743], Section 4.1) and clients will\n   typically have username initiator principal names (see [RFC2743],\n   Section 4.2).  When a host-based acceptor principal name is used\n   (\"service@hostname\"), \"service\" is the service name specified in the\n   protocol's profile and \"hostname\" is the fully qualified host name of\n   the server.\n\n10.  GSS_Inquire_SASLname_for_mech Call\n\n   We specify a new GSS-API utility function to allow SASL\n   implementations to more efficiently identify the GSS-API mechanism to\n   which a particular SASL mechanism name refers.\n\n      Inputs:\n\n      o  desired_mech OBJECT IDENTIFIER\n\n      Outputs:\n\n      o  major_status INTEGER\n\n      o  minor_status INTEGER\n\n      o  sasl_mech_name UTF-8 STRING -- SASL name for this\n         mechanism; caller must release with\n         GSS_Release_buffer()\n\n\n\nJosefsson & Williams         Standards Track                   [Page 15]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n      o  mech_name UTF-8 STRING -- name of this mechanism, possibly\n         localized; caller must release with GSS_Release_buffer()\n\n      o  mech_description UTF-8 STRING -- possibly localized\n         description of this mechanism; caller must release with\n         GSS_Release_buffer()\n\n      Return major_status codes:\n\n      o  GSS_S_COMPLETE indicates successful completion, and that\n         output parameters holds correct information.\n\n      o  GSS_S_BAD_MECH indicates that a desired_mech was unsupported\n         by the GSS-API implementation.\n\n      o  GSS_S_FAILURE indicates that the operation failed for reasons\n         unspecified at the GSS-API level.\n\n      The GSS_Inquire_SASLname_for_mech call is used to get the SASL\n      mechanism name for a GSS-API mechanism.  It also returns a name\n      and description of the mechanism in user-friendly form.\n\n      The output variable sasl_mech_name will hold the IANA registered\n      mechanism name for the GSS-API mechanism, or if none is\n      registered, a mechanism name computed from the OID as described\n      in Section 3.1 of this document.\n\n10.1.  gss_inquire_saslname_for_mech\n\n   The C binding for the GSS_Inquire_SASLname_for_mech call is as\n   follows.\n\n   As mentioned in [RFC2744], routines may return GSS_S_FAILURE,\n   indicating an implementation-specific or mechanism-specific error\n   condition, further details of which are reported via the minor_status\n   parameter.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 16]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n      OM_uint32 gss_inquire_saslname_for_mech(\n        OM_uint32     *minor_status,\n        const gss_OID  desired_mech,\n        gss_buffer_t   sasl_mech_name,\n        gss_buffer_t   mech_name,\n        gss_buffer_t   mech_description\n      );\n\n      Purpose:\n\n      Output the SASL mechanism name of a GSS-API mechanism.\n      It also returns a name and description of the mechanism in a\n      user-friendly form.\n\n      Parameters:\n\n      minor_status      Integer, modify\n                        Mechanism-specific status code.\n\n      desired_mech      OID, read\n                        Identifies the GSS-API mechanism to query.\n\n      sasl_mech_name    buffer, character-string, modify, optional\n                        Buffer to receive SASL mechanism name.\n                        The application must free storage associated\n                        with this name after use with a call to\n                        gss_release_buffer().\n\n      mech_name         buffer, character-string, modify, optional\n                        Buffer to receive human-readable mechanism name.\n                        The application must free storage associated\n                        with this name after use with a call to\n                        gss_release_buffer().\n\n      mech_description  buffer, character-string, modify, optional\n                        Buffer to receive description of mechanism.\n                        The application must free storage associated\n                        with this name after use with a call to\n                        gss_release_buffer().\n\n      Function value:   GSS status code:\n\n      GSS_S_COMPLETE    Successful completion.\n\n      GSS_S_BAD_MECH    The desired_mech OID is unsupported.\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 17]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n11.  GSS_Inquire_mech_for_SASLname Call\n\n   To allow SASL clients to more efficiently identify to which GSS-API\n   mechanism a particular SASL mechanism name refers, we specify a new\n   GSS-API utility function for this purpose.\n\n      Inputs:\n\n      o  sasl_mech_name UTF-8 STRING -- SASL name of mechanism.\n\n      Outputs:\n\n      o  major_status INTEGER\n\n      o  minor_status INTEGER\n\n      o  mech_type OBJECT IDENTIFIER -- must be explicit mechanism,\n         and not \"default\" specifier.  Caller should treat as read-only\n         and should not attempt to release.\n\n      Return major_status codes:\n\n      o  GSS_S_COMPLETE indicates successful completion, and that output\n         parameters holds correct information.\n\n      o  GSS_S_BAD_MECH indicates that no supported GSS-API mechanism\n         had the indicated sasl_mech_name.\n\n      o  GSS_S_FAILURE indicates that the operation failed for reasons\n         unspecified at the GSS-API level.\n\n      The GSS_Inquire_mech_for_SASLname call is used to get the GSS-API\n      mechanism OID associated with a SASL mechanism name.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 18]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n11.1.  gss_inquire_mech_for_saslname\n\n   The C binding for the GSS_Inquire_mech_for_SASLname call is as\n   follows.\n\n   As mentioned in [RFC2744], routines may return GSS_S_FAILURE,\n   indicating an implementation-specific or mechanism-specific error\n   condition, further details of which are reported via the minor_status\n   parameter.\n\n     OM_uint32 gss_inquire_mech_for_saslname(\n       OM_uint32           *minor_status,\n       const gss_buffer_t   sasl_mech_name,\n       gss_OID             *mech_type\n     );\n\n     Purpose:\n\n     Output GSS-API mechanism OID of mechanism associated with given\n     sasl_mech_name.\n\n     Parameters:\n\n     minor_status      Integer, modify\n                       Mechanism-specific status code.\n\n     sasl_mech_name    buffer, character-string, read\n                       Buffer with SASL mechanism name.\n\n     mech_type         OID, modify, optional\n                       Actual mechanism used.  The OID returned via\n                       this parameter will be a pointer to static\n                       storage that should be treated as read-only.\n                       In particular, the application should not attempt\n                       to free it.  Specify NULL if not required.\n\n     Function value:   GSS status code:\n\n     GSS_S_COMPLETE    Successful completion.\n\n     GSS_S_BAD_MECH    There is no GSS-API mechanism known\n                       as sasl_mech_name.\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 19]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n12.  Security Layers\n\n   GS2 does not support SASL security layers.  Applications that need\n   integrity or confidentiality protection can use either channel\n   binding to a secure external channel or another SASL mechanism that\n   does provide security layers.\n\n13.  Interoperability with the SASL GSSAPI Mechanism\n\n   The Kerberos V5 GSS-API [RFC1964] mechanism is currently used in SASL\n   under the name GSSAPI, see [RFC4752].  The Kerberos V5 mechanism may\n   also be used with the GS2 family.  This causes an interoperability\n   problem, which is discussed and resolved below.\n\n13.1.  The Interoperability Problem\n\n   The SASL \"GSSAPI\" mechanism is not wire compatible with the Kerberos\n   V GSS-API mechanism used as a SASL GS2 mechanism.\n\n   If a client (or server) only support Kerberos V5 under the \"GSSAPI\"\n   name, and the server (or client) only support Kerberos V5 under the\n   GS2 family, the mechanism negotiation will fail.\n\n13.2.  Resolving the Problem\n\n   If the Kerberos V5 mechanism is supported under GS2 in a server, the\n   server SHOULD also support Kerberos V5 through the \"GSSAPI\"\n   mechanism, to avoid interoperability problems with older clients.\n\n   Reasons for violating this recommendation may include security\n   considerations regarding the absent features in the GS2 mechanism.\n   The SASL \"GSSAPI\" mechanism lacks support for channel bindings, which\n   means that using an external secure channel may not be sufficient\n   protection against active attackers (see [RFC5056] and [MITM]).\n\n13.3.  Additional Recommendations\n\n   If the application requires SASL security layers, then it MUST use\n   the SASL \"GSSAPI\" mechanism [RFC4752] instead of \"GS2-KRB5\" or \"GS2-\n   KRB5-PLUS\".\n\n   If the application can use channel binding to an external channel,\n   then it is RECOMMENDED that it select Kerberos V5 through the GS2\n   mechanism rather than the \"GSSAPI\" mechanism.\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 20]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n14.  GSS-API Mechanisms That Negotiate Other Mechanisms\n\n   A GSS-API mechanism that negotiates other mechanisms will interact\n   badly with the SASL mechanism negotiation.  There are two problems.\n   The first is an interoperability problem and the second is a security\n   concern.  The problems are described and resolved below.\n\n14.1.  The Interoperability Problem\n\n   If a client implements GSS-API mechanism X, potentially negotiated\n   through a GSS-API mechanism Y, and the server also implements GSS-API\n   mechanism X negotiated through a GSS-API mechanism Z, the\n   authentication negotiation will fail.\n\n14.2.  Security Problem\n\n   If a client's policy is to first prefer GSSAPI mechanism X, then non-\n   GSSAPI mechanism Y, then GSSAPI mechanism Z, and if a server supports\n   mechanisms Y and Z but not X, then if the client attempts to\n   negotiate mechanism X by using a GSS-API mechanism that negotiates\n   other mechanisms (such as Simple and Protected GSS-API Negotiation\n   (SPNEGO) [RFC4178]), it may end up using mechanism Z when it ideally\n   should have used mechanism Y.  For this reason, the use of GSS-API\n   mechanisms that negotiate other mechanisms is disallowed under GS2.\n\n14.3.  Resolving the Problems\n\n   GSS-API mechanisms that negotiate other mechanisms MUST NOT be used\n   with the GS2 SASL mechanism.  Specifically, SPNEGO [RFC4178] MUST NOT\n   be used as a GS2 mechanism.  To make this easier for SASL\n   implementations, we assign a symbolic SASL mechanism name to the\n   SPNEGO GSS-API mechanism, \"SPNEGO\".  SASL client implementations MUST\n   NOT choose the SPNEGO mechanism under any circumstances.\n\n   The GSS_C_MA_MECH_NEGO attribute of GSS_Inquire_attrs_for_mech\n   [RFC5587] can be used to identify such mechanisms.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 21]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n15.  IANA Considerations\n\n   The IANA has registered a SASL mechanism family as per [RFC4422]\n   using the following information.\n\n     Subject: Registration of SASL mechanism family GS2-*\n     SASL mechanism prefix: GS2-\n     Security considerations: RFC 5801\n     Published specification: RFC 5801\n     Person & email address to contact for further information:\n       Simon Josefsson <simon@josefsson.org>\n     Intended usage: COMMON\n     Owner/Change controller: iesg@ietf.org\n     Note: Compare with the GSSAPI and GSS-SPNEGO mechanisms.\n\n   The IANA is advised that SASL mechanism names starting with \"GS2-\"\n   are reserved for SASL mechanisms that conform to this document.  The\n   IANA has placed a statement to that effect in the SASL Mechanisms\n   registry.\n\n   The IANA is further advised that GS2 SASL mechanism names MUST NOT\n   end in \"-PLUS\" except as a version of another mechanism name simply\n   suffixed with \"-PLUS\".\n\n   The SASL names for the Kerberos V5 GSS-API mechanism [RFC4121]\n   [RFC1964] used via GS2 SHALL be \"GS2-KRB5\" and \"GS2-KRB5-PLUS\".\n\n   The SASL names for the SPNEGO GSS-API mechanism used via GS2 SHALL be\n   \"SPNEGO\" and \"SPNEGO-PLUS\".  As described in Section 14, the SASL\n   \"SPNEGO\" and \"SPNEGO-PLUS\" MUST NOT be used.  These names are\n   provided as a convenience for SASL library implementors.\n\n16.  Security Considerations\n\n   Security issues are also discussed throughout this memo.\n\n   The security provided by a GS2 mechanism depends on the security of\n   the GSS-API mechanism.  The GS2 mechanism family depends on channel\n   binding support, so GSS-API mechanisms that do not support channel\n   binding cannot be successfully used as SASL mechanisms via the GS2\n   bridge.\n\n   Because GS2 does not support security layers, it is strongly\n   RECOMMENDED that channel binding to a secure external channel be\n   used.  Successful channel binding eliminates the possibility of man-\n   in-the-middle (MITM) attacks, provided that the external channel and\n   its channel binding data are secure and that the GSS-API mechanism\n   used is secure.  Authentication failure because of channel binding\n\n\n\nJosefsson & Williams         Standards Track                   [Page 22]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   failure may indicate that an MITM attack was attempted, but note that\n   a real MITM attacker would likely attempt to close the connection to\n   the client or simulate network partition; thus, MITM attack detection\n   is heuristic.\n\n   Use of channel binding will also protect the SASL mechanism\n   negotiation -- if there is no MITM, then the external secure channel\n   will have protected the SASL mechanism negotiation.\n\n   The channel binding data MAY be sent (by the actual GSS-API mechanism\n   used) without confidentiality protection and knowledge of it is\n   assumed to provide no advantage to an MITM (who can, in any case,\n   compute the channel binding data independently).  If the external\n   channel does not provide confidentiality protection and the GSS-API\n   mechanism does not provide confidentiality protection for the channel\n   binding data, then passive attackers (eavesdroppers) can recover the\n   channel binding data, see [RFC5056].\n\n   When constructing the input_name_string for GSS_Import_name with the\n   GSS_C_NT_HOSTBASED_SERVICE name type, the client SHOULD NOT\n   canonicalize the server's fully qualified domain name using an\n   insecure or untrusted directory service, such as the Domain Name\n   System [RFC1034] without DNS Security (DNSSEC) [RFC4033].\n\n   SHA-1 is used to derive SASL mechanism names, but no traditional\n   cryptographic properties are required -- the required property is\n   that the truncated output for distinct inputs are different for\n   practical input values.  GS2 does not use any other cryptographic\n   algorithm.  Therefore, GS2 is \"algorithm agile\", or, as agile as the\n   GSS-API mechanisms that are available for use in SASL applications\n   via GS2.\n\n   GS2 does not protect against downgrade attacks of channel binding\n   types.  Negotiation of channel binding type was intentionally left\n   out of scope for this document.\n\n   The security considerations of SASL [RFC4422], the GSS-API [RFC2743],\n   channel binding [RFC5056], any external channels (such as TLS,\n   [RFC5246], channel binding types (see the IANA channel binding type\n   registry), and GSS-API mechanisms (such as the Kerberos V5 mechanism\n   [RFC4121] [RFC1964]), also apply.\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 23]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n17.  Acknowledgements\n\n   The history of GS2 can be traced to the \"GSSAPI\" mechanism originally\n   specified by RFC 2222.  This document was derived from [SASL-GSSAPI],\n   which was prepared by Alexey Melnikov with significant contributions\n   from John G. Myers, although the majority of this document has been\n   rewritten by the current authors.\n\n   Contributions of many members of the SASL mailing list are gratefully\n   acknowledged.  In particular, ideas and feedback from Pasi Eronen,\n   Sam Hartman, Jeffrey Hutzelman, Alexey Melnikov, and Tom Yu improved\n   the document and the protocol.  Other suggestions to the documents\n   were made by Spencer Dawkins, Ralph Droms, Adrian Farrel, Robert\n   Sparks, and Glen Zorn.\n\n18.  References\n\n18.1.  Normative References\n\n   [FIPS.180-1.1995]\n              National Institute of Standards and Technology, \"Secure\n              Hash Standard\", FIPS PUB 180-1, April 1995,\n              <http://www.itl.nist.gov/fipspubs/fip180-1.htm>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2743]  Linn, J., \"Generic Security Service Application Program\n              Interface Version 2, Update 1\", RFC 2743, January 2000.\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, November 2003.\n\n   [RFC4422]  Melnikov, A. and K. Zeilenga, \"Simple Authentication and\n              Security Layer (SASL)\", RFC 4422, June 2006.\n\n   [RFC4648]  Josefsson, S., \"The Base16, Base32, and Base64 Data\n              Encodings\", RFC 4648, October 2006.\n\n   [RFC5056]  Williams, N., \"On the Use of Channel Bindings to Secure\n              Channels\", RFC 5056, November 2007.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 24]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   [RFC5554]  Williams, N., \"Clarifications and Extensions to the\n              Generic Security Service Application Program Interface\n              (GSS-API) for the Use of Channel Bindings\", RFC 5554,\n              May 2009.\n\n   [CCITT.X690.2002]\n              International Telephone and Telegraph Consultative\n              Committee, \"ASN.1 encoding rules: Specification of basic\n              encoding Rules (BER), Canonical encoding rules (CER) and\n              Distinguished encoding rules (DER)\", CCITT Recommendation\n              X.690, July 2002.\n\n   [RFC5929]  Altman, J., Williams, N., and L. Zhu, \"Channel Bindings\n              for TLS\", RFC 5929, July 2010.\n\n18.2.  Informative References\n\n   [RFC1034]  Mockapetris, P., \"Domain names - concepts and facilities\",\n              STD 13, RFC 1034, November 1987.\n\n   [RFC1964]  Linn, J., \"The Kerberos Version 5 GSS-API Mechanism\",\n              RFC 1964, June 1996.\n\n   [RFC2025]  Adams, C., \"The Simple Public-Key GSS-API Mechanism\n              (SPKM)\", RFC 2025, October 1996.\n\n   [RFC2222]  Myers, J., \"Simple Authentication and Security Layer\n              (SASL)\", RFC 2222, October 1997.\n\n   [RFC2744]  Wray, J., \"Generic Security Service API Version 2 :\n              C-bindings\", RFC 2744, January 2000.\n\n   [RFC4033]  Arends, R., Austein, R., Larson, M., Massey, D., and S.\n              Rose, \"DNS Security Introduction and Requirements\",\n              RFC 4033, March 2005.\n\n   [RFC4121]  Zhu, L., Jaganathan, K., and S. Hartman, \"The Kerberos\n              Version 5 Generic Security Service Application Program\n              Interface (GSS-API) Mechanism: Version 2\", RFC 4121,\n              July 2005.\n\n   [RFC4178]  Zhu, L., Leach, P., Jaganathan, K., and W. Ingersoll, \"The\n              Simple and Protected Generic Security Service Application\n              Program Interface (GSS-API) Negotiation Mechanism\",\n              RFC 4178, October 2005.\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 25]\n\f\nRFC 5801                       SASL GS2-*                      July 2010\n\n\n   [RFC4752]  Melnikov, A., \"The Kerberos V5 (\"GSSAPI\") Simple\n              Authentication and Security Layer (SASL) Mechanism\",\n              RFC 4752, November 2006.\n\n   [RFC5246]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.2\", RFC 5246, August 2008.\n\n   [RFC5587]  Williams, N., \"Extended Generic Security Service Mechanism\n              Inquiry APIs\", RFC 5587, July 2009.\n\n   [RFC5802]  Menon-Sen, A., Melnikov, A., Newman, C., and N. Williams,\n              \"Salted Challenge Response Authentication Mechanism\n              (SCRAM) SASL and GSS-API Mechanisms\", RFC 5802, July 2010.\n\n   [MITM]     Asokan, N., Niemi, V., and K. Nyberg, \"Man-in-the-Middle\n              in Tunnelled Authentication\", in 11th Security\n              Protocols Workshop, 2002.\n\n   [SASL-GSSAPI]\n              Melnikov, A., \"The Kerberos V5 (\"GSSAPI\") SASL mechanism\",\n              Work in Progress, March 2005.\n\nAuthors' Addresses\n\n   Simon Josefsson\n   SJD AB\n   Hagagatan 24\n   Stockholm  113 47\n   SE\n\n   EMail: simon@josefsson.org\n   URI:   http://josefsson.org/\n\n\n   Nicolas Williams\n   Oracle\n   5300 Riata Trace Ct\n   Austin, TX  78727\n   USA\n\n   EMail: Nicolas.Williams@oracle.com\n\n\n\n\n\n\n\n\n\n\nJosefsson & Williams         Standards Track                   [Page 26]\n\f\n"
  },
  {
    "path": "rfc/rfc5802.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                         C. Newman\nRequest for Comments: 5802                                        Oracle\nCategory: Standards Track                                   A. Menon-Sen\nISSN: 2070-1721                                   Oryx Mail Systems GmbH\n                                                             A. Melnikov\n                                                             Isode, Ltd.\n                                                             N. Williams\n                                                                  Oracle\n                                                               July 2010\n\n\n       Salted Challenge Response Authentication Mechanism (SCRAM)\n                      SASL and GSS-API Mechanisms\n\nAbstract\n\n   The secure authentication mechanism most widely deployed and used by\n   Internet application protocols is the transmission of clear-text\n   passwords over a channel protected by Transport Layer Security (TLS).\n   There are some significant security concerns with that mechanism,\n   which could be addressed by the use of a challenge response\n   authentication mechanism protected by TLS.  Unfortunately, the\n   challenge response mechanisms presently on the standards track all\n   fail to meet requirements necessary for widespread deployment, and\n   have had success only in limited use.\n\n   This specification describes a family of Simple Authentication and\n   Security Layer (SASL; RFC 4422) authentication mechanisms called the\n   Salted Challenge Response Authentication Mechanism (SCRAM), which\n   addresses the security concerns and meets the deployability\n   requirements.  When used in combination with TLS or an equivalent\n   security layer, a mechanism from this family could improve the status\n   quo for application protocol authentication and provide a suitable\n   choice for a mandatory-to-implement mechanism for future application\n   protocol standards.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 1]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc5802.\n\nCopyright Notice\n\n   Copyright (c) 2010 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 2]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\nTable of Contents\n\n   1. Introduction ....................................................4\n   2. Conventions Used in This Document ...............................5\n      2.1. Terminology ................................................5\n      2.2. Notation ...................................................6\n   3. SCRAM Algorithm Overview ........................................7\n   4. SCRAM Mechanism Names ...........................................8\n   5. SCRAM Authentication Exchange ...................................9\n      5.1. SCRAM Attributes ..........................................10\n      5.2. Compliance with SASL Mechanism Requirements ...............13\n   6. Channel Binding ................................................14\n      6.1. Default Channel Binding ...................................15\n   7. Formal Syntax ..................................................15\n   8. SCRAM as a GSS-API Mechanism ...................................19\n      8.1. GSS-API Principal Name Types for SCRAM ....................19\n      8.2. GSS-API Per-Message Tokens for SCRAM ......................20\n      8.3. GSS_Pseudo_random() for SCRAM .............................20\n   9. Security Considerations ........................................20\n   10. IANA Considerations ...........................................22\n   11. Acknowledgements ..............................................23\n   12. References ....................................................24\n      12.1. Normative References .....................................24\n      12.2. Normative References for GSS-API Implementors ............24\n      12.3. Informative References ...................................25\n   Appendix A. Other Authentication Mechanisms .......................27\n   Appendix B. Design Motivations ....................................27\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 3]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n1.  Introduction\n\n   This specification describes a family of authentication mechanisms\n   called the Salted Challenge Response Authentication Mechanism (SCRAM)\n   which addresses the requirements necessary to deploy a challenge-\n   response mechanism more widely than past attempts (see Appendix A and\n   Appendix B).  When used in combination with Transport Layer Security\n   (TLS; see [RFC5246]) or an equivalent security layer, a mechanism\n   from this family could improve the status quo for application\n   protocol authentication and provide a suitable choice for a\n   mandatory-to-implement mechanism for future application protocol\n   standards.\n\n   For simplicity, this family of mechanisms does not presently include\n   negotiation of a security layer [RFC4422].  It is intended to be used\n   with an external security layer such as that provided by TLS or SSH,\n   with optional channel binding [RFC5056] to the external security\n   layer.\n\n   SCRAM is specified herein as a pure Simple Authentication and\n   Security Layer (SASL) [RFC4422] mechanism, but it conforms to the new\n   bridge between SASL and the Generic Security Service Application\n   Program Interface (GSS-API) called \"GS2\" [RFC5801].  This means that\n   this document defines both, a SASL mechanism and a GSS-API mechanism.\n\n   SCRAM provides the following protocol features:\n\n   o  The authentication information stored in the authentication\n      database is not sufficient by itself to impersonate the client.\n      The information is salted to prevent a pre-stored dictionary\n      attack if the database is stolen.\n\n   o  The server does not gain the ability to impersonate the client to\n      other servers (with an exception for server-authorized proxies).\n\n   o  The mechanism permits the use of a server-authorized proxy without\n      requiring that proxy to have super-user rights with the back-end\n      server.\n\n   o  Mutual authentication is supported, but only the client is named\n      (i.e., the server has no name).\n\n   o  When used as a SASL mechanism, SCRAM is capable of transporting\n      authorization identities (see [RFC4422], Section 2) from the\n      client to the server.\n\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 4]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   A separate document defines a standard LDAPv3 [RFC4510] attribute\n   that enables storage of the SCRAM authentication information in LDAP.\n   See [RFC5803].\n\n   For an in-depth discussion of why other challenge response mechanisms\n   are not considered sufficient, see Appendix A.  For more information\n   about the motivations behind the design of this mechanism, see\n   Appendix B.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   Formal syntax is defined by [RFC5234] including the core rules\n   defined in Appendix B of [RFC5234].\n\n   Example lines prefaced by \"C:\" are sent by the client and ones\n   prefaced by \"S:\" by the server.  If a single \"C:\" or \"S:\" label\n   applies to multiple lines, then the line breaks between those lines\n   are for editorial clarity only, and are not part of the actual\n   protocol exchange.\n\n2.1.  Terminology\n\n   This document uses several terms defined in [RFC4949] (\"Internet\n   Security Glossary\") including the following: authentication,\n   authentication exchange, authentication information, brute force,\n   challenge-response, cryptographic hash function, dictionary attack,\n   eavesdropping, hash result, keyed hash, man-in-the-middle, nonce,\n   one-way encryption function, password, replay attack, and salt.\n   Readers not familiar with these terms should use that glossary as a\n   reference.\n\n   Some clarifications and additional definitions follow:\n\n   o  Authentication information: Information used to verify an identity\n      claimed by a SCRAM client.  The authentication information for a\n      SCRAM identity consists of salt, iteration count, \"StoredKey\" and\n      \"ServerKey\" (as defined in the algorithm overview) for each\n      supported cryptographic hash function.\n\n   o  Authentication database: The database used to look up the\n      authentication information associated with a particular identity.\n      For application protocols, LDAPv3 (see [RFC4510]) is frequently\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 5]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n      used as the authentication database.  For network-level protocols\n      such as PPP or 802.11x, the use of RADIUS [RFC2865] is more\n      common.\n\n   o  Base64: An encoding mechanism defined in [RFC4648] that converts\n      an octet string input to a textual output string that can be\n      easily displayed to a human.  The use of base64 in SCRAM is\n      restricted to the canonical form with no whitespace.\n\n   o  Octet: An 8-bit byte.\n\n   o  Octet string: A sequence of 8-bit bytes.\n\n   o  Salt: A random octet string that is combined with a password\n      before applying a one-way encryption function.  This value is used\n      to protect passwords that are stored in an authentication\n      database.\n\n2.2.  Notation\n\n   The pseudocode description of the algorithm uses the following\n   notations:\n\n   o  \":=\": The variable on the left-hand side represents the octet\n      string resulting from the expression on the right-hand side.\n\n   o  \"+\": Octet string concatenation.\n\n   o  \"[ ]\": A portion of an expression enclosed in \"[\" and \"]\" may not\n      be included in the result under some circumstances.  See the\n      associated text for a description of those circumstances.\n\n   o  Normalize(str): Apply the SASLprep profile [RFC4013] of the\n      \"stringprep\" algorithm [RFC3454] as the normalization algorithm to\n      a UTF-8 [RFC3629] encoded \"str\".  The resulting string is also in\n      UTF-8.  When applying SASLprep, \"str\" is treated as a \"stored\n      strings\", which means that unassigned Unicode codepoints are\n      prohibited (see Section 7 of [RFC3454]).  Note that\n      implementations MUST either implement SASLprep or disallow use of\n      non US-ASCII Unicode codepoints in \"str\".\n\n   o  HMAC(key, str): Apply the HMAC keyed hash algorithm (defined in\n      [RFC2104]) using the octet string represented by \"key\" as the key\n      and the octet string \"str\" as the input string.  The size of the\n      result is the hash result size for the hash function in use.  For\n      example, it is 20 octets for SHA-1 (see [RFC3174]).\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 6]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   o  H(str): Apply the cryptographic hash function to the octet string\n      \"str\", producing an octet string as a result.  The size of the\n      result depends on the hash result size for the hash function in\n      use.\n\n   o  XOR: Apply the exclusive-or operation to combine the octet string\n      on the left of this operator with the octet string on the right of\n      this operator.  The length of the output and each of the two\n      inputs will be the same for this use.\n\n   o  Hi(str, salt, i):\n\n     U1   := HMAC(str, salt + INT(1))\n     U2   := HMAC(str, U1)\n     ...\n     Ui-1 := HMAC(str, Ui-2)\n     Ui   := HMAC(str, Ui-1)\n\n     Hi := U1 XOR U2 XOR ... XOR Ui\n\n      where \"i\" is the iteration count, \"+\" is the string concatenation\n      operator, and INT(g) is a 4-octet encoding of the integer g, most\n      significant octet first.\n\n      Hi() is, essentially, PBKDF2 [RFC2898] with HMAC() as the\n      pseudorandom function (PRF) and with dkLen == output length of\n      HMAC() == output length of H().\n\n3.  SCRAM Algorithm Overview\n\n   The following is a description of a full, uncompressed SASL SCRAM\n   authentication exchange.  Nothing in SCRAM prevents either sending\n   the client-first message with the SASL authentication request defined\n   by an application protocol (\"initial client response\"), or sending\n   the server-final message as additional data of the SASL outcome of\n   authentication exchange defined by an application protocol.  See\n   [RFC4422] for more details.\n\n   Note that this section omits some details, such as client and server\n   nonces.  See Section 5 for more details.\n\n   To begin with, the SCRAM client is in possession of a username and\n   password (*) (or a ClientKey/ServerKey, or SaltedPassword).  It sends\n   the username to the server, which retrieves the corresponding\n   authentication information, i.e., a salt, StoredKey, ServerKey, and\n   the iteration count i.  (Note that a server implementation may choose\n\n\n\n\n\nNewman, et al.               Standards Track                    [Page 7]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   to use the same iteration count for all accounts.)  The server sends\n   the salt and the iteration count to the client, which then computes\n   the following values and sends a ClientProof to the server:\n\n   (*) Note that both the username and the password MUST be encoded in\n   UTF-8 [RFC3629].\n\n   Informative Note: Implementors are encouraged to create test cases\n   that use both usernames and passwords with non-ASCII codepoints.  In\n   particular, it's useful to test codepoints whose \"Unicode\n   Normalization Form C\" and \"Unicode Normalization Form KC\" are\n   different.  Some examples of such codepoints include Vulgar Fraction\n   One Half (U+00BD) and Acute Accent (U+00B4).\n\n     SaltedPassword  := Hi(Normalize(password), salt, i)\n     ClientKey       := HMAC(SaltedPassword, \"Client Key\")\n     StoredKey       := H(ClientKey)\n     AuthMessage     := client-first-message-bare + \",\" +\n                        server-first-message + \",\" +\n                        client-final-message-without-proof\n     ClientSignature := HMAC(StoredKey, AuthMessage)\n     ClientProof     := ClientKey XOR ClientSignature\n     ServerKey       := HMAC(SaltedPassword, \"Server Key\")\n     ServerSignature := HMAC(ServerKey, AuthMessage)\n\n   The server authenticates the client by computing the ClientSignature,\n   exclusive-ORing that with the ClientProof to recover the ClientKey\n   and verifying the correctness of the ClientKey by applying the hash\n   function and comparing the result to the StoredKey.  If the ClientKey\n   is correct, this proves that the client has access to the user's\n   password.\n\n   Similarly, the client authenticates the server by computing the\n   ServerSignature and comparing it to the value sent by the server.  If\n   the two are equal, it proves that the server had access to the user's\n   ServerKey.\n\n   The AuthMessage is computed by concatenating messages from the\n   authentication exchange.  The format of these messages is defined in\n   Section 7.\n\n4.  SCRAM Mechanism Names\n\n   A SCRAM mechanism name is a string \"SCRAM-\" followed by the\n   uppercased name of the underlying hash function taken from the IANA\n   \"Hash Function Textual Names\" registry (see http://www.iana.org),\n   optionally followed by the suffix \"-PLUS\" (see below).  Note that\n   SASL mechanism names are limited to 20 octets, which means that only\n\n\n\nNewman, et al.               Standards Track                    [Page 8]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   hash function names with lengths shorter or equal to 9 octets\n   (20-length(\"SCRAM-\")-length(\"-PLUS\") can be used.  For cases when the\n   underlying hash function name is longer than 9 octets, an alternative\n   9-octet (or shorter) name can be used to construct the corresponding\n   SCRAM mechanism name, as long as this alternative name doesn't\n   conflict with any other hash function name from the IANA \"Hash\n   Function Textual Names\" registry.  In order to prevent future\n   conflict, such alternative names SHOULD be registered in the IANA\n   \"Hash Function Textual Names\" registry.\n\n   For interoperability, all SCRAM clients and servers MUST implement\n   the SCRAM-SHA-1 authentication mechanism, i.e., an authentication\n   mechanism from the SCRAM family that uses the SHA-1 hash function as\n   defined in [RFC3174].\n\n   The \"-PLUS\" suffix is used only when the server supports channel\n   binding to the external channel.  If the server supports channel\n   binding, it will advertise both the \"bare\" and \"plus\" versions of\n   whatever mechanisms it supports (e.g., if the server supports only\n   SCRAM with SHA-1, then it will advertise support for both SCRAM-SHA-1\n   and SCRAM-SHA-1-PLUS).  If the server does not support channel\n   binding, then it will advertise only the \"bare\" version of the\n   mechanism (e.g., only SCRAM-SHA-1).  The \"-PLUS\" exists to allow\n   negotiation of the use of channel binding.  See Section 6.\n\n5.  SCRAM Authentication Exchange\n\n   SCRAM is a SASL mechanism whose client response and server challenge\n   messages are text-based messages containing one or more attribute-\n   value pairs separated by commas.  Each attribute has a one-letter\n   name.  The messages and their attributes are described in\n   Section 5.1, and defined in Section 7.\n\n   SCRAM is a client-first SASL mechanism (see [RFC4422], Section 5,\n   item 2a), and returns additional data together with a server's\n   indication of a successful outcome.\n\n   This is a simple example of a SCRAM-SHA-1 authentication exchange\n   when the client doesn't support channel bindings (username 'user' and\n   password 'pencil' are used):\n\n   C: n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL\n   S: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,\n      i=4096\n   C: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,\n      p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=\n   S: v=rmF9pqV8S7suAoZWja4dJRkFsKQ=\n\n\n\n\nNewman, et al.               Standards Track                    [Page 9]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   First, the client sends the \"client-first-message\" containing:\n\n   o  a GS2 header consisting of a flag indicating whether channel\n      binding is supported-but-not-used, not supported, or used, and an\n      optional SASL authorization identity;\n\n   o  SCRAM username and a random, unique nonce attributes.\n\n   Note that the client's first message will always start with \"n\", \"y\",\n   or \"p\"; otherwise, the message is invalid and authentication MUST\n   fail.  This is important, as it allows for GS2 extensibility (e.g.,\n   to add support for security layers).\n\n   In response, the server sends a \"server-first-message\" containing the\n   user's iteration count i and the user's salt, and appends its own\n   nonce to the client-specified one.\n\n   The client then responds by sending a \"client-final-message\" with the\n   same nonce and a ClientProof computed using the selected hash\n   function as explained earlier.\n\n   The server verifies the nonce and the proof, verifies that the\n   authorization identity (if supplied by the client in the first\n   message) is authorized to act as the authentication identity, and,\n   finally, it responds with a \"server-final-message\", concluding the\n   authentication exchange.\n\n   The client then authenticates the server by computing the\n   ServerSignature and comparing it to the value sent by the server.  If\n   the two are different, the client MUST consider the authentication\n   exchange to be unsuccessful, and it might have to drop the\n   connection.\n\n5.1.  SCRAM Attributes\n\n   This section describes the permissible attributes, their use, and the\n   format of their values.  All attribute names are single US-ASCII\n   letters and are case-sensitive.\n\n   Note that the order of attributes in client or server messages is\n   fixed, with the exception of extension attributes (described by the\n   \"extensions\" ABNF production), which can appear in any order in the\n   designated positions.  See Section 7 for authoritative reference.\n\n   o  a: This is an optional attribute, and is part of the GS2 [RFC5801]\n      bridge between the GSS-API and SASL.  This attribute specifies an\n      authorization identity.  A client may include it in its first\n      message to the server if it wants to authenticate as one user, but\n\n\n\nNewman, et al.               Standards Track                   [Page 10]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n      subsequently act as a different user.  This is typically used by\n      an administrator to perform some management task on behalf of\n      another user, or by a proxy in some situations.\n\n         Upon the receipt of this value the server verifies its\n         correctness according to the used SASL protocol profile.\n         Failed verification results in failed authentication exchange.\n\n         If this attribute is omitted (as it normally would be), the\n         authorization identity is assumed to be derived from the\n         username specified with the (required) \"n\" attribute.\n\n         The server always authenticates the user specified by the \"n\"\n         attribute.  If the \"a\" attribute specifies a different user,\n         the server associates that identity with the connection after\n         successful authentication and authorization checks.\n\n         The syntax of this field is the same as that of the \"n\" field\n         with respect to quoting of '=' and ','.\n\n   o  n: This attribute specifies the name of the user whose password is\n      used for authentication (a.k.a. \"authentication identity\"\n      [RFC4422]).  A client MUST include it in its first message to the\n      server.  If the \"a\" attribute is not specified (which would\n      normally be the case), this username is also the identity that\n      will be associated with the connection subsequent to\n      authentication and authorization.\n\n         Before sending the username to the server, the client SHOULD\n         prepare the username using the \"SASLprep\" profile [RFC4013] of\n         the \"stringprep\" algorithm [RFC3454] treating it as a query\n         string (i.e., unassigned Unicode code points are allowed).  If\n         the preparation of the username fails or results in an empty\n         string, the client SHOULD abort the authentication exchange\n         (*).\n\n         (*) An interactive client can request a repeated entry of the\n         username value.\n\n         Upon receipt of the username by the server, the server MUST\n         either prepare it using the \"SASLprep\" profile [RFC4013] of the\n         \"stringprep\" algorithm [RFC3454] treating it as a query string\n         (i.e., unassigned Unicode codepoints are allowed) or otherwise\n         be prepared to do SASLprep-aware string comparisons and/or\n         index lookups.  If the preparation of the username fails or\n         results in an empty string, the server SHOULD abort the\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 11]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n         authentication exchange.  Whether or not the server prepares\n         the username using \"SASLprep\", it MUST use it as received in\n         hash calculations.\n\n         The characters ',' or '=' in usernames are sent as '=2C' and\n         '=3D' respectively.  If the server receives a username that\n         contains '=' not followed by either '2C' or '3D', then the\n         server MUST fail the authentication.\n\n   o  m: This attribute is reserved for future extensibility.  In this\n      version of SCRAM, its presence in a client or a server message\n      MUST cause authentication failure when the attribute is parsed by\n      the other end.\n\n   o  r: This attribute specifies a sequence of random printable ASCII\n      characters excluding ',' (which forms the nonce used as input to\n      the hash function).  No quoting is applied to this string.  As\n      described earlier, the client supplies an initial value in its\n      first message, and the server augments that value with its own\n      nonce in its first response.  It is important that this value be\n      different for each authentication (see [RFC4086] for more details\n      on how to achieve this).  The client MUST verify that the initial\n      part of the nonce used in subsequent messages is the same as the\n      nonce it initially specified.  The server MUST verify that the\n      nonce sent by the client in the second message is the same as the\n      one sent by the server in its first message.\n\n   o  c: This REQUIRED attribute specifies the base64-encoded GS2 header\n      and channel binding data.  It is sent by the client in its second\n      authentication message.  The attribute data consist of:\n\n      *  the GS2 header from the client's first message (recall that the\n         GS2 header contains a channel binding flag and an optional\n         authzid).  This header is going to include channel binding type\n         prefix (see [RFC5056]), if and only if the client is using\n         channel binding;\n\n      *  followed by the external channel's channel binding data, if and\n         only if the client is using channel binding.\n\n   o  s: This attribute specifies the base64-encoded salt used by the\n      server for this user.  It is sent by the server in its first\n      message to the client.\n\n   o  i: This attribute specifies an iteration count for the selected\n      hash function and user, and MUST be sent by the server along with\n      the user's salt.\n\n\n\n\nNewman, et al.               Standards Track                   [Page 12]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n         For the SCRAM-SHA-1/SCRAM-SHA-1-PLUS SASL mechanism, servers\n         SHOULD announce a hash iteration-count of at least 4096.  Note\n         that a client implementation MAY cache ClientKey&ServerKey (or\n         just SaltedPassword) for later reauthentication to the same\n         service, as it is likely that the server is going to advertise\n         the same salt value upon reauthentication.  This might be\n         useful for mobile clients where CPU usage is a concern.\n\n   o  p: This attribute specifies a base64-encoded ClientProof.  The\n      client computes this value as described in the overview and sends\n      it to the server.\n\n   o  v: This attribute specifies a base64-encoded ServerSignature.  It\n      is sent by the server in its final message, and is used by the\n      client to verify that the server has access to the user's\n      authentication information.  This value is computed as explained\n      in the overview.\n\n   o  e: This attribute specifies an error that occurred during\n      authentication exchange.  It is sent by the server in its final\n      message and can help diagnose the reason for the authentication\n      exchange failure.  On failed authentication, the entire server-\n      final-message is OPTIONAL; specifically, a server implementation\n      MAY conclude the SASL exchange with a failure without sending the\n      server-final-message.  This results in an application-level error\n      response without an extra round-trip.  If the server-final-message\n      is sent on authentication failure, then the \"e\" attribute MUST be\n      included.\n\n   o  As-yet unspecified mandatory and optional extensions.  Mandatory\n      extensions are encoded as values of the 'm' attribute (see ABNF\n      for reserved-mext in section 7).  Optional extensions use as-yet\n      unassigned attribute names.\n\n      Mandatory extensions sent by one peer but not understood by the\n      other MUST cause authentication failure (the server SHOULD send\n      the \"extensions-not-supported\" server-error-value).\n\n      Unknown optional extensions MUST be ignored upon receipt.\n\n5.2.  Compliance with SASL Mechanism Requirements\n\n   This section describes compliance with SASL mechanism requirements\n   specified in Section 5 of [RFC4422].\n\n   1)  \"SCRAM-SHA-1\" and \"SCRAM-SHA-1-PLUS\".\n\n   2a) SCRAM is a client-first mechanism.\n\n\n\nNewman, et al.               Standards Track                   [Page 13]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   2b) SCRAM sends additional data with success.\n\n   3)  SCRAM is capable of transferring authorization identities from\n       the client to the server.\n\n   4)  SCRAM does not offer any security layers (SCRAM offers channel\n       binding instead).\n\n   5)  SCRAM has a hash protecting the authorization identity.\n\n6.  Channel Binding\n\n   SCRAM supports channel binding to external secure channels, such as\n   TLS.  Clients and servers may or may not support channel binding,\n   therefore the use of channel binding is negotiable.  SCRAM does not\n   provide security layers, however, therefore it is imperative that\n   SCRAM provide integrity protection for the negotiation of channel\n   binding.\n\n   Use of channel binding is negotiated as follows:\n\n   o  Servers that support the use of channel binding SHOULD advertise\n      both the non-PLUS (SCRAM-<hash-function>) and PLUS-variant (SCRAM-\n      <hash-function>-PLUS) mechanism name.  If the server cannot\n      support channel binding, it SHOULD advertise only the non-PLUS-\n      variant.  If the server would never succeed in the authentication\n      of the non-PLUS-variant due to policy reasons, it MUST advertise\n      only the PLUS-variant.\n\n   o  If the client supports channel binding and the server does not\n      appear to (i.e., the client did not see the -PLUS name advertised\n      by the server), then the client MUST NOT use an \"n\" gs2-cbind-\n      flag.\n\n   o  Clients that support mechanism negotiation and channel binding\n      MUST use a \"p\" gs2-cbind-flag when the server offers the PLUS-\n      variant of the desired GS2 mechanism.\n\n   o  If the client does not support channel binding, then it MUST use\n      an \"n\" gs2-cbind-flag.  Conversely, if the client requires the use\n      of channel binding then it MUST use a \"p\" gs2-cbind-flag.  Clients\n      that do not support mechanism negotiation never use a \"y\" gs2-\n      cbind-flag, they use either \"p\" or \"n\" according to whether they\n      require and support the use of channel binding or whether they do\n      not, respectively.\n\n   o  Upon receipt of the client-first message, the server checks the\n      channel binding flag (gs2-cbind-flag).\n\n\n\nNewman, et al.               Standards Track                   [Page 14]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n      *  If the flag is set to \"y\" and the server supports channel\n         binding, the server MUST fail authentication.  This is because\n         if the client sets the channel binding flag to \"y\", then the\n         client must have believed that the server did not support\n         channel binding -- if the server did in fact support channel\n         binding, then this is an indication that there has been a\n         downgrade attack (e.g., an attacker changed the server's\n         mechanism list to exclude the -PLUS suffixed SCRAM mechanism\n         name(s)).\n\n      *  If the channel binding flag was \"p\" and the server does not\n         support the indicated channel binding type, then the server\n         MUST fail authentication.\n\n   The server MUST always validate the client's \"c=\" field.  The server\n   does this by constructing the value of the \"c=\" attribute and then\n   checking that it matches the client's c= attribute value.\n\n   For more discussions of channel bindings, and the syntax of channel\n   binding data for various security protocols, see [RFC5056].\n\n6.1.  Default Channel Binding\n\n   A default channel binding type agreement process for all SASL\n   application protocols that do not provide their own channel binding\n   type agreement is provided as follows.\n\n   'tls-unique' is the default channel binding type for any application\n   that doesn't specify one.\n\n   Servers MUST implement the \"tls-unique\" [RFC5929] channel binding\n   type, if they implement any channel binding.  Clients SHOULD\n   implement the \"tls-unique\" [RFC5929] channel binding type, if they\n   implement any channel binding.  Clients and servers SHOULD choose the\n   highest-layer/innermost end-to-end TLS channel as the channel to\n   which to bind.\n\n   Servers MUST choose the channel binding type indicated by the client,\n   or fail authentication if they don't support it.\n\n7.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   form (ABNF) notation as specified in [RFC5234].  \"UTF8-2\", \"UTF8-3\",\n   and \"UTF8-4\" non-terminal are defined in [RFC3629].\n\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 15]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   ALPHA = <as defined in RFC 5234 appendix B.1>\n   DIGIT = <as defined in RFC 5234 appendix B.1>\n   UTF8-2 = <as defined in RFC 3629 (STD 63)>\n   UTF8-3 = <as defined in RFC 3629 (STD 63)>\n   UTF8-4 = <as defined in RFC 3629 (STD 63)>\n\n   attr-val        = ALPHA \"=\" value\n                     ;; Generic syntax of any attribute sent\n                     ;; by server or client\n\n   value           = 1*value-char\n\n   value-safe-char = %x01-2B / %x2D-3C / %x3E-7F /\n                     UTF8-2 / UTF8-3 / UTF8-4\n                     ;; UTF8-char except NUL, \"=\", and \",\".\n\n   value-char      = value-safe-char / \"=\"\n\n   printable       = %x21-2B / %x2D-7E\n                     ;; Printable ASCII except \",\".\n                     ;; Note that any \"printable\" is also\n                     ;; a valid \"value\".\n\n   base64-char     = ALPHA / DIGIT / \"/\" / \"+\"\n\n   base64-4        = 4base64-char\n\n   base64-3        = 3base64-char \"=\"\n\n   base64-2        = 2base64-char \"==\"\n\n   base64          = *base64-4 [base64-3 / base64-2]\n\n   posit-number = %x31-39 *DIGIT\n                     ;; A positive number.\n\n   saslname        = 1*(value-safe-char / \"=2C\" / \"=3D\")\n                     ;; Conforms to <value>.\n\n   authzid         = \"a=\" saslname\n                     ;; Protocol specific.\n\n   cb-name         = 1*(ALPHA / DIGIT / \".\" / \"-\")\n                      ;; See RFC 5056, Section 7.\n                      ;; E.g., \"tls-server-end-point\" or\n                      ;; \"tls-unique\".\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 16]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   gs2-cbind-flag  = (\"p=\" cb-name) / \"n\" / \"y\"\n                     ;; \"n\" -> client doesn't support channel binding.\n                     ;; \"y\" -> client does support channel binding\n                     ;;        but thinks the server does not.\n                     ;; \"p\" -> client requires channel binding.\n                     ;; The selected channel binding follows \"p=\".\n\n   gs2-header      = gs2-cbind-flag \",\" [ authzid ] \",\"\n                     ;; GS2 header for SCRAM\n                     ;; (the actual GS2 header includes an optional\n                     ;; flag to indicate that the GSS mechanism is not\n                     ;; \"standard\", but since SCRAM is \"standard\", we\n                     ;; don't include that flag).\n\n   username        = \"n=\" saslname\n                     ;; Usernames are prepared using SASLprep.\n\n   reserved-mext  = \"m=\" 1*(value-char)\n                     ;; Reserved for signaling mandatory extensions.\n                     ;; The exact syntax will be defined in\n                     ;; the future.\n\n   channel-binding = \"c=\" base64\n                     ;; base64 encoding of cbind-input.\n\n   proof           = \"p=\" base64\n\n   nonce           = \"r=\" c-nonce [s-nonce]\n                     ;; Second part provided by server.\n\n   c-nonce         = printable\n\n   s-nonce         = printable\n\n   salt            = \"s=\" base64\n\n   verifier        = \"v=\" base64\n                     ;; base-64 encoded ServerSignature.\n\n   iteration-count = \"i=\" posit-number\n                     ;; A positive number.\n\n   client-first-message-bare =\n                     [reserved-mext \",\"]\n                     username \",\" nonce [\",\" extensions]\n\n   client-first-message =\n                     gs2-header client-first-message-bare\n\n\n\nNewman, et al.               Standards Track                   [Page 17]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   server-first-message =\n                     [reserved-mext \",\"] nonce \",\" salt \",\"\n                     iteration-count [\",\" extensions]\n\n   client-final-message-without-proof =\n                     channel-binding \",\" nonce [\",\"\n                     extensions]\n\n   client-final-message =\n                     client-final-message-without-proof \",\" proof\n\n   server-error = \"e=\" server-error-value\n\n   server-error-value = \"invalid-encoding\" /\n                  \"extensions-not-supported\" /  ; unrecognized 'm' value\n                  \"invalid-proof\" /\n                  \"channel-bindings-dont-match\" /\n                  \"server-does-support-channel-binding\" /\n                    ; server does not support channel binding\n                  \"channel-binding-not-supported\" /\n                  \"unsupported-channel-binding-type\" /\n                  \"unknown-user\" /\n                  \"invalid-username-encoding\" /\n                    ; invalid username encoding (invalid UTF-8 or\n                    ; SASLprep failed)\n                  \"no-resources\" /\n                  \"other-error\" /\n                  server-error-value-ext\n           ; Unrecognized errors should be treated as \"other-error\".\n           ; In order to prevent information disclosure, the server\n           ; may substitute the real reason with \"other-error\".\n\n   server-error-value-ext = value\n           ; Additional error reasons added by extensions\n           ; to this document.\n\n   server-final-message = (server-error / verifier)\n                     [\",\" extensions]\n\n   extensions = attr-val *(\",\" attr-val)\n                     ;; All extensions are optional,\n                     ;; i.e., unrecognized attributes\n                     ;; not defined in this document\n                     ;; MUST be ignored.\n\n   cbind-data    = 1*OCTET\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 18]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   cbind-input   = gs2-header [ cbind-data ]\n                     ;; cbind-data MUST be present for\n                     ;; gs2-cbind-flag of \"p\" and MUST be absent\n                     ;; for \"y\" or \"n\".\n\n8.  SCRAM as a GSS-API Mechanism\n\n   This section and its sub-sections and all normative references of it\n   not referenced elsewhere in this document are INFORMATIONAL for SASL\n   implementors, but they are NORMATIVE for GSS-API implementors.\n\n   SCRAM is actually also a GSS-API mechanism.  The messages are the\n   same, but a) the GS2 header on the client's first message and channel\n   binding data is excluded when SCRAM is used as a GSS-API mechanism,\n   and b) the RFC2743 section 3.1 initial context token header is\n   prefixed to the client's first authentication message (context\n   token).\n\n   The GSS-API mechanism OID for SCRAM-SHA-1 is 1.3.6.1.5.5.14 (see\n   Section 10).\n\n   SCRAM security contexts always have the mutual_state flag\n   (GSS_C_MUTUAL_FLAG) set to TRUE.  SCRAM does not support credential\n   delegation, therefore SCRAM security contexts alway have the\n   deleg_state flag (GSS_C_DELEG_FLAG) set to FALSE.\n\n8.1.  GSS-API Principal Name Types for SCRAM\n\n   SCRAM does not explicitly name acceptor principals.  However, the use\n   of acceptor principal names to find or prompt for passwords is\n   useful.  Therefore, SCRAM supports standard generic name syntaxes for\n   acceptors such as GSS_C_NT_HOSTBASED_SERVICE (see [RFC2743], Section\n   4.1).  Implementations should use the target name passed to\n   GSS_Init_sec_context(), if any, to help retrieve or prompt for SCRAM\n   passwords.\n\n   SCRAM supports only a single name type for initiators:\n   GSS_C_NT_USER_NAME.  GSS_C_NT_USER_NAME is the default name type for\n   SCRAM.\n\n   There is no name canonicalization procedure for SCRAM beyond applying\n   SASLprep as described in Section 5.1.\n\n   The query, display, and exported name syntaxes for SCRAM principal\n   names are all the same.  There are no SCRAM-specific name syntaxes\n   (SCRAM initiator principal names are free-form); -- applications\n   should use generic GSS-API name types such as GSS_C_NT_USER_NAME and\n\n\n\n\nNewman, et al.               Standards Track                   [Page 19]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   GSS_C_NT_HOSTBASED_SERVICE (see [RFC2743], Section 4).  The exported\n   name token does, of course, conform to [RFC2743], Section 3.2, but\n   the \"NAME\" part of the token is just a SCRAM user name.\n\n8.2.  GSS-API Per-Message Tokens for SCRAM\n\n   The per-message tokens for SCRAM as a GSS-API mechanism SHALL be the\n   same as those for the Kerberos V GSS-API mechanism [RFC4121] (see\n   Section 4.2 and sub-sections), using the Kerberos V \"aes128-cts-hmac-\n   sha1-96\" enctype [RFC3962].\n\n   The replay_det_state (GSS_C_REPLAY_FLAG), sequence_state\n   (GSS_C_SEQUENCE_FLAG), conf_avail (GSS_C_CONF_FLAG) and integ_avail\n   (GSS_C_CONF_FLAG) security context flags are always set to TRUE.\n\n   The 128-bit session \"protocol key\" SHALL be derived by using the\n   least significant (right-most) 128 bits of HMAC(StoredKey, \"GSS-API\n   session key\" || ClientKey || AuthMessage).  \"Specific keys\" are then\n   derived as usual as described in Section 2 of [RFC4121], [RFC3961],\n   and [RFC3962].\n\n   The terms \"protocol key\" and \"specific key\" are Kerberos V5 terms\n   [RFC3961].\n\n   SCRAM does support PROT_READY, and is PROT_READY on the initiator\n   side first upon receipt of the server's reply to the initial security\n   context token.\n\n8.3.  GSS_Pseudo_random() for SCRAM\n\n   The GSS_Pseudo_random() [RFC4401] for SCRAM SHALL be the same as for\n   the Kerberos V GSS-API mechanism [RFC4402].  There is no acceptor-\n   asserted sub-session key for SCRAM, thus GSS_C_PRF_KEY_FULL and\n   GSS_C_PRF_KEY_PARTIAL are equivalent for SCRAM's GSS_Pseudo_random().\n   The protocol key to be used for the GSS_Pseudo_random() SHALL be the\n   same as the key defined in Section 8.2.\n\n9.  Security Considerations\n\n   If the authentication exchange is performed without a strong security\n   layer (such as TLS with data confidentiality), then a passive\n   eavesdropper can gain sufficient information to mount an offline\n   dictionary or brute-force attack that can be used to recover the\n   user's password.  The amount of time necessary for this attack\n   depends on the cryptographic hash function selected, the strength of\n   the password, and the iteration count supplied by the server.  An\n   external security layer with strong encryption will prevent this\n   attack.\n\n\n\nNewman, et al.               Standards Track                   [Page 20]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   If the external security layer used to protect the SCRAM exchange\n   uses an anonymous key exchange, then the SCRAM channel binding\n   mechanism can be used to detect a man-in-the-middle attack on the\n   security layer and cause the authentication to fail as a result.\n   However, the man-in-the-middle attacker will have gained sufficient\n   information to mount an offline dictionary or brute-force attack.\n   For this reason, SCRAM allows to increase the iteration count over\n   time.  (Note that a server that is only in possession of \"StoredKey\"\n   and \"ServerKey\" can't automatically increase the iteration count upon\n   successful authentication.  Such an increase would require resetting\n   the user's password.)\n\n   If the authentication information is stolen from the authentication\n   database, then an offline dictionary or brute-force attack can be\n   used to recover the user's password.  The use of salt mitigates this\n   attack somewhat by requiring a separate attack on each password.\n   Authentication mechanisms that protect against this attack are\n   available (e.g., the EKE class of mechanisms).  RFC 2945 [RFC2945] is\n   an example of such technology.  The WG elected not to use EKE like\n   mechanisms as a basis for SCRAM.\n\n   If an attacker obtains the authentication information from the\n   authentication repository and either eavesdrops on one authentication\n   exchange or impersonates a server, the attacker gains the ability to\n   impersonate that user to all servers providing SCRAM access using the\n   same hash function, password, iteration count, and salt.  For this\n   reason, it is important to use randomly generated salt values.\n\n   SCRAM does not negotiate a hash function to use.  Hash function\n   negotiation is left to the SASL mechanism negotiation.  It is\n   important that clients be able to sort a locally available list of\n   mechanisms by preference so that the client may pick the appropriate\n   mechanism to use from a server's advertised mechanism list.  This\n   preference order is not specified here as it is a local matter.  The\n   preference order should include objective and subjective notions of\n   mechanism cryptographic strength (e.g., SCRAM with a successor to\n   SHA-1 may be preferred over SCRAM with SHA-1).\n\n   Note that to protect the SASL mechanism negotiation applications\n   normally must list the server mechanisms twice: once before and once\n   after authentication, the latter using security layers.  Since SCRAM\n   does not provide security layers, the only ways to protect the\n   mechanism negotiation are a) use channel binding to an external\n   channel, or b) use an external channel that authenticates a user-\n   provided server name.\n\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 21]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   SCRAM does not protect against downgrade attacks of channel binding\n   types.  The complexities of negotiating a channel binding type, and\n   handling down-grade attacks in that negotiation, were intentionally\n   left out of scope for this document.\n\n   A hostile server can perform a computational denial-of-service attack\n   on clients by sending a big iteration count value.\n\n   See [RFC4086] for more information about generating randomness.\n\n10.  IANA Considerations\n\n   IANA has added the following family of SASL mechanisms to the SASL\n   Mechanism registry established by [RFC4422]:\n\n   To: iana@iana.org\n   Subject: Registration of a new SASL family SCRAM\n\n   SASL mechanism name (or prefix for the family): SCRAM-*\n   Security considerations: Section 7 of [RFC5802]\n   Published specification (optional, recommended): [RFC5802]\n   Person & email address to contact for further information:\n   IETF SASL WG <sasl@ietf.org>\n   Intended usage: COMMON\n   Owner/Change controller: IESG <iesg@ietf.org>\n   Note: Members of this family MUST be explicitly registered\n   using the \"IETF Review\" [RFC5226] registration procedure.\n   Reviews MUST be requested on the SASL mailing list\n   <sasl@ietf.org> (or a successor designated by the responsible\n   Security AD).\n\n   Note to future SCRAM-mechanism designers: each new SCRAM-SASL\n   mechanism MUST be explicitly registered with IANA and MUST comply\n   with SCRAM-mechanism naming convention defined in Section 4 of this\n   document.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 22]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   IANA has added the following entries to the SASL Mechanism registry\n   established by [RFC4422]:\n\n   To: iana@iana.org\n   Subject: Registration of a new SASL mechanism SCRAM-SHA-1\n\n   SASL mechanism name (or prefix for the family): SCRAM-SHA-1\n   Security considerations: Section 7 of [RFC5802]\n   Published specification (optional, recommended): [RFC5802]\n   Person & email address to contact for further information:\n   IETF SASL WG <sasl@ietf.org>\n   Intended usage: COMMON\n   Owner/Change controller: IESG <iesg@ietf.org>\n   Note:\n\n   To: iana@iana.org\n   Subject: Registration of a new SASL mechanism SCRAM-SHA-1-PLUS\n\n   SASL mechanism name (or prefix for the family): SCRAM-SHA-1-PLUS\n   Security considerations: Section 7 of [RFC5802]\n   Published specification (optional, recommended): [RFC5802]\n   Person & email address to contact for further information:\n   IETF SASL WG <sasl@ietf.org>\n   Intended usage: COMMON\n   Owner/Change controller: IESG <iesg@ietf.org>\n   Note:\n\n   Per this document, IANA has assigned a GSS-API mechanism OID for\n   SCRAM-SHA-1 from the iso.org.dod.internet.security.mechanisms prefix\n   (see \"SMI Security for Mechanism Codes\" registry).\n\n11.  Acknowledgements\n\n   This document benefited from discussions on the SASL WG mailing list.\n   The authors would like to specially thank Dave Cridland, Simon\n   Josefsson, Jeffrey Hutzelman, Kurt Zeilenga, Pasi Eronen, Ben\n   Campbell, Peter Saint-Andre, and Tobias Markmann for their\n   contributions to this document.  A special thank you to Simon\n   Josefsson for shepherding this document and for doing one of the\n   first implementations of this specification.\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 23]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n12.  References\n\n12.1.  Normative References\n\n   [RFC2104]  Krawczyk, H., Bellare, M., and R. Canetti, \"HMAC: Keyed-\n              Hashing for Message Authentication\", RFC 2104,\n              February 1997.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3174]  Eastlake, D. and P. Jones, \"US Secure Hash Algorithm 1\n              (SHA1)\", RFC 3174, September 2001.\n\n   [RFC3454]  Hoffman, P. and M. Blanchet, \"Preparation of\n              Internationalized Strings (\"stringprep\")\", RFC 3454,\n              December 2002.\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, November 2003.\n\n   [RFC4013]  Zeilenga, K., \"SASLprep: Stringprep Profile for User Names\n              and Passwords\", RFC 4013, February 2005.\n\n   [RFC4422]  Melnikov, A. and K. Zeilenga, \"Simple Authentication and\n              Security Layer (SASL)\", RFC 4422, June 2006.\n\n   [RFC4648]  Josefsson, S., \"The Base16, Base32, and Base64 Data\n              Encodings\", RFC 4648, October 2006.\n\n   [RFC5056]  Williams, N., \"On the Use of Channel Bindings to Secure\n              Channels\", RFC 5056, November 2007.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [RFC5929]  Altman, J., Williams, N., and L. Zhu, \"Channel Bindings\n              for TLS\", RFC 5929, July 2010.\n\n12.2.  Normative References for GSS-API Implementors\n\n   [RFC2743]  Linn, J., \"Generic Security Service Application Program\n              Interface Version 2, Update 1\", RFC 2743, January 2000.\n\n   [RFC3961]  Raeburn, K., \"Encryption and Checksum Specifications for\n              Kerberos 5\", RFC 3961, February 2005.\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 24]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   [RFC3962]  Raeburn, K., \"Advanced Encryption Standard (AES)\n              Encryption for Kerberos 5\", RFC 3962, February 2005.\n\n   [RFC4121]  Zhu, L., Jaganathan, K., and S. Hartman, \"The Kerberos\n              Version 5 Generic Security Service Application Program\n              Interface (GSS-API) Mechanism: Version 2\", RFC 4121,\n              July 2005.\n\n   [RFC4401]  Williams, N., \"A Pseudo-Random Function (PRF) API\n              Extension for the Generic Security Service Application\n              Program Interface (GSS-API)\", RFC 4401, February 2006.\n\n   [RFC4402]  Williams, N., \"A Pseudo-Random Function (PRF) for the\n              Kerberos V Generic Security Service Application Program\n              Interface (GSS-API) Mechanism\", RFC 4402, February 2006.\n\n   [RFC5801]  Josefsson, S. and N. Williams, \"Using Generic Security\n              Service Application Program Interface (GSS-API) Mechanisms\n              in Simple Authentication and Security Layer (SASL): The\n              GS2 Mechanism Family\", RFC 5801, July 2010.\n\n12.3.  Informative References\n\n   [CRAMHISTORIC]\n              Zeilenga, K., \"CRAM-MD5 to Historic\", Work in Progress,\n              November 2008.\n\n   [DIGESTHISTORIC]\n              Melnikov, A., \"Moving DIGEST-MD5 to Historic\", Work\n              in Progress, July 2008.\n\n   [RFC2865]  Rigney, C., Willens, S., Rubens, A., and W. Simpson,\n              \"Remote Authentication Dial In User Service (RADIUS)\",\n              RFC 2865, June 2000.\n\n   [RFC2898]  Kaliski, B., \"PKCS #5: Password-Based Cryptography\n              Specification Version 2.0\", RFC 2898, September 2000.\n\n   [RFC2945]  Wu, T., \"The SRP Authentication and Key Exchange System\",\n              RFC 2945, September 2000.\n\n   [RFC4086]  Eastlake, D., Schiller, J., and S. Crocker, \"Randomness\n              Requirements for Security\", BCP 106, RFC 4086, June 2005.\n\n   [RFC4510]  Zeilenga, K., \"Lightweight Directory Access Protocol\n              (LDAP): Technical Specification Road Map\", RFC 4510,\n              June 2006.\n\n\n\n\nNewman, et al.               Standards Track                   [Page 25]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\n   [RFC4616]  Zeilenga, K., \"The PLAIN Simple Authentication and\n              Security Layer (SASL) Mechanism\", RFC 4616, August 2006.\n\n   [RFC4949]  Shirey, R., \"Internet Security Glossary, Version 2\",\n              RFC 4949, August 2007.\n\n   [RFC5226]  Narten, T. and H. Alvestrand, \"Guidelines for Writing an\n              IANA Considerations Section in RFCs\", BCP 26, RFC 5226,\n              May 2008.\n\n   [RFC5246]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.2\", RFC 5246, August 2008.\n\n   [RFC5803]  Melnikov, A., \"Lightweight Directory Access Protocol\n              (LDAP) Schema for Storing Salted Challenge Response\n              Authentication Mechanism (SCRAM) Secrets\", RFC 5803,\n              July 2010.\n\n   [tls-server-end-point]\n              IANA, \"Registration of TLS server end-point channel\n              bindings\", available from http://www.iana.org, June 2008.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 26]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\nAppendix A.  Other Authentication Mechanisms\n\n   The DIGEST-MD5 [DIGESTHISTORIC] mechanism has proved to be too\n   complex to implement and test, and thus has poor interoperability.\n   The security layer is often not implemented, and almost never used;\n   everyone uses TLS instead.  For a more complete list of problems with\n   DIGEST-MD5 that led to the creation of SCRAM, see [DIGESTHISTORIC].\n\n   The CRAM-MD5 SASL mechanism, while widely deployed, also has some\n   problems.  In particular, it is missing some modern SASL features\n   such as support for internationalized usernames and passwords,\n   support for passing of authorization identity, and support for\n   channel bindings.  It also doesn't support server authentication.\n   For a more complete list of problems with CRAM-MD5, see\n   [CRAMHISTORIC].\n\n   The PLAIN [RFC4616] SASL mechanism allows a malicious server or\n   eavesdropper to impersonate the authenticating user to any other\n   server for which the user has the same password.  It also sends the\n   password in the clear over the network, unless TLS is used.  Server\n   authentication is not supported.\n\nAppendix B.  Design Motivations\n\n   The following design goals shaped this document.  Note that some of\n   the goals have changed since the initial version of the document.\n\n   o  The SASL mechanism has all modern SASL features: support for\n      internationalized usernames and passwords, support for passing of\n      authorization identity, and support for channel bindings.\n\n   o  The protocol supports mutual authentication.\n\n   o  The authentication information stored in the authentication\n      database is not sufficient by itself to impersonate the client.\n\n   o  The server does not gain the ability to impersonate the client to\n      other servers (with an exception for server-authorized proxies),\n      unless such other servers allow SCRAM authentication and use the\n      same salt and iteration count for the user.\n\n   o  The mechanism is extensible, but (hopefully) not over-engineered\n      in this respect.\n\n   o  The mechanism is easier to implement than DIGEST-MD5 in both\n      clients and servers.\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 27]\n\f\nRFC 5802                          SCRAM                        July 2010\n\n\nAuthors' Addresses\n\n   Chris Newman\n   Oracle\n   800 Royal Oaks\n   Monrovia, CA  91016\n   USA\n\n   EMail: chris.newman@oracle.com\n\n\n   Abhijit Menon-Sen\n   Oryx Mail Systems GmbH\n\n   EMail: ams@toroid.org\n\n\n   Alexey Melnikov\n   Isode, Ltd.\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Nicolas Williams\n   Oracle\n   5300 Riata Trace Ct\n   Austin, TX  78727\n   USA\n\n   EMail: Nicolas.Williams@oracle.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman, et al.               Standards Track                   [Page 28]\n\f\n"
  },
  {
    "path": "rfc/rfc5819.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                       A. Melnikov\nRequest for Comments: 5819                                 Isode Limited\nCategory: Standards Track                                    T. Sirainen\nISSN: 2070-1721                                             Unaffiliated\n                                                              March 2010\n\n\n   IMAP4 Extension for Returning STATUS Information in Extended LIST\n\nAbstract\n\n   Many IMAP clients display information about total number of\n   messages / total number of unseen messages in IMAP mailboxes.  In\n   order to do that, they are forced to issue a LIST or LSUB command and\n   to list all available mailboxes, followed by a STATUS command for\n   each mailbox found.  This document provides an extension to LIST\n   command that allows the client to request STATUS information for\n   mailboxes together with other information typically returned by the\n   LIST command.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc5819.\n\nCopyright Notice\n\n   Copyright (c) 2010 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\nMelnikov & Sirainen          Standards Track                    [Page 1]\n\f\nRFC 5819                         TITLE*                       March 2010\n\n\nTable of Contents\n\n   1. Introduction ....................................................2\n      1.1. Conventions Used in This Document ..........................2\n   2. STATUS Return Option to LIST Command ............................2\n   3. Examples ........................................................3\n   4. Formal Syntax ...................................................4\n   5. Security Considerations .........................................4\n   6. IANA Considerations .............................................4\n   7. Acknowledgements ................................................5\n   8. Normative References ............................................5\n\n1.  Introduction\n\n   Many IMAP clients display information about the total number of\n   messages / total number of unseen messages in IMAP mailboxes.  In\n   order to do that, they are forced to issue a LIST or LSUB command and\n   to list all available mailboxes, followed by a STATUS command for\n   each mailbox found.  This document provides an extension to LIST\n   command that allows the client to request STATUS information for\n   mailboxes together with other information typically returned by the\n   LIST command.\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [Kwds].\n\n2.  STATUS Return Option to LIST Command\n\n   [RFC3501] explicitly disallows mailbox patterns in the STATUS\n   command.  The main reason was to discourage frequent use of the\n   STATUS command by clients, as it might be quite expensive for an IMAP\n   server to perform.  However, this prohibition had resulted in an\n   opposite effect: a new generation of IMAP clients appeared, that\n   issues a STATUS command for each mailbox returned by the LIST\n   command.  This behavior is suboptimal to say at least.  It wastes\n   extra bandwidth and, in the case of a client that doesn't support\n   IMAP pipelining, also degrades performance by using too many round\n   trips.  This document tries to remedy the situation by specifying a\n   single command that can be used by the client to request all the\n   necessary information.  In order to achieve this goal, this document\n   is extending the LIST command with a new return option, STATUS.  This\n   option takes STATUS data items as parameters.  For each selectable\n\n\n\nMelnikov & Sirainen          Standards Track                    [Page 2]\n\f\nRFC 5819                         TITLE*                       March 2010\n\n\n   mailbox matching the list pattern and selection options, the server\n   MUST return an untagged LIST response followed by an untagged STATUS\n   response containing the information requested in the STATUS return\n   option.\n\n   If an attempted STATUS for a listed mailbox fails because the mailbox\n   can't be selected (e.g., if the \"l\" ACL right [ACL] is granted to the\n   mailbox and the \"r\" right is not granted, or due to a race condition\n   between LIST and STATUS changing the mailbox to \\NoSelect), the\n   STATUS response MUST NOT be returned and the LIST response MUST\n   include the \\NoSelect attribute.  This means the server may have to\n   buffer the LIST reply until it has successfully looked up the\n   necessary STATUS information.\n\n   If the server runs into unexpected problems while trying to look up\n   the STATUS information, it MAY drop the corresponding STATUS reply.\n   In such a situation, the LIST command would still return a tagged OK\n   reply.\n\n3.  Examples\n\n   C: A01 LIST \"\" % RETURN (STATUS (MESSAGES UNSEEN))\n   S: * LIST () \".\"  \"INBOX\"\n   S: * STATUS \"INBOX\" (MESSAGES 17 UNSEEN 16)\n   S: * LIST () \".\" \"foo\"\n   S: * STATUS \"foo\" (MESSAGES 30 UNSEEN 29)\n   S: * LIST (\\NoSelect) \".\" \"bar\"\n   S: A01 OK List completed.\n\n   The \"bar\" mailbox isn't selectable, so it has no STATUS reply.\n\n   C: A02 LIST (SUBSCRIBED RECURSIVEMATCH)\"\" % RETURN (STATUS\n      (MESSAGES))\n   S: * LIST (\\Subscribed) \".\"  \"INBOX\"\n   S: * STATUS \"INBOX\" (MESSAGES 17)\n   S: * LIST () \".\" \"foo\" (CHILDINFO (\"SUBSCRIBED\"))\n   S: A02 OK List completed.\n\n   The LIST reply for \"foo\" is returned because it has matching\n   children, but no STATUS reply is returned because \"foo\" itself\n   doesn't match the selection criteria.\n\n\n\n\n\n\n\n\n\n\nMelnikov & Sirainen          Standards Track                    [Page 3]\n\f\nRFC 5819                         TITLE*                       March 2010\n\n\n4.  Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [ABNF].  Terms not defined here are taken\n   from [RFC3501] and [LISTEXT].\n\n   return-option =/ status-option\n\n   status-option = \"STATUS\" SP \"(\" status-att *(SP status-att) \")\"\n                   ;; This ABNF production complies with\n                   ;; <option-extension> syntax.\n\n5.  Security Considerations\n\n   This extension makes it a bit easier for clients to overload the\n   server by requesting STATUS information for a large number of\n   mailboxes.  However, as already noted in the introduction, existing\n   clients already try to do that by generating a large number of STATUS\n   commands for each mailbox in which they are interested.  While\n   performing STATUS information retrieval for big lists of mailboxes, a\n   server implementation needs to make sure that it can still serve\n   other IMAP connections and yield execution to other connections, when\n   necessary.\n\n6.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  The \"IMAP 4 Capabilities\" registry\n   is available from the IANA webiste:\n\n      http://www.iana.org\n\n   This document defines the LIST-STATUS IMAP capability.  IANA has\n   added it to the registry.\n\n   IANA has also added the following new LIST-EXTENDED option to the\n   IANA registry established by [LISTEXT]:\n\n   To: iana@iana.org\n   Subject: Registration of LIST-EXTENDED option STATUS\n\n   LIST-EXTENDED option name: STATUS\n\n   LIST-EXTENDED option type: RETURN\n\n   LIST-EXTENDED option description: Causes the LIST command to return\n   STATUS responses in addition to LIST responses.\n\n\n\n\nMelnikov & Sirainen          Standards Track                    [Page 4]\n\f\nRFC 5819                         TITLE*                       March 2010\n\n\n   Published specification: RFC 5819\n\n   Security considerations: RFC 5819\n\n   Intended usage: COMMON\n\n   Person and email address to contact for further information:\n   Alexey Melnikov <Alexey.Melnikov@isode.com>\n\n   Owner/Change controller: iesg@ietf.org\n\n7.  Acknowledgements\n\n   Thanks to Philip Van Hoof who pointed out that STATUS and LIST\n   commands should be combined in order to optimize traffic and number\n   of round trips.\n\n8.  Normative References\n\n   [ABNF]     Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n   [ACL]      Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [Kwds]     Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [LISTEXT]  Leiba, B. and A. Melnikov, \"Internet Message Access\n              Protocol version 4 - LIST Command Extensions\", RFC 5258,\n              June 2008.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Sirainen          Standards Track                    [Page 5]\n\f\nRFC 5819                         TITLE*                       March 2010\n\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n   URI:   http://www.melnikov.ca/\n\n\n   Timo Sirainen\n\n   EMail: tss@iki.fi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Sirainen          Standards Track                    [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc5957.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                           D. Karp\nRequest for Comments: 5957                                        Zimbra\nUpdates: 5256                                                  July 2010\nCategory: Standards Track\nISSN: 2070-1721\n\n\n       Display-Based Address Sorting for the IMAP4 SORT Extension\n\nAbstract\n\n   This document describes an IMAP protocol extension enabling server-\n   side message sorting on the commonly displayed portion of the From\n   and To header fields.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc5957.\n\nCopyright Notice\n\n   Copyright (c) 2010 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\nKarp               IMAP4 Display-Based Address Sorting          [Page 1]\n\f\nRFC 5957                                                       July 2010\n\n\nTable of Contents\n\n   1. Introduction ....................................................2\n   2. Conventions Used in This Document ...............................2\n   3. DISPLAY Sort Value for an Address ...............................2\n   4. The DISPLAYFROM and DISPLAYTO Sort Criteria .....................3\n   5. Formal Syntax ...................................................3\n   6. Security Considerations .........................................3\n   7. Internationalization Considerations .............................4\n   8. IANA Considerations .............................................4\n   9. Normative References ............................................4\n\n1.  Introduction\n\n   The [SORT] extension to the [IMAP] protocol provides a means for the\n   server-based sorting of messages.  It defines a set of sort criteria\n   and the mechanism for determining the sort value of a message for\n   each such ordering.\n\n   The [SORT] FROM and TO orderings sort messages lexically on the\n   [IMAP] addr-mailbox of the first address in the message's From and To\n   headers, respectively.  This document provides two alternative\n   orderings, DISPLAYFROM and DISPLAYTO, which sort messages based on\n   the first From or To address's [IMAP] addr-name (generally the same\n   as its [RFC5322] display-name), when present.\n\n   A server that supports the full [SORT] extension as well as both the\n   DISPLAYFROM and DISPLAYTO sort criteria indicates this by returning\n   \"SORT=DISPLAY\" in its CAPABILITY response.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n3.  DISPLAY Sort Value for an Address\n\n   For the purposes of the sort criteria defined in this document, the\n   sort value for an [IMAP] address structure is defined as follows:\n\n   o  If the address structure's [IMAP] addr-name is non-NIL, apply the\n      procedure from [RFC5255], Section 4.6.  (That is, decode any\n      [RFC2047] encoded-words and convert the resulting character string\n      into a charset valid for the currently active [RFC4790] collation,\n      with a default of UTF-8.)  If the resulting octet string is not\n      the empty string, use it as the sort value for the address.\n\n\n\n\nKarp               IMAP4 Display-Based Address Sorting          [Page 2]\n\f\nRFC 5957                                                       July 2010\n\n\n   o  Otherwise, if the address structure's [IMAP] addr-mailbox and\n      [IMAP] addr-host are both non-NIL, the sort value for the address\n      is addr-mailbox@addr-host.\n\n   o  Otherwise, if the address structure's [IMAP] addr-mailbox is non-\n      NIL, the sort value for the address is its addr-mailbox.\n\n   o  If none of the above conditions are met, the sort value for the\n      address is the empty string.\n\n4.  The DISPLAYFROM and DISPLAYTO Sort Criteria\n\n   This document introduces two new [SORT] sort criteria, DISPLAYFROM\n   and DISPLAYTO.  A message's sort value under these orderings MUST be\n   derived as follows:\n\n   A \"derived-addr\" value is created from the [IMAP] envelope structure\n   resulting from a FETCH ENVELOPE on the message.  For DISPLAYFROM, the\n   derived-addr value is the [IMAP] env-from value.  For DISPLAYTO, the\n   derived-addr value is the [IMAP] env-to value.\n\n   o  If the derived-addr value is NIL, the message's sort value is the\n      empty string.\n\n   o  Otherwise, the message's sort value is the DISPLAY sort value of\n      the first [IMAP] address in the derived-addr value.\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].  [IMAP] defines the\n   non-terminal \"capability\", and [SORT] defines \"sort-key\".\n\n   capability    =/ \"SORT=DISPLAY\"\n\n   sort-key      =/ \"DISPLAYFROM\" / \"DISPLAYTO\"\n\n6.  Security Considerations\n\n   This document defines an additional IMAP4 capability.  As such, it\n   does not change the underlying security considerations of [IMAP].\n   The author believes that no new security issues are introduced with\n   this additional IMAP4 capability.\n\n\n\n\n\n\n\n\nKarp               IMAP4 Display-Based Address Sorting          [Page 3]\n\f\nRFC 5957                                                       July 2010\n\n\n7.  Internationalization Considerations\n\n   DISPLAYFROM and DISPLAYTO are string-based sort criteria.  As stated\n   in [SORT], the active [RFC4790] collation as per [RFC5255] MUST be\n   used when sorting such strings.\n\n   The DISPLAYFROM and DISPLAYTO orderings sort on the full decoded\n   [IMAP] addr-name, when present.  They do not attempt to parse this\n   string in a locale- or language-dependent manner in order to\n   determine and sort on some semantically meaningful substring such as\n   the surname.\n\n8.  IANA Considerations\n\n   [IMAP] capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  This document constitutes\n   registration of the SORT=DISPLAY capability in the [IMAP]\n   capabilities registry.\n\n9.  Normative References\n\n   [IMAP]     Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC2047]  Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n              Part Three: Message Header Extensions for Non-ASCII Text\",\n              RFC 2047, November 1996.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC4790]  Newman, C., Duerst, M., and A. Gulbrandsen, \"Internet\n              Application Protocol Collation Registry\", RFC 4790, March\n              2007.\n\n   [RFC5234]  Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234, January\n              2008.\n\n   [RFC5255]  Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n              Message Access Protocol Internationalization\", RFC 5255,\n              June 2008.\n\n   [RFC5322]  Resnick, P., Ed., \"Internet Message Format\", RFC 5322,\n              October 2008.\n\n\n\n\n\n\nKarp               IMAP4 Display-Based Address Sorting          [Page 4]\n\f\nRFC 5957                                                       July 2010\n\n\n   [SORT]     Crispin, M. and K. Murchison, \"Internet Message Access\n              Protocol - SORT and THREAD Extensions\", RFC 5256, June\n              2008.\n\nAuthor's Address\n\n   Dan Karp\n   Zimbra\n   3401 Hillview Avenue\n   Palo Alto, CA  94304\n   USA\n\n   EMail: dkarp@zimbra.com\n   URI:   http://www.zimbra.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKarp               IMAP4 Display-Based Address Sorting          [Page 5]\n\f\n"
  },
  {
    "path": "rfc/rfc6154.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                          B. Leiba\nRequest for Comments: 6154                           Huawei Technologies\nCategory: Standards Track                                    J. Nicolson\nISSN: 2070-1721                                                   Google\n                                                              March 2011\n\n\n             IMAP LIST Extension for Special-Use Mailboxes\n\nAbstract\n\n   Some IMAP message stores include special-use mailboxes, such as those\n   used to hold draft messages or sent messages.  Many mail clients\n   allow users to specify where draft or sent messages should be put,\n   but configuring them requires that the user know which mailboxes the\n   server has set aside for these purposes.  This extension adds new\n   optional mailbox attributes that a server may include in IMAP LIST\n   command responses to identify special-use mailboxes to the client,\n   easing configuration.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6154.\n\nCopyright Notice\n\n   Copyright (c) 2011 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 1]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3\n     1.1.  Conventions Used in This Document  . . . . . . . . . . . .  3\n   2.  New Mailbox Attributes Identifying Special-Use Mailboxes . . .  3\n   3.  Extension to IMAP CREATE Command to Set Special-Use\n       Attributes . . . . . . . . . . . . . . . . . . . . . . . . . .  5\n   4.  IMAP METADATA Entry for Special-Use Attributes . . . . . . . .  6\n   5.  Examples . . . . . . . . . . . . . . . . . . . . . . . . . . .  7\n     5.1.  Example of an IMAP LIST Command  . . . . . . . . . . . . .  7\n     5.2.  Example of an Extended IMAP LIST Command . . . . . . . . .  7\n     5.3.  Example of an IMAP CREATE Command  . . . . . . . . . . . .  8\n     5.4.  Example of Using IMAP METADATA to Manipulate\n           Special-Use Attributes . . . . . . . . . . . . . . . . . .  8\n   6.  Formal Syntax  . . . . . . . . . . . . . . . . . . . . . . . .  9\n   7.  Security Considerations  . . . . . . . . . . . . . . . . . . .  9\n   8.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 10\n     8.1.  Registration of USEATTR IMAP Response Code . . . . . . . . 10\n     8.2.  Registration of CREATE-SPECIAL-USE IMAP Capability . . . . 10\n     8.3.  Registration of SPECIAL-USE IMAP Capability  . . . . . . . 10\n     8.4.  Registration of SPECIAL-USE Selection Option . . . . . . . 10\n     8.5.  Registration of SPECIAL-USE Return Option  . . . . . . . . 11\n     8.6.  Registration of SPECIAL-USE Metadata . . . . . . . . . . . 11\n   9.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 12\n     9.1.  Normative References . . . . . . . . . . . . . . . . . . . 12\n     9.2.  Informative References . . . . . . . . . . . . . . . . . . 12\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 2]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n1.  Introduction\n\n   Some IMAP message stores include special-use mailboxes, such as those\n   used to hold draft messages or sent messages.  Many mail clients\n   allow users to specify where draft or sent messages should be put,\n   but configuring them requires that the user know which mailboxes the\n   server has set aside for these purposes.  This extension adds new\n   optional mailbox attributes that a server may include in IMAP LIST\n   command responses to identify special-use mailboxes to the client,\n   easing configuration.\n\n   In addition, this extension adds an optional parameter on the IMAP\n   CREATE command, allowing a client to assign a special use to a\n   mailbox when it is created.  Servers may choose to support this part\n   of the extension, but are not required to.\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [RFC2119].\n\n2.  New Mailbox Attributes Identifying Special-Use Mailboxes\n\n   An IMAP server that supports this extension MAY include any or all of\n   the following attributes in responses to the non-extended IMAP LIST\n   command.  The new attributes are included along with existing\n   attributes, such as \"\\Marked\" and \"\\Noselect\".  A given mailbox may\n   have none, one, or more than one of these attributes.  In some cases,\n   a special use is advice to a client about what to put in that\n   mailbox.  In other cases, it's advice to a client about what to\n   expect to find there.  There is no capability string related to the\n   support of special-use attributes on the non-extended LIST command.\n\n   For the extended list command [RFC5258], this extension adds a new\n   capability string, a new selection option, and a new return option,\n   all called \"SPECIAL-USE\".  Supporting implementations MUST include\n   the \"SPECIAL-USE\" capability string in response to an IMAP CAPABILITY\n   command.  If the client specifies the \"SPECIAL-USE\" selection option,\n   the LIST command MUST return only those mailboxes that have a\n   special-use attribute set.  If the client specifies the \"SPECIAL-USE\"\n   return option, the LIST command MUST return the new special-use\n   attributes on those mailboxes that have them set.  The \"SPECIAL-USE\"\n\n\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 3]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n   return option is implied by the \"SPECIAL-USE\" selection option.  The\n   extended LIST command MAY return SPECIAL-USE attributes even if the\n   client does not specify the return option.\n\n   The new attributes defined here are as follows:\n\n   \\All\n        This mailbox presents all messages in the user's message store.\n        Implementations MAY omit some messages, such as, perhaps, those\n        in \\Trash and \\Junk.  When this special use is supported, it is\n        almost certain to represent a virtual mailbox.\n\n   \\Archive\n        This mailbox is used to archive messages.  The meaning of an\n        \"archival\" mailbox is server-dependent; typically, it will be\n        used to get messages out of the inbox, or otherwise keep them\n        out of the user's way, while still making them accessible.\n\n   \\Drafts\n        This mailbox is used to hold draft messages -- typically,\n        messages that are being composed but have not yet been sent.  In\n        some server implementations, this might be a virtual mailbox,\n        containing messages from other mailboxes that are marked with\n        the \"\\Draft\" message flag.  Alternatively, this might just be\n        advice that a client put drafts here.\n\n   \\Flagged\n        This mailbox presents all messages marked in some way as\n        \"important\".  When this special use is supported, it is likely\n        to represent a virtual mailbox collecting messages (from other\n        mailboxes) that are marked with the \"\\Flagged\" message flag.\n\n   \\Junk\n        This mailbox is where messages deemed to be junk mail are held.\n        Some server implementations might put messages here\n        automatically.  Alternatively, this might just be advice to a\n        client-side spam filter.\n\n   \\Sent\n        This mailbox is used to hold copies of messages that have been\n        sent.  Some server implementations might put messages here\n        automatically.  Alternatively, this might just be advice that a\n        client save sent messages here.\n\n   \\Trash\n        This mailbox is used to hold messages that have been deleted or\n        marked for deletion.  In some server implementations, this might\n        be a virtual mailbox, containing messages from other mailboxes\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 4]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n        that are marked with the \"\\Deleted\" message flag.\n        Alternatively, this might just be advice that a client that\n        chooses not to use the IMAP \"\\Deleted\" model should use this as\n        its trash location.  In server implementations that strictly\n        expect the IMAP \"\\Deleted\" model, this special use is likely not\n        to be supported.\n\n   All of the above attributes are OPTIONAL, and any given server or\n   message store may support any combination of the attributes, or none\n   at all.  In most cases, there will likely be at most one mailbox with\n   a given attribute for a given user, but in some server or message\n   store implementations it might be possible for multiple mailboxes to\n   have the same special-use attribute.\n\n   Special-use attributes are likely to be user-specific.  User Adam\n   might share his \\Sent mailbox with user Barb, but that mailbox is\n   unlikely to also serve as Barb's \\Sent mailbox.  It's certainly\n   possible for Adam and Barb to each set the \\Sent use on the same\n   mailbox, but that would be done by specific action (see the sections\n   below).\n\n3.  Extension to IMAP CREATE Command to Set Special-Use Attributes\n\n   As an OPTIONAL feature, a server MAY allow clients to designate a\n   mailbox, at creation, as having one or more special uses.  This\n   extension defines the \"USE\" parameter to the IMAP CREATE command for\n   that purpose (using the syntax defined in RFC 4466 section 2.2\n   [RFC4466]).  The new OPTIONAL \"USE\" parameter is followed by a\n   parenthesized list of zero or more special-use attributes, as defined\n   above.\n\n   In some server implementations, some special uses may imply automatic\n   action by the server.  For example, creation of a \"\\Junk\" mailbox\n   might cause the server to start placing messages that have been\n   evaluated as spam into the mailbox.\n\n   In some server implementations, some special uses may result in a\n   mailbox with unusual characteristics or side effects.  For example,\n   creation of an \"\\All\" mailbox might cause the server to create a\n   virtual mailbox, rather than a standard one, and that mailbox might\n   behave in unexpected ways (COPY into it might fail, for example).\n\n   Servers MAY allow the creation of a special-use mailbox even if one\n   so designated already exists.  This might have the effect of moving\n   the special use from the old mailbox to the new one, or might create\n   multiple mailboxes with the same special use.  Alternatively, servers\n   MAY refuse the creation, considering the designation to be a\n   conflict.\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 5]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n   If the server cannot create a mailbox with the designated special use\n   defined, for whatever reason, it MUST NOT create the mailbox, and\n   MUST respond to the CREATE command with a tagged NO response.  If the\n   reason for the failure is related to the special-use attribute (the\n   specified special use is not supported or cannot be assigned to the\n   specified mailbox), the server SHOULD include the new \"USEATTR\"\n   response code in the tagged response (see Section 5.3 for an\n   example).\n\n   An IMAP server that supports this OPTIONAL feature will advertise the\n   \"CREATE-SPECIAL-USE\" capability string.  Clients MUST NOT use the\n   \"USE\" parameter unless the server advertises the capability.  Note\n   that this capability string is different from the \"SPECIAL-USE\"\n   string defined above, and a server that supports both functions MUST\n   advertise both capability strings.\n\n4.  IMAP METADATA Entry for Special-Use Attributes\n\n   If a server supports this extension and the METADATA extension\n   [RFC5464], it SHOULD tie the special-use attributes for a mailbox to\n   its metadata entry \"/private/specialuse\".  The value of /private/\n   specialuse is either NIL (if there are no special-use attributes for\n   that mailbox) or a space-separated list of special-use attributes,\n   presented the same way they would be presented in the LIST command\n   response.\n\n   Such a server MAY allow the setting of special-use attributes through\n   the METADATA mechanisms, thereby allowing clients to change the\n   special uses of existing mailboxes.  These changes might have side\n   effects, as the server automatically adjusts the special uses\n   accordingly, just as it might do with CREATE USE, above.  See\n   Section 5.4 for an example.\n\n   A server that supports this MUST check the validity of changes to the\n   special-use attributes that are done through the metadata in the same\n   way that it checks validity for the CREATE command and for any\n   internal mechanisms for setting special uses on mailboxes.  It MUST\n   NOT just blindly accept setting of these metadata by clients, which\n   might result in the setting of special uses that the implementation\n   does not support, multiple mailboxes with the same special use, or\n   other situations that the implementation considers invalid.\n\n\n\n\n\n\n\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 6]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n5.  Examples\n\n5.1.  Example of an IMAP LIST Command\n\n   This example shows an IMAP LIST response from a server that supports\n   this extension.  Note that not all of the attributes are used.  This\n   server also supports the Child Mailbox extension [RFC3348].\n\n     C: t1 LIST \"\" \"%\"\n     S: * LIST (\\Marked \\HasNoChildren) \"/\" Inbox\n     S: * LIST (\\HasNoChildren) \"/\" ToDo\n     S: * LIST (\\HasChildren) \"/\" Projects\n     S: * LIST (\\Sent \\HasNoChildren) \"/\" SentMail\n     S: * LIST (\\Marked \\Drafts \\HasNoChildren) \"/\" MyDrafts\n     S: * LIST (\\Trash \\HasNoChildren) \"/\" Trash\n     S: t1 OK done\n\n5.2.  Example of an Extended IMAP LIST Command\n\n   This example shows an IMAP LIST response from a server that supports\n   this extension.  The client uses the extended IMAP LIST command.\n\n     C: t1 CAPABILITY\n     S: * CAPABILITY IMAP4rev1 SPECIAL-USE\n     S: t1 OK done\n\n     C: t2 LIST \"\" \"%\" RETURN (SPECIAL-USE)\n     S: * LIST (\\Marked) \"/\" Inbox\n     S: * LIST () \"/\" ToDo\n     S: * LIST () \"/\" Projects\n     S: * LIST (\\Sent) \"/\" SentMail\n     S: * LIST (\\Marked \\Drafts) \"/\" MyDrafts\n     S: * LIST (\\Trash) \"/\" Trash\n     S: t2 OK done\n\n   Here, the client also includes the \"SPECIAL-USE\" selection option for\n   the same list.  The \"SPECIAL-USE\" return option could also have been\n   specified, but it is unnecessary, as it is implied by the selection\n   option.  Note that in this case, mailboxes that do not have a\n   special-use attribute are not listed.  Also note that we've used the\n   wildcard \"*\", rather than \"%\", to make sure we see all special-use\n   mailboxes, even ones that might not be at the namespace's root.\n\n     C: t3 LIST (SPECIAL-USE) \"\" \"*\"\n     S: * LIST (\\Sent) \"/\" SentMail\n     S: * LIST (\\Marked \\Drafts) \"/\" MyDrafts\n     S: * LIST (\\Trash) \"/\" Trash\n     S: t3 OK done\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 7]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n5.3.  Example of an IMAP CREATE Command\n\n   This example shows an IMAP CREATE command that might be used to\n   create a mailbox designated to hold draft and sent messages.  It also\n   attempts to create a mailbox that will contain all the user's\n   messages, but the server does not support that special use for this\n   user's message store.\n\n     C: t1 CAPABILITY\n     S: * CAPABILITY IMAP4rev1 CREATE-SPECIAL-USE\n     S: t1 OK done\n\n     C: t2 CREATE MySpecial (USE (\\Drafts \\Sent))\n     S: t2 OK MySpecial created\n\n     C: t3 CREATE Everything (USE (\\All))\n     S: t3 NO [USEATTR] \\All not supported\n\n5.4.  Example of Using IMAP METADATA to Manipulate Special-Use\n      Attributes\n\n   This example shows how IMAP METADATA can be used to manipulate\n   special-use attributes, if the operation is supported on the server.\n\n     ==> Starting point:\n     C: t1 LIST \"\" \"%\" RETURN (SPECIAL-USE)\n     S: * LIST (\\Sent) \"/\" SentMail\n     S: * LIST (\\Drafts) \"/\" MyDrafts\n     S: * LIST () \"/\" SavedDrafts\n     S: * LIST (\\Trash) \"/\" Trash\n     S: t1 OK done\n\n     ==> Demonstrate the connection:\n     C: t2 GETMETADATA \"MyDrafts\" /private/specialuse\n     S: * METADATA \"MyDrafts\" (/private/specialuse \"\\\\Drafts\")\n     S: t2 OK done\n\n     ==> Set new use for SavedDrafts; MyDrafts changes automatically:\n     C: t3 SETMETADATA \"SavedDrafts\" (/private/specialuse \"\\\\Drafts\")\n     S: * METADATA \"MyDrafts\" (/private/specialuse NIL)\n     S: t3 OK SETMETADATA complete\n\n     ==> Remove special use for SentMail:\n     C: t4 SETMETADATA \"SentMail\" (/private/specialuse NIL)\n     S: t4 OK SETMETADATA complete\n\n\n\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 8]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n     ==> Check the results:\n     C: t5 LIST \"\" \"%\" RETURN (SPECIAL-USE)\n     S: * LIST () \"/\" SentMail\n     S: * LIST () \"/\" MyDrafts\n     S: * LIST (\\Drafts) \"/\" SavedDrafts\n     S: * LIST (\\Trash) \"/\" Trash\n     S: t5 OK done\n\n6.  Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [RFC5234].\n\n   create-param   =/  \"USE\" SP \"(\" [use-attr *(SP use-attr)] \")\"\n                    ; Extends \"create-param\" from RFC 4466 [RFC4466]\n\n   mbx-list-oflag =/  use-attr\n                    ; Extends \"mbx-list-oflag\" from IMAP base [RFC3501]\n\n   list-select-independent-opt =/  \"SPECIAL-USE\"\n                    ; Extends \"list-select-independent-opt\" from\n                    ; LIST-extended [RFC5258]\n\n   return-option =/ \"SPECIAL-USE\"\n                    ; Extends \"return-option\" from\n                    ; LIST-extended [RFC5258]\n\n   resp-text-code =/  \"USEATTR\"\n                    ; Extends \"resp-text-code\" from\n                    ; IMAP [RFC3501]\n\n   use-attr        =  \"\\All\" / \"\\Archive\" / \"\\Drafts\" / \"\\Flagged\" /\n                    \"\\Junk\" / \"\\Sent\" / \"\\Trash\" / use-attr-ext\n\n   use-attr-ext    =  \"\\\" atom\n                    ; Reserved for future extensions.  Clients\n                    ; MUST ignore list attributes they do not understand\n                    ; Server implementations MUST NOT generate\n                    ; extension attributes except as defined by\n                    ; future Standards-Track revisions of or\n                    ; extensions to this specification.\n\n7.  Security Considerations\n\n   LIST response:\n   Conveying special-use information to a client exposes a small bit of\n   extra information that could be of value to an attacker.  Knowing,\n   for example, that a particular mailbox (\\All) contains pointers to\n\n\n\nLeiba & Nicolson             Standards Track                    [Page 9]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n   every message the user has might be of particular value.  If the IMAP\n   channel is not protected from passive eavesdropping, this could be an\n   issue.\n\n   CREATE command \"USE\" parameter and metadata extension: In some server\n   implementations, some special uses may imply automatic action by the\n   server.  For example, creation of a \"\\Junk\" mailbox might cause the\n   server to start placing messages that have been evaluated as spam\n   into the mailbox.  Implementors SHOULD consider the consequences of\n   allowing a user (or client program) to designate the target of such\n   automatic action.\n\n   Example: If a user is allowed to give the \"\\Junk\" attribute to a\n   shared mailbox, legitimate mail that's misclassified as junk (false\n   positives) will be put into that shared mailbox, exposing the user's\n   private mail to others.  The server might warn a user of that\n   possibility, or might refuse to allow the specification to be made on\n   a shared mailbox.  (Note that this problem exists independent of this\n   specification, if the server allows a user to share a mailbox that's\n   already in use for such a function.)\n\n8.  IANA Considerations\n\n8.1.  Registration of USEATTR IMAP Response Code\n\n   This document defines a new IMAP response code, \"USEATTR\", which IANA\n   added to the IMAP Response Codes registry.\n\n8.2.  Registration of CREATE-SPECIAL-USE IMAP Capability\n\n   This document defines a new IMAP capability, \"CREATE-SPECIAL-USE\",\n   which IANA added to the IMAP 4 Capabilities registry.\n\n8.3.  Registration of SPECIAL-USE IMAP Capability\n\n   This document defines a new IMAP capability, \"SPECIAL-USE\", which\n   IANA added to the IMAP 4 Capabilities registry.\n\n8.4.  Registration of SPECIAL-USE Selection Option\n\n   This document defines a new IMAP4 List Extended selection option,\n   \"SPECIAL-USE\", which IANA added to the IMAP4 List Extended registry,\n   as follows:\n\n   To: iana@iana.org\n   Subject: Registration of LIST-EXTENDED selection option SPECIAL-USE\n   LIST-EXTENDED option name: SPECIAL-USE\n   LIST-EXTENDED option type: SELECTION\n\n\n\nLeiba & Nicolson             Standards Track                   [Page 10]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n   Implied return option(s): SPECIAL-USE\n   LIST-EXTENDED option description: Limit the list to special-use\n   mailboxes only\n   Published specification: RFC 6154\n   Security considerations: none\n   Intended usage: COMMON\n   Person and email address to contact for further information: Authors'\n   Addresses at the end of RFC 6154\n   Owner/Change controller: iesg@ietf.org\n\n8.5.  Registration of SPECIAL-USE Return Option\n\n   This document defines a new IMAP4 List Extended return option,\n   \"SPECIAL-USE\", which IANA added to the IMAP4 List Extended registry,\n   as follows:\n\n   To: iana@iana.org\n   Subject: Registration of LIST-EXTENDED return option SPECIAL-USE\n   LIST-EXTENDED option name: SPECIAL-USE\n   LIST-EXTENDED option type: RETURN\n   LIST-EXTENDED option description: Request special-use mailbox\n   information\n   Published specification: RFC 6154\n   Security considerations: none\n   Intended usage: COMMON\n   Person and email address to contact for further information: Authors'\n   Addresses at the end of RFC 6154\n   Owner/Change controller: iesg@ietf.org\n\n8.6.  Registration of SPECIAL-USE Metadata\n\n   This document defines a new IMAP METADATA entry.  IANA added the\n   following to the IMAP METADATA Mailbox Entry registry:\n\n   To: iana@iana.org\n   Subject: IMAP METADATA Entry Registration\n   Type: Mailbox\n   Name: /private/specialuse\n   Description: Defines any special-use features of a mailbox.  See the\n   reference specification for details of its use.\n   Content-type: text/plain; charset=us-ascii\n   RFC Number: RFC 6154\n   Contact: MORG mailing list mailto:morg@ietf.org\n\n\n\n\n\n\n\n\nLeiba & Nicolson             Standards Track                   [Page 11]\n\f\nRFC 6154            IMAP LIST: Special-Use Mailboxes          March 2011\n\n\n9.  References\n\n9.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [RFC5258]  Leiba, B. and A. Melnikov, \"Internet Message Access\n              Protocol version 4 - LIST Command Extensions\", RFC 5258,\n              June 2008.\n\n   [RFC5464]  Daboo, C., \"The IMAP METADATA Extension\", RFC 5464,\n              February 2009.\n\n9.2.  Informative References\n\n   [RFC3348]  Gahrns, M. and R. Cheng, \"The Internet Message Action\n              Protocol (IMAP4) Child Mailbox Extension\", RFC 3348,\n              July 2002.\n\nAuthors' Addresses\n\n   Barry Leiba\n   Huawei Technologies\n\n   Phone: +1 646 827 0648\n   EMail: barryleiba@computer.org\n   URI:   http://internetmessagingtechnology.org/\n\n\n   Jamie Nicolson\n   Google\n\n   EMail: nicolson@google.com\n\n\n\n\n\n\n\n\nLeiba & Nicolson             Standards Track                   [Page 12]\n\f\n"
  },
  {
    "path": "rfc/rfc6203.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                       T. Sirainen\nRequest for Comments: 6203                                    March 2011\nCategory: Standards Track\nISSN: 2070-1721\n\n\n                    IMAP4 Extension for Fuzzy Search\n\nAbstract\n\n   This document describes an IMAP protocol extension enabling a server\n   to perform searches with inexact matching and assigning relevancy\n   scores for matched messages.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6203.\n\nCopyright Notice\n\n   Copyright (c) 2011 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\n\nSirainen                     Standards Track                    [Page 1]\n\f\nRFC 6203                   IMAP4 FUZZY Search                 March 2011\n\n\n1.  Introduction\n\n   When humans perform searches in IMAP clients, they typically want to\n   see the most relevant search results first.  IMAP servers are able to\n   do this in the most efficient way when they're free to internally\n   decide how searches should match messages.  This document describes a\n   new SEARCH=FUZZY extension that provides such functionality.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [KEYWORDS].\n\n3.  The FUZZY Search Key\n\n   The FUZZY search key takes another search key as its argument.  The\n   server is allowed to perform all matching in an implementation-\n   defined manner for this search key, including ignoring the active\n   comparator as defined by [RFC5255].  Typically, this would be used to\n   search for strings.  For example:\n\n      C: A1 SEARCH FUZZY (SUBJECT \"IMAP break\")\n      S: * SEARCH 1 5 10\n      S: A1 OK Search completed.\n\n   Besides matching messages with a subject of \"IMAP break\", the above\n   search may also match messages with subjects \"broken IMAP\", \"IMAP is\n   broken\", or anything else the server decides that might be a good\n   match.\n\n   This example does a fuzzy SUBJECT search, but a non-fuzzy FROM\n   search:\n\n      C: A2 SEARCH FUZZY SUBJECT work FROM user@example.com\n      S: * SEARCH 1 4\n      S: A2 OK Search completed.\n\n   How the server handles multiple separate FUZZY search keys is\n   implementation-defined.\n\n   Fuzzy search algorithms might change, or the results of the\n   algorithms might be different from search to search, so that fuzzy\n   searches with the same parameters might give different results for\n   1) the same user at different times, 2) different users (searches\n\n\n\nSirainen                     Standards Track                    [Page 2]\n\f\nRFC 6203                   IMAP4 FUZZY Search                 March 2011\n\n\n   executed simultaneously), or 3) different users (searches executed at\n   different times).  For example, a fuzzy search might adapt to a\n   user's search habits in an attempt to give more relevant results (in\n   a \"learning\" manner).  Such differences can also occur because of\n   operational decisions, such as load balancing.  Clients asking for\n   \"fuzzy\" really are requesting search results in a not-necessarily-\n   deterministic way and need to give the user appropriate warning about\n   that.\n\n4.  Relevancy Scores for Search Results\n\n   Servers SHOULD assign a search relevancy score for each matched\n   message when the FUZZY search key is given.  Relevancy scores are\n   given in the range 1-100, where 100 is the highest relevancy.  The\n   relevancy scores SHOULD use the full 1-100 range, so that clients can\n   show them to users in a meaningful way, e.g., as a percentage value.\n\n   As the name already indicates, relevancy scores specify how relevant\n   to the search the matched message is.  It's not necessarily the same\n   as how precisely the message matched.  For example, a message whose\n   subject fuzzily matches the search string might get a higher\n   relevancy score than a message whose body had the exact string in the\n   middle of a sentence.  When multiple search keys are matched fuzzily,\n   how the relevancy score is calculated is server-dependent.\n\n   If the server also advertises the ESEARCH capability as defined by\n   [ESEARCH], the relevancy scores can be retrieved using the new\n   RELEVANCY return option for SEARCH:\n\n      C: B1 SEARCH RETURN (RELEVANCY ALL) FUZZY TEXT \"Helo\"\n      S: * ESEARCH (TAG \"B1\") ALL 1,5,10 RELEVANCY (4 99 42)\n      S: B1 OK Search completed.\n\n   In the example above, the server would treat \"hello\", \"help\", and\n   other similar strings as fuzzily matching the misspelled \"Helo\".\n\n   The RELEVANCY return option MUST NOT be used unless a FUZZY search\n   key is also given.  Note that SEARCH results aren't sorted by\n   relevancy; SORT is needed for that.\n\n5.  Fuzzy Matching with Non-String Search Keys\n\n   Fuzzy matching is not limited to just string matching.  All search\n   keys SHOULD be matched fuzzily, although exactly what that means for\n   different search keys is left for server implementations to decide --\n   including deciding that fuzzy matching is meaningless for a\n   particular key, and falling back to exact matching.  Some suggestions\n   are given below.\n\n\n\nSirainen                     Standards Track                    [Page 3]\n\f\nRFC 6203                   IMAP4 FUZZY Search                 March 2011\n\n\n   Dates:\n      A typical example could be when a user wants to find a message\n      \"from Dave about a week ago\".  A client could perform this search\n      using SEARCH FUZZY (FROM \"Dave\" SINCE 21-Jan-2009 BEFORE\n      24-Jan-2009).  The server could return messages outside the\n      specified date range, but the further away the message is, the\n      lower the relevancy score.\n\n   Sizes:\n      These should be handled similarly to dates.  If a user wants to\n      search for \"about 1 MB attachments\", the client could do this by\n      sending SEARCH FUZZY (LARGER 900000 SMALLER 1100000).  Again, the\n      further away the message size is from the specified range, the\n      lower the relevancy score.\n\n   Flags:\n      If other search criteria match, the server could return messages\n      that don't have the specified flags set, but with lower relevancy\n      scores.  SEARCH SUBJECT \"xyz\" FUZZY ANSWERED, for example, might\n      be useful if the user thinks the message he is looking for has the\n      ANSWERED flag set, but he isn't sure.\n\n   Unique Identifiers (UIDs), sequences, modification sequences: These\n   are examples of keys for which exact matching probably makes sense.\n   Alternatively, a server might choose, for instance, to expand a UID\n   range by 5% on each side.\n\n6.  Extensions to SORT and SEARCH\n\n   If the server also advertises the SORT capability as defined by\n   [SORT], the results can be sorted by the new RELEVANCY sort criteria:\n\n      C: C1 SORT (RELEVANCY) UTF-8 FUZZY SUBJECT \"Helo\"\n      S: * SORT 5 10 1\n      S: C1 OK Sort completed.\n\n   The message with the highest score is returned first.  As with the\n   RELEVANCY return option, RELEVANCY sort criteria MUST NOT be used\n   unless a FUZZY search key is also given.\n\n   If the server also advertises the ESORT capability as defined by\n   [CONTEXT], the relevancy scores can be retrieved using the new\n   RELEVANCY return option for SORT:\n\n      C: C2 SORT RETURN (RELEVANCY ALL) (RELEVANCY) UTF-8 FUZZY TEXT\n         \"Helo\"\n      S: * ESEARCH (TAG \"C2\") ALL 5,10,1 RELEVANCY (99 42 4)\n      S: C2 OK Sort completed.\n\n\n\nSirainen                     Standards Track                    [Page 4]\n\f\nRFC 6203                   IMAP4 FUZZY Search                 March 2011\n\n\n   Furthermore, if the server advertises the CONTEXT=SORT (or\n   CONTEXT=SEARCH) capability, then the client can limit the number of\n   returned messages to a SORT (or a SEARCH) by using the PARTIAL return\n   option.  For example, this returns the 10 most relevant messages:\n\n      C: C3 SORT RETURN (PARTIAL 1:10) (RELEVANCY) UTF-8 FUZZY TEXT\n         \"World\"\n      S: * ESEARCH (TAG \"C3\") PARTIAL (1:10 42,9,34,13,15,4,2,7,23,82)\n      S: C3 OK Sort completed.\n\n7.  Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [ABNF].  It includes definitions from\n   [RFC3501], [IMAP-ABNF], and [SORT].\n\n      capability         =/ \"SEARCH=FUZZY\"\n\n      score              = 1*3DIGIT\n         ;; (1 <= n <= 100)\n\n      score-list         = \"(\" [score *(SP score)] \")\"\n\n      search-key         =/ \"FUZZY\" SP search-key\n\n      search-return-data =/ \"RELEVANCY\" SP score-list\n         ;; Conforms to <search-return-data>, from [IMAP-ABNF]\n\n      search-return-opt  =/ \"RELEVANCY\"\n         ;; Conforms to <search-return-opt>, from [IMAP-ABNF]\n\n      sort-key           =/ \"RELEVANCY\"\n\n8.  Security Considerations\n\n   Implementation of this extension might enable denial-of-service\n   attacks against server resources.  Servers MAY limit the resources\n   that a single search (or a single user) may use.  Additionally,\n   implementors should be aware of the following: Fuzzy search engines\n   are often complex with non-obvious disk space, memory, and/or CPU\n   usage patterns.  Server implementors should at least test the fuzzy-\n   search behavior with large messages that contain very long words\n   and/or unique random strings.  Also, very long search keys might\n   cause excessive memory or CPU usage.\n\n   Invalid input may also be problematic.  For example, if the search\n   engine takes a UTF-8 stream as input, it might fail more or less\n   badly when illegal UTF-8 sequences are fed to it from a message whose\n\n\n\nSirainen                     Standards Track                    [Page 5]\n\f\nRFC 6203                   IMAP4 FUZZY Search                 March 2011\n\n\n   character set was claimed to be UTF-8.  This could be avoided by\n   validating all the input and, for example, replacing illegal UTF-8\n   sequences with the Unicode replacement character (U+FFFD).\n\n   Search relevancy rankings might be susceptible to \"poisoning\" by\n   smart attackers using certain keywords or hidden markup (e.g., HTML)\n   in their messages to boost the rankings.  This can't be fully\n   prevented by servers, so clients should prepare for it by at least\n   allowing users to see all the search results, rather than hiding\n   results below a certain score.\n\n9.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a standards track or\n   IESG-approved experimental RFC.  The \"Internet Message Access\n   Protocol (IMAP) 4 Capabilities Registry\" is available from\n   http://www.iana.org/.\n\n   This document defines the SEARCH=FUZZY IMAP capability.  IANA has\n   added it to the registry.\n\n10.  Acknowledgements\n\n   Alexey Melnikov, Zoltan Ordogh, Barry Leiba, Cyrus Daboo, and Dave\n   Cridland have helped with this document.\n\n11.  Normative References\n\n   [ABNF]       Crocker, D., Ed. and P. Overell, \"Augmented BNF for\n                Syntax Specifications: ABNF\", STD 68, RFC 5234,\n                January 2008.\n\n   [CONTEXT]    Cridland, D. and C. King, \"Contexts for IMAP4\",\n                RFC 5267, July 2008.\n\n   [ESEARCH]    Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n                Command for Controlling What Kind of Information Is\n                Returned\", RFC 4731, November 2006.\n\n   [IMAP-ABNF]  Melnikov, A. and C. Daboo, \"Collected Extensions to\n                IMAP4 ABNF\", RFC 4466, April 2006.\n\n   [KEYWORDS]   Bradner, S., \"Key words for use in RFCs to Indicate\n                Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]    Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n                4rev1\", RFC 3501, March 2003.\n\n\n\n\nSirainen                     Standards Track                    [Page 6]\n\f\nRFC 6203                   IMAP4 FUZZY Search                 March 2011\n\n\n   [RFC5255]    Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n                Message Access Protocol Internationalization\", RFC 5255,\n                June 2008.\n\n   [SORT]       Crispin, M. and K. Murchison, \"Internet Message Access\n                Protocol - SORT and THREAD Extensions\", RFC 5256,\n                June 2008.\n\nAuthor's Address\n\n   Timo Sirainen\n\n   EMail: tss@iki.fi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSirainen                     Standards Track                    [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc6237.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                          B. Leiba\nRequest for Comments: 6237                           Huawei Technologies\nUpdates: 4466                                                A. Melnikov\nCategory: Experimental                                     Isode Limited\nISSN: 2070-1721                                                 May 2011\n\n\n                  IMAP4 Multimailbox SEARCH Extension\n\nAbstract\n\n   The IMAP4 specification allows the searching of only the selected\n   mailbox.  A user often wants to search multiple mailboxes, and a\n   client that wishes to support this must issue a series of SELECT and\n   SEARCH commands, waiting for each to complete before moving on to the\n   next.  This extension allows a client to search multiple mailboxes\n   with one command, limiting the round trips and waiting for various\n   searches to complete, and not requiring disruption of the currently\n   selected mailbox.  This extension also uses MAILBOX and TAG fields in\n   ESEARCH responses, allowing a client to pipeline the searches if it\n   chooses.  This document updates RFC 4466.\n\nStatus of This Memo\n\n   This document is not an Internet Standards Track specification; it is\n   published for examination, experimental implementation, and\n   evaluation.\n\n   This document defines an Experimental Protocol for the Internet\n   community.  This document is a product of the Internet Engineering\n   Task Force (IETF).  It represents the consensus of the IETF\n   community.  It has received public review and has been approved for\n   publication by the Internet Engineering Steering Group (IESG).  Not\n   all documents approved by the IESG are a candidate for any level of\n   Internet Standard; see Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6237.\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov              Experimental                      [Page 1]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\nCopyright Notice\n\n   Copyright (c) 2011 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\nTable of Contents\n\n   1. Introduction ....................................................2\n      1.1. Conventions Used in This Document ..........................3\n   2. New ESEARCH Command .............................................3\n      2.1. The ESEARCH Response .......................................4\n      2.2. Source Options: Specifying Mailboxes to Search .............5\n   3. Examples ........................................................6\n   4. Formal Syntax ...................................................7\n   5. Security Considerations .........................................8\n   6. IANA Considerations .............................................9\n   7. Acknowledgements ................................................9\n   8. Normative References ............................................9\n\n1.  Introduction\n\n   The IMAP4 specification allows the searching of only the selected\n   mailbox.  A user often wants to search multiple mailboxes, and a\n   client that wishes to support this must issue a series of SELECT and\n   SEARCH commands, waiting for each to complete before moving on to the\n   next.  The commands can't be pipelined, because the server might run\n   them in parallel, and the untagged SEARCH responses could not then be\n   distinguished from each other.\n\n   This extension allows a client to search multiple mailboxes with one\n   command, and includes MAILBOX and TAG fields in the ESEARCH response,\n   yielding the following advantages:\n\n   o  A single command limits the number of round trips needed to search\n      a set of mailboxes.\n\n   o  A single command eliminates the need to wait for one search to\n      complete before starting the next.\n\n\n\nLeiba & Melnikov              Experimental                      [Page 2]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   o  A single command allows the server to optimize the search, if it\n      can.\n\n   o  A command that is not dependent upon the selected mailbox\n      eliminates the need to disrupt the selection state or to open\n      another IMAP connection.\n\n   o  The MAILBOX, UIDVALIDITY, and TAG fields in the responses allow a\n      client to distinguish which responses go with which search (and\n      which mailbox).  A client can safely pipeline these search\n      commands without danger of confusion.  The addition of the MAILBOX\n      and UIDVALIDITY fields updates the search-correlator item defined\n      in [RFC4466].\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [RFC2119].\n\n2.  New ESEARCH Command\n\n   Arguments:  OPTIONAL source options\n               OPTIONAL result options\n               OPTIONAL charset specification (see [RFC2978])\n               searching criteria (one or more)\n\n   Responses:  REQUIRED untagged response: ESEARCH\n\n   Result:     OK -- search completed\n               NO -- error: cannot search that charset or criteria\n               BAD -- command unknown or arguments invalid\n\n   This section defines a new ESEARCH command, which works similarly to\n   the UID SEARCH command described in Section 2.6.1 of [RFC4466]\n   (initially described in Section 6.4.4 of [RFC3501] and extended by\n   [RFC4731]).\n\n   The ESEARCH command further extends searching by allowing for\n   optional source and result options.  This document does not define\n   any new result options (see Section 3.1 of [RFC4731]).  A server that\n   supports this extension includes \"MULTISEARCH\" in its IMAP capability\n   string.\n\n\n\n\n\nLeiba & Melnikov              Experimental                      [Page 3]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   Because there has been confusion about this, it is worth pointing out\n   that with ESEARCH, as with *any* SEARCH or UID SEARCH command, it\n   MUST NOT be considered an error if the search terms include a range\n   of message numbers that extends (or, in fact, starts) beyond the end\n   of the mailbox.  For example, a client might want to establish a\n   rolling window through the search results this way:\n\n   C: tag1 UID ESEARCH FROM \"frobozz\" 1:100\n\n   ...followed later by this:\n\n   C: tag1 UID ESEARCH FROM \"frobozz\" 101:200\n\n   ...and so on.  This tells the server to match only the first hundred\n   messages in the mailbox the first time, the second hundred the second\n   time, etc.  In fact, it might likely allow the server to optimize the\n   search significantly.  In the above example, whether the mailbox\n   contains 50 or 150 or 250 messages, neither of the search commands\n   shown will result in an error.  It is up to the client to know when\n   to stop moving its search window.\n\n2.1.  The ESEARCH Response\n\n   In response to an ESEARCH command, the server MUST return ESEARCH\n   responses [RFC4731] (that is, not SEARCH responses).  Because message\n   numbers are not useful for mailboxes that are not selected, the\n   responses MUST contain information about UIDs, not message numbers.\n   This is true even if the source options specify that only the\n   selected mailbox be searched.\n\n   Presence of a source option in the absence of a result option implies\n   the \"ALL\" result option (see Section 3.1 of [RFC4731]).  Note that\n   this is not the same as the result from the SEARCH command described\n   in the IMAP base protocol [RFC3501].\n\n   Source options describe which mailboxes must be searched for\n   messages.  An ESEARCH command with source options does not affect\n   which mailbox, if any, is currently selected, regardless of which\n   mailboxes are searched.\n\n   For each mailbox satisfying the source options, a single ESEARCH\n   response MUST be returned if any messages in that mailbox match the\n   search criteria.  An ESEARCH response MUST NOT be returned for\n   mailboxes that contain no matching messages.  This is true even when\n   result options such as MIN, MAX, and COUNT are specified (see\n   Section 3.1 of [RFC4731]), and the values returned (lowest UID\n   matched, highest UID matched, and number of messages matched,\n   respectively) apply to the mailbox reported in that ESEARCH response.\n\n\n\nLeiba & Melnikov              Experimental                      [Page 4]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   Note that it is possible for an ESEARCH command to return *no*\n   untagged responses (no ESEARCH responses at all), in the case that\n   there are no matches to the search in any of the mailboxes that\n   satisfy the source options.  Clients can detect this situation by\n   finding the tagged OK response without having received any matching\n   untagged ESEARCH responses.\n\n   Each ESEARCH response MUST contain the MAILBOX, TAG, and UIDVALIDITY\n   correlators.  Correlators allow clients to issue several ESEARCH\n   commands at once (pipelined).  If the SEARCHRES [RFC5182] extension\n   is used in an ESEARCH command, that ESEARCH command MUST be executed\n   by the server after all previous SEARCH/ESEARCH commands have\n   completed and before any subsequent SEARCH/ESEARCH commands are\n   executed.  The server MAY perform consecutive ESEARCH commands in\n   parallel as long as none of them use the SEARCHRES extension.\n\n2.2.  Source Options: Specifying Mailboxes to Search\n\n   The source options, if present, MUST contain a mailbox specifier as\n   defined in the IMAP NOTIFY extension [RFC5465], Section 6 (using the\n   \"filter-mailboxes\" ABNF item), with the following differences:\n\n   1.  The \"selected-delayed\" specifier is not valid here.\n\n   2.  A \"subtree-one\" specifier is added.  The \"subtree\" specifier\n       results in a search of the specified mailbox and all selectable\n       mailboxes that are subordinate to it, through an indefinitely\n       deep hierarchy.  The \"subtree-one\" specifier results in a search\n       of the specified mailbox and all selectable child mailboxes, one\n       hierarchy level down.\n\n   If \"subtree\" is specified, the server MUST defend against loops in\n   the hierarchy (for example, those caused by recursive file-system\n   links within the message store).  The server SHOULD do this by\n   keeping track of the mailboxes that have been searched, and\n   terminating the hierarchy traversal when a repeat is found.  If it\n   cannot do that, it MAY do it by limiting the hierarchy depth.\n\n   If the source options are not present, the value \"selected\" is\n   assumed -- that is, only the currently selected mailbox is searched.\n\n   The \"personal\" source option is a particularly convenient way to\n   search all of the current user's mailboxes.  Note that there is no\n   way to use wildcard characters to search all mailboxes; the\n   \"mailboxes\" source option does not do wildcard expansion.\n\n\n\n\n\n\nLeiba & Melnikov              Experimental                      [Page 5]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   If the source options include (or default to) \"selected\", the IMAP\n   session MUST be in \"selected\" state.  If the source options specify\n   other mailboxes and NOT \"selected\", then the IMAP session MUST be in\n   either \"selected\" or \"authenticated\" state.  If the session is not in\n   a correct state, the ESEARCH command MUST return a \"BAD\" result.\n\n   If the server supports the SEARCHRES [RFC5182] extension, then the\n   \"SAVE\" result option is valid *only* if \"selected\" is specified or\n   defaulted as the sole mailbox to be searched.  If any source option\n   other than \"selected\" is specified, the ESEARCH command MUST return a\n   \"BAD\" result.\n\n   If the server supports the CONTEXT=SEARCH and/or CONTEXT=SORT\n   extension [RFC5267], then the following additional rules apply:\n\n   o  The CONTEXT return option (Section 4.2 of [RFC5267]) can be used\n      with an ESEARCH command.\n\n   o  If the UPDATE return option is used (Section 4.3 of [RFC5267]), it\n      MUST apply ONLY to the currently selected mailbox.  If UPDATE is\n      used and there is no mailbox currently selected, the ESEARCH\n      command MUST return a \"BAD\" result.\n\n   o  The PARTIAL search return option (Section 4.4 of [RFC5267]) can be\n      used and applies to each mailbox searched by the ESEARCH command.\n\n   If the server supports the Access Control List (ACL) [RFC4314]\n   extension, then the logged-in user is required to have the \"r\" right\n   for each mailbox she wants to search.  In addition, any mailboxes\n   that are not explicitly named (accessed through \"personal\" or\n   \"subtree\", for example) are required to have the \"l\" right.\n   Mailboxes matching the source options for which the logged-in user\n   lacks sufficient rights MUST be ignored by the ESEARCH command\n   processing.  In particular, ESEARCH responses MUST NOT be returned\n   for those mailboxes.\n\n3.  Examples\n\n   In the following example, note that two ESEARCH commands are\n   pipelined, and that the server is running them in parallel,\n   interleaving a response to the second search amid the responses to\n   the first (watch the tags).\n\n   C: tag1 ESEARCH IN (mailboxes \"folder1\" subtree \"folder2\") unseen\n   C: tag2 ESEARCH IN (mailboxes \"folder1\" subtree-one \"folder2\")\n   subject \"chad\"\n   S: * ESEARCH (TAG \"tag1\" MAILBOX \"folder1\" UIDVALIDITY 1) UID ALL\n   4001,4003,4005,4007,4009\n\n\n\nLeiba & Melnikov              Experimental                      [Page 6]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   S: * ESEARCH (TAG \"tag2\" MAILBOX \"folder1\" UIDVALIDITY 1) UID ALL\n   3001:3004,3788\n   S: * ESEARCH (TAG \"tag1\" MAILBOX \"folder2/banana\" UIDVALIDITY 503)\n   UID ALL 3002,4004\n   S: * ESEARCH (TAG \"tag1\" MAILBOX \"folder2/peach\" UIDVALIDITY 3) UID\n   ALL 921691\n   S: tag1 OK done\n   S: * ESEARCH (TAG \"tag2\" MAILBOX \"folder2/salmon\" UIDVALIDITY\n   1111111) UID ALL 50003,50006,50009,50012\n   S: tag2 OK done\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) as described in [RFC5234].  Terms not defined here are\n   taken from [RFC3501], [RFC5465], or [RFC4466].\n\n   command-auth =/  esearch\n           ; Update definition from IMAP base [RFC3501].\n           ; Add new \"esearch\" command.\n\n   command-select =/  esearch\n           ; Update definition from IMAP base [RFC3501].\n           ; Add new \"esearch\" command.\n\n   filter-mailboxes-other =/  (\"subtree-one\" SP one-or-more-mailbox)\n           ; Update definition from IMAP Notify [RFC5465].\n           ; Add new \"subtree-one\" selector.\n\n   filter-mailboxes-selected =  \"selected\"\n           ; Update definition from IMAP Notify [RFC5465].\n           ; We forbid the use of \"selected-delayed\".\n\n   one-correlator =  (\"TAG\" SP tag-string) / (\"MAILBOX\" SP astring) /\n           (\"UIDVALIDITY\" SP nz-number)\n           ; Each correlator MUST appear exactly once.\n\n   scope-option =  scope-option-name [SP scope-option-value]\n           ; No options defined here.  Syntax for future extensions.\n\n   scope-option-name =  tagged-ext-label\n           ; No options defined here.  Syntax for future extensions.\n\n   scope-option-value =  tagged-ext-val\n           ; No options defined here.  Syntax for future extensions.\n\n\n\n\n\n\nLeiba & Melnikov              Experimental                      [Page 7]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   scope-options =  scope-option *(SP scope-option)\n           ; A given option may only appear once.\n           ; No options defined here.  Syntax for future extensions.\n\n   esearch =  \"ESEARCH\" [SP esearch-source-opts]\n           [SP search-return-opts] SP search-program\n\n   search-correlator =  SP \"(\" one-correlator *(SP one-correlator) \")\"\n           ; Updates definition in IMAP4 ABNF [RFC4466].\n\n   esearch-source-opts =  \"IN\" SP \"(\" source-mbox [SP\n           \"(\" scope-options \")\"] \")\"\n\n   source-mbox =  filter-mailboxes *(SP filter-mailboxes)\n           ; \"filter-mailboxes\" is defined in IMAP Notify [RFC5465].\n           ; See updated definition of filter-mailboxes-other, above.\n           ; See updated definition of filter-mailboxes-selected, above.\n\n5.  Security Considerations\n\n   This new IMAP ESEARCH command allows a single command to search many\n   mailboxes at once.  On the one hand, a client could do that by\n   sending many IMAP SEARCH commands.  On the other hand, this makes it\n   easier for a client to overwork a server, by sending a single command\n   that results in an expensive search of tens of thousands of\n   mailboxes.  Server implementations need to be aware of that, and\n   provide mechanisms that prevent a client from adversely affecting\n   other users.  Limitations on the number of mailboxes that may be\n   searched in one command, and/or on the server resources that will be\n   devoted to responding to a single client, are reasonable limitations\n   for an implementation to impose.\n\n   Implementations MUST, of course, apply access controls appropriately,\n   limiting a user's access to ESEARCH in the same way its access is\n   limited for any other IMAP commands.  This extension has no data-\n   access risks beyond what may be there in the unextended IMAP\n   implementation.\n\n   Mailboxes matching the source options for which the logged-in user\n   lacks sufficient rights MUST be ignored by the ESEARCH command\n   processing (see the paragraph about this in Section 2.2).  In\n   particular, any attempt to distinguish insufficient access from\n   non-existent mailboxes may expose information about the mailbox\n   hierarchy that isn't otherwise available to the client.\n\n   If \"subtree\" is specified, the server MUST defend against loops in\n   the hierarchy (see the paragraph about this in Section 2.2).\n\n\n\n\nLeiba & Melnikov              Experimental                      [Page 8]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n6.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  The \"IMAP 4 Capabilities\" registry\n   is currently located here:\n\n      http://www.iana.org/\n\n   This document defines the IMAP capability \"MULTISEARCH\", and IANA has\n   added it to the registry.\n\n7.  Acknowledgements\n\n   The authors gratefully acknowledge feedback provided by Timo\n   Sirainen, Peter Coates, and Arnt Gulbrandsen.\n\n8.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2978]  Freed, N. and J. Postel, \"IANA Charset Registration\n              Procedures\", BCP 19, RFC 2978, October 2000.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [RFC4731]  Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n              Command for Controlling What Kind of Information Is\n              Returned\", RFC 4731, November 2006.\n\n   [RFC5182]  Melnikov, A., \"IMAP Extension for Referencing the Last\n              SEARCH Result\", RFC 5182, March 2008.\n\n   [RFC5234]  Crocker, D., Ed., and P. Overell, \"Augmented BNF for\n              Syntax Specifications: ABNF\", STD 68, RFC 5234,\n              January 2008.\n\n   [RFC5267]  Cridland, D. and C. King, \"Contexts for IMAP4\", RFC 5267,\n              July 2008.\n\n\n\n\n\nLeiba & Melnikov              Experimental                      [Page 9]\n\f\nRFC 6237           IMAP4 Multimailbox SEARCH Extension          May 2011\n\n\n   [RFC5465]  Gulbrandsen, A., King, C., and A. Melnikov, \"The IMAP\n              NOTIFY Extension\", RFC 5465, February 2009.\n\nAuthors' Addresses\n\n   Barry Leiba\n   Huawei Technologies\n\n   Phone: +1 646 827 0648\n   EMail: barryleiba@computer.org\n   URI:   http://internetmessagingtechnology.org/\n\n\n   Alexey Melnikov\n   Isode Limited\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n   URI:   http://www.melnikov.ca/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov              Experimental                     [Page 10]\n\f\n"
  },
  {
    "path": "rfc/rfc6531.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                            J. Yao\nRequest for Comments: 6531                                        W. Mao\nObsoletes: 5336                                                    CNNIC\nCategory: Standards Track                                  February 2012\nISSN: 2070-1721\n\n\n               SMTP Extension for Internationalized Email\n\nAbstract\n\n   This document specifies an SMTP extension for transport and delivery\n   of email messages with internationalized email addresses or header\n   information.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6531.\n\nCopyright Notice\n\n   Copyright (c) 2012 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n\n\n\nYao & Mao                    Standards Track                    [Page 1]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3\n     1.1.  Terminology  . . . . . . . . . . . . . . . . . . . . . . .  3\n     1.2.  Changes Made to Other Specifications . . . . . . . . . . .  3\n   2.  Overview of Operation  . . . . . . . . . . . . . . . . . . . .  4\n   3.  Mail Transport-Level Protocol  . . . . . . . . . . . . . . . .  4\n     3.1.  Framework for the Internationalization Extension . . . . .  4\n     3.2.  The SMTPUTF8 Extension . . . . . . . . . . . . . . . . . .  5\n     3.3.  Extended Mailbox Address Syntax  . . . . . . . . . . . . .  7\n     3.4.  MAIL Command Parameter Usage . . . . . . . . . . . . . . .  8\n     3.5.  Non-ASCII Addresses and Reply-Codes  . . . . . . . . . . .  9\n     3.6.  Body Parts and SMTP Extensions . . . . . . . . . . . . . .  9\n     3.7.  Additional ESMTP Changes and Clarifications  . . . . . . . 10\n       3.7.1.  The Initial SMTP Exchange  . . . . . . . . . . . . . . 10\n       3.7.2.  Mail eXchangers  . . . . . . . . . . . . . . . . . . . 10\n       3.7.3.  Trace Information  . . . . . . . . . . . . . . . . . . 11\n       3.7.4.  UTF-8 Strings in Replies . . . . . . . . . . . . . . . 11\n   4.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 13\n     4.1.  SMTP Service Extensions Registry . . . . . . . . . . . . . 13\n     4.2.  SMTP Enhanced Status Code Registry . . . . . . . . . . . . 13\n     4.3.  WITH Protocol Types Sub-Registry of the Mail\n           Transmission Types Registry  . . . . . . . . . . . . . . . 15\n   5.  Security Considerations  . . . . . . . . . . . . . . . . . . . 15\n   6.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 16\n   7.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 16\n     7.1.  Normative References . . . . . . . . . . . . . . . . . . . 16\n     7.2.  Informative References . . . . . . . . . . . . . . . . . . 18\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nYao & Mao                    Standards Track                    [Page 2]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n1.  Introduction\n\n   The document defines a Simple Mail Transfer Protocol [RFC5321]\n   extension so servers can advertise the ability to accept and process\n   internationalized email addresses (see Section 1.1) and\n   internationalized email headers [RFC6532].\n\n   An extended overview of the extension model for internationalized\n   email addresses and the email header appears in RFC 6530 [RFC6530],\n   referred to as \"the framework document\" in this specification.  A\n   thorough understanding of the information in that document and in the\n   base Internet email specifications [RFC5321] [RFC5322] is necessary\n   to understand and implement this specification.\n\n1.1.  Terminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in RFC 2119 [RFC2119].\n\n   The terms \"UTF-8 string\" or \"UTF-8 character\" are used to refer to\n   Unicode characters, which may or may not be members of the ASCII\n   subset, in UTF-8 [RFC3629], a standard Unicode Encoding Form.  All\n   other specialized terms used in this specification are defined in the\n   framework document or in the base Internet email specifications.  In\n   particular, the terms \"ASCII address\", \"internationalized email\n   address\", \"non-ASCII address\", \"SMTPUTF8\", \"internationalized\n   message\", and \"message\" are used in this document according to the\n   definitions in the framework document [RFC6530].\n\n   Strings referred to in this document, including ASCII strings, MUST\n   be expressed in UTF-8.\n\n   This specification uses Augmented BNF (ABNF) rules [RFC5234].  Some\n   basic rules in this document are identified in Section 3.3 as being\n   defined (under the same names) in RFC 5234 [RFC5234], RFC 5321\n   [RFC5321], RFC 5890 [RFC5890], or RFC 6532 [RFC6532].\n\n1.2.  Changes Made to Other Specifications\n\n   This specification extends some syntax rules defined in RFC 5321 and\n   permits internationalized email addresses in the envelope and in\n   trace fields, but it does not modify RFC 5321.  It permits data\n   formats defined in RFC 6532 [RFC6532], but it does not modify RFC\n   5322.  It does require that the 8BITMIME extension [RFC6152] be\n   announced by the SMTPUTF8-aware SMTP server and used with\n   \"BODY=8BITMIME\" by the SMTPUTF8-aware SMTP client, but it does not\n   modify the 8BITMIME specification in any way.\n\n\n\nYao & Mao                    Standards Track                    [Page 3]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   This specification replaces an earlier, experimental, approach to the\n   same problem [RFC5336].  Section 6 of RFC 6530 [RFC6530] describes\n   the changes in approach between RFC 5336 [RFC5336] and this\n   specification.  Anyone trying to convert an implementation from the\n   experimental specification to the specification in this document will\n   need to review those changes carefully.\n\n2.  Overview of Operation\n\n   This document specifies an element of the email internationalization\n   work, specifically the definition of an SMTP extension for\n   internationalized email.  The extension is identified with the token\n   \"SMTPUTF8\".\n\n   The internationalized email headers specification [RFC6532] provides\n   the details of email header features enabled by this extension.\n\n3.  Mail Transport-Level Protocol\n\n3.1.  Framework for the Internationalization Extension\n\n   The following service extension is defined:\n\n   1.   The name of the SMTP service extension is \"Internationalized\n        Email\".\n\n   2.   The EHLO keyword value associated with this extension is\n        \"SMTPUTF8\".\n\n   3.   No parameter values are defined for this EHLO keyword value.  In\n        order to permit future (although unanticipated) extensions, the\n        EHLO response MUST NOT contain any parameters for this keyword.\n        The SMTPUTF8-aware SMTP client MUST ignore any parameters if\n        they appear for this keyword; that is, the SMTPUTF8-aware SMTP\n        client MUST behave as if the parameters do not appear.  If an\n        SMTP server includes SMTPUTF8 in its EHLO response, it MUST be\n        fully compliant with this version of this specification.\n\n   4.   One OPTIONAL parameter, SMTPUTF8, is added to the MAIL command.\n        The parameter does not accept a value.  If this parameter is set\n        in the MAIL command, it indicates that the SMTP client is\n        SMTPUTF8-aware.  Its presence also asserts that the envelope\n        includes the non-ASCII address, the message being sent is an\n        internationalized message, or the message being sent needs the\n        SMTPUTF8 support.\n\n\n\n\n\n\nYao & Mao                    Standards Track                    [Page 4]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   5.   The maximum length of a MAIL command line is increased by 10\n        characters to accommodate the possible addition of the SMTPUTF8\n        parameter.\n\n   6.   One OPTIONAL parameter, SMTPUTF8, is added to the VERIFY (VRFY)\n        and EXPAND (EXPN) commands.  The SMTPUTF8 parameter does not\n        accept a value.  The parameter indicates that the SMTP client\n        can accept Unicode characters in UTF-8 encoding in replies from\n        the VRFY and EXPN commands.\n\n   7.   No additional SMTP verbs are defined by this extension.\n\n   8.   Servers offering this extension MUST provide support for, and\n        announce, the 8BITMIME extension [RFC6152].\n\n   9.   The reverse-path and forward-path of the SMTP MAIL and RCPT\n        commands are extended to allow Unicode characters encoded in\n        UTF-8 in mailbox names (addresses).\n\n   10.  The mail message body is extended as specified in RFC 6532\n        [RFC6532].\n\n   11.  The SMTPUTF8 extension is valid on the submission port\n        [RFC6409].  It may also be used with the Local Mail Transfer\n        Protocol (LMTP) [RFC2033].  When these protocols are used, their\n        use should be reflected in the trace field WITH keywords as\n        appropriate [RFC3848].\n\n3.2.  The SMTPUTF8 Extension\n\n   An SMTP server that announces the SMTPUTF8 extension MUST be prepared\n   to accept a UTF-8 string [RFC3629] in any position in which RFC 5321\n   specifies that a <mailbox> can appear.  Although the characters in\n   the <local-part> are permitted to contain non-ASCII characters, the\n   actual parsing of the <local-part> and the delimiters used are\n   unchanged from the base email specification [RFC5321].  Any domain\n   name to be looked up in the DNS MUST conform to and be processed as\n   specified for Internationalizing Domain Names in Applications (IDNA)\n   [RFC5890].  When doing lookups, the SMTPUTF8-aware SMTP client or\n   server MUST either use a Unicode-aware DNS library, or transform the\n   internationalized domain name to A-label form (i.e., a fully-\n   qualified domain name that contains one or more A-labels but no\n   U-labels) as specified in RFC 5890 [RFC5890].\n\n   An SMTP client that receives the SMTPUTF8 extension keyword in\n   response to the EHLO command MAY transmit mailbox names within SMTP\n   commands as internationalized strings in UTF-8 form.  It MAY send a\n   UTF-8 header [RFC6532] (which may also include mailbox names in\n\n\n\nYao & Mao                    Standards Track                    [Page 5]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   UTF-8).  It MAY transmit the domain parts of mailbox names within\n   SMTP commands or the message header as A-labels or U-labels\n   [RFC5890].  The presence of the SMTPUTF8 extension does not change\n   the server-relaying behaviors described in RFC 5321.\n\n   If the SMTPUTF8 SMTP extension is not offered by the SMTP server, the\n   SMTPUTF8-aware SMTP client MUST NOT transmit an internationalized\n   email address and MUST NOT transmit a mail message containing\n   internationalized mail headers as described in RFC 6532 [RFC6532] at\n   any level within its MIME structure [RFC2045].  (For this paragraph,\n   the internationalized domain name in A-label form as specified in\n   IDNA definitions [RFC5890] is not considered to be\n   \"internationalized\".)  Instead, if an SMTPUTF8-aware SMTP client\n   (sender) attempts to transfer an internationalized message and\n   encounters an SMTP server that does not support the extension, the\n   best action for it to take depends on other conditions.  In\n   particular:\n\n   o  If it is a Message Submission Agent (MSA) [RFC6409] [RFC5598], it\n      MAY choose its own way to deal with this scenario using the wide\n      discretion for changing addresses or otherwise fixing up and\n      transforming messages allowed by RFC 6409.  As long as the\n      resulting message conforms to the requirements of RFC 5321 (i.e.,\n      without the SMTPUTF8 extension), the details of that\n      transformation are outside the scope of this document.\n\n   o  If it is not an MSA or is an MSA and does not choose to transform\n      the message to one that does not require the SMTPUTF8 extension,\n      it SHOULD reject the message.  As usual, this can be done either\n      by generating an appropriate reply during the SMTP transaction or\n      by accepting the message and then generating and transmitting a\n      non-delivery notification.  If the latter choice is made, the\n      notification process MUST conform to the requirements of RFC 5321,\n      RFC 3464 [RFC3464], and RFC 6533 [RFC6533].\n\n   o  As specified in Section 2.2.3 of RFC 5321, an SMTP client with\n      additional information and/or knowledge of special circumstances\n      MAY choose to requeue the message and try later and/or try an\n      alternate MX host as specified in that section.\n\n   This document applies when an SMTPUTF8-aware SMTP client or server\n   supports the SMTPUTF8 extension.  For all other cases, and for\n   addresses and messages that do not require an SMTPUTF8 extension,\n   SMTPUTF8-aware SMTP clients and servers do not change the behavior\n   specified in RFC 5321 [RFC5321].\n\n\n\n\n\n\nYao & Mao                    Standards Track                    [Page 6]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   If an SMTPUTF8-aware SMTP server advertises the Delivery Status\n   Notification (DSN) [RFC3461] extension, it MUST implement RFC 6533\n   [RFC6533].\n\n3.3.  Extended Mailbox Address Syntax\n\n   RFC 5321, Section 4.1.2, defines the syntax of a <Mailbox> entirely\n   in terms of ASCII characters.  This document extends <Mailbox> to add\n   support of non-ASCII characters.\n\n   The key changes made by this specification include:\n\n   o  The <Mailbox> ABNF rule is imported from RFC 5321 and updated in\n      order to support the internationalized email address.  Other\n      related rules are imported from RFC 5321, RFC 5234, RFC 5890, and\n      RFC 6532, or are extended in this document.\n\n   o  The definition of <sub-domain> is extended to permit both the RFC\n      5321 definition and a UTF-8 string in a DNS label that conforms\n      with IDNA definitions [RFC5890].\n\n   o  The definition of <atext> is extended to permit both the RFC 5321\n      definition and a UTF-8 string.  That string MUST NOT contain any\n      of the ASCII graphics or control characters.\n\n   The following ABNF rules imported from RFC 5321, Section 4.1.2, are\n   updated directly or indirectly by this document:\n\n   o  <Mailbox>\n\n   o  <Local-part>\n\n   o  <Dot-string>\n\n   o  <Quoted-string>\n\n   o  <QcontentSMTP>\n\n   o  <Domain>\n\n   o  <Atom>\n\n   The following ABNF rule will be imported from RFC 6532, Section 3.1,\n   directly:\n\n   o  <UTF8-non-ascii>\n\n\n\n\n\nYao & Mao                    Standards Track                    [Page 7]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   The following ABNF rule will be imported from RFC 5234, Appendix B.1,\n   directly:\n\n   o  <DQUOTE>\n\n   The following ABNF rule will be imported from RFC 5890, Section\n   2.3.2.1, directly:\n\n   o  <U-label>\n\n   The following rules are extended in ABNF [RFC5234] as follows.\n\n   sub-domain   =/  U-label\n    ; extend the definition of sub-domain in RFC 5321, Section 4.1.2\n\n   atext   =/  UTF8-non-ascii\n    ; extend the implicit definition of atext in\n    ; RFC 5321, Section 4.1.2, which ultimately points to\n    ; the actual definition in RFC 5322, Section 3.2.3\n\n   qtextSMTP  =/ UTF8-non-ascii\n    ; extend the definition of qtextSMTP in RFC 5321, Section 4.1.2\n\n   esmtp-value  =/ UTF8-non-ascii\n    ; extend the definition of esmtp-value in RFC 5321, Section 4.1.2\n\n3.4.  MAIL Command Parameter Usage\n\n   If the envelope or message being sent requires the capabilities of\n   the SMTPUTF8 extension, the SMTPUTF8-aware SMTP client MUST supply\n   the SMTPUTF8 parameter with the MAIL command.  If this parameter is\n   provided, it MUST not accept a value.  If the SMTPUTF8-aware SMTP\n   client is aware that neither the envelope nor the message being sent\n   requires any of the SMTPUTF8 extension capabilities, it SHOULD NOT\n   supply the SMTPUTF8 parameter with the MAIL command.\n\n   Because there is no guarantee that a next-hop SMTP server will\n   support the SMTPUTF8 extension, use of the SMTPUTF8 extension always\n   carries a risk of transmission failure.  In fact, during the early\n   stages of deployment for the SMTPUTF8 extension, the risk will be\n   quite high.  Hence, there is a distinct near-term advantage for\n   ASCII-only messages to be sent without using this extension.  The\n   long-term advantage of casting ASCII [ASCII] characters (0x7f and\n   below) as UTF-8 form is that it permits pure-Unicode environments.\n\n\n\n\n\n\n\nYao & Mao                    Standards Track                    [Page 8]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n3.5.  Non-ASCII Addresses and Reply-Codes\n\n   An SMTPUTF8-aware SMTP client MUST NOT send an internationalized\n   message to an SMTP server that does not support SMTPUTF8.  If the\n   SMTP server does not support this option, then the SMTPUTF8-aware\n   SMTP client has three choices according to Section 3.2 of this\n   specification.\n\n   The three-digit reply-codes used in this section are based on their\n   meanings as defined in RFC 5321.\n\n   When messages are rejected because the RCPT command requires an ASCII\n   address, the reply-code 553 is returned with the meaning \"mailbox\n   name not allowed\".  When messages are rejected because the MAIL\n   command requires an ASCII address, the reply-code 550 is returned\n   with the meaning \"mailbox unavailable\".  When the SMTPUTF8-aware SMTP\n   server supports enhanced mail system status codes [RFC3463], reply-\n   code \"X.6.7\" [RFC5248] (see Section 4) is used, meaning \"Non-ASCII\n   addresses not permitted for that sender/recipient\".\n\n   When messages are rejected for other reasons, the server follows the\n   model of the base email specification in RFC 5321; this extension\n   does not change those circumstances or reply messages.\n\n   If a message is rejected after the final \".\" of the DATA command\n   because one or more recipients are unable to accept and process a\n   message with internationalized email headers, the reply-code \"554\" is\n   used with the meaning \"Transaction failed\".  If the SMTPUTF8-aware\n   SMTP server supports enhanced mail system status codes [RFC3463],\n   reply code \"X.6.9\" [RFC5248] (see Section 4) is used to indicate this\n   condition, meaning \"UTF-8 header message cannot be transmitted to one\n   or more recipients, so the message must be rejected\".\n\n   The SMTPUTF8-aware SMTP servers are encouraged to detect that\n   recipients cannot accept internationalized messages and generate an\n   error after the RCPT command rather than waiting until after the DATA\n   command to issue an error.\n\n3.6.  Body Parts and SMTP Extensions\n\n   The MAIL command parameter SMTPUTF8 asserts that a message is an\n   internationalized message or the message being sent needs the\n   SMTPUTF8 support.  There is still a chance that a message being sent\n   via the MAIL command with the SMTPUTF8 parameter is not an\n   internationalized message.  An SMTPUTF8-aware SMTP client or server\n   that requires accurate knowledge of whether a message is\n   internationalized needs to parse all message header fields and MIME\n\n\n\n\nYao & Mao                    Standards Track                    [Page 9]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   header fields [RFC2045] in the message body.  However, this\n   specification does not require that the SMTPUTF8-aware SMTP client or\n   server inspects the message.\n\n   Although this specification requires that SMTPUTF8-aware SMTP servers\n   support the 8BITMIME extension [RFC6152] to ensure that servers have\n   adequate handling capability for 8-bit data, it does not require non-\n   ASCII body parts in the MIME message as specified in RFC 2045.  The\n   SMTPUTF8 extension MAY be used as follows (assuming it is appropriate\n   given the body content):\n\n   -  with the BODY=8BITMIME parameter [RFC6152], or\n\n   -  with the BODY=BINARYMIME parameter, if the SMTP server advertises\n      BINARYMIME [RFC3030].\n\n3.7.  Additional ESMTP Changes and Clarifications\n\n   The information carried in the mail transport process involves\n   addresses (\"mailboxes\") and domain names in various contexts in\n   addition to the MAIL and RCPT commands and extended alternatives to\n   them.  In general, the rule is that, when RFC 5321 specifies a\n   mailbox, this SMTP extension requires UTF-8 form to be used for the\n   entire string.  When RFC 5321 specifies a domain name, the\n   internationalized domain name SHOULD be in U-label form if the\n   SMTPUTF8 extension is supported; otherwise, it SHOULD be in A-label\n   form.\n\n   The following subsections list and discuss all of the relevant cases.\n\n3.7.1.  The Initial SMTP Exchange\n\n   When an SMTP connection is opened, the SMTP server sends a \"greeting\"\n   response consisting of the 220 reply-code and some information.  The\n   SMTP client then sends the EHLO command.  Since the SMTP client\n   cannot know whether the SMTP server supports SMTPUTF8 until after it\n   receives the response to the EHLO, the SMTPUTF8-aware SMTP client\n   MUST send only ASCII (LDH label or A-label [RFC5890]) domains in the\n   EHLO command.  If the SMTPUTF8-aware SMTP server provides domain\n   names in the EHLO response, they MUST be in the form of LDH labels or\n   A-labels.\n\n3.7.2.  Mail eXchangers\n\n   If multiple DNS MX records are used to specify multiple servers for a\n   domain (as described in Section 5 of RFC 5321 [RFC5321]), it is\n   strongly advised that all or none of them SHOULD support the SMTPUTF8\n\n\n\n\nYao & Mao                    Standards Track                   [Page 10]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   extension.  Otherwise, unexpected rejections can happen during\n   temporary or permanent failures, which users might perceive as\n   serious reliability issues.\n\n3.7.3.  Trace Information\n\n   The trace information <Return-path-line>, <Time-stamp-line>, and\n   their related rules are defined in Section 4.4 of RFC 5321 [RFC5321].\n   This document updates <Mailbox> and <Domain> to support non-ASCII\n   characters.  When the SMTPUTF8 extension is used, the 'Reverse-path'\n   clause of the Return-path-line may include an internationalized\n   domain name that uses the U-label form.  Also, the 'Stamp' clause of\n   the Time-stamp-line may include an internationalized domain name that\n   uses the U-label form.\n\n   If the messages that include trace fields are sent by an SMTPUTF8-\n   aware SMTP client or relay server without the SMTPUTF8 parameter\n   included in the MAIL commands, trace field values must conform to RFC\n   5321 regardless of the SMTP server's capability.\n\n   When an SMTPUTF8-aware SMTP server adds a trace field to a message\n   that was or will be transmitted with the SMTPUTF8 parameter included\n   in the MAIL commands, that server SHOULD use the U-label form for\n   internationalized domain names in the new trace field.\n\n   The protocol value of the 'WITH' clause when this extension is used\n   is one of the SMTPUTF8 values specified in the \"IANA Considerations\"\n   section of this document.\n\n3.7.4.  UTF-8 Strings in Replies\n\n3.7.4.1.  MAIL Command\n\n   If an SMTP client follows this specification and sends any MAIL\n   commands containing the SMTPUTF8 parameter, the SMTPUTF8-aware SMTP\n   server is permitted to use UTF-8 characters in the email address\n   associated with 251 and 551 reply-codes, and the SMTP client MUST be\n   able to accept and process them.  If a given MAIL command does not\n   include the SMTPUTF8 parameter, the SMTPUTF8-aware SMTP server MUST\n   NOT return a 251 or 551 response containing a non-ASCII mailbox.\n   Instead, it MUST transform such responses into 250 or 550 responses\n   that do not contain non-ASCII addresses.\n\n3.7.4.2.  VRFY and EXPN Commands and the SMTPUTF8 Parameter\n\n   If the SMTPUTF8 parameter is transmitted with the VRFY and EXPN\n   commands, it indicates that the SMTP client can accept UTF-8 strings\n   in replies to those commands.  The parameter with the VRFY and EXPN\n\n\n\nYao & Mao                    Standards Track                   [Page 11]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   commands SHOULD only be used after the SMTP client sees the EHLO\n   response with the SMTPUTF8 keyword.  This allows an SMTPUTF8-aware\n   SMTP server to use UTF-8 strings in mailbox names and full names that\n   occur in replies, without concern that the SMTP client might be\n   confused by them.  An SMTP client that conforms to this specification\n   MUST accept and correctly process replies to the VRFY and EXPN\n   commands that contain UTF-8 strings.  However, an SMTPUTF8-aware SMTP\n   server MUST NOT use UTF-8 strings in replies if the SMTP client does\n   not specifically allow such replies by transmitting this parameter\n   with the VRFY and EXPN commands.\n\n   Most replies do not require that a mailbox name be included in the\n   returned text, and therefore a UTF-8 string is not needed in them.\n   Some replies, notably those resulting from successful execution of\n   the VRFY and EXPN commands, do include the mailbox.\n\n   VERIFY (VRFY) and EXPAND (EXPN) command syntaxes are changed to:\n\n   vrfy = \"VRFY\" SP String\n     [ SP \"SMTPUTF8\" ] CRLF\n    ; String may include Non-ASCII characters\n\n   expn = \"EXPN\" SP String\n     [ SP \"SMTPUTF8\" ] CRLF\n    ; String may include Non-ASCII characters\n\n   The SMTPUTF8 parameter does not accept a value.  If the reply to a\n   VRFY or EXPN command requires a UTF-8 string, but the SMTP client did\n   not use the SMTPUTF8 parameter, then the SMTPUTF8-aware SMTP server\n   MUST use either the reply-code 252 or 550.  Reply-code 252, defined\n   in RFC 5321 [RFC5321], means \"Cannot VRFY user, but will accept the\n   message and attempt the delivery\".  Reply-code 550, also defined in\n   RFC 5321 [RFC5321], means \"Requested action not taken: mailbox\n   unavailable\".  When the SMTPUTF8-aware SMTP server supports enhanced\n   mail system status codes [RFC3463], the enhanced reply-code as\n   specified below is used.  Using the SMTPUTF8 parameter with a VRFY or\n   EXPN command enables UTF-8 replies for that command only.\n\n   If a normal success response (i.e., 250) is returned, the response\n   MAY include the full name of the user and MUST include the mailbox of\n   the user.  It MUST be in either of the following forms:\n\n   User Name <Mailbox>\n    ; Mailbox is defined in Section 3.3 of this document.\n    ; User Name can contain non-ASCII characters.\n\n   Mailbox\n    ; Mailbox is defined in Section 3.3 of this document.\n\n\n\nYao & Mao                    Standards Track                   [Page 12]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   If the SMTP reply requires UTF-8 strings, but a UTF-8 string is not\n   allowed in the reply, and the SMTPUTF8-aware SMTP server supports\n   enhanced mail system status codes [RFC3463], the enhanced reply-code\n   is \"X.6.8\" [RFC5248] (see Section 4), meaning \"A reply containing a\n   UTF-8 string is required to show the mailbox name, but that form of\n   response is not permitted by the SMTP client\".\n\n   If the SMTP client does not support the SMTPUTF8 extension, but\n   receives a UTF-8 string in a reply, it may not be able to properly\n   report the reply to the user, and some clients might mishandle that\n   reply.  Internationalized messages in replies are only allowed in the\n   commands under the situations described above.\n\n   Although UTF-8 strings are needed to represent email addresses in\n   responses under the rules specified in this section, this extension\n   does not permit the use of UTF-8 strings for any other purposes.\n   SMTPUTF8-aware SMTP servers MUST NOT include non-ASCII characters in\n   replies except in the limited cases specifically permitted in this\n   section.\n\n4.  IANA Considerations\n\n4.1.  SMTP Service Extensions Registry\n\n   IANA has added a new value \"SMTPUTF8\" to the \"SMTP Service Extension\"\n   registry of the \"Mail Parameters\" registry, according to the\n   following data:\n\n        +----------+---------------------------------+-----------+\n        | Keywords | Description                     | Reference |\n        +----------+---------------------------------+-----------+\n        | SMTPUTF8 | Internationalized email address | [RFC6531] |\n        +----------+---------------------------------+-----------+\n\n4.2.  SMTP Enhanced Status Code Registry\n\n   The code definitions in this document replace those specified in RFC\n   5336, following the guidance in Sections 3.5 and 3.7.4.2 of this\n   document, and based on RFC 5248 [RFC5248].  IANA has updated the\n   \"Simple Mail Transfer Protocol (SMTP) Enhanced Status Code Registry\"\n   with the following data:\n\n\n\n\n\n\n\n\n\n\nYao & Mao                    Standards Track                   [Page 13]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n    Code:        X.6.7\n    Sample Text: Non-ASCII addresses not permitted for that\n                 sender/recipient\n    Associated basic status code: 550, 553\n    Description: This indicates the reception of a MAIL or RCPT command\n                 that non-ASCII addresses are not permitted.\n    Defined:     RFC 6531 (Standards Track)\n    Submitter:   Jiankang YAO\n    Change controller: ima@ietf.org\n\n\n    Code:        X.6.8\n    Sample Text: UTF-8 string reply is required, but not permitted by\n                 the SMTP client\n    Associated basic status code: 252, 550, 553\n    Description: This indicates that a reply containing a UTF-8 string\n                 is required to show the mailbox name, but that form of\n                 response is not permitted by the SMTP client.\n    Defined:     RFC 6531 (Standards Track)\n    Submitter:   Jiankang YAO\n    Change controller: ima@ietf.org\n\n\n    Code:        X.6.9\n    Sample Text: UTF-8 header message cannot be transferred to one or\n                 more recipients, so the message must be rejected\n    Associated basic status code: 550\n    Description: This indicates that transaction failed after the\n                 final \".\" of the DATA command.\n    Defined:     RFC 6531 (Standards Track)\n    Submitter:   Jiankang YAO\n    Change controller: ima@ietf.org\n\n\n    Code:        X.6.10\n    Description: This is a duplicate of X.6.8 and is thus deprecated.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nYao & Mao                    Standards Track                   [Page 14]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n4.3.  WITH Protocol Types Sub-Registry of the Mail Transmission Types\n      Registry\n\n   IANA has modified or added the following entries in the \"WITH\n   protocol types\" sub-registry under the \"Mail Transmission Types\"\n   registry.\n\n   +--------------+------------------------------+---------------------+\n   | WITH         | Description                  | Reference           |\n   | protocol     |                              |                     |\n   | types        |                              |                     |\n   +--------------+------------------------------+---------------------+\n   | UTF8SMTP     | ESMTP with SMTPUTF8          | [RFC6531]           |\n   | UTF8SMTPA    | ESMTP with SMTPUTF8 and AUTH | [RFC4954] [RFC6531] |\n   | UTF8SMTPS    | ESMTP with SMTPUTF8 and      | [RFC3207] [RFC6531] |\n   |              | STARTTLS                     |                     |\n   | UTF8SMTPSA   | ESMTP with SMTPUTF8 and both | [RFC3207] [RFC4954] |\n   |              | STARTTLS and AUTH            | [RFC6531]           |\n   | UTF8LMTP     | LMTP with SMTPUTF8           | [RFC6531]           |\n   | UTF8LMTPA    | LMTP with SMTPUTF8 and AUTH  | [RFC4954] [RFC6531] |\n   | UTF8LMTPS    | LMTP with SMTPUTF8 and       | [RFC3207] [RFC6531] |\n   |              | STARTTLS                     |                     |\n   | UTF8LMTPSA   | LMTP with SMTPUTF8 and both  | [RFC3207] [RFC4954] |\n   |              | STARTTLS and AUTH            | [RFC6531]           |\n   +--------------+------------------------------+---------------------+\n\n5.  Security Considerations\n\n   The extended security considerations discussion in the framework\n   document [RFC6530] applies here.\n\n   More security considerations are discussed below:\n\n   Beyond the use inside the email global system (in SMTP envelopes and\n   message headers), internationalized email addresses will also show up\n   inside other cases, in particular:\n\n   o  the logging systems of SMTP transactions and other logs to monitor\n      the email systems;\n\n   o  the trouble ticket systems used by security teams to manage\n      security incidents, when an email address is involved;\n\n   In order to avoid problems that could cause loss of data, this will\n   likely require extending these systems to support full UTF-8, or\n   require providing an adequate mechanism for mapping non-ASCII strings\n   to ASCII.\n\n\n\n\nYao & Mao                    Standards Track                   [Page 15]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   Another security aspect to be considered is related to the ability by\n   security team members to quickly understand, read, and identify email\n   addresses from the logs, when they are tracking an incident.\n   Mechanisms to automatically and quickly provide the origin or\n   ownership of an internationalized email address SHALL be implemented\n   for use by log readers that cannot easily read non-ASCII information.\n\n   The SMTP commands VRFY and EXPN are sometimes used in SMTP\n   transactions where there is no message to transfer (by tools used to\n   take automated actions in case potential spam messages are\n   identified).  Sections 3.5 and 7.3 of RFC 5321 give detailed\n   descriptions of use and possible behaviors.  Implementation of\n   internationalized addresses can also affect logs and actions by these\n   tools.\n\n6.  Acknowledgements\n\n   This document revises RFC 5336 [RFC5336] based on the result of the\n   Email Address Internationalization (EAI) working group's discussion.\n   Many EAI working group members did tests and implementations to move\n   this document to the Standards Track.  Significant comments and\n   suggestions were received from Xiaodong LEE, Nai-Wen HSU, Yangwoo KO,\n   Yoshiro YONEYA, and other members of JET and were incorporated into\n   the specification.  Additional important comments and suggestions,\n   and often specific text, were contributed by many members of the\n   working group and design team.  Those contributions include material\n   from John C. Klensin, Charles Lindsey, Dave Crocker, Harald Tveit\n   Alvestrand, Marcos Sanz, Chris Newman, Martin Duerst, Edmon Chung,\n   Tony Finch, Kari Hurtta, Randall Gellens, Frank Ellermann, Alexey\n   Melnikov, Pete Resnick, S. Moonesamy, Soobok Lee, Shawn Steele,\n   Alfred Hoenes, Miguel Garcia, Magnus Westerlund, Joseph Yee, and Lars\n   Eggert.  Of course, none of the individuals are necessarily\n   responsible for the combination of ideas represented here.\n\n   Thanks a lot to Dave Crocker for his comments and helping with ABNF\n   refinement.\n\n7.  References\n\n7.1.  Normative References\n\n   [ASCII]    American National Standards Institute  (formerly United\n              States of America Standards Institute), \"USA Code for\n              Information Interchange\", ANSI X3.4-1968, 1968.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n\n\n\nYao & Mao                    Standards Track                   [Page 16]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n   [RFC3461]  Moore, K., \"Simple Mail Transfer Protocol (SMTP) Service\n              Extension for Delivery Status Notifications (DSNs)\",\n              RFC 3461, January 2003.\n\n   [RFC3463]  Vaudreuil, G., \"Enhanced Mail System Status Codes\",\n              RFC 3463, January 2003.\n\n   [RFC3464]  Moore, K. and G. Vaudreuil, \"An Extensible Message Format\n              for Delivery Status Notifications\", RFC 3464,\n              January 2003.\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", RFC 3629, November 2003.\n\n   [RFC3848]  Newman, C., \"ESMTP and LMTP Transmission Types\n              Registration\", RFC 3848, July 2004.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [RFC5248]  Hansen, T. and J. Klensin, \"A Registry for SMTP Enhanced\n              Mail System Status Codes\", RFC 5248, June 2008.\n\n   [RFC5321]  Klensin, J., \"Simple Mail Transfer Protocol\", RFC 5321,\n              October 2008.\n\n   [RFC5322]  Resnick, P., Ed., \"Internet Message Format\", RFC 5322,\n              October 2008.\n\n   [RFC5890]  Klensin, J., \"Internationalizing Domain Names in\n              Applications (IDNA definitions)\", RFC 5890, June 2010.\n\n   [RFC6152]  Klensin, J., Freed, N., Rose, M., and D. Crocker, \"SMTP\n              Service Extension for 8-bit MIME Transport\", STD 71,\n              RFC 6152, March 2011.\n\n   [RFC6409]  Gellens, R. and J. Klensin, \"Message Submission for Mail\",\n              STD 72, RFC 6409, November 2011.\n\n   [RFC6530]  Klensin, J. and Y. Ko, \"Overview and Framework for\n              Internationalized Email\", RFC 6530, February 2012.\n\n   [RFC6532]  Yang, A., Steele, S., and N. Freed, \"Internationalized\n              Email Headers\", RFC 6532, February 2012.\n\n   [RFC6533]  Hansen, T., Ed., Newman, C., and A. Melnikov, Ed.,\n              \"Internationalized Delivery Status and Disposition\n              Notifications\", RFC RFC6533, February 2012.\n\n\n\nYao & Mao                    Standards Track                   [Page 17]\n\f\nRFC 6531               SMTP Extension for SMTPUTF8         February 2012\n\n\n7.2.  Informative References\n\n   [RFC2033]  Myers, J., \"Local Mail Transfer Protocol\", RFC 2033,\n              October 1996.\n\n   [RFC2045]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n              Extensions (MIME) Part One: Format of Internet Message\n              Bodies\", RFC 2045, November 1996.\n\n   [RFC3030]  Vaudreuil, G., \"SMTP Service Extensions for Transmission\n              of Large and Binary MIME Messages\", RFC 3030,\n              December 2000.\n\n   [RFC3207]  Hoffman, P., \"SMTP Service Extension for Secure SMTP over\n              Transport Layer Security\", RFC 3207, February 2002.\n\n   [RFC4954]  Siemborski, R. and A. Melnikov, \"SMTP Service Extension\n              for Authentication\", RFC 4954, July 2007.\n\n   [RFC5336]  Yao, J. and W. Mao, \"SMTP Extension for Internationalized\n              Email Addresses\", RFC 5336, September 2008.\n\n   [RFC5598]  Crocker, D., \"Internet Mail Architecture\", RFC 5598,\n              July 2009.\n\nAuthors' Addresses\n\n   Jiankang YAO\n   CNNIC\n   No.4 South 4th Street, Zhongguancun\n   Beijing\n   China\n\n   Phone: +86 10 58813007\n   EMail: yaojk@cnnic.cn\n\n\n   Wei MAO\n   CNNIC\n   No.4 South 4th Street, Zhongguancun\n   Beijing\n   China\n\n   Phone: +86 10 58812230\n   EMail: maowei_ietf@cnnic.cn\n\n\n\n\n\n\nYao & Mao                    Standards Track                   [Page 18]\n\f\n"
  },
  {
    "path": "rfc/rfc6851.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                    A. Gulbrandsen\nRequest for Comments: 6851\nCategory: Standards Track                                  N. Freed, Ed.\nISSN: 2070-1721                                                   Oracle\n                                                            January 2013\n\n\n        Internet Message Access Protocol (IMAP) - MOVE Extension\n\nAbstract\n\n   This document defines an IMAP extension consisting of two new\n   commands, MOVE and UID MOVE, that are used to move messages from one\n   mailbox to another.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6851.\n\nCopyright Notice\n\n   Copyright (c) 2013 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 1]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n1.  Introduction\n\n   This document defines an IMAP [RFC3501] extension to facilitate\n   moving messages from one mailbox to another.  This is accomplished by\n   defining a new MOVE command and extending the UID command to allow\n   UID MOVE.\n\n   A move function is not provided in the base IMAP specification, so\n   clients have instead had to use a combination of the COPY, STORE, and\n   EXPUNGE commands to perform this very common operation.\n\n   Implementors have long pointed out some shortcomings with this\n   approach.  Because the moving of a message is not an atomic process,\n   interruptions can leave messages in intermediate states.  Because\n   multiple clients can be accessing the mailboxes at the same time,\n   clients can see messages in intermediate states even without\n   interruptions.  If the source mailbox contains other messages that\n   are flagged for deletion, the third step can have the side effect of\n   expunging more than just the set of moved messages.  Additionally,\n   servers with certain types of back-end message stores might have\n   efficient ways of moving messages, which don't involve the actual\n   copying of data.  Such efficiencies are often not available to the\n   COPY/STORE/EXPUNGE process.\n\n   The MOVE extension is present in any IMAP implementation that returns\n   \"MOVE\" as one of the supported capabilities to the CAPABILITY\n   command.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   Formal syntax is specified using ABNF [RFC5234].\n\n   Example lines prefaced by \"C:\" are sent by the client and ones\n   prefaced by \"S:\" by the server.\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 2]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n3.  MOVE and UID MOVE\n\n3.1.  MOVE Command\n\n   Arguments: sequence set\n              mailbox name\n\n   Responses: no specific responses for this command\n\n   Result: OK - move completed\n\n           NO - move error: can't move those messages or to that name\n\n           BAD - command unknown or arguments invalid\n\n3.2.  UID MOVE Command\n\n   This extends the first form of the UID command (see [RFC3501],\n   Section 6.4.8) to add the MOVE command defined above as a valid\n   argument.\n\n3.3.  Semantics of MOVE and UID MOVE\n\n   The MOVE command takes two arguments: a message set (sequence numbers\n   for MOVE, UIDs for UID MOVE) and a named mailbox.  Each message\n   included in the set is moved, rather than copied, from the selected\n   (source) mailbox to the named (target) mailbox.\n\n   This means that a new message is created in the target mailbox with a\n   new UID, the original message is removed from the source mailbox, and\n   it appears to the client as a single action.  This has the same\n   effect for each message as this sequence:\n\n   1.  [UID] COPY\n\n   2.  [UID] STORE +FLAGS.SILENT \\DELETED\n\n   3.  UID EXPUNGE\n\n   Although the effect of the MOVE is the same as the preceding steps,\n   the semantics are not identical: The intermediate states produced by\n   those steps do not occur, and the response codes are different.  In\n   particular, though the COPY and EXPUNGE response codes will be\n   returned, response codes for a STORE MUST NOT be generated and the\n   \\DELETED flag MUST NOT be set for any message.\n\n\n\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 3]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n   Because a MOVE applies to a set of messages, it might fail partway\n   through the set.  Regardless of whether the command is successful in\n   moving the entire set, each individual message SHOULD either be moved\n   or unaffected.  The server MUST leave each message in a state where\n   it is in at least one of the source or target mailboxes (no message\n   can be lost or orphaned).  The server SHOULD NOT leave any message in\n   both mailboxes (it would be bad for a partial failure to result in a\n   bunch of duplicate messages).  This is true even if the server\n   returns a tagged NO response to the command.\n\n   Because of the similarity of MOVE to COPY, extensions that affect\n   COPY affect MOVE in the same way.  Response codes such as TRYCREATE\n   (see [RFC3501], Section 6.4.7), as well as those defined by\n   extensions, are sent as appropriate.  See Section 4 for more\n   information about how MOVE interacts with other IMAP extensions.\n\n   An example:\n\n       C: a UID MOVE 42:69 foo\n       S: * OK [COPYUID 432432 42:69 1202:1229]\n       S: * 22 EXPUNGE\n       S: (more expunges)\n       S: a OK Done\n\n   Note that the server may send unrelated EXPUNGE responses as well, if\n   any happen to have been expunged at the same time; this is normal\n   IMAP operation.\n\n   Implementers will need to read [RFC4315] to understand what UID\n   EXPUNGE does, though full implementation of [RFC4315] is not\n   necessary.\n\n   Note that moving a message to the currently selected mailbox (that\n   is, where the source and target mailboxes are the same) is allowed\n   when copying the message to the currently selected mailbox is\n   allowed.\n\n   The server may send EXPUNGE (or VANISHED) responses before the tagged\n   response, so the client cannot safely send more commands with message\n   sequence number arguments while the server is processing MOVE or UID\n   MOVE.\n\n   Both MOVE and UID MOVE can be pipelined with other commands, but care\n   has to be taken.  Both commands modify sequence numbers and also\n   allow unrelated EXPUNGE responses.  The renumbering of other messages\n   in the source mailbox following any EXPUNGE response can be\n   surprising and makes it unsafe to pipeline any command that relies on\n   message sequence numbers after a MOVE or UID MOVE.  Similarly, MOVE\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 4]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n   cannot be pipelined with a command that might cause message\n   renumbering.  See [RFC3501], Section 5.5, for more information about\n   ambiguities as well as handling requirements for both clients and\n   servers.\n\n4.  Interaction with Other Extensions\n\n   This section describes how MOVE interacts with some other IMAP\n   extensions.\n\n4.1.  RFC 2087, QUOTA\n\n   The QUOTA extension (defined by [RFC2087]) may interact with MOVE on\n   some servers, in the sense that a MOVE command may succeed where COPY\n   would cause a quota overrun.\n\n4.2.  RFC 4314, Access Control List (ACL)\n\n   The ACL rights [RFC4314] required for MOVE and UID MOVE are the union\n   of the ACL rights required for UID STORE, UID COPY, and UID EXPUNGE.\n\n4.3.  RFC 4315, UIDPLUS\n\n   Servers supporting UIDPLUS [RFC4315] SHOULD send COPYUID in response\n   to a UID MOVE command.  For additional information see Section 3 of\n   [RFC4315].\n\n   Servers implementing UIDPLUS are also advised to send the COPYUID\n   response code in an untagged OK before sending EXPUNGE or moved\n   responses.  (Sending COPYUID in the tagged OK, as described in the\n   UIDPLUS specification, means that clients first receive an EXPUNGE\n   for a message and afterwards COPYUID for the same message.  It can be\n   unnecessarily difficult to process that sequence usefully.)\n\n4.4.  RFC 5162, QRESYNC\n\n   The QRESYNC extension [RFC5162] states that the server SHOULD send\n   VANISHED rather than EXPUNGE in response to the UID EXPUNGE command.\n   The same requirement applies to MOVE, and a QRESYNC-enabled client\n   needs to handle both VANISHED and EXPUNGE responses to a UID MOVE\n   command.\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently moved due to the execution of\n   the MOVE/UID MOVE command.  For each permanently removed message, the\n   server MUST remember the incremented mod-sequence and corresponding\n   UID.  If at least one message was moved, the server MUST send the\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 5]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n   updated per-mailbox modification sequence using the HIGHESTMODSEQ\n   response code (defined in [RFC4551]) in the tagged or untagged OK\n   response.\n\n   When one or more messages are moved to a target mailbox, if the\n   server is capable of storing modification sequences for the mailbox,\n   the server MUST generate and assign new modification sequence numbers\n   to the moved messages that are higher than the highest modification\n   sequence of the messages originally in the mailbox.\n\n4.5.  IMAP Events in Sieve\n\n   MOVE applies to IMAP events in Sieve [RFC6785] in the same way as\n   COPY does.  Therefore, MOVE can cause a Sieve script to be invoked\n   with the imap.cause set to \"COPY\".  Because MOVE does not cause flags\n   to be changed, a MOVE command will not result in a script invocation\n   with the imap.cause set to \"FLAG\".\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].  [RFC3501] defines\n   the non-terminals \"capability\", \"command-select\", \"sequence-set\", and\n   \"mailbox\".\n\n   Except as noted otherwise, all alphabetic characters are case\n   insensitive.  The use of upper or lower case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   capability     =/ \"MOVE\"\n\n   command-select =/ move\n   move           = \"MOVE\" SP sequence-set SP mailbox\n   uid            = \"UID\" SP (copy / fetch / search / store / move)\n\n6.  Security Considerations\n\n   MOVE does not introduce any new capabilities to IMAP, and this limits\n   the security impact.  However, the transactional semantics of MOVE\n   may interact with specific implementations in ways that could have\n   unexpected consequences.  For example, moving messages between\n   mailboxes under the quota root may require temporary suspension of\n   quota checking.\n\n   An additional area of concern is interaction with antispam,\n   antivirus, and other security scanning and auditing mechanisms.\n   Different mailboxes may have different security policies that could\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 6]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n   interact with MOVE in complex ways.  Scanning with updated rules may\n   also be required when messages are moved even when the underlying\n   policy has not changed.\n\n   MOVE does relieve a problem with the base specification, since client\n   authors currently have to devise and implement complicated algorithms\n   to handle partial failures of the STORE/COPY/EXPUNGE trio.\n   Incomplete or improper implementation of these algorithms can lead to\n   mail loss.\n\n7.  IANA Considerations\n\n   The IANA has added MOVE to the \"IMAP 4 Capabilities\" registry,\n   <http://www.iana.org/assignments/imap4-capabilities>.\n\n8.  Acknowledgments\n\n   This document is dedicated to the memory of Mark Crispin, the\n   inventor of the IMAP protocol, author of the IMAP protocol\n   specification [RFC3501], and contributor to many other email\n   specifications in the IETF.\n\n   An extension like this has been proposed many times, by many people.\n   This document is based on several of those proposals, most recently\n   that by Witold Krecicki.  Witold, Benoit Claise, Adrien W. de Croy,\n   Stephen Farrell, Bron Gondwana, Dan Karp, Christian Ketterer, Murray\n   Kucherawy, Jan Kundrat, Barry Leiba, Alexey Melnikov, Kathleen\n   Moriarty, Zoltan Ordogh, Pete Resnick, Timo Sirainen, Michael\n   Slusarz, and others provided valuable comments.\n\n9.  References\n\n9.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [RFC4315]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              UIDPLUS extension\", RFC 4315, December 2005.\n\n\n\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 7]\n\f\nRFC 6851                  IMAP - MOVE Extension             January 2013\n\n\n   [RFC4551]  Melnikov, A. and S. Hole, \"IMAP Extension for Conditional\n              STORE Operation or Quick Flag Changes Resynchronization\",\n              RFC 4551, June 2006.\n\n   [RFC5162]  Melnikov, A., Cridland, D., and C. Wilson, \"IMAP4\n              Extensions for Quick Mailbox Resynchronization\", RFC 5162,\n              March 2008.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n9.2.  Informative References\n\n   [RFC2087]  Myers, J., \"IMAP4 QUOTA extension\", RFC 2087,\n              January 1997.\n\n   [RFC6785]  Leiba, B., \"Support for Internet Message Access Protocol\n              (IMAP) Events in Sieve\", RFC 6785, November 2012.\n\nAuthors' Addresses\n\n   Arnt Gulbrandsen\n   Schweppermannstr. 8\n   D-81671 Muenchen\n   Germany\n\n   Fax:   +49 89 4502 9758\n   EMail: arnt@gulbrandsen.priv.no\n\n\n   Ned Freed (editor)\n   Oracle\n   800 Royal Oaks\n   Monrovia, CA  91016-6347\n   USA\n\n   EMail: ned+ietf@mrochek.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGulbrandsen & Freed          Standards Track                    [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc6855.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                   P. Resnick, Ed.\nRequest for Comments: 6855                         Qualcomm Incorporated\nObsoletes: 5738                                           C. Newman, Ed.\nCategory: Standards Track                                         Oracle\nISSN: 2070-1721                                             S. Shen, Ed.\n                                                                   CNNIC\n                                                              March 2013\n\n\n                         IMAP Support for UTF-8\n\nAbstract\n\n   This specification extends the Internet Message Access Protocol\n   (IMAP) to support UTF-8 encoded international characters in user\n   names, mail addresses, and message headers.  This specification\n   replaces RFC 5738.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6855.\n\nCopyright Notice\n\n   Copyright (c) 2013 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\nResnick, et al.              Standards Track                    [Page 1]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2\n   2.  Conventions Used in This Document  . . . . . . . . . . . . . .  2\n   3.  \"UTF8=ACCEPT\" IMAP Capability and UTF-8 in IMAP\n       Quoted-Strings . . . . . . . . . . . . . . . . . . . . . . . .  3\n   4.  IMAP UTF8 \"APPEND\" Data Extension  . . . . . . . . . . . . . .  4\n   5.  \"LOGIN\" Command and UTF-8  . . . . . . . . . . . . . . . . . .  5\n   6.  \"UTF8=ONLY\" Capability . . . . . . . . . . . . . . . . . . . .  5\n   7.  Dealing with Legacy Clients  . . . . . . . . . . . . . . . . .  6\n   8.  Issues with UTF-8 Header Mailstore . . . . . . . . . . . . . .  7\n   9.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . .  8\n   10. Security Considerations  . . . . . . . . . . . . . . . . . . .  8\n   11. References . . . . . . . . . . . . . . . . . . . . . . . . . .  9\n     11.1.  Normative References  . . . . . . . . . . . . . . . . . .  9\n     11.2.  Informative References  . . . . . . . . . . . . . . . . . 10\n   Appendix A.  Design Rationale  . . . . . . . . . . . . . . . . . . 11\n   Appendix B.  Acknowledgments . . . . . . . . . . . . . . . . . . . 11\n\n1.  Introduction\n\n   This specification forms part of the Email Address\n   Internationalization protocols described in the Email Address\n   Internationalization Framework document [RFC6530].  It extends IMAP\n   [RFC3501] to permit UTF-8 [RFC3629] in headers, as described in\n   \"Internationalized Email Headers\" [RFC6532].  It also adds a\n   mechanism to support mailbox names using the UTF-8 charset.  This\n   specification creates two new IMAP capabilities to allow servers to\n   advertise these new extensions.\n\n   This specification assumes that the IMAP server will be operating in\n   a fully internationalized environment, i.e., one in which all clients\n   accessing the server will be able to accept non-ASCII message header\n   fields and other information, as specified in Section 3.  At least\n   during a transition period, that assumption will not be realistic for\n   many environments; the issues involved are discussed in Section 7\n   below.\n\n   This specification replaces an earlier, experimental approach to the\n   same problem [RFC5738].\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"SHOULD\", \"SHOULD NOT\", and \"MAY\"\n   in this document are to be interpreted as defined in \"Key words for\n   use in RFCs to Indicate Requirement Levels\" [RFC2119].\n\n\n\n\n\nResnick, et al.              Standards Track                    [Page 2]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n   The formal syntax uses the Augmented Backus-Naur Form (ABNF)\n   [RFC5234] notation.  In addition, rules from IMAP [RFC3501], UTF-8\n   [RFC3629], Extensions to IMAP ABNF [RFC4466], and IMAP \"LIST\" command\n   extensions [RFC5258] are also referenced.  This document assumes that\n   the reader will have a reasonably good understanding of these RFCs.\n\n3.  \"UTF8=ACCEPT\" IMAP Capability and UTF-8 in IMAP Quoted-Strings\n\n   The \"UTF8=ACCEPT\" capability indicates that the server supports the\n   ability to open mailboxes containing internationalized messages with\n   the \"SELECT\" and \"EXAMINE\" commands, and the server can provide UTF-8\n   responses to the \"LIST\" and \"LSUB\" commands.  This capability also\n   affects other IMAP extensions that can return mailbox names or their\n   prefixes, such as NAMESPACE [RFC2342] and ACL [RFC4314].\n\n   The \"UTF8=ONLY\" capability, described in Section 6, implies the\n   \"UTF8=ACCEPT\" capability.  A server is said to support \"UTF8=ACCEPT\"\n   if it advertises either \"UTF8=ACCEPT\" or \"UTF8=ONLY\".\n\n   A client MUST use the \"ENABLE\" command [RFC5161] with the\n   \"UTF8=ACCEPT\" option (defined in Section 4 below) to indicate to the\n   server that the client accepts UTF-8 in quoted-strings and supports\n   the \"UTF8=ACCEPT\" extension.  The \"ENABLE UTF8=ACCEPT\" command is\n   only valid in the authenticated state.\n\n   The IMAP base specification [RFC3501] forbids the use of 8-bit\n   characters in atoms or quoted-strings.  Thus, a UTF-8 string can only\n   be sent as a literal.  This can be inconvenient from a coding\n   standpoint, and unless the server offers IMAP non-synchronizing\n   literals [RFC2088], this requires an extra round trip for each UTF-8\n   string sent by the client.  When the IMAP server supports\n   \"UTF8=ACCEPT\", it supports UTF-8 in quoted-strings with the following\n   syntax:\n\n            quoted        =/ DQUOTE *uQUOTED-CHAR DQUOTE\n                   ; QUOTED-CHAR is not modified, as it will affect\n                   ; other RFC 3501 ABNF non-terminals.\n\n            uQUOTED-CHAR  = QUOTED-CHAR / UTF8-2 / UTF8-3 / UTF8-4\n\n            UTF8-2        =   <Defined in Section 4 of RFC 3629>\n\n            UTF8-3        =   <Defined in Section 4 of RFC 3629>\n\n            UTF8-4        =   <Defined in Section 4 of RFC 3629>\n\n   When this extended quoting mechanism is used by the client, the\n   server MUST reject, with a \"BAD\" response, any octet sequences with\n\n\n\nResnick, et al.              Standards Track                    [Page 3]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n   the high bit set that fail to comply with the formal syntax\n   requirements of UTF-8 [RFC3629].  The IMAP server MUST NOT send UTF-8\n   in quoted-strings to the client unless the client has indicated\n   support for that syntax by using the \"ENABLE UTF8=ACCEPT\" command.\n\n   If the server supports \"UTF8=ACCEPT\", the client MAY use extended\n   quoted syntax with any IMAP argument that permits a string (including\n   astring and nstring).  However, if characters outside the US-ASCII\n   repertoire are used in an inappropriate place, the results would be\n   the same as if other syntactically valid but semantically invalid\n   characters were used.  Specific cases where UTF-8 characters are\n   permitted or not permitted are described in the following paragraphs.\n\n   All IMAP servers that support \"UTF8=ACCEPT\" SHOULD accept UTF-8 in\n   mailbox names, and those that also support the Mailbox International\n   Naming Convention described in RFC 3501, Section 5.1.3, MUST accept\n   UTF8-quoted mailbox names and convert them to the appropriate\n   internal format.  Mailbox names MUST comply with the Net-Unicode\n   Definition ([RFC5198], Section 2) with the specific exception that\n   they MUST NOT contain control characters (U+0000-U+001F and U+0080-U+\n   009F), a delete character (U+007F), a line separator (U+2028), or a\n   paragraph separator (U+2029).\n\n   Once an IMAP client has enabled UTF-8 support with the \"ENABLE\n   UTF8=ACCEPT\" command, it MUST NOT issue a \"SEARCH\" command that\n   contains a charset specification.  If an IMAP server receives such a\n   \"SEARCH\" command in that situation, it SHOULD reject the command with\n   a \"BAD\" response (due to the conflicting charset labels).\n\n4.  IMAP UTF8 \"APPEND\" Data Extension\n\n   If the server supports \"UTF8=ACCEPT\", then the server accepts UTF-8\n   headers in the \"APPEND\" command message argument.  A client that\n   sends a message with UTF-8 headers to the server MUST send them using\n   the \"UTF8\" data extension to the \"APPEND\" command.  If the server\n   also advertises the \"CATENATE\" capability [RFC4469], the client can\n   use the same data extension to include such a message in a catenated\n   message part.  The ABNF for the \"APPEND\" data extension and\n   \"CATENATE\" extension follows:\n\n        utf8-literal   = \"UTF8\" SP \"(\" literal8 \")\"\n\n        literal8       = <Defined in RFC 4466>\n\n        append-data    =/ utf8-literal\n\n        cat-part       =/ utf8-literal\n\n\n\n\nResnick, et al.              Standards Track                    [Page 4]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n   If an IMAP server supports \"UTF8=ACCEPT\" and the IMAP client has not\n   issued the \"ENABLE UTF8=ACCEPT\" command, the server MUST reject, with\n   a \"NO\" response, an \"APPEND\" command that includes any 8-bit\n   character in message header fields.\n\n5.  \"LOGIN\" Command and UTF-8\n\n   This specification does not extend the IMAP \"LOGIN\" command [RFC3501]\n   to support UTF-8 usernames and passwords.  Whenever a client needs to\n   use UTF-8 usernames or passwords, it MUST use the IMAP \"AUTHENTICATE\"\n   command, which is already capable of passing UTF-8 usernames and\n   credentials.\n\n   Although using the IMAP \"AUTHENTICATE\" command in this way makes it\n   syntactically legal to have a UTF-8 username or password, there is no\n   guarantee that the user provisioning system utilized by the IMAP\n   server will allow such identities.  This is an implementation\n   decision and may depend on what identity system the IMAP server is\n   configured to use.\n\n6.  \"UTF8=ONLY\" Capability\n\n   The \"UTF8=ONLY\" capability indicates that the server supports\n   \"UTF8=ACCEPT\" (see Section 4) and that it requires support for UTF-8\n   from clients.  In particular, this means that the server will send\n   UTF-8 in quoted-strings, and it will not accept the older\n   international mailbox name convention (modified UTF-7 [RFC3501]).\n   Because these are incompatible changes to IMAP, explicit server\n   announcement and client confirmation is necessary: clients MUST use\n   the \"ENABLE UTF8=ACCEPT\" command before using this server.  A server\n   that advertises \"UTF8=ONLY\" will reject, with a \"NO [CANNOT]\"\n   response [RFC5530], any command that might require UTF-8 support and\n   is not preceded by an \"ENABLE UTF8=ACCEPT\" command.\n\n   IMAP clients that find support for a server that announces\n   \"UTF8=ONLY\" problematic are encouraged to at least detect the\n   announcement and provide an informative error message to the\n   end-user.\n\n   Because the \"UTF8=ONLY\" server capability includes support for\n   \"UTF8=ACCEPT\", the capability string will include, at most, one of\n   those and never both.  For the client, \"ENABLE UTF8=ACCEPT\" is always\n   used -- never \"ENABLE UTF8=ONLY\".\n\n\n\n\n\n\n\n\nResnick, et al.              Standards Track                    [Page 5]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n7.   Dealing with Legacy Clients\n\n   In most situations, it will be difficult or impossible for the\n   implementer or operator of an IMAP (or POP) server to know whether\n   all of the clients that might access it, or the associated mail store\n   more generally, will be able to support the facilities defined in\n   this document.  In almost all cases, servers that conform to this\n   specification will have to be prepared to deal with clients that do\n   not enable the relevant capabilities.  Unfortunately, there is no\n   completely satisfactory way to do so other than for systems that wish\n   to receive email that requires SMTPUTF8 capabilities to be sure that\n   all components of those systems -- including IMAP and other clients\n   selected by users -- are upgraded appropriately.\n\n   When a message that requires SMTPUTF8 is encountered and the client\n   does not enable UTF-8 capability, choices available to the server\n   include hiding the problematic message(s), creating in-band or\n   out-of-band notifications or error messages, or somehow trying to\n   create a surrogate of the message with the intention of providing\n   useful information to that client about what has occurred.  Such\n   surrogate messages cannot be actual substitutes for the original\n   message: they will almost always be impossible to reply to (either at\n   all or without loss of information) and the new header fields or\n   specialized constructs for server-client communications may go beyond\n   the requirements of current email specifications (e.g., [RFC5322]).\n   Consequently, such messages may confuse some legacy mail user agents\n   (including IMAP clients) or not provide expected information to\n   users.  There are also trade-offs in constructing surrogates of the\n   original message between accepting complexity and additional\n   computation costs in order to try to preserve as much information as\n   possible (for example, in \"Post-Delivery Message Downgrading for\n   Internationalized Email Messages\" [RFC6857]) and trying to minimize\n   those costs while still providing useful information (for example, in\n   \"Simplified POP and IMAP Downgrading for Internationalized Email\"\n   [RFC6858]).\n\n   Implementations that choose to perform downgrading SHOULD use one of\n   the standardized algorithms provided in RFC 6857 or RFC 6858.\n   Getting downgrade algorithms right, and minimizing the risk of\n   operational problems and harm to the email system, is tricky and\n   requires careful engineering.  These two algorithms are well\n   understood and carefully designed.\n\n   Because such messages are really surrogates of the original ones, not\n   really \"downgraded\" ones (although that terminology is often used for\n   convenience), they inevitably have relationships to the originals\n   that the IMAP specification [RFC3501] did not anticipate.  This\n   brings up two concerns in particular: First, digital signatures\n\n\n\nResnick, et al.              Standards Track                    [Page 6]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n   computed over and intended for the original message will often not be\n   applicable to the surrogate message, and will often fail signature\n   verification.  (It will be possible for some digital signatures to be\n   verified, if they cover only parts of the original message that are\n   not affected in the creation of the surrogate.)  Second, servers that\n   may be accessed by the same user with different clients or methods\n   (e.g., POP or webmail systems in addition to IMAP or IMAP clients\n   with different capabilities) will need to exert extreme care to be\n   sure that UIDVALIDITY [RFC3501] behaves as the user would expect.\n   Those issues may be especially sensitive if the server caches the\n   surrogate message or computes and stores it when the message arrives\n   with the intent of making either form available depending on client\n   capabilities.  Additionally, in order to cope with the case when a\n   server compliant with this extension returns the same UIDVALIDITY to\n   both legacy and \"UTF8=ACCEPT\"-aware clients, a client upgraded from\n   being non-\"UTF8=ACCEPT\"-aware MUST discard its cache of messages\n   downloaded from the server.\n\n   The best (or \"least bad\") approach for any given environment will\n   depend on local conditions, local assumptions about user behavior,\n   the degree of control the server operator has over client usage and\n   upgrading, the options that are actually available, and so on.  It is\n   impossible, at least at the time of publication of this\n   specification, to give good advice that will apply to all situations,\n   or even particular profiles of situations, other than \"upgrade legacy\n   clients as soon as possible\".\n\n8.  Issues with UTF-8 Header Mailstore\n\n   When an IMAP server uses a mailbox format that supports UTF-8 headers\n   and it permits selection or examination of that mailbox without\n   issuing \"ENABLE UTF8=ACCEPT\" first, it is the responsibility of the\n   server to comply with the IMAP base specification [RFC3501] and the\n   Internet Message Format [RFC5322] with respect to all header\n   information transmitted over the wire.  The issue of handling\n   messages containing non-ASCII characters in legacy environments is\n   discussed in Section 7.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick, et al.              Standards Track                    [Page 7]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n9.  IANA Considerations\n\n   This document redefines two capabilities (\"UTF8=ACCEPT\" and\n   \"UTF8=ONLY\") in the \"IMAP 4 Capabilities\" registry [RFC3501].  Three\n   other capabilities that were described in the experimental\n   predecessor to this document (\"UTF8=ALL\", \"UTF8=APPEND\", \"UTF8=USER\")\n   are now OBSOLETE.  IANA has updated the registry as follows:\n\n    OLD:\n      +--------------+-----------------+\n      | UTF8=ACCEPT  |  [RFC5738]      |\n      | UTF8=ALL     |  [RFC5738]      |\n      | UTF8=APPEND  |  [RFC5738]      |\n      | UTF8=ONLY    |  [RFC5738]      |\n      | UTF8=USER    |  [RFC5738]      |\n      +--------------+-----------------+\n\n\n    NEW:\n      +------------------------+---------------------+\n      | UTF8=ACCEPT            |  [RFC6855]          |\n      | UTF8=ALL (OBSOLETE)    |  [RFC5738] [RFC6855]|\n      | UTF8=APPEND (OBSOLETE) |  [RFC5738] [RFC6855]|\n      | UTF8=ONLY              |  [RFC6855]          |\n      | UTF8=USER (OBSOLETE)   |  [RFC5738] [RFC6855]|\n      +------------------------+---------------------+\n\n10.  Security Considerations\n\n   The security considerations of UTF-8 [RFC3629] and SASLprep [RFC4013]\n   apply to this specification, particularly with respect to use of\n   UTF-8 in usernames and passwords.  Otherwise, this is not believed to\n   alter the security considerations of IMAP.\n\n   Special considerations, some of them with security implications,\n   occur if a server that conforms to this specification is accessed by\n   a client that does not, as well as in some more complex situations in\n   which a given message is accessed by multiple clients that might use\n   different protocols and/or support different capabilities.  Those\n   issues are discussed in Section 7.\n\n\n\n\n\n\n\n\n\n\n\nResnick, et al.              Standards Track                    [Page 8]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n11.  References\n\n11.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, November 2003.\n\n   [RFC4013]  Zeilenga, K., \"SASLprep: Stringprep Profile for User Names\n              and Passwords\", RFC 4013, February 2005.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n   [RFC4469]  Resnick, P., \"Internet Message Access Protocol (IMAP)\n              CATENATE Extension\", RFC 4469, April 2006.\n\n   [RFC5161]  Gulbrandsen, A. and A. Melnikov, \"The IMAP ENABLE\n              Extension\", RFC 5161, March 2008.\n\n   [RFC5198]  Klensin, J. and M. Padlipsky, \"Unicode Format for Network\n              Interchange\", RFC 5198, March 2008.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [RFC5258]  Leiba, B. and A. Melnikov, \"Internet Message Access\n              Protocol version 4 - LIST Command Extensions\", RFC 5258,\n              June 2008.\n\n   [RFC5322]  Resnick, P., Ed., \"Internet Message Format\", RFC 5322,\n              October 2008.\n\n   [RFC6530]  Klensin, J. and Y. Ko, \"Overview and Framework for\n              Internationalized Email\", RFC 6530, February 2012.\n\n   [RFC6532]  Yang, A., Steele, S., and N. Freed, \"Internationalized\n              Email Headers\", RFC 6532, February 2012.\n\n   [RFC6857]  Fujiwara, K., \"Post-Delivery Message Downgrading for\n              Internationalized Email Messages\", RFC 6857, March 2013.\n\n\n\n\n\nResnick, et al.              Standards Track                    [Page 9]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\n   [RFC6858]  Gulbrandsen, A., \"Simplified POP and IMAP Downgrading for\n              Internationalized Email\", RFC 6858, March 2013.\n\n11.2.  Informative References\n\n   [RFC2088]  Myers, J., \"IMAP4 non-synchronizing literals\", RFC 2088,\n              January 1997.\n\n   [RFC2342]  Gahrns, M. and C. Newman, \"IMAP4 Namespace\", RFC 2342,\n              May 1998.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [RFC5530]  Gulbrandsen, A., \"IMAP Response Codes\", RFC 5530,\n              May 2009.\n\n   [RFC5738]  Resnick, P. and C. Newman, \"IMAP Support for UTF-8\",\n              RFC 5738, March 2010.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick, et al.              Standards Track                   [Page 10]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\nAppendix A.  Design Rationale\n\n   This non-normative section discusses the reasons behind some of the\n   design choices in this specification.\n\n   The \"UTF8=ONLY\" mechanism simplifies diagnosis of interoperability\n   problems when legacy support goes away.  In the situation where\n   backwards compatibility is not working anyway, the non-conforming\n   \"just-send-UTF-8 IMAP\" has the advantage that it might work with some\n   legacy clients.  However, the difficulty of diagnosing\n   interoperability problems caused by a \"just-send-UTF-8 IMAP\"\n   mechanism is the reason the \"UTF8=ONLY\" capability mechanism was\n   chosen.\n\nAppendix B.  Acknowledgments\n\n   The authors wish to thank the participants of the EAI working group\n   for their contributions to this document, with particular thanks to\n   Harald Alvestrand, David Black, Randall Gellens, Arnt Gulbrandsen,\n   Kari Hurtta, John Klensin, Xiaodong Lee, Charles Lindsey, Alexey\n   Melnikov, Subramanian Moonesamy, Shawn Steele, Daniel Taharlev, and\n   Joseph Yee for their specific contributions to the discussion.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick, et al.              Standards Track                   [Page 11]\n\f\nRFC 6855                 IMAP Support for UTF-8               March 2013\n\n\nAuthors' Addresses\n\n   Pete Resnick (editor)\n   Qualcomm Incorporated\n   5775 Morehouse Drive\n   San Diego, CA  92121-1714\n   USA\n\n   Phone: +1 858 651 4478\n   EMail: presnick@qti.qualcomm.com\n\n\n   Chris Newman (editor)\n   Oracle\n   800 Royal Oaks\n   Monrovia, CA 91016\n   USA\n\n   Phone:\n   EMail: chris.newman@oracle.com\n\n\n   Sean Shen (editor)\n   CNNIC\n   No.4 South 4th Zhongguancun Street\n   Beijing, 100190\n   China\n\n   Phone: +86 10-58813038\n   EMail: shenshuo@cnnic.cn\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nResnick, et al.              Standards Track                   [Page 12]\n\f\n"
  },
  {
    "path": "rfc/rfc6856.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                        R. Gellens\nRequest for Comments: 6856                         QUALCOMM Incorporated\nObsoletes: 5721                                                C. Newman\nCategory: Standards Track                                         Oracle\nISSN: 2070-1721                                                   J. Yao\n                                                                   CNNIC\n                                                             K. Fujiwara\n                                                                    JPRS\n                                                              March 2013\n\n\n        Post Office Protocol Version 3 (POP3) Support for UTF-8\n\nAbstract\n\n   This specification extends the Post Office Protocol version 3 (POP3)\n   to support international strings encoded in UTF-8 in usernames,\n   passwords, mail addresses, message headers, and protocol-level text\n   strings.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc6856.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et al.              Standards Track                    [Page 1]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\nCopyright Notice\n\n   Copyright (c) 2013 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\nTable of Contents\n\n   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3\n     1.1.  Conventions Used in This Document  . . . . . . . . . . . .  3\n   2.  \"UTF8\" Capability  . . . . . . . . . . . . . . . . . . . . . .  4\n     2.1.  The \"UTF8\" Command . . . . . . . . . . . . . . . . . . . .  5\n     2.2.  USER Argument to \"UTF8\" Capability . . . . . . . . . . . .  6\n   3.  \"LANG\" Capability  . . . . . . . . . . . . . . . . . . . . . .  7\n     3.1.  Definition . . . . . . . . . . . . . . . . . . . . . . . .  7\n     3.2.  Discussion . . . . . . . . . . . . . . . . . . . . . . . .  7\n     3.3.  Examples . . . . . . . . . . . . . . . . . . . . . . . . .  8\n   4.  Non-ASCII Character Maildrops  . . . . . . . . . . . . . . . .  9\n   5.  \"UTF8\" Response Code . . . . . . . . . . . . . . . . . . . . . 10\n   6.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 10\n   7.  Security Considerations  . . . . . . . . . . . . . . . . . . . 10\n   8.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 11\n     8.1.  Normative References . . . . . . . . . . . . . . . . . . . 11\n     8.2.  Informative References . . . . . . . . . . . . . . . . . . 12\n   Appendix A.  Design Rationale  . . . . . . . . . . . . . . . . . . 13\n   Appendix B.  Acknowledgments . . . . . . . . . . . . . . . . . . . 13\n\n\n\n\nGellens, et al.              Standards Track                    [Page 2]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n1.  Introduction\n\n   This document forms part of the Email Address Internationalization\n   protocols described in the Email Address Internationalization\n   Framework document [RFC6530].  As part of the overall Email Address\n   Internationalization work, email messages can be transmitted and\n   delivered containing a Unicode string encoded in UTF-8 in the header\n   and/or body, and maildrops that are accessed using POP3 [RFC1939]\n   might natively store Unicode characters.\n\n   This specification extends POP3 using the POP3 extension mechanism\n   [RFC2449] to permit un-encoded UTF-8 [RFC3629] in headers and bodies\n   (e.g., transferred using 8-bit content-transfer-encoding) as\n   described in \"Internationalized Email Headers\" [RFC6532].  It also\n   adds a mechanism to support login names and passwords containing a\n   UTF-8 string (see Section 1.1 below), a mechanism to support UTF-8\n   strings in protocol-level response strings, and the ability to\n   negotiate a language for such response strings.\n\n   This specification also adds a new response code to indicate that a\n   message was not delivered because it required UTF-8 mode (as\n   discussed in Section 2) and the server was unable or unwilling to\n   create and deliver a surrogate form of the message as discussed in\n   Section 7 of \"IMAP Support for UTF-8\" [RFC6855].\n\n   This specification replaces an earlier, experimental, approach to the\n   same problem [RFC5721].\n\n1.1.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in \"Key words for use in\n   RFCs to Indicate Requirement Levels\" [RFC2119].\n\n   The terms \"UTF-8 string\" or \"UTF-8 character\" are used to refer to\n   Unicode characters, which may or may not be members of the ASCII\n   repertoire, encoded in UTF-8 [RFC3629], a standard Unicode encoding\n   form.  All other specialized terms used in this specification are\n   defined in the Email Address Internationalization framework document.\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.\n\n\n\n\n\nGellens, et al.              Standards Track                    [Page 3]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n   Note that examples always use ASCII characters due to limitations of\n   the RFC format; otherwise, some examples for the \"LANG\" command would\n   have appeared incorrectly.\n\n2.  \"UTF8\" Capability\n\n   This specification adds a new POP3 Extension [RFC2449] capability\n   response tag and command to specify support for header field\n   information outside the ASCII repertoire.  The capability tag and new\n   command and functionality are described below.\n\n   CAPA tag:\n      UTF8\n\n   Arguments with CAPA tag:\n      USER\n\n   Added Commands:\n      UTF8\n\n   Standard commands affected:\n      USER, PASS, APOP, LIST, TOP, RETR\n\n   Announced states / possible differences:\n      both / no\n\n   Commands valid in states:\n      AUTHORIZATION\n\n   Specification reference:\n      this document\n\n   Discussion:\n\n   This capability adds the \"UTF8\" command to POP3.  The \"UTF8\" command\n   switches the session from the ASCII-only mode of POP3 [RFC1939] to\n   UTF-8 mode.  The UTF-8 mode means that all messages transmitted\n   between servers and clients are UTF-8 strings, and both servers and\n   clients can send and accept UTF-8 strings.\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et al.              Standards Track                    [Page 4]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n2.1.  The \"UTF8\" Command\n\n   The \"UTF8\" command enables UTF-8 mode.  The \"UTF8\" command has no\n   parameters.\n\n   UTF-8 mode has no effect on messages in an ASCII-only maildrop.\n   Messages in native Unicode maildrops can be encoded in UTF-8 using\n   internationalized headers [RFC6532], in 8bit\n   content-transfer-encoding (see Section 2.8 of MIME [RFC2045]), in\n   ASCII, or in any combination of these options.  In UTF-8 mode, if the\n   character encoding format of maildrops is UTF-8 or ASCII, the\n   messages are sent to the client as is; if the character encoding\n   format of maildrops is a format other than UTF-8 or ASCII, the\n   messages' encoding format SHOULD be converted to be UTF-8 before they\n   are sent to the client.  When UTF-8 mode has not been enabled,\n   character strings outside the ASCII repertoire MUST NOT be sent to\n   the client as is.  If a client requests a UTF-8 message when UTF-8\n   mode is not enabled, the server MUST either send the client a\n   surrogate message that complies with unextended POP and Internet Mail\n   Format without UTF-8 mode support, or fail the request with an -ERR\n   response.  See Section 7 of \"IMAP Support for UTF-8\" [RFC6855] for\n   information about creating a surrogate message and for a discussion\n   of potential issues.  Section 5 of this document discusses \"UTF8\"\n   response codes.  The server MAY respond to the \"UTF8\" command with an\n   -ERR response.\n\n   Note that even in UTF-8 mode, MIME binary content-transfer-encoding\n   as defined in Section 6.2 of MIME [RFC2045] is still not permitted.\n   MIME 8bit content-transfer-encoding (8BITMIME) [RFC6152] is obviously\n   allowed.\n\n   The octet count (size) of a message reported in a response to the\n   \"LIST\" command SHOULD match the actual number of octets sent in a\n   \"RETR\" response (not counting byte-stuffing).  Sizes reported\n   elsewhere, such as in \"STAT\" responses and non-standardized,\n   free-form text in positive status indicators (following \"+OK\") need\n   not be accurate, but it is preferable if they are.\n\n   Normal operation for maildrops that natively support non-ASCII\n   characters will be for both servers and clients to support the\n   extension discussed in this specification.  Upgrading both clients\n   and servers is the only fully satisfactory way to support the\n   capabilities offered by the \"UTF8\" extension and SMTPUTF8 mail more\n   generally.  Servers must, however, anticipate the possibility of a\n   client attempting to access a message that requires this extension\n   without having issued the \"UTF8\" command.  There are no completely\n   satisfactory responses for this case other than upgrading the client\n   to support this specification.  One solution, unsatisfactory because\n\n\n\nGellens, et al.              Standards Track                    [Page 5]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n   the user may be confused by being able to access the message through\n   some means and not others, is that a server MAY choose to reject the\n   command to retrieve the message as discussed in Section 5.  Other\n   alternatives, including the possibility of creating and delivering a\n   surrogate form of the message, are discussed in Section 7 of \"IMAP\n   Support for UTF-8\" [RFC6855].\n\n   Clients MUST NOT issue the \"STLS\" command [RFC2595] after issuing\n   UTF8; servers MAY (but are not required to) enforce this by rejecting\n   with an -ERR response an \"STLS\" command issued subsequent to a\n   successful \"UTF8\" command.  (Because this is a protocol error as\n   opposed to a failure based on conditions, an extended response code\n   [RFC2449] is not specified.)\n\n2.2.  USER Argument to \"UTF8\" Capability\n\n   If the USER argument is included with this capability, it indicates\n   that the server accepts UTF-8 usernames and passwords.\n\n   Servers that include the USER argument in the \"UTF8\" capability\n   response SHOULD apply SASLprep [RFC4013] or one of its Standards\n   Track successors to the arguments of the \"USER\" and \"PASS\" commands.\n\n   A client or server that supports APOP and permits UTF-8 in usernames\n   or passwords MUST apply SASLprep or one of its Standards Track\n   successors to the username and password used to compute the APOP\n   digest.\n\n   When applying SASLprep, servers MUST reject UTF-8 usernames or\n   passwords that contain a UTF-8 character listed in Section 2.3 of\n   SASLprep.  When applying SASLprep to the USER argument, the PASS\n   argument, or the APOP username argument, a compliant server or client\n   MUST treat them as a query string [RFC3454].  When applying SASLprep\n   to the APOP password argument, a compliant server or client MUST\n   treat them as a stored string [RFC3454].\n\n   If the server includes the USER argument in the UTF8 capability\n   response, the client MAY use UTF-8 characters with a \"USER\", \"PASS\",\n   or \"APOP\" command; the client MAY do so before issuing the \"UTF8\"\n   command.  Clients MUST NOT use UTF-8 characters when authenticating\n   if the server did not include the USER argument in the UTF8\n   capability response.\n\n   The server MUST reject UTF-8 usernames or passwords that fail to\n   comply with the formal syntax in UTF-8 [RFC3629].\n\n   Use of UTF-8 strings in the \"AUTH\" command is governed by the POP3\n   SASL [RFC5034] mechanism.\n\n\n\nGellens, et al.              Standards Track                    [Page 6]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n3.  \"LANG\" Capability\n\n   This document adds a new POP3 extension [RFC2449] capability response\n   tag to indicate support for a new command: \"LANG\".\n\n3.1.  Definition\n\n   The capability tag and new command are described below.\n\n   CAPA tag:\n      LANG\n\n   Arguments with CAPA tag:\n      none\n\n   Added Commands:\n      LANG\n\n   Standard commands affected:\n      All\n\n   Announced states / possible differences:\n      both / no\n\n   Commands valid in states:\n      AUTHORIZATION, TRANSACTION\n\n   Specification reference:\n      this document\n\n3.2.  Discussion\n\n   POP3 allows most +OK and -ERR server responses to include human-\n   readable text that, in some cases, might be presented to the user.\n   But that text is limited to ASCII by the POP3 specification\n   [RFC1939].  The \"LANG\" capability and command permit a POP3 client to\n   negotiate which language the server uses when sending human-readable\n   text.\n\n   The \"LANG\" command requests that human-readable text included in all\n   subsequent +OK and -ERR responses be localized to a language matching\n   the language range argument (the \"basic language range\" as described\n   by the \"Matching of Language Tags\" [RFC4647]).  If the command\n   succeeds, the server returns a +OK response followed by a single\n   space, the exact language tag selected, and another space.  Human-\n   readable text in the appropriate language then appears in the rest of\n   the line.  This, and subsequent protocol-level human-readable text,\n   is encoded in the UTF-8 charset.\n\n\n\nGellens, et al.              Standards Track                    [Page 7]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n   If the command fails, the server returns an -ERR response and\n   subsequent human-readable response text continues to use the language\n   that was previously used.\n\n   If the client issues a \"LANG\" command with the special \"*\" language\n   range argument, it indicates a request to use a language designated\n   as preferred by the server administrator.  The preferred language MAY\n   vary based on the currently active user.\n\n   If no argument is given and the POP3 server issues a positive\n   response, that response will usually consist of multiple lines.\n   After the initial +OK, for each language tag the server supports, the\n   POP3 server responds with a line for that language.  This line is\n   called a \"language listing\".\n\n   In order to simplify parsing, all POP3 servers are required to use a\n   certain format for language listings.  A language listing consists of\n   the language tag [RFC5646] of the message, optionally followed by a\n   single space and a human-readable description of the language in the\n   language itself, using the UTF-8 charset.  There is no specific order\n   to the listing of languages; the order may depend on configuration or\n   implementation.\n\n3.3.  Examples\n\n   Examples for \"LANG\" capability usage are shown below.\n\n      Note that some examples do not include the correct character\n      accents due to limitations of the RFC format.\n\n      C: USER karen\n      S: +OK Hello, karen\n      C: PASS password\n      S: +OK karen's maildrop contains 2 messages (320 octets)\n\n      Client requests deprecated MUL language [ISO639-2].  Server\n      replies with -ERR response.\n\n      C: LANG MUL\n      S: -ERR invalid language MUL\n\n\n\n\n\n\n\n\n\n\n\nGellens, et al.              Standards Track                    [Page 8]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n      A LANG command with no parameters is a request for\n      a language listing.\n\n      C: LANG\n      S: +OK Language listing follows:\n      S: en English\n      S: en-boont English Boontling dialect\n      S: de Deutsch\n      S: it Italiano\n      S: es Espanol\n      S: sv Svenska\n      S: .\n\n      A request for a language listing might fail.\n\n      C: LANG\n      S: -ERR Server is unable to list languages\n\n      Once the client selects the language, all responses will be in\n      that language, starting with the response to the \"LANG\" command.\n\n      C: LANG es\n      S: +OK es Idioma cambiado\n\n      If a server returns an -ERR response to a \"LANG\" command\n      that specifies a primary language, the current language\n      for responses remains in effect.\n\n      C: LANG uga\n      S: -ERR es Idioma <<UGA>> no es conocido\n\n      C: LANG sv\n      S: +OK sv Kommandot \"LANG\" lyckades\n\n      C: LANG *\n      S: +OK es Idioma cambiado\n\n4.  Non-ASCII Character Maildrops\n\n   When a POP3 server uses a native non-ASCII character maildrop, it is\n   the responsibility of the server to comply with the POP3 base\n   specification [RFC1939] and Internet Message Format [RFC5322] when\n   not in UTF-8 mode.  When the server is not in UTF-8 mode and the\n   message requires that mode, requests to download the message MAY be\n   rejected (as specified in the next section) or the various\n   alternatives outlined in Section 2.1 above, including creation and\n   delivery of surrogates for the original message, MAY be considered.\n\n\n\n\nGellens, et al.              Standards Track                    [Page 9]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n5.  \"UTF8\" Response Code\n\n   Per \"POP3 Extension Mechanism\" [RFC2449], this document adds a new\n   response code: UTF8, described below.\n\n   Complete response code:\n      UTF8\n\n   Valid for responses:\n      -ERR\n\n   Valid for commands:\n      LIST, TOP, RETR\n\n   Response code meaning and expected client behavior:\n      The \"UTF8\" response code indicates that a failure is due to a\n      request for message content that contains a UTF-8 string when the\n      client is not in UTF-8 mode.\n\n      The client MAY reissue the command after entering UTF-8 mode.\n\n6.  IANA Considerations\n\n   Sections 2 and 3 of this specification update two capabilities\n   (\"UTF8\" and \"LANG\") in the POP3 capability registry [RFC2449].\n\n   Section 5 of this specification adds one new response code (\"UTF8\")\n   to the POP3 response codes registry [RFC2449].\n\n7.  Security Considerations\n\n   The security considerations of UTF-8 [RFC3629], SASLprep [RFC4013],\n   and the Unicode Format for Network Interchange [RFC5198] apply to\n   this specification, particularly with respect to use of UTF-8 strings\n   in usernames and passwords.\n\n   The \"LANG *\" command might reveal the existence and preferred\n   language of a user to an active attacker probing the system if the\n   active language changes in response to the \"USER\", \"PASS\", or \"APOP\"\n   commands prior to validating the user's credentials.  Servers are\n   strongly advised to implement a configuration to prevent this\n   exposure.\n\n   It is possible for a man-in-the-middle attacker to insert a \"LANG\"\n   command in the command stream, thus, making protocol-level diagnostic\n   responses unintelligible to the user.  A mechanism to protect the\n\n\n\n\n\nGellens, et al.              Standards Track                   [Page 10]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n   integrity of the session can be used to defeat such attacks.  For\n   example, a client can issue the \"STLS\" command [RFC2595] before\n   issuing the \"LANG\" command.\n\n   As with other internationalization upgrades, modifications to server\n   authentication code (in this case, to support non-ASCII strings) need\n   to be done with care to avoid introducing vulnerabilities (for\n   example, in string parsing or matching).  This is particularly\n   important if the native databases or mailstore of the operating\n   system use some character set or encoding other than Unicode in\n   UTF-8.\n\n8.  References\n\n8.1.  Normative References\n\n   [RFC1939]   Myers, J. and M. Rose, \"Post Office Protocol - Version\n               3\", STD 53, RFC 1939, May 1996.\n\n   [RFC2045]   Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n               Extensions (MIME) Part One: Format of Internet Message\n               Bodies\", RFC 2045, November 1996.\n\n   [RFC2047]   Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n               Part Three: Message Header Extensions for Non-ASCII\n               Text\", RFC 2047, November 1996.\n\n   [RFC2119]   Bradner, S., \"Key words for use in RFCs to Indicate\n               Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2449]   Gellens, R., Newman, C., and L. Lundblade, \"POP3\n               Extension Mechanism\", RFC 2449, November 1998.\n\n   [RFC3454]   Hoffman, P. and M. Blanchet, \"Preparation of\n               Internationalized Strings (\"stringprep\")\", RFC 3454,\n               December 2002.\n\n   [RFC3629]   Yergeau, F., \"UTF-8, a transformation format of ISO\n               10646\", STD 63, RFC 3629, November 2003.\n\n   [RFC4013]   Zeilenga, K., \"SASLprep: Stringprep Profile for User\n               Names and Passwords\", RFC 4013, February 2005.\n\n   [RFC4647]   Phillips, A. and M. Davis, \"Matching of Language Tags\",\n               BCP 47, RFC 4647, September 2006.\n\n   [RFC5198]   Klensin, J. and M. Padlipsky, \"Unicode Format for Network\n               Interchange\", RFC 5198, March 2008.\n\n\n\nGellens, et al.              Standards Track                   [Page 11]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\n   [RFC5322]   Resnick, P., Ed., \"Internet Message Format\", RFC 5322,\n               October 2008.\n\n   [RFC5646]   Phillips, A. and M. Davis, \"Tags for Identifying\n               Languages\", BCP 47, RFC 5646, September 2009.\n\n   [RFC6152]   Klensin, J., Freed, N., Rose, M., and D. Crocker, \"SMTP\n               Service Extension for 8-bit MIME Transport\", STD 71,\n               RFC 6152, March 2011.\n\n   [RFC6530]   Klensin, J. and Y. Ko, \"Overview and Framework for\n               Internationalized Email\", RFC 6530, February 2012.\n\n   [RFC6532]   Yang, A., Steele, S., and N. Freed, \"Internationalized\n               Email Headers\", RFC 6532, February 2012.\n\n   [RFC6855]   Resnick, P., Newman, C., and S. Shen, \"IMAP Support for\n               UTF-8\", RFC 6855, March 2013.\n\n8.2.  Informative References\n\n   [ISO639-2]  International Organization for Standardization, \"ISO\n               639-2:1998.  Codes for the representation of names of\n               languages -- Part 2: Alpha-3 code\", October 1998.\n\n   [RFC2231]   Freed, N. and K. Moore, \"MIME Parameter Value and Encoded\n               Word Extensions:\n               Character Sets, Languages, and Continuations\", RFC 2231,\n               November 1997.\n\n   [RFC2595]   Newman, C., \"Using TLS with IMAP, POP3 and ACAP\",\n               RFC 2595, June 1999.\n\n   [RFC5034]   Siemborski, R. and A. Menon-Sen, \"The Post Office\n               Protocol (POP3) Simple Authentication and Security Layer\n               (SASL) Authentication Mechanism\", RFC 5034, July 2007.\n\n   [RFC5721]   Gellens, R. and C. Newman, \"POP3 Support for UTF-8\",\n               RFC 5721, February 2010.\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et al.              Standards Track                   [Page 12]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\nAppendix A.  Design Rationale\n\n   This non-normative section discusses the reasons behind some of the\n   design choices in this specification.\n\n   Due to interoperability problems with the MIME Message Header\n   Extensions [RFC2047] and limited deployment of the extended MIME\n   parameter encodings [RFC2231], it is hoped these 7-bit encoding\n   mechanisms can be deprecated in the future when UTF-8 header support\n   becomes prevalent.\n\n   The USER capability (Section 2.2) and hence the upgraded \"USER\"\n   command and additional support for non-ASCII credentials, are\n   optional because the implementation burden of SASLprep [RFC4013] is\n   not well understood, and mandating such support in all cases could\n   negatively impact deployment.\n\nAppendix B.  Acknowledgments\n\n   Thanks to John Klensin, Joseph Yee, Tony Hansen, Alexey Melnikov, and\n   other Email Address Internationalization working group participants\n   who provided helpful suggestions and interesting debate that improved\n   this specification.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et al.              Standards Track                   [Page 13]\n\f\nRFC 6856                 POP3 Support for UTF-8               March 2013\n\n\nAuthors' Addresses\n\n   Randall Gellens\n   QUALCOMM Incorporated\n   5775 Morehouse Drive\n   San Diego, CA  92651\n   USA\n\n   EMail: rg+ietf@qualcomm.com\n\n\n   Chris Newman\n   Oracle\n   800 Royal Oaks\n   Monrovia, CA  91016-6347\n   USA\n\n   EMail: chris.newman@oracle.com\n\n\n   Jiankang YAO\n   CNNIC\n   No.4 South 4th Street, Zhongguancun\n   Beijing\n   China\n\n   Phone: +86 10 58813007\n   EMail: yaojk@cnnic.cn\n\n\n   Kazunori Fujiwara\n   Japan Registry Services Co., Ltd.\n   Chiyoda First Bldg. East 13F, 3-8-1 Nishi-Kanda\n   Tokyo\n   Japan\n\n   Phone: +81 3 5215 8451\n   EMail: fujiwara@jprs.co.jp\n\n\n\n\n\n\n\n\n\n\n\n\n\nGellens, et al.              Standards Track                   [Page 14]\n\f\n"
  },
  {
    "path": "rfc/rfc7162.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                       A. Melnikov\nRequest for Comments: 7162                                     Isode Ltd\nObsoletes: 4551, 5162                                        D. Cridland\nUpdates: 2683                                               Surevine Ltd\nCategory: Standards Track                                       May 2014\nISSN: 2070-1721\n\n\n   IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE)\n             and Quick Mailbox Resynchronization (QRESYNC)\n\nAbstract\n\n   Often, multiple IMAP (RFC 3501) clients need to coordinate changes to\n   a common IMAP mailbox.  Examples include different clients working on\n   behalf of the same user and multiple users accessing shared\n   mailboxes.  These clients need a mechanism to efficiently synchronize\n   state changes for messages within the mailbox.\n\n   Initially defined in RFC 4551, the Conditional Store facility\n   provides a protected update mechanism for message state information\n   and a mechanism for requesting only changes to the message state.\n   This memo updates that mechanism and obsoletes RFC 4551, based on\n   operational experience.\n\n   This document additionally updates another IMAP extension, Quick\n   Resynchronization, which builds on the Conditional STORE extension to\n   provide an IMAP client the ability to fully resynchronize a mailbox\n   as part of the SELECT/EXAMINE command, without the need for\n   additional server-side state or client round trips.  Hence, this memo\n   obsoletes RFC 5162.\n\n   Finally, this document also updates the line-length recommendation in\n   Section 3.2.1.5 of RFC 2683.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc7162.\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 1]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\nCopyright Notice\n\n   Copyright (c) 2014 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 2]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4\n   2.  Requirements Notation . . . . . . . . . . . . . . . . . . . .   5\n   3.  IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . .   5\n     3.1.  CONDSTORE Extension . . . . . . . . . . . . . . . . . . .   5\n       3.1.1.  Advertising Support for CONDSTORE . . . . . . . . . .   8\n       3.1.2.  New OK Untagged Responses for SELECT and EXAMINE  . .   8\n       3.1.3.  STORE and UID STORE Commands  . . . . . . . . . . . .  10\n       3.1.4.  FETCH and UID FETCH Commands  . . . . . . . . . . . .  16\n       3.1.5.  MODSEQ Search Criterion in SEARCH . . . . . . . . . .  19\n       3.1.6.  Modified SEARCH Untagged Response . . . . . . . . . .  20\n       3.1.7.  HIGHESTMODSEQ Status Data Items . . . . . . . . . . .  21\n       3.1.8.  CONDSTORE Parameter to SELECT and EXAMINE . . . . . .  21\n       3.1.9.  Interaction with IMAP SORT and THREAD Extensions  . .  22\n       3.1.10. Interaction with IMAP ESORT and ESEARCH Extensions  .  22\n       3.1.11. Additional Quality-of-Implementation Issues . . . . .  23\n       3.1.12. CONDSTORE Server Implementation Considerations  . . .  23\n     3.2.  QRESYNC Extension . . . . . . . . . . . . . . . . . . . .  24\n       3.2.1.  Impact on CONDSTORE-only Clients  . . . . . . . . . .  25\n       3.2.2.  Advertising Support for QRESYNC . . . . . . . . . . .  25\n       3.2.3.  Use of ENABLE . . . . . . . . . . . . . . . . . . . .  25\n       3.2.4.  Additional Requirements on QRESYNC Servers  . . . . .  26\n       3.2.5.  QRESYNC Parameter to SELECT/EXAMINE . . . . . . . . .  26\n       3.2.6.  VANISHED UID FETCH Modifier . . . . . . . . . . . . .  31\n       3.2.7.  EXPUNGE Command . . . . . . . . . . . . . . . . . . .  32\n       3.2.8.  CLOSE Command . . . . . . . . . . . . . . . . . . . .  33\n       3.2.9.  UID EXPUNGE Command . . . . . . . . . . . . . . . . .  34\n       3.2.10. VANISHED Response . . . . . . . . . . . . . . . . . .  35\n       3.2.11. CLOSED Response Code  . . . . . . . . . . . . . . . .  38\n   4.  Long Command Lines (Update to RFC 2683) . . . . . . . . . . .  39\n   5.  QRESYNC Server Implementation Considerations  . . . . . . . .  39\n     5.1.  Server Implementations That Don't Store Extra State . . .  39\n     5.2.  Server Implementations Storing Minimal State  . . . . . .  40\n     5.3.  Additional State Required on the Server . . . . . . . . .  40\n   6.  Updated Synchronization Sequence  . . . . . . . . . . . . . .  41\n   7.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .  44\n   8.  Security Considerations . . . . . . . . . . . . . . . . . . .  48\n   9.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  48\n   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .  48\n     10.1.  Normative References . . . . . . . . . . . . . . . . . .  48\n     10.2.  Informative References . . . . . . . . . . . . . . . . .  49\n   Appendix A.  Changes since RFC 4551 . . . . . . . . . . . . . . .  50\n   Appendix B.  Changes since RFC 5162 . . . . . . . . . . . . . . .  50\n   Appendix C.  Acknowledgements . . . . . . . . . . . . . . . . . .  51\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 3]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n1.  Introduction\n\n   Often, multiple IMAP [RFC3501] clients need to coordinate changes to\n   a common IMAP mailbox.  Examples include different clients working on\n   behalf of the same user and clients representing multiple users\n   accessing shared mailboxes.  These clients need a mechanism to\n   synchronize state changes for messages within the mailbox.  The\n   Conditional Store (\"CONDSTORE\") facility allows a client to quickly\n   resynchronize mailbox flag changes.\n\n   The Conditional Store facility also provides a protected update\n   mechanism for message state information that can detect and resolve\n   conflicts between multiple writing mail clients.  The mechanism can\n   be used to guarantee that only one client can change the message\n   state at any given time.  For example, this can be used by multiple\n   clients that treat a mailbox as a message queue.\n\n   The Conditional Store facility is provided by associating a\n   modification sequence (mod-sequence) with every IMAP message.  This\n   is updated whenever metadata (such as a message flag) is modified.\n\n   The CONDSTORE extension is described in more detail in Section 3.1.\n\n   The CONDSTORE extension gives a disconnected client the ability to\n   quickly resynchronize IMAP flag changes for previously seen messages.\n   This can be done using the CHANGEDSINCE FETCH modifier once a mailbox\n   is opened.  In order for the client to discover which messages have\n   been expunged, the client still has to issue a UID FETCH or a UID\n   SEARCH command.  The Quick Mailbox Resynchronization (QRESYNC) IMAP\n   extension is an extension to CONDSTORE that allows a reconnecting\n   client to perform full resynchronization, including discovery of\n   expunged messages, in a single round trip.  QRESYNC also introduces a\n   new response, VANISHED, that allows for a more compact representation\n   of a list of expunged messages.\n\n   QRESYNC can be useful for mobile clients that can experience frequent\n   disconnects caused by environmental factors (such as battery life,\n   signal strength, etc.).  Such clients need a way to quickly reconnect\n   to the IMAP server, while minimizing delay experienced by the user as\n   well as the amount of traffic generated by resynchronization.\n\n   By extending the SELECT command to perform the additional\n   resynchronization, this also allows clients to reduce concurrent\n   connections to the IMAP server held purely for the sake of avoiding\n   the resynchronization.\n\n   The QRESYNC extension is described in more detail in Section 3.2.\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 4]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n2.  Requirements Notation\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   In the examples that follow, \"C:\" and \"S:\" indicate lines sent by the\n   client and server, respectively.  If a single \"C:\" or \"S:\" label\n   applies to multiple lines, then the line breaks between those lines\n   are for editorial clarity only and are not part of the actual\n   protocol exchange.  The five characters [...] means that something\n   has been elided.\n\n   Formal syntax is defined using ABNF [RFC5234].\n\n   The term \"metadata\" or \"metadata item\" is used throughout this\n   document.  It refers to any system- or user-defined keyword.  If the\n   server supports the IMAP ANNOTATE-EXPERIMENT-1 extension [RFC5257],\n   then metadata also includes message annotations.  Future documents\n   may extend \"metadata\" to include other dynamic message data.\n\n   Some IMAP mailboxes are private, accessible only to the owning user.\n   Other mailboxes are not, either because the owner has set an Access\n   Control List [RFC4314] that permits access by other users or because\n   it is a shared mailbox.  Let's call a metadata item \"shared\" for the\n   mailbox if any changes to the metadata items are persistent and\n   visible to all other users accessing the mailbox.  Otherwise, the\n   metadata item is called \"private\".  Note that private metadata items\n   are still visible to all sessions accessing the mailbox as the same\n   user.  Also, note that different mailboxes may have different\n   metadata items as shared.\n\n   See Section 3.1 for the definition of a \"CONDSTORE-aware client\" and\n   a \"CONDSTORE enabling command\".\n\n   Understanding of the IMAP message sequence numbers and UIDs (see\n   Section 2.3.1 of [RFC3501]) and the EXPUNGE response (see\n   Section 7.4.1 of [RFC3501]) is essential when reading this document.\n\n3.  IMAP Protocol Changes\n\n3.1.  CONDSTORE Extension\n\n   An IMAP server that supports CONDSTORE MUST associate a positive\n   unsigned 63-bit (*) value, called a mod-sequence, with every IMAP\n   message.  This is an opaque value updated by the server whenever a\n   metadata item is modified.  The server MUST guarantee that each STORE\n   command performed on the same mailbox (including simultaneous stores\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 5]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   to different metadata items from different connections) will get a\n   different mod-sequence value.  Also, for any two successful STORE\n   operations performed in the same session on the same mailbox, the\n   mod-sequence of the second completed operation MUST be greater than\n   the mod-sequence of the first completed operation.  Note that the\n   latter rule disallows the direct use of the system clock as a mod-\n   sequence because if system time changes (e.g., an NTP [NTP] client\n   adjusting the time), the next generated value might be less than the\n   previous one.\n\n   (*) Note: RFC 4551 defined mod-sequences as unsigned 64-bit values.\n   In order to make implementations on various platforms (such as Java)\n   easier, this version of the document redefines them as unsigned\n   63-bit values.\n\n   These rules allow a client to list all metadata changes since a well-\n   known point in time, as well as to perform conditional metadata\n   modifications based on an assumption that the metadata state hasn't\n   changed for a particular message.\n\n   In particular, mod-sequences allow a client that supports the\n   CONDSTORE extension to determine if a message metadata has changed\n   since some known moment.  Whenever the state of a flag changes (i.e.,\n   the flag is added where previously it wasn't set, or the flag is\n   removed where previously it was set), the value of the modification\n   sequence for the message MUST be updated.  Setting a flag that is\n   already set, or clearing a flag that is not set, SHOULD NOT change\n   the mod-sequence.\n\n   When a message is appended to a mailbox (via the IMAP APPEND command,\n   COPY to the mailbox, or using an external mechanism), the server\n   generates a new modification sequence that is higher than the highest\n   modification sequence of all messages in the mailbox and assigns it\n   to the appended message.\n\n   The server MAY store separate (per-message) modification sequence\n   values for different metadata items.  If the server does so, per-\n   message mod-sequence is the highest mod-sequence of all metadata\n   items accessible to the currently logged-in user for the specified\n   message.\n\n   The server that supports CONDSTORE is not required to be able to\n   store mod-sequences for every available mailbox.  Section 3.1.2.2\n   describes how the server may act if a particular mailbox doesn't\n   support the persistent storage of mod-sequences.\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 6]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   CONDSTORE makes the following changes to the IMAP4 protocol:\n\n   a.  adds the UNCHANGEDSINCE STORE modifier.\n\n   b.  adds the MODIFIED response code that is used with an OK response\n       to the STORE command.  (It can also be used in a NO response.)\n\n   c.  adds a new MODSEQ message data item for use with the FETCH\n       command.\n\n   d.  adds the CHANGEDSINCE FETCH modifier.\n\n   e.  adds a new MODSEQ search criterion.\n\n   f.  extends the syntax of untagged SEARCH and ESEARCH responses to\n       include mod-sequence.\n\n   g.  adds new OK untagged responses (HIGHESTMODSEQ and NOMODSEQ) for\n       the SELECT and EXAMINE commands.\n\n   h.  defines an additional CONDSTORE parameter to SELECT/EXAMINE\n       commands.\n\n   i.  adds the HIGHESTMODSEQ status data item to the STATUS command.\n\n   A client supporting the CONDSTORE extension indicates its willingness\n   to receive mod-sequence updates in all untagged FETCH responses by\n   issuing one of the following, which are called \"CONDSTORE enabling\n   commands\":\n\n   o  a SELECT or EXAMINE command with the CONDSTORE parameter,\n\n   o  a STATUS (HIGHESTMODSEQ) command,\n\n   o  a FETCH or SEARCH command that includes the MODSEQ message data\n      item,\n\n   o  a FETCH command with the CHANGEDSINCE modifier,\n\n   o  a STORE command with the UNCHANGEDSINCE modifier, or\n\n   o  an ENABLE command containing \"CONDSTORE\" as one of the parameters.\n      (This option only applies when the client is communicating with a\n      server that also implements the ENABLE extension [RFC5161].)\n\n   Once a client issues a CONDSTORE enabling command, it has announced\n   itself as a \"CONDSTORE-aware client\".  The server MUST then include\n   mod-sequence data in all subsequent untagged FETCH responses (until\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 7]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   the connection is closed), whether they were caused by a regular\n   STORE, a STORE with an UNCHANGEDSINCE modifier, or an external agent.\n\n   A future extension to this document may extend the list of CONDSTORE\n   enabling commands.  A first CONDSTORE enabling command executed in\n   the session with a mailbox selected MUST cause the server to return\n   HIGHESTMODSEQ (Section 3.1.2.1) for the mailbox (if any is selected),\n   unless the server has sent a NOMODSEQ (Section 3.1.2.2) response code\n   when the currently selected mailbox was selected.\n\n3.1.1.  Advertising Support for CONDSTORE\n\n   The Conditional STORE extension is present in any IMAP4\n   implementation that returns \"CONDSTORE\" as one of the supported\n   capabilities in the CAPABILITY command response.\n\n3.1.2.  New OK Untagged Responses for SELECT and EXAMINE\n\n   This document adds two new response codes: HIGHESTMODSEQ and\n   NOMODSEQ.  One of these two response codes MUST be returned in an OK\n   untagged response for any successful SELECT/EXAMINE command issued\n   after a CONDSTORE enabling command.\n\n   When opening a mailbox, the server must check if the mailbox supports\n   the persistent storage of mod-sequences.  If the mailbox supports the\n   persistent storage of mod-sequences and the mailbox open operation\n   succeeds, the server MUST send an OK untagged response, including the\n   HIGHESTMODSEQ response code.  If the persistent storage for the\n   mailbox is not supported, the server MUST send an OK untagged\n   response, including the NOMODSEQ response code instead.\n\n3.1.2.1.  HIGHESTMODSEQ Response Code\n\n   This document adds a new response code that is returned in an OK\n   untagged response for the SELECT and EXAMINE commands.  Once a\n   CONDSTORE enabling command is issued, a server supporting the\n   persistent storage of mod-sequences for the mailbox MUST send an OK\n   untagged response, including the HIGHESTMODSEQ response code with\n   every successful SELECT or EXAMINE command:\n\n      OK [HIGHESTMODSEQ <mod-sequence-value>]\n\n      where <mod-sequence-value> is the highest mod-sequence value of\n      all messages in the mailbox.  When the server changes UIDVALIDITY\n      for a mailbox, it doesn't have to keep the same HIGHESTMODSEQ for\n      the mailbox.\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 8]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   Note that some existing CONDSTORE servers don't start tracking mod-\n   sequences or don't report them until after a CONDSTORE enabling\n   command is issued.  Because of that, a client wishing to receive\n   HIGHESTMODSEQ/NOMODSEQ information must first send a CONDSTORE\n   enabling command, for example, by using SELECT/EXAMINE with the\n   CONDSTORE parameter (see Section 3.1.8).\n\n   A disconnected client can use the value of HIGHESTMODSEQ to check if\n   it has to refetch metadata from the server.  If the UIDVALIDITY value\n   has changed for the selected mailbox, the client MUST delete the\n   cached value of HIGHESTMODSEQ.  If UIDVALIDITY for the mailbox is the\n   same, and if the HIGHESTMODSEQ value stored in the client's cache is\n   less than the value returned by the server, then some metadata items\n   on the server have changed since the last synchronization, and the\n   client needs to update its cache.  The client MAY use SEARCH MODSEQ\n   (Section 3.1.5) to find out exactly which metadata items have\n   changed.  Alternatively, the client MAY issue FETCH with the\n   CHANGEDSINCE modifier (Section 3.1.4.1) in order to fetch data for\n   all messages that have metadata items changed since some known\n   modification sequence.\n\n   C: A142 SELECT INBOX\n   S: * 172 EXISTS\n   S: * 1 RECENT\n   S: * OK [UNSEEN 12] Message 12 is first unseen\n   S: * OK [UIDVALIDITY 3857529045] UIDs valid\n   S: * OK [UIDNEXT 4392] Predicted next UID\n   S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n   S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n   S: * OK [HIGHESTMODSEQ 715194045007]\n   S: A142 OK [READ-WRITE] SELECT completed\n\n                                 Example 1\n\n3.1.2.2.  NOMODSEQ Response Code\n\n   Once a CONDSTORE enabling command is issued, a server that doesn't\n   support the persistent storage of mod-sequences for the mailbox MUST\n   send an OK untagged response, including the NOMODSEQ response code\n   with every successful SELECT or EXAMINE command.  Note that some\n   existing CONDSTORE servers don't return NOMODSEQ until after a\n   CONDSTORE enabling command is issued.  Because of that, a client\n   wishing to receive HIGHESTMODSEQ/NOMODSEQ information must first send\n   a CONDSTORE enabling command, for example, by using SELECT/EXAMINE\n   with the CONDSTORE parameter (see Section 3.1.8).\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                    [Page 9]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   A server that returned the NOMODSEQ response code for a mailbox MUST\n   reject (with a tagged BAD response) any of the following commands\n   while the mailbox remains selected:\n\n   o  a FETCH command with the CHANGEDSINCE modifier,\n\n   o  a FETCH or SEARCH command that includes the MODSEQ message data\n      item, or\n\n   o  a STORE command with the UNCHANGEDSINCE modifier.\n\n   C: A142 SELECT INBOX\n   S: * 172 EXISTS\n   S: * 1 RECENT\n   S: * OK [UNSEEN 12] Message 12 is first unseen\n   S: * OK [UIDVALIDITY 3857529045] UIDs valid\n   S: * OK [UIDNEXT 4392] Predicted next UID\n   S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n   S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n   S: * OK [NOMODSEQ] Sorry, this mailbox format doesn't support\n       modsequences\n   S: A142 OK [READ-WRITE] SELECT completed\n\n                                 Example 2\n\n3.1.3.  STORE and UID STORE Commands\n\n   This document defines the following STORE modifier (see Section 2.5\n   of [RFC4466]):\n\n   UNCHANGEDSINCE <mod-sequence>\n\n   For each message specified in the message set, the server performs\n   the following.  If the mod-sequence of every metadata item of the\n   message affected by the STORE/UID STORE is equal to or less than the\n   specified UNCHANGEDSINCE value, then the requested operation (as\n   described by the message data item) is performed.  If the operation\n   is successful, the server MUST update the mod-sequence attribute of\n   the message.  An untagged FETCH response MUST be sent, even if the\n   .SILENT suffix is specified, and the response MUST include the MODSEQ\n   message data item.  This is required to update the client's cache\n   with the correct mod-sequence values.  See Section 3.1.4.2 for more\n   details.\n\n   However, if the mod-sequence of any metadata item of the message is\n   greater than the specified UNCHANGEDSINCE value, then the requested\n   operation MUST NOT be performed.  In this case, the mod-sequence\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 10]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   attribute of the message is not updated, and the message number (or\n   unique identifier in the case of the UID STORE command) is added to\n   the list of messages that failed the UNCHANGEDSINCE test.\n\n   When the server finishes performing the operation on all the messages\n   in the message set, it checks for a non-empty list of messages that\n   failed the UNCHANGEDSINCE test.  If this list is non-empty, the\n   server MUST return in the tagged response a MODIFIED response code.\n   The MODIFIED response code includes the message set (for STORE) or\n   set of UIDs (for UID STORE) of all messages that failed the\n   UNCHANGEDSINCE test.\n\n   All messages pass the UNCHANGEDSINCE test.\n\n   C: a103 UID STORE 6,4,8 (UNCHANGEDSINCE 12121230045)\n       +FLAGS.SILENT (\\Deleted)\n   S: * 1 FETCH (UID 4 MODSEQ (12121231000))\n   S: * 2 FETCH (UID 6 MODSEQ (12121230852))\n   S: * 4 FETCH (UID 8 MODSEQ (12121230956))\n   S: a103 OK Conditional Store completed\n\n                                 Example 3\n\n   C: a104 STORE * (UNCHANGEDSINCE 12121230045) +FLAGS.SILENT\n       (\\Deleted $Processed)\n   S: * 50 FETCH (MODSEQ (12111230047))\n   S: a104 OK Store (conditional) completed\n\n                                 Example 4\n\n   C: c101 STORE 50 (UNCHANGEDSINCE 12121230045) -FLAGS.SILENT\n       (\\Deleted)\n   S: * OK [HIGHESTMODSEQ 12111230047]\n   S: * 50 FETCH (MODSEQ (12111230048))\n   S: c101 OK Store (conditional) completed\n\n   The HIGHESTMODSEQ response code was sent by the server presumably\n   because this was the first CONDSTORE enabling command.\n\n                                 Example 5\n\n   The failure of the conditional STORE operation for any particular\n   message or messages (7 in this example) does not stop the server from\n   finding all messages that fail the UNCHANGEDSINCE test.  All such\n   messages are returned in the MODIFIED response code.\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 11]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   C: d105 STORE 7,5,9 (UNCHANGEDSINCE 320162338)\n       +FLAGS.SILENT (\\Deleted)\n   S: * 5 FETCH (MODSEQ (320162350))\n   S: d105 OK [MODIFIED 7,9] Conditional STORE failed\n\n                                 Example 6\n\n   Same as above, but the server follows the SHOULD recommendation in\n   Section 6.4.6 of [RFC3501].\n\n   C: d105 STORE 7,5,9 (UNCHANGEDSINCE 320162338)\n       +FLAGS.SILENT (\\Deleted)\n   S: * 7 FETCH (MODSEQ (320162342) FLAGS (\\Seen \\Deleted))\n   S: * 5 FETCH (MODSEQ (320162350))\n   S: * 9 FETCH (MODSEQ (320162349) FLAGS (\\Answered))\n   S: d105 OK [MODIFIED 7,9] Conditional STORE failed\n\n   Use of UNCHANGEDSINCE with a modification sequence of 0 always fails\n   if the metadata item exists.  A system flag MUST always be considered\n   existent, whether it was set or not.\n\n                                 Example 7\n\n   C: a102 STORE 12 (UNCHANGEDSINCE 0)\n       +FLAGS.SILENT ($MDNSent)\n   S: a102 OK [MODIFIED 12] Conditional STORE failed\n\n   The client has tested the presence of the $MDNSent user-defined\n   keyword.\n\n                                 Example 8\n\n   Note: A client trying to make an atomic change to the state of a\n   particular metadata item (or a set of metadata items) MUST be\n   prepared to deal with the case when the server returns the MODIFIED\n   response code if the state of the metadata item being watched hasn't\n   changed (but the state of some other metadata item has).  This is\n   necessary because some servers don't store separate mod-sequences for\n   different metadata items.  However, a server implementation SHOULD\n   avoid generating spurious MODIFIED responses for +FLAGS/-FLAGS STORE\n   operations, even when the server stores a single mod-sequence per\n   message.  Section 3.1.12 describes how this can be achieved.\n\n   Unless the server has included an unsolicited FETCH to update the\n   client's knowledge about messages that have failed the UNCHANGEDSINCE\n   test, upon receipt of the MODIFIED response code, the client SHOULD\n   try to figure out if the required metadata items have indeed changed\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 12]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   by issuing the FETCH or NOOP command.  It is RECOMMENDED that the\n   server avoids the need for the client to do that by sending an\n   unsolicited FETCH response (see Examples 9 and 10).\n\n   If the required metadata items haven't changed, the client SHOULD\n   retry the command with the new mod-sequence.  The client needs to\n   allow for a reasonable number of retries (at least 2).\n\n   In the example below, the server returns the MODIFIED response code\n   without sending information describing why the STORE UNCHANGEDSINCE\n   operation has failed.\n\n   C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n       +FLAGS.SILENT ($Processed)\n   S: * 100 FETCH (MODSEQ (303181230852))\n   S: * 102 FETCH (MODSEQ (303181230852))\n      ...\n   S: * 150 FETCH (MODSEQ (303181230852))\n   S: a106 OK [MODIFIED 101] Conditional STORE failed\n\n   The flag $Processed was set on the message 101...\n\n   C: a107 NOOP\n   S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed))\n   S: a107 OK\n\n                                 Example 9\n\n   Or, the flag hasn't changed, but another has (note that this server\n   behavior is discouraged.  Server implementers should also see\n   Section 3.1.12)...\n\n   C: b107 NOOP\n   S: * 101 FETCH (MODSEQ (303011130956) FLAGS (\\Deleted \\Answered))\n   S: b107 OK\n\n   ...and the client retries the operation for the message 101 with\n   the updated UNCHANGEDSINCE value.\n\n   C: b108 STORE 101 (UNCHANGEDSINCE 303011130956)\n       +FLAGS.SILENT ($Processed)\n   S: * 101 FETCH (MODSEQ (303181230852))\n   S: b108 OK Conditional Store completed\n\n   Same as above, but the server avoids the need for the client to poll\n   for changes.\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 13]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   The flag $Processed was set on the message 101 by another\n   client...\n\n   C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n       +FLAGS.SILENT ($Processed)\n   S: * 100 FETCH (MODSEQ (303181230852))\n   S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed))\n   S: * 102 FETCH (MODSEQ (303181230852))\n   ...\n   S: * 150 FETCH (MODSEQ (303181230852))\n   S: a106 OK [MODIFIED 101] Conditional STORE failed\n\n                                Example 10\n\n   Or, the flag hasn't changed, but another has (note that this server\n   behavior is discouraged.  Server implementers should also see\n   Section 3.1.12)...\n\n\n   C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n       +FLAGS.SILENT ($Processed)\n   S: * 100 FETCH (MODSEQ (303181230852))\n   S: * 101 FETCH (MODSEQ (303011130956) FLAGS (\\Deleted \\Answered))\n   S: * 102 FETCH (MODSEQ (303181230852))\n   ...\n   S: * 150 FETCH (MODSEQ (303181230852))\n   S: a106 OK [MODIFIED 101] Conditional STORE failed\n\n   ...and the client retries the operation for the message 101 with\n   the updated UNCHANGEDSINCE value.\n\n   C: b108 STORE 101 (UNCHANGEDSINCE 303011130956)\n       +FLAGS.SILENT ($Processed)\n   S: * 101 FETCH (MODSEQ (303181230852))\n   S: b108 OK Conditional Store completed\n\n   Or, the flag hasn't changed, but another has (nice server behavior.\n   Server implementers should also see Section 3.1.12)...\n\n   C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n       +FLAGS.SILENT ($Processed)\n   S: * 100 FETCH (MODSEQ (303181230852))\n   S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed \\Deleted\n       \\Answered))\n   S: * 102 FETCH (MODSEQ (303181230852))\n   ...\n   S: * 150 FETCH (MODSEQ (303181230852))\n   S: a106 OK Conditional STORE completed\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 14]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   The following example is based on the example from Section 4.2.3 of\n   [RFC2180] and demonstrates that the MODIFIED response code MAY also\n   be returned in the tagged NO response.\n\n   The client tries to conditionally STORE flags on a mixture of\n   expunged and non-expunged messages; one message fails the\n   UNCHANGEDSINCE test.\n\n   C: B001 STORE 1:7 (UNCHANGEDSINCE 320172338) +FLAGS (\\SEEN)\n   S: * 1 FETCH (MODSEQ (320172342) FLAGS (\\SEEN))\n   S: * 3 FETCH (MODSEQ (320172342) FLAGS (\\SEEN))\n   S: B001 NO [MODIFIED 2] Some of the messages no longer exist.\n\n   C: B002 NOOP\n   S: * 4 EXPUNGE\n   S: * 4 EXPUNGE\n   S: * 4 EXPUNGE\n   S: * 4 EXPUNGE\n   S: * 2 FETCH (MODSEQ (320172340) FLAGS (\\Deleted \\Answered))\n   S: B002 OK NOOP Completed.\n\n   By receiving FETCH responses for messages 1 and 3, and EXPUNGE\n   responses that indicate that messages 4 through 7 have been\n   expunged, the client retries the operation only for message 2.\n   The updated UNCHANGEDSINCE value is used.\n\n   C: b003 STORE 2 (UNCHANGEDSINCE 320172340) +FLAGS (\\Seen)\n   S: * 2 FETCH (MODSEQ (320180050) FLAGS (\\SEEN \\Flagged))\n   S: b003 OK Conditional Store completed\n\n                                Example 11\n\n   Note: If a message is specified multiple times in the message set,\n   and the server doesn't internally eliminate duplicates from the\n   message set, it MUST NOT fail the conditional STORE operation for the\n   second (or subsequent) occurrence of the message if the operation\n   completed successfully for the first occurrence.  For example, if the\n   client specifies:\n\n      e105 STORE 7,3:9 (UNCHANGEDSINCE 12121230045) +FLAGS.SILENT\n      (\\Deleted)\n\n   the server must not fail the operation for message 7 as part of\n   processing \"3:9\" if it succeeded when message 7 was processed the\n   first time.\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 15]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   As specified in Section 3.1, once the client specifies the\n   UNCHANGEDSINCE modifier in a STORE command, the server starts\n   including the MODSEQ FETCH response data items in all subsequent\n   unsolicited FETCH responses.\n\n   This document also changes the behavior of the server when it has\n   performed a STORE or UID STORE command and the UNCHANGEDSINCE\n   modifier is not specified.  If the operation is successful for a\n   message, the server MUST update the mod-sequence attribute of the\n   message.  The server is REQUIRED to include the mod-sequence value\n   whenever it decides to send the unsolicited FETCH response to all\n   CONDSTORE-aware clients that have opened the mailbox containing the\n   message.\n\n   Server implementers should also see Section 3.1.11 for additional\n   quality of implementation issues related to the STORE command.\n\n3.1.4.  FETCH and UID FETCH Commands\n\n3.1.4.1.  CHANGEDSINCE FETCH Modifier\n\n   This document defines the following FETCH modifier (see Section 2.4\n   of [RFC4466]):\n\n   CHANGEDSINCE <mod-sequence>:  The CHANGEDSINCE FETCH modifier allows\n      the client to further subset the list of messages described by the\n      sequence set.  The information described by message data items is\n      only returned for messages that have a mod-sequence bigger than\n      <mod-sequence>.\n\n      When the CHANGEDSINCE FETCH modifier is specified, it implicitly\n      adds the MODSEQ FETCH message data item (Section 3.1.4.2).\n\n   C: s100 UID FETCH 1:* (FLAGS) (CHANGEDSINCE 12345)\n   S: * 1 FETCH (UID 4 MODSEQ (65402) FLAGS (\\Seen))\n   S: * 2 FETCH (UID 6 MODSEQ (75403) FLAGS (\\Deleted))\n   S: * 4 FETCH (UID 8 MODSEQ (29738) FLAGS ($NoJunk $AutoJunk\n       $MDNSent))\n   S: s100 OK FETCH completed\n\n                                Example 12\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 16]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n3.1.4.2.  MODSEQ Message Data Item in FETCH Command\n\n   CONDSTORE adds a MODSEQ message data item to the FETCH command.  The\n   MODSEQ message data item allows clients to retrieve mod-sequence\n   values for a range of messages in the currently selected mailbox.\n\n   As specified in Section 3.1, once the client has specified the MODSEQ\n   message data item in a FETCH request, the server starts including the\n   MODSEQ FETCH response data items in all subsequent unsolicited FETCH\n   responses.\n\n   Syntax:  MODSEQ\n\n      The MODSEQ message data item causes the server to return MODSEQ\n      FETCH response data items.\n\n   Syntax:  MODSEQ ( <permsg-modsequence> )\n\n      MODSEQ response data items contain per-message mod-sequences.\n\n      The MODSEQ response data item is returned if the client issued\n      FETCH with the MODSEQ message data item.  It also allows the\n      server to notify the client about mod-sequence changes caused by\n      conditional STOREs (Section 3.1.3) and/or changes caused by\n      external sources.\n\n   C: a FETCH 1:3 (MODSEQ)\n   S: * 1 FETCH (MODSEQ (624140003))\n   S: * 2 FETCH (MODSEQ (624140007))\n   S: * 3 FETCH (MODSEQ (624140005))\n   S: a OK Fetch complete\n\n   In this example, the client requests per-message mod-sequences for a\n   set of messages.\n\n                                Example 13\n\n   Servers that only support the CONDSTORE extension (and not QRESYNC)\n   SHOULD comply with requirements from Section 3.2.4.\n\n   When a flag for a message is modified in a different session, the\n   server sends an unsolicited FETCH response containing the mod-\n   sequence for the message, as demonstrated in Example 14.  Note that\n   when the server also supports the QRESYNC extension (Section 3.2.3)\n   and a CONDSTORE enabling command has been issued, all FETCH responses\n   in Example 14 must also include UID FETCH items as prescribed by\n   Section 3.2.4.\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 17]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   (Session 1, authenticated as the user \"alex\".)  The user adds a\n   shared flag \\Deleted:\n\n       C: A142 SELECT INBOX\n       ...\n       S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n       S: * OK [PERMANENTFLAGS (\\Answered \\Deleted \\Seen \\*)] Limited\n       ...\n       C: A160 STORE 7 +FLAGS.SILENT (\\Deleted)\n       S: * 7 FETCH (MODSEQ (2121231000))\n       S: A160 OK Store completed\n\n   (Session 2, also authenticated as the user \"alex\".)  Any changes\n   to flags are always reported to all sessions authenticated as the\n   same user as in session 1.\n\n       C: C180 NOOP\n       S: * 7 FETCH (FLAGS (\\Deleted \\Answered) MODSEQ (12121231000))\n       S: C180 OK Noop completed\n\n   (Session 3, authenticated as the user \"andrew\".)  As \\Deleted is a\n   shared flag, changes in session 1 are also reported in session 3:\n\n       C: D210 NOOP\n       S: * 7 FETCH (FLAGS (\\Deleted \\Answered) MODSEQ (12121231000))\n       S: D210 OK Noop completed\n\n   The user modifies a private flag, \\Seen, in session 1...\n\n       C: A240 STORE 7 +FLAGS.SILENT (\\Seen)\n       S: * 7 FETCH (MODSEQ (12121231777))\n       S: A240 OK Store completed\n\n   ...which is only reported in session 2...\n\n       C: C270 NOOP\n       S: * 7 FETCH (FLAGS (\\Deleted \\Answered \\Seen) MODSEQ\n           (12121231777))\n       S: C270 OK Noop completed\n\n   ...but not in session 3.\n\n       C: D300 NOOP\n       S: D300 OK Noop completed\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 18]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   And, finally, the user removes flags \\Answered (shared) and \\Seen\n   (private) in session 1.\n\n       C: A330 STORE 7 -FLAGS.SILENT (\\Answered \\Seen)\n       S: * 7 FETCH (MODSEQ (12121245160))\n       S: A330 OK Store completed\n\n   Both changes are reported in session 2...\n\n       C: C360 NOOP\n       S: * 7 FETCH (FLAGS (\\Deleted) MODSEQ (12121245160))\n       S: C360 OK Noop completed\n\n   ...and only changes to shared flags are reported in session 3.\n\n       C: D390 NOOP\n       S: * 7 FETCH (FLAGS (\\Deleted) MODSEQ (12121245160))\n       S: D390 OK Noop completed\n\n                                Example 14\n\n   Server implementers should also see Section 3.1.11 for additional\n   quality of implementation issues related to the FETCH command.\n\n3.1.5.  MODSEQ Search Criterion in SEARCH\n\n   The MODSEQ criterion for the SEARCH (or UID SEARCH) command allows a\n   client to search for the metadata items that were modified since a\n   specified moment.\n\n   Syntax: MODSEQ [<entry-name> <entry-type-req>] <mod-sequence-valzer>\n\n      Messages that have modification values that are equal to or\n      greater than <mod-sequence-valzer>.  This allows a client, for\n      example, to find out which messages contain metadata items that\n      have changed since the last time it updated its disconnected\n      cache.  The client may also specify <entry-name> (name of the\n      metadata item) and <entry-type-req> (type of metadata item) before\n      <mod-sequence-valzer>.  <entry-type-req> can be one of \"shared\",\n      \"priv\" (private), or \"all\".  The last means that the server MUST\n      use the biggest value among \"priv\" and \"shared\" mod-sequences for\n      the metadata item.  If the server doesn't store separate mod-\n      sequences for different metadata items, it MUST ignore <entry-\n      name> and <entry-type-req>.  Otherwise, the server should use them\n      to narrow down the search.\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 19]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n      For a flag <flagname>, the corresponding <entry-name> has the form\n      \"/flags/<flagname>\".  Note that the leading \"\\\" character that\n      denotes a system flag has to be escaped as per Section 4.3 of\n      [RFC3501], as <entry-name> uses the syntax for quoted strings (see\n      the examples below).\n\n   If the client specifies a MODSEQ criterion in a SEARCH (or UID\n   SEARCH) command and the server returns a non-empty SEARCH result, the\n   server MUST also append (to the end of the untagged SEARCH response)\n   the highest mod-sequence for all messages being returned.  See also\n   Section 3.1.6.  Note that other IMAP extensions such as ESEARCH\n   [RFC4731] can override this requirement (see Section 3.1.10 for more\n   details.)\n\n   C: a SEARCH MODSEQ \"/flags/\\\\draft\" all 620162338\n   S: * SEARCH 2 5 6 7 11 12 18 19 20 23 (MODSEQ 917162500)\n   S: a OK Search complete\n\n   In the above example, the message numbers of any messages having a\n   mod-sequence equal to or greater than 620162338 for the \"\\Draft\" flag\n   are returned in the search results.\n\n                                Example 15\n\n   C: t SEARCH OR NOT MODSEQ 720162338 LARGER 50000\n   S: * SEARCH\n   S: t OK Search complete, nothing found\n\n                                Example 16\n\n3.1.6.  Modified SEARCH Untagged Response\n\n   Data:       zero or more numbers\n               mod-sequence value (omitted if no match)\n\n   This document extends the syntax of the untagged SEARCH response to\n   include the highest mod-sequence for all messages being returned.\n\n   If a client specifies a MODSEQ criterion in a SEARCH (or UID SEARCH)\n   command and the server returns a non-empty SEARCH result, the server\n   MUST also append (to the end of the untagged SEARCH response) the\n   highest mod-sequence for all messages being returned.  See\n   Section 3.1.5 for examples.\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 20]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n3.1.7.  HIGHESTMODSEQ Status Data Items\n\n   This document defines a new status data item:\n\n   HIGHESTMODSEQ:  The highest mod-sequence value of all messages in the\n      mailbox.  This is the same value that is returned by the server in\n      the HIGHESTMODSEQ response code in an OK untagged response (see\n      Section 3.1.2.1).  If the server doesn't support the persistent\n      storage of mod-sequences for the mailbox (see Section 3.1.2.2),\n      the server MUST return 0 as the value of the HIGHESTMODSEQ status\n      data item.\n\n   C: A042 STATUS blurdybloop (UIDNEXT MESSAGES HIGHESTMODSEQ)\n   S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292\n       HIGHESTMODSEQ 7011231777)\n   S: A042 OK STATUS completed\n\n                                Example 17\n\n3.1.8.  CONDSTORE Parameter to SELECT and EXAMINE\n\n   The CONDSTORE extension defines a single optional select parameter,\n   \"CONDSTORE\", which tells the server that it MUST include the MODSEQ\n   FETCH response data items in all subsequent unsolicited FETCH\n   responses.\n\n   The CONDSTORE parameter to SELECT/EXAMINE helps avoid a race\n   condition that might arise when one or more metadata items are\n   modified in another session after the server has sent the\n   HIGHESTMODSEQ response code and before the client was able to issue a\n   CONDSTORE enabling command.\n\n   C: A142 SELECT INBOX (CONDSTORE)\n   S: * 172 EXISTS\n   S: * 1 RECENT\n   S: * OK [UNSEEN 12] Message 12 is first unseen\n   S: * OK [UIDVALIDITY 3857529045] UIDs valid\n   S: * OK [UIDNEXT 4392] Predicted next UID\n   S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n   S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n   S: * OK [HIGHESTMODSEQ 715194045007]\n   S: A142 OK [READ-WRITE] SELECT completed, CONDSTORE is now enabled\n\n                                Example 18\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 21]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n3.1.9.  Interaction with IMAP SORT and THREAD Extensions\n\n   The MODSEQ Search Criterion (see Section 3.1.5) causes modifications\n   to SORT [RFC5256] responses similar to modifications to SEARCH\n   responses defined in Section 3.1.6:\n\n   SORT Response Data:       zero or more numbers\n                             mod-sequence value (omitted if no match)\n\n   This document extends the syntax of the untagged SORT response to\n   include the highest mod-sequence for all messages being returned.\n\n   If a client specifies a MODSEQ criterion in a SORT (or UID SORT)\n   command and the server returns a non-empty SORT result, the server\n   MUST also append (to the end of the untagged SORT response) the\n   highest mod-sequence for all messages being returned.  Note that\n   other IMAP extensions such as ESORT [RFC5267] can override this\n   requirement (see Section 3.1.10 for more details.)\n\n   THREAD commands that include a MODSEQ Search Criterion return THREAD\n   responses as specified in [RFC5256], i.e., THREAD responses are\n   unchanged by the CONDSTORE extension.\n\n3.1.10.  Interaction with IMAP ESORT and ESEARCH Extensions\n\n   If a client specifies a MODSEQ criterion in an extended SEARCH (or\n   extended UID SEARCH) [RFC4731] command and the server returns a non-\n   empty SEARCH result, the server MUST return the ESEARCH response\n   containing the MODSEQ result option as defined in Section 3.2 of\n   [RFC4731].\n\n   C: a SEARCH RETURN (ALL) MODSEQ 1234\n   S: * ESEARCH (TAG \"a\") ALL 1:3,5 MODSEQ 1236\n   S: a OK Extended SEARCH completed\n\n                                Example 19\n\n   If a client specifies a MODSEQ criterion in an extended SORT (or\n   extended UID SORT) [RFC5267] command and the server returns a non-\n   empty SORT result, the server MUST return the ESEARCH response\n   containing the MODSEQ result option defined in Section 3.2 of\n   [RFC4731].\n\n   C: a SORT RETURN (ALL) (DATE) UTF-8 MODSEQ 1234\n   S: * ESEARCH (TAG \"a\") ALL 5,3,2,1 MODSEQ 1236\n   S: a OK Extended SORT completed\n\n                                Example 20\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 22]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n3.1.11.  Additional Quality-of-Implementation Issues\n\n   Server implementations should follow the following rule, which\n   applies to any successfully completed STORE/UID STORE (with and\n   without an UNCHANGEDSINCE modifier), as well as to a FETCH command\n   that implicitly sets the \\Seen flag:\n\n      Adding the flag when it is already present or removing it when it\n      is not present SHOULD NOT change the mod-sequence.\n\n   This will prevent spurious client synchronization requests.\n\n   However, note that client implementers MUST NOT rely on this server\n   behavior.  A client can't distinguish between the case when a server\n   has violated the SHOULD mentioned above and when one or more clients\n   set and unset (or unset and set) the flag in another session.\n\n3.1.12.  CONDSTORE Server Implementation Considerations\n\n   This section describes how a server implementation that doesn't store\n   separate per-metadata mod-sequences for different metadata items can\n   avoid sending the MODIFIED response to any of the following\n   conditional STORE operations:\n\n      +FLAGS\n\n      -FLAGS\n\n      +FLAGS.SILENT\n\n      -FLAGS.SILENT\n\n   Note that the optimization described in this section can't be\n   performed in case of a conditional STORE FLAGS (without \"+\" or \"-\")\n   operation.\n\n   Let's use the following example.  The client has issued:\n\n   C: a106 STORE 100:150 (UNCHANGEDSINCE 212030000000)\n       +FLAGS.SILENT ($Processed)\n\n   When the server receives the command and parses it successfully, it\n   iterates through the message set and tries to execute the conditional\n   STORE command for each message.\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 23]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   Each server internally works as a client, i.e., it has to cache the\n   current state of all IMAP flags as it is known to the client.  In\n   order to report flag changes to the client, the server compares the\n   cached values with the values in its database for IMAP flags.\n\n   Imagine that another client has changed the state of a flag \\Deleted\n   on the message 101 and that the change updated the mod-sequence for\n   the message.  The server knows that the mod-sequence for the mailbox\n   has changed; however, it also knows that:\n\n   a.  the client is not interested in the \\Deleted flag, as it hasn't\n       included it in the +FLAGS.SILENT operation and\n\n   b.  the state of the flag $Processed hasn't changed (the server can\n       determine this by comparing the cached flag state with the state\n       of the flag in the database).\n\n   Therefore, the server doesn't have to report MODIFIED to the client.\n   Instead, the server may set the $Processed flag, update the mod-\n   sequence for the message 101 once again, and send an untagged FETCH\n   response with a new mod-sequence and flags:\n\n   S: * 101 FETCH (MODSEQ (303011130956) FLAGS ($Processed \\Deleted\n       \\Answered))\n\n   See also Section 3.1.11 for additional quality-of-implementation\n   issues.\n\n3.2.  QRESYNC Extension\n\n   All protocol changes and requirements specified for the CONDSTORE\n   extension are also a part of the QRESYNC extension.\n\n   The QRESYNC extension puts additional requirements on a server\n   implementing the CONDSTORE extension.  Each mailbox that supports\n   persistent storage of mod-sequences, i.e., for which the server would\n   send a HIGHESTMODSEQ untagged OK response code on a successful\n   SELECT/EXAMINE, MUST increment the per-mailbox mod-sequence when one\n   or more messages are expunged due to EXPUNGE, UID EXPUNGE, CLOSE, or\n   MOVE [RFC6851]; the server MUST associate the incremented mod-\n   sequence with the UIDs of the expunged messages.  Additionally, if\n   the server also supports the IMAP METADATA extension [RFC5464], it\n   MUST increment the per-mailbox mod-sequence when SETMETADATA\n   successfully changes an annotation on the corresponding mailbox.\n\n   A server implementing QRESYNC MUST send untagged events to a client\n   in a way that the client doesn't lose any changes in case of\n   connectivity loss.  In particular, this means that if the server\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 24]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   sends MODSEQ FETCH data items while EXPUNGE (or VANISHED) replies\n   with lower mod-sequences being delayed, the server MUST send the\n   HIGHESTMODSEQ response code with a lower value than the EXPUNGE's\n   mod-sequence.  See the example in Section 6.\n\n3.2.1.  Impact on CONDSTORE-only Clients\n\n   A client that supports CONDSTORE but not QRESYNC might resynchronize\n   a mailbox and discover that its HIGHESTMODSEQ has increased from the\n   value cached by the client.  If the increase is only due to messages\n   having been expunged since the client last synchronized, the client\n   is likely to send a FETCH ... CHANGEDSINCE command that returns no\n   data.  Thus, a client that supports CONDSTORE but not QRESYNC might\n   incur a penalty of an unneeded round trip when resynchronizing some\n   mailboxes (those that have had messages expunged but no flag changes\n   since the last synchronization).\n\n   This extra round trip is only incurred by clients that support\n   CONDSTORE but not QRESYNC and only when a mailbox has had messages\n   expunged but no flag changes to non-expunged messages.  Since\n   CONDSTORE is a relatively new extension, it is strongly encouraged\n   that clients that support it also support QRESYNC.\n\n3.2.2.  Advertising Support for QRESYNC\n\n   The quick resync IMAP extension is present if an IMAP4 server returns\n   \"QRESYNC\" as one of the supported capabilities to the CAPABILITY\n   command.\n\n   For compatibility with clients that only support the CONDSTORE IMAP\n   extension, servers SHOULD also advertise \"CONDSTORE\" in the\n   CAPABILITY response.\n\n3.2.3.  Use of ENABLE\n\n   Servers supporting QRESYNC MUST implement and advertise support for\n   the ENABLE [RFC5161] IMAP extension.  Also, the presence of the\n   \"QRESYNC\" capability implies support for the CONDSTORE IMAP extension\n   even if the \"CONDSTORE\" capability isn't advertised.  A server\n   compliant with this specification is REQUIRED to support \"ENABLE\n   QRESYNC\" and \"ENABLE QRESYNC CONDSTORE\" (which are \"CONDSTORE\n   enabling commands\", see Section 3.1, and have identical results).\n   Note that the order of parameters is not significant, but there is no\n   requirement for a compliant server to support \"ENABLE CONDSTORE\" by\n   itself.  The \"ENABLE QRESYNC\"/\"ENABLE QRESYNC CONDSTORE\" command also\n   tells the server that it MUST start sending VANISHED responses (see\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 25]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   Section 3.2.10) instead of EXPUNGE responses for all mailboxes for\n   which the server doesn't return the NOMODSEQ response code.  This\n   change remains in effect until the connection is closed.\n\n   A client making use of QRESYNC MUST issue \"ENABLE QRESYNC\" once it is\n   authenticated.  A server MUST respond with a tagged BAD response if\n   the QRESYNC parameter to the SELECT/EXAMINE command or the VANISHED\n   UID FETCH modifier is specified and the client hasn't issued \"ENABLE\n   QRESYNC\", or the server has not positively responded (in the current\n   connection) to that command with the untagged ENABLED response\n   containing QRESYNC.\n\n3.2.4.  Additional Requirements on QRESYNC Servers\n\n   Once a CONDSTORE enabling command is issued by the client, the server\n   MUST automatically include both UID and mod-sequence data in all\n   subsequent untagged FETCH responses (until the connection is closed),\n   whether they were caused by a regular STORE/UID STORE, a STORE/UID\n   STORE with an UNCHANGEDSINCE modifier, a FETCH/UID FETCH that\n   implicitly set the \\Seen flag, or an external agent.  Note that this\n   rule doesn't affect untagged FETCH responses caused by a FETCH\n   command that doesn't include UID and/or a MODSEQ FETCH data item (and\n   doesn't implicitly set the \\Seen flag) or UID FETCH without the\n   MODSEQ FETCH data item.\n\n3.2.5.  QRESYNC Parameter to SELECT/EXAMINE\n\n   The Quick Resynchronization parameter to SELECT/EXAMINE commands has\n   four arguments:\n\n   o  the last known UIDVALIDITY,\n\n   o  the last known modification sequence,\n\n   o  the optional set of known UIDs, and\n\n   o  an optional parenthesized list of known sequence ranges and their\n      corresponding UIDs.\n\n   A server MUST respond with a tagged BAD response if the Quick\n   Resynchronization parameter to the SELECT/EXAMINE command is\n   specified and the client hasn't issued \"ENABLE QRESYNC\" in the\n   current connection, or the server has not positively responded to\n   that command with the untagged ENABLED response containing QRESYNC.\n\n   Before opening the specified mailbox, the server verifies all\n   arguments for syntactic validity.  If any parameter is not\n   syntactically valid, the server returns the tagged BAD response, and\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 26]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   the mailbox remains unselected.  Once the check is done, the server\n   opens the mailbox as if no SELECT/EXAMINE parameters are specified\n   (this is subject to the processing of other parameters as defined in\n   other extensions).  In particular, this means that the server MUST\n   send all untagged responses as specified in Sections 6.3.1 and 6.3.2\n   of [RFC3501].\n\n   After that, the server checks the UIDVALIDITY value provided by the\n   client.  If the provided UIDVALIDITY doesn't match the UIDVALIDITY\n   for the mailbox being opened, then the server MUST ignore the\n   remaining parameters and behave as if no dynamic message data\n   changed.  The client can discover this situation by comparing the\n   UIDVALIDITY value returned by the server.  This behavior allows the\n   client not to synchronize the mailbox or decide on the best\n   synchronization strategy.\n\n   Example: Attempting to resynchronize INBOX, but the provided\n            UIDVALIDITY parameter doesn't match the current UIDVALIDITY\n            value.\n\n            C: A02 SELECT INBOX (QRESYNC (67890007 20050715194045000\n                41,43:211,214:541))\n            S: * 464 EXISTS\n            S: * 3 RECENT\n            S: * OK [UIDVALIDITY 3857529045] UIDVALIDITY\n            S: * OK [UIDNEXT 550] Predicted next UID\n            S: * OK [HIGHESTMODSEQ 90060128194045007] Highest mailbox\n            mod-sequence\n            S: * OK [UNSEEN 12] Message 12 is first unseen\n            S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n            S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n            \\Deleted \\Seen \\*)] Permanent flags\n            S: A02 OK [READ-WRITE] Sorry, UIDVALIDITY mismatch\n\n   Remaining parameters are described in the following subsections.\n\n3.2.5.1.  Modification Sequence and UID Parameters\n\n   A server that doesn't support the persistent storage of mod-sequences\n   for the mailbox MUST send an OK untagged response including the\n   NOMODSEQ response code with every successful SELECT or EXAMINE\n   command (see Section 3.1.2.2).  Such a server doesn't need to\n   remember mod-sequences for expunged messages in the mailbox.  It MUST\n   ignore the remaining parameters and behave as if no dynamic message\n   data changed.\n\n   If the provided UIDVALIDITY matches that of the selected mailbox, the\n   server then checks the last known modification sequence.\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 27]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   The server sends the client any pending flag changes (using FETCH\n   responses that MUST contain UIDs) and expunges those that have\n   occurred in this mailbox since the provided modification sequence.\n\n   If the list of known UIDs was also provided, the server should only\n   report flag changes and expunges for the specified messages.  If the\n   client did not provide the list of UIDs, the server acts as if the\n   client has specified \"1:<maxuid>\", where <maxuid> is the mailbox's\n   UIDNEXT value minus 1.  If the mailbox is empty and never had any\n   messages in it, then lack of the list of UIDs is interpreted as an\n   empty set of UIDs.\n\n   Thus, the client can process just these pending events and need not\n   perform a full resynchronization.  Without the message sequence\n   number matching information, the result of this step is semantically\n   equivalent to the client issuing:\n   tag1 UID FETCH \"known-uids\" (FLAGS) (CHANGEDSINCE \"mod-sequence-\n   value\" VANISHED)\n\n   In particular, this means that all requirements specified in\n   Section 3.2.6 apply.\n\n   Example:\n\n      C: A03 SELECT INBOX (QRESYNC (67890007\n          90060115194045000 41:211,214:541))\n      S: * OK [CLOSED]\n      S: * 100 EXISTS\n      S: * 11 RECENT\n      S: * OK [UIDVALIDITY 67890007] UIDVALIDITY\n      S: * OK [UIDNEXT 600] Predicted next UID\n      S: * OK [HIGHESTMODSEQ 90060115205545359] Highest\n          mailbox mod-sequence\n      S: * OK [UNSEEN 7] There are some unseen\n          messages in the mailbox\n      S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n      S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n          \\Deleted \\Seen \\*)] Permanent flags\n      S: * VANISHED (EARLIER) 41,43:116,118,120:211,214:540\n      S: * 49 FETCH (UID 117 FLAGS (\\Seen \\Answered) MODSEQ\n          (90060115194045001))\n      S: * 50 FETCH (UID 119 FLAGS (\\Draft $MDNSent) MODSEQ\n          (90060115194045308))\n      S: * 51 FETCH (UID 541 FLAGS (\\Seen $Forwarded) MODSEQ\n          (90060115194045001))\n      S: A03 OK [READ-WRITE] mailbox selected\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 28]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   In the above example, flag information for UID 42 is not returned,\n   presumably because its flags haven't changed since the MODSEQ\n   90060115194045000.\n\n3.2.5.2.  Message Sequence Match Data\n\n   A client MAY provide a parenthesized list of a message sequence set\n   and the corresponding UID sets.  Both MUST be provided in ascending\n   order.  The server uses this data to restrict the range for which it\n   provides expunged message information.\n\n   Conceptually, the client provides a small sample of sequence numbers\n   for which it knows the corresponding UIDs.  The server then compares\n   each sequence number and UID pair the client provides with the\n   current state of the mailbox.  If a pair matches, then the client\n   knows of any expunges up to, and including, the message; thus, it\n   will not include that range in the VANISHED response, even if the\n   \"mod-sequence-value\" provided by the client is too old for the server\n   to have data of when those messages were expunged.\n\n   Thus, if the Nth message number in the first set in the list is 4,\n   and the Nth UID in the second set in the list is 8, and the mailbox's\n   fourth message has UID 8, then no UIDs equal to or less than 8 are\n   present in the VANISHED response.  If the (N+1)th message number is\n   12, and the (N+1)th UID is 24, and the (N+1)th message in the mailbox\n   has UID 25, then the lowest UID included in the VANISHED response\n   would be 9.\n\n   In the following two examples, the server is unable to remember\n   expunges at all, and only UIDs with messages divisible by three are\n   present in the mailbox.  In the first example, the client does not\n   use the fourth parameter; in the second, it provides it.  This\n   example is somewhat extreme, but it shows that judicious usage of the\n   sequence match data can save a substantial amount of bandwidth.\n\n   Example:\n\n      C: A04 SELECT INBOX (QRESYNC (67890007\n          90060115194045000 1:29997))\n      S: * 10003 EXISTS\n      S: * 4 RECENT\n      S: * OK [UIDVALIDITY 67890007] UIDVALIDITY\n      S: * OK [UIDNEXT 30013] Predicted next UID\n      S: * OK [HIGHESTMODSEQ 90060115205545359] Highest mailbox\n          mod-sequence\n      S: * OK [UNSEEN 7] There are some unseen messages in the mailbox\n      S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 29]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n      S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n          \\Deleted \\Seen \\*)] Permanent flags\n      S: * VANISHED (EARLIER) 1:2,4:5,7:8,10:11,13:14,[...],\n          29668:29669,29671:29996\n      S: * 1 FETCH (UID 3 FLAGS (\\Seen \\Answered $Important) MODSEQ\n          (90060115194045001))\n      S: ...\n      S: * 9889 FETCH (UID 29667 FLAGS (\\Seen \\Answered) MODSEQ\n          (90060115194045027))\n      S: * 9890 FETCH (UID 29670 FLAGS (\\Draft $MDNSent) MODSEQ\n          (90060115194045028))\n      S: ...\n      S: * 9999 FETCH (UID 29997 FLAGS (\\Seen $Forwarded) MODSEQ\n          (90060115194045031))\n      S: A04 OK [READ-WRITE] mailbox selected\n\n   Example:\n\n      C: B04 SELECT INBOX (QRESYNC (67890007\n         90060115194045000 1:29997 (5000,7500,9000,9990:9999 15000,\n         22500,27000,29970,29973,29976,29979,29982,29985,29988,29991,\n         29994,29997)))\n      S: * 10003 EXISTS\n      S: * 4 RECENT\n      S: * OK [UIDVALIDITY 67890007] UIDVALIDITY\n      S: * OK [UIDNEXT 30013] Predicted next UID\n      S: * OK [HIGHESTMODSEQ 90060115205545359] Highest mailbox mod-\n         sequence\n      S: * OK [UNSEEN 7] There are some unseen messages in the mailbox\n      S: * FLAGS (\\Answered \\Flagged \\Draft \\Deleted \\Seen)\n      S: * OK [PERMANENTFLAGS (\\Answered \\Flagged \\Draft\n         \\Deleted \\Seen \\*)] Permanent flags\n      S: * 1 FETCH (UID 3 FLAGS (\\Seen \\Answered $Important) MODSEQ\n         (90060115194045001))\n      S: ...\n      S: * 9889 FETCH (UID 29667 FLAGS (\\Seen \\Answered) MODSEQ\n         (90060115194045027))\n      S: * 9890 FETCH (UID 29670 FLAGS (\\Draft $MDNSent) MODSEQ\n         (90060115194045028))\n      S: ...\n      S: * 9999 FETCH (UID 29997 FLAGS (\\Seen $Forwarded) MODSEQ\n         (90060115194045031))\n      S: B04 OK [READ-WRITE] mailbox selected\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 30]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n3.2.6.  VANISHED UID FETCH Modifier\n\n   [RFC4466] has extended the syntax of the FETCH and UID FETCH commands\n   to include an optional FETCH modifier.  This document defines a new\n   UID FETCH modifier: VANISHED.\n\n   Note that the VANISHED UID FETCH modifier is NOT allowed with a FETCH\n   command.  The server MUST return a tagged BAD response if this\n   response is specified as a modifier to the FETCH command.\n\n   A server MUST respond with a tagged BAD response if the VANISHED UID\n   FETCH modifier is specified and the client hasn't issued \"ENABLE\n   QRESYNC\" in the current connection.\n\n   The VANISHED UID FETCH modifier MUST only be specified together with\n   the CHANGEDSINCE UID FETCH modifier.  If the VANISHED UID FETCH\n   modifier is used without the CHANGEDSINCE UID FETCH modifier, the\n   server MUST respond with a tagged BAD response.\n\n   The VANISHED UID FETCH modifier instructs the server to report those\n   messages from the UID set parameter that have been expunged and whose\n   associated mod-sequence is larger than the specified mod-sequence.\n   That is, the client requests to be informed of messages from the\n   specified set that were expunged since the specified mod-sequence.\n   Note that the mod-sequence(s) associated with these messages was\n   updated when the messages were expunged (as described above).  The\n   expunged messages are reported using the VANISHED (EARLIER) response\n   as described in Section 3.2.10.1.  Any VANISHED (EARLIER) responses\n   MUST be returned before any FETCH responses, otherwise the client\n   might get confused about how message numbers map to UIDs.\n\n   Note: A server that receives a mod-sequence smaller than <minmodseq>,\n   where <minmodseq> is the value of the smallest expunged mod-sequence\n   it remembers minus one, MUST behave as if it was requested to report\n   all expunged messages from the provided UID set parameter.\n\n   Example 1: Without the VANISHED UID FETCH modifier, a CONDSTORE-aware\n   client needs to issue separate commands to learn of flag changes and\n   expunged messages since the last synchronization:\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 31]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   C: s100 UID FETCH 300:500 (FLAGS) (CHANGEDSINCE 12345)\n   S: * 1 FETCH (UID 404 MODSEQ (65402) FLAGS (\\Seen))\n   S: * 2 FETCH (UID 406 MODSEQ (75403) FLAGS (\\Deleted))\n   S: * 4 FETCH (UID 408 MODSEQ (29738) FLAGS ($NoJunk\n       $AutoJunk $MDNSent))\n   S: s100 OK FETCH completed\n   C: s101 UID SEARCH 300:500\n   S: * SEARCH 404 406 407 408 410 412\n   S: s101 OK search completed\n\n   Where 300 and 500 are the lowest and highest UIDs from the client's\n   cache.  The second SEARCH response tells the client that the messages\n   with UIDs 407, 410, and 412 are still present, but their flags\n   haven't changed since the specified modification sequence.\n\n   Using the VANISHED UID FETCH modifier, it is sufficient to issue only\n   a single command:\n\n   C: s100 UID FETCH 300:500 (FLAGS) (CHANGEDSINCE 12345\n       VANISHED)\n   S: * VANISHED (EARLIER) 300:310,405,411\n   S: * 1 FETCH (UID 404 MODSEQ (65402) FLAGS (\\Seen))\n   S: * 2 FETCH (UID 406 MODSEQ (75403) FLAGS (\\Deleted))\n   S: * 4 FETCH (UID 408 MODSEQ (29738) FLAGS ($NoJunk\n       $AutoJunk $MDNSent))\n   S: s100 OK FETCH completed\n\n3.2.7.  EXPUNGE Command\n\n   Arguments: none\n\n   Responses: untagged responses: EXPUNGE or VANISHED\n\n   Result: OK - expunge completed\n           NO - expunge failure: can't expunge (e.g., permission denied)\n           BAD - command unknown or arguments invalid\n\n   This section updates the definition of the EXPUNGE command described\n   in Section 6.4.3 of [RFC3501].\n\n   The EXPUNGE command permanently removes all messages that have the\n   \\Deleted flag set from the currently selected mailbox.  Before\n   returning an OK to the client, those messages that are removed are\n   reported using a VANISHED response or EXPUNGE responses.\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently removed due to the execution of\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 32]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   the EXPUNGE command.  For each permanently removed message, the\n   server MUST remember the incremented mod-sequence and corresponding\n   UID.  If at least one message got expunged and QRESYNC was enabled,\n   the server MUST send the updated per-mailbox modification sequence\n   using the HIGHESTMODSEQ response code (see Section 3.1.2.1) in the\n   tagged OK response.\n\n      Example:    C: A202 EXPUNGE\n                  S: * 3 EXPUNGE\n                  S: * 3 EXPUNGE\n                  S: * 5 EXPUNGE\n                  S: * 8 EXPUNGE\n                  S: A202 OK [HIGHESTMODSEQ 20010715194045319] expunged\n\n   Note: In this example, the client hasn't enabled QRESYNC, so the\n   server is still using untagged EXPUNGE responses.  Note that the\n   presence of the HIGHESTMODSEQ response code is optional in this case.\n   If the selected mailbox returned NOMODSEQ, the HIGHESTMODSEQ response\n   code will be absent.  In this example, messages 3, 4, 7, and 11 had\n   the \\Deleted flag set.  The first \"* 3 EXPUNGE\" reports message #3 as\n   expunged.  The second \"* 3 EXPUNGE\" reports message #4 as expunged\n   (the message number was decremented due to the previous EXPUNGE\n   response).  See the description of the EXPUNGE response in [RFC3501]\n   for further explanation.\n\n   Once the client enables QRESYNC, the server will always send VANISHED\n   responses instead of EXPUNGE responses for mailboxes that support the\n   storing of modification sequences, so the previous example might look\n   like this:\n\n      Example:    C: B202 EXPUNGE\n                  S: * VANISHED 405,407,410,425\n                  S: B202 OK [HIGHESTMODSEQ 20010715194045319] expunged\n\n   Here, messages with message numbers 3, 4, 7, and 11 have respective\n   UIDs 405, 407, 410, and 425.\n\n3.2.8.  CLOSE Command\n\n   Arguments: none\n\n   Responses: no specific responses for this command\n\n   Result: OK - close completed, now in authenticated state\n           BAD - command unknown or arguments invalid\n\n   This section updates the definition of the CLOSE command described in\n   Section 6.4.2 of [RFC3501].\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 33]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   The CLOSE command permanently removes all messages that have the\n   \\Deleted flag set from the currently selected mailbox and returns to\n   the authenticated state from the selected state.  No untagged EXPUNGE\n   (or VANISHED) responses are sent.\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently removed due to the execution of\n   the CLOSE command.  For each permanently removed message, the server\n   MUST remember the incremented mod-sequence and corresponding UID.\n   The server MUST NOT send the updated per-mailbox modification\n   sequence using the HIGHESTMODSEQ response code (see Section 3.1.2.1)\n   in the tagged OK response, as this might cause loss of\n   synchronization on the client.\n\n      Example:    C: A202 CLOSE\n                  S: A202 OK done\n\n3.2.9.  UID EXPUNGE Command\n\n   Arguments: message set\n\n   Responses: untagged responses: EXPUNGE or VANISHED\n\n   Result: OK - expunge completed\n           NO - expunge failure: can't expunge (e.g., permission denied)\n           BAD - command unknown or arguments invalid\n\n   This section updates the definition of the UID EXPUNGE command\n   described in Section 2.1 of [UIDPLUS], in the presence of QRESYNC.\n   Servers that implement both [UIDPLUS] and QRESYNC extensions must\n   implement UID EXPUNGE as described in this section.\n\n   The UID EXPUNGE command permanently removes from the currently\n   selected mailbox all messages that have both the \\Deleted flag set\n   and a UID that is included in the specified message set.  If a\n   message either does not have the \\Deleted flag set or has a UID that\n   is not included in the specified message set, it is not affected.\n\n   This command is particularly useful for disconnected mode clients.\n   By using UID EXPUNGE instead of EXPUNGE when resynchronizing with the\n   server, the client can avoid inadvertently removing any messages that\n   have been marked as \\Deleted by other clients between the time that\n   the client was last connected and the time the client resynchronizes.\n\n   Before returning an OK to the client, those messages that are removed\n   are reported using a VANISHED response or EXPUNGE responses.\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 34]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   If the server is capable of storing modification sequences for the\n   selected mailbox, it MUST increment the per-mailbox mod-sequence if\n   at least one message was permanently removed due to the execution of\n   the UID EXPUNGE command.  For each permanently removed message, the\n   server MUST remember the incremented mod-sequence and corresponding\n   UID.  If at least one message got expunged and QRESYNC was enabled,\n   the server MUST send the updated per-mailbox modification sequence\n   using the HIGHESTMODSEQ response code (see Section 3.1.2.1) in the\n   tagged OK response.\n\n   Example:    C: . UID EXPUNGE 3000:3002\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: * 3 EXPUNGE\n               S: . OK [HIGHESTMODSEQ 20010715194045319] Ok\n\n   Note: In this example, the client hasn't enabled QRESYNC, so the\n   server is still using untagged EXPUNGE responses instead of VANISHED\n   responses.  Note that the presence of the HIGHESTMODSEQ response code\n   is optional.  If the selected mailbox returned NOMODSEQ, the\n   HIGHESTMODSEQ response code will be absent.  In this example, at\n   least messages with message numbers 3, 4, and 5 (UIDs 3000 to 3002)\n   had the \\Deleted flag set.  The first \"* 3 EXPUNGE\" reports message\n   #3 as expunged.  The second \"* 3 EXPUNGE\" reports message #4 as\n   expunged (the message number was decremented due to the previous\n   EXPUNGE response).  See the description of the EXPUNGE response in\n   [RFC3501] for further explanation.\n\n3.2.10.  VANISHED Response\n\n   The VANISHED response reports that the specified UIDs have been\n   permanently removed from the mailbox.  This response is similar to\n   the EXPUNGE response [RFC3501]; however, it can return information\n   about multiple messages, and it returns UIDs instead of message\n   numbers.  The first benefit saves bandwidth, while the second is more\n   convenient for clients that only use UIDs to access the IMAP server.\n\n   The VANISHED response has the same restrictions on when it can be\n   sent as does the EXPUNGE response (see below).  Once a client has\n   issued \"ENABLE QRESYNC\" (and the server has positively responded to\n   that command with the untagged ENABLED response containing QRESYNC),\n   the server MUST use the VANISHED response without the EARLIER tag\n   instead of the EXPUNGE response for all mailboxes that don't return\n   NOMODSEQ when selected.  The server continues using VANISHED in lieu\n   of EXPUNGE for the duration of the connection.  In particular, this\n   affects the EXPUNGE [RFC3501] and UID EXPUNGE [UIDPLUS] commands, as\n   well as messages expunged in other connections.  Such a VANISHED\n   response MUST NOT contain the EARLIER tag.\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 35]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   The VANISHED response has two forms.  The first form contains the\n   EARLIER tag, which signifies that the response was caused by a UID\n   FETCH (VANISHED) or a SELECT/EXAMINE (QRESYNC) command.  The second\n   form doesn't contain the EARLIER tag and is used for announcing\n   message removals within an already selected mailbox.\n\n   Because clients handle the two different forms of the VANISHED\n   response differently, servers MUST NOT combine them.  Messages are\n   reported in VANISHED responses with or without the EARLIER tag, as\n   appropriate to the cause, and, if necessary, two VANISHED responses\n   are sent (one with EARLIER and one without).\n\n3.2.10.1.  VANISHED (EARLIER) Response\n\n   Contents:  an EARLIER tag\n\n              list of UIDs\n\n   The VANISHED (EARLIER) response is caused by a UID FETCH (VANISHED)\n   or a SELECT/EXAMINE (QRESYNC) command.  This response is sent if the\n   UID set parameter to the UID FETCH (VANISHED) command includes UIDs\n   of messages that are no longer in the mailbox.  When the client sees\n   a VANISHED EARLIER response, it MUST NOT decrement message sequence\n   numbers for each successive message in the mailbox.\n\n3.2.10.2.  VANISHED Response without the (EARLIER) Tag\n\n   Contents:  list of UIDs\n\n   Once a client has issued \"ENABLE QRESYNC\" (and the server has\n   positively responded to that command with the untagged ENABLED\n   response containing QRESYNC), the server MUST use the VANISHED\n   response without the EARLIER tag instead of the EXPUNGE response for\n   all mailboxes that don't return NOMODSEQ when selected.  The server\n   continues using VANISHED in lieu of EXPUNGE for the duration of the\n   connection.  In particular, this affects the EXPUNGE [RFC3501] and\n   UID EXPUNGE [UIDPLUS] commands, as well as messages expunged in other\n   connections.  Such a VANISHED response MUST NOT contain the EARLIER\n   tag.\n\n   Unlike VANISHED (EARLIER), this response also decrements the number\n   of messages in the mailbox and adjusts the message sequence numbers\n   for the messages remaining in the mailbox to account for the expunged\n   messages.  Because of this housekeeping, it is not necessary for the\n   server to send an EXISTS response to report the new message count.\n   See the example at the end of this section.\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 36]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   A VANISHED response without the EARLIER tag MUST refer only to\n   messages that are visible to the client in the current session at the\n   time the VANISHED response is sent.  That is, servers MUST NOT send\n   UIDs for previously expunged messages or messages that were not\n   announced to the client via EXISTS.  This means that each UID listed\n   in a VANISHED response results in the client decrementing the message\n   count by one.  This is required to prevent a possible race condition\n   where new arrivals for which the UID is not yet known by the client\n   are immediately expunged.\n\n   A VANISHED response MUST NOT be sent when no command is in progress,\n   nor while responding to a FETCH, STORE, or SEARCH command.  This rule\n   is necessary to prevent a loss of synchronization of message sequence\n   numbers between the client and server.  A command is not \"in\n   progress\" until the complete command has been received; in\n   particular, a command is not \"in progress\" during the negotiation of\n   command continuation.\n\n   Note: UID FETCH, UID STORE, and UID SEARCH are different commands\n   from FETCH, STORE, and SEARCH.  A VANISHED response MAY be sent\n   during a UID command.  However, the VANISHED response MUST NOT be\n   sent during a UID SEARCH command that contains message numbers in the\n   search criteria.\n\n   The update from the VANISHED response MUST be recorded by the client.\n\n   Example: Let's assume that there is the following mapping between\n   message numbers and UIDs in the currently selected mailbox (here \"D\"\n   marks messages with the \\Deleted flag set, and \"x\" represents UIDs,\n   which are not relevant for the example):\n\n   Message numbers:   1    2    3    4    5  6   7  8  9 10  11\n   UIDs:              x  504  505  507  508  x 510  x  x  x 625\n   \\Deleted messages:           D    D           D            D\n\n   In the presence of the extension defined in this document:\n\n   C: A202 EXPUNGE\n   S: * VANISHED 505,507,510,625\n   S: A202 OK EXPUNGE completed\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 37]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   Without the QRESYNC extension, the same example might look like:\n\n   C: A202 EXPUNGE\n   S: * 3 EXPUNGE\n   S: * 3 EXPUNGE\n   S: * 5 EXPUNGE\n   S: * 8 EXPUNGE\n   S: A202 OK EXPUNGE completed\n\n   (Continuing from the previous example.)  If subsequently messages\n   with UIDs 504 and 508 got marked as \\Deleted:\n\n   C: A210 EXPUNGE\n   S: * VANISHED 504,508\n   S: A210 OK EXPUNGE completed\n\n   For Example, the last VANISHED response only contains UIDs of\n   messages expunged since the previous VANISHED response.\n\n   To illustrate the difference between VANISHED and VANISHED (EARLIER),\n   suppose the mailbox contains UIDs 2 and 4.  Any of the following\n   responses would constitute a broken server implementation:\n\n   S: * VANISHED 1\n   S: * VANISHED 3\n   S: * VANISHED 5\n\n   However, any of these UIDs can easily be referenced by the VANISHED\n   (EARLIER) response.\n\n3.2.11.  CLOSED Response Code\n\n   The CLOSED response code has no parameters.  A server implementing\n   the extension defined in this document MUST return the CLOSED\n   response code when the currently selected mailbox is closed\n   implicitly using the SELECT/EXAMINE command on another mailbox.  The\n   CLOSED response code serves as a boundary between responses for the\n   previously opened mailbox (which was closed) and the newly selected\n   mailbox; all responses before the CLOSED response code relate to the\n   mailbox that was closed, and all subsequent responses relate to the\n   newly opened mailbox.\n\n   A server that advertises \"QRESYNC\" or \"CONDSTORE\" in the capability\n   string must return the CLOSED response code in this case, whether or\n   not a CONDSTORE enabling command was issued.\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 38]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   There is no need to return the CLOSED response code on completion of\n   the CLOSE or the UNSELECT [UNSELECT] command (or similar), whose\n   purpose is to close the currently selected mailbox without opening a\n   new one.\n\n4.  Long Command Lines (Update to RFC 2683)\n\n   While [RFC3501] doesn't specify a specific line-length limit, several\n   server implementations chose to implement the recommended line-length\n   limit suggested in Section 3.2.1.5 of [RFC2683] in order to protect\n   from Denial-of-Service attacks.  When the line-length limit is\n   exceeded, such servers return a BAD response (as required by\n   [RFC3501] in case of a syntactic error) and may even close the\n   connection.  Clients that support CONDSTORE/QRESYNC extensions can\n   trigger this limit by sending a long UID sequence (previously\n   returned by the server) in an extended SELECT or FETCH command.\n\n   This document updates recommended line-length limits specified in\n   Section 3.2.1.5 of [RFC2683].  While the advice in the first\n   paragraph of that section still applies (use compact message/UID set\n   representations), the 1000-octet limit suggested in the second\n   paragraph turns out to be quite problematic when the CONDSTORE and/or\n   QRESYNC extension is used.\n\n   The updated recommendation is as follows: a client should limit the\n   length of the command lines it generates to approximately 8192 octets\n   (including all quoted strings but not including literals).  If the\n   client is unable to group things into ranges so that the command line\n   is within that length, it should split the request into multiple\n   commands.  The client should use literals instead of long quoted\n   strings in order to keep the command length down.\n\n5.  QRESYNC Server Implementation Considerations\n\n   This section describes a minimalist implementation, a moderate\n   implementation, and an example of a full implementation.\n\n5.1.  Server Implementations That Don't Store Extra State\n\n   Strictly speaking, a server implementation that doesn't remember mod-\n   sequences associated with expunged messages can be considered\n   compliant with this specification.  Such implementations return all\n   expunged messages specified in the UID set of the UID FETCH\n   (VANISHED) command every time, without paying attention to the\n   specified CHANGEDSINCE mod-sequence.  Such implementations are\n   discouraged as they can end up returning VANISHED responses that are\n   bigger than the result of a UID SEARCH command for the same UID set.\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 39]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   A client can substantially reduce the size of VANISHED responses by\n   providing the server with message sequence match data (see\n   Section 3.2.5.2).  This is especially effective in the typical case\n   where no messages have been expunged, or all expunges were toward the\n   end of the mailbox.\n\n5.2.  Server Implementations Storing Minimal State\n\n   A server that stores the HIGHESTMODSEQ value at the time of the last\n   EXPUNGE can omit the VANISHED response when a client provides a\n   MODSEQ value that is equal to or higher than that HIGHESTMODSEQ value\n   because there have been no messages expunged during the time period\n   the client is concerned about.\n\n   A client providing message sequence match data can reduce the scope\n   as above.  In the case where there have been no expunges, the server\n   can ignore this data.\n\n5.3.  Additional State Required on the Server\n\n   When compared to the CONDSTORE extension, QRESYNC requires servers to\n   store an additional state associated with expunged messages.  Note\n   that implementations are not required to store this state in\n   persistent storage; however, use of persistent storage is advisable.\n\n   One possible way to correctly implement QRESYNC is to store a queue\n   of <UID set, mod-sequence> pairs. <UID set> can be represented as a\n   sequence of <min UID, max UID> pairs.\n\n   When messages are expunged, one or more entries are added to the\n   queue tail.\n\n   When the server receives a request to return messages expunged since\n   a given mod-sequence, it will search the queue from the tail (i.e.,\n   going from the highest expunged mod-sequence to the lowest) until it\n   sees the first record with a mod-sequence less than or equal to the\n   given mod-sequence or it reaches the head of the queue.\n\n   Note that indefinitely storing information about expunged messages\n   can cause storage and related problems for an implementation.  In the\n   worst case, this could result in almost 64 GB of storage for each\n   IMAP mailbox.  For example, consider an implementation that stores\n   <min UID, max UID, mod-sequence> triples for each range of messages\n   expunged at the same time.  Each triple requires 16 octets: 4 octets\n   for each of the two UIDs and 8 octets for the mod-sequence.  Assume\n   that there is a mailbox containing a single message with a UID of\n   2**32-1 (the maximum possible UID value), where messages had\n   previously existed with UIDs starting at 1 and have been expunged one\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 40]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   at a time.  For this mailbox alone, storage is required for the\n   triples <1, 1, modseq1>, <2, 2, modseq2>, ..., <2**32-2, 2**32-2,\n   modseq4294967294>.\n\n   Hence, implementations are encouraged to adopt strategies to protect\n   against such storage problems, such as limiting the size of the queue\n   used to store mod-sequences for expunged messages and \"expiring\"\n   older records when this limit is reached.  When the selected\n   implementation-specific queue limit is reached, the oldest record(s)\n   is deleted from the queue (note that such records are located at the\n   queue head).  For all such \"expired\" records, the server needs to\n   store a single mod-sequence, which is the highest mod-sequence for\n   all \"expired\" expunged messages.\n\n   If the client provides the message sequence match data, this can\n   heavily reduce the data cost of sending a complete set of missing\n   UIDs; thus, it reduces the problems for clients if a server is unable\n   to persist much of this queue.  If the queue contains data back to\n   the requested mod-sequence, this data can be ignored.\n\n   Also, note that if the UIDVALIDITY of the mailbox changes or if the\n   mailbox is deleted, then any state associated with expunged messages\n   doesn't need to be preserved and SHOULD be deleted.\n\n6.  Updated Synchronization Sequence\n\n   This section updates the description of optimized synchronization in\n   Section 6.1 of [IMAP-DISC], in the presence of QRESYNC.\n\n   An advanced disconnected mail client SHOULD use the QRESYNC extension\n   when it is supported by the server and SHOULD use CONDSTORE if it is\n   supported and QRESYNC is not.  The client uses the value from the\n   HIGHESTMODSEQ OK response code received on the mailbox opening to\n   determine if it needs to resynchronize.  Once the synchronization is\n   complete, it MUST cache the received value (unless the mailbox\n   UIDVALIDITY value has changed; see below).  The client MUST update\n   its copy of the HIGHESTMODSEQ value whenever the server sends a\n   subsequent HIGHESTMODSEQ OK response code.\n\n   After completing a full synchronization, the client MUST also take\n   note of any unsolicited MODSEQ FETCH data items and HIGHESTMODSEQ\n   response codes received from the server.  Whenever the client\n   receives a tagged response to a command, it checks the received\n   unsolicited responses to calculate the new HIGHESTMODSEQ value.  If\n   the HIGHESTMODSEQ response code is received, the client MUST use it\n   even if it has seen higher mod-sequences.  Otherwise, the client\n   calculates the highest value among all MODSEQ FETCH data items\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 41]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   received since the last tagged response.  If this value is bigger\n   than the client's copy of the HIGHESTMODSEQ value, then the client\n   MUST use this value as its new HIGHESTMODSEQ value.\n\n   Example:\n\n   C: A150 STORE 1:2 (UNCHANGEDSINCE 96) +FLAGS.SILENT \\Seen\n   S: * 1 FETCH (UID 6 MODSEQ (103))\n   S: * 2 FETCH (UID 7 MODSEQ (101))\n   S: * OK [HIGHESTMODSEQ 99] VANISHED reply with MODSEQ 100 is delayed\n   S: A150 OK [MODIFIED 3] done\n\n   C: A151 STORE 3 +FLAGS.SILENT \\Seen\n   S: * 3 FETCH (UID 8 MODSEQ (104))\n   S: A151 OK [HIGHESTMODSEQ 99] Still delaying VANISHED\n\n   C: A152 NOOP\n   S: * VANISHED 8\n   S: A153 OK [HIGHESTMODSEQ 104] done\n\n   Note: It is not safe to update the client's copy of the HIGHESTMODSEQ\n   value with a MODSEQ FETCH data item value as soon as it is received\n   because servers are not required to send MODSEQ FETCH data items in\n   increasing mod-sequence order.  Some commands may also delay EXPUNGE\n   (or VANISHED) replies with smaller mod-sequences.  These can lead to\n   the client missing some changes in case of connectivity loss.\n\n   When opening the mailbox for synchronization, the client uses the\n   QRESYNC parameter to the SELECT/EXAMINE command.  The QRESYNC\n   parameter is followed by the UIDVALIDITY and mailbox HIGHESTMODSEQ\n   values, as known to the client.  It can be optionally followed by the\n   set of UIDs, for example, if the client is only interested in partial\n   synchronization of the mailbox.  The client may also transmit a list\n   containing its knowledge of message numbers.\n\n   If the SELECT/EXAMINE command is successful, the client compares\n   UIDVALIDITY as described in step d-1 in Section 3 of the [IMAP-DISC].\n   If the cached UIDVALIDITY value matches the one returned by the\n   server and the server also returns the HIGHESTMODSEQ response code,\n   then the server reports expunged messages and returns flag changes\n   for all messages specified by the client in the UID set parameter (or\n   for all messages in the mailbox, if the client omitted the UID set\n   parameter).  At this point, the client is synchronized, except for\n   maybe the new messages.\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 42]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   If upon a successful SELECT/EXAMINE (QRESYNC) command the client\n   receives a NOMODSEQ OK untagged response (instead of the\n   HIGHESTMODSEQ response code), it MUST remove the last known\n   HIGHESTMODSEQ value from its cache and follow the more general\n   instructions in Section 3 of the [IMAP-DISC].\n\n   At this point, the client is in sync with the server regarding old\n   messages.  This client can now fetch information about new messages\n   (if requested by the user).\n\n   Step d (\"Server-to-client synchronization\") in Section 6.1 of\n   [IMAP-DISC] in the presence of the QRESYNC & CONDSTORE extensions is\n   amended as follows:\n\n   d) \"Server-to-client synchronization\" -- for each mailbox that\n      requires synchronization, do the following:\n\n   1a) Check the mailbox UIDVALIDITY (see Section 4.1 of [IMAP-DISC] for\n       more details) after issuing the SELECT/EXAMINE (QRESYNC) command.\n\n       If the UIDVALIDITY value returned by the server differs, the\n       client MUST:\n\n       *  empty the local cache of that mailbox;\n\n       *  \"forget\" the cached HIGHESTMODSEQ value for the mailbox; and\n\n       *  remove any pending \"actions\" that refer to UIDs in that\n          mailbox.  Note, this doesn't affect actions performed on\n          client-generated fake UIDs (see Section 5 of the [IMAP-DISC]).\n\n   1b) This step is no longer required.\n\n   2)  Fetch the current \"descriptors\".\n\n       I) Discover new messages.\n\n   3)  Fetch the bodies of any \"interesting\" messages that the client\n       doesn't already have.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 43]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   Example: The UIDVALIDITY value is the same, but the HIGHESTMODSEQ\n            value has changed on the server while the client was\n            offline:\n\n    C: A142 SELECT INBOX (QRESYNC (3857529045 20010715194032001 1:198))\n    S: * 172 EXISTS\n    S: * 1 RECENT\n    S: * OK [UNSEEN 12] Message 12 is first unseen\n    S: * OK [UIDVALIDITY 3857529045] UIDs valid\n    S: * OK [UIDNEXT 201] Predicted next UID\n    S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n    S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n    S: * OK [HIGHESTMODSEQ 20010715194045007] Highest\n          mailbox mod-sequence\n    S: * VANISHED (EARLIER) 1:5,7:8,10:15\n    S: * 2 FETCH (UID 6 MODSEQ (20010715205008000)\n        FLAGS (\\Deleted))\n    S: * 5 FETCH (UID 9 MODSEQ (20010715195517000)\n        FLAGS ($NoJunk $AutoJunk $MDNSent))\n       ...\n    S: A142 OK [READ-WRITE] SELECT completed\n\n7.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].\n\n   Non-terminals referenced but not defined below are as defined by\n   [RFC5234], [RFC3501], or [RFC4466].\n\n   Except as noted otherwise, all alphabetic characters are case-\n   insensitive.  The use of upper- or lower-case characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   capability          =/ \"CONDSTORE\" / \"QRESYNC\"\n\n   status-att          =/ \"HIGHESTMODSEQ\"\n                          ;; Extends non-terminal defined in [RFC3501].\n\n   status-att-val      =/ \"HIGHESTMODSEQ\" SP mod-sequence-valzer\n                          ;; Extends non-terminal defined in [RFC4466].\n                          ;; Value 0 denotes that the mailbox doesn't\n                          ;; support persistent mod-sequences\n                          ;; as described in Section 3.1.2.2.\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 44]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   store-modifier      =/ \"UNCHANGEDSINCE\" SP mod-sequence-valzer\n                          ;; Only a single \"UNCHANGEDSINCE\" may be\n                          ;; specified in a STORE operation.\n\n   fetch-modifier      =/ chgsince-fetch-mod\n                          ;; Conforms to the generic \"fetch-modifier\"\n                          ;; syntax defined in [RFC4466].\n\n   chgsince-fetch-mod  = \"CHANGEDSINCE\" SP mod-sequence-value\n                          ;; CHANGEDSINCE FETCH modifier conforms to\n                          ;; the fetch-modifier syntax.\n\n   fetch-att           =/ fetch-mod-sequence\n                          ;; Modifies original IMAP4 fetch-att.\n\n   fetch-mod-sequence  = \"MODSEQ\"\n\n   fetch-mod-resp      = \"MODSEQ\" SP \"(\" permsg-modsequence \")\"\n\n   msg-att-dynamic     =/ fetch-mod-resp\n\n   search-key          =/ search-modsequence\n                          ;; Modifies original IMAP4 search-key.\n                          ;;\n                          ;; This change applies to all commands\n                          ;; referencing this non-terminal -- in\n                          ;; particular, SEARCH, SORT, and THREAD.\n\n   search-modsequence  = \"MODSEQ\" [search-modseq-ext] SP\n                         mod-sequence-valzer\n\n   search-modseq-ext   = SP entry-name SP entry-type-req\n\n   resp-text-code      =/ \"HIGHESTMODSEQ\" SP mod-sequence-value /\n                          \"NOMODSEQ\" /\n                          \"MODIFIED\" SP sequence-set\n\n   entry-name          = entry-flag-name\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 45]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   entry-flag-name     = DQUOTE \"/flags/\" attr-flag DQUOTE\n                          ;; Each system or user-defined flag <flag>\n                          ;; is mapped to \"/flags/<flag>\".\n                          ;;\n                          ;; <entry-flag-name> follows the escape rules\n                          ;; used by \"quoted\" string as described in\n                          ;; Section 4.3 of [RFC3501]; e.g., for the\n                          ;; flag \\Seen, the corresponding <entry-name>\n                          ;; is \"/flags/\\\\seen\", and for the flag\n                          ;; $MDNSent, the corresponding <entry-name>\n                          ;; is \"/flags/$mdnsent\".\n\n   entry-type-resp     = \"priv\" / \"shared\"\n                          ;; Metadata item type.\n\n   entry-type-req      = entry-type-resp / \"all\"\n                          ;; Perform SEARCH operation on a private\n                          ;; metadata item, shared metadata item,\n                          ;; or both.\n\n   permsg-modsequence  = mod-sequence-value\n                          ;; Per-message mod-sequence.\n\n   mod-sequence-value  = 1*DIGIT\n                          ;; Positive unsigned 63-bit integer\n                          ;; (mod-sequence)\n                          ;; (1 <= n <= 9,223,372,036,854,775,807).\n\n   mod-sequence-valzer = \"0\" / mod-sequence-value\n\n   search-sort-mod-seq = \"(\" \"MODSEQ\" SP mod-sequence-value \")\"\n\n   select-param        =/ condstore-param\n                          ;; Conforms to the generic \"select-param\"\n                          ;; non-terminal syntax defined in [RFC4466].\n\n   condstore-param     = \"CONDSTORE\"\n\n   mailbox-data        =/ \"SEARCH\" [1*(SP nz-number) SP\n                          search-sort-mod-seq]\n\n   sort-data           = \"SORT\" [1*(SP nz-number) SP\n                          search-sort-mod-seq]\n                          ; Updates the SORT response from RFC 5256.\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 46]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   attr-flag           = \"\\\\Answered\" / \"\\\\Flagged\" / \"\\\\Deleted\" /\n                         \"\\\\Seen\" / \"\\\\Draft\" / attr-flag-keyword /\n                         attr-flag-extension\n                          ;; Does not include \"\\\\Recent\".\n\n   attr-flag-extension = \"\\\\\" atom\n                          ;; Future expansion.  Client implementations\n                          ;; MUST accept flag-extension flags.  Server\n                          ;; implementations MUST NOT generate\n                          ;; flag-extension flags, except as defined by\n                          ;; future standards or Standards Track\n                          ;; revisions of [RFC3501].\n\n   attr-flag-keyword   = atom\n\n   select-param        =/  \"QRESYNC\" SP \"(\" uidvalidity SP\n                       mod-sequence-value [SP known-uids]\n                       [SP seq-match-data] \")\"\n                       ;; Conforms to the generic select-param\n                       ;; syntax defined in [RFC4466].\n\n   seq-match-data      =  \"(\" known-sequence-set SP known-uid-set \")\"\n\n   uidvalidity         =  nz-number\n\n   known-uids          =  sequence-set\n                       ;; Sequence of UIDs; \"*\" is not allowed.\n\n   known-sequence-set  =  sequence-set\n                       ;; Set of message numbers corresponding to\n                       ;; the UIDs in known-uid-set, in ascending order.\n                       ;; * is not allowed.\n\n   known-uid-set       =  sequence-set\n                       ;; Set of UIDs corresponding to the messages in\n                       ;; known-sequence-set, in ascending order.\n                       ;; * is not allowed.\n\n   message-data        =/ expunged-resp\n\n   expunged-resp       =  \"VANISHED\" [SP \"(EARLIER)\"] SP known-uids\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 47]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   rexpunges-fetch-mod =  \"VANISHED\"\n                       ;; VANISHED UID FETCH modifier conforms\n                       ;; to the fetch-modifier syntax\n                       ;; defined in [RFC4466].  It is only\n                       ;; allowed in the UID FETCH command.\n\n   resp-text-code      =/ \"CLOSED\"\n\n8.  Security Considerations\n\n   As always, it is important to thoroughly test clients and servers\n   implementing QRESYNC, as it changes how the server reports expunged\n   messages to the client.\n\n   It is believed that the CONDSTORE or the QRESYNC extensions don't\n   raise any new security concerns that are not already discussed in\n   [RFC3501].  However, the availability of CONDSTORE may make it\n   possible for IMAP4 to be used in critical applications it could not\n   be used for previously, making correct IMAP server implementation and\n   operation even more important.\n\n9.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  The registry is currently located\n   at:\n\n      http://www.iana.org/assignments/imap-capabilities\n\n   This document defines the CONDSTORE and QRESYNC IMAP capabilities.\n   IANA has updated references for both extensions to point to this\n   document.\n\n10.  References\n\n10.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997.\n\n   [RFC2683]  Leiba, B., \"IMAP4 Implementation Recommendations\", RFC\n              2683, September 1999.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006.\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 48]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   [RFC5161]  Gulbrandsen, A. and A. Melnikov, \"The IMAP ENABLE\n              Extension\", RFC 5161, March 2008.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008.\n\n   [RFC5256]  Crispin, M. and K. Murchison, \"Internet Message Access\n              Protocol - SORT and THREAD Extensions\", RFC 5256, June\n              2008.\n\n   [RFC5464]  Daboo, C., \"The IMAP METADATA Extension\", RFC 5464,\n              February 2009.\n\n   [UIDPLUS]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              UIDPLUS extension\", RFC 4315, December 2005.\n\n10.2.  Informative References\n\n   [IMAP-DISC]\n              Melnikov, A., Ed., \"Synchronization Operations For\n              Disconnected Imap4 Clients\", RFC 4549, June 2006.\n\n   [NTP]      Mills, D., Martin, J., Burbank, J., and W. Kasch, \"Network\n              Time Protocol Version 4: Protocol and Algorithms\n              Specification\", RFC 5905, June 2010.\n\n   [RFC2180]  Gahrns, M., \"IMAP4 Multi-Accessed Mailbox Practice\", RFC\n              2180, July 1997.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005.\n\n   [RFC4731]  Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n              Command for Controlling What Kind of Information Is\n              Returned\", RFC 4731, November 2006.\n\n   [RFC5257]  Daboo, C. and R. Gellens, \"Internet Message Access\n              Protocol - ANNOTATE Extension\", RFC 5257, June 2008.\n\n   [RFC5267]  Cridland, D. and C. King, \"Contexts for IMAP4\", RFC 5267,\n              July 2008.\n\n   [RFC6851]  Gulbrandsen, A. and N. Freed, \"Internet Message Access\n              Protocol (IMAP) - MOVE Extension\", RFC 6851, January 2013.\n\n   [UNSELECT] Melnikov, A., \"Internet Message Access Protocol (IMAP)\n              UNSELECT command\", RFC 3691, February 2004.\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 49]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\nAppendix A.  Changes since RFC 4551\n\n   Changed mod-sequences to be unsigned 63-bit values (instead of\n   unsigned 64-bit values).\n\n   Fixed the following errata, as posted on <http://www.rfc-editor.org>:\n\n   o  Errata ID 3401 (\"several typos in UNCHANGEDSINCE spelling\")\n   o  Errata ID 3506 (\"invalid ABNF for the MODIFIED response code\")\n   o  Errata ID 3509 (\"correction to an example\")\n\n   Clarified that the returning of HIGHESTMODSEQ/NOMODSEQ response codes\n   is only required once a CONDSTORE enabling command is issued.\n\n   Clarified that if multiple mod-sequences (for different metadata\n   items) are associated with a message, then all of them affecting a\n   particular STORE UNCHANGEDSINCE must be checked.\n\n   Updated references.\n\n   Made editorial corrections.\n\nAppendix B.  Changes since RFC 5162\n\n   Changed mod-sequences to be unsigned 63-bit values (instead of\n   unsigned 64-bit values).\n\n   Addressed the following errata, as posted on\n   <http://www.rfc-editor.org>:\n\n   o  Errata ID 1365 (\"clarified that QRESYNC is only enabled when\n      ENABLED QRESYNC is returned\")\n   o  Errata ID 1807 (\"unsolicited FETCH responses must include UID\n      fetch response item\")\n   o  Errata ID 1808 (\"HIGHESTMODSEQ response code must not be returned\n      for CLOSE\")\n   o  Errata ID 1809 (\"clarify how updated mailbox mod-sequence is\n      calculated\")\n   o  Errata ID 1810 (\"server must send untagged events to client in a\n      way that client doesn't lose any changes in case of connectivity\n      loss\")\n   o  Errata ID 3322 (\"VANISHED responses must not reference non-\n      existing UIDs\")\n\n   Clarified that ENABLE QRESYNC CONDSTORE and ENABLE CONDSTORE QRESYNC\n   are equivalent.\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 50]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\n   Changed the requirement to return VANISHED from SHOULD to MUST as per\n   the mailing list discussion.  The only exception is for mailboxes\n   that return the NOMODSEQ response code when they are selected.\n\n   Specified that IMAP SETMETADATA changes update per-mailbox\n   HIGHESTMODSEQ.\n\n   Clarified that per-message annotations are also considered\n   \"metadata\".\n\n   Fixed some examples to report data that match requirements specified\n   in the document.\n\n   Clarified some text and made some requirements normative.  Also,\n   corrected a couple of SHOULDs to be MUSTs.\n\n   Updated references.\n\n   Made editorial corrections.\n\nAppendix C.  Acknowledgements\n\n   Thank you to Steve Hole for co-editing RFC 4551.\n\n   In this revision of the document, the authors also acknowledge the\n   feedback provided by Timo Sirainen, Jan Kundrat, Pete Maclean, Barry\n   Leiba, Eliot Lear, Chris Newman, Claudio Allocchio, Michael Slusarz,\n   Bron Gondwana, Arnt Gulbrandsen, David Black, Hoa V. DINH, and Nick\n   Hudson.\n\n   Mark Crispin contributed to RFCs 4551 and 5162 that this document is\n   replacing, and much of his contribution remains in this merged\n   document.\n\n   See also the list of people who contributed to RFC 4551, which this\n   document obsoletes.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 51]\n\f\nRFC 7162                IMAP CONDSTORE & QRESYNC                May 2014\n\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Ltd\n   5 Castle Business Village\n   36 Station Road\n   Hampton, Middlesex  TW12 2BX\n   UK\n\n   EMail: Alexey.Melnikov@isode.com\n\n\n   Dave Cridland\n   Surevine Ltd\n   PO Box 1136\n   Guildford, Surrey  GU1 9ND\n   UK\n\n   EMail: dave.cridland@surevine.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov & Cridland          Standards Track                   [Page 52]\n\f\n"
  },
  {
    "path": "rfc/rfc7377.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                          B. Leiba\nRequest for Comments: 7377                           Huawei Technologies\nObsoletes: 6237                                              A. Melnikov\nUpdates: 4466                                              Isode Limited\nCategory: Standards Track                                   October 2014\nISSN: 2070-1721\n\n\n                  IMAP4 Multimailbox SEARCH Extension\n\nAbstract\n\n   The IMAP4 specification allows the searching of only the selected\n   mailbox.  A user often wants to search multiple mailboxes, and a\n   client that wishes to support this must issue a series of SELECT and\n   SEARCH commands, waiting for each to complete before moving on to the\n   next.  This extension allows a client to search multiple mailboxes\n   with one command, limiting the delays caused by many round trips and\n   not requiring disruption of the currently selected mailbox.  This\n   extension also uses MAILBOX, UIDVALIDITY, and TAG fields in ESEARCH\n   responses, allowing a client to pipeline the searches if it chooses.\n   This document updates RFC 4466 and obsoletes RFC 6237.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc7377.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 1]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\nCopyright Notice\n\n   Copyright (c) 2014 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   1.1.  Conventions Used in This Document . . . . . . . . . . . . .   3\n   2.  New ESEARCH Command . . . . . . . . . . . . . . . . . . . . .   3\n   2.1.  The ESEARCH Response  . . . . . . . . . . . . . . . . . . .   4\n   2.2.  Source Options: Specifying Mailboxes to Search  . . . . . .   5\n   2.3.  Strictness in Search Matches  . . . . . . . . . . . . . . .   7\n   2.4.  Server-Side Limitations on Search Volume  . . . . . . . . .   7\n   3.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .   7\n   4.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   8\n   5.  Security Considerations . . . . . . . . . . . . . . . . . . .   9\n   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  10\n   7.  Changes since RFC 6237  . . . . . . . . . . . . . . . . . . .  10\n   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  10\n   8.1.  Normative References  . . . . . . . . . . . . . . . . . . .  10\n   8.2.  Informative References  . . . . . . . . . . . . . . . . . .  11\n   Appendix A.  Acknowledgments  . . . . . . . . . . . . . . . . . .  11\n   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  11\n\n1.  Introduction\n\n   The IMAP4 specification allows the searching of only the selected\n   mailbox.  A user often wants to search multiple mailboxes, and a\n   client that wishes to support this must issue a series of SELECT and\n   SEARCH commands, waiting for each to complete before moving on to the\n   next.  The commands can't be pipelined, because the server might run\n   them in parallel and the untagged SEARCH responses could not then be\n   distinguished from each other.\n\n\n\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 2]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   This extension allows a client to search multiple mailboxes with one\n   command and includes MAILBOX and TAG fields in the ESEARCH response,\n   yielding the following advantages:\n\n   o  A single command limits the number of round trips needed to search\n      a set of mailboxes.\n\n   o  A single command eliminates the need to wait for one search to\n      complete before starting the next.\n\n   o  A single command allows the server to optimize the search if it\n      can.\n\n   o  A command that is not dependent upon the selected mailbox\n      eliminates the need to disrupt the selection state or to open\n      another IMAP connection.\n\n   o  The MAILBOX, UIDVALIDITY, and TAG fields in the responses allow a\n      client to distinguish which responses go with which search (and\n      which mailbox).  A client can safely pipeline these search\n      commands without danger of confusion.  The addition of the MAILBOX\n      and UIDVALIDITY fields updates the search-correlator item defined\n      in [RFC4466].\n\n   This extension was previously published in an Experimental RFC.\n   There is now implementation experience, giving confidence in the\n   protocol, so this document puts the extension on the Standards Track,\n   with some minor updates that were informed by the implementation\n   experience.  A brief summary of changes is in Section 7.\n\n1.1.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server, and \"S:\" indicates lines sent by the server to the\n   client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n2.  New ESEARCH Command\n\n   Arguments:  OPTIONAL source options\n               OPTIONAL result options\n               OPTIONAL charset specification (see [RFC2978])\n               searching criteria (one or more)\n\n   Responses:  REQUIRED untagged response: ESEARCH\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 3]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   Result:     OK -- search completed\n               NO -- error: cannot search that charset or criteria\n               BAD -- command unknown or arguments invalid\n\n   This section defines a new ESEARCH command, which works similarly to\n   the UID SEARCH command described in Section 2.6.1 of [RFC4466]\n   (initially described in Section 6.4.4 of [RFC3501] and extended by\n   [RFC4731]).\n\n   The ESEARCH command further extends searching by allowing for\n   optional source and result options.  This document does not define\n   any new result options (see Section 3.1 of [RFC4731]).  A server that\n   supports this extension includes \"MULTISEARCH\" in its IMAP capability\n   string.\n\n   Because there has been confusion about this, it is worth pointing out\n   that with ESEARCH, as with any SEARCH or UID SEARCH command, it MUST\n   NOT be considered an error if the search terms include a range of\n   message numbers that extends (or, in fact, starts) beyond the end of\n   the mailbox.  For example, a client might want to establish a rolling\n   window through the search results this way:\n\n   C: tag1 UID ESEARCH FROM \"frobozz\" 1:100\n\n   ... followed later by this:\n\n   C: tag1 UID ESEARCH FROM \"frobozz\" 101:200\n\n   ... and so on.\n\n   This tells the server to match only the first hundred messages in the\n   mailbox the first time, the second hundred the second time, etc.  In\n   fact, it might likely allow the server to optimize the search\n   significantly.  In the above example, whether the mailbox contains\n   50, 150, or 250 messages, neither of the search commands shown will\n   result in an error.  It is up to the client to know when to stop\n   moving its search window.\n\n2.1.  The ESEARCH Response\n\n   In response to an ESEARCH command, the server MUST return ESEARCH\n   responses [RFC4731] (that is, not SEARCH responses).  Because message\n   numbers are not useful for mailboxes that are not selected, the\n   responses MUST contain information about UIDs, not message numbers.\n   This is true even if the source options specify that only the\n   selected mailbox be searched.\n\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 4]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   Presence of a source option in the absence of a result option implies\n   the \"ALL\" result option (see Section 3.1 of [RFC4731]).  Note that\n   this is not the same as the result from the SEARCH command described\n   in the IMAP base protocol [RFC3501].\n\n   Source options describe which mailboxes must be searched for\n   messages.  An ESEARCH command with source options does not affect\n   which mailbox, if any, is currently selected, regardless of which\n   mailboxes are searched.\n\n   For each mailbox satisfying the source options, a single ESEARCH\n   response MUST be returned if any messages in that mailbox match the\n   search criteria.  An ESEARCH response MUST NOT be returned for\n   mailboxes that contain no matching messages.  This is true even when\n   result options such as MIN, MAX, and COUNT are specified (see\n   Section 3.1 of [RFC4731]), and the values returned (lowest UID\n   matched, highest UID matched, and number of messages matched,\n   respectively) apply to the mailbox reported in that ESEARCH response.\n\n   Note that it is possible for an ESEARCH command to return no untagged\n   responses (no ESEARCH responses at all) in the case that there are no\n   matches to the search in any of the mailboxes that satisfy the source\n   options.  Clients can detect this situation by finding the tagged OK\n   response without having received any matching untagged ESEARCH\n   responses.\n\n   Each ESEARCH response MUST contain the MAILBOX, TAG, and UIDVALIDITY\n   correlators.  Correlators allow clients to issue several ESEARCH\n   commands at once (pipelined).  If the SEARCHRES [RFC5182] extension\n   is used in an ESEARCH command, that ESEARCH command MUST be executed\n   by the server after all previous SEARCH/ESEARCH commands have\n   completed and before any subsequent SEARCH/ESEARCH commands are\n   executed.  The server MAY perform consecutive ESEARCH commands in\n   parallel as long as none of them use the SEARCHRES extension.\n\n2.2.  Source Options: Specifying Mailboxes to Search\n\n   The source options, if present, MUST contain a mailbox specifier as\n   defined in the IMAP NOTIFY extension [RFC5465], Section 6 (using the\n   \"filter-mailboxes\" ABNF item), with the following differences:\n\n   1.  The \"selected-delayed\" specifier is not valid here.\n\n   2.  A \"subtree-one\" specifier is added.  The \"subtree\" specifier\n       results in a search of the specified mailbox and all selectable\n       mailboxes that are subordinate to it, through an indefinitely\n\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 5]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n       deep hierarchy.  The \"subtree-one\" specifier results in a search\n       of the specified mailbox and all selectable child mailboxes, one\n       hierarchy level down.\n\n   If \"subtree\" is specified, the server MUST defend against loops in\n   the hierarchy (for example, those caused by recursive file-system\n   links within the message store).  The server SHOULD do this by\n   keeping track of the mailboxes that have been searched and by\n   terminating the hierarchy traversal when a repeat is found.  If it\n   cannot do that, it MAY do it by limiting the hierarchy depth.\n\n   If the source options are not present, the value \"selected\" is\n   assumed -- that is, only the currently selected mailbox is searched.\n\n   The \"personal\" source option is a particularly convenient way to\n   search all of the current user's mailboxes.  Note that there is no\n   way to use wildcard characters to search all mailboxes; the\n   \"mailboxes\" source option does not do wildcard expansion.\n\n   If the source options include (or default to) \"selected\", the IMAP\n   session MUST be in \"selected\" state.  If the source options specify\n   other mailboxes and NOT \"selected\", then the IMAP session MUST be in\n   either \"selected\" or \"authenticated\" state.  If the session is not in\n   a correct state, the ESEARCH command MUST return a \"BAD\" result.\n\n   The client SHOULD NOT provide source options that resolve to\n   including the same mailbox more than once.  A server can, of course,\n   remove the duplicates before processing, but the server MAY return\n   \"BAD\" to an ESEARCH command with duplicate source mailboxes.\n\n   If the server supports the SEARCHRES [RFC5182] extension, then the\n   \"SAVE\" result option is valid only if \"selected\" is specified or\n   defaulted to as the sole mailbox to be searched.  If any source\n   option other than \"selected\" is specified, the ESEARCH command MUST\n   return a \"BAD\" result.\n\n   If the server supports the CONTEXT=SEARCH and/or CONTEXT=SORT\n   extension [RFC5267], then the following additional rules apply:\n\n   o  The CONTEXT return option (Section 4.2 of [RFC5267]) can be used\n      with an ESEARCH command.\n\n   o  If the UPDATE return option is used (Section 4.3 of [RFC5267]), it\n      MUST apply only to the currently selected mailbox.  If UPDATE is\n      used and there is no mailbox currently selected, the ESEARCH\n      command MUST return a \"BAD\" result.\n\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 6]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   o  The PARTIAL search return option (Section 4.4 of [RFC5267]) can be\n      used and applies to each mailbox searched by the ESEARCH command.\n\n   If the server supports the Access Control List (ACL) [RFC4314]\n   extension, then the logged-in user is required to have the \"r\" right\n   for each mailbox she wants to search.  In addition, any mailboxes\n   that are not explicitly named (accessed through \"personal\" or\n   \"subtree\", for example) are required to have the \"l\" right.\n   Mailboxes matching the source options for which the logged-in user\n   lacks sufficient rights MUST be ignored by the ESEARCH command\n   processing.  In particular, ESEARCH responses MUST NOT be returned\n   for those mailboxes.\n\n2.3.  Strictness in Search Matches\n\n   The base IMAP SEARCH command (Section 6.4.4. of [RFC3501]) requires\n   strict substring matching in text searches.  Many servers, however,\n   use search engines that match strings in different ways, for example,\n   matching \"swim\" to both \"swam\" and \"swum\" or only doing full word\n   matching (where \"swim\" will not match \"swimming\").  This is covered\n   by the \"Fuzzy Search\" extension to IMAP [RFC6203], and that extension\n   is compatible with this one and can be combined with it.\n\n   Whether or not Fuzzy Search is implemented or used, this extension\n   explicitly allows flexible searching with respect to TEXT and BODY\n   searches.  Servers MAY use fuzzy text matching in multimailbox\n   searches.\n\n2.4.  Server-Side Limitations on Search Volume\n\n   To avoid having a search use more than a reasonable share of server\n   resources, servers MAY apply limits that go beyond loop protection,\n   such as limits on the number of mailboxes that may be searched at\n   once and/or limits on the number or total size of messages searched.\n   A server can apply those limits up front, responding with \"NO\n   [LIMIT]\" if a limit is exceeded (see [RFC5530] for information about\n   response codes).  Alternatively, a server can process the search and\n   terminate it when a limit is exceeded, responding with \"OK [LIMIT]\"\n   and returning partial results.  Note that searches that return\n   partial results can cause complexity for client implementations and\n   confusion to users.\n\n3.  Examples\n\n   In the following example, note that two ESEARCH commands are\n   pipelined and that the server is running them in parallel,\n   interleaving a response to the second search amid the responses to\n   the first (watch the tags).\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 7]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   C: tag1 ESEARCH IN (mailboxes \"folder1\" subtree \"folder2\") unseen\n   C: tag2 ESEARCH IN (mailboxes \"folder1\" subtree-one \"folder2\")\n   subject \"chad\"\n   S: * ESEARCH (TAG \"tag1\" MAILBOX \"folder1\" UIDVALIDITY 1) UID ALL\n   4001,4003,4005,4007,4009\n   S: * ESEARCH (TAG \"tag2\" MAILBOX \"folder1\" UIDVALIDITY 1) UID ALL\n   3001:3004,3788\n   S: * ESEARCH (TAG \"tag1\" MAILBOX \"folder2/banana\" UIDVALIDITY 503)\n   UID ALL 3002,4004\n   S: * ESEARCH (TAG \"tag1\" MAILBOX \"folder2/peach\" UIDVALIDITY 3) UID\n   ALL 921691\n   S: tag1 OK done\n   S: * ESEARCH (TAG \"tag2\" MAILBOX \"folder2/salmon\" UIDVALIDITY\n   1111111) UID ALL 50003,50006,50009,50012\n   S: tag2 OK done\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) as described in [RFC5234].  Terms not defined here are\n   taken from [RFC3501], [RFC5465], or [RFC4466].\n\n   command-auth =/  esearch\n           ; Update definition from IMAP base [RFC3501].\n           ; Add new \"esearch\" command.\n\n   command-select =/  esearch\n           ; Update definition from IMAP base [RFC3501].\n           ; Add new \"esearch\" command.\n\n   filter-mailboxes-other =/  (\"subtree-one\" SP one-or-more-mailbox)\n           ; Update definition from IMAP Notify [RFC5465].\n           ; Add new \"subtree-one\" selector.\n\n   filter-mailboxes-selected =  \"selected\"\n           ; Update definition from IMAP Notify [RFC5465].\n           ; We forbid the use of \"selected-delayed\".\n\n   one-correlator =  (\"TAG\" SP tag-string) / (\"MAILBOX\" SP astring) /\n           (\"UIDVALIDITY\" SP nz-number)\n           ; Each correlator MUST appear exactly once.\n\n   scope-option =  scope-option-name [SP scope-option-value]\n           ; No options defined here.  Syntax for future extensions.\n\n   scope-option-name =  tagged-ext-label\n           ; No options defined here.  Syntax for future extensions.\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 8]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   scope-option-value =  tagged-ext-val\n           ; No options defined here.  Syntax for future extensions.\n\n   scope-options =  scope-option *(SP scope-option)\n           ; A given option may only appear once.\n           ; No options defined here.  Syntax for future extensions.\n\n   esearch =  \"ESEARCH\" [SP esearch-source-opts]\n           [SP search-return-opts] SP search-program\n\n   search-correlator =  SP \"(\" one-correlator *(SP one-correlator) \")\"\n           ; Updates definition in IMAP4 ABNF [RFC4466].\n\n   esearch-source-opts =  \"IN\" SP \"(\" source-mbox [SP\n           \"(\" scope-options \")\"] \")\"\n\n   source-mbox =  filter-mailboxes *(SP filter-mailboxes)\n           ; \"filter-mailboxes\" is defined in IMAP Notify [RFC5465].\n           ; See updated definition of filter-mailboxes-other, above.\n           ; See updated definition of filter-mailboxes-selected, above.\n\n5.  Security Considerations\n\n   This new IMAP ESEARCH command allows a single command to search many\n   mailboxes at once.  On the one hand, a client could do that by\n   sending many IMAP SEARCH commands.  On the other hand, this makes it\n   easier for a client to overwork a server by sending a single command\n   that results in an expensive search of tens of thousands of\n   mailboxes.  Server implementations need to be aware of that and\n   provide mechanisms that prevent a client from adversely affecting\n   other users.  Limitations on the number of mailboxes that may be\n   searched in one command and/or on the server resources that will be\n   devoted to responding to a single client, are reasonable limitations\n   for an implementation to impose (see also Section 2.4).\n\n   Implementations MUST, of course, apply access controls appropriately,\n   limiting a user's access to ESEARCH in the same way its access is\n   limited for any other IMAP commands.  This extension has no data-\n   access risks beyond what may exist in the unextended IMAP\n   implementation.\n\n   Mailboxes matching the source options for which the logged-in user\n   lacks sufficient rights MUST be ignored by the ESEARCH command\n   processing (see the paragraph about this in Section 2.2).  In\n   particular, any attempt to distinguish insufficient access from non-\n   existent mailboxes may expose information about the mailbox hierarchy\n   that isn't otherwise available to the client.\n\n\n\n\nLeiba & Melnikov             Standards Track                    [Page 9]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   If \"subtree\" is specified, the server MUST defend against loops in\n   the hierarchy (see the paragraph about this in Section 2.2).\n\n6.  IANA Considerations\n\n   The \"Internet Message Access Protocol (IMAP) Capabilities Registry\"\n   is currently located at\n   <http://www.iana.org/assignments/imap-capabilities>.\n\n   IANA has changed the reference for the IMAP capability \"MULTISEARCH\"\n   to point to this document.\n\n7.  Changes since RFC 6237\n\n   o  Change to Standards Track.\n\n   o  Added paragraph about duplicate mailboxes.\n\n   o  Added Section 2.3 about Fuzzy Search.\n\n8.  References\n\n8.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119, March 1997,\n              <http://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC2978]  Freed, N. and J. Postel, \"IANA Charset Registration\n              Procedures\", BCP 19, RFC 2978, October 2000,\n              <http://www.rfc-editor.org/info/rfc2978>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, March 2003,\n              <http://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, December 2005,\n              <http://www.rfc-editor.org/info/rfc4314>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, April 2006,\n              <http://www.rfc-editor.org/info/rfc4466>.\n\n   [RFC4731]  Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n              Command for Controlling What Kind of Information Is\n              Returned\", RFC 4731, November 2006,\n              <http://www.rfc-editor.org/info/rfc4731>.\n\n\n\nLeiba & Melnikov             Standards Track                   [Page 10]\n\f\nRFC 7377           IMAP4 Multimailbox SEARCH Extension      October 2014\n\n\n   [RFC5182]  Melnikov, A., \"IMAP Extension for Referencing the Last\n              SEARCH Result\", RFC 5182, March 2008,\n              <http://www.rfc-editor.org/info/rfc5182>.\n\n   [RFC5234]  Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234, January 2008,\n              <http://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5267]  Cridland, D. and C. King, \"Contexts for IMAP4\", RFC 5267,\n              July 2008, <http://www.rfc-editor.org/info/rfc5267>.\n\n   [RFC5465]  Gulbrandsen, A., King, C., and A. Melnikov, \"The IMAP\n              NOTIFY Extension\", RFC 5465, February 2009,\n              <http://www.rfc-editor.org/info/rfc5465>.\n\n   [RFC5530]  Gulbrandsen, A., \"IMAP Response Codes\", RFC 5530, May\n              2009, <http://www.rfc-editor.org/info/rfc5530>.\n\n8.2.  Informative References\n\n   [RFC6203]  Sirainen, T., \"IMAP4 Extension for Fuzzy Search\", RFC\n              6203, March 2011,\n              <http://www.rfc-editor.org/info/rfc6203>.\n\nAcknowledgments\n\n   The authors gratefully acknowledge feedback provided by Timo\n   Sirainen, Peter Coates, Arnt Gulbrandsen, and Chris Newman.\n\nAuthors' Addresses\n\n   Barry Leiba\n   Huawei Technologies\n\n   Phone: +1 646 827 0648\n   EMail: barryleiba@computer.org\n   URI:   http://internetmessagingtechnology.org/\n\n\n   Alexey Melnikov\n   Isode Limited\n   14 Castle Mews\n   Hampton, Middlesex  TW12 2NP\n   United Kingdom\n\n   EMail: Alexey.Melnikov@isode.com\n   URI:   http://www.melnikov.ca/\n\n\n\n\nLeiba & Melnikov             Standards Track                   [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc7628.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                          W. Mills\nRequest for Comments: 7628                                     Microsoft\nCategory: Standards Track                                   T. Showalter\nISSN: 2070-1721\n                                                           H. Tschofenig\n                                                                ARM Ltd.\n                                                             August 2015\n\n\n  A Set of Simple Authentication and Security Layer (SASL) Mechanisms\n                               for OAuth\n\nAbstract\n\n   OAuth enables a third-party application to obtain limited access to a\n   protected resource, either on behalf of a resource owner by\n   orchestrating an approval interaction or by allowing the third-party\n   application to obtain access on its own behalf.\n\n   This document defines how an application client uses credentials\n   obtained via OAuth over the Simple Authentication and Security Layer\n   (SASL) to access a protected resource at a resource server.  Thereby,\n   it enables schemes defined within the OAuth framework for non-HTTP-\n   based application protocols.\n\n   Clients typically store the user's long-term credential.  This does,\n   however, lead to significant security vulnerabilities, for example,\n   when such a credential leaks.  A significant benefit of OAuth for\n   usage in those clients is that the password is replaced by a shared\n   secret with higher entropy, i.e., the token.  Tokens typically\n   provide limited access rights and can be managed and revoked\n   separately from the user's long-term password.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc7628.\n\n\n\n\n\nMills, et al.                Standards Track                    [Page 1]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\nCopyright Notice\n\n   Copyright (c) 2015 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3\n   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   5\n   3.  OAuth SASL Mechanism Specifications . . . . . . . . . . . . .   6\n     3.1.  Initial Client Response . . . . . . . . . . . . . . . . .   7\n       3.1.1.  Reserved Key/Values . . . . . . . . . . . . . . . . .   8\n     3.2.  Server's Response . . . . . . . . . . . . . . . . . . . .   8\n       3.2.1.  OAuth Identifiers in the SASL Context . . . . . . . .   9\n       3.2.2.  Server Response to Failed Authentication  . . . . . .   9\n       3.2.3.  Completing an Error Message Sequence  . . . . . . . .  10\n     3.3.  OAuth Access Token Types using Keyed Message Digests  . .  11\n   4.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .  12\n     4.1.  Successful Bearer Token Exchange  . . . . . . . . . . . .  12\n     4.2.  Successful OAuth 1.0a Token Exchange  . . . . . . . . . .  13\n     4.3.  Failed Exchange . . . . . . . . . . . . . . . . . . . . .  14\n     4.4.  SMTP Example of a Failed Negotiation  . . . . . . . . . .  15\n   5.  Security Considerations . . . . . . . . . . . . . . . . . . .  16\n   6.  Internationalization Considerations . . . . . . . . . . . . .  17\n   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  18\n     7.1.  SASL Registration . . . . . . . . . . . . . . . . . . . .  18\n   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  19\n     8.1.  Normative References  . . . . . . . . . . . . . . . . . .  19\n     8.2.  Informative References  . . . . . . . . . . . . . . . . .  20\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  21\n   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  21\n\n\n\n\n\n\n\n\n\n\nMills, et al.                Standards Track                    [Page 2]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n1.  Introduction\n\n   OAuth 1.0a [RFC5849] and OAuth 2.0 [RFC6749] are protocol frameworks\n   that enable a third-party application to obtain limited access to a\n   protected resource, either by orchestrating an approval interaction\n   on behalf of a resource owner or by allowing the third-party\n   application to obtain access on its own behalf.\n\n   The core OAuth 2.0 specification [RFC6749] specifies the interaction\n   between the OAuth client and the authorization server; it does not\n   define the interaction between the OAuth client and the resource\n   server for the access to a protected resource using an access token.\n   Instead, the OAuth client to resource server interaction is described\n   in separate specifications, such as the bearer token specification\n   [RFC6750].  OAuth 1.0a includes the protocol specification for the\n   communication between the OAuth client and the resource server in\n   [RFC5849].\n\n   The main use cases for OAuth 1.0a and OAuth 2.0 have so far focused\n   on an HTTP-based [RFC7230] environment only.  This document\n   integrates OAuth 1.0a and OAuth 2.0 into non-HTTP-based applications\n   using the integration into the Simple Authentication and Security\n   Layer (SASL) [RFC4422].  Hence, this document takes advantage of the\n   OAuth protocol and its deployment base to provide a way to use SASL\n   to gain access to resources when using non-HTTP-based protocols, such\n   as the Internet Message Access Protocol (IMAP) [RFC3501] and the\n   Simple Mail Transfer Protocol (SMTP) [RFC5321].  This document gives\n   examples of use in IMAP and SMTP.\n\n   To illustrate the impact of integrating this specification into an\n   OAuth-enabled application environment, Figure 1 shows the abstract\n   message flow of OAuth 2.0 [RFC6749].  As indicated in the figure,\n   this document impacts the exchange of messages (E) and (F) since SASL\n   is used for interaction between the client and the resource server\n   instead of HTTP.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMills, et al.                Standards Track                    [Page 3]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n                                                              ----+\n   +--------+                                  +---------------+  |\n   |        |--(A)-- Authorization Request --->|   Resource    |  |\n   |        |                                  |    Owner      |  |Plain\n   |        |<-(B)------ Access Grant ---------|               |  |OAuth\n   |        |                                  +---------------+  |2.0\n   |        |                                                     |\n   |        |         Client Credentials &     +---------------+  |\n   |        |--(C)------ Access Grant -------->| Authorization |  |\n   | Client |                                  |    Server     |  |\n   |        |<-(D)------ Access Token ---------|               |  |\n   |        |      (w/ Optional Refresh Token) +---------------+  |\n   |        |                                                 ----+\n   |        |                                                 ----+\n   |        |                                  +---------------+  |\n   |        |                                  |               |  |OAuth\n   |        |--(E)------ Access Token -------->|   Resource    |  |over\n   |        |                                  |    Server     |  |SASL\n   |        |<-(F)---- Protected Resource -----|               |  |\n   |        |                                  |               |  |\n   +--------+                                  +---------------+  |\n                                                              ----+\n\n                     Figure 1: OAuth 2.0 Protocol Flow\n\n   SASL is a framework for providing authentication and data security\n   services in connection-oriented protocols via replaceable\n   authentication mechanisms.  It provides a structured interface\n   between protocols and mechanisms.  The resulting framework allows new\n   protocols to reuse existing authentication mechanisms and allows old\n   protocols to make use of new authentication mechanisms.  The\n   framework also provides a protocol for securing subsequent exchanges\n   within a data security layer.\n\n   When OAuth is integrated into SASL, the high-level steps are as\n   follows:\n\n   (A)  The client requests authorization from the resource owner.  The\n        authorization request can be made directly to the resource owner\n        (as shown) or indirectly via the authorization server as an\n        intermediary.\n\n   (B)  The client receives an authorization grant, which is a\n        credential representing the resource owner's authorization,\n        expressed using one of the grant types defined in [RFC6749] or\n        [RFC5849] or using an extension grant type.  The authorization\n        grant type depends on the method used by the client to request\n\n\n\n\nMills, et al.                Standards Track                    [Page 4]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n        authorization and the types supported by the authorization\n        server.\n\n   (C)  The client requests an access token by authenticating with the\n        authorization server and presenting the authorization grant.\n\n   (D)  The authorization server authenticates the client and validates\n        the authorization grant, and if valid, it issues an access\n        token.\n\n   (E)  The client requests the protected resource from the resource\n        server and authenticates it by presenting the access token.\n\n   (F)  The resource server validates the access token, and if valid, it\n        indicates a successful authentication.\n\n   Again, steps (E) and (F) are not defined in [RFC6749] (but are\n   described in, for example, [RFC6750] for the OAuth bearer token\n   instead) and are the main functionality specified within this\n   document.  Consequently, the message exchange shown in Figure 1 is\n   the result of this specification.  The client will generally need to\n   determine the authentication endpoints (and perhaps the service\n   endpoints) before the OAuth 2.0 protocol exchange messages in steps\n   (A)-(D) are executed.  The discovery of the resource owner,\n   authorization server endpoints, and client registration are outside\n   the scope of this specification.  The client must discover the\n   authorization endpoints using a discovery mechanism such as OpenID\n   Connect Discovery (OIDCD) [OpenID.Discovery] or WebFinger using host-\n   meta [RFC7033].  Once credentials are obtained, the client proceeds\n   to steps (E) and (F) defined in this specification.  Authorization\n   endpoints MAY require client registration, and generic clients SHOULD\n   support the Dynamic Client Registration protocol [RFC7591].\n\n   OAuth 1.0a follows a similar model but uses a different terminology\n   and does not separate the resource server from the authorization\n   server.\n\n2.  Terminology\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   [RFC2119].\n\n   The reader is assumed to be familiar with the terms used in the OAuth\n   2.0 specification [RFC6749] and SASL [RFC4422].\n\n\n\n\n\nMills, et al.                Standards Track                    [Page 5]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  Line breaks have been inserted for\n   readability.\n\n   Note that the IMAP SASL specification requires base64 encoding, as\n   specified in Section 4 of [RFC4648].\n\n3.  OAuth SASL Mechanism Specifications\n\n   SASL is used as an authentication framework in a variety of\n   application-layer protocols.  This document defines the following\n   SASL mechanisms for usage with OAuth:\n\n      OAUTHBEARER:  OAuth 2.0 bearer tokens, as described in [RFC6750].\n         RFC 6750 uses Transport Layer Security (TLS) [RFC5246] to\n         secure the protocol interaction between the client and the\n         resource server.\n\n      OAUTH10A:  OAuth 1.0a Message Authentication Code (MAC) tokens\n         (using the HMAC-SHA1 keyed message digest), as described in\n         Section 3.4.2 of [RFC5849].\n\n   New extensions may be defined to add additional OAuth Access Token\n   Types.  Such a new SASL OAuth mechanism can be added by registering\n   the new name(s) with IANA in the SASL Mechanisms registry and citing\n   this specification for the further definition.\n\n   SASL mechanisms using this document as their definition do not\n   provide a data security layer; that is, they cannot provide integrity\n   or confidentiality protection for application messages after the\n   initial authentication.  If such protection is needed, TLS or some\n   similar solution should be used.  Additionally, for the two\n   mechanisms specified in this document, TLS MUST be used for\n   OAUTHBEARER to protect the bearer token; for OAUTH10A, the use of TLS\n   is RECOMMENDED.\n\n   These mechanisms are client initiated and in lockstep, with the\n   server always replying to a client message.  In the case where the\n   client has and correctly uses a valid token, the flow is:\n\n   1.  Client sends a valid and correct initial client response.\n\n   2.  Server responds with a successful authentication.\n\n   In the case where authentication fails, the server sends an error\n   result; the client MUST then send an additional message to the server\n   in order to allow the server to finish the exchange.  Some protocols\n   and common SASL implementations do not support both sending a SASL\n\n\n\nMills, et al.                Standards Track                    [Page 6]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   message and finalizing a SASL negotiation.  The additional client\n   message in the error case deals with this problem.  This exchange is:\n\n   1.  Client sends an invalid initial client response.\n\n   2.  Server responds with an error message.\n\n   3.  Client sends a dummy client response.\n\n   4.  Server fails the authentication.\n\n3.1.  Initial Client Response\n\n   Client responses are a GS2 [RFC5801] header followed by zero or more\n   key/value pairs, or it may be empty.  The gs2-header rule is defined\n   here as a placeholder for compatibility with GS2 if a GS2 mechanism\n   is formally defined, but this document does not define one.  The key/\n   value pairs take the place of the corresponding HTTP headers and\n   values to convey the information necessary to complete an OAuth-style\n   HTTP authorization.  Unknown key/value pairs MUST be ignored by the\n   server.  The ABNF [RFC5234] syntax is:\n\n     kvsep          = %x01\n     key            = 1*(ALPHA)\n     value          = *(VCHAR / SP / HTAB / CR / LF )\n     kvpair         = key \"=\" value kvsep\n   ;;gs2-header     = See RFC 5801\n     client-resp    = (gs2-header kvsep *kvpair kvsep) / kvsep\n\n   The GS2 header MAY include the username associated with the resource\n   being accessed, the \"authzid\".  It is worth noting that application\n   protocols are allowed to require an authzid, as are specific server\n   implementations.\n\n   The client response consisting of only a single kvsep is used only\n   when authentication fails and is only valid in that context.  If sent\n   as the first message from the client, the server MAY simply fail the\n   authentication without returning discovery information since there is\n   no user or server name indication.\n\n   The following keys and corresponding values are defined in the client\n   response:\n\n      auth (REQUIRED):  The payload that would be in the HTTP\n         Authorization header if this OAuth exchange was being carried\n         out over HTTP.\n\n\n\n\n\nMills, et al.                Standards Track                    [Page 7]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n      host:  Contains the hostname to which the client connected.  In an\n         HTTP context, this is the value of the HTTP Host header.\n\n      port:  Contains the destination port that the client connected to,\n         represented as a decimal positive integer string without\n         leading zeros.\n\n   For OAuth token types such as OAuth 1.0a that use keyed message\n   digests, the client MUST send host and port number key/values, and\n   the server MUST fail an authorization request requiring keyed message\n   digests that are not accompanied by host and port values.  In OAuth\n   1.0a, for example, the so-called \"signature base string calculation\"\n   includes the reconstructed HTTP URL.\n\n3.1.1.  Reserved Key/Values\n\n   In these mechanisms, values for path, query string and post body are\n   assigned default values.  OAuth authorization schemes MAY define\n   usage of these in the SASL context and extend this specification.\n   For OAuth Access Token Types that include a keyed message digest of\n   the request, the default values MUST be used unless explicit values\n   are provided in the client response.  The following key values are\n   reserved for future use:\n\n      mthd (RESERVED):  HTTP method; the default value is \"POST\".\n\n      path (RESERVED):  HTTP path data; the default value is \"/\".\n\n      post (RESERVED):  HTTP post data; the default value is the empty\n         string (\"\").\n\n      qs (RESERVED):  The HTTP query string; the default value is the\n         empty string (\"\").\n\n3.2.  Server's Response\n\n   The server validates the response according to the specification for\n   the OAuth Access Token Types used.  If the OAuth Access Token Type\n   utilizes a keyed message digest of the request parameters, then the\n   client must provide a client response that satisfies the data\n   requirements for the scheme in use.\n\n   The server fully validates the client response before generating a\n   server response; this will necessarily include the validation steps\n   listed in the specification for the OAuth Access Token Type used.\n   However, additional validation steps may be needed, depending on the\n   particular application protocol making use of SASL.  In particular,\n   values included as kvpairs in the client response (such as host and\n\n\n\nMills, et al.                Standards Track                    [Page 8]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   port) that correspond to values known to the application server by\n   some other mechanism (such as an application protocol data unit or\n   preconfigured values) MUST be validated to match between the initial\n   client response and the other source(s) of such information.  As a\n   concrete example, when SASL is used over IMAP to an IMAP server for a\n   single domain, the hostname can be available via configuration; this\n   hostname must be validated to match the value sent in the 'host'\n   kvpair.\n\n   The server responds to a successfully verified client message by\n   completing the SASL negotiation.  The authenticated identity reported\n   by the SASL mechanism is the identity securely established for the\n   client with the OAuth credential.  The application, not the SASL\n   mechanism, based on local access policy determines whether the\n   identity reported by the mechanism is allowed access to the requested\n   resource.  Note that the semantics of the authzid are specified by\n   the SASL framework [RFC4422].\n\n3.2.1.  OAuth Identifiers in the SASL Context\n\n   In the OAuth framework, the client may be authenticated by the\n   authorization server, and the resource owner is authenticated to the\n   authorization server.  OAuth access tokens may contain information\n   about the authentication of the resource owner and about the client\n   and may therefore make this information accessible to the resource\n   server.\n\n   If both identifiers are needed by an application the developer will\n   need to provide a way to communicate that from the SASL mechanism\n   back to the application.\n\n3.2.2.  Server Response to Failed Authentication\n\n   For a failed authentication, the server returns an error result in\n   JSON [RFC7159] format and fails the authentication.  The error result\n   consists of the following values:\n\n      status (REQUIRED):  The authorization error code.  Valid error\n         codes are defined in the IANA \"OAuth Extensions Error Registry\"\n         as specified in the OAuth 2.0 core specification.\n\n      scope (OPTIONAL):  An OAuth scope that is valid to access the\n         service.  This may be omitted, which implies that unscoped\n         tokens are required.  If a scope is specified, then a single\n         scope is preferred.  At the time this document was written,\n         there are several implementations that do not properly support\n         space-separated lists of scopes, so the use of a space-\n         separated list of scopes is NOT RECOMMENDED.\n\n\n\nMills, et al.                Standards Track                    [Page 9]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n      openid-configuration (OPTIONAL):  The URL for a document following\n         the OpenID Provider Configuration Information schema as\n         described in OIDCD [OpenID.Discovery], Section 3 that is\n         appropriate for the user.  As specified in OIDCD, this will\n         have the \"https\" URL scheme.  This document MUST have all\n         OAuth-related data elements populated.  The server MAY return\n         different URLs for users in different domains, and the client\n         SHOULD NOT cache a single returned value and assume it applies\n         for all users/domains that the server supports.  The returned\n         discovery document SHOULD have all data elements required by\n         the OpenID Connect Discovery specification populated.  In\n         addition, the discovery document SHOULD contain the\n         'registration_endpoint' element to identify the endpoint to be\n         used with the Dynamic Client Registration protocol [RFC7591] to\n         obtain the minimum number of parameters necessary for the OAuth\n         protocol exchange to function.  Another comparable discovery or\n         client registration mechanism MAY be used if available.\n\n         The use of the 'offline_access' scope, as defined in\n         [OpenID.Core], is RECOMMENDED to give clients the capability to\n         explicitly request a refresh token.\n\n   If the resource server provides a scope, then the client MUST always\n   request scoped tokens from the token endpoint.  If the resource\n   server does not return a scope, the client SHOULD presume an unscoped\n   token is required to access the resource.\n\n   Since clients may interact with a number of application servers, such\n   as email servers and Extensible Messaging and Presence Protocol\n   (XMPP) [RFC6120] servers, they need to have a way to determine\n   whether dynamic client registration has been performed already and\n   whether an already available refresh token can be reused to obtain an\n   access token for the desired resource server.  This specification\n   RECOMMENDS that a client uses the information in the 'iss' element\n   defined in OpenID Connect Core [OpenID.Core] to make this\n   determination.\n\n3.2.3.  Completing an Error Message Sequence\n\n   Section 3.6 of SASL [RFC4422] explicitly prohibits additional\n   information in an unsuccessful authentication outcome.  Therefore,\n   the error message is sent in a normal message.  The client MUST then\n   send either an additional client response consisting of a single %x01\n   (control A) character to the server in order to allow the server to\n   finish the exchange or a SASL abort message as generally defined in\n   Section 3.5 of SASL [RFC4422].  A specific example of an abort\n   message is the \"BAD\" response to an AUTHENTICATE in IMAP [RFC3501],\n   Section 6.2.2.\n\n\n\nMills, et al.                Standards Track                   [Page 10]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n3.3.  OAuth Access Token Types using Keyed Message Digests\n\n   OAuth Access Token Types may use keyed message digests, and the\n   client and the resource server may need to perform a cryptographic\n   computation for integrity protection and data origin authentication.\n\n   OAuth is designed for access to resources identified by URIs.  SASL\n   is designed for user authentication and has no facility for more\n   fine-grained access control.  In this specification, we require or\n   define default values for the data elements from an HTTP request that\n   allows the signature base string to be constructed properly.  The\n   default HTTP path is \"/\", and the default post body is empty.  These\n   atoms are defined as extension points so that no changes are needed\n   if there is a revision of SASL that supports more specific resource\n   authorization, e.g., IMAP access to a specific folder or FTP access\n   limited to a specific directory.\n\n   Using the example in the OAuth 1.0a specification as a starting\n   point, below is the authorization request in OAuth 1.0a style (with\n   %x01 shown as ^A and line breaks added for readability), assuming it\n   is on an IMAP server running on port 143:\n\n   n,a=user@example.com,^A\n   host=example.com^A\n   port=143^A\n   auth=OAuth realm=\"Example\",\n              oauth_consumer_key=\"9djdj82h48djs9d2\",\n              oauth_token=\"kkk9d7dh3k39sjv7\",\n              oauth_signature_method=\"HMAC-SHA1\",\n              oauth_timestamp=\"137131201\",\n              oauth_nonce=\"7d8f3e4a\",\n              oauth_signature=\"Tm90IGEgcmVhbCBzaWduYXR1cmU\"^A^A\n\n   The signature base string would be constructed per the OAuth 1.0a\n   specification [RFC5849] with the following things noted:\n\n   o  The method value is defaulted to POST.\n\n   o  The scheme defaults to be \"http\", and any port number other than\n      80 is included.\n\n   o  The path defaults to \"/\".\n\n   o  The query string defaults to \"\".\n\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 11]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   In this example, the signature base string with line breaks added for\n   readability would be:\n\n   POST&http%3A%2F%2Fexample.com:143%2F&oauth_consumer_key%3D9djdj82h4\n   8djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHMAC-SH\n   A1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk9d7dh3k39sjv7\n\n4.  Examples\n\n   These examples illustrate exchanges between IMAP and SMTP clients and\n   servers.  All IMAP examples use SASL-IR [RFC4959] and send payload in\n   the initial client response.  The bearer token examples assume\n   encrypted transport; if the underlying connection is not already TLS,\n   then STARTTLS MUST be used as TLS is required in the bearer token\n   specification.\n\n   Note to implementers: The SASL OAuth method names are case\n   insensitive.  One example uses \"Bearer\" but that could as easily be\n   \"bearer\", \"BEARER\", or \"BeArEr\".\n\n4.1.  Successful Bearer Token Exchange\n\n   This example shows a successful OAuth 2.0 bearer token exchange in\n   IMAP.  Note that line breaks are inserted for readability.\n\n   [Initial connection and TLS establishment...]\n   S: * OK IMAP4rev1 Server Ready\n   C: t0 CAPABILITY\n   S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR\n   S: t0 OK Completed\n   C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhv\n         c3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9QmVhcmVyI\n         HZGOWRmdDRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQ\n         EB\n   S: t1 OK SASL authentication succeeded\n\n   As required by IMAP [RFC3501], the payloads are base64 encoded.  The\n   decoded initial client response (with %x01 represented as ^A and long\n   lines wrapped for readability) is:\n\n   n,a=user@example.com,^Ahost=server.example.com^Aport=143^A\n   auth=Bearer vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==^A^A\n\n\n\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 12]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   The same credential used in an SMTP exchange is shown below.  Again,\n   this example assumes that TLS is already established per the bearer\n   token specification requirements.\n\n   [connection begins]\n   S: 220 mx.example.com ESMTP 12sm2095603fks.9\n   C: EHLO sender.example.com\n   S: 250-mx.example.com at your service,[172.31.135.47]\n   S: 250-SIZE 35651584\n   S: 250-8BITMIME\n   S: 250-AUTH LOGIN PLAIN OAUTHBEARER\n   S: 250-ENHANCEDSTATUSCODES\n   S: 250-STARTTLS\n   S: 250 PIPELINING\n   [Negotiate TLS...]\n   C: t1 AUTH OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9c2Vy\n         dmVyLmV4YW1wbGUuY29tAXBvcnQ9NTg3AWF1dGg9QmVhcmVyIHZGOWRmd\n         DRxbVRjMk52YjNSbGNrQmhiSFJoZG1semRHRXVZMjl0Q2c9PQEB\n   S: 235 Authentication successful.\n   [connection continues...]\n\n   The decoded initial client response is:\n\n   n,a=user@example.com,^Ahost=server.example.com^Aport=587^A\n   auth=Bearer vF9dft4qmTc2Nvb3RlckBhbHRhdmlzdGEuY29tCg==^A^A\n\n4.2.  Successful OAuth 1.0a Token Exchange\n\n   This IMAP example shows a successful OAuth 1.0a token exchange.  Note\n   that line breaks are inserted for readability.  This example assumes\n   that TLS is already established.  Signature computation is discussed\n   in Section 3.3.\n\n   S: * OK IMAP4rev1 Server Ready\n   C: t0 CAPABILITY\n   S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER AUTH=OAUTH10A SASL-IR\n   S: t0 OK Completed\n   C: t1 AUTHENTICATE OAUTH10A bixhPXVzZXJAZXhhbXBsZS5jb20sAWhvc3Q9ZXhhb\n         XBsZS5jb20BcG9ydD0xNDMBYXV0aD1PQXV0aCByZWFsbT0iRXhhbXBsZSIsb2F1\n         dGhfY29uc3VtZXJfa2V5PSI5ZGpkajgyaDQ4ZGpzOWQyIixvYXV0aF90b2tlbj0\n         ia2trOWQ3ZGgzazM5c2p2NyIsb2F1dGhfc2lnbmF0dXJlX21ldGhvZD0iSE1BQy\n         1TSEExIixvYXV0aF90aW1lc3RhbXA9IjEzNzEzMTIwMSIsb2F1dGhfbm9uY2U9I\n         jdkOGYzZTRhIixvYXV0aF9zaWduYXR1cmU9IlRtOTBJR0VnY21WaGJDQnphV2R1\n         WVhSMWNtVSUzRCIBAQ==\n   S: t1 OK SASL authentication succeeded\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 13]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   As required by IMAP [RFC3501], the payloads are base64 encoded.  The\n   decoded initial client response (with %x01 represented as ^A and\n   lines wrapped for readability) is:\n\n   n,a=user@example.com,^A\n   host=example.com^A\n   port=143^A\n   auth=OAuth realm=\"Example\",\n              oauth_consumer_key=\"9djdj82h48djs9d2\",\n              oauth_token=\"kkk9d7dh3k39sjv7\",\n              oauth_signature_method=\"HMAC-SHA1\",\n              oauth_timestamp=\"137131201\",\n              oauth_nonce=\"7d8f3e4a\",\n              oauth_signature=\"SSdtIGEgbGl0dGxlIHRlYSBwb3Qu\"^A^A\n\n4.3.  Failed Exchange\n\n   This IMAP example shows a failed exchange because of the empty\n   Authorization header, which is how a client can query for the needed\n   scope.  Note that line breaks are inserted for readability.\n\n   S: * OK IMAP4rev1 Server Ready\n   C: t0 CAPABILITY\n   S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR\n   S: t0 OK Completed\n   C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAW\n         hvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AQE=\n   S: + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxl\n        X3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4\n        YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u\n        In0=\n   C: AQ==\n   S: t1 NO SASL authentication failed\n\n   The decoded initial client response is:\n\n   n,a=user@example.com,^Ahost=server.example.com^A\n   port=143^Aauth=^A^A\n\n   The decoded server error response is:\n\n  {\n  \"status\":\"invalid_token\",\n  \"scope\":\"example_scope\",\n  \"openid-configuration\":\"https://example.com/.well-known/openid-config\"\n  }\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 14]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   The client responds with the required dummy response; \"AQ==\" is the\n   base64 encoding of the ASCII value 0x01.  The same exchange using the\n   IMAP-specific method of canceling an AUTHENTICATE command sends \"*\"\n   and is shown below.\n\n   S: * OK IMAP4rev1 Server Ready\n   C: t0 CAPABILITY\n   S: * CAPABILITY IMAP4rev1 AUTH=OAUTHBEARER SASL-IR IMAP4rev1\n   S: t0 OK Completed\n   C: t1 AUTHENTICATE OAUTHBEARER bixhPXVzZXJAZXhhbXBsZS5jb20sAW\n        hvc3Q9c2VydmVyLmV4YW1wbGUuY29tAXBvcnQ9MTQzAWF1dGg9AQE=\n   S: + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxl\n        X3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4\n        YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u\n        In0=\n   C: *\n   S: t1 NO SASL authentication failed\n\n4.4.  SMTP Example of a Failed Negotiation\n\n   This example shows an authorization failure in an SMTP exchange.  TLS\n   negotiation is not shown, but as noted above, it is required for the\n   use of bearer tokens.\n\n[connection begins]\nS: 220 mx.example.com ESMTP 12sm2095603fks.9\nC: EHLO sender.example.com\nS: 250-mx.example.com at your service,[172.31.135.47]\nS: 250-SIZE 35651584\nS: 250-8BITMIME\nS: 250-AUTH LOGIN PLAIN OAUTHBEARER\nS: 250-ENHANCEDSTATUSCODES\nS: 250 PIPELINING\n[Negotiate TLS...]\nC: AUTH OAUTHBEARER bix1c2VyPXNvbWV1c2VyQGV4YW1wbGUuY29tLAFhdXRoPUJlYXJl\n       ciB2RjlkZnQ0cW1UYzJOdmIzUmxja0JoZEhSaGRtbHpkR0V1WTI5dENnPT0BAQ==\nS: 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NoZW1lcyI6ImJlYXJlciBtYWMiL\n       CJzY29wZSI6Imh0dHBzOi8vbWFpbC5leGFtcGxlLmNvbS8ifQ==\nC: AQ==\nS: 535-5.7.1 Username and Password not accepted. Learn more at\nS: 535 5.7.1 http://support.example.com/mail/oauth\n[connection continues...]\n\n   The initial client response is:\n\n   n,user=someuser@example.com,^A\n   auth=Bearer vF9dft4qmTc2Nvb3RlckBhdHRhdmlzdGEuY29tCg==^A^A\n\n\n\n\nMills, et al.                Standards Track                   [Page 15]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   The server returned an error message in the 334 SASL message; the\n   client responds with the required dummy response, and the server\n   finalizes the negotiation.\n\n   {\n       \"status\":\"invalid_token\",\n       \"schemes\":\"bearer mac\",\n       \"scope\":\"https://mail.example.com/\"\n   }\n\n5.  Security Considerations\n\n   OAuth 1.0a and OAuth 2.0 allow for a variety of deployment scenarios,\n   and the security properties of these profiles vary.  As shown in\n   Figure 1, this specification is aimed to be integrated into a larger\n   OAuth deployment.  Application developers therefore need to\n   understand their security requirements based on a threat assessment\n   before selecting a specific SASL OAuth mechanism.  For OAuth 2.0, a\n   detailed security document [RFC6819] provides guidance to select\n   those OAuth 2.0 components that help to mitigate threats for a given\n   deployment.  For OAuth 1.0a, Section 4 of [RFC5849] provides guidance\n   specific to OAuth 1.0a.\n\n   This document specifies two SASL Mechanisms for OAuth and each comes\n   with different security properties.\n\n   OAUTHBEARER:  This mechanism borrows from OAuth 2.0 bearer tokens\n      [RFC6750].  It relies on the application using TLS to protect the\n      OAuth 2.0 bearer token exchange; without TLS usage at the\n      application layer, this method is completely insecure.\n      Consequently, TLS MUST be provided by the application when\n      choosing this authentication mechanism.\n\n   OAUTH10A:  This mechanism reuses OAuth 1.0a MAC tokens (using the\n      HMAC-SHA1 keyed message digest), as described in Section 3.4.2 of\n      [RFC5849].  To compute the keyed message digest in the same way as\n      in RFC 5839, this specification conveys additional parameters\n      between the client and the server.  This SASL mechanism only\n      supports client authentication.  If server-side authentication is\n      desirable, then it must be provided by the application underneath\n      the SASL layer.  The use of TLS is strongly RECOMMENDED.\n\n\n\n\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 16]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   Additionally, the following aspects are worth pointing out:\n\n   An access token is not equivalent to the user's long term password.\n\n      Care has to be taken when these OAuth credentials are used for\n      actions like changing passwords (as it is possible with some\n      protocols, e.g., XMPP [RFC6120]).  The resource server should\n      ensure that actions taken in the authenticated channel are\n      appropriate to the strength of the presented credential.\n\n   Lifetime of the application sessions.\n\n      It is possible that SASL will be used to authenticate a\n      connection, and the life of that connection may outlast the life\n      of the access token used to establish it.  This is a common\n      problem in application protocols where connections are long lived\n      and not a problem with this mechanism, per se.  Resource servers\n      may unilaterally disconnect clients in accordance with the\n      application protocol.\n\n   Access tokens have a lifetime.\n\n      Reducing the lifetime of an access token provides security\n      benefits, and OAuth 2.0 introduces refresh tokens to obtain new\n      access tokens on the fly without any need for human interaction.\n      Additionally, a previously obtained access token might be revoked\n      or rendered invalid at any time.  The client MAY request a new\n      access token for each connection to a resource server, but it\n      SHOULD cache and reuse valid credentials.\n\n6.  Internationalization Considerations\n\n   The identifier asserted by the OAuth authorization server about the\n   resource owner inside the access token may be displayed to a human.\n   For example, when SASL is used in the context of IMAP, the client may\n   assert the resource owner's email address to the IMAP server for\n   usage in an email-based application.  The identifier may therefore\n   contain internationalized characters, and an application needs to\n   ensure that the mapping between the identifier provided by OAuth is\n   suitable for use with the application-layer protocol SASL is\n   incorporated into.  An example of a SASL-compatible container is the\n   JSON Web Token (JWT) [RFC7519], which provides a standardized format\n   for exchanging authorization and identity information that supports\n   internationalized characters.\n\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 17]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n7.  IANA Considerations\n\n7.1.  SASL Registration\n\n   The IANA has registered the following entry in the SASL Mechanisms\n   registry:\n\n      SASL mechanism name: OAUTHBEARER\n\n      Security Considerations: See this document\n\n      Published Specification: See this document\n\n      For further information: Contact the authors of this document.\n\n      Intended usage: COMMON\n\n      Owner/Change controller: the IESG\n\n      Note: None\n\n   The IANA has registered the following entry in the SASL Mechanisms\n   registry:\n\n      SASL mechanism name: OAUTH10A\n\n      Security Considerations: See this document\n\n      Published Specification: See this document\n\n      For further information: Contact the authors of this document.\n\n      Intended usage: COMMON\n\n      Owner/Change controller: the IESG\n\n      Note: None\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 18]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n8.  References\n\n8.1.  Normative References\n\n   [OpenID.Core]\n              Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and\n              C. Mortimore, \"OpenID Connect Core 1.0\", November 2014,\n              <http://openid.net/specs/openid-connect-core-1_0.html>.\n\n   [OpenID.Discovery]\n              Sakimura, N., Bradley, J., Jones, M., and E. Jay, \"OpenID\n              Connect Discovery 1.0\", November 2014,\n              <http://openid.net/specs/\n              openid-connect-discovery-1_0.html>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <http://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC4422]  Melnikov, A., Ed. and K. Zeilenga, Ed., \"Simple\n              Authentication and Security Layer (SASL)\", RFC 4422,\n              DOI 10.17487/RFC4422, June 2006,\n              <http://www.rfc-editor.org/info/rfc4422>.\n\n   [RFC4648]  Josefsson, S., \"The Base16, Base32, and Base64 Data\n              Encodings\", RFC 4648, DOI 10.17487/RFC4648, October 2006,\n              <http://www.rfc-editor.org/info/rfc4648>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <http://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5246]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.2\", RFC 5246,\n              DOI 10.17487/RFC5246, August 2008,\n              <http://www.rfc-editor.org/info/rfc5246>.\n\n   [RFC5801]  Josefsson, S. and N. Williams, \"Using Generic Security\n              Service Application Program Interface (GSS-API) Mechanisms\n              in Simple Authentication and Security Layer (SASL): The\n              GS2 Mechanism Family\", RFC 5801, DOI 10.17487/RFC5801,\n              July 2010, <http://www.rfc-editor.org/info/rfc5801>.\n\n   [RFC5849]  Hammer-Lahav, E., Ed., \"The OAuth 1.0 Protocol\", RFC 5849,\n              DOI 10.17487/RFC5849, April 2010,\n              <http://www.rfc-editor.org/info/rfc5849>.\n\n\n\nMills, et al.                Standards Track                   [Page 19]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   [RFC6749]  Hardt, D., Ed., \"The OAuth 2.0 Authorization Framework\",\n              RFC 6749, DOI 10.17487/RFC6749, October 2012,\n              <http://www.rfc-editor.org/info/rfc6749>.\n\n   [RFC6750]  Jones, M. and D. Hardt, \"The OAuth 2.0 Authorization\n              Framework: Bearer Token Usage\", RFC 6750,\n              DOI 10.17487/RFC6750, October 2012,\n              <http://www.rfc-editor.org/info/rfc6750>.\n\n   [RFC7159]  Bray, T., Ed., \"The JavaScript Object Notation (JSON) Data\n              Interchange Format\", RFC 7159, DOI 10.17487/RFC7159, March\n              2014, <http://www.rfc-editor.org/info/rfc7159>.\n\n   [RFC7591]  Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and\n              P. Hunt, \"OAuth 2.0 Dynamic Client Registration Protocol\",\n              RFC 7591, DOI 10.17487/RFC7591, July 2015,\n              <http://www.rfc-editor.org/info/rfc7591>.\n\n8.2.  Informative References\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <http://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4959]  Siemborski, R. and A. Gulbrandsen, \"IMAP Extension for\n              Simple Authentication and Security Layer (SASL) Initial\n              Client Response\", RFC 4959, DOI 10.17487/RFC4959,\n              September 2007, <http://www.rfc-editor.org/info/rfc4959>.\n\n   [RFC5321]  Klensin, J., \"Simple Mail Transfer Protocol\", RFC 5321,\n              DOI 10.17487/RFC5321, October 2008,\n              <http://www.rfc-editor.org/info/rfc5321>.\n\n   [RFC6120]  Saint-Andre, P., \"Extensible Messaging and Presence\n              Protocol (XMPP): Core\", RFC 6120, DOI 10.17487/RFC6120,\n              March 2011, <http://www.rfc-editor.org/info/rfc6120>.\n\n   [RFC6819]  Lodderstedt, T., Ed., McGloin, M., and P. Hunt, \"OAuth 2.0\n              Threat Model and Security Considerations\", RFC 6819,\n              DOI 10.17487/RFC6819, January 2013,\n              <http://www.rfc-editor.org/info/rfc6819>.\n\n   [RFC7033]  Jones, P., Salgueiro, G., Jones, M., and J. Smarr,\n              \"WebFinger\", RFC 7033, DOI 10.17487/RFC7033, September\n              2013, <http://www.rfc-editor.org/info/rfc7033>.\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 20]\n\f\nRFC 7628                       SASL OAuth                    August 2015\n\n\n   [RFC7230]  Fielding, R., Ed. and J. Reschke, Ed., \"Hypertext Transfer\n              Protocol (HTTP/1.1): Message Syntax and Routing\",\n              RFC 7230, DOI 10.17487/RFC7230, June 2014,\n              <http://www.rfc-editor.org/info/rfc7230>.\n\n   [RFC7519]  Jones, M., Bradley, J., and N. Sakimura, \"JSON Web Token\n              (JWT)\", RFC 7519, DOI 10.17487/RFC7519, May 2015,\n              <http://www.rfc-editor.org/info/rfc7519>.\n\nAcknowledgements\n\n   The authors would like to thank the members of the KITTEN working\n   group and in addition and specifically: Simon Josefson, Torsten\n   Lodderstadt, Ryan Troll, Alexey Melnikov, Jeffrey Hutzelman, Nico\n   Williams, Matt Miller, and Benjamin Kaduk.\n\n   This document was produced under the chairmanship of Alexey Melnikov,\n   Tom Yu, Shawn Emery, Josh Howlett, Sam Hartman, Matthew Miller, and\n   Benjamin Kaduk.  The supervising Area Director was Stephen Farrell.\n\nAuthors' Addresses\n\n   William Mills\n   Microsoft\n\n   Email: wmills_92105@yahoo.com\n\n\n   Tim Showalter\n\n   Email: tjs@psaux.com\n\n\n   Hannes Tschofenig\n   ARM Ltd.\n   110 Fulbourn Rd\n   Cambridge  CB1 9NJ\n   United Kingdom\n\n   Email: Hannes.tschofenig@gmx.net\n   URI:   http://www.tschofenig.priv.at\n\n\n\n\n\n\n\n\n\n\nMills, et al.                Standards Track                   [Page 21]\n\f\n"
  },
  {
    "path": "rfc/rfc7677.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                         T. Hansen\nRequest for Comments: 7677                             AT&T Laboratories\nUpdates: 5802                                              November 2015\nCategory: Standards Track\nISSN: 2070-1721\n\n\n                  SCRAM-SHA-256 and SCRAM-SHA-256-PLUS\n       Simple Authentication and Security Layer (SASL) Mechanisms\n\nAbstract\n\n   This document registers the Simple Authentication and Security Layer\n   (SASL) mechanisms SCRAM-SHA-256 and SCRAM-SHA-256-PLUS, provides\n   guidance for secure implementation of the original SCRAM-SHA-1-PLUS\n   mechanism, and updates the SCRAM registration procedures of RFC 5802.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc7677.\n\nCopyright Notice\n\n   Copyright (c) 2015 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\nHansen                       Standards Track                    [Page 1]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Key Word Definitions  . . . . . . . . . . . . . . . . . . . .   2\n   3.  SCRAM-SHA-256 and SCRAM-SHA-256-PLUS  . . . . . . . . . . . .   2\n   4.  Security Considerations . . . . . . . . . . . . . . . . . . .   3\n   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   4\n     5.1.  Updates to SCRAM-* Registration . . . . . . . . . . . . .   4\n     5.2.  SASL-SCRAM Family Mechanisms Registration Procedure . . .   4\n   6.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   6\n     6.1.  Normative References  . . . . . . . . . . . . . . . . . .   6\n     6.2.  Informative References  . . . . . . . . . . . . . . . . .   7\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .   7\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   8\n\n1.  Introduction\n\n   This document registers the SASL mechanisms SCRAM-SHA-256 and SCRAM-\n   SHA-256-PLUS.  SHA-256 has stronger security properties than SHA-1,\n   and it is expected that SCRAM mechanisms based on it will have\n   greater predicted longevity than the SCRAM mechanisms based on SHA-1.\n\n   The registration form for the SCRAM family of algorithms is also\n   updated from [RFC5802].\n\n   After publication of [RFC5802], it was discovered that Transport\n   Layer Security (TLS) [RFC5246] does not have the expected properties\n   for the \"tls-unique\" channel binding to be secure [RFC7627].\n   Therefore, this document contains normative text that applies to both\n   the original SCRAM-SHA-1-PLUS and the newly introduced SCRAM-SHA-\n   256-PLUS mechanism.\n\n2.  Key Word Definitions\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n3.  SCRAM-SHA-256 and SCRAM-SHA-256-PLUS\n\n   The SCRAM-SHA-256 and SCRAM-SHA-256-PLUS SASL mechanisms are defined\n   in the same way that SCRAM-SHA-1 and SCRAM-SHA-1-PLUS are defined in\n   [RFC5802], except that the hash function for HMAC() and H() uses\n   SHA-256 instead of SHA-1 [RFC6234].\n\n   For the SCRAM-SHA-256 and SCRAM-SHA-256-PLUS SASL mechanisms, the\n   hash iteration-count announced by a server SHOULD be at least 4096.\n\n\n\n\nHansen                       Standards Track                    [Page 2]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\n   The GSS-API mechanism OID for SCRAM-SHA-256 is 1.3.6.1.5.5.18 (see\n   Section 5).\n\n   This is a simple example of a SCRAM-SHA-256 authentication exchange\n   when the client doesn't support channel bindings.  The username\n   'user' and password 'pencil' are being used.\n\n   C: n,,n=user,r=rOprNGfwEbeRWgbNEkqO\n\n   S: r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,\n      s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096\n\n   C: c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,\n      p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=\n\n   S: v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=\n\n4.  Security Considerations\n\n   The security considerations from [RFC5802] still apply.\n\n   To be secure, either SCRAM-SHA-256-PLUS and SCRAM-SHA-1-PLUS MUST be\n   used over a TLS channel that has had the session hash extension\n   [RFC7627] negotiated, or session resumption MUST NOT have been used.\n\n   See [RFC4270] and [RFC6194] for reasons to move from SHA-1 to a\n   strong security mechanism like SHA-256.\n\n   The strength of this mechanism is dependent in part on the hash\n   iteration-count, as denoted by \"i\" in [RFC5802].  As a rule of thumb,\n   the hash iteration-count should be such that a modern machine will\n   take 0.1 seconds to perform the complete algorithm; however, this is\n   unlikely to be practical on mobile devices and other relatively low-\n   performance systems.  At the time this was written, the rule of thumb\n   gives around 15,000 iterations required; however, a hash iteration-\n   count of 4096 takes around 0.5 seconds on current mobile handsets.\n   This computational cost can be avoided by caching the ClientKey\n   (assuming the Salt and hash iteration-count is stable).  Therefore,\n   the recommendation of this specification is that the hash iteration-\n   count SHOULD be at least 4096, but careful consideration ought to be\n   given to using a significantly higher value, particularly where\n   mobile use is less important.\n\n\n\n\n\n\n\n\n\nHansen                       Standards Track                    [Page 3]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\n5.  IANA Considerations\n\n5.1.  Updates to SCRAM-* Registration\n\n   The IANA registry for SCRAM-* (the SCRAM family of SASL mechanisms)\n   in the SASL mechanism registry ([RFC4422]) has been updated as\n   follows.  The email address for reviews has been updated, and the\n   note at the end changed.\n\n      To: iana@iana.org\n      Subject: Registration of a new SASL family SCRAM\n\n      SASL mechanism name (or prefix for the family): SCRAM-*\n      Security considerations: Section 7 of [RFC5802]\n      Published specification (optional, recommended): RFC 7677\n      Person & email address to contact for further information:\n         IETF KITTEN WG <kitten@ietf.org>\n      Intended usage: COMMON\n      Owner/Change controller: IESG <iesg@ietf.org>\n      Note: Members of this family MUST be explicitly registered using\n         the \"IETF Review\" [RFC5226] registration procedure.  Reviews\n         MUST be requested on the KITTEN mailing list kitten@ietf.org\n         (or a successor designated by the responsible Security AD).\n\n      Note to future SCRAM-mechanism designers: each new SASL SCRAM\n      mechanism MUST be explicitly registered with IANA within the SASL\n      SCRAM Family Mechanisms registry.\n\n5.2.  SASL-SCRAM Family Mechanisms Registration Procedure\n\n   A new IANA registry has been added for members of the SCRAM family of\n   SASL mechanisms, named \"SASL SCRAM Family Mechanisms\".  It adds two\n   new fields to the existing SCRAM mechanism registry: Minimum\n   iteration-count and Associated OID.  Below is the template for\n   registration of a new SASL family SCRAM.  (Note that the string\n   \"TBD-BY-IANA\" should be left as is, so that it may be filled in at\n   registration time by IANA.)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHansen                       Standards Track                    [Page 4]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\n      To: iana@iana.org\n      Subject: Registration of a new SASL SCRAM family mechanism\n\n      SASL mechanism name (or prefix for the family): SCRAM-<NAME>\n      Security considerations: Section 7 of [RFC5802]\n      Published specification (optional, recommended): RFC 7677\n      Minimum iteration-count: The minimum hash iteration-count that\n         servers SHOULD announce\n      Associated OID: TBD-BY-IANA\n      Person & email address to contact for further information:\n         IETF KITTEN WG <kitten@ietf.org>\n      Intended usage: COMMON\n      Owner/Change controller: IESG <iesg@ietf.org>\n\n      Note: Members of this family MUST be explicitly registered using\n      the \"IETF Review\" [RFC5226] registration procedure.  Reviews MUST\n      be requested on the KITTEN mailing list kitten@ietf.org (or a\n      successor designated by the responsible Security Area Director).\n\n      Note: At publication of a new SASL SCRAM Family Mechanism, IANA\n      SHOULD assign a GSS-API mechanism OID for this mechanism from the\n      iso.org.dod.internet.security.mechanisms prefix (see the \"SMI\n      Security for Mechanism Codes\" registry) and fill in the value for\n      \"TBD-BY-IANA\" above.  Only one OID needs to be assigned for a\n      SCRAM-<NAME> and SCRAM-<NAME>-PLUS pair.  The same OID should be\n      assigned to both entries in the registry.\n\n      Note to future SASL SCRAM mechanism designers: each new SASL SCRAM\n      mechanism MUST be explicitly registered with IANA and MUST comply\n      with the SCRAM-mechanism naming convention defined in Section 4 of\n      [RFC5802].\n\n   The existing entries for SASL SCRAM-SHA-1 and SCRAM-SHA-1-PLUS have\n   been moved from the existing SASL mechanism registry to the \"SASL\n   SCRAM Family Mechanisms\" registry.  At that time, the following\n   values were added:\n\n      Minimum iteration-count: 4096\n      OID: 1.3.6.1.5.5.14 (from [RFC5802])\n\n\n\n\n\n\n\n\n\n\n\n\nHansen                       Standards Track                    [Page 5]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\n   The following new SASL SCRAM mechanisms have been added to the \"SASL\n   SCRAM Family Mechanisms\" registry:\n\n      To: iana@iana.org\n      Subject: Registration of a new SASL SCRAM Family mechanism\n         SCRAM-SHA-256\n\n      SASL mechanism name (or prefix for the family): SCRAM-SHA-256\n      Security considerations: Section 4 of RFC 7677\n      Published specification (optional, recommended): RFC 7677\n      Minimum iteration-count: 4096\n      OID: 1.3.6.1.5.5.18\n      Person & email address to contact for further information:\n         IETF KITTEN WG <kitten@ietf.org>\n      Intended usage: COMMON\n      Owner/Change controller: IESG <iesg@ietf.org>\n      Note:\n\n      To: iana@iana.org\n      Subject: Registration of a new SASL SCRAM Family mechanism\n         SCRAM-SHA-256-PLUS\n\n      SASL mechanism name (or prefix for the family): SCRAM-SHA-256-PLUS\n      Security considerations: Section 4 of RFC 7677\n      Published specification (optional, recommended): RFC 7677\n      Minimum iteration-count: 4096\n      OID: 1.3.6.1.5.5.18\n      Person & email address to contact for further information:\n         IETF KITTEN WG <kitten@ietf.org>\n      Intended usage: COMMON\n      Owner/Change controller: IESG <iesg@ietf.org>\n      Note:\n\n6.  References\n\n6.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <http://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC4422]  Melnikov, A., Ed. and K. Zeilenga, Ed., \"Simple\n              Authentication and Security Layer (SASL)\", RFC 4422,\n              DOI 10.17487/RFC4422, June 2006,\n              <http://www.rfc-editor.org/info/rfc4422>.\n\n\n\n\n\nHansen                       Standards Track                    [Page 6]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\n   [RFC5802]  Newman, C., Menon-Sen, A., Melnikov, A., and N. Williams,\n              \"Salted Challenge Response Authentication Mechanism\n              (SCRAM) SASL and GSS-API Mechanisms\", RFC 5802,\n              DOI 10.17487/RFC5802, July 2010,\n              <http://www.rfc-editor.org/info/rfc5802>.\n\n   [RFC6234]  Eastlake 3rd, D. and T. Hansen, \"US Secure Hash Algorithms\n              (SHA and SHA-based HMAC and HKDF)\", RFC 6234,\n              DOI 10.17487/RFC6234, May 2011,\n              <http://www.rfc-editor.org/info/rfc6234>.\n\n   [RFC7627]  Bhargavan, K., Ed., Delignat-Lavaud, A., Pironti, A.,\n              Langley, A., and M. Ray, \"Transport Layer Security (TLS)\n              Session Hash and Extended Master Secret Extension\",\n              RFC 7627, DOI 10.17487/RFC7627, September 2015,\n              <http://www.rfc-editor.org/info/rfc7627>.\n\n6.2.  Informative References\n\n   [RFC4270]  Hoffman, P. and B. Schneier, \"Attacks on Cryptographic\n              Hashes in Internet Protocols\", RFC 4270,\n              DOI 10.17487/RFC4270, November 2005,\n              <http://www.rfc-editor.org/info/rfc4270>.\n\n   [RFC5226]  Narten, T. and H. Alvestrand, \"Guidelines for Writing an\n              IANA Considerations Section in RFCs\", BCP 26, RFC 5226,\n              DOI 10.17487/RFC5226, May 2008,\n              <http://www.rfc-editor.org/info/rfc5226>.\n\n   [RFC6194]  Polk, T., Chen, L., Turner, S., and P. Hoffman, \"Security\n              Considerations for the SHA-0 and SHA-1 Message-Digest\n              Algorithms\", RFC 6194, DOI 10.17487/RFC6194, March 2011,\n              <http://www.rfc-editor.org/info/rfc6194>.\n\n   [RFC5246]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.2\", RFC 5246,\n              DOI 10.17487/RFC5246, August 2008,\n              <http://www.rfc-editor.org/info/rfc5246>.\n\nAcknowledgements\n\n   This document benefited from discussions on the KITTEN WG mailing\n   list.  The author would like to specially thank Russ Allbery, Dave\n   Cridland, Shawn Emery, Stephen Farrell, Simon Josefsson, Pearl Liang,\n   Alexey Melnikov, Peter Saint-Andre, Robert Sparks, Martin Thompson,\n   and Nico Williams for their comments on this topic.\n\n\n\n\n\nHansen                       Standards Track                    [Page 7]\n\f\nRFC 7677          SASL SCRAM-SHA-256/SCRAM-SHA-256-PLUS    November 2015\n\n\nAuthor's Address\n\n   Tony Hansen\n   AT&T Laboratories\n   200 Laurel Ave. South\n   Middletown, NJ  07748\n   United States\n\n   Email: tony+scramsha256@maillennium.att.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHansen                       Standards Track                    [Page 8]\n\f\n"
  },
  {
    "path": "rfc/rfc7888.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                  A. Melnikov, Ed.\nRequest for Comments: 7888                                     Isode Ltd\nObsoletes: 2088                                                 May 2016\nCategory: Standards Track\nISSN: 2070-1721\n\n\n                    IMAP4 Non-synchronizing Literals\n\nAbstract\n\n   The Internet Message Access Protocol (RFC 3501) contains the\n   \"literal\" syntactic construct for communicating strings.  When\n   sending a literal from client to server, IMAP requires the client to\n   wait for the server to send a command continuation request between\n   sending the octet count and the string data.  This document specifies\n   an alternate form of literal that does not require this network round\n   trip.\n\n   This document specifies 2 IMAP extensions: LITERAL+ and LITERAL-.\n   LITERAL+ allows the alternate form of literals in all IMAP commands.\n   LITERAL- is the same as LITERAL+, but it disallows the alternate form\n   of literals unless they are 4096 bytes or less.\n\n   This document obsoletes RFC 2088.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc7888.\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 1]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\nCopyright Notice\n\n   Copyright (c) 2016 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3\n   2.  Conventions . . . . . . . . . . . . . . . . . . . . . . . . .   3\n   3.  Specification . . . . . . . . . . . . . . . . . . . . . . . .   3\n   4.  Considerations on When to Use and Not to Use Synchronizing\n       Literals  . . . . . . . . . . . . . . . . . . . . . . . . . .   5\n   5.  LITERAL- Capability . . . . . . . . . . . . . . . . . . . . .   5\n   6.  Interaction with BINARY Extension . . . . . . . . . . . . . .   6\n   7.  Interaction with MULTIAPPEND Extension  . . . . . . . . . . .   6\n   8.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   6\n   9.  Security Considerations . . . . . . . . . . . . . . . . . . .   7\n   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .   7\n   11. References  . . . . . . . . . . . . . . . . . . . . . . . . .   7\n     11.1.  Normative References . . . . . . . . . . . . . . . . . .   7\n     11.2.  Informative References . . . . . . . . . . . . . . . . .   8\n   Appendix A.  Changes since RFC 2088 . . . . . . . . . . . . . . .   9\n   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .   9\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   9\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 2]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\n1.  Introduction\n\n   The Internet Message Access Protocol [RFC3501] contains the \"literal\"\n   syntactic construct for communicating strings.  When sending a\n   literal from client to server, IMAP requires the client to wait for\n   the server to send a command continuation request between sending the\n   octet count and the string data.  This document specifies an\n   alternate form of literal that does not require this network round\n   trip.\n\n   This document specifies 2 IMAP extensions: LITERAL+ and LITERAL-.\n   LITERAL+ allows the alternate form of literals (called \"non-\n   synchronized literals\" below) in all IMAP commands.  LITERAL- is the\n   same as LITERAL+, but it disallows the alternate form of literals\n   unless they are 4096 bytes or less.\n\n2.  Conventions\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.\n\n3.  Specification\n\n   The non-synchronizing literal is added as an alternate form of\n   literal, and it may appear in communication from client to server\n   instead of the IMAP [RFC3501] form of literal.  The IMAP form of\n   literal, used in communication from client to server, is referred to\n   as a synchronizing literal.  The non-synchronizing literal form MUST\n   NOT be sent from server to client.\n\n   Non-synchronizing literals may be used with any IMAP server\n   implementation that returns \"LITERAL+\" or \"LITERAL-\" as one of the\n   supported capabilities to the CAPABILITY command.  If the server does\n   not advertise either of the above capabilities, the client can only\n   use synchronizing literals.  The difference between LITERAL+ and\n   LITERAL- extensions is explained in Section 5.\n\n   The non-synchronizing literal is distinguished from the original\n   synchronizing literal by having a plus ('+') between the octet count\n   and the closing brace ('}').  The server does not generate a command\n\n\n\n\nMelnikov                     Standards Track                    [Page 3]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\n   continuation request in response to a non-synchronizing literal, and\n   clients are not required to wait before sending the octets of a non-\n   synchronizing literal.\n\n   The protocol receiver of an IMAP server MUST check the end of every\n   received line (a sequence of octets that ends with a CRLF) for an\n   open brace ('{') followed by an octet count, a plus ('+'), and a\n   close brace ('}') immediately preceding the CRLF.  This sequence (if\n   found by the receiver) is the octet count of a non-synchronizing\n   literal, and the server MUST treat the specified number of following\n   octets and the following line (as defined in [RFC3501]) as part of\n   the same command.\n\n   It's important to note that the literal is not delimited by CRLF.  It\n   ends after the number of bytes specified by the octet count, and the\n   current command continues from there.  There might be a CRLF\n   immediately after; it ends the command.  Or, there might be more\n   octets, specifying other command parameters, before the CRLF.  If a\n   SP (space) character is needed between parameters, it's important\n   that the SP appear after the literal, in its appropriate place.\n\n   A server MAY still process commands and reject errors on a line-by-\n   line basis, as long as it checks for non-synchronizing literals at\n   the end of each line.\n\n   Example:\n\n   C: A001 LOGIN {11+}\n   C: FRED FOOBAR {7+}\n   C: fat man\n   S: A001 OK LOGIN completed\n\n   This is semantically equivalent to this version that uses quoted\n   strings instead of literals:\n\n   C: A001 LOGIN \"FRED FOOBAR\" \"fat man\"\n   S: A001 OK LOGIN completed\n\n   Note that the space after FOOBAR in the first version corresponds\n   to the space between the two quoted strings in the second.\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 4]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\n4.  Considerations on When to Use and Not to Use Synchronizing Literals\n\n   Understanding of this section is important for both client and server\n   developers of this IMAP extension.\n\n   While non-synchronizing literals have clear advantages for clients,\n   such as simplicity of use, they might be more difficult to handle on\n   the server side.  When a client uses a non-synchronizing literal that\n   is too big for the server to accept, a server implementation that is\n   compliant with LITERAL+ has to make a choice between a couple non-\n   optimal choices:\n\n   1.  Read the number of bytes specified in the non-synchronizing\n       literal and reject the command that included the literal anyway.\n       (The server is allowed to send the tagged BAD/NO response before\n       reading the whole non-synchronizing literal.)  This is quite\n       wasteful of bandwidth if the literal is large.\n\n   2.  Send an untagged BYE response explaining the reason for rejecting\n       the literal (possibly accompanied by an ALERT response code in\n       another response) and close the connection.  This will force the\n       client to reconnect or report the error to the user.  In the\n       latter case, the error is unlikely to be understandable to the\n       user.  Additionally, some naive clients are known to blindly\n       reconnect in this case and repeat the operation that caused the\n       problem, introducing an infinite loop.\n\n   The problem described above is most common when using the APPEND\n   command, because most commands don't need to send lots of data from\n   the client to the server.  Some server implementations impose limits\n   on literals (both synchronizing and non-synchronizing) accepted from\n   clients in order to defend against denial-of-service attacks.\n   Implementations can generally impose much lower limits on literal\n   sizes for all commands other than APPEND.  In order to address\n   literal size issue in APPEND, this document introduces a new\n   extension LITERAL-, described in Section 5.\n\n   The situation can also be improved by implementing support for the\n   APPENDLIMIT extension [RFC7889], which allows a server to advertise\n   its APPEND limit, so that well-behaved clients can check it and avoid\n   uploading big messages in the first place.\n\n5.  LITERAL- Capability\n\n   The LITERAL- extension is almost identical to LITERAL+, with one\n   exception: when LITERAL- is advertised, non-synchronizing literals\n   used in any command MUST NOT be larger than 4096 bytes.  Any literal\n   larger than 4096 bytes MUST be sent as a synchronizing literal as\n\n\n\nMelnikov                     Standards Track                    [Page 5]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\n   specified in RFC 3501.  A server that is compliant with LITERAL- and\n   encounters a non-synchronizing literal larger than 4096 bytes\n   proceeds as described in Section 4.  If responding to an APPEND\n   command, the tagged BAD response MUST contain the TOOBIG response\n   code [RFC4469].  If responding with an untagged BYE response, it\n   SHOULD include the TOOBIG response code.  Note that the form of the\n   non-synchronizing literal does not change: it still uses the \"+\" in\n   the literal itself, even if the applicable extension is LITERAL-.\n\n   Because LITERAL- is a more restricted version of LITERAL+, IMAP\n   servers MUST NOT advertise both of these capabilities at the same\n   time.  (A server implementation can choose to have a configuration\n   option to indicate which one to advertise.)\n\n6.  Interaction with BINARY Extension\n\n   [RFC4466] updated the non-terminal \"literal8\" defined in [RFC3516] to\n   allow for non-synchronizing literals if both BINARY [RFC3516] and\n   LITERAL+ extensions are supported by the server.\n\n   This document also allows use of this extended \"literal8\" syntax when\n   both BINARY [RFC3516] and LITERAL- extensions are supported by the\n   server.\n\n7.  Interaction with MULTIAPPEND Extension\n\n   [RFC3502] describes MULTIAPPEND extension and how it can be used with\n   LITERAL+.  The LITERAL- extension can be used with the MULTIAPPEND\n   extension in the same way.\n\n8.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   [RFC3501].\n\n     literal = \"{\" number [\"+\"] \"}\" CRLF *CHAR8\n                ; Number represents the number of CHAR8 octets\n\n     CHAR8   = <defined in RFC 3501>\n\n     literal8 = <defined in RFC 4466>\n\n\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 6]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\n9.  Security Considerations\n\n   Use of non-synchronizing literals can consume extra resources (e.g.\n   memory) on IMAP servers and can be used for denial-of-service\n   attacks.  The LITERAL- extension partially improved this situation.\n\n   This document doesn't raise any security concerns beyond those raised\n   by [RFC3501].\n\n10.  IANA Considerations\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Experimental RFC.  The registry is currently located at\n   <http://www.iana.org/assignments/imap-capabilities>.\n\n   IANA has updated the above registry so that the reference for\n   \"LITERAL+\" points to this document.\n\n   IANA has added the \"LITERAL-\" capability to the above registry, with\n   this document as the reference.\n\n11.  References\n\n11.1.  Normative References\n\n   [ABNF]     Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <http://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <http://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <http://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC3516]  Nerenberg, L., \"IMAP4 Binary Content Extension\", RFC 3516,\n              DOI 10.17487/RFC3516, April 2003,\n              <http://www.rfc-editor.org/info/rfc3516>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <http://www.rfc-editor.org/info/rfc4466>.\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 7]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\n   [RFC4469]  Resnick, P., \"Internet Message Access Protocol (IMAP)\n              CATENATE Extension\", RFC 4469, DOI 10.17487/RFC4469, April\n              2006, <http://www.rfc-editor.org/info/rfc4469>.\n\n11.2.  Informative References\n\n   [RFC3502]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              MULTIAPPEND Extension\", RFC 3502, DOI 10.17487/RFC3502,\n              March 2003, <http://www.rfc-editor.org/info/rfc3502>.\n\n   [RFC7889]  SrimushnamBoovaraghamoorthy, J. and N. Bisht, \"The IMAP\n              APPENDLIMIT Extension\", RFC 7889, DOI 10.17487/RFC7889,\n              May 2016, <http://www.rfc-editor.org/info/rfc7889>.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 8]\n\f\nRFC 7888            IMAP4 Non-synchronizing Literals            May 2016\n\n\nAppendix A.  Changes since RFC 2088\n\n   Added IANA registration.\n\n   Updated references.  Also updated considerations about interactions\n   of IMAP extensions.\n\n   Added implementation considerations based on the IMAP mailing list\n   discussions.\n\n   Added description of a new capability: LITERAL-.\n\nAcknowledgments\n\n   John G. Myers edited the original LITERAL+ extension.\n\n   Valuable comments, both in agreement and in dissent, were received\n   from Dave Cridland, Michael M. Slusarz, Arnt Gulbrandsen, Jayantheesh\n   SrimushnamBoovaraghamoorthy, Jamie Nicolson, Barry Leiba, and SM.\n\nAuthor's Address\n\n   Alexey Melnikov (editor)\n   Isode Ltd\n   14 Castle Mews\n   Hampton, Middlesex  TW12 2NP\n   United Kingdom\n\n   Email: Alexey.Melnikov@isode.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMelnikov                     Standards Track                    [Page 9]\n\f\n"
  },
  {
    "path": "rfc/rfc7889.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)    J. SrimushnamBoovaraghamoorthy\nRequest for Comments: 7889                                      N. Bisht\nCategory: Standards Track                    Samsung Electronics America\nISSN: 2070-1721                                                 May 2016\n\n\n                     The IMAP APPENDLIMIT Extension\n\nAbstract\n\n   This document defines an extension to the IMAP service whereby a\n   server can inform the client about maximum message upload sizes,\n   allowing the client to avoid sending APPEND commands that will fail\n   because the messages are too large.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 5741.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   http://www.rfc-editor.org/info/rfc7889.\n\nCopyright Notice\n\n   Copyright (c) 2016 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (http://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 1]\n\f\nRFC 7889             The IMAP APPENDLIMIT Extension             May 2016\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n     1.1.  Conventions . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  APPENDLIMIT Extension . . . . . . . . . . . . . . . . . . . .   3\n   3.  Mailbox-Specific APPENDLIMIT  . . . . . . . . . . . . . . . .   3\n     3.1.  STATUS Response to the STATUS Command . . . . . . . . . .   4\n     3.2.  STATUS Response to the LIST Command . . . . . . . . . . .   4\n     3.3.  APPENDLIMIT Behavior  . . . . . . . . . . . . . . . . . .   4\n   4.  APPEND Response . . . . . . . . . . . . . . . . . . . . . . .   4\n   5.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   5\n   6.  Security Considerations . . . . . . . . . . . . . . . . . . .   5\n   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   5\n   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   6\n     8.1.  Normative References  . . . . . . . . . . . . . . . . . .   6\n     8.2.  Informative References  . . . . . . . . . . . . . . . . .   6\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .   7\n   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .   7\n\n1.  Introduction\n\n   Some IMAP servers have limits for message upload size, and those\n   limits are not published to the email client.  When the email client\n   APPENDs a message with huge attachments, using non-synchronizing\n   literals, the APPEND fails because of the upload limit, but the\n   client has already sent the message data anyway.  This results in\n   unnecessary resource usage.  Especially in the mobile device\n   environment, appending a message with huge attachments consumes\n   device resources like device battery power and mobile data.\n\n   The IMAP APPENDLIMIT extension provides the ability to advertise a\n   maximum upload size allowed by the IMAP server, so that the email\n   client knows the size limitation beforehand.  By implementing this\n   extension, IMAP server-side processing of huge attachments above the\n   maximum upload size can be avoided.\n\n1.1.  Conventions\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this\n   document are to be interpreted as described in [RFC2119].\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.\n\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 2]\n\f\nRFC 7889             The IMAP APPENDLIMIT Extension             May 2016\n\n\n2.  APPENDLIMIT Extension\n\n   An IMAP server that supports the APPENDLIMIT extension advertises\n   this by including the name APPENDLIMIT in its capability list in the\n   authenticated state.  The server may also advertise this extension\n   before the user has logged in.  If this capability is omitted, no\n   information is conveyed about the server's fixed maximum size for\n   mail uploads.  An IMAP server can publish the APPENDLIMIT capability\n   in two formats.\n\n   (a) APPENDLIMIT=<number>\n\n   This indicates that the IMAP server has the same upload limit for all\n   mailboxes.  The following example demonstrates the APPENDLIMIT\n   capability with the same upload limit for all mailboxes.\n\n   C: t1 CAPABILITY\n   S: * CAPABILITY IMAP4rev1 ID APPENDLIMIT=257890\n   S: t1 OK foo\n\n   (b) APPENDLIMIT\n\n   The APPENDLIMIT capability without any value indicates that the IMAP\n   server supports this extension, and that the client will need to\n   discover upload limits for each mailbox, as they might differ from\n   mailbox to mailbox.  The following example demonstrates the\n   APPENDLIMIT capability without any value.\n\n   C: t1 CAPABILITY\n   S: * CAPABILITY IMAP4rev1 ID APPENDLIMIT\n   S: t1 OK foo\n\n   In this case, the client can get an APPENDLIMIT value by either\n   issuing a STATUS or a LIST command.\n\n   An IMAP client implementing this extension should be able to parse\n   both mailbox-specific and global APPENDLIMIT responses.  By looking\n   at the upload size advertised by the IMAP server, a client can avoid\n   trying to APPEND mail more than the advertised limit.\n\n3.  Mailbox-Specific APPENDLIMIT\n\n   An IMAP server can have mailbox-specific APPENDLIMIT values that will\n   not be advertised as part of the CAPABILITY response.  The IMAP\n   server can publish specific values for each mailbox, and it can\n   publish \"NIL\" for a mailbox to convey that there is no APPENDLIMIT\n   for that mailbox.  The following subsections describe the changes to\n   the STATUS and LIST commands in support of this situation.\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 3]\n\f\nRFC 7889             The IMAP APPENDLIMIT Extension             May 2016\n\n\n3.1.  STATUS Response to the STATUS Command\n\n   A new attribute APPENDLIMIT is added to get the limit set by the\n   server for a mailbox as part of a STATUS command.  An IMAP client\n   should issue a STATUS command with an APPENDLIMIT item to get the\n   mailbox-specific upload value.  The following example demonstrates\n   its usage.\n\n   C: t1 STATUS INBOX (APPENDLIMIT)\n   S: * STATUS INBOX (APPENDLIMIT 257890)\n   S: t1 OK STATUS completed\n\n   In the above example, APPENDLIMIT represents the maximum upload size\n   for INBOX.\n\n3.2.  STATUS Response to the LIST Command\n\n   If the server advertises the LIST-STATUS capability [RFC5819], the\n   client can issue a LIST command in combination with the STATUS return\n   option to get the mailbox-specific upload value.  The following\n   example demonstrates its usage.\n\n   C: t1 LIST \"\" % RETURN (STATUS (APPENDLIMIT))\n   S: * LIST () \".\"  \"INBOX\"\n   S: * STATUS \"INBOX\" (APPENDLIMIT 257890)\n   S: t1 OK List completed.\n\n   The IMAP server MUST recognize the APPENDLIMIT attribute and include\n   an appropriate STATUS response for each matching mailbox.  Refer to\n   Section 5 for the syntax.\n\n   If the server does not support the STATUS return option on the LIST\n   command, then the client should use the STATUS command instead.\n\n3.3.  APPENDLIMIT Behavior\n\n   Computing the APPENDLIMIT should be fast and should not take Access\n   Control Lists (ACLs), quotas, or other such information into account.\n   The APPENDLIMIT specifies one part of the policy, but an APPEND\n   command can still fail due to issues related to ACLs and quotas, even\n   if the message being appended is smaller than the APPENDLIMIT.\n\n4.  APPEND Response\n\n   If a client uploads a message that exceeds the maximum upload size\n   set for that mailbox, then the server SHALL reject the APPEND command\n   with a tagged TOOBIG response code.  Refer to Section 4 of [RFC4469]\n   for various APPEND response codes and their handling.\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 4]\n\f\nRFC 7889             The IMAP APPENDLIMIT Extension             May 2016\n\n\n   A client SHOULD avoid use of non-synchronizing literals [RFC7888]\n   when the maximum upload size supported by the IMAP server is unknown.\n   Refer to Section 4.2.2.3 of [RFC4549] for usage of non-synchronizing\n   literals and its risk for disconnected IMAP clients.\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234] including the core\n   rules in Appendix B.1 of that document.  [RFC3501] defines the non-\n   terminals \"capability\" and \"status-att\", and [RFC4466] defines\n   \"status-att-val\".\n\n   All alphabetic characters are case insensitive.  The use of uppercase\n   or lowercase characters to define token strings is for editorial\n   clarity only.  Implementations MUST accept these strings in a case-\n   insensitive fashion.\n\n   capability =/ \"APPENDLIMIT\" [\"=\" number]\n               ;; capability is defined in RFC 3501\n\n   status-att =/ \"APPENDLIMIT\"\n               ;; status-att is defined in RFC 3501\n\n   status-att-val =/ \"APPENDLIMIT\" SP (number / nil)\n                   ;; status-att-val is defined in RFC 4466\n\n\n   The number indicates the fixed maximum message size in octets that\n   the server will accept.  An APPENDLIMIT number of 0 indicates the\n   server will not accept any APPEND commands at all for the affected\n   mailboxes.\n\n6.  Security Considerations\n\n   This extension provides additional information that cooperative\n   clients can use as an optimization and does not introduce new\n   security concerns.  This extension does not address abusive clients\n   that intend to consume server resources, and servers will still have\n   to take action to disconnect and/or restrict access to clients that\n   exhibit abusive behavior.\n\n7.  IANA Considerations\n\n   IANA has added \"APPENDLIMIT\" to the \"IMAP Capabilities\" registry,\n   using this document as its reference.\n\n\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 5]\n\f\nRFC 7889             The IMAP APPENDLIMIT Extension             May 2016\n\n\n8.  References\n\n8.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <http://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <http://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <http://www.rfc-editor.org/info/rfc4466>.\n\n   [RFC4469]  Resnick, P., \"Internet Message Access Protocol (IMAP)\n              CATENATE Extension\", RFC 4469, DOI 10.17487/RFC4469, April\n              2006, <http://www.rfc-editor.org/info/rfc4469>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <http://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5819]  Melnikov, A. and T. Sirainen, \"IMAP4 Extension for\n              Returning STATUS Information in Extended LIST\", RFC 5819,\n              DOI 10.17487/RFC5819, March 2010,\n              <http://www.rfc-editor.org/info/rfc5819>.\n\n   [RFC7888]  Melnikov, A., Ed., \"IMAP4 Non-synchronizing Literals\",\n              RFC 7888, DOI 10.17487/RFC7888, May 2016,\n              <http://www.rfc-editor.org/info/rfc7888>.\n\n8.2.  Informative References\n\n   [RFC4549]  Melnikov, A., Ed., \"Synchronization Operations for\n              Disconnected IMAP4 Clients\", RFC 4549,\n              DOI 10.17487/RFC4549, June 2006,\n              <http://www.rfc-editor.org/info/rfc4549>.\n\n\n\n\n\n\n\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 6]\n\f\nRFC 7889             The IMAP APPENDLIMIT Extension             May 2016\n\n\nAcknowledgements\n\n   Thanks to Alexey Melnikov, Dave Cridland, Adrien de Croy, Michael\n   M. Slusarz, Timo Sirainen, Chris Newman, Pete Maclean, Jamie\n   Nicolson, Stu Brandt, Bron Gondwana, Arnt Gulbrandsen, Cyrus Daboo,\n   Jan Kundrat, Brandon Long, and Barry Leiba for providing valuable\n   comments.\n\nAuthors' Addresses\n\n   Jayantheesh SrimushnamBoovaraghamoorthy\n   Samsung Electronics America\n   685 US Highway 202/206\n   Bridgewater, NJ  08807\n   United States\n\n   Email: jayantheesh.sb@gmail.com\n\n\n   Narendra Singh Bisht\n   Samsung Electronics America\n   685 US Highway 202/206\n   Bridgewater, NJ  08807\n   United States\n\n   Email: narendrasingh.bisht@gmail.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSrimushnamB. & Bisht         Standards Track                    [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc8437.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                         C. Newman\nRequest for Comments: 8437                                        Oracle\nUpdates: 3501                                                August 2018\nCategory: Standards Track\nISSN: 2070-1721\n\n\n           IMAP UNAUTHENTICATE Extension for Connection Reuse\n\nAbstract\n\n   This specification extends the Internet Message Access Protocol\n   (IMAP) to allow an administrative client to reuse the same IMAP\n   connection on behalf of multiple IMAP user identities.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8437.\n\nCopyright Notice\n\n   Copyright (c) 2018 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\nNewman                       Standards Track                    [Page 1]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . .   2\n   3.  UNAUTHENTICATE Command  . . . . . . . . . . . . . . . . . . .   3\n   4.  Interactions  . . . . . . . . . . . . . . . . . . . . . . . .   4\n     4.1.  Stateful Extensions . . . . . . . . . . . . . . . . . . .   4\n     4.2.  Client Certificates, SASL EXTERNAL, and imaps . . . . . .   5\n   5.  Revised State Machine . . . . . . . . . . . . . . . . . . . .   6\n   6.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   7\n   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   7\n   8.  Security Considerations . . . . . . . . . . . . . . . . . . .   7\n   9.  Privacy Considerations  . . . . . . . . . . . . . . . . . . .   8\n   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .   8\n     10.1.  Normative References . . . . . . . . . . . . . . . . . .   8\n     10.2.  Informative References . . . . . . . . . . . . . . . . .   9\n   Appendix A.  Design Considerations  . . . . . . . . . . . . . . .  11\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  11\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  11\n\n1.  Introduction\n\n   Modern IMAP [RFC3501] server deployments often have peer systems with\n   administrative privilege that perform actions on behalf of IMAP end\n   users.  For example, a voicemail gateway can use IMAP to store a\n   user's voicemail and mark that voicemail as \\Seen when the user\n   listens to it via the phone interface.  These systems can issue the\n   IMAP AUTHENTICATE command with administrative credentials to act on\n   behalf of other users.  However, with the IMAP base specification,\n   these specialized IMAP clients must close the connection and create a\n   new connection for each user.  For efficiency reasons, it is\n   desirable for these clients to reuse the same connection,\n   particularly if SSL has been negotiated.  This specification proposes\n   the UNAUTHENTICATE command to achieve this goal.\n\n   The IMAP state machine described in Section 3 of RFC 3501 does not\n   have a transition from authenticated or selected state to not\n   authenticated state.  The UNAUTHENTICATE command adds this\n   transition.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n\n\n\nNewman                       Standards Track                    [Page 2]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n3.  UNAUTHENTICATE Command\n\n   Arguments:  None\n\n   Responses:  No specific response for this command\n\n   Result:     OK - Completed, now in not authenticated state\n               BAD - Command unknown or arguments invalid\n\n   This command directs the server to reset all connection state except\n   for the state of the TLS [RFC8446] layer.  Upon completion, the\n   server connection is placed in not authenticated state.  This\n   represents Transition 7 in the State Machine Diagram (Section 5).\n\n   If a mailbox was selected, the mailbox ceases to be selected, but no\n   expunge event is generated.  If a Simple Authentication and Security\n   Layer (SASL) [RFC4422] was active, the server terminates its outgoing\n   security layer immediately after sending the CRLF following the OK\n   response.  The client's outgoing security layer terminates\n   immediately after the CRLF following the UNAUTHENTICATE command.\n   Note that a BAD response only occurs if UNAUTHENTICATE is issued in\n   an invalid state, is not advertised by the server, or does not follow\n   the command syntax in the specification.  A NO response is not\n   permitted.  As a result, specification-compliant implementations will\n   interoperate across security layer termination.\n\n   After sending this command, the client is free to issue a new\n   AUTHENTICATE or LOGIN command as permitted based on the server's\n   capabilities.  If no SASL security layer was active, the client is\n   permitted to pipeline the UNAUTHENTICATE command with a subsequent\n   AUTHENTICATE command.  If the IMAP server also advertises SASL-IR\n   [RFC4959], this permits an administrative client to re-authenticate\n   in one round trip.  Because of this pipelining optimization, a server\n   advertising UNAUTHENTICATE is not permitted to respond to the\n   UNAUTHENTICATE command with a NO response if it is unable to reset\n   the state associated with the connection.  Servers MAY close the\n   connection with an untagged BYE response if this preferably rare\n   situation occurs.\n\n   Servers MAY choose to advertise the UNAUTHENTICATE capability only\n   after authentication has completed.  As a result, clients may need to\n   issue an IMAP CAPABILITY command after authentication in order to\n   determine the availability of UNAUTHENTICATE.\n\n\n\n\n\n\n\n\nNewman                       Standards Track                    [Page 3]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n   The IMAP ID [RFC2971] command provides properties about the client\n   primarily for use in server log or audit files.  Because IMAP ID is\n   not related to application authentication or user identity in any\n   way, and caching it for the duration of the client connection can be\n   useful, the interaction between IMAP ID and the UNAUTHENTICATE\n   command is defined by the implementation.\n\n4.  Interactions\n\n   This section describes interactions between this extension and other\n   IMAP extensions or usage models.\n\n4.1.  Stateful Extensions\n\n   The connection state for the following list of IMAP extensions MUST\n   be reset if both a) the specified extension is advertised and b) the\n   UNAUTHENTICATE command is advertised and used.  This list may not be\n   complete; the requirement to reset the connection state applies to\n   all current and future extensions except STARTTLS and ID.  Additional\n   requirements apply to specific stateful extensions as follows:\n\n   o  Cached identity information, such as group memberships, that are\n      used to evaluate access control lists [RFC4314] MUST be reset.\n\n   o  After an UNAUTHENTICATE command is issued, CONDSTORE servers\n      [RFC7162] MUST behave as if no CONDSTORE-enabling command was\n      issued.\n\n   o  If IMAP COMPRESS [RFC4978] is active, the server terminates its\n      outgoing compression layer after it sends the CRLF following the\n      OK response.  The client terminates its outgoing compression layer\n      after the CRLF following the UNAUTHENTICATE command.  When it\n      matters, the compression layer terminates before a SASL layer\n      terminates.\n\n   o  Any extensions enabled by the IMAP ENABLE [RFC5161] command cease\n      to be enabled when the UNAUTHENTICATE command is issued.  This\n      includes, but is not limited to, CONDSTORE [RFC7162], QRESYNC\n      [RFC7162], METADATA [RFC5464], METADATA-SERVER [RFC5464], and\n      UTF8=ACCEPT [RFC6855].\n\n   o  A server advertising SEARCHRES [RFC5182] discards any saved search\n      results so that '$' subsequently represents the empty set.\n\n   o  A server advertising LANGUAGE [RFC5255] will revert to the\n      \"i-default\" language.\n\n\n\n\n\nNewman                       Standards Track                    [Page 4]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n   o  When a server advertises CONTEXT=SEARCH or CONTEXT=SORT [RFC5267],\n      the UNAUTHENTICATE command includes an implicit CANCELUPDATE for\n      all server contexts.\n\n   o  When a server advertises NOTIFY [RFC5465], the UNAUTHENTICATE\n      command cancels the server state related to the NOTIFY command and\n      reverts to default IMAP base-specification behavior for\n      notifications.\n\n4.2.  Client Certificates, SASL EXTERNAL, and imaps\n\n   When a TLS [RFC8446] security layer is negotiated using either the\n   STARTTLS command or the imaps port [RFC8314], IMAP servers may be\n   configured to request a client certificate, and IMAP clients may\n   provide one.  Client credentials at the TLS layer do not normally\n   impact the application layer; however, they do have an impact when\n   the SASL EXTERNAL mechanism [RFC4422] in an IMAP AUTHENTICATE command\n   is used to direct the server to use the provided client certificate\n   to authenticate as the specified IMAP user.  The UNAUTHENTICATE\n   command breaks any application-level binding of the TLS client\n   credentials but does not discard the client credentials.  As a\n   result, an administrative client may use a client certificate with\n   administrative privilege to act on behalf of multiple IMAP users in\n   the same connection via the EXTERNAL mechanism and the UNAUTHENTICATE\n   command.\n\n   Some server implementations using the imaps port will request and use\n   a TLS client certificate to authenticate immediately as the default\n   IMAP identity associated with that certificate.  These\n   implementations indicate this behavior by using the PREAUTH greeting,\n   as indicated by Transition 2 in the State Machine Diagram\n   (Section 5).  As a result, TLS client certificates cannot be used for\n   administrative proxy authentication with the imaps port unless the\n   UNAUTHENTICATE command is also advertised.  In that case, an\n   administrative client can respond to the PREAUTH greeting with an\n   UNAUTHENTICATE command and then issue an AUTHENTICATE EXTERNAL\n   command.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                       Standards Track                    [Page 5]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n5.  Revised State Machine\n\n                      +----------------------+\n                      |connection established|\n                      +----------------------+\n                                 ||\n                                 \\/\n               +--------------------------------------+\n               |          server greeting             |\n               +--------------------------------------+\n                         || (1)       || (2)        || (3)\n                         \\/           ||            ||\n               +-----------------+    ||            ||\n               |Not Authenticated|<===||=========++ ||\n               +-----------------+    ||     (7) || ||\n                || (8)   || (4)       ||         || ||\n                ||       \\/           \\/         || ||\n                ||     +----------------+        || ||\n                ||     |                |========++ ||\n                ||     | Authenticated  |<=++    || ||\n                ||     +----------------+  ||    || ||\n                ||       || (8)   || (5)   ||(6) || ||\n                ||       ||       \\/       ||    || ||\n                ||       ||    +--------+  ||    || ||\n                ||       ||    |Selected|==++    || ||\n                ||       ||    |        |========++ ||\n                ||       ||    +--------+           ||\n                ||       ||       || (8)            ||\n                \\/       \\/       \\/                \\/\n               +--------------------------------------+\n               |               Logout                 |\n               +--------------------------------------+\n                                 ||\n                                 \\/\n                   +-------------------------------+\n                   |both sides close the connection|\n                   +-------------------------------+\n\n   Revised IMAP state machine transitions:\n\n   1.  Connection without pre-authentication (OK greeting)\n\n   2.  Pre-authenticated connection (PREAUTH greeting)\n\n   3.  Rejected connection (BYE greeting)\n\n   4.  Successful LOGIN or AUTHENTICATE command\n\n\n\n\nNewman                       Standards Track                    [Page 6]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n   5.  Successful SELECT or EXAMINE command\n\n   6.  CLOSE, UNSELECT [RFC3691], or failed SELECT or EXAMINE command\n\n   7.  UNAUTHENTICATE command\n\n   8.  LOGOUT command, server shutdown, or connection closed\n\n6.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF), as described in [RFC5234].  Amended terms are defined in\n   [RFC3501].\n\n     capability     =/ \"UNAUTHENTICATE\"\n\n     command-auth   =/ \"UNAUTHENTICATE\"\n\n     command-select =/ \"UNAUTHENTICATE\"\n\n7.  IANA Considerations\n\n   IANA has added the UNAUTHENTICATE capability to the \"IMAP\n   Capabilities\" registry.\n\n8.  Security Considerations\n\n   The original IMAP state machine was designed to allow a server-\n   implementation approach in which each IMAP authentication identity\n   matches an operating system identity and the server revokes all\n   administrative privilege once authentication completes.  This\n   extension is not compatible with that implementation approach.\n   However, that approach has significant performance costs on Unix\n   systems, and this extension is designed for environments where\n   efficiency is a relatively high-priority deployment goal.  This\n   extension is therefore appropriate for some deployments but may not\n   be appropriate for the most security-sensitive environments.\n\n   IMAP server implementations are complicated and can retain a lot of\n   state related to an authenticated user.  Server implementers need to\n   take care to reset all server state such that authentication as a\n   subsequent user does not inherit any data or privileges from the\n   previous user.  State data associated with a user can include cached\n   identity information such as group membership used to evaluate access\n   control lists [RFC4314], active notifications [RFC5465], access to\n   per-user data such as flags, etc.\n\n\n\n\n\nNewman                       Standards Track                    [Page 7]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n   IMAP server systems are often deployed in a two-tier model where a\n   server-side IMAP proxy routes to an IMAP backend that handles all\n   connections for a subset of possible users.  Some IMAP proxies enter\n   a pass-through mode after authentication.  If enabled, the\n   UNAUTHENTICATE command would allow a client, on a subsequent\n   authentication, to bypass any security restrictions present in the\n   proxy layer but not in the backend server layer.  As a result, IMAP\n   server implementations of this extension MUST provide a way to\n   disable it when it is not needed.  Use of an IMAP proxy that\n   processes the UNAUTHENTICATE command at the proxy layer eliminates\n   this concern.  Another option to mitigate this concern is for servers\n   to only enable the UNAUTHENTICATE extension if the supplied\n   authentication credentials are associated with an administrative\n   identity.\n\n9.  Privacy Considerations\n\n   For the most part, this extension will have no impact on the privacy\n   considerations already present in an IMAP implementation.  However,\n   if this extension were used between data centers, it could improve\n   end-user privacy by increasing the difficultly of traffic analysis\n   due to connection reuse.\n\n10.  References\n\n10.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n\n\n\n\n\n\nNewman                       Standards Track                    [Page 8]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n10.2.  Informative References\n\n   [RFC2971]  Showalter, T., \"IMAP4 ID extension\", RFC 2971,\n              DOI 10.17487/RFC2971, October 2000,\n              <https://www.rfc-editor.org/info/rfc2971>.\n\n   [RFC3691]  Melnikov, A., \"Internet Message Access Protocol (IMAP)\n              UNSELECT command\", RFC 3691, DOI 10.17487/RFC3691,\n              February 2004, <https://www.rfc-editor.org/info/rfc3691>.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, DOI 10.17487/RFC4314, December 2005,\n              <https://www.rfc-editor.org/info/rfc4314>.\n\n   [RFC4422]  Melnikov, A., Ed. and K. Zeilenga, Ed., \"Simple\n              Authentication and Security Layer (SASL)\", RFC 4422,\n              DOI 10.17487/RFC4422, June 2006,\n              <https://www.rfc-editor.org/info/rfc4422>.\n\n   [RFC4959]  Siemborski, R. and A. Gulbrandsen, \"IMAP Extension for\n              Simple Authentication and Security Layer (SASL) Initial\n              Client Response\", RFC 4959, DOI 10.17487/RFC4959,\n              September 2007, <https://www.rfc-editor.org/info/rfc4959>.\n\n   [RFC4978]  Gulbrandsen, A., \"The IMAP COMPRESS Extension\", RFC 4978,\n              DOI 10.17487/RFC4978, August 2007,\n              <https://www.rfc-editor.org/info/rfc4978>.\n\n   [RFC5161]  Gulbrandsen, A., Ed. and A. Melnikov, Ed., \"The IMAP\n              ENABLE Extension\", RFC 5161, DOI 10.17487/RFC5161, March\n              2008, <https://www.rfc-editor.org/info/rfc5161>.\n\n   [RFC5182]  Melnikov, A., \"IMAP Extension for Referencing the Last\n              SEARCH Result\", RFC 5182, DOI 10.17487/RFC5182, March\n              2008, <https://www.rfc-editor.org/info/rfc5182>.\n\n   [RFC5255]  Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n              Message Access Protocol Internationalization\", RFC 5255,\n              DOI 10.17487/RFC5255, June 2008,\n              <https://www.rfc-editor.org/info/rfc5255>.\n\n   [RFC5267]  Cridland, D. and C. King, \"Contexts for IMAP4\", RFC 5267,\n              DOI 10.17487/RFC5267, July 2008,\n              <https://www.rfc-editor.org/info/rfc5267>.\n\n\n\n\n\n\n\nNewman                       Standards Track                    [Page 9]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\n   [RFC5464]  Daboo, C., \"The IMAP METADATA Extension\", RFC 5464,\n              DOI 10.17487/RFC5464, February 2009,\n              <https://www.rfc-editor.org/info/rfc5464>.\n\n   [RFC5465]  Gulbrandsen, A., King, C., and A. Melnikov, \"The IMAP\n              NOTIFY Extension\", RFC 5465, DOI 10.17487/RFC5465,\n              February 2009, <https://www.rfc-editor.org/info/rfc5465>.\n\n   [RFC6855]  Resnick, P., Ed., Newman, C., Ed., and S. Shen, Ed., \"IMAP\n              Support for UTF-8\", RFC 6855, DOI 10.17487/RFC6855, March\n              2013, <https://www.rfc-editor.org/info/rfc6855>.\n\n   [RFC7162]  Melnikov, A. and D. Cridland, \"IMAP Extensions: Quick Flag\n              Changes Resynchronization (CONDSTORE) and Quick Mailbox\n              Resynchronization (QRESYNC)\", RFC 7162,\n              DOI 10.17487/RFC7162, May 2014,\n              <https://www.rfc-editor.org/info/rfc7162>.\n\n   [RFC8314]  Moore, K. and C. Newman, \"Cleartext Considered Obsolete:\n              Use of Transport Layer Security (TLS) for Email Submission\n              and Access\", RFC 8314, DOI 10.17487/RFC8314, January 2018,\n              <https://www.rfc-editor.org/info/rfc8314>.\n\n   [RFC8446]  Rescorla, E., \"The Transport Layer Security (TLS) Protocol\n              Version 1.3\", RFC 8446, DOI 10.17487/RFC8446, August 2018,\n              <https://www.rfc-editor.org/info/rfc8446>.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                       Standards Track                   [Page 10]\n\f\nRFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018\n\n\nAppendix A.  Design Considerations\n\n   The author deliberately chose to add a separate UNAUTHENTICATE\n   command instead of allowing the LOGIN or AUTHENTICATE commands to be\n   issued when the connection is in a state other than unauthenticated.\n   The primary reason for this choice is that the code that transitions\n   from not authenticated state to authenticated state in a server is\n   often the most security-sensitive code, because it needs to assume\n   and handle unconditionally hostile attackers.  That sensitive code is\n   simpler if it only handles a single server state (unauthenticated)\n   and the state transition is as simple as possible.  Smaller and\n   simpler code is easier to audit and write in a secure way.\n\n   A secondary reason to have a separate command is that it is simpler\n   to enable or disable the feature with that design.  See the\n   discussion in the Security Considerations section recommending that\n   implementations provide a way to disable this extension.\n\nAcknowledgements\n\n   Thanks to Fred Batty for implementing UNAUTHENTICATE and to Cyrus\n   Daboo for constructive suggestions to improve this document.\n\nAuthor's Address\n\n   Chris Newman\n   Oracle\n   440 E. Huntington Dr., Suite 400\n   Arcadia, CA  91006\n   United States of America\n\n   Email: chris.newman@oracle.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNewman                       Standards Track                   [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc8438.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                          S. Bosch\nRequest for Comments: 8438                                    Dovecot Oy\nCategory: Standards Track                                    August 2018\nISSN: 2070-1721\n\n\n                     IMAP Extension for STATUS=SIZE\n\nAbstract\n\n   This document adds a new capability called \"STATUS=SIZE\" to the\n   Internet Message Access Protocol (IMAP).  It allows retrieving the\n   total storage size of a mailbox with a single STATUS command rather\n   than retrieving and summing the sizes of all individual messages in\n   that mailbox.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8438.\n\nCopyright Notice\n\n   Copyright (c) 2018 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 1]\n\f\nRFC 8438               IMAP STATUS=SIZE Extension            August 2018\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . .   3\n   3.  STATUS Command and Response Extensions  . . . . . . . . . . .   3\n   4.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   5\n   5.  Security Considerations . . . . . . . . . . . . . . . . . . .   5\n   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   5\n   7.  Normative References  . . . . . . . . . . . . . . . . . . . .   5\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .   6\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   6\n\n1.  Introduction\n\n   This document extends the Internet Message Access Protocol (IMAP)\n   [IMAP4rev1] with a new capability called \"STATUS=SIZE\".  To determine\n   the total storage size of a mailbox, an IMAP client currently needs\n   to retrieve all message sizes individually using the FETCH command\n   with the RFC822.SIZE data item.  The STATUS=SIZE capability provides\n   a more efficient means of achieving this.  It extends the STATUS\n   command with a new \"SIZE\" data item, which indicates the total size\n   of all messages in the target mailbox.  This way, this information\n   can be queried with just one STATUS command.  When the LIST-STATUS\n   IMAP capability [LIST-STATUS] is also available, the SIZE data item\n   can be queried for many mailboxes at once using just one LIST\n   command.\n\n   This capability is particularly useful for IMAP clients that do not\n   cache the state of the message store, such as most webmail clients.\n   Without the \"STATUS=SIZE\" capability, such clients need to fetch all\n   message sizes from the server when the size of an individual mailbox\n   needs to be determined.  For example, a user may request detailed\n   quota usage information for each mailbox to find out which specific\n   mailboxes consume most of the available storage resources.  Using\n   this information, the user can get an overview of which mailboxes\n   need to be cleaned up to reduce quota usage.  The QUOTA capability\n   [QUOTA] is no help in that scenario, since the provided QUOTAROOT\n   command can only yield the STORAGE resource usage of a whole quota\n   root, not each individual mailbox within that root.\n\n\n\n\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 2]\n\f\nRFC 8438               IMAP STATUS=SIZE Extension            August 2018\n\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [KEYWORDS] [KEYWORDS2] when, and only when, they appear in all\n   capitals, as shown here.\n\n3.  STATUS Command and Response Extensions\n\n   This extension defines one new status data item for the STATUS\n   command and response:\n\n   SIZE\n      The total size of the mailbox in octets.  This is not strictly\n      required to be an exact value, but it MUST be equal to or greater\n      than the sum of the values of the RFC822.SIZE FETCH message data\n      item [IMAP4rev1] of all messages in the mailbox.  When the QUOTA\n      capability [QUOTA] is also supported, this value SHOULD be equal\n      to the storage usage value used to enforce the STORAGE resource\n      limit for this mailbox.  This way, the client can directly infer\n      the quota usage.\n\n   Since the total storage size of a mailbox can easily exceed 4 GB,\n   clients MUST be capable of receiving 63-bit SIZE data item values.\n   The message size is chosen to be at most 63 bits wide rather than 64\n   bits to make implementations on various platforms (such as Java)\n   easier.\n\n   Example:\n\n   C: A01 STATUS frop (MESSAGES SIZE UIDNEXT)\n   S: * STATUS frop (MESSAGES 8 SIZE 44421 UIDNEXT 242344)\n   S: A01 OK STATUS completed\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 3]\n\f\nRFC 8438               IMAP STATUS=SIZE Extension            August 2018\n\n\n   The same information can be obtained by using the following commands,\n   albeit less efficiently:\n\n   C: A02 SELECT \"frop\"\n   S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n   S: * 8 EXISTS\n   S: * 1 RECENT\n   S: * OK [UNSEEN 7] First unseen.\n   S: * OK [UIDVALIDITY 1364851417] UIDs valid\n   S: * OK [UIDNEXT 242344] Predicted next UID\n   S: * OK [HIGHESTMODSEQ 3914] Highest\n   S: A02 OK [READ-WRITE] Select completed.\n   C: A03 FETCH 1:* (RFC822.SIZE)\n   S: * 1 FETCH (RFC822.SIZE 3224)\n   S: * 2 FETCH (RFC822.SIZE 1222)\n   S: * 3 FETCH (RFC822.SIZE 444)\n   S: * 4 FETCH (RFC822.SIZE 4516)\n   S: * 5 FETCH (RFC822.SIZE 544)\n   S: * 6 FETCH (RFC822.SIZE 922)\n   S: * 7 FETCH (RFC822.SIZE 31126)\n   S: * 8 FETCH (RFC822.SIZE 2423)\n   S: A03 OK Fetch completed.\n\n   When the LIST-STATUS IMAP capability [LIST-STATUS] is also available,\n   the STATUS command can be combined with the LIST command to further\n   improve efficiency.  This way, the sizes of many mailboxes can be\n   queried with just one LIST command.\n\n   Example:\n\n   C: A04 LIST \"\" % RETURN (STATUS (MESSAGES SIZE))\n   S: * LIST () \".\" \"INBOX\"\n   S: * STATUS \"INBOX\" (MESSAGES 17 SIZE 16234)\n   S: * LIST () \".\" \"frop\"\n   S: * STATUS \"frop\" (MESSAGES 8 SIZE 44421)\n   S: A04 OK List completed.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 4]\n\f\nRFC 8438               IMAP STATUS=SIZE Extension            August 2018\n\n\n4.  Formal Syntax\n\n   The following syntax specification augments the grammar specified in\n   [IMAP4rev1] and [IMAP4-ABNF].  It uses the Augmented Backus-Naur Form\n   (ABNF) notation as specified in [ABNF].  Elements not defined here\n   are taken from [IMAP4rev1] and [IMAP4-ABNF].\n\n   capability     =/ \"STATUS=SIZE\"\n\n   status-att     =/ \"SIZE\"\n\n   status-att-val =/ \"SIZE\" SP number64\n\n   number64       = 1*DIGIT\n                    ; Unsigned 63-bit integer\n                    ; (0 <= n <= 9,223,372,036,854,775,807)\n\n5.  Security Considerations\n\n   There are no known additional security issues with this extension\n   beyond those described for the base protocol [IMAP4rev1] and the\n   LIST-STATUS extension [LIST-STATUS].\n\n6.  IANA Considerations\n\n   IANA has added \"STATUS=SIZE\" to the \"IMAP Capabilities\" registry\n   located at <http://www.iana.org/assignments/imap-capabilities>.\n\n7.  Normative References\n\n   [ABNF]     Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [IMAP4-ABNF]\n              Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <https://www.rfc-editor.org/info/rfc4466>.\n\n   [IMAP4rev1]\n              Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 5]\n\f\nRFC 8438               IMAP STATUS=SIZE Extension            August 2018\n\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [KEYWORDS2]\n              Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [LIST-STATUS]\n              Melnikov, A. and T. Sirainen, \"IMAP4 Extension for\n              Returning STATUS Information in Extended LIST\", RFC 5819,\n              DOI 10.17487/RFC5819, March 2010,\n              <https://www.rfc-editor.org/info/rfc5819>.\n\n   [QUOTA]    Myers, J., \"IMAP4 QUOTA extension\", RFC 2087,\n              DOI 10.17487/RFC2087, January 1997,\n              <https://www.rfc-editor.org/info/rfc2087>.\n\nAcknowledgements\n\n   Thanks to Bron Gondwana, Alexey Melnikov, Stan Kalisch, and Michael\n   Slusarz for reviews and suggestions.\n\nAuthor's Address\n\n   Stephan Bosch\n   Dovecot Oy\n   Lars Sonckin Kaari 12\n   Espoo  02600\n   Finland\n\n   Email: stephan.bosch@dovecot.fi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc8440.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                      K. Murchison\nRequest for Comments: 8440                                   B. Gondwana\nCategory: Standards Track                                       FastMail\nISSN: 2070-1721                                              August 2018\n\n\n  IMAP4 Extension for Returning MYRIGHTS Information in Extended LIST\n\nAbstract\n\n   This document defines an extension to the Internet Message Access\n   Protocol (IMAP) LIST command that allows the client to request the\n   set of rights that the logged-in user has been granted on mailboxes,\n   along with other information typically returned by the LIST command.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8440.\n\nCopyright Notice\n\n   Copyright (c) 2018 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\nMurchison & Gondwana         Standards Track                    [Page 1]\n\f\nRFC 8440                   IMAP LIST-MYRIGHTS                August 2018\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . .   2\n   3.  MYRIGHTS Return Option to LIST Command  . . . . . . . . . . .   2\n   4.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .   3\n   5.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   4\n   6.  Security Considerations . . . . . . . . . . . . . . . . . . .   4\n   7.  Privacy Considerations  . . . . . . . . . . . . . . . . . . .   4\n   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   4\n     8.1.  Registration of IMAP Capability LIST-MYRIGHTS . . . . . .   4\n     8.2.  Registration of LIST-EXTENDED Option MYRIGHTS . . . . . .   4\n   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   5\n     9.1.  Normative References  . . . . . . . . . . . . . . . . . .   5\n     9.2.  Informative References  . . . . . . . . . . . . . . . . .   6\n   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .   6\n   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .   6\n\n1.  Introduction\n\n   IMAP [RFC3501] clients typically fetch the set of rights granted on\n   mailboxes so they can expose the allowed functionality to the logged-\n   in user.  In order to do that, the client is forced to issue a LIST\n   or LSUB command to list all available mailboxes, followed by a\n   MYRIGHTS command for each mailbox found.  This document defines an\n   extension to the to IMAP LIST command that is identified by the\n   capability string \"LIST-MYRIGHTS\".  The LIST-MYRIGHTS extension\n   allows the client to request the set of rights that the logged-in\n   user has been granted on mailboxes, along with other information\n   typically returned by the LIST command.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n3.  MYRIGHTS Return Option to LIST Command\n\n   [RFC4314] defines the MYRIGHTS command, which is used by an IMAP\n   client to determine the set of rights that the logged-in user has\n   been granted on a given mailbox.  Frequently, a client will have to\n   look up the rights for some or all of the mailboxes returned by the\n\n\n\nMurchison & Gondwana         Standards Track                    [Page 2]\n\f\nRFC 8440                   IMAP LIST-MYRIGHTS                August 2018\n\n\n   LIST command.  Doing so in multiple MYRIGHTS commands wastes\n   bandwidth and can degrade performance if the client does not pipeline\n   the requests.\n\n   This document extends the LIST command with a new \"MYRIGHTS\" return\n   option [RFC5258] that allows the client to request all of the desired\n   information in a single command.  For each listable mailbox matching\n   the list pattern and selection options, the server MUST return an\n   untagged LIST response and SHOULD also return an untagged MYRIGHTS\n   response containing the set of rights granted to the logged-in user.\n   The ordering of the responses is significant only in that the server\n   MUST NOT send a MYRIGHTS response for a given mailbox before it sends\n   the LIST response for that mailbox.\n\n   If the server is unable to look up the set of rights for a given\n   mailbox, it does not send the MYRIGHTS reply for that mailbox.\n\n   Client authors ought to note that generating the MYRIGHTS responses\n   for a large number of mailboxes may be an expensive operation for the\n   server.  Clients SHOULD use a suitable match pattern and/or selection\n   option to limit the set of mailboxes returned to only those in whose\n   rights they are interested.\n\n4.  Examples\n\n   In this example, the \"bar\" mailbox doesn't exist, so it has no\n   MYRIGHTS reply.\n\n   C: A01 LIST \"\" % RETURN (MYRIGHTS)\n   S: * LIST () \".\" \"INBOX\"\n   S: * MYRIGHTS \"INBOX\" lrswipkxtecda\n   S: * LIST () \".\" \"foo\"\n   S: * MYRIGHTS \"foo\" lrs\n   S: * LIST (\\NonExistent) \".\" \"bar\"\n   S: A01 OK List completed.\n\n   In this example, the LIST reply for the \"foo\" mailbox is returned\n   because it has matching children, but no MYRIGHTS reply is returned,\n   because \"foo\" itself doesn't match the selection criteria.\n\n   C: A02 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" % RETURN (MYRIGHTS)\n   S: * LIST (\\Subscribed) \".\" \"INBOX\"\n   S: * MYRIGHTS \"INBOX\" lrswipkxtecda\n   S: * LIST () \".\" \"foo\" (CHILDINFO (\"SUBSCRIBED\"))\n   S: A02 OK List completed.\n\n\n\n\n\n\nMurchison & Gondwana         Standards Track                    [Page 3]\n\f\nRFC 8440                   IMAP LIST-MYRIGHTS                August 2018\n\n\n5.  Formal Syntax\n\n   The following syntax specification uses the augmented Backus-Naur\n   Form (BNF) as described in [RFC5234].  Terms not defined here are\n   taken from [RFC5258].\n\n   return-option =/ \"MYRIGHTS\"\n\n6.  Security Considerations\n\n   In addition to the security considerations described in [RFC4314],\n   this extension makes it a bit easier for clients to overload the\n   server by requesting MYRIGHTS information for a large number of\n   mailboxes.  However, as noted in the introduction, existing clients\n   already try to do that by generating a large number of MYRIGHTS\n   commands for each mailbox in which they are interested.  While\n   performing MYRIGHTS information retrieval for big lists of mailboxes,\n   a server implementation needs to make sure that it can still serve\n   other IMAP connections and yield execution to other connections, when\n   necessary.\n\n7.  Privacy Considerations\n\n   This specification does not introduce any additional privacy concerns\n   beyond those described in [RFC4314].\n\n8.  IANA Considerations\n\n8.1.  Registration of IMAP Capability LIST-MYRIGHTS\n\n   This document defines the \"LIST-MYRIGHTS\" IMAP capability that has\n   been added to the \"IMAP Capabilities\" registry [CAPABILITIES].\n\n8.2.  Registration of LIST-EXTENDED Option MYRIGHTS\n\n   This section registers the \"MYRIGHTS\" option that has been added to\n   the \"LIST-EXTENDED options\" registry [EXTENDED].\n\n   LIST-EXTENDED option name:  MYRIGHTS\n\n   LIST-EXTENDED option type:  RETURN\n\n   LIST-EXTENDED option description:  Causes the LIST command to return\n      MYRIGHTS responses in addition to LIST responses.\n\n   Published specification:  RFC 8440, Section 3\n\n   Security considerations:  RFC 8440, Section 6\n\n\n\nMurchison & Gondwana         Standards Track                    [Page 4]\n\f\nRFC 8440                   IMAP LIST-MYRIGHTS                August 2018\n\n\n   Intended usage:  COMMON\n\n   Person and email address to contact for further information:\n      Kenneth Murchison <murch@fastmailteam.com>\n\n   Owner/Change controller:  IESG <iesg@ietf.org>\n\n9.  References\n\n9.1.  Normative References\n\n   [CAPABILITIES]\n              IANA, \"Internet Message Access Protocol (IMAP)\n              Capabilities Registry\", <https://www.iana.org/assignments/\n              imap-capabilities/imap-capabilities>.\n\n   [EXTENDED]\n              IANA, \"Internet Message Access Protocol (IMAP) LIST\n              EXTENDED Registry\",\n              <https://www.iana.org/assignments/imap-list-extended>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, DOI 10.17487/RFC4314, December 2005,\n              <https://www.rfc-editor.org/info/rfc4314>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5258]  Leiba, B. and A. Melnikov, \"Internet Message Access\n              Protocol version 4 - LIST Command Extensions\", RFC 5258,\n              DOI 10.17487/RFC5258, June 2008,\n              <https://www.rfc-editor.org/info/rfc5258>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n\n\n\nMurchison & Gondwana         Standards Track                    [Page 5]\n\f\nRFC 8440                   IMAP LIST-MYRIGHTS                August 2018\n\n\n9.2.  Informative References\n\n   [RFC5819]  Melnikov, A. and T. Sirainen, \"IMAP4 Extension for\n              Returning STATUS Information in Extended LIST\", RFC 5819,\n              DOI 10.17487/RFC5819, March 2010,\n              <https://www.rfc-editor.org/info/rfc5819>.\n\nAcknowledgments\n\n   This document is based largely on [RFC5819].  The authors would like\n   to thank the authors of that document for providing both inspiration\n   and some borrowed text for this document.  The authors would also\n   like to thank Barry Leiba for contributing his ideas and support for\n   writing this specification.\n\nAuthors' Addresses\n\n   Kenneth Murchison\n   FastMail Pty Ltd.\n   Level 2, 114 William Street\n   Melbourne, VIC  3000\n   Australia\n\n   Email: murch@fastmailteam.com\n\n\n   Bron Gondwana\n   FastMail Pty Ltd.\n   Level 2, 114 William Street\n   Melbourne, VIC  3000\n   Australia\n\n   Email: brong@fastmailteam.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMurchison & Gondwana         Standards Track                    [Page 6]\n\f\n"
  },
  {
    "path": "rfc/rfc8457.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                     B. Leiba, Ed.\nRequest for Comments: 8457                           Huawei Technologies\nCategory: Standards Track                                 September 2018\nISSN: 2070-1721\n\n\n    IMAP \"$Important\" Keyword and \"\\Important\" Special-Use Attribute\n\nAbstract\n\n   RFC 6154 created an IMAP special-use LIST extension and defined an\n   initial set of attributes.  This document defines a new attribute,\n   \"\\Important\", and establishes a new IANA registry for IMAP folder\n   attributes, which include the attributes defined in RFCs 5258, 3501,\n   and 6154.  This document also defines a new IMAP keyword,\n   \"$Important\", and registers it in the registry defined in RFC 5788.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8457.\n\nCopyright Notice\n\n   Copyright (c) 2018 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\nLeiba                        Standards Track                    [Page 1]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   1.1.  Conventions Used in This Document . . . . . . . . . . . . .   3\n   2.  Definition of the \"$Important\" Message Keyword  . . . . . . .   3\n   3.  Definition of the 'Important' Mailbox Attribute . . . . . . .   3\n   3.1.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . .   4\n   3.2.  Examples  . . . . . . . . . . . . . . . . . . . . . . . . .   4\n   3.2.1.  Example of a LIST Response  . . . . . . . . . . . . . . .   4\n   3.2.2.  Examples of Creating a New Mailbox Using \"\\Important\" . .   4\n   4.  Implementation Notes  . . . . . . . . . . . . . . . . . . . .   5\n   5.  Security Considerations . . . . . . . . . . . . . . . . . . .   5\n   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   6\n   6.1.  Registration of the \"$Important\" Keyword  . . . . . . . . .   6\n   6.2.  Creation of the IMAP Mailbox Name Attributes Registry . . .   7\n   6.2.1.  Instructions to the Designated Expert . . . . . . . . . .   8\n   6.3.  Initial Entries for the IMAP Mailbox Name Attributes\n         Registry  . . . . . . . . . . . . . . . . . . . . . . . . .   9\n   7.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  10\n   7.1.  Normative References  . . . . . . . . . . . . . . . . . . .  10\n   7.2.  Informative References  . . . . . . . . . . . . . . . . . .  10\n   Contributors  . . . . . . . . . . . . . . . . . . . . . . . . . .  11\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  11\n\n1.  Introduction\n\n   The Internet Message Access Protocol (IMAP) specification [RFC3501]\n   defines the use of message keywords, and an \"IMAP Keywords\" registry\n   is created in [RFC5788].  [RFC6154] defines an extension to the IMAP\n   LIST command for special-use mailboxes.  The extension allows servers\n   to provide extra information (attributes) about the purpose of a\n   mailbox and defines an initial set of special-use attributes.\n\n   This document does the following:\n\n   o  defines a new message keyword, \"$Important\", to apply to messages\n      that are considered important for the user by some externally\n      defined criteria;\n\n   o  registers the \"$Important\" keyword in the \"IMAP Keywords\"\n      registry;\n\n   o  defines a new special-use attribute, \"\\Important\", to designate a\n      mailbox that will hold messages that are considered important for\n      the user by some externally defined criteria; and\n\n\n\n\n\n\nLeiba                        Standards Track                    [Page 2]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n   o  creates a registry for IMAP mailbox attributes and registers the\n      new attribute and those defined in [RFC5258], [RFC3501], and\n      [RFC6154].\n\n1.1.  Conventions Used in This Document\n\n   In the examples used in this document, \"C:\" indicates lines sent by a\n   client that is connected to a server, and \"S:\" indicates lines sent\n   by the server to the client.\n\n2.  Definition of the \"$Important\" Message Keyword\n\n   The \"$Important\" keyword is a signal that a message is likely\n   important to the user.  The keyword is generally expected to be set\n   automatically by the system based on available signals (such as who\n   the message is from, who else the message is addressed to, evaluation\n   of the subject or content, or other heuristics).  While the keyword\n   also can be set by the user, that is not expected to be the primary\n   usage.\n\n   This is distinct from the \"\\Flagged\" system flag in two ways:\n\n   1.  \"$Important\" carries a meaning of general importance, as opposed\n       to follow-up or urgency.  It is meant to be used for a form of\n       triage, with \"\\Flagged\" remaining as a designation of special\n       attention, need for follow-up, or time sensitivity.  In\n       particular, the sense of \"$Important\" is that other messages that\n       are \"like this one\" according to some server-applied heuristics\n       will also be considered \"$Important\".\n\n   2.  The setting of \"$Important\" is expected to be based at least\n       partly on heuristics (generally set automatically by the server),\n       whereas \"\\Flagged\" is only intended to be set by the user with\n       some sort of \"flag this message\" or \"put a star on this message\"\n       interface.\n\n3.  Definition of the 'Important' Mailbox Attribute\n\n   The \"\\Important\" mailbox attribute is a signal that the mailbox\n   contains messages that are likely important to the user.  In an\n   implementation that also supports the \"$Important\" keyword, this\n   special use is likely to represent a virtual mailbox collecting\n   messages (from other mailboxes) that are marked with the \"$Important\"\n   keyword.  In other implementations, the system might automatically\n   put messages there based on the same sorts of heuristics that are\n   noted for the \"$Important\" keyword (see Section 2).  The distinctions\n   between \"\\Important\" and \"\\Flagged\" for mailboxes are similar to\n   those between \"$Important\" and \"\\Flagged\" for messages.\n\n\n\nLeiba                        Standards Track                    [Page 3]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n3.1.  Formal Syntax\n\n   The following syntax specification adds to the one in Section 6 of\n   [RFC6154] using Augmented Backus-Naur Form (ABNF) as described in\n   [RFC5234].  Be sure to see the ABNF notes at the beginning of\n   Section 9 of [RFC3501].\n\n       use-attr      =/  \"\\Important\"\n\n3.2.  Examples\n\n3.2.1.  Example of a LIST Response\n\n   In the following example, the mailbox called \"Important Messages\" is\n   the one designated with the \"\\Important\" attribute.\n\n      C: t1 LIST \"\" \"Imp*\"\n      S: * LIST (\\HasNoChildren \\Important) \"/\" \"Important Messages\"\n      S: * LIST (\\HasNoChildren) \"/\" \"Imported Wine\"\n      S: t1 OK Success\n\n3.2.2.  Examples of Creating a New Mailbox Using \"\\Important\"\n\n   In the following example, the mailbox called \"Important Messages\" is\n   created with the \"\\Important\" attribute on a server that advertises\n   the \"CREATE-SPECIAL-USE\" capability string.\n\n      C: t1 CREATE \"Important Messages\" (USE (\\Important))\n      S: t1 OK Mailbox created\n\n   The following example is similar to the previous one, but the server\n   is not able to assign the \"\\Important\" attribute to the new mailbox.\n\n      C: t1 CREATE \"Important Messages\" (USE (\\Important))\n      S: t1 NO [USEATTR] An \\Important mailbox already exists\n\n   The following example is similar to the previous one, but the server\n   does not support this extension.\n\n      C: t1 CREATE \"Important Messages\" (USE (\\Important))\n      S: t1 NO [USEATTR] Mailbox not created; unsupported use \\Important\n\n   In both of the failure-mode examples, the \"USEATTR\" response code\n   lets the client know that the problem is in the \"USE\" parameters.\n   Note that the same response code is given in both cases, and the\n   human-readable text is the only way to tell the difference.  That\n   text is not parsable by the client (it can only be logged and/or\n   reported to the user).\n\n\n\nLeiba                        Standards Track                    [Page 4]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n4.  Implementation Notes\n\n   This section is non-normative and is intended to describe the\n   intended (and current as of this publication) usage of \"$Important\"\n   in contrast with \"\\Flagged\" on a message.\n\n   On the server:\n\n   o  \"\\Flagged\" is set or cleared in response to an explicit command\n      from the client.\n\n   o  \"$Important\" is set via a heuristic process performed by the\n      server and usually involves analysis of header fields, what\n      mailbox the message is filed in, perhaps message content,\n      attachments, and such.  It may then be set or cleared in response\n      to an explicit command from the client, and the server may use\n      that to adjust the heuristics in the future.  It's also possible\n      that the server will re-evaluate this and make a message\n      \"$Important\" later if the user accesses the message frequently,\n      for example.\n\n   On the client:\n\n   o  Typically, an icon such as a flag or a star (or an indication,\n      such as red or bold text) is associated with \"\\Flagged\", and the\n      UI provides a way for the user to turn that icon or indication on\n      or off.  Manipulation of this results in a command to the server.\n\n   o  Typically, a lesser indication is used for \"$Important\".  The\n      client might or might not provide the user with a way to\n      manipulate it.  If it does, manipulation results in a command to\n      the server.\n\n5.  Security Considerations\n\n   The security considerations in Section 7 of [RFC6154] apply equally\n   to this extension, in particular, \"Conveying special-use information\n   to a client exposes a small bit of extra information that could be of\n   value to an attacker.\"  Moreover, identifying important messages or a\n   place where important messages are kept could give an attacker a\n   strategic starting point.  If the algorithm by which messages are\n   determined to be important is well known, still more information is\n   exposed -- perhaps, for example, there is an implication that the\n   senders of these messages are particularly significant to the mailbox\n   owner, and perhaps that is information that should not be made\n   public.\n\n\n\n\n\nLeiba                        Standards Track                    [Page 5]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n   As noted in RFC 6154, it is wise to protect the IMAP channel from\n   passive eavesdropping and to defend against unauthorized discernment\n   of the identity of a user's \"\\Important\" mailbox or of a user's\n   \"$Important\" messages.  See Section 11 of [RFC3501] for security\n   considerations about using the IMAP STARTTLS command to protect the\n   IMAP channel.\n\n6.  IANA Considerations\n\n   IANA has completed three actions, which are specified in the sections\n   below:\n\n   1.  registration of the \"$Important\" keyword;\n\n   2.  creation of a new \"IMAP Mailbox Name Attributes\" registry; and\n\n   3.  registration of initial entries in the \"IMAP Mailbox Name\n       Attributes\" registry.\n\n6.1.  Registration of the \"$Important\" Keyword\n\n   IANA has registered the \"$Important\" keyword in the \"IMAP Keywords\"\n   registry, as follows, using the template in [RFC5788].\n\n   IMAP keyword name:  $Important\n\n   Purpose (description):  The \"$Important\" keyword is a signal that a\n         message is likely important to the user.\n\n   Private or Shared on a server:  PRIVATE\n\n   Is it an advisory keyword or may it cause an automatic action:\n         Advisory (but see the reference for details).\n\n   When/by whom the keyword is set/cleared:  The keyword can be set by\n         the user, or automatically by the system based on available\n         signals (such as who the message is from, who else the message\n         is addressed to, evaluation of the subject or content, or other\n         heuristics).\n\n   Related keywords:  None (see the reference for the related mailbox\n         name attribute).\n\n   Related IMAP capabilities:  None.\n\n   Security considerations:  See Section 5 of RFC 8457.\n\n   Published specification:  RFC 8457\n\n\n\nLeiba                        Standards Track                    [Page 6]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n   Person & email address to contact for further information:\n         IETF Applications and Real-Time Area <art@ietf.org>\n\n   Intended usage:  COMMON\n\n   Owner/Change controller:  IESG\n\n   Note: None.\n\n6.2.  Creation of the IMAP Mailbox Name Attributes Registry\n\n   IANA has created a new registry in the group \"Internet Message Access\n   Protocol (IMAP)\".  It is called \"IMAP Mailbox Name Attributes\", and\n   it has two references: \"RFC 3501, Section 7.2.2\", and \"RFC 8457,\n   Section 6\".  This registry will be shared with the JSON Meta\n   Application Protocol (JMAP) for Mail [JMAP-MAIL].\n\n   The registry entries contain the following fields:\n\n   1.  Attribute Name\n   2.  Description\n   3.  Reference\n   4.  Usage Notes\n\n   IANA keeps this list in alphabetical order by Attribute Name, which\n   is registered without the initial backslash (\"\\\").  The names are\n   generally registered with initial capital letters but are treated as\n   case-insensitive US-ASCII strings.\n\n   The \"Usage Notes\" field is free-form US-ASCII text that will normally\n   be empty (and is empty if it's not specified in the registration\n   request).  It is intended to hold things such as \"not used by JMAP\"\n   and \"JMAP only\".  The field is for human use, and there is no need\n   for a registry of strings that may appear here.\n\n   The registration policy for the new registry is listed as \"IETF\n   Review\" or \"Expert Review\" [RFC8126], and new registrations will be\n   accepted in one of two ways:\n\n   1.  For registrations requested in an IETF consensus document, the\n       registration policy will be IETF Review, and the request will be\n       made in the IANA Considerations section of the document, which\n       gives the requested values for each of the fields.\n\n   2.  For other registrations, the policy will be Expert Review policy\n       (see Section 6.2.1), and the request will be made by sending\n       email to IANA asking for a new IMAP Mailbox Name Attribute and\n       giving the requested values for each of the fields.  While a\n\n\n\nLeiba                        Standards Track                    [Page 7]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n       formal specification is not required, the reference document\n       should provide a description of the proposed attribute sufficient\n       for building interoperable implementations.  An Informational RFC\n       (submitted, for example, through the IETF or Independent stream)\n       is a fine way to publish a reference document (see also\n       Section 6.2.1).\n\n6.2.1.  Instructions to the Designated Expert\n\n   The expert reviewer, who will be designated by the IESG, is expected\n   to provide only a general review of the requested registration,\n   checking that the reference and description are adequate for\n   understanding the intent of the registered attribute.  Efforts should\n   also be made to generalize the intent of an attribute so that\n   multiple implementations with the same requirements may reuse\n   existing attributes.  Except for this check, this is intended to be\n   very close to a first come first served policy, and the expert should\n   not block serious registration requests with a reasonable reference.\n   The reference may be to any form of documentation, including a web\n   page, but consideration should be given to providing one that is\n   expected to be long-lived and stable.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba                        Standards Track                    [Page 8]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n6.3.  Initial Entries for the IMAP Mailbox Name Attributes Registry\n\n   The registry initially contains these entries:\n\n   +===============+===================================+===========+\n   | Attribute     | Description                       | Reference |\n   | Name          |                                   |           |\n   +===============+===================================+===========+\n   | All           | All messages                      | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | Archive       | Archived messages                 | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | Drafts        | Messages that are working drafts  | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | Flagged       | Messages with the \\Flagged flag   | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | HasChildren   | Has accessible child mailboxes    | [RFC5258] | *\n   +---------------+-----------------------------------+-----------+\n   | HasNoChildren | Has no accessible child mailboxes | [RFC5258] | *\n   +---------------+-----------------------------------+-----------+\n   | Important     | Messages deemed important to user |  RFC 8457 |\n   +---------------+-----------------------------------+-----------+\n   | Junk          | Messages identified as Spam/Junk  | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | Marked        | Server has marked the mailbox as  | [RFC3501] | *\n   |               | \"interesting\"                     |           |\n   +---------------+-----------------------------------+-----------+\n   | NoInferiors   | No hierarchy under this name      | [RFC3501] | *\n   +---------------+-----------------------------------+-----------+\n   | NonExistent   | The mailbox name doesn't actually | [RFC5258] | *\n   |               | exist                             |           |\n   +---------------+-----------------------------------+-----------+\n   | Noselect      | The mailbox is not selectable     | [RFC3501] | *\n   +---------------+-----------------------------------+-----------+\n   | Remote        | The mailbox exists on a remote    | [RFC5258] | *\n   |               | server                            |           |\n   +---------------+-----------------------------------+-----------+\n   | Sent          | Sent mail                         | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | Subscribed    | The mailbox is subscribed to      | [RFC5258] |\n   +---------------+-----------------------------------+-----------+\n   | Trash         | Messages the user has discarded   | [RFC6154] |\n   +---------------+-----------------------------------+-----------+\n   | Unmarked      | No new messages since last select | [RFC3501] | *\n   +===============+===================================+===========+\n\n   The rows marked with \"*\" at the end have their Usage Notes field set\n   to \"not used by JMAP\".\n\n\n\nLeiba                        Standards Track                    [Page 9]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\n7.  References\n\n7.1.  Normative References\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC6154]  Leiba, B. and J. Nicolson, \"IMAP LIST Extension for\n              Special-Use Mailboxes\", RFC 6154, DOI 10.17487/RFC6154,\n              March 2011, <https://www.rfc-editor.org/info/rfc6154>.\n\n   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, \"Guidelines for\n              Writing an IANA Considerations Section in RFCs\", BCP 26,\n              RFC 8126, DOI 10.17487/RFC8126, June 2017,\n              <https://www.rfc-editor.org/info/rfc8126>.\n\n7.2.  Informative References\n\n   [JMAP-MAIL]\n              Jenkins, N. and C. Newman, \"JMAP for Mail\", Work in\n              Progress, draft-ietf-jmap-mail-07, August 2018.\n\n   [RFC5258]  Leiba, B. and A. Melnikov, \"Internet Message Access\n              Protocol version 4 - LIST Command Extensions\", RFC 5258,\n              DOI 10.17487/RFC5258, June 2008,\n              <https://www.rfc-editor.org/info/rfc5258>.\n\n   [RFC5788]  Melnikov, A. and D. Cridland, \"IMAP4 Keyword Registry\",\n              RFC 5788, DOI 10.17487/RFC5788, March 2010,\n              <https://www.rfc-editor.org/info/rfc5788>.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba                        Standards Track                   [Page 10]\n\f\nRFC 8457         IMAP \"Important\" Keyword and Attribute   September 2018\n\n\nContributors\n\n   The following author was an original contributor to this document in\n   addition to the editor.\n\n   Eric \"Iceman\"\n   Google\n   Email: iceman@google.com\n\nAuthor's Address\n\n   Barry Leiba (editor)\n   Huawei Technologies\n\n   Phone: +1 646 827 0648\n   Email: barryleiba@computer.org\n   URI:   http://internetmessagingtechnology.org/\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLeiba                        Standards Track                   [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc8474.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                  B. Gondwana, Ed.\nRequest for Comments: 8474                                      FastMail\nUpdates: 3501                                             September 2018\nCategory: Standards Track\nISSN: 2070-1721\n\n\n                 IMAP Extension for Object Identifiers\n\nAbstract\n\n   This document updates RFC 3501 (IMAP4rev1) with persistent\n   identifiers on mailboxes and messages to allow clients to more\n   efficiently reuse cached data when resources have changed location on\n   the server.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8474.\n\nCopyright Notice\n\n   Copyright (c) 2018 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\nGondwana                     Standards Track                    [Page 1]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . .   3\n   3.  CAPABILITY Identification . . . . . . . . . . . . . . . . . .   3\n   4.  MAILBOXID Object Identifier . . . . . . . . . . . . . . . . .   3\n     4.1.  New Response Code for CREATE  . . . . . . . . . . . . . .   4\n     4.2.  New OK Untagged Response for SELECT and EXAMINE . . . . .   4\n     4.3.  New Attribute for STATUS  . . . . . . . . . . . . . . . .   5\n   5.  EMAILID Object Identifier and THREADID Correlator . . . . . .   6\n     5.1.  EMAILID Identifier for Identical Messages . . . . . . . .   6\n     5.2.  THREADID Identifier for Related Messages  . . . . . . . .   6\n     5.3.  New Message Data Items in FETCH and UID FETCH Commands  .   7\n   6.  New Filters on SEARCH Command . . . . . . . . . . . . . . . .   9\n   7.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   9\n   8.  Implementation Considerations . . . . . . . . . . . . . . . .  10\n     8.1.  Assigning Object Identifiers  . . . . . . . . . . . . . .  10\n     8.2.  Interaction with Special Cases  . . . . . . . . . . . . .  11\n     8.3.  Client Usage  . . . . . . . . . . . . . . . . . . . . . .  11\n     8.4.  Advice to Client Implementers . . . . . . . . . . . . . .  12\n   9.  Future Considerations . . . . . . . . . . . . . . . . . . . .  12\n   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  12\n   11. Security Considerations . . . . . . . . . . . . . . . . . . .  13\n   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  13\n     12.1.  Normative References . . . . . . . . . . . . . . . . . .  13\n     12.2.  Informative References . . . . . . . . . . . . . . . . .  14\n   Appendix A.  Ideas for Implementing Object Identifiers  . . . . .  15\n   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  15\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  16\n\n1.  Introduction\n\n   IMAP stores are often used by many clients.  Each client may cache\n   data from the server so that it doesn't need to redownload\n   information.  [RFC3501] states that a mailbox can be uniquely\n   referenced by its name and UIDVALIDITY, and a message within that\n   mailbox can be uniquely referenced by its mailbox (name +\n   UIDVALIDITY) and unique identifier (UID).  The triple of mailbox\n   name, UIDVALIDITY, and UID is guaranteed to be immutable.\n\n   [RFC4315] defines a COPYUID response that allows a client that copies\n   messages to know the mapping between the UIDs in the source and\n   destination mailboxes and, hence, update its local cache.\n\n   If a mailbox is successfully renamed by a client, that client will\n   know that the same messages exist in the destination mailbox name as\n   previously existed in the source mailbox name.\n\n\n\n\nGondwana                     Standards Track                    [Page 2]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   The result is that the client that copies (or moves [RFC6851])\n   messages or renames a mailbox can update its local cache, but any\n   other client connected to the same store cannot know with certainty\n   that the messages are identical, so it will redownload everything.\n\n   This extension adds new properties to a message (EMAILID) and mailbox\n   (MAILBOXID).  These properties allow a client to quickly identify\n   messages or mailboxes that have been renamed by another client.\n\n   This extension also adds an optional thread identifier (THREADID) to\n   messages, which can be used by the server to indicate messages that\n   it has identified to be related.  A server that does not implement\n   threading will return NIL to all requests for THREADID.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n3.  CAPABILITY Identification\n\n   IMAP servers that support this extension MUST include \"OBJECTID\" in\n   the response list to the CAPABILITY command.\n\n4.  MAILBOXID Object Identifier\n\n   The MAILBOXID is a server-allocated unique identifier for each\n   mailbox.\n\n   The server MUST return the same MAILBOXID for a mailbox with the same\n   name and UIDVALIDITY.\n\n   The server MUST NOT report the same MAILBOXID for two mailboxes at\n   the same time.\n\n   The server MUST NOT reuse the same MAILBOXID for a mailbox that does\n   not obey all the invariants that [RFC3501] defines for a mailbox that\n   does not change name or UIDVALIDITY.\n\n\n\n\n\n\n\nGondwana                     Standards Track                    [Page 3]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   The server MUST keep the same MAILBOXID for the source and\n   destination when renaming a mailbox in a way that keeps the same\n   messages (but see [RFC3501] for the special case regarding the\n   renaming of INBOX, which is treated as creating a new mailbox and\n   moving the messages).\n\n4.1.  New Response Code for CREATE\n\n   This document extends the CREATE command to have the response code\n   MAILBOXID on successful mailbox creation.\n\n   A server advertising the OBJECTID capability MUST include the\n   MAILBOXID response code in the tagged OK response to all successful\n   CREATE commands.\n\n   Syntax: \"MAILBOXID\" SP \"(\" objectid \")\"\n\n    Response code in tagged OK response for successful CREATE command.\n\n   Example:\n\n     C: 3 create foo\n     S: 3 OK [MAILBOXID (F2212ea87-6097-4256-9d51-71338625)] Completed\n     C: 4 create bar\n     S: 4 OK [MAILBOXID (F6352ae03-b7f5-463c-896f-d8b48ee3)] Completed\n     C: 5 create foo\n     S: 5 NO Mailbox already exists\n\n4.2.  New OK Untagged Response for SELECT and EXAMINE\n\n   This document adds a new untagged response code to the SELECT and\n   EXAMINE commands.\n\n   A server advertising the OBJECTID capability MUST return an untagged\n   OK response with the MAILBOXID response code on all successful SELECT\n   and EXAMINE commands.\n\n   Syntax: \"OK\" SP \"[\" \"MAILBOXID\" SP \"(\" objectid \")\" \"]\" SP text\n\n                Untagged OK response to SELECT or EXAMINE.\n\n   Example:\n\n        C: 27 select \"foo\"\n        [...]\n        S: * OK [MAILBOXID (F2212ea87-6097-4256-9d51-71338625)] Ok\n        [...]\n        S: 27 OK [READ-WRITE] Completed\n\n\n\nGondwana                     Standards Track                    [Page 4]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n4.3.  New Attribute for STATUS\n\n   This document adds the MAILBOXID attribute to the STATUS command\n   using the extended syntax defined in [RFC4466].\n\n   A server that advertises the OBJECTID capability MUST support the\n   MAILBOXID status attribute.\n\n   Syntax: \"MAILBOXID\"\n\n                   The attribute in the STATUS command.\n\n   Syntax: \"MAILBOXID\" SP \"(\" objectid \")\"\n\n      The response item in the STATUS response contains the ObjectID\n      assigned by the server for this mailbox.\n\n   Example:\n\n    C: 6 status foo (mailboxid)\n    S: * STATUS foo (MAILBOXID (F2212ea87-6097-4256-9d51-71338625))\n    S: 6 OK Completed\n    C: 7 status bar (mailboxid)\n    S: * STATUS bar (MAILBOXID (F6352ae03-b7f5-463c-896f-d8b48ee3))\n    S: 7 OK Completed\n    C: 8 rename foo renamed\n    S: * OK rename foo renamed\n    S: 8 OK Completed\n    C: 9 status renamed (mailboxid)\n    S: * STATUS renamed (MAILBOXID (F2212ea87-6097-4256-9d51-71338625))\n    S: 9 OK Completed\n    C: 10 status bar (mailboxid)\n    S: * STATUS bar (MAILBOXID (F6352ae03-b7f5-463c-896f-d8b48ee3))\n    S: 10 OK Completed\n\n   When the LIST-STATUS IMAP capability defined in [RFC5819] is also\n   available, the STATUS command can be combined with the LIST command.\n\n   Example:\n\n   C: 11 list \"\" \"*\" return (status (mailboxid))\n   S: * LIST (\\HasNoChildren) \".\" INBOX\n   S: * STATUS INBOX (MAILBOXID (Ff8e3ead4-9389-4aff-adb1-d8d89efd8cbf))\n   S: * LIST (\\HasNoChildren) \".\" bar\n   S: * STATUS bar (MAILBOXID (F6352ae03-b7f5-463c-896f-d8b48ee3))\n   S: * LIST (\\HasNoChildren) \".\" renamed\n   S: * STATUS renamed (MAILBOXID (F2212ea87-6097-4256-9d51-71338625))\n   S: 11 OK Completed (0.001 secs 3 calls)\n\n\n\nGondwana                     Standards Track                    [Page 5]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n5.  EMAILID Object Identifier and THREADID Correlator\n\n5.1.  EMAILID Identifier for Identical Messages\n\n   The EMAILID data item is an ObjectID that uniquely identifies the\n   content of a single message.  Anything that must remain immutable on\n   a {name, uidvalidity, uid} triple must also be the same between\n   messages with the same EMAILID.\n\n   The server MUST return the same EMAILID for the same triple; hence,\n   EMAILID is immutable.\n\n   The server MUST return the same EMAILID as the source message for the\n   matching destination message in the COPYUID pairing after a COPY or\n   MOVE command [RFC6851].\n\n   The server MAY assign the same EMAILID as an existing message upon\n   APPEND (e.g., if it detects that the new message has exactly\n   identical content to that of an existing message).\n\n   NOTE: EMAILID only identifies the immutable content of the message.\n   In particular, it is possible for different messages with the same\n   EMAILID to have different keywords.  This document does not specify a\n   way to STORE by EMAILID.\n\n5.2.  THREADID Identifier for Related Messages\n\n   The THREADID data item is an ObjectID that uniquely identifies a set\n   of messages that the server believes should be grouped together when\n   presented.\n\n   THREADID calculation is generally based on some combination of\n   References, In-Reply-To, and Subject, but the exact logic is left up\n   to the server implementation.  [RFC5256] describes some algorithms\n   that could be used; however, this specification does not mandate any\n   particular strategy.\n\n   The server MUST return the same THREADID for all messages with the\n   same EMAILID.\n\n   The server SHOULD return the same THREADID for related messages, even\n   if they are in different mailboxes; for example, messages that would\n   appear in the same thread if they were in the same mailbox SHOULD\n   have the same THREADID, even if they are in different mailboxes.\n\n   The server MUST NOT change the THREADID of a message once reported.\n\n\n\n\n\nGondwana                     Standards Track                    [Page 6]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   THREADID is OPTIONAL; if the server doesn't support THREADID or is\n   unable to calculate relationships between messages, it MUST return\n   NIL to all FETCH responses for the THREADID data item, and a SEARCH\n   for THREADID MUST NOT match any messages.\n\n   The server MUST NOT use the same ObjectID value for both EMAILIDs and\n   THREADIDs.  If they are stored with the same value internally, the\n   server can generate prefixed values (as shown in the examples below\n   with M and T prefixes) to avoid clashes.\n\n5.3.  New Message Data Items in FETCH and UID FETCH Commands\n\n   This document defines two FETCH items:\n\n   Syntax: \"EMAILID\"\n\n     The EMAILID message data item causes the server to return EMAILID\n     FETCH response data items.\n\n   Syntax: \"THREADID\"\n\n    The THREADID message data item causes the server to return THREADID\n    FETCH response data items.\n\n   This document defines the following responses:\n\n   Syntax: \"EMAILID\" SP \"(\" objectid \")\"\n\n   The EMAILID response data item contains the server-assigned ObjectID\n   for each message.\n\n   Syntax: \"THREADID\" SP \"(\" objectid \")\"\n\n   The THREADID response data item contains the server-assigned ObjectID\n   for the set of related messages to which this message belongs.\n\n   Syntax: \"THREADID\" SP nil\n\n    The NIL value is returned for the THREADID response data item when\n    the server mailbox does not support THREADID calculation.\n\n\n\n\n\n\n\n\n\n\n\nGondwana                     Standards Track                    [Page 7]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   Example:\n\n    C: 5 append inbox \"20-Mar-2018 03:07:37 +1100\" {733}\n    [...]\n    Subject: Message A\n    Message-ID: <fake.1521475657.54797@example.com>\n    [...]\n    S: 5 OK [APPENDUID 1521475658 1] Completed\n\n    C: 11 append inbox \"20-Mar-2018 03:07:37 +1100\" {793}\n    [...]\n    Subject: Re: Message A\n    Message-ID: <fake.1521475657.21213@example.org>\n    References: <fake.1521475657.54797@example.com>\n    [...]\n    S: 11 OK [APPENDUID 1521475658 2] Completed\n\n    C: 17 append inbox \"20-Mar-2018 03:07:37 +1100\" {736}\n    [...]\n    Subject: Message C\n    Message-ID: <fake.1521475657.60280@example.com>\n    [...]\n    S: 17 OK [APPENDUID 1521475658 3] Completed\n\n    C: 22 fetch 1:* (emailid threadid)\n    S: * 1 FETCH (EMAILID (M6d99ac3275bb4e) THREADID (T64b478a75b7ea9))\n    S: * 2 FETCH (EMAILID (M288836c4c7a762) THREADID (T64b478a75b7ea9))\n    S: * 3 FETCH (EMAILID (M5fdc09b49ea703) THREADID (T11863d02dd95b5))\n    S: 22 OK Completed (0.000 sec)\n\n    C: 23 move 2 foo\n    S: * OK [COPYUID 1521475659 2 1] Completed\n    S: * 2 EXPUNGE\n    S: 23 OK Completed\n\n    C: 24 fetch 1:* (emailid threadid)\n    S: * 1 FETCH (EMAILID (M6d99ac3275bb4e) THREADID (T64b478a75b7ea9))\n    S: * 2 FETCH (EMAILID (M5fdc09b49ea703) THREADID (T11863d02dd95b5))\n    S: 24 OK Completed (0.000 sec)\n    C: 25 select \"foo\"\n\n    C: 25 select \"foo\"\n    [...]\n    S: 25 OK [READ-WRITE] Completed\n    C: 26 fetch 1:* (emailid threadid)\n    S: * 1 FETCH (EMAILID (M288836c4c7a762) THREADID (T64b478a75b7ea9))\n    S: 26 OK Completed (0.000 sec)\n\n\n\n\nGondwana                     Standards Track                    [Page 8]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   Example: (no THREADID support)\n\n              C: 26 fetch 1:* (emailid threadid)\n              S: * 1 FETCH (EMAILID (M00000001) THREADID NIL)\n              S: * 2 FETCH (EMAILID (M00000002) THREADID NIL)\n              S: 26 OK Completed (0.000 sec)\n\n\n6.  New Filters on SEARCH Command\n\n   This document defines the filters EMAILID and THREADID on the SEARCH\n   command.\n\n   Syntax: \"EMAILID\" SP objectid\n\n         Messages whose EMAILID is exactly the specified ObjectID.\n\n   Syntax: \"THREADID\" SP objectid\n\n        Messages whose THREADID is exactly the specified ObjectID.\n\n   Example: (as if run before the MOVE shown above when the mailbox had\n   three messages)\n\n                 C: 27 search emailid M6d99ac3275bb4e\n                 S: * SEARCH 1\n                 S: 27 OK Completed (1 msgs in 0.000 secs)\n                 C: 28 search threadid T64b478a75b7ea9\n                 S: * SEARCH 1 2\n                 S: 28 OK Completed (2 msgs in 0.000 secs)\n\n7.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) [RFC5234] notation.  Elements not defined here can be\n   found in the formal syntax of the ABNF [RFC5234], IMAP [RFC3501], and\n   IMAP ABNF extensions [RFC4466] specifications.\n\n   Except as noted otherwise, all alphabetic characters are case\n   insensitive.  The use of uppercase or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   Please note specifically that ObjectID values are case sensitive.\n\n\n\n\n\n\n\nGondwana                     Standards Track                    [Page 9]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n      capability =/ \"OBJECTID\"\n\n      fetch-att =/ \"EMAILID\" / \"THREADID\"\n\n      fetch-emailid-resp = \"EMAILID\" SP \"(\" objectid \")\"\n              ; follows tagged-ext production from [RFC4466]\n\n      fetch-threadid-resp = \"THREADID\" SP ( \"(\" objectid \")\" / nil )\n              ; follows tagged-ext production from [RFC4466]\n\n      msg-att-static =/ fetch-emailid-resp / fetch-threadid-resp\n\n      objectid = 1*255(ALPHA / DIGIT / \"_\" / \"-\")\n              ; characters in object identifiers are case\n              ; significant\n\n      resp-text-code =/ \"MAILBOXID\" SP \"(\" objectid \")\"\n              ; incorporated before the expansion rule of\n              ;  atom [SP 1*<any TEXT-CHAR except \"]\">]\n              ; that appears in [RFC3501]\n\n      search-key =/ \"EMAILID\" SP objectid / \"THREADID\" SP objectid\n\n      status-att =/ \"MAILBOXID\"\n\n      status-att-val =/ \"MAILBOXID\" SP \"(\" objectid \")\"\n              ; follows tagged-ext production from [RFC4466]\n\n8.  Implementation Considerations\n\n8.1.  Assigning Object Identifiers\n\n   All ObjectID values are allocated by the server.\n\n   In the interest of reducing the possibilities of encoding mistakes,\n   ObjectIDs are restricted to a safe subset of possible byte values; in\n   order to allow clients to allocate storage, they are restricted in\n   length.\n\n   An ObjectID is a string of 1 to 255 characters from the following set\n   of 64 codepoints: a-z, A-Z, 0-9, _, -.  These characters are safe to\n   use in almost any context (e.g., filesystems, URIs, IMAP atoms).\n   These are the same characters defined as base64url in [RFC4648].\n\n\n\n\n\n\n\n\nGondwana                     Standards Track                   [Page 10]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   For maximum safety, servers should also follow defensive allocation\n   strategies to avoid creating risks where glob completion or data type\n   detection may be present (e.g., on filesystems or in spreadsheets).\n   In particular, it is wise to avoid:\n\n   o  IDs starting with a dash\n\n   o  IDs starting with digits\n\n   o  IDs that contain only digits\n\n   o  IDs that differ only by ASCII case (for example, A vs. a)\n\n   o  the specific sequence of three characters NIL in any case (because\n      this sequence can be confused with the IMAP protocol expression of\n      the null value)\n\n   A good solution to these issues is to prefix every ID with a single\n   alphabetical character.\n\n8.2.  Interaction with Special Cases\n\n   The case of RENAME INBOX may need special handling because it has\n   special behavior, as defined in [RFC3501], Section 6.3.5.\n\n   It is advisable (though not required) to have MAILBOXID be globally\n   unique, but it is only required to be unique within messages offered\n   to a single client login to a single server hostname.  For example, a\n   proxy that aggregates multiple independent servers MUST NOT advertise\n   the OBJECTID capability unless it can guarantee that different\n   objects will never use the same identifiers, even if backend object\n   identifiers collide.\n\n8.3.  Client Usage\n\n   Servers that implement both RFC 6154 and this specification should\n   optimize their execution of commands like UID SEARCH OR EMAILID 1234\n   EMAILID 4321.\n\n   Clients can assume that searching the all-mail mailbox using OR/\n   EMAILID or OR/THREADID is a fast way to find messages again if some\n   other client has moved them out of the mailbox where they were\n   previously seen.\n\n   Clients that cache data offline should fetch the EMAILID of all new\n   messages to avoid redownloading already-cached message details.\n\n\n\n\n\nGondwana                     Standards Track                   [Page 11]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   Clients should fetch the MAILBOXID for any new mailboxes before\n   discarding cache data for any mailbox that is no longer present on\n   the server so that they can detect renames and avoid redownloading\n   data.\n\n8.4.  Advice to Client Implementers\n\n   In cases of server failure and disaster recovery, or misbehaving\n   servers, it is possible that a client will be sent invalid\n   information, e.g., identical ObjectIDs or ObjectIDs that have changed\n   where they MUST NOT change according to this document.\n\n   In a case where a client detects inconsistent ObjectID responses from\n   a server, it SHOULD fall back to relying on the guarantees of RFC\n   3501.  For simplicity, a client MAY instead choose to discard its\n   entire cache and resync all state from the server.\n\n   Client authors protecting against server misbehavior MUST ensure that\n   their design cannot get into an infinite loop of discarding cache and\n   fetching the same data repeatedly without user interaction.\n\n9.  Future Considerations\n\n   This extension is intentionally defined to be compatible with the\n   data model in [JMAP-MAIL].\n\n   A future extension could be proposed to give a way to SELECT a\n   mailbox by MAILBOXID rather than name.\n\n   A future extension to [RFC5228] could allow fileinto by MAILBOXID\n   rather than name.\n\n   An extension to allow fetching message content directly via EMAILID\n   and message listings by THREADID could be proposed.\n\n10.  IANA Considerations\n\n   IANA has added \"OBJECTID\" to the \"IMAP Capabilities\" registry located\n   at <https://www.iana.org/assignments/imap-capabilities> with a\n   reference to this document.\n\n   IANA has added \"MAILBOXID\" to the \"IMAP Response Codes\" registry\n   located at <https://www.iana.org/assignments/imap-response-codes>\n   with a reference to this document.\n\n\n\n\n\n\n\nGondwana                     Standards Track                   [Page 12]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n11.  Security Considerations\n\n   It is strongly advised that servers generate ObjectIDs that are safe\n   to use as filesystem names and unlikely to be autodetected as\n   numbers.  See implementation considerations.\n\n   If a digest is used for ID generation, it must have a collision-\n   resistant property, so server implementations are advised to monitor\n   current security research and choose secure digests.  As the IDs are\n   generated by the server, it will be possible to migrate to a new hash\n   by just using the new algorithm when creating new IDs.  This is\n   particularly true if a prefix is used on each ID, which can be\n   changed when the algorithm changes.\n\n   The use of a digest for ID generation may be used as proof that a\n   particular sequence of bytes was seen by the server.  However, this\n   is only a risk if IDs are leaked to clients who don't have permission\n   to fetch the data directly.  Servers that are expected to handle\n   highly sensitive data should consider this when choosing how to\n   create IDs.\n\n   See also the security considerations in [RFC3501], Section 11.\n\n12.  References\n\n12.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4315]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              UIDPLUS extension\", RFC 4315, DOI 10.17487/RFC4315,\n              December 2005, <https://www.rfc-editor.org/info/rfc4315>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <https://www.rfc-editor.org/info/rfc4466>.\n\n   [RFC5228]  Guenther, P., Ed. and T. Showalter, Ed., \"Sieve: An Email\n              Filtering Language\", RFC 5228, DOI 10.17487/RFC5228,\n              January 2008, <https://www.rfc-editor.org/info/rfc5228>.\n\n\n\n\nGondwana                     Standards Track                   [Page 13]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5256]  Crispin, M. and K. Murchison, \"Internet Message Access\n              Protocol - SORT and THREAD Extensions\", RFC 5256,\n              DOI 10.17487/RFC5256, June 2008,\n              <https://www.rfc-editor.org/info/rfc5256>.\n\n   [RFC5819]  Melnikov, A. and T. Sirainen, \"IMAP4 Extension for\n              Returning STATUS Information in Extended LIST\", RFC 5819,\n              DOI 10.17487/RFC5819, March 2010,\n              <https://www.rfc-editor.org/info/rfc5819>.\n\n   [RFC6851]  Gulbrandsen, A. and N. Freed, Ed., \"Internet Message\n              Access Protocol (IMAP) - MOVE Extension\", RFC 6851,\n              DOI 10.17487/RFC6851, January 2013,\n              <https://www.rfc-editor.org/info/rfc6851>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n12.2.  Informative References\n\n   [JMAP-MAIL]\n              Jenkins, N. and C. Newman, \"JMAP for Mail\", Work in\n              Progress, draft-ietf-jmap-mail-07, August 2018.\n\n   [RFC4122]  Leach, P., Mealling, M., and R. Salz, \"A Universally\n              Unique IDentifier (UUID) URN Namespace\", RFC 4122,\n              DOI 10.17487/RFC4122, July 2005,\n              <https://www.rfc-editor.org/info/rfc4122>.\n\n   [RFC4648]  Josefsson, S., \"The Base16, Base32, and Base64 Data\n              Encodings\", RFC 4648, DOI 10.17487/RFC4648, October 2006,\n              <https://www.rfc-editor.org/info/rfc4648>.\n\n\n\n\n\n\n\n\n\n\n\n\n\nGondwana                     Standards Track                   [Page 14]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\nAppendix A.  Ideas for Implementing Object Identifiers\n\n   Ideas for calculating MAILBOXID:\n\n   o  Universally Unique Identifier (UUID) [RFC4122]\n\n   o  Server-assigned sequence number (guaranteed not to be reused)\n\n   Ideas for implementing EMAILID:\n\n   o  Digest of message content (RFC822 bytes) -- expensive unless\n      cached\n\n   o  UUID [RFC4122]\n\n   o  Server-assigned sequence number (guaranteed not to be reused)\n\n   Ideas for implementing THREADID:\n\n   o  Derive from EMAILID of first seen message in the thread.\n\n   o  UUID [RFC4122]\n\n   o  Server-assigned sequence number (guaranteed not to be reused)\n\n   There is a need to index and look up reference/in-reply-to data at\n   message creation to efficiently find matching messages for threading.\n   Threading may be either across mailboxes or within each mailbox only.\n   The server has significant leeway here.\n\nAcknowledgments\n\n   The author would like to thank the EXTRA working group at IETF for\n   feedback and advice -- in particular, Arnt Gulbrandsen, Brandon Long,\n   Chris Newman, and Josef Sipek.\n\n   This document drew inspiration from the Gmail X-GM-THRID and X-GM-\n   MSGID implementations as currently defined at\n   <https://developers.google.com/gmail/imap/imap-extensions>, as well\n   as the X-GUID implementation in the Dovecot server.\n\n\n\n\n\n\n\n\n\n\n\nGondwana                     Standards Track                   [Page 15]\n\f\nRFC 8474                      IMAP ObjectID               September 2018\n\n\nAuthor's Address\n\n   Bron Gondwana (editor)\n   FastMail\n   Level 2, 114 William St\n   Melbourne  VIC 3000\n   Australia\n\n   Email: brong@fastmailteam.com\n   URI:   https://www.fastmail.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nGondwana                     Standards Track                   [Page 16]\n\f\n"
  },
  {
    "path": "rfc/rfc8508.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                         S. Brandt\nRequest for Comments: 8508                                       Verizon\nCategory: Standards Track                                   January 2019\nISSN: 2070-1721\n\n\n                         IMAP REPLACE Extension\n\nAbstract\n\n   This document defines an IMAP extension that can be used to replace\n   an existing message in a message store with a new message.  Message\n   replacement is a common operation for clients that automatically save\n   drafts or notes as a user composes them.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8508.\n\nCopyright Notice\n\n   Copyright (c) 2019 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\n\n\n\n\nBrandt                       Standards Track                    [Page 1]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\nTable of Contents\n\n   1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . .   3\n   3.  REPLACE and UID REPLACE . . . . . . . . . . . . . . . . . . .   3\n     3.1.  Advertising Support for REPLACE . . . . . . . . . . . . .   3\n     3.2.  REPLACE Command . . . . . . . . . . . . . . . . . . . . .   3\n     3.3.  UID REPLACE Command . . . . . . . . . . . . . . . . . . .   4\n     3.4.  Semantics of REPLACE and UID REPLACE  . . . . . . . . . .   5\n     3.5.  IMAP State Diagram Impacts  . . . . . . . . . . . . . . .   6\n   4.  Interaction with Other Extensions . . . . . . . . . . . . . .   6\n     4.1.  ACL . . . . . . . . . . . . . . . . . . . . . . . . . . .   6\n     4.2.  CATENATE  . . . . . . . . . . . . . . . . . . . . . . . .   6\n     4.3.  UIDPLUS . . . . . . . . . . . . . . . . . . . . . . . . .   8\n     4.4.  IMAP Events in Sieve  . . . . . . . . . . . . . . . . . .   8\n     4.5.  CONDSTORE/QRESYNC . . . . . . . . . . . . . . . . . . . .   8\n     4.6.  OBJECTID  . . . . . . . . . . . . . . . . . . . . . . . .   8\n     4.7.  MULTIAPPEND . . . . . . . . . . . . . . . . . . . . . . .   8\n   5.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   9\n   6.  Security Considerations . . . . . . . . . . . . . . . . . . .   9\n   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   9\n   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   9\n     8.1.  Normative References  . . . . . . . . . . . . . . . . . .   9\n     8.2.  Informative References  . . . . . . . . . . . . . . . . .  10\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  11\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  11\n\n1.  Overview\n\n   This document defines an IMAP ([RFC3501]) extension to facilitate the\n   replacement of an existing message with a new one.  This is\n   accomplished by defining a new REPLACE command and extending the\n   Unique Identifier (UID) command to allow UID REPLACE.\n\n   Since there is no replace function in the base IMAP specification,\n   clients have instead had to use a combination of three separate\n   commands issued in serial fashion; APPEND, STORE, and EXPUNGE.\n   Pipelining of these three commands is not recommended since failure\n   of any individual command should prevent subsequent commands from\n   being executed lest the original message version be lost.\n\n   Because of the non-atomic nature of the existing sequence,\n   interruptions can leave messages in intermediate states that can be\n   seen and acted upon by other clients.  Such interruptions can also\n   strand older revisions of messages, thereby forcing the user to\n   manually clean up multiple revisions of the same message in order to\n   avoid wasteful quota consumption.  Additionally, the existing\n   sequence can fail on APPEND due to an over-quota condition even\n\n\n\nBrandt                       Standards Track                    [Page 2]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n   though the subsequent STORE/EXPUNGE would free up enough space for\n   the newly revised message.  And finally, server efficiencies may be\n   possible with a single logical message replacement operation as\n   compared to the existing APPEND/STORE/EXPUNGE sequence.\n\n   In its simplest form, the REPLACE command is a single-command\n   encapsulation of APPEND, STORE +flags \\DELETED, and UID EXPUNGE for a\n   message, except that it avoids any of the quota implications or\n   intermediate states associated with the three-command sequence.\n   Server developers are encouraged to implement REPLACE as an atomic\n   operation to simplify error handling, minimize operational concerns,\n   and reduce potential security problems.  For systems where this is\n   not possible, communication with the requesting client must ensure no\n   confusion of message store state.  A server MUST NOT generate a\n   response code for the STORE +flags \\DELETED portion of the sequence.\n   Additionally, servers supporting the REPLACE command MUST NOT infer\n   any inheritance of content, flags, or annotations from the message\n   being replaced.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n   Formal syntax is defined by [RFC5234].\n\n   Example lines prefaced by \"C:\" are sent by the client, and ones\n   prefaced by \"S:\" are sent by the server.\n\n3.  REPLACE and UID REPLACE\n\n3.1.  Advertising Support for REPLACE\n\n   Servers that implement the REPLACE extension will return \"REPLACE\" as\n   one of the supported capabilities in the CAPABILITY command response.\n\n3.2.  REPLACE Command\n\n   Arguments:  message sequence number\n               mailbox name\n               OPTIONAL flag parenthesized list\n               OPTIONAL date/time string\n               message literal\n\n   Responses: no specific responses for this command\n\n\n\nBrandt                       Standards Track                    [Page 3]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n   Result:     OK - replace completed\n               NO - replace error; can't remove specified message\n                    or can't add new message content\n               BAD - command unknown or arguments invalid\n\n   Example:\n     C: A003 REPLACE 4 Drafts (\\Seen \\Draft) {312}\n     S: + Ready for literal data\n     C: Date: Thu, 1 Jan 2015 00:05:00 -0500 (EST)\n     C: From: Fritz Schmidt <fritz.ze@example.org>\n     C: Subject: happy new year !!\n     C: To: miss.mitzy@example.org\n     C: Message-Id: <B238822388-0100000@example.org>\n     C: MIME-Version: 1.0\n     C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n     C:\n     C: Just saw the best fireworks show. Wish you were here.\n     C:\n     S: * OK [APPENDUID 1 2000] Replacement Message ready\n     S: * 5 EXISTS\n     S: * 4 EXPUNGE\n     S: A003 OK Replace completed\n\n3.3.  UID REPLACE Command\n\n   This extends the first form of the UID command (see Section 6.4.8 of\n   [RFC3501]) to add the REPLACE command defined above as a valid\n   argument.  This form of REPLACE uses a UID rather than a sequence\n   number as its first parameter.\n\n   Example:\n     C: A004 UID REPLACE 2000 Drafts (\\Seen \\Draft) {350}\n     S: + Ready for literal data\n     C: Date: Thu, 1 Jan 2015 00:06:00 -0500 (EST)\n     C: From: Fritz Schmidt <fritz.ze@example.org>\n     C: Subject: happy new year !!\n     C: To: miss.mitzy@example.org\n     C: Message-Id: <B238822389-0100000@example.org>\n     C: MIME-Version: 1.0\n     C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n     C:\n     C: Just saw the best fireworks show. Wish you were here.\n     C: Hopefully next year you can join us.\n     C:\n     S: * OK [APPENDUID 1 2001] Replacement Message ready\n     S: * 5 EXISTS\n     S: * 4 EXPUNGE\n     S: A004 OK Replace completed\n\n\n\nBrandt                       Standards Track                    [Page 4]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n3.4.  Semantics of REPLACE and UID REPLACE\n\n   The REPLACE and UID REPLACE commands take five arguments: a message\n   identifier, a named mailbox, an optional parenthesized flag list, an\n   optional message date/time string, and a message literal.  The\n   message literal will be appended to the named mailbox, and the\n   message specified by the message identifier will be removed from the\n   selected mailbox.  These operations will appear to the client as a\n   single action.  This has the same effect as the following sequence:\n\n      1. APPEND\n      2. [UID] STORE +FLAGS.SILENT \\DELETED\n      3. UID EXPUNGE\n\n   In the cited sequence, the quota implications of APPEND are evaluated\n   within the context of the pending EXPUNGE so that only the net quota\n   consumption is considered.  Additionally, the EXPUNGE portion of the\n   sequence only applies to the specified message, not all messages\n   flagged as \"\\Deleted\".\n\n   Although the effect of REPLACE is identical to the steps above, the\n   semantics are not identical; similar to MOVE [RFC6851], the\n   intermediate states do not occur and the response codes are\n   different.  In particular, the response codes for APPEND and EXPUNGE\n   will be returned while those for the STORE operation MUST NOT be\n   generated.\n\n   When an error occurs while processing REPLACE or UID REPLACE, the\n   server MUST NOT leave the selected mailbox in an inconsistent state;\n   any untagged EXPUNGE response MUST NOT be sent until all actions are\n   successfully completed.\n\n   While it may be common for the named mailbox argument to match the\n   selected mailbox for the common use case of replacing a draft, the\n   REPLACE extension intentionally does not require the two to be the\n   same.  As an example, it's possible to use the REPLACE command to\n   replace a message in the \\Drafts special-use mailbox (see Section 2\n   of [RFC6154]) with a message in the \\Sent special-use mailbox\n   following message submission.\n\n   Because of the similarity of REPLACE to APPEND, extensions that\n   affect APPEND affect REPLACE in the same way.  Response codes such as\n   TRYCREATE (see Section 6.3.11 of [RFC3501]), along with those defined\n   by extensions, are sent as appropriate.  See Section 4 for more\n   information about how REPLACE interacts with other IMAP extensions.\n\n\n\n\n\n\nBrandt                       Standards Track                    [Page 5]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n3.5.  IMAP State Diagram Impacts\n\n   Unlike the APPEND command, which is valid in the authenticated state,\n   the REPLACE and UID REPLACE commands MUST only be valid in the\n   selected state.  This difference from APPEND is necessary since\n   REPLACE operates on message sequence numbers.  Additionally, the\n   REPLACE extension intentionally follows the convention for UID\n   commands found in Section 6.4.8 of [RFC3501] in that the UID variant\n   of the command does not support use from the authenticated state.\n\n4.  Interaction with Other Extensions\n\n   This section describes how REPLACE interacts with some other IMAP\n   extensions.\n\n4.1.  ACL\n\n   The Access Control List (ACL) rights [RFC4314] required for UID\n   REPLACE are the union of the ACL rights required for UID STORE and\n   UID EXPUNGE in the current mailbox, and APPEND in the target mailbox.\n\n4.2.  CATENATE\n\n   Servers supporting both REPLACE and CATENATE [RFC4469] MUST support\n   the additional append-data and resp-text-code elements defined in\n   Section 5 (\"Formal Syntax\") of [RFC4469] in conjunction with the\n   REPLACE command.  When combined with CATENATE, REPLACE can become\n   quite an efficient way of message manipulation.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBrandt                       Standards Track                    [Page 6]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n   Example:\n\n     User composes message and attaches photo\n     ----------------------------------------\n     C: A010 APPEND Drafts (\\Seen \\Draft) {1201534}\n     S: + Ready for literal data\n     C: Date: Thu, 1 Jan 2015 00:10:00 -0500 (EST)\n     C: From: Fritz Schmidt <fritz.ze@example.org>\n     C: Message-ID: <B238822388-0100003@example.org>\n     C: MIME-Version: 1.0\n     C: Content-Type: multipart/mixed;\n     C:         boundary=\"------------030305060306060609050804\"\n     C:\n     C: --------------030305060306060609050804\n     C: Content-Type: text/plain; charset=utf-8; format=flowed\n     C: Content-Transfer-Encoding: 7bit\n     C:\n     C: Here is picture from the fireworks\n     C:\n     C: Yours...\n     C: Fritz\n     C:\n     C: --------------030305060306060609050804\n     C: Content-Type: image/jpeg;\n     C:         name=\"Fireworks.jpg\"\n     C: Content-Transfer-Encoding: base64\n     C: Content-Disposition: attachment;\n     C:         filename=\"Fireworks.jpg\"\n     C:\n       <large base64 encoded part goes here>\n     C:\n     C: --------------030305060306060609050804--\n     S: A010 OK [APPENDUID 1 3002] APPEND complete\n\n     User completes message with To: and Subject: fields\n     ---------------------------------------------------\n     C: A011 UID REPLACE 3002 Drafts CATENATE (TEXT {71}\n     S: + Ready for literal data\n     C: To: Mitzy <miss.mitzy@example.org>\n     C: Subject: My view of the fireworks\n     C:  URL \"/Drafts/;UID=3002\")\n     S: * OK [APPENDUID 1 3003] Replacement Message ready\n     S: * 5 EXISTS\n     S: * 4 EXPUNGE\n     S: A011 OK REPLACE completed\n\n\n\n\n\n\nBrandt                       Standards Track                    [Page 7]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n4.3.  UIDPLUS\n\n   Servers supporting both REPLACE and UIDPLUS [RFC4315] SHOULD send\n   APPENDUID in response to a UID REPLACE command.  For additional\n   information, see Section 3 of [RFC4315].  Servers implementing\n   REPLACE and UIDPLUS are also advised to send the APPENDUID response\n   code in an untagged OK before sending the EXPUNGE or replaced\n   responses.  (Sending APPENDUID in the tagged OK as described in the\n   UIDPLUS specification means that the client first receives EXPUNGE\n   for a message and afterwards APPENDUID for the new message.  It can\n   be unnecessarily difficult to process that sequence usefully.)\n\n4.4.  IMAP Events in Sieve\n\n   REPLACE applies to IMAP events in Sieve [RFC6785] in the same way\n   that APPEND does.  Therefore, REPLACE can cause a Sieve script to be\n   invoked with the imap.cause set to \"APPEND\".  Because the\n   intermediate state of STORE +FLAGS.SILENT \\DELETED is not exposed by\n   REPLACE, no action will be taken that results in an imap.cause of\n   FLAG.\n\n4.5.  CONDSTORE/QRESYNC\n\n   Servers implementing both REPLACE and CONDSTORE/QRESYNC [RFC7162]\n   MUST treat the message being replaced as if it were being removed\n   with a UID EXPUNGE command.  Sections 3.2.9 and 3.2.10 of [RFC7162]\n   are particularly relevant for this condition.\n\n4.6.  OBJECTID\n\n   Servers implementing both REPLACE and OBJECTID [RFC8474] MUST return\n   different EMAILIDs for both the replaced and replacing messages.  The\n   only exception to this is the case outlined in Section 5.1 (\"EMAILID\n   Identifier for Identical Messages\") of [RFC8474] when the server\n   detects that both messages' immutable content is identical.\n\n4.7.  MULTIAPPEND\n\n   The REPLACE extension has no interaction with MULTIAPPEND [RFC3502].\n   This document explicitly does not outline a method for replacing\n   multiple messages concurrently.\n\n\n\n\n\n\n\n\n\n\nBrandt                       Standards Track                    [Page 8]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n5.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [RFC5234].  [RFC3501] defines\n   the non-terminals \"capability\",\"command-select\", \"mailbox\",\n   \"seq-number\", and \"uid\".  [RFC4466] defines the non-terminal\n   \"append-message\".\n\n   Except as noted otherwise, all alphabetic characters are case\n   insensitive.  The use of uppercase or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   capability     =/ \"REPLACE\"\n\n   command-select =/ replace\n   replace        = \"REPLACE\" SP seq-number SP mailbox append-message\n   uid            =/ \"UID\" SP replace\n\n6.  Security Considerations\n\n   This document is believed to add no security problems beyond those\n   that may already exist with the base IMAP specification.  The REPLACE\n   command may actually prevent some potential security problems because\n   it avoids intermediate message states that could possibly be\n   exploited by an attacker.\n\n7.  IANA Considerations\n\n   The IANA has added REPLACE to the \"IMAP Capabilities\" registry at\n   <https://www.iana.org/assignments/imap-capabilities>.\n\n8.  References\n\n8.1.  Normative References\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, DOI 10.17487/RFC4314, December 2005,\n              <https://www.rfc-editor.org/info/rfc4314>.\n\n\n\nBrandt                       Standards Track                    [Page 9]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n   [RFC4315]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              UIDPLUS extension\", RFC 4315, DOI 10.17487/RFC4315,\n              December 2005, <https://www.rfc-editor.org/info/rfc4315>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <https://www.rfc-editor.org/info/rfc4466>.\n\n   [RFC4469]  Resnick, P., \"Internet Message Access Protocol (IMAP)\n              CATENATE Extension\", RFC 4469, DOI 10.17487/RFC4469, April\n              2006, <https://www.rfc-editor.org/info/rfc4469>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC6785]  Leiba, B., \"Support for Internet Message Access Protocol\n              (IMAP) Events in Sieve\", RFC 6785, DOI 10.17487/RFC6785,\n              November 2012, <https://www.rfc-editor.org/info/rfc6785>.\n\n   [RFC7162]  Melnikov, A. and D. Cridland, \"IMAP Extensions: Quick Flag\n              Changes Resynchronization (CONDSTORE) and Quick Mailbox\n              Resynchronization (QRESYNC)\", RFC 7162,\n              DOI 10.17487/RFC7162, May 2014,\n              <https://www.rfc-editor.org/info/rfc7162>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [RFC8474]  Gondwana, B., Ed., \"IMAP Extension for Object\n              Identifiers\", RFC 8474, DOI 10.17487/RFC8474, September\n              2018, <https://www.rfc-editor.org/info/rfc8474>.\n\n8.2.  Informative References\n\n   [RFC3502]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              MULTIAPPEND Extension\", RFC 3502, DOI 10.17487/RFC3502,\n              March 2003, <https://www.rfc-editor.org/info/rfc3502>.\n\n   [RFC6154]  Leiba, B. and J. Nicolson, \"IMAP LIST Extension for\n              Special-Use Mailboxes\", RFC 6154, DOI 10.17487/RFC6154,\n              March 2011, <https://www.rfc-editor.org/info/rfc6154>.\n\n\n\n\n\n\n\nBrandt                       Standards Track                   [Page 10]\n\f\nRFC 8508                 IMAP REPLACE Extension             January 2019\n\n\n   [RFC6851]  Gulbrandsen, A. and N. Freed, Ed., \"Internet Message\n              Access Protocol (IMAP) - MOVE Extension\", RFC 6851,\n              DOI 10.17487/RFC6851, January 2013,\n              <https://www.rfc-editor.org/info/rfc6851>.\n\nAcknowledgements\n\n   The author would like to thank the participants of IMAPEXT with\n   particular thanks to Arnt Gulbrandsen, Alexey Melnikov, Chris Newman,\n   and Bron Gondwana for their specific contributions.\n\nAuthor's Address\n\n   Stuart Brandt\n   Verizon\n   22001 Loudoun County Parkway\n   Ashburn, VA  20147\n   United States of America\n\n   Email: stujenerin@aol.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBrandt                       Standards Track                   [Page 11]\n\f\n"
  },
  {
    "path": "rfc/rfc8514.txt",
    "content": "\n\n\n\n\n\nInternet Engineering Task Force (IETF)                          S. Bosch\nRequest for Comments: 8514                               Open Xchange Oy\nCategory: Standards Track                                   January 2019\nISSN: 2070-1721\n\n\n      Internet Message Access Protocol (IMAP) - SAVEDATE Extension\n\nAbstract\n\n   This document adds a new capability called \"SAVEDATE\" to the Internet\n   Message Access Protocol (IMAP).  It defines a new IMAP message\n   attribute called \"save date\" that, unlike the existing \"internal\n   date\" attribute, always indicates the moment at which the message was\n   saved in its current mailbox.  The SAVEDATE capability extends the\n   FETCH command with the means to retrieve the save date attribute and\n   extends the SEARCH command to allow using the save date attribute in\n   searching criteria.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8514.\n\nCopyright Notice\n\n   Copyright (c) 2019 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n\n\n\nBosch                        Standards Track                    [Page 1]\n\f\nRFC 8514                IMAP - SAVEDATE Extension           January 2019\n\n\nTable of Contents\n\n   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2\n   2.  Conventions Used in This Document . . . . . . . . . . . . . .   3\n   3.  Save Date Message Attribute . . . . . . . . . . . . . . . . .   3\n   4.  IMAP Protocol Changes . . . . . . . . . . . . . . . . . . . .   4\n     4.1.  CAPABILITY Identification . . . . . . . . . . . . . . . .   4\n     4.2.  FETCH Command and Response Extensions . . . . . . . . . .   4\n     4.3.  SEARCH Command Extension  . . . . . . . . . . . . . . . .   4\n   5.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   5\n   6.  Security Considerations . . . . . . . . . . . . . . . . . . .   5\n   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   6\n   8.  Normative References  . . . . . . . . . . . . . . . . . . . .   6\n   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .   7\n   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   7\n\n1.  Introduction\n\n   This document extends the Internet Message Access Protocol (IMAP)\n   [IMAP4rev1] with a new capability called \"SAVEDATE\".  This capability\n   adds a new IMAP message attribute called \"save date\".  The save date\n   is the date and time at which a message was saved in the mailbox in\n   which it currently resides.  The save date is similar to the existing\n   \"internal date\" attribute in that it is set at the time of delivery.\n   However, the internal date attribute can be set to an arbitrary value\n   for messages delivered to the mailbox using the APPEND command and is\n   usually copied from the source message for messages delivered using\n   the COPY command.  In contrast, the save date attribute is always set\n   to the current date and time at the moment the message is saved in\n   the mailbox, irrespective of how the message is delivered and from\n   where it originates.\n\n   The save date attribute is useful for implementing automated removal\n   of messages from a mailbox after a configured amount of time.  For\n   that application, it is necessary to know when the message was saved\n   in the mailbox, which cannot be reliably determined using the\n   internal date attribute.\n\n   For example, a common client usage pattern is to move deleted\n   messages to a Trash mailbox.  These messages are considered \"deleted\"\n   at the time they are moved to the Trash mailbox.  In an effort to\n   limit the size of the Trash mailbox, a client may subsequently desire\n   to permanently remove (expunge) all messages in that Trash mailbox\n   deleted before a certain time (e.g., a configurable expiration\n   interval).  In that case, the internal date attribute cannot be used\n   since it likely refers to the time at which the message was\n   originally received.  The proper time comparison attribute should\n\n\n\n\nBosch                        Standards Track                    [Page 2]\n\f\nRFC 8514                IMAP - SAVEDATE Extension           January 2019\n\n\n   instead be the time at which the message was saved to the Trash\n   mailbox.  Similar usage patterns can be observed for archiving\n   solutions.\n\n   The SAVEDATE capability extends the FETCH command and response to\n   allow retrieving the date and time at which a message was saved.\n   Also, the SAVEDATE capability extends the SEARCH command to allow\n   searching messages with criteria based on when they were saved in the\n   mailbox.\n\n2.  Conventions Used in This Document\n\n   In examples, \"C:\" indicates lines sent by a client that is connected\n   to a server.  \"S:\" indicates lines sent by the server to the client.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [KEYWORDS] [KEYWORDS-UPD] when, and only when, they appear in\n   all capitals, as shown here.\n\n3.  Save Date Message Attribute\n\n   The save date message attribute is the date and time at which the\n   message was saved in the mailbox it is now located in.  Unlike the\n   internal date message attribute defined by [IMAP4rev1], this date and\n   time value cannot be set arbitrarily when a message is delivered by\n   the IMAP APPEND command.  Also, when a message is delivered to the\n   mailbox by the IMAP COPY command [IMAP4rev1] or the IMAP MOVE command\n   [IMAP-MOVE], the save date attribute is not copied from the source\n   message.  Instead, the current date and time at which the message is\n   delivered to a mailbox MUST be used to set the save date attribute.\n   Once calculated, the save date attribute MUST NOT change as long as\n   the message is contained within the same mailbox.\n\n   This means that when the message is copied to another mailbox, the\n   save date of the message in the source mailbox remains unaffected;\n   only the new copy of the message gets a new save date.  Consequently,\n   when the message is moved to another mailbox, either using the MOVE\n   command or a command sequence involving the COPY command [IMAP-MOVE],\n   the message always gets a new save date in the destination mailbox.\n\n   For some specific mailboxes, the underlying storage may not support\n   the save date attribute.  The handling of this situation is described\n   in detail in the next section for each involved IMAP command.\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 3]\n\f\nRFC 8514                IMAP - SAVEDATE Extension           January 2019\n\n\n4.  IMAP Protocol Changes\n\n4.1.  CAPABILITY Identification\n\n   IMAP servers that support this extension MUST include \"SAVEDATE\" in\n   the response list to the CAPABILITY command.\n\n4.2.  FETCH Command and Response Extensions\n\n   This extension defines one new data item for the FETCH command:\n\n   SAVEDATE\n      The save date of the message.\n\n   This extension defines one new data item for the FETCH response:\n\n   SAVEDATE\n      A string representing the save date of the message.  However, if\n      the underlying mailbox storage does not support the save date\n      message attribute, the value returned for the SAVEDATE item is\n      always NIL, rather than a string.\n\n   Example:\n\n         C: A101 FETCH 998 (SAVEDATE)\n         S: * 998 FETCH (SAVEDATE \"01-Jan-2015 18:50:53 +0100\")\n         S: A101 OK Fetch completed.\n\n4.3.  SEARCH Command Extension\n\n   This extension defines four new search keys for the SEARCH command:\n\n   SAVEDBEFORE <date>\n      Messages whose save date (disregarding time and timezone) is\n      earlier than the specified date.\n\n   SAVEDON <date>\n      Messages whose save date (disregarding time and timezone) is\n      within the specified date.\n\n   SAVEDSINCE <date>\n      Messages whose save date (disregarding time and timezone) is\n      within or later than the specified date.\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 4]\n\f\nRFC 8514                IMAP - SAVEDATE Extension           January 2019\n\n\n   SAVEDATESUPPORTED\n      Matches all messages in the mailbox when the underlying storage of\n      that mailbox supports the save date attribute.  Conversely, it\n      matches no messages in the mailbox when the save date attribute is\n      not supported.\n\n   When the underlying storage of a mailbox does not support the save\n   date attribute, the SAVEDBEFORE, SAVEDON, and SAVEDSINCE search keys\n   MUST use the internal date attribute instead.  In the context of the\n   IMAP Multimailbox SEARCH Extension [MULTISEARCH], this fallback\n   behavior MUST apply to each mailbox individually, meaning that only\n   the mailboxes that lack support for the save date attribute use the\n   internal date attribute instead.\n\n   Example:\n\n         C: A102 SEARCH SAVEDON 28-Dec-2014\n         S: * SEARCH 993 994\n         S: A102 OK Search completed.\n         C: A103 SEARCH SAVEDSINCE 28-Dec-2014\n         S: * SEARCH 993 994 995 996 997 998 999 1000 1001\n         S: A103 OK Search completed.\n\n5.  Formal Syntax\n\n   The following syntax specification augments the grammar specified in\n   [IMAP4rev1].  It uses the Augmented Backus-Naur Form (ABNF) notation\n   as specified in [ABNF].  Elements not defined here are taken from\n   [IMAP4rev1].\n\n   capability     =/ \"SAVEDATE\"\n\n   fetch-att      =/ \"SAVEDATE\"\n\n   msg-att-static =/ \"SAVEDATE\" SP (date-time / nil)\n\n   search-key     =/ \"SAVEDBEFORE\" SP date /\n                     \"SAVEDON\" SP date /\n                     \"SAVEDSINCE\" SP date /\n                     \"SAVEDATESUPPORTED\"\n\n6.  Security Considerations\n\n   There are no known additional security issues with this extension\n   beyond those described in the base protocol described in [IMAP4rev1].\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 5]\n\f\nRFC 8514                IMAP - SAVEDATE Extension           January 2019\n\n\n7.  IANA Considerations\n\n   IANA has added \"SAVEDATE\" to the \"IMAP Capabilities\" registry located\n   at <https://www.iana.org/assignments/imap-capabilities>.\n\n8.  Normative References\n\n   [ABNF]     Crocker, D. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/rfc/rfc5234>.\n\n   [IMAP-MOVE]\n              Gulbrandsen, A. and N. Freed, \"Internet Message Access\n              Protocol (IMAP) - MOVE Extension\", RFC 6851,\n              DOI 10.17487/RFC6851, January 2013,\n              <https://www.rfc-editor.org/rfc/rfc6851>.\n\n   [IMAP4rev1]\n              Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/rfc/rfc3501>.\n\n   [KEYWORDS] Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/rfc/rfc2119>.\n\n   [KEYWORDS-UPD]\n              Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [MULTISEARCH]\n              Leiba, B. and A. Melnikov, \"IMAP4 Multimailbox SEARCH\n              Extension\", RFC 7377, DOI 10.17487/RFC7377, October 2014,\n              <https://www.rfc-editor.org/info/rfc7377>.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 6]\n\f\nRFC 8514                IMAP - SAVEDATE Extension           January 2019\n\n\nAcknowledgements\n\n   Thanks to Bron Gondwana, Alexey Melnikov, Timo Sirainen, and Michael\n   Slusarz for reviews and suggestions.\n\nAuthor's Address\n\n   Stephan Bosch\n   Open Xchange Oy\n   Lars Sonckin kaari 12\n   Espoo  02600\n   Finland\n\n   Email: stephan.bosch@open-xchange.com\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBosch                        Standards Track                    [Page 7]\n\f\n"
  },
  {
    "path": "rfc/rfc8689.txt",
    "content": "﻿\n\n\n\nInternet Engineering Task Force (IETF)                         J. Fenton\nRequest for Comments: 8689                              Altmode Networks\nCategory: Standards Track                                  November 2019\nISSN: 2070-1721\n\n\n                        SMTP Require TLS Option\n\nAbstract\n\n   The SMTP STARTTLS option, used in negotiating transport-level\n   encryption of SMTP connections, is not as useful from a security\n   standpoint as it might be because of its opportunistic nature;\n   message delivery is, by default, prioritized over security.  This\n   document describes an SMTP service extension, REQUIRETLS, and a\n   message header field, TLS-Required.  If the REQUIRETLS option or TLS-\n   Required message header field is used when sending a message, it\n   asserts a request on the part of the message sender to override the\n   default negotiation of TLS, either by requiring that TLS be\n   negotiated when the message is relayed or by requesting that\n   recipient-side policy mechanisms such as MTA-STS and DNS-Based\n   Authentication of Named Entities (DANE) be ignored when relaying a\n   message for which security is unimportant.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8689.\n\nCopyright Notice\n\n   Copyright (c) 2019 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\nTable of Contents\n\n   1.  Introduction\n     1.1.  Requirements Language\n   2.  The REQUIRETLS Service Extension\n   3.  The TLS-Required Header Field\n   4.  REQUIRETLS Semantics\n     4.1.  REQUIRETLS Receipt Requirements\n     4.2.  REQUIRETLS Sender Requirements\n       4.2.1.  Sending with TLS Required\n       4.2.2.  Sending with TLS Optional\n     4.3.  REQUIRETLS Submission\n     4.4.  Delivery of REQUIRETLS messages\n   5.  Non-delivery Message Handling\n   6.  Reorigination Considerations\n   7.  IANA Considerations\n   8.  Security Considerations\n     8.1.  Passive Attacks\n     8.2.  Active Attacks\n     8.3.  Bad-Actor MTAs\n     8.4.  Policy Conflicts\n   9.  References\n     9.1.  Normative References\n     9.2.  Informative References\n   Appendix A.  Examples\n     A.1.  REQUIRETLS SMTP Option\n     A.2.  TLS-Required Header Field\n   Acknowledgements\n   Author's Address\n\n1.  Introduction\n\n   The SMTP [RFC5321] STARTTLS service extension [RFC3207] provides a\n   means by which an SMTP server and client can establish a Transport\n   Layer Security (TLS) protected session for the transmission of email\n   messages.  By default, TLS is used only upon mutual agreement\n   (successful negotiation) of STARTTLS between the client and server;\n   if this is not possible, the message is sent without transport\n   encryption.  Furthermore, it is common practice for the client to\n   negotiate TLS even if the SMTP server's certificate is invalid.\n\n   Policy mechanisms such as DANE [RFC7672] and MTA-STS [RFC8461] may\n   impose requirements for the use of TLS for email destined for some\n   domains.  However, such policies do not allow the sender to specify\n   which messages are more sensitive and require transport-level\n   encryption and which ones are less sensitive and ought to be relayed\n   even if TLS cannot be negotiated successfully.\n\n   The default opportunistic nature of SMTP TLS enables several on-the-\n   wire attacks on SMTP security between MTAs.  These include passive\n   eavesdropping on connections for which TLS is not used, interference\n   in the SMTP protocol to prevent TLS from being negotiated (presumably\n   accompanied by eavesdropping), and insertion of a man-in-the-middle\n   attacker exploiting the lack of server authentication by the client.\n   Attacks are described in more detail in the Security Considerations\n   section of this document.\n\n   REQUIRETLS consists of two mechanisms: an SMTP service extension and\n   a message header field.  The service extension is used to specify\n   that a given message sent during a particular session MUST be sent\n   over a TLS-protected session with specified security characteristics.\n   It also requires that the SMTP server advertise that it supports\n   REQUIRETLS, in effect promising that it will honor the requirement to\n   enforce TLS transmission and REQUIRETLS support for onward\n   transmission of those messages.\n\n   The TLS-Required message header field is used to convey a request to\n   ignore recipient-side policy mechanisms such as MTA-STS and DANE,\n   thereby prioritizing delivery over ability to negotiate TLS.  Unlike\n   the service extension, the TLS-Required header field allows the\n   message to transit through one or more MTAs that do not support\n   REQUIRETLS.\n\n1.1.  Requirements Language\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n   The formal syntax uses the Augmented Backus-Naur Form (ABNF)\n   [RFC5234], including the core rules defined in Appendix B of that\n   document.\n\n2.  The REQUIRETLS Service Extension\n\n   The REQUIRETLS SMTP service extension has the following\n   characteristics:\n\n   1.  The textual name of the extension is \"Require TLS\".\n\n   2.  The EHLO keyword value associated with this extension is\n       \"REQUIRETLS\".\n\n   3.  No additional SMTP verbs are defined by this extension.\n\n   4.  One optional parameter (\"REQUIRETLS\") is added to the MAIL FROM\n       command by this extension.  No value is associated with this\n       parameter.\n\n   5.  The maximum length of a MAIL FROM command line is increased by 11\n       octets by the possible addition of a space and the REQUIRETLS\n       keyword.\n\n   6.  One new SMTP status code is defined by this extension to convey\n       an error condition resulting from failure of the client to send\n       data to a server that does not also support the REQUIRETLS\n       extension.\n\n   7.  The REQUIRETLS extension is valid for message relay [RFC5321],\n       submission [RFC6409], and the Local Mail Transfer Protocol (LMTP)\n       [RFC2033].\n\n   8.  The ABNF syntax for the MAIL FROM parameter is as follows:\n\n      requiretls-param  = \"REQUIRETLS\"\n                      ; where requiretls-param is an instance of an\n                      ; esmtp-param used in Mail-parameters in\n                      ; RFC 5321, Section 4.1.2. There is no esmtp-value\n                      ; associated with requiretls-param.\n\n   In order to specify REQUIRETLS treatment for a given message, the\n   REQUIRETLS option is specified in the MAIL FROM command when that\n   message is transmitted.  This option MUST only be specified in the\n   context of an SMTP session meeting the security requirements of\n   REQUIRETLS:\n\n   *  The session itself MUST employ TLS transmission.\n\n   *  If the SMTP server to which the message is being transmitted is\n      identified through an MX record lookup, its name MUST be validated\n      via a DNSSEC signature on the recipient domain's MX record, or the\n      MX hostname MUST be validated by an MTA-STS policy as described in\n      Section 4.1 of [RFC8461].  DNSSEC is defined in [RFC4033],\n      [RFC4034], and [RFC4035].\n\n   *  The certificate presented by the SMTP server either MUST be\n      verified successfully by a trust chain leading to a certificate\n      trusted by the SMTP client, or it MUST be verified successfully\n      using DANE, as specified in [RFC7672].  For trust chains, the\n      choice of trusted (root) certificates is at the discretion of the\n      SMTP client.\n\n   *  Following the negotiation of STARTTLS, the SMTP server MUST\n      advertise in the subsequent EHLO response that it supports\n      REQUIRETLS.\n\n3.  The TLS-Required Header Field\n\n   One new message header field [RFC5322], TLS-Required, is defined by\n   this specification.  It is used for messages for which the originator\n   requests that the recipient TLS policy (including MTA-STS [RFC8461]\n   and DANE [RFC7672]) be ignored.  This might be done, for example, to\n   report a misconfigured mail server, such as an expired TLS\n   certificate.\n\n   The TLS-Required header field has a single REQUIRED parameter:\n\n   *  No - The SMTP client SHOULD attempt to send the message regardless\n      of its ability to negotiate STARTTLS with the SMTP server,\n      ignoring policy-based mechanisms (including MTA-STS and DANE), if\n      any, asserted by the recipient domain.  Nevertheless, the client\n      SHOULD negotiate STARTTLS with the server if available.\n\n   More than one instance of the TLS-Required header field MUST NOT\n   appear in a given message.\n\n   The ABNF syntax for the TLS-Required header field is as follows:\n\n   requiretls-field = \"TLS-Required:\" [FWS] \"No\" CRLF\n           ; where requiretls-field in an instance of an\n           ; optional-field defined in RFC 5322, Section 3.6.8.\n   FWS = <as defined in RFC 5322>\n   CRLF = <as defined in RFC 5234>\n\n4.  REQUIRETLS Semantics\n\n4.1.  REQUIRETLS Receipt Requirements\n\n   Upon receipt of the REQUIRETLS option on a MAIL FROM command during\n   the receipt of a message, an SMTP server MUST tag that message as\n   needing REQUIRETLS handling.\n\n   Upon receipt of a message not specifying the REQUIRETLS option on its\n   MAIL FROM command but containing the TLS-Required header field in its\n   message header, an SMTP server implementing this specification MUST\n   tag that message with the option specified in the TLS-Required header\n   field.  If the REQUIRETLS MAIL FROM parameter is specified, the TLS-\n   Required header field MUST be ignored but MAY be included in the\n   onward relay of the message.\n\n   The manner in which the above tagging takes place is implementation\n   dependent.  If the message is being locally aliased and redistributed\n   to multiple addresses, all instances of the message MUST be tagged in\n   the same manner.\n\n4.2.  REQUIRETLS Sender Requirements\n\n4.2.1.  Sending with TLS Required\n\n   When sending a message tagged as requiring TLS for which the MAIL\n   FROM return-path is not empty (an empty MAIL FROM return-path\n   indicating a bounce message), the sending (client) MTA MUST:\n\n   1.  Look up the SMTP server to which the message is to be sent, as\n       described in [RFC5321], Section 5.1.\n\n   2.  If the server lookup is accomplished via the recipient domain's\n       MX record (the usual case) and is not accompanied by a valid\n       DNSSEC signature, the client MUST also validate the SMTP server\n       name using MTA-STS, as described in [RFC8461], Section 4.1.\n\n   3.  Open an SMTP session with the peer SMTP server using the EHLO\n       verb.\n\n   4.  Establish a TLS-protected SMTP session with its peer SMTP server\n       and authenticate the server's certificate as specified in\n       [RFC6125] or [RFC7672], as applicable.  The hostname from the MX\n       record lookup (or the domain name in the absence of an MX record\n       where an A record is used directly) MUST match the DNS-ID or CN-\n       ID of the certificate presented by the server.\n\n   5.  Ensure that the response to the subsequent EHLO following\n       establishment of the TLS protection advertises the REQUIRETLS\n       capability.\n\n   The SMTP client SHOULD follow the recommendations in [RFC7525] or its\n   successor with respect to negotiation of the TLS session.\n\n   If any of the above steps fail, the client MUST issue a QUIT to the\n   server and repeat steps 2-5 with each host on the recipient domain's\n   list of MX hosts in an attempt to find a mail path that meets the\n   sender's requirements.  The client MAY send other, unprotected\n   messages to that server if it has any such messages prior to issuing\n   the QUIT.  If there are no more MX hosts, the client MUST NOT\n   transmit the message to the domain.\n\n   Following such a failure, the SMTP client MUST send a non-delivery\n   notification to the reverse-path of the failed message, as described\n   in Section 3.6 of [RFC5321].  The following status codes [RFC5248]\n   SHOULD be used:\n\n   *  REQUIRETLS not supported by server: 5.7.30 REQUIRETLS support\n      required\n\n   *  Unable to establish TLS-protected SMTP session: 5.7.10 Encryption\n      needed\n\n   Refer to Section 5 for further requirements regarding non-delivery\n   messages.\n\n   If all REQUIRETLS requirements have been met, transmit the message,\n   issuing the REQUIRETLS option on the MAIL FROM command with the\n   required option(s), if any.\n\n4.2.2.  Sending with TLS Optional\n\n   Messages tagged \"TLS-Required: No\" are handled as follows.  When\n   sending such a message, the sending (client) MTA MUST:\n\n   *  Look up the SMTP server to which the message is to be sent, as\n      described in [RFC5321], Section 5.1.\n\n   *  Open an SMTP session with the peer SMTP server using the EHLO\n      verb.  Attempt to negotiate STARTTLS if possible, and follow any\n      policy published by the recipient domain, but do not fail if this\n      is unsuccessful.\n\n   Some SMTP servers may be configured to require STARTTLS connections\n   as a matter of policy and not accept messages in the absence of\n   STARTTLS.  A non-delivery notification MUST be returned to the sender\n   if message relay fails due to an inability to negotiate STARTTLS when\n   required by the server.\n\n   Since messages tagged with \"TLS-Required: No\" will sometimes be sent\n   to SMTP servers not supporting REQUIRETLS, that option will not be\n   uniformly observed by all SMTP relay hops.\n\n4.3.  REQUIRETLS Submission\n\n   A Mail User Agent (MUA) or other agent making the initial\n   introduction of a message has the option to decide whether to require\n   TLS.  If TLS is to be required, it MUST do so by negotiating STARTTLS\n   and REQUIRETLS and including the REQUIRETLS option on the MAIL FROM\n   command, as is done for message relay.\n\n   When TLS is not to be required, the sender MUST include the TLS-\n   Required header field in the message.  SMTP servers implementing this\n   specification MUST interpret this header field as described in\n   Section 4.1.\n\n   In either case, the decision whether to specify REQUIRETLS MAY be\n   done based on a user interface selection or based on a ruleset or\n   other policy.  The manner in which the decision to require TLS is\n   made is implementation dependent and is beyond the scope of this\n   specification.\n\n4.4.  Delivery of REQUIRETLS messages\n\n   Messages are usually retrieved by end users using protocols other\n   than SMTP such as IMAP [RFC3501], POP [RFC1939], or Web mail systems.\n   Mail delivery agents supporting the REQUIRETLS SMTP option SHOULD\n   observe the guidelines in [RFC8314].\n\n5.  Non-delivery Message Handling\n\n   Non-delivery (\"bounce\") messages usually contain important metadata\n   about the message to which they refer, including the original message\n   header.  They therefore MUST be protected in the same manner as the\n   original message.  All non-delivery messages resulting from messages\n   with the REQUIRETLS SMTP option, whether resulting from a REQUIRETLS\n   error or some other issue, MUST also specify the REQUIRETLS SMTP\n   option unless redacted as described below.\n\n   The path from the origination of an error bounce message back to the\n   MAIL FROM address may not share the same REQUIRETLS support as the\n   forward path.  Therefore, users requiring TLS are advised to make\n   sure that they are capable of receiving mail using REQUIRETLS as\n   well.  Otherwise, such non-delivery messages will be lost.\n\n   If a REQUIRETLS message is bounced, the server MUST behave as if\n   RET=HDRS was present, as described in [RFC3461].  If both RET=FULL\n   and REQUIRETLS are present, the RET=FULL MUST be disregarded.  The\n   SMTP client for a REQUIRETLS bounce message uses an empty MAIL FROM\n   return-path, as required by [RFC5321].  When the MAIL FROM return-\n   path is empty, the REQUIRETLS parameter SHOULD NOT cause a bounce\n   message to be discarded even if the next-hop relay does not advertise\n   REQUIRETLS.\n\n   Senders of messages requiring TLS are advised to consider the\n   possibility that bounce messages will be lost as a result of\n   REQUIRETLS return path failure and that some information could be\n   leaked if a bounce message is not able to be transmitted with\n   REQUIRETLS.\n\n6.  Reorigination Considerations\n\n   In a number of situations, a mediator [RFC5598] originates a new\n   message as a result of an incoming message.  These situations include\n   but are not limited to mailing lists (including administrative\n   traffic such as message approval requests), Sieve [RFC5228],\n   \"vacation\" responders, and other filters to which incoming messages\n   may be piped.  These newly originated messages may essentially be\n   copies of the incoming message, such as with a forwarding service or\n   a mailing list expander.  In other cases, such as with a vacation\n   message or a delivery notification, they will be different but might\n   contain parts of the original message or other information for which\n   the original message sender wants to influence the requirement to use\n   TLS transmission.\n\n   Mediators that reoriginate messages should apply REQUIRETLS\n   requirements in incoming messages (both requiring TLS transmission\n   and requesting that TLS not be required) to the reoriginated messages\n   to the extent feasible.  A limitation to this might be that for a\n   message requiring TLS, redistribution to multiple addresses while\n   retaining the TLS requirement could result in the message not being\n   delivered to some of the intended recipients.\n\n   User-side mediators (such as use of Sieve rules on a user agent)\n   typically do not have access to the SMTP details and therefore may\n   not be aware of the REQUIRETLS requirement on a delivered message.\n   Recipients that expect sensitive traffic should avoid the use of\n   user-side mediators.  Alternatively, if operationally feasible (such\n   as when forwarding to a specific, known address), they should apply\n   REQUIRETLS to all reoriginated messages that do not contain the \"TLS-\n   Required: No\" header field.\n\n7.  IANA Considerations\n\n   Per this document, IANA has added the following keyword to the \"SMTP\n   Service Extensions\" subregistry of the \"Mail Parameters\" registry\n   [MailParams]:\n\n      EHLO Keyword:                 REQUIRETLS\n      Description:                  Require TLS\n      Syntax and parameters:        (no parameters)\n      Additional SMTP verbs:        none\n      MAIL and RCPT parameters:     REQUIRETLS parameter on MAIL\n      Behavior:                     Use of the REQUIRETLS parameter on\n                                    the MAIL verb causes that message to\n                                    require the use of TLS and tagging\n                                    with REQUIRETLS for all onward\n                                    relay.\n      Command length increment:     11 characters\n\n   Per this document, IANA has added an entry to the \"Enumerated Status\n   Codes\" subregistry of the \"Simple Mail Transfer Protocol (SMTP)\n   Enhanced Status Codes Registry\" [SMTPStatusCodes]:\n\n      Code:                         X.7.30\n      Sample Text:                  REQUIRETLS support required\n      Associated basic status code:  550\n      Description:                  This indicates that the message was\n                                    not able to be forwarded because it\n                                    was received with a REQUIRETLS\n                                    requirement and none of the SMTP\n                                    servers to which the message should\n                                    be forwarded provide this support.\n      Reference:                    RFC 8689\n      Submitter:                    J.  Fenton\n      Change Controller:            IESG\n\n   Per this document, IANA has added an entry to the \"Permanent Message\n   Header Field Names\" subregistry of the \"Message Headers\" registry\n   [MessageHeaders] as follows:\n\n      Header field name:            TLS-Required\n      Applicable protocol:          mail\n      Status:                       standard\n      Author/change controller:     IETF\n      Specification document:       RFC 8689\n\n8.  Security Considerations\n\n   The purpose of REQUIRETLS is to give the originator of a message\n   control over the security of email they send, either by conveying an\n   expectation that it will be transmitted in an encrypted form over the\n   wire or explicitly indicating that transport encryption is not\n   required if it cannot be successfully negotiated.\n\n   The following considerations apply to the REQUIRETLS service\n   extension but not the TLS-Required header field, since messages\n   specifying the header field are less concerned with transport\n   security.\n\n8.1.  Passive Attacks\n\n   REQUIRETLS is generally effective against passive attackers who are\n   merely trying to eavesdrop on an SMTP exchange between an SMTP client\n   and server.  This assumes, of course, the cryptographic integrity of\n   the TLS connection being used.\n\n8.2.  Active Attacks\n\n   Active attacks against TLS-encrypted SMTP connections can take many\n   forms.  One such attack is to interfere in the negotiation by\n   changing the STARTTLS command to something illegal such as XXXXXXXX.\n   This causes TLS negotiation to fail and messages to be sent in the\n   clear, where they can be intercepted.  REQUIRETLS detects the failure\n   of STARTTLS and declines to send the message rather than send it\n   insecurely.\n\n   A second form of attack is a man-in-the-middle attack where the\n   attacker terminates the TLS connection rather than the intended SMTP\n   server.  This is possible when, as is commonly the case, the SMTP\n   client either does not verify the server's certificate or establishes\n   the connection even when the verification fails.  REQUIRETLS requires\n   successful certificate validation before sending the message.\n\n   Another active attack involves the spoofing of DNS MX records of the\n   recipient domain.  An attacker with this capability could potentially\n   cause the message to be redirected to a mail server under the\n   attacker's own control, which would presumably have a valid\n   certificate.  REQUIRETLS requires that the recipient domain's MX\n   record lookup be validated either using DNSSEC or via a published\n   MTA-STS policy that specifies the acceptable SMTP server hostname(s)\n   for the recipient domain.\n\n8.3.  Bad-Actor MTAs\n\n   A bad-actor MTA along the message transmission path could\n   misrepresent its support of REQUIRETLS and/or actively strip\n   REQUIRETLS tags from messages it handles.  However, since\n   intermediate MTAs are already trusted with the cleartext of messages\n   they handle, and are not part of the threat model for transport-layer\n   security, they are also not part of the threat model for REQUIRETLS.\n\n   It should be reemphasized that since SMTP TLS is a transport-layer\n   security protocol, messages sent using REQUIRETLS are not encrypted\n   end-to-end and are visible to MTAs that are part of the message\n   delivery path.  Messages containing sensitive information that MTAs\n   should not have access to MUST be sent using end-to-end content\n   encryption such as OpenPGP [RFC4880] or S/MIME [RFC8551].\n\n8.4.  Policy Conflicts\n\n   In some cases, the use of the TLS-Required header field may conflict\n   with a recipient domain policy expressed through the DANE [RFC7672]\n   or MTA-STS [RFC8461] protocols.  Although these protocols encourage\n   the use of TLS transport by advertising the availability of TLS, the\n   use of the \"TLS-Required: No\" header field represents an explicit\n   decision on the part of the sender not to require the use of TLS,\n   such as to overcome a configuration error.  The recipient domain has\n   the ultimate ability to require TLS by not accepting messages when\n   STARTTLS has not been negotiated; otherwise, \"TLS-Required: No\" is\n   effectively directing the client MTA to behave as if it does not\n   support DANE or MTA-STS.\n\n9.  References\n\n9.1.  Normative References\n\n   [MailParams]\n              IANA, \"Mail Parameters\",\n              <http://www.iana.org/assignments/mail-parameters>.\n\n   [MessageHeaders]\n              IANA, \"Permanent Message Header Field Names\",\n              <https://www.iana.org/assignments/message-headers>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3207]  Hoffman, P., \"SMTP Service Extension for Secure SMTP over\n              Transport Layer Security\", RFC 3207, DOI 10.17487/RFC3207,\n              February 2002, <https://www.rfc-editor.org/info/rfc3207>.\n\n   [RFC3461]  Moore, K., \"Simple Mail Transfer Protocol (SMTP) Service\n              Extension for Delivery Status Notifications (DSNs)\",\n              RFC 3461, DOI 10.17487/RFC3461, January 2003,\n              <https://www.rfc-editor.org/info/rfc3461>.\n\n   [RFC4033]  Arends, R., Austein, R., Larson, M., Massey, D., and S.\n              Rose, \"DNS Security Introduction and Requirements\",\n              RFC 4033, DOI 10.17487/RFC4033, March 2005,\n              <https://www.rfc-editor.org/info/rfc4033>.\n\n   [RFC4034]  Arends, R., Austein, R., Larson, M., Massey, D., and S.\n              Rose, \"Resource Records for the DNS Security Extensions\",\n              RFC 4034, DOI 10.17487/RFC4034, March 2005,\n              <https://www.rfc-editor.org/info/rfc4034>.\n\n   [RFC4035]  Arends, R., Austein, R., Larson, M., Massey, D., and S.\n              Rose, \"Protocol Modifications for the DNS Security\n              Extensions\", RFC 4035, DOI 10.17487/RFC4035, March 2005,\n              <https://www.rfc-editor.org/info/rfc4035>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5248]  Hansen, T. and J. Klensin, \"A Registry for SMTP Enhanced\n              Mail System Status Codes\", BCP 138, RFC 5248,\n              DOI 10.17487/RFC5248, June 2008,\n              <https://www.rfc-editor.org/info/rfc5248>.\n\n   [RFC5321]  Klensin, J., \"Simple Mail Transfer Protocol\", RFC 5321,\n              DOI 10.17487/RFC5321, October 2008,\n              <https://www.rfc-editor.org/info/rfc5321>.\n\n   [RFC5322]  Resnick, P., Ed., \"Internet Message Format\", RFC 5322,\n              DOI 10.17487/RFC5322, October 2008,\n              <https://www.rfc-editor.org/info/rfc5322>.\n\n   [RFC6125]  Saint-Andre, P. and J. Hodges, \"Representation and\n              Verification of Domain-Based Application Service Identity\n              within Internet Public Key Infrastructure Using X.509\n              (PKIX) Certificates in the Context of Transport Layer\n              Security (TLS)\", RFC 6125, DOI 10.17487/RFC6125, March\n              2011, <https://www.rfc-editor.org/info/rfc6125>.\n\n   [RFC7525]  Sheffer, Y., Holz, R., and P. Saint-Andre,\n              \"Recommendations for Secure Use of Transport Layer\n              Security (TLS) and Datagram Transport Layer Security\n              (DTLS)\", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May\n              2015, <https://www.rfc-editor.org/info/rfc7525>.\n\n   [RFC7672]  Dukhovni, V. and W. Hardaker, \"SMTP Security via\n              Opportunistic DNS-Based Authentication of Named Entities\n              (DANE) Transport Layer Security (TLS)\", RFC 7672,\n              DOI 10.17487/RFC7672, October 2015,\n              <https://www.rfc-editor.org/info/rfc7672>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [RFC8314]  Moore, K. and C. Newman, \"Cleartext Considered Obsolete:\n              Use of Transport Layer Security (TLS) for Email Submission\n              and Access\", RFC 8314, DOI 10.17487/RFC8314, January 2018,\n              <https://www.rfc-editor.org/info/rfc8314>.\n\n   [RFC8461]  Margolis, D., Risher, M., Ramakrishnan, B., Brotman, A.,\n              and J. Jones, \"SMTP MTA Strict Transport Security (MTA-\n              STS)\", RFC 8461, DOI 10.17487/RFC8461, September 2018,\n              <https://www.rfc-editor.org/info/rfc8461>.\n\n   [SMTPStatusCodes]\n              IANA, \"Simple Mail Transfer Protocol (SMTP) Enhanced\n              Status Codes Registry\", <https://www.iana.org/assignments/\n              smtp-enhanced-status-codes>.\n\n9.2.  Informative References\n\n   [RFC1939]  Myers, J. and M. Rose, \"Post Office Protocol - Version 3\",\n              STD 53, RFC 1939, DOI 10.17487/RFC1939, May 1996,\n              <https://www.rfc-editor.org/info/rfc1939>.\n\n   [RFC2033]  Myers, J., \"Local Mail Transfer Protocol\", RFC 2033,\n              DOI 10.17487/RFC2033, October 1996,\n              <https://www.rfc-editor.org/info/rfc2033>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4880]  Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R.\n              Thayer, \"OpenPGP Message Format\", RFC 4880,\n              DOI 10.17487/RFC4880, November 2007,\n              <https://www.rfc-editor.org/info/rfc4880>.\n\n   [RFC5228]  Guenther, P., Ed. and T. Showalter, Ed., \"Sieve: An Email\n              Filtering Language\", RFC 5228, DOI 10.17487/RFC5228,\n              January 2008, <https://www.rfc-editor.org/info/rfc5228>.\n\n   [RFC5598]  Crocker, D., \"Internet Mail Architecture\", RFC 5598,\n              DOI 10.17487/RFC5598, July 2009,\n              <https://www.rfc-editor.org/info/rfc5598>.\n\n   [RFC6409]  Gellens, R. and J. Klensin, \"Message Submission for Mail\",\n              STD 72, RFC 6409, DOI 10.17487/RFC6409, November 2011,\n              <https://www.rfc-editor.org/info/rfc6409>.\n\n   [RFC8551]  Schaad, J., Ramsdell, B., and S. Turner, \"Secure/\n              Multipurpose Internet Mail Extensions (S/MIME) Version 4.0\n              Message Specification\", RFC 8551, DOI 10.17487/RFC8551,\n              April 2019, <https://www.rfc-editor.org/info/rfc8551>.\n\nAppendix A.  Examples\n\n   This section is informative.\n\nA.1.  REQUIRETLS SMTP Option\n\n   The TLS-Required SMTP option is used to express the intention of the\n   sender to have the associated message relayed using TLS.  In the\n   following example, lines beginning with \"C:\" are transmitted from the\n   SMTP client to the server, and lines beginning with \"S:\" are\n   transmitted in the opposite direction.\n\n    S: 220 mail.example.net ESMTP\n    C: EHLO mail.example.org\n    S: 250-mail.example.net Hello example.org [192.0.2.1]\n    S: 250-SIZE 52428800\n    S: 250-8BITMIME\n    S: 250-PIPELINING\n    S: 250-STARTTLS\n    S: 250 HELP\n    C: STARTTLS\n    S: TLS go ahead\n\n   (at this point TLS negotiation takes place.  The remainder of this\n   session occurs within TLS.)\n\n    S: 220 mail.example.net ESMTP\n    C: EHLO mail.example.org\n    S: 250-mail.example.net Hello example.org [192.0.2.1]\n    S: 250-SIZE 52428800\n    S: 250-8BITMIME\n    S: 250-PIPELINING\n    S: 250-REQUIRETLS\n    S: 250 HELP\n    C: MAIL FROM:<roger@example.org> REQUIRETLS\n    S: 250 OK\n    C: RCPT TO:<editor@example.net>\n    S: 250 Accepted\n    C: DATA\n    S: 354 Enter message, ending with \".\" on a line by itself\n\n   (message follows)\n\n    C: .\n    S: 250 OK\n    C: QUIT\n\nA.2.  TLS-Required Header Field\n\n   The TLS-Required header field is used when the sender requests that\n   the mail system not heed a default policy of the recipient domain\n   requiring TLS.  It might be used, for example, to allow problems with\n   the recipient domain's TLS certificate to be reported:\n\n    From: Roger Reporter <roger@example.org>\n    To: Andy Admin <admin@example.com>\n    Subject: Certificate problem?\n    TLS-Required: No\n    Date: Fri, 18 Jan 2019 10:26:55 -0800\n    Message-ID: <5c421a6f79c0e_d153ff8286d45c468473@mail.example.org>\n\n    Andy, there seems to be a problem with the TLS certificate\n    on your mail server. Are you aware of this?\n\n    Roger\n\nAcknowledgements\n\n   The author would like to acknowledge many helpful suggestions on the\n   ietf-smtp and uta mailing lists, in particular those of Viktor\n   Dukhovni, Tony Finch, Jeremy Harris, Arvel Hathcock, John Klensin,\n   Barry Leiba, John Levine, Chris Newman, Rolf Sonneveld, and Per\n   Thorsheim.\n\nAuthor's Address\n\n   Jim Fenton\n   Altmode Networks\n   Los Altos, California 94024\n   United States of America\n\n   Email: fenton@bluepopcorn.net\n"
  },
  {
    "path": "rfc/rfc8970.txt",
    "content": "﻿\n\n\n\nInternet Engineering Task Force (IETF)                        M. Slusarz\nRequest for Comments: 8970                             Open-Xchange Inc.\nCategory: Standards Track                                  December 2020\nISSN: 2070-1721\n\n\n              IMAP4 Extension: Message Preview Generation\n\nAbstract\n\n   This document specifies an Internet Message Access Protocol (IMAP)\n   protocol extension that allows a client to request a server-generated\n   abbreviated text representation of message data that is useful as a\n   contextual preview of the entire message.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc8970.\n\nCopyright Notice\n\n   Copyright (c) 2020 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\nTable of Contents\n\n   1.  Introduction\n   2.  Conventions Used in This Document\n   3.  FETCH Data Item\n     3.1.  Command\n     3.2.  Response\n     3.3.  Preview Text Format\n   4.  LAZY Priority Modifier\n     4.1.  LAZY\n     4.2.  Client Implementation Advice\n   5.  Examples\n   6.  Formal Syntax\n   7.  IANA Considerations\n   8.  Security Considerations\n   9.  References\n     9.1.  Normative References\n     9.2.  Informative References\n   Acknowledgments\n   Author's Address\n\n1.  Introduction\n\n   Many modern mail clients display small extracts of the body text as\n   an aid to allow a user to quickly decide whether they are interested\n   in viewing the full message contents.  Mail clients implementing the\n   Internet Message Access Protocol [RFC3501] would benefit from a\n   standardized, consistent way to generate these brief textual previews\n   of messages.\n\n   Generation of a preview on the server has several benefits.  First,\n   it allows consistent representation of previews across all clients.\n   While different clients might generate quite different preview text,\n   having common preview text generated by the server can give a more\n   consistent user experience to those who use multiple clients.\n\n   Second, server-side preview generation is more efficient.  A client-\n   based algorithm needs to issue, at a minimum, a FETCH BODYSTRUCTURE\n   command in order to determine which MIME [RFC2045] body part(s)\n   should be represented in the preview.  Subsequently, at least one\n   FETCH BODY command may be needed to retrieve body data used in\n   preview generation.  These FETCH commands cannot be pipelined since\n   the BODYSTRUCTURE query must be parsed on the client before the list\n   of parts to be retrieved via the BODY command(s) can be determined.\n\n   Additionally, it may be difficult to predict the amount of body data\n   that must be retrieved to adequately represent the part via a\n   preview, therefore requiring inefficient fetching of excessive data\n   in order to account for this uncertainty.  For example, a preview\n   algorithm to display data contained in a text/html [RFC2854] part\n   will likely strip the markup tags to obtain textual content.\n   However, without fetching the entire content of the part, there is no\n   way to guarantee that sufficient non-tag content will exist unless\n   either 1) the entire part is retrieved or 2) an additional partial\n   FETCH is executed when the client determines that it does not possess\n   sufficient data from a previous partial FETCH to display an adequate\n   representation of the preview.\n\n   Finally, server generation allows caching in a centralized location.\n   Using server-generated previews allows global generation once per\n   message, and that preview can be cached for the retention period of\n   the source message.  Retrieval of message data may be expensive\n   within a server, for example, so a server can be configured to reduce\n   its storage retrieval load by pre-generating preview data.\n\n   A server indicates support for this extension via the \"PREVIEW\"\n   capability name.\n\n2.  Conventions Used in This Document\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n   \"User\" is used to refer to a human user, whereas \"client\" refers to\n   the software being run by the user.\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  If a single \"C:\" or \"S:\" label applies to\n   multiple lines, then the line breaks between those lines are for\n   editorial clarity only and are not part of the actual protocol\n   exchange.\n\n   As with all IMAP extension documents, the case used in writing IMAP\n   protocol elements herein is chosen for editorial clarity, and\n   implementations must pay attention to the numbered rules at the\n   beginning of Section 9 of [RFC3501].\n\n3.  FETCH Data Item\n\n3.1.  Command\n\n   To retrieve a preview for a message, the PREVIEW FETCH attribute is\n   used when issuing a FETCH command.\n\n3.2.  Response\n\n   The server returns a variable-length string that is the generated\n   preview for that message.  This string is intended to be viewed by\n   the user as a contextual preview of the entire message and is not\n   intended to be interpreted in any way by the client software.\n\n   Example: Retrieving preview information in a SELECTed mailbox.\n\n     C: A1 FETCH 1 (PREVIEW)\n     S: * 1 FETCH (PREVIEW \"Preview text!\")\n     S: A1 OK FETCH complete.\n\n   A server SHOULD strive to generate the same string for a given\n   message for each request.  However, since previews are understood to\n   be an approximation of the message data and not a canonical view of\n   its contents, a client MUST NOT assume that a message preview is\n   immutable for a given message.  This relaxed requirement permits a\n   server to offer previews as an option without requiring potentially\n   burdensome storage and/or processing requirements to guarantee\n   immutability for a use case that does not require this strictness.\n   For example, the underlying IMAP server may change due to a system\n   software upgrade; an account's state information may be retained in\n   the migration, but the new server may generate different preview text\n   than the old server.\n\n   It is possible that the server has determined that no meaningful\n   preview text can be generated for a particular message.  Examples of\n   this involve encrypted messages, content types the server does not\n   support previews of, and other situations where the server is not\n   able to extract information for a preview.  In such cases, the server\n   MUST return a zero-length string.  Clients SHOULD NOT send another\n   FETCH for a preview for such messages.  (As discussed previously,\n   preview data is not immutable, so there is chance that at some point\n   in the future the server would be able to generate meaningful text.\n   However, this scenario is expected to be rare, so a client should not\n   continually send out requests to try to detect this infrequent\n   occurrence.)\n\n   If the LAZY modifier (Section 4.1) is used, the server MAY return NIL\n   for the preview response, indicating that preview generation could\n   not be completed without causing undue delay.  A server MUST NOT\n   return NIL to a FETCH PREVIEW request made without the LAZY modifier.\n\n3.3.  Preview Text Format\n\n   The generated preview text MUST be treated as text/plain [RFC2046]\n   media type data by the client.\n\n   The generated string MUST NOT be content transfer encoded and MUST be\n   encoded in UTF-8 [RFC3629].  The server SHOULD remove any formatting\n   markup and do whatever processing might be useful in rendering the\n   preview as plain text.\n\n   For purposes of this section, a \"preview character\" is defined as a\n   single Universal Character Set (UCS) character encoded in UTF-8.\n   Note: a single preview character may comprise multiple octets, so any\n   buffers implemented to conform to the string limitations identified\n   in this document should be sized to prevent possible overflow errors.\n\n   The server SHOULD limit the length of the preview text to 200 preview\n   characters.  This length should provide sufficient data to generally\n   support both various languages (and their different average word\n   lengths) and diverse client display size requirements.\n\n   The server MUST NOT output preview text longer than 256 preview\n   characters.\n\n   If the preview is not generated based on the body content of the\n   message, and the LANGUAGE extension [RFC5255] is supported by the\n   server, the preview text SHOULD be generated according to the\n   language rules that apply to human-readable text.  For example, a\n   message that consists of a single image MIME part has no human-\n   readable text from which to generate preview information.  Instead,\n   the server may wish to output a description that the message contains\n   an image and describe some attributes of the image, such as image\n   format, size, and filename.  This descriptive text is not a product\n   of the message body itself but is rather auto-generated data by the\n   server; it should thus use the rules defined for human-readable text\n   described in the LANGUAGE extension (if supported on the server).\n\n4.  LAZY Priority Modifier\n\n4.1.  LAZY\n\n   The LAZY modifier directs the server to return the preview\n   representation only if that data can be returned without undue delay\n   to the client.\n\n   If this modifier is used, and the server is unable to return preview\n   data without undue delay, the server MUST return NIL as the preview\n   response.\n\n   The LAZY modifier MUST be implemented by any server that supports the\n   PREVIEW extension.\n\n4.2.  Client Implementation Advice\n\n   Upon opening a mailbox, a client generally performs a FETCH of\n   message details in order to create a listing to present to the user\n   (e.g., ENVELOPE data).  Using this extension, a client may want to\n   additionally display preview information as part of this listing.\n   Quickly providing the base mailbox listing with basic message details\n   is the primary goal of this command as this is required to allow the\n   user to begin interacting with the mailbox.  Preview data is likely\n   to be of secondary importance; it provides useful context, but it is\n   not necessary to perform message actions.  A client can load\n   unavailable previews in the background and display them\n   asynchronously to the user as the preview data is provided by the\n   server.\n\n   In this scenario, the client would add the PREVIEW data item, with\n   the LAZY modifier, to the list of FETCH items needed to generate the\n   mailbox listing.  This allows the server to advantageously return\n   preview data without blocking the primary goal of quickly returning\n   the basic message details used to generate the mailbox listing.\n\n   Once this initial FETCH is complete, the client can then issue FETCH\n   requests, without the LAZY modifier, to load the PREVIEW data item\n   for the messages in which preview data was not returned.  It is\n   RECOMMENDED that these FETCH requests be issued in small batches,\n   e.g., 50 messages per FETCH command, since preview generation may be\n   expensive and a single large request may exceed server resource\n   limits.\n\n   See Example 2 in Section 5 for an implementation of this strategy.\n\n   A client SHOULD NOT continually issue FETCH PREVIEW requests with the\n   LAZY modifier in a selected mailbox as the server is under no\n   requirement to return preview information for this command, which\n   could lead to an unnecessary waste of system and network resources.\n\n5.  Examples\n\n   Example 1: Requesting preview without LAZY modifier.\n\n     C: A1 CAPABILITY\n     S: * CAPABILITY IMAP4rev1 PREVIEW\n     S: A1 OK Capability command completed.\n     [...a mailbox is SELECTed...]\n     C: A2 FETCH 1 (RFC822.SIZE PREVIEW)\n     S: * 1 FETCH (RFC822.SIZE 5647 PREVIEW {200}\n     S: Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n     S: Curabitur aliquam turpis et ante dictum, et pulvinar dui congue.\n     S: Maecenas hendrerit, lorem non imperdiet pellentesque, nulla\n     S: ligula nullam\n     S: )\n     S: A2 OK FETCH complete.\n\n   Example 2: Requesting preview with LAZY modifier, to obtain previews\n   during initial mailbox listing if readily available; otherwise, load\n   previews in background.\n\n     C: B1 FETCH 1:4 (ENVELOPE PREVIEW (LAZY))\n     S: * 1 FETCH (ENVELOPE (\"Wed, 23 Sep 2020 15:03:11 +0000\" [...])\n        PREVIEW \"Preview text for message 1.\")\n     S: * 2 FETCH (PREVIEW \"\" ENVELOPE\n        (\"Thu, 24 Sep 2020 12:17:23 +0000\" [...]))\n     S: * 3 FETCH (ENVELOPE (\"Fri, 25 Sep 2020 09:13:45 +0000\" [...])\n        PREVIEW NIL)\n     S: * 4 FETCH (ENVELOPE (\"Sat, 26 Sep 2020 07:11:18 +0000\" [...])\n        PREVIEW NIL)\n     S: B1 OK FETCH completed.\n     [...Client has preview for message 1 and knows that message 2 has\n         a preview that is empty; only need to request preview of\n         messages 3 & 4 (e.g., in background)...]\n     C: B2 FETCH 3:4 (PREVIEW)\n     S: * 3 FETCH (PREVIEW {30}\n     S: Message data from message 3.\n     S: )\n     S: * 4 FETCH (PREVIEW \"Message 4 preview\")\n     S: B2 OK Fetch completed.\n\n   Example 3: Requesting preview for search results within a single\n   mailbox.  Use the SEARCHRES extension [RFC5182] to save a round-trip.\n\n     C: C1 CAPABILITY\n     S: * CAPABILITY IMAP4rev1 PREVIEW SEARCHRES\n     S: C1 OK Capability command completed.\n     [...a mailbox is SELECTed...]\n     C: C2 SEARCH RETURN (SAVE) FROM \"FOO\"\n     C: C3 FETCH $ (UID PREVIEW (LAZY))\n     S: C2 OK SEARCH completed.\n     S: * 5 FETCH (UID 13 PREVIEW \"Preview!\")\n     S: * 9 FETCH (UID 23 PREVIEW NIL)\n     S: C3 OK FETCH completed.\n     [...Retrieve message 9 preview in background...]\n     C: C4 UID FETCH 23 (PREVIEW)\n     S: * 9 FETCH (UID 23 PREVIEW \"Another preview!\")\n     S: C4 OK FETCH completed.\n\n6.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) as described in [RFC5234].  It includes definitions from\n   IMAP [RFC3501].\n\n     capability        =/ \"PREVIEW\"\n\n     fetch-att         =/ \"PREVIEW\" [SP \"(\" preview-mod *(SP\n                          preview-mod) \")\"]\n\n     msg-att-dynamic   =/ \"PREVIEW\" SP nstring\n\n     preview-mod       =  \"LAZY\"\n\n7.  IANA Considerations\n\n   IMAP [RFC3501] capabilities are registered by publishing a Standards\n   Track or IESG-approved Experimental RFC in the \"IMAP Capabilities\"\n   registry located at <http://www.iana.org/assignments/imap-\n   capabilities>.\n\n   IANA has added the \"PREVIEW\" capability to this registry.\n\n8.  Security Considerations\n\n   Implementation of this extension might enable denial-of-service\n   attacks against server resources, due to excessive memory or CPU\n   usage during preview generation or increased storage usage if preview\n   results are stored on the server after generation.  In order to\n   mitigate such attacks, servers SHOULD log the client authentication\n   identity on FETCH PREVIEW operations in order to facilitate tracking\n   of abusive clients.\n\n   Servers MAY limit the resources that preview generation uses.  Such\n   resource limitations might, in an extreme example, cause a server to\n   return a preview that is the empty string for a message that\n   otherwise would have had a non-empty preview.  However, it is\n   recommended that at least some preview text be provided in this\n   situation, even if the quality of the preview is degraded.\n\n   Just as the messages they summarize, preview data may contain\n   sensitive information.  If generated preview data is stored on the\n   server, e.g., for caching purposes, these previews MUST be protected\n   with equivalent authorization and confidentiality controls as the\n   source message.\n\n9.  References\n\n9.1.  Normative References\n\n   [RFC2046]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n              Extensions (MIME) Part Two: Media Types\", RFC 2046,\n              DOI 10.17487/RFC2046, November 1996,\n              <https://www.rfc-editor.org/info/rfc2046>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC3629]  Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, DOI 10.17487/RFC3629, November\n              2003, <https://www.rfc-editor.org/info/rfc3629>.\n\n   [RFC5234]  Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC5255]  Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n              Message Access Protocol Internationalization\", RFC 5255,\n              DOI 10.17487/RFC5255, June 2008,\n              <https://www.rfc-editor.org/info/rfc5255>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n9.2.  Informative References\n\n   [RFC2045]  Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n              Extensions (MIME) Part One: Format of Internet Message\n              Bodies\", RFC 2045, DOI 10.17487/RFC2045, November 1996,\n              <https://www.rfc-editor.org/info/rfc2045>.\n\n   [RFC2854]  Connolly, D. and L. Masinter, \"The 'text/html' Media\n              Type\", RFC 2854, DOI 10.17487/RFC2854, June 2000,\n              <https://www.rfc-editor.org/info/rfc2854>.\n\n   [RFC5182]  Melnikov, A., \"IMAP Extension for Referencing the Last\n              SEARCH Result\", RFC 5182, DOI 10.17487/RFC5182, March\n              2008, <https://www.rfc-editor.org/info/rfc5182>.\n\nAcknowledgments\n\n   The author would like to thank the following people for their\n   comments and contributions to this document: Stephan Bosch, Bron\n   Gondwana, Teemu Huovila, Neil Jenkins, Steffen Lehmann, Barry Leiba,\n   Alexey Melnikov, Chris Newman, Pete Resnick, Jeff Sipek, Timo\n   Sirainen, Steffen Templin, and Aki Tuomi.\n\nAuthor's Address\n\n   Michael M. Slusarz\n   Open-Xchange Inc.\n   530 Lytton Avenue\n   Palo Alto, California 94301\n   United States of America\n\n   Email: michael.slusarz@open-xchange.com\n"
  },
  {
    "path": "rfc/rfc9051.txt",
    "content": "﻿\n\n\n\nInternet Engineering Task Force (IETF)                  A. Melnikov, Ed.\nRequest for Comments: 9051                                     Isode Ltd\nObsoletes: 3501                                            B. Leiba, Ed.\nCategory: Standards Track                         Futurewei Technologies\nISSN: 2070-1721                                              August 2021\n\n\n        Internet Message Access Protocol (IMAP) - Version 4rev2\n\nAbstract\n\n   The Internet Message Access Protocol Version 4rev2 (IMAP4rev2) allows\n   a client to access and manipulate electronic mail messages on a\n   server.  IMAP4rev2 permits manipulation of mailboxes (remote message\n   folders) in a way that is functionally equivalent to local folders.\n   IMAP4rev2 also provides the capability for an offline client to\n   resynchronize with the server.\n\n   IMAP4rev2 includes operations for creating, deleting, and renaming\n   mailboxes; checking for new messages; removing messages permanently;\n   setting and clearing flags; parsing per RFCs 5322, 2045, and 2231;\n   searching; and selective fetching of message attributes, texts, and\n   portions thereof.  Messages in IMAP4rev2 are accessed by the use of\n   numbers.  These numbers are either message sequence numbers or unique\n   identifiers.\n\n   IMAP4rev2 does not specify a means of posting mail; this function is\n   handled by a mail submission protocol such as the one specified in\n   RFC 6409.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc9051.\n\nCopyright Notice\n\n   Copyright (c) 2021 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Simplified BSD License text as described in Section 4.e of\n   the Trust Legal Provisions and are provided without warranty as\n   described in the Simplified BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\nTable of Contents\n\n   1.  How to Read This Document\n     1.1.  Organization of This Document\n     1.2.  Conventions Used in This Document\n     1.3.  Special Notes to Implementors\n   2.  Protocol Overview\n     2.1.  Link Level\n     2.2.  Commands and Responses\n       2.2.1.  Client Protocol Sender and Server Protocol Receiver\n       2.2.2.  Server Protocol Sender and Client Protocol Receiver\n     2.3.  Message Attributes\n       2.3.1.  Message Numbers\n       2.3.2.  Flags Message Attribute\n       2.3.3.  Internal Date Message Attribute\n       2.3.4.  RFC822.SIZE Message Attribute\n       2.3.5.  Envelope Structure Message Attribute\n       2.3.6.  Body Structure Message Attribute\n     2.4.  Message Texts\n   3.  State and Flow Diagram\n     3.1.  Not Authenticated State\n     3.2.  Authenticated State\n     3.3.  Selected State\n     3.4.  Logout State\n   4.  Data Formats\n     4.1.  Atom\n       4.1.1.  Sequence Set and UID Set\n     4.2.  Number\n     4.3.  String\n       4.3.1.  8-Bit and Binary Strings\n     4.4.  Parenthesized List\n     4.5.  NIL\n   5.  Operational Considerations\n     5.1.  Mailbox Naming\n       5.1.1.  Mailbox Hierarchy Naming\n       5.1.2.  Namespaces\n     5.2.  Mailbox Size and Message Status Updates\n     5.3.  Response When No Command in Progress\n     5.4.  Autologout Timer\n     5.5.  Multiple Commands in Progress (Command Pipelining)\n   6.  Client Commands\n     6.1.  Client Commands - Any State\n       6.1.1.  CAPABILITY Command\n       6.1.2.  NOOP Command\n       6.1.3.  LOGOUT Command\n     6.2.  Client Commands - Not Authenticated State\n       6.2.1.  STARTTLS Command\n       6.2.2.  AUTHENTICATE Command\n       6.2.3.  LOGIN Command\n     6.3.  Client Commands - Authenticated State\n       6.3.1.  ENABLE Command\n       6.3.2.  SELECT Command\n       6.3.3.  EXAMINE Command\n       6.3.4.  CREATE Command\n       6.3.5.  DELETE Command\n       6.3.6.  RENAME Command\n       6.3.7.  SUBSCRIBE Command\n       6.3.8.  UNSUBSCRIBE Command\n       6.3.9.  LIST Command\n       6.3.10. NAMESPACE Command\n       6.3.11. STATUS Command\n       6.3.12. APPEND Command\n       6.3.13. IDLE Command\n     6.4.  Client Commands - Selected State\n       6.4.1.  CLOSE Command\n       6.4.2.  UNSELECT Command\n       6.4.3.  EXPUNGE Command\n       6.4.4.  SEARCH Command\n       6.4.5.  FETCH Command\n       6.4.6.  STORE Command\n       6.4.7.  COPY Command\n       6.4.8.  MOVE Command\n       6.4.9.  UID Command\n     6.5.  Client Commands - Experimental/Expansion\n   7.  Server Responses\n     7.1.  Server Responses - Generic Status Responses\n       7.1.1.  OK Response\n       7.1.2.  NO Response\n       7.1.3.  BAD Response\n       7.1.4.  PREAUTH Response\n       7.1.5.  BYE Response\n     7.2.  Server Responses - Server Status\n       7.2.1.  ENABLED Response\n       7.2.2.  CAPABILITY Response\n     7.3.  Server Responses - Mailbox Status\n       7.3.1.  LIST Response\n       7.3.2.  NAMESPACE Response\n       7.3.3.  STATUS Response\n       7.3.4.  ESEARCH Response\n       7.3.5.  FLAGS Response\n     7.4.  Server Responses - Mailbox Size\n       7.4.1.  EXISTS Response\n     7.5.  Server Responses - Message Status\n       7.5.1.  EXPUNGE Response\n       7.5.2.  FETCH Response\n     7.6.  Server Responses - Command Continuation Request\n   8.  Sample IMAP4rev2 Connection\n   9.  Formal Syntax\n   10. Author's Note\n   11. Security Considerations\n     11.1.  TLS-Related Security Considerations\n     11.2.  STARTTLS Command versus Use of Implicit TLS Port\n     11.3.  Client Handling of Unsolicited Responses Not Suitable for\n            the Current Connection State\n     11.4.  COPYUID and APPENDUID Response Codes\n     11.5.  LIST Command and Other Users' Namespace\n     11.6.  Use of MD5\n     11.7.  Other Security Considerations\n   12. IANA Considerations\n     12.1.  Updates to IMAP Capabilities Registry\n     12.2.  GSSAPI/SASL Service Name\n     12.3.  LIST Selection Options, LIST Return Options, and LIST\n            Extended Data Items\n     12.4.  IMAP Mailbox Name Attributes and IMAP Response Codes\n   13. References\n     13.1.  Normative References\n     13.2.  Informative References\n       13.2.1.  Related Protocols\n       13.2.2.  Historical Aspects of IMAP and Related Protocols\n   Appendix A.  Backward Compatibility with IMAP4rev1\n     A.1.  Mailbox International Naming Convention for Compatibility\n           with IMAP4rev1\n   Appendix B.  Backward Compatibility with BINARY Extension\n   Appendix C.  Backward Compatibility with LIST-EXTENDED Extension\n   Appendix D.  63-Bit Body Part and Message Sizes\n   Appendix E.  Changes from RFC 3501 / IMAP4rev1\n   Appendix F.  Other Recommended IMAP Extensions\n   Acknowledgements\n   Index\n   Authors' Addresses\n\n1.  How to Read This Document\n\n1.1.  Organization of This Document\n\n   This document is written from the point of view of the implementor of\n   an IMAP4rev2 client or server.  Beyond the protocol overview in\n   Section 2, it is not optimized for someone trying to understand the\n   operation of the protocol.  The material in Sections 3, 4, and 5\n   provides the general context and definitions with which IMAP4rev2\n   operates.\n\n   Sections 6, 7, and 9 describe the IMAP commands, responses, and\n   syntax, respectively.  The relationships among these are such that it\n   is almost impossible to understand any of them separately.  In\n   particular, do not attempt to deduce command syntax from the command\n   section alone; instead, refer to \"Formal Syntax\" (Section 9).\n\n1.2.  Conventions Used in This Document\n\n   \"Conventions\" are basic principles or procedures.  Document\n   conventions are noted in this section.\n\n   In examples, \"C:\" and \"S:\" indicate lines sent by the client and\n   server, respectively.  Note that each line includes the terminating\n   CRLF.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n   The word \"can\" (not \"may\") is used to refer to a possible\n   circumstance or situation, as opposed to an optional facility of the\n   protocol.\n\n   \"User\" is used to refer to a human user, whereas \"client\" refers to\n   the software being run by the user.\n\n   \"Connection\" refers to the entire sequence of client/server\n   interaction from the initial establishment of the network connection\n   until its termination.\n\n   \"Session\" refers to the sequence of client/server interaction from\n   the time that a mailbox is selected (SELECT or EXAMINE command) until\n   the time that selection ends (SELECT or EXAMINE of another mailbox,\n   CLOSE command, UNSELECT command, or connection termination).\n\n   The term \"Implicit TLS\" refers to the automatic negotiation of TLS\n   whenever a TCP connection is made on a particular TCP port that is\n   used exclusively by that server for TLS connections.  The term\n   \"Implicit TLS\" is intended to contrast with the use of the STARTTLS\n   command in IMAP that is used by the client and the server to\n   explicitly negotiate TLS on an established cleartext TCP connection.\n\n   Characters are 8-bit UTF-8 (of which 7-bit US-ASCII is a subset),\n   unless otherwise specified.  Other character sets are indicated using\n   a \"CHARSET\", as described in [MIME-IMT] and defined in [CHARSET].\n   CHARSETs have important additional semantics in addition to defining\n   a character set; refer to these documents for more detail.\n\n   There are several protocol conventions in IMAP.  These refer to\n   aspects of the specification that are not strictly part of the IMAP\n   protocol but reflect generally accepted practice.  Implementations\n   need to be aware of these conventions, and avoid conflicts whether or\n   not they implement the convention.  For example, \"&\" may not be used\n   as a hierarchy delimiter since it conflicts with the Mailbox\n   International Naming Convention, and other uses of \"&\" in mailbox\n   names are impacted as well.\n\n1.3.  Special Notes to Implementors\n\n   Implementors of the IMAP protocol are strongly encouraged to read the\n   IMAP implementation recommendations document [IMAP-IMPLEMENTATION] in\n   conjunction with this document, to help understand the intricacies of\n   this protocol and how best to build an interoperable product.\n\n   IMAP4rev2 is designed to be upwards compatible from the IMAP4rev1\n   [RFC3501], IMAP2 [IMAP2], and unpublished IMAP2bis [IMAP2BIS]\n   protocols.  IMAP4rev2 is largely compatible with the IMAP4rev1\n   protocol described in RFC 3501 and the IMAP4 protocol described in\n   [RFC1730]; the exception being in certain facilities added in\n   [RFC1730] and [RFC3501] that proved problematic and were subsequently\n   removed or replaced by better alternatives.  In the course of the\n   evolution of IMAP4rev2, some aspects in the earlier protocols have\n   become obsolete.  Obsolete commands, responses, and data formats that\n   an IMAP4rev2 implementation can encounter when used with an earlier\n   implementation are described in Appendices A and E and\n   [IMAP-OBSOLETE].  IMAP4rev2 supports 63-bit body parts and message\n   sizes.  IMAP4rev2 compatibility with BINARY and LIST-EXTENDED IMAP\n   extensions are described in Appendices B and C, respectively.\n\n   Other compatibility issues with IMAP2bis, the most common variant of\n   the earlier protocol, are discussed in [IMAP-COMPAT].  A full\n   discussion of compatibility issues with rare (and presumed extinct)\n   variants of [IMAP2] is in [IMAP-HISTORICAL]; this document is\n   primarily of historical interest.\n\n   IMAP was originally developed for the older [RFC822] standard, and as\n   a consequence, the \"RFC822.SIZE\" fetch item in IMAP incorporates\n   \"RFC822\" in its name.  \"RFC822\" should be interpreted as a reference\n   to the updated [RFC5322] standard.\n\n   IMAP4rev2 does not specify a means of posting mail; this function is\n   handled by a mail submission protocol such as the one specified in\n   [RFC6409].\n\n2.  Protocol Overview\n\n2.1.  Link Level\n\n   The IMAP4rev2 protocol assumes a reliable data stream such as that\n   provided by TCP.  When TCP is used, an IMAP4rev2 server listens on\n   port 143 (cleartext port) or port 993 (Implicit TLS port).\n\n2.2.  Commands and Responses\n\n   An IMAP4rev2 connection consists of the establishment of a client/\n   server network connection, an initial greeting from the server, and\n   client/server interactions.  These client/server interactions consist\n   of a client command, server data, and a server completion result\n   response.\n\n   All interactions transmitted by client and server are in the form of\n   lines, that is, strings that end with a CRLF.  The protocol receiver\n   of an IMAP4rev2 client or server is reading either a line or a\n   sequence of octets with a known count followed by a line.\n\n2.2.1.  Client Protocol Sender and Server Protocol Receiver\n\n   The client command begins an operation.  Each client command is\n   prefixed with an identifier (typically a short alphanumeric string,\n   e.g., A0001, A0002, etc.) called a \"tag\".  A different tag is\n   generated by the client for each command.  More formally: the client\n   SHOULD generate a unique tag for every command, but a server MUST\n   accept tag reuse.\n\n   Clients MUST follow the syntax outlined in this specification\n   strictly.  It is a syntax error to send a command with missing or\n   extraneous spaces or arguments.\n\n   There are two cases in which a line from the client does not\n   represent a complete command.  In one case, a command argument is\n   quoted with an octet count (see the description of literal in\n   Section 4.3); in the other case, the command arguments require server\n   feedback (see the AUTHENTICATE command in Section 6.2.2).  In either\n   case, the server sends a command continuation request response if it\n   is ready for the octets (if appropriate) and the remainder of the\n   command.  This response is prefixed with the token \"+\".\n\n      Note: If, instead, the server detected an error in the command, it\n      sends a BAD completion response with a tag matching the command\n      (as described below) to reject the command and prevent the client\n      from sending any more of the command.\n\n      It is also possible for the server to send a completion response\n      for some other command (if multiple commands are in progress) or\n      untagged data.  In either case, the command continuation request\n      is still pending; the client takes the appropriate action for the\n      response and reads another response from the server.  In all\n      cases, the client MUST send a complete command (including\n      receiving all command continuation request responses and sending\n      command continuations for the command) before initiating a new\n      command.\n\n   The protocol receiver of an IMAP4rev2 server reads a command line\n   from the client, parses the command and its arguments, and transmits\n   server data and a server command completion result response.\n\n2.2.2.  Server Protocol Sender and Client Protocol Receiver\n\n   Data transmitted by the server to the client and status responses\n   that do not indicate command completion are prefixed with the token\n   \"*\" and are called untagged responses.\n\n   Server data MAY be sent as a result of a client command or MAY be\n   sent unilaterally by the server.  There is no syntactic difference\n   between server data that resulted from a specific command and server\n   data that were sent unilaterally.\n\n   The server completion result response indicates the success or\n   failure of the operation.  It is tagged with the same tag as the\n   client command that began the operation.  Thus, if more than one\n   command is in progress, the tag in a server completion response\n   identifies the command to which the response applies.  There are\n   three possible server completion responses: OK (indicating success),\n   NO (indicating failure), or BAD (indicating a protocol error such as\n   unrecognized command or command syntax error).\n\n   Servers SHOULD strictly enforce the syntax outlined in this\n   specification.  Any client command with a protocol syntax error,\n   including (but not limited to) missing or extraneous spaces or\n   arguments, SHOULD be rejected and the client given a BAD server\n   completion response.\n\n   The protocol receiver of an IMAP4rev2 client reads a response line\n   from the server.  It then takes action on the response based upon the\n   first token of the response, which can be a tag, a \"*\", or a \"+\".\n\n   A client MUST be prepared to accept any server response at all times.\n   This includes server data that was not requested.  Server data SHOULD\n   be remembered (cached), so that the client can reference its\n   remembered copy rather than sending a command to the server to\n   request the data.  In the case of certain server data, the data MUST\n   be remembered, as specified elsewhere in this document.\n\n   This topic is discussed in greater detail in \"Server Responses\" (see\n   Section 7).\n\n2.3.  Message Attributes\n\n   In addition to message text, each message has several attributes\n   associated with it.  These attributes can be retrieved individually\n   or in conjunction with other attributes or message texts.\n\n2.3.1.  Message Numbers\n\n   Messages in IMAP4rev2 are accessed by one of two numbers: the Unique\n   Identifier (UID) or the message sequence number.\n\n2.3.1.1.  Unique Identifier (UID) Message Attribute\n\n   A UID is an unsigned non-zero 32-bit value assigned to each message,\n   which when used with the unique identifier validity value (see below)\n   forms a 64-bit value that MUST NOT refer to any other message in the\n   mailbox or any subsequent mailbox with the same name forever.  Unique\n   identifiers are assigned in a strictly ascending fashion in the\n   mailbox; as each message is added to the mailbox, it is assigned a\n   higher UID than those of all message(s) that are already in the\n   mailbox.  Unlike message sequence numbers, unique identifiers are not\n   necessarily contiguous.\n\n   The unique identifier of a message MUST NOT change during the session\n   and SHOULD NOT change between sessions.  Any change of unique\n   identifiers between sessions MUST be detectable using the UIDVALIDITY\n   mechanism discussed below.  Persistent unique identifiers are\n   required for a client to resynchronize its state from a previous\n   session with the server (e.g., disconnected or offline access clients\n   [IMAP-MODEL]); this is discussed further in [IMAP-DISC].\n\n   Associated with every mailbox are two 32-bit unsigned non-zero values\n   that aid in unique identifier handling: the next unique identifier\n   value (UIDNEXT) and the unique identifier validity value\n   (UIDVALIDITY).\n\n   The next unique identifier value is the predicted value that will be\n   assigned to a new message in the mailbox.  Unless the unique\n   identifier validity also changes (see below), the next unique\n   identifier value MUST have the following two characteristics.  First,\n   the next unique identifier value MUST NOT change unless new messages\n   are added to the mailbox; and second, the next unique identifier\n   value MUST change whenever new messages are added to the mailbox,\n   even if those new messages are subsequently expunged.\n\n      |  Note: The next unique identifier value is intended to provide a\n      |  means for a client to determine whether any messages have been\n      |  delivered to the mailbox since the previous time it checked\n      |  this value.  It is not intended to provide any guarantee that\n      |  any message will have this unique identifier.  A client can\n      |  only assume, at the time that it obtains the next unique\n      |  identifier value, that messages arriving after that time will\n      |  have a UID greater than or equal to that value.\n\n   The unique identifier validity value is sent in a UIDVALIDITY\n   response code in an OK untagged response at mailbox selection time.\n   If unique identifiers from an earlier session fail to persist in this\n   session, the unique identifier validity value MUST be greater than\n   the one used in the earlier session.  A good UIDVALIDITY value to use\n   is a 32-bit representation of the current date/time when the value is\n   assigned: this ensures that the value is unique and always increases.\n   Another possible alternative is a global counter that gets\n   incremented every time a mailbox is created.\n\n      Note: Ideally, unique identifiers SHOULD persist at all times.\n      Although this specification recognizes that failure to persist can\n      be unavoidable in certain server environments, it strongly\n      encourages message store implementation techniques that avoid this\n      problem.  For example:\n\n   1.  Unique identifiers MUST be strictly ascending in the mailbox at\n       all times.  If the physical message store is reordered by a non-\n       IMAP agent, the unique identifiers in the mailbox MUST be\n       regenerated, since the former unique identifiers are no longer\n       strictly ascending as a result of the reordering.\n\n   2.  If the message store has no mechanism to store unique\n       identifiers, it must regenerate unique identifiers at each\n       session, and each session must have a unique UIDVALIDITY value.\n       Note that this situation can be very disruptive to client message\n       caching.\n\n   3.  If the mailbox is deleted/renamed and a new mailbox with the same\n       name is created at a later date, the server must either keep\n       track of unique identifiers from the previous instance of the\n       mailbox or assign a new UIDVALIDITY value to the new instance of\n       the mailbox.\n\n   4.  The combination of mailbox name, UIDVALIDITY, and UID must refer\n       to a single, immutable (or expunged) message on that server\n       forever.  In particular, the internal date, RFC822.SIZE,\n       envelope, body structure, and message texts (all BODY[...] fetch\n       data items) MUST never change.  This does not include message\n       numbers, nor does it include attributes that can be set by a\n       STORE command (such as FLAGS).  When a message is expunged, its\n       UID MUST NOT be reused under the same UIDVALIDITY value.\n\n2.3.1.2.  Message Sequence Number Message Attribute\n\n   A message sequence number is a relative position from 1 to the number\n   of messages in the mailbox.  This position MUST be ordered by\n   ascending unique identifiers.  As each new message is added, it is\n   assigned a message sequence number that is 1 higher than the number\n   of messages in the mailbox before that new message was added.\n\n   Message sequence numbers can be reassigned during the session.  For\n   example, when a message is permanently removed (expunged) from the\n   mailbox, the message sequence number for all subsequent messages is\n   decremented.  The number of messages in the mailbox is also\n   decremented.  Similarly, a new message can be assigned a message\n   sequence number that was once held by some other message prior to an\n   expunge.\n\n   In addition to accessing messages by relative position in the\n   mailbox, message sequence numbers can be used in mathematical\n   calculations.  For example, if an untagged \"11 EXISTS\" is received,\n   and previously an untagged \"8 EXISTS\" was received, three new\n   messages have arrived with message sequence numbers of 9, 10, and 11.\n   As another example, if message 287 in a 523-message mailbox has UID\n   12345, there are exactly 286 messages that have lesser UIDs and 236\n   messages that have greater UIDs.\n\n2.3.2.  Flags Message Attribute\n\n   A message has a list of zero or more named tokens, known as \"flags\",\n   associated with it.  A flag is set by its addition to this list and\n   is cleared by its removal.  There are two types of flags in\n   IMAP4rev2: system flags and keywords.  A flag of either type can be\n   permanent or session-only.\n\n   A system flag is a flag name that is predefined in this specification\n   and begins with \"\\\".  Certain system flags (\\Deleted and \\Seen) have\n   special semantics described elsewhere in this document.  The\n   currently defined system flags are:\n\n   \\Seen         Message has been read\n\n   \\Answered     Message has been answered\n\n   \\Flagged      Message is \"flagged\" for urgent/special attention\n\n   \\Deleted      Message is \"deleted\" for removal by later EXPUNGE\n\n   \\Draft        Message has not completed composition (marked as a\n                 draft).\n\n   \\Recent       This flag was in use in IMAP4rev1 and is now\n                 deprecated.\n\n   A keyword is defined by the server implementation.  Keywords do not\n   begin with \"\\\".  Servers MAY permit the client to define new keywords\n   in the mailbox (see the description of the PERMANENTFLAGS response\n   code for more information).  Some keywords that start with \"$\" are\n   also defined in this specification.\n\n   This document defines several keywords that were not originally\n   defined in [RFC3501] but were found to be useful by client\n   implementations.  These keywords SHOULD be supported (allowed in\n   SEARCH and allowed and preserved in APPEND, COPY, and MOVE commands)\n   by server implementations:\n\n   $Forwarded\n      Message has been forwarded to another email address by being\n      embedded within, or attached to a new message.  An email client\n      sets this keyword when it successfully forwards the message to\n      another email address.  Typical usage of this keyword is to show a\n      different (or additional) icon for a message that has been\n      forwarded.  Once set, the flag SHOULD NOT be cleared.\n\n   $MDNSent\n      Message Disposition Notification [RFC8098] was generated and sent\n      for this message.  See [RFC3503] for more details on how this\n      keyword is used and for requirements on clients and servers.\n\n   $Junk\n      The user (or a delivery agent on behalf of the user) may choose to\n      mark a message as definitely containing junk ($Junk; see also the\n      related keyword $NotJunk).  The $Junk keyword can be used to mark,\n      group, or hide undesirable messages (and such messages might be\n      moved or deleted later).  See [IMAP-KEYWORDS-REG] for more\n      information.\n\n   $NotJunk\n      The user (or a delivery agent on behalf of the user) may choose to\n      mark a message as definitely not containing junk ($NotJunk; see\n      also the related keyword $Junk).  The $NotJunk keyword can be used\n      to mark, group, or show messages that the user wants to see.  See\n      [IMAP-KEYWORDS-REG] for more information.\n\n   $Phishing\n      The $Phishing keyword can be used by a delivery agent to mark a\n      message as highly likely to be a phishing email.  A message that's\n      determined to be a phishing email by the delivery agent should\n      also be considered a junk email and have the appropriate junk\n      filtering applied, including setting the $Junk flag and placing\n      the message in the \\Junk special-use mailbox (see Section 7.3.1),\n      if available.\n\n      If both the $Phishing flag and the $Junk flag are set, the user\n      agent should display an additional warning message to the user.\n      Additionally, the user agent might display a warning, such as\n      something of the form, \"This message may be trying to steal your\n      personal information,\" when the user clicks on any hyperlinks\n      within the message.\n\n      The requirement for both $Phishing and $Junk to be set before a\n      user agent displays a warning is for better backwards\n      compatibility with existing clients that understand the $Junk flag\n      but not the $Phishing flag.  This is so that when an unextended\n      client removes the $Junk flag, an extended client will also show\n      the correct state.  See [IMAP-KEYWORDS-REG] for more information.\n\n   $Junk and $NotJunk are mutually exclusive.  If more than one of these\n   is set for a message, the client MUST treat it as if none are set,\n   and it SHOULD unset both of them on the IMAP server.\n\n   Other registered keywords can be found in the \"IMAP and JMAP\n   Keywords\" registry [IMAP-KEYWORDS-REG].  New keywords SHOULD be\n   registered in this registry using the procedure specified in\n   [RFC5788].\n\n   A flag can be permanent or session-only on a per-flag basis.\n   Permanent flags are those that the client can add or remove from the\n   message flags permanently; that is, concurrent and subsequent\n   sessions will see any change in permanent flags.  Changes to session\n   flags are valid only in that session.\n\n2.3.3.  Internal Date Message Attribute\n\n   An Internal Date message attribute is the internal date and time of\n   the message on the server.  This is not the date and time in the\n   [RFC5322] header but rather a date and time that reflects when the\n   message was received.  In the case of messages delivered via [SMTP],\n   this is the date and time of final delivery of the message as defined\n   by [SMTP].  In the case of messages created by the IMAP4rev2 COPY or\n   MOVE command, this SHOULD be the same as the Internal Date attribute\n   of the source message.  In the case of messages created by the\n   IMAP4rev2 APPEND command, this SHOULD be the date and time as\n   specified in the APPEND command description.  All other cases are\n   implementation defined.\n\n2.3.4.  RFC822.SIZE Message Attribute\n\n   RFC822.SIZE is the number of octets in the message when the message\n   is expressed in [RFC5322] format.  This size SHOULD match the result\n   of a \"FETCH BODY[]\" command.  If the message is internally stored in\n   some other format, the server calculates the size and often stores it\n   for later use to avoid the need for recalculation.\n\n2.3.5.  Envelope Structure Message Attribute\n\n   An envelope structure is a parsed representation of the [RFC5322]\n   header of the message.  Note that the IMAP envelope structure is not\n   the same as an [SMTP] envelope.\n\n2.3.6.  Body Structure Message Attribute\n\n   A body structure is a parsed representation of the [MIME-IMB] body\n   structure information of the message.\n\n2.4.  Message Texts\n\n   In addition to being able to fetch the full [RFC5322] text of a\n   message, IMAP4rev2 permits the fetching of portions of the full\n   message text.  Specifically, it is possible to fetch the [RFC5322]\n   message header, the [RFC5322] message body, a [MIME-IMB] body part,\n   or a [MIME-IMB] header.\n\n3.  State and Flow Diagram\n\n   Once the connection between client and server is established, an\n   IMAP4rev2 connection is in one of four states.  The initial state is\n   identified in the server greeting.  Most commands are only valid in\n   certain states.  It is a protocol error for the client to attempt a\n   command while the connection is in an inappropriate state, and the\n   server will respond with a BAD or NO (depending upon server\n   implementation) command completion result.\n\n3.1.  Not Authenticated State\n\n   In the not authenticated state, the client MUST supply authentication\n   credentials before most commands will be permitted.  This state is\n   entered when a connection starts unless the connection has been pre-\n   authenticated.\n\n3.2.  Authenticated State\n\n   In the authenticated state, the client is authenticated and MUST\n   select a mailbox to access before commands that affect messages will\n   be permitted.  This state is entered when a pre-authenticated\n   connection starts, when acceptable authentication credentials have\n   been provided, after an error in selecting a mailbox, or after a\n   successful CLOSE or UNSELECT command.\n\n3.3.  Selected State\n\n   In a selected state, a mailbox has been selected to access.  This\n   state is entered when a mailbox has been successfully selected.\n\n3.4.  Logout State\n\n   In the logout state, the connection is being terminated.  This state\n   can be entered as a result of a client request (via the LOGOUT\n   command) or by unilateral action on the part of either the client or\n   the server.\n\n   If the client requests the logout state, the server MUST send an\n   untagged BYE response and a tagged OK response to the LOGOUT command\n   before the server closes the connection; and the client MUST read the\n   tagged OK response to the LOGOUT command before the client closes the\n   connection.\n\n   A server SHOULD NOT unilaterally close the connection without first\n   sending an untagged BYE response that contains the reason for doing\n   so.  A client SHOULD NOT unilaterally close the connection; instead,\n   it SHOULD issue a LOGOUT command.  If the server detects that the\n   client has unilaterally closed the connection, the server MAY omit\n   the untagged BYE response and simply close its connection.\n\n                      +----------------------+\n                      |connection established|\n                      +----------------------+\n                                 ||\n                                 \\/\n               +--------------------------------------+\n               |          server greeting             |\n               +--------------------------------------+\n                         || (1)       || (2)        || (3)\n                         \\/           ||            ||\n               +-----------------+    ||            ||\n               |Not Authenticated|    ||            ||\n               +-----------------+    ||            ||\n                || (7)   || (4)       ||            ||\n                ||       \\/           \\/            ||\n                ||     +----------------+           ||\n                ||     | Authenticated  |<=++       ||\n                ||     +----------------+  ||       ||\n                ||       || (7)   || (5)   || (6)   ||\n                ||       ||       \\/       ||       ||\n                ||       ||    +--------+  ||       ||\n                ||       ||    |Selected|==++       ||\n                ||       ||    +--------+           ||\n                ||       ||       || (7)            ||\n                \\/       \\/       \\/                \\/\n               +--------------------------------------+\n               |               Logout                 |\n               +--------------------------------------+\n                                 ||\n                                 \\/\n                   +-------------------------------+\n                   |both sides close the connection|\n                   +-------------------------------+\n\n   Legend for the above diagram:\n\n   (1)  connection without pre-authentication (OK greeting)\n   (2)  pre-authenticated connection (PREAUTH greeting)\n   (3)  rejected connection (BYE greeting)\n   (4)  successful LOGIN or AUTHENTICATE command\n   (5)  successful SELECT or EXAMINE command\n   (6)  CLOSE or UNSELECT command, unsolicited CLOSED response code, or\n        failed SELECT or EXAMINE command\n   (7)  LOGOUT command, server shutdown, or connection closed\n\n4.  Data Formats\n\n   IMAP4rev2 uses textual commands and responses.  Data in IMAP4rev2 can\n   be in one of several forms: atom, number, string, parenthesized list,\n   or NIL.  Note that a particular data item may take more than one\n   form; for example, a data item defined as using \"astring\" syntax may\n   be either an atom or a string.\n\n4.1.  Atom\n\n   An atom consists of one or more non-special characters.\n\n4.1.1.  Sequence Set and UID Set\n\n   A set of messages can be referenced by a sequence set containing\n   either message sequence numbers or unique identifiers.  See Section 9\n   for details.  A sequence set can contain ranges of sequence numbers\n   (such as \"5:50\"), an enumeration of specific sequence numbers, or a\n   combination of the above.  A sequence set can use the special symbol\n   \"*\" to represent the maximum sequence number in the mailbox.  A\n   sequence set never contains unique identifiers.\n\n   A \"UID set\" is similar to the sequence set, but uses unique\n   identifiers instead of message sequence numbers, and is not permitted\n   to contain the special symbol \"*\".\n\n4.2.  Number\n\n   A number consists of one or more digit characters and represents a\n   numeric value.\n\n4.3.  String\n\n   A string is in one of three forms: synchronizing literal, non-\n   synchronizing literal, or quoted string.  The synchronizing literal\n   form is the general form of a string, without limitation on the\n   characters the string may include.  The non-synchronizing literal\n   form is also the general form, but it has a length restriction.  The\n   quoted string form is an alternative that avoids the overhead of\n   processing a literal, but has limitations on the characters that may\n   be used.\n\n   When the distinction between synchronizing and non-synchronizing\n   literals is not important, this document only uses the term\n   \"literal\".\n\n   A synchronizing literal is a sequence of zero or more octets\n   (including CR and LF), prefix-quoted with an octet count in the form\n   of an open brace (\"{\"), the number of octets, a close brace (\"}\"),\n   and a CRLF.  In the case of synchronizing literals transmitted from\n   server to client, the CRLF is immediately followed by the octet data.\n   In the case of synchronizing literals transmitted from client to\n   server, the client MUST wait to receive a command continuation\n   request (described later in this document) before sending the octet\n   data (and the remainder of the command).\n\n   The non-synchronizing literal is an alternative form of synchronizing\n   literal and may be used from client to server anywhere a\n   synchronizing literal is permitted.  The non-synchronizing literal\n   form MUST NOT be sent from server to client.  The non-synchronizing\n   literal is distinguished from the synchronizing literal by having a\n   plus (\"+\") between the octet count and the closing brace (\"}\").  The\n   server does not generate a command continuation request in response\n   to a non-synchronizing literal, and clients are not required to wait\n   before sending the octets of a non-synchronizing literal.  Unless\n   otherwise specified in an IMAP extension, non-synchronizing literals\n   MUST NOT be larger than 4096 octets.  Any literal larger than 4096\n   bytes MUST be sent as a synchronizing literal.  (Non-synchronizing\n   literals defined in this document are the same as non-synchronizing\n   literals defined by the LITERAL- extension from [RFC7888].  See that\n   document for details on how to handle invalid non-synchronizing\n   literals longer than 4096 octets and for interaction with other IMAP\n   extensions.)\n\n   A quoted string is a sequence of zero or more Unicode characters,\n   excluding CR and LF, encoded in UTF-8, with double quote (<\">)\n   characters at each end.\n\n   The empty string is represented as \"\" (a quoted string with zero\n   characters between double quotes), as {0} followed by a CRLF (a\n   synchronizing literal with an octet count of 0), or as {0+} followed\n   by a CRLF (a non-synchronizing literal with an octet count of 0).\n\n      Note: Even if the octet count is 0, a client transmitting a\n      synchronizing literal MUST wait to receive a command continuation\n      request.\n\n4.3.1.  8-Bit and Binary Strings\n\n   8-bit textual and binary mail is supported through the use of a\n   [MIME-IMB] content transfer encoding.  IMAP4rev2 implementations MAY\n   transmit 8-bit or multi-octet characters in literals but SHOULD do so\n   only when the [CHARSET] is identified.\n\n   IMAP4rev2 is compatible with [I18N-HDRS].  As a result, the\n   identified charset for header-field values with 8-bit content is\n   UTF-8 [UTF-8].  IMAP4rev2 implementations MUST accept and MAY\n   transmit [UTF-8] text in quoted-strings as long as the string does\n   not contain NUL, CR, or LF.  This differs from IMAP4rev1\n   implementations.\n\n   Although a BINARY content transfer encoding is defined, unencoded\n   binary strings are not permitted, unless returned in a <literal8> in\n   response to a BINARY.PEEK[<section-binary>]<<partial>> or\n   BINARY[<section-binary>]<<partial>> FETCH data item.  A \"binary\n   string\" is any string with NUL characters.  A string with an\n   excessive amount of CTL characters MAY also be considered to be\n   binary.  Unless returned in response to BINARY.PEEK[...]/BINARY[...]\n   FETCH, client and server implementations MUST encode binary data into\n   a textual form, such as base64, before transmitting the data.\n\n4.4.  Parenthesized List\n\n   Data structures are represented as a \"parenthesized list\"; a sequence\n   of data items, delimited by space, and bounded at each end by\n   parentheses.  A parenthesized list can contain other parenthesized\n   lists, using multiple levels of parentheses to indicate nesting.\n\n   The empty list is represented as () -- a parenthesized list with no\n   members.\n\n4.5.  NIL\n\n   The special form \"NIL\" represents the non-existence of a particular\n   data item that is represented as a string or parenthesized list, as\n   distinct from the empty string \"\" or the empty parenthesized list ().\n\n      |  Note: NIL is never used for any data item that takes the form\n      |  of an atom.  For example, a mailbox name of \"NIL\" is a mailbox\n      |  named NIL as opposed to a non-existent mailbox name.  This is\n      |  because mailbox uses \"astring\" syntax, which is an atom or a\n      |  string.  Conversely, an addr-name of NIL is a non-existent\n      |  personal name, because addr-name uses \"nstring\" syntax, which\n      |  is NIL or a string, but never an atom.\n\n   Examples:\n\n   The following LIST response:\n\n     * LIST () \"/\" NIL\n\n   is equivalent to:\n\n     * LIST () \"/\" \"NIL\"\n\n   as LIST response ABNF is using \"astring\" for mailbox name.\n\n   However, the following response:\n\n     * FETCH 1 (BODY[1] NIL)\n\n   is not equivalent to:\n\n     * FETCH 1 (BODY[1] \"NIL\")\n\n   The former indicates absence of the body part, while the latter means\n   that it contains a string with the three characters \"NIL\".\n\n5.  Operational Considerations\n\n   The following rules are listed here to ensure that all IMAP4rev2\n   implementations interoperate properly.\n\n5.1.  Mailbox Naming\n\n   In IMAP4rev2, mailbox names are encoded in Net-Unicode [NET-UNICODE]\n   (this differs from IMAP4rev1).  Client implementations MAY attempt to\n   create Net-Unicode mailbox names and MUST interpret any 8-bit mailbox\n   names returned by LIST as [NET-UNICODE].  Server implementations MUST\n   prohibit the creation of 8-bit mailbox names that do not comply with\n   Net-Unicode.  However, servers MAY accept a denormalized UTF-8\n   mailbox name and convert it to Unicode Normalization Form C (NFC) (as\n   per Net-Unicode requirements) prior to mailbox creation.  Servers\n   that choose to accept such denormalized UTF-8 mailbox names MUST\n   accept them in all IMAP commands that have a mailbox name parameter.\n   In particular, SELECT <name> must open the same mailbox that was\n   successfully created with CREATE <name>, even if <name> is a\n   denormalized UTF-8 mailbox name.\n\n   The case-insensitive mailbox name INBOX is a special name reserved to\n   mean \"the primary mailbox for this user on this server\".  (Note that\n   this special name might not exist on some servers for some users, for\n   example, if the user has no access to personal namespace.)  The\n   interpretation of all other names is implementation dependent.\n\n   In particular, this specification takes no position on case\n   sensitivity in non-INBOX mailbox names.  Some server implementations\n   are fully case sensitive in ASCII range; others preserve the case of\n   a newly created name but otherwise are case insensitive; and yet\n   others coerce names to a particular case.  Client implementations\n   must be able to interact with any of these.\n\n   There are certain client considerations when creating a new mailbox\n   name:\n\n   1.  Any character that is one of the atom-specials (see \"Formal\n       Syntax\" in Section 9) will require that the mailbox name be\n       represented as a quoted string or literal.\n\n   2.  CTL and other non-graphic characters are difficult to represent\n       in a user interface and are best avoided.  Servers MAY refuse to\n       create mailbox names containing Unicode CTL characters.\n\n   3.  Although the list-wildcard characters (\"%\" and \"*\") are valid in\n       a mailbox name, it is difficult to use such mailbox names with\n       the LIST command due to the conflict with wildcard\n       interpretation.\n\n   4.  Usually, a character (determined by the server implementation) is\n       reserved to delimit levels of hierarchy.\n\n   5.  Two characters, \"#\" and \"&\", have meanings by convention and\n       should be avoided except when used in that convention.  See\n       Section 5.1.2.1 and Appendix A.1, respectively.\n\n5.1.1.  Mailbox Hierarchy Naming\n\n   If it is desired to export hierarchical mailbox names, mailbox names\n   MUST be left-to-right hierarchical, using a single ASCII character to\n   separate levels of hierarchy.  The same hierarchy separator character\n   is used for all levels of hierarchy within a single name.\n\n5.1.2.  Namespaces\n\n   Personal Namespace:\n      A namespace that the server considers within the personal scope of\n      the authenticated user on a particular connection.  Typically,\n      only the authenticated user has access to mailboxes in their\n      Personal Namespace.  It is the part of the namespace that belongs\n      to the user and is allocated for mailboxes.  If an INBOX exists\n      for a user, it MUST appear within the user's Personal Namespace.\n      In the typical case, there SHOULD be only one Personal Namespace\n      per user on a server.\n\n   Other Users' Namespace:\n      A namespace that consists of mailboxes from the Personal\n      Namespaces of other users.  To access mailboxes in the Other\n      Users' Namespace, the currently authenticated user MUST be\n      explicitly granted access rights.  For example, it is common for a\n      manager to grant to their administrative support staff access\n      rights to their mailbox.  In the typical case, there SHOULD be\n      only one Other Users' Namespace per user on a server.\n\n   Shared Namespace:\n      A namespace that consists of mailboxes that are intended to be\n      shared amongst users and do not exist within a user's Personal\n      Namespace.\n\n   The namespaces a server uses MAY differ on a per-user basis.\n\n5.1.2.1.  Historic Mailbox Namespace Naming Convention\n\n   By convention, the first hierarchical element of any mailbox name\n   that begins with \"#\" identifies the \"namespace\" of the remainder of\n   the name.  This makes it possible to disambiguate between different\n   types of mailbox stores, each of which have their own namespaces.\n\n      For example, implementations that offer access to USENET\n      newsgroups MAY use the \"#news\" namespace to partition the USENET\n      newsgroup namespace from that of other mailboxes.  Thus, the\n      comp.mail.misc newsgroup would have a mailbox name of\n      \"#news.comp.mail.misc\", and the name \"comp.mail.misc\" can refer to\n      a different object (e.g., a user's private mailbox).\n\n   Namespaces that include the \"#\" character are not IMAP URL [IMAP-URL]\n   friendly and require the \"#\" character to be represented as %23 when\n   within URLs.  As such, server implementors MAY instead consider using\n   namespace prefixes that do not contain the \"#\" character.\n\n5.1.2.2.  Common Namespace Models\n\n   The previous version of this protocol did not define a default server\n   namespace.  Two common namespace models have evolved:\n\n   The \"Personal Mailbox\" model, in which the default namespace that is\n   presented consists of only the user's personal mailboxes.  To access\n   shared mailboxes, the user must use an escape mechanism to reach\n   another namespace.\n\n   The \"Complete Hierarchy\" model, in which the default namespace that\n   is presented includes the user's personal mailboxes along with any\n   other mailboxes they have access to.\n\n5.2.  Mailbox Size and Message Status Updates\n\n   At any time, a server can send data that the client did not request.\n   Sometimes, such behavior is required by this specification and/or\n   extensions.  For example, agents other than the server may add\n   messages to the mailbox (e.g., new message delivery); change the\n   flags of the messages in the mailbox (e.g., simultaneous access to\n   the same mailbox by multiple agents); or even remove messages from\n   the mailbox.  A server MUST send mailbox size updates automatically\n   if a mailbox size change is observed during the processing of a\n   command.  A server SHOULD send message flag updates automatically,\n   without requiring the client to request such updates explicitly.\n\n   Special rules exist for server notification of a client about the\n   removal of messages to prevent synchronization errors; see the\n   description of the EXPUNGE response (Section 7.5.1) for more detail.\n   In particular, it is NOT permitted to send an EXISTS response that\n   would reduce the number of messages in the mailbox; only the EXPUNGE\n   response can do this.\n\n   Regardless of what implementation decisions a client makes on\n   remembering data from the server, a client implementation MUST\n   remember mailbox size updates.  It MUST NOT assume that any command\n   after the initial mailbox selection will return the size of the\n   mailbox.\n\n5.3.  Response When No Command in Progress\n\n   Server implementations are permitted to send an untagged response\n   (except for EXPUNGE) while there is no command in progress.  Server\n   implementations that send such responses MUST deal with flow control\n   considerations.  Specifically, they MUST either (1) verify that the\n   size of the data does not exceed the underlying transport's available\n   window size or (2) use non-blocking writes.\n\n5.4.  Autologout Timer\n\n   If a server has an inactivity autologout timer that applies to\n   sessions after authentication, the duration of that timer MUST be at\n   least 30 minutes.  The receipt of any command from the client during\n   that interval resets the autologout timer.\n\n   Note that this specification doesn't have any restrictions on an\n   autologout timer used before successful client authentication.  In\n   particular, servers are allowed to use a shortened pre-authentication\n   timer to protect themselves from Denial-of-Service attacks.\n\n5.5.  Multiple Commands in Progress (Command Pipelining)\n\n   The client MAY send another command without waiting for the\n   completion result response of a command, subject to ambiguity rules\n   (see below) and flow control constraints on the underlying data\n   stream.  Similarly, a server MAY begin processing another command\n   before processing the current command to completion, subject to\n   ambiguity rules.  However, any command continuation request responses\n   and command continuations MUST be negotiated before any subsequent\n   command is initiated.\n\n   The exception is if an ambiguity would result because of a command\n   that would affect the results of other commands.  If the server\n   detects a possible ambiguity, it MUST execute commands to completion\n   in the order given by the client.\n\n   The most obvious example of ambiguity is when a command would affect\n   the results of another command.  One example is a FETCH that would\n   cause \\Seen flags to be set and a SEARCH UNSEEN command.\n\n   A non-obvious ambiguity occurs with commands that permit an untagged\n   EXPUNGE response (commands other than FETCH, STORE, and SEARCH),\n   since an untagged EXPUNGE response can invalidate sequence numbers in\n   a subsequent command.  This is not a problem for FETCH, STORE, or\n   SEARCH commands because servers are prohibited from sending EXPUNGE\n   responses while any of those commands are in progress.  Therefore, if\n   the client sends any command other than FETCH, STORE, or SEARCH, it\n   MUST wait for the completion result response before sending a command\n   with message sequence numbers.\n\n      Note: EXPUNGE responses are permitted while UID FETCH, UID STORE,\n      and UID SEARCH are in progress.  If the client sends a UID\n      command, it MUST wait for a completion result response before\n      sending a command that uses message sequence numbers (this may\n      include UID SEARCH).  Any message sequence numbers in an argument\n      to UID SEARCH are associated with messages prior to the effect of\n      any untagged EXPUNGE responses returned by the UID SEARCH.\n\n   For example, the following non-waiting command sequences are invalid:\n\n      FETCH + NOOP + STORE\n\n      STORE + COPY + FETCH\n\n      COPY + COPY\n\n   The following are examples of valid non-waiting command sequences:\n\n      FETCH + STORE + SEARCH + NOOP\n\n      STORE + COPY + EXPUNGE\n\n   UID SEARCH + UID SEARCH may be valid or invalid as a non-waiting\n   command sequence, depending upon whether or not the second UID SEARCH\n   contains message sequence numbers.\n\n   Use of a SEARCH result variable (see Section 6.4.4.1) creates direct\n   dependency between two commands.  See Section 6.4.4.2 for more\n   considerations about pipelining such dependent commands.\n\n6.  Client Commands\n\n   IMAP4rev2 commands are described in this section.  Commands are\n   organized by the state in which the command is permitted.  Commands\n   that are permitted in multiple states are listed in the minimum\n   permitted state (for example, commands valid in authenticated and\n   selected states are listed in the authenticated state commands).\n\n   Command arguments, identified by \"Arguments:\" in the command\n   descriptions below, are described by function, not by syntax.  The\n   precise syntax of command arguments is described in \"Formal Syntax\"\n   (Section 9).\n\n   Some commands cause specific server responses to be returned; these\n   are identified by \"Responses:\" in the command descriptions below.\n   See the response descriptions in \"Responses\" (Section 7) for\n   information on these responses and in \"Formal Syntax\" (Section 9) for\n   the precise syntax of these responses.  It is possible for server\n   data to be transmitted as a result of any command.  Thus, commands\n   that do not specifically require server data specify \"no specific\n   responses for this command\" instead of \"none\".\n\n   The \"Result:\" in the command description refers to the possible\n   tagged status responses to a command and any special interpretation\n   of these status responses.\n\n   The state of a connection is only changed by successful commands that\n   are documented as changing state.  A rejected command (BAD response)\n   never changes the state of the connection or of the selected mailbox.\n   A failed command (NO response) generally does not change the state of\n   the connection or of the selected mailbox, with the exception of the\n   SELECT and EXAMINE commands.\n\n6.1.  Client Commands - Any State\n\n   The following commands are valid in any state: CAPABILITY, NOOP, and\n   LOGOUT.\n\n6.1.1.  CAPABILITY Command\n\n   Arguments:    none\n\n   Responses:    REQUIRED untagged response:  CAPABILITY\n\n   Result:       OK -  capability completed\n                 BAD -  arguments invalid\n\n   The CAPABILITY command requests a listing of capabilities (e.g.,\n   extensions and/or modifications of server behavior) that the server\n   supports.  The server MUST send a single untagged CAPABILITY response\n   with \"IMAP4rev2\" as one of the listed capabilities before the\n   (tagged) OK response.\n\n   A capability name that begins with \"AUTH=\" indicates that the server\n   supports that particular authentication mechanism as defined in the\n   Simple Authentication and Security Layer (SASL) [SASL].  All such\n   names are, by definition, part of this specification.\n\n   Other capability names refer to extensions, revisions, or amendments\n   to this specification.  See the documentation of the CAPABILITY\n   response in Section 7.2.2 for additional information.  If IMAP4rev1\n   capability is not advertised, no capabilities, beyond the base\n   IMAP4rev2 set defined in this specification, are enabled without\n   explicit client action to invoke the capability.  If both IMAP4rev1\n   and IMAP4rev2 capabilities are advertised, no capabilities, beyond\n   the base IMAP4rev1 set specified in [RFC3501], are enabled without\n   explicit client action to invoke the capability.\n\n   Client and server implementations MUST implement the STARTTLS\n   (Section 6.2.1) and LOGINDISABLED capabilities on cleartext ports.\n   Client and server implementations MUST also implement AUTH=PLAIN\n   (described in [PLAIN]) capability on both cleartext and Implicit TLS\n   ports.  See the Security Considerations (Section 11) for important\n   information.\n\n   Unless otherwise specified, all registered extensions to IMAP4rev1\n   are also valid extensions to IMAP4rev2.\n\n   Example:\n\n     C: abcd CAPABILITY\n     S: * CAPABILITY IMAP4rev2 STARTTLS AUTH=GSSAPI\n      LOGINDISABLED\n     S: abcd OK CAPABILITY completed\n     C: efgh STARTTLS\n     S: efgh OK STARTTLS completed\n     <TLS negotiation, further commands are under TLS layer>\n     C: ijkl CAPABILITY\n     S: * CAPABILITY IMAP4rev2 AUTH=GSSAPI AUTH=PLAIN\n     S: ijkl OK CAPABILITY completed\n\n6.1.2.  NOOP Command\n\n   Arguments:    none\n\n   Responses:    no specific responses for this command (but see below)\n\n   Result:       OK -  noop completed\n                 BAD -  command unknown or arguments invalid\n\n   The NOOP command always succeeds.  It does nothing.\n\n   Since any command can return a status update as untagged data, the\n   NOOP command can be used as a periodic poll for new messages or\n   message status updates during a period of inactivity (the IDLE\n   command; see Section 6.3.13) should be used instead of NOOP if real-\n   time updates to mailbox state are desirable).  The NOOP command can\n   also be used to reset any inactivity autologout timer on the server.\n\n   Example:\n\n     C: a002 NOOP\n     S: a002 OK NOOP completed\n        . . .\n     C: a047 NOOP\n     S: * 22 EXPUNGE\n     S: * 23 EXISTS\n     S: * 14 FETCH (UID 1305 FLAGS (\\Seen \\Deleted))\n     S: a047 OK NOOP completed\n\n6.1.3.  LOGOUT Command\n\n   Arguments:    none\n\n   Responses:    REQUIRED untagged response:  BYE\n\n   Result:       OK -  logout completed\n                 BAD -  command unknown or arguments invalid\n\n   The LOGOUT command informs the server that the client is done with\n   the connection.  The server MUST send a BYE untagged response before\n   the (tagged) OK response, and then close the network connection.\n\n   Example:\n\n     C: A023 LOGOUT\n     S: * BYE IMAP4rev2 Server logging out\n     S: A023 OK LOGOUT completed\n     (Server and client then close the connection)\n\n6.2.  Client Commands - Not Authenticated State\n\n   In the not authenticated state, the AUTHENTICATE or LOGIN command\n   establishes authentication and enters the authenticated state.  The\n   AUTHENTICATE command provides a general mechanism for a variety of\n   authentication techniques, privacy protection, and integrity\n   checking, whereas the LOGIN command uses a conventional user name and\n   plaintext password pair and has no means of establishing privacy\n   protection or integrity checking.\n\n   The STARTTLS command is an alternative form of establishing session\n   privacy protection and integrity checking but does not by itself\n   establish authentication or enter the authenticated state.\n\n   Server implementations MAY allow access to certain mailboxes without\n   establishing authentication.  This can be done by means of the\n   ANONYMOUS [SASL] authenticator described in [ANONYMOUS].  An older\n   convention is a LOGIN command using the userid \"anonymous\"; in this\n   case, a password is required although the server may choose to accept\n   any password.  The restrictions placed on anonymous users are\n   implementation dependent.\n\n   Once authenticated (including as anonymous), it is not possible to\n   re-enter not authenticated state.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in the not authenticated state:\n   STARTTLS, AUTHENTICATE, and LOGIN.  See the Security Considerations\n   (Section 11) for important information about these commands.\n\n6.2.1.  STARTTLS Command\n\n   Arguments:    none\n\n   Responses:    no specific response for this command\n\n   Result:       OK -  starttls completed, begin TLS negotiation\n                 NO -  TLS negotiation can't be initiated, due to server\n                    configuration error\n                 BAD -  STARTTLS received after a successful TLS\n                    negotiation or arguments invalid\n\n   Note that the STARTTLS command is available only on cleartext ports.\n   The server MUST always respond with a tagged BAD response when the\n   STARTTLS command is received on an Implicit TLS port.\n\n   A TLS [TLS-1.3] negotiation begins immediately after the CRLF at the\n   end of the tagged OK response from the server.  Once a client issues\n   a STARTTLS command, it MUST NOT issue further commands until a server\n   response is seen and the TLS negotiation is complete.  Some past\n   server implementations incorrectly implemented STARTTLS processing\n   and are known to contain STARTTLS plaintext command injection\n   vulnerability [CERT-555316].  In order to avoid this vulnerability,\n   server implementations MUST do one of the following if any data is\n   received in the same TCP buffer after the CRLF that starts the\n   STARTTLS command:\n\n   1.  Extra data from the TCP buffer is interpreted as the beginning of\n       the TLS handshake.  (If the data is in cleartext, this will\n       result in the TLS handshake failing.)\n\n   2.  Extra data from the TCP buffer is thrown away.\n\n   Note that the first option is friendlier to clients that pipeline the\n   beginning of the STARTTLS command with TLS handshake data.\n\n   After successful TLS negotiation, the server remains in the non-\n   authenticated state, even if client credentials are supplied during\n   the TLS negotiation.  This does not preclude an authentication\n   mechanism such as EXTERNAL (defined in [SASL]) from using client\n   identity determined by the TLS negotiation.\n\n   Once TLS has been started, the client MUST discard cached information\n   about server capabilities and SHOULD reissue the CAPABILITY command.\n   This is necessary to protect against active attacks that alter the\n   capabilities list prior to STARTTLS.  The server MAY advertise\n   different capabilities and, in particular, SHOULD NOT advertise the\n   STARTTLS capability, after a successful STARTTLS command.\n\n   Example:\n\n      C: a001 CAPABILITY\n      S: * CAPABILITY IMAP4rev2 STARTTLS LOGINDISABLED\n      S: a001 OK CAPABILITY completed\n      C: a002 STARTTLS\n      S: a002 OK Begin TLS negotiation now\n      <TLS negotiation, further commands are under TLS layer>\n      C: a003 CAPABILITY\n      S: * CAPABILITY IMAP4rev2 AUTH=PLAIN\n      S: a003 OK CAPABILITY completed\n      C: a004 AUTHENTICATE PLAIN dGVzdAB0ZXN0AHRlc3Q=\n      S: a004 OK Success (tls protection)\n\n6.2.2.  AUTHENTICATE Command\n\n   Arguments:    SASL authentication mechanism name\n\n                 OPTIONAL initial response\n\n   Responses:    continuation data can be requested\n\n   Result:       OK -  authenticate completed, now in authenticated\n                    state\n                 NO -  authenticate failure: unsupported authentication\n                    mechanism, credentials rejected\n                 BAD -  command unknown or arguments invalid,\n                    authentication exchange canceled\n\n   The AUTHENTICATE command indicates a [SASL] authentication mechanism\n   to the server.  If the server supports the requested authentication\n   mechanism, it performs an authentication protocol exchange to\n   authenticate and identify the client.  It MAY also negotiate an\n   OPTIONAL security layer for subsequent protocol interactions.  If the\n   requested authentication mechanism is not supported, the server\n   SHOULD reject the AUTHENTICATE command by sending a tagged NO\n   response.\n\n   The AUTHENTICATE command supports the optional \"initial response\"\n   feature defined in Section 4 of [SASL].  The client doesn't need to\n   use it.  If a SASL mechanism supports \"initial response\", but it is\n   not specified by the client, the server handles it as specified in\n   Section 3 of [SASL].\n\n   The service name specified by this protocol's profile of [SASL] is\n   \"imap\".\n\n   The authentication protocol exchange consists of a series of server\n   challenges and client responses that are specific to the\n   authentication mechanism.  A server challenge consists of a command\n   continuation request response with the \"+\" token followed by a\n   base64-encoded (see Section 4 of [RFC4648]) string.  The client\n   response consists of a single line consisting of a base64-encoded\n   string.  If the client wishes to cancel an authentication exchange,\n   it issues a line consisting of a single \"*\".  If the server receives\n   such a response, or if it receives an invalid base64 string (e.g.,\n   characters outside the base64 alphabet or non-terminal \"=\"), it MUST\n   reject the AUTHENTICATE command by sending a tagged BAD response.\n\n   As with any other client response, the initial response MUST be\n   encoded as base64.  It also MUST be transmitted outside of a quoted\n   string or literal.  To send a zero-length initial response, the\n   client MUST send a single pad character (\"=\").  This indicates that\n   the response is present, but it is a zero-length string.\n\n   When decoding the base64 data in the initial response, decoding\n   errors MUST be treated as in any normal SASL client response, i.e.,\n   with a tagged BAD response.  In particular, the server should check\n   for any characters not explicitly allowed by the base64 alphabet, as\n   well as any sequence of base64 characters that contains the pad\n   character ('=') anywhere other than the end of the string (e.g.,\n   \"=AAA\" and \"AAA=BBB\" are not allowed).\n\n   If the client uses an initial response with a SASL mechanism that\n   does not support an initial response, the server MUST reject the\n   command with a tagged BAD response.\n\n   If a security layer is negotiated through the [SASL] authentication\n   exchange, it takes effect immediately following the CRLF that\n   concludes the authentication exchange for the client and the CRLF of\n   the tagged OK response for the server.\n\n   While client and server implementations MUST implement the\n   AUTHENTICATE command itself, it is not required to implement any\n   authentication mechanisms other than the PLAIN mechanism described in\n   [PLAIN].  Also, an authentication mechanism is not required to\n   support any security layers.\n\n      Note: a server implementation MUST implement a configuration in\n      which it does NOT permit any plaintext password mechanisms, unless\n      the STARTTLS command has been negotiated, TLS has been negotiated\n      on an Implicit TLS port, or some other mechanism that protects the\n      session from password snooping has been provided.  Server sites\n      SHOULD NOT use any configuration that permits a plaintext password\n      mechanism without such a protection mechanism against password\n      snooping.  Client and server implementations SHOULD implement\n      additional [SASL] mechanisms that do not use plaintext passwords,\n      such as the GSSAPI mechanism described in [RFC4752], the SCRAM-\n      SHA-256/SCRAM-SHA-256-PLUS [SCRAM-SHA-256] mechanisms, and/or the\n      EXTERNAL [SASL] mechanism for mutual TLS authentication.  (Note\n      that the SASL framework allows for the creation of SASL mechanisms\n      that support 2-factor authentication (2FA); however, none are\n      fully ready to be recommended by this document.)\n\n   Servers and clients can support multiple authentication mechanisms.\n   The server SHOULD list its supported authentication mechanisms in the\n   response to the CAPABILITY command so that the client knows which\n   authentication mechanisms to use.\n\n   A server MAY include a CAPABILITY response code in the tagged OK\n   response of a successful AUTHENTICATE command in order to send\n   capabilities automatically.  It is unnecessary for a client to send a\n   separate CAPABILITY command if it recognizes these automatic\n   capabilities.  This should only be done if a security layer was not\n   negotiated by the AUTHENTICATE command, because the tagged OK\n   response as part of an AUTHENTICATE command is not protected by\n   encryption/integrity checking.  [SASL] requires the client to re-\n   issue a CAPABILITY command in this case.  The server MAY advertise\n   different capabilities after a successful AUTHENTICATE command.\n\n   If an AUTHENTICATE command fails with a NO response, the client MAY\n   try another authentication mechanism by issuing another AUTHENTICATE\n   command.  It MAY also attempt to authenticate by using the LOGIN\n   command (see Section 6.2.3 for more detail).  In other words, the\n   client MAY request authentication types in decreasing order of\n   preference, with the LOGIN command as a last resort.\n\n   The authorization identity passed from the client to the server\n   during the authentication exchange is interpreted by the server as\n   the user name whose privileges the client is requesting.\n\n   Example:\n\n     S: * OK [CAPABILITY IMAP4rev2 STARTTLS AUTH=GSSAPI]\n      Capabilities\n     C: A001 AUTHENTICATE GSSAPI\n     S: +\n     C: YIIB+wYJKoZIhvcSAQICAQBuggHqMIIB5qADAgEFoQMCAQ6iBw\n        MFACAAAACjggEmYYIBIjCCAR6gAwIBBaESGxB1Lndhc2hpbmd0\n        b24uZWR1oi0wK6ADAgEDoSQwIhsEaW1hcBsac2hpdmFtcy5jYW\n        Mud2FzaGluZ3Rvbi5lZHWjgdMwgdCgAwIBAaEDAgEDooHDBIHA\n        cS1GSa5b+fXnPZNmXB9SjL8Ollj2SKyb+3S0iXMljen/jNkpJX\n        AleKTz6BQPzj8duz8EtoOuNfKgweViyn/9B9bccy1uuAE2HI0y\n        C/PHXNNU9ZrBziJ8Lm0tTNc98kUpjXnHZhsMcz5Mx2GR6dGknb\n        I0iaGcRerMUsWOuBmKKKRmVMMdR9T3EZdpqsBd7jZCNMWotjhi\n        vd5zovQlFqQ2Wjc2+y46vKP/iXxWIuQJuDiisyXF0Y8+5GTpAL\n        pHDc1/pIGmMIGjoAMCAQGigZsEgZg2on5mSuxoDHEA1w9bcW9n\n        FdFxDKpdrQhVGVRDIzcCMCTzvUboqb5KjY1NJKJsfjRQiBYBdE\n        NKfzK+g5DlV8nrw81uOcP8NOQCLR5XkoMHC0Dr/80ziQzbNqhx\n        O6652Npft0LQwJvenwDI13YxpwOdMXzkWZN/XrEqOWp6GCgXTB\n        vCyLWLlWnbaUkZdEYbKHBPjd8t/1x5Yg==\n     S: + YGgGCSqGSIb3EgECAgIAb1kwV6ADAgEFoQMCAQ+iSzBJoAMC\n        AQGiQgRAtHTEuOP2BXb9sBYFR4SJlDZxmg39IxmRBOhXRKdDA0\n        uHTCOT9Bq3OsUTXUlk0CsFLoa8j+gvGDlgHuqzWHPSQg==\n     C:\n     S: + YDMGCSqGSIb3EgECAgIBAAD/////6jcyG4GE3KkTzBeBiVHe\n        ceP2CWY0SR0fAQAgAAQEBAQ=\n     C: YDMGCSqGSIb3EgECAgIBAAD/////3LQBHXTpFfZgrejpLlLImP\n        wkhbfa2QteAQAgAG1yYwE=\n     S: A001 OK GSSAPI authentication successful\n\n   The following example demonstrates the use of an initial response.\n\n   Example:\n\n     S: * OK [CAPABILITY IMAP4rev2 STARTTLS AUTH=GSSAPI\n      LOGINDISABLED] Server ready\n     C: A01 STARTTLS\n     S: A01 OK STARTTLS completed\n     <TLS negotiation, further commands are under TLS layer>\n     C: A02 CAPABILITY\n     S: * CAPABILITY IMAP4rev2 AUTH=GSSAPI AUTH=PLAIN\n     S: A02 OK CAPABILITY completed\n     C: A03 AUTHENTICATE PLAIN dGVzdAB0ZXN0AHRlc3Q=\n     S: A03 OK Success (tls protection)\n\n   Note that because the initial response is optional, the following\n   negotiation (which does not use the initial response) is still valid\n   and MUST be supported by the server:\n\n     ... client connects to server and negotiates a TLS\n         protection layer ...\n     C: C01 CAPABILITY\n     S: * CAPABILITY IMAP4rev2 AUTH=PLAIN\n     S: C01 OK Completed\n     C: A01 AUTHENTICATE PLAIN\n     S: +\n     C: dGVzdAB0ZXN0AHRlc3Q=\n     S: A01 OK Success (tls protection)\n\n   Note that in the above example there is a space following the \"+\"\n   from the server.\n\n   The following is an example authentication using the SASL EXTERNAL\n   mechanism (defined in [SASL]) under a TLS protection layer and an\n   empty initial response:\n\n     ... client connects to server and negotiates a TLS\n         protection layer ...\n     C: C01 CAPABILITY\n     S: * CAPABILITY IMAP4rev2 AUTH=PLAIN AUTH=EXTERNAL\n     S: C01 OK Completed\n     C: A01 AUTHENTICATE EXTERNAL =\n     S: A01 OK Success (tls protection)\n\n   Note: The line breaks within server challenges and client responses\n   are for editorial clarity and are not in real authenticators.\n\n6.2.3.  LOGIN Command\n\n   Arguments:    user name\n\n                 password\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  login completed, now in authenticated state\n                 NO -  login failure: user name or password rejected\n                 BAD -  command unknown or arguments invalid\n\n   The LOGIN command identifies the client to the server and carries the\n   plaintext password authenticating this user.  The LOGIN command\n   SHOULD NOT be used except as a last resort (after attempting and\n   failing to authenticate using the AUTHENTICATE command one or more\n   times), and it is recommended that client implementations have a\n   means to disable any automatic use of the LOGIN command.\n\n   A server MAY include a CAPABILITY response code in the tagged OK\n   response to a successful LOGIN command in order to send capabilities\n   automatically.  It is unnecessary for a client to send a separate\n   CAPABILITY command if it recognizes these automatic capabilities.\n\n   Example:\n\n     C: a001 LOGIN SMITH SESAME\n     S: a001 OK LOGIN completed\n\n   Note: Use of the LOGIN command over an insecure network (such as the\n   Internet) is a security risk, because anyone monitoring network\n   traffic can obtain plaintext passwords.  For that reason, clients\n   MUST NOT use LOGIN on unsecure networks.\n\n   Unless the client is accessing IMAP service on an Implicit TLS port\n   [RFC8314], the STARTTLS command has been negotiated, or some other\n   mechanism that protects the session from password snooping has been\n   provided, a server implementation MUST implement a configuration in\n   which it advertises the LOGINDISABLED capability and does NOT permit\n   the LOGIN command.  Server sites SHOULD NOT use any configuration\n   that permits the LOGIN command without such a protection mechanism\n   against password snooping.  A client implementation MUST NOT send a\n   LOGIN command if the LOGINDISABLED capability is advertised.\n\n6.3.  Client Commands - Authenticated State\n\n   In the authenticated state, commands that manipulate mailboxes as\n   atomic entities are permitted.  Of these commands, SELECT and EXAMINE\n   will select a mailbox for access and enter the selected state.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   the following commands are valid in the authenticated state: ENABLE,\n   SELECT, EXAMINE, NAMESPACE, CREATE, DELETE, RENAME, SUBSCRIBE,\n   UNSUBSCRIBE, LIST, STATUS, APPEND, and IDLE.\n\n6.3.1.  ENABLE Command\n\n   Arguments:    capability names\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  Relevant capabilities enabled\n                 BAD -  No arguments, or syntax error in an argument\n\n   Several IMAP extensions allow the server to return unsolicited\n   responses specific to these extensions in certain circumstances.\n   However, servers cannot send those unsolicited responses (with the\n   exception of response codes (see Section 7.1) included in tagged or\n   untagged OK/NO/BAD responses, which can always be sent) until they\n   know that the clients support such extensions and thus will be able\n   to correctly parse and process the extension response data.\n\n   The ENABLE command provides an explicit indication from the client\n   that it supports particular extensions.  It is designed such that the\n   client can send a simple constant string with the extensions it\n   supports, and the server will enable the shared subset that both\n   support.\n\n   The ENABLE command takes a list of capability names and requests the\n   server to enable the named extensions.  Once enabled using ENABLE,\n   each extension remains active until the IMAP connection is closed.\n   For each argument, the server does the following:\n\n   *  If the argument is not an extension known to the server, the\n      server MUST ignore the argument.\n\n   *  If the argument is an extension known to the server, and it is not\n      specifically permitted to be enabled using ENABLE, the server MUST\n      ignore the argument.  (Note that knowing about an extension\n      doesn't necessarily imply supporting that extension.)\n\n   *  If the argument is an extension that is supported by the server\n      and that needs to be enabled, the server MUST enable the extension\n      for the duration of the connection.  Note that once an extension\n      is enabled, there is no way to disable it.\n\n   If the ENABLE command is successful, the server MUST send an untagged\n   ENABLED response (Section 7.2.1), which includes all enabled\n   extensions as specified above.  The ENABLED response is sent even if\n   no extensions were enabled.\n\n   Clients SHOULD only include extensions that need to be enabled by the\n   server.  For example, a client can enable IMAP4rev2-specific behavior\n   when both IMAP4rev1 and IMAP4rev2 are advertised in the CAPABILITY\n   response.  Future RFCs may add to this list.\n\n   The ENABLE command is only valid in the authenticated state, before\n   any mailbox is selected.  Clients MUST NOT issue ENABLE once they\n   SELECT/EXAMINE a mailbox; however, server implementations don't have\n   to check that no mailbox is selected or was previously selected\n   during the duration of a connection.\n\n   The ENABLE command can be issued multiple times in a session.  It is\n   additive; that is, \"ENABLE a b\", followed by \"ENABLE c\", is the same\n   as a single command \"ENABLE a b c\".  When multiple ENABLE commands\n   are issued, each corresponding ENABLED response SHOULD only contain\n   extensions enabled by the corresponding ENABLE command, i.e., for the\n   above example, the ENABLED response to \"ENABLE c\" should not contain\n   \"a\" or \"b\".\n\n   There are no limitations on pipelining ENABLE.  For example, it is\n   possible to send ENABLE and then immediately SELECT, or a LOGIN\n   immediately followed by ENABLE.\n\n   The server MUST NOT change the CAPABILITY list as a result of\n   executing ENABLE; that is, a CAPABILITY command issued right after an\n   ENABLE command MUST list the same capabilities as a CAPABILITY\n   command issued before the ENABLE command.  This is demonstrated in\n   the following example.  Note that below \"X-GOOD-IDEA\" is a fictitious\n   extension capability that can be ENABLED.\n\n     C: t1 CAPABILITY\n     S: * CAPABILITY IMAP4rev2 ID LITERAL+ X-GOOD-IDEA\n     S: t1 OK foo\n     C: t2 ENABLE CONDSTORE X-GOOD-IDEA\n     S: * ENABLED X-GOOD-IDEA\n     S: t2 OK foo\n     C: t3 CAPABILITY\n     S: * CAPABILITY IMAP4rev2 ID LITERAL+ X-GOOD-IDEA\n     S: t3 OK foo again\n\n   In the following example, the client enables the Conditional Store\n   (CONDSTORE) extension [RFC7162]:\n\n     C: a1 ENABLE CONDSTORE\n     S: * ENABLED CONDSTORE\n     S: a1 OK Conditional Store enabled\n\n6.3.1.1.  Note to Designers of Extensions That May Use the ENABLE\n          Command\n\n   Designers of IMAP extensions are discouraged from creating extensions\n   that require ENABLE unless there is no good alternative design.\n   Specifically, extensions that cause potentially incompatible behavior\n   changes to deployed server responses (and thus benefit from ENABLE)\n   have a higher complexity cost than extensions that do not.\n\n6.3.2.  SELECT Command\n\n   Arguments:    mailbox name\n\n   Responses:    REQUIRED untagged responses:  FLAGS, EXISTS, LIST\n                 REQUIRED OK untagged responses:  PERMANENTFLAGS,\n                    UIDNEXT, UIDVALIDITY\n\n   Result:       OK -  select completed, now in selected state\n                 NO -  select failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n                 BAD -  command unknown or arguments invalid\n\n   The SELECT command selects a mailbox so that messages in the mailbox\n   can be accessed.  Before returning an OK to the client, the server\n   MUST send the following untagged data to the client.  (The order of\n   individual responses is not important.)  Note that earlier versions\n   of this protocol, such as the IMAP4rev1 version specified in\n   [RFC2060], only required the FLAGS and EXISTS untagged responses and\n   UIDVALIDITY response code.  Client implementations that need to\n   remain compatible with such older IMAP versions have to implement\n   default behavior for missing data, as discussed with the individual\n   items.\n\n   FLAGS\n      Defined flags in the mailbox.  See the description of the FLAGS\n      response in Section 7.3.5 for more detail.\n\n   <n> EXISTS\n      The number of messages in the mailbox.  See the description of the\n      EXISTS response in Section 7.4.1 for more detail.\n\n   LIST\n      The server MUST return a LIST response with the mailbox name.  The\n      list of mailbox attributes MUST be accurate.  If the server allows\n      denormalized UTF-8 mailbox names (see Section 5.1) and the\n      supplied mailbox name differs from the normalized version, the\n      server MUST return LIST with the OLDNAME extended data item.  See\n      Section 6.3.9.7 for more details.\n\n   OK [PERMANENTFLAGS (<list of flags>)]\n      A list of message flags that the client can change permanently.\n      If this is missing, the client should assume that all flags can be\n      changed permanently.\n\n   OK [UIDNEXT <n>]\n      The next unique identifier value.  Refer to Section 2.3.1.1 for\n      more information.\n\n   OK [UIDVALIDITY <n>]\n      The unique identifier validity value.  Refer to Section 2.3.1.1\n      for more information.\n\n   Only one mailbox can be selected at a time in a connection;\n   simultaneous access to multiple mailboxes requires multiple\n   connections.  The SELECT command automatically deselects any\n   currently selected mailbox before attempting the new selection.\n   Consequently, if a mailbox is selected and a SELECT command that\n   fails is attempted, no mailbox is selected.  When deselecting a\n   selected mailbox, the server MUST return an untagged OK response with\n   the \"[CLOSED]\" response code when the currently selected mailbox is\n   closed (see Section 7.1).\n\n   If the client is permitted to modify the mailbox, the server SHOULD\n   prefix the text of the tagged OK response with the \"[READ-WRITE]\"\n   response code.\n\n   If the client is not permitted to modify the mailbox but is permitted\n   read access, the mailbox is selected as read-only, and the server\n   MUST prefix the text of the tagged OK response to SELECT with the\n   \"[READ-ONLY]\" response code.  Read-only access through SELECT differs\n   from the EXAMINE command in that certain read-only mailboxes MAY\n   permit the change of permanent state on a per-user (as opposed to\n   global) basis.  Netnews messages marked in a server-based .newsrc\n   file are an example of such per-user permanent state that can be\n   modified with read-only mailboxes.\n\n   Example:\n\n     C: A142 SELECT INBOX\n     S: * 172 EXISTS\n     S: * OK [UIDVALIDITY 3857529045] UIDs valid\n     S: * OK [UIDNEXT 4392] Predicted next UID\n     S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n     S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n     S: * LIST () \"/\" INBOX\n     S: A142 OK [READ-WRITE] SELECT completed\n\n   Example:\n\n     C: A142 SELECT INBOX\n     S: * 172 EXISTS\n     S: * OK [UIDVALIDITY 3857529045] UIDs valid\n     S: * OK [UIDNEXT 4392] Predicted next UID\n     S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n     S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] Limited\n     S: A142 OK [READ-WRITE] SELECT completed\n     [...some time later...]\n     C: A143 SELECT Drafts\n     S: * OK [CLOSED] Previous mailbox is now closed\n     S: * 5 EXISTS\n     S: * OK [UIDVALIDITY 9877410381] UIDs valid\n     S: * OK [UIDNEXT 102] Predicted next UID\n     S: * LIST () \"/\" Drafts\n     S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n     S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\Answered\n         \\Flagged \\Draft \\*)] System flags and keywords allowed\n     S: A143 OK [READ-WRITE] SELECT completed\n\n   Note that IMAP4rev1-compliant servers can also send the untagged\n   RECENT response that was deprecated in IMAP4rev2, e.g., \"* 0 RECENT\".\n   Pure IMAP4rev2 clients are advised to ignore the untagged RECENT\n   response.\n\n6.3.3.  EXAMINE Command\n\n   Arguments:    mailbox name\n\n   Responses:    REQUIRED untagged responses:  FLAGS, EXISTS, LIST\n                 REQUIRED OK untagged responses:  PERMANENTFLAGS,\n                    UIDNEXT, UIDVALIDITY\n\n   Result:       OK -  examine completed, now in selected state\n                 NO -  examine failure, now in authenticated state: no\n                    such mailbox, can't access mailbox\n                 BAD -  command unknown or arguments invalid\n\n   The EXAMINE command is identical to SELECT and returns the same\n   output; however, the selected mailbox is identified as read-only.  No\n   changes to the permanent state of the mailbox, including per-user\n   state, are permitted.\n\n   The text of the tagged OK response to the EXAMINE command MUST begin\n   with the \"[READ-ONLY]\" response code.\n\n   Example:\n\n      C: A932 EXAMINE blurdybloop\n      S: * 17 EXISTS\n      S: * OK [UIDVALIDITY 3857529045] UIDs valid\n      S: * OK [UIDNEXT 4392] Predicted next UID\n      S: * LIST () \"/\" blurdybloop\n      S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n      S: * OK [PERMANENTFLAGS ()] No permanent flags permitted\n      S: A932 OK [READ-ONLY] EXAMINE completed\n\n6.3.4.  CREATE Command\n\n   Arguments:    mailbox name\n\n   Responses:    OPTIONAL untagged response:  LIST\n\n   Result:       OK -  create completed\n                 NO -  create failure: can't create mailbox with that\n                    name\n                 BAD -  command unknown or arguments invalid\n\n   The CREATE command creates a mailbox with the given name.  An OK\n   response is returned only if a new mailbox with that name has been\n   created.  It is an error to attempt to create INBOX or a mailbox with\n   a name that refers to an extant mailbox.  Any error in creation will\n   return a tagged NO response.  If a client attempts to create a UTF-8\n   mailbox name that is not a valid Net-Unicode name, the server MUST\n   reject the creation or convert the name to Net-Unicode prior to\n   creating the mailbox.  If the server decides to convert (normalize)\n   the name, it SHOULD return an untagged LIST with an OLDNAME extended\n   data item, with the OLDNAME value being the supplied mailbox name and\n   the name parameter being the normalized mailbox name.  (See\n   Section 6.3.9.7 for more details.)\n\n   Mailboxes created in one IMAP session MAY be announced to other IMAP\n   sessions using an unsolicited LIST response.  If the server\n   automatically subscribes a mailbox when it is created, then the\n   unsolicited LIST response for each affected subscribed mailbox name\n   MUST include the \\Subscribed attribute.\n\n   If the mailbox name is suffixed with the server's hierarchy separator\n   character (as returned from the server by a LIST command), this is a\n   declaration that the client intends to create mailbox names under\n   this name in the hierarchy.  Server implementations that do not\n   require this declaration MUST ignore the declaration.  In any case,\n   the name created is without the trailing hierarchy delimiter.\n\n   If the server's hierarchy separator character appears elsewhere in\n   the name, the server SHOULD create any superior hierarchical names\n   that are needed for the CREATE command to be successfully completed.\n   In other words, an attempt to create \"foo/bar/zap\" on a server in\n   which \"/\" is the hierarchy separator character SHOULD create foo/ and\n   foo/bar/ if they do not already exist.\n\n   If a new mailbox is created with the same name as a mailbox that was\n   deleted, its unique identifiers MUST be greater than any unique\n   identifiers used in the previous incarnation of the mailbox unless\n   the new incarnation has a different unique identifier validity value.\n   See the description of the UID command in Section 6.4.9 for more\n   detail.\n\n   Example:\n\n     C: A003 CREATE owatagusiam/\n     S: A003 OK CREATE completed\n     C: A004 CREATE owatagusiam/blurdybloop\n     S: A004 OK CREATE completed\n     C: A005 CREATE NonNormalized\n     S: * LIST () \"/\" \"Normalized\" (\"OLDNAME\" (\"NonNormalized\"))\n     S: A005 OK CREATE completed\n\n   (In the last example, imagine that \"NonNormalized\" is a non-NFC\n   normalized Unicode mailbox name and that \"Normalized\" is its NFC\n   normalized version.)\n\n      |  Note: The interpretation of this example depends on whether \"/\"\n      |  was returned as the hierarchy separator from LIST.  If \"/\" is\n      |  the hierarchy separator, a new level of hierarchy named\n      |  \"owatagusiam\" with a member called \"blurdybloop\" is created.\n      |  Otherwise, two mailboxes at the same hierarchy level are\n      |  created.\n\n6.3.5.  DELETE Command\n\n   Arguments:    mailbox name\n\n   Responses:    OPTIONAL untagged response:  LIST\n\n   Result:       OK -  delete completed\n                 NO -  delete failure: can't delete mailbox with that\n                    name\n                 BAD -  command unknown or arguments invalid\n\n   The DELETE command permanently removes the mailbox with the given\n   name.  A tagged OK response is returned only if the mailbox has been\n   deleted.  It is an error to attempt to delete INBOX or a mailbox name\n   that does not exist.\n\n   The DELETE command MUST NOT remove inferior hierarchical names.  For\n   example, if a mailbox \"foo\" has an inferior \"foo.bar\" (assuming \".\"\n   is the hierarchy delimiter character), removing \"foo\" MUST NOT remove\n   \"foo.bar\".  It is an error to attempt to delete a name that has\n   inferior hierarchical names and also has the \\Noselect mailbox name\n   attribute (see the description of the LIST response (Section 7.3.1)\n   for more details).\n\n   It is permitted to delete a name that has inferior hierarchical names\n   and does not have the \\Noselect mailbox name attribute.  If the\n   server implementation does not permit deleting the name while\n   inferior hierarchical names exist, then it SHOULD disallow the DELETE\n   command by returning a tagged NO response.  The NO response SHOULD\n   include the HASCHILDREN response code.  Alternatively, the server MAY\n   allow the DELETE command, but it sets the \\Noselect mailbox name\n   attribute for that name.\n\n   If the server returns an OK response, all messages in that mailbox\n   are removed by the DELETE command.\n\n   The value of the highest-used unique identifier of the deleted\n   mailbox MUST be preserved so that a new mailbox created with the same\n   name will not reuse the identifiers of the former incarnation, unless\n   the new incarnation has a different unique identifier validity value.\n   See the description of the UID command in Section 6.4.9 for more\n   detail.\n\n   If the server decides to convert (normalize) the mailbox name, it\n   SHOULD return an untagged LIST with the \"\\NonExistent\" attribute and\n   OLDNAME extended data item, with the OLDNAME value being the supplied\n   mailbox name and the name parameter being the normalized mailbox\n   name.  (See Section 6.3.9.7 for more details.)\n\n   Mailboxes deleted in one IMAP session MAY be announced to other IMAP\n   sessions using an unsolicited LIST response, containing the\n   \"\\NonExistent\" attribute.\n\n   Example:\n\n     C: A682 LIST \"\" *\n     S: * LIST () \"/\" blurdybloop\n     S: * LIST (\\Noselect) \"/\" foo\n     S: * LIST () \"/\" foo/bar\n     S: A682 OK LIST completed\n     C: A683 DELETE blurdybloop\n     S: A683 OK DELETE completed\n     C: A684 DELETE foo\n     S: A684 NO Name \"foo\" has inferior hierarchical names\n     C: A685 DELETE foo/bar\n     S: A685 OK DELETE Completed\n     C: A686 LIST \"\" *\n     S: * LIST (\\Noselect) \"/\" foo\n     S: A686 OK LIST completed\n     C: A687 DELETE foo\n     S: A687 OK DELETE Completed\n\n   Example:\n\n     C: A82 LIST \"\" *\n     S: * LIST () \".\" blurdybloop\n     S: * LIST () \".\" foo\n     S: * LIST () \".\" foo.bar\n     S: A82 OK LIST completed\n     C: A83 DELETE blurdybloop\n     S: A83 OK DELETE completed\n     C: A84 DELETE foo\n     S: A84 OK DELETE Completed\n     C: A85 LIST \"\" *\n     S: * LIST () \".\" foo.bar\n     S: A85 OK LIST completed\n     C: A86 LIST \"\" %\n     S: * LIST (\\Noselect) \".\" foo\n     S: A86 OK LIST completed\n\n6.3.6.  RENAME Command\n\n   Arguments:    existing mailbox name\n\n                 new mailbox name\n\n   Responses:    OPTIONAL untagged response:  LIST\n\n   Result:       OK -  rename completed\n                 NO -  rename failure: can't rename mailbox with that\n                    name, can't rename to mailbox with that name\n                 BAD -  command unknown or arguments invalid\n\n   The RENAME command changes the name of a mailbox.  A tagged OK\n   response is returned only if the mailbox has been renamed.  It is an\n   error to attempt to rename from a mailbox name that does not exist or\n   to a mailbox name that already exists.  Any error in renaming will\n   return a tagged NO response.\n\n   If the name has inferior hierarchical names, then the inferior\n   hierarchical names MUST also be renamed.  For example, a rename of\n   \"foo\" to \"zap\" will rename \"foo/bar\" (assuming \"/\" is the hierarchy\n   delimiter character) to \"zap/bar\".\n\n   If the server's hierarchy separator character appears in the new\n   mailbox name, the server SHOULD create any superior hierarchical\n   names that are needed for the RENAME command to complete\n   successfully.  In other words, an attempt to rename \"foo/bar/zap\" to\n   \"baz/rag/zowie\" on a server in which \"/\" is the hierarchy separator\n   character in the corresponding namespace SHOULD create \"baz/\" and\n   \"baz/rag/\" if they do not already exist.\n\n   The value of the highest-used unique identifier of the old mailbox\n   name MUST be preserved so that a new mailbox created with the same\n   name will not reuse the identifiers of the former incarnation, unless\n   the new incarnation has a different unique identifier validity value.\n   See the description of the UID command in Section 6.4.9 for more\n   detail.\n\n   Renaming INBOX is permitted and does not result in a tagged BAD\n   response, and it has special behavior: It moves all messages in INBOX\n   to a new mailbox with the given name, leaving INBOX empty.  If the\n   server implementation supports inferior hierarchical names of INBOX,\n   these are unaffected by a rename of INBOX.  (Note that some servers\n   disallow renaming INBOX by returning a tagged NO response, so clients\n   need to be able to handle the failure of such RENAME commands.)\n\n   If the server allows creation of mailboxes with names that are not\n   valid Net-Unicode names, the server normalizes both the existing\n   mailbox name parameter and the new mailbox name parameter.  If the\n   normalized version of any of these 2 parameters differs from the\n   corresponding supplied version, the server SHOULD return an untagged\n   LIST response with an OLDNAME extended data item, with the OLDNAME\n   value being the supplied existing mailbox name and the name parameter\n   being the normalized new mailbox name (see Section 6.3.9.7).  This\n   would allow the client to correlate the supplied name with the\n   normalized name.\n\n   Mailboxes renamed in one IMAP session MAY be announced to other IMAP\n   sessions using an unsolicited LIST response with an OLDNAME extended\n   data item.\n\n   In both of the above cases, if the server automatically subscribes a\n   mailbox when it is renamed, then the unsolicited LIST response for\n   each affected subscribed mailbox name MUST include the \\Subscribed\n   attribute.  No unsolicited LIST responses need to be sent for child\n   mailboxes.  When INBOX is successfully renamed, it is assumed that a\n   new INBOX is created.  No unsolicited LIST responses need to be sent\n   for INBOX in this case.\n\n   Examples:\n\n     C: A682 LIST \"\" *\n     S: * LIST () \"/\" blurdybloop\n     S: * LIST (\\Noselect) \"/\" foo\n     S: * LIST () \"/\" foo/bar\n     S: A682 OK LIST completed\n     C: A683 RENAME blurdybloop sarasoop\n     S: A683 OK RENAME completed\n     C: A684 RENAME foo zowie\n     S: A684 OK RENAME Completed\n     C: A685 LIST \"\" *\n     S: * LIST () \"/\" sarasoop\n     S: * LIST (\\Noselect) \"/\" zowie\n     S: * LIST () \"/\" zowie/bar\n     S: A685 OK LIST completed\n\n     C: Z432 LIST \"\" *\n     S: * LIST () \".\" INBOX\n     S: * LIST () \".\" INBOX.bar\n     S: Z432 OK LIST completed\n     C: Z433 RENAME INBOX old-mail\n     S: Z433 OK RENAME completed\n     C: Z434 LIST \"\" *\n     S: * LIST () \".\" INBOX\n     S: * LIST () \".\" INBOX.bar\n     S: * LIST () \".\" old-mail\n     S: Z434 OK LIST completed\n\n   Note that renaming a mailbox doesn't update subscription information\n   on the original name.  To keep subscription information in sync, the\n   following sequence of commands can be used:\n\n     C: 1001 RENAME X Y\n     C: 1002 SUBSCRIBE Y\n     C: 1003 UNSUBSCRIBE X\n\n   Note that the above sequence of commands doesn't account for updating\n   the subscription for any child mailboxes of mailbox X.\n\n6.3.7.  SUBSCRIBE Command\n\n   Arguments:    mailbox\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  subscribe completed\n                 NO -  subscribe failure: can't subscribe to that name\n                 BAD -  command unknown or arguments invalid\n\n   The SUBSCRIBE command adds the specified mailbox name to the server's\n   set of \"active\" or \"subscribed\" mailboxes as returned by the LIST\n   (SUBSCRIBED) command.  This command returns a tagged OK response if\n   the subscription is successful or if the mailbox is already\n   subscribed.\n\n   A server MAY validate the mailbox argument to SUBSCRIBE to verify\n   that it exists.  However, it SHOULD NOT unilaterally remove an\n   existing mailbox name from the subscription list even if a mailbox by\n   that name no longer exists.\n\n      |  Note: This requirement is because a server site can choose to\n      |  routinely remove a mailbox with a well-known name (e.g.,\n      |  \"system-alerts\") after its contents expire, with the intention\n      |  of recreating it when new contents are appropriate.\n\n   Example:\n\n     C: A002 SUBSCRIBE #news.comp.mail.mime\n     S: A002 OK SUBSCRIBE completed\n\n6.3.8.  UNSUBSCRIBE Command\n\n   Arguments:    mailbox name\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  unsubscribe completed\n                 NO -  unsubscribe failure: can't unsubscribe that name\n                 BAD -  command unknown or arguments invalid\n\n   The UNSUBSCRIBE command removes the specified mailbox name from the\n   server's set of \"active\" or \"subscribed\" mailboxes as returned by the\n   LIST (SUBSCRIBED) command.  This command returns a tagged OK response\n   if the unsubscription is successful or if the mailbox is not\n   subscribed.\n\n   Example:\n\n     C: A002 UNSUBSCRIBE #news.comp.mail.mime\n     S: A002 OK UNSUBSCRIBE completed\n\n6.3.9.  LIST Command\n\n   Arguments (basic):\n                 reference name\n                 mailbox name with possible wildcards\n\n   Arguments (extended):\n                 selection options (OPTIONAL)\n                 reference name\n                 mailbox patterns\n                 return options (OPTIONAL)\n\n   Responses:    untagged responses: LIST\n\n   Result:       OK -  list completed\n                 NO -  list failure: can't list that reference or\n                    mailbox name\n                 BAD -  command unknown or arguments invalid\n\n   The LIST command returns a subset of mailbox names from the complete\n   set of all mailbox names available to the client.  Zero or more\n   untagged LIST responses are returned, containing the name attributes,\n   hierarchy delimiter, name, and possible extension information; see\n   the description of the LIST response (Section 7.3.1) for more detail.\n\n   The LIST command SHOULD return its data quickly, without undue delay.\n   For example, it should not go to excess trouble to calculate the\n   \\Marked or \\Unmarked status or perform other processing; if each name\n   requires 1 second of processing, then a list of 1200 names would take\n   20 minutes!\n\n   The extended LIST command, originally introduced in [RFC5258],\n   provides capabilities beyond that of the original IMAP LIST command.\n   The extended syntax is being used if one or more of the following\n   conditions is true:\n\n   1.  the first word after the command name begins with a parenthesis\n       (\"LIST selection options\");\n\n   2.  the second word after the command name begins with a parenthesis;\n       and\n\n   3.  the LIST command has more than 2 parameters (\"LIST return\n       options\").\n\n   An empty (\"\" string) reference name argument indicates that the\n   mailbox name is interpreted as by SELECT.  The returned mailbox names\n   MUST match the supplied mailbox name pattern(s).  A non-empty\n   reference name argument is the name of a mailbox or a level of\n   mailbox hierarchy, and it indicates the context in which the mailbox\n   name is interpreted.  Clients SHOULD use the empty reference\n   argument.\n\n   In the basic syntax only, an empty (\"\" string) mailbox name argument\n   is a special request to return the hierarchy delimiter and the root\n   name of the name given in the reference.  The value returned as the\n   root MAY be the empty string if the reference is non-rooted or is an\n   empty string.  In all cases, a hierarchy delimiter (or NIL if there\n   is no hierarchy) is returned.  This permits a client to get the\n   hierarchy delimiter (or find out that the mailbox names are flat)\n   even when no mailboxes by that name currently exist.\n\n   In the extended syntax, any mailbox name arguments that are empty\n   strings are ignored.  There is no special meaning for empty mailbox\n   names when the extended syntax is used.\n\n   The reference and mailbox name arguments are interpreted into a\n   canonical form that represents an unambiguous left-to-right\n   hierarchy.  The returned mailbox names will be in the interpreted\n   form, which we call a \"canonical LIST pattern\": the canonical pattern\n   constructed internally by the server from the reference and mailbox\n   name arguments.\n\n      Note: The interpretation of the reference argument is\n      implementation defined.  It depends on whether the server\n      implementation has a concept of the \"current working directory\"\n      and leading \"break out characters\", which override the current\n      working directory.\n\n      For example, on a server that exports a UNIX or NT file system,\n      the reference argument contains the current working directory, and\n      the mailbox name argument contains the name as interpreted in the\n      current working directory.\n\n      If a server implementation has no concept of break out characters,\n      the canonical form is normally the reference name appended with\n      the mailbox name.  Note that if the server implements the\n      namespace convention (Section 5.1.2.1), \"#\" is a break out\n      character and must be treated as such.\n\n      If the reference argument is not a level of mailbox hierarchy\n      (that is, it is a \\NoInferiors name), and/or the reference\n      argument does not end with the hierarchy delimiter, it is\n      interpreted as implementation dependent.  For example, a reference\n      of \"foo/bar\" and mailbox name of \"rag/baz\" could be interpreted as\n      \"foo/bar/rag/baz\", \"foo/barrag/baz\", or \"foo/rag/baz\".  A client\n      SHOULD NOT use such a reference argument except at the explicit\n      request of the user.  A hierarchical browser MUST NOT make any\n      assumptions about server interpretation of the reference unless\n      the reference is a level of mailbox hierarchy AND ends with the\n      hierarchy delimiter.\n\n   Any part of the reference argument that is included in the\n   interpreted form SHOULD prefix the interpreted form.  It SHOULD also\n   be in the same form as the reference name argument.  This rule\n   permits the client to determine if the returned mailbox name is in\n   the context of the reference argument or if something about the\n   mailbox argument overrode the reference argument.  Without this rule,\n   the client would have to have knowledge of the server's naming\n   semantics including what characters are \"breakouts\" that override a\n   naming context.\n\n   Here are some examples of how references and mailbox names might be\n   interpreted on a UNIX-based server:\n\n            +==============+==============+===================+\n            | Reference    | Mailbox Name | Interpretation    |\n            +==============+==============+===================+\n            | ~smith/Mail/ | foo.*        | ~smith/Mail/foo.* |\n            +--------------+--------------+-------------------+\n            | archive/     | %            | archive/%         |\n            +--------------+--------------+-------------------+\n            | #news.       | comp.mail.*  | #news.comp.mail.* |\n            +--------------+--------------+-------------------+\n            | ~smith/Mail/ | /usr/doc/foo | /usr/doc/foo      |\n            +--------------+--------------+-------------------+\n            | archive/     | ~fred/Mail/* | ~fred/Mail/*      |\n            +--------------+--------------+-------------------+\n\n                                  Table 1\n\n   The first three examples above demonstrate interpretations in the\n   context of the reference argument.  Note that \"~smith/Mail\" SHOULD\n   NOT be transformed into something like \"/u2/users/smith/Mail\", or it\n   would be impossible for the client to determine that the\n   interpretation was in the context of the reference.\n\n   The character \"*\" is a wildcard and matches zero or more characters\n   at this position.  The character \"%\" is similar to \"*\", but it does\n   not match a hierarchy delimiter.  If the \"%\" wildcard is the last\n   character of a mailbox name argument, matching levels of hierarchy\n   are also returned.  If these levels of hierarchy are not also\n   selectable mailboxes, they are returned with the \\Noselect mailbox\n   name attribute (see the description of the LIST response\n   (Section 7.3.1) for more details).\n\n   Any syntactically valid pattern that is not accepted by a server for\n   any reason MUST be silently ignored, i.e., it results in no LIST\n   responses, and the LIST command still returns a tagged OK response.\n\n   Selection options tell the server to limit the mailbox names that are\n   selected by the LIST operation.  If selection options are used, the\n   mailboxes returned are those that match both the list of canonical\n   LIST patterns and the selection options.  Unless a particular\n   selection option provides special rules, the selection options are\n   cumulative: a mailbox that matches the mailbox patterns is selected\n   only if it also matches all of the selection options.  (An example of\n   a selection option with special rules is the RECURSIVEMATCH option.)\n\n   Return options control what information is returned for each matched\n   mailbox.  Return options MUST NOT cause the server to report\n   information about additional mailbox names other than those that\n   match the canonical LIST patterns and selection options.  If no\n   return options are specified, the client is only expecting\n   information about mailbox attributes.  The server MAY return other\n   information about the matched mailboxes, and clients MUST be able to\n   handle that situation.\n\n   Initial selection options and return options are defined in the\n   following subsections, and new ones will also be defined in\n   extensions.  Initial options defined in this document MUST be\n   supported.  Each non-initial option will be enabled by a capability\n   string (one capability may enable multiple options), and a client\n   MUST NOT send an option for which the server has not advertised\n   support.  A server MUST respond to options it does not recognize with\n   a BAD response.  The client SHOULD NOT specify any option more than\n   once; however, if the client does this, the server MUST act as if it\n   received the option only once.  The order in which options are\n   specified by the client is not significant.\n\n   In general, each selection option except RECURSIVEMATCH will have a\n   corresponding return option with the same name.  The REMOTE selection\n   option is an anomaly in this regard and does not have a corresponding\n   return option.  That is because it expands, rather than restricts,\n   the set of mailboxes that are returned.  Future extensions to this\n   specification should keep this parallelism in mind and define a pair\n   of corresponding selection and return options.\n\n   Server implementations are permitted to \"hide\" otherwise accessible\n   mailboxes from the wildcard characters, by preventing certain\n   characters or names from matching a wildcard in certain situations.\n   For example, a UNIX-based server might restrict the interpretation of\n   \"*\" so that an initial \"/\" character does not match.\n\n   The special name INBOX is included in the output from LIST, if INBOX\n   is supported by this server for this user and if the uppercase string\n   \"INBOX\" matches the interpreted reference and mailbox name arguments\n   with wildcards as described above.  The criteria for omitting INBOX\n   is whether SELECT INBOX will return a failure; it is not relevant\n   whether the user's real INBOX resides on this or some other server.\n\n6.3.9.1.  LIST Selection Options\n\n   The selection options defined in this specification are as follows:\n\n   SUBSCRIBED\n      Causes the LIST command to list subscribed names rather than the\n      existing mailboxes.  This will often be a subset of the actual\n      mailboxes.  It's also possible for this list to contain the names\n      of mailboxes that don't exist.  In any case, the list MUST include\n      exactly those mailbox names that match the canonical list pattern\n      and are subscribed to.\n\n      This option defines a mailbox attribute, \"\\Subscribed\", that\n      indicates that a mailbox name is subscribed to.  The \"\\Subscribed\"\n      attribute MUST be supported and MUST be accurately computed when\n      the SUBSCRIBED selection option is specified.\n\n      Note that the SUBSCRIBED selection option implies the SUBSCRIBED\n      return option (see below).\n\n   REMOTE\n      Causes the LIST command to show remote mailboxes as well as local\n      ones, as described in [RFC2193].  This option is intended to\n      replace the RLIST command and, in conjunction with the SUBSCRIBED\n      selection option, the RLSUB command.  Servers that don't support\n      the concept of remote mailboxes can ignore this option.\n\n      This option defines a mailbox attribute, \"\\Remote\", that indicates\n      that a mailbox is a remote mailbox.  The \"\\Remote\" attribute MUST\n      be accurately computed when the REMOTE option is specified.\n\n      The REMOTE selection option has no interaction with other options.\n      Its effect is to tell the server to apply the other options, if\n      any, to remote mailboxes, in addition to local ones.  In\n      particular, it has no interaction with RECURSIVEMATCH (see below).\n      A request for (REMOTE RECURSIVEMATCH) is invalid, because a\n      request for (RECURSIVEMATCH) is also invalid.  A request for\n      (REMOTE RECURSIVEMATCH SUBSCRIBED) is asking for all subscribed\n      mailboxes, both local and remote.\n\n   RECURSIVEMATCH\n      Forces the server to return information about parent mailboxes\n      that don't match other selection options but have some\n      submailboxes that do.  Information about children is returned in\n      the CHILDINFO extended data item, as described in Section 6.3.9.6.\n\n      Note 1:  In order for a parent mailbox to be returned, it still\n         has to match the canonical LIST pattern.\n\n      Note 2:  When returning the CHILDINFO extended data item, it\n         doesn't matter whether or not the submailbox matches the\n         canonical LIST pattern.  See also Example 9 in Section 6.3.9.8.\n\n      The RECURSIVEMATCH option MUST NOT occur as the only selection\n      option (or only with REMOTE), as it only makes sense when other\n      selection options are also used.  The server MUST return a BAD\n      tagged response in such case.\n\n      Note that even if the RECURSIVEMATCH option is specified, the\n      client MUST still be able to handle cases when a CHILDINFO\n      extended data item is returned and there are no submailboxes that\n      meet the selection criteria of the subsequent LIST command, as\n      they can be deleted/renamed after the LIST response was sent but\n      before the client had a chance to access them.\n\n6.3.9.2.  LIST Return Options\n\n   The return options defined in this specification are as follows:\n\n   SUBSCRIBED\n      Causes the LIST command to return subscription state for all\n      matching mailbox names.  The \"\\Subscribed\" attribute MUST be\n      supported and MUST be accurately computed when the SUBSCRIBED\n      return option is specified.  Furthermore, all other mailbox\n      attributes MUST be accurately computed (this differs from the\n      behavior of the obsolete LSUB command from [RFC3501]).  Note that\n      the above requirements don't override the requirement for the LIST\n      command to return results quickly (see Section 6.3.9), i.e.,\n      server implementations need to compute results quickly and\n      accurately.  For example, server implementors might need to create\n      quick access indices.\n\n   CHILDREN\n      Requests mailbox child information as originally proposed in\n      [RFC3348].  See Section 6.3.9.5, below, for details.\n\n   STATUS\n      Requests STATUS response for each matching mailbox.\n\n      This option takes STATUS data items as parameters.  For each\n      selectable mailbox matching the list pattern and selection\n      options, the server MUST return an untagged LIST response followed\n      by an untagged STATUS response containing the information\n      requested in the STATUS return option, except for some cases\n      described below.\n\n      If an attempted STATUS for a listed mailbox fails because the\n      mailbox can't be selected (e.g., if the \"l\" Access Control List\n      (ACL) right [RFC4314] is granted to the mailbox and the \"r\" right\n      is not granted, or is due to a race condition between LIST and\n      STATUS changing the mailbox to \\NoSelect), the STATUS response\n      MUST NOT be returned, and the LIST response MUST include the\n      \\NoSelect attribute.  This means the server may have to buffer the\n      LIST reply until it has successfully looked up the necessary\n      STATUS information.\n\n      If the server runs into unexpected problems while trying to look\n      up the STATUS information, it MAY drop the corresponding STATUS\n      reply.  In such a situation, the LIST command would still return a\n      tagged OK reply.\n\n      See the note in the discussion of the STATUS command in\n      Section 6.3.11 for information about obtaining status on the\n      currently selected mailbox.\n\n6.3.9.3.  General Principles for Returning LIST Responses\n\n   This section outlines several principles that can be used by server\n   implementations of this document to decide whether a LIST response\n   should be returned, as well as how many responses and what kind of\n   information they may contain.\n\n   1.  At most, one LIST response should be returned for each mailbox\n       name that matches the canonical LIST pattern.  Server\n       implementors must not assume that clients will be able to\n       assemble mailbox attributes and other information returned in\n       multiple LIST responses.\n\n   2.  There are only two reasons for including a matching mailbox name\n       in the responses to the LIST command (note that the server is\n       allowed to return unsolicited responses at any time, and such\n       responses are not governed by this rule):\n\n       A.  The mailbox name also satisfies the selection criteria.\n\n       B.  The mailbox name doesn't satisfy the selection criteria, but\n           it has at least one descendant mailbox name that satisfies\n           the selection criteria and that doesn't match the canonical\n           LIST pattern.\n\n           For more information on this case, see the CHILDINFO extended\n           data item described in Section 6.3.9.6.  Note that the\n           CHILDINFO extended data item can only be returned when the\n           RECURSIVEMATCH selection option is specified.\n\n   3.  Attributes returned in the same LIST response are treated\n       additively.  For example, the following response\n\n        S: * LIST (\\Subscribed \\NonExistent) \"/\" \"Fruit/Peach\"\n\n       means that the \"Fruit/Peach\" mailbox doesn't exist, but it is\n       subscribed.\n\n6.3.9.4.  Additional LIST-Related Requirements on Clients\n\n   All clients MUST treat a LIST attribute with a stronger meaning as\n   implying any attribute that can be inferred from it.  (See\n   Section 7.3.1 for the list of currently defined attributes.)  For\n   example, the client must treat the presence of the \\NoInferiors\n   attribute as if the \\HasNoChildren attribute was also sent by the\n   server.\n\n   The following table summarizes inference rules.\n\n                +====================+===================+\n                | returned attribute | implied attribute |\n                +====================+===================+\n                |    \\NoInferiors    |   \\HasNoChildren  |\n                +--------------------+-------------------+\n                |    \\NonExistent    |     \\NoSelect     |\n                +--------------------+-------------------+\n\n                                 Table 2\n\n6.3.9.5.  The CHILDREN Return Option\n\n   The CHILDREN return option is simply an indication that the client\n   wants information about whether or not mailboxes contain child\n   mailboxes; a server MAY provide it even if the option is not\n   specified.\n\n   Many IMAP clients present the user with a hierarchical view of the\n   mailboxes that a user has access to.  Rather than initially\n   presenting the entire mailbox hierarchy to the user, it is often\n   preferable to show the user a collapsed outline list of the mailbox\n   hierarchy (particularly if there is a large number of mailboxes).\n   The user can then expand the collapsed outline hierarchy as needed.\n   It is common to include a visual clue (such as a ''+'') within the\n   collapsed hierarchy to indicate that there are child mailboxes under\n   a particular mailbox.  When the visual clue is clicked, the hierarchy\n   list is expanded to show the child mailboxes.  The CHILDREN return\n   option provides a mechanism for a client to efficiently determine\n   whether a particular mailbox has children, without issuing a LIST \"\"\n   * or a LIST \"\" % for each mailbox name.  The CHILDREN return option\n   defines two new attributes that MUST be returned within a LIST\n   response: \\HasChildren and \\HasNoChildren.  Although these attributes\n   MAY be returned in response to any LIST command, the CHILDREN return\n   option is provided to indicate that the client particularly wants\n   this information.  If the CHILDREN return option is present, the\n   server MUST return these attributes even if their computation is\n   expensive.\n\n   \\HasChildren\n        The presence of this attribute indicates that the mailbox has\n        child mailboxes.  A server SHOULD NOT set this attribute if\n        there are child mailboxes and the user does not have permission\n        to access any of them.  In this case, \\HasNoChildren SHOULD be\n        used.  In many cases, however, a server may not be able to\n        efficiently compute whether a user has access to any child\n        mailbox.  Note that even though the \\HasChildren attribute for a\n        mailbox must be correct at the time of processing the mailbox, a\n        client must be prepared to deal with a situation when a mailbox\n        is marked with the \\HasChildren attribute, but no child mailbox\n        appears in the response to the LIST command.  This might happen,\n        for example, due to child mailboxes being deleted or made\n        inaccessible to the user (using access control) by another\n        client before the server is able to list them.\n\n   \\HasNoChildren\n        The presence of this attribute indicates that the mailbox has NO\n        child mailboxes that are accessible to the currently\n        authenticated user.\n\n   It is an error for the server to return both a \\HasChildren and a\n   \\HasNoChildren attribute in the same LIST response.\n\n   Note: the \\HasNoChildren attribute should not be confused with the\n   \\NoInferiors attribute, which indicates that no child mailboxes exist\n   now and none can be created in the future.\n\n6.3.9.6.  CHILDINFO Extended Data Item\n\n   The CHILDINFO extended data item MUST NOT be returned unless the\n   client has specified the RECURSIVEMATCH selection option.\n\n   The CHILDINFO extended data item in a LIST response describes the\n   selection criteria that has caused it to be returned and indicates\n   that the mailbox has at least one descendant mailbox that matches the\n   selection criteria.\n\n   Note: Some servers allow for mailboxes to exist without requiring\n   their parent to exist.  For example, the mailbox \"Customers/ABC\" can\n   exist while the mailbox \"Customers\" does not.  As the CHILDINFO\n   extended data item is not allowed if the RECURSIVEMATCH selection\n   option is not specified, such servers SHOULD use the \"\\NonExistent\n   \\HasChildren\" attribute pair to signal to the client that there is a\n   descendant mailbox that matches the selection criteria.  See Example\n   11 in Section 6.3.9.8.\n\n   The returned selection criteria allows the client to distinguish a\n   solicited response from an unsolicited one, as well as to distinguish\n   among solicited responses caused by multiple pipelined LIST commands\n   that specify different criteria.\n\n   Servers SHOULD only return a non-matching mailbox name along with\n   CHILDINFO if at least one matching child is not also being returned.\n   That is, servers SHOULD suppress redundant CHILDINFO responses.\n\n   Examples 8 and 10 in Section 6.3.9.8 demonstrate the difference\n   between the present CHILDINFO extended data item and the\n   \"\\HasChildren\" attribute.\n\n   The following table summarizes interaction between the \"\\NonExistent\"\n   attribute and CHILDINFO (the first column indicates whether the\n   parent mailbox exists):\n\n     +========+===========+====================+=====================+\n     | Exists | Meets the |  Has a child that  | Returned IMAP4rev2/ |\n     |        | selection |     meets the      |    LIST-EXTENDED    |\n     |        |  criteria | selection criteria |    attributes and   |\n     |        |           |                    |      CHILDINFO      |\n     +========+===========+====================+=====================+\n     |   no   |     no    |         no         |   no LIST response  |\n     |        |           |                    |       returned      |\n     +--------+-----------+--------------------+---------------------+\n     |  yes   |     no    |         no         |   no LIST response  |\n     |        |           |                    |       returned      |\n     +--------+-----------+--------------------+---------------------+\n     |   no   |    yes    |         no         |    (\\NonExistent    |\n     |        |           |                    |       <attr>)       |\n     +--------+-----------+--------------------+---------------------+\n     |  yes   |    yes    |         no         |       (<attr>)      |\n     +--------+-----------+--------------------+---------------------+\n     |   no   |     no    |        yes         |   (\\NonExistent) +  |\n     |        |           |                    |      CHILDINFO      |\n     +--------+-----------+--------------------+---------------------+\n     |  yes   |     no    |        yes         |    () + CHILDINFO   |\n     +--------+-----------+--------------------+---------------------+\n     |   no   |    yes    |        yes         |    (\\NonExistent    |\n     |        |           |                    | <attr>) + CHILDINFO |\n     +--------+-----------+--------------------+---------------------+\n     |  yes   |    yes    |        yes         |      (<attr>) +     |\n     |        |           |                    |      CHILDINFO      |\n     +--------+-----------+--------------------+---------------------+\n\n                                  Table 3\n\n   where <attr> is one or more attributes that correspond to the\n   selection criteria; for example, for the SUBSCRIBED option, the\n   <attr> is \\Subscribed.\n\n6.3.9.7.  OLDNAME Extended Data Item\n\n   The OLDNAME extended data item is included when a mailbox name is\n   created (with the CREATE command), renamed (with the RENAME command),\n   or deleted (with the DELETE command).  (When a mailbox is deleted,\n   the \"\\NonExistent\" attribute is also included.)  IMAP extensions can\n   specify other conditions when the OLDNAME extended data item should\n   be included.\n\n   If the server allows denormalized mailbox names (see Section 5.1) in\n   SELECT/EXAMINE, CREATE, RENAME, or DELETE, it SHOULD return an\n   unsolicited LIST response that includes the OLDNAME extended data\n   item, whenever the supplied mailbox name differs from the resulting\n   normalized mailbox name.  From the client point of view, this is\n   indistinguishable from another user renaming or deleting the mailbox,\n   as specified in the previous paragraph.\n\n   A deleted mailbox can be announced as follows:\n\n     S: * LIST (\\NonExistent) \".\" \"INBOX.DeletedMailbox\"\n\n   Example of a renamed mailbox:\n\n     S: * LIST () \"/\" \"NewMailbox\" (\"OLDNAME\" (\"OldMailbox\"))\n\n6.3.9.8.  LIST Command Examples\n\n   This example shows some uses of the basic LIST command:\n\n   Example:\n\n     C: A101 LIST \"\" \"\"\n     S: * LIST (\\Noselect) \"/\" \"\"\n     S: A101 OK LIST Completed\n     C: A102 LIST #news.comp.mail.misc \"\"\n     S: * LIST (\\Noselect) \".\" #news.\n     S: A102 OK LIST Completed\n     C: A103 LIST /usr/staff/jones \"\"\n     S: * LIST (\\Noselect) \"/\" /\n     S: A103 OK LIST Completed\n     C: A202 LIST ~/Mail/ %\n     S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n     S: * LIST () \"/\" ~/Mail/meetings\n     S: A202 OK LIST completed\n\n   Extended examples:\n\n   1:   The first example shows the complete local hierarchy that will\n        be used for the other examples.\n\n        C: A01 LIST \"\" \"*\"\n        S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n        S: * LIST () \"/\" \"Fruit\"\n        S: * LIST () \"/\" \"Fruit/Apple\"\n        S: * LIST () \"/\" \"Fruit/Banana\"\n        S: * LIST () \"/\" \"Tofu\"\n        S: * LIST () \"/\" \"Vegetable\"\n        S: * LIST () \"/\" \"Vegetable/Broccoli\"\n        S: * LIST () \"/\" \"Vegetable/Corn\"\n        S: A01 OK done\n\n   2:   In the next example, we will see the subscribed mailboxes.  This\n        is similar to, but not equivalent with, the now deprecated <LSUB\n        \"\" \"*\"> (see [RFC3501] for more details on the LSUB command).\n        Note that the mailbox called \"Fruit/Peach\" is subscribed to, but\n        it does not actually exist (perhaps it was deleted while still\n        subscribed).  The \"Fruit\" mailbox is not subscribed to, but it\n        has two subscribed children.  The \"Vegetable\" mailbox is\n        subscribed and has two children; one of them is subscribed as\n        well.\n\n        C: A02 LIST (SUBSCRIBED) \"\" \"*\"\n        S: * LIST (\\Marked \\NoInferiors \\Subscribed) \"/\" \"inbox\"\n        S: * LIST (\\Subscribed) \"/\" \"Fruit/Banana\"\n        S: * LIST (\\Subscribed \\NonExistent) \"/\" \"Fruit/Peach\"\n        S: * LIST (\\Subscribed) \"/\" \"Vegetable\"\n        S: * LIST (\\Subscribed) \"/\" \"Vegetable/Broccoli\"\n        S: A02 OK done\n\n   3:   The next example shows the use of the CHILDREN option.  The\n        client, without having to list the second level of hierarchy,\n        now knows which of the top-level mailboxes have submailboxes\n        (children) and which do not.  Note that it's not necessary for\n        the server to return the \\HasNoChildren attribute for the inbox,\n        because the \\NoInferiors attribute already implies that and has\n        a stronger meaning.\n\n        C: A03 LIST () \"\" \"%\" RETURN (CHILDREN)\n        S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n        S: * LIST (\\HasChildren) \"/\" \"Fruit\"\n        S: * LIST (\\HasNoChildren) \"/\" \"Tofu\"\n        S: * LIST (\\HasChildren) \"/\" \"Vegetable\"\n        S: A03 OK done\n\n   4:   In this example, we see more mailboxes that reside on another\n        server.  This is similar to the command <RLIST \"\" \"%\">.\n\n        C: A04 LIST (REMOTE) \"\" \"%\" RETURN (CHILDREN)\n        S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n        S: * LIST (\\HasChildren) \"/\" \"Fruit\"\n        S: * LIST (\\HasNoChildren) \"/\" \"Tofu\"\n        S: * LIST (\\HasChildren) \"/\" \"Vegetable\"\n        S: * LIST (\\Remote \\HasNoChildren) \"/\" \"Bread\"\n        S: * LIST (\\HasChildren \\Remote) \"/\" \"Meat\"\n        S: A04 OK done\n\n   5:   The following example also requests the server to include\n        mailboxes that reside on another server.  The server returns\n        information about all mailboxes that are subscribed.  This is\n        similar to the command <RLSUB \"\" \"*\"> (see [RFC2193] for more\n        details on RLSUB).  We also see the use of two selection\n        options.\n\n        C: A05 LIST (REMOTE SUBSCRIBED) \"\" \"*\"\n        S: * LIST (\\Marked \\NoInferiors \\Subscribed) \"/\" \"inbox\"\n        S: * LIST (\\Subscribed) \"/\" \"Fruit/Banana\"\n        S: * LIST (\\Subscribed \\NonExistent) \"/\" \"Fruit/Peach\"\n        S: * LIST (\\Subscribed) \"/\" \"Vegetable\"\n        S: * LIST (\\Subscribed) \"/\" \"Vegetable/Broccoli\"\n        S: * LIST (\\Remote \\Subscribed) \"/\" \"Bread\"\n        S: A05 OK done\n\n   6:   The following example requests the server to include mailboxes\n        that reside on another server.  The server is asked to return\n        subscription information for all returned mailboxes.  This is\n        different from the example above.\n\n        Note that the output of this command is not a superset of the\n        output in the previous example, as it doesn't include a LIST\n        response for the non-existent \"Fruit/Peach\".\n\n        C: A06 LIST (REMOTE) \"\" \"*\" RETURN (SUBSCRIBED)\n        S: * LIST (\\Marked \\NoInferiors \\Subscribed) \"/\" \"inbox\"\n        S: * LIST () \"/\" \"Fruit\"\n        S: * LIST () \"/\" \"Fruit/Apple\"\n        S: * LIST (\\Subscribed) \"/\" \"Fruit/Banana\"\n        S: * LIST () \"/\" \"Tofu\"\n        S: * LIST (\\Subscribed) \"/\" \"Vegetable\"\n        S: * LIST (\\Subscribed) \"/\" \"Vegetable/Broccoli\"\n        S: * LIST () \"/\" \"Vegetable/Corn\"\n        S: * LIST (\\Remote \\Subscribed) \"/\" \"Bread\"\n        S: * LIST (\\Remote) \"/\" \"Meat\"\n        S: A06 OK done\n\n   7:   The following example demonstrates the difference between the\n        \\HasChildren attribute and the CHILDINFO extended data item.\n\n        Let's assume there is the following hierarchy:\n\n        C: C01 LIST \"\" \"*\"\n        S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n        S: * LIST () \"/\" \"Foo\"\n        S: * LIST () \"/\" \"Foo/Bar\"\n        S: * LIST () \"/\" \"Foo/Baz\"\n        S: * LIST () \"/\" \"Moo\"\n        S: C01 OK done\n\n        If the client asks RETURN (CHILDREN), it will get this:\n\n        C: CA3 LIST \"\" \"%\" RETURN (CHILDREN)\n        S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n        S: * LIST (\\HasChildren) \"/\" \"Foo\"\n        S: * LIST (\\HasNoChildren) \"/\" \"Moo\"\n        S: CA3 OK done\n\n        A)  Let's also assume that the mailbox \"Foo/Baz\" is the only\n            subscribed mailbox.  Then we get this result:\n\n             C: C02 LIST (SUBSCRIBED) \"\" \"*\"\n             S: * LIST (\\Subscribed) \"/\" \"Foo/Baz\"\n             S: C02 OK done\n\n            Now, if the client issues <LIST (SUBSCRIBED) \"\" \"%\">, the\n            server will return no mailboxes (as the mailboxes \"Moo\",\n            \"Foo\", and \"Inbox\" are NOT subscribed).  However, if the\n            client issues this:\n\n             C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n             S: * LIST () \"/\" \"Foo\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n             S: C04 OK done\n\n            (that is, the mailbox \"Foo\" is not subscribed, but it has a\n            child that is), then A1 or A2 occurs.\n\n            A1)  If the mailbox \"Foo\" had also been subscribed, the last\n                 command would return this:\n\n                 C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n                 S: * LIST (\\Subscribed) \"/\" \"Foo\" (\"CHILDINFO\"\n                     (\"SUBSCRIBED\"))\n                 S: C04 OK done\n\n                 or even this:\n\n                 C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n                 S: * LIST (\\Subscribed \\HasChildren) \"/\" \"Foo\"\n                     (\"CHILDINFO\" (\"SUBSCRIBED\"))\n                 S: C04 OK done\n\n            A2)  If we assume instead that the mailbox \"Foo\" is not part\n                 of the original hierarchy and is not subscribed, the\n                 last command will give this result:\n\n                 C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\"\n                 S: * LIST (\\NonExistent) \"/\" \"Foo\" (\"CHILDINFO\"\n                     (\"SUBSCRIBED\"))\n                 S: C04 OK done\n\n        B)  Now, let's assume that no mailbox is subscribed.  In this\n            case, the command <LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\">\n            will return no responses, as there are no subscribed\n            children (even though \"Foo\" has children).\n\n        C)  And finally, suppose that only the mailboxes \"Foo\" and \"Moo\"\n            are subscribed.  In that case, we see this result:\n\n             C: C04 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" \"%\" RETURN\n                 (CHILDREN)\n             S: * LIST (\\HasChildren \\Subscribed) \"/\" \"Foo\"\n             S: * LIST (\\HasNoChildren \\Subscribed) \"/\" \"Moo\"\n             S: C04 OK done\n\n            (which means that the mailbox \"Foo\" has children, but none\n            of them is subscribed).\n\n   8:   The following example demonstrates that the CHILDINFO extended\n        data item is returned whether or not child mailboxes match the\n        canonical LIST pattern.\n\n        Let's assume there is the following hierarchy:\n\n        C: D01 LIST \"\" \"*\"\n        S: * LIST (\\Marked \\NoInferiors) \"/\" \"inbox\"\n        S: * LIST () \"/\" \"foo2\"\n        S: * LIST () \"/\" \"foo2/bar1\"\n        S: * LIST () \"/\" \"foo2/bar2\"\n        S: * LIST () \"/\" \"baz2\"\n        S: * LIST () \"/\" \"baz2/bar2\"\n        S: * LIST () \"/\" \"baz2/bar22\"\n        S: * LIST () \"/\" \"baz2/bar222\"\n        S: * LIST () \"/\" \"eps2\"\n        S: * LIST () \"/\" \"eps2/mamba\"\n        S: * LIST () \"/\" \"qux2/bar2\"\n        S: D01 OK done\n\n        And that the following mailboxes are subscribed:\n\n        C: D02 LIST (SUBSCRIBED) \"\" \"*\"\n        S: * LIST (\\Subscribed) \"/\" \"foo2/bar1\"\n        S: * LIST (\\Subscribed) \"/\" \"foo2/bar2\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar2\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar22\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar222\"\n        S: * LIST (\\Subscribed) \"/\" \"eps2\"\n        S: * LIST (\\Subscribed) \"/\" \"eps2/mamba\"\n        S: * LIST (\\Subscribed) \"/\" \"qux2/bar2\"\n        S: D02 OK done\n\n        The client issues the following command first:\n\n        C: D03 LIST (RECURSIVEMATCH SUBSCRIBED) \"\" \"*2\"\n        S: * LIST () \"/\" \"foo2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: * LIST (\\Subscribed) \"/\" \"foo2/bar2\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar2\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar22\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar222\"\n        S: * LIST (\\Subscribed) \"/\" \"eps2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: * LIST (\\Subscribed) \"/\" \"qux2/bar2\"\n        S: D03 OK done\n\n        and the server may also include the following (but this would\n        violate a restriction in Section 6.3.9.6, because CHILDINFO is\n        redundant):\n\n        S: * LIST () \"/\" \"baz2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: * LIST (\\NonExistent) \"/\" \"qux2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n\n        The CHILDINFO extended data item is returned for mailboxes\n        \"foo2\", \"baz2\", and \"eps2\" because all of them have subscribed\n        children, even though for the mailbox \"foo2\", only one of the\n        two subscribed children matches the pattern; for the mailbox\n        \"baz2\", all of the subscribed children match the pattern; and\n        for the mailbox \"eps2\", none of the subscribed children match\n        the pattern.\n\n        Note that if the client issues the following:\n\n        C: D03 LIST (RECURSIVEMATCH SUBSCRIBED) \"\" \"*\"\n        S: * LIST () \"/\" \"foo2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: * LIST (\\Subscribed) \"/\" \"foo2/bar1\"\n        S: * LIST (\\Subscribed) \"/\" \"foo2/bar2\"\n        S: * LIST () \"/\" \"baz2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar2\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar22\"\n        S: * LIST (\\Subscribed) \"/\" \"baz2/bar222\"\n        S: * LIST (\\Subscribed) \"/\" \"eps2\" (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: * LIST (\\Subscribed) \"/\" \"eps2/mamba\"\n        S: * LIST (\\Subscribed) \"/\" \"qux2/bar2\"\n        S: D03 OK done\n\n        the LIST responses for mailboxes \"foo2\", \"baz2\", and \"eps2\"\n        still have the CHILDINFO extended data item, even though this\n        information is redundant and the client can determine it by\n        itself.\n\n   9:   The following example shows usage of an extended syntax for the\n        mailbox pattern.  It also demonstrates that the presence of the\n        CHILDINFO extended data item doesn't necessarily imply\n        \\HasChildren.\n\n        C: a1 LIST \"\" (\"foo\")\n        S: * LIST () \"/\" foo\n        S: a1 OK done\n\n        C: a2 LIST (SUBSCRIBED) \"\" \"foo/*\"\n        S: * LIST (\\Subscribed \\NonExistent) \"/\" foo/bar\n        S: a2 OK done\n\n        C: a3 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" foo RETURN (CHILDREN)\n        S: * LIST (\\HasNoChildren) \"/\" foo (\"CHILDINFO\" (\"SUBSCRIBED\"))\n        S: a3 OK done\n\n   10:  The following example shows how a server that supports missing\n        mailbox hierarchy elements can signal to a client that didn't\n        specify the RECURSIVEMATCH selection option that there is a\n        child mailbox that matches the selection criteria.\n\n        C: a1 LIST (REMOTE) \"\" *\n        S: * LIST () \"/\" music/rock\n        S: * LIST (\\Remote) \"/\" also/jazz\n        S: a1 OK done\n\n        C: a2 LIST () \"\" %\n        S: * LIST (\\NonExistent \\HasChildren) \"/\" music\n        S: a2 OK done\n\n        C: a3 LIST (REMOTE) \"\" %\n        S: * LIST (\\NonExistent \\HasChildren) \"/\" music\n        S: * LIST (\\NonExistent \\HasChildren) \"/\" also\n        S: a3 OK done\n\n        C: a3.1 LIST \"\" (% music/rock)\n        S: * LIST () \"/\" music/rock\n        S: a3.1 OK done\n\n        Because \"music/rock\" is the only mailbox under \"music\", there's\n        no need for the server to also return \"music\".  However, clients\n        must handle both cases.\n\n   11:  The following examples show use of the STATUS return option.\n\n        C: A01 LIST \"\" % RETURN (STATUS (MESSAGES UNSEEN))\n        S: * LIST () \".\"  \"INBOX\"\n        S: * STATUS \"INBOX\" (MESSAGES 17 UNSEEN 16)\n        S: * LIST () \".\" \"foo\"\n        S: * STATUS \"foo\" (MESSAGES 30 UNSEEN 29)\n        S: * LIST (\\NoSelect) \".\" \"bar\"\n        S: A01 OK List completed.\n\n        The \"bar\" mailbox isn't selectable, so it has no STATUS reply.\n\n        C: A02 LIST (SUBSCRIBED RECURSIVEMATCH) \"\" % RETURN (STATUS\n             (MESSAGES))\n        S: * LIST (\\Subscribed) \".\"  \"INBOX\"\n        S: * STATUS \"INBOX\" (MESSAGES 17)\n        S: * LIST () \".\" \"foo\" (CHILDINFO (\"SUBSCRIBED\"))\n        S: A02 OK List completed.\n\n        The LIST reply for \"foo\" is returned because it has matching\n        children, but no STATUS reply is returned because \"foo\" itself\n        doesn't match the selection criteria.\n\n6.3.10.  NAMESPACE Command\n\n   Arguments:    none\n\n   Responses:    REQUIRED untagged responses:  NAMESPACE\n\n   Result:       OK -  command completed\n                 NO -  Can't complete the command\n                 BAD -  arguments invalid\n\n   The NAMESPACE command causes a single untagged NAMESPACE response to\n   be returned.  The untagged NAMESPACE response contains the prefix and\n   hierarchy delimiter to the server's Personal Namespace(s), Other\n   Users' Namespace(s), and Shared Namespace(s) that the server wishes\n   to expose.  The response will contain a NIL for any namespace class\n   that is not available.  The namespace-response-extensions ABNF non-\n   terminal is defined for extensibility and MAY be included in the\n   NAMESPACE response.\n\n   Example 1:\n\n   In this example, a server supports a single Personal Namespace.  No\n   leading prefix is used on personal mailboxes, and \"/\" is the\n   hierarchy delimiter.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")) NIL NIL\n     S: A001 OK NAMESPACE command completed\n\n   Example 2:\n\n   A user logged on anonymously to a server.  No personal mailboxes are\n   associated with the anonymous user, and the user does not have access\n   to the Other Users' Namespace.  No prefix is required to access\n   shared mailboxes, and the hierarchy delimiter is \".\"\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE NIL NIL ((\"\" \".\"))\n     S: A001 OK NAMESPACE command completed\n\n   Example 3:\n\n   A server that contains a Personal Namespace and a single Shared\n   Namespace.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")) NIL ((\"Public Folders/\" \"/\"))\n     S: A001 OK NAMESPACE command completed\n\n   Example 4:\n\n   A server that contains a Personal Namespace, Other Users' Namespace,\n   and multiple Shared Namespaces.  Note that the hierarchy delimiter\n   used within each namespace can be different.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")) ((\"~\" \"/\")) ((\"#shared/\" \"/\")\n         (\"#public/\" \"/\")(\"#ftp/\" \"/\")(\"#news.\" \".\"))\n     S: A001 OK NAMESPACE command completed\n\n   The prefix string allows a client to do things such as automatically\n   create personal mailboxes or LIST all available mailboxes within a\n   namespace.\n\n   Example 5:\n\n   A server that supports only the Personal Namespace, with a leading\n   prefix of INBOX to personal mailboxes and a hierarchy delimiter of\n   \".\".\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"INBOX.\" \".\")) NIL  NIL\n     S: A001 OK NAMESPACE command completed\n\n   Automatically create a mailbox to store sent items.\n\n     C: A002 CREATE \"INBOX.Sent Mail\"\n     S: A002 OK CREATE command completed\n\n   Although a server will typically support only a single Personal\n   Namespace, and a single Other User's Namespace, circumstances exist\n   where there MAY be multiples of these, and a client MUST be prepared\n   for them.  If a client is configured such that it is required to\n   create a certain mailbox, there can be circumstances where it is\n   unclear which Personal Namespaces it should create the mailbox in.\n   In these situations, a client SHOULD let the user select which\n   namespaces to create the mailbox in, or just use the first Personal\n   Namespace.\n\n   Example 6:\n\n   In this example, a server supports two Personal Namespaces.  In\n   addition to the regular Personal Namespace, the user has an\n   additional Personal Namespace that allows access to mailboxes in an\n   MH format mailstore.\n\n   The client is configured to save a copy of all mail sent by the user\n   into a mailbox with the \\Sent attribute (see Section 7.3.1).\n   Furthermore, after a message is deleted from a mailbox, the client is\n   configured to move that message to a mailbox with the \\Trash\n   attribute.  The server signals with the \\NonExistent mailbox\n   attribute that the corresponding mailboxes don't exist yet and that\n   it is possible to create them.  Once created, they could be used for\n   \\Sent or \\Trash purposes, and the server will no longer include the\n   \\NonExistent mailbox attribute for them.\n\n   Note that this example demonstrates how some extension parameters can\n   be passed to further describe the #mh namespace.  See the fictitious\n   \"X-PARAM\" extension parameter.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")(\"#mh/\" \"/\" \"X-PARAM\"\n         (\"FLAG1\" \"FLAG2\"))) NIL NIL\n     S: A001 OK NAMESPACE command completed\n\n     C: A002 LIST (SPECIAL-USE) \"\" \"*\"\n     S: * LIST (\\NonExistent \\Archive) \"/\" Archives\n     S: * LIST (\\NonExistent \\Drafts) \"/\" Drafts\n     S: * LIST (\\NonExistent \\Junk) \"/\" Junk\n     S: * LIST (\\NonExistent \\Sent) \"/\" \"Sent Mail\"\n     S: * LIST (\\NonExistent \\Trash) \"/\" \"Deleted Items\"\n     S: A002 OK LIST Completed\n\n     C: A003 LIST (SPECIAL-USE) \"#mh/\" \"*\"\n     S: * LIST (\\NonExistent \\Archive) \"/\" \"#mh/Archives\"\n     S: * LIST (\\NonExistent \\Drafts) \"/\" \"#mh/Drafts\"\n     S: * LIST (\\NonExistent \\Junk) \"/\" \"#mh/Junk\"\n     S: * LIST (\\NonExistent \\Sent) \"/\" \"#mh/Sent Mail\"\n     S: * LIST (\\NonExistent \\Trash) \"/\" \"#mh/Deleted Items\"\n     S: A003 OK LIST Completed\n\n   It is desired to keep only one copy of sent mail.  It is unclear\n   which Personal Namespace the client should use to create the 'Sent\n   Mail' mailbox.  The user is prompted to select a namespace, and only\n   one 'Sent Mail' mailbox is created.\n\n     C: A004 CREATE \"Sent Mail\"\n     S: A004 OK CREATE command completed\n\n   The client is designed so that it keeps two 'Deleted Items'\n   mailboxes, one for each namespace.\n\n     C: A005 CREATE \"Delete Items\"\n     S: A005 OK CREATE command completed\n\n     C: A006 CREATE \"#mh/Deleted Items\"\n     S: A006 OK CREATE command completed\n\n   The next level of hierarchy following the Other Users' Namespace\n   prefix SHOULD consist of <username>, where <username> is a user name\n   as per the LOGIN or AUTHENTICATE command.\n\n   A client can construct a LIST command by appending a \"%\" to the Other\n   Users' Namespace prefix to discover the Personal Namespaces of other\n   users that are available to the currently authenticated user.\n\n   In response to such a LIST command, a server SHOULD NOT return user\n   names that have not granted access to their personal mailboxes to the\n   user in question.\n\n   A server MAY return a LIST response containing only the names of\n   users that have explicitly granted access to the user in question.\n\n   Alternatively, a server MAY return NO to such a LIST command,\n   requiring that a user name be included with the Other Users'\n   Namespace prefix before listing any other user's mailboxes.\n\n   Example 7:\n\n   A server that supports providing a list of other user's mailboxes\n   that are accessible to the currently logged on user.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")) ((\"Other Users/\" \"/\")) NIL\n     S: A001 OK NAMESPACE command completed\n\n     C: A002 LIST \"\" \"Other Users/%\"\n     S: * LIST () \"/\" \"Other Users/Mike\"\n     S: * LIST () \"/\" \"Other Users/Karen\"\n     S: * LIST () \"/\" \"Other Users/Matthew\"\n     S: * LIST () \"/\" \"Other Users/Tesa\"\n     S: A002 OK LIST command completed\n\n   Example 8:\n\n   A server that does not support providing a list of other user's\n   mailboxes that are accessible to the currently logged on user.  The\n   mailboxes are listable if the client includes the name of the other\n   user with the Other Users' Namespace prefix.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")) ((\"#Users/\" \"/\")) NIL\n     S: A001 OK NAMESPACE command completed\n\n   In this example, the currently logged on user has access to the\n   Personal Namespace of user Mike, but the server chose to suppress\n   this information in the LIST response.  However, by appending the\n   user name Mike (received through user input) to the Other Users'\n   Namespace prefix, the client is able to get a listing of the personal\n   mailboxes of user Mike.\n\n     C: A002 LIST \"\" \"#Users/%\"\n     S: A002 NO The requested item could not be found.\n\n     C: A003 LIST \"\" \"#Users/Mike/%\"\n     S: * LIST () \"/\" \"#Users/Mike/INBOX\"\n     S: * LIST () \"/\" \"#Users/Mike/Foo\"\n     S: A003 OK LIST command completed.\n\n   A prefix string might not contain a hierarchy delimiter, because in\n   some cases, it is not needed as part of the prefix.\n\n   Example 9:\n\n   A server that allows access to the Other Users' Namespace by\n   prefixing the others' mailboxes with a '~' followed by <username>,\n   where <username> is a user name as per the LOGIN or AUTHENTICATE\n   command.\n\n     C: A001 NAMESPACE\n     S: * NAMESPACE ((\"\" \"/\")) ((\"~\" \"/\")) NIL\n     S: A001 OK NAMESPACE command completed\n\n   List the mailboxes for user mark\n\n     C: A002 LIST \"\" \"~mark/%\"\n     S: * LIST () \"/\" \"~mark/INBOX\"\n     S: * LIST () \"/\" \"~mark/foo\"\n     S: A002 OK LIST command completed\n\n6.3.11.  STATUS Command\n\n   Arguments:    mailbox name\n\n                 status data item names\n\n   Responses:    REQUIRED untagged responses:  STATUS\n\n   Result:       OK -  status completed\n                 NO -  status failure: no status for that name\n                 BAD -  command unknown or arguments invalid\n\n   The STATUS command requests the status of the indicated mailbox.  It\n   does not change the currently selected mailbox, nor does it affect\n   the state of any messages in the queried mailbox.\n\n   The STATUS command provides an alternative to opening a second\n   IMAP4rev2 connection and doing an EXAMINE command on a mailbox to\n   query that mailbox's status without deselecting the current mailbox\n   in the first IMAP4rev2 connection.\n\n   Unlike the LIST command, the STATUS command is not guaranteed to be\n   fast in its response.  Under certain circumstances, it can be quite\n   slow.  In some implementations, the server is obliged to open the\n   mailbox as \"read-only\" internally to obtain certain status\n   information.  Also unlike the LIST command, the STATUS command does\n   not accept wildcards.\n\n      Note: The STATUS command is intended to access the status of\n      mailboxes other than the currently selected mailbox.  Because the\n      STATUS command can cause the mailbox to be opened internally, and\n      because this information is available by other means on the\n      selected mailbox, the STATUS command SHOULD NOT be used on the\n      currently selected mailbox.  However, servers MUST be able to\n      execute the STATUS command on the selected mailbox.  (This might\n      also implicitly happen when the STATUS return option is used in a\n      LIST command.)\n\n      The STATUS command MUST NOT be used as a \"check for new messages\n      in the selected mailbox\" operation (refer to Sections 7 and 7.4.1\n      for more information about the proper method for new message\n      checking).\n\n      STATUS SIZE (see below) can take a significant amount of time,\n      depending upon server implementation.  Clients should use STATUS\n      SIZE cautiously.\n\n   The currently defined status data items that can be requested are:\n\n   MESSAGES\n      The number of messages in the mailbox.\n\n   UIDNEXT\n      The next unique identifier value of the mailbox.  Refer to\n      Section 2.3.1.1 for more information.\n\n   UIDVALIDITY\n      The unique identifier validity value of the mailbox.  Refer to\n      Section 2.3.1.1 for more information.\n\n   UNSEEN\n      The number of messages that do not have the \\Seen flag set.\n\n   DELETED\n      The number of messages that have the \\Deleted flag set.\n\n   SIZE\n      The total size of the mailbox in octets.  This is not strictly\n      required to be an exact value, but it MUST be equal to or greater\n      than the sum of the values of the RFC822.SIZE FETCH message data\n      items (see Section 6.4.5) of all messages in the mailbox.\n\n   Example:\n\n     C: A042 STATUS blurdybloop (UIDNEXT MESSAGES)\n     S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)\n     S: A042 OK STATUS completed\n\n6.3.12.  APPEND Command\n\n   Arguments:    mailbox name\n\n                 OPTIONAL flag parenthesized list\n\n                 OPTIONAL date/time string\n\n                 message literal\n\n   Responses:    OPTIONAL untagged response:  LIST\n\n   Result:       OK -  append completed\n                 NO -  append error: can't append to that mailbox, error\n                    in flags or date/time or message text\n                 BAD -  command unknown or arguments invalid\n\n   The APPEND command appends the literal argument as a new message to\n   the end of the specified destination mailbox.  This argument SHOULD\n   be in the format of an [RFC5322] or [I18N-HDRS] message.  8-bit\n   characters are permitted in the message.  A server implementation\n   that is unable to preserve 8-bit data properly MUST be able to\n   reversibly convert 8-bit APPEND data to 7 bits using a [MIME-IMB]\n   content transfer encoding.\n\n      Note: There may be exceptions, such as draft messages, in which\n      required [RFC5322] header fields are omitted in the message\n      literal argument to APPEND.  The full implications of doing so\n      must be understood and carefully weighed.\n\n   If a flag parenthesized list is specified, the flags SHOULD be set in\n   the resulting message; otherwise, the flag list of the resulting\n   message is set to \"empty\" by default.\n\n   If a date-time is specified, the internal date SHOULD be set in the\n   resulting message; otherwise, the internal date of the resulting\n   message is set to the current date and time by default.\n\n   If the append is unsuccessful for any reason, the mailbox MUST be\n   restored to its state before the APPEND attempt (other than possibly\n   keeping the changed mailbox's UIDNEXT value); no partial appending is\n   permitted.\n\n   If the destination mailbox does not exist, a server MUST return an\n   error and MUST NOT automatically create the mailbox.  Unless it is\n   certain that the destination mailbox cannot be created, the server\n   MUST send the response code \"[TRYCREATE]\" as the prefix of the text\n   of the tagged NO response.  This gives a hint to the client that it\n   can attempt a CREATE command and retry the APPEND if the CREATE is\n   successful.\n\n   On successful completion of an APPEND, the server returns an\n   APPENDUID response code (see Section 7.1), unless otherwise specified\n   below.\n\n   In the case of a mailbox that has permissions set so that the client\n   can APPEND to the mailbox, but not SELECT or EXAMINE it, the server\n   MUST NOT send an APPENDUID response code as it would disclose\n   information about the mailbox.\n\n   In the case of a mailbox that has UIDNOTSTICKY status (see\n   Section 7.1), the server MAY omit the APPENDUID response code as it\n   is not meaningful.\n\n   If the mailbox is currently selected, normal new message actions\n   SHOULD occur.  Specifically, the server SHOULD notify the client\n   immediately via an untagged EXISTS response.  If the server does not\n   do so, the client MAY issue a NOOP command after one or more APPEND\n   commands.\n\n   If the server decides to convert (normalize) the mailbox name, it\n   SHOULD return an untagged LIST with an OLDNAME extended data item,\n   with the OLDNAME value being the supplied mailbox name and the name\n   parameter being the normalized mailbox name.  (See Section 6.3.9.7\n   for more details.)\n\n   Example:\n\n     C: A003 APPEND saved-messages (\\Seen) {326}\n     S: + Ready for literal data\n     C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n     C: From: Fred Foobar <foobar@Blurdybloop.example>\n     C: Subject: afternoon meeting\n     C: To: mooch@owatagu.siam.edu.example\n     C: Message-Id: <B27397-0100000@Blurdybloop.example>\n     C: MIME-Version: 1.0\n     C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n     C:\n     C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n     C:\n     S: A003 OK APPEND completed\n\n   Example:\n\n     C: A003 APPEND saved-messages (\\Seen) {297+}\n     C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n     C: From: Fred Foobar <foobar@example.com>\n     C: Subject: afternoon meeting\n     C: To: mooch@example.com\n     C: Message-Id: <B27397-0100000@example.com>\n     C: MIME-Version: 1.0\n     C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n     C:\n     C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n     C:\n     S: A003 OK [APPENDUID 38505 3955] APPEND completed\n     C: A004 COPY 2:4 meeting\n     S: A004 OK [COPYUID 38505 304,319:320 3956:3958] Done\n     C: A005 UID COPY 305:310 meeting\n     S: A005 OK No matching messages, so nothing copied\n     C: A006 COPY 2 funny\n     S: A006 OK Done\n     C: A007 SELECT funny\n     S: * 1 EXISTS\n     S: * OK [UIDVALIDITY 3857529045] Validity session-only\n     S: * OK [UIDNEXT 2] Predicted next UID\n     S: * NO [UIDNOTSTICKY] Non-persistent UIDs\n     S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n     S: * OK [PERMANENTFLAGS (\\Deleted \\Seen)] Limited\n     S: * LIST () \".\" funny\n     S: A007 OK [READ-WRITE] SELECT completed\n\n   In this example, A003 and A004 demonstrate successful appending and\n   copying to a mailbox that returns the UIDs assigned to the messages.\n   A005 is an example in which no messages were copied; this is because\n   in A003, we see that message 2 had UID 304, and message 3 had UID\n   319; therefore, UIDs 305 through 310 do not exist (refer to\n   Section 2.3.1.1 for further explanation).  A006 is an example of a\n   message being copied that did not return a COPYUID; and, as expected,\n   A007 shows that the mail store containing that mailbox does not\n   support persistent UIDs.\n\n      |  Note: The APPEND command is not used for message delivery,\n      |  because it does not provide a mechanism to transfer [SMTP]\n      |  envelope information.\n\n6.3.13.  IDLE Command\n\n   Arguments:    none\n\n   Responses:    continuation data will be requested; the client sends\n                 the continuation data \"DONE\" to end the command\n\n   Result:       OK -  IDLE completed after client sent \"DONE\"\n                 NO -  failure: the server will not allow the IDLE\n                    command at this time\n                 BAD -  command unknown or arguments invalid\n\n   Without the IDLE command, a client would need to poll the server for\n   changes to the selected mailbox (new mail, deletions, and flag\n   changes).  It's often more desirable to have the server transmit\n   updates to the client in real time.  This allows a user to see new\n   mail immediately.  The IDLE command allows a client to tell the\n   server that it's ready to accept such real-time updates.\n\n   The IDLE command is sent from the client to the server when the\n   client is ready to accept unsolicited update messages.  The server\n   requests a response to the IDLE command using the continuation (\"+\")\n   response.  The IDLE command remains active until the client responds\n   to the continuation, and as long as an IDLE command is active, the\n   server is now free to send untagged EXISTS, EXPUNGE, FETCH, and other\n   responses at any time.  If the server chooses to send unsolicited\n   FETCH responses, they MUST include a UID FETCH item.\n\n   The IDLE command is terminated by the receipt of a \"DONE\"\n   continuation from the client; such response satisfies the server's\n   continuation request.  At that point, the server MAY send any\n   remaining queued untagged responses and then MUST immediately send\n   the tagged response to the IDLE command and prepare to process other\n   commands.  As for other commands, the processing of any new command\n   may cause the sending of unsolicited untagged responses, subject to\n   the ambiguity limitations.  The client MUST NOT send a command while\n   the server is waiting for the DONE, since the server will not be able\n   to distinguish a command from a continuation.\n\n   The server MAY consider a client inactive if it has an IDLE command\n   running, and if such a server has an inactivity timeout, it MAY log\n   the client off implicitly at the end of its timeout period.  Because\n   of that, clients using IDLE are advised to terminate IDLE and reissue\n   it at least every 29 minutes to avoid being logged off.  This still\n   allows a client to receive immediate mailbox updates even though it\n   need only \"poll\" at half hour intervals.\n\n   Example:\n\n     C: A001 SELECT INBOX\n     S: * FLAGS (\\Deleted \\Seen \\Flagged)\n     S: * OK [PERMANENTFLAGS (\\Deleted \\Seen \\Flagged)] Limited\n     S: * 3 EXISTS\n     S: * OK [UIDVALIDITY 1]\n     S: * OK [UIDNEXT 1]\n     S: * LIST () \"/\" INBOX\n     S: A001 OK [READ-WRITE] SELECT completed\n     C: A002 IDLE\n     S: + idling\n     ...time passes; new mail arrives...\n     S: * 4 EXISTS\n     C: DONE\n     S: A002 OK IDLE terminated\n     ...another client expunges message 2 now...\n     C: A003 FETCH 4 ALL\n     S: * 4 FETCH (...)\n     S: A003 OK FETCH completed\n     C: A004 IDLE\n     S: * 2 EXPUNGE\n     S: * 3 EXISTS\n     S: + idling\n     ...time passes; another client expunges message 3...\n     S: * 3 EXPUNGE\n     S: * 2 EXISTS\n     ...time passes; new mail arrives...\n     S: * 3 EXISTS\n     C: DONE\n     S: A004 OK IDLE terminated\n     C: A005 FETCH 3 ALL\n     S: * 3 FETCH (...)\n     S: A005 OK FETCH completed\n     C: A006 IDLE\n\n6.4.  Client Commands - Selected State\n\n   In the selected state, commands that manipulate messages in a mailbox\n   are permitted.\n\n   In addition to the universal commands (CAPABILITY, NOOP, and LOGOUT),\n   and the authenticated state commands (SELECT, EXAMINE, NAMESPACE,\n   CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, STATUS, and\n   APPEND), the following commands are valid in the selected state:\n   CLOSE, UNSELECT, EXPUNGE, SEARCH, FETCH, STORE, COPY, MOVE, and UID.\n\n6.4.1.  CLOSE Command\n\n   Arguments:    none\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  close completed, now in authenticated state\n                 BAD -  command unknown or arguments invalid\n\n   The CLOSE command permanently removes all messages that have the\n   \\Deleted flag set from the currently selected mailbox, and it returns\n   to the authenticated state from the selected state.  No untagged\n   EXPUNGE responses are sent.\n\n   No messages are removed, and no error is given, if the mailbox is\n   selected by an EXAMINE command or is otherwise selected as read-only.\n\n   Even if a mailbox is selected, a SELECT, EXAMINE, or LOGOUT command\n   MAY be issued without previously issuing a CLOSE command.  The\n   SELECT, EXAMINE, and LOGOUT commands implicitly close the currently\n   selected mailbox without doing an expunge.  However, when many\n   messages are deleted, a CLOSE-LOGOUT or CLOSE-SELECT sequence is\n   considerably faster than an EXPUNGE-LOGOUT or EXPUNGE-SELECT because\n   no untagged EXPUNGE responses (which the client would probably\n   ignore) are sent.\n\n   Example:\n\n     C: A341 CLOSE\n     S: A341 OK CLOSE completed\n\n6.4.2.  UNSELECT Command\n\n   Arguments:    none\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  unselect completed, now in authenticated state\n                 BAD -  no mailbox selected, or argument supplied but\n                    none permitted\n\n   The UNSELECT command frees a session's resources associated with the\n   selected mailbox and returns the server to the authenticated state.\n   This command performs the same actions as CLOSE, except that no\n   messages are permanently removed from the currently selected mailbox.\n\n   Example:\n\n     C: A342 UNSELECT\n     S: A342 OK Unselect completed\n\n6.4.3.  EXPUNGE Command\n\n   Arguments:    none\n\n   Responses:    untagged responses:  EXPUNGE\n\n   Result:       OK -  expunge completed\n                 NO -  expunge failure: can't expunge (e.g., permission\n                    denied)\n                 BAD -  command unknown or arguments invalid\n\n   The EXPUNGE command permanently removes all messages that have the\n   \\Deleted flag set from the currently selected mailbox.  Before\n   returning an OK to the client, an untagged EXPUNGE response is sent\n   for each message that is removed.\n\n   Example:\n\n     C: A202 EXPUNGE\n     S: * 3 EXPUNGE\n     S: * 3 EXPUNGE\n     S: * 5 EXPUNGE\n     S: * 8 EXPUNGE\n     S: A202 OK EXPUNGE completed\n\n   Note: In this example, messages 3, 4, 7, and 11 had the \\Deleted flag\n   set.  See the description of the EXPUNGE response (Section 7.5.1) for\n   further explanation.\n\n6.4.4.  SEARCH Command\n\n   Arguments:    OPTIONAL result specifier\n\n                 OPTIONAL [CHARSET] specification\n\n                 searching criteria (one or more)\n\n   Responses:    OPTIONAL untagged response:  ESEARCH\n\n   Result:       OK -  search completed\n                 NO -  search error: can't search that [CHARSET] or\n                    criteria\n                 BAD -  command unknown or arguments invalid\n\n   The SEARCH command searches the mailbox for messages that match the\n   given searching criteria.\n\n   The SEARCH command may contain result options.  Result options\n   control what kind of information is returned about messages matching\n   the search criteria in an untagged ESEARCH response.  If no result\n   option is specified or empty list of options is specified as \"()\",\n   ALL is assumed (see below).  The order of individual options is\n   arbitrary.  Individual options may contain parameters enclosed in\n   parentheses.  (However, if an option has a mandatory parameter, which\n   can always be represented as a number or a sequence-set, the option\n   parameter does not need the enclosing parentheses.  See \"Formal\n   Syntax\" (Section 9) for more details.)  If an option has parameters,\n   they consist of atoms and/or strings and/or lists in a specific\n   order.  Any options not defined by extensions that the server\n   supports MUST be rejected with a BAD response.\n\n   Note that IMAP4rev1 used SEARCH responses [RFC3501] instead of\n   ESEARCH responses.  Clients that support only IMAP4rev2 MUST ignore\n   SEARCH responses.\n\n   This document specifies the following result options:\n\n   MIN\n      Return the lowest message number/UID that satisfies the SEARCH\n      criteria.\n\n      If the SEARCH results in no matches, the server MUST NOT include\n      the MIN result option in the ESEARCH response; however, it still\n      MUST send the ESEARCH response.\n\n   MAX\n      Return the highest message number/UID that satisfies the SEARCH\n      criteria.\n\n      If the SEARCH results in no matches, the server MUST NOT include\n      the MAX result option in the ESEARCH response; however, it still\n      MUST send the ESEARCH response.\n\n   ALL\n      Return all message numbers/UIDs that satisfy the SEARCH criteria\n      using the sequence-set syntax.  Note that the client MUST NOT\n      assume that messages/UIDs will be listed in any particular order.\n\n      If the SEARCH results in no matches, the server MUST NOT include\n      the ALL result option in the ESEARCH response; however, it still\n      MUST send the ESEARCH response.\n\n   COUNT\n      Return the number of messages that satisfy the SEARCH criteria.\n      This result option MUST always be included in the ESEARCH\n      response.\n\n   SAVE\n      This option tells the server to remember the result of the SEARCH\n      or UID SEARCH command (as well as any command based on SEARCH,\n      e.g., SORT and THREAD [RFC5256]) and store it in an internal\n      variable that we will reference as the \"search result variable\".\n      The client can use the \"$\" marker to reference the content of this\n      internal variable.  The \"$\" marker can be used instead of message\n      sequence or UID sequence in order to indicate that the server\n      should substitute it with the list of messages from the search\n      result variable.  Thus, the client can use the result of the\n      latest remembered SEARCH command as a parameter to another\n      command.  See Section 6.4.4.1 for details on how the value of the\n      search result variable is determined, how it is affected by other\n      commands executed, and how the SAVE return option interacts with\n      other return options.\n\n      In absence of any other SEARCH result option, the SAVE result\n      option also suppresses any ESEARCH response that would have been\n      otherwise returned by the SEARCH command.\n\n   Note: future extensions to this document can allow servers to return\n   multiple ESEARCH responses for a single extended SEARCH command.\n   However, all options specified above MUST result in a single ESEARCH\n   response if used by themselves or in combination.  This guarantee\n   simplifies processing in IMAP4rev2 clients.  Future SEARCH extensions\n   that relax this restriction will have to describe how results from\n   multiple ESEARCH responses are to be combined.\n\n   Searching criteria consist of one or more search keys.\n\n   When multiple keys are specified, the result is the intersection (AND\n   function) of all the messages that match those keys.  For example,\n   the criteria DELETED FROM \"SMITH\" SINCE 1-Feb-1994 refers to all\n   deleted messages from Smith with INTERNALDATE greater than February\n   1, 1994.  A search key can also be a parenthesized list of one or\n   more search keys (e.g., for use with the OR and NOT keys).\n\n   Server implementations MAY exclude [MIME-IMB] body parts with\n   terminal content media types other than TEXT and MESSAGE from\n   consideration in SEARCH matching.\n\n   The OPTIONAL [CHARSET] specification consists of the word \"CHARSET\"\n   followed by the name of a character set from the registry\n   [CHARSET-REG].  It indicates the [CHARSET] of the strings that appear\n   in the search criteria.  [MIME-IMB] content transfer encodings and\n   [MIME-HDRS] strings in [RFC5322]/[MIME-IMB] headers MUST be decoded\n   before comparing text.  Servers MUST support US-ASCII and UTF-8\n   charsets; other CHARSETs MAY be supported.  Clients SHOULD use UTF-8.\n   Note that if CHARSET is not provided, IMAP4rev2 servers MUST assume\n   UTF-8, so selecting CHARSET UTF-8 is redundant.  It is permitted for\n   improved compatibility with existing IMAP4rev1 clients.\n\n   If the server does not support the specified [CHARSET], it MUST\n   return a tagged NO response (not a BAD).  This response SHOULD\n   contain the BADCHARSET response code, which MAY list the CHARSETs\n   supported by the server.\n\n   In all search keys that use strings, and unless otherwise specified,\n   a message matches the key if the string is a substring of the\n   associated text.  The matching SHOULD be case insensitive for\n   characters within the ASCII range.  Consider using [IMAP-I18N] for\n   language-sensitive, case-insensitive searching.  Note that the empty\n   string is a substring; this is useful when performing a HEADER search\n   in order to test for a header field presence in the message.\n\n   The defined search keys are as follows.  Refer to \"Formal Syntax\"\n   (Section 9) for the precise syntactic definitions of the arguments.\n\n   <sequence set>\n      Messages with message sequence numbers corresponding to the\n      specified message sequence number set.\n\n   ALL\n      All messages in the mailbox; the default initial key for ANDing.\n\n   ANSWERED\n      Messages with the \\Answered flag set.\n\n   BCC <string>\n      Messages that contain the specified string in the envelope\n      structure's Blind Carbon Copy (BCC) field.\n\n   BEFORE <date>\n      Messages whose internal date (disregarding time and timezone) is\n      earlier than the specified date.\n\n   BODY <string>\n      Messages that contain the specified string in the body of the\n      message.  Unlike TEXT (see below), this doesn't match any header\n      fields.  Servers are allowed to implement flexible matching for\n      this search key, for example, by matching \"swim\" to both \"swam\"\n      and \"swum\" in English language text or only performing full word\n      matching (where \"swim\" will not match \"swimming\").\n\n   CC <string>\n      Messages that contain the specified string in the envelope\n      structure's CC field.\n\n   DELETED\n      Messages with the \\Deleted flag set.\n\n   DRAFT\n      Messages with the \\Draft flag set.\n\n   FLAGGED\n      Messages with the \\Flagged flag set.\n\n   FROM <string>\n      Messages that contain the specified string in the envelope\n      structure's FROM field.\n\n   HEADER <field-name> <string>\n      Messages that have a header field with the specified field-name\n      (as defined in [RFC5322]) and that contain the specified string in\n      the text of the header field (what comes after the colon).  If the\n      string to search is zero-length, this matches all messages that\n      have a header field with the specified field-name regardless of\n      the contents.  Servers should use a substring search for this\n      SEARCH item, as clients can use it for automatic processing not\n      initiated by end users.  For example, this can be used when\n      searching for Message-ID or Content-Type header field values that\n      need to be exact or for searches in header fields that the IMAP\n      server might not know anything about.\n\n   KEYWORD <flag>\n      Messages with the specified keyword flag set.\n\n   LARGER <n>\n      Messages with an RFC822.SIZE larger than the specified number of\n      octets.\n\n   NOT <search-key>\n      Messages that do not match the specified search key.\n\n   ON <date>\n      Messages whose internal date (disregarding time and timezone) is\n      within the specified date.\n\n   OR <search-key1> <search-key2>\n      Messages that match either search key.\n\n   SEEN\n      Messages that have the \\Seen flag set.\n\n   SENTBEFORE <date>\n      Messages whose [RFC5322] Date: header field (disregarding time and\n      timezone) is earlier than the specified date.\n\n   SENTON <date>\n      Messages whose [RFC5322] Date: header field (disregarding time and\n      timezone) is within the specified date.\n\n   SENTSINCE <date>\n      Messages whose [RFC5322] Date: header field (disregarding time and\n      timezone) is within or later than the specified date.\n\n   SINCE <date>\n      Messages whose internal date (disregarding time and timezone) is\n      within or later than the specified date.\n\n   SMALLER <n>\n      Messages with an RFC822.SIZE smaller than the specified number of\n      octets.\n\n   SUBJECT <string>\n      Messages that contain the specified string in the envelope\n      structure's SUBJECT field.\n\n   TEXT <string>\n      Messages that contain the specified string in the header\n      (including MIME header fields) or body of the message.  Servers\n      are allowed to implement flexible matching for this search key,\n      for example, matching \"swim\" to both \"swam\" and \"swum\" in English\n      language text or only performing full-word matching (where \"swim\"\n      will not match \"swimming\").\n\n   TO <string>\n      Messages that contain the specified string in the envelope\n      structure's TO field.\n\n   UID <sequence set>\n      Messages with unique identifiers corresponding to the specified\n      unique identifier set.  Sequence-set ranges are permitted.\n\n   UNANSWERED\n      Messages that do not have the \\Answered flag set.\n\n   UNDELETED\n      Messages that do not have the \\Deleted flag set.\n\n   UNDRAFT\n      Messages that do not have the \\Draft flag set.\n\n   UNFLAGGED\n      Messages that do not have the \\Flagged flag set.\n\n   UNKEYWORD <flag>\n      Messages that do not have the specified keyword flag set.\n\n   UNSEEN\n      Messages that do not have the \\Seen flag set.\n\n   Example:\n\n     C: A282 SEARCH RETURN (MIN COUNT) FLAGGED\n         SINCE 1-Feb-1994 NOT FROM \"Smith\"\n     S: * ESEARCH (TAG \"A282\") MIN 2 COUNT 3\n     S: A282 OK SEARCH completed\n\n   Example:\n\n     C: A283 SEARCH RETURN () FLAGGED\n         SINCE 1-Feb-1994 NOT FROM \"Smith\"\n     S: * ESEARCH (TAG \"A283\") ALL 2,10:11\n     S: A283 OK SEARCH completed\n\n   Example:\n\n     C: A284 SEARCH TEXT \"string not in mailbox\"\n     S: * ESEARCH (TAG \"A284\")\n     S: A284 OK SEARCH completed\n     C: A285 SEARCH CHARSET UTF-8 TEXT {12}\n     S: + Ready for literal text\n     C: отпуск\n     S: * ESEARCH (TAG \"A285\") ALL 43\n     S: A285 OK SEARCH completed\n\n\n   The following example demonstrates finding the first unseen message\n   in the mailbox:\n\n   Example:\n\n     C: A284 SEARCH RETURN (MIN) UNSEEN\n     S: * ESEARCH (TAG \"A284\") MIN 4\n     S: A284 OK SEARCH completed\n\n   The following example demonstrates that if the ESEARCH UID indicator\n   is present, all data in the ESEARCH response is referring to UIDs;\n   for example, the MIN result specifier will be followed by a UID.\n\n   Example:\n\n     C: A285 UID SEARCH RETURN (MIN MAX) 1:5000\n     S: * ESEARCH (TAG \"A285\") UID MIN 7 MAX 3800\n     S: A285 OK SEARCH completed\n\n   The following example demonstrates returning the number of deleted\n   messages:\n\n   Example:\n\n     C: A286 SEARCH RETURN (COUNT) DELETED\n     S: * ESEARCH (TAG \"A286\") COUNT 15\n     S: A286 OK SEARCH completed\n\n6.4.4.1.  SAVE Result Option and SEARCH Result Variable\n\n   Upon successful completion of a SELECT or an EXAMINE command (after\n   the tagged OK response), the current search result variable is reset\n   to the empty sequence.\n\n   A successful SEARCH command with the SAVE result option sets the\n   value of the search result variable to the list of messages found in\n   the SEARCH command.  For example, if no messages were found, the\n   search result variable will contain the empty sequence.\n\n   Any of the following SEARCH commands MUST NOT change the search\n   result variable:\n\n      a SEARCH command that caused the server to return the BAD tagged\n      response,\n\n      a SEARCH command with no SAVE result option that caused the server\n      to return NO tagged response, and\n\n      a successful SEARCH command with no SAVE result option.\n\n   A SEARCH command with the SAVE result option that caused the server\n   to return the NO tagged response sets the value of the search result\n   variable to the empty sequence.\n\n   When a message listed in the search result variable is EXPUNGEd, it\n   is automatically removed from the list.  Implementors are reminded\n   that if the server stores the list as a list of message numbers, it\n   MUST automatically adjust them when notifying the client about\n   expunged messages, as described in Section 7.5.1.\n\n   If the server decides to send a new UIDVALIDITY value while the\n   mailbox is opened, it causes the resetting of the search variable to\n   the empty sequence.\n\n   Note that even if the \"$\" marker contains the empty sequence of\n   messages, it must be treated by all commands accepting message sets\n   as parameters as a valid, but non-matching, list of messages.  For\n   example, the \"FETCH $\" command would return a tagged OK response and\n   no FETCH responses.  See also Example 5 in Section 6.4.4.4.\n\n   The SAVE result option doesn't change whether the server would return\n   items corresponding to MIN, MAX, ALL, or COUNT result options.\n\n   When the SAVE result option is combined with the MIN or MAX result\n   option, and both ALL and COUNT result options are absent, the\n   corresponding MIN/MAX is returned (if the search result is not\n   empty), but the \"$\" marker would contain a single message as returned\n   in the MIN/MAX return item.\n\n   If the SAVE result option is combined with both MIN and MAX result\n   options, and both ALL and COUNT result options are absent, the \"$\"\n   marker would contain zero messages, one message, or two messages as\n   returned in the MIN/MAX return items.\n\n   If the SAVE result option is combined with the ALL and/or COUNT\n   result option(s), the \"$\" marker would always contain all messages\n   found by the SEARCH or UID SEARCH command.\n\n   The following table summarizes the additional requirement on ESEARCH\n   server implementations described in this section.\n\n           +==============================+====================+\n           | Combination of Result Option |  \"$\" Marker Value  |\n           +==============================+====================+\n           |           SAVE MIN           |        MIN         |\n           +------------------------------+--------------------+\n           |           SAVE MAX           |        MAX         |\n           +------------------------------+--------------------+\n           |         SAVE MIN MAX         |     MIN & MAX      |\n           +------------------------------+--------------------+\n           |          SAVE * [m]          | all found messages |\n           +------------------------------+--------------------+\n\n                                  Table 4\n\n   where '*' means \"ALL\" and/or \"COUNT\", and '[m]' means optional \"MIN\"\n   and/or \"MAX\"\n\n   Implementation note: server implementors should note that \"$\" can\n   reference IMAP message sequences or UID sequences, depending on the\n   context where it is used.  For example, the \"$\" marker can be set as\n   a result of a SEARCH (SAVE) command and used as a parameter to a UID\n   FETCH command (which accepts a UID sequence, not a message sequence),\n   or the \"$\" marker can be set as a result of a UID SEARCH (SAVE)\n   command and used as a parameter to a FETCH command (which accepts a\n   message sequence, not a UID sequence).  Server implementations need\n   to automatically map the \"$\" marker value to message numbers or UIDs,\n   depending on the context where the \"$\" marker is used.\n\n6.4.4.2.  Multiple Commands in Progress\n\n   Use of a SEARCH RETURN (SAVE) command followed by a command using the\n   \"$\" marker creates direct dependency between the two commands.  As\n   directed by Section 5.5, a server MUST execute the two commands in\n   the order they were received.\n\n   A client MAY pipeline a SEARCH RETURN (SAVE) command with one or more\n   commands using the \"$\" marker, as long as this doesn't create an\n   ambiguity, as described in Section 5.5.  Examples 7-9 in\n   Section 6.4.4.4 explain this in more details.\n\n6.4.4.3.  Refusing to Save Search Results\n\n   In some cases, the server MAY refuse to save a SEARCH (SAVE) result,\n   for example, if an internal limit on the number of saved results is\n   reached.  In this case, the server MUST return a tagged NO response\n   containing the NOTSAVED response code and set the search result\n   variable to the empty sequence, as described in Section 6.4.4.1.\n\n6.4.4.4.  Examples Showing Use of the SAVE Result Option\n\n   Only in this section: explanatory comments in examples that start\n   with // are not part of the protocol.\n\n   1.  The following example demonstrates how the client can use the\n       result of a SEARCH command to FETCH headers of interesting\n       messages:\n\n       Example 1:\n\n        C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994\n            NOT FROM \"Smith\"\n        S: A282 OK SEARCH completed, result saved\n        C: A283 FETCH $ (UID INTERNALDATE FLAGS BODY.PEEK[HEADER])\n        S: * 2 FETCH (UID 14 ...\n        S: * 84 FETCH (UID 100 ...\n        S: * 882 FETCH (UID 1115 ...\n        S: A283 OK completed\n\n       The client can also pipeline the two commands:\n\n       Example 2:\n\n        C: A282 SEARCH RETURN (SAVE) FLAGGED SINCE 1-Feb-1994\n            NOT FROM \"Smith\"\n        C: A283 FETCH $ (UID INTERNALDATE FLAGS BODY.PEEK[HEADER])\n        S: A282 OK SEARCH completed\n        S: * 2 FETCH (UID 14 ...\n        S: * 84 FETCH (UID 100 ...\n        S: * 882 FETCH (UID 1115 ...\n        S: A283 OK completed\n\n   2.  The following example demonstrates that the result of one SEARCH\n       command can be used as input to another SEARCH command:\n\n       Example 3:\n\n        C: A300 SEARCH RETURN (SAVE) SINCE 1-Jan-2004\n            NOT FROM \"Smith\"\n        S: A300 OK SEARCH completed\n        C: A301 UID SEARCH UID $ SMALLER 4096\n        S: * ESEARCH (TAG \"A301\") UID ALL 17,900,901\n        S: A301 OK completed\n\n       Note that the second command in Example 3 can be replaced with:\n\n        C: A301 UID SEARCH $ SMALLER 4096\n\n       and the result of the command would be the same.\n\n   3.  The following example shows that the \"$\" marker can be combined\n       with other message numbers using the OR SEARCH criterion.\n\n       Example 4:\n\n        C: P282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994\n            NOT FROM \"Smith\"\n        S: P282 OK SEARCH completed\n        C: P283 SEARCH CHARSET UTF-8 (OR $ 1,3000:3021) TEXT {8+}\n        C: мать\n        S: * ESEARCH (TAG \"P283\") ALL 882,1102,3003,3005:3006\n        S: P283 OK completed\n\n   4.  The following example demonstrates that a failed SEARCH sets the\n       search result variable to the empty list.  The server doesn't\n       implement the KOI8-R charset.\n\n       Example 5:\n\n        C: B282 SEARCH RETURN (SAVE) SINCE 1-Feb-1994\n            NOT FROM \"Smith\"\n        S: B282 OK SEARCH completed\n        C: B283 SEARCH RETURN (SAVE) CHARSET KOI8-R\n            (OR $ 1,3000:3021) TEXT {4}\n        C: XXXX\n        S: B283 NO [BADCHARSET UTF-8] KOI8-R is not supported\n       //After this command, the saved result variable contains\n       //no messages.  A client that wants to reissue the B283\n       //SEARCH command with another CHARSET would have to reissue\n       //the B282 command as well.  One possible workaround for\n       //this is to include the desired CHARSET parameter\n       //in the earliest SEARCH RETURN (SAVE) command in a\n       //sequence of related SEARCH commands, to cause\n       //the earliest SEARCH in the sequence to fail.\n       //A better approach might be to always use CHARSET UTF-8\n       //instead.\n\n       Note: Since this document format is restricted to 7-bit ASCII\n       text, it is not possible to show actual KOI8-R data.  The \"XXXX\"\n       is a placeholder for what would be 4 octets of 8-bit data in an\n       actual transaction.\n\n   5.  The following example demonstrates that it is not an error to use\n       the \"$\" marker when it contains no messages.\n\n       Example 6:\n\n        C: E282 SEARCH RETURN (SAVE) SINCE 28-Oct-2006\n            NOT FROM \"Eric\"\n        C: E283 COPY $ \"Other Messages\"\n       //The \"$\" contains no messages\n        S: E282 OK SEARCH completed\n        S: E283 OK COPY completed, nothing copied\n\n       Example 7:\n\n        C: F282 SEARCH RETURN (SAVE) KEYWORD $Junk\n        C: F283 COPY $ \"Junk\"\n        C: F284 STORE $ +FLAGS.Silent (\\Deleted)\n        S: F282 OK SEARCH completed\n        S: F283 OK COPY completed\n        S: F284 OK STORE completed\n\n       Example 8:\n\n        C: G282 SEARCH RETURN (SAVE) KEYWORD $Junk\n        C: G283 SEARCH RETURN (ALL) SINCE 28-Oct-2006\n            FROM \"Eric\"\n       // The server can execute the two SEARCH commands\n       // in any order, as they don't have any dependency.\n       // For example, it may return:\n        S: * ESEARCH (TAG \"G283\") ALL 3:15,27,29:103\n        S: G283 OK SEARCH completed\n        S: G282 OK SEARCH completed\n\n       The following example demonstrates that the result of the second\n       SEARCH RETURN (SAVE) always overrides the result of the first.\n\n       Example 9:\n\n        C: H282 SEARCH RETURN (SAVE) KEYWORD $Junk\n        C: H283 SEARCH RETURN (SAVE) SINCE 28-Oct-2006\n            FROM \"Eric\"\n        S: H282 OK SEARCH completed\n        S: H283 OK SEARCH completed\n       // At this point \"$\" would contain results of H283\n\n       The following example demonstrates behavioral difference for\n       different combinations of ESEARCH result options.\n\n       Example 10:\n\n        C: C282 SEARCH RETURN (ALL) SINCE 12-Feb-2006\n            NOT FROM \"Smith\"\n        S: * ESEARCH (TAG \"C283\") ALL 2,10:15,21\n      //$ value hasn't changed\n        S: C282 OK SEARCH completed\n\n        C: C283 SEARCH RETURN (ALL SAVE) SINCE 12-Feb-2006\n            NOT FROM \"Smith\"\n        S: * ESEARCH (TAG \"C283\") ALL 2,10:15,21\n      //$ value is 2,10:15,21\n        S: C283 OK SEARCH completed\n\n        C: C284 SEARCH RETURN (SAVE MIN) SINCE 12-Feb-2006\n            NOT FROM \"Smith\"\n        S: * ESEARCH (TAG \"C284\") MIN 2\n      //$ value is 2\n        S: C284 OK SEARCH completed\n\n        C: C285 SEARCH RETURN (MAX SAVE MIN) SINCE\n            12-Feb-2006 NOT FROM \"Smith\"\n        S: * ESEARCH (TAG \"C285\") MIN 2 MAX 21\n      //$ value is 2,21\n        S: C285 OK SEARCH completed\n\n        C: C286 SEARCH RETURN (MAX SAVE MIN COUNT)\n            SINCE 12-Feb-2006 NOT FROM \"Smith\"\n        S: * ESEARCH (TAG \"C286\") MIN 2 MAX 21 COUNT 8\n      //$ value is 2,10:15,21\n        S: C286 OK SEARCH completed\n\n        C: C286 SEARCH RETURN (ALL SAVE MIN) SINCE\n            12-Feb-2006 NOT FROM \"Smith\"\n        S: * ESEARCH (TAG \"C286\") MIN 2 ALL 2,10:15,21\n      //$ value is 2,10:15,21\n        S: C286 OK SEARCH completed\n\n6.4.5.  FETCH Command\n\n   Arguments:    sequence set\n\n                 message data item names or macro\n\n   Responses:    untagged responses:  FETCH\n\n   Result:       OK -  fetch completed\n                 NO -  fetch error: can't fetch that data\n                 BAD -  command unknown or arguments invalid\n\n   The FETCH command retrieves data associated with a message in the\n   mailbox.  The data items to be fetched can be either a single atom or\n   a parenthesized list.\n\n   Most data items, identified in the formal syntax (Section 9) under\n   the msg-att-static rule, are static and MUST NOT change for any\n   particular message.  Other data items, identified in the formal\n   syntax under the msg-att-dynamic rule, MAY change either as a result\n   of a STORE command or due to external events.\n\n      For example, if a client receives an ENVELOPE for a message when\n      it already knows the envelope, it can safely ignore the newly\n      transmitted envelope.\n\n   There are three macros that specify commonly used sets of data items\n   and can be used instead of data items.  A macro must be used by\n   itself and not in conjunction with other macros or data items.\n\n   ALL\n      Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)\n\n   FAST\n      Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE)\n\n   FULL\n      Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE\n      BODY)\n\n   Several data items reference \"section\" or \"section-binary\".  See\n   Section 6.4.5.1 for their detailed definition.\n\n   The currently defined data items that can be fetched are:\n\n   BINARY[<section-binary>]<<partial>>\n      Requests that the specified section be transmitted after\n      performing decoding of the section's Content-Transfer-Encoding.\n\n      The <partial> argument, if present, requests that a subset of the\n      data be returned.  The semantics of a partial FETCH BINARY command\n      are the same as for a partial FETCH BODY command, with the\n      exception that the <partial> arguments refer to the DECODED\n      section data.\n\n      Note that this data item can only be requested for leaf body\n      parts: those that have media types other than multipart/*,\n      message/rfc822, or message/global.\n\n   BINARY.PEEK[<section-binary>]<<partial>>\n      An alternate form of BINARY[<section-binary>] that does not\n      implicitly set the \\Seen flag.\n\n   BINARY.SIZE[<section-binary>]\n      Requests the decoded size of the section (i.e., the size to expect\n      in response to the corresponding FETCH BINARY request).\n\n      Note: client authors are cautioned that this might be an expensive\n      operation for some server implementations.  Needlessly issuing\n      this request could result in degraded performance due to servers\n      having to calculate the value every time the request is issued.\n\n      Note that this data item can only be requested for leaf body\n      parts: those that have media types other than multipart/*,\n      message/rfc822, or message/global.\n\n   BODY\n      Non-extensible form of BODYSTRUCTURE.\n\n   BODY[<section>]<<partial>>\n      The text of a particular body section.  If BODY[] is specified\n      (the section specification is omitted), the FETCH is requesting\n      the [RFC5322] expression of the entire message.\n\n      It is possible to fetch a substring of the designated text.  This\n      is done by appending an open angle bracket (\"<\"), the octet\n      position of the first desired octet, a period, the maximum number\n      of octets desired, and a close angle bracket (\">\") to the part\n      specifier.  If the starting octet is beyond the end of the text,\n      an empty string is returned.\n\n      Any partial fetch that attempts to read beyond the end of the text\n      is truncated as appropriate.  A partial fetch that starts at octet\n      0 is returned as a partial fetch, even if this truncation\n      happened.\n\n         Note: This means that BODY[]<0.2048> of a 1500-octet message\n         will return BODY[]<0> with a literal of size 1500, not BODY[].\n\n         Note: A substring fetch of a HEADER.FIELDS or HEADER.FIELDS.NOT\n         part specifier is calculated after subsetting the header.\n\n      The \\Seen flag is implicitly set; if this causes the flags to\n      change, they SHOULD be included as part of the FETCH responses.\n\n   BODY.PEEK[<section>]<<partial>>\n      An alternate form of BODY[<section>] that does not implicitly set\n      the \\Seen flag.\n\n   BODYSTRUCTURE\n      The [MIME-IMB] body structure of the message.  This is computed by\n      the server by parsing the [MIME-IMB] header fields in the\n      [RFC5322] header and [MIME-IMB] headers.  See Section 7.5.2 for\n      more details.\n\n   ENVELOPE\n      The envelope structure of the message.  This is computed by the\n      server by parsing the [RFC5322] header into the component parts,\n      defaulting various fields as necessary.  See Section 7.5.2 for\n      more details.\n\n   FLAGS\n      The flags that are set for this message.\n\n   INTERNALDATE\n      The internal date of the message.\n\n   RFC822.SIZE\n      The size of the message, as defined in Section 2.3.4.\n\n   UID\n      The unique identifier for the message.\n\n   Example:\n\n     C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])\n     S: * 2 FETCH ....\n     S: * 3 FETCH ....\n     S: * 4 FETCH ....\n     S: A654 OK FETCH completed\n\n6.4.5.1.  FETCH Section Specification\n\n   Several FETCH data items reference \"section\" or \"section-binary\".\n   The section specification is a set of zero or more part specifiers\n   delimited by periods.  A part specifier is either a part number or\n   one of the following: HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, MIME,\n   and TEXT.  (Non-numeric part specifiers have to be the last specifier\n   in a section specification.)  An empty section specification refers\n   to the entire message, including the header.\n\n   Every message has at least one part number.  Messages that do not use\n   MIME, and MIME messages that are not multipart and have no\n   encapsulated message within them, only have a part 1.\n\n   Multipart messages are assigned consecutive part numbers, as they\n   occur in the message.  If a particular part is of type message or\n   multipart, its parts MUST be indicated by a period followed by the\n   part number within that nested multipart part.\n\n   A part of type MESSAGE/RFC822 or MESSAGE/GLOBAL also has nested part\n   numbers, referring to parts of the MESSAGE part's body.\n\n   The HEADER, HEADER.FIELDS, HEADER.FIELDS.NOT, and TEXT part\n   specifiers can be the sole part specifier or can be prefixed by one\n   or more numeric part specifiers, provided that the numeric part\n   specifier refers to a part of type MESSAGE/RFC822 or MESSAGE/GLOBAL.\n   The MIME part specifier MUST be prefixed by one or more numeric part\n   specifiers.\n\n   The HEADER, HEADER.FIELDS, and HEADER.FIELDS.NOT part specifiers\n   refer to the [RFC5322] header of the message or of an encapsulated\n   [MIME-IMT] MESSAGE/RFC822 or MESSAGE/GLOBAL message.  HEADER.FIELDS\n   and HEADER.FIELDS.NOT are followed by a list of field-names (as\n   defined in [RFC5322]) and return a subset of the header.  The subset\n   returned by HEADER.FIELDS contains only those header fields with a\n   field-name that matches one of the names in the list; similarly, the\n   subset returned by HEADER.FIELDS.NOT contains only the header fields\n   with a non-matching field-name.  The field-matching is ASCII-range\n   case insensitive but is otherwise exact.  Subsetting does not exclude\n   the [RFC5322] delimiting blank line between the header and the body;\n   the blank line is included in all header fetches, except in the case\n   of a message that has no body and no blank line.\n\n   The MIME part specifier refers to the [MIME-IMB] header for this\n   part.\n\n   The TEXT part specifier refers to the text body of the message,\n   omitting the [RFC5322] header.\n\n   Here is an example of a complex message with some of its part\n   specifiers:\n\n     HEADER     ([RFC5322] header of the message)\n     TEXT       ([RFC5322] text body of the message) MULTIPART/MIXED\n     1          TEXT/PLAIN\n     2          APPLICATION/OCTET-STREAM\n     3          MESSAGE/RFC822\n     3.HEADER   ([RFC5322] header of the message)\n     3.TEXT     ([RFC5322] text body of the message) MULTIPART/MIXED\n     3.1        TEXT/PLAIN\n     3.2        APPLICATION/OCTET-STREAM\n     4          MULTIPART/MIXED\n     4.1        IMAGE/GIF\n     4.1.MIME   ([MIME-IMB] header for the IMAGE/GIF)\n     4.2        MESSAGE/RFC822\n     4.2.HEADER ([RFC5322] header of the message)\n     4.2.TEXT   ([RFC5322] text body of the message) MULTIPART/MIXED\n     4.2.1      TEXT/PLAIN\n     4.2.2      MULTIPART/ALTERNATIVE\n     4.2.2.1    TEXT/PLAIN\n     4.2.2.2    TEXT/RICHTEXT\n\n6.4.6.  STORE Command\n\n   Arguments:    sequence set\n\n                 message data item name\n\n                 value for message data item\n\n   Responses:    untagged responses:  FETCH\n\n   Result:       OK -  store completed\n                 NO -  store error: can't store that data\n                 BAD -  command unknown or arguments invalid\n\n   The STORE command alters data associated with a message in the\n   mailbox.  Normally, STORE will return the updated value of the data\n   with an untagged FETCH response.  A suffix of \".SILENT\" in the data\n   item name prevents the untagged FETCH, and the server SHOULD assume\n   that the client has determined the updated value itself or does not\n   care about the updated value.\n\n      Note: Regardless of whether or not the \".SILENT\" suffix was used,\n      the server SHOULD send an untagged FETCH response if a change to a\n      message's flags from an external source is observed.  The intent\n      is that the status of the flags is determinate without a race\n      condition.\n\n   The currently defined data items that can be stored are:\n\n   FLAGS <flag list>\n      Replace the flags for the message with the argument.  The new\n      value of the flags is returned as if a FETCH of those flags was\n      done.\n\n   FLAGS.SILENT <flag list>\n      Equivalent to FLAGS, but without returning a new value.\n\n   +FLAGS <flag list>\n      Add the argument to the flags for the message.  The new value of\n      the flags is returned as if a FETCH of those flags was done.\n\n   +FLAGS.SILENT <flag list>\n      Equivalent to +FLAGS, but without returning a new value.\n\n   -FLAGS <flag list>\n      Remove the argument from the flags for the message.  The new value\n      of the flags is returned as if a FETCH of those flags was done.\n\n   -FLAGS.SILENT <flag list>\n      Equivalent to -FLAGS, but without returning a new value.\n\n   Example:\n\n     C: A003 STORE 2:4 +FLAGS (\\Deleted)\n     S: * 2 FETCH (FLAGS (\\Deleted \\Seen))\n     S: * 3 FETCH (FLAGS (\\Deleted))\n     S: * 4 FETCH (FLAGS (\\Deleted \\Flagged \\Seen))\n     S: A003 OK STORE completed\n\n6.4.7.  COPY Command\n\n   Arguments:    sequence set\n\n                 mailbox name\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  copy completed\n                 NO -  copy error: can't copy those messages or to that\n                    name\n                 BAD -  command unknown or arguments invalid\n\n   The COPY command copies the specified message(s) to the end of the\n   specified destination mailbox.  The flags and internal date of the\n   message(s) SHOULD be preserved in the copy.\n\n   If the destination mailbox does not exist, a server MUST return an\n   error.  It MUST NOT automatically create the mailbox.  Unless it is\n   certain that the destination mailbox can not be created, the server\n   MUST send the response code \"[TRYCREATE]\" as the prefix of the text\n   of the tagged NO response.  This gives a hint to the client that it\n   can attempt a CREATE command and retry the COPY if the CREATE is\n   successful.\n\n   If the COPY command is unsuccessful for any reason, server\n   implementations MUST restore the destination mailbox to its state\n   before the COPY attempt (other than possibly incrementing UIDNEXT),\n   i.e., partial copy MUST NOT be done.\n\n   On successful completion of a COPY, the server returns a COPYUID\n   response code (see Section 7.1).  Two exceptions to this requirement\n   are listed below.\n\n   In the case of a mailbox that has permissions set so that the client\n   can COPY to the mailbox, but not SELECT or EXAMINE it, the server\n   MUST NOT send a COPYUID response code as it would disclose\n   information about the mailbox.\n\n   In the case of a mailbox that has UIDNOTSTICKY status (see\n   Section 7.1), the server MAY omit the COPYUID response code as it is\n   not meaningful.\n\n   Example:\n\n     C: A003 COPY 2:4 MEETING\n     S: A003 OK [COPYUID 38505 304,319:320 3956:3958] COPY completed\n\n6.4.8.  MOVE Command\n\n   Arguments:    sequence set\n\n                 mailbox name\n\n   Responses:    no specific responses for this command\n\n   Result:       OK -  move completed\n                 NO -  move error: can't move those messages or to that\n                    name\n                 BAD -  command unknown or arguments invalid\n\n   The MOVE command moves the specified message(s) to the end of the\n   specified destination mailbox.  The flags and internal date of the\n   message(s) SHOULD be preserved.\n\n   This means that a new message is created in the target mailbox with a\n   new UID, the original message is removed from the source mailbox, and\n   it appears to the client as a single action.  This has the same\n   effect for each message as this sequence:\n\n   1.  [UID] COPY\n\n   2.  [UID] STORE +FLAGS.SILENT \\DELETED\n\n   3.  UID EXPUNGE\n\n   Although the effect of the MOVE is the same as the preceding steps,\n   the semantics are not identical: the intermediate states produced by\n   those steps do not occur, and the response codes are different.  In\n   particular, though the COPY and EXPUNGE response codes will be\n   returned, response codes for a STORE MUST NOT be generated, and the\n   \\Deleted flag MUST NOT be set for any message.\n\n   Unlike the COPY command, MOVE of a set of messages might fail partway\n   through the set.  Regardless of whether the command is successful in\n   moving the entire set, each individual message MUST be either moved\n   or unaffected.  The server MUST leave each message in a state where\n   it is in at least one of the source or target mailboxes (no message\n   can be lost or orphaned).  The server SHOULD NOT leave any message in\n   both mailboxes (it would be bad for a partial failure to result in a\n   bunch of duplicate messages).  This is true even if the server\n   returns a tagged NO response to the command.\n\n   If the destination mailbox does not exist, a server MUST return an\n   error.  It MUST NOT automatically create the mailbox.  Unless it is\n   certain that the destination mailbox cannot be created, the server\n   MUST send the response code \"[TRYCREATE]\" as the prefix of the text\n   of the tagged NO response.  This gives a hint to the client that it\n   can attempt a CREATE command and retry the MOVE if the CREATE is\n   successful.\n\n   Because of the similarity of MOVE to COPY, extensions that affect\n   COPY affect MOVE in the same way.  Response codes listed in\n   Section 7.1, as well as those defined by extensions, are sent as\n   indicated for COPY.\n\n   Servers send COPYUID in response to a MOVE or a UID MOVE (see\n   Section 6.4.9) command.  For additional information about COPYUID,\n   see Section 7.1.  Note that there are several exceptions listed in\n   Section 6.4.7 that allow servers not to return COPYUID.\n\n   Servers are also REQUIRED to send the COPYUID response code in an\n   untagged OK before sending EXPUNGE or similar responses.  (Sending\n   COPYUID in the tagged OK, as described in Section 6.4.7, means that\n   clients first receive an EXPUNGE for a message and afterwards COPYUID\n   for the same message.  It can be unnecessarily difficult to process\n   that sequence usefully.)\n\n   An example:\n\n     C: a UID MOVE 42:69 foo\n     S: * OK [COPYUID 432432 42:69 1202:1229]\n     S: * 22 EXPUNGE\n     ...More EXPUNGE responses from the server...\n     S: a OK Done\n\n   Note that the server may send unrelated EXPUNGE responses as well, if\n   any happen to have been expunged at the same time; this is normal\n   IMAP operation.\n\n   Note that moving a message to the currently selected mailbox (that\n   is, where the source and target mailboxes are the same) is allowed\n   when copying the message to the currently selected mailbox is\n   allowed.\n\n   The server may send EXPUNGE responses before the tagged response, so\n   the client cannot safely send more commands with message sequence\n   number arguments while the server is processing MOVE.\n\n   MOVE and UID MOVE can be pipelined with other commands, but care has\n   to be taken.  Both commands modify sequence numbers and also allow\n   unrelated EXPUNGE responses.  The renumbering of other messages in\n   the source mailbox following any EXPUNGE response can be surprising\n   and makes it unsafe to pipeline any command that relies on message\n   sequence numbers after a MOVE or UID MOVE.  Similarly, MOVE cannot be\n   pipelined with a command that might cause message renumbering.  See\n   Section 5.5 for more information about ambiguities as well as\n   handling requirements for both clients and servers.\n\n6.4.9.  UID Command\n\n   Arguments:    command name\n\n                 command arguments\n\n   Responses:    untagged responses:  FETCH, ESEARCH, EXPUNGE\n\n   Result:       OK -  UID command completed\n                 NO -  UID command error\n                 BAD -  command unknown or arguments invalid\n\n   The UID command has three forms.  In the first form, it takes as its\n   arguments a COPY, MOVE, FETCH, or STORE command with arguments\n   appropriate for the associated command.  However, the numbers in the\n   sequence-set argument are unique identifiers instead of message\n   sequence numbers.  Sequence-set ranges are permitted, but there is no\n   guarantee that unique identifiers will be contiguous.\n\n   A non-existent unique identifier is ignored without any error message\n   generated.  Thus, it is possible for a UID FETCH command to return an\n   OK without any data or a UID COPY, UID MOVE, or UID STORE to return\n   an OK without performing any operations.\n\n   In the second form, the UID command takes an EXPUNGE command with an\n   extra parameter that specifies a sequence set of UIDs to operate on.\n   The UID EXPUNGE command permanently removes all messages that have\n   both the \\Deleted flag set and a UID that is included in the\n   specified sequence set from the currently selected mailbox.  If a\n   message either does not have the \\Deleted flag set or has a UID that\n   is not included in the specified sequence set, it is not affected.\n\n   UID EXPUNGE is particularly useful for disconnected use clients.  By\n   using UID EXPUNGE instead of EXPUNGE when resynchronizing with the\n   server, the client can ensure that it does not inadvertently remove\n   any messages that have been marked as \\Deleted by other clients\n   between the time that the client was last connected and the time the\n   client resynchronizes.\n\n   Example:\n\n     C: A003 UID EXPUNGE 3000:3002\n     S: * 3 EXPUNGE\n     S: * 3 EXPUNGE\n     S: * 3 EXPUNGE\n     S: A003 OK UID EXPUNGE completed\n\n   In the third form, the UID command takes a SEARCH command with SEARCH\n   command arguments.  The interpretation of the arguments is the same\n   as with SEARCH; however, the numbers returned in an ESEARCH response\n   for a UID SEARCH command are unique identifiers instead of message\n   sequence numbers.  Also, the corresponding ESEARCH response MUST\n   include the UID indicator.  For example, the command UID SEARCH 1:100\n   UID 443:557 returns the unique identifiers corresponding to the\n   intersection of two sequence sets, the message sequence number range\n   1:100, and the UID range 443:557.\n\n      Note: in the above example, the UID range 443:557 appears.  The\n      same comment about a non-existent unique identifier being ignored\n      without any error message also applies here.  Hence, even if\n      neither UID 443 or 557 exist, this range is valid and would\n      include an existing UID 495.\n\n      Also note that a UID range of 559:* always includes the UID of the\n      last message in the mailbox, even if 559 is higher than any\n      assigned UID value.  This is because the contents of a range are\n      independent of the order of the range endpoints.  Thus, any UID\n      range with * as one of the endpoints indicates at least one\n      message (the message with the highest numbered UID), unless the\n      mailbox is empty.\n\n   The number after the \"*\" in an untagged FETCH or EXPUNGE response is\n   always a message sequence number, not a unique identifier, even for a\n   UID command response.  However, server implementations MUST\n   implicitly include the UID message data item as part of any FETCH\n   response caused by a UID command, regardless of whether a UID was\n   specified as a message data item to the FETCH.\n\n   Note: The rule about including the UID message data item as part of a\n   FETCH response primarily applies to the UID FETCH and UID STORE\n   commands, including a UID FETCH command that does not include UID as\n   a message data item.  Although it is unlikely that the other UID\n   commands will cause an untagged FETCH, this rule applies to these\n   commands as well.\n\n   Example:\n\n     C: A999 UID FETCH 4827313:4828442 FLAGS\n     S: * 23 FETCH (FLAGS (\\Seen) UID 4827313)\n     S: * 24 FETCH (FLAGS (\\Seen) UID 4827943)\n     S: * 25 FETCH (FLAGS (\\Seen) UID 4828442)\n     S: A999 OK UID FETCH completed\n\n6.5.  Client Commands - Experimental/Expansion\n\n   Each command that is not part of this specification MUST have at\n   least one capability name (see Section 6.1.1) associated with it.\n   (Multiple commands can be associated with the same capability name.)\n\n   Server implementations MUST NOT send any added untagged responses\n   (not specified in this specification), unless the client requested it\n   by issuing the associated experimental command (specified in an\n   extension document) or the ENABLE command (Section 6.3.1).\n\n   The following example demonstrates how a client can check for the\n   presence of a fictitious XPIG-LATIN capability that adds the XPIG-\n   LATIN command and the XPIG-LATIN untagged response.  (Note that for\n   an extension, the command name and the capability name don't have to\n   be the same.)\n\n   Example:\n\n     C: a441 CAPABILITY\n     S: * CAPABILITY IMAP4rev2 XPIG-LATIN\n     S: a441 OK CAPABILITY completed\n     C: A442 XPIG-LATIN\n     S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay\n     S: A442 OK XPIG-LATIN ompleted-cay\n\n7.  Server Responses\n\n   Server responses are in three forms: status responses, server data,\n   and command continuation requests.  The information contained in a\n   server response, identified by \"Contents:\" in the response\n   descriptions below, is described by function, not by syntax.  The\n   precise syntax of server responses is described in \"Formal Syntax\"\n   (Section 9).\n\n   The client MUST be prepared to accept any response at all times.\n\n   Status responses can be tagged or untagged.  Tagged status responses\n   indicate the completion result (OK, NO, or BAD status) of a client\n   command and have a tag matching the command.\n\n   Some status responses, and all server data, are untagged.  An\n   untagged response is indicated by the token \"*\" instead of a tag.\n   Untagged status responses indicate server greeting or server status\n   that does not indicate the completion of a command (for example, an\n   impending system shutdown alert).  For historical reasons, untagged\n   server data responses are also called \"unsolicited data\", although\n   strictly speaking, only unilateral server data is truly\n   \"unsolicited\".\n\n   Certain server data MUST be remembered by the client when it is\n   received; this is noted in the description of that data.  Such data\n   conveys critical information that affects the interpretation of all\n   subsequent commands and responses (e.g., updates reflecting the\n   creation or destruction of messages).\n\n   Other server data SHOULD be remembered for later reference; if the\n   client does not need to remember the data, or if remembering the data\n   has no obvious purpose (e.g., a SEARCH response when no SEARCH\n   command is in progress), the data can be ignored.\n\n   An example of unilateral untagged server data occurs when the IMAP\n   connection is in the selected state.  In the selected state, the\n   server checks the mailbox for new messages as part of command\n   execution.  Normally, this is part of the execution of every command;\n   hence, a NOOP command suffices to check for new messages.  If new\n   messages are found, the server sends an untagged EXISTS response\n   reflecting the new size of the mailbox.  Server implementations that\n   offer multiple simultaneous access to the same mailbox SHOULD also\n   send appropriate unilateral untagged FETCH and EXPUNGE responses if\n   another agent changes the state of any message flags or expunges any\n   messages.\n\n   Command continuation request responses use the token \"+\" instead of a\n   tag.  These responses are sent by the server to indicate acceptance\n   of an incomplete client command and readiness for the remainder of\n   the command.\n\n7.1.  Server Responses - Generic Status Responses\n\n   Status responses are OK, NO, BAD, PREAUTH, and BYE.  OK, NO, and BAD\n   can be tagged or untagged.  PREAUTH and BYE are always untagged.\n\n   Status responses MAY include an OPTIONAL \"response code\".  A response\n   code consists of data inside square brackets in the form of an atom,\n   possibly followed by a space and arguments.  The response code\n   contains additional information or status codes for client software\n   beyond the OK/NO/BAD condition and are defined when there is a\n   specific action that a client can take based upon the additional\n   information.\n\n   The currently defined response codes are:\n\n   ALERT\n      The human-readable text contains a special alert that is presented\n      to the user in a fashion that calls the user's attention to the\n      message.  Content of ALERT response codes received on a connection\n      without TLS or SASL security-layer confidentiality SHOULD be\n      ignored by clients.  If displayed, such alerts MUST be clearly\n      marked as potentially suspicious.  (Note that some existing\n      clients are known to hyperlink returned text, which make them very\n      dangerous.)  Alerts received after successful establishment of a\n      TLS/SASL confidentiality layer MUST be presented to the user.\n\n   ALREADYEXISTS\n      The operation attempts to create something that already exists,\n      such as when a CREATE or RENAME command attempts to create a\n      mailbox and there is already one of that name.\n\n        C: o356 RENAME this that\n        S: o356 NO [ALREADYEXISTS] Mailbox \"that\" already exists\n\n   APPENDUID\n      Followed by the UIDVALIDITY of the destination mailbox and the UID\n      assigned to the appended message in the destination mailbox, it\n      indicates that the message has been appended to the destination\n      mailbox with that UID.\n\n      If the server also supports the [MULTIAPPEND] extension, and if\n      multiple messages were appended in the APPEND command, then the\n      second value is a UID set containing the UIDs assigned to the\n      appended messages, in the order they were transmitted in the\n      APPEND command.  This UID set may not contain extraneous UIDs or\n      the symbol \"*\".\n\n         Note: the UID set form of the APPENDUID response code MUST NOT\n         be used if only a single message was appended.  In particular,\n         a server MUST NOT send a range such as 123:123.  This is\n         because a client that does not support [MULTIAPPEND] expects\n         only a single UID and not a UID set.\n\n      UIDs are assigned in strictly ascending order in the mailbox\n      (refer to Section 2.3.1.1); note that a range of 12:10 is exactly\n      equivalent to 10:12 and refers to the sequence 10,11,12.\n\n      This response code is returned in a tagged OK response to the\n      APPEND command.\n\n   AUTHENTICATIONFAILED\n      Authentication failed for some reason on which the server is\n      unwilling to elaborate.  Typically, this includes \"unknown user\"\n      and \"bad password\".\n\n      This is the same as not sending any response code, except that\n      when a client sees AUTHENTICATIONFAILED, it knows that the problem\n      wasn't, e.g., UNAVAILABLE, so there's no point in trying the same\n      login/password again later.\n\n        C: b LOGIN \"fred\" \"foo\"\n        S: b NO [AUTHENTICATIONFAILED] Authentication failed\n\n   AUTHORIZATIONFAILED\n      Authentication succeeded in using the authentication identity, but\n      the server cannot or will not allow the authentication identity to\n      act as the requested authorization identity.  This is only\n      applicable when the authentication and authorization identities\n      are different.\n\n        C: c1 AUTHENTICATE PLAIN\n        [...]\n        S: c1 NO [AUTHORIZATIONFAILED] No such authorization-ID\n\n        C: c2 AUTHENTICATE PLAIN\n        [...]\n        S: c2 NO [AUTHORIZATIONFAILED] Authenticator is not an admin\n\n   BADCHARSET\n      Optionally followed by a parenthesized list of charsets.  A SEARCH\n      failed because the given charset is not supported by this\n      implementation.  If the optional list of charsets is given, this\n      lists the charsets that are supported by this implementation.\n\n   CANNOT\n      This operation violates some invariant of the server and can never\n      succeed.\n\n        C: l create \"///////\"\n        S: l NO [CANNOT] Adjacent slashes are not supported\n\n   CAPABILITY\n      Followed by a list of capabilities.  This can appear in the\n      initial OK or PREAUTH response to transmit an initial capabilities\n      list.  It can also appear in tagged responses to LOGIN or\n      AUTHENTICATE commands.  This makes it unnecessary for a client to\n      send a separate CAPABILITY command if it recognizes this response\n      code and there was no change to the TLS and/or authentication\n      state since it was received.\n\n   CLIENTBUG\n      The server has detected a client bug.  This can accompany any of\n      OK, NO, and BAD, depending on what the client bug is.\n\n        C: k1 select \"/archive/projects/experiment-iv\"\n        [...]\n        S: k1 OK [READ-ONLY] Done\n        C: k2 status \"/archive/projects/experiment-iv\" (messages)\n        [...]\n        S: k2 OK [CLIENTBUG] Done\n\n   CLOSED\n      The CLOSED response code has no parameters.  A server returns the\n      CLOSED response code when the currently selected mailbox is closed\n      implicitly using the SELECT or EXAMINE command on another mailbox.\n      The CLOSED response code serves as a boundary between responses\n      for the previously opened mailbox (which was closed) and the newly\n      selected mailbox; all responses before the CLOSED response code\n      relate to the mailbox that was closed, and all subsequent\n      responses relate to the newly opened mailbox.\n\n      There is no need to return the CLOSED response code on completion\n      of the CLOSE or the UNSELECT command (or similar), whose purpose\n      is to close the currently selected mailbox without opening a new\n      one.\n\n   CONTACTADMIN\n      The user should contact the system administrator or support desk.\n\n        C: e login \"fred\" \"foo\"\n        S: e NO [CONTACTADMIN]\n\n   COPYUID\n      Followed by the UIDVALIDITY of the destination mailbox, a UID set\n      containing the UIDs of the message(s) in the source mailbox that\n      were copied to the destination mailbox, followed by another UID\n      set containing the UIDs assigned to the copied message(s) in the\n      destination mailbox, indicates that the message(s) has been copied\n      to the destination mailbox with the stated UID(s).\n\n      The source UID set is in the order the message(s) was copied; the\n      destination UID set corresponds to the source UID set and is in\n      the same order.  Neither of the UID sets may contain extraneous\n      UIDs or the symbol \"*\".\n\n      UIDs are assigned in strictly ascending order in the mailbox\n      (refer to Section 2.3.1.1); note that a range of 12:10 is exactly\n      equivalent to 10:12 and refers to the sequence 10,11,12.\n\n      This response code is returned in a tagged OK response to the COPY\n      or UID COPY command or in the untagged OK response to the MOVE or\n      UID MOVE command.\n\n   CORRUPTION\n      The server discovered that some relevant data (e.g., the mailbox)\n      are corrupt.  This response code does not include any information\n      about what's corrupt, but the server can write that to its\n      logfiles.\n\n        C: i select \"/archive/projects/experiment-iv\"\n        S: i NO [CORRUPTION] Cannot open mailbox\n\n   EXPIRED\n      Either authentication succeeded or the server no longer had the\n      necessary data; either way, access is no longer permitted using\n      that passphrase.  The client or user should get a new passphrase.\n\n        C: d login \"fred\" \"foo\"\n        S: d NO [EXPIRED] That password isn't valid any more\n\n   EXPUNGEISSUED\n      Someone else has issued an EXPUNGE for the same mailbox.  The\n      client may want to issue NOOP soon.  [IMAP-MULTIACCESS] discusses\n      this subject in depth.\n\n        C: h search from maria@example.com\n        S: * ESEARCH (TAG \"h\") ALL 1:3,5,8,13,21,42\n        S: h OK [EXPUNGEISSUED] Search completed\n\n   HASCHILDREN\n      The mailbox delete operation failed because the mailbox has one or\n      more children, and the server doesn't allow deletion of mailboxes\n      with children.\n\n        C: m356 DELETE Notes\n        S: o356 NO [HASCHILDREN] Mailbox \"Notes\" has children\n        that need to be deleted first\n\n   INUSE\n      An operation has not been carried out because it involves sawing\n      off a branch someone else is sitting on.  Someone else may be\n      holding an exclusive lock needed for this operation, or the\n      operation may involve deleting a resource someone else is using,\n      typically a mailbox.\n\n      The operation may succeed if the client tries again later.\n\n        C: g delete \"/archive/projects/experiment-iv\"\n        S: g NO [INUSE] Mailbox in use\n\n   LIMIT\n      The operation ran up against an implementation limit of some kind,\n      such as the number of flags on a single message or the number of\n      flags used in a mailbox.\n\n        C: m STORE 42 FLAGS f1 f2 f3 f4 f5 ... f250\n        S: m NO [LIMIT] At most 32 flags in one mailbox supported\n\n   NONEXISTENT\n      The operation attempts to delete something that does not exist.\n      Similar to ALREADYEXISTS.\n\n        C: p RENAME this that\n        S: p NO [NONEXISTENT] No such mailbox\n\n   NOPERM\n      The access control system (e.g., ACL; see [RFC4314]) does not\n      permit this user to carry out an operation, such as selecting or\n      creating a mailbox.\n\n        C: f select \"/archive/projects/experiment-iv\"\n        S: f NO [NOPERM] Access denied\n\n   OVERQUOTA\n      The user would be over quota after the operation.  (The user may\n      or may not be over quota already.)\n\n      Note that if the server sends OVERQUOTA but doesn't support the\n      IMAP QUOTA extension defined by [RFC2087], then there is a quota,\n      but the client cannot find out what the quota is.\n\n        C: n1 uid copy 1:* oldmail\n        S: n1 NO [OVERQUOTA] Sorry\n\n        C: n2 uid copy 1:* oldmail\n        S: n2 OK [OVERQUOTA] You are now over your soft quota\n\n   PARSE\n      The human-readable text represents an error in parsing the\n      [RFC5322] header or [MIME-IMB] headers of a message in the\n      mailbox.\n\n   PERMANENTFLAGS\n      Followed by a parenthesized list of flags and indicates which of\n      the known flags the client can change permanently.  Any flags that\n      are in the FLAGS untagged response, but not in the PERMANENTFLAGS\n      list, cannot be set permanently.  The PERMANENTFLAGS list can also\n      include the special flag \\*, which indicates that it is possible\n      to create new keywords by attempting to store those keywords in\n      the mailbox.  If the client attempts to STORE a flag that is not\n      in the PERMANENTFLAGS list, the server will either ignore the\n      change or store the state change for the remainder of the current\n      session only.\n\n      There is no need for a server that included the special flag \\* to\n      return a new PERMANENTFLAGS response code when a new keyword was\n      successfully set on a message upon client request.  However, if\n      the server has a limit on the number of different keywords that\n      can be stored in a mailbox and that limit is reached, the server\n      MUST send a new PERMANENTFLAGS response code without the special\n      flag \\*.\n\n   PRIVACYREQUIRED\n      The operation is not permitted due to a lack of data\n      confidentiality.  If TLS is not in use, the client could try\n      STARTTLS (see Section 6.2.1) or alternatively reconnect on an\n      Implicit TLS port, and then repeat the operation.\n\n        C: d login \"fred\" \"foo\"\n        S: d NO [PRIVACYREQUIRED] Connection offers no privacy\n\n        C: d select inbox\n        S: d NO [PRIVACYREQUIRED] Connection offers no privacy\n\n   READ-ONLY\n      The mailbox is selected as read-only, or its access while selected\n      has changed from read-write to read-only.\n\n   READ-WRITE\n      The mailbox is selected as read-write, or its access while\n      selected has changed from read-only to read-write.\n\n   SERVERBUG\n      The server encountered a bug in itself or violated one of its own\n      invariants.\n\n        C: j select \"/archive/projects/experiment-iv\"\n        S: j NO [SERVERBUG] This should not happen\n\n   TRYCREATE\n      An APPEND, COPY, or MOVE attempt is failing because the target\n      mailbox does not exist (as opposed to some other reason).  This is\n      a hint to the client that the operation can succeed if the mailbox\n      is first created by the CREATE command.\n\n   UIDNEXT\n      Followed by a decimal number and indicates the next unique\n      identifier value.  Refer to Section 2.3.1.1 for more information.\n\n   UIDNOTSTICKY\n      The selected mailbox is supported by a mail store that does not\n      support persistent UIDs; that is, UIDVALIDITY will be different\n      each time the mailbox is selected.  Consequently, APPEND or COPY\n      to this mailbox will not return an APPENDUID or COPYUID response\n      code.\n\n      This response code is returned in an untagged NO response to the\n      SELECT command.\n\n         Note: servers SHOULD NOT have any UIDNOTSTICKY mail stores.\n         This facility exists to support legacy mail stores in which it\n         is technically infeasible to support persistent UIDs.  This\n         should be avoided when designing new mail stores.\n\n   UIDVALIDITY\n      Followed by a decimal number and indicates the unique identifier\n      validity value.  Refer to Section 2.3.1.1 for more information.\n\n   UNAVAILABLE\n      Temporary failure because a subsystem is down.  For example, an\n      IMAP server that uses a Lightweight Directory Access Protocol\n      (LDAP) or Radius server for authentication might use this response\n      code when the LDAP/Radius server is down.\n\n        C: a LOGIN \"fred\" \"foo\"\n        S: a NO [UNAVAILABLE] User's backend down for maintenance\n\n   UNKNOWN-CTE\n      The server does not know how to decode the section's Content-\n      Transfer-Encoding.\n\n   Client implementations MUST ignore response codes that they do not\n   recognize.\n\n7.1.1.  OK Response\n\n   Contents: \n               OPTIONAL response code\n               human-readable text\n\n   The OK response indicates an information message from the server.\n   When tagged, it indicates successful completion of the associated\n   command.  The human-readable text MAY be presented to the user as an\n   information message.  The untagged form indicates an information-only\n   message; the nature of the information MAY be indicated by a response\n   code.\n\n   The untagged form is also used as one of three possible greetings at\n   connection startup.  It indicates that the connection is not yet\n   authenticated and that a LOGIN or an AUTHENTICATE command is needed.\n\n   Example:\n\n     S: * OK IMAP4rev2 server ready\n     C: A001 LOGIN fred blurdybloop\n     S: * OK [ALERT] System shutdown in 10 minutes\n     S: A001 OK LOGIN Completed\n\n7.1.2.  NO Response\n\n   Contents: \n               OPTIONAL response code\n               human-readable text\n\n   The NO response indicates an operational error message from the\n   server.  When tagged, it indicates unsuccessful completion of the\n   associated command.  The untagged form indicates a warning; the\n   command can still complete successfully.  The human-readable text\n   describes the condition.\n\n   Example:\n\n     C: A222 COPY 1:2 owatagusiam\n     S: * NO Disk is 98% full, please delete unnecessary data\n     S: A222 OK COPY completed\n     C: A223 COPY 3:200 blurdybloop\n     S: * NO Disk is 98% full, please delete unnecessary data\n     S: * NO Disk is 99% full, please delete unnecessary data\n     S: A223 NO COPY failed: disk is full\n\n7.1.3.  BAD Response\n\n   Contents: \n               OPTIONAL response code\n               human-readable text\n\n   The BAD response indicates an error message from the server.  When\n   tagged, it reports a protocol-level error in the client's command;\n   the tag indicates the command that caused the error.  The untagged\n   form indicates a protocol-level error for which the associated\n   command can not be determined; it can also indicate an internal\n   server failure.  The human-readable text describes the condition.\n\n   Example:\n\n     C: ...very long command line...\n     S: * BAD Command line too long\n     C: ...empty line...\n     S: * BAD Empty command line\n     C: A443 EXPUNGE\n     S: * BAD Disk crash, attempting salvage to a new disk!\n     S: * OK Salvage successful, no data lost\n     S: A443 OK Expunge completed\n\n7.1.4.  PREAUTH Response\n\n   Contents: \n               OPTIONAL response code\n               human-readable text\n\n   The PREAUTH response is always untagged and is one of three possible\n   greetings at connection startup.  It indicates that the connection\n   has already been authenticated by external means; thus, no LOGIN/\n   AUTHENTICATE command is needed.\n\n   Because PREAUTH moves the connection directly to the authenticated\n   state, it effectively prevents the client from using the STARTTLS\n   command (Section 6.2.1).  For this reason, the PREAUTH response\n   SHOULD only be returned by servers on connections that are protected\n   by TLS (such as on an Implicit TLS port [RFC8314]) or protected\n   through other means such as IPsec.  Clients that require mandatory\n   TLS MUST close the connection after receiving the PREAUTH response on\n   a non-protected port.\n\n   Example:\n\n     S: * PREAUTH IMAP4rev2 server logged in as Smith\n\n7.1.5.  BYE Response\n\n   Contents: \n               OPTIONAL response code\n               human-readable text\n\n   The BYE response is always untagged and indicates that the server is\n   about to close the connection.  The human-readable text MAY be\n   displayed to the user in a status report by the client.  The BYE\n   response is sent under one of four conditions:\n\n   1.  as part of a normal logout sequence.  The server will close the\n       connection after sending the tagged OK response to the LOGOUT\n       command.\n\n   2.  as a panic shutdown announcement.  The server closes the\n       connection immediately.\n\n   3.  as an announcement of an inactivity autologout.  The server\n       closes the connection immediately.\n\n   4.  as one of three possible greetings at connection startup,\n       indicating that the server is not willing to accept a connection\n       from this client.  The server closes the connection immediately.\n\n   The difference between a BYE that occurs as part of a normal LOGOUT\n   sequence (the first case) and a BYE that occurs because of a failure\n   (the other three cases) is that the connection closes immediately in\n   the failure case.  In all cases, the client SHOULD continue to read\n   response data from the server until the connection is closed; this\n   will ensure that any pending untagged or completion responses are\n   read and processed.\n\n   Example:\n\n     S: * BYE Autologout; idle for too long\n\n7.2.  Server Responses - Server Status\n\n   These responses are always untagged.  This is how server status data\n   are transmitted from the server to the client.\n\n7.2.1.  ENABLED Response\n\n   Contents:   capability listing\n\n   The ENABLED response occurs as a result of an ENABLE command.  The\n   capability listing contains a space-separated listing of capability\n   names that the server supports and that were successfully enabled.\n   The ENABLED response may contain no capabilities, which means that no\n   extensions listed by the client were successfully enabled.\n\n   Example:\n\n     S: * ENABLED CONDSTORE QRESYNC\n\n7.2.2.  CAPABILITY Response\n\n   Contents:   capability listing\n\n   The CAPABILITY response occurs as a result of a CAPABILITY command.\n   The capability listing contains a space-separated listing of\n   capability names that the server supports.  The capability listing\n   MUST include the atom \"IMAP4rev2\", but note that it doesn't have to\n   be the first capability listed.  The order of capability names has no\n   significance.\n\n   Client and server implementations MUST implement the capabilities\n   \"AUTH=PLAIN\" (described in [PLAIN]), and MUST implement \"STARTTLS\"\n   and \"LOGINDISABLED\" on the cleartext port.  See the Security\n   Considerations (Section 11) for important information related to\n   these capabilities.\n\n   A capability name that begins with \"AUTH=\" indicates that the server\n   supports that particular authentication mechanism [SASL].\n\n   The LOGINDISABLED capability indicates that the LOGIN command is\n   disabled, and that the server will respond with a tagged NO response\n   to any attempt to use the LOGIN command even if the user name and\n   password are valid (their validity will not be checked).  An IMAP\n   client MUST NOT issue the LOGIN command if the server advertises the\n   LOGINDISABLED capability.\n\n   Other capability names indicate that the server supports an\n   extension, revision, or amendment to the IMAP4rev2 protocol.  If\n   IMAP4rev1 capability is not advertised, server responses MUST conform\n   to this document until the client issues a command that uses an\n   additional capability.  If both IMAP4rev1 and IMAP4rev2 capabilities\n   are advertised, server responses MUST conform to [RFC3501] until the\n   client issues a command that uses an additional capability.  (For\n   example, the client can issue ENABLE IMAP4rev2 to enable\n   IMAP4rev2-specific behavior.)\n\n   Capability names SHOULD be registered with IANA using the RFC\n   Required policy [RFC8126].  A server SHOULD NOT offer unregistered\n   capability names.\n\n   Client implementations SHOULD NOT require any capability name other\n   than \"IMAP4rev2\", and possibly \"STARTTLS\" and \"LOGINDISABLED\" (on a\n   cleartext port).  Client implementations MUST ignore any unknown\n   capability names.\n\n   A server MAY send capabilities automatically, by using the CAPABILITY\n   response code in the initial PREAUTH or OK responses and by sending\n   an updated CAPABILITY response code in the tagged OK response as part\n   of a successful authentication.  It is unnecessary for a client to\n   send a separate CAPABILITY command if it recognizes these automatic\n   capabilities and there was no change to the TLS and/or authentication\n   state since they were received.\n\n   The list of capabilities returned by a server MAY change during the\n   connection.  In particular, it is quite common for the server to\n   change the list of capabilities after successful TLS negotiation\n   (STARTTLS command) and/or after successful authentication\n   (AUTHENTICATE or LOGIN commands).\n\n   Example:\n\n     S: * CAPABILITY STARTTLS AUTH=GSSAPI IMAP4rev2 LOGINDISABLED\n      XPIG-LATIN\n\n   Note that in the above example, XPIG-LATIN is a fictitious capability\n   name.\n\n7.3.  Server Responses - Mailbox Status\n\n   These responses are always untagged.  This is how mailbox status data\n   are transmitted from the server to the client.  Many of these\n   responses typically result from a command with the same name.\n\n7.3.1.  LIST Response\n\n   Contents: \n               name attributes\n               hierarchy delimiter\n               name\n               OPTIONAL extension data\n\n   The LIST response occurs as a result of a LIST command.  It returns a\n   single name that matches the LIST specification.  There can be\n   multiple LIST responses for a single LIST command.\n\n   The following base mailbox name attributes are defined:\n\n   \\NonExistent\n      The \"\\NonExistent\" attribute indicates that a mailbox name does\n      not refer to an existing mailbox.  Note that this attribute is not\n      meaningful by itself, as mailbox names that match the canonical\n      LIST pattern but don't exist must not be returned unless one of\n      the two conditions listed below is also satisfied:\n\n      1.  The mailbox name also satisfies the selection criteria (for\n          example, it is subscribed and the \"SUBSCRIBED\" selection\n          option has been specified).\n\n      2.  \"RECURSIVEMATCH\" has been specified, and the mailbox name has\n          at least one descendant mailbox name that does not match the\n          LIST pattern and does match the selection criteria.\n\n      In practice, this means that the \"\\NonExistent\" attribute is\n      usually returned with one or more of \"\\Subscribed\", \"\\Remote\",\n      \"\\HasChildren\", or the CHILDINFO extended data item.\n\n      The \"\\NonExistent\" attribute implies \"\\NoSelect\".\n\n   \\Noinferiors\n      It is not possible for any child levels of hierarchy to exist\n      under this name; no child levels exist now and none can be created\n      in the future.\n\n   \\Noselect\n      It is not possible to use this name as a selectable mailbox.\n\n   \\HasChildren\n      The presence of this attribute indicates that the mailbox has\n      child mailboxes.  A server SHOULD NOT set this attribute if there\n      are child mailboxes and the user does not have permission to\n      access any of them.  In this case, \\HasNoChildren SHOULD be used.\n      In many cases, however, a server may not be able to efficiently\n      compute whether a user has access to any child mailboxes.  Note\n      that even though the \\HasChildren attribute for a mailbox must be\n      correct at the time of processing the mailbox, a client must be\n      prepared to deal with a situation when a mailbox is marked with\n      the \\HasChildren attribute, but no child mailbox appears in the\n      response to the LIST command.  This might happen, for example, due\n      to child mailboxes being deleted or made inaccessible to the user\n      (using access control) by another client before the server is able\n      to list them.\n\n   \\HasNoChildren\n      The presence of this attribute indicates that the mailbox has NO\n      child mailboxes that are accessible to the currently authenticated\n      user.\n\n   \\Marked\n      The mailbox has been marked \"interesting\" by the server; the\n      mailbox probably contains messages that have been added since the\n      last time the mailbox was selected.\n\n   \\Unmarked\n      The mailbox does not contain any additional messages since the\n      last time the mailbox was selected.\n\n   \\Subscribed\n      The mailbox name was subscribed to using the SUBSCRIBE command.\n\n   \\Remote\n      The mailbox is a remote mailbox.\n\n   It is an error for the server to return both a \\HasChildren and a\n   \\HasNoChildren attribute in the same LIST response.  A client that\n   encounters a LIST response with both \\HasChildren and \\HasNoChildren\n   attributes present should act as if both are absent in the LIST\n   response.\n\n      Note: the \\HasNoChildren attribute should not be confused with the\n      \\NoInferiors attribute, which indicates that no child mailboxes\n      exist now and none can be created in the future.\n\n   If it is not feasible for the server to determine whether or not the\n   mailbox is \"interesting\", the server SHOULD NOT send either \\Marked\n   or \\Unmarked.  The server MUST NOT send more than one of \\Marked,\n   \\Unmarked, and \\Noselect for a single mailbox, and it MAY send none\n   of these.\n\n   In addition to the base mailbox name attributes defined above, an\n   IMAP server MAY also include any or all of the following attributes\n   that denote \"role\" (or \"special-use\") of a mailbox.  These attributes\n   are included along with base attributes defined above.  A given\n   mailbox may have none, one, or more than one of these attributes.  In\n   some cases, a special use is advice to a client about what to put in\n   that mailbox.  In other cases, it's advice to a client about what to\n   expect to find there.\n\n   \\All\n      This mailbox presents all messages in the user's message store.\n      Implementations MAY omit some messages, such as, perhaps, those in\n      \\Trash and \\Junk.  When this special use is supported, it is\n      almost certain to represent a virtual mailbox.\n\n   \\Archive\n      This mailbox is used to archive messages.  The meaning of an\n      \"archival\" mailbox is server dependent; typically, it will be used\n      to get messages out of the inbox, or otherwise keep them out of\n      the user's way, while still making them accessible.\n\n   \\Drafts\n      This mailbox is used to hold draft messages -- typically, messages\n      that are being composed but have not yet been sent.  In some\n      server implementations, this might be a virtual mailbox,\n      containing messages from other mailboxes that are marked with the\n      \"\\Draft\" message flag.  Alternatively, this might just be advice\n      that a client put drafts here.\n\n   \\Flagged\n      This mailbox presents all messages marked in some way as\n      \"important\".  When this special use is supported, it is likely to\n      represent a virtual mailbox collecting messages (from other\n      mailboxes) that are marked with the \"\\Flagged\" message flag.\n\n   \\Junk\n      This mailbox is where messages deemed to be junk mail are held.\n      Some server implementations might put messages here automatically.\n      Alternatively, this might just be advice to a client-side spam\n      filter.\n\n   \\Sent\n      This mailbox is used to hold copies of messages that have been\n      sent.  Some server implementations might put messages here\n      automatically.  Alternatively, this might just be advice that a\n      client save sent messages here.\n\n   \\Trash\n      This mailbox is used to hold messages that have been deleted or\n      marked for deletion.  In some server implementations, this might\n      be a virtual mailbox, containing messages from other mailboxes\n      that are marked with the \"\\Deleted\" message flag.  Alternatively,\n      this might just be advice that a client that chooses not to use\n      the IMAP \"\\Deleted\" model should use as its trash location.  In\n      server implementations that strictly expect the IMAP \"\\Deleted\"\n      model, this special use is likely not to be supported.\n\n   All special-use attributes are OPTIONAL, and any given server or\n   message store may support any combination of the attributes, or none\n   at all.  In most cases, there will likely be at most one mailbox with\n   a given attribute for a given user, but in some server or message\n   store implementations, it might be possible for multiple mailboxes to\n   have the same special-use attribute.\n\n   Special-use attributes are likely to be user specific.  User Adam\n   might share his \\Sent mailbox with user Barb, but that mailbox is\n   unlikely to also serve as Barb's \\Sent mailbox.\n\n   Other mailbox name attributes can be found in the \"IMAP Mailbox Name\n   Attributes\" registry [IMAP-MAILBOX-NAME-ATTRS-REG].\n\n   The hierarchy delimiter is a character used to delimit levels of\n   hierarchy in a mailbox name.  A client can use it to create child\n   mailboxes and to search higher or lower levels of naming hierarchy.\n   All children of a top-level hierarchy node MUST use the same\n   separator character.  A NIL hierarchy delimiter means that no\n   hierarchy exists; the name is a \"flat\" name.\n\n   The name represents an unambiguous left-to-right hierarchy and MUST\n   be valid for use as a reference in LIST command.  Unless \\Noselect or\n   \\NonExistent is indicated, the name MUST also be valid as an argument\n   for commands, such as SELECT, that accept mailbox names.\n\n   The name might be followed by an OPTIONAL series of extended fields,\n   a parenthesized list of tagged data (also referred to as an \"extended\n   data item\").  The first element of an extended field is a string,\n   which identifies the type of data.  [RFC5258] specifies requirements\n   on string registration (which are called \"tags\"; such tags are not to\n   be confused with IMAP command tags); in particular, it states that\n   \"Tags MUST be registered with IANA\".  This document doesn't change\n   that.  See Section 9.5 of [RFC5258] for the registration template.\n   The server MAY return data in the extended fields that was not\n   directly solicited by the client in the corresponding LIST command.\n   For example, the client can enable extra extended fields by using\n   another IMAP extension that makes use of the extended LIST responses.\n   The client MUST ignore all extended fields it doesn't recognize.\n\n   Example:\n\n     S: * LIST (\\Noselect) \"/\" ~/Mail/foo\n\n   Example:\n\n     S: * LIST (\\Marked) \":\" Tables (tablecloth ((\"edge\" \"lacy\")\n         (\"color\" \"red\")) Sample \"text\")\n     S: * LIST () \":\" Tables:new (tablecloth (\"edge\" \"lacy\")\n         Sample (\"text\" \"more text\"))\n\n7.3.2.  NAMESPACE Response\n\n   Contents:   the prefix and hierarchy delimiter to the server's\n               Personal Namespace(s), Other Users' Namespace(s), and\n               Shared Namespace(s)\n\n   The NAMESPACE response occurs as a result of a NAMESPACE command.  It\n   contains the prefix and hierarchy delimiter to the server's Personal\n   Namespace(s), Other Users' Namespace(s), and Shared Namespace(s) that\n   the server wishes to expose.  The response will contain a NIL for any\n   namespace class that is not available.  The Namespace-Response-\n   Extensions ABNF non-terminal is defined for extensibility and MAY be\n   included in the response.\n\n   Example:\n\n     S: * NAMESPACE ((\"\" \"/\")) ((\"~\" \"/\")) NIL\n\n7.3.3.  STATUS Response\n\n   Contents: \n               name\n               status parenthesized list\n\n   The STATUS response occurs as a result of a STATUS command.  It\n   returns the mailbox name that matches the STATUS specification and\n   the requested mailbox status information.\n\n   Example:\n\n     S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)\n\n7.3.4.  ESEARCH Response\n\n   Contents:   one or more search-return-data pairs\n\n   The ESEARCH response occurs as a result of a SEARCH or UID SEARCH\n   command.\n\n   The ESEARCH response starts with an optional search correlator.  If\n   it is missing, then the response was not caused by a particular IMAP\n   command, whereas if it is present, it contains the tag of the command\n   that caused the response to be returned.\n\n   The search correlator is followed by an optional UID indicator.  If\n   this indicator is present, all data in the ESEARCH response refers to\n   UIDs; otherwise, all returned data refers to message numbers.\n\n   The rest of the ESEARCH response contains one or more search data\n   pairs.  Each pair starts with a unique return item name, followed by\n   a space and the corresponding data.  Search data pairs may be\n   returned in any order.  Unless otherwise specified by an extension,\n   any return item name SHOULD appear only once in an ESEARCH response.\n\n   This document specifies the following return item names:\n\n   MIN\n      Returns the lowest message number/UID that satisfies the SEARCH\n      criteria.\n\n      If the SEARCH results in no matches, the server MUST NOT include\n      the MIN return item in the ESEARCH response; however, it still\n      MUST send the ESEARCH response.\n\n   MAX\n      Returns the highest message number/UID that satisfies the SEARCH\n      criteria.\n\n      If the SEARCH results in no matches, the server MUST NOT include\n      the MAX return item in the ESEARCH response; however, it still\n      MUST send the ESEARCH response.\n\n   ALL\n      Returns all message numbers/UIDs that satisfy the SEARCH criteria\n      using the sequence-set syntax.  Each set MUST be complete; in\n      particular, a UID set is returned in an ESEARCH response only when\n      each number in the range corresponds to an existing (matching)\n      message.  The client MUST NOT assume that messages/UIDs will be\n      listed in any particular order.\n\n      If the SEARCH results in no matches, the server MUST NOT include\n      the ALL return item in the ESEARCH response; however, it still\n      MUST send the ESEARCH response.\n\n   COUNT\n      Returns the number of messages that satisfy the SEARCH criteria.\n      This return item MUST always be included in the ESEARCH response.\n\n   Example:\n\n     S: * ESEARCH UID COUNT 17 ALL 4:18,21,28\n\n   Example:\n\n     S: * ESEARCH (TAG \"a567\") UID COUNT 17 ALL 4:18,21,28\n\n   Example:\n\n     S: * ESEARCH COUNT 18 ALL 1:17,21\n\n7.3.5.  FLAGS Response\n\n   Contents:   flag parenthesized list\n\n   The FLAGS response occurs as a result of a SELECT or EXAMINE command.\n   The flag parenthesized list identifies the flags (at a minimum, the\n   system-defined flags) that are applicable for this mailbox.  Flags\n   other than the system flags can also exist, depending on server\n   implementation.\n\n   The update from the FLAGS response MUST be remembered by the client.\n\n   Example:\n\n     S: * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n\n7.4.  Server Responses - Mailbox Size\n\n   These responses are always untagged.  This is how changes in the size\n   of the mailbox are transmitted from the server to the client.\n   Immediately following the \"*\" token is a number that represents a\n   message count.\n\n7.4.1.  EXISTS Response\n\n   Contents:   none\n\n   The EXISTS response reports the number of messages in the mailbox.\n   This response occurs as a result of a SELECT or EXAMINE command and\n   if the size of the mailbox changes (e.g., new messages).\n\n   The update from the EXISTS response MUST be remembered by the client.\n\n   Example:\n\n     S: * 23 EXISTS\n\n7.5.  Server Responses - Message Status\n\n   These responses are always untagged.  This is how message data are\n   transmitted from the server to the client, often as a result of a\n   command with the same name.  Immediately following the \"*\" token is a\n   number that represents a message sequence number.\n\n7.5.1.  EXPUNGE Response\n\n   Contents:   none\n\n   The EXPUNGE response reports that the specified message sequence\n   number has been permanently removed from the mailbox.  The message\n   sequence number for each successive message in the mailbox is\n   immediately decremented by 1, and this decrement is reflected in\n   message sequence numbers in subsequent responses (including other\n   untagged EXPUNGE responses).\n\n   The EXPUNGE response also decrements the number of messages in the\n   mailbox; it is not necessary to send an EXISTS response with the new\n   value.\n\n   As a result of the immediate decrement rule, message sequence numbers\n   that appear in a set of successive EXPUNGE responses depend upon\n   whether the messages are removed starting from lower numbers to\n   higher numbers, or from higher numbers to lower numbers.  For\n   example, if the last 5 messages in a 9-message mailbox are expunged,\n   a \"lower to higher\" server will send five untagged EXPUNGE responses\n   for message sequence number 5, whereas a \"higher to lower\" server\n   will send successive untagged EXPUNGE responses for message sequence\n   numbers 9, 8, 7, 6, and 5.\n\n   An EXPUNGE response MUST NOT be sent when no command is in progress,\n   nor while responding to a FETCH, STORE, or SEARCH command.  This rule\n   is necessary to prevent a loss of synchronization of message sequence\n   numbers between client and server.  A command is not \"in progress\"\n   until the complete command has been received; in particular, a\n   command is not \"in progress\" during the negotiation of command\n   continuation.\n\n      Note: UID FETCH, UID STORE, and UID SEARCH are different commands\n      from FETCH, STORE, and SEARCH.  An EXPUNGE response MAY be sent\n      during a UID command.\n\n   The update from the EXPUNGE response MUST be remembered by the\n   client.\n\n   Example:\n\n     S: * 44 EXPUNGE\n\n7.5.2.  FETCH Response\n\n   Contents:   message data\n\n   The FETCH response returns data about a message to the client.  The\n   data are pairs of data item names, and their values are in\n   parentheses.  This response occurs as the result of a FETCH or STORE\n   command, as well as by a unilateral server decision (e.g., flag\n   updates).\n\n   The current data items are:\n\n   BINARY[<section-binary>]<<number>>\n      An <nstring> or <literal8> expressing the content of the specified\n      section after removing any encoding specified in the corresponding\n      Content-Transfer-Encoding header field.  If <number> is present,\n      it refers to the offset within the DECODED section data.\n\n      If the domain of the decoded data is \"8bit\" and the data does not\n      contain the NUL octet, the server SHOULD return the data in a\n      <string> instead of a <literal8>; this allows the client to\n      determine if the \"8bit\" data contains the NUL octet without having\n      to explicitly scan the data stream for NULs.\n\n      Messaging clients and servers have been notoriously lax in their\n      adherence to the Internet CRLF convention for terminating lines of\n      textual data (text/* media types) in Internet protocols.  When\n      sending data in a BINARY[...] FETCH data item, servers MUST ensure\n      that textual line-oriented sections are always transmitted using\n      the IMAP CRLF line termination syntax, regardless of the\n      underlying storage representation of the data on the server.\n\n      If the server does not know how to decode the section's Content-\n      Transfer-Encoding, it MUST fail the request and issue a \"NO\"\n      response that contains the \"UNKNOWN-CTE\" response code.\n\n   BINARY.SIZE[<section-binary>]\n      The size of the section after removing any encoding specified in\n      the corresponding Content-Transfer-Encoding header field.  The\n      value returned MUST match the size of the <nstring> or <literal8>\n      that will be returned by the corresponding FETCH BINARY request.\n\n      If the server does not know how to decode the section's Content-\n      Transfer-Encoding, it MUST fail the request and issue a \"NO\"\n      response that contains the \"UNKNOWN-CTE\" response code.\n\n   BODY\n      A form of BODYSTRUCTURE without extension data.\n\n   BODY[<section>]<<origin octet>>\n      A string expressing the body contents of the specified section.\n      The string SHOULD be interpreted by the client according to the\n      content transfer encoding, body type, and subtype.\n\n      If the origin octet is specified, this string is a substring of\n      the entire body contents, starting at that origin octet.  This\n      means that BODY[]<0> MAY be truncated, but BODY[] is NEVER\n      truncated.\n\n         Note: The origin octet facility MUST NOT be used by a server in\n         a FETCH response unless the client specifically requested it by\n         means of a FETCH of a BODY[<section>]<<partial>> data item.\n\n      8-bit textual data is permitted if a [CHARSET] identifier is part\n      of the body parameter parenthesized list for this section.  Note\n      that headers (part specifiers HEADER or MIME, or the header\n      portion of a MESSAGE/RFC822 or MESSAGE/GLOBAL part) MAY be in UTF-\n      8.  Note also that the [RFC5322] delimiting blank line between the\n      header and the body is not affected by header-line subsetting; the\n      blank line is always included as part of the header data, except\n      in the case of a message that has no body and no blank line.\n\n      Non-textual data such as binary data MUST be transfer encoded into\n      a textual form, such as base64, prior to being sent to the client.\n      To derive the original binary data, the client MUST decode the\n      transfer-encoded string.\n\n   BODYSTRUCTURE\n      A parenthesized list that describes the [MIME-IMB] body structure\n      of a message.  This is computed by the server by parsing the\n      [MIME-IMB] header fields, defaulting various fields as necessary.\n\n      For example, a simple text message of 48 lines and 2279 octets can\n      have a body structure of:\n\n         (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 2279 48)\n\n      Multiple parts are indicated by parenthesis nesting.  Instead of a\n      body type as the first element of the parenthesized list, there is\n      a sequence of one or more nested body structures.  The second\n      element of the parenthesized list is the multipart subtype (mixed,\n      digest, parallel, alternative, etc.).\n\n      For example, a two-part message consisting of a text and a\n      base64-encoded text attachment can have a body structure of:\n\n\n         ((\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\" 1152 23)\n          (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\" \"NAME\" \"cc.diff\")\n          \"<960723163407.20117h@cac.washington.edu>\" \"Compiler diff\"\n          \"BASE64\" 4554 73) \"MIXED\")\n\n      Extension data follows the multipart subtype.  Extension data is\n      never returned with the BODY fetch but can be returned with a\n      BODYSTRUCTURE fetch.  Extension data, if present, MUST be in the\n      defined order.  The extension data of a multipart body part are in\n      the following order:\n\n   body parameter parenthesized list\n      A parenthesized list of attribute/value pairs (e.g., (\"foo\" \"bar\"\n      \"baz\" \"rag\") where \"bar\" is the value of \"foo\", and \"rag\" is the\n      value of \"baz\") as defined in [MIME-IMB].  Servers SHOULD decode\n      parameter-value continuations and parameter-value character sets\n      as described in [RFC2231], for example, if the message contains\n      parameters \"baz*0\", \"baz*1\", and \"baz*2\", the server should decode\n      them per [RFC2231], concatenate, and return the resulting value as\n      a parameter \"baz\".  Similarly, if the message contains parameters\n      \"foo*0*\" and \"foo*1*\", the server should decode them per\n      [RFC2231], convert to UTF-8, concatenate, and return the resulting\n      value as a parameter \"foo*\".\n\n   body disposition\n      A parenthesized list, consisting of a disposition type string,\n      followed by a parenthesized list of disposition attribute/value\n      pairs as defined in [DISPOSITION].  Servers SHOULD decode\n      parameter-value continuations as described in [RFC2231].\n\n   body language\n      A string or parenthesized list giving the body language value as\n      defined in [LANGUAGE-TAGS].\n\n   body location\n      A string giving the body content URI as defined in [LOCATION].\n\n      Any following extension data are not yet defined in this version\n      of the protocol.  Such extension data can consist of zero or more\n      NILs, strings, numbers, or potentially nested parenthesized lists\n      of such data.  Client implementations that do a BODYSTRUCTURE\n      fetch MUST be prepared to accept such extension data.  Server\n      implementations MUST NOT send such extension data until it has\n      been defined by a revision of this protocol.\n\n      The basic fields of a non-multipart body part are in the following\n      order:\n\n   body type\n      A string giving the content media-type name as defined in\n      [MIME-IMB].\n\n   body subtype\n      A string giving the content subtype name as defined in [MIME-IMB].\n\n   body parameter parenthesized list\n      A parenthesized list of attribute/value pairs (e.g., (\"foo\" \"bar\"\n      \"baz\" \"rag\") where \"bar\" is the value of \"foo\", and \"rag\" is the\n      value of \"baz\") as defined in [MIME-IMB].\n\n   body id\n      A string giving the Content-ID header field value as defined in\n      Section 7 of [MIME-IMB].\n\n   body description\n      A string giving the Content-Description header field value as\n      defined in Section 8 of [MIME-IMB].\n\n   body encoding\n      A string giving the content transfer encoding as defined in\n      Section 6 of [MIME-IMB].\n\n   body size\n      A number giving the size of the body in octets.  Note that this\n      size is the size in its transfer encoding and not the resulting\n      size after any decoding.\n\n      A body type of type MESSAGE and subtype RFC822 contains,\n      immediately after the basic fields, the envelope structure, body\n      structure, and size in text lines of the encapsulated message.\n\n      A body type of type TEXT contains, immediately after the basic\n      fields, the size of the body in text lines.  Note that this size\n      is the size in its content transfer encoding and not the resulting\n      size after any decoding.\n\n      Extension data follows the basic fields and the type-specific\n      fields listed above.  Extension data is never returned with the\n      BODY fetch but can be returned with a BODYSTRUCTURE fetch.\n      Extension data, if present, MUST be in the defined order.\n\n      The extension data of a non-multipart body part are in the\n      following order:\n\n   body MD5\n      A string giving the body MD5 value as defined in [MD5].\n\n   body disposition\n      A parenthesized list with the same content and function as the\n      body disposition for a multipart body part.\n\n   body language\n      A string or parenthesized list giving the body language value as\n      defined in [LANGUAGE-TAGS].\n\n   body location\n      A string giving the body content URI as defined in [LOCATION].\n\n      Any following extension data are not yet defined in this version\n      of the protocol and would be as described above under multipart\n      extension data.\n\n   ENVELOPE\n      A parenthesized list that describes the envelope structure of a\n      message.  This is computed by the server by parsing the [RFC5322]\n      header into the component parts, defaulting various fields as\n      necessary.\n\n      The fields of the envelope structure are in the following order:\n      date, subject, from, sender, reply-to, to, cc, bcc, in-reply-to,\n      and message-id.  The date, subject, in-reply-to, and message-id\n      fields are strings.  The from, sender, reply-to, to, cc, and bcc\n      fields are parenthesized lists of address structures.\n\n      An address structure is a parenthesized list that describes an\n      electronic mail address.  The fields of an address structure are\n      in the following order: display name, [SMTP] at-domain-list\n      (source route and obs-route ABNF production from [RFC5322]),\n      mailbox name (local-part ABNF production from [RFC5322]), and\n      hostname.\n\n      [RFC5322] group syntax is indicated by a special form of address\n      structure in which the hostname field is NIL.  If the mailbox name\n      field is also NIL, this is an end-of-group marker (semicolon in\n      RFC 822 syntax).  If the mailbox name field is non-NIL, this is\n      the start of a group marker, and the mailbox name field holds the\n      group name phrase.\n\n      If the Date, Subject, In-Reply-To, and Message-ID header fields\n      are absent in the [RFC5322] header, the corresponding member of\n      the envelope is NIL; if these header fields are present but empty,\n      the corresponding member of the envelope is the empty string.\n\n         Note: some servers may return a NIL envelope member in the\n         \"present but empty\" case.  Clients SHOULD treat NIL and the\n         empty string as identical.\n\n         Note: [RFC5322] requires that all messages have a valid Date\n         header field.  Therefore, for a well-formed message, the date\n         member in the envelope cannot be NIL or the empty string.\n         However, it can be NIL for a malformed or draft message.\n\n         Note: [RFC5322] requires that the In-Reply-To and Message-ID\n         header fields, if present, have non-empty content.  Therefore,\n         for a well-formed message, the in-reply-to and message-id\n         members in the envelope cannot be the empty string.  However,\n         they can still be the empty string for a malformed message.\n\n      If the From, To, Cc, and Bcc header fields are absent in the\n      [RFC5322] header, or are present but empty, the corresponding\n      member of the envelope is NIL.\n\n      If the Sender or Reply-To header fields are absent in the\n      [RFC5322] header, or are present but empty, the server sets the\n      corresponding member of the envelope to be the same value as the\n      from member (the client is not expected to know how to do this).\n\n         Note: [RFC5322] requires that all messages have a valid From\n         header field.  Therefore, for a well-formed message, the from,\n         sender, and reply-to members in the envelope cannot be NIL.\n         However, they can be NIL for a malformed or draft message.\n\n   FLAGS\n      A parenthesized list of flags that are set for this message.\n\n   INTERNALDATE\n      A string representing the internal date of the message.\n\n   RFC822.SIZE\n      A number expressing the size of a message, as described in\n      Section 2.3.4.\n\n   UID\n      A number expressing the unique identifier of the message.\n\n   If the server chooses to send unsolicited FETCH responses, they MUST\n   include UID FETCH item.  Note that this is a new requirement when\n   compared to [RFC3501].\n\n   Example:\n\n     S: * 23 FETCH (FLAGS (\\Seen) RFC822.SIZE 44827 UID 447)\n\n7.6.  Server Responses - Command Continuation Request\n\n   The command continuation request response is indicated by a \"+\" token\n   instead of a tag.  This form of response indicates that the server is\n   ready to accept the continuation of a command from the client.  The\n   remainder of this response is a line of text.\n\n   This response is used in the AUTHENTICATE command to transmit server\n   data to the client and request additional client data.  This response\n   is also used if an argument to any command is a synchronizing\n   literal.\n\n   The client is not permitted to send the octets of the synchronizing\n   literal unless the server indicates that it is expected.  This\n   permits the server to process commands and reject errors on a line-\n   by-line basis.  The remainder of the command, including the CRLF that\n   terminates a command, follows the octets of the literal.  If there\n   are any additional command arguments, the literal octets are followed\n   by a space and those arguments.\n\n   Example:\n\n     C: A001 LOGIN {11}\n     S: + Ready for additional command text\n     C: FRED FOOBAR {7}\n     S: + Ready for additional command text\n     C: fat man\n     S: A001 OK LOGIN completed\n     C: A044 BLURDYBLOOP {102856}\n     S: A044 BAD No such command as \"BLURDYBLOOP\"\n\n8.  Sample IMAP4rev2 Connection\n\n   The following is a transcript of an IMAP4rev2 connection on a non-TLS\n   port.  A long line in this sample is broken for editorial clarity.\n\n   S:   * OK [CAPABILITY STARTTLS AUTH=SCRAM-SHA-256 LOGINDISABLED\n         IMAP4rev2] IMAP4rev2 Service Ready\n   C:   a000 starttls\n   S:   a000 OK Proceed with TLS negotiation\n    <TLS negotiation>\n   C:   A001 AUTHENTICATE SCRAM-SHA-256\n         biwsbj11c2VyLHI9ck9wck5HZndFYmVSV2diTkVrcU8=\n   S:   + cj1yT3ByTkdmd0ViZVJXZ2JORWtxTyVodllEcFdVYTJSYVRDQWZ1eEZJbGopaE\n        5sRiRrMCxzPVcyMlphSjBTTlk3c29Fc1VFamI2Z1E9PSxpPTQwOTY=\n   C:   Yz1iaXdzLHI9ck9wck5HZndFYmVSV2diTkVrcU8laHZZRHBXVWEyUmFUQ0FmdXhG\n        SWxqKWhObEYkazAscD1kSHpiWmFwV0lrNGpVaE4rVXRlOXl0YWc5empmTUhnc3Ft\n        bWl6N0FuZFZRPQ==\n   S:   + dj02cnJpVFJCaTIzV3BSUi93dHVwK21NaFVaVW4vZEI1bkxUSlJzamw5NUc0\n        PQ==\n   C:\n   S:   A001 OK SCRAM-SHA-256 authentication successful\n   C:   babc ENABLE IMAP4rev2\n   S:   * ENABLED IMAP4rev2\n   S:   babc OK Some capabilities enabled\n   C:   a002 select inbox\n   S:   * 18 EXISTS\n   S:   * FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\n   S:   * OK [UIDVALIDITY 3857529045] UIDs valid\n   S:   * LIST () \"/\" INBOX (\"OLDNAME\" (\"inbox\"))\n   S:   a002 OK [READ-WRITE] SELECT completed\n   C:   a003 fetch 12 full\n   S:   * 12 FETCH (FLAGS (\\Seen) INTERNALDATE\n         \"17-Jul-1996 02:44:25 -0700\" RFC822.SIZE 4286 ENVELOPE (\n         \"Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\"\n         \"IMAP4rev2 WG mtg summary and minutes\"\n         ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n         ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n         ((\"Terry Gray\" NIL \"gray\" \"cac.washington.edu\"))\n         ((NIL NIL \"imap\" \"cac.washington.edu\"))\n         ((NIL NIL \"minutes\" \"CNRI.Reston.VA.US\")\n         (\"John Klensin\" NIL \"KLENSIN\" \"MIT.EDU\")) NIL NIL\n         \"<B27397-0100000@cac.washington.ed>\")\n         BODY (\"TEXT\" \"PLAIN\" (\"CHARSET\" \"US-ASCII\") NIL NIL \"7BIT\"\n         3028 92))\n   S:    a003 OK FETCH completed\n   C:    a004 fetch 12 body[header]\n   S:    * 12 FETCH (BODY[HEADER] {342}\n   S:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)\n   S:    From: Terry Gray <gray@cac.washington.edu>\n   S:    Subject: IMAP4rev2 WG mtg summary and minutes\n   S:    To: imap@cac.washington.edu\n   S:    cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@MIT.EDU>\n   S:    Message-Id: <B27397-0100000@cac.washington.edu>\n   S:    MIME-Version: 1.0\n   S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n   S:\n   S:    )\n   S:    a004 OK FETCH completed\n   C:    a005 store 12 +flags \\deleted\n   S:    * 12 FETCH (FLAGS (\\Seen \\Deleted))\n   S:    a005 OK +FLAGS completed\n   C:    a006 logout\n   S:    * BYE IMAP4rev2 server terminating connection\n   S:    a006 OK LOGOUT completed\n\n9.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   In the case of alternative or optional rules in which a later rule\n   overlaps an earlier rule, the rule that is listed earlier MUST take\n   priority.  For example, \"\\Seen\" when parsed as a flag is the \\Seen\n   flag name and not a flag-extension, even though \"\\Seen\" can be parsed\n   as a flag-extension.  Some, but not all, instances of this rule are\n   noted below.\n\n     Note: [ABNF] rules MUST be followed strictly; in particular:\n\n   1.  Unless otherwise noted, all alphabetic characters are case\n       insensitive.  The use of uppercase or lowercase characters to\n       define token strings is for editorial clarity only.\n       Implementations MUST accept these strings in a case-insensitive\n       fashion.\n\n   2.  In all cases, SP refers to exactly one space.  It is NOT\n       permitted to substitute TAB, insert additional spaces, or\n       otherwise treat SP as being equivalent to linear whitespace\n       (LWSP).\n\n   3.  The ASCII NUL character, %x00, MUST NOT be used anywhere, with\n       the exception of the OCTET production.\n\n   SP              = <Defined in RFC 5234>\n   CTL             = <Defined in RFC 5234>\n   CRLF            = <Defined in RFC 5234>\n   ALPHA           = <Defined in RFC 5234>\n   DIGIT           = <Defined in RFC 5234>\n   DQUOTE          = <Defined in RFC 5234>\n   OCTET           = <Defined in RFC 5234>\n\n   address         = \"(\" addr-name SP addr-adl SP addr-mailbox SP\n                     addr-host \")\"\n\n   addr-adl        = nstring\n                       ; Holds route from [RFC5322] obs-route if\n                       ; non-NIL\n\n   addr-host       = nstring\n                       ; NIL indicates [RFC5322] group syntax.\n                       ; Otherwise, holds [RFC5322] domain name\n\n   addr-mailbox    = nstring\n                       ; NIL indicates end of [RFC5322] group; if\n                       ; non-NIL and addr-host is NIL, holds\n                       ; [RFC5322] group name.\n                       ; Otherwise, holds [RFC5322] local-part\n                       ; after removing [RFC5322] quoting\n\n   addr-name       = nstring\n                       ; If non-NIL, holds phrase from [RFC5322]\n                       ; mailbox after removing [RFC5322] quoting\n\n   append          = \"APPEND\" SP mailbox [SP flag-list] [SP date-time]\n                     SP literal\n\n   append-uid      = uniqueid\n\n   astring         = 1*ASTRING-CHAR / string\n\n   ASTRING-CHAR   = ATOM-CHAR / resp-specials\n\n   atom            = 1*ATOM-CHAR\n\n   ATOM-CHAR       = <any CHAR except atom-specials>\n\n   atom-specials   = \"(\" / \")\" / \"{\" / SP / CTL / list-wildcards /\n                     quoted-specials / resp-specials\n\n   authenticate    = \"AUTHENTICATE\" SP auth-type [SP initial-resp]\n                     *(CRLF base64)\n\n   auth-type       = atom\n                       ; Authentication mechanism name, as defined by\n                       ; [SASL], Section 7.1\n\n   base64          = *(4base64-char) [base64-terminal]\n\n   base64-char     = ALPHA / DIGIT / \"+\" / \"/\"\n                       ; Case sensitive\n\n   base64-terminal = (2base64-char \"==\") / (3base64-char \"=\")\n\n   body            = \"(\" (body-type-1part / body-type-mpart) \")\"\n\n   body-extension  = nstring / number / number64 /\n                      \"(\" body-extension *(SP body-extension) \")\"\n                       ; Future expansion.  Client implementations\n                       ; MUST accept body-extension fields.  Server\n                       ; implementations MUST NOT generate\n                       ; body-extension fields except as defined by\n                       ; future Standard or Standards Track\n                       ; revisions of this specification.\n\n   body-ext-1part  = body-fld-md5 [SP body-fld-dsp [SP body-fld-lang\n                     [SP body-fld-loc *(SP body-extension)]]]\n                       ; MUST NOT be returned on non-extensible\n                       ; \"BODY\" fetch\n\n   body-ext-mpart  = body-fld-param [SP body-fld-dsp [SP body-fld-lang\n                     [SP body-fld-loc *(SP body-extension)]]]\n                       ; MUST NOT be returned on non-extensible\n                       ; \"BODY\" fetch\n\n   body-fields     = body-fld-param SP body-fld-id SP body-fld-desc SP\n                     body-fld-enc SP body-fld-octets\n\n   body-fld-desc   = nstring\n\n   body-fld-dsp    = \"(\" string SP body-fld-param \")\" / nil\n\n   body-fld-enc    = (DQUOTE (\"7BIT\" / \"8BIT\" / \"BINARY\" / \"BASE64\"/\n                     \"QUOTED-PRINTABLE\") DQUOTE) / string\n                     ; Content-Transfer-Encoding header field value.\n                     ; Defaults to \"7BIT\" (as per RFC 2045)\n                     ; if not present in the body part.\n\n   body-fld-id     = nstring\n\n   body-fld-lang   = nstring / \"(\" string *(SP string) \")\"\n\n   body-fld-loc    = nstring\n\n   body-fld-lines  = number64\n\n   body-fld-md5    = nstring\n\n   body-fld-octets = number\n\n   body-fld-param  = \"(\" string SP string *(SP string SP string) \")\" /\n                     nil\n\n   body-type-1part = (body-type-basic / body-type-msg / body-type-text)\n                     [SP body-ext-1part]\n\n   body-type-basic = media-basic SP body-fields\n                       ; MESSAGE subtype MUST NOT be \"RFC822\" or\n                       ; \"GLOBAL\"\n\n   body-type-mpart = 1*body SP media-subtype\n                     [SP body-ext-mpart]\n                       ; MULTIPART body part\n\n   body-type-msg   = media-message SP body-fields SP envelope\n                     SP body SP body-fld-lines\n\n   body-type-text  = media-text SP body-fields SP body-fld-lines\n\n   capability      = (\"AUTH=\" auth-type) / atom\n                       ; New capabilities SHOULD be\n                       ; registered with IANA using the\n                       ; RFC Required policy, i.e., in\n                       ; a Standards Track, an Experimental,\n                       ; or an Informational RFC.\n\n   capability-data = \"CAPABILITY\" *(SP capability) SP \"IMAP4rev2\"\n                     *(SP capability)\n                       ; See Section 6.1.1 for information about\n                       ; required security-related capabilities.\n                       ; Servers that offer RFC 1730 compatibility MUST\n                       ; list \"IMAP4\" as the first capability.\n                       ; Servers that offer RFC 3501 compatibility MUST\n                       ; list \"IMAP4rev1\" as one of the capabilities.\n\n   CHAR            = <defined in [ABNF]>\n\n   CHAR8           = %x01-ff\n                       ; any OCTET except NUL, %x00\n\n   charset         = atom / quoted\n\n   childinfo-extended-item =  \"CHILDINFO\" SP \"(\"\n               list-select-base-opt-quoted\n               *(SP list-select-base-opt-quoted) \")\"\n               ; Extended data item (mbox-list-extended-item)\n               ; returned when the RECURSIVEMATCH\n               ; selection option is specified.\n               ; Note 1: the CHILDINFO extended data item tag can be\n               ; returned with or without surrounding quotes, as per\n               ; mbox-list-extended-item-tag production.\n               ; Note 2: The selection options are always returned\n               ; quoted, unlike their specification in\n               ; the extended LIST command.\n\n   child-mbox-flag =  \"\\HasChildren\" / \"\\HasNoChildren\"\n               ; attributes for the CHILDREN return option, at most\n               ; one possible per LIST response\n\n   command         = tag SP (command-any / command-auth /\n                     command-nonauth / command-select) CRLF\n                       ; Modal based on state\n\n   command-any     = \"CAPABILITY\" / \"LOGOUT\" / \"NOOP\"\n                       ; Valid in all states\n\n   command-auth    = append / create / delete / enable / examine /\n                     list / namespace-command / rename /\n                     select / status / subscribe / unsubscribe /\n                     idle\n                       ; Valid only in Authenticated or Selected state\n\n   command-nonauth = login / authenticate / \"STARTTLS\"\n                       ; Valid only when in Not Authenticated state\n\n   command-select  = \"CLOSE\" / \"UNSELECT\" / \"EXPUNGE\" / copy /\n                      move / fetch / store / search / uid\n                       ; Valid only when in Selected state\n\n   continue-req    = \"+\" SP (resp-text / base64) CRLF\n\n   copy            = \"COPY\" SP sequence-set SP mailbox\n\n   create          = \"CREATE\" SP mailbox\n                       ; Use of INBOX gives a NO error\n\n   date            = date-text / DQUOTE date-text DQUOTE\n\n   date-day        = 1*2DIGIT\n                       ; Day of month\n\n   date-day-fixed  = (SP DIGIT) / 2DIGIT\n                       ; Fixed-format version of date-day\n\n   date-month      = \"Jan\" / \"Feb\" / \"Mar\" / \"Apr\" / \"May\" / \"Jun\" /\n                     \"Jul\" / \"Aug\" / \"Sep\" / \"Oct\" / \"Nov\" / \"Dec\"\n\n   date-text       = date-day \"-\" date-month \"-\" date-year\n\n   date-year       = 4DIGIT\n\n   date-time       = DQUOTE date-day-fixed \"-\" date-month \"-\" date-year\n                     SP time SP zone DQUOTE\n\n   delete          = \"DELETE\" SP mailbox\n                       ; Use of INBOX gives a NO error\n\n   digit-nz        = %x31-39\n                       ; 1-9\n\n   eitem-standard-tag =  atom\n               ; a tag for LIST extended data item defined in a Standard\n               ; Track or Experimental RFC.\n\n   eitem-vendor-tag =  vendor-token \"-\" atom\n               ; a vendor-specific tag for LIST extended data item\n\n   enable          = \"ENABLE\" 1*(SP capability)\n\n   enable-data     = \"ENABLED\" *(SP capability)\n\n   envelope        = \"(\" env-date SP env-subject SP env-from SP\n                     env-sender SP env-reply-to SP env-to SP env-cc SP\n                     env-bcc SP env-in-reply-to SP env-message-id \")\"\n\n   env-bcc         = \"(\" 1*address \")\" / nil\n\n   env-cc          = \"(\" 1*address \")\" / nil\n\n   env-date        = nstring\n\n   env-from        = \"(\" 1*address \")\" / nil\n\n   env-in-reply-to = nstring\n\n   env-message-id  = nstring\n\n   env-reply-to    = \"(\" 1*address \")\" / nil\n\n   env-sender      = \"(\" 1*address \")\" / nil\n\n   env-subject     = nstring\n\n   env-to          = \"(\" 1*address \")\" / nil\n\n   esearch-response  = \"ESEARCH\" [search-correlator] [SP \"UID\"]\n                       *(SP search-return-data)\n                     ; ESEARCH response replaces SEARCH response\n                     ; from IMAP4rev1.\n\n   examine         = \"EXAMINE\" SP mailbox\n\n   fetch           = \"FETCH\" SP sequence-set SP (\n                     \"ALL\" / \"FULL\" / \"FAST\" /\n                     fetch-att / \"(\" fetch-att *(SP fetch-att) \")\")\n\n   fetch-att       = \"ENVELOPE\" / \"FLAGS\" / \"INTERNALDATE\" /\n                     \"RFC822.SIZE\" /\n                     \"BODY\" [\"STRUCTURE\"] / \"UID\" /\n                     \"BODY\" section [partial] /\n                     \"BODY.PEEK\" section [partial] /\n                     \"BINARY\" [\".PEEK\"] section-binary [partial] /\n                     \"BINARY.SIZE\" section-binary\n\n   flag            = \"\\Answered\" / \"\\Flagged\" / \"\\Deleted\" /\n                     \"\\Seen\" / \"\\Draft\" / flag-keyword / flag-extension\n                       ; Does not include \"\\Recent\"\n\n   flag-extension  = \"\\\" atom\n                       ; Future expansion.  Client implementations\n                       ; MUST accept flag-extension flags.  Server\n                       ; implementations MUST NOT generate\n                       ; flag-extension flags except as defined by\n                       ; a future Standard or Standards Track\n                       ; revisions of this specification.\n                       ; \"\\Recent\" was defined in RFC 3501\n                       ; and is now deprecated.\n\n   flag-fetch      = flag / obsolete-flag-recent\n\n   flag-keyword    = \"$MDNSent\" / \"$Forwarded\" / \"$Junk\" /\n                     \"$NotJunk\" / \"$Phishing\" / atom\n\n   flag-list       = \"(\" [flag *(SP flag)] \")\"\n\n   flag-perm       = flag / \"\\*\"\n\n   greeting        = \"*\" SP (resp-cond-auth / resp-cond-bye) CRLF\n\n   header-fld-name = astring\n\n   header-list     = \"(\" header-fld-name *(SP header-fld-name) \")\"\n\n   idle            = \"IDLE\" CRLF \"DONE\"\n\n   initial-resp    =  (base64 / \"=\")\n                      ; \"initial response\" defined in\n                      ; Section 4 of [SASL]\n\n   list            = \"LIST\" [SP list-select-opts] SP\n                     mailbox SP mbox-or-pat\n                     [SP list-return-opts]\n\n\n   list-mailbox    = 1*list-char / string\n\n   list-char       = ATOM-CHAR / list-wildcards / resp-specials\n\n   list-return-opt   =  return-option\n                        ; Note that return-option is the ABNF\n                        ; non-terminal used by RFC 5258\n\n   list-return-opts =  \"RETURN\" SP\n               \"(\" [list-return-opt *(SP list-return-opt)] \")\"\n               ; list return options, e.g., CHILDREN\n\n   list-select-base-opt =  \"SUBSCRIBED\" / option-extension\n               ; options that can be used by themselves\n\n   list-select-base-opt-quoted =  DQUOTE list-select-base-opt DQUOTE\n\n   list-select-independent-opt =  \"REMOTE\" / option-extension\n               ; options that do not syntactically interact with\n               ; other options\n\n   list-select-mod-opt =  \"RECURSIVEMATCH\" / option-extension\n               ; options that require a list-select-base-opt\n               ; to also be present\n\n   list-select-opt =  list-select-base-opt / list-select-independent-opt\n                      / list-select-mod-opt\n\n   list-select-opts =  \"(\" [\n                      (*(list-select-opt SP) list-select-base-opt\n                      *(SP list-select-opt))\n                     / (list-select-independent-opt\n                      *(SP list-select-independent-opt))\n                        ] \")\"\n               ; Any number of options may be in any order.\n               ; If a list-select-mod-opt appears, then a\n               ; list-select-base-opt must also appear.\n               ; This allows these:\n               ; ()\n               ; (REMOTE)\n               ; (SUBSCRIBED)\n               ; (SUBSCRIBED REMOTE)\n               ; (SUBSCRIBED RECURSIVEMATCH)\n               ; (SUBSCRIBED REMOTE RECURSIVEMATCH)\n               ; But does NOT allow these:\n               ; (RECURSIVEMATCH)\n               ; (REMOTE RECURSIVEMATCH)\n\n   list-wildcards  = \"%\" / \"*\"\n\n   literal         = \"{\" number64 [\"+\"] \"}\" CRLF *CHAR8\n                       ; <number64> represents the number of CHAR8s.\n                       ; A non-synchronizing literal is distinguished\n                       ; from a synchronizing literal by the presence of\n                       ; \"+\" before the closing \"}\".\n                       ; Non-synchronizing literals are not allowed when\n                       ; sent from server to the client.\n\n   literal8        =  \"~{\" number64 \"}\" CRLF *OCTET\n                       ; <number64> represents the number of OCTETs\n                       ; in the response string.\n\n   login           = \"LOGIN\" SP userid SP password\n\n   mailbox         = \"INBOX\" / astring\n                       ; INBOX is case insensitive.  All case variants\n                       ; of INBOX (e.g., \"iNbOx\") MUST be interpreted as\n                       ; INBOX, not as an astring.  An astring that\n                       ; consists of the case-insensitive sequence\n                       ; \"I\" \"N\" \"B\" \"O\" \"X\" is considered\n                       ; to be an INBOX and not an astring.\n                       ; Refer to Section 5.1 for further\n                       ; semantic details of mailbox names.\n\n   mailbox-data    =  \"FLAGS\" SP flag-list / \"LIST\" SP mailbox-list /\n                      esearch-response /\n                      \"STATUS\" SP mailbox SP \"(\" [status-att-list] \")\" /\n                      number SP \"EXISTS\" / namespace-response /\n                      obsolete-search-response /\n                      obsolete-recent-response\n                       ; obsolete-search-response and\n                       ; obsolete-recent-response can only be returned\n                       ; by servers that support both IMAPrev1\n                       ; and IMAPrev2.\n\n   mailbox-list    = \"(\" [mbx-list-flags] \")\" SP\n                      (DQUOTE QUOTED-CHAR DQUOTE / nil) SP mailbox\n                      [SP mbox-list-extended]\n               ; This is the list information pointed to by the ABNF\n               ; item \"mailbox-data\", which is defined above\n\n   mbox-list-extended =  \"(\" [mbox-list-extended-item\n                         *(SP mbox-list-extended-item)] \")\"\n\n   mbox-list-extended-item = mbox-list-extended-item-tag SP\n                              tagged-ext-val\n\n   mbox-list-extended-item-tag = astring\n                  ; The content MUST conform to either\n                  ; \"eitem-vendor-tag\" or \"eitem-standard-tag\"\n                  ; ABNF productions.\n\n   mbox-or-pat =  list-mailbox / patterns\n\n   mbx-list-flags  = *(mbx-list-oflag SP) mbx-list-sflag\n                     *(SP mbx-list-oflag) /\n                     mbx-list-oflag *(SP mbx-list-oflag)\n\n   mbx-list-oflag  = \"\\Noinferiors\" / child-mbox-flag /\n                     \"\\Subscribed\" / \"\\Remote\" / flag-extension\n                  ; Other flags; multiple from this list are\n                  ; possible per LIST response, but each flag\n                  ; can only appear once per LIST response\n\n   mbx-list-sflag  = \"\\NonExistent\" / \"\\Noselect\" / \"\\Marked\" /\n                     \"\\Unmarked\"\n                  ; Selectability flags; only one per LIST response\n\n   media-basic     = ((DQUOTE (\"APPLICATION\" / \"AUDIO\" / \"IMAGE\" /\n                     \"FONT\" / \"MESSAGE\" / \"MODEL\" / \"VIDEO\" ) DQUOTE)\n                     / string)\n                     SP media-subtype\n                       ; FONT defined in [RFC8081].\n                       ; MODEL defined in [RFC2077].\n                       ; Other top-level media types\n                       ; are defined in [MIME-IMT].\n\n   media-message   = DQUOTE \"MESSAGE\" DQUOTE SP\n                     DQUOTE (\"RFC822\" / \"GLOBAL\") DQUOTE\n                       ; Defined in [MIME-IMT]\n\n   media-subtype   = string\n                       ; Defined in [MIME-IMT]\n\n   media-text      = DQUOTE \"TEXT\" DQUOTE SP media-subtype\n                       ; Defined in [MIME-IMT]\n\n   message-data    = nz-number SP (\"EXPUNGE\" / (\"FETCH\" SP msg-att))\n\n   move            = \"MOVE\" SP sequence-set SP mailbox\n\n   msg-att         = \"(\" (msg-att-dynamic / msg-att-static)\n                      *(SP (msg-att-dynamic / msg-att-static)) \")\"\n\n   msg-att-dynamic = \"FLAGS\" SP \"(\" [flag-fetch *(SP flag-fetch)] \")\"\n                       ; MAY change for a message\n\n   msg-att-static  = \"ENVELOPE\" SP envelope /\n                     \"INTERNALDATE\" SP date-time /\n                     \"RFC822.SIZE\" SP number64 /\n                     \"BODY\" [\"STRUCTURE\"] SP body /\n                     \"BODY\" section [\"<\" number \">\"] SP nstring /\n                     \"BINARY\" section-binary SP (nstring / literal8) /\n                     \"BINARY.SIZE\" section-binary SP number /\n                     \"UID\" SP uniqueid\n                       ; MUST NOT change for a message\n\n   name-component  = 1*UTF8-CHAR\n                       ; MUST NOT contain \".\", \"/\", \"%\", or \"*\"\n\n   namespace         = nil / \"(\" 1*namespace-descr \")\"\n\n   namespace-command = \"NAMESPACE\"\n\n   namespace-descr   = \"(\" string SP\n                          (DQUOTE QUOTED-CHAR DQUOTE / nil)\n                           [namespace-response-extensions] \")\"\n\n   namespace-response-extensions = *namespace-response-extension\n\n   namespace-response-extension = SP string SP\n                     \"(\" string *(SP string) \")\"\n\n   namespace-response = \"NAMESPACE\" SP namespace\n                         SP namespace SP namespace\n                    ; The first Namespace is the Personal Namespace(s).\n                    ; The second Namespace is the Other Users'\n                    ; Namespace(s).\n                    ; The third Namespace is the Shared Namespace(s).\n\n   nil             = \"NIL\"\n\n   nstring         = string / nil\n\n   number          = 1*DIGIT\n                       ; Unsigned 32-bit integer\n                       ; (0 <= n < 4,294,967,296)\n\n   number64        = 1*DIGIT\n                       ; Unsigned 63-bit integer\n                       ; (0 <= n <= 9,223,372,036,854,775,807)\n\n   nz-number       = digit-nz *DIGIT\n                       ; Non-zero unsigned 32-bit integer\n                       ; (0 < n < 4,294,967,296)\n\n   nz-number64     = digit-nz *DIGIT\n                       ; Unsigned 63-bit integer\n                       ; (0 < n <= 9,223,372,036,854,775,807)\n\n   obsolete-flag-recent = \"\\Recent\"\n\n   obsolete-recent-response = number SP \"RECENT\"\n\n   obsolete-search-response = \"SEARCH\" *(SP nz-number)\n\n   oldname-extended-item =  \"OLDNAME\" SP \"(\" mailbox \")\"\n                       ; Extended data item (mbox-list-extended-item)\n                       ; returned in a LIST response when a mailbox is\n                       ; renamed or deleted. Also returned when\n                       ; the server canonicalized the provided mailbox\n                       ; name.\n                       ; Note 1: the OLDNAME tag can be returned\n                       ; with or without surrounding quotes, as per\n                       ; mbox-list-extended-item-tag production.\n\n   option-extension = (option-standard-tag / option-vendor-tag)\n                      [SP option-value]\n\n   option-standard-tag =  atom\n                  ; an option defined in a Standards Track or\n                  ; Experimental RFC\n\n   option-val-comp =  astring /\n                      option-val-comp *(SP option-val-comp) /\n                      \"(\" option-val-comp \")\"\n\n   option-value =  \"(\" option-val-comp \")\"\n\n   option-vendor-tag =  vendor-token \"-\" atom\n                  ; a vendor-specific option, non-standard\n\n   partial-range    = number64 [\".\" nz-number64]\n                       ; Copied from RFC 5092 (IMAP URL)\n                       ; and updated to support 64-bit sizes.\n\n   partial         = \"<\" number64 \".\" nz-number64 \">\"\n                       ; Partial FETCH request. 0-based offset of\n                       ; the first octet, followed by the number of\n                       ; octets in the fragment.\n\n   password        = astring\n\n   patterns        = \"(\" list-mailbox \")\"\n                     ; [RFC5258] supports multiple patterns,\n                     ; but this document only requires one\n                     ; to be supported.\n                     ; If the server is also implementing\n                     ; [RFC5258], the \"patterns\" syntax from\n                     ; that document must be followed.\n\n   quoted          = DQUOTE *QUOTED-CHAR DQUOTE\n\n   QUOTED-CHAR     = <any TEXT-CHAR except quoted-specials> /\n                     \"\\\" quoted-specials / UTF8-2 / UTF8-3 / UTF8-4\n\n   quoted-specials = DQUOTE / \"\\\"\n\n   rename          = \"RENAME\" SP mailbox SP mailbox\n                       ; Use of INBOX as a destination gives a NO error\n\n   response        = *(continue-req / response-data) response-done\n\n   response-data   = \"*\" SP (resp-cond-state / resp-cond-bye /\n                     mailbox-data / message-data / capability-data /\n                     enable-data) CRLF\n\n   response-done   = response-tagged / response-fatal\n\n   response-fatal  = \"*\" SP resp-cond-bye CRLF\n                       ; Server closes connection immediately\n\n   response-tagged = tag SP resp-cond-state CRLF\n\n   resp-code-apnd  = \"APPENDUID\" SP nz-number SP append-uid\n\n   resp-code-copy  = \"COPYUID\" SP nz-number SP uid-set SP uid-set\n\n   resp-cond-auth  = (\"OK\" / \"PREAUTH\") SP resp-text\n                       ; Authentication condition\n\n   resp-cond-bye   = \"BYE\" SP resp-text\n\n   resp-cond-state = (\"OK\" / \"NO\" / \"BAD\") SP resp-text\n                       ; Status condition\n\n   resp-specials   = \"]\"\n\n   resp-text       = [\"[\" resp-text-code \"]\" SP] [text]\n\n   resp-text-code  = \"ALERT\" /\n                     \"BADCHARSET\" [SP \"(\" charset *(SP charset) \")\" ] /\n                     capability-data / \"PARSE\" /\n                     \"PERMANENTFLAGS\" SP\n                         \"(\" [flag-perm *(SP flag-perm)] \")\" /\n                     \"READ-ONLY\" / \"READ-WRITE\" / \"TRYCREATE\" /\n                     \"UIDNEXT\" SP nz-number /\n                     \"UIDVALIDITY\" SP nz-number /\n                     resp-code-apnd / resp-code-copy / \"UIDNOTSTICKY\" /\n                     \"UNAVAILABLE\" / \"AUTHENTICATIONFAILED\" /\n                     \"AUTHORIZATIONFAILED\" / \"EXPIRED\" /\n                     \"PRIVACYREQUIRED\" / \"CONTACTADMIN\" / \"NOPERM\" /\n                     \"INUSE\" / \"EXPUNGEISSUED\" / \"CORRUPTION\" /\n                     \"SERVERBUG\" / \"CLIENTBUG\" / \"CANNOT\" /\n                     \"LIMIT\" / \"OVERQUOTA\" / \"ALREADYEXISTS\" /\n                     \"NONEXISTENT\" / \"NOTSAVED\" / \"HASCHILDREN\" /\n                     \"CLOSED\" /\n                     \"UNKNOWN-CTE\" /\n                     atom [SP 1*<any TEXT-CHAR except \"]\">]\n\n   return-option   = \"SUBSCRIBED\" / \"CHILDREN\" / status-option /\n                      option-extension\n\n   search          = \"SEARCH\" [search-return-opts]\n                     SP search-program\n\n   search-correlator  = SP \"(\" \"TAG\" SP tag-string \")\"\n\n   search-key      = \"ALL\" / \"ANSWERED\" / \"BCC\" SP astring /\n                     \"BEFORE\" SP date / \"BODY\" SP astring /\n                     \"CC\" SP astring / \"DELETED\" / \"FLAGGED\" /\n                     \"FROM\" SP astring / \"KEYWORD\" SP flag-keyword /\n                     \"ON\" SP date / \"SEEN\" /\n                     \"SINCE\" SP date / \"SUBJECT\" SP astring /\n                     \"TEXT\" SP astring / \"TO\" SP astring /\n                     \"UNANSWERED\" / \"UNDELETED\" / \"UNFLAGGED\" /\n                     \"UNKEYWORD\" SP flag-keyword / \"UNSEEN\" /\n                       ; Above this line were in [IMAP2]\n                     \"DRAFT\" / \"HEADER\" SP header-fld-name SP astring /\n                     \"LARGER\" SP number64 / \"NOT\" SP search-key /\n                     \"OR\" SP search-key SP search-key /\n                     \"SENTBEFORE\" SP date / \"SENTON\" SP date /\n                     \"SENTSINCE\" SP date / \"SMALLER\" SP number64 /\n                     \"UID\" SP sequence-set / \"UNDRAFT\" / sequence-set /\n                     \"(\" search-key *(SP search-key) \")\"\n\n   search-modifier-name = tagged-ext-label\n\n   search-mod-params = tagged-ext-val\n                     ; This non-terminal shows recommended syntax\n                     ; for future extensions.\n\n   search-program     = [\"CHARSET\" SP charset SP]\n                       search-key *(SP search-key)\n                       ; CHARSET argument to SEARCH MUST be\n                       ; registered with IANA.\n\n   search-ret-data-ext = search-modifier-name SP search-return-value\n                       ; Note that not every SEARCH return option\n                       ; is required to have the corresponding\n                       ; ESEARCH return data.\n\n   search-return-data = \"MIN\" SP nz-number /\n                       \"MAX\" SP nz-number /\n                       \"ALL\" SP sequence-set /\n                       \"COUNT\" SP number /\n                       search-ret-data-ext\n                       ; All return data items conform to\n                       ; search-ret-data-ext syntax.\n                       ; Note that \"$\" marker is not allowed\n                       ; after the ALL return data item.\n\n   search-return-opts = SP \"RETURN\" SP \"(\" [search-return-opt\n                       *(SP search-return-opt)] \")\"\n\n   search-return-opt  = \"MIN\" / \"MAX\" / \"ALL\" / \"COUNT\" /\n                        \"SAVE\" /\n                        search-ret-opt-ext\n                       ; conforms to generic search-ret-opt-ext\n                       ; syntax\n\n   search-ret-opt-ext = search-modifier-name [SP search-mod-params]\n\n   search-return-value = tagged-ext-val\n                       ; Data for the returned search option.\n                       ; A single \"nz-number\"/\"number\"/\"number64\" value\n                       ; can be returned as an atom (i.e., without\n                       ; quoting).  A sequence-set can be returned\n                       ; as an atom as well.\n\n   section         = \"[\" [section-spec] \"]\"\n\n   section-binary  = \"[\" [section-part] \"]\"\n\n   section-msgtext = \"HEADER\" /\n                     \"HEADER.FIELDS\" [\".NOT\"] SP header-list /\n                     \"TEXT\"\n                       ; top-level or MESSAGE/RFC822 or\n                       ; MESSAGE/GLOBAL part\n\n   section-part    = nz-number *(\".\" nz-number)\n                       ; body part reference.\n                       ; Allows for accessing nested body parts.\n\n   section-spec    = section-msgtext / (section-part [\".\" section-text])\n\n   section-text    = section-msgtext / \"MIME\"\n                       ; text other than actual body part (headers,\n                       ; etc.)\n\n   select          = \"SELECT\" SP mailbox\n\n   seq-number      = nz-number / \"*\"\n                       ; message sequence number (COPY, FETCH, STORE\n                       ; commands) or unique identifier (UID COPY,\n                       ; UID FETCH, UID STORE commands).\n                       ; * represents the largest number in use.  In\n                       ; the case of message sequence numbers, it is\n                       ; the number of messages in a non-empty mailbox.\n                       ; In the case of unique identifiers, it is the\n                       ; unique identifier of the last message in the\n                       ; mailbox or, if the mailbox is empty, the\n                       ; mailbox's current UIDNEXT value.\n                       ; The server should respond with a tagged BAD\n                       ; response to a command that uses a message\n                       ; sequence number greater than the number of\n                       ; messages in the selected mailbox.  This\n                       ; includes \"*\" if the selected mailbox is empty.\n\n   seq-range       = seq-number \":\" seq-number\n                       ; two seq-number values and all values between\n                       ; these two regardless of order.\n                       ; Example: 2:4 and 4:2 are equivalent and\n                       ; indicate values 2, 3, and 4.\n                       ; Example: a unique identifier sequence range of\n                       ; 3291:* includes the UID of the last message in\n                       ; the mailbox, even if that value is less than\n                       ; 3291.\n\n   sequence-set    = (seq-number / seq-range) [\",\" sequence-set]\n                       ; set of seq-number values, regardless of order.\n                       ; Servers MAY coalesce overlaps and/or execute\n                       ; the sequence in any order.\n                       ; Example: a message sequence number set of\n                       ; 2,4:7,9,12:* for a mailbox with 15 messages is\n                       ; equivalent to 2,4,5,6,7,9,12,13,14,15\n                       ; Example: a message sequence number set of\n                       ; *:4,5:7 for a mailbox with 10 messages is\n                       ; equivalent to 10,9,8,7,6,5,4,5,6,7 and MAY\n                       ; be reordered and overlap coalesced to be\n                       ; 4,5,6,7,8,9,10.\n\n   sequence-set    =/ seq-last-command\n                       ; Allow for \"result of the last command\"\n                       ; indicator.\n\n   seq-last-command   = \"$\"\n\n   status          = \"STATUS\" SP mailbox SP\n                     \"(\" status-att *(SP status-att) \")\"\n\n   status-att      = \"MESSAGES\" / \"UIDNEXT\" / \"UIDVALIDITY\" /\n                     \"UNSEEN\" / \"DELETED\" / \"SIZE\"\n\n   status-att-val  = (\"MESSAGES\" SP number) /\n                     (\"UIDNEXT\" SP nz-number) /\n                     (\"UIDVALIDITY\" SP nz-number) /\n                     (\"UNSEEN\" SP number) /\n                     (\"DELETED\" SP number) /\n                     (\"SIZE\" SP number64)\n                       ; Extensions to the STATUS responses\n                       ; should extend this production.\n                       ; Extensions should use the generic\n                       ; syntax defined by tagged-ext.\n\n   status-att-list =  status-att-val *(SP status-att-val)\n\n   status-option = \"STATUS\" SP \"(\" status-att *(SP status-att) \")\"\n                       ; This ABNF production complies with\n                       ; <option-extension> syntax.\n\n   store           = \"STORE\" SP sequence-set SP store-att-flags\n\n   store-att-flags = ([\"+\" / \"-\"] \"FLAGS\" [\".SILENT\"]) SP\n                     (flag-list / (flag *(SP flag)))\n\n   string          = quoted / literal\n\n   subscribe       = \"SUBSCRIBE\" SP mailbox\n\n   tag             = 1*<any ASTRING-CHAR except \"+\">\n\n   tag-string      = astring\n                     ; <tag> represented as <astring>\n\n   tagged-ext-label    = tagged-label-fchar *tagged-label-char\n                         ; Is a valid RFC 3501 \"atom\".\n\n   tagged-label-fchar  = ALPHA / \"-\" / \"_\" / \".\"\n\n   tagged-label-char   = tagged-label-fchar / DIGIT / \":\"\n\n   tagged-ext-comp     = astring /\n                         tagged-ext-comp *(SP tagged-ext-comp) /\n                         \"(\" tagged-ext-comp \")\"\n                         ; Extensions that follow this general\n                         ; syntax should use nstring instead of\n                         ; astring when appropriate in the context\n                         ; of the extension.\n                         ; Note that a message set or a \"number\"\n                         ; can always be represented as an \"atom\".\n                         ; A URL should be represented as\n                         ; a \"quoted\" string.\n\n   tagged-ext-simple   = sequence-set / number / number64\n\n   tagged-ext-val      = tagged-ext-simple /\n                         \"(\" [tagged-ext-comp] \")\"\n\n   text            = 1*(TEXT-CHAR / UTF8-2 / UTF8-3 / UTF8-4)\n                       ; Non-ASCII text can only be returned\n                       ; after ENABLE IMAP4rev2 command\n\n   TEXT-CHAR       = <any CHAR except CR and LF>\n\n   time            = 2DIGIT \":\" 2DIGIT \":\" 2DIGIT\n                       ; Hours minutes seconds\n\n   uid             = \"UID\" SP\n                     (copy / move / fetch / search / store /\n                      uid-expunge)\n                       ; Unique identifiers used instead of message\n                       ; sequence numbers\n\n   uid-expunge     = \"EXPUNGE\" SP sequence-set\n                       ; Unique identifiers used instead of message\n                       ; sequence numbers\n\n   uid-set         = (uniqueid / uid-range) *(\",\" uid-set)\n\n   uid-range       = (uniqueid \":\" uniqueid)\n                       ; two uniqueid values and all values\n                       ; between these two regardless of order.\n                       ; Example: 2:4 and 4:2 are equivalent.\n\n   uniqueid        = nz-number\n                       ; Strictly ascending\n\n   unsubscribe     = \"UNSUBSCRIBE\" SP mailbox\n\n   userid          = astring\n\n   UTF8-CHAR       = <Defined in Section 4 of RFC 3629>\n\n   UTF8-2          = <Defined in Section 4 of RFC 3629>\n\n   UTF8-3          = <Defined in Section 4 of RFC 3629>\n\n   UTF8-4          = <Defined in Section 4 of RFC 3629>\n\n   vendor-token    = \"vendor.\" name-component\n                       ; Definition copied from RFC 2244.\n                       ; MUST be registered with IANA\n\n   zone            = (\"+\" / \"-\") 4DIGIT\n                       ; Signed four-digit value of hhmm representing\n                       ; hours and minutes east of Greenwich (that is,\n                       ; the amount that the given time differs from\n                       ; Universal Time).  Subtracting the timezone\n                       ; from the given time will give the UT form.\n                       ; The Universal Time zone is \"+0000\".\n\n10.  Author's Note\n\n   This document is a revision or rewrite of earlier documents and\n   supercedes the protocol specification in those documents: [RFC3501],\n   [RFC2060], [RFC1730], unpublished IMAP2bis.TXT document, [IMAP2], and\n   [RFC1064].\n\n11.  Security Considerations\n\n   IMAP4rev2 protocol transactions, including electronic mail data, are\n   sent in the clear over the network, exposing them to possible\n   eavesdropping and manipulation unless protection is negotiated.  This\n   can be accomplished by use of the Implicit TLS port, the STARTTLS\n   command, negotiated confidentiality protection in the AUTHENTICATE\n   command, or some other protection mechanism.\n\n11.1.  TLS-Related Security Considerations\n\n   This section applies to use of both the STARTTLS command and the\n   Implicit TLS port.\n\n   IMAP client and server implementations MUST comply with relevant TLS\n   recommendations from [RFC8314].  If recommendations/requirements in\n   this document conflict with recommendations from [RFC8314], for\n   example in regards to TLS ciphersuites, recommendations from this\n   document take precedence.\n\n   Clients and servers MUST implement TLS 1.2 [TLS-1.2] or newer.  Use\n   of TLS 1.3 [TLS-1.3] is RECOMMENDED.  TLS 1.2 may be used only in\n   cases where the other party has not yet implemented TLS 1.3.\n   Additionally, when using TLS 1.2, IMAP implementations MUST implement\n   the TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 cipher suite.  This is\n   important as it ensures that any two compliant implementations can be\n   configured to interoperate.  Other TLS cipher suites recommended in\n   RFC 7525 [RFC7525] are RECOMMENDED:\n   TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,\n   TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, and\n   TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384.  All other cipher suites are\n   OPTIONAL.  Note that this is a change from Section 2.1 of [IMAP-TLS].\n\n   The list of mandatory-to-implement TLS 1.3 cipher suites is described\n   in Section 9.1 of [TLS-1.3].\n\n   During the TLS negotiation [TLS-1.3] [TLS-1.2], the client MUST check\n   its understanding of the server hostname against the server's\n   identity as presented in the server Certificate message, in order to\n   prevent on-path attackers attempting to masquerade as the server.\n   This procedure is described in [RFC7817].\n\n   Both the client and server MUST check the result of the STARTTLS\n   command and subsequent TLS [TLS-1.3] [TLS-1.2] negotiation to see\n   whether acceptable authentication and/or privacy was achieved.\n\n11.2.  STARTTLS Command versus Use of Implicit TLS Port\n\n   For maximum backward compatibility, the client MUST implement both\n   TLS negotiation on an Implicit TLS port and TLS negotiation using the\n   STARTTLS command on a cleartext port.\n\n   The server MUST implement TLS negotiation on an Implicit TLS port.\n   The server SHOULD also implement IMAP on a cleartext port.  If the\n   server listens on a cleartext port, it MUST allow the STARTTLS\n   command on it.\n\n   Some site/firewall maintainers insist on TLS site-wide and prefer not\n   to rely on a configuration option in each higher-level protocol.  For\n   this reason, IMAP4rev2 clients SHOULD try both ports 993 and 143 (and\n   both IPv4 and IPv6) concurrently by default, unless overridden by\n   either user configuration or DNS SRV records [RFC6186].  A good\n   algorithm for implementing such concurrent connect is described in\n   [RFC8305].\n\n11.3.  Client Handling of Unsolicited Responses Not Suitable for the\n       Current Connection State\n\n   Cleartext mail transmission (whether caused by firewall configuration\n   errors that result in TLS stripping or weak security policies in\n   email clients that choose not to negotiate TLS in the first place)\n   can enable injection of responses that can confuse or even cause\n   crashes in email clients.  The following measures are recommended to\n   minimize damage from them.\n\n   *  See Section 7.1.4 for special security considerations related to\n      the PREAUTH response.\n\n   *  Many server responses and response codes are only meaningful in\n      authenticated or even selected state.  However, nothing prevents a\n      server (or an on-path attacker) from sending such invalid\n      responses in cleartext before STARTTLS/AUTHENTICATE commands are\n      issued.  Before authentication, clients SHOULD ignore any\n      responses other than CAPABILITY and server status responses\n      (Section 7.1), as well as any response codes other than\n      CAPABILITY.  (In particular, some email clients are known to\n      incorrectly process LIST responses received before authentication,\n      or FETCH responses when no mailbox is selected.)  Clients SHOULD\n      ignore the ALERT response code until after TLS (whether using\n      STARTTLS or TLS negotiation on an Implicit TLS port) or a SASL\n      security layer with confidentiality protection has been\n      successfully negotiated.  Unless explicitly allowed by an IMAP\n      extension, when not in selected state, clients MUST ignore\n      responses / response codes related to message and mailbox status\n      such as FLAGS, EXIST, EXPUNGE, and FETCH.\n\n11.4.  COPYUID and APPENDUID Response Codes\n\n   The COPYUID and APPENDUID response codes return information about the\n   mailbox, which may be considered sensitive if the mailbox has\n   permissions set that permit the client to COPY or APPEND to the\n   mailbox, but not SELECT or EXAMINE it.\n\n   Consequently, these response codes SHOULD NOT be issued if the client\n   does not have access to SELECT or EXAMINE the mailbox.\n\n11.5.  LIST Command and Other Users' Namespace\n\n   In response to a LIST command containing an argument of the Other\n   Users' Namespace prefix, a server MUST NOT list users that have not\n   granted list access to their personal mailboxes to the currently\n   authenticated user.  Providing such a list could compromise security\n   by potentially disclosing confidential information of who is located\n   on the server or providing a starting point for a list of user\n   accounts to attack.\n\n11.6.  Use of MD5\n\n   The BODYSTRUCTURE FETCH data item can contain the MD5 digest of the\n   message body in the \"body MD5\" field (body-fld-md5 ABNF production).\n   While MD5 is no longer considered a secure cryptographic hash\n   [RFC6151], this field is used solely to expose the value of the\n   Content-MD5 header field (if present in the original message), which\n   is just a message integrity check and is not used for cryptographic\n   purposes.  Also note that other mechanisms that provide message\n   integrity checks were defined since RFC 1864 [MD5] was published and\n   are now more commonly used than Content-MD5.  Two such mechanisms are\n   the DKIM-Signature header field [RFC6376] and S/MIME signing\n   [RFC8550] [RFC8551].\n\n11.7.  Other Security Considerations\n\n   A server error message for an AUTHENTICATE command that fails due to\n   invalid credentials SHOULD NOT detail why the credentials are\n   invalid.\n\n   Use of the LOGIN command sends passwords in the clear.  This can be\n   avoided by using the AUTHENTICATE command with a [SASL] mechanism\n   that does not use plaintext passwords, by first negotiating\n   encryption via STARTTLS or some other protection mechanism.\n\n   A server implementation MUST implement a configuration that, at the\n   time of authentication, requires:\n\n   1.  The STARTTLS command has been negotiated or TLS negotiated on an\n       Implicit TLS port\n       OR\n   2.  Some other mechanism that protects the session from password\n       snooping has been provided\n       OR\n   3.  The following measures are in place:\n       a)  The LOGINDISABLED capability is advertised, and [SASL]\n           mechanisms (such as PLAIN) using plaintext passwords are NOT\n           advertised in the CAPABILITY list.\n           AND\n       b)  The LOGIN command returns an error even if the password is\n           correct\n           AND\n       c)  The AUTHENTICATE command returns an error with all [SASL]\n           mechanisms that use plaintext passwords, even if the password\n           is correct.\n\n   A server error message for a failing LOGIN command SHOULD NOT specify\n   that the user name, as opposed to the password, is invalid.\n\n   A server SHOULD have mechanisms in place to limit or delay failed\n   AUTHENTICATE/LOGIN attempts.\n\n   A server SHOULD report any authentication failure and analyze such\n   authentication failure attempts with regard to a password brute-force\n   attack as well as a password spraying attack [NCSC].  Accounts with\n   passwords that match well-known passwords from spraying attacks MUST\n   be blocked, and users associated with such accounts must be requested\n   to change their passwords.  Only a password with significant strength\n   SHOULD be accepted.\n\n   Additional security considerations are discussed in the sections that\n   define the AUTHENTICATE and LOGIN commands (see Sections 6.2.2 and\n   6.2.3, respectively).\n\n12.  IANA Considerations\n\n   IANA has updated the \"Service Names and Transport Protocol Port\n   Numbers\" registry as follows:\n\n   1.  Registration for TCP port 143 and the corresponding \"imap\"\n       service name have been updated to point to this document and\n       [RFC3501].\n\n   2.  Registration for TCP port 993 and the corresponding \"imaps\"\n       service name have been updated to point to this document,\n       [RFC8314], and [RFC3501].\n\n   3.  UDP ports 143 and 993 have both been marked as \"Reserved\" in the\n       registry.\n\n   Additional IANA actions are specified in the subsections that follow.\n\n12.1.  Updates to IMAP Capabilities Registry\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Informational or Experimental RFC.  The registry is\n   currently located at: <https://www.iana.org/assignments/\n   imap4-capabilities>\n\n   As this specification revises the AUTH= prefix, STARTTLS, and\n   LOGINDISABLED extensions, IANA has updated registry entries for these\n   3 extensions to point to this document and [RFC3501].\n\n12.2.  GSSAPI/SASL Service Name\n\n   GSSAPI/Kerberos/SASL service names are registered by publishing a\n   Standards Track or IESG-approved Experimental RFC.  The registry is\n   currently located at: <https://www.iana.org/assignments/gssapi-\n   service-names>\n\n   IANA has updated the \"imap\" service name previously registered in\n   [RFC3501] to point to both this document and [RFC3501].\n\n12.3.  LIST Selection Options, LIST Return Options, and LIST Extended\n       Data Items\n\n   [RFC5258] specifies IANA registration procedures for LIST selection\n   options, LIST return options, and LIST extended data items.  This\n   document doesn't change these registration procedures.  In\n   particular, LIST selection options (Section 6.3.9.1) and LIST return\n   options (Section 6.3.9.2) are registered using the procedure\n   specified in Section 9 of [RFC5258] (and using the registration\n   template from Section 9.3 of [RFC5258]).  LIST extended data items\n   are registered using the registration template from Section 9.6 of\n   [RFC5258]).\n\n   IANA has added a reference to RFC 9051 for the \"OLDNAME\" LIST-\n   EXTENDED extended data item entry.  This is in addition to the\n   existing reference to [RFC5465].\n\n12.4.  IMAP Mailbox Name Attributes and IMAP Response Codes\n\n   IANA has updated the \"IMAP Mailbox Name Attributes\" registry to point\n   to this document in addition to [RFC3501].\n\n   IANA has updated the \"IMAP Response Codes\" registry to point to this\n   document in addition to [RFC3501].\n\n13.  References\n\n13.1.  Normative References\n\n   [ABNF]     Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [BCP178]   Saint-Andre, P., Crocker, D., and M. Nottingham,\n              \"Deprecating the \"X-\" Prefix and Similar Constructs in\n              Application Protocols\", BCP 178, RFC 6648, June 2012.\n\n              <https://www.rfc-editor.org/info/bcp178>\n\n   [CHARSET]  Freed, N. and J. Postel, \"IANA Charset Registration\n              Procedures\", BCP 19, RFC 2978, DOI 10.17487/RFC2978,\n              October 2000, <https://www.rfc-editor.org/info/rfc2978>.\n\n   [DISPOSITION]\n              Troost, R., Dorner, S., and K. Moore, Ed., \"Communicating\n              Presentation Information in Internet Messages: The\n              Content-Disposition Header Field\", RFC 2183,\n              DOI 10.17487/RFC2183, August 1997,\n              <https://www.rfc-editor.org/info/rfc2183>.\n\n   [I18N-HDRS]\n              Yang, A., Steele, S., and N. Freed, \"Internationalized\n              Email Headers\", RFC 6532, DOI 10.17487/RFC6532, February\n              2012, <https://www.rfc-editor.org/info/rfc6532>.\n\n   [IMAP-IMPLEMENTATION]\n              Leiba, B., \"IMAP4 Implementation Recommendations\",\n              RFC 2683, DOI 10.17487/RFC2683, September 1999,\n              <https://www.rfc-editor.org/info/rfc2683>.\n\n   [IMAP-MULTIACCESS]\n              Gahrns, M., \"IMAP4 Multi-Accessed Mailbox Practice\",\n              RFC 2180, DOI 10.17487/RFC2180, July 1997,\n              <https://www.rfc-editor.org/info/rfc2180>.\n\n   [LANGUAGE-TAGS]\n              Alvestrand, H., \"Content Language Headers\", RFC 3282,\n              DOI 10.17487/RFC3282, May 2002,\n              <https://www.rfc-editor.org/info/rfc3282>.\n\n   [LOCATION] Palme, J., Hopmann, A., and N. Shelness, \"MIME\n              Encapsulation of Aggregate Documents, such as HTML\n              (MHTML)\", RFC 2557, DOI 10.17487/RFC2557, March 1999,\n              <https://www.rfc-editor.org/info/rfc2557>.\n\n   [MD5]      Myers, J. and M. Rose, \"The Content-MD5 Header Field\",\n              RFC 1864, DOI 10.17487/RFC1864, October 1995,\n              <https://www.rfc-editor.org/info/rfc1864>.\n\n   [MIME-HDRS]\n              Moore, K., \"MIME (Multipurpose Internet Mail Extensions)\n              Part Three: Message Header Extensions for Non-ASCII Text\",\n              RFC 2047, DOI 10.17487/RFC2047, November 1996,\n              <https://www.rfc-editor.org/info/rfc2047>.\n\n   [MIME-IMB] Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n              Extensions (MIME) Part One: Format of Internet Message\n              Bodies\", RFC 2045, DOI 10.17487/RFC2045, November 1996,\n              <https://www.rfc-editor.org/info/rfc2045>.\n\n   [MIME-IMT] Freed, N. and N. Borenstein, \"Multipurpose Internet Mail\n              Extensions (MIME) Part Two: Media Types\", RFC 2046,\n              DOI 10.17487/RFC2046, November 1996,\n              <https://www.rfc-editor.org/info/rfc2046>.\n\n   [MULTIAPPEND]\n              Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              MULTIAPPEND Extension\", RFC 3502, DOI 10.17487/RFC3502,\n              March 2003, <https://www.rfc-editor.org/info/rfc3502>.\n\n   [NET-UNICODE]\n              Klensin, J. and M. Padlipsky, \"Unicode Format for Network\n              Interchange\", RFC 5198, DOI 10.17487/RFC5198, March 2008,\n              <https://www.rfc-editor.org/info/rfc5198>.\n\n   [PLAIN]    Zeilenga, K., Ed., \"The PLAIN Simple Authentication and\n              Security Layer (SASL) Mechanism\", RFC 4616,\n              DOI 10.17487/RFC4616, August 2006,\n              <https://www.rfc-editor.org/info/rfc4616>.\n\n   [RFC2077]  Nelson, S., Parks, C., and , \"The Model Primary Content\n              Type for Multipurpose Internet Mail Extensions\", RFC 2077,\n              DOI 10.17487/RFC2077, January 1997,\n              <https://www.rfc-editor.org/info/rfc2077>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC2231]  Freed, N. and K. Moore, \"MIME Parameter Value and Encoded\n              Word Extensions: Character Sets, Languages, and\n              Continuations\", RFC 2231, DOI 10.17487/RFC2231, November\n              1997, <https://www.rfc-editor.org/info/rfc2231>.\n\n   [RFC3503]  Melnikov, A., \"Message Disposition Notification (MDN)\n              profile for Internet Message Access Protocol (IMAP)\",\n              RFC 3503, DOI 10.17487/RFC3503, March 2003,\n              <https://www.rfc-editor.org/info/rfc3503>.\n\n   [RFC4648]  Josefsson, S., \"The Base16, Base32, and Base64 Data\n              Encodings\", RFC 4648, DOI 10.17487/RFC4648, October 2006,\n              <https://www.rfc-editor.org/info/rfc4648>.\n\n   [RFC4752]  Melnikov, A., Ed., \"The Kerberos V5 (\"GSSAPI\") Simple\n              Authentication and Security Layer (SASL) Mechanism\",\n              RFC 4752, DOI 10.17487/RFC4752, November 2006,\n              <https://www.rfc-editor.org/info/rfc4752>.\n\n   [RFC5258]  Leiba, B. and A. Melnikov, \"Internet Message Access\n              Protocol version 4 - LIST Command Extensions\", RFC 5258,\n              DOI 10.17487/RFC5258, June 2008,\n              <https://www.rfc-editor.org/info/rfc5258>.\n\n   [RFC5322]  Resnick, P., Ed., \"Internet Message Format\", RFC 5322,\n              DOI 10.17487/RFC5322, October 2008,\n              <https://www.rfc-editor.org/info/rfc5322>.\n\n   [RFC5788]  Melnikov, A. and D. Cridland, \"IMAP4 Keyword Registry\",\n              RFC 5788, DOI 10.17487/RFC5788, March 2010,\n              <https://www.rfc-editor.org/info/rfc5788>.\n\n   [RFC7525]  Sheffer, Y., Holz, R., and P. Saint-Andre,\n              \"Recommendations for Secure Use of Transport Layer\n              Security (TLS) and Datagram Transport Layer Security\n              (DTLS)\", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May\n              2015, <https://www.rfc-editor.org/info/rfc7525>.\n\n   [RFC7817]  Melnikov, A., \"Updated Transport Layer Security (TLS)\n              Server Identity Check Procedure for Email-Related\n              Protocols\", RFC 7817, DOI 10.17487/RFC7817, March 2016,\n              <https://www.rfc-editor.org/info/rfc7817>.\n\n   [RFC8081]  Lilley, C., \"The \"font\" Top-Level Media Type\", RFC 8081,\n              DOI 10.17487/RFC8081, February 2017,\n              <https://www.rfc-editor.org/info/rfc8081>.\n\n   [RFC8098]  Hansen, T., Ed. and A. Melnikov, Ed., \"Message Disposition\n              Notification\", STD 85, RFC 8098, DOI 10.17487/RFC8098,\n              February 2017, <https://www.rfc-editor.org/info/rfc8098>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [RFC8314]  Moore, K. and C. Newman, \"Cleartext Considered Obsolete:\n              Use of Transport Layer Security (TLS) for Email Submission\n              and Access\", RFC 8314, DOI 10.17487/RFC8314, January 2018,\n              <https://www.rfc-editor.org/info/rfc8314>.\n\n   [SASL]     Melnikov, A., Ed. and K. Zeilenga, Ed., \"Simple\n              Authentication and Security Layer (SASL)\", RFC 4422,\n              DOI 10.17487/RFC4422, June 2006,\n              <https://www.rfc-editor.org/info/rfc4422>.\n\n   [SCRAM-SHA-256]\n              Hansen, T., \"SCRAM-SHA-256 and SCRAM-SHA-256-PLUS Simple\n              Authentication and Security Layer (SASL) Mechanisms\",\n              RFC 7677, DOI 10.17487/RFC7677, November 2015,\n              <https://www.rfc-editor.org/info/rfc7677>.\n\n   [TLS-1.2]  Dierks, T. and E. Rescorla, \"The Transport Layer Security\n              (TLS) Protocol Version 1.2\", RFC 5246,\n              DOI 10.17487/RFC5246, August 2008,\n              <https://www.rfc-editor.org/info/rfc5246>.\n\n   [TLS-1.3]  Rescorla, E., \"The Transport Layer Security (TLS) Protocol\n              Version 1.3\", RFC 8446, DOI 10.17487/RFC8446, August 2018,\n              <https://www.rfc-editor.org/info/rfc8446>.\n\n   [UTF-7]    Goldsmith, D. and M. Davis, \"UTF-7 A Mail-Safe\n              Transformation Format of Unicode\", RFC 2152,\n              DOI 10.17487/RFC2152, May 1997,\n              <https://www.rfc-editor.org/info/rfc2152>.\n\n   [UTF-8]    Yergeau, F., \"UTF-8, a transformation format of ISO\n              10646\", STD 63, RFC 3629, DOI 10.17487/RFC3629, November\n              2003, <https://www.rfc-editor.org/info/rfc3629>.\n\n13.2.  Informative References\n\n13.2.1.  Related Protocols\n\n   [ANONYMOUS]\n              Zeilenga, K., \"Anonymous Simple Authentication and\n              Security Layer (SASL) Mechanism\", RFC 4505,\n              DOI 10.17487/RFC4505, June 2006,\n              <https://www.rfc-editor.org/info/rfc4505>.\n\n   [CERT-555316]\n              Carnegie Mellon University, \"STARTTLS plaintext command\n              injection vulnerability\", Software Engineering Institute,\n              CERT Coordination Center, Vulnerability Note VU#555316,\n              September 2011, <https://www.kb.cert.org/vuls/id/555316>.\n\n   [CHARSET-REG]\n              IANA, \"Character Set Registrations\",\n              <https://www.iana.org/assignments/charset-reg/>.\n\n   [IMAP-DISC]\n              Melnikov, A., Ed., \"Synchronization Operations for\n              Disconnected IMAP4 Clients\", RFC 4549,\n              DOI 10.17487/RFC4549, June 2006,\n              <https://www.rfc-editor.org/info/rfc4549>.\n\n   [IMAP-I18N]\n              Newman, C., Gulbrandsen, A., and A. Melnikov, \"Internet\n              Message Access Protocol Internationalization\", RFC 5255,\n              DOI 10.17487/RFC5255, June 2008,\n              <https://www.rfc-editor.org/info/rfc5255>.\n\n   [IMAP-KEYWORDS-REG]\n              IANA, \"IMAP and JMAP Keywords\",\n              <https://www.iana.org/assignments/imap-jmap-keywords/>.\n\n   [IMAP-MAILBOX-NAME-ATTRS-REG]\n              IANA, \"IMAP Mailbox Name Attributes\",\n              <https://www.iana.org/assignments/imap-mailbox-name-\n              attributes/>.\n\n   [IMAP-MODEL]\n              Crispin, M., \"Distributed Electronic Mail Models in\n              IMAP4\", RFC 1733, DOI 10.17487/RFC1733, December 1994,\n              <https://www.rfc-editor.org/info/rfc1733>.\n\n   [IMAP-URL] Melnikov, A., Ed. and C. Newman, \"IMAP URL Scheme\",\n              RFC 5092, DOI 10.17487/RFC5092, November 2007,\n              <https://www.rfc-editor.org/info/rfc5092>.\n\n   [IMAP-UTF-8]\n              Resnick, P., Ed., Newman, C., Ed., and S. Shen, Ed., \"IMAP\n              Support for UTF-8\", RFC 6855, DOI 10.17487/RFC6855, March\n              2013, <https://www.rfc-editor.org/info/rfc6855>.\n\n   [NCSC]     NCSC, \"Spray you, spray me: defending against password\n              spraying attacks\", May 2018, <https://www.ncsc.gov.uk/\n              blog-post/spray-you-spray-me-defending-against-password-\n              spraying-attacks>.\n\n   [RFC2087]  Myers, J., \"IMAP4 QUOTA extension\", RFC 2087,\n              DOI 10.17487/RFC2087, January 1997,\n              <https://www.rfc-editor.org/info/rfc2087>.\n\n   [RFC2177]  Leiba, B., \"IMAP4 IDLE command\", RFC 2177,\n              DOI 10.17487/RFC2177, June 1997,\n              <https://www.rfc-editor.org/info/rfc2177>.\n\n   [RFC2193]  Gahrns, M., \"IMAP4 Mailbox Referrals\", RFC 2193,\n              DOI 10.17487/RFC2193, September 1997,\n              <https://www.rfc-editor.org/info/rfc2193>.\n\n   [RFC2342]  Gahrns, M. and C. Newman, \"IMAP4 Namespace\", RFC 2342,\n              DOI 10.17487/RFC2342, May 1998,\n              <https://www.rfc-editor.org/info/rfc2342>.\n\n   [RFC3348]  Gahrns, M. and R. Cheng, \"The Internet Message Action\n              Protocol (IMAP4) Child Mailbox Extension\", RFC 3348,\n              DOI 10.17487/RFC3348, July 2002,\n              <https://www.rfc-editor.org/info/rfc3348>.\n\n   [RFC3516]  Nerenberg, L., \"IMAP4 Binary Content Extension\", RFC 3516,\n              DOI 10.17487/RFC3516, April 2003,\n              <https://www.rfc-editor.org/info/rfc3516>.\n\n   [RFC3691]  Melnikov, A., \"Internet Message Access Protocol (IMAP)\n              UNSELECT command\", RFC 3691, DOI 10.17487/RFC3691,\n              February 2004, <https://www.rfc-editor.org/info/rfc3691>.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, DOI 10.17487/RFC4314, December 2005,\n              <https://www.rfc-editor.org/info/rfc4314>.\n\n   [RFC4315]  Crispin, M., \"Internet Message Access Protocol (IMAP) -\n              UIDPLUS extension\", RFC 4315, DOI 10.17487/RFC4315,\n              December 2005, <https://www.rfc-editor.org/info/rfc4315>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <https://www.rfc-editor.org/info/rfc4466>.\n\n   [RFC4731]  Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n              Command for Controlling What Kind of Information Is\n              Returned\", RFC 4731, DOI 10.17487/RFC4731, November 2006,\n              <https://www.rfc-editor.org/info/rfc4731>.\n\n   [RFC4959]  Siemborski, R. and A. Gulbrandsen, \"IMAP Extension for\n              Simple Authentication and Security Layer (SASL) Initial\n              Client Response\", RFC 4959, DOI 10.17487/RFC4959,\n              September 2007, <https://www.rfc-editor.org/info/rfc4959>.\n\n   [RFC5161]  Gulbrandsen, A., Ed. and A. Melnikov, Ed., \"The IMAP\n              ENABLE Extension\", RFC 5161, DOI 10.17487/RFC5161, March\n              2008, <https://www.rfc-editor.org/info/rfc5161>.\n\n   [RFC5182]  Melnikov, A., \"IMAP Extension for Referencing the Last\n              SEARCH Result\", RFC 5182, DOI 10.17487/RFC5182, March\n              2008, <https://www.rfc-editor.org/info/rfc5182>.\n\n   [RFC5256]  Crispin, M. and K. Murchison, \"Internet Message Access\n              Protocol - SORT and THREAD Extensions\", RFC 5256,\n              DOI 10.17487/RFC5256, June 2008,\n              <https://www.rfc-editor.org/info/rfc5256>.\n\n   [RFC5465]  Gulbrandsen, A., King, C., and A. Melnikov, \"The IMAP\n              NOTIFY Extension\", RFC 5465, DOI 10.17487/RFC5465,\n              February 2009, <https://www.rfc-editor.org/info/rfc5465>.\n\n   [RFC5530]  Gulbrandsen, A., \"IMAP Response Codes\", RFC 5530,\n              DOI 10.17487/RFC5530, May 2009,\n              <https://www.rfc-editor.org/info/rfc5530>.\n\n   [RFC5819]  Melnikov, A. and T. Sirainen, \"IMAP4 Extension for\n              Returning STATUS Information in Extended LIST\", RFC 5819,\n              DOI 10.17487/RFC5819, March 2010,\n              <https://www.rfc-editor.org/info/rfc5819>.\n\n   [RFC6151]  Turner, S. and L. Chen, \"Updated Security Considerations\n              for the MD5 Message-Digest and the HMAC-MD5 Algorithms\",\n              RFC 6151, DOI 10.17487/RFC6151, March 2011,\n              <https://www.rfc-editor.org/info/rfc6151>.\n\n   [RFC6154]  Leiba, B. and J. Nicolson, \"IMAP LIST Extension for\n              Special-Use Mailboxes\", RFC 6154, DOI 10.17487/RFC6154,\n              March 2011, <https://www.rfc-editor.org/info/rfc6154>.\n\n   [RFC6186]  Daboo, C., \"Use of SRV Records for Locating Email\n              Submission/Access Services\", RFC 6186,\n              DOI 10.17487/RFC6186, March 2011,\n              <https://www.rfc-editor.org/info/rfc6186>.\n\n   [RFC6376]  Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed.,\n              \"DomainKeys Identified Mail (DKIM) Signatures\", STD 76,\n              RFC 6376, DOI 10.17487/RFC6376, September 2011,\n              <https://www.rfc-editor.org/info/rfc6376>.\n\n   [RFC6409]  Gellens, R. and J. Klensin, \"Message Submission for Mail\",\n              STD 72, RFC 6409, DOI 10.17487/RFC6409, November 2011,\n              <https://www.rfc-editor.org/info/rfc6409>.\n\n   [RFC6851]  Gulbrandsen, A. and N. Freed, Ed., \"Internet Message\n              Access Protocol (IMAP) - MOVE Extension\", RFC 6851,\n              DOI 10.17487/RFC6851, January 2013,\n              <https://www.rfc-editor.org/info/rfc6851>.\n\n   [RFC7162]  Melnikov, A. and D. Cridland, \"IMAP Extensions: Quick Flag\n              Changes Resynchronization (CONDSTORE) and Quick Mailbox\n              Resynchronization (QRESYNC)\", RFC 7162,\n              DOI 10.17487/RFC7162, May 2014,\n              <https://www.rfc-editor.org/info/rfc7162>.\n\n   [RFC7888]  Melnikov, A., Ed., \"IMAP4 Non-synchronizing Literals\",\n              RFC 7888, DOI 10.17487/RFC7888, May 2016,\n              <https://www.rfc-editor.org/info/rfc7888>.\n\n   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, \"Guidelines for\n              Writing an IANA Considerations Section in RFCs\", BCP 26,\n              RFC 8126, DOI 10.17487/RFC8126, June 2017,\n              <https://www.rfc-editor.org/info/rfc8126>.\n\n   [RFC8305]  Schinazi, D. and T. Pauly, \"Happy Eyeballs Version 2:\n              Better Connectivity Using Concurrency\", RFC 8305,\n              DOI 10.17487/RFC8305, December 2017,\n              <https://www.rfc-editor.org/info/rfc8305>.\n\n   [RFC8438]  Bosch, S., \"IMAP Extension for STATUS=SIZE\", RFC 8438,\n              DOI 10.17487/RFC8438, August 2018,\n              <https://www.rfc-editor.org/info/rfc8438>.\n\n   [RFC8474]  Gondwana, B., Ed., \"IMAP Extension for Object\n              Identifiers\", RFC 8474, DOI 10.17487/RFC8474, September\n              2018, <https://www.rfc-editor.org/info/rfc8474>.\n\n   [RFC8550]  Schaad, J., Ramsdell, B., and S. Turner, \"Secure/\n              Multipurpose Internet Mail Extensions (S/MIME) Version 4.0\n              Certificate Handling\", RFC 8550, DOI 10.17487/RFC8550,\n              April 2019, <https://www.rfc-editor.org/info/rfc8550>.\n\n   [RFC8551]  Schaad, J., Ramsdell, B., and S. Turner, \"Secure/\n              Multipurpose Internet Mail Extensions (S/MIME) Version 4.0\n              Message Specification\", RFC 8551, DOI 10.17487/RFC8551,\n              April 2019, <https://www.rfc-editor.org/info/rfc8551>.\n\n   [SMTP]     Klensin, J., \"Simple Mail Transfer Protocol\", RFC 5321,\n              DOI 10.17487/RFC5321, October 2008,\n              <https://www.rfc-editor.org/info/rfc5321>.\n\n13.2.2.  Historical Aspects of IMAP and Related Protocols\n\n   [IMAP-COMPAT]\n              Crispin, M., \"IMAP4 Compatibility with IMAP2bis\",\n              RFC 2061, DOI 10.17487/RFC2061, December 1996,\n              <https://www.rfc-editor.org/info/rfc2061>.\n\n   [IMAP-HISTORICAL]\n              Crispin, M., \"IMAP4 Compatibility with IMAP2 and\n              IMAP2bis\", RFC 1732, DOI 10.17487/RFC1732, December 1994,\n              <https://www.rfc-editor.org/info/rfc1732>.\n\n   [IMAP-OBSOLETE]\n              Crispin, M., \"Internet Message Access Protocol - Obsolete\n              Syntax\", RFC 2062, DOI 10.17487/RFC2062, December 1996,\n              <https://www.rfc-editor.org/info/rfc2062>.\n\n   [IMAP-TLS] Newman, C., \"Using TLS with IMAP, POP3 and ACAP\",\n              RFC 2595, DOI 10.17487/RFC2595, June 1999,\n              <https://www.rfc-editor.org/info/rfc2595>.\n\n   [IMAP2]    Crispin, M., \"Interactive Mail Access Protocol: Version\n              2\", RFC 1176, DOI 10.17487/RFC1176, August 1990,\n              <https://www.rfc-editor.org/info/rfc1176>.\n\n   [IMAP2BIS] Crispin, M., \"INTERACTIVE MAIL ACCESS PROTOCOL - VERSION\n              2bis\", Work in Progress, Internet-Draft, draft-ietf-imap-\n              imap2bis-02, 29 October 1993,\n              <https://datatracker.ietf.org/doc/html/draft-ietf-imap-\n              imap2bis-02>.\n\n   [RFC1064]  Crispin, M., \"Interactive Mail Access Protocol: Version\n              2\", RFC 1064, DOI 10.17487/RFC1064, July 1988,\n              <https://www.rfc-editor.org/info/rfc1064>.\n\n   [RFC1730]  Crispin, M., \"Internet Message Access Protocol - Version\n              4\", RFC 1730, DOI 10.17487/RFC1730, December 1994,\n              <https://www.rfc-editor.org/info/rfc1730>.\n\n   [RFC2060]  Crispin, M., \"Internet Message Access Protocol - Version\n              4rev1\", RFC 2060, DOI 10.17487/RFC2060, December 1996,\n              <https://www.rfc-editor.org/info/rfc2060>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC822]   Crocker, D., \"STANDARD FOR THE FORMAT OF ARPA INTERNET\n              TEXT MESSAGES\", STD 11, RFC 822, DOI 10.17487/RFC0822,\n              August 1982, <https://www.rfc-editor.org/info/rfc822>.\n\nAppendix A.  Backward Compatibility with IMAP4rev1\n\n   An implementation that wants to remain compatible with IMAP4rev1 can\n   advertise both IMAP4rev1 and IMAP4rev2 in its CAPABILITY response /\n   response code.  (Such server implementation is likely to also want to\n   advertise other IMAP4rev1 extensions that were folded into IMAP4rev2;\n   see Appendix E.)  While some IMAP4rev1 responses were removed in\n   IMAP4rev2, their presence will not break IMAP4rev2-only clients.\n\n   If both IMAP4rev1 and IMAP4rev2 are advertised, an IMAP client that\n   wants to use IMAP4rev2 MUST issue an \"ENABLE IMAP4rev2\" command.\n\n   When compared to IMAP4rev1, some request data items, corresponding\n   response data items, and responses were removed in IMAP4rev2.  See\n   Appendix E for more details.  With the exception of obsolete SEARCH\n   and RECENT responses, servers advertising both IMAP4rev1 and\n   IMAP4rev2 would never return such removed response data items/\n   responses unless explicitly requested by an IMAPrev1 client.\n\n   Servers advertising both IMAP4rev1 and IMAP4rev2 MUST NOT generate\n   UTF-8-quoted strings unless the client has issued \"ENABLE IMAP4rev2\".\n   Consider implementation of mechanisms described or referenced in\n   [IMAP-UTF-8] to achieve this goal.\n\n   Servers advertising both IMAP4rev1 and IMAP4rev2, and clients\n   intending to be compatible with IMAP4rev1 servers, MUST be compatible\n   with the Mailbox International Naming Convention described in\n   Appendix A.1.\n\n   Also see Appendix D for special considerations for servers that\n   support 63-bit body part / message sizes and want to advertise\n   support for both IMAP4rev1 and IMAP4rev2.\n\nA.1.  Mailbox International Naming Convention for Compatibility with\n      IMAP4rev1\n\n   Support for the Mailbox International Naming Convention described in\n   this section is not required for IMAP4rev2-only clients and servers.\n   It is only used for backward compatibility with IMAP4rev1\n   implementations.\n\n   By convention, international mailbox names in IMAP4rev1 are specified\n   using a modified version of the UTF-7 encoding described in [UTF-7].\n   Modified UTF-7 may also be usable in servers that implement an\n   earlier version of this protocol.\n\n   In modified UTF-7, printable US-ASCII characters, except for \"&\",\n   represent themselves; that is, characters with octet values 0x20-0x25\n   and 0x27-0x7e.  The character \"&\" (0x26) is represented by the\n   2-octet sequence \"&-\".\n\n   All other characters (octet values 0x00-0x1f and 0x7f-0xff) are\n   represented in modified base64, with a further modification from\n   [UTF-7] that \",\" is used instead of \"/\".  Modified base64 MUST NOT be\n   used to represent any printing of a US-ASCII character that can\n   represent itself.  Only characters inside the modified base64\n   alphabet are permitted in modified base64 text.\n\n   \"&\" is used to shift to modified base64 and \"-\" to shift back to US-\n   ASCII.  There is no implicit shift from base64 to US-ASCII, and null\n   shifts (\"-&\" while in base64; note that \"&-\" while in US-ASCII means\n   \"&\") are not permitted.  However, all names start in US-ASCII and\n   MUST end in US-ASCII; that is, a name that ends with a non-ASCII\n   ISO-10646 character MUST end with a \"-\".\n\n   The purpose of these modifications is to correct the following\n   problems with UTF-7:\n\n   1.  UTF-7 uses the \"+\" character for shifting; this conflicts with\n       the common use of \"+\" in mailbox names, in particular USENET\n       newsgroup names.\n\n   2.  UTF-7's encoding is base64, which uses the \"/\" character; this\n       conflicts with the use of \"/\" as a popular hierarchy delimiter.\n\n   3.  UTF-7 prohibits the unencoded usage of \"\\\"; this conflicts with\n       the use of \"\\\" as a popular hierarchy delimiter.\n\n   4.  UTF-7 prohibits the unencoded usage of \"~\"; this conflicts with\n       the use of \"~\" in some servers as a home directory indicator.\n\n   5.  UTF-7 permits multiple alternate forms to represent the same\n       string; in particular, printable US-ASCII characters can be\n       represented in encoded form.\n\n   Although modified UTF-7 is a convention, it establishes certain\n   requirements on the server handling of any mailbox name with an\n   embedded \"&\" character.  In particular, server implementations MUST\n   preserve the exact form of the modified base64 portion of a modified\n   UTF-7 name and treat that text as case sensitive, even if names are\n   otherwise case insensitive or case folded.\n\n   Server implementations SHOULD verify that any mailbox name with an\n   embedded \"&\" character, used as an argument to CREATE, is: in the\n   correctly modified UTF-7 syntax; has no superfluous shifts; and has\n   no encoding in modified base64 of any printing US-ASCII character\n   that can represent itself.  However, client implementations MUST NOT\n   depend upon the server doing this and SHOULD NOT attempt to create a\n   mailbox name with an embedded \"&\" character unless it complies with\n   the modified UTF-7 syntax.\n\n   Server implementations that export a mail store that does not follow\n   the modified UTF-7 convention MUST convert any mailbox name that\n   contains either non-ASCII characters or the \"&\" character to modified\n   UTF-7.\n\n      For example, here is a mailbox name that mixes English, Chinese,\n      and Japanese text: ~peter/mail/&U,BTFw-/&ZeVnLIqe-\n\n      For example, the string \"&Jjo!\" is not a valid mailbox name\n      because it does not contain a shift to US-ASCII before the \"!\".\n      The correct form is \"&Jjo-!\".  The string \"&U,BTFw-&ZeVnLIqe-\" is\n      not permitted because it contains a superfluous shift.  The\n      correct form is \"&U,BTF2XlZyyKng-\".\n\nAppendix B.  Backward Compatibility with BINARY Extension\n\n   IMAP4rev2 incorporates a subset of functionality provided by the\n   BINARY extension [RFC3516]; in particular, it includes additional\n   FETCH items (BINARY, BINARY.PEEK, and BINARY.SIZE) but not extensions\n   to the APPEND command.  IMAP4rev2 implementations that support full\n   [RFC3516] functionality need to also advertise the BINARY capability\n   in the CAPABILITY response / response code.\n\nAppendix C.  Backward Compatibility with LIST-EXTENDED Extension\n\n   IMAP4rev2 incorporates most of the functionality provided by the\n   LIST-EXTENDED extension [RFC5258].  In particular, the syntax for\n   multiple mailbox patterns is not supported in IMAP4rev2, unless LIST-\n   EXTENDED capability is also advertised in the CAPABILITY response /\n   response code.\n\nAppendix D.  63-Bit Body Part and Message Sizes\n\n   IMAP4rev2 increases allowed body part and message sizes that servers\n   can support from 32 to 63 bits.  Server implementations don't have to\n   support 63-bit-long body parts/message sizes; however, client\n   implementations have to expect them.\n\n   As IMAP4rev1 didn't support 63-bit-long body part / message sizes,\n   there is an interoperability issue exposed by 63-bit-capable servers/\n   mailboxes that are accessible by both IMAP4rev1 and IMAP4rev2 email\n   clients.  As IMAP4rev1 would be unable to retrieve the full content\n   of messages bigger than 4 Gb, such servers either need to replace\n   messages bigger that 4 Gb with messages under 4 Gb or hide them from\n   IMAP4rev1 clients.  This document doesn't prescribe any\n   implementation strategy to address this issue.\n\nAppendix E.  Changes from RFC 3501 / IMAP4rev1\n\n   Below is the summary of changes since RFC 3501:\n\n   1.   Support for 64-bit message and body part sizes.\n\n   2.   Folded in IMAP NAMESPACE [RFC2342], UNSELECT [RFC3691], UIDPLUS\n        [RFC4315], ESEARCH [RFC4731], SEARCHRES [RFC5182], ENABLE\n        [RFC5161], IDLE [RFC2177], SASL-IR [RFC4959], LIST-EXTENDED\n        [RFC5258], LIST-STATUS [RFC5819], MOVE [RFC6851], and LITERAL-\n        extensions [RFC7888].  Also folded in IMAP ABNF extensions\n        [RFC4466], response codes [RFC5530], the FETCH side of the\n        BINARY extension [RFC3516], and the list of new mailbox\n        attributes from SPECIAL-USE [RFC6154].\n\n   3.   Added STATUS SIZE [RFC8438] and STATUS DELETED.\n\n   4.   SEARCH command now requires to return the ESEARCH response\n        (SEARCH response is now deprecated).\n\n   5.   Clarified which SEARCH keys have to use substring match and\n        which don't.\n\n   6.   Clarified that the server should decode parameter value\n        continuations as described in [RFC2231].  This requirement was\n        hidden in [RFC2231] itself.\n\n   7.   Clarified that the COPYUID response code is returned for both\n        MOVE and UID MOVE.\n\n   8.   Tightened requirements about COPY/MOVE commands not creating a\n        target mailbox.  Also required them to return the TRYCREATE\n        response code, if the target mailbox doesn't exist and can be\n        created.\n\n   9.   Added the CLOSED response code from [RFC7162].  SELECT/EXAMINE\n        when a mailbox is already selected now requires a CLOSED\n        response code to be returned.\n\n   10.  SELECT/EXAMINE are now required to return an untagged LIST\n        response.\n\n   11.  UNSEEN response code on SELECT/EXAMINE is now deprecated.\n\n   12.  RECENT response on SELECT/EXAMINE, \\Recent flag, RECENT STATUS,\n        and SEARCH NEW items are now deprecated.\n\n   13.  Clarified that the server doesn't need to send a new\n        PERMANENTFLAGS response code when a new keyword was successfully\n        added and the server advertised \\* earlier for the same mailbox.\n\n   14.  For future extensibility, extended ABNF for tagged-ext-simple to\n        allow for bare number64.\n\n   15.  Added SHOULD level requirement on IMAP servers to support\n        $MDNSent, $Forwarded, $Junk, $NonJunk, and $Phishing keywords.\n\n   16.  Mailbox names and message headers now allow for UTF-8.  Support\n        for modified UTF-7 in mailbox names is not required, unless\n        compatibility with IMAP4rev1 is desired.\n\n   17.  Removed the CHECK command.  Clients should use NOOP instead.\n\n   18.  RFC822, RFC822.HEADER, and RFC822.TEXT FETCH data items were\n        deprecated.  Clients should use the corresponding BODY[]\n        variants instead.\n\n   19.  LSUB command was deprecated.  Clients should use LIST\n        (SUBSCRIBED) instead.\n\n   20.  IDLE command can now return updates not related to the currently\n        selected mailbox state.\n\n   21.  All unsolicited FETCH updates are required to include UID.\n\n   22.  Clarified that client implementations MUST ignore response codes\n        that they do not recognize.  (Changed from a SHOULD to a MUST.)\n\n   23.  resp-text ABNF non-terminal was updated to allow for empty text.\n\n   24.  After ENABLE, IMAP4rev2 human-readable response text can include\n        non-ASCII encoded in UTF-8.\n\n   25.  Updated to use modern TLS-related recommendations as per\n        [RFC7525], [RFC7817], and [RFC8314].\n\n   26.  Added warnings about use of ALERT response codes and PREAUTH\n        response.\n\n   27.  Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256.  DIGEST-\n        MD5 was deprecated.\n\n   28.  Clarified that any command received from the client resets\n        server autologout timer.\n\n   29.  Revised IANA registration procedure for IMAP extensions and\n        removed \"X\" convention in accordance with [BCP178].\n\n   30.  Loosened requirements on servers when closing connections to be\n        more aligned with existing practices.\n\nAppendix F.  Other Recommended IMAP Extensions\n\n   Support for the following extensions is recommended for all IMAP\n   clients and servers.  While they significantly reduce bandwidth and/\n   or number of round trips used by IMAP in certain situations, the\n   EXTRA WG decided that requiring them as a part of IMAP4rev2 would\n   push the bar to implement too high for new implementations.  Also\n   note that the absence of any IMAP extension from this list doesn't\n   make it somehow deficient or not recommended for use with IMAP4rev2.\n\n   1.  Quick Mailbox Resynchronization (QRESYNC) and CONDSTORE\n       extensions [RFC7162].  They make discovering changes to IMAP\n       mailboxes more efficient, at the expense of storing a bit more\n       state.\n\n   2.  OBJECTID extension [RFC8474] helps with preserving the IMAP\n       client cache when messages are moved/copied or mailboxes are\n       renamed.\n\nAcknowledgements\n\n   Earlier draft versions of this document were edited by Mark Crispin.\n   Sadly, he is no longer available to help with this work.  Editors of\n   this revision are hoping that Mark would have approved.\n\n   Chris Newman has contributed text on I18N and use of UTF-8 in\n   messages and mailbox names.\n\n   Thank you to Tony Hansen for helping with the index generation.\n   Thank you to Murray Kucherawy, Timo Sirainen, Bron Gondwana, Stephan\n   Bosch, Robert Sparks, Arnt Gulbrandsen, Benjamin Kaduk, Daniel\n   Migaul, Roman Danyliw, and Éric Vyncke for extensive feedback.\n\n   This document incorporates text from [RFC2342] (by Mike Gahrns and\n   Chris Newman), [RFC3516] (by Lyndon Nerenberg), [RFC4315] (by Mark\n   Crispin), [RFC4466] (by Cyrus Daboo), [RFC4731] (by Dave Cridland),\n   [RFC4959] (by Rob Siemborski and Arnt Gulbrandsen), [RFC5161] (by\n   Arnt Gulbrandsen), [RFC5465] (by Arnt Gulbrandsen and Curtis King),\n   [RFC5530] (by Arnt Gulbrandsen), [RFC5819] (by Timo Sirainen),\n   [RFC6154] (by Jamie Nicolson), [RFC6851] (by Arnt Gulbrandsen and Ned\n   Freed), and [RFC8438] (by Stephan Bosch), so work done by authors/\n   editors of these documents is appreciated.  Note that editors of this\n   document were redacted from the above list.\n\n   The CHILDREN return option was originally proposed by Mike Gahrns and\n   Raymond Cheng in [RFC3348].  Most of the information in\n   Section 6.3.9.5 is taken directly from their original specification\n   [RFC3348].\n\n   Thank you to Damian Poddebniak, Fabian Ising, Hanno Boeck, and\n   Sebastian Schinzel for pointing out that the ENABLE command should be\n   a member of \"command-auth\" and not \"command-any\" ABNF production, as\n   well as pointing out security issues associated with ALERT, PREAUTH,\n   and other responses received before authentication.\n\nIndex\n\n   $ + - \\ A B C D E F H I K L M N O P R S T U\n\n      $\n\n         $Forwarded (predefined flag)\n            Section 2.3.2\n         $Junk (predefined flag)\n            Section 2.3.2\n         $MDNSent (predefined flag)\n            Section 2.3.2\n         $NotJunk (predefined flag)\n            Section 2.3.2\n         $Phishing (predefined flag)\n            Section 2.3.2, Paragraph 6.10.1\n\n      +\n\n         +FLAGS <flag list>\n            Section 6.4.6\n         +FLAGS.SILENT <flag list>\n            Section 6.4.6\n\n      -\n\n         -FLAGS <flag list>\n            Section 6.4.6\n         -FLAGS.SILENT <flag list>\n            Section 6.4.6\n\n      \\\n\n         \\All (mailbox name attribute)\n            Section 7.3.1\n         \\Answered (system flag)\n            Section 2.3.2\n         \\Archive (mailbox name attribute)\n            Section 7.3.1\n         \\Deleted (system flag)\n            Section 2.3.2\n         \\Draft (system flag)\n            Section 2.3.2\n         \\Drafts (mailbox name attribute)\n            Section 7.3.1\n         \\Flagged (mailbox name attribute)\n            Section 7.3.1\n         \\Flagged (system flag)\n            Section 2.3.2\n         \\HasChildren (mailbox name attribute)\n            Section 7.3.1\n         \\HasNoChildren (mailbox name attribute)\n            Section 7.3.1\n         \\Junk (mailbox name attribute)\n            Section 7.3.1\n         \\Marked (mailbox name attribute)\n            Section 7.3.1\n         \\Noinferiors (mailbox name attribute)\n            Section 7.3.1\n         \\NonExistent (mailbox name attribute)\n            Section 7.3.1, Paragraph 4.2.1\n         \\Noselect (mailbox name attribute)\n            Section 7.3.1\n         \\Recent (system flag)\n            Section 2.3.2\n         \\Remote (mailbox name attribute)\n            Section 7.3.1\n         \\Seen (system flag)\n            Section 2.3.2\n         \\Sent (mailbox name attribute)\n            Section 7.3.1\n         \\Subscribed (mailbox name attribute)\n            Section 7.3.1\n         \\Trash (mailbox name attribute)\n            Section 7.3.1\n         \\Unmarked (mailbox name attribute)\n            Section 7.3.1\n\n      A\n\n         ALERT (response code)\n            Section 7.1\n         ALL (fetch item)\n            Section 6.4.5\n         ALL (search key)\n            Section 6.4.4\n         ALL (search result option)\n            Section 6.4.4, Paragraph 6.6.1\n         ALL (search return item name)\n            Section 7.3.4, Paragraph 7.6.1\n         ALREADYEXISTS (response code)\n            Section 7.1, Paragraph 4.4.1\n         ANSWERED (search key)\n            Section 6.4.4\n         APPEND (command)\n            Section 6.3.12\n         APPENDUID (response code)\n            Section 7.1, Paragraph 4.6.1\n         AUTHENTICATE (command)\n            Section 6.2.2\n         AUTHENTICATIONFAILED (response code)\n            Section 7.1, Paragraph 4.8.1\n         AUTHORIZATIONFAILED (response code)\n            Section 7.1, Paragraph 4.10.1\n\n      B\n\n         BAD (response)\n            Section 7.1.3\n         BADCHARSET (response code)\n            Section 7.1\n         BCC <string> (search key)\n            Section 6.4.4\n         BEFORE <date> (search key)\n            Section 6.4.4\n         BINARY.PEEK[<section-binary>]<<partial>> (fetch item)\n            Section 6.4.5\n         BINARY.SIZE[<section-binary>] (fetch item)\n            Section 6.4.5, Paragraph 9.6.1\n         BINARY.SIZE[<section-binary>] (fetch result)\n            Section 7.5.2, Paragraph 4.4.1\n         BINARY[<section-binary>]<<number>> (fetch result)\n            Section 7.5.2, Paragraph 4.2.1\n         BINARY[<section-binary>]<<partial>> (fetch item)\n            Section 6.4.5, Paragraph 9.2.1\n         BODY (fetch item)\n            Section 6.4.5\n         BODY (fetch result)\n            Section 7.5.2\n         BODY <string> (search key)\n            Section 6.4.4\n         BODY.PEEK[<section>]<<partial>> (fetch item)\n            Section 6.4.5\n         BODYSTRUCTURE (fetch item)\n            Section 6.4.5\n         BODYSTRUCTURE (fetch result)\n            Section 7.5.2, Paragraph 4.10.1\n         BODY[<section>]<<origin octet>> (fetch result)\n            Section 7.5.2, Paragraph 4.8.1\n         BODY[<section>]<<partial>> (fetch item)\n            Section 6.4.5, Paragraph 9.10.1\n         BYE (response)\n            Section 7.1.5\n         Body Structure (message attribute)\n            Section 2.3.6\n\n      C\n\n         CANNOT (response code)\n            Section 7.1, Paragraph 4.14.1\n         CAPABILITY (command)\n            Section 6.1.1\n         CAPABILITY (response code)\n            Section 7.1\n         CAPABILITY (response)\n            Section 7.2.2\n         CC <string> (search key)\n            Section 6.4.4\n         CLIENTBUG (response code)\n            Section 7.1, Paragraph 4.18.1\n         CLOSE (command)\n            Section 6.4.1\n         CLOSED (response code)\n            Section 7.1, Paragraph 4.20.1\n         CONTACTADMIN (response code)\n            Section 7.1, Paragraph 4.22.1\n         COPY (command)\n            Section 6.4.7\n         COPYUID (response code)\n            Section 7.1, Paragraph 4.24.1\n         CORRUPTION (response code)\n            Section 7.1, Paragraph 4.26.1\n         COUNT (search result option)\n            Section 6.4.4\n         COUNT (search return item name)\n            Section 7.3.4\n         CREATE (command)\n            Section 6.3.4\n\n      D\n\n         DELETE (command)\n            Section 6.3.5\n         DELETED (search key)\n            Section 6.4.4\n         DELETED (status item)\n            Section 6.3.11\n         DRAFT (search key)\n            Section 6.4.4\n\n      E\n\n         ENABLE (command)\n            Section 6.3.1\n         ENVELOPE (fetch item)\n            Section 6.4.5\n         ENVELOPE (fetch result)\n            Section 7.5.2, Paragraph 4.42.1\n         ESEARCH (response)\n            Section 7.3.4\n         EXAMINE (command)\n            Section 6.3.3\n         EXPIRED (response code)\n            Section 7.1, Paragraph 4.28.1\n         EXPUNGE (command)\n            Section 6.4.3\n         EXPUNGE (response)\n            Section 7.5.1\n         EXPUNGEISSUED (response code)\n            Section 7.1, Paragraph 4.30.1\n         Envelope Structure (message attribute)\n            Section 2.3.5\n\n      F\n\n         FAST (fetch item)\n            Section 6.4.5\n         FETCH (command)\n            Section 6.4.5\n         FETCH (response)\n            Section 7.5.2\n         FLAGGED (search key)\n            Section 6.4.4\n         FLAGS (fetch item)\n            Section 6.4.5\n         FLAGS (fetch result)\n            Section 7.5.2\n         FLAGS (response)\n            Section 7.3.5\n         FLAGS <flag list> (store command data item)\n            Section 6.4.6\n         FLAGS.SILENT <flag list> (store command data item)\n            Section 6.4.6\n         FROM <string> (search key)\n            Section 6.4.4\n         FULL (fetch item)\n            Section 6.4.5\n         Flags (message attribute)\n            Section 2.3.2\n\n      H\n\n         HASCHILDREN (response code)\n            Section 7.1, Paragraph 4.32.1\n         HEADER (part specifier)\n            Section 6.4.5.1, Paragraph 5\n         HEADER <field-name> <string> (search key)\n            Section 6.4.4\n         HEADER.FIELDS (part specifier)\n            Section 6.4.5.1, Paragraph 5\n         HEADER.FIELDS.NOT (part specifier)\n            Section 6.4.5.1, Paragraph 5\n\n      I\n\n         IDLE (command)\n            Section 6.3.13\n         INTERNALDATE ( fetch item)\n            Section 6.4.5\n         INTERNALDATE (fetch result)\n            Section 7.5.2\n         INUSE (response code)\n            Section 7.1, Paragraph 4.34.1\n         Internal Date (message attribute)\n            Section 2.3.3\n\n      K\n\n         KEYWORD <flag> (search key)\n            Section 6.4.4\n         Keyword (type of flag)\n            Section 2.3.2, Paragraph 4\n\n      L\n\n         LARGER <n> (search key)\n            Section 6.4.4\n         LIMIT (response code)\n            Section 7.1, Paragraph 4.36.1\n         LIST (command)\n            Section 6.3.9\n         LIST (response)\n            Section 7.3.1\n         LOGOUT (command)\n            Section 6.1.3\n\n      M\n\n         MAX (search result option)\n            Section 6.4.4, Paragraph 6.4.1\n         MAX (search return item name)\n            Section 7.3.4, Paragraph 7.4.1\n         MAY (specification requirement term)\n            Section 1.2\n         MESSAGES (status item)\n            Section 6.3.11\n         MIME (part specifier)\n            Section 6.4.5.1, Paragraph 7\n         MIN (search result option)\n            Section 6.4.4, Paragraph 6.2.1\n         MIN (search return item name)\n            Section 7.3.4, Paragraph 7.2.1\n         MOVE (command)\n            Section 6.4.8\n         MUST (specification requirement term)\n            Section 1.2\n         MUST NOT (specification requirement term)\n            Section 1.2\n         Message Sequence Number (message attribute)\n            Section 2.3.1.2\n\n      N\n\n         NAMESPACE (command)\n            Section 6.3.10\n         NAMESPACE (response)\n            Section 7.3.2\n         NO (response)\n            Section 7.1.2\n         NONEXISTENT (response code)\n            Section 7.1, Paragraph 4.38.1\n         NOOP (command)\n            Section 6.1.2\n         NOPERM (response code)\n            Section 7.1, Paragraph 4.40.1\n         NOT <search-key> (search key)\n            Section 6.4.4\n         NOT RECOMMENDED (specification requirement term)\n            Section 1.2\n\n      O\n\n         OK (response)\n            Section 7.1.1\n         ON <date> (search key)\n            Section 6.4.4\n         OPTIONAL (specification requirement term)\n            Section 1.2; Section 1.2\n         OR <search-key1> <search-key2> (search key)\n            Section 6.4.4\n         OVERQUOTA (response code)\n            Section 7.1, Paragraph 4.42.1\n\n      P\n\n         PARSE (response code)\n            Section 7.1\n         PERMANENTFLAGS (response code)\n            Section 7.1, Paragraph 4.46.1\n         PREAUTH (response)\n            Section 7.1.4\n         PRIVACYREQUIRED (response code)\n            Section 7.1, Paragraph 4.48.1\n         Permanent Flag (class of flag)\n            Section 2.3.2, Paragraph 9\n         Predefined keywords\n            Section 2.3.2, Paragraph 5\n\n      R\n\n         READ-ONLY (response code)\n            Section 7.1\n         READ-WRITE (response code)\n            Section 7.1\n         RECOMMENDED (specification requirement term)\n            Section 1.2\n         RENAME (command)\n            Section 6.3.6\n         REQUIRED (specification requirement term)\n            Section 1.2\n         RFC822.SIZE (fetch item)\n            Section 6.4.5\n         RFC822.SIZE (fetch result)\n            Section 7.5.2\n         RFC822.SIZE (message attribute)\n            Section 2.3.4\n\n      S\n\n         SAVE (search result option)\n            Section 6.4.4, Paragraph 6.10.1\n         SEARCH (command)\n            Section 6.4.4\n         SEEN (search key)\n            Section 6.4.4\n         SELECT (command)\n            Section 6.3.2\n         SENTBEFORE <date> (search key)\n            Section 6.4.4\n         SENTON <date> (search key)\n            Section 6.4.4\n         SENTSINCE <date> (search key)\n            Section 6.4.4\n         SERVERBUG (response code)\n            Section 7.1, Paragraph 4.54.1\n         SHOULD (specification requirement term)\n            Section 1.2\n         SHOULD NOT (specification requirement term)\n            Section 1.2\n         SINCE <date> (search key)\n            Section 6.4.4\n         SIZE (status item)\n            Section 6.3.11\n         SMALLER <n> (search key)\n            Section 6.4.4\n         STARTTLS (command)\n            Section 6.2.1\n         STATUS (command)\n            Section 6.3.11\n         STATUS (response)\n            Section 7.3.3\n         STORE (command)\n            Section 6.4.6\n         SUBJECT <string> (search key)\n            Section 6.4.4\n         SUBSCRIBE (command)\n            Section 6.3.7\n         Session Flag (class of flag)\n            Section 2.3.2, Paragraph 9\n         System Flag (type of flag)\n            Section 2.3.2, Paragraph 2\n\n      T\n\n         TEXT (part specifier)\n            Section 6.4.5.1, Paragraph 5\n         TEXT <string> (search key)\n            Section 6.4.4\n         TO <string> (search key)\n            Section 6.4.4\n         TRYCREATE (response code)\n            Section 7.1\n\n      U\n\n         UID (command)\n            Section 6.4.9\n         UID (fetch item)\n            Section 6.4.5\n         UID (fetch result)\n            Section 7.5.2\n         UID <sequence set> (search key)\n            Section 6.4.4\n         UIDNEXT (response code)\n            Section 7.1\n         UIDNEXT (status item)\n            Section 6.3.11\n         UIDNOTSTICKY (response code)\n            Section 7.1, Paragraph 4.60.1\n         UIDVALIDITY (response code)\n            Section 7.1\n         UIDVALIDITY (status item)\n            Section 6.3.11\n         UNANSWERED (search key)\n            Section 6.4.4\n         UNAVAILABLE (response code)\n            Section 7.1, Paragraph 4.64.1\n         UNDELETED (search key)\n            Section 6.4.4\n         UNDRAFT (search key)\n            Section 6.4.4\n         UNFLAGGED (search key)\n            Section 6.4.4\n         UNKEYWORD <flag> (search key)\n            Section 6.4.4\n         UNKNOWN-CTE (response code)\n            Section 7.1\n         UNSEEN (search key)\n            Section 6.4.4\n         UNSEEN (status item)\n            Section 6.3.11\n         UNSELECT (command)\n            Section 6.4.2\n         UNSUBSCRIBE (command)\n            Section 6.3.8\n         Unique Identifier (UID) (message attribute)\n            Section 2.3.1.1\n\nAuthors' Addresses\n\n   Alexey Melnikov (editor)\n   Isode Ltd\n   14 Castle Mews\n   Hampton, Middlesex\n   TW12 2NP\n   United Kingdom\n\n   Email: Alexey.Melnikov@isode.com\n\n\n   Barry Leiba (editor)\n   Futurewei Technologies\n\n   Email: barryleiba@computer.org\n   URI:   http://internetmessagingtechnology.org/\n"
  },
  {
    "path": "rfc/rfc9208.txt",
    "content": "﻿\n\n\n\nInternet Engineering Task Force (IETF)                       A. Melnikov\nRequest for Comments: 9208                                         Isode\nObsoletes: 2087                                               March 2022\nCategory: Standards Track                                               \nISSN: 2070-1721\n\n\n                          IMAP QUOTA Extension\n\nAbstract\n\n   This document defines a QUOTA extension of the Internet Message\n   Access Protocol (IMAP) (see RFCs 3501 and 9051) that permits\n   administrative limits on resource usage (quotas) to be manipulated\n   through the IMAP protocol.\n\n   This document obsoletes RFC 2087 but attempts to remain backwards\n   compatible whenever possible.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc9208.\n\nCopyright Notice\n\n   Copyright (c) 2022 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Revised BSD License text as described in Section 4.e of the\n   Trust Legal Provisions and are provided without warranty as described\n   in the Revised BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\nTable of Contents\n\n   1.  Introduction and Overview\n   2.  Document Conventions\n   3.  Terms\n     3.1.  Resource\n       3.1.1.  Name\n       3.1.2.  Definition\n     3.2.  Quota Root\n   4.  Definitions\n     4.1.  Commands\n       4.1.1.  GETQUOTA\n       4.1.2.  GETQUOTAROOT\n       4.1.3.  SETQUOTA\n       4.1.4.  New STATUS attributes\n     4.2.  Responses\n       4.2.1.  QUOTA\n       4.2.2.  QUOTAROOT\n     4.3.  Response Codes\n       4.3.1.  OVERQUOTA\n   5.  Resource Type Definitions\n     5.1.  STORAGE\n     5.2.  MESSAGE\n     5.3.  MAILBOX\n     5.4.  ANNOTATION-STORAGE\n   6.  Interaction with IMAP ACL Extension (RFC 4314)\n   7.  Formal Syntax\n   8.  Security Considerations\n   9.  IANA Considerations\n     9.1.  Changes/Additions to the IMAP Capabilities Registry\n     9.2.  IMAP Quota Resource Type Registry\n   10. Changes Since RFC 2087\n   11. References\n     11.1.  Normative References\n     11.2.  Informative References\n   Acknowledgments\n   Contributors\n   Author's Address\n\n1.  Introduction and Overview\n\n   This document defines a couple of extensions to the Internet Message\n   Access Protocol [RFC3501] [RFC9051] for querying and manipulating\n   administrative limits on resource usage (quotas).  This extension is\n   compatible with both IMAP4rev1 [RFC3501] and IMAP4rev2 [RFC9051].\n\n   The \"QUOTA\" capability denotes a server compliant with [RFC2087].\n   Some responses and response codes defined in this document are not\n   present in such servers (see Section 10 for more details), and\n   clients MUST NOT rely on their presence in the absence of any\n   capability beginning with \"QUOTA=\".\n\n   Any server compliant with this document MUST also return at least one\n   capability starting with the \"QUOTA=RES-\" prefix, as described in\n   Section 3.1.\n\n   Any server compliant with this document that implements the SETQUOTA\n   command (see Section 4.1.3) MUST also return the \"QUOTASET\"\n   capability.\n\n   This document also reserves all other capabilities starting with the\n   \"QUOTA=\" prefix for future IETF Stream Standard Track, Informational,\n   or Experimental extensions to this document.\n\n   Quotas can be used to restrict clients for administrative reasons,\n   but the QUOTA extension can also be used to indicate system limits\n   and current usage levels to clients.\n\n   Although the IMAP4 QUOTA extension specified in [RFC2087] has seen\n   deployment in servers, it has seen little deployment in clients.\n   Since the meaning of the resources was implementation dependent, it\n   was impossible for a client implementation to determine which\n   resources were supported, and it was impossible to determine which\n   mailboxes were in a given quota root (see Section 3.2) without a\n   priori knowledge of the implementation.\n\n2.  Document Conventions\n\n   In protocol examples, this document uses a prefix of \"C: \" to denote\n   lines sent by the client to the server and \"S: \" for lines sent by\n   the server to the client.  Lines prefixed with \"//\" are comments\n   explaining the previous protocol line.  These prefixes and comments\n   are not part of the protocol.  Lines without any of these prefixes\n   are continuations of the previous line, and no line break is present\n   in the protocol before such lines unless specifically mentioned.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n   Other capitalized words are IMAP keywords [RFC3501] [RFC9051] or\n   keywords from this document.\n\n3.  Terms\n\n3.1.  Resource\n\n   A resource has a name, a formal definition.\n\n3.1.1.  Name\n\n   The resource name is an atom, as defined in IMAP4rev1 [RFC3501].\n   These MUST be registered with IANA.\n\n   Supported resource names MUST be advertised as a capability by\n   prepending the resource name with \"QUOTA=RES-\".  A server compliant\n   with this specification is not required to support all reported\n   resource types on all quota roots.\n\n3.1.2.  Definition\n\n   The resource definition or document containing it, while not visible\n   through the protocol, SHOULD be registered with IANA.\n\n   The usage of a resource MUST be represented as a 63-bit unsigned\n   integer.  0 indicates that the resource is exhausted.  Usage integers\n   don't necessarily represent proportional use, so clients MUST NOT\n   compare an available resource between two separate quota roots on the\n   same or different servers.\n\n   Limits will be specified as, and MUST be represented as, an integer.\n   0 indicates that any usage is prohibited.\n\n   Limits may be hard or soft; that is, an implementation MAY choose, or\n   be configured, to disallow any command if the limit on a resource is\n   or would be exceeded.\n\n   All resources that the server handles MUST be advertised in a\n   CAPABILITY response/response code consisting of the resource name\n   prefixed by \"QUOTA=RES-\".\n\n   The resources STORAGE (Section 5.1), MESSAGE (Section 5.2), MAILBOX\n   (Section 5.3), and ANNOTATION-STORAGE (Section 5.4) are defined in\n   this document.\n\n3.2.  Quota Root\n\n   This document introduces the concept of a \"quota root\", as resource\n   limits can apply across multiple IMAP mailboxes.\n\n   Each mailbox has zero or more implementation-defined named \"quota\n   roots\".  Each quota root has zero or more resource limits (quotas).\n   All mailboxes that share the same named quota root share the resource\n   limits of the quota root.\n\n   Quota root names need not be mailbox names, nor is there any\n   relationship defined by this document between a quota root name and a\n   mailbox name.  A quota root name is an astring, as defined in IMAP4\n   [RFC3501] [RFC9051].  It SHOULD be treated as an opaque string by any\n   clients.\n\n   Quota roots are used since not all implementations may be able to\n   calculate usage, or apply quotas, on arbitrary mailboxes or mailbox\n   hierarchies.\n\n   Not all resources may be limitable or calculable for all quota roots.\n   Furthermore, not all resources may support all limits; some limits\n   may be present in the underlying system.  A server implementation of\n   this memo SHOULD advise the client of such inherent limits, by\n   generating QUOTA (Section 4.2.1) responses, and SHOULD advise the\n   client of which resources are limitable for a particular quota root.\n   A SETQUOTA (Section 4.1.3) command MAY also round a quota limit in an\n   implementation-dependent way, if the granularity of the underlying\n   system demands it.  A client MUST be prepared for a SETQUOTA\n   (Section 4.1.3) command to fail if a limit cannot be set.\n\n   Implementation Notes: This means that, for example, under UNIX, a\n   quota root may have a MESSAGE (Section 5.2) quota always set due to\n   the number of inodes available on the filesystem; similarly, STORAGE\n   (Section 5.1) may be rounded to the nearest block and limited by free\n   filesystem space.\n\n4.  Definitions\n\n4.1.  Commands\n\n   The following commands exist for manipulation and querying quotas.\n\n4.1.1.  GETQUOTA\n\n   Arguments:  quota root\n\n   Responses:  REQUIRED untagged responses: QUOTA\n\n   Result:     OK - getquota completed\n\n               NO - getquota error: no such quota root, permission\n               denied\n\n               BAD - command unknown or arguments invalid\n\n   The GETQUOTA command takes the name of a quota root and returns the\n   quota root's resource usage and limits in an untagged QUOTA response.\n   (Names of quota roots applicable to a particular mailbox can be\n   discovered by issuing the GETQUOTAROOT command; see Section 4.1.2.)\n   Note that the server is not required to support any specific resource\n   type (as advertised in the CAPABILITY response, i.e., all capability\n   items with the \"QUOTA=RES-\" prefix) for any particular quota root.\n\n   Example:\n\n      S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE [...]\n\n      [...]\n\n      C: G0001 GETQUOTA \"!partition/sda4\"\n\n      S: * QUOTA \"!partition/sda4\" (STORAGE 104 10923847)\n\n      S: G0001 OK Getquota complete\n\n4.1.2.  GETQUOTAROOT\n\n   Arguments:  mailbox name\n\n   Responses:  REQUIRED untagged responses: QUOTAROOT, QUOTA\n\n   Result:     OK - getquotaroot completed\n\n               NO - getquotaroot error: permission denied\n\n               BAD - command unknown or arguments invalid\n\n   The GETQUOTAROOT command takes a mailbox name and returns the list of\n   quota roots for the mailbox in an untagged QUOTAROOT response.  For\n   each listed quota root, it also returns the quota root's resource\n   usage and limits in an untagged QUOTA response.\n\n   Note that the mailbox name parameter doesn't have to reference an\n   existing mailbox.  This can be handy in order to determine which\n   quota root would apply to a mailbox when it gets created.\n\n   Example:\n\n      S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE QUOTA=RES-MESSAGE\n      [...]\n\n      [...]\n\n      C: G0002 GETQUOTAROOT INBOX\n\n      S: * QUOTAROOT INBOX \"#user/alice\" \"!partition/sda4\"\n\n      S: * QUOTA \"#user/alice\" (MESSAGE 42 1000)\n\n      S: * QUOTA \"!partition/sda4\" (STORAGE 104 10923847)\n\n      S: G0002 OK Getquotaroot complete\n\n4.1.3.  SETQUOTA\n\n   Arguments:  quota root list of resource limits\n\n   Responses:  untagged responses: QUOTA\n\n   Result:     OK - setquota completed\n\n               NO - setquota error: can't set that data\n\n               BAD - command unknown or arguments invalid\n\n   Note that unlike other command/responses/response codes defined in\n   this document, support for the SETQUOTA command requires the server\n   to advertise the \"QUOTASET\" capability.\n\n   The SETQUOTA command takes the name of a mailbox quota root and a\n   list of resource limits.  The resource limits for the named quota\n   root are changed to the specified limits.  Any previous resource\n   limits for the named quota root are discarded, even resource limits\n   not explicitly listed in the SETQUOTA command.  (For example, if the\n   quota root had both STORAGE and MESSAGE limits assigned to the quota\n   root before the SETQUOTA is called and the SETQUOTA only includes the\n   STORAGE limit, then the MESSAGE limit is removed from the quota\n   root.)\n\n   If the named quota root did not previously exist, an implementation\n   may optionally create it and change the quota roots for any number of\n   existing mailboxes in an implementation-defined manner.\n\n   If the implementation chooses to change the quota roots for some\n   existing mailboxes, such changes SHOULD be announced with untagged\n   QUOTA responses.\n\n   Example:\n\n      S: * CAPABILITY [...] QUOTA QUOTASET QUOTA=RES-STORAGE QUOTA=RES-\n      MESSAGE [...]\n\n      [...]\n\n      C: S0000 GETQUOTA \"#user/alice\"\n\n      S: * QUOTA \"#user/alice\" (STORAGE 54 111 MESSAGE 42 1000)\n\n      S: S0000 OK Getquota completed\n\n      C: S0001 SETQUOTA \"#user/alice\" (STORAGE 510)\n\n      S: * QUOTA \"#user/alice\" (STORAGE 58 512)\n\n      // The server has rounded the STORAGE quota limit requested to\n      the nearest 512 blocks of 1024 octets; otherwise, another client\n      has performed a near-simultaneous SETQUOTA using a limit of 512.\n\n      S: S0001 OK Rounded quota\n\n      C: S0002 SETQUOTA \"!partition/sda4\" (STORAGE 99999999)\n\n      S: * QUOTA \"!partition/sda4\" (STORAGE 104 10923847)\n\n      // The server has not changed the quota, since this is a\n      filesystem limit, and it cannot be changed. The QUOTA\n      response here is entirely optional.\n\n      S: S0002 NO Cannot change system limit\n\n4.1.4.  New STATUS attributes\n\n   The DELETED and DELETED-STORAGE status data items allow for\n   estimation of the amount of resources that could be freed by an\n   EXPUNGE on a mailbox.\n\n   The DELETED status data item requests the server to return the number\n   of messages with the \\Deleted flag set.  The DELETED status data item\n   is only required to be implemented when the server advertises the\n   \"QUOTA=RES-MESSAGE\" capability.\n\n   The DELETED-STORAGE status data item requests the server to return\n   the amount of storage space that can be reclaimed by performing\n   EXPUNGE on the mailbox.  The server SHOULD return the exact value;\n   however, it is recognized that the server may have to do a non-\n   trivial amount of work to calculate it.  If the calculation of the\n   exact value would take a long time, the server MAY instead return the\n   sum of the RFC822.SIZE of the messages with the \\Deleted flag set.\n   The DELETED-STORAGE status data item is only required to be\n   implemented when the server advertises the \"QUOTA=RES-STORAGE\"\n   capability.\n\n   Example:\n\n      S: * CAPABILITY [...] QUOTA QUOTA=RES-STORAGE QUOTA=RES-\n      MESSAGE [...]\n\n      [...]\n\n      C: S0003 STATUS INBOX (MESSAGES DELETED DELETED-STORAGE)\n\n      S: * STATUS INBOX (MESSAGES 12 DELETED 4 DELETED-STORAGE 8)\n\n      // 12 messages, 4 of which would be deleted when an EXPUNGE\n      happens.\n\n      S: S0003 OK Status complete.\n\n4.2.  Responses\n\n   The following responses may be sent by the server.\n\n4.2.1.  QUOTA\n\n      Data: quota root name\n\n      list of resource names, usages, and limits\n\n   This response occurs as a result of a GETQUOTA, GETQUOTAROOT, or\n   SETQUOTA command.  The first string is the name of the quota root for\n   which this quota applies.\n\n   The name is followed by an S-expression format list of the resource\n   usage and limits of the quota root.  The list contains zero or more\n   triplets.  Each triplet contains a resource name, the current usage\n   of the resource, and the resource limit.\n\n   Resources not named in the list are not limited in the quota root.\n   Thus, an empty list means there are no administrative resource limits\n   in the quota root.\n\n   Example:\n\n      S: * QUOTA \"\" (STORAGE 10 512)\n\n4.2.2.  QUOTAROOT\n\n      Data: mailbox name\n\n      zero or more quota root names\n\n   This response occurs as a result of a GETQUOTAROOT command.  The\n   first string is the mailbox and the remaining strings are the names\n   of the quota roots for the mailbox.\n\n   Examples:\n\n      S: * QUOTAROOT INBOX \"\"\n\n      // The INBOX mailbox is covered by a single quota root with\n      name \"\".\n\n      S: * QUOTAROOT comp.mail.mime\n\n      // The comp.mail.mime mailbox has no quota root associated\n      with it, but one can be created.\n\n4.3.  Response Codes\n\n4.3.1.  OVERQUOTA\n\n   The OVERQUOTA response code SHOULD be returned in the tagged NO\n   response to an APPEND/COPY/MOVE when the addition of the message(s)\n   puts the target mailbox over any one of its quota limits.\n\n   Example 1:\n\n      C: A003 APPEND saved-messages (\\Seen) {326}\n      S: + Ready for literal data\n      C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n      C: From: Fred Foobar <foobar@Blurdybloop.example>\n      C: Subject: afternoon meeting\n      C: To: mooch@owatagu.siam.edu.example\n      C: Message-Id: <B27397-0100000@Blurdybloop.example>\n      C: MIME-Version: 1.0\n      C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n      C:\n      C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n      C:\n      S: A003 NO [OVERQUOTA] APPEND Failed\n\n   The OVERQUOTA response code MAY also be returned in an untagged NO\n   response in the authenticated or the selected state when a mailbox\n   exceeds soft quota.  For example, such OVERQUOTA response codes might\n   be sent as a result of an external event (e.g., Local Mail Transfer\n   Protocol (LMTP) [RFC2033] delivery or COPY/MOVE/APPEND in another\n   IMAP connection) that causes the currently selected mailbox to exceed\n   soft quota.  Note that such an OVERQUOTA response code might be\n   ambiguous because it might relate to the target mailbox (as specified\n   in COPY/MOVE/APPEND) or to the currently selected mailbox.  (The\n   EXTRA WG chose not to address this deficiency due to syntactic\n   limitations of IMAP response codes and because such events are likely\n   to be rare.)  This form of the OVERQUOTA response codes MUST NOT be\n   returned if there is no mailbox selected and no command in progress\n   that adds a message to a mailbox (e.g., APPEND).\n\n   Example 2:\n\n      C: A003 APPEND saved-messages (\\Seen) {326}\n      S: + Ready for literal data\n      C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)\n      C: From: Fred Foobar <foobar@Blurdybloop.example>\n      C: Subject: afternoon meeting\n      C: To: mooch@owatagu.siam.edu.example\n      C: Message-Id: <B27397-0100000@Blurdybloop.example>\n      C: MIME-Version: 1.0\n      C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII\n      C:\n      C: Hello Joe, do you think we can meet at 3:30 tomorrow?\n      C:\n      S: * NO [OVERQUOTA] Soft quota has been exceeded\n      S: A003 OK [APPENDUID 38505 3955] APPEND completed\n\n   Example 3:\n\n      C: A004 COPY 2:4 MEETING\n      S: * NO [OVERQUOTA] Soft quota has been exceeded\n      S: A004 OK [COPYUID 38505 304,319:320 3956:3958] COPY\n          command completed\n\n5.  Resource Type Definitions\n\n   The following resource types are defined in this memo.  A server\n   supporting a resource type MUST advertise this as a CAPABILITY with a\n   name consisting of the resource name prefixed by \"QUOTA=RES-\".  A\n   server MAY support multiple resource types and MUST advertise all\n   resource types it supports.\n\n5.1.  STORAGE\n\n   \"STORAGE\" is the physical space estimate, in units of 1024 octets, of\n   the mailboxes governed by the quota root.  This MAY not be the same\n   as the sum of the RFC822.SIZE of the messages.  Some implementations\n   MAY include metadata sizes for the messages and mailboxes, and other\n   implementations MAY store messages in such a way that the physical\n   space used is smaller, for example, due to use of compression.\n   Additional messages might not increase the usage.  Clients MUST NOT\n   use the usage figure for anything other than informational purposes;\n   for example, they MUST NOT refuse to APPEND a message if the limit\n   less the usage is smaller than the RFC822.SIZE divided by 1024 octets\n   of the message, but it MAY warn about such condition.\n\n   The usage figure may change as a result of performing actions not\n   associated with adding new messages to the mailbox, such as SEARCH,\n   since this may increase the amount of metadata included in the\n   calculations.\n\n   When the server supports this resource type, it MUST also support the\n   DELETED-STORAGE status data item.\n\n   Support for this resource MUST be indicated by the server by\n   advertising the \"QUOTA=RES-STORAGE\" capability.\n\n   A resource named the same was also given as an example in [RFC2087].\n   This document provides a more precise definition.\n\n5.2.  MESSAGE\n\n   \"MESSAGE\" is the number of messages stored within the mailboxes\n   governed by the quota root.  This MUST be an exact number; however,\n   clients MUST NOT assume that a change in the usage indicates a change\n   in the number of messages available, since the quota root may include\n   mailboxes the client has no access to.\n\n   When the server supports this resource type, it MUST also support the\n   DELETED status data item.\n\n   Support for this resource MUST be indicated by the server by\n   advertising the \"QUOTA=RES-MESSAGE\" capability.\n\n   A resource named the same was also given as an example in [RFC2087].\n   This document provides a more precise definition.\n\n5.3.  MAILBOX\n\n   \"MAILBOX\" is the number of mailboxes governed by the quota root.\n   This MUST be an exact number; however, clients MUST NOT assume that a\n   change in the usage indicates a change in the number of mailboxes,\n   since the quota root may include mailboxes the client has no access\n   to.\n\n   Support for this resource MUST be indicated by the server by\n   advertising the \"QUOTA=RES-MAILBOX\" capability.\n\n5.4.  ANNOTATION-STORAGE\n\n   \"ANNOTATION-STORAGE\" is the maximum size of all annotations\n   [RFC5257], in units of 1024 octets, associated with all messages in\n   the mailboxes governed by the quota root.\n\n   Support for this resource MUST be indicated by the server by\n   advertising the \"QUOTA=RES-ANNOTATION-STORAGE\" capability.\n\n6.  Interaction with IMAP ACL Extension (RFC 4314)\n\n   This section lists [RFC4314] rights required to execute quota-related\n   commands when both RFC 4314 and this document are implemented.\n\n   +===================+=+=+===+===+===+===+===+===+===+===+=====+=====+\n   | Operations\\Rights |l|r| s | w | i | c | x | t | e | a | Any | Non |\n   +===================+=+=+===+===+===+===+===+===+===+===+=====+=====+\n   | GETQUOTA          | | |   |   |   |   |   |   |   |   |     |  +  |\n   +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+\n   | GETQUOTAROOT      | |*|   |   |   |   |   |   |   |   |     |  *  |\n   +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+\n   | SETQUOTA          | | |   |   |   |   |   |   |   | + |     |     |\n   +-------------------+-+-+---+---+---+---+---+---+---+---+-----+-----+\n\n                                  Table 1\n\n   See Section 4 of [RFC4314] for conventions used in this table.\n\n   Legend:\n\n   \"+\":    The right is required\n\n   \"*\":    Only one of the rights marked with * is required\n\n   \"Any\":  At least one of the \"l\", \"r\", \"i\", \"k\", \"x\", or \"a\" rights is\n           required\n\n   \"Non\":  No rights required to perform the command\n\n   Note that which permissions are needed in order to perform a\n   GETQUOTAROOT command depends on the quota resource type being\n   requested.  For example, a quota on the number of messages (MESSAGE\n   resource type) or total size of messages (STORAGE resource type)\n   requires \"r\" right on the mailbox in question, since the quota\n   involved would reveal information about the number (or total size) of\n   messages in the mailbox.  By comparison, the MAILBOX resource type\n   doesn't require any right.\n\n7.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   IMAP4 [RFC3501] [RFC9051].\n\n   Except as noted otherwise, all alphabetic characters are case\n   insensitive.  The use of uppercase or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   getquota =         \"GETQUOTA\" SP quota-root-name\n\n   getquotaroot =     \"GETQUOTAROOT\" SP mailbox\n\n   quota-list =       \"(\" quota-resource *(SP quota-resource) \")\"\n\n   quota-resource =   resource-name SP resource-usage SP resource-limit\n\n   quota-response =   \"QUOTA\" SP quota-root-name SP quota-list\n\n   quotaroot-response =  \"QUOTAROOT\" SP mailbox *(SP quota-root-name)\n\n   setquota =         \"SETQUOTA\" SP quota-root-name SP setquota-list\n\n   setquota-list =    \"(\" [setquota-resource *(SP setquota-resource)]\n                      \")\"\n\n   setquota-resource =  resource-name SP resource-limit\n\n   quota-root-name =  astring\n\n   resource-limit =   number64\n\n   resource-name =    \"STORAGE\" / \"MESSAGE\" / \"MAILBOX\" /\n                      \"ANNOTATION-STORAGE\" / resource-name-ext\n\n   resource-name-ext =  atom\n                      ;; Future resource registrations\n\n   resource-usage =  number64\n                      ;; must be less than corresponding resource-limit\n\n   capability-quota = capa-quota-res / \"QUOTASET\"\n                      ;; One or more capa-quota-res must be returned.\n                      ;; Also \"QUOTASET\" can optionally be returned.\n\n   capa-quota-res =   \"QUOTA=RES-\" resource-name\n\n   status-att =/      \"DELETED\" / \"DELETED-STORAGE\"\n                      ;; DELETED status data item MUST be supported\n                      ;; when the \"QUOTA=RES-MESSAGE\" capability is\n                      ;; advertised.\n                      ;; DELETED-STORAGE status data item MUST be\n                      ;; supported when the \"QUOTA=RES-STORAGE\"\n                      ;; capability is advertised.\n\n   status-att-val =/  status-att-deleted /\n                      status-att-deleted-storage\n\n   status-att-deleted =  \"DELETED\" SP number\n                      ;; DELETED status data item MUST be supported\n                      ;; when the \"QUOTA=RES-MESSAGE\" capability is\n                      ;; advertised.\n\n   status-att-deleted-storage =  \"DELETED-STORAGE\" SP number64\n                      ;; DELETED-STORAGE status data item MUST be\n                      ;; supported when the \"QUOTA=RES-STORAGE\"\n                      ;; capability is advertised.\n\n   resp-text-code =/  \"OVERQUOTA\"\n\n   number64 =         <Defined in RFC 9051>\n\n8.  Security Considerations\n\n   Implementors should be careful to make sure the implementation of\n   these commands does not violate the site's security policy.  The\n   resource usage of other users is likely to be considered confidential\n   information and should not be divulged to unauthorized persons.  In\n   particular, no quota information should be disclosed to anonymous\n   users.\n\n   As for any resource shared across users (for example, a quota root\n   attached to a set of shared mailboxes), a user that can consume or\n   render unusable the resource can affect the resources available to\n   the other users; this might occur, for example, by a user with\n   permission to execute the SETQUOTA setting, which sets an\n   artificially small value.\n\n   Note that computing resource usage might incur a heavy load on the\n   server.  Server implementers should consider implementation\n   techniques that lower the load on servers such as caching of resource\n   usage information or usage of less precise computations when under\n   heavy load.\n\n9.  IANA Considerations\n\n9.1.  Changes/Additions to the IMAP Capabilities Registry\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   an IESG-approved Informational or Experimental RFC.  The \"IMAP\n   Capabilities\" registry is currently located at\n   <https://www.iana.org/assignments/imap4-capabilities>.\n\n   IANA has updated the reference for the QUOTA extension to point to\n   this document.  IANA has also added the \"QUOTA=\" prefix and the\n   \"QUOTASET\" capability to the \"IMAP Capabilities\" registry with this\n   document as the reference.\n\n   IANA has added the following notes to the \"IMAP Capabilities\"\n   registry:\n\n   The prefix \"QUOTA=RES-\" is reserved per RFC 9208, Section 9.1.  See\n   Section 9.2 of that document for values that follow this prefix.\n\n   All other capabilities starting with the \"QUOTA=\" prefix are reserved\n   for future IETF Stream extensions to RFC 9208.\n\n9.2.  IMAP Quota Resource Type Registry\n\n   IANA has created a new registry for IMAP quota resource types.  The\n   registration policy for the \"IMAP Quota Resource Types\" registry is\n   \"Specification Required\" [RFC8126].\n\n   When registering a new quota resource type, the registrant needs to\n   provide the following:\n\n   *  the name of the quota resource type\n\n   *  a short description\n\n   *  extra required IMAP commands/responses (if any)\n\n   *  extra optional IMAP commands/responses (if any)\n\n   *  name and email address of author\n\n   *  name and email address of change controller\n\n   *  a reference to a specification that describes the quota resource\n      type in more detail\n\n   Designated experts should check that the provided references are\n   correct, the references describe the quota resource type being\n   registered in sufficient detail to be implementable, the syntax of\n   any optional commands/responses is correct (e.g., ABNF validates),\n   and the syntax/description complies with rules and limitations\n   imposed by IMAP [RFC3501] [RFC9051].  Designated experts should avoid\n   registering multiple identical quota resource types under different\n   names and should provide advice to requestors about other possible\n   quota resource types to use.\n\n   The initial contents of the \"IMAP Quota Resource Types\" registry are\n   as follows:\n\n   +===================+=======================================+\n   | field name        | field value                           |\n   +===================+=======================================+\n   | Name of the quota | STORAGE                               |\n   | resource type:    |                                       |\n   +-------------------+---------------------------------------+\n   | Description:      | The physical space estimate, in units |\n   |                   | of 1024 octets, of the mailboxes      |\n   |                   | governed by the quota root.           |\n   +-------------------+---------------------------------------+\n   | Extra required    | DELETED-STORAGE STATUS request data   |\n   | IMAP commands/    | item and response data item           |\n   | responses:        |                                       |\n   +-------------------+---------------------------------------+\n   | Extra optional    | N/A                                   |\n   | IMAP commands/    |                                       |\n   | responses:        |                                       |\n   +-------------------+---------------------------------------+\n   | Author:           | Alexey Melnikov                       |\n   |                   | <alexey.melnikov@isode.com>           |\n   +-------------------+---------------------------------------+\n   | Change            | IESG <iesg@ietf.org>                  |\n   | Controller:       |                                       |\n   +-------------------+---------------------------------------+\n   | Reference:        | Section 5.1 of RFC 9208               |\n   +-------------------+---------------------------------------+\n\n                          Table 2: STORAGE\n\n   +=====================+==========================================+\n   | field name          | field value                              |\n   +=====================+==========================================+\n   | Name of the quota   | MESSAGE                                  |\n   | resource type:      |                                          |\n   +---------------------+------------------------------------------+\n   | Description:        | The number of messages stored within the |\n   |                     | mailboxes governed by the quota root.    |\n   +---------------------+------------------------------------------+\n   | Extra required IMAP | DELETED STATUS request data item and     |\n   | commands/responses: | response data item                       |\n   +---------------------+------------------------------------------+\n   | Extra optional IMAP | N/A                                      |\n   | commands/responses: |                                          |\n   +---------------------+------------------------------------------+\n   | Author:             | Alexey Melnikov                          |\n   |                     | <alexey.melnikov@isode.com>              |\n   +---------------------+------------------------------------------+\n   | Change Controller:  | IESG <iesg@ietf.org>                     |\n   +---------------------+------------------------------------------+\n   | Reference:          | Section 5.2 of RFC 9208                  |\n   +---------------------+------------------------------------------+\n\n                            Table 3: MESSAGE\n\n   +==================================+=============================+\n   | field name                       | field value                 |\n   +==================================+=============================+\n   | Name of the quota resource type: | MAILBOX                     |\n   +----------------------------------+-----------------------------+\n   | Description:                     | The number of mailboxes     |\n   |                                  | governed by the quota root. |\n   +----------------------------------+-----------------------------+\n   | Extra required IMAP commands/    | N/A                         |\n   | responses:                       |                             |\n   +----------------------------------+-----------------------------+\n   | Extra optional IMAP commands/    | N/A                         |\n   | responses:                       |                             |\n   +----------------------------------+-----------------------------+\n   | Author:                          | Alexey Melnikov             |\n   |                                  | <alexey.melnikov@isode.com> |\n   +----------------------------------+-----------------------------+\n   | Change Controller:               | IESG <iesg@ietf.org>        |\n   +----------------------------------+-----------------------------+\n   | Reference:                       | Section 5.3 of RFC 9208     |\n   +----------------------------------+-----------------------------+\n\n                            Table 4: MAILBOX\n\n   +================+=======================================+\n   | field name     | field value                           |\n   +================+=======================================+\n   | Name of the    | ANNOTATION-STORAGE                    |\n   | quota resource |                                       |\n   | type:          |                                       |\n   +----------------+---------------------------------------+\n   | Description:   | The maximum size of all annotations   |\n   |                | [RFC5257], in units of 1024 octets,   |\n   |                | associated with all messages in the   |\n   |                | mailboxes governed by the quota root. |\n   +----------------+---------------------------------------+\n   | Extra required | N/A                                   |\n   | IMAP commands/ |                                       |\n   | responses:     |                                       |\n   +----------------+---------------------------------------+\n   | Extra optional | N/A                                   |\n   | IMAP commands/ |                                       |\n   | responses:     |                                       |\n   +----------------+---------------------------------------+\n   | Author:        | Alexey Melnikov                       |\n   |                | <alexey.melnikov@isode.com>           |\n   +----------------+---------------------------------------+\n   | Change         | IESG <iesg@ietf.org>                  |\n   | Controller:    |                                       |\n   +----------------+---------------------------------------+\n   | Reference:     | Section 5.4 of RFC 9208               |\n   +----------------+---------------------------------------+\n\n                  Table 5: ANNOTATION-STORAGE\n\n10.  Changes Since RFC 2087\n\n   This document is a revision of [RFC2087], and it aims to clarify the\n   meaning of different terms that were used in that RFC.  It also\n   provides more examples, gives guidance on allowed server behavior,\n   defines an IANA registry for quota resource types, and provides\n   initial registrations for 4 of them.\n\n   When compared with [RFC2087], this document defines two more commonly\n   used resource types, adds an optional OVERQUOTA response code, and\n   defines two extra STATUS data items (\"DELETED\" and \"DELETED-\n   STORAGE\").  The DELETED STATUS data item must be implemented if the\n   \"QUOTA=RES-MESSAGE\" capability is advertised.  The DELETED-STORAGE\n   STATUS data item must be implemented if the \"QUOTA=RES-STORAGE\"\n   capability is advertised.  For extensibility, quota usage and quota\n   limits are now 63-bit unsigned integers.\n\n11.  References\n\n11.1.  Normative References\n\n   [ABNF]     Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4314]  Melnikov, A., \"IMAP4 Access Control List (ACL) Extension\",\n              RFC 4314, DOI 10.17487/RFC4314, December 2005,\n              <https://www.rfc-editor.org/info/rfc4314>.\n\n   [RFC5257]  Daboo, C. and R. Gellens, \"Internet Message Access\n              Protocol - ANNOTATE Extension\", RFC 5257,\n              DOI 10.17487/RFC5257, June 2008,\n              <https://www.rfc-editor.org/info/rfc5257>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [RFC9051]  Melnikov, A., Ed. and B. Leiba, Ed., \"Internet Message\n              Access Protocol (IMAP) - Version 4rev2\", RFC 9051,\n              DOI 10.17487/RFC9051, August 2021,\n              <https://www.rfc-editor.org/info/rfc9051>.\n\n11.2.  Informative References\n\n   [RFC2033]  Myers, J., \"Local Mail Transfer Protocol\", RFC 2033,\n              DOI 10.17487/RFC2033, October 1996,\n              <https://www.rfc-editor.org/info/rfc2033>.\n\n   [RFC2087]  Myers, J., \"IMAP4 QUOTA extension\", RFC 2087,\n              DOI 10.17487/RFC2087, January 1997,\n              <https://www.rfc-editor.org/info/rfc2087>.\n\n   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, \"Guidelines for\n              Writing an IANA Considerations Section in RFCs\", BCP 26,\n              RFC 8126, DOI 10.17487/RFC8126, June 2017,\n              <https://www.rfc-editor.org/info/rfc8126>.\n\nAcknowledgments\n\n   The editor of this document would like to thank the following people\n   who provided useful comments or participated in discussions that lead\n   to this update of [RFC2087]: John Myers, Cyrus Daboo, Lyndon\n   Nerenberg, Benjamin Kaduk, Roman Danyliw, and Éric Vyncke.\n\n   This document is a revision of [RFC2087], and it borrows a lot of\n   text from that RFC.  Thus, the work of John Myers, the author of\n   [RFC2087], is appreciated.\n\nContributors\n\n   Dave Cridland wrote a lot of text in an earlier draft version that\n   became the basis for this document.\n\nAuthor's Address\n\n   Alexey Melnikov\n   Isode Limited\n   Email: alexey.melnikov@isode.com\n   URI:   https://www.isode.com\n"
  },
  {
    "path": "rfc/rfc9394.txt",
    "content": "﻿\n\n\n\nInternet Engineering Task Force (IETF)                       A. Melnikov\nRequest for Comments: 9394                                         Isode\nUpdates: 4731, 5267                                       A. P. Achuthan\nCategory: Standards Track                                 V. Nagulakonda\nISSN: 2070-1721                                                   Yahoo!\n                                                                L. Alves\n                                                               June 2023\n\n\n           IMAP PARTIAL Extension for Paged SEARCH and FETCH\n\nAbstract\n\n   The PARTIAL extension of the Internet Message Access Protocol (see\n   RFCs 3501 and 9051) allows clients to limit the number of SEARCH\n   results returned, as well as to perform incremental (paged) searches.\n   This also helps servers to optimize resource usage when performing\n   searches.\n\n   This document extends the PARTIAL SEARCH return option originally\n   specified in RFC 5267.  It also clarifies some interactions between\n   RFC 5267 and RFCs 4731 and 9051.\n\n   This document updates RFCs 4731 and 5267.\n\nStatus of This Memo\n\n   This is an Internet Standards Track document.\n\n   This document is a product of the Internet Engineering Task Force\n   (IETF).  It represents the consensus of the IETF community.  It has\n   received public review and has been approved for publication by the\n   Internet Engineering Steering Group (IESG).  Further information on\n   Internet Standards is available in Section 2 of RFC 7841.\n\n   Information about the current status of this document, any errata,\n   and how to provide feedback on it may be obtained at\n   https://www.rfc-editor.org/info/rfc9394.\n\nCopyright Notice\n\n   Copyright (c) 2023 IETF Trust and the persons identified as the\n   document authors.  All rights reserved.\n\n   This document is subject to BCP 78 and the IETF Trust's Legal\n   Provisions Relating to IETF Documents\n   (https://trustee.ietf.org/license-info) in effect on the date of\n   publication of this document.  Please review these documents\n   carefully, as they describe your rights and restrictions with respect\n   to this document.  Code Components extracted from this document must\n   include Revised BSD License text as described in Section 4.e of the\n   Trust Legal Provisions and are provided without warranty as described\n   in the Revised BSD License.\n\n   This document may contain material from IETF Documents or IETF\n   Contributions published or made publicly available before November\n   10, 2008.  The person(s) controlling the copyright in some of this\n   material may not have granted the IETF Trust the right to allow\n   modifications of such material outside the IETF Standards Process.\n   Without obtaining an adequate license from the person(s) controlling\n   the copyright in such materials, this document may not be modified\n   outside the IETF Standards Process, and derivative works of it may\n   not be created outside the IETF Standards Process, except to format\n   it for publication as an RFC or to translate it into languages other\n   than English.\n\nTable of Contents\n\n   1.  Introduction and Overview\n   2.  Document Conventions\n   3.  The PARTIAL Extension\n     3.1.  Incremental SEARCH and Partial Results\n     3.2.  Interaction between PARTIAL, MIN, MAX, and SAVE SEARCH\n           Return Options\n     3.3.  Extension to UID FETCH\n     3.4.  Use of \"PARTIAL\" and \"CONDSTORE\" IMAP Extensions Together\n   4.  Formal Syntax\n   5.  Security Considerations\n   6.  IANA Considerations\n     6.1.  Changes/Additions to the IMAP Capabilities Registry\n   7.  References\n     7.1.  Normative References\n     7.2.  Informative References\n   Acknowledgments\n   Authors' Addresses\n\n1.  Introduction and Overview\n\n   This document defines an extension to the Internet Message Access\n   Protocol [RFC3501] [RFC9051] for performing incremental searches and\n   fetches.  This extension is compatible with both IMAP4rev1 [RFC3501]\n   and IMAP4rev2 [RFC9051].  This extension uses IMAP extensibility\n   rules defined in [RFC4466].\n\n   The PARTIAL extension of the Internet Message Access Protocol allows\n   clients to limit the number of SEARCH results returned, as well as to\n   perform incremental (paged) searches.  This also helps servers to\n   optimize resource usage when performing searches.\n\n   This document extends the PARTIAL SEARCH return option originally\n   specified in RFC 5267.  It also clarifies some interactions between\n   RFC 5267 and RFCs 4731 and 9051.\n\n2.  Document Conventions\n\n   In protocol examples, this document uses a prefix of \"C: \" to denote\n   lines sent by the client to the server and \"S: \" for lines sent by\n   the server to the client.  Lines prefixed with \"// \" are comments\n   explaining the previous protocol line.  These prefixes and comments\n   are not part of the protocol.  Lines without any of these prefixes\n   are continuations of the previous line, and no line breaks are\n   present in the protocol unless specifically mentioned.\n\n   The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\",\n   \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and\n   \"OPTIONAL\" in this document are to be interpreted as described in\n   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all\n   capitals, as shown here.\n\n   Other capitalized words are IMAP key words [RFC3501] [RFC9051] or key\n   words from this document.\n\n3.  The PARTIAL Extension\n\n   An IMAP server advertises support for the PARTIAL extension by\n   including the \"PARTIAL\" capability in the CAPABILITY response /\n   response code.\n\n3.1.  Incremental SEARCH and Partial Results\n\n   The PARTIAL SEARCH return option causes the server to provide in an\n   ESEARCH response [RFC4731] [RFC9051] a subset of the results denoted\n   by the sequence range given as the mandatory argument.  The first\n   result (message with the lowest matching Unique Identifier (UID)) is\n   1; thus, the first 500 results would be obtained by a return option\n   of \"PARTIAL 1:500\" and the second 500 by \"PARTIAL 501:1000\".  This\n   intentionally mirrors message sequence numbers.\n\n   It is also possible to direct the server to start the SEARCH from the\n   latest matching (with the highest UID) message.  This can be done by\n   prepending \"-\" to the index.  For example, -1 is the last message, -2\n   is next to the last, and so on.  Using this syntax helps server\n   implementations to optimize their SEARCHes.\n\n   A single command MUST NOT contain more than one PARTIAL or ALL search\n   return option; that is, either one PARTIAL, one ALL, or neither\n   PARTIAL nor ALL is allowed.\n\n   For SEARCH results, the entire list of results MUST be ordered in\n   mailbox order -- that is, in UID or message sequence number order.\n\n   In cases where a PARTIAL SEARCH return option references results that\n   do not exist by using a range that starts or ends higher (or lower)\n   than the current number of results, the server returns the results\n   that are in the set.  This yields a PARTIAL return data item that\n   has, as payload, the original range and a potentially missing set of\n   results that may be shorter than the extent of the range.  If the\n   whole range references results that do not exist, a special value\n   \"NIL\" is returned by the server instead of the sequence set.\n\n   Clients need not request PARTIAL results in any particular order.\n   Because mailboxes may change, clients might wish to use PARTIAL in\n   combination with UPDATE (see [RFC5267]) if the server also advertises\n   the \"CONTEXT=SEARCH\" capability, especially if the intent is to walk\n   a large set of results; however, these return options do not interact\n   -- the UPDATE will provide notifications for all matching results.\n\n     // Let's assume that the A01 SEARCH without PARTIAL would return\n     // 23764 results.\n     C: A01 UID SEARCH RETURN (PARTIAL -1:-100) UNDELETED\n         UNKEYWORD $Junk\n     S: * ESEARCH (TAG \"A01\") UID PARTIAL (-1:-100 ...)\n     // 100 most recent results in set syntax elided.\n     S: A01 OK Completed.\n\n     // Let's assume that the A02 SEARCH without PARTIAL would return\n     // 23764 results.\n     C: A02 UID SEARCH RETURN (PARTIAL 23500:24000) UNDELETED\n         UNKEYWORD $Junk\n     C: A03 UID SEARCH RETURN (PARTIAL 1:500) UNDELETED\n         UNKEYWORD $Junk\n     C: A04 UID SEARCH RETURN (PARTIAL 24000:24500) UNDELETED\n         UNKEYWORD $Junk\n     S: * ESEARCH (TAG \"A02\") UID PARTIAL (23500:24000 ...)\n     // 264 results in set syntax elided;\n     // this spans the end of the results.\n     S: A02 OK Completed.\n     S: * ESEARCH (TAG \"A03\") UID PARTIAL (1:500 ...)\n     // 500 results in set syntax elided.\n     S: A03 OK Completed.\n     S: * ESEARCH (TAG \"A04\") UID PARTIAL (24000:24500 NIL)\n     // No results are present; this is beyond the end of the results.\n     S: A04 OK Completed.\n\n3.2.  Interaction between PARTIAL, MIN, MAX, and SAVE SEARCH Return\n      Options\n\n   This section only applies if the server advertises the \"PARTIAL\" IMAP\n   capability or \"CONTEXT=SEARCH\" [RFC5267], together with \"ESEARCH\"\n   [RFC4731] and/or IMAP4rev2 [RFC9051].\n\n   The SAVE result option doesn't change whether the server would return\n   items corresponding to PARTIAL SEARCH result options.\n\n   As specified in Section 3.1, it is an error to specify both the\n   PARTIAL and ALL result options in the same SEARCH command.\n\n   When the SAVE result option is combined with the PARTIAL result\n   option and none of the MIN/MAX/COUNT result options are present, the\n   corresponding PARTIAL is returned, and the \"$\" marker would contain\n   references to all messages returned by the PARTIAL result option.\n\n   When the SAVE and PARTIAL result options are combined with the MIN or\n   MAX result option and the COUNT result option is absent, the\n   corresponding PARTIAL result and MIN/MAX are returned (if the SEARCH\n   result is not empty), and the \"$\" marker would contain references to\n   all messages returned by the PARTIAL result option together with the\n   corresponding MIN/MAX message.\n\n   If the SAVE and PARTIAL result options are combined with both the MIN\n   and MAX result options and the COUNT result option is absent, the\n   PARTIAL, MIN, and MAX result options are returned (if the SEARCH\n   result is not empty), and the \"$\" marker would contain references to\n   all messages returned by the PARTIAL result option together with the\n   MIN and MAX messages.\n\n   If the SAVE and PARTIAL result options are combined with the COUNT\n   result option, the PARTIAL and COUNT result options are returned, and\n   the \"$\" marker would always contain references to all messages found\n   by the SEARCH or UID SEARCH command.\n\n   Table 1 summarizes additional requirements for ESEARCH server\n   implementations described in this section.\n\n   Note regarding Table 1: \"[m]\" means optional \"MIN\" and/or \"MAX\".\n\n          +===============================+=====================+\n          | Combination of Result Options |   \"$\" Marker Value  |\n          +===============================+=====================+\n          |          SAVE PARTIAL         |       PARTIAL       |\n          +-------------------------------+---------------------+\n          |        SAVE PARTIAL MIN       |    PARTIAL & MIN    |\n          +-------------------------------+---------------------+\n          |        SAVE PARTIAL MAX       |    PARTIAL & MAX    |\n          +-------------------------------+---------------------+\n          |      SAVE PARTIAL MIN MAX     | PARTIAL & MIN & MAX |\n          +-------------------------------+---------------------+\n          |     SAVE PARTIAL COUNT [m]    |  all found messages |\n          +-------------------------------+---------------------+\n\n                                  Table 1\n\n3.3.  Extension to UID FETCH\n\n   The PARTIAL extension also extends the UID FETCH command with a\n   PARTIAL FETCH modifier.  The PARTIAL FETCH modifier has the same\n   syntax as the PARTIAL SEARCH result option.  The presence of the\n   PARTIAL FETCH modifier instructs the server to only return FETCH\n   results for messages in the specified range.  It is useful when the\n   sequence-set (first) parameter in the UID FETCH command includes an\n   unknown number of messages.\n\n     // Returning information for the last 3 messages in the UID range\n     C: 10 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL -1:-3)\n     S: * 12888 FETCH (FLAGS (\\Seen) UID 25996)\n     S: * 12889 FETCH (FLAGS (\\Flagged \\Answered) UID 25997)\n     S: * 12890 FETCH (FLAGS () UID 26600)\n     S: 10 OK FETCH completed\n\n     // Returning information for the first 5 messages in the UID range\n     C: 11 UID FETCH 25900:26600 (UID FLAGS) (PARTIAL 1:5)\n     S: * 12591 FETCH (FLAGS (\\Seen) UID 25900)\n     S: * 12592 FETCH (FLAGS (\\Flagged) UID 25902)\n     S: * 12593 FETCH (FLAGS (\\Answered) UID 26310)\n     S: * 12594 FETCH (FLAGS () UID 26311)\n     S: * 12595 FETCH (FLAGS (\\Answered) UID 26498)\n     S: 11 OK FETCH completed\n\n3.4.  Use of \"PARTIAL\" and \"CONDSTORE\" IMAP Extensions Together\n\n   This section is informative.\n\n   The PARTIAL FETCH modifier can be combined with the CHANGEDSINCE\n   FETCH modifier [RFC7162].\n\n     // Returning information for the last 30 messages in the UID range\n     // that have any flags/keywords modified since MODSEQ 98305\n     C: 101 UID FETCH 25900:26600 (UID FLAGS\n        ) (PARTIAL -1:-30 CHANGEDSINCE 98305)\n     S: * 12888 FETCH (FLAGS (\\Flagged \\Answered\n        ) MODSEQ (98306) UID 25997)\n     S: * 12890 FETCH (FLAGS () MODSEQ (98312) UID 26600)\n     S: 101 OK FETCH completed\n\n   The above example causes the server to first select the last 30\n   messages and then only return flag changes for a subset of those\n   messages that have MODSEQ higher than 98305.\n\n   Note that the order of PARTIAL and CHANGEDSINCE FETCH modifiers in\n   the UID FETCH command is not important, i.e., the above example can\n   also use the \"UID FETCH 25900:26600 (UID FLAGS) (CHANGEDSINCE 98305\n   PARTIAL -1:-30)\" command and it would result in the same responses.\n\n4.  Formal Syntax\n\n   The following syntax specification uses the Augmented Backus-Naur\n   Form (ABNF) notation as specified in [ABNF].\n\n   Non-terminals referenced but not defined below are as defined by\n   IMAP4rev1 [RFC3501] or IMAP4rev2 [RFC9051].\n\n   Except as noted otherwise, all alphabetic characters are case\n   insensitive.  The use of uppercase or lowercase characters to define\n   token strings is for editorial clarity only.  Implementations MUST\n   accept these strings in a case-insensitive fashion.\n\n   SP                  = <Defined in RFC 5234>\n   MINUS               = \"-\"\n\n   capability          =/ \"PARTIAL\"\n                          ;; <capability> from [RFC3501].\n\n   modifier-partial    = \"PARTIAL\" SP partial-range\n\n   partial-range-first = nz-number \":\" nz-number\n       ;; Request to search from oldest (lowest UIDs) to\n       ;; more recent messages.\n       ;; A range 500:400 is the same as 400:500.\n       ;; This is similar to <seq-range> from [RFC3501]\n       ;; but cannot contain \"*\".\n\n   partial-range-last  = MINUS nz-number \":\" MINUS nz-number\n       ;; Request to search from newest (highest UIDs) to\n       ;; oldest messages.\n       ;; A range -500:-400 is the same as -400:-500.\n\n   partial-range       = partial-range-first / partial-range-last\n\n   search-return-opt   =/ modifier-partial\n       ;; All conform to <search-return-opt> from\n       ;; [RFC4466] and [RFC9051].\n\n   search-return-data  =/ ret-data-partial\n\n   ret-data-partial    = \"PARTIAL\"\n                         SP \"(\" partial-range SP partial-results \")\"\n       ;; <partial-range> is the requested range.\n\n   partial-results     = sequence-set / \"NIL\"\n       ;; <sequence-set> from [RFC3501].\n       ;; NIL indicates that no results correspond to\n       ;; the requested range.\n\n   tagged-ext-simple   =/ partial-range-last\n\n   fetch-modifier      =/ modifier-partial\n                          ;; <fetch-modifier> from [RFC4466].\n\n5.  Security Considerations\n\n   This document defines an additional IMAP4 capability.  As such, it\n   does not change the underlying security considerations of IMAP4rev1\n   [RFC3501] and IMAP4rev2 [RFC9051].  The authors and reviewers believe\n   that no new security issues are introduced with these additional\n   IMAP4 capabilities.\n\n   This document defines an optimization that can reduce both the amount\n   of work performed by the server and the amount of data returned to\n   the client.  Use of this extension is likely to cause the server and\n   the client to use less memory than when the extension is not used.\n   However, as this is going to be new code in both the client and the\n   server, rigorous testing of such code is required in order to avoid\n   introducing new implementation bugs.\n\n6.  IANA Considerations\n\n6.1.  Changes/Additions to the IMAP Capabilities Registry\n\n   IMAP4 capabilities are registered by publishing a Standards Track or\n   IESG-approved Informational or Experimental RFC.  The registry is\n   currently located at <https://www.iana.org/assignments/imap-\n   capabilities>.\n\n   IANA has added the PARTIAL extension to the \"IMAP Capabilities\"\n   registry with RFC 9394 as the reference.\n\n7.  References\n\n7.1.  Normative References\n\n   [ABNF]     Crocker, D., Ed. and P. Overell, \"Augmented BNF for Syntax\n              Specifications: ABNF\", STD 68, RFC 5234,\n              DOI 10.17487/RFC5234, January 2008,\n              <https://www.rfc-editor.org/info/rfc5234>.\n\n   [RFC2119]  Bradner, S., \"Key words for use in RFCs to Indicate\n              Requirement Levels\", BCP 14, RFC 2119,\n              DOI 10.17487/RFC2119, March 1997,\n              <https://www.rfc-editor.org/info/rfc2119>.\n\n   [RFC3501]  Crispin, M., \"INTERNET MESSAGE ACCESS PROTOCOL - VERSION\n              4rev1\", RFC 3501, DOI 10.17487/RFC3501, March 2003,\n              <https://www.rfc-editor.org/info/rfc3501>.\n\n   [RFC4466]  Melnikov, A. and C. Daboo, \"Collected Extensions to IMAP4\n              ABNF\", RFC 4466, DOI 10.17487/RFC4466, April 2006,\n              <https://www.rfc-editor.org/info/rfc4466>.\n\n   [RFC4731]  Melnikov, A. and D. Cridland, \"IMAP4 Extension to SEARCH\n              Command for Controlling What Kind of Information Is\n              Returned\", RFC 4731, DOI 10.17487/RFC4731, November 2006,\n              <https://www.rfc-editor.org/info/rfc4731>.\n\n   [RFC5267]  Cridland, D. and C. King, \"Contexts for IMAP4\", RFC 5267,\n              DOI 10.17487/RFC5267, July 2008,\n              <https://www.rfc-editor.org/info/rfc5267>.\n\n   [RFC8174]  Leiba, B., \"Ambiguity of Uppercase vs Lowercase in RFC\n              2119 Key Words\", BCP 14, RFC 8174, DOI 10.17487/RFC8174,\n              May 2017, <https://www.rfc-editor.org/info/rfc8174>.\n\n   [RFC9051]  Melnikov, A., Ed. and B. Leiba, Ed., \"Internet Message\n              Access Protocol (IMAP) - Version 4rev2\", RFC 9051,\n              DOI 10.17487/RFC9051, August 2021,\n              <https://www.rfc-editor.org/info/rfc9051>.\n\n7.2.  Informative References\n\n   [RFC7162]  Melnikov, A. and D. Cridland, \"IMAP Extensions: Quick Flag\n              Changes Resynchronization (CONDSTORE) and Quick Mailbox\n              Resynchronization (QRESYNC)\", RFC 7162,\n              DOI 10.17487/RFC7162, May 2014,\n              <https://www.rfc-editor.org/info/rfc7162>.\n\nAcknowledgments\n\n   This document was motivated by the Yahoo! team and their questions\n   about best client practices for dealing with large mailboxes.\n\n   The authors of this document would like to thank the following\n   people, who provided useful comments or participated in discussions\n   of this document: Timo Sirainen and Barry Leiba.\n\n   This document uses a lot of text from RFC 5267.  Thus, the work of\n   the RFC 5267 authors -- Dave Cridland and Curtis King -- is\n   appreciated.\n\nAuthors' Addresses\n\n   Alexey Melnikov\n   Isode Limited\n   Email: alexey.melnikov@isode.com\n   URI:   https://www.isode.com\n\n\n   Arun Prakash Achuthan\n   Yahoo!\n   Email: arunprakash@myyahoo.com\n\n\n   Vikram Nagulakonda\n   Yahoo!\n   Email: nvikram_imap@yahoo.com\n\n\n   Luis Alves\n   Email: luis.alves@lafaspot.com\n"
  },
  {
    "path": "samples/ImapClientDemo/.gitignore",
    "content": "ImapClientDemo.userprefs\nImapClientDemo.*.suo\npackages\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.8\"/>\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\"/>\n  </runtime>\n</configuration>\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/AuthenticationFailedEventArgs.cs",
    "content": "﻿using System;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass AuthenticationFailedEventArgs<T> : EventArgs where T : IMailService\n\t{\n\t\tpublic AuthenticationFailedEventArgs (ClientConnection<T> connection, Exception ex)\n\t\t{\n\t\t\tConnection = connection;\n\t\t\tException = ex;\n\t\t}\n\n\t\tpublic ClientConnection<T> Connection {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic Exception Exception {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/ClientCommand.cs",
    "content": "﻿using System;\nusing System.Threading;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tabstract class ClientCommand<T> where T : IMailService\n\t{\n\t\tprotected ClientCommand (ClientConnection<T> connection)\n\t\t{\n\t\t\tConnection = connection ?? throw new ArgumentNullException (nameof (connection));\n\t\t}\n\n\t\tpublic ClientConnection<T> Connection { get; private set; }\n\n\t\t/// <summary>\n\t\t/// Run the client command.\n\t\t/// </summary>\n\t\t/// <remarks>\n\t\t/// <para>Runs the client command.</para>\n\t\t/// <para>This method will be called by the <see cref=\"ClientCommandPipeline{T}\"/> on a background thread.</para>\n\t\t/// </remarks>\n\t\t/// <param name=\"cancellationToken\">The cancellation token.</param>\n\t\tpublic abstract void Run (CancellationToken cancellationToken);\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/ClientCommandPipeline.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Collections.Concurrent;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass ClientCommandPipeline<T> where T : IMailService\n\t{\n\t\treadonly ConcurrentQueue<ClientCommand<T>> queue;\n\t\treadonly CancellationTokenSource cancellation;\n\t\treadonly ManualResetEvent resetEvent;\n\t\treadonly Thread thread;\n\n\t\tpublic ClientCommandPipeline (string name)\n\t\t{\n\t\t\tcancellation = new CancellationTokenSource ();\n\t\t\tqueue = new ConcurrentQueue<ClientCommand<T>> ();\n\t\t\tresetEvent = new ManualResetEvent (false);\n\t\t\tthread = new Thread (MainLoop) {\n\t\t\t\tName = name,\n\t\t\t\tIsBackground = true,\n\t\t\t};\n\t\t}\n\n\t\tpublic void Start ()\n\t\t{\n\t\t\tif (thread.ThreadState.HasFlag (ThreadState.Unstarted))\n\t\t\t\tthread.Start ();\n\t\t}\n\n\t\tpublic void Stop ()\n\t\t{\n\t\t\tif (!thread.ThreadState.HasFlag (ThreadState.Running))\n\t\t\t\treturn;\n\n\t\t\tcancellation.Cancel ();\n\t\t\tresetEvent.Set ();\n\t\t\tthread.Abort ();\n\t\t}\n\n\t\tpublic void Enqueue (ClientCommand<T> command)\n\t\t{\n\t\t\tqueue.Enqueue (command);\n\t\t\tresetEvent.Set ();\n\t\t}\n\n\t\tpublic event EventHandler<ConnectionFailedEventArgs<T>> ConnectionFailed;\n\n\t\tpublic event EventHandler<AuthenticationFailedEventArgs<T>> AuthenticationFailed;\n\n\t\tpublic event EventHandler<CommandFailedEventArgs> CommandFailed;\n\n\t\tvoid MainLoop ()\n\t\t{\n\t\t\twhile (!cancellation.IsCancellationRequested) {\n\t\t\t\tif (queue.TryDequeue (out var command)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcommand.Connection.EnsureConnected (cancellation.Token);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tConnectionFailed?.Invoke (this, new ConnectionFailedEventArgs<T> (command.Connection, ex));\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcommand.Connection.EnsureAuthenticated (cancellation.Token);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tAuthenticationFailed?.Invoke (this, new AuthenticationFailedEventArgs<T> (command.Connection, ex));\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcommand.Run (cancellation.Token);\n\t\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t\tCommandFailed?.Invoke (this, new CommandFailedEventArgs (ex));\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresetEvent.WaitOne ();\n\t\t\t\t\tresetEvent.Reset ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/ClientConnection.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing MailKit;\nusing MailKit.Security;\n\nnamespace ImapClientDemo\n{\n\tclass ClientConnection<T> : IDisposable where T : IMailService\n\t{\n\t\tbool disposed;\n\n\t\tpublic ClientConnection (T client, string host, int port, SecureSocketOptions sslOptions, NetworkCredential credentials)\n\t\t{\n\t\t\tClient = client ?? throw new ArgumentNullException (nameof (client));\n\t\t\tHost = host ?? throw new ArgumentNullException (nameof (host));\n\t\t\tPort = port >= 0 && port <= 65535 ? port : throw new ArgumentOutOfRangeException (nameof (port));\n\t\t\tSslOptions = sslOptions;\n\t\t\tCredentials = credentials ?? throw new ArgumentNullException (nameof (credentials));\n\t\t}\n\n\t\tpublic T Client { get; private set; }\n\n\t\tpublic string Host { get; set; }\n\n\t\tpublic int Port { get; set; }\n\n\t\tpublic SecureSocketOptions SslOptions { get; set; }\n\n\t\tpublic NetworkCredential Credentials { get; set; }\n\n\t\tpublic void EnsureConnected (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Client.IsConnected)\n\t\t\t\treturn;\n\n\t\t\tClient.Connect (Host, Port, SslOptions, cancellationToken);\n\t\t}\n\n\t\tpublic Task EnsureConnectedAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Client.IsConnected)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\treturn Client.ConnectAsync (Host, Port, SslOptions, cancellationToken);\n\t\t}\n\n\t\tpublic void EnsureAuthenticated (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Client.IsAuthenticated)\n\t\t\t\treturn;\n\n\t\t\tClient.Authenticate (Credentials, cancellationToken);\n\t\t}\n\n\t\tpublic Task EnsureAuthenticatedAsync (CancellationToken cancellationToken)\n\t\t{\n\t\t\tif (Client.IsAuthenticated)\n\t\t\t\treturn Task.CompletedTask;\n\n\t\t\treturn Client.AuthenticateAsync (Credentials, cancellationToken);\n\t\t}\n\n\t\tprotected virtual void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && !disposed) {\n\t\t\t\tClient.Dispose ();\n\t\t\t\tdisposed = true;\n\t\t\t}\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tDispose (true);\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/ClientConnections.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass ClientConnections<T> where T : IMailService\n\t{\n\t\treadonly ConcurrentDictionary<object, ClientConnection<T>> connections;\n\n\t\tpublic ClientConnections ()\n\t\t{\n\t\t\tconnections = new ConcurrentDictionary<object, ClientConnection<T>> ();\n\t\t}\n\n\t\tpublic void Add (ClientConnection<T> connection)\n\t\t{\n\t\t\tif (!connections.TryAdd (connection.Client.SyncRoot, connection))\n\t\t\t\tthrow new InvalidOperationException ();\n\t\t}\n\n\t\tpublic bool TryGetValue (IMailService client, out ClientConnection<T> connection)\n\t\t{\n\t\t\tclient = client ?? throw new ArgumentNullException (nameof (client));\n\n\t\t\treturn connections.TryGetValue (client.SyncRoot, out connection);\n\t\t}\n\n\t\tpublic bool TryGetValue (IMailFolder folder, out ClientConnection<T> connection)\n\t\t{\n\t\t\tfolder = folder ?? throw new ArgumentNullException (nameof (folder));\n\n\t\t\treturn connections.TryGetValue (folder.SyncRoot, out connection);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/CommandFailedEventArgs.cs",
    "content": "﻿using System;\n\nnamespace ImapClientDemo\n{\n\tclass CommandFailedEventArgs : EventArgs\n\t{\n\t\tpublic CommandFailedEventArgs (Exception ex)\n\t\t{\n\t\t\tException = ex;\t\n\t\t}\n\n\t\tpublic Exception Exception {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/ConnectionFailedEventArgs.cs",
    "content": "﻿using System;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass ConnectionFailedEventArgs<T> : EventArgs where T : IMailService\n\t{\n\t\tpublic ConnectionFailedEventArgs (ClientConnection<T> connection, Exception ex)\n\t\t{\n\t\t\tConnection = connection;\n\t\t\tException = ex;\n\t\t}\n\n\t\tpublic ClientConnection<T> Connection {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic Exception Exception {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/CustomTaskScheduler.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Collections.Concurrent;\n\nnamespace ImapClientDemo\n{\n\tpublic class CustomTaskScheduler : TaskScheduler\n\t{\n\t\treadonly ConcurrentQueue<Task> tasks = new ConcurrentQueue<Task> ();\n\n\t\tpublic CustomTaskScheduler () : this (SynchronizationContext.Current)\n\t\t{\n\t\t}\n\n\t\tpublic CustomTaskScheduler (SynchronizationContext context)\n\t\t{\n\t\t\tContext = context ?? throw new ArgumentNullException (nameof (context));\n\t\t}\n\n\t\tpublic SynchronizationContext Context { get; private set; }\n\n\t\tpublic override int MaximumConcurrencyLevel { get { return 1; } }\n\n\t\tvoid TryDequeueAndExecuteTask (object state)\n\t\t{\n\t\t\tif (tasks.TryDequeue (out var toExecute))\n\t\t\t\tTryExecuteTask (toExecute);\n\t\t}\n\n\t\tprotected override void QueueTask (Task task)\n\t\t{\n\t\t\t// Add the task to the collection\n\t\t\ttasks.Enqueue (task);\n\n\t\t\t// Queue up a delegate that will dequeue and execute a task\n\t\t\tContext.Post (TryDequeueAndExecuteTask, null);\n\t\t}\n\n\t\tprotected override bool TryExecuteTaskInline (Task task, bool taskWasPreviouslyQueued)\n\t\t{\n\t\t\treturn SynchronizationContext.Current == Context && TryExecuteTask (task);\n\t\t}\n\n\t\tprotected override IEnumerable<Task> GetScheduledTasks ()\n\t\t{\n\t\t\treturn tasks.ToArray ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/FolderNameComparer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass FolderNameComparer : IComparer<IMailFolder>\n\t{\n\t\tpublic static readonly FolderNameComparer Default = new FolderNameComparer ();\n\n\t\tpublic int Compare (IMailFolder x, IMailFolder y)\n\t\t{\n\t\t\treturn string.Compare (x.Name, y.Name, StringComparison.CurrentCulture);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/FolderSelectedEventArgs.cs",
    "content": "﻿using System;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass FolderSelectedEventArgs : EventArgs\n\t{\n\t\tpublic FolderSelectedEventArgs (IMailFolder folder)\n\t\t{\n\t\t\tFolder = folder;\n\t\t}\n\n\t\tpublic IMailFolder Folder {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/FolderTreeView.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Drawing;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.ComponentModel;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace ImapClientDemo\n{\n\t[ToolboxItem (true)]\n\tclass FolderTreeView : TreeView\n\t{\n\t\treadonly Dictionary<IMailFolder, TreeNode> map = new Dictionary<IMailFolder, TreeNode> ();\n\n\t\tpublic FolderTreeView ()\n\t\t{\n\t\t\tFullRowSelect = true;\n\n\t\t\tImageList = new ImageList ();\n\t\t\tImageList.Images.Add (\"folder\", GetImageResource (\"folder.png\"));\n\t\t\tImageList.Images.Add (\"inbox\", GetImageResource (\"inbox.png\"));\n\t\t\tImageList.Images.Add (\"archive\", GetImageResource (\"archive.png\"));\n\t\t\tImageList.Images.Add (\"drafts\", GetImageResource (\"pencil.png\"));\n\t\t\tImageList.Images.Add (\"flagged\", GetImageResource (\"flag.png\"));\n\t\t\tImageList.Images.Add (\"important\", GetImageResource (\"important.png\"));\n\t\t\tImageList.Images.Add (\"junk\", GetImageResource (\"junk.png\"));\n\t\t\tImageList.Images.Add (\"sent\", GetImageResource (\"paper-plane.png\"));\n\t\t\tImageList.Images.Add (\"trash-empty\", GetImageResource (\"trash-empty.png\"));\n\t\t\tImageList.Images.Add (\"trash-full\", GetImageResource (\"trash-full.png\"));\n\t\t}\n\n\t\tstatic Image GetImageResource (string name)\n\t\t{\n\t\t\treturn Image.FromStream (typeof (FolderTreeView).Assembly.GetManifestResourceStream (\"ImapClientDemo.Resources.\" + name));\n\t\t}\n\n\t\tstatic bool CheckFolderForChildren (ClientConnection<ImapClient> connection, IMailFolder folder)\n\t\t{\n\t\t\tif (connection.Client.Capabilities.HasFlag (ImapCapabilities.Children)) {\n\t\t\t\tif (folder.Attributes.HasFlag (FolderAttributes.HasChildren))\n\t\t\t\t\treturn true;\n\t\t\t} else if (!folder.Attributes.HasFlag (FolderAttributes.NoInferiors)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tvoid UpdateFolderNode (IMailFolder folder)\n\t\t{\n\t\t\tDebug.Assert (SynchronizationContext.Current == Program.GuiContext);\n\n\t\t\tvar node = map[folder];\n\n\t\t\tif (folder.Unread > 0) {\n\t\t\t\tnode.Text = string.Format (\"{0} ({1})\", folder.Name, folder.Unread);\n\t\t\t\tnode.NodeFont = new Font (node.NodeFont, FontStyle.Bold);\n\t\t\t} else {\n\t\t\t\tnode.NodeFont = new Font (node.NodeFont, FontStyle.Regular);\n\t\t\t\tnode.Text = folder.Name;\n\t\t\t}\n\n\t\t\tif (folder.Attributes.HasFlag (FolderAttributes.Trash))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = folder.Count > 0 ? \"trash-full\" : \"trash-empty\";\n\t\t}\n\n\t\tTreeNode CreateFolderNode (ClientConnection<ImapClient> connection, IMailFolder folder)\n\t\t{\n\t\t\tDebug.Assert (SynchronizationContext.Current == Program.GuiContext);\n\n\t\t\tvar node = new TreeNode (folder.Name) {\n\t\t\t\tNodeFont = new Font (Font, FontStyle.Regular),\n\t\t\t\tToolTipText = folder.FullName,\n\t\t\t\tTag = folder\n\t\t\t};\n\n\t\t\tif (folder == connection.Client.Inbox)\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"inbox\";\n\t\t\telse if (folder.Attributes.HasFlag (FolderAttributes.Archive))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"archive\";\n\t\t\telse if (folder.Attributes.HasFlag (FolderAttributes.Drafts))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"drafts\";\n\t\t\telse if (folder.Attributes.HasFlag (FolderAttributes.Flagged))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"flagged\";\n\t\t\telse if (folder.FullName == \"[Gmail]/Important\")\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"important\";\n\t\t\telse if (folder.Attributes.HasFlag (FolderAttributes.Junk))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"junk\";\n\t\t\telse if (folder.Attributes.HasFlag (FolderAttributes.Sent))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"sent\";\n\t\t\telse if (folder.Attributes.HasFlag (FolderAttributes.Trash))\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = folder.Count > 0 ? \"trash-full\" : \"trash-empty\";\n\t\t\telse\n\t\t\t\tnode.SelectedImageKey = node.ImageKey = \"folder\";\n\n\t\t\tif (CheckFolderForChildren (connection, folder))\n\t\t\t\tnode.Nodes.Add (\"Loading...\");\n\n\t\t\treturn node;\n\t\t}\n\n\t\tvoid LoadSubfolders (ClientConnection<ImapClient> connection, IMailFolder folder, IList<IMailFolder> subfolders)\n\t\t{\n\t\t\tTreeNodeCollection nodes;\n\n\t\t\tif (map.TryGetValue (folder, out var node)) {\n\t\t\t\t// removes the dummy \"Loading...\" folder\n\t\t\t\tnodes = node.Nodes;\n\t\t\t\tnodes.Clear ();\n\t\t\t} else {\n\t\t\t\tnodes = Nodes;\n\t\t\t}\n\n\t\t\tforeach (var subfolder in subfolders) {\n\t\t\t\tnode = CreateFolderNode (connection, subfolder);\n\t\t\t\tmap[subfolder] = node;\n\t\t\t\tnodes.Add (node);\n\n\t\t\t\tsubfolder.MessageFlagsChanged += OnMessageFlagsChanged;\n\t\t\t\tsubfolder.CountChanged += OnFolderCountChanged;\n\n\t\t\t\tif (!subfolder.Attributes.HasFlag (FolderAttributes.NonExistent) && !subfolder.Attributes.HasFlag (FolderAttributes.NoSelect)) {\n\t\t\t\t\tif (connection.Client.Capabilities.HasFlag (ImapCapabilities.ListStatus)) {\n\t\t\t\t\t\t// Note: If the IMAP server supports LIST-STATUS, then we obtained the STATUS information for each subfolder already.\n\t\t\t\t\t\tUpdateFolderNode (subfolder);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// ... If not, then we will queue a STATUS command ourselves.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// Note: Technically, ImapFolder.GetSubfolders(StatusItems, bool, CancellationToken) would send a STATUS command for us\n\t\t\t\t\t\t// for each subfolder if the IMAP server doesn't support LIST-STATUS, but I'm doing things this way so that we can display\n\t\t\t\t\t\t// a list of folders sooner and then asynchronously update each folder with an unread count as that information becomes\n\t\t\t\t\t\t// available.\n\t\t\t\t\t\tQueueUpdateUnreadCount (subfolder);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tclass LoadSubfoldersCommand : ClientCommand<ImapClient>\n\t\t{\n\t\t\tList<IMailFolder> subfolders;\n\n\t\t\tprotected LoadSubfoldersCommand (ClientConnection<ImapClient> connection, FolderTreeView treeView) : base (connection)\n\t\t\t{\n\t\t\t\tTreeView = treeView;\n\t\t\t}\n\n\t\t\tpublic LoadSubfoldersCommand (ClientConnection<ImapClient> connection, ImapFolder folder, FolderTreeView treeView) : this (connection, treeView)\n\t\t\t{\n\t\t\t\tFolder = folder;\n\t\t\t}\n\n\t\t\tprotected FolderTreeView TreeView {\n\t\t\t\tget; private set;\n\t\t\t}\n\n\t\t\tprotected IMailFolder Folder {\n\t\t\t\tget; set;\n\t\t\t}\n\n\t\t\tpublic override void Run (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\t// Note: If the IMAP server supports LIST-STATUS, then we'll get the status of the subfolders as we get the list,\n\t\t\t\t// otherwise, we'll queue a StatusCommand for each subfolder in LoadSubfolders().\n\t\t\t\tif (Connection.Client.Capabilities.HasFlag (ImapCapabilities.ListStatus))\n\t\t\t\t\tsubfolders = Folder.GetSubfolders (StatusItems.Unread, false, cancellationToken).ToList ();\n\t\t\t\telse\n\t\t\t\t\tsubfolders = Folder.GetSubfolders (false, cancellationToken).ToList ();\n\n\t\t\t\tsubfolders.Sort (FolderNameComparer.Default);\n\n\t\t\t\t// Proxy the PostProcess() method call to the GUI thread.\n\t\t\t\tProgram.RunOnMainThread (TreeView, PostProcess);\n\t\t\t}\n\n\t\t\tprotected virtual void PostProcess ()\n\t\t\t{\n\t\t\t\tTreeView.LoadSubfolders (Connection, Folder, subfolders);\n\t\t\t}\n\t\t}\n\n\t\tclass LoadRootFoldersCommand : LoadSubfoldersCommand\n\t\t{\n\t\t\tpublic LoadRootFoldersCommand (ClientConnection<ImapClient> connection, FolderTreeView treeView) : base (connection, treeView)\n\t\t\t{\n\t\t\t}\n\n\t\t\tpublic override void Run (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tFolder = Connection.Client.GetFolder (Connection.Client.PersonalNamespaces[0]);\n\n\t\t\t\tbase.Run (cancellationToken);\n\t\t\t}\n\n\t\t\tprotected override void PostProcess ()\n\t\t\t{\n\t\t\t\tTreeView.PathSeparator = Folder.DirectorySeparator.ToString ();\n\t\t\t\tbase.PostProcess ();\n\t\t\t}\n\t\t}\n\n\t\tclass StatusCommand : ClientCommand<ImapClient>\n\t\t{\n\t\t\treadonly FolderTreeView treeView;\n\t\t\treadonly IMailFolder folder;\n\n\t\t\tpublic StatusCommand (ClientConnection<ImapClient> connection, IMailFolder folder, FolderTreeView treeView) : base (connection)\n\t\t\t{\n\t\t\t\tthis.folder = folder;\n\t\t\t\tthis.treeView = treeView;\n\t\t\t}\n\n\t\t\tpublic override void Run (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (!folder.IsOpen)\n\t\t\t\t\tfolder.Status (StatusItems.Unread, cancellationToken);\n\n\t\t\t\t// Proxy the PostProcess() method call to the GUI thread.\n\t\t\t\tProgram.RunOnMainThread (treeView, PostProcess);\n\t\t\t}\n\n\t\t\tvoid PostProcess ()\n\t\t\t{\n\t\t\t\ttreeView.UpdateFolderNode (folder);\n\t\t\t}\n\t\t}\n\n\t\tpublic void LoadFolders ()\n\t\t{\n\t\t\tvar command = new LoadRootFoldersCommand (Program.ImapClientConnection, this);\n\t\t\tProgram.ImapCommandPipeline.Enqueue (command);\n\t\t}\n\n\t\tvoid QueueUpdateUnreadCount (IMailFolder folder)\n\t\t{\n\t\t\tif (!folder.IsOpen) {\n\t\t\t\tvar command = new StatusCommand (Program.ImapClientConnection, folder, this);\n\t\t\t\tProgram.ImapCommandPipeline.Enqueue (command);\n\t\t\t} else {\n\t\t\t\tProgram.RunOnMainThread (this, () => UpdateFolderNode (folder));\n\t\t\t}\n\t\t}\n\n\t\tvoid OnFolderCountChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tvar folder = (IMailFolder) sender;\n\n\t\t\tQueueUpdateUnreadCount (folder);\n\t\t}\n\n\t\tvoid OnMessageFlagsChanged (object sender, MessageFlagsChangedEventArgs e)\n\t\t{\n\t\t\tvar folder = (IMailFolder) sender;\n\n\t\t\tQueueUpdateUnreadCount (folder);\n\t\t}\n\n\t\tprotected override void OnBeforeExpand (TreeViewCancelEventArgs e)\n\t\t{\n\t\t\tif (e.Node.Nodes.Count == 1 && e.Node.Nodes[0].Tag == null) {\n\t\t\t\t// this folder has never been expanded before...\n\t\t\t\tvar folder = (ImapFolder) e.Node.Tag;\n\n\t\t\t\tvar command = new LoadSubfoldersCommand (Program.ImapClientConnection, folder, this);\n\t\t\t\tProgram.ImapCommandPipeline.Enqueue (command);\n\t\t\t}\n\n\t\t\tbase.OnBeforeExpand (e);\n\t\t}\n\n\t\tprotected override void OnBeforeSelect (TreeViewCancelEventArgs e)\n\t\t{\n\t\t\tvar folder = (IMailFolder) e.Node.Tag;\n\n\t\t\t// don't allow the user to select a folder with the \\NoSelect or \\NonExistent attribute\n\t\t\tif (folder == null || folder.Attributes.HasFlag (FolderAttributes.NoSelect) ||\n\t\t\t\tfolder.Attributes.HasFlag (FolderAttributes.NonExistent)) {\n\t\t\t\te.Cancel = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbase.OnBeforeSelect (e);\n\t\t}\n\n\t\tpublic event EventHandler<FolderSelectedEventArgs> FolderSelected;\n\n\t\tprotected override void OnAfterSelect (TreeViewEventArgs e)\n\t\t{\n\t\t\tFolderSelected?.Invoke (this, new FolderSelectedEventArgs ((IMailFolder) e.Node.Tag));\n\n\t\t\tbase.OnAfterSelect (e);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/ImapClientDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.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>{4E163AA3-C326-4BFC-B37D-04757280AE76}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ImapClientDemo</RootNamespace>\n    <AssemblyName>ImapClientDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>\n    <LangVersion>8</LangVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\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</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</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Security\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"MailKit\" Version=\"4.15.1\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AuthenticationFailedEventArgs.cs\" />\n    <Compile Include=\"ClientCommand.cs\" />\n    <Compile Include=\"ClientConnections.cs\" />\n    <Compile Include=\"ClientConnection.cs\" />\n    <Compile Include=\"ConnectionFailedEventArgs.cs\" />\n    <Compile Include=\"CustomTaskScheduler.cs\" />\n    <Compile Include=\"FolderNameComparer.cs\" />\n    <Compile Include=\"FolderSelectedEventArgs.cs\" />\n    <Compile Include=\"FolderTreeView.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"ClientCommandPipeline.cs\" />\n    <Compile Include=\"LoginWindow.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"LoginWindow.Designer.cs\">\n      <DependentUpon>LoginWindow.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainWindow.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"MainWindow.Designer.cs\">\n      <DependentUpon>MainWindow.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"MessageInfo.cs\" />\n    <Compile Include=\"MessageList.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"MessageSelectedEventArgs.cs\" />\n    <Compile Include=\"CommandFailedEventArgs.cs\" />\n    <Compile Include=\"MultipartRelatedImageContext.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <EmbeddedResource Include=\"LoginWindow.resx\">\n      <DependentUpon>LoginWindow.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"MainWindow.resx\">\n      <DependentUpon>MainWindow.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\archive.png\" />\n    <EmbeddedResource Include=\"Resources\\attach.png\" />\n    <EmbeddedResource Include=\"Resources\\trash-empty.png\" />\n    <EmbeddedResource Include=\"Resources\\flag.png\" />\n    <EmbeddedResource Include=\"Resources\\trash-full.png\" />\n    <EmbeddedResource Include=\"Resources\\important.png\" />\n    <EmbeddedResource Include=\"Resources\\inbox.png\" />\n    <EmbeddedResource Include=\"Resources\\junk.png\" />\n    <EmbeddedResource Include=\"Resources\\envelope.png\" />\n    <EmbeddedResource Include=\"Resources\\paper-plane.png\" />\n    <EmbeddedResource Include=\"Resources\\pencil.png\" />\n    <EmbeddedResource Include=\"Resources\\sign-in-with-google.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\folder.png\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.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": "samples/ImapClientDemo/ImapClientDemo/LoginWindow.Designer.cs",
    "content": "﻿namespace ImapClientDemo\n{\n\tpartial class LoginWindow\n\t{\n\t\t/// <summary>\n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.IContainer components = null;\n\n\t\t/// <summary>\n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\t/// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && (components != null)) {\n\t\t\t\tcomponents.Dispose ();\n\t\t\t}\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\n\t\t#region Windows Form Designer generated code\n\n\t\t/// <summary>\n\t\t/// Required method for Designer support - do not modify\n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent ()\n\t\t{\n\t\t\tthis.loginPanel = new System.Windows.Forms.Panel();\n\t\t\tthis.signInButton = new System.Windows.Forms.Button();\n\t\t\tthis.passwordTextBox = new System.Windows.Forms.TextBox();\n\t\t\tthis.passwordLabel = new System.Windows.Forms.Label();\n\t\t\tthis.loginTextBox = new System.Windows.Forms.TextBox();\n\t\t\tthis.loginLabel = new System.Windows.Forms.Label();\n\t\t\tthis.sslCheckbox = new System.Windows.Forms.CheckBox();\n\t\t\tthis.portCombo = new System.Windows.Forms.ComboBox();\n\t\t\tthis.portLabel = new System.Windows.Forms.Label();\n\t\t\tthis.serverLabel = new System.Windows.Forms.Label();\n\t\t\tthis.serverCombo = new System.Windows.Forms.ComboBox();\n\t\t\tthis.signInLabel = new System.Windows.Forms.Label();\n\t\t\tthis.loginPanel.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// loginPanel\n\t\t\t// \n\t\t\tthis.loginPanel.BackColor = System.Drawing.Color.White;\n\t\t\tthis.loginPanel.Controls.Add(this.signInButton);\n\t\t\tthis.loginPanel.Controls.Add(this.passwordTextBox);\n\t\t\tthis.loginPanel.Controls.Add(this.passwordLabel);\n\t\t\tthis.loginPanel.Controls.Add(this.loginTextBox);\n\t\t\tthis.loginPanel.Controls.Add(this.loginLabel);\n\t\t\tthis.loginPanel.Controls.Add(this.sslCheckbox);\n\t\t\tthis.loginPanel.Controls.Add(this.portCombo);\n\t\t\tthis.loginPanel.Controls.Add(this.portLabel);\n\t\t\tthis.loginPanel.Controls.Add(this.serverLabel);\n\t\t\tthis.loginPanel.Controls.Add(this.serverCombo);\n\t\t\tthis.loginPanel.Controls.Add(this.signInLabel);\n\t\t\tthis.loginPanel.Location = new System.Drawing.Point(0, 0);\n\t\t\tthis.loginPanel.Name = \"loginPanel\";\n\t\t\tthis.loginPanel.Size = new System.Drawing.Size(584, 400);\n\t\t\tthis.loginPanel.TabIndex = 0;\n\t\t\t// \n\t\t\t// signInButton\n\t\t\t// \n\t\t\tthis.signInButton.Enabled = false;\n\t\t\tthis.signInButton.Location = new System.Drawing.Point(208, 252);\n\t\t\tthis.signInButton.Name = \"signInButton\";\n\t\t\tthis.signInButton.Size = new System.Drawing.Size(251, 25);\n\t\t\tthis.signInButton.TabIndex = 11;\n\t\t\tthis.signInButton.Text = \"Sign In\";\n\t\t\tthis.signInButton.UseVisualStyleBackColor = true;\n\t\t\t// \n\t\t\t// passwordTextBox\n\t\t\t// \n\t\t\tthis.passwordTextBox.Location = new System.Drawing.Point(208, 220);\n\t\t\tthis.passwordTextBox.MaxLength = 64;\n\t\t\tthis.passwordTextBox.Name = \"passwordTextBox\";\n\t\t\tthis.passwordTextBox.PasswordChar = '*';\n\t\t\tthis.passwordTextBox.Size = new System.Drawing.Size(251, 25);\n\t\t\tthis.passwordTextBox.TabIndex = 10;\n\t\t\t// \n\t\t\t// passwordLabel\n\t\t\t// \n\t\t\tthis.passwordLabel.Location = new System.Drawing.Point(123, 220);\n\t\t\tthis.passwordLabel.Name = \"passwordLabel\";\n\t\t\tthis.passwordLabel.Size = new System.Drawing.Size(78, 25);\n\t\t\tthis.passwordLabel.TabIndex = 9;\n\t\t\tthis.passwordLabel.Text = \"Password:\";\n\t\t\tthis.passwordLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n\t\t\t// \n\t\t\t// loginTextBox\n\t\t\t// \n\t\t\tthis.loginTextBox.Location = new System.Drawing.Point(208, 188);\n\t\t\tthis.loginTextBox.MaxLength = 64;\n\t\t\tthis.loginTextBox.Name = \"loginTextBox\";\n\t\t\tthis.loginTextBox.Size = new System.Drawing.Size(251, 25);\n\t\t\tthis.loginTextBox.TabIndex = 8;\n\t\t\tthis.loginTextBox.WordWrap = false;\n\t\t\t// \n\t\t\t// loginLabel\n\t\t\t// \n\t\t\tthis.loginLabel.Location = new System.Drawing.Point(126, 188);\n\t\t\tthis.loginLabel.Name = \"loginLabel\";\n\t\t\tthis.loginLabel.Size = new System.Drawing.Size(75, 25);\n\t\t\tthis.loginLabel.TabIndex = 7;\n\t\t\tthis.loginLabel.Text = \"Login:\";\n\t\t\tthis.loginLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n\t\t\t// \n\t\t\t// sslCheckbox\n\t\t\t// \n\t\t\tthis.sslCheckbox.Location = new System.Drawing.Point(344, 158);\n\t\t\tthis.sslCheckbox.Name = \"sslCheckbox\";\n\t\t\tthis.sslCheckbox.Size = new System.Drawing.Size(115, 25);\n\t\t\tthis.sslCheckbox.TabIndex = 6;\n\t\t\tthis.sslCheckbox.Text = \"Enable SSL/TLS\";\n\t\t\tthis.sslCheckbox.UseVisualStyleBackColor = true;\n\t\t\t// \n\t\t\t// portCombo\n\t\t\t// \n\t\t\tthis.portCombo.FormattingEnabled = true;\n\t\t\tthis.portCombo.Items.AddRange(new object[] {\n            \"143\",\n            \"993\"});\n\t\t\tthis.portCombo.Location = new System.Drawing.Point(207, 158);\n\t\t\tthis.portCombo.Name = \"portCombo\";\n\t\t\tthis.portCombo.Size = new System.Drawing.Size(131, 25);\n\t\t\tthis.portCombo.TabIndex = 5;\n\t\t\t// \n\t\t\t// portLabel\n\t\t\t// \n\t\t\tthis.portLabel.Location = new System.Drawing.Point(123, 158);\n\t\t\tthis.portLabel.Name = \"portLabel\";\n\t\t\tthis.portLabel.Size = new System.Drawing.Size(78, 25);\n\t\t\tthis.portLabel.TabIndex = 4;\n\t\t\tthis.portLabel.Text = \"Port:\";\n\t\t\tthis.portLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n\t\t\t// \n\t\t\t// serverLabel\n\t\t\t// \n\t\t\tthis.serverLabel.Location = new System.Drawing.Point(120, 127);\n\t\t\tthis.serverLabel.Name = \"serverLabel\";\n\t\t\tthis.serverLabel.Size = new System.Drawing.Size(81, 25);\n\t\t\tthis.serverLabel.TabIndex = 3;\n\t\t\tthis.serverLabel.Text = \"Server:\";\n\t\t\tthis.serverLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n\t\t\t// \n\t\t\t// serverCombo\n\t\t\t// \n\t\t\tthis.serverCombo.FormattingEnabled = true;\n\t\t\tthis.serverCombo.Items.AddRange(new object[] {\n            \"imap.gmail.com\",\n            \"imap.mail.yahoo.com\",\n            \"imap-mail.outlook.com\"});\n\t\t\tthis.serverCombo.Location = new System.Drawing.Point(207, 127);\n\t\t\tthis.serverCombo.Name = \"serverCombo\";\n\t\t\tthis.serverCombo.Size = new System.Drawing.Size(252, 25);\n\t\t\tthis.serverCombo.TabIndex = 2;\n\t\t\t// \n\t\t\t// signInLabel\n\t\t\t// \n\t\t\tthis.signInLabel.Anchor = System.Windows.Forms.AnchorStyles.None;\n\t\t\tthis.signInLabel.BackColor = System.Drawing.Color.WhiteSmoke;\n\t\t\tthis.signInLabel.Font = new System.Drawing.Font(\"Segoe UI\", 14.667F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n\t\t\tthis.signInLabel.Location = new System.Drawing.Point(0, 0);\n\t\t\tthis.signInLabel.Margin = new System.Windows.Forms.Padding(0);\n\t\t\tthis.signInLabel.Name = \"signInLabel\";\n\t\t\tthis.signInLabel.Padding = new System.Windows.Forms.Padding(12);\n\t\t\tthis.signInLabel.Size = new System.Drawing.Size(584, 52);\n\t\t\tthis.signInLabel.TabIndex = 1;\n\t\t\tthis.signInLabel.Text = \"Sign In\";\n\t\t\t// \n\t\t\t// LoginWindow\n\t\t\t// \n\t\t\tthis.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);\n\t\t\tthis.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n\t\t\tthis.ClientSize = new System.Drawing.Size(584, 401);\n\t\t\tthis.Controls.Add(this.loginPanel);\n\t\t\tthis.Font = new System.Drawing.Font(\"Segoe UI\", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n\t\t\tthis.Name = \"LoginWindow\";\n\t\t\tthis.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\n\t\t\tthis.Text = \"MailKit IMAP Demo - Login\";\n\t\t\tthis.loginPanel.ResumeLayout(false);\n\t\t\tthis.loginPanel.PerformLayout();\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\n\t\t#endregion\n\n\t\tprivate System.Windows.Forms.Panel loginPanel;\n\t\tprivate System.Windows.Forms.Label signInLabel;\n\t\tprivate System.Windows.Forms.ComboBox serverCombo;\n\t\tprivate System.Windows.Forms.Label serverLabel;\n\t\tprivate System.Windows.Forms.Label portLabel;\n\t\tprivate System.Windows.Forms.ComboBox portCombo;\n\t\tprivate System.Windows.Forms.CheckBox sslCheckbox;\n\t\tprivate System.Windows.Forms.Label loginLabel;\n\t\tprivate System.Windows.Forms.TextBox loginTextBox;\n\t\tprivate System.Windows.Forms.TextBox passwordTextBox;\n\t\tprivate System.Windows.Forms.Label passwordLabel;\n\t\tprivate System.Windows.Forms.Button signInButton;\n\n\t}\n}\n\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/LoginWindow.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Windows.Forms;\n\nusing MailKit.Security;\n\nnamespace ImapClientDemo\n{\n\tpublic partial class LoginWindow : Form\n\t{\n\t\tpublic LoginWindow ()\n\t\t{\n\t\t\tInitializeComponent ();\n\n\t\t\tsslCheckbox.CheckedChanged += EnableSSLChanged;\n\t\t\tpasswordTextBox.TextChanged += LoginChanged;\n\t\t\tloginTextBox.TextChanged += LoginChanged;\n\t\t\tserverCombo.TextChanged += ServerChanged;\n\t\t\tportCombo.TextChanged += PortChanged;\n\t\t\tsignInButton.Click += SignInClicked;\n\t\t}\n\n\t\tprotected override void OnShown (EventArgs e)\n\t\t{\n\t\t\tserverCombo.Text = Program.ImapClientConnection.Host;\n\t\t\tportCombo.Text = Program.ImapClientConnection.Port.ToString ();\n\t\t\tsslCheckbox.Checked = Program.ImapClientConnection.SslOptions == SecureSocketOptions.SslOnConnect;\n\t\t\tloginTextBox.Text = Program.ImapClientConnection.Credentials.UserName;\n\t\t\tpasswordTextBox.Text = Program.ImapClientConnection.Credentials.Password;\n\n\t\t\tbase.OnShown (e);\n\t\t}\n\n\t\tvoid CheckCanLogin ()\n\t\t{\n\t\t\tsignInButton.Enabled = !string.IsNullOrEmpty (serverCombo.Text) &&\n\t\t\t\t!string.IsNullOrEmpty (loginTextBox.Text) &&\n\t\t\t\t!string.IsNullOrEmpty (passwordTextBox.Text);\n\t\t}\n\n\t\tvoid PortChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tvar port = portCombo.Text.Trim ();\n\n\t\t\tswitch (port) {\n\t\t\tcase \"143\":\n\t\t\t\tsslCheckbox.Checked = false;\n\t\t\t\tbreak;\n\t\t\tcase \"993\":\n\t\t\t\tsslCheckbox.Checked = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvoid ServerChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tswitch (serverCombo.Text) {\n\t\t\tcase \"imap.gmail.com\":\n\t\t\tcase \"imap.mail.yahoo.com\":\n\t\t\tcase \"imap-mail.outlook.com\":\n\t\t\t\tsslCheckbox.Checked = true;\n\t\t\t\tportCombo.Text = \"993\";\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tCheckCanLogin ();\n\t\t}\n\n\t\tvoid EnableSSLChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tvar checkbox = (CheckBox) sender;\n\t\t\tvar port = portCombo.Text;\n\n\t\t\tif (string.IsNullOrEmpty (port))\n\t\t\t\tportCombo.Text = checkbox.Checked ? \"993\" : \"143\";\n\t\t}\n\n\t\tvoid LoginChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tCheckCanLogin ();\n\t\t}\n\n\t\tvoid SignInClicked (object sender, EventArgs e)\n\t\t{\n\t\t\tvar sslOptions = SecureSocketOptions.StartTlsWhenAvailable;\n\t\t\tvar host = serverCombo.Text.Trim ();\n\t\t\tvar passwd = passwordTextBox.Text;\n\t\t\tvar user = loginTextBox.Text;\n\t\t\tint port = 0;\n\n\t\t\tif (!string.IsNullOrEmpty (portCombo.Text))\n\t\t\t\tport = int.Parse (portCombo.Text);\n\n\t\t\tvar credentials = new NetworkCredential (user, passwd);\n\n\t\t\tif (sslCheckbox.Checked)\n\t\t\t\tsslOptions = SecureSocketOptions.SslOnConnect;\n\n\t\t\tProgram.ImapClientConnection.Host = host;\n\t\t\tProgram.ImapClientConnection.Port = port;\n\t\t\tProgram.ImapClientConnection.SslOptions = sslOptions;\n\t\t\tProgram.ImapClientConnection.Credentials = credentials;\n\n\t\t\tProgram.MainWindow.LoadContent ();\n\n\t\t\tProgram.MainWindow.Visible = true;\n\t\t\tVisible = false;\n\t\t}\n\n\t\tprotected override void OnClosed (EventArgs e)\n\t\t{\n\t\t\tbase.OnClosed (e);\n\n\t\t\tApplication.Exit ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/LoginWindow.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</root>"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MainWindow.Designer.cs",
    "content": "﻿namespace ImapClientDemo\n{\n\tpartial class MainWindow\n\t{\n\t\t/// <summary>\n\t\t/// Required designer variable.\n\t\t/// </summary>\n\t\tprivate System.ComponentModel.IContainer components = null;\n\n\t\t/// <summary>\n\t\t/// Clean up any resources being used.\n\t\t/// </summary>\n\t\t/// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n\t\tprotected override void Dispose (bool disposing)\n\t\t{\n\t\t\tif (disposing && (components != null)) {\n\t\t\t\tcomponents.Dispose ();\n\t\t\t}\n\t\t\tbase.Dispose (disposing);\n\t\t}\n\n\t\t#region Windows Form Designer generated code\n\n\t\t/// <summary>\n\t\t/// Required method for Designer support - do not modify\n\t\t/// the contents of this method with the code editor.\n\t\t/// </summary>\n\t\tprivate void InitializeComponent ()\n\t\t{\n\t\t\tthis.components = new System.ComponentModel.Container();\n\t\t\tthis.folderPanel = new System.Windows.Forms.Panel();\n\t\t\tthis.folderTreeView = new ImapClientDemo.FolderTreeView();\n\t\t\tthis.messageListPanel = new System.Windows.Forms.Panel();\n\t\t\tthis.messageList = new ImapClientDemo.MessageList();\n\t\t\tthis.webBrowser = new System.Windows.Forms.WebBrowser();\n\t\t\tthis.folderPanel.SuspendLayout();\n\t\t\tthis.messageListPanel.SuspendLayout();\n\t\t\tthis.SuspendLayout();\n\t\t\t// \n\t\t\t// folderPanel\n\t\t\t// \n\t\t\tthis.folderPanel.Controls.Add(this.folderTreeView);\n\t\t\tthis.folderPanel.Location = new System.Drawing.Point(0, 0);\n\t\t\tthis.folderPanel.Name = \"folderPanel\";\n\t\t\tthis.folderPanel.Size = new System.Drawing.Size(200, 487);\n\t\t\tthis.folderPanel.TabIndex = 0;\n\t\t\t// \n\t\t\t// folderTreeView\n\t\t\t// \n\t\t\tthis.folderTreeView.Font = new System.Drawing.Font(\"Segoe UI\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n\t\t\tthis.folderTreeView.ImageIndex = 0;\n\t\t\tthis.folderTreeView.Location = new System.Drawing.Point(0, 0);\n\t\t\tthis.folderTreeView.Name = \"folderTreeView\";\n\t\t\tthis.folderTreeView.PathSeparator = \"/\";\n\t\t\tthis.folderTreeView.SelectedImageIndex = 0;\n\t\t\tthis.folderTreeView.Size = new System.Drawing.Size(200, 487);\n\t\t\tthis.folderTreeView.TabIndex = 0;\n\t\t\t// \n\t\t\t// messageListPanel\n\t\t\t// \n\t\t\tthis.messageListPanel.Controls.Add(this.messageList);\n\t\t\tthis.messageListPanel.Location = new System.Drawing.Point(206, 0);\n\t\t\tthis.messageListPanel.Name = \"messageListPanel\";\n\t\t\tthis.messageListPanel.Size = new System.Drawing.Size(328, 487);\n\t\t\tthis.messageListPanel.TabIndex = 1;\n\t\t\t// \n\t\t\t// messageList\n\t\t\t// \n\t\t\tthis.messageList.Font = new System.Drawing.Font(\"Segoe UI\", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n\t\t\tthis.messageList.Location = new System.Drawing.Point(0, 0);\n\t\t\tthis.messageList.Name = \"messageList\";\n\t\t\tthis.messageList.Size = new System.Drawing.Size(328, 487);\n\t\t\tthis.messageList.TabIndex = 0;\n\t\t\t// \n\t\t\t// webBrowser\n\t\t\t// \n\t\t\tthis.webBrowser.Location = new System.Drawing.Point(540, 0);\n\t\t\tthis.webBrowser.MinimumSize = new System.Drawing.Size(20, 20);\n\t\t\tthis.webBrowser.Name = \"webBrowser\";\n\t\t\tthis.webBrowser.Size = new System.Drawing.Size(391, 487);\n\t\t\tthis.webBrowser.TabIndex = 2;\n\t\t\t// \n\t\t\t// MainWindow\n\t\t\t// \n\t\t\tthis.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n\t\t\tthis.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n\t\t\tthis.ClientSize = new System.Drawing.Size(933, 487);\n\t\t\tthis.Controls.Add(this.webBrowser);\n\t\t\tthis.Controls.Add(this.messageListPanel);\n\t\t\tthis.Controls.Add(this.folderPanel);\n\t\t\tthis.Name = \"MainWindow\";\n\t\t\tthis.Text = \"MainWindow\";\n\t\t\tthis.folderPanel.ResumeLayout(false);\n\t\t\tthis.messageListPanel.ResumeLayout(false);\n\t\t\tthis.ResumeLayout(false);\n\n\t\t}\n\n\t\t#endregion\n\n\t\tprivate System.Windows.Forms.Panel folderPanel;\n\t\tprivate FolderTreeView folderTreeView;\n\t\tprivate System.Windows.Forms.Panel messageListPanel;\n\t\tprivate MessageList messageList;\n\t\tprivate System.Windows.Forms.WebBrowser webBrowser;\n\n\t}\n}"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MainWindow.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing System.Windows.Forms;\n\nusing MimeKit;\nusing MimeKit.Text;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace ImapClientDemo\n{\n\tpublic partial class MainWindow : Form\n\t{\n\t\tpublic MainWindow ()\n\t\t{\n\t\t\tInitializeComponent ();\n\n\t\t\tfolderTreeView.FolderSelected += OnFolderSelected;\n\t\t\tmessageList.MessageSelected += OnMessageSelected;\n\t\t}\n\n\t\tclass RenderMessageCommand : ClientCommand<ImapClient>\n\t\t{\n\t\t\treadonly WebBrowser webBrowser;\n\t\t\treadonly IMailFolder folder;\n\t\t\treadonly UniqueId uid;\n\t\t\treadonly BodyPart body;\n\n\t\t\tstring documentText;\n\n\t\t\tpublic RenderMessageCommand (ClientConnection<ImapClient> connection, IMailFolder folder, UniqueId uid, BodyPart body, WebBrowser webBrowser) : base (connection)\n\t\t\t{\n\t\t\t\tthis.folder = folder;\n\t\t\t\tthis.uid = uid;\n\t\t\t\tthis.body = body;\n\t\t\t\tthis.webBrowser = webBrowser;\n\t\t\t}\n\n\t\t\tvoid RenderMultipartRelated (MultipartRelated related)\n\t\t\t{\n\t\t\t\tvar root = related.Root;\n\t\t\t\tvar text = root as TextPart;\n\n\t\t\t\tif (root is Multipart multipart) {\n\t\t\t\t\t// Note: the root document can sometimes be a multipart/alternative.\n\t\t\t\t\t// A multipart/alternative is just a collection of alternate views.\n\t\t\t\t\t// The last part is the format that most closely matches what the\n\t\t\t\t\t// user saw in his or her email client's WYSIWYG editor.\n\t\t\t\t\tfor (int i = multipart.Count; i > 0; i--) {\n\t\t\t\t\t\tif (!(multipart[i - 1] is TextPart body))\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t// our preferred mime-type is text/html\n\t\t\t\t\t\tif (body.ContentType.IsMimeType (\"text\", \"html\")) {\n\t\t\t\t\t\t\ttext = body;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttext ??= body;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check if we have a text/html document\n\t\t\t\tif (text != null) {\n\t\t\t\t\tif (text.ContentType.IsMimeType (\"text\", \"html\")) {\n\t\t\t\t\t\t// replace image src urls that refer to related MIME parts with \"data:\" urls\n\t\t\t\t\t\t// Note: we could also save the related MIME part content to disk and use\n\t\t\t\t\t\t// file:// urls instead.\n\t\t\t\t\t\tvar ctx = new MultipartRelatedImageContext (related);\n\t\t\t\t\t\tvar converter = new HtmlToHtml () { HtmlTagCallback = ctx.HtmlTagCallback };\n\t\t\t\t\t\tvar html = converter.Convert (text.Text);\n\n\t\t\t\t\t\tdocumentText = html;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tRenderText (text);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// we don't know how to render this type of content\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvoid DownloadMultipartRelated (IMailFolder folder, UniqueId uid, BodyPartMultipart bodyPart, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\t// download the entire multipart/related for simplicity since we'll probably end up needing all of the image attachments anyway...\n\t\t\t\tvar related = folder.GetBodyPart (uid, bodyPart, cancellationToken) as MultipartRelated;\n\n\t\t\t\tRenderMultipartRelated (related);\n\t\t\t}\n\n\t\t\tvoid RenderText (TextPart text)\n\t\t\t{\n\t\t\t\tstring html;\n\n\t\t\t\tif (text.IsHtml) {\n\t\t\t\t\t// the text content is already in HTML format\n\t\t\t\t\thtml = text.Text;\n\t\t\t\t} else if (text.IsFlowed) {\n\t\t\t\t\tvar converter = new FlowedToHtml ();\n\n\t\t\t\t\t// the delsp parameter specifies whether or not to delete spaces at the end of flowed lines\n\t\t\t\t\tif (!text.ContentType.Parameters.TryGetValue (\"delsp\", out string delsp))\n\t\t\t\t\t\tdelsp = \"no\";\n\n\t\t\t\t\tif (string.Compare (delsp, \"yes\", StringComparison.OrdinalIgnoreCase) == 0)\n\t\t\t\t\t\tconverter.DeleteSpace = true;\n\n\t\t\t\t\thtml = converter.Convert (text.Text);\n\t\t\t\t} else {\n\t\t\t\t\thtml = new TextToHtml ().Convert (text.Text);\n\t\t\t\t}\n\n\t\t\t\tdocumentText = html;\n\t\t\t}\n\n\t\t\tvoid DownloadTextPart (IMailFolder folder, UniqueId uid, BodyPartText bodyPart, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tvar entity = folder.GetBodyPart (uid, bodyPart, cancellationToken);\n\n\t\t\t\tRenderText ((TextPart) entity);\n\t\t\t}\n\n\t\t\tvoid DownloadBodyPart (IMailFolder folder, UniqueId uid, BodyPart body, CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tvar multipart = body as BodyPartMultipart;\n\n\t\t\t\tif (multipart != null && body.ContentType.IsMimeType (\"multipart\", \"related\")) {\n\t\t\t\t\tDownloadMultipartRelated (folder, uid, multipart, cancellationToken);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar text = body as BodyPartText;\n\n\t\t\t\tif (multipart != null) {\n\t\t\t\t\tif (multipart.ContentType.IsMimeType (\"multipart\", \"alternative\")) {\n\t\t\t\t\t\t// A multipart/alternative is just a collection of alternate views.\n\t\t\t\t\t\t// The last part is the format that most closely matches what the\n\t\t\t\t\t\t// user saw in his or her email client's WYSIWYG editor.\n\t\t\t\t\t\tfor (int i = multipart.BodyParts.Count; i > 0; i--) {\n\t\t\t\t\t\t\tif (multipart.BodyParts[i - 1] is BodyPartMultipart multi && multi.ContentType.IsMimeType (\"multipart\", \"related\")) {\n\t\t\t\t\t\t\t\tif (multi.BodyParts.Count == 0)\n\t\t\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t\t\tvar start = multi.ContentType.Parameters[\"start\"];\n\t\t\t\t\t\t\t\tvar root = multi.BodyParts[0];\n\n\t\t\t\t\t\t\t\tif (!string.IsNullOrEmpty (start)) {\n\t\t\t\t\t\t\t\t\t// if the 'start' parameter is set, it overrides the default behavior of using the first\n\t\t\t\t\t\t\t\t\t// body part as the main document.\n\t\t\t\t\t\t\t\t\troot = multi.BodyParts.OfType<BodyPartText> ().FirstOrDefault (x => x.ContentId == start);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (root != null && root.ContentType.IsMimeType (\"text\", \"html\")) {\n\t\t\t\t\t\t\t\t\tDownloadBodyPart (folder, uid, multi, cancellationToken);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttext = multipart.BodyParts[i - 1] as BodyPartText;\n\n\t\t\t\t\t\t\tif (text != null) {\n\t\t\t\t\t\t\t\tDownloadTextPart (folder, uid, text, cancellationToken);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (multipart.BodyParts.Count > 0) {\n\t\t\t\t\t\t// The main message body is usually the first part of a multipart/mixed.\n\t\t\t\t\t\tDownloadBodyPart (folder, uid, multipart.BodyParts[0], cancellationToken);\n\t\t\t\t\t}\n\t\t\t\t} else if (text != null) {\n\t\t\t\t\tDownloadTextPart (folder, uid, text, cancellationToken);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic override void Run (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (!folder.IsOpen)\n\t\t\t\t\tfolder.Open (FolderAccess.ReadWrite, cancellationToken);\n\n\t\t\t\tDownloadBodyPart (folder, uid, body, cancellationToken);\n\n\t\t\t\t// Proxy the DownloadBodyPart() method call to the GUI thread.\n\t\t\t\tProgram.RunOnMainThread (webBrowser, Render);\n\t\t\t}\n\n\t\t\tvoid Render ()\n\t\t\t{\n\t\t\t\twebBrowser.DocumentText = documentText;\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageSelected (object sender, MessageSelectedEventArgs e)\n\t\t{\n\t\t\tvar command = new RenderMessageCommand (Program.ImapClientConnection, e.Folder, e.UniqueId, e.Body, webBrowser);\n\t\t\tProgram.ImapCommandPipeline.Enqueue (command);\n\t\t}\n\n\t\tvoid OnFolderSelected (object sender, FolderSelectedEventArgs e)\n\t\t{\n\t\t\tmessageList.OpenFolder (e.Folder);\n\t\t}\n\n\t\tpublic void LoadContent ()\n\t\t{\n\t\t\tfolderTreeView.LoadFolders ();\n\t\t}\n\n\t\tprotected override void OnClosed (EventArgs e)\n\t\t{\n\t\t\tbase.OnClosed (e);\n\n\t\t\tApplication.Exit ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MainWindow.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</root>"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MessageInfo.cs",
    "content": "﻿using MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass MessageInfo\n\t{\n\t\tpublic readonly IMessageSummary Summary;\n\t\tpublic MessageFlags Flags;\n\n\t\tpublic MessageInfo (IMessageSummary summary)\n\t\t{\n\t\t\tSummary = summary;\n\n\t\t\tif (summary.Flags.HasValue)\n\t\t\t\tFlags = summary.Flags.Value;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MessageList.cs",
    "content": "﻿using System;\nusing System.Drawing;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.ComponentModel;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace ImapClientDemo\n{\n\t[ToolboxItem (true)]\n\tclass MessageList : TreeView\n\t{\n\t\tstatic readonly FetchRequest request = new FetchRequest (MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.Flags | MessageSummaryItems.BodyStructure);\n\t\tconst int BatchSize = 512;\n\n\t\treadonly Dictionary<MessageInfo, TreeNode> map = new Dictionary<MessageInfo, TreeNode> ();\n\t\treadonly List<MessageInfo> messages = new List<MessageInfo> ();\n\t\tIMailFolder folder;\n\n\t\tpublic MessageList ()\n\t\t{\n\t\t\tFullRowSelect = true;\n\t\t}\n\n\t\tvoid UpdateMessageNode (TreeNode node)\n\t\t{\n\t\t\tDebug.Assert (SynchronizationContext.Current == Program.GuiContext);\n\n\t\t\tvar info = (MessageInfo) node.Tag;\n\t\t\tFontStyle style;\n\n\t\t\tif (info.Flags.HasFlag (MessageFlags.Deleted))\n\t\t\t\tstyle = FontStyle.Strikeout;\n\t\t\telse if (!info.Flags.HasFlag (MessageFlags.Seen))\n\t\t\t\tstyle = FontStyle.Bold;\n\t\t\telse\n\t\t\t\tstyle = FontStyle.Regular;\n\n\t\t\tnode.NodeFont = new Font (Font, style);\n\t\t}\n\n\t\tvoid AddMessageSummaries (IMailFolder folder, IEnumerable<IMessageSummary> summaries)\n\t\t{\n\t\t\tDebug.Assert (SynchronizationContext.Current == Program.GuiContext);\n\n\t\t\tif (folder != this.folder)\n\t\t\t\treturn;\n\n\t\t\tforeach (var message in summaries) {\n\t\t\t\tvar info = new MessageInfo (message);\n\t\t\t\tvar node = new TreeNode (message.Envelope.Subject) { Tag = info };\n\t\t\t\tUpdateMessageNode (node);\n\t\t\t\tmessages.Add (info);\n\t\t\t\tNodes.Add (node);\n\t\t\t\tmap[info] = node;\n\t\t\t}\n\n\t\t\tif (messages.Count < folder.Count)\n\t\t\t\tFetchNewMessages (folder);\n\t\t}\n\n\t\tvoid OnFolderOpened (IMailFolder folder, IList<IMessageSummary> summaries)\n\t\t{\n\t\t\tif (this.folder != null) {\n\t\t\t\tthis.folder.MessageFlagsChanged -= OnMessageFlagsChanged;\n\t\t\t\tthis.folder.MessageExpunged -= OnMessageExpunged;\n\t\t\t\tthis.folder.CountChanged -= OnCountChanged;\n\t\t\t}\n\n\t\t\tfolder.MessageFlagsChanged += OnMessageFlagsChanged;\n\t\t\tfolder.MessageExpunged += OnMessageExpunged;\n\n\t\t\tthis.folder = folder;\n\n\t\t\tlock (messages) {\n\t\t\t\tmessages.Clear ();\n\t\t\t\tNodes.Clear ();\n\t\t\t\tmap.Clear ();\n\n\t\t\t\tif (summaries != null)\n\t\t\t\t\tAddMessageSummaries (folder, summaries);\n\t\t\t}\n\n\t\t\tfolder.CountChanged += OnCountChanged;\n\t\t}\n\n\t\tclass OpenFolderCommand : ClientCommand<ImapClient>\n\t\t{\n\t\t\treadonly MessageList messageList;\n\t\t\treadonly IMailFolder folder;\n\t\t\tIList<IMessageSummary> summaries;\n\n\t\t\tpublic OpenFolderCommand (ClientConnection<ImapClient> connection, IMailFolder folder, MessageList messageList) : base (connection)\n\t\t\t{\n\t\t\t\tthis.messageList = messageList;\n\t\t\t\tthis.folder = folder;\n\t\t\t}\n\n\t\t\tpublic override void Run (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (!folder.IsOpen)\n\t\t\t\t\tfolder.Open (FolderAccess.ReadWrite, cancellationToken);\n\n\t\t\t\tif (folder.Count > 0)\n\t\t\t\t\tsummaries = folder.Fetch (0, BatchSize, request, cancellationToken);\n\n\t\t\t\t// Proxy the PostProcess() method call to the GUI thread.\n\t\t\t\tProgram.RunOnMainThread (messageList, PostProcess);\n\t\t\t}\n\n\t\t\tvoid PostProcess ()\n\t\t\t{\n\t\t\t\tmessageList.OnFolderOpened (folder, summaries);\n\t\t\t}\n\t\t}\n\n\t\tpublic void OpenFolder (IMailFolder folder)\n\t\t{\n\t\t\tvar command = new OpenFolderCommand (Program.ImapClientConnection, folder, this);\n\t\t\tProgram.ImapCommandPipeline.Enqueue (command);\n\t\t}\n\n\t\tvoid MessageFlagsChangedInGuiThread (object state)\n\t\t{\n\t\t\tDebug.Assert (SynchronizationContext.Current == Program.GuiContext);\n\n\t\t\tvar e = (MessageFlagsChangedEventArgs) state;\n\n\t\t\tlock (messages) {\n\t\t\t\tif (e.Index < messages.Count) {\n\t\t\t\t\tvar info = messages[e.Index];\n\t\t\t\t\tvar node = map[info];\n\n\t\t\t\t\tinfo.Flags = e.Flags;\n\n\t\t\t\t\tUpdateMessageNode (node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageFlagsChanged (object sender, MessageFlagsChangedEventArgs e)\n\t\t{\n\t\t\t// This event is raised by the ImapFolder and will be running in the IMAP Command Pipeline thread. Defer this back to the GUI thread.\n\t\t\tProgram.GuiContext.Send (MessageFlagsChangedInGuiThread, e);\n\t\t}\n\n\t\tvoid MessageExpungedInGuiThread (object state)\n\t\t{\n\t\t\tDebug.Assert (SynchronizationContext.Current == Program.GuiContext);\n\n\t\t\tvar e = (MessageEventArgs) state;\n\n\t\t\tlock (messages) {\n\t\t\t\tif (e.Index < messages.Count) {\n\t\t\t\t\tvar info = messages[e.Index];\n\t\t\t\t\tvar node = map[info];\n\n\t\t\t\t\tmessages.RemoveAt (e.Index);\n\t\t\t\t\tmap.Remove (info);\n\t\t\t\t\tnode.Remove ();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageExpunged (object sender, MessageEventArgs e)\n\t\t{\n\t\t\t// This event is raised by the ImapFolder and will be running in the IMAP Command Pipeline thread. Defer this back to the GUI thread.\n\t\t\tProgram.GuiContext.Send (MessageExpungedInGuiThread, e);\n\t\t}\n\n\t\tclass FetchNewMessagesCommand : ClientCommand<ImapClient>\n\t\t{\n\t\t\treadonly MessageList messageList;\n\t\t\treadonly IMailFolder folder;\n\t\t\tIList<IMessageSummary> summaries;\n\n\t\t\tpublic FetchNewMessagesCommand (ClientConnection<ImapClient> connection, IMailFolder folder, MessageList messageList) : base (connection)\n\t\t\t{\n\t\t\t\tthis.messageList = messageList;\n\t\t\t\tthis.folder = folder;\n\t\t\t}\n\n\t\t\tpublic override void Run (CancellationToken cancellationToken)\n\t\t\t{\n\t\t\t\tif (!folder.IsOpen)\n\t\t\t\t\tfolder.Open (FolderAccess.ReadWrite, cancellationToken);\n\n\t\t\t\tif (folder.Count > 0) {\n\t\t\t\t\tint currentCount;\n\n\t\t\t\t\tlock (messageList.messages) {\n\t\t\t\t\t\tcurrentCount = messageList.messages.Count;\n\t\t\t\t\t}\n\n\t\t\t\t\tsummaries = folder.Fetch (currentCount, currentCount + BatchSize, request, cancellationToken);\n\n\t\t\t\t\t// Proxy the PostProcess() method call to the GUI thread.\n\t\t\t\t\tProgram.RunOnMainThread (messageList, PostProcess);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvoid PostProcess ()\n\t\t\t{\n\t\t\t\tlock (messageList.messages) {\n\t\t\t\t\tmessageList.AddMessageSummaries (folder, summaries);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid FetchNewMessages (IMailFolder folder)\n\t\t{\n\t\t\tvar command = new FetchNewMessagesCommand (Program.ImapClientConnection, folder, this);\n\t\t\tProgram.ImapCommandPipeline.Enqueue (command);\n\t\t}\n\n\t\tvoid OnCountChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tvar folder = (IMailFolder) sender;\n\n\t\t\tFetchNewMessages (folder);\n\t\t}\n\n\t\tpublic event EventHandler<MessageSelectedEventArgs> MessageSelected;\n\n\t\tprotected override void OnAfterSelect (TreeViewEventArgs e)\n\t\t{\n\t\t\tvar handler = MessageSelected;\n\n\t\t\tif (handler != null) {\n\t\t\t\tvar info = (MessageInfo) e.Node.Tag;\n\n\t\t\t\tif (info.Summary.UniqueId.IsValid)\n\t\t\t\t\thandler (this, new MessageSelectedEventArgs (folder, info.Summary.UniqueId, info.Summary.Body));\n\t\t\t}\n\n\t\t\tbase.OnAfterSelect (e);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MessageSelectedEventArgs.cs",
    "content": "﻿using System;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\tclass MessageSelectedEventArgs : EventArgs\n\t{\n\t\tpublic MessageSelectedEventArgs (IMailFolder folder, UniqueId uid, BodyPart body)\n\t\t{\n\t\t\tFolder = folder;\n\t\t\tUniqueId = uid;\n\t\t\tBody = body;\n\t\t}\n\n\t\tpublic IMailFolder Folder {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic UniqueId UniqueId {\n\t\t\tget; private set;\n\t\t}\n\n\t\tpublic BodyPart Body {\n\t\t\tget; private set;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/MultipartRelatedImageContext.cs",
    "content": "﻿using System;\nusing System.IO;\n\nusing MimeKit;\nusing MimeKit.Text;\n\nnamespace ImapClientDemo\n{\n\tclass MultipartRelatedImageContext\n\t{\n\t\treadonly MultipartRelated related;\n\n\t\tpublic MultipartRelatedImageContext (MultipartRelated related)\n\t\t{\n\t\t\tthis.related = related;\n\t\t}\n\n\t\tstring GetDataUri (MimePart attachment)\n\t\t{\n\t\t\tusing (var memory = new MemoryStream ()) {\n\t\t\t\tattachment.Content.DecodeTo (memory);\n\t\t\t\tvar buffer = memory.GetBuffer ();\n\t\t\t\tvar length = (int) memory.Length;\n\t\t\t\tvar base64 = Convert.ToBase64String (buffer, 0, length);\n\n\t\t\t\treturn string.Format (\"data:{0};base64,{1}\", attachment.ContentType.MimeType, base64);\n\t\t\t}\n\t\t}\n\n\t\tpublic void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)\n\t\t{\n\t\t\tif (ctx.TagId != HtmlTagId.Image || ctx.IsEndTag) {\n\t\t\t\tctx.WriteTag (htmlWriter, true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// write the IMG tag, but don't write out the attributes.\n\t\t\tctx.WriteTag (htmlWriter, false);\n\n\t\t\t// manually write the attributes so that we can replace the SRC attributes\n\t\t\tforeach (var attribute in ctx.Attributes) {\n\t\t\t\tif (attribute.Id == HtmlAttributeId.Src) {\n\t\t\t\t\tint index;\n\t\t\t\t\tUri uri;\n\n\t\t\t\t\t// parse the <img src=...> attribute value into a Uri\n\t\t\t\t\tif (Uri.IsWellFormedUriString (attribute.Value, UriKind.Absolute))\n\t\t\t\t\t\turi = new Uri (attribute.Value, UriKind.Absolute);\n\t\t\t\t\telse\n\t\t\t\t\t\turi = new Uri (attribute.Value, UriKind.Relative);\n\n\t\t\t\t\t// locate the index of the attachment within the multipart/related (if it exists)\n\t\t\t\t\tif ((index = related.IndexOf (uri)) != -1) {\n\t\t\t\t\t\tif (!(related[index] is MimePart attachment)) {\n\t\t\t\t\t\t\t// the body part is not a basic leaf part (IOW it's a multipart or message-part)\n\t\t\t\t\t\t\thtmlWriter.WriteAttribute (attribute);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar data = GetDataUri (attachment);\n\n\t\t\t\t\t\thtmlWriter.WriteAttributeName (attribute.Name);\n\t\t\t\t\t\thtmlWriter.WriteAttributeValue (data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtmlWriter.WriteAttribute (attribute);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/Program.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nusing MailKit;\nusing MailKit.Net.Imap;\nusing MailKit.Security;\n\nnamespace ImapClientDemo\n{\n\tstatic class Program\n\t{\n\t\tpublic static ClientCommandPipeline<ImapClient> ImapCommandPipeline { get; private set; }\n\t\tpublic static ClientConnection<ImapClient> ImapClientConnection { get; set; }\n\n\t\tpublic static LoginWindow LoginWindow { get; private set; }\n\t\tpublic static MainWindow MainWindow { get; private set; }\n\n\t\tpublic static SynchronizationContext GuiContext { get; private set; }\n\t\tpublic static TaskScheduler GuiTaskScheduler { get; private set; }\n\t\tpublic static Thread GuiThread { get; private set; }\n\n\t\t/// <summary>\n\t\t/// The main entry point for the application.\n\t\t/// </summary>\n\t\t[STAThread]\n\t\tstatic void Main ()\n\t\t{\n\t\t\tApplication.EnableVisualStyles ();\n\t\t\tApplication.SetCompatibleTextRenderingDefault (false);\n\n\t\t\tMainWindow = new MainWindow ();\n\t\t\tLoginWindow = new LoginWindow ();\n\n\t\t\t// Note: SynchronizationContext.Current will be null *until* a Windows.Forms control is instantiated.\n\t\t\tGuiContext = SynchronizationContext.Current;\n\t\t\tGuiTaskScheduler = new CustomTaskScheduler (GuiContext);\n\t\t\tGuiThread = Thread.CurrentThread;\n\n\t\t\tImapCommandPipeline = new ClientCommandPipeline<ImapClient> (\"IMAP Command Pipeline\");\n\t\t\tImapCommandPipeline.CommandFailed += OnCommandFailed;\n\t\t\tImapCommandPipeline.ConnectionFailed += OnConnectionFailed;\n\t\t\tImapCommandPipeline.AuthenticationFailed += OnAuthenticationFailed;\n\t\t\tImapCommandPipeline.Start ();\n\n\t\t\tvar client = new ImapClient (new ProtocolLogger (\"imap.log\"));\n\t\t\tvar credentials = new NetworkCredential (string.Empty, string.Empty);\n\n\t\t\tImapClientConnection = new ClientConnection<ImapClient> (client, \"imap.gmail.com\", 993, SecureSocketOptions.SslOnConnect, credentials);\n\n\t\t\tApplication.Run (LoginWindow);\n\t\t}\n\n\t\tstatic void OnConnectionFailed (object state)\n\t\t{\n\t\t\tvar e = (ConnectionFailedEventArgs<ImapClient>) state;\n\n\t\t\tMessageBox.Show (MainWindow, e.Exception.Message, $\"Failed to connect to {e.Connection.Host}:{e.Connection.Port}\");\n\t\t\tLoginWindow.Visible = true;\n\t\t\tMainWindow.Visible = false;\n\t\t}\n\n\t\tstatic void OnConnectionFailed (object sender, ConnectionFailedEventArgs<ImapClient> e)\n\t\t{\n\t\t\t// This event is raised by the ImapClient and will be running in the IMAP Command Pipeline thread. Defer this back to the GUI thread.\n\t\t\tGuiContext.Send (OnConnectionFailed, e);\n\t\t}\n\n\t\tstatic void OnAuthenticationFailed (object state)\n\t\t{\n\t\t\tvar e = (AuthenticationFailedEventArgs<ImapClient>) state;\n\t\t\tstring text;\n\n\t\t\tif (e.Connection.Credentials.UserName.EndsWith (\"@gmail.com\", StringComparison.OrdinalIgnoreCase)) {\n\t\t\t\ttext = \"You probably need to go into your GMail settings to enable \\\"less secure apps\\\" in order \" +\n\t\t\t\t\t\"to get this demo to work.\\n\\nFor a real Mail application, you'll want to add support for \" +\n\t\t\t\t\t\"obtaining the user's OAuth2 credentials to prevent the need for user's to enable this, but \" +\n\t\t\t\t\t\"that is beyond the scope of this demo.\";\n\t\t\t} else {\n\t\t\t\ttext = e.Exception.Message;\n\t\t\t}\n\n\t\t\tMessageBox.Show (MainWindow, text, $\"Failed to authenticate {e.Connection.Credentials.UserName}\");\n\t\t\tLoginWindow.Visible = true;\n\t\t\tMainWindow.Visible = false;\n\t\t}\n\n\t\tstatic void OnAuthenticationFailed (object sender, AuthenticationFailedEventArgs<ImapClient> e)\n\t\t{\n\t\t\t// This event is raised by the ImapClient and will be running in the IMAP Command Pipeline thread. Defer this back to the GUI thread.\n\t\t\tGuiContext.Send (OnAuthenticationFailed, e);\n\t\t}\n\n\t\tstatic void OnCommandFailed (object state)\n\t\t{\n\t\t\tvar e = (CommandFailedEventArgs) state;\n\n\t\t\tMessageBox.Show (MainWindow, e.Exception.Message, \"Failed to send command.\");\n\t\t}\n\n\t\tstatic void OnCommandFailed (object sender, CommandFailedEventArgs e)\n\t\t{\n\t\t\t// This event is raised by the ImapClient and will be running in the IMAP Command Pipeline thread. Defer this back to the GUI thread.\n\t\t\tGuiContext.Send (OnCommandFailed, e);\n\t\t}\n\n\t\tdelegate void InvokeOnMainThreadDelegate ();\n\n\t\tpublic static void RunOnMainThread (Control control, Action action)\n\t\t{\n\t\t\tcontrol.Invoke (new InvokeOnMainThreadDelegate (action));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/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 (\"ImapClientDemo\")]\n[assembly: AssemblyDescription (\"MailKit Demo Application\")]\n[assembly: AssemblyConfiguration (\"\")]\n[assembly: AssemblyCompany (\"\")]\n[assembly: AssemblyProduct (\"ImapClientDemo\")]\n[assembly: AssemblyCopyright (\"Copyright © 2014-2022 Jeffrey Stedfast\")]\n[assembly: AssemblyTrademark (\"\")]\n[assembly: AssemblyCulture (\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible (false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid (\"73be8812-4d26-4551-a13e-a5a8bb3935e2\")]\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"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/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 ImapClientDemo.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\", \"17.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(\"ImapClientDemo.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}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/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.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: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\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\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\" 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: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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/Properties/Settings.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 ImapClientDemo.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"17.0.3.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "samples/ImapClientDemo/ImapClientDemo.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.28307.136\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ImapClientDemo\", \"ImapClientDemo\\ImapClientDemo.csproj\", \"{4E163AA3-C326-4BFC-B37D-04757280AE76}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{4E163AA3-C326-4BFC-B37D-04757280AE76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{4E163AA3-C326-4BFC-B37D-04757280AE76}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{4E163AA3-C326-4BFC-B37D-04757280AE76}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{4E163AA3-C326-4BFC-B37D-04757280AE76}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {0D86C2F7-C9B8-4FA7-82D6-888E17CAB492}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n  <application android:allowBackup=\"true\" android:icon=\"@mipmap/appicon\" android:label=\"@string/app_name\" android:roundIcon=\"@mipmap/appicon_round\" android:supportsRtl=\"true\">\n  </application>\n  <uses-permission android:name=\"android.permission.INTERNET\" />\n</manifest>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/FoldersActivity.cs",
    "content": "﻿//\n// FoldersActivity.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing Android.App;\nusing Android.OS;\nusing Android.Views;\nusing Android.Widget;\n\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\t[Activity (Label = \"Folders\")]\n\tpublic class FoldersActivity : Activity\n\t{\n\t\tFoldersAdapter adapter;\n\t\tListView listView;\n\n\t\tprotected async override void OnCreate (Bundle bundle)\n\t\t{\n\t\t\tbase.OnCreate (bundle);\n\n\t\t\tConsole.WriteLine (\"FoldersCreated!\");\n\n\t\t\tSetContentView (ImapClientDemo.Android.Resource.Layout.FoldersLayout);\n\n\t\t\tlistView = FindViewById<ListView> (ImapClientDemo.Android.Resource.Id.listView);\n\n\t\t\tadapter = new FoldersAdapter (this);\n\n\t\t\tlistView.Adapter = adapter;\n\t\t\tlistView.ItemClick += (sender, e) => {\n\t\t\t\tvar folder = adapter[e.Position];\n\n\t\t\t\tMail.CurrentFolder = folder;\n\n\t\t\t\tStartActivity (typeof (MessageListActivity));\n\t\t\t};\n\n\t\t\tawait Reload ();\n\t\t}\n\n\t\tasync Task Reload ()\n\t\t{\n\t\t\tvar personal = Mail.Client.GetFolder (Mail.Client.PersonalNamespaces[0]);\n\t\t\tvar folders = new List<IMailFolder> ();\n\n\t\t\t// Recursively load all folders and subfolders\n\t\t\tawait LoadChildFolders (folders, personal);\n\n\t\t\tadapter.Folders = folders;\n\t\t\tadapter.NotifyDataSetChanged ();\n\t\t}\n\n\t\t// Recursive function to load all folders and their subfolders\n\t\tasync Task LoadChildFolders (List<IMailFolder> folders, IMailFolder folder)\n\t\t{\n\t\t\tif (!folder.IsNamespace)\n\t\t\t\tfolders.Add (folder);\n\n\t\t\tif (folder.Attributes.HasFlag (FolderAttributes.HasNoChildren))\n\t\t\t\treturn;\n\n\t\t\tvar subfolders = await folder.GetSubfoldersAsync ();\n\n\t\t\tforeach (var sf in subfolders)\n\t\t\t\tawait LoadChildFolders (folders, sf);\n\t\t}\n\n\t\tpublic class FoldersAdapter : BaseAdapter<IMailFolder>\n\t\t{\n\t\t\tpublic FoldersAdapter (Activity parent)\n\t\t\t{\n\t\t\t\tParent = parent;\n\t\t\t\tFolders = new List<IMailFolder> ();\n\t\t\t}\n\n\t\t\tpublic List<IMailFolder> Folders { get;set; }\n\t\t\tpublic Activity Parent { get;set; }\n\n\t\t\tpublic override long GetItemId (int position)\n\t\t\t{\n\t\t\t\treturn position;\n\t\t\t}\n\n\t\t\tpublic override int Count {\n\t\t\t\tget { return Folders.Count; }\n\t\t\t}\n\n\t\t\tpublic override IMailFolder this [int index] {\n\t\t\t\tget { return Folders[index]; }\n\t\t\t}\n\n\t\t\tpublic override View GetView (int position, View convertView, ViewGroup parent)\n\t\t\t{\n\t\t\t\tvar view = convertView ?? LayoutInflater.FromContext (Parent).Inflate (global::Android.Resource.Layout.SimpleListItem1, parent, false);\n\n\t\t\t\tvar folder = Folders[position];\n\n\t\t\t\tview.FindViewById<TextView> (global::Android.Resource.Id.Text1).Text = folder.FullName;\n\n\t\t\t\treturn view;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/ImapClientDemo.Android.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <TargetFramework>net8.0-android</TargetFramework>\n        <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>\n        <OutputType>Exe</OutputType>\n        <Nullable>enable</Nullable>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <ApplicationId>com.companyname.ImapClientDemo.Android</ApplicationId>\n        <ApplicationVersion>1</ApplicationVersion>\n        <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    </PropertyGroup>\n    <ItemGroup>\n        <PackageReference Include=\"MailKit\" Version=\"4.15.1\" />\n    </ItemGroup>\n</Project>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/LoginActivity.cs",
    "content": "﻿//\n// LoginActivity.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nusing Android.App;\nusing Android.OS;\nusing Android.Widget;\n\nnamespace ImapClientDemo\n{\n\t[Activity (Label = \"Login\")]\n\tpublic class LoginActivity : Activity\n\t{\n\t\tTextView textServer;\n\t\tTextView textPort;\n\t\tTextView textLogin;\n\t\tTextView textPassword;\n\t\tCheckBox checkSsl;\n\t\tButton buttonLogin;\n\n\t\tprotected override void OnCreate (Bundle bundle)\n\t\t{\n\t\t\tbase.OnCreate (bundle);\n\n\t\t\tSetContentView (ImapClientDemo.Android.Resource.Layout.LoginLayout);\n\n\t\t\ttextServer = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textServer);\n\t\t\ttextPort = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textPort);\n\t\t\ttextLogin = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textLogin);\n\t\t\ttextPassword = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textPassword);\n\t\t\tcheckSsl = FindViewById<CheckBox> (ImapClientDemo.Android.Resource.Id.checkSsl);\n\t\t\tbuttonLogin = FindViewById<Button> (ImapClientDemo.Android.Resource.Id.buttonLogin);\n\n\t\t\tbuttonLogin.Click += buttonLogin_Click;\n\t\t}\n\n\t\tasync void buttonLogin_Click (object sender, EventArgs e)\n\t\t{\n\t\t\tbuttonLogin.Enabled = false;\n\n\t\t\tint.TryParse (textPort.Text, out var port);\n\n\t\t\ttry {\n\t\t\t\t// Note: for demo purposes, we're ignoring SSL validation errors (don't do this in production code)\n\t\t\t\tMail.Client.ServerCertificateValidationCallback = (s, certificate, chain, sslPolicyErrors) => true;\n\n\t\t\t\tawait Mail.Client.ConnectAsync (textServer.Text, port, checkSsl.Checked);\n\n\t\t\t\ttry { \n\t\t\t\t\tawait Mail.Client.AuthenticateAsync (textLogin.Text, textPassword.Text); \n\n\t\t\t\t\tStartActivity (typeof (FoldersActivity));\n\t\t\t\t} catch {\n\t\t\t\t\tToast.MakeText (this,\n\t\t\t\t\t\t\"Failed to Authenticate to server. If you are using GMail, then you probably \" +\n\t\t\t\t\t\t\"need to go into your GMail settings to enable \\\"less secure apps\\\" in order \" + \n\t\t\t\t\t\t\"to get this demo to work.\\n\\n\" +\n\t\t\t\t\t\t\"For a real Mail application, you'll want to add support for obtaining the \" +\n\t\t\t\t\t\t\"user's OAuth2 credentials to prevent the need for users to enable this, but \" +\n\t\t\t\t\t\t\"that is beyond the scope of this demo.\",\n\t\t\t\t\t\tToastLength.Long).Show ();\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tConsole.WriteLine (ex);\n\t\t\t\tToast.MakeText (this, \"Failed to Connect!\", ToastLength.Short).Show ();\n\t\t\t}\n\n\t\t\tbuttonLogin.Enabled = true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Mail.cs",
    "content": "﻿//\n// Mail.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace ImapClientDemo\n{\n\tpublic static class Mail\n\t{\n\t\tstatic Mail ()\n\t\t{\n\t\t\tClient = new ImapClient ();\n\t\t}\n\n\t\tpublic static ImapClient Client { get; set; }\n\n\t\tpublic static IMailFolder CurrentFolder { get;set; }\n\n\t\tpublic static MimeKit.MimeMessage CurrentMessage { get; set; }\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/MainActivity.cs",
    "content": "﻿//\n// MainActivity.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing Android.App;\nusing Android.OS;\n\nnamespace ImapClientDemo\n{\n\t[Activity (Label = \"ImapClientDemo.Android\", MainLauncher = true)]\n\tpublic class MainActivity : Activity\n\t{\n\t\tprotected override void OnCreate (Bundle bundle)\n\t\t{\n\t\t\tbase.OnCreate (bundle);\n\n\t\t\tStartActivity (typeof (LoginActivity));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/MessageListActivity.cs",
    "content": "﻿//\n// MessageListActivity.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing Android.App;\nusing Android.OS;\nusing Android.Views;\nusing Android.Widget;\nusing MailKit;\n\nnamespace ImapClientDemo\n{\n\t[Activity (Label = \"Messages\")]\n\tpublic class MessageListActivity : Activity\n\t{\n\t\treadonly FetchRequest request = new FetchRequest (MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.InternalDate);\n\t\tMessageListAdapter adapter;\n\t\tListView listView;\n\n\t\tprotected async override void OnCreate (Bundle bundle)\n\t\t{\n\t\t\tbase.OnCreate (bundle);\n\n\t\t\tTitle = Mail.CurrentFolder.FullName;\n\n\t\t\tSetContentView (ImapClientDemo.Android.Resource.Layout.MessagesLayout);\n\n\t\t\tlistView = FindViewById<ListView> (ImapClientDemo.Android.Resource.Id.listView);\n\n\t\t\tadapter = new MessageListAdapter (this);\n\t\t\tlistView.Adapter = adapter;\n\n\t\t\tlistView.ItemClick += async (sender, e) => {\n\t\t\t\tvar summary = adapter[e.Position];\n\n\t\t\t\tvar msg = await Mail.CurrentFolder.GetMessageAsync (summary.UniqueId);\n\n\t\t\t\tMail.CurrentMessage = msg;\n\n\t\t\t\tStartActivity (typeof (MessageViewActivity));\n\t\t\t};\n\n\t\t\tawait Reload ();\n\t\t}\n\n\t\tasync Task Reload ()\n\t\t{\n\t\t\t// Open the folder for reading\n\t\t\tawait Mail.CurrentFolder.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t// Get the message summaries\n\t\t\tvar summaries = await Mail.CurrentFolder.FetchAsync (0, -1, request);\n\n\t\t\t// Assign to adapter and notify changed\n\t\t\tadapter.Messages = summaries.ToList ();\n\t\t\tadapter.NotifyDataSetChanged ();\n\t\t}\n\n\t\tpublic class MessageListAdapter : BaseAdapter<IMessageSummary>\n\t\t{\n\t\t\tpublic MessageListAdapter (Activity parent)\n\t\t\t{\n\t\t\t\tParent = parent;\n\t\t\t\tMessages = new List<IMessageSummary> ();\n\t\t\t}\n\n\t\t\tpublic Activity Parent { get;set; }\n\t\t\tpublic List<IMessageSummary> Messages { get;set; }\n\n\t\t\tpublic override long GetItemId (int position)\n\t\t\t{\n\t\t\t\treturn position;\n\t\t\t}\n\n\t\t\tpublic override int Count {\n\t\t\t\tget { return Messages.Count; }\n\t\t\t}\n\n\t\t\tpublic override IMessageSummary this [int index] {\n\t\t\t\tget { return Messages [index]; }\n\t\t\t}\n\n\t\t\tpublic override View GetView (int position, View convertView, ViewGroup parent)\n\t\t\t{\n\t\t\t\tvar view = convertView ?? LayoutInflater.FromContext (Parent).Inflate (ImapClientDemo.Android.Resource.Layout.MessageListItemLayout, parent, false);\n\t\t\t\tvar msg = Messages [position];\n\n\t\t\t\tview.FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textSubject).Text = msg.Envelope.Subject;\n\t\t\t\tview.FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textFrom).Text = msg.Envelope.From.ToString ();\n\t\t\t\tview.FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textDate).Text = msg.Envelope.Date.Value.LocalDateTime.ToString ();\n\n\t\t\t\treturn view;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/MessageViewActivity.cs",
    "content": "﻿//\n// MessageViewActivity.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing Android.App;\nusing Android.OS;\nusing Android.Widget;\n\nnamespace ImapClientDemo\n{\n\t[Activity (Label = \"Details\")]\n\tpublic class MessageViewActivity : Activity\n\t{\n\t\tTextView textSubject;\n\t\tTextView textFrom;\n\t\tTextView textDate;\n\t\tTextView textBody;\n\n\t\tprotected override void OnCreate (Bundle bundle)\n\t\t{\n\t\t\tbase.OnCreate (bundle);\n\n\t\t\tSetContentView (ImapClientDemo.Android.Resource.Layout.ViewMessageLayout);\n\n\t\t\ttextSubject = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textSubject);\n\t\t\ttextFrom = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textFrom);\n\t\t\ttextDate = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textDate);\n\t\t\ttextBody = FindViewById<TextView> (ImapClientDemo.Android.Resource.Id.textBody);\n\n\t\t\tvar msg = Mail.CurrentMessage;\n\n\t\t\ttextSubject.Text = msg.Subject;\n\t\t\ttextFrom.Text = msg.From.ToString ();\n\t\t\ttextDate.Text = msg.Date.LocalDateTime.ToString ();\n\t\t\ttextBody.Text = msg.TextBody;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/AboutResources.txt",
    "content": "Images, layout descriptions, binary blobs and string dictionaries can be included \nin your application as resource files.  Various Android APIs are designed to \noperate on the resource IDs instead of dealing with images, strings or binary blobs \ndirectly.\n\nFor example, a sample Android app that contains a user interface layout (main.axml),\nan internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) \nwould keep its resources in the \"Resources\" directory of the application:\n\nResources/\n    drawable/\n        icon.png\n\n    layout/\n        main.axml\n\n    values/\n        strings.xml\n\nIn order to get the build system to recognize Android resources, set the build action to\n\"AndroidResource\".  The native Android APIs do not operate directly with filenames, but \ninstead operate on resource IDs.  When you compile an Android application that uses resources, \nthe build system will package the resources for distribution and generate a class called \"R\" \n(this is an Android convention) that contains the tokens for each one of the resources \nincluded. For example, for the above Resources layout, this is what the R class would expose:\n\npublic class R {\n    public class drawable {\n        public const int icon = 0x123;\n    }\n\n    public class layout {\n        public const int main = 0x456;\n    }\n\n    public class strings {\n        public const int first_string = 0xabc;\n        public const int second_string = 0xbcd;\n    }\n}\n\nYou would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main \nto reference the layout/main.axml file, or R.strings.first_string to reference the first \nstring in the dictionary file values/strings.xml.\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/Resource.designer.cs",
    "content": "#pragma warning disable 1591\n//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\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\n[assembly: global::Android.Runtime.ResourceDesignerAttribute(\"ImapClientDemo.Resource\", IsApplication=true)]\n\nnamespace ImapClientDemo\n{\n\t\n\t\n\t[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Xamarin.Android.Build.Tasks\", \"13.2.0.93\")]\n\tpublic partial class Resource\n\t{\n\t\t\n\t\tstatic Resource()\n\t\t{\n\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t}\n\t\t\n\t\tpublic static void UpdateIdValues()\n\t\t{\n\t\t}\n\t\t\n\t\tpublic partial class Attribute\n\t\t{\n\t\t\t\n\t\t\tstatic Attribute()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Attribute()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Drawable\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7F010000\n\t\t\tpublic const int Icon = 2130771968;\n\t\t\t\n\t\t\tstatic Drawable()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Drawable()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Id\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020000\n\t\t\tpublic const int buttonLogin = 2130837504;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020001\n\t\t\tpublic const int checkSsl = 2130837505;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020002\n\t\t\tpublic const int listView = 2130837506;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020003\n\t\t\tpublic const int myButton = 2130837507;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020004\n\t\t\tpublic const int scrollView = 2130837508;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020005\n\t\t\tpublic const int textBody = 2130837509;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020006\n\t\t\tpublic const int textDate = 2130837510;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020007\n\t\t\tpublic const int textFrom = 2130837511;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020008\n\t\t\tpublic const int textLogin = 2130837512;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F020009\n\t\t\tpublic const int textPassword = 2130837513;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F02000A\n\t\t\tpublic const int textPort = 2130837514;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F02000B\n\t\t\tpublic const int textServer = 2130837515;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F02000C\n\t\t\tpublic const int textSubject = 2130837516;\n\t\t\t\n\t\t\tstatic Id()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Id()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Layout\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7F030000\n\t\t\tpublic const int FoldersLayout = 2130903040;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F030001\n\t\t\tpublic const int LoginLayout = 2130903041;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F030002\n\t\t\tpublic const int Main = 2130903042;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F030003\n\t\t\tpublic const int MessageListItemLayout = 2130903043;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F030004\n\t\t\tpublic const int MessagesLayout = 2130903044;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F030005\n\t\t\tpublic const int ViewMessageLayout = 2130903045;\n\t\t\t\n\t\t\tstatic Layout()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Layout()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class String\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7F040000\n\t\t\tpublic const int app_name = 2130968576;\n\t\t\t\n\t\t\t// aapt resource value: 0x7F040001\n\t\t\tpublic const int hello = 2130968577;\n\t\t\t\n\t\t\tstatic String()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate String()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t\t\n\t\tpublic partial class Style\n\t\t{\n\t\t\t\n\t\t\t// aapt resource value: 0x7F050000\n\t\t\tpublic const int AppTheme = 2131034112;\n\t\t\t\n\t\t\tstatic Style()\n\t\t\t{\n\t\t\t\tglobal::Android.Runtime.ResourceIdManager.UpdateIdValues();\n\t\t\t}\n\t\t\t\n\t\t\tprivate Style()\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}\n#pragma warning restore 1591\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/layout/FoldersLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:minWidth=\"25px\"\n    android:minHeight=\"25px\">\n    <ListView\n        android:minWidth=\"25px\"\n        android:minHeight=\"25px\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:id=\"@+id/listView\"\n        android:padding=\"10dp\" />\n</LinearLayout>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/layout/LoginLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:padding=\"16dp\">\n    <EditText\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textServer\"\n        android:hint=\"Server (eg: imap.gmail.com)\" />\n    <EditText\n        android:inputType=\"number\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textPort\"\n        android:hint=\"Port (eg: 993)\" />\n    <CheckBox\n        android:text=\"Use SSL\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/checkSsl\"\n        android:layout_marginBottom=\"30dp\" />\n    <EditText\n        android:inputType=\"textEmailAddress\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textLogin\"\n        android:hint=\"Login / Username / Email\" />\n    <EditText\n        android:inputType=\"textPassword\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textPassword\"\n        android:hint=\"Password\" />\n    <Button\n        android:text=\"Login\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/buttonLogin\"\n        android:layout_marginTop=\"20dp\" />\n</LinearLayout>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/layout/Main.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    >\n<Button  \n    android:id=\"@+id/myButton\"\n    android:layout_width=\"match_parent\" \n    android:layout_height=\"wrap_content\" \n    android:text=\"@string/hello\"\n    />\n</LinearLayout>\n\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/layout/MessageListItemLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\">\n    <TextView\n        android:text=\"Large Text\"\n        android:textAppearance=\"?android:attr/textAppearanceLarge\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textSubject\" />\n    <TextView\n        android:text=\"Medium Text\"\n        android:textAppearance=\"?android:attr/textAppearanceMedium\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textFrom\" />\n    <TextView\n        android:text=\"Small Text\"\n        android:textAppearance=\"?android:attr/textAppearanceSmall\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textDate\" />\n</LinearLayout>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/layout/MessagesLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:minWidth=\"25px\"\n    android:minHeight=\"25px\">\n    <ListView\n        android:minWidth=\"25px\"\n        android:minHeight=\"25px\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:id=\"@+id/listView\"\n        android:padding=\"10dp\" />\n</LinearLayout>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/layout/ViewMessageLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"fill_parent\"\n    android:layout_height=\"fill_parent\"\n    android:padding=\"10dp\">\n    <TextView\n        android:text=\"This is the email subject...\"\n        android:textAppearance=\"?android:attr/textAppearanceLarge\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textSubject\" />\n    <TextView\n        android:text=\"From: somebody@email.com\"\n        android:textAppearance=\"?android:attr/textAppearanceMedium\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textFrom\" />\n    <TextView\n        android:text=\"Friday, January 31st, 2015 @ 12:30 pm\"\n        android:textAppearance=\"?android:attr/textAppearanceSmall\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:id=\"@+id/textDate\" />\n    <ScrollView\n        android:minWidth=\"25px\"\n        android:minHeight=\"25px\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:id=\"@+id/scrollView\">\n        <TextView\n            android:text=\"Medium Text\"\n            android:textAppearance=\"?android:attr/textAppearanceMedium\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:id=\"@+id/textBody\"\n            android:layout_weight=\"1\" />\n    </ScrollView>\n</LinearLayout>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/mipmap-anydpi-v26/appicon.xml",
    "content": "<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n  <background android:drawable=\"@mipmap/appicon_background\" />\n  <foreground android:drawable=\"@mipmap/appicon_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/mipmap-anydpi-v26/appicon_round.xml",
    "content": "<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n  <background android:drawable=\"@mipmap/appicon_background\" />\n  <foreground android:drawable=\"@mipmap/appicon_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/values/Strings.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"hello\">Hello World, Click Me!</string>\n\t<string name=\"app_name\">ImapClientDemo.Android</string>\n</resources>\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android/Resources/values/themes.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<resources>\n    <style name=\"AppTheme\" parent=\"@android:style/Theme.Holo.Light\">        \n    </style>\n</resources>\n"
  },
  {
    "path": "samples/ImapClientDemo.Android/ImapClientDemo.Android.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.0.31903.59\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ImapClientDemo.Android\", \"ImapClientDemo.Android\\ImapClientDemo.Android.csproj\", \"{9E3D80A0-B988-4BA8-9327-3CD7BE5852DF}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9E3D80A0-B988-4BA8-9327-3CD7BE5852DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9E3D80A0-B988-4BA8-9327-3CD7BE5852DF}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9E3D80A0-B988-4BA8-9327-3CD7BE5852DF}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9E3D80A0-B988-4BA8-9327-3CD7BE5852DF}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/AppDelegate.cs",
    "content": "﻿//\n// AppDelegate.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing Foundation;\nusing UIKit;\n\nnamespace ImapClientDemo.iOS\n{\n\t// The UIApplicationDelegate for the application. This class is responsible for launching the\n\t// User Interface of the application, as well as listening (and optionally responding) to\n\t// application events from iOS.\n\t[Register (\"AppDelegate\")]\n\tpublic class AppDelegate : UIApplicationDelegate\n\t{\n\t\tUINavigationController navController;\n\t\tLoginViewController loginController;\n\t\tUIWindow window;\n\n\t\t//\n\t\t// This method is invoked when the application has loaded and is ready to run. In this\n\t\t// method you should instantiate the window, load the UI into it and then make the window\n\t\t// visible.\n\t\t//\n\t\t// You have 17 seconds to return from this method, or iOS will terminate your application.\n\t\t//\n\t\tpublic override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)\n\t\t{\n\t\t\t// create a new window instance based on the screen size\n\t\t\twindow = new UIWindow (UIScreen.MainScreen.Bounds);\n\t\t\t\n\t\t\tloginController = new LoginViewController ();\n\t\t\tnavController = new UINavigationController (loginController);\n\n\t\t\t// If you have defined a root view controller, set it here:\n\t\t\twindow.RootViewController = navController;\n\t\t\t\n\t\t\t// make the window visible\n\t\t\twindow.MakeKeyAndVisible ();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\": [\n    {\n      \"scale\": \"2x\",\n      \"size\": \"20x20\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon40.png\"\n    },\n    {\n      \"scale\": \"3x\",\n      \"size\": \"20x20\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon60.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"29x29\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon58.png\"\n    },\n    {\n      \"scale\": \"3x\",\n      \"size\": \"29x29\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon87.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"40x40\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon80.png\"\n    },\n    {\n      \"scale\": \"3x\",\n      \"size\": \"40x40\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon120.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"60x60\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon120.png\"\n    },\n    {\n      \"scale\": \"3x\",\n      \"size\": \"60x60\",\n      \"idiom\": \"iphone\",\n      \"filename\": \"Icon180.png\"\n    },\n    {\n      \"scale\": \"1x\",\n      \"size\": \"20x20\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon20.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"20x20\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon40.png\"\n    },\n    {\n      \"scale\": \"1x\",\n      \"size\": \"29x29\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon29.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"29x29\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon58.png\"\n    },\n    {\n      \"scale\": \"1x\",\n      \"size\": \"40x40\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon40.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"40x40\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon80.png\"\n    },\n    {\n      \"scale\": \"1x\",\n      \"size\": \"76x76\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon76.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"76x76\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon152.png\"\n    },\n    {\n      \"scale\": \"2x\",\n      \"size\": \"83.5x83.5\",\n      \"idiom\": \"ipad\",\n      \"filename\": \"Icon167.png\"\n    },\n    {\n      \"scale\": \"1x\",\n      \"size\": \"1024x1024\",\n      \"idiom\": \"ios-marketing\",\n      \"filename\": \"Icon1024.png\"\n    }\n  ],\n  \"properties\": {},\n  \"info\": {\n    \"version\": 1,\n    \"author\": \"xcode\"\n  }\n}"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/Entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/FoldersViewController.cs",
    "content": "﻿//\n// FoldersViewController.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MonoTouch.Dialog;\n\nusing Foundation;\nusing UIKit;\n\nusing MailKit;\n\nnamespace ImapClientDemo.iOS\n{\n\tpublic class FoldersViewController : DialogViewController\n\t{\n\t\tMessageListViewController messageListViewController;\n\n\t\tpublic FoldersViewController () : base (UITableViewStyle.Grouped, null, true)\n\t\t{\n\t\t\tRoot = new RootElement (\"Folders\");\n\t\t}\n\n\t\tpublic async override void ViewDidLoad ()\n\t\t{\n\t\t\tbase.ViewDidLoad ();\n\n\t\t\tvar foldersSection = new Section ();\n\n\t\t\tvar personal = Mail.Client.GetFolder (Mail.Client.PersonalNamespaces[0]);\n\n\t\t\t// Recursively load all folders and subfolders\n\t\t\tawait LoadChildFolders (foldersSection, personal);\n\n\t\t\tRoot.Clear ();\n\t\t\tRoot.Add (foldersSection);\n\t\t}\n\n\t\t// Recursive function to load all folders and their subfolders\n\t\tasync Task LoadChildFolders (Section foldersSection, IMailFolder folder)\n\t\t{\n\t\t\tif (!folder.IsNamespace) {\n\t\t\t\tfoldersSection.Add (new StyledStringElement (folder.FullName, () =>\n\t\t\t\t\tOpenFolder (folder)));\n\t\t\t}\n\n\t\t\tif (folder.Attributes.HasFlag (FolderAttributes.HasNoChildren))\n\t\t\t\treturn;\n\n\t\t\tvar subfolders = await folder.GetSubfoldersAsync ();\n\n\t\t\tforeach (var sf in subfolders)\n\t\t\t\tawait LoadChildFolders (foldersSection, sf);\n\t\t}\n\n\t\tvoid OpenFolder (IMailFolder folder)\n\t\t{\n\t\t\tmessageListViewController = new MessageListViewController (folder);\n\t\t\tNavigationController.PushViewController (messageListViewController, true);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/ImapClientDemo.iOS.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <TargetFramework>net8.0-ios</TargetFramework>\n        <OutputType>Exe</OutputType>\n        <Nullable>enable</Nullable>\n        <ImplicitUsings>true</ImplicitUsings>\n        <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>\n    </PropertyGroup>\n    <ItemGroup>\n        <PackageReference Include=\"MailKit\" Version=\"4.15.1\" />\n        <PackageReference Include=\"Drastic.MonoTouch.Dialog\" Version=\"1.0.0\" />\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/Info.plist",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>CFBundleDisplayName</key>\n    <string>ImapClientDemo.iOS</string>\n    <key>CFBundleIdentifier</key>\n    <string>com.companyname.ImapClientDemo.iOS</string>\n    <key>CFBundleShortVersionString</key>\n    <string>1.0</string>\n    <key>CFBundleVersion</key>\n    <string>1.0</string>\n    <key>LSRequiresIPhoneOS</key>\n    <true/>\n    <key>UIDeviceFamily</key>\n    <array>\n        <integer>1</integer>\n        <integer>2</integer>\n    </array>\n    <key>UILaunchStoryboardName</key>\n    <string>LaunchScreen</string>\n    <key>UIRequiredDeviceCapabilities</key>\n    <array>\n        <string>armv7</string>\n    </array>\n    <key>UISupportedInterfaceOrientations</key>\n    <array>\n        <string>UIInterfaceOrientationPortrait</string>\n        <string>UIInterfaceOrientationLandscapeLeft</string>\n        <string>UIInterfaceOrientationLandscapeRight</string>\n    </array>\n    <key>UISupportedInterfaceOrientations~ipad</key>\n    <array>\n        <string>UIInterfaceOrientationPortrait</string>\n        <string>UIInterfaceOrientationPortraitUpsideDown</string>\n        <string>UIInterfaceOrientationLandscapeLeft</string>\n        <string>UIInterfaceOrientationLandscapeRight</string>\n    </array>\n    <key>XSAppIconAssets</key>\n    <string>Assets.xcassets/AppIcon.appiconset</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/LaunchScreen.storyboard",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"222\" launchScreen=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <scene sceneID=\"221\">\n            <objects>\n                <viewController id=\"222\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"219\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"220\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"223\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"736\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"224\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-200\" y=\"-388\"/>\n        </scene>\n    </scenes>\n</document>"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/LoginViewController.cs",
    "content": "﻿//\n// LoginViewController.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\n\nusing MonoTouch.Dialog;\n\nusing UIKit;\n\nnamespace ImapClientDemo.iOS\n{\n\tpublic class LoginViewController : DialogViewController\n\t{\n\t\treadonly EntryElement hostEntry, portEntry, userEntry, passwordEntry;\n\t\treadonly FoldersViewController foldersViewController;\n\t\treadonly CheckboxElement sslCheckbox;\n\n\t\tpublic LoginViewController () : base (UITableViewStyle.Grouped, null)\n\t\t{\n\t\t\thostEntry = new EntryElement (\"Host\", \"imap.gmail.com\", \"imap.gmail.com\");\n\t\t\tportEntry = new EntryElement (\"Port\", \"993\", \"993\") {\n\t\t\t\tKeyboardType = UIKeyboardType.NumberPad\n\t\t\t};\n\t\t\tsslCheckbox = new CheckboxElement (\"Use SSL\", true);\n\n\t\t\tuserEntry = new EntryElement (\"Username\", \"Email / Username\", \"\");\n\t\t\tpasswordEntry = new EntryElement (\"Password\", \"password\", \"\", true);\n\n\t\t\tRoot = new RootElement (\"IMAP Login\") {\n\t\t\t\tnew Section (\"Server\") {\n\t\t\t\t\thostEntry,\n\t\t\t\t\tportEntry,\n\t\t\t\t\tsslCheckbox\n\t\t\t\t},\n\t\t\t\tnew Section (\"Account\") {\n\t\t\t\t\tuserEntry,\n\t\t\t\t\tpasswordEntry\n\t\t\t\t},\n\t\t\t\tnew Section {\n\t\t\t\t\tnew StyledStringElement (\"Login\", Login)\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfoldersViewController = new FoldersViewController ();\n\t\t}\n\n\t\tasync void Login ()\n\t\t{\n\t\t\thostEntry.FetchValue ();\n\t\t\tportEntry.FetchValue ();\n\t\t\tuserEntry.FetchValue ();\n\t\t\tpasswordEntry.FetchValue ();\n\n\t\t\tint.TryParse (portEntry.Value, out var port);\n\n\t\t\ttry {\n\t\t\t\tif (Mail.Client.IsConnected)\n\t\t\t\t\tawait Mail.Client.DisconnectAsync (true);\n\n\t\t\t\t// Note: for demo purposes, we're ignoring SSL validation errors (don't do this in production code)\n\t\t\t\tMail.Client.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;\n\n\t\t\t\t// Connect to server\n\t\t\t\tawait Mail.Client.ConnectAsync (hostEntry.Value, port, sslCheckbox.Value);\n\n\t\t\t\ttry {\n\t\t\t\t\t// Authenticate now that we're connected\n\t\t\t\t\tawait Mail.Client.AuthenticateAsync (userEntry.Value, passwordEntry.Value);\n\n\t\t\t\t\t// Show the folders view controller\n\t\t\t\t\tNavigationController.PushViewController (foldersViewController, true);\n\t\t\t\t} catch (Exception aex) {\n\t\t\t\t\tConsole.WriteLine (aex);\n\t\t\t\t\tMail.MessageBox (\"Authentication Error\",\n\t\t\t\t\t\t\"Failed to Authenticate to server. If you are using GMail, then you probably \" +\n\t\t\t\t\t\t\"need to go into your GMail settings to enable \\\"less secure apps\\\" in order \" + \n\t\t\t\t\t\t\"to get this demo to work.\\n\\n\" +\n\t\t\t\t\t\t\"For a real Mail application, you'll want to add support for obtaining the \" +\n\t\t\t\t\t\t\"user's OAuth2 credentials to prevent the need for user's to enable this, but \" +\n\t\t\t\t\t\t\"that is beyond the scope of this demo.\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (Exception ex) {\n\t\t\t\tConsole.WriteLine (ex);\n\t\t\t\tMail.MessageBox (\"Connection Error\", \"Failed to connect to server.\");\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/Mail.cs",
    "content": "﻿using System;\n\nusing UIKit;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace ImapClientDemo.iOS\n{\n\tpublic static class Mail\n\t{\n\t\tstatic Mail ()\n\t\t{\n\t\t\tClient = new ImapClient ();\n\t\t}\n\n\t\tpublic static ImapClient Client { get; set; }\n\n\t\tpublic static void MessageBox (string title, string message)\n\t\t{\n\t\t\tvar av = new UIAlertView (title, message, (IUIAlertViewDelegate) null, \"OK\");\n\t\t\tav.Show ();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/Main.cs",
    "content": "﻿//\n// Main.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nusing Foundation;\nusing UIKit;\n\nnamespace ImapClientDemo.iOS\n{\n\tpublic class Application\n\t{\n\t\t// This is the main entry point of the application.\n\t\tstatic void Main (string[] args)\n\t\t{\n\t\t\t// if you want to use a different Application Delegate class from \"AppDelegate\"\n\t\t\t// you can specify it here.\n\t\t\tUIApplication.Main (args, null, typeof (AppDelegate));\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/MessageListViewController.cs",
    "content": "﻿//\n// MessageListViewController.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nusing MonoTouch.Dialog;\n\nusing Foundation;\nusing UIKit;\n\nusing MailKit;\n\nnamespace ImapClientDemo.iOS\n{\n\tpublic partial class MessageListViewController : DialogViewController\n\t{\n\t\treadonly FetchRequest request = new FetchRequest (MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope | MessageSummaryItems.InternalDate);\n\t\tMessageViewController viewMessageViewController;\n\n\t\tpublic MessageListViewController (IMailFolder folder) : base (UITableViewStyle.Grouped, null, true)\n\t\t{\n\t\t\tFolder = folder;\n\n\t\t\tRoot = new RootElement (folder.FullName) {\n\t\t\t\tnew Section ()\n\t\t\t};\n\t\t}\n\n\t\tpublic IMailFolder Folder { get; private set; }\n\n\t\tpublic async override void ViewDidLoad ()\n\t\t{\n\t\t\tbase.ViewDidLoad ();\n\n\t\t\t// Open the folder for reading\n\t\t\tawait Folder.OpenAsync (FolderAccess.ReadOnly);\n\n\t\t\t// Get the message summaries\n\t\t\tvar summaries = await Folder.FetchAsync (0, -1, request);\n\n\t\t\tvar sectionMessages = new Section ();\n\n\t\t\t// Loop through all the message summaries\n\t\t\tforeach (var s in summaries) {\n\t\t\t\t// Add an item to the UI section/list\n\t\t\t\tsectionMessages.Add (new MessageElement (async (viewController, tableView, indexPath) => {\n\t\t\t\t\t// When a message is selected, fetch the actual message by UID\n\t\t\t\t\tvar msg = await Folder.GetMessageAsync (summaries [indexPath.Row].UniqueId);\n\n\t\t\t\t\t// Show the message details view controller\n\t\t\t\t\tviewMessageViewController = new MessageViewController (msg);\n\t\t\t\t\tNavigationController.PushViewController (viewMessageViewController, true);\n\t\t\t\t}) {\n\t\t\t\t\tSender = s.Envelope.Sender.ToString (),\n\t\t\t\t\tSubject = s.Envelope.Subject,\n\t\t\t\t\tBody = \"\",\n\t\t\t\t\tDate = s.Envelope.Date.Value.LocalDateTime,\n\t\t\t\t\tNewFlag = false,\n\t\t\t\t\tMessageCount = 0,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tRoot.Clear ();\n\t\t\tRoot.Add (sectionMessages);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/MessageViewController.cs",
    "content": "﻿//\n// MessageViewController.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nusing MonoTouch.Dialog;\n\nusing Foundation;\nusing UIKit;\n\nusing MimeKit;\n\nnamespace ImapClientDemo.iOS\n{\n\tpublic class MessageViewController : DialogViewController\n\t{\n\t\tpublic MessageViewController (MimeMessage msg) : base (UITableViewStyle.Grouped, null, true)\n\t\t{\n\t\t\tRoot = new RootElement (\"Details\") {\n\t\t\t\tnew Section {\n\t\t\t\t\tnew StyledMultilineElement (msg.Subject),\n\t\t\t\t\tnew StyledMultilineElement (\"From:\", msg.From.ToString ()),\n\t\t\t\t\tnew StyledStringElement (msg.Date.LocalDateTime.ToString ()) {\n\t\t\t\t\t\tFont = UIFont.SystemFontOfSize (12f)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tnew Section {\n\t\t\t\t\tnew StyledMultilineElement (msg.TextBody) {\n\t\t\t\t\t\tFont = UIFont.SystemFontOfSize (12f)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/MultipartRelatedUrlCache.cs",
    "content": "﻿//\n// MultipartRelatedUrlCache.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2013-2024 Xamarin Inc. (www.xamarin.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\n\nusing Foundation;\n\nusing MimeKit;\n\nnamespace ImapClientDemo.iOS {\n\tpublic class MultipartRelatedUrlCache : NSUrlCache\n\t{\n\t\treadonly MultipartRelated related;\n\n\t\tpublic MultipartRelatedUrlCache (MultipartRelated related)\n\t\t{\n\t\t\tthis.related = related;\n\t\t}\n\n\t\tpublic override NSCachedUrlResponse CachedResponseForRequest (NSUrlRequest request)\n\t\t{\n\t\t\tvar uri = (Uri) request.Url;\n\t\t\tint index;\n\n\t\t\tif ((index = related.IndexOf (uri)) != -1) {\n\t\t\t\tif (related[index] is MimePart part) {\n\t\t\t\t\tvar mimeType = part.ContentType.MimeType;\n\t\t\t\t\tvar charset = part.ContentType.Charset;\n\t\t\t\t\tNSUrlResponse response;\n\t\t\t\t\tNSData data;\n\n\t\t\t\t\tusing (var content = part.Content.Open ())\n\t\t\t\t\t\tdata = NSData.FromStream (content);\n\n\t\t\t\t\tresponse = new NSUrlResponse (request.Url, mimeType, (int) (uint)data.Length, charset);\n\n\t\t\t\t\treturn new NSCachedUrlResponse (response, data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn base.CachedResponseForRequest (request);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/Resources/LaunchScreen.xib",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6214\" systemVersion=\"14A314h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6207\" />\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\" />\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" />\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\" />\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\" />\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\" />\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2017 \" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\"\n                    minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\" />\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\" />\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\" />\n                    <nil key=\"highlightedColor\" />\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"NewApp\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\"\n                    minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\" />\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\" />\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\" />\n                    <nil key=\"highlightedColor\" />\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\" />\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\" />\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\" />\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\" />\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\" />\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\" />\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\" />\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\" />\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\" />\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\" />\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS/SceneDelegate.cs",
    "content": "namespace ImapClientDemo.iOS;\n\n[Register (\"SceneDelegate\")]\npublic class SceneDelegate : UIResponder, IUIWindowSceneDelegate {\n\n\t[Export (\"window\")]\n\tpublic UIWindow? Window { get; set; }\n\n\t[Export (\"scene:willConnectToSession:options:\")]\n\tpublic void WillConnect (UIScene scene, UISceneSession session, UISceneConnectionOptions connectionOptions)\n\t{\n\t\t// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.\n\t\t// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.\n\t\t// This delegate does not imply the connecting scene or session are new (see UIApplicationDelegate `GetConfiguration` instead).\n\t}\n\n\t[Export (\"sceneDidDisconnect:\")]\n\tpublic void DidDisconnect (UIScene scene)\n\t{\n\t\t// Called as the scene is being released by the system.\n\t\t// This occurs shortly after the scene enters the background, or when its session is discarded.\n\t\t// Release any resources associated with this scene that can be re-created the next time the scene connects.\n\t\t// The scene may re-connect later, as its session was not necessarily discarded (see UIApplicationDelegate `DidDiscardSceneSessions` instead).\n\t}\n\n\t[Export (\"sceneDidBecomeActive:\")]\n\tpublic void DidBecomeActive (UIScene scene)\n\t{\n\t\t// Called when the scene has moved from an inactive state to an active state.\n\t\t// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.\n\t}\n\n\t[Export (\"sceneWillResignActive:\")]\n\tpublic void WillResignActive (UIScene scene)\n\t{\n\t\t// Called when the scene will move from an active state to an inactive state.\n\t\t// This may occur due to temporary interruptions (ex. an incoming phone call).\n\t}\n\n\t[Export (\"sceneWillEnterForeground:\")]\n\tpublic void WillEnterForeground (UIScene scene)\n\t{\n\t\t// Called as the scene transitions from the background to the foreground.\n\t\t// Use this method to undo the changes made on entering the background.\n\t}\n\n\t[Export (\"sceneDidEnterBackground:\")]\n\tpublic void DidEnterBackground (UIScene scene)\n\t{\n\t\t// Called as the scene transitions from the foreground to the background.\n\t\t// Use this method to save data, release shared resources, and store enough scene-specific state information\n\t\t// to restore the scene back to its current state.\n\t}\n}\n"
  },
  {
    "path": "samples/ImapClientDemo.iOS/ImapClientDemo.iOS.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.0.31903.59\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ImapClientDemo.iOS\", \"ImapClientDemo.iOS\\ImapClientDemo.iOS.csproj\", \"{764BD6BF-F53D-43E6-9D25-AD0B506BAFC7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{764BD6BF-F53D-43E6-9D25-AD0B506BAFC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{764BD6BF-F53D-43E6-9D25-AD0B506BAFC7}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{764BD6BF-F53D-43E6-9D25-AD0B506BAFC7}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{764BD6BF-F53D-43E6-9D25-AD0B506BAFC7}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "samples/ImapIdle/.gitignore",
    "content": "ImapIdle.userprefs\nImapIdle.*.suo\npackages\n"
  },
  {
    "path": "samples/ImapIdle/ImapIdle/IdleClient.cs",
    "content": "﻿//\n// IdleClient.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2014-2024 Jeffrey Stedfast\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n\nusing MailKit;\nusing MailKit.Net.Imap;\n\nnamespace ImapIdle\n{\n\tpublic class IdleClient : IDisposable\n\t{\n\t\treadonly List<IMessageSummary> messages;\n\t\tCancellationTokenSource cancel;\n\t\tCancellationTokenSource done;\n\t\treadonly FetchRequest request;\n\t\treadonly ImapClient client;\n\t\tbool messagesArrived;\n\n\t\tpublic IdleClient ()\n\t\t{\n\t\t\tclient = new ImapClient (new ProtocolLogger (Console.OpenStandardError ()));\n\t\t\trequest = new FetchRequest (MessageSummaryItems.Full | MessageSummaryItems.UniqueId);\n\t\t\tmessages = new List<IMessageSummary> ();\n\t\t\tcancel = new CancellationTokenSource ();\n\t\t}\n\n\t\tasync Task ReconnectAsync ()\n\t\t{\n\t\t\tif (!client.IsConnected)\n\t\t\t\tawait client.ConnectAsync (Program.Host, Program.Port, Program.SslOptions, cancel.Token);\n\n\t\t\tif (!client.IsAuthenticated) {\n\t\t\t\tawait client.AuthenticateAsync (Program.Username, Program.Password, cancel.Token);\n\n\t\t\t\tawait client.Inbox.OpenAsync (FolderAccess.ReadOnly, cancel.Token);\n\t\t\t}\n\t\t}\n\n\t\tasync Task FetchMessageSummariesAsync (bool print)\n\t\t{\n\t\t\tIList<IMessageSummary> fetched;\n\n\t\t\tdo {\n\t\t\t\ttry {\n\t\t\t\t\t// fetch summary information for messages that we don't already have\n\t\t\t\t\tint startIndex = messages.Count;\n\n\t\t\t\t\tfetched = client.Inbox.Fetch (startIndex, -1, request, cancel.Token);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (ImapProtocolException) {\n\t\t\t\t\t// protocol exceptions often result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t} catch (IOException) {\n\t\t\t\t\t// I/O exceptions always result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t}\n\t\t\t} while (true);\n\n\t\t\tforeach (var message in fetched) {\n\t\t\t\tif (print)\n\t\t\t\t\tConsole.WriteLine (\"{0}: new message: {1}\", client.Inbox, message.Envelope.Subject);\n\t\t\t\tmessages.Add (message);\n\t\t\t}\n\t\t}\n\n\t\tasync Task WaitForNewMessagesAsync ()\n\t\t{\n\t\t\tdo {\n\t\t\t\ttry {\n\t\t\t\t\tif (client.Capabilities.HasFlag (ImapCapabilities.Idle)) {\n\t\t\t\t\t\t// Note: IMAP servers are only supposed to drop the connection after 30 minutes, so normally\n\t\t\t\t\t\t// we'd IDLE for a max of, say, ~29 minutes... but GMail seems to drop idle connections after\n\t\t\t\t\t\t// about 10 minutes, so we'll only idle for 9 minutes.\n\t\t\t\t\t\tdone = new CancellationTokenSource (TimeSpan.FromMinutes (9));\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait client.IdleAsync (done.Token, cancel.Token);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tdone.Dispose ();\n\t\t\t\t\t\t\tdone = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Note: we don't want to spam the IMAP server with NOOP commands, so lets wait a minute\n\t\t\t\t\t\t// between each NOOP command.\n\t\t\t\t\t\tawait Task.Delay (TimeSpan.FromMinutes (1), cancel.Token);\n\t\t\t\t\t\tawait client.NoOpAsync (cancel.Token);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (ImapProtocolException) {\n\t\t\t\t\t// protocol exceptions often result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t} catch (IOException) {\n\t\t\t\t\t// I/O exceptions always result in the client getting disconnected\n\t\t\t\t\tawait ReconnectAsync ();\n\t\t\t\t}\n\t\t\t} while (true);\n\t\t}\n\n\t\tasync Task IdleAsync ()\n\t\t{\n\t\t\tdo {\n\t\t\t\ttry {\n\t\t\t\t\tawait WaitForNewMessagesAsync ();\n\n\t\t\t\t\tif (messagesArrived) {\n\t\t\t\t\t\tawait FetchMessageSummariesAsync (true);\n\t\t\t\t\t\tmessagesArrived = false;\n\t\t\t\t\t}\n\t\t\t\t} catch (OperationCanceledException) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!cancel.IsCancellationRequested);\n\t\t}\n\n\t\tpublic async Task RunAsync ()\n\t\t{\n\t\t\t// connect to the IMAP server and get our initial list of messages\n\t\t\ttry {\n\t\t\t\tawait ReconnectAsync ();\n\t\t\t\tawait FetchMessageSummariesAsync (false);\n\t\t\t} catch (OperationCanceledException) {\n\t\t\t\tawait client.DisconnectAsync (true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Note: We capture client.Inbox here because cancelling IdleAsync() *may* require\n\t\t\t// disconnecting the IMAP client connection, and, if it does, the `client.Inbox`\n\t\t\t// property will no longer be accessible which means we won't be able to disconnect\n\t\t\t// our event handlers.\n\t\t\tvar inbox = client.Inbox;\n\n\t\t\t// keep track of changes to the number of messages in the folder (this is how we'll tell if new messages have arrived).\n\t\t\tinbox.CountChanged += OnCountChanged;\n\n\t\t\t// keep track of messages being expunged so that when the CountChanged event fires, we can tell if it's\n\t\t\t// because new messages have arrived vs messages being removed (or some combination of the two).\n\t\t\tinbox.MessageExpunged += OnMessageExpunged;\n\n\t\t\t// keep track of flag changes\n\t\t\tinbox.MessageFlagsChanged += OnMessageFlagsChanged;\n\n\t\t\tawait IdleAsync ();\n\n\t\t\tinbox.MessageFlagsChanged -= OnMessageFlagsChanged;\n\t\t\tinbox.MessageExpunged -= OnMessageExpunged;\n\t\t\tinbox.CountChanged -= OnCountChanged;\n\n\t\t\tawait client.DisconnectAsync (true);\n\t\t}\n\n\t\t// Note: the CountChanged event will fire when new messages arrive in the folder and/or when messages are expunged.\n\t\tvoid OnCountChanged (object sender, EventArgs e)\n\t\t{\n\t\t\tvar folder = (ImapFolder) sender;\n\n\t\t\t// Note: because we are keeping track of the MessageExpunged event and updating our\n\t\t\t// 'messages' list, we know that if we get a CountChanged event and folder.Count is\n\t\t\t// larger than messages.Count, then it means that new messages have arrived.\n\t\t\tif (folder.Count > messages.Count) {\n\t\t\t\tint arrived = folder.Count - messages.Count;\n\n\t\t\t\tif (arrived > 1)\n\t\t\t\t\tConsole.WriteLine (\"\\t{0} new messages have arrived.\", arrived);\n\t\t\t\telse\n\t\t\t\t\tConsole.WriteLine (\"\\t1 new message has arrived.\");\n\n\t\t\t\t// Note: your first instinct may be to fetch these new messages now, but you cannot do\n\t\t\t\t// that in this event handler (the ImapFolder is not re-entrant).\n\t\t\t\t//\n\t\t\t\t// Instead, cancel the `done` token and update our state so that we know new messages\n\t\t\t\t// have arrived. We'll fetch the summaries for these new messages later...\n\t\t\t\tmessagesArrived = true;\n\t\t\t\tdone?.Cancel ();\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageExpunged (object sender, MessageEventArgs e)\n\t\t{\n\t\t\tvar folder = (ImapFolder) sender;\n\n\t\t\tif (e.Index < messages.Count) {\n\t\t\t\tvar message = messages[e.Index];\n\n\t\t\t\tConsole.WriteLine (\"{0}: message #{1} has been expunged: {2}\", folder, e.Index, message.Envelope.Subject);\n\n\t\t\t\t// Note: If you are keeping a local cache of message information\n\t\t\t\t// (e.g. MessageSummary data) for the folder, then you'll need\n\t\t\t\t// to remove the message at e.Index.\n\t\t\t\tmessages.RemoveAt (e.Index);\n\t\t\t} else {\n\t\t\t\tConsole.WriteLine (\"{0}: message #{1} has been expunged.\", folder, e.Index);\n\t\t\t}\n\t\t}\n\n\t\tvoid OnMessageFlagsChanged (object sender, MessageFlagsChangedEventArgs e)\n\t\t{\n\t\t\tvar folder = (ImapFolder) sender;\n\n\t\t\tConsole.WriteLine (\"{0}: flags have changed for message #{1} ({2}).\", folder, e.Index, e.Flags);\n\t\t}\n\n\t\tpublic void Exit ()\n\t\t{\n\t\t\tcancel.Cancel ();\n\t\t}\n\n\t\tpublic void Dispose ()\n\t\t{\n\t\t\tclient.Dispose ();\n\t\t\tcancel.Dispose ();\n\n\t\t\tGC.SuppressFinalize (this);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapIdle/ImapIdle/ImapIdle.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net6.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>disable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"MailKit\" Version=\"4.15.1\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/ImapIdle/ImapIdle/Program.cs",
    "content": "//\n// Program.cs\n//\n// Author: Jeffrey Stedfast <jeff@xamarin.com>\n//\n// Copyright (c) 2014-2024 Jeffrey Stedfast\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nusing System;\nusing System.Threading.Tasks;\n\nusing MailKit.Security;\n\nnamespace ImapIdle {\n\tclass Program\n\t{\n\t\t// Connection-related properties\n\t\tpublic const SecureSocketOptions SslOptions = SecureSocketOptions.Auto;\n\t\tpublic const string Host = \"imap.gmail.com\";\n\t\tpublic const int Port = 993;\n\n\t\t// Authentication-related properties\n\t\tpublic const string Username = \"username@gmail.com\";\n\t\tpublic const string Password = \"password\";\n\n\t\tpublic static void Main (string[] args)\n\t\t{\n\t\t\tusing (var client = new IdleClient ()) {\n\t\t\t\tConsole.WriteLine (\"Hit any key to end the demo.\");\n\n\t\t\t\tvar idleTask = client.RunAsync ();\n\n\t\t\t\tTask.Run (() => {\n\t\t\t\t\tConsole.ReadKey (true);\n\t\t\t\t}).Wait ();\n\n\t\t\t\tclient.Exit ();\n\n\t\t\t\tidleTask.GetAwaiter ().GetResult ();\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "samples/ImapIdle/ImapIdle.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.30114.105\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ImapIdle\", \"ImapIdle\\ImapIdle.csproj\", \"{0265A920-EFF0-49F6-851C-05A4DEDBF573}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{0265A920-EFF0-49F6-851C-05A4DEDBF573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{0265A920-EFF0-49F6-851C-05A4DEDBF573}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{0265A920-EFF0-49F6-851C-05A4DEDBF573}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{0265A920-EFF0-49F6-851C-05A4DEDBF573}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {ED72CAD5-0F24-4F55-9D61-EA444046758D}\r\n\tEndGlobalSection\r\n\tGlobalSection(MonoDevelopProperties) = preSolution\r\n\t\tStartupItem = ImapIdle\\ImapIdle.csproj\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "scripts/coveralls.ps1",
    "content": "[xml]$project = Get-Content UnitTests\\UnitTests.csproj\n\n# Get the OutputPath\n$targetFramework = $project.SelectSingleNode(\"/Project/PropertyGroup/TargetFramework\")\n$binDir = Join-Path \"UnitTests\" \"bin\"\n$debugDir = Join-Path $binDir \"Debug\"\n$OutputDir = Join-Path $debugDir $targetFramework.InnerText\n\n# Upload code-coverage data to coveralls.io\n& dotnet tool run --allow-roll-forward csmacnz.Coveralls --opencover -i coverage.xml `\n\t--repoToken $env:COVERALLS_REPO_TOKEN `\n\t--useRelativePaths `\n\t--basePath $OutputDir `\n\t--commitId $env:GIT_COMMIT_SHA `\n\t--commitBranch $env:GIT_REF.Replace('refs/heads/', '') `\n\t--commitAuthor $env:GIT_ACTOR `\n\t--commitEmail $env:GIT_ACTOR_EMAIL `\n\t--commitMessage $env:GIT_COMMIT_MESSAGE `\n\t--jobId $env:COVERALLS_JOB_ID\n"
  },
  {
    "path": "scripts/test-aot-compatibility.ps1",
    "content": "param([string]$useMailKitLite)\n\n$rootDirectory = Split-Path $PSScriptRoot -Parent\n$publishOutput = dotnet publish $rootDirectory/AotCompatibility/AotCompatibility.csproj -nodeReuse:false /p:UseSharedCompilation=false /p:ExposeExperimentalFeatures=true /p:UseMailKitLite=$useMailKitLite\n\n$actualWarningCount = 0\n\nforeach ($line in $($publishOutput -split \"`r`n\"))\n{\n    if ($line -like \"*warning IL*\")\n    {\n        Write-Host $line\n\n        $actualWarningCount += 1\n    }\n}\n\npushd $rootDirectory/AotCompatibility/bin/Release/net8.0/win-x64/publish\n\nWrite-Host \"Executing test App...\"\n./AotCompatibility.exe\nWrite-Host \"Finished executing test App\"\n\nif ($LastExitCode -ne 0)\n{\n  Write-Host \"There was an error while executing AotCompatibility Test App. LastExitCode is:\", $LastExitCode\n}\n\npopd\n\nWrite-Host \"Actual warning count is:\", $actualWarningCount\n$expectedWarningCount = 0\n\n$testPassed = 0\nif ($actualWarningCount -ne $expectedWarningCount)\n{\n    $testPassed = 1\n    Write-Host \"Actual warning count:\", actualWarningCount, \"is not as expected. Expected warning count is:\", $expectedWarningCount\n}\n\nExit $testPassed\n"
  },
  {
    "path": "scripts/test.ps1",
    "content": "[CmdletBinding()]\nparam (\n    [Parameter()]\n    [string]\n    $Configuration = \"Debug\",\n    [string]\n    $GenerateCodeCoverage = \"false\"\n)\n\nWrite-Output \"Configuration:        $Configuration\"\nWrite-Output \"GenerateCodeCoverage: $GenerateCodeCoverage\"\nWrite-Output \"\"\n\n[xml]$project = Get-Content UnitTests\\UnitTests.csproj\n\n# Get the OutputPath\n$targetFramework = $project.SelectSingleNode(\"/Project/PropertyGroup/TargetFramework\")\n$OutputDir = Join-Path \"UnitTests\" \"bin\" $Configuration $targetFramework.InnerText\n$UnitTestsAssembly = Join-Path $OutputDir \"UnitTests.dll\"\n\nif ($GenerateCodeCoverage -eq 'true') {\n    Write-Output \"Instrumenting code...\"\n\n    & dotnet AltCover -i=\"$OutputDir\" --inplace -s=\"System.*\" -s=\"Microsoft.*\" -s=\"Newtonsoft.*\" -s=\"BouncyCastle.*\" -s=\"MimeKit\" -s=\"NUnit*\" -s=\"AltCover.*\" -s=\"testhost\" -s=\"UnitTests\"\n    # & dotnet AltCover Runner --recorderDirectory=$OutputDir --executable=$NUnitConsoleRunner --summary=O -- --domain:single $UnitTestsAssembly\n}\n\nWrite-Output \"Running the UnitTests\"\n\n& dotnet nunit $UnitTestsAssembly\n"
  },
  {
    "path": "scripts/update-version.ps1",
    "content": "[CmdletBinding()]\nparam (\n    [Parameter()]\n    [string] $ProjectName = \"MailKit\",\n    [string] $Version\n)\n\nfunction Update-AssemblyVersionValue {\n    param (\n        [string] $AssemblyInfoPath,\n        [string] $AttributeName,\n        [string] $Version\n    )\n\n    $pattern = \"\\[assembly:(\\s+)$AttributeName(\\s+)\\(\"\"(.*?)\"\"\\)\\]\"\n    (Get-Content $AssemblyInfoPath) | ForEach-Object {\n        $_ -creplace $pattern, \"[assembly:`$1$AttributeName`$2(\"\"$Version\"\")]\"\n    } | Set-Content $AssemblyInfoPath\n}\n\nfunction Update-AssemblyInfo {\n    param (\n        [string] $AssemblyInfoPath,\n        [string] $Version\n    )\n\n    $versionInfo = $Version.Split('.')\n    if ($versionInfo.Count -ge 2) {\n        $assemblyVersion = $versionInfo[0] + \".\" + $versionInfo[1] + \".0.0\"\n    } else {\n        $assemblyVersion = $versionInfo[0] + \".0.0.0\"\n    }\n\n    switch ($versionInfo.Count) {\n        3 { $assemblyFileVersion = $Version + \".0\" }\n        2 { $assemblyFileVersion = $Version + \".0.0\" }\n        1 { $assemblyFileVersion = $Version + \".0.0.0\" }\n        default { $assemblyFileVersion = $Version }\n    }\n\n    Write-Host \"AssemblyInformationalVersion: $assemblyFileVersion\"\n    Write-Host \"AssemblyFileVersion: $assemblyFileVersion\"\n    Write-Host \"AssemblyVersion: $assemblyVersion\"\n\n    Update-AssemblyVersionValue -AssemblyInfoPath $AssemblyInfoPath -AttributeName \"AssemblyInformationalVersion\" -Version $assemblyFileVersion\n    Update-AssemblyVersionValue -AssemblyInfoPath $AssemblyInfoPath $csharp -AttributeName \"AssemblyFileVersion\" -Version $assemblyFileVersion\n    Update-AssemblyVersionValue -AssemblyInfoPath $AssemblyInfoPath $csharp -AttributeName \"AssemblyVersion\" -Version $assemblyVersion\n}\n\nfunction Update-Project {\n    param (\n        [string] $ProjectFile,\n        [string] $Version\n    )\n\n    $project = New-Object -TypeName System.Xml.XmlDocument\n    $project.PreserveWhitespace = $True\n    $project.Load($ProjectFile)\n    $versionPrefix = $project.SelectSingleNode(\"/Project/PropertyGroup/VersionPrefix\")\n    $versionPrefix.InnerText = $Version\n    $project.Save($ProjectFile)\n}\n\nfunction Get-ProjectVersion {\n    param (\n        [string] $ProjectFile\n    )\n\n    $project = New-Object -TypeName System.Xml.XmlDocument\n    $project.Load($ProjectFile)\n    $versionPrefix = $project.SelectSingleNode(\"/Project/PropertyGroup/VersionPrefix\")\n    return $versionPrefix.InnerText\n}\n\nfunction Update-NuGetPackageVersion {\n    param (\n        [string] $NuSpecFile,\n        [string] $Version,\n        [string] $MimeKitPackageName,\n        [string] $MimeKitVersion\n    )\n\n    $nuspec = New-Object -TypeName System.Xml.XmlDocument\n    $nuspec.PreserveWhitespace = $True\n    $nuspec.Load($NuSpecFile)\n    $xmlns = $nuspec.package.GetAttribute(\"xmlns\")\n    $ns = New-Object System.Xml.XmlNamespaceManager($nuspec.NameTable)\n    $ns.AddNamespace(\"ns\", $xmlns)\n    $packageVersion = $nuspec.SelectSingleNode(\"ns:package/ns:metadata/ns:version\", $ns)\n    $packageVersion.InnerText = $Version\n\n    Write-Host \"Updating nuget dependencies: $MimeKitPackageName version=$MimeKitVersion\"\n    $dependencies = $nuspec.SelectNodes(\"ns:package/ns:metadata/ns:dependencies/ns:group/ns:dependency[@id='$MimeKitPackageName']\", $ns)\n    foreach ($dependency in $dependencies) {\n        $dependency.version = $MimeKitVersion\n    }\n\n    $nuspec.Save($NuSpecFile)\n}\n\nfunction Update-SamplePackageReferenceVersion {\n    param (\n        [string] $ProjectFile,\n        [string] $PackageName,\n        [string] $PackageVersion\n    )\n\n    $project = New-Object -TypeName System.Xml.XmlDocument\n    $project.PreserveWhitespace = $True\n    $project.Load($ProjectFile)\n    $xmlns = $project.Project.GetAttribute(\"xmlns\")\n    if ($null -ne $xmlns) {\n        $ns = New-Object System.Xml.XmlNamespaceManager($project.NameTable)\n        $ns.AddNamespace(\"ns\", $xmlns)\n        $packageReference = $project.SelectSingleNode(\"ns:Project/ns:ItemGroup/ns:PackageReference[@Include='$PackageName']\", $ns)\n    } else {\n        $packageReference = $project.SelectSingleNode(\"/Project/ItemGroup/PackageReference[@Include='$PackageName']\")\n    }\n    $packageReference.Version = $PackageVersion\n    $project.Save($ProjectFile)\n}\n\n$projectFile = Join-Path \"submodules\" \"MimeKit\" \"MimeKit\" \"MimeKit.csproj\"\n$projectFile = Resolve-Path $projectFile\n$mimekitVersion = Get-ProjectVersion -ProjectFile $projectFile\nWrite-Host \"MimeKit Version: $mimekitVersion\"\n\n$assemblyInfo = Join-Path $ProjectName \"Properties\" \"AssemblyInfo.cs\"\n$assemblyInfo = Resolve-Path $assemblyInfo\nWrite-Host \"Updating $assemblyInfo...\"\nUpdate-AssemblyInfo -AssemblyInfoPath $assemblyInfo -Version $Version\n\n$fileName = $ProjectName + \".csproj\"\n$projectFile = Join-Path $ProjectName $fileName\n$projectFile = Resolve-Path $projectFile\nWrite-Host \"Updating $projectFile...\"\nUpdate-Project -ProjectFile $projectFile -Version $Version\n\n$fileName = $ProjectName + \"Lite.csproj\"\n$projectFile = Join-Path $ProjectName $fileName\n$projectFile = Resolve-Path $projectFile\nWrite-Host \"Updating $projectFile...\"\nUpdate-Project -ProjectFile $projectFile -Version $Version\n\n$fileName = $ProjectName + \".nuspec\"\n$nuspec = Join-Path \"nuget\" $fileName\n$nuspec = Resolve-Path $nuspec\nWrite-Host \"Updating $nuspec...\"\nUpdate-NuGetPackageVersion -NuSpecFile $nuspec -Version $Version -MimeKitPackageName \"MimeKit\" -MimeKitVersion $mimekitVersion\n\n$fileName = $ProjectName + \"Lite.nuspec\"\n$nuspec = Join-Path \"nuget\" $fileName\n$nuspec = Resolve-Path $nuspec\nWrite-Host \"Updating $nuspec...\"\nUpdate-NuGetPackageVersion -NuSpecFile $nuspec -Version $Version -MimeKitPackageName \"MimeKitLite\" -MimeKitVersion $mimekitVersion\n\n$sampleProjects = Get-ChildItem \"samples\" -Filter \"*.csproj\" -Recurse\nforeach ($projectFile in $sampleProjects) {\n    $projectFile = Resolve-Path $projectFile\n    Write-Host \"Updating $projectFile...\"\n    Update-SamplePackageReferenceVersion -ProjectFile $projectFile -PackageName $ProjectName -PackageVersion $Version\n}\n"
  }
]